From 8b565b6ef324d2eda29f0446bad6aa6494927652 Mon Sep 17 00:00:00 2001 From: Nick Downing Date: Tue, 1 Dec 2015 03:13:00 +1100 Subject: [PATCH] 20030827 release --- bak.bat | 2 + bin/banked/fsck | Bin 19333 -> 19344 bytes bin/banked/mkfs | Bin 15694 -> 15822 bytes bin/boot.bin | Bin 1920 -> 1920 bytes bin/checksum | Bin 128 -> 128 bytes bin/kernel.bin | Bin 83726 -> 333713 bytes bin/large/fsck | Bin 17699 -> 17720 bytes bin/large/mkfs | Bin 14685 -> 14813 bytes bin/mkboot%.ucp | 133 + bin/mkboot.ucp | 140 +- bin/uzboot.bin | Bin 109161 -> 133194 bytes bin/uzboot.gz | Bin 107359 -> 131392 bytes bin/uzidisk.dat | Bin 4194304 -> 4194304 bytes ...tilities - 8 Producing Binary MO Files.htm | 459 + doc/ycp_puttext.txt | 664 + include/sys/types.h | 106 + lib/c0b.lst | 11 +- lib/c0b.rel | 23 +- lib/c0b.rst | 45 +- lib/c0l.lst | 10 +- lib/c0l.rel | 19 +- lib/c0l.rst | 335 + lib/relcb/abort.rel | 1 - lib/relcb/alloca.rel | 1 - lib/relcb/asctime.rel | 1 - lib/relcb/assert.rel | 1 - lib/relcb/atexit.rel | 1 - lib/relcb/atoi.rel | 1 - lib/relcb/atol.rel | 1 - lib/relcb/bsearch.rel | 1 - lib/relcb/calloc.rel | 1 - lib/relcb/clock.rel | 1 - lib/relcb/closedir.rel | 1 - lib/relcb/convtime.rel | 1 - lib/relcb/crypt.rel | 1 - lib/relcb/ctime.rel | 1 - lib/relcb/ctype.rel | 1 - lib/relcb/difftime.rel | 1 - lib/relcb/error.rel | 1 - lib/relcb/etime.rel | 1 - lib/relcb/execl.rel | 1 - lib/relcb/execle.rel | 1 - lib/relcb/execlp.rel | 1 - lib/relcb/execlpe.rel | 1 - lib/relcb/exect.rel | 1 - lib/relcb/execv.rel | 1 - lib/relcb/execvp.rel | 1 - lib/relcb/execvpe.rel | 1 - lib/relcb/exit.rel | 1 - lib/relcb/fclose.rel | 1 - lib/relcb/fflush.rel | 1 - lib/relcb/fgetc.rel | 1 - lib/relcb/fgetgren.rel | 1 - lib/relcb/fgetpwen.rel | 1 - lib/relcb/fgets.rel | 1 - lib/relcb/fopen.rel | 1 - lib/relcb/fprintf.rel | 1 - lib/relcb/fputc.rel | 1 - lib/relcb/fputs.rel | 1 - lib/relcb/fread.rel | 1 - lib/relcb/free.rel | 1 - lib/relcb/fscanf.rel | 1 - lib/relcb/ftell.rel | 1 - lib/relcb/fwrite.rel | 1 - lib/relcb/getcwd.rel | 1 - lib/relcb/getenv.rel | 1 - lib/relcb/getgrent.rel | 1 - lib/relcb/getgrgid.rel | 1 - lib/relcb/getgrnam.rel | 1 - lib/relcb/getopt.rel | 1 - lib/relcb/getpass.rel | 1 - lib/relcb/getpw.rel | 1 - lib/relcb/getpwent.rel | 1 - lib/relcb/getpwnam.rel | 1 - lib/relcb/getpwuid.rel | 1 - lib/relcb/gets.rel | 1 - lib/relcb/gmtime.rel | 1 - lib/relcb/initgrup.rel | 1 - lib/relcb/isatty.rel | 1 - lib/relcb/itoa.rel | 1 - lib/relcb/localtim.rel | 1 - lib/relcb/lsearch.rel | 1 - lib/relcb/lstat.rel | 1 - lib/relcb/ltoa.rel | 1 - lib/relcb/ltostr.rel | 1 - lib/relcb/malloc.rel | 1 - lib/relcb/memccpy.rel | 1 - lib/relcb/memchr.rel | 1 - lib/relcb/memcmp.rel | 1 - lib/relcb/memcpy.rel | 1 - lib/relcb/memmove.rel | 1 - lib/relcb/memset.rel | 1 - lib/relcb/mkdir.rel | 1 - lib/relcb/mktime.rel | 1 - lib/relcb/opendir.rel | 1 - lib/relcb/perror.rel | 1 - lib/relcb/popen.rel | 1 - lib/relcb/printf.rel | 1 - lib/relcb/putenv.rel | 1 - lib/relcb/putgetch.rel | 1 - lib/relcb/putpwent.rel | 1 - lib/relcb/qsort.rel | 1 - lib/relcb/rand.rel | 1 - lib/relcb/readdir.rel | 1 - lib/relcb/readlink.rel | 1 - lib/relcb/realloc.rel | 1 - lib/relcb/regerror.rel | 1 - lib/relcb/regexp.rel | 1 - lib/relcb/regsub.rel | 1 - lib/relcb/rename.rel | 1 - lib/relcb/rewind.rel | 1 - lib/relcb/rewindir.rel | 1 - lib/relcb/rmdir.rel | 1 - lib/relcb/scanf.rel | 1 - lib/relcb/setbuff.rel | 1 - lib/relcb/setenv.rel | 1 - lib/relcb/setgrent.rel | 1 - lib/relcb/setpwent.rel | 1 - lib/relcb/setvbuff.rel | 1 - lib/relcb/sleep.rel | 1 - lib/relcb/sprintf.rel | 1 - lib/relcb/sscanf.rel | 1 - lib/relcb/stdio0.rel | 1 - lib/relcb/strcat.rel | 1 - lib/relcb/strchr.rel | 1 - lib/relcb/strcmp.rel | 1 - lib/relcb/strcpy.rel | 1 - lib/relcb/strcspn.rel | 1 - lib/relcb/strdup.rel | 1 - lib/relcb/stricmp.rel | 1 - lib/relcb/strlen.rel | 1 - lib/relcb/strncat.rel | 1 - lib/relcb/strncmp.rel | 1 - lib/relcb/strncpy.rel | 1 - lib/relcb/strnicmp.rel | 1 - lib/relcb/strpbrk.rel | 1 - lib/relcb/strrchr.rel | 1 - lib/relcb/strsep.rel | 1 - lib/relcb/strspn.rel | 1 - lib/relcb/strstr.rel | 1 - lib/relcb/strtod.rel | 1 - lib/relcb/strtok.rel | 1 - lib/relcb/strtol.rel | 1 - lib/relcb/strtoul.rel | 1 - lib/relcb/system.rel | 1 - lib/relcb/termcap.rel | 1 - lib/relcb/tmpnam.rel | 1 - lib/relcb/tparam.rel | 1 - lib/relcb/ttyname.rel | 1 - lib/relcb/tzset.rel | 1 - lib/relcb/ultoa.rel | 1 - lib/relcb/ungetc.rel | 1 - lib/relcb/utsname.rel | 1 - lib/relcb/vfprintf.rel | 1 - lib/relcb/vfscanf.rel | 1 - lib/relcb/vprintf.rel | 1 - lib/relcb/vscanf.rel | 1 - lib/relcb/vsprintf.rel | 1 - lib/relcb/vsscanf.rel | 1 - lib/relcb/xitoa.rel | 1 - lib/relcb/xltoa.rel | 1 - lib/relcl/abort.rel | 1 - lib/relcl/alloca.rel | 1 - lib/relcl/asctime.rel | 1 - lib/relcl/assert.rel | 1 - lib/relcl/atexit.rel | 1 - lib/relcl/atoi.rel | 1 - lib/relcl/atol.rel | 1 - lib/relcl/bsearch.rel | 1 - lib/relcl/calloc.rel | 1 - lib/relcl/clock.rel | 1 - lib/relcl/closedir.rel | 1 - lib/relcl/convtime.rel | 1 - lib/relcl/crypt.rel | 1 - lib/relcl/ctime.rel | 1 - lib/relcl/ctype.rel | 1 - lib/relcl/difftime.rel | 1 - lib/relcl/error.rel | 1 - lib/relcl/etime.rel | 1 - lib/relcl/execl.rel | 1 - lib/relcl/execle.rel | 1 - lib/relcl/execlp.rel | 1 - lib/relcl/execlpe.rel | 1 - lib/relcl/exect.rel | 1 - lib/relcl/execv.rel | 1 - lib/relcl/execvp.rel | 1 - lib/relcl/execvpe.rel | 1 - lib/relcl/exit.rel | 1 - lib/relcl/fclose.rel | 1 - lib/relcl/fflush.rel | 1 - lib/relcl/fgetc.rel | 1 - lib/relcl/fgetgren.rel | 1 - lib/relcl/fgetpwen.rel | 1 - lib/relcl/fgets.rel | 1 - lib/relcl/fopen.rel | 1 - lib/relcl/fprintf.rel | 1 - lib/relcl/fputc.rel | 1 - lib/relcl/fputs.rel | 1 - lib/relcl/fread.rel | 1 - lib/relcl/free.rel | 1 - lib/relcl/fscanf.rel | 1 - lib/relcl/ftell.rel | 1 - lib/relcl/fwrite.rel | 1 - lib/relcl/getcwd.rel | 1 - lib/relcl/getenv.rel | 1 - lib/relcl/getgrent.rel | 1 - lib/relcl/getgrgid.rel | 1 - lib/relcl/getgrnam.rel | 1 - lib/relcl/getopt.rel | 1 - lib/relcl/getpass.rel | 1 - lib/relcl/getpw.rel | 1 - lib/relcl/getpwent.rel | 1 - lib/relcl/getpwnam.rel | 1 - lib/relcl/getpwuid.rel | 1 - lib/relcl/gets.rel | 1 - lib/relcl/gmtime.rel | 1 - lib/relcl/initgrup.rel | 1 - lib/relcl/isatty.rel | 1 - lib/relcl/itoa.rel | 1 - lib/relcl/localtim.rel | 1 - lib/relcl/lsearch.rel | 1 - lib/relcl/lstat.rel | 1 - lib/relcl/ltoa.rel | 1 - lib/relcl/ltostr.rel | 1 - lib/relcl/malloc.rel | 1 - lib/relcl/memccpy.rel | 1 - lib/relcl/memchr.rel | 1 - lib/relcl/memcmp.rel | 1 - lib/relcl/memcpy.rel | 1 - lib/relcl/memmove.rel | 1 - lib/relcl/memset.rel | 1 - lib/relcl/mkdir.rel | 1 - lib/relcl/mktime.rel | 1 - lib/relcl/opendir.rel | 1 - lib/relcl/perror.rel | 1 - lib/relcl/popen.rel | 1 - lib/relcl/printf.rel | 1 - lib/relcl/putenv.rel | 1 - lib/relcl/putgetch.rel | 1 - lib/relcl/putpwent.rel | 1 - lib/relcl/qsort.rel | 1 - lib/relcl/rand.rel | 1 - lib/relcl/readdir.rel | 1 - lib/relcl/readlink.rel | 1 - lib/relcl/realloc.rel | 1 - lib/relcl/regerror.rel | 1 - lib/relcl/regexp.rel | 1 - lib/relcl/regsub.rel | 1 - lib/relcl/rename.rel | 1 - lib/relcl/rewind.rel | 1 - lib/relcl/rewindir.rel | 1 - lib/relcl/rmdir.rel | 1 - lib/relcl/scanf.rel | 1 - lib/relcl/setbuff.rel | 1 - lib/relcl/setenv.rel | 1 - lib/relcl/setgrent.rel | 1 - lib/relcl/setpwent.rel | 1 - lib/relcl/setvbuff.rel | 1 - lib/relcl/sleep.rel | 1 - lib/relcl/sprintf.rel | 1 - lib/relcl/sscanf.rel | 1 - lib/relcl/stdio0.rel | 1 - lib/relcl/strcat.rel | 1 - lib/relcl/strchr.rel | 1 - lib/relcl/strcmp.rel | 1 - lib/relcl/strcpy.rel | 1 - lib/relcl/strcspn.rel | 1 - lib/relcl/strdup.rel | 1 - lib/relcl/stricmp.rel | 1 - lib/relcl/strlen.rel | 1 - lib/relcl/strncat.rel | 1 - lib/relcl/strncmp.rel | 1 - lib/relcl/strncpy.rel | 1 - lib/relcl/strnicmp.rel | 1 - lib/relcl/strpbrk.rel | 1 - lib/relcl/strrchr.rel | 1 - lib/relcl/strsep.rel | 1 - lib/relcl/strspn.rel | 1 - lib/relcl/strstr.rel | 1 - lib/relcl/strtod.rel | 1 - lib/relcl/strtok.rel | 1 - lib/relcl/strtol.rel | 1 - lib/relcl/strtoul.rel | 1 - lib/relcl/system.rel | 1 - lib/relcl/termcap.rel | 1 - lib/relcl/tmpnam.rel | 1 - lib/relcl/tparam.rel | 1 - lib/relcl/ttyname.rel | 1 - lib/relcl/tzset.rel | 1 - lib/relcl/ultoa.rel | 1 - lib/relcl/ungetc.rel | 1 - lib/relcl/utsname.rel | 1 - lib/relcl/vfprintf.rel | 1 - lib/relcl/vfscanf.rel | 1 - lib/relcl/vprintf.rel | 1 - lib/relcl/vscanf.rel | 1 - lib/relcl/vsprintf.rel | 1 - lib/relcl/vsscanf.rel | 1 - lib/relcl/xitoa.rel | 1 - lib/relcl/xltoa.rel | 1 - relnotes/20030827.txt | 229 + src/bin/as-z80.exe | Bin 122932 -> 110644 bytes src/bin/bd.exe | Bin 69673 -> 69680 bytes src/bin/bin2avr.exe | Bin 73774 -> 73781 bytes src/bin/bin2c.exe | Bin 69676 -> 69683 bytes src/bin/bmp2txt.exe | Bin 90158 -> 102453 bytes src/bin/chs2cmd.exe | Bin 65582 -> 77877 bytes src/bin/cp.exe | Bin 0 -> 77312 bytes src/bin/cproto.sh | 2 + src/bin/cr.exe | Bin 0 -> 73776 bytes src/bin/cygwin1.dll | Bin 971080 -> 970082 bytes src/bin/echo.exe | Bin 0 -> 24064 bytes src/bin/false.exe | Bin 0 -> 61491 bytes src/bin/foster.exe | Bin 0 -> 69684 bytes src/bin/fsck.exe | Bin 86059 -> 86066 bytes src/bin/hfmdump.exe | Bin 61486 -> 77877 bytes src/bin/hfmtool.exe | Bin 110638 -> 131125 bytes src/bin/hfmwidth.exe | Bin 61487 -> 73782 bytes src/bin/ihex2bin.exe | Bin 73775 -> 73782 bytes src/bin/lib-z80.exe | Bin 0 -> 77885 bytes src/bin/link-z80.exe | Bin 122936 -> 127039 bytes src/bin/ln.exe | Bin 0 -> 60416 bytes src/bin/loginsh.exe | Bin 0 -> 73781 bytes src/bin/make.exe | Bin 188416 -> 254016 bytes src/bin/mkdir.exe | Bin 0 -> 30720 bytes src/bin/mkfs.exe | Bin 81963 -> 81970 bytes src/bin/mklink-b.ba% | 30 + src/bin/mklink-l.ba% | 28 + src/bin/mknbat-b.ba% | 34 + src/bin/mknbat-b.bat | 2 +- src/bin/mknbat-l.ba% | 34 + src/bin/mknbat-l.bat | 2 +- src/bin/p.pif | Bin 0 -> 2855 bytes src/bin/po2c.exe | Bin 0 -> 110642 bytes src/bin/restool.exe | Bin 0 -> 118837 bytes src/bin/rm.exe | Bin 0 -> 65024 bytes src/bin/rmdir.exe | Bin 0 -> 25088 bytes src/bin/tee.exe | Bin 0 -> 24064 bytes src/bin/test.exe | Bin 0 -> 33792 bytes src/bin/touch.exe | Bin 73772 -> 73779 bytes src/bin/tradcpp.exe | Bin 0 -> 94208 bytes src/bin/true.exe | Bin 0 -> 61490 bytes src/bin/txt2chs.exe | Bin 73774 -> 90165 bytes src/bin/ucp.exe | Bin 155690 -> 155697 bytes src/bin/xgettext.sh | 2 + src/fsutil/bd.exe | Bin 69673 -> 69680 bytes src/fsutil/bd.i86 | 255 + src/fsutil/bd.lst | 556 + src/fsutil/bd.map | 79 +- src/fsutil/bd.obj | Bin 0 -> 4242 bytes src/fsutil/bd.rel | 1 - src/fsutil/bd.rst | 556 + src/fsutil/bd.s01 | 491 + src/fsutil/boot.c | 458 +- src/fsutil/boot.c% | 243 + src/fsutil/devhd.obj | Bin 0 -> 4445 bytes src/fsutil/devio.obj | Bin 0 -> 12749 bytes src/fsutil/devmisc.obj | Bin 0 -> 4543 bytes src/fsutil/devtty.obj | Bin 0 -> 9908 bytes src/fsutil/filesys.obj | Bin 0 -> 28036 bytes src/fsutil/fsck.c | 9 +- src/fsutil/fsck.exe | Bin 86059 -> 86066 bytes src/fsutil/fsck.i86 | 636 + src/fsutil/fsck.lst | 4939 + src/fsutil/fsck.map | 125 +- src/fsutil/fsck.obj | Bin 0 -> 28879 bytes src/fsutil/fsck.rel | 2773 +- src/fsutil/fsck.rst | 4939 + src/fsutil/fsck.s01 | 4459 + src/fsutil/hdasm.obj | Bin 0 -> 1981 bytes src/fsutil/machdep.obj | Bin 0 -> 6591 bytes src/fsutil/main.obj | Bin 0 -> 2248 bytes src/fsutil/mkfs.exe | Bin 81963 -> 81970 bytes src/fsutil/mkfs.i86 | 522 + src/fsutil/mkfs.lst | 4282 + src/fsutil/mkfs.map | 125 +- src/fsutil/mkfs.obj | Bin 0 -> 17055 bytes src/fsutil/mkfs.rel | 479 +- src/fsutil/mkfs.rst | 4282 + src/fsutil/mkfs.s01 | 4043 + src/fsutil/mklink-b.bat | 30 + src/fsutil/mklink-l.bat | 28 + src/fsutil/process.obj | Bin 0 -> 12082 bytes src/fsutil/scall1.obj | Bin 0 -> 28187 bytes src/fsutil/scall2.obj | Bin 0 -> 12236 bytes src/fsutil/ucp.exe | Bin 155690 -> 155697 bytes src/fsutil/ucp.map | 12 +- src/fsutil/ucp.obj | Bin 0 -> 15162 bytes src/fsutil/ucpsub.obj | Bin 0 -> 22088 bytes src/fsutil/utils.lst | 148 + src/fsutil/utils.obj | Bin 0 -> 2080 bytes src/fsutil/utils.rel | 1 - src/fsutil/utils.rst | 148 + src/fsutil/utils.s01 | 122 + src/fsutil/xfs.obj | Bin 0 -> 16073 bytes src/fsutil/xip.obj | Bin 0 -> 17088 bytes src/gboot/gboot.asm | 89 +- src/gboot/gboot.new | 1095 + src/gboot/gboot.old | 1182 + src/kernel/uzi/unix.h | 5 +- src/libc/c0b.asm | 4 +- src/libc/c0l.asm | 4 +- src/make.d/arch.mk | 12 + src/make.d/host.mk | 23 + src/make.d/top_defs.mk | 63 + src/make.d/top_gens.mk | 775 + src/make.d/z80/arch_defs.mk | 27 + src/make.d/z80/arch_gens.mk | 105 + src/mkfont/bmp2txt.cpp | 22 +- src/mkfont/bmp2txt.exe | Bin 90158 -> 102453 bytes src/mkfont/bmp2txt.obj | Bin 20515 -> 19759 bytes src/mkfont/chs2cmd.cpp | 2 +- src/mkfont/chs2cmd.exe | Bin 65582 -> 77877 bytes src/mkfont/chs2cmd.obj | Bin 17912 -> 17634 bytes src/mkfont/hfmdump.exe | Bin 61486 -> 77877 bytes src/mkfont/hfmdump.obj | Bin 7727 -> 7742 bytes src/mkfont/hfmlib.obj | Bin 19058 -> 19073 bytes src/mkfont/hfmtool.cpp | 2 +- src/mkfont/hfmtool.exe | Bin 110638 -> 131125 bytes src/mkfont/hfmtool.obj | Bin 27891 -> 27613 bytes src/mkfont/hfmwidth.exe | Bin 61487 -> 73782 bytes src/mkfont/hfmwidth.obj | Bin 4145 -> 4160 bytes src/mkfont/hycache.cpp | 32 +- src/mkfont/hycache.h | 10 +- src/mkfont/hycache.obj | Bin 19507 -> 19515 bytes src/mkfont/hyfile.cpp | 33 +- src/mkfont/hyfile.h | 16 + src/mkfont/hyfile.obj | Bin 15249 -> 15740 bytes src/mkfont/hyfs.cpp | 37 + src/mkfont/hyfs.obj | Bin 12178 -> 12830 bytes src/mkfont/hyimage.obj | Bin 26911 -> 26926 bytes src/mkfont/hylist.cpp | 14 +- src/mkfont/hylist.obj | Bin 14535 -> 14544 bytes src/mkfont/hymem.cpp | 134 + src/mkfont/hymem.h | 95 + src/mkfont/hymem.obj | Bin 0 -> 11783 bytes src/mkfont/hystring.cpp | 167 + src/mkfont/hystring.h | 2 + src/mkfont/hystring.obj | Bin 13571 -> 15435 bytes src/mkfont/main.c | 1124 + src/mkfont/main.i | 6826 + src/mkfont/main.l | 6809 + src/mkfont/n.bat | 16 +- src/mkfont/po2c.cpp | 617 + src/mkfont/po2c.exe | Bin 0 -> 110642 bytes src/mkfont/po2c.h | 28 + src/mkfont/po2c.obj | Bin 0 -> 30194 bytes src/mkfont/restool.cpp | 920 + src/mkfont/restool.exe | Bin 0 -> 118837 bytes src/mkfont/restool.obj | Bin 0 -> 35883 bytes src/mkfont/txt2chs.cpp | 14 +- src/mkfont/txt2chs.exe | Bin 73774 -> 90165 bytes src/mkfont/txt2chs.obj | Bin 25402 -> 25115 bytes src/mkfont/x.bat | 14 + src/mkfont/x.h | 34 + src/mkfont/x.lib | 52 + src/mkfont/x.po | 85 + src/mkfont/x.rel | 36 + src/mkfont/x.txt | 1 + src/mkutil/as-z80/as-z80.exe | Bin 122932 -> 110644 bytes src/mkutil/as-z80/as-z80.map | 998 +- src/mkutil/as-z80/asdata.c | 2 + src/mkutil/as-z80/asdata.obj | Bin 0 -> 5248 bytes src/mkutil/as-z80/asexpr.obj | Bin 0 -> 17692 bytes src/mkutil/as-z80/aslex.obj | Bin 0 -> 7382 bytes src/mkutil/as-z80/aslist.obj | Bin 0 -> 19093 bytes src/mkutil/as-z80/asmain.c | 71 +- src/mkutil/as-z80/asmain.obj | Bin 0 -> 29354 bytes src/mkutil/as-z80/asout.c | 18 + src/mkutil/as-z80/asout.obj | Bin 0 -> 21762 bytes src/mkutil/as-z80/assubr.c | 6 + src/mkutil/as-z80/assubr.obj | Bin 0 -> 5958 bytes src/mkutil/as-z80/assym.obj | Bin 0 -> 7171 bytes src/mkutil/as-z80/asxxxx.h | 9 + src/mkutil/as-z80/z80adr.c | 16 + src/mkutil/as-z80/z80adr.obj | Bin 0 -> 4818 bytes src/mkutil/as-z80/z80ext.obj | Bin 0 -> 1046 bytes src/mkutil/as-z80/z80mch.obj | Bin 0 -> 14551 bytes src/mkutil/as-z80/z80pst.c | 3 +- src/mkutil/as-z80/z80pst.obj | Bin 0 -> 8478 bytes src/mkutil/bin2avr.exe | Bin 73774 -> 73781 bytes src/mkutil/bin2avr.obj | Bin 0 -> 4344 bytes src/mkutil/bin2c.exe | Bin 69676 -> 69683 bytes src/mkutil/bin2c.obj | Bin 0 -> 4105 bytes src/mkutil/cpp/a | 11 + src/mkutil/cpp/alloca.c | 478 + src/mkutil/cpp/alloca.obj | Bin 0 -> 2592 bytes src/mkutil/cpp/ansidecl.h | 295 + src/mkutil/cpp/config.h | 27 + src/mkutil/cpp/configargs.h | 3 + src/mkutil/cpp/cppdefault.c | 83 + src/mkutil/cpp/cppdefault.h | 112 + src/mkutil/cpp/cppdefault.obj | Bin 0 -> 8836 bytes src/mkutil/cpp/cpperror.c | 300 + src/mkutil/cpp/cpperror.obj | Bin 0 -> 18537 bytes src/mkutil/cpp/cppexp.c | 889 + src/mkutil/cpp/cppexp.obj | Bin 0 -> 29195 bytes src/mkutil/cpp/cppfiles.c | 1187 + src/mkutil/cpp/cppfiles.obj | Bin 0 -> 29765 bytes src/mkutil/cpp/cpphash.c | 130 + src/mkutil/cpp/cpphash.h | 485 + src/mkutil/cpp/cpphash.obj | Bin 0 -> 12790 bytes src/mkutil/cpp/cppinit.c | 2014 + src/mkutil/cpp/cppinit.i | 301693 +++++++++++++++ src/mkutil/cpp/cppinit.obj | Bin 0 -> 58103 bytes src/mkutil/cpp/cpplex.c | 2122 + src/mkutil/cpp/cpplex.obj | Bin 0 -> 59389 bytes src/mkutil/cpp/cpplib.c | 1903 + src/mkutil/cpp/cpplib.h | 607 + src/mkutil/cpp/cpplib.obj | Bin 0 -> 51532 bytes src/mkutil/cpp/cppmacro.c | 1631 + src/mkutil/cpp/cppmacro.obj | Bin 0 -> 41212 bytes src/mkutil/cpp/cppmain.c | 490 + src/mkutil/cpp/cppmain.obj | Bin 0 -> 22454 bytes src/mkutil/cpp/cppspec.c | 240 + src/mkutil/cpp/cppspec.obj | Bin 0 -> 13785 bytes src/mkutil/cpp/defaults.h | 471 + src/mkutil/cpp/except.h | 206 + src/mkutil/cpp/flags.h | 644 + src/mkutil/cpp/gcc.c | 7001 + src/mkutil/cpp/gcc.h | 55 + src/mkutil/cpp/hashtable.h | 90 + src/mkutil/cpp/hex.c | 111 + src/mkutil/cpp/hex.obj | Bin 0 -> 1295 bytes src/mkutil/cpp/hwint.h | 153 + src/mkutil/cpp/intl.h | 61 + src/mkutil/cpp/lbasename.c | 88 + src/mkutil/cpp/lbasename.obj | Bin 0 -> 1128 bytes src/mkutil/cpp/libiberty.h | 317 + src/mkutil/cpp/line-map.c | 235 + src/mkutil/cpp/line-map.h | 119 + src/mkutil/cpp/makefile | 80 + src/mkutil/cpp/mkdeps.c | 291 + src/mkutil/cpp/mkdeps.h | 62 + src/mkutil/cpp/mkdeps.obj | Bin 0 -> 14251 bytes src/mkutil/cpp/multilib.h | 0 src/mkutil/cpp/obstack.c | 593 + src/mkutil/cpp/obstack.h | 599 + src/mkutil/cpp/obstack.obj | Bin 0 -> 6160 bytes src/mkutil/cpp/param.h | 51 + src/mkutil/cpp/prefix.h | 31 + src/mkutil/cpp/safe-ctype.c | 163 + src/mkutil/cpp/safe-ctype.h | 103 + src/mkutil/cpp/safe-ctype.obj | Bin 0 -> 1931 bytes src/mkutil/cpp/specs.h | 0 src/mkutil/cpp/splay-tree.h | 154 + src/mkutil/cpp/symcat.h | 49 + src/mkutil/cpp/system.h | 639 + src/mkutil/cpp/version.c | 4 + src/mkutil/cpp/version.h | 4 + src/mkutil/cpp/version.obj | Bin 0 -> 807 bytes src/mkutil/cpp/xexit.c | 53 + src/mkutil/cpp/xexit.obj | Bin 0 -> 1070 bytes src/mkutil/cpp/xmalloc.c | 183 + src/mkutil/cpp/xmalloc.obj | Bin 0 -> 3074 bytes src/mkutil/cpp/xstrdup.c | 34 + src/mkutil/cpp/xstrdup.obj | Bin 0 -> 1050 bytes src/mkutil/cpp/xstrerror.c | 67 + src/mkutil/cpp/xstrerror.obj | Bin 0 -> 1390 bytes src/mkutil/cr.exe | Bin 0 -> 73776 bytes src/mkutil/cr.obj | Bin 0 -> 2806 bytes src/mkutil/crc.exe | Bin 69674 -> 69681 bytes src/mkutil/crc.obj | Bin 0 -> 3528 bytes src/mkutil/false.c | 6 + src/mkutil/false.exe | Bin 0 -> 61491 bytes src/mkutil/false.obj | Bin 0 -> 817 bytes src/mkutil/foster.c | 130 + src/mkutil/foster.exe | Bin 0 -> 69684 bytes src/mkutil/foster.obj | Bin 0 -> 11101 bytes src/mkutil/ihex2bin.exe | Bin 73775 -> 73782 bytes src/mkutil/ihex2bin.obj | Bin 0 -> 7464 bytes src/mkutil/lib-z80/a.lbr | 2 + src/mkutil/lib-z80/a.lib | 6 + src/mkutil/lib-z80/a.rel | 255 + src/mkutil/lib-z80/a_lib/a.rel | 255 + src/mkutil/lib-z80/a_lib/b.rel | 199 + src/mkutil/lib-z80/aslib.h | 925 + src/mkutil/lib-z80/b.rel | 199 + src/mkutil/lib-z80/lbdata.c | 521 + src/mkutil/lib-z80/lbdata.obj | Bin 0 -> 5147 bytes src/mkutil/lib-z80/lblex.c | 583 + src/mkutil/lib-z80/lblex.obj | Bin 0 -> 8511 bytes src/mkutil/lib-z80/lbmain.c | 1029 + src/mkutil/lib-z80/lbmain.obj | Bin 0 -> 16470 bytes src/mkutil/lib-z80/lbsym.c | 317 + src/mkutil/lib-z80/lbsym.obj | Bin 0 -> 2191 bytes src/mkutil/lib-z80/lib-z80.exe | Bin 0 -> 77885 bytes src/mkutil/lib-z80/lib-z80.lnk | 9 + src/mkutil/lib-z80/lib-z80.map | 583 + src/mkutil/lib-z80/n.bat | 18 + src/mkutil/lib-z80/out/a.lib | 6 + src/mkutil/lib-z80/out/a_lib/a.rel | 255 + src/mkutil/lib-z80/out/a_lib/b.rel | 199 + src/mkutil/lib-z80/out/a_lib/c.rel | 0 src/mkutil/lib-z80/rel/a.rel | 255 + src/mkutil/lib-z80/rel/a.rxx | 255 + src/mkutil/lib-z80/rel/b.rel | 199 + src/mkutil/lib-z80/rel/b.rxx | 199 + src/mkutil/lib-z80/t.bat | 3 + src/mkutil/lib-z80/x.lbr | 3 + src/mkutil/lib-z80/x.lib | 6 + src/mkutil/lib-z80/x_lib/a.rel | 255 + src/mkutil/lib-z80/x_lib/b.rel | 199 + src/mkutil/link-z80/ASLINK.H | 932 + src/mkutil/link-z80/intelhex.pdf | Bin 0 -> 29218 bytes src/mkutil/link-z80/link-z80.exe | Bin 122936 -> 127039 bytes src/mkutil/link-z80/link-z80.map | 1054 +- src/mkutil/link-z80/lkarea.c | 136 +- src/mkutil/link-z80/lkarea.obj | Bin 0 -> 8220 bytes src/mkutil/link-z80/lkdata.c | 13 + src/mkutil/link-z80/lkdata.obj | Bin 0 -> 5207 bytes src/mkutil/link-z80/lkeval.obj | Bin 0 -> 7537 bytes src/mkutil/link-z80/lkhead.c | 25 + src/mkutil/link-z80/lkhead.obj | Bin 0 -> 2946 bytes src/mkutil/link-z80/lklex.c | 20 + src/mkutil/link-z80/lklex.obj | Bin 0 -> 8278 bytes src/mkutil/link-z80/lklibr.c | 769 +- src/mkutil/link-z80/lklibr.c% | 626 + src/mkutil/link-z80/lklibr.obj | Bin 0 -> 11821 bytes src/mkutil/link-z80/lklist.c | 40 + src/mkutil/link-z80/lklist.obj | Bin 0 -> 18570 bytes src/mkutil/link-z80/lkmain.c | 308 +- src/mkutil/link-z80/lkmain.obj | Bin 0 -> 30058 bytes src/mkutil/link-z80/lkout.c | 13 + src/mkutil/link-z80/lkout.obj | Bin 0 -> 7258 bytes src/mkutil/link-z80/lkrloc.obj | Bin 0 -> 20078 bytes src/mkutil/link-z80/lksym.c | 57 +- src/mkutil/link-z80/lksym.obj | Bin 0 -> 8400 bytes src/mkutil/loginsh.c | 231 + src/mkutil/loginsh.exe | Bin 0 -> 73781 bytes src/mkutil/loginsh.obj | Bin 0 -> 12452 bytes src/mkutil/make/AUTHORS | 57 + src/mkutil/make/COPYING | 340 + src/mkutil/make/CVS/Entries | 83 + src/mkutil/make/CVS/Entries.Log | 7 + src/mkutil/make/CVS/Repository | 1 + src/mkutil/make/CVS/Root | 1 + src/mkutil/make/ChangeLog | 1130 + src/mkutil/make/ChangeLog.1 | 4980 + src/mkutil/make/ChangeLog.2 | 6648 + src/mkutil/make/INSTALL | 187 + src/mkutil/make/Makefile.DOS.template | 533 + src/mkutil/make/Makefile.am | 160 + src/mkutil/make/Makefile.ami | 305 + src/mkutil/make/NEWS | 877 + src/mkutil/make/NMakefile | 2737 + src/mkutil/make/NMakefile.template | 124 + src/mkutil/make/README.Amiga | 61 + src/mkutil/make/README.DOS.template | 323 + src/mkutil/make/README.OS2.template | 159 + src/mkutil/make/README.W32.template | 241 + src/mkutil/make/README.customs | 95 + src/mkutil/make/README.cvs | 110 + src/mkutil/make/README.template | 164 + src/mkutil/make/SCOPTIONS | 13 + src/mkutil/make/SMakefile.template | 213 + src/mkutil/make/TODO.private | 140 + src/mkutil/make/a | 2140 + src/mkutil/make/acinclude.m4 | 164 + src/mkutil/make/alloca.c | 503 + src/mkutil/make/amiga.c | 121 + src/mkutil/make/amiga.h | 22 + src/mkutil/make/ar.c | 310 + src/mkutil/make/arscan.c | 840 + src/mkutil/make/build.template | 83 + src/mkutil/make/build_w32.bat | 142 + src/mkutil/make/commands.c | 587 + src/mkutil/make/commands.h | 42 + src/mkutil/make/config.ami.template | 317 + src/mkutil/make/config.h | 399 + src/mkutil/make/config.h-vms.template | 403 + src/mkutil/make/config.h.W32 | 399 + src/mkutil/make/config.h.W32.template | 399 + src/mkutil/make/config/.cvsignore | 4 + src/mkutil/make/config/CVS/Entries | 5 + src/mkutil/make/config/CVS/Repository | 1 + src/mkutil/make/config/CVS/Root | 1 + src/mkutil/make/config/ChangeLog | 19 + src/mkutil/make/config/Makefile.am | 8 + src/mkutil/make/config/dospaths.m4 | 21 + src/mkutil/make/configh.dos.template | 94 + src/mkutil/make/configure.bat | 44 + src/mkutil/make/configure.in | 395 + src/mkutil/make/debug.h | 41 + src/mkutil/make/default.c | 591 + src/mkutil/make/dep.h | 78 + src/mkutil/make/dir.c | 1192 + src/mkutil/make/doc/.cvsignore | 7 + src/mkutil/make/doc/CVS/Entries | 4 + src/mkutil/make/doc/CVS/Repository | 1 + src/mkutil/make/doc/CVS/Root | 1 + src/mkutil/make/doc/Makefile.am | 22 + src/mkutil/make/doc/make.texi | 10321 + src/mkutil/make/dosbuild.bat | 42 + src/mkutil/make/expand.c | 570 + src/mkutil/make/file.c | 821 + src/mkutil/make/filedef.h | 199 + src/mkutil/make/function.c | 2041 + src/mkutil/make/function.c% | 2018 + src/mkutil/make/getloadavg.c | 1030 + src/mkutil/make/getopt.c | 1030 + src/mkutil/make/getopt.h | 133 + src/mkutil/make/getopt1.c | 180 + src/mkutil/make/gettext.h | 59 + src/mkutil/make/glob/.cvsignore | 2 + src/mkutil/make/glob/COPYING.LIB | 481 + src/mkutil/make/glob/CVS/Entries | 13 + src/mkutil/make/glob/CVS/Repository | 1 + src/mkutil/make/glob/CVS/Root | 1 + src/mkutil/make/glob/ChangeLog | 142 + src/mkutil/make/glob/Makefile.am | 14 + src/mkutil/make/glob/Makefile.ami | 69 + src/mkutil/make/glob/SCOPTIONS | 13 + src/mkutil/make/glob/SMakefile | 69 + src/mkutil/make/glob/configure.bat | 26 + src/mkutil/make/glob/fnmatch.c | 488 + src/mkutil/make/glob/fnmatch.h | 84 + src/mkutil/make/glob/glob.c | 1428 + src/mkutil/make/glob/glob.h | 209 + src/mkutil/make/hash.c | 333 + src/mkutil/make/hash.h | 233 + src/mkutil/make/i18n/CVS/Entries | 1 + src/mkutil/make/i18n/CVS/Repository | 1 + src/mkutil/make/i18n/CVS/Root | 1 + src/mkutil/make/implicit.c | 630 + src/mkutil/make/job.c | 3479 + src/mkutil/make/job.h | 104 + src/mkutil/make/main.c | 2830 + src/mkutil/make/maintMakefile | 228 + src/mkutil/make/make.1 | 291 + src/mkutil/make/make.h | 593 + src/mkutil/make/make.lnk | 5 + src/mkutil/make/makefile.com | 138 + src/mkutil/make/makefile.vms | 147 + src/mkutil/make/misc.c | 830 + src/mkutil/make/n.bat | 16 + src/mkutil/make/po/.cvsignore | 6 + src/mkutil/make/po/CVS/Entries | 6 + src/mkutil/make/po/CVS/Repository | 1 + src/mkutil/make/po/CVS/Root | 1 + src/mkutil/make/po/ChangeLog | 25 + src/mkutil/make/po/LINGUAS | 5 + src/mkutil/make/po/Makevars | 25 + src/mkutil/make/po/POTFILES.in | 25 + src/mkutil/make/read.c | 3147 + src/mkutil/make/readme.vms | 183 + src/mkutil/make/remake.c | 1416 + src/mkutil/make/remote-cstms.c | 302 + src/mkutil/make/remote-stub.c | 101 + src/mkutil/make/rule.c | 603 + src/mkutil/make/rule.h | 61 + src/mkutil/make/signame.c | 251 + src/mkutil/make/subproc.bat | 6 + src/mkutil/make/tests/.cvsignore | 1 + src/mkutil/make/tests/COPYING | 339 + src/mkutil/make/tests/CVS/Entries | 10 + src/mkutil/make/tests/CVS/Entries.Log | 1 + src/mkutil/make/tests/CVS/Repository | 1 + src/mkutil/make/tests/CVS/Root | 1 + src/mkutil/make/tests/ChangeLog | 400 + src/mkutil/make/tests/NEWS | 161 + src/mkutil/make/tests/README | 79 + src/mkutil/make/tests/mkshadow | 42 + src/mkutil/make/tests/run_make_tests | 2 + src/mkutil/make/tests/run_make_tests.pl | 274 + src/mkutil/make/tests/scripts/CVS/Entries | 2 + src/mkutil/make/tests/scripts/CVS/Entries.Log | 6 + src/mkutil/make/tests/scripts/CVS/Repository | 1 + src/mkutil/make/tests/scripts/CVS/Root | 1 + .../make/tests/scripts/features/CVS/Entries | 26 + .../tests/scripts/features/CVS/Repository | 1 + .../make/tests/scripts/features/CVS/Root | 1 + .../make/tests/scripts/features/comments | 35 + .../make/tests/scripts/features/conditionals | 100 + .../make/tests/scripts/features/default_names | 65 + .../make/tests/scripts/features/double_colon | 127 + .../make/tests/scripts/features/echoing | 90 + src/mkutil/make/tests/scripts/features/errors | 93 + src/mkutil/make/tests/scripts/features/escape | 60 + src/mkutil/make/tests/scripts/features/export | 250 + .../make/tests/scripts/features/include | 61 + .../make/tests/scripts/features/mult_rules | 78 + .../make/tests/scripts/features/mult_targets | 46 + .../make/tests/scripts/features/order_only | 112 + .../make/tests/scripts/features/override | 34 + .../make/tests/scripts/features/parallelism | 100 + .../tests/scripts/features/patspecific_vars | 64 + .../make/tests/scripts/features/quoting | 32 + .../make/tests/scripts/features/recursion | 61 + .../make/tests/scripts/features/reinvoke | 86 + .../tests/scripts/features/statipattrules | 72 + .../make/tests/scripts/features/targetvars | 270 + .../make/tests/scripts/features/varnesting | 34 + src/mkutil/make/tests/scripts/features/vpath | 62 + src/mkutil/make/tests/scripts/features/vpath2 | 45 + .../make/tests/scripts/features/vpathgpath | 66 + .../make/tests/scripts/features/vpathplus | 128 + .../make/tests/scripts/functions/CVS/Entries | 23 + .../tests/scripts/functions/CVS/Repository | 1 + .../make/tests/scripts/functions/CVS/Root | 1 + .../make/tests/scripts/functions/addprefix | 44 + .../make/tests/scripts/functions/addsuffix | 36 + .../make/tests/scripts/functions/basename | 44 + src/mkutil/make/tests/scripts/functions/call | 99 + src/mkutil/make/tests/scripts/functions/dir | 44 + src/mkutil/make/tests/scripts/functions/error | 63 + src/mkutil/make/tests/scripts/functions/eval | 112 + .../make/tests/scripts/functions/filter-out | 28 + .../make/tests/scripts/functions/findstring | 47 + .../make/tests/scripts/functions/foreach | 53 + src/mkutil/make/tests/scripts/functions/if | 31 + src/mkutil/make/tests/scripts/functions/join | 44 + .../make/tests/scripts/functions/notdir | 44 + .../make/tests/scripts/functions/origin | 66 + src/mkutil/make/tests/scripts/functions/sort | 55 + src/mkutil/make/tests/scripts/functions/strip | 57 + .../make/tests/scripts/functions/substitution | 37 + .../make/tests/scripts/functions/suffix | 57 + src/mkutil/make/tests/scripts/functions/value | 30 + .../make/tests/scripts/functions/warning | 63 + .../make/tests/scripts/functions/wildcard | 105 + src/mkutil/make/tests/scripts/functions/word | 91 + .../make/tests/scripts/misc/CVS/Entries | 5 + .../make/tests/scripts/misc/CVS/Repository | 1 + src/mkutil/make/tests/scripts/misc/CVS/Root | 1 + src/mkutil/make/tests/scripts/misc/general1 | 51 + src/mkutil/make/tests/scripts/misc/general2 | 50 + src/mkutil/make/tests/scripts/misc/general3 | 58 + src/mkutil/make/tests/scripts/misc/general4 | 31 + .../make/tests/scripts/options/CVS/Entries | 12 + .../make/tests/scripts/options/CVS/Repository | 1 + .../make/tests/scripts/options/CVS/Root | 1 + src/mkutil/make/tests/scripts/options/dash-B | 43 + src/mkutil/make/tests/scripts/options/dash-C | 48 + src/mkutil/make/tests/scripts/options/dash-I | 57 + src/mkutil/make/tests/scripts/options/dash-e | 24 + src/mkutil/make/tests/scripts/options/dash-f | 85 + src/mkutil/make/tests/scripts/options/dash-k | 100 + src/mkutil/make/tests/scripts/options/dash-l | 55 + src/mkutil/make/tests/scripts/options/dash-n | 70 + src/mkutil/make/tests/scripts/options/dash-q | 70 + src/mkutil/make/tests/scripts/options/dash-t | 58 + src/mkutil/make/tests/scripts/options/general | 35 + .../make/tests/scripts/targets/CVS/Entries | 8 + .../make/tests/scripts/targets/CVS/Repository | 1 + .../make/tests/scripts/targets/CVS/Root | 1 + src/mkutil/make/tests/scripts/targets/DEFAULT | 53 + src/mkutil/make/tests/scripts/targets/FORCE | 52 + .../make/tests/scripts/targets/INTERMEDIATE | 108 + src/mkutil/make/tests/scripts/targets/PHONY | 62 + .../make/tests/scripts/targets/SECONDARY | 112 + src/mkutil/make/tests/scripts/targets/SILENT | 51 + src/mkutil/make/tests/scripts/targets/clean | 51 + src/mkutil/make/tests/scripts/test_template | 70 + .../make/tests/scripts/variables/CURDIR | 20 + .../make/tests/scripts/variables/CVS/Entries | 10 + .../tests/scripts/variables/CVS/Repository | 1 + .../make/tests/scripts/variables/CVS/Root | 1 + src/mkutil/make/tests/scripts/variables/MAKE | 33 + .../make/tests/scripts/variables/MAKECMDGOALS | 52 + .../make/tests/scripts/variables/MAKEFILES | 34 + .../tests/scripts/variables/MAKEFILE_LIST | 30 + .../make/tests/scripts/variables/MAKELEVEL | 34 + .../make/tests/scripts/variables/automatic | 81 + .../make/tests/scripts/variables/flavors | 85 + .../make/tests/scripts/variables/special | 68 + src/mkutil/make/tests/test_driver.pl | 1113 + src/mkutil/make/variable.c | 1421 + src/mkutil/make/variable.h | 199 + src/mkutil/make/version.c | 17 + src/mkutil/make/vmsdir.h | 61 + src/mkutil/make/vmsfunctions.c | 252 + src/mkutil/make/vmsify.c | 979 + src/mkutil/make/vpath.c | 586 + src/mkutil/make/w32/CVS/Entries | 2 + src/mkutil/make/w32/CVS/Entries.Log | 3 + src/mkutil/make/w32/CVS/Repository | 1 + src/mkutil/make/w32/CVS/Root | 1 + src/mkutil/make/w32/compat/CVS/Entries | 2 + src/mkutil/make/w32/compat/CVS/Repository | 1 + src/mkutil/make/w32/compat/CVS/Root | 1 + src/mkutil/make/w32/compat/dirent.c | 188 + src/mkutil/make/w32/include/CVS/Entries | 5 + src/mkutil/make/w32/include/CVS/Repository | 1 + src/mkutil/make/w32/include/CVS/Root | 1 + src/mkutil/make/w32/include/dirent.h | 37 + src/mkutil/make/w32/include/pathstuff.h | 9 + src/mkutil/make/w32/include/sub_proc.h | 47 + src/mkutil/make/w32/include/w32err.h | 10 + src/mkutil/make/w32/pathstuff.c | 238 + src/mkutil/make/w32/subproc/CVS/Entries | 7 + src/mkutil/make/w32/subproc/CVS/Repository | 1 + src/mkutil/make/w32/subproc/CVS/Root | 1 + src/mkutil/make/w32/subproc/NMakefile | 60 + src/mkutil/make/w32/subproc/build.bat | 10 + src/mkutil/make/w32/subproc/misc.c | 65 + src/mkutil/make/w32/subproc/proc.h | 13 + src/mkutil/make/w32/subproc/sub_proc.c | 1207 + src/mkutil/make/w32/subproc/w32err.c | 51 + src/mkutil/n.bat | 16 + src/mkutil/touch.exe | Bin 73772 -> 73779 bytes src/mkutil/touch.obj | Bin 0 -> 3262 bytes src/mkutil/tradcpp/alloca.c | 478 + src/mkutil/tradcpp/alloca.obj | Bin 0 -> 2592 bytes src/mkutil/tradcpp/ansidecl.h | 295 + src/mkutil/tradcpp/config.h | 23 + src/mkutil/tradcpp/cppdefault.c | 83 + src/mkutil/tradcpp/cppdefault.h | 112 + src/mkutil/tradcpp/cppdefault.obj | Bin 0 -> 8836 bytes src/mkutil/tradcpp/defaults.h | 471 + src/mkutil/tradcpp/hex.c | 111 + src/mkutil/tradcpp/hex.obj | Bin 0 -> 1295 bytes src/mkutil/tradcpp/hwint.h | 153 + src/mkutil/tradcpp/intl.h | 61 + src/mkutil/tradcpp/lbasename.c | 88 + src/mkutil/tradcpp/lbasename.obj | Bin 0 -> 1128 bytes src/mkutil/tradcpp/libiberty.h | 317 + src/mkutil/tradcpp/makefile | 55 + src/mkutil/tradcpp/mkdeps.c | 291 + src/mkutil/tradcpp/mkdeps.h | 62 + src/mkutil/tradcpp/mkdeps.obj | Bin 0 -> 14251 bytes src/mkutil/tradcpp/param.h | 51 + src/mkutil/tradcpp/safe-ctype.c | 163 + src/mkutil/tradcpp/safe-ctype.h | 103 + src/mkutil/tradcpp/safe-ctype.obj | Bin 0 -> 1931 bytes src/mkutil/tradcpp/symcat.h | 49 + src/mkutil/tradcpp/system.h | 637 + src/mkutil/tradcpp/tradcif.c | 1731 + src/mkutil/tradcpp/tradcif.obj | Bin 0 -> 29547 bytes src/mkutil/tradcpp/tradcif.y | 567 + src/mkutil/tradcpp/tradcpp.c | 5363 + src/mkutil/tradcpp/tradcpp.exe | Bin 0 -> 94208 bytes src/mkutil/tradcpp/tradcpp.h | 45 + src/mkutil/tradcpp/tradcpp.obj | Bin 0 -> 64722 bytes src/mkutil/tradcpp/version.c | 4 + src/mkutil/tradcpp/version.h | 4 + src/mkutil/tradcpp/version.obj | Bin 0 -> 807 bytes src/mkutil/tradcpp/xexit.c | 53 + src/mkutil/tradcpp/xexit.obj | Bin 0 -> 1070 bytes src/mkutil/tradcpp/xmalloc.c | 183 + src/mkutil/tradcpp/xmalloc.obj | Bin 0 -> 3074 bytes src/mkutil/tradcpp/xstrdup.c | 34 + src/mkutil/tradcpp/xstrdup.obj | Bin 0 -> 1050 bytes src/mkutil/true.c | 6 + src/mkutil/true.exe | Bin 0 -> 61490 bytes src/mkutil/true.obj | Bin 0 -> 813 bytes src/mkutil/w32munge.c | 309 + src/nos/auto.mk | 36 + src/nos/ax25/auto.mk | 14 + src/nos/ax25/ax25.c | 414 + src/nos/ax25/ax25cmd.c | 584 + src/nos/ax25/ax25hdr.c | 106 + src/nos/ax25/ax25mail.c | 115 + src/nos/ax25/ax25subr.c | 243 + src/nos/ax25/ax25user.c | 217 + src/nos/ax25/axheard.c | 221 + src/nos/ax25/axsock.c | 519 + src/nos/ax25/kiss.c | 144 + src/nos/ax25/lapb.c | 699 + src/nos/ax25/lapbtime.c | 109 + src/nos/ax25/makefile | 10 + src/nos/bin/boot.bin | Bin 0 -> 2048 bytes src/nos/bin/net.bin | Bin 0 -> 333713 bytes src/nos/c.sh | 15 + src/nos/clean.sh | 16 + src/nos/clients/auto.mk | 20 + src/nos/clients/bootp.c | 358 + src/nos/clients/finger.c | 92 + src/nos/clients/ftpcli.c | 1427 + src/nos/clients/lterm.c | 126 + src/nos/clients/makefile | 10 + src/nos/clients/nntpcli.c | 739 + src/nos/clients/popcli.c | 478 + src/nos/clients/smtpcli.c | 952 + src/nos/clients/telnet.c | 425 + src/nos/clients/tip.c | 96 + src/nos/crt/!readme! | 410 + src/nos/crt/N9.PMM | 9 + src/nos/crt/abort.c | 16 + src/nos/crt/alloca-l.h | 55 + src/nos/crt/alloca.c | 53 + src/nos/crt/asctime.c | 59 + src/nos/crt/assert.c | 30 + src/nos/crt/atexit.c | 71 + src/nos/crt/atoi.c | 14 + src/nos/crt/atol.c | 14 + src/nos/crt/bsearch.c | 37 + src/nos/crt/build-b.ban | 876 + src/nos/crt/build-l.ban | 876 + src/nos/crt/calloc.c | 28 + src/nos/crt/clock.c | 15 + src/nos/crt/closedir.c | 26 + src/nos/crt/convtime.c | 64 + src/nos/crt/crt0b.S | 301 + src/nos/crt/crt0l.S | 305 + src/nos/crt/crt_banked.lbr | 144 + src/nos/crt/crt_large.lbr | 144 + src/nos/crt/crypt.c | 64 + src/nos/crt/ctime.c | 11 + src/nos/crt/ctype.c | 67 + src/nos/crt/cvt.h | 21 + src/nos/crt/difftime.c | 22 + src/nos/crt/environ.h | 12 + src/nos/crt/error.c | 57 + src/nos/crt/etime.c | 83 + src/nos/crt/exec.h | 112 + src/nos/crt/execl.c | 65 + src/nos/crt/execle.c | 26 + src/nos/crt/execlp.c | 21 + src/nos/crt/execlpe.c | 26 + src/nos/crt/exect.c | 18 + src/nos/crt/execv.c | 17 + src/nos/crt/execvp.c | 17 + src/nos/crt/execvpe.c | 18 + src/nos/crt/exit.c | 14 + src/nos/crt/fclose.c | 48 + src/nos/crt/fflush.c | 71 + src/nos/crt/fgetc.c | 44 + src/nos/crt/fgetgren.c | 17 + src/nos/crt/fgetpwen.c | 17 + src/nos/crt/fgets.c | 36 + src/nos/crt/fopen.c | 131 + src/nos/crt/fprintf.c | 40 + src/nos/crt/fputc.c | 49 + src/nos/crt/fputs.c | 27 + src/nos/crt/fputter.c | 51 + src/nos/crt/fread.c | 62 + src/nos/crt/free.c | 45 + src/nos/crt/free.c$ | 148 + src/nos/crt/fscanf.c | 25 + src/nos/crt/ftell.c | 20 + src/nos/crt/fwrite.c | 70 + src/nos/crt/getcwd.c | 103 + src/nos/crt/getenv.c | 27 + src/nos/crt/getgrent.c | 87 + src/nos/crt/getgrgid.c | 21 + src/nos/crt/getgrnam.c | 25 + src/nos/crt/getopt.c | 66 + src/nos/crt/getpass.c | 70 + src/nos/crt/getpw.c | 29 + src/nos/crt/getpwent.c | 70 + src/nos/crt/getpwnam.c | 27 + src/nos/crt/getpwuid.c | 21 + src/nos/crt/gets.c | 39 + src/nos/crt/gmtime.c | 141 + src/nos/crt/grp-l.h | 21 + src/nos/crt/initgrup.c | 35 + src/nos/crt/io64180.inc | 155 + src/nos/crt/isatty.c | 13 + src/nos/crt/itoa.c | 199 + src/nos/crt/liberror.src | 42 + src/nos/crt/localtim.c | 14 + src/nos/crt/longjmpb.S | 104 + src/nos/crt/longjmpl.S | 19 + src/nos/crt/lsearch.c | 39 + src/nos/crt/lseek.c$ | 32 + src/nos/crt/lstat.c | 21 + src/nos/crt/ltoa.c | 22 + src/nos/crt/ltostr.c | 24 + src/nos/crt/malloc-l.h | 33 + src/nos/crt/malloc-l.h$ | 53 + src/nos/crt/malloc.c | 73 + src/nos/crt/malloc.c$ | 305 + src/nos/crt/mem-l.h | 16 + src/nos/crt/memccpy.c | 27 + src/nos/crt/memchr.c | 26 + src/nos/crt/memcmp.c | 67 + src/nos/crt/memcpy.c | 44 + src/nos/crt/memmove.c | 78 + src/nos/crt/memset.c | 51 + src/nos/crt/mkdir.c | 12 + src/nos/crt/mktime.c | 18 + src/nos/crt/n.bat | 12 + src/nos/crt/n.baty | 12 + src/nos/crt/n.xlb | 142 + src/nos/crt/opendir.c | 40 + src/nos/crt/passwd.h | 28 + src/nos/crt/perror.asm | 132 + src/nos/crt/perror.c | 29 + src/nos/crt/popen.c | 52 + src/nos/crt/printf.c | 36 + src/nos/crt/printf.h | 42 + src/nos/crt/putenv.c | 55 + src/nos/crt/putgetch.c | 28 + src/nos/crt/putpwent.c | 23 + src/nos/crt/qsort.c | 141 + src/nos/crt/rand.c | 70 + src/nos/crt/readdir.c | 34 + src/nos/crt/readlink.c | 20 + src/nos/crt/realloc.c | 39 + src/nos/crt/realloc.c$ | 32 + src/nos/crt/regerror.c | 18 + src/nos/crt/regexp.c | 1086 + src/nos/crt/regsub.c | 80 + src/nos/crt/rename.c | 16 + src/nos/crt/rewind.c | 54 + src/nos/crt/rewindir.c | 22 + src/nos/crt/rmdir.c | 51 + src/nos/crt/scanf.c | 24 + src/nos/crt/scanf.h | 27 + src/nos/crt/setbuff.c | 36 + src/nos/crt/setenv.c | 88 + src/nos/crt/setgrent.c | 33 + src/nos/crt/setjmp.c$ | 48 + src/nos/crt/setjmp.msx | 126 + src/nos/crt/setjmpb.S | 99 + src/nos/crt/setjmpl.S | 19 + src/nos/crt/setpwent.c | 35 + src/nos/crt/setvbuff.c | 38 + src/nos/crt/sleep.c | 26 + src/nos/crt/sprintf.c | 50 + src/nos/crt/sputter.c | 30 + src/nos/crt/sscanf.c | 31 + src/nos/crt/stdio-l.h | 50 + src/nos/crt/stdio0.c | 69 + src/nos/crt/strcat.c | 19 + src/nos/crt/strchr.c | 26 + src/nos/crt/strcmp.c | 24 + src/nos/crt/strcpy.c | 18 + src/nos/crt/strcspn.c | 29 + src/nos/crt/strdup.c | 23 + src/nos/crt/stricmp.c | 29 + src/nos/crt/string-l.h | 34 + src/nos/crt/strlen.c | 33 + src/nos/crt/strncat.c | 28 + src/nos/crt/strncmp.c | 25 + src/nos/crt/strncpy.c | 30 + src/nos/crt/strnicmp.c | 31 + src/nos/crt/strpbrk.c | 24 + src/nos/crt/strrchr.c | 27 + src/nos/crt/strsep.c | 27 + src/nos/crt/strspn.c | 34 + src/nos/crt/strstr.c | 57 + src/nos/crt/strtod.c | 96 + src/nos/crt/strtok.c | 54 + src/nos/crt/strtol.c | 30 + src/nos/crt/strtoul.c | 74 + src/nos/crt/system.c | 42 + src/nos/crt/termcap.c | 651 + src/nos/crt/termcap.src | 225 + src/nos/crt/time-l.h | 24 + src/nos/crt/tmpnam.c | 48 + src/nos/crt/tparam.c | 286 + src/nos/crt/ttyname.c | 45 + src/nos/crt/tzset.c | 35 + src/nos/crt/ultoa.c | 22 + src/nos/crt/ungetc.c | 30 + src/nos/crt/unix.h$ | 440 + src/nos/crt/utsname.c | 39 + src/nos/crt/vfprintf.c | 287 + src/nos/crt/vfscanf.c | 375 + src/nos/crt/vprinter.c | 322 + src/nos/crt/vprintf.c | 25 + src/nos/crt/vscanf.c | 14 + src/nos/crt/vsprintf.c | 43 + src/nos/crt/vsscanf.c | 21 + src/nos/crt/xitoa.c | 14 + src/nos/crt/xltoa.c | 20 + src/nos/doc/bmexe332.zip | Bin 0 -> 29697 bytes src/nos/doc/bmexe332/BM.DOC | 595 + src/nos/doc/bmexe332/BM.EXE | Bin 0 -> 33500 bytes src/nos/doc/bmexe332/BM.MM | 344 + src/nos/doc/bmpgp01.zip | Bin 0 -> 75610 bytes src/nos/doc/bmpgp01/BM.DOC | 525 + src/nos/doc/bmpgp01/BM.EXE | Bin 0 -> 33337 bytes src/nos/doc/bmpgp01/BM.H | 149 + src/nos/doc/bmpgp01/BM.RC | 42 + src/nos/doc/bmpgp01/BMUTIL.C | 1398 + src/nos/doc/bmpgp01/FILE_ID.DIZ | 11 + src/nos/doc/bmpgp01/GETOPT.C | 78 + src/nos/doc/bmpgp01/HEADER.C | 56 + src/nos/doc/bmpgp01/HEADER.H | 14 + src/nos/doc/bmpgp01/MAIN.C | 1590 + src/nos/doc/bmpgp01/MAKEFILE | 39 + src/nos/doc/bmpgp01/PC.C | 302 + src/nos/doc/bmpgp01/PGP.C | 221 + src/nos/doc/bmpgp01/SEND.C | 1459 + src/nos/doc/bmpgp01/SIGNATUR.SIG | 150 + src/nos/doc/bmpgp01/WILDMAT.C | 136 + src/nos/doc/intronos.zip | Bin 0 -> 23055 bytes src/nos/doc/intronos/INTRONOS.TXT | 1308 + src/nos/doc/intronos/README.NOW | 38 + src/nos/doc/ka9qbgn.zip | Bin 0 -> 175735 bytes src/nos/doc/ka9qbgn/BM.TXT | 586 + src/nos/doc/ka9qbgn/CHANGES.LOG | 21 + src/nos/doc/ka9qbgn/IPAX25.TXT | 693 + src/nos/doc/ka9qbgn/KISS.TXT | 554 + src/nos/doc/ka9qbgn/MAILBOX.TXT | 792 + src/nos/doc/ka9qbgn/NEWUSER.TXT | 2875 + src/nos/doc/ka9qbgn/NOSCMD16.TXT | 714 + src/nos/doc/ka9qbgn/NRMAN.TXT | 423 + src/nos/doc/ka9qbgn/README | 184 + src/nos/doc/ka9qbgn/RSPF.TXT | 1174 + src/nos/doc/ka9qbgn/TUTORIAL.TXT | 1706 + src/nos/doc/ka9qbgn/USERMAN.TXT | 3420 + src/nos/doc/man_9106.zip | Bin 0 -> 51510 bytes src/nos/doc/man_9106/KA9QNOS.TXT | 4488 + src/nos/doc/rurtcp.zip | Bin 0 -> 140848 bytes src/nos/doc/rurtcp/FILE_ID.DIZ | 20 + src/nos/doc/rurtcp/RURTCPP.ZIP | Bin 0 -> 140235 bytes src/nos/doc/rurtcp/rurtcpp/RURTCP.EXE | Bin 0 -> 256298 bytes src/nos/drivers/arcnet.c | 118 + src/nos/drivers/dma.c | 440 + src/nos/drivers/drsi.c | 1114 + src/nos/drivers/eagle.c | 843 + src/nos/drivers/enet.c | 127 + src/nos/drivers/hapn.c | 503 + src/nos/drivers/hs.c | 717 + src/nos/drivers/pc100.c | 512 + src/nos/drivers/pi.c | 1439 + src/nos/drivers/pktdrvr.c | 495 + src/nos/dump/arcdump.c | 47 + src/nos/dump/arpdump.c | 78 + src/nos/dump/auto.mk | 16 + src/nos/dump/ax25dump.c | 188 + src/nos/dump/enetdump.c | 53 + src/nos/dump/icmpdump.c | 76 + src/nos/dump/ipdump.c | 119 + src/nos/dump/kissdump.c | 72 + src/nos/dump/makefile | 10 + src/nos/dump/nrdump.c | 116 + src/nos/dump/ripdump.c | 60 + src/nos/dump/tcpdump.c | 85 + src/nos/dump/trace.c | 359 + src/nos/dump/udpdump.c | 61 + src/nos/filesys/auto.mk | 321 + src/nos/filesys/devio.c | 820 + src/nos/filesys/execve.c | 614 + src/nos/filesys/filesys.c | 2034 + src/nos/filesys/makefile | 10 + src/nos/filesys/maxmin.c | 116 + src/nos/filesys/process.c | 230 + src/nos/filesys/rtc.c | 54 + src/nos/filesys/scall1.c | 1526 + src/nos/filesys/scall2.c | 642 + src/nos/filesys/systrace.c | 369 + src/nos/filesys/usrmem.c | 73 + src/nos/filesys/xfs.c | 1074 + src/nos/filesys/xip.c | 1527 + src/nos/g.sh | 15 + src/nos/gboot/build.ban | 35 + src/nos/gboot/checksum.dat | 2 + src/nos/gboot/clears.inc | 50 + src/nos/gboot/copyr.inc | 312 + src/nos/gboot/diag.inc | 132 + src/nos/gboot/gboot.S | 1301 + src/nos/gboot/gboot.lnk | 6 + src/nos/gboot/gboot.sav | 1276 + src/nos/gboot/io64180.inc | 155 + src/nos/gboot/n.ba% | 8 + src/nos/gboot/n.sh | 13 + src/nos/gboot/s.sh | 3 + src/nos/gboot/uzboot.asm | 67 + src/nos/gboot/uzboot.lnk | 12 + src/nos/gboot/uzdata.asm | 22 + src/nos/gboot/uzfile.asm | 1255 + src/nos/gboot/uzmain.asm | 233 + src/nos/iar/BANKCALLDIRECT!.S | 48 + src/nos/iar/BANKCALLDIRECT.S | 77 + src/nos/iar/BANKCALLDIRECTEXAF!.S | 55 + src/nos/iar/BANKCALLDIRECTEXAF.S | 55 + src/nos/iar/BANKLEAVE32!.S | 40 + src/nos/iar/BANKLEAVE32.S | 79 + src/nos/iar/BANKLEAVEDIRECT!.S | 43 + src/nos/iar/BANKLEAVEDIRECT.S | 84 + src/nos/iar/BFCANDASG.S | 22 + src/nos/iar/BFCLSHASG.S | 22 + src/nos/iar/BFCMULASG.S | 22 + src/nos/iar/BFCORASG.S | 22 + src/nos/iar/BFCRETVAL.S | 31 + src/nos/iar/BFCSHIFTUP.S | 18 + src/nos/iar/BFCXORASG.S | 22 + src/nos/iar/BFMASKEDLD.S | 17 + src/nos/iar/BFMASKEDST.S | 19 + src/nos/iar/BFSADDASG.S | 24 + src/nos/iar/BFSANDASG.S | 24 + src/nos/iar/BFSCDIVASG.S | 28 + src/nos/iar/BFSCEXT.S | 18 + src/nos/iar/BFSCLDSHIFTDOWN.S | 22 + src/nos/iar/BFSCMODASG.S | 28 + src/nos/iar/BFSCRSHASG.S | 26 + src/nos/iar/BFSLSHASG.S | 26 + src/nos/iar/BFSMULASG.S | 24 + src/nos/iar/BFSNEGASG.S | 24 + src/nos/iar/BFSORASG.S | 24 + src/nos/iar/BFSPOSTDEC.S | 24 + src/nos/iar/BFSPOSTINC.S | 24 + src/nos/iar/BFSPREDEC.S | 24 + src/nos/iar/BFSPREINC.S | 24 + src/nos/iar/BFSRETVAL.S | 40 + src/nos/iar/BFSSDIVASG.S | 29 + src/nos/iar/BFSSEXT.S | 22 + src/nos/iar/BFSSHIFTUP.S | 18 + src/nos/iar/BFSSLDSHIFTDOWN.S | 25 + src/nos/iar/BFSSMODASG.S | 29 + src/nos/iar/BFSSRSHASG.S | 29 + src/nos/iar/BFSSUBASG.S | 24 + src/nos/iar/BFSXORASG.S | 24 + src/nos/iar/BFUCDIVASG.S | 28 + src/nos/iar/BFUCLDSHIFTDOWN.S | 20 + src/nos/iar/BFUCMODASG.S | 28 + src/nos/iar/BFUCRSHASG.S | 22 + src/nos/iar/BFUSDIVASG.S | 29 + src/nos/iar/BFUSLDSHIFTDOWN.S | 22 + src/nos/iar/BFUSMODASG.S | 29 + src/nos/iar/BFUSRSHASG.S | 26 + src/nos/iar/CALLIND.S | 16 + src/nos/iar/CDIVMOD.S | 18 + src/nos/iar/CFINDSIGN.S | 18 + src/nos/iar/CLSH.S | 16 + src/nos/iar/CLSHASG.S | 19 + src/nos/iar/CMUL.S | 16 + src/nos/iar/CMULASG.S | 19 + src/nos/iar/CSSWITCH.S | 19 + src/nos/iar/CVSWITCH.S | 20 + src/nos/iar/ENTAUTODIRECT.S | 18 + src/nos/iar/ENTPARMDIRECT.S | 17 + src/nos/iar/FADDASG.S | 22 + src/nos/iar/FADDSUB.S | 75 + src/nos/iar/FCMP.S | 28 + src/nos/iar/FDEC.S | 20 + src/nos/iar/FDECASG.S | 21 + src/nos/iar/FDIV.S | 59 + src/nos/iar/FDIVASG.S | 22 + src/nos/iar/FENDASG2.S | 17 + src/nos/iar/FINC.S | 20 + src/nos/iar/FINCASG.S | 21 + src/nos/iar/FMUL.S | 64 + src/nos/iar/FMULASG.S | 22 + src/nos/iar/FNEGASG.S | 19 + src/nos/iar/FPACK.S | 32 + src/nos/iar/FROUND.S | 30 + src/nos/iar/FSUBASG.S | 22 + src/nos/iar/FTOL.S | 34 + src/nos/iar/FUNPACK.S | 25 + src/nos/iar/L | 195 + src/nos/iar/LADDASG.S | 19 + src/nos/iar/LAND.S | 20 + src/nos/iar/LANDASG.S | 19 + src/nos/iar/LDEC.S | 17 + src/nos/iar/LDECASG.S | 22 + src/nos/iar/LDIVMOD.S | 28 + src/nos/iar/LEAVE32.S | 17 + src/nos/iar/LEAVEDIRECT.S | 16 + src/nos/iar/LENDASG.S | 17 + src/nos/iar/LENDMULDIVASG.S | 17 + src/nos/iar/LFINDSIGN.S | 33 + src/nos/iar/LIBVERSION.S | 15 + src/nos/iar/LINC.S | 17 + src/nos/iar/LINCASG.S | 22 + src/nos/iar/LLSH.S | 19 + src/nos/iar/LLSHASG.S | 22 + src/nos/iar/LMUL.S | 35 + src/nos/iar/LMULASG.S | 22 + src/nos/iar/LNEG.S | 18 + src/nos/iar/LNEGASG.S | 22 + src/nos/iar/LNOT.S | 18 + src/nos/iar/LNOTASG.S | 22 + src/nos/iar/LOR.S | 20 + src/nos/iar/LORASG.S | 19 + src/nos/iar/LSSWITCH.S | 22 + src/nos/iar/LSUBASG.S | 19 + src/nos/iar/LTOF.S | 31 + src/nos/iar/LVSWITCH.S | 26 + src/nos/iar/LXOR.S | 20 + src/nos/iar/LXORASG.S | 19 + src/nos/iar/MEMCMP.S | 20 + src/nos/iar/MEMSET.S | 19 + src/nos/iar/MONITORBANKLEAVE.S | 20 + src/nos/iar/MONITORBANKLEAVE32.S | 21 + src/nos/iar/MONITORBANKLEAVEIX.S | 20 + src/nos/iar/MONITORBANKLEAVEPOP.S | 21 + src/nos/iar/MONITORLEAVE.S | 16 + src/nos/iar/MONITORLEAVE32.S | 17 + src/nos/iar/MONITORLEAVEIX.S | 17 + src/nos/iar/MONITORLEAVEIXPA.S | 17 + src/nos/iar/MONITORLEAVEPA.S | 16 + src/nos/iar/MONITORLEAVEPOP.S | 17 + src/nos/iar/SCDIV.S | 23 + src/nos/iar/SCMOD.S | 23 + src/nos/iar/SCRSH.S | 17 + src/nos/iar/SCRSHASG.S | 19 + src/nos/iar/SDIVMOD.S | 19 + src/nos/iar/SFINDSIGN.S | 19 + src/nos/iar/SLCMP.S | 22 + src/nos/iar/SLDIV.S | 31 + src/nos/iar/SLDIVASG.S | 22 + src/nos/iar/SLMOD.S | 32 + src/nos/iar/SLMODASG.S | 22 + src/nos/iar/SLRSH.S | 17 + src/nos/iar/SLRSHASG.S | 22 + src/nos/iar/SLSH.S | 17 + src/nos/iar/SLSHASG.S | 19 + src/nos/iar/SLSHASGBCprim.S | 18 + src/nos/iar/SLSHASGDEprim.S | 17 + src/nos/iar/SMUL.S | 19 + src/nos/iar/SMULASG.S | 19 + src/nos/iar/SMULASGBCprim.S | 19 + src/nos/iar/SMULASGDEprim.S | 19 + src/nos/iar/SMULASGIX.S | 19 + src/nos/iar/SMULASGIY.S | 19 + src/nos/iar/SSCMP.S | 18 + src/nos/iar/SSDIV.S | 24 + src/nos/iar/SSDIVASG.S | 19 + src/nos/iar/SSDIVASGBCprim.S | 20 + src/nos/iar/SSDIVASGDEprim.S | 19 + src/nos/iar/SSDIVASGIX.S | 19 + src/nos/iar/SSDIVASGIY.S | 19 + src/nos/iar/SSMOD.S | 24 + src/nos/iar/SSMODASG.S | 19 + src/nos/iar/SSMODASGBCprim.S | 20 + src/nos/iar/SSMODASGDEprim.S | 19 + src/nos/iar/SSMODASGIX.S | 19 + src/nos/iar/SSMODASGIY.S | 19 + src/nos/iar/SSRSH.S | 17 + src/nos/iar/SSRSHASG.S | 19 + src/nos/iar/SSRSHASGBCprim.S | 18 + src/nos/iar/SSRSHASGDEprim.S | 18 + src/nos/iar/SSRSHASGIX.S | 19 + src/nos/iar/SSRSHASGIY.S | 19 + src/nos/iar/SSSWITCH.S | 20 + src/nos/iar/SSWITCHEND.S | 17 + src/nos/iar/STRCAT.S | 18 + src/nos/iar/STRCHR.S | 17 + src/nos/iar/STRCMP.S | 18 + src/nos/iar/STRCPY.S | 18 + src/nos/iar/STRLEN.S | 18 + src/nos/iar/SVSWITCH.S | 21 + src/nos/iar/UCDIV.S | 19 + src/nos/iar/UCMOD.S | 19 + src/nos/iar/UCRSH.S | 17 + src/nos/iar/UCRSHASG.S | 19 + src/nos/iar/ULDIV.S | 25 + src/nos/iar/ULDIVASG.S | 22 + src/nos/iar/ULMOD.S | 23 + src/nos/iar/ULMODASG.S | 22 + src/nos/iar/ULRSH.S | 19 + src/nos/iar/ULRSHASG.S | 22 + src/nos/iar/USDIV.S | 20 + src/nos/iar/USDIVASG.S | 19 + src/nos/iar/USDIVASGBCprim.S | 20 + src/nos/iar/USDIVASGDEprim.S | 19 + src/nos/iar/USDIVASGIX.S | 19 + src/nos/iar/USDIVASGIY.S | 19 + src/nos/iar/USMOD.S | 19 + src/nos/iar/USMODASG.S | 19 + src/nos/iar/USMODASGBCprim.S | 20 + src/nos/iar/USMODASGDEprim.S | 19 + src/nos/iar/USMODASGIX.S | 19 + src/nos/iar/USMODASGIY.S | 19 + src/nos/iar/USRSH.S | 17 + src/nos/iar/USRSHASG.S | 19 + src/nos/iar/USRSHASGBCprim.S | 18 + src/nos/iar/USRSHASGDEprim.S | 18 + src/nos/iar/USRSHASGIX.S | 19 + src/nos/iar/USRSHASGIY.S | 19 + src/nos/iar/VSWITCHEND.S | 17 + src/nos/iar/auto.mk | 210 + src/nos/iar/iar_defs.h | 1 + src/nos/iar/makefile | 10 + src/nos/include/!readme! | 10 + src/nos/include/alloc.h | 3 + src/nos/include/ar.h | 18 + src/nos/include/assert.h | 27 + src/nos/include/ctype.h | 90 + src/nos/include/ctype.h% | 169 + src/nos/include/curses.h | 229 + src/nos/include/dirent.h | 48 + src/nos/include/errno.h | 75 + src/nos/include/errno.h% | 132 + src/nos/include/fcntl.h | 36 + src/nos/include/features.h | 61 + src/nos/include/float.h | 174 + src/nos/include/getopt.h | 13 + src/nos/include/grp.h | 35 + src/nos/include/intrz80.h$ | 46 + src/nos/include/libintl.h | 50 + src/nos/include/limits.h | 55 + src/nos/include/malloc.h | 13 + src/nos/include/math.h | 34 + src/nos/include/mem.h | 54 + src/nos/include/memory.h | 3 + src/nos/include/ncurses.h | 7 + src/nos/include/nos/ahdlc.h | 28 + src/nos/include/nos/arcnet.h | 44 + src/nos/include/nos/arp.h | 125 + src/nos/include/nos/asci.h | 229 + src/nos/include/nos/asmglobl.x86 | 61 + src/nos/include/nos/asy.h | 60 + src/nos/include/nos/ax25.h | 182 + src/nos/include/nos/ax25mail.h | 3 + src/nos/include/nos/bm.h | 66 + src/nos/include/nos/bootp.h | 82 + src/nos/include/nos/bootpd.h | 46 + src/nos/include/nos/cmdparse.h | 28 + src/nos/include/nos/commands.h | 260 + src/nos/include/nos/config.h | 90 + src/nos/include/nos/conv.h | 61 + src/nos/include/nos/crc.h | 11 + src/nos/include/nos/daemon.h | 29 + src/nos/include/nos/devparam.h | 38 + src/nos/include/nos/dialer.h | 14 + src/nos/include/nos/dirutil.h | 17 + src/nos/include/nos/display.h | 77 + src/nos/include/nos/dma.h | 25 + src/nos/include/nos/domain.h | 152 + src/nos/include/nos/drsi.h | 179 + src/nos/include/nos/eagle.h | 130 + src/nos/include/nos/enet.h | 51 + src/nos/include/nos/escc.h | 170 + src/nos/include/nos/esccgen.h | 235 + src/nos/include/nos/files.h | 46 + src/nos/include/nos/ftp.h | 25 + src/nos/include/nos/ftpcli.h | 39 + src/nos/include/nos/ftpserv.h | 60 + src/nos/include/nos/global.h | 299 + src/nos/include/nos/hapn.h | 164 + src/nos/include/nos/hardware.h | 5 + src/nos/include/nos/hs.h | 87 + src/nos/include/nos/icmp.h | 142 + src/nos/include/nos/iface.h | 147 + src/nos/include/nos/internet.h | 68 + src/nos/include/nos/ip.h | 223 + src/nos/include/nos/kiss.h | 20 + src/nos/include/nos/lapb.h | 183 + src/nos/include/nos/logmsg.h | 9 + src/nos/include/nos/lzw.h | 50 + src/nos/include/nos/mailbox.h | 114 + src/nos/include/nos/main.h | 16 + src/nos/include/nos/mbuf.h | 85 + src/nos/include/nos/md5.h | 56 + src/nos/include/nos/n8250.h | 188 + src/nos/include/nos/netrom.h | 211 + src/nos/include/nos/netuser.h | 54 + src/nos/include/nos/nospc.h | 142 + src/nos/include/nos/nospc.h% | 138 + src/nos/include/nos/nr4.h | 271 + src/nos/include/nos/nr4mail.h | 3 + src/nos/include/nos/nrs.h | 55 + src/nos/include/nos/pc100.h | 108 + src/nos/include/nos/pi.h | 138 + src/nos/include/nos/ping.h | 28 + src/nos/include/nos/pktdrvr.h | 116 + src/nos/include/nos/pop.h | 59 + src/nos/include/nos/ppp.h | 80 + src/nos/include/nos/pppfsm.h | 219 + src/nos/include/nos/pppipcp.h | 59 + src/nos/include/nos/ppplcp.h | 81 + src/nos/include/nos/ppppap.h | 25 + src/nos/include/nos/proc.h | 128 + src/nos/include/nos/remote.h | 13 + src/nos/include/nos/rip.h | 121 + src/nos/include/nos/sb.h | 28 + src/nos/include/nos/session.h | 104 + src/nos/include/nos/slhc.h | 188 + src/nos/include/nos/slip.h | 60 + src/nos/include/nos/smtp.h | 88 + src/nos/include/nos/sockaddr.h | 34 + src/nos/include/nos/socket.h | 122 + src/nos/include/nos/sppp.h | 18 + src/nos/include/nos/stdio.h | 163 + src/nos/include/nos/sync.h | 8 + src/nos/include/nos/tcp.h | 320 + src/nos/include/nos/telnet.h | 53 + src/nos/include/nos/timer.h | 60 + src/nos/include/nos/tipmail.h | 4 + src/nos/include/nos/trace.h | 89 + src/nos/include/nos/tty.h | 15 + src/nos/include/nos/udp.h | 91 + src/nos/include/nos/usock.h | 223 + src/nos/include/nos/z8536.h | 32 + src/nos/include/paths.h | 32 + src/nos/include/po/messages.h | 1524 + src/nos/include/pwd.h | 37 + src/nos/include/regexp.h | 27 + src/nos/include/regmagic.h | 5 + src/nos/include/search.h | 55 + src/nos/include/setjmp.h | 29 + src/nos/include/setjmp.h$ | 38 + src/nos/include/setjmp.h% | 172 + src/nos/include/sgtty.h | 38 + src/nos/include/signal.h | 99 + src/nos/include/stdarg.h | 37 + src/nos/include/stdarg.h% | 310 + src/nos/include/stddef.h | 13 + src/nos/include/stdio.h | 167 + src/nos/include/stdlib.h | 93 + src/nos/include/string.h | 99 + src/nos/include/strings.h | 3 + src/nos/include/sys/cdefs.h | 24 + src/nos/include/sys/exec.h | 4 + src/nos/include/sys/ioctl.h | 38 + src/nos/include/sys/mount.h | 2 + src/nos/include/sys/poll.h | 7 + src/nos/include/sys/seek.h | 19 + src/nos/include/sys/select.h | 12 + src/nos/include/sys/socket.h | 9 + src/nos/include/sys/stat.h | 79 + src/nos/include/sys/timeb.h | 17 + src/nos/include/sys/types.h | 115 + src/nos/include/sys/utsname.h | 18 + src/nos/include/sys/wait.h | 48 + src/nos/include/syscalls.h | 199 + src/nos/include/sysmac.h% | 92 + src/nos/include/tcpip.h | 120 + src/nos/include/termcap.h | 21 + src/nos/include/termio.h | 3 + src/nos/include/termios.h | 23 + src/nos/include/time.h | 61 + src/nos/include/unistd.h | 58 + src/nos/include/utime.h | 9 + src/nos/include/utmp.h | 45 + src/nos/include/utsname.h | 18 + src/nos/include/uzi/devio.h | 103 + src/nos/include/uzi/execve.h | 51 + src/nos/include/uzi/filesys.h | 159 + src/nos/include/uzi/maxmin.h | 15 + src/nos/include/uzi/process.h | 153 + src/nos/include/uzi/rtc.h | 14 + src/nos/include/uzi/scall1.h | 64 + src/nos/include/uzi/scall2.h | 41 + src/nos/include/uzi/systrace.h | 17 + src/nos/include/uzi/unix.h% | 1021 + src/nos/include/uzi/usrmem.h | 21 + src/nos/include/uzi/xfs.h | 58 + src/nos/include/uzi/xip.h | 29 + src/nos/include/varargs.h | 13 + src/nos/include/vendor.h | 11 + src/nos/include/z80/asm.h | 210 + src/nos/internet/arp.c | 303 + src/nos/internet/arpcmd.c | 234 + src/nos/internet/arphdr.c | 60 + src/nos/internet/auto.mk | 47 + src/nos/internet/domain.c | 2084 + src/nos/internet/domhdr.c | 297 + src/nos/internet/hop.c | 447 + src/nos/internet/icmp.c | 267 + src/nos/internet/icmpcmd.c | 78 + src/nos/internet/icmphdr.c | 98 + src/nos/internet/icmpmsg.c | 67 + src/nos/internet/ip.c | 710 + src/nos/internet/ipcmd.c | 352 + src/nos/internet/iphdr.c | 177 + src/nos/internet/iproute.c | 885 + src/nos/internet/ipsock.c | 170 + src/nos/internet/makefile | 10 + src/nos/internet/netuser.c | 87 + src/nos/internet/ping.c | 305 + src/nos/internet/rip.c | 690 + src/nos/internet/ripcmd.c | 170 + src/nos/internet/sim.c | 88 + src/nos/internet/tcpcmd.c | 369 + src/nos/internet/tcphdr.c | 180 + src/nos/internet/tcpin.c | 984 + src/nos/internet/tcpout.c | 224 + src/nos/internet/tcpout.l | 2057 + src/nos/internet/tcpsock.c | 436 + src/nos/internet/tcpsubr.c | 333 + src/nos/internet/tcptimer.c | 57 + src/nos/internet/tcpuser.c | 381 + src/nos/internet/udp.c | 280 + src/nos/internet/udpcmd.c | 67 + src/nos/internet/udphdr.c | 66 + src/nos/internet/udpsock.c | 174 + src/nos/intl/auto.mk | 17 + src/nos/intl/gettext.S | 96 + src/nos/intl/intl.c | 298 + src/nos/intl/makefile | 10 + src/nos/ipsec_mk | 20 + src/nos/lib/clients.lib | 87 + src/nos/lib/clients_lib/Ftpcmds.rel | 156 + src/nos/lib/clients_lib/Notsess.rel | 16 + src/nos/lib/clients_lib/bootp.rel | 1225 + src/nos/lib/clients_lib/compsub.rel | 338 + src/nos/lib/clients_lib/doascii.rel | 30 + src/nos/lib/clients_lib/dobatch.rel | 42 + src/nos/lib/clients_lib/dobinary.rel | 30 + src/nos/lib/clients_lib/docompare.rel | 90 + src/nos/lib/clients_lib/doftp.rel | 716 + src/nos/lib/clients_lib/doftpcd.rel | 47 + src/nos/lib/clients_lib/doget.rel | 134 + src/nos/lib/clients_lib/dohash.rel | 31 + src/nos/lib/clients_lib/dolist.rel | 107 + src/nos/lib/clients_lib/dols.rel | 107 + src/nos/lib/clients_lib/domcompare.rel | 222 + src/nos/lib/clients_lib/domd5.rel | 167 + src/nos/lib/clients_lib/domget.rel | 279 + src/nos/lib/clients_lib/domkdir.rel | 47 + src/nos/lib/clients_lib/domput.rel | 178 + src/nos/lib/clients_lib/doput.rel | 67 + src/nos/lib/clients_lib/doquit.rel | 49 + src/nos/lib/clients_lib/doread.rel | 55 + src/nos/lib/clients_lib/dormdir.rel | 47 + src/nos/lib/clients_lib/dotype.rel | 137 + src/nos/lib/clients_lib/doupdate.rel | 42 + src/nos/lib/clients_lib/doverbose.rel | 42 + src/nos/lib/clients_lib/finger.rel | 347 + src/nos/lib/clients_lib/getline.rel | 39 + src/nos/lib/clients_lib/getresp.rel | 101 + src/nos/lib/clients_lib/getsub.rel | 614 + src/nos/lib/clients_lib/keychar.rel | 103 + src/nos/lib/clients_lib/lterm.rel | 435 + src/nos/lib/clients_lib/putsub.rel | 569 + src/nos/lib/clients_lib/sendport.rel | 48 + src/nos/lib/clients_lib/telnet.rel | 1448 + src/nos/lib/crt0_banked.lst | 332 + src/nos/lib/crt0_banked.rel | 61 + src/nos/lib/crt0_large.lst | 335 + src/nos/lib/crt0_large.rel | 56 + src/nos/lib/crt_banked.lib | 342 + src/nos/lib/crt_banked_lib/abort.rel | 50 + src/nos/lib/crt_banked_lib/alloca.rel | 98 + src/nos/lib/crt_banked_lib/asctime.rel | 225 + src/nos/lib/crt_banked_lib/assert.rel | 82 + src/nos/lib/crt_banked_lib/atexit.rel | 128 + src/nos/lib/crt_banked_lib/atoi.rel | 21 + src/nos/lib/crt_banked_lib/atol.rel | 21 + src/nos/lib/crt_banked_lib/bsearch.rel | 94 + src/nos/lib/crt_banked_lib/calloc.rel | 37 + src/nos/lib/crt_banked_lib/clock.rel | 23 + src/nos/lib/crt_banked_lib/closedir.rel | 57 + src/nos/lib/crt_banked_lib/convtime.rel | 191 + src/nos/lib/crt_banked_lib/crypt.rel | 229 + src/nos/lib/crt_banked_lib/ctime.rel | 22 + src/nos/lib/crt_banked_lib/ctype.rel | 101 + src/nos/lib/crt_banked_lib/difftime.rel | 85 + src/nos/lib/crt_banked_lib/error.rel | 249 + src/nos/lib/crt_banked_lib/etime.rel | 117 + src/nos/lib/crt_banked_lib/execl.rel | 198 + src/nos/lib/crt_banked_lib/execle.rel | 37 + src/nos/lib/crt_banked_lib/execlp.rel | 27 + src/nos/lib/crt_banked_lib/execlpe.rel | 42 + src/nos/lib/crt_banked_lib/exect.rel | 19 + src/nos/lib/crt_banked_lib/execv.rel | 20 + src/nos/lib/crt_banked_lib/execvp.rel | 25 + src/nos/lib/crt_banked_lib/execvpe.rel | 24 + src/nos/lib/crt_banked_lib/exit.rel | 34 + src/nos/lib/crt_banked_lib/fclose.rel | 155 + src/nos/lib/crt_banked_lib/fflush.rel | 208 + src/nos/lib/crt_banked_lib/fgetc.rel | 94 + src/nos/lib/crt_banked_lib/fgetgren.rel | 34 + src/nos/lib/crt_banked_lib/fgetpwen.rel | 34 + src/nos/lib/crt_banked_lib/fgets.rel | 83 + src/nos/lib/crt_banked_lib/fopen.rel | 254 + src/nos/lib/crt_banked_lib/fprintf.rel | 30 + src/nos/lib/crt_banked_lib/fputc.rel | 130 + src/nos/lib/crt_banked_lib/fputs.rel | 53 + src/nos/lib/crt_banked_lib/fputter.rel | 92 + src/nos/lib/crt_banked_lib/fread.rel | 155 + src/nos/lib/crt_banked_lib/free.rel | 88 + src/nos/lib/crt_banked_lib/fscanf.rel | 25 + src/nos/lib/crt_banked_lib/ftell.rel | 40 + src/nos/lib/crt_banked_lib/fwrite.rel | 198 + src/nos/lib/crt_banked_lib/getcwd.rel | 353 + src/nos/lib/crt_banked_lib/getenv.rel | 83 + src/nos/lib/crt_banked_lib/getgrent.rel | 294 + src/nos/lib/crt_banked_lib/getgrgid.rel | 53 + src/nos/lib/crt_banked_lib/getgrnam.rel | 69 + src/nos/lib/crt_banked_lib/getopt.rel | 290 + src/nos/lib/crt_banked_lib/getpass.rel | 166 + src/nos/lib/crt_banked_lib/getpw.rel | 68 + src/nos/lib/crt_banked_lib/getpwent.rel | 293 + src/nos/lib/crt_banked_lib/getpwnam.rel | 69 + src/nos/lib/crt_banked_lib/getpwuid.rel | 53 + src/nos/lib/crt_banked_lib/gets.rel | 96 + src/nos/lib/crt_banked_lib/gmtime.rel | 478 + src/nos/lib/crt_banked_lib/initgrup.rel | 113 + src/nos/lib/crt_banked_lib/isatty.rel | 41 + src/nos/lib/crt_banked_lib/itoa.rel | 193 + src/nos/lib/crt_banked_lib/localtim.rel | 26 + src/nos/lib/crt_banked_lib/longjmp.rel | 25 + src/nos/lib/crt_banked_lib/lsearch.rel | 93 + src/nos/lib/crt_banked_lib/lstat.rel | 52 + src/nos/lib/crt_banked_lib/ltoa.rel | 45 + src/nos/lib/crt_banked_lib/ltostr.rel | 38 + src/nos/lib/crt_banked_lib/malloc.rel | 199 + src/nos/lib/crt_banked_lib/memccpy.rel | 49 + src/nos/lib/crt_banked_lib/memchr.rel | 47 + src/nos/lib/crt_banked_lib/memcmp.rel | 47 + src/nos/lib/crt_banked_lib/memcpy.rel | 35 + src/nos/lib/crt_banked_lib/memmove.rel | 61 + src/nos/lib/crt_banked_lib/memset.rel | 31 + src/nos/lib/crt_banked_lib/mkdir.rel | 23 + src/nos/lib/crt_banked_lib/mktime.rel | 41 + src/nos/lib/crt_banked_lib/opendir.rel | 105 + src/nos/lib/crt_banked_lib/perror.rel | 84 + src/nos/lib/crt_banked_lib/popen.rel | 204 + src/nos/lib/crt_banked_lib/printf.rel | 26 + src/nos/lib/crt_banked_lib/putenv.rel | 202 + src/nos/lib/crt_banked_lib/putgetch.rel | 46 + src/nos/lib/crt_banked_lib/putpwent.rel | 69 + src/nos/lib/crt_banked_lib/qsort.rel | 308 + src/nos/lib/crt_banked_lib/rand.rel | 126 + src/nos/lib/crt_banked_lib/readdir.rel | 94 + src/nos/lib/crt_banked_lib/readlink.rel | 49 + src/nos/lib/crt_banked_lib/realloc.rel | 61 + src/nos/lib/crt_banked_lib/regerror.rel | 34 + src/nos/lib/crt_banked_lib/regexp.rel | 2217 + src/nos/lib/crt_banked_lib/regsub.rel | 219 + src/nos/lib/crt_banked_lib/rename.rel | 36 + src/nos/lib/crt_banked_lib/rewind.rel | 170 + src/nos/lib/crt_banked_lib/rewindir.rel | 46 + src/nos/lib/crt_banked_lib/rmdir.rel | 201 + src/nos/lib/crt_banked_lib/scanf.rel | 26 + src/nos/lib/crt_banked_lib/setbuff.rel | 72 + src/nos/lib/crt_banked_lib/setenv.rel | 296 + src/nos/lib/crt_banked_lib/setgrent.rel | 86 + src/nos/lib/crt_banked_lib/setjmp.rel | 21 + src/nos/lib/crt_banked_lib/setpwent.rel | 112 + src/nos/lib/crt_banked_lib/setvbuff.rel | 105 + src/nos/lib/crt_banked_lib/sleep.rel | 74 + src/nos/lib/crt_banked_lib/sprintf.rel | 30 + src/nos/lib/crt_banked_lib/sputter.rel | 25 + src/nos/lib/crt_banked_lib/sscanf.rel | 39 + src/nos/lib/crt_banked_lib/stdio0.rel | 145 + src/nos/lib/crt_banked_lib/strcat.rel | 24 + src/nos/lib/crt_banked_lib/strchr.rel | 47 + src/nos/lib/crt_banked_lib/strcmp.rel | 43 + src/nos/lib/crt_banked_lib/strcpy.rel | 26 + src/nos/lib/crt_banked_lib/strcspn.rel | 43 + src/nos/lib/crt_banked_lib/strdup.rel | 41 + src/nos/lib/crt_banked_lib/stricmp.rel | 84 + src/nos/lib/crt_banked_lib/strlen.rel | 33 + src/nos/lib/crt_banked_lib/strncat.rel | 59 + src/nos/lib/crt_banked_lib/strncmp.rel | 51 + src/nos/lib/crt_banked_lib/strncpy.rel | 59 + src/nos/lib/crt_banked_lib/strnicmp.rel | 90 + src/nos/lib/crt_banked_lib/strpbrk.rel | 51 + src/nos/lib/crt_banked_lib/strrchr.rel | 59 + src/nos/lib/crt_banked_lib/strsep.rel | 53 + src/nos/lib/crt_banked_lib/strspn.rel | 71 + src/nos/lib/crt_banked_lib/strstr.rel | 71 + src/nos/lib/crt_banked_lib/strtok.rel | 86 + src/nos/lib/crt_banked_lib/strtol.rel | 87 + src/nos/lib/crt_banked_lib/strtoul.rel | 218 + src/nos/lib/crt_banked_lib/system.rel | 165 + src/nos/lib/crt_banked_lib/termcap.rel | 1432 + src/nos/lib/crt_banked_lib/tmpnam.rel | 87 + src/nos/lib/crt_banked_lib/tparam.rel | 701 + src/nos/lib/crt_banked_lib/ttyname.rel | 164 + src/nos/lib/crt_banked_lib/tzset.rel | 104 + src/nos/lib/crt_banked_lib/ultoa.rel | 37 + src/nos/lib/crt_banked_lib/ungetc.rel | 77 + src/nos/lib/crt_banked_lib/utsname.rel | 69 + src/nos/lib/crt_banked_lib/vfprintf.rel | 24 + src/nos/lib/crt_banked_lib/vfscanf.rel | 952 + src/nos/lib/crt_banked_lib/vprinter.rel | 760 + src/nos/lib/crt_banked_lib/vprintf.rel | 22 + src/nos/lib/crt_banked_lib/vscanf.rel | 22 + src/nos/lib/crt_banked_lib/vsprintf.rel | 28 + src/nos/lib/crt_banked_lib/vsscanf.rel | 35 + src/nos/lib/crt_banked_lib/xitoa.rel | 21 + src/nos/lib/crt_banked_lib/xltoa.rel | 29 + src/nos/lib/crt_large.lib | 342 + src/nos/lib/crt_large_lib/abort.rel | 30 + src/nos/lib/crt_large_lib/alloca.rel | 93 + src/nos/lib/crt_large_lib/asctime.rel | 215 + src/nos/lib/crt_large_lib/assert.rel | 59 + src/nos/lib/crt_large_lib/atexit.rel | 115 + src/nos/lib/crt_large_lib/atoi.rel | 18 + src/nos/lib/crt_large_lib/atol.rel | 18 + src/nos/lib/crt_large_lib/bsearch.rel | 94 + src/nos/lib/crt_large_lib/calloc.rel | 32 + src/nos/lib/crt_large_lib/clock.rel | 20 + src/nos/lib/crt_large_lib/closedir.rel | 50 + src/nos/lib/crt_large_lib/convtime.rel | 191 + src/nos/lib/crt_large_lib/crypt.rel | 222 + src/nos/lib/crt_large_lib/ctime.rel | 17 + src/nos/lib/crt_large_lib/ctype.rel | 101 + src/nos/lib/crt_large_lib/difftime.rel | 80 + src/nos/lib/crt_large_lib/error.rel | 230 + src/nos/lib/crt_large_lib/etime.rel | 110 + src/nos/lib/crt_large_lib/execl.rel | 187 + src/nos/lib/crt_large_lib/execle.rel | 34 + src/nos/lib/crt_large_lib/execlp.rel | 22 + src/nos/lib/crt_large_lib/execlpe.rel | 37 + src/nos/lib/crt_large_lib/exect.rel | 18 + src/nos/lib/crt_large_lib/execv.rel | 17 + src/nos/lib/crt_large_lib/execvp.rel | 20 + src/nos/lib/crt_large_lib/execvpe.rel | 19 + src/nos/lib/crt_large_lib/exit.rel | 30 + src/nos/lib/crt_large_lib/fclose.rel | 144 + src/nos/lib/crt_large_lib/fflush.rel | 195 + src/nos/lib/crt_large_lib/fgetc.rel | 89 + src/nos/lib/crt_large_lib/fgetgren.rel | 31 + src/nos/lib/crt_large_lib/fgetpwen.rel | 31 + src/nos/lib/crt_large_lib/fgets.rel | 80 + src/nos/lib/crt_large_lib/fopen.rel | 241 + src/nos/lib/crt_large_lib/fprintf.rel | 25 + src/nos/lib/crt_large_lib/fputc.rel | 121 + src/nos/lib/crt_large_lib/fputs.rel | 50 + src/nos/lib/crt_large_lib/fputter.rel | 85 + src/nos/lib/crt_large_lib/fread.rel | 146 + src/nos/lib/crt_large_lib/free.rel | 88 + src/nos/lib/crt_large_lib/fscanf.rel | 22 + src/nos/lib/crt_large_lib/ftell.rel | 33 + src/nos/lib/crt_large_lib/fwrite.rel | 185 + src/nos/lib/crt_large_lib/getcwd.rel | 321 + src/nos/lib/crt_large_lib/getenv.rel | 78 + src/nos/lib/crt_large_lib/getgrent.rel | 271 + src/nos/lib/crt_large_lib/getgrgid.rel | 46 + src/nos/lib/crt_large_lib/getgrnam.rel | 60 + src/nos/lib/crt_large_lib/getopt.rel | 269 + src/nos/lib/crt_large_lib/getpass.rel | 152 + src/nos/lib/crt_large_lib/getpw.rel | 63 + src/nos/lib/crt_large_lib/getpwent.rel | 274 + src/nos/lib/crt_large_lib/getpwnam.rel | 60 + src/nos/lib/crt_large_lib/getpwuid.rel | 46 + src/nos/lib/crt_large_lib/gets.rel | 89 + src/nos/lib/crt_large_lib/gmtime.rel | 475 + src/nos/lib/crt_large_lib/initgrup.rel | 102 + src/nos/lib/crt_large_lib/isatty.rel | 38 + src/nos/lib/crt_large_lib/itoa.rel | 190 + src/nos/lib/crt_large_lib/localtim.rel | 23 + src/nos/lib/crt_large_lib/longjmp.rel | 14 + src/nos/lib/crt_large_lib/lsearch.rel | 87 + src/nos/lib/crt_large_lib/lstat.rel | 45 + src/nos/lib/crt_large_lib/ltoa.rel | 42 + src/nos/lib/crt_large_lib/ltostr.rel | 33 + src/nos/lib/crt_large_lib/malloc.rel | 194 + src/nos/lib/crt_large_lib/memccpy.rel | 49 + src/nos/lib/crt_large_lib/memchr.rel | 47 + src/nos/lib/crt_large_lib/memcmp.rel | 47 + src/nos/lib/crt_large_lib/memcpy.rel | 35 + src/nos/lib/crt_large_lib/memmove.rel | 58 + src/nos/lib/crt_large_lib/memset.rel | 31 + src/nos/lib/crt_large_lib/mkdir.rel | 20 + src/nos/lib/crt_large_lib/mktime.rel | 41 + src/nos/lib/crt_large_lib/opendir.rel | 88 + src/nos/lib/crt_large_lib/perror.rel | 78 + src/nos/lib/crt_large_lib/popen.rel | 171 + src/nos/lib/crt_large_lib/printf.rel | 23 + src/nos/lib/crt_large_lib/putenv.rel | 189 + src/nos/lib/crt_large_lib/putgetch.rel | 41 + src/nos/lib/crt_large_lib/putpwent.rel | 66 + src/nos/lib/crt_large_lib/qsort.rel | 305 + src/nos/lib/crt_large_lib/rand.rel | 126 + src/nos/lib/crt_large_lib/readdir.rel | 87 + src/nos/lib/crt_large_lib/readlink.rel | 42 + src/nos/lib/crt_large_lib/realloc.rel | 54 + src/nos/lib/crt_large_lib/regerror.rel | 29 + src/nos/lib/crt_large_lib/regexp.rel | 2147 + src/nos/lib/crt_large_lib/regsub.rel | 212 + src/nos/lib/crt_large_lib/rename.rel | 31 + src/nos/lib/crt_large_lib/rewind.rel | 161 + src/nos/lib/crt_large_lib/rewindir.rel | 43 + src/nos/lib/crt_large_lib/rmdir.rel | 170 + src/nos/lib/crt_large_lib/scanf.rel | 23 + src/nos/lib/crt_large_lib/setbuff.rel | 67 + src/nos/lib/crt_large_lib/setenv.rel | 265 + src/nos/lib/crt_large_lib/setgrent.rel | 74 + src/nos/lib/crt_large_lib/setjmp.rel | 14 + src/nos/lib/crt_large_lib/setpwent.rel | 98 + src/nos/lib/crt_large_lib/setvbuff.rel | 98 + src/nos/lib/crt_large_lib/sleep.rel | 62 + src/nos/lib/crt_large_lib/sprintf.rel | 27 + src/nos/lib/crt_large_lib/sputter.rel | 22 + src/nos/lib/crt_large_lib/sscanf.rel | 36 + src/nos/lib/crt_large_lib/stdio0.rel | 129 + src/nos/lib/crt_large_lib/strcat.rel | 19 + src/nos/lib/crt_large_lib/strchr.rel | 47 + src/nos/lib/crt_large_lib/strcmp.rel | 43 + src/nos/lib/crt_large_lib/strcpy.rel | 21 + src/nos/lib/crt_large_lib/strcspn.rel | 40 + src/nos/lib/crt_large_lib/strdup.rel | 34 + src/nos/lib/crt_large_lib/stricmp.rel | 84 + src/nos/lib/crt_large_lib/strlen.rel | 33 + src/nos/lib/crt_large_lib/strncat.rel | 50 + src/nos/lib/crt_large_lib/strncmp.rel | 51 + src/nos/lib/crt_large_lib/strncpy.rel | 59 + src/nos/lib/crt_large_lib/strnicmp.rel | 90 + src/nos/lib/crt_large_lib/strpbrk.rel | 48 + src/nos/lib/crt_large_lib/strrchr.rel | 56 + src/nos/lib/crt_large_lib/strsep.rel | 50 + src/nos/lib/crt_large_lib/strspn.rel | 71 + src/nos/lib/crt_large_lib/strstr.rel | 64 + src/nos/lib/crt_large_lib/strtok.rel | 81 + src/nos/lib/crt_large_lib/strtol.rel | 84 + src/nos/lib/crt_large_lib/strtoul.rel | 218 + src/nos/lib/crt_large_lib/system.rel | 140 + src/nos/lib/crt_large_lib/termcap.rel | 1381 + src/nos/lib/crt_large_lib/tmpnam.rel | 77 + src/nos/lib/crt_large_lib/tparam.rel | 677 + src/nos/lib/crt_large_lib/ttyname.rel | 143 + src/nos/lib/crt_large_lib/tzset.rel | 95 + src/nos/lib/crt_large_lib/ultoa.rel | 34 + src/nos/lib/crt_large_lib/ungetc.rel | 74 + src/nos/lib/crt_large_lib/utsname.rel | 54 + src/nos/lib/crt_large_lib/vfprintf.rel | 19 + src/nos/lib/crt_large_lib/vfscanf.rel | 923 + src/nos/lib/crt_large_lib/vprinter.rel | 743 + src/nos/lib/crt_large_lib/vprintf.rel | 19 + src/nos/lib/crt_large_lib/vscanf.rel | 19 + src/nos/lib/crt_large_lib/vsprintf.rel | 25 + src/nos/lib/crt_large_lib/vsscanf.rel | 32 + src/nos/lib/crt_large_lib/xitoa.rel | 18 + src/nos/lib/crt_large_lib/xltoa.rel | 24 + src/nos/lib/dump.lib | 20 + src/nos/lib/dump_lib/icmpdump.rel | 253 + src/nos/lib/dump_lib/ipdump.rel | 468 + src/nos/lib/dump_lib/tcpdump.rel | 410 + src/nos/lib/dump_lib/trace.rel | 1264 + src/nos/lib/dump_lib/udpdump.rel | 150 + src/nos/lib/filesys.lib | 505 + src/nos/lib/filesys_lib/Baddevmsg.rel | 16 + src/nos/lib/filesys_lib/Badfsmsg.rel | 16 + src/nos/lib/filesys_lib/Badinomsg.rel | 16 + src/nos/lib/filesys_lib/Bufpool.rel | 12 + src/nos/lib/filesys_lib/Devtab.rel | 12 + src/nos/lib/filesys_lib/Fstab.rel | 12 + src/nos/lib/filesys_lib/Gtinobadoft.rel | 16 + src/nos/lib/filesys_lib/Inotab.rel | 12 + src/nos/lib/filesys_lib/Oftab.rel | 12 + src/nos/lib/filesys_lib/Ptab.rel | 12 + src/nos/lib/filesys_lib/Refstoinode.rel | 16 + src/nos/lib/filesys_lib/_access.rel | 65 + src/nos/lib/filesys_lib/_chdir.rel | 65 + src/nos/lib/filesys_lib/_chmod.rel | 67 + src/nos/lib/filesys_lib/_chown.rel | 71 + src/nos/lib/filesys_lib/_close.rel | 65 + src/nos/lib/filesys_lib/_creat.rel | 71 + src/nos/lib/filesys_lib/_dup.rel | 65 + src/nos/lib/filesys_lib/_dup2.rel | 67 + src/nos/lib/filesys_lib/_falign.rel | 67 + src/nos/lib/filesys_lib/_fstat.rel | 67 + src/nos/lib/filesys_lib/_getfsys.rel | 67 + src/nos/lib/filesys_lib/_ioctl.rel | 77 + src/nos/lib/filesys_lib/_link.rel | 67 + src/nos/lib/filesys_lib/_lseek.rel | 84 + src/nos/lib/filesys_lib/_mknod.rel | 71 + src/nos/lib/filesys_lib/_mount.rel | 71 + src/nos/lib/filesys_lib/_namei.rel | 230 + src/nos/lib/filesys_lib/_open.rel | 91 + src/nos/lib/filesys_lib/_panic.rel | 38 + src/nos/lib/filesys_lib/_read.rel | 71 + src/nos/lib/filesys_lib/_stat.rel | 67 + src/nos/lib/filesys_lib/_symlink.rel | 67 + src/nos/lib/filesys_lib/_sync.rel | 48 + src/nos/lib/filesys_lib/_sysdebug.rel | 67 + src/nos/lib/filesys_lib/_systrace.rel | 67 + src/nos/lib/filesys_lib/_time.rel | 69 + src/nos/lib/filesys_lib/_umask.rel | 67 + src/nos/lib/filesys_lib/_umount.rel | 65 + src/nos/lib/filesys_lib/_unlink.rel | 65 + src/nos/lib/filesys_lib/_write.rel | 71 + src/nos/lib/filesys_lib/access.rel | 65 + src/nos/lib/filesys_lib/bdreadwrite.rel | 67 + src/nos/lib/filesys_lib/bfind.rel | 64 + src/nos/lib/filesys_lib/bfree.rel | 86 + src/nos/lib/filesys_lib/blk_alloc.rel | 151 + src/nos/lib/filesys_lib/blk_free.rel | 89 + src/nos/lib/filesys_lib/bmap.rel | 255 + src/nos/lib/filesys_lib/bread.rel | 132 + src/nos/lib/filesys_lib/buf_flsh.rel | 12 + src/nos/lib/filesys_lib/buf_hits.rel | 12 + src/nos/lib/filesys_lib/buf_miss.rel | 12 + src/nos/lib/filesys_lib/bufclock.rel | 12 + src/nos/lib/filesys_lib/bufdump.rel | 112 + src/nos/lib/filesys_lib/bufinit.rel | 128 + src/nos/lib/filesys_lib/bufsync.rel | 72 + src/nos/lib/filesys_lib/cdreadwrite.rel | 58 + src/nos/lib/filesys_lib/ch_link.rel | 210 + src/nos/lib/filesys_lib/chany.rel | 102 + src/nos/lib/filesys_lib/chdir.rel | 65 + src/nos/lib/filesys_lib/chmod.rel | 67 + src/nos/lib/filesys_lib/chown.rel | 71 + src/nos/lib/filesys_lib/close.rel | 65 + src/nos/lib/filesys_lib/creat.rel | 71 + src/nos/lib/filesys_lib/d_init.rel | 254 + src/nos/lib/filesys_lib/d_ioctl.rel | 58 + src/nos/lib/filesys_lib/d_openclose.rel | 62 + src/nos/lib/filesys_lib/dirty_mask.rel | 12 + src/nos/lib/filesys_lib/doexit.rel | 179 + src/nos/lib/filesys_lib/dprintf.rel | 58 + src/nos/lib/filesys_lib/dup.rel | 65 + src/nos/lib/filesys_lib/dup2.rel | 67 + src/nos/lib/filesys_lib/f_trunc.rel | 68 + src/nos/lib/filesys_lib/falign.rel | 67 + src/nos/lib/filesys_lib/filename.rel | 98 + src/nos/lib/filesys_lib/filesys_doclose.rel | 78 + src/nos/lib/filesys_lib/filldesc.rel | 26 + src/nos/lib/filesys_lib/findfs.rel | 85 + src/nos/lib/filesys_lib/findprocess.rel | 98 + src/nos/lib/filesys_lib/fmount.rel | 242 + src/nos/lib/filesys_lib/freeblk.rel | 77 + src/nos/lib/filesys_lib/freebuf.rel | 273 + src/nos/lib/filesys_lib/fs_init.rel | 58 + src/nos/lib/filesys_lib/fs_sync.rel | 95 + src/nos/lib/filesys_lib/fstat.rel | 67 + src/nos/lib/filesys_lib/getfs.rel | 51 + src/nos/lib/filesys_lib/getfsys.rel | 67 + src/nos/lib/filesys_lib/getinode.rel | 86 + src/nos/lib/filesys_lib/getperm.rel | 94 + src/nos/lib/filesys_lib/i_alloc.rel | 132 + src/nos/lib/filesys_lib/i_deref.rel | 112 + src/nos/lib/filesys_lib/i_free.rel | 81 + src/nos/lib/filesys_lib/i_init.rel | 64 + src/nos/lib/filesys_lib/i_open.rel | 378 + src/nos/lib/filesys_lib/i_ref.rel | 50 + src/nos/lib/filesys_lib/i_sync.rel | 70 + src/nos/lib/filesys_lib/ibuf.rel | 12 + src/nos/lib/filesys_lib/ioctl.rel | 77 + src/nos/lib/filesys_lib/isdevice.rel | 29 + src/nos/lib/filesys_lib/kbuf.rel | 12 + src/nos/lib/filesys_lib/link.rel | 67 + src/nos/lib/filesys_lib/lseek.rel | 84 + src/nos/lib/filesys_lib/magic.rel | 34 + src/nos/lib/filesys_lib/max_int.rel | 26 + src/nos/lib/filesys_lib/max_long.rel | 30 + src/nos/lib/filesys_lib/max_uint.rel | 23 + src/nos/lib/filesys_lib/max_ulong.rel | 29 + src/nos/lib/filesys_lib/min_int.rel | 24 + src/nos/lib/filesys_lib/min_long.rel | 30 + src/nos/lib/filesys_lib/min_uint.rel | 23 + src/nos/lib/filesys_lib/min_ulong.rel | 29 + src/nos/lib/filesys_lib/mknod.rel | 71 + src/nos/lib/filesys_lib/mount.rel | 71 + src/nos/lib/filesys_lib/n_creat.rel | 225 + src/nos/lib/filesys_lib/namecomp.rel | 73 + src/nos/lib/filesys_lib/namei.rel | 414 + src/nos/lib/filesys_lib/newfile.rel | 112 + src/nos/lib/filesys_lib/nogood.rel | 15 + src/nos/lib/filesys_lib/nogood_ioctl.rel | 15 + src/nos/lib/filesys_lib/nogood_rdwr.rel | 15 + src/nos/lib/filesys_lib/oft_alloc.rel | 96 + src/nos/lib/filesys_lib/oft_deref.rel | 47 + src/nos/lib/filesys_lib/ok.rel | 15 + src/nos/lib/filesys_lib/ok_rdwr.rel | 15 + src/nos/lib/filesys_lib/open.rel | 91 + src/nos/lib/filesys_lib/p_init.rel | 71 + src/nos/lib/filesys_lib/panic.rel | 38 + src/nos/lib/filesys_lib/rargs.rel | 90 + src/nos/lib/filesys_lib/rdtime.rel | 18 + src/nos/lib/filesys_lib/read.rel | 71 + src/nos/lib/filesys_lib/readwritei.rel | 636 + src/nos/lib/filesys_lib/root_dev.rel | 12 + src/nos/lib/filesys_lib/root_ino.rel | 12 + src/nos/lib/filesys_lib/rwsetup.rel | 94 + src/nos/lib/filesys_lib/scall1_getfsys.rel | 189 + src/nos/lib/filesys_lib/setftim.rel | 62 + src/nos/lib/filesys_lib/srch_dir.rel | 166 + src/nos/lib/filesys_lib/srch_mt.rel | 69 + src/nos/lib/filesys_lib/stat.rel | 67 + src/nos/lib/filesys_lib/stcpy.rel | 142 + src/nos/lib/filesys_lib/sttime.rel | 18 + src/nos/lib/filesys_lib/symlink.rel | 67 + src/nos/lib/filesys_lib/sync.rel | 48 + src/nos/lib/filesys_lib/sys_NONE.rel | 17 + src/nos/lib/filesys_lib/sys__exit.rel | 23 + src/nos/lib/filesys_lib/sys_alarm.rel | 35 + src/nos/lib/filesys_lib/sys_brk.rel | 37 + src/nos/lib/filesys_lib/sys_chdir.rel | 82 + src/nos/lib/filesys_lib/sys_chmod.rel | 25 + src/nos/lib/filesys_lib/sys_chown.rel | 27 + src/nos/lib/filesys_lib/sys_chroot.rel | 51 + src/nos/lib/filesys_lib/sys_close.rel | 21 + src/nos/lib/filesys_lib/sys_dup.rel | 56 + src/nos/lib/filesys_lib/sys_dup2.rel | 83 + src/nos/lib/filesys_lib/sys_execve.rel | 615 + src/nos/lib/filesys_lib/sys_falign.rel | 68 + src/nos/lib/filesys_lib/sys_fork.rel | 16 + src/nos/lib/filesys_lib/sys_getfsys.rel | 60 + src/nos/lib/filesys_lib/sys_getset.rel | 300 + src/nos/lib/filesys_lib/sys_ioctl.rel | 91 + src/nos/lib/filesys_lib/sys_kill.rel | 66 + src/nos/lib/filesys_lib/sys_link.rel | 171 + src/nos/lib/filesys_lib/sys_lseek.rel | 121 + src/nos/lib/filesys_lib/sys_mknod.rel | 235 + src/nos/lib/filesys_lib/sys_mountumount.rel | 319 + src/nos/lib/filesys_lib/sys_open.rel | 379 + src/nos/lib/filesys_lib/sys_pause.rel | 23 + src/nos/lib/filesys_lib/sys_pipe.rel | 158 + src/nos/lib/filesys_lib/sys_readwrite.rel | 96 + src/nos/lib/filesys_lib/sys_reboot.rel | 49 + src/nos/lib/filesys_lib/sys_sbrk.rel | 58 + src/nos/lib/filesys_lib/sys_signal.rel | 117 + src/nos/lib/filesys_lib/sys_statfstat.rel | 86 + src/nos/lib/filesys_lib/sys_stime.rel | 45 + src/nos/lib/filesys_lib/sys_symlink.rel | 124 + src/nos/lib/filesys_lib/sys_sync.rel | 21 + src/nos/lib/filesys_lib/sys_time.rel | 33 + src/nos/lib/filesys_lib/sys_times.rel | 90 + src/nos/lib/filesys_lib/sys_unlink.rel | 140 + src/nos/lib/filesys_lib/sys_utime.rel | 154 + src/nos/lib/filesys_lib/sys_waitpid.rel | 100 + src/nos/lib/filesys_lib/sysdebug.rel | 67 + src/nos/lib/filesys_lib/syserror_table.rel | 102 + src/nos/lib/filesys_lib/systrace.rel | 67 + src/nos/lib/filesys_lib/systrace_dump.rel | 268 + src/nos/lib/filesys_lib/systrace_entry.rel | 151 + src/nos/lib/filesys_lib/systrace_exit.rel | 184 + src/nos/lib/filesys_lib/systrace_table.rel | 141 + src/nos/lib/filesys_lib/time.rel | 69 + src/nos/lib/filesys_lib/truncateto0.rel | 80 + src/nos/lib/filesys_lib/udata.rel | 12 + src/nos/lib/filesys_lib/uf_alloc.rel | 48 + src/nos/lib/filesys_lib/umask.rel | 67 + src/nos/lib/filesys_lib/umount.rel | 65 + src/nos/lib/filesys_lib/unlink.rel | 65 + src/nos/lib/filesys_lib/usrget.rel | 19 + src/nos/lib/filesys_lib/usrget_int.rel | 23 + src/nos/lib/filesys_lib/usrget_str.rel | 21 + src/nos/lib/filesys_lib/usrput.rel | 19 + src/nos/lib/filesys_lib/usrput_int.rel | 21 + src/nos/lib/filesys_lib/valadr.rel | 50 + src/nos/lib/filesys_lib/validblk.rel | 66 + src/nos/lib/filesys_lib/validdev.rel | 62 + src/nos/lib/filesys_lib/vdprintf.rel | 56 + src/nos/lib/filesys_lib/wargs.rel | 83 + src/nos/lib/filesys_lib/wr_inode.rel | 117 + src/nos/lib/filesys_lib/write.rel | 71 + src/nos/lib/filesys_lib/xfs_access.rel | 65 + src/nos/lib/filesys_lib/xfs_chdir.rel | 65 + src/nos/lib/filesys_lib/xfs_chmod.rel | 67 + src/nos/lib/filesys_lib/xfs_chown.rel | 71 + src/nos/lib/filesys_lib/xfs_close.rel | 65 + src/nos/lib/filesys_lib/xfs_creat.rel | 71 + src/nos/lib/filesys_lib/xfs_dup.rel | 65 + src/nos/lib/filesys_lib/xfs_dup2.rel | 67 + src/nos/lib/filesys_lib/xfs_end.rel | 60 + src/nos/lib/filesys_lib/xfs_falign.rel | 67 + src/nos/lib/filesys_lib/xfs_fstat.rel | 67 + src/nos/lib/filesys_lib/xfs_getfsys.rel | 67 + src/nos/lib/filesys_lib/xfs_init.rel | 112 + src/nos/lib/filesys_lib/xfs_ioctl.rel | 77 + src/nos/lib/filesys_lib/xfs_link.rel | 67 + src/nos/lib/filesys_lib/xfs_lseek.rel | 84 + src/nos/lib/filesys_lib/xfs_mknod.rel | 71 + src/nos/lib/filesys_lib/xfs_mount.rel | 71 + src/nos/lib/filesys_lib/xfs_open.rel | 91 + src/nos/lib/filesys_lib/xfs_read.rel | 71 + src/nos/lib/filesys_lib/xfs_stat.rel | 67 + src/nos/lib/filesys_lib/xfs_symlink.rel | 67 + src/nos/lib/filesys_lib/xfs_sync.rel | 48 + src/nos/lib/filesys_lib/xfs_sysdebug.rel | 67 + src/nos/lib/filesys_lib/xfs_systrace.rel | 67 + src/nos/lib/filesys_lib/xfs_time.rel | 69 + src/nos/lib/filesys_lib/xfs_umask.rel | 67 + src/nos/lib/filesys_lib/xfs_umount.rel | 65 + src/nos/lib/filesys_lib/xfs_unlink.rel | 65 + src/nos/lib/filesys_lib/xfs_write.rel | 71 + src/nos/lib/filesys_lib/xip_align.rel | 655 + src/nos/lib/filesys_lib/xip_align_bmap.rel | 257 + src/nos/lib/filesys_lib/xip_align_chase.rel | 161 + src/nos/lib/filesys_lib/xip_align_recurse.rel | 457 + src/nos/lib/filesys_lib/xip_align_reverse.rel | 83 + src/nos/lib/filesys_lib/xip_examine.rel | 215 + src/nos/lib/filesys_lib/xip_find.rel | 211 + src/nos/lib/filesys_lib/xip_get.rel | 84 + src/nos/lib/filesys_lib/xip_reserve.rel | 190 + src/nos/lib/filesys_lib/xip_search.rel | 190 + src/nos/lib/filesys_lib/xip_set.rel | 120 + src/nos/lib/filesys_lib/xip_ualign.rel | 130 + src/nos/lib/filesys_lib/zerobuf.rel | 61 + src/nos/lib/iar.lib | 400 + src/nos/lib/iar_lib/BANKCALLDIRECT.rel | 15 + src/nos/lib/iar_lib/BANKLEAVE32.rel | 12 + src/nos/lib/iar_lib/BANKLEAVEDIRECT.rel | 20 + src/nos/lib/iar_lib/BFCANDASG.rel | 16 + src/nos/lib/iar_lib/BFCLSHASG.rel | 14 + src/nos/lib/iar_lib/BFCMULASG.rel | 16 + src/nos/lib/iar_lib/BFCORASG.rel | 16 + src/nos/lib/iar_lib/BFCRETVAL.rel | 23 + src/nos/lib/iar_lib/BFCSHIFTUP.rel | 11 + src/nos/lib/iar_lib/BFCXORASG.rel | 16 + src/nos/lib/iar_lib/BFMASKEDLD.rel | 12 + src/nos/lib/iar_lib/BFMASKEDST.rel | 14 + src/nos/lib/iar_lib/BFSADDASG.rel | 18 + src/nos/lib/iar_lib/BFSANDASG.rel | 18 + src/nos/lib/iar_lib/BFSCDIVASG.rel | 18 + src/nos/lib/iar_lib/BFSCEXT.rel | 12 + src/nos/lib/iar_lib/BFSCLDSHIFTDOWN.rel | 14 + src/nos/lib/iar_lib/BFSCMODASG.rel | 18 + src/nos/lib/iar_lib/BFSCRSHASG.rel | 17 + src/nos/lib/iar_lib/BFSLSHASG.rel | 17 + src/nos/lib/iar_lib/BFSMULASG.rel | 18 + src/nos/lib/iar_lib/BFSNEGASG.rel | 18 + src/nos/lib/iar_lib/BFSORASG.rel | 18 + src/nos/lib/iar_lib/BFSPOSTDEC.rel | 18 + src/nos/lib/iar_lib/BFSPOSTINC.rel | 18 + src/nos/lib/iar_lib/BFSPREDEC.rel | 18 + src/nos/lib/iar_lib/BFSPREINC.rel | 18 + src/nos/lib/iar_lib/BFSRETVAL.rel | 29 + src/nos/lib/iar_lib/BFSSDIVASG.rel | 20 + src/nos/lib/iar_lib/BFSSEXT.rel | 18 + src/nos/lib/iar_lib/BFSSHIFTUP.rel | 11 + src/nos/lib/iar_lib/BFSSLDSHIFTDOWN.rel | 17 + src/nos/lib/iar_lib/BFSSMODASG.rel | 20 + src/nos/lib/iar_lib/BFSSRSHASG.rel | 20 + src/nos/lib/iar_lib/BFSSUBASG.rel | 18 + src/nos/lib/iar_lib/BFSXORASG.rel | 18 + src/nos/lib/iar_lib/BFUCDIVASG.rel | 18 + src/nos/lib/iar_lib/BFUCLDSHIFTDOWN.rel | 13 + src/nos/lib/iar_lib/BFUCMODASG.rel | 18 + src/nos/lib/iar_lib/BFUCRSHASG.rel | 14 + src/nos/lib/iar_lib/BFUSDIVASG.rel | 20 + src/nos/lib/iar_lib/BFUSLDSHIFTDOWN.rel | 14 + src/nos/lib/iar_lib/BFUSMODASG.rel | 20 + src/nos/lib/iar_lib/BFUSRSHASG.rel | 17 + src/nos/lib/iar_lib/CALLIND.rel | 10 + src/nos/lib/iar_lib/CDIVMOD.rel | 12 + src/nos/lib/iar_lib/CFINDSIGN.rel | 12 + src/nos/lib/iar_lib/CLSH.rel | 10 + src/nos/lib/iar_lib/CLSHASG.rel | 11 + src/nos/lib/iar_lib/CMUL.rel | 10 + src/nos/lib/iar_lib/CMULASG.rel | 11 + src/nos/lib/iar_lib/CSSWITCH.rel | 14 + src/nos/lib/iar_lib/CVSWITCH.rel | 13 + src/nos/lib/iar_lib/ENTAUTODIRECT.rel | 12 + src/nos/lib/iar_lib/ENTPARMDIRECT.rel | 12 + src/nos/lib/iar_lib/FADDASG.rel | 14 + src/nos/lib/iar_lib/FADDSUB.rel | 73 + src/nos/lib/iar_lib/FCMP.rel | 24 + src/nos/lib/iar_lib/FDEC.rel | 13 + src/nos/lib/iar_lib/FDECASG.rel | 15 + src/nos/lib/iar_lib/FDIV.rel | 52 + src/nos/lib/iar_lib/FDIVASG.rel | 14 + src/nos/lib/iar_lib/FENDASG2.rel | 10 + src/nos/lib/iar_lib/FINC.rel | 13 + src/nos/lib/iar_lib/FINCASG.rel | 15 + src/nos/lib/iar_lib/FMUL.rel | 62 + src/nos/lib/iar_lib/FMULASG.rel | 14 + src/nos/lib/iar_lib/FNEGASG.rel | 12 + src/nos/lib/iar_lib/FPACK.rel | 24 + src/nos/lib/iar_lib/FROUND.rel | 22 + src/nos/lib/iar_lib/FSUBASG.rel | 14 + src/nos/lib/iar_lib/FTOL.rel | 30 + src/nos/lib/iar_lib/FUNPACK.rel | 20 + src/nos/lib/iar_lib/LADDASG.rel | 14 + src/nos/lib/iar_lib/LAND.rel | 14 + src/nos/lib/iar_lib/LANDASG.rel | 14 + src/nos/lib/iar_lib/LDEC.rel | 10 + src/nos/lib/iar_lib/LDECASG.rel | 14 + src/nos/lib/iar_lib/LDIVMOD.rel | 24 + src/nos/lib/iar_lib/LEAVE32.rel | 10 + src/nos/lib/iar_lib/LEAVEDIRECT.rel | 10 + src/nos/lib/iar_lib/LENDASG.rel | 10 + src/nos/lib/iar_lib/LENDMULDIVASG.rel | 10 + src/nos/lib/iar_lib/LFINDSIGN.rel | 24 + src/nos/lib/iar_lib/LIBVERSION.rel | 6 + src/nos/lib/iar_lib/LINC.rel | 10 + src/nos/lib/iar_lib/LINCASG.rel | 14 + src/nos/lib/iar_lib/LLSH.rel | 14 + src/nos/lib/iar_lib/LLSHASG.rel | 14 + src/nos/lib/iar_lib/LMUL.rel | 32 + src/nos/lib/iar_lib/LMULASG.rel | 14 + src/nos/lib/iar_lib/LNEG.rel | 12 + src/nos/lib/iar_lib/LNEGASG.rel | 14 + src/nos/lib/iar_lib/LNOT.rel | 12 + src/nos/lib/iar_lib/LNOTASG.rel | 14 + src/nos/lib/iar_lib/LOR.rel | 14 + src/nos/lib/iar_lib/LORASG.rel | 14 + src/nos/lib/iar_lib/LSSWITCH.rel | 17 + src/nos/lib/iar_lib/LSUBASG.rel | 14 + src/nos/lib/iar_lib/LTOF.rel | 25 + src/nos/lib/iar_lib/LVSWITCH.rel | 21 + src/nos/lib/iar_lib/LXOR.rel | 14 + src/nos/lib/iar_lib/LXORASG.rel | 14 + src/nos/lib/iar_lib/MEMCMP.rel | 14 + src/nos/lib/iar_lib/MEMSET.rel | 14 + src/nos/lib/iar_lib/MONITORBANKLEAVE.rel | 13 + src/nos/lib/iar_lib/MONITORBANKLEAVE32.rel | 13 + src/nos/lib/iar_lib/MONITORBANKLEAVEIX.rel | 13 + src/nos/lib/iar_lib/MONITORBANKLEAVEPOP.rel | 13 + src/nos/lib/iar_lib/MONITORLEAVE.rel | 10 + src/nos/lib/iar_lib/MONITORLEAVE32.rel | 10 + src/nos/lib/iar_lib/MONITORLEAVEIX.rel | 10 + src/nos/lib/iar_lib/MONITORLEAVEIXPA.rel | 10 + src/nos/lib/iar_lib/MONITORLEAVEPA.rel | 10 + src/nos/lib/iar_lib/MONITORLEAVEPOP.rel | 12 + src/nos/lib/iar_lib/SCDIV.rel | 16 + src/nos/lib/iar_lib/SCMOD.rel | 16 + src/nos/lib/iar_lib/SCRSH.rel | 10 + src/nos/lib/iar_lib/SCRSHASG.rel | 11 + src/nos/lib/iar_lib/SDIVMOD.rel | 12 + src/nos/lib/iar_lib/SFINDSIGN.rel | 14 + src/nos/lib/iar_lib/SLCMP.rel | 18 + src/nos/lib/iar_lib/SLDIV.rel | 24 + src/nos/lib/iar_lib/SLDIVASG.rel | 14 + src/nos/lib/iar_lib/SLMOD.rel | 24 + src/nos/lib/iar_lib/SLMODASG.rel | 14 + src/nos/lib/iar_lib/SLRSH.rel | 12 + src/nos/lib/iar_lib/SLRSHASG.rel | 14 + src/nos/lib/iar_lib/SLSH.rel | 10 + src/nos/lib/iar_lib/SLSHASG.rel | 13 + src/nos/lib/iar_lib/SLSHASGBCprim.rel | 12 + src/nos/lib/iar_lib/SLSHASGDEprim.rel | 12 + src/nos/lib/iar_lib/SMUL.rel | 12 + src/nos/lib/iar_lib/SMULASG.rel | 13 + src/nos/lib/iar_lib/SMULASGBCprim.rel | 13 + src/nos/lib/iar_lib/SMULASGDEprim.rel | 13 + src/nos/lib/iar_lib/SMULASGIX.rel | 13 + src/nos/lib/iar_lib/SMULASGIY.rel | 13 + src/nos/lib/iar_lib/SSCMP.rel | 12 + src/nos/lib/iar_lib/SSDIV.rel | 16 + src/nos/lib/iar_lib/SSDIVASG.rel | 13 + src/nos/lib/iar_lib/SSDIVASGBCprim.rel | 13 + src/nos/lib/iar_lib/SSDIVASGDEprim.rel | 13 + src/nos/lib/iar_lib/SSDIVASGIX.rel | 13 + src/nos/lib/iar_lib/SSDIVASGIY.rel | 13 + src/nos/lib/iar_lib/SSMOD.rel | 16 + src/nos/lib/iar_lib/SSMODASG.rel | 13 + src/nos/lib/iar_lib/SSMODASGBCprim.rel | 13 + src/nos/lib/iar_lib/SSMODASGDEprim.rel | 13 + src/nos/lib/iar_lib/SSMODASGIX.rel | 13 + src/nos/lib/iar_lib/SSMODASGIY.rel | 13 + src/nos/lib/iar_lib/SSRSH.rel | 10 + src/nos/lib/iar_lib/SSRSHASG.rel | 13 + src/nos/lib/iar_lib/SSRSHASGBCprim.rel | 12 + src/nos/lib/iar_lib/SSRSHASGDEprim.rel | 12 + src/nos/lib/iar_lib/SSRSHASGIX.rel | 13 + src/nos/lib/iar_lib/SSRSHASGIY.rel | 13 + src/nos/lib/iar_lib/SSSWITCH.rel | 13 + src/nos/lib/iar_lib/SSWITCHEND.rel | 12 + src/nos/lib/iar_lib/STRCAT.rel | 12 + src/nos/lib/iar_lib/STRCHR.rel | 10 + src/nos/lib/iar_lib/STRCMP.rel | 12 + src/nos/lib/iar_lib/STRCPY.rel | 12 + src/nos/lib/iar_lib/STRLEN.rel | 12 + src/nos/lib/iar_lib/SVSWITCH.rel | 15 + src/nos/lib/iar_lib/UCDIV.rel | 13 + src/nos/lib/iar_lib/UCMOD.rel | 13 + src/nos/lib/iar_lib/UCRSH.rel | 10 + src/nos/lib/iar_lib/UCRSHASG.rel | 11 + src/nos/lib/iar_lib/ULDIV.rel | 18 + src/nos/lib/iar_lib/ULDIVASG.rel | 14 + src/nos/lib/iar_lib/ULMOD.rel | 17 + src/nos/lib/iar_lib/ULMODASG.rel | 14 + src/nos/lib/iar_lib/ULRSH.rel | 14 + src/nos/lib/iar_lib/ULRSHASG.rel | 14 + src/nos/lib/iar_lib/USDIV.rel | 13 + src/nos/lib/iar_lib/USDIVASG.rel | 13 + src/nos/lib/iar_lib/USDIVASGBCprim.rel | 13 + src/nos/lib/iar_lib/USDIVASGDEprim.rel | 13 + src/nos/lib/iar_lib/USDIVASGIX.rel | 13 + src/nos/lib/iar_lib/USDIVASGIY.rel | 13 + src/nos/lib/iar_lib/USMOD.rel | 11 + src/nos/lib/iar_lib/USMODASG.rel | 13 + src/nos/lib/iar_lib/USMODASGBCprim.rel | 13 + src/nos/lib/iar_lib/USMODASGDEprim.rel | 13 + src/nos/lib/iar_lib/USMODASGIX.rel | 13 + src/nos/lib/iar_lib/USMODASGIY.rel | 13 + src/nos/lib/iar_lib/USRSH.rel | 10 + src/nos/lib/iar_lib/USRSHASG.rel | 13 + src/nos/lib/iar_lib/USRSHASGBCprim.rel | 12 + src/nos/lib/iar_lib/USRSHASGDEprim.rel | 12 + src/nos/lib/iar_lib/USRSHASGIX.rel | 13 + src/nos/lib/iar_lib/USRSHASGIY.rel | 13 + src/nos/lib/iar_lib/VSWITCHEND.rel | 10 + src/nos/lib/internet.lib | 361 + src/nos/lib/internet_lib/Dcache.rel | 15 + src/nos/lib/internet_lib/Dcache_size.rel | 15 + src/nos/lib/internet_lib/Dcache_time.rel | 15 + src/nos/lib/internet_lib/Dcachecmds.rel | 37 + src/nos/lib/internet_lib/Dcmds.rel | 60 + src/nos/lib/internet_lib/Dfile_clean.rel | 15 + src/nos/lib/internet_lib/Dfile_reading.rel | 15 + src/nos/lib/internet_lib/Dfile_updater.rel | 15 + .../lib/internet_lib/Dfile_wait_absolute.rel | 15 + .../lib/internet_lib/Dfile_wait_relative.rel | 15 + src/nos/lib/internet_lib/Dfile_writing.rel | 15 + src/nos/lib/internet_lib/Dserver_retries.rel | 15 + src/nos/lib/internet_lib/Dservers.rel | 15 + src/nos/lib/internet_lib/Dsuffix.rel | 15 + src/nos/lib/internet_lib/Dtrace.rel | 15 + src/nos/lib/internet_lib/Dtypes.rel | 100 + src/nos/lib/internet_lib/Id_cntr.rel | 15 + src/nos/lib/internet_lib/Ip_mib.rel | 168 + src/nos/lib/internet_lib/Ip_trace.rel | 15 + src/nos/lib/internet_lib/Ndtypes.rel | 15 + src/nos/lib/internet_lib/Rawip.rel | 12 + src/nos/lib/internet_lib/Reasmq.rel | 12 + src/nos/lib/internet_lib/Routes.rel | 12 + src/nos/lib/internet_lib/Rt_cache.rel | 12 + src/nos/lib/internet_lib/Rtchits.rel | 12 + src/nos/lib/internet_lib/Rtlookups.rel | 12 + src/nos/lib/internet_lib/add_nameserver.rel | 52 + src/nos/lib/internet_lib/add_reseq.rel | 123 + src/nos/lib/internet_lib/check_ttl.rel | 41 + src/nos/lib/internet_lib/checksuffix.rel | 114 + src/nos/lib/internet_lib/compare_rr.rel | 317 + src/nos/lib/internet_lib/compare_rr_list.rel | 47 + src/nos/lib/internet_lib/copy_rr.rel | 211 + src/nos/lib/internet_lib/copy_rr_list.rel | 43 + src/nos/lib/internet_lib/creat_reasm.rel | 80 + src/nos/lib/internet_lib/dcache_add.rel | 64 + src/nos/lib/internet_lib/dcache_drop.rel | 52 + src/nos/lib/internet_lib/dcache_search.rel | 138 + src/nos/lib/internet_lib/dcache_update.rel | 39 + src/nos/lib/internet_lib/del_ip.rel | 85 + src/nos/lib/internet_lib/delim.rel | 15 + src/nos/lib/internet_lib/dfile_search.rel | 277 + src/nos/lib/internet_lib/dfile_update.rel | 592 + src/nos/lib/internet_lib/dlist_add.rel | 32 + src/nos/lib/internet_lib/dlist_drop.rel | 48 + src/nos/lib/internet_lib/dns_makequery.rel | 166 + src/nos/lib/internet_lib/dns_query.rel | 546 + src/nos/lib/internet_lib/docache.rel | 22 + src/nos/lib/internet_lib/docacheclean.rel | 25 + src/nos/lib/internet_lib/docachelist.rel | 135 + src/nos/lib/internet_lib/docachesize.rel | 55 + src/nos/lib/internet_lib/docachewait.rel | 25 + src/nos/lib/internet_lib/dodnsadd.rel | 50 + src/nos/lib/internet_lib/dodnsdrop.rel | 82 + src/nos/lib/internet_lib/dodnslist.rel | 73 + src/nos/lib/internet_lib/dodnsquery.rel | 200 + src/nos/lib/internet_lib/dodnsretry.rel | 25 + src/nos/lib/internet_lib/dodnstrace.rel | 25 + src/nos/lib/internet_lib/dodomain.rel | 22 + src/nos/lib/internet_lib/domhdr.rel | 969 + src/nos/lib/internet_lib/dosuffix.rel | 57 + src/nos/lib/internet_lib/dtype.rel | 52 + src/nos/lib/internet_lib/dumpdomain.rel | 194 + src/nos/lib/internet_lib/fraghandle.rel | 529 + src/nos/lib/internet_lib/free_reasm.rel | 112 + src/nos/lib/internet_lib/free_rr.rel | 128 + src/nos/lib/internet_lib/freefrag.rel | 24 + src/nos/lib/internet_lib/get_reseq.rel | 51 + src/nos/lib/internet_lib/get_rr.rel | 662 + src/nos/lib/internet_lib/hop.rel | 1239 + src/nos/lib/internet_lib/icmp.rel | 954 + src/nos/lib/internet_lib/icmpcmd.rel | 151 + src/nos/lib/internet_lib/icmphdr.rel | 279 + src/nos/lib/internet_lib/icmpmsg.rel | 266 + src/nos/lib/internet_lib/in_window.rel | 35 + src/nos/lib/internet_lib/inverse_a.rel | 94 + src/nos/lib/internet_lib/ip_encap.rel | 88 + src/nos/lib/internet_lib/ip_garbage.rel | 115 + src/nos/lib/internet_lib/ip_mtu.rel | 78 + src/nos/lib/internet_lib/ip_proc.rel | 19 + src/nos/lib/internet_lib/ip_recv.rel | 256 + src/nos/lib/internet_lib/ip_route.rel | 836 + src/nos/lib/internet_lib/ip_send.rel | 194 + src/nos/lib/internet_lib/ip_timeout.rel | 25 + src/nos/lib/internet_lib/ipcmd.rel | 1155 + src/nos/lib/internet_lib/iphdr.rel | 680 + src/nos/lib/internet_lib/ipinit.rel | 37 + src/nos/lib/internet_lib/ipip_recv.rel | 22 + src/nos/lib/internet_lib/ipsock.rel | 399 + src/nos/lib/internet_lib/isaddr.rel | 58 + src/nos/lib/internet_lib/locaddr.rel | 155 + src/nos/lib/internet_lib/lookup_reasm.rel | 96 + src/nos/lib/internet_lib/make_rr.rel | 197 + src/nos/lib/internet_lib/netuser.rel | 293 + src/nos/lib/internet_lib/newfrag.rel | 48 + src/nos/lib/internet_lib/ping.rel | 974 + src/nos/lib/internet_lib/proc_syn.rel | 211 + src/nos/lib/internet_lib/put_rr.rel | 292 + src/nos/lib/internet_lib/q_pkt.rel | 247 + src/nos/lib/internet_lib/raw_ip.rel | 34 + src/nos/lib/internet_lib/reset.rel | 159 + src/nos/lib/internet_lib/resolve.rel | 148 + src/nos/lib/internet_lib/resolve_a.rel | 140 + src/nos/lib/internet_lib/resolve_mailb.rel | 198 + src/nos/lib/internet_lib/resolve_mx.rel | 209 + src/nos/lib/internet_lib/resolve_rr.rel | 117 + src/nos/lib/internet_lib/resolver.rel | 86 + src/nos/lib/internet_lib/route.rel | 21 + src/nos/lib/internet_lib/rquench.rel | 151 + src/nos/lib/internet_lib/rt_add.rel | 246 + src/nos/lib/internet_lib/rt_blookup.rel | 82 + src/nos/lib/internet_lib/rt_drop.rel | 173 + src/nos/lib/internet_lib/rt_lookup.rel | 187 + src/nos/lib/internet_lib/rt_merge.rel | 164 + src/nos/lib/internet_lib/rt_timeout.rel | 101 + src/nos/lib/internet_lib/send_syn.rel | 57 + src/nos/lib/internet_lib/sim.rel | 222 + src/nos/lib/internet_lib/tcp_icmp.rel | 136 + src/nos/lib/internet_lib/tcp_input.rel | 1217 + src/nos/lib/internet_lib/tcpcmd.rel | 1244 + src/nos/lib/internet_lib/tcphdr.rel | 747 + src/nos/lib/internet_lib/tcpout.rel | 794 + src/nos/lib/internet_lib/tcpsock.rel | 1157 + src/nos/lib/internet_lib/tcpsubr.rel | 1062 + src/nos/lib/internet_lib/tcptimer.rel | 147 + src/nos/lib/internet_lib/tcpuser.rel | 963 + src/nos/lib/internet_lib/trim.rel | 313 + src/nos/lib/internet_lib/ttldec.rel | 130 + src/nos/lib/internet_lib/udp.rel | 735 + src/nos/lib/internet_lib/udpcmd.rel | 193 + src/nos/lib/internet_lib/udphdr.rel | 161 + src/nos/lib/internet_lib/udpsock.rel | 375 + src/nos/lib/internet_lib/update.rel | 920 + src/nos/lib/intl.lib | 34 + src/nos/lib/intl_lib/__dgetfail.rel | 24 + src/nos/lib/intl_lib/__failtext.rel | 19 + src/nos/lib/intl_lib/__fgetfail.rel | 24 + src/nos/lib/intl_lib/__getfail.rel | 22 + src/nos/lib/intl_lib/_dprintf.rel | 27 + src/nos/lib/intl_lib/_fprintf.rel | 27 + src/nos/lib/intl_lib/_fputs.rel | 52 + src/nos/lib/intl_lib/_printf.rel | 25 + src/nos/lib/intl_lib/_puts.rel | 48 + src/nos/lib/intl_lib/_strcpy.rel | 50 + src/nos/lib/intl_lib/_strlen.rel | 48 + src/nos/lib/intl_lib/_strncmp.rel | 62 + src/nos/lib/intl_lib/_strncpy.rel | 59 + src/nos/lib/intl_lib/_vdprintf.rel | 54 + src/nos/lib/intl_lib/_vfprintf.rel | 54 + src/nos/lib/intl_lib/_vprintf.rel | 50 + src/nos/lib/intl_lib/gettext.rel | 42 + src/nos/lib/messages.lib | 3032 + src/nos/lib/messages_lib/0000_ffff_.rel | 10 + .../lib/messages_lib/0001_508a__08_20_08.rel | 10 + .../0002_17d6__09_09_20MRU_09_20A.rel | 16 + .../0003_002f__09_09_256u_20Lcp_2.rel | 14 + .../0004_14b3__09_09_256u_20Lcp_2.rel | 16 + .../0005_7313__09_09pid_20_25d_2c.rel | 14 + .../0006_bdbf__09_2510ld_20Cmp_2c.rel | 18 + .../0007_d27a__09_2510ld_20Cmp_2c.rel | 18 + .../0008_c900__09_2510ld_20Search.rel | 14 + .../lib/messages_lib/0009_2913__09_25ld.rel | 10 + .../000a_1c3a__09_25p_09_25u_09_2.rel | 12 + .../lib/messages_lib/000b_b9ba__09_25s.rel | 10 + .../000c_21cf__09_25s_09_25s_09_2.rel | 14 + .../000d_1d7d__09_25s_09_25s_0a.rel | 10 + .../lib/messages_lib/000e_b532__09_25s_0a.rel | 10 + .../000f_26e5__09_25u_09_25s_0a.rel | 10 + .../0010_7e01__09_28open_20for_20.rel | 12 + .../messages_lib/0011_d62d__09_3c_25u_3e.rel | 10 + src/nos/lib/messages_lib/0012_9f29__09IN.rel | 10 + .../messages_lib/0013_53f6__09Local_3a_09.rel | 10 + .../0014_a684__09Remote_3a_09.rel | 12 + .../0015_e0e0__09Urgent_20pointer.rel | 14 + .../0016_c0f0__09changes_3a_200x_.rel | 12 + .../0017_6a8d__09connection_200x_.rel | 12 + .../0018_a28a__09connection_20ID_.rel | 14 + .../0019_cf72__09delta_20ACK_20an.rel | 18 + .../001a_8077__09delta_20ACK_3a_2.rel | 12 + .../001b_4a2b__09delta_20ID_3a_20.rel | 12 + .../001c_7710__09delta_20SEQ_20im.rel | 16 + .../001d_a966__09delta_20SEQ_3a_2.rel | 12 + .../001e_f05a__09delta_20WINDOW_3.rel | 14 + .../001f_ad18__09increment_20ID_0.rel | 12 + .../0020_13bc__09local_20IP_20add.rel | 14 + .../0021_efeb__09pid_20_25d_2c_20.rel | 12 + src/nos/lib/messages_lib/0022_a0dd__0a.rel | 10 + .../0023_f279__0a_20_20_20_20.rel | 10 + .../0024_f170__0a_20_20_20_20_20_.rel | 10 + .../0025_da94__0a_25s_20_2d_20_25.rel | 12 + .../0026_e088__0a_25s_20_2d_20_25.rel | 12 + .../0027_c061__0a_2a_2a_2a_20Loca.rel | 18 + .../0028_932c__0a_2a_2a_2a_20Unab.rel | 20 + .../0029_2592__0a_2a_2a_2a_2a_2a_.rel | 14 + .../002a_0887__0aCurrent_20remote.rel | 14 + .../002b_ebd8__0aReclaimation_20a.rel | 14 + .../002c_c546__0aUsed_20address_2.rel | 14 + .../messages_lib/002d_e8fc__0apanic_3a_20.rel | 10 + .../002e_4403__20_0aend_0asize_20.rel | 12 + src/nos/lib/messages_lib/002f_f289__20_20.rel | 10 + .../lib/messages_lib/0030_3839__20_20_20.rel | 10 + .../messages_lib/0031_8d78__20_20_20_20.rel | 10 + .../0032_de40__20_20_20_20_20.rel | 10 + .../0033_3e02__20_20_20_20_20_20_.rel | 16 + .../0034_0534__20_20_20_20_20_20_.rel | 14 + .../0035_3fef__20_20_20_20_20_20_.rel | 16 + .../0036_3164__20_20_20_20_20_20_.rel | 16 + .../0037_c6d7__20_20_20_20_20_20_.rel | 18 + .../0038_9d57__20_20_20_20_20_20_.rel | 18 + .../0039_d46e__20_20_20_20_20_20_.rel | 20 + .../003a_f37c__20_20_20_20_20_20_.rel | 24 + .../003b_5dd1__20_20_20_20_20_20_.rel | 18 + .../003c_0406__20_20_20_20_20_20_.rel | 14 + .../003d_da67__20_20_20_20_20_20_.rel | 14 + .../003e_f638__20_20_20_20_20_20_.rel | 14 + .../003f_74c7__20_20_20_20_20_20_.rel | 14 + .../0040_f10d__20_20_20_20_20_20_.rel | 14 + .../0041_d02b__20_20_20_20_20_20_.rel | 16 + .../0042_0105__20_20_20_20_20_20_.rel | 16 + .../0043_c46d__20_20_20_20_20_20_.rel | 12 + .../0044_3a28__20_20_20_20_20_20_.rel | 16 + .../0045_48df__20_20_20_20_20_20_.rel | 14 + .../0046_da1e__20_20_20_20_20_20s.rel | 22 + .../0047_3800__20_20_20_20_20_26A.rel | 18 + .../0048_0e60__20_20_20_20_20_28_.rel | 14 + .../0049_d7d4__20_20_20_20_20Broa.rel | 12 + .../004a_f5a8__20_20_20_20_20Defa.rel | 14 + .../004b_de7b__20_20_20_20_20Host.rel | 12 + .../004c_a271__20_20_20_20_20INF.rel | 10 + .../004d_1775__20_20_20_20_20IP_2.rel | 14 + .../004e_7765__20_20_20_20_20Name.rel | 14 + .../004f_6879__20_20_20_20_20Subn.rel | 14 + .../0050_dac6__20_20_20_20_25_2d4.rel | 12 + .../0051_b576__20_20_20_20_2512s.rel | 10 + .../0052_e5e6__20_20_20_20_253u_0.rel | 10 + .../0053_ed50__20_20_20_20_25s_20.rel | 14 + .../0054_3528__20_20_20_20_25s_20.rel | 14 + .../0055_cbdf__20_20_20_20_25s_20.rel | 14 + .../0056_f7f3__20_20_20_20_26UCB_.rel | 14 + .../0057_9bd9__20_20_20_20In_09TC.rel | 22 + .../0058_7788__20_20_20_20Out_09T.rel | 22 + .../0059_8f4d__20_20_20_20Record_.rel | 12 + .../005a_eacd__20_20_20_20Upload_.rel | 12 + .../005b_2da2__20_20_20_25s_0a.rel | 10 + .../messages_lib/005c_ad66__20_20_20PUSH.rel | 10 + .../005d_9f3a__20_20_20TCP_20chec.rel | 14 + .../005e_5946__20_20_20connection.rel | 14 + .../005f_f01f__20_20_3d_3d_3d_3d_.rel | 14 + .../0060_cfff__20_20_3d_3d_3d_3d_.rel | 16 + .../0061_8181__20_20SR_20_5bnumbe.rel | 12 + .../0062_1149__20_20S_5bF_5d_20na.rel | 18 + .../0063_47af__20_20remote_20IP_2.rel | 14 + .../0064_ccb1__20_20seq_20x_25lx_.rel | 14 + .../lib/messages_lib/0065_c997__20_21_3f.rel | 10 + .../lib/messages_lib/0066_536e__20_21A.rel | 10 + .../lib/messages_lib/0067_27d1__20_21F.rel | 10 + .../lib/messages_lib/0068_ceaf__20_21H.rel | 10 + .../lib/messages_lib/0069_ab99__20_21N.rel | 10 + .../lib/messages_lib/006a_5266__20_21P.rel | 10 + .../lib/messages_lib/006b_60fd__20_21S.rel | 10 + .../006c_bac3__20_23_20_20S_23_20.rel | 20 + .../messages_lib/006d_9a7d__20_25_2d15s.rel | 10 + .../messages_lib/006e_85f4__20_25_2d3d_20.rel | 10 + .../006f_a413__20_2502u_2f_2502u.rel | 12 + .../0070_d8f4__20_2502u_2f_2502u_.rel | 12 + .../lib/messages_lib/0071_4d6e__20_2502x.rel | 10 + .../0072_cad1__20_2510lu_2510lu_2.rel | 14 + .../0073_43b6__20_254d_20_254d.rel | 10 + .../0074_78a4__20_258s_20_20_20_2.rel | 14 + .../0075_6904__20_25lu_20bps_0a.rel | 12 + .../lib/messages_lib/0076_269f__20_25s.rel | 10 + .../lib/messages_lib/0077_c302__20_25s_0a.rel | 10 + .../0078_10eb__20_25s_20_25s_20_2.rel | 12 + .../messages_lib/0079_c236__20_25s_25s.rel | 10 + .../messages_lib/007a_3c84__20_25s_2b_25x.rel | 10 + .../lib/messages_lib/007b_97d2__20_25u_0a.rel | 10 + .../007c_5984__20_25u_2d_3e_25u.rel | 10 + .../007d_98a5__20_28_25ld_20ms_29.rel | 12 + .../007e_9556__20_28_25s_20seek_3.rel | 12 + .../007f_6268__20_28_25s_29_0a.rel | 10 + .../0080_3f71__20_28ASCII_20dump_.rel | 12 + .../0081_05b3__20_28Hex_2fASCII_2.rel | 12 + .../lib/messages_lib/0082_0cd7__20_28S_29.rel | 10 + .../0083_ef5f__20_28headers_20onl.rel | 12 + .../0084_c04d__20_28published_29.rel | 12 + .../messages_lib/0085_ac28__20_2a_2a_2a.rel | 10 + .../lib/messages_lib/0086_8841__20_2d_20.rel | 10 + .../0087_ace7__20_2d_20no_20broad.rel | 12 + .../lib/messages_lib/0088_01a0__20APND.rel | 10 + .../0089_2da0__20Ack_20x_25lx.rel | 12 + .../lib/messages_lib/008a_f35d__20BUSY.rel | 10 + src/nos/lib/messages_lib/008b_43af__20CE.rel | 10 + .../008c_d667__20CHECKSUM_20ERROR.rel | 14 + .../lib/messages_lib/008d_5947__20CHOKE.rel | 10 + src/nos/lib/messages_lib/008e_3c3c__20DF.rel | 10 + .../messages_lib/008f_26b0__20Data_20_25u.rel | 10 + src/nos/lib/messages_lib/0090_5125__20EOF.rel | 10 + src/nos/lib/messages_lib/0091_2269__20ERR.rel | 10 + .../0092_869e__20IPaddr_20_25s.rel | 12 + .../0093_d267__20Illegal_20I_2dfi.rel | 12 + .../0094_d316__20Invalid_20contro.rel | 14 + .../0095_1e4f__20Invalid_20seq_20.rel | 12 + .../0096_fd02__20MC_3a_20int_20_2.rel | 20 + src/nos/lib/messages_lib/0097_eb24__20MF.rel | 10 + .../lib/messages_lib/0098_747e__20MORE.rel | 10 + .../messages_lib/0099_c5ed__20MSS_20_25u.rel | 10 + src/nos/lib/messages_lib/009a_3976__20NAK.rel | 10 + .../messages_lib/009b_c092__20NR_3d_25d.rel | 10 + .../messages_lib/009c_dc29__20NS_3d_25d.rel | 10 + .../009d_df24__20RX_3a_20int_20_2.rel | 18 + .../009e_78a4__20Raw_20output.rel | 12 + .../009f_a393__20Remote_3a_20_25s.rel | 12 + .../lib/messages_lib/00a0_d7c2__20Retry.rel | 10 + .../00a1_d322__20State_3a_20_25s_.rel | 12 + src/nos/lib/messages_lib/00a2_c86b__20TMP.rel | 10 + .../00a3_2dcc__20TSTAMP_20_25lu_2.rel | 14 + .../00a4_e8c1__20TX_3a_20int_20_2.rel | 16 + .../00a5_d70d__20Too_2dlong_20I_2.rel | 12 + .../messages_lib/00a6_5a85__20UP_20x_25x.rel | 10 + .../00a7_2210__20Unack_3a_20_25_2.rel | 18 + .../00a8_3a68__20Unknown_20passwo.rel | 12 + .../00a9_23f3__20Vr_20_3d_20_25d_.rel | 12 + .../00aa_a984__20WSCALE_20_25u.rel | 12 + .../messages_lib/00ab_1d25__20Wnd_20_25u.rel | 10 + .../00ac_e77d__20_5b_25s_5d_20_25.rel | 12 + .../00ad_7762__20_5bcts_20flow_20.rel | 12 + .../00ae_2f4d__20_5brlsd_20line_2.rel | 14 + .../00af_db59__20_5btrigger_200x_.rel | 12 + .../lib/messages_lib/00b0_bc24__20asy_20.rel | 10 + .../00b1_c96a__20bad_20header_21_.rel | 12 + .../00b2_0acc__20bad_20packet_0a.rel | 12 + .../messages_lib/00b3_d795__20cmd_20_25u.rel | 10 + .../messages_lib/00b4_1813__20code_20_25s.rel | 10 + .../messages_lib/00b5_ad83__20dest_20_25s.rel | 10 + .../00b6_e3a3__20dest_20_25s_20_2.rel | 12 + .../lib/messages_lib/00b7_4976__20diag.rel | 10 + .../lib/messages_lib/00b8_e36a__20file.rel | 10 + .../lib/messages_lib/00b9_5e9d__20full.rel | 10 + .../00ba_4c62__20hwaddr_20_25s_0a.rel | 12 + .../00bb_ed56__20hwlen_20_25u.rel | 12 + .../00bc_2971__20hwtype_20_25s.rel | 12 + .../00bd_3119__20id_20_25u_20offs.rel | 12 + .../00be_8f2f__20id_20_25u_20pctl.rel | 16 + .../00bf_20f7__20id_20_25u_20seq_.rel | 12 + .../00c0_8c07__20idle_20timer_20_.rel | 14 + .../lib/messages_lib/00c1_7166__20input.rel | 10 + .../messages_lib/00c2_6c92__20len_20_25u.rel | 10 + .../lib/messages_lib/00c3_0c74__20line.rel | 10 + .../00c4_2537__20new_20gateway_20.rel | 12 + .../00c5_ea43__20new_20gateway_20.rel | 12 + .../lib/messages_lib/00c6_e3db__20none.rel | 10 + .../00c7_826b__20offset_20_25u_20.rel | 12 + .../messages_lib/00c8_6680__20op_20_25u.rel | 10 + .../messages_lib/00c9_f7d5__20op_20REPLY.rel | 12 + .../00ca_5e3d__20op_20REQUEST.rel | 12 + .../00cb_9500__20op_20REVERSE_20R.rel | 12 + .../00cc_3faa__20op_20REVERSE_20R.rel | 12 + .../lib/messages_lib/00cd_8a3d__20output.rel | 10 + .../00ce_5896__20pid_3d0x_25x_0a.rel | 12 + .../00cf_aba6__20pid_3dARP_0a.rel | 12 + .../messages_lib/00d0_d4e9__20pid_3dIP_0a.rel | 10 + .../00d1_a349__20pid_3dNET_2fROM_.rel | 12 + .../00d2_932f__20pid_3dTEXNET_0a.rel | 12 + .../00d3_4927__20pid_3dText_0a.rel | 12 + .../00d4_c207__20pid_3dX_2e25_0a.rel | 12 + .../lib/messages_lib/00d5_5760__20pipe.rel | 10 + .../00d6_ac0a__20pointer_20_25u.rel | 12 + .../00d7_5557__20prot_20_25s_0a.rel | 12 + .../00d8_0187__20prot_20_25u_0a.rel | 12 + .../00d9_75a2__20prot_200x_25x_20.rel | 12 + .../messages_lib/00da_3541__20prot_20IP.rel | 10 + .../00db_1888__20receive_20_20_2d.rel | 22 + .../lib/messages_lib/00dc_f2f3__20sock.rel | 10 + .../messages_lib/00dd_c067__20spi_20_25lx.rel | 10 + .../00de_2902__20sw_20over_20_25l.rel | 14 + .../messages_lib/00df_0bfc__20tos_20_25u.rel | 10 + .../00e0_e1c5__20trace_20file_3a_.rel | 12 + .../00e1_ca97__20tracing_20off_0a.rel | 12 + .../00e2_be19__20transmit_20_2d_2.rel | 22 + .../00e3_afd2__20ttl_20_25d_0a.rel | 10 + .../00e4_6f53__20txseq_20_25d_20r.rel | 12 + .../00e5_c8f3__20type_200x_25x_0a.rel | 12 + .../00e6_6772__20type_20ARP_0a.rel | 12 + .../00e7_5c83__20type_20IP_0a.rel | 12 + .../00e8_f937__20type_20REVARP_0a.rel | 12 + src/nos/lib/messages_lib/00e9_c53a__20v.rel | 10 + .../00ea_9158__20vers_20_25u_20en.rel | 14 + .../messages_lib/00eb_994d__20wnd_20_25d.rel | 10 + .../lib/messages_lib/00ec_426e__20_7c_20.rel | 10 + src/nos/lib/messages_lib/00ed_3f0c__21.rel | 10 + .../00ee_f9eb__21_21_20_25s_20_25.rel | 12 + .../00ef_ef2d__21_21_20maximum_20.rel | 14 + .../00f0_55d7__22_25s_22_20_2d_20.rel | 16 + .../00f1_60ae__23_20queries_20eac.rel | 14 + .../00f2_1acc__23_20secs_20to_20w.rel | 16 + .../00f3_fb95__25_2d10_2e10s_20_2.rel | 12 + .../00f4_3035__25_2d10s_20IP_20ad.rel | 16 + .../00f5_01be__25_2d10s_25_2d17s.rel | 12 + .../00f6_4da0__25_2d10s_25_2d17s_.rel | 12 + .../00f7_ff4a__25_2d10s_25_2d6s.rel | 12 + .../00f8_e1c2__25_2d11s_25_2d9s_2.rel | 12 + .../lib/messages_lib/00f9_7335__25_2d13s.rel | 10 + .../lib/messages_lib/00fa_27e5__25_2d15s.rel | 10 + .../lib/messages_lib/00fb_0d8d__25_2d16s.rel | 10 + .../00fc_e560__25_2d16s_20_20.rel | 10 + .../00fd_f903__25_2d16s_25_2d3u_2.rel | 12 + .../00fe_2609__25_2d16s_25_2d9lu_.rel | 12 + .../lib/messages_lib/00ff_1455__25_2d17s.rel | 10 + .../0100_e920__25_2d20s_258lu_258.rel | 14 + .../lib/messages_lib/0101_8589__25_2d22s.rel | 10 + .../messages_lib/0102_b616__25_2d22s_0a.rel | 10 + .../lib/messages_lib/0103_9c51__25_2d23s.rel | 10 + .../lib/messages_lib/0104_bf59__25_2d2u.rel | 10 + .../0105_6601__25_2d32s_20_28_25l.rel | 14 + .../lib/messages_lib/0106_a681__25_2d3u.rel | 10 + .../lib/messages_lib/0107_ea81__25_2d4d.rel | 10 + .../0108_6f94__25_2d4d_255d_20_25.rel | 12 + .../lib/messages_lib/0109_eb89__25_2d4u.rel | 10 + .../lib/messages_lib/010a_2455__25_2d5ld.rel | 10 + .../lib/messages_lib/010b_90e5__25_2d7lu.rel | 10 + .../010c_8982__25_2d7s_20_25_2d8s.rel | 12 + .../lib/messages_lib/010d_da22__25_2d8lu.rel | 10 + .../lib/messages_lib/010e_d1e2__25_2ds.rel | 10 + src/nos/lib/messages_lib/010f_1e56__2502x.rel | 10 + .../messages_lib/0110_3773__2504x_20_20.rel | 10 + .../0111_6df9__2504x_20_20_2504x_.rel | 20 + .../0112_aa0a__2504x_3a_2504x.rel | 12 + .../0113_83ad__2510lu_20In_2c_20_.rel | 20 + .../0114_cbd3__2510lu_20Out_2c_20.rel | 16 + .../0115_2875__2510lu_2510lu_255l.rel | 16 + .../0116_a689__251s_20_253d_20_20.rel | 14 + .../0117_e9b8__252d_20_25_2d6s_20.rel | 20 + .../0118_b620__252d_20_25_2d6s_20.rel | 18 + .../lib/messages_lib/0119_1703__253d_3a.rel | 10 + .../011a_b932__254d_20_25_2d8s_25.rel | 14 + src/nos/lib/messages_lib/011b_936b__254s.rel | 10 + src/nos/lib/messages_lib/011c_4a96__258lu.rel | 10 + .../lib/messages_lib/011d_5eaf__258lu_0a.rel | 10 + src/nos/lib/messages_lib/011e_3acb__258s.rel | 10 + .../011f_3341__258u_2510u_2511lu_.rel | 14 + .../0120_fd73__259p_20_20_20_253d.rel | 16 + .../0121_b8a6__259p_20_25_2d8d_25.rel | 14 + .../0122_1719__259p_20_25_2d9s_25.rel | 12 + .../0123_1260__259p_256u_20_20_25.rel | 12 + .../0124_482b__259p_256u_256u_20_.rel | 12 + src/nos/lib/messages_lib/0125_fcae__25c.rel | 10 + .../lib/messages_lib/0126_6d8a__25c_20.rel | 10 + .../0127_3d14__25c_20_257s_20_257.rel | 18 + .../messages_lib/0128_22d3__25c_25c_25c.rel | 10 + .../0129_4b6e__25c_25c_25c_0a.rel | 10 + .../012a_2970__25c_25c_25c_253d_2.rel | 16 + .../messages_lib/012b_8514__25c_25s_0a.rel | 10 + .../lib/messages_lib/012c_086d__25c_5b2J.rel | 10 + src/nos/lib/messages_lib/012d_8811__25d.rel | 10 + .../lib/messages_lib/012e_aeda__25d_0a.rel | 10 + .../012f_cd50__25d_20message_25s_.rel | 14 + src/nos/lib/messages_lib/0130_ea62__25ld.rel | 10 + src/nos/lib/messages_lib/0131_eb6a__25lu.rel | 10 + .../lib/messages_lib/0132_63ed__25lu_0a.rel | 10 + .../0133_f325__25lu_2f_25lu_0a.rel | 10 + .../lib/messages_lib/0134_d273__25p_20.rel | 10 + .../messages_lib/0135_1c93__25p_20_256lu.rel | 10 + src/nos/lib/messages_lib/0136_ec2f__25s.rel | 10 + .../lib/messages_lib/0137_7643__25s_0a.rel | 10 + .../messages_lib/0138_0276__25s_0a_25s_0a.rel | 10 + .../lib/messages_lib/0139_f81b__25s_20.rel | 10 + .../013a_8b7d__25s_20_2502d_2502d.rel | 14 + .../messages_lib/013b_7be3__25s_20_25p_0a.rel | 10 + .../messages_lib/013c_518b__25s_20_25s_0a.rel | 10 + .../013d_ca49__25s_20_25s_3a_20_2.rel | 16 + .../013e_43c6__25s_20_25s_3a_20Er.rel | 16 + .../messages_lib/013f_b8b7__25s_20_2d_20.rel | 10 + .../0140_1170__25s_20_2d_20Differ.rel | 12 + .../0141_d4cc__25s_20_2d_20Remote.rel | 12 + .../0142_4968__25s_20_2d_20Same_0.rel | 12 + .../0143_ace2__25s_20dialer_3a_20.rel | 12 + .../0144_933b__25s_20errno_20_25d.rel | 12 + .../0145_f768__25s_20file_25s_2e_.rel | 18 + .../0146_c691__25s_20is_20unreach.rel | 12 + .../0147_a4a4__25s_20logged_20in.rel | 12 + .../0148_a64e__25s_20logged_20in_.rel | 12 + .../0149_b314__25s_20refs_20to_20.rel | 14 + .../014a_bd91__25s_20remain_20_25.rel | 12 + .../messages_lib/014b_bf9e__25s_20thru_20.rel | 10 + .../014c_243b__25s_20type_20_25s_.rel | 14 + .../014d_7d69__25s_25_25_25s_2ebb.rel | 12 + .../messages_lib/014e_d324__25s_25c_0a.rel | 10 + .../014f_ce9c__25s_25c_25c_25c.rel | 10 + .../lib/messages_lib/0150_910e__25s_25s.rel | 10 + .../messages_lib/0151_46b5__25s_25s_0a.rel | 10 + .../messages_lib/0152_4d3a__25s_25s_0a_0a.rel | 10 + .../lib/messages_lib/0153_47c0__25s_3a.rel | 10 + .../lib/messages_lib/0154_6911__25s_3a_0a.rel | 10 + .../lib/messages_lib/0155_e749__25s_3a_20.rel | 10 + .../0156_650d__25s_3a_20_25d_20me.rel | 12 + .../0157_86f5__25s_3a_20_25ld_0a.rel | 10 + .../0158_7189__25s_3a_20_25s_0a.rel | 10 + .../0159_35bd__25s_3a_20_25s_2c.rel | 10 + .../015a_adab__25s_3a_20Interface.rel | 14 + .../015b_5f8a__25s_3a_20PPP_2fPAP.rel | 14 + .../015c_0cde__25s_3a_20bad_20dev.rel | 12 + .../015d_5351__25s_3a_20bad_20ino.rel | 14 + .../015e_8c96__25s_3a_20corrupted.rel | 14 + .../015f_d157__25s_3a_20fs_20of_2.rel | 16 + .../0160_1d98__25s_3a_20local_20n.rel | 14 + .../0161_bba5__25s_3a_20mode_20_2.rel | 14 + .../0162_60cc__25s_3a_20not_20a_2.rel | 14 + .../0163_4ed5__25s_3a_20release_5.rel | 16 + .../0164_04ae__25s_3a_20rtt_20_25.rel | 12 + .../0165_db35__25s_3a_20srtt_20_2.rel | 14 + .../0166_65f3__25s_3c_25ld_40_25s.rel | 12 + .../0167_6e45__25s_3e_20_25s_20_2.rel | 12 + .../0168_205d__25s_3e_20Invalid_2.rel | 18 + .../messages_lib/0169_c86f__25s_40_25s_0a.rel | 10 + .../016a_82c1__25s_40_25s_3a_0a.rel | 10 + .../016b_9fa6__25sMAILER_2dDAEMON.rel | 18 + .../lib/messages_lib/016c_c284__25sR_0a.rel | 10 + .../lib/messages_lib/016d_2293__25u_0a.rel | 10 + .../016e_c0bd__25u_20additional_3.rel | 12 + .../016f_7db0__25u_20answers_3a_0.rel | 12 + .../0170_7c48__25u_20authority_3a.rel | 12 + .../0171_b843__25u_20questions_3a.rel | 12 + .../0172_af86__25u_3a_20calls_20_.rel | 18 + src/nos/lib/messages_lib/0173_52fc__25x.rel | 10 + .../0174_b099__26AXB_20_20_20_20_.rel | 18 + .../0175_7bf6__26CB_20_20_20_20_2.rel | 22 + .../0176_c497__26TCB_20_20_20_20_.rel | 24 + .../0177_f73b__26UCB_20_20_20_20_.rel | 14 + .../messages_lib/0178_aa89__27_25c_27_0a.rel | 10 + src/nos/lib/messages_lib/0179_a2cd__28.rel | 10 + .../017a_ba4c__28_252u_29_25_2d20.rel | 12 + .../lib/messages_lib/017b_52bf__28F_29.rel | 10 + .../lib/messages_lib/017c_93fe__28P_29.rel | 10 + .../messages_lib/017d_38a6__28P_2fF_29.rel | 10 + .../017e_7b70__28compressed_20ALL.rel | 14 + .../017f_c1c3__28hopcheck_29_20IC.rel | 16 + .../0180_565f__28missing_20UI_21_.rel | 12 + .../0181_f935__28not_20odd_21_29_.rel | 12 + src/nos/lib/messages_lib/0182_abc9__29_0a.rel | 10 + .../0183_bfa2__2a_2a_20smtp_3a_20.rel | 14 + .../lib/messages_lib/0184_1969__2a_2a_2a.rel | 10 + .../0185_a448__2a_2a_2a_20Done_0a.rel | 12 + .../0186_c993__2a_2a_2a_20Unable_.rel | 14 + .../0187_b489__2a_2a_2a_2a_2a_2a_.rel | 10 + src/nos/lib/messages_lib/0188_5b29__2c_20.rel | 10 + .../0189_1a71__2c_20err_20_25d.rel | 10 + .../018a_099c__2d_2d_2d_2d_2d_20E.rel | 16 + .../018b_01ea__2d_2d_2d_2d_2d_20F.rel | 16 + .../018c_04ae__2d_2d_2d_2d_2d_2d_.rel | 22 + .../018d_1b54__2d_2d_2d_2d_2d_2d_.rel | 24 + .../018e_3d1a__2d_2d_2d_2d_2d_2d_.rel | 16 + .../lib/messages_lib/018f_8ddf__2d_3e_25s.rel | 10 + .../0190_589d__2d_3e_25s_20ihl_20.rel | 12 + src/nos/lib/messages_lib/0191_e6c1__2e_0a.rel | 10 + .../messages_lib/0192_ed84__2f_25lu_20ms.rel | 10 + .../0193_6d9b__2f_25lu_20ms_0a.rel | 10 + .../0194_a44f__2f_25lu_20ms_3b_20.rel | 12 + .../lib/messages_lib/0195_096e__2f_25u.rel | 10 + src/nos/lib/messages_lib/0196_96dc__2fEX.rel | 10 + src/nos/lib/messages_lib/0197_79e7_0_25o.rel | 10 + .../0198_8157_007Incoming_20_25s_.rel | 16 + .../0199_b04e_0x_2503x_20_20_20_2.rel | 20 + .../messages_lib/019a_3f3a_0x_2504x_0a.rel | 10 + .../messages_lib/019b_8308_0x_2508lx_0a.rel | 10 + src/nos/lib/messages_lib/019c_ab8d_0x_25x.rel | 10 + .../019d_6f63_0x_25x_09_09_25ld_0.rel | 18 + .../019e_fea8_0x_25x_09_09_25ld_0.rel | 18 + .../lib/messages_lib/019f_f01c_0x_25x_0a.rel | 10 + .../01a0_d635_100_20Warning_3a_20.rel | 20 + .../01a1_3f47_150_20Opening_20dat.rel | 16 + src/nos/lib/messages_lib/01a2_67ab_200_20.rel | 10 + .../01a3_cc8d_200_20MKD_20ok_0a.rel | 12 + .../messages_lib/01a4_6c3a_200_20Ok_0a.rel | 10 + .../01a5_ba32_200_20Port_20comman.rel | 14 + .../01a6_1db7_200_20Type_20_25s_2.rel | 12 + .../01a7_1192_215_20_25s_20Type_3.rel | 14 + .../01a8_01fe_220_20_25s_20FTP_20.rel | 16 + .../01a9_7804_221_20Goodbye_21_0a.rel | 12 + .../01aa_3f54_226_20File_20receiv.rel | 14 + .../01ab_caea_226_20File_20sent_2.rel | 12 + .../01ac_9fe8_230_20Logged_20in_0.rel | 12 + .../messages_lib/01ad_55db_250_20_25s_0a.rel | 10 + .../01ae_c720_250_20File_20delete.rel | 12 + .../messages_lib/01af_de54_250_2d_25s_0a.rel | 10 + .../01b0_9400_257_20_22_25s_22_20.rel | 14 + .../01b1_24f1_331_20Enter_20PASS_.rel | 14 + .../01b2_273f_421_20System_20over.rel | 16 + .../01b3_e43d_425_20Data_20connec.rel | 14 + .../01b4_7e66_500_20Unknown_20com.rel | 14 + .../01b5_3d39_500_20Unsupported_2.rel | 16 + .../01b6_fe7e_501_20Bad_20port_20.rel | 14 + .../01b7_065e_501_20Only_20logica.rel | 16 + .../01b8_a2bf_501_20Unknown_20typ.rel | 14 + .../01b9_41cf_502_20Command_20not.rel | 16 + .../01ba_f576_503_20Login_20with_.rel | 14 + .../01bb_7dc2_530_20Please_20log_.rel | 16 + .../01bc_c53a_550_20Can_27t_20rea.rel | 14 + .../01bd_4770_550_20Delete_20fail.rel | 14 + .../01be_38c3_550_20Permission_20.rel | 14 + .../01bf_95c1_552_20Write_20error.rel | 14 + .../01c0_7eaf_553_20Can_27t_20cre.rel | 14 + .../01c1_f0b2_553_20Can_27t_20rea.rel | 16 + .../messages_lib/01c2_b04b__3a_20_25d_0a.rel | 10 + .../messages_lib/01c3_6aba__3a_20_25ld_0a.rel | 10 + .../lib/messages_lib/01c4_8cd1__3a_20_25s.rel | 10 + .../messages_lib/01c5_68d2__3a_20_25s_0a.rel | 10 + .../messages_lib/01c6_3c02__3a_20_25u_0a.rel | 10 + .../01c7_6692__3b_20Tries_3a_20_2.rel | 12 + .../01c8_697b__3c_25ld_40_25s_3e_.rel | 12 + .../01c9_2587__3c_25s_40_25s_2ebb.rel | 12 + .../messages_lib/01ca_3152__3c_3d_3d_25s.rel | 10 + .../01cb_defc__3c_3d_3d_25s_0a.rel | 10 + .../01cc_016b__3d_3d_3eARTICLE_20.rel | 12 + .../01cd_c133__3d_3d_3eNEWNEWS_20.rel | 12 + .../01ce_696c__3d_3d_3eQUIT_0a.rel | 10 + .../01cf_396e__3d_3dNo_20response.rel | 12 + src/nos/lib/messages_lib/01d0_c6f3__3f.rel | 10 + src/nos/lib/messages_lib/01d1_4d83__40.rel | 10 + .../lib/messages_lib/01d2_23d2__40_25s.rel | 10 + .../01d3_7f61_ARP_3a_20len_20_25d.rel | 12 + .../messages_lib/01d4_124c_ARTICLE_20_25s.rel | 12 + .../01d5_109d_AX25_20receive_20wi.rel | 14 + .../messages_lib/01d6_f4e0_AX25_20version.rel | 12 + .../lib/messages_lib/01d7_818f_AX25_3a_20.rel | 10 + .../messages_lib/01d8_f05c_Abort_0d_0a.rel | 10 + .../lib/messages_lib/01d9_6caf_Aborted_2e.rel | 10 + .../messages_lib/01da_f2cb_Aborted_2e_0a.rel | 12 + .../lib/messages_lib/01db_537a_Accept_0a.rel | 10 + .../01dc_b988_Ack_20delay_20time_.rel | 12 + .../01dd_fccc_Active_20RIP_20outp.rel | 14 + .../01de_e216_Address_2fControl_2.rel | 16 + .../01df_1fbc_All_20groups_20are_.rel | 16 + .../messages_lib/01e0_4a0c_Allow_20ACCM.rel | 12 + .../01e1_8e02_Allow_20Address.rel | 12 + .../01e2_7b21_Allow_20Address_2fC.rel | 16 + .../01e3_5003_Allow_20Authenticat.rel | 14 + .../01e4_081e_Allow_20Compression.rel | 12 + .../messages_lib/01e5_14d8_Allow_20MRU.rel | 12 + .../01e6_5c94_Allow_20Magic_20Num.rel | 12 + .../01e7_33ea_Allow_20Protocol_20.rel | 16 + .../01e8_a5f9_Already_20have_20_2.rel | 12 + .../01e9_8eaf_Arcnet_3a_20len_20_.rel | 14 + .../01ea_52c7_Argument_20missing_.rel | 12 + .../lib/messages_lib/01eb_3ed8_Ascii_0a.rel | 10 + .../01ec_7cb2_Attach_20device_20f.rel | 14 + .../01ed_ec38_Attach_20netrom_20i.rel | 14 + .../01ee_ee22_Attended_20flag.rel | 12 + .../01ef_0443_Available_20areas_2.rel | 18 + .../01f0_6999_Backoff_20Level_20_.rel | 18 + .../01f1_9716_Bad_20digipeater_20.rel | 12 + .../01f2_0b9f_Bad_20syntax_2e_0a.rel | 12 + .../01f3_e884_Bad_20target_20_25s.rel | 12 + .../01f4_822a_Bad_20user_20or_20h.rel | 14 + .../01f5_61f7_Base_20Addr_09Rxint.rel | 22 + .../01f6_929a_Base_20Addr_20_20Rx.rel | 24 + .../01f7_de82_Buf_20hits_2fmiss_2.rel | 22 + .../messages_lib/01f8_ae0c_CTRL_2d_25c_0a.rel | 10 + .../messages_lib/01f9_6c46_CWD_20_25s_0a.rel | 10 + .../01fa_0e64_Calls_20originated_.rel | 16 + .../01fb_9777_Calls_20timed_20out.rel | 18 + .../01fc_e911_Can_27t_20NLST_20_2.rel | 12 + .../01fd_daf3_Can_27t_20add_20rou.rel | 12 + .../01fe_6db7_Can_27t_20attach_20.rel | 14 + .../01ff_79e8_Can_27t_20change_20.rel | 14 + .../0200_3bb8_Can_27t_20create_20.rel | 14 + .../0201_0003_Can_27t_20create_20.rel | 14 + .../0202_ef8c_Can_27t_20create_20.rel | 14 + .../0203_28e0_Can_27t_20create_20.rel | 16 + .../0204_d5bc_Can_27t_20create_20.rel | 14 + .../0205_c7fb_Can_27t_20delete_20.rel | 12 + .../0206_d5d6_Can_27t_20detach_20.rel | 16 + .../0207_5d65_Can_27t_20find_20he.rel | 14 + .../0208_3eee_Can_27t_20list_20lo.rel | 14 + .../0209_c1c1_Can_27t_20open_20_2.rel | 14 + .../020a_fedd_Can_27t_20open_20_2.rel | 12 + .../020b_fb2a_Can_27t_20open_20_2.rel | 12 + .../020c_d8a5_Can_27t_20open_20in.rel | 14 + .../020d_0616_Can_27t_20read_20_2.rel | 12 + .../020e_4a10_Can_27t_20read_20_2.rel | 12 + .../020f_8468_Can_27t_20read_20co.rel | 14 + .../0210_4327_Can_27t_20read_20di.rel | 16 + .../0211_5fb2_Can_27t_20read_20lo.rel | 14 + .../0212_36d4_Can_27t_20read_20pa.rel | 14 + .../0213_5e43_Can_27t_20rename_20.rel | 12 + .../0214_4bfe_Can_27t_20rewrite_2.rel | 12 + .../0215_24ca_Can_27t_20set_20lin.rel | 14 + .../0216_5e82_Can_27t_20write_20_.rel | 12 + .../0217_988b_Can_27t_20write_20l.rel | 14 + .../0218_c0f9_Can_27t_20write_20t.rel | 12 + .../0219_5055_Ch_20Iface_20_20_20.rel | 24 + .../021a_eff3_Channel_20_2d_20_25.rel | 12 + .../021b_1b09_Choke_20timeout_20_.rel | 12 + .../021c_f95c_Closed_3a_20_25s_0a.rel | 12 + .../021d_e508_Command_20batching.rel | 12 + .../021e_b471_Connect_20failed_0a.rel | 12 + .../021f_bb2f_Connect_20failed_3a.rel | 12 + .../0220_85e9_Connect_20to_20mail.rel | 16 + .../messages_lib/0221_6930_Connected_0a.rel | 12 + .../0222_5189_Connected_20to_20_2.rel | 12 + .../0223_771a_Connected_20to_20ma.rel | 14 + .../messages_lib/0224_0e16_Connected_2e.rel | 12 + .../0225_3e79_Connection_20closed.rel | 16 + .../0226_faa9_Connection_20failed.rel | 12 + .../0227_3676_Could_20not_20creat.rel | 16 + .../0228_d95b_Couldn_27t_20queue_.rel | 16 + .../0229_68a6_Current_20message_2.rel | 14 + .../022a_23ad_Currently_20enabled.rel | 16 + .../messages_lib/022b_1cf7_DELE_20_25s.rel | 10 + .../022c_5fad_DISASTER_21_20Out_2.rel | 16 + .../022d_7ce2_DRSI_20Board_20Stat.rel | 16 + .../022e_2f52_D_5bU_5d_20filename.rel | 12 + .../lib/messages_lib/022f_698b_Data_0a.rel | 10 + .../0230_cb1c_Data_20outside_20he.rel | 12 + .../0231_01be_Data_20pointer_20_2.rel | 16 + .../0232_3cbb_Data_20pointer_20be.rel | 14 + .../0233_bd70_Defaulting_20to_20b.rel | 14 + .../0234_2d19_Del_5fconst_20_3d_2.rel | 12 + .../0235_6255_Dest_20Addr_20_20_2.rel | 16 + .../0236_3894_Dialing_20not_20sup.rel | 14 + .../messages_lib/0237_26a3_Different_0a.rel | 12 + .../lib/messages_lib/0238_ae33_Digipeat.rel | 10 + .../0239_af35_Directory_20table_2.rel | 14 + .../023a_c1bb_Disconnected_20.rel | 12 + .../023b_2cc5_Disconnecting_2e.rel | 12 + .../023c_b7f4_Dup_20acks_20_20_20.rel | 22 + .../023d_3ed4_Duplex_3a_20_25s_0a.rel | 12 + src/nos/lib/messages_lib/023e_b671_E2BIG.rel | 10 + src/nos/lib/messages_lib/023f_56e8_EACCES.rel | 10 + src/nos/lib/messages_lib/0240_f378_EAGAIN.rel | 10 + .../0241_0483_EAGLE_20Board_20Sta.rel | 14 + src/nos/lib/messages_lib/0242_a2a1_EBADF.rel | 10 + src/nos/lib/messages_lib/0243_74ba_EBUSY.rel | 10 + src/nos/lib/messages_lib/0244_4029_ECHILD.rel | 10 + .../lib/messages_lib/0245_cd2b_EDEADLK.rel | 10 + src/nos/lib/messages_lib/0246_4299_EDOM.rel | 10 + src/nos/lib/messages_lib/0247_bec8_EEXIST.rel | 10 + src/nos/lib/messages_lib/0248_afa9_EFAULT.rel | 10 + src/nos/lib/messages_lib/0249_9ed8_EFBIG.rel | 10 + .../024a_28f7_EGATTACH_3a_20No_20.rel | 18 + src/nos/lib/messages_lib/024b_eb47_EINTR.rel | 10 + src/nos/lib/messages_lib/024c_b479_EINVAL.rel | 10 + .../lib/messages_lib/024d_21d8_EINVFNC.rel | 10 + src/nos/lib/messages_lib/024e_2d75_EIO.rel | 10 + src/nos/lib/messages_lib/024f_fb45_EISDIR.rel | 10 + src/nos/lib/messages_lib/0250_8de7_ELOOP.rel | 10 + src/nos/lib/messages_lib/0251_9e5a_EMFILE.rel | 10 + src/nos/lib/messages_lib/0252_983a_EMLINK.rel | 10 + .../messages_lib/0253_0607_ENAMETOOLONG.rel | 12 + src/nos/lib/messages_lib/0254_8396_ENFILE.rel | 10 + src/nos/lib/messages_lib/0255_7088_ENODEV.rel | 10 + src/nos/lib/messages_lib/0256_edee_ENOENT.rel | 10 + .../lib/messages_lib/0257_a107_ENOEXEC.rel | 10 + src/nos/lib/messages_lib/0258_29fe_ENOLCK.rel | 10 + src/nos/lib/messages_lib/0259_42c4_ENOMEM.rel | 10 + src/nos/lib/messages_lib/025a_d51d_ENOSPC.rel | 10 + .../lib/messages_lib/025b_d3a2_ENOTBLK.rel | 10 + .../lib/messages_lib/025c_f683_ENOTDIR.rel | 10 + .../lib/messages_lib/025d_83de_ENOTEMPTY.rel | 12 + src/nos/lib/messages_lib/025e_81a3_ENOTTY.rel | 10 + src/nos/lib/messages_lib/025f_01a7_ENXIO.rel | 10 + src/nos/lib/messages_lib/0260_4485_EPERM.rel | 10 + src/nos/lib/messages_lib/0261_5ede_EPIPE.rel | 10 + src/nos/lib/messages_lib/0262_7f6a_ERANGE.rel | 10 + src/nos/lib/messages_lib/0263_0587_EROFS.rel | 10 + .../0264_6b3a_ESCC_20channel_20_2.rel | 16 + .../0265_6d38_ESCC_20channel_20_2.rel | 14 + .../0266_0a8a_ESCC_20driver_20alr.rel | 18 + .../0267_d89e_ESCC_20driver_20not.rel | 14 + src/nos/lib/messages_lib/0268_dd82_ESHELL.rel | 10 + src/nos/lib/messages_lib/0269_ffa8_ESPIPE.rel | 10 + src/nos/lib/messages_lib/026a_b33c_ESRCH.rel | 10 + .../lib/messages_lib/026b_194a_ETXTBSY.rel | 10 + src/nos/lib/messages_lib/026c_8d4a_EXDEV.rel | 10 + .../026d_4f54_Encapsulation_20mod.rel | 16 + .../026e_0f4a_Enqued_20_20_2d_20_.rel | 18 + .../026f_de30_Enter_20message_2e_.rel | 12 + .../0270_3a50_Error_20in_20respon.rel | 12 + .../0271_d568_Error_20updating_20.rel | 14 + .../0272_69fc_Error_20writing_20m.rel | 14 + .../0273_9664_Escape_20character_.rel | 14 + .../0274_8c2d_Ether_3a_20len_20_2.rel | 14 + src/nos/lib/messages_lib/0275_3af3_F_3e.rel | 10 + .../lib/messages_lib/0276_0046_Failed_0a.rel | 10 + .../0277_4a7b_First_20init_20ESCC.rel | 14 + .../0278_0954_Forwarding_20timer_.rel | 14 + .../0279_95bb_Free_20address_20qu.rel | 12 + .../027a_fee7_Free_20cache_3a_20s.rel | 16 + .../027b_8dc1_Free_20memory_20thr.rel | 14 + .../027c_1be2_From_20_25s_20_25s.rel | 12 + .../027d_d837_From_3a_20_25s_0a.rel | 12 + .../027e_b9a0_Garbage_20bp_20_25l.rel | 12 + .../027f_7731_Group_20list_20too_.rel | 18 + .../0280_ccdf_HAPN_20_25d_3a_20_2.rel | 18 + .../0281_9570_HOPCHECK_20start_20.rel | 14 + .../0282_8ef4_HOPCHECK_20to_20_25.rel | 12 + .../0283_c794_HOPCHECK_20tracing.rel | 12 + .../0284_4952_HS_3a_20Warning_3a_.rel | 16 + .../0285_10ba_Hardware_20_25u_0a.rel | 12 + .../0286_32e9_Heap_20debugging.rel | 12 + .../0287_9144_Host_20_25s_20_28_2.rel | 14 + .../0288_862c_Host_20_25s_20unkno.rel | 12 + .../0289_f216_Hostname_20set_20to.rel | 12 + .../028a_28fb_Hytech_20KA9Q_20NOS.rel | 36 + .../028b_df4f_ICMP_20echo_20respo.rel | 14 + .../028c_db6d_ICMP_20from_20_25s_.rel | 12 + .../messages_lib/028d_abbc_ICMP_20tracing.rel | 12 + .../028e_6b85_ICMP_3a_20type_20_2.rel | 12 + src/nos/lib/messages_lib/028f_dff6_IP_0a.rel | 10 + .../0290_5812_IP_20Time_2dto_2dli.rel | 12 + .../0291_0e41_IP_20addr_20_20_20_.rel | 18 + .../0292_8cdb_IP_20reasm_20timeou.rel | 14 + .../0293_5f88_IP_20rx_20tracing.rel | 12 + .../0294_88e0_IP_3a_20CHECKSUM_20.rel | 14 + .../0295_03a7_IP_3a_20bad_20heade.rel | 12 + .../0296_4543_IP_3a_20len_20_25u.rel | 12 + .../lib/messages_lib/0297_e067_IPCP_0a.rel | 10 + .../messages_lib/0298_7c5c_IPCP_20_25s_0a.rel | 10 + .../0299_a490_IRQ_20_25u_20out_20.rel | 14 + .../029a_925d_Idle_20poll_20timer.rel | 14 + .../lib/messages_lib/029b_4ab5_Image_0a.rel | 10 + .../029c_7e58_Initial_20RTT_20_28.rel | 12 + .../029d_bd38_Inqlen_3a_20_25d_20.rel | 12 + .../029e_c7f6_Insufficient_20args.rel | 12 + .../029f_fcf9_Interface_20_20_20R.rel | 18 + .../02a0_b903_Interface_20_22_25s.rel | 16 + .../02a1_4daf_Interface_20_22_25s.rel | 14 + .../02a2_42ac_Interface_20_22_25s.rel | 14 + .../02a3_5a50_Interface_20_25s_20.rel | 14 + .../02a4_1298_Interface_20_25s_20.rel | 14 + .../02a5_24cb_Interface_20_25s_20.rel | 14 + .../02a6_c749_Interface_20_25s_20.rel | 14 + .../02a7_63a0_Interface_20_25s_20.rel | 14 + .../02a8_8880_Interface_20_25s_20.rel | 14 + .../02a9_6e91_Interface_20_25s_20.rel | 14 + .../02aa_103c_Interface_20address.rel | 16 + .../02ab_c429_Interface_3a_20.rel | 12 + .../02ac_d726_Invalid_20magic_20c.rel | 14 + .../02ad_42d9_Invalid_20range_2e_.rel | 12 + .../02ae_89c0_Invalid_20type_20_2.rel | 12 + .../02af_62ed_Invalid_20user_20na.rel | 14 + .../02b0_be0b_Job_20id_20_25s_20n.rel | 14 + .../messages_lib/02b1_87a9_K_20numbers.rel | 12 + .../lib/messages_lib/02b2_414e_KISS_3a_20.rel | 10 + .../02b3_1668_Known_20users_20on_.rel | 14 + src/nos/lib/messages_lib/02b4_171d_LCP_0a.rel | 10 + .../messages_lib/02b5_befe_LCP_20_25s_0a.rel | 10 + .../02b6_1d45_Last_20message_0a.rel | 12 + src/nos/lib/messages_lib/02b7_a317_Loc_20.rel | 10 + .../02b8_5ce5_Local_3a_20_25s.rel | 12 + .../02b9_0926_Local_3a_20_25s_20_.rel | 18 + .../02ba_6210_Lock_20directory_20.rel | 14 + .../02bb_f59a_Logging_20off_0a.rel | 12 + .../02bc_1bd9_Logging_20to_20_25s.rel | 12 + .../02bd_4a5a_Logical_20bytesize_.rel | 14 + .../02be_4f93_Login_20incorrect_0.rel | 12 + .../02bf_8ac2_MBOX_20Zap_3a_20_25.rel | 12 + .../02c0_1dc7_MBOX_20bbs_20mail_2.rel | 16 + .../02c1_37c2_MBOX_20bbs_20mail_2.rel | 14 + .../02c2_f88f_MBOX_20forward_20fa.rel | 16 + .../02c3_9bd4_MBOX_20forwarding_2.rel | 14 + .../02c4_d1e8_MBOX_20login_3a_20_.rel | 12 + .../02c5_dd2e_MBOX_20login_3a_20_.rel | 14 + .../02c6_e920_MBOX_20sysop_3a_20_.rel | 12 + .../02c7_a30c_MBOX_20upload_3a_20.rel | 12 + .../lib/messages_lib/02c8_c247_MKD_20_25s.rel | 10 + .../02c9_53a6_MRU_20_25s_20_28_25.rel | 16 + .../messages_lib/02ca_f9a6_Magic_20Number.rel | 12 + .../02cb_d070_Mail_20area_3a_20_2.rel | 16 + .../02cc_0103_Mail_20box_20full_3.rel | 14 + .../02cd_523a_Main_20commands_3a_.rel | 12 + .../02ce_dcca_Max_20attempts_20to.rel | 14 + .../messages_lib/02cf_0279_Max_20clients.rel | 12 + .../02d0_3cd5_Max_20frame_20lengt.rel | 14 + .../02d1_d96d_Maximum_20messages_.rel | 14 + .../02d2_488d_Mbuf_20sizes_3a_0a.rel | 12 + .../02d3_ee8f_Message_20_23_25d_2.rel | 12 + .../02d4_b5f9_Mode_20_25s_20unkno.rel | 14 + .../02d5_aa15_Mode_20_25s_20unkno.rel | 16 + .../02d6_ac3e_Msg_20_25d_20Killed.rel | 12 + .../02d7_9a86_Must_20be_20_200_20.rel | 14 + .../02d8_362b_Must_20be_20_200_20.rel | 14 + .../02d9_2da0_Must_20be_20_3e_3d_.rel | 12 + .../02da_06a9_Must_20set_20_27r_2.rel | 16 + .../02db_d814_N_3e_3d_255u_3a_257.rel | 18 + .../02dc_7868_NET_2fROM_20Routing.rel | 14 + .../02dd_ae07_NET_2fROM_20not_20a.rel | 14 + .../02de_d0e9_NET_2fROM_3a_20_25s.rel | 12 + .../02df_73b0_NEWNEWS_20_25s_20_2.rel | 12 + .../02e0_c191_NNTP_20_25s_20Canno.rel | 16 + .../02e1_7ed2_NNTP_20_25s_20Canno.rel | 14 + .../02e2_bcd0_NNTP_20_25s_20Conne.rel | 14 + .../02e3_796b_NNTP_20_25s_20Conne.rel | 14 + .../02e4_4193_NNTP_20_25s_20Conne.rel | 16 + .../02e5_0909_NNTP_20_25s_20Conne.rel | 16 + .../02e6_3814_NNTP_20_25s_20Conne.rel | 18 + .../02e7_b5ec_NNTP_20_25s_20Could.rel | 18 + .../02e8_8531_NNTP_20_25s_20Could.rel | 14 + .../02e9_8fd5_NNTP_20_25s_20Could.rel | 14 + .../02ea_0d83_NNTP_20_25s_20Givin.rel | 16 + .../02eb_19c4_NNTP_20_25s_20Givin.rel | 16 + .../02ec_213a_NNTP_20_25s_20bad_2.rel | 18 + .../02ed_31a2_NNTP_20_25s_20bad_2.rel | 18 + .../02ee_df3f_NNTP_20_25s_20givin.rel | 18 + .../02ef_791c_NNTP_20_25s_20givin.rel | 16 + .../02f0_75ce_NNTP_20_25s_20givin.rel | 16 + .../02f1_7eb6_NNTP_20_25s_20proto.rel | 16 + .../02f2_7f99_NNTP_20_25s_20proto.rel | 16 + .../02f3_a517_NNTP_20Cannot_20ope.rel | 16 + .../02f4_fc8f_NNTP_20can_27t_20re.rel | 14 + .../02f5_2c2a_NNTP_20daemon_20ent.rel | 16 + .../02f6_f2a9_NNTP_20daemon_20exi.rel | 14 + .../02f7_cbc7_NNTP_20daemon_20qui.rel | 16 + .../02f8_0fa8_NNTP_20group_20_27_.rel | 14 + .../02f9_0e76_NNTP_20receive_20er.rel | 16 + .../02fa_a47f_NNTP_20received_20_.rel | 14 + .../messages_lib/02fb_0916_NNTP_20tracing.rel | 12 + .../02fc_b065_NNTP_20window_20to_.rel | 14 + .../messages_lib/02fd_852e_NO_20_2d_20.rel | 10 + .../02fe_e182_NO_20_2d_20bad_20ad.rel | 12 + .../02ff_7ccb_NO_20_2d_20syntax_2.rel | 12 + .../0300_2df6_NOS_20log_20closed.rel | 12 + .../0301_e1c8_NOS_20was_20started.rel | 14 + .../0302_cfbe_NOS_20was_20stopped.rel | 14 + .../0303_998c_NULL_20BUFFER_0a.rel | 12 + .../lib/messages_lib/0304_89a8_Net_3e_20.rel | 10 + .../0305_e0c6_Network_20_25s_20co.rel | 14 + .../0306_4009_New_20mail_20arrive.rel | 14 + .../0307_fbfc_New_20mail_20arrive.rel | 18 + .../0308_d0a7_New_20news_20arrive.rel | 16 + .../0309_e9a0_No_20HAPN_20adaptor.rel | 14 + .../030a_87bb_No_20current_20sess.rel | 12 + .../030b_7f27_No_20dialer_20activ.rel | 14 + .../030c_cd1f_No_20finger_20infor.rel | 16 + .../030d_2a2e_No_20help_20availab.rel | 16 + .../030e_7cc9_No_20packet_20drive.rel | 16 + .../030f_4e0c_No_20such_20message.rel | 14 + .../0310_2a80_No_20such_20server_.rel | 14 + .../0311_0cda_Nodetimer_20_25lu_2.rel | 14 + src/nos/lib/messages_lib/0312_3fb0_None.rel | 10 + .../lib/messages_lib/0313_1aee_None_0a.rel | 10 + .../0314_f8e2_Not_20a_20valid_20s.rel | 12 + .../0315_b4ba_Not_20an_20FTP_20se.rel | 14 + .../messages_lib/0316_ee7e_Not_20found_0a.rel | 12 + .../0317_533e_Not_20in_20table_0a.rel | 12 + .../0318_c7b9_Not_20supported_0a.rel | 12 + .../0319_9692_Obsotimer_20_25lu_2.rel | 14 + .../031a_ff96_Oh_2c_20hello_20_25.rel | 12 + .../031b_0948_Only_20_25d_20DRSI_.rel | 18 + .../031c_8edb_Only_20_25d_20net_2.rel | 16 + .../031d_f9f0_Only_201_20EAGLE_20.rel | 18 + .../031e_1514_Outqlen_3a_20_25d_2.rel | 14 + .../031f_5b48_PANIC_3a_20Timer_20.rel | 14 + .../0320_281b_PANIC_3a_20buffer_2.rel | 18 + src/nos/lib/messages_lib/0321_f630_PAP_0a.rel | 10 + .../messages_lib/0322_b2fb_PAP_20_25s_0a.rel | 10 + .../messages_lib/0323_8063_PASS_20_25s.rel | 10 + .../0324_2320_PI_20Board_20Statis.rel | 14 + .../0325_73f1_PI_3a_20DMA_20_25d_.rel | 14 + .../0326_5841_PI_3a_20DMA_20chann.rel | 16 + .../0327_3992_PI_3a_20IRQ_20_25u_.rel | 14 + .../0328_4ca4_PI_3a_20Interface_2.rel | 16 + .../0329_d856_PI_3a_20Maximum_20o.rel | 16 + .../032a_9098_PI_3a_20Mode_20_25s.rel | 16 + .../032b_de39_PI_3a_20No_20IP_20a.rel | 12 + .../032c_02ea_PI_3a_20No_20memory.rel | 18 + .../032d_c0d0_PI_3a_20No_20memory.rel | 18 + .../032e_94ca_PI_3a_20No_20memory.rel | 18 + .../032f_c698_PI_3a_20No_20memory.rel | 18 + .../0330_d61f_PI_3a_20Set_20mycal.rel | 14 + .../0331_68d4_PID_20_20_20CS_3aIP.rel | 22 + .../0332_3c62_POP_20access_20DENI.rel | 14 + .../0333_f3cf_POP_20access_20gran.rel | 14 + .../0334_639f_POP_20client_20retr.rel | 16 + .../messages_lib/0335_e9bb_POP_20quiet.rel | 12 + .../0336_1231_POP_20users_20file_.rel | 14 + .../0337_e126_PORT_20_25u_2c_25u_.rel | 14 + .../messages_lib/0338_b459_PPP_20tracing.rel | 12 + .../0339_b660_PPP_3a_20len_20_253.rel | 12 + .../033a_8c73_Packet_20driver_20h.rel | 16 + src/nos/lib/messages_lib/033b_d638_Pap_0a.rel | 10 + .../033c_8165_Parameter_20_25s_20.rel | 14 + .../messages_lib/033d_85d2_Password_3a_20.rel | 12 + .../033e_cb37_Password_3a_20_25c_.rel | 12 + .../lib/messages_lib/033f_6310_Path_3a_20.rel | 10 + .../0340_f75b_Persistence_3a_20_2.rel | 14 + .../0341_7bc8_Pinging_20_25s_0a.rel | 12 + .../0342_94a5_Pinging_20resumed_0.rel | 12 + .../0343_7fa9_Pinging_20suspended.rel | 14 + .../0344_220f_Please_20hang_20up_.rel | 14 + .../0345_4304_Poll_20threshold_20.rel | 14 + .../0346_f8a0_Pool_20count_20_25s.rel | 16 + .../0347_dd4d_Protocol_20Field_20.rel | 14 + .../lib/messages_lib/0348_744a_QUIT_0a.rel | 10 + .../0349_43c0_Quality_20cannot_20.rel | 16 + .../034a_b523_Queue_20limit_20_28.rel | 12 + .../messages_lib/034b_4a0a_R_20numbers.rel | 12 + .../034c_db0e_R_3a_25s_20_40_25s_.rel | 12 + .../lib/messages_lib/034d_373f_REQUEST.rel | 10 + .../lib/messages_lib/034e_19a4_RESPONSE.rel | 10 + .../messages_lib/034f_8b13_RETR_20_25s.rel | 10 + .../lib/messages_lib/0350_86e9_RETURN_0a.rel | 10 + .../0351_bbdb_RFrames_20_2d_20_25.rel | 18 + .../messages_lib/0352_f9d6_RIP_20merging.rel | 12 + .../0353_3211_RIP_20refused_20fro.rel | 14 + .../messages_lib/0354_8827_RIP_20tracing.rel | 12 + .../lib/messages_lib/0355_5585_RIP_3a_20.rel | 10 + .../0356_fd1d_RIP_3a_20sent_20_25.rel | 20 + .../0357_6b7c_RIPCMD_3a_20Unknown.rel | 14 + .../0358_5f5f_RIPCMD_5fREQUEST_0a.rel | 12 + .../0359_07f6_RIPCMD_5fRESPONSE_2.rel | 14 + .../035a_eb71_RIP_5frx_3a_20Not_2.rel | 16 + .../lib/messages_lib/035b_86e6_RMD_20_25s.rel | 10 + .../035c_8005_Range_20for_20inter.rel | 16 + .../035d_1ee5_Reassembly_20fragme.rel | 14 + .../035e_fbe9_Reassembly_20queue_.rel | 12 + .../messages_lib/035f_5eb3_Received_3a_20.rel | 12 + .../0360_9fbc_Recording_20into_20.rel | 12 + .../0361_aa80_Recording_20off_0a.rel | 12 + .../0362_2a15_Recv_3a_20_20_20_20.rel | 20 + .../lib/messages_lib/0363_d0ff_Refuse_0a.rel | 10 + .../0364_42c0_Refusing_20announce.rel | 16 + .../0365_6bd1_Requesting_2e_2e_2e.rel | 12 + .../0366_4784_Resolver_20_25s_20u.rel | 14 + .../0367_ae52_Resolving_20_25s_2e.rel | 12 + .../0368_200a_Resolving_20_25s_2e.rel | 12 + .../messages_lib/0369_cacc_Retry_20limit.rel | 12 + .../messages_lib/036a_0cd3_Returned_20.rel | 12 + .../036b_85af_Route_20add_20faile.rel | 12 + .../036c_9b70_Routing_20lookups_3.rel | 18 + .../036d_9c01_Rxints_20_20_2d_20_.rel | 18 + .../036e_ccf6_S_20_20_20_20_20Job.rel | 20 + .../036f_df6d_S_20command_20synta.rel | 16 + .../0370_4fbb_S_23_20_20_20Type_2.rel | 18 + .../0371_bf54_SMTP_20_25s_20Conne.rel | 14 + .../0372_cbb7_SMTP_20batching.rel | 12 + .../0373_e45f_SMTP_20client_20Try.rel | 14 + .../0374_797a_SMTP_20sent_20job_2.rel | 16 + .../messages_lib/0375_68b2_SMTP_20tracing.rel | 12 + .../0376_e7a4_SP_20_3d_20_25p_2c_.rel | 16 + .../messages_lib/0377_a1f1_STOR_20_25s.rel | 10 + .../messages_lib/0378_49fd_STOR_20_25s_0a.rel | 10 + .../0379_38ea_STOR_20_25s_3a_20_2.rel | 16 + .../037a_12cc_STOR_20_25s_3a_20Er.rel | 18 + .../037b_cfe9_SUBCMD_20_2d_20Don_.rel | 16 + .../lib/messages_lib/037c_0319_SYST_0a.rel | 10 + .../lib/messages_lib/037d_93fc_Same_0a.rel | 10 + .../037e_3c55_Scroll_20file_20siz.rel | 12 + .../037f_e255_Send_20file_2c_20_2.rel | 12 + .../0380_c1d8_Send_3a_20_2508lx_2.rel | 18 + .../0381_afab_Server_20address_20.rel | 22 + .../0382_36ef_Session_20_25s_20no.rel | 14 + .../0383_0845_Slot_20time_3a_20_2.rel | 12 + .../0384_6556_Socket_20not_20in_2.rel | 12 + .../0385_a061_Sorry_20_2d_20the_2.rel | 16 + .../0386_8034_Stack_20violation_2.rel | 14 + .../0387_6414_Station_20_20_20Las.rel | 16 + .../0388_5bef_Station_20_20_20Las.rel | 20 + .../0389_9aef_Subject_3a_20_25s_0.rel | 12 + .../038a_0cac_System_20is_20overl.rel | 16 + .../messages_lib/038b_63e9_T_20hostname.rel | 12 + .../lib/messages_lib/038c_1279_T1_3a_20.rel | 10 + .../lib/messages_lib/038d_a7c1_T3_3a_20.rel | 10 + .../lib/messages_lib/038e_e4a1_TACK_3a_20.rel | 10 + .../038f_7f7b_TCB_20_25p_20_25s_2.rel | 12 + .../lib/messages_lib/0390_5447_TCD_3a_20.rel | 10 + .../lib/messages_lib/0391_fa23_TCP_20MSS.rel | 10 + .../0392_70e7_TCP_20default_20irt.rel | 12 + .../0393_5ac7_TCP_20header_20comp.rel | 20 + .../0394_c668_TCP_20state_20traci.rel | 12 + .../0395_b0d7_TCP_20syn_2bdata_20.rel | 14 + .../0396_43bd_TCP_20timestamps.rel | 12 + .../messages_lib/0397_5b74_TCP_20window.rel | 12 + .../0398_7267_TCP_3a_20_25u_2d_3e.rel | 14 + .../messages_lib/0399_59c4_TChoke_3a_20.rel | 10 + .../039a_2ced_TX_20Delay_3a_20_25.rel | 12 + .../039b_6a23_TX_20Tail_20time_3a.rel | 14 + .../039c_d175_TX_20queue_20limit.rel | 12 + .../messages_lib/039d_f579_TYPE_20A_0a.rel | 10 + .../messages_lib/039e_3bb9_TYPE_20I_0a.rel | 10 + .../039f_a616_TYPE_20L_20_25d_0a.rel | 12 + .../03a0_f6fb_Target_20_20_20_20T.rel | 14 + .../03a1_950b_Telnet_20option_20t.rel | 14 + .../03a2_4517_Thank_20you_20_25s_.rel | 18 + .../03a3_70f0_The_20escape_20char.rel | 14 + .../03a4_6de0_Time_20for_201000_2.rel | 16 + .../03a5_601a_Time_20to_20live.rel | 12 + .../03a6_e505_Timeout_20value_20_.rel | 16 + .../03a7_1db3_Timer_20_20_20_20_2.rel | 22 + .../03a8_d78a_Tip_20connection_20.rel | 14 + .../03a9_c093_Tip_20session_20alr.rel | 16 + .../03aa_8c54_To_3a_20_25s_0a.rel | 10 + .../03ab_2a55_Too_20many_20HAPN_2.rel | 14 + .../03ac_76b7_Too_20many_20asynch.rel | 14 + .../03ad_58f2_Too_20many_20digipe.rel | 14 + .../03ae_2d53_Too_20many_20hs_20c.rel | 14 + .../03af_286c_Too_20many_20mailbo.rel | 14 + .../03b0_4c9a_Too_20many_20nrs_20.rel | 14 + .../03b1_7103_Too_20many_20packet.rel | 14 + .../03b2_d8c3_Too_20many_20pc100_.rel | 14 + .../03b3_2057_Too_20many_20sessio.rel | 12 + .../03b4_447c_Too_20many_20slip_2.rel | 14 + .../03b5_0d8c_Try_20to_20bounce_2.rel | 14 + .../03b6_2030_Trying_20_25s_2e_2e.rel | 12 + .../03b7_cee2_Trying_20_25s_2e_2e.rel | 12 + .../03b8_be29_Trying_20Connection.rel | 14 + .../03b9_9c56_Tstate_20_3d_20_25s.rel | 12 + .../03ba_6afe_Turn_20off_20local_.rel | 14 + .../03bb_c801_Tx_20state_20_20_25.rel | 14 + .../03bc_be1b_Tx_20state_20_20_25.rel | 14 + .../03bd_e1f6_TxBuffers_3a_20_20S.rel | 16 + .../03be_5cfe_Txdefer_20_2d_20_25.rel | 18 + .../messages_lib/03bf_e733_U_20filename.rel | 12 + src/nos/lib/messages_lib/03c0_9059_UDP_3a.rel | 10 + .../messages_lib/03c1_a945_USER_20_25s.rel | 10 + .../03c2_41aa_Unknown_20command.rel | 12 + .../03c3_e21a_Unknown_20command_2.rel | 12 + .../03c4_b975_Unknown_20command_3.rel | 16 + .../03c5_d2a4_Unknown_20encapsula.rel | 14 + .../03c6_8cf4_Unknown_20parameter.rel | 14 + .../03c7_eb24_Update_20with_20MD5.rel | 12 + .../03c8_7d7d_Uploading_20_25s_0a.rel | 12 + .../03c9_bd81_Uploading_20off_0a.rel | 12 + .../03ca_6d70_Uptime_20_25s_20Sta.rel | 16 + .../messages_lib/03cb_0a8d_Usage_3a_20.rel | 10 + .../03cc_125c_Usage_3a_20_25s_20_.rel | 14 + .../03cd_6ae1_Usage_3a_20F_20user.rel | 18 + .../03ce_7dd1_Usage_3a_20ax25_20r.rel | 18 + .../03cf_f8b8_Usage_3a_20dial_20_.rel | 22 + .../03d0_a375_Usage_3a_20mbox_20m.rel | 16 + .../03d1_8cfb_Usage_3a_20pop_20us.rel | 18 + .../03d2_a2c0_Usage_3a_20smtp_20m.rel | 16 + .../03d3_9654_Use_20the_20ax25_20.rel | 18 + .../03d4_4893_User_20_20_20_20_20.rel | 14 + .../03d5_633f_User_20_25s_20not_2.rel | 12 + .../messages_lib/03d6_75ef_V_20numbers.rel | 12 + .../03d7_4b9d_VJ_20Compressed_20T.rel | 14 + .../03d8_2be9_VJ_20Uncompressed_2.rel | 14 + .../03d9_3d32_Valid_20options_3a.rel | 12 + .../03da_8007_Value_20_25s_20_28_.rel | 14 + .../lib/messages_lib/03db_c8df_Verbose.rel | 10 + .../messages_lib/03dc_32ff_Verbose_20flag.rel | 12 + .../03dd_b110_WARNING_3a_20Locati.rel | 16 + .../03de_eddf_Warning_21_20Interf.rel | 18 + .../03df_4457_Warning_3a_20type_2.rel | 18 + .../03e0_85a8_Window_20_28frames_.rel | 12 + .../03e1_9331_Window_20size_20_28.rel | 14 + .../03e2_613d_Window_3a_20_25_2d5.rel | 18 + .../03e3_25a6_Wink_20DTR_3f_20.rel | 12 + .../03e4_75b2_Writing_20article_2.rel | 14 + .../messages_lib/03e5_3999_XMD5_20_25s.rel | 10 + .../messages_lib/03e6_a62b_XMD5_20_25s_0a.rel | 10 + .../messages_lib/03e7_8515_XMKD_20_25s_0a.rel | 10 + .../messages_lib/03e8_31d2_XRMD_20_25s_0a.rel | 10 + .../messages_lib/03e9_71c6_You_20have_20.rel | 12 + .../03ea_1e66_You_20have_20new_20.rel | 12 + .../03eb_4583_You_27re_20using_20.rel | 14 + .../messages_lib/03ec_4aef_Z_20filename.rel | 12 + .../03ed_5fd7_Zap_20failed_3a_20_.rel | 12 + src/nos/lib/messages_lib/03ee_e3d1__5b.rel | 10 + .../03ef_9d9c__5bNET_2dHMR_24_5d.rel | 12 + .../messages_lib/03f0_f8e4__5bunknown_5d.rel | 12 + .../lib/messages_lib/03f1_699f__5eC_0a.rel | 10 + .../lib/messages_lib/03f2_e5d6__5eR_0a.rel | 10 + .../lib/messages_lib/03f3_1951__5fexit.rel | 10 + .../03f4_a314__5ffcreat_3a_20WARN.rel | 16 + .../03f5_79de__5funlink_3a_20bad_.rel | 14 + src/nos/lib/messages_lib/03f6_722b_accept.rel | 10 + .../lib/messages_lib/03f7_30f9_accept_0a.rel | 10 + src/nos/lib/messages_lib/03f8_2cfc_access.rel | 10 + src/nos/lib/messages_lib/03f9_9b89_accm.rel | 10 + src/nos/lib/messages_lib/03fa_16c9_acct.rel | 10 + src/nos/lib/messages_lib/03fb_0c4f_acfc.rel | 10 + .../lib/messages_lib/03fc_7530_acktime.rel | 10 + src/nos/lib/messages_lib/03fd_41b5_add.rel | 10 + .../03fe_d8a3_add_20_3chostid_3e.rel | 12 + .../lib/messages_lib/03ff_6783_addprivate.rel | 12 + .../lib/messages_lib/0400_9712_address.rel | 10 + .../lib/messages_lib/0401_2c42_addserver.rel | 12 + src/nos/lib/messages_lib/0402_b0a9_alarm.rel | 10 + .../0403_9965_allocs_20_25lu_20fr.rel | 22 + .../0404_8e82_allow_20pap_20none_.rel | 12 + .../0405_ba08_allow_20tcp_20none_.rel | 12 + .../0406_94f6_anext_20pointer_20o.rel | 14 + .../0407_c2a0_answer_20script_3a_.rel | 12 + src/nos/lib/messages_lib/0408_da7c_area.rel | 10 + .../0409_1dde_arp_20add_20_3chost.rel | 20 + .../040a_96ce_arp_20drop_20_3chos.rel | 18 + .../040b_0018_arp_20publish_20_3c.rel | 22 + src/nos/lib/messages_lib/040c_5838_asci.rel | 10 + src/nos/lib/messages_lib/040d_4354_ascii.rel | 10 + .../lib/messages_lib/040e_3914_ascistat.rel | 10 + src/nos/lib/messages_lib/040f_6442_attach.rel | 10 + .../0410_39bc_attach_20_3chardwar.rel | 16 + .../0411_fe98_attach_20asci_20_3c.rel | 28 + .../0412_342d_attach_20escc_20_3c.rel | 42 + .../0413_7943_attempt_20to_20writ.rel | 14 + src/nos/lib/messages_lib/0414_7d37_attend.rel | 10 + .../messages_lib/0415_c133_authenticate.rel | 12 + .../0416_fd47_ax25_20kick_20_3cax.rel | 12 + .../0417_0003_ax25_20reset_20_3ca.rel | 12 + .../0418_ca0a_bad_20destination_2.rel | 14 + .../0419_60d3_bad_20internet_20ad.rel | 14 + .../041a_0a79_bad_20neighbor_20ca.rel | 14 + src/nos/lib/messages_lib/041b_4126_batch.rel | 10 + .../lib/messages_lib/041c_bcb6_bcnodes.rel | 10 + .../041d_0c93_begin_20_2503o_20_2.rel | 12 + src/nos/lib/messages_lib/041e_3245_binary.rel | 10 + src/nos/lib/messages_lib/041f_4c4f_blimit.rel | 10 + .../0420_ff8d_bootp_20_5bnet_5fna.rel | 16 + .../0421_0e8f_bootp_3a_20Net_5fer.rel | 16 + .../0422_f5d9_bootp_3a_20timed_20.rel | 16 + .../0423_72d6_bp_20_25lx_20tot_20.rel | 20 + src/nos/lib/messages_lib/0424_9767_brk.rel | 10 + .../lib/messages_lib/0425_f951_broadcast.rel | 12 + src/nos/lib/messages_lib/0426_03ff_bsr.rel | 10 + .../0427_83e6_by_20_25s_20_28_25s.rel | 14 + .../0428_69f3_by_20_25s_20with_20.rel | 14 + src/nos/lib/messages_lib/0429_9ab1_bye.rel | 10 + src/nos/lib/messages_lib/042a_7cbf_cache.rel | 10 + .../042b_a3a9_can_27t_20read_20_2.rel | 12 + .../042c_f4b4_can_27t_20trace_20i.rel | 16 + src/nos/lib/messages_lib/042d_9aa7_cd.rel | 10 + .../042e_42c2_cd_20_3cdirectory_3.rel | 12 + src/nos/lib/messages_lib/042f_35a9_chat.rel | 10 + src/nos/lib/messages_lib/0430_743f_chdir.rel | 10 + src/nos/lib/messages_lib/0431_5ed3_check.rel | 10 + .../0432_40b3_check_20_3chost_3e.rel | 12 + src/nos/lib/messages_lib/0433_c946_chmod.rel | 10 + .../lib/messages_lib/0434_b786_choketime.rel | 12 + src/nos/lib/messages_lib/0435_88f5_chown.rel | 10 + src/nos/lib/messages_lib/0436_87a8_chroot.rel | 10 + src/nos/lib/messages_lib/0437_4822_clean.rel | 10 + src/nos/lib/messages_lib/0438_23aa_close.rel | 10 + .../messages_lib/0439_2b22_close_20FTP.rel | 12 + .../messages_lib/043a_f93d_close_20Finger.rel | 12 + .../messages_lib/043b_0957_close_20POP.rel | 12 + .../043c_b85c_close_20POP_20_2d_2.rel | 14 + .../messages_lib/043d_83a3_close_20SMTP.rel | 12 + .../043e_b949_close_20SMTP_20_2d_.rel | 14 + .../043f_423c_close_20discard.rel | 12 + .../messages_lib/0440_419d_close_20echo.rel | 12 + .../messages_lib/0441_03ad_close_20term.rel | 12 + .../0442_83dc_code_20_25u_20arg_2.rel | 12 + .../lib/messages_lib/0443_ea90_compare.rel | 10 + .../0444_a613_compare_20_3cremote.rel | 16 + .../lib/messages_lib/0445_fbc2_compress.rel | 10 + .../messages_lib/0446_3845_compressed_20.rel | 12 + .../lib/messages_lib/0447_26b1_configure.rel | 12 + .../lib/messages_lib/0448_749f_connect.rel | 10 + .../lib/messages_lib/0449_5769_control.rel | 10 + .../044a_941e_control_20up_20_7c_.rel | 12 + .../044b_2aba_control_3a_20_25s_0.rel | 12 + src/nos/lib/messages_lib/044c_4bf4_cwd.rel | 10 + .../messages_lib/044d_62af_d_5finit_28_29.rel | 10 + .../044e_5a9b_d_5finit_28_29_20ma.rel | 14 + src/nos/lib/messages_lib/044f_62a8_debug.rel | 10 + .../lib/messages_lib/0450_740d_default.rel | 10 + .../messages_lib/0451_db45_defaultfile.rel | 12 + .../0452_818b_delay_20_25lu_0a.rel | 12 + src/nos/lib/messages_lib/0453_2c87_dele.rel | 10 + src/nos/lib/messages_lib/0454_89a5_delete.rel | 10 + .../0455_3919_delete_20_3cfile_3e.rel | 12 + .../lib/messages_lib/0456_6466_destlist.rel | 10 + src/nos/lib/messages_lib/0457_cfc1_detach.rel | 10 + .../0458_26f3_detach_20_3cinterfa.rel | 12 + .../0459_3f12_devio_5fgarbage_3a_.rel | 16 + .../045a_0f61_dfile_5fsearch_3a_2.rel | 16 + .../045b_4eba_dfile_5fupdate_3a_2.rel | 16 + .../045c_5b47_dfile_5fupdate_3a_2.rel | 16 + .../045d_ef06_dfile_5fupdate_3a_2.rel | 16 + src/nos/lib/messages_lib/045e_0173_dialer.rel | 10 + .../045f_8d0b_dialer_20_3ciface_3.rel | 18 + .../lib/messages_lib/0460_18c3_digipeat.rel | 10 + src/nos/lib/messages_lib/0461_bdc7_dir.rel | 10 + .../lib/messages_lib/0462_5c0a_directory.rel | 12 + .../lib/messages_lib/0463_176f_discard.rel | 10 + .../0464_684a_discard_20expired_2.rel | 14 + .../lib/messages_lib/0465_f701_disconnect.rel | 12 + src/nos/lib/messages_lib/0466_e146_dns.rel | 10 + .../0467_8f79_dns_5fquery_3a_20qu.rel | 16 + .../0468_6da5_dns_5fquery_3a_20re.rel | 16 + .../0469_041c_doexit_3a_20won_27t.rel | 12 + src/nos/lib/messages_lib/046a_21ed_domain.rel | 10 + .../046b_e0fd_down_20script_3a_20.rel | 12 + .../lib/messages_lib/046c_050c_download.rel | 10 + src/nos/lib/messages_lib/046d_4853_drop.rel | 10 + .../046e_0532_drop_20_3chostid_3e.rel | 12 + .../lib/messages_lib/046f_e7cf_dropserver.rel | 12 + src/nos/lib/messages_lib/0470_a2e4_dup.rel | 10 + src/nos/lib/messages_lib/0471_b319_dup2.rel | 10 + src/nos/lib/messages_lib/0472_cb91_dynip.rel | 10 + src/nos/lib/messages_lib/0473_2edf_echo.rel | 10 + .../0474_7366_empty_20packet_21_2.rel | 12 + .../messages_lib/0475_48fd_encapsulation.rel | 12 + src/nos/lib/messages_lib/0476_4a34_eol.rel | 10 + src/nos/lib/messages_lib/0477_b4ae_escape.rel | 10 + src/nos/lib/messages_lib/0478_858e_escc.rel | 10 + .../0479_d50a_escc_25d_3a_20No_20.rel | 16 + .../lib/messages_lib/047a_6362_esccstat.rel | 10 + src/nos/lib/messages_lib/047b_59b0_execve.rel | 10 + src/nos/lib/messages_lib/047c_3566_exit.rel | 10 + .../lib/messages_lib/047d_bd2b_expired.rel | 10 + .../lib/messages_lib/047e_bce0_failure.rel | 10 + src/nos/lib/messages_lib/047f_086a_falign.rel | 10 + src/nos/lib/messages_lib/0480_303b_files.rel | 10 + .../0481_d6a7_filter_20mode_20is_.rel | 12 + src/nos/lib/messages_lib/0482_927a_finger.rel | 10 + .../0483_8ea1_finger_20name_40hos.rel | 12 + src/nos/lib/messages_lib/0484_28f4_flush.rel | 10 + .../0485_dc8b_fmount_3a_20can_27t.rel | 14 + src/nos/lib/messages_lib/0486_8074_fork.rel | 10 + .../lib/messages_lib/0487_8227_forward.rel | 10 + .../0488_c066_fp_20_20_20_20_20_2.rel | 18 + .../0489_9a2a_free_3a_20WARNING_2.rel | 20 + .../lib/messages_lib/048a_f896_freelist.rel | 10 + .../messages_lib/048b_bd4f_from_20_25s_20.rel | 10 + .../048c_5b02_from_20_25s_2ebbs_2.rel | 12 + .../048d_2208_fs_5finit_28_29.rel | 12 + src/nos/lib/messages_lib/048e_7fbc_fstat.rel | 10 + src/nos/lib/messages_lib/048f_0e84_ftp.rel | 10 + .../0490_bafd_ftp_20_3caddress_3e.rel | 12 + .../0491_f999_ftp_3e_20syst_0a.rel | 12 + .../0492_51ba_garbage_20collectio.rel | 16 + .../lib/messages_lib/0493_c2ce_gateway.rel | 10 + src/nos/lib/messages_lib/0494_9e35_get.rel | 10 + .../0495_c7c0_get_20_3cremotefile.rel | 14 + .../lib/messages_lib/0496_60c5_getfsys.rel | 10 + .../0497_631b_getinode_3a_20bad_2.rel | 14 + src/nos/lib/messages_lib/0498_7dac_getset.rel | 10 + src/nos/lib/messages_lib/0499_b3cb_groups.rel | 10 + src/nos/lib/messages_lib/049a_156e_hash.rel | 10 + .../049b_5bc8_heap_20size_20_25lu.rel | 18 + src/nos/lib/messages_lib/049c_856f_heard.rel | 10 + src/nos/lib/messages_lib/049d_fc9f_help.rel | 10 + .../lib/messages_lib/049e_1d5e_homedir.rel | 10 + src/nos/lib/messages_lib/049f_6fa6_hop.rel | 10 + src/nos/lib/messages_lib/04a0_df98_host.rel | 10 + .../lib/messages_lib/04a1_476e_hostname.rel | 10 + src/nos/lib/messages_lib/04a2_2f25_icmp.rel | 10 + src/nos/lib/messages_lib/04a3_dd41_ident.rel | 10 + .../lib/messages_lib/04a4_fe83_ifconfig.rel | 10 + .../04a5_6196_ignored_20_28hold_2.rel | 14 + src/nos/lib/messages_lib/04a6_dc84_info.rel | 10 + .../04a7_0500_input_20line_3a_20_.rel | 12 + .../lib/messages_lib/04a8_9677_interface.rel | 12 + src/nos/lib/messages_lib/04a9_3fa5_ioctl.rel | 10 + src/nos/lib/messages_lib/04aa_3172_ip.rel | 10 + .../04ab_d229_ip_5frecv_28_25s_29.rel | 12 + .../messages_lib/04ac_289f_ip_5fsend_0a.rel | 10 + .../lib/messages_lib/04ad_0191_ipaddress.rel | 12 + src/nos/lib/messages_lib/04ae_dfc4_ipcp.rel | 10 + src/nos/lib/messages_lib/04af_f4c1_irtt.rel | 10 + src/nos/lib/messages_lib/04b0_516b_kick.rel | 10 + src/nos/lib/messages_lib/04b1_a61c_kill.rel | 10 + .../04b2_ff9f_kill_20_3cjobnumber.rel | 12 + .../04b3_5e27_ksigs_20_25lu_20que.rel | 20 + .../04b4_1bbe_kwaits_20_25lu_20no.rel | 16 + src/nos/lib/messages_lib/04b5_a567_lcp.rel | 10 + src/nos/lib/messages_lib/04b6_b632_link.rel | 10 + .../messages_lib/04b7_dfe4_linkaddress.rel | 12 + src/nos/lib/messages_lib/04b8_7bad_list.rel | 10 + src/nos/lib/messages_lib/04b9_4346_listen.rel | 10 + .../messages_lib/04ba_a5dd_listservers.rel | 12 + src/nos/lib/messages_lib/04bb_f2d8_local.rel | 10 + src/nos/lib/messages_lib/04bc_68f9_log.rel | 10 + .../lib/messages_lib/04bd_feb4_logfile.rel | 10 + .../messages_lib/04be_52c6_login_3a_20.rel | 10 + .../lib/messages_lib/04bf_a516_logscreen.rel | 12 + src/nos/lib/messages_lib/04c0_8f77_lookup.rel | 10 + src/nos/lib/messages_lib/04c1_7d51_ls.rel | 10 + src/nos/lib/messages_lib/04c2_634b_lseek.rel | 10 + src/nos/lib/messages_lib/04c3_0288_magic.rel | 10 + .../04c4_868b_maibox_20name_20not.rel | 14 + .../lib/messages_lib/04c5_2d7f_mailbox.rel | 10 + .../04c6_2084_mailbox_20name_20no.rel | 18 + .../lib/messages_lib/04c7_86f8_mailhost.rel | 10 + .../04c8_63b8_mailhost_20not_20de.rel | 18 + .../lib/messages_lib/04c9_139d_maxclients.rel | 12 + .../lib/messages_lib/04ca_8d56_maxframe.rel | 10 + .../04cb_d5aa_maximum_20route_20q.rel | 14 + src/nos/lib/messages_lib/04cc_9853_maxmsg.rel | 10 + src/nos/lib/messages_lib/04cd_7203_maxttl.rel | 10 + .../lib/messages_lib/04ce_e017_maxwait.rel | 10 + .../04cf_e57a_mbuf_20allocs_20_25.rel | 20 + .../lib/messages_lib/04d0_8c4f_mcompare.rel | 10 + .../04d1_f47e_mcompare_20_3cfile_.rel | 14 + src/nos/lib/messages_lib/04d2_a71a_md5.rel | 10 + .../04d3_cc78_md5_20_3cfile_3e.rel | 12 + src/nos/lib/messages_lib/04d4_4d2a_memory.rel | 10 + .../04d5_69ba_memory_20cache_20si.rel | 12 + src/nos/lib/messages_lib/04d6_336a_merge.rel | 10 + .../04d7_649e_merge_20_25s_20_25d.rel | 12 + .../04d8_460c_metric_20better_3a_.rel | 14 + .../04d9_3694_metric_20change_3a_.rel | 14 + .../04da_44b0_metric_20not_20bett.rel | 14 + src/nos/lib/messages_lib/04db_b64c_mget.rel | 10 + .../04dc_8d01_mget_20_3cfile_3e_2.rel | 14 + src/nos/lib/messages_lib/04dd_1e96_mkd_20.rel | 10 + src/nos/lib/messages_lib/04de_304a_mkdir.rel | 10 + .../04df_7d04_mkdir_20_3cdirector.rel | 12 + src/nos/lib/messages_lib/04e0_6257_mknod.rel | 10 + src/nos/lib/messages_lib/04e1_685e_mode.rel | 10 + .../04e2_9335_modes_20are_3a_20no.rel | 14 + src/nos/lib/messages_lib/04e3_a91f_more.rel | 10 + .../04e4_5384_more_20_3cfilename_.rel | 12 + src/nos/lib/messages_lib/04e5_ec46_motd.rel | 10 + src/nos/lib/messages_lib/04e6_b5d1_mount.rel | 10 + src/nos/lib/messages_lib/04e7_2a4d_mput.rel | 10 + .../04e8_312f_mput_20_3cfile_3e_2.rel | 14 + src/nos/lib/messages_lib/04e9_245f_mru.rel | 10 + src/nos/lib/messages_lib/04ea_58b1_mss.rel | 10 + src/nos/lib/messages_lib/04eb_708f_mtu.rel | 10 + src/nos/lib/messages_lib/04ec_78ae_mycall.rel | 10 + src/nos/lib/messages_lib/04ed_8a90_name.rel | 10 + .../lib/messages_lib/04ee_b07d_netmask.rel | 10 + .../04ef_4d2c_netrom_20bcnodes_20.rel | 14 + .../04f0_c5dc_netrom_20connect_20.rel | 14 + .../04f1_925a_netrom_20interface_.rel | 18 + .../04f2_a510_netrom_20interface_.rel | 16 + .../04f3_b271_netrom_20kick_20_3c.rel | 12 + .../04f4_5334_netrom_20nodefilter.rel | 18 + .../04f5_6bfe_netrom_20nodefilter.rel | 18 + .../04f6_328e_netrom_20reset_20_3.rel | 14 + .../04f7_18c8_netrom_20route_20ad.rel | 22 + .../04f8_fff3_netrom_20route_20dr.rel | 20 + .../04f9_e8da_netrom_20route_20in.rel | 16 + .../04fa_2254_newproc_20_22_25s_2.rel | 12 + .../04fb_4db6_newsession_3a_20WAR.rel | 18 + .../04fc_5ab5_newsession_3a_20WAR.rel | 16 + .../04fd_7718_next_20pointer_20ou.rel | 14 + src/nos/lib/messages_lib/04fe_7b66_nlst.rel | 10 + .../04ff_0ca7_nntp_20addserver_20.rel | 16 + .../0500_fea0_nntp_20dropserver_2.rel | 14 + .../0501_a821_nntp_20kick_20_3cnn.rel | 14 + .../messages_lib/0502_a7f6_no_20filesys.rel | 12 + .../lib/messages_lib/0503_7405_no_20root.rel | 10 + .../0504_b518_no_20such_20route_0.rel | 12 + .../lib/messages_lib/0505_3fb4_nodefilter.rel | 12 + .../0506_bac4_nodefilter_20subcom.rel | 16 + src/nos/lib/messages_lib/0507_e743_nodes.rel | 10 + .../lib/messages_lib/0508_57cf_nodetimer.rel | 12 + .../lib/messages_lib/0509_7a7f_none_0a.rel | 10 + .../050a_29c2_normal_20_28_25s_20.rel | 12 + .../lib/messages_lib/050b_07d0_null_0a.rel | 10 + .../lib/messages_lib/050c_fb30_obsotimer.rel | 12 + src/nos/lib/messages_lib/050d_3971_open.rel | 10 + .../messages_lib/050e_a412_open_20_25s.rel | 10 + .../lib/messages_lib/050f_e5a0_open_20FTP.rel | 10 + .../messages_lib/0510_10d3_open_20Finger.rel | 12 + .../messages_lib/0511_fe22_open_20MBOX.rel | 12 + .../lib/messages_lib/0512_c7d5_open_20POP.rel | 10 + .../messages_lib/0513_2477_open_20SMTP.rel | 12 + .../messages_lib/0514_4ca5_open_20discard.rel | 12 + .../messages_lib/0515_e649_open_20echo.rel | 12 + .../messages_lib/0516_a479_open_20term.rel | 12 + .../messages_lib/0517_2f09_p_5finit_28_29.rel | 10 + .../0518_76ec_packet_20delayed_20.rel | 14 + .../0519_8504_packet_20duped_0a.rel | 12 + .../051a_a8e1_packet_20lost_0a.rel | 12 + src/nos/lib/messages_lib/051b_ead4_paclen.rel | 10 + src/nos/lib/messages_lib/051c_1a03_page.rel | 10 + .../051d_dd11_page_20_3ccommand_3.rel | 14 + src/nos/lib/messages_lib/051e_b6e1_pap.rel | 10 + src/nos/lib/messages_lib/051f_512a_param.rel | 10 + .../0520_d362_param_20_3cinterfac.rel | 12 + src/nos/lib/messages_lib/0521_9d45_pass.rel | 10 + src/nos/lib/messages_lib/0522_f746_pause.rel | 10 + src/nos/lib/messages_lib/0523_d9f3_pfc.rel | 10 + src/nos/lib/messages_lib/0524_28cb_ping.rel | 10 + .../0525_d85a_ping_20_3chostid_3e.rel | 18 + src/nos/lib/messages_lib/0526_0458_pipe.rel | 10 + src/nos/lib/messages_lib/0527_5919_pool.rel | 10 + src/nos/lib/messages_lib/0528_e039_port.rel | 10 + .../0529_a9d2_port_20_25d_3a_20tx.rel | 28 + src/nos/lib/messages_lib/052a_3aa8_ppp.rel | 10 + .../052b_8304_ppp_5fproc_3a_20mis.rel | 14 + .../messages_lib/052c_3dc2_protocol_3a_20.rel | 12 + src/nos/lib/messages_lib/052d_4160_ps.rel | 10 + .../lib/messages_lib/052e_26dc_pthresh.rel | 10 + .../lib/messages_lib/052f_a61f_publish.rel | 10 + .../0530_274c_pushdown_20calls_20.rel | 18 + src/nos/lib/messages_lib/0531_0234_put.rel | 10 + .../0532_8f3b_put_20_3clocalfile_.rel | 14 + src/nos/lib/messages_lib/0533_2105_pwd.rel | 10 + src/nos/lib/messages_lib/0534_0282_qlimit.rel | 10 + .../lib/messages_lib/0535_0be6_queries.rel | 10 + src/nos/lib/messages_lib/0536_0bef_query.rel | 10 + .../0537_6646_query_20_3chostid_3.rel | 12 + .../0538_27c8_queue_20job_20_25s_.rel | 14 + src/nos/lib/messages_lib/0539_1196_quick.rel | 10 + src/nos/lib/messages_lib/053a_ad30_quiet.rel | 10 + src/nos/lib/messages_lib/053b_7b54_quit.rel | 10 + src/nos/lib/messages_lib/053c_054d_read.rel | 10 + .../053d_c7a9_read_20_3cremotefil.rel | 12 + src/nos/lib/messages_lib/053e_7ee6_reboot.rel | 10 + .../053f_1c64_received_20_25u_20b.rel | 22 + src/nos/lib/messages_lib/0540_5735_record.rel | 10 + .../0541_18c5_recv_3a_20do_20.rel | 12 + .../0542_8810_recv_3a_20dont_20.rel | 12 + .../0543_84ef_recv_3a_20will_20.rel | 12 + .../0544_219c_recv_3a_20wont_20.rel | 12 + src/nos/lib/messages_lib/0545_c7dc_refuse.rel | 10 + .../lib/messages_lib/0546_0e31_reject_0a.rel | 10 + src/nos/lib/messages_lib/0547_bc2e_remote.rel | 10 + .../0548_4ff0_remote_20_5b_2dp_20.rel | 22 + src/nos/lib/messages_lib/0549_cb71_rename.rel | 10 + .../054a_a493_rename_20_3coldfile.rel | 14 + src/nos/lib/messages_lib/054b_6d5b_repeat.rel | 10 + .../054c_01b9_repeat_20_3cinterva.rel | 16 + .../lib/messages_lib/054d_3f14_request.rel | 10 + src/nos/lib/messages_lib/054e_85b2_reset.rel | 10 + .../054f_c3ce_response_20id_20_25.rel | 24 + src/nos/lib/messages_lib/0550_9bd3_retr.rel | 10 + .../lib/messages_lib/0551_5e3c_retries.rel | 10 + src/nos/lib/messages_lib/0552_0acb_retry.rel | 10 + .../0553_7f96_rip_20accept_20_3cg.rel | 14 + .../0554_764e_rip_20add_20_3cdest.rel | 16 + .../0555_3030_rip_20drop_20_3cdes.rel | 12 + .../0556_8661_rip_20refuse_20_3cg.rel | 14 + src/nos/lib/messages_lib/0557_b917_rmd_20.rel | 10 + src/nos/lib/messages_lib/0558_a56c_rmdir.rel | 10 + .../0559_b9e3_rmdir_20_3cdirector.rel | 12 + src/nos/lib/messages_lib/055a_c459_rmhost.rel | 10 + src/nos/lib/messages_lib/055b_0284_route.rel | 10 + .../055c_ea02_route_20add_20_3cde.rel | 20 + .../055d_f461_route_20add_20_5b_2.rel | 14 + .../055e_d581_route_20addprivate_.rel | 22 + .../055f_bbd2_route_20drop_20_3cd.rel | 16 + .../0560_103e_route_20drop_20_5b_.rel | 12 + .../0561_a5ec_route_20lookup_20_3.rel | 14 + .../0562_ae23_route_20to_20self_3.rel | 14 + src/nos/lib/messages_lib/0563_2c09_rtimer.rel | 10 + src/nos/lib/messages_lib/0564_ae54_rtt.rel | 10 + .../lib/messages_lib/0565_02fc_running.rel | 10 + src/nos/lib/messages_lib/0566_b4d7_rxbuf.rel | 10 + src/nos/lib/messages_lib/0567_d2fd_sbrk.rel | 10 + .../lib/messages_lib/0568_3365_scrollback.rel | 12 + src/nos/lib/messages_lib/0569_9a3e_send.rel | 10 + .../056a_e397_send_20_22string_22.rel | 14 + src/nos/lib/messages_lib/056b_5c19_sender.rel | 10 + .../056c_efea_sending_20job_20_25.rel | 12 + .../056d_7321_sent_3a_20do_20.rel | 12 + .../056e_db3c_sent_3a_20dont_20.rel | 12 + .../056f_d7c3_sent_3a_20will_20.rel | 12 + .../0570_72b0_sent_3a_20wont_20.rel | 12 + .../0571_2d5d_serial_20line_20IP_.rel | 14 + .../0572_f33e_serial_20line_20VJ_.rel | 16 + .../0573_6f7f_serial_20line_20VJ_.rel | 16 + .../0574_6f48_server_20retries.rel | 12 + .../messages_lib/0575_f0af_server_20trace.rel | 12 + .../lib/messages_lib/0576_db9a_session.rel | 10 + .../0577_3031_set_20mycall_20firs.rel | 12 + src/nos/lib/messages_lib/0578_1de4_shell.rel | 10 + src/nos/lib/messages_lib/0579_3faf_signal.rel | 10 + src/nos/lib/messages_lib/057a_dce5_size.rel | 10 + src/nos/lib/messages_lib/057b_f163_sizes.rel | 10 + .../057c_4046_smtp_20daemon_20ent.rel | 16 + .../057d_8e2a_smtp_20daemon_3a_20.rel | 16 + .../057e_23e1_smtp_20job_20_25s_2.rel | 16 + .../057f_ed89_smtp_20mode_3a_20_2.rel | 12 + .../0580_2b33_smtp_20recv_3a_20_2.rel | 12 + .../0581_928b_smtp_20sent_3a_20.rel | 12 + src/nos/lib/messages_lib/0582_b4cf_socket.rel | 10 + .../0583_6b20_some_20strange_2c_2.rel | 14 + src/nos/lib/messages_lib/0584_60cd_speed.rel | 10 + .../0585_9785_speed_20_3cbps_3e.rel | 12 + .../0586_1861_spool_3a_20_25s_0a.rel | 12 + .../lib/messages_lib/0587_61f2_src_20_25s.rel | 10 + .../0588_4e06_srtt_20_3d_20_25lu_.rel | 14 + .../messages_lib/0589_795f_stack_20test.rel | 12 + .../lib/messages_lib/058a_45e3_stacktest.rel | 12 + .../058b_be0b_stacktest_20_5bon_7.rel | 12 + .../messages_lib/058c_fcc6_standard_0a.rel | 12 + src/nos/lib/messages_lib/058d_b958_start.rel | 10 + .../058e_4b5d_start_20_3cserverna.rel | 12 + .../058f_9324_start_20bsr_20_3cin.rel | 14 + src/nos/lib/messages_lib/0590_d63e_stat.rel | 10 + src/nos/lib/messages_lib/0591_5069_status.rel | 10 + .../0592_7dfc_status_20up_20_7c_2.rel | 12 + src/nos/lib/messages_lib/0593_68cb_stime.rel | 10 + .../0594_4875_stktrace_20from_20p.rel | 14 + src/nos/lib/messages_lib/0595_0a0a_stop.rel | 10 + .../0596_6ec0_stop_20_3cservernam.rel | 12 + .../lib/messages_lib/0597_301d_stopped.rel | 10 + src/nos/lib/messages_lib/0598_2918_stor.rel | 10 + src/nos/lib/messages_lib/0599_784e_stru.rel | 10 + src/nos/lib/messages_lib/059a_bec3_suffix.rel | 10 + .../lib/messages_lib/059b_420b_symlink.rel | 10 + src/nos/lib/messages_lib/059c_ceb7_sync.rel | 10 + .../lib/messages_lib/059d_bb66_syndata.rel | 10 + .../lib/messages_lib/059e_b50c_sysdebug.rel | 10 + .../059f_be35_sysdebug_20_5bon_7c.rel | 12 + src/nos/lib/messages_lib/05a0_8f60_syst.rel | 10 + .../05a1_f3f3_system_20call_20tra.rel | 12 + .../05a2_a612_system_20kernel_20d.rel | 12 + .../lib/messages_lib/05a3_98fb_systrace.rel | 10 + .../05a4_71e3_systrace_20_5bon_7c.rel | 12 + src/nos/lib/messages_lib/05a5_6404_t3.rel | 10 + src/nos/lib/messages_lib/05a6_b31f_target.rel | 10 + src/nos/lib/messages_lib/05a7_e630_tcp.rel | 10 + .../05a8_e483_tcp_20kick_20_3ctcb.rel | 12 + .../05a9_a12c_tcp_20reset_20_3ctc.rel | 12 + .../05aa_bb94_tcp_20rtt_20_3ctcb_.rel | 12 + .../05ab_f363_tcp_20stat_20_3ctcb.rel | 14 + src/nos/lib/messages_lib/05ac_6ff2_telnet.rel | 10 + .../05ad_2114_telnet_20_3caddress.rel | 12 + src/nos/lib/messages_lib/05ae_6cef_term.rel | 10 + .../lib/messages_lib/05af_7425_terminate.rel | 12 + src/nos/lib/messages_lib/05b0_4c6f_thresh.rel | 10 + src/nos/lib/messages_lib/05b1_535d_time.rel | 10 + .../05b2_43a3_time_20before_20fil.rel | 16 + .../lib/messages_lib/05b3_7156_timeout.rel | 10 + src/nos/lib/messages_lib/05b4_d9a6_timer.rel | 10 + .../05b5_d29c_timer_3a_20ints_20w.rel | 14 + src/nos/lib/messages_lib/05b6_c82f_times.rel | 10 + .../lib/messages_lib/05b7_223a_timestamps.rel | 12 + .../05b8_004c_tip_20or_20dialer_2.rel | 18 + .../lib/messages_lib/05b9_aa4a_tiptimeout.rel | 12 + .../05ba_aa76_tmp_20file_20wiping.rel | 12 + .../05bb_2645_tmp_20file_3a_20_25.rel | 12 + src/nos/lib/messages_lib/05bc_a165_topt.rel | 10 + src/nos/lib/messages_lib/05bd_4f5f_trace.rel | 10 + .../05be_3bce_traceroute_20done_3.rel | 12 + src/nos/lib/messages_lib/05bf_f7b8_try.rel | 10 + src/nos/lib/messages_lib/05c0_e444_ttl.rel | 10 + .../lib/messages_lib/05c1_299c_ttylink.rel | 10 + src/nos/lib/messages_lib/05c2_e58b_txqlen.rel | 10 + src/nos/lib/messages_lib/05c3_f321_type.rel | 10 + src/nos/lib/messages_lib/05c4_f1e4_udp.rel | 10 + src/nos/lib/messages_lib/05c5_5caf_umount.rel | 10 + .../lib/messages_lib/05c6_5c70_unknown_0a.rel | 10 + .../05c7_bc4f_unknown_200x_2504x_.rel | 12 + .../05c8_5194_unknown_20hardware_.rel | 14 + src/nos/lib/messages_lib/05c9_acee_unlink.rel | 10 + .../05ca_f303_up_20script_3a_20_2.rel | 12 + src/nos/lib/messages_lib/05cb_db93_update.rel | 10 + .../05cc_5c27_update_20Domain_2et.rel | 12 + .../05cd_0b09_update_20Domain_2et.rel | 14 + .../05ce_c5a3_update_20Domain_2et.rel | 14 + src/nos/lib/messages_lib/05cf_d4f0_upload.rel | 10 + src/nos/lib/messages_lib/05d0_13f7_user.rel | 10 + .../05d1_6f25_user_20abort_0a.rel | 12 + .../lib/messages_lib/05d2_1b49_userdata.rel | 10 + .../05d3_3967_username_20not_20de.rel | 18 + src/nos/lib/messages_lib/05d4_c23f_users.rel | 10 + src/nos/lib/messages_lib/05d5_5353_utime.rel | 10 + .../05d6_d261_valid_20subcommands.rel | 12 + .../05d7_a0e5_validblk_3a_20dev_2.rel | 14 + .../05d8_74cf_validblk_3a_20inval.rel | 14 + .../lib/messages_lib/05d9_ab5c_verbose.rel | 10 + .../lib/messages_lib/05da_207d_version.rel | 10 + src/nos/lib/messages_lib/05db_9778_view.rel | 10 + .../05dc_23f1_view_20_3cfilename_.rel | 12 + src/nos/lib/messages_lib/05dd_d63a_wait.rel | 10 + .../05de_2887_wait_20_3cmilliseco.rel | 16 + .../lib/messages_lib/05df_e988_waitpid.rel | 10 + .../05e0_674e_want_20busy_20block.rel | 16 + src/nos/lib/messages_lib/05e1_84e4_what.rel | 10 + src/nos/lib/messages_lib/05e2_9158_window.rel | 10 + src/nos/lib/messages_lib/05e3_5379_wipe.rel | 10 + src/nos/lib/messages_lib/05e4_4cc8_write.rel | 10 + src/nos/lib/messages_lib/05e5_dd6d_x_25x.rel | 10 + src/nos/lib/messages_lib/05e6_ce7b_xcwd.rel | 10 + src/nos/lib/messages_lib/05e7_2295_xmd5.rel | 10 + src/nos/lib/messages_lib/05e8_e251_xmkd.rel | 10 + src/nos/lib/messages_lib/05e9_a48a_xpwd.rel | 10 + src/nos/lib/messages_lib/05ea_79d3_xrmd.rel | 10 + src/nos/lib/messages_lib/05eb_c59b_zap.rel | 10 + src/nos/lib/net.lib | 435 + src/nos/lib/net_lib/Allocmbufs.rel | 12 + src/nos/lib/net_lib/Badsocket.rel | 15 + src/nos/lib/net_lib/Cachehits.rel | 12 + src/nos/lib/net_lib/Decode.rel | 66 + src/nos/lib/net_lib/Encap.rel | 44 + src/nos/lib/net_lib/Encode.rel | 73 + src/nos/lib/net_lib/Freembufs.rel | 12 + src/nos/lib/net_lib/Ifaces.rel | 16 + src/nos/lib/net_lib/Ifcmds.rel | 61 + src/nos/lib/net_lib/Loopback.rel | 44 + src/nos/lib/net_lib/MD5Final.rel | 79 + src/nos/lib/net_lib/MD5Init.rel | 29 + src/nos/lib/net_lib/MD5Transform.rel | 71 + src/nos/lib/net_lib/MD5Transform_Round1.rel | 785 + src/nos/lib/net_lib/MD5Transform_Round2.rel | 785 + src/nos/lib/net_lib/MD5Transform_Round3.rel | 688 + src/nos/lib/net_lib/MD5Transform_Round4.rel | 721 + src/nos/lib/net_lib/MD5Update.rel | 148 + src/nos/lib/net_lib/Mbufcache.rel | 12 + src/nos/lib/net_lib/Msizes.rel | 12 + src/nos/lib/net_lib/Noipaddr.rel | 23 + src/nos/lib/net_lib/PADDING.rel | 25 + src/nos/lib/net_lib/Pushalloc.rel | 12 + src/nos/lib/net_lib/Pushdowns.rel | 12 + src/nos/lib/net_lib/Sock_errlist.rel | 98 + src/nos/lib/net_lib/Socktypes.rel | 64 + src/nos/lib/net_lib/Usock.rel | 12 + src/nos/lib/net_lib/_Files.rel | 12 + src/nos/lib/net_lib/_clrtmp.rel | 15 + src/nos/lib/net_lib/_fclose.rel | 252 + src/nos/lib/net_lib/_fcreat.rel | 62 + src/nos/lib/net_lib/_fgetc.rel | 88 + src/nos/lib/net_lib/_fillbuf.rel | 247 + src/nos/lib/net_lib/accept.rel | 167 + src/nos/lib/net_lib/ahdlc.rel | 354 + src/nos/lib/net_lib/alloc.rel | 1271 + src/nos/lib/net_lib/alloc_mbuf.rel | 215 + src/nos/lib/net_lib/ambufw.rel | 203 + src/nos/lib/net_lib/append.rel | 69 + src/nos/lib/net_lib/asyopen.rel | 107 + src/nos/lib/net_lib/audit.rel | 325 + src/nos/lib/net_lib/bind.rel | 124 + src/nos/lib/net_lib/bitbucket.rel | 21 + src/nos/lib/net_lib/close.rel | 85 + src/nos/lib/net_lib/close_s.rel | 98 + src/nos/lib/net_lib/cmdparse.rel | 1281 + src/nos/lib/net_lib/connect.rel | 127 + src/nos/lib/net_lib/copy_p.rel | 96 + src/nos/lib/net_lib/crc.rel | 203 + src/nos/lib/net_lib/dequeue.rel | 54 + src/nos/lib/net_lib/devparam.rel | 248 + src/nos/lib/net_lib/diagopen.rel | 89 + src/nos/lib/net_lib/displayopen.rel | 15 + src/nos/lib/net_lib/dodetach.rel | 61 + src/nos/lib/net_lib/dodialer.rel | 116 + src/nos/lib/net_lib/dofiles.rel | 354 + src/nos/lib/net_lib/doifconfig.rel | 147 + src/nos/lib/net_lib/dup_p.rel | 194 + src/nos/lib/net_lib/enqueue.rel | 89 + src/nos/lib/net_lib/eolseq.rel | 38 + src/nos/lib/net_lib/exit.rel | 53 + src/nos/lib/net_lib/extract.rel | 113 + src/nos/lib/net_lib/fblock.rel | 47 + src/nos/lib/net_lib/fclose.rel | 89 + src/nos/lib/net_lib/fcloseall.rel | 43 + src/nos/lib/net_lib/fdopen.rel | 130 + src/nos/lib/net_lib/fdup.rel | 118 + src/nos/lib/net_lib/fflush.rel | 277 + src/nos/lib/net_lib/fgetc.rel | 112 + src/nos/lib/net_lib/fgets.rel | 76 + src/nos/lib/net_lib/files.rel | 1355 + src/nos/lib/net_lib/flushall.rel | 36 + src/nos/lib/net_lib/fmode.rel | 53 + src/nos/lib/net_lib/fpname.rel | 45 + src/nos/lib/net_lib/fprintf.rel | 25 + src/nos/lib/net_lib/fputc.rel | 177 + src/nos/lib/net_lib/fputs.rel | 44 + src/nos/lib/net_lib/fread.rel | 311 + src/nos/lib/net_lib/free_mbuf.rel | 171 + src/nos/lib/net_lib/free_p.rel | 57 + src/nos/lib/net_lib/free_q.rel | 38 + src/nos/lib/net_lib/freesock.rel | 65 + src/nos/lib/net_lib/freopen.rel | 242 + src/nos/lib/net_lib/fseek.rel | 123 + src/nos/lib/net_lib/ftell.rel | 52 + src/nos/lib/net_lib/ftpsubr.rel | 615 + src/nos/lib/net_lib/fwrite.rel | 451 + src/nos/lib/net_lib/getopt.rel | 301 + src/nos/lib/net_lib/getpeername.rel | 92 + src/nos/lib/net_lib/gets.rel | 70 + src/nos/lib/net_lib/getsockname.rel | 102 + src/nos/lib/net_lib/if_detach.rel | 277 + src/nos/lib/net_lib/if_lookup.rel | 46 + src/nos/lib/net_lib/if_name.rel | 46 + src/nos/lib/net_lib/if_tx.rel | 97 + src/nos/lib/net_lib/ifbroad.rel | 74 + src/nos/lib/net_lib/ifencap.rel | 45 + src/nos/lib/net_lib/ifforw.rel | 37 + src/nos/lib/net_lib/ifipaddr.rel | 27 + src/nos/lib/net_lib/iflinkadr.rel | 80 + src/nos/lib/net_lib/ifmtu.rel | 25 + src/nos/lib/net_lib/ifnetmsk.rel | 82 + src/nos/lib/net_lib/ifrxbuf.rel | 15 + src/nos/lib/net_lib/iftxqlen.rel | 28 + src/nos/lib/net_lib/ismyaddr.rel | 57 + src/nos/lib/net_lib/kernel.rel | 1302 + src/nos/lib/net_lib/ksubr.rel | 631 + src/nos/lib/net_lib/len_p.rel | 33 + src/nos/lib/net_lib/len_q.rel | 33 + src/nos/lib/net_lib/listen.rel | 74 + src/nos/lib/net_lib/locsock.rel | 613 + src/nos/lib/net_lib/mask2width.rel | 49 + src/nos/lib/net_lib/mbuf_crunch.rel | 88 + src/nos/lib/net_lib/mbuf_garbage.rel | 70 + src/nos/lib/net_lib/mbufsizes.rel | 79 + src/nos/lib/net_lib/mbufstat.rel | 78 + src/nos/lib/net_lib/misc.rel | 474 + src/nos/lib/net_lib/net_route.rel | 29 + src/nos/lib/net_lib/network.rel | 128 + src/nos/lib/net_lib/nu_output.rel | 20 + src/nos/lib/net_lib/nu_send.rel | 20 + src/nos/lib/net_lib/pathname.rel | 303 + src/nos/lib/net_lib/perror.rel | 54 + src/nos/lib/net_lib/pipeopen.rel | 51 + src/nos/lib/net_lib/printf.rel | 28 + src/nos/lib/net_lib/pull16.rel | 40 + src/nos/lib/net_lib/pull32.rel | 38 + src/nos/lib/net_lib/pull8.rel | 35 + src/nos/lib/net_lib/pullup.rel | 160 + src/nos/lib/net_lib/pushdown.rel | 105 + src/nos/lib/net_lib/puts.rel | 41 + src/nos/lib/net_lib/qdata.rel | 32 + src/nos/lib/net_lib/read.rel | 82 + src/nos/lib/net_lib/recv_mbuf.rel | 58 + src/nos/lib/net_lib/send_mbuf.rel | 105 + src/nos/lib/net_lib/setbuf.rel | 39 + src/nos/lib/net_lib/setencap.rel | 85 + src/nos/lib/net_lib/seteol.rel | 55 + src/nos/lib/net_lib/settos.rel | 38 + src/nos/lib/net_lib/setvbuf.rel | 82 + src/nos/lib/net_lib/showiface.rel | 225 + src/nos/lib/net_lib/shutdown.rel | 86 + src/nos/lib/net_lib/sockcmd.rel | 218 + src/nos/lib/net_lib/socket.rel | 277 + src/nos/lib/net_lib/socketpair.rel | 116 + src/nos/lib/net_lib/sockinit.rel | 32 + src/nos/lib/net_lib/sockkick.rel | 62 + src/nos/lib/net_lib/socklen.rel | 95 + src/nos/lib/net_lib/sockowner.rel | 50 + src/nos/lib/net_lib/sockuser.rel | 186 + src/nos/lib/net_lib/sockutil.rel | 241 + src/nos/lib/net_lib/timer.rel | 712 + src/nos/lib/net_lib/tmpfile.rel | 230 + src/nos/lib/net_lib/trim_mbuf.rel | 91 + src/nos/lib/net_lib/ttydriv.rel | 324 + src/nos/lib/net_lib/ungetc.rel | 72 + src/nos/lib/net_lib/usesock.rel | 42 + src/nos/lib/net_lib/vfprintf.rel | 54 + src/nos/lib/net_lib/view.rel | 987 + src/nos/lib/net_lib/vprintf.rel | 22 + src/nos/lib/net_lib/wildmat.rel | 314 + src/nos/lib/net_lib/write.rel | 93 + src/nos/lib/net_lib/write_p.rel | 55 + src/nos/lib/ppp.lib | 301 + src/nos/lib/ppp_lib/IPcpcmds.rel | 57 + src/nos/lib/ppp_lib/IPcpside_cmds.rel | 31 + src/nos/lib/ppp_lib/Lcpcmds.rel | 51 + src/nos/lib/ppp_lib/Lcpside_cmds.rel | 51 + src/nos/lib/ppp_lib/Papcmds.rel | 31 + src/nos/lib/ppp_lib/asy.rel | 467 + src/nos/lib/ppp_lib/decode.rel | 38 + src/nos/lib/ppp_lib/dialer.rel | 1459 + src/nos/lib/ppp_lib/doipcp_address.rel | 112 + src/nos/lib/ppp_lib/doipcp_compress.rel | 271 + src/nos/lib/ppp_lib/doipcp_default.rel | 20 + src/nos/lib/ppp_lib/doipcp_local.rel | 28 + src/nos/lib/ppp_lib/doipcp_open.rel | 38 + src/nos/lib/ppp_lib/doipcp_pool.rel | 157 + src/nos/lib/ppp_lib/doipcp_remote.rel | 28 + src/nos/lib/ppp_lib/dolcp_accm.rel | 109 + src/nos/lib/ppp_lib/dolcp_acfc.rel | 67 + src/nos/lib/ppp_lib/dolcp_auth.rel | 173 + src/nos/lib/ppp_lib/dolcp_default.rel | 20 + src/nos/lib/ppp_lib/dolcp_local.rel | 28 + src/nos/lib/ppp_lib/dolcp_magic.rel | 151 + src/nos/lib/ppp_lib/dolcp_mru.rel | 137 + src/nos/lib/ppp_lib/dolcp_open.rel | 38 + src/nos/lib/ppp_lib/dolcp_pfc.rel | 67 + src/nos/lib/ppp_lib/dolcp_remote.rel | 28 + src/nos/lib/ppp_lib/dopap_user.rel | 122 + src/nos/lib/ppp_lib/doppp_ipcp.rel | 28 + src/nos/lib/ppp_lib/doppp_lcp.rel | 28 + src/nos/lib/ppp_lib/doppp_pap.rel | 28 + src/nos/lib/ppp_lib/encode.rel | 45 + src/nos/lib/ppp_lib/fcstab.rel | 117 + src/nos/lib/ppp_lib/fsmCodes.rel | 80 + src/nos/lib/ppp_lib/fsmStates.rel | 50 + src/nos/lib/ppp_lib/fsm_close.rel | 98 + src/nos/lib/ppp_lib/fsm_down.rel | 97 + src/nos/lib/ppp_lib/fsm_free.rel | 37 + src/nos/lib/ppp_lib/fsm_init.rel | 81 + src/nos/lib/ppp_lib/fsm_log.rel | 52 + src/nos/lib/ppp_lib/fsm_no_action.rel | 38 + src/nos/lib/ppp_lib/fsm_no_check.rel | 38 + src/nos/lib/ppp_lib/fsm_opening.rel | 37 + src/nos/lib/ppp_lib/fsm_proc.rel | 896 + src/nos/lib/ppp_lib/fsm_reset.rel | 62 + src/nos/lib/ppp_lib/fsm_send.rel | 200 + src/nos/lib/ppp_lib/fsm_sendreq.rel | 72 + src/nos/lib/ppp_lib/fsm_sendtermack.rel | 45 + src/nos/lib/ppp_lib/fsm_sendtermreq.rel | 64 + src/nos/lib/ppp_lib/fsm_start.rel | 96 + src/nos/lib/ppp_lib/fsm_timeout.rel | 142 + src/nos/lib/ppp_lib/fsm_timer.rel | 43 + src/nos/lib/ppp_lib/htoncnf.rel | 42 + src/nos/lib/ppp_lib/htonppp.rel | 42 + src/nos/lib/ppp_lib/ipcp_ack.rel | 208 + src/nos/lib/ppp_lib/ipcp_addr_idle.rel | 50 + src/nos/lib/ppp_lib/ipcp_check.rel | 516 + src/nos/lib/ppp_lib/ipcp_closing.rel | 27 + src/nos/lib/ppp_lib/ipcp_constants.rel | 43 + src/nos/lib/ppp_lib/ipcp_default.rel | 17 + src/nos/lib/ppp_lib/ipcp_free.rel | 23 + src/nos/lib/ppp_lib/ipcp_init.rel | 85 + src/nos/lib/ppp_lib/ipcp_lookuppeer.rel | 52 + src/nos/lib/ppp_lib/ipcp_makeoptions.rel | 80 + src/nos/lib/ppp_lib/ipcp_makereq.rel | 51 + src/nos/lib/ppp_lib/ipcp_nak.rel | 329 + src/nos/lib/ppp_lib/ipcp_negotiate.rel | 15 + src/nos/lib/ppp_lib/ipcp_opening.rel | 217 + src/nos/lib/ppp_lib/ipcp_option.rel | 271 + src/nos/lib/ppp_lib/ipcp_option_length.rel | 15 + src/nos/lib/ppp_lib/ipcp_poolnext.rel | 104 + src/nos/lib/ppp_lib/ipcp_reject.rel | 317 + src/nos/lib/ppp_lib/ipcp_request.rel | 366 + src/nos/lib/ppp_lib/ipcp_reset.rel | 64 + src/nos/lib/ppp_lib/ipcp_starting.rel | 96 + src/nos/lib/ppp_lib/ipcp_stopping.rel | 38 + src/nos/lib/ppp_lib/lcp_ack.rel | 208 + src/nos/lib/ppp_lib/lcp_check.rel | 474 + src/nos/lib/ppp_lib/lcp_closing.rel | 30 + src/nos/lib/ppp_lib/lcp_constants.rel | 43 + src/nos/lib/ppp_lib/lcp_default.rel | 17 + src/nos/lib/ppp_lib/lcp_free.rel | 13 + src/nos/lib/ppp_lib/lcp_init.rel | 83 + src/nos/lib/ppp_lib/lcp_makeoptions.rel | 80 + src/nos/lib/ppp_lib/lcp_makereq.rel | 51 + src/nos/lib/ppp_lib/lcp_nak.rel | 329 + src/nos/lib/ppp_lib/lcp_negotiate.rel | 15 + src/nos/lib/ppp_lib/lcp_opening.rel | 139 + src/nos/lib/ppp_lib/lcp_option.rel | 319 + src/nos/lib/ppp_lib/lcp_option_length.rel | 15 + src/nos/lib/ppp_lib/lcp_reject.rel | 317 + src/nos/lib/ppp_lib/lcp_request.rel | 366 + src/nos/lib/ppp_lib/lcp_reset.rel | 72 + src/nos/lib/ppp_lib/lcp_starting.rel | 42 + src/nos/lib/ppp_lib/lcp_stopping.rel | 67 + src/nos/lib/ppp_lib/ntohcnf.rel | 54 + src/nos/lib/ppp_lib/ntohopt.rel | 47 + src/nos/lib/ppp_lib/pap_check.rel | 264 + src/nos/lib/ppp_lib/pap_constants.rel | 36 + src/nos/lib/ppp_lib/pap_down.rel | 87 + src/nos/lib/ppp_lib/pap_free.rel | 33 + src/nos/lib/ppp_lib/pap_init.rel | 116 + src/nos/lib/ppp_lib/pap_local.rel | 52 + src/nos/lib/ppp_lib/pap_makereq.rel | 184 + src/nos/lib/ppp_lib/pap_monitor.rel | 317 + src/nos/lib/ppp_lib/pap_opening.rel | 52 + src/nos/lib/ppp_lib/pap_proc.rel | 249 + src/nos/lib/ppp_lib/pap_pwdlookup.rel | 84 + src/nos/lib/ppp_lib/pap_remote.rel | 86 + src/nos/lib/ppp_lib/pap_request.rel | 293 + src/nos/lib/ppp_lib/pap_shutdown.rel | 71 + src/nos/lib/ppp_lib/pap_timeout.rel | 117 + src/nos/lib/ppp_lib/pap_verify.rel | 100 + src/nos/lib/ppp_lib/ppp_discard.rel | 25 + src/nos/lib/ppp_lib/ppp_echo.rel | 25 + src/nos/lib/ppp_lib/ppp_error.rel | 26 + src/nos/lib/ppp_lib/ppp_free.rel | 60 + src/nos/lib/ppp_lib/ppp_init.rel | 107 + src/nos/lib/ppp_lib/ppp_iostatus.rel | 80 + src/nos/lib/ppp_lib/ppp_log.rel | 40 + src/nos/lib/ppp_lib/ppp_output.rel | 86 + src/nos/lib/ppp_lib/ppp_proc.rel | 723 + src/nos/lib/ppp_lib/ppp_raw.rel | 484 + src/nos/lib/ppp_lib/ppp_ready.rel | 38 + src/nos/lib/ppp_lib/ppp_recv.rel | 453 + src/nos/lib/ppp_lib/ppp_send.rel | 144 + src/nos/lib/ppp_lib/ppp_skipped.rel | 38 + src/nos/lib/ppp_lib/pppcmd.rel | 1456 + src/nos/lib/ppp_lib/pppdump.rel | 295 + src/nos/lib/ppp_lib/slhc_compress.rel | 710 + src/nos/lib/ppp_lib/slhc_free.rel | 55 + src/nos/lib/ppp_lib/slhc_i_status.rel | 42 + src/nos/lib/ppp_lib/slhc_init.rel | 133 + src/nos/lib/ppp_lib/slhc_o_status.rel | 59 + src/nos/lib/ppp_lib/slhc_remember.rel | 168 + src/nos/lib/ppp_lib/slhc_toss.rel | 27 + src/nos/lib/ppp_lib/slhc_uncompress.rel | 393 + src/nos/lib/ppp_lib/slhcdump.rel | 409 + src/nos/lib/ppp_lib/slip.rel | 799 + src/nos/lib/ppp_lib/sppp.rel | 389 + src/nos/lib/ppp_lib/stpcpy.rel | 30 + src/nos/lib/servers.lib | 131 + src/nos/lib/servers_lib/Ftpscmd.rel | 61 + src/nos/lib/servers_lib/Ftpsmsg_badcmd.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_badport.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_badtype.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_banner.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_binwarn.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_bye.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_cantmake.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_cantopen.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_delefail.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_deleok.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_givepass.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_logged.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_lowmem.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_mkdok.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_noconn.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_nodir.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_noperm.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_notlog.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_okay.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_only8.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_portok.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_pwdmsg.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_rxok.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_sending.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_syst.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_txok.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_typeok.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_unimp.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_unsupp.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_userfirst.rel | 16 + src/nos/lib/servers_lib/Ftpsmsg_writerr.rel | 16 + src/nos/lib/servers_lib/bootpcmd.rel | 2267 + src/nos/lib/servers_lib/bootpd.rel | 1682 + src/nos/lib/servers_lib/bootpdip.rel | 1869 + src/nos/lib/servers_lib/fingerd.rel | 312 + src/nos/lib/servers_lib/ftp0.rel | 40 + src/nos/lib/servers_lib/ftplogin.rel | 132 + src/nos/lib/servers_lib/ftpserv.rel | 492 + src/nos/lib/servers_lib/ftpserv_switch.rel | 1280 + .../lib/servers_lib/ftpserv_switch_xmd5.rel | 241 + src/nos/lib/servers_lib/ftpstart.rel | 50 + src/nos/lib/servers_lib/permcheck.rel | 118 + src/nos/lib/servers_lib/pport.rel | 116 + src/nos/lib/servers_lib/recvit.rel | 203 + src/nos/lib/servers_lib/sendit.rel | 198 + src/nos/lib/servers_lib/smisc.rel | 1600 + src/nos/lib/servers_lib/ttylink.rel | 373 + src/nos/lib/z80.lib | 229 + src/nos/lib/z80_lib/Asy.rel | 12 + src/nos/lib/z80_lib/Esccchan.rel | 17 + src/nos/lib/z80_lib/Esccinfo.rel | 19 + src/nos/lib/z80_lib/Esccmaxvec.rel | 15 + src/nos/lib/z80_lib/Esccpolltab.rel | 17 + src/nos/lib/z80_lib/Esccvecloc.rel | 15 + src/nos/lib/z80_lib/Handle.rel | 17 + src/nos/lib/z80_lib/Orgivec.rel | 12 + src/nos/lib/z80_lib/Random.rel | 15 + src/nos/lib/z80_lib/ascivec.rel | 36 + src/nos/lib/z80_lib/asy_close.rel | 104 + src/nos/lib/z80_lib/asy_init.rel | 171 + src/nos/lib/z80_lib/asy_ioctl.rel | 82 + src/nos/lib/z80_lib/asy_open.rel | 133 + src/nos/lib/z80_lib/asy_read.rel | 166 + src/nos/lib/z80_lib/asy_send.rel | 67 + src/nos/lib/z80_lib/asy_speed.rel | 134 + src/nos/lib/z80_lib/asy_stop.rel | 139 + src/nos/lib/z80_lib/asy_write.rel | 148 + src/nos/lib/z80_lib/asycom.rel | 91 + src/nos/lib/z80_lib/asyint.rel | 23 + src/nos/lib/z80_lib/asyret.rel | 41 + src/nos/lib/z80_lib/asyrxint.rel | 180 + src/nos/lib/z80_lib/asytimer.rel | 94 + src/nos/lib/z80_lib/asytxint.rel | 103 + src/nos/lib/z80_lib/copyr.rel | 72 + src/nos/lib/z80_lib/diag.rel | 133 + src/nos/lib/z80_lib/dirutil.rel | 1082 + src/nos/lib/z80_lib/doasystat.rel | 165 + src/nos/lib/z80_lib/doesccstat.rel | 169 + src/nos/lib/z80_lib/escc_aioctl.rel | 65 + src/nos/lib/z80_lib/escc_asyex.rel | 68 + src/nos/lib/z80_lib/escc_async.rel | 495 + src/nos/lib/z80_lib/escc_asyrx.rel | 102 + src/nos/lib/z80_lib/escc_asysp.rel | 72 + src/nos/lib/z80_lib/escc_asytx.rel | 156 + src/nos/lib/z80_lib/escc_attach.rel | 731 + src/nos/lib/z80_lib/escc_delay.rel | 15 + src/nos/lib/z80_lib/escc_frameup.rel | 21 + src/nos/lib/z80_lib/escc_init.rel | 694 + src/nos/lib/z80_lib/escc_raw.rel | 102 + src/nos/lib/z80_lib/escc_sdlc.rel | 630 + src/nos/lib/z80_lib/escc_sdlcex.rel | 293 + src/nos/lib/z80_lib/escc_sdlcrx.rel | 182 + src/nos/lib/z80_lib/escc_sdlcsp.rel | 194 + src/nos/lib/z80_lib/escc_sdlctx.rel | 265 + src/nos/lib/z80_lib/escc_send.rel | 39 + src/nos/lib/z80_lib/escc_sioctl.rel | 330 + src/nos/lib/z80_lib/escc_speed.rel | 151 + src/nos/lib/z80_lib/escc_sstart.rel | 53 + src/nos/lib/z80_lib/escc_stop.rel | 110 + src/nos/lib/z80_lib/escc_tossb.rel | 41 + src/nos/lib/z80_lib/escc_txoff.rel | 102 + src/nos/lib/z80_lib/escc_txon.rel | 124 + src/nos/lib/z80_lib/esccgen.rel | 74 + src/nos/lib/z80_lib/esccstop.rel | 35 + src/nos/lib/z80_lib/escctimer.rel | 382 + src/nos/lib/z80_lib/esccvec.rel | 47 + src/nos/lib/z80_lib/get_asy.rel | 35 + src/nos/lib/z80_lib/get_escc.rel | 80 + src/nos/lib/z80_lib/get_rlsd_asy.rel | 15 + src/nos/lib/z80_lib/pasy.rel | 185 + src/nos/lib/z80_lib/rand.rel | 271 + src/nos/lib/z80_lib/stktrace.rel | 781 + src/nos/lib/z80_lib/sw.rel | 246 + src/nos/lib/z80_lib/z80.rel | 1077 + src/nos/lib/z80_lib/z80gen.rel | 256 + src/nos/main/auto.mk | 29 + src/nos/main/config.c | 1151 + src/nos/main/crt0_kernel.S | 346 + src/nos/main/main.c | 1259 + src/nos/main/makefile | 10 + src/nos/main/n.sh | 5 + src/nos/main/parm.c | 20 + src/nos/main/session.c | 555 + src/nos/main/version.c | 2 + src/nos/main/x.sh | 2 + src/nos/make.d/host.mk | 30 + src/nos/makefile | 10 + src/nos/mkutil/aud.c | 27 + src/nos/mkutil/genparm.c | 17 + src/nos/mkutil/makefile% | 112 + src/nos/mkutil/mktl.c | 33 + src/nos/mkutil/mktl.exe | Bin 0 -> 7756 bytes src/nos/net/ahdlc.c | 165 + src/nos/net/alloc.c | 666 + src/nos/net/audit.c | 127 + src/nos/net/auto.mk | 49 + src/nos/net/cmdparse.c | 485 + src/nos/net/crc.c | 69 + src/nos/net/devparam.c | 73 + src/nos/net/files.c | 434 + src/nos/net/ftpsubr.c | 198 + src/nos/net/getopt.c | 104 + src/nos/net/iface.c | 742 + src/nos/net/kernel.c | 688 + src/nos/net/ksubr.c | 310 + src/nos/net/locsock.c | 197 + src/nos/net/makefile | 10 + src/nos/net/mbuf.c | 791 + src/nos/net/md5c.c | 735 + src/nos/net/misc.c | 312 + src/nos/net/pathname.c | 122 + src/nos/net/sockcmd.c | 66 + src/nos/net/socket.c | 757 + src/nos/net/sockuser.c | 96 + src/nos/net/sockutil.c | 98 + src/nos/net/stdio.c | 1513 + src/nos/net/timer.c | 289 + src/nos/net/ttydriv.c | 124 + src/nos/net/vfprintf.c | 30 + src/nos/net/view.c | 344 + src/nos/net/wildmat.c | 161 + src/nos/netrom/auto.mk | 14 + src/nos/netrom/makefile | 10 + src/nos/netrom/nr3.c | 988 + src/nos/netrom/nr4.c | 748 + src/nos/netrom/nr4hdr.c | 145 + src/nos/netrom/nr4mail.c | 186 + src/nos/netrom/nr4subr.c | 239 + src/nos/netrom/nr4timer.c | 172 + src/nos/netrom/nr4user.c | 226 + src/nos/netrom/nrcmd.c | 977 + src/nos/netrom/nrhdr.c | 137 + src/nos/netrom/nrs.c | 259 + src/nos/netrom/nrsock.c | 446 + src/nos/pmm/ADDINCL.PMM | 6 + src/nos/pmm/LOGMSG8.PMM | 1 + src/nos/pmm/LOGMSG9.PMM | 18 + src/nos/pmm/NULLMSG.PMM | 12 + src/nos/pmm/STRING.PMM | 1 + src/nos/pmm/X | 101 + src/nos/pmm/a.bat | 1 + src/nos/pmm/asci.pmm | 23 + src/nos/pmm/diffdir.pmm | 12 + src/nos/pmm/endifize.pmm | 2 + src/nos/pmm/i18nall.pmm | 170 + src/nos/pmm/i18nize.pmm | 7 + src/nos/pmm/ifdefize.pmm | 4 + src/nos/pmm/modulize.pmm | 31 + src/nos/pmm/out | 6 + src/nos/pmm/z8.pmm | 49 + src/nos/pmm/z9.pmm | 6 + src/nos/po/auto.mk | 68 + src/nos/po/makefile | 10 + src/nos/po/messages.po | 4569 + src/nos/po/messages.txt | 163 + src/nos/po/n.sh | 2 + src/nos/ppp/asy.c | 174 + src/nos/ppp/auto.mk | 54 + src/nos/ppp/dialer.c | 454 + src/nos/ppp/makefile | 10 + src/nos/ppp/ppp.c | 884 + src/nos/ppp/pppcmd.c | 543 + src/nos/ppp/pppdump.c | 106 + src/nos/ppp/pppfsm.c | 931 + src/nos/ppp/pppipcp.c | 1257 + src/nos/ppp/ppplcp.c | 1248 + src/nos/ppp/ppppap.c | 821 + src/nos/ppp/slhc.c | 666 + src/nos/ppp/slhcdump.c | 122 + src/nos/ppp/slip.c | 309 + src/nos/ppp/sppp.c | 159 + src/nos/rate.bas | 34 + src/nos/servers/auto.mk | 28 + src/nos/servers/bmutil.c | 969 + src/nos/servers/bootpcmd.c | 670 + src/nos/servers/bootpd.c | 509 + src/nos/servers/bootpdip.c | 1008 + src/nos/servers/fingerd.c | 97 + src/nos/servers/forward.c | 859 + src/nos/servers/ftpserv.c | 892 + src/nos/servers/mailbox.c | 1740 + src/nos/servers/makefile | 10 + src/nos/servers/popserv.c | 725 + src/nos/servers/rewrite.c | 158 + src/nos/servers/smisc.c | 506 + src/nos/servers/smtpserv.c | 1004 + src/nos/servers/sysprs7.dll | Bin 0 -> 1025 bytes src/nos/servers/sysprs7.tgz | Bin 0 -> 1025 bytes src/nos/servers/telnetd.c | 79 + src/nos/servers/tipmail.c | 279 + src/nos/servers/ttylink.c | 119 + src/nos/sys/!readme! | 354 + src/nos/sys/_sys/!readme! | 354 + src/nos/sys/_sys/auto.mk | 25 + src/nos/sys/_sys/makefile | 10 + src/nos/sys/_sys/sys.c | 1658 + src/nos/sys/_sys/unix.h | 1021 + src/nos/sys/_sys/unix_banked.S | 94 + src/nos/sys/_sys/unix_large.S | 80 + src/nos/sys/auto.mk | 23 + src/nos/sys/makefile | 10 + src/nos/sys/sys.c | 1658 + src/nos/sys/unix.h | 1021 + src/nos/sys/unix_banked.S | 94 + src/nos/sys/unix_large.S | 80 + src/nos/turboc/lib/clients.lib | Bin 0 -> 72192 bytes src/nos/turboc/lib/dump.lib | Bin 0 -> 26112 bytes src/nos/turboc/lib/internet.lib | Bin 0 -> 118272 bytes src/nos/turboc/lib/net.lib | Bin 0 -> 92160 bytes src/nos/turboc/lib/netrom.lib | Bin 0 -> 47616 bytes src/nos/turboc/lib/servers.lib | Bin 0 -> 117760 bytes src/nos/turboc/makefile | 202 + src/nos/turboc/net.map | 1 + src/nos/turboc/obj/ahdlc.obj | Bin 0 -> 1509 bytes src/nos/turboc/obj/alloc.obj | Bin 0 -> 5800 bytes src/nos/turboc/obj/arcdump.obj | Bin 0 -> 957 bytes src/nos/turboc/obj/arcnet.obj | Bin 0 -> 1483 bytes src/nos/turboc/obj/arp.obj | Bin 0 -> 3524 bytes src/nos/turboc/obj/arpcmd.obj | Bin 0 -> 3195 bytes src/nos/turboc/obj/arpdump.obj | Bin 0 -> 1658 bytes src/nos/turboc/obj/arphdr.obj | Bin 0 -> 1319 bytes src/nos/turboc/obj/asy.obj | Bin 0 -> 2524 bytes src/nos/turboc/obj/asyvec.obj | Bin 0 -> 1005 bytes src/nos/turboc/obj/audit.obj | Bin 0 -> 1441 bytes src/nos/turboc/obj/ax25.obj | Bin 0 -> 4361 bytes src/nos/turboc/obj/ax25cmd.obj | Bin 0 -> 8076 bytes src/nos/turboc/obj/ax25dump.obj | Bin 0 -> 3262 bytes src/nos/turboc/obj/ax25hdr.obj | Bin 0 -> 1165 bytes src/nos/turboc/obj/ax25mail.obj | Bin 0 -> 1969 bytes src/nos/turboc/obj/ax25subr.obj | Bin 0 -> 2558 bytes src/nos/turboc/obj/ax25user.obj | Bin 0 -> 2393 bytes src/nos/turboc/obj/axheard.obj | Bin 0 -> 1505 bytes src/nos/turboc/obj/axsock.obj | Bin 0 -> 5305 bytes src/nos/turboc/obj/bmutil.obj | Bin 0 -> 12550 bytes src/nos/turboc/obj/bootp.obj | Bin 0 -> 4771 bytes src/nos/turboc/obj/bootpcmd.obj | Bin 0 -> 8416 bytes src/nos/turboc/obj/bootpd.obj | Bin 0 -> 6563 bytes src/nos/turboc/obj/bootpdip.obj | Bin 0 -> 6558 bytes src/nos/turboc/obj/cmdparse.obj | Bin 0 -> 3527 bytes src/nos/turboc/obj/config.obj | Bin 0 -> 8688 bytes src/nos/turboc/obj/crc.obj | Bin 0 -> 1028 bytes src/nos/turboc/obj/devparam.obj | Bin 0 -> 1030 bytes src/nos/turboc/obj/dialer.obj | Bin 0 -> 5966 bytes src/nos/turboc/obj/dirutil.obj | Bin 0 -> 3575 bytes src/nos/turboc/obj/display.obj | Bin 0 -> 7939 bytes src/nos/turboc/obj/dma.obj | Bin 0 -> 2790 bytes src/nos/turboc/obj/domain.obj | Bin 0 -> 18827 bytes src/nos/turboc/obj/domhdr.obj | Bin 0 -> 3036 bytes src/nos/turboc/obj/dos.obj | Bin 0 -> 2081 bytes src/nos/turboc/obj/drsi.obj | Bin 0 -> 10029 bytes src/nos/turboc/obj/drsivec.obj | Bin 0 -> 366 bytes src/nos/turboc/obj/eagle.obj | Bin 0 -> 8641 bytes src/nos/turboc/obj/eaglevec.obj | Bin 0 -> 369 bytes src/nos/turboc/obj/enet.obj | Bin 0 -> 1565 bytes src/nos/turboc/obj/enetdump.obj | Bin 0 -> 1026 bytes src/nos/turboc/obj/files.obj | Bin 0 -> 5218 bytes src/nos/turboc/obj/finger.obj | Bin 0 -> 2089 bytes src/nos/turboc/obj/fingerd.obj | Bin 0 -> 2010 bytes src/nos/turboc/obj/forward.obj | Bin 0 -> 9873 bytes src/nos/turboc/obj/ftpcli.obj | Bin 0 -> 13494 bytes src/nos/turboc/obj/ftpserv.obj | Bin 0 -> 9491 bytes src/nos/turboc/obj/ftpsubr.obj | Bin 0 -> 2271 bytes src/nos/turboc/obj/getopt.obj | Bin 0 -> 1401 bytes src/nos/turboc/obj/hapn.obj | Bin 0 -> 4833 bytes src/nos/turboc/obj/hapnvec.obj | Bin 0 -> 366 bytes src/nos/turboc/obj/hop.obj | Bin 0 -> 5234 bytes src/nos/turboc/obj/hs.obj | Bin 0 -> 6716 bytes src/nos/turboc/obj/hsvec.obj | Bin 0 -> 360 bytes src/nos/turboc/obj/icmp.obj | Bin 0 -> 4016 bytes src/nos/turboc/obj/icmpcmd.obj | Bin 0 -> 1329 bytes src/nos/turboc/obj/icmpdump.obj | Bin 0 -> 1750 bytes src/nos/turboc/obj/icmphdr.obj | Bin 0 -> 1462 bytes src/nos/turboc/obj/icmpmsg.obj | Bin 0 -> 1240 bytes src/nos/turboc/obj/iface.obj | Bin 0 -> 6568 bytes src/nos/turboc/obj/ip.obj | Bin 0 -> 6203 bytes src/nos/turboc/obj/ipcmd.obj | Bin 0 -> 4652 bytes src/nos/turboc/obj/ipdump.obj | Bin 0 -> 2335 bytes src/nos/turboc/obj/iphdr.obj | Bin 0 -> 2090 bytes src/nos/turboc/obj/iproute.obj | Bin 0 -> 6585 bytes src/nos/turboc/obj/ipsock.obj | Bin 0 -> 1881 bytes src/nos/turboc/obj/kernel.obj | Bin 0 -> 4596 bytes src/nos/turboc/obj/kiss.obj | Bin 0 -> 1918 bytes src/nos/turboc/obj/kissdump.obj | Bin 0 -> 1555 bytes src/nos/turboc/obj/ksubr.obj | Bin 0 -> 3137 bytes src/nos/turboc/obj/lapb.obj | Bin 0 -> 6197 bytes src/nos/turboc/obj/lapbtime.obj | Bin 0 -> 1433 bytes src/nos/turboc/obj/locsock.obj | Bin 0 -> 2620 bytes src/nos/turboc/obj/lterm.obj | Bin 0 -> 2412 bytes src/nos/turboc/obj/mailbox.obj | Bin 0 -> 22295 bytes src/nos/turboc/obj/main.obj | Bin 0 -> 11105 bytes src/nos/turboc/obj/mbuf.obj | Bin 0 -> 5654 bytes src/nos/turboc/obj/md5c.obj | Bin 0 -> 8156 bytes src/nos/turboc/obj/misc.obj | Bin 0 -> 1473 bytes src/nos/turboc/obj/n8250.obj | Bin 0 -> 7157 bytes src/nos/turboc/obj/netuser.obj | Bin 0 -> 1153 bytes src/nos/turboc/obj/nntpcli.obj | Bin 0 -> 13089 bytes src/nos/turboc/obj/nr3.obj | Bin 0 -> 8561 bytes src/nos/turboc/obj/nr4.obj | Bin 0 -> 5719 bytes src/nos/turboc/obj/nr4hdr.obj | Bin 0 -> 1673 bytes src/nos/turboc/obj/nr4mail.obj | Bin 0 -> 2948 bytes src/nos/turboc/obj/nr4subr.obj | Bin 0 -> 2119 bytes src/nos/turboc/obj/nr4timer.obj | Bin 0 -> 1535 bytes src/nos/turboc/obj/nr4user.obj | Bin 0 -> 2366 bytes src/nos/turboc/obj/nrcmd.obj | Bin 0 -> 11918 bytes src/nos/turboc/obj/nrdump.obj | Bin 0 -> 2940 bytes src/nos/turboc/obj/nrhdr.obj | Bin 0 -> 1438 bytes src/nos/turboc/obj/nrs.obj | Bin 0 -> 2786 bytes src/nos/turboc/obj/nrsock.obj | Bin 0 -> 4116 bytes src/nos/turboc/obj/pathname.obj | Bin 0 -> 1240 bytes src/nos/turboc/obj/pc.obj | Bin 0 -> 5382 bytes src/nos/turboc/obj/pc100.obj | Bin 0 -> 5605 bytes src/nos/turboc/obj/pc100vec.obj | Bin 0 -> 369 bytes src/nos/turboc/obj/pcgen.obj | Bin 0 -> 2078 bytes src/nos/turboc/obj/pi.obj | Bin 0 -> 13446 bytes src/nos/turboc/obj/ping.obj | Bin 0 -> 3994 bytes src/nos/turboc/obj/pivec.obj | Bin 0 -> 794 bytes src/nos/turboc/obj/pktdrvr.obj | Bin 0 -> 4565 bytes src/nos/turboc/obj/pkvec.obj | Bin 0 -> 504 bytes src/nos/turboc/obj/popcli.obj | Bin 0 -> 5398 bytes src/nos/turboc/obj/popserv.obj | Bin 0 -> 7758 bytes src/nos/turboc/obj/ppp.obj | Bin 0 -> 7424 bytes src/nos/turboc/obj/pppcmd.obj | Bin 0 -> 5959 bytes src/nos/turboc/obj/pppdump.obj | Bin 0 -> 1758 bytes src/nos/turboc/obj/pppfsm.obj | Bin 0 -> 6956 bytes src/nos/turboc/obj/pppipcp.obj | Bin 0 -> 10577 bytes src/nos/turboc/obj/ppplcp.obj | Bin 0 -> 10586 bytes src/nos/turboc/obj/ppppap.obj | Bin 0 -> 8212 bytes src/nos/turboc/obj/random.obj | Bin 0 -> 1386 bytes src/nos/turboc/obj/rewrite.obj | Bin 0 -> 2430 bytes src/nos/turboc/obj/rip.obj | Bin 0 -> 7192 bytes src/nos/turboc/obj/ripcmd.obj | Bin 0 -> 2629 bytes src/nos/turboc/obj/ripdump.obj | Bin 0 -> 1246 bytes src/nos/turboc/obj/sb.obj | Bin 0 -> 9519 bytes src/nos/turboc/obj/sbvec.obj | Bin 0 -> 360 bytes src/nos/turboc/obj/scc.obj | Bin 0 -> 14338 bytes src/nos/turboc/obj/sccvec.obj | Bin 0 -> 667 bytes src/nos/turboc/obj/session.obj | Bin 0 -> 6572 bytes src/nos/turboc/obj/sim.obj | Bin 0 -> 1351 bytes src/nos/turboc/obj/slhc.obj | Bin 0 -> 5051 bytes src/nos/turboc/obj/slhcdump.obj | Bin 0 -> 2218 bytes src/nos/turboc/obj/slip.obj | Bin 0 -> 3142 bytes src/nos/turboc/obj/smisc.obj | Bin 0 -> 6648 bytes src/nos/turboc/obj/smtpcli.obj | Bin 0 -> 10838 bytes src/nos/turboc/obj/smtpserv.obj | Bin 0 -> 12853 bytes src/nos/turboc/obj/sockcmd.obj | Bin 0 -> 1454 bytes src/nos/turboc/obj/socket.obj | Bin 0 -> 5374 bytes src/nos/turboc/obj/sockuser.obj | Bin 0 -> 1444 bytes src/nos/turboc/obj/sockutil.obj | Bin 0 -> 1327 bytes src/nos/turboc/obj/sppp.obj | Bin 0 -> 2090 bytes src/nos/turboc/obj/stdio.obj | Bin 0 -> 12048 bytes src/nos/turboc/obj/stktrace.obj | Bin 0 -> 3015 bytes src/nos/turboc/obj/stopwatc.obj | Bin 0 -> 289 bytes src/nos/turboc/obj/sw.obj | Bin 0 -> 1076 bytes src/nos/turboc/obj/tcpcmd.obj | Bin 0 -> 5622 bytes src/nos/turboc/obj/tcpdump.obj | Bin 0 -> 1818 bytes src/nos/turboc/obj/tcphdr.obj | Bin 0 -> 2339 bytes src/nos/turboc/obj/tcpin.obj | Bin 0 -> 8330 bytes src/nos/turboc/obj/tcpout.obj | Bin 0 -> 2351 bytes src/nos/turboc/obj/tcpsock.obj | Bin 0 -> 4276 bytes src/nos/turboc/obj/tcpsubr.obj | Bin 0 -> 3813 bytes src/nos/turboc/obj/tcptimer.obj | Bin 0 -> 955 bytes src/nos/turboc/obj/tcpuser.obj | Bin 0 -> 3596 bytes src/nos/turboc/obj/telnet.obj | Bin 0 -> 5481 bytes src/nos/turboc/obj/timer.obj | Bin 0 -> 2731 bytes src/nos/turboc/obj/tip.obj | Bin 0 -> 1861 bytes src/nos/turboc/obj/tipmail.obj | Bin 0 -> 4965 bytes src/nos/turboc/obj/trace.obj | Bin 0 -> 4815 bytes src/nos/turboc/obj/ttydriv.obj | Bin 0 -> 1656 bytes src/nos/turboc/obj/ttylink.obj | Bin 0 -> 2259 bytes src/nos/turboc/obj/udp.obj | Bin 0 -> 2720 bytes src/nos/turboc/obj/udpcmd.obj | Bin 0 -> 1220 bytes src/nos/turboc/obj/udpdump.obj | Bin 0 -> 1148 bytes src/nos/turboc/obj/udphdr.obj | Bin 0 -> 1032 bytes src/nos/turboc/obj/udpsock.obj | Bin 0 -> 1805 bytes src/nos/turboc/obj/version.obj | Bin 0 -> 222 bytes src/nos/turboc/obj/view.obj | Bin 0 -> 3369 bytes src/nos/turboc/obj/wildmat.obj | Bin 0 -> 908 bytes src/nos/turboc/obj/z8530.obj | Bin 0 -> 395 bytes src/nos/turboc/turboc.cfg | 6 + src/nos/x86/arcnet.c | 118 + src/nos/x86/dirutil.c | 418 + src/nos/x86/display.c | 846 + src/nos/x86/dma.c | 414 + src/nos/x86/dos.c | 328 + src/nos/x86/drsi.c | 1109 + src/nos/x86/drsivec.s | 33 + src/nos/x86/eagle.c | 839 + src/nos/x86/eaglevec.s | 34 + src/nos/x86/enet.c | 127 + src/nos/x86/escc.c | 1552 + src/nos/x86/esccgen.S | 126 + src/nos/x86/esccvec.S | 232 + src/nos/x86/hapn.c | 499 + src/nos/x86/hapnvec.s | 34 + src/nos/x86/hs.c | 713 + src/nos/x86/hsvec.s | 34 + src/nos/x86/makefile | 30 + src/nos/x86/n8250.c | 848 + src/nos/x86/n8250vec.S | 183 + src/nos/x86/pc.c | 651 + src/nos/x86/pc.lib | Bin 0 -> 128000 bytes src/nos/x86/pc.tl | 35 + src/nos/x86/pc100.c | 508 + src/nos/x86/pc100vec.s | 34 + src/nos/x86/pcgen.s | 893 + src/nos/x86/pi.c | 1435 + src/nos/x86/pivec.s | 178 + src/nos/x86/pktdrvr.c | 491 + src/nos/x86/pktvec.S | 108 + src/nos/x86/random.c | 110 + src/nos/x86/random.i | 436 + src/nos/x86/sb.c | 763 + src/nos/x86/sbvec.s | 34 + src/nos/x86/stktrace.c | 252 + src/nos/x86/stopwatc.s | 45 + src/nos/x86/sw.c | 78 + src/nos/z80/asci.c | 1146 + src/nos/z80/ascivec.S | 113 + src/nos/z80/auto.mk | 28 + src/nos/z80/copyr.S | 372 + src/nos/z80/diag.S | 240 + src/nos/z80/dirutil.c | 494 + src/nos/z80/drsivec.S | 34 + src/nos/z80/eaglevec.S | 34 + src/nos/z80/escc.c | 1736 + src/nos/z80/esccgen.S | 191 + src/nos/z80/esccvec.S | 280 + src/nos/z80/hapnvec.S | 34 + src/nos/z80/hsvec.S | 34 + src/nos/z80/makefile | 10 + src/nos/z80/pc100vec.S | 35 + src/nos/z80/pivec.S | 181 + src/nos/z80/pktvec.S | 109 + src/nos/z80/rand.c | 110 + src/nos/z80/stktrace.c | 267 + src/nos/z80/stopwatc.S | 45 + src/nos/z80/sw.c | 80 + src/nos/z80/z80.c | 801 + src/nos/z80/z80gen.S | 971 + uzi.bat | 4 +- uzipatch.bat | 4 +- 4905 files changed, 860193 insertions(+), 3853 deletions(-) create mode 100644 bak.bat create mode 100644 bin/mkboot%.ucp create mode 100644 doc/GNU gettext utilities - 8 Producing Binary MO Files.htm create mode 100644 doc/ycp_puttext.txt create mode 100644 include/sys/types.h create mode 100644 lib/c0l.rst create mode 100644 relnotes/20030827.txt create mode 100644 src/bin/cp.exe create mode 100644 src/bin/cproto.sh create mode 100644 src/bin/cr.exe create mode 100644 src/bin/echo.exe create mode 100644 src/bin/false.exe create mode 100644 src/bin/foster.exe create mode 100644 src/bin/lib-z80.exe create mode 100644 src/bin/ln.exe create mode 100644 src/bin/loginsh.exe create mode 100644 src/bin/mkdir.exe create mode 100644 src/bin/mklink-b.ba% create mode 100644 src/bin/mklink-l.ba% create mode 100644 src/bin/mknbat-b.ba% create mode 100644 src/bin/mknbat-l.ba% create mode 100644 src/bin/p.pif create mode 100644 src/bin/po2c.exe create mode 100644 src/bin/restool.exe create mode 100644 src/bin/rm.exe create mode 100644 src/bin/rmdir.exe create mode 100644 src/bin/tee.exe create mode 100644 src/bin/test.exe create mode 100644 src/bin/tradcpp.exe create mode 100644 src/bin/true.exe create mode 100644 src/bin/xgettext.sh create mode 100644 src/fsutil/bd.i86 create mode 100644 src/fsutil/bd.lst create mode 100644 src/fsutil/bd.obj create mode 100644 src/fsutil/bd.rst create mode 100644 src/fsutil/bd.s01 create mode 100644 src/fsutil/boot.c% create mode 100644 src/fsutil/devhd.obj create mode 100644 src/fsutil/devio.obj create mode 100644 src/fsutil/devmisc.obj create mode 100644 src/fsutil/devtty.obj create mode 100644 src/fsutil/filesys.obj create mode 100644 src/fsutil/fsck.i86 create mode 100644 src/fsutil/fsck.lst create mode 100644 src/fsutil/fsck.obj create mode 100644 src/fsutil/fsck.rst create mode 100644 src/fsutil/fsck.s01 create mode 100644 src/fsutil/hdasm.obj create mode 100644 src/fsutil/machdep.obj create mode 100644 src/fsutil/main.obj create mode 100644 src/fsutil/mkfs.i86 create mode 100644 src/fsutil/mkfs.lst create mode 100644 src/fsutil/mkfs.obj create mode 100644 src/fsutil/mkfs.rst create mode 100644 src/fsutil/mkfs.s01 create mode 100644 src/fsutil/mklink-b.bat create mode 100644 src/fsutil/mklink-l.bat create mode 100644 src/fsutil/process.obj create mode 100644 src/fsutil/scall1.obj create mode 100644 src/fsutil/scall2.obj create mode 100644 src/fsutil/ucp.obj create mode 100644 src/fsutil/ucpsub.obj create mode 100644 src/fsutil/utils.lst create mode 100644 src/fsutil/utils.obj create mode 100644 src/fsutil/utils.rst create mode 100644 src/fsutil/utils.s01 create mode 100644 src/fsutil/xfs.obj create mode 100644 src/fsutil/xip.obj create mode 100644 src/gboot/gboot.new create mode 100644 src/gboot/gboot.old create mode 100644 src/make.d/arch.mk create mode 100644 src/make.d/host.mk create mode 100644 src/make.d/top_defs.mk create mode 100644 src/make.d/top_gens.mk create mode 100644 src/make.d/z80/arch_defs.mk create mode 100644 src/make.d/z80/arch_gens.mk create mode 100644 src/mkfont/hymem.cpp create mode 100644 src/mkfont/hymem.h create mode 100644 src/mkfont/hymem.obj create mode 100644 src/mkfont/main.c create mode 100644 src/mkfont/main.i create mode 100644 src/mkfont/main.l create mode 100644 src/mkfont/po2c.cpp create mode 100644 src/mkfont/po2c.exe create mode 100644 src/mkfont/po2c.h create mode 100644 src/mkfont/po2c.obj create mode 100644 src/mkfont/restool.cpp create mode 100644 src/mkfont/restool.exe create mode 100644 src/mkfont/restool.obj create mode 100644 src/mkfont/x.bat create mode 100644 src/mkfont/x.h create mode 100644 src/mkfont/x.lib create mode 100644 src/mkfont/x.po create mode 100644 src/mkfont/x.rel create mode 100644 src/mkfont/x.txt create mode 100644 src/mkutil/as-z80/asdata.obj create mode 100644 src/mkutil/as-z80/asexpr.obj create mode 100644 src/mkutil/as-z80/aslex.obj create mode 100644 src/mkutil/as-z80/aslist.obj create mode 100644 src/mkutil/as-z80/asmain.obj create mode 100644 src/mkutil/as-z80/asout.obj create mode 100644 src/mkutil/as-z80/assubr.obj create mode 100644 src/mkutil/as-z80/assym.obj create mode 100644 src/mkutil/as-z80/z80adr.obj create mode 100644 src/mkutil/as-z80/z80ext.obj create mode 100644 src/mkutil/as-z80/z80mch.obj create mode 100644 src/mkutil/as-z80/z80pst.obj create mode 100644 src/mkutil/bin2avr.obj create mode 100644 src/mkutil/bin2c.obj create mode 100644 src/mkutil/cpp/a create mode 100644 src/mkutil/cpp/alloca.c create mode 100644 src/mkutil/cpp/alloca.obj create mode 100644 src/mkutil/cpp/ansidecl.h create mode 100644 src/mkutil/cpp/config.h create mode 100644 src/mkutil/cpp/configargs.h create mode 100644 src/mkutil/cpp/cppdefault.c create mode 100644 src/mkutil/cpp/cppdefault.h create mode 100644 src/mkutil/cpp/cppdefault.obj create mode 100644 src/mkutil/cpp/cpperror.c create mode 100644 src/mkutil/cpp/cpperror.obj create mode 100644 src/mkutil/cpp/cppexp.c create mode 100644 src/mkutil/cpp/cppexp.obj create mode 100644 src/mkutil/cpp/cppfiles.c create mode 100644 src/mkutil/cpp/cppfiles.obj create mode 100644 src/mkutil/cpp/cpphash.c create mode 100644 src/mkutil/cpp/cpphash.h create mode 100644 src/mkutil/cpp/cpphash.obj create mode 100644 src/mkutil/cpp/cppinit.c create mode 100644 src/mkutil/cpp/cppinit.i create mode 100644 src/mkutil/cpp/cppinit.obj create mode 100644 src/mkutil/cpp/cpplex.c create mode 100644 src/mkutil/cpp/cpplex.obj create mode 100644 src/mkutil/cpp/cpplib.c create mode 100644 src/mkutil/cpp/cpplib.h create mode 100644 src/mkutil/cpp/cpplib.obj create mode 100644 src/mkutil/cpp/cppmacro.c create mode 100644 src/mkutil/cpp/cppmacro.obj create mode 100644 src/mkutil/cpp/cppmain.c create mode 100644 src/mkutil/cpp/cppmain.obj create mode 100644 src/mkutil/cpp/cppspec.c create mode 100644 src/mkutil/cpp/cppspec.obj create mode 100644 src/mkutil/cpp/defaults.h create mode 100644 src/mkutil/cpp/except.h create mode 100644 src/mkutil/cpp/flags.h create mode 100644 src/mkutil/cpp/gcc.c create mode 100644 src/mkutil/cpp/gcc.h create mode 100644 src/mkutil/cpp/hashtable.h create mode 100644 src/mkutil/cpp/hex.c create mode 100644 src/mkutil/cpp/hex.obj create mode 100644 src/mkutil/cpp/hwint.h create mode 100644 src/mkutil/cpp/intl.h create mode 100644 src/mkutil/cpp/lbasename.c create mode 100644 src/mkutil/cpp/lbasename.obj create mode 100644 src/mkutil/cpp/libiberty.h create mode 100644 src/mkutil/cpp/line-map.c create mode 100644 src/mkutil/cpp/line-map.h create mode 100644 src/mkutil/cpp/makefile create mode 100644 src/mkutil/cpp/mkdeps.c create mode 100644 src/mkutil/cpp/mkdeps.h create mode 100644 src/mkutil/cpp/mkdeps.obj create mode 100644 src/mkutil/cpp/multilib.h create mode 100644 src/mkutil/cpp/obstack.c create mode 100644 src/mkutil/cpp/obstack.h create mode 100644 src/mkutil/cpp/obstack.obj create mode 100644 src/mkutil/cpp/param.h create mode 100644 src/mkutil/cpp/prefix.h create mode 100644 src/mkutil/cpp/safe-ctype.c create mode 100644 src/mkutil/cpp/safe-ctype.h create mode 100644 src/mkutil/cpp/safe-ctype.obj create mode 100644 src/mkutil/cpp/specs.h create mode 100644 src/mkutil/cpp/splay-tree.h create mode 100644 src/mkutil/cpp/symcat.h create mode 100644 src/mkutil/cpp/system.h create mode 100644 src/mkutil/cpp/version.c create mode 100644 src/mkutil/cpp/version.h create mode 100644 src/mkutil/cpp/version.obj create mode 100644 src/mkutil/cpp/xexit.c create mode 100644 src/mkutil/cpp/xexit.obj create mode 100644 src/mkutil/cpp/xmalloc.c create mode 100644 src/mkutil/cpp/xmalloc.obj create mode 100644 src/mkutil/cpp/xstrdup.c create mode 100644 src/mkutil/cpp/xstrdup.obj create mode 100644 src/mkutil/cpp/xstrerror.c create mode 100644 src/mkutil/cpp/xstrerror.obj create mode 100644 src/mkutil/cr.exe create mode 100644 src/mkutil/cr.obj create mode 100644 src/mkutil/crc.obj create mode 100644 src/mkutil/false.c create mode 100644 src/mkutil/false.exe create mode 100644 src/mkutil/false.obj create mode 100644 src/mkutil/foster.c create mode 100644 src/mkutil/foster.exe create mode 100644 src/mkutil/foster.obj create mode 100644 src/mkutil/ihex2bin.obj create mode 100644 src/mkutil/lib-z80/a.lbr create mode 100644 src/mkutil/lib-z80/a.lib create mode 100644 src/mkutil/lib-z80/a.rel create mode 100644 src/mkutil/lib-z80/a_lib/a.rel create mode 100644 src/mkutil/lib-z80/a_lib/b.rel create mode 100644 src/mkutil/lib-z80/aslib.h create mode 100644 src/mkutil/lib-z80/b.rel create mode 100644 src/mkutil/lib-z80/lbdata.c create mode 100644 src/mkutil/lib-z80/lbdata.obj create mode 100644 src/mkutil/lib-z80/lblex.c create mode 100644 src/mkutil/lib-z80/lblex.obj create mode 100644 src/mkutil/lib-z80/lbmain.c create mode 100644 src/mkutil/lib-z80/lbmain.obj create mode 100644 src/mkutil/lib-z80/lbsym.c create mode 100644 src/mkutil/lib-z80/lbsym.obj create mode 100644 src/mkutil/lib-z80/lib-z80.exe create mode 100644 src/mkutil/lib-z80/lib-z80.lnk create mode 100644 src/mkutil/lib-z80/lib-z80.map create mode 100644 src/mkutil/lib-z80/n.bat create mode 100644 src/mkutil/lib-z80/out/a.lib create mode 100644 src/mkutil/lib-z80/out/a_lib/a.rel create mode 100644 src/mkutil/lib-z80/out/a_lib/b.rel create mode 100644 src/mkutil/lib-z80/out/a_lib/c.rel create mode 100644 src/mkutil/lib-z80/rel/a.rel create mode 100644 src/mkutil/lib-z80/rel/a.rxx create mode 100644 src/mkutil/lib-z80/rel/b.rel create mode 100644 src/mkutil/lib-z80/rel/b.rxx create mode 100644 src/mkutil/lib-z80/t.bat create mode 100644 src/mkutil/lib-z80/x.lbr create mode 100644 src/mkutil/lib-z80/x.lib create mode 100644 src/mkutil/lib-z80/x_lib/a.rel create mode 100644 src/mkutil/lib-z80/x_lib/b.rel create mode 100644 src/mkutil/link-z80/ASLINK.H create mode 100644 src/mkutil/link-z80/intelhex.pdf create mode 100644 src/mkutil/link-z80/lkarea.obj create mode 100644 src/mkutil/link-z80/lkdata.obj create mode 100644 src/mkutil/link-z80/lkeval.obj create mode 100644 src/mkutil/link-z80/lkhead.obj create mode 100644 src/mkutil/link-z80/lklex.obj create mode 100644 src/mkutil/link-z80/lklibr.c% create mode 100644 src/mkutil/link-z80/lklibr.obj create mode 100644 src/mkutil/link-z80/lklist.obj create mode 100644 src/mkutil/link-z80/lkmain.obj create mode 100644 src/mkutil/link-z80/lkout.obj create mode 100644 src/mkutil/link-z80/lkrloc.obj create mode 100644 src/mkutil/link-z80/lksym.obj create mode 100644 src/mkutil/loginsh.c create mode 100644 src/mkutil/loginsh.exe create mode 100644 src/mkutil/loginsh.obj create mode 100644 src/mkutil/make/AUTHORS create mode 100644 src/mkutil/make/COPYING create mode 100644 src/mkutil/make/CVS/Entries create mode 100644 src/mkutil/make/CVS/Entries.Log create mode 100644 src/mkutil/make/CVS/Repository create mode 100644 src/mkutil/make/CVS/Root create mode 100644 src/mkutil/make/ChangeLog create mode 100644 src/mkutil/make/ChangeLog.1 create mode 100644 src/mkutil/make/ChangeLog.2 create mode 100644 src/mkutil/make/INSTALL create mode 100644 src/mkutil/make/Makefile.DOS.template create mode 100644 src/mkutil/make/Makefile.am create mode 100644 src/mkutil/make/Makefile.ami create mode 100644 src/mkutil/make/NEWS create mode 100644 src/mkutil/make/NMakefile create mode 100644 src/mkutil/make/NMakefile.template create mode 100644 src/mkutil/make/README.Amiga create mode 100644 src/mkutil/make/README.DOS.template create mode 100644 src/mkutil/make/README.OS2.template create mode 100644 src/mkutil/make/README.W32.template create mode 100644 src/mkutil/make/README.customs create mode 100644 src/mkutil/make/README.cvs create mode 100644 src/mkutil/make/README.template create mode 100644 src/mkutil/make/SCOPTIONS create mode 100644 src/mkutil/make/SMakefile.template create mode 100644 src/mkutil/make/TODO.private create mode 100644 src/mkutil/make/a create mode 100644 src/mkutil/make/acinclude.m4 create mode 100644 src/mkutil/make/alloca.c create mode 100644 src/mkutil/make/amiga.c create mode 100644 src/mkutil/make/amiga.h create mode 100644 src/mkutil/make/ar.c create mode 100644 src/mkutil/make/arscan.c create mode 100644 src/mkutil/make/build.template create mode 100644 src/mkutil/make/build_w32.bat create mode 100644 src/mkutil/make/commands.c create mode 100644 src/mkutil/make/commands.h create mode 100644 src/mkutil/make/config.ami.template create mode 100644 src/mkutil/make/config.h create mode 100644 src/mkutil/make/config.h-vms.template create mode 100644 src/mkutil/make/config.h.W32 create mode 100644 src/mkutil/make/config.h.W32.template create mode 100644 src/mkutil/make/config/.cvsignore create mode 100644 src/mkutil/make/config/CVS/Entries create mode 100644 src/mkutil/make/config/CVS/Repository create mode 100644 src/mkutil/make/config/CVS/Root create mode 100644 src/mkutil/make/config/ChangeLog create mode 100644 src/mkutil/make/config/Makefile.am create mode 100644 src/mkutil/make/config/dospaths.m4 create mode 100644 src/mkutil/make/configh.dos.template create mode 100644 src/mkutil/make/configure.bat create mode 100644 src/mkutil/make/configure.in create mode 100644 src/mkutil/make/debug.h create mode 100644 src/mkutil/make/default.c create mode 100644 src/mkutil/make/dep.h create mode 100644 src/mkutil/make/dir.c create mode 100644 src/mkutil/make/doc/.cvsignore create mode 100644 src/mkutil/make/doc/CVS/Entries create mode 100644 src/mkutil/make/doc/CVS/Repository create mode 100644 src/mkutil/make/doc/CVS/Root create mode 100644 src/mkutil/make/doc/Makefile.am create mode 100644 src/mkutil/make/doc/make.texi create mode 100644 src/mkutil/make/dosbuild.bat create mode 100644 src/mkutil/make/expand.c create mode 100644 src/mkutil/make/file.c create mode 100644 src/mkutil/make/filedef.h create mode 100644 src/mkutil/make/function.c create mode 100644 src/mkutil/make/function.c% create mode 100644 src/mkutil/make/getloadavg.c create mode 100644 src/mkutil/make/getopt.c create mode 100644 src/mkutil/make/getopt.h create mode 100644 src/mkutil/make/getopt1.c create mode 100644 src/mkutil/make/gettext.h create mode 100644 src/mkutil/make/glob/.cvsignore create mode 100644 src/mkutil/make/glob/COPYING.LIB create mode 100644 src/mkutil/make/glob/CVS/Entries create mode 100644 src/mkutil/make/glob/CVS/Repository create mode 100644 src/mkutil/make/glob/CVS/Root create mode 100644 src/mkutil/make/glob/ChangeLog create mode 100644 src/mkutil/make/glob/Makefile.am create mode 100644 src/mkutil/make/glob/Makefile.ami create mode 100644 src/mkutil/make/glob/SCOPTIONS create mode 100644 src/mkutil/make/glob/SMakefile create mode 100644 src/mkutil/make/glob/configure.bat create mode 100644 src/mkutil/make/glob/fnmatch.c create mode 100644 src/mkutil/make/glob/fnmatch.h create mode 100644 src/mkutil/make/glob/glob.c create mode 100644 src/mkutil/make/glob/glob.h create mode 100644 src/mkutil/make/hash.c create mode 100644 src/mkutil/make/hash.h create mode 100644 src/mkutil/make/i18n/CVS/Entries create mode 100644 src/mkutil/make/i18n/CVS/Repository create mode 100644 src/mkutil/make/i18n/CVS/Root create mode 100644 src/mkutil/make/implicit.c create mode 100644 src/mkutil/make/job.c create mode 100644 src/mkutil/make/job.h create mode 100644 src/mkutil/make/main.c create mode 100644 src/mkutil/make/maintMakefile create mode 100644 src/mkutil/make/make.1 create mode 100644 src/mkutil/make/make.h create mode 100644 src/mkutil/make/make.lnk create mode 100644 src/mkutil/make/makefile.com create mode 100644 src/mkutil/make/makefile.vms create mode 100644 src/mkutil/make/misc.c create mode 100644 src/mkutil/make/n.bat create mode 100644 src/mkutil/make/po/.cvsignore create mode 100644 src/mkutil/make/po/CVS/Entries create mode 100644 src/mkutil/make/po/CVS/Repository create mode 100644 src/mkutil/make/po/CVS/Root create mode 100644 src/mkutil/make/po/ChangeLog create mode 100644 src/mkutil/make/po/LINGUAS create mode 100644 src/mkutil/make/po/Makevars create mode 100644 src/mkutil/make/po/POTFILES.in create mode 100644 src/mkutil/make/read.c create mode 100644 src/mkutil/make/readme.vms create mode 100644 src/mkutil/make/remake.c create mode 100644 src/mkutil/make/remote-cstms.c create mode 100644 src/mkutil/make/remote-stub.c create mode 100644 src/mkutil/make/rule.c create mode 100644 src/mkutil/make/rule.h create mode 100644 src/mkutil/make/signame.c create mode 100644 src/mkutil/make/subproc.bat create mode 100644 src/mkutil/make/tests/.cvsignore create mode 100644 src/mkutil/make/tests/COPYING create mode 100644 src/mkutil/make/tests/CVS/Entries create mode 100644 src/mkutil/make/tests/CVS/Entries.Log create mode 100644 src/mkutil/make/tests/CVS/Repository create mode 100644 src/mkutil/make/tests/CVS/Root create mode 100644 src/mkutil/make/tests/ChangeLog create mode 100644 src/mkutil/make/tests/NEWS create mode 100644 src/mkutil/make/tests/README create mode 100644 src/mkutil/make/tests/mkshadow create mode 100644 src/mkutil/make/tests/run_make_tests create mode 100644 src/mkutil/make/tests/run_make_tests.pl create mode 100644 src/mkutil/make/tests/scripts/CVS/Entries create mode 100644 src/mkutil/make/tests/scripts/CVS/Entries.Log create mode 100644 src/mkutil/make/tests/scripts/CVS/Repository create mode 100644 src/mkutil/make/tests/scripts/CVS/Root create mode 100644 src/mkutil/make/tests/scripts/features/CVS/Entries create mode 100644 src/mkutil/make/tests/scripts/features/CVS/Repository create mode 100644 src/mkutil/make/tests/scripts/features/CVS/Root create mode 100644 src/mkutil/make/tests/scripts/features/comments create mode 100644 src/mkutil/make/tests/scripts/features/conditionals create mode 100644 src/mkutil/make/tests/scripts/features/default_names create mode 100644 src/mkutil/make/tests/scripts/features/double_colon create mode 100644 src/mkutil/make/tests/scripts/features/echoing create mode 100644 src/mkutil/make/tests/scripts/features/errors create mode 100644 src/mkutil/make/tests/scripts/features/escape create mode 100644 src/mkutil/make/tests/scripts/features/export create mode 100644 src/mkutil/make/tests/scripts/features/include create mode 100644 src/mkutil/make/tests/scripts/features/mult_rules create mode 100644 src/mkutil/make/tests/scripts/features/mult_targets create mode 100644 src/mkutil/make/tests/scripts/features/order_only create mode 100644 src/mkutil/make/tests/scripts/features/override create mode 100644 src/mkutil/make/tests/scripts/features/parallelism create mode 100644 src/mkutil/make/tests/scripts/features/patspecific_vars create mode 100644 src/mkutil/make/tests/scripts/features/quoting create mode 100644 src/mkutil/make/tests/scripts/features/recursion create mode 100644 src/mkutil/make/tests/scripts/features/reinvoke create mode 100644 src/mkutil/make/tests/scripts/features/statipattrules create mode 100644 src/mkutil/make/tests/scripts/features/targetvars create mode 100644 src/mkutil/make/tests/scripts/features/varnesting create mode 100644 src/mkutil/make/tests/scripts/features/vpath create mode 100644 src/mkutil/make/tests/scripts/features/vpath2 create mode 100644 src/mkutil/make/tests/scripts/features/vpathgpath create mode 100644 src/mkutil/make/tests/scripts/features/vpathplus create mode 100644 src/mkutil/make/tests/scripts/functions/CVS/Entries create mode 100644 src/mkutil/make/tests/scripts/functions/CVS/Repository create mode 100644 src/mkutil/make/tests/scripts/functions/CVS/Root create mode 100644 src/mkutil/make/tests/scripts/functions/addprefix create mode 100644 src/mkutil/make/tests/scripts/functions/addsuffix create mode 100644 src/mkutil/make/tests/scripts/functions/basename create mode 100644 src/mkutil/make/tests/scripts/functions/call create mode 100644 src/mkutil/make/tests/scripts/functions/dir create mode 100644 src/mkutil/make/tests/scripts/functions/error create mode 100644 src/mkutil/make/tests/scripts/functions/eval create mode 100644 src/mkutil/make/tests/scripts/functions/filter-out create mode 100644 src/mkutil/make/tests/scripts/functions/findstring create mode 100644 src/mkutil/make/tests/scripts/functions/foreach create mode 100644 src/mkutil/make/tests/scripts/functions/if create mode 100644 src/mkutil/make/tests/scripts/functions/join create mode 100644 src/mkutil/make/tests/scripts/functions/notdir create mode 100644 src/mkutil/make/tests/scripts/functions/origin create mode 100644 src/mkutil/make/tests/scripts/functions/sort create mode 100644 src/mkutil/make/tests/scripts/functions/strip create mode 100644 src/mkutil/make/tests/scripts/functions/substitution create mode 100644 src/mkutil/make/tests/scripts/functions/suffix create mode 100644 src/mkutil/make/tests/scripts/functions/value create mode 100644 src/mkutil/make/tests/scripts/functions/warning create mode 100644 src/mkutil/make/tests/scripts/functions/wildcard create mode 100644 src/mkutil/make/tests/scripts/functions/word create mode 100644 src/mkutil/make/tests/scripts/misc/CVS/Entries create mode 100644 src/mkutil/make/tests/scripts/misc/CVS/Repository create mode 100644 src/mkutil/make/tests/scripts/misc/CVS/Root create mode 100644 src/mkutil/make/tests/scripts/misc/general1 create mode 100644 src/mkutil/make/tests/scripts/misc/general2 create mode 100644 src/mkutil/make/tests/scripts/misc/general3 create mode 100644 src/mkutil/make/tests/scripts/misc/general4 create mode 100644 src/mkutil/make/tests/scripts/options/CVS/Entries create mode 100644 src/mkutil/make/tests/scripts/options/CVS/Repository create mode 100644 src/mkutil/make/tests/scripts/options/CVS/Root create mode 100644 src/mkutil/make/tests/scripts/options/dash-B create mode 100644 src/mkutil/make/tests/scripts/options/dash-C create mode 100644 src/mkutil/make/tests/scripts/options/dash-I create mode 100644 src/mkutil/make/tests/scripts/options/dash-e create mode 100644 src/mkutil/make/tests/scripts/options/dash-f create mode 100644 src/mkutil/make/tests/scripts/options/dash-k create mode 100644 src/mkutil/make/tests/scripts/options/dash-l create mode 100644 src/mkutil/make/tests/scripts/options/dash-n create mode 100644 src/mkutil/make/tests/scripts/options/dash-q create mode 100644 src/mkutil/make/tests/scripts/options/dash-t create mode 100644 src/mkutil/make/tests/scripts/options/general create mode 100644 src/mkutil/make/tests/scripts/targets/CVS/Entries create mode 100644 src/mkutil/make/tests/scripts/targets/CVS/Repository create mode 100644 src/mkutil/make/tests/scripts/targets/CVS/Root create mode 100644 src/mkutil/make/tests/scripts/targets/DEFAULT create mode 100644 src/mkutil/make/tests/scripts/targets/FORCE create mode 100644 src/mkutil/make/tests/scripts/targets/INTERMEDIATE create mode 100644 src/mkutil/make/tests/scripts/targets/PHONY create mode 100644 src/mkutil/make/tests/scripts/targets/SECONDARY create mode 100644 src/mkutil/make/tests/scripts/targets/SILENT create mode 100644 src/mkutil/make/tests/scripts/targets/clean create mode 100644 src/mkutil/make/tests/scripts/test_template create mode 100644 src/mkutil/make/tests/scripts/variables/CURDIR create mode 100644 src/mkutil/make/tests/scripts/variables/CVS/Entries create mode 100644 src/mkutil/make/tests/scripts/variables/CVS/Repository create mode 100644 src/mkutil/make/tests/scripts/variables/CVS/Root create mode 100644 src/mkutil/make/tests/scripts/variables/MAKE create mode 100644 src/mkutil/make/tests/scripts/variables/MAKECMDGOALS create mode 100644 src/mkutil/make/tests/scripts/variables/MAKEFILES create mode 100644 src/mkutil/make/tests/scripts/variables/MAKEFILE_LIST create mode 100644 src/mkutil/make/tests/scripts/variables/MAKELEVEL create mode 100644 src/mkutil/make/tests/scripts/variables/automatic create mode 100644 src/mkutil/make/tests/scripts/variables/flavors create mode 100644 src/mkutil/make/tests/scripts/variables/special create mode 100644 src/mkutil/make/tests/test_driver.pl create mode 100644 src/mkutil/make/variable.c create mode 100644 src/mkutil/make/variable.h create mode 100644 src/mkutil/make/version.c create mode 100644 src/mkutil/make/vmsdir.h create mode 100644 src/mkutil/make/vmsfunctions.c create mode 100644 src/mkutil/make/vmsify.c create mode 100644 src/mkutil/make/vpath.c create mode 100644 src/mkutil/make/w32/CVS/Entries create mode 100644 src/mkutil/make/w32/CVS/Entries.Log create mode 100644 src/mkutil/make/w32/CVS/Repository create mode 100644 src/mkutil/make/w32/CVS/Root create mode 100644 src/mkutil/make/w32/compat/CVS/Entries create mode 100644 src/mkutil/make/w32/compat/CVS/Repository create mode 100644 src/mkutil/make/w32/compat/CVS/Root create mode 100644 src/mkutil/make/w32/compat/dirent.c create mode 100644 src/mkutil/make/w32/include/CVS/Entries create mode 100644 src/mkutil/make/w32/include/CVS/Repository create mode 100644 src/mkutil/make/w32/include/CVS/Root create mode 100644 src/mkutil/make/w32/include/dirent.h create mode 100644 src/mkutil/make/w32/include/pathstuff.h create mode 100644 src/mkutil/make/w32/include/sub_proc.h create mode 100644 src/mkutil/make/w32/include/w32err.h create mode 100644 src/mkutil/make/w32/pathstuff.c create mode 100644 src/mkutil/make/w32/subproc/CVS/Entries create mode 100644 src/mkutil/make/w32/subproc/CVS/Repository create mode 100644 src/mkutil/make/w32/subproc/CVS/Root create mode 100644 src/mkutil/make/w32/subproc/NMakefile create mode 100644 src/mkutil/make/w32/subproc/build.bat create mode 100644 src/mkutil/make/w32/subproc/misc.c create mode 100644 src/mkutil/make/w32/subproc/proc.h create mode 100644 src/mkutil/make/w32/subproc/sub_proc.c create mode 100644 src/mkutil/make/w32/subproc/w32err.c create mode 100644 src/mkutil/touch.obj create mode 100644 src/mkutil/tradcpp/alloca.c create mode 100644 src/mkutil/tradcpp/alloca.obj create mode 100644 src/mkutil/tradcpp/ansidecl.h create mode 100644 src/mkutil/tradcpp/config.h create mode 100644 src/mkutil/tradcpp/cppdefault.c create mode 100644 src/mkutil/tradcpp/cppdefault.h create mode 100644 src/mkutil/tradcpp/cppdefault.obj create mode 100644 src/mkutil/tradcpp/defaults.h create mode 100644 src/mkutil/tradcpp/hex.c create mode 100644 src/mkutil/tradcpp/hex.obj create mode 100644 src/mkutil/tradcpp/hwint.h create mode 100644 src/mkutil/tradcpp/intl.h create mode 100644 src/mkutil/tradcpp/lbasename.c create mode 100644 src/mkutil/tradcpp/lbasename.obj create mode 100644 src/mkutil/tradcpp/libiberty.h create mode 100644 src/mkutil/tradcpp/makefile create mode 100644 src/mkutil/tradcpp/mkdeps.c create mode 100644 src/mkutil/tradcpp/mkdeps.h create mode 100644 src/mkutil/tradcpp/mkdeps.obj create mode 100644 src/mkutil/tradcpp/param.h create mode 100644 src/mkutil/tradcpp/safe-ctype.c create mode 100644 src/mkutil/tradcpp/safe-ctype.h create mode 100644 src/mkutil/tradcpp/safe-ctype.obj create mode 100644 src/mkutil/tradcpp/symcat.h create mode 100644 src/mkutil/tradcpp/system.h create mode 100644 src/mkutil/tradcpp/tradcif.c create mode 100644 src/mkutil/tradcpp/tradcif.obj create mode 100644 src/mkutil/tradcpp/tradcif.y create mode 100644 src/mkutil/tradcpp/tradcpp.c create mode 100644 src/mkutil/tradcpp/tradcpp.exe create mode 100644 src/mkutil/tradcpp/tradcpp.h create mode 100644 src/mkutil/tradcpp/tradcpp.obj create mode 100644 src/mkutil/tradcpp/version.c create mode 100644 src/mkutil/tradcpp/version.h create mode 100644 src/mkutil/tradcpp/version.obj create mode 100644 src/mkutil/tradcpp/xexit.c create mode 100644 src/mkutil/tradcpp/xexit.obj create mode 100644 src/mkutil/tradcpp/xmalloc.c create mode 100644 src/mkutil/tradcpp/xmalloc.obj create mode 100644 src/mkutil/tradcpp/xstrdup.c create mode 100644 src/mkutil/tradcpp/xstrdup.obj create mode 100644 src/mkutil/true.c create mode 100644 src/mkutil/true.exe create mode 100644 src/mkutil/true.obj create mode 100644 src/mkutil/w32munge.c create mode 100644 src/nos/auto.mk create mode 100644 src/nos/ax25/auto.mk create mode 100644 src/nos/ax25/ax25.c create mode 100644 src/nos/ax25/ax25cmd.c create mode 100644 src/nos/ax25/ax25hdr.c create mode 100644 src/nos/ax25/ax25mail.c create mode 100644 src/nos/ax25/ax25subr.c create mode 100644 src/nos/ax25/ax25user.c create mode 100644 src/nos/ax25/axheard.c create mode 100644 src/nos/ax25/axsock.c create mode 100644 src/nos/ax25/kiss.c create mode 100644 src/nos/ax25/lapb.c create mode 100644 src/nos/ax25/lapbtime.c create mode 100644 src/nos/ax25/makefile create mode 100644 src/nos/bin/boot.bin create mode 100644 src/nos/bin/net.bin create mode 100644 src/nos/c.sh create mode 100644 src/nos/clean.sh create mode 100644 src/nos/clients/auto.mk create mode 100644 src/nos/clients/bootp.c create mode 100644 src/nos/clients/finger.c create mode 100644 src/nos/clients/ftpcli.c create mode 100644 src/nos/clients/lterm.c create mode 100644 src/nos/clients/makefile create mode 100644 src/nos/clients/nntpcli.c create mode 100644 src/nos/clients/popcli.c create mode 100644 src/nos/clients/smtpcli.c create mode 100644 src/nos/clients/telnet.c create mode 100644 src/nos/clients/tip.c create mode 100644 src/nos/crt/!readme! create mode 100644 src/nos/crt/N9.PMM create mode 100644 src/nos/crt/abort.c create mode 100644 src/nos/crt/alloca-l.h create mode 100644 src/nos/crt/alloca.c create mode 100644 src/nos/crt/asctime.c create mode 100644 src/nos/crt/assert.c create mode 100644 src/nos/crt/atexit.c create mode 100644 src/nos/crt/atoi.c create mode 100644 src/nos/crt/atol.c create mode 100644 src/nos/crt/bsearch.c create mode 100644 src/nos/crt/build-b.ban create mode 100644 src/nos/crt/build-l.ban create mode 100644 src/nos/crt/calloc.c create mode 100644 src/nos/crt/clock.c create mode 100644 src/nos/crt/closedir.c create mode 100644 src/nos/crt/convtime.c create mode 100644 src/nos/crt/crt0b.S create mode 100644 src/nos/crt/crt0l.S create mode 100644 src/nos/crt/crt_banked.lbr create mode 100644 src/nos/crt/crt_large.lbr create mode 100644 src/nos/crt/crypt.c create mode 100644 src/nos/crt/ctime.c create mode 100644 src/nos/crt/ctype.c create mode 100644 src/nos/crt/cvt.h create mode 100644 src/nos/crt/difftime.c create mode 100644 src/nos/crt/environ.h create mode 100644 src/nos/crt/error.c create mode 100644 src/nos/crt/etime.c create mode 100644 src/nos/crt/exec.h create mode 100644 src/nos/crt/execl.c create mode 100644 src/nos/crt/execle.c create mode 100644 src/nos/crt/execlp.c create mode 100644 src/nos/crt/execlpe.c create mode 100644 src/nos/crt/exect.c create mode 100644 src/nos/crt/execv.c create mode 100644 src/nos/crt/execvp.c create mode 100644 src/nos/crt/execvpe.c create mode 100644 src/nos/crt/exit.c create mode 100644 src/nos/crt/fclose.c create mode 100644 src/nos/crt/fflush.c create mode 100644 src/nos/crt/fgetc.c create mode 100644 src/nos/crt/fgetgren.c create mode 100644 src/nos/crt/fgetpwen.c create mode 100644 src/nos/crt/fgets.c create mode 100644 src/nos/crt/fopen.c create mode 100644 src/nos/crt/fprintf.c create mode 100644 src/nos/crt/fputc.c create mode 100644 src/nos/crt/fputs.c create mode 100644 src/nos/crt/fputter.c create mode 100644 src/nos/crt/fread.c create mode 100644 src/nos/crt/free.c create mode 100644 src/nos/crt/free.c$ create mode 100644 src/nos/crt/fscanf.c create mode 100644 src/nos/crt/ftell.c create mode 100644 src/nos/crt/fwrite.c create mode 100644 src/nos/crt/getcwd.c create mode 100644 src/nos/crt/getenv.c create mode 100644 src/nos/crt/getgrent.c create mode 100644 src/nos/crt/getgrgid.c create mode 100644 src/nos/crt/getgrnam.c create mode 100644 src/nos/crt/getopt.c create mode 100644 src/nos/crt/getpass.c create mode 100644 src/nos/crt/getpw.c create mode 100644 src/nos/crt/getpwent.c create mode 100644 src/nos/crt/getpwnam.c create mode 100644 src/nos/crt/getpwuid.c create mode 100644 src/nos/crt/gets.c create mode 100644 src/nos/crt/gmtime.c create mode 100644 src/nos/crt/grp-l.h create mode 100644 src/nos/crt/initgrup.c create mode 100644 src/nos/crt/io64180.inc create mode 100644 src/nos/crt/isatty.c create mode 100644 src/nos/crt/itoa.c create mode 100644 src/nos/crt/liberror.src create mode 100644 src/nos/crt/localtim.c create mode 100644 src/nos/crt/longjmpb.S create mode 100644 src/nos/crt/longjmpl.S create mode 100644 src/nos/crt/lsearch.c create mode 100644 src/nos/crt/lseek.c$ create mode 100644 src/nos/crt/lstat.c create mode 100644 src/nos/crt/ltoa.c create mode 100644 src/nos/crt/ltostr.c create mode 100644 src/nos/crt/malloc-l.h create mode 100644 src/nos/crt/malloc-l.h$ create mode 100644 src/nos/crt/malloc.c create mode 100644 src/nos/crt/malloc.c$ create mode 100644 src/nos/crt/mem-l.h create mode 100644 src/nos/crt/memccpy.c create mode 100644 src/nos/crt/memchr.c create mode 100644 src/nos/crt/memcmp.c create mode 100644 src/nos/crt/memcpy.c create mode 100644 src/nos/crt/memmove.c create mode 100644 src/nos/crt/memset.c create mode 100644 src/nos/crt/mkdir.c create mode 100644 src/nos/crt/mktime.c create mode 100644 src/nos/crt/n.bat create mode 100644 src/nos/crt/n.baty create mode 100644 src/nos/crt/n.xlb create mode 100644 src/nos/crt/opendir.c create mode 100644 src/nos/crt/passwd.h create mode 100644 src/nos/crt/perror.asm create mode 100644 src/nos/crt/perror.c create mode 100644 src/nos/crt/popen.c create mode 100644 src/nos/crt/printf.c create mode 100644 src/nos/crt/printf.h create mode 100644 src/nos/crt/putenv.c create mode 100644 src/nos/crt/putgetch.c create mode 100644 src/nos/crt/putpwent.c create mode 100644 src/nos/crt/qsort.c create mode 100644 src/nos/crt/rand.c create mode 100644 src/nos/crt/readdir.c create mode 100644 src/nos/crt/readlink.c create mode 100644 src/nos/crt/realloc.c create mode 100644 src/nos/crt/realloc.c$ create mode 100644 src/nos/crt/regerror.c create mode 100644 src/nos/crt/regexp.c create mode 100644 src/nos/crt/regsub.c create mode 100644 src/nos/crt/rename.c create mode 100644 src/nos/crt/rewind.c create mode 100644 src/nos/crt/rewindir.c create mode 100644 src/nos/crt/rmdir.c create mode 100644 src/nos/crt/scanf.c create mode 100644 src/nos/crt/scanf.h create mode 100644 src/nos/crt/setbuff.c create mode 100644 src/nos/crt/setenv.c create mode 100644 src/nos/crt/setgrent.c create mode 100644 src/nos/crt/setjmp.c$ create mode 100644 src/nos/crt/setjmp.msx create mode 100644 src/nos/crt/setjmpb.S create mode 100644 src/nos/crt/setjmpl.S create mode 100644 src/nos/crt/setpwent.c create mode 100644 src/nos/crt/setvbuff.c create mode 100644 src/nos/crt/sleep.c create mode 100644 src/nos/crt/sprintf.c create mode 100644 src/nos/crt/sputter.c create mode 100644 src/nos/crt/sscanf.c create mode 100644 src/nos/crt/stdio-l.h create mode 100644 src/nos/crt/stdio0.c create mode 100644 src/nos/crt/strcat.c create mode 100644 src/nos/crt/strchr.c create mode 100644 src/nos/crt/strcmp.c create mode 100644 src/nos/crt/strcpy.c create mode 100644 src/nos/crt/strcspn.c create mode 100644 src/nos/crt/strdup.c create mode 100644 src/nos/crt/stricmp.c create mode 100644 src/nos/crt/string-l.h create mode 100644 src/nos/crt/strlen.c create mode 100644 src/nos/crt/strncat.c create mode 100644 src/nos/crt/strncmp.c create mode 100644 src/nos/crt/strncpy.c create mode 100644 src/nos/crt/strnicmp.c create mode 100644 src/nos/crt/strpbrk.c create mode 100644 src/nos/crt/strrchr.c create mode 100644 src/nos/crt/strsep.c create mode 100644 src/nos/crt/strspn.c create mode 100644 src/nos/crt/strstr.c create mode 100644 src/nos/crt/strtod.c create mode 100644 src/nos/crt/strtok.c create mode 100644 src/nos/crt/strtol.c create mode 100644 src/nos/crt/strtoul.c create mode 100644 src/nos/crt/system.c create mode 100644 src/nos/crt/termcap.c create mode 100644 src/nos/crt/termcap.src create mode 100644 src/nos/crt/time-l.h create mode 100644 src/nos/crt/tmpnam.c create mode 100644 src/nos/crt/tparam.c create mode 100644 src/nos/crt/ttyname.c create mode 100644 src/nos/crt/tzset.c create mode 100644 src/nos/crt/ultoa.c create mode 100644 src/nos/crt/ungetc.c create mode 100644 src/nos/crt/unix.h$ create mode 100644 src/nos/crt/utsname.c create mode 100644 src/nos/crt/vfprintf.c create mode 100644 src/nos/crt/vfscanf.c create mode 100644 src/nos/crt/vprinter.c create mode 100644 src/nos/crt/vprintf.c create mode 100644 src/nos/crt/vscanf.c create mode 100644 src/nos/crt/vsprintf.c create mode 100644 src/nos/crt/vsscanf.c create mode 100644 src/nos/crt/xitoa.c create mode 100644 src/nos/crt/xltoa.c create mode 100644 src/nos/doc/bmexe332.zip create mode 100644 src/nos/doc/bmexe332/BM.DOC create mode 100644 src/nos/doc/bmexe332/BM.EXE create mode 100644 src/nos/doc/bmexe332/BM.MM create mode 100644 src/nos/doc/bmpgp01.zip create mode 100644 src/nos/doc/bmpgp01/BM.DOC create mode 100644 src/nos/doc/bmpgp01/BM.EXE create mode 100644 src/nos/doc/bmpgp01/BM.H create mode 100644 src/nos/doc/bmpgp01/BM.RC create mode 100644 src/nos/doc/bmpgp01/BMUTIL.C create mode 100644 src/nos/doc/bmpgp01/FILE_ID.DIZ create mode 100644 src/nos/doc/bmpgp01/GETOPT.C create mode 100644 src/nos/doc/bmpgp01/HEADER.C create mode 100644 src/nos/doc/bmpgp01/HEADER.H create mode 100644 src/nos/doc/bmpgp01/MAIN.C create mode 100644 src/nos/doc/bmpgp01/MAKEFILE create mode 100644 src/nos/doc/bmpgp01/PC.C create mode 100644 src/nos/doc/bmpgp01/PGP.C create mode 100644 src/nos/doc/bmpgp01/SEND.C create mode 100644 src/nos/doc/bmpgp01/SIGNATUR.SIG create mode 100644 src/nos/doc/bmpgp01/WILDMAT.C create mode 100644 src/nos/doc/intronos.zip create mode 100644 src/nos/doc/intronos/INTRONOS.TXT create mode 100644 src/nos/doc/intronos/README.NOW create mode 100644 src/nos/doc/ka9qbgn.zip create mode 100644 src/nos/doc/ka9qbgn/BM.TXT create mode 100644 src/nos/doc/ka9qbgn/CHANGES.LOG create mode 100644 src/nos/doc/ka9qbgn/IPAX25.TXT create mode 100644 src/nos/doc/ka9qbgn/KISS.TXT create mode 100644 src/nos/doc/ka9qbgn/MAILBOX.TXT create mode 100644 src/nos/doc/ka9qbgn/NEWUSER.TXT create mode 100644 src/nos/doc/ka9qbgn/NOSCMD16.TXT create mode 100644 src/nos/doc/ka9qbgn/NRMAN.TXT create mode 100644 src/nos/doc/ka9qbgn/README create mode 100644 src/nos/doc/ka9qbgn/RSPF.TXT create mode 100644 src/nos/doc/ka9qbgn/TUTORIAL.TXT create mode 100644 src/nos/doc/ka9qbgn/USERMAN.TXT create mode 100644 src/nos/doc/man_9106.zip create mode 100644 src/nos/doc/man_9106/KA9QNOS.TXT create mode 100644 src/nos/doc/rurtcp.zip create mode 100644 src/nos/doc/rurtcp/FILE_ID.DIZ create mode 100644 src/nos/doc/rurtcp/RURTCPP.ZIP create mode 100644 src/nos/doc/rurtcp/rurtcpp/RURTCP.EXE create mode 100644 src/nos/drivers/arcnet.c create mode 100644 src/nos/drivers/dma.c create mode 100644 src/nos/drivers/drsi.c create mode 100644 src/nos/drivers/eagle.c create mode 100644 src/nos/drivers/enet.c create mode 100644 src/nos/drivers/hapn.c create mode 100644 src/nos/drivers/hs.c create mode 100644 src/nos/drivers/pc100.c create mode 100644 src/nos/drivers/pi.c create mode 100644 src/nos/drivers/pktdrvr.c create mode 100644 src/nos/dump/arcdump.c create mode 100644 src/nos/dump/arpdump.c create mode 100644 src/nos/dump/auto.mk create mode 100644 src/nos/dump/ax25dump.c create mode 100644 src/nos/dump/enetdump.c create mode 100644 src/nos/dump/icmpdump.c create mode 100644 src/nos/dump/ipdump.c create mode 100644 src/nos/dump/kissdump.c create mode 100644 src/nos/dump/makefile create mode 100644 src/nos/dump/nrdump.c create mode 100644 src/nos/dump/ripdump.c create mode 100644 src/nos/dump/tcpdump.c create mode 100644 src/nos/dump/trace.c create mode 100644 src/nos/dump/udpdump.c create mode 100644 src/nos/filesys/auto.mk create mode 100644 src/nos/filesys/devio.c create mode 100644 src/nos/filesys/execve.c create mode 100644 src/nos/filesys/filesys.c create mode 100644 src/nos/filesys/makefile create mode 100644 src/nos/filesys/maxmin.c create mode 100644 src/nos/filesys/process.c create mode 100644 src/nos/filesys/rtc.c create mode 100644 src/nos/filesys/scall1.c create mode 100644 src/nos/filesys/scall2.c create mode 100644 src/nos/filesys/systrace.c create mode 100644 src/nos/filesys/usrmem.c create mode 100644 src/nos/filesys/xfs.c create mode 100644 src/nos/filesys/xip.c create mode 100644 src/nos/g.sh create mode 100644 src/nos/gboot/build.ban create mode 100644 src/nos/gboot/checksum.dat create mode 100644 src/nos/gboot/clears.inc create mode 100644 src/nos/gboot/copyr.inc create mode 100644 src/nos/gboot/diag.inc create mode 100644 src/nos/gboot/gboot.S create mode 100644 src/nos/gboot/gboot.lnk create mode 100644 src/nos/gboot/gboot.sav create mode 100644 src/nos/gboot/io64180.inc create mode 100644 src/nos/gboot/n.ba% create mode 100644 src/nos/gboot/n.sh create mode 100644 src/nos/gboot/s.sh create mode 100644 src/nos/gboot/uzboot.asm create mode 100644 src/nos/gboot/uzboot.lnk create mode 100644 src/nos/gboot/uzdata.asm create mode 100644 src/nos/gboot/uzfile.asm create mode 100644 src/nos/gboot/uzmain.asm create mode 100644 src/nos/iar/BANKCALLDIRECT!.S create mode 100644 src/nos/iar/BANKCALLDIRECT.S create mode 100644 src/nos/iar/BANKCALLDIRECTEXAF!.S create mode 100644 src/nos/iar/BANKCALLDIRECTEXAF.S create mode 100644 src/nos/iar/BANKLEAVE32!.S create mode 100644 src/nos/iar/BANKLEAVE32.S create mode 100644 src/nos/iar/BANKLEAVEDIRECT!.S create mode 100644 src/nos/iar/BANKLEAVEDIRECT.S create mode 100644 src/nos/iar/BFCANDASG.S create mode 100644 src/nos/iar/BFCLSHASG.S create mode 100644 src/nos/iar/BFCMULASG.S create mode 100644 src/nos/iar/BFCORASG.S create mode 100644 src/nos/iar/BFCRETVAL.S create mode 100644 src/nos/iar/BFCSHIFTUP.S create mode 100644 src/nos/iar/BFCXORASG.S create mode 100644 src/nos/iar/BFMASKEDLD.S create mode 100644 src/nos/iar/BFMASKEDST.S create mode 100644 src/nos/iar/BFSADDASG.S create mode 100644 src/nos/iar/BFSANDASG.S create mode 100644 src/nos/iar/BFSCDIVASG.S create mode 100644 src/nos/iar/BFSCEXT.S create mode 100644 src/nos/iar/BFSCLDSHIFTDOWN.S create mode 100644 src/nos/iar/BFSCMODASG.S create mode 100644 src/nos/iar/BFSCRSHASG.S create mode 100644 src/nos/iar/BFSLSHASG.S create mode 100644 src/nos/iar/BFSMULASG.S create mode 100644 src/nos/iar/BFSNEGASG.S create mode 100644 src/nos/iar/BFSORASG.S create mode 100644 src/nos/iar/BFSPOSTDEC.S create mode 100644 src/nos/iar/BFSPOSTINC.S create mode 100644 src/nos/iar/BFSPREDEC.S create mode 100644 src/nos/iar/BFSPREINC.S create mode 100644 src/nos/iar/BFSRETVAL.S create mode 100644 src/nos/iar/BFSSDIVASG.S create mode 100644 src/nos/iar/BFSSEXT.S create mode 100644 src/nos/iar/BFSSHIFTUP.S create mode 100644 src/nos/iar/BFSSLDSHIFTDOWN.S create mode 100644 src/nos/iar/BFSSMODASG.S create mode 100644 src/nos/iar/BFSSRSHASG.S create mode 100644 src/nos/iar/BFSSUBASG.S create mode 100644 src/nos/iar/BFSXORASG.S create mode 100644 src/nos/iar/BFUCDIVASG.S create mode 100644 src/nos/iar/BFUCLDSHIFTDOWN.S create mode 100644 src/nos/iar/BFUCMODASG.S create mode 100644 src/nos/iar/BFUCRSHASG.S create mode 100644 src/nos/iar/BFUSDIVASG.S create mode 100644 src/nos/iar/BFUSLDSHIFTDOWN.S create mode 100644 src/nos/iar/BFUSMODASG.S create mode 100644 src/nos/iar/BFUSRSHASG.S create mode 100644 src/nos/iar/CALLIND.S create mode 100644 src/nos/iar/CDIVMOD.S create mode 100644 src/nos/iar/CFINDSIGN.S create mode 100644 src/nos/iar/CLSH.S create mode 100644 src/nos/iar/CLSHASG.S create mode 100644 src/nos/iar/CMUL.S create mode 100644 src/nos/iar/CMULASG.S create mode 100644 src/nos/iar/CSSWITCH.S create mode 100644 src/nos/iar/CVSWITCH.S create mode 100644 src/nos/iar/ENTAUTODIRECT.S create mode 100644 src/nos/iar/ENTPARMDIRECT.S create mode 100644 src/nos/iar/FADDASG.S create mode 100644 src/nos/iar/FADDSUB.S create mode 100644 src/nos/iar/FCMP.S create mode 100644 src/nos/iar/FDEC.S create mode 100644 src/nos/iar/FDECASG.S create mode 100644 src/nos/iar/FDIV.S create mode 100644 src/nos/iar/FDIVASG.S create mode 100644 src/nos/iar/FENDASG2.S create mode 100644 src/nos/iar/FINC.S create mode 100644 src/nos/iar/FINCASG.S create mode 100644 src/nos/iar/FMUL.S create mode 100644 src/nos/iar/FMULASG.S create mode 100644 src/nos/iar/FNEGASG.S create mode 100644 src/nos/iar/FPACK.S create mode 100644 src/nos/iar/FROUND.S create mode 100644 src/nos/iar/FSUBASG.S create mode 100644 src/nos/iar/FTOL.S create mode 100644 src/nos/iar/FUNPACK.S create mode 100644 src/nos/iar/L create mode 100644 src/nos/iar/LADDASG.S create mode 100644 src/nos/iar/LAND.S create mode 100644 src/nos/iar/LANDASG.S create mode 100644 src/nos/iar/LDEC.S create mode 100644 src/nos/iar/LDECASG.S create mode 100644 src/nos/iar/LDIVMOD.S create mode 100644 src/nos/iar/LEAVE32.S create mode 100644 src/nos/iar/LEAVEDIRECT.S create mode 100644 src/nos/iar/LENDASG.S create mode 100644 src/nos/iar/LENDMULDIVASG.S create mode 100644 src/nos/iar/LFINDSIGN.S create mode 100644 src/nos/iar/LIBVERSION.S create mode 100644 src/nos/iar/LINC.S create mode 100644 src/nos/iar/LINCASG.S create mode 100644 src/nos/iar/LLSH.S create mode 100644 src/nos/iar/LLSHASG.S create mode 100644 src/nos/iar/LMUL.S create mode 100644 src/nos/iar/LMULASG.S create mode 100644 src/nos/iar/LNEG.S create mode 100644 src/nos/iar/LNEGASG.S create mode 100644 src/nos/iar/LNOT.S create mode 100644 src/nos/iar/LNOTASG.S create mode 100644 src/nos/iar/LOR.S create mode 100644 src/nos/iar/LORASG.S create mode 100644 src/nos/iar/LSSWITCH.S create mode 100644 src/nos/iar/LSUBASG.S create mode 100644 src/nos/iar/LTOF.S create mode 100644 src/nos/iar/LVSWITCH.S create mode 100644 src/nos/iar/LXOR.S create mode 100644 src/nos/iar/LXORASG.S create mode 100644 src/nos/iar/MEMCMP.S create mode 100644 src/nos/iar/MEMSET.S create mode 100644 src/nos/iar/MONITORBANKLEAVE.S create mode 100644 src/nos/iar/MONITORBANKLEAVE32.S create mode 100644 src/nos/iar/MONITORBANKLEAVEIX.S create mode 100644 src/nos/iar/MONITORBANKLEAVEPOP.S create mode 100644 src/nos/iar/MONITORLEAVE.S create mode 100644 src/nos/iar/MONITORLEAVE32.S create mode 100644 src/nos/iar/MONITORLEAVEIX.S create mode 100644 src/nos/iar/MONITORLEAVEIXPA.S create mode 100644 src/nos/iar/MONITORLEAVEPA.S create mode 100644 src/nos/iar/MONITORLEAVEPOP.S create mode 100644 src/nos/iar/SCDIV.S create mode 100644 src/nos/iar/SCMOD.S create mode 100644 src/nos/iar/SCRSH.S create mode 100644 src/nos/iar/SCRSHASG.S create mode 100644 src/nos/iar/SDIVMOD.S create mode 100644 src/nos/iar/SFINDSIGN.S create mode 100644 src/nos/iar/SLCMP.S create mode 100644 src/nos/iar/SLDIV.S create mode 100644 src/nos/iar/SLDIVASG.S create mode 100644 src/nos/iar/SLMOD.S create mode 100644 src/nos/iar/SLMODASG.S create mode 100644 src/nos/iar/SLRSH.S create mode 100644 src/nos/iar/SLRSHASG.S create mode 100644 src/nos/iar/SLSH.S create mode 100644 src/nos/iar/SLSHASG.S create mode 100644 src/nos/iar/SLSHASGBCprim.S create mode 100644 src/nos/iar/SLSHASGDEprim.S create mode 100644 src/nos/iar/SMUL.S create mode 100644 src/nos/iar/SMULASG.S create mode 100644 src/nos/iar/SMULASGBCprim.S create mode 100644 src/nos/iar/SMULASGDEprim.S create mode 100644 src/nos/iar/SMULASGIX.S create mode 100644 src/nos/iar/SMULASGIY.S create mode 100644 src/nos/iar/SSCMP.S create mode 100644 src/nos/iar/SSDIV.S create mode 100644 src/nos/iar/SSDIVASG.S create mode 100644 src/nos/iar/SSDIVASGBCprim.S create mode 100644 src/nos/iar/SSDIVASGDEprim.S create mode 100644 src/nos/iar/SSDIVASGIX.S create mode 100644 src/nos/iar/SSDIVASGIY.S create mode 100644 src/nos/iar/SSMOD.S create mode 100644 src/nos/iar/SSMODASG.S create mode 100644 src/nos/iar/SSMODASGBCprim.S create mode 100644 src/nos/iar/SSMODASGDEprim.S create mode 100644 src/nos/iar/SSMODASGIX.S create mode 100644 src/nos/iar/SSMODASGIY.S create mode 100644 src/nos/iar/SSRSH.S create mode 100644 src/nos/iar/SSRSHASG.S create mode 100644 src/nos/iar/SSRSHASGBCprim.S create mode 100644 src/nos/iar/SSRSHASGDEprim.S create mode 100644 src/nos/iar/SSRSHASGIX.S create mode 100644 src/nos/iar/SSRSHASGIY.S create mode 100644 src/nos/iar/SSSWITCH.S create mode 100644 src/nos/iar/SSWITCHEND.S create mode 100644 src/nos/iar/STRCAT.S create mode 100644 src/nos/iar/STRCHR.S create mode 100644 src/nos/iar/STRCMP.S create mode 100644 src/nos/iar/STRCPY.S create mode 100644 src/nos/iar/STRLEN.S create mode 100644 src/nos/iar/SVSWITCH.S create mode 100644 src/nos/iar/UCDIV.S create mode 100644 src/nos/iar/UCMOD.S create mode 100644 src/nos/iar/UCRSH.S create mode 100644 src/nos/iar/UCRSHASG.S create mode 100644 src/nos/iar/ULDIV.S create mode 100644 src/nos/iar/ULDIVASG.S create mode 100644 src/nos/iar/ULMOD.S create mode 100644 src/nos/iar/ULMODASG.S create mode 100644 src/nos/iar/ULRSH.S create mode 100644 src/nos/iar/ULRSHASG.S create mode 100644 src/nos/iar/USDIV.S create mode 100644 src/nos/iar/USDIVASG.S create mode 100644 src/nos/iar/USDIVASGBCprim.S create mode 100644 src/nos/iar/USDIVASGDEprim.S create mode 100644 src/nos/iar/USDIVASGIX.S create mode 100644 src/nos/iar/USDIVASGIY.S create mode 100644 src/nos/iar/USMOD.S create mode 100644 src/nos/iar/USMODASG.S create mode 100644 src/nos/iar/USMODASGBCprim.S create mode 100644 src/nos/iar/USMODASGDEprim.S create mode 100644 src/nos/iar/USMODASGIX.S create mode 100644 src/nos/iar/USMODASGIY.S create mode 100644 src/nos/iar/USRSH.S create mode 100644 src/nos/iar/USRSHASG.S create mode 100644 src/nos/iar/USRSHASGBCprim.S create mode 100644 src/nos/iar/USRSHASGDEprim.S create mode 100644 src/nos/iar/USRSHASGIX.S create mode 100644 src/nos/iar/USRSHASGIY.S create mode 100644 src/nos/iar/VSWITCHEND.S create mode 100644 src/nos/iar/auto.mk create mode 100644 src/nos/iar/iar_defs.h create mode 100644 src/nos/iar/makefile create mode 100644 src/nos/include/!readme! create mode 100644 src/nos/include/alloc.h create mode 100644 src/nos/include/ar.h create mode 100644 src/nos/include/assert.h create mode 100644 src/nos/include/ctype.h create mode 100644 src/nos/include/ctype.h% create mode 100644 src/nos/include/curses.h create mode 100644 src/nos/include/dirent.h create mode 100644 src/nos/include/errno.h create mode 100644 src/nos/include/errno.h% create mode 100644 src/nos/include/fcntl.h create mode 100644 src/nos/include/features.h create mode 100644 src/nos/include/float.h create mode 100644 src/nos/include/getopt.h create mode 100644 src/nos/include/grp.h create mode 100644 src/nos/include/intrz80.h$ create mode 100644 src/nos/include/libintl.h create mode 100644 src/nos/include/limits.h create mode 100644 src/nos/include/malloc.h create mode 100644 src/nos/include/math.h create mode 100644 src/nos/include/mem.h create mode 100644 src/nos/include/memory.h create mode 100644 src/nos/include/ncurses.h create mode 100644 src/nos/include/nos/ahdlc.h create mode 100644 src/nos/include/nos/arcnet.h create mode 100644 src/nos/include/nos/arp.h create mode 100644 src/nos/include/nos/asci.h create mode 100644 src/nos/include/nos/asmglobl.x86 create mode 100644 src/nos/include/nos/asy.h create mode 100644 src/nos/include/nos/ax25.h create mode 100644 src/nos/include/nos/ax25mail.h create mode 100644 src/nos/include/nos/bm.h create mode 100644 src/nos/include/nos/bootp.h create mode 100644 src/nos/include/nos/bootpd.h create mode 100644 src/nos/include/nos/cmdparse.h create mode 100644 src/nos/include/nos/commands.h create mode 100644 src/nos/include/nos/config.h create mode 100644 src/nos/include/nos/conv.h create mode 100644 src/nos/include/nos/crc.h create mode 100644 src/nos/include/nos/daemon.h create mode 100644 src/nos/include/nos/devparam.h create mode 100644 src/nos/include/nos/dialer.h create mode 100644 src/nos/include/nos/dirutil.h create mode 100644 src/nos/include/nos/display.h create mode 100644 src/nos/include/nos/dma.h create mode 100644 src/nos/include/nos/domain.h create mode 100644 src/nos/include/nos/drsi.h create mode 100644 src/nos/include/nos/eagle.h create mode 100644 src/nos/include/nos/enet.h create mode 100644 src/nos/include/nos/escc.h create mode 100644 src/nos/include/nos/esccgen.h create mode 100644 src/nos/include/nos/files.h create mode 100644 src/nos/include/nos/ftp.h create mode 100644 src/nos/include/nos/ftpcli.h create mode 100644 src/nos/include/nos/ftpserv.h create mode 100644 src/nos/include/nos/global.h create mode 100644 src/nos/include/nos/hapn.h create mode 100644 src/nos/include/nos/hardware.h create mode 100644 src/nos/include/nos/hs.h create mode 100644 src/nos/include/nos/icmp.h create mode 100644 src/nos/include/nos/iface.h create mode 100644 src/nos/include/nos/internet.h create mode 100644 src/nos/include/nos/ip.h create mode 100644 src/nos/include/nos/kiss.h create mode 100644 src/nos/include/nos/lapb.h create mode 100644 src/nos/include/nos/logmsg.h create mode 100644 src/nos/include/nos/lzw.h create mode 100644 src/nos/include/nos/mailbox.h create mode 100644 src/nos/include/nos/main.h create mode 100644 src/nos/include/nos/mbuf.h create mode 100644 src/nos/include/nos/md5.h create mode 100644 src/nos/include/nos/n8250.h create mode 100644 src/nos/include/nos/netrom.h create mode 100644 src/nos/include/nos/netuser.h create mode 100644 src/nos/include/nos/nospc.h create mode 100644 src/nos/include/nos/nospc.h% create mode 100644 src/nos/include/nos/nr4.h create mode 100644 src/nos/include/nos/nr4mail.h create mode 100644 src/nos/include/nos/nrs.h create mode 100644 src/nos/include/nos/pc100.h create mode 100644 src/nos/include/nos/pi.h create mode 100644 src/nos/include/nos/ping.h create mode 100644 src/nos/include/nos/pktdrvr.h create mode 100644 src/nos/include/nos/pop.h create mode 100644 src/nos/include/nos/ppp.h create mode 100644 src/nos/include/nos/pppfsm.h create mode 100644 src/nos/include/nos/pppipcp.h create mode 100644 src/nos/include/nos/ppplcp.h create mode 100644 src/nos/include/nos/ppppap.h create mode 100644 src/nos/include/nos/proc.h create mode 100644 src/nos/include/nos/remote.h create mode 100644 src/nos/include/nos/rip.h create mode 100644 src/nos/include/nos/sb.h create mode 100644 src/nos/include/nos/session.h create mode 100644 src/nos/include/nos/slhc.h create mode 100644 src/nos/include/nos/slip.h create mode 100644 src/nos/include/nos/smtp.h create mode 100644 src/nos/include/nos/sockaddr.h create mode 100644 src/nos/include/nos/socket.h create mode 100644 src/nos/include/nos/sppp.h create mode 100644 src/nos/include/nos/stdio.h create mode 100644 src/nos/include/nos/sync.h create mode 100644 src/nos/include/nos/tcp.h create mode 100644 src/nos/include/nos/telnet.h create mode 100644 src/nos/include/nos/timer.h create mode 100644 src/nos/include/nos/tipmail.h create mode 100644 src/nos/include/nos/trace.h create mode 100644 src/nos/include/nos/tty.h create mode 100644 src/nos/include/nos/udp.h create mode 100644 src/nos/include/nos/usock.h create mode 100644 src/nos/include/nos/z8536.h create mode 100644 src/nos/include/paths.h create mode 100644 src/nos/include/po/messages.h create mode 100644 src/nos/include/pwd.h create mode 100644 src/nos/include/regexp.h create mode 100644 src/nos/include/regmagic.h create mode 100644 src/nos/include/search.h create mode 100644 src/nos/include/setjmp.h create mode 100644 src/nos/include/setjmp.h$ create mode 100644 src/nos/include/setjmp.h% create mode 100644 src/nos/include/sgtty.h create mode 100644 src/nos/include/signal.h create mode 100644 src/nos/include/stdarg.h create mode 100644 src/nos/include/stdarg.h% create mode 100644 src/nos/include/stddef.h create mode 100644 src/nos/include/stdio.h create mode 100644 src/nos/include/stdlib.h create mode 100644 src/nos/include/string.h create mode 100644 src/nos/include/strings.h create mode 100644 src/nos/include/sys/cdefs.h create mode 100644 src/nos/include/sys/exec.h create mode 100644 src/nos/include/sys/ioctl.h create mode 100644 src/nos/include/sys/mount.h create mode 100644 src/nos/include/sys/poll.h create mode 100644 src/nos/include/sys/seek.h create mode 100644 src/nos/include/sys/select.h create mode 100644 src/nos/include/sys/socket.h create mode 100644 src/nos/include/sys/stat.h create mode 100644 src/nos/include/sys/timeb.h create mode 100644 src/nos/include/sys/types.h create mode 100644 src/nos/include/sys/utsname.h create mode 100644 src/nos/include/sys/wait.h create mode 100644 src/nos/include/syscalls.h create mode 100644 src/nos/include/sysmac.h% create mode 100644 src/nos/include/tcpip.h create mode 100644 src/nos/include/termcap.h create mode 100644 src/nos/include/termio.h create mode 100644 src/nos/include/termios.h create mode 100644 src/nos/include/time.h create mode 100644 src/nos/include/unistd.h create mode 100644 src/nos/include/utime.h create mode 100644 src/nos/include/utmp.h create mode 100644 src/nos/include/utsname.h create mode 100644 src/nos/include/uzi/devio.h create mode 100644 src/nos/include/uzi/execve.h create mode 100644 src/nos/include/uzi/filesys.h create mode 100644 src/nos/include/uzi/maxmin.h create mode 100644 src/nos/include/uzi/process.h create mode 100644 src/nos/include/uzi/rtc.h create mode 100644 src/nos/include/uzi/scall1.h create mode 100644 src/nos/include/uzi/scall2.h create mode 100644 src/nos/include/uzi/systrace.h create mode 100644 src/nos/include/uzi/unix.h% create mode 100644 src/nos/include/uzi/usrmem.h create mode 100644 src/nos/include/uzi/xfs.h create mode 100644 src/nos/include/uzi/xip.h create mode 100644 src/nos/include/varargs.h create mode 100644 src/nos/include/vendor.h create mode 100644 src/nos/include/z80/asm.h create mode 100644 src/nos/internet/arp.c create mode 100644 src/nos/internet/arpcmd.c create mode 100644 src/nos/internet/arphdr.c create mode 100644 src/nos/internet/auto.mk create mode 100644 src/nos/internet/domain.c create mode 100644 src/nos/internet/domhdr.c create mode 100644 src/nos/internet/hop.c create mode 100644 src/nos/internet/icmp.c create mode 100644 src/nos/internet/icmpcmd.c create mode 100644 src/nos/internet/icmphdr.c create mode 100644 src/nos/internet/icmpmsg.c create mode 100644 src/nos/internet/ip.c create mode 100644 src/nos/internet/ipcmd.c create mode 100644 src/nos/internet/iphdr.c create mode 100644 src/nos/internet/iproute.c create mode 100644 src/nos/internet/ipsock.c create mode 100644 src/nos/internet/makefile create mode 100644 src/nos/internet/netuser.c create mode 100644 src/nos/internet/ping.c create mode 100644 src/nos/internet/rip.c create mode 100644 src/nos/internet/ripcmd.c create mode 100644 src/nos/internet/sim.c create mode 100644 src/nos/internet/tcpcmd.c create mode 100644 src/nos/internet/tcphdr.c create mode 100644 src/nos/internet/tcpin.c create mode 100644 src/nos/internet/tcpout.c create mode 100644 src/nos/internet/tcpout.l create mode 100644 src/nos/internet/tcpsock.c create mode 100644 src/nos/internet/tcpsubr.c create mode 100644 src/nos/internet/tcptimer.c create mode 100644 src/nos/internet/tcpuser.c create mode 100644 src/nos/internet/udp.c create mode 100644 src/nos/internet/udpcmd.c create mode 100644 src/nos/internet/udphdr.c create mode 100644 src/nos/internet/udpsock.c create mode 100644 src/nos/intl/auto.mk create mode 100644 src/nos/intl/gettext.S create mode 100644 src/nos/intl/intl.c create mode 100644 src/nos/intl/makefile create mode 100644 src/nos/ipsec_mk create mode 100644 src/nos/lib/clients.lib create mode 100644 src/nos/lib/clients_lib/Ftpcmds.rel create mode 100644 src/nos/lib/clients_lib/Notsess.rel create mode 100644 src/nos/lib/clients_lib/bootp.rel create mode 100644 src/nos/lib/clients_lib/compsub.rel create mode 100644 src/nos/lib/clients_lib/doascii.rel create mode 100644 src/nos/lib/clients_lib/dobatch.rel create mode 100644 src/nos/lib/clients_lib/dobinary.rel create mode 100644 src/nos/lib/clients_lib/docompare.rel create mode 100644 src/nos/lib/clients_lib/doftp.rel create mode 100644 src/nos/lib/clients_lib/doftpcd.rel create mode 100644 src/nos/lib/clients_lib/doget.rel create mode 100644 src/nos/lib/clients_lib/dohash.rel create mode 100644 src/nos/lib/clients_lib/dolist.rel create mode 100644 src/nos/lib/clients_lib/dols.rel create mode 100644 src/nos/lib/clients_lib/domcompare.rel create mode 100644 src/nos/lib/clients_lib/domd5.rel create mode 100644 src/nos/lib/clients_lib/domget.rel create mode 100644 src/nos/lib/clients_lib/domkdir.rel create mode 100644 src/nos/lib/clients_lib/domput.rel create mode 100644 src/nos/lib/clients_lib/doput.rel create mode 100644 src/nos/lib/clients_lib/doquit.rel create mode 100644 src/nos/lib/clients_lib/doread.rel create mode 100644 src/nos/lib/clients_lib/dormdir.rel create mode 100644 src/nos/lib/clients_lib/dotype.rel create mode 100644 src/nos/lib/clients_lib/doupdate.rel create mode 100644 src/nos/lib/clients_lib/doverbose.rel create mode 100644 src/nos/lib/clients_lib/finger.rel create mode 100644 src/nos/lib/clients_lib/getline.rel create mode 100644 src/nos/lib/clients_lib/getresp.rel create mode 100644 src/nos/lib/clients_lib/getsub.rel create mode 100644 src/nos/lib/clients_lib/keychar.rel create mode 100644 src/nos/lib/clients_lib/lterm.rel create mode 100644 src/nos/lib/clients_lib/putsub.rel create mode 100644 src/nos/lib/clients_lib/sendport.rel create mode 100644 src/nos/lib/clients_lib/telnet.rel create mode 100644 src/nos/lib/crt0_banked.lst create mode 100644 src/nos/lib/crt0_banked.rel create mode 100644 src/nos/lib/crt0_large.lst create mode 100644 src/nos/lib/crt0_large.rel create mode 100644 src/nos/lib/crt_banked.lib create mode 100644 src/nos/lib/crt_banked_lib/abort.rel create mode 100644 src/nos/lib/crt_banked_lib/alloca.rel create mode 100644 src/nos/lib/crt_banked_lib/asctime.rel create mode 100644 src/nos/lib/crt_banked_lib/assert.rel create mode 100644 src/nos/lib/crt_banked_lib/atexit.rel create mode 100644 src/nos/lib/crt_banked_lib/atoi.rel create mode 100644 src/nos/lib/crt_banked_lib/atol.rel create mode 100644 src/nos/lib/crt_banked_lib/bsearch.rel create mode 100644 src/nos/lib/crt_banked_lib/calloc.rel create mode 100644 src/nos/lib/crt_banked_lib/clock.rel create mode 100644 src/nos/lib/crt_banked_lib/closedir.rel create mode 100644 src/nos/lib/crt_banked_lib/convtime.rel create mode 100644 src/nos/lib/crt_banked_lib/crypt.rel create mode 100644 src/nos/lib/crt_banked_lib/ctime.rel create mode 100644 src/nos/lib/crt_banked_lib/ctype.rel create mode 100644 src/nos/lib/crt_banked_lib/difftime.rel create mode 100644 src/nos/lib/crt_banked_lib/error.rel create mode 100644 src/nos/lib/crt_banked_lib/etime.rel create mode 100644 src/nos/lib/crt_banked_lib/execl.rel create mode 100644 src/nos/lib/crt_banked_lib/execle.rel create mode 100644 src/nos/lib/crt_banked_lib/execlp.rel create mode 100644 src/nos/lib/crt_banked_lib/execlpe.rel create mode 100644 src/nos/lib/crt_banked_lib/exect.rel create mode 100644 src/nos/lib/crt_banked_lib/execv.rel create mode 100644 src/nos/lib/crt_banked_lib/execvp.rel create mode 100644 src/nos/lib/crt_banked_lib/execvpe.rel create mode 100644 src/nos/lib/crt_banked_lib/exit.rel create mode 100644 src/nos/lib/crt_banked_lib/fclose.rel create mode 100644 src/nos/lib/crt_banked_lib/fflush.rel create mode 100644 src/nos/lib/crt_banked_lib/fgetc.rel create mode 100644 src/nos/lib/crt_banked_lib/fgetgren.rel create mode 100644 src/nos/lib/crt_banked_lib/fgetpwen.rel create mode 100644 src/nos/lib/crt_banked_lib/fgets.rel create mode 100644 src/nos/lib/crt_banked_lib/fopen.rel create mode 100644 src/nos/lib/crt_banked_lib/fprintf.rel create mode 100644 src/nos/lib/crt_banked_lib/fputc.rel create mode 100644 src/nos/lib/crt_banked_lib/fputs.rel create mode 100644 src/nos/lib/crt_banked_lib/fputter.rel create mode 100644 src/nos/lib/crt_banked_lib/fread.rel create mode 100644 src/nos/lib/crt_banked_lib/free.rel create mode 100644 src/nos/lib/crt_banked_lib/fscanf.rel create mode 100644 src/nos/lib/crt_banked_lib/ftell.rel create mode 100644 src/nos/lib/crt_banked_lib/fwrite.rel create mode 100644 src/nos/lib/crt_banked_lib/getcwd.rel create mode 100644 src/nos/lib/crt_banked_lib/getenv.rel create mode 100644 src/nos/lib/crt_banked_lib/getgrent.rel create mode 100644 src/nos/lib/crt_banked_lib/getgrgid.rel create mode 100644 src/nos/lib/crt_banked_lib/getgrnam.rel create mode 100644 src/nos/lib/crt_banked_lib/getopt.rel create mode 100644 src/nos/lib/crt_banked_lib/getpass.rel create mode 100644 src/nos/lib/crt_banked_lib/getpw.rel create mode 100644 src/nos/lib/crt_banked_lib/getpwent.rel create mode 100644 src/nos/lib/crt_banked_lib/getpwnam.rel create mode 100644 src/nos/lib/crt_banked_lib/getpwuid.rel create mode 100644 src/nos/lib/crt_banked_lib/gets.rel create mode 100644 src/nos/lib/crt_banked_lib/gmtime.rel create mode 100644 src/nos/lib/crt_banked_lib/initgrup.rel create mode 100644 src/nos/lib/crt_banked_lib/isatty.rel create mode 100644 src/nos/lib/crt_banked_lib/itoa.rel create mode 100644 src/nos/lib/crt_banked_lib/localtim.rel create mode 100644 src/nos/lib/crt_banked_lib/longjmp.rel create mode 100644 src/nos/lib/crt_banked_lib/lsearch.rel create mode 100644 src/nos/lib/crt_banked_lib/lstat.rel create mode 100644 src/nos/lib/crt_banked_lib/ltoa.rel create mode 100644 src/nos/lib/crt_banked_lib/ltostr.rel create mode 100644 src/nos/lib/crt_banked_lib/malloc.rel create mode 100644 src/nos/lib/crt_banked_lib/memccpy.rel create mode 100644 src/nos/lib/crt_banked_lib/memchr.rel create mode 100644 src/nos/lib/crt_banked_lib/memcmp.rel create mode 100644 src/nos/lib/crt_banked_lib/memcpy.rel create mode 100644 src/nos/lib/crt_banked_lib/memmove.rel create mode 100644 src/nos/lib/crt_banked_lib/memset.rel create mode 100644 src/nos/lib/crt_banked_lib/mkdir.rel create mode 100644 src/nos/lib/crt_banked_lib/mktime.rel create mode 100644 src/nos/lib/crt_banked_lib/opendir.rel create mode 100644 src/nos/lib/crt_banked_lib/perror.rel create mode 100644 src/nos/lib/crt_banked_lib/popen.rel create mode 100644 src/nos/lib/crt_banked_lib/printf.rel create mode 100644 src/nos/lib/crt_banked_lib/putenv.rel create mode 100644 src/nos/lib/crt_banked_lib/putgetch.rel create mode 100644 src/nos/lib/crt_banked_lib/putpwent.rel create mode 100644 src/nos/lib/crt_banked_lib/qsort.rel create mode 100644 src/nos/lib/crt_banked_lib/rand.rel create mode 100644 src/nos/lib/crt_banked_lib/readdir.rel create mode 100644 src/nos/lib/crt_banked_lib/readlink.rel create mode 100644 src/nos/lib/crt_banked_lib/realloc.rel create mode 100644 src/nos/lib/crt_banked_lib/regerror.rel create mode 100644 src/nos/lib/crt_banked_lib/regexp.rel create mode 100644 src/nos/lib/crt_banked_lib/regsub.rel create mode 100644 src/nos/lib/crt_banked_lib/rename.rel create mode 100644 src/nos/lib/crt_banked_lib/rewind.rel create mode 100644 src/nos/lib/crt_banked_lib/rewindir.rel create mode 100644 src/nos/lib/crt_banked_lib/rmdir.rel create mode 100644 src/nos/lib/crt_banked_lib/scanf.rel create mode 100644 src/nos/lib/crt_banked_lib/setbuff.rel create mode 100644 src/nos/lib/crt_banked_lib/setenv.rel create mode 100644 src/nos/lib/crt_banked_lib/setgrent.rel create mode 100644 src/nos/lib/crt_banked_lib/setjmp.rel create mode 100644 src/nos/lib/crt_banked_lib/setpwent.rel create mode 100644 src/nos/lib/crt_banked_lib/setvbuff.rel create mode 100644 src/nos/lib/crt_banked_lib/sleep.rel create mode 100644 src/nos/lib/crt_banked_lib/sprintf.rel create mode 100644 src/nos/lib/crt_banked_lib/sputter.rel create mode 100644 src/nos/lib/crt_banked_lib/sscanf.rel create mode 100644 src/nos/lib/crt_banked_lib/stdio0.rel create mode 100644 src/nos/lib/crt_banked_lib/strcat.rel create mode 100644 src/nos/lib/crt_banked_lib/strchr.rel create mode 100644 src/nos/lib/crt_banked_lib/strcmp.rel create mode 100644 src/nos/lib/crt_banked_lib/strcpy.rel create mode 100644 src/nos/lib/crt_banked_lib/strcspn.rel create mode 100644 src/nos/lib/crt_banked_lib/strdup.rel create mode 100644 src/nos/lib/crt_banked_lib/stricmp.rel create mode 100644 src/nos/lib/crt_banked_lib/strlen.rel create mode 100644 src/nos/lib/crt_banked_lib/strncat.rel create mode 100644 src/nos/lib/crt_banked_lib/strncmp.rel create mode 100644 src/nos/lib/crt_banked_lib/strncpy.rel create mode 100644 src/nos/lib/crt_banked_lib/strnicmp.rel create mode 100644 src/nos/lib/crt_banked_lib/strpbrk.rel create mode 100644 src/nos/lib/crt_banked_lib/strrchr.rel create mode 100644 src/nos/lib/crt_banked_lib/strsep.rel create mode 100644 src/nos/lib/crt_banked_lib/strspn.rel create mode 100644 src/nos/lib/crt_banked_lib/strstr.rel create mode 100644 src/nos/lib/crt_banked_lib/strtok.rel create mode 100644 src/nos/lib/crt_banked_lib/strtol.rel create mode 100644 src/nos/lib/crt_banked_lib/strtoul.rel create mode 100644 src/nos/lib/crt_banked_lib/system.rel create mode 100644 src/nos/lib/crt_banked_lib/termcap.rel create mode 100644 src/nos/lib/crt_banked_lib/tmpnam.rel create mode 100644 src/nos/lib/crt_banked_lib/tparam.rel create mode 100644 src/nos/lib/crt_banked_lib/ttyname.rel create mode 100644 src/nos/lib/crt_banked_lib/tzset.rel create mode 100644 src/nos/lib/crt_banked_lib/ultoa.rel create mode 100644 src/nos/lib/crt_banked_lib/ungetc.rel create mode 100644 src/nos/lib/crt_banked_lib/utsname.rel create mode 100644 src/nos/lib/crt_banked_lib/vfprintf.rel create mode 100644 src/nos/lib/crt_banked_lib/vfscanf.rel create mode 100644 src/nos/lib/crt_banked_lib/vprinter.rel create mode 100644 src/nos/lib/crt_banked_lib/vprintf.rel create mode 100644 src/nos/lib/crt_banked_lib/vscanf.rel create mode 100644 src/nos/lib/crt_banked_lib/vsprintf.rel create mode 100644 src/nos/lib/crt_banked_lib/vsscanf.rel create mode 100644 src/nos/lib/crt_banked_lib/xitoa.rel create mode 100644 src/nos/lib/crt_banked_lib/xltoa.rel create mode 100644 src/nos/lib/crt_large.lib create mode 100644 src/nos/lib/crt_large_lib/abort.rel create mode 100644 src/nos/lib/crt_large_lib/alloca.rel create mode 100644 src/nos/lib/crt_large_lib/asctime.rel create mode 100644 src/nos/lib/crt_large_lib/assert.rel create mode 100644 src/nos/lib/crt_large_lib/atexit.rel create mode 100644 src/nos/lib/crt_large_lib/atoi.rel create mode 100644 src/nos/lib/crt_large_lib/atol.rel create mode 100644 src/nos/lib/crt_large_lib/bsearch.rel create mode 100644 src/nos/lib/crt_large_lib/calloc.rel create mode 100644 src/nos/lib/crt_large_lib/clock.rel create mode 100644 src/nos/lib/crt_large_lib/closedir.rel create mode 100644 src/nos/lib/crt_large_lib/convtime.rel create mode 100644 src/nos/lib/crt_large_lib/crypt.rel create mode 100644 src/nos/lib/crt_large_lib/ctime.rel create mode 100644 src/nos/lib/crt_large_lib/ctype.rel create mode 100644 src/nos/lib/crt_large_lib/difftime.rel create mode 100644 src/nos/lib/crt_large_lib/error.rel create mode 100644 src/nos/lib/crt_large_lib/etime.rel create mode 100644 src/nos/lib/crt_large_lib/execl.rel create mode 100644 src/nos/lib/crt_large_lib/execle.rel create mode 100644 src/nos/lib/crt_large_lib/execlp.rel create mode 100644 src/nos/lib/crt_large_lib/execlpe.rel create mode 100644 src/nos/lib/crt_large_lib/exect.rel create mode 100644 src/nos/lib/crt_large_lib/execv.rel create mode 100644 src/nos/lib/crt_large_lib/execvp.rel create mode 100644 src/nos/lib/crt_large_lib/execvpe.rel create mode 100644 src/nos/lib/crt_large_lib/exit.rel create mode 100644 src/nos/lib/crt_large_lib/fclose.rel create mode 100644 src/nos/lib/crt_large_lib/fflush.rel create mode 100644 src/nos/lib/crt_large_lib/fgetc.rel create mode 100644 src/nos/lib/crt_large_lib/fgetgren.rel create mode 100644 src/nos/lib/crt_large_lib/fgetpwen.rel create mode 100644 src/nos/lib/crt_large_lib/fgets.rel create mode 100644 src/nos/lib/crt_large_lib/fopen.rel create mode 100644 src/nos/lib/crt_large_lib/fprintf.rel create mode 100644 src/nos/lib/crt_large_lib/fputc.rel create mode 100644 src/nos/lib/crt_large_lib/fputs.rel create mode 100644 src/nos/lib/crt_large_lib/fputter.rel create mode 100644 src/nos/lib/crt_large_lib/fread.rel create mode 100644 src/nos/lib/crt_large_lib/free.rel create mode 100644 src/nos/lib/crt_large_lib/fscanf.rel create mode 100644 src/nos/lib/crt_large_lib/ftell.rel create mode 100644 src/nos/lib/crt_large_lib/fwrite.rel create mode 100644 src/nos/lib/crt_large_lib/getcwd.rel create mode 100644 src/nos/lib/crt_large_lib/getenv.rel create mode 100644 src/nos/lib/crt_large_lib/getgrent.rel create mode 100644 src/nos/lib/crt_large_lib/getgrgid.rel create mode 100644 src/nos/lib/crt_large_lib/getgrnam.rel create mode 100644 src/nos/lib/crt_large_lib/getopt.rel create mode 100644 src/nos/lib/crt_large_lib/getpass.rel create mode 100644 src/nos/lib/crt_large_lib/getpw.rel create mode 100644 src/nos/lib/crt_large_lib/getpwent.rel create mode 100644 src/nos/lib/crt_large_lib/getpwnam.rel create mode 100644 src/nos/lib/crt_large_lib/getpwuid.rel create mode 100644 src/nos/lib/crt_large_lib/gets.rel create mode 100644 src/nos/lib/crt_large_lib/gmtime.rel create mode 100644 src/nos/lib/crt_large_lib/initgrup.rel create mode 100644 src/nos/lib/crt_large_lib/isatty.rel create mode 100644 src/nos/lib/crt_large_lib/itoa.rel create mode 100644 src/nos/lib/crt_large_lib/localtim.rel create mode 100644 src/nos/lib/crt_large_lib/longjmp.rel create mode 100644 src/nos/lib/crt_large_lib/lsearch.rel create mode 100644 src/nos/lib/crt_large_lib/lstat.rel create mode 100644 src/nos/lib/crt_large_lib/ltoa.rel create mode 100644 src/nos/lib/crt_large_lib/ltostr.rel create mode 100644 src/nos/lib/crt_large_lib/malloc.rel create mode 100644 src/nos/lib/crt_large_lib/memccpy.rel create mode 100644 src/nos/lib/crt_large_lib/memchr.rel create mode 100644 src/nos/lib/crt_large_lib/memcmp.rel create mode 100644 src/nos/lib/crt_large_lib/memcpy.rel create mode 100644 src/nos/lib/crt_large_lib/memmove.rel create mode 100644 src/nos/lib/crt_large_lib/memset.rel create mode 100644 src/nos/lib/crt_large_lib/mkdir.rel create mode 100644 src/nos/lib/crt_large_lib/mktime.rel create mode 100644 src/nos/lib/crt_large_lib/opendir.rel create mode 100644 src/nos/lib/crt_large_lib/perror.rel create mode 100644 src/nos/lib/crt_large_lib/popen.rel create mode 100644 src/nos/lib/crt_large_lib/printf.rel create mode 100644 src/nos/lib/crt_large_lib/putenv.rel create mode 100644 src/nos/lib/crt_large_lib/putgetch.rel create mode 100644 src/nos/lib/crt_large_lib/putpwent.rel create mode 100644 src/nos/lib/crt_large_lib/qsort.rel create mode 100644 src/nos/lib/crt_large_lib/rand.rel create mode 100644 src/nos/lib/crt_large_lib/readdir.rel create mode 100644 src/nos/lib/crt_large_lib/readlink.rel create mode 100644 src/nos/lib/crt_large_lib/realloc.rel create mode 100644 src/nos/lib/crt_large_lib/regerror.rel create mode 100644 src/nos/lib/crt_large_lib/regexp.rel create mode 100644 src/nos/lib/crt_large_lib/regsub.rel create mode 100644 src/nos/lib/crt_large_lib/rename.rel create mode 100644 src/nos/lib/crt_large_lib/rewind.rel create mode 100644 src/nos/lib/crt_large_lib/rewindir.rel create mode 100644 src/nos/lib/crt_large_lib/rmdir.rel create mode 100644 src/nos/lib/crt_large_lib/scanf.rel create mode 100644 src/nos/lib/crt_large_lib/setbuff.rel create mode 100644 src/nos/lib/crt_large_lib/setenv.rel create mode 100644 src/nos/lib/crt_large_lib/setgrent.rel create mode 100644 src/nos/lib/crt_large_lib/setjmp.rel create mode 100644 src/nos/lib/crt_large_lib/setpwent.rel create mode 100644 src/nos/lib/crt_large_lib/setvbuff.rel create mode 100644 src/nos/lib/crt_large_lib/sleep.rel create mode 100644 src/nos/lib/crt_large_lib/sprintf.rel create mode 100644 src/nos/lib/crt_large_lib/sputter.rel create mode 100644 src/nos/lib/crt_large_lib/sscanf.rel create mode 100644 src/nos/lib/crt_large_lib/stdio0.rel create mode 100644 src/nos/lib/crt_large_lib/strcat.rel create mode 100644 src/nos/lib/crt_large_lib/strchr.rel create mode 100644 src/nos/lib/crt_large_lib/strcmp.rel create mode 100644 src/nos/lib/crt_large_lib/strcpy.rel create mode 100644 src/nos/lib/crt_large_lib/strcspn.rel create mode 100644 src/nos/lib/crt_large_lib/strdup.rel create mode 100644 src/nos/lib/crt_large_lib/stricmp.rel create mode 100644 src/nos/lib/crt_large_lib/strlen.rel create mode 100644 src/nos/lib/crt_large_lib/strncat.rel create mode 100644 src/nos/lib/crt_large_lib/strncmp.rel create mode 100644 src/nos/lib/crt_large_lib/strncpy.rel create mode 100644 src/nos/lib/crt_large_lib/strnicmp.rel create mode 100644 src/nos/lib/crt_large_lib/strpbrk.rel create mode 100644 src/nos/lib/crt_large_lib/strrchr.rel create mode 100644 src/nos/lib/crt_large_lib/strsep.rel create mode 100644 src/nos/lib/crt_large_lib/strspn.rel create mode 100644 src/nos/lib/crt_large_lib/strstr.rel create mode 100644 src/nos/lib/crt_large_lib/strtok.rel create mode 100644 src/nos/lib/crt_large_lib/strtol.rel create mode 100644 src/nos/lib/crt_large_lib/strtoul.rel create mode 100644 src/nos/lib/crt_large_lib/system.rel create mode 100644 src/nos/lib/crt_large_lib/termcap.rel create mode 100644 src/nos/lib/crt_large_lib/tmpnam.rel create mode 100644 src/nos/lib/crt_large_lib/tparam.rel create mode 100644 src/nos/lib/crt_large_lib/ttyname.rel create mode 100644 src/nos/lib/crt_large_lib/tzset.rel create mode 100644 src/nos/lib/crt_large_lib/ultoa.rel create mode 100644 src/nos/lib/crt_large_lib/ungetc.rel create mode 100644 src/nos/lib/crt_large_lib/utsname.rel create mode 100644 src/nos/lib/crt_large_lib/vfprintf.rel create mode 100644 src/nos/lib/crt_large_lib/vfscanf.rel create mode 100644 src/nos/lib/crt_large_lib/vprinter.rel create mode 100644 src/nos/lib/crt_large_lib/vprintf.rel create mode 100644 src/nos/lib/crt_large_lib/vscanf.rel create mode 100644 src/nos/lib/crt_large_lib/vsprintf.rel create mode 100644 src/nos/lib/crt_large_lib/vsscanf.rel create mode 100644 src/nos/lib/crt_large_lib/xitoa.rel create mode 100644 src/nos/lib/crt_large_lib/xltoa.rel create mode 100644 src/nos/lib/dump.lib create mode 100644 src/nos/lib/dump_lib/icmpdump.rel create mode 100644 src/nos/lib/dump_lib/ipdump.rel create mode 100644 src/nos/lib/dump_lib/tcpdump.rel create mode 100644 src/nos/lib/dump_lib/trace.rel create mode 100644 src/nos/lib/dump_lib/udpdump.rel create mode 100644 src/nos/lib/filesys.lib create mode 100644 src/nos/lib/filesys_lib/Baddevmsg.rel create mode 100644 src/nos/lib/filesys_lib/Badfsmsg.rel create mode 100644 src/nos/lib/filesys_lib/Badinomsg.rel create mode 100644 src/nos/lib/filesys_lib/Bufpool.rel create mode 100644 src/nos/lib/filesys_lib/Devtab.rel create mode 100644 src/nos/lib/filesys_lib/Fstab.rel create mode 100644 src/nos/lib/filesys_lib/Gtinobadoft.rel create mode 100644 src/nos/lib/filesys_lib/Inotab.rel create mode 100644 src/nos/lib/filesys_lib/Oftab.rel create mode 100644 src/nos/lib/filesys_lib/Ptab.rel create mode 100644 src/nos/lib/filesys_lib/Refstoinode.rel create mode 100644 src/nos/lib/filesys_lib/_access.rel create mode 100644 src/nos/lib/filesys_lib/_chdir.rel create mode 100644 src/nos/lib/filesys_lib/_chmod.rel create mode 100644 src/nos/lib/filesys_lib/_chown.rel create mode 100644 src/nos/lib/filesys_lib/_close.rel create mode 100644 src/nos/lib/filesys_lib/_creat.rel create mode 100644 src/nos/lib/filesys_lib/_dup.rel create mode 100644 src/nos/lib/filesys_lib/_dup2.rel create mode 100644 src/nos/lib/filesys_lib/_falign.rel create mode 100644 src/nos/lib/filesys_lib/_fstat.rel create mode 100644 src/nos/lib/filesys_lib/_getfsys.rel create mode 100644 src/nos/lib/filesys_lib/_ioctl.rel create mode 100644 src/nos/lib/filesys_lib/_link.rel create mode 100644 src/nos/lib/filesys_lib/_lseek.rel create mode 100644 src/nos/lib/filesys_lib/_mknod.rel create mode 100644 src/nos/lib/filesys_lib/_mount.rel create mode 100644 src/nos/lib/filesys_lib/_namei.rel create mode 100644 src/nos/lib/filesys_lib/_open.rel create mode 100644 src/nos/lib/filesys_lib/_panic.rel create mode 100644 src/nos/lib/filesys_lib/_read.rel create mode 100644 src/nos/lib/filesys_lib/_stat.rel create mode 100644 src/nos/lib/filesys_lib/_symlink.rel create mode 100644 src/nos/lib/filesys_lib/_sync.rel create mode 100644 src/nos/lib/filesys_lib/_sysdebug.rel create mode 100644 src/nos/lib/filesys_lib/_systrace.rel create mode 100644 src/nos/lib/filesys_lib/_time.rel create mode 100644 src/nos/lib/filesys_lib/_umask.rel create mode 100644 src/nos/lib/filesys_lib/_umount.rel create mode 100644 src/nos/lib/filesys_lib/_unlink.rel create mode 100644 src/nos/lib/filesys_lib/_write.rel create mode 100644 src/nos/lib/filesys_lib/access.rel create mode 100644 src/nos/lib/filesys_lib/bdreadwrite.rel create mode 100644 src/nos/lib/filesys_lib/bfind.rel create mode 100644 src/nos/lib/filesys_lib/bfree.rel create mode 100644 src/nos/lib/filesys_lib/blk_alloc.rel create mode 100644 src/nos/lib/filesys_lib/blk_free.rel create mode 100644 src/nos/lib/filesys_lib/bmap.rel create mode 100644 src/nos/lib/filesys_lib/bread.rel create mode 100644 src/nos/lib/filesys_lib/buf_flsh.rel create mode 100644 src/nos/lib/filesys_lib/buf_hits.rel create mode 100644 src/nos/lib/filesys_lib/buf_miss.rel create mode 100644 src/nos/lib/filesys_lib/bufclock.rel create mode 100644 src/nos/lib/filesys_lib/bufdump.rel create mode 100644 src/nos/lib/filesys_lib/bufinit.rel create mode 100644 src/nos/lib/filesys_lib/bufsync.rel create mode 100644 src/nos/lib/filesys_lib/cdreadwrite.rel create mode 100644 src/nos/lib/filesys_lib/ch_link.rel create mode 100644 src/nos/lib/filesys_lib/chany.rel create mode 100644 src/nos/lib/filesys_lib/chdir.rel create mode 100644 src/nos/lib/filesys_lib/chmod.rel create mode 100644 src/nos/lib/filesys_lib/chown.rel create mode 100644 src/nos/lib/filesys_lib/close.rel create mode 100644 src/nos/lib/filesys_lib/creat.rel create mode 100644 src/nos/lib/filesys_lib/d_init.rel create mode 100644 src/nos/lib/filesys_lib/d_ioctl.rel create mode 100644 src/nos/lib/filesys_lib/d_openclose.rel create mode 100644 src/nos/lib/filesys_lib/dirty_mask.rel create mode 100644 src/nos/lib/filesys_lib/doexit.rel create mode 100644 src/nos/lib/filesys_lib/dprintf.rel create mode 100644 src/nos/lib/filesys_lib/dup.rel create mode 100644 src/nos/lib/filesys_lib/dup2.rel create mode 100644 src/nos/lib/filesys_lib/f_trunc.rel create mode 100644 src/nos/lib/filesys_lib/falign.rel create mode 100644 src/nos/lib/filesys_lib/filename.rel create mode 100644 src/nos/lib/filesys_lib/filesys_doclose.rel create mode 100644 src/nos/lib/filesys_lib/filldesc.rel create mode 100644 src/nos/lib/filesys_lib/findfs.rel create mode 100644 src/nos/lib/filesys_lib/findprocess.rel create mode 100644 src/nos/lib/filesys_lib/fmount.rel create mode 100644 src/nos/lib/filesys_lib/freeblk.rel create mode 100644 src/nos/lib/filesys_lib/freebuf.rel create mode 100644 src/nos/lib/filesys_lib/fs_init.rel create mode 100644 src/nos/lib/filesys_lib/fs_sync.rel create mode 100644 src/nos/lib/filesys_lib/fstat.rel create mode 100644 src/nos/lib/filesys_lib/getfs.rel create mode 100644 src/nos/lib/filesys_lib/getfsys.rel create mode 100644 src/nos/lib/filesys_lib/getinode.rel create mode 100644 src/nos/lib/filesys_lib/getperm.rel create mode 100644 src/nos/lib/filesys_lib/i_alloc.rel create mode 100644 src/nos/lib/filesys_lib/i_deref.rel create mode 100644 src/nos/lib/filesys_lib/i_free.rel create mode 100644 src/nos/lib/filesys_lib/i_init.rel create mode 100644 src/nos/lib/filesys_lib/i_open.rel create mode 100644 src/nos/lib/filesys_lib/i_ref.rel create mode 100644 src/nos/lib/filesys_lib/i_sync.rel create mode 100644 src/nos/lib/filesys_lib/ibuf.rel create mode 100644 src/nos/lib/filesys_lib/ioctl.rel create mode 100644 src/nos/lib/filesys_lib/isdevice.rel create mode 100644 src/nos/lib/filesys_lib/kbuf.rel create mode 100644 src/nos/lib/filesys_lib/link.rel create mode 100644 src/nos/lib/filesys_lib/lseek.rel create mode 100644 src/nos/lib/filesys_lib/magic.rel create mode 100644 src/nos/lib/filesys_lib/max_int.rel create mode 100644 src/nos/lib/filesys_lib/max_long.rel create mode 100644 src/nos/lib/filesys_lib/max_uint.rel create mode 100644 src/nos/lib/filesys_lib/max_ulong.rel create mode 100644 src/nos/lib/filesys_lib/min_int.rel create mode 100644 src/nos/lib/filesys_lib/min_long.rel create mode 100644 src/nos/lib/filesys_lib/min_uint.rel create mode 100644 src/nos/lib/filesys_lib/min_ulong.rel create mode 100644 src/nos/lib/filesys_lib/mknod.rel create mode 100644 src/nos/lib/filesys_lib/mount.rel create mode 100644 src/nos/lib/filesys_lib/n_creat.rel create mode 100644 src/nos/lib/filesys_lib/namecomp.rel create mode 100644 src/nos/lib/filesys_lib/namei.rel create mode 100644 src/nos/lib/filesys_lib/newfile.rel create mode 100644 src/nos/lib/filesys_lib/nogood.rel create mode 100644 src/nos/lib/filesys_lib/nogood_ioctl.rel create mode 100644 src/nos/lib/filesys_lib/nogood_rdwr.rel create mode 100644 src/nos/lib/filesys_lib/oft_alloc.rel create mode 100644 src/nos/lib/filesys_lib/oft_deref.rel create mode 100644 src/nos/lib/filesys_lib/ok.rel create mode 100644 src/nos/lib/filesys_lib/ok_rdwr.rel create mode 100644 src/nos/lib/filesys_lib/open.rel create mode 100644 src/nos/lib/filesys_lib/p_init.rel create mode 100644 src/nos/lib/filesys_lib/panic.rel create mode 100644 src/nos/lib/filesys_lib/rargs.rel create mode 100644 src/nos/lib/filesys_lib/rdtime.rel create mode 100644 src/nos/lib/filesys_lib/read.rel create mode 100644 src/nos/lib/filesys_lib/readwritei.rel create mode 100644 src/nos/lib/filesys_lib/root_dev.rel create mode 100644 src/nos/lib/filesys_lib/root_ino.rel create mode 100644 src/nos/lib/filesys_lib/rwsetup.rel create mode 100644 src/nos/lib/filesys_lib/scall1_getfsys.rel create mode 100644 src/nos/lib/filesys_lib/setftim.rel create mode 100644 src/nos/lib/filesys_lib/srch_dir.rel create mode 100644 src/nos/lib/filesys_lib/srch_mt.rel create mode 100644 src/nos/lib/filesys_lib/stat.rel create mode 100644 src/nos/lib/filesys_lib/stcpy.rel create mode 100644 src/nos/lib/filesys_lib/sttime.rel create mode 100644 src/nos/lib/filesys_lib/symlink.rel create mode 100644 src/nos/lib/filesys_lib/sync.rel create mode 100644 src/nos/lib/filesys_lib/sys_NONE.rel create mode 100644 src/nos/lib/filesys_lib/sys__exit.rel create mode 100644 src/nos/lib/filesys_lib/sys_alarm.rel create mode 100644 src/nos/lib/filesys_lib/sys_brk.rel create mode 100644 src/nos/lib/filesys_lib/sys_chdir.rel create mode 100644 src/nos/lib/filesys_lib/sys_chmod.rel create mode 100644 src/nos/lib/filesys_lib/sys_chown.rel create mode 100644 src/nos/lib/filesys_lib/sys_chroot.rel create mode 100644 src/nos/lib/filesys_lib/sys_close.rel create mode 100644 src/nos/lib/filesys_lib/sys_dup.rel create mode 100644 src/nos/lib/filesys_lib/sys_dup2.rel create mode 100644 src/nos/lib/filesys_lib/sys_execve.rel create mode 100644 src/nos/lib/filesys_lib/sys_falign.rel create mode 100644 src/nos/lib/filesys_lib/sys_fork.rel create mode 100644 src/nos/lib/filesys_lib/sys_getfsys.rel create mode 100644 src/nos/lib/filesys_lib/sys_getset.rel create mode 100644 src/nos/lib/filesys_lib/sys_ioctl.rel create mode 100644 src/nos/lib/filesys_lib/sys_kill.rel create mode 100644 src/nos/lib/filesys_lib/sys_link.rel create mode 100644 src/nos/lib/filesys_lib/sys_lseek.rel create mode 100644 src/nos/lib/filesys_lib/sys_mknod.rel create mode 100644 src/nos/lib/filesys_lib/sys_mountumount.rel create mode 100644 src/nos/lib/filesys_lib/sys_open.rel create mode 100644 src/nos/lib/filesys_lib/sys_pause.rel create mode 100644 src/nos/lib/filesys_lib/sys_pipe.rel create mode 100644 src/nos/lib/filesys_lib/sys_readwrite.rel create mode 100644 src/nos/lib/filesys_lib/sys_reboot.rel create mode 100644 src/nos/lib/filesys_lib/sys_sbrk.rel create mode 100644 src/nos/lib/filesys_lib/sys_signal.rel create mode 100644 src/nos/lib/filesys_lib/sys_statfstat.rel create mode 100644 src/nos/lib/filesys_lib/sys_stime.rel create mode 100644 src/nos/lib/filesys_lib/sys_symlink.rel create mode 100644 src/nos/lib/filesys_lib/sys_sync.rel create mode 100644 src/nos/lib/filesys_lib/sys_time.rel create mode 100644 src/nos/lib/filesys_lib/sys_times.rel create mode 100644 src/nos/lib/filesys_lib/sys_unlink.rel create mode 100644 src/nos/lib/filesys_lib/sys_utime.rel create mode 100644 src/nos/lib/filesys_lib/sys_waitpid.rel create mode 100644 src/nos/lib/filesys_lib/sysdebug.rel create mode 100644 src/nos/lib/filesys_lib/syserror_table.rel create mode 100644 src/nos/lib/filesys_lib/systrace.rel create mode 100644 src/nos/lib/filesys_lib/systrace_dump.rel create mode 100644 src/nos/lib/filesys_lib/systrace_entry.rel create mode 100644 src/nos/lib/filesys_lib/systrace_exit.rel create mode 100644 src/nos/lib/filesys_lib/systrace_table.rel create mode 100644 src/nos/lib/filesys_lib/time.rel create mode 100644 src/nos/lib/filesys_lib/truncateto0.rel create mode 100644 src/nos/lib/filesys_lib/udata.rel create mode 100644 src/nos/lib/filesys_lib/uf_alloc.rel create mode 100644 src/nos/lib/filesys_lib/umask.rel create mode 100644 src/nos/lib/filesys_lib/umount.rel create mode 100644 src/nos/lib/filesys_lib/unlink.rel create mode 100644 src/nos/lib/filesys_lib/usrget.rel create mode 100644 src/nos/lib/filesys_lib/usrget_int.rel create mode 100644 src/nos/lib/filesys_lib/usrget_str.rel create mode 100644 src/nos/lib/filesys_lib/usrput.rel create mode 100644 src/nos/lib/filesys_lib/usrput_int.rel create mode 100644 src/nos/lib/filesys_lib/valadr.rel create mode 100644 src/nos/lib/filesys_lib/validblk.rel create mode 100644 src/nos/lib/filesys_lib/validdev.rel create mode 100644 src/nos/lib/filesys_lib/vdprintf.rel create mode 100644 src/nos/lib/filesys_lib/wargs.rel create mode 100644 src/nos/lib/filesys_lib/wr_inode.rel create mode 100644 src/nos/lib/filesys_lib/write.rel create mode 100644 src/nos/lib/filesys_lib/xfs_access.rel create mode 100644 src/nos/lib/filesys_lib/xfs_chdir.rel create mode 100644 src/nos/lib/filesys_lib/xfs_chmod.rel create mode 100644 src/nos/lib/filesys_lib/xfs_chown.rel create mode 100644 src/nos/lib/filesys_lib/xfs_close.rel create mode 100644 src/nos/lib/filesys_lib/xfs_creat.rel create mode 100644 src/nos/lib/filesys_lib/xfs_dup.rel create mode 100644 src/nos/lib/filesys_lib/xfs_dup2.rel create mode 100644 src/nos/lib/filesys_lib/xfs_end.rel create mode 100644 src/nos/lib/filesys_lib/xfs_falign.rel create mode 100644 src/nos/lib/filesys_lib/xfs_fstat.rel create mode 100644 src/nos/lib/filesys_lib/xfs_getfsys.rel create mode 100644 src/nos/lib/filesys_lib/xfs_init.rel create mode 100644 src/nos/lib/filesys_lib/xfs_ioctl.rel create mode 100644 src/nos/lib/filesys_lib/xfs_link.rel create mode 100644 src/nos/lib/filesys_lib/xfs_lseek.rel create mode 100644 src/nos/lib/filesys_lib/xfs_mknod.rel create mode 100644 src/nos/lib/filesys_lib/xfs_mount.rel create mode 100644 src/nos/lib/filesys_lib/xfs_open.rel create mode 100644 src/nos/lib/filesys_lib/xfs_read.rel create mode 100644 src/nos/lib/filesys_lib/xfs_stat.rel create mode 100644 src/nos/lib/filesys_lib/xfs_symlink.rel create mode 100644 src/nos/lib/filesys_lib/xfs_sync.rel create mode 100644 src/nos/lib/filesys_lib/xfs_sysdebug.rel create mode 100644 src/nos/lib/filesys_lib/xfs_systrace.rel create mode 100644 src/nos/lib/filesys_lib/xfs_time.rel create mode 100644 src/nos/lib/filesys_lib/xfs_umask.rel create mode 100644 src/nos/lib/filesys_lib/xfs_umount.rel create mode 100644 src/nos/lib/filesys_lib/xfs_unlink.rel create mode 100644 src/nos/lib/filesys_lib/xfs_write.rel create mode 100644 src/nos/lib/filesys_lib/xip_align.rel create mode 100644 src/nos/lib/filesys_lib/xip_align_bmap.rel create mode 100644 src/nos/lib/filesys_lib/xip_align_chase.rel create mode 100644 src/nos/lib/filesys_lib/xip_align_recurse.rel create mode 100644 src/nos/lib/filesys_lib/xip_align_reverse.rel create mode 100644 src/nos/lib/filesys_lib/xip_examine.rel create mode 100644 src/nos/lib/filesys_lib/xip_find.rel create mode 100644 src/nos/lib/filesys_lib/xip_get.rel create mode 100644 src/nos/lib/filesys_lib/xip_reserve.rel create mode 100644 src/nos/lib/filesys_lib/xip_search.rel create mode 100644 src/nos/lib/filesys_lib/xip_set.rel create mode 100644 src/nos/lib/filesys_lib/xip_ualign.rel create mode 100644 src/nos/lib/filesys_lib/zerobuf.rel create mode 100644 src/nos/lib/iar.lib create mode 100644 src/nos/lib/iar_lib/BANKCALLDIRECT.rel create mode 100644 src/nos/lib/iar_lib/BANKLEAVE32.rel create mode 100644 src/nos/lib/iar_lib/BANKLEAVEDIRECT.rel create mode 100644 src/nos/lib/iar_lib/BFCANDASG.rel create mode 100644 src/nos/lib/iar_lib/BFCLSHASG.rel create mode 100644 src/nos/lib/iar_lib/BFCMULASG.rel create mode 100644 src/nos/lib/iar_lib/BFCORASG.rel create mode 100644 src/nos/lib/iar_lib/BFCRETVAL.rel create mode 100644 src/nos/lib/iar_lib/BFCSHIFTUP.rel create mode 100644 src/nos/lib/iar_lib/BFCXORASG.rel create mode 100644 src/nos/lib/iar_lib/BFMASKEDLD.rel create mode 100644 src/nos/lib/iar_lib/BFMASKEDST.rel create mode 100644 src/nos/lib/iar_lib/BFSADDASG.rel create mode 100644 src/nos/lib/iar_lib/BFSANDASG.rel create mode 100644 src/nos/lib/iar_lib/BFSCDIVASG.rel create mode 100644 src/nos/lib/iar_lib/BFSCEXT.rel create mode 100644 src/nos/lib/iar_lib/BFSCLDSHIFTDOWN.rel create mode 100644 src/nos/lib/iar_lib/BFSCMODASG.rel create mode 100644 src/nos/lib/iar_lib/BFSCRSHASG.rel create mode 100644 src/nos/lib/iar_lib/BFSLSHASG.rel create mode 100644 src/nos/lib/iar_lib/BFSMULASG.rel create mode 100644 src/nos/lib/iar_lib/BFSNEGASG.rel create mode 100644 src/nos/lib/iar_lib/BFSORASG.rel create mode 100644 src/nos/lib/iar_lib/BFSPOSTDEC.rel create mode 100644 src/nos/lib/iar_lib/BFSPOSTINC.rel create mode 100644 src/nos/lib/iar_lib/BFSPREDEC.rel create mode 100644 src/nos/lib/iar_lib/BFSPREINC.rel create mode 100644 src/nos/lib/iar_lib/BFSRETVAL.rel create mode 100644 src/nos/lib/iar_lib/BFSSDIVASG.rel create mode 100644 src/nos/lib/iar_lib/BFSSEXT.rel create mode 100644 src/nos/lib/iar_lib/BFSSHIFTUP.rel create mode 100644 src/nos/lib/iar_lib/BFSSLDSHIFTDOWN.rel create mode 100644 src/nos/lib/iar_lib/BFSSMODASG.rel create mode 100644 src/nos/lib/iar_lib/BFSSRSHASG.rel create mode 100644 src/nos/lib/iar_lib/BFSSUBASG.rel create mode 100644 src/nos/lib/iar_lib/BFSXORASG.rel create mode 100644 src/nos/lib/iar_lib/BFUCDIVASG.rel create mode 100644 src/nos/lib/iar_lib/BFUCLDSHIFTDOWN.rel create mode 100644 src/nos/lib/iar_lib/BFUCMODASG.rel create mode 100644 src/nos/lib/iar_lib/BFUCRSHASG.rel create mode 100644 src/nos/lib/iar_lib/BFUSDIVASG.rel create mode 100644 src/nos/lib/iar_lib/BFUSLDSHIFTDOWN.rel create mode 100644 src/nos/lib/iar_lib/BFUSMODASG.rel create mode 100644 src/nos/lib/iar_lib/BFUSRSHASG.rel create mode 100644 src/nos/lib/iar_lib/CALLIND.rel create mode 100644 src/nos/lib/iar_lib/CDIVMOD.rel create mode 100644 src/nos/lib/iar_lib/CFINDSIGN.rel create mode 100644 src/nos/lib/iar_lib/CLSH.rel create mode 100644 src/nos/lib/iar_lib/CLSHASG.rel create mode 100644 src/nos/lib/iar_lib/CMUL.rel create mode 100644 src/nos/lib/iar_lib/CMULASG.rel create mode 100644 src/nos/lib/iar_lib/CSSWITCH.rel create mode 100644 src/nos/lib/iar_lib/CVSWITCH.rel create mode 100644 src/nos/lib/iar_lib/ENTAUTODIRECT.rel create mode 100644 src/nos/lib/iar_lib/ENTPARMDIRECT.rel create mode 100644 src/nos/lib/iar_lib/FADDASG.rel create mode 100644 src/nos/lib/iar_lib/FADDSUB.rel create mode 100644 src/nos/lib/iar_lib/FCMP.rel create mode 100644 src/nos/lib/iar_lib/FDEC.rel create mode 100644 src/nos/lib/iar_lib/FDECASG.rel create mode 100644 src/nos/lib/iar_lib/FDIV.rel create mode 100644 src/nos/lib/iar_lib/FDIVASG.rel create mode 100644 src/nos/lib/iar_lib/FENDASG2.rel create mode 100644 src/nos/lib/iar_lib/FINC.rel create mode 100644 src/nos/lib/iar_lib/FINCASG.rel create mode 100644 src/nos/lib/iar_lib/FMUL.rel create mode 100644 src/nos/lib/iar_lib/FMULASG.rel create mode 100644 src/nos/lib/iar_lib/FNEGASG.rel create mode 100644 src/nos/lib/iar_lib/FPACK.rel create mode 100644 src/nos/lib/iar_lib/FROUND.rel create mode 100644 src/nos/lib/iar_lib/FSUBASG.rel create mode 100644 src/nos/lib/iar_lib/FTOL.rel create mode 100644 src/nos/lib/iar_lib/FUNPACK.rel create mode 100644 src/nos/lib/iar_lib/LADDASG.rel create mode 100644 src/nos/lib/iar_lib/LAND.rel create mode 100644 src/nos/lib/iar_lib/LANDASG.rel create mode 100644 src/nos/lib/iar_lib/LDEC.rel create mode 100644 src/nos/lib/iar_lib/LDECASG.rel create mode 100644 src/nos/lib/iar_lib/LDIVMOD.rel create mode 100644 src/nos/lib/iar_lib/LEAVE32.rel create mode 100644 src/nos/lib/iar_lib/LEAVEDIRECT.rel create mode 100644 src/nos/lib/iar_lib/LENDASG.rel create mode 100644 src/nos/lib/iar_lib/LENDMULDIVASG.rel create mode 100644 src/nos/lib/iar_lib/LFINDSIGN.rel create mode 100644 src/nos/lib/iar_lib/LIBVERSION.rel create mode 100644 src/nos/lib/iar_lib/LINC.rel create mode 100644 src/nos/lib/iar_lib/LINCASG.rel create mode 100644 src/nos/lib/iar_lib/LLSH.rel create mode 100644 src/nos/lib/iar_lib/LLSHASG.rel create mode 100644 src/nos/lib/iar_lib/LMUL.rel create mode 100644 src/nos/lib/iar_lib/LMULASG.rel create mode 100644 src/nos/lib/iar_lib/LNEG.rel create mode 100644 src/nos/lib/iar_lib/LNEGASG.rel create mode 100644 src/nos/lib/iar_lib/LNOT.rel create mode 100644 src/nos/lib/iar_lib/LNOTASG.rel create mode 100644 src/nos/lib/iar_lib/LOR.rel create mode 100644 src/nos/lib/iar_lib/LORASG.rel create mode 100644 src/nos/lib/iar_lib/LSSWITCH.rel create mode 100644 src/nos/lib/iar_lib/LSUBASG.rel create mode 100644 src/nos/lib/iar_lib/LTOF.rel create mode 100644 src/nos/lib/iar_lib/LVSWITCH.rel create mode 100644 src/nos/lib/iar_lib/LXOR.rel create mode 100644 src/nos/lib/iar_lib/LXORASG.rel create mode 100644 src/nos/lib/iar_lib/MEMCMP.rel create mode 100644 src/nos/lib/iar_lib/MEMSET.rel create mode 100644 src/nos/lib/iar_lib/MONITORBANKLEAVE.rel create mode 100644 src/nos/lib/iar_lib/MONITORBANKLEAVE32.rel create mode 100644 src/nos/lib/iar_lib/MONITORBANKLEAVEIX.rel create mode 100644 src/nos/lib/iar_lib/MONITORBANKLEAVEPOP.rel create mode 100644 src/nos/lib/iar_lib/MONITORLEAVE.rel create mode 100644 src/nos/lib/iar_lib/MONITORLEAVE32.rel create mode 100644 src/nos/lib/iar_lib/MONITORLEAVEIX.rel create mode 100644 src/nos/lib/iar_lib/MONITORLEAVEIXPA.rel create mode 100644 src/nos/lib/iar_lib/MONITORLEAVEPA.rel create mode 100644 src/nos/lib/iar_lib/MONITORLEAVEPOP.rel create mode 100644 src/nos/lib/iar_lib/SCDIV.rel create mode 100644 src/nos/lib/iar_lib/SCMOD.rel create mode 100644 src/nos/lib/iar_lib/SCRSH.rel create mode 100644 src/nos/lib/iar_lib/SCRSHASG.rel create mode 100644 src/nos/lib/iar_lib/SDIVMOD.rel create mode 100644 src/nos/lib/iar_lib/SFINDSIGN.rel create mode 100644 src/nos/lib/iar_lib/SLCMP.rel create mode 100644 src/nos/lib/iar_lib/SLDIV.rel create mode 100644 src/nos/lib/iar_lib/SLDIVASG.rel create mode 100644 src/nos/lib/iar_lib/SLMOD.rel create mode 100644 src/nos/lib/iar_lib/SLMODASG.rel create mode 100644 src/nos/lib/iar_lib/SLRSH.rel create mode 100644 src/nos/lib/iar_lib/SLRSHASG.rel create mode 100644 src/nos/lib/iar_lib/SLSH.rel create mode 100644 src/nos/lib/iar_lib/SLSHASG.rel create mode 100644 src/nos/lib/iar_lib/SLSHASGBCprim.rel create mode 100644 src/nos/lib/iar_lib/SLSHASGDEprim.rel create mode 100644 src/nos/lib/iar_lib/SMUL.rel create mode 100644 src/nos/lib/iar_lib/SMULASG.rel create mode 100644 src/nos/lib/iar_lib/SMULASGBCprim.rel create mode 100644 src/nos/lib/iar_lib/SMULASGDEprim.rel create mode 100644 src/nos/lib/iar_lib/SMULASGIX.rel create mode 100644 src/nos/lib/iar_lib/SMULASGIY.rel create mode 100644 src/nos/lib/iar_lib/SSCMP.rel create mode 100644 src/nos/lib/iar_lib/SSDIV.rel create mode 100644 src/nos/lib/iar_lib/SSDIVASG.rel create mode 100644 src/nos/lib/iar_lib/SSDIVASGBCprim.rel create mode 100644 src/nos/lib/iar_lib/SSDIVASGDEprim.rel create mode 100644 src/nos/lib/iar_lib/SSDIVASGIX.rel create mode 100644 src/nos/lib/iar_lib/SSDIVASGIY.rel create mode 100644 src/nos/lib/iar_lib/SSMOD.rel create mode 100644 src/nos/lib/iar_lib/SSMODASG.rel create mode 100644 src/nos/lib/iar_lib/SSMODASGBCprim.rel create mode 100644 src/nos/lib/iar_lib/SSMODASGDEprim.rel create mode 100644 src/nos/lib/iar_lib/SSMODASGIX.rel create mode 100644 src/nos/lib/iar_lib/SSMODASGIY.rel create mode 100644 src/nos/lib/iar_lib/SSRSH.rel create mode 100644 src/nos/lib/iar_lib/SSRSHASG.rel create mode 100644 src/nos/lib/iar_lib/SSRSHASGBCprim.rel create mode 100644 src/nos/lib/iar_lib/SSRSHASGDEprim.rel create mode 100644 src/nos/lib/iar_lib/SSRSHASGIX.rel create mode 100644 src/nos/lib/iar_lib/SSRSHASGIY.rel create mode 100644 src/nos/lib/iar_lib/SSSWITCH.rel create mode 100644 src/nos/lib/iar_lib/SSWITCHEND.rel create mode 100644 src/nos/lib/iar_lib/STRCAT.rel create mode 100644 src/nos/lib/iar_lib/STRCHR.rel create mode 100644 src/nos/lib/iar_lib/STRCMP.rel create mode 100644 src/nos/lib/iar_lib/STRCPY.rel create mode 100644 src/nos/lib/iar_lib/STRLEN.rel create mode 100644 src/nos/lib/iar_lib/SVSWITCH.rel create mode 100644 src/nos/lib/iar_lib/UCDIV.rel create mode 100644 src/nos/lib/iar_lib/UCMOD.rel create mode 100644 src/nos/lib/iar_lib/UCRSH.rel create mode 100644 src/nos/lib/iar_lib/UCRSHASG.rel create mode 100644 src/nos/lib/iar_lib/ULDIV.rel create mode 100644 src/nos/lib/iar_lib/ULDIVASG.rel create mode 100644 src/nos/lib/iar_lib/ULMOD.rel create mode 100644 src/nos/lib/iar_lib/ULMODASG.rel create mode 100644 src/nos/lib/iar_lib/ULRSH.rel create mode 100644 src/nos/lib/iar_lib/ULRSHASG.rel create mode 100644 src/nos/lib/iar_lib/USDIV.rel create mode 100644 src/nos/lib/iar_lib/USDIVASG.rel create mode 100644 src/nos/lib/iar_lib/USDIVASGBCprim.rel create mode 100644 src/nos/lib/iar_lib/USDIVASGDEprim.rel create mode 100644 src/nos/lib/iar_lib/USDIVASGIX.rel create mode 100644 src/nos/lib/iar_lib/USDIVASGIY.rel create mode 100644 src/nos/lib/iar_lib/USMOD.rel create mode 100644 src/nos/lib/iar_lib/USMODASG.rel create mode 100644 src/nos/lib/iar_lib/USMODASGBCprim.rel create mode 100644 src/nos/lib/iar_lib/USMODASGDEprim.rel create mode 100644 src/nos/lib/iar_lib/USMODASGIX.rel create mode 100644 src/nos/lib/iar_lib/USMODASGIY.rel create mode 100644 src/nos/lib/iar_lib/USRSH.rel create mode 100644 src/nos/lib/iar_lib/USRSHASG.rel create mode 100644 src/nos/lib/iar_lib/USRSHASGBCprim.rel create mode 100644 src/nos/lib/iar_lib/USRSHASGDEprim.rel create mode 100644 src/nos/lib/iar_lib/USRSHASGIX.rel create mode 100644 src/nos/lib/iar_lib/USRSHASGIY.rel create mode 100644 src/nos/lib/iar_lib/VSWITCHEND.rel create mode 100644 src/nos/lib/internet.lib create mode 100644 src/nos/lib/internet_lib/Dcache.rel create mode 100644 src/nos/lib/internet_lib/Dcache_size.rel create mode 100644 src/nos/lib/internet_lib/Dcache_time.rel create mode 100644 src/nos/lib/internet_lib/Dcachecmds.rel create mode 100644 src/nos/lib/internet_lib/Dcmds.rel create mode 100644 src/nos/lib/internet_lib/Dfile_clean.rel create mode 100644 src/nos/lib/internet_lib/Dfile_reading.rel create mode 100644 src/nos/lib/internet_lib/Dfile_updater.rel create mode 100644 src/nos/lib/internet_lib/Dfile_wait_absolute.rel create mode 100644 src/nos/lib/internet_lib/Dfile_wait_relative.rel create mode 100644 src/nos/lib/internet_lib/Dfile_writing.rel create mode 100644 src/nos/lib/internet_lib/Dserver_retries.rel create mode 100644 src/nos/lib/internet_lib/Dservers.rel create mode 100644 src/nos/lib/internet_lib/Dsuffix.rel create mode 100644 src/nos/lib/internet_lib/Dtrace.rel create mode 100644 src/nos/lib/internet_lib/Dtypes.rel create mode 100644 src/nos/lib/internet_lib/Id_cntr.rel create mode 100644 src/nos/lib/internet_lib/Ip_mib.rel create mode 100644 src/nos/lib/internet_lib/Ip_trace.rel create mode 100644 src/nos/lib/internet_lib/Ndtypes.rel create mode 100644 src/nos/lib/internet_lib/Rawip.rel create mode 100644 src/nos/lib/internet_lib/Reasmq.rel create mode 100644 src/nos/lib/internet_lib/Routes.rel create mode 100644 src/nos/lib/internet_lib/Rt_cache.rel create mode 100644 src/nos/lib/internet_lib/Rtchits.rel create mode 100644 src/nos/lib/internet_lib/Rtlookups.rel create mode 100644 src/nos/lib/internet_lib/add_nameserver.rel create mode 100644 src/nos/lib/internet_lib/add_reseq.rel create mode 100644 src/nos/lib/internet_lib/check_ttl.rel create mode 100644 src/nos/lib/internet_lib/checksuffix.rel create mode 100644 src/nos/lib/internet_lib/compare_rr.rel create mode 100644 src/nos/lib/internet_lib/compare_rr_list.rel create mode 100644 src/nos/lib/internet_lib/copy_rr.rel create mode 100644 src/nos/lib/internet_lib/copy_rr_list.rel create mode 100644 src/nos/lib/internet_lib/creat_reasm.rel create mode 100644 src/nos/lib/internet_lib/dcache_add.rel create mode 100644 src/nos/lib/internet_lib/dcache_drop.rel create mode 100644 src/nos/lib/internet_lib/dcache_search.rel create mode 100644 src/nos/lib/internet_lib/dcache_update.rel create mode 100644 src/nos/lib/internet_lib/del_ip.rel create mode 100644 src/nos/lib/internet_lib/delim.rel create mode 100644 src/nos/lib/internet_lib/dfile_search.rel create mode 100644 src/nos/lib/internet_lib/dfile_update.rel create mode 100644 src/nos/lib/internet_lib/dlist_add.rel create mode 100644 src/nos/lib/internet_lib/dlist_drop.rel create mode 100644 src/nos/lib/internet_lib/dns_makequery.rel create mode 100644 src/nos/lib/internet_lib/dns_query.rel create mode 100644 src/nos/lib/internet_lib/docache.rel create mode 100644 src/nos/lib/internet_lib/docacheclean.rel create mode 100644 src/nos/lib/internet_lib/docachelist.rel create mode 100644 src/nos/lib/internet_lib/docachesize.rel create mode 100644 src/nos/lib/internet_lib/docachewait.rel create mode 100644 src/nos/lib/internet_lib/dodnsadd.rel create mode 100644 src/nos/lib/internet_lib/dodnsdrop.rel create mode 100644 src/nos/lib/internet_lib/dodnslist.rel create mode 100644 src/nos/lib/internet_lib/dodnsquery.rel create mode 100644 src/nos/lib/internet_lib/dodnsretry.rel create mode 100644 src/nos/lib/internet_lib/dodnstrace.rel create mode 100644 src/nos/lib/internet_lib/dodomain.rel create mode 100644 src/nos/lib/internet_lib/domhdr.rel create mode 100644 src/nos/lib/internet_lib/dosuffix.rel create mode 100644 src/nos/lib/internet_lib/dtype.rel create mode 100644 src/nos/lib/internet_lib/dumpdomain.rel create mode 100644 src/nos/lib/internet_lib/fraghandle.rel create mode 100644 src/nos/lib/internet_lib/free_reasm.rel create mode 100644 src/nos/lib/internet_lib/free_rr.rel create mode 100644 src/nos/lib/internet_lib/freefrag.rel create mode 100644 src/nos/lib/internet_lib/get_reseq.rel create mode 100644 src/nos/lib/internet_lib/get_rr.rel create mode 100644 src/nos/lib/internet_lib/hop.rel create mode 100644 src/nos/lib/internet_lib/icmp.rel create mode 100644 src/nos/lib/internet_lib/icmpcmd.rel create mode 100644 src/nos/lib/internet_lib/icmphdr.rel create mode 100644 src/nos/lib/internet_lib/icmpmsg.rel create mode 100644 src/nos/lib/internet_lib/in_window.rel create mode 100644 src/nos/lib/internet_lib/inverse_a.rel create mode 100644 src/nos/lib/internet_lib/ip_encap.rel create mode 100644 src/nos/lib/internet_lib/ip_garbage.rel create mode 100644 src/nos/lib/internet_lib/ip_mtu.rel create mode 100644 src/nos/lib/internet_lib/ip_proc.rel create mode 100644 src/nos/lib/internet_lib/ip_recv.rel create mode 100644 src/nos/lib/internet_lib/ip_route.rel create mode 100644 src/nos/lib/internet_lib/ip_send.rel create mode 100644 src/nos/lib/internet_lib/ip_timeout.rel create mode 100644 src/nos/lib/internet_lib/ipcmd.rel create mode 100644 src/nos/lib/internet_lib/iphdr.rel create mode 100644 src/nos/lib/internet_lib/ipinit.rel create mode 100644 src/nos/lib/internet_lib/ipip_recv.rel create mode 100644 src/nos/lib/internet_lib/ipsock.rel create mode 100644 src/nos/lib/internet_lib/isaddr.rel create mode 100644 src/nos/lib/internet_lib/locaddr.rel create mode 100644 src/nos/lib/internet_lib/lookup_reasm.rel create mode 100644 src/nos/lib/internet_lib/make_rr.rel create mode 100644 src/nos/lib/internet_lib/netuser.rel create mode 100644 src/nos/lib/internet_lib/newfrag.rel create mode 100644 src/nos/lib/internet_lib/ping.rel create mode 100644 src/nos/lib/internet_lib/proc_syn.rel create mode 100644 src/nos/lib/internet_lib/put_rr.rel create mode 100644 src/nos/lib/internet_lib/q_pkt.rel create mode 100644 src/nos/lib/internet_lib/raw_ip.rel create mode 100644 src/nos/lib/internet_lib/reset.rel create mode 100644 src/nos/lib/internet_lib/resolve.rel create mode 100644 src/nos/lib/internet_lib/resolve_a.rel create mode 100644 src/nos/lib/internet_lib/resolve_mailb.rel create mode 100644 src/nos/lib/internet_lib/resolve_mx.rel create mode 100644 src/nos/lib/internet_lib/resolve_rr.rel create mode 100644 src/nos/lib/internet_lib/resolver.rel create mode 100644 src/nos/lib/internet_lib/route.rel create mode 100644 src/nos/lib/internet_lib/rquench.rel create mode 100644 src/nos/lib/internet_lib/rt_add.rel create mode 100644 src/nos/lib/internet_lib/rt_blookup.rel create mode 100644 src/nos/lib/internet_lib/rt_drop.rel create mode 100644 src/nos/lib/internet_lib/rt_lookup.rel create mode 100644 src/nos/lib/internet_lib/rt_merge.rel create mode 100644 src/nos/lib/internet_lib/rt_timeout.rel create mode 100644 src/nos/lib/internet_lib/send_syn.rel create mode 100644 src/nos/lib/internet_lib/sim.rel create mode 100644 src/nos/lib/internet_lib/tcp_icmp.rel create mode 100644 src/nos/lib/internet_lib/tcp_input.rel create mode 100644 src/nos/lib/internet_lib/tcpcmd.rel create mode 100644 src/nos/lib/internet_lib/tcphdr.rel create mode 100644 src/nos/lib/internet_lib/tcpout.rel create mode 100644 src/nos/lib/internet_lib/tcpsock.rel create mode 100644 src/nos/lib/internet_lib/tcpsubr.rel create mode 100644 src/nos/lib/internet_lib/tcptimer.rel create mode 100644 src/nos/lib/internet_lib/tcpuser.rel create mode 100644 src/nos/lib/internet_lib/trim.rel create mode 100644 src/nos/lib/internet_lib/ttldec.rel create mode 100644 src/nos/lib/internet_lib/udp.rel create mode 100644 src/nos/lib/internet_lib/udpcmd.rel create mode 100644 src/nos/lib/internet_lib/udphdr.rel create mode 100644 src/nos/lib/internet_lib/udpsock.rel create mode 100644 src/nos/lib/internet_lib/update.rel create mode 100644 src/nos/lib/intl.lib create mode 100644 src/nos/lib/intl_lib/__dgetfail.rel create mode 100644 src/nos/lib/intl_lib/__failtext.rel create mode 100644 src/nos/lib/intl_lib/__fgetfail.rel create mode 100644 src/nos/lib/intl_lib/__getfail.rel create mode 100644 src/nos/lib/intl_lib/_dprintf.rel create mode 100644 src/nos/lib/intl_lib/_fprintf.rel create mode 100644 src/nos/lib/intl_lib/_fputs.rel create mode 100644 src/nos/lib/intl_lib/_printf.rel create mode 100644 src/nos/lib/intl_lib/_puts.rel create mode 100644 src/nos/lib/intl_lib/_strcpy.rel create mode 100644 src/nos/lib/intl_lib/_strlen.rel create mode 100644 src/nos/lib/intl_lib/_strncmp.rel create mode 100644 src/nos/lib/intl_lib/_strncpy.rel create mode 100644 src/nos/lib/intl_lib/_vdprintf.rel create mode 100644 src/nos/lib/intl_lib/_vfprintf.rel create mode 100644 src/nos/lib/intl_lib/_vprintf.rel create mode 100644 src/nos/lib/intl_lib/gettext.rel create mode 100644 src/nos/lib/messages.lib create mode 100644 src/nos/lib/messages_lib/0000_ffff_.rel create mode 100644 src/nos/lib/messages_lib/0001_508a__08_20_08.rel create mode 100644 src/nos/lib/messages_lib/0002_17d6__09_09_20MRU_09_20A.rel create mode 100644 src/nos/lib/messages_lib/0003_002f__09_09_256u_20Lcp_2.rel create mode 100644 src/nos/lib/messages_lib/0004_14b3__09_09_256u_20Lcp_2.rel create mode 100644 src/nos/lib/messages_lib/0005_7313__09_09pid_20_25d_2c.rel create mode 100644 src/nos/lib/messages_lib/0006_bdbf__09_2510ld_20Cmp_2c.rel create mode 100644 src/nos/lib/messages_lib/0007_d27a__09_2510ld_20Cmp_2c.rel create mode 100644 src/nos/lib/messages_lib/0008_c900__09_2510ld_20Search.rel create mode 100644 src/nos/lib/messages_lib/0009_2913__09_25ld.rel create mode 100644 src/nos/lib/messages_lib/000a_1c3a__09_25p_09_25u_09_2.rel create mode 100644 src/nos/lib/messages_lib/000b_b9ba__09_25s.rel create mode 100644 src/nos/lib/messages_lib/000c_21cf__09_25s_09_25s_09_2.rel create mode 100644 src/nos/lib/messages_lib/000d_1d7d__09_25s_09_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/000e_b532__09_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/000f_26e5__09_25u_09_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/0010_7e01__09_28open_20for_20.rel create mode 100644 src/nos/lib/messages_lib/0011_d62d__09_3c_25u_3e.rel create mode 100644 src/nos/lib/messages_lib/0012_9f29__09IN.rel create mode 100644 src/nos/lib/messages_lib/0013_53f6__09Local_3a_09.rel create mode 100644 src/nos/lib/messages_lib/0014_a684__09Remote_3a_09.rel create mode 100644 src/nos/lib/messages_lib/0015_e0e0__09Urgent_20pointer.rel create mode 100644 src/nos/lib/messages_lib/0016_c0f0__09changes_3a_200x_.rel create mode 100644 src/nos/lib/messages_lib/0017_6a8d__09connection_200x_.rel create mode 100644 src/nos/lib/messages_lib/0018_a28a__09connection_20ID_.rel create mode 100644 src/nos/lib/messages_lib/0019_cf72__09delta_20ACK_20an.rel create mode 100644 src/nos/lib/messages_lib/001a_8077__09delta_20ACK_3a_2.rel create mode 100644 src/nos/lib/messages_lib/001b_4a2b__09delta_20ID_3a_20.rel create mode 100644 src/nos/lib/messages_lib/001c_7710__09delta_20SEQ_20im.rel create mode 100644 src/nos/lib/messages_lib/001d_a966__09delta_20SEQ_3a_2.rel create mode 100644 src/nos/lib/messages_lib/001e_f05a__09delta_20WINDOW_3.rel create mode 100644 src/nos/lib/messages_lib/001f_ad18__09increment_20ID_0.rel create mode 100644 src/nos/lib/messages_lib/0020_13bc__09local_20IP_20add.rel create mode 100644 src/nos/lib/messages_lib/0021_efeb__09pid_20_25d_2c_20.rel create mode 100644 src/nos/lib/messages_lib/0022_a0dd__0a.rel create mode 100644 src/nos/lib/messages_lib/0023_f279__0a_20_20_20_20.rel create mode 100644 src/nos/lib/messages_lib/0024_f170__0a_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0025_da94__0a_25s_20_2d_20_25.rel create mode 100644 src/nos/lib/messages_lib/0026_e088__0a_25s_20_2d_20_25.rel create mode 100644 src/nos/lib/messages_lib/0027_c061__0a_2a_2a_2a_20Loca.rel create mode 100644 src/nos/lib/messages_lib/0028_932c__0a_2a_2a_2a_20Unab.rel create mode 100644 src/nos/lib/messages_lib/0029_2592__0a_2a_2a_2a_2a_2a_.rel create mode 100644 src/nos/lib/messages_lib/002a_0887__0aCurrent_20remote.rel create mode 100644 src/nos/lib/messages_lib/002b_ebd8__0aReclaimation_20a.rel create mode 100644 src/nos/lib/messages_lib/002c_c546__0aUsed_20address_2.rel create mode 100644 src/nos/lib/messages_lib/002d_e8fc__0apanic_3a_20.rel create mode 100644 src/nos/lib/messages_lib/002e_4403__20_0aend_0asize_20.rel create mode 100644 src/nos/lib/messages_lib/002f_f289__20_20.rel create mode 100644 src/nos/lib/messages_lib/0030_3839__20_20_20.rel create mode 100644 src/nos/lib/messages_lib/0031_8d78__20_20_20_20.rel create mode 100644 src/nos/lib/messages_lib/0032_de40__20_20_20_20_20.rel create mode 100644 src/nos/lib/messages_lib/0033_3e02__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0034_0534__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0035_3fef__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0036_3164__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0037_c6d7__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0038_9d57__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0039_d46e__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/003a_f37c__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/003b_5dd1__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/003c_0406__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/003d_da67__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/003e_f638__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/003f_74c7__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0040_f10d__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0041_d02b__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0042_0105__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0043_c46d__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0044_3a28__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0045_48df__20_20_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0046_da1e__20_20_20_20_20_20s.rel create mode 100644 src/nos/lib/messages_lib/0047_3800__20_20_20_20_20_26A.rel create mode 100644 src/nos/lib/messages_lib/0048_0e60__20_20_20_20_20_28_.rel create mode 100644 src/nos/lib/messages_lib/0049_d7d4__20_20_20_20_20Broa.rel create mode 100644 src/nos/lib/messages_lib/004a_f5a8__20_20_20_20_20Defa.rel create mode 100644 src/nos/lib/messages_lib/004b_de7b__20_20_20_20_20Host.rel create mode 100644 src/nos/lib/messages_lib/004c_a271__20_20_20_20_20INF.rel create mode 100644 src/nos/lib/messages_lib/004d_1775__20_20_20_20_20IP_2.rel create mode 100644 src/nos/lib/messages_lib/004e_7765__20_20_20_20_20Name.rel create mode 100644 src/nos/lib/messages_lib/004f_6879__20_20_20_20_20Subn.rel create mode 100644 src/nos/lib/messages_lib/0050_dac6__20_20_20_20_25_2d4.rel create mode 100644 src/nos/lib/messages_lib/0051_b576__20_20_20_20_2512s.rel create mode 100644 src/nos/lib/messages_lib/0052_e5e6__20_20_20_20_253u_0.rel create mode 100644 src/nos/lib/messages_lib/0053_ed50__20_20_20_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/0054_3528__20_20_20_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/0055_cbdf__20_20_20_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/0056_f7f3__20_20_20_20_26UCB_.rel create mode 100644 src/nos/lib/messages_lib/0057_9bd9__20_20_20_20In_09TC.rel create mode 100644 src/nos/lib/messages_lib/0058_7788__20_20_20_20Out_09T.rel create mode 100644 src/nos/lib/messages_lib/0059_8f4d__20_20_20_20Record_.rel create mode 100644 src/nos/lib/messages_lib/005a_eacd__20_20_20_20Upload_.rel create mode 100644 src/nos/lib/messages_lib/005b_2da2__20_20_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/005c_ad66__20_20_20PUSH.rel create mode 100644 src/nos/lib/messages_lib/005d_9f3a__20_20_20TCP_20chec.rel create mode 100644 src/nos/lib/messages_lib/005e_5946__20_20_20connection.rel create mode 100644 src/nos/lib/messages_lib/005f_f01f__20_20_3d_3d_3d_3d_.rel create mode 100644 src/nos/lib/messages_lib/0060_cfff__20_20_3d_3d_3d_3d_.rel create mode 100644 src/nos/lib/messages_lib/0061_8181__20_20SR_20_5bnumbe.rel create mode 100644 src/nos/lib/messages_lib/0062_1149__20_20S_5bF_5d_20na.rel create mode 100644 src/nos/lib/messages_lib/0063_47af__20_20remote_20IP_2.rel create mode 100644 src/nos/lib/messages_lib/0064_ccb1__20_20seq_20x_25lx_.rel create mode 100644 src/nos/lib/messages_lib/0065_c997__20_21_3f.rel create mode 100644 src/nos/lib/messages_lib/0066_536e__20_21A.rel create mode 100644 src/nos/lib/messages_lib/0067_27d1__20_21F.rel create mode 100644 src/nos/lib/messages_lib/0068_ceaf__20_21H.rel create mode 100644 src/nos/lib/messages_lib/0069_ab99__20_21N.rel create mode 100644 src/nos/lib/messages_lib/006a_5266__20_21P.rel create mode 100644 src/nos/lib/messages_lib/006b_60fd__20_21S.rel create mode 100644 src/nos/lib/messages_lib/006c_bac3__20_23_20_20S_23_20.rel create mode 100644 src/nos/lib/messages_lib/006d_9a7d__20_25_2d15s.rel create mode 100644 src/nos/lib/messages_lib/006e_85f4__20_25_2d3d_20.rel create mode 100644 src/nos/lib/messages_lib/006f_a413__20_2502u_2f_2502u.rel create mode 100644 src/nos/lib/messages_lib/0070_d8f4__20_2502u_2f_2502u_.rel create mode 100644 src/nos/lib/messages_lib/0071_4d6e__20_2502x.rel create mode 100644 src/nos/lib/messages_lib/0072_cad1__20_2510lu_2510lu_2.rel create mode 100644 src/nos/lib/messages_lib/0073_43b6__20_254d_20_254d.rel create mode 100644 src/nos/lib/messages_lib/0074_78a4__20_258s_20_20_20_2.rel create mode 100644 src/nos/lib/messages_lib/0075_6904__20_25lu_20bps_0a.rel create mode 100644 src/nos/lib/messages_lib/0076_269f__20_25s.rel create mode 100644 src/nos/lib/messages_lib/0077_c302__20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/0078_10eb__20_25s_20_25s_20_2.rel create mode 100644 src/nos/lib/messages_lib/0079_c236__20_25s_25s.rel create mode 100644 src/nos/lib/messages_lib/007a_3c84__20_25s_2b_25x.rel create mode 100644 src/nos/lib/messages_lib/007b_97d2__20_25u_0a.rel create mode 100644 src/nos/lib/messages_lib/007c_5984__20_25u_2d_3e_25u.rel create mode 100644 src/nos/lib/messages_lib/007d_98a5__20_28_25ld_20ms_29.rel create mode 100644 src/nos/lib/messages_lib/007e_9556__20_28_25s_20seek_3.rel create mode 100644 src/nos/lib/messages_lib/007f_6268__20_28_25s_29_0a.rel create mode 100644 src/nos/lib/messages_lib/0080_3f71__20_28ASCII_20dump_.rel create mode 100644 src/nos/lib/messages_lib/0081_05b3__20_28Hex_2fASCII_2.rel create mode 100644 src/nos/lib/messages_lib/0082_0cd7__20_28S_29.rel create mode 100644 src/nos/lib/messages_lib/0083_ef5f__20_28headers_20onl.rel create mode 100644 src/nos/lib/messages_lib/0084_c04d__20_28published_29.rel create mode 100644 src/nos/lib/messages_lib/0085_ac28__20_2a_2a_2a.rel create mode 100644 src/nos/lib/messages_lib/0086_8841__20_2d_20.rel create mode 100644 src/nos/lib/messages_lib/0087_ace7__20_2d_20no_20broad.rel create mode 100644 src/nos/lib/messages_lib/0088_01a0__20APND.rel create mode 100644 src/nos/lib/messages_lib/0089_2da0__20Ack_20x_25lx.rel create mode 100644 src/nos/lib/messages_lib/008a_f35d__20BUSY.rel create mode 100644 src/nos/lib/messages_lib/008b_43af__20CE.rel create mode 100644 src/nos/lib/messages_lib/008c_d667__20CHECKSUM_20ERROR.rel create mode 100644 src/nos/lib/messages_lib/008d_5947__20CHOKE.rel create mode 100644 src/nos/lib/messages_lib/008e_3c3c__20DF.rel create mode 100644 src/nos/lib/messages_lib/008f_26b0__20Data_20_25u.rel create mode 100644 src/nos/lib/messages_lib/0090_5125__20EOF.rel create mode 100644 src/nos/lib/messages_lib/0091_2269__20ERR.rel create mode 100644 src/nos/lib/messages_lib/0092_869e__20IPaddr_20_25s.rel create mode 100644 src/nos/lib/messages_lib/0093_d267__20Illegal_20I_2dfi.rel create mode 100644 src/nos/lib/messages_lib/0094_d316__20Invalid_20contro.rel create mode 100644 src/nos/lib/messages_lib/0095_1e4f__20Invalid_20seq_20.rel create mode 100644 src/nos/lib/messages_lib/0096_fd02__20MC_3a_20int_20_2.rel create mode 100644 src/nos/lib/messages_lib/0097_eb24__20MF.rel create mode 100644 src/nos/lib/messages_lib/0098_747e__20MORE.rel create mode 100644 src/nos/lib/messages_lib/0099_c5ed__20MSS_20_25u.rel create mode 100644 src/nos/lib/messages_lib/009a_3976__20NAK.rel create mode 100644 src/nos/lib/messages_lib/009b_c092__20NR_3d_25d.rel create mode 100644 src/nos/lib/messages_lib/009c_dc29__20NS_3d_25d.rel create mode 100644 src/nos/lib/messages_lib/009d_df24__20RX_3a_20int_20_2.rel create mode 100644 src/nos/lib/messages_lib/009e_78a4__20Raw_20output.rel create mode 100644 src/nos/lib/messages_lib/009f_a393__20Remote_3a_20_25s.rel create mode 100644 src/nos/lib/messages_lib/00a0_d7c2__20Retry.rel create mode 100644 src/nos/lib/messages_lib/00a1_d322__20State_3a_20_25s_.rel create mode 100644 src/nos/lib/messages_lib/00a2_c86b__20TMP.rel create mode 100644 src/nos/lib/messages_lib/00a3_2dcc__20TSTAMP_20_25lu_2.rel create mode 100644 src/nos/lib/messages_lib/00a4_e8c1__20TX_3a_20int_20_2.rel create mode 100644 src/nos/lib/messages_lib/00a5_d70d__20Too_2dlong_20I_2.rel create mode 100644 src/nos/lib/messages_lib/00a6_5a85__20UP_20x_25x.rel create mode 100644 src/nos/lib/messages_lib/00a7_2210__20Unack_3a_20_25_2.rel create mode 100644 src/nos/lib/messages_lib/00a8_3a68__20Unknown_20passwo.rel create mode 100644 src/nos/lib/messages_lib/00a9_23f3__20Vr_20_3d_20_25d_.rel create mode 100644 src/nos/lib/messages_lib/00aa_a984__20WSCALE_20_25u.rel create mode 100644 src/nos/lib/messages_lib/00ab_1d25__20Wnd_20_25u.rel create mode 100644 src/nos/lib/messages_lib/00ac_e77d__20_5b_25s_5d_20_25.rel create mode 100644 src/nos/lib/messages_lib/00ad_7762__20_5bcts_20flow_20.rel create mode 100644 src/nos/lib/messages_lib/00ae_2f4d__20_5brlsd_20line_2.rel create mode 100644 src/nos/lib/messages_lib/00af_db59__20_5btrigger_200x_.rel create mode 100644 src/nos/lib/messages_lib/00b0_bc24__20asy_20.rel create mode 100644 src/nos/lib/messages_lib/00b1_c96a__20bad_20header_21_.rel create mode 100644 src/nos/lib/messages_lib/00b2_0acc__20bad_20packet_0a.rel create mode 100644 src/nos/lib/messages_lib/00b3_d795__20cmd_20_25u.rel create mode 100644 src/nos/lib/messages_lib/00b4_1813__20code_20_25s.rel create mode 100644 src/nos/lib/messages_lib/00b5_ad83__20dest_20_25s.rel create mode 100644 src/nos/lib/messages_lib/00b6_e3a3__20dest_20_25s_20_2.rel create mode 100644 src/nos/lib/messages_lib/00b7_4976__20diag.rel create mode 100644 src/nos/lib/messages_lib/00b8_e36a__20file.rel create mode 100644 src/nos/lib/messages_lib/00b9_5e9d__20full.rel create mode 100644 src/nos/lib/messages_lib/00ba_4c62__20hwaddr_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/00bb_ed56__20hwlen_20_25u.rel create mode 100644 src/nos/lib/messages_lib/00bc_2971__20hwtype_20_25s.rel create mode 100644 src/nos/lib/messages_lib/00bd_3119__20id_20_25u_20offs.rel create mode 100644 src/nos/lib/messages_lib/00be_8f2f__20id_20_25u_20pctl.rel create mode 100644 src/nos/lib/messages_lib/00bf_20f7__20id_20_25u_20seq_.rel create mode 100644 src/nos/lib/messages_lib/00c0_8c07__20idle_20timer_20_.rel create mode 100644 src/nos/lib/messages_lib/00c1_7166__20input.rel create mode 100644 src/nos/lib/messages_lib/00c2_6c92__20len_20_25u.rel create mode 100644 src/nos/lib/messages_lib/00c3_0c74__20line.rel create mode 100644 src/nos/lib/messages_lib/00c4_2537__20new_20gateway_20.rel create mode 100644 src/nos/lib/messages_lib/00c5_ea43__20new_20gateway_20.rel create mode 100644 src/nos/lib/messages_lib/00c6_e3db__20none.rel create mode 100644 src/nos/lib/messages_lib/00c7_826b__20offset_20_25u_20.rel create mode 100644 src/nos/lib/messages_lib/00c8_6680__20op_20_25u.rel create mode 100644 src/nos/lib/messages_lib/00c9_f7d5__20op_20REPLY.rel create mode 100644 src/nos/lib/messages_lib/00ca_5e3d__20op_20REQUEST.rel create mode 100644 src/nos/lib/messages_lib/00cb_9500__20op_20REVERSE_20R.rel create mode 100644 src/nos/lib/messages_lib/00cc_3faa__20op_20REVERSE_20R.rel create mode 100644 src/nos/lib/messages_lib/00cd_8a3d__20output.rel create mode 100644 src/nos/lib/messages_lib/00ce_5896__20pid_3d0x_25x_0a.rel create mode 100644 src/nos/lib/messages_lib/00cf_aba6__20pid_3dARP_0a.rel create mode 100644 src/nos/lib/messages_lib/00d0_d4e9__20pid_3dIP_0a.rel create mode 100644 src/nos/lib/messages_lib/00d1_a349__20pid_3dNET_2fROM_.rel create mode 100644 src/nos/lib/messages_lib/00d2_932f__20pid_3dTEXNET_0a.rel create mode 100644 src/nos/lib/messages_lib/00d3_4927__20pid_3dText_0a.rel create mode 100644 src/nos/lib/messages_lib/00d4_c207__20pid_3dX_2e25_0a.rel create mode 100644 src/nos/lib/messages_lib/00d5_5760__20pipe.rel create mode 100644 src/nos/lib/messages_lib/00d6_ac0a__20pointer_20_25u.rel create mode 100644 src/nos/lib/messages_lib/00d7_5557__20prot_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/00d8_0187__20prot_20_25u_0a.rel create mode 100644 src/nos/lib/messages_lib/00d9_75a2__20prot_200x_25x_20.rel create mode 100644 src/nos/lib/messages_lib/00da_3541__20prot_20IP.rel create mode 100644 src/nos/lib/messages_lib/00db_1888__20receive_20_20_2d.rel create mode 100644 src/nos/lib/messages_lib/00dc_f2f3__20sock.rel create mode 100644 src/nos/lib/messages_lib/00dd_c067__20spi_20_25lx.rel create mode 100644 src/nos/lib/messages_lib/00de_2902__20sw_20over_20_25l.rel create mode 100644 src/nos/lib/messages_lib/00df_0bfc__20tos_20_25u.rel create mode 100644 src/nos/lib/messages_lib/00e0_e1c5__20trace_20file_3a_.rel create mode 100644 src/nos/lib/messages_lib/00e1_ca97__20tracing_20off_0a.rel create mode 100644 src/nos/lib/messages_lib/00e2_be19__20transmit_20_2d_2.rel create mode 100644 src/nos/lib/messages_lib/00e3_afd2__20ttl_20_25d_0a.rel create mode 100644 src/nos/lib/messages_lib/00e4_6f53__20txseq_20_25d_20r.rel create mode 100644 src/nos/lib/messages_lib/00e5_c8f3__20type_200x_25x_0a.rel create mode 100644 src/nos/lib/messages_lib/00e6_6772__20type_20ARP_0a.rel create mode 100644 src/nos/lib/messages_lib/00e7_5c83__20type_20IP_0a.rel create mode 100644 src/nos/lib/messages_lib/00e8_f937__20type_20REVARP_0a.rel create mode 100644 src/nos/lib/messages_lib/00e9_c53a__20v.rel create mode 100644 src/nos/lib/messages_lib/00ea_9158__20vers_20_25u_20en.rel create mode 100644 src/nos/lib/messages_lib/00eb_994d__20wnd_20_25d.rel create mode 100644 src/nos/lib/messages_lib/00ec_426e__20_7c_20.rel create mode 100644 src/nos/lib/messages_lib/00ed_3f0c__21.rel create mode 100644 src/nos/lib/messages_lib/00ee_f9eb__21_21_20_25s_20_25.rel create mode 100644 src/nos/lib/messages_lib/00ef_ef2d__21_21_20maximum_20.rel create mode 100644 src/nos/lib/messages_lib/00f0_55d7__22_25s_22_20_2d_20.rel create mode 100644 src/nos/lib/messages_lib/00f1_60ae__23_20queries_20eac.rel create mode 100644 src/nos/lib/messages_lib/00f2_1acc__23_20secs_20to_20w.rel create mode 100644 src/nos/lib/messages_lib/00f3_fb95__25_2d10_2e10s_20_2.rel create mode 100644 src/nos/lib/messages_lib/00f4_3035__25_2d10s_20IP_20ad.rel create mode 100644 src/nos/lib/messages_lib/00f5_01be__25_2d10s_25_2d17s.rel create mode 100644 src/nos/lib/messages_lib/00f6_4da0__25_2d10s_25_2d17s_.rel create mode 100644 src/nos/lib/messages_lib/00f7_ff4a__25_2d10s_25_2d6s.rel create mode 100644 src/nos/lib/messages_lib/00f8_e1c2__25_2d11s_25_2d9s_2.rel create mode 100644 src/nos/lib/messages_lib/00f9_7335__25_2d13s.rel create mode 100644 src/nos/lib/messages_lib/00fa_27e5__25_2d15s.rel create mode 100644 src/nos/lib/messages_lib/00fb_0d8d__25_2d16s.rel create mode 100644 src/nos/lib/messages_lib/00fc_e560__25_2d16s_20_20.rel create mode 100644 src/nos/lib/messages_lib/00fd_f903__25_2d16s_25_2d3u_2.rel create mode 100644 src/nos/lib/messages_lib/00fe_2609__25_2d16s_25_2d9lu_.rel create mode 100644 src/nos/lib/messages_lib/00ff_1455__25_2d17s.rel create mode 100644 src/nos/lib/messages_lib/0100_e920__25_2d20s_258lu_258.rel create mode 100644 src/nos/lib/messages_lib/0101_8589__25_2d22s.rel create mode 100644 src/nos/lib/messages_lib/0102_b616__25_2d22s_0a.rel create mode 100644 src/nos/lib/messages_lib/0103_9c51__25_2d23s.rel create mode 100644 src/nos/lib/messages_lib/0104_bf59__25_2d2u.rel create mode 100644 src/nos/lib/messages_lib/0105_6601__25_2d32s_20_28_25l.rel create mode 100644 src/nos/lib/messages_lib/0106_a681__25_2d3u.rel create mode 100644 src/nos/lib/messages_lib/0107_ea81__25_2d4d.rel create mode 100644 src/nos/lib/messages_lib/0108_6f94__25_2d4d_255d_20_25.rel create mode 100644 src/nos/lib/messages_lib/0109_eb89__25_2d4u.rel create mode 100644 src/nos/lib/messages_lib/010a_2455__25_2d5ld.rel create mode 100644 src/nos/lib/messages_lib/010b_90e5__25_2d7lu.rel create mode 100644 src/nos/lib/messages_lib/010c_8982__25_2d7s_20_25_2d8s.rel create mode 100644 src/nos/lib/messages_lib/010d_da22__25_2d8lu.rel create mode 100644 src/nos/lib/messages_lib/010e_d1e2__25_2ds.rel create mode 100644 src/nos/lib/messages_lib/010f_1e56__2502x.rel create mode 100644 src/nos/lib/messages_lib/0110_3773__2504x_20_20.rel create mode 100644 src/nos/lib/messages_lib/0111_6df9__2504x_20_20_2504x_.rel create mode 100644 src/nos/lib/messages_lib/0112_aa0a__2504x_3a_2504x.rel create mode 100644 src/nos/lib/messages_lib/0113_83ad__2510lu_20In_2c_20_.rel create mode 100644 src/nos/lib/messages_lib/0114_cbd3__2510lu_20Out_2c_20.rel create mode 100644 src/nos/lib/messages_lib/0115_2875__2510lu_2510lu_255l.rel create mode 100644 src/nos/lib/messages_lib/0116_a689__251s_20_253d_20_20.rel create mode 100644 src/nos/lib/messages_lib/0117_e9b8__252d_20_25_2d6s_20.rel create mode 100644 src/nos/lib/messages_lib/0118_b620__252d_20_25_2d6s_20.rel create mode 100644 src/nos/lib/messages_lib/0119_1703__253d_3a.rel create mode 100644 src/nos/lib/messages_lib/011a_b932__254d_20_25_2d8s_25.rel create mode 100644 src/nos/lib/messages_lib/011b_936b__254s.rel create mode 100644 src/nos/lib/messages_lib/011c_4a96__258lu.rel create mode 100644 src/nos/lib/messages_lib/011d_5eaf__258lu_0a.rel create mode 100644 src/nos/lib/messages_lib/011e_3acb__258s.rel create mode 100644 src/nos/lib/messages_lib/011f_3341__258u_2510u_2511lu_.rel create mode 100644 src/nos/lib/messages_lib/0120_fd73__259p_20_20_20_253d.rel create mode 100644 src/nos/lib/messages_lib/0121_b8a6__259p_20_25_2d8d_25.rel create mode 100644 src/nos/lib/messages_lib/0122_1719__259p_20_25_2d9s_25.rel create mode 100644 src/nos/lib/messages_lib/0123_1260__259p_256u_20_20_25.rel create mode 100644 src/nos/lib/messages_lib/0124_482b__259p_256u_256u_20_.rel create mode 100644 src/nos/lib/messages_lib/0125_fcae__25c.rel create mode 100644 src/nos/lib/messages_lib/0126_6d8a__25c_20.rel create mode 100644 src/nos/lib/messages_lib/0127_3d14__25c_20_257s_20_257.rel create mode 100644 src/nos/lib/messages_lib/0128_22d3__25c_25c_25c.rel create mode 100644 src/nos/lib/messages_lib/0129_4b6e__25c_25c_25c_0a.rel create mode 100644 src/nos/lib/messages_lib/012a_2970__25c_25c_25c_253d_2.rel create mode 100644 src/nos/lib/messages_lib/012b_8514__25c_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/012c_086d__25c_5b2J.rel create mode 100644 src/nos/lib/messages_lib/012d_8811__25d.rel create mode 100644 src/nos/lib/messages_lib/012e_aeda__25d_0a.rel create mode 100644 src/nos/lib/messages_lib/012f_cd50__25d_20message_25s_.rel create mode 100644 src/nos/lib/messages_lib/0130_ea62__25ld.rel create mode 100644 src/nos/lib/messages_lib/0131_eb6a__25lu.rel create mode 100644 src/nos/lib/messages_lib/0132_63ed__25lu_0a.rel create mode 100644 src/nos/lib/messages_lib/0133_f325__25lu_2f_25lu_0a.rel create mode 100644 src/nos/lib/messages_lib/0134_d273__25p_20.rel create mode 100644 src/nos/lib/messages_lib/0135_1c93__25p_20_256lu.rel create mode 100644 src/nos/lib/messages_lib/0136_ec2f__25s.rel create mode 100644 src/nos/lib/messages_lib/0137_7643__25s_0a.rel create mode 100644 src/nos/lib/messages_lib/0138_0276__25s_0a_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/0139_f81b__25s_20.rel create mode 100644 src/nos/lib/messages_lib/013a_8b7d__25s_20_2502d_2502d.rel create mode 100644 src/nos/lib/messages_lib/013b_7be3__25s_20_25p_0a.rel create mode 100644 src/nos/lib/messages_lib/013c_518b__25s_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/013d_ca49__25s_20_25s_3a_20_2.rel create mode 100644 src/nos/lib/messages_lib/013e_43c6__25s_20_25s_3a_20Er.rel create mode 100644 src/nos/lib/messages_lib/013f_b8b7__25s_20_2d_20.rel create mode 100644 src/nos/lib/messages_lib/0140_1170__25s_20_2d_20Differ.rel create mode 100644 src/nos/lib/messages_lib/0141_d4cc__25s_20_2d_20Remote.rel create mode 100644 src/nos/lib/messages_lib/0142_4968__25s_20_2d_20Same_0.rel create mode 100644 src/nos/lib/messages_lib/0143_ace2__25s_20dialer_3a_20.rel create mode 100644 src/nos/lib/messages_lib/0144_933b__25s_20errno_20_25d.rel create mode 100644 src/nos/lib/messages_lib/0145_f768__25s_20file_25s_2e_.rel create mode 100644 src/nos/lib/messages_lib/0146_c691__25s_20is_20unreach.rel create mode 100644 src/nos/lib/messages_lib/0147_a4a4__25s_20logged_20in.rel create mode 100644 src/nos/lib/messages_lib/0148_a64e__25s_20logged_20in_.rel create mode 100644 src/nos/lib/messages_lib/0149_b314__25s_20refs_20to_20.rel create mode 100644 src/nos/lib/messages_lib/014a_bd91__25s_20remain_20_25.rel create mode 100644 src/nos/lib/messages_lib/014b_bf9e__25s_20thru_20.rel create mode 100644 src/nos/lib/messages_lib/014c_243b__25s_20type_20_25s_.rel create mode 100644 src/nos/lib/messages_lib/014d_7d69__25s_25_25_25s_2ebb.rel create mode 100644 src/nos/lib/messages_lib/014e_d324__25s_25c_0a.rel create mode 100644 src/nos/lib/messages_lib/014f_ce9c__25s_25c_25c_25c.rel create mode 100644 src/nos/lib/messages_lib/0150_910e__25s_25s.rel create mode 100644 src/nos/lib/messages_lib/0151_46b5__25s_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/0152_4d3a__25s_25s_0a_0a.rel create mode 100644 src/nos/lib/messages_lib/0153_47c0__25s_3a.rel create mode 100644 src/nos/lib/messages_lib/0154_6911__25s_3a_0a.rel create mode 100644 src/nos/lib/messages_lib/0155_e749__25s_3a_20.rel create mode 100644 src/nos/lib/messages_lib/0156_650d__25s_3a_20_25d_20me.rel create mode 100644 src/nos/lib/messages_lib/0157_86f5__25s_3a_20_25ld_0a.rel create mode 100644 src/nos/lib/messages_lib/0158_7189__25s_3a_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/0159_35bd__25s_3a_20_25s_2c.rel create mode 100644 src/nos/lib/messages_lib/015a_adab__25s_3a_20Interface.rel create mode 100644 src/nos/lib/messages_lib/015b_5f8a__25s_3a_20PPP_2fPAP.rel create mode 100644 src/nos/lib/messages_lib/015c_0cde__25s_3a_20bad_20dev.rel create mode 100644 src/nos/lib/messages_lib/015d_5351__25s_3a_20bad_20ino.rel create mode 100644 src/nos/lib/messages_lib/015e_8c96__25s_3a_20corrupted.rel create mode 100644 src/nos/lib/messages_lib/015f_d157__25s_3a_20fs_20of_2.rel create mode 100644 src/nos/lib/messages_lib/0160_1d98__25s_3a_20local_20n.rel create mode 100644 src/nos/lib/messages_lib/0161_bba5__25s_3a_20mode_20_2.rel create mode 100644 src/nos/lib/messages_lib/0162_60cc__25s_3a_20not_20a_2.rel create mode 100644 src/nos/lib/messages_lib/0163_4ed5__25s_3a_20release_5.rel create mode 100644 src/nos/lib/messages_lib/0164_04ae__25s_3a_20rtt_20_25.rel create mode 100644 src/nos/lib/messages_lib/0165_db35__25s_3a_20srtt_20_2.rel create mode 100644 src/nos/lib/messages_lib/0166_65f3__25s_3c_25ld_40_25s.rel create mode 100644 src/nos/lib/messages_lib/0167_6e45__25s_3e_20_25s_20_2.rel create mode 100644 src/nos/lib/messages_lib/0168_205d__25s_3e_20Invalid_2.rel create mode 100644 src/nos/lib/messages_lib/0169_c86f__25s_40_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/016a_82c1__25s_40_25s_3a_0a.rel create mode 100644 src/nos/lib/messages_lib/016b_9fa6__25sMAILER_2dDAEMON.rel create mode 100644 src/nos/lib/messages_lib/016c_c284__25sR_0a.rel create mode 100644 src/nos/lib/messages_lib/016d_2293__25u_0a.rel create mode 100644 src/nos/lib/messages_lib/016e_c0bd__25u_20additional_3.rel create mode 100644 src/nos/lib/messages_lib/016f_7db0__25u_20answers_3a_0.rel create mode 100644 src/nos/lib/messages_lib/0170_7c48__25u_20authority_3a.rel create mode 100644 src/nos/lib/messages_lib/0171_b843__25u_20questions_3a.rel create mode 100644 src/nos/lib/messages_lib/0172_af86__25u_3a_20calls_20_.rel create mode 100644 src/nos/lib/messages_lib/0173_52fc__25x.rel create mode 100644 src/nos/lib/messages_lib/0174_b099__26AXB_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0175_7bf6__26CB_20_20_20_20_2.rel create mode 100644 src/nos/lib/messages_lib/0176_c497__26TCB_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0177_f73b__26UCB_20_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0178_aa89__27_25c_27_0a.rel create mode 100644 src/nos/lib/messages_lib/0179_a2cd__28.rel create mode 100644 src/nos/lib/messages_lib/017a_ba4c__28_252u_29_25_2d20.rel create mode 100644 src/nos/lib/messages_lib/017b_52bf__28F_29.rel create mode 100644 src/nos/lib/messages_lib/017c_93fe__28P_29.rel create mode 100644 src/nos/lib/messages_lib/017d_38a6__28P_2fF_29.rel create mode 100644 src/nos/lib/messages_lib/017e_7b70__28compressed_20ALL.rel create mode 100644 src/nos/lib/messages_lib/017f_c1c3__28hopcheck_29_20IC.rel create mode 100644 src/nos/lib/messages_lib/0180_565f__28missing_20UI_21_.rel create mode 100644 src/nos/lib/messages_lib/0181_f935__28not_20odd_21_29_.rel create mode 100644 src/nos/lib/messages_lib/0182_abc9__29_0a.rel create mode 100644 src/nos/lib/messages_lib/0183_bfa2__2a_2a_20smtp_3a_20.rel create mode 100644 src/nos/lib/messages_lib/0184_1969__2a_2a_2a.rel create mode 100644 src/nos/lib/messages_lib/0185_a448__2a_2a_2a_20Done_0a.rel create mode 100644 src/nos/lib/messages_lib/0186_c993__2a_2a_2a_20Unable_.rel create mode 100644 src/nos/lib/messages_lib/0187_b489__2a_2a_2a_2a_2a_2a_.rel create mode 100644 src/nos/lib/messages_lib/0188_5b29__2c_20.rel create mode 100644 src/nos/lib/messages_lib/0189_1a71__2c_20err_20_25d.rel create mode 100644 src/nos/lib/messages_lib/018a_099c__2d_2d_2d_2d_2d_20E.rel create mode 100644 src/nos/lib/messages_lib/018b_01ea__2d_2d_2d_2d_2d_20F.rel create mode 100644 src/nos/lib/messages_lib/018c_04ae__2d_2d_2d_2d_2d_2d_.rel create mode 100644 src/nos/lib/messages_lib/018d_1b54__2d_2d_2d_2d_2d_2d_.rel create mode 100644 src/nos/lib/messages_lib/018e_3d1a__2d_2d_2d_2d_2d_2d_.rel create mode 100644 src/nos/lib/messages_lib/018f_8ddf__2d_3e_25s.rel create mode 100644 src/nos/lib/messages_lib/0190_589d__2d_3e_25s_20ihl_20.rel create mode 100644 src/nos/lib/messages_lib/0191_e6c1__2e_0a.rel create mode 100644 src/nos/lib/messages_lib/0192_ed84__2f_25lu_20ms.rel create mode 100644 src/nos/lib/messages_lib/0193_6d9b__2f_25lu_20ms_0a.rel create mode 100644 src/nos/lib/messages_lib/0194_a44f__2f_25lu_20ms_3b_20.rel create mode 100644 src/nos/lib/messages_lib/0195_096e__2f_25u.rel create mode 100644 src/nos/lib/messages_lib/0196_96dc__2fEX.rel create mode 100644 src/nos/lib/messages_lib/0197_79e7_0_25o.rel create mode 100644 src/nos/lib/messages_lib/0198_8157_007Incoming_20_25s_.rel create mode 100644 src/nos/lib/messages_lib/0199_b04e_0x_2503x_20_20_20_2.rel create mode 100644 src/nos/lib/messages_lib/019a_3f3a_0x_2504x_0a.rel create mode 100644 src/nos/lib/messages_lib/019b_8308_0x_2508lx_0a.rel create mode 100644 src/nos/lib/messages_lib/019c_ab8d_0x_25x.rel create mode 100644 src/nos/lib/messages_lib/019d_6f63_0x_25x_09_09_25ld_0.rel create mode 100644 src/nos/lib/messages_lib/019e_fea8_0x_25x_09_09_25ld_0.rel create mode 100644 src/nos/lib/messages_lib/019f_f01c_0x_25x_0a.rel create mode 100644 src/nos/lib/messages_lib/01a0_d635_100_20Warning_3a_20.rel create mode 100644 src/nos/lib/messages_lib/01a1_3f47_150_20Opening_20dat.rel create mode 100644 src/nos/lib/messages_lib/01a2_67ab_200_20.rel create mode 100644 src/nos/lib/messages_lib/01a3_cc8d_200_20MKD_20ok_0a.rel create mode 100644 src/nos/lib/messages_lib/01a4_6c3a_200_20Ok_0a.rel create mode 100644 src/nos/lib/messages_lib/01a5_ba32_200_20Port_20comman.rel create mode 100644 src/nos/lib/messages_lib/01a6_1db7_200_20Type_20_25s_2.rel create mode 100644 src/nos/lib/messages_lib/01a7_1192_215_20_25s_20Type_3.rel create mode 100644 src/nos/lib/messages_lib/01a8_01fe_220_20_25s_20FTP_20.rel create mode 100644 src/nos/lib/messages_lib/01a9_7804_221_20Goodbye_21_0a.rel create mode 100644 src/nos/lib/messages_lib/01aa_3f54_226_20File_20receiv.rel create mode 100644 src/nos/lib/messages_lib/01ab_caea_226_20File_20sent_2.rel create mode 100644 src/nos/lib/messages_lib/01ac_9fe8_230_20Logged_20in_0.rel create mode 100644 src/nos/lib/messages_lib/01ad_55db_250_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/01ae_c720_250_20File_20delete.rel create mode 100644 src/nos/lib/messages_lib/01af_de54_250_2d_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/01b0_9400_257_20_22_25s_22_20.rel create mode 100644 src/nos/lib/messages_lib/01b1_24f1_331_20Enter_20PASS_.rel create mode 100644 src/nos/lib/messages_lib/01b2_273f_421_20System_20over.rel create mode 100644 src/nos/lib/messages_lib/01b3_e43d_425_20Data_20connec.rel create mode 100644 src/nos/lib/messages_lib/01b4_7e66_500_20Unknown_20com.rel create mode 100644 src/nos/lib/messages_lib/01b5_3d39_500_20Unsupported_2.rel create mode 100644 src/nos/lib/messages_lib/01b6_fe7e_501_20Bad_20port_20.rel create mode 100644 src/nos/lib/messages_lib/01b7_065e_501_20Only_20logica.rel create mode 100644 src/nos/lib/messages_lib/01b8_a2bf_501_20Unknown_20typ.rel create mode 100644 src/nos/lib/messages_lib/01b9_41cf_502_20Command_20not.rel create mode 100644 src/nos/lib/messages_lib/01ba_f576_503_20Login_20with_.rel create mode 100644 src/nos/lib/messages_lib/01bb_7dc2_530_20Please_20log_.rel create mode 100644 src/nos/lib/messages_lib/01bc_c53a_550_20Can_27t_20rea.rel create mode 100644 src/nos/lib/messages_lib/01bd_4770_550_20Delete_20fail.rel create mode 100644 src/nos/lib/messages_lib/01be_38c3_550_20Permission_20.rel create mode 100644 src/nos/lib/messages_lib/01bf_95c1_552_20Write_20error.rel create mode 100644 src/nos/lib/messages_lib/01c0_7eaf_553_20Can_27t_20cre.rel create mode 100644 src/nos/lib/messages_lib/01c1_f0b2_553_20Can_27t_20rea.rel create mode 100644 src/nos/lib/messages_lib/01c2_b04b__3a_20_25d_0a.rel create mode 100644 src/nos/lib/messages_lib/01c3_6aba__3a_20_25ld_0a.rel create mode 100644 src/nos/lib/messages_lib/01c4_8cd1__3a_20_25s.rel create mode 100644 src/nos/lib/messages_lib/01c5_68d2__3a_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/01c6_3c02__3a_20_25u_0a.rel create mode 100644 src/nos/lib/messages_lib/01c7_6692__3b_20Tries_3a_20_2.rel create mode 100644 src/nos/lib/messages_lib/01c8_697b__3c_25ld_40_25s_3e_.rel create mode 100644 src/nos/lib/messages_lib/01c9_2587__3c_25s_40_25s_2ebb.rel create mode 100644 src/nos/lib/messages_lib/01ca_3152__3c_3d_3d_25s.rel create mode 100644 src/nos/lib/messages_lib/01cb_defc__3c_3d_3d_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/01cc_016b__3d_3d_3eARTICLE_20.rel create mode 100644 src/nos/lib/messages_lib/01cd_c133__3d_3d_3eNEWNEWS_20.rel create mode 100644 src/nos/lib/messages_lib/01ce_696c__3d_3d_3eQUIT_0a.rel create mode 100644 src/nos/lib/messages_lib/01cf_396e__3d_3dNo_20response.rel create mode 100644 src/nos/lib/messages_lib/01d0_c6f3__3f.rel create mode 100644 src/nos/lib/messages_lib/01d1_4d83__40.rel create mode 100644 src/nos/lib/messages_lib/01d2_23d2__40_25s.rel create mode 100644 src/nos/lib/messages_lib/01d3_7f61_ARP_3a_20len_20_25d.rel create mode 100644 src/nos/lib/messages_lib/01d4_124c_ARTICLE_20_25s.rel create mode 100644 src/nos/lib/messages_lib/01d5_109d_AX25_20receive_20wi.rel create mode 100644 src/nos/lib/messages_lib/01d6_f4e0_AX25_20version.rel create mode 100644 src/nos/lib/messages_lib/01d7_818f_AX25_3a_20.rel create mode 100644 src/nos/lib/messages_lib/01d8_f05c_Abort_0d_0a.rel create mode 100644 src/nos/lib/messages_lib/01d9_6caf_Aborted_2e.rel create mode 100644 src/nos/lib/messages_lib/01da_f2cb_Aborted_2e_0a.rel create mode 100644 src/nos/lib/messages_lib/01db_537a_Accept_0a.rel create mode 100644 src/nos/lib/messages_lib/01dc_b988_Ack_20delay_20time_.rel create mode 100644 src/nos/lib/messages_lib/01dd_fccc_Active_20RIP_20outp.rel create mode 100644 src/nos/lib/messages_lib/01de_e216_Address_2fControl_2.rel create mode 100644 src/nos/lib/messages_lib/01df_1fbc_All_20groups_20are_.rel create mode 100644 src/nos/lib/messages_lib/01e0_4a0c_Allow_20ACCM.rel create mode 100644 src/nos/lib/messages_lib/01e1_8e02_Allow_20Address.rel create mode 100644 src/nos/lib/messages_lib/01e2_7b21_Allow_20Address_2fC.rel create mode 100644 src/nos/lib/messages_lib/01e3_5003_Allow_20Authenticat.rel create mode 100644 src/nos/lib/messages_lib/01e4_081e_Allow_20Compression.rel create mode 100644 src/nos/lib/messages_lib/01e5_14d8_Allow_20MRU.rel create mode 100644 src/nos/lib/messages_lib/01e6_5c94_Allow_20Magic_20Num.rel create mode 100644 src/nos/lib/messages_lib/01e7_33ea_Allow_20Protocol_20.rel create mode 100644 src/nos/lib/messages_lib/01e8_a5f9_Already_20have_20_2.rel create mode 100644 src/nos/lib/messages_lib/01e9_8eaf_Arcnet_3a_20len_20_.rel create mode 100644 src/nos/lib/messages_lib/01ea_52c7_Argument_20missing_.rel create mode 100644 src/nos/lib/messages_lib/01eb_3ed8_Ascii_0a.rel create mode 100644 src/nos/lib/messages_lib/01ec_7cb2_Attach_20device_20f.rel create mode 100644 src/nos/lib/messages_lib/01ed_ec38_Attach_20netrom_20i.rel create mode 100644 src/nos/lib/messages_lib/01ee_ee22_Attended_20flag.rel create mode 100644 src/nos/lib/messages_lib/01ef_0443_Available_20areas_2.rel create mode 100644 src/nos/lib/messages_lib/01f0_6999_Backoff_20Level_20_.rel create mode 100644 src/nos/lib/messages_lib/01f1_9716_Bad_20digipeater_20.rel create mode 100644 src/nos/lib/messages_lib/01f2_0b9f_Bad_20syntax_2e_0a.rel create mode 100644 src/nos/lib/messages_lib/01f3_e884_Bad_20target_20_25s.rel create mode 100644 src/nos/lib/messages_lib/01f4_822a_Bad_20user_20or_20h.rel create mode 100644 src/nos/lib/messages_lib/01f5_61f7_Base_20Addr_09Rxint.rel create mode 100644 src/nos/lib/messages_lib/01f6_929a_Base_20Addr_20_20Rx.rel create mode 100644 src/nos/lib/messages_lib/01f7_de82_Buf_20hits_2fmiss_2.rel create mode 100644 src/nos/lib/messages_lib/01f8_ae0c_CTRL_2d_25c_0a.rel create mode 100644 src/nos/lib/messages_lib/01f9_6c46_CWD_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/01fa_0e64_Calls_20originated_.rel create mode 100644 src/nos/lib/messages_lib/01fb_9777_Calls_20timed_20out.rel create mode 100644 src/nos/lib/messages_lib/01fc_e911_Can_27t_20NLST_20_2.rel create mode 100644 src/nos/lib/messages_lib/01fd_daf3_Can_27t_20add_20rou.rel create mode 100644 src/nos/lib/messages_lib/01fe_6db7_Can_27t_20attach_20.rel create mode 100644 src/nos/lib/messages_lib/01ff_79e8_Can_27t_20change_20.rel create mode 100644 src/nos/lib/messages_lib/0200_3bb8_Can_27t_20create_20.rel create mode 100644 src/nos/lib/messages_lib/0201_0003_Can_27t_20create_20.rel create mode 100644 src/nos/lib/messages_lib/0202_ef8c_Can_27t_20create_20.rel create mode 100644 src/nos/lib/messages_lib/0203_28e0_Can_27t_20create_20.rel create mode 100644 src/nos/lib/messages_lib/0204_d5bc_Can_27t_20create_20.rel create mode 100644 src/nos/lib/messages_lib/0205_c7fb_Can_27t_20delete_20.rel create mode 100644 src/nos/lib/messages_lib/0206_d5d6_Can_27t_20detach_20.rel create mode 100644 src/nos/lib/messages_lib/0207_5d65_Can_27t_20find_20he.rel create mode 100644 src/nos/lib/messages_lib/0208_3eee_Can_27t_20list_20lo.rel create mode 100644 src/nos/lib/messages_lib/0209_c1c1_Can_27t_20open_20_2.rel create mode 100644 src/nos/lib/messages_lib/020a_fedd_Can_27t_20open_20_2.rel create mode 100644 src/nos/lib/messages_lib/020b_fb2a_Can_27t_20open_20_2.rel create mode 100644 src/nos/lib/messages_lib/020c_d8a5_Can_27t_20open_20in.rel create mode 100644 src/nos/lib/messages_lib/020d_0616_Can_27t_20read_20_2.rel create mode 100644 src/nos/lib/messages_lib/020e_4a10_Can_27t_20read_20_2.rel create mode 100644 src/nos/lib/messages_lib/020f_8468_Can_27t_20read_20co.rel create mode 100644 src/nos/lib/messages_lib/0210_4327_Can_27t_20read_20di.rel create mode 100644 src/nos/lib/messages_lib/0211_5fb2_Can_27t_20read_20lo.rel create mode 100644 src/nos/lib/messages_lib/0212_36d4_Can_27t_20read_20pa.rel create mode 100644 src/nos/lib/messages_lib/0213_5e43_Can_27t_20rename_20.rel create mode 100644 src/nos/lib/messages_lib/0214_4bfe_Can_27t_20rewrite_2.rel create mode 100644 src/nos/lib/messages_lib/0215_24ca_Can_27t_20set_20lin.rel create mode 100644 src/nos/lib/messages_lib/0216_5e82_Can_27t_20write_20_.rel create mode 100644 src/nos/lib/messages_lib/0217_988b_Can_27t_20write_20l.rel create mode 100644 src/nos/lib/messages_lib/0218_c0f9_Can_27t_20write_20t.rel create mode 100644 src/nos/lib/messages_lib/0219_5055_Ch_20Iface_20_20_20.rel create mode 100644 src/nos/lib/messages_lib/021a_eff3_Channel_20_2d_20_25.rel create mode 100644 src/nos/lib/messages_lib/021b_1b09_Choke_20timeout_20_.rel create mode 100644 src/nos/lib/messages_lib/021c_f95c_Closed_3a_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/021d_e508_Command_20batching.rel create mode 100644 src/nos/lib/messages_lib/021e_b471_Connect_20failed_0a.rel create mode 100644 src/nos/lib/messages_lib/021f_bb2f_Connect_20failed_3a.rel create mode 100644 src/nos/lib/messages_lib/0220_85e9_Connect_20to_20mail.rel create mode 100644 src/nos/lib/messages_lib/0221_6930_Connected_0a.rel create mode 100644 src/nos/lib/messages_lib/0222_5189_Connected_20to_20_2.rel create mode 100644 src/nos/lib/messages_lib/0223_771a_Connected_20to_20ma.rel create mode 100644 src/nos/lib/messages_lib/0224_0e16_Connected_2e.rel create mode 100644 src/nos/lib/messages_lib/0225_3e79_Connection_20closed.rel create mode 100644 src/nos/lib/messages_lib/0226_faa9_Connection_20failed.rel create mode 100644 src/nos/lib/messages_lib/0227_3676_Could_20not_20creat.rel create mode 100644 src/nos/lib/messages_lib/0228_d95b_Couldn_27t_20queue_.rel create mode 100644 src/nos/lib/messages_lib/0229_68a6_Current_20message_2.rel create mode 100644 src/nos/lib/messages_lib/022a_23ad_Currently_20enabled.rel create mode 100644 src/nos/lib/messages_lib/022b_1cf7_DELE_20_25s.rel create mode 100644 src/nos/lib/messages_lib/022c_5fad_DISASTER_21_20Out_2.rel create mode 100644 src/nos/lib/messages_lib/022d_7ce2_DRSI_20Board_20Stat.rel create mode 100644 src/nos/lib/messages_lib/022e_2f52_D_5bU_5d_20filename.rel create mode 100644 src/nos/lib/messages_lib/022f_698b_Data_0a.rel create mode 100644 src/nos/lib/messages_lib/0230_cb1c_Data_20outside_20he.rel create mode 100644 src/nos/lib/messages_lib/0231_01be_Data_20pointer_20_2.rel create mode 100644 src/nos/lib/messages_lib/0232_3cbb_Data_20pointer_20be.rel create mode 100644 src/nos/lib/messages_lib/0233_bd70_Defaulting_20to_20b.rel create mode 100644 src/nos/lib/messages_lib/0234_2d19_Del_5fconst_20_3d_2.rel create mode 100644 src/nos/lib/messages_lib/0235_6255_Dest_20Addr_20_20_2.rel create mode 100644 src/nos/lib/messages_lib/0236_3894_Dialing_20not_20sup.rel create mode 100644 src/nos/lib/messages_lib/0237_26a3_Different_0a.rel create mode 100644 src/nos/lib/messages_lib/0238_ae33_Digipeat.rel create mode 100644 src/nos/lib/messages_lib/0239_af35_Directory_20table_2.rel create mode 100644 src/nos/lib/messages_lib/023a_c1bb_Disconnected_20.rel create mode 100644 src/nos/lib/messages_lib/023b_2cc5_Disconnecting_2e.rel create mode 100644 src/nos/lib/messages_lib/023c_b7f4_Dup_20acks_20_20_20.rel create mode 100644 src/nos/lib/messages_lib/023d_3ed4_Duplex_3a_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/023e_b671_E2BIG.rel create mode 100644 src/nos/lib/messages_lib/023f_56e8_EACCES.rel create mode 100644 src/nos/lib/messages_lib/0240_f378_EAGAIN.rel create mode 100644 src/nos/lib/messages_lib/0241_0483_EAGLE_20Board_20Sta.rel create mode 100644 src/nos/lib/messages_lib/0242_a2a1_EBADF.rel create mode 100644 src/nos/lib/messages_lib/0243_74ba_EBUSY.rel create mode 100644 src/nos/lib/messages_lib/0244_4029_ECHILD.rel create mode 100644 src/nos/lib/messages_lib/0245_cd2b_EDEADLK.rel create mode 100644 src/nos/lib/messages_lib/0246_4299_EDOM.rel create mode 100644 src/nos/lib/messages_lib/0247_bec8_EEXIST.rel create mode 100644 src/nos/lib/messages_lib/0248_afa9_EFAULT.rel create mode 100644 src/nos/lib/messages_lib/0249_9ed8_EFBIG.rel create mode 100644 src/nos/lib/messages_lib/024a_28f7_EGATTACH_3a_20No_20.rel create mode 100644 src/nos/lib/messages_lib/024b_eb47_EINTR.rel create mode 100644 src/nos/lib/messages_lib/024c_b479_EINVAL.rel create mode 100644 src/nos/lib/messages_lib/024d_21d8_EINVFNC.rel create mode 100644 src/nos/lib/messages_lib/024e_2d75_EIO.rel create mode 100644 src/nos/lib/messages_lib/024f_fb45_EISDIR.rel create mode 100644 src/nos/lib/messages_lib/0250_8de7_ELOOP.rel create mode 100644 src/nos/lib/messages_lib/0251_9e5a_EMFILE.rel create mode 100644 src/nos/lib/messages_lib/0252_983a_EMLINK.rel create mode 100644 src/nos/lib/messages_lib/0253_0607_ENAMETOOLONG.rel create mode 100644 src/nos/lib/messages_lib/0254_8396_ENFILE.rel create mode 100644 src/nos/lib/messages_lib/0255_7088_ENODEV.rel create mode 100644 src/nos/lib/messages_lib/0256_edee_ENOENT.rel create mode 100644 src/nos/lib/messages_lib/0257_a107_ENOEXEC.rel create mode 100644 src/nos/lib/messages_lib/0258_29fe_ENOLCK.rel create mode 100644 src/nos/lib/messages_lib/0259_42c4_ENOMEM.rel create mode 100644 src/nos/lib/messages_lib/025a_d51d_ENOSPC.rel create mode 100644 src/nos/lib/messages_lib/025b_d3a2_ENOTBLK.rel create mode 100644 src/nos/lib/messages_lib/025c_f683_ENOTDIR.rel create mode 100644 src/nos/lib/messages_lib/025d_83de_ENOTEMPTY.rel create mode 100644 src/nos/lib/messages_lib/025e_81a3_ENOTTY.rel create mode 100644 src/nos/lib/messages_lib/025f_01a7_ENXIO.rel create mode 100644 src/nos/lib/messages_lib/0260_4485_EPERM.rel create mode 100644 src/nos/lib/messages_lib/0261_5ede_EPIPE.rel create mode 100644 src/nos/lib/messages_lib/0262_7f6a_ERANGE.rel create mode 100644 src/nos/lib/messages_lib/0263_0587_EROFS.rel create mode 100644 src/nos/lib/messages_lib/0264_6b3a_ESCC_20channel_20_2.rel create mode 100644 src/nos/lib/messages_lib/0265_6d38_ESCC_20channel_20_2.rel create mode 100644 src/nos/lib/messages_lib/0266_0a8a_ESCC_20driver_20alr.rel create mode 100644 src/nos/lib/messages_lib/0267_d89e_ESCC_20driver_20not.rel create mode 100644 src/nos/lib/messages_lib/0268_dd82_ESHELL.rel create mode 100644 src/nos/lib/messages_lib/0269_ffa8_ESPIPE.rel create mode 100644 src/nos/lib/messages_lib/026a_b33c_ESRCH.rel create mode 100644 src/nos/lib/messages_lib/026b_194a_ETXTBSY.rel create mode 100644 src/nos/lib/messages_lib/026c_8d4a_EXDEV.rel create mode 100644 src/nos/lib/messages_lib/026d_4f54_Encapsulation_20mod.rel create mode 100644 src/nos/lib/messages_lib/026e_0f4a_Enqued_20_20_2d_20_.rel create mode 100644 src/nos/lib/messages_lib/026f_de30_Enter_20message_2e_.rel create mode 100644 src/nos/lib/messages_lib/0270_3a50_Error_20in_20respon.rel create mode 100644 src/nos/lib/messages_lib/0271_d568_Error_20updating_20.rel create mode 100644 src/nos/lib/messages_lib/0272_69fc_Error_20writing_20m.rel create mode 100644 src/nos/lib/messages_lib/0273_9664_Escape_20character_.rel create mode 100644 src/nos/lib/messages_lib/0274_8c2d_Ether_3a_20len_20_2.rel create mode 100644 src/nos/lib/messages_lib/0275_3af3_F_3e.rel create mode 100644 src/nos/lib/messages_lib/0276_0046_Failed_0a.rel create mode 100644 src/nos/lib/messages_lib/0277_4a7b_First_20init_20ESCC.rel create mode 100644 src/nos/lib/messages_lib/0278_0954_Forwarding_20timer_.rel create mode 100644 src/nos/lib/messages_lib/0279_95bb_Free_20address_20qu.rel create mode 100644 src/nos/lib/messages_lib/027a_fee7_Free_20cache_3a_20s.rel create mode 100644 src/nos/lib/messages_lib/027b_8dc1_Free_20memory_20thr.rel create mode 100644 src/nos/lib/messages_lib/027c_1be2_From_20_25s_20_25s.rel create mode 100644 src/nos/lib/messages_lib/027d_d837_From_3a_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/027e_b9a0_Garbage_20bp_20_25l.rel create mode 100644 src/nos/lib/messages_lib/027f_7731_Group_20list_20too_.rel create mode 100644 src/nos/lib/messages_lib/0280_ccdf_HAPN_20_25d_3a_20_2.rel create mode 100644 src/nos/lib/messages_lib/0281_9570_HOPCHECK_20start_20.rel create mode 100644 src/nos/lib/messages_lib/0282_8ef4_HOPCHECK_20to_20_25.rel create mode 100644 src/nos/lib/messages_lib/0283_c794_HOPCHECK_20tracing.rel create mode 100644 src/nos/lib/messages_lib/0284_4952_HS_3a_20Warning_3a_.rel create mode 100644 src/nos/lib/messages_lib/0285_10ba_Hardware_20_25u_0a.rel create mode 100644 src/nos/lib/messages_lib/0286_32e9_Heap_20debugging.rel create mode 100644 src/nos/lib/messages_lib/0287_9144_Host_20_25s_20_28_2.rel create mode 100644 src/nos/lib/messages_lib/0288_862c_Host_20_25s_20unkno.rel create mode 100644 src/nos/lib/messages_lib/0289_f216_Hostname_20set_20to.rel create mode 100644 src/nos/lib/messages_lib/028a_28fb_Hytech_20KA9Q_20NOS.rel create mode 100644 src/nos/lib/messages_lib/028b_df4f_ICMP_20echo_20respo.rel create mode 100644 src/nos/lib/messages_lib/028c_db6d_ICMP_20from_20_25s_.rel create mode 100644 src/nos/lib/messages_lib/028d_abbc_ICMP_20tracing.rel create mode 100644 src/nos/lib/messages_lib/028e_6b85_ICMP_3a_20type_20_2.rel create mode 100644 src/nos/lib/messages_lib/028f_dff6_IP_0a.rel create mode 100644 src/nos/lib/messages_lib/0290_5812_IP_20Time_2dto_2dli.rel create mode 100644 src/nos/lib/messages_lib/0291_0e41_IP_20addr_20_20_20_.rel create mode 100644 src/nos/lib/messages_lib/0292_8cdb_IP_20reasm_20timeou.rel create mode 100644 src/nos/lib/messages_lib/0293_5f88_IP_20rx_20tracing.rel create mode 100644 src/nos/lib/messages_lib/0294_88e0_IP_3a_20CHECKSUM_20.rel create mode 100644 src/nos/lib/messages_lib/0295_03a7_IP_3a_20bad_20heade.rel create mode 100644 src/nos/lib/messages_lib/0296_4543_IP_3a_20len_20_25u.rel create mode 100644 src/nos/lib/messages_lib/0297_e067_IPCP_0a.rel create mode 100644 src/nos/lib/messages_lib/0298_7c5c_IPCP_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/0299_a490_IRQ_20_25u_20out_20.rel create mode 100644 src/nos/lib/messages_lib/029a_925d_Idle_20poll_20timer.rel create mode 100644 src/nos/lib/messages_lib/029b_4ab5_Image_0a.rel create mode 100644 src/nos/lib/messages_lib/029c_7e58_Initial_20RTT_20_28.rel create mode 100644 src/nos/lib/messages_lib/029d_bd38_Inqlen_3a_20_25d_20.rel create mode 100644 src/nos/lib/messages_lib/029e_c7f6_Insufficient_20args.rel create mode 100644 src/nos/lib/messages_lib/029f_fcf9_Interface_20_20_20R.rel create mode 100644 src/nos/lib/messages_lib/02a0_b903_Interface_20_22_25s.rel create mode 100644 src/nos/lib/messages_lib/02a1_4daf_Interface_20_22_25s.rel create mode 100644 src/nos/lib/messages_lib/02a2_42ac_Interface_20_22_25s.rel create mode 100644 src/nos/lib/messages_lib/02a3_5a50_Interface_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/02a4_1298_Interface_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/02a5_24cb_Interface_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/02a6_c749_Interface_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/02a7_63a0_Interface_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/02a8_8880_Interface_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/02a9_6e91_Interface_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/02aa_103c_Interface_20address.rel create mode 100644 src/nos/lib/messages_lib/02ab_c429_Interface_3a_20.rel create mode 100644 src/nos/lib/messages_lib/02ac_d726_Invalid_20magic_20c.rel create mode 100644 src/nos/lib/messages_lib/02ad_42d9_Invalid_20range_2e_.rel create mode 100644 src/nos/lib/messages_lib/02ae_89c0_Invalid_20type_20_2.rel create mode 100644 src/nos/lib/messages_lib/02af_62ed_Invalid_20user_20na.rel create mode 100644 src/nos/lib/messages_lib/02b0_be0b_Job_20id_20_25s_20n.rel create mode 100644 src/nos/lib/messages_lib/02b1_87a9_K_20numbers.rel create mode 100644 src/nos/lib/messages_lib/02b2_414e_KISS_3a_20.rel create mode 100644 src/nos/lib/messages_lib/02b3_1668_Known_20users_20on_.rel create mode 100644 src/nos/lib/messages_lib/02b4_171d_LCP_0a.rel create mode 100644 src/nos/lib/messages_lib/02b5_befe_LCP_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/02b6_1d45_Last_20message_0a.rel create mode 100644 src/nos/lib/messages_lib/02b7_a317_Loc_20.rel create mode 100644 src/nos/lib/messages_lib/02b8_5ce5_Local_3a_20_25s.rel create mode 100644 src/nos/lib/messages_lib/02b9_0926_Local_3a_20_25s_20_.rel create mode 100644 src/nos/lib/messages_lib/02ba_6210_Lock_20directory_20.rel create mode 100644 src/nos/lib/messages_lib/02bb_f59a_Logging_20off_0a.rel create mode 100644 src/nos/lib/messages_lib/02bc_1bd9_Logging_20to_20_25s.rel create mode 100644 src/nos/lib/messages_lib/02bd_4a5a_Logical_20bytesize_.rel create mode 100644 src/nos/lib/messages_lib/02be_4f93_Login_20incorrect_0.rel create mode 100644 src/nos/lib/messages_lib/02bf_8ac2_MBOX_20Zap_3a_20_25.rel create mode 100644 src/nos/lib/messages_lib/02c0_1dc7_MBOX_20bbs_20mail_2.rel create mode 100644 src/nos/lib/messages_lib/02c1_37c2_MBOX_20bbs_20mail_2.rel create mode 100644 src/nos/lib/messages_lib/02c2_f88f_MBOX_20forward_20fa.rel create mode 100644 src/nos/lib/messages_lib/02c3_9bd4_MBOX_20forwarding_2.rel create mode 100644 src/nos/lib/messages_lib/02c4_d1e8_MBOX_20login_3a_20_.rel create mode 100644 src/nos/lib/messages_lib/02c5_dd2e_MBOX_20login_3a_20_.rel create mode 100644 src/nos/lib/messages_lib/02c6_e920_MBOX_20sysop_3a_20_.rel create mode 100644 src/nos/lib/messages_lib/02c7_a30c_MBOX_20upload_3a_20.rel create mode 100644 src/nos/lib/messages_lib/02c8_c247_MKD_20_25s.rel create mode 100644 src/nos/lib/messages_lib/02c9_53a6_MRU_20_25s_20_28_25.rel create mode 100644 src/nos/lib/messages_lib/02ca_f9a6_Magic_20Number.rel create mode 100644 src/nos/lib/messages_lib/02cb_d070_Mail_20area_3a_20_2.rel create mode 100644 src/nos/lib/messages_lib/02cc_0103_Mail_20box_20full_3.rel create mode 100644 src/nos/lib/messages_lib/02cd_523a_Main_20commands_3a_.rel create mode 100644 src/nos/lib/messages_lib/02ce_dcca_Max_20attempts_20to.rel create mode 100644 src/nos/lib/messages_lib/02cf_0279_Max_20clients.rel create mode 100644 src/nos/lib/messages_lib/02d0_3cd5_Max_20frame_20lengt.rel create mode 100644 src/nos/lib/messages_lib/02d1_d96d_Maximum_20messages_.rel create mode 100644 src/nos/lib/messages_lib/02d2_488d_Mbuf_20sizes_3a_0a.rel create mode 100644 src/nos/lib/messages_lib/02d3_ee8f_Message_20_23_25d_2.rel create mode 100644 src/nos/lib/messages_lib/02d4_b5f9_Mode_20_25s_20unkno.rel create mode 100644 src/nos/lib/messages_lib/02d5_aa15_Mode_20_25s_20unkno.rel create mode 100644 src/nos/lib/messages_lib/02d6_ac3e_Msg_20_25d_20Killed.rel create mode 100644 src/nos/lib/messages_lib/02d7_9a86_Must_20be_20_200_20.rel create mode 100644 src/nos/lib/messages_lib/02d8_362b_Must_20be_20_200_20.rel create mode 100644 src/nos/lib/messages_lib/02d9_2da0_Must_20be_20_3e_3d_.rel create mode 100644 src/nos/lib/messages_lib/02da_06a9_Must_20set_20_27r_2.rel create mode 100644 src/nos/lib/messages_lib/02db_d814_N_3e_3d_255u_3a_257.rel create mode 100644 src/nos/lib/messages_lib/02dc_7868_NET_2fROM_20Routing.rel create mode 100644 src/nos/lib/messages_lib/02dd_ae07_NET_2fROM_20not_20a.rel create mode 100644 src/nos/lib/messages_lib/02de_d0e9_NET_2fROM_3a_20_25s.rel create mode 100644 src/nos/lib/messages_lib/02df_73b0_NEWNEWS_20_25s_20_2.rel create mode 100644 src/nos/lib/messages_lib/02e0_c191_NNTP_20_25s_20Canno.rel create mode 100644 src/nos/lib/messages_lib/02e1_7ed2_NNTP_20_25s_20Canno.rel create mode 100644 src/nos/lib/messages_lib/02e2_bcd0_NNTP_20_25s_20Conne.rel create mode 100644 src/nos/lib/messages_lib/02e3_796b_NNTP_20_25s_20Conne.rel create mode 100644 src/nos/lib/messages_lib/02e4_4193_NNTP_20_25s_20Conne.rel create mode 100644 src/nos/lib/messages_lib/02e5_0909_NNTP_20_25s_20Conne.rel create mode 100644 src/nos/lib/messages_lib/02e6_3814_NNTP_20_25s_20Conne.rel create mode 100644 src/nos/lib/messages_lib/02e7_b5ec_NNTP_20_25s_20Could.rel create mode 100644 src/nos/lib/messages_lib/02e8_8531_NNTP_20_25s_20Could.rel create mode 100644 src/nos/lib/messages_lib/02e9_8fd5_NNTP_20_25s_20Could.rel create mode 100644 src/nos/lib/messages_lib/02ea_0d83_NNTP_20_25s_20Givin.rel create mode 100644 src/nos/lib/messages_lib/02eb_19c4_NNTP_20_25s_20Givin.rel create mode 100644 src/nos/lib/messages_lib/02ec_213a_NNTP_20_25s_20bad_2.rel create mode 100644 src/nos/lib/messages_lib/02ed_31a2_NNTP_20_25s_20bad_2.rel create mode 100644 src/nos/lib/messages_lib/02ee_df3f_NNTP_20_25s_20givin.rel create mode 100644 src/nos/lib/messages_lib/02ef_791c_NNTP_20_25s_20givin.rel create mode 100644 src/nos/lib/messages_lib/02f0_75ce_NNTP_20_25s_20givin.rel create mode 100644 src/nos/lib/messages_lib/02f1_7eb6_NNTP_20_25s_20proto.rel create mode 100644 src/nos/lib/messages_lib/02f2_7f99_NNTP_20_25s_20proto.rel create mode 100644 src/nos/lib/messages_lib/02f3_a517_NNTP_20Cannot_20ope.rel create mode 100644 src/nos/lib/messages_lib/02f4_fc8f_NNTP_20can_27t_20re.rel create mode 100644 src/nos/lib/messages_lib/02f5_2c2a_NNTP_20daemon_20ent.rel create mode 100644 src/nos/lib/messages_lib/02f6_f2a9_NNTP_20daemon_20exi.rel create mode 100644 src/nos/lib/messages_lib/02f7_cbc7_NNTP_20daemon_20qui.rel create mode 100644 src/nos/lib/messages_lib/02f8_0fa8_NNTP_20group_20_27_.rel create mode 100644 src/nos/lib/messages_lib/02f9_0e76_NNTP_20receive_20er.rel create mode 100644 src/nos/lib/messages_lib/02fa_a47f_NNTP_20received_20_.rel create mode 100644 src/nos/lib/messages_lib/02fb_0916_NNTP_20tracing.rel create mode 100644 src/nos/lib/messages_lib/02fc_b065_NNTP_20window_20to_.rel create mode 100644 src/nos/lib/messages_lib/02fd_852e_NO_20_2d_20.rel create mode 100644 src/nos/lib/messages_lib/02fe_e182_NO_20_2d_20bad_20ad.rel create mode 100644 src/nos/lib/messages_lib/02ff_7ccb_NO_20_2d_20syntax_2.rel create mode 100644 src/nos/lib/messages_lib/0300_2df6_NOS_20log_20closed.rel create mode 100644 src/nos/lib/messages_lib/0301_e1c8_NOS_20was_20started.rel create mode 100644 src/nos/lib/messages_lib/0302_cfbe_NOS_20was_20stopped.rel create mode 100644 src/nos/lib/messages_lib/0303_998c_NULL_20BUFFER_0a.rel create mode 100644 src/nos/lib/messages_lib/0304_89a8_Net_3e_20.rel create mode 100644 src/nos/lib/messages_lib/0305_e0c6_Network_20_25s_20co.rel create mode 100644 src/nos/lib/messages_lib/0306_4009_New_20mail_20arrive.rel create mode 100644 src/nos/lib/messages_lib/0307_fbfc_New_20mail_20arrive.rel create mode 100644 src/nos/lib/messages_lib/0308_d0a7_New_20news_20arrive.rel create mode 100644 src/nos/lib/messages_lib/0309_e9a0_No_20HAPN_20adaptor.rel create mode 100644 src/nos/lib/messages_lib/030a_87bb_No_20current_20sess.rel create mode 100644 src/nos/lib/messages_lib/030b_7f27_No_20dialer_20activ.rel create mode 100644 src/nos/lib/messages_lib/030c_cd1f_No_20finger_20infor.rel create mode 100644 src/nos/lib/messages_lib/030d_2a2e_No_20help_20availab.rel create mode 100644 src/nos/lib/messages_lib/030e_7cc9_No_20packet_20drive.rel create mode 100644 src/nos/lib/messages_lib/030f_4e0c_No_20such_20message.rel create mode 100644 src/nos/lib/messages_lib/0310_2a80_No_20such_20server_.rel create mode 100644 src/nos/lib/messages_lib/0311_0cda_Nodetimer_20_25lu_2.rel create mode 100644 src/nos/lib/messages_lib/0312_3fb0_None.rel create mode 100644 src/nos/lib/messages_lib/0313_1aee_None_0a.rel create mode 100644 src/nos/lib/messages_lib/0314_f8e2_Not_20a_20valid_20s.rel create mode 100644 src/nos/lib/messages_lib/0315_b4ba_Not_20an_20FTP_20se.rel create mode 100644 src/nos/lib/messages_lib/0316_ee7e_Not_20found_0a.rel create mode 100644 src/nos/lib/messages_lib/0317_533e_Not_20in_20table_0a.rel create mode 100644 src/nos/lib/messages_lib/0318_c7b9_Not_20supported_0a.rel create mode 100644 src/nos/lib/messages_lib/0319_9692_Obsotimer_20_25lu_2.rel create mode 100644 src/nos/lib/messages_lib/031a_ff96_Oh_2c_20hello_20_25.rel create mode 100644 src/nos/lib/messages_lib/031b_0948_Only_20_25d_20DRSI_.rel create mode 100644 src/nos/lib/messages_lib/031c_8edb_Only_20_25d_20net_2.rel create mode 100644 src/nos/lib/messages_lib/031d_f9f0_Only_201_20EAGLE_20.rel create mode 100644 src/nos/lib/messages_lib/031e_1514_Outqlen_3a_20_25d_2.rel create mode 100644 src/nos/lib/messages_lib/031f_5b48_PANIC_3a_20Timer_20.rel create mode 100644 src/nos/lib/messages_lib/0320_281b_PANIC_3a_20buffer_2.rel create mode 100644 src/nos/lib/messages_lib/0321_f630_PAP_0a.rel create mode 100644 src/nos/lib/messages_lib/0322_b2fb_PAP_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/0323_8063_PASS_20_25s.rel create mode 100644 src/nos/lib/messages_lib/0324_2320_PI_20Board_20Statis.rel create mode 100644 src/nos/lib/messages_lib/0325_73f1_PI_3a_20DMA_20_25d_.rel create mode 100644 src/nos/lib/messages_lib/0326_5841_PI_3a_20DMA_20chann.rel create mode 100644 src/nos/lib/messages_lib/0327_3992_PI_3a_20IRQ_20_25u_.rel create mode 100644 src/nos/lib/messages_lib/0328_4ca4_PI_3a_20Interface_2.rel create mode 100644 src/nos/lib/messages_lib/0329_d856_PI_3a_20Maximum_20o.rel create mode 100644 src/nos/lib/messages_lib/032a_9098_PI_3a_20Mode_20_25s.rel create mode 100644 src/nos/lib/messages_lib/032b_de39_PI_3a_20No_20IP_20a.rel create mode 100644 src/nos/lib/messages_lib/032c_02ea_PI_3a_20No_20memory.rel create mode 100644 src/nos/lib/messages_lib/032d_c0d0_PI_3a_20No_20memory.rel create mode 100644 src/nos/lib/messages_lib/032e_94ca_PI_3a_20No_20memory.rel create mode 100644 src/nos/lib/messages_lib/032f_c698_PI_3a_20No_20memory.rel create mode 100644 src/nos/lib/messages_lib/0330_d61f_PI_3a_20Set_20mycal.rel create mode 100644 src/nos/lib/messages_lib/0331_68d4_PID_20_20_20CS_3aIP.rel create mode 100644 src/nos/lib/messages_lib/0332_3c62_POP_20access_20DENI.rel create mode 100644 src/nos/lib/messages_lib/0333_f3cf_POP_20access_20gran.rel create mode 100644 src/nos/lib/messages_lib/0334_639f_POP_20client_20retr.rel create mode 100644 src/nos/lib/messages_lib/0335_e9bb_POP_20quiet.rel create mode 100644 src/nos/lib/messages_lib/0336_1231_POP_20users_20file_.rel create mode 100644 src/nos/lib/messages_lib/0337_e126_PORT_20_25u_2c_25u_.rel create mode 100644 src/nos/lib/messages_lib/0338_b459_PPP_20tracing.rel create mode 100644 src/nos/lib/messages_lib/0339_b660_PPP_3a_20len_20_253.rel create mode 100644 src/nos/lib/messages_lib/033a_8c73_Packet_20driver_20h.rel create mode 100644 src/nos/lib/messages_lib/033b_d638_Pap_0a.rel create mode 100644 src/nos/lib/messages_lib/033c_8165_Parameter_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/033d_85d2_Password_3a_20.rel create mode 100644 src/nos/lib/messages_lib/033e_cb37_Password_3a_20_25c_.rel create mode 100644 src/nos/lib/messages_lib/033f_6310_Path_3a_20.rel create mode 100644 src/nos/lib/messages_lib/0340_f75b_Persistence_3a_20_2.rel create mode 100644 src/nos/lib/messages_lib/0341_7bc8_Pinging_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/0342_94a5_Pinging_20resumed_0.rel create mode 100644 src/nos/lib/messages_lib/0343_7fa9_Pinging_20suspended.rel create mode 100644 src/nos/lib/messages_lib/0344_220f_Please_20hang_20up_.rel create mode 100644 src/nos/lib/messages_lib/0345_4304_Poll_20threshold_20.rel create mode 100644 src/nos/lib/messages_lib/0346_f8a0_Pool_20count_20_25s.rel create mode 100644 src/nos/lib/messages_lib/0347_dd4d_Protocol_20Field_20.rel create mode 100644 src/nos/lib/messages_lib/0348_744a_QUIT_0a.rel create mode 100644 src/nos/lib/messages_lib/0349_43c0_Quality_20cannot_20.rel create mode 100644 src/nos/lib/messages_lib/034a_b523_Queue_20limit_20_28.rel create mode 100644 src/nos/lib/messages_lib/034b_4a0a_R_20numbers.rel create mode 100644 src/nos/lib/messages_lib/034c_db0e_R_3a_25s_20_40_25s_.rel create mode 100644 src/nos/lib/messages_lib/034d_373f_REQUEST.rel create mode 100644 src/nos/lib/messages_lib/034e_19a4_RESPONSE.rel create mode 100644 src/nos/lib/messages_lib/034f_8b13_RETR_20_25s.rel create mode 100644 src/nos/lib/messages_lib/0350_86e9_RETURN_0a.rel create mode 100644 src/nos/lib/messages_lib/0351_bbdb_RFrames_20_2d_20_25.rel create mode 100644 src/nos/lib/messages_lib/0352_f9d6_RIP_20merging.rel create mode 100644 src/nos/lib/messages_lib/0353_3211_RIP_20refused_20fro.rel create mode 100644 src/nos/lib/messages_lib/0354_8827_RIP_20tracing.rel create mode 100644 src/nos/lib/messages_lib/0355_5585_RIP_3a_20.rel create mode 100644 src/nos/lib/messages_lib/0356_fd1d_RIP_3a_20sent_20_25.rel create mode 100644 src/nos/lib/messages_lib/0357_6b7c_RIPCMD_3a_20Unknown.rel create mode 100644 src/nos/lib/messages_lib/0358_5f5f_RIPCMD_5fREQUEST_0a.rel create mode 100644 src/nos/lib/messages_lib/0359_07f6_RIPCMD_5fRESPONSE_2.rel create mode 100644 src/nos/lib/messages_lib/035a_eb71_RIP_5frx_3a_20Not_2.rel create mode 100644 src/nos/lib/messages_lib/035b_86e6_RMD_20_25s.rel create mode 100644 src/nos/lib/messages_lib/035c_8005_Range_20for_20inter.rel create mode 100644 src/nos/lib/messages_lib/035d_1ee5_Reassembly_20fragme.rel create mode 100644 src/nos/lib/messages_lib/035e_fbe9_Reassembly_20queue_.rel create mode 100644 src/nos/lib/messages_lib/035f_5eb3_Received_3a_20.rel create mode 100644 src/nos/lib/messages_lib/0360_9fbc_Recording_20into_20.rel create mode 100644 src/nos/lib/messages_lib/0361_aa80_Recording_20off_0a.rel create mode 100644 src/nos/lib/messages_lib/0362_2a15_Recv_3a_20_20_20_20.rel create mode 100644 src/nos/lib/messages_lib/0363_d0ff_Refuse_0a.rel create mode 100644 src/nos/lib/messages_lib/0364_42c0_Refusing_20announce.rel create mode 100644 src/nos/lib/messages_lib/0365_6bd1_Requesting_2e_2e_2e.rel create mode 100644 src/nos/lib/messages_lib/0366_4784_Resolver_20_25s_20u.rel create mode 100644 src/nos/lib/messages_lib/0367_ae52_Resolving_20_25s_2e.rel create mode 100644 src/nos/lib/messages_lib/0368_200a_Resolving_20_25s_2e.rel create mode 100644 src/nos/lib/messages_lib/0369_cacc_Retry_20limit.rel create mode 100644 src/nos/lib/messages_lib/036a_0cd3_Returned_20.rel create mode 100644 src/nos/lib/messages_lib/036b_85af_Route_20add_20faile.rel create mode 100644 src/nos/lib/messages_lib/036c_9b70_Routing_20lookups_3.rel create mode 100644 src/nos/lib/messages_lib/036d_9c01_Rxints_20_20_2d_20_.rel create mode 100644 src/nos/lib/messages_lib/036e_ccf6_S_20_20_20_20_20Job.rel create mode 100644 src/nos/lib/messages_lib/036f_df6d_S_20command_20synta.rel create mode 100644 src/nos/lib/messages_lib/0370_4fbb_S_23_20_20_20Type_2.rel create mode 100644 src/nos/lib/messages_lib/0371_bf54_SMTP_20_25s_20Conne.rel create mode 100644 src/nos/lib/messages_lib/0372_cbb7_SMTP_20batching.rel create mode 100644 src/nos/lib/messages_lib/0373_e45f_SMTP_20client_20Try.rel create mode 100644 src/nos/lib/messages_lib/0374_797a_SMTP_20sent_20job_2.rel create mode 100644 src/nos/lib/messages_lib/0375_68b2_SMTP_20tracing.rel create mode 100644 src/nos/lib/messages_lib/0376_e7a4_SP_20_3d_20_25p_2c_.rel create mode 100644 src/nos/lib/messages_lib/0377_a1f1_STOR_20_25s.rel create mode 100644 src/nos/lib/messages_lib/0378_49fd_STOR_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/0379_38ea_STOR_20_25s_3a_20_2.rel create mode 100644 src/nos/lib/messages_lib/037a_12cc_STOR_20_25s_3a_20Er.rel create mode 100644 src/nos/lib/messages_lib/037b_cfe9_SUBCMD_20_2d_20Don_.rel create mode 100644 src/nos/lib/messages_lib/037c_0319_SYST_0a.rel create mode 100644 src/nos/lib/messages_lib/037d_93fc_Same_0a.rel create mode 100644 src/nos/lib/messages_lib/037e_3c55_Scroll_20file_20siz.rel create mode 100644 src/nos/lib/messages_lib/037f_e255_Send_20file_2c_20_2.rel create mode 100644 src/nos/lib/messages_lib/0380_c1d8_Send_3a_20_2508lx_2.rel create mode 100644 src/nos/lib/messages_lib/0381_afab_Server_20address_20.rel create mode 100644 src/nos/lib/messages_lib/0382_36ef_Session_20_25s_20no.rel create mode 100644 src/nos/lib/messages_lib/0383_0845_Slot_20time_3a_20_2.rel create mode 100644 src/nos/lib/messages_lib/0384_6556_Socket_20not_20in_2.rel create mode 100644 src/nos/lib/messages_lib/0385_a061_Sorry_20_2d_20the_2.rel create mode 100644 src/nos/lib/messages_lib/0386_8034_Stack_20violation_2.rel create mode 100644 src/nos/lib/messages_lib/0387_6414_Station_20_20_20Las.rel create mode 100644 src/nos/lib/messages_lib/0388_5bef_Station_20_20_20Las.rel create mode 100644 src/nos/lib/messages_lib/0389_9aef_Subject_3a_20_25s_0.rel create mode 100644 src/nos/lib/messages_lib/038a_0cac_System_20is_20overl.rel create mode 100644 src/nos/lib/messages_lib/038b_63e9_T_20hostname.rel create mode 100644 src/nos/lib/messages_lib/038c_1279_T1_3a_20.rel create mode 100644 src/nos/lib/messages_lib/038d_a7c1_T3_3a_20.rel create mode 100644 src/nos/lib/messages_lib/038e_e4a1_TACK_3a_20.rel create mode 100644 src/nos/lib/messages_lib/038f_7f7b_TCB_20_25p_20_25s_2.rel create mode 100644 src/nos/lib/messages_lib/0390_5447_TCD_3a_20.rel create mode 100644 src/nos/lib/messages_lib/0391_fa23_TCP_20MSS.rel create mode 100644 src/nos/lib/messages_lib/0392_70e7_TCP_20default_20irt.rel create mode 100644 src/nos/lib/messages_lib/0393_5ac7_TCP_20header_20comp.rel create mode 100644 src/nos/lib/messages_lib/0394_c668_TCP_20state_20traci.rel create mode 100644 src/nos/lib/messages_lib/0395_b0d7_TCP_20syn_2bdata_20.rel create mode 100644 src/nos/lib/messages_lib/0396_43bd_TCP_20timestamps.rel create mode 100644 src/nos/lib/messages_lib/0397_5b74_TCP_20window.rel create mode 100644 src/nos/lib/messages_lib/0398_7267_TCP_3a_20_25u_2d_3e.rel create mode 100644 src/nos/lib/messages_lib/0399_59c4_TChoke_3a_20.rel create mode 100644 src/nos/lib/messages_lib/039a_2ced_TX_20Delay_3a_20_25.rel create mode 100644 src/nos/lib/messages_lib/039b_6a23_TX_20Tail_20time_3a.rel create mode 100644 src/nos/lib/messages_lib/039c_d175_TX_20queue_20limit.rel create mode 100644 src/nos/lib/messages_lib/039d_f579_TYPE_20A_0a.rel create mode 100644 src/nos/lib/messages_lib/039e_3bb9_TYPE_20I_0a.rel create mode 100644 src/nos/lib/messages_lib/039f_a616_TYPE_20L_20_25d_0a.rel create mode 100644 src/nos/lib/messages_lib/03a0_f6fb_Target_20_20_20_20T.rel create mode 100644 src/nos/lib/messages_lib/03a1_950b_Telnet_20option_20t.rel create mode 100644 src/nos/lib/messages_lib/03a2_4517_Thank_20you_20_25s_.rel create mode 100644 src/nos/lib/messages_lib/03a3_70f0_The_20escape_20char.rel create mode 100644 src/nos/lib/messages_lib/03a4_6de0_Time_20for_201000_2.rel create mode 100644 src/nos/lib/messages_lib/03a5_601a_Time_20to_20live.rel create mode 100644 src/nos/lib/messages_lib/03a6_e505_Timeout_20value_20_.rel create mode 100644 src/nos/lib/messages_lib/03a7_1db3_Timer_20_20_20_20_2.rel create mode 100644 src/nos/lib/messages_lib/03a8_d78a_Tip_20connection_20.rel create mode 100644 src/nos/lib/messages_lib/03a9_c093_Tip_20session_20alr.rel create mode 100644 src/nos/lib/messages_lib/03aa_8c54_To_3a_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/03ab_2a55_Too_20many_20HAPN_2.rel create mode 100644 src/nos/lib/messages_lib/03ac_76b7_Too_20many_20asynch.rel create mode 100644 src/nos/lib/messages_lib/03ad_58f2_Too_20many_20digipe.rel create mode 100644 src/nos/lib/messages_lib/03ae_2d53_Too_20many_20hs_20c.rel create mode 100644 src/nos/lib/messages_lib/03af_286c_Too_20many_20mailbo.rel create mode 100644 src/nos/lib/messages_lib/03b0_4c9a_Too_20many_20nrs_20.rel create mode 100644 src/nos/lib/messages_lib/03b1_7103_Too_20many_20packet.rel create mode 100644 src/nos/lib/messages_lib/03b2_d8c3_Too_20many_20pc100_.rel create mode 100644 src/nos/lib/messages_lib/03b3_2057_Too_20many_20sessio.rel create mode 100644 src/nos/lib/messages_lib/03b4_447c_Too_20many_20slip_2.rel create mode 100644 src/nos/lib/messages_lib/03b5_0d8c_Try_20to_20bounce_2.rel create mode 100644 src/nos/lib/messages_lib/03b6_2030_Trying_20_25s_2e_2e.rel create mode 100644 src/nos/lib/messages_lib/03b7_cee2_Trying_20_25s_2e_2e.rel create mode 100644 src/nos/lib/messages_lib/03b8_be29_Trying_20Connection.rel create mode 100644 src/nos/lib/messages_lib/03b9_9c56_Tstate_20_3d_20_25s.rel create mode 100644 src/nos/lib/messages_lib/03ba_6afe_Turn_20off_20local_.rel create mode 100644 src/nos/lib/messages_lib/03bb_c801_Tx_20state_20_20_25.rel create mode 100644 src/nos/lib/messages_lib/03bc_be1b_Tx_20state_20_20_25.rel create mode 100644 src/nos/lib/messages_lib/03bd_e1f6_TxBuffers_3a_20_20S.rel create mode 100644 src/nos/lib/messages_lib/03be_5cfe_Txdefer_20_2d_20_25.rel create mode 100644 src/nos/lib/messages_lib/03bf_e733_U_20filename.rel create mode 100644 src/nos/lib/messages_lib/03c0_9059_UDP_3a.rel create mode 100644 src/nos/lib/messages_lib/03c1_a945_USER_20_25s.rel create mode 100644 src/nos/lib/messages_lib/03c2_41aa_Unknown_20command.rel create mode 100644 src/nos/lib/messages_lib/03c3_e21a_Unknown_20command_2.rel create mode 100644 src/nos/lib/messages_lib/03c4_b975_Unknown_20command_3.rel create mode 100644 src/nos/lib/messages_lib/03c5_d2a4_Unknown_20encapsula.rel create mode 100644 src/nos/lib/messages_lib/03c6_8cf4_Unknown_20parameter.rel create mode 100644 src/nos/lib/messages_lib/03c7_eb24_Update_20with_20MD5.rel create mode 100644 src/nos/lib/messages_lib/03c8_7d7d_Uploading_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/03c9_bd81_Uploading_20off_0a.rel create mode 100644 src/nos/lib/messages_lib/03ca_6d70_Uptime_20_25s_20Sta.rel create mode 100644 src/nos/lib/messages_lib/03cb_0a8d_Usage_3a_20.rel create mode 100644 src/nos/lib/messages_lib/03cc_125c_Usage_3a_20_25s_20_.rel create mode 100644 src/nos/lib/messages_lib/03cd_6ae1_Usage_3a_20F_20user.rel create mode 100644 src/nos/lib/messages_lib/03ce_7dd1_Usage_3a_20ax25_20r.rel create mode 100644 src/nos/lib/messages_lib/03cf_f8b8_Usage_3a_20dial_20_.rel create mode 100644 src/nos/lib/messages_lib/03d0_a375_Usage_3a_20mbox_20m.rel create mode 100644 src/nos/lib/messages_lib/03d1_8cfb_Usage_3a_20pop_20us.rel create mode 100644 src/nos/lib/messages_lib/03d2_a2c0_Usage_3a_20smtp_20m.rel create mode 100644 src/nos/lib/messages_lib/03d3_9654_Use_20the_20ax25_20.rel create mode 100644 src/nos/lib/messages_lib/03d4_4893_User_20_20_20_20_20.rel create mode 100644 src/nos/lib/messages_lib/03d5_633f_User_20_25s_20not_2.rel create mode 100644 src/nos/lib/messages_lib/03d6_75ef_V_20numbers.rel create mode 100644 src/nos/lib/messages_lib/03d7_4b9d_VJ_20Compressed_20T.rel create mode 100644 src/nos/lib/messages_lib/03d8_2be9_VJ_20Uncompressed_2.rel create mode 100644 src/nos/lib/messages_lib/03d9_3d32_Valid_20options_3a.rel create mode 100644 src/nos/lib/messages_lib/03da_8007_Value_20_25s_20_28_.rel create mode 100644 src/nos/lib/messages_lib/03db_c8df_Verbose.rel create mode 100644 src/nos/lib/messages_lib/03dc_32ff_Verbose_20flag.rel create mode 100644 src/nos/lib/messages_lib/03dd_b110_WARNING_3a_20Locati.rel create mode 100644 src/nos/lib/messages_lib/03de_eddf_Warning_21_20Interf.rel create mode 100644 src/nos/lib/messages_lib/03df_4457_Warning_3a_20type_2.rel create mode 100644 src/nos/lib/messages_lib/03e0_85a8_Window_20_28frames_.rel create mode 100644 src/nos/lib/messages_lib/03e1_9331_Window_20size_20_28.rel create mode 100644 src/nos/lib/messages_lib/03e2_613d_Window_3a_20_25_2d5.rel create mode 100644 src/nos/lib/messages_lib/03e3_25a6_Wink_20DTR_3f_20.rel create mode 100644 src/nos/lib/messages_lib/03e4_75b2_Writing_20article_2.rel create mode 100644 src/nos/lib/messages_lib/03e5_3999_XMD5_20_25s.rel create mode 100644 src/nos/lib/messages_lib/03e6_a62b_XMD5_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/03e7_8515_XMKD_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/03e8_31d2_XRMD_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/03e9_71c6_You_20have_20.rel create mode 100644 src/nos/lib/messages_lib/03ea_1e66_You_20have_20new_20.rel create mode 100644 src/nos/lib/messages_lib/03eb_4583_You_27re_20using_20.rel create mode 100644 src/nos/lib/messages_lib/03ec_4aef_Z_20filename.rel create mode 100644 src/nos/lib/messages_lib/03ed_5fd7_Zap_20failed_3a_20_.rel create mode 100644 src/nos/lib/messages_lib/03ee_e3d1__5b.rel create mode 100644 src/nos/lib/messages_lib/03ef_9d9c__5bNET_2dHMR_24_5d.rel create mode 100644 src/nos/lib/messages_lib/03f0_f8e4__5bunknown_5d.rel create mode 100644 src/nos/lib/messages_lib/03f1_699f__5eC_0a.rel create mode 100644 src/nos/lib/messages_lib/03f2_e5d6__5eR_0a.rel create mode 100644 src/nos/lib/messages_lib/03f3_1951__5fexit.rel create mode 100644 src/nos/lib/messages_lib/03f4_a314__5ffcreat_3a_20WARN.rel create mode 100644 src/nos/lib/messages_lib/03f5_79de__5funlink_3a_20bad_.rel create mode 100644 src/nos/lib/messages_lib/03f6_722b_accept.rel create mode 100644 src/nos/lib/messages_lib/03f7_30f9_accept_0a.rel create mode 100644 src/nos/lib/messages_lib/03f8_2cfc_access.rel create mode 100644 src/nos/lib/messages_lib/03f9_9b89_accm.rel create mode 100644 src/nos/lib/messages_lib/03fa_16c9_acct.rel create mode 100644 src/nos/lib/messages_lib/03fb_0c4f_acfc.rel create mode 100644 src/nos/lib/messages_lib/03fc_7530_acktime.rel create mode 100644 src/nos/lib/messages_lib/03fd_41b5_add.rel create mode 100644 src/nos/lib/messages_lib/03fe_d8a3_add_20_3chostid_3e.rel create mode 100644 src/nos/lib/messages_lib/03ff_6783_addprivate.rel create mode 100644 src/nos/lib/messages_lib/0400_9712_address.rel create mode 100644 src/nos/lib/messages_lib/0401_2c42_addserver.rel create mode 100644 src/nos/lib/messages_lib/0402_b0a9_alarm.rel create mode 100644 src/nos/lib/messages_lib/0403_9965_allocs_20_25lu_20fr.rel create mode 100644 src/nos/lib/messages_lib/0404_8e82_allow_20pap_20none_.rel create mode 100644 src/nos/lib/messages_lib/0405_ba08_allow_20tcp_20none_.rel create mode 100644 src/nos/lib/messages_lib/0406_94f6_anext_20pointer_20o.rel create mode 100644 src/nos/lib/messages_lib/0407_c2a0_answer_20script_3a_.rel create mode 100644 src/nos/lib/messages_lib/0408_da7c_area.rel create mode 100644 src/nos/lib/messages_lib/0409_1dde_arp_20add_20_3chost.rel create mode 100644 src/nos/lib/messages_lib/040a_96ce_arp_20drop_20_3chos.rel create mode 100644 src/nos/lib/messages_lib/040b_0018_arp_20publish_20_3c.rel create mode 100644 src/nos/lib/messages_lib/040c_5838_asci.rel create mode 100644 src/nos/lib/messages_lib/040d_4354_ascii.rel create mode 100644 src/nos/lib/messages_lib/040e_3914_ascistat.rel create mode 100644 src/nos/lib/messages_lib/040f_6442_attach.rel create mode 100644 src/nos/lib/messages_lib/0410_39bc_attach_20_3chardwar.rel create mode 100644 src/nos/lib/messages_lib/0411_fe98_attach_20asci_20_3c.rel create mode 100644 src/nos/lib/messages_lib/0412_342d_attach_20escc_20_3c.rel create mode 100644 src/nos/lib/messages_lib/0413_7943_attempt_20to_20writ.rel create mode 100644 src/nos/lib/messages_lib/0414_7d37_attend.rel create mode 100644 src/nos/lib/messages_lib/0415_c133_authenticate.rel create mode 100644 src/nos/lib/messages_lib/0416_fd47_ax25_20kick_20_3cax.rel create mode 100644 src/nos/lib/messages_lib/0417_0003_ax25_20reset_20_3ca.rel create mode 100644 src/nos/lib/messages_lib/0418_ca0a_bad_20destination_2.rel create mode 100644 src/nos/lib/messages_lib/0419_60d3_bad_20internet_20ad.rel create mode 100644 src/nos/lib/messages_lib/041a_0a79_bad_20neighbor_20ca.rel create mode 100644 src/nos/lib/messages_lib/041b_4126_batch.rel create mode 100644 src/nos/lib/messages_lib/041c_bcb6_bcnodes.rel create mode 100644 src/nos/lib/messages_lib/041d_0c93_begin_20_2503o_20_2.rel create mode 100644 src/nos/lib/messages_lib/041e_3245_binary.rel create mode 100644 src/nos/lib/messages_lib/041f_4c4f_blimit.rel create mode 100644 src/nos/lib/messages_lib/0420_ff8d_bootp_20_5bnet_5fna.rel create mode 100644 src/nos/lib/messages_lib/0421_0e8f_bootp_3a_20Net_5fer.rel create mode 100644 src/nos/lib/messages_lib/0422_f5d9_bootp_3a_20timed_20.rel create mode 100644 src/nos/lib/messages_lib/0423_72d6_bp_20_25lx_20tot_20.rel create mode 100644 src/nos/lib/messages_lib/0424_9767_brk.rel create mode 100644 src/nos/lib/messages_lib/0425_f951_broadcast.rel create mode 100644 src/nos/lib/messages_lib/0426_03ff_bsr.rel create mode 100644 src/nos/lib/messages_lib/0427_83e6_by_20_25s_20_28_25s.rel create mode 100644 src/nos/lib/messages_lib/0428_69f3_by_20_25s_20with_20.rel create mode 100644 src/nos/lib/messages_lib/0429_9ab1_bye.rel create mode 100644 src/nos/lib/messages_lib/042a_7cbf_cache.rel create mode 100644 src/nos/lib/messages_lib/042b_a3a9_can_27t_20read_20_2.rel create mode 100644 src/nos/lib/messages_lib/042c_f4b4_can_27t_20trace_20i.rel create mode 100644 src/nos/lib/messages_lib/042d_9aa7_cd.rel create mode 100644 src/nos/lib/messages_lib/042e_42c2_cd_20_3cdirectory_3.rel create mode 100644 src/nos/lib/messages_lib/042f_35a9_chat.rel create mode 100644 src/nos/lib/messages_lib/0430_743f_chdir.rel create mode 100644 src/nos/lib/messages_lib/0431_5ed3_check.rel create mode 100644 src/nos/lib/messages_lib/0432_40b3_check_20_3chost_3e.rel create mode 100644 src/nos/lib/messages_lib/0433_c946_chmod.rel create mode 100644 src/nos/lib/messages_lib/0434_b786_choketime.rel create mode 100644 src/nos/lib/messages_lib/0435_88f5_chown.rel create mode 100644 src/nos/lib/messages_lib/0436_87a8_chroot.rel create mode 100644 src/nos/lib/messages_lib/0437_4822_clean.rel create mode 100644 src/nos/lib/messages_lib/0438_23aa_close.rel create mode 100644 src/nos/lib/messages_lib/0439_2b22_close_20FTP.rel create mode 100644 src/nos/lib/messages_lib/043a_f93d_close_20Finger.rel create mode 100644 src/nos/lib/messages_lib/043b_0957_close_20POP.rel create mode 100644 src/nos/lib/messages_lib/043c_b85c_close_20POP_20_2d_2.rel create mode 100644 src/nos/lib/messages_lib/043d_83a3_close_20SMTP.rel create mode 100644 src/nos/lib/messages_lib/043e_b949_close_20SMTP_20_2d_.rel create mode 100644 src/nos/lib/messages_lib/043f_423c_close_20discard.rel create mode 100644 src/nos/lib/messages_lib/0440_419d_close_20echo.rel create mode 100644 src/nos/lib/messages_lib/0441_03ad_close_20term.rel create mode 100644 src/nos/lib/messages_lib/0442_83dc_code_20_25u_20arg_2.rel create mode 100644 src/nos/lib/messages_lib/0443_ea90_compare.rel create mode 100644 src/nos/lib/messages_lib/0444_a613_compare_20_3cremote.rel create mode 100644 src/nos/lib/messages_lib/0445_fbc2_compress.rel create mode 100644 src/nos/lib/messages_lib/0446_3845_compressed_20.rel create mode 100644 src/nos/lib/messages_lib/0447_26b1_configure.rel create mode 100644 src/nos/lib/messages_lib/0448_749f_connect.rel create mode 100644 src/nos/lib/messages_lib/0449_5769_control.rel create mode 100644 src/nos/lib/messages_lib/044a_941e_control_20up_20_7c_.rel create mode 100644 src/nos/lib/messages_lib/044b_2aba_control_3a_20_25s_0.rel create mode 100644 src/nos/lib/messages_lib/044c_4bf4_cwd.rel create mode 100644 src/nos/lib/messages_lib/044d_62af_d_5finit_28_29.rel create mode 100644 src/nos/lib/messages_lib/044e_5a9b_d_5finit_28_29_20ma.rel create mode 100644 src/nos/lib/messages_lib/044f_62a8_debug.rel create mode 100644 src/nos/lib/messages_lib/0450_740d_default.rel create mode 100644 src/nos/lib/messages_lib/0451_db45_defaultfile.rel create mode 100644 src/nos/lib/messages_lib/0452_818b_delay_20_25lu_0a.rel create mode 100644 src/nos/lib/messages_lib/0453_2c87_dele.rel create mode 100644 src/nos/lib/messages_lib/0454_89a5_delete.rel create mode 100644 src/nos/lib/messages_lib/0455_3919_delete_20_3cfile_3e.rel create mode 100644 src/nos/lib/messages_lib/0456_6466_destlist.rel create mode 100644 src/nos/lib/messages_lib/0457_cfc1_detach.rel create mode 100644 src/nos/lib/messages_lib/0458_26f3_detach_20_3cinterfa.rel create mode 100644 src/nos/lib/messages_lib/0459_3f12_devio_5fgarbage_3a_.rel create mode 100644 src/nos/lib/messages_lib/045a_0f61_dfile_5fsearch_3a_2.rel create mode 100644 src/nos/lib/messages_lib/045b_4eba_dfile_5fupdate_3a_2.rel create mode 100644 src/nos/lib/messages_lib/045c_5b47_dfile_5fupdate_3a_2.rel create mode 100644 src/nos/lib/messages_lib/045d_ef06_dfile_5fupdate_3a_2.rel create mode 100644 src/nos/lib/messages_lib/045e_0173_dialer.rel create mode 100644 src/nos/lib/messages_lib/045f_8d0b_dialer_20_3ciface_3.rel create mode 100644 src/nos/lib/messages_lib/0460_18c3_digipeat.rel create mode 100644 src/nos/lib/messages_lib/0461_bdc7_dir.rel create mode 100644 src/nos/lib/messages_lib/0462_5c0a_directory.rel create mode 100644 src/nos/lib/messages_lib/0463_176f_discard.rel create mode 100644 src/nos/lib/messages_lib/0464_684a_discard_20expired_2.rel create mode 100644 src/nos/lib/messages_lib/0465_f701_disconnect.rel create mode 100644 src/nos/lib/messages_lib/0466_e146_dns.rel create mode 100644 src/nos/lib/messages_lib/0467_8f79_dns_5fquery_3a_20qu.rel create mode 100644 src/nos/lib/messages_lib/0468_6da5_dns_5fquery_3a_20re.rel create mode 100644 src/nos/lib/messages_lib/0469_041c_doexit_3a_20won_27t.rel create mode 100644 src/nos/lib/messages_lib/046a_21ed_domain.rel create mode 100644 src/nos/lib/messages_lib/046b_e0fd_down_20script_3a_20.rel create mode 100644 src/nos/lib/messages_lib/046c_050c_download.rel create mode 100644 src/nos/lib/messages_lib/046d_4853_drop.rel create mode 100644 src/nos/lib/messages_lib/046e_0532_drop_20_3chostid_3e.rel create mode 100644 src/nos/lib/messages_lib/046f_e7cf_dropserver.rel create mode 100644 src/nos/lib/messages_lib/0470_a2e4_dup.rel create mode 100644 src/nos/lib/messages_lib/0471_b319_dup2.rel create mode 100644 src/nos/lib/messages_lib/0472_cb91_dynip.rel create mode 100644 src/nos/lib/messages_lib/0473_2edf_echo.rel create mode 100644 src/nos/lib/messages_lib/0474_7366_empty_20packet_21_2.rel create mode 100644 src/nos/lib/messages_lib/0475_48fd_encapsulation.rel create mode 100644 src/nos/lib/messages_lib/0476_4a34_eol.rel create mode 100644 src/nos/lib/messages_lib/0477_b4ae_escape.rel create mode 100644 src/nos/lib/messages_lib/0478_858e_escc.rel create mode 100644 src/nos/lib/messages_lib/0479_d50a_escc_25d_3a_20No_20.rel create mode 100644 src/nos/lib/messages_lib/047a_6362_esccstat.rel create mode 100644 src/nos/lib/messages_lib/047b_59b0_execve.rel create mode 100644 src/nos/lib/messages_lib/047c_3566_exit.rel create mode 100644 src/nos/lib/messages_lib/047d_bd2b_expired.rel create mode 100644 src/nos/lib/messages_lib/047e_bce0_failure.rel create mode 100644 src/nos/lib/messages_lib/047f_086a_falign.rel create mode 100644 src/nos/lib/messages_lib/0480_303b_files.rel create mode 100644 src/nos/lib/messages_lib/0481_d6a7_filter_20mode_20is_.rel create mode 100644 src/nos/lib/messages_lib/0482_927a_finger.rel create mode 100644 src/nos/lib/messages_lib/0483_8ea1_finger_20name_40hos.rel create mode 100644 src/nos/lib/messages_lib/0484_28f4_flush.rel create mode 100644 src/nos/lib/messages_lib/0485_dc8b_fmount_3a_20can_27t.rel create mode 100644 src/nos/lib/messages_lib/0486_8074_fork.rel create mode 100644 src/nos/lib/messages_lib/0487_8227_forward.rel create mode 100644 src/nos/lib/messages_lib/0488_c066_fp_20_20_20_20_20_2.rel create mode 100644 src/nos/lib/messages_lib/0489_9a2a_free_3a_20WARNING_2.rel create mode 100644 src/nos/lib/messages_lib/048a_f896_freelist.rel create mode 100644 src/nos/lib/messages_lib/048b_bd4f_from_20_25s_20.rel create mode 100644 src/nos/lib/messages_lib/048c_5b02_from_20_25s_2ebbs_2.rel create mode 100644 src/nos/lib/messages_lib/048d_2208_fs_5finit_28_29.rel create mode 100644 src/nos/lib/messages_lib/048e_7fbc_fstat.rel create mode 100644 src/nos/lib/messages_lib/048f_0e84_ftp.rel create mode 100644 src/nos/lib/messages_lib/0490_bafd_ftp_20_3caddress_3e.rel create mode 100644 src/nos/lib/messages_lib/0491_f999_ftp_3e_20syst_0a.rel create mode 100644 src/nos/lib/messages_lib/0492_51ba_garbage_20collectio.rel create mode 100644 src/nos/lib/messages_lib/0493_c2ce_gateway.rel create mode 100644 src/nos/lib/messages_lib/0494_9e35_get.rel create mode 100644 src/nos/lib/messages_lib/0495_c7c0_get_20_3cremotefile.rel create mode 100644 src/nos/lib/messages_lib/0496_60c5_getfsys.rel create mode 100644 src/nos/lib/messages_lib/0497_631b_getinode_3a_20bad_2.rel create mode 100644 src/nos/lib/messages_lib/0498_7dac_getset.rel create mode 100644 src/nos/lib/messages_lib/0499_b3cb_groups.rel create mode 100644 src/nos/lib/messages_lib/049a_156e_hash.rel create mode 100644 src/nos/lib/messages_lib/049b_5bc8_heap_20size_20_25lu.rel create mode 100644 src/nos/lib/messages_lib/049c_856f_heard.rel create mode 100644 src/nos/lib/messages_lib/049d_fc9f_help.rel create mode 100644 src/nos/lib/messages_lib/049e_1d5e_homedir.rel create mode 100644 src/nos/lib/messages_lib/049f_6fa6_hop.rel create mode 100644 src/nos/lib/messages_lib/04a0_df98_host.rel create mode 100644 src/nos/lib/messages_lib/04a1_476e_hostname.rel create mode 100644 src/nos/lib/messages_lib/04a2_2f25_icmp.rel create mode 100644 src/nos/lib/messages_lib/04a3_dd41_ident.rel create mode 100644 src/nos/lib/messages_lib/04a4_fe83_ifconfig.rel create mode 100644 src/nos/lib/messages_lib/04a5_6196_ignored_20_28hold_2.rel create mode 100644 src/nos/lib/messages_lib/04a6_dc84_info.rel create mode 100644 src/nos/lib/messages_lib/04a7_0500_input_20line_3a_20_.rel create mode 100644 src/nos/lib/messages_lib/04a8_9677_interface.rel create mode 100644 src/nos/lib/messages_lib/04a9_3fa5_ioctl.rel create mode 100644 src/nos/lib/messages_lib/04aa_3172_ip.rel create mode 100644 src/nos/lib/messages_lib/04ab_d229_ip_5frecv_28_25s_29.rel create mode 100644 src/nos/lib/messages_lib/04ac_289f_ip_5fsend_0a.rel create mode 100644 src/nos/lib/messages_lib/04ad_0191_ipaddress.rel create mode 100644 src/nos/lib/messages_lib/04ae_dfc4_ipcp.rel create mode 100644 src/nos/lib/messages_lib/04af_f4c1_irtt.rel create mode 100644 src/nos/lib/messages_lib/04b0_516b_kick.rel create mode 100644 src/nos/lib/messages_lib/04b1_a61c_kill.rel create mode 100644 src/nos/lib/messages_lib/04b2_ff9f_kill_20_3cjobnumber.rel create mode 100644 src/nos/lib/messages_lib/04b3_5e27_ksigs_20_25lu_20que.rel create mode 100644 src/nos/lib/messages_lib/04b4_1bbe_kwaits_20_25lu_20no.rel create mode 100644 src/nos/lib/messages_lib/04b5_a567_lcp.rel create mode 100644 src/nos/lib/messages_lib/04b6_b632_link.rel create mode 100644 src/nos/lib/messages_lib/04b7_dfe4_linkaddress.rel create mode 100644 src/nos/lib/messages_lib/04b8_7bad_list.rel create mode 100644 src/nos/lib/messages_lib/04b9_4346_listen.rel create mode 100644 src/nos/lib/messages_lib/04ba_a5dd_listservers.rel create mode 100644 src/nos/lib/messages_lib/04bb_f2d8_local.rel create mode 100644 src/nos/lib/messages_lib/04bc_68f9_log.rel create mode 100644 src/nos/lib/messages_lib/04bd_feb4_logfile.rel create mode 100644 src/nos/lib/messages_lib/04be_52c6_login_3a_20.rel create mode 100644 src/nos/lib/messages_lib/04bf_a516_logscreen.rel create mode 100644 src/nos/lib/messages_lib/04c0_8f77_lookup.rel create mode 100644 src/nos/lib/messages_lib/04c1_7d51_ls.rel create mode 100644 src/nos/lib/messages_lib/04c2_634b_lseek.rel create mode 100644 src/nos/lib/messages_lib/04c3_0288_magic.rel create mode 100644 src/nos/lib/messages_lib/04c4_868b_maibox_20name_20not.rel create mode 100644 src/nos/lib/messages_lib/04c5_2d7f_mailbox.rel create mode 100644 src/nos/lib/messages_lib/04c6_2084_mailbox_20name_20no.rel create mode 100644 src/nos/lib/messages_lib/04c7_86f8_mailhost.rel create mode 100644 src/nos/lib/messages_lib/04c8_63b8_mailhost_20not_20de.rel create mode 100644 src/nos/lib/messages_lib/04c9_139d_maxclients.rel create mode 100644 src/nos/lib/messages_lib/04ca_8d56_maxframe.rel create mode 100644 src/nos/lib/messages_lib/04cb_d5aa_maximum_20route_20q.rel create mode 100644 src/nos/lib/messages_lib/04cc_9853_maxmsg.rel create mode 100644 src/nos/lib/messages_lib/04cd_7203_maxttl.rel create mode 100644 src/nos/lib/messages_lib/04ce_e017_maxwait.rel create mode 100644 src/nos/lib/messages_lib/04cf_e57a_mbuf_20allocs_20_25.rel create mode 100644 src/nos/lib/messages_lib/04d0_8c4f_mcompare.rel create mode 100644 src/nos/lib/messages_lib/04d1_f47e_mcompare_20_3cfile_.rel create mode 100644 src/nos/lib/messages_lib/04d2_a71a_md5.rel create mode 100644 src/nos/lib/messages_lib/04d3_cc78_md5_20_3cfile_3e.rel create mode 100644 src/nos/lib/messages_lib/04d4_4d2a_memory.rel create mode 100644 src/nos/lib/messages_lib/04d5_69ba_memory_20cache_20si.rel create mode 100644 src/nos/lib/messages_lib/04d6_336a_merge.rel create mode 100644 src/nos/lib/messages_lib/04d7_649e_merge_20_25s_20_25d.rel create mode 100644 src/nos/lib/messages_lib/04d8_460c_metric_20better_3a_.rel create mode 100644 src/nos/lib/messages_lib/04d9_3694_metric_20change_3a_.rel create mode 100644 src/nos/lib/messages_lib/04da_44b0_metric_20not_20bett.rel create mode 100644 src/nos/lib/messages_lib/04db_b64c_mget.rel create mode 100644 src/nos/lib/messages_lib/04dc_8d01_mget_20_3cfile_3e_2.rel create mode 100644 src/nos/lib/messages_lib/04dd_1e96_mkd_20.rel create mode 100644 src/nos/lib/messages_lib/04de_304a_mkdir.rel create mode 100644 src/nos/lib/messages_lib/04df_7d04_mkdir_20_3cdirector.rel create mode 100644 src/nos/lib/messages_lib/04e0_6257_mknod.rel create mode 100644 src/nos/lib/messages_lib/04e1_685e_mode.rel create mode 100644 src/nos/lib/messages_lib/04e2_9335_modes_20are_3a_20no.rel create mode 100644 src/nos/lib/messages_lib/04e3_a91f_more.rel create mode 100644 src/nos/lib/messages_lib/04e4_5384_more_20_3cfilename_.rel create mode 100644 src/nos/lib/messages_lib/04e5_ec46_motd.rel create mode 100644 src/nos/lib/messages_lib/04e6_b5d1_mount.rel create mode 100644 src/nos/lib/messages_lib/04e7_2a4d_mput.rel create mode 100644 src/nos/lib/messages_lib/04e8_312f_mput_20_3cfile_3e_2.rel create mode 100644 src/nos/lib/messages_lib/04e9_245f_mru.rel create mode 100644 src/nos/lib/messages_lib/04ea_58b1_mss.rel create mode 100644 src/nos/lib/messages_lib/04eb_708f_mtu.rel create mode 100644 src/nos/lib/messages_lib/04ec_78ae_mycall.rel create mode 100644 src/nos/lib/messages_lib/04ed_8a90_name.rel create mode 100644 src/nos/lib/messages_lib/04ee_b07d_netmask.rel create mode 100644 src/nos/lib/messages_lib/04ef_4d2c_netrom_20bcnodes_20.rel create mode 100644 src/nos/lib/messages_lib/04f0_c5dc_netrom_20connect_20.rel create mode 100644 src/nos/lib/messages_lib/04f1_925a_netrom_20interface_.rel create mode 100644 src/nos/lib/messages_lib/04f2_a510_netrom_20interface_.rel create mode 100644 src/nos/lib/messages_lib/04f3_b271_netrom_20kick_20_3c.rel create mode 100644 src/nos/lib/messages_lib/04f4_5334_netrom_20nodefilter.rel create mode 100644 src/nos/lib/messages_lib/04f5_6bfe_netrom_20nodefilter.rel create mode 100644 src/nos/lib/messages_lib/04f6_328e_netrom_20reset_20_3.rel create mode 100644 src/nos/lib/messages_lib/04f7_18c8_netrom_20route_20ad.rel create mode 100644 src/nos/lib/messages_lib/04f8_fff3_netrom_20route_20dr.rel create mode 100644 src/nos/lib/messages_lib/04f9_e8da_netrom_20route_20in.rel create mode 100644 src/nos/lib/messages_lib/04fa_2254_newproc_20_22_25s_2.rel create mode 100644 src/nos/lib/messages_lib/04fb_4db6_newsession_3a_20WAR.rel create mode 100644 src/nos/lib/messages_lib/04fc_5ab5_newsession_3a_20WAR.rel create mode 100644 src/nos/lib/messages_lib/04fd_7718_next_20pointer_20ou.rel create mode 100644 src/nos/lib/messages_lib/04fe_7b66_nlst.rel create mode 100644 src/nos/lib/messages_lib/04ff_0ca7_nntp_20addserver_20.rel create mode 100644 src/nos/lib/messages_lib/0500_fea0_nntp_20dropserver_2.rel create mode 100644 src/nos/lib/messages_lib/0501_a821_nntp_20kick_20_3cnn.rel create mode 100644 src/nos/lib/messages_lib/0502_a7f6_no_20filesys.rel create mode 100644 src/nos/lib/messages_lib/0503_7405_no_20root.rel create mode 100644 src/nos/lib/messages_lib/0504_b518_no_20such_20route_0.rel create mode 100644 src/nos/lib/messages_lib/0505_3fb4_nodefilter.rel create mode 100644 src/nos/lib/messages_lib/0506_bac4_nodefilter_20subcom.rel create mode 100644 src/nos/lib/messages_lib/0507_e743_nodes.rel create mode 100644 src/nos/lib/messages_lib/0508_57cf_nodetimer.rel create mode 100644 src/nos/lib/messages_lib/0509_7a7f_none_0a.rel create mode 100644 src/nos/lib/messages_lib/050a_29c2_normal_20_28_25s_20.rel create mode 100644 src/nos/lib/messages_lib/050b_07d0_null_0a.rel create mode 100644 src/nos/lib/messages_lib/050c_fb30_obsotimer.rel create mode 100644 src/nos/lib/messages_lib/050d_3971_open.rel create mode 100644 src/nos/lib/messages_lib/050e_a412_open_20_25s.rel create mode 100644 src/nos/lib/messages_lib/050f_e5a0_open_20FTP.rel create mode 100644 src/nos/lib/messages_lib/0510_10d3_open_20Finger.rel create mode 100644 src/nos/lib/messages_lib/0511_fe22_open_20MBOX.rel create mode 100644 src/nos/lib/messages_lib/0512_c7d5_open_20POP.rel create mode 100644 src/nos/lib/messages_lib/0513_2477_open_20SMTP.rel create mode 100644 src/nos/lib/messages_lib/0514_4ca5_open_20discard.rel create mode 100644 src/nos/lib/messages_lib/0515_e649_open_20echo.rel create mode 100644 src/nos/lib/messages_lib/0516_a479_open_20term.rel create mode 100644 src/nos/lib/messages_lib/0517_2f09_p_5finit_28_29.rel create mode 100644 src/nos/lib/messages_lib/0518_76ec_packet_20delayed_20.rel create mode 100644 src/nos/lib/messages_lib/0519_8504_packet_20duped_0a.rel create mode 100644 src/nos/lib/messages_lib/051a_a8e1_packet_20lost_0a.rel create mode 100644 src/nos/lib/messages_lib/051b_ead4_paclen.rel create mode 100644 src/nos/lib/messages_lib/051c_1a03_page.rel create mode 100644 src/nos/lib/messages_lib/051d_dd11_page_20_3ccommand_3.rel create mode 100644 src/nos/lib/messages_lib/051e_b6e1_pap.rel create mode 100644 src/nos/lib/messages_lib/051f_512a_param.rel create mode 100644 src/nos/lib/messages_lib/0520_d362_param_20_3cinterfac.rel create mode 100644 src/nos/lib/messages_lib/0521_9d45_pass.rel create mode 100644 src/nos/lib/messages_lib/0522_f746_pause.rel create mode 100644 src/nos/lib/messages_lib/0523_d9f3_pfc.rel create mode 100644 src/nos/lib/messages_lib/0524_28cb_ping.rel create mode 100644 src/nos/lib/messages_lib/0525_d85a_ping_20_3chostid_3e.rel create mode 100644 src/nos/lib/messages_lib/0526_0458_pipe.rel create mode 100644 src/nos/lib/messages_lib/0527_5919_pool.rel create mode 100644 src/nos/lib/messages_lib/0528_e039_port.rel create mode 100644 src/nos/lib/messages_lib/0529_a9d2_port_20_25d_3a_20tx.rel create mode 100644 src/nos/lib/messages_lib/052a_3aa8_ppp.rel create mode 100644 src/nos/lib/messages_lib/052b_8304_ppp_5fproc_3a_20mis.rel create mode 100644 src/nos/lib/messages_lib/052c_3dc2_protocol_3a_20.rel create mode 100644 src/nos/lib/messages_lib/052d_4160_ps.rel create mode 100644 src/nos/lib/messages_lib/052e_26dc_pthresh.rel create mode 100644 src/nos/lib/messages_lib/052f_a61f_publish.rel create mode 100644 src/nos/lib/messages_lib/0530_274c_pushdown_20calls_20.rel create mode 100644 src/nos/lib/messages_lib/0531_0234_put.rel create mode 100644 src/nos/lib/messages_lib/0532_8f3b_put_20_3clocalfile_.rel create mode 100644 src/nos/lib/messages_lib/0533_2105_pwd.rel create mode 100644 src/nos/lib/messages_lib/0534_0282_qlimit.rel create mode 100644 src/nos/lib/messages_lib/0535_0be6_queries.rel create mode 100644 src/nos/lib/messages_lib/0536_0bef_query.rel create mode 100644 src/nos/lib/messages_lib/0537_6646_query_20_3chostid_3.rel create mode 100644 src/nos/lib/messages_lib/0538_27c8_queue_20job_20_25s_.rel create mode 100644 src/nos/lib/messages_lib/0539_1196_quick.rel create mode 100644 src/nos/lib/messages_lib/053a_ad30_quiet.rel create mode 100644 src/nos/lib/messages_lib/053b_7b54_quit.rel create mode 100644 src/nos/lib/messages_lib/053c_054d_read.rel create mode 100644 src/nos/lib/messages_lib/053d_c7a9_read_20_3cremotefil.rel create mode 100644 src/nos/lib/messages_lib/053e_7ee6_reboot.rel create mode 100644 src/nos/lib/messages_lib/053f_1c64_received_20_25u_20b.rel create mode 100644 src/nos/lib/messages_lib/0540_5735_record.rel create mode 100644 src/nos/lib/messages_lib/0541_18c5_recv_3a_20do_20.rel create mode 100644 src/nos/lib/messages_lib/0542_8810_recv_3a_20dont_20.rel create mode 100644 src/nos/lib/messages_lib/0543_84ef_recv_3a_20will_20.rel create mode 100644 src/nos/lib/messages_lib/0544_219c_recv_3a_20wont_20.rel create mode 100644 src/nos/lib/messages_lib/0545_c7dc_refuse.rel create mode 100644 src/nos/lib/messages_lib/0546_0e31_reject_0a.rel create mode 100644 src/nos/lib/messages_lib/0547_bc2e_remote.rel create mode 100644 src/nos/lib/messages_lib/0548_4ff0_remote_20_5b_2dp_20.rel create mode 100644 src/nos/lib/messages_lib/0549_cb71_rename.rel create mode 100644 src/nos/lib/messages_lib/054a_a493_rename_20_3coldfile.rel create mode 100644 src/nos/lib/messages_lib/054b_6d5b_repeat.rel create mode 100644 src/nos/lib/messages_lib/054c_01b9_repeat_20_3cinterva.rel create mode 100644 src/nos/lib/messages_lib/054d_3f14_request.rel create mode 100644 src/nos/lib/messages_lib/054e_85b2_reset.rel create mode 100644 src/nos/lib/messages_lib/054f_c3ce_response_20id_20_25.rel create mode 100644 src/nos/lib/messages_lib/0550_9bd3_retr.rel create mode 100644 src/nos/lib/messages_lib/0551_5e3c_retries.rel create mode 100644 src/nos/lib/messages_lib/0552_0acb_retry.rel create mode 100644 src/nos/lib/messages_lib/0553_7f96_rip_20accept_20_3cg.rel create mode 100644 src/nos/lib/messages_lib/0554_764e_rip_20add_20_3cdest.rel create mode 100644 src/nos/lib/messages_lib/0555_3030_rip_20drop_20_3cdes.rel create mode 100644 src/nos/lib/messages_lib/0556_8661_rip_20refuse_20_3cg.rel create mode 100644 src/nos/lib/messages_lib/0557_b917_rmd_20.rel create mode 100644 src/nos/lib/messages_lib/0558_a56c_rmdir.rel create mode 100644 src/nos/lib/messages_lib/0559_b9e3_rmdir_20_3cdirector.rel create mode 100644 src/nos/lib/messages_lib/055a_c459_rmhost.rel create mode 100644 src/nos/lib/messages_lib/055b_0284_route.rel create mode 100644 src/nos/lib/messages_lib/055c_ea02_route_20add_20_3cde.rel create mode 100644 src/nos/lib/messages_lib/055d_f461_route_20add_20_5b_2.rel create mode 100644 src/nos/lib/messages_lib/055e_d581_route_20addprivate_.rel create mode 100644 src/nos/lib/messages_lib/055f_bbd2_route_20drop_20_3cd.rel create mode 100644 src/nos/lib/messages_lib/0560_103e_route_20drop_20_5b_.rel create mode 100644 src/nos/lib/messages_lib/0561_a5ec_route_20lookup_20_3.rel create mode 100644 src/nos/lib/messages_lib/0562_ae23_route_20to_20self_3.rel create mode 100644 src/nos/lib/messages_lib/0563_2c09_rtimer.rel create mode 100644 src/nos/lib/messages_lib/0564_ae54_rtt.rel create mode 100644 src/nos/lib/messages_lib/0565_02fc_running.rel create mode 100644 src/nos/lib/messages_lib/0566_b4d7_rxbuf.rel create mode 100644 src/nos/lib/messages_lib/0567_d2fd_sbrk.rel create mode 100644 src/nos/lib/messages_lib/0568_3365_scrollback.rel create mode 100644 src/nos/lib/messages_lib/0569_9a3e_send.rel create mode 100644 src/nos/lib/messages_lib/056a_e397_send_20_22string_22.rel create mode 100644 src/nos/lib/messages_lib/056b_5c19_sender.rel create mode 100644 src/nos/lib/messages_lib/056c_efea_sending_20job_20_25.rel create mode 100644 src/nos/lib/messages_lib/056d_7321_sent_3a_20do_20.rel create mode 100644 src/nos/lib/messages_lib/056e_db3c_sent_3a_20dont_20.rel create mode 100644 src/nos/lib/messages_lib/056f_d7c3_sent_3a_20will_20.rel create mode 100644 src/nos/lib/messages_lib/0570_72b0_sent_3a_20wont_20.rel create mode 100644 src/nos/lib/messages_lib/0571_2d5d_serial_20line_20IP_.rel create mode 100644 src/nos/lib/messages_lib/0572_f33e_serial_20line_20VJ_.rel create mode 100644 src/nos/lib/messages_lib/0573_6f7f_serial_20line_20VJ_.rel create mode 100644 src/nos/lib/messages_lib/0574_6f48_server_20retries.rel create mode 100644 src/nos/lib/messages_lib/0575_f0af_server_20trace.rel create mode 100644 src/nos/lib/messages_lib/0576_db9a_session.rel create mode 100644 src/nos/lib/messages_lib/0577_3031_set_20mycall_20firs.rel create mode 100644 src/nos/lib/messages_lib/0578_1de4_shell.rel create mode 100644 src/nos/lib/messages_lib/0579_3faf_signal.rel create mode 100644 src/nos/lib/messages_lib/057a_dce5_size.rel create mode 100644 src/nos/lib/messages_lib/057b_f163_sizes.rel create mode 100644 src/nos/lib/messages_lib/057c_4046_smtp_20daemon_20ent.rel create mode 100644 src/nos/lib/messages_lib/057d_8e2a_smtp_20daemon_3a_20.rel create mode 100644 src/nos/lib/messages_lib/057e_23e1_smtp_20job_20_25s_2.rel create mode 100644 src/nos/lib/messages_lib/057f_ed89_smtp_20mode_3a_20_2.rel create mode 100644 src/nos/lib/messages_lib/0580_2b33_smtp_20recv_3a_20_2.rel create mode 100644 src/nos/lib/messages_lib/0581_928b_smtp_20sent_3a_20.rel create mode 100644 src/nos/lib/messages_lib/0582_b4cf_socket.rel create mode 100644 src/nos/lib/messages_lib/0583_6b20_some_20strange_2c_2.rel create mode 100644 src/nos/lib/messages_lib/0584_60cd_speed.rel create mode 100644 src/nos/lib/messages_lib/0585_9785_speed_20_3cbps_3e.rel create mode 100644 src/nos/lib/messages_lib/0586_1861_spool_3a_20_25s_0a.rel create mode 100644 src/nos/lib/messages_lib/0587_61f2_src_20_25s.rel create mode 100644 src/nos/lib/messages_lib/0588_4e06_srtt_20_3d_20_25lu_.rel create mode 100644 src/nos/lib/messages_lib/0589_795f_stack_20test.rel create mode 100644 src/nos/lib/messages_lib/058a_45e3_stacktest.rel create mode 100644 src/nos/lib/messages_lib/058b_be0b_stacktest_20_5bon_7.rel create mode 100644 src/nos/lib/messages_lib/058c_fcc6_standard_0a.rel create mode 100644 src/nos/lib/messages_lib/058d_b958_start.rel create mode 100644 src/nos/lib/messages_lib/058e_4b5d_start_20_3cserverna.rel create mode 100644 src/nos/lib/messages_lib/058f_9324_start_20bsr_20_3cin.rel create mode 100644 src/nos/lib/messages_lib/0590_d63e_stat.rel create mode 100644 src/nos/lib/messages_lib/0591_5069_status.rel create mode 100644 src/nos/lib/messages_lib/0592_7dfc_status_20up_20_7c_2.rel create mode 100644 src/nos/lib/messages_lib/0593_68cb_stime.rel create mode 100644 src/nos/lib/messages_lib/0594_4875_stktrace_20from_20p.rel create mode 100644 src/nos/lib/messages_lib/0595_0a0a_stop.rel create mode 100644 src/nos/lib/messages_lib/0596_6ec0_stop_20_3cservernam.rel create mode 100644 src/nos/lib/messages_lib/0597_301d_stopped.rel create mode 100644 src/nos/lib/messages_lib/0598_2918_stor.rel create mode 100644 src/nos/lib/messages_lib/0599_784e_stru.rel create mode 100644 src/nos/lib/messages_lib/059a_bec3_suffix.rel create mode 100644 src/nos/lib/messages_lib/059b_420b_symlink.rel create mode 100644 src/nos/lib/messages_lib/059c_ceb7_sync.rel create mode 100644 src/nos/lib/messages_lib/059d_bb66_syndata.rel create mode 100644 src/nos/lib/messages_lib/059e_b50c_sysdebug.rel create mode 100644 src/nos/lib/messages_lib/059f_be35_sysdebug_20_5bon_7c.rel create mode 100644 src/nos/lib/messages_lib/05a0_8f60_syst.rel create mode 100644 src/nos/lib/messages_lib/05a1_f3f3_system_20call_20tra.rel create mode 100644 src/nos/lib/messages_lib/05a2_a612_system_20kernel_20d.rel create mode 100644 src/nos/lib/messages_lib/05a3_98fb_systrace.rel create mode 100644 src/nos/lib/messages_lib/05a4_71e3_systrace_20_5bon_7c.rel create mode 100644 src/nos/lib/messages_lib/05a5_6404_t3.rel create mode 100644 src/nos/lib/messages_lib/05a6_b31f_target.rel create mode 100644 src/nos/lib/messages_lib/05a7_e630_tcp.rel create mode 100644 src/nos/lib/messages_lib/05a8_e483_tcp_20kick_20_3ctcb.rel create mode 100644 src/nos/lib/messages_lib/05a9_a12c_tcp_20reset_20_3ctc.rel create mode 100644 src/nos/lib/messages_lib/05aa_bb94_tcp_20rtt_20_3ctcb_.rel create mode 100644 src/nos/lib/messages_lib/05ab_f363_tcp_20stat_20_3ctcb.rel create mode 100644 src/nos/lib/messages_lib/05ac_6ff2_telnet.rel create mode 100644 src/nos/lib/messages_lib/05ad_2114_telnet_20_3caddress.rel create mode 100644 src/nos/lib/messages_lib/05ae_6cef_term.rel create mode 100644 src/nos/lib/messages_lib/05af_7425_terminate.rel create mode 100644 src/nos/lib/messages_lib/05b0_4c6f_thresh.rel create mode 100644 src/nos/lib/messages_lib/05b1_535d_time.rel create mode 100644 src/nos/lib/messages_lib/05b2_43a3_time_20before_20fil.rel create mode 100644 src/nos/lib/messages_lib/05b3_7156_timeout.rel create mode 100644 src/nos/lib/messages_lib/05b4_d9a6_timer.rel create mode 100644 src/nos/lib/messages_lib/05b5_d29c_timer_3a_20ints_20w.rel create mode 100644 src/nos/lib/messages_lib/05b6_c82f_times.rel create mode 100644 src/nos/lib/messages_lib/05b7_223a_timestamps.rel create mode 100644 src/nos/lib/messages_lib/05b8_004c_tip_20or_20dialer_2.rel create mode 100644 src/nos/lib/messages_lib/05b9_aa4a_tiptimeout.rel create mode 100644 src/nos/lib/messages_lib/05ba_aa76_tmp_20file_20wiping.rel create mode 100644 src/nos/lib/messages_lib/05bb_2645_tmp_20file_3a_20_25.rel create mode 100644 src/nos/lib/messages_lib/05bc_a165_topt.rel create mode 100644 src/nos/lib/messages_lib/05bd_4f5f_trace.rel create mode 100644 src/nos/lib/messages_lib/05be_3bce_traceroute_20done_3.rel create mode 100644 src/nos/lib/messages_lib/05bf_f7b8_try.rel create mode 100644 src/nos/lib/messages_lib/05c0_e444_ttl.rel create mode 100644 src/nos/lib/messages_lib/05c1_299c_ttylink.rel create mode 100644 src/nos/lib/messages_lib/05c2_e58b_txqlen.rel create mode 100644 src/nos/lib/messages_lib/05c3_f321_type.rel create mode 100644 src/nos/lib/messages_lib/05c4_f1e4_udp.rel create mode 100644 src/nos/lib/messages_lib/05c5_5caf_umount.rel create mode 100644 src/nos/lib/messages_lib/05c6_5c70_unknown_0a.rel create mode 100644 src/nos/lib/messages_lib/05c7_bc4f_unknown_200x_2504x_.rel create mode 100644 src/nos/lib/messages_lib/05c8_5194_unknown_20hardware_.rel create mode 100644 src/nos/lib/messages_lib/05c9_acee_unlink.rel create mode 100644 src/nos/lib/messages_lib/05ca_f303_up_20script_3a_20_2.rel create mode 100644 src/nos/lib/messages_lib/05cb_db93_update.rel create mode 100644 src/nos/lib/messages_lib/05cc_5c27_update_20Domain_2et.rel create mode 100644 src/nos/lib/messages_lib/05cd_0b09_update_20Domain_2et.rel create mode 100644 src/nos/lib/messages_lib/05ce_c5a3_update_20Domain_2et.rel create mode 100644 src/nos/lib/messages_lib/05cf_d4f0_upload.rel create mode 100644 src/nos/lib/messages_lib/05d0_13f7_user.rel create mode 100644 src/nos/lib/messages_lib/05d1_6f25_user_20abort_0a.rel create mode 100644 src/nos/lib/messages_lib/05d2_1b49_userdata.rel create mode 100644 src/nos/lib/messages_lib/05d3_3967_username_20not_20de.rel create mode 100644 src/nos/lib/messages_lib/05d4_c23f_users.rel create mode 100644 src/nos/lib/messages_lib/05d5_5353_utime.rel create mode 100644 src/nos/lib/messages_lib/05d6_d261_valid_20subcommands.rel create mode 100644 src/nos/lib/messages_lib/05d7_a0e5_validblk_3a_20dev_2.rel create mode 100644 src/nos/lib/messages_lib/05d8_74cf_validblk_3a_20inval.rel create mode 100644 src/nos/lib/messages_lib/05d9_ab5c_verbose.rel create mode 100644 src/nos/lib/messages_lib/05da_207d_version.rel create mode 100644 src/nos/lib/messages_lib/05db_9778_view.rel create mode 100644 src/nos/lib/messages_lib/05dc_23f1_view_20_3cfilename_.rel create mode 100644 src/nos/lib/messages_lib/05dd_d63a_wait.rel create mode 100644 src/nos/lib/messages_lib/05de_2887_wait_20_3cmilliseco.rel create mode 100644 src/nos/lib/messages_lib/05df_e988_waitpid.rel create mode 100644 src/nos/lib/messages_lib/05e0_674e_want_20busy_20block.rel create mode 100644 src/nos/lib/messages_lib/05e1_84e4_what.rel create mode 100644 src/nos/lib/messages_lib/05e2_9158_window.rel create mode 100644 src/nos/lib/messages_lib/05e3_5379_wipe.rel create mode 100644 src/nos/lib/messages_lib/05e4_4cc8_write.rel create mode 100644 src/nos/lib/messages_lib/05e5_dd6d_x_25x.rel create mode 100644 src/nos/lib/messages_lib/05e6_ce7b_xcwd.rel create mode 100644 src/nos/lib/messages_lib/05e7_2295_xmd5.rel create mode 100644 src/nos/lib/messages_lib/05e8_e251_xmkd.rel create mode 100644 src/nos/lib/messages_lib/05e9_a48a_xpwd.rel create mode 100644 src/nos/lib/messages_lib/05ea_79d3_xrmd.rel create mode 100644 src/nos/lib/messages_lib/05eb_c59b_zap.rel create mode 100644 src/nos/lib/net.lib create mode 100644 src/nos/lib/net_lib/Allocmbufs.rel create mode 100644 src/nos/lib/net_lib/Badsocket.rel create mode 100644 src/nos/lib/net_lib/Cachehits.rel create mode 100644 src/nos/lib/net_lib/Decode.rel create mode 100644 src/nos/lib/net_lib/Encap.rel create mode 100644 src/nos/lib/net_lib/Encode.rel create mode 100644 src/nos/lib/net_lib/Freembufs.rel create mode 100644 src/nos/lib/net_lib/Ifaces.rel create mode 100644 src/nos/lib/net_lib/Ifcmds.rel create mode 100644 src/nos/lib/net_lib/Loopback.rel create mode 100644 src/nos/lib/net_lib/MD5Final.rel create mode 100644 src/nos/lib/net_lib/MD5Init.rel create mode 100644 src/nos/lib/net_lib/MD5Transform.rel create mode 100644 src/nos/lib/net_lib/MD5Transform_Round1.rel create mode 100644 src/nos/lib/net_lib/MD5Transform_Round2.rel create mode 100644 src/nos/lib/net_lib/MD5Transform_Round3.rel create mode 100644 src/nos/lib/net_lib/MD5Transform_Round4.rel create mode 100644 src/nos/lib/net_lib/MD5Update.rel create mode 100644 src/nos/lib/net_lib/Mbufcache.rel create mode 100644 src/nos/lib/net_lib/Msizes.rel create mode 100644 src/nos/lib/net_lib/Noipaddr.rel create mode 100644 src/nos/lib/net_lib/PADDING.rel create mode 100644 src/nos/lib/net_lib/Pushalloc.rel create mode 100644 src/nos/lib/net_lib/Pushdowns.rel create mode 100644 src/nos/lib/net_lib/Sock_errlist.rel create mode 100644 src/nos/lib/net_lib/Socktypes.rel create mode 100644 src/nos/lib/net_lib/Usock.rel create mode 100644 src/nos/lib/net_lib/_Files.rel create mode 100644 src/nos/lib/net_lib/_clrtmp.rel create mode 100644 src/nos/lib/net_lib/_fclose.rel create mode 100644 src/nos/lib/net_lib/_fcreat.rel create mode 100644 src/nos/lib/net_lib/_fgetc.rel create mode 100644 src/nos/lib/net_lib/_fillbuf.rel create mode 100644 src/nos/lib/net_lib/accept.rel create mode 100644 src/nos/lib/net_lib/ahdlc.rel create mode 100644 src/nos/lib/net_lib/alloc.rel create mode 100644 src/nos/lib/net_lib/alloc_mbuf.rel create mode 100644 src/nos/lib/net_lib/ambufw.rel create mode 100644 src/nos/lib/net_lib/append.rel create mode 100644 src/nos/lib/net_lib/asyopen.rel create mode 100644 src/nos/lib/net_lib/audit.rel create mode 100644 src/nos/lib/net_lib/bind.rel create mode 100644 src/nos/lib/net_lib/bitbucket.rel create mode 100644 src/nos/lib/net_lib/close.rel create mode 100644 src/nos/lib/net_lib/close_s.rel create mode 100644 src/nos/lib/net_lib/cmdparse.rel create mode 100644 src/nos/lib/net_lib/connect.rel create mode 100644 src/nos/lib/net_lib/copy_p.rel create mode 100644 src/nos/lib/net_lib/crc.rel create mode 100644 src/nos/lib/net_lib/dequeue.rel create mode 100644 src/nos/lib/net_lib/devparam.rel create mode 100644 src/nos/lib/net_lib/diagopen.rel create mode 100644 src/nos/lib/net_lib/displayopen.rel create mode 100644 src/nos/lib/net_lib/dodetach.rel create mode 100644 src/nos/lib/net_lib/dodialer.rel create mode 100644 src/nos/lib/net_lib/dofiles.rel create mode 100644 src/nos/lib/net_lib/doifconfig.rel create mode 100644 src/nos/lib/net_lib/dup_p.rel create mode 100644 src/nos/lib/net_lib/enqueue.rel create mode 100644 src/nos/lib/net_lib/eolseq.rel create mode 100644 src/nos/lib/net_lib/exit.rel create mode 100644 src/nos/lib/net_lib/extract.rel create mode 100644 src/nos/lib/net_lib/fblock.rel create mode 100644 src/nos/lib/net_lib/fclose.rel create mode 100644 src/nos/lib/net_lib/fcloseall.rel create mode 100644 src/nos/lib/net_lib/fdopen.rel create mode 100644 src/nos/lib/net_lib/fdup.rel create mode 100644 src/nos/lib/net_lib/fflush.rel create mode 100644 src/nos/lib/net_lib/fgetc.rel create mode 100644 src/nos/lib/net_lib/fgets.rel create mode 100644 src/nos/lib/net_lib/files.rel create mode 100644 src/nos/lib/net_lib/flushall.rel create mode 100644 src/nos/lib/net_lib/fmode.rel create mode 100644 src/nos/lib/net_lib/fpname.rel create mode 100644 src/nos/lib/net_lib/fprintf.rel create mode 100644 src/nos/lib/net_lib/fputc.rel create mode 100644 src/nos/lib/net_lib/fputs.rel create mode 100644 src/nos/lib/net_lib/fread.rel create mode 100644 src/nos/lib/net_lib/free_mbuf.rel create mode 100644 src/nos/lib/net_lib/free_p.rel create mode 100644 src/nos/lib/net_lib/free_q.rel create mode 100644 src/nos/lib/net_lib/freesock.rel create mode 100644 src/nos/lib/net_lib/freopen.rel create mode 100644 src/nos/lib/net_lib/fseek.rel create mode 100644 src/nos/lib/net_lib/ftell.rel create mode 100644 src/nos/lib/net_lib/ftpsubr.rel create mode 100644 src/nos/lib/net_lib/fwrite.rel create mode 100644 src/nos/lib/net_lib/getopt.rel create mode 100644 src/nos/lib/net_lib/getpeername.rel create mode 100644 src/nos/lib/net_lib/gets.rel create mode 100644 src/nos/lib/net_lib/getsockname.rel create mode 100644 src/nos/lib/net_lib/if_detach.rel create mode 100644 src/nos/lib/net_lib/if_lookup.rel create mode 100644 src/nos/lib/net_lib/if_name.rel create mode 100644 src/nos/lib/net_lib/if_tx.rel create mode 100644 src/nos/lib/net_lib/ifbroad.rel create mode 100644 src/nos/lib/net_lib/ifencap.rel create mode 100644 src/nos/lib/net_lib/ifforw.rel create mode 100644 src/nos/lib/net_lib/ifipaddr.rel create mode 100644 src/nos/lib/net_lib/iflinkadr.rel create mode 100644 src/nos/lib/net_lib/ifmtu.rel create mode 100644 src/nos/lib/net_lib/ifnetmsk.rel create mode 100644 src/nos/lib/net_lib/ifrxbuf.rel create mode 100644 src/nos/lib/net_lib/iftxqlen.rel create mode 100644 src/nos/lib/net_lib/ismyaddr.rel create mode 100644 src/nos/lib/net_lib/kernel.rel create mode 100644 src/nos/lib/net_lib/ksubr.rel create mode 100644 src/nos/lib/net_lib/len_p.rel create mode 100644 src/nos/lib/net_lib/len_q.rel create mode 100644 src/nos/lib/net_lib/listen.rel create mode 100644 src/nos/lib/net_lib/locsock.rel create mode 100644 src/nos/lib/net_lib/mask2width.rel create mode 100644 src/nos/lib/net_lib/mbuf_crunch.rel create mode 100644 src/nos/lib/net_lib/mbuf_garbage.rel create mode 100644 src/nos/lib/net_lib/mbufsizes.rel create mode 100644 src/nos/lib/net_lib/mbufstat.rel create mode 100644 src/nos/lib/net_lib/misc.rel create mode 100644 src/nos/lib/net_lib/net_route.rel create mode 100644 src/nos/lib/net_lib/network.rel create mode 100644 src/nos/lib/net_lib/nu_output.rel create mode 100644 src/nos/lib/net_lib/nu_send.rel create mode 100644 src/nos/lib/net_lib/pathname.rel create mode 100644 src/nos/lib/net_lib/perror.rel create mode 100644 src/nos/lib/net_lib/pipeopen.rel create mode 100644 src/nos/lib/net_lib/printf.rel create mode 100644 src/nos/lib/net_lib/pull16.rel create mode 100644 src/nos/lib/net_lib/pull32.rel create mode 100644 src/nos/lib/net_lib/pull8.rel create mode 100644 src/nos/lib/net_lib/pullup.rel create mode 100644 src/nos/lib/net_lib/pushdown.rel create mode 100644 src/nos/lib/net_lib/puts.rel create mode 100644 src/nos/lib/net_lib/qdata.rel create mode 100644 src/nos/lib/net_lib/read.rel create mode 100644 src/nos/lib/net_lib/recv_mbuf.rel create mode 100644 src/nos/lib/net_lib/send_mbuf.rel create mode 100644 src/nos/lib/net_lib/setbuf.rel create mode 100644 src/nos/lib/net_lib/setencap.rel create mode 100644 src/nos/lib/net_lib/seteol.rel create mode 100644 src/nos/lib/net_lib/settos.rel create mode 100644 src/nos/lib/net_lib/setvbuf.rel create mode 100644 src/nos/lib/net_lib/showiface.rel create mode 100644 src/nos/lib/net_lib/shutdown.rel create mode 100644 src/nos/lib/net_lib/sockcmd.rel create mode 100644 src/nos/lib/net_lib/socket.rel create mode 100644 src/nos/lib/net_lib/socketpair.rel create mode 100644 src/nos/lib/net_lib/sockinit.rel create mode 100644 src/nos/lib/net_lib/sockkick.rel create mode 100644 src/nos/lib/net_lib/socklen.rel create mode 100644 src/nos/lib/net_lib/sockowner.rel create mode 100644 src/nos/lib/net_lib/sockuser.rel create mode 100644 src/nos/lib/net_lib/sockutil.rel create mode 100644 src/nos/lib/net_lib/timer.rel create mode 100644 src/nos/lib/net_lib/tmpfile.rel create mode 100644 src/nos/lib/net_lib/trim_mbuf.rel create mode 100644 src/nos/lib/net_lib/ttydriv.rel create mode 100644 src/nos/lib/net_lib/ungetc.rel create mode 100644 src/nos/lib/net_lib/usesock.rel create mode 100644 src/nos/lib/net_lib/vfprintf.rel create mode 100644 src/nos/lib/net_lib/view.rel create mode 100644 src/nos/lib/net_lib/vprintf.rel create mode 100644 src/nos/lib/net_lib/wildmat.rel create mode 100644 src/nos/lib/net_lib/write.rel create mode 100644 src/nos/lib/net_lib/write_p.rel create mode 100644 src/nos/lib/ppp.lib create mode 100644 src/nos/lib/ppp_lib/IPcpcmds.rel create mode 100644 src/nos/lib/ppp_lib/IPcpside_cmds.rel create mode 100644 src/nos/lib/ppp_lib/Lcpcmds.rel create mode 100644 src/nos/lib/ppp_lib/Lcpside_cmds.rel create mode 100644 src/nos/lib/ppp_lib/Papcmds.rel create mode 100644 src/nos/lib/ppp_lib/asy.rel create mode 100644 src/nos/lib/ppp_lib/decode.rel create mode 100644 src/nos/lib/ppp_lib/dialer.rel create mode 100644 src/nos/lib/ppp_lib/doipcp_address.rel create mode 100644 src/nos/lib/ppp_lib/doipcp_compress.rel create mode 100644 src/nos/lib/ppp_lib/doipcp_default.rel create mode 100644 src/nos/lib/ppp_lib/doipcp_local.rel create mode 100644 src/nos/lib/ppp_lib/doipcp_open.rel create mode 100644 src/nos/lib/ppp_lib/doipcp_pool.rel create mode 100644 src/nos/lib/ppp_lib/doipcp_remote.rel create mode 100644 src/nos/lib/ppp_lib/dolcp_accm.rel create mode 100644 src/nos/lib/ppp_lib/dolcp_acfc.rel create mode 100644 src/nos/lib/ppp_lib/dolcp_auth.rel create mode 100644 src/nos/lib/ppp_lib/dolcp_default.rel create mode 100644 src/nos/lib/ppp_lib/dolcp_local.rel create mode 100644 src/nos/lib/ppp_lib/dolcp_magic.rel create mode 100644 src/nos/lib/ppp_lib/dolcp_mru.rel create mode 100644 src/nos/lib/ppp_lib/dolcp_open.rel create mode 100644 src/nos/lib/ppp_lib/dolcp_pfc.rel create mode 100644 src/nos/lib/ppp_lib/dolcp_remote.rel create mode 100644 src/nos/lib/ppp_lib/dopap_user.rel create mode 100644 src/nos/lib/ppp_lib/doppp_ipcp.rel create mode 100644 src/nos/lib/ppp_lib/doppp_lcp.rel create mode 100644 src/nos/lib/ppp_lib/doppp_pap.rel create mode 100644 src/nos/lib/ppp_lib/encode.rel create mode 100644 src/nos/lib/ppp_lib/fcstab.rel create mode 100644 src/nos/lib/ppp_lib/fsmCodes.rel create mode 100644 src/nos/lib/ppp_lib/fsmStates.rel create mode 100644 src/nos/lib/ppp_lib/fsm_close.rel create mode 100644 src/nos/lib/ppp_lib/fsm_down.rel create mode 100644 src/nos/lib/ppp_lib/fsm_free.rel create mode 100644 src/nos/lib/ppp_lib/fsm_init.rel create mode 100644 src/nos/lib/ppp_lib/fsm_log.rel create mode 100644 src/nos/lib/ppp_lib/fsm_no_action.rel create mode 100644 src/nos/lib/ppp_lib/fsm_no_check.rel create mode 100644 src/nos/lib/ppp_lib/fsm_opening.rel create mode 100644 src/nos/lib/ppp_lib/fsm_proc.rel create mode 100644 src/nos/lib/ppp_lib/fsm_reset.rel create mode 100644 src/nos/lib/ppp_lib/fsm_send.rel create mode 100644 src/nos/lib/ppp_lib/fsm_sendreq.rel create mode 100644 src/nos/lib/ppp_lib/fsm_sendtermack.rel create mode 100644 src/nos/lib/ppp_lib/fsm_sendtermreq.rel create mode 100644 src/nos/lib/ppp_lib/fsm_start.rel create mode 100644 src/nos/lib/ppp_lib/fsm_timeout.rel create mode 100644 src/nos/lib/ppp_lib/fsm_timer.rel create mode 100644 src/nos/lib/ppp_lib/htoncnf.rel create mode 100644 src/nos/lib/ppp_lib/htonppp.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_ack.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_addr_idle.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_check.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_closing.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_constants.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_default.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_free.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_init.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_lookuppeer.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_makeoptions.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_makereq.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_nak.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_negotiate.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_opening.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_option.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_option_length.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_poolnext.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_reject.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_request.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_reset.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_starting.rel create mode 100644 src/nos/lib/ppp_lib/ipcp_stopping.rel create mode 100644 src/nos/lib/ppp_lib/lcp_ack.rel create mode 100644 src/nos/lib/ppp_lib/lcp_check.rel create mode 100644 src/nos/lib/ppp_lib/lcp_closing.rel create mode 100644 src/nos/lib/ppp_lib/lcp_constants.rel create mode 100644 src/nos/lib/ppp_lib/lcp_default.rel create mode 100644 src/nos/lib/ppp_lib/lcp_free.rel create mode 100644 src/nos/lib/ppp_lib/lcp_init.rel create mode 100644 src/nos/lib/ppp_lib/lcp_makeoptions.rel create mode 100644 src/nos/lib/ppp_lib/lcp_makereq.rel create mode 100644 src/nos/lib/ppp_lib/lcp_nak.rel create mode 100644 src/nos/lib/ppp_lib/lcp_negotiate.rel create mode 100644 src/nos/lib/ppp_lib/lcp_opening.rel create mode 100644 src/nos/lib/ppp_lib/lcp_option.rel create mode 100644 src/nos/lib/ppp_lib/lcp_option_length.rel create mode 100644 src/nos/lib/ppp_lib/lcp_reject.rel create mode 100644 src/nos/lib/ppp_lib/lcp_request.rel create mode 100644 src/nos/lib/ppp_lib/lcp_reset.rel create mode 100644 src/nos/lib/ppp_lib/lcp_starting.rel create mode 100644 src/nos/lib/ppp_lib/lcp_stopping.rel create mode 100644 src/nos/lib/ppp_lib/ntohcnf.rel create mode 100644 src/nos/lib/ppp_lib/ntohopt.rel create mode 100644 src/nos/lib/ppp_lib/pap_check.rel create mode 100644 src/nos/lib/ppp_lib/pap_constants.rel create mode 100644 src/nos/lib/ppp_lib/pap_down.rel create mode 100644 src/nos/lib/ppp_lib/pap_free.rel create mode 100644 src/nos/lib/ppp_lib/pap_init.rel create mode 100644 src/nos/lib/ppp_lib/pap_local.rel create mode 100644 src/nos/lib/ppp_lib/pap_makereq.rel create mode 100644 src/nos/lib/ppp_lib/pap_monitor.rel create mode 100644 src/nos/lib/ppp_lib/pap_opening.rel create mode 100644 src/nos/lib/ppp_lib/pap_proc.rel create mode 100644 src/nos/lib/ppp_lib/pap_pwdlookup.rel create mode 100644 src/nos/lib/ppp_lib/pap_remote.rel create mode 100644 src/nos/lib/ppp_lib/pap_request.rel create mode 100644 src/nos/lib/ppp_lib/pap_shutdown.rel create mode 100644 src/nos/lib/ppp_lib/pap_timeout.rel create mode 100644 src/nos/lib/ppp_lib/pap_verify.rel create mode 100644 src/nos/lib/ppp_lib/ppp_discard.rel create mode 100644 src/nos/lib/ppp_lib/ppp_echo.rel create mode 100644 src/nos/lib/ppp_lib/ppp_error.rel create mode 100644 src/nos/lib/ppp_lib/ppp_free.rel create mode 100644 src/nos/lib/ppp_lib/ppp_init.rel create mode 100644 src/nos/lib/ppp_lib/ppp_iostatus.rel create mode 100644 src/nos/lib/ppp_lib/ppp_log.rel create mode 100644 src/nos/lib/ppp_lib/ppp_output.rel create mode 100644 src/nos/lib/ppp_lib/ppp_proc.rel create mode 100644 src/nos/lib/ppp_lib/ppp_raw.rel create mode 100644 src/nos/lib/ppp_lib/ppp_ready.rel create mode 100644 src/nos/lib/ppp_lib/ppp_recv.rel create mode 100644 src/nos/lib/ppp_lib/ppp_send.rel create mode 100644 src/nos/lib/ppp_lib/ppp_skipped.rel create mode 100644 src/nos/lib/ppp_lib/pppcmd.rel create mode 100644 src/nos/lib/ppp_lib/pppdump.rel create mode 100644 src/nos/lib/ppp_lib/slhc_compress.rel create mode 100644 src/nos/lib/ppp_lib/slhc_free.rel create mode 100644 src/nos/lib/ppp_lib/slhc_i_status.rel create mode 100644 src/nos/lib/ppp_lib/slhc_init.rel create mode 100644 src/nos/lib/ppp_lib/slhc_o_status.rel create mode 100644 src/nos/lib/ppp_lib/slhc_remember.rel create mode 100644 src/nos/lib/ppp_lib/slhc_toss.rel create mode 100644 src/nos/lib/ppp_lib/slhc_uncompress.rel create mode 100644 src/nos/lib/ppp_lib/slhcdump.rel create mode 100644 src/nos/lib/ppp_lib/slip.rel create mode 100644 src/nos/lib/ppp_lib/sppp.rel create mode 100644 src/nos/lib/ppp_lib/stpcpy.rel create mode 100644 src/nos/lib/servers.lib create mode 100644 src/nos/lib/servers_lib/Ftpscmd.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_badcmd.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_badport.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_badtype.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_banner.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_binwarn.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_bye.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_cantmake.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_cantopen.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_delefail.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_deleok.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_givepass.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_logged.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_lowmem.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_mkdok.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_noconn.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_nodir.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_noperm.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_notlog.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_okay.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_only8.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_portok.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_pwdmsg.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_rxok.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_sending.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_syst.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_txok.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_typeok.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_unimp.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_unsupp.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_userfirst.rel create mode 100644 src/nos/lib/servers_lib/Ftpsmsg_writerr.rel create mode 100644 src/nos/lib/servers_lib/bootpcmd.rel create mode 100644 src/nos/lib/servers_lib/bootpd.rel create mode 100644 src/nos/lib/servers_lib/bootpdip.rel create mode 100644 src/nos/lib/servers_lib/fingerd.rel create mode 100644 src/nos/lib/servers_lib/ftp0.rel create mode 100644 src/nos/lib/servers_lib/ftplogin.rel create mode 100644 src/nos/lib/servers_lib/ftpserv.rel create mode 100644 src/nos/lib/servers_lib/ftpserv_switch.rel create mode 100644 src/nos/lib/servers_lib/ftpserv_switch_xmd5.rel create mode 100644 src/nos/lib/servers_lib/ftpstart.rel create mode 100644 src/nos/lib/servers_lib/permcheck.rel create mode 100644 src/nos/lib/servers_lib/pport.rel create mode 100644 src/nos/lib/servers_lib/recvit.rel create mode 100644 src/nos/lib/servers_lib/sendit.rel create mode 100644 src/nos/lib/servers_lib/smisc.rel create mode 100644 src/nos/lib/servers_lib/ttylink.rel create mode 100644 src/nos/lib/z80.lib create mode 100644 src/nos/lib/z80_lib/Asy.rel create mode 100644 src/nos/lib/z80_lib/Esccchan.rel create mode 100644 src/nos/lib/z80_lib/Esccinfo.rel create mode 100644 src/nos/lib/z80_lib/Esccmaxvec.rel create mode 100644 src/nos/lib/z80_lib/Esccpolltab.rel create mode 100644 src/nos/lib/z80_lib/Esccvecloc.rel create mode 100644 src/nos/lib/z80_lib/Handle.rel create mode 100644 src/nos/lib/z80_lib/Orgivec.rel create mode 100644 src/nos/lib/z80_lib/Random.rel create mode 100644 src/nos/lib/z80_lib/ascivec.rel create mode 100644 src/nos/lib/z80_lib/asy_close.rel create mode 100644 src/nos/lib/z80_lib/asy_init.rel create mode 100644 src/nos/lib/z80_lib/asy_ioctl.rel create mode 100644 src/nos/lib/z80_lib/asy_open.rel create mode 100644 src/nos/lib/z80_lib/asy_read.rel create mode 100644 src/nos/lib/z80_lib/asy_send.rel create mode 100644 src/nos/lib/z80_lib/asy_speed.rel create mode 100644 src/nos/lib/z80_lib/asy_stop.rel create mode 100644 src/nos/lib/z80_lib/asy_write.rel create mode 100644 src/nos/lib/z80_lib/asycom.rel create mode 100644 src/nos/lib/z80_lib/asyint.rel create mode 100644 src/nos/lib/z80_lib/asyret.rel create mode 100644 src/nos/lib/z80_lib/asyrxint.rel create mode 100644 src/nos/lib/z80_lib/asytimer.rel create mode 100644 src/nos/lib/z80_lib/asytxint.rel create mode 100644 src/nos/lib/z80_lib/copyr.rel create mode 100644 src/nos/lib/z80_lib/diag.rel create mode 100644 src/nos/lib/z80_lib/dirutil.rel create mode 100644 src/nos/lib/z80_lib/doasystat.rel create mode 100644 src/nos/lib/z80_lib/doesccstat.rel create mode 100644 src/nos/lib/z80_lib/escc_aioctl.rel create mode 100644 src/nos/lib/z80_lib/escc_asyex.rel create mode 100644 src/nos/lib/z80_lib/escc_async.rel create mode 100644 src/nos/lib/z80_lib/escc_asyrx.rel create mode 100644 src/nos/lib/z80_lib/escc_asysp.rel create mode 100644 src/nos/lib/z80_lib/escc_asytx.rel create mode 100644 src/nos/lib/z80_lib/escc_attach.rel create mode 100644 src/nos/lib/z80_lib/escc_delay.rel create mode 100644 src/nos/lib/z80_lib/escc_frameup.rel create mode 100644 src/nos/lib/z80_lib/escc_init.rel create mode 100644 src/nos/lib/z80_lib/escc_raw.rel create mode 100644 src/nos/lib/z80_lib/escc_sdlc.rel create mode 100644 src/nos/lib/z80_lib/escc_sdlcex.rel create mode 100644 src/nos/lib/z80_lib/escc_sdlcrx.rel create mode 100644 src/nos/lib/z80_lib/escc_sdlcsp.rel create mode 100644 src/nos/lib/z80_lib/escc_sdlctx.rel create mode 100644 src/nos/lib/z80_lib/escc_send.rel create mode 100644 src/nos/lib/z80_lib/escc_sioctl.rel create mode 100644 src/nos/lib/z80_lib/escc_speed.rel create mode 100644 src/nos/lib/z80_lib/escc_sstart.rel create mode 100644 src/nos/lib/z80_lib/escc_stop.rel create mode 100644 src/nos/lib/z80_lib/escc_tossb.rel create mode 100644 src/nos/lib/z80_lib/escc_txoff.rel create mode 100644 src/nos/lib/z80_lib/escc_txon.rel create mode 100644 src/nos/lib/z80_lib/esccgen.rel create mode 100644 src/nos/lib/z80_lib/esccstop.rel create mode 100644 src/nos/lib/z80_lib/escctimer.rel create mode 100644 src/nos/lib/z80_lib/esccvec.rel create mode 100644 src/nos/lib/z80_lib/get_asy.rel create mode 100644 src/nos/lib/z80_lib/get_escc.rel create mode 100644 src/nos/lib/z80_lib/get_rlsd_asy.rel create mode 100644 src/nos/lib/z80_lib/pasy.rel create mode 100644 src/nos/lib/z80_lib/rand.rel create mode 100644 src/nos/lib/z80_lib/stktrace.rel create mode 100644 src/nos/lib/z80_lib/sw.rel create mode 100644 src/nos/lib/z80_lib/z80.rel create mode 100644 src/nos/lib/z80_lib/z80gen.rel create mode 100644 src/nos/main/auto.mk create mode 100644 src/nos/main/config.c create mode 100644 src/nos/main/crt0_kernel.S create mode 100644 src/nos/main/main.c create mode 100644 src/nos/main/makefile create mode 100644 src/nos/main/n.sh create mode 100644 src/nos/main/parm.c create mode 100644 src/nos/main/session.c create mode 100644 src/nos/main/version.c create mode 100644 src/nos/main/x.sh create mode 100644 src/nos/make.d/host.mk create mode 100644 src/nos/makefile create mode 100644 src/nos/mkutil/aud.c create mode 100644 src/nos/mkutil/genparm.c create mode 100644 src/nos/mkutil/makefile% create mode 100644 src/nos/mkutil/mktl.c create mode 100644 src/nos/mkutil/mktl.exe create mode 100644 src/nos/net/ahdlc.c create mode 100644 src/nos/net/alloc.c create mode 100644 src/nos/net/audit.c create mode 100644 src/nos/net/auto.mk create mode 100644 src/nos/net/cmdparse.c create mode 100644 src/nos/net/crc.c create mode 100644 src/nos/net/devparam.c create mode 100644 src/nos/net/files.c create mode 100644 src/nos/net/ftpsubr.c create mode 100644 src/nos/net/getopt.c create mode 100644 src/nos/net/iface.c create mode 100644 src/nos/net/kernel.c create mode 100644 src/nos/net/ksubr.c create mode 100644 src/nos/net/locsock.c create mode 100644 src/nos/net/makefile create mode 100644 src/nos/net/mbuf.c create mode 100644 src/nos/net/md5c.c create mode 100644 src/nos/net/misc.c create mode 100644 src/nos/net/pathname.c create mode 100644 src/nos/net/sockcmd.c create mode 100644 src/nos/net/socket.c create mode 100644 src/nos/net/sockuser.c create mode 100644 src/nos/net/sockutil.c create mode 100644 src/nos/net/stdio.c create mode 100644 src/nos/net/timer.c create mode 100644 src/nos/net/ttydriv.c create mode 100644 src/nos/net/vfprintf.c create mode 100644 src/nos/net/view.c create mode 100644 src/nos/net/wildmat.c create mode 100644 src/nos/netrom/auto.mk create mode 100644 src/nos/netrom/makefile create mode 100644 src/nos/netrom/nr3.c create mode 100644 src/nos/netrom/nr4.c create mode 100644 src/nos/netrom/nr4hdr.c create mode 100644 src/nos/netrom/nr4mail.c create mode 100644 src/nos/netrom/nr4subr.c create mode 100644 src/nos/netrom/nr4timer.c create mode 100644 src/nos/netrom/nr4user.c create mode 100644 src/nos/netrom/nrcmd.c create mode 100644 src/nos/netrom/nrhdr.c create mode 100644 src/nos/netrom/nrs.c create mode 100644 src/nos/netrom/nrsock.c create mode 100644 src/nos/pmm/ADDINCL.PMM create mode 100644 src/nos/pmm/LOGMSG8.PMM create mode 100644 src/nos/pmm/LOGMSG9.PMM create mode 100644 src/nos/pmm/NULLMSG.PMM create mode 100644 src/nos/pmm/STRING.PMM create mode 100644 src/nos/pmm/X create mode 100644 src/nos/pmm/a.bat create mode 100644 src/nos/pmm/asci.pmm create mode 100644 src/nos/pmm/diffdir.pmm create mode 100644 src/nos/pmm/endifize.pmm create mode 100644 src/nos/pmm/i18nall.pmm create mode 100644 src/nos/pmm/i18nize.pmm create mode 100644 src/nos/pmm/ifdefize.pmm create mode 100644 src/nos/pmm/modulize.pmm create mode 100644 src/nos/pmm/out create mode 100644 src/nos/pmm/z8.pmm create mode 100644 src/nos/pmm/z9.pmm create mode 100644 src/nos/po/auto.mk create mode 100644 src/nos/po/makefile create mode 100644 src/nos/po/messages.po create mode 100644 src/nos/po/messages.txt create mode 100644 src/nos/po/n.sh create mode 100644 src/nos/ppp/asy.c create mode 100644 src/nos/ppp/auto.mk create mode 100644 src/nos/ppp/dialer.c create mode 100644 src/nos/ppp/makefile create mode 100644 src/nos/ppp/ppp.c create mode 100644 src/nos/ppp/pppcmd.c create mode 100644 src/nos/ppp/pppdump.c create mode 100644 src/nos/ppp/pppfsm.c create mode 100644 src/nos/ppp/pppipcp.c create mode 100644 src/nos/ppp/ppplcp.c create mode 100644 src/nos/ppp/ppppap.c create mode 100644 src/nos/ppp/slhc.c create mode 100644 src/nos/ppp/slhcdump.c create mode 100644 src/nos/ppp/slip.c create mode 100644 src/nos/ppp/sppp.c create mode 100644 src/nos/rate.bas create mode 100644 src/nos/servers/auto.mk create mode 100644 src/nos/servers/bmutil.c create mode 100644 src/nos/servers/bootpcmd.c create mode 100644 src/nos/servers/bootpd.c create mode 100644 src/nos/servers/bootpdip.c create mode 100644 src/nos/servers/fingerd.c create mode 100644 src/nos/servers/forward.c create mode 100644 src/nos/servers/ftpserv.c create mode 100644 src/nos/servers/mailbox.c create mode 100644 src/nos/servers/makefile create mode 100644 src/nos/servers/popserv.c create mode 100644 src/nos/servers/rewrite.c create mode 100644 src/nos/servers/smisc.c create mode 100644 src/nos/servers/smtpserv.c create mode 100644 src/nos/servers/sysprs7.dll create mode 100644 src/nos/servers/sysprs7.tgz create mode 100644 src/nos/servers/telnetd.c create mode 100644 src/nos/servers/tipmail.c create mode 100644 src/nos/servers/ttylink.c create mode 100644 src/nos/sys/!readme! create mode 100644 src/nos/sys/_sys/!readme! create mode 100644 src/nos/sys/_sys/auto.mk create mode 100644 src/nos/sys/_sys/makefile create mode 100644 src/nos/sys/_sys/sys.c create mode 100644 src/nos/sys/_sys/unix.h create mode 100644 src/nos/sys/_sys/unix_banked.S create mode 100644 src/nos/sys/_sys/unix_large.S create mode 100644 src/nos/sys/auto.mk create mode 100644 src/nos/sys/makefile create mode 100644 src/nos/sys/sys.c create mode 100644 src/nos/sys/unix.h create mode 100644 src/nos/sys/unix_banked.S create mode 100644 src/nos/sys/unix_large.S create mode 100644 src/nos/turboc/lib/clients.lib create mode 100644 src/nos/turboc/lib/dump.lib create mode 100644 src/nos/turboc/lib/internet.lib create mode 100644 src/nos/turboc/lib/net.lib create mode 100644 src/nos/turboc/lib/netrom.lib create mode 100644 src/nos/turboc/lib/servers.lib create mode 100644 src/nos/turboc/makefile create mode 100644 src/nos/turboc/net.map create mode 100644 src/nos/turboc/obj/ahdlc.obj create mode 100644 src/nos/turboc/obj/alloc.obj create mode 100644 src/nos/turboc/obj/arcdump.obj create mode 100644 src/nos/turboc/obj/arcnet.obj create mode 100644 src/nos/turboc/obj/arp.obj create mode 100644 src/nos/turboc/obj/arpcmd.obj create mode 100644 src/nos/turboc/obj/arpdump.obj create mode 100644 src/nos/turboc/obj/arphdr.obj create mode 100644 src/nos/turboc/obj/asy.obj create mode 100644 src/nos/turboc/obj/asyvec.obj create mode 100644 src/nos/turboc/obj/audit.obj create mode 100644 src/nos/turboc/obj/ax25.obj create mode 100644 src/nos/turboc/obj/ax25cmd.obj create mode 100644 src/nos/turboc/obj/ax25dump.obj create mode 100644 src/nos/turboc/obj/ax25hdr.obj create mode 100644 src/nos/turboc/obj/ax25mail.obj create mode 100644 src/nos/turboc/obj/ax25subr.obj create mode 100644 src/nos/turboc/obj/ax25user.obj create mode 100644 src/nos/turboc/obj/axheard.obj create mode 100644 src/nos/turboc/obj/axsock.obj create mode 100644 src/nos/turboc/obj/bmutil.obj create mode 100644 src/nos/turboc/obj/bootp.obj create mode 100644 src/nos/turboc/obj/bootpcmd.obj create mode 100644 src/nos/turboc/obj/bootpd.obj create mode 100644 src/nos/turboc/obj/bootpdip.obj create mode 100644 src/nos/turboc/obj/cmdparse.obj create mode 100644 src/nos/turboc/obj/config.obj create mode 100644 src/nos/turboc/obj/crc.obj create mode 100644 src/nos/turboc/obj/devparam.obj create mode 100644 src/nos/turboc/obj/dialer.obj create mode 100644 src/nos/turboc/obj/dirutil.obj create mode 100644 src/nos/turboc/obj/display.obj create mode 100644 src/nos/turboc/obj/dma.obj create mode 100644 src/nos/turboc/obj/domain.obj create mode 100644 src/nos/turboc/obj/domhdr.obj create mode 100644 src/nos/turboc/obj/dos.obj create mode 100644 src/nos/turboc/obj/drsi.obj create mode 100644 src/nos/turboc/obj/drsivec.obj create mode 100644 src/nos/turboc/obj/eagle.obj create mode 100644 src/nos/turboc/obj/eaglevec.obj create mode 100644 src/nos/turboc/obj/enet.obj create mode 100644 src/nos/turboc/obj/enetdump.obj create mode 100644 src/nos/turboc/obj/files.obj create mode 100644 src/nos/turboc/obj/finger.obj create mode 100644 src/nos/turboc/obj/fingerd.obj create mode 100644 src/nos/turboc/obj/forward.obj create mode 100644 src/nos/turboc/obj/ftpcli.obj create mode 100644 src/nos/turboc/obj/ftpserv.obj create mode 100644 src/nos/turboc/obj/ftpsubr.obj create mode 100644 src/nos/turboc/obj/getopt.obj create mode 100644 src/nos/turboc/obj/hapn.obj create mode 100644 src/nos/turboc/obj/hapnvec.obj create mode 100644 src/nos/turboc/obj/hop.obj create mode 100644 src/nos/turboc/obj/hs.obj create mode 100644 src/nos/turboc/obj/hsvec.obj create mode 100644 src/nos/turboc/obj/icmp.obj create mode 100644 src/nos/turboc/obj/icmpcmd.obj create mode 100644 src/nos/turboc/obj/icmpdump.obj create mode 100644 src/nos/turboc/obj/icmphdr.obj create mode 100644 src/nos/turboc/obj/icmpmsg.obj create mode 100644 src/nos/turboc/obj/iface.obj create mode 100644 src/nos/turboc/obj/ip.obj create mode 100644 src/nos/turboc/obj/ipcmd.obj create mode 100644 src/nos/turboc/obj/ipdump.obj create mode 100644 src/nos/turboc/obj/iphdr.obj create mode 100644 src/nos/turboc/obj/iproute.obj create mode 100644 src/nos/turboc/obj/ipsock.obj create mode 100644 src/nos/turboc/obj/kernel.obj create mode 100644 src/nos/turboc/obj/kiss.obj create mode 100644 src/nos/turboc/obj/kissdump.obj create mode 100644 src/nos/turboc/obj/ksubr.obj create mode 100644 src/nos/turboc/obj/lapb.obj create mode 100644 src/nos/turboc/obj/lapbtime.obj create mode 100644 src/nos/turboc/obj/locsock.obj create mode 100644 src/nos/turboc/obj/lterm.obj create mode 100644 src/nos/turboc/obj/mailbox.obj create mode 100644 src/nos/turboc/obj/main.obj create mode 100644 src/nos/turboc/obj/mbuf.obj create mode 100644 src/nos/turboc/obj/md5c.obj create mode 100644 src/nos/turboc/obj/misc.obj create mode 100644 src/nos/turboc/obj/n8250.obj create mode 100644 src/nos/turboc/obj/netuser.obj create mode 100644 src/nos/turboc/obj/nntpcli.obj create mode 100644 src/nos/turboc/obj/nr3.obj create mode 100644 src/nos/turboc/obj/nr4.obj create mode 100644 src/nos/turboc/obj/nr4hdr.obj create mode 100644 src/nos/turboc/obj/nr4mail.obj create mode 100644 src/nos/turboc/obj/nr4subr.obj create mode 100644 src/nos/turboc/obj/nr4timer.obj create mode 100644 src/nos/turboc/obj/nr4user.obj create mode 100644 src/nos/turboc/obj/nrcmd.obj create mode 100644 src/nos/turboc/obj/nrdump.obj create mode 100644 src/nos/turboc/obj/nrhdr.obj create mode 100644 src/nos/turboc/obj/nrs.obj create mode 100644 src/nos/turboc/obj/nrsock.obj create mode 100644 src/nos/turboc/obj/pathname.obj create mode 100644 src/nos/turboc/obj/pc.obj create mode 100644 src/nos/turboc/obj/pc100.obj create mode 100644 src/nos/turboc/obj/pc100vec.obj create mode 100644 src/nos/turboc/obj/pcgen.obj create mode 100644 src/nos/turboc/obj/pi.obj create mode 100644 src/nos/turboc/obj/ping.obj create mode 100644 src/nos/turboc/obj/pivec.obj create mode 100644 src/nos/turboc/obj/pktdrvr.obj create mode 100644 src/nos/turboc/obj/pkvec.obj create mode 100644 src/nos/turboc/obj/popcli.obj create mode 100644 src/nos/turboc/obj/popserv.obj create mode 100644 src/nos/turboc/obj/ppp.obj create mode 100644 src/nos/turboc/obj/pppcmd.obj create mode 100644 src/nos/turboc/obj/pppdump.obj create mode 100644 src/nos/turboc/obj/pppfsm.obj create mode 100644 src/nos/turboc/obj/pppipcp.obj create mode 100644 src/nos/turboc/obj/ppplcp.obj create mode 100644 src/nos/turboc/obj/ppppap.obj create mode 100644 src/nos/turboc/obj/random.obj create mode 100644 src/nos/turboc/obj/rewrite.obj create mode 100644 src/nos/turboc/obj/rip.obj create mode 100644 src/nos/turboc/obj/ripcmd.obj create mode 100644 src/nos/turboc/obj/ripdump.obj create mode 100644 src/nos/turboc/obj/sb.obj create mode 100644 src/nos/turboc/obj/sbvec.obj create mode 100644 src/nos/turboc/obj/scc.obj create mode 100644 src/nos/turboc/obj/sccvec.obj create mode 100644 src/nos/turboc/obj/session.obj create mode 100644 src/nos/turboc/obj/sim.obj create mode 100644 src/nos/turboc/obj/slhc.obj create mode 100644 src/nos/turboc/obj/slhcdump.obj create mode 100644 src/nos/turboc/obj/slip.obj create mode 100644 src/nos/turboc/obj/smisc.obj create mode 100644 src/nos/turboc/obj/smtpcli.obj create mode 100644 src/nos/turboc/obj/smtpserv.obj create mode 100644 src/nos/turboc/obj/sockcmd.obj create mode 100644 src/nos/turboc/obj/socket.obj create mode 100644 src/nos/turboc/obj/sockuser.obj create mode 100644 src/nos/turboc/obj/sockutil.obj create mode 100644 src/nos/turboc/obj/sppp.obj create mode 100644 src/nos/turboc/obj/stdio.obj create mode 100644 src/nos/turboc/obj/stktrace.obj create mode 100644 src/nos/turboc/obj/stopwatc.obj create mode 100644 src/nos/turboc/obj/sw.obj create mode 100644 src/nos/turboc/obj/tcpcmd.obj create mode 100644 src/nos/turboc/obj/tcpdump.obj create mode 100644 src/nos/turboc/obj/tcphdr.obj create mode 100644 src/nos/turboc/obj/tcpin.obj create mode 100644 src/nos/turboc/obj/tcpout.obj create mode 100644 src/nos/turboc/obj/tcpsock.obj create mode 100644 src/nos/turboc/obj/tcpsubr.obj create mode 100644 src/nos/turboc/obj/tcptimer.obj create mode 100644 src/nos/turboc/obj/tcpuser.obj create mode 100644 src/nos/turboc/obj/telnet.obj create mode 100644 src/nos/turboc/obj/timer.obj create mode 100644 src/nos/turboc/obj/tip.obj create mode 100644 src/nos/turboc/obj/tipmail.obj create mode 100644 src/nos/turboc/obj/trace.obj create mode 100644 src/nos/turboc/obj/ttydriv.obj create mode 100644 src/nos/turboc/obj/ttylink.obj create mode 100644 src/nos/turboc/obj/udp.obj create mode 100644 src/nos/turboc/obj/udpcmd.obj create mode 100644 src/nos/turboc/obj/udpdump.obj create mode 100644 src/nos/turboc/obj/udphdr.obj create mode 100644 src/nos/turboc/obj/udpsock.obj create mode 100644 src/nos/turboc/obj/version.obj create mode 100644 src/nos/turboc/obj/view.obj create mode 100644 src/nos/turboc/obj/wildmat.obj create mode 100644 src/nos/turboc/obj/z8530.obj create mode 100644 src/nos/turboc/turboc.cfg create mode 100644 src/nos/x86/arcnet.c create mode 100644 src/nos/x86/dirutil.c create mode 100644 src/nos/x86/display.c create mode 100644 src/nos/x86/dma.c create mode 100644 src/nos/x86/dos.c create mode 100644 src/nos/x86/drsi.c create mode 100644 src/nos/x86/drsivec.s create mode 100644 src/nos/x86/eagle.c create mode 100644 src/nos/x86/eaglevec.s create mode 100644 src/nos/x86/enet.c create mode 100644 src/nos/x86/escc.c create mode 100644 src/nos/x86/esccgen.S create mode 100644 src/nos/x86/esccvec.S create mode 100644 src/nos/x86/hapn.c create mode 100644 src/nos/x86/hapnvec.s create mode 100644 src/nos/x86/hs.c create mode 100644 src/nos/x86/hsvec.s create mode 100644 src/nos/x86/makefile create mode 100644 src/nos/x86/n8250.c create mode 100644 src/nos/x86/n8250vec.S create mode 100644 src/nos/x86/pc.c create mode 100644 src/nos/x86/pc.lib create mode 100644 src/nos/x86/pc.tl create mode 100644 src/nos/x86/pc100.c create mode 100644 src/nos/x86/pc100vec.s create mode 100644 src/nos/x86/pcgen.s create mode 100644 src/nos/x86/pi.c create mode 100644 src/nos/x86/pivec.s create mode 100644 src/nos/x86/pktdrvr.c create mode 100644 src/nos/x86/pktvec.S create mode 100644 src/nos/x86/random.c create mode 100644 src/nos/x86/random.i create mode 100644 src/nos/x86/sb.c create mode 100644 src/nos/x86/sbvec.s create mode 100644 src/nos/x86/stktrace.c create mode 100644 src/nos/x86/stopwatc.s create mode 100644 src/nos/x86/sw.c create mode 100644 src/nos/z80/asci.c create mode 100644 src/nos/z80/ascivec.S create mode 100644 src/nos/z80/auto.mk create mode 100644 src/nos/z80/copyr.S create mode 100644 src/nos/z80/diag.S create mode 100644 src/nos/z80/dirutil.c create mode 100644 src/nos/z80/drsivec.S create mode 100644 src/nos/z80/eaglevec.S create mode 100644 src/nos/z80/escc.c create mode 100644 src/nos/z80/esccgen.S create mode 100644 src/nos/z80/esccvec.S create mode 100644 src/nos/z80/hapnvec.S create mode 100644 src/nos/z80/hsvec.S create mode 100644 src/nos/z80/makefile create mode 100644 src/nos/z80/pc100vec.S create mode 100644 src/nos/z80/pivec.S create mode 100644 src/nos/z80/pktvec.S create mode 100644 src/nos/z80/rand.c create mode 100644 src/nos/z80/stktrace.c create mode 100644 src/nos/z80/stopwatc.S create mode 100644 src/nos/z80/sw.c create mode 100644 src/nos/z80/z80.c create mode 100644 src/nos/z80/z80gen.S diff --git a/bak.bat b/bak.bat new file mode 100644 index 00000000..8f6419e6 --- /dev/null +++ b/bak.bat @@ -0,0 +1,2 @@ +xcopy /y uzi.zip \\redhat\nick +xcopy /y uzi.zip \\bluehat\nick diff --git a/bin/banked/fsck b/bin/banked/fsck index ee200282b4d92cbdea88f557876d9df5e50b20b7..97730a20fb75a0496147f6e7b26b229c8feb5761 100644 GIT binary patch delta 5026 zcmbtY3s6+o8NO#h6v2f>9?N_0E(k0lqGWl9$P!ph5wJvw)`+pS>mvry0vn<%VvJ)F zh%SFqMl+;I6U7*fvG|-QMz+SFHP%ekH1RYwQR>;-ltl z;o>9p--u5iN^0~q++2$<4u|8y)A3V8%a*QeK|CcbspdD}^OH~EwrXc1K3-eT9*KaD zPeZS7kYR5fQ_WWFKZ2@Tezxk22{HeVSF40h_G=azJf~s1z~^^Jv+hX=xjt z!w6Bz2(lh#D3|&2Q#%~E+y{G=v17L{$K%=8!{3!N)$2>B;dlTwoDgWyacVjtP83>u zazA|*68uDu^OuU@kSdZahfAtp*yQIG_2`{GQgVgM-J$%0Am$Yn^LnwfimM*G-Tk+H+c(w ztx68S!0>=zV3*8Cx!v%FYEJf#1t3Wjgf3ayUzUD-8CtzDDl6N;=$}HGVR1lCyvvXq z$`FoH+iD{%HeQe8mV-SYCXfpci)uXV&$itQh#}+_XaYaYytRsX!ylC=tK!bz;47`_ zrIij6C7dnHQ?=M|`S=f=$-xEDd}`1nKNl9cGhkKFvVeCNik`fr4%5;jsBMJn zK{M357gEDrtd}3KUhY!U4|2UMh2&tZV*X>WDl)?qv zx=~$B%lc{Qfa?UTp5@F-NrI`tf#4CMCfgw*B$1@SoRDNK0^&drEzi>v(&77QhRDQ z3`$OD4#|W1(BQy+rh7xo5i(3V^GYcU>F{=F{)7=pfq~G(aTTmZZrIadYS_%5+CC5# zmuQlB(czG}lD&x~LI!Imq7>L;sm{C_`Qziaz!{c5663t^6fJkg1XFbyl4>8bnB;9^ zFjWd6^cy_10p18VjDpb}t|t|siU=eIm=rO3cU1)2{e49K{OaE^JZOw41na+s z%V+HAEOq4(2Xrjt1EjtY=fA(g0D@ucPe?Ds7s2IgXCvpa+e#)VE+y#YoqUz`IR=ywdP_L*sV=f zAn|>sO%Li?&A?Ul(aL+ZZ)Rz{u-)t*K)fzz7H<@MSI->5sds7R4_IHwsf^nt!f}O* zHNPud(5f@I${)|CTnAt2rY6eWCoQ03-uQz~FArMAn*L&Rz5bL<>Vr~|_vbO%nBAP?SfsGIeN@w4K$~)WhVIJP*vV+2Bv$wH#COI{neRGEKQ#@E zTrqhkC^_m832tTp#h2b(#Cy7}NT_jKt6>@ZJ5Iza~MllDRn)HxTUX#hBDK5N@ zcd%kpm$my(@=>x|BlC;tTBFZjkQno`Qom{h^WS7n%BaR3D(w z6dy_&V1IlV34?R-v2~+D&JgI|vq@Gj4OGHXn8+14`eI0tf=i4mTv4Gd<;$Yf=-`+-BqYB#y)A$hXsvWeg>`a z+nigm3#;L;`WTV|4t)ga1!bZdHR2L8CTQ2t@;lW0y~*>u-x_!-(aL(WCoyt{`AP1L z(~AAhYSHOr0B6=;5&!9i-{BT*SApeEzC%(WD{1;<>GK4W8|5a2uYRgELmw~Ld|u4< z26!bYJX2PXm)45GIH0l1&6{1xv`RrMJ=EtJzin76`nvY4-J8x|hTf!TatZvWOe0o! zc*<3B6T*_0ih_8Z#TEx?hYTNMc8#UsvP4nUuq!zU(SDdbh0KNTlQn7llWG_swGPsw z&iJe$CXoch@#uY!nw;MJ&h3DrscES(?DEDF`HD|8Snm*v&U#0%CrESTva*P9-0t?+-&kW;)~HE;8M^{pSol?5j+oz<{>~S5jq@TJgI36zdq2}?OcYC zi=Dk9`n$Q{S$wU&&xzkU_o$_xn}K(yzey5dLF!IY54TdI#!5M|FNVN}^0gVy&~i^| z9%CJh?YLQ!t)TA=(4&JIrR)zsqG7{B|5^BDO|RvyWkbyc%NfgT%j1?3{7tVpX6d$M zS=y^Rt7-Ms>ad#5>UXNSxkOs!Nh`}4Mcy)6kD_TXbHd&E=hp_W#Z%1@i?xBVF@HMHsotvqV~BfOTjp8yo5hmsIjk-kBc zZWdZ}gqn_u;qG(ckcLObF>)B*%SggFe3ha1lj1;AJ=xqc#%=~}W&(K<=4Ngox8ZW; zLQ>VHpYaC4myfdIJ*8^w%X&&N-U_Q`J|D88mX`NX^F20w^I~To)gOX)_9-$5=dv@& z>!6r5S+SxPR7n$6m_}b}nn26O(^4NyZYs>5Wtbt=AkQTywk}L*$cU7(RI{=c$GR`$ zFn`h*p6nd@LGGdDzSKMcM>ochU01{~R3PG9)>u-9Z{FOLlTf$MNXr$}?2*t@u(iRP zp|^i-l!s(NxcKk-bPxMJqvX*kQJH*0bFRZnTH4-(faI?pdA{TSP@z?9dcw&`GWGF3 zBj&K5S_b%c6S8I~k~I5zXf?9&fflhb#M?SJzGE$%$(fk;rHQqY#A+y|S%P*lx`;+l zU3(eNVrFM4%)7BpS5fn>#(!u~>;NBQ9O;1R#=@+>5OusEfZ!Ek&-q zjNcAJ1-@09K*Vb=+o!=*V-!}ve~n_qty~@^oerl4{wRO=e0l|@V!Z delta 4927 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 diff --git a/bin/banked/mkfs b/bin/banked/mkfs index 2deb3d6aa3aa24ae2e9c626a9ea3ab71cff933b8..7647d9583080e979659fce541c961ffbd461f041 100644 GIT binary patch delta 6025 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 aEwH}-!YA}`^y~auSclC^glqb|`2Pf9)}j~y delta 5969 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 diff --git a/bin/boot.bin b/bin/boot.bin index a38760367638bf02983db0866f709c20b9c01571..59816ad43c93eab59f60dc43ea86f5686a435895 100644 GIT binary patch delta 1389 zcmY*ZZ%A8L6o2m}@7-#=>RV(>l<9jfR>GULG5$-!7S!5}(m$43CX#I>YP7+afLdrt zT*BBs%@u7*85D+;t}9`MY?S$-FzTFcp}U0)1N~q>WFx{Vx2zP$HfG(qN!@5ZyqtUP z`TfqhzjNM{!f#u2K5T&YdF$qa79TsPu}Ide^R%L3nuD4>KRGs;-xTzC`?VVT_X&O{>0^x4SN4D$|pKcsHY>EHA#SkBx4{vRQ1*gvWS z&P@8pgCib=vmDSr#j=5WVRI}pHR+#WyH(Etd*N2{jmUIePcHDUya95}B7T?eOwqK= zaguR0$Ar9N%r2X&pL$c&ZStC_yWH}O+!x20_Q1JvUz7!o2+0D!-}sPGRSFIKFUc06 zG5#5rYdDLnUx%YEV#_}LCK%VT8LB(pm(d&u1m~-vTNu=QV52?}|W3JT^qXwjYUZB4tQV;c45H4fdsm)m$l{wiIBGZ)I63 zrDM6eP~1`0GWk4HJbW$`Qkd)@>&gNTp0g3?K`{KHll8ZtSb;$Sfz*Nv33co z9H(8z`W&9Ut<;vX_G@#vlsFBlX%{hx!xfx^6VGFEOaKdNff#+hXv|~%GPVNA(O&Ai zg!PMWmjzHhqrQ%a-^h{zz7J_mq`!%@cBGz0S|?ItCd~z3ta(sI zcOvR*M?5Di#cA)B#KFg90t6j^cupt=9CAWnCz8)2pm&(Se9!i_4X84@3&}APcwOfI zy=trs60jEqnCNqitAud@#siq*eK!NV$i&Jq#i1Ss@|1i~TmgC}8SZ)R)m8tkH=`~{ zQ>*L9x&?}D7a%sD<-55d`i?bA)2vbKb_c_e(E!}EH3wM~;pR0f+}6s+e1ZI6EbQb5 z^Yw<6hay|;4i7S56LLFwnX8x>0cQ>dhsxcxW?4XKcvK3W#^fiW`qHB4Ew?<1kvrn-b`|`{ z_sP3r&1;LI<&P)7W}?rGKl`K$n+>b|5=Rb571%CQm*eqC>UQjuZ463f8$-!mu|X_Z jHtA&jN7AzC{8!4;<+mS+3@L;5dxL8AWxpKk0F literal 1920 zcmcIleM}Q)7=Q2D-Yb?9E*R6Y5AUuH%0ch|#a<&fM4WL>*>uj3ZZiccHq_QY-2~Ls zZ2!y{G{(%BEM{?=G5E)DF(D?)GGrxQ@LdLu#BKhu&Xi>0yNnp-N37lRwxVVQH*pm~Oe;%W3c!eYtZG>+}$SIq0LgW@BqS}1@q>&@b$L?TfxZN)!SEcr`DA~|6!kw}1-N86WAFIzRyU9fdtNJ9@5o5&+ z%I%R*FeT0X3N4-N==#T|z{@|Xmv`<87F>*=T87S##(X~K33&a_*1mv5V zEwvg$U%6t)NQACk_s~E!78ZF*zmabZdmSakbEU&H&?j2ZK=qtRzOa$+YzHoSO>*1T z|CM(`|1_3cwR2*Rr`rQ^VQF$IuTYv-@XkyyPx8u<;&e_Rk6Eb{Yix9HBqFo!LMo$2 zIpFMyL94^jXPK<^!AQ6>8e+`{#dMOc9T3%HqJofmT+|MW2QJE`d8aMvVKMJ_2)dyj z5!pUJ4EYX-LVG*F8<#1GS^83Dn|=L7?~71R-* zldsi5Zv~d#!+@?kfqd8VmIsh5tsYB#PT=}Vo^qAG0>Ee4fKBgXoBF&>J=plbCU>Yx zz&wY-y$iq@qOt^&Re!RRJ3qtL_&2WGvU%NW)iCa${bo(= zU4aJ5SOH{@TU~~sOLoPBS172_t(IX$1u};sUk7?647?2V4Ca<(D`cY!PE~Gj!OWV< zq$E_>)egKV7+MPY);+=G`N37l`&GPpy^=_nU%&4evll-Yy^ZFm&oRw=@6S>LTc!x* zFc-RR?I)KU2j+@kk;{(R>7ub?<=;1!yC!eW9rVB%0xj2Hvp22&NA}59p?7*|vPD3o zQYaL?67}hSyiN^0Q*dLOP;g_rFk(8!edF#1`M#?($;pTol>Jx7x$lDfo5e(2xyxa4 z)F?}5(zL=um1WfZQi@i{R8gp;rc9n1HP&M5c`NxPXi=lwv_Hn*cfl(r;oy@Ggb@aK zXJmcvbdgtXp?cZXI^jt~YZh_y5rD_ydzKle2BHRMs?-2@+evEJso|jd0;(5)2Wl** zMg=uAYE)9A%Hq+r?49gS*;`qJ{(UE*ZkUV>yE=4q7o=M^H|T63HZRfBn+tLIU68-^ M3gNnIEd8I>-}ZEz?EnA( diff --git a/bin/checksum b/bin/checksum index a95292bb6156451c2aeb841c2422436e4ff19f20..81b33e2729fcee2881b78454b3319bd552a7d666 100644 GIT binary patch literal 128 zcmXpqwQw;oHn1=(IsN}WRoy*3A?*4dzt4XlJze)x zPd#^4_Z)d8l&xDjAvU%ri(xTsi~o@Ghy2P#Or_8N^m`HO`mg;+O|n0_rnuZUX=1!T z`qb&OO?U22ku1IIk5px`lNI&I?>v>t?ubs_(9bt& zl24v|IjXoHTRwj4O}>fIzKMN1YkU(YHp%%7wujMCrHh?zs=od4gjKgao3ISu_^Rw= zN~?0}WW{NH@FS<2yqO6Z3F~$x_3e#HQqygZOZ5o}36YVNy)EOyY7<7qtxQ;2d$RuY zk;usMguLPk+%@gkT5Mx~%(tZ*h{XHi}rq6SXWq<8yZ5VYd=2-MKQp=H3-fE>rkr`7aoec~B zw02Zsyr?V(Vo+e7dQsECd)XPuTY^>o(3kWy|r>bHmUsQ4YOP+neN(C zcl^8|-#6`))T=h7JjIz``>JnI#kvZb%#kK<&AMsV=dbb2^A-ATTz}8+mYu4oH!le& zAfa|rYwg*KLIXgI@u@awsunO+_KUDs*zNwXFFp%he`c6>K?G~8dN#CA-=rAd#Bo0_ z^i3Mq8TtLEp^@Jo4Xv<+ADehA?i#7p8t=78tlbwmqR}^Q#AnZjURbyHx?R$@?MG0> zXBlY?w^@9XM$~`-MkV;<;l8-UQ@&A>PnLZ#@uzGdzDeVc3^+3Qh<8ULs`)03w1sIS zf$XEamS|Sh5?ax_5q&mP%vyh@Uy`(d27V>f04_bsq62|3qg&d6<%=xL4zVt$D)xOg zy2nRY7kyPOQXi;0Re>ec>NVAPv9x#eXsW6Tudm%F_1N*)DjR!xS;eXPBi@=OTE=x) z)cRMkm=#BwYEZ2fMOecfdaHd&q5Z89x2LYUEtRiiQ~A5ZNAD0H?IJ$fsqqnSt<|fC zD5$=Kk-*@xBAEC0eR?eESlqF}$A(-ZHR(d*cHb^31fl|xq6w^P0r#f0$kvd!tCV9M zmng?N@#n{%dWmvnOVU{4^|fW`C|n7(**ic1p1R2=nxXel8;>$-6llN6;}jA8Wm0EMc!(I7Pnd| zt0MrUE#_GNW3ktK$^n@+t|8L;3*;?{z|L}pyCeAX?bPnMGy{X6m#Tk+xKi9lYD-dX zO`#i8*KuL!8stzTM}XnBm660cnNaS20pPlxpH+YI)Ws#YklEg9dGca{Vg1gdCCnD; zThDy!_DNw03D&d71_e{bs$t)juwiFxKZk&gM@=2~8R60+aA z(*WmPfb$LqXBUC9lY?W-f+qHEIL+tSZAsQ?b0HZOrzTGpE>}D~l+p;B1uIzoX_Jzn zDw%#IuTyb$XcDJHRc`ewo=&B-qyA^hk)}ISi|A0wsbJ}emRu-{i>yjdOJi;}M&2sFvPn$GWps{F?uZ`}|6iT6eb_7=_#Me5N8f(9R z=FozngZrX8iH*g&y$M9U!4dU3A?h`bDBt4nEZbDyq$_O9H>-VU)+H>tBf7je zdlWu#H#)}l=#=m3u!OU!8KEbAi`y1g_@;L(J{9j@EVDY>Jy?lac~7V9naV7dHGLsl zGGif|GkrcT3t48d)4>+c!`;&B_}9XP3)z~2!a|3O<>wURJIBL31w}|Y9iFmc*BZ9Q zu|B)l?#g8@yEC`IS>R!IcTNEt&&H>*l9CdhLgMm?Y*N~|aj5QcItnLCC3cs+$l-Cg z+>@E)q+#&P&R)BEGAptdIGNiyi9W2%!(1MgQ|xpX7dn{3nPV@JJnNW?G3NFZ zV}KN9pIkC|4Vp7|an2ftN6NDo6gqO5+u_Xh6zi$A1&%VtvK)ngoMmJ!Wa&3tekIE& zaOPt+3-QG=XJ(}?S}>nYFD@#=WZ3*-mxIkNF3DN#$XUa(3Q8EzAuUW_$YvDS3)%Ih z4%d1%-Hu|G<+A5E*dj-X!|q`OG9h6+E6&R!_&A&{R$5Y6Y|mx03p|p;iK$Bf4)gL9 zI7=Oj<|Mh+v0jPeCajxG7pcfzSXi8sG;STGMoH`%AgYAEM2-|x7qI5w&s>|(5L7A8 zND03U2j;MQd?V`Jz-v|7N%h_BU-b!-e>h<1sC7)Lj#n3E@1 zdKD4HWT~hCGj!%l*`;}T;2=GjK5w36&&_o?+-@Up$sFUhw4?-tj~+b5kS9|1dXK{> zD=aR%pv+n9k&1y-DX-Wi%~>b`33+)1IV>n23|m42I&vjQv{X~I3rnb>!)ebZ0dZkz ziJc1&hs#wA5oaEIi8JS-qjXnh9;dtV3r2D|?78dtG}B8xt3m4pId)G$v6F)lD4er! zdH@TFZiz(F66YFcahVfBl|!#%ce0eYZVF4hB9}>$#MTh$oA{mh8O&w(ICL(Tdyy3K zFew{!o_KjK+Pm4}92eyNt}Oq}do=aDkTkDHuRlq;k( zgP3&ZKs88<9j>(?k(oKGi}m|Oj-q0WT*%p*1aSJ|#mg2fnjvMR&zT1)?JCl1x>A@c zC7VHB7Lk0Mws=vXl?09e&7l1f2;~LKGFh&xxCFfK0@db1NKck>?9P!MiSWnen4aw^ zD3L%>R0lL?FBAy2b0(IGoxCo{gY&Ua07NXz8QmB{9O_u;b z^9q~}X$Ej5#4A>3brH>M;cC0v!Gh^h%ghvZfV5C&X;GI}u)xU)SgRN$&`EHN86y!% z(k(H!OHjn>V$2x`w+n&EnV&88*j>CL)MZ{leyK}z>{yqx+7A5x3%ZwI7&QN zh~iS}^wv@!aY}b1X=QAgLo(WEKwP9*N#S||&D1d?fltaqo32A2k!vfeY?>C?L()%B6LKRNY4wSP>mu1gdx=O*K!QxNNVeSJmT(I;)@t=)rA|^?y;$UY zNIrW$RQbq6_sCul7ciz0OULT}LA8?;OL66*0vw$MTQ3!40L5BVGB$A> z^USb&?D;Uw+?32LURdmcYT+f&H^tC6xQA8>RDR|>c5oG>bNBhBL|Tm_xQW-iEpLIWea3t@I~Q{PaPHOVlGJtH#cWE_gEErC9Z6GJi+T7IKVzOb!k~B@_z+lplQvBWy zS%b=yz1mS&BJNy{GFTcIn6jOYGOa>Mu|5gPcNgS?rAoDaz%*r$u4A*agXXvzBDEL` zk?JWbVOVGvOJ-#t2*$=`vvHswHtq(to~?JldT?Q?&@khn=sghHq!k${9F}J<1jCaF zFplLEI_xf%Tj1u!WIF3&iWTG(foA5rVXcT;jYvd-#McrhW}CBGFDI!qb6rlZo?d8o z6+v=f2BOJgSI+gNuAp6CiCs?HF_gG zZBzkq8}q@vX+lKyU1x;6;3**^cuvUZGAZN)&k7lVX=w>FJY6P+8b*$}nm!dVHPq5G zc%{Mu=NgGP5n4gB)mXtQGOe^PDG5uwW|ZNfIo1_;a*A^ySA>tmF6aaMxaX}SbJg)$r zE);t%jYhWF>Vj;D1~`tS8ck^`&RVcoaOAkwmvF>uImu&_;Tn_aRkQ}H ztlhhc=>A4Xr5mY2;+XMQxLLq@kyv73E=wFg4$6+~PnapN+Ahycr5k<$X`woU(gb#( zXF%&EIVGz|RV0mKeOcdLY%D8*u!W*9xtaDNcqzJ<$vx>Da@#d`Rbr`y1=;k+?S3w` z^-1#_iD57g*;3H-TF8W=2htoKM3CU$EV7ruJ)sZ+A_!M#-)tVd=f&_u@iikKeCBfG zF;8(ZXwSKxU?tXZ@t}dEg)T6!+*LW``?74%DHLaRuFwpqC&4+CK>H#FqscmaIddrh zGiD5%EK#f`AI4^}SPj@%$kY;K)j*iKVKqy3SAHos?Wo4svG|_~%;CaeB7=?)dTj)|6V5Kq8RC?Ly56C7H~R1syF#fylascaD#r-*n88F~^;NwJBt1#^vC z;q+s6kPsr9?##K)dy2paya0Th|IFB&InR_(^o@5VlQ#I$)wBlH>wWB4C_^`s=EV)J= zFnGKAu%7iLoPwrEjRY74SqLsIEBhq5t|3%OxM8qGjq94$AX5-To4;X-k|e5 zHz#sUjELz4yBfl^HqA~DK4>Zj%H(1sz0lz>d=Lsw1e~IP$6#_Ea-kp`>q=nmKpqEJ zXF8ySLc0a|QxK-hrNDs04U-w}+%*L=sr&oHY z5+#TbuYuOiaf~H#0{K3+$X>!+x$gBv6y*dklBC-$y1HCgnq63s<3bv z$W{Zo2^u~%q6%6lj=-SY5@X5Gg|y63h{y@z-E*{fGc}^crErX1l@%5<6LV9f`U2kW z5)1D-yDqcQS&tm_plNdZ0ZP$9v*C#%J2ok}n&aCc+@A)0YcYqi;?lxgDI3ye4X1pF z38Gj?Tup-$v+!kg!v_W(p~SA4oO$-50$63leSt!7V4#n{IKh?dg>aOZJ)7u~hv!|T zC5H1%_AV?7ATpQfMCmTL&0&mN;H0G?=0flU;^0>Omgri`CGs{Zkf_ll6t6C@CyDBY zFft5aO~M4*@g^5Q)1uTBH}MTL3&X^%v#m}FsX84%+F?_J{6C@&LP;K&O#~)6qdSWw ztPJN!AOThj4{}gA$1PY{m-!ylLhMpsV;D_5poBC>G~8bfl&HdEtPoEoK@!Lk@outO z@?r1j(gnPMxGZmz3nkuNKHpyHvabP*kn!Xp2_r4aS<6L@$XO7GEb$t7?h>+B*GcYG zMI>>cPqbvNV=W9RLzZz!7CSsVV1`fv31N)_Idf`^&8s2A$>TIcLRwUO3YIBnt>lK) z;ih0FEVR5rdp_N+nK2vqgMuz;Ait{7{wGdVebQW9+{o`<%N>Lj@LEexS-&7*j zoJ3{-+RP=`BGE}bNa~T;L_J-U!a^o(L?leI+J)&M7_Lt}z&m{UE^Z&_7+5s(x~{~_ zvo3-GUKTt@69&2|HDQ34c8dXCA}~O6(AO?VIe<3ZA}C-c(XLf;p=|VMvMx+Xnc!n6 zAM`{ad5q#FYNj~p1Vjw+;f_g{VnM_N41a$^K|AmEDIy&BJ#i}4;BYT zw!jO42UeAcP3LDV;Svm#l#e}F-QXoTM$R4WM#IG`SOwaH8;Kwt4?b&f8(e}tZq9-l zQRsS_lk%dO*H7mAxZN-TFT2Pxq7~2zYZK%+TK6V3*NucA;M1hl9L<#DPzjEt83!|@ zk#iw68b#d^<3$PuEgFSg=U@~Fj3biCW3v>X$LRo;>vXRIk`OS}@=HswVh%n5gQutu zPR&8f&vUw;124MR9J(nC%z+nnHwRu2pc;ej=Pz2qDTGML$V{I;eg0(51K3eu!9{S} zC@{n~U_~8`PmI>{?fKY5$}BBHK;$C5=pC4OuFE(udQzu*3WI8-Ghrx`M0Bq%_0ZlI zWET0tj@&5{4}9q65LwM6H=M<*XkV_FDr#vCDTzbuTrl!X%g8JRPhjhVCaVe2iwl=P zg?}Sj0+s$(g2e<-snhV*puV}K2;R9pG51bJ(fTq>h^x!UUcLMD#a_?&%dePlW!hB} zC#6rDK4WHvMwB{F3##mvrH!KQDd|@*^eVE+3mD`LS>FL9uY%=kF9hys3B~3X68uz* zuKUFt#Il$sZzfa?wHK19UT{$&)hb+^M70VRB~X2Y?#R;wZTCyX(plzWHh%`2pTVYQ zrq7?r7B5I=^QW=-v)KGaj8r>YHg_>w2qS3roXm^`Y`(bOz_M=0!tx5NlnE3Ggc+ip zVwdodMHO+Sop17s1C|ua5n;g`Ei4Fm&kM5)*Jv>soCqL)mXR~7-Sd55?q$JmzDPc8 zZU+_d-EKB(eilwz;o#J7f&fD#lC8Z3+jC?k7L_6}o$Y|NE(|AWJnej5e&v;dBf}X2 zs6BChg#8%GSf_gb%=7p1J{fCQU#zZsSW7gi_uSp`j+S^^eWtnX9>zl0-~BHwZGHKV zMw^N1)wl{mU>Ueus-P+!wchI2zsjBUMt(vRz>E$%j5cYiAn=YWU?m0@#QMZ58 z`0}eXpAdFPz3=(fZT;JMVqeSlR`u?Z#ur&g2>Z^zyG7l+q3&_5w>I_OrFHsDkE?H2 zcIptkuWn^^NQAO{^?_#f56`K0Q(|k&OK+;1KIy!hg@v+u|Hhu`yYVf0n}4ahHVW9P z{aYKOPqFQ~VKz)wYy{7ec zzq(Pbdy>{PN8P?#-NcX(pKsMoE1Nf=XZp0MTUgy2qJZ6mb+5ZmOPp7q*AV|Z^~pZ! zOK;IQ{L`+!5+DjK4`1(g?*3BU^ydb2(3AD*eB~$g$rI?09lUc*rJtyEN|<4T1&L5+kV@mSF2ZF`CHSoS_#(l z<%UPGiWht^Xr=n7mW@IE7*u>P=nAwE9}N1Ye~XsDpldpx(GnQ6u0yYeL6^7c6puk~ z0XW@!Fsr)F$nRIT`RlsP7FN@+`B>xTJ?A#ZG;JQ$w0UdO=I{OY$4*_-y7^D7n;X+Z z*j;T8KG60cT1f4qQUvtQaZrkUS?o7ElnKi+x& z2CWMF$bY|H9c>!Zd$N04HuBbVv9P$-jrO*UQ#&c|VCTjGexvX)|Hj*AM6wg6>Wr#C z+P<-}<092n)#&=y+-y`e$RF@;9LNT-Wvpb7C1esF3fj~{(~Y<;hSj}wy!D-!%$VqN zPq4b(mPIi$&;OCtJ->2U%rf=GSK9v&rr#I?M(l3n#Qd9>x7CO8z~9E_8I@$fCv6(L zu8R4r-k2`06sS=5*x<&;a$|ZobXQ?{^V5u1SQAs#wzIFgTZ|BcuWMQ#z_q1)lgJ9b zc7vW(F^54O8$IX(`|%hS`e^%8TAP0~JbYZex5>X{dBY3HDr|Xx)opwH{1feM&+Kk{GrE<~ z5(l=^K6y&V%`oJ$LSaylSYvG(&u7cig_jG^_aI}-o?LtF)yv#EZ_a! zUpM(f3Zmx!dG?Ayul4pe3|Zap(!2Zje`3P3AvH^~_ghFkXlO5Ztv zo|e0hUmxW;FYxOwey!lw&-qp1*MIVB1HX#?ECcDgH@})!_>zIqESe2Qel$xMXn|lz z#yuV&pqkNF4@7qKtbs6nq`8zMEgXo#(4}-AdecDYkx)C&$wQ7#tSuX)7({I9J4+92xw-&KYwTSsOOH)?Nd*|)j%F)})CYkT_d>ZW;ZJki$l z@>l9B*SGV;5Op(Xy-p;u+F!CazFOMBOSY<{>9o%Qb<-CA(^Cx7?WGmAY3;sQ$;k@o!5%hmsJM-Lkz!eK@H} z?|OLWj@QrglE3-41@-oe`q;}Y?`c_W>elrt2}=6>wR7*YM&*XiXI`z>4M_kx+OH=> zW$ilo+{>SL=q2s`=i-gTqyBB>oq9=7o9p9p3nouXpmR=;Wcx{&d-kmud;O_^Y8GLSV$dLX+Mhxl2Qie#8pvLJ#ENmwJ=HM?Af7j!0 zG5(g}Z{-liZpL2@{tEC{gui0^mEuo)?&o(8@atB7eUV@H@T-?!tNHZ|zc%x0$WUq> z!>{rDn#Qjg{JNZ99sKI%*ZcVONq&8uUk~u>XZ-pNznM*YkD`fRqU!nE7z zf0pv_0om;|ycDeFqeh7+*RB?}jkkY$*#2Rk^1GA#`d`C-8s;C?Q?g2fRH7XZ&69_ryOK z|A+Wz;)X6Pvg7@r%330VmCrrive&}y^1r>q@GaoS{jL5r;<$U&?cb>T zM>Qb9Kk${7Q?(G5(y{aDy6q)YEtCya4+8nW7uCK}-~Od@kHcv5gSvl;(KVL_dT%?_ zy|avJ+6dx{v=pdU-BxHgFG1zguuUR1Guc-ORPuEKDS(;;71suyqw;It;Z!=9Uq|z+ zjbG>T>ka&x$FClK{oQb)vq$*-v;6uxzwYJN!~FUgzcTjia0~lkcnJIF@KE;4@G#ag zJe;Y+BUq2b9xOVsCmWO)$u3Lm#fByJW{HV?*x1CrY(iobo0Qm(U6UBiW+dLl<|O`( zWhVZfU7x73Wr-xqu~>uDgRSa;i01uQ)ou5wd#>u->rfAU*nU85+TWn=3vI2aSKmwQ z*!gYedk?nkYgP9>)x6JE2N!woJax~jorgL)4^M3;`|^vh5rShxI&PK~7@WT6H@wZ&BY12@7LkAXusw*3@wzJUpC*{nEkPg`HDBKrsvZ zT-_f+`Tx}ND>^DrorV2`a&#QFro95iEWDq3FpTQS{zJUoOmz?ZcNTU<=N>*@le&Ya zLHQx!p)Bm~mVLY*Tl*n`FZ^s%1+@?F>F4l-c4_L| zJpv`-)6uwph*1L0*=i($M%y>?z{o=*D@T4Z^4Q1|Bj2{Xt$wfyCx$$Zb)KZeacPBk zFfR|$>rxk{iWs5Cmjb;TMv@J7}#>)4s~B!$6-pew!aVB{zecECNo+6=#Bac z3h(?@J#w<6;-rdd{Bys$Z=s5D`3E@ok$~WzjLt&?&mYnfL0|s#)1x2`ek*LR|70Qs zHHBKdrc1`ZNy54s-(K+-_2b=Yg-!kB7qw#7x&0&5107((^9LUHA6VXTG{S$VUiCJs zM?Pyi8rE_k-G3lg{kTs3Xk>fEx9TV7)%~A#RGe2o-Q)i-L;d8Bs&}n=WM0Sqht&@o zI}e>wKm1xfc<9{GTK}Oh)DN%oA9&7xV0P!xos9?jv>Zt83fbS(KQnfJOl-n4mk-Z) zYgwA(kZ1OT6@U88jxYaQc(mrb^0Vh#?uzbddF+Zy<6mAnde**DTkerRPJQURLyO+_ zeVcnsZC(3gh`ecBbjVZvN96BVJ7LDbCD*-G`N0jFPd?|Y{b$=9pEiB-`|-V`M`Ep^ zua=F?+mm(m%wq?qZU5%kg5mo;+&mEP$b>ZOjZC54_-*w5v9w*d{ zpOx>ks%qcQey#QCl1)ADzH95HuRgYS^oK8hX*;#AZfegXaf?#Eo1B~JTeY@Gz2p8r zuzQ}_7yHUvUktB2RG;>@3hV61FQ@z_xn^bIg7bHl7xsGj_q(n4KJvua)2}vMeR$8w zX`_x!T-fWI%kqkUDfi6lylK;(ke8l%Jo>&JjU)bk@bd{3m6NVZI(g|0z5n@Jr?ctC zJLdQK_@1wZ);w`8X~PSTOy2hHJ2S4UTCud?hjlmiIXlFa+HQO3uVJ4&*L2B0UVm7+ z>%hC0zv%tVyt!YkU%C3!;MIK_uf1(-)IaZQ9{kbP>f{%;?VR|#U5{m~IdNOoY-M@& znA)pLqFRS-IUjN6Pk$NUeREg*^Y1@8?)RVEo_S044L8m?ea$VS>xZuE=T5#q`HAFR z$;XqwOKwbVO;(d5QwFDuN?~kb%Jh`Xl;tV;cntr}l>1YjN_iz^7xFh;PpWnUj17rR z{XH?~;hSJ$vFFoCv;S=@WAW^B3E~g|9L5sZY6!h>M$A8)P3Vb04*MQLGm%{i5!r+N z42d~{^~E)cm4OFGvL3khV;_K4$Ff^-#ra))Ht_5J{IW@{L{Mw=N28C8{>x}(^qJAV z(NBz#5BvKuO)@>K9=N~d;D?=uZt)-9q#l~lT9Ms((A#$8{`SMHu9DS#{F&eT-I#>K zQOuGnrW4k7aEJPl`Tv%NL&w#RjQ_g(O9CZG@;~2E@uB)5P3HUX3#3i2h`U;Qe;KJ|END+eECe{Mh8><2I*>;tvp zJ+<JT+UNgF8>d};KT*|TzM-v( z)g7T~H?75vi&Hw2bTGHHEa*u(0nxZ9Itjttt7L@=neMJ zU5z@_Fcto*9phjtrt>&r_}e;p0x|r5sUOd8ry{Q9)tS3ms0=wNWiiHB8v zbu{3`*Us}*|JH&p_kXI@haF?@)Dd)6{m^}02M^}_V44#DT-;9ADu}Ps>L*XCALgsa zWwk2l9C`|&e4F~&-73c5i6*t;`c^&hPW#beL|?olrt|27t)L>FXj6}RRKBF>z*&D{ zScjfyR;%`@9Mvc(R6lmp!tpjVR^SsB5f&B^5fU=J^+bIKkh#15^M&>LOhF0{pF6HK zOHxn7At6499aOaHR37LJcXz2(52)U=?I-@Oo`_+2>Iv0<;tv03AGhnB2G#EHA8%>; z{1vrow54~;iD7Io8wNv4`~~jD`9G&td7YnMT93OBc6-_#Y2|5mrQMx&U)n=ykEHz} z?TNIf)1FJ)miB7eTWRm6?M+(^x-&jm>gU{V9)KLgHnumM)QXO)pD#J5C%|}xDj&#b zXxtQCb?a3Y7PHSc?dwR3rOr3)+OH$y!?RNEXzurM2ws3Ox(qL*I#OHJr+p&5Ql;{* zOzs2enkC~kS$}28;aRnD6Ma;_Rj5^{(;GofhMtZ2Obk*@QP` z)Yo57=$;Z>*cQ^DBC2e=A8*${3#GJ8@w5kJbl_zqwuj|4=Xr61;%QWFJ*Sj3?NG}6 zN||c;@%M@ouP{+<8@A(RNaGS@7FMHVb|@L0%E~rnX}j%JIlZ2MQ6~7MP-TK@{VdR3 zv*J0g+}fg)v@T!xs*>5DWHkDw)he0il#C|dw3_OuSH1EvwZ^tpKI`Wbs;}23-WJlK z`c}wUwwL8ORD}1X&|6c=JCs*Cua<_zfFHKV`_7@{!dlj^eRJQjMKHW|1@B(LTYsd~ z$?w?qC5=iRljWP6nuVOCA<3y(@#C|Q6Q7!8v7nbBS?F;E^=Q4<7OlM9q3rFHE&(_- z7Q{6$-b3oO&!Y04rOVl?QVHWCvuR1g~E%pl)Ug1r8G?OgeTm&JLxjT8KUHc zCMcyLiYGK>jrJ;Hzz22t0;AV_)=WZ#) zx=hIo@vTVBvTc{uHe@QLc#({XfoyV|=moEDsTQkMgDJ`VF{{)pdKsDR4S6y(0eS;f zf!a;Y1U`qQMGXxtxS3v8mWfy8G)|2yKhra5ikMVF0`>8*4BbJ)wkV!f<<>T(q+QGq zbEX+8h731>ig0izD3eHw5f@D-7B}4$Ew$uOUxC-9in7}#{BuJ04E9JqX7jpgbfXOM3JDA zI3=@9$!J$rwkS(mLC$-Kj_!QvYAjo5<)ePA22s#`@}tBm0&Jk+&32>=PPc`=`A$+e zW@nulwb?5-s5KaoQwOc9ZHN3)3t_Fk-m-?tJpya1QLRojJIWI9&*)VSW0Amwc_E*c zuO_l3@J8wRsN#)!rOPVR$MlS~?Ub8{0RtU!$rR2XWFsPO_Cr*3C~2M1LSn>x5Ci1= z(1XHG$HSns)xeHjT6J}-_f#|?L9$G+9z@nRRNJ;q&Lkp@NzAf6A`hqA_{1#V^pROqxyJI> z7_aC@aGLEkxw->&>gUfmb!$S&`sc4cnp;mbF-q0nVBqGmJhqw@;ZeS|%wE5|escYQ z`nI}J^>gceE0$*mSb_^Dyx6Hkwazz}#P7b!H+}C_)`>jxA^Be%qW7+{jtt6p=PK(Z zJmV=Lr>#9f2Jxe^tgP~lI!)MUBD@x|Je*JUAyF3scoX#sU?PbHKxJ>xg2kMQfk5M8 zKmM{T>aQg|=1h$3X*rvk$H#G$5VcssHqe|2`I?j;CilqV?|1@PoQf>>OGzQt-T`zU z4=SEN!?z+XtABsnMmd`Rk*9)chb)b(vHXnPAcm!hq5%bpqn`E39cJ#+Ynylqq*h~j z*A~;0=JMwTw5>mON77~T0UM{%-Cp@^zgcHkuQ7M>tZb(xMV5fztr*)2^6!Z61O%4) z80>WFdGRu#rp6M%V$Q`Fk_nn2eoU79=(ROb+r9D&L8F<+(uBa!44qm9mw!h1A396V zv^^zflAs+rThEb0K>A}6(rk1?G8ghc$uV?}Q4S0c7L30z-1lLV_;Ms9WO`FFQZl_V z0*b^M$VkYb1ocFC+#(kdCDc-r)>=Ns$34mt#(`5d554Y!LHy}_ps1Y?jGfSSAu%09 zI_5s&t<#3i)f)naZxnwMWH=YfkI0M!jmBM65%ZKLkk;?l zUZW$D7S$x(cpm{?*Tj!?n0XxEip4X)-{#(j&eOru#yOfvZ`dQ0dEw^DJ=vt2vLMW6 zaXonF?xWW>(aYzM_q4o}Xe@bH7IbMJuAwv*Gb#v<8J3kiit1c~sx?tBdF3rFW-`QR zH8jlp8A5qX;goCCf50oBH4}b)<+JAqKw2=3W{1u<=CIvX13k~Vw_Zn-nMG_|s&_lH zr0Wd0fBnS9gWoTJ-P+q^XI0+N#7!0@&2LfCR849NbAt$BnYcB}={Mx(NYRs`NewQg zRf*c@m46DtNK6ky-5A#7lfaQ~p%5iw!8E}xj9KN@4yB}%#M>J-D54fv9KN|buTq>X zN?t20y>Uh2c9f-GRwQwYVReL9XA4bgG9xryO8Jpy^TL$hyPJGvLJQfxt=7A356U4l z=j6jPu=4#Z40`(T4BfKS0JP*nFA{v3xE*Lhv(eSJwoURLB35nIZ_4W_RYTn4hHan% zb@#}}Nz|OeCpm#gGuF2vAxkGGU@kr(Yv?kas9?cgHJzC-P*$m5dZy5oS#rWW0v5VSgl#GbI8z;U0opvxMl5#c}Zw=aSaY%j`p3J*dv zXkib+M*FLoG_byvEiD)oa|DaVW$9W_kQJ0!4G3e0Ttp@k5y)F(k5 z6D+y7@J?Ev_4zmj)=yE{j}Z4)WbNe5qcmLVFSCX)HiK6TG)g^LpABqhW=&K{mIeIe8;;G=pINc0>nO&oCuK zkym&sfsp_Y`I;31tD3jX4ca?jdg1x2lg4X|BYbMS0-F2&Z^-$?;anN+F$0K|Q6{vJ zOl+@wqMfJ*(;~(XA7ELhgDFgN);wr0cVU0kLJ;P_clj2RsJTo;H@s1Q^vdUhp^VYVi!8y6 zb(gkDV3b)gzrWOqP`_9+ITsothZrVc5s9YpVp_PA8K@=u)LrZCbQYrmW@tm#IjYlQz z=V&GE7pRvXmAtduYiI{330XBJ%eI~@EKQ0jD|;zRd&75om;0Y!fTR&PlS$(}BhM!- zT@&>(4^(vRgglbgwyu54BiJMhTz#eVjNco z$rKObSO*t8+FBE{pCTbIaI+a~4RVa+FXhDJh#vC)zg8jQ8sDXOYzjw?C(@o{!3X}3$Htj+1VO~*A6gm-Ojq-)jeLf zx{f=?FA95DDLt=vT9jK`m6A5=bh96=l>VZ4>a3~B%d?fzM#XckRyPTh(k8{zY#qpJ z>)J4X8WCa7#>$a(S|BUMH&=Kyg9!Pp4Q73fNNvwXI4231Pl|5klFzJ^b}Ak}xhi%5nRu945z?Aay%H9@bZ>zGmEvXNJ zb(6|J4l5fMk}yFjZ&dc4OX|n-lzW@-?qy|ja~WPW{dT>ww?XP7U&1CSr9UYipLKw; zvR+x*02`@V7+{o(<@s7E`$k#WiI@7r=F$Sf-zy$Px%I!4k{=Z3FG^mWQu?jp`A%`R zD|sE|ewQ>(asH&_`O+*J07DdKlakkrR%(lFyKuPMKobxnBr_z^4dVk=asw`XdN-ygYrB+TD=u9Rsysp>UppHakXtI{_n$ygOD7Leiq zL1hF3dqEgZub&bA;m6H#xV~B>-$ajAWb!pifTftXy8D$n`f>CByQKn^A)4L|>fZFq zjyCgB{0G!QR{R{abaFp^zJ$A^K$6((DLI4tB~jbF^5$0aFmgw?U#LPL~QnqJ&0QII&8x z@~Uf1{*Ha5CW?!N~`|E^F}hP7Ta zY7^2Ocx2#q2cC}LjBshP1ua4I`o!{z1d<Cg3*51;68`H=p=Y#;O zfxF5*724%ZNKi7uN`(5wJ}Q^3kbW>3Xh&7w^bk7$*gVrBP~-u*6I?QWtAc!?8ryDp z0RyV)0 zmtyrT32kuNZ6s$bk_XBOJPdw{pdG{_kA2Lq$NBZIasrE_jY7gkc`s#e@1#h90f+{1 zBPN&(~S?omsrE3(8|M|rif&>6mh+2UAR5~2t2yV_wtAm61%BU14zX< zI;IRVdcF%tv@u07Sl%C54M_t7Nm_<2vXuhtGUBo3I!4l5r@vl@GWFm-Y!1;a*(S6D z$@doZ?IThNJX6#$lGKAx=4UGSzR|1lU3@3g^44w% zK}7%C2qeZ@d+K+Aafmgsp-Tc!Y&-SuUrS>LZw;;ADUJ56U|F`8*0#vsBs6nzo<6fqk}{ApepDO+ws z@UaLO%LYvenKr7DhI3t@*AYqzc4v#ehaX}MvA(Be2WVTH0fDUf^%yFM!ja@m)?0jo z6ui~2D_~~zHyu3CTc51J!K6s$aOdQ3&p(vmRo1H55#ooFjD3~viDyeaLRf;bwUGHj zK6gXMB?pp0ct#BAg`hZ~!1Hl4?n%91fL+~_m^3HQH4*CMK$1oZaI=9A$_~gEk2CbR=?;PR7tM13-QnoRHC&!?q|`tLSJR)Ds66UkuO(5%ZCK2EU1Mp6 zx-!^VxS`;fkV8sZD9}RU-ek>bTl8k?z>Xp%ACeD}jkflX$xugJh?+98kI=$ELd?3b4sDS7Fru+#R5foDx5me}-W#X@|HpIY_v9 zT3$jjS1CQGc$(m1o5I#c0E4^O1)2?aoj5T_;YJEP`sVIl>09y6N*E{!+$uYxNY z)lrU!V>m)-HpN+|If=md{WR!MK)vY7_O|>A_lY>gSfiElx{rG)Wp%UxRbTnU zIRjwnnjnN#V=Nk-pUv``6*7EWj=bQWli$dIb|Zj0=hxzpL{z>ioi}ACOG|!-0NChog?ltUWYi zQrLz7^=BpT7kp9duLeh0OjKuVmMG4DDS5Ruh>l-ail)s<-g$hTQ}UV+-aDgY{8J0> z?GYi)S_&Gq)>^6|s)^ccugm%5&?}{M*cIU+(I~QuxZUZsv~)t;hAJx?l%7!!#8USG!lA38v6pMT=f%z^C z@lSwiQ@9tSYftoYsi+#r4iGIwHc^|Os7_XhZ>T~N~1;P8M&0y^Q&0)9|c?1GVx ziJzS%=G5&ClAauYTUrBslKi_SkmLq18O5R(ijamaUuf+MyVyi3+hm2@O-)I51D~eR z5Q3)IW=&wyh#rFIgk4Hu1d>zS3yZ5Yjy+okbHe228G*uO8Bl*JQppG@2~4|OxwnnS z?Ayyo+KH;-Z00F)x<+s_lW&if`$Llk1(F%z;gY1mXuS|g;UF?=gwXI<))*#!6idp( zTk9nLrrlWPUhmFzWS8bkD~g?W;D=LgqK%slRUQHt=uEV>+M$*GJA`E{mX61QI7!gS zU`$CAa^WuQ=fK|I5FOzG;+c!y4T@^V)X%78q+^LJLCOU;i<2OH#ue4e7glJRBOw3C zI;DSBhpDUPFm%<-%7}(cT^X7>s4GK_>0OB#OWKV42F9woBGfdNCOCysP{}bUrAGdBOLHhwzi@ugf0V59DV&Yp5vTAy*HL zsOHN}t5og1U|bUXSr(X#c*Uz6Org3UP)BQFUJFPx3Od z58}74gi#t3^@LY$f~#Ouqtg!~$-uT`N zkAWtRxuTT&|7{d9rmaFt1pIr_pqlqG(gHQi&k2$Daz$30kY|PuBaR1IKkd>EKFs|H zKAF8FGNW#-=ZBSoScKF2^PI*va(W+-kk*orwo#sfgAjaVFo^K>NbVp$CvG`Zg{t0#75z*9ygg(@;?x@v5-*r35@WG7OPcJsxX`W--ys_MF_C z@T=JsR-Fk9#vld}P*e}ySRIqqT#cjEUduPILpd4$@0enWJ|2W#OdK;%OdMuGgqRG= zAslFKBZ4(SN;8QyC}vEWM;M@72MK1&w;)p1UxRL|+)SiStQ9ZV+bfg`kgln961Uo! zF%tSD#=7rdEfyqTkbx`=Xi2Dn{t?5Yg^d}+%`2RM5eJ{OfP+(yRa@|bf@Fu4D|`KA zzZNLJ%C(sn!)R06B)UH(FVS&Gvfr*JNNr6a_BJ$@n0QrwqY>lcMpquUL^(ymTqc`B z+L?rXHNH6kv1APQH;Ou*A|Wz=hL^;pFzQKMa?J290_!*wK5QchMWG?ca7eWZu+zi} zR$kxi|4!0EXV?#fMSzyb)yFD7V@aA2NT6MLm|u}1l(ew#te5$}=XZypn2h}e@vxGn zCIBpn!t42#9j5?nXd$zPV#M023fV$CN?Q#;q zyZ5{TA;SV^!?xjVjI=&55_e`U7zbk{2wLb5!qV`gPcT6f6xN#p-PF*|BK3vk;Srr4 zunQ=U4;%n005U4}ccr*5t5ueUxr~|sk)ww2%U88Ug-8<&9waJwzoWICCLUrGac>B6 zO*m_e!|9lxxqa#CqyIQh$7#9fuPQ&Moj9c@DnAr7#e0nuO60RB7M=fr-lk49w-X)n$LMh4miiUK1K3uI~|qm84xHo!LI!Dcyy(2r0XIsYfg_0W(g zW->0&AIB^Lmn0#f4@t68me4G>W_gw6>ap3#^C^A%a{yNTlS}VPFstLc5A4IQt=DHkiTF@{?q+Vcg(aG@=GVU=G@dN1g4#c@(&zF8OyDw^yoB zgNs2vZv!c&iJXMmnkeGN`nvWu*3~*Ecmx3sf3{t$FgG@aSAO0WT#vLzZ)3%9GRjQC z{}Ew_JAMtq{z~r6e-B~Lbp(U?-$hs~QQ7|q!Yo}Nxd_6DQ%Us&z!pp*){lcDDAzjM zW`T(_El^Rza?+UKtnTQ*+z*rr*@(KVy!hZeNb`R%xVfJ$gA4YgMH1uCOauc_o?z{0 zZFgB?Tij|O?kEtut%lembm`9dThTxJj~*d$eFNTAbjxJCs1# zKpmxBg$_ocN1phZ(3+^nyz)0@|FWL@20Z*=)OpJ*pAM=cCO1O=Nz|+PFP-5X#kOwU zXM`Jyra?L<_*UFG4GzUTQp}TY%3k12UXhJ6`8;zAf9$QEM;|U>nfQ&{GP|38LzRA* z4L>q3;b(-P+?FrYkFn!C6A#F0dO&~m24>xZ;n&IWK4%ui@Use&=@-DH#4Ac8S%3Z4 zZSixh=#PG6s~3*g(@)*@q~FcXpV3OUvUNS24A9balNubIRjH1YHyewG!W-fk2 z(19Ni1Z*np|Krpwm+(*wJ(avjd_^dEJ!)hnmOti#0~7xcaSnc>m2Wm!<(966gx%zZ zXLv(qdi{A4MEMX z$Rt-9w#m0o*9!xYAFmb6oPhj^gG4ql1@J(&5pBa+uhnapE06mTS5%%=;bf47DLNiC z3MLy)HS6b;wIUW^{M<8Jz~EbA~atU#H#r-_M{m8bAt0{*g# z2j$l|iaF4Dgt6<&YN!&NdF~>_650PkVoCldAUew-!rk<<+PSDvqr~QQE#9V*LF!3t zSyRYurPu}(WP%fc-0;H!Xq$uv{%BjES;;t$Aek;h#xD`mAzY?el22mjFSDv(df{&R zms!B3b)Y<=E0jdF++n#G6O8TJBESR#FJyws&ztm-!2x1qye&a98pX6Y6_B%sbv-)r zTyixa{fZ+AchkS30O%H456B)5BrhHbq5V3XTj%E!AvW=b7&6Fe!f9 zr&25dmHD1CADTNl)U0=J5l7LQ(=%DF;0HzN6$Guar|Xn4D^9V5aTCR+SpwWife6l> z{M9miZG``WNsb#JZZT)Ej>Kqqx|Q4`o<}#7H&QIB(Qsln4dH{pX`vQ^lxaNcX3?+C ziyCc!fwdtB)zYLuGmYy>0zp4&&ld2?q|`L#r&7-R0|O1wrJgM^14Hu1J;lg0+ISr# zV}_=Ys1I!vf{>3ABN}KxQTuf5k)~M884M0QH$QM)RYsK1enD*Jnuk4jy6QdvWM~_>sK=-bmgUqc#RRw zmQjc5?OwIq6%4kvjbK)dh#DyF4#m}Z0g&)VNG?;5-vC5=VmZht>we^yf=327(>V+t zaO;8%DG?}7i2o*QXgRjD`KxRM=DA^yvJ{kAD}U8|4+oF>ALeU1T_^$zv<*QU*4<6h z7UG**la+ir3p;dpM;A`X4OFM*Cb!Dq$YX%5`H8cjuN^QKyJ0zLI7#i zoG@>V8Fa7FB5I3Q{&T=^t3_xCr$3UvLZ8+6JBGg_Sv9Y6O9K*iT5a+PF6-%aWXWHm z^d$aH;I9e~^5YrgnSry1wb=KfzD}X^2mC4c`wq4KghM~(5&2tJE_lKQ@uOxE%)pYE zZHvBfl00UKP-(D5#Dm{po};H)gJp!q+BH!-yz(Cc!*L4aYzCW$7}FMpQ?tW0t$qO% zbgUvAAXum27$v4R$9(iPAgKgAm6@%uDwMtL*tL4L>wA0jY54U=1}xDCT9IEP_J6)O zgva|S2`jBNOW&)n_9Fa?^MX}w3lx!7+|;EQPvV=4>$?<(1Q){ugp?G!)zmpoC!;mJ zQfz1dO||l1T06|#c%rhhPa6(TeQ#P5dWoCyp1n7&#bd8Q@7cqH$avJ~2p)+ALj*q( z3!&MfCf8;OylLARUg${6j81P%Z5FB<4>r>yo7@`ffd()|`EuyqJ8hy^Af!KK2*C2U zh=GMZpy)_#6}?F{l)ck_d;6X3PqbUV) z$5?}%J4+8pZ4so|CjXvJAJpsb|1tbPQeKuw?9pYCK}|t9K}>MrqHx#&aSd$Wkx;F= zLe+}eLiVcxM^Y&7{fg%R)Xoh3jS$5abni3fwVCo-~?@;=JmzDd6kk7aWdL~jtR zGI6H<^w$T9=O7QXlZpC)l5r66biAbqozj61im{8sl^@`p7zsQiFS<*MruV2hJC!`Y z5H2{}gVS_Eg?B+HowDOmD1k+?y)+o3bTCNBTWzN8EfC2ifuv~2E9s}Ux(4K|+1h~< ztREy7SO3VN%wRG=I5txpGU5A_1}F1#Cp;{!O}@*y6N4^(ZSbZa58gy-Oan&X(uc4m z!pF35o8@aw;y^sPM#i%6CJB$d=+%&6%HHrK9+lJC7B6V9&?|%Z;|tHo+vor#opa!3 zmN}fx_ep=&yr2Lc0hM+@vq3yeuaq_U<~FB?`ldIh_f~GLQ%dTw8R3Phv}i*s0&*q2L~M>JA*K8A;w~Q3_Sx64i}q+XK2aL}-HO z(jL>Q+|*$C)Vy~g@QCeQv80wh%(s*HS)d`!BL4cVa%6#m~+0nmUcu$S*?N(Aly$ z+8Q7!WsM6o_RSqS)wg2sRIMmbptbi_%fHhHqSyOeOFL$#PRS1H*Dz#_^rfa3F{ z4)}ox?)UH)Fq&82dQirrJ3_3I{Eo6{+U5ayIZZ`~8SRZ6nvtPoMk^Wc+oF`bepT;= zkP_%aFYGXi`TH_BL3(z_q}Ut{^HQt*6F&drPu1CWZ+q1vTC$WqLsWDbV8%* z(L`em-bp~F)$+IY_EIu>^SAa=SH5X@6=T>~i#22{8=+0B+iEp9?LxLLMjiKS>LaQb zRE_VS87eG8De;qSaBK2aOF*huVU{Dr#%0d2Art01ZbIIg0@} zx+OODEu!a>tx4U~#+$Ia@YMVnP|{p=@>gyJ+8E-In5hS=+G_D?@}VNKRt!|(yRL=~ z0wV+Lh7>xpg;wNr&Im}@%fm@7cuaY%5-A-rSYF1TZ{ zvigG$+RAdrCgWmjOXj12z;4%;w@2)VfYC{Z8yQ3v!ZAHM839LqAt}aj9a&!TS~~xz zCk#m+uuYO~Fso~VM37|CFfQ@A((Fd!Tl<@fwf+TsV)?AkYyCuVbzqR!1<~`{TEv9T zk@HNi8xifKIC_!Irr@wD4sTcH!eS&FnoLlue8)gt3m~Y_LNn%70;hw82BRmrEbDM2 zN3;bk>7EHJ3#|JoM7p^pMXzJW8xzCv9yB^|&6A=FLJiJ2n~sf%zNnN=9r1u?7!+rD z2Uu4r?>uAKDW%9;0U+m4W#u_#X_M_;JnBeL$`9z>i?c4dsFfU_4L(%05KMhJIi>Gn!n8v1lYCL zuuF`p!E1bBucR?dM8zK?#M8&dvm#i~lwaMOAS^uAsjO^PmY(MxSJxv}De{~y{r%s} zd3Bdw4Z8jx&H0gE-COr_4nFLaBJb+b-~VvVWXST>;#8pxP0vo!GULgoo$`(3c5<0S zPu*b?BRo85qS$-GHU*eBMgHQ~!$OAt1>+45jEA2)=rW!d;+J1P#NFKu0WP_4N;s3K zL4%{B*oEQ80L9d}XyQs!?llN9mF5lw<_*YTI4t+-&CSRYVWOAu(rXex!QzOEb$SFR zswc@}9ilhn`^4b@ZZ%EAse__oY`U))QzDfVyF54HZjH3Yv7T=1(wc&tHTK+G*G=HIMZg+FNZe$t2KCsh)Q?%3&8iHPYFroMlu_S+HZb%5Hz0!VBZ_y9`m$Uw@-a~=ab zuJEZ=?+Qf8>(@2Rw1R6!5jJC61vT95t>!_2ppU3PCw&@p zAhAjRkcaU3Dwe{;Q!W*jh)n#}ekxe7^tz9ACoD3 z24UHHg9!|Cc0fxQU9^LCTcG=cbi43}t=?O?TFo_{cVO%WLl8?&!pU2>F_=St!bl@1}WYeGm-u27h(;3=w+-@L2NEG4j`VK8!ZtrMvpR^O1 zyW#wnF*e&!oM=*-8XBujJHVayZaWhcQy(cN&wzO0T8V&bBqA`9vKdl3m7jn>%KGRz z$ssD9LWr_cvVu(*W1-b(;6_$I#wfe`*V{5L){)dfN{U&?V}0I*8XQ}Ntf3B;#QZfA z5*Lt;BXn;W(}j~(?~3vgW7_e6ZyeaxDMpgJkMd5ir0|=FvoX|f9L8)zA6N4$jAe-5 zSTKnKlYirR!Z^*W>q08N^06fJBCY5}OFPe^fo>9pL%nWZ8J3jXAHHYxlbYOb#UGRo zHPc~4&{7)wu4Ecg1R5k6qCk47bJ!qV&MiM2e8aXQmw#qkVyW}mSp~4-5Tt6-A|Ybc zAiVXP2gl#nt5kb`zu5Cr5#zu}v{g4b)(mnK6sA0`^(Y}d@A{aumXUbQ>DCxbK}2pA z0M;~OHO29a`ubcvIws;Cjoeq3XWZnE4BFC~op=cDmtWok{o1Y2ubri{hl43a(=Mf= z#A?yRLLqlf;gyynZ}yP)Q#ta{sXT-Rh4SsNK>7BAu)4DZM+$41!6g(#tX_^m)N;e* zg`b&x+1BRo&MRsD&N*fYORnFr@Vb%>mr;M@PKbUV>zN4wVhrbj^i)2=F^rQ#+)56D zkU2-I(Z4fjjV`KDXI&bWrkzEr(|C-~Hbf>uulI}3loUQxe8EXlF*QUyGJ4Ah4Fe!u zK#w-zo_Sje;XBzcrIZ5~6w#tF(3^;FGtkXorc9`#t$Zo}2x{jRK@5_yffLP^QTuE_ zH(eM>K^D%N)NRJDhgViIC(#@!TFq~H3VQI6j9{SE=VM|?saNQu=50mlMYieN`=d`s zK>v;y*|GE?(f1DCBZS`L(fAMRT$E|z0r)^Tf2$`A1XS-KGy1eabJ$|?#uy1LSqSV^|_jG`w4jPsk%DCnQNuYAoHbpYP1o ze1&4og9>qIT1Jr+g*ZJ*GpvK%(SaQGanFtI%JD+!5lJ%^mF4_z@9%q_>RH=!eDB*m zi+T#b(&}x=HDqExJyn$QD*J}_Ymo%D?Cj-7*oFOEYBdy6ya z$MAP9{?1t} zCyn<%yaLX>kgolUR$f^P0b^qW!~nQmSzSjDfpagMEpL-&&nw66i6>9HW>u8`hwaSa ziQ>;LBw;ie{3g)=R+9n~C^y2yqC&1j!~sNVpaE%8fmrhf2FzDt4lJ1_#p zG_V>IK56^`BS}a5FNiU`XC$mYVP@ zj`PdMK^bjqdM10bgI86<{mLVph+dw;PpQ!A<=shP@s0(ZF(rP#!rlb?`IB(55j~Yx zgR`I+J~@Sc<&o58H9_BoC-D3}%C8)$Pp;t;ND4;zm812^3Op%47G}ZZLyaxj#2qhp zzSH^ZP6>P>oow#P1CM~fCxv;2vN0NLL?&c(6jNx37J@ST7H<@Natf_kuPJUmenKsajg#C2nzqK^vH8!w;$AEU;~=+R{GA z8J5_%^G7?{cFf<&|L(zm`tLnEvs%gHDhI8ImdsKk)TSoqghos3q%m}cn#sroc$kZC zVW=_HsWLde)M?qcGa6kc=lls~vh!C#VE-U37|dp8{J5+k=7&Rchnvm`4~H-*VAgJU zih=-9$R4Tt*i6UUyS?kM?y>2ZDZ4};_2x|***j#)kr14QbNKe|UMDrAcL)^V!>1To z1BqrV7q(%`+t8>}l;v-rNnCP#*g}Xf$k+NShWqtLgl{QNLJ8QADh(t&FwGif^(#|* zg|f!}%He*)5uziM{_^y|c|kA|7uH7Q6x>f4`HTs@WQvHXpR{5gSRw{JVV!cAKqMXr zNTgyZ1RpgOM*>ZRy|cud?7^D`3nGwy#a=)yM}#6T%#6T5=95{E+Nq7cyx(J#3_dm! zR(nNGl{3E|7lld_^9Z}zK#^*-Z#?||c{44T1ZW-`^7maKAearexocwAWc*i-|9*l0 zJ}3YFg0c)0=XTWt_{-ky^oY~P;jUpIj!|};xG6j=C@*$2aUjRn?%acXY^+Fe77Xxl zAynVQ?;wMjaY6~(&@P(>ZE^&u_Y~9tJk$acZLsO%)t=7CBZQLI^NF9izgD-a=#=fn zStl0Na22y|D1a@>EeLEbY<28oST>0PlemV2228os*)Uw9@J5^Fffv+nea#vZVkEw_?p%NNFwHJjE`^^IUuAh16cg*<+RYmjuaEE~) z*|coGcYMwORcGo`PiP-2W)z`HfcE@V5BiM{;Up8n*kAP>zwx^WcQw5^2&p$Auo(ps z3ASN?L||c}#wLAzG&aG%Vr=5CddzQp++XoMzyABW;v#7?BwVZC_$zzO{V?9O%Ws|V6tqZJ zhLfk}>fDt@aN3V_K=l6NDx^D4U9xo5!c#vp{?@jlj-EEK6(lbI(`rpLQZ1&GZ923q z6z4VKeC-vwmu1p^d~eXBfnJ5!^q(tEZM~(rF-OG@n zUZ{!w#_na^?w3tsnMm+}RYte8)KIhw)wW1R6a7v{EM~ zqZ=moKdEIgj54O`)Sl}0**<`&IwmS0=X6Q8`;DDW%&?g=;jifO>-WTi_$t;Gby;B4 zP8Q^lM(t8)K%@40VMBKKP}c1rTM_waxZPq{D!|jRRE0%a(cK$*b_Ah10$|1# zgaxgVmj7qA?l86o9jReG${zE^amuuZ__yP-*I!JOAXa^Fy%RSeZ}%R+@AY$MbzINi zD{yhuyg9hk|EIf0;9?`b{!{Nqcb4^aOfT%1eq_h=;T_YDC@boiKH~Wo6RdzG_Mt=v z($FT4Fb{h&Z9QB6bNSNiX3QMq4)3W-^px~e;-8LBj@WTV^1XQ-=XIR7`kJLZTTuZ! z`eLHJ9O$vRq;4s%%`eFA>Fvihm5h!2@pV0nsrez4EUj~AVdb{EgPS|9FByBoQ^`Hq zFFLM61?I&Kk3IT`xAyXdqY`847NcP6VI$fnPRko{;Hn9UNq@itvEKIr{jI?n4|(O3 z-vG}ruU#3FFdU8pa6*E9oW{e1{QuOch)zIBw~;M6ch2|jyj)BmH>Wm_(G!w!e~#75 zi6~G|`dCTnr9sk<-(fZg%*6*T_0Fy=UOK-;2i!fjkdy&Y>@5VC6P-h z=QuM<&e7jVZP|Q->JiBFhRAhOZtcKS)o~<0^4p9nSPQ=qrI+C_|iVP(CUL zV?xR!zW|ZYQP8aDX$e;Zj!7tQdhdS>Z$d_MfPxwCl+hZs7V#}5wgco_u*;l^r`RBw z@F^|Cv;*4gSpzovJ_>5H!(t8CW(#6Z;XH4e#ZGO5+6f8ks3k}5sBXQCk+q+K#lXcT zk(`_;auzgi%M0FKmgDW9;O)8g?FrGg=3ltwot+sk6@8{=AMA-<31vnq#uyq2?o%dsirpQ(X>z6 z$P8Qo=8vg@@h>Fmk=$9G+A+f=;)hcvmL>(eV`UB50JpPA=3r+ZJLVqXGNdNPT7q}% z)BRgYAGoyGZegr-u!Y;<<9Is}G3MZ7Ub&7_;CqfNWh;zBC4&~8ArPxgg=MX-wgz2_ zL61TLKG|wQ!=gcGxdey=`$2Fi+r}~|id(>S3Lowy617+0pViRK&%4ooBL5s;gn-w> zoZvbb6WD`f{5@^))RyTgq=!`~6GydQ!9akpCyCqlhoBG467r4BCF^FSio<(ZFDPBV z5p|&Mgu)Rzs(sNqv~FWx00qlC(U+YTljp@TxdCLO*LPrn4Rgeay7ZBU2tL@#j2|y# zcLF}*XGJx*0eW96G__g_z!he2g1#_=r|#Xi=lH$D_x^FuwmsA&N3;*XuIKa7t&N5kTH1*O479)rQ!+<>w-tlVkg}zJtcU2C()3DLX>}tRw^t*)ci& z$YQ~U6+Q63FL0n~Xx_Fa37u>YQw=}p&10|OL(Zf%z3wmIX8SV3Ve1AJahtk82)~9L z6s~4JbWZxE^MJr6`*krNIFavi9<$Y{M0jw%NOvxZiUBvZ9T3A)HCBNg6^u+I z5|UU464U0lJa@o9wVR{uQI;7v&MGha@I=k9&8K z%@Nx=K4j=6327)1`h4(B$n?tC1>(A9xsrOd}!D0Q|tk2+)7@zL`PL9T6H~7%>mcfsiy1>0y zjZc$jr2i8u`b}9;T+RL_wC|!pIDtoIVP0!tKByS_I-&+Marb&tsGq`?Fu-BP9h@c2 z^hHY@rDuvz4&Q%;t0-|bYi-m3n?vnrOI_*l&$9|3b)<0CsvCoT=vXI^R6VGYA}i3G z7K$|JZ!-!7Xlli@6?Ss5}zw^Ao+Y?6S)-4a4dut-$P% z50e1Gcpb<>V`G>EVVl+OSs)?{5TH}R`yv`GTHe>RwaUQP4OQpEHKJ*seEL04phHkBSF5Vc4A~$jO%xf#F2bkq(vjs zZ2-fp1;IrmqZ#HxR2Lq3GXJF@3O*eL9ua7TulSWr5!%1QD_UmMG0~F~|p#r6-Vdaqz#5QB)UcUhpvTgwFAi17Un3(aa-tj9t+OQx6LXi%% z6dpxQU?(B(gcN0<1qg(c+Sa>%<9k4{b7abBX--eY)M>J@lyBaciUiZ0XEs7i@-51w z(-`IDU4O%S$y8|07}-I1s8*xP%(@Allu`}IAmAN=+MGm@nP4XbLvVa;iI8_pTDVT?ut zK4qY89f@QX5y3x1del8eM;S$rhP@py?DA8)?8sm@2OZ1UwxCdP6(*~T9vF?{t%bGP(!n}@DB`PmbkudN*sE! z%iY+oTtc^pL5M~&ZFGoOeti!4j7D(!>h3dk&);3YJFEE`cpSA$0+ZX_((oN2^j5Ef zLQgjmvs)jFIuT_BaKT*Jw(y8?l%m0RiFAu{hg6BgEwxmMe1#eQ17lUS{Aq95pvRwju5E8b^Smuj zdAm*D--Aiv`9U({A@5}}84!~bOGdg)2v@3Foduk6jNXEw>RF=NJc>3r0F@F+ANUAK zz%tA&V{!zmdJ%Z3-$N7b(FBBrJWus-LFKxw%^a@W`QY1={Ri~(ZM5|a-tuUSgfHcOiOLz%oGkyRILG42aH7cEB$gi zl_cB!CdzwuA-0p>)a5trNq5aGDejsHnWv zNM||U-OoT?a;HDMbn@i-Af%O5umdqM&5-Ou%R9gV=VCeg1WbHu+eq%7Jf7@-01Rv$ z0c0RJgekt;3$w|l$5t}nhNzjTcP<`V8I1PrzOuYW*Ml#=znj7LC}v0&nbX5={QJ96 zgUSBd{I8 z+qyUn=DcRtRMx5Ur(vUnR!hPDi&YCuDWbIYU-mH|*dQspN$l>00c~mb4e&Bs=&XjN z20uW5r<@D4Ry01crvO5oPmnW(vQ871fk{0{<05$C^M4nqQ~t{3S6*G+C{Os$Y)z&&G%-A}vc4LD{AVn# zUs3c)zlNITtj4y(sA1oD*1VwKghzb5!)jKMIYD@%nzQEE= zOwiFkIb&JvHAsC}edY4HC5Q*GAX&V!u>lzXi<1kaUzaB@hZDe1B=oxv=Z=W;Q93>_tI9J0-3!0Xb z(V%I=Ur)fE5GJdlAELzFq#kxnuS?_SH3K59E`RMZ0pv~Ld zyv^$*5{v1m@d5Clhx4mO_?1QMbvbX0F97o*#!pc6@;2`!3G_~dyHu2+zaw<`fG^| zAEion3a(7ghPg%Z2$nGd4)-12nB+`)P>~X2)ey6QKt%)AJl(WsB;c|pTz$YK0xZcP zj#^!E@a|g3`$Q=DZ_%Ygz)G3^_=MYBxhTo1pt|7_0UX?6kr8kTOr2h?T99}Ta^b!v z0i;Ob3lH6aAYJoG1bmW)+yy5nS8RG^dpJ#Pls_{!7w4u4aE}zB$Ou>7bo4 zU)xW_L{h3ESwu1DL zkpGbPDj$tc+A3vZ3YXiw&13;L2mHv$E34rb`c_IuOb$fysk3n8k=vjQUx*IMk>@}( zahT$!cK8Y3Aq2-s+8ZTmiSdzfQw4i=F0*PuKcKL*3f$8W15FweoFV9u)W`Vo^>#>X z_2{ftL(C^u>^23*F> zspV1%SF@MTcjw_v*>7NvSCC#YzodA@eD{oWwfPd1SjX(I&Br}0Zh7F~iBqi)N=jf@ zhfz#BjAnLtSc}hVjj3Ibz!$R`&?Aj~C=<{khvQ}vK8S;qA%FASkEEBPRj?}f1rTic zNr3X$Z1%f@&UYld|6Ctx&#~01`2nQ^R5UL2X)! z;P;Hv&Wk!VW!7Uvq~9mtXc1mj!GtFP!31hY^0gL0N{Qwuei9LiK~3h&q^UP#0E7I- z!PZVAD!yrH+bhLu3) z@(bNxWUEa(0O_-V6Duu5OtCXE`^jj%6){d-B;~1oe^0B7Bb=(9dmELI4&II zJoGW)j!|z1RdwFxy)D)vB7pZ2c^M}3_-uE^dBJK{Z}*;|IUe-8N>x45=e&-0LKfcV zB}q!@G!ToM=TCX7x!viD|ITg$FqyJ1D2oac108e5xzJ{QU+fOB4Ol&kxm^+3_?b8@4fO8&w)p7!TLqNAl zm5+KU9;JHtI@{d%L*lJ=n->nyO+rrP%{ZoPAemGOEC@ZMS#759HVHk_zuiv28HH4D zVj4w{1D!EB0LZq9bTFLbwSv1^y&qHGp51ZSR?t+yD)3D$hJ`i)`!r+RNkn4s^G5o& z&ie}a5ZY#lG|;jDI_cpwk4b;A?DQ{}Jp)S%J%Vt9N1Pqu-YxGy+trUV0-6AIWPKG< z{xKjlP2BE%hwO>g6c{Zzd9Z~dw5u)D^FQr#K7me&?KYwqZ>WN4Bj*r@vJg=Y1e!!n zMIa)~G+Cn$23FJaVq@wukNJ;-^Th#$(vIW#MTw4|IAlDaX6v95?g5C}2@zf9_VJ{p}w6-eX zzP1|Z_@;LYcZ@b2`7}aM8M`)tO(MzI!ssXaBN+=-jYL2uu64lqDmI2zRX3?!(h5kA zgzXkbZU9(22$3l#Myz6VKTJd-9*1yrhc||+1jDLQrwCnU8~g+kr@)ZLeBw-re;}ex zT2bgU*~Z*{Eu7C5+=;RJM`cy2Wd;`#t*U#m@xjIXt23^>K)?;ds+?ts@bukPCB=7F zrSGlkn0sFpc`{thzOM>HEV`TPBdIq+FbnqxCzjuIEV#EylY}YH&kd%6G|VVal$}&M z$_P;}yYKpEtcAg?-g-i^&IG>I*OMR0@m}IV=?P`Z@q`i|c(BW)ppdz-*BuICb+W$> zByTTeWcGtdGwli|0c8v$DscHn!HLtRp(8P=D97O4)oABM$aYcruvZd(6M`+!RLTGq z!-;eK0beG#I5!fQUUl}Az~lmnVx)k={8q$}6>{RpUKKNJJ#&>D1vN{g*K#imO<13W zZbSEoA=`nh$>F9+T5)DPA}K7V1*d5j~{A>;>( zcGZqBt59J+=8pR+9AH3yHxH#ed?-=Iu$GU*${}mC7}1k6kfVIRb)!m8M)D`3E3j^p zL;GCf`eb-3vyMPxNB%l!DZ^>}dyHcuPdW}${Cm`w zj9xxBVuKpPV3TXtU$xI~1Rq1lg|vHca=rxN75iE;@k)8RcqsK5eO$cu1Ab#SYacJQ zAMh)?ZMI)5@x@u&16(N%hgNNoS6(%|hlT*mLhm71P}9a*C5l+Xv^UY-@?ZfZ!lP_i zj?WOis<{Vycm}d+HShB`?5A*XpI@^-<9!Cj=?WBS1)fVc<0-^+k*D6*`#n-3dPg5{ z_d{x769&`)>ggmRQbPn=V*Z7G1szohF~5a_J0mRP^5=#iL>eP`gBxxmpMtZj&o!Z8w8 z*b-b@icaj>5;t*egL!U?VMAF3q;fG?I)Kx4`k}dj%O=n(>X|l@7bqznoYP{7U>LCn z9f^`Mf>9NT8Jq{D8qX1I4hq%d#Em&hg`h%UHYup^hQ-fs*?d6aTo|#RP1FN>hUVU3 z$)f=YhTySY|0w@7Hlvhhz!1hIlAAD+K|`WI0&rtcw5iA-I}!!+-1msAIw&J%z!LW{ zNEX6uNm7d`2YWO|T!}ssd$gk^%|h(4dsP3Txta*-Gbn`lm6*0kDvMgqh-s@l4N96l zxw6-9=o3Sp`0GsgNwlJXcK&zLV__LRUX)LPl$q(8l#ZD@3-;a=$w7pW2N6O(qE6>w z2|Q#~oaZRqboWVa^W^Bl@3eXkMIBEt-7W9-FdXrnQ4bh%wx?Ij(soh*%k4c1trMO6 z^UQImkOY8utq0gxPcredr%~lyMStq~@pH%abX zZC;ZAN}IPb02lzmTw8=7Z%+^6v<$=Py|5$j<7uaPE4(E!g8z@Z$W1^zV8I-{zPkUT zgA4>~Sr@KlI~21Rh^2>GPNo@)l5sZbOHQ8&6gn$vINh6gZc-mKw1WtLdWvAr3jv67 zTxFqOc>EeEAXXGKejTMRs)2-Yo5}}+y^x^;t9}>-_J~onTuRLi60d;5AzA|>LWfue zB76z`(BycBx(xPtLAVp(KwJxRhR9A|MD$SZ9J1r4r??FILy4mh3g+Ed6>UZhll&EV zetkXy`U=`BDG|KHfM`UQy6KGbLMw+RrttB7ngLiZ&bsu!(XmTatDR=pfi{8O+Bm?(U1wn_hY1|tW+g{LQH|J&KK z=U#m21WB8U6{P21k1bzA8k2iaAK zFz8V;K7A9Mbv`T3I=Gts*>k-4cFKXZwcA{58_MnI1kRx;C#JuE&u)>=a5ejubBwW< z(OQx-yd460Qj6S;4lEa$g{B!^pD=%$=&yR!Z+y-9V3ob<*SrQQg>?eRNc}#p7PpNrcDUhK_x>q!O0&0`Y5Q9Qml_Ull2)&xjWJQg=WgEVm%fLAY)?2iuIf7d zntyfspw9uRq#j_A`BNI03E{$N+v(Tr!im6X+2_~O4nf@7Z71?&Zb|?96+8X%T_VPt zrt&0)WAaz5^Xnfb17I64J{_c*vpzeYpLKT9f2jFagPO49dm!CK1HFeoci*o6m&Sg` z5q|0)TV`1%zha+Xz8}B>#e$l2#&)?onC5fyQAr_^- z2F&(#!ECsi{q=KTjCwOx@kzh=3CW)IzzC-M{#)%Y_?DAz2E$vzhQgo(|+9>e$C(fiUC(BR)I*W#pbymdKV#YcBFl!W*?%$1=GT4Culc^es@-pV z$8TOwBZ&!#<^HM;zwuqa?h(J{QNQ9Sdn^4}h^%NM-~!vXZn@F%prMuowx~6ElKNr$8w&jmN2XlAqR=mgrfxVw zA@{El7>`CB&f#m612jtL-Q3S=Yk%EduJE;A3)0p0iuI3e7P`5 zQatd20M-LN7S6FPNxvN}S#h*qeoSBkO7=dK8H9GCaEI}$jvbZQJR7E^zk+G$&43b9 zMd^%^(j6tG4|^q&c3HLoBy@g->z9M%8|BxG7KMSJaA}lbLv7w>Aowt1sk!+ZS(4f- zl!;_~ehQQOtU*rT(ayEOaTM`r@97qI0%-*E9Chlu(ce6{8IdMr9Vw%Li`l z<>BNh#^gep(+3N7vVPa9QW6=7u+Ugr8@k4@tk~7V;HO}!h0|oH)p&{g&&z%jgL3`V zZ}Rc;ir@6A(*P(EFO~0kUm!gI>Ve7UU-Fy&>^3`1{ofwtm;M!0tdA6xFX8vk3HLH* zQU78y>}$XD6%>0l0cZ$`kNdnviB*IS7o`)Il;y!%40~QHc4bd{ea@u*)uPZ#d2H2b z%=z+VwDlM8c7OFZ_^C0@8k^wyN8W3iMf^3taVz8DzU0^Z8PHDdHUn<<7QTgoe-+>R z&9C|Ew$4z@rlkt+?6__96L^$0)O+%w6}f{n_{gT zPg>>XSNQZ5JiSju0`jzU4gC3?8$kcbFc5uJgdKvO6xv_uJ7`>$xF-d=D;^WtGxXoM zR*Vl^D}Lm8YP=@L>53jE$2M*jeg%(2?03je#Mc5zM*Vf&{yNb~B#*>~kjl9o2+iV& z;Y;8azwUrv(+v@y8vir;e{#X{x*M0*)Lfnzmbk38?&{>6OD;MynHYkc04rD4F0WG! zc~KrPIoDe-`9)J`*;8;R%bv4f+4CQ*-h%BJ=h4wdT%2v$)7zKBga-n*--Ib8LKB{l zaZa8g*ve4qF45-}ZT|+Rn z!mxj2^uc%|CMCIzQ=n@*w1pJr@w=TF=SLrC9+Bk7Kg2v<^g-tF!~qMh_12n6cb{O` z#+|vEegBhts42-cxzEF#bruzbf&ri1<wr|ux@ywm*&n17udv#nd^?vzP1 zn-`2KRss`jsSz|zqSQd48I3lIWGhQ&SxY-O>44xxt^}a~+?v4ftxYkqkewokZv}?Y zXwlaFLc0kPij<608d~b{knY71+lRr637$2cQ%XY&XJZ4fUC)g+zKEJe4gi_dBzgw@ zzPvl*ygm@xc%78Z>weQ4_}S(+y@?+>>gB-6h+BC3{u~(7c^7rd`5G8zzV0`^0aECg zqBV3>)FW!uHox&rKxlr;TNI#)^?h@f$&q2r@k_5})EwB|(;Xt>9gsSXYN!{8Q(pIL z-iX;#zO|qFnV;r*XG%M3FyY($$~O^9MJ+zf?cJVOe0I!TI?FtH(z}oR0Xlyi1Ibn+75xen1t}MAQ`Zy2@(Tf=)oh598_}vNtUGbJ*{&#YGh(-98U-Ng> zg%#f4>P^ly$(=1D_c)z^0h!@%Ycd#r)!+Qa3@XoW`Q=_aDxjbTa@N2UQa;m!Wsi5@ z>6D3T?!6wSRpxSjay0O;U-gz>`S&fSbrX>pV;6K#&}_cMb?~eH=2vFQzU}>0LMFj1 zRleAEpzv!0EcgfOMTN9Qv<|;Thbk}DkHg_O;aWR89oXK$c)(Z!NomH+8Mw4x^}1jA z2K=r+%O1yuA}@lWa2|iilve-TJkDodyaV{_!@+@V@LIoBGhs*#Ms@PzY(7kkrDG3y zl2p+u7~May?|$9i{F;pIq@ln_CRQHEIDZ{nw0ktxE$ZN{7~0|5O08e_J}0tu9i_KM z&R+w5-}OeTXia&#fB?kKGOdb6S1J>D4ODUNlcsuOpKQP+xD(rF<2lE}R1i*{FhEi2 zQ7W}~UD2XBj7pl`g#kyvI%idn;!2Z;-wwbhK57y!q6 zFka($t3lwVuwE%_ep#oUQ^9y6`@_A@(zy`N!~#Z$moKy(5vzaBUr7lOG&-JstO^Us zM`A80SH+K2Sr-Tc9w=pwc6HgFj`0~qwjvzsSR=VsXy&S`r)O!%)Vu#3cq4tnMEn}% zKmjh4fqE8v)mtDY`ZTxfOF|#Z+Jp~!tjdM##@L_Wu3#9GtL~ha+ z1+z)pZ}p{d?1~I8o5qz4892@0i9)#=6>oK2e$5_IW%(_)!n%l$pWFcJ(4m31*-r+l zWt3|54H0{b_fwk8yMKt&jzx()Y$jg`JkqNU1PUSOVcFDrGipm|(VGMZ;_3Tg7K@l% zmUkK0RPdivFETE%_*V;o4g3HHm9fKw5TZX31VV2f)ZR>H&-Z`uh5y|3_%FlK>`S zO2J71qhugyLihskOr3ndMFZe6KB%E2z#hKX4{*oq3~K^-7X>w0F)zhP znoKM;UEsOUuQ}56B2|d6y$7P^NX&0LCHjDy18q#UvQI>O98D=ebu@IbDHJ$<(fIYh zIx*>yv76)Qu!!_iSDE7Bv3kj^WDfzsIUgsJ81%q)y13P3yazMwN4n0J4V!%R;@XL$x^ECr)%x5s1 z4r*+)p!np+N;yNV$JnFZQlS{s-z=Ds47Oey|5{_9*IM}XR&Qk&%u{W?!#F(>9JP9C zB8Gaf03pHvH4mUC$_>fqWBLL8klkU+n2vD!=mF@Q3?1sWHL1bg(Jr|9(JtmGQYE;A z>L`fAo|$APB={f}%mFJ9CZ^DBz%_xnEy7FpE6Ro3Na{(_nlg3oAHohBf-i)06U$#t zBJ8zTs%I0;UX8jTF4h&5qKM&rax{iFwe_Z}g!E*1E5)%vzZBh|onqdYWdldEuJ|Ly zOMfJs8k=k9QWO*;F4S$zyT{vagGaP%Z0I*|OjrNqR`+w^wc&n_8lqTBHWSxDS`0NM z#6Z$pM0;=WP7dz2tw~;~v=k@e6QZe*PsNamG!`0APJ7E?NFW6{Z|vg<9>)^@LSQfW z1_BXxlz>LiC6QvAvB43CFo8c2YH=5g;w~6ebex+-lIv7JzoU6ufol#q6&9AgfxAhW z2!u*BmUmGi1w&vM9FYXlp04A_HvRHYj;ac-wCILHDoWLk27eVT!g40X)id zn?AXZ;uP$ntc1bQIY&+ju#4z^`Z-cg6^2^f3bqx|H$V*nPPF?sQ}z|_K?y8~Eel(> zuk4dZz48U&khZY*6>aJJaq?q`PdqO7>AXGHWuA!Q(XS^e~;*Y+A(%*bC% zoWtn2C~X*w&_8|Hh#`9gW1HBRFta2JGv4*NhNJc29O?4Q_Y{3;R@t|_j~T@=lO91h zk>}>OoMt;?PvMxCD*ZfQMlji{wo?cr44419E%A1_@*hGwNuEZ zU^Kw*MXC7Otj;|c$;xD6Ca79m1*?EbiL5WO&7xBzCMXoB659OSz~zQ(^_cg(cmfH{ zP5H9enAU3F!7@@);tBi*{JL zOaj#6qB>M;maSfzD_t=-tO$<4B);Vqtr;TWk5x8UCdijN2r?qsh+q~@xjWhRiTyOI z=^&D0CRS(J{oX^NMY3dXHr?a87k$_Ql>p45Xq5p>35#lBsx0S1!rW0t0Z8E*cpt{7 zvUTwhK-nA2k?0RfX-;sU&k}@YEIe0*Co9WCiWt}=C!1wt0)ZU!t=`WSg2mK`az<@UvTo6`YDD2%ib73`uD?9FU|BW7 z@m+bjnBfn`F4~wv$U~t9^mO7%D1+dgHr7!0z#gsG#(S-SsnSCS@yL)}Iaw?i^teC# z@WYK=pU|da>M)2#4e!FJ;R&4?)Os}10IayCy6*JkiA$38ix}W=<sDhB8@Z#qUr>+}JLWzO z$Ly!7uyv~_i^(up##f^We>&aEqDbaDR)-XxLaU#Kb1=B*0O7WJx0OXgdU;O5wSphv zKZ>7%Q|!}Kp3?Es>pNP#2hr=Fo`YV0ThX8PTHYd_=54*1qU-y;r8p!DV^0IGr-o`~ zaphDinmRi&S9?3Xzq?@%5#1B6S3L=Tb5HYgZ!u;t!}5y39Cxe{Y%CB%HDXJUzbf{c zIL7(#6-G40<<;OksSl|nXiH(2p6tN=WxCS#v}9q}*xBez-%wmJNpVF>RcE^WT<-3o zKc9jIbBRSO0(vUwS?Jm;Ju4224b(UH2+Sju=O((ewlYYlwi2;{3t9=NHX+}|tKThr z5>}N?82P!bS499|WfTzbL%_q&JAO?Eewe)%KlB~Oj}Y2^#dg0O8nbu(%J<-W{WY2v zv;)t>iwyH439lZACA_j+Gh$I63_L;t*6f3pg5CctcyR0lkNp6T1G&NDgP{{hJamGD zh%rV1_jqfCky9kSx9{}cbI(Z9&z9cJBo1r=42+|c4NiH8Zt&-abm4^@xXCrTUCoQ0 z-Lmz?$DdoD-$b{*&_vA)5SBuOgnpsRPPAkOeC;)(ojm~C0L9jUFzB5QO}Co+h*j9N z)aTYKY-{ zfni%i+xTbNyfvW+hr7$fj~D#XHvWfg-lyZc4{~dWPE2>`J!mT%pgU#J?mXP;O$$@N zvN>AXMr*)1hZJ&qV{LW{WhkYhi9ati$vYX8`Ih(~02v~o3w#l?#BMkWPd*UU>U4@N zu`~hHpkk}Sb*&(SVx?4ZwLhSb15A?zcLQYpm6ph92n+3S$@G_db2J11myVlS?i z7p)P9ia>-B`Z;;FrWJ@Nk{U^|R#&uhNaqL@cX#wr0RPo{BWl? zx2g<38Qd#kg-3eF+{KG=FY;8P1aAqStzVpeVlnKh=U*7aUqK1?Fdz&RYR#nAqn0P| zXKJHv6zw~nTa5|R%x!vhzeo~=V9wf^8OnHX+7|^Q5ryS0 ziw&|n+K__2E!#H#LJ6-e0%UNPfsHwG__aagM~u@p{`+mn6BxADPOB8;S;oE&IT91r zdzxSaE7g@a@KVElZQjPP25i$#FoetVhb~nz#{Gq2GOdpg+p>{?(G)%ZtPgR3VKBlC z089Z}r0*i+An#b78o#)gDNS!3^)fxK@Xl7xr5yx?Z!rTT)S))cGu65lWmqLPEAfBC z$<)(~ityiU_5PTvDu^g}hNHjK?OO-a7-b2}8(RK+!}}QzpRHS!5clhj@@qzB%D&gSP@vz+V`|afTy=IvYsoXUjA3pvWPk17hiGZrW|Aqwr*`Kk z4WeMU-*iOuBO5q!47>EVoJ|b3vq25Q(RzACGK04KGT`nDEK-EFw)hP2rJL^Ujii2b zvfpq0`Ey_EjXfS4s##Z*=9m8}To@l71I3q#*KY|hkv0+Gf zA~2gCGB|=p<7N_~v>Eoy#8-32#_u&=+eS*g-5;Vd8v_rJ(bL>#|91$b0##X!70i%65HcO}$f?6~5M! zjzxg7Og%bNV{fikU_-+aLaEQvXgN&Duna|8)02>Ozc41;EnV}$b~G%GYG8+uZg2xlB6e`~L3izv7W z2(n%_^bwZmPmh!-8n%0SYx9n_(~aARFsFbVJ|x|fpOWV{U-#Jq}njo ztMh4MA+bedXO=qJm2>szGegKgS7t2TL$Atdu(kQH7|-14eN11|LNroRboM$#=+fXD zi70e}_H`Pz9OL+_^87|*xftZv54J7`?%@V*Wx{80rFc}BZ`S1LrlVOYM>r#~MH~q; z9!j=v;cF7p{a?HGHID`R+U3{&$}YbF2@E(rsUy7Fg~it|EIWDXRSQw^RlHFk!CV-z zlPKD(M)%Ayne_DwgMfLK`nzhO4m^lwZHC{}aHmhv9|MT8y9|NC{ zY5L#30vU8`rfg8O>zIQGQa3E8h#Fg3rN%|mW|q~kqSLjaM?Y{y%<ALvXW|~PXG4KPe18qZ_luo|#R|tj z?9cDq7b0YfH8#Dm&l{YlGLwSljnCosu=wqu@HSOt4&OZY8a;{1@;<+`xnvzYeW@h* zU)Vwg3BJ-7EG{X&U~wV5bj1erVeesbgPU(mxrKMNdfxy=3#1It{DskN04BAhHFc2F zLrfE+sli&t?bA($6lAimXot&Pqof880zkMRyt8z?Q4NFP-$!u+fkfTtokZsp#V+pa zW{bfeUWca*z1&xH=2)mz|4STy#YzumBKZec2l-QD;;LTHPbXLS&96u-l~=c&wLW#F zd2f{P$ax6Qp}^~iSSwzj9de4`wVY}dlxGEDz?|72UByP=F>fik-Ij+;M>-ZEf{=q_EQc?pMubi4h zL8_4`q_hT*$rR5sI|?Z5hglc$JhuR~lobD9q5A_f0|rnCN6tl<7Wp=A?_?fYkWz{C zNMT%6wca%XsIM!51t)^n1qUOhcr%vM2uJJ)12)!C_a!ZlgyYmUTk@pn6V}XF@eW8( zwRhQVwl`r~e78kBrEn_;)Csm0d;+_Q;8xAo2n|KXq*ZcJWle*%sbxqz8C(#rJ!FqW z<2n`vq-kzl*z$Sy9}~ct9oDes1(WW30!x#HeC~1kqc(Xh{+g_Lo#QFd1NN{X$fCZR*686X8z3q;@4D z>DQtDL}8+)u|7G2HUn_0F9Un683mzdU)i{*p^-GAhWls@jqMDROVJ0~8<{w{3_1L2 zuR{3#RmsLi{-B=5t5D-rXbtsTd3CZ8rU{8biEEZG6&8Nk^2TcPi=8?>*|fZ_F_{>h zV2Hqm)04F@_fIxeH&iF#{ty1}@B|*!uWCe}#N>h1z!CtwVX$8Vk44S_PJ!{d1ewCS zTfJ+u6&>y@?+gH_7%p)SLZMYqR`djR9+VJ-3u7AnOtu{}kO1gMDKd~h&Qacvj}4XS zgtaQAtp$*`B(?|eB!D=x%$f%wDXjp+TJK)jLTC!gd-euMlX9sbkIb;5HBtRN$at9u zV;IE=fPwS2Gn-6>_jvmWtmu0H<5@*-GKU^M>pIJR_PF=ZAwK)>$Y*QJb#t$SFhA05 z#JI3c#x16brXwLXVrwgoEGo8l#Bxl-F4!Cy#1Y3v4dbb)7XH!lQ4)nNNZUnyn7qzl zj})|HJ8nh3A4>r=cO@;J=PAT7CiuWXkL`msT0$hP0u`kv)8CijI!5qsL`Q1S_ym%ouCY^l>;QX;9C^X90W7_#RBF~x-L49r7sesYd?h3#S>uV@P_ zNuyz#Aw9Z_#x-ISb3<%L^;10|@rD^Uj*2$#i>hStzHEMPH@{&jd&G;qF7k=G1(2@X z9@^NqL!(Kh%*~O4ZQkciUH@)=*XZx~jcwjp;ixT_)@VvyYkog1zuFwK0*9S8J;2=k zd3zu@W7t;q0Ks*1Rb_PbrmnhBE{V&6m3_!)9xgC5D=HNd`kx z_-L#5mnei$FVzvQCRiTmFbzXK7asBwu;F{V5a_3FyI<33?AD%-&IYIr`-O=;AAUtj zMC?bbjJ2)R`&0DePUxNn{2IjJ9MMhD0);hrCBL9B?MUynNF9h4NaDNjSbH}YJfZYubQ4{g0L0SZ_$-gOA*W;@uyVP-4pz?A zaIlrLW!~S)4cOp-EBArEkd@2*g)EbFHokJU|LE=Qna$L?Kd{9f80 z-Mg|P_J9H}K7OoQ7(Np@u~!%Y5`!DN`XMNynW7>hC_ykt6{Lpq5i|qqZzYCdux$v6 z{yhW=kNb35n5HSgax2&Vp|MP#bQykNLF6QF>( zDz1PL3@SGL=m&!6j1pV$=H8$ZA!uTiAehKkLu(6>{E$=#D!JF|W4s${Z)5HFg)1Lw zrz*=nbjl2nD`NL!iJ@R4fsBfHM~{o{QG`{F-~1W?Fti}2V*vhjKrAj zqAA7R;g~|1Yths88>PGCpByB7A-~vvkVRp;etB;_+ECj3P`%|z^?%XZpxqDD+rj@w zy$#xp_4c4l2yEc7*)$_ptK}Wxo7 z)?+FU$c`&{Y&K zmf_bm25R`0TN|ora_uz59+TCXrKU4(x%H(MX+P{AC|wha7D4QhYA_SrRje%@p^}W1 zh3K*$cr6sQrmJ88#^Od2dy?Q+fo7#iIb>vEwUJGPiPSIL-=Q)X{@2&mS3??b;*?Xb zOD3cI|CS$hS-v_o%ySaOpIwMO<*q~uIO_4gD!(h|&D3Ax%^AN={YqG`&Y~vM>;%m~5jBiVMtp z_&1t3S79+ZkRyC4BihR|F^AE`*zGqWNCe&C{Z)JXM#M_e>rTIMho;a{qcVRLV?_BY z-}W2Y1Jf&Xil*uQig*3`_YfPu2#W!&l|+q&@?QhQ3?{q0HC;NVWA3y$%%O*?+0$Ur za5M;6F&NV}ac3=Ca5*$nScDClWvJ7Go$gmj>a7jlztQp2Sbu93x+YLcg870c)^P9- zgb;YRj@~K82r?O16}%c8c{L0OOkTBzN$!QGL7Fja111{+)QE)(jyeP@hGHQIxCZuZ z!{F2@9J*aA^q(EK3gU3iRa(k`1S;VV)}DL9Sn-WCVsxXBMq!Xv@H0Z2Mk*ZzKv6`} zej9)q+jjr3)_*w8EHi6I?2=iNy-Qd=+v7|{wz9B+PWFCM5VI-3kaV81<-&iplLZS3s_nU?`7O@?k|SFJ(D_%t(f3!p z;@7_#t^x5H7OM6N6E1e;>wd!36*Z8$#vp=Sw{^G@OBewuMc9m2B-5JN^1y;8uC!3p&X4-mm++U-P!Vibw)8gkA^& ze$Q{*4%zEfdN3u+%&wQd#&dmr0@gGR-3UH6oy|)5wgs|D;BX4o2IPYx#^BQGV=j)jvEv) z{A2R^ex$k{2m$;)i&D=f2e(7n0X>J2ajO48a)#MtNOYTHlkrf~7onk%9BeGhpy&M6 zgEstLu}jMqam^A*SFa)+#a*(elY$^rQi*tR=W+gxbu>%4MxFL90~yc@3qQ;pjURD7 zdsCu8g+8Bw57%>>_Bq3%B>k)@;sv^+Py8PQfXOiib`^OLWYC>9cmt}h>=y5Min=p+ zBZ8}ESH#OS_tt}2D(!+pz#c|{G@omzq~h=aTWaoYfaoV)Mh_880Ug=LQrH%3Er8sm zR2eCoYYGlG1(}rD?!mAiacgedl%Q4OALDBUlXr$D2&ysmA{olGS?o^lN8;)zoNND5 z;9yxQ_zKp?v3p>`*gc{TMQWveA`!1D@k}M{Wk2?I>JdGP^3;|cea<@rEpRH^w+;OK zPhxy1Pw|7*kX!^P5)Y@t04M}tb!3|2Ib$GHFfNSVM=pWv(**A7rrk}C`+Fz;#kA3d zUlI%F(2`Ocw;Acsx3N*L1$~=i3e;Bef;mV^hrK%Gc;n2*=rCW5iy&lh`dX6J@w5$! zLt^pYIf^^AaiW*9UJ$)P-v%pe6sPU9Igs!en(qwjM_erOUR^btgp4W6MC7aK(imYx z?0D^}%Ha;luZm+yGoK2rNli&3`<0z#Pbrxnc8l9EzyX+RQ|?i3wy3GV zy3sbbq{M+;@?aQE0a4sE3m;L?rD-ZJHs1v1uudmTEyTt0aqriZHNpDN07Yq=EcD&b z5f_v`AlVzf_z&+p*cX~=b$?<;uvZyp2fH*_-Xd(@3euc>G3$~srH3&ResoXI!NVmb zrQ1tNH^!cygXh05DeXnL7^lk)DHe;%AmSl{h%a-lr3x^zfMHgJkHsoJ4M?ObuPOHI zyi3MpF#Sa%5(s87jEu0tF}>M%%!8`tv2ZCHf%Gsuf;0d#Y)GPRd9q>o@xhKiaU%b8we03 z68rYiNM)B8Fkq$V*FJDu>0(FYTi)XRhvajpddIKqK>r^X`c(R8&lT*~R{C@9i-{TS zTcUx$K> z7pC@>HOM%>0dN^(yCi8xa}=x*-kaSZ1ukX7DcWOp#BkL|}U# zY}4g)<-)A}&gnDe(D_*wTFF}x_6b!k-2Ua4@VGN9iw$K@&)kPZJKg-EzCMW0*9w4AqIOcz@5VxUvzv2~J$qtp6hebLl`dwd#b}Qt zW=}e-MiW>rGK+V4Gf8^kPGMH%3jFfbveycNcr&a1my z8HnvKW3vLW#c)RukCdt$3~f{4?y^4r3Gor115Jq7nv?9P+AGw!1VReC5rJOyAu9X5lsYpq3q^h8NOH`98=HejF*nijot*#?+T!U#ao5|h z+>uQZdmn5P!xAz*i!n99=L(Pacn_)RtB83eFq!wp*bIZ17RM=1z=&G>v1uF56G>ae z;t^6FJ~onFK)y!#%tCQu#A$$9p_769di{FBsPV)V!4eOCfecm}ET(i3!1Y`gcbYLj zBv6UXtesKndsIKUF_{i0lv^?z#-iVq9pOJAzAqDmQ8G28+*nh@g*nopsR8vg%>)ma=$vJYN?<#b z6}SiS9XJh{!XLMKEwL80rt98abB>o-Q}F!N`@Fn0V9Pe)qWh+Tm#>ELJijzp(gBME zPn`UgukJ$%%_k`2eXe4kt`w5m_V&`fqh%$1P9k`ZR>%Z*|xqWf-{k=KJ3+p zz^MF0)ec;$A|PRci`~aKZxOpiPOG4t)MCm7`>|lrfHo8Oq)nhP7 z1MT*O|GY1|8`k$D&fz@_^z4z0KX@)!Urs_VobC7;43&22&~shQ!8=KA=^tlCjJ|yhu66 z2SZh+UJP_=O)VDDjF9zcQO#MA&MWMMc|=R(tWv>bV{B?IMoZj#LNhO8iHpvSNL*W6 z-ISbBQ;TSQ3^AA}Ni3y5)_@tLv6G)zQd*N$sL*svGdOU`h2gjf;{OpZ)RElT)rcamv)|K*v|F zyz)x?tZZCf5BvYC@GpoZ>uXfJ8fnTdo>TTsZv+9L_+s2%7T#Wl+Xdn60^H6IZ|CFo z^6>U@+%61n7vgqNc)JL) z<920uyArpn!rN82Z3=Ij<|wGp#)Z-eRVQ>TSUm^ZcbUe=+;qwg1RXmGLC40KliR$? zDAQm|f^{oE+OhCcJ_zN+rs}z?L&q?sVU4GcaZXdP%6cXqJ@9s2sYZB4lcYu=VmyI& zNPtc=iV}SZXHb#Zb~nz#Nu8H7Izp1^gsmm+*b6?7lg?}^GoH!q}( z05#>DGESf*^cy300R^Vy>8sxriyh6@jn+kCM+dte293LQhCYZylNf6EyCG*_d1aT-Aj9lEH9+8T>*sPZ|l+lJFs_=R+y24D^ z5^9P7WuV%O3g)NuPP!?)Zgw|ea3mv)*BVy=h4u2p`IpoyhE4EJ6LQyZ(AKmN zOV1D|2XDt!^Befsi}8qc9C1(UH~C_wgIMUw^BYka+MvyeHPq0x)h%`-VQ0EXLLh8M z{v-QOfSkYSeN<#j%=5{^;rjJz1vD3C2&`4z{yy(Fe!-bCj{1L|34uy82`1w6Aickk zXnA_Km0tlBgYTpO=WgR>QZ@pZ{}^_KU)yDZx@c|}ToPGwy|-OFTvfUe>~%r+I2~AI zqxS$g(XB?16_%maB&!T-#d(MwMjz#T3Okzc#^DFhd$Zqo3)&v)*WK*b+)_H(eJQI> zzwYyX%@@q_5`_G^fA?!Xr%QV+)zA0(P2Z9gb|^5McyIz?`NJ+ggC6;gs+Ox3}|> zbo0W9l=z_2yp~BH-_JBpiA-~<(dbtnf^pqHyc(YfSK|V7 z%CB1IS3V3v*ev{a{KoI%e3ys8o)a?o_=B!p@`H5Wn<{H>5l(C{&;rLWP2G3=8uUnE zCjO4q0F%HdAcA3Zx?0T)kqrl+anA<{``hfXpcYR306SM~pO5Z^mV7$TTTDMMDFo34cz$8G_et~aH*0tqzMFCq?|Cv# z%)rSJZ~!6{tX(HrJA*D!K)I`D*{|?~BOp7^EaVs?XPS41V`|ENfsZekQ}oP2dx}LO zPO-z%M$7#N^i22$BaBHe{8iuZ8}Brg8CbVXW4@zJ!#$1Vgni6<5pPDEbFCkZ3b{z0cDoJgKEPF|vQ zph>a|musYvh113@&%=#^-LeM2v86D7{)L#7zCIjx{Jp8;B3f%3D=SG3ABaTtwZWJOS6{7usggu#p<(!U*4T1y+r7VYO;X_3uca`1i?T~eatE8+t zXHet?N9oA80iEx^LNSR{=!v#N1O$+ejgVjua>s%ZF+KcNDh3(Y$&Q-q+yAY00<3B z1nQDzW)ty0qA}%M5e5LCEt>WrjXh*aBlb}4(o{#BkVHm%54BSt19{O+;`w+Z9AKc^kVkTaox!?tw!xDp~5X9b%7`4h7U%Uec ztRyTK=u?ggF!=lhI~1)n_a=jAw!H<6WHpFHT>HW(?s`r-(}L zJoj3y&ny~zMQ*|W;Hyu3^-oodr6>Dq0mR?X-DKqiEuV#|o-cK%y?qX>yOeJVSPSLf zZSr+k8qwlF6vqP=(b~e0V9G968xX{{fP1RW$%__`u3-QU_E5-JS!8;6wum7Jiv-9k2iinD8%rF?7iBTeomyX?kkLh!-) zroX|i<*YOB(g;eUTyuHNH4D{%lVVwAR}WoL$!9hECC zuuK(}?Y1IbyvXnY-{9MyiK% zUyf-JY_}JV&Jw(vCM&=OVibzNbluk>?d8AeejzDrL*Q}+FV7i{8ITEfhXNG?zIS`$ zc#3arc?m%XyL;T1-r*To@F!|C>0u{%zM=kMOH=jeH=fjNnzM51kFW^;k_A2PlC97 zdX$uuR*C8BgP?bf&MJ6vIE;7gTYyBVFF6&Tf%!^!%~&{H^89}71%+tM`+t=OUk!#j zKG3pvZ@R{~dIn*5N;j93c9)c{k2GqZuu*%>M*mV$x~HV{ZfW$&lG44n&NcEWpa~dD zj%1x#aGV1=MjRYJpK=Z6|js`})O$t6%=AvyK(`szA_xoTLZo~h}1i#z6id@-3Y zT+ROYVsnt@xBL{w3Eb4$bwgMzg)B~aih?o+v8a-jIO@#tqJG_xxIZ@6C%uNRDF|E+@KeggtAW*Bxt} zD1WsfCpqBp?Y8h&UWnVDCgU1W~kj zM8v2Bf{2aQ0oz*z10;|dl90iO)ku4LJKWmo_SxIl*JrJ*vvn45Y~>i+f~d8{PItA^ z8mgvP<{^ZW_y2$2T6^!41hwsbzgtVr-fOSD_8PwRt#AH#L%9Zq168vPQisiF(Rx3X z?cqm|lWfpFy-%;fb7ljG5>MHP4fABrAc%%#Vit7-UPT{+MC<#b=Ge?Wbhc&gz^7>H# z3cO)mJb9nn-j(QZI+w2oPm0lNl$i~>2Ax&Wx=$*~y+|%}o0k{B0>x(TF1;dh4u(#M zhV~Yd$NU_)!9K{(K~(%s-4np`p~@Kuh(Cl&f`YiX$9fZ6X87|Ou+eL)m(=)e4OW3Y z%(FrCyqQsEzJDYoA6b42RAB%Ci`0jQAp??E3wn@VMzDbK;~;0mfS5o28QF8B`?6E# z3H*b_F&0N^R#bq@IPY?a+XroaeRV5j5~ui0&5cX2SsehuN~52+0Wk?HM_L5)b(jg_ zD2)USHS7|S2oo*Rxc%xBJ3XvE~{D6*c=rMgV})C z6hQw!u}S>@Z%}0%QKv9cW1+h!s-~+*w1LK2@gYc+P*Z>nO>vLdhI96~$lT>%Y;QH~ zUlBpE=vNXq;7H*{BK8VNEkYC-F_9g2A+Q-GaPx%}vdK~On}Rqxew7*OCr!gfQ~NT` zWkmgc70EqJ$7|H(o@MyBbd=z3k*vVp1%Z?pN5o2ByP`@zpu z-9dGZO*@(WlIeJEtB-F!k8k={@a}wfSIN84?hb+7pOfCPCXPznt#;2KBzR83+djWF z@d(G^?s6U}9h2Q-?IUJbCRYM-S>NiaADc>vkF~PfRJ~v-*Fzsw3tON_6-7YAY}Z|D zs?w(NMI3GZ9MtVJl`r9P24dbtbp`UP?l6_#XSMOc>;cd2G?hQ#vz%lLNIL0H__~&# zNg_5Z3n2qj8HWsUWN|B!zGH`E3wQT&bjyuE6wlDgEluec_D7$@ToA_elkHJCKI6(I zv8k?lyqV-Yc2N2vz0B&Bn__|NtS5G`;`b+?;K<^0XWBk%TK^U9+u_*rJIwRHSl_iP z7@J+T*5=lF^L4U91Db{Fe-k;)IORZDNhx;S^0U>^aU~|x0?mu zD_RG4Qg5zB1!(lL;a*dFA6n++{igN-Czt-BY5kH}`R}Ib z%kq(mdmwi+RbMofU)nYcz+$TY-Bf-VVosS4DL;G%@^rvLY7gwd51|mV9iST5bs(C{ zcn3IA+kwxU$}fZ+c>ft-OnC-YUU;in@Rdz(!fMO&h9MB_2;lUm_vY*!f`3hWU)TeW z=m@9?yr$}>rt)X#U1{-vXCbKIF${d4-iuWuaEL-*r;1OY52fngO_+b-`!)pCk1i)) z9S1CK*Al&zqJay*{oK@UKp*-69L@Va49K|%r`RaN z+(sFx&>sf5e#q25EX_xt#v>4zcFdSD!CdGK&hxfCl7%6u>~k>4NFcB=HJ$e5FhWB}(kCp( zqZ`|F+`9LCh%0Z01;pfb*EIGm`{&A=qA$s0TdbTsUq4v_m*~IaiSZG_@{XlB=+PT?~|Eo$Ap_ z%1+ugze2@WZdO68QcK0k%Cq8?sTb*GR9jaQY~4w+A5=b&8Rj1=gO^*u0pQIgEQd?1 zn!E?!Io7)z1V0s$)>yZCNo(EpHH;|UQq$1tB6k-cG*>fBc_+46{@p5w5=X370I_Q4 z@gNNpa0n|mEFLTTbZD%p_JsbiMSq(Ik)i~;$9fib&*Q3IfQ0a30`GeqC(^bSAc5|1 zF`eov_aX5}^!4G?)Ep=`CBUKoU+&CF33^pC@C&{ zC)f|HwL#HD%Cc}%cOJ~oH)ejG`Ellc{P&s6B3x_Li0k3EMD-UMAoEU_F8$~Xz{ORB*3UUeaZ+NGAwN1YM zuXZVZn`>%)zXpOw-)~*jRO7E`Tv?844(ia=2uvWC1unTTDO?f$El3_(F4Q0cgl2^^Gkxe$A5QjReYdwAg&gv_EZy z4xwK18PobKmgj66n@c2;9hoTzq$rm-%c%>cPQQ>D$k!A?>NV{dYN?+!9Y>kFkDdvW z;Hqa#<+F%KXKIh8i3L`Sm!^%4yN3)^XCFReYM(W2N1E0#8o$o8J!M*-rezK^w9kk< z_StsRaim!@#z!>4XUv*sH#`g#7mc0$Y5Jh_6n#)SN;-vVqcc;1cS=m=*+dYGw2 z9JeEs0JP=c)=+Q_Bnf#6#sJtI@%d&we4UD{$)<8$Q~Js6@>n!i#NP<>`k@;(4NsZc zr&XzY2Uq+d)Bdp94ZHQFMfk&OHtd3lH7`3d6W70uFli!>a)X(QaaqZ<=+C4k`hxK; zJOmG*tifP}Fl@HMl=!#s`8!Sf4@~M&&!ir~5p+KkGY_y=_nP+mOzLjj-h+P+LLT}f zx?}?eA2+Q}nABq)D$y_zKX;h+@0)2O2yjT2r(K>3Qw_N+Kl}NqImsGefU`mOZW=OF zi)ojOtXJq69=M)$+-ug{M>BU?kg63g@J+`ZX3h8gk*4F3jL&%Tk4#PeyQ^})X??(b zI{B~K^ukR?4>`*7{Gg<4@|06QzIe&f<#qLqO)YIVY})&a-M`&^_1*_}-?_VV_qn@2 zf`4Q8etY*%caPisy<+wKQUDvY*c0O0U(*waqa^~1wfb;*lM+Lc=DBd z@%8)U>!}~&@-AN51>olkz=9zv93l|?(5$(ubR5F^Bf=(mXYEg-w~thZalmPzYmU< zO1OJ)JFXDJP`Wf;r)bbFbtlITK7k1^QEh8Y>pHXYDbobJ_@G&U?A92m@K~nmDN~8k zwPwLOgsL3P6NkoN3ZYM;$7{v`n>@B*|DJMWCV9}T`4Q}QQcq6jgXFyOVYUqZ6>H6! zb!N>|X3f*UovA0!ks2o>NnG^Sxl%T!d=$&>{?SaI70+j(X?W7qu7NfA8JH3fUr(CK zHQX!UORRyvse0U0K4Ht8Q&Bj@0#GH`5oYBbrs?}I^Z@?W?F2y&%@hv@T9tR0hR03q z6QH>GgCm*aEd_GtEnxJKWbxsf(0Ssv$MzRHc&Lde$idGe`1dIO-6rFK z0104hcJV9(16_-ZNYNQ%U2?-%1nLHsF4);0qfHOn|GP07gxaIU z&AP0N7dAh8;wZ1^_Bk+$lZd@Ln9hds8KR)*WyC>%sSxhNWWKQ>LASjYlGQ|xSM;Y? zLp0kN5%(wFk-Skx>gpGIMK8U7{fo-SU;$1NLg!jb9fd|et z4NsWbC#i@9*8_~eJ4&EI?u;@WPrQ_8+Ml3B!IMdd8Ddp0bwJ;+7O=Gj|JIw@G=6?! zYG1(5^QQL4_<7dUK8GKxyx}Bv+GcR+;&F0{52PpbmhHyE?v;hbRmI-fKvHgL9rVen zlwCMy+x&~>Q0tAWii_qHLXb@pAE7evBm13&VG8(#o5v?Mi>okM%gvp_ZR(b>i<=#@ zI6bAe>^*d6yL1Ov729VY9?JfgjdU;oQ2v{t%nGQofe~?FMrC;(a4P?VzP}}X$5q8! zvy*LQJt*pxB3xDUIzo(XQq`dxtvhaAB6c^TJA*AereKt_C0SPHVg7Su{&7{2Gbed$ z*-#V>lOkMI44ae8BTv;2RSBxw?Lt5cuimSv<%M%Z5QCFN2`39f{=6gOm5#^^D;<^@ zIeloR2o#xp$qFg0wHEOBFp)?M!7p{@BK{0bxv049ie!H{v9{zVPN0Q0m5A290mLw+ z3S9z7!rgObfKS3i>f)6OQ(SbJ4kZ9dQmw*mIys)HEHF*T1~I}kx%jCXJ{6fWK;Dh? zyxhDY!-kI-SvYER(UJd=IW2QS=Cwnc4*liOFAsg~zu={-cDvq0j#iE)v3xk9RgOXDb;dVK6A&}S~T_iNfT0a~il9W$B zw&AWmfm(f2(Fw9?h3aFwDkzG_Ob}$aIfBZt7SVNS6tTkP+!~J^+V2a;xgsJ{yuZ1V z(Jp=;e;0WZ5ZzVw9c)cR?qQ)`kR&(-XODc66(i$Z7ko{zo3lb0>5R0KKf`Q_5Qwsc z0>uC8$$?RvZI{cg*I)yW1;;^&OGljxAMXYt|z#lu+KJfL_ai)#lIk6>~2fZ`)qeD#3ht66;Bfa3F5 zeDZ+elUZCmptzXDH~8m4H!7aY4yzn*T5?QtF2aglN>LU#1hJhGYepP$@tJyIWwH+5 z1{ImbCFYO@(9 zd{aTf2IiWuuC?IK7;ZXo)M|D5apG#dgTevW7#1B8waiT0Ppr;eohE z2rPe)&%(ouQ2*UsMiSKe@TDig!Y~37g`j7TD<}q@vVIgWv;srhhs`2MvlI(Xj=HJG zDTT@%5`7!N6L}~}@<}>gxWlApPx1;00U$?K=*Gafu&6RF!MJ~eKFUc>Fb%s+?H=qF z)}G9%<-Iy~q`$B;k;tA(aJc)?=K~=AUcT9+Hi6vZGMcsxrgfuf*kEcmDjkSZ?ParI zlM6-xSmQHTkaSM2oD3rneYz$nr!y_QcF<8F7dN~#(zI_NxwtV2*-+S^f2!ce4W@FV zT1J7>r**Ux2;PGi{1ddGrl(8K9zd{t2*jonO!3~SOeDHJPRPD*E3Vf{+`6R{GZEJl z22m1PQGp91qd9l@VvI)Jfo_4Kw?^V&E)!e$!PAB2&JOO$s*Fl#K zzAdE2fX#Jazkq^!og08s4k)U~L1P0D*SHaoL~%^o4lIal06|9K1|X>h2oO&_A)1wn zW=A0xAwi7|Aj#OU684r~8Vvkx$oIAS`F`L}N*#D+0QhU~9o%!0!X@tq{^3-LDRjSB zsa8j3^>TxNKewL)e~!b^REZoQS(2_6)GxqY zx%dp>xi5J?#Sn|Kg3}H795^91CtGs>@Mbr+VIb@xF0zoDQ2t9tI=;WCq~ngOG_BX5 z*@S=w#IOjw*8jzf=$T?|R z+DT85kH&-2?I4*Iea>Zn$XeaO$M=Ds0xHW&3i|)?Q~&6wdU7BpP~Q5Ppju7iEluR> z6m$jiCUnhssPdA|vIi@(Jw{T8;D<&(2&5o){Q1Wv4v!oqfT`T{=lYOdA_30Q}#fA-?*h3q@9dz&Afp2|ji(nswwr3h@g05AJ0{USD^p zZ0Q^X+R5Ekv2>2=Sco|j_bx^`KRz_LeR1*9IZA<+ep1XtTn14ea&Z!wdInp9)3VxC zWC_Wtl|r>=F|D*O8-ou<#a~YUDFfS*bb$PCa;#k#c5y01fpEl}l(>B{X*7Ql=BDVP zm`jr~cdm-Mw$T(~2pUX6VJq#8#-Sw+SgB(n)W>XqtF}}sHdgKOp}Cd}etgJS$L7G) z^id%sjrf(>)q#mM)Ixb%k647{%Uivxh7R4-lF*X@Z}JS3@LI4`b;eyZG1+St?1K{j zek$*wo|0u2GA#9tlGL@9lPM`tPMR2!lP00Pv|mh_!R!UQ&4N8+7r@Xzzgdo38~w|> z3emr|Kj!C^Cz1&)bVk-mA7akNh&fMq>uLccfWAiKZ(r$9{LO$`K1np*eZJhovf>yU zE$oNEg#xJ3X%`B!E4UP(epsO6vGE!N@US76;$K#?qOldq`5WqB3e@6_wTgc6ixT?) zahRaW-|6wiTdLHv(E|M?jrH|4urO+DXz^Fo)Ymt*`xEQiU?~7YfqK{$9pSCOCz@Az zxn5lpRTpnbj&<2*um)km__s`JSEATPM`+t>TK{5F??D~=x4xl$rfIur+F_b@nx-DAciJV`MhT!|GFxd<)qs@+YP zKV4Fil#slZHh7%E0*K8K9uqE-W}b)-PYuqT08)r&idp!USwKhR<;45$^0fm7OUK1q^4L=15sgow@4jnVyRmiE;`I$`Y5xH0gt7n%dDhkto?g%?(W1m6k*CH|J}Nes#+C7?^|27><@)n$r)F~(Da z+sh9FCD#uEB@qG<#4MerbCp6ZpuXr6Vz&9p!m)_&0j50OsZ>YsDc2?d+{yw%*Lk6e z5pVqh%*lI50wP20c+WhPfi2_T%tL+4Zr<8=$xZMWsk?SkV%5d@FRXfK(G4XJfgF3! zH2*E(gLoyaXNgz14em6xyD(eZk;5JMH-lXU(11PPrqZF3+489Jo6$N^SwVS+UilCm zX7%}Iy!alD>3Cr~>|qcoAgin?-M9<0b9TpjeEuKc$1pkEs#J% z9zlRq6i)bmFzB`3hQROd_LbGnL0phh5r$Rl14uBgIT)xTNtY!$CfM84Ne1CmeAl#h z-oW|zE+ll_E+^j`ruEm#m8+heAr4K)L4-_!ry2xgl4+F=y_zNBvEXL0ScJQc z6*0X}<$Hq1No645${VKk*OL-W=SlEH4*3NPS-(PBPSx6K-OVsGUFH84yh33#6@eN| z(Pp-#l^LaIVB%aZmf+hsOjRWdnoPWf$>d7Nfj3O$uhrr!mJsMSruDbLuhVTpAghtb z8T>=b6x#H%E~KhhjA6}&P>7a>;4Z5Gi6sa@bOb=BTv{2^@EcS6TRqx@`umNk{4H$j zq?Y7QgQLBEhr}Qp;|bloTrE03X_8@Qeq$E=R{W{M`0)LPuU{fn(|?-5S|TJyBpu+a z0A$chn;J&>I)UG>1oZ;aeSH9bz!)F(_D_u{3>>A`@FJyIx zJfNvOja)?D1b`z5>cWEpw}K#}5syMpgT&C0YWy#%IjPVNolCyi*jrhexABc+&c<)y z-Z2ClGc5fBN^d7mpeQ%B8hj1j&&Sc|`xcen72HI0Nrpyn3RZ*tN*)Vc%9zBb`xk@f zBx>N&h%qv6FjcTL#>zr$lIp!3!&?mIP>)L>_NnLVrBVrtMnV?~VCP07( z+LcFxq--DBHwc$N1|XJsSLn{6q&qe1A_eiuB9W0wb%E-Ii=zU*KR&vZ_w$r)B@Puq zzJ5B(#vd!2=|gn;MY#o6Vf&n;VM44>6J!?|5*bA&<;Cl>1VO-<$&>BkJ`~(dJqf3+ zh;s9D<9H;TF)M%UoIk5*`5Xw<4vD$fjt~Y?nUSKqO6f*Y{{}t0Ai4eBt(gQE4_P$& zh`cy^EJmhcv8)H{6GRIVFaxl}^rND;qr3>fHj+ki3lTNRB|O7X$Sm#23pM>-kPZtnhM*R`sW&28iqN0`ye) zt84l;g>ocBP5VyMPSvpJEA%u3Yg;A4k%3D z#VoZzEgSv~My^a4DPcZ}%(UH9OuCnn7nJA24Dobmwd@AK!6%G1wLVFKf6=wvymkMg zo3{3W*W7EG_aRc;w7qO+AMG^>;o(cu;b@`#v0u`|Rt1M>bb1bqfurHr{HHd{SNi!K z?im5k=0cHk{9RMo4Pi-+m3tJcA^`$8vad(!VPwyo+k#odkwG~qBZLyymgZ@I8_r5X zSrJ<_5p+s~oP}Co8RQLnv zB3bhAZH?vLcb9cpK>1Oyl8}#pUGmnZoW0n((9|%$rplezI!UPPLHg&|Rz-tI8fnwL zd7B3V;K7@8eG>BO;cqS~_r7x#n)>@18LVGt*p`JU$(DWmog+Nc^->kQ+9XEr zB5(C!-b4f z3SZo*Mp^b%oQ%@198kk~03EjU>nHA0943lV>xX1%wg`uzJu$6Ng34_sk)RPxjoGK9 zfkRW8aKyfpg{BHkP4$@OgG5u-4g+A!_jD%^4G~RAf2_Bx^90}_ zrD!TQU4!tJViIciN;vL&Fkbq`&@)FH&du!}18S(-;(n^P%*ws69A!W}D#>+PHa(s* zm0u>_Ry3KMg22f1+%i>ES3#I+ZnT}n?O3yzx8iKZkJAVv!zY+vgmsYdSD!d3Lr zD$0xLdr0x1B3X(trX^#V`;OOIn^xv^+o-zoJ=Kp@&Cnn#_R-no7jx6g4#;|~ z$gXOqE8cH49^Pyg4l@h#H)9&6^X0>L$(}}PaFf-m{|~V6sehpRIq*h0?1Ub^_vvHd zF`-^`4$@Au1=5->h*uM{m035)ctJ@E%^;e+Jzc=?r4`K9sl zny7qwynJa??#Ih#N98b5B?Xl{#yyXd0geRR3t_)C6%mY+fM5uS2wSTtK?{yZItf)Q zlsm(E6CVdr$8AD}WzE8|s%-%K2QhglZH1*ewuUb?n|i|12w`9D`Ud zrF!76c(BTe1Td+}Xt@<GO;Hx0O$oasmk{bO1|}yCf8(Ec{o4>S zumPQGu>%TQ5a+iZ({xbv-=!ayuM2_0@Mq+U$C}EXra_ABc(dy!zDM6u5h4g30UaD= zTgf}LEd-K^f7(S^lh3%A{d3Cs0~jYCYyL zeVks&aB)s{XwI^wi%W`^E>7N5){Kkh#p4s@PXzz2B00y{blg?`yCQU!r#ucqe$D zXly&V84(Lx=+GZm$U{ndly_lcODjX``(({+n8-YDaZ5A!g4QKXUNY{t-&Ebw(!SJZ z;y($*$4t!vi-OIp)|ByB#Y~xq1mNV%{bBe=NO4M3XsCf9MJ%ZxH@OP2dsnRkXOoj$ zZ>strYhZFiNEx`*5&Ho+@HMgj-;bd5VW@emQEqxQO#cZpM8sBMZ=r~1M$7@xx*}9j z;f}?m1Uz&w+)p36e$IGIr1@v6CyB1(IvJQ$?$6}2OA}TBhA--(7{T!E`P0l?(Gjqi4=u>;vOV-5a51NKP4N3zj#vJ>C?KeaOZWU%xP) zNFtAkhOdGZQ*Y@}gLOioj;3ykjP%r`z!XTN6Pgpj<-h}04ElrMRdFn&71?LUPjWrO zuf(NMx+2pDsidS6Q;Y#Q>wF7zdVpBE;f`Ph1?x1VjR`p9K#7=2kpsw~?*uj4lz!?> zYj*hQ$NVW)_4HJb!->X*BF`msgk14J$_HirrfJ`jgoJ}nLB{9>ao?lCn>@ta$*j+* zK!{oQylI-Y$e}*WROaU+Nv_1aPhiINHKH1bdU5Ov8zdUX+k;l>n{YT1YbI4YA@7@o zTg`&M;B+G$qjWxRU?$LoAUX^WN9wZf+Uphr4bO)W4xiGVK)(*l0f*Q4M9rq&G__mQ zT_?lzBY~Z3J1fOo7L{#*r?t!kng8TT+djEvksEvQpBI(=8IR*bX1)l>00nsA^V`9UnYL_!+&2QVU{Z-lG%r@R&?uTFy6MKF}HAR(D>A zN9$8mSBJs1%88wpNd70(5UWA8^OOl-t^_{gRNFS;9mwQklv`43b_~y$opFC@ypWvE zq-;unJQtisFaXHTONDU_ucq8*e5MzN8 zt6{Ba@n~t*81f>l!*0DV;acG!9t{4|4PtoFy#f4y_6TF9%-6Dn(=I+9^pdLQV22ky z(Z60#4#f7#Wrcy7gh|sft9h}ee{w8<(z8rKcLD(hzn2GbP_JnQS45~n_>jx>3hP2f zln#R=&)hP>@RG0z(v$lNo3J>1F_~R6g}lhUxzy|@e_%D~PFEr=!l3xH1Xg-GT((7b zGELt{7s?Vpad;_A;#zuiV*P+ZMnB1U(WG(%SyKfW;6gLvNEF$7bPm_qzAQaDzMJ|*|;>Dl{cQ%MhuwzkjsMggnJx#V$ zHa`+Df(*8}Pf!l2W2iC2lncEo!mw<%M;DT%W0+Z!zhPG|i;+?*5NFA(yjs{=LS@I= z8IyQbCIMfw?If>}vp~LQj|xOe_&u7Nj&@@YqnDW@1gmd9v>21N=*7<~1#bHx@vImU6cl3_hvWSd@v!ij&ft~-oS6-?>NMwJocyhR=qL8v0l;h)^eQfE zp;MU5W0p@`ox(XAWg}I&DD?PgjS>Fw&ih&&@>xx&c zQoZcSx!dNioy*82xT;t?7sxePVWSbSIc5~>q2w1Gs zWAp4mSjR|2jQ%LpEW$p18Y!EO3`Q1rmEE$a3nu>iHJXTQVU;S%Jdqqlc*oT5N>UfW zUI_7sXAP7mDq;MIOF^P7yEril6k6H6m6$n4@c^LRf#oU$rw=UhT@g5vN(u*soC5~? zD3?x;;7>osTptcvZB|B+_1@xE)+(HB2tgb#1vtWn<4~7yr_Xu`I!f#~bw|aHkM9r( zFtGp17a` z#3pLN&cO}l7VJEXm7O}c%Mw{@I+}5DiD3Vh%0XvfQwK~513EF4Qvs3UQFF@s+?FP@Otr_e%&wU=pMZIT(1o@Fa%iB*o$8Hrqk*(C*nbN6>= zSsGVy3Q1bTemZe)a0%v1Y!N_dXWe55slC{G)SB*UVQ)z=t0TOEy>IV4u=A|l&AW%~ z9k#b*k993tqc+cJyj1R9>R7w}tlcyI_eFCHkKT6is+Z0@<9}ZSl<2;@b(nuta87u; zhZT3Mn|gWx8Lf6L>&C#8m9CTqg%9qE+J3>>4XwKSsvAn~eyntU^vF^mNHj4@ zpi^Fjb%lT8fI4suIa21p))@v*th0BysK)8f?2-m_VbH)S(F&w;Dc8M({OSxrBIHA1 zNb$qq7qTlc5A)nSbRlB8v$F<97mZ-=fao`UgxbyUlFnJL}S*t(N?Y^DTh1~Q@aDd)^ zlu7OIM42YovI7ZFNC-YsI)WrQLqtx^DVY|pAk;Bn(^e=LyaE8zR>+kK>gWPT@te2y zikpmCN%yqQ1T_hQw%#uc{!Y`n%T#SQmGS~T5moCDQUhk;PP1Sau$YZcuP<;&HkkBa z6+{{&!?s5~VsW{4E+z*^iyO8inEAt0G#%T&@CEQ=d}%V=oap0&T}BHtJG}`zy^zN6 zVaML{+vAUO`akxw9_RIcJUZ*~u>OySWj!9<|8ZW{W5567oUF&^_kWx~M%kUTGutK1 zj0_McHk`uPQs5l3GjO;HG-Z0<7GiVgK=cBgLpR?k=m9yW;eB4@pL4j+##(i7-Q2Gg zP`_EN79fd??du1DO-Nec^H$kBIDGZ*26hkRMp>WD?SGGq7q%Oa1H`K~MY9bAw;tQv z+B8rxm1Xu(HQH1n1`mTOSUH5MwNkxcnaQ?bfKIREVh=OcF-Sl@#i+=Af(mzWE@_|0 zCt|D(Cqwxi%`7)|XDR|(*B49>rwU86yX}l2bpe*ZB3hgfrk-tk+O$3c-t=tX3pfhe z%(v(VDMl3l@(My>z7LDFsFIcL@?9|ge0MtcwkUXoiW?h-6kr{3L=5YI@y)JdI$qhj z{gRDmZ#)}}{>pWx=_#}DRZv$gKQYZOe0uBor9*Jg!BGfS58?bTm96;D-K>&x*edU#%0sLIIl^H^v=>#@ zL|b2GzNkJMIKC*BSdjyJB*9+-9!bP>~^;gKk)|twu!09||TAxcCwc0d1 zZEBxU>x1b=UrcFG=q?QptG*wTV%4cvuf)srHXncasT|hgmC&Ja0&zq(nYkwh*BkbbDjrvrc zfLU)&a@`;=K5LquGgZ%<${&~Kpwjg6JoAu@XmW(iU@Z2AS@3JO3v`;tK?k;XHM~2K zizxj{MgpErDbKZU2NAZwreSxPMMd86_)eldSzkU3AFM4eu&*F@ru~ZDFF?Bq0IwKMY9$Yuj3ofkgO!vHlcma?!o0 zkjKvlN(3mTZ*+X})4^`>TzR6j$l}-Af^SgLjw&Lh5xwpYf_tgj((?ek;*_8W=ZOU6 zAXz+KBD%`0J>|Ns^Sl}@b?i24_H4Koj*Su-jiJAImx3xH1u?di#`Pe0C?631mLIrL zJ|MUD12Ad%*GMmfE?p%DnFuYS15|_$7&5ICQv=$_>SXkKGz5{rtN8`aWCqnF!<&9; zyQ;6iBm7ZPs#QgH^XWT>K==~I-%^>Do!MuCGwJnYr^dSR?>B1>l-^w51^|bAAHk@*=V5_|2EUz`Ua^bNi@)$`{YO&UNcYq}Vvb-WVTCQg)LpAP z6X@O_6Q#CsiZ1wsP?qJUj!h*WXLm%|^iUsc@x=GDOsJfYOra-A9vq=3ToLoBl|w?} z+(Pwoto5voTu%dpYr3Tef4e}P&@{(6Tbs7mP3tdB+i&QT3lY*ss5iUiK+J0uo0czp zA@~om_)@#A&j$~1-E6a=h%NQml2lJg>Q2mr_*Zo7wfX6Ayh%aoIfC&Xcv?66Pa-)(sU^ z{~T7d@u#vVWUZbj)gg)e0~FnV^n#1Rjv_(_QrT6&*VA;)%LFM%Uj ztvycAO7f-e1ivN(!99i0o0~qV#|AopW(TZ+Gc)UWel6pDGHSW0dfin1lA^KE)*IUj z?UP@}5{dl;^nB_~?l^$*JUIUpWmivMzc;(U9y=oKgXBNX>y&>zxQ@D_Ph5JBsd~v& z{*<=-RX;P8Ketx=5}I@6%cf~lCnaJI;<{-PTmmlus)sZ%jd%f2X{1qMC>U4;)ekt?2cfsBfL$wCE)5HV|XDSJ`C*r z3)?R0+Kl-|0RRhkaAqja-E_nd4J)J_Fb(gT+HSl`6Aoz%TSOb94on)OPD~ri$!;u1 z8l!)n_4UhEwav<&^b?n2Hgy>`4Xl>kHj^s+M-<4jo0>tWrm!DEghOIuTy#r}_q8C&KqM&C*uGhq z;(hV3o`^_hmixeC&?|$(J*)7mum=Rlu;bQdC&C;?e{_e{S{umX?|5z}b1pa@81 zx;R=BEBFht_BM$m+1sR4?8YP24kKGwL($=fh&?2X?QsI7>SyAo5}obzQx-L0nG~0b z$Gp-9AZMgehzIGH4=aX~9J=RpK;x)D0I>r!pxv96ia(!F-*JpBYIq@9s3#3oYG^{# zkGBO+a_*9MX18wjm(#s zEIkbBa3G-Vg>RY#TLhw9EV=;^_Xk9!H>p42g#I(AWR-JClr)L=sE7_g$<_g0a$1R_ zmczSQg0l!CK^LJ)dc5mm!01GOEBKZ@3@xlvYg=~O6*{5>)V0cVaJUw_hhjUWudt>< zl0P^X9;rTjQCE5&>q}%3nL7N#f3l_YWX{@D`MLu?c*BG6wDT>tTDJ!e3gs^Z24ZCN z;s5E6^+h;?EnXSj0;u|<5LpxID%l~iwB5{LtHHv7!xSJzP2T8FHGH`2kO(1T|~^9?S|Ao%+W z79-Q&$O5>5Nm5F03^;zc{V%mX3ypApp! zhz}y%-^0NLT;gQ82#-V!7%{!pK(Sahw=m*VtVmi^YaFZ0aq zgo_0yNf3YslS`^95ETJ>@{O|lD|H80L-uLb67RWSoJ7A7a@v+X9VA6CA*etb5x(q2 zMY=G8K-m4nhf*5}-WL%ufY4eUgeoF=C?5`0L>z{bRO=9BZX&(JzzPm^f%%nDL)<5O z8$1?|Vmg<~*{IBsbVG7VIf=PW3phsLC@VXu;#rX0TOIm-89Fi506As(Fp$S$x^NQ^ z&xeqbqYhUDhNQ5YnsMwE{r0atIp$-wIPd6zJ(_^A`RS<(svMB|NF3D9Ok{j|| zV;lt}4sj;0n@RjcyormfA^M-RD55kzG^ZvUw4EwS4DI~>P-Oss?ZK)>U!syoRi>mS zT;4enLp zl@->MR?5W5N3bADgW%)flSrtu8;}?A5}vPII;qL6EGP)cPlo%*{>z!X(o`a%Kcxl^ zIfWSyboPLw=(C=_aaRn2;hl9%BH{6%aQ(G$2Q6?|`|HH;fp%gD%K|$qZgp7D2+9<4 zmitkRvtTe$(vD*TCNHY1Bb8T-V?-uUk(-!SiO+unHF+Qf>BWJcp{DkTuHa;tKSFkf zkT7pq0&B;Pvbl)AHg7R){BTtKT?l2mkt8H~6 zceQ?4bsVpMbU)4(Yh@)uOYK$S_ltyku#%ohypJ8yQ6*qgp3<@G*kzYv0)VGFl)eU*~8VvLK1PXKUUUX@O^hA@1@)s5A=)`>yc3K$>TvNg>bbk!Ev-~40%MG zU&jtWN2>KDmajO1j)e;+%qAO`N-E}gAdh@{cal5;`+*}+mLHHSt_N_0LMT(Jlu@F- z3ua~C4NsL;h^J(*>wJctK|0KizW4mO$y}VAAQdy%^7hFQ5+M~2Ix;V;gY#rZ#(b-< z@g$_5NDi|RqH~h4SmoI>iME(l`w~n0Y)kxBI<)zIH6x#ss zAW;iYh!dab{p2Mw0aimHdPgy<5|s(Mq1%_68z_b#o(^0;oF1Yf(gwhbHr0zgcPIfY zfvn`lc=fMzyI&u(32McO1<4(*Y|7GpnaJkH0!>9R>MQ zN2C0usf%1;@{&xxKVp1qcz<4|0QU{y{b`wzxNi>cCm^^dJxd?x4CWpbkwDBxa0k*n zmGHw?m&*5x{esx{7anx2AXrNJcl&=;W65*5EFZsZR&cz-TT+RU}fP_J!ln=cRff^+Y%+Vr0lE%1+?e>PzU=}io z#?Ds6yp?Qu_VJ-}Rp2q8eO&|A?gN$NC&rZIt=UTQA>PvF#wNtiZwBFCW66Gh=F%F( z%3~COa_<7~%9iS7HE=uzC+*J^Q~Pp%W^3Jw8oYw5=IXkZ8hYpBnvL1ZX0Q=*Ni%wX z&SjUutiGkSy0tBWvN-}}b7N3852&~3)3NY8#4Mm;i|BaK7xxTS&;x}+02R6>3!?5T zn*(N@Z^H+Q_)}=2R32P`@>54r35TTIiN3yIC6<8d7Rj)nc8%B>M?fM_UxTR~BGarh zEYu_=dWiqO2I>$Hm(h}^f3!0?&za+VhzC21+#&bxd};enwpVT+wxe-J^hOth3R_v8 zT9B*;XL6L6FE(4S-2(Io!y%s|#M~8BQV?nL#lQ_yjNS3kuovvOOGh0l)@7^5~rWwLdcB~ zzCm^hjZws6X5eSywtGr}P&GI@au?uWX|h7%L}`oumBOqM@k3_kTsHoj>NLMS&!@>?P;phAzrs&y`vzM$$3$4)&5R$zJrAn zCQSOI<+`$V6v~@|@Yjt1S0yJ0xSotTy(P-_LaJXn*=)@1@JAu@@EkofFrf%EbtVkv zN%2qGHh=dVg_ck4*0$}+u?{Y~g3F4#K+v2-iwm0Ol2FAg$YTO8#0(US2+8_b@LMwX zs6|G}0m18MI%|F$l-$ZJ-dQk2v?z-)+^do9V(1v@p#5ugHD~@ zg`9$XYP~L0Z3}BJh~T6nRuP+QWo6B@>-)obBQ$aH?d*DdKuAxnvU8W5l7Mf8oN_z_ zC&apG8BkEh#4?l7i?QJJG`Uy$l3nTXyAn%_**E80286>~>pGa&RSi1b5~b^cTG6Or z(8`a!)!)6NBRFIeBDXq{)#-QIe|FN@FO@=PM{uRXGe0Q&hya?TUePkD)z`Yx> z%6~vZewDccpXR1NyT_#7hIaWKk1Hnvb#{k-^^hcL+;mhNuX!;b-q5V$Ht4wyT3mfw zKx!AOzEdqZ5@mAub-FU_BwUkFpt+$63;;v(R)t{D*e2`KLB7vpq^hq`7i-E2&5=Mv|Y;+0^U=+#7+A&d_)h9nCyFh}ooLr*r8 zeu3!)`=yrPM~Xxx2-wZ=w#ntA^BuOQ;6b<_OlvNp6%Q}C1R_#PJ@P%F47Ex;%y#lH zt>5LUaz)RII-2qZ?Iz}dhn&nPC=ELwSgxTU!5bTDyi*3}ej8wwC~1iN+Qw#Qn^@rG zfsHSKo~jvfUJylTW@G(QOLc*smn%{%Jp&_g6KP{tpJ=&yITHts#GT%EKqM$U8?2S+ z1p#T?ka{8`tvunxrMrL$2)?;=a^{ zxc^b`FCsq3qHOeyEqDi7}wKvzb)=Z%pu76`qbK~N+TJIc>4Ym368tkiWer0|2vX)aO zrrP|E&cS!^TWNnQF1Htrt;=hgDU6vo1aoHxIrvAuy)*4)C-V6DsRTKtw(E%@?` z0$9~4JK(o9`8Oe~QG0{VD~>gZTP@NXM%*F{a+~F*&xNc&+_EFv+Pzd)@qtu}=3I4M z8_v}z|3XN}!z!huoaANdadIZfbF4j3tut^=o*6v>xKR0|yN1GP>#k?XH(g0`YDpxW za_g*XpMH#Pp4jFs03!)^v97rMx!^T+TSPuWpIWR`cWq*(NLzdzPFL`Jao3FPmmm$_ zdzZv;wLm5?{kHkHFD(1+!me)TM1fBYL(KEG)~2>rFCSQf3LLEWD1>Tj^;_DSnxOF% zX&;V>k9#;7)<1D5xXNKkxh>2UW;f(K25})gHhf`g#`4DRQ@wD=2R0be`yE^NeQ<-p zrEvb=fIkP3s+>v42JK2*W+JyUYsid{z z2{5r`5@Crb9<1raDbrxQBtjFI`$2qR9n*p2sDtZ*IsqXI9xUqG2T%Q-IxCiebm52; zT+z)^VuWf00GqiSp7HI~&1C17xBD$kHB0Jh>z4S9O_D6H9N%rPYpU^1@}^EbYaYVn zLkO`99doA>L+#f#H?BYtD$tqU!eG8v&{W+}2e*CgbGTlA6OFUTcW^d|Uq~2T%+eBx zm0)EljaG5VJ;66Qnp38fmdhTJJzbu72uNZIMnszOSBr(4Nr1+z90H4AkG4ILu;}jK z<2*oYn6lVc5EXM_rhHv6iK=m+158by*#Bn+20UB0Lj#CG$(0@O3>54i2Fe<3?T*Z` zeuX2Yh}TjGu7KmsMGOPl+4jkM7mG~Gg$)}l1X(jd+Tb8+y;%v6nzX7e>kr`Wh zjJrIpbhx`5@6U{P=(NE;hk2FLcId#y-Md2gKD9Y`VdnrjE2>D?7h!*=UhCfA-q|+4 z=3;X9^P>=NDhHK+ujA7UDNy5T`S?&3q9VJRW2 z-(cuBMZHc3qVXX$fhENBIfzHqKT4#NS}JviNkB~9tZ2H4vCi^H1m)s!E4D_M6tBSh zjQ3gZm7Oo`e17MOoojYJw9~o?OjMhxa5Kk6l}ILf7a2Nm72|*l1^z8A>`tCU7y!*Q z-u@oLU+Vkq{ZPuifN$;`qKcF&o9Y{@5gmgxC1QL6sZ2bRfdNmS+5+-tUPDV;Ef7Fm z4X{{s^D8fg=58NExVF6eX>^X7{h>fJmiCdFi^ydGQRZfkU?=EDo zG)7D%j(Z9;Yv9HPPqNlVAtPaHjcH7#Hm&BBLUe*cinYNh?2@u*$+gfMcaYZ*ZzW(> z5i50~2o#AZQP@cvy%*L(*cj7~j%FfAbUTQ~NP8C#4?hEvav8AtlQ^&Y%=)bDQiA%EfDl zSEk;|!ltk@vW7Cmp&eVE_h;!2wGxt!3a37R26_#py_2-Tzfxf`+y z&7rm6EIMN@Crfw5WbG6val+Yv7HmtW2!@VlJCT|qGCu1>OtHe@^b77rgt{*%(}Nd| z0U-m8sZ9&+w`rs>p=H9jQYuL&|IYJqoc0x(kqXTfpTndnntUbst1<}P1=>*69|3mApT5ixzAi0RpNYoLXBwGg2paggK-qyQ|m<+!c8 zwxoovgjD$mBugZxJn#P;y6n)OdyhNxV6Te4K#>#*ZzKY{)Uf0U;>#K@%TEqN@^Lhd zL^(e=H0W!&gS?hE$ZO&*A8&goUd)AiZM^J==*8s66l|pPx!yMpEj!e9=wA=TI-E$J z7`sE}_}JZ$SVO~tWjX|i;@*Zn8G<&_dlYiRtC}`7G67)G^Z_A-OO}%yMH__EAZ*gq zkv|puA(ca=nuK)&OGM8I9w+eL>v{Bgb4??hdsT8 z_nqaC-B*I=^w=bD#IUZjZ-oN~@YUUYGfR_VaH*0c4%C8hDS{rzcW3n>pPD`IAW9zs zXi7F%gp~Ca((j|9#-N=^Rz|PNB-*yM5f>XBS;qKvyIFr6Tp$idv;vh*p&g7p&#P&y z$KTr4rvEk+mm5QI|E{woSqm*Y{g0ry0#baf8fZPw16QQ}|Nk6DCR0EE-o*%3ZFA9r z(6R+Kb&AE=Cx!!hK6p^Q+yB`C;W+upAsooUzN^|Ov?;{F-Idq?3BJhAZVx0&v?3^C z8JtIFbH{)TFLKwgi=%8JJ0CMOz#wdJ9$5CNJj@piV;7fg`qUX;yb!X?&tE9&V(gc= zZwlK-yX7`jSNe;4;%Vw!0H>C*aK29h{b<0ko;OY=V*#{3B@v%-NCd zIss0fWuScEmln$|9Zbq0N&Ai9L{bIz4i5gRt?e?cTN4Fdx6^N%w!fIxx6v@{sQzMV z-=^O~m#N*_75v9}U1ejh=$f&Fvf}DXM4uaWpz(av^c{8EIi zX1@{X6sjm*A^IHr5GHUrA@E?y3oFgEE~*OzT61(_$R*J+#lVlWYf^s!pV2tz}xIeJ5mvY-nrY5E(?{aMkhW96a@Ho>y+lfF* zZmCDW=gMCDm5Fntr}nIoc+&UMuxvzm4qP~gmJfU2F?3+UjNi<|G`=x!u-(Ac?O^+j z4hsb+hN$TmPmzz#?kqxQ@D68$stX3UzBjM@ zS+D~yV74$9u;KXG&O)f&{`mI-Z}yJm7P5dpir4Y2ctq?GuH%mo#Fw|u;uX^vzr_s4 zZuJCRPt%t5raf)iUo`EVxOvI6|J1bq%(VX;X78E2>6NM{f{Qzu0#OA<+b?(p2HFsq z$HNR`CrG$tnEgI~7Q)D!BQ7A2)npRW$7XV;9*w9uA+38)@ENAvk;K>UfWNdPuq*a7 zW4sNsFRtxE=5__Zl2UzxS+Ei2U&jhp3yJ*8rgf9-xTBaZ@NBd2WwT(DW5iU_gIz(t z@!0$K2QyRzsIJ=}YDz~B?K4g5O;g%5y=a;`lUH*#a(&4-3pFX)c*)fMRQ$$&W@>*f ze&eRur3p0VcUyJxGSF#Q8=&~W}pbl)>I;SPx?Flnd6&D;Mw7MBZW*C$+Du3da_*PGTf z+^Q!X;GQrG*P8|DaB2H5kE{w~1Z+US1G_womtY!RG_{@Yw>*$V#Fi)IPPwWIGt#XX z%&a$+=@4cJEvD%u)AZ9MQjNimn_5-`K&4cN1j|_LK|S!l5u`|Fkx&$9i@lkfK4HIt zuG`EX02I;46evPQ4B$W&aKihn($>}jA!W&wFhiz@Hqn!u^)wh<3d1L-Mq2X`m2#G!4@Y_!Q&W@xX#t(+2`eHwyMuh=7Dk|Pkwhfk zkT&ExK&F#ik82+cG~2>0XXu}8K0U6-x}u%%etoopU}xIgq*zcqy6vR(!-67Qj$uJr z%_op=>BCJ#^5N_+a_vIb%%_4ck@ZIzj*JmrDXljemo5z^iSiN74;_+P!MBi}v?%<+ z;A=F*(|H3%7K!QlUXhW7mM>P0Bzt7TvoJ|uQ@9WzobWr?Es7Pa`x-6PKyT3cO`el5 zP&u4hoJt|+s8GFmfygZg1aMNzP#pi&zIJ(EdJ!)aN49TCo!k2m^^^jY2+5_#z%qic zfN3c9K589*tn@>SisH%H=vwp9YNS860n}SyrZJKk(UB5;8B?hjAT_hq6IZt^sq<&r zOmWZ^UysObjm_oAI91nl)AgT{pXwXVIJ2$pCjQjj)X>~=6GFH9GwZ7t*VN+;7@E|= zG6YvETHEj!s^*%d<^Ct@nijFyYrIF?w`y9JETK_4RpzKqw{HEkyj8sfy~EW7=pcS( z>Cf!y)@oiA_&%)G8=%|14iC{we4*)@nUFlP;FHUjw%1&P61opvQ((uY-=iu=#}oBA ztEU`63!KZ*3=-$nU*l7fxny}Gx!e8msNQ8G5raT{29a*1Xyg^;UkxUcRJHqJVGpQZ zr)7a5VCD zwooj9qL6$^YHlr(hb^p==4a1q0;x8;VfsIucN)_4-V85*CPl zI5pZv>%jYBqpDGjv2}v87{f?{D~)3ZgVpzSNk`;Ge(O96)udxDqDGx>YXl_g`F4b?bb;FZy5`M*|j7Bv-^Wi zmFr8O^6-48vh|~}4d^7c{&dr^)2!Kr9BLYh+J*=z`zi9J{9N*-;Hu*1b7jtiDjc@Tub3ZIy$tfy+G^` z3yiUQUCEdN)B5=PW2jA4FMI_dEI;T_CaaSJAPg6f<(EGzQsQIfNy+G3TM^0BoFsNW z75O%7oLsxekhFJ5t}znzwDe|~8;OlNXiJ*h$x&3SEb$DSL4abPE^Hb*A>kR?Kq`$Z zCsO#iJrTJEa;sNputV)goQ2RY8%kh*!QQ$airqzMrXXjkY%jnIoNP+=MWY88DT)JW z81;n*ngor3*2;BA4mmMgV5d6tgSafUGsUlzAP=LMM#TKmlP5&$Fz~4hSIUNtbAu2d z*Bi{~7SSz92%G1E1!RPhW1<0siyn_llg{63c{aOBr$wv8eyZn(Ta+!B7UVc4}HW^gc1_KdFzBp}MKGy$wcc%UO`nO#2WtK>{!aFs|)z>iW(02la{iMu9Wi zY`-ptkHtPD+)vC)Mocd0LhOtouV>x04ub3kA)p~GnC=z=S~U3r@i2x~7?bE1I>`i? z1Y+Fa-SxA3qRCf~x1}K(!u^JLElwg0a`|hgkoM7NM%^p%C>)BM-#iYPE}mGQUYJpk z5!w{#c3=P#_-;u=r-A4?#Qf4QD6EdH2Z1rRf@zCO{z+v-GzUkcD1c)nGLxK+(?#qe zhnR$>$W4zxL_Sq&uJOkUS`zac86V+Qwb;smNTBQ?%eWo$NXAm&`!z2sKeyVq+5Fta-V&jtTbq%Q3qva zVx&JL@fW6JdJimyOi31tfoxo=jT8PH8%9`-am-J)us0Y9h!6q>6CLt3$J>V_IQu_D zSD-okXeEXUGs?4C5Yeoutz|iV9KbWw*DDLruLyb2g}+!N?1S(pGra3s>XvEkm2EX` zH89JpZ$lua_UcyJS+_S{SJNOx4UJ7&Z7HHQ#b#Gd*~tCRF8>H?HUs;+n-0nLk`Z7d z!IYr}f&wu;yy=i7dSMsCz}0Y^EVR#(pOS6j#;qh7;gN>CFf1g6M(_sr$L%Eb>~`cM zf{|9jjCMvHz@1%a7hw>v7_O^!LPRphGFPbx^_;1@*kV~?C<=LQiLnK&1^d>y2XARR4FAX5f^3YI{E&f!-|=^IR>&ytW5j0MYuDP@TAjJ6`IOX z_+h}UPMr5q&$3!O#;dyIa=*PAjs>laO-%rO!o0Po#92t!=7jedC8n%^*iV4}7k7RH zatOY4jfK1xBO1&!(xa3~QrrayQ z3?lHk49A(BR2==vHj)(49Ud0xOZFBAiH-9L731lVXP?cQ2^*G|MqoKLj>s11@0W~uYW}8=iEnfpvUQQvhPaS8E*Nww zvZXL2Gt~@vAPkZkeSa8SptigaLDG71jPe|Tj0J@&U5Kq!$06iQSK+;#!412> zi{%vU?H_?Xgab%uR?_?uz}}TW7R>Cp|MoyTYCy#Qbk*)yeDzyOQoSXqd!rJ2k{8}v zbW873{$<-P^Q)l1?<%~nGuWRMir7*MZZMS62=P@pq!da6l8>Uy1CUFgU;+odL~cvG zPuc)IHW-1a2hq(A!ZSscR%)vTUk5DP@5b)|Rj5-*XA=K>h$83%IVQWj_7Jr;4g?93}I0Cv!*e8ZBx!A)*vLo5>9FrY~3;4bDdn7BJ^&tVcF z>_nRJYi?AyzI6sB?)A@P!gl>A&(d1sAKcu(7L4G*4ooWQIgetW&EtQ(IjE11eFx3t zD~Am6PYN1cgNTG?bF>u|KGGTdSG@kf$&(EbF#zdL>>-I6I?c+CSE^pKw;MF-0*hKg_+|PB1BjY+=KRy z-#32WIs0ny-|hQ;Cjaf+2dpG|P*K|ACd!hNE(BA~Ew8hVAl#~2)8+?O6$wxkIc%va zjxL(==J2f~n=o~v{098qGUR=}mxMU^uwNjJlYoJPGy)k)yv^)q0Cw*CIH2KVyC^!@ zfb0d(WZkj>?bU2>>O@_NV<$J5RJUHKkOJ*?U8|vJvgxFiGfAUv7*h; zu2C|wc|4YLZPb1@cp-chG>EFtAQ+iPf~5Z-pLInMVuxg2q8x}&o@i}O9GeP$2364# zB_+UEh?!*iI-K~qw1^`s1>5DdN%wv+MvF@>1P)p3AKo|;LZ7_VKO zReWqF2gTSJd*YZ7k-zVB?S-o|*d*LNu-0c?(O^0Y znLU>wa{O8amacak-nqs*=&GsQnDR>uAzaD|G>FYiknTOtpI>*J9LN!jgG zaD!zTi65J(oFljby9ZR&mwh@)_nK$(Dta**eewtT`xJV9=>?Zp z%$w&gZClYa37(l(RLt@xHi4V>rwL` zWt(Q_9@+wr-XWfk|MByGa_V=eU!0ANjc{Hl%3H;?Yms?5blyE5c}z$ul)Gr>3k%JH zQP%0@=p9#Yzv=%m_a^XFRp;9HIY}4-7zl$NaN3)Q9)bf-DNu}HGzv&Sk+jw;7&4g> zl8~GjshZN>PPczM+~MnBZ|!Zbwsp9cwl-L8t&kgU3&rb%wzf-)nm8axm<$NX_dM^r z*53Oh!C>3p|MwY5&e?nIwb%HrcYNMGkL(Fe)~XW;QJbl_pVS@R7lc6WF00;!F9ozZ zqL+aFlOL&g+I8*qOQE%xEV!g$q@n^pYE|Hl+Vu3*+{AnmP_R+?qb(Qgo{;4fBld9r&7#dA&=s)VwCwP%7*`L60`nidW9*oW#mY;qBJlfg$S&^rBC zl!amgQ?WL1Q-Ri4uzEycn`vHLovbZ($l0Qtg86G&a=qRhl!lvvyQq}%p>7Vi(k zeN`#iPy`_I$i}i?=@1`>#x4S+%^5F;ajaLXVC3b?(N! z{$t|&hokel_<44{7XHTnRhj_@I(Cksd#|(@2y6^!ppEpY7(4-W5Yrmdz5;Lp?oGiN zjV3U5=M(NmqzR|Hjtp8|;tD%R+Kw3(l zay1S^M-54Xc$2)|hhwiZp4nepWsxwZ4bWD_)3il+xc$6CqO1~KQ^5s!1&8tq?n5MA z_SUb;?=L`he%-Wmnu4w+rr-^zkb0m>I%G+LQVH-2&yG73pN9p^6s6O3<;fWkuv1J$ zfR%QZD^emVQ!0+A(B6~AoVE``dOIpBI&N?{^CQ`OY%UX$saPDEFv~ZN2IY004OF}jud^8Hs$%F2OVXjZ=6L{`T9FXO+ zeH^3pZODuTvDoN;gDQ2&tT^9Z`;LFFIwtDCB{Lv0+z62YO&lJTt8nm(1I1VTS{}A& zF{QSP(=a7zR+RbejIY4flkzqKPxq6xJ@=oz?Wf(d-TzuoXEb=O+r>AKTnF5SSO)rg z%O_8EWiicGS8Ibj62G@}-9_64O{CmlF6tpIMt<9a>Fd?%NL^A?J?^6-%iof(F0_~9 z)C2#22cmI+H+qC1PgM%?q&Oa+5s%ZLM`(}49BaCqiXjF%lTx70IS&;h;OfERG$=Kw zYQ*+iFoCepj#oL-hx0^KkY#zDDgXgI~4{*~%CA`_du4PR|RxkFpMXj$mple2!v zu@4qsK^6uRX({gWzfNg8=ZT>nO;ko^B5m>!5-M*Wa%K`!k7M?pj!lUzC|bPKqk}#i zy_*{9>zXRPvhwoE2IqIGoLzu1Voz&_F#-?ty3qNCilEW{%`x?rNL&|M7Q!7BhwqPA zPLpRTw@GgjfKy3Xw;-HD3D2d`evPXzv?tEFW2I1yhP=-FPp|BRGky<;cE=8-I(bA8 zRYU&y!Ig_Gd;GZnF!^&HhQ!4HyDMCC6d2=-Sa!Cz_}b;!-u$AX#rQmbX|}htxX8nI z{9asET~kf~No4&Z#$V;?OJE-t-|7C`*(nYk!!<)kf-XFXKL znrq7lEGQCr#3M*nU!bVLii&XhI|t-Prxa>EnCuDW(7%KwvDfbRt7#Vsn&L$;L2Mw4 zz`SC0)YslZm`wQZl;3c{!hZJu;wxd-Jt~OZ^j(H_4rm*>)OG$Odcf;oN6ZA`NF)L? zh{yI00(x&vV_Fo~Q%=0VB*=9F`vXmax!qzCl-MBSKA6c5qw%%qXypHVWz^)CJO@04WgPDJPh~ulQkDz&vZ7UV+Xr`-@RLY^zX~^{bkFCV%tCv z;jv9uBz5@AE567y97~%{!TQ-C*g7S`TPFwNI5nCyJlwP*fibAi)`IMJk078-6^BA0tFtgq?LmOk>APvn^iUmPf)EJy``_v=;4gsCOq(W!oIBp>P z!R-m|+}7>sVbTZZK{v2^pp?2Nm1xl0H^;q<1f+k3o3R>D;bv0xg3%Xx7jJ(2Jz3R4dx9mbgdv#SO(?htC3k9h(#iDl zpgxxDr9b1{fJeO2Q0LLB$`|PRc)1UVucU=k_JR5YNIoFzQ-6$%gjcNM zfc$tBa!SWBr|BR=IE$>GGZpY0tJX1HF$5Ex&=ud1yud#fJ`e&U&Gh21YDi&m9}V=1 zFpkWa!8L)W5$HpO!%$O*8{@kFAm)@6 z!nyXyQo~U6W6a;nrs@^+8=0dT%du@^lVVAPCO3dV1B|^l|LUvHTfRW8Lw_4QlWn>m zG<}o*pNyDO%|h68QmEr>I@J(5W$#dnDGo9=o2A`@7<+!&M!MB$wU{=unblveeaAHH8f28WtnO7@ z34D;#Cl~?-FiC6?+Ox-`By|p25*ZO2IWMP6pzVI?N>nIgjSqFZP1U=|CFLzq@~<(k z(oDL-?=hv_Af6Uz0mL&B#1%m}8VwBS` z(T)y>!`|eC$dZ@b!caoW-hl#h#XF{SSHB=uCYrbXX55mz3%%bDON#mGffn$P9E{*A zjY{Sl^7ZZmEl9N?NlaxRTfv~75q3%G%NWDz$W^J*%PP?qc@(kj$8pGU8MpgJ>Q0kF?6tRR@f()mkA0RSMWtdp?8 z!XdGvy4mCL7+i{!NC=7gntuZi4ol+Wnd_BHvjGbED$dz>gweUD5hz~Q=VZwCuwVYh zzm~rKi4GsWlCr$H5gecn^dQ#Uq)ZFA*u#BLK4i96>=S|{%_H*)L%d3TF#k(V5vaxs z4$l>LV_DDSA*?O(F8?mkDCvsK+L%HygdPn z4>6@NtmK31TZH7ufP}ue(Gv60N;uLVE#bB3d=1*JiI^W<4gGsN34@n@4SW_)?POl) zDRPYNCcN|~X=96yCBKs!#N(*$D$4+C(Bb?+x@f)>*H_JF@jG-Y&8;boEiu>sv*h8766 zuQE$-_F?H-FD$z}T?AI)M5J<);A|wXYkg;U*0yhr=o%X?PFZ>&ce3213b=8Bi@wvp zoJtafiNwOzTZjVfcMEGr{fO)Xrul7?qNh9paa-T+>SIp5uG6chPoFMT@mlO-yyn4s zFc+~nndoo0=(ZLG5F0EBCVOYsybZ@J`BWlf>sO^tDY^dGC7(peFNDrFrgVQJge9m1 z4oJ2H?H)#WknRD;fLCX6JgnT}QU`JC#NoCR-sc(;u_sU&VAQ+D)9jz)|*#+B1fCHxL3~bbFki<^B8mFIlc4&d*@D3{|VshXsq+UW60d6f)S`SM+ z2+N_&Ze~|swZ3P!b36bY-)ma-DZYVvA#C{-v_{;5c4zG@9EWC*n#wV6*6ue@#$Yt< z0NY|HK%XqR!I9NXmsZEl4=j^*lf1L++7-BbO;~Yua2;t#^o{7k9@7HjBfW99JlW%7 zAj!Vqkbag|_LyR*5P8<(3YWZ&p<^$=`C%7u#{xAuy|8JfSR(A3xDM#4L4Pj1Hw*+o zTkhzJC)Zjr-d9S21A--I)ZunnG;Sd=ExiCvwD~zPq{reYN23DB&JDA|wey@AQXrFF0L@=on5@id%UuMuFOktA@w!`02{q zH+;-A9Wjlx-hdq^{X=UgY_#r1&pv5;b_Q=_=A#W0N7n3MrV`0xmeGD*zZ5ldP6zK2 zmype%Doz7jRl$s5K?wtw<`+Z1oA&mDDiB%dkq7+GlP=$JUj6OoRUwjoh&B$LUKA$SBLADPMF{yToRuc+qEJ8wuN@%Qo|#evBhMz(-jcgX1`1Mc(q*G zwdl5mc+8$tKk*k6#sYmiEmln6CYw|-bu%;xHzRwZmt+Jel50iPf*)WAye90VE_gAm zLpl<3U(}9wmNr2oDrp%HZq4hd_72cWYwH^yqrx*i{|-IBAM?M>Ksq9WOcZAl%}>p2 zUEony*C4Ol_}H4&6*Y~(NULcS9JY0Z>`D+YD10c{2urSOaR_`zJojV+>Vlsh|IEu}tz4uA0))x0bh5z_}Nx&(g;DE`OCq zx{?=+pBq9QLtk2#KVc#0diAawCMjPdT!>U_tf2f7-Qf*nV zmNp80t!T{(PJ>;&{j-r^eQfmYU^c`&87YQ!@?!Jf0RIEAR`E|{HH@D%o#_Wcz4gor--gg5^a{P1(A6TR;VDFHqOawuUfH6`pwrwm3=mFAzi>kiHlAl7WAWRj*+JWAEjer!*1bSbk&1O>Etlr_?axEL$vM7OrU~wMozP7df#=k;bHiO#MCr`Au{>$Gcx?s6g zz<5#8rjaqp*VuG6GH0eGtEi|4k{l5%ktU@nHA*1XchYb&=g7F0yn?YbpyZiO;pC3$ zpPf5ilM*}S4@Y@t`-|LpaL+C11EOV9{B@D%^)7 zB~5LmfDYhD%yHUr5-W@nkq+ofcf+ZrBKxPihYHz4rl=ICU*j6lC(uY0yE=9zLlNY^ zYs+sr=NfNWT?Kx7SJwj@MDm0p-E8>ZwMYOAbOPoNjb2}tDoa6;kriu9r2x_?zAZ#u zLCi$Vk1bn%S<&Lly>qj`YQ8i`oFmYac~0F;r6`bz}?apncL#-`guuS=R!nml&U zM6YEvwPFhC?dzYMnuDP*}prsx_ z8!@nS{JE4`9q+ouOMwX+F(d#0(m|p!ZQDh+j)LV3X}o0e*U9uFWi>4JDh_eWE9VMQ zBFeQmxFhgxyNX~a^e7wx1zM0d3n4Yr#Fg-1U5q$96s+@ z3G#3OPIpW~c$#qbBSXC>!eCWo%ad{iYqt~_s*x+%yn=Q% z*4%_GOSx5_XC5NF5_l{20_GNvLA|2%Hx~+sf_w7{dh-g}==UVPM%=w@rJR|n0C!3( zaa9g*DlO||-PbImY3EqkCSh&Gs3x=;qQXd1MZ~n>rfNi|pM7Sh52gq?Azmk&E38HS zl`xMkShek}_*8rBvvYZYUI%hCVlR?UbSS#tN3o<-Y zkQqx{Wp8WlxbeWxh0*6I9P%^P%l)Li9~;TXc|XJ6N14o#MBP1-$t(SM^k@4HhD^F} znQ}}CFV019V}v*7aw*gfv8fqI!az4e zs&zFa)PYZf3ro2oZsU!bRHy~XBbg@BStf!!WL`|pEw7@H5s`vBM3=}o`4peg^fS^;7 zw;l`w#(nFjaO`0}3#m~NdKO@AWC~p5BjorS^u*%sT&y3tG2>93fv*MQ$@5XJDCx80 z$0f_O_1TPxpkypg-ACfb0WS>hUE080*icJp8PF9No8@{U8^CqF2+J1cIS8)XqQ?)D zgoE5GBaIj2;2&KNAXE$7?vMPNtq+>gaIEkwCNx!v9flokF^saLN9ZPu(87xWMKB(V zLj?}1Ac^i!F@*=Vp4_~g8!Ax(ih6i#31SJh1JsaZgk#Bsm^ixTCg4j)%XT@tP6F6G z626Xc#4t&&AjwLiRq(2DaI!^#S-aX~RQM(Jkz-MvhRxA{BBDW0`$(y-yNk)uu+ zKk3tN9DVpm>(Sh!J@5Ct|L~DW!vhe76WzP;THEe|QHepW9;-LgBfY^f8Dv zHlUmx?sN~5H-+Bj9(pt30LEpz4>;`uJ0)pKq{AG6AXCXPUWPn>!RlcbGWENi|KusI z5qM9()+aW&M({+ZuNhTT?GYZ`OV&<`LnO_h@7_?5%ra|qe_us!MfKM!E*}IY=vOoeWIqe zzS{f5tYzoVn&}lST|R15QGLU@#+vGzQ{MTrXBC`t{_NQo)2hDo=9*e>QCVZ%*;03; z*ab6ZUdR$9&_F`YY^lRRc($kQ7&QtN91xu|vXd+g+&|6*?kqO~)dfoz<|1+VLApv|G z@&97Og`R(Djf4&Hz&L9ifW@`Q|X#B0xczi0lb>4tRTP+8ej)()bIJs=S9pJ|U`Z!m- zMS937-F>KK(6;X|saH+YYo_saO>5+m!|}Yc{okpX?#$Y^OvBrno60orG^ux(mM!XY z{e($v0vt#-Tcz_k8Fi34R+yKU=5$R< zjWh+fBcm^>IUd`zD#?9QvKi^3c!{3qvf5hZAZKq@JYh;VP2M^m=I( z;rQmFH)Hch_j3-%**P3!ZSi)NyM27sMps3$g6p7@Y>f7xL|YE^=7S7Bf!NND;5a^! z#-bef{L1$)``3#rsERl_ta6@fMP~cY57=T4`JZLne)`J8D(lVMj55)tr-Ts50NLdZ z&wJv$$t7%5m5Cw0!d?yfCV9YM@1Jc;_lp%c{*egAc4k_8a^uu}*uH+1ZjJ*w5go@Z zKTzxT2MlDiw+L=kA=4tg%6lGH;c*8e(xQW$7cBU3F{hkVbkp$g#=KaI^K5HvD@CG*1*Pkr7I+NgtuPk;ff1^UjK1w7$aL_?(P>Q~e>A z9YDd4hp4l6^tJg*SH^~9t*K*1JuCy}J;Wcb#J~@vb9?%2f1#VBK{s0RG{3|ZAdl;| zqobD5Q3i@gT4T8af~7?)#jKIB^AA_`j6RfqXf%FaJXCw=l*5D31^U)TSK#)J7d1yHY*Shexx9@>)Or^?G9Sm zLH%2R7}!a0MQL~7$Q9P<3<0!?(;|m6-m-it_fVL<;#Su{Rh8o<^gRhkTiR7ZHOi=j zS3f;0LKz&jL6&s&nn<1}fUojQa4u@QQ6{nr)O%vbjszmJqHJCQqaL2kTP7YI>}}95 z+Wq(Zk*@c<-XDG>b>!Fb^P3}KPoVY985zvAod505r{5pAKIZ-nOL1HdA`PO;IB`>Y zYySFGe$p|PXgH`4WuUV9u)~jpr|!r@0*;MG!|!5BKzL^`i(ywn%6b8rDh4|yukU|U zM-DS;I_;@_r)0uJ4y&OLcBXe8);{rQBC{O_s#f66VjE@WqUvXz+0T7R6={*EdQb^k zgK?!_RK04$gdY&2j#xF28;jdi*QhGWd_&+pJ{LX+J9Q`W$Y_k zH*UGK56K!-We&u_&6oBu?}Td+h7;~VWuzsVib!qg(j43qcj+CINh53*_`vu4pHgvZ zQH)^H6Fpu%r-N=NPt{TvO*ec|oI@*s@8ZjWWNe;3C_2;sdYP>A1S-4+F)T)?O+kCyKMyodIo~9<+=zk%(kSsf)V0aqkS}l zM%?uo)D+r$#5`j~izWv?ctEuZYReP}t-ZfQwIzx!)U?hHIO7@xJ{c!u$my)HB-gtVWgU=`# z2%ce>FN1Sfr`5}RqThgYfVtjjs@@@wfL_5q!EeZ<6%-6=vo%nH(g}5X|IP11trPY% znHuo$c96ozTb2p8rIo-}3rbph6U-HQ(SN!J^n9npFMGofi<}&RVHAx}q+R1wU*nbK z&t8rV{fQ8r-7W(N@&lKZR(d7_oPATW(-gl079JxA|8@ioU>Mm*9fZVSZ*>~^*&-kG zTZqScU0NRydSKe#@e;xirH?UmnAkRvJ~ERq^H#x}&vRUp(?b(vzddDA|4ZP5R-h3f z$|lx=XR}*JjOdD=7+Z;uhv8=HTTdpk@cRqV$;dpD|o?(1L{*-w}gOH`=>ur&Ozr^$z2^fmEY}z>`l4t~*`W z2S;l41J*>8B)DZjig-2D@s=Xt3?NnL;CfL?YYQ?)#+Gr9GB9Rm;V+Osnw(bk^pv~_r z%-FUhj`JV@-Vb`J(LtTt{l>_kWB)%zhYEoy4zXXLMB1LaKfYbgHVWJOsa9-B_*7IoFOi#HflF0#37?9p z=0SFWG=#mq#guM!oVf(7Q9$z7x|glke%kQuG?5LMdV2w}5LeMxVJ8|5K>zk13lP`g zjDvlC>muDU-1<3w@BHAKGT@i==I>k(UYo%7U;;6rK|W%f{B-e(kATNV7&P(hV@Gg9 z(vEq!K^aIbz0Ynq5{Gh6(X?DR@AS#>^KY`z6cQ5N+GE-dCE+5%IB}OZmPS7rc46L? zY;i-N?Vcu1mK*5wpox=J;iIBP;=2xhtv%<6vB4MZ2j0)Wzu1}sTba5RVREDjf}WKA zzMSxe`b#pxUy6u`lK72(k((Y>7$8$UfpNmiTsA8BGA3HNEi@e>NrLhNh>OHByRV1^ zirl528tP^GRo&#gXB{<>-`ZBk5|hHOkuvP3ypm%F7d}?P)=#~^I8obw5T+}BLHYn> z07OS%4I-WXUz_F?XvV>C1aFxXz6ECl?~9lvqY^Y-JaMvPHzO3C2JhHKv1M=+gOE9M zR_(3&d)h~UT~rYHM?52bpN)U#pU+J7!(uh`^FA#m9#)8Aha(mw=L*RYkBIlivbt(G zJ?Fy@n&~C$VaTtkgM+vvj6B=Zt7UafEtQRWjecEtJ6ym;1Cg`2!+$)A*Xx%0xb&s| zARLgm@~2OaPb?Qr2c`grWpQur$QX13Akp^rxPG?*VHdqUrr&L(-HG0Y=cOe=S~(!f zaGSWvr-g`lHjN8*Fkr8nFU8Dn-E0*9QfjBHqTBq){wOt~{R%hl{u@@^D zjv#5FeQ@M%{a29tyBy>-L;DhsX(dPwt3YSghpc~t?3~KMsy1BgrqkrBIQ7y_=4_)D z;AcX3SMN}5z*3)^k($H%HD+ z=~O!jQzBD_9ZlMACo3ZXy2S7LEOj&O+xF;USM9`I#9=ti&v%rHj>Ad`Hu;OlLA0L* zl=G+yAp71L#8b1%_(YKlkE<4vKC9ZYKDc7lwvh%8_|+0uS8|UjzE_V4j_Ob~m;97! zCg#cvm45&LU`m*w9xeFka9tt({HU)8R-{CQxWBf{g8m#EL}9SOT$QxagPVK6|CU9gLj$Y@4z6B?!`~%HG(rr-JEJME$T|x%at%8tz9GtpX>?M zL-K_6xNx%wxOh&{U=QkMD*Tq;sWF>`lOfXbP3bpoAMw2<^A(%jtUYKN-rIVsH&qWN zj33p25%sXdT$6pxY+uro-hYf*HdI0liK)@+ad52XM!IbKL}H*k{E0D)tl*jG0nV*r z9h>3^^Rm!5>NWdCf2DSXI!|rv9rt`6NMO<$no5Q7QE*7?bm01Qjf-F>oa#yl%EHTV zJGq-h#sYR=AMC${qwm|`-GH1f*5zC^8T48ugb^Zj0B8Y%1OhR;^`Ai*zQsJZUz`V?pu**uATW2 zVVT7|-O3c5u*Il_;8Fh+ja^MY4HJJLJvbB6FUgvQS>5Y@RF^WVfxh$%cN1j1Bj?@@ ze{(d68q*o0g2D{*knmN7=`ZxJ!tBZ+A4ngxS%;U&FIwpXQ7BD?nYNx2bAHv~{~_cW z;fV~j>oSDFA`l1YY(l+k@F)+u0zK$KF@=-Wxy+t1gZVsiuf8^feipt0=~l>hCLUq; zW$ykqBtnoRg-MjH%XMcF7S+~`3l^(zd=Ln++0RlQ^KT7=5J|u;M{89Kj8~qnj!u8c zna4<@Ksq8;oSlXD`2R*1I!J-p1#yQd5r7c@tuq=mlsw;xu`&@@%dl?&f`hI)&W)d+ zmGPp$ocJH>BbC|ykt1%C1rdO{T2Imn_z))2F>(pyoN{#mA5!jHQzsoB)npdz9WD&%T0z4Pl6lKM!=LKV_MlNf~4V-7}$~aa~ z-iTOjef{d@26P!{vvpomd1FmOiV;?{qI#Z3iLYG!RtqEL$KV+_#G>CTFEjY*d`=KHZ&zUU1BDs%QCyc z>Iz>n&c3Ae$degR`7i_d(Zs!jz5;&moiYbPhma{OC+>cSI#dElXWb*-NQO+oOW|o#(g*2>saW(t z9gbLq=DJiU|BHBH+w*h(F~O{Vn2E*MD}8_a_1*69mx+4V|HtSNm^@KviyUJi%@L~~ z6^o*+yYpR9~fZ2;s{d{ zjEVi{p_;w-?(5p$b)f6uH{VP3yw!8Tp?{GdZ4N!upr!i3zR&Dy+uOBw#=fq-U)cLE z`*eiD13?^)pi~VxAG~SsbFV~52YTKR3OIwa;(R z#HT^F^{8aZ;_l)X!IFisHfCq_p^zYzc zv++RJXH*`pdBY}duVqA2&f}683}7az;-1$OWz~WbBKa~NZ8x`uJm(==p)xJ zO@9)QJs)sFL}|wdzBF?9oqAS3pV|J9C;f@>*ACU;=hO1D1i$TGLax3}`aKJ&51e9; zlUAkCf4)#*S^{e~565E++Q$dBe}@Y5YD7{F4$KYp&^A#{w8@BBNN=*PQbL5~^bVit zrZJuvWkJI*p&<&47PgulVI4;s0V2(WUV;jUV(Zo(ByJS-34)b|k>4t`=BDv*hf%)9 zAzn2UjxrBXR|CN$BXN%{hvg+Q2sm4ACDlPE%RiY;5$ zl&W0g)xhQp(2d&qGGLH=)Jp--qO7{Crp`llHDYm$jMW35glH!kGmQpJ0VGLd4S=yI zlY0x6&LMz0#Pti+{Ti;ilWEK357^t_^G^=$mRG=( z4cUbK`Ey>uqj?42f++b!b{yAVb$slYIIPv=z9H(eHE-xkzm zBl_CAxe}degy~ijelUt1G2?)5hxNRvwm#J)2qb5FRkdZ+_(JycG4$~5o&uQnk_AO`JU-S4u(0|D4+i0BwWtfS$-zFewg>6JBq5IK$r1TI zDf}9`T>n{2LQ+N%&Q4>r(O2QC#gk3EC;&sa9a1!+5lL`BUL3f!*oIv7kfY91&2o4- zWbzreIL=Zh$Nzo=qAeCIlaAmI{p+wTS)I5@-FThsEvY_z*@i9VT+_DpHGd=h!P+x> zF;DS|_4%>uEaJ)JU5k*JrGYeR)(JH?O^^R{u@H>Jm|ZuZ&^`VJdU@dWvU`{kcRUc` zfRDH6)KUt8Q7{N7Vdts)hxOUVx;Q^pf#rxPm|Ig-R$f_%?V}S3yF6BZO?l-x6_tXr zgB?@WSlx7EY-%hI8>qaA=q)W}H7S8MXsm3g6+D-<&6SPoVkgBGTa-v|rZ?BS)th^X zcfrLM)2D*I0R)6gE}ITjiD z@|K0JBH4#W3(5FYyhb!px{o@x=RDTozuMcGdlK7p#6oRYXDGC4a{pF6(h(o?-to4o zPg-?i&V~;ES7{3LNQ3Z(pg}SaC-;BlhK~5Rh8hU(#GHpa{LZ71Zby5KIwLQ6gy`J6 z>E&Lq2Vh&>%(l>DS`PW~*wo9e^nXE8FDe;5rhn{jr-lgz53!rxGdFpXDcNg^_Z8OR zkN{$i;A7*6?#RFF%IW&3Jqc-@M6I21D79`l{kp<0_}c`}&NM$_QojWAc08%PKYv)# zT0LTlf0M>HH3z^XSvFPeJjyE#Z_Ee3@e$jFQA`p-0!A$exM0i;HglX7h>fSb0JDoe=W|L|c1>u{f_^o3;{of|l zVb(rr8vZB$BmyKO{q!TI>X!&m18wi%=)HXqRQOR-^;l=&=l!QhMFf_x;2lu0cg_Ss zp1cs`=Gl|Mh(}-lTa)@7^1;gNvi#44pHNDcq z#SyrSlYykZ8e9|q!A8eW{CC91Ga-i`yf(4qzUhCPN>l>Q!->Ww^Lu6 zYwDghRnM4`7fkVs2<2Z6TmSQ>ZM$iE!L+@Y%q68>7F~s=qLoVQeu~TRU-H`b|;#-`%at8@?aUA_?X=Q}-M)PsCrnLYWREK$GuJ z>UUK0EN|a^1%=&?^t#hVE*NRN@Y8_tP2VV@$<;SzVm+7@&jB24L@XB1$jlmc!jnA@ z^nAUixhK){iJnV)@_JmNCziB1pSb`2a4mVb@D3`qwg?fCBg=u;E8;L~U;FQ%&`hJA_FU5)2? z1x0U2#AZ$8!a09H3Ei9jZHha%H?MMglaL$uKFhQ|*PH3V^6b`-E}G~PV%t_k>+SAN zocDnbV4hx%PKH~-{Rs3U9sYkF>c8$tp!*+7X-BoQj}>M<@H6k^`05z;=B^vgyG{gS zn{~Vmg~tYI*hyg7cG}bIw>KlFTL+CNs~~{ zk?7CX|G+LBZd$*;5&RRrWWscWavH5w4nY~X>Rb?8AM4Fc=B5{I-+0)Ty;92l zryrAd)V*P<-ZUj6O>wp*shy^(OIb2p7_1s}2C{|3U}8)O_u?|znBxCXf6@k1{C!Q| z+mPN2j7Ix;aWn=j{BD@X1ddd#oFdhde8Mw?@(ezD%yy~CDcheo0^SqONqaVWXM$u{ zwYV0grs8M*A8GgNE*ytLCnNFu#Pec1m0Ck*G_zv2DSa3AcSl8m7{kO#!LXV!4Z(tnDejO~?bKDc3%>pycu;ADd%^ZHhiGxp9N@JO@fN;S#J3oZ^jr`BN^x zct?bU<754jSJ(|h*Oo-Hr*HK1Hwm;?g*IyoR-C>W%NaSy>KE7S$~}zM>obbST+M~##l%+6bsj(@vFC5sa6`io_2OB zs2BFnt%np))#w96$g^6|OF5-)L#$z6X1%OD7 zlcO)b-~XOekap39fB-$xRj~CNb~$iS=+byduKZAb-;H)>7xd*7Fs1Ui*eG!qz%Mxc z-!f;Efd7`YFmR%wIRzoVvZ=hRp^_06z~98Vdi-bx@40CjMWAiuj_7k-@X> zfs0jxVOJU!jq@{t|L?i}BG)z95o#Oi$oXZ5|HrgLg__Y%!Mem}furg#c8_7==;KZu zn`%J0vnO{ldjhY^J?;RqTB4l;Licld1qY#ai|FNg#M`G$hU7*0tQxskUcsKcf=9wA zeo_VhW0;+dTVC3mlZBBCHy286;3+|b*B|*W5a%q6@F~a|x^&LyA?rKc^}AqX&d8xk z=j04kBJ|Ftd&^Lzhwee7znAA+K4g6#roT&bmJV6pkp0d7$IBoJW))^6;y(%d-m+xK zn&U&22orH1*GOg#SznMxu;7WDCx$AWGi<05;@u?Mvf$O6SBEN{lRZ=kai`Y$;=sWe zVjtv;8mfe7inYGuS&3tZtS>LvDeH6A4^=wnL(E4jFqwv4Fdt$J3I9L&E1wkjD?jc(sH%&< zi@$RGv>4P!yKeaLDv^X9^XHK9hH5q=ak;umxAvawostu$Dhk^8pyU(&a`A*m00pit z`td5}w?k0CyP^dYE*Z55Hqym>14}?kv@`UmvX|i-;OZj4N1Ocbk*NZsh~XW>NW)v^ zcnbTEd;m=iHMA@tVNZE&eN&}Z49sMh8pg#c*EFQoS=b>T4H_mu$$%(sf`JcdeXQ4P ze>eThk<_;hNqtwutKbkz78GLA%%py#_=08~Hl^r~c2EFz0lOG4JBYj=pPi$c; zw;qBS6*@8J3a@JeMxJMX3;iIqJ5DD~R#xXl09Ky_S%l zrpyOduxNu}_(*H=<32hnhGiB;M8SZ!LmhBhRD0a*f+pI#dURGGwLFU$EsA#Z>7i(s z+5Us0n#5dXNQQh2CU>urs_}l^9NJ)NBnugRK18l&zq|4 z`17o(dQQwlFCp2f2wj~HXWhob11?B_81@i|0m07EN@-tuhk7qD)42z!DTS)>U10A( zs^w$8ziy$MPG|=QDbL~=VeyvZC{A<;TYK|y6dxHDZ#s_R1ah^tuRV_9#EZ7Y>yM*2 zQGadmHA5Azd)ZXIBFbDS+=d)FQ}?Q=daaYH!;LW94xAZ|^!niSrtWo9)!CWz^A3O9 zF>5CX>K@?1AaJLo%c}JMFzB?iaxD$W)Y%H0gGLaQ2!Gx(Rd3@D6*Kb2DFfcPlfv|& zor7!zoy(_N0cFDEK5!gJP@}8tqfdokR2b%&9y0JbUstDHGH*az)BGur> zoq@o>r~7OMBmKH>9=%iC&HDzqnc;432ycq@QAiVwO^6+Sl2a;o2y8 zs_&Ji#1a~&j`OEP(5{XQeDTd>D!d1{QxAL>(WLWo(&o-D@RwF zU@ge8p~nbZ$>+tGybT^S_&sOPk9sfoT|NyzSQh*r|3={;_LAy%0*9Kq+I7<@{{tfd zi3Wnyl8@{O6(bUpbL`ZT&m#S+s9DoeOIjD@NA|Sgr&4}Cx95j@aOztoHgH%B19;$- zBsGP;eWF(Q07pZcRZXA?8>&z5Vq6(nbk3tS%t>q6BhR%(5cEb5Rx#)FF6LG1XQ=`Evl&c#ZAPgLR}%) zr5EbfaXwm%%no{jm_YhyQN2CJua4A6nL%m{LhJB;Am~^ieogW&8fEKGz~-sCg$I5R zT@z%l)VAbn83xd&HNv)Gv|nS};PU=L)zm=8Ez+jnALTyigra3Tw1{aw2MTfp)zV3X z!FVOAMDn5Xzv~e6hoURSp}ix!U;*@Bc?F;ICuN8lvmYWNRLTOoLzUVN(W{M!%`V7b z$PQdkeB72=Y_=)UM5A3QSr7;f`<$5&Bxf1-q}5`A26Rp`1zj=3xH8s*OGZFmzT&^F zPEegD)rDK)6GVwfG32J|g@V;=0J1;RV~8s5uTqY~36h7wpz`#K{=bOw32osNMBEte zvQDMe2o6Krp)_Nn(hQAD{ee>rzhP2uYK{qUq5xhXxjC)E|4L!RIqf*!kBQ?*vzein z1VtRKyo-4Defm(u(sevFe&}(^Y`?DufqnfZurvN5=+IF>AQay1dt@_pEt$3Nn}#Et z+&HxyQs5WdS*s7ml3VKb=*$!9T#7(4w3N zJN%2&`u^J(ml$5~n7>M6R|&Tn|N3XFtC{rUL-!u1(7xZAg8i_|>@z>yKX=Q0u-^)V z=3fwj_+sqOv98#n_`kn*<-r37UpO!u&Kq%A;PDCA_VKsR!n%}Ywb6e_j0D}#2Fz~l z9hIER)=H@y81KGKT7fj7P>X5JI5Myq1I(uB z^#n-T16%v+4u2>4wZE#h}J&{2*t?!$*BS|p_l@KJ5 z1V_z5-|?sLg%IQ6_puKw*#17wLfUwbNDiEKJKF?4x9Q1={Kn}G*306{bHA_@E_WZL z-4d>4T)*UOPBJUrGo?K)0vL4iJvgT&Dipua-uyp)j|k&~6@^*X(pgHH{3c}i7(>ka z3dM+B-2M|J8u@_1xK}kBcJwoF{+y8Pq^r-=s9Q=moI|7qn4#&;eUp^GliPvE0vG}e zH%gHP-|d%4{3iAe3*n)$Zb02FjGMic@cOT z287?~#{l~lWam}WC7rWeOm%LuU%Y~4b+M9#-nZ^}Jb5h(&r6Q?Pd!FqaNr%bJU{v~ zl9A(~+q&#KYZq9S?;;9U(CGuz7ICY;XYQ6J+@Xpil0{w+;)K=U-~_4!@$Ipy1o7sz zRXV3(Ys*#m4l(~)%x2c&3}>_-9Why6G7q5Pm&pNSRy|X9;Vw(GZ2k+mW@lZ#*a(=S++x#{T43#Y!etO-=`z-6!iC ziTJmsrcOS@u89@h>@A?HyodjQD#(BlWR$PKpDP+0QD_-p>?^$`2n=cDty=+Z2RYZf z&V9JTeOQKMx&?5FBSOy z>y}+nbk!1mj7^SBYntP&Dyu+dSSG=(YhJSozWoIE&tbwAiDpY^O21AT#IB#SA0b|M5SkYvPuteHay~ zC1Xr6z(%OuQMYrmc0beerKys6Mrm*f)Z@!`&& zrkgL`)0h20y1lwRrV4pJ!WOEs4@y1>SNU*CKFsq$dd(A{6@Q4D@RPY)KCusey|qxt zuZlM!t2IwIH1OG?z4}>cy`BfjDt}mpC7Z1qy^s6DBi|PKS&?sZ{SodP20nk$D%5GQ zRAn{c>#T$-pBz#RK|q~{RS%ItdT41m)P6s7>!RAsY#+R>GjAWHsUJ^k>cX_9{v8`v z3T2EmE+f$}*f`DvE+dCDI*gtlhe)2C0X9Q2{^|f=1+gGibBSqi;S5J0fplVR8KAnA zxwWf;AfxYg%Ycg(rgdWyic0Ez3o|}f-J18qxn6G0Jstkj;QPPg-#}Rs4wZ{nC^?&_@B9%p_2H6RGWwFna5cvCe2 zoR64!R^*t{vDjXUJ_z2yl;oJ=vCslz$?Z$u*dcfw$iJ1)QB(p(4< zcTp1A5thSHjWbobmIcr+GOSIST|3{bnU zKDY^S@Bc)#9NpbEp(K-NVekic+MqIsQqwm68^H>n{q*U zAnWCxoHF1J-QBShpn`7QcMy3f_92e>qNCJM_a=VCcj9f1FQ#s3uwg+no;EGdgrlQN z?OBt04!+o??KwcS^I2+0pEbqL(GUv|HCFA^aC8`ceBaEBgr^2F3$-uCGUuMo`VtT6 zSn~~ed0HKot7(1Ov^@ien_wct0VR*d1kZHuhl|!RCJy_759|5Epuq8T=$FtR%OAHT zFABfnB-)Ph!mHiqk0(<>Z1-7E{n<(iAN3RB59g$uy?yyNt=hF{)hZ^N#iycGtI|%d zJN@sn8i=ODiNolpRsqP4HW-Xne}(QPp+ffpED3u&>aa_g)WgXs`48c38{}>HRI~w< zb+4(~*Z!p*`&wb#EJc(c$>Dvb;jn3-TFEpVg}i;bDL4=_TMx8u2FN5pQY^zSoaeUN z<6xqt$yjLU^nO!%0PT(-XR{?h05om;wiNV8Ga0uf;p`Z{nwxabarG?>`*W!{B}zf| zC*C`s1!lHj!!uz8pIZH7nUV@Bcv{Tv`?(!}hXio>ze7&0u4nwt{UIx=pZvDxjn zzefX0VSL+TBQ!V*$tXxL+6&(U0y)@{^N#B^1%J#dSm6J00mLG=4&Fpa>YJwFEyQg{ zf`mBs@0f;NreU{fU}zll9o;-C_hL`t&wkT#0DlfbBY{6+rBSB-PXBQ(8>QgTVQk4d z8U`U*rrq1H<$H&8CcH_xF)su*wu|NVaCk8@6B=hUos66YM>L15jJkpZla$HV!uUgQ zPq?D6)yAxUG_0VLdU&gT=Ys1L_2iqT^sU1G&;JV*E<1!INV zdrZk5Q{0VplFaviajc5JlvZ(KzKz(k!hF29&jOC(CHMH%5`KqQvVqdG2mQ}cj)=Gj zCr*&G6w+86Q+CqADddE@X-=PfoB+0yt-Zs%kBUE_RHOTwBq0u$ZW=ZM|Qr1wIPPTeVZB}7H18%5e%m@T0w-3=S%l)^jgY8fY`oaR#=Cc3@X zK-cd8bejw|7|&V$-G!Z`J_A?7SKUDA>g1~(9xE#qPrHF7dFW{M9bJ7(Zik4@$nJGlXKz~f(8^o$9{QMR z+G85K@!Is+PTwx#9V zjg^)9DOpidRmE%5J-P2ymDK>ko`q`a5W-)Bg!QiQC`2MGuUlP5e8GmYM&RiK-9QYt zV`EHu&z$z+SXBWS09OzI0)T=iD#E&kN^k0=Qzc5A(cTd9ypJs_nt$~b6lHUQK=DGL z2@o>@SPP6QhckHj&5iZ-DR^Zyt!iA2P3qNEws_URR%j_(C+{B&J)|R#&ghxousf}7_{I((j=Q#upZoP{J)dr z|6C}D)ky?4*psd3UY1Ig0sCGc?L|$%rsc#C$$??>=2q3zRu;x)#vuDwdvlqfpr(Ql z_<(_^PTiaahVR`_Q&&!$g&S|Yk*$ZatyO|$6gx!t8(o4{=?3f&;iDbn2QA(29QKcy*pR8@DZ;46AL&jN%z39sS$zHMX$3J0}%1 zKw=pXWRUh&xfnhxVvxqCMEbK_qSVyU)B5O|x{0Q05-7Y1k;+ni&%c-A9#AeE&vv9Q zK11Rs{>fiRxj+|B9Ewy^oY4R?jvHDFi)k%S!UZW*D<_E)22v2Nscd|S$gQ|9Ie!=c ztV^+EyeXc5rGj%O+seSh0m3%Ml%BBdSFt!8USbD&_nxyab|7}(oPAyU&XFJewggwd zhws`&-F6}nOV#Ky8Dq;eFdT)iZjT*^7FjXTlumMHG+iYqF;s=_0qy-H3b&$g0f7I? z%uye6w~xC%iIw@=t8wp*G)tDkgb57FNx#drMRhfG{3?5O!fI=0B`xa`9a{ot71YBV z^T9SsD;XdxN9ttQj7&#bNxHW5uajW|14~YHCG9-!?1UcNdbv262WEykt35d*wrnY| zcBVC)4YZ(YoNdtDmao?IGu{ojJgs56s7v8hPJf8MBy*oj7XGsz6V1M9rX3X=S!Vkk zJ*W11=3!N0;oV;1OmnWx#&H827uT0D>+ld;}_x@fV7zX4X5vGNn6C} z{;gp}^Tc(6v+bm2`0Iz@50a7lW)ix9H4&TxoBwmgyQXxH(}dXyoy~44B<1GUO{&ur zybT1ao#6A|`32a)znGRC@rmHB|6;0ksL|@#8z7Cpqf*YcUZmA?pV#-O6Em8w5`MQS z-b<>jT3+y|a-zr(c69ikNgqPf`nqZB^d`GmLb0f~C0;5{sCwvknbaG2&H1L}byEzw z&}FLLfV8yr?5(F#?$IQSP(4i)&qjDe?3!o_cE{)&v1>R#$tlNYQI_BtIrsMi+(6%7 zrOS~d^;36QLZw0Oe$!OFC4GRe==)S!Gy7WL4=rBJ@(>&;Uxkw`pGrhK<X?dIdOhxkXIUY;q*2V&ClPqtZn*F2iFrH{lJt z7Co#QX*Cnmh^90egGKQ^|7QsH6_G$==_{>VKp{^zH0Ed)LfS=I0GR?Ln@|W`h9Zm| za)?n%>Tw@zSxVSQ`p_Up=zfn9^=|FbzAB~U;f%Or} zq>RJ^gFKtecg=!N%?0m8Ru)_dqz*e2Xr%V~!?bMk^>8tWHjOG_@%O_aG#z_{7MV^s zU)`r#_3rM%42e^}3t7BE8p*XI9Ev36z)EyWMRQW)g3O*Ql1_q-$UDJEMwu6^fPlB< zy1@hn+3EiAuvxL!l_r8kGJB za?98>529{tQJ|+oPOpGL7jh-?-a&-=J4c$?L>MOofn`7QzoD%4-x^pplE`osWvMbq z`qx%A)z{tZE+q$g<06=BjZrNLD!IjU*xgw^kc^QcVVkZ@t||H_MxItkNaacGz4cgH?x&)Q(eC>*<~T)qEK}ZrHr`r@DK`c$e8%4QQm&W7lTz z!GkxNwG8tRbS4cZvqAX>X&eWAXQHt;mK@VNGC8vMgjvWUIWu@Y>6m*YGA3Bsp;~9K z0!VZHfxV!z$--BJv8}NcDT@S|Q6(ZV7R<^9${avNR%MQEd`wUcju0eoO&% zuGojw8|+76Q-b|C68lk5cdpoHiosNK(A+A4J<5LM5&)wXECJ7ruG9)z3(@9I&5&V* z;>-47DuI!ulR!&M;&x2S85o<{B>XHdyB>YlGJ&*rU1UbC!i>QBuO;+l_TkI9a`a{4 zlpL!$019!6kSF@`@4Ir>q6e;|5fh(^9zdYlMAJ4&$LeCZuu`*VV^utBa93x*4bE{t z!=#`^%Q6kf;CP~GJBexTsD^>@9Ui#yF*3cT`9zZfYo9P}lf9h${Y&zu?q7nVIbl+h z;gvAn8$M^Jp|3#?&pyg$@Sf_oihVn7T+h z`;sZcV_WAZhnuZWKb6SB@2~28YsN6e<4prh=sBhVz{YsVFdb9V{DetuGHW-RhW2#V zf)M1-6uc12{{w;k&I}f|^bpIngNz;Qy;!yX=Kl|wIptk&R!=m=ldN_$aAr{dc5X@7 z!(9H7%e8E7>mq2R#RirCzl(M)dS($P2%n0cS(N`AE^Lg)SU1Boz zh#-4}lZAd&IKHS5k^A}}*+ZMF|--6Yj_LVjy^9{LsH}2A9LEj#EBxrcF zWOxxSBp+8^o8BY{lU50htNSeXgN)DT;F#-9RoUi1V1gC&wUZ6Q9bDs?Y4@14Px;-E#;gA>*b3T6=Y?1l9 z7JczD3QN+W$?PHdSCXm$@H0*q54@Vq(|Q10<6gJXYxyvkA+25S4c$CIr`hV!TW+6@ z?FekJ19zWaq#9#Y+OR2|2Y~e-+f(>Y*ohzyC){{l_iNj_ zhwV7Jqy2?gccSOSz@QZ(A5Vji<=B{W%_OL}vNu=GmqZ+&_DXc&bJ#>_8GN5u!l-b0~WY-*cq$AxURT%RP4;y#TU->mey950bha! zQJ}!L)TD0qmM^>FS`UU$Z|VGH%OI)%-W$Y8)F#{3X5IEAL_%&?jx&!XTOK~GXIfPC^AfJ%_=={e<&B%=6_LOVV&K3T6k-NzgPmJWFaEq z=`bA2qJ>BlDEz~A1aX#+$(&n$JZ<*|hg>4&!R5VZsaJk;W%+94U{v(Ni*Ch! zX((%eL0q9&Drx`(hotbMAOpjsaVue3#~QgBOnI^5hGN(?Fyl&`-5@u6qbt zs;>1ouv>e()`JZRkn#q9&_Bbyg{i7@hJ-xA@B&1JT~gb9p&e!!IvtQWGW{v>=9w{ktlI?!yN&T2|9Bxot~!nixUM==&5yuOjL@X z(4RQtA|75c#KRH4sQ8lp4bS?8 ziiXCTTc8gBXoMWG)0)pIoYssWinTiN!(&ip;HZSdN2(F>e|0>PPwraXw3ey*(7EHP zrl*CYfndx&#Qh}9m`vaF+{}fM5Qf|<$pqcyzaUOy3$RXP49Och707@43n-6aGwROl z03WV-HJq)3)8%j@3q?!VVI>YHTdAVkZc=MC({>%{%RMuq7pATN`m9_vBRl8b_J7!` z>t@0PJ?k_}dSK=^rCE)>FOJIe;y`<7metcy+!v4*E_8c<0$%rAxPZlw6(E#?^r>D! z78QXrNZv)Z`Lh2fJyt0*Dcg#<;vyDKIjCB7zhIsdw`nOd*dR3IbNSjhj*R1cO)`8c z@+y5PF0e+vJ25^ir<_*e^BCf>u~PAKs&9~pmN|^C@w}zWmtEy(XO^XS0qwMNAmJWD zmSL$7+6e^c5{`!5!@u!MgrcenTQ`c`wb~S&;T~sAiE@EjART(d=AV9D@3r=x6iWQ^xV~%5H(j7!$(~+;c%4T*Bz>G{+mLz4cYZZd#l8osMonjO`jphy4Af>OiM|XaD96XrK6IY5N9?Keg?n z1Jd8OeUx51{T~c$p9sd*Pxev&m&`i@y0TPGDmi22q^gjd#KBnua97!!6(l9%GwzNZ z)keXd4CI=3V{ncA6+ED)CjeTrJJVk2;1z3TvLsI9v&fu^#S9yUi&C9n!Lvb_se+5- z-Y5H7FhjF3A5;~>*@&S~y7Pk6Wz0EFsB~|-FqA6)ZcLsKe!DnGZD~&{JKNSz&i2P` z&@}AdLL^2P9QLeppo!kV^zX*e$rf;DhF4VW^ z=1{_ccY3FUz^#G&@oRq>c~qEYtK;*a4d&ZXcGgV$Zk<(I%7>G4>yz`K>;Xy=Mr(HK z3;gmj+>tk{`il5g5!sF}lo}#!#!P`1%br%y>|I?BCmH-*TBd&&EG=)KNbbSU6&y%? z6^Ic;a*2a1Xu?TQUSF4LtgpqDhO*`+0u`@WT|wGLp0=X0s;s#-<<%fv7%Jf<3W_jG zt!c1eS6IWj!0ipIAsw6{^fwMgT5Du5ZE zly1Xu_8YAFV*+DFu!gq7m0y659DX~DJ=+h5>~P3o{4Ib&sF57LFxccHCWT)yiUIWs z%7Avs>2YkdAqsW^?#$bAU*9omW?&yo)H*v|DNceSRJ4yx}A@M zbAtPZ$UVPN^h2QpH7sf}tlUl`*dZIp|Ytb@y2|p{p-vijD?N0)Cp3H2gKf3>I_^

!Tw_xZb%s^TV$^W0m%DKg%Z9pgpTgmcvU{9M;k3h8b(o1~4iwJ#jSue#D18 zDDh$VRP^8~$iv^!!&3xKYEImPg&y+BfLBpba@V3it;EXJuT%fDGO<(=I7aT9$bGXi zF|%;wkAE6{{*}o6S61STPh)LKf`!EloOH>9D65;U>5Mye0`7s}baxfqu~LS{N?29( z9Gt|i zm#PFkNH~&va~b$;=obNGo2qYIN0C?vMnI?+T<(@Wqcg6ntgV9rQze-|d%`Yu2(eHHy~FfU<@GHH#JvP)i})zKwp#ziO_JHSMV$T z6_kkOO%aX=(OwU76H23-fTXj|y;4GVa%QISc!StQbcw?Oq~0+h z1oak>wc*3oZTr@Ut`S#u_-kX6TZa#mZ<`*OnS<}PWB-@BHvz1wJoCoy4Pl2sMDZeu z=LFFhc7znEy(&wP0s#p{tz#%lf>a10O9QQ@I{nwSHEp#$TBZ$EW0bIl0Ll0JJW@S?XwfW|#6V@&IV9P44X?_yglJPbl)gn!2B z5Us^dx06o7Dtf^HGx%WW1Ad=}VHUuGPB$#*P`%98OBcP@7MV($T9m|MXqcr0HayZ_ zTp>6Ms#xJ~=5NB0FZ_PBK5h1JpKoER^#@;W z;>bXDk~c(*gMOr;C;uwF13wDt6^gvd?k(Meko>y78bdSXxM&=8t|v!IlVIJvZ{4fd^S+w%VN2UZk-Tx$dCo+qX4Nf-Lc~EpYZ*>0Btk}F+1icZ>jp&%lI^mvB;84g)h)2zCBR_dapCGIk6ZZkp4n{3V8&Zmr-rv&yH%1qn)Hc&IYQ zN48EIlSV~{McN+`8-m;mZ9GPu$i48!vkVH#>CgHffrLC#=T5byg%Je6Dkup+3kKFd zhUbsgVU|Wm79#~UtdfMRm(08HtV5U~0|3ExQ9t(Ar{fTT%kd&fG&6ebShl$tu zIMf5{jx33gl!frj`h7jvPWvKt<15yIK4gjJceq_Xg(DH;+xRkkrMd)|{rJ8Ck0AW0 zunRiP;{)P9b^pnz^e5!!#Gljzei+IL2&)Rel>G?Y)k9S{+3_f{11)I+K@5{5n+QYc z^KILAeNIpm2nl~20P?8ymnZF%3N!;+zY?tF@rdubk`@{oFK7RlF ztw$m&w;Z|sItjcpn?eYR5&yB(Tcl~%@f+EX=4a&crAlV<%5E`;f#mu0)%WSC+=I@ z-0OKJfxQZ9>!-CrJtJpPaW@oy(ajiWS^l&*7~B_sfjN)lj}?YoK4lotHgGD0KCrwT z)ZcQ=#lSx@G*GV}-`8hdyw5|A)1WB{@1AnY+6jh+e8yM|$Hx*$EqNTH{`YFL zy_&w`i@nV~Tb|6H;}!QwH5plImEktIZeLj< zM-9GxVT2xH;-K$T0A-=tVOT3tvYLJ zpD2G&60`GmxZh%0slAxQM5e($ zFnAb~(F7~3DgWlT?fURews}akOVHOOvHo0JCeqDH03S{(0m!uRIE6gG0a0|fr`*fP zv+h;i9v>MPncxrw6uB&?M@q(Gn=U693jSLV)HH`1taxgj|t?_99RwLGD>{eOKBAv8G&j}Y*TP{!wMjGN|U5)g` zId0^3tRgbPtzdyJCPUQGfjd;La$W7&0`-vZEJD%3R1k<3AhWbR@(qkoPGrHH#c;M2 zkQl}>b!8Djs|%U2jz^!f0bl#`%<9x6Dg1k@T#~82t!o1JS#xmLO)d884jJ<|-V&lE^&EwV&gl27kWN2I9 z4N0DY2T0I|&E}HKc{1syUrS_ zQJry$NDTsDk?hm_;(*9W>ooj*?>z2s)bK(R*3ubpOpz&0qJ(uP%8X zNKp5XV5`NR>g@v;`}Mqsj^`Z8{MPxIAN^0}M;By%)XQ7;lt^79y>%JM8ZymHm8JnCg?NBvdb0wv4T!hV?_jm`WhFY}}EnIHA?)}YL9_0mGPC%*T78UEJVbf@np z>FH>^?~o-^Bu$ho!HkjePHPA46#ycGQ?+&4O{?>6T#cX%x2PW+Fw8T95anMB%99FV zKud%1(MLxkSCFJ*Ls~H9nkj%Kr{}y(*$cAxeckm1Mz`BtNkKsm7$~g(geNgC zjqZ;%(UHjM_1(0f0Q+ACaku*tZTgs~S?12O?tcpQkbQTuq*4&)9Wbp^O`QqfGH>p3 zT~0__+*V=vTVMwug3KnQg>tmUF{`<-8wr!TyN6A=7E_;~T~i4csKq`!8KC1FLA6dMyVduV!qh;bSJ!?KoDF0{n`dsx8iH_!&^}=@Z!?pa!yh>UZouw%;g)6t4r@h%CN}vf>$vjlb_~*L9f=>F6MvREthtw$8HVHdusq@R)Fjlk2DM-ybIQ-XEVfNRw)z>urQ=8QuH=(No7M ze@j4I?uF=)F2Fc~?*CHskAvWa?|cO6-m(2`yxL=ZTlyJ>q4}}CZU6m=$CrG3`}`Z0B9mAD z2u{Y!jRi9H;m~K~AWhsX(B%MW1?BtoYksX?Y=SL)p;{@DHW5n?l+t}rn$7Dk4UVkC z)PiJIJ0KyOYs-*ygeImrn<^^c2PF`-7VEWt1e%kYs;xd{5#mDH+TCMyH#^5CS#LoY zP0DR5KlJFGIUgoPxau}nM?c|h8#Mpp-nPMyy z5e(8%?E7eXzsS7e>lZ9xE4moYK*%HoyK2$niKLx}a;tkgswX^@sqm|AHC0D&O;p3a zA@i2qsPFQ&9lyf4(CA*=my>(Oj7)Gh@XZ1+Ao+#+O-LFBDa^M!EKz)(+riRX7R1V=ExM5f6&_Y4<2`GqGMsHi`J4n3r+!6h)JA)%lOHH+S zqKm!`irX?Uq0#IJ^?s@_C2RIg_eY}0vfM-dmBBl3Od12#qH+vYFY1e=_q*TYydn?A zkkBhpOatNUG~IindjybQ+gVPB8|HfsfUmUqUb>} z#G`?pPd-5r>c#uX5|RnYJBZW)EJ$k(Xs0lmelQB=_}s|2nYHku#NVkK@PCE;zZvkU zEQ-tp2r`T?Ob0a^|03)Fzm_9(U{kH+h$`7sTeYUlxwaN2nw#rd6--lUhNZJ&68ra{VGu2p72&Y3Ag8L^$zAE5TypMZb#q^sME9Et9jh3 z-|jU$p8tNY_zAD*N%WA0go$3o6JGg~u+H&quVTAb{PH5wc)M5hxLYhDik~M191YXi!Pm)MBu}hEfcrtYIaqFf-(4p#2Xrfo zH05N|!bcLGD^LHAJB4OTP*1)D0mugS)Jp^c-MZ=gmYn?!6m zKNytMr)YnuUQ9Cd{_xd@W}n%yHf*4ZU(TLnlL7?~yNu!~%jhDz{;)6j$C*O5OUVIe zCW>$?PVY{)f&_#y&Pt0$`5a|R71N~(S=FXiDC?};_zP0Hbk+Eu6}T3D8uopB+HkUD zr71P}-^CCh#d`@&k!r=87vVZ)#xwbE&Zb&sMw?q(rO|@UBD#7lTfST$m-xRH6Ai<0 z7MIoBya^^w8ARV>1aatd3^Q!}bZ8CE?h7DC$WAw+WBBJLMB@ea-T}@K-kgLeb_i{K zW6!v-7BDz@Udhr0OXuMnq5Ty6MOAG@1p|}uMOcD-#tQx+#y#M6xCe|%_uyMFdshXF zEX7>@fsJFg+a+gT;fa@loW44GV6}Sm(eVhLd-U=P(L;=|T*-WsCxV%tl+jiQe+Zr< zCkTsrGWIBXF+eQDG@7E-`+D3D*u}!5E(e!F_ejzazh68d#CBmSTflkPDa8&cr8yo{ zOx&6{%}qJGo7@Y7{LO9PkuN{imiUnk!KExvIP%LX%P(=?7jDel;F48?*TViueHYIx zNPKI~o+kI@u$@PZw_%yeZ#J4{wuxDzaF_Na3-)!)uUg!bseNJo4Gh)AlE_JFW-m1N zG!yOaN&Nnp&{r&tZFN`q0m|z?($Z>CnS!9b#dFcluTb&O>V7CxgA8&@kOj+cIxSp> z11!fj9IzaC$G*!ZJHe&Q6>{^wnb=rg`eO0ioL@G%?}Q7a<})s{^>Y@`m{a%WCi{lp zboT~(%T&_Rl=CZ~Fb7|5gQS4o$Q~@)Qnm)jiP@2j)zt_w2nEdzjMQp|i9y_|3yN1< zy@+f4h{O_E;4bWunSB71qKnqJ!iXk7-Ia7nsBQpdz2X60(ZGT5)PxCzZnknQMma8e z80EzFCZ4o5=$URa+^t9*Osr8g`pi1Ky5Qhy%%}1zII84yoOvbDNs+{ca*}r^)2e%4 z7+4p(m@Gb`Bjv_D0}&LY@kpT>o9hqkjoqaVLOzLj=}p)Z$*QV1PSRKR+`9WacrL9H zZyq*tre8Pxf3&r%JE=+BexU|6ZrD%ZBh+SFO@%}a+g8xv)%^ScxV=h;{2nT!t>YiN z666+oH77qqm7yLWV;5ZP#S- zeR08tr8Y6`?h01kimWkj|sNxWD4R$7)8QRsO>aHNwUIBa^|kDzQw6t|M4>a z0Wyk0{9UwU$x`lHK{g;9w&i_RB=bII#Ed3yEVDsRWMO85UX@ZJ0^du{YXv9M~vG+>}KvBaFIU5fM{e9 z!VkknBK82eJLVtH)jh0CX~I|T&iIwA*jLPVEVr7_NeGbu($l=O=i4^_Ah|ZwfSHn| znvU~CptbOiCM*jP;YQvei(y~XnE*w%NF`=T;@F1gv^xR@SP?_pd{}M>7)b37?Rz0+ zV(JkVQJ$4}DT2z4TX4_)y!#f_;z~86|8|G*Ll_xoF@=Z7qVvzp3xaA|(^zRn+HU~; zBH!d&Rd$KtA#~x}f_MT|MSx#|^I(E$ z5boZ-AD0>h>1zWiNSI;ys<_+;8l510?9a(-PWWQko;YSu|bY*jLc4_ zUt9a^-OG;^JX(6&_JZxDk8gL*vF8^L&%8%V+vjXAjm^XvrVbkx&1U^a09Rg$I-K*{ zkVT*rKd_GVa0eDhMhfnmD3{sJMT7KNfrphc?%MQEPtF9ZY#$ zt(u`O&0~n8R$4kTf+#w!kX9E;WSqBHdR(12Fvz2s9$uN)Lt!~5Ic$_| zh&`>9?7j!i{B)GXkKi>~oMICJMPh6hozl45uow61IHQr6TmV&(SOoUwv$q12-Fy%H=6w0xw&v8Uz@41gnl+2#3$f7A=16DbJV~|Io z|Ca_%Wa6O&3xs5tm>+kqB!6bgd$q5@?C({)1{*$|9WJIVgl0io2j9itXas4llV4VP z;g!DTt#};C=LKDT8_{Fm-U z91GZZNG;L8+)((G!N~(}!53uSG4QYyeXzA9e7NGZ?8uaHo3Kp;I}0b|wAl;hlPR&x z_FodI;$Du$u!ur$L7@zm0EhqZNCmOHHZZ3EZXm6|KuyV4w0tSPK-=2T2m=xTa>Klk zAe`%>GN@oArp{mtf31Le@qU^nf6cv(%pcJ<@YZO!1Q1vt-T&chlLZ0Axehp~5(iKT za$zP(m`?!Nf(eVkIq;bk+0@)SOMgN5W1LKV_so2E)&onHG!@*36(&@i zOj)?eFCoo4j#F(+7I^M~g#*CNYCXNRDt3M7MeEd;1 z7x$c;b&!qj$k1refyQs2R3B=b`^JNSvdM#PzKJhW8>;D8Ju^~t_dx`7VfWV|k4%i^ zbVraC-Cm))!ZjdPtW~%g84e5;v%RT*0&Cyn?$((GQ|->0w+v03vn+i#8ozx|JaeQX z5-QM%5O4D(lXXpr6=d=Ewci+F^5I9g^--lXXVxG1iB~gx0_*MD2Te&TWp{O%rjVn? zGU1ucBROhdR3M%7K;iaj_j!^;fYDQ7V+UvlQs2@`NZQN3Zgba&W0Sx%YHM!fyxov# z-b_oP-l9~JrWJn5)0|G7e=p|hOD9Y-9&=B~ z`4t+eT}|%(_k5K8|FI~Q{e{X3Nlh>05{s83!IU#=DHmsPro}mC*6n;=pW!)|sj$`I zdaM8TdSgZIzh6n0n^w1YZtJXtTu2MjEhHnd$3`Y>qFrtw=LNZ?L?JGwhd@bWEa_ip za$gE8!1T-Ujq{S?JA}(msfCvJhXZ3h%U=o#Z@uDj=@~FQ9JJvUBs>O>wJH2LVf4d( z15GXD!=4V8!8e+r(|8eo`EU5|HMVka%WAXF!P5J4*g$`_80hDw6m+jhy)`rS)|8Z6 zInOq^4+QONLjX5j0Q@glpAaarXwhkbrqlXzpmP|%s^DdeAA09|Nbps-Cn9GLtVu6V zgs|``I=m>Q38Jk{95r{kErn@P;CK2e+z@=L4Ku6O{qrI-rc8my8uCxpRX8SVi*w1i z>Pr{^LFY|p)oK745XRtY1NY=?Twh%c9W8B#<>HrvdYcz>0h6)sW2Y zKQ@-mXWTv%@3cnv9XGz(p*`50{w?8jk-@=lcux=U1o8juMrx%_c}hPll3m7Hf;aru z2IG@{Ffdcy0=rS*uCU{-G#|qN^lM{dHAYc0X1+Mx2)2N*#Vw@Z41hc(w5~uZ5M9W+(li z+9+_S3rM{G@hNa-vv*84eQ!sbd7JU&F2!5Vm_EW!SKenFT7?A z)URxPefQ-2E7U;Nr%%BL*U*=B2x4{=AFQ$daP)OZL39ro;Z=8fRmW^5dT)9cX~}W> zuYBf7H!ILRfp;@)GMvhf+&^l{ddWnvefPSXSeHy=Ys9+feiepUkjT;^|SR0iI-RZ{3 zgce-0CUzd)NW2U4kr^bDOg!~7()|fXShsjkwJ*dsCEZ~A!bR+XlUGoTR!}R(tFtlK zGL9yr6+gTrJbzJasC2zAi0;)Fzvr&wKsDcS7}OML4+DK$^IHdTpkWb->r4Bb53WI$ z_CB{8PlM1%zCYRuXJ(o{@~&Ca78=9c*C&RSTVK=_8-}jsEn0)2%qw1lk3xT~E*7^# z7!_X#J&VNsV>`TUHX)wF@GIE#v|3{AOSBoi``KE$^iTx^#CBvd71eX}LV^dnegSxG z;$?0eI`_Ir%)+nW79lHmD*(~Z1~o9o}Ir z9dfzW&?%n?!S4mmZ3!;d-i#Kns09#$w_s$%`Fb!Eo(*2njuhu>ul@2uv;Tnr8ttK@Aej|3%OM5V|6W$5$xIkzPLlBl%Gs9@D|smf6X-sfzy1OjZFHs zxn;-1Z;alsUhYqMX+N>^g%NqiLg@>@P9)jabH79+AUJQ!cEkeb#%Rs?X_H$I9{cm|jmqYT-AMOc znxV(xXTfFcn1yc1sV74lx~Vhy2vc^zC`axN#P0Iks}k~DT*YUkpL_-DiEOt{ux#vnpwI z6#t?-iF#llu8U`zy%aVAkvFhcRvUw*vr!Ul(sDT{B1_e#O2=#f{ls^>6F)+uMZ_Rp z5ShCk;NRuMQw zP}~FHAH0=!MM5nydk!H4{$2!o--fqlYQ_d>cTmc2wYkNTQ$i*E&QQx@wtW}|IJj#n z0Bpb))R}=}udGz##odMu%cM5m+qYk2{iZcF8({ZewPsBX;$myoRElx_ikda6TDzq;nHDJ{6>W8e4iW02*s5KP1#j3*hT;EO?)|B-p@H?EkFTjd0)+1c;t}S&zU6 zs8k$`%npftz%Y!4dj&^!f!4>cD&;VZQQbOhgkQ&k=o^_gcgbRGN=*Ste*>mODJjAJ z!mqL|mB@RrHqwK>yhRr09k1?P{PUJq*XGr|?bWq&^(h|~ObSQZnmDPnfe41W z$PlQzMdok3;bg$5m?=vy%KP;=>w0~|pLcN-+%@+AJO%Op2~Yv5M3EJc)Y@sbwY%|3 zNKi78DA=k1`5u!4)`CI4qUMpBxOuVMz1sa=O^3JnfLD1iHa>Wak#Z;4)mVgR=eDH6 z3N{5AvfnH3kX!(IV3{G7MLrKny%0hDZUl}yW?@@xN%U2X$fW@9J28~4?eQ% z?nAPPv#_K690C3WjmmCyFHac&+)0>7khzp31SDW*^WB7!ZRztBq<-Q&`=UQKhVQKI z_NsbPMw2t@zmhPce#88VLj4Sv)LD){?EW+Hc7xi&tgBs6ex*LKz{-cqa`W9$xL5g| z_CKlmGRe4sF-}}gvB^OU8(v^7&@7x6Oa{|ASjDU`asIOKzaA9!XHJGcWkNCh$!}wc zr?e@hzRWY6?i0zwlkOAT6aIP>LSsejnak6C-XGL(4-3+ab%yB;J|@x*61MoW1Fj); zD_X8W^nP!7HErJJx4p{tfJ*f~_%D6=XqdQWtL}Ig?k0BxLz^;&+&sm>?eGeK{7FOmmaGCNqu6*+DPtr~db>=zcw3I`C6${ z=>B_BohGic_a=IKj@Iw0IPPw66zO3Rtu=LJ`z*S$86);klKDGBdI&w zf42Rl z*1i{fhD9_TrMQEO^1`AtF~dMD;d&6b#xOEu6oN>{1S&}TmERX?h1mJ9uhKBm4P`>? z4_Fe(KyUR?sI*7cyvPwVmMo9x<)GyIn#dQcUO-pjW@c>sVSi7X*B7AoBoMz z`xf;`6N5_6Qtoa{1n#<${sjpLi>c%r6Sa3(`NHq6R?YePkKl8F&PDemT|83b5Z!_Z zY_?I96bXDIk_Ys!e3$$Uq|{NOOj@(4s;agU==;FSNA!@Us~%<3^ud`PaU4~v>UE0|*zwy3;krR!FmdO?+ zXqa^tVM^{wK#^`^yug|ylbRYhn0~0reR{t6j#5G)AJ9RGY7fA3ce__oY6ab*u2L#3 zTridh_Ra3F$Uvy_3SL@GLQkch=!5cJLP(@h42@=}iwx^5XEmY{HkBjLpqAP-sO)-r zDE}Xj*gkEe+FTBJH3!wyYQlU$p$!ti=1#Bj7!(DJ5+BLPUDLRBj_RrN0l7oVb6zg#zfM2MO_MSR(~Jp^1Y8Z8#6x( z+Owb_427*asL|lXfsi2i_sK|XFcfqB5G&7Q>li35IcD>gBg{(w5>x$*ZfV#c z3^jn`@&wKz1HwOZ%GSh6q2e34;1;{y2dZ>xAlMf z6!lvpHT0P0V_bzytFn};Ml88-sQZsnDw7pMVm4G459~tF&7B+l*(4*!n(U?+pvL$i zHfjKMYFua7%}wqr$u&Z`%7=HC?rO5O{kliWzl$5xO|-Qzk8r&rZ6F{Ay1t+d6!b+Ix2v4wD! zyM#f+2nM|5ZTElsTUR)1dT&EC3!Y_co9xH@bL<5V8iXzq-3~aIJw52}L*n6K3UiB@ zAwcZJS?uQUOxA0xeuMwU0sl^}_+#AV3;_fzo|w-7g=qLS`nW#m zzN>EN$gdX4w&qAmIAI&fouQ-zT#q7K2Q)A;oyB9z*Mt4=lV$aQ+32}ANQM~ok&P|C zW!Z!7WXcLBq%cJ207*XD3q3=!I_=NV$Lz%-L{?h%O4zXwk{66o_HpF8CzVyj{ghS;9d zWk)`G%nrtVr}%`hBO@aVDr(BA%2%xs5FXm9S5+fZct1dAmzCWDD_iAy;HHKIlE+f2 zwbXClGx?gPP*)N?91Yom9099!RY3n&;0PKBSEPV&$iWKah=6d|U1qo&>*l63TlorsT^&eBTslI?riMhZvJh}$z{$J)#tT;PY=bXS zsYGaF82d#^ZYWt!M+t<3Z&>SWtiCjIaU}odO_g|c%`KNYOw$DHCnR!*e8wUu!Jn|$ z0#R`*vbLQSac-=sTEA``&Kv}$PnovmrtsohF(rv;iCW3$q{oge)Zp@Yix({@UdZ73 z;wAI0pEpNi_ZQEjy?ES|>04&;{}3@gz!`uq-?Dzg29zCFeHA=E21U-(1bJI4#;;vf zv&yMNYqqY&sxUZ@-92!jyU+EgYtzN0Y#$uj*pOVny>nbF&Tk;pD!T^(S=mai1|Opm zz{_#?3MD2evsx>#7+AJQk&RMFFNH*g$k^ykG@4 z6eR3UGF7BNQpu>$L$ntGCr?XSMG3|j6>(i>rAlxR?@C)uaK>pXQs#>dwW4Z0n@*4Oz^rwFVvIAOQ z26{w}#j!tnv{&8bRUL1;sN~j+>=6t-;0Xy9pVJrqpOnI0eU8^K%(>0I2rr3{ z0iKM1@(Y4nB&b-A)a0;kDVCtgA(c*g*}oNf8H17fa^vnp!I$tA4RmoYvt|AFRg0Pj zEh=)LCN~!Zx$s1`Ncx*oA5KV9U538IrUkG2pKcA_5BJ+D7vz+Z{s-+R2&vriD@ka- zKRjl*6WX8haDsrCCRQhFD|I+y(^6aIH=#ACC)^KAL3h@!XATjHKvxblYvPRd8FwYu zv1T5Sg_#vzm~QX}zR~0kOs1`S6AHv9!gJs{_<2j+KB}FZS)ePTbX|5>%w4j6bu;(D z2?Ag0s1UGG!BaVgY-eK=f(K{{h!e@(xxvlCs|Yz^v_Yq80mFK=1;|z(k3IpP1pgMI z3`{M$QxgWHASeey(SpyDcs98cQU+#kY@Lcv^v%sicAH@Ash`F|5{DH?oBV!Sy9kN@)kg9mrPiKztg>{m(BGt_8wW>LPH+g%G z*Q=Uhks%dv)zYBzWKgH*71-7;ukyHMThB`zVE@n<5PMM-ILes4O{XgA7x0fN7`h@* zp*Op0G(ET^un>DdZX^p9Y@Us6z@WZV^Z}M@5iwPb1l^OJT+4vmqM*j`q1PnFQSd3M zDx+T#4oa&3)Wrz6u+%o3^j35OIaxIN)c(Eg)wJKXefQ@(g^i-M9M(+>%8Z=Na7Yt5 z<%bQev^ zF0v0hP+8iz-z1&TKYmyCx`xaj@#+4xEzVQ0nuV9T>e3`^)pnOAsp3basS z&M1tGEzE*-OfJ0A1Kx^*)btx02xpOhAnR*sK>2XU10##}!?q^;c?1+@#ojh{VrdvQ zf2;j2HXv*-JyG17nbgIPAF+jGWr!1)3Ec5V4U-)HR^eoQa;lMF!bG)YAq2?jTkudR zvyF0D7{|EjT|n0C9vT|;e2)6Zk0h>?#5r&LH4-fnOCD~`DQgUAH|Xb;pS0HOf}*N- zsJ$r6!pC&oodx?YhHz*D%tN z65pX)rO9Gi_%<|*?W$qK4)t|_XS#;*PG~k%!PgospYqph7>mhclQvOzuEq@2Fm6r= zw4c>{Ep&lXVgQ)e|$y}Lbwde_#EbIYnI?Je%~K#UI+ zz)h3Ck6C6kFHw@tF%6*a`sAb4e8*7VM8jHjO5qeG)KLWf3xDzxcQqv*LvV!CIz2$& zPp5q39|7q5K*q29HGsZ9POeR5c8FVDJyt!OCX}b(j-_TTDoXH`!U~HG1dC3E1~mqP z`Z`15NJH@qKeG_sQ$g<)o4A7uI`*W34Lc(V8oxdq5ac2r=tATFy~n*(_=5y*aBc6! zk(K3ZXbhj_TzB=d;swR?U8Z*1h}_nI-DGaJq6LfQ4T|JPrcaydlt5ijwo$~)4V$2& zMh*?2%{i;qt%90*11#!D0M|FNW#ifzA`Q=pFwTUXf^*cBU=c-W;P+GAHCtOCV$;XR zgg2)YWCo`pz~M8Ry-6aJ4kkY6ZF-LXjoM3@eQAGp!=^N(cm+vKQl=zd-Cr zA_ylv1uGJQIdy|_coj(pk{1CJo?HDJY!Q&Lv)B-^OCWTme%}jq{`FebSy=77K?Gys z5ZUl_8<0lU!=^YvZ2z{+?$~FzI?fF~MxwCW{Q(04fbYPFv(T&8*h{oI)2n;wmV;OQ z=Cj7<-RrrbIn3*#04u;6yS}G2_fsV>UECqIFBpCCG&|y8*7`=Af`S5?|7rg}K~^<{ z%d7H%>Ic#Imk#guV_uTPzT5U83_@dXWWB)i$OgxV>CRt28`gYyWF)yXe6KPTzhyP7 zb}7X(m;dO+k$+mAS{^T0)PitS&WQbXHL4hEXySJFQ>wG#nuJMon0Pzs%)KjtI)cF(}roWz$@rxP_tJJPCl z8a+7$0g^9riUZby46mcyK&#t#YU`~1M0|W_NkV9+EKAv#fowM%vK<6s@U_ASe9=8i zRGYpD6^obAhA5F(?EWr4FKiT4s&jsp4ltHlA+g z(8FFYyAW6;-~d+0;E7yqMzjxx^wQvNIIV9hfpe}4vjiPE*`}4v?(3`;OHV`z?HYzo zzGFw$h~OYPD>7|bp;Lt17LFK+mMk=|;O4Y3k%jf*9x?z+ z5-UD7Pm~w<)yluPX%J zaLDJW&;iJEBO0CJ;a(BK@Q-`tCwO$e(dmWmFa^PF`ywlE-Pe5`c!2M!CWtp?cp6Z@j;tOuGXFZ9b^?J=(gR^^jo3_0eN zcd;$cK<7biNxk=Qr?(A$F9*EBgFQQT{{U^w@rs6d6{h5+2yU&-_Gpze6f5zjAK}N2+K)EAdNk8Jm#A;8PD^9)QQJo|GkzbjKVZZKWD-J> zX)w8B1LN(PkpRLgjBSf3AV z4i?c!5H{6A!H2Xb+S3DmzVV{tvg@@yz9x{T#V}9{Eq(#$Vr*Ba>cC0F`u^(qCtSTr z=8MBmfTjCH-tMaI`p>S1yFdiBZ8r0rZdw~nh}1BN1@tjvc8cv2b{Z8!R-u2nG}_#< z7*Y%^OR6^@@FPj!4;{1P05Afw7NJCi`X;_WX08o!!D1?1K6k+~5Q=$A=Pg?dXz#?7 zxdPq&iAR-B%nf|K>JbZz6@zs)fUdaZu;b!f!!MFzFm&Q)q=F{qX4I?_svfQ_X@wc= zO`eN_7t#1%CoD%6a2U}(w<{qwKrF~b#Qm*8eeCSOa-*-1sRGi6DzyiOF`X{}M>*BU zbk-|UV~h)j)};8cpvyj+d8zSeAzIn}38z=?g;SBo<}jO&Wec;7@cEbzb$xM==3Pkl z3+@(iuCqv#*5^%z3kl4sY9r@FK)$QW%BxAJ)jgb^%gBEIp{352aa*u^A^P3|o?%`w zW)_L1wxUY6agyT~xs>?(U>gbZAVv z<$GucFVf%@F6EmyDWjbT+SUeV4}iR>JY_WpY-wZX30*&EnBCRjeeQRc(6QjZcQ*b; z`)XH`n4Gp_9l{)rd_3giG4edHh0pk}6RpBVN}Jjs9-h$nfPj)ERU~K5`+K5UiL0$l z){@kMwd9N-4^tdo1+fnRBzy#+wU-CI1U&G?-C0f^JlD;zV1qRg`mZ^F{sSF@e2Yc! zerykwLr7B-Vd2l|`Ahd6{CTC@{u?w1q+(_0DiXUkbd^P~d3uo=BPOQGCQ(v{$XFtN zOLLR^r*OXnzeV7XMA-hsqxt87kQh}0N%>$MZL;Wt5oMu(AhG#+mtT9xoh{tF{}yi= z<-+=p2nX#y;#Gi2qzeHgsASokYnW~TS$e>=AaOTzKmtqvrwKz*xDMJzjBt-Ei4yci zU(H57g(cWM#xFqP|M#c(|I>;T_WYN4fXxi$14}>=$SdrGd%&@XJ>15n9Bxcxv)?P~ zP_3u&MX#XcfLt9KL)W)_>&}lPn2GNE`3J}d!fu7a#-0ED)^lrm^2dz2$)ef8eHWG4 zE1Yf94}uD5Y7InOn0CPooY5!V|J2g={wZ~9fbH-k)9DnSkfb`)kz5-6Qn6Z0Kbl-C z9T-chO_H~#tgZXDqZCuW}K6`fG?r|VCM zjUJF?0?NQ_KcETzbNE*4bOZ_5(U#B>-?95y#aod1<(ur**2zn@OrF2D{@W|Z)_?0d z^&-LEDAUseEI<|jCx3q6V+a1@z^()7J5tz*c!pzOHmN)noB>@zXpzQyJmp>{p)f&X zX2h~!1)do1L#DRjm@_tb1QBy+a5aOndMCUnjz#!!^jQc?F{TLSN)bf;{L+c*2_q?W z=Vwof##OoJI3$iHc^{cd?urIg*Z~=*X7F>YP?yGY^c}fWo z%{4(X8M1Rkp98NfzT8i{tLd7Za)V4=FSRG13@99vRX?{w~*v zv=|3&(RkhK?i7#{%Vy@kFW}9D0TCXH>asD|gc@L;pfdZq`(;s7T9QwqXw>pjTC^j+ zuMr#tK}1AKlz*|o4VU5HPWzQFxnCmfHIS+(YX`}i(p^~^x zk3?2(IkNvc%YW8ubc=uKGt3S=5Sd|07~DYX@)7XSW9=6Rtcqh|gwIz~-@xh0J7V8N z-&=B`Jnkim47?C?Uz@GG+dzT^G}xu^*fk-s+2&L7F0eVN`C6yS;bDQm{4 zT!8$TYwj4GLE~qk9g!mDhCe_6yeVWJyOTY(jrIHbL)6~!bHwQ6sZ`yWW|ao zU_N>@G!RTRZ7<>5VSLTGUZQjlF^}LKi}g>`s!&<`FgjXx7N7R!J!&FyvSQbQZc^KA zcu?yKD)Y_kTrzb#w{E*`%h+v?=AV-=OLh#*yJnDVqtIgPo_>+Uc6!A!_Buf zrj)(E$^Bv&2D*bwV8XF9yE4I2OWeEjY#|aW_w(^qa5~20Bw1Er@)(H$h>hibje;cr zLnb;E5q@{LuZ5_I(j*kbDL8W^In8Us+#)&MH9_}Pn$s!5%4gWA($HJ`e{;#zME8== zat5!{TA?xKA;XrSl3;*DRqGQR4ujBB?gB}JGgZlzS7Q4ju zWnBk9m`6hzNzpX+JD%bwVmwKt>YJ8}x0LlX5jUuiBMCLKfg_3a`5=KgA5E5QS=3Qd zTNQu7eMj-$p}EP5eKl0r&K+E70x?;(D_Uo&QKb+%pF<0T4ynbY`@#x| z5h=NCB_4>yl(+Lfxib0<2-L#D7zM7f7a;hUB?^9&occy0(X77xE<14v{+u{|$%&~a zK(vk6;_G>-g@WuMXFymBWf+zS*)3h&aDRc{pnO&e`njX1iWlihS{~9fyn}2*@A`TM zbA=Ytr6x%5B5#3!&;>B4JyY(eG%g^G-{=+rS1KZ90gLyJSM;vYj$1W`%6e&XM@e%+ zxuep20QP=hpKl`v2e+S_0px4C~3HX;}ye$nb(jFSqrCha|`SzT~&(yb{v z{C0(rFnXsMWT?I3x4fb@Mvk?Nd8oyGX}=i}RNoTfTRZxAo8R&(+hR}I;oH&V4q?KH zbR9EOW<+CrUYr6Y=V0-Y<;!n?rEc-++Hy&f&CrB%071EKJ@HakZ>=fQ)Y(uLy+7hC zo-+&DBgwJn%w4{WHUVeZa)RMG&K&da+!Awtf!?MG${I>b18sa+pRWA1l?cEni{!x0GS!*CY17)(Tg$Mehe8u}_2PNUmn>PdqEi$C_#x?e{V;gzWV}(#`e~m9@&BF4-$)cZDH4R^|NXC73BK^e!1osa z|E&8#ABa-UnQ+YAIn$C16e+Dqi2vtsrN;jUZA^*(pLB})Eq`@{?kEEEYNSmv#l5J; zhaFN4i5{QgJZO}LdWRggsQ;*7QIB&h$lW^+1~==WsT@sl`<_m$SBG}>O6)PA4$_Zj z82cv=L(jHS?U+WuI+xN$)`=wh#gmAzKY{ilqNtb$ozg#cW|A3E9MpOf$hzV@#DnQu z?nZh|bXY&0*iN+37y6A9_MjCqI>cv2JoNV5iQfbFd?7ayg=V!yTrUKpLC#7UeWp~9 zxr|1vT>OYTUyOQili6tG;IFwWxMf5!BCqj?ca&%++DDq*&k4FHUOqqF^XE)6#Wdts zl@;sLcmiP~Vh^!F>MDYpV=vU=2;NnfGdoi+_aNVS2?m8jIW*T>2JGe?Y)0%a1>Ul; zdEPP(So8za+HWkI8@IfVSIdOH*i%DMXuK9`ytWg|k#5QLfAkvm!u<*IWa%Hh6?@6v zX^j5k?i>k}+nzsx){B1&%amHyvJwgPey8B!5?#Q+8!LDOziBowkYj)FYCLcAYhLB+ zfNUA<6~E>cz3x@~!7KNg&xv}q!DCQ`-+6Vf;Gb8$y5D0|F86AGfRJFHrzkm6!1mD)}afD zANiqPuq5$mp{s#Tjwbljm1SUuy^8@+iJ;wooeNyIlx7$e%O_Oe# zM;(&P?Y_HP_KjY4_kq%mmK(hs+pz0yWdACB>w2%SEz6*}pJN{@Q%o}8)xY62yqP~o z&JXVIf$@GgKVYBXStmCFf)v31colDW%P}fnPpN)tP+J)D(pSu;RQ8M5 z1wnOafPZuY{z6oGjMJ8H@!_xBUvLBgsz(i>e>o!Y60e4y7F<_iRKeIU@24{EhNb>2 z=GB$7&)Hg1@XTCLipkh+0rA1_9FW)Vc0#L^m3!SZ9DEz;%c`}A+<@{z{1gXXF|IZa6F##4Rj#Tk zgWnpQi4uI(!cJ^}SllRnZR*l?;}!bvq)C%*QvZK}LKwwdg`o(Lxfo)rkK&ox);ytq zbACUp|7((-z$qoQa6Xe|P|iHGiu= zK6h2p=i1`^u@6zZJW{=ubsP%{x1vp)a5?T-{~}urJ7Axn=_%Fw{Y>su+QO!vf&MLt zD4?$^cCfF%cq8bm-xkxrw)olF*VG3?Y+vyxsjq%v4utKIjHN$A;ZZ>I{Wt7){k|rT zLfXQ%uRQf+s#5#<`%3oJxhUwX-xmAL_%Q8j>VsU{S3FAUt6!L_G@-BlEQLn_&G+B1 z-}U>NJPK(G+rAFT+}C%WXJ3D^Gw7?|7W>WkAnj}FgORqcc$Cyvzi@b^Chn2&D4_ZN z8}_??Uz0~6ZDHG29;F%P^@qdQ*IN$qVLS`op8_>)gA7zMkRxH9vD-e{>`JD#5pA4WHrrbwcL8{`9x(>py)inAbCW zzfQ^A*SuWz_1|s@`g(@%*Xf!2`X8Iw*RO==@EN{e{mk>JXU-Squ&-OU1@n4_@7F6b z&#OCteciqw=<7dtzp648=(YoFqg3@k-LZ8`Z@etYq!|JT$c?^qnKIvg*dv|pC7_`# z{&lx2h^L43Uy}PRo*RGCy-#$X_&S{Wfc3W(hIBybZ4?xR1p@mE4fTB6CaU1GVpqBg z?2T4D18UzF-0`eOz{hf)p(~Nf0pQ`04fGM}HQ~1nl*HfAwG&_K8@YK^_09Z>?Oa=O z=Qtw4p(1J8y+FyL^o_8_8Kk{tpQdX(atNRRAP!*ItE+Y}@VB&9QnM z7tEL=!GcL8dZRNb0s2}23hyKdP<}08@mB;WzvW@kikb~{Hf6D9)OPsw`=ezgs9rej zs~%%#uX-lvtlt=0P5j(UT7ZGJvv?<|vwkgM`8Tr`z;rfU7t)LYX4bFYwi3f4s+}Os zVd~6Y`(bvr^x~kisbuf0Olp7}+gZGm)LFllumCKb^=B_U45qW`x{yY(gwFc)CwDfJ z9_xF*U`HF?3_9vJ#8wd>l1T?}w(Th1N$RLyOL(DX)&ZD~rfWVrn%w_h_iHbL@lC_o z*~z~NI-9bL;%C-=&Cg7nO3r3y=Vk?+O&-R!Gi<;1a&+IZkDdMY?}E;zET#AvwO_>z zB!kZ5x#R5Yum2Ks*57Ss=$^eO^D^Go%+Bt0gU+7md$t#D`#1gB+4nUDojud{?2ybe z`RvnT{zJ}c95Hq1i@LmsiJHU!i1gW*9SodYi?dug-i~p zdimUC^PJ^N_?rfOWWpF%Jsv<7!z0tCOmUWPt&|TFEeWvzMY9*oN1XqhRTY=iICWL) zkqHsL`w}<=Q~;awLp)o@!ljEa>MBk62^Q4X$=HBY0dV!4IrB;oZy?~0e~0{kWhtKB z6*T;#L23N|t5OQ5`2Ww(nE&qr3mA}+|L=lc^8fvRr}Ihm|Mzp{d^7o-G`VtoXZIBM ze?M2wkCUrOajI`bZ~vxTIj@}Z6Un)9-m~lefm3`Ui@D!RYM{<+m4C5vy2fn=(8kV z*k0z34=%Ybavo}OkJ}K!)==P1M?ytd&k~xLz9_sD2gYv)(7?mv8~7)GlK3r#r>Uih zK{jL3eyKyEdZctbN+-(E3<2s&R~Gr$83AN#ZpvwFavw=outOX(r5xH0U(wIfETGh) zb8tO6^Q6QRou6|L0H)Ga%wZw^lC2uxEK#r@cO9G9xwiAJV|N`}+j$hf_(!k4 zh<_V#CAoU+TZs?@KyW&i?prbkesUa{u3n4MPt|^*1>Y0I9EKEaBN7VPii8=K>eIi2 z@!y}eMe@!iq3^IKpnPLfZz00jZ;dI%%p|sf=9Zs0D4?S0n*`v3%Tl@lBM5=NVxu$8 zmkqg=oFaq)9TRO~{0lwd<-|zDK}Fb0X&0g*vO}T#xj5Hc4Y@uIrnj0-wYs!@2$MV z2z6L3!$L=+b>JyKaQav$I$d1m8B?y8TAkvn$j1VFm8{rEZBFcx#IaA0 z*{U`=5Jh+l*9$OeR&1*-d)@a4sSxZEd6*9b3I-dSjiK>F+#(s{j(?#qj2+v)@QxC~ zl-$AK5&#EEHMr6`NSyQTC{g;1rU=iVmF5l+EOgoY&F&ub8%YYJOhk{n-B%qcl8&%XIZ#5u)k!&vMSiqW$$a%iWJs6J8iRC4fYsz`C$^CIh zLP$y^mdm@(hVM3hwmUiuL0}SIO{NbS_x?mjcI=x%d)q7vKy)zXT)_YC?rsJ5Z9*Hr z;hw7yrhqfJt2=s5hWfBuxE|20Bh1`(BvKbNS=g)Coam?w?;?|nd3WDYf(7-|#YQsf z=7+~ZU338vNuI&70|nnJ(#38fSLeuLvO}r9)@dD{Fep(P=1XA#;fj>a( zaV?`e$s%ur=Mv*4pj)%-;K@ma*>ZV=ur}TZ^A;(9TWJ0{NY-1uX@jKpt9EKDZmHN* zS0Qrz^)$HynsN)^3Q{4za)-kLZ&Oix-hGR%0g6wd!!j}AEK93PxH*(a5Wks7a6_%y z_~#Wbj|`41zhUV-XOS}wN{?*f+ahjY;J8|e{D<_hpg6()k1iSkB3Ut&)@b<0{>^`+ z?YtMG;q1$)1?uVvv_PrK%=0rD`LnHs6z|A67sx?=EvIMXPt$zd@+&dNHsIe)j~q~n z4ECctj<83YKNIvQRbzQhCQJTc+atV_)FZ!^un9Y}B|lB`am%kHrAHGo_b6`_d-RQs zL67{|Hw$9@M>X{8~=WHlL>XxaC)p(xdFmJ(~L#d-T)$gLz6> z!14cud#RVWf(Ktn1P@kOvkLe zB5gcC&v;Iq##`M{nmz8TZnfY8b#$m`xAj|BIFn}q?X9U`&N3sbCkdGb!@`7@l&zdnT>`SQUx}&Wz3!y_g#Yi z5v|~CJ!-^mmJ!1+c8v|wZ~7hBwmI^Ih~dpWl2qU{SOl(f-sfCM_!VqF^jbcy1F zUZ6Kx-4~~~x)p0$k^JE62Kob+c-x7LtDfZ`NyMgdXKmTXV6k^LuBy5PX8Bds&gxZ= zeo;Tt;z5u6qm!+nv9_#yRqcivY5^9M zFk{KNkr^|lI7`c_Hm}=rR3;hQa6H=U!2hv1$kSQZITn{|%kWl!Vl+s&Hw|`D~MWZ&(S|(E(6ZqTP)- zBBl{p;PpG4@m}eR-irSY0b-7_RX`z@w?Cvq>R?-<3IG#;?d>0aq> zZ^a&f8aY&a={Cem=Jtc`9~tu@+9qiNz%0G$Zm+6`YDu673^fVM2_F|d5Nc`yeB4W3 z`LDw^iX`~Bl*a*loMjsV__*Z47Cuf&Cc?)}7KN0U1AO?n=e(L<0-}fTanE^0zclc1 zeHy*PoJ51iR`@K;+P{bp;<6P=Z?P)KFumYD!|~|w5=!Jr3E7~e6wvT-a|l4~03mb= z6=q*{FN$1lrChJ}cV5ja-sV@m%HP9BSHAR;x8m1Grj#Wq?*LV*yc3On6W>#Z3@IWu z^g}eUq>Nkupu}dcM)EAL;bi`M`^bB05z>R|?g`-h?0n=#|LqR1;yJJUmr5sQa!Sk! zHjD8|gBE8IeY{%9X1@7|S9w&-pSnU@xF}0oOzI+kzuZOOB<527l~>d3ZGPUXd_mhX zVniE>i^)b9jlveJ6pw>)>SW2f9}P@h>S&m{_yr4PXKo2`t^bv`t=Zf5ytnOzD;!|t zQG4A=nmjVB4(@2&c{u2y96?dKZoInlupNvWmI8B#;F^Ltbi^w%3OoA4$GMB#XmYy zP)Cms=%!6!kZm^&vb|M?KOMW;tcRqz$S^$t-D5?DA`3`0u>VVkjEsyPt<+F10PX%o zMcOmCk9`^+=oG_1msfOLj%_s<84%p@UeO@Hu+z>I+!;~{>s@zr7e`M`8NLeIa5Vqw zE|PdVEM;M`=&&Nz*HaY)3s(Od+ACg*)TvX%_4XTv9QlxG?wILGVS;j)?c1orT~N^+z1ze)IN0m@k`HUOJx*CglZemdprdt-SzdZXa~LQLr&rWB#TOXCc@ zKf1lj9_#(#dZjtuied4uxUFQ>u!zI0+POLQOR=KLYLOLH|0xX2zc5!?VA%ee`xUVy zi=)V+J!8OHp4i_CR-rZiY4>^7i_|%8JV^Iymb$&w${!0yFQ;J=#G`}fnQ+HY{iw725}m8;;Sv<usbabSNxJqelhDX->f3@Z@*!@X}`SO#YgnSrmlS8y47rQ5v~k6Umwjy1A2!6T&p zDX-yaGuBUeE1pg_)^X1CZ@NPKbK=*$QodNvV&|)O2Yw#H7bc0v7!z*s^iguXq`XH`)wCw&laFt8*jFjVS?8ai zRxCA1=+eL7ArK5FZR2$rd9@8*&5kq}uAe!PI69|4l?9KMjLmzrgy62EB9Od?Dx9l9 z5SEqsJ@=c;7?8RE@d{oh5fRj3fq-qi?wDDnMrV-&)a(a)(vTE@(8bXO@Vj$ZS58I*;3Ia+RdCN^mRqRSz0z`CM_9_=bBOj}`SY zz_9mee4+=GU&tvujx_s48(irBOnAQzIfBLifKI@-^SCUOoJ}}wnT1G%p9@6z5x-s_ zPy4qo^lzujz~obNVeq0GW|&Teyp^1DjJt+OHe~cqrl7g0^pIt6&R%~wi%aKU8{ z@WFTg2{}vUo&g9q9KA{7r+oqLiew-d}g>T~aTe#hUe-Gf_HWYokC;C6r z!KpJPqG7wDZ%%jb4Bs$3e|>j>Gt#sH|8y|<_4I6xLtj%u^A!~XYx>|-1L?pu)2lz` zZR@(i>5mtf23rfV#EU%xqa+i@ycJzY>x10il5e~AU9V<;?1x$oURO+^o%j{M`mFpR zTCDyZXJxFv{$`e*p^-?zjjPwJy?OnHP1UtqqFr4F2Os)+=l+Ac4|)e*KA3%I#L;~R z3y(f^@X)cu?!@lK*2CbOh{W!~6OLN!pYfv|iQ{AAFrL_+??hsw@e8US{K~~ID1PvZ z9c&{^Z1GXs{o(mz(@iR}$;gC4U-7xF7(`=|tx%^>v$nyjZ}%GB+0}h0G?Dy7e4O|2 zQLmxX8EjkBSa>)-#oXL{if?}MNPM*x%^wt>ZC)B?Yw`+z7iqluNPLSaGAe$(`NbmA zX|M1#7QvI}m`p$PE^JD$YX8EkF+=tvx2ii%L!*Jyf zWEG%&7&olShAz;+&vlu5yFYnE)3amAaUG6@|1WOIi}=BoplNuY#}vd2KMPvBSN@K< zfET8(rGvB(g2R;*WENpHUAO;+&NV)L*sFijYj|t-@T2jl_pr=`WGyoydK*#zBsQS_ zxYuwZe}elIhT~bvw9g~|V8y!e5Hs^z?Bdfa>rFpNa?st_2OIreuYA7_ zCbkBNh1pRgHgI(Qb*FTigQmivZUo2x-17C^rB1Hh_vS^aTg}cWJcylm2>b~5PJQ=H zOc$&_Co+c`f0~NM7x6Rb&xoq=)uY=gQP)AQ?vO2h)9x>J>TghDt_QF5pts_XNw&VJ zb8+V%kKQaTrGzqmJoc%#`LI`s)xwVeaUZ04<|2N>R}bhTmaI7Jl^-EX=;}|j>9ALG zWV`?&ffw#mIeznCBwODc+vAxo#o#GwdlK3`2ffNeLSur)XXs$#qerDRm`VWq&opBf z+Bm02mUMD{oV-HN=)G7FW&>Ss_8evu$A{T-UhQAJnm5c7<%man^?&gi-U!lac@@XK z@)PttJ;$r>@EQ)}4+d8uu)D?Bz#r^%d9v7%UoKka(>4bPvJFz9)`HGO7QY;NquSb<-MS8>!U z@5BHh=R`reH?^eQEj!TFK8@EOAi>(!d4)67t3T;AbgMh=SaX+BoiLT9N4*uD@t?U@ z)0B$b#a?;0$^(CgB-UNYsx9#lJ!KN>_7fT!M)?~{>1Xa&$OXadvb+6+=qA!8u^uoZ zN#|%xXf|!Nu1k9b+t{&_;O9&d>jLoDnta*3l`gT9pTv6Xd;gT`{CZ7deMNGuX_HtN z95<4&@VG)x498}=hD|OB#l^=uC5bg6RTGj})4N1EZc|`MWC8>Vlf>G8j*X?$(X4h9 zG_JAWI6iF+Ognbpby7gAOcHA-|3Dy4D~a{zPQL%-^(Q}bGJQvql2}i$Ek=uM(DDj; z>Z^`ftT_L#l30(4jGH)ZO7*yzh(zb#sZ+xLXHwr~md=p@dQ|Tcx``X1C=ZgA#=#zH zs0$8a`cBuuUc&{I`TC)|k9?8}@z@)nI8(-e6dMdb9(tEvdMWc)@KD0jnU4N!bvMpv zopskWaJ=~3HLdZ_yEk&fLPG42m>&`JLAF~c1Y%7{T#1Pv&@VS51%SR0kN#jg$lS0% zLm=@%AW6d_M(D08tEpOFRt;bLVqgoDZ>p_;9;fRQ7kykBG4PaYll)S(UA&JS!09wz`-^|ax zd#&yC&h*}~ola|8`_S9=Vt;+hF*t=%wJp}RZY|S>JDm&`5CVpf-2eak*4lfYM?mbI z-dfGsd#}A-d#!JMkN@|5P9r1q-_zMt*U@nAe6K+~{~6(*x4q7EUAjxN66R(NH<}W< zD7rsC+3k9aGWbva`y{0{hbI0NBOULybwDYg{iO@ntyt>}VMZZ##Xgi#&S?s&&-?EX zMTx>o?3J2MXShvJR|xLp`~LIP5t*yKe!Xf}M9U`zz|7!v01(V6A&XU-fWnYQM`2rD z6j6THnV8d=q@8t+$()M6PUM~TFuc=Bvv^0l7ivFfTF`|6!3^S?vl`AON0!yVn=R%9 zcLBZBoMYzYP;unur>T~#yyyV+in1EirE{~cQ}~E-Z5>{|tDcA49Y(X18NAk85|+UF zf!Vi?&PwjZ>IrUC(|J9oCPaJQ3sj5FwmIq~5BGEabY10~Os3l@NvyEbXAQQPT?plN zb`NH6Jfi);#-h)C1X{rj?ghQUIfFbXMO2|sH1T)tGIP^&&GDV*brjx48~nK7E<&%P zONM&jeQ%~c=5>_FPeKn9!lvU<*-4YIf+HU#<1GwCfg$2%>m!pTIM&099=vDAp`FQz z{{8tUlgei zPhZjP#S#!MxlxR1BTO`BU8?$r;&aA+MQT=7f`y(tgAWzXAlE5We8!@Y>GN`C(A(yI z0xN(Yo-6;${${m$lJd);EBl!GRnRG_!n?JwC9gCd{h|-gOUx?C&8%XiEZsU*T_vLf zA-i+os%1+!_5V&Cl}W5cP14ZW(!n!tjc9%sBL$iytqSQuNl|*>^`SZ*`NCQp-teV* zT2^Wz*IQ=D0oLpC;O_qj*7qV8_-Ck>#-T3>p?F6&tTVK5Hb8TiFAaV;1kl> zwA3Iu4wAGm1)sh=5tJ*DR)G_YP1w5eqt%*vKrwIbasL5SIp5_KR3nA=OjaK`qYyqO z?xs4qa)g-&<5!Ehq^ogpKUGsSq`$8PoBoJHkNaiuTv0HWN!l5Hme=@M2$?h-*~k4W zxHy2}IK2GpwJ;wYUj8KhAc0cQMfGrS->IM-)+AZcvfiel*rF$EIr%}?u^|1r82Xql zTs?0!T^iILKLU<`U9l!N$tX?>jxc#xZ0g>IWr+P9CGL}_R&z^TX;BM~lnND=Ql*h@ zLW7ZaUC??Y*mM*$@K~_vb<$Z(^Yi{f(TmDGZe3anISj-FCc7dPFD-+~Pfi=;1*0AP z>hDQjFyxIo60AQOR-#uXn_>0`SVU||=y&V!VABa7=nVX%+?i3z`%yf)(b5N&BB6okZo<6 z*cX8X?P%BKju!c={?sNI(jgkfPY(FyIm7lR|LIM{P!k41rqVZk#7X=O^C$~gIScRs zV}tZKC?%6AbN=dKH!B~f@(ya97@P*A&l|1Cg+y86+gM?21PEPul2IDc>Qp$*?RAZf9Zj8`PN~z- z$P8bS0Zf<>Z$mu87j}6r|Ar%PIELg}!M*?!!#!)~fxq2<#ED{<(d`UJZl#G!oH;kl z^%mEq>%4}x*4CzmG&7c=V@+uhaTYFHNDpI)W{?_q0NH=gC_{km*0 zk(Ub^S_7&vikr$+Otd~<4z96IOLOZMJHb~$M83Yd)4P3*$6F}jtz5f~`0^DfqSZYw-MqD_t&4Xk z4nkbyEVj3`b~Y80^@_{Vpt47gU;&?pEDgpGb}S_tDxOp&9GJ7n6kc9(pz2D=38zyB zu9zhEdH-Fsi6100L`Ga_F;+>@LI^qJz}sMOVzRoD#|G)*%EhHP;TR`q*tg~k0vwi9 zb39Nqk{fwSWRAB@0g+7yksM?NDFxTOVL3F2M)JDou(5!P(a`l%8a0H=atyL|eyo#- zx^M!{XhEV9!XbeyP0z2kBrzfH-DeA5ghYi8X(g(?{+Cqa!OvrR6^il42alaz;6eOj_IhB4KEX2A%=X4!?jq7m z1INVGYy@DVEBg%mk?;WUW};~@gO}T>uc;*3cdWfMOHC0PzEgsa$nZ}h8-z1Pd57KE z`_ysUp9>56Q;HQ^QxbgrkFsBshS6C5AO=y09lD>fN6{Bkb9CzR#E>2{r+Tu`%Y zOeOOO%S{pS3NjJ$y-;S2B#S~ColT^c!lF<5w^D<6v=Zt7!L@wef4mPj_PrN|?+^E7 z7oRvsZ=hI`CQKJroeGw|QI2JX7VR?oqHnqb%hkEc+N>`?O&9Br9SBEMPAj{HdYYnY z3w*(wEw+k28{AY}1v!q0CaSUQ zxLD^m{58^`QSb_HLyr@0gO&nMMv+CZUw=5!L(eDJ31be3#;qhX80;EKUI}2h1buw) z(D*&0>GC31M-h@F-T?RaE`lNG#RMlT0&*Fm$-_EAh$g^$?5#tu;uaz=MN<~n7KVA4 zi9y2`xWMr?G^9JdO)YKP$knGi+FC@h`P(6QxN_)Ru;_mXjs%Qr+L!7NFJDrRWdt-N zPy5B14IZ`}4qE&jP4e-Whekc-0Ly;kszWxO#$ zZ`{Hgso0IH-4ZM#X=$H-r3C1L3V$q1l;|s?`AR(cRooU+b*m(lN>1@_#fA@MB6o~L zc*OBAnPTI>shHjb{mQ$vrET+qxttLygXQa|x=@c?O`q!KEbcgV}!ckK{kX3|Y5fHJ! z9i&V;Ja6qK2X}FF0R)gjnnHQDmQe)%+2(DnZ3OO;cV<#u&uge`W#VTNT)F= zV*uKTZt#VFABe6qdlLEzJid8~&8+&1+9`6JbjqTdv;mqL%mKX%Ac|M+- z8PDt)D+5qKEi_N$sS#n&Vv4SHF-6y9RV5&pNREfew|tddUy09wU+4$= zHJStt)7S~aq329klfjO=e^JY2hBt4{yblxbfo+5&@{sj(y+>Wp^&Va4cQMi}n024{ zTQR;^+95_gv7Arobw@cEw+OTJ$&(^VV<++01Oy@EjW)Yj@;&|nr|0nUM;fkvxB+_h zp5?byZEvXA=f6t%;-J5s(GaFMUi3fFQyJY=g)`291`Ej%HX}4bb1NbMK>j~IRB=yf z#a*!4rPZU8j8`v?2{{A|(;<9fH$@H+Z+7|f#2W*lAA}v!Bi8Z+#t``te=#jRpmHR# zLT*Ku1G}zyq+ZPrf_A?5&`v>?D>+WNBf-?tAwWo8NdKpA3o^%1I>?+jG~&tR*k}X7 zx*I+z;S(C~Wj5naTs{dmjy~CmTcP8*-Xf=A-lne(+yY7P_`xB^n6B%x$4N{?Wbua* zF90MAtM_Q9%__0;o}0mcppSg4X3KWo*yJ*qJ+b&t{!C zzn+!7$(}Lza*>`f>bBhef8R4$BkUZWb5Jn_Bt1&vVZ8$H6de9|9_g0a8~CD z?IxvBQe>R~q+ffOgaX+6$dU5gGmUQsF4hE_f2IG^ef#=e>3^kvU*8W-?Za<-wf5vI z{r;)<0nTndujvSa$e*Pn*;8;RD#6m@K71=H5EITY^}{bYEDpOAjVNivg4~6Rj_8U3 z?HnDX%N2J|dk5>+5%j!!%_O^TESpc;2nhG+U}L)SX&W^_^=n$N+VCgd6Y(?g|n1SC?BEUoNNvkqv1StR`lM1VmrgCa3dmw^Ha8o zGVqCuhkb%h4M*eqXgs74fj^A3k3U2&>3*{!H#shBa0-~Z!5NoFV+sMgVA%d3(|71c zNKJ4OnuMAkeeGM`9R($95GIs-n zVqf16or37q1?E|1vj2>A?Ft8;jp)O8{^9`Fd4!YJM; z|8GGg`P_di9M4(P*46^maaSvgd&wD%Grg@{c(=aEtMRG@aHGv5Fdg#st(%A@PUTagNUmtBp z=FE(Ll8&Z^zaB0%At5J{Pq4n77?I5`6mcc+^i@gR#7610Av4VFJ^m-@5C9!P8Qc+C zn=JnS&4hRQdqw06saCBDEw7+R{4-p5r@JdO;oHPxJC6M8k(oy)9(ynTefj9gqgJs= zkw?7NX^VIJFBR0uJ`<5^%bZ7_3t#i!D5(En;$1cw*u|+lU$exm_R;); zM|ts{-jiS8;GZqt)3MMJNU$snVOuDJQU!G^SpPcYJ`-AtPpK}Vm1lpa`#_(w`u;vz z@foI#`kGid*LCvmIB(@ngmWOn62^t%8Lek&uMG^P`@_8!r;3DO2u~Fawvn8y=eAm^ zp~O**O9Jr$C=nR_%Tg$*iSxy7<7j8Wi&c)=l0=J@c;xgqQxl2|%oi9uG$@Dt5Ort4 zt`pwG+`51)zsewwWrry5WbXh{Zn%l;X5b%kqD+K2#AFW_eiQ+{+Vx%RtEqVfgH}t; z&v?AQ5^Q@_k1I7jycnc^$%^FjPRR_q^C|~Rs}UXIXWt1@KTjnp5qvYcBE83{__JW? z&&??wL9Jdw@JSrwhM0&sb|8+dI_krA_O+7{RF~eC3#kRVne(NW{aFz55qsL>;sos&}3|! zPene)-M%NWrS5(ySpO@8WBnbmS#ZLVOB-D<^GdMm)#Me0Q6an7Gk`B*8_;*N(#Hr!Ib2+{|rjehfv7(xcHU z*od(@nPO<}+#9^RBolB`M@L(SqE>}D)~~B11Md!pP|TRH0T%N}kptMRn|BA-St6gQerKR^|zh{#7y3k6Kpa?*G*&NN)gLjRf*Q z43yt2TYj5ih9c}0X8;oxzI^J?5QMQe4!JM@3%{d89KkAsU1O4w>%Bx{RYILXETZ@m z@nI1N2D+8J(iZyq;I>LET?}uK9jN*ecoz~H)yy#H2o_e7js_oE&oH@adv?w-)+RUlE2%msKb&HgK{{$ z;qlr@hif0Nr46jCgu$0bm6RXeu)H33m)G+yR81~{O(MpJh9^<~#qbmZJW?cMUTScv zq#@onl<^jry{P9*4-QjQh5f~}Kgp4T-6=^-4(1Hd{)x3togySu!Rr1%KP85ERXo-f zSoJ34256umL}+;xM0HSoy5y1{jWj||*)<`Mk1SKr0mQrrK^SYmdjGrTw%ds<_C^7Jw6q0=U0!NGQMd#bD@G`472wZyD>~Jsoj&)4DC`9 zXx`WZe;w2G(+8ldFq;(N{>@NgC3#OenNyOm# z^{?w%nj7siI_IRf-vWdV0x6#9@)R*I7AmkF5eMX+2^A>pY}iH5L>V+Rw}uJy@)%f z#zOF#c#T(?Dk{6X{m#GN@eWA&NQe16Z`j-CH=38n@5}L=HV?iL=x2 zgVJrak&3)$nSULiHR#5|5295S*KJ9o8_xotpZ}6^g)I_(aB#@IG}jO<#%8pm3KS)t zmPArNBBbky)brC*qr|ieAPu{1e}^P-=Dtb$CL*(8_)hpF^xY_>8wb9Eq?+mNAvPqJ z;2DbatUr=$J4#}|0K-S<#_MCi;3)3;(?yD=^g z)vtDewtp^F^M3!4h-pQNP!L_hs66Km=RV-4>Q1bZf9g)$g@3?o(sGml4sH+v_mD%; zTgRf)5SO{K|L3^%`{EfGaFq$*yg;CTh6!Og{HXQtNWlB18s#A+W|S(qEau=?qZEo0-8|yo3nLLiw~_Y`Nx* zs8Nf+U}YnS0fRjv*j46v?o+j<3(xykDAJo`3o~^DvGw2;0M=HOpek$fq1L8;PpY&^ zCQN)-V|v$xhVfk+^{A)nrIck7g*VO}y6GpsvWas#3o%=g>!brRBxBwOyAZcP8kZY# z;3RnhkhbAQf1MJ}JiPz7znLKK#MGQhC9rJ{+bEM_{QAwL&;SQoaG6r)a3)84*XW(h z;OwL?rk7X=IcXmDzaODDq<0p*ftI^~W>X=d;NbUiHh=DJQ@M`C;QmK=R%Z!=$&(k)Um^HY*m z;S4c?e8kw!j4DwQ3@cpzaHX|~x<4Adf)iK*(Q5K{I(>MPbCF<)gXBx|4kXTFO)HJMq$=+2tP!i=^Fy`IY=1@@*KY*1yd@>jmcP3v>%58%D1tYL1c!4?|muvbrGP zxATa{2`DP!$+itWM8%E$S>N4>8YVg-Rxaph+S-&d!pBiDF>{7odT_M=Q`{qT)_Fy0{X)7 zh^H?cO})k!&fGe58n@^RCyW$C@9Jvc4?4TrDON*y2X7?-oghknTRVXOOsKc$E)4-T z(;Dd^xVLn9^*ho{odD6xMQ2k3kPad-FM*F+SM*G8OAL#&z z(A+>=L#H>}Tim>9Q&R`P6cx}Gtf_0Sfd4-*94e>S1tby=$5pB*DSOfHq6RH%`=44kgSYiGmc*=j}7}h&b#3K3aw2muCZO7sJ&IBI9 zDg5p6cS6dMMSwr5W0Ia@#uAZq+zXM9VTdrb@9x*Em(=ijIq#*oh z(D9rJ%&;d&KWk=(Y+RJ;P-cauY@5X}M7vW{b0tish|a9~`5w0yoS1CAoJ@#`D`DD< zmHK1xQuzrI2ZD|>SR+UP;l7SH1bX#^|0wxS9L^WIrwVSut3B);g#GY$Xm7py_2_1< zy>(Bp>DjZ`TMHha&EA?{_&n{cOfG5ct$Tx|`$F^PC&b=rQemWi0tcx54jes@T+yUF zl$p2r5rdo(YG#%1M4bzkB0m`o;Z;SGDgWh$-S{F>@(FCG~bLZKlr$x$$gd|5HM~ZxmbhRp)k8${Z z6|p0qrEnvNjd%iw`7v!_&BwSm*tAd0y2x+v3A&#DYq0IdbO;k-q&vpuWmGz3K`BO5 zz3*7i{<@H48JM2Ml(5`VORpxYk20K@BL^k&m(k_j`8gfMefTkd711wrqu3p!v%!7O z1nu2+M^k-Z^=oF6i=ZO*O5jmb6=#Cf7&s>H4j#(}k3ADS*1dqi=JUVilX<869kEoC z9E_`p81Fb~$1RB%sS}h$jAT7cAU|r71DOs?)M2yb_ zo4Uh9jG{(0QS?aYG{NFC%rPtP*hGw?CJ_5;JP{*%pf8(5jIkG)h%tK0C_#-%G-@fo zhF10tYn=VXpPU&3m7gDvYj*(;l!7%W=clZPVEq8Bnb28^7)&E3JXC_EKSkEYsGo^@ zjTie2s~nPLw2I;Ncsx}afAYNVJ{?b)BQsZwVe$K)!ppCQnqa=BSdF%833T}vD-uje3%W~71 zr;_7*Uwnw^ot`MGp^A2O_H$(k!=)i!8S$7~B*YiYw-wH;h}By{ki~U%^|ZS*c6BhF zQX?at0WRCx36`qD87onh7$~-FOA%97)kP3Kt=RAd{}u|=#=U@+cwyd1;qh?+bqQ~A z1EZhd^+T z!rd|i!-EcJpm$Nt2wDvz-uwR3Y+No)=cDL4+^zH%E6t)51LrUWl%;vJk^(7X!{>0d zg-SsIa(svYeg+R=C=XFyp}p#~vTcY#rku)i{%b@=fK$0m`958|)QD0kE@yQF)F?@O z!9)TwWLA1%BF`mmwSJN?IU%XCi9MJ7U4N095XHJbnA1mq!O3hplObWIr#TD+hnjqkvkZrX${=<_a+sRfrHl@0f|{Hx z4?~?xbdceKdT4}^17@{<%A(K+FP6>61qk6|u+#&om-T0~0Xl?nHn6+j6Sx$jNEX$Mt2~pGj<(EM(bnK$C92Cog)@`l?2OL& z-nr@WG-siP$-Hin#<3{^;J?bber~n5y1j{Ko)Y$0C`-+jhvq0WcQ)VO1jD&BUjePk zR_Ie;q;IHexEFEx`7q(ES$!wu{jO_r|4)~Rxz#s%E7~?gT_99^UG0)PvB5h!)7KU` zGQxD;=JP+x;}axmx-Kz9-lZfC_TyKPJj)pW0uvNUQqF#+@9pUF(5oA7yxv;^D$wDr zSy)?Zw|@n!S3^Ty(MYKVh&Q7Xg3BD|EwcnWp4|J|5u862$qu34G5u8@<(^xC;jLuI zL0HY8@sdzTv$348Zen&h00FEfB0McL9%W)*z6~=+UG{>i>p)`>qx#O3s?fQ#FfKCm zIdA~MVcUo`cLUg=)i}~G;ADnD6Rz=Y=j#qagX&5=mojKI6mS~M(*p(rUM5Kf|KwX# z7J2t|@LpScLtA4Lf7R9Tzv%}4w?oQz$ej*TfUu8-mZrK^^pFlZa|8%NZw^vyXq7C* zMqWo{u)rYI$oa^p1aH?W?)$@^58=9#a zeq0aH8;y1DdH-)EF^?!|@Vqp;3H&%eAig72D7yc(X@q9HjzTxlTn~OlwXT{650%Hqk76f9N}k_Q!{FhA5cP~*j(zC#mUY! z9~N6`yo05Rz_rL=f{?ZFoRS+vN3{W`yaP8ban9mIg+rMc=0!BmN$OHH1q$?nh@-zd zfiG-MAnC#cM9gAa(XAcw3RNjAh3LM?@GiFpZ$49 zTauWk%_j_#0vzK_J@bG0PNb7K@J<;kpzl8tOFyVT;5}Thshg*#eu_Rw9JSP?p$ptN zCx>IaP}0%VwR%g}t^pkqcQz3FF(hiUz1q61pe7?7{i|G4M)0c_U45L1iZ%0RA1;(V z$|1JT``@DY0Ye;jr|~B-43{?s2m7?+wfJvhi4q~@SG0y+7&bme)uC34mKY!nu+)iIX!w?yhp{m6pm)^DVY3OBY07a?bInj z*T@Jmhv-oRGm5R8+wbxh4){;U5&x|JO%L|ga4^LO3s{8qh43q#6&bY((v^=Q3SRs> z6`yTDf--$PE1=U4?*6x6{qK+hW4|U-|9!B&$HuqSScElOklSgVkc{64OMA+xrkojF z7EJDYawm67?6PQgve%!i*%Ex6t0-9sqE$8FDu5sVx167MpN6go3sO-(G;&E7$dY5Z zE5Vd)pzsW=Wpz=fYzJ{Az`?CsZtXx6c(dA1E_&Q+yN0YrJ!h;82YbU znAv0DPD?nA&7BQ(;7gjew*#o!h(P5HZ5@qbNP=i3M1n$wfPY5%r8~0?XCh@j&o?5{ zb+dErOQMsJewmabI78Ttnjr+gO}<;8401zXMNPS(cUz9K}yt=v4+X9 z8)JE6q(4epqWMND&J33C{qLtEWi+)4IT$0s-fOF|XIOVQ6i{6`t1~Q))MER`3ps{F z-uCW_ba*pF^RUJ;rQ|S6syjV(ocJ3y_k`h za}2YXWdBmao`hdbfFxFpWPw0>0Gz#OXi@TJ3CzLvi5Jl{N2SCnPM;~Q9LaNt>HPkXrG@S;Z=5`V=a%2ec(QvPic5Nrm- zqGLixz25y_8sRQ*kgocG1lXfwiNJHcFHGq*!GiA}^_kTRy8$3{5MmB$cGDKQZQ@{}p^hr1^qySK-WXR^Ev`4<>#Ab2GGU@}TmCXAf-mB3aMCN1Wt{9)d6c zE9BAn|Are<`n5y1pw-KZ$oajKCi$CJxZ|C}PlC%KWe3_r$G9sA>6a4(B%slZ7&k{8 z{Wb~8xG?G4kM;d>2f96pPT=^?5+Lgjbr$9u#v>)= zrP-&C=>ExLe+zhV9*pP>mM8a+DP52<@ySTjO{xNxUO1t%yr`PsnMc3?7=~LSTIzWy zL0e+cTKsCeVfWuy8d)aD_A6A9NhlbzMF_3Nv5f2#ryo4@b{Gv7#Oeq#rw{GiyX2TZ zFLqP9lK*mlqz#w61c~Tc#Jg4fBPlo1ETwJgF z)PS>`k{r)bhBv2*mH1DI+KTt*Y0fx#y{CC2ixFtV36y&_Bq-T5F#p0GBSS#-MYu3U z$ZyGUix)#~VVuC_r3y?h(hiqqfy@vN!X^}7Y^MoTi+!324=(k?+e)c~<`~$%QTkN5 zpxKII{cpa6E7yu6zK1GC<$Ln6DmTd26pu~QEI6vWDFa$VbSyeJcgzo8cemf9%#x-z ziSU|M8;p3wvJXQ?q!*yJg!crYE8?pegRUgv;d*NfM9gqu;+-O{g&=n1&Wx1s(VDoF zz++!MPFJZyf%3SWAmQ6$xD?&<*uh}DUSIMO_XEYB?B3oNbv`wlFw;^n4J7*ph_E$Mk@o=bBd0T) zrxr;VON)zAv}&lwC#Atg;+MKGssdB!5AkO8B>%&4`2?=zKj=dm+wlF=1a@XbZfC9` zb#}oY*dr;Y2gJ7+!i=o&W1}m26_D5E%C(TZMebLMPl-1vENsDgiHrEze-oE2!Pi+Q z-vl%k^Sw1|)?Bw{;Tq3d1FyGj5J={Gp|5nh!TL&1b;J*@z6D`f_y+{)U<+(jtq2xm1r@DH$@ZI9owzMHy{;gmNuJJnYJ1oU};4vne a8ey9YqXu0P>qfJ2&8r9hu>~q$=l=rgI$ZYv literal 83726 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 C(9ksi diff --git a/bin/large/fsck b/bin/large/fsck index 706991bdfbb3400d1c4884df9367a91df7d0f58b..9c9aa4d4ddcdf679d21252cf067f18f7bb90f09a 100644 GIT binary patch delta 6314 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%0D2bp9C3;kRct^N(qdf|!NMvPSyO?SF0 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 KDZSDFhy?&VVPaPR delta 108210 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

  • >< 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≷H;$y3T@1F0l|&55q|d*eTuACkt$m2> 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 I#{j4W0Hi}LfB*mh diff --git a/bin/uzboot.gz b/bin/uzboot.gz index 2805ea7eb36c525da08d5578ac38985841b81c52..fd13c727d2f56dbb3b9b858bd9b225148b1471cf 100644 GIT binary patch literal 131392 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¥eqgsTZg|!c+9>p` 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 diff --git a/bin/uzidisk.dat b/bin/uzidisk.dat index a517148c5b02647d32e4d8f22452f3de59cc05e2..5efe014e6dbccc30e6520a1871136444a73a2204 100644 GIT binary patch delta 485480 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

    M6lH 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

    s``0=AM0^e$49NfdRS0 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%0D#MoHSe1(l03NX);es)3~gYwG8txyy?tHcmpk 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

    9sW^!tC%f0q_JhtVU|U60V$&$7QcN5B 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 t5IIE%MND%1lSgwrpx*yDFHaY_l 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 diff --git a/doc/GNU gettext utilities - 8 Producing Binary MO Files.htm b/doc/GNU gettext utilities - 8 Producing Binary MO Files.htm new file mode 100644 index 00000000..292ca2ca --- /dev/null +++ b/doc/GNU gettext utilities - 8 Producing Binary MO Files.htm @@ -0,0 +1,459 @@ + + +GNU gettext utilities - 8 Producing Binary MO Files + + +Go to the first, previous, +next, +last +section, table of +contents. +

    +


    + +

    +

    8 Producing Binary MO Files

    +

    8.1 Invoking the msgfmt Program

    +

    msgfmt [option] filename.po ...
    +
    +

    The msgfmt programs generates a binary +message catalog from a textual translation description.

    +

    8.1.1 Input file location

    +
    +
    `filename.po ...´ +
    +
    `-D directory´ +
    +
    `--directory=directory´ +
    Add directory to the list + of directories. Source files are searched relative to this list of + directories. The resulting `.po´ file will be written relative to the + current directory, though.
    +

    If an input file is `-´, standard input is read.

    +

    8.1.2 Operation mode

    +
    +
    `-j´ +
    +
    `--java´ +
    Java mode: + generate a Java ResourceBundle class. +
    `--java2´ +
    Like --java, and assume Java2 (JDK 1.2 or higher). +
    `--tcl´ +
    Tcl mode: generate a tcl/msgcat + `.msg´ file.
    +

    8.1.3 Output file location

    +
    +
    `-o file´ +
    +
    `--output-file=file´ +
    Write output to specified file. +
    `--strict´ +
    Direct the program to work strictly following the + Uniforum/Sun implementation. Currently this only affects the naming of the + output file. If this option is not given the name of the output file is the + same as the domain name. If the strict Uniforum mode is enabled the suffix + `.mo´ is added to the file name if it is not already present. We find + this behaviour of Sun's implementation rather silly and so by default this + mode is not selected.
    +

    If the output file is `-´, output is written to +standard output.

    +

    8.1.4 Output file location in Java mode

    +
    +
    `-r resource´ +
    +
    `--resource=resource´ +
    Specify the resource name. +
    `-l locale´ +
    +
    `--locale=locale´ +
    Specify the locale name, either a + language specification of the form ll or a combined language and + country specification of the form ll_CC. +
    `-d directory´ +
    Specify the base directory of classes directory + hierarchy.
    +

    The class name is determined by appending the locale name to the resource +name, separated with an underscore. The `-d´ option is mandatory. +The class is written under the specified directory.

    +

    8.1.5 Output file location in Tcl mode

    +
    +
    `-l locale´ +
    +
    `--locale=locale´ +
    Specify the locale name, either a + language specification of the form ll or a combined language and + country specification of the form ll_CC. +
    `-d directory´ +
    Specify the base directory of `.msg´ message + catalogs.
    +

    The `-l´ and `-d´ options are mandatory. The +`.msg´ file is written in the specified directory.

    +

    8.1.6 Input file interpretation

    +
    +
    `-c´ +
    +
    `--check´ +
    Perform all the checks implied by + --check-format, --check-header, + --check-domain. +
    `--check-format´ +
    Check language dependent format + strings. If the string represents a format string used in a + printf-like function both strings should have the same number of + `%´ format specifiers, with matching types. If the flag + c-format or possible-c-format appears in the special + comment #, for this entry a check is performed. For example, the + check will diagnose using `%.*s´ against `%s´, or + `%d´ against `%s´, or `%d´ against + `%x´. It can even handle positional parameters. Normally the + xgettext program automatically decides whether a string is a + format string or not. This algorithm is not perfect, though. It might regard a + string as a format string though it is not used in a printf-like + function and so msgfmt might report errors where there are none. + To solve this problem the programmer can dictate the decision to the + xgettext program (see section 13.3.1 + C Format Strings). The translator should not consider removing the flag + from the #, line. This "fix" would be reversed again as soon as + msgmerge is called the next time. +
    `--check-header´ +
    Verify presence and contents of the header entry. See + section 5.2 + Filling in the Header Entry, for a description of the various fields in + the header entry. +
    `--check-domain´ +
    Check for conflicts between domain directives and the + --output-file option +
    `-C´ +
    +
    `--check-compatibility´ +
    Check that GNU + msgfmt behaves like X/Open msgfmt. This will give an error when attempting to + use the GNU extensions. +
    `--check-accelerators[=char +
    Check presence of keyboard accelerators for menu items. This + is based on the convention used in some GUIs that a keyboard accelerator in a + menu item string is designated by an immediately preceding + `&´ character. Sometimes a keyboard accelerator is also + called "keyboard mnemonic". This check verifies that if the untranslated + string has exactly one `&´ character, the translated string + has exactly one `&´ as well. If this option is given with a + char argument, this char should be a non-alphanumeric + character and is used as keyboard acceleator mark instead of + `&´. +
    `-f´ +
    +
    `--use-fuzzy´ +
    Use fuzzy entries + in output. Note that using this option is usually wrong, because fuzzy + messages are exactly those which have not been validated by a human + translator.
    +

    8.1.7 Output details

    +
    +
    `-a number´ +
    +
    `--alignment=number´ +
    Align strings to number + bytes (default: 1). +
    `--no-hash´ +
    Don't include a hash table in the binary file. Lookup + will be more expensive at run time (binary search instead of hash table + lookup).
    +

    8.1.8 Informative output

    +
    +
    `-h´ +
    +
    `--help´ +
    Display this help and exit. +
    `-V´ +
    +
    `--version´ +
    Output version information and exit. + +
    `--statistics´ +
    Print statistics about translations. +
    `-v´ +
    +
    `--verbose´ +
    Increase verbosity level.
    +

    8.2 Invoking the msgunfmt Program

    +

    msgunfmt [option] [file]...
    +
    +

    The msgunfmt program converts a binary +message catalog to a Uniforum style .po file.

    +

    8.2.1 Operation mode

    +
    +
    `-j´ +
    +
    `--java´ +
    Java mode: input + is a Java ResourceBundle class. +
    `--tcl´ +
    Tcl mode: input is a tcl/msgcat + `.msg´ file.
    +

    8.2.2 Input file location

    +
    +
    `file ...´ +
    Input .mo files.
    +

    If no input file is given or if it is `-´, standard +input is read.

    +

    8.2.3 Input file location in Java mode

    +
    +
    `-r resource´ +
    +
    `--resource=resource´ +
    Specify the resource name. +
    `-l locale´ +
    +
    `--locale=locale´ +
    Specify the locale name, either a + language specification of the form ll or a combined language and + country specification of the form ll_CC.
    +

    The class name is determined by appending the locale name to the resource +name, separated with an underscore. The class is located using the +CLASSPATH.

    +

    8.2.4 Input file location in Tcl mode

    +
    +
    `-l locale´ +
    +
    `--locale=locale´ +
    Specify the locale name, either a + language specification of the form ll or a combined language and + country specification of the form ll_CC. +
    `-d directory´ +
    Specify the base directory of `.msg´ message + catalogs.
    +

    The `-l´ and `-d´ options are mandatory. The +`.msg´ file is located in the specified directory.

    +

    8.2.5 Output file location

    +
    +
    `-o file´ +
    +
    `--output-file=file´ +
    Write output to specified file. +
    +

    The results are written to standard output if no output file is specified or +if it is `-´.

    +

    8.2.6 Output details

    +
    +
    `--force-po´ +
    Always write an output file even if it contains no + message. +
    `-i´ +
    +
    `--indent´ +
    Write the .po file using indented + style. +
    `--strict´ +
    Write out a strict Uniforum conforming PO file. Note + that this Uniforum format should be avoided because it doesn't support the GNU + extensions. +
    `-w number´ +
    +
    `--width=number´ +
    Set the output page width. Long + strings in the output files will be split across multiple lines in order to + ensure that each line's width (= number of screen columns) is less or equal to + the given number. +
    `--no-wrap´ +
    Do not break long message lines. Message lines whose + width exceeds the output page width will not be split into several lines. Only + file reference lines which are wider than the output page width will be split. + +
    `-s´ +
    +
    `--sort-output´ +
    Generate sorted + output. Note that using this option makes it much harder for the translator to + understand each message's context.
    +

    8.2.7 Informative output

    +
    +
    `-h´ +
    +
    `--help´ +
    Display this help and exit. +
    `-V´ +
    +
    `--version´ +
    Output version information and exit. + +
    `-v´ +
    +
    `--verbose´ +
    Increase verbosity level.
    +

    8.3 The Format of GNU MO Files

    +

    +

    The format of the generated MO files is best described by a picture, which +appears below.

    +

    The first two words serve the identification of the file. +The magic number will always signal GNU MO files. The number is stored in the +byte order of the generating machine, so the magic number really is two numbers: +0x950412de and 0xde120495. The second word describes +the current revision of the file format. For now the revision is 0. This might +change in future versions, and ensures that the readers of MO files can +distinguish new formats from old ones, so that both can be handled correctly. +The version is kept separate from the magic number, instead of using different +magic numbers for different formats, mainly because `/etc/magic´ is not +updated often. It might be better to have magic separated from internal format +version identification.

    +

    Follow a number of pointers to later tables in the file, allowing for the +extension of the prefix part of MO files without having to recompile programs +reading them. This might become useful for later inserting a few flag bits, +indication about the charset used, new tables, or other things.

    +

    Then, at offset O and offset T in the picture, two +tables of string descriptors can be found. In both tables, each string +descriptor uses two 32 bits integers, one for the string length, another for the +offset of the string in the MO file, counting in bytes from the start of the +file. The first table contains descriptors for the original strings, and is +sorted so the original strings are in increasing lexicographical order. The +second table contains descriptors for the translated strings, and is parallel to +the first table: to find the corresponding translation one has to access the +array slot in the second array with the same index.

    +

    Having the original strings sorted enables the use of simple binary search, +for when the MO file does not contain an hashing table, or for when it is not +practical to use the hashing table provided in the MO file. This also has +another advantage, as the empty string in a PO file GNU gettext is +usually translated into some system information attached to that +particular MO file, and the empty string necessarily becomes the first in both +the original and translated tables, making the system information very easy to +find.

    +

    The size S of the hash table can be zero. In +this case, the hash table itself is not contained in the MO file. Some people +might prefer this because a precomputed hashing table takes disk space, and does +not win that much speed. The hash table contains indices to the sorted +array of strings in the MO file. Conflict resolution is done by double hashing. +The precise hashing algorithm used is fairly dependent on GNU +gettext code, and is not documented here.

    +

    As for the strings themselves, they follow the hash file, and each is +terminated with a NUL, and this NUL is not counted in the +length which appears in the string descriptor. The msgfmt program +has an option selecting the alignment for MO file strings. With this option, +each string is separately aligned so it starts at an offset which is a multiple +of the alignment value. On some RISC machines, a correct alignment will speed +things up.

    +

    Plural forms are stored by letting the plural of the +original string follow the singular of the original string, separated through a +NUL byte. The length which appears in the string descriptor includes +both. However, only the singular of the original string takes part in the hash +table lookup. The plural variants of the translation are all stored +consecutively, separated through a NUL byte. Here also, the length in +the string descriptor includes all of them.

    +

    Nothing prevents a MO file from having embedded NULs in strings. +However, the program interface currently used already presumes that strings are +NUL terminated, so embedded NULs are somewhat useless. But +the MO file format is general enough so other interfaces would be later +possible, if for example, we ever want to implement wide characters right in MO +files, where NUL bytes may accidently appear. (No, we don't want to +have wide characters in MO files. They would make the file unnecessarily large, +and the `wchar_t´ type being platform dependent, MO files would be +platform dependent as well.)

    +

    This particular issue has been strongly debated in the GNU +gettext development forum, and it is expectable that MO file format +will evolve or change over time. It is even possible that many formats may later +be supported concurrently. But surely, we have to start somewhere, and the MO +file format described here is a good start. Nothing is cast in concrete, and the +format may later evolve fairly easily, so we should feel comfortable with the +current approach.

            byte
    +             +------------------------------------------+
    +          0  | magic number = 0x950412de                |
    +             |                                          |
    +          4  | file format revision = 0                 |
    +             |                                          |
    +          8  | number of strings                        |  == N
    +             |                                          |
    +         12  | offset of table with original strings    |  == O
    +             |                                          |
    +         16  | offset of table with translation strings |  == T
    +             |                                          |
    +         20  | size of hashing table                    |  == S
    +             |                                          |
    +         24  | offset of hashing table                  |  == H
    +             |                                          |
    +             .                                          .
    +             .    (possibly more entries later)         .
    +             .                                          .
    +             |                                          |
    +          O  | length & offset 0th string  ----------------.
    +      O + 8  | length & offset 1st string  ------------------.
    +              ...                                    ...   | |
    +O + ((N-1)*8)| length & offset (N-1)th string           |  | |
    +             |                                          |  | |
    +          T  | length & offset 0th translation  ---------------.
    +      T + 8  | length & offset 1st translation  -----------------.
    +              ...                                    ...   | | | |
    +T + ((N-1)*8)| length & offset (N-1)th translation      |  | | | |
    +             |                                          |  | | | |
    +          H  | start hash table                         |  | | | |
    +              ...                                    ...   | | | |
    +  H + S * 4  | end hash table                           |  | | | |
    +             |                                          |  | | | |
    +             | NUL terminated 0th string  <----------------' | | |
    +             |                                          |    | | |
    +             | NUL terminated 1st string  <------------------' | |
    +             |                                          |      | |
    +              ...                                    ...       | |
    +             |                                          |      | |
    +             | NUL terminated 0th translation  <---------------' |
    +             |                                          |        |
    +             | NUL terminated 1st translation  <-----------------'
    +             |                                          |
    +              ...                                    ...
    +             |                                          |
    +             +------------------------------------------+
    +
    +

    +


    + +

    Go to the first, previous, +next, +last +section, table of +contents.

    diff --git a/doc/ycp_puttext.txt b/doc/ycp_puttext.txt new file mode 100644 index 00000000..268b7c67 --- /dev/null +++ b/doc/ycp_puttext.txt @@ -0,0 +1,664 @@ +#!/usr/bin/perl -w +# +# ycp_puttext - reverse xgettext for YCP files. +# Takes a (English) .po-file and patches the translated texts +# (presumably in better English than the program author's) +# into a YCP script. +# +# Author: Stefan Hundhammer + +use strict; +use English; +use Getopt::Std; +use File::Basename; +use vars qw( $opt_v $opt_s $opt_d $opt_h $opt_m $opt_l ); + + +# Global variables. + +my $verbose = 1; +my $debug = 0; +my $allow_missing_files = 0; +my $suppress_logfile = 0; +my $logfile = <./ycp_puttext.log>; + + +my %trans; # translations: $trans{"orig"} = "translated"; +my %trans_ref_count; # reference counts: $trans_ref_count{"orig"} = 4; + +# The reference counts will be increased as the .po file is being read +# in and decreased as the .ycp file is being patched. After all .ycp +# files are processed, all reference counts should be zero. +# +# If they are not - happy bug hunting ;-) +# +# If the reference count mechanism complains about invalid reference +# counts, more often than not the source code contains the texts to be +# translated in commented-out code. Is this a bug or not? Decide on +# your own. This script, however, will do its work even in such +# commented-out code no matter what - even if it complains. + + +my %ycp_files; # ycp files to patch: + # $ycp_files{"installation.ycp"} = "y2m_inst/ycp/general/installation.ycp"; + + + +# Forward declarations. + +sub main(); + + +# Call the main function and exit. +# DO NOT enter any other code outside a sub - +# any variables would otherwise be global. + + +main(); +exit 0; + + +#----------------------------------------------------------------------------- + + +# Main program. + +sub main() +{ + my $ycp_base_path; + my $po_file; + + # Extract command line options. + # This will set a variable opt_? for any option, + # e.g. opt_v if option '-v' is passed on the command line. + + getopts('vsdhml'); + + usage() if $opt_h; + $verbose = 1 if $opt_v; + $verbose = 0 if $opt_s; + $debug = 1 if $opt_d; + $allow_missing_files = 1 if $opt_m; + $suppress_logfile = 1 if $opt_l; + + $po_file = shift @ARGV or usage(); + $ycp_base_path = shift @ARGV or usage(); + + open ( LOG, ">$logfile" ) or die "FATAL: Can't open $logfile" + unless $suppress_logfile; + + ycp_puttext ( $po_file, $ycp_base_path ); + + if ( ! $suppress_logfile ) + { + print "Wrote log to $logfile.\n"; + close( LOG ); + } +} + + +#----------------------------------------------------------------------------- + + +# Process one YCP file: +# Take the translations from $po_file and patch them into $ycp_file. +# +# Parameters: +# po_file +# ycp_base_path + +sub ycp_puttext() +{ + my ( $po_file, $ycp_base_path ) = @_; + my $trans_count; + + open ( PO, $po_file ) or die "FATAL: Can't open $po_file"; + $trans_count = read_po(); + close ( PO ); + + if ( $opt_d ) + { + print "Read translations:\n"; + dump_translations(); + print "\n--- Translations end ---\n\n\n"; + } + + die "Only empty translations in $po_file. Aborting." if $trans_count == 0; + + find_ycp_files( $ycp_base_path ); + my $ycp_file_basename; + my $ycp_file; + + foreach $ycp_file_basename ( sort keys %ycp_files ) + { + $ycp_file = $ycp_files{ $ycp_file_basename }; + open ( IN, $ycp_file ) or die "FATAL: Can't open $ycp_file"; + open ( OUT, ">$ycp_file.tmp" ) or die "FATAL: Can't open $ycp_file.tmp"; + + replace_ycp_messages ( $ycp_file ); + + close ( OUT ); + close ( IN ); + } + + dump_trans_refs( $po_file, 1 ); + + + foreach $ycp_file_basename ( sort keys %ycp_files ) + { + $ycp_file = $ycp_files{ $ycp_file_basename }; + rename ( $ycp_file, $ycp_file . ".old" ); + rename ( $ycp_file . ".tmp", $ycp_file ) or warning ( "Can't rename $ycp_file.tmp to $ycp_file" ); + } + + undef %trans; + undef %trans_ref_count; + undef %ycp_files; +} + + +#----------------------------------------------------------------------------- + +# Read a gettext .po-file and store its contents in some (global) hashes: +# %trans the translations themselves +# %trans_ref_count reference count for each translation +# +# Parameters: --- +# +# Return value: The number of non-empty translations + +sub read_po() +{ + my @line_numbers; + my $msgid; + my $msgstr; + my $in_msgid = 0; + my $in_msgstr = 0; + my $multi_line = 0; + my $line; + my @line_no_infos; + my $line_no_info; + my $fuzzy = 0; + my $trans_count = 0; + + while ( $line = ) + { + if ( $line =~ '^#:' ) # line number info: + { # #: xy/abc.ycp:123 xy/abc.ycp:456 + $in_msgid = 0; + $in_msgstr = 0; + + # process the last translation, if there is any + # since there is no real end-of-record delimiter + # in gettext format, the next occurence of line number infos + # is the loop end condition. + + if ( defined $msgstr ) + { + $trans_count = store_translation ( $msgid, $msgstr, $fuzzy, $trans_count, @line_numbers ); + undef @line_numbers; + undef $msgid; + undef $msgstr; + $multi_line = 0; + $fuzzy = 0; + } + + $line =~ s/^#://; # remove line header + $line =~ s/^\s+//; # remove leading whitespace + $line =~ s/\s+$//; # remove trailing whitespace + @line_no_infos = split ( '\s+', $line ); + + foreach $line_no_info ( @line_no_infos ) + { + my ( $filename, $line_no ) = split ( ':', $line_no_info, 2 ); + $filename = basename( $filename ); + $ycp_files{ $filename } = ""; + push @line_numbers, $line_no; + } + } + elsif ( $line =~ /^#, fuzzy/ ) # fuzzy marker? + { + $fuzzy = 1; + } + elsif ( $line =~ /^#/ ) # comment line? + { + next; # -> skip + } + elsif ( $line =~ /^msgid/ ) + { + $in_msgid = 1; + $in_msgstr = 0; + + if ( $line =~ /^msgid ""/ ) + { + $multi_line = 1 + } + } + elsif ( $line =~ /^msgstr/ ) + { + warning( "Ignoring fuzzy message:\n", shorten ( $msgid, 2*80 ), "\n" ) if ( $fuzzy ); + $in_msgid = 0; + $in_msgstr = 1; + } + + my $quoted_string = $line; + chomp $quoted_string; + $quoted_string =~ s:^[^"]*"(.*)".*$:$1:; # "] (for emacs) + + if ( $in_msgid ) + { + $msgid .= $quoted_string; + } + if ( $in_msgstr ) + { + if ( $multi_line && defined $msgstr && length ( $msgstr ) > 0 ) + { + $msgstr =~ s/\\n$//; + $msgstr .= "\n"; + } + + $msgstr .= $quoted_string; + } + } + + # process the last translation + + if ( length ( $msgstr ) > 0 ) + { + $trans_count = store_translation ( $msgid, $msgstr, $fuzzy, $trans_count, @line_numbers ); + } + + return $trans_count; +} + + +#----------------------------------------------------------------------------- + +# Store a (non zero) translation in the internal hashes. +# Empty translations will be silently ignored. +# +# Parameters: +# $msgid the original message +# $msgstr the translated message +# $fuzzy fuzzy flag - ignore this message +# @line_numbers the line numbers where this translation occurs + +sub store_translation() +{ + my ( $msgid, $msgstr, $fuzzy, $trans_count, @line_numbers ) = @_; + my $line_no; + $msgid = normalize ( $msgid ); + + if ( length ( $msgid ) > 0 && + length ( $msgstr ) > 0 && + ! $fuzzy && + $msgid ne normalize( $msgstr ) ) + { + $trans{ $msgid } = $msgstr; + $trans_ref_count{ $msgid } = $#line_numbers + 1; + $trans_count++; + } + + return $trans_count; +} + + +#----------------------------------------------------------------------------- + + +# Find the actual location of the .ycp files in %ycp_files +# starting from $ycp_base_path. +# +# Parameters: +# ycp_base_path + +sub find_ycp_files() +{ + my ( $ycp_base_path ) = @_; + my $ycp_file; + my $basename; + + foreach $ycp_file ( `find $ycp_base_path -name "*.ycp" -print` ) + { + chomp $ycp_file; + $basename = basename( $ycp_file ); + + if ( defined $ycp_files{ $basename } ) + { + $ycp_files{ $basename } = $ycp_file; + logf( "Found $ycp_file" ); + } + } + + my $leftover = 0; + + foreach $ycp_file ( sort keys %ycp_files ) + { + if ( $ycp_files{ $ycp_file } eq "" ) + { + $leftover++; + warning( "Warning: Can't find .ycp file $ycp_file" ); + } + } + + if ( $leftover > 0 && ! $allow_missing_files ) + { + die "\nFATAL: Couldn't find all required .ycp files.\n" + . "You can use option -m to override this if you are sure that's OK.\n\n"; + } +} + + +#----------------------------------------------------------------------------- + + +# Process one .ycp file: +# Replace all messages marked for translation - as in _("orig") - with +# the translated texts from the .po file. +# +# Parameters: +# $ycp_file_name file name of the .ycp file (for error logging) + + +sub replace_ycp_messages() +{ + my ( $ycp_file ) = @_; + my $src; + my $head; + my $msg; + my $norm_msg; + my $line; + + # read the entire input file + + while ( $line = ) + { + $src .= $line; + } + + # warn for invalid lines like: + # _( + # // comment + # "bla blurb..." + # + # _( + # /* comment */ + # "bla blurb..." + + if ( $src =~ m:(_\(\s*//.*)":ms || + $src =~ m:(_\(\s*/\*.*)":ms ) + { + warning ( "WARNING: $ycp_file contains comments in texts to translate:\n\n", + shorten ( $1, 2*80 ), + "\n\nThis text will most likely be ignored!\n" ); + } + + + # parse input file + + while ( defined $src && length ( $src ) > 0 ) + { + # split src at first message beginning: _(" + + ( $head, $src ) = split ( /_\(\s*"/ms, $src, 2 ); # ") for emacs + print OUT $head; + + if ( defined $src && length ( $src ) > 0 ) # any message found? + { + # split src at message end: ") + + ( $msg, $src ) = split ( /"\s*\)/ms, $src, 2 ); # ") for emacs + $norm_msg = normalize ( $msg ); + + if ( defined $trans{ $norm_msg } ) + { + if ( ! defined $trans_ref_count{ $norm_msg } || $trans_ref_count{ $norm_msg } < 1 ) + { + warning ( "$ycp_file: WARNING: Invalid reference count for \"" + . shorten ( $msg, 50 ) . "\"" ); + } + else + { + $trans_ref_count{ $norm_msg }--; + } + + if ( length( $trans{ $norm_msg } ) > 0 ) + { + my $fixed_msg = ""; + my $old_msg = $msg; + $msg = $trans{ $norm_msg }; + + # Avoid over-long lines with embedded "\n" + # if otherwise formatted in the original + + if ( $old_msg =~ /.+\n.+/ && # old message contained literal newlines + ! ( $msg =~ /.+\n.+/ ) && # new message doesn't contain literal newlines + $msg =~ /.+\\n.+/ ) # but escaped newlines - "\n" + { + $msg =~ s:\\n:\n:g ; # Replace escaped with literal newlines + $fixed_msg = " (fixed over-long lines)"; + } + + logf ( "*" x 50 . "\n" + . "$ycp_file: Replacing message.\n" + . "Old message:\n" + . "\n" + . "\"$old_msg\"\n" + . "\n" + . "New message" . $fixed_msg . ":\n\n" + . "\"$msg\"\n" + . "\n" ); + + } + else + { + deb ( "$ycp_file: Don't have a translation for \"" . shorten ( $msg, 50 ) . "\"" ); + } + } + else + { + # warning ( "\n$ycp_file: ERROR: Unknown message: \n\"" . $msg . "\"\n" ); + deb ( "\nNormalized: \n\"" . $norm_msg . "\"\n\n" ); + } + + print OUT '_("' . $msg . '")'; + } + } +} + + +#----------------------------------------------------------------------------- + + +# Normalize a string used as msgid +# +# Parametes: +# $str string to normalize +# +# Return value: +# normalized string + +sub normalize() +{ + my ( $str ) = @_; + + $str =~ s/\\"//g; # [" for emacs] remove embedded escaped quotes + $str =~ s/\\\n/ /g; # replace escaped newline with one blank + $str =~ s/\\n/ /g; # replace embedded newline symbols '\n' with one blank + $str =~ s/\s+/ /g; # replace all whitespace (including newline) with one blank + $str =~ s/^\s+//; # remove all leading whitespace + $str =~ s/\s+$//; # remove all trailing whitespace + + return $str; +} + + +#----------------------------------------------------------------------------- + + +# For debugging: dump internally stored data + +sub dump_all() +{ + my ( $po_file ) = @_; + + dump_trans_refs( $po_file, 0 ); + dump_translations(); +} + + +sub dump_translations() +{ + my $msgid; + + print "\n\n"; + + foreach $msgid ( sort keys %trans ) + { + print "*** msgid: ***\n"; + print $msgid; + print "\n---> msgstr:\n"; + print $trans{ $msgid }; + print "\n---\n\n"; + } +} + + +sub dump_trans_refs() +{ + my ( $po_file, $threshold ) = @_; + my $msgid; + my $msg; + + foreach $msgid ( sort keys %trans_ref_count ) + { + print "$po_file: Reference count for \"" . shorten ( $msgid, 50 ) . "\": $trans_ref_count{ $msgid }\n" + unless $trans_ref_count{ $msgid } <= $threshold; + } +} + + +#----------------------------------------------------------------------------- + +# Shorten a message to max $len characters +# +# Return value: Shortened message + +sub shorten() +{ + my ( $msg, $len ) = @_; + $msg = substr ( $msg, 0, $len ) . "..." if ( length ( $msg ) > $len ); + + return $msg; +} + + +#----------------------------------------------------------------------------- + + +# Log a message to stderr. +# +# Parameters: +# Messages to write (any number). + +sub warning() +{ + my $msg; + + foreach $msg ( @_ ) + { + print STDERR $msg . " "; + print LOG $msg . " " unless $suppress_logfile; + } + + print STDERR "\n"; + print LOG "\n" unless $suppress_logfile; +} + + +#----------------------------------------------------------------------------- + + +# Log a message to stdout if verbose mode is set +# (command line option '-v'). +# +# Parameters: +# Messages to write (any number). + +sub logf() +{ + my $msg; + + if ( $verbose ) + { + foreach $msg ( @_ ) + { + print $msg . " "; + print LOG $msg . " " unless $suppress_logfile; + } + + print "\n"; + print LOG "\n" unless $suppress_logfile; + } +} + + +#----------------------------------------------------------------------------- + + +# Log a debugging message to stdout if debug mode is set +# (command line option '-d'). +# +# Parameters: +# Messages to write (any number). + +sub deb() +{ + my $msg; + + if ( $debug ) + { + print ' DEB> '; + + foreach $msg ( @_ ) + { + print $msg . " "; + } + + print "\n"; + } +} + + +#----------------------------------------------------------------------------- + + +# Print usage message and abort program. +# +# Parameters: +# --- + +sub usage() +{ + die "\n" + . "Usage: $0 [-dhsvml] \n" + . "\n" + . "\t-d debug\n" + . "\t-h help (this message)\n" + . "\t-s silent (turn verbose off)\n" + . "\t-v verbose (default)\n" + . "\t-m allow missing .ycp files\n" + . "\t-l suppress logging to $logfile\n" + . "\n" + . "Patches proof-read English messages from back into\n" + . "the corresponding .ycp files somewhere below .\n" + . "The actual names of those .ycp files are taken from the .po file.\n" + . "\n" + . "Example:\n" + . "\t$0 ~/tmp/partitioning.en_US.po ~/yast2/modules/y2m_inst\n" + . "\n"; +} + + + +# EOF diff --git a/include/sys/types.h b/include/sys/types.h new file mode 100644 index 00000000..9f8518ba --- /dev/null +++ b/include/sys/types.h @@ -0,0 +1,106 @@ +#ifndef __TYPES_H +#define __TYPES_H + +#ifndef __FEATURES_H +#include "features.h" +#endif + +/* USER! basic data types */ +/* ! uchar & uint is counterparts and must be declared simultaneously */ +#ifndef uchar_is_defined +#define uchar_is_defined +typedef unsigned char uchar; +typedef unsigned int uint; +#endif + +typedef uchar bool_t; /* boolean value */ +typedef uint count_t; /* counter for anything */ +#ifndef _SIZE_T +#define _SIZE_T +typedef uint size_t; +#endif + +typedef unsigned int mode_t; +#if 0 /* Nick, see unix.h !! */ +typedef struct blkoff_t { + uint/*16*/ o_blkno; /* Block number */ + int/*16*/ o_offset; /* Offset within block 0-511 */ +} blkoff_t; +#endif +typedef long off_t; + +/* file's timestamp structure (non UNIX-standart) */ +typedef struct s_time { + uint t_time; + uint t_date; +} time_t; + +/* User's structure for times() system call */ +struct tms { + time_t tms_utime; + time_t tms_stime; + time_t tms_cutime; + time_t tms_cstime; + time_t tms_etime; /* Elapsed real time */ +}; + +#ifndef utimbuf_is_defined +#define utimbuf_is_defined +/* User's structure for utime() system call */ +struct utimbuf { + time_t actime; + time_t modtime; +}; +#endif + +/* data structure for stat() */ +struct stat { /* USER! Really only used by users */ + uint st_dev; /* device number */ + uint st_ino; /* inode number */ + mode_t st_mode; /* file mode */ + uint st_nlink; /* number of links */ + uint st_uid; /* owner id */ + uint st_gid; /* owner group */ + uint st_rdev; /* */ + off_t st_size; /* Nick changed blkoff_t to off_t file size */ + time_t st_atime; /* last access time */ + time_t st_mtime; /* last modification time */ + time_t st_ctime; /* file creation time */ +}; + +#define DIRNAMELEN 14 + +/* device directory entry */ +typedef struct direct { + unsigned int d_ino; /* file's inode */ + uchar d_name[DIRNAMELEN]; /* file name */ +} direct_t; + +#ifndef NULL +#define NULL 0 +#endif + +#define BUFSIZE 512 /* uzix buffer/block size */ +#define BUFSIZELOG 9 /* uzix buffer/block size log2 */ + +#if 1 /* Nick free bitmap */ +#define REGION_LOG 14 +#define REGION_BYTES (1< +0 argc 00000001 99 .if 1 00008100 D1 100 pop de - 00008101 ED 53 41 86 101 ld (_argc),de ; vendor __argc (2nd argument to main) + 00008101 ED 53 8C 8D 101 ld (_argc),de ; vendor __argc (2nd argument to main) 00008105 C1 102 pop bc - 00008106 ED 43 43 86 103 ld (_argv),bc ; vendor __argv (1st argument to main) + 00008106 ED 43 8E 8D 103 ld (_argv),bc ; vendor __argv (1st argument to main) 0000810A E1 104 pop hl - 0000810B 22 45 86 105 ld (environ),hl ; vendor _environ + 0000810B 22 90 8D 105 ld (environ),hl ; vendor _environ 106 .else 107 ld ix,0 108 add ix,sp @@ -118,9 +118,9 @@ 118 .endif 119 00000001 120 .if 1 - 0000810E 21 9C 6F 121 ld HL,LWRD main ; banked call to _main() + 0000810E 21 53 66 121 ld HL,LWRD main ; banked call to _main() 00008111 3E 00 122 ld A,BYTE3 main - 00008113 CD 19 82 123 call ?BANK_CALL_DIRECT_L08 + 00008113 CD 49 81 123 call ?BANK_CALL_DIRECT_L08 124 .else 125 call main ; vendor _main ; non-banked call to _main() 126 .endif @@ -128,9 +128,9 @@ 00008116 EB 128 ex de,hl ; de = exitcode (1st argument to exit) 129 00000001 130 .if 1 - 00008117 21 AE 4C 131 ld HL,LWRD exit ; banked call to _exit() - 0000811A 3E 01 132 ld A,BYTE3 exit - 0000811C C3 19 82 133 jp ?BANK_CALL_DIRECT_L08 + 00008117 21 78 7F 131 ld HL,LWRD exit ; banked call to _exit() + 0000811A 3E 00 132 ld A,BYTE3 exit + 0000811C C3 49 81 133 jp ?BANK_CALL_DIRECT_L08 134 .else 135 jp exit ; vendor _exit ; non-banked call to _exit() 136 .endif @@ -291,14 +291,14 @@ 291 ;public __argc, __argv, _environ, _errno, ___cleanup 292 293 rseg UDATA0 - 00008641 294 _argc: defs 2 ; vendor __argc - 00008643 295 _argv: defs 2 ; vendor __argv - 00008645 296 environ: defs 2 ; vendor _environ - 00008647 297 errno: defs 2 ; vendor _errno - 00008649 298 __cleanup: defs 3 ; oopsy 2 ; vendor ___cleanup + 00008D8C 294 _argc: defs 2 ; vendor __argc + 00008D8E 295 _argv: defs 2 ; vendor __argv + 00008D90 296 environ: defs 2 ; vendor _environ + 00008D92 297 errno: defs 2 ; vendor _errno + 00008D94 298 __cleanup: defs 3 ; oopsy 2 ; vendor ___cleanup 299 300 rseg CSTACK - 00008884 301 defs E_STACK_SIZE + 00009659 301 defs E_STACK_SIZE 302 303 ; ----------------------------------------------------------------------------- 304 @@ -314,10 +314,9 @@ Symbol Table 1 __init 00000000 GR | 9 _argc 00000000 GR 9 _argv 00000002 GR | e_CSTACK ******** GX 9 environ 00000004 GR | 9 errno 00000006 GR - exit ******** GX | l__DEFAULT ******** GX - main ******** GX | s_CSTACK ******** GX - s_RCODE ******** GX | s_UDATA0 ******** GX - + exit ******** GX | main ******** GX + s_CSTACK ******** GX | s_RCODE ******** GX + s_UDATA0 ******** GX ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2. Hexadecimal [32-Bits] diff --git a/lib/c0l.lst b/lib/c0l.lst index 0695ad60..f0bc3bda 100644 --- a/lib/c0l.lst +++ b/lib/c0l.lst @@ -15,7 +15,7 @@ 15 extern main ; vendor _main 16 extern exit ; vendor _exit 17 - 18 extern l__DEFAULT ; e_hsize + 18 ; extern l__DEFAULT ; e_hsize 19 extern s_RCODE ; e_idata 20 extern s_UDATA0 ; e_udata 21 extern s_CSTACK ; e_stack @@ -58,7 +58,7 @@ 00000000 C9 A6 58 defw E_MAGIC ; e_magic 00000002 01 00 59 defw E_FORMAT_LARGE ; e_format 00000004 78 56 34 12 60 defd 12345678h ; e_size - 00000008 00 00 61 defw l__DEFAULT ; e_hsize + 00000008 14 00 61 defw 14h ;l__DEFAULT ; e_hsize 0000000A 00 00 62 defw s_RCODE ; e_idata 0000000C 00 00 63 defw __init ; e_entry 0000000E 00 00 64 defw s_UDATA0 ; e_udata @@ -314,9 +314,9 @@ Symbol Table 9 _argc 00000000 GR | 9 _argv 00000002 GR e_CSTACK ******** GX | 9 environ 00000004 GR 9 errno 00000006 GR | exit ******** GX - l__DEFAULT ******** GX | main ******** GX - s_CSTACK ******** GX | s_RCODE ******** GX - s_UDATA0 ******** GX + main ******** GX | s_CSTACK ******** GX + s_RCODE ******** GX | s_UDATA0 ******** GX + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2. Hexadecimal [32-Bits] diff --git a/lib/c0l.rel b/lib/c0l.rel index 38231c10..5aefde1e 100644 --- a/lib/c0l.rel +++ b/lib/c0l.rel @@ -1,8 +1,7 @@ XL4 -H B areas E global symbols +H B areas D global symbols M _c0l S s_CSTACK Ref00000000 -S l__DEFAULT Ref00000000 S s_UDATA0 Ref00000000 S s_RCODE Ref00000000 S main Ref00000000 @@ -26,14 +25,14 @@ S __cleanup Def00000008 S errno Def00000006 S _argc Def00000000 A CSTACK size 1000 flags 0 -T 00 00 00 00 C9 A6 01 00 78 56 34 12 +T 00 00 00 00 C9 A6 01 00 78 56 34 12 14 00 R 00 00 00 00 -T 08 00 00 00 00 00 00 00 00 00 00 00 -R 00 00 00 00 02 04 01 00 02 08 03 00 -T 0C 00 00 00 00 00 00 00 00 00 00 00 -R 00 00 00 00 00 04 01 00 02 08 02 00 -T 10 00 00 00 00 00 00 00 00 00 00 00 -R 00 00 00 00 02 04 00 00 02 08 06 00 +T 0A 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 00 00 02 04 02 00 00 08 01 00 +T 0E 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 00 00 02 04 01 00 02 08 00 00 +T 12 00 00 00 00 00 00 00 +R 00 00 00 00 02 04 05 00 T 00 00 00 00 R 00 00 01 00 T 00 00 00 00 D1 ED 53 00 00 00 00 C1 ED 43 @@ -41,7 +40,7 @@ R 00 00 01 00 00 07 09 00 T 08 00 00 00 02 00 00 00 E1 22 04 00 00 00 CD R 00 00 01 00 00 04 09 00 00 0A 09 00 T 0F 00 00 00 00 00 00 00 EB C3 00 00 00 00 -R 00 00 01 00 02 04 04 00 02 0A 05 00 +R 00 00 01 00 02 04 03 00 02 0A 04 00 T 00 00 00 00 R 00 00 09 00 T 02 00 00 00 diff --git a/lib/c0l.rst b/lib/c0l.rst new file mode 100644 index 00000000..6e244c5a --- /dev/null +++ b/lib/c0l.rst @@ -0,0 +1,335 @@ + 1 ; c0l.asm by Nick for UZI180 large memory model + 2 + 3 ; ----------------------------------------------------------------------------- + 4 + 00000000 5 .if 0 + 6 $ io64180.s01 + 7 .endif + 8 + 9 module _c0l + 10 + 11 public __init ; vendor _init + 00000000 12 .if 0 + 13 extern brk ; vendor _brk + 14 .endif + 15 extern main ; vendor _main + 16 extern exit ; vendor _exit + 17 + 18 ; extern l__DEFAULT ; e_hsize + 19 extern s_RCODE ; e_idata + 20 extern s_UDATA0 ; e_udata + 21 extern s_CSTACK ; e_stack + 22 extern e_CSTACK ; e_break + 23 + 00000000 24 .if 0 + 25 extern ?BANK_CALL_DIRECT_L08 + 26 .endif + 27 + 0000A6C9 28 E_MAGIC equ 0a6c9h + 00000001 29 E_FORMAT_LARGE equ 1 + 00001000 30 E_STACK_SIZE equ 1000h + 31 + 32 ; ----------------------------------------------------------------------------- + 33 ; forward definitions of segments, to set the linkage order (c0l must be first) + 34 + 35 rseg RCODE + 36 rseg CODE ; needs to be at start for large model + 37 ; rseg TEMP + 38 ; rseg DATA0 + 39 ; rseg WCSTR + 40 rseg CONST + 41 rseg CSTR + 42 rseg IDATA0(NUL) + 43 rseg CDATA0 + 44 rseg ECSTR(NUL) + 45 rseg CCSTR + 46 rseg UDATA0 + 47 rseg CSTACK + 48 + 49 ; ----------------------------------------------------------------------------- + 50 + 00000001 51 .if 1 + 52 rseg _DEFAULT ; means header is discarded at loading + 53 .else + 54 rseg RCODE ; means header is visible to loaded pgm + 55 .endif + 56 + 00000001 57 .if 1 + 00000000 C9 A6 58 defw E_MAGIC ; e_magic + 00000002 01 00 59 defw E_FORMAT_LARGE ; e_format + 00000004 78 56 34 12 60 defd 12345678h ; e_size + 00000008 14 00 61 defw 14h ;l__DEFAULT ; e_hsize + 0000000A 00 81 62 defw s_RCODE ; e_idata + 0000000C 00 81 63 defw __init ; e_entry + 0000000E FE 9D 64 defw s_UDATA0 ; e_udata + 00000010 82 A4 65 defw s_CSTACK ; e_stack + 00000012 82 B4 66 defw e_CSTACK ; e_break + 67 .else + 68 jp __init + 69 .endif + 70 + 71 ; ----------------------------------------------------------------------------- + 72 + 73 rseg RCODE + 74 + 00008100 75 __init:: + 00000000 76 .if 0 + 77 ld a,'A' + 78 call abyte + 79 .endif + 80 + 00000000 81 .if 0 + 82 ld de,.sfb.CSTACK ; 1st argument to brk() + 83 + 00000000 84 .if 0 + 85 ld hl,LWRD brk + 86 ld a,BYTE3 brk + 87 call ?BANK_CALL_DIRECT_L08 + 88 .else + 89 call brk + 90 .endif + 91 + 92 call seg_init + 93 .endif + 94 + 95 ; now there are the next stack structure: + 96 ; +4 envp + 97 ; +2 argv + 98 ; sp-> +0 argc + 00000001 99 .if 1 + 00008100 D1 100 pop de + 00008101 ED 53 FE 9D 101 ld (_argc),de ; vendor __argc (2nd argument to main) + 00008105 C1 102 pop bc + 00008106 ED 43 00 9E 103 ld (_argv),bc ; vendor __argv (1st argument to main) + 0000810A E1 104 pop hl + 0000810B 22 02 9E 105 ld (environ),hl ; vendor _environ + 106 .else + 107 ld ix,0 + 108 add ix,sp + 109 ld l,(ix+4) + 110 ld h,(ix+5) + 111 ld (environ),hl ; vendor _environ + 112 ld c,(ix+2) + 113 ld b,(ix+3) + 114 ld (_argv),bc ; vendor __argv (1st argument to main) + 115 ld e,(ix+0) + 116 ld d,(ix+1) + 117 ld (_argc),de ; vendor __argc (2nd argument to main) + 118 .endif + 119 + 00000000 120 .if 0 + 121 ld HL,LWRD main ; banked call to _main() + 122 ld A,BYTE3 main + 123 call ?BANK_CALL_DIRECT_L08 + 124 .else + 0000810E CD EA 83 125 call main ; vendor _main ; non-banked call to _main() + 126 .endif + 127 + 00008111 EB 128 ex de,hl ; de = exitcode (1st argument to exit) + 129 + 00000000 130 .if 0 + 131 ld HL,LWRD exit ; banked call to _exit() + 132 ld A,BYTE3 exit + 133 jp ?BANK_CALL_DIRECT_L08 + 134 .else + 00008112 C3 EF 93 135 jp exit ; vendor _exit ; non-banked call to _exit() + 136 .endif + 137 + 138 ; ----------------------------------------------------------------------------- + 139 + 00000000 140 .if 0 + 141 seg_init: + 142 ld HL,.sfe.UDATA0 + 143 ld DE,.sfb.UDATA0 + 144 call zero_mem + 145 + 146 ld DE,.sfb.IDATA0 ; destination address + 147 ld HL,.sfe.CDATA0 ;+4000h ; really 8:0000 + .sfe.CDATA0 + 148 ld BC,.sfb.CDATA0 ;+4000h ; really 8:0000 + .sfb.CDATA0 + 149 call copy_mem + 150 + 151 ld DE,.sfb.ECSTR ; destination address + 152 ld HL,.sfe.CCSTR ;+4000h ; really 8:0000 + .sfe.CCSTR + 153 ld BC,.sfb.CCSTR ;+4000h ; really 8:0000 + .sfb.CCSTR + 154 + 155 ; Just fall in to the copy_mem function + 156 + 157 copy_mem: + 158 XOR A + 159 SBC HL,BC + 160 PUSH BC + 161 LD C,L + 162 LD B,H ; BC - that many bytes + 163 POP HL ; source address + 164 RET Z ; If block size = 0 return now + 165 LDIR + 166 RET + 167 + 168 zero_mem: + 169 XOR A + 170 again: PUSH HL + 171 SBC HL,DE + 172 POP HL + 173 RET Z + 174 LD (DE),A + 175 INC DE + 176 JR again + 177 .endif + 178 + 179 ; ----------------------------------------------------------------------------- + 180 + 00000000 181 .if 0 + 182 public _abyte + 183 + 184 _abyte:: + 00000000 185 .if 0 ; SDCC + 186 ld hl,2 + 187 add hl,sp + 188 ld a,(hl) + 189 .else ; IAR + 190 ld a,e + 191 .endif + 192 + 193 public abyte + 194 + 195 abyte:: + 00000000 196 .if 0 + 197 ret + 198 .else + 199 push af + 200 .endif + 201 + 202 L1$: in0 a,(STAT1) + 203 and 10b + 204 jr z,L1$ + 205 + 206 pop af + 207 out0 (TDR1),a + 208 + 00000000 209 .if 0 + 210 di + 211 .endif + 00000000 212 .if 0 + 213 ei + 214 .endif + 215 ret + 216 + 217 public _acrlf + 218 + 219 _acrlf:: + 220 + 221 public acrlf + 222 + 223 acrlf:: + 224 ld a,0dh + 225 call abyte + 226 ld a,0ah + 227 jr abyte + 228 + 229 public _ahexw + 230 + 231 _ahexw:: + 00000000 232 .if 0 ; SDCC + 233 ld hl,2 + 234 add hl,sp + 235 ld e,(hl) + 236 inc hl + 237 ld d,(hl) + 238 .endif + 239 ex de,hl + 240 + 241 public ahexw + 242 + 243 ahexw:: + 244 ld a,h + 245 call ahexb + 246 ld a,l + 247 + 248 public ahexb + 249 + 250 ahexb:: + 251 push af + 252 rrca + 253 rrca + 254 rrca + 255 rrca + 256 call ahexn + 257 pop af + 258 + 259 public ahexn + 260 + 261 ahexn:: + 262 and 0fh + 263 add a,90h + 264 daa + 265 adc a,40h + 266 daa + 267 jr abyte + 268 + 269 public amess + 270 + 271 amess:: + 272 ex (sp),hl + 273 push af + 274 + 275 L01$: ld a,(hl) + 276 inc hl + 277 or a + 278 jr z,L02$ + 279 + 280 call abyte + 281 jr L01$ + 282 + 283 L02$: pop af + 284 ex (sp),hl + 285 ret + 286 .endif + 287 + 288 ; ----------------------------------------------------------------------------- + 289 + 290 public _argc, _argv, environ, errno, __cleanup + 291 ;public __argc, __argv, _environ, _errno, ___cleanup + 292 + 293 rseg UDATA0 + 00009DFE 294 _argc: defs 2 ; vendor __argc + 00009E00 295 _argv: defs 2 ; vendor __argv + 00009E02 296 environ: defs 2 ; vendor _environ + 00009E04 297 errno: defs 2 ; vendor _errno + 00009E06 298 __cleanup: defs 2 ; vendor ___cleanup + 299 + 300 rseg CSTACK + 0000A482 301 defs E_STACK_SIZE + 302 + 303 ; ----------------------------------------------------------------------------- + 304 + 00001000 305 END + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1. +Hexadecimal [32-Bits] + +Symbol Table + + .__.ABS. = 00000000 G | E_FORMAT_LARGE = 00000001 + E_MAGIC = 0000A6C9 | E_STACK_SIZE = 00001000 + 9 __cleanup 00000008 GR | 1 __init 00000000 GR + 9 _argc 00000000 GR | 9 _argv 00000002 GR + e_CSTACK ******** GX | 9 environ 00000004 GR + 9 errno 00000006 GR | exit ******** GX + main ******** GX | s_CSTACK ******** GX + s_RCODE ******** GX | s_UDATA0 ******** GX + + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2. +Hexadecimal [32-Bits] + +Area Table + + 0 _DEFAULT size 14 flags 0 + 1 RCODE size 15 flags 0 + 2 CODE size 0 flags 0 + 3 CONST size 0 flags 0 + 4 CSTR size 0 flags 0 + 5 IDATA0 size 0 flags 1 + 6 CDATA0 size 0 flags 0 + 7 ECSTR size 0 flags 1 + 8 CCSTR size 0 flags 0 + 9 UDATA0 size A flags 0 + A CSTACK size 1000 flags 0 diff --git a/lib/relcb/abort.rel b/lib/relcb/abort.rel index 86096f70..48fd14fe 100644 --- a/lib/relcb/abort.rel +++ b/lib/relcb/abort.rel @@ -1,6 +1,5 @@ XL4 H 2 areas A global symbols -M _abort S ?BANK_FAST_LEAVE_L08 Ref00000000 S _exit Ref00000000 S pause Ref00000000 diff --git a/lib/relcb/alloca.rel b/lib/relcb/alloca.rel index 97da7b49..e734cbf4 100644 --- a/lib/relcb/alloca.rel +++ b/lib/relcb/alloca.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 8 global symbols -M _alloca S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S free Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/asctime.rel b/lib/relcb/asctime.rel index a04f965f..c1b0202e 100644 --- a/lib/relcb/asctime.rel +++ b/lib/relcb/asctime.rel @@ -1,6 +1,5 @@ XL4 H 6 areas F global symbols -M _asctime S memcpy Ref00000000 S ?S_MUL_L02 Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/assert.rel b/lib/relcb/assert.rel index 980b04a4..0b017cbe 100644 --- a/lib/relcb/assert.rel +++ b/lib/relcb/assert.rel @@ -1,6 +1,5 @@ XL4 H 3 areas B global symbols -M _assert S _write Ref00000000 S _itoa Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/atexit.rel b/lib/relcb/atexit.rel index 4d248db7..b250001c 100644 --- a/lib/relcb/atexit.rel +++ b/lib/relcb/atexit.rel @@ -1,6 +1,5 @@ XL4 H 5 areas D global symbols -M _atexit S ?S_MUL_L02 Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/atoi.rel b/lib/relcb/atoi.rel index 3fe4320a..f8a40af5 100644 --- a/lib/relcb/atoi.rel +++ b/lib/relcb/atoi.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _atoi S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/atol.rel b/lib/relcb/atol.rel index 33e57ff2..e0aa0598 100644 --- a/lib/relcb/atol.rel +++ b/lib/relcb/atol.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _atol S ?ENT_PARM_DIRECT_L09 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S strtol Ref00000000 diff --git a/lib/relcb/bsearch.rel b/lib/relcb/bsearch.rel index 2060e568..51d1b06f 100644 --- a/lib/relcb/bsearch.rel +++ b/lib/relcb/bsearch.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 9 global symbols -M _bsearch S ?S_MUL_L02 Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/calloc.rel b/lib/relcb/calloc.rel index 08ccf318..d1ae4a65 100644 --- a/lib/relcb/calloc.rel +++ b/lib/relcb/calloc.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _calloc S memset Ref00000000 S ?S_MUL_L02 Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/clock.rel b/lib/relcb/clock.rel index ad22740e..c6a391ac 100644 --- a/lib/relcb/clock.rel +++ b/lib/relcb/clock.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _clock S ?S_MUL_L02 Ref00000000 S times Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/closedir.rel b/lib/relcb/closedir.rel index 9b04c28e..aeefd17f 100644 --- a/lib/relcb/closedir.rel +++ b/lib/relcb/closedir.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _closedir S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S close Ref00000000 S free Ref00000000 diff --git a/lib/relcb/convtime.rel b/lib/relcb/convtime.rel index e8b97829..d095d817 100644 --- a/lib/relcb/convtime.rel +++ b/lib/relcb/convtime.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 9 global symbols -M _convtime S ?US_RSH_L02 Ref00000000 S ?L_MUL_L03 Ref00000000 S timezone Ref00000000 diff --git a/lib/relcb/crypt.rel b/lib/relcb/crypt.rel index edb973fb..5abef5be 100644 --- a/lib/relcb/crypt.rel +++ b/lib/relcb/crypt.rel @@ -1,6 +1,5 @@ XL4 H 3 areas E global symbols -M _crypt S memset Ref00000000 S memcpy Ref00000000 S ?L_XOR_L03 Ref00000000 diff --git a/lib/relcb/ctime.rel b/lib/relcb/ctime.rel index 7ebfe2ac..d7947c20 100644 --- a/lib/relcb/ctime.rel +++ b/lib/relcb/ctime.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _ctime S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/ctype.rel b/lib/relcb/ctype.rel index dfe71231..30a2d562 100644 --- a/lib/relcb/ctype.rel +++ b/lib/relcb/ctype.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 7 global symbols -M _ctype S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/difftime.rel b/lib/relcb/difftime.rel index c8e243a1..b5c6d8a4 100644 --- a/lib/relcb/difftime.rel +++ b/lib/relcb/difftime.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _difftime S ?L_MUL_L03 Ref00000000 S ?S_MUL_L02 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/error.rel b/lib/relcb/error.rel index 807141c6..35fca719 100644 --- a/lib/relcb/error.rel +++ b/lib/relcb/error.rel @@ -1,6 +1,5 @@ XL4 H 6 areas 11 global symbols -M _error S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strchr Ref00000000 S close Ref00000000 diff --git a/lib/relcb/etime.rel b/lib/relcb/etime.rel index f281ea55..f07123a2 100644 --- a/lib/relcb/etime.rel +++ b/lib/relcb/etime.rel @@ -1,6 +1,5 @@ XL4 H 3 areas E global symbols -M _etime S ?S_MUL_L02 Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/execl.rel b/lib/relcb/execl.rel index d03cc060..84e34e76 100644 --- a/lib/relcb/execl.rel +++ b/lib/relcb/execl.rel @@ -1,6 +1,5 @@ XL4 H 4 areas E global symbols -M _execl S execve Ref00000000 S environ Ref00000000 S getenv Ref00000000 diff --git a/lib/relcb/execle.rel b/lib/relcb/execle.rel index 741304a8..11e35d20 100644 --- a/lib/relcb/execle.rel +++ b/lib/relcb/execle.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _execle S execve Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/execlp.rel b/lib/relcb/execlp.rel index 161e638a..310eafa4 100644 --- a/lib/relcb/execlp.rel +++ b/lib/relcb/execlp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _execlp S execve Ref00000000 S environ Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/execlpe.rel b/lib/relcb/execlpe.rel index 07ee8020..729e2c10 100644 --- a/lib/relcb/execlpe.rel +++ b/lib/relcb/execlpe.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _execlpe S execve Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/exect.rel b/lib/relcb/exect.rel index 65bfb80c..1b1c988d 100644 --- a/lib/relcb/exect.rel +++ b/lib/relcb/exect.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _exect S execve Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/execv.rel b/lib/relcb/execv.rel index 8a1f4d16..d1999854 100644 --- a/lib/relcb/execv.rel +++ b/lib/relcb/execv.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _execv S execve Ref00000000 S environ Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/execvp.rel b/lib/relcb/execvp.rel index 1aeb016f..87569559 100644 --- a/lib/relcb/execvp.rel +++ b/lib/relcb/execvp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _execvp S execve Ref00000000 S environ Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/execvpe.rel b/lib/relcb/execvpe.rel index bc9e3d34..fa5b6b74 100644 --- a/lib/relcb/execvpe.rel +++ b/lib/relcb/execvpe.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _execvpe S execve Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/exit.rel b/lib/relcb/exit.rel index 4c7e40c5..af114afb 100644 --- a/lib/relcb/exit.rel +++ b/lib/relcb/exit.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _exit S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S _exit Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/fclose.rel b/lib/relcb/fclose.rel index af6b891f..00b05135 100644 --- a/lib/relcb/fclose.rel +++ b/lib/relcb/fclose.rel @@ -1,6 +1,5 @@ XL4 H 2 areas B global symbols -M _fclose S fflush Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S close Ref00000000 diff --git a/lib/relcb/fflush.rel b/lib/relcb/fflush.rel index c71f9055..87dfb3fb 100644 --- a/lib/relcb/fflush.rel +++ b/lib/relcb/fflush.rel @@ -1,6 +1,5 @@ XL4 H 2 areas E global symbols -M _fflush S _write Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S stderr Ref00000000 diff --git a/lib/relcb/fgetc.rel b/lib/relcb/fgetc.rel index 0ba9a7be..57c007f3 100644 --- a/lib/relcb/fgetc.rel +++ b/lib/relcb/fgetc.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _fgetc S fread Ref00000000 S fflush Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/fgetgren.rel b/lib/relcb/fgetgren.rel index 996164f2..9df86ec2 100644 --- a/lib/relcb/fgetgren.rel +++ b/lib/relcb/fgetgren.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _fgetgren S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S __getgrent Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/fgetpwen.rel b/lib/relcb/fgetpwen.rel index 9d68f813..742389ab 100644 --- a/lib/relcb/fgetpwen.rel +++ b/lib/relcb/fgetpwen.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _fgetpwen S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/fgets.rel b/lib/relcb/fgets.rel index 17ce1bd5..d9a1981b 100644 --- a/lib/relcb/fgets.rel +++ b/lib/relcb/fgets.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _fgets S fgetc Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/fopen.rel b/lib/relcb/fopen.rel index 2dd3a2b3..1ea940db 100644 --- a/lib/relcb/fopen.rel +++ b/lib/relcb/fopen.rel @@ -1,6 +1,5 @@ XL4 H 2 areas E global symbols -M _fopen S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?C_V_SWITCH_L06 Ref00000000 S isatty Ref00000000 diff --git a/lib/relcb/fprintf.rel b/lib/relcb/fprintf.rel index 363ca8c5..be6a538d 100644 --- a/lib/relcb/fprintf.rel +++ b/lib/relcb/fprintf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _fprintf S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/fputc.rel b/lib/relcb/fputc.rel index e64acb8b..e2def638 100644 --- a/lib/relcb/fputc.rel +++ b/lib/relcb/fputc.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _fputc S fflush Ref00000000 S __stdio_init_vars Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/fputs.rel b/lib/relcb/fputs.rel index 032bb0a8..f182caed 100644 --- a/lib/relcb/fputs.rel +++ b/lib/relcb/fputs.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _fputs S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S fputc Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/fread.rel b/lib/relcb/fread.rel index f3dada5f..eb19853c 100644 --- a/lib/relcb/fread.rel +++ b/lib/relcb/fread.rel @@ -1,6 +1,5 @@ XL4 H 2 areas D global symbols -M _fread S fflush Ref00000000 S memcpy Ref00000000 S ?S_MUL_L02 Ref00000000 diff --git a/lib/relcb/free.rel b/lib/relcb/free.rel index 48e1ebe4..2752eb3b 100644 --- a/lib/relcb/free.rel +++ b/lib/relcb/free.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _free S __malloc_last Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/fscanf.rel b/lib/relcb/fscanf.rel index 28b7747d..f92b982c 100644 --- a/lib/relcb/fscanf.rel +++ b/lib/relcb/fscanf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _fscanf S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S vfscanf Ref00000000 diff --git a/lib/relcb/ftell.rel b/lib/relcb/ftell.rel index e1335398..46448c27 100644 --- a/lib/relcb/ftell.rel +++ b/lib/relcb/ftell.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _ftell S fflush Ref00000000 S lseek Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/fwrite.rel b/lib/relcb/fwrite.rel index 5ae7d8fb..59985d6f 100644 --- a/lib/relcb/fwrite.rel +++ b/lib/relcb/fwrite.rel @@ -1,6 +1,5 @@ XL4 H 2 areas E global symbols -M _fwrite S fflush Ref00000000 S _write Ref00000000 S memcpy Ref00000000 diff --git a/lib/relcb/getcwd.rel b/lib/relcb/getcwd.rel index 9106db68..652d0b2d 100644 --- a/lib/relcb/getcwd.rel +++ b/lib/relcb/getcwd.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 11 global symbols -M _getcwd S strcat Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S closedir Ref00000000 diff --git a/lib/relcb/getenv.rel b/lib/relcb/getenv.rel index 3373ea50..357bf229 100644 --- a/lib/relcb/getenv.rel +++ b/lib/relcb/getenv.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _getenv S environ Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strlen Ref00000000 diff --git a/lib/relcb/getgrent.rel b/lib/relcb/getgrent.rel index 40bed610..b580aed8 100644 --- a/lib/relcb/getgrent.rel +++ b/lib/relcb/getgrent.rel @@ -1,6 +1,5 @@ XL4 H 3 areas B global symbols -M _getgrent S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S lseek Ref00000000 S strchr Ref00000000 diff --git a/lib/relcb/getgrgid.rel b/lib/relcb/getgrgid.rel index 48639c8a..b2f14a3a 100644 --- a/lib/relcb/getgrgid.rel +++ b/lib/relcb/getgrgid.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _getgrgid S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S endgrent Ref00000000 S getgrent Ref00000000 diff --git a/lib/relcb/getgrnam.rel b/lib/relcb/getgrnam.rel index 327d820a..bd777337 100644 --- a/lib/relcb/getgrnam.rel +++ b/lib/relcb/getgrnam.rel @@ -1,6 +1,5 @@ XL4 H 2 areas B global symbols -M _getgrnam S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S endgrent Ref00000000 S strcmp Ref00000000 diff --git a/lib/relcb/getopt.rel b/lib/relcb/getopt.rel index 864e4921..a5c54634 100644 --- a/lib/relcb/getopt.rel +++ b/lib/relcb/getopt.rel @@ -1,6 +1,5 @@ XL4 H 6 areas 10 global symbols -M _getopt S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S stderr Ref00000000 S strchr Ref00000000 diff --git a/lib/relcb/getpass.rel b/lib/relcb/getpass.rel index 91a40bd2..031970d4 100644 --- a/lib/relcb/getpass.rel +++ b/lib/relcb/getpass.rel @@ -1,6 +1,5 @@ XL4 H 3 areas D global symbols -M _getpass S fflush Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/getpw.rel b/lib/relcb/getpw.rel index 49204e02..341fe1df 100644 --- a/lib/relcb/getpw.rel +++ b/lib/relcb/getpw.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 9 global symbols -M _getpw S sprintf Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/getpwent.rel b/lib/relcb/getpwent.rel index 42deb31f..4da54a2a 100644 --- a/lib/relcb/getpwent.rel +++ b/lib/relcb/getpwent.rel @@ -1,6 +1,5 @@ XL4 H 3 areas C global symbols -M _getpwent S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S lseek Ref00000000 S strchr Ref00000000 diff --git a/lib/relcb/getpwnam.rel b/lib/relcb/getpwnam.rel index 73c5a7c3..bd4e5d2f 100644 --- a/lib/relcb/getpwnam.rel +++ b/lib/relcb/getpwnam.rel @@ -1,6 +1,5 @@ XL4 H 2 areas B global symbols -M _getpwnam S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strcmp Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/getpwuid.rel b/lib/relcb/getpwuid.rel index 780dbc38..d8430c81 100644 --- a/lib/relcb/getpwuid.rel +++ b/lib/relcb/getpwuid.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _getpwuid S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S endpwent Ref00000000 diff --git a/lib/relcb/gets.rel b/lib/relcb/gets.rel index f98dc0d4..531372dd 100644 --- a/lib/relcb/gets.rel +++ b/lib/relcb/gets.rel @@ -1,6 +1,5 @@ XL4 H 2 areas C global symbols -M _gets S fgetc Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S stdin Ref00000000 diff --git a/lib/relcb/gmtime.rel b/lib/relcb/gmtime.rel index 30f1885b..1fdd2ee6 100644 --- a/lib/relcb/gmtime.rel +++ b/lib/relcb/gmtime.rel @@ -1,6 +1,5 @@ XL4 H 5 areas D global symbols -M _gmtime S ?US_RSH_L02 Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/initgrup.rel b/lib/relcb/initgrup.rel index 911c36ab..cfcedfe1 100644 --- a/lib/relcb/initgrup.rel +++ b/lib/relcb/initgrup.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 2 global symbols -M _initgrup S ?CL64180B_4_06_L00 Ref00000000 S .__.ABS. Def00000000 A _DEFAULT size 0 flags 0 diff --git a/lib/relcb/isatty.rel b/lib/relcb/isatty.rel index 71491c07..cb24b48f 100644 --- a/lib/relcb/isatty.rel +++ b/lib/relcb/isatty.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _isatty S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S fstat Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/itoa.rel b/lib/relcb/itoa.rel index a15a8db6..7161b433 100644 --- a/lib/relcb/itoa.rel +++ b/lib/relcb/itoa.rel @@ -1,6 +1,5 @@ XL4 H 2 areas D global symbols -M _itoa S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S ?UL_DIVASG_L03 Ref00000000 diff --git a/lib/relcb/localtim.rel b/lib/relcb/localtim.rel index 1d06e6a7..d30832dd 100644 --- a/lib/relcb/localtim.rel +++ b/lib/relcb/localtim.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 7 global symbols -M _localtim S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/lsearch.rel b/lib/relcb/lsearch.rel index a6a689ff..177f40cd 100644 --- a/lib/relcb/lsearch.rel +++ b/lib/relcb/lsearch.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _lsearch S memcpy Ref00000000 S ?S_MUL_L02 Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/lstat.rel b/lib/relcb/lstat.rel index d981f71a..14286ba0 100644 --- a/lib/relcb/lstat.rel +++ b/lib/relcb/lstat.rel @@ -1,6 +1,5 @@ XL4 H 2 areas A global symbols -M _lstat S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S close Ref00000000 S fstat Ref00000000 diff --git a/lib/relcb/ltoa.rel b/lib/relcb/ltoa.rel index 8a82706c..4c2eced5 100644 --- a/lib/relcb/ltoa.rel +++ b/lib/relcb/ltoa.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _ltoa S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/ltostr.rel b/lib/relcb/ltostr.rel index c7c100c6..a3af7bed 100644 --- a/lib/relcb/ltostr.rel +++ b/lib/relcb/ltostr.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 9 global symbols -M _ltostr S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/malloc.rel b/lib/relcb/malloc.rel index 2369f3f0..273c2624 100644 --- a/lib/relcb/malloc.rel +++ b/lib/relcb/malloc.rel @@ -1,6 +1,5 @@ XL4 H 3 areas A global symbols -M _malloc S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S free Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/memccpy.rel b/lib/relcb/memccpy.rel index 948d158a..2f3d1ec7 100644 --- a/lib/relcb/memccpy.rel +++ b/lib/relcb/memccpy.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _memccpy S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/memchr.rel b/lib/relcb/memchr.rel index 28d54639..6d2946ce 100644 --- a/lib/relcb/memchr.rel +++ b/lib/relcb/memchr.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _memchr S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/memcmp.rel b/lib/relcb/memcmp.rel index b215a077..45e26e78 100644 --- a/lib/relcb/memcmp.rel +++ b/lib/relcb/memcmp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _memcmp S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/memcpy.rel b/lib/relcb/memcpy.rel index 49680007..986f0ae9 100644 --- a/lib/relcb/memcpy.rel +++ b/lib/relcb/memcpy.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _memcpy S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/memmove.rel b/lib/relcb/memmove.rel index 7674185a..2d94fdb3 100644 --- a/lib/relcb/memmove.rel +++ b/lib/relcb/memmove.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _memmove S memcpy Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/memset.rel b/lib/relcb/memset.rel index 71c13c61..adb8b153 100644 --- a/lib/relcb/memset.rel +++ b/lib/relcb/memset.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _memset S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/mkdir.rel b/lib/relcb/mkdir.rel index a3310696..9cadcb39 100644 --- a/lib/relcb/mkdir.rel +++ b/lib/relcb/mkdir.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _mkdir S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S mknod Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/mktime.rel b/lib/relcb/mktime.rel index 759d4398..93c04245 100644 --- a/lib/relcb/mktime.rel +++ b/lib/relcb/mktime.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _mktime S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/opendir.rel b/lib/relcb/opendir.rel index f4aabeef..cf99fee2 100644 --- a/lib/relcb/opendir.rel +++ b/lib/relcb/opendir.rel @@ -1,6 +1,5 @@ XL4 H 2 areas B global symbols -M _opendir S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S free Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/perror.rel b/lib/relcb/perror.rel index d876ea2e..bbba436e 100644 --- a/lib/relcb/perror.rel +++ b/lib/relcb/perror.rel @@ -1,6 +1,5 @@ XL4 H 3 areas B global symbols -M _perror S strerror Ref00000000 S _write Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/popen.rel b/lib/relcb/popen.rel index dde16a18..88034f2b 100644 --- a/lib/relcb/popen.rel +++ b/lib/relcb/popen.rel @@ -1,6 +1,5 @@ XL4 H 5 areas 11 global symbols -M _popen S execve Ref00000000 S environ Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/printf.rel b/lib/relcb/printf.rel index b0402aa5..7c30dfe3 100644 --- a/lib/relcb/printf.rel +++ b/lib/relcb/printf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _printf S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S stdout Ref00000000 diff --git a/lib/relcb/putenv.rel b/lib/relcb/putenv.rel index 0dd66a58..b74da636 100644 --- a/lib/relcb/putenv.rel +++ b/lib/relcb/putenv.rel @@ -1,6 +1,5 @@ XL4 H 4 areas E global symbols -M _putenv S environ Ref00000000 S memcpy Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/putgetch.rel b/lib/relcb/putgetch.rel index 191aae71..aedea8f1 100644 --- a/lib/relcb/putgetch.rel +++ b/lib/relcb/putgetch.rel @@ -1,6 +1,5 @@ XL4 H 2 areas A global symbols -M _putgetch S _write Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/putpwent.rel b/lib/relcb/putpwent.rel index 12b63718..669199e1 100644 --- a/lib/relcb/putpwent.rel +++ b/lib/relcb/putpwent.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 8 global symbols -M _putpwent S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/qsort.rel b/lib/relcb/qsort.rel index 54f4d629..57e6379b 100644 --- a/lib/relcb/qsort.rel +++ b/lib/relcb/qsort.rel @@ -1,6 +1,5 @@ XL4 H 3 areas B global symbols -M _qsort S ?S_MUL_L02 Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/rand.rel b/lib/relcb/rand.rel index 50b1c742..8e781b25 100644 --- a/lib/relcb/rand.rel +++ b/lib/relcb/rand.rel @@ -1,6 +1,5 @@ XL4 H 4 areas A global symbols -M _rand S ?S_MUL_L02 Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/readdir.rel b/lib/relcb/readdir.rel index 083e16b4..4541a784 100644 --- a/lib/relcb/readdir.rel +++ b/lib/relcb/readdir.rel @@ -1,6 +1,5 @@ XL4 H 2 areas A global symbols -M _readdir S strncpy Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strlen Ref00000000 diff --git a/lib/relcb/readlink.rel b/lib/relcb/readlink.rel index f233b118..d415ed7c 100644 --- a/lib/relcb/readlink.rel +++ b/lib/relcb/readlink.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _readlink S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S close Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/realloc.rel b/lib/relcb/realloc.rel index 2e34c80d..817e4e3c 100644 --- a/lib/relcb/realloc.rel +++ b/lib/relcb/realloc.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _realloc S memcpy Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S free Ref00000000 diff --git a/lib/relcb/regerror.rel b/lib/relcb/regerror.rel index e5ba86a1..3c55fa87 100644 --- a/lib/relcb/regerror.rel +++ b/lib/relcb/regerror.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 9 global symbols -M _regerror S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S stderr Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/regexp.rel b/lib/relcb/regexp.rel index 3f5c3c7d..e6e46ee0 100644 --- a/lib/relcb/regexp.rel +++ b/lib/relcb/regexp.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 15 global symbols -M _regexp S strncmp Ref00000000 S strcspn Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/regsub.rel b/lib/relcb/regsub.rel index fb19dd69..203e9321 100644 --- a/lib/relcb/regsub.rel +++ b/lib/relcb/regsub.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 8 global symbols -M _regsub S strncpy Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/rename.rel b/lib/relcb/rename.rel index 5a3d596a..ff1d76a4 100644 --- a/lib/relcb/rename.rel +++ b/lib/relcb/rename.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _rename S unlink Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/rewind.rel b/lib/relcb/rewind.rel index ebccf9ee..019b63bc 100644 --- a/lib/relcb/rewind.rel +++ b/lib/relcb/rewind.rel @@ -1,6 +1,5 @@ XL4 H 2 areas C global symbols -M _rewind S fflush Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S lseek Ref00000000 diff --git a/lib/relcb/rewindir.rel b/lib/relcb/rewindir.rel index 21792c54..d918ef57 100644 --- a/lib/relcb/rewindir.rel +++ b/lib/relcb/rewindir.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _rewindir S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S lseek Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/rmdir.rel b/lib/relcb/rmdir.rel index 7ec24e81..b5a4996a 100644 --- a/lib/relcb/rmdir.rel +++ b/lib/relcb/rmdir.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 10 global symbols -M _rmdir S unlink Ref00000000 S strcat Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/scanf.rel b/lib/relcb/scanf.rel index ca5fd175..bfb13c04 100644 --- a/lib/relcb/scanf.rel +++ b/lib/relcb/scanf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _scanf S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S stdin Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/setbuff.rel b/lib/relcb/setbuff.rel index d56108a2..5ee64194 100644 --- a/lib/relcb/setbuff.rel +++ b/lib/relcb/setbuff.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _setbuff S fflush Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S free Ref00000000 diff --git a/lib/relcb/setenv.rel b/lib/relcb/setenv.rel index 25015f56..cd177981 100644 --- a/lib/relcb/setenv.rel +++ b/lib/relcb/setenv.rel @@ -1,6 +1,5 @@ XL4 H 4 areas E global symbols -M _setenv S environ Ref00000000 S memcpy Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/setgrent.rel b/lib/relcb/setgrent.rel index 600813d2..6572fa85 100644 --- a/lib/relcb/setgrent.rel +++ b/lib/relcb/setgrent.rel @@ -1,6 +1,5 @@ XL4 H 5 areas B global symbols -M _setgrent S ?BANK_FAST_LEAVE_L08 Ref00000000 S close Ref00000000 S __getgrent Ref00000000 diff --git a/lib/relcb/setpwent.rel b/lib/relcb/setpwent.rel index 07da5b57..e4fcd1d3 100644 --- a/lib/relcb/setpwent.rel +++ b/lib/relcb/setpwent.rel @@ -1,6 +1,5 @@ XL4 H 5 areas D global symbols -M _setpwent S ?BANK_FAST_LEAVE_L08 Ref00000000 S printf Ref00000000 S close Ref00000000 diff --git a/lib/relcb/setvbuff.rel b/lib/relcb/setvbuff.rel index 1a9b6df3..4757b008 100644 --- a/lib/relcb/setvbuff.rel +++ b/lib/relcb/setvbuff.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _setvbuff S fflush Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S free Ref00000000 diff --git a/lib/relcb/sleep.rel b/lib/relcb/sleep.rel index f4e0e75c..a7ba30de 100644 --- a/lib/relcb/sleep.rel +++ b/lib/relcb/sleep.rel @@ -1,6 +1,5 @@ XL4 H 2 areas A global symbols -M _sleep S ?BANK_FAST_LEAVE_L08 Ref00000000 S alarm Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/sprintf.rel b/lib/relcb/sprintf.rel index 0947d5d2..4c01de59 100644 --- a/lib/relcb/sprintf.rel +++ b/lib/relcb/sprintf.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 7 global symbols -M _sprintf S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/sscanf.rel b/lib/relcb/sscanf.rel index 0bc23ec1..796702a9 100644 --- a/lib/relcb/sscanf.rel +++ b/lib/relcb/sscanf.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 7 global symbols -M _sscanf S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S vfscanf Ref00000000 diff --git a/lib/relcb/stdio0.rel b/lib/relcb/stdio0.rel index 47b5ceb4..929995e5 100644 --- a/lib/relcb/stdio0.rel +++ b/lib/relcb/stdio0.rel @@ -1,6 +1,5 @@ XL4 H 5 areas 10 global symbols -M _stdio0 S ?BANK_FAST_LEAVE_L08 Ref00000000 S fflush Ref00000000 S atexit Ref00000000 diff --git a/lib/relcb/strcat.rel b/lib/relcb/strcat.rel index b8058b8a..cf293580 100644 --- a/lib/relcb/strcat.rel +++ b/lib/relcb/strcat.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _strcat S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strlen Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/strchr.rel b/lib/relcb/strchr.rel index 10eea4c8..9509dfbe 100644 --- a/lib/relcb/strchr.rel +++ b/lib/relcb/strchr.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strchr S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/strcmp.rel b/lib/relcb/strcmp.rel index 0c8f9b98..01788b91 100644 --- a/lib/relcb/strcmp.rel +++ b/lib/relcb/strcmp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strcmp S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/strcpy.rel b/lib/relcb/strcpy.rel index 25af7e21..f4f8b9aa 100644 --- a/lib/relcb/strcpy.rel +++ b/lib/relcb/strcpy.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _strcpy S memcpy Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strlen Ref00000000 diff --git a/lib/relcb/strcspn.rel b/lib/relcb/strcspn.rel index 3aa91d48..4a1ee5fe 100644 --- a/lib/relcb/strcspn.rel +++ b/lib/relcb/strcspn.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _strcspn S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strchr Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/strdup.rel b/lib/relcb/strdup.rel index 6b78aac1..f7c4cc98 100644 --- a/lib/relcb/strdup.rel +++ b/lib/relcb/strdup.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _strdup S memcpy Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strlen Ref00000000 diff --git a/lib/relcb/stricmp.rel b/lib/relcb/stricmp.rel index 79e9df32..e1c407bb 100644 --- a/lib/relcb/stricmp.rel +++ b/lib/relcb/stricmp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _stricmp S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S __ctype Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/strlen.rel b/lib/relcb/strlen.rel index b285abd5..d981be8e 100644 --- a/lib/relcb/strlen.rel +++ b/lib/relcb/strlen.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strlen S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/strncat.rel b/lib/relcb/strncat.rel index 458601b5..1d17839a 100644 --- a/lib/relcb/strncat.rel +++ b/lib/relcb/strncat.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _strncat S memcpy Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strlen Ref00000000 diff --git a/lib/relcb/strncmp.rel b/lib/relcb/strncmp.rel index 05c2579c..bf59ce30 100644 --- a/lib/relcb/strncmp.rel +++ b/lib/relcb/strncmp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strncmp S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/strncpy.rel b/lib/relcb/strncpy.rel index 689f4b1a..bcaf89d0 100644 --- a/lib/relcb/strncpy.rel +++ b/lib/relcb/strncpy.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strncpy S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/strnicmp.rel b/lib/relcb/strnicmp.rel index 58c291bf..f21805a2 100644 --- a/lib/relcb/strnicmp.rel +++ b/lib/relcb/strnicmp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _strnicmp S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S __ctype Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/strpbrk.rel b/lib/relcb/strpbrk.rel index e847c045..f5d8c20b 100644 --- a/lib/relcb/strpbrk.rel +++ b/lib/relcb/strpbrk.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _strpbrk S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strchr Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/strrchr.rel b/lib/relcb/strrchr.rel index a237b9f6..f4f37e67 100644 --- a/lib/relcb/strrchr.rel +++ b/lib/relcb/strrchr.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _strrchr S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strlen Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/strsep.rel b/lib/relcb/strsep.rel index 0d92c1ad..72a6470b 100644 --- a/lib/relcb/strsep.rel +++ b/lib/relcb/strsep.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _strsep S strpbrk Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/strspn.rel b/lib/relcb/strspn.rel index f01d05f1..e39fb809 100644 --- a/lib/relcb/strspn.rel +++ b/lib/relcb/strspn.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strspn S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 S ?CL64180B_4_06_L00 Ref00000000 diff --git a/lib/relcb/strstr.rel b/lib/relcb/strstr.rel index 3dcb3914..7f5d421b 100644 --- a/lib/relcb/strstr.rel +++ b/lib/relcb/strstr.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _strstr S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strchr Ref00000000 S strlen Ref00000000 diff --git a/lib/relcb/strtod.rel b/lib/relcb/strtod.rel index ac417b16..cfcedfe1 100644 --- a/lib/relcb/strtod.rel +++ b/lib/relcb/strtod.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 2 global symbols -M _strtod S ?CL64180B_4_06_L00 Ref00000000 S .__.ABS. Def00000000 A _DEFAULT size 0 flags 0 diff --git a/lib/relcb/strtok.rel b/lib/relcb/strtok.rel index b50a39e7..89c74e06 100644 --- a/lib/relcb/strtok.rel +++ b/lib/relcb/strtok.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 8 global symbols -M _strtok S strpbrk Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/strtol.rel b/lib/relcb/strtol.rel index 13870199..0451824d 100644 --- a/lib/relcb/strtol.rel +++ b/lib/relcb/strtol.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _strtol S strtoul Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S __ctype Ref00000000 diff --git a/lib/relcb/strtoul.rel b/lib/relcb/strtoul.rel index 56967e12..968273bc 100644 --- a/lib/relcb/strtoul.rel +++ b/lib/relcb/strtoul.rel @@ -1,6 +1,5 @@ XL4 H 2 areas A global symbols -M _strtoul S ?L_MULASG_L03 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?L_ADDASG_L03 Ref00000000 diff --git a/lib/relcb/system.rel b/lib/relcb/system.rel index dfcaeb5a..9deda10f 100644 --- a/lib/relcb/system.rel +++ b/lib/relcb/system.rel @@ -1,6 +1,5 @@ XL4 H 5 areas C global symbols -M _system S execve Ref00000000 S environ Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/termcap.rel b/lib/relcb/termcap.rel index 728b74d8..987542b4 100644 --- a/lib/relcb/termcap.rel +++ b/lib/relcb/termcap.rel @@ -1,6 +1,5 @@ XL4 H 6 areas 22 global symbols -M _termcap S ?S_LSHASG_L02 Ref00000000 S ?S_MULASG_L02 Ref00000000 S getenv Ref00000000 diff --git a/lib/relcb/tmpnam.rel b/lib/relcb/tmpnam.rel index 47215720..9110b333 100644 --- a/lib/relcb/tmpnam.rel +++ b/lib/relcb/tmpnam.rel @@ -1,6 +1,5 @@ XL4 H 4 areas D global symbols -M _tmpnam S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S strlen Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/tparam.rel b/lib/relcb/tparam.rel index 92235300..93aac56e 100644 --- a/lib/relcb/tparam.rel +++ b/lib/relcb/tparam.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 1B global symbols -M _tparam S ?S_LSHASG_L02 Ref00000000 S ?S_MULASG_L02 Ref00000000 S _write Ref00000000 diff --git a/lib/relcb/ttyname.rel b/lib/relcb/ttyname.rel index c83849d0..ef8b5585 100644 --- a/lib/relcb/ttyname.rel +++ b/lib/relcb/ttyname.rel @@ -1,6 +1,5 @@ XL4 H 6 areas 10 global symbols -M _ttyname S strcat Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S closedir Ref00000000 diff --git a/lib/relcb/tzset.rel b/lib/relcb/tzset.rel index df468ca5..c4e6cd11 100644 --- a/lib/relcb/tzset.rel +++ b/lib/relcb/tzset.rel @@ -1,6 +1,5 @@ XL4 H 6 areas 10 global symbols -M _tzset S ?L_MUL_L03 Ref00000000 S getenv Ref00000000 S memcpy Ref00000000 diff --git a/lib/relcb/ultoa.rel b/lib/relcb/ultoa.rel index 0d49628c..d3ad9cae 100644 --- a/lib/relcb/ultoa.rel +++ b/lib/relcb/ultoa.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _ultoa S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/ungetc.rel b/lib/relcb/ungetc.rel index 0ca3af8e..f1d24f15 100644 --- a/lib/relcb/ungetc.rel +++ b/lib/relcb/ungetc.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _ungetc S fflush Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/utsname.rel b/lib/relcb/utsname.rel index d6e9915f..3de9a712 100644 --- a/lib/relcb/utsname.rel +++ b/lib/relcb/utsname.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 8 global symbols -M _utsname S getfsys Ref00000000 S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/vfprintf.rel b/lib/relcb/vfprintf.rel index 9c0207a9..ffad817a 100644 --- a/lib/relcb/vfprintf.rel +++ b/lib/relcb/vfprintf.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 11 global symbols -M _vfprintf S ?S_MULASG_L02 Ref00000000 S fflush Ref00000000 S strcat Ref00000000 diff --git a/lib/relcb/vfscanf.rel b/lib/relcb/vfscanf.rel index a5359a88..72cb8295 100644 --- a/lib/relcb/vfscanf.rel +++ b/lib/relcb/vfscanf.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 11 global symbols -M _vfscanf S ?L_MUL_L03 Ref00000000 S ungetc Ref00000000 S fgetc Ref00000000 diff --git a/lib/relcb/vprintf.rel b/lib/relcb/vprintf.rel index 4fe09b59..0669e7f2 100644 --- a/lib/relcb/vprintf.rel +++ b/lib/relcb/vprintf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _vprintf S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/vscanf.rel b/lib/relcb/vscanf.rel index e49bfe15..44f7d6d9 100644 --- a/lib/relcb/vscanf.rel +++ b/lib/relcb/vscanf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _vscanf S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S stdin Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/vsprintf.rel b/lib/relcb/vsprintf.rel index 920dd285..2e150cf1 100644 --- a/lib/relcb/vsprintf.rel +++ b/lib/relcb/vsprintf.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 7 global symbols -M _vsprintf S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcb/vsscanf.rel b/lib/relcb/vsscanf.rel index 45bfadb3..ee7df656 100644 --- a/lib/relcb/vsscanf.rel +++ b/lib/relcb/vsscanf.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 7 global symbols -M _vsscanf S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/xitoa.rel b/lib/relcb/xitoa.rel index dc2daa65..f9996afc 100644 --- a/lib/relcb/xitoa.rel +++ b/lib/relcb/xitoa.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _xitoa S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 S ?BANK_CALL_DIRECT_L08 Ref00000000 diff --git a/lib/relcb/xltoa.rel b/lib/relcb/xltoa.rel index 2d0938ae..ddd9cac8 100644 --- a/lib/relcb/xltoa.rel +++ b/lib/relcb/xltoa.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _xltoa S ?BANK_LEAVE_DIRECT_L08 Ref00000000 S ultostr Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/abort.rel b/lib/relcl/abort.rel index 03092bba..86ee90e6 100644 --- a/lib/relcl/abort.rel +++ b/lib/relcl/abort.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _abort S ?CL64180L_4_06_L00 Ref00000000 S _exit Ref00000000 S pause Ref00000000 diff --git a/lib/relcl/alloca.rel b/lib/relcl/alloca.rel index 16446e64..baa0c936 100644 --- a/lib/relcl/alloca.rel +++ b/lib/relcl/alloca.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 7 global symbols -M _alloca S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S free Ref00000000 diff --git a/lib/relcl/asctime.rel b/lib/relcl/asctime.rel index 55563069..eace0f9f 100644 --- a/lib/relcl/asctime.rel +++ b/lib/relcl/asctime.rel @@ -1,6 +1,5 @@ XL4 H 6 areas D global symbols -M _asctime S ?CL64180L_4_06_L00 Ref00000000 S memcpy Ref00000000 S ?S_MUL_L02 Ref00000000 diff --git a/lib/relcl/assert.rel b/lib/relcl/assert.rel index 058e8434..55fc4d62 100644 --- a/lib/relcl/assert.rel +++ b/lib/relcl/assert.rel @@ -1,6 +1,5 @@ XL4 H 3 areas A global symbols -M _assert S ?CL64180L_4_06_L00 Ref00000000 S _write Ref00000000 S _itoa Ref00000000 diff --git a/lib/relcl/atexit.rel b/lib/relcl/atexit.rel index 44ad676d..36f3da8e 100644 --- a/lib/relcl/atexit.rel +++ b/lib/relcl/atexit.rel @@ -1,6 +1,5 @@ XL4 H 5 areas C global symbols -M _atexit S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/atoi.rel b/lib/relcl/atoi.rel index af255832..d0ab43c5 100644 --- a/lib/relcl/atoi.rel +++ b/lib/relcl/atoi.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _atoi S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/atol.rel b/lib/relcl/atol.rel index 87b59455..bd43124f 100644 --- a/lib/relcl/atol.rel +++ b/lib/relcl/atol.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _atol S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_32_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/bsearch.rel b/lib/relcl/bsearch.rel index b9b6dd02..0bc56cc1 100644 --- a/lib/relcl/bsearch.rel +++ b/lib/relcl/bsearch.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 9 global symbols -M _bsearch S ?CL64180L_4_06_L00 Ref00000000 S ?S_MUL_L02 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/calloc.rel b/lib/relcl/calloc.rel index 450673fa..4f0411d7 100644 --- a/lib/relcl/calloc.rel +++ b/lib/relcl/calloc.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _calloc S ?CL64180L_4_06_L00 Ref00000000 S memset Ref00000000 S ?S_MUL_L02 Ref00000000 diff --git a/lib/relcl/clock.rel b/lib/relcl/clock.rel index a35b21a3..d414bae9 100644 --- a/lib/relcl/clock.rel +++ b/lib/relcl/clock.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _clock S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_32_L09 Ref00000000 S ?S_MUL_L02 Ref00000000 diff --git a/lib/relcl/closedir.rel b/lib/relcl/closedir.rel index 157f8024..03c8563d 100644 --- a/lib/relcl/closedir.rel +++ b/lib/relcl/closedir.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _closedir S ?CL64180L_4_06_L00 Ref00000000 S close Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/convtime.rel b/lib/relcl/convtime.rel index 4f6a50cd..23c600c6 100644 --- a/lib/relcl/convtime.rel +++ b/lib/relcl/convtime.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 9 global symbols -M _convtime S ?US_RSH_L02 Ref00000000 S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_32_L09 Ref00000000 diff --git a/lib/relcl/crypt.rel b/lib/relcl/crypt.rel index aeb6db02..688daaec 100644 --- a/lib/relcl/crypt.rel +++ b/lib/relcl/crypt.rel @@ -1,6 +1,5 @@ XL4 H 3 areas D global symbols -M _crypt S ?CL64180L_4_06_L00 Ref00000000 S memset Ref00000000 S memcpy Ref00000000 diff --git a/lib/relcl/ctime.rel b/lib/relcl/ctime.rel index 98a89508..a01eaddb 100644 --- a/lib/relcl/ctime.rel +++ b/lib/relcl/ctime.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _ctime S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/ctype.rel b/lib/relcl/ctype.rel index 24a2f9d0..c09e515e 100644 --- a/lib/relcl/ctype.rel +++ b/lib/relcl/ctype.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 7 global symbols -M _ctype S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/difftime.rel b/lib/relcl/difftime.rel index 3cfb2827..54e441a9 100644 --- a/lib/relcl/difftime.rel +++ b/lib/relcl/difftime.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _difftime S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_32_L09 Ref00000000 S ?L_MUL_L03 Ref00000000 diff --git a/lib/relcl/error.rel b/lib/relcl/error.rel index 535dfb65..6b5895ee 100644 --- a/lib/relcl/error.rel +++ b/lib/relcl/error.rel @@ -1,6 +1,5 @@ XL4 H 6 areas 10 global symbols -M _error S ?CL64180L_4_06_L00 Ref00000000 S strchr Ref00000000 S close Ref00000000 diff --git a/lib/relcl/etime.rel b/lib/relcl/etime.rel index ba46a099..dd8fecb1 100644 --- a/lib/relcl/etime.rel +++ b/lib/relcl/etime.rel @@ -1,6 +1,5 @@ XL4 H 3 areas D global symbols -M _etime S ?CL64180L_4_06_L00 Ref00000000 S ?S_MUL_L02 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/execl.rel b/lib/relcl/execl.rel index fdd8c7f6..c932a487 100644 --- a/lib/relcl/execl.rel +++ b/lib/relcl/execl.rel @@ -1,6 +1,5 @@ XL4 H 4 areas D global symbols -M _execl S ?CL64180L_4_06_L00 Ref00000000 S execve Ref00000000 S environ Ref00000000 diff --git a/lib/relcl/execle.rel b/lib/relcl/execle.rel index 8a2c7e43..2e087f30 100644 --- a/lib/relcl/execle.rel +++ b/lib/relcl/execle.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _execle S ?CL64180L_4_06_L00 Ref00000000 S execve Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/execlp.rel b/lib/relcl/execlp.rel index eb8dcf16..f8b056bd 100644 --- a/lib/relcl/execlp.rel +++ b/lib/relcl/execlp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _execlp S ?CL64180L_4_06_L00 Ref00000000 S execve Ref00000000 S environ Ref00000000 diff --git a/lib/relcl/execlpe.rel b/lib/relcl/execlpe.rel index b9ecee26..7fcf4e9f 100644 --- a/lib/relcl/execlpe.rel +++ b/lib/relcl/execlpe.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _execlpe S ?CL64180L_4_06_L00 Ref00000000 S execve Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/exect.rel b/lib/relcl/exect.rel index 2a74e23a..e07329e3 100644 --- a/lib/relcl/exect.rel +++ b/lib/relcl/exect.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _exect S ?CL64180L_4_06_L00 Ref00000000 S execve Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/execv.rel b/lib/relcl/execv.rel index 1d91afda..742849e1 100644 --- a/lib/relcl/execv.rel +++ b/lib/relcl/execv.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _execv S ?CL64180L_4_06_L00 Ref00000000 S execve Ref00000000 S environ Ref00000000 diff --git a/lib/relcl/execvp.rel b/lib/relcl/execvp.rel index 2a3f947b..d5b901a3 100644 --- a/lib/relcl/execvp.rel +++ b/lib/relcl/execvp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _execvp S ?CL64180L_4_06_L00 Ref00000000 S execve Ref00000000 S environ Ref00000000 diff --git a/lib/relcl/execvpe.rel b/lib/relcl/execvpe.rel index 741102a4..63a203a7 100644 --- a/lib/relcl/execvpe.rel +++ b/lib/relcl/execvpe.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _execvpe S ?CL64180L_4_06_L00 Ref00000000 S execve Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/exit.rel b/lib/relcl/exit.rel index cdcbbbb2..4286bcb8 100644 --- a/lib/relcl/exit.rel +++ b/lib/relcl/exit.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _exit S ?CL64180L_4_06_L00 Ref00000000 S _exit Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/fclose.rel b/lib/relcl/fclose.rel index 4a30d0e9..9e23acbc 100644 --- a/lib/relcl/fclose.rel +++ b/lib/relcl/fclose.rel @@ -1,6 +1,5 @@ XL4 H 2 areas A global symbols -M _fclose S ?CL64180L_4_06_L00 Ref00000000 S fflush Ref00000000 S close Ref00000000 diff --git a/lib/relcl/fflush.rel b/lib/relcl/fflush.rel index 64afc291..042910e0 100644 --- a/lib/relcl/fflush.rel +++ b/lib/relcl/fflush.rel @@ -1,6 +1,5 @@ XL4 H 2 areas D global symbols -M _fflush S ?CL64180L_4_06_L00 Ref00000000 S _write Ref00000000 S stderr Ref00000000 diff --git a/lib/relcl/fgetc.rel b/lib/relcl/fgetc.rel index a91d722d..b8d6bed8 100644 --- a/lib/relcl/fgetc.rel +++ b/lib/relcl/fgetc.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _fgetc S ?CL64180L_4_06_L00 Ref00000000 S fread Ref00000000 S fflush Ref00000000 diff --git a/lib/relcl/fgetgren.rel b/lib/relcl/fgetgren.rel index 478e9f92..9b696f57 100644 --- a/lib/relcl/fgetgren.rel +++ b/lib/relcl/fgetgren.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _fgetgren S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S __getgrent Ref00000000 diff --git a/lib/relcl/fgetpwen.rel b/lib/relcl/fgetpwen.rel index f8c260fe..2fbbd29b 100644 --- a/lib/relcl/fgetpwen.rel +++ b/lib/relcl/fgetpwen.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _fgetpwen S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/fgets.rel b/lib/relcl/fgets.rel index ddbd3b8b..05eb8104 100644 --- a/lib/relcl/fgets.rel +++ b/lib/relcl/fgets.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _fgets S ?CL64180L_4_06_L00 Ref00000000 S fgetc Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/fopen.rel b/lib/relcl/fopen.rel index 7e38a951..2c446322 100644 --- a/lib/relcl/fopen.rel +++ b/lib/relcl/fopen.rel @@ -1,6 +1,5 @@ XL4 H 2 areas D global symbols -M _fopen S ?CL64180L_4_06_L00 Ref00000000 S ?C_V_SWITCH_L06 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/fprintf.rel b/lib/relcl/fprintf.rel index 362fe1fe..fee7eb39 100644 --- a/lib/relcl/fprintf.rel +++ b/lib/relcl/fprintf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _fprintf S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/fputc.rel b/lib/relcl/fputc.rel index d4c9c5d4..d49c290f 100644 --- a/lib/relcl/fputc.rel +++ b/lib/relcl/fputc.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _fputc S ?CL64180L_4_06_L00 Ref00000000 S fflush Ref00000000 S __stdio_init_vars Ref00000000 diff --git a/lib/relcl/fputs.rel b/lib/relcl/fputs.rel index d64558fe..21bed3c9 100644 --- a/lib/relcl/fputs.rel +++ b/lib/relcl/fputs.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _fputs S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S fputc Ref00000000 diff --git a/lib/relcl/fread.rel b/lib/relcl/fread.rel index 5ed0baaa..f016e4fc 100644 --- a/lib/relcl/fread.rel +++ b/lib/relcl/fread.rel @@ -1,6 +1,5 @@ XL4 H 2 areas C global symbols -M _fread S ?CL64180L_4_06_L00 Ref00000000 S fflush Ref00000000 S memcpy Ref00000000 diff --git a/lib/relcl/free.rel b/lib/relcl/free.rel index 97144629..febc1448 100644 --- a/lib/relcl/free.rel +++ b/lib/relcl/free.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _free S ?CL64180L_4_06_L00 Ref00000000 S __malloc_last Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/fscanf.rel b/lib/relcl/fscanf.rel index d877f94f..894971f2 100644 --- a/lib/relcl/fscanf.rel +++ b/lib/relcl/fscanf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _fscanf S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S vfscanf Ref00000000 diff --git a/lib/relcl/ftell.rel b/lib/relcl/ftell.rel index f2263141..a01b83c7 100644 --- a/lib/relcl/ftell.rel +++ b/lib/relcl/ftell.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _ftell S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_32_L09 Ref00000000 S fflush Ref00000000 diff --git a/lib/relcl/fwrite.rel b/lib/relcl/fwrite.rel index 1af439dc..409443d1 100644 --- a/lib/relcl/fwrite.rel +++ b/lib/relcl/fwrite.rel @@ -1,6 +1,5 @@ XL4 H 2 areas D global symbols -M _fwrite S ?CL64180L_4_06_L00 Ref00000000 S fflush Ref00000000 S _write Ref00000000 diff --git a/lib/relcl/getcwd.rel b/lib/relcl/getcwd.rel index ee1a23de..0a7d9914 100644 --- a/lib/relcl/getcwd.rel +++ b/lib/relcl/getcwd.rel @@ -1,6 +1,5 @@ XL4 H 4 areas F global symbols -M _getcwd S ?CL64180L_4_06_L00 Ref00000000 S strcat Ref00000000 S closedir Ref00000000 diff --git a/lib/relcl/getenv.rel b/lib/relcl/getenv.rel index ffa5a152..f2aafc5d 100644 --- a/lib/relcl/getenv.rel +++ b/lib/relcl/getenv.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _getenv S ?CL64180L_4_06_L00 Ref00000000 S environ Ref00000000 S strlen Ref00000000 diff --git a/lib/relcl/getgrent.rel b/lib/relcl/getgrent.rel index 02500366..172aa7f9 100644 --- a/lib/relcl/getgrent.rel +++ b/lib/relcl/getgrent.rel @@ -1,6 +1,5 @@ XL4 H 3 areas A global symbols -M _getgrent S ?CL64180L_4_06_L00 Ref00000000 S lseek Ref00000000 S strchr Ref00000000 diff --git a/lib/relcl/getgrgid.rel b/lib/relcl/getgrgid.rel index 7e594729..dbd3b69b 100644 --- a/lib/relcl/getgrgid.rel +++ b/lib/relcl/getgrgid.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _getgrgid S ?CL64180L_4_06_L00 Ref00000000 S endgrent Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/getgrnam.rel b/lib/relcl/getgrnam.rel index 3e260911..3babd7be 100644 --- a/lib/relcl/getgrnam.rel +++ b/lib/relcl/getgrnam.rel @@ -1,6 +1,5 @@ XL4 H 2 areas A global symbols -M _getgrnam S ?CL64180L_4_06_L00 Ref00000000 S endgrent Ref00000000 S strcmp Ref00000000 diff --git a/lib/relcl/getopt.rel b/lib/relcl/getopt.rel index a1754c7c..57d94182 100644 --- a/lib/relcl/getopt.rel +++ b/lib/relcl/getopt.rel @@ -1,6 +1,5 @@ XL4 H 6 areas F global symbols -M _getopt S ?CL64180L_4_06_L00 Ref00000000 S stderr Ref00000000 S strchr Ref00000000 diff --git a/lib/relcl/getpass.rel b/lib/relcl/getpass.rel index 28fc3ac9..cb51f7cc 100644 --- a/lib/relcl/getpass.rel +++ b/lib/relcl/getpass.rel @@ -1,6 +1,5 @@ XL4 H 3 areas B global symbols -M _getpass S ?CL64180L_4_06_L00 Ref00000000 S fflush Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/getpw.rel b/lib/relcl/getpw.rel index 26bfcfbb..a445bad3 100644 --- a/lib/relcl/getpw.rel +++ b/lib/relcl/getpw.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 8 global symbols -M _getpw S ?CL64180L_4_06_L00 Ref00000000 S sprintf Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/getpwent.rel b/lib/relcl/getpwent.rel index ad0439c2..d0c87f35 100644 --- a/lib/relcl/getpwent.rel +++ b/lib/relcl/getpwent.rel @@ -1,6 +1,5 @@ XL4 H 3 areas B global symbols -M _getpwent S ?CL64180L_4_06_L00 Ref00000000 S lseek Ref00000000 S strchr Ref00000000 diff --git a/lib/relcl/getpwnam.rel b/lib/relcl/getpwnam.rel index 8297c0ae..0f821017 100644 --- a/lib/relcl/getpwnam.rel +++ b/lib/relcl/getpwnam.rel @@ -1,6 +1,5 @@ XL4 H 2 areas A global symbols -M _getpwnam S ?CL64180L_4_06_L00 Ref00000000 S strcmp Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/getpwuid.rel b/lib/relcl/getpwuid.rel index 59392314..4c391f39 100644 --- a/lib/relcl/getpwuid.rel +++ b/lib/relcl/getpwuid.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _getpwuid S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S endpwent Ref00000000 diff --git a/lib/relcl/gets.rel b/lib/relcl/gets.rel index 3da52ae1..3f6d94f9 100644 --- a/lib/relcl/gets.rel +++ b/lib/relcl/gets.rel @@ -1,6 +1,5 @@ XL4 H 2 areas B global symbols -M _gets S ?CL64180L_4_06_L00 Ref00000000 S fgetc Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/gmtime.rel b/lib/relcl/gmtime.rel index d19ef1d5..b4f0fddb 100644 --- a/lib/relcl/gmtime.rel +++ b/lib/relcl/gmtime.rel @@ -1,6 +1,5 @@ XL4 H 5 areas C global symbols -M _gmtime S ?US_RSH_L02 Ref00000000 S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/initgrup.rel b/lib/relcl/initgrup.rel index 7b079c54..b3988d57 100644 --- a/lib/relcl/initgrup.rel +++ b/lib/relcl/initgrup.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 2 global symbols -M _initgrup S ?CL64180L_4_06_L00 Ref00000000 S .__.ABS. Def00000000 A _DEFAULT size 0 flags 0 diff --git a/lib/relcl/isatty.rel b/lib/relcl/isatty.rel index efb4394d..3a8b07ee 100644 --- a/lib/relcl/isatty.rel +++ b/lib/relcl/isatty.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _isatty S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S fstat Ref00000000 diff --git a/lib/relcl/itoa.rel b/lib/relcl/itoa.rel index 46a1ce1c..a47da77a 100644 --- a/lib/relcl/itoa.rel +++ b/lib/relcl/itoa.rel @@ -1,6 +1,5 @@ XL4 H 2 areas C global symbols -M _itoa S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?UL_DIVASG_L03 Ref00000000 diff --git a/lib/relcl/localtim.rel b/lib/relcl/localtim.rel index df43cf07..2a3397b4 100644 --- a/lib/relcl/localtim.rel +++ b/lib/relcl/localtim.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 6 global symbols -M _localtim S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/lsearch.rel b/lib/relcl/lsearch.rel index 2afd6bf1..6bd0d7ec 100644 --- a/lib/relcl/lsearch.rel +++ b/lib/relcl/lsearch.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _lsearch S ?CL64180L_4_06_L00 Ref00000000 S memcpy Ref00000000 S ?S_MUL_L02 Ref00000000 diff --git a/lib/relcl/lstat.rel b/lib/relcl/lstat.rel index 162b86ce..404dbb6d 100644 --- a/lib/relcl/lstat.rel +++ b/lib/relcl/lstat.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _lstat S ?CL64180L_4_06_L00 Ref00000000 S close Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/ltoa.rel b/lib/relcl/ltoa.rel index d24e82b3..d8246d6e 100644 --- a/lib/relcl/ltoa.rel +++ b/lib/relcl/ltoa.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _ltoa S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/ltostr.rel b/lib/relcl/ltostr.rel index 2f2421c8..d5cafd56 100644 --- a/lib/relcl/ltostr.rel +++ b/lib/relcl/ltostr.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 8 global symbols -M _ltostr S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/malloc.rel b/lib/relcl/malloc.rel index a472e8f1..86c34fbb 100644 --- a/lib/relcl/malloc.rel +++ b/lib/relcl/malloc.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 9 global symbols -M _malloc S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S free Ref00000000 diff --git a/lib/relcl/memccpy.rel b/lib/relcl/memccpy.rel index 859fed4a..6aed74a8 100644 --- a/lib/relcl/memccpy.rel +++ b/lib/relcl/memccpy.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _memccpy S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/memchr.rel b/lib/relcl/memchr.rel index a2500dc5..ad584589 100644 --- a/lib/relcl/memchr.rel +++ b/lib/relcl/memchr.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _memchr S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/memcmp.rel b/lib/relcl/memcmp.rel index 41fa302a..2b2235a9 100644 --- a/lib/relcl/memcmp.rel +++ b/lib/relcl/memcmp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _memcmp S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/memcpy.rel b/lib/relcl/memcpy.rel index f60c1feb..b9e3cedf 100644 --- a/lib/relcl/memcpy.rel +++ b/lib/relcl/memcpy.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _memcpy S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/memmove.rel b/lib/relcl/memmove.rel index 92ba09ba..b93ced4b 100644 --- a/lib/relcl/memmove.rel +++ b/lib/relcl/memmove.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _memmove S ?CL64180L_4_06_L00 Ref00000000 S memcpy Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/memset.rel b/lib/relcl/memset.rel index 1aa2707e..9ef772e7 100644 --- a/lib/relcl/memset.rel +++ b/lib/relcl/memset.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _memset S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/mkdir.rel b/lib/relcl/mkdir.rel index 42d94a79..7c524b8d 100644 --- a/lib/relcl/mkdir.rel +++ b/lib/relcl/mkdir.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _mkdir S ?CL64180L_4_06_L00 Ref00000000 S mknod Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/mktime.rel b/lib/relcl/mktime.rel index a725530b..660cd051 100644 --- a/lib/relcl/mktime.rel +++ b/lib/relcl/mktime.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _mktime S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/opendir.rel b/lib/relcl/opendir.rel index d8aee51e..90869515 100644 --- a/lib/relcl/opendir.rel +++ b/lib/relcl/opendir.rel @@ -1,6 +1,5 @@ XL4 H 2 areas A global symbols -M _opendir S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S free Ref00000000 diff --git a/lib/relcl/perror.rel b/lib/relcl/perror.rel index 12206dc5..16c059d9 100644 --- a/lib/relcl/perror.rel +++ b/lib/relcl/perror.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 9 global symbols -M _perror S ?CL64180L_4_06_L00 Ref00000000 S strerror Ref00000000 S _write Ref00000000 diff --git a/lib/relcl/popen.rel b/lib/relcl/popen.rel index d3c41d75..ee672055 100644 --- a/lib/relcl/popen.rel +++ b/lib/relcl/popen.rel @@ -1,6 +1,5 @@ XL4 H 5 areas 10 global symbols -M _popen S ?CL64180L_4_06_L00 Ref00000000 S execve Ref00000000 S environ Ref00000000 diff --git a/lib/relcl/printf.rel b/lib/relcl/printf.rel index 17414be2..4af5ed8a 100644 --- a/lib/relcl/printf.rel +++ b/lib/relcl/printf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _printf S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S stdout Ref00000000 diff --git a/lib/relcl/putenv.rel b/lib/relcl/putenv.rel index 59b853f3..0c152a70 100644 --- a/lib/relcl/putenv.rel +++ b/lib/relcl/putenv.rel @@ -1,6 +1,5 @@ XL4 H 4 areas D global symbols -M _putenv S ?CL64180L_4_06_L00 Ref00000000 S environ Ref00000000 S memcpy Ref00000000 diff --git a/lib/relcl/putgetch.rel b/lib/relcl/putgetch.rel index 3dd591cb..d8b26c90 100644 --- a/lib/relcl/putgetch.rel +++ b/lib/relcl/putgetch.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _putgetch S ?CL64180L_4_06_L00 Ref00000000 S _write Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/putpwent.rel b/lib/relcl/putpwent.rel index 49d1b991..00e4bc85 100644 --- a/lib/relcl/putpwent.rel +++ b/lib/relcl/putpwent.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 7 global symbols -M _putpwent S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/qsort.rel b/lib/relcl/qsort.rel index b74f54bf..3ec71f1d 100644 --- a/lib/relcl/qsort.rel +++ b/lib/relcl/qsort.rel @@ -1,6 +1,5 @@ XL4 H 3 areas A global symbols -M _qsort S ?CL64180L_4_06_L00 Ref00000000 S ?S_MUL_L02 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/rand.rel b/lib/relcl/rand.rel index 7859ceea..eff399c4 100644 --- a/lib/relcl/rand.rel +++ b/lib/relcl/rand.rel @@ -1,6 +1,5 @@ XL4 H 4 areas A global symbols -M _rand S ?CL64180L_4_06_L00 Ref00000000 S ?S_MUL_L02 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/readdir.rel b/lib/relcl/readdir.rel index 105f1898..2161f01c 100644 --- a/lib/relcl/readdir.rel +++ b/lib/relcl/readdir.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 9 global symbols -M _readdir S ?CL64180L_4_06_L00 Ref00000000 S strncpy Ref00000000 S strlen Ref00000000 diff --git a/lib/relcl/readlink.rel b/lib/relcl/readlink.rel index 004ec9e7..f3073ae2 100644 --- a/lib/relcl/readlink.rel +++ b/lib/relcl/readlink.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _readlink S ?CL64180L_4_06_L00 Ref00000000 S close Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/realloc.rel b/lib/relcl/realloc.rel index 5327b3d6..a209f56b 100644 --- a/lib/relcl/realloc.rel +++ b/lib/relcl/realloc.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _realloc S ?CL64180L_4_06_L00 Ref00000000 S memcpy Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/regerror.rel b/lib/relcl/regerror.rel index b67be169..5d0a6b89 100644 --- a/lib/relcl/regerror.rel +++ b/lib/relcl/regerror.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 8 global symbols -M _regerror S ?CL64180L_4_06_L00 Ref00000000 S stderr Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/regexp.rel b/lib/relcl/regexp.rel index aab9ea7f..8a3d3265 100644 --- a/lib/relcl/regexp.rel +++ b/lib/relcl/regexp.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 13 global symbols -M _regexp S ?CL64180L_4_06_L00 Ref00000000 S strncmp Ref00000000 S strcspn Ref00000000 diff --git a/lib/relcl/regsub.rel b/lib/relcl/regsub.rel index 4e34d3d2..f8d48201 100644 --- a/lib/relcl/regsub.rel +++ b/lib/relcl/regsub.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 7 global symbols -M _regsub S ?CL64180L_4_06_L00 Ref00000000 S strncpy Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/rename.rel b/lib/relcl/rename.rel index 6ea0ad4b..7573ad29 100644 --- a/lib/relcl/rename.rel +++ b/lib/relcl/rename.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _rename S ?CL64180L_4_06_L00 Ref00000000 S unlink Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/rewind.rel b/lib/relcl/rewind.rel index 13f0d9b6..68194628 100644 --- a/lib/relcl/rewind.rel +++ b/lib/relcl/rewind.rel @@ -1,6 +1,5 @@ XL4 H 2 areas B global symbols -M _rewind S ?CL64180L_4_06_L00 Ref00000000 S fflush Ref00000000 S lseek Ref00000000 diff --git a/lib/relcl/rewindir.rel b/lib/relcl/rewindir.rel index 5deaa628..7af5bd0f 100644 --- a/lib/relcl/rewindir.rel +++ b/lib/relcl/rewindir.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _rewindir S ?CL64180L_4_06_L00 Ref00000000 S lseek Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/rmdir.rel b/lib/relcl/rmdir.rel index e3d869e6..ccff6d36 100644 --- a/lib/relcl/rmdir.rel +++ b/lib/relcl/rmdir.rel @@ -1,6 +1,5 @@ XL4 H 3 areas F global symbols -M _rmdir S ?CL64180L_4_06_L00 Ref00000000 S unlink Ref00000000 S strcat Ref00000000 diff --git a/lib/relcl/scanf.rel b/lib/relcl/scanf.rel index 0f4f3358..a4aef567 100644 --- a/lib/relcl/scanf.rel +++ b/lib/relcl/scanf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _scanf S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S stdin Ref00000000 diff --git a/lib/relcl/setbuff.rel b/lib/relcl/setbuff.rel index e85a0088..26a856ca 100644 --- a/lib/relcl/setbuff.rel +++ b/lib/relcl/setbuff.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _setbuff S ?CL64180L_4_06_L00 Ref00000000 S fflush Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/setenv.rel b/lib/relcl/setenv.rel index 8b8a98a1..f8bd90fa 100644 --- a/lib/relcl/setenv.rel +++ b/lib/relcl/setenv.rel @@ -1,6 +1,5 @@ XL4 H 4 areas D global symbols -M _setenv S ?CL64180L_4_06_L00 Ref00000000 S environ Ref00000000 S memcpy Ref00000000 diff --git a/lib/relcl/setgrent.rel b/lib/relcl/setgrent.rel index 70ad7790..d66e53df 100644 --- a/lib/relcl/setgrent.rel +++ b/lib/relcl/setgrent.rel @@ -1,6 +1,5 @@ XL4 H 5 areas 9 global symbols -M _setgrent S ?CL64180L_4_06_L00 Ref00000000 S close Ref00000000 S __getgrent Ref00000000 diff --git a/lib/relcl/setpwent.rel b/lib/relcl/setpwent.rel index e30e2477..8dc5db11 100644 --- a/lib/relcl/setpwent.rel +++ b/lib/relcl/setpwent.rel @@ -1,6 +1,5 @@ XL4 H 5 areas B global symbols -M _setpwent S ?CL64180L_4_06_L00 Ref00000000 S printf Ref00000000 S close Ref00000000 diff --git a/lib/relcl/setvbuff.rel b/lib/relcl/setvbuff.rel index 6d620411..1cf15d85 100644 --- a/lib/relcl/setvbuff.rel +++ b/lib/relcl/setvbuff.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _setvbuff S ?CL64180L_4_06_L00 Ref00000000 S fflush Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/sleep.rel b/lib/relcl/sleep.rel index 2427830c..34cc08b7 100644 --- a/lib/relcl/sleep.rel +++ b/lib/relcl/sleep.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _sleep S ?CL64180L_4_06_L00 Ref00000000 S alarm Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/sprintf.rel b/lib/relcl/sprintf.rel index 1a9a7ad1..425b1f22 100644 --- a/lib/relcl/sprintf.rel +++ b/lib/relcl/sprintf.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 6 global symbols -M _sprintf S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/sscanf.rel b/lib/relcl/sscanf.rel index 279616b4..f0d9760f 100644 --- a/lib/relcl/sscanf.rel +++ b/lib/relcl/sscanf.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 6 global symbols -M _sscanf S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S vfscanf Ref00000000 diff --git a/lib/relcl/stdio0.rel b/lib/relcl/stdio0.rel index 14965f9e..16ad7480 100644 --- a/lib/relcl/stdio0.rel +++ b/lib/relcl/stdio0.rel @@ -1,6 +1,5 @@ XL4 H 5 areas E global symbols -M _stdio0 S ?CL64180L_4_06_L00 Ref00000000 S fflush Ref00000000 S atexit Ref00000000 diff --git a/lib/relcl/strcat.rel b/lib/relcl/strcat.rel index 9712b2ea..2fae9208 100644 --- a/lib/relcl/strcat.rel +++ b/lib/relcl/strcat.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _strcat S ?CL64180L_4_06_L00 Ref00000000 S strlen Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strchr.rel b/lib/relcl/strchr.rel index ae6a3778..6293db68 100644 --- a/lib/relcl/strchr.rel +++ b/lib/relcl/strchr.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strchr S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strcmp.rel b/lib/relcl/strcmp.rel index 1abdf82e..24271336 100644 --- a/lib/relcl/strcmp.rel +++ b/lib/relcl/strcmp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strcmp S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strcpy.rel b/lib/relcl/strcpy.rel index 5a812ae2..0fae0c1e 100644 --- a/lib/relcl/strcpy.rel +++ b/lib/relcl/strcpy.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _strcpy S ?CL64180L_4_06_L00 Ref00000000 S memcpy Ref00000000 S strlen Ref00000000 diff --git a/lib/relcl/strcspn.rel b/lib/relcl/strcspn.rel index ee5772e3..e4da79c8 100644 --- a/lib/relcl/strcspn.rel +++ b/lib/relcl/strcspn.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _strcspn S ?CL64180L_4_06_L00 Ref00000000 S strchr Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strdup.rel b/lib/relcl/strdup.rel index 6f7eac47..aa05b5fe 100644 --- a/lib/relcl/strdup.rel +++ b/lib/relcl/strdup.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _strdup S ?CL64180L_4_06_L00 Ref00000000 S memcpy Ref00000000 S strlen Ref00000000 diff --git a/lib/relcl/stricmp.rel b/lib/relcl/stricmp.rel index 5dc567e2..5ee41619 100644 --- a/lib/relcl/stricmp.rel +++ b/lib/relcl/stricmp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _stricmp S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S __ctype Ref00000000 diff --git a/lib/relcl/strlen.rel b/lib/relcl/strlen.rel index 04f491c1..61909e79 100644 --- a/lib/relcl/strlen.rel +++ b/lib/relcl/strlen.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strlen S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strncat.rel b/lib/relcl/strncat.rel index b3b7aaf7..c11cc042 100644 --- a/lib/relcl/strncat.rel +++ b/lib/relcl/strncat.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _strncat S ?CL64180L_4_06_L00 Ref00000000 S memcpy Ref00000000 S strlen Ref00000000 diff --git a/lib/relcl/strncmp.rel b/lib/relcl/strncmp.rel index 81448541..bb3f1040 100644 --- a/lib/relcl/strncmp.rel +++ b/lib/relcl/strncmp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strncmp S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strncpy.rel b/lib/relcl/strncpy.rel index 857fe2f3..6e5d6cf0 100644 --- a/lib/relcl/strncpy.rel +++ b/lib/relcl/strncpy.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strncpy S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strnicmp.rel b/lib/relcl/strnicmp.rel index 5b771f02..6b3ec110 100644 --- a/lib/relcl/strnicmp.rel +++ b/lib/relcl/strnicmp.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _strnicmp S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S __ctype Ref00000000 diff --git a/lib/relcl/strpbrk.rel b/lib/relcl/strpbrk.rel index fef11f55..e24de596 100644 --- a/lib/relcl/strpbrk.rel +++ b/lib/relcl/strpbrk.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _strpbrk S ?CL64180L_4_06_L00 Ref00000000 S strchr Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strrchr.rel b/lib/relcl/strrchr.rel index 31748670..3d2acddc 100644 --- a/lib/relcl/strrchr.rel +++ b/lib/relcl/strrchr.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _strrchr S ?CL64180L_4_06_L00 Ref00000000 S strlen Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strsep.rel b/lib/relcl/strsep.rel index b2770f96..69542d6c 100644 --- a/lib/relcl/strsep.rel +++ b/lib/relcl/strsep.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _strsep S ?CL64180L_4_06_L00 Ref00000000 S strpbrk Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strspn.rel b/lib/relcl/strspn.rel index 05251827..66f9ecea 100644 --- a/lib/relcl/strspn.rel +++ b/lib/relcl/strspn.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 5 global symbols -M _strspn S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strstr.rel b/lib/relcl/strstr.rel index 1c6c9ea3..3e517c3a 100644 --- a/lib/relcl/strstr.rel +++ b/lib/relcl/strstr.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _strstr S ?CL64180L_4_06_L00 Ref00000000 S strchr Ref00000000 S strlen Ref00000000 diff --git a/lib/relcl/strtod.rel b/lib/relcl/strtod.rel index 32f8aaa2..b3988d57 100644 --- a/lib/relcl/strtod.rel +++ b/lib/relcl/strtod.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 2 global symbols -M _strtod S ?CL64180L_4_06_L00 Ref00000000 S .__.ABS. Def00000000 A _DEFAULT size 0 flags 0 diff --git a/lib/relcl/strtok.rel b/lib/relcl/strtok.rel index 5e35e84b..5c45fa86 100644 --- a/lib/relcl/strtok.rel +++ b/lib/relcl/strtok.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 7 global symbols -M _strtok S ?CL64180L_4_06_L00 Ref00000000 S strpbrk Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/strtol.rel b/lib/relcl/strtol.rel index 244ff1d4..a4566f69 100644 --- a/lib/relcl/strtol.rel +++ b/lib/relcl/strtol.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _strtol S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_32_L09 Ref00000000 S strtoul Ref00000000 diff --git a/lib/relcl/strtoul.rel b/lib/relcl/strtoul.rel index 2f66174e..84f9e2f1 100644 --- a/lib/relcl/strtoul.rel +++ b/lib/relcl/strtoul.rel @@ -1,6 +1,5 @@ XL4 H 2 areas A global symbols -M _strtoul S ?CL64180L_4_06_L00 Ref00000000 S ?L_MULASG_L03 Ref00000000 S ?LEAVE_32_L09 Ref00000000 diff --git a/lib/relcl/system.rel b/lib/relcl/system.rel index 0c36dde9..a155b69b 100644 --- a/lib/relcl/system.rel +++ b/lib/relcl/system.rel @@ -1,6 +1,5 @@ XL4 H 5 areas B global symbols -M _system S ?CL64180L_4_06_L00 Ref00000000 S execve Ref00000000 S environ Ref00000000 diff --git a/lib/relcl/termcap.rel b/lib/relcl/termcap.rel index 435c2621..2ed474ff 100644 --- a/lib/relcl/termcap.rel +++ b/lib/relcl/termcap.rel @@ -1,6 +1,5 @@ XL4 H 6 areas 21 global symbols -M _termcap S ?S_LSHASG_L02 Ref00000000 S ?CL64180L_4_06_L00 Ref00000000 S ?S_MULASG_L02 Ref00000000 diff --git a/lib/relcl/tmpnam.rel b/lib/relcl/tmpnam.rel index 2b12ea7d..6c8a0171 100644 --- a/lib/relcl/tmpnam.rel +++ b/lib/relcl/tmpnam.rel @@ -1,6 +1,5 @@ XL4 H 4 areas B global symbols -M _tmpnam S ?CL64180L_4_06_L00 Ref00000000 S strlen Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/tparam.rel b/lib/relcl/tparam.rel index 459b5aad..54f5ce62 100644 --- a/lib/relcl/tparam.rel +++ b/lib/relcl/tparam.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 19 global symbols -M _tparam S ?S_LSHASG_L02 Ref00000000 S ?CL64180L_4_06_L00 Ref00000000 S ?S_MULASG_L02 Ref00000000 diff --git a/lib/relcl/ttyname.rel b/lib/relcl/ttyname.rel index 7fc6322c..26c8bea3 100644 --- a/lib/relcl/ttyname.rel +++ b/lib/relcl/ttyname.rel @@ -1,6 +1,5 @@ XL4 H 6 areas F global symbols -M _ttyname S ?CL64180L_4_06_L00 Ref00000000 S strcat Ref00000000 S closedir Ref00000000 diff --git a/lib/relcl/tzset.rel b/lib/relcl/tzset.rel index 30a27f88..d11e6a22 100644 --- a/lib/relcl/tzset.rel +++ b/lib/relcl/tzset.rel @@ -1,6 +1,5 @@ XL4 H 6 areas F global symbols -M _tzset S ?CL64180L_4_06_L00 Ref00000000 S ?L_MUL_L03 Ref00000000 S getenv Ref00000000 diff --git a/lib/relcl/ultoa.rel b/lib/relcl/ultoa.rel index 355032b0..e79474ab 100644 --- a/lib/relcl/ultoa.rel +++ b/lib/relcl/ultoa.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _ultoa S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/ungetc.rel b/lib/relcl/ungetc.rel index 7fe3646b..404af20f 100644 --- a/lib/relcl/ungetc.rel +++ b/lib/relcl/ungetc.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _ungetc S ?CL64180L_4_06_L00 Ref00000000 S fflush Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/utsname.rel b/lib/relcl/utsname.rel index 43ea06a5..8637d3d7 100644 --- a/lib/relcl/utsname.rel +++ b/lib/relcl/utsname.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 7 global symbols -M _utsname S ?CL64180L_4_06_L00 Ref00000000 S getfsys Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/vfprintf.rel b/lib/relcl/vfprintf.rel index a3b8ea3e..5ab767fb 100644 --- a/lib/relcl/vfprintf.rel +++ b/lib/relcl/vfprintf.rel @@ -1,6 +1,5 @@ XL4 H 3 areas F global symbols -M _vfprintf S ?CL64180L_4_06_L00 Ref00000000 S ?S_MULASG_L02 Ref00000000 S fflush Ref00000000 diff --git a/lib/relcl/vfscanf.rel b/lib/relcl/vfscanf.rel index 11b3eb07..872b4042 100644 --- a/lib/relcl/vfscanf.rel +++ b/lib/relcl/vfscanf.rel @@ -1,6 +1,5 @@ XL4 H 3 areas 10 global symbols -M _vfscanf S ?CL64180L_4_06_L00 Ref00000000 S ?L_MUL_L03 Ref00000000 S ungetc Ref00000000 diff --git a/lib/relcl/vprintf.rel b/lib/relcl/vprintf.rel index ddd594b3..ab355b56 100644 --- a/lib/relcl/vprintf.rel +++ b/lib/relcl/vprintf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _vprintf S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/vscanf.rel b/lib/relcl/vscanf.rel index 89236a49..f1d352e8 100644 --- a/lib/relcl/vscanf.rel +++ b/lib/relcl/vscanf.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 7 global symbols -M _vscanf S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S stdin Ref00000000 diff --git a/lib/relcl/vsprintf.rel b/lib/relcl/vsprintf.rel index a4377d66..395093c2 100644 --- a/lib/relcl/vsprintf.rel +++ b/lib/relcl/vsprintf.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 6 global symbols -M _vsprintf S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_AUTO_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/vsscanf.rel b/lib/relcl/vsscanf.rel index 40ca2d84..0367f4b7 100644 --- a/lib/relcl/vsscanf.rel +++ b/lib/relcl/vsscanf.rel @@ -1,6 +1,5 @@ XL4 H 4 areas 6 global symbols -M _vsscanf S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/xitoa.rel b/lib/relcl/xitoa.rel index eeefe58b..77d81568 100644 --- a/lib/relcl/xitoa.rel +++ b/lib/relcl/xitoa.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 6 global symbols -M _xitoa S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ?ENT_PARM_DIRECT_L09 Ref00000000 diff --git a/lib/relcl/xltoa.rel b/lib/relcl/xltoa.rel index 1882c4f2..aad4e9e9 100644 --- a/lib/relcl/xltoa.rel +++ b/lib/relcl/xltoa.rel @@ -1,6 +1,5 @@ XL4 H 2 areas 8 global symbols -M _xltoa S ?CL64180L_4_06_L00 Ref00000000 S ?LEAVE_DIRECT_L09 Ref00000000 S ultostr Ref00000000 diff --git a/relnotes/20030827.txt b/relnotes/20030827.txt new file mode 100644 index 00000000..4bcb31d4 --- /dev/null +++ b/relnotes/20030827.txt @@ -0,0 +1,229 @@ +HYTECH INTERNATIONAL BV +NOS/UZI/CYGWIN RELEASE 030827SD + +MANIFEST + +-rwxr-xr-x 1 nick users 14974394 Aug 27 23:39 cygrel++.zip +-rwxr-xr-x 1 nick users 11470641 Aug 28 01:30 uzipatch.zip + +INTRODUCTION + +Yippee, hooray, yippee ya ya, this is an initial release of the new +networking stack. The "uzipatch.zip" file is a patch against "uzi.zip" +from the 030704SD webfolder. The changes are mostly self-contained +(see the new "/uzi/src/nos" and "/uzi/src/make.d" directories), but +a few little changes were needed in other folders, due to the changes +in the compile utilities. With a bit of luck, this patch will contain +the needed backward compatibility fixes, so it can be adopted by all. + +The "cygrel++.zip" file is an update to the recent "cygrel+p.zip" file. +The gettext support is improved (we now have libgettextpo0) and Cygwin +has been upgraded to a newer version. Added the GNU msgfmt / xgettext +utilities which are needed for gettext development. Also fixed a minor +typo which prevented the PKZIP-compatible "unzip" tool being unpacked. + +INSTALLATION INSTRUCTIONS + +1. Please back up your current uzi folder before continuing. There is a +possibility of losing your work if the patches are applied too hastily!!! + +2. Download "uzipatch.zip" from the 030827SD webfolder. Don't unpack it +just yet. Instead, please review the list of changed folders shown here: + +/uzi +/uzi/bin *** ROBB! "mkboot.ucp" changed (and some generated files) +/uzi/bin/banked +/uzi/bin/large +/uzi/doc +/uzi/include *** ROBB! no files changed at this level +/uzi/include/sys *** ROBB! only "types.h" changed at this level +/uzi/lib +/uzi/lib/relcb +/uzi/lib/relcl +/uzi/src +/uzi/src/bin +/uzi/src/fsutil +/uzi/src/gboot +/uzi/src/kernel *** ROBB! no files changed at this level +/uzi/src/kernel/uzi *** ROBB! only "unix.h" changed at this level +/uzi/src/libc +/uzi/src/mkfont +/uzi/src/mkutil +/uzi/src/mkutil/as-z80 +/uzi/src/mkutil/link-z80 + +3. If you have not been working in any of the changed folders, then you +can proceed to step 4. If you HAVE made changes to those folders (a very +likely situation), then you must view the list of "uzipatch.zip" files +using WinZip or similar. Check if any of your filenames conflict. If so, +you must back up your changes, preferably in the form of a "patch" script. + +4. After reviewing the changes, unpack "uzipatch.zip" on top of "/uzi" in +the normal way. If you made some "patch" scripts in step 3, apply them on +top. You would need to give a "fuzz" option to "patch" when doing this. +Some hunks may be rejected - in that case, apply your changes by hand. I +don't think there will be any collisions in our work so it's probably OK! + +5. You CAN download and unpack "cygrel++.zip" from the 030827SD webfolder. +Unpack it to "c:\cygrel++" (or use some other empty or nonexistent folder). +Run "cmd.exe" and change into the directory. Execute "sh.exe minsetup.sh". + +6. When the script completes execution, use the Windows shell to delete +your current "c:\cygwin" folder and move "c:\cygrel++\cygwin" onto "c:\". + +7. If you already ran "regedit minmount.reg", then there is no need to run +it again. If you don't have the %BACKUPPATH% variable, then run "regedit +environ.reg". If you ran "regedit environ.reg", please fix up the defaults. + +NOTE: IF YOUR SETUP IS ALREADY CUSTOMISED, DON'T RUN "regedit environ.reg"! +THIS WOULD CLOBBER YOUR SETTINGS! YOU MUST SET UP "%BACKUPPATH%" MANUALLY!! +Please see the 030708SD release notes for more information re. environ.reg!! + +8. Note: Since this release it is now recommended that you store your +"c:\uzi" folder inside cygwin - for example "c:\cygwin\uzi". Because of +this, the "minsetup.sh" no longer creates an "uzi" symlink. However, you +will have to be careful not to clobber "c:\cygwin\uzi" when installing or +upgrading your cygwin package. A couple of scripts such as "cproto.sh" in +"c:\cygwin\uzi\bin" are now relying on the "c:\cygwin" prefix, although +"make" and its subprocesses are not affected ("make" uses relative paths). + +9. Note: It is vitally important that "c:\uzi\src\bin" (or the equivalent +"c:\cygwin\uzi\src\bin" is present FIRST in your path. This is because I +had to build "make.exe" from the latest CVS sources, in order to use a few +nice features. If you try to execute "make.exe" from "c:\cygwin\usr\bin" +then it will not work properly. It is also very difficult to troubleshoot. + +QUICK USAGE INSTRUCTIONS + +1. When all patches have been applied, you are ready to test the software. +This involves building the "uzboot.gz" and "uzidisk.dat" files from scratch. +Use Nick's quick shortcut: Change to the folder "/uzi/src/nos/main" and +execute "n.sh". This will change into "/uzi/bin" and run the needed steps. +As the final step, the flash card image will be copied to "%FLASHCARDPATH%". + +2. Clear the memory of your terminal. Insert the flash card. Power on. +It takes about 1 minute load (the kernel is now 330 kbytes). You must be +running "Hyperterminal" or similar, at 9600 bps, connected to SERIAL 1 as +usual. You will see various startup messages and finally the "net>" prompt. + +3. Try some commands. The "?" command will show a list of the commands +available. Most commands will give further help if you try executing them +with no arguments. If this fails try adding a dummy argument such as "x". +This will coerce the parser into printing the helptext (to be fixed soon). + +4. The following commands are known to work: + +attach asci 0 15 ppp asci0 128 128 9600 +ifconfig +ifconfig asci0 ipaddress 192.168.0.1 +ifconfig asci0 netmask 0xffffff00 +route +ping 192.168.0.1 +ping 127.0.0.1 +stacktest on +sysdebug on +systrace on +memory stat +ps +session +view /lib/liberror.txt +domain query 192.168.0.1 +domain query redhat.intranet + +Ctrl-C (allows you to abort the execution of most commands) +Ctrl-Z (allows you to suspend the current session and resume later) + +5. The following commands are known NOT to work: + +ping 192.168.0.1 56 5 +ping 127.0.0.1 56 5 + +This will be debugged soon. I think the problem is memory fragmentation. +Eventually the system deadlocks with a diagnostic ~ (tilde) being output. +This means a process is waiting for memory to become available (one per +tilde). As it never becomes available you are stuck. (^C/^Z don't work). + +dir + +This will be debugged soon. I will convert the code to use readdir(). + +6. I just implemented the "start" and "stop" commands (for working with +the TCP/IP servers e.g. ftp), but I haven't yet tried them. Please try +a command such as "start ftp" and see what happens. Check "memory stat"! + +7. Many of the other commands have never been tried. Please try them, +and we can start working on a list of priorities for the work to be done. + +8. Please try giving the "attach asci" command as shown above, plus have +a Linux PC running "pppd" connected to SERIAL 0. The baudrate must match +the baudrate you gave on the "attach asci" command line. Using Linux try: + +# pppd /dev/ttyS0 9600 lock passive 192.168.0.2:192.168.0.1 debug noauth +nodetach xonxoff + +This is just an initial guess at a suitable command line, see "man pppd" +for more details. The "dryrun" and "dump" options may be useful too. + +# ifconfig ppp0 up +# route -n +# route add 192.168.0.0/24 ppp0 + +The appropriate routing commands will probably be executed by "pppd" as +the link is set up, but it's possible you might have to do them as above. + +9. Please have the SEKISUI protocol analyzer monitoring the serial link +to SERIAL 0. This should allow you to see if there is some LCP activity. + +10. Finally you should try pinging in both directions. Try a command +such as "ppp stat" at the terminal level, to see if LCP has connected. +You may need to experiment with "ppp" suboptions to get a working ping. +Use the one-shot ping command, since floodpinging causes a tilde error. + +FULL COMPILE INSTRUCTIONS + +1. Since intermediate (temporary) files are not included in the web +distribution, you will need to perform a full recompile from scratch. + +2. Change to the folder "/uzi/src/nos", execute the script "clean.sh". +This will delete the compiled library object files in the distribution. + +3. Finally you are ready to execute the command "make". This will +recurse through the needed directories such as "iar", "clients", etc. + +The top-level makefile is quite simple (see "/uzi/src/nos/auto.mk"), +with the only really complex part being the need to make "po" before +most of the other directories. See below for an explanation of this. + +4. When the full recompile finishes (it will take about 20 minutes), +you can "cd main && n.sh". This will copy the image to the flash card. + +5. After the full recompile you can compile incrementally using "make" +as normal. Only files that you have edited will be rebuilt. If you +want to force some directory or directories to be rebuilt, you can use +an "rm -r build" command in those directories. This has a similar +effect to the "clean.sh" command that you executed earlier, in step 2. + +6. Note: We do not have automatic dependency tracking at this time. +Only the dependencies explicitly listed in the "auto.mk" files will be +taken into account by "make". Therefore, if you are changing header +files in "/uzi/src/nos/include", you will have to find the dependencies +and force them to be recompiled. This can be a useful feature, because +a full recompile takes a very long time. When you have compiled those +dependencies, and you are certain there are no errors, only then should +you execute the "clean.sh" command to force the needed full recompile. + +7. The "po" directory is a special case and should be handled with a +special procedure, because changing any "*.c" source file will force +"po" to be rebuilt, and this would NORMALLY require the entire software +to be rebuilt. The second step, rebuilding the entire software after +issuing "make" in the "po" directory, is optional and must be forced by +you. Generally you should make your changes to the "*.c" files, and if +you didn't modify any of the 'C' strings then don't "make" in "po". If +you DID modify any of the 'C' strings bracketed by _( and ), then you +should first "make" in "po", and then "make" the changed 'C' file. No +other files will be rebuilt. Continue doing this until there are no +compile errors. Then if you "make" in "main", you will see some link +errors resulting from the fact that "po" has changed but you haven't +yet recompiled the entire software. Only when all other errors have +been resolved, should you then execute "clean.sh" and do a full build. + diff --git a/src/bin/as-z80.exe b/src/bin/as-z80.exe index 912b5f73c0ced87ec20975ffd823cfe1e1182e42..bc550e77d0339efc3928d47d6a051378fff0c0f4 100644 GIT binary patch delta 37481 zcmdRXe_T|>8uvNNqAM zFkBqs1S<~%)&ruS_7s{$d6YOoe^3-+<*j0bu|^a+`U3&^BIE~jWBsEKA?AS*LkCQ- zuPC-7rDiZl66q-UGjUkT2mTzpt2Dss&x)caEMI0{26*`$@T|y+NWm&k&<#mh4xR;+ z%(9l^+3jaVK@--kSheOBLD(IN1TZE<;aPcji|($#2ZQ@Mbq+!BEJV8JotxmjdmFr3 zaOjyb4PF5yJU<^^`U-gO63X=ydhrQ(Tf^YJ<$^b77`(oH;Qe(iJc+zxL}k zH@qnk@C3@cB@&*qH@wL#8zuB}!+U5Qyhy6Z&~5O}P;FL8@KTUX?$f`ov!WEx*9Lg& z*T6eVGWdbGkf_+}C^eD5Pbonrlqc_m7f)4q@H%*rTj2dtLUB~Y+f-~H;^!BV&>CXu z;@$A3u7>wq8NB3)@TT>Fcjtsc_(!+GJ6#U1j>sG(f^(?g8#coW*TK7d4?LDyMF|~L z!CExFXIK=x>leUl9sw_6J-jNk_F*yhTTyNb3DreZ$lrz}(qm|7O}}yXW(w}?^HP4x zsIYPO9`=M5=n{6{pDC2p*at{~=MlR6fs}u~?+5PudaqH+IzP&vBHdZ_Qno?LuXpF_ zt3m3{LBEMJrPL9}QWNmfY9xjEQzh8bmB0`79`H1}x_14G> zV`pXxuCH}v9|mn}f!0V_hEswlp*5(@cS-rXf==jM&CZ|`<$Gqz<--=}g71>Q8I~8) zg}|An9s5$WKMctad1bym9<^WPN&kCj5Vnp9Fu*gn2UvCFq2~o!#Lo z=@9He63gT|De~MVJAcBoDDM=WuT=mAXnxL`+h?K$@p8g@i%Ta1D+@ViPffU=I zub^1^aWvO=;EPgR7V?G7ajcZuW`n;K4UprsmEMISc3=i^)f+ewDYU{0BJQwoBzY%P z??y(-Q0hbmj=xaDr!?S~;=%D7{F6YJy0Iq;ilo)46fNtj6**IG<3j{{o)!eBz{sQ4 zdwSH`%Ibw$J61?xR16a_1y~NVe<-+fW=VmJy{`;gYl%O|jq39z25PDg%P8p|BL4PL zbvQc2RLaGaBY5uq-RDcJ@y_l-Mv|)rJ(eiDIVx|7e{N;6M*F$5I;8xLpcD5{3%S|@ z905{x$EmG*Dh@00&7w0JG7#*2T$TuwDLDK+Ut((0njpKoP~3rWz;#*37aVaa&X&;5 zR^ALr?WI(22sn#qKfJv4D-p_2ufMDA<3sUB}vza7~ye6V!HuYp0$1b``F8Xcm1z*3VPeWGg0c7#^ zM&K9%P9`oXj5y4*UDyb@XSL=?fkZM_`ISjA)N>Y-GN-F^46rGF(0B5bou4y?r7$~$ zNAn}f%WrX6&Z1x;sB8D|Qo@g14M*6%3Fo!_C#=$xzM94qgfehVa{AR98Y#!|8U0Hb~ckIR-H zNQoRwdaX5J5>Qli7+fkhq$CgH4Y?h~L$hqk)e?PM9+En8B%w%?_2?_S-QAgbE>hQB zdSUZ8(32OZ4rDz=GO(e6a<~J$A-t%f0L26=0rcHjO`h=>OFV=8spUxx#Go=~H#JzT z$@HwNBV@a78t*%67mmeL;DkT(g28; zG+XX;to zx{65yI63{YUs8&C3XoDXQT?)7a%}BAY4SLY2jZZn8+>$)4U| zLTkGtu973Hv?ESloT3%isukC+7T3MyT3EgQI9%kaz4xH2ad`W zlF>lX6wfC&o0Et00`EjYG%N_kNbjbc&&x>}Bj*#2l&gnf!do{7rVGWnHbE&SaC(yN zlo0S5DaF>Wm{w%(*Am#oO!#gQYQe{7s72%^`NfREy0iDor!#I2>tYPXH*&bM49b(T z)iNrQQq*Z^?Ixy4-cLQZLnt(^$fcHBSYD2S)dS6p`3B{ma=T?z1oHBsNqMc9XFczE z89cJAsS{aNj({ZuMl^S}L5VMxUz#{Fu!|u@S1f-yafnXYB>ysTI6a0=x|jEq|0$I1 z*&XFro8)(F{hCQ7znv9#_3#;{vCxsLe1M$=)>+y$gS5p^P4<}-NIvn%0&*p;cg)FfvA46v)`l&b|#u*@j$&wku%m+G@antw}30kjHZC zl4dToLR(u(0TkHcu;yY}lz6PYQRgl@6or}ni$Tp1(BQv$hdeaXG@!HutY^2nN?HYb z#MYA5oSE{ind2h*u~PIf?#Q-x478o6@`>35hx}sZbv$1d&lk({{X28Bct~C~`7S4u zM}Cv5q>0I+iOJ)leh!z%MI!|ukBgxQU`d}NWnY9eAkeoM%SLa1TLeo&c?Wnc(0!y_ zgFC<7WeKmygh@FFYm*#XG@+5O%G8`;SiKnYY;jul)$*NF2F}!=Ih+{iTeXZCD*gP{ zpc9i}WCxWUC84VG8lOf}Fq!J@OQbOLj1Q)S4MARN*o(6$Koyxsfkn`R2d9P&)lzL* zs+|H8q(J13n;Mp(rB`a{dk~QFFLGtL8#_d3HBUWpL6r`Njzh`a`RB>#+B!9ai#MAF zb0*$nT)YQ0y2muSH56DxT+>ua!!g4@!ton5{3Z?mJO#$9+DyYNLqEvTn>F+nR(+~< z8=|D_^JqGi_m}1IS&MZO*UA-Hi^VVHmaL@_CD<)t9d93Yao8YoUTeYI<$p~ZC-0m# zNH=Va{KB+t{dQqTis9~-!Zu^Uef{e22rX)t_eom^l}9=_bdCJ>^|L3viajreztd*z z)O!6Y7TKlsMIy^H>ogmSF}XvqXy1i9n!9zAk@$X z3Q(1U5xA<#UoswyQuYN5<$qAmaE1=`Jj&6$q@H=UXo{wa>``;e(`F2Ia*Jn&t7M0t zJsCbUPHl^FS4lbJtDN%{N9-^KqyX_{qrhTPG3w6STqWBW{x*)kO~c=#;UA{}<`}LT zrLK}vF_DI@Ql8ye*52$Q$pp0oLFZ#V$q}BSuI$axICF|_$4i- zpue69+wnAw~^po$-@W=-X&5XjYo_g z1!(o0L1of52nD>B27i(=!;a@+MkR)aAt=E+*jcS?;-%5kOLF=A1SzcE^A1+!o__-i zYgGu1mBa!T@_RWVY%TLJ@TFY(_FZFx4ofEXv5qU^Tx7^P?-Zetm39k^Jbg5wsKg`_9g!;3_lK3^?iI4@x@ zvtleHNseG3gshGn<@YzKPR6}yBq0k4mLnLQgprMj`U@3SQ1bqDrZ=t zzDTcJ;?+}P-Xf*jMTAI>*n^@l*8vJx2=oi87y>aj_y^O>fuGAl>LA$r@pRGQ?^NC; ziWX9w?(xcgDpIYAimr3`EAhZ?@IR-vYlD9aT8(}U{(Cy(qAInxCd82q*Wgck6C97s z3i_S$r}^E9G;O;G`*@Hv{r=O2Q|(gLG+jF&v^B#vs2~S~SvSn0T{OYlN6KnrMqith z-DYO$Vf^Q7Bcp0iO4% zYT_qH@ndD{T^80@4(vp+wz3Bl-L9PAX`VB`IlEf9`v%NOB3^IMRJFepSd4;lmBl=x zH(cumP&`ulJY_0RsU}sse12$+t67($tYT#Ji8W-aNjX*_J=ZEsgL@L;LvU?QcyGfg za1)U5H#|4O2?&pb>kpR?C-mzl_S5#T3#6!i{r)^1o3Obq z3o!}(R;~Bjm$2q{S<=R^_#i2edS5gEBB6V~slDI@3 zSTLGekrJ?^RyS{zhQ(aN-e>mR?YBUo_>S<_76pB>n$%~n9c_+QhA%>ul&!D(d_gA~ z-Pvufk~Z2iT!-^Zs4Zl5Zo;$0}`!2{uLrInZcD1M5{gq6Fs!1uO>3VmzLc@VPv~Y6&ORrJ8!~9hw`~~7z zVs&9u7|M1}$DxzLxOPv*P>Phjg(=QmsJQ4DD`hKEu5oM_RmvSkeS~EvMZ7vAre1~$ zlTVSR!#?=;QKo314J*{&)l4T-0Y!Hx>6{Tv2o7Ze4|735c7kX8?>-;u8Fbr;2bf^K z7I9b;(j}CKgCNb1j{zyGEvKTQ7{bX_On{-&iWyHx1u{twDl=Ur%*B-NP*=J=1k%q_ z{vy9MKg{_J%dg){V%uubdbA^;Xo6D0llZ7AI1)%cbViVCEc?(N%>*5EVtSzKD_z-X z2iB~Vx_xq>5er`mmS+a?tU9}eCrXpU$FdP-FB2wVIfYZ1Mr@-{2G+&hlY@D7iOW4V z+?&#^D1F&!Cdsdvgt7BR89^6IIu^1nl;@|l6%WbS;v z1IQ(9mY_1-RYDuu4?tjIo_tNepU6$usjXY-VMdDB;v zQS;=eAXKlFt*WqCi&j2FhM*JK??P&QaUONf97ZaIYE4iA<)t@9k5)KEtQVMY@>^l5 zkzBHy+=0}&Fq~K0?~QyjgXf=8~UN^>)%`_^*F@= zs>W6aM{;LfaFtvTg31z5ckLvvqsUkBP%OC5Q?@fSLq!>ZIm)T4b8WjI$n$OrUBrfB zblQh7uT*56%~47@9wb8Y8Nq5}sCbAZlBa@KOXLn@2s)AVE~bFKQuaA>V5dO#%WvNl zExP3IZW_{;RUNYy_Rr;@g#)kctoxi_s88_2PHkogC|aY8=6raL%5xSbJ40>O&Jo7g z&^fkv`zi|$qnTL*pH2cwvZXMZSD58Nfok%k3L1}KI+0Pp5vr-~Zv8`K9JtViG72Nhl(Mrc-4jc8)# z$`+y>e1wtqj#snL5g--ZjYYHmAtz;o-F3V26{_3G3L0MU*igJSla7=ES!F{jD1)1+ z5oZmjdz8ZJ^Y|ZVM1w|mtA|>LexAOJ_&EbO5}+l&$$b{bI_q#hL8^#?Jblp><7`&J z^Cn`H_g_X!vW^eYyT1P2&B8sW6*gK{5dM>dA4mhV>ojUj0d?G9a_!d97gK>*7x+$q z**V>~o;2hYTJ|K2nCAQz$1ugtV=)+*vs&!^ z*t|6T5O08fY+Su^kV7XtxCw$XTXK{!9D#L*_bD7uuUE&5wX$hRlJj+z$KaiSSn5GX zRCt)$hdxo^erm3FIIN5WF+MFH8f zIy^${TlsC?qn>mW*wyfAyFb7s#767^2YpUb0#)>fSrQI^I?wIgjHrP&1@fDMUdlBx zee^rIm(-2R3b=yj19o85LHmBn4&+e^FYX?>wg=s`XR_9@6`b!^XWD~C-d^Wb`kUFZD=rsQj2(UBCq{z@Gl z-6XLR#<4pW*PVi?*B7#zqbefHl>CpM_;FvYCoF;afs z)sl%+6g36bU=P7~*D@AfI>4$&WzyW7s|@62YBP79eDs#&)KV6yS3Ux^R)yWFXfu(9 zYcr&437nW_9O&gy%SWY;=6Ss=v$)T=hEd1<|N<642LBM6bijV2s+VM_e-SkIJNA0CDD-?ZF zH5MFLzch85Eyl7{2vny((ft^Cx&E-J<0bgYS|p(4O^Qukx?-$zALbzJMpfd`;7==j z!t^HcFvd~AJBEibo8dAQ57Uy`8`KrA6r&(7w&T0D2xuB)DiR8UT{_Hfq%a$S-D0_w zU1RCx7{>2MbY5@4bUmF{+;a|Os%i6v-&LuoILjLT>v^otNo>=gVp|x+(#W#vIeOBR zHj+(gLmf%VzvQ*IE^zK-DQ#$a*VnkMrLMx9FurgLj}1WGY2_#%0v}z8n#mSS+fQr@ zsbXg!6_uxa`Yh{7-cVa85-Z9mHb<%Dv9?g`9@wJp!{BgwE-`A5oa{yqcC40?ittN3 z8SK)J;26xVkkCCMk_sx{&dBJ!n-~pSIPFEmaY9|jM&})&QnE4dN!A-Y?3AxF8qpGm<}{4Y#aSoF3mvI_o-xx0U%Rk#-L zez-k1TZI{j_uXa{UcfVWDR&>>d3l9Zh@W>0Pb7p-fK1QyWmaJq9ECME8=1GjEkvdZ z%dNsCq%Q-J_m)_NXA$=}+$(UkaPP|HwoGR*HfVF$`AGm{7BhP=ZtGwGiiX^1XSqEV z0k&z)n&h`!CLHZtXu7Rw734d%fMWGp=C*Na=C<jCq%fHvF1& zf<_Ocjz`mT8`iS@aUeIr-nX+r?DVw3ykSmUgttGnyF%*qv*Y^}vC~vAc!2Tz4{AC)Zc+TbM^9-VSQUounu`XH$zC zasC>L6o>#97HhHHLx&QsbalT94S$4?Z)3;??`LekYUDoN?)(;5vMfB|BoNCxp|0_1C;+y`eCSi6{h7u+kT+- zXA1{hT_O|MmfE$L+PaHG04@!*Q>t0sGQeKkRXK-cAm19W82ER2rSYFko32DTCv-b>$K5B`J#%+&9-uFIw_YLab%C}@peq@Sw0^5aBjZ@cH&OEF zj+PS@YkHVB8XMfT8{*j1rP5C6aD5a{I$NbDFNBt{f6yVeH~uA~rB|iTZh`p|Hzrn# zpnFS6s5==Uc6#AdW@d1)vXO1;cZ8hB#d?PGW!nXGwGARwWX%1VpaXam<8nL+2lop} zq&w8yySoZgzBIG4x`{OOYMHuPqN=gPxpY^YuCzpsy*rLwHV_;)@SP^3LHD zb&hF&O0l&o*S$Rmws$41V4sGA@(KMG0kE&4v8?{TU-=|SyV+vrG5FF7`w$mWxhSDS>O*iJ+Vu7mZ z{Yi!!>@C#vDVkx0(&a2^vN6Y&LCESE;X^9&wVJAoU|6A;i%f`Aks>Kbc}W$ZEKODG4A{#l|+K`Cw}`yag`_{-MCS7xN$?1nj0E} zOZ{{q<|4bg+P0Y}5Hqv$4T`LyrD?5q9Y{c`+BH*Jf8^QDAuAsy(JrhT8k7Y*rzgEj`?gw+ zql?fr>GcWhX7%=L1I@k^>q;aOlS0*Wv=2kYjT8#9GbReCR+Va0=@j{X)ttg*BG^?h zr&iog9ZWN)aO#e?&%(B*1U!2m>v%cJVL5+mQb1;<3OZyN;A2{9s{Fy$uz-;o7%sPN z9n$yr3KhBSJ~`~3#DF1M@~d**JxKvmS&{l2rC6@KC(#+NVVfD6q0<&%#5hD;;vfVA1!j)y@wG#Q=~Hx3<%T3GWpsvdUf{Ty>kneyZ=WemobE% zm3&N%{V$cgnJTpX|4AipWTkah(od_T`X=Pda#V%hsoCz4)R`pp9)BqYBirU1$-*7a zO{6fo$HO`v1?UPl+!bY*-n(N$FLbp6Lx-wnF(wC zBtGx+y(>)X+KE`jJ#0wP?7@L#=Go45l9M?(@2je8i`FS&_Y7lM*eF@FOzFibaPUs$ z@>V(Q{!!DT=aaPotA?&Q5kS4clx=We2TP0cMtM)OcTS3&Hie4Z0~snmj$_($i~#8$ za_x&7<*3R&1*KcCMk{HhE0*hFm9{pJwMcdf+m34WeghNcJa*@3)2D?731#qB;uCfe zF7UNrMy5sq5w{4V065rhF5MzKE2H|5aS4qBw7)VU1)ZDULWPuIX5xO)6Q!MmVE2NY zv5eWH0YntnZpoyUf2kZELbh%>^ihObKlR<@@txx6V4DcUU%6cRU_|Pc zEvoWRw?2d*^J!>t>+FT-k^x)03oJ*DG^H(9Tl}Il^k4Gcm6^d&4 zzW(eDd!zP-JH2;r-RTf-kYC-Iu^6Qo^eY8V~*vvTC8-ch6e@dZfyiAP{PGrFo zlLy$#Q%=UPu2D^Ce)MiOo>Cy?8B3ozh$@zEcxY7AQpk)C5u-;ip1;@919$8-HZ*;?=y{0RiYhRJqvL}I$B1eZ2eqz?x2)QtfU4XHI^Im1 z0i8iP(1kOy1ZqY|BMB*+kRkz@0IAGp%cFM1Uz?6B{D^{%gkJ>YnJQ9G1H-#FGKOue zf-&-zU4wZAd&!UQ8r++4_0Ns+o4dk$v(g(k$`^LUh^uAYBPpQ;$jj-*Iu_fQTngn` zk4((^011k3gO*CAu16G|mZH+jk$}x=HlJ!8%hh6JZ@{B#E2og2qfC_FecBOaQ@Sm9g^58i%th( zZ8pf553IS$T*fFJuLgrCy~cm|%SRW9*Ou8?1uC-ZbCpdz%*+@ZG+SmRG#wq=&d3!}0dX_%bA3Us=yFSYQM zJ9$OtA_tu}pUY9Uvw{p2+2?YVgS=3@=B(RbR2H)Q=hggq%5j!?1oY!PzJzfO_0LtF zRSEiWg8Aq2lyo`eiS#7_V5cI#K2NFV?6R^VIDM3i7GevxcSum*Fe1SiGI2vm!Br~d z1!VHv6-d^ELgiOv)nnDdDPhs8yd}T?M5OaR~iX`>=_)edbIt#cd5{U^?B-{oP{!ri< z#CWQVbYTf1euAYVo1$(YDHjk!8llvzRjYHChC{1+!7&mAus2%Ta#6sOz`~{&a`^cx zYvk{r91(bDXB2J<%R~3v7CU1NYiEqfwat2{THnT8C7H*0?(d7SwxngMJwSO`es0hB zfo-cfa(;X5*J#|fz9(~(=GF4|d#=lRNlnUbul-6-O7uaV@)(cv{EYho$}kk|@gl_9 z_eWj?DyKvv$OQG}8hKguHM*Zy%R8#0gNE|VTmzIi`K{^+&gXd?DQ|uUSa6*Y^OVzf zFs68WDhh)Po-mXI6&c~khh$8SIc%g{$@9C~b+A#dRqp3Gy~BA=F6E#``i4AZ^;M)R z%lyR=eO6&!?ow^IIQ@5ta&Y80^& zjCaE1uze##mZ=Ou$^&dysN3En&)gR$=E`^Pi;o-5vv@Z3M#57-Wgl>=ph|Dx8A&Pj z1B-R#o8=4p#to?CnW*7#fee?oUY3VEJxaV!p7`{TG3$#MU!HeydrKiEJ#`2%if4E} zq8KbYpB^+}1IOhJ9?Jn7z7A7K6cdR8Dw`VSF1h~cas58OomU&Lxhe18F8}`Yz{y9| zsH~3KW^pSm%K{KiSsSacnNj4e-*T=2};z?m8utYat2_dPRc z!e})ny92M&x=v^2DxoUn)u5+Tfq-W@Q6_P%ls|fAr1KLSuYDY%sRAGvn(xB90M`+Vkj~8%~3Mcw1>$kd<#T8I}qaY;boir!e3LI#fViN1fHsC zn^{p<0b;H_dmF16lVSlUg|Q6R0vgBi>#_L$4edU+m(sUN+MQecm1~fl%uA(`=k@k0 z(zE<~8H{-y-(UDe#Juqu2zt&2_-Xv4%B%K|n(PG{?asEn3$-PdAm+2IXwFguCyNy7 zBxX+3W9y{y(QWbv`$ye$FA`LowQ6pjMlOWc5y}eLi;gH; z9rYclGZQiMoIK~*fh!X^8#D|Iuz3h;9>?;$r~~jRl0Ewnk^=QGq}j#`1w56A81RLY)twC z<=E#&&Jhl&3kASmSvfqGsdN5?+1k7J2ORTw~c1?rx4r>#1Oj3=G2VmeF;(7hVFW@PUs%b-zmgWf6(te|~E%NLa2Vrya))!;P)2;3ABXYlHk5n}TFj3c8vOOehu?V7+N=LO*gXYOyYejz2j7NZWvpy`C0zVQ zj(KI0?#%%C)>k$~&;>WUVe9YoeyyYLTxB^{9c48O9K8#aF!|S4Voj4^^J3%Ion`bU zx_GtwKwkWpi8XZvl0DjB zPM!tA8~YY0*A3-K5oMPgensM9*Qp@ax2*+5f-iXoxbTHVAIcOK^IU}m(w1Ol6|4%^ zt;Y9VKHmcH-5|aHCw!MK)&C|Max;pN)6w4tf%?MYAg3H( z*f=~~o1=}wTxnr+sM}%(N_iv|;mD{C=2Y?Si}6u;_UnT(C}REhi*3=@gJ?t+%D5I~ zELdP0HvY-&Cjc8AA>35bFqyNHV9~6C?la^^q^Xks*d8jUs%# z>vzE(S1~0jN4XLs&pAFaD3iq-(8;HSDvhJ$(&IOX;BsxtdS1Yprn z6rnsywRf%PKrHMUUsw{T?QMPpayfa8Ane_Y9Lh@6NO=K`rzpST&CL0T+q)26jxRZ< z7~7`4f_FC&dF80(IoadX@%l*G%J5cvdgj!xpWu@ zR*gl;_GrDb8v&aS9HF(LW5Dl1x?V%th`<6BEA~*PMc{p>?2a}307LOKh;hbt5%AAtqtw-?wW3Y8fYhGI?yaoPvYg4izg{!m$VRY?_r3marLB>FLOkk{TN~0@m!L~i<58D_ z9OYHWi|XPqQZbnV235g3hg2AXu}4RM_36a$c?^>d^fTffyw|`^?USQO(1HctD5*Eq z;I|40NUGBqXMA&lu0|gzzw4TosU%(--IZ6~_!&yjx&Q;8p=hYmw*xxtPA0}1{K2j9 zWW*o>T&E2Fgzo(seG4OP*!)BCq?6YTy8tCD$$M)bP&m1DR*iyyzxZ{nWaG6U4RD3-W=Iz4{9@c{IAvDgD;p z_Ygn-SWJC%YfC8l6K1}-=0I>;TQ`V``K<1sZs8$$M}6u9tts}B3V2GH(v#@%Ehuk8 zMRr?Zt`7qerkyxn7_$6OA99{Ko;yM&E~4GJlj;zMV0U>b=en)0x!hY93yD#a}X3paO5c zJ!~S4hYq|p@9nG3zqb^L^EruIFHbWXMOZEwW#ynK%q^_op*M)OBWkYlpgj20+c6lu zT+KnGWkDylof-$Qwq1``%8xwy_S0Fq<~!v{XNK!q?v$6F2^)U#P7E2PZyx*2=Ns<`EY1E+ta$S^0Pd3Z zLM7TG?>tk0jE7s!%ojs{#Bk)pdlKheb#XpN4Tkr%(enJW-|PB~lCOVvW#s5atI%=E zDhz6{3b(*L3ilM;r*K8``|pl`Ir781FOA)aTDk+tudD9zp&CInp!u3eU-b}AU1E)F zZ3>;X94%Z{vzKOmdzkVpS_nf%kY)-jMJhy2_;V9KH$`p(TD~-%hOI4AtIGjl#@GN!Clf(u|uSD0QaIcIz%*v zpx?T)+a1o@EBc~IGnTk<#r*vZe(n;ZG%G}Jo)u!ig*sTiSEANOyoI7mKl*pYEKz^? z(-E5wPW`I?z>=;|J@J1z5cZYm*)%4btWiy_*H~2paqrwYxVN zz>V~4txrG4<(ss@uV~T|Sm&;i!&hXa1e`Fz|XkRdnl^BDzxls%bG%Ji(G*k)$58vsQX6oG_ zF;j1zX>i=KeO7P1%NJFi9rSx`Il}8>N=t$SN540SQR)4UybxQT!JSaW)Pqy|gnO@H zNWm3znpp~AO*Zsdphtw(LfaVUebOYzHLKM<#Jw=2!)FL8`vrunNw?_Z5q~E>1B(GM zEr0)9nDbK(GZa-EeR2#8R57i=u6^ays+^8w4gP)l6pk=GxOCGL2*I^f|2vCu6&rkx zRdb=`YmL57S(I;WaF^0kPh*NKg^}XpMnY+AvrcMcm}46&X7z8$t(YE~o1@eZ1FN{+ zRd4hKlIENJsS+FfTnau0NqOCYo8f!?fV7vA+{sigOp?rmbG3waD`##&g}xL+A z4l#X@>#J6DhT1Fg-#;F$+q_He{mDK&4!`h;S9B6J#{g)bnTg8LTkV{PaT_Wo>sc9` zdLZ@Bg2F_fxz-U^G1Z-e+Q4cf{tC6RVJ+%xZm=(N@y^V8yqcTvZ1vRP4PcOGsOXin zl@={>q!dWc)5{P(6Vwf#v`kHF%tvz=90^C><9!xj_O+=4;~ zs7tuMFgxmkX}|!($nz!!Iw_Kbndmct8F|&0kvjV!S^9D@9*4bOj@IcA8}ijGCx%OV zw6QSgC3|$J>-T2q%Z-6ots4`4h~0RtIg%|e1LrDHZLqQ07nJ!NV+)E5TAR|EQff!! zNSCFu7!7D2T%Z*Ho7+#J-q+9rV48-pdPxmrxuLn*3kp{i`6c=mo7kcdGY&2LB>h3u z$qstzM?bVNI^$yEeyx#SD=;lET$Cq?adFx9o4Jg9`SM)()nwinqe4MD0upps) zTAtdD|J_PUXl3MR`MvK_b@hLjdwXxA$69arH944xya97_-=F}78utwb_Y}Q*rE$Sc zC-s;LTXJ(Dq2&FW4j=L+i{b7N2(}UDL*{o%$RHUaWrdOFMwG5ERz zDU2%=t}7U^8kx$TCkDeV!1w#0z=w0^q83>m=oaPNMsYJOa<{lLib}Oqbc?!&qM|MLcZ<50qWW7N zq$s?@N=0r*l#g)&9r*}WI7Kd4>@~QS8iZWL&?rTfgt~hBkkyIrZ9<1`!iSOOMdQ*| zGw@AeOW_wBBi~N-MQthUsxg{Rt=F4^9Y0qXXDqHTR#2?DmZI!1@whExfUpY+@!f%q zgV1Qnw6IL{ZSR#{XCIJZfi@K=Bi~1>RM>loUZq0+rc)1|a}?c2Yz<-l$(>B=POK#Q zD6{@X&1WGJX~XTN{6a-}4_L~AtkOvq`^bFd-4A^}bKL@WFNPjT=!L!%Wik~2Lw$kY zZ)w9Frx*Dc7s@nBcSjOA_pl|48~od0`--@YEZjtz3zZ{VtdsxOFdUrN4P=`h-M?V2 zFRT=js-`uwJK0t&-`pBAU_2O*T3z+w=AXcVLAm?9{7CD_J~_y>Wbxiv#d3Y?G~Kc) z+4#d0dgT7_)zD>CnS$Qlt9;-zt54h>jHfp!=+zG|-GlV(9}}&6Hjz3@<9DJkjOd?3 zt5HWsqVHp=)%=qkxZwn>9V2WV;7kdJ zSG{kOe55VftdQCS+xxm|44IbVwOC92P$2z)mAUz0N(w5AK=rCsYC+o+WCcZhohWII z9P)FFliC3hAr)l{u?VtlOT-q1^3!QlasiJj%&B;jl9a`Wv@US9XKc8Jr{pL%APU<% zEUQZ~7y0?M+e$$J<75-7Rx5w=xQloO5M8iArVUl^@Rv4UNQ2ljuY zS<(8$505cf8JMgltFm%RCvlW#E~g|%Z>f}u$GEQMz?XE<497^UW`jKnGM;Q{zLR9^ zx)QQ3(sdn+o212fNlK$h(K;28r)Vi%#jw5c}fUQ@~;K{MD$tY~V@Inaa5klQu zV?m+o9bcj^@zQHpDb`*}jb`iNx4lzNkX{xjFTBGiphQ~0)0gFpZvrvma?%(A3)kmK zjS_4g+Doj+z-p84$^^MG;(d-3*2)_%N8h*$a*%qvBjOTkZu+w|Evs_@t-OhDzEle} zVtbTWj%sv!`<=qZuV_zorTOd$jQr1+qvmt+E@K@1(}h1-GP5O=nN?za#8nGqY$i{w z)r%GSTDzYlVA(`MXA+a|XpcAYT?oej+GUZSYmakwCT9xN6TC5)8Vi(s=qPsk7L>jt zf^969^o(olU6(Ix)MFcv#$~MHR2D3dTNBCc>)~vbPE34&n#JTO9YhJrvl~J~*SLCn zXTV+ql}~LbFS`;xf}|DXdK+yeokAO+X!N~`2v#;@L4Nc~;ix^FR65@&D)L_d+cJ#n z0c|ajp2?xVyl7PM*nXJ&-Y-_2^#eKh*Yq*ns!aHN=ZG1_n1sNiZV`6<>Nm-E{yGX% z3RJ%$%UC4hWp!9lzT|V8Xg_8L;U9 z1#Oga`EMxHiXiA|>|NpPjV1PWAqOxjfl;|1;YPStxb4&YMtx9zz2EFwk8TbOlXb8D z_S4fH^y!N>YgN5YjMd@!FP#_{!)Z^&V;0;zxP@@b;a0)f;r;^DDSqG;Vac}#{(iV) zaA(`BN1yZ)Me&*o5WHPqn(Zqs@{?*8k2*EB&OUy+eZ+LT+V}$@Sa)Pnan)(P_@OSX zxax6#(Hve+_UU=o`#$sE@eRDL?oie0FGh~uM}4`~eAzw#(~sIYh9XFNsa(Hu6n$G& zVlQz-DA_X|A&C5<`Tx4J<7Q8A2Ovt#cI}#xzU{Fm4BssXAAg-$~D5oU7b>s_MsH zVutSQLsfCT#qi1DcGyI5_I0kBxXBg+G*2J0xZ!N|2 zPDkSI7W43&g!H8*VdIWx1=Bsk9baO1iTUx?_?ud77|YVcq9FgF8o_EJg8DOA7W)d=K$ zD+ei0KfPe@a*V7`d-FkHlMl1%bj(%Qaw;t+(gv%=haBsEz&ws8M`lDLxpC3U9Z4l5 z)-ZCE9Auzck%+6-^bzk^PId7yndVfKwP3U>$iWNX8_<$C zK`v{-_8(6z=u9r~B~vEF58I3k2m8`JacuP27!~hx|0-*MILJxT3EsZbpJE(J^8 zh)XAR_Fyi!C`tk;?>D7;C{eIxW|~i}d&@f`v4+imuJ+7zgI(=6ZVcrag10x8)<%_= zGfKl-W9pz7gz)(qsDfR=3ep4c7 zhrPky@MsnOPvP{G-~RJ>x3+@~C^jV1c-I23vJ~C{xTX$km9sC#yWgx;`}<gaP zjvQdC6&RHUc(HIfaDO`90kbMP5aS)5vjZ{S0U5OS;c)=&2;6bFdbqQ2=ivSc)V+b= z6=BII_^g5fE*x&0&syaR6mM`Igi>O;GTC+(hMF(z7_?PtH~(tCO-eq3u&oBsg}zU) zLrR$T9NR%2VcSj5y+;t~`(*DiJgO;-CGe3=ZLEOAxP57Aqh1W!MmN`r#DclX z$l9)v(GaxFOYu6y2h>*G9W0L4?QE;s8!X0-h^o`@?1r(}K-d!Q{S>AVrdNMjOU4yf zwFF}*Dz5SQ<|;R~5HcOv94GO#UjB0ErORK=cKz-K;0apS8pIioNr>9ss;%mXSq9up01V%Y$UjyD-_yEX@;yE(+UfV#GB^Y zE+7ZDGqLb!1V50l!5v9B-jRicb8Y8=P=K_0mKL;aB;?lMPwD9Ef~h2Q3ub{(9J(k^ zAZ5VOhwPh*DMm0pdX2xlL8q3=oIuY7SM+7$6SS_lJ#9 zWg8%-QcU##F;v%hsOsndF`k~^4ZyzvU4$a5B0|I@ipdKRM`2}FwJ}7T>TLhBiicCh zS18pN!BXPqSouw?z(Ff66cn(kW7cWnm4}JyFdgeDWKj18TG{Hamz(8^Ss8=V7dfnkYI;%cr{FmXA&52~f(Y-VLFuVD_c@y`Ys;;q$8v_VD^fkU~{q@n$tYW&~@bS7#As&trzQXe#YIub{ zQ@CB9d9=S%>=V>`)iKAY10x0v*++rCthB4VgEt(# z??&<7-jnI$KRe*|!5xQdhBM5~6vn~LgWC+Z5AG~n3tYs!Okp~l9qu5Up|~pVX7PNC zBMLvq>g6let-oc>x)o7t*R5E)0^sr}`ui3e#R2{Yq7sYmOjn>w#ac!bXlR?C6ocQ-y=o^j(05s9`*u!k()mg#9Y46?m`* zd<-zH*tB0w54aw%#ysJi?EyDk1v>@dJR&fM3R;29J>ZKyV5JA#+5>J^VVXnO5C12K z=xeaPJB;!LL-z>4!78lPGQ0;I(F2a^0mrJaCWW{ja8fsz$`{hQMG$NS3{$xCHyv>A zP6%@^V7eov{pJIv%^yvIOMAe}d%(6Xn3XTARUl|A5H zJ>WfnH3g(h`#WJ?zHkr`WSMBcV?E%S9&lq1xCt;D7*qo1d%(>-Uu7>r1`*)=Zh90mH@PKaVp*`RTz}S@SEMJILBeXo@0Mlfv{nC2C)*kRw zz_i}iezSVO^8jO;zw@_{!&?0XVJRYL!%O?wdcbP|Yx+Sr#XaCsz!`|QQX+oa09){^ zXOJN506Y=llPX*ZcoNlLD|9C!a*(Jg%5K0`z%_96+XFZgPb&fV?Ni}W20^J*xJHE! z0G^Dn)(sB=o&uQ00{R^RJeBHSN)Ud>5RrvvIfDe@IN)4_D^<7#a2~?DRJb1SG=%r4 zaH9$zQ{l5Jd{Bj(RCvD%p9Ac?9>6zh#Cb$aNBC_OZdT!16}|{~2Ew1KumX4{!XK${ z3*Z|N)+E@f!fLY6rox)U+ijUnmVpKj`gN!XQ4E52J0}>c!g>`>Q(*((SqL|%un}-J z!r!ZKFyPq;Pg3Df6~0b|!*9o3MM4;(MntFxKdEq(3jeCY(JK5m6^>P56%@v)@CG#^ zNrg4dPg7xSG_^X_h~a96sVc0EZnIRF&YtL(19%Re&oW35=Be;&D!fpIt5tZZ3LjEo zn+iXt!p>D{1l^>dpIwEY;-FBh!Y`|EsS0aKv`vLIrQ4yxdsO^N71oq+mkLki=}uv{ z8bS9&=(kUW4|7mBpu*3q@DUZ>tHQ@snA)9w^(ss~iGF8Qcnt@ICKbMo!RUYI5OJfL zNRJDEZ^Bbj<1VW3V=COD!Y&nVQ(;+!J5*TH0ih^USg5AaLl1Zno@};^LBNQJ#dwk? z(=QnC5L?>{)*I*k5sLe&q|V#v`8)nc3YK%C)d(_XQ)Z%FJx zCQQ%~gn(B>A^H#&Az{v_mqlS5TsqurxSQeZaQDF72loWr0k{)zO>oU{|AG?^i-Hku z2wW^&3fwffd2q|&*23+8dkXG2+$V4?aQY*nFbr-2+~gx-oG=@Kg>W{wb#PnYD&h9P z9fUgt_X*s$aP3D#`2k(_|CdZxSzi`gs!9)wrB&9$;=osrh@w&6qg#AbtPvCa#Kx-R zI`K_sC2>lCbcJt$wA52B#%#yPfkuYC0mj+le3a% zBxfh*Cg&$R7bGuAUY7iH@(anwliyB0m;6PtAtfwja>|?(N6K9(r78PTUP%c}jY?gg zx-<33)cvW=ssB#>IraC{K54VlmZhyudnWChG*8<1X}&arDaXQBm(nk!Urz7sG+$$0V}8zj(%d&AG-F(b zC1Xm4l<`2up^Vov>M|NLKF;_&qdDWB8J9AA8T~CIEMqMR7PDolWu_(9a-(InWuv9U za*xGrdCc;h<*?;-OO54i%e$7pTmEHfxAdNvH8FqUvWd4&TsiU1iDeV-o49l0qZ9W` ze0id<6fKVC_KS0V5*HOeCVqUpB|a}+ihnHrV7w>3PeMpSe8Pf+bqR99QwawWUQIZi z5S_R-(Vb{ZDoc7Z>3s73*TlOIWbGWq%Bqsev2?aNtM zQlCwIIrV7j+o|uQHl==?`bBC>>W`^cQbW_i(<0KM(xTI1)5fL6r6r}MrDdd9)260P zPn(sNlQu7He%ivcrD@C4Y-y{~)~4Chiqkfym8NY=D^J^zR++XlZCBdvv^{AZY5t~u zrf8GNG}&~6DaVv=a;`FMHElQDZ`x&g+Vq_1nCXP+8&jLgM#@($}Yd zlzu7war3k0SIl+hv*u6DE#}MSei=hEMr4f6NY0o`Chl5TzYu9{;)O)NBxBN`q?DwI zN!KSWNxCg*ZBltsWzr)_hmu}PI+^r$C}nGsAvrjCaB{p88aX-n#^jrmS0;a)+&5)h zsyQ_`wF0uJPJJfz`P4&@##^b4sh_2OlloJtkTx3iu1b3SKy9U1Lgy0?shaLEUaP*-RTuccXfhriV>?P0ylw$4w_qr%WH1{$~2h^quJk zlhbGNOYfWBKRqh_y7biaN$FYXv(pRH*QIYvFG(*?zc2mq^u6iNroWp0M*4fu*ss$6 znckNEOL`x3pgF`m$Q*4hFqfMjFz+(&H@^VcG@37%{{iWAn8l1i84(%dGg6?^*%^5m zwv0P6N;1l!+7CmmlPz~!zO{HQzc?+y|EI3A4a>5;!}#+Yq7_oUJ00W-QDGsw?(6M- zx!!OQYvDSWBECc(nviIU;Q*VZ59!oFY|(~-f@l*PHivZh5;-kJ58pOK+@Y3BLBy8| z4IL&5vHc(Rd7qw-&vpN=^ZcFX|NihidZeD9m3~&I=!JR-sC1{^tN*6|rQ7s9-K|5- z7(8fV?c{m4KvoQx-N#3o5(DoG=OERsh8q>$_&ACdj!EV)RolJ346jH0oW(J6Em zok!oKt7#FfqC4qc+Ca~N{$p4&t6>M(d3KF;fYv91#wYQg@n7&M{AHfOvw$51d?P=^ z$Ji6?M0=V&$6jD>27&~y^q^gDH-Nw|2kZ{e_p9nx>ep(eDpKoJh1#x8s5W&+4bY+b z2RcGOt+7tjNqU~n)Ok9f*Xknup5CIXb&cMwkLXkSj6SEY>UMos-`4}oATtT3^}eYw zhs`O|WX_wb!6_BPx&LMvpX4n&3wI4|t+} zC=?~5OXvoA&YEStVZCcrz*J9K4=o=|mf&>!8qSBg*5NPkZ9I@*5>K+pGO~tLlD*_K z3FP-dqJdtc59v7e6DHZSkW-u4N303L=_b3+{QRH1m3Q%Ir`2h9iI?KN=Cyd$YNx7I zdsH19^^iKMHs}idC(y__{iVL8|E>F(P&34gHt}Y%Nj0<0t7ehOF@~tI1^{#mAC+x!`VNnsYZ}+@(i&^ zE(xcP@?pUII8ONs{Fi(>pUda-MSLk=1=qBl@8bt}Be(1`po@E6Hz;F}7$L?9Bz`Jh z6lo&xikL4Ji{+w3Y=T_eFAj;b;-YvUX3Dp9mmX|Jnn*Lvq?vs4J2-o-xnq1SP}jl# zvrrCNfy&WM5b-GdJWhr|ufgGD0&$5UQ^-7su+?M(Sp5J9x|Ot(`(z*;O~-@LF~B+n zy2G*n-2oTS1AHFJ#xn|KA*lC1gU-KW0=#VZ#ntcaP4l%8B2T;{O2uD9o9Gn-q?E~Wu3RSr zrLt1)md9l?sC|eUrDBy*$!fYPR3+*dWc#4Izz7j8D7#ibf@msHKxw^ zIv|T+8XPI~63Rz^KxI(lZi4(C!GrK{m`ntI4n(*H7vW-Dg3F+YZN*i%8sCKm))T-! z5<(WjO%{_Dz56j3v%w8~ z?zXz^?p>FGI}^O0LmbTqlzi#6f>ee;;J9KsjBlw}CANuO;;?8Gm&6TmTl_~nFXzbl za*525Z^*agcKLUpN4xBhow7^zNS_K(kE$sEpfoi{rK?lwoa#{bRgd!N5MXRl-z0w< z0Js)IQ7QxbY}H@u4j62g?$Ixpsb;3hFblynZ<^Jnz!aPHV4Qk$3;g2u1y}7581?%Q zHP=xGx`&>y##+(PkW;L=(2;Yk70|DCSjVi(Rj-3Z2w9=Bge@F z61WNRGmH{iK+EX?2%Dj7477txmc?@Vkh_)@LD?!}m8^<=$ZFX>D6aMF1Un7o^&%9n z>#UvKWnHY7h44^5n2+QUJd#KE8PenNJdsa^h?>D?^K|Y*{=SVc3PqzTP)QrP842~e zlk^ZD^~L-9UWbN}!Q?4E!^`oCykKjrEp0gCANzC)ex2v=|JTT>WOZqH6a2gJ96$V) zNI{eTNNN}yB$i9~`ZVA{t*ny>V3c6mO{eJzG6z%}e1{Z*!q9LOfuc|>q7df^XfjGc uX(%0blN{7ywZUG|Zgp6lR+rUdeLN|_Kj4WCE&j0n!8e_mr9)c$WB&_$Wp4cd delta 41770 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 z%0D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 delta 137 zcmdn6fMw+ZmI*IdQd@W1ZG00h$~a}Si8XK`+# z5%0(H-F6H>zy!pan*|q$2Qcx8OxF4k$K)V1x$DC!RNiKXPbXv*L3&t$>Yc4(N~%JlNg hyqMCe%$VY$*Fwy`3 delta 120 zcmdmbfMwkQmI)77csq96ZG5s_l5xuBIZ~F)K=~y_zFgK1ylrTq2XTKEyFO2u<$#unLv8+2PX(Srw2TMxc6UtC-TN%$VY$ X%Q*&>+)*< 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

    &=Zx{ME%HCHX({ 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 QB{(dZ>FL{tZ)Icu58s;>e*gdg diff --git a/src/bin/chs2cmd.exe b/src/bin/chs2cmd.exe index 8185fe690ba64c948e3c4189fae0bd03f5102bf1..f73fb106f78de07e2f34580b184ce2917a24e6ae 100644 GIT binary patch delta 21225 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 TT(+vR&b(?}`Rz63cXR&-_Mmk= delta 14531 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 bi;yTI_P=y8RV<0SNR%}x|LI{mS;qeXwU7pK diff --git a/src/bin/cp.exe b/src/bin/cp.exe new file mode 100644 index 0000000000000000000000000000000000000000..d862b9e424ee2f8f1a395ee04f25a80d3fc93f95 GIT binary patch literal 77312 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 z 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 Q?!NUF7D1i=|MBnt0#<@bqyPW_ literal 0 HcmV?d00001 diff --git a/src/bin/cproto.sh b/src/bin/cproto.sh new file mode 100644 index 00000000..3f1f19b3 --- /dev/null +++ b/src/bin/cproto.sh @@ -0,0 +1,2 @@ +#!/bin/sh +cproto -E "tradcpp -DUNIX -DZILOG -Ig:/cygwin/uzi/src/nos/include/nos -Ig:/cygwin/uzi/src/nos/include" -s $1 diff --git a/src/bin/cr.exe b/src/bin/cr.exe new file mode 100644 index 0000000000000000000000000000000000000000..912768080ca63a31d79e6d62537e5217e9286ed6 GIT binary patch literal 73776 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 YZ{FO(ys{Y!=9iS_70ykWUG#nL-+Uy;@c;k- literal 0 HcmV?d00001 diff --git a/src/bin/cygwin1.dll b/src/bin/cygwin1.dll index 4f2596ce3b9fa97da9835a5c6057d89cb2f4b3f4..0d53faead3308261af370ada587ee714d92a2f97 100644 GIT binary patch delta 431084 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

    $%|HF=^K=EBp*3|H@aE0P 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 z zVg1OiklXsAe zmdnV_%kDHlp7>@^V}2SLsT+aLa&{J<-MKvH341qXShT}$A)2oz_zyHe zqy2-U3REtDV&hT2uZXRra2vE~9dIfRwzw33AC4sre&ycw$7;)wvN$nE>OO-GRpBUPa%se=)M( zWb0JvHGSUq@^@3E?9ny)ats=xab>lO^*UE5bd%0%OO9^rUV30DK(SkJuYO>Ey(fn~BUvKm&RH-A>vQ5rE4lvDQu7r>jVtd;dq!#(QbYKi zg%jO7LLX-@WB>7Vsn%r0oyott$R-M{ z`yeTOssAVMpCR>W-KIHCV8=L&BAPXGC7ogQ>i|;DOXwLbSU4Vu{oYKLThElDqke(x zaAy%u@t$vTUV=JK9(GU8l$s2AZGe=%1HTQAOX+*@JBi;F{0yiy8ozk_&>uvBoIcVz zYWEFA*JXDwMj`>RD(Q~H<*#QVbVHlLWP!6qcnncl^GmCka$bPC?MmIDZWn;$(+hC; zi3u#61IhapjK6v4iFum^)^SU?HLzB_$@z@tQU$iBx$hiY__%Af+Zqk{EIj3Kz!2R` zo;6Eq;|Sq7nvuPvQWx$S2S6EiIhT4vq06a`s5b8dh>JqQ;rEu#q#ht^0ZXW*BH9Z& zm$IK=Od`ZwCxn2$&mwk>D`^9*uf$;h7=&U8CU*NpG$Co52g)r{UCAaV#XMN3DX%g? zk#0~KsE_UI3wBT1pg1=o{oe1vOe?y|Q!=Gq4yhwoT+t;{v+so3OsIl_dnB^n+wYh9 z_Nl_zj`IdLpaz!rm0sti^=@|mItMnqYQG0FGh`+Er5oCM5ZNgh7kU>E%4+-w5TKJA z9MHlyaBAr2)rbwKzY3bjQ=LWgg*TvYS-@H}oGO1_sl3U*sr+eF?rnk`N35kfFLr*Z zbGkQ)8OTkc8%pp-mir(j()+tYBPP5m8KlSQ{l)U{htvDx<=>~#`yJ)qKSS@=v@ZX_ zMjvRiF|Bj3MNbHpc&?v3aJDp1|88%2)oiK9G?H~?7LG}L0MhVfC;%uGhqe9D1qgTp zdYaZ?!5wCBET!b(F~KDe79n3b&T-ZdU&K^mczF)UcXt?KGuRJ#qfzbxl|^(N%fPe!g_VZRCB}`gi~lFcFT%@2{e}kuPtPQGD!=mi$`@Ni1%;N zLQtpbh&Z7*7yCm-3_xPBvGt`VXhf)qVeAL+iz@cXY)`Oc;w! z#MJ;tUSOB%hs=`GZBm_(QSt(t)V_uigIsA{ETEF}ZSZU|bdjHRAbQj+7CB1=+21SL z`1j!h=E~WJW5p42ntfv&)Ot9M%J)+RpdK15K>Y?+6;$?kCxH2`67dHOF?^T{oj#kFUS%^CKdL&Lqyx# zdr$XEc6L-eEBapaY_8co9LPTUo>$rcuZH8yvuQ}K~NJ_ zP8>Q^G;s>9K~3D#p-dAK=1cWVG<~K{uZ)Cp+I;Dsk`)1$+zt9}kZUZE7S&;IJ*|g< z?38E8QFUQ})<5M93#3?mOb7Y91=5qPx_)tsmN^z`;*r=#ac>n<4(+j2tUJ#(<4!8o z4}3&6AJx(6>lOz2<%LoM2j|?qaE9@%;GKeHPJ=j()f8%S@{=3L4aVf$4aBfPNaBk1 zcMpvPN@0GSFijk-@<8q|fuJH>-FgyQ2+xE|q`QyYdXdzirn5bU)mmJaI$>MQ3z5ez zlIlOA=BzSYLG5rJlOviviX7bcLuqBZrlOULw`*JZGPI8oM!t zcma-2qzfM2PvXgI!{~wKwPzX!rp$vdTm<=hmGc#dqZDPP%&k6@S1y)T2PoQQiPS^? zQajnU1g`Mx^~ow9I!kTOs#39|Rw`=FG%m}7s{pjGSO|F)*CI%aitFQ}1g^cfl1Yuw z4AB_H_O$^s#;j7kH*7B}`L%>nGn+@tJ)eUECZ_mL|YIPOkVw*^sV00hGb=f z25jvlwJmBpAl=o#ew!VVr4z^d8j1j+72ztZy~hezhvKSs9QI}F*Rv#N<#~@N{aOBC zj#Rq=dvRjfy1M#tCjT@?YS^3CwG7I+?{pA?v<>V(PSlu&t6C$MM%!A+4VOx-L`x&k z(!oomWr3&jOQjsgNVt8NMSwK)RP=+I&7h_JGmAv&5^f5 z-O0FX<-y@Dl^o)rDG(hcc!tT_o|A?-$n(31RzUgE{QvK5cvRa6 zwGGWQZFm9w&;9T=4EDES;({qtGty~+7)x+EC9D~pa-DtKG`Fhf`O@DZ`ED8JAvgq% zHi5r9Ca`SY1Y#aChU7somijIufK0!w%97+lzHS@XW0p# zjz6_wPNj80=|>}d+zI3eb*EsaOmR-1nl)>>WoEi<+T4r@Gvv>6q~4dI#Vnl56~)_3Q-dx`fK(-2)DVj+*v#w>#s5gw9d$us7IMD< zwUMGW`%JaIxpLPRq*0EDdNkvp&{CBMnL!o~wVKbAYD#cr%bTJhCj%BNjxTB5cw%kP zW=0)eUceqv=KI;Y{_g~yT;pKk0yo~tjgXGpYk;3oBjaui`=sPmDIIaABzW(Raz;Asm-R#g&fSpSc1n zotP=O8}JHF+qxi*$W^6+%X-%cO$DZ$&X~}0PHyLZcvPZ z08Hka5|!86UtTdU?@aIlUlu}~m~vVu1)d2iuo+>%-Qc7s@13P($~(o&I~i1-1D?94 zP#^`)AqYbs=C;kxR3$#vC>*{s-l zjr-H2m|gYeaQzH7bZDb6Bf)^7lha<3Iw!-MnZ1f9NE;Igi(jx3ALxb4@P%Fb;3nDC zV4!Wq8{;}<{}$apb_zt#ufN|!bsx)DUXtp!uusrolZ2RnphpUcA5YxG9qKtxA@+D% zH&l5(8Yth`s@C#Ix74Jyp*y-@Vt8R_3bvUR3R5NlwHO;IJc(&X65}D0I_U}%yUNoy zhSl#e9N^(;JYA4Z9U5367?=GWu}HcV*lO+}j$KFpN=zTtv)^_l4o3s!(Qe7odQ!KF zD?9@%R8XPgK^3;73iS`Ikc(esaz^S>MWUq5}#Vh4ha`(XDaCH4bbZJTyRgDi34jv|vUP$5v zKjmHw&muf3+9Dc-p>h;&jor$8AP~SdgK3Bi5Z?y2tDS)`Ol3VD0OlZOQv}RkUHn|= zxza;q14^|3j1d4Nv1cj(pi2ON<8A!dNKgP+003Ml zjR)-YZr;p$0P9jysr3T_p_1~jS{zj*v7LAUG3)9xS|zqRQO);AUsa{%Cf(xHmRG+l zHBWuNrA~)aTL!380COSS35W|snBd@nUl|8eo)P0z9Wp|ea;26IQoG!V z)V<6EA8B4`8+i3xllCNzM%RvHH>yxw5>D3x@q4O`s;o517qmfIX^nY?XiX-ryfxeF zpfz6*3y_%>xB{X(ut5s9(MoPWz!)&(AF;+mMIm95eaOI7vl7!my;Uwg7#ijHWE;j; z>S>v-Y)jpx#;)>;TOt66duU+z}kig9ffh1I&>Az|%l<3RI+HT{puD zJxDr|5RVeVT?w(g_?pbBDc;Z;Q?y+|5%-D93nXt{Kk{Re)S`M-Hqd4@2bJsJ3bphK z4i441mfXcwHJAOCEA=}2UDV5+i$s-+$D||5S@b}>K@h8c>?}OKLCPkN7oQj&R4kWcHSPtORCSN zYf6emNwjh36qpN9p7}K6XLmm$JsS@G#aRgbz*PqJk8kgn_R<4NTW?-W2i9Cuj2F-< zxvC+TXNRK&N5Ee6GC*;~z=Mv8;*Wz>LUf+BQ8Xet=|AO!T%tM?sv2~8S#X?=z>0F$%Ehlr^~`#DOuFt#x=t@&>m*lMf#|L+ zzLmSKz_}=4DBE{FAR9p=J9aKz2mL)yrXlP_VNwZ43-RzXY;wH-4_5)&vP(ne_Cykz z_i;XqVTqa~MxYclCkt%qb5jPuiG;Ymyd0Qc$A;ILGOnyt|xrClc$H z*7P0XFIxH50V1;v5N)||vx21!b+8;SA6O|h4H+;0yi)2MGFqc~B@N=ICQqqG1jmkr*de~{=F zJR%rcfWThC2Pg-1m0^N(yh5S*6((AVMdi1a=%eKCUYAVzE^XysUzg&f4Ub?H3eES) z7Fp^q4OgEsWvS;_pP2Lxz)NDwz;Hn`#6n%Z^1W60?*bqy7e!zMszgcrIzZRA6ue!&Bhj5@^hZlP7WCwTBkWzPcaF6tR&*RXHFFG z;aOy5PeQyECSt-&Z7<^Zuj2qG`!(;!;pqSt@IUv&Gfwv{Oq|N|Bu=Lb1Va_@x;sUJ zQK7!eUgEKr&^qx}n3JIo4OCT!8VXOSYAHk_xZ1zOqv#O5V;3k&1g=6QstP6Iu&NTp zlS<@T!fSYf*I;`abB2JTl(JQ-?=VTEyhI8`Np-$3|zxd z)O#V}9-4x#qkrm5W4afnW11i#A77U7YyM?WTiwdeL1aA?x5w)R<908efyOep%@??} zVoqU?4&b&u^eMuvx&&{pUIw`pYMbS8%iu=j`?Mn5ehDuKuwVtaeWj8Hw_Q{-`hSMp ziKy?P$SsRo=z2-4P*;Rb>>k0~eIlWU;owK$pHqg@2!g*`wrQnr_rU3{Q(^+^1uq6F*n+;IRIm=WRKXZj z5D-P~Rbp0j?JwR6-!7$PTD1kUvg-~yHiL$PyPi2#8rDoX>p%|Hvsz#jEJh9PVPU6}RxAr&X6hUu=t-af*skW}X0?YtH`zug&)IfC;ne({frMS2$P(k{M8t0-U z7NW`VDIsMmj)p?YxJNj`$uEUy=aTaI;e`#;w?q|k?1_9UY^#zYRsPD2hT zBPeYd%o<#N2z^WnCje|#*3|!zLw^{;1s_ZMM`kZ639;2(x}=0A0(mynVakEB3+uY~ z3tZTq5(ucP0%!X<2_2=rH~6#H4pIUKaVJ=(PkD&4*XTgU{*9ALyjT?FOUoi5g>T&M#mSHG#=3?vAsx8CcRG>H7oQ@Tf5TDNX($+S(ycspqVjlbQy zPmo7_AazbtS7D;~LA+4VZ+V`KDom#3ab00DY!P(fLnqh5pJwN(fT|dapS1Gn#@j#( z|1y9b7GL=5Wq1vd0X>e!w!tTLkiW@dY_mlLlvaVHo#OHuGNizE%96iT6-J?_(O5nh zT7WW(?$VfauvTVzMKWPSBh(d|7AmK$k}UqWHuY`pDye=(S||_E#$0$?kv61$pH}|6 zstxfZs4kh3__d+=D}uG5xM8#B(Q1kXJDqIPCSuFeG~2ZF>C+Zs@8leNX6CHfws!t? z9m1~CL_@Plq(z-O6Qo6@WCI<0zVT~OQa@38_wFh&#dA#XW4g^oAxZ@O#r)f^eTfWQ z|B^Qz35|>{^Tk3uf~{*pO>6kF6cxkSOp&Q&Q_q_{4QgE=bsf2&aphW$Hkj-Y*`6Tf z?a659R-WhjvUc!LElei63IdsL`#n6pFqun9KcgvZ$JINKmP(++tX6g4T%*)of`0FL zVFx}zU_i$D6CTG0tQ$IBAgi}46|+OEPCy?S6z(2?bF%DpJxL`blQUq?g))+;Ixg5v zg|smWynMI~w`*%uE_Gq41jIl^;juZ;^5EFaEI9nfS6GJ`_LE5wh-+9I9+ z3U94wkv8o<%(8`LqA=ffWFtFi(iP@`DH3_(l)TuF0738&V74K@cNWs@p~ZrA^w0H2 ziG!P3T^tMENANXxGLN7%*;gti(aZJ!ha|F_G$e9>W=Zh>tB^)*@Bu;#i=?kBRDznr zNt8e;W0XRoPa%AOi9V_>{@+l@p^|9neOMvNlc;qYUiSZpLjS^~?B7v{_P0qYzf?@3 zvJ}#GR>*|iL`hI7k{ju%uW;G|Q)GXi?m8qQ-{Cn5&yg7R4%wRd-#HB33he(MYu^GF zRq@5YyRdc#Sr-))1qBrp-)KI-Cq7WiGV)QTqM~M6rld=esfz;Twvv?E*h|4z*3T4w zso)zQ2|g-P(W5@3NxR@ALovt!3^#cjnBQnKNh3oH;XdHT|Te zUdG#0$M#J63;nMy4DicDzrlEVg<5FDKpI-liN|1i^rMCZ8y8|UOg-#BHvW)(nP?}6 zYo9jn^HdcJyofqgg(IrvRpv-2iK!wR^tBYiJzyYpyCm@_&LsLAJ&>}QM1yWTkL-ah zrw?H2WA;Q8T8${68qwn_A_EXr%jGT^7(-x~1f_!8VM{tq{TtOOOJ$^PoXB`1nDjey z+AYB4-wmWDs7f9OPTFRs8dVD+8c@@bz=7@wdm#TLL{bwg`$#S_h&bPLp|6E-+CsMLQ1W1bVcix7{F z@wB;0QI6Wk!r28tMZNIGQ>InnLA7x`>|t^-hNVtbB*xQRB8!4`Hn}2;BWf@AVSD;cS_dzWC2!G5`a_s|Xse{@arUNGq45+dX4Fngw?^3QO z5L%_`Xag0`(*_%?8erwBA7DsEquQ(mmT~fR+yHQUX|$_b6DWNEMXkyk7T>~| zEmQ*vlSX(lsTB$?G?k3FKzmG}GFi9j$$%&nFmy|d2g1uF9+s=X=pQWY>^?9R_(vCm zLvPykwqwZn09IceN!RT@_8?oKVlPNNEJ2EA3<j`L3X14Ou)NS(g>VzN90Yrq41akC+Dp`~N$p~;N8&0+5Pr8>~?53GrQgurk8zsn#31{t?K2CD`N*=X}If=)p( z-bl@fx5xQD%*_C;1UCb#r=NkZ>Sy4q`57oHxALyvglUNS9*sx$8C%fYa55;mUpIEw zfCp(wW=e0R^a>+G5|^a-tBwSfSdvh4d-6BlZ@tv4yJ9$NNU1s^Rkd1@kcR1^NUbK$ zs!sez1^-|@E)o0wC%$vN6c%#+C$!=b>Z37YC9*HxVXLzpf+UnDUFLV!<0@d=O&+sB zYEpZ`OV7VPVe0HzFHe}npWh(0;TQX`hP8-K&tKuIH%QGM@xxNI{L>*`utAz>c+1SY ze=2n|d|QXl`V`K>tLyO92)$=vZ01`FB>%_J&oDs4Y<5>JISEcbLWP0HTUDo%u(A5u z>vzgeo$IH!)PpJ-4xXWO^@F z%BDXWkB3!T7^-<3HI=v#dzSZMNO*WY*82Z{^3ilovFuN#;4CP}!W2xaYp)1W1<_!0 zVFey+9})(^W4+%DOdwA)a9BoSSPe5U>D1RCU#m^Mu=IwxExn~4mfqxY#YVd5K}k-v zL6%-?Qi!U?Q)SAn$Y_H`Us^4|DZfY+(dobKH;_aMLR=1_n2rU$vsGwC;Oh%~)ji^s z1?Ulk*KyvePCSU$2uwZ$_gioA(pZB5y7c<43Y8?As{spQ50y%1ZfKwfHrB+T>m(ZVgzXA5GKw26Us#3{5> zETnPUp2#huKP_9fq~6lZ-XFAL)+~s{mClk%?{{u%{Z1NPTwi*QMXIQJQnL38>>2B8 zxz97$-cJmW{rr*w3;GF@OU84ORzY4EJCnTO4t&zy&ljRzvBJz$^%`o8U$Mmy#dVcD zBtsa#Nc*&y@`xr?Bxa&6$P@`2@^`RBB7<_Y08ZSq)Ea`Scb$YGMuIbPFu9_TC-Snb z^ZmJTvt-s!;C|bswmfDtHW3NCWWPt$cG6(Eo2AEwO_(}8IVo{M!cUrD1xbqp8QmSx~}WCOd2}>#9!VbHF-MoLx`fyyD9)kRb3puBJ_=g8!6b`Pj)!(VS5Yz0ftZPT)VkN>MR{L zlFZTRd1Q_hC8cR^i8)f+u{ynKngrC%9%2rrtQTwFr$6{zGfj#p=vjj(O0{Y7b$&BP ziZFkJ*(=tR$)Qn{yZu(FVXx8H5iDG#XiE5qDkaf=yU0n@HpdU*Hk%$bkqSG6=4p`m z{#Gdj{!kAfwK^{S-y?lMXcECfXi_`AB8U;hc?eB^w3LU;v|{ayK%PR=KO@oqAwqLM z=9TveP5*}q%^}5qCp6(?NCbj3O=ez7u|jCRg#|CLxI6(Fs6B(alTJnS_d>H8p(Zq` z`sMB_J~QxDH*LSyRH3=i;UP2mcV9})A8GWXmkx7Ce&k%Jy%^z7%=kLg4wo5ka!+N-<;_uP3;~=V0`!Ry2 z$vco7{S`$Vof0CP4yp5&^%tsH((UMkG=6Y`meaQ1BHL;lo?X}R(6wgYE>g)~iWs7A zAHoTGP} zoky`YwZr5EBvWnal?3|wKUGzDzC+Jlu;MkCBfFNDp@wjzw4R}2wZN8ov93M4dg>rL>z@@*cr z3#Xs#t^z4^j=D_Sq|?dRoIR2Dp@_@d;CiO*7|KYG5NO3;VwDb8kpQaonZrsr^MGO( zF{hmcO1bZq>gn8%Sg=f8;193D&+rLI6{FY^al2?kkBH}BxpA*CH0OD{q~`6wXvAk3 z=~NUjslV7A0qzBpC|g*H)~YKF>$vZ3sY$nsW#GD{qKgV!zcT9ChYh47F7?bU(e zie)7VcKSf2y2;~qO9A@seClqnTfx`-t=&?~W~;wJYc&ATP~x8jC5x$OyJl+s^%eR2 zo88j;^`mI1bpY)E@*!!~8n#vb+8*g?;WbYJZ5}q9qF(vgJyItFLZ7`-NQ*HrGbqX% zEEV2LwIl8fB`$Q}mHxbBkJLo}9Di}I6t17aGxti(n$94bp6!S^?GlJlyy6;wG-2@D zGJ}7+S8706{DioZs3|it18X5-3jGCzel+K>8#3VF8Uu=xZeT|J8^$d-o7)C?W7AA8 zT4#PlkYmrGy(Jl$^cVAp0QZ>|c7uJiH&CRX<1g-$nwyBGn-+=qA$$h^V4u{crwx;r zU8M1#>LB~>pYwoTI2!5XslUPZIPbq->SH)@j4#@ceWgo} z@%{TzedCVt>-(jFh6cxYRK65tC^^b!=i~kTqdYGk@t--$EAw$f%Er;W!2zk2!F-hW zJs=G>94X|B4@jd8GYa{|1DM41D&+MJBL3Y1KK!86wG+*=eO061{JV04ogfJ2IkC-u zICgPZYC$K#KXt+7{YpOcnAFtzY9-1^A5hM6d##?a6-kfmBK_EPG9!7SVltQUDt}Rm z9??s2i+I`zMsJWhm-@s;d?W*I|AF>e1u_1lN7?(N7N|*6DCumEq}{N2-d+onT+*h% zXHkc61akC28fGk=hFE+AyE=!0sR`XcB-aVN;z3!?`{*kYSI$<5gJK2P8`%3t;t-pY zmY=~3!uQ!#Zg1fFRp}pZAX>&4(Pu67n~7&mUv)^l!?^TWU7nh_?VIm59Zj6(Mpb8<%u3~!$iHolv@W*#vVN7 zrdw7zJ1Dn;rlY7PI1emcp$+Ta_F6cIpq4Ghqpmg5P`I1tstdOZWVt>RRRHs!Moy4? z(j(6Mh@;du4q{f;23$X?22(l|(Ak*kPP0dnd$KSGl8k6a%tS1A{BJX2j3gSR!?vF+pqYRLMcQ+ z@d2fxQQNi9%~Pcs{&}1D^+H?#C2TsFcB)N9&G|i6A~brg*u7|YqK-_(e!P%+o2$r! z4^*oxB|L$I55brIAU>cI`0khrJQ4CNn<0SN=hLc-oKi|cDaeY)P&AjAev@1xx!M;f zu@c*no@ud6Bli%b3D%d;OkTG6kkrBh7*kVhvFruX5nUNrz$+Z+cf zLk`@j*ZQEXA|u#m*QqBb`PrYWz=sNaP~si9Q>*ns{dcX8CpU(YNwYrGvc{x1gu2Rh z(6w-v1^GE&L-$h_VVAwo*KCzne1DgYBa#5dn!0B?I$vCwPFDBUY9}A6GTVL>=^w^3 zQl{mRYgJF3J`deD~`8zikiD5D@a`V-QcLJQ%Uyc!&-u@m)1;hgjN2I`HW z)=E?@%3oiDM}4YRq>DNxu9MKoNn;<@F=vrV(1+?iTtU&A)&!Co6+j!obXv{ExdG@N z(qjb;CpJ_?(ojdMn?f$T#gee~ey6bOEv08fP!HPu7w_|()U@}xuaUWjPYqq->pJpK z^A08Z*aO8x1%-DGlt-R*R0`!2k4nA`LBA^)(V+s!+ybb@Y&l}=D{h&n+pz09|KBQ>Z`x4qgjNhnai z2E(7}&mG@Lo&45r1g3-b7#QSmg=amKul|0B#6eu5!V>QQ;>(2;wsze z-%9>gFq-c^JP= zIs@VazgC_SDB1~r4R-UZK<7*7h+mxpUjkQZy~_0ikc$XcK@eDW*uz+sSnY&@yeU0r zp5il$q~X?a7u7y4B3}3LRcDUow2|VHv8cI+Q0vo}wq!_f$PeUXqqg zG4f#T(Mn!oe^fXNH3^?JwmetXi%A=h2y@X z77lCjHu@_qz9BdKQxrFKsOVeFm!8DL$hVjuJV_HK2REFO`Wb8v9(zh^(O}zfZBRPq z&^ltAL!D$f_(2+#zCFvUPSMJi8qPYa;Ouplzjs<1=ywymt(B~9>OBL$avEA$t1{m3 zduejRHF0VV)LqGLPX>b0v;5ufrHl?o6d`+7k>L&HZz^%+UG)hiLXCpglo$2$HO2gi zGg6y2m@#^YBpGDOa~_&3lV_cg+J#R<42($5`vey(GMD4?D#$_`a07pN!hR`4+LQ$k zL9cQb4?HVHNb|I}A!nr)W6Nnp7-ZPc1r=?;tt6wa3v}A|=?{L_jLRYl+Hep>aT}Lc z4&z6Vo#CAvUU61hXH87~Q*W6>e@4=uLG&kz{QMdLcTc^;HhCs|OU+5Si) zBGn}4sA7bglgt5hwX+XX5W1~RcglfJBEX@`gwz6{Oo!%@5tA7)w(B6p5*C2 zNGl8%JMiFhQjo84D@>DcGCM*Ca}GEswWqr;XP=XrOVf5>s)I9k`N!v^Xafd?v-A~V ztrDqsOieF>JQ-%rc1^R;=f(&r2-~ zIcxZ^^HNaI!g>kHeqmqQIGR*xP9t3wg~(dS)6U}@>H%x`?(*IEtq*4V2XS+`)F@*4-8;CCjuPlydyW`0 z=^-x@rv0^9ctl!YDcs;%&Ff#3+WYUx5j6#2 zml0o%TJV;4}I0inf1`7v-lW)wKn_>cvDAgU=n34RG!PbZ-aP8N*@ zBeF-8d!JIOyb(gJ%H=2j%bWd(V|{TrcixXu^!t~f5a2Ldtoh&{EJ5=5DqPC8Hy>HT zDE5q;^|M}QUqP=nKW$4?QXL_?wWSeqRZv=7cyntlUZiG!ow5g?i>~oo4!XtxqLPjX z%Sfj!5q#ApY?{O}{+3Ia!+p1g>L?iNv1IJ)jaYQOOu8Y{d^6y_zZsgZBo|K>|Yn0_>t%_^g z)9D0H=M9jll~O=F>zN8l1teLC)rCh+i|VEea_C$(T#~Z|W!{k&3HUBA_y)@7S*2n% zu?bwRH$6nfu&gJ9M)-v%iyR> zw%Bs#ao+HX)G`!?sw%N!Er_tKpfc^cgesN0f)wX9x^K4rve1s+e99GR1j)mlSEQ)! zey1y~Uz?xX#1k)+MZp zu1<2kfb!pGKp^M(P@0Y9uU4u;5`0fpu^AB0s<@ZUbDWZY&%mG5bB@hvX;l9M#Dcxt z8ekMlt%1p(2`c5WgjTJkE!n)v2~+S6&WHSr-S;_H_^Ur-H7fB6fB$ExrymJ2s?9l9 zj99KscJT{8V~>mm9pDM=p+W1bP@HIi_H&Q;B|WrVIUds}5-$+OFS(@dG(N3!NzYRF zmrLr>MmY`5;!=ATm7633G1rqN3UkFHlM!zJnT{?SlN51h_ zscqn59CJbkVxiPCAx$9s4|?lpQt0{>ZHid6uSrX(em}k@HPe5<_g#}()ZfiPQ0ht) zmYNGmKj-|$H7V>F?GkX6%cw1kNll!QwWii8Jo=b`H`wf{zd&%+J8u$AE*bvAC-EDM2I~6FZD4jl0=@ssN zrX_q@N$4kkzZwbCJ&Tm0^hhmc0%F#ew;-C3bk2CHkKQ2c+drgG!zU~GZ+}P)qn5u5 z5mbR%bJlx!4Qc2y)r`@4{&I)aJmw~*WE*z!#G6u}bz4WV@Q3TGUsNiD8Wv7x*t7W_ z)fG8@bk;c4oL1|fv)YNQoTccd*%d*i1jUPM&G>s&G3K=6Xn(?e5>do?ff-48wl3Ym zI-L`T0!nh*7r@0(64t&iL@eqDK59C7+j8v{Z$jqEuSE0Sx1>hasqUDjTct&LQu*80s z1dsU1NuQvT{Q)f1?EEF{0iJDNBj317ylth_(d(cr@%T!qx7S~I_@q+m()K0nE~O5H z#9nHjq8gD?MJ=E|L4B=FJ!;K6{BEVRl5LzKI)QIT{>g2rAzSX}sOW>-Re!>3tffjVEbs=M+yGKaITgZ9V?+73@ANu;{;m|z zx~9;KyQ+{k7oj|MB}h9&%!Q_C@|V;!DqHY0%3Qra(f$zHG%W7{iz|y-Zq8p)hdR66 zv@n8g`AceO9VlE+oDHhE(~~bXL^(vx8yw{9`-ki*5DTt6Xdyp)Dh)*>?$jZQrj$K^ zz}W{miLTNAsi&R@{WSKTq&M6$@xfJ6TWcaUu+Dk!8lZPuI?P5od%9HlH6Fj5Jg5CIJ#IMM#@uW0EC8FN?IWWX&0CR$Rcj3o9m z=I3Dz99y11DRh9LkT})sCNy}mAIT$@fT97T#o&`PNE2#F_2kdL(PObw;S*=X!|SjJ z`6EByy4OI*JPe=#SpRh$M!rNvGeF(>pNM~W{-^Df|2SpvTR62~(4aUS{tj#eRYf_w zJIO~3h0gU47fu=t-Q2nP$xD|Ll5`WUSSh;5Q&j&XRg(AJ94K9tyHgs&Jk zln59p)RorZkKTfRQz~!f&4OE4Q^jaOa#Cop)Hc-n#eF3t9EUx^CwjApzL)-UN9dAh zKUwPk7tE(gomIJES>n+-Vvra}q{!<^^Cu#d3o?0uH*4PgqZL$W>c<_m7Br`Iyq|w+ zBFMQe@lYdcVTiW#SR-p~*ms;K8dRjpI*FKFQJDCo;eaXe6Yfim)hVYwilui`RvkE_;`+MB zh+6|_melE7#v*Eu)MN{4k-Ttr-ZhxEB^;2(GS?bsqZ37^B(I))0 zBrB4MQYmd9;87!}%hL8oh|3n$urJj;XtD;2GXD)9D4ITEDmXV*TGv zHA{AgBM)goze=UoJc>|GTLMXy1#d4=B~+;QAk2llO-)Y5HJumHG^xq+@Z`Xgll};| zGEtRIa%k7q7jqwhVVFkXtPo*G0v^PH#`4S~=u?H|Ht*8*|c8t|ESl`R- z%h*W0mClC7@zV>h(((Vc?P-;e=rU>}91Re<)hanrSK)!b4;WgK^ z=Nw-gkaF*1@T6rBB>r6ZdD;%*xK}v~j+=tSIzd2 z0lu0AQZxc~4_wYe%r5>dWTokWfm>% z_@MNo+~#HAz9w?60uv7a06L|&{MOTVtDI2)f>+@HiwrQ@dCQ3eCQH8JkpsHL)SVsT zMic93jU{|P!rXxwuE*IHqM_1fLO41t50{V?ca+W&NBKkfl7D>@9i~8W#(W;<6AI4? z%h;4Co#h!##|;I+l%w()$)de!xI(?@V8_Hp*To*)G6qoks^yeP3Hy^N)lXjZCckQ8 z&4+JBO=PTCiJpmJU6_1>mk?wlnS#>=9H!ursE12&ceUwM68VY}8A?3*?0inC&5<#D zVjZ~ZXn7WCrTZxzrQ4;Zqh_aicLpe_ZsS=_!hyS_P|PD~@H+k=vf(a1j8i{6Lmx&c z9~2Y0FY1AC)hwy673rv)AkANX8Cg5GqCi?VRaQQ!(QRkw>|Sgaf&&w}Q?1lD=2c5Ot6OQ3e31$&wHC{=d~k1jwls8>90TR}I8HA@%wiCsWfSEJka5(GUdV|G=uBk0m? z_g@9(yW!-1y=k+hcIT9=mR$drcY{!iPabs>=XhdUu`D3^a>jNNvU2+t{1rbI*lO7j zQiRNDxJjT2UGsDclx~2x(;u&%YoN=@0|J7(cIe!`Q^(hEop@4WM_ej_r;bU}XHK2f zVe({N_k^M0)8kMuD0Fo03!O<|PX7{QWsH~ds8=i5?-drm^ur)R>|?T}(^5#rAbu%@~x4d+f*2r^^~b_Q!L z;?YPl4Y+E1U`2(b+8N8vziS8nPCZtCMBAHpVUnQbleC#iO&Ox;xH}!CqZQugUo>P9%HR=}k0tsY)6V!`2wQK=)L6vKlS`KsC?fVCZlp0u$QD(i7S-1Oh zs~PV{H8;5~@^Fp=QmViyGJiXe#T&X-aAzP3dcx0#;Wpzh6#s-bRzZV;%F3h<{^SS{ej_dO^r!}JHhpoY!YxJXZbj44uv7Yi6jK@IbF%*xD zmB%pIG5|CTplkM&f*>cke4&AM7WfKC>mx@7HtnS|=f>hrA9(%-HfGWKR6e{hi>w=k zyfX&GAu+}UNj~16FKf*D82b3|Q;pe}=2(30baYn*0$YF%1>Oe&bs0EB)Z~XZTi5c1 z{HY+;(u|kh_u!1Wpcxt^&X=bJu@+&*D|aALXqELmQrVgm0gbTItS!e=#-MR)b&L4% zAhxF7Q+9){XRJK$TROZ7tk&1gt-&m?&IDhy^%aG&X87{;!7L#hNmDD?0vd0F>wrPu z^oRJ#ci)2>do>2=dD|xJDg8qJMiZ7CO_{~%Z2^>jN>pnL9a|HDq)sEro=Op9(?|0T z+HLSluhtgwP3~HUw`wo`TEz?+E`c)3kv5(`MkEGCz)xepaGNgzm)uW7>a;Z~eQE=RkEcHG>)dRD%CEB0}8N^e{q(H0F0&uqg&-Jw7pv zwE&Byg|WWAU=jIw3<{XUL3qIddbsXr}!&3J%Y|EH2@2q+|^p6~x}&* z@APre-N`}qc}@gtYiL=YmqxILRvMG&JfVemDiGBYyx5S@-|I+!z3xbVgASt&K4TA% zqRFQkX$bSmqnNIr;lGzHzF)@dr?*I5XR%+Ekzk5RrAowiUH4EzX@4PHn&8zTEsp&& zTj!6+O4>*m8e+Vnf1nZWt=6oyei7f=nuVYo-?bKlNRu|~B|~-)f4dDEWthK!UueU6 zAyU(}Y`fvhApU(@*3y^AZ4!gOYvUI2N7}JR5us;0mShcU$`W)TEa5OhhOj<<;rI>5 zF9pBv054L*7NIPGejD-gZpIS&|HH2izWv(|>H8%NL&SgkWk-VYXk#e;CN+Sv^Se1+ zU762s!V}xGwoUN`GkMpZY>Gp3`eQL`>Cv^xZVFw*ceZEkP~t1?S#Qy>;FRH{3dB~B z5<=6del&hVU+YS#{){)gFuX?%@G_@+Q8H*5179~_ z=|yilWUZ}lLMWW4fFEB(0Dd@nu)qW=WR zyiP~fPAEhN%{wG;wRuNM=sx~Vh<|Iv`5C^um^mfq&bDHIhdD zg#+g3&f1DD>`|YAn7os)cx41{-<37(piI@w>2G7GL5XO(gckFbAFKFFn_6}dHbL^U z=*;`g^zt9Q`f*fWfi}@dKSgqf_V1h1lkh0VtRxR=T65nI4yj6+e^zIiq8yJWPx(`r zvqr)7jhcouN4iFjhRfkz{J>=IkjTmln1H*l$MqQnC#zTokkM4k36EX+NO`RRh!#t@ z)D4Rs>MHav@-mLxvAp(tIOZ4C6GZC@sDvJTSr)j3aq11n_7#e(Q=wc-KF50XH}dB5_uaTpnZiN z5%0^bAF|W6L~YZRm2Q{F1(YmCNfrZM%%(p$LxxzO^Dj3E8$sY-5L1V5$@U89KYxHh zCt_)zz@Alck`vpNs^pXvT9pW{Nb*q}UGkBE%2)TEQkrA>6X!koYW#4|=5TGnjl=&L z=B0}^1|oNJdN7cK?dT;t7=Pfb-=0DU#(-WThMr=0hfxes(WoPNdfBZir@Sm-b3+~( z%`DN2pMe>HoFlzy!kE?sy@U3>41w&;YQqxpX5bhtTk0MpC6CeAt2nNPaII~_OQTs+ zYeEauRWdjWUmc(@qZAB>r=os0rCDzgm^b0b}dVtf7O_DQvISFh!dWA zTW|5p8!|}CUK}==*QNSB9=SH&6-t0*ghnxGE7g_S+G&0xW;WdU0eA82J`&gQ&wC@rXATqGO;f+bF^91p4Y{kAd{4R3n zw5LV|Ip4$g{Tr)Gw;7QSpu`y?{PPANn`O4IE)ngiU=%- zbt%^e@sE45SYNU{VQjG7mKP@QUwX3kb=v&yO`;Llb#k4XJfaut9`W_5zp7lv0VTVd ztHO4(XYX;SjHEn!lPL(5ouQ_QgZNv$SeV~)H^|Z`Vc!I{Ag>)ai0|&jTDBQ+(_4oZ z^2qa($AkIo0hD%aBK~Ag#2;J040@k7h}Z7TCIuuDycdp4D2Uxi#1zDCifPXm^=92h ztP>e{PlX|?J&4k*XSx)n<1X!>*xJ@1#O^S-(Zt{Flz$Zdh-$eMv|v5TgSvV$^6bL~ z_y4d0G+HR*&{P-(19=S!kzadFt2hm1g z)eyK&s5HonhVYU;tZ5Ko#$Z!NT|v|aM6^IhaSNR_82PVN=_FKbDT`HsFUSf9yn^kprq=Jamp-3xn91M%H#{dDG~WQ4MtsC{XP?J}~& zz#pPCtXDR*G)&^z6dzu}+0@cFrYZfVdg4MY!9r_^4d9o&mZIB-Nj4M3S2h~k$NSov zh-41iH&*xNWZHdvCW)n=6E-HxSh*Kt##!`tit-wY<6a z0Jhz~aFcJs2%A3p1VS+QPXB2s( z!xkXoM_0#R_$Mtwz1Bd%CX$3`Nn9WA_Qqj0x}AOT$JT^C+Dw$S>r2qiZLzGYj{u$( z)m0daj!N$^@7TM1qN6AOPy7+29>7^KHZ%ti2nuW_ssKyF4DX$5sTMN4dwg)~UWWg> zwg9DZwyve>gc_f!9_}h9zvWRe&Ijwx`34G=$zL4A>X`*m!C~n)lUfVPaN&HbVT9Oj zqTK9_?Rve#-bA#R!FB|fQ7ZX<_iOYIvm1yeQ<$Wmw;<0};mXPAhqHpk+w2O&*fE%O z@v`Pbv4mXwsJ{0h{0cv6mTwWB#gFv;5`;hEN9L(p2&?d;J?sI|ETIX0)U4qM+u=td zwI{;<_|cN$vj`{PN80{WgfHVqi;=G(v_`{&v;WYekWr=Qn4=YPZ zRbMg@uEY<=-|BJ@=HZ7UvvfxheurOuJeMPs@e9E7b%b~DqmEvuCqn#i!H=#j!mjvX zuYqnT!V&ld;`t?nbMPa6v?E-GUlXdLO?cSWlkXbJn$;~w=|y-6a59oj?nF<~%e(i^Tk)c7l#B4u<*$4A;HC3oC@r)q6xDj)d-iwrITHhTc! z6w%U8u1!I5%Ln!*h>`UKi)c_I_4;i{otVnYo?u-9D0Ma^rYRYnK0&nbR!_1{endpR zrGda|4@gPn)1G9H#sMl$WV8%TKbI`^Y(kmMGglu-M;rTe*`fq=A*J_9h~^(LQb!^l zjX%MCF$;lRKz2NC(B(y@a@UhA^Z~3y@`G3t6_Px#Qo{SNP9v;wseJ4(7C~b`w1-c(EW`fn(J!{`H#a`lojbwR&l@prnr{pF^H=r zp50pR5`xN#@ujhpD0n9Z<${DYVVjZ1u!)UFweOF(Mu{k@2-Sl@(pPp|((5$GW4R}0 z7p~>Fz?*;g6niYNt50}%c<2DJI37A>#*EOHr_Y=7o6SUI>i}?Ht*ob99eR(V?*eN8%;&QJyiJ_4A2pAE|y@*3aCCR}5#&I(6Y4v{s5` ze8wUKRlU*v3tlye7pr)A?U6hZ6ENTPufl?%RYzYD%PL;*l>~~boY16LEk2#{#Zy(% zH)4^>RiIS35c#fMo{P_PTzRZjvVDgWpbuJRExax0cp+mUZnq#h&RdZay$~Jet*@Ch zIs|_$glDOlXh95J3SyXb8Z9M+s={jV6=9WyPADx*KPl+3?05Yp)D*mvRP?rNalONj zk6^3xr}&E_*<5{c?&XopSC1_${P$68hQ2g+;xjB>A8cKVe%ZUi#S%*6b5g6|%|S*p z^6xPY=f%&mo`#sm_;)X`X8ic)tafvsWU`~-f+R9mBpFL%i(E_OQLvEMaXSQjpybE+ zl+mnn;~ncYw8io3fYzS0&f*Kqay-u&%?24lALskWupkIhOMBIIvI7r!jx{#Tv1rJg z@(X;>b8K+PtWPy$3XSG85G@vCiOx=Z({rqy!EY#$8OHBD$0YqA{>T{C%CumPhO0!L z&3levJ)6Gj#^okVxoVAwdz~*I1D{jf6GU7~{R{lc7#3k#HCw}SPJWLEjb+1w`eLr~ z@LC(i7msDV3>8m!RN5HJLn>|kD;m~o@(0|194f8b=NeWwZAztm!6%MGr4>CXDh(r! zyV4fS;i1p5My5lF8aAh#%WsZjZyOxL_@a2$H!$cw7!6}9N@E>mzm>*TIP%L5l%lMc zcyT;?yvt7HSu6t-D;FOvnO~uNY%vwg|4AmrlcRJx3KPFTI4ZxySU!wDJDyE91jq4% z;|c#3oz4+^qnPj)$KD|P#fU$JH=4luKYC!Zg1uEodFZogk&q0PX7n4*`%hx+4S~b?E0b7#Uj^lD_b4|Q}yaqPO{ zqowirstK|*zOW!xh>?QWJt?CwtBx%~|H4%KGzFGOwS#8A#8>ZS4eN~|3VwuNkwU>0 z`E2f)Dd==QL!O1L*HvsB_$-&7XJH2KXL+5eXskfM9mZh#dlU_v#5K?0md#C3-Q{7mOu=ISqDvd>6=4dS1tboS)Y$`Ptl7Rz_zR&WD zQ_)y{&+@u2P-6+WtH{yY|5+aS0_z>LI;Xm^?iY#Z+%K@fhKkYDx!W~=3S3-67%r4Q zd|s=VYw|lhWEyMGqH;7w(D*`I(g|C9zAfpn(n~BOIuMSY#)dVX>dsje0P!R> zp%*>L^QW<=4UuC=05tW{TBQC9qDA_@MlCXGik9&e`7t~f=$Zk$>!dAd9UA;nQb;~o4|+7WKjrn7tdsm==FPf<}B7*KZ}1ei#5~t z<`uIbvFmT;L5Zxb{w5!s$foJ%^BlYdyo(+Ie_U|@qaAmELz$5?cts)$Z}P%Ud|Cwc zM)-o>AEhVn{0bWy6te5@*dUg#dYw~y(%R5tbb&F-0JB9U`%c{sM?A7rpiMg1_E!eeD5bYI|)Cu7{#P2 zkVe;;eCg{fLLbZXUWdT+Ln)m(e?f*FC`Ml?F)dconji&4y=JOmp$MxBu~LN>)qrQI za7PXJMipLuA3UtYn4^A>@B2_<%v0eN)A(z1Srco%(k>>*ML}4h8fJ>Hny?}jzOn|~ zp~ACjz{^$m#u{*0h36>nFw}b4ap)9i*gSxeO(c9O@Z=na$p#c2W919E-QQqC4c5Sy z6$Yu8p^zG?yc;XUdo^!HsBoPKtKpFP7NW)QDN1^8?C}KYrrR}@Rc>-(^Pm?4S1po->AUryL)7^ z`XOf~k4a(OtSL&dOheS-Emp%g5mpnHslrFsfUi{H6KlY;RQR+S@Qo@wQGvG+OzQxX zlo*o%O0HX4Tx!e_AIq*gFA(Ei7aaX^ZpcFRioxobBWlca8X*)@Qwc)XZc>%X1;n*Q z5x@@94T^~vmnej`Q>lis5~>2&VZ5utuhxL;EK0fxPk2Kh@>V}khQ#F#W6>PmGL3aG z47BiP(!k9_lo+OIYRo6paE219tpN={g(ud4k5u878t~C7Jh=vZoC=?(gc>(Hj1$!l zDK!#IQQ>J8?)Nrp$Dd1QCZBu)f~D(h;)&_3mHskcnGOkDgkn0^xh1f}v{*@OTBjme zqJ|rl&|SJr6~3tke7OqGsR3W9!nfTA4|5nlRzKw3_rYPzQsH|n{Mk3r%fgg*lcd5U z)X-N6-GsGM;eIvXkt*E32E2<353B)?QsKc$SS^8}*#krp*kSC2Cnq+*Kmr#VV=TE1 z-(oN6t(TGobD4^i&?u|nX(eUD*p(Mo9SrH12_&|P^kDtuxM_&^mtr3QS63ZGU3{)7sjp@h{u8>fCq ztdU@(3b(vYJR8ln(L30+Eg$|iyzC9IW~ASAJc-%2B7yf2%Nmm@7KWhWqt4M-D8u^O z;%umxiZT!rVn z&imV07i*yMZn~>BXt4TSS0i1h3iqx74^!b%4S0kK_pJeMr^5Y|uv#!XjQ#+TU@kUB zijN+G8B^2OdB_qrhNZ4irwDw}64tp{<$U6%(hKLyON&>T-?WLzoiHS(WBq?m#eAOp zAJ(+dV0A8L>8#EYh71t1gcdw;vrk~`;uuX?za-DYv#P8Yxs`QHCS!|iqfWclXOHF$c;9!hCnn#@r@h0P z8uF}s@jI-US(!vcsf4ZIdGE0BF5mXiC@PZ=;aR2V*nn>%1gq8@& z9kdjS%3jhU#$6qJ8gpwVd%9ENLJVR*ml~51x@+xK-%KG8CE=M1dF;EaWgnS7op=& z$k#+H{ID07yW;HSCeJ=Usu7Ge}1-3MV( zRf1#qAmYeliB^Y;akzPjY2!j(`5x=#L!ZiiE-|fK$oni~jSM*p`E$!KVa!{|7cOJj zhQsMRY&n}~NJ-~!E@vIgOVSCi*fZw{U!2YlEoaS!Y$MAc+vw!hIHz?H%U*nln;cD^#F!<3)Sz29f8 zn`YuOD4>!#jEnK&T!fOLR3{y#<>`Fr`>cBl0+;>lFe%hJyHbStcQ8rS^~LTHOzl^u z^YuVx_&A*xz0blLr3s`z5ObQ}w3BLxrY$zkOXnueJ~6$At=jM)dd-B^j^(+Wbu)bn zzXbyM3D6zRelSG5&Cjf4{U~ho0h>(Wf)8L9SZ?PXK7?HW;j|A~vVI)D@F6Bpk8+=n z*dXjAeEK8SL_dtr`iMQPpT`e;gl{AG&-85x@ANUg&E!vg%%%lje!qH_f4^m}wu%2f z37(yodF98f&9KOKgb@e!64-H6%URNZ()c2+H@8tcjUHFpz$)Zvvzv>0l^=`LdeK$6 zH&6V8J=tvk2ltumG;2>3%;Lb{Z;R(mr?3V+1I2q%Id!dHVapL!n)KaV?1))s51=j! zAU>v_6qdbeV_wWs-fbVrS<#gVb5@-yGut16AnF=nB`VM&o_9?%)|3$rE<&4N>A1@_^A?qJ?8i!}&QR!ES9 zVt%E3`W~-B7G}Q7i?dgylkr6J?sgi@SLH2uRxMqQ zY8#gqh_sm125BeIB<++_+j09ExEi?aEMKf)fqYapYs>cFw&?1T80OyOJ+oMgdZTWN z5}nh?_FE>%)=%f&Ygp*ihf?j;;Q^{A6V*f8R#V*<&;LU8p7w+WRM+QkuVF#=5#6pk z9R-2|M{#G$bexh76QR~F-g2^=ql-t0r5CW3Kjbo6p*{Co%fd_&uCzcqog>TQ$GqQK z*42=*{9#6<73~D4;7(U&9DKI5M*kK0IG#28;)A2Wr(zVan^ew3vr>DcA0_kha_+m1 zwGB76qtcnvXHd|8lK|K2RPDKe~=J4H)&iD9;7z0#)b& z$S3A~es>+z`JFs$J!{qAzJ}6FWF+mX+(9o>fu={*WYl{(l(-9zLc-DqPW6z zx1ki5wBmQ7n)Fla*&vp>%#*A17kIA?@Qd00n;`czO#ak0HYl%OsXQj?3MI(meCY-j zHdv7E?hQX6J6)MwS%^6oJ__1}Y zNpJyfkp}(?NDx?g5_frgJMJxHHPg&C%GG$7HVs4y8#B2!Hh`Azvh-a0U zYI9?5!;P$)f%Vl|mOt}3>ntt5O4bAUBObSfHPV0Nv4A!;T$I{#)p4=BwYiqdHF-U+ z{G4@SlQq`oo&UoI8V-F-3YVtTXxi2azVSaSWYqV~wB(oMqj*-Ey@(93@Ejl+vG6)r zGDTIkR+kzJKc-Pq)$d*%Rm~veWP&C`enRc~WHYN>=S~ZS!xN}Rp5$?x*fVVECmKI& z*~Gd^$v=~_K5!M^v=u8fs~%X~^JzhgdkxJC<)?6LhO*k?ln3xJU$Azp!Dd0YmHH>XV>5e}?RTr34Yr_}Pya;CyfKSsehv*WE6byuH-tW9u?qDe@Vu;uNC~C8hUZ|KQ}ZotS)j7 zc=S+_MMGzBzpZHKT39SqhLc%a(a?F9siD2s@~fMmYwOlN(9(}L)mnOKkXBl!oXQ*j z7cKoJmQWRBPyH7yeR=KQwDcQIl$PG!SVK`Je}?D(wWY7F{g;+T&eg>}4JRdcOSj^$ ze#yo&$A2|SOTT2D!t4A{(%}mZX@zo%Q}bPu0|X(gv!`}zm>-Z=!f&; zd2FEmFYdRK`S-3Y6Qd0j-HPI0ZAmxao}lQq8|QA2$KpUJb>#Q}Ym(v+5^<6g9G5U` zV)Wk0BF(POuxrpg;FSdYgn<6Fk`B#1ApgjB?PQ%b?RDFO+UtA!wE9-G*HS@@qP-5i zUwc(PRco*Raknw%16V&dr-Lss1kk#9Io8dqs;&)IHQ(aWf6{Q_lviUoS2WyuTAM(_ z#k1Nbf2-jNG^F9ytD)h3vWGR|gLbn>!38w=EInt=4V7P*n2iC4yj)py3`i zP&|y^!@5_ipupNL%0mU+T0;e0{FPd>2@j}j?a%SLYgvl`>70_ght8I=S<%^M@Pxgr zmB`ko<%MP&dLcqCw0nBN1 zHVkR)AMlX}S-7G6Oa8_|wWDu42scg2-Hq*I4{W&|4l#edq}zcyGwOEm#}BjK4Hs`G z$*hj-N%iLXk>w?GJ70B}wG3H_kBX@CU5Kgv(q6^+3lM=88cIxAI6CDp+h#!c!B?!E z&qhQpJ6K}M+0MWHiUk|;w)0=UVvXtu_+hNk{V2ZqAAzkVpW@zD7A#6kg?NLF27k$s z$DxMhYACBAWTyCDxt%8;VG+Ip?^k7q1=dYR*cEByPAb{Ro&3WBHrYRz-ZWw2Ggm4$ zhVJBb3t@u^+sUH~QFReJ`NTr@358XKtld-XkfQ7$d`~Dm;KcchuoydWCRM-@fo5L7Ge_^>9 zsD?w-@Ch}HQ^PJh`MIMgs=$k)3asX1FntW!!}lL!4W(`;V2A1*vxk=*V{wMVdwAq= z<}XQrI(p~t;ZGcA?du69E{@-3kKbl#L!2{-+mEvzz639h-Bu8LB6KhR?l@cK=Hi!5 zunC5^ef-1;_7;VszGh{H#QnKlzhOVu3ZitS@mX+Tvd3qUkC9oO#iX4UQU#ZzkN+Ot zH91Fk#`iFFA&fkOdDwP7`V0$alpKmOpl_aG?cI6qIs@}e8~)=N)}hCr`P6f9$`Vz* zGDDJ8ke>kM0E&S}csdcUt2R&IoOO;h;j1?@#$P$hT0EAlCKJ|w1=I5?s3(Rbtyk-D z#SmohD9CHI9|~m)Lp`!lh%G$}A1+aJHw=Eow3iOORtFgYN1CLGC8oS1{4oc6M%0q4 z0KF-8qrHicT3tyAL9#qrCj8k3eQK7Pyim|{4zyu#-dV^OXA7~fRPKBtgM zRVOLkIS4c>)A-MM>JKbJt4u`M_5z-q6>s9PgDzg!4j>gCGJ$%?X z7NVjJ5n|}wbF9Olm(_?*D-|QhtM6hLHQ2`VjZ#Ur_~qGD5yi1maqRNqqv`q8Y8MDG zmatwOmG8?DB^^8TwE1lLG0!m*Vh2?=rNks3Ow^7od$8Do*i@7qK2xaVoduBC1^&)2d2G<$)d0dU-TIzxH1qa+&qj zZ{`y&BTCj8zVtF{>RYuK%@JR&s9QTPv+)hq9}<_BA|ABj?&_EthOy_o82U;vyEAYAN|5&^(DC%eqk@_4HvBZ$!jc9|84GqYv^!-%Ym;Ig`HjUX+6Yzb61)iu(*xQ_Pk#M3);u_HgFskX zt?OtwQ-0);*I5UFG~qfMQH^xZb@uFi$^`Ax*SP9k-tKqS$&hnNIG*_=#c5_}zTkJZ zs%HNgHVC`kC3(qej!OM=iP6;n`z_0aP(2jafLKd1apPt_OfR;^kG6oRw7t51! z*@g6TudgmHcYQ=Lx*~3gNun5ddlvC)5o(>xuia!XS+C-Q2Q7|p0ti~R^b@pHwIEs? zMuL0NVg)VKH@2=OTIlK7kMU%zK)hn{_kLO^Mmohc-JlqFYlZlrg_7{|x7cVQ;j3)8 zM=6Pxi7Y{)-wGvhHy>Wf!u?htJw}xu;8#tBIm6$oWXl!tf~BS6*h`vC_TDNUd7Cx% zySPduz$ej<=j4vL%}fTb#H)i4eud>SgyesTb+H5F8kR!u2y>LsxL6JI zL|E;`qHM7_w)k!6L}K+0073Op$BE)Y1QGNcbNm9e>JS`6zlKV6y_gg_ ziiz(UU1~Y-o#H6eQK*)~4JT>|PUYaI@3K}_P?PY`S~^zhkEtt`6e$7=$fD4ikpR!QmQW}+{V`a3Wc&s$uq10SiOSo7U%Du6146gUZaIh~dH6~KZqh-IN zQja5LxC0fI^%rwk_gq8kmV+4)R<|w|=;$4ar$Y&iht;q|3EeIeg(|$f2KJ7Ce8o4-LRw@vUTpaI^ z-!q{HU<1VgY=VH3i6ByIWQeJ2Y=zw?+$#^^mp=2ovaU1!sNUyUuZ?*4Kg7KWT$EM! z2R<_}GTa9oR76zNK|#S4TyaMc#NAveCBaO|tV{>BTm~CPnI?>KxmaqnnU*D$3YZHn zDJ~hA6($mu^*-ZRQJN8&{J-Zu&%nsr^1i?S@BjPr;m*0|+;jJH&)x5nt!0^Bxz~Mp zppK38+H&2u-~k<*t(7WoP)^JJ%WnAcQZLrqB7-32V@r>dLizo9bouhdVr=q)EAdx% zDU|zHt3D%$<`#7gAsBO&k-SC;q+T@`1deMI4d?+XJr=M%%2Jg!oS_vC6~{>YA>`DS zOuzc_*S%RUCE>+T6G-^C-fU_B|1Ot8pj^{GX+blBOhz zAW{MWSJYM&67h+ixhyw+bC=#Z(&wvl>PxT8KdjnadS(8%!HDqu1BvFAAq^qehnFG4 z`e1>$3j-(P6kH$DfNoIfCP0tU!wm%Cpp+h@hlDhs+LtH$uqdgDqAx}>{LPo=`mo6X zM5y>04Gcf}2(aDqVQn4~sl+iqkxKYi68Jw$8Fc!eN?X?9Uw` z$6&#PLOcqA>}CR1amw8B@L;o&MnHGX zlakkGHwUm#ok7bF1h6iaU?l*5KLzSTR2ZN@ zwRPeco=Oj_qgS9}!+?owk3qICmHAT=%Fd=6FJCGbd>Asslo4E-#UAc~^Q zU&%+sQ9ic`i)O;*G*S7>O;|_WHBG^(CTxjTCwuW>%~(*&U~iUM9uAe2>YPB~g%jbj zzSN5^Y{o{h$(Zw!{<<}mA8W=!{bgdLcaAUXE4}#7%~;PSWkjOyI?#C$;j?!j>!1tp z=Jy7&$N>g~=cMlwDb5-~TLX2ZU&BE+8$B(=BNk?_GQ5z|FId|nSiiVZ$IxCIOE=Zzqp@paA`Li+;6I}o<)I&w7y(yk7@ z-H4l8u;JPhyr2ccLW(cHFPII{75efQf?1?)hcEvyn3;9?j1O$d`swyCZf?oC>vl2z zT1)mt-$F@98;%cQ90NOP#u62ls;~?&z4hgCNHmQ`^pz5Sw-sy2WY9_8E2V-9t=RoK zU3FvLyA7K=IlnPWHMhB}F9f`J1W&J*eO-R_a&U$7auVLH#xT&er#!qEj(BG3vc5!c z36@r1xzFIbwEE7i(BFsRdI1GwqJa1hZCG1L_(>Licu-sRu&$~xx3*=gbj5z$s~sEK z`ZTUMU0ivB^g=28;=s{~x&9hItQa=t$?aHJ3ks1Gi%8m;imxpr2lmb`_vg9o*dj*3 zU&QicNn;*pV*OYp;mDxexL~S@wbTyEYYL&&@4zpuLguTmP=&=RED_KWM%^At3@d_2 zO;i46C^MPL;09%Ow&EkVwkRdaX{>xY%e&<^zk?bQ&KnTi0A4tFG&4N`JqC%4j!vwU1)R%vme*|b$%A}PmzCLw~ zu4yOId{5t%Ts&%|p10gt*3FMxg&)`HY#!5vTkf?stn<}16R{pMhYw;MBQ{rIqM ztW*3IJRU+y9XnFb5FRhpXvrE?>HQ34Sr^Di6;kYK`bndXiqf zd09`Si)U8f@w$yk^(hh(9vH<&hvtFqJO!0^apjK`-9+FJupdR!_P$)$j$5Kwn@&mO z9c?Xz;AzZFYT$)#%J&$uG!i954N;$F;>V)cONOo;z@+cmfzOX-lXbV-^TW}sOG0^j z3c_Ae7M6VhR%Ev%JIOP2j?#$J2e!X1~?s!6z#=3`*?ePq$jfD4Kg(t13}6Ty|cHv1}!GqogIwFIuz)8 zu`W7YOgQh^hkXxN(5f#xsndl;7JM7SKGAEF_}(EH9#r+2S(L7_C$AmO#tVse;`GAz{eBffqG zk0!8qoli;(u)G+)KanjOK5+oUrFXv>6+b5*8~k+lrm?G<6jl<0sXu%}6{9`5Lrno` ze;(1NQK*%Kng;MkN3j!H=-ttfjog7eX*6VG%Rs(#G-M-xAeAT%5i3x?M}@B`uxdpdV1_y9V;FM?*G>feYDaUnd(-@&kFm7|4bXPZ)!;+Axr>7z5eZKz@@8t>07Lz%uSeqDuF9U~dRW*AWD zDgQ)*Xso?eI97pmIf+r}6C2P6sq`r-9UF77QGYx_Kt)CL%4MuWF%q; ze`g$Y`6~YLIMzcKHe}Oyh)CEFK5jh9`kPR`U_9%kGY#P{k7t*Cmc^o8a$>n{0!#1y z8X*Vp<9cfFyi0v!R|OW95=q97lMX|Q_0z)JL<=0oBPOyMAI)$e!NYmvJ#0~2F_2Rg zKOY-BJ><98RY8SOf}fa-v3Y-fV=|gX)CfLs3cHu!rYUHX%L?{RVfSfu5hE2P5;c-{ zp2j*^5=SD<2kO+vGN6>?i3F+JQel#S^-0cB=_w89IVwG^0XG7ku25pf zfguAw4HQZ-(KYa(D3n;(_GgUe=aN||cE4V_pLMs~p5T@icDW2a+(eZ84nZMsVG52_KtH#vP}DqW7K_lH<*R407+v)Q{=qCZ zs%k=pNA5&PcZtNs(NM(_hq)Es{5gPdi zIPN*ro_t(UF$+Pa?93#H?3h)UqQJWBEK})o8qim$^t1-_43)lsAmoVWr?NO*<|O`W zD(j%_&0Ef9gLG3S@#(YK7}FHN3^j>0M|s>^lquQu9;rdGk>TJ+XJgPlaT5P|HgrwN z6jWK|6h+tEAjEGf@>Zv7Ou+WX;KxJPj3wHfseIWS=$eVsfTT@RbWOnYyLC+lIp*T$ z&vZ>bIhK&4&^48WR!`&I=VFqYlEhz|%NEiQC1@UdP#2ZNSI%RDwTt)%^H^xmL?2|U z()A^dyFY{RYJ4TN9_*dXV?DJ79-fAIU`!H!J&kqJB_{E6Y3SHullaeR>=A+~53%4j z8@ef@^pIDm`4wX9aXCI0g?k1|j!AsuLoA$F4?M&sG*3!m_-+ZRx@stvI>e9_PNw?c-W&@A_<H=r+1&^|)TL;cUy~kHVq|S(X z#W916SVTqFIEXiSjJ48*%;Mc1V}pf<$Jkh%X%^rA7-~6iR)O;|bga59vkOd*W8SLE zn_Vz)5lh#3N6lra>nj3+`B^iR%3^-i%=%BS1~F&YJeC@$nuh?%EK?0;EnuNnFfex) z4@?uJog4~}YGFG`T&42?Xtg>b#WO{=zlO)WK2i34RBqS#^6-g&5@4NAd4veg^+I`g z68K!3@eX2bk2p(v^gQ~+x%~Td7S@H5gbf;Oq{t&Ntf0-4l{YbrzFF~gSuqWz=i2ew z5Qd4da|`+`VcooRv1xqH6KKb=4^czKtVMzPL=`R*u>M~6M3tV=fS#n%vl`GLVHB=D zrvW`prAMWadzsG}S~<*ph&OwZwYN+pB6^_=;fTdZ6=o^Ss`kKgq)N|eKu=TYxee$G zReD|n`ZATiL!nF1mda9Qei}dgBx_?aP-J|kTT4u$D#6vu1Icpx2 zC^*CllXLGMkjPWz;ZbS)gXL%>F=@PJIU8-sqwtPXc1p^35JL>u0_tqRiVZQviY#HKRdI@1Y4W;SK71uhxL0Hq z3tiA=RHV557y%p2e4y<28XG-IN ztJna;A$&Tad~ifs!L(Iul~$MbIRD(jI-@JrX0ZNa0v54U`^|gs+f_A>1Cq&5%|-o! z$A#XZvs=(NW&UZvX)f^nPN8q;8VM1(ErYcmsye#9EDK-e;jiA;2I0%~W?A?OxVv_e zTB#jPY6ZRa$b1>tf#7%7$2WEvCZ6 zyhefgd=-``uBD*>ji*BUIQGkn~KMK8kFBy#bx{Ed$XSOXM9m)^;%-o5-T9 zkF15B30cfF^1zkZH>Omp#ct?JTuV23W+F zG_)cP=gI6T8np+v0=K{ zRs7p^EVb>#RV-CGlHE#O){U>k%p6qu<+GnqiXZ3*24>BKoyENT3@!a;0V9~B!dyVe1bkz( zc&0o&kMLU;PxB2qY`q}~7~Wi5#d|!5B}{oGpZOeHr^{QxuRX`cOfbQfLd6aBD_9G@ zf->)G;Iz)ZkTo>$l=O_yFbj1~{8j=kI zu^2!+=$O9(=yAkz6oGnwSiFK8*Rwgg9V-jc*RxwXZ8?8@6MIY-yq15niG|06taYcL ztec7KN9ni{j(3y&G$h?Wf^28Xx`hEE9YXO%t>r^GcIRfUR639FM0Zt!2b`1_}z#GvXhOY6Vf~4S=&Kk~3)FXp$L3qX!&mttt}; z!7M`f>oIY(p;i5S`vzGsu%Vz54tmR`jvk*fHar>vN0FwyDU%3Ra^xm4g2FTe8Ix6J7HE#{id=XQ> zz_kV5TiAB3sRV7nbpd-D)V2%d$-mQ;oDZ0{i+_a6IYjS_}9Yw7u zO&FiDt=+~(>tb@qIgrnKiAlQNIefuO*xn)&ZaS(iyz;Z`DJ4LHxIu*gZ`b zK1a<)Ru12c#tFRV_B zg*DRw?t6uGZbRP15v|pCR#q21yYvV0+ya5%nC*K0$1AK=(_gPEK^}BqqP7N4Gp^^6 zud?jmkd5w`PmoSu3pRp1__mU& zH(lKl2q65ZqFQ1(K6_t=*X1ZP(6F3e+|KMBC?85QyF9hhk$lA-uRaz6JxFIq^d*}L zY;UkmT3y*@{>}~-isvXxcd#&4xta1%)~$Rqzq12*yFxgIa<>(_URI&z1;MB04aZqk zx_1M5l}a}>px;pGer~$R8;PY+O{|q%*jzCFO}1HU zIj|L@h=qA9wfZHNx&-ifm;#u{msx5&Od8Bfs`(9&OtV)M(*tl4%r=Gwaf zg~z_bnv1jVN$;@aE{lo2cK+Svf09<$(;;s<(liPFq50cx{ zsvEZX@dd31_8$S!xQ-4!?Jt4VX@N~;!5M=(79^CM-3dsw|86^#-mL!aDURCxG}1{s z({+zO;GzT_=WP&JDMCSD7d!&vRrxHuE;k|XA~(ckT=yEKia4Dw{Clb{Qb3vezanRP z>ZU=S$=SGWHiaNq=t;5$EZv`^9g)i#64STY2mE zSbuT-!gUfOUg)d(D_4B}du(c7@@!n^#MuK8f%7Za{yu&Y{;%(`Zoz*NF)n`Dt9jKI zzJYxF`z*BCPfFTvsA(5|pL(D5RiqFXzj*QcEV6fvNW}mY&;D9i#bLXd z=NQyP(G`D^>#+#RxNbTe_D|T#@88RU{HY-s*YzgS?k#*ZNS4Whs|k^&!Rqw+_kgHj z8Q1-Y6pO~?ydu&rQtyuIJ`u_pVo9b@j{G|dH9_OL9mGP-(78>pU`D0hRih-QieN5O zgJ<4W9<`4J#SjVQG7o^NM?7xhOcaUq&~10i3tg4ttM;*4UB(XF#Aja_G&`Zs^oE^$ zZXsJ08~_aC*R5H!>V`p3+E+Ay3*K39yO0gl=`=g};195)m$#!J^8@Tx>ELhML2M9c zb{6bE$nZ4>(@tJ;2uGKS^9!Cl%)GS*G+7MWP4DtG#Rxx)uu~VeE<=l>u~=aljn*RG zEeJV+BZIn-clp#~2){DFV9PNaVQp(7{v&iDc-x|d7Y}ZSH)DZ~0H*ry7Hs&CNmv$p zm%n_1P3V|c$WmYVN5g|ovgdtnflu!7Dc^mPHMiu@$LW_v*^_#kjr(^1vDP*+>-Q56 zruX*J`fpp|(ibsfgTgx#P+s*Zb}78W$WAm7>U@Pp;Sg;L@l8``WUu2J4w_im34V1U z=+1>`i5RkzJLN*Qp64@4Sojzb==Af-(*?yi)Od&}c(lTp`7;C>(ccx-N8kjFq7v7C z4gxQ%f{#}--sWdYpg@cFLt<_=`v7Ah57Pnmo*uZTo2Pxa%Hs`K_=gfMQctH`i@b^u zvVR8UWduSN(~sgWa3!&4-;~ z%{ozaxIa6MH!cc`QO6#*^;)p};VXaC^5th(7rnd@)`GXru(z~&`8zC8@);ko4pZ9B z!ME+6NW5LEKHe{0%Sd*<0fzeL{PCqac_S$HYx+EtX!5Z-X7}qFcv9>(eHI9sV%JQ5 z^dmN`u`v^ml4u+gV{i`$!>;D%m`QggnfC*<46Pkwu>TyJ#cI6<#s!+&7z^V3td&}P zuhFcx-eI`b{0qLkW-p~Lc;rx^NwXkAXm&JR{?7F^k>Wi_=N--PNt-v7I|KB^p|ljO zMy%7JYUPJf`u4aG=OFkO3Fb%7VLl(wgE#(|MGrd}pM`|t365L^#0_$t?zIr!$c{W~hM=I~32 z$;QVaq?Y0GFIy2-a)1cMfbTu|k$(yhyQp$_ZxmMYZG7{&Q81t8-6&-I)m~^ZIJv77 zw)+v2YJ7T0wopjve)eN>I&3HnN31uRni?Q|U)mtQ1@De@)JnAogy)yCQS+#p;tfay zGO)p0V@ICib19ANb3_*Zj6Hq}KBHN66k9Cu2b6N4heNf|Vde0YPgqE|ywCnV%oK!`Jv9))B25K5KVi=X1eHRj<&V)PqoM=x>HsO( z(zgr7f5U=wy3)7#+$$Kmfw1NZ3pVI}9M1Eup?k}Gr(pjz+TI>Kod5g-`^tZDC3*yW zfg%uJcHYS^|Hz)uU3r@){lt!w=eAXBlU8~HJXDwRv)lRMpV@c{-uMf9fjHm#g^leV zwc9WCgMfFSo{^tm!t!}IrKU&K+>L%uIyjSWA5#9ToG(f9c zm(M@aN}Y9^^7-#t$)sD9&s*!HC9|H&$1s3y=+-Ho)z?TvlFG=!vl)M*Eu$V5TB1%> z)~iWJe1OnOjc@TPowQK5;1-|lCH1(^JXrJ)cqvEGt#}E5_!M?OnUt_wsZdKJRTV+6 zVaA2HJ|f-TWj>2=X?hnJ8yrm(!b4z)O zw=`P!)DphSTMCnCjE6M%$-Rc~OWsmT%X$nWtar5OfyRQP#(f#4Lo7ASkcqPYG61Dw ztqC{UT7o6I*ltU7VQ>T(3+UK57Qe=Qx>}pC94fQkT4r2pg{RuEttr2WamT6OF>dye z{?1tb&hh^fw-I+G%A%yM^e$q3ipxR&Ps~5$vMwVx5Z=N@O85d=8WfL4b)*3OJnVlJ z!A~Ckd;J6dY`EW26F`xZ8U7@Gw!^q1IHuaG0Gq+&cto&YwIBDO{p7>D`$(;{v3!(| z)LSd@RX$R%?v?hqrYUuf2yo8A;Lx#=L?_$(`Rti-rS`3aI7fnR%_dRO7Umc5t3FaY z%W+%^|4oQjECf4!sG|i0%tI*6-EwMeG4SFT>78gFiSJPx*DZ&i?BQCwPebPP3)WlS z#_rxDoMjt{QU4Fykl3+O5zass-b1ZTnU2Hu_MWHcnEKc+ltxL�AI*ZhNeUOX(n|Z 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%0At-rUc4I94ldV8>Lpi>g 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 A2LJ#7 delta 432815 zcmb@v3tUuH_dk4Q7+{2f85I-}VNgU=R4}iIItqBp3wg^*g;DX6CS35n-FL56SjWpCkO_7 z+=@6sFmqTf2pYVo5a`MOIok??RuI~bd*WWnCT^-Y^5^t34Y_*WjU}P zB~PR#u2k?IWj8dDp^X%^Rf$^9;{Cxa)f6L`7K2QUam}a7ls02$6`^AQzv1CQ4RNSTGlHnUp&uigPEL zJr)odYIp-N5G~C@vgFCA~zn={Zu2v^@ zWWNL(lM_3Jn5&!cuR(u6Jto;H-P=kdIKHSRej-X`Ds@`V+J`0pO|bOdjZ`CbDT68( z5ZT&Nr=_}16Q_p2)TPI1OcUFfn~sa&sgpy@r6;YeYW*ph%KfAxJkap2o zZ3VNm_pLyoiX%ELwfdd@lvYMDhD1isCzMhjl*fQF(g!7`-Gt_^`jW}0fVY6SHAoG5 z4CzQ9g#l0O&r73mfUH218osJqy7^H!Cie?ZTmN>0+einNtw4J){8mkL^Q2ojLisYUCF)XI_qEyQ~ zY77G!BgPRGSCs^wQwmU_ks|I37DVfHaaN<_(ySU#klh~i&5YCVJcD>HQLMi8)W|_d zCT-h}R-p{UPW|w=drkG2dt%tcHtp1v!`b{cG3rO=vPaqsnmlVR6&c~Evlsm)SmLU9 z;@3Qh9i#eHQF6zqL1j6Y9gX+R&YD%@_|@@+lmj-nPk;<#1aBe@vKOTN^8}&dfJz;~ zy0_Keb$O0X5J#mJU(!&ASVnKW0u+Hd@UnK3#7d8DLkBq{hI4{LIKd|zze?ZzyQxX0 z=uaTH-(afN?JG?4{X*DVZNpiCKAP3Hy&7YT2{G$;WN6oAd@hb0B#!I1g)*p$GPf~1 zLXtYNKf_YAu51)eFGIqkZ1kC0gh<9yD;Nc#`$vFu)K{dnz~!x=FF8eR1|D-xa#Rc? zgh;JPmAbbX_aG9ZEo59I($e><(}Q`>pTqGqRYYr7(UeNx&Sz0M8tD&oI(yOQf@KCT zCi#dM;aI0(*TNSB5_yf`a2A|0YD)k%N=ib>e14GOt zEw!%mXc}NTk(lSsD@<~lp3NR@-_!4o-hJ85_R#^Bc%kfrZtTnU!y~yMK>(~;$Jy22 z3Jpz7Wt!;HD`+j&Kcd%+O|ulXTc>zBuQj&1zLQ|y{QdR5kS9IS^-tEg+!gxj{erEth^uE zPqfotymJAq8>z*(BDjB(#8zOiCTVW_w3?zdRC$cgIFli7ojFSa6{6#5eYj1E@edWGnTOWfm3` z6@7ELwp+_}qC9E{7nSRJ;Vcxr{tNV4OnrY6^7=m&AuWj>6F z)<&_2n%y-7jZj{;jARR>3ey}Hi!V)yaLl^ysFCSj$LT&|X;*sA(q_ohoc5q0PjlK0 zjw@wpjUted)3?{TAbSWH=S#qVpIAgEV^|bAt;Js|0ws<+r~%Lp74Lqd3S*U#fvUOe zwaEC2%s_3pZSGuiZf@ROV?mC^TCg-{o^j%|@#BT^vKDE{7rB|f z!&CZUGjFDyKH_ot7;mP%oXHW;Tn>yu=zX=)y(@x+vP>0k8)?GzFz}})*$Iw^V)!Cm zDBY9Cx<>cv5~LuKy(#@0b-op^RUWfOXXp+t#UK|$rqa_7v)bsMdXXYB42Xlmoc-{I znCa1{p?MsEuDj40_EjoDUpkZ|BoJNhEot|4W{K&p&TFVR=C5hb*2YAr8rZRz(dwju z6~BA~!?m|DTCW~X!*~mZm=*;@t+Z=l2(-UWmO^mN z{rj@KMe~e{mM*en&0Uyd&QItrKu%@(W|jJ9ZCSjB_zqgsxgf8C6hB2LY$2r~TMw=H z2&kw>LCB&pgs7vQ6-D?1fRDoeW*EsxkOhJdBORYnhLLWHmbJ@0)Ps}_Wa*EmJwr!j z0u3GNNmIF1Q?WGDuT6!qSQQwlqbXQfS{O+N)&E0GnCkqNM~0XyR`1t_RfHF-+SqPI zD)l1OrBSC46n2%*$;-<%&dptvv(%DRkn?~wr_hqMAjgumET^DwQQp#&6tHmaV$W+r zcjMf=rG=JehAvt*qm0Ken*W`8OIf$PDxy%X3Fj% zw?U=+G*B}mK1@|n6{2oy0}GAf$Ot^*#E~RW3F1g29*NR#Pr*{!SYG^agvx3c$3>MM z(U)4$L$;}0OYtZ#+a6DhyoGmWi^V*5VV1@65LkCJTbn;6?S!yxn&8L_|V@^RqUIF!qc?n%}v#i|( zL@dn{%5VASDPT_CyodhJ*;`rFCy`?da`HirLMeLhyuT&1AZKpQqGhmbS|pZoYd>1f zjg$5Nm{*69GUJVNtn=rCiI%)PW8o6mSjPF_P;)sc#)al(IX?U}FP&#xngcSs=2qPG zuqxWTG|!{Tm8@>fpt&t5UCumVN#TOroTWw#9jQZ&SxAL9AvU2o8Uh@Jg@R~;-@;(Gz`!sbT=+}QDp>*mi*yDL* zZB5i*SSfi)&HQ98%?I4zAznx@I9$0c%uwHh)?qc5=oNqY80r83i{at@+0;!y5> zY0{S@QI^Xzk`@^s|QW_^2Vlq)0Wb=@($cet>3!o5ZqvZ;8`wtZW{gp)jt2fjCwJ-gjo&)_) zqIS1VBTRj4@|Yr4nCLzT2W2Oy@V4=xny6jIPsjiqb-4VWEz4v zfS%snxN@a2fx0)vD&4>PO%@4eo0nmcI4~!*8p<%AFS;%kh1L1xH|fk6G|Bc@src@$ zH)57|#j(QRDAZX7mNr@Am0=1KTg+)~7_COaz{A`Y16E~!umKa(8D~)o{#~B))|56` zesmOq z@$Y|=ftixB#Jo7iW5r|E;~iH8uk8S%vscB^bK1_#&{}h+H#)1px^(Fx*rY>;`dAB- z?xe>14@lD{j+j1T?07apk7>KtL}@X0?PL0Lh4X5%(a>5dFAf)0r$rF#!HJ z4d&4_s=zev2=g-8+3Yowc0UJAr!75VZC5wSrk#O|2<`WYI)N`CxIdGgAq>)m?u$Mh zEemvzDoY!PKD6v}sDeky9P>KtTA{B~Zf;sl@Ms8+k~AU_66+>V;=vAd@)Kk%*?{j; z#1y3nJ7I;P2$?CaVCZ@2C3ruS_n&W8QWKP9^_1+Z)81rGpgFF{^F=-2zOWX8@|fcal{N#^DTV8IoS~Qi zlS_$EhEp=~SCQk~rYgDYaQH|EZ9OJx2g=Wn9$j;mP z6DrAv>43a>SlzUoPTjFaB`w)f26YkEe z@fdJ+!b|ty)zd6)6r3sU)1KKAY3urk5U=*O-5TL}=jwYg#sVKfo;kDk%=|_9IWxgp zO!u;K^XCe(m$Pg?3g*)@N-uPP7?=_$s@Bv?s58Z74;9R{rbL0~x)Jf7@vIjgKW?AE zz0l*nV3qCv<9yRQj==4ZpHoN^PtZEooZow)xiG6RXRZ}1+~fC!z|e`H<$pNg9J8b9Mi~La zW973{QIFbFM$_-lC-zjE<4Etc96i zpD}i*aqPtDBgT(S&l)pgV*2=uEWAw15Xu$Sabm@^1n8Y;lf`6TktkTB@J^D~Ayp^T zrExL9f|nwx5M~cMPAcrkr~bb3IM`9^{W>8|Ln1}os-(}e>GO-e+*-D%z+yG$8Vd^- zJ)DzeF*dimJTK?1pOQjz(S(X@vnt#s&#)SkV!n;(Hs?j|A~>wbw(v4T zkQw0-mIS$Zc#ZWX=Rl%KU$PAk`-)z0O0NTiZy=jSKUym!gAh#*Zxqdwv}GBMc<7|c zA>>;LgDZBDNAa|;sz0PN*9l}a^Wj+Gm^2T#$Wgc21TktJUroRx{+JL=`d3O^4OO&T z%xH9f=+OrrR(}gz8zH{{WJz-jR`A{O1j>W)jglMZ_IIBEA@OE}dIe!8 zoMso`?VChTjzILtloak2;f<11QTD2;m5m~(O)Po5MSPqgxmJ($?Nu>eui*cs5q#S~ zNKx9rX3g}Da(~+j+Xl<6U>ezCE7XrrT49CF+X|#~y%HU#xuS58x53npo7-TxrxAYl zZG<}rK0ohpuxQ|Y4rrWcT}B4;ii7~92RovL6F+)pr{Cybbp zb@zy|Q?n+Hn2?d4l{q#u18%pelkb5Jh_dD86~gF{lfu1D&Ep+ZZ*HRu?!3y&=Y7X$ zS(tNk&*Hj->x{dnV;L+_EYgZu32>Q|{tL?0Zc9Yhso@ZHqNf3sjgHu7!&68;2mgpT zn)XugEnj%jl7N$h89o)ci;?rgKyP@4(QYZ;$3h2U;yyY--kzf`4W|Nz8fdhy8_l(n zzN8vysFf5CZt*pfWtd!;CWtIlQe&?n8@^Y@QL8U4guqMlDF#NCUz+<9v@h}yqzxQP zRK%v&3 zQ_d9wHf3->ko5HcoiOwV6t6EyLy;c;h2;zB5WY~}<8IE|1Y9Db(v$UiWbJ+(+B;Y- zK!qi#N`-1t7@9bRY~Jm&{s}Goxlg59D_^-tkHA;gXxTpZ)S6Z>s6ejcjf4<&GlE`0 zSO7w$rXxW31;Z3KI{f+H|82}K%$vJ7$HGVbtoie3`0AD1f(D78X?unaa_AVXG1Uc{ zVAs}-UJmXEwWC+6YDX6dmJZj8>$JN%A}YC;^S3wn!mBbT2L~!g$z!?+->HHwyi3WT z-+csjWjovdl>dL3{ei=jy~h~xtU4q+9T%^|FThE~RDiq_MYii@E3|cfyk2P<$VO9L znq0lKBCI3x%9N!A&96(tig{gHP#?>Z{JOMI^4r&?wV7wmS%OdP@`T#7mAn)Da5wE? z!v==sWZCf5co>~KPEfi*pp6?&mv1qgWQ;iJ z6$Rm6zj1_~w`766OA5li-)=ITpmv`cuj*vGRo5!AM@wmWg*h-V`ICIf_gNM$g1$9& z%}+E!D#^(|i|ZX&QPZcazGQ?-<7NQb4)d;3n&R766baTmEY6Tqbt)7Q^+t3SLE4Gs z7ksq|*2J>+8!;2|(O|$QX%vtlt;Cc5dZ-+0`%c?Me4^KJ*pYz+91@9I$inJFRQP?f zXUTI2$OIu-F;{b!U}T4+d!|1oludct$8yQng}n^`4hJleX`rUUq+cEk6e>)21Q{!i zjZ?LX|2xCX%cf@2%r9foD6%>$8d9;i$d?Zi$O$KNj2!ZStS$2~#n`n_0CEkvf`PoUU!msWEM0OFTz`Sj$I*Svu;t0M6fV*G7zS_r#<&L^l0jg`=Z@AAEH#J#8N>N%dP9agJq`2 z=&(#Cgu8e9-AMz1jdPr|(**L^Yl!c}Uz#a_{myYR`;9;*w={gGv_ct$9i#B*#{o1- z-IigNawt*RxhF+9xKjs&y}bu{9dth{`6H@M@JH6JC8Qjh6`GocT`Fh>3Xs08fksx} zj6q&0LYPMgdkNvRtkXR@u?g7{!a_oLju2kI8R3S4z?J3-LRbj|S)DBF{T~c_ul)F$ zk?%Yg7-IXMM8>1N{tJo7z?KO`Ac_psj4cZUd6LS@Tb76&>;F56P&T^WED^UC2;&4< zAnY~(eq zpl7cKv_}%ui|5PVXlrPvP8H>YwLvy{pM!DQ#IZAs^YWIMY1;@lI=CWgF`HSkKKjc< zyV)5`t`oA1jTiumS7@5J<>={7_bR-3d=k2o&CiJ)P%BnKTLr+IM5Bbh^c*let3Rbx zcuA(sC3sRdS*u=YxvABpn#g_Sh!|t)UUqmgAw7=5*FTd0_`N(CtHw zWG`E6()yAhp?FZ9)nxh|LkpuzHYy2Xb(MI69D@}00EVJHp4`H0$}o1L!dtrgd8wh;lkHk$OX>bY z*3!OwWV@}_pX#UbOQ2%EQeh0AT8f4 zqA%G9&^|OV8b=J^0%1>e?h@LzJC_9aKhO?1E77NaKu7)61lpdXgP%-}EMMx^(RQ3i z8p<#p!+(|*=8BP7gDeH91|MZ3M3@3Xws)6jYrejxGHiW>H2tH7s4>EyqIR4?MAMWg z2qMbi`K&-buxu?0$+XDIFUYe%Q($XF+4i(}LYTID<5Y0`Vs$^%0k)*%hAFcp2`|!J zNV+8f5bdk;nBJTKt<)dicF*j{_H`L(BQGs=IQWOC&(Zu+YU}ia12j(MsDVW4%1lJh zo5N)nITcHdn2mz*G-xO-SyB7C5tqP?2=L15;Pv%

    *CBQ})c@d;f4`Ale2}OF{JN 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

    6V-+%P+75Y?v51E{n46iYcD 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%0A@1#py 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 diff --git a/src/bin/echo.exe b/src/bin/echo.exe new file mode 100644 index 0000000000000000000000000000000000000000..24314b08b41d37b3313b47045b64bd19f249578c GIT binary patch literal 24064 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 literal 0 HcmV?d00001 diff --git a/src/bin/foster.exe b/src/bin/foster.exe new file mode 100644 index 0000000000000000000000000000000000000000..8edc065716e595da50a074d9b6cf683626de7d87 GIT binary patch literal 69684 zcmeIbdt6l4xi`Lt+2BS8XH-y3Fpdc(T5>^#+pxI|!XO&aF$hS!#V7`eQ44!}$q_ST zL&~t-(YEP1={ac{YuehT?`hhm*5(RgL5)qkH8s(uBr)lxV-k!8P>K8Zebycj)8u^m zdEfs2cz?ecU3;y)*0XNkwbrwq^{llvCHL;+tQ^PjFowZ#`(V@0!=C^1;}n8NPkwPU z_d@g^r|h%L{o|B{)obdU8*0}-P`lzG=gJl9)~%PE_g6V<<#ozsx2OPvp`UsZKy zOw7o{P|}Oj=6`GQ!YL=O8RyAlyw~5Iaxww-hP%IU@+R0%72kDo40}&HnF4#_rX=Qn z&zhCh6!*&|^?5mNt|gN5ttreK4C~@XTSi%;IBq9=$l&)}JRT01XJDw-u_rCK*>)j)3Q3;K^)QgFg?) zwcfeLBz%|BL)}^4J%bdc&FE^Y)~;X4ao-yOKVV>DcYTFGH`9y}eufbUBM?R)j6fKH zFalu&!U%*B2qO?iAdJAj3V|c^>!w8;a~&yD&o!LeAaGn~(-VE95FnQh7cJ3(c9pr6 zR!e|6RE>hf62Yz!f%-jqRlPRVwsV1g3`;!a03T>N3(wA`b9kD`oe8;+-1o?>?6(A% zLv5m0kwvJVZYHjl*;Kwo)hNXNYOJ7KcFHz0HCCjE;EO6Ns+HwnWsy~la?=(HmWIn5 zDzkAi6-ro8o&2JQtMr z)cdByPjjipj)@ALb6xZfDU7;4))PpF5 z|5AjUvHE9%MVg@&32JUqf0ME8)(RiR{R!(?HnCG44e~vHX>{Tjfg)RQgfh?OR9-g_ zL0QdnfvDwb`?AID=vZiSt`eD4xO!cuU4}c&8I{j%E7^7AGY_Zo&x6rqs>Qb6HbqKS zwkA3(vfZcO2_B&I8SzaL{uoNHzZ}ymHUu^)Gl;4mjFrG#LOucQFqed03do&4V5m zqS41)dxeJ%AZUoTSJYURyK~|{_HgnTL=%j-VvHQ05myKc1+#Ib>XO9RKu#=3nkPAk zFnd?FS;Cvum`u3JwQmlHJ+3ry#CeeOa4HClO1Y*XtpdBi>rZ5oUcJL*TM9lI%{hWF{GN274N zsa4VEm?4cx8Lb!eXh6Pp@GQ3CuJrPZml@i{wR@o-!J?mGT^ zCk5_TKWpocR6d%l@=gBp)M0wiFC-rP&ZUu3p_{J*xB=uKg&$&p3;vLDJRy0nny2 zo|O`R21qz*94z#ch~OW!e1lR=YHQc>uMWAs7;+7STtK!sy`T14_ zrjo6kb6`jWs&pgHht_f(Z#fx=)6b!X2OHj_i8>H-7H@6u3D(1bm@abaj@@TqqwD=V z4)_5Ap(a89PtaB>RRf&9eH029Hy5exZUvBwAr1iiu($3+j|D+d#?tm@eJ?qo|20GPyP8HPXKuMQxfgUv)*;KZxD6rh6zl~re zXByIukRtV-34}}{uRG&8u9^yO#8ESX{uk2M`ip=jC>hIuFFvmsz=){ zMJn%4R&5$JcyHk`-Xcx)>2KVCXc$$C5QVC4#4Us?7~yKgkQuxCBx=wZc@)oRLieCS zoxI^(EOqb_p;U~a^vf&k$`;Yx5p{jY9cBY=#4kBk*`{<9lajjZ*OcvmJrw|igzGTFW4XZ8+^2;b60?3 z$v{$xO)PQLO^4I)4zxu3FO8H(7~Y-^F2>U=c+`X1_lPp-aKk0qzu9_3?Kk5l^=saX zHJs0UtMI8-BQ@EGTf!ia3RLe!i??6w+&W724kUSPqSsN|;zGN@&)%e>2=018T3!>m z$n6#6x!2%fXm$HRV4@iC3c*gTQgr`*aZs|A{4G4g4uU8#`{tYg<3B^p6O5kJ`WWpNL>2HtoL!L?t~&pzKJX>{Otv zD^PYeP&N=KJJY=x6i7(Xosy{NR_P8!7o^F>#nM>3*_$d6tdtB0-9FR7ch52%mhN0Q z{3Qea?ljXUqWgC8x$+J97Md;e&+$g^db{k}Sd)bBJB8P79&akVUwvKU{aRuE(O`F= ztf%{9a9fIg6N|ogFnW(&JAn`?fA?WHG(JEv5iQ{D>E6d8&6e);U#XUy{wr&xvHmNY z>`l**f5{g@_kXas1CH*;O^36)iGuRd{novukg{zth_T{JHL9cnmL%nJ*PX67^&h1dNBG z`g9(QolOlFn_BBrI=!bT`QUU#zgJ38^l0f1#r8%We%%5psGkB8t88XbJHetrYNi7w z()~AJ!z%h45Ya$)sl|NLA?fyB?-znJ!TuU|Oh+99-ix7XcK?>ptU5zAM`-tMyzY9E zknr~Vx*td4vdw?x0eJ*!MOmp{aIhmvD_9mBJ!)}(pk$xw83=e^rWOv>Nb~N)T;gf< zaH>3@9EffB$d9;EtWw{@$)iI=m`p)XNvV&8XnoDQka;s$?~r5AkQVKg-vcNhT%osM zAynBtfU+q18haywtmu*U#;4%`OpRno3upi~et|f}@cR{`!H7JBSe@RJx8XgQoz!-$ zzxxIFn61z1T+$zEc1iGOa+1{(JfGCoy@N&Tf#QH-(@u4-cfb$q!3;TRX^Zz{hxhNv z{DMyJ*$DVFdxOE^5Cz4NL{uRnn8w=WMzkQpoRw1aYPICt>VOc8gdGqG&fPwnEUW8`F16ISw(k?;S!~y&UA#9`!Q%iyt!J-#BWr`sh&W2YHA> zeQL+3P8qJV=xV=1KT*9sMoCXo>myMVB8iyOzJHIeqCDVj4U`?wh4Emd@&Waf(w=O{ ztrg|^V-T>ED{jhXo7KAXB&JlOq`x^n_**2Hgcol=@{d3-l_shs{eE|{Od@Fvh&*`j zup}c$sXxWpn=S$)b?HEFyGOdUx6>j;p(*YN#`d4;m6ZvMWhG znoB!?JE{TWWm zSL!cv+oPm(s-Cy{TH-gJYZ9D4QT`;c;tiSSoC5|W>eemF0W{6-F7P?Cm@!?{%TZ35n?6y zbU73)kD|5Tjn4BvEiGxWt#G``fu)3A1W3vG{py0jcLc7cP~}`Iv{~8gQ-+p$N-k+S-BH9h$dNU@i-IH7_Ts)%H?}IRpCjQ_NLcMx3`3ewF_evM zs)5=Ea+UrFIm$ne_XO=qzf~Ryrx4`v^cN^stXu!fUh4gj9iGfO?UeAbj+Y?e`S*)&katdBHkdTJ@G!m#;P4{I+oAx+&V~* zS6(9+X^Rlih}*zwidczCPVpxm@ah}O^%djHwwoAKF(hiZ3jHS^vp#OF)ysqDAT)no zUQuIp8OuWYmcn8Bmb-dAHbsi@>EBO6MM=$KnWbEf-8zBM7^%i?OQn+dJU6Ij zd708D0k@P!Vj4OmdXT-*35U8!XgY0gjDu6T5($Xz6QD&|)E&b-u&C;#o*9!0VLea+ zxz`q8Zp{74CBfcwkcB#5^>AujBA(V`<>KM`I4yN{(lIUdx6i)%U}gTYn{Mgreahs3kp>A1@J-h@22`$H1PDyd{D zdltSiY$z4{V{{b;oz0&K?%aLv_({D#4vAr@7#mFOwyuwJ=e>ok@7^9@p z`bFks`Os2>6+)j0v7<6DiINN4w0v1-WFkt6j=(LZ&a+^_^`*ZPrGGUOwADOl%1e#7 z&A@3FsW1X*0{qphneou|U;>8Onp`hRQ zDOEf~kHxXZKjtg1(4l!iERy$%15ER=eA#YNeP98~W}SG|8(UhgOu-cFpv7A!D>WLj z$&iFV2KXOV1^&#N<-!)9#pAzxvoyW&xHQ$i_jvE4Q+hlcFWC%BQ?C@&;%FXUg(j^sk-PXlXs;nlKOBcjtQP;0nO`!kowyr&@8 zM@70FB8fbe6d&t+x+qE>iXvqx^#Ui|3BrlPsu*SBV`5_;2A~zF85U3XB22%m zmH^DKbWfmHL$WHjp#ftt5!0lS9nzDbp`O4@E-;6Sj0qX=#}cVnrgT zj6Xw|8jTl+egj5TWnc;97MOA)&QHZ_50=vOFju@nEMu_5Qg-HKwNo1D$&8n;(4#l0 z)1&HT`gf2G8_v*_^ae+jL3q6cH8BJp%#2$p!46U%&_oAy9NQ(RAzlg%9RgQ3WR~13 z$EwBISc1h^+ggfmXdd0-xv{y(!WjL&+c6R7duGrIt{P2H>g#0o6M)5tdlD&N#=Jp! zWi!Ge?X-Uj;ZdaHFOO)T4it~b%l7ngDJ&i`=C_t6ry7m0Ltx5+$cxv z3VAi-t8U4xSA%mzJAeGw#b+Gm%3E$PaO2xqBxP~n}Wh6V)1vd2_n|pyEN3ycDmo9iI71MWc zWXJ&xbKq_vP{0Qsv{f$N&*N-Dc|l6@qJrdP%qz+{0c9^6P?thQD)f0+CGAa*A`7-Q zC8aUuszAYjT4z)LO`saA&}yUN1T^=xA zEGpS1oI$=3cvPDD(Pya<$^>iy6$3}nA&tT^BR}U9UbdbuhjRWStN8B}WN%6U>0oA1 zG9e9Q7!%6S-uP#DG+d@!?TzR0)S8x{kR~@kzh$xnB8&_9@7axA553Qcl2n>r6+Z11 zilQI?&@en$S!QpXZie{u*Wg9EcnVi^vBqlcuYMLOROn@QP=9e~P4@xj>SmVeE~ILD zRQU8~hhC~1S?G7+VeFlYI+-*+y#YSe4oJ_TRF*Kh8pc^}Ummi_Dg@7C8JJ{g>&H$9v?Esxc_DVlW+@#`Y`T4hw)#V` z;8luMu8+hRW$L`pdQ!8!LP?v61}sQ6cKEUqyM2Q7t)Slaw@CG`=2kI=Fkf!&169=B zgN>jb+6ek+vX;#@f@q7zu4Kt`?D(cFH?F?lP?F@}z`#csYL&-Ft?+o?z$*$I|%VBfuKGU_|D>($0vG`>x;s$Bb5ZJMxE zSjy>MuT3bItWfm!da=82^}p_im!BL^eqxWzT!PDE&8-`sem{qvPb-o|#Kt52uY0gy z!D1B=1pPy(BOyf}G{hcx+;zFqfDTSYisgD4#zLjqQR#mj{UTC*BeXG##eMUVgS^_Y zj8-^c=C0#`7~1UFM}t}vBqv&YW)5jwx1LunjjNrcTuR&&Z|)NjyKPtbKb-;TZra0Z zZ@Ba_{A$NGTsjQfq!QrTh}9PnKx2m(=rN@xg5?!;bzj|OdJAWuH<$Z#jRr9myR>8+ z+$RjqhaeUYK0zuUBkl$2Fsz?nzr7gk)2CycR|cKx2>+^N{tFE|UXawjreznm8)>vy zN2-EOa~ExdVo#}S)6MYW^#piftjOa@Dv)UBp4T;V{K)TOc$#xM^iiy7;>0wjM93@G z&qK9KgDiC!HXtJ8I{<)yp(|(`NC6SF);N}hv3vcWzP%ty21cm+uc> z*&Rf7vERnS5z5PkyhbB0VWW_QvfsEcF&4G}+t&9E^xE%mlsTzX%2nA$2XK}-_B?8D zyZ|Kjc8MhD5;{NigAwKWF6=H;(gvzvsgPEM4)|!rmcVFrUi|DPBQTHO=BV(M>MwPX ze1Y=-wxA2VUmCBrtFM1qj~9&G_Y9_fOc_oorY53>E7hy$aKHf+4hlY@SqR3~STL0> zrzER~l62SGmZR};Xb1-qy#mwS1qGWE*Yz(qwKk3gl>p4gM)$H?9!?WXv_YKT>GHLLl?6;vtR`xz}Mgs95esSQ^tu}!nf z^d@K{$9t+h0P=d4 z(A2t{WPjPhxVbX57%!YMmDUA_xZ49e5JR=;jGTrimNpz#BNVLJ{A}H!*_xrUqLIlb z`D{4Y3ZmK(N^5LT2Z&5CcF@@j*7NhBaJi~<3?yx_wS8(=-&}KuM-jE{mO_*)fPM1O zv!PoKlnmILK0<&RJ3~vD5h%N;mSd;8UoE@Xi$l3fZSuCZ%lsVWa^6O3P2Rog-Mn}= zPCnoaZrx2Up@e?*@QI){H-hgwF=ffV!mH8pG?ZY<#NZTdP8TB>3Vv$e0Ym^r6j4<2 zP&GmP4qC}B71YJNwd7*pULMDNQ79FTdxQY|k6oAl(thOw6zihBiB`->azD0S+OF_5 zc>&pW_cHO_jS=d*R_y5=LmCuOd<#BriSI}&!Bf?5^5QoI*`r)>)+M~kO8@$aPx{`P zBBA7St-O3Im25_EvUYbD3ub{YnB}H$R`PG6qOTnS>?Bc+GYUM!EuI47?X`RHI3GqZSUEw#kQAdDa%&3r3;L=%y1SZly^ z-_{kO9%O_`2er9l&MnZ2V;A`Jx|>mQ4EF;zBZfwa7)f>7$SV&Cv23`oAq9#+4pnbA zgj$*r3Cept7$R+#_}R)OXZ>j94dcWoN=d(gQzt=( z($)oz>gqkA(;*aZ|1KK3>M8NBfu%y-L<|vCyrrc7maC)Qlt(G;vEtGJ1l0Zww!B4s zM?6Jjao3SWf-LxvcuKAWQQa8j-vsm@_<=I`F~z%eFkTD`WAvYZezcxRWA{|kX^={> zrTRN~tyJ%J1T1QS1JX4+Yh{OLU=k~3fkSmDmvOXZK#Enj@1!!!F}X4CbOb7wNts z$Aq$}aUzrDO^3Ed9(!+AuumdESIPj|M;+aC zNZVows$N5ElasZ=fDhvh=NM`5 zRSXWwmoX^CPHBZ=PEBkg3&ke7>I3 z;vVtv#!lKHnQx2iM<2#vW{?H)1#ONkP%H%Ud1ckpg7}0?J@#QELwkGUN^Wm_*Encwi@WO?zVKTftjK+;oHF=e=)#bdn zT#$>w2J0q==5usDZLWpQ_&aIFPeQ3M<0pbI{sYBRjGqjf^ydpmGJx5CKCeDPgG?=P zB)wrN8Bpp6IQ!#22PSI$0A|%TgP*U>oiU&oO!Qc;F1@HFTnQ|7KvJOiOC5nqC<%GB zl834gPq9*vm$b|s!Gl{gmyDyibOc{F#a};eXf9>U19PcXxUT6I(UHBkw~=+$34&#v}=lkQz0hE0)UV>Uy!kpJS1zq0bxpt8bp5d zHCb!kAo3bG54hYvzz$6*klzHcgCV~OQV7HqhgBX3$d2oBy~geSjesSn?*`yPNc023 zA#TT{l_-WVNh`xxoDl84hVUDNFbIIdAeSRaWecx`5S}*-VXq@#4HU)?K#(>$6!9?< zQ`!k1#>$vfVoE7&4C7)A(~+}4CM66u*#Du7GFQnV_G8&r@V_UYoS4WKNTzTSV!tG$ zH=N5x-(cJm1KE^sLj2ZUVMEn(dh^#Dur3VA`UG~R!Ap{EzL#=Z# z){Ct!Gormoqeum|K>bM^n9?3I8R03lKxpV7eiQKG%&Z=$KN^q^Pzp7kK>e9O{aJ`T zuGUJo_nh|10jz8Cd3_y%(|3w38U3@}doU*M|0M2P}INJIa;? z#|=a_8Vd~dk~DU3ICE~C49c^&Cx6Z)k^9*~_^LW9QXPst%uXL30N9*;Fzzy@we2!mV)o}h@+%!nDWIo`=e_p**4CP z`Jm0NET#+(u5Ngb>rvWl+PA4p;$eGZ2K>c?(kOMJ^1)T>>*8VgJb62bTnKSgl4>eN zoVRRZVok{rcQFL+KRSOW-3Bg8vZtMP7yKvmXz!V5?@1?u1>*uGDtQawa>mif&p_tU3yUUo)L@u z_9mR>Kzp7QffJp{Xz*U7`Zjn^(Nub@>YU*{it`9c{ZS`+jD7oI(r9{5idK2K>ea;p zUao+gYIwVFLK(eNWHYvX`wEcJ9x0^lnybO|nt@oHT}VF)LaVQT5~0Mb4_3H zCa8CBfSz}J&4u9Dn%>~(n)AVtHJ=5eYI=eZHJ>gDzPjs)_p$zm1__h+(5gNft7YR z;_;ZoEa>^@O{EpapNRYX68`%rZRl}tQgX<}$&tIsR&pfvmav=bU|b+-7ddb!K9EKZ z^tC{;_AUBslJ@wM97bSKtcFAL^K5}_4xFKPef)dcWpN!>zHr!ouz$`i$L4qg4oD1; zS{lCKc#hlp0TxRYdhDT)63Ag~7yIjO^zZ0LJVTo$1V(hu;(PGY&`E_3p1}_FZJ`}R zNI1kD8?I7Wr7!Dh%x!FQ6FU?E0+|`bowoCR$dCdmu$x?=B%F9xM?>cm5Y#AI#}@O0 zLL$@tv@0>JL6$Lf6I2llg$iYx1Nf3S&6X6eI-DH$64#T*HRMsrWw+YS7`wH|!H^H_ ze1a8DR_q3NDD+5B&f%RGJ2zSb+ic(?Mu{NBGz6*A%BMIkRsU-eBA`Lv$V;~?TjCA* zR%pudo%hm0$TpJ@z045()U@Rh3v_(*%%~JuA*GR|I<@cc!HacW>US>^aOLV@G2gK< zQp}I7#RVSmu#^$}WRG2*q4vCpzQQ$pWDqm>tky|49H95ZVT2H?NNNj=PTIc=>`p5b z1Sq>q%`oi)CKWr{F4?rggQSVI+4qjIIQ&z%hD-va)5BA@kS9O}M%6JD;pxOt9Ebia zm>Apj!?_>8OKnr3meZ=vJRh%a6ST+Uo#^SENgawFkIkmGE}M0~cnPepE=#pz=_9_r z^#=EHeq&rI7Sg{*4VZFImPu8xoL4$SDKL?i#j8DNu9I+kah^ll7LR4Gh;!frbuM*; z*uHflB^Fx>-Qa*;GnCw|NUOm+z}lx%5bOJEkDIBai>%mETz3Jm4zQQ$lW~2ddm19M zk%rTVk3f+hr95K8d2}^T#KHYP1CgMvF1Jx1QZK0ONqx#E@oiVFZ6DdJn;eR0;KW4z zfTNx^KhZyEcj;4934(u@DfRnsLb*S*00FlpPKwbl<8t0_{{Y5ThLcRTrsL}C+mbbm z+p+)Bp`)}3M#+HuRv?EOLi-j0FCMJ3DQ*Kher-bV zGx6Y!t+%uVX3<`CGcL_67p7aM7x9qP1dSa~4U7(^>Z!P|gx)<}Ep{|l3fjVn0vmOK zF)Y`l6IgZH_nw&Ui`N>c$B~+Ga9u!4BDD;w0_e9YRJZnhVhrMEn9|iw(mYJj_zBGu z#P+%omNC;8@WE(h1#)DtnOPGRq=LacY4l*rz2pMCd}IlRgVfq(seveNza`Xm+3lgX!4h95)@; zz{+g3sp^H`f8*4$wI}#fEn&PFZ$IMY55}VkHILVdga;4V+q!U@@Oq2@5ajW4``(dQ zJYhElJ*YitmZPm7SIJ_vt)1~3$KoJV(!u5kiyi!wMqlv0x+?f-sS%pOFzu)<)A%ts zNjMT`!RSobMX^Jk+2W0Dj!>=Q(M?HW&&JzAv^{mPuGWAnGfE!e@n=VI(j^>cKowU4 z`vM_gO)7~+MiBl9K<~g{V=CvIbj-fg6ORSFseQ>N=lz_oG%BS!92zjqgfR3$GS#5(pv7OGz3&9%g*+f)} zQ`t?{iqHjFyLmxY9K0a=Ki`eL1$Sd__!$boNuyzf?#6C0f-%~bt3g5A@?39~|3d=iWdOu(^9b_Z9rgl^%gV}|bGz6bi$#$M^RzWpqxv1GHX zIs+3h;o&n;{-67dmj%jNVI!<dkmy^*-T>ojx< zjpgJzzHiU_IF_3%)heyYGjpE&fOe}jukOQ=+!h^XUnG zaxKXV&uOXmK=;x15&v`T>3#2eIPf6#b?Nq&1s33e^QP#sm&MLavFPV5-+2ZE!cI!Y z17YLy{CvNglTXrw(hlAJ0AJe%R^AzD`_w!L>Dx`U*E^88w)Yo^`x=LkAOE;=HMySMJjgr;Wcx1KK)y!Kv!e6T1VxXLY{e37WAEcJF5CBwWltUl2-^3JA$LWMrxHb__Cu?M3e9lYO|@W1 zpbpE;1#m2mhvDu^IhMTy-LS4Oo;pn{I|9?(7)~Mh_-;(BJJ0b`2(mq+Z1a?JjB);*PgO z68<=OKu6!9Fs}JRPeAUKosr~0eTN#Xf^8^5i-=>(ZR#;=hj?|P0DrN+wb|Eb8I?uph)_Bss0cq9qS|Su zR|JY#6taCN1o4-n5OZM)VX|RTVQz;>gh_x=3m-olDBN)twhmi|eGc|H*gdd&U|)oN z5q3Z9e%Me2?tp?qL$x_;kF|dg34{CEKQa*L6R(f2k`e*Rv_rn86IbF<4?7k%PP07jfQ@4&kK16| zU<e(Z1thIBF19DJS}` zBulv6=@^MZ1yfq0vNuaH*^8JL9S93f#(sgj#34@rp*)s_^Vy4Jp=Ft+i1NUEgCjh$ z<25VNq+6M0;UWERv*8;h`n@r%@S}Foz3>)(gVM#L;J6L`y3(B-#A!dXuA^|U{;uJq zt5tr(EuA2p!!C}`ve8cFL8Uu`KJ}2U%KfOVAj%hOV{scQR0iy|5D1W~agEGjJs-e< z0O$qqO^EpJRp?e~Ni0@pP}9>5ItP8{2Mvm4FttFiq_>UV2ck#h1Sl%yT;;t8DY^mj zD1?Yj(YPagyW88p@wQ%Xti?P{bu&V+BE>#%a12uRzZcQ__Kk=7-nP=cawHx}%jXEt zM@ZPF>8I=aC{BM6pL`(AMMNNTP$x#8!@1Ty=$IgN5BB*cZKkofJtR$Ps}eCA(l?Dt z)l>L-5l(&xefx=};t>AGnVD}(#~Kew3rsKh<58z7)b_Ry9Oa`bZ@M~^{XBG-7E6PiFqM6pl;j5wBgF`Gsi>kVO?DO-Ds(dCM5OPYPjc zP0KeekU!_+tUJ!1wTvjrJj#+B)e=R{k(jGLU$%HTNWi`H60}tu1!CyhKvUqvR{_Yc)&9zwuUfR`8db0Ve6uV3x+^W7!GgzOi z^|Sv*qrI+P#et0rKWQm4T!*q|8Jl>CpFO+pnA*0O81vw_v=-#h!bC$YYGWI^$$bYs znk>w}?p)GA^+1zFeGhk5J-pAnNVX7@D)f;vt9y2XxyGG@pr!VUSEL8jw4-oWpM`gY z@fJ=55vAm-K52SXx01bk5j>5zb}xaoi`?it2-3*t5Opd|= z?E|Y6V-g_rF5F7OD!~DW+Rd3q8cR{_jV(wtG#7nhMqP`5yXDJ^mzm27wl0}1{nA{T zL=7%Y#zVbqej?~y^p4xnHEs$mO>E}UMD7So2*x+OPhZ=EYcyQQ3NAVkOKTlh>uhNx z*4iWBo((qffmLoAEMrZC{$q^s%69WJCrr1f|ME}p0WRQ6*q4=Jl-V|+Ge4f1H8=(@ zyp|t}0C+*5=OUG^3dk{F}Hk$JhXEKn}3@TO!AP8>}TM21f~b(pOS|t zam<@Tw4pinOY#s=eYHFkioYHNOJEkl%!Mh0$%aXVxg7@c=)XW7Vn`UQ!btNenCB_& z|JUUq$13Dv%0sOyzg8ZKM-bY9h<8qdyBKBz%%B|e5AqOE{&VsWOLH)tA*tbil7~WR zA3**`U{1oEfjJ9v4(1}v2&&b;L>{8dRKtnqG?+}7x#Tn0F8?R;5N*$ZEG`whT^zx#BR#Nb_*MszU?#afSZin-B!7m2}RWYx-Dj#6Diz@JiyTzr|93q&PJ+Mo2mK7bBVkZ$z@aBq&(&~ZTG>sT>T`bJrc(Vl? z1CbO?e92uOi%k_Ap^+W>(+H`=$Ae;bQ7D~+on*)fhKwx`3OBz+XC~DBF5)t^%L$eU zHWk?VKj3v%K&M0GsyES8oe3Uj^qofB85BUpxwW(6U+s-gAsU^M<8Q=myu<9uvbgCEMHFM$fEzCzJOWPDd97f<=Pwr_kr=T8GNbi{A_&k-~wKj$&pD2 zZddn{#6q9B`?~H#x;Nmxs}U^?OrqgwoiqCq?v4Z}QCPXzlOQ1I zp`P>xfT@XCw42hP-jb+#6OdBmu4;G;?=u)w6sP-#h`>4xZQ;3>#t(IxcwE3`9ZdB) zhjp5Gv(w=FRk#GY5~?>X8w1`1|L6ED9(5Re!0QYoLp=*06v4hraMWNM;LvH}PIxP=T?FWY(B+C!c@h{J)Fk%pzhqT< z*uLW@ZQsZMHctjGozHH(z42rwGDvhtuBM++SY-u;4o z@4?=}ITn1w(_b|bUj-7Hmqyn_1f%^`(OmOVy2PuM;A{)-Y+4uKWWC@Esf-A9eJ^%^ zlmkw5ub%;FIm*5lCnaL={KCE$N3*(wQEleo)di>lt{31?1EtARALN*)y9xJ?vS?p2h4rmpy&#xsW{qDd(v1krZ%(ZcJ|!Ko=>pnlkE8vdp^US&$8zp_WT8VKF^*nu;)JZ ze3?C4+4BH<9%RoW?0J+uPqODJ_B_L$UF><5J$3dxhv%S_9k#;=gb@fM5Jn)3Kp25A z0$~Kg2!s&`BM?R)j6fKHFalu&!U%*B2qO?iAdEm5fiMDL1i}b}5eOp?Mj(tp7=bVX zVFbbmgb@fM5Juo%i~!Edn6 zm`65UD@`Q_{T#Smh9B-O8V^qNaF4)5arh5!2WO4qq9Po;*Xxa>Us^KfBVy;YOy8mr z0+*4TT;aptN^v^rlOmjOU-fB%XXF(dDA%Ij9#zqZOLt#__j zw?krXIHJoSx^?R%XVtp(@&nb*x(zE!^EGS^V# z2%i}Y9~n7@XdaT+N^7L*+Nu?+fY8bZzfAx2xP&6DS|P1KabrfVxPRUH+J^wZhT8QH z)UJ5QDOJ@zv}WD)I486Ed}aGotpkGV*F99VPC|MpYci|PSJJMieLyC{xsFw5%j+Iow|>*QT#lPnCCyz?C*`9H zY^?IF-ym;be&&0{nsuwzZ{kX->grZJP&IS?=6p`BtEzRS+_`G)TFUv_kH&fFYJ7eK zhTJ0_@NlDG$gNg;xE(OzUl@Tf0$~Kg2!s&`BM?R)j6fKHFalu&!U%*B`2PX|nR{O&|p z*ZruUr|!ldPJ%7Kj)r~aM;;b$A8d-Z9X9^57PkcUSlF4c$HBJ2j)#46mxrT-e*yaj z*b?j;VQ0fmfE^2aGi)CA7T6bo&%?0K!XAL#MR>tJ3Y*5|c$kQgv4(8Ijq(DX9DN`d zd)ln5R7V>Om7i=XKiO1o3M1?X!zf*fOST<`@}T;WAJvcQMuz;Sz>t4h=siF5UJ!cs z!KOI(g#1fGb_HxozY>P>UJFC%JOtx}*#JYB)WT3%sUAe{hoLezgzQIQQ@8>{;f*kq z4%(jWw9_AlqxW4fRNiM{D8HY=kpJ&ssC@LvU<&^;428!76vF4-`#fK1?r-&QWT>=X z{x=P~{pP zcMX9J`|&+}nC6fn{zktZker7J|H24_5eOp?Mj(tp7=bVXVFbbmgb@fM5Jn)3Kp25A z0$~Kg2!s&`BM?R)j6fKHFalu&!U%*B2qO?iAdEm5f&cpvptAv8mTUE}MDXlL)3Z3h zbKj#|9-R^j`pI8S$F3incEb<5=m-$!+2&{V9?-Y#erLDS4E~2_!&TGE6S9B%Ptxay z==XyD%^#ip(GA>(Khl4+`0LZ(wu{ABfCEPh-dXmJlUx2y%{wXoNPptgyIq$!ZpOC3 zl9?m~#hoz2Ao+*5VUI8ZVFbbmgb@fM5Jn)3Kp25A0$~Kg2>de$ObdPIk7&2XS-8|O zU%k@sjJ0s(Fl%A9!EA?l2Id8r4w#cLXJPtb_;D6)Jj|^ysW3$__rR=!X@q$iW*^KO zFdxBiu@){C=1!Pgn7J_b!c@aZFn*YwFh7F%HB2kaQJ6C@AHjSE!=vo6FgL?w!W6?S zf~kS|SO3CTTtjq}1z({1(oH_Axz<`#D#%R<5fq z!p*{&^6J$fqLfD5A7VD#ne*wN(Y{@p(Sn#-S8SrB$XU$Hmb*(JtJw zp^EdFp)2tH#SOF9tzMtcecw`yuR`Xp#TN~^{}oZTu9_vb%DZ`G)du=DBckH#gdCSh zF-z93lGn1F=iys^K;hS1QEgR~_uBUeOQl-ed#uane)BaU72NTNiZ!dM3aVGsE?i$i z-&CBrMXKVWDE)s-h!eirAD4`7y;dT#vM5jVm#E8E)UKhgMB?j#6cWPOi?0d(fYrOO zs!pn1zlHlR_GaGbpsiux|u6hvBvaCwcKm0Z}_NLxZjgIzW`UPW>C53drQcj zOK$2)`Kwmd;?gO{?YGRuR~thgWJLXM)d0lc-^5x|Ht`65>*Bh?muD4w8xZZXBG4(|1`P8VijI`Xe(zJ#& zHSHH^ZE5eOMW&BSFHE14z9{{h=|4(;KK)2~clxL4SJGV>SsBYR9?aO3@oL85j58VU zXMCO!l{qf+)=YQi+|1>fwV6$sJ2L+>^S?7+&ODU)X6BzV-^=XF9Ob^jJ=eX&{X_S2 z?%%o(x&Q1w>+W`c>YkIeAnW^C?`E}$?}+y73E4BUbFxdaw`ZTp{xtiJoH;q$b6(16 z%ekC0CATB@kGW@Zjoiq*F?mz+rsdt0mzK9AuR3o--sZgKydUO0m-nl@19@CBzQbU_ zw=7WG=HzcD2WC7uG@yP{HWPt8s(NL`e=HnlPJC#ic=Ur9Zd`hM!?sROBZrMc4{Osh?M zBJF>r{W|Tnv}0+1Nqax7FU<3h;YO#eLn=8U-+_W-fljO`h} z%4p9xl<{`PZSK3=0rz*^eeR;Hxmk;{mSwHVs>y1~+L85i)=#rqfk&KpqnIleip#|+ zajm#T^oz~nR<`WxwgN&f(S_-eW%BO&7(8Oa%G8Dd6p#{C)9=*`U; zkE1{D$>_|uEpt9fzBj8a>yKGyvfj`7ENi;x5=AjzoGsoXE*9St|0aGW_KUIEH)JPf zeyd**L5PiKCfIgrV@dAH!UxgG9Ucf9+4ceQ)1dxKkY zzvKSU&1H?qvSm54VzXvsEzZ)ip2&JK>#3|~vYyS_ll6)FY{HrCQR2wApF%(jH2CIPF_$ z-v*Am(|!dU&jG>2^sVXNN&iFo9q7eRX8Zu$>j=2lhZ!Gde33Caa|%X%W#%t4+cLW| zZ$z&ya5uW!-N)UxX5F5Zl9id2n^l-KC(D;rp0ydN{k>l}Jff7VrSx{;zo94{t_H;dE6JH=EnOGHP0 z#{6bYV)C?P8|p)~NlcxVN}W6#!8Vt}o@#4;$Cv%?4nVY*XcS-Ilj1(z%EBe{? z+$VCM%6&HX7r8IwzMOj?_ek!^T&@+EBd#a8Fu6E+Zn7_VVe+EnCCM97B!(~7Wq#jf z=RY1*L9FmEj6fKHFalu&!U%*B2qO?i;Qv+x=FOaeRiybh03m{Nv$B?~-0}dn=9b70 fuUS%8yK>1x58`{RYnQBEUx)3uJ2$MlpZk9RiHt3j literal 0 HcmV?d00001 diff --git a/src/bin/fsck.exe b/src/bin/fsck.exe index 30225ccb5f283831b5dd51c6bcffbfddd8b4ed5b..449b8fe2e870ef15d1b031b5f7c7d35c07e0eb2d 100644 GIT binary patch delta 5829 zcmZ`d30PItx_cug2nxz!Qf3ay?Ai0YHzt@93Mhu=4DybEH>XOx)q#tUctFwRfQg1> zW@+jZODjrDbGX;M*0pjhoVSKKVUm|T@8A1i*LUB$eBZzJUjIC;f9=Dz#_qctyVu=` zb~@8Ftn058>y7*1&tO;!AR66B9reNgjCY_~`~{Ejy-hdqu-=Z6Bn-Qe-w&45C|F+b zgQd*CZNOovF$k40urvg~5^4~dLt*&|G~PI2P;VLABmH4HZ77%#1WRZbEVB*fFGFBi zY`ldSEV`jIuLmp^A6UEsykUK4sAkYI|1FNP}dE$C-B6_}WJbn$8^-adNp%42`!K;vOKr$YQgaA3@Qa21M zJd&}mFXqhH7w2+;m5uADPxu(Z;~&Uh`n{FYAW`pU1DGh#(HXipB>`P5CO` zEi(T%QzW(sD|BY=%dX9B$6K(kDGeTOO6 z&yXst?$tA4FjN#4=(mMvPjHg=dXv#pAKs(~AH(q>O}j(0aogQ?Q+1K2?)SiW^Q_M3 zEV4RtJ9A8F{hXWb%;?Mlo=5G7>QDC$u$ngAO`e8c>c0WMfC9q)8nyvWo)P!R`-U@q zi_0J_Zaq2o(d!Yx$UnS0J=0|BIwC8h3<=MlhdOh2xvQC@U%O{|lJz9#S^8x(JUklT zh>F9VcshC*Ufe$<+HL9ZUALvhe^~k&y%rHZvDK~D?P9M;w~-M~8JP}(VE8E`Q%sDP znf5|wZgY;2Z+)4G^{vfp$%cl@(F0L?#H+Xi&5e8^c896gSD$pp%zdac^JvAzJJp#- zjjA~_yt4Fu=yoLU;ku0yqQ-gu9^v+R8>)(m#L%U6X#`c)z(^EE?2hxp&MmyHl$Y@xEy^QN{J1_ zccBrnql2fnnc6E99R?P*pqKp+FzQp$&e%Xa34Ilt1m53`Wda$ux3#%Cq@W|K)@ayJ zBw0gy4}ggZDR$ttt3u)M6#^{^-6n*PDbHZFt*?vg4xgwP;@4Z143j zvJKpDq{oFhJZ~C~K%LAcFRVC#clA3oXy*;Hs?{0IMiV!8HStjs>+8&DHk$alx$}aS z%lxwIpgVK-<=FS#hIm3vQ@;8UV1juQ1GC~w9I|PgynWgFk{hm`hH*ncuR^s07U6-& zYv9n}6MC27PG_#KyOGOp_Qlc6fdlXrsAizU;^F3S=C(iSbJukg8J~n-L?h!90@htO z6+A^=gWibO0-k$H525_^~$jq+<~x5Oa)&0S`?fZVLfrxlzhSkjchM7xKg^f z@`7R7txpV%{=j53XGR*tZS;IaYmWo1&p0zXyB*EeOAtzo#_i~%#7Lh+w^G9$v?(#5 zhhXl#(43_H9s{nT+N9v%2E)j?EAB*Obi^4$I7>f+(v#xw)u<>b8sCX(lEV8I{5#7G z^ck>3po>YCA*@OCa$cQ$FxS~u(PnY?+txm2iYk;-X8ZctPZ`GY;3_x9Pl}y~3%kft zo6!b$G2)Y}ee4#48DLS4^5sBvB3-+Vno5PvW?#%RcTFP_WcWHfJgWJpQQ3eyw zyj>q5TS~uYZ6>~}=O_D{*4*?fpao2WzU#d)3@Y>n9LR(`xkRRB&UYpM^J968vZ<7 zZV(vtZJ{&J0yhNJQn;xvJd;l5K*4sUN*=CObSpL4!y^FoAC%y@>b4Cgd-Q_913Msr zIYro}E9QsGl2%ij{rFu-r%zXa=C=k9VL?3lDd4c{2D!~0vb!LmUF1&bs|n?c|4H2qu`y~-fx8RX?plbgH9B|vueGQP30bv56e{)GnjbT@Yqrjy8O z)8G^q*eIBe^|s7@p+A{1K@-Ew?>epr9(m{JDad7;3STx;i4go>z+2yblE!4Nw6PG^!~lyTk*Z(zJi<0t;S`Xgd$)jI{>_DAeNe@6V64R?7|iQf3oW8Ouv=@*+`bJ@oWU#aezB@ zXms^JkA*AHE7exxv7tI7&QJutyauSj)=)n6VHbfky^&T|B%G1DFHwA2a5U(EX+H9`Fcv+Tsj3@beHz90xcB za30_aKpQ|iKo5lGIfn(f-H8JJcmN(?RMYP(D?IRmrt;OJ;bF9O)8(~;pwUsly5-Q4 z@2s1U()7>6x>v8dO7~Aa_@RQ4sL#p%-M0>bsx%QN`}c@^cTF1hJ^*}kxF)Pk!zKe5 z?-%ORu#5F+P5>=yP2o6HU2in-Ug z2JUU{3+^Cyfz!FWTyH*vkL5@4xx9m4!#DF@LZpx+FoG)N3k!t?;XUC?;Tz$ca9Ow| z^bupkvEnRoh1e?oDq18)nk>ziN~J1kqqIl*QF5LW+F3(S;5?8;#eCyjGfPh^Hsd#G`~vN zEp!S!#3+#zhl*3ha`B*uOX<>QQiPl=)AA7cg!~Wrx_n#qRr)A{l)=hqWt=ienWem} ztW$O<`<0{03FVgZNC{En)Ilnvit0o)U!AX(suk)Ab)C9d{aF1%J)xdbe^hU%_tZ|c zw-&5LXmMJiL*q478>VGz)SOFxVr!Cx;Wc%Fq zDS3oUm&eHCaxC>6>|rCxa-99*Q9t4Gue z>O-}=7667xusT#5qfOHsrP>m$Uc=HbY!4XW$(P7VayNONyhQ#&-Y5O3epEa~Q4%$U z%BN;i<&frD3Q@^OE7q_~W&V)wA0 zvZvWwYy=m_iJYCA$02Sj_Z8R1J>rraJi%*x9$(F`<(v4E{P+ANzMl{+WC%IJ6yY_Y zT398#BYY@0#AV`U@szYou2+6iFf~}MQL!v=7IsccimYtJF>QmaTH4OvtL7A!o{CLKM#`_VBpMW@kYp_Zj|4gD6qn{K9$Kq+s~ztWww2h*FeGCcDfQ_55`$C=a2 zCFWPglkLL>v0>~htmAd|Fzdtp!u8-~KAoS!7x9buPk3)3Oqd8W?GqtJl*J4&T^cTp zm+aC4m|)AKH>D4x{n7=gUBcyoa;iK`E|=HK??5QGwy7N7PLEMfw)qPBTmiK9eEmN-uQRQw92^mVaKyd$=YeI!Ym z4UsOCUX{wE#nKX~MyfO0?~0^LZPG}2raVt}$SdUr`Ca)3`KtU-4pAZ$O&Jbzae^{k zDOHv!tCU9NJ!Q9YN@-PYDi0Kw;;s6rIqD>Jx>~3ftBcj8Mh+ZmxR$C7hUvFJ`-`?* zdrNCECtsWPNWP47q$Eoiroc5w8LK`*Gd*}x=%?x4IGmXrCXq+?5W#$(1fawM)R@w1z?oY5+*kI1V zZRT#mIq=~l_&A<}VK#=J#?R-S{5BpJ0t8av;eJdPMnFl%3zLKyP?A3h3xq{NnNTIv zIE0l#y|7W(EPNpB5jJ}wD6+l5!jO*9IDktWHVeY)Z+zl6#`(ioz#5YYK#bB5AcG?ZB zs~Im~b$$_RSsPYoTwe)b`wXqu4x`whP}jBzCXi`Sj)C&tizuIY6`iI<_U9I5{u_(F zCH}>tLIcbGBG$wgu^Iuv@Xi<4AElsIgOl-Z(Y)Yvd>Q&%@auRHvWBGN79@no5ns2% zu%cs*eZiR9u`j8$74(`yx-7{@o{(64CfXj7if5xALZSobnD~MEfaccL^19Mk)FCuB z!kt$={~v}@`PtIpZpZP1P5xy~!P8zw+q-sS8Vwu6+SIQ9)2rsr-Z%f6p;2@!EBhjb zdGhLV-Ht6e`unh(l{gWrAdC6!; zSe#!OEDTfr9`-7JA2D4yDEf(AM`hF|dp9q7Y;H~{#)`n5p@s|kUf@CLc^q{nx~`(f zT}$wIR21IV|5`6Y&#Lc0JHxxEWev5#lCt^ z^UJrw(OjJ9&TGzfVkuCy_Zv;Q+tHi@dxCyP10(5xj)^9`x5zp4UgTQ55v4|*j9dmc z&v0(c1H;}f3yhd}aVDTH(b05)DQ~+S6|u%<-`oA%c{{y1&DEdYH;(hoc^)|Z2`Y?^ z!*`>1qTTpN6wu?1s4j8dL;ilxd&q+4hupY_0;9u6S$>5$U+|)PZS;-t9yRcVqh^Bo zzaBN+U}?(U-A<{NHZl4MrhxaZu$Me{GkOP8q z!CgD%acs}gW6<*WWdEq@c|4&8g1*Via@HE!%MD(x zUfH&-+*m@jS&T?LOW83rI^kuwxH}WV!vA!~jOlBK^W1mJ?&N#mnt@|4p-TyA;I1W+ zk<-2IdGd6)98EbMxEH$3)Uw`Aa_2Rb9l|T}nr?fXSK)j;8hS9~$eYB0XjWn$d^*~i zn1PQ+7ZORFL>-gz{8ON-8;(6f&ZJm;JE};U=wAg*-ryCY)}$yr5=HflObWSW8du?{ zH4418t-!C;o6&MRYK;PKK?Oad`~yvGt9}{H@7cBUI&+7`owqMnUyC;NoQp)tuRAv=FD0bUUQ z4gED)3wiw+zv-FUNYs#Q!vz$VLihyzf`+AxrM?R@LsLZ6-6p{B1wTJCrr6iGtR6^` zKGbAdjoS=crl4CX3HVDWAT`{7tf_6$7o*;(J@A_-8+eIrydh{}Y7~ADElQ2S%h1QE zakvYeg73cQPHHrsgF2?g;R;Gmiw?ej!|Q;f$?SqTdIK7nmV{TM`Dt-JM{l5vwD9nK z4Uoq<|99gobT%z1pE22{eNYT-7}+M%;=b8dMWNp8uM0B$EmO|Hdx@2Hah@}Phrm;8 z^pFfE4-al}sK;?9M_+)3q*rtr6>5mAP=E8$^>nIJoVm8ZIupfZgt(Rj8*+=&XCCw@ z^F6#*VsbVbFLIe;j2JxYmV0ncFLQHSAr1>P5A`bj1V2E)0)V|7fMF2kFW`9sMunrP zIMM8VMxE=6OsnbZ8~Mu%RpLQH{B0V-U5`OW9^MSM+qp@?53gK z4w~UbfIDI&b1(|%O=Ju(^+WaW|J4ryeX6c#LofiCrv<`C+QA(C3sllu#V4U{y(96l z=vZ&br|UK3+b7-UaWEqLq_{45Z2=Qntnki-HG%)R#n^@$Fz4v&t{Prhou`aw__PJU z{E^cK4g`Po+pxo_8{+HUka+VJ*e3qY5L@qq_{fXmd!4=7dq*2`n<3x)qWo-|e61nQ zH^lG0D6VM}mx0*b*+|(?of+#*&rD-?zIS&qrl%muroqjdW22z^?XYFzHuTgMfoGwv z#Hj91FB|?rKXo*^^K|dMJNU#uSFc4&hzIxuR7T2?Cm=9J$(VjW>}VbX@$$frLKGyE zH4UU>smYNZ;P|SVEM-S~z}~Pt1o>qy#V@1PnNxvn&05s~r)xG3+|i-Or-SU+!hv>d zBhYU^Jz?D&Xe`jfK{Zo{miXXm&6QV5LvbDrbMi2HoTG5Q=2xdX5FdwT&9dVqX#XrH zUQ&}VJFE+nyvUBZkL`yaSXf!T?^J8q)pqTUwf%~K$pK+j4wdD+~ zF9PX6&F-4J?%BR<{?dORtSObIT}}`i!MX#>%6TwU1D&ZvlPY@olZyVK=8>%i@)V%CK$T0;9~O-p-ca>CV(a1aKSZnv z6u=^5bEO4_WS|_N{}{1`Diq>Q_JK)p+mZ}DK;8sXHP9}gTA(99r-04@{ZfUh-2Fqm z=3vN-vtjwmFd1cC({5ECD0D=vUIHa~c=hm%n&@M{SWul$T<3c; zy#Lt2za>~23OWbChq5TfiN9>xFjJgVVNEKf3$aecl>ae&!tyZrrPk=efsCFTx7$y zzp&o>K7p?ZaJ@?Jr_a#Cmy z&RcngS9vGz;y3g6c#9A!^bmRpgN4yTxlk!=6ZQ*7gj2$K;fc^ml*L?ews=CkB0d#+ zNd2S&X^b>k`m?lFIwoC~TBX0p7hUpwIZ%mKmMI@AvFdB;40XBsff}Vz+A?j8c1*+I zSF10MVIyoaZ6|GaZ4}Xu7(tX0vxpN!FsYHHWA=0_%g?Zy&p0o#F}%)1WqZwY@9ZVC;8zZfa@5&Mh9 zVzqcn%#b!oesY)`EvL(Sgej-OGsS2kkibKg&Mk((oE0rzEC(2&symDQ^ z)c`d@?V%>9nd)G*Kpmr&sI%2~RFAq&{Yc%b9#D^|XVst7o9ZJK)BLmmEySh8X}vT; z6E#g6rWI(#+6=8iTcK^yc7yllw4b#H8q|yp!^XkX!4_)!(6*7>NhZpDWLj3`OnHU; zfxK1zO#V_n3P#q;_vDANkKzY0O;E-vQQ`Bgd0fWG#7!{D%B*vVnX;TBr~zl2WNmDw`S&!JbG>gD`(Z zeM8-*TB!*7B;Ag>}@gCX1QO%wpbUJWL!*vjf;y*h035UB6>Ck1$G{BrXtl zNt5K6%9qMj<&jdNVmTNlLw(Q$PsoIw$Rhd^gNYnsGC70%j{J$NqSjHns4u7^VCqdU z_5syIwNPE?Fglt}pwnm5T+ZG$fPnF<6vF| zuNE__n61nXW;b(?xyaNrO-x7D#wzR}_7Cg?wvt`PUSoe}L%0}D;&R~bOyuT(kIT8W zTr}T{FXJotCH!*!bN(rx4vxJcR0*7@y2Na8iufn-9kEJWEv^?o6iZI#Zz2qx*l!N3Ra*~`OQ?eju$%ExJ>c{F%^`!c(dRe`p zHma>^kd_D;W}vq0S~gVH6m5<+52|ai_E&9_rW+|QbYa*|m>1jTknfU<;WB+h9w3j9 zC&_c>o4dtBNB*@-7;M*#0Be$D7$bHLw4{5y0{mS|A zo%v`!gQs{0pUs!>r}#!OQyM81NmHfyaPwD6-$)mwtJ2TXUFng8$?v-4_vDrGTC;vn z$lpT!{w6gvipFcJwYwTN1;Z|Z!J17W`;*z!*VF~7p8AdQ zp+o3cnu25wr%PxTT}7{;8N0#nWGV-7LrnH$VK#`TbC zW?p4qXFp_bv)^#Pa8Z0B^tXZh2!1tR&o}d;kT0wje8ea*NlcVdBv$G#4U>jTlcd?w zB59p;KsqN~gH913C(EPdIdU1ea$3GD`zoPIq+(ODlmg{#WwEkc*{bYUPAlgWKQ##Y z!$9Z_i_{-n>J@d9wof~&Ju>n!53V0nv%js2Eyfm3yiWX)mXehp_sSKeUinQSRaxz;_EQI`<6LU7`UAw^sTu&CkcA#NMw_g;wDnrG_Jwvz`%$~0 z-PW2ltP;a=ATs@Jg|6WL4-fzDPuq@pC?d%cu5j%=oz@3D9aGPu4 z+VkPi&ie3n{uTZW-pya*AMn9K1iX`pLMo($6=dNhNXg5>FkysCC=`l>5@D(^Q+Qig zAS{AMbcL`+_(0eqY!`OHb6O`Hg>0RLTwNA!2)E#&dMGqQL0ZHBF;wg>#)@;Hb8Hl6 zNQb49&>J2~xa=nnl3j8~B~IC`d;tM(r*>9@)ieltuDVj)sD7&MQ?WBpYuMiS{`il6 qD{^p4g7F)rJ=9>PSTKF|go0^P#}*V#n_fDh1g5cX^qw+q4E8^6)vd<> diff --git a/src/bin/hfmdump.exe b/src/bin/hfmdump.exe index 0931428d9f9407fedea82810c9989faa6d56820a..35af075658ed9c08ebc0e2838e8920bb0f708f45 100644 GIT binary patch delta 17829 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 delta 13075 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 PlMH-QZCi)wS?&J@mYFaF diff --git a/src/bin/hfmtool.exe b/src/bin/hfmtool.exe index eeb09e3ed608cd4ab10c38d2a52d69845e70fc95..d1a60198eaada04b5ee32540fe74d1083274a335 100644 GIT binary patch delta 32594 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 VLH^Rv{M@{y1qF*nEzX$}_&;@QgXRDL delta 26761 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

    rf?tWvX?>jK2RD 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 delta 12349 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 JI!TuBzW|^@54r#V diff --git a/src/bin/ihex2bin.exe b/src/bin/ihex2bin.exe index c29e1e586af61651bfaad495cf226eb8f29ed495..58ccace3f451d0c3a101d512b6f7e2ab7727ce12 100644 GIT binary patch delta 163 zcmZ2~fMweOmI)tNf-_z0H-4Eb$!M~9lGIW*AZ4M*t-v^CvWueykgRo#XPmP6u4AeN zqse6Fs(v8na+RSeFGw2$5HJC;*=E5F;sHz!N>jBMXaC{NX5jAL?8n%c#<3YE9rfr;^iEEh-< OBT$30)pSV(Mp*#oeklO} diff --git a/src/bin/lib-z80.exe b/src/bin/lib-z80.exe new file mode 100644 index 0000000000000000000000000000000000000000..25a6c002fc4df2cd5edd9b1355410ae3e38c6bec GIT binary patch literal 77885 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 literal 0 HcmV?d00001 diff --git a/src/bin/link-z80.exe b/src/bin/link-z80.exe index 1462ae12c38edc6d3309792451e92e195b3cdba4..45dd95134b46e7f9d5ed55fc52f3960cc2d7fd18 100644 GIT binary patch delta 42752 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 diff --git a/src/bin/ln.exe b/src/bin/ln.exe new file mode 100644 index 0000000000000000000000000000000000000000..164ee4221ef085c2ab6ab2814e08e78014e48daa GIT binary patch literal 60416 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

    h|GM95RMW>&mKkgP$K9w@^nbHL{1jDXYq=-&#Iy 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 literal 188416 zcmeFae|*!`y+8g=`)(U(+5`v?ut?OX)dCiSTAHGvkhc72$q$m~q*OOyu{z~K-hfK6 zEQ#{YF}vJ5-BqvK?A6_|%}w0A4nK3)(%J(40(4jhB8qbd1G7pkMGN^pU+0~qMcuu3 z_mA&i@}S8(=f~@u^E$8dILm- zV(HmYuU@cSxA@fymWFO!V_miS&hM_i`Fqyy+Um9{n8O|NQ3DM?Vtf z{&+Mh@}E089pBztzZ0UmU+$^fB}t2QvUJHu@^zWKBa%^9sLPk6@*GKO*HX_up_3#N zo}EaeQPVU22p{w>^DPmUC=dS#U*d=OjgNGC`b*>vHsnZE;_3hP@wh8TvV2`t^m7%u z{P+IN2(MTlM&_~0Fdpgv6slH{I<1R6UMH5}kO{m+S%8Co&v zgUv|13FTI$ztd&t%L#1G2;aVjo~fABmu_<}zDN9XX0bjZ@tenQFz^iqzQMpZ82APQ z-(cVy419xuZ!qu;2EM_-HyHT;1p@&Vw&|No1AN?_I*IL#bm?RJ!_|%h;cJ8J^T_U$ zz5UbQoZ7dbDKURcD!zD3s`d0`%0;br>q?agt?N^lDW*Wkc~iC2Eb*OxkfcbLVLK_O z%RBAu%R9H=pU+P%n1a;AwmZ;7FFPy1q9t~_%_5-3P9!$WOohj=&a!TIfLHvHAn8?? zgsLU6fv~CUizV}dK0Y;_k>9ku@kRlDi-#?>=>v)RHaVDBY%{q%Ui$#QKb1(g2uxRG)^< zas$i}_+1LPr+Uw8zo_G!(p$E8d~BJ`Km*j%0L^ZX&z|D{c@_g)YO{LzhRZVp91GB9 zH-A|q$S=}(Xe?ih2GUUx#Y;S1F-(3b8jZB)0x^+6d7U?9i#;&bDT(@_LCj{-MKwI3 zH|cpcYMQ;FSMbd5_@SU-tWgh|Vqc_*m3@+^$-($+L%eY{M&A|ixmDM3ZXyz|KMr8_RJS~{l=+Xd zdQbjXe#<&#kBE~nHidjtIUx1*2?piGV)P~n|`c=SqO$e3TTrK&$Y>?mjoFu8W zGOIDD1+2z|7Mj^E;|^V<{Xk^UzU~71 z{`i)V*(s%L4=u%4EEO)En=BM0l$2==#OLbfM%$HFnrO8*rB^;nEkxlf@mGew+4!4- zKS}U+C$B*(tB`gnC}VU;!fw;i*nX;*LD5`Ve!e5EA1J8X_$ufvb!I;A+$o)hWLiSAa8 z*xQqN=e0+AQ(#E5ci8^%O0xZ6GVc$>0$MAtP;$|YxT`mIP`LoTkgKjxCNZTSe06NX z|F)N(q-6oZlylD}YpX6&7Phv$JyV(A+VbZslxq{NgKoZ$O7x*bq6Wl4>ncwyB|RGo zfB?_z6+?D(8)GNXWVd{+)Z-eY))W4|gsaONvSJ8s{tzl9>R<8j0on-sM47CQx%#|` z`WchJU-;%a?0E+zHoHZr-giR{MT8rYMl8tMcGsFxC#TFh01`8+51q;L4G% zY2Y*A*uk)ib!**RP7PsV(M_M)($9UFo+@`I4A-(A$LTebS}R5?#<)Ax4PjD=EO8yOx7&Avh9B$z z@9b#mJg0RQd~1`d3KueV??j&$ABsT8Ky zKm71bF4A8sQjX11%^(coU_YrC@+>d{2-K`trb|L@SGJ)3DA0{5P+Obg{lR zAwv}QWD0Nirv$dn<|?pM{(PpOvWzxJhz|Dr9Bq5pun^mp?RhKysf%q@UgSIRFh4Y( zND)tNJ{>3&us=IOa4fO*4db(&cpwWqd?Eh?`xL7P@SVG;pv>RHZ?$5?cmn+AT9&jM#!km1!BA*H)w`^67ciaM6)DLj&Cjq)gc*)&u0?Dxc~u7STVt75^kB> z9C=BmUTrQJ!`53OM|Fi?%vIN01on1;3eCpvF9HHco&`lf_7hWYz?8F9`gne{JzO1` z^TF?{CEdoc7vp$NY6hd}zKzIGpB%%AdjG3h66tYyZsdp%i{kkhvRvg<^zj;94YubU zz_T*BIVZ@UE|sL<%AQ&$=*Rv!&5@yLc_-EYA77%wrx6VVxw@WmAT5w6D)!$J@E1iN zWchCX%E?p;6bD{(7b|Wq_3(q=CL&|`>|J!JtT!<)y+a%gA-$M&`8<%l2Kj?TO#VSu zT(&RKq!ZZfmMbOp1^SRCD%PVh?O&i~Vo8d1c}Q&Q<2Q(^*nSM%^D9$Q(!lb2Tz$v8 zs-1~E#A2H{l@4qQXbEywmN1swLFjh?Yx>!4aD!)!nV*dWJcYR*IU>hj6#)3A`QIJ+aPmP5}#~KW5 zqXo;cn9T*k6$6{AXHqh6yT}}0@+T@{ax63{=-(h~C~uaSNA@;L&H3(TT_{Xr`Q8Me zy@qn?WDn&)hz_ly93SNb%31v&GOJ}bWqOc#J7r#-$pqGyA{Sy&CO<^^6GT2xRAN6E z+pjhbh3%}`Fwmt_EtZ|5SYE%E4 zl|&^&5M9|&H4xP@$lg``{Xm#8`Ur|@Gf`(4cuA*hz>s3QmC<5G)Rw+vo?73>P6zpA zpJYgMYIA9jSKg#i0F+zk2%l$kgwsos#xy-Je;-s_RQ3A!aU$pXptzDP+!jSXgtr1~t=e)tc{OY43-U*iOc+h)0Hd{0%xoXk>JRvW z{H}BB^%DW)q|sYX=*7Zn;jHlk&?=-w$1b3Hf47`NgpE}x2%aeSCPMXwacIre-z+%> z&)eNC;|FLwP2Myg%cxLL6grMVyQAibO=}fmPlp;xT9S~h!8p|^ z94nRo0(6VT8%Y_BvHv8JzN+t~Y6%kdr08<1QVb>qp^aOcwQccg=uUsl7O|j6xQI1a zAW1LJ5pWol;Mo$!0FM#StBEBID4(?T6Y%!6=4Q#qlebEeND$0p-EkkEeLgiK2l?|U z9i;AGqJYT5Fj@*jQ5xHUUrN#qosm?IF&YMjGXOh%KK}1o@pRI<6UpCXWf^)9^65aW zRj*XCS~)-#hS}7&B{JGz|3uar3k%B7Oj!&1X-t;-F1wbt4+Y~+X>w~=f) zZJ?%ZlQD+*l4zG%c_KrU%UF#y7#Y+ld6CysNr=K{h|TB!P2@Xznv7Aw`sdrq!C)W3Tkj68YJ<~5QTK7{HWL)-jtZc6}r| zO(L~cAL*fu{DtLBodSLUKWf@c0KJ1gh+>+dMy<*RYHJLUZfpotKH27`BJ?4O=mNa{ z%SF;?&92F|65x~I&u8QHD^Qz0u(ezj%wYF(;1`A?a7ZlHVGa&jb{7+S)JMAYz%(}H zS0VC&qRHkdW9^Qi5xQx3Uj7*wJi7FqTQ(hUg-eu=J!adCZ$B9(P0$NV!I2<`m+&DU zDnTcKF@*+UaO8!f)e!S113-EMY1V5L^hxeX-U4n3quF5D%jyPL9DTeB`1J=hcm@2m zrIHk{fxv00S_aL$CMAIoO0i8p_65kT0U3JOODJO*7L>WCR=8`C)wS`)OJehCZm^c1vyZ6H(h1;7kn|LK4}9VAiFkNe*q%hP$nyld zYjdU4_}iT{*T!fR^67}F>N7&8o#G9n6?o0eAz;zjOwW|p^s8>!Hcv0 z?-0;4DGAZjL@4wJ1a5c(aN^^oHMAB@YK;?gHeRhU0}G}mb(K7f<OJ3w4{0k{%R!ui%ZNxt;NE>8hg#6`no~*s_JnV=nXot^U6&7x z!ZO1;s2&se#s-MZ!WeBu8v~eVi}^D~uR$&i1Ya0})6G?vmW`fKL#L3Qq!SHOB9w!^vomRt8I#IRgQ!cO z(cNydt;CQ@xxo!6y(n$f22#v&F&w?N?3F8<_59KQfKusaef;JpP;{y7dNtn{NK~6w zsvBkZ%AT5hD5D<|l(6j3GmA+btW!yxcx zXY~9p&FHWx71pk-Db*NVLB^M`ZLt{kzoxOG4LepylI9#D&?Tz)Vhv8nFIu6V8Yi$K zVOn89r@6^eDfD9x$%HNXAm8>uMrxT7H-1iV^~2B{r(mH} z3bs3un_Q3x<~lxIGrsj+T_voV`BhiI`mqe=fJ#MI!w#3do7K;OwV=N~=(2gU{2BXKx2xp8OTEBkkr$1uQ3D z;%&s(0*k4N8Pxp(DziZtm-YOD$HDsxvRV>ahgP|=$B8X`C60RB8b~+)MLktE4bR|6 zlnQ$b9d?1Dh)xb+TpFG1$J3YTO6>l#WwJ|$49wUf9Trj2lA!fj?waK&)B#`iSiO2XAIxL*Arzgysrm|n5*MQ46u z1<#z?tl(rm6(@RGlz<)J%K;b{W}zB2lv0 zo??BDPVgub2^DJCW+BnU7{PcXb}gAzuf~&Oj@aL$ms9EzG9`>>6Co4OBHOTxaIHTE z0ZC$WF&bqGgK)V(W)pE}8`?!>t`}uY$36nlFptH45N*%e0t>2@nIM3TbBrhW;lh=X zyYr=Rt}CgV7iq^5UwvdGsHX^2kp>D{`4~;y-%6?5keV#?g`T7zAAw(>M_Ts7l=3fH zA7dvnl^&$jdqgF_R_VV+R%)f}Wypr!21u;Vi6IvVYDwmW!j#*M^4K+q2b;ksVWgIG zU&i@!N$yKzt0Y4&jxDi5fl}l5pCN7vBxC0@YyDb9Ku&9o;wWb1V2&a+Ss2v%HDzSK z#9+G8mChZ^Z$zc^U^povMYF^_>ph`5YU@qGW%MLIU}+FnCVJ^{TBMmysmEz{i!YOO zCH=AnFRYe^Ik!e)R6gM57k`Gaz}Q8SGAQ#BR%eFcZ7Qj^pM&RdT&)P&1$!OF-+5XUIT z&eey-A*%7kjdEK*#L`+{qAADG+t!EYwX@KrQEoo1foMR6x`V`oJj&7g1U;=SV4dQ@ z&1ayKDDec${eUSKk`g+AQ$A#zEI=JSyo=_>6M<`Dyk2R3XuZi?=Q%vPt{^u8vu z8Q*w6_fs58Iivew-zZ=~ea8{mzO%{RozZLl`}zgv)UVYum^CicIR5|lBt`7P0xb->sQ4-{ir2a#8XZvMVJYW#Y6biSrf!Gd1SblJZA zH!`R=pVv<1&?+0h7=a9zN3sm4#IG?>-_FA%V z#7PzoBs>8xe;AC6Mz=S1Q1uTQqnE+YhoqEybjBUKBB$?xP1Sh+Z=fLIVCj*~732`{ zaqKXPRF!Ua6&fGvT$FGfO4J{T9DNERoZA!WY*CfI9v8=Ql2rc@ zwdD|>d8HUXR^J%rKf+vx&^WBi#~uV2ORC2461(lsj?!xtB(#{&kV6U(5Zz)UW;tOqj zfx&{!;h+V*!*(a}QPipeW@uuADAm&6T!~h`gI0vYMeLw4s-hqy$>upi-0H0pdz0$= zfb<8PjY=e=yZXv{eQy3MtbE{Kb-jsQ^xC#kP$YUf3E629^M#fP8vFD?DhTbnkGVJj zdH{d|{2KHIRC7$Y;?(KMPvy{n)2s`dh&j)}k+Oh(oW=v!9@GpMGXDn8&#@ik zbr(oUJDq7}p`8KKWc9r`tAb|=B+p+HG(RNI4+z`=n6AYs7ag*=nd>+lkv#nQaRl0u zyrfxIb{00|w8RK+q)&f?gB%Ero`4Su-rTWN&dTcF1aS?_HS3JgcWKLos}jFJpjoDE_VqkCa!mPqk=q{o-QThAI^)OvbUxF%5#v$?0+waeD++6@}r)9rfsvToNa z5|4ubu=PRFJ4=cl)`aMRmv8zal?nhDf3}vUzyfnUiJOJ6?f0`&$9_ys0RF+aD}__a zQLNs;6w_vTCd}t#$Mf=PR8KEb*IslhcV}Y73u*C=rDkCLR9)qi-1s|qjT4vZ{^x%> z6v_FYi~XY|a)x)qEnC`%Wr9*|p50GbLs&2=vl})I`UZ7?g$n;H?ZCbS z9*Tb)637I<8Bi|G5c~KxTDiWUAapk$^{+Hd;>cX=EbI<_Yl|d>{}!(?|4tX}3>T4s z}1vhC>L&M@Td^cP6{pF_7&uyea*OIfpI5%AvReH zqz5x(K)27&_t9K}`;zyfNgT<1$ln3K5tBAhYlavHyFChShv@*tl6iawc?9hhu)hYh5e3;C8n@dsj1)czqavOsa#S(! zVX2PlgM5o=-rfAHV2^Sqt1AaU!m=uG&79aP!6)@k5M@FS7~PXcPxOzhXI|c=)l@~L z;mnMfmL(x-CvtpoYsC!Z;%Ba?sM9Iu$K5#)`zGQGhPBFl@I!#WSGg}dh(h6aTA@90nodCX!jceJu@Z>6hpeut}m@ih_{SMM)@jX8zzD^t2pkfIvOpc71qa zTB0_xnktN6&$^d4M!FVv`hv}i`NSOI(P7ZiNdyG>ThR`$$urc&Y3bakt` zri#^+0y(2#?4<|gl)Ai>b>cunz{3K($>Y;{TrPTS7|zt_8H*__oRO?(PxLTsfaahU zv$dsQ3;pNdFg?EOsm}Enq(0~lV1O2W5u^aBjExW*5~&_g!Az`XTBdJ!P)@-XXn-fw zfVQrXm3Qn?w@wOZ9efu^0t`ntl1)ekd;_V)X^gvZL76pFu?mz??|=pz9`Bw*d0mVg}NiVy>#Z)zMe$JixSkf8D17R zdy9%BlSneaD{S7{~Jc?$9An8#tgrT&OkApA* zUmcN}U3>J9;TMqOSIJN^|8WiD9B^AaZD!i5><9gzyx5O1>1|eUR{F7pemsDsN`H}x3 z$Mx9K>?eYLzs3U?E%Kt!^Z$4lWW*NunPj=BpjX^wQtj<;9; z#LX3y3vCCY`Rkf7+3}LNoe;j9xebm#VSo$uj#sgn-cVQgu6jcq7?9&t!3K#IgUf{&@#&XZYDQ8lk%p) zO$Qi-#9#nzCt=FeqXY0TG)G>O)m5<95{~=WC=@yxT1pTu{(BIJ{Lh7u^A!k-3BpmB z%|QQXDAT`Ls2ZxGyq>S*nUO~l5SGxn^bBgEgDkyTH=j96uxt(RTT&O!CkHI0ANCRC z!G|PrdMGhBcikw*u621ha9KOg-X1xfWBh4*T_AEqCNGaV))(+_nBHmq&k|b&fXw`5xj_>(@%%!DdO+ihx;%U;ZnE!g{d@+_qsTRiFdbTq`utTK0fwA7x}F0y&pbhmFn3b0NJqCenf zx$aPy$`qjtTSFQ|Y~YWytio$!cNmlsVT^^R8jja>xP(PT-xs31KA8`pJcpeXV)+{| zKDl6S1V!Y*qzK2OP>9MthqCM%n(Be@#Q;b`fmWyn&WUM&|DpjDfDVGinlOy`ygH0x zt1es=svtnW5oKsttw=IZ(!XbuoJi{5fTYb@5}Sv;Oh)2fN?emICvV@11dM(IzTEs< z$YAp<%rZ(y}P6kKI;>`lXa&&j2ObpQp`&g)->)lC6P>o3doi6hGcuTiv@S~fRXS}7 zR*N29tupijh?5W{pQ7wVBHIKEnYM310*1K?Uv9nz8EoEsG!YrhHQo;i4A!$)=>m|N z69tlGAp?Ecj4#e}!bKo=T^+J3D7z1&mo$W4p|8BqHX_7Jv`(;jeXzil5DB5=~8bI zqEnmeoYE%z-Hktbeina^;O}w#{TzRpJvh{U9s0hF2GB|$986wYR2P<0XU*rbH{q{9 z{tX`aD-I4{YfuKi6aEliQ~qlmBFH{r5qB`nL5M7iz+gymn1^p55uWbaZA{pGz`BG+ z>gJn|L5p2XD;W~F@jhCRWO%UQIQV6X2{#kQXcq9B|Z-f&G5T{pX3-cZgqS8{AsSK;T+`?vk20~ zC}KG_pU(a>h!9Bd^N3bf8|h2pi{_XvBjTb8p|#X+KM`=e8iYnwf!hLCzm=x*Oq7ixfI_s{pGn$6mZRz}Jj`RH0mxF63gODBC(1W@LHOT+IXcp1`4W4@dKErqWaiVunGx&D611NH z-CI>{PD>!XSyBJwy}&it5?z)ehEd|BD{8`{#{h>BkTMG5emUPm1$(LBK~d1`#f?E(&8~~|g~+dS5p(oFje=8KQjc|CN|OZ^ zQ))lx_?RReOuxl#e6Z6a{9Lj*pGe3s4r6Wg{k(sJh&7W;H48*m}Zwt=G*6 z`{M=h!&(AAtVK&4XV!dx8Jo80^i$|z_|~|tGLN2=wdnSZJAR$+wst|d66Y)q57onBsKxw0DaVzCd-eA&!rj*;#KW2!J?Bn6NTY95IY(ZGj_IVWK4`T`nIG z#(Vt%{@{BWpY6jLC`O{l0Dpd#h}R;Qn4W?1fSeM+IkW|20aJW#LmC^g6UNwp#uQ0l z9VToOZACVX$c3XuT43@ZnQlB{bpq_1?HE61*?=~LrzQBEK0cmO;R5IYIvhKm#}8+g z#r$vP6&)GA5RIF-n8?^cuyljR_+Y!2aenHa^l~yre@e3seTxpYOA>|x$F9|rfup?E z*)zhn_!!&}4o_+Qd|BACz_Dx1hcIS`FKJy5oLaGrFKf<8UV;k8@SI<^Ypy40K{e&i zWxF7YAZ=80PKXTO$s8DY`GrRW#?v@<^Rf6X7)>cUSOP|Kv*;Bj54Y4Iprly_f=YlF zfmvvVAL4JA2VgMBDg^@vzpj=~?ITr`P`+T!UJa)v4VUyQi_3lgH(Z`b<_TVgWnr@) zM0d^Z*a;xBlmGf|pikQ!aX}C$#IQ+9vr;F$OpmSm@^>{#8$^C~SN5fW--F4~K%usQDl-+;zgrSnZ$4{ZYkayi`nV70};yJll z!fuD-QL!--{>XEWb{4BRu-)EIJ%&sLp9w*)=z@g75LX}(%FLg;D@{OR2;vCE19|8= zbQp_9Oqo72Uom6@>Q!{tKE zHb9usW5_1dWs*VsGZ~HmFe1Jn6Zs6qatR+n7Hf~cTsVxsel#ZDt%s^ zT9CvgoUGSLMq5IB6HGUpN6)!W`6&gP0aX!xOdc;N*~DjI1z?mU0GiNS^vG=7VTycI z?u>jsib|{-3oHHcve&j_0mGDJe5Cz`PI9UGl6@2~$e$3WQ!o?->T&NB%!=T<`Lom?+(deA26ixr4RlDDanYy~d*p95SkTOAD4;Ge zjtACdC}qNu@I(v{IbOatld60KIFm%5Fm^BwP|@jwf{G}T40?}yxg&=p<`@0rqJM5) zLj7uxL(d9QDW+erjGL&Jz37UY=i%{rvA5yU1qdbgbS$-T7OsJS>~NvX4Y8<%f4Fvd z8Cw>Gr_d57mz~#!)8W4*I&&kP4)-q!PasO9vHTKcglrPdU7~!1LWE*d83Oxw_>9a@ zvi?+rUf9mC7AIr{9J+}~-m-4KTp?Jb-J5Z01dbiVBpnl4KHXdfaQYgiCeqJ{7t+QT zgpi2)R_D>y)gZH8ngJ+nd^9Bl^q7rl7^@B6R{o|#c z5QpNBcBdYsZ4Lvaxo`Z5|!RqFN7mL-6GfE*}j@)_$+JwLH^^o0tfjJLiHwcCsXvd|; z^e%Djj)(p)yF`I~03J`tQMjs2)Mg)mVt~Lc2;Y)uJT7E$wce0$nG*E~BBc6<_-aBB z3E+;i;hVRcQHTHZatxziwL^nqhg&NpxNz-ss(`amMvqloajiE6jXTV<)qn{J-ExJ* z9gh>q;IadxVQB_05`F{dW=y65EU}-8mWObz4*LxByB5wrU85nB>}fu&{i)P` z7ks*LBXv+~f6rXH#9VK(A0!uOb(J1*Ow{X5s@tGmk4_CH>W9$7L4e2n{4@j7aZ>p; zZl(6X=8HxeId1d9wq|_bar*g|@#(#h&qo^{_*eW2ZEJ+!+e#m9d?Z|3gYF(zKcSEx znLAV8#Q;$IO1j-yYf$}gZ+kQ0 z-wOWhI>LW;ex@G{uy9BA=v1|IYV}Vdc zlR01l4W{At_ps~G`Pe-0F#)BKqPe*G(2qP^xJ!;kVS778uV_b7IbCK0C&}FL_TZw} z3kOClqo?r$ERXf3!_$Z%Zo{mha{i)p44~uqF&5`CI8Tk&nKm1)6h{qz(?(y65fhWU zSi^f_#bdOxM!2kl*J<`S{Xb~W`)c{GwdWChv1O7I`Dz1hH(kwE>v5vp^pA@hbxHj%0wxSf_8*xyiEbP?%Z{+rt{ zZQ|C;*WWG?`y(MrXk6IHY(d)g?I&Oggwu&VWj_dM6#M@jfP;;Nc%c`uI2>m0g%x{CO$0~ubP1xw_`ouf zux^K~lK+4TVEadby3F9x@%zYin}~(Ih1*3-f#(5X$N}mNxqC>1Amc)bhcAJm0T5Pn z2%dcqa@Sbl)_FrOQuk8z3}f@MPxw?c2ND1c4w5(ThWv%KR8D?^@-gKnjL{z< z*%xGuVp=niC;aR*t0$9ynNLTLi6{B^{ky0Kw3jVxBY=se*XZDHHzhHDea;h<;1sXrn{EW%juFt7 zH+Dlvq&h&CfYm*JW=cz0-k6ceQD0B!>sp1;;~B8dVL+7jReRoj`!n086^F$mr<$}- zgV)3RU#B4(nrNoiMw9dL9QkE4~m zZpn(9PZ=Us~RX`&A{x8?G`rfve`6W?gz-!F9_?^}%-q zabJAT!k3gfz~&fG*4;diddrPpQ}pyJ^#+?R;{nq?HuWbQ5`t~vDE%kj6?{v;g?0^* zJaxd`+%IaPPNwuKt@J9bG}sAB5})#7nb_Q()OcwG=%rfWd0JtRC>^ATvjAGtFBD@= z!O3v4tQ3c=f_qv-Q9XCQFXpHMD6WFwZ^98ofWM3ikuF$W0?IY~tO2!g*a3*>f?K_k zpCwHyY^y?@62ur(^Z9Y4paR4%ZPk}_@}DDgi0H^wv(QnHfES1X*CqVWLdO@GLquXZ zYV|l}&|0boZ(tD&p!7!VF_JlDAJ%Y$yl#fOE$+}F49%FJ{h-_D^CAQf{})UM4b=o` z69H@BdV3@-nzWVggIUcrDE1IXXZRXMd){z#mySsLSh&WQ)2a~nK3EsUu2P1 zhJ6!YaY=;a+kSTd(J~=VQy4t>v{QqfEfah4>fpm61~9T|h)wDg%6VchRt{;*D<_dU zbQ3-icgM@`xCe)@yFp1igq!v4D+T*tgZABy*PtONmQCH_GJTB>QSUY)SGXGEOc719 z132z^olcJKZUs2ugY4+sDCh1H+4#(W#gb;DtYD!&27L^uP!1 z4GiJyYR&m8Cw!he#6c-sv1JaA^DYH^3ebcgJ{J)QxQ5*PF~}hixP%cPbqb9St|!VA zamXCxpHO9S-n@&%2L-IakemW_2R5)8;X7}@Bq4Yqx4c4Y+sqIwXMq4Iv+m)^8=iZ5 zO3%NDhsqFUv5yvET#pmJ*3+dyx_E+{FSvDr3n!Z!&+=EXRxxf|E5X_t5i!-iJ6PHE{Lj63n%6#~V!V%?c$TA20vKcWBa}*^x^nh43+`6$v>3cSj0B3%c7* zd>0|Jx&RjvQhaU!;7(`n;<(bM^YR<8U$B=k;rr0d^kp`La}@$oqRPVha4o~$?l{E` zuWP0NQG*DqW#8?LFU$wYBTCC;;||wZ!Edb;VF{I9b3>VY4c8^IIu!7Ooa|%NPr$rKf~t*58a z&Gc}A)6ugUM-u32=N2-(nCuDaaa2^OiWyu6wncJc#l!2lpa=3(i8s zOha#m0Sc|ZWzQ*p7K~dGf!DsG(m!gRB4pA2O!ZU1pWPe~23s6MjWqZV&fwDn8 zW#`^7!L?|*O6BH1ZxRSTXAfZ7-Kk^(w|~W|t0oToIy;0rqW9!<=i0Ecy65Ri>8hxv zd$bI7&v)cphL2o{hhGI%BXIHnuEd8u0YunMTciIv8DO-iJM{?BlV~}P;|DgzjSU7i zVsT>w7Bp|dbsTK^aF2iz=_MMVLZ1hLM);W? ztjLX!$PAnQI#udRv0infnb*DoFxnwHuq9;aCf2b$w{wIdo@Se&$G-C);-@r(C&#N1c?6aM zL?jUb7$ff)-#C&x*r0rfFiO?BT*%b~>K~|I@U``^-i3{n4$QHtZPx^iN!twL;q4 zj^#$Br~QH05k^?pb{u6uVwb}GbP8o-Am#3$pZ{Sra4#xgQlK4`t5c{b8~-L%*dHDR zJDD+tC4i(4kmNY9QO^#j;+Yj4p_JE<@|r51XHV%xisEtX37?0c^A`oVV^jvdRvN1( zX+T!CisQ4E$xQxzYsGY>05?l;lenRwBf@{Q}AcLi%t9ei#J8lx0i%gICW&e z<)*(IPA90fTjSWH!3r=perg`{JuxSl~v#n6d=T1;LyhC*#ZEAKMNQ_A^7(Q3m7IMv9wgD3Y-G*v!ISde+5e=#*N$5 zt*57pSlv}**Lx7j@#}LC1c!W?%8fhr!7hCOpuz7*i@AfU3FK%~6wiSiw+DK-HQG)m z*%0I{B(;$iiioLmzz(&2q@PltZ_PppGf_(fN8ZNh9XX=crm{WI2T3vhd^|A#ntc!i zC}w6xWyek+e2rN5g0h|1hiAj_fnwpB**gGj5vS~6rUD!yyub(EdP3|knEj6zOKyC!^1CgCgHJyZ6W zsZC4{RO02i`B__%I49OM8Pp(PQrRs^;$d`_-Pf1vFr{nBtm2JHx1!bdAc&0 z<+4$Tv2V%_XOXbyo028Q9TFSIMnT639f@QHJ6+`B9EzqR+ZXhsDR_R=PLxpWi4nZk#8d$#>wL+1S| zvd?XQkwGk%BI-ipjq#jml>>P3LF7nYq`i{X37ZGZkS`1#HM+%F3u1j^cCm>Xwzb}+ zn;yQ*xP#tzP!3xENY2vw_c3E5XyNUAU+xV6wC2sbs(r=o;%S~R-~;Iy2z}N ztx`~}aSi(k$4kcOV_2`PUsM{SKct5WxQxAp6$ff?7-O&EDXxR1t_o`xD+GV!d1zJ| z9N<98+}YEKis0sq2@J3?-jF*xl5yG~)vE~Y@u_H`$@oxv-E!L(jgj{2ZluV_gm7&M zRkOFXF0nVX+1CaT&&7sk5G-PzZXRUxek{>h_7f4Z7*9suaKWCq0uCJiGG>?%h$+lS z$J(X6nssXY;8L`PiB(3!l2%2-7{L+n+JbJA3z<(PO_^-sRDxZ=(u7sN64hbBQ4A;&>_)ic*cA=r{ zmll0KXx*%mHKGbOdRqK{B^q7u^^5;Pl%59SBoFo>%#+5!u7~>lcNbNfZ4LKVtmS4b zR>7^%aH*r??=0#0|C=TKXE;Fqz1E4&G}2fe*ELS7yzxsbd2V(klaWI#8jN1r9>j;X zC&G2c82br+wyw{qjO&z(Kw)}~=8`Q<>U2V{I-Qoxa^sFpjVp{O@-0F4by>Ox`T~T! zVY)vL-G?G}F5P!7(qKl8ez82#d0itwYy5_Iulz4hP^;Bi5p5m7pCHqEx~-XQhfpYh z>n+8=LOCtABbYH7mg4UGF(O*`*0k&wBtCy z%W(ufgoi97J>!nukTpg_CUC-%_ldn7_B(KYlDi<=O{aYg(wz{xJ_?fM8OzLM{6QBG zP7chD1I8bazXUtOc9wl!*6kRC`q`%s$}1tF#iszW*81ppXEe$ z%J^AIQfNZnnvl0K*`iht(Qha^0izuqx>16ODu$f{G1OCNCu;{$BLbq>iTvj&uRrkhc^=PaaJc zn4IM7Y&~6;Ng(_<1sOxUVNjCnQ_%!qk!Q?3JteUS_;nL9YUJjzGW+j7}!k}+}b?XDzIACNz=s&g> z(N{V?lFN1y@^L0EM%G|a8%oeA*etDTgG~*TX0&OcuNZ{B!FJVw#aXrc12knp*q9LQ zK8XQCw9GxZMERttF%#xBi{Gq2AItzjd&*7ImI_dJp~b@k#R7~v7a-jEMQ=0t(ZsYz z!O0ub(E`a|AHE*S6hRvk(Zdp4FTRd+{!$^$hV7{uM4G{Ee2|elh3mMmD#?-8aT6He zbKhMs3{?458dwe!&im)s=W&J#OOS`yAB_cF$OJ6J`SUr`C*nJhe-eg)@DAsridI2p zzdm|2p>3us{)QAW4O5m3cS%6=?qllt};lBPxLoLn~ zHyYrxfU|d)PSgq-RX|_12iK(?`_`BO9PdP-7iXm7)d&R>@Ur*KTVX(e1se(!u{>=~ ziAyj<(}n|$XbE!oXmvDDE2kD15Wwn7-OG;G&gRL9s{0(L*4QZ4aCnS1M|8{PXSu>c z)sv5QB#H-iYV{$=!c9H%=zu^{7nz2`_iV}b4=@k|=*I$qa|s=*$g0GcUz_jX+HhiMO4CX_r>v}$g(ghcb<)9;kv z{!Zu+h%LzT$@EiG;tuT7xz9^%QQ2Aber0)B~@MvHV} z)7Mtvm)0NoPju|#g}d0kj*oH*_ppu*E^EK^+ArMOcV=<^I9&%PhKL1=K5x~BtwH|R zg%~YvkC(=9NZ`g9k#;Bhh&VbjAyB{4$+EdgWJ?l;8QGlY! zY5N)84nQ(F!ZWoE;r=k*f{-x8&<>pCTDI}Si_xv|l%cww#hfH&34tK78vjc<@=`tK^r$S(V zE{b-55CxJk`fDU53_n%tUtsmGl)bLjcah5*ygODKn7kR$rdY`jm;yKFwPT4P)qCVz{Hz+kAzaUwTH+ z0=8Ngox7lLM~`bes!C-$op_Dc{m7Tf`f>+xgTgVmwvNs^UdKM2w6o^QkVYqX2G1m+6 z#_g&hhj8rQiinQ&hwzG?xg>tpA5vW}fYvAgE_NNb`$eiY!=%}a-IX;SLZBqpvX?x^ zh%RDW9D=q3xlY`Xt70v$u!4A<1=9HCa3Hhq7kkV&_8LtaNN28Q^>0@`j#T{!{*0PO zAU1$SN)L1G?Qy+;9z)KfbF970e+aER_8IScfGh{~uc)r}vRyOuRd`hk7Dk8Pvtu5mHHhIvHnbdr- zo8ON!G~o(L2F_<_4qZ>O&Gr(c&aiN>WiDqO+-}Z8#Gn}{GgfD0VC&0?IEv5z0QqYkAk3N@$ z=OlQpzIdI1s9r7pz8(Vk5`Fqy@^>U+74bX@qM_ht*&@8)8_d> z{?mDg2@`sj+8dp1?@w6gCP|&3>Qp1Y54kEG4Pys%(&1~5j1x3f`2g?CL7bB0Wr(+i zBEUUL;iW@>g0Nm#K2mLNU+!Ld8z{>9d2TOFEQAf5R2yT}So=v&W;`>|K@WeWdc-WY zVq};_H@+~7mx66-v-tabF^kOK&RktRvJhaBdcN&RF=NEA$i=mL?j&pt_oEYZ+`P9A zfg4?eYa5yWDO@XdJ)02?!aJooRuA?Ct);&-B(A5scL#z-dAoWAwImYjAK`cKw+twcRl8!W>?Kxywlpl1I5 z@6cQyxgwKev57pEgBHwzib4AyW3?r@dmxK5d6Jt4Q4})|7E(OmtkdBvsiw}LQ)?(> z6Ydi3#>7Z!LmgXdaGVM|p>}zAl%NM7&BL3EmgGJ#@12OxXCYQV6yaqCspotD3A_5$vfU>XP^izZG+i zc4F;8rHC6uSE=3PB<|2!OB!tw8cHig7;eNN;eE!gS7^4(n}sX@ZY|Ex(JzBdM}spY z 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 Lixl{`LV^DcD$^g= diff --git a/src/bin/mkdir.exe b/src/bin/mkdir.exe new file mode 100644 index 0000000000000000000000000000000000000000..a045931d5316640518a315da877f303629be46c5 GIT binary patch literal 30720 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

    3J>C>O z2+se790Ux>(God9D91+dM#~|1L=K{X925s~5MCh7x=-X(omSZ+v#Gvpm^=>?1$A20 z1WyCF91fDONatKetEwFOg8&4a9C*+;F~LNZn9T>(X|Ylanp#p^>_nZzGL zwyAZnk3yae4YZ-PF@P%QamJri@ZSwO$Xv+lcWOVA;YZR2x1G7ZbPIaPn>4&j!S@b2 zNCF8(1N?Q`bzMP{*11qeJ4nF2$vDgxQ-Gvh3+9BtY8Swx-X+r%<+?wHzov35x|4i< zj~-ppc-~?Z@&A2!C_9~!if*145_lQ-KvJl`Xb<&w;()%P$*G61`EV%L43Yc;l=lwoXDadmP-D9gkuY4 z32(%avT9G;@&+xy>e?Hay(FCyi7N}LDUz1?(%su6pTKe;N%S5)slywc7Cf1}5l6~8 z=5*d*1Mu<`!huIzZ*~GB+|QTZ^D@GkMV!@bStsaMcrnpc1=6M=u6W*fBaW0c2Dlyo zu0q~mzWFVfKpKGQnJikP1$XT50nLY$Bj>dm3>gd)U15eu?`!AX3Sv15CRMWAGLGb; z`O_;R6Ml&{wf-~wrjjvB;+IiV8GDxaFlq~PC|ukU9XazYP^>BZ4H&JN&2?F%sz(Xz zHkcJVpB?1-YXSuysPv3{mcOawQtPtBj_8@{LqH(w4~m1)i$ls_F0h6hCU_&%DLGdi zBe;Z=#w{LkZOoUN3gEPRQL|Recr1^p$P()x3$h`sxH_n@z1*s9!7CKvS zr&^gW=_gQBNsBfS^(nDNRx67gskkQ%jvu|DsScI=Q~*itZkrEogTMfZLm9xg8+ez} z*md1R)m?}8#R}X!Dg59XQ1Mr%MF@~<@u0P`pC6Ddn0N|)jLf?XIraD30JZL`@(!uz zp)A{tZ-k3ElYhs29WHt%bK?#JRk2`+(eMKbtDZ|e5HF_1CeoE+Wo-P+gRm*_0BdQ2Azx0dgNK~DEnGa2kP`a=EEtPQ zx&^_KEip0_C?*t$$$+X3t_;^+`{> zEfught-^GJB%t^%c~$w!4uSoYVB+YB5ZF^>g`+1xVB5$FM~^~Sq!nDAFZj9`C1oAk zjKGiD!a=iY#-nXU`j0*h7uQZ%Or*9E(J4YIZnP2Zu|g{HZ6nM>mrGxQ7Qz+{->xa~ z_z9`Vu&pgzyg6m+yvs1>AH$L2?pt%A@_;)|t8m;4RE{DI=(AD-dvVPJpn|{-!l>xt zT)QSYgG`BC;IyW(;_9j6X{ESr>LeSovTC4hYe62#?WM%_Wid*4Edn52-vIQ*ZRlvr zcxTE2XUZRO4iVrwYgOs_O6wh`c0svQ>m;#o5txNZZtrNu*zyCkg@t2~z#G4UaMIRD z^C0Lc1;fyMCOlizPmAWhh8<34@dJaijb;xVlUv2YE!R~A_bP7rH-^!GJ;ctxK>}J} z$s$X!cG?HbrR!q+^y&C`YI?klaMKWOIYZopldc{G*MvJ(wP3#l&koR#960$oopd<` zIhI(q)<481)~ZZy_xRO6#DZyETTQQ!RfoZrs(bUaTH0E`XEvV202D5FdS{L~vfRofjc4F!h0Oej-q?C!<`^0l-zLwa4Ps1+A$STnwZ#7O)7Ei~cdcWcjcpHP zIbYVth-E1j+T40B<%DA5U;?;&xj(-h%!ZP8ixig#XBgBL@krV=-!hPnjcQAU_-6W= z2waB2(qY6z_KZ)=>-PllkKqE-T8zlpuSb@(MxjeM>$3f!%2hOD&vHD@*3xz!7R0m+S zby~i35^NL(N*ZPBLQe!gz*s}M)JiSvjT1Uu5)|_)$RaPooZ@PYocgFv3IjkD!yBQx zE;G*ZzAJL!U9sO7JrOIpoN`q9d0oi}XdWJ0FV6WL9e@HYvm_A;I;h`rI9_ySM-G*1JJ<_32HDfmOsYFzEVot_ zCV!J2z8C0Ts-<^tWvM3?{SbA+ zB&Ov=*}V3mpjG8wA?QS(W^`c3{Q393p4fixY_tk}hPTxbHLStlXX5}=TK^aKV;&*F zH6CWjeLQUP?fxS-yga%1Zs}9HSpBrgI zM4UrO2VP*g2kHQnQnLy2X2cBgB5Q1KLEEf!hp;e4$v@Tv3n*;p7$9u1!_&cfd7EJl z=ZgYA;<&b2Atna%yb%Z@2^`0$Ud^UeB9ks{>#& z?tBbT`-SUc@-<|M2v8(VI{r}8DcJHN!TRC+xn6|%I{Wsy(4+Ac%7+BPZ_~)u^@U*0 z7Ongj0+P4r9$AM$C5j4qqNdXB>hWQOF2EF>^Co7Z4V(&fc}~ecqX{C$5QD+*4kPN* zg1f8AOS>^@{EeUycH-rEIgCACjC=eLJX-(!xQDhOu5}#TC^%w^RXyZPfH*YH93|o7 z<-nQ&w|IH7%(<*d&Rj>ntA~LXGOD?J`1BkA^|{lQ)w~LkbtFnd)QD$3g#pqym3A+I zQ%rke`b2LcqUBIHC-93kvLnl}TPdsd#a@k}Ri# zWYM`KoK6#uELlaTwfg19G7P{{3Kp5j`4e&>%^#hrF_7d4UxDu--k1+fu8ggnRejt9 zb5FS0U>H6#qO0J^WQ214)=9h(XOvadf=}LH3P+7fX~h zeE8Y>RFTdMl>Wz**`5NS3-mOLx1Rcvv^0)I8feQLEVehod?kNh%xl6kvps+-~*tirfPrnP>tpxC;1guN%LyjBQ3J091ttfjds{ z@PDwhe^TqqYxVSWY>{ddPzr=Dz9#}&G}52J_pV%*lJ7C0+aS=;^fD`*HH2DX{NNKRuhKqH=GJgkGR?iPPPuqK?pAG0;sdqZNuD;q8+24I{>&wiX)Eer!aqMmRH}5zVH=_n!`> z%fvHJFVLVS;P^5z+#G@}WSV(4_KDA$gME?Q;MD#JprSb?7MIIw;pqPxGq^bj{(R;P z**c5d5pJ4Oo*3o|%&~PQmpsyY6mzVXPtmAWJCj`Fk&jx@dDo<*EwlMF*)o%`+qgdI z@&C*YjP%-A8}@I3ybFP(ol2KQAy6Hodh_qsZ+c{KNp&O|Tvr{&Kr8ur^&;kAym+np z0t0RJ@eSk0prgna2JzbsoBYtXXo`caXf572o1XZebb=lNFE6c!pZUEaWaNuM2YxYF zcMT3Md@;b!1)HBeG?(o9e|UR0`C@QbBD?U#07~p0Q)IuO)fF5ng6~ z%ZsI5BdB6=O*38AI#AP~Vg@IPySL?x8-(n~t};f*3xiXqf+qa@wgfs%e6a0UeAi?+ z<5rD-Lp2<~`QfL4al!;UZ@*pAQVD^0 z+f$UCZQm}#^>jYG#h}}@H=!OHlMz2()Z8kT@J8-MKCK#N>hW=e<2<>Ya65A3h=)xN zr{LsT#!B$Ap(HVO=lDznfZrZkb*EK02d_}_V?A)R`GE(&1YRP*L92f=o_|0Wx9`kJ z@jBt1Au+^~7L-eL2dS&DrqtgEQh{-KH;SPR?3yh8YiF$nZ6k~7x-bqMP@L~!NnHG%xVj;&*diMs6944xh&0VkQb&YI)p z-5t$n9bS2&Rj3h^NqoaVYh3+63IiD>r&S0*M|M;*QrUX|8u^;W8L<6YYyol$Q0d|E3u?4CjDFAaxc!S^swtCd2BXM>mJcI`91Ex;yh2Rj zFTe*uO~aFqv?*<{W5xKkVJ7rTy2d>rUNiJyrO+XKfmZZ-KT3+Njr)DELa4B{C=-{w zkh>Hs2-fpapTVF{v}y{ao*wVF>&{gke1kkHns_O}T3$R<=brjSof9v=Fqa*!`5u(h zn)2e=G`4^1Cs`neTniIh1KJ}(ZF6Vk%}Yv7N=-_inUtJ9BWVU@cenVskEq-al)+Je zo3mueG6Vc_7A%I9KM5T282Y)-(;GLhu3W$AX~Xn2n>SmgZ&+8eY2C(YYu0aKeJS@8 zCO}C=?ohjrC=+(513G6M>nk|9oldAzN5!cVcB^es3F-v9I%8ydi^fdQUCKB|FQe+L{s)X^t+`WeRY7XQ6730=2 zwA~*04jb$f;{LmmQS_A_W1P@`6u*Tc(q#zN3*Dbf2yC5PNZ~Pv6mmx7fbY z-?H6cPu2R3>kOMVTMSj3t(z*rir@{yP|N1chFbIH8Vf>;vKso*Gp;2ZU<0~;3;eqP zYt8CP!@5<^tbTg^+6)5~oS5(`8=#>_&hBjq_)pze0oJALVXS%H1&zQGUO zXH-uk6$t4#qY7XsH^pSt5AVNbG&~soCm#J~tnC|=S!-EcV?nW-x2&sKO=h**Yc1=Z z0ny#=9y-eo#u9%A&~{p;HmpgUMQuOY)pxWT%sU(6=}vfq4G5xw0}_4%u6&aX)+GEE zCcj|=VSiC>chodB1eDf+AuNRJ>*&7HX=@TRDrr5Lyz^9?qItibWw*{ z_uC5hDaEc2;8Fk2g46Ak-55uaW3B7}Mo;ymY2lp)onyFxY$ zo!z~?7|~7EjT;RZRz-O-njnhP3ti1fO+M!zPT^4QTy0P zii+CLChTE%eP9UnN?j7QhxH0R3So%a%VLi20gGQ^-A^zu16=?m;UzM8iA~tgh5(Nz zbNWj6u?c(GzN0|XSGbS00Sd5v2M`wJo&&1h?#K+adzBJ}0)rfNRFXO&R~NAd@Qa!SBO8^b?oLQj_m$36(-d>8FUR9U!I0($1bu~oPBCPEZW7?7r~{r;1NS69 zn3hKuM+2wsgjwnU+YUbfrv*L&NA4H{0?-~H+CD@y%S$v1h|<&nJIIL&1bV^>)$s#$ zkS5Iw0^P1a$b1xEWPCAE_ftZGdNxQ2O^8#6c)(#lUIE>9ItlI?#F{UT%@uyp3Ey)oVRcq)H8^2){L3=eELc!qm72>kf<0nL_!%E ztxk!gOd(N|)say!C0q<&!#ou#+5?CS)TIE07E2Qx9xO~Y8j8}z2fYE5cEef#UWBR? zNwtTZLj-SS(lQxQ>deO@?e?rsw?=m=bw737pnmL2Q(a}^?%(Q5S9fQzU~!gj@bx

    WY0Ma3q`nbZjDzdGG93A7@Yj?-GgcQcwnTrtuOhm4 zpEvpf0aNJPECtDFz_DU8nPp7t+zHPrid=}c)K_Zo@l*i zLo(eU1*6DG2MQ%~K%Ws9nl3#+zD}&IR>)R1*40?NqVjl1tdF;k$BA`+DIJGLF=nd1 z0lG;oYt3e`lFj*sbLK1sB%sO}eM2OLrpVPCJL}Tb!2xi=@JTc;c!+Klk72H6(=(5w zf_rII`Ea1F+qCtc)X zImkK;kSAtsPL^0tL3M?HBewAp@{L*~Z1#qmgusbHak$x>fBc2+jW= z5*&4)O;2%jNI^Tbm|TqNU7r@>TWa_NRpV}xyzp!Ph{4{3Zy7avsZrLE&?1P*>jWb( zG+|5HC!J)&!P7N?73pH2Q#`A-<%HWJ=8vCMr&G^n>Pb3tez&%x8x8?jtTr-*aYmx^ z1Q|qhRHEs90AX_++L9VLn4u1_i^fo`Nt;d(a>Bb}-SrF-1Y4bdj5;ozLE@ypfO7<0 zqI41wcXVJ38fUr*I4{hpFKv&z?1e=Kn>dm5RihP2W z`W=^|)w>@W?`=50unkxs`H)cZj#$Zt9ATWk4c+4Q9k=H&7!ik1BR9v3=*l=~_)iv~ z0=RcNiIRe9>vR%oLZ{QpBO8y>cmzij)xmX4k)0v{YZpiC=cQyn;&qq1i_Vxd;$s}y zK);BCq~V&0Pl7c#NZQb_G0&0DbKx;hw`>^&kKn{zJ^m4J=h&y@&l^P#F7OuJX^`dI z@udUcEZ&$9q4}%`c?d4nR97=u(BP~H71!KDX}P=kB#VzX_p-RBxsSysn{^iVHutl* zuX%vQx}FKAA+ZP4F_5F_#7U$-MH+>ZXN>tU7a83J5d_HMk~n|kr>c<{@_=>V*38_f6rzK`UEk=fJ85 zfuql#Ghc@99L*0^PExB51bR~fL$FD{iuRP)J)0%W%EZ7>iqw#boOWU0kXbVaB9_1h z7HzxL(V^CLY4=){S*p7yRMHc|qbXQ?Td<8^n1{Qoe7K@c<1V8oaBvPoF3@HRwA%uw zME_hzU6(RltvigXpioJ7$aNU}PV5%#%n3(34Ybi%yHGP@oI3c~(P1Fu>c^Xp5qgY_ z7kv=-Q`uUdBI%du1FSo#Y)(6M9+!ZHZc&k5Jx8kIsgI5*2sQcsg5C*Z|grRl^WWCKJ-to6d1Bf z540hNqtodEB3_|Wn2k_{KWvRO@S4JWpn!9y5D7PWii-ox~#=)2O3sd&N?JX`Ok@ z^iXfc>y9cii}J{aYMVR+Td#uLZf1Dh)Kt1_Gr%%=q5C>!!9bFcWL8Xqebk5{M%hQk z??bc{>|9euZ?o8p$==ZqP6anWJ@Sct8~vj_!}<|>5D@M(6Xt3@GePp{hO9H6Azy!^ z&8+5IwaGLAJnxQUpKrr!E4U5MBTIVp{o3D(Klv*emX`oakdq+_qyJ~dL`TDiZw@X) zi#7?@*^tjf*sZia58dn6Hz{!p7-i_ezBGDD%d=p1d16%8-#wo+2G$3Yr`f|!d^q+)TPN1vH}PIY!T@md5Bt|) zzJ%NZ`e!sxSVN)WY*T1!D!KR@;a>;RA-SKenU^R__EK9O)!t3nwz&Ml)~Y|VQdwAk zrc{|kDzDi8oxGx`juR*(nc3%=_rbM9@bcJey^yQ}tW|%W!HFJ2%g6?hXGA`6+F8nu zzNHrCp?4hFDmso_7|BSYcL#!MJnBj8h2~zM_V_c_!EcWEc@p>-=SMtmfrB z4whMed?fF;*h4BQ_%9HJK+GiF-$?t(;0kS;CLYK+fg*Lhns#8zJ)_rqsPJO5V@Q>C zpXW=E+qpEUG6AujbCQwL0Th$>?j<}PxR($*$mvM$u?z~(%tb8`&Jhj=Y^TYIp|uyA zqCfxQ_R@o?fP8MBNCZqz+#mS)!SH%AjS+6$5@Q0DF>(?L~yC^Y!?^7g# zHw{k_F+ZY15hN>D?pF%%a|=>ThiMhceNv0uN53heqDrl|!8QM{nRv1V&g$ogOC%zw*stam9r zlkHY)Fr|s>O ziQN_I5?iDSZHL!moJ!cN{WjXhm^v6z&qyupB*Wk%@YZ+GvbzNGgXaT2$Uoj8LEqkv zO$j@NsAP{K+GPgO9!Dp&lPjG#plhiNU}FCH+Hwobl&MfVv9Kk&dgu!1p_9ZsfKJKuxSYxWCgxwH-HHoBI(8J{&2GPv3hN`Q z8$#&4Xf(I|57XhApI_C1=xGvTydVD(x>SQ6>Y2dX637PS-VaMJzU!dGsxPN{(5(XA z3ZmPENpxdE$lj82;{9>hzfg=BOD*}fr*Tf-WEKR9KY@aKT9g`kAjV)j9^u4a$d`%^ zc6`NoPYOJSY8aBn`osHH`6M2Xo4StZ+K$~gfE?FWi}Z%x(D64yhS^{}>LK#V1m2Sf z<#%ZP(8^kpyt1}qGIS^>2jKj~`C9Zl$t&X;aJZ~KSjTV?VDKJ?d{Wx2U~Ld}`A-q> z{La*_4xyd5AJ;(naJoi+WBfi2`zl*3Y}vzA;J*nLQBF*&6&-&3((14;E7AUe<3D8m z+L4I1s*w)$+8tJhZ1q{y|8{)heJAIr+8xzQz`*MLb7;FMio-Fv%`Nokov%Sx7fn+C zGXz|7b#=;N5DyNigPIq^g{1(!UBaycjukl1K^_?Z`n5%u>Ek0&ZO3=XqVp95S6__| zk@c(|XzEM(MhZJU*Cy>QLb)M~kuBK$&t2a+F*1oVnwgmkLpeJ*s7y1OQp zPB=Iy1%D1U(cXG7XV;*UVD6^OZ3fI0tVRbRCpv0HDQKcGWD8nCi_i~Huy1!Sbzq71I3urZ= ztzUNXig;x9${2M2S^%J(eE7^D_X}rQG>0W_Jam>|+pPo;lqEOnU zH>ri+vP6&K1}P+73WgWoZ}G!L)k~w~i>4xxP6kc%K7o9kKoOj;UuHAmBplc1SXe|~ ztah3fu1iSrHxmbc1v1!)3{bgT_cVa4??diU;Y0;nm|W|i4P1|w(5R8ks10TOoKD*$dfy+9n0}k2%<4356Hxj9E2S68 z6O2-3TSum#Gk)bWfkwbotiuS1`YMpzbcmtQ7uiqVd~PTj4>hl&4g65#d#KRqjmK#F z4$hrl2)msE7BRWCm%y>v?>GdntFL6&XH=ogGr$$T$SKHvE5hvR?dQ{ddQaAnmVw`r zvJ-stmsGU&c}o!t?10=a;y{w?AMn1A^IFbP{Fb$3z;{{v{DvQ$X@xJ~>PxX}4EW=g zd|cBGc;8c3gHdVfQgPTsK|PwQg_aHIf#cJyr*UTh)PY5-9gVXF$h0U!ib>of7&zys<0IeY#&*c}d$l`jpnk`d zjoHew=kgkhXZPegKJtD*v*Doh6X-_{jj4ocC|}%L&SJ~nO)R#;YrmJdj+h>f&_?rI zS@h@R6ENYv+?03Z1OG>n6{Otgh~7#I3W!-|05SbRhE$;6I=sGtOKTaf_tCZR%GUhA znM=3y$4w-T5p_0G=jU)m!Uz~y2j~WWZ&v>hXtOM)e;MVq?TSzwm?+GpI2y@nLt5=s z4{I=n#8@x-Kpx0H$R0JrONjS`BPNP|1BStCH7wH^yZZMb6T$(Q#z&I=uLIkJ@Y@1v zgw+|FdK>et8mO=c@N>f4BV?st_~~ffSs*@*DCf18X@JfGOB6E+hC2(a67s56Pv4I; zu(~w`!*@`N^lVn1QF}WYrgRqA?Ud)&cX|wTRtt83{Y;;97R(pG^v;3> z^()Kkv62SdWE_gcFJ|IeksMkqx#fh7P#l+y7VPyF-%)*PHgZ>Yz(Zlb$aP$)KY z{wRNRY^IWwU!RoUmXv=qDZeNwzbPrdCn@ht%GW35vy<|rN%hD3GS652X`71NgZ`;wQPDr$Dbv#%`a&#%)5qP~;S5j?s?b>_f;#{i9>liy{gG98M3C-Do#)jCM4?A%tGk zU-1R?>6o)^iBq^~jCwYI)UQYV%VX5D`9F{%(%6A<_lvU;Z$f)II%#9IA4d&EB9%aG zA4OX_hW==*wv4s_`alY68%EpuWlrJ8h{vYuNZWq2$-W8iWB-b_>0tHxVy9sKE7}&K zZEcBDxcaYXTZ^`PmOF(XApSCZiN;T$P3g@};gYf7qD%md;S?CA@nOPaCGNBT3fMzv zV{I9;&NE`_ecmBWqtYQm}PcH+DD*Yirs7fe%1!dVN6A|K{<0$J&$j8g$ zaS!VH5C*8t!|_r_ zkltKYSxvO65Y}x_w%2;rA^kI9T}5S;2W1Qd;|52jwGfIQDRQ>{`t9hdiN-H&fqSYC3%kV@O300MMVa`?S@Lf*-Sh~C> z&a?dCI?UJjpVP&|Wuw~)wC)qaP4dd+a`Cm-%mZ5pmo(H-Sb%jMPyfG+xdi1f^kxIE UctAN(W9~5Gg#150V^ZM%0Ga{&PXGV_ literal 0 HcmV?d00001 diff --git a/src/bin/test.exe b/src/bin/test.exe new file mode 100644 index 0000000000000000000000000000000000000000..de6d477ed465e53034e4159fbbfcaa6cd7794d09 GIT binary patch literal 33792 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 delta 168 zcmdmdfMv}AmI*Id_&avnZG7V^%)}tH*;*u05JXQ?wUA#0b>jY!y>ll^Ii9lpK?rU0RZv6H}63nw+6mkdnjz0Q7n_xc~qF diff --git a/src/bin/tradcpp.exe b/src/bin/tradcpp.exe new file mode 100644 index 0000000000000000000000000000000000000000..df5d6003811c3b4a4bd7442586bec055039b8d19 GIT binary patch literal 94208 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 KLg1?*@c#gbD+Lq) literal 0 HcmV?d00001 diff --git a/src/bin/true.exe b/src/bin/true.exe new file mode 100644 index 0000000000000000000000000000000000000000..29bcf3b74eaf2f458c8bbcf7d2a70aa935037f9b GIT binary patch literal 61490 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 literal 0 HcmV?d00001 diff --git a/src/bin/txt2chs.exe b/src/bin/txt2chs.exe index 7de09b49c6b1a1945e4fc75b44537443b435133f..1135f50833e07a3305341b73a5e6065fae81aa6e 100644 GIT binary patch delta 25236 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 delta 143 zcmdmZfOFLW&Iu1#l3I7$ZG0m0gYn5`#-E>g7@uta%E~y;m@#Mj6idcFFUBX+m0K7$ z1G(2*73N1sWlS3uO@C&{bP9>T9mrSGQvzvX h1!{1%iYcwij43Wkj!7#nEy>J@DNQcWD@aLV003h%Hwyp& diff --git a/src/bin/xgettext.sh b/src/bin/xgettext.sh new file mode 100644 index 00000000..c588cb0d --- /dev/null +++ b/src/bin/xgettext.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xgettext --escape --extract-all --foreign-user --omit-header $1 diff --git a/src/fsutil/bd.exe b/src/fsutil/bd.exe index d284f670cffd04157ffa5f10faee1be27eeb6a78..34892a4a08729b3e7886469b1d736d13c343dc84 100644 GIT binary patch delta 144 zcmZ3vfMvr1mI*Idy1QNMH@*oMWi;9BBBsa&q|#)J#2BY+o@rER#b`2FIJY0jS)7|_ z#5Pl>4dBXNDoN8yH!kbWqNsL cUQB6KW=wHWa!gurX-Q^IOj3$oK}r$>0LQX1L;wH) delta 137 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 Xl-P^nUQ9jm+S)VJ*RR$RE^+if7UFa* literal 0 HcmV?d00001 diff --git a/src/fsutil/devio.obj b/src/fsutil/devio.obj new file mode 100644 index 0000000000000000000000000000000000000000..fc4ce367c01864ffc356e54515b633e180e6b690 GIT binary patch literal 12749 zcmbVT4RBOdmOh>SO{YT|4G4i}vfM4_$K9P7XLcQTHy{OS>8``n)ap9A<5>PC&Vn*UbTekZbMAew z`*o7qseR#{_ucc(J?GqW&%N)x+n2327u}a@T>s!)qL)Y=)sbYhBfUSWi?jg1VKYkl z>h)7~BpS|i&cEHb)8{3+335L!Q=CRzHj{s2bvTtWWccbSENFa`Y6hz#?dkS{d)?4= z=Mu{qaO~BHXowY~+OKrlxpDGLcHe(t(Aoivo4amW1Q!z^0{}7B3EL z?@h<|#Sg`MIs=;$`+DQu(PZF`XfhQ~^aN^`RoB#1udZLYvbtt5m7#h0V-*79K(P+j zb>)9I~q5U9hP7_y*M`% z*ny4I!JdvHofEbFYgz**+NQh)XE+w`L3b!W*~~=oo^BtT;!Hi_~^-j>(>Y{GXX${={x8@t`+27tBkLY}zD1Uol*1j**$!%j#Yf#sg zW*=*dEZhst9L_^H3sSW#jA^euVkZ1#32O>)fY?e&B+Z@7M(02!ck)DLW7=#O*UkBc zm38FJ8o6Squ?!T`uF*Q!oyg8^=;tojRb(d;O7up1I=U07Xt5pcZk_`II2|ly^pkGh zL_K{6%i?Usxh3BmcO(=~bfmkBlCsz$Cn;OxQGr?J?u<@4R%C}-2R{lX@Z#p8z6?R0 z`||5JugiPkf)_pUG%G0RB@QPCF92cZzIaa}$qidrq|%MMJd^R{?aQkyN$lnN#*~w< zUp!h1>zC&1yAyjuNo3b}B}Oa)Fz8OUABc6gcd}!}ZDrH!7`L~;F;`EbGm(gl*ULJV z6*aC<$MU>$KBYr--FQvhdq!{B(OaA^T-od?Hg!{xsU!qAL3(g*&6{$>ds27vAZ1tT z!M91tNIzQ#Pe(>CxsuT|2L43qSuLyY!nv(LeKNYQNIhqPsE2q-NAD#1i=)kNEUZ6a z)$hvmjBmi7W}!GhRnW}+IS*%ZK?^#%lSM7y_E(a}-)c&^G0B9|?coY=uQItMnJ|mB zm<%@_550**_jGW1f>cLoxSeNGOqSEY=P6ws9!O(;=-4}+9oiF5rzT+Ui>D@H$GTH{ z{ABl6!;@0HA@SoPl&Sz{5jdVyD1y-!i85n>Vsr?j9E^EjxKg2Bv~CKD0TkV-P=+T2 zR>?C)X=gMY?};Ts=`wKSA(e^uU>3IfS1EBcFLi*`b8uiU6XtfY`T**?!iY&I?bAhP zrejZgl1n`CIwiC$$|V;ou3gEhx#-4AL=Wt;>YJ5na1b}MHrk;yU&Xo-v6w1N<&vo4 zs@w=qD&E=C4mVi$TIDw8!3<_+U6xV^vzXn_Z%!`m%yjZ$)SZp9j2_jpq0Wqp^=xK1;WcbUzHPa`ia1Ih|-rAA(Q5~yEzPif?(5uk4gZ&V{M zt;XE@SHinRBQKo-`kwHDr!z%%4h zo)4Gu?6)RRm02qPyto-ltto}QQn6mzxUspEXT;KlGTW}JiY$WjrB%J9RhiPN4*mn; z_NZ4Igw*aXc4JK+d(Pki3cPo&p+YF@Y@>i3p%WtX*?KTnj$~2rV z+5^gdyQmvf)#dq9)wl=fYPowDl;>O*9R=n2)Hc^Sb)ZMor=^TAPIisgd7 z=3JBK*xO@cL@ggMFMHP09~{jd8Kw04T-#{f;J|SwQu*XydQM(4*XBF+JFe5p-jS~8 zdt4L@+MeL+P$pL{<qJ&C@r)7|e4=SqU8U)Lj@j z#mtiz5Urr6?!{QHk3Bf{83!v4>(` zbCLx%OAkYZs@Z>v12sO@!O@|Txic9Hp$HK4A{?y<vK)RM&9It7bWB8y^79UfEy~lizUAOZ6mqh$lBm&(uX_! zO_y_RBWNs?>y`}z@tkN7CP zK;34IpX*LV8!(GYml(5$Pjvu47z%RM2WRwz6zfL}WfF%7vZ7R{^N?Eu^jUKZtu{2` zp)dl|{nHvy0S5KNoSxc61CT;0j3PSgdkmE zD)eN}I)=&z;0?N9tl5X6(VboV%rs|H<4Kv(@y5F@4b96n`QfRr)zmj5d)9~Nr=HIF zJ%EkpXGX+EhvC?fkq2-)wdoul&@e7hMr<%YOkI2C$Q(1W4)_F>(ux@aZKHUa^&Jk;z_dISjBATBpd z-v+#WQgx$0`vE@*`#1Pm(?&;jP!;)snJd8^`v!je)^Bvc96W%6sr}6k#KvLkJ1#Uy2^1D5_v%gJ*3?YMSU}{hNK?+~LI(i3%do!kNt8nsF~O3DNUv z#h!KOXyl>euIKTIBi|%0`MPLCsS>~1ko?l*q8&h-x|Onq$=@F?ihwG_Z-M;%;i8O* z_}!1cIVQt0DPQkO%OWSySLJRskh;4WNa<@e z(bs^KzPn5m22$3J1M%0fi(Uh27xWfTl~{WpXuj}fV$SLkG#4l?s0Jt`a_fPVTpv(M z?(+9OuWh>MQB!Uh=o`YjV)BA+L(5lzl$OIL`fDKNAFlx@G#eV!qN7dX=)tdSoIz_q z%VdeWT)u{;iN_0MwPO)Ih`Tq@BcO}v`=CqdXP`Co0%$G$5_B280lJF*3$%eg2Hi+s zfNr6yC0A=ex66--&9XW~v<4g}Z3lJHPEa=;2K7)sXc>J6bQ=8tbUHl)dabM%&7yw; zzLDMpT}U5+-b}nwv_w{y@Cz-lhiu4KFS$X>=xR_O)q$4NI?yS!6SRW5K(D3*=nT3W zbf&C3VRZ-CMn^%*s2_9+{Q`6vy#hL&{sVLdy#qRv-UYp0R;GwP26mGd`Cm%QL8lO} zH~DETXeF%!ohIXz=r&*nZ3A^u8)yaX1ocw~=+)E(T1hF;>GXZjYv?)98FUtOCcOlD zExihQJ-q>X1MzCrYFLH<`!1?U2*1ig{wfi9wzpf}Mb z&?VFgx`HC0E2#%`6(vFI=`iSR^yi?PWgU&^eqb9t2N|Eg)vpf1`C>ZSy!N7m`kcfdA!3e--|fI8?Ls8d$TT$0H|Z;Ff! z@aLcoSslb@rpT0dSmsHLKG*?vkQdY`D}%^2U>j8mf3EPCfV$`wP&fSw9PgaJj565?utg(PdBv{Snkj zKCI&*=Adp`2kN0Mprv#>sE@u5S}rS+SepVap>9w+9RPLEaZnd{MAaB8eJ2~&^E=<1 z&dK&n?C)4vQ{5X0e{!ihhCL7*8XRBX9lx`rx_Z~%XtF2TEgLO(%`Q>hp#)6Y(1Fbp z)$xdH9#&6L%Z{BX`5i2ncF1m9U`iXHaQ6!PYPa$Jl}4any;}FGk}BM}f?*381ZRQ+ z!wl_a%j#55CKhB)3H-_LY!Nvd?`^pO_ZH7Rbb{sZtdQRw+QW=lhJ8}cD*>2A6o=nS ztemw5!;}e*<1~-s+&PY8M4n7NiE%Rglv4-$6FLwH@sH+K4*!Cj=P){nliS3HYQ;l9 zR?c@UoWeamPTaBEc$W|F>}m49{O@4k2+4jIg`MoPZ6ON0Ifi!uEs-0cFt6e&nS8sR z0E3@~tl35Lu`OnPef?^FN-7S1F9OaVXlZYIPrSq6aNFnKep`M03fKaZTVjVl>en_y z3jH3A83oZCg>OW6X z^~}?H)Oa-_k4Hz5^$nO<@@-#jwXQb?DH*oT+GH2eZ1tO)I6$0H{6@igFbZzJt+r-m zJ-v*Q%8gKOsyiAj%pb#NtM&ETx|&f8p99ci?XRr1rAER1R-e&dyhBLIu+OaReVpgu za|lWSZ14G)v}O;wE+HM*6|3L1vIk}-U?T7N)WSL599d3-N-p$YjoKWy=t zec}&r{?4;oeg+>i#U zwQ>K21M1gX?IGrn*FYh7TDe{nilg;<(g>fFfhZ;(T zJ!EaWao!hDza?uAm(@~aoIh60zt);hpmyG$@e!-X@Xq_g-%t4?r1w)P8TN;@-GTFG z0ri`;lKm7He%EC^E^}VBYJOX5<_yjI!z&cl9(>5+&&T8Z!OkjDGVBj)a2M z&3ab1>ba!#`~_t5*2{sd)_-rYK4!I^P~$_%uyxjk3e+%1{nnVbZq;MQY|RJ1W#p}6 z5-qa+2a9!HSkE6Jy@gB3uyxkP)>~oydm?DG-Kxi{^*p9z^w=41ebi!oiq*Q>qeV)F zt+O`HrU#wpb5Zt*aepq-5ASYfG`lxoTHP zKIg4^zO3~;|9@By;jx$R_dBfCc{dvBD;c)V+NyBg0_*B9B5&1mr$vwPykI+G%Y4h_ z_xil`-PT&_e;DwBFlIIW3Ruq2a+D!kL+h~%t6_cZ`t|yyv!S8BpY0 zccX%8`-E`i`$dr2OCeA`VM6<&`$Afhp_1&$baxwEeE#VBczp@+<`1zcyX6$(y&yE7 x_u=CUW2O4kz-!iW3K<)kA!lsI1I%v*rclAoV0<0sx9@5#wRI~fRJd`I{ueOBMi~GA literal 0 HcmV?d00001 diff --git a/src/fsutil/devmisc.obj b/src/fsutil/devmisc.obj new file mode 100644 index 0000000000000000000000000000000000000000..a7025761113cc3bb9ab0f64665a66d29877f87dc GIT binary patch literal 4543 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 literal 0 HcmV?d00001 diff --git a/src/fsutil/filesys.obj b/src/fsutil/filesys.obj new file mode 100644 index 0000000000000000000000000000000000000000..c31a7de674c2e8ce4224b7fe8144c46a5b3176fb GIT binary patch literal 28036 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 filsys.s_fsize)) { @@ -262,6 +264,7 @@ void pass1(void) { if (yes()) { buf[b] = 0; dwrite(b, (char *) buf); + bno = 0; /* Nick oops */ } } if (bno != 0) @@ -776,7 +779,11 @@ blkno_t getblkno(ino, num) if (indb == 0) return (0); buf = (blkno_t *) daread(indb); +#if 1 /* Nick, this must have been an oversight */ + indb = num - (DIRECTBLOCKS + BUFSIZE/sizeof(blkno_t)); +#else indb = (num - DIRECTPERBLOCK + BUFSIZE/sizeof(blkno_t)); +#endif dindb = buf[indb >> 8]; buf = (blkno_t *) daread(dindb); return (buf[indb & 0xFF]); diff --git a/src/fsutil/fsck.exe b/src/fsutil/fsck.exe index 30225ccb5f283831b5dd51c6bcffbfddd8b4ed5b..449b8fe2e870ef15d1b031b5f7c7d35c07e0eb2d 100644 GIT binary patch delta 5829 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 diff --git a/src/fsutil/fsck.i86 b/src/fsutil/fsck.i86 new file mode 100644 index 00000000..b8b26393 --- /dev/null +++ b/src/fsutil/fsck.i86 @@ -0,0 +1,636 @@ +:020000040000FA +:20000000C9A60200785634121400008100818C8D599659A6D1ED538C8DC1ED438E8DE12205 +:13002000908D2153663E00CD4981EB21787F3E00C3498133 +:200CA000CD3D81210000E569600100003E09CD8E82C5E5ED5B978D3E0021EC6FCD4981F15D +:200CC000F1F1CB78282E217784E53E0021BD6FCD4981F111548C3E00216B6DCD498111991C +:200CE0008D3E0021D772CD49811101003E0021787FCD4981210002E5DD4E0ADD460BED5B76 +:200D0000978D3E0021A87FCD4981F13E02ACB5282E218484E53E0021BD6FCD4981F1115424 +:200D20008C3E00216B6DCD498111998D3E0021D772CD49811101003E0021787FCD498121C3 +:200D40000002C33281CD3D81210000E569600100003E09CD8E82C5E5ED5B978D3E0021EC3B +:200D60006FCD4981F1F1F1CB78282E217784E53E0021BD6FCD4981F111548C3E00216B6DC5 +:200D8000CD498111998D3E0021D772CD49811101003E0021787FCD4981210002E5DD4E0A0A +:200DA000DD460BED5B978D3E00217E6FCD4981F13E02ACB5282E219184E53E0021BD6FCD5B +:200DC0004981F111548C3E00216B6DCD498111998D3E0021D772CD49811101003E0021783A +:200DE0007FCD4981210002C33281CDA081B2FFAFDD77B6DD77B7DD36B201DD36B300ED4B1D +:200E0000BB91DD6EB2DD66B3A7ED42D27D52210E00394D44DD5EB2DD56B33E00214164CD7F +:200E20004981DD6EB2DD66B3ED4BCF910936FFDD6EC0DD66C17DB42003C37252DD7EC0E634 +:200E4000006FDD7EC1E6F067DD75B4DD74B53EA0ACB5CAD54E3E80DDAEB5DDB6B428763E71 +:200E600040DDAEB5DDB6B4286C3E90DDAEB5DDB6B428623E60DDAEB5DDB6B428583E20DD58 +:200E8000AEB5DDB6B4284EDD6EC0DD66C1E5DD6EB2DD66B3E5219F84E53E0021BD6FCD499C +:200EA00081F1F1F13E0021FA65CD49817DB42825AFDD77C0DD77C1AFDD77C2DD77C3210E28 +:200EC00000394D44DD5EB2DD56B33E00218F64CD4981C37252DD6EB2DD66B3ED4BCF910971 +:200EE0003600DD34B62003DD34B73EA0DDAEB5DDB6B4281F3E80DDAEB5DDB6B428153E405E +:200F0000DDAEB5DDB6B4280B3E90DDAEB5DDB6B4C27252DD36B812DD36B900DD4EB8DD468D +:200F2000B9211300A7ED42DA8350DD6EB8DD66B929E521100039011800094D44E1094623C4 +:200F40006668DD75BCDD74BD7DB4CACF4FED4BBD91DD6EBCDD66BDA7ED42380FED4BA39178 +:200F6000DD6EBCDD66BDA7ED423864DD6EBCDD66BDE5DD6EB8DD66B9E5DD6EB2DD66B3E550 +:200F800021D484E53E0021BD6FCD4981F1F1F1F13E0021FA65CD49817DB42833DD6EB8DD4C +:200FA00066B929E521100039011800094D44E109AF772377210E00394D44DD5EB2DD56B371 +:200FC0003E00218F64CD4981AFDD77BCDD77BDDD7EBCDDB6BD287D211600395E2356234E94 +:200FE0002346EB3E09CD1C82011200A7ED423064DD6EBCDD66BDE5DD6EB8DD66B9E5DD6E53 +:20100000B2DD66B3E5211E85E53E0021BD6FCD4981F1F1F1F13E0021FA65CD49817DB42806 +:2010200033DD6EB8DD66B929E521100039011800094D44E109AF772377210E00394D44DDD3 +:201040005EB2DD56B33E00218F64CD4981AFDD77BCDD77BDDD7EBCDDB6BD281C0603DD5EF2 +:20106000BCDD56BDCD1F812ACD9119DD7EBCE607473E01CD0782B677DD34B82003DD34B9F3 +:20108000C31B4FDD6EFEDD66FF7DB4CA7951DD5EFEDD56FF3E0021C963CD4981DD75BEDD59 +:2010A00074BFAFDD77B8DD77B9010001DD6EB8DD66B9A7ED42D27951DD6EB8DD66B929DDBD +:2010C0004EBEDD46BF0946236668DD75BCDD74BD7DB42876ED4BBD91DD6EBCDD66BDA7EDD6 +:2010E00042380FED4BA391DD6EBCDD66BDA7ED423858DD6EBCDD66BDE5DD6EB8DD66B9E5BE +:20110000DD6EB2DD66B3E5216C85E53E0021BD6FCD4981F1F1F1F13E0021FA65CD49817D48 +:20112000B42827DD6EB8DD66B929DD4EBEDD46BF09AF772377DD5EB8DD56B93E0021086446 +:20114000CD4981AFDD77BCDD77BDDD7EBCDDB6BD281C0603DD5EBCDD56BDCD1F812ACD9198 +:2011600019DD7EBCE607473E01CD0782B677DD34B82003DD34B9C3A950AFDD77B8DD77B90F +:20118000211600395E2356234E2346EB3E09CD1C82DD75BADD74BBDD4EB8DD46B9DD6EBAB5 +:2011A000DD66BBA7ED42DA7252DD4EB8DD46B9210E00395D543E0021A560CD4981DD75BCDC +:2011C000DD74BD7DB4287CED4BBD91DD6EBCDD66BDA7ED42380FED4BA391DD6EBCDD66BD0F +:2011E000A7ED42385EDD6EBCDD66BDE5DD6EB8DD66B9E5DD6EB2DD66B3E521B685E53E005C +:2012000021BD6FCD4981F1F1F1F13E0021FA65CD49817DB4282D210000E5DD4EB8DD46B986 +:20122000211000395D543E0021A161CD4981E1210E00394D44DD5EB2DD56B33E00218F649C +:20124000CD4981DD7EBCDDB6BD281C0603DD5EBCDD56BDCD1F812ACD9119DD7EBCE6074703 +:201260003E01CD0782B677DD34B82003DD34B9C39751DD34B22003DD34B3C3FE4DDD4EB6B2 +:20128000DD46B72ABB91A7ED4201FFFF09DD75B8DD74B9ED4BA791A7ED422840DD6EB8DD7E +:2012A00066B9E521A7914E2346C521F085E53E0021BD6FCD4981F1F1F13E0021FA65CD4911 +:2012C000817DB42817DD6EB8DD66B922A791019D911101003E00210864CD4981C33281CDDE +:2012E000A081F0FF2AA591DD75F6DD74F72AA791DD75F8DD74F9212A86E53E0021BD6FCDEA +:201300004981F13E0021FA65CD49817DB42003C383552AAD91DD75FADD74FB2AAF91DD7512 +:20132000FCDD74FD2AB191DD75FEDD74FFAFDD77F2DD77F32AA191ED4BBD91094D44DD6E54 +:20134000F2DD66F3A7ED4230260603DD5EF2DD56F3CD1F812ACD9119DD7EF2E607473E010F +:20136000CD0782B677DD34F22003DD34F318C5DD4EFCDD46FDDD6EFEDD66FFA7ED422929E9 +:2013800029DD75F4DD74F52AA391DD75F2DD74F3DD6EF4DD66F5DD4EF2DD46F3A7ED42280A +:2013A000260603DD5EF2DD56F3CD1F812ACD9119DD7EF2E607473E01CD0782B677DD34F257 +:2013C0002003DD34F318C921000022A5912AA191ED4BBD9109DD75F2DD74F3ED4BA391DDD0 +:2013E0006EF2DD66F3A7ED42302E0603DD5EF2DD56F3CD1F812ACD9119DD7EF2E607473EFA +:2014000001CD0782A620072AA5912322A591DD34F22003DD34F318C3DD6EFEDD66FF01003C +:2014200000C5E5DD6EFCDD66FD010000C5E5ED5BCD913E0021EF69CD4981E1E1E1E12ACB63 +:20144000917EF601772ACB917EF60277DD36F202DD36F300ED4BBB91DD6EF2DD66F3A7ED04 +:20146000423035DD6EF2DD66F3ED4BCF91094604281C0603DD5EF2DD56F3CD1F812ACB91D4 +:2014800019DD7EF2E607473E01CD0782B677DD34F22003DD34F318BCDD4EFADD46FBDD6E64 +:2014A000FCDD66FDA7ED42292929DD75F4DD74F52AA191292929DD75F2DD74F3DD6EF4DD98 +:2014C00066F5DD4EF2DD46F3A7ED4228260603DD5EF2DD56F3CD1F812ACB9119DD7EF2E6BF +:2014E00007473E01CD0782B677DD34F22003DD34F318C9DD6EFCDD66FD010000C5E5DD6E54 +:20150000FADD66FB010000C5E5ED5BCB913E0021EF69CD4981E1E1E1E11104003E0021C935 +:2015200063CD4981DD75F0DD74F1011E00C54D44119D913E0021B86CCD4981E1DD4EF0DD86 +:2015400046F11104003E00210864CD49812AA591DD4EF6DD46F7A7ED422828DD6EF6DD6698 +:20156000F7E521A5914E2346C5214986E53E0021BD6FCD4981F1F1F111548C3E00216B6DCA +:20158000CD4981C33281CDA081B4FF2ABD91DD75F8DD74F9ED4BA391DD6EF8DD66F9A7ED12 +:2015A0004230270603DD5EF8DD56F9CD1F812ACD9119DD7EF8E607473E01CD07822FA677B4 +:2015C000DD34F82003DD34F918CADD36B401DD36B500ED4BBB91DD6EB4DD66B5A7ED42D240 +:2015E000B058210400394D44DD5EB4DD56B53E00214164CD4981DD7EB8E6006FDD7EB9E620 +:20160000F067DD75B6DD74B73EA0ACB528213E80DDAEB7DDB6B628173E40DDAEB7DDB6B64A +:20162000280D3E90DDAEB7DDB6B62803C3A558DD36F812DD36F900DD4EF8DD46F921130095 +:20164000A7ED42DA5F57DD6EF8DD66F929E521060039011800094D44E10946236668DD7511 +:20166000FCDD74FD7DB4CA54570603DD5EFCDD56FDCD1F812ACD9119DD7EFCE607473E0132 +:20168000CD0782A6CA3857DD6EFCDD66FDE5DD6EB4DD66B5E5DD6EF8DD66F9E5218B86E532 +:2016A0003E0021BD6FCD4981F1F1F1F13E0021FA65CD49817DB4287E119D913E0021F76221 +:2016C000CD4981DD75FEDD74FF7DB4201A21CC86E53E0021BD6FCD4981F111548C3E0021AD +:2016E0006B6DCD4981184FDD5EFCDD56FD3E0021C963CD49814D44DD5EFEDD56FF3E002130 +:201700000864CD4981DD6EF8DD66F929E521060039011800094D44E109DD4EFEDD46FF7180 +:201720002370210400394D44DD5EB4DD56B53E00218F64CD4981181C0603DD5EFCDD56FDC3 +:20174000CD1F812ACD9119DD7EFCE607473E01CD0782B677DD34F82003DD34F9C33756AFF9 +:20176000DD77F8DD77F9210C00395E2356234E2346EB3E09CD1C82DD75FADD74FBDD4EF861 +:20178000DD46F9DD6EFADD66FBA7ED42DAA558DD4EF8DD46F9210400395D543E0021A5604B +:2017A000CD4981DD75FCDD74FD7DB42003C39A580603DD5EFCDD56FDCD1F812ACD9119DD92 +:2017C0007EFCE607473E01CD0782A6CA7E58DD6EFCDD66FDE5DD6EB4DD66B5E5DD6EF8DD18 +:2017E00066F9E521EB86E53E0021BD6FCD4981F1F1F1F13E0021FA65CD49817DB4287D110C +:201800009D913E0021F762CD4981DD75FEDD74FF7DB4201A21CC86E53E0021BD6FCD4981C6 +:20182000F111548C3E00216B6DCD4981184EDD5EFCDD56FD3E0021C963CD49814D44DD5E3D +:20184000FEDD56FF3E00210864CD4981DD6EFEDD66FFE5DD4EF8DD46F9210600395D543EF8 +:201860000021A161CD4981E1210400394D44DD5EB4DD56B53E00218F64CD4981181C0603E1 +:20188000DD5EFCDD56FDCD1F812ACD9119DD7EFCE607473E01CD0782B677DD34F82003DD7D +:2018A00034F9C37D57DD34B42003DD34B5C3D255C33281CDA08114FF210000394D44DD5E2F +:2018C00002DD56033E00214164CD4981210000397EE6004F237EE6F0473E40A8B12803C3A5 +:2018E0004B5D2A99912322999121520039E5210A00395E2356234E2346EB7DE60F4F7CE6C9 +:201900000047E1712370215200397E23B6284B215200394E2346C5DD6E02DD6603E5212341 +:2019200087E53E0021BD6FCD4981F1F1F13E0021FA65CD49817DB428212108003901000014 +:2019400011F0FFCD5681210000394D44DD5E02DD56033E00218F64CD498121540039E50108 +:201960000000C5011000C5210E00395E2356234E2346EBCDB481EBE173237221500039AF99 +:20198000772377215400394E2346215000395623666AA7ED42D2445D21400039E5215200A3 +:2019A000394E2346210200395D543E0021FC64CD4981E121400039462366687DB42003C30B +:2019C000385D2140003946236668010100A7ED4238152AA1912929294D4421400039562301 +:2019E000666AA7ED423860214000394E2346C52142003901020009E5DD6E0ADD660BE5215D +:201A00005C87E53E0021BD6FCD4981F1F1F1F13E0021FA65CD49817DB4282C21400039AFF5 +:201A200077237721420039360021400039E5215200394E2346210200395D543E00217065A0 +:201A4000CD4981E1C3385D21400039462366687DB428712140003946236668ED4BCF9109A9 +:201A600046042060214000394E2346C52142003901020009E5DD6E0ADD660BE5219787E54D +:201A80003E0021BD6FCD4981F1F1F1F13E0021FA65CD49817DB4282C21400039AF7723772C +:201AA00021420039360021400039E5215200394E2346210200395D543E00217065CD49819A +:201AC000E1C3385D2140003946236668ED4BCF9109463404042026214000394E2346C5215C +:201AE000D187E5216C8CE53E0021467FCD4981F1F1F11101003E0021787FCD4981215200AB +:201B000039AF772377010E00215200395623666AA7ED42D2A95B2140003901020009E52170 +:201B20005400394E2346E1097EB7287D2140003901020009E5215400394E2346E1097EFE47 +:201B40002F205A2140003901020009E5DD6E0ADD660BE5211488E53E0021BD6FCD4981F114 +:201B6000F1F13E0021FA65CD49817DB4282F2140003901020009E5215400394E2346E109CC +:201B8000367E21400039E5215200394E2346210200395D543E00217065CD4981E121520083 +:201BA000393423200134C3055B0144882140003911020019EB3E00213672CD49817DB420B0 +:201BC0006B2140003946236668DD4E02DD4603A7ED4228582140003901020009E5210E0066 +:201BE000E5DD6E0ADD660BE5214688E53E0021BD6FCD4981F1F1F1F13E0021FA65CD498169 +:201C00007DB4282821400039DD4E02DD460371237021400039E5215200394E23462102004D +:201C2000395D543E00217065CD4981E10176882140003911020019EB3E00213672CD4981C0 +:201C40007DB4206B2140003946236668DD4E04DD4605A7ED4228582140003901020009E5BF +:201C6000210E00E5DD6E0ADD660BE5217988E53E0021BD6FCD4981F1F1F1F13E0021FA651D +:201C8000CD49817DB4282821400039DD4E04DD460571237021400039E5215200394E234655 +:201CA000210200395D543E00217065CD4981E12140003946236668DD4E04DD4605A7ED426D +:201CC00028762140003946236668DD4E02DD4603A7ED4228630121002A9991A7ED4230580D +:201CE000DD4E0ADD460B215600395D543E00217673CD498121400039010200094D44215693 +:201D000000395D543E00219D6FCD498101AA88215600395D543E00219D6FCD4981215600CA +:201D200039E5DD4E02DD4603214200395E23563E0021B358CD4981E12150003934232001BB +:201D400034C383592A99912B229991C33281C5D52100002299912ACF9123360121AA88E54C +:201D60000101001101003E0021B358CD4981E12A99917DB4280B11AC883E0021376CCD4958 +:201D800081D1C1C33881CDA081ACFF210000394D441101003E00214164CD4981AFDD77FC84 +:201DA000DD77FD210000E5211000E5210C00395E2356234E2346EBCDB481DD75FEDD74FF12 +:201DC000DD4EFEDD46FFDD6EFCDD66FDA7ED42307C21400039E5DD4EFCDD46FD210200398D +:201DE0005D543E0021FC64CD4981E1DD6EECDD66ED7DB4204DDD7EEEB72047DD6E02DD66FF +:201E000003DD75ECDD74EDDD6E02DD6603E521BF88E52144003901020009E53E0021276DFC +:201E2000CD4981F1F1F121400039E5DD4EFCDD46FD210200395D543E00217065CD4981E1B9 +:201E40001823DD34FC2003DD34FDC3C05D21C588E53E0021BD6FCD4981F111548C3E002173 +:201E60006B6DCD4981C33281CDA081BCFFDD36BE01DD36BF00ED4BBB91DD6EBEDD66BFA7FA +:201E8000ED42D2A260210400394D44DD5EBEDD56BF3E00214164CD4981DD6EC0DD66C17D3E +:201EA000B4201DDD6EBEDD66BFED4BCF91094604280B11F1883E0021376CCD4981C397602B +:201EC000DD6EBEDD66BFED4BCF910946042015DD6EC0DD66C17DB4280B11F1883E00213744 +:201EE0006CCD4981DD6EBEDD66BFED4BCF91094604287ADD6EBEDD66BFED4BCF91094E0647 +:201F000000DD6EC2DD66C3A7ED422861DD6EBEDD66BFED4BCF91094E0600C5DD6EC2DD663A +:201F2000C3E5DD6EBEDD66BFE5210989E53E0021BD6FCD4981F1F1F1F13E0021FA65CD49B7 +:201F4000817DB42828DD6EBEDD66BFED4BCF91094E0600DD71C2DD70C3210400394D44DD93 +:201F60005EBEDD56BF3E00218F64CD4981DD6EBEDD66BFED4BCF91097EB7C29760DD7EC0B5 +:201F8000E6006FDD7EC1E6F0673E60ACB52825DD7EC0E6006FDD7EC1E6F0673E20ACB52897 +:201FA00013210C00395E2356234E2346EB7DB4B1B0C24460DD6EC2DD66C3E5DD6EC0DD66CE +:201FC000C1E5DD6EBEDD66BFE5213889E53E0021BD6FCD4981F1F1F1F13E0021FA65CD49EA +:201FE000817DB4285DAFDD77C2DD77C3AFDD77C0DD77C1210400394D44DD5EBEDD56BF3EDE +:2020000000218F64CD49812AA7912322A7911104003E0021C963CD4981DD75BCDD74BD01E2 +:202020001E00C54D44119D913E0021B86CCD4981E1DD4EBCDD46BD1104003E00210864CD7E +:2020400049811853DD6EC2DD66C3E5DD6EBEDD66BFE5218489E53E0021BD6FCD4981F1F14C +:20206000F13E0021FA65CD49817DB4282ADD36C201DD36C300210400394D44DD5EBEDD56D0 +:20208000BF3E00218F64CD4981DD5EBEDD56BF3E0021865DCD4981DD34BE2003DD34BFC34F +:2020A000755EC33281CDA081FAFF1112006960A7ED523019DD6E04DD660529DD4E02DD46C5 +:2020C00003090118000946236668C39E61011201DD6E04DD6605A7ED423048213C00DD4E58 +:2020E00002DD46030946236668DD75FADD74FB7DB42006210000C39E61DD5EFADD56FB3E05 +:202100000021C963CD4981DD75FEDD74FFE5DD6E04DD6605294D44E10901DCFF0946236667 +:2021200068187B213E00DD4E02DD46030946236668DD75FADD74FB7DB42005210000185E2D +:20214000DD5EFADD56FB3E0021C963CD4981DD75FEDD74FF21EEFEDD4E04DD460509DD759B +:20216000FADD74FB6C260029DD4EFEDD46FF095623666ADD75FCDD74FDEB3E0021C963CDE2 +:202180004981DD75FEDD74FFE5DD7EFAE6FF6FDD7EFBE60067294D44E10946236668C332D4 +:2021A00081CDA081FAFF1112006960A7ED52301EDD6E04DD660529DD4E02DD460309011862 +:2021C0000009DD4E0ADD460B712370C3F462011201DD6E04DD6605A7ED423067213C00DD24 +:2021E0004E02DD46030946236668DD75FADD74FB7DB4200B11BA893E0021376CCD4981DD6B +:202200005EFADD56FB3E0021C963CD4981DD75FEDD74FFE5DD6E04DD6605294D44E1090155 +:20222000DCFF09DD4E0ADD460B712370DD4EFEDD46FFDD5EFADD56FB3E00210864CD498143 +:20224000C3F462213E00DD4E02DD46030946236668DD75FADD74FB7DB4200B11BA893E00ED +:2022600021376CCD4981DD5EFADD56FB3E0021C963CD4981DD75FEDD74FF210A00397ED626 +:202280001277237EDE0177DD6E04DD66056C260029DD4EFEDD46FF0946236668DD75FCDDB6 +:2022A00074FD7DB4200B11BA893E0021376CCD4981DD5EFCDD56FD3E0021C963CD4981DDFE +:2022C00075FEDD74FFE5DD7E04E6FF6FDD7E05E60067294D44E109DD4E04DD4605712370F7 +:2022E000DD4EFEDD46FFDD5EFADD56FB3E00210864CD4981C33281CDA081F6FF211200DD65 +:202300004E02DD4603095623666ADD75FCDD74FD2114000946236668DD75FEDD74FF4D44B3 +:20232000DD5EFCDD56FD3E0021E56ACD4981DD75FADD74FB7DA43C2006210000C3C66321A8 +:202340000800DD4E02DD4603094E23460B702B71ED4BBD91DD6EFADD66FBA7ED42381821FB +:202360000600DD4E02DD4603094E2346DD6EFADD66FBA7ED42381221D189E53E0021BD6FB6 +:20238000CD4981F1210000183D1104003E0021C963CD4981DD75F8DD74F9010200C54D441B +:2023A000210E00395D543E0021B86CCD4981E1DD4EF8DD46F91104003E00210864CD498153 +:2023C000DD6EFADD66FBC33281CD3D8121D191E54B42ED5B9B913E0021A04CCD4981F13EFF +:2023E00002ACB5281DDD6E02DD6603E521FD89E53E0021BD6FCD4981F1F13E00210E71CD82 +:20240000498121D191C33281CD3D81C54B42ED5B9B913E0021454DCD4981F13E02ACB52866 +:202420001DDD6E02DD6603E521178AE53E0021BD6FCD4981F1F13E00210E71CD4981C332F2 +:2024400081CDA081FEFF0603DD5E02DD5603CD1F812ABD9119EB3E0021C963CD4981DD7537 +:20246000FEDD74FF014000C5DD4E04DD4605C5DD7E02E6075FDD7E03E600570606CD298125 +:2024800019EB3E0021B86CC1CD4981E1C33281CDA081FEFF0603DD5E02DD5603CD1F812A08 +:2024A000BD9119EB3E0021C963CD4981DD75FEDD74FF014000C5DD7E02E6075FDD7E03E615 +:2024C00000570606CD2981194D44DD5E04DD56053E0021B86CCD4981E1DD4EFEDD46FFC5F6 +:2024E0000603DD5E02DD5603CD1F812ABD9119EB3E00210864C1CD4981C33281CDA081FCF4 +:20250000FF0605DD5E04DD5605CD1F814B42DD5E02DD56033E0021A560CD4981DD75FEDDA5 +:2025200074FF7DB4200B11328A3E0021376CCD4981DD5EFEDD56FF3E0021C963CD4981DDFC +:2025400075FCDD74FD011000C5DD4E0ADD460BE5DD7E04E61F6FDD7E05E60067292929297A +:20256000EBE119EB3E0021B86CCD4981E1C33281CDA081FCFF0605DD5E04DD5605CD1F8142 +:202580004B42DD5E02DD56033E0021A560CD4981DD75FEDD74FF7DB4200B11328A3E002118 +:2025A000376CCD4981DD5EFEDD56FF3E0021C963CD4981DD75FCDD74FD011000C5E5DD7EA2 +:2025C00004E61F6FDD7E05E60067292929294D44E1094D44DD5E0ADD560B3E0021B86CCD53 +:2025E0004981E1DD4EFCDD46FDDD5EFEDD56FF3E00210864CD4981C33281CDA081ECFF11BC +:20260000548C3E00216B6DCD49812A208C7DB4280F214D8AE53E0021BD6FCD4981F1182D99 +:20262000213C8CE5011400210200395D543E00219171CD4981F17DB4280EDD7EECFE792874 +:202640000CDD7EECFE5928052100001803210100C33281CDA081F8FFDD36FC01DD36FD00CA +:20266000DD6E02DD6603DD75FEDD74FF2BDD75FEDD74FF4D44210000CDE4813076DD6EFC8B +:20268000DD66FD29DD4E04DD46050946236668DD75FADD74FB7EFE2D2059DD6EFADD66FBFD +:2026A000237EFE792831DD6EFADD66FB237EFE592825DD6EFADD66FBE521508AE5216C8C80 +:2026C000E53E0021467FCD4981F1F1F11101003E0021787FCD49812A208C2322208CDD34B0 +:2026E000FC2003DD34FDDD6EFEDD66FF2BDD75FEDD74FF3E01DDAEFEDDB6FF281D21638AAA +:20270000E5216C8CE53E0021467FCD4981F1F11101003E0021787FCD4981DD6EFCDD66FDB3 +:2027200029DD4E04DD4605094E234611998D3E00217673CD4981210280E521998DE53E0051 +:2027400021EF7CCD4981F1F122978DCB7C282E217C8AE53E0021BD6FCD4981F111548C3E43 +:2027600000216B6DCD498111998D3E0021D772CD49811101003E0021787FCD49811104003F +:202780003E0021C963CD4981DD75F8DD74F9011E00C5019D91EB3E0021B86CCD4981E12A60 +:2027A0009D9101C631A7ED42285E219D914E2346C52A9B91E521898AE53E0021BD6FCD49D7 +:2027C00081F1F1F13E0021FA65CD49817DB4200B1101003E0021787FCD498121C631229D1E +:2027E00091211E00E5DD4EF8DD46F9119D913E0021B86CCD4981E1DD4EF8DD46F911040057 +:202800003E00210864CD49812A9F9101FBFF09E521A1914E2346C521A3914E2346C52199B9 +:202820008DE521B68AE53E0021BD6FCD4981F1F1F1F1F13E0021FA65CD49817DB4200B1147 +:2028400001003E0021787FCD4981ED4BAD912AAF91A7ED42EB3E00211A7DCD498122CB91DE +:202860007DB4200BDD36FAF0DD36FB8AC3F068ED4BAD912AAF91A7ED42E50E00ED5BCB91FF +:202880003E00218C6CCD4981E1ED4BAF912AB191A7ED42EB3E00211A7DCD498122CD917D3A +:2028A000B4200ADD36FAFDDD36FB8A1843ED4BAF912AB191A7ED42E50E00ED5BCD913E00AC +:2028C000218C6CCD4981E12AA19129292922BB91ED4B9F91ED43BD91EB3E00211A7DCD4945 +:2028E0008122CF917DB4202DDD36FA0ADD36FB8BDD6EFADD66FBE521168BE5216C8CE53E5C +:202900000021467FCD4981F1F1F11101003E0021787FCD49812ABB91E50E00ED5BCF913E19 +:2029200000218C6CCD4981E121318BE53E0021BD6FCD4981F111548C3E00216B6DCD498172 +:202940003E0021EA4DCD4981214C8BE53E0021BD6FCD4981F111548C3E00216B6DCD49819B +:202960003E0021DF52CD4981216E8BE53E0021BD6FCD4981F111548C3E00216B6DCD49815F +:202980003E00218655CD498121928BE53E0021BD6FCD4981F111548C3E00216B6DCD498171 +:2029A0003E00214E5DCD498121B78BE53E0021BD6FCD4981F111548C3E00216B6DCD49815C +:2029C0003E0021685ECD4981ED5B978D3E0021C270CD498121D68BE53E0021BD6FCD49811E +:2029E000F11100003E0021787FCD4981C33281CDA081FAFFDD6E0ADD660BDD75FCDD74FD4C +:202A0000DD6E10DD6611E5DD6E0EDD660FE5DD6EFCDD66FD010000CD6F81D2E26ADD4E0EF6 +:202A2000DD460FDD6EFCDD66FD3E0284677DE6005F7CE6FE573E0021F06CCD4981DD75FE97 +:202A4000DD74FFDD4EFCDD46FDA7ED42010002A7ED42301B0609DD5EFCDD56FDCD1F813EC4 +:202A60000021C963CD4981DD75FADD74FB1808DD36FA99DD36FB8FDD4EFCDD46FDDD6EFEE7 +:202A8000DD66FFA7ED42E579E6FF6F78E60167DD5EFADD56FB194D44DD5E0ADD560BDD6ECB +:202AA000FCDD66FDA7ED52DD5E02DD560319EB3E0021B86CCD4981E1DD4EFADD46FBC50674 +:202AC00009DD5EFCDD56FDCD1F813E00210864C1CD4981DD6EFEDD66FFDD75FCDD74FDC30C +:202AE000006AC33281CDA081F4FFDD6E02DD6603DD75FADD74FBDD4E04DD4605DD6EFADD71 +:202B000066FBA7ED42D2316CDD4E04DD4605DD6EFADD66FB3E0284677DE6005F7CE6FE5791 +:202B20003E0021F06CCD4981DD75FCDD74FD0609DD5EFADD56FBCD1F813E0021C963CD4927 +:202B400081DD75F4DD74F5DD7EFAE6FF4FDD7EFBE6014709DD75F6DD74F7DD6EFADD66FB3F +:202B6000DD75F8DD74F9DD4EFCDD46FDDD6EF8DD66F9A7ED42D2226CDD6EF6DD66F7460400 +:202B8000CA0F6CDD4E02DD4603DD6EF8DD66F9A7ED42292929DD75FEDD74FFAFDD77F8DD55 +:202BA00077F9010700DD6EF8DD66F9A7ED42301DDD6EF6DD66F7DD46F83E01CD0782A6200A +:202BC00002180ADD34F82003DD34F918D5210A00397EDD86F877237EDD8EF977DD6EF6DD60 +:202BE00066F7DD46F83E01CD0782B677DD4EF4DD46F5C50609DD5EFADD56FBCD1F813E0082 +:202C0000210864C1CD4981DD6EFEDD66FF1825DD34F62003DD34F7DD34F82003DD34F9C3DC +:202C2000666BDD6EFCDD66FDDD75FADD74FBC3F66A21FFFFC33281CD3D81D521DE8BE53EDF +:202C40000021BD6FCD4981F1F111548C3E00216B6DCD49811101003E0021787FCD4981C32D +:022C60003281BF +:20038B0063616E2774207365656B3A200063616E277420726561643A200063616E27742093 +:2003AB0077726974653A2000496E6F64652025642077697468206D6F64652030256F206907 +:2003CB0073206E6F74206F6620636F727265637420747970652E205A61703F2000496E6F47 +:2003EB0064652025642073696E676C7920696E64697265637420626C6F636B2025642069FB +:20040B0073206F7574206F662072616E676520776974682076616C7565206F662025752ECE +:20042B00205A61703F2000496E6F64652025642073696E676C7920696E6469726563742027 +:20044B00626C6F636B202564206973207061737420656E64206F662066696C652077697489 +:20046B00682076616C7565206F662025752E205A61703F2000496E6F646520256420646FBA +:20048B0075626C7920696E64697265637420626C6F636B202564206973206F7574206F66E6 +:2004AB002072616E676520776974682076616C7565206F662025752E205A61703F2000491B +:2004CB006E6F646520256420626C6F636B202564206973206F7574206F662072616E676558 +:2004EB0020776974682076616C7565206F662025752E205A61703F20004672656520696ED8 +:20050B006F646520636F756E7420696E20737570657220626C6F636B206973202575207395 +:20052B00686F756C642062652025752E204669783F20002020202020202020526562756928 +:20054B006C642066726565206269746D6170733F2000447572696E672066726565206C696F +:20056B00737420726567656E65726174696F6E20735F746672656520776173206368616E39 +:20058B0067656420746F2025642066726F6D2025642E0A00496E64697265637420626C6F30 +:2005AB00636B20256420696E20696E6F64652025752076616C7565202575206D756C746997 +:2005CB00706C7920616C6C6F63617465642E204669783F2000536F7272792E2E2E204E6F98 +:2005EB00206D6F7265206672656520626C6F636B732E0A00426C6F636B20256420696E20DA +:20060B00696E6F64652025752076616C7565202575206D756C7469706C7920616C6C6F6344 +:20062B00617465642E204669783F20004469726563746F727920696E6F6465202564206828 +:20064B00617320696D70726F706572206C656E67746820282564206578747261292E2046B9 +:20066B0069783F20004469726563746F727920656E747279202573252D312E31347320685F +:20068B006173206F75742D6F662D72616E676520696E6F64652025752E205A61703F200006 +:2006AB004469726563746F727920656E747279202573252D312E31347320706F696E74732A +:2006CB0020746F20626F67757320696E6F64652025752E205A61703F20004D6F72652074E4 +:2006EB0068616E20323534206C696E6B7320746F20696E6F64652025752E0A4E6F742065E2 +:20070B006E6F756768206D656D6F72792E204653434B2061626F727465642E0A0044697227 +:20072B006563746F727920656E747279202573252D312E31347320636F6E7461696E7320E6 +:20074B00736C6173682E204669783F20002E00272E2720656E747279202573252D312E2A10 +:20076B007320706F696E747320746F2077726F6E6720706C6163652E204669783F20002EC7 +:20078B002E00272E2E2720656E747279202573252D312E2A7320706F696E747320746F203E +:2007AB0077726F6E6720706C6163652E204669783F20002F00496E636F6E73697374656E4C +:2007CB0074206465707468006C5F66256400536F7272792E2E2E204E6F20656D70747920B6 +:2007EB00736C6F747320696E20726F6F74206469726563746F72792E0A00496E636F6E7347 +:20080B00697374656E74206C696E6B20636F756E7400496E6F646520256420686173206C9F +:20082B00696E6B20636F756E742025642073686F756C642062652025642E204669783F2066 +:20084B00005573656C65737320696E6F64652025642077697468206D6F64652030256F202C +:20086B00686173206265636F6D652064657461636865642E204C696E6B20636F756E74200F +:20088B0069732025642E205A61703F2000496E6F646520256420686173206265636F6D6571 +:2008AB002064657461636865642E204C696E6B20636F756E742069732025642E204669789C +:2008CB003F20004D697373696E6720696E64697265637420626C6F636B0046726565206C29 +:2008EB0069737420697320636F72727570742E202044696420796F752072656275696C646F +:20090B002069743F0A0052656164206F6620626C6F636B202564206661696C65642E0A0084 +:20092B005772697465206F6620626C6F636B202564206661696C65642E0A004D6973736916 +:20094B006E6720626C6F636B20696E206469726563746F727900590A00496C6C6567616C83 +:20096B00207377697463682025730A0075736167653A206673636B205B2D795D2064657605 +:20098B006963650A0063616E2774206F70656E3A200044657669636520257820686173208F +:2009AB00696E76616C6964206D61676963206E756D6265722025642E204669783F20000AF4 +:2009CB00436865636B696E672025732077697468206673697A652025752C206973697A65F1 +:2009EB002025752C207273697A652025752E20436F6E6669726D3F2000696E6F64652062F3 +:200A0B0069746D617000626C6F636B206269746D6170006C696E6B20636F756E7473004E50 +:200A2B006F7420656E6F756768206D656D6F727920666F722025732E0A000A506173732051 +:200A4B00313A20436865636B696E6720696E6F6465732E0A005061737320323A20526562AE +:200A6B0075696C64696E672066726565206269746D6170732E0A005061737320333A2043EE +:200A8B006865636B696E6720626C6F636B20616C6C6F636174696F6E2E0A00506173732012 +:200AAB00343A20436865636B696E67206469726563746F727920656E74726965732E0A003A +:200ACB005061737320353A20436865636B696E67206C696E6B20636F756E74732E0A0044A3 +:110AEB006F6E652E0A0A0050414E49433A2025730019 +:020B34000000BF +:202C6200CD3D81DD6E04DD66052BDD7504DD7405237DB42812DD6E02DD660323DD7502DDE4 +:202C820074032B360018DCC33281CD3D81DD6E0ADD660B2BDD750ADD740B237DB42814DD72 +:202CA2006E02DD660323DD7502DD74032BDD46047018DAC33281CD3D81DD6E0ADD660B2B0E +:202CC200DD750ADD740B237DB42820DD6E02DD660323DD7502DD74032B46DD6E04DD660538 +:202CE20023DD7504DD74052B7018CEC33281CD3D814B42DD6E04DD6605CDE4813008DD6EA8 +:202D020004DD66051806DD6E02DD6603C33281CD3D81EBCDE481300469601806DD6E02DD51 +:052D22006603C33281CD +:130033000405C8CB3ACB1B10FAC90405C8EB2910FDEBC985 +:202D2700CDA081FCFF2110003901020009DD75FCDD74FDDD4E0ADD460BED43228CE5DD4E40 +:202D47000CDD460D11228C3E00213475CD4981F1DD75FEDD74FF2A228C3600DD6EFEDD66A7 +:042D6700FFC33281F3 +:180B360000000000FFFF0000FFFFFFFF2000000000000000000000008D +:0B004600DDF9DDE1D1C1F1ED3939C970 +:202D6B00CDA081F8FFAFDD77FEDD77FFDD7E02DDB6032078113C8C3E00216B6DCD49817D60 +:202D8B00B4201E11548C3E00216B6DCD49817DB4200F116C8C3E00216B6DCD49817DB428E7 +:202DAB000621FFFFC37B6F2A3A8CDD7502DD7403DD7E02DDB603282EDD5E02DD56033E00A4 +:202DCB00216B6DCD49817DB4280621FFFFC37B6F211600DD4E02DD4603095623666ADD75FF +:202DEB0002DD740318CA210000C37B6F210C00DD4E02DD4603097EE680CAD16E210600DD48 +:202E0B004E02DD4603095E23560A6F030A67A7ED52DD75FADD74FB7DB4CACF6E210600DDAA +:202E2B004E02DD46030946236668DD75F8DD74F9DD6EFADD66FBE5DD4EF8DD46F9210A006B +:202E4B00DD5E02DD5603195E23563E00217E6FCD4981F1DD75FCDD74FD4D44210000CDE431 +:202E6B0081301E210000397EDD86FC77237EDD8EFD77210200397EDD96FC77237EDD9EFD71 +:202E8B0077DD4EFCDD46FD210000CDE48138A1DD7EFCDDA6FD3C20092A928D3E04ADB428ED +:202EAB008FDD7EFADDB6FB281B210C00DD4E02DD4603097EF60077237EF60277DD36FEFFBE +:202ECB00DD36FFFF186A210C00DD4E02DD4603097EE640285BDD6E02DD66034E2346DD6E0F +:202EEB0002DD660323235623666AA7ED42DD75FADD74FB4D44210000CDE481303321010019 +:202F0B00E5DD4EFADD46FBA7210000ED427C079F4F41C5E5210A00DD4E02DD4603095E2323 +:202F2B00563E0021EC6FCD4981F1F1F1CB782800210C00DD4E02DD4603097EE63F77237E5D +:202F4B00E6FA7769602323E5210400DD4E02DD460309E5210600095623666AE56960C1715C +:202F6B002370E1712370E1712370DD6EFEDD66FFC33281CD3D81DD6E0ADD660BE5C5D5211A +:202F8B002400E53E0021DC7FCD4981F1F1F1F1C33281CD3D81D53E0021D770CD4981D1190B +:202FAB00EB3E00217673CD4981DD6E02DD6603C33281CDA081FCFF210E003901020009DDF9 +:202FCB0075FCDD74FDE5DD4E0ADD460B11548C3E00213475CD4981F1DD75FEDD74FFC332C9 +:202FEB0081CD3D81DD6E0EDD660FE5DD6E0CDD660DE5DD6E0ADD660BE5D5211900E53E01E3 +:20300B00214C44CD4981F1F1F1F1F1C38282CDA081FEFF2A3A8CDD75FEDD74FF11548C3E37 +:20302B0000216B6DCD4981116C8C3E00216B6DCD4981DD7EFEDDB6FF283CDD5EFEDD56FF64 +:20304B003E00216B6DCD4981210A00DD4EFEDD46FF095E23563E0021C270CD4981210A00EE +:20306B000936FF2336FF211600095623666ADD75FEDD74FF18BCC33281C5D52A848C7DB437 +:20308B002002182E21000022848C1101003E00212473CD49817DB4280C21608C7EF601776D +:1730AB00237EF600770E001119703E01213944CD4981D1C1C33881D6 +:200B4E000000D193D193D193D193D1940000100000000000000000000000D194D194D19453 +:200B6E00D194D19501002000000000000000000000007A8C7A8C7A8C7A8C7C8C0200220037 +:0C0B8E000000000000000000000001005A +:2030C200CD3D81D5210600E53E0021DC7FCD4981F1F1C33281CDA081FEFFDD6E02DD66035B +:2030E200DD75FEDD74FFDD6EFEDD66FFAFB6280ADD34FE2003DD34FF18ECDD4E02DD460373 +:20310200DD6EFEDD66FFA7ED42C33281C5D5210000E5210000E51106003E01210040CD4963 +:2031220081F1F13E0021C77FCD49814D441106003E00219D73CD49813E00211473CD4981C3 +:20314200210000E5210000E51109003E01210040CD4981F1F13E0021C77FCD49814D441150 +:2031620009003E00219D73CD498111FF003E00217C71CD4981D1C1C33881CD3D81D5210BB1 +:2031820000E53E0021DC7FCD4981F1F1C33281CDA081FAFFDD71FADD70FBDD6E02DD660395 +:2031A200DD75FEDD74FFDD6EFADD66FB2BDD75FADD74FB237DB42851DD5E0ADD560B3E0198 +:2031C20021E241CD4981DD75FCDD74FD7DA43C2018DD6EFEDD66FFDD4E02DD4603A7ED422D +:2031E2002005210000184A1820DD46FCDD6E02DD660323DD7502DD74032B703E0ADDAEFC06 +:20320200DDB6FD20021802189DDD6E02DD66033600210C00DD4E0ADD460B097EE6004723FB +:203222007EE602B028052100001806DD6EFEDD66FFC33281CDA081FAFFDD6E02DD6603DDB2 +:2032420075FADD74FBDD71FCDD70FDDD6EFCDD66FD23DD75FCDD74FD2B46DD70FFDD6EFAD5 +:20326200DD66FB23DD75FADD74FB2B4EDD71FE79B82008AFDDB6FE280218D0DD4EFF0600B3 +:20328200DD6EFE2600A7ED42C33281CDA081FEFFDD6E02DD6603DD75FEDD74FFDD6EFEDD2D +:2032A20066FFAFB6280ADD34FE2003DD34FF18ECDD4E02DD4603DD6EFEDD66FFA7ED42E531 +:2032C200DD4E02DD46031102003E00217E6FCD4981F1C3FD82CD3D817BB22008DD3602E893 +:2032E200DD36038BDD5E02DD5603CD8D7211EE8BCD8D72ED5B928D3E01212540CD4981DDF6 +:123302007502DD7403EBCD8D7211F18BCD8D72C3328168 +:0B0AFC006572726F72003A20000A0061 +:20331400211500E53E0021DC7FCD4981F1C33881CDA081E2FF210000394D44DD5E02DD5696 +:20333400033E00215F73CD49817DA43C2812DD7EE6E6006FDD7EE7E6F0673E20ACB5280516 +:203354002100001803210100C33281CD3D81C5D5210D00E53E0021DC7FCD4981F1F1F1C366 +:023374003281A4 +:19005100E1C5D5DDE5DD210000DD39E9E526806F7EED2039ED3939E3E973 +:20337600CD3D8159503E0021D770CD498123E5DD4E04DD4605DD5E02DD56033E0121F24260 +:07339600CD4981F1C3328132 +:20006A00F57EA3775F237EA27757237EA1774F237EA077472B2B2BF1C9EBE3D5C5F5D5C540 +:20008A00EB210F00397EEE8047722B4E73EBE17CEE8067ED42E1200AEB2B7E2B6E67EBA7F4 +:0A00AA00ED52C178C1E1D13333C932 +:17339D00CD3D81C5D5211000E53E0021DC7FCD4981F1F1F1C3328144 +:2000B400E1C5D5DDE5DD210000DD395E235623EB39F9EBE9EBE3F5DDE5DD210000DD39C592 +:2000D400D5DD5609DD7409DD5E08DD7508AFCD0483CD2A82E1C1B7CCC682C4F681DDE1F131 +:0400F400D13333C908 +:2033B400CDA081FAFFAFDD77FBDD77FC59503E0021D770CD4981DD75FDDD74FEDD6E04DD14 +:2033D40066057EFE2D2014DD6E04DD660523DD7504DD74052B46DD700A180EAFDDB60A28C9 +:2033F40008DD34FD2003DD34FEDD7E10DDA6113C281DDD4EFDDD46FEDD6E10DD6611CDE448 +:2034140081300CDD6E10DD6611DD75FDDD74FEDD4EFDDD46FEDD6E0EDD660FCDE481300C2C +:20343400DD6EFDDD66FEDD750EDD740FDD6E0EDD660FDD75FBDD74FC211400397EDD96FD8E +:2034540077237EDD9EFE77DD7E0EDDB60F2009DD7EFDDDB6FECA2B75DD7E08DDB609203476 +:20347400DD7E0EDDB60F282CDD7EFDDDB6FE280FAFDDB60A2809DD7E0CFE3020021823DD6D +:20349400460CDD70FADD6E0EDD660F2BDD750EDD740F184EDD7EFDDDB6FE2833AFDDB60AF3 +:2034B400280CDD460ADD70FADD360A001812DD6E04DD660523DD7504DD74052B46DD70FAEB +:2034D400DD6EFDDD66FE2BDD75FDDD74FE1813DD460CDD70FADD6E0EDD660F2BDD750EDDD2 +:2034F400740FDD4E02DD4603DD5EFA16003E01218145CD4981DD7EFAFE0A20183E01DDAE7B +:2035140012DDB613200EDD5E02DD56033E00216B6DCD4981C35B74DD6EFBDD66FCC3FD8217 +:20353400CDA081A2FFAFDD77B0DD77B1210C00DD5E02DD5603197EE6034F237EE60047DD16 +:2035540071FDDD70FE210C00197EE6FC77237EE6FF77DD6E04DD6605AFB6CA397ADD6E04BC +:20357400DD66057EFE25C2EC793E02DDAEFDDDB6FE200EDD5E02DD56033E00216B6DCD49E0 +:2035940081AFDD77A4DD77A5DD36B300DD36B220DD36ACFFDD36ADFFAFDD77AADD77ABDD45 +:2035B40036A8FFDD36A9FFDD36AE0ADD36AF00211B0039DD75B5DD74B6DD36B400AFDD7785 +:2035D400A6DD77A7AFDD77A2DD77A3DD34042003DD3405DD6E04DD66057EFE30380BDD6E7B +:2035F40004DD66053E39BE3002186521000039010A00CDBC82DD6E04DD66054E060021D03B +:20361400FF094D44210000397E8177237E8877DD7EAADDB6AB280EDD6EA2DD66A3DD75A847 +:20363400DD74A91821DD7EA2DDB6A3200DDD7EB2FE202006DD36B230188ADD6EA2DD66A328 +:20365400DD75ACDD74ADDD34042003DD34051883DD6E04DD66055ECDEB82140000202123CA +:203674002A2B2D2E5862636468696C6F70737578E879F077F8777B79CB77C17747775C7753 +:2036940052775C773879B777E6773C77BE76C976DD76D6761A79C976AE76DD6E04DD6605EC +:2036B4002BDD7504DD7405C3EC79DD36A401DD36A500C3D875DD6E04DD660546DD70B3C3D7 +:2036D400D875DD36B401C3D875216800397EC60277237ECE00772B6E672B2B46236668DDE2 +:2036F40075A2DD74A3DD7EAADDB6AB280EDD6EA2DD66A3DD75A8DD74A9182ADD6EA2DD66F9 +:20371400A3DD75ACDD74ADCB7C281ADD36A401DD36A500DD4EA2DD46A3A7210000ED42DD96 +:2037340075ACDD74ADC3D875DD36AA01DD36AB00C3D875DD36A601DD36A700C3D875AFDDAA +:2037540077A6DD77A7C3D875210A00E5211D0039E5DD7EA6DDB6A7281D216C00397EC60433 +:2037740077237ECE00772B6E6701FCFF095E2356234E2346181A216C00397EC60277237ECC +:20379400CE00772B6E672B2B5E23567A079F4F413E00218F7ACD4981F1F1DD75B5DD74B604 +:2037B400C39F79DD36AE02DD36AF001837DD36AE08DD36AF00182DAFDD77A6DD77A7DD36BF +:2037D400B230DD36AC05DD36AD00DD36A808DD36A900DD36AE10DD36AF001808DD36AEF08C +:2037F400DD36AFFFDD7EA6DDB6A7281E216800397EC60477237ECE00772B6E6701FCFF0907 +:203814005E2356234E2346EB1819216800397EC60277237ECE00772B6E672B2B46236668D5 +:20383400010000DD75B9DD74BADD71BBDD70BCDD5EAEDD56AFD5211D003901040009E5DD64 +:203854004EBBDD46BCDD5EB9DD56BA3E01219346CD4981F1F1DD75B5DD74B6DD36B7F3DD31 +:2038740036B88BAFDDB6B4CA17793E02DDAEAEDDB6AF200ADD36B7F4DD36B88B18493E08CB +:20389400DDAEAEDDB6AF2018DD7EB9DDB6BADDB6BBDDB6BC2808DD36B7F7DD36B88B1827DD +:2038B4003E10DDAEAEDDB6AF200ADD36B7F9DD36B88B18133E0FDDAEAEDDA6AF3C2008DDC4 +:2038D40036B7FCDD36B88BDD6EB7DD66B8AFB62832DD36B200DD4EB7DD46B8211B00395D85 +:2038F400543E00217673CD4981DD4EB5DD46B6211B00395D543E00219D6FCD4981DD75B599 +:20391400DD74B6C39F79DD6E04DD6605234E0600DD71A2DD70A379B02808DD34042003DD55 +:203934003405181C216800397EC60277237ECE00772B6E672B2B46236668DD75A2DD74A32C +:20395400DD46A2DD6EB5DD66B670DD6EB5DD66B6233600AFDDB6B4280CDD6EB5DD66B6466A +:20397400DD70B21822181C216800397EC60277237ECE00772B6E672B2B46236668DD75B5CD +:20399400DD74B6DD36B220DD36B300DD6EFDDD66FEE5DD6EA8DD66A9E5DD6EACDD66ADE563 +:2039B400DD6EB2E5DD6EB3E5DD6EA4DD66A5E5DD4EB5DD46B6DD5E02DD5603CDB473EB2146 +:2039D4000C0039F9EB4D44210E00397E8177237E8877180218021842DD4E02DD4603DD6E6F +:2039F40004DD66055E16003E01218145CD4981DD34B02003DD34B1DD6E04DD66057EFE0A73 +:203A140020183E01DDAEFDDDB6FE200EDD5E02DD56033E00216B6DCD4981DD34042003DD7E +:203A34003405C36675210C00DD4E02DD4603097EDDB6FD77237EDDB6FE773E02DDAEFDDD3F +:203A5400B6FE200EDD5E02DD56033E00216B6DCD49813E01DDAEFDDDB6FE2016210400DD9F +:1B3A74004E02DD460309E5210600094E2346E1712370DD6EB0DD66B1C33281A2 +:0C0B0700003062003000307800305800F0 +:203A8F00CDA081FEFFDD36FE41DDCB0D7E2816DD36FE61DD4E0CDD460DA7210000ED42DDBC +:203AAF00750CDD740DDD6EFEE53E0ADDAE0CDDB60D20043E011801AF4FC5DD6E0CDD660D85 +:203ACF00E5DD6E0ADD660BE5DD4E04DD4605DD5E02DD56033E0021F27ACD4981F1F1F1F17A +:033AEF00C332815E +:1200F800C5E5F57CEE806778EE8047F1A7ED42E1C1C9A7 +:203AF200CDA081D6FFDD6E0ADD660BDD75F8DD74F921000039DD75FADD74FB212C0039DD65 +:203B120075FCDD74FD213A00397ED60A77DD4E0CDD460D212400CDE4813811010280DD6E76 +:203B32000CDD660D3E80AC67ED423003C3757CDD6EFCDD66FD23237EE60047237EE680B001 +:203B52002831AFDDB60E282BDD6EF8DD66F923DD75F8DD74F92B362DDD4E04DD4605DD6EF1 +:203B720002DD6603CDAF83DD7502DD7403DD7104DD7005DD6EFCDD66FD23237E23B620025A +:203B9200184EDD6E0CDD660D7C079F4F41C5E5DD4E04DD4605DD6E02DD6603CD6283E5DD4C +:203BB2006EFADD66FB23DD75FADD74FB2BC171212C0039DD5E0CDD560D7A079F4F41CD4863 +:203BD20083DD6EFCDD66FD23237E23B620B41830DD5E02DD5603DD4E0CDD460DCDFE81DD0D +:203BF2006EFADD66FB23DD75FADD74FB2B73DD5E02DD5603CD0E82DD6EFCDD66FD73237255 +:203C1200DD6EFCDD66FD7E23B620C5210000394D44DD6EFADD66FBA7ED42DD75FFAFDDB6F8 +:203C3200FF2840DD6EFADD66FB2BDD75FADD74FB46DD70FE78FE0A300ADD7EFEC630DD77D7 +:203C5200FE1809DD7EFEDD8610DD77FEDD6EF8DD66F923DD75F8DD74F92BDD46FE70DD3511 +:203C7200FF18BADD6EF8DD66F93600DD6E0ADD660BC33281CDA081FEFFDD36FE41DDCB0BA3 +:203C92007E2816DD36FE61DD4E0ADD460BA7210000ED42DD750ADD740BDD6EFEE50E01C5D0 +:203CB200DD6E0ADD660BE5DD6E04DD6605E53E0ADDAE0ADDB60B200DDD5E02DD56037A0752 +:1D3CD2009F4F411809DD5E02DD56030100003E0021F27ACD4981F1F1F1F1C3328175 +:08010A002CC024C00CC004C984 +:203CEF00CD3D81DD6E0EDD660FE5DD6E0CDD660DE5DD6E0ADD660BE5211400E53E0021DC31 +:0B3D0F007FCD4981F1F1F1F1C3328159 +:1E011200F5E5CDA682EBE1F1C90405C88710FDC9F5E5CDA6827B2F5F7A2F57E1F1C9D9 +:203D1A00CDA081FAFFDD6E02DD6603232323CB3CCB1DCB3CCB1D23DD75FEDD74FF2AD59571 +:203D3A00DD75FCDD74FD7DB42011DD36FCD1DD36FD9521D19522D39522D595DD6EFCDD66BF +:203D5A00FD232346236668DD75FADD74FBDD6EFADD66FB232346236668DD4EFADD46FBA74D +:203D7A00ED42CA0A7EDD6EFADD66FB462366682929DD4EFADD46FB09E5030369604E2346E5 +:203D9A00E1A7ED42206ADD6EFADD66FB232346236668ED4BD595A7ED422015DD6EFADD6693 +:203DBA00FB23234623666823234623666822D595DD6EFADD66FB23237E23666F4E2346DD95 +:203DDA006EFADD66FB7E8177237E8877DD6EFADD66FB2323E5DD4EFADD46FB030369604EFF +:203DFA002346030369604E2346E1712370C3677DDD6EFADD66FB46236668DD4EFEDD46FF29 +:203E1A00A7ED42DAC87EDD6EFADD66FB46236668DD4EFEDD46FFA7ED42201CDD6EFCDD66F1 +:203E3A00FD2323E5DD4EFADD46FB030369604E2346E17123701856DD6EFEDD66FF2929DD6A +:203E5A004EFADD46FB0922D595DD6EFCDD66FD2323ED5BD5957323722AD5952323E5030301 +:203E7A0069604E2346E1712370DD6EFADD66FB46236668DD4EFEDD46FFA7ED42E52AD5956F +:203E9A00D1732372DD6EFADD66FB712370DD6EFCDD66FD22D595DD6EFADD66FB2323AF77A6 +:203EBA002377210400DD4EFADD46FB0918272AD595DD4EFADD46FBA7ED42204F1100043E2F +:203EDA000121FE46CD4981DD75FADD74FB7DA43C2006210000C33281DD6EFADD66FB360060 +:203EFA00233601DD6EFADD66FB2323AF772377210400DD4EFADD46FB09EB3E0121A144CD57 +:203F1A0049812AD595DD75FADD74FBDD6EFADD66FBDD75FCDD74FDDD6EFADD66FB23234663 +:0C3F3A00236668DD75FADD74FBC3677D4B +:0E013000B7C8CB28CB19CB1CCB1D3D20F5C981 +:203F4600CDA081FCFF2110003901020009DD75FCDD74FDE5DD4E0CDD460DDD5E0ADD560B91 +:203F66003E00213475CD4981F1DD75FEDD74FFC33281CD3D812A948D3A968DB5B4281201BE +:203F86000000DD5E02DD56033A968D2A948DCD4981DD5E02DD56033E00217C71CD4981C350 +:023FA600328166 +:20013E00F5210000010000DD36F82118021937DDCBFC16DDCBFD16DDCBFE16DDCBFF16DD29 +:20015E0035F8282ECB11CB10CB15CB14ED5238DD201078DD960738D5200879DD960638CDE6 +:18017E00180479DD96064F78DD9E074730C12BA718BDF1E56069C1C90A +:203FA800CD3D81DD6E0ADD660BE5C5D5211700E53E0021DC7FCD4981F1F1F1F1C332812183 +:143FC8000000E5210700E53E0021DC7FCD4981F1F1C3388144 +:20400000CD3D81DD6E0CDD660DE5DD6E0ADD660BE5D5211A00E53E01214C44CD4981F1F1A3 +:05402000F1F1C38282F2 +:20019600DDF9DDE1D13333F1ED3939C9B7C8FE083809414C652E00D60818F229CB11CB10B7 +:1A01B6003D20F8C92100003E11CB13CB123DC8CB15CB14ED4230F20918EFC1 +:20402500CDA08176FFAFDD77FEDD77FF2A888C7DB4282BDDCB037E200FED4B888CDD6E0211 +:20404500DD6603CDE4813803C3AA41DD6E02DD660329ED4B868C0946236668C3DF41DD4EA6 +:2040650002DD4603210000CDE4813803C3AA41210000E521FF8BE53E0021EF7CCD4981F1EF +:20408500F1DD75FADD74FBCB7C2803C3AA41218000E5210400394D44DD5EFADD56FB3E005C +:2040A50021A87FCD4981F1DD75F8DD74F94D44210000CDE481D2AA41AFDD77FCDD77FDDDC9 +:2040C5004EF8DD46F9DD6EFCDD66FDA7ED42D2A74121020039DD4EFCDD46FD097EFE0AC26E +:2040E5006F4121D795DD4EFEDD46FF09360011D7953E0121E846CD4981DD4E02DD4603A758 +:20410500ED42205D21000039E501200011D7953E01216644CD49814D44E171237079B020B1 +:2041250010DD5EFADD56FB3E0021C270CD49811874210000397E23666F7EFE20200B21009B +:204145000039342320013418E8DD5EFADD56FB3E0021C270CD498121000039462366681841 +:2041650079AFDD77FEDD77FF182D014F00DD6EFEDD66FFA7ED42301F21020039DD4EFCDDC8 +:2041850046FD0946DD6EFEDD66FF23DD75FEDD74FF2B11D7951970DD34FC2003DD34FDC308 +:2041A500C440C3934001118C11D7953E00217673CD4981210A00E511D7953E0021D770CD66 +:1D41C500498101D795094D44DD5E02DD56033E0021867CCD4981F121D795C33281AD +:200B13002F6C69622F6C69626572726F722E74787400556E6B6E6F776E206572726F7220E4 +:010B330000C1 +:040B9A000000000057 +:1A3FDC0021040039C5D55E2356234D44F7300622928D21FFFFD1C1C33881AD +:1901D0005E2356CDD582722B73C9F57D2F6F7C2F67792F4F782F47F1C981 +:2041E200CDA081FEFF210C00DD4E02DD4603097EE680280EDD5E02DD56033E00216B6DCDB8 +:204202004981210C00DD4E02DD4603097EE6104F237EE603473E10A9B0280621FFFFC3EF0F +:2042220042DD6E02DD660323234E2346DD6E02DD66035623666AA7ED42DAD542DD6E02DDDD +:2042420066032323E5210600DD4E02DD4603095E2356E17323726960732372DD6E02DD6624 +:2042620003E5210600DD4E02DD4603095E2356210800097E23666FA7ED52E5010100DD6E3A +:2042820002DD66035E23563E01211347CD4981F1F1DD75FEDD74FF7DB4200521FFFF184D50 +:2042A200DD6E02DD660323237EDD86FE77237EDD8EFF77210C00DD4E02DD4603097EF6400E +:2042C20077237EF60077210C00097EE6FF77237EE6FB77DD6E02DD66034E234603702B71F5 +:2042E2000B0A4F0600DD71FEDD70FF6960C33281CDA081FCFFDD6E02DD6603DD75FCDD7460 +:20430200FDDD71FEDD70FFDD6E0ADD660B2BDD750ADD740B237DB42820DD6EFEDD66FF2336 +:20432200DD75FEDD74FF2B46DD6EFCDD66FD23DD75FCDD74FD2B7018CEDD6E02DD6603C34D +:024342003281C6 +:1601E900F5C5E5784251676BED4CED6CED5C79858257E1C1F1C976 +:20434400CDA081FAFF2A8A8C2BDD75FADD74FB21FFFF228A8C3E0021000032968D22948D21 +:20436400DDCBFB7E2053010500DD5EFADD56FBCDD582212796195E23562346EBDD75FCDDCB +:2043840074FDDD70FE110500DD4EFADD46FBCDD582212A96194E2346DD5E02DD5603DD7E61 +:2043A400FEDD6EFCDD66FDCD4981DD6EFADD66FB2BDD75FADD74FB18A7C33281CD3D812AAD +:2043C4008A8CCB7C200E010A802A8A8C3E80AC67ED42380B210C0022928D21FFFF18533E0A +:2043E4000121444332968D22948DDD7E02DDB603DDB604283A010500ED5B8A8CCDD58221E3 +:20440400279619DD5604DD4E02DD46037123702372010500ED5B8A8CCDD582212A9619DD40 +:204424004E0ADD460B7123702A8A8C23228A8C210000C33281CD3D81210000E53E0121C00B +:0844440043CD4981F1C332812F +:020B9E00000055 +:20444C0021040039D55E2356234D44F7300822928D21FFFF4D44D1C33881CDA081FEFFDD5D +:20446C006E02DD660346DD70FE480600DD6E04DD6605A7ED422008DD6E02DD66031809AFA3 +:15448C00DDB6FE2006210000C33281DD34022003DD340318CAA1 +:1901FF00E3F5C54E2346237BEDB12002232309C35883DDF9DDE1D1C1C959 +:2044A100CDA081FCFF21FCFFDD4E02DD460309DD75FEDD74FF23237E23B6280621FFFFC34D +:2044C1007E452AD595DD75FCDD74FDDD4EFCDD46FDDD6EFEDD66FFA7ED423817DD6EFCDDCD +:2044E10066FD232346236668DD4EFEDD46FFA7ED423053DD6EFCDD66FD23234E2346DD6E68 +:20450100FCDD66FDA7ED423829DD4EFEDD46FFDD6EFCDD66FDA7ED423816DD6EFCDD66FDAA +:2045210023234E2346DD6EFEDD66FFA7ED4230021814DD6EFCDD66FD232346236668DD7568 +:20454100FCDD74FD1885DD6EFEDD66FF2323E5DD4EFCDD46FD030369604E2346E17123700B +:20456100DD6EFCDD66FD2323DD4EFEDD46FF712370DD6EFCDD66FD22D595210000C3328174 +:20458100CDA081FEFF3E00218470CD4981210C000946236668DD75FEDD74FF7DE640281855 +:2045A100DD5E04DD56053E00216B6DCD49817DB4280621FFFFC39046DD7EFEE6206FDD7E75 +:2045C100FFE603673E20ADB4280621FFFFC39046210800DD4E04DD4605095E23560A6F030A +:2045E1000A67A7ED523818DD5E04DD56053E00216B6DCD49817DB4280621FFFFC39046DDDA +:204601006E04DD66054E234603702B710B6960DD460270210C00DD4E04DD4605097EF6802F +:2046210077237EF600773E0ADDAE02DDB6032007DD7EFEE6012007DD7EFEE6022817DD5E40 +:2046410004DD56053E00216B6DCD49817DB4280521FFFF183ADD7EFEE6032818210400DDFC +:204661004E04DD460509E5210600094E2346E17123701816210400DD4E04DD460509E5214C +:204681000800094E2346E1712370DD6E022600C33281CDA081FEFFDD36FE41DDCB0D7E28EB +:2046A10016DD36FE61DD4E0CDD460DA7210000ED42DD750CDD740DDD6EFEE50E00C5DD6E0B +:2046C1000CDD660DE5DD6E0ADD660BE5DD4E04DD4605DD5E02DD56033E0021F27ACD4981E4 +:0746E100F1F1F1F1C3328198 +:20021800CB7A2818424BDD6607DD6E06CDC682CDF6815059DD7407DD75063E01DDCBFF7E03 +:20023800C8F5DD46FFDD4EFEDD66FDDD6EFCCDC682CDF681DD70FFDD71FEDD74FDDD75FC8A +:1E025800F1EE01C9C5D55E2356234E2346EBCD8783C3C18309097E23666FC1F1E3C9E5 +:1646E800CD3D81210A00E50100003E0121C148CD4981F1C33281B9 +:20027600EBE3F5DDE5DD210000DD39C5D5DD5609DD7409DD5E08DD7508CD2A82DDF9DDE1F5 +:20029600F1D13333C9EBE3F5DDE5DD210000DD39C5D5DD5609DD7409DD5E08DD7508CD2AFA +:0D02B60082E1C1CDC682DDE1F1D13333C953 +:1546FE00CD3D81D5211800E53E0021DC7FCD4981F1F1C3328180 +:1202C300F5AF956F3E009C673E00994F3E009847F1C943 +:20471300CDA081F8FFAFDD77FEDD77FF3E00218470CD4981DD7E02DDB6032818DD7E04DDF4 +:20473300B6052810DD7E0ADDB60B2808DD7E0CDDB60D2006210000C3BE48210C00DD4E0CC5 +:20475300DD460D0946236668DD75FADD74FB7DE680280EDD5E0CDD560D3E00216B6DCD4951 +:2047730081DD7EFAE6106FDD7EFBE603673E10ADB42806210000C3BE48DD4E0ADD460BDD3E +:204793005E04DD5605CDD582DD73FCDD72FDDD6E0CDD660D4E2346DD6E0CDD660D23237EE7 +:2047B30023666FA7ED42DD75F8DD74F9A7ED523839DD6EFCDD66FDE5DD6E0CDD660D4E23A9 +:2047D30046DD5E02DD56033E0121F242CD4981F1DD6E0CDD660D7EDD86FC77237EDD8EFDED +:2047F30077DD6EFCDD66FDC3BE48DD4EF8DD46F9210000CDE481302BDD6EF8DD66F9E5DDB1 +:204813006E0CDD660D4E2346DD5E02DD56033E0121F242CD4981F1DD6EF8DD66F9DD75FEA6 +:20483300DD74FFDD4EFEDD46FFDD6EFCDD66FDA7ED42E5DD6E02DD6603094D44210A00DD53 +:204853005E0CDD560D195E23563E0021A87FCD4981F1DD75F8DD74F9CB7C281C210C00DD74 +:204873004E0CDD460D097EF60077237EF60277AFDD77F8DD77F9181BDD7EF8DDB6F920130A +:20489300210C00DD4E0CDD460D097EF60077237EF60177DD6EF8DD66F9DD4EFEDD46FF099B +:0E48B300EBDD4E04DD4605CD0E82EBC33281F7 +:0902D500EB702B712B722B73C925 +:2048C100CDA081F8FFAFDD77FCDD77FDDD6E02DD6603DD75FEDD74FFDD6EFEDD66FF4E0690 +:2048E10000218C8C097EE610280ADD34FE2003DD34FF18E4DD6EFEDD66FF7EFE2D2012DD4E +:2049010034FC2003DD34FDDD34FE2003DD34FF1813DD6EFEDD66FF7EFE2B2008DD34FE203F +:2049210003DD34FFDD6E0ADD660BE5DD4E04DD4605DD5EFEDD56FF3E0121EF49CD4981F1F9 +:20494100DD75F8DD74F9DD71FADD70FBDD7EFCDDB6FD2805CDAF83180CDD4EFADD46FBDDDB +:204961006EF8DD66F9C38282CDA081FEFFDD36FEFFDD36FFFFDD5E021600218C8C197EE6B8 +:2049810008280FDD4E02060021D0FF09DD75FEDD74FFDD4E020600218C8C097EE604280FF7 +:2049A100DD4E02060021A9FF09DD75FEDD74FFDD4E020600218C8C097EE602280FDD4E0212 +:2049C100060021B0FF09DD75FEDD74FFDD4E04DD4605DD6EFEDD66FFCDE4813808DD36FEF2 +:2049E100FFDD36FFFFDD6EFEDD66FFC3FD82CDA081FAFF110280DD6E0ADD660B3E80AC67EB +:204A0100ED52380EDD4E0ADD460B212400CDE4813007AFDD770ADD770BDD6E02DD66034EB2 +:204A21000600218C8C097EE610280ADD34022003DD340318E4DD6E02DD66037EFE2B200ADD +:204A4100DD34022003DD3403186DDD7E0ADDB60B2065DD6E02DD66037EFE30205ADD6E02F8 +:204A6100DD6603237EEE20FE582017DD360A10DD360B00210800397EC60277237ECE007763 +:204A81001835DD6E02DD6603237EEE20FE422017DD360A02DD360B00210800397EC60277B3 +:204AA100237ECE00771810DD360A08DD360B00DD34022003DD3403DD7E0ADDB60B2008DD52 +:204AC100360A0ADD360B00AFDD77FADD77FBDD77FCDD77FDDD4E0ADD460BDD6E02DD66038A +:204AE1005ECD6949DD75FEDD74FF7DA43C282E21000039DD5E0ADD560B7A079F4F41CDCA61 +:204B01008321000039DD5EFEDD56FF7A079F4F41CD5E84DD34022003DD340318B7DD7E0475 +:204B2100DDB6052811DD6E02DD6603E5DD6E04DD6605C1712370DD4EFCDD46FDDD6EFADD66 +:204B410066FBC38282CD3D811600218C8C197EE604280EDD7E02EE206FDD7E03EE006718F6 +:204B610006DD6E02DD6603C33281CD3D811600218C8C197EE602280EDD7E02EE206FDD7E61 +:0F4B810003EE00671806DD6E02DD6603C33281A6 +:200BA0000101010101010101011111111111010101010101010101010101010101010101C5 +:200BC000102020202020202020202020202020204848484848484848484820202020202095 +:200BE000204242424242420202020202020202020202020202020202020202202020202081 +:200C000020444444444444040404040404040404040404040404040404040420202020014B +:200C20000000000000000000000000000000000000000000000000000000000000000000B4 +:200C4000000000000000000000000000000000000000000000000000000000000000000094 +:200C6000000000000000000000000000000000000000000000000000000000000000000074 +:200C8000000000000000000000000000000000000000000000000000000000000000000054 +:2002DE00C5D55E2356234E2346EBCDDA83C3C183E3D5DDE5DD210000DD39DD5609DD740975 +:2002FE00DD5E08DD7508D5C5F5DD6E0462ED6CDD5605ED5C1959DD5607ED5C19DD5E06508A +:20031E00ED5C19E5DD5E04DD56FEED5CDD6E05DD6607ED6C19DD4606ED4C09E5DD5E04DD47 +:20033E005607ED5CDD6E05DD6606ED6CAF1917F5DD5E04DD5606ED5C4A0600AF091755C13D +:20035E004CE10984C1814D47EBF1D1D1DDE1D133333333C9F57E83775F237E8A7757237EE7 +:0D037E0089774F237E8877472B2B2BF1C901 +:00000001FF diff --git a/src/fsutil/fsck.lst b/src/fsutil/fsck.lst new file mode 100644 index 00000000..f12dcd74 --- /dev/null +++ b/src/fsutil/fsck.lst @@ -0,0 +1,4939 @@ + 1 NAME fsck(17) + 2 RSEG CODE(0) + 3 RSEG CSTR(0) + 4 RSEG UDATA0(0) + 5 RSEG IDATA0(0) + 6 RSEG CDATA0(0) + 7 PUBLIC _blk_alloc + 8 EXTERN _read + 9 EXTERN _write + 10 PUBLIC _yes + 11 EXTERN abort + 12 EXTERN bcopy + 13 EXTERN bfill + 14 PUBLIC bitmap_block + 15 PUBLIC bitmap_dump + 16 PUBLIC bitmap_find + 17 PUBLIC bitmap_immov + 18 PUBLIC bitmap_inode + 19 PUBLIC block_bitmap + 20 PUBLIC ckdir + 21 EXTERN close + 22 PUBLIC da_read + 23 PUBLIC da_write + 24 PUBLIC daread + 25 PUBLIC depth + 26 PUBLIC dev + 27 PUBLIC device_handle + 28 PUBLIC device_name + 29 PUBLIC dirread + 30 PUBLIC dirwrite + 31 PUBLIC dwrite + 32 EXTERN exit + 33 EXTERN fflush + 34 EXTERN fgets + 35 PUBLIC filsys + 36 PUBLIC finode + 37 EXTERN fprintf + 38 PUBLIC getblkno + 39 PUBLIC inode_bitmap + 40 EXTERN int_min + 41 PUBLIC iread + 42 PUBLIC iwrite + 43 PUBLIC link_count + 44 EXTERN lseek + 45 PUBLIC main + 46 EXTERN malloc + 47 PUBLIC mkentry + 48 PUBLIC mypanic + 49 PUBLIC ninodes + 50 EXTERN open + 51 PUBLIC pass1 + 52 PUBLIC pass2 + 53 PUBLIC pass3 + 54 PUBLIC pass4 + 55 PUBLIC pass5 + 56 EXTERN perror + 57 EXTERN printf + 58 PUBLIC setblkno + 59 EXTERN sprintf + 60 EXTERN stderr + 61 EXTERN stdin + 62 EXTERN stdout + 63 EXTERN strcat + 64 EXTERN strcmp + 65 EXTERN strcpy + 66 PUBLIC yes + 67 PUBLIC zeroed + 68 EXTERN ?CL64180B_4_06_L00 + 69 EXTERN ?C_LSH_L01 + 70 EXTERN ?S_LSH_L02 + 71 EXTERN ?US_RSH_L02 + 72 EXTERN ?SS_CMP_L02 + 73 EXTERN ?L_LSH_L03 + 74 EXTERN ?SL_RSH_L03 + 75 EXTERN ?SL_DIV_L03 + 76 EXTERN ?SL_CMP_L03 + 77 EXTERN ?L_ANDASG_L03 + 78 EXTERN ?BANK_CALL_DIRECT_L08 + 79 EXTERN ?BANK_LEAVE_DIRECT_L08 + 80 EXTERN ?BANK_FAST_LEAVE_L08 + 81 EXTERN ?ENT_PARM_DIRECT_L09 + 82 EXTERN ?ENT_AUTO_DIRECT_L09 + 83 RSEG CODE + 00000000 84 da_read: + 00000000 CD 00 00 85 CALL LWRD ?ENT_PARM_DIRECT_L09 + 00000003 21 00 00 86 LD HL,0 + 00000006 E5 87 PUSH HL + 00000007 69 88 LD L,C + 00000008 60 89 LD H,B + 00000009 01 00 00 90 LD BC,0 + 0000000C 3E 09 91 LD A,9 + 0000000E CD 00 00 92 CALL LWRD ?L_LSH_L03 + 00000011 C5 93 PUSH BC + 00000012 E5 94 PUSH HL + 00000013 ED 5B 00 00 95 LD DE,(device_handle) + 00000017 3E 00 96 LD A,BYTE3 lseek + 00000019 21 00 00 97 LD HL,LWRD lseek + 0000001C CD 00 00 98 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000001F F1 99 POP AF + 00000020 F1 100 POP AF + 00000021 F1 101 POP AF + 00000022 CB 78 102 BIT 7,B + 00000024 28 2E 103 JR Z,?0003 + 00000026 104 ?0002: + 00000026 21 00 00 105 LD HL,?0004 + 00000029 E5 106 PUSH HL + 0000002A 3E 00 107 LD A,BYTE3 printf + 0000002C 21 00 00 108 LD HL,LWRD printf + 0000002F CD 00 00 109 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000032 F1 110 POP AF + 00000033 11 00 00 111 LD DE,stdout + 00000036 3E 00 112 LD A,BYTE3 fflush + 00000038 21 00 00 113 LD HL,LWRD fflush + 0000003B CD 00 00 114 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000003E 11 02 00 115 LD DE,device_name + 00000041 3E 00 116 LD A,BYTE3 perror + 00000043 21 00 00 117 LD HL,LWRD perror + 00000046 CD 00 00 118 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000049 11 01 00 119 LD DE,1 + 0000004C 3E 00 120 LD A,BYTE3 exit + 0000004E 21 00 00 121 LD HL,LWRD exit + 00000051 CD 00 00 122 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000054 123 ?0003: + 00000054 21 00 02 124 LD HL,512 + 00000057 E5 125 PUSH HL + 00000058 DD 4E 0A 126 LD C,(IX+10) + 0000005B DD 46 0B 127 LD B,(IX+11) + 0000005E ED 5B 00 00 128 LD DE,(device_handle) + 00000062 3E 00 129 LD A,BYTE3 _read + 00000064 21 00 00 130 LD HL,LWRD _read + 00000067 CD 00 00 131 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000006A F1 132 POP AF + 0000006B 3E 02 133 LD A,2 + 0000006D AC 134 XOR H + 0000006E B5 135 OR L + 0000006F 28 2E 136 JR Z,?0006 + 00000071 137 ?0005: + 00000071 21 0D 00 138 LD HL,?0007 + 00000074 E5 139 PUSH HL + 00000075 3E 00 140 LD A,BYTE3 printf + 00000077 21 00 00 141 LD HL,LWRD printf + 0000007A CD 00 00 142 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000007D F1 143 POP AF + 0000007E 11 00 00 144 LD DE,stdout + 00000081 3E 00 145 LD A,BYTE3 fflush + 00000083 21 00 00 146 LD HL,LWRD fflush + 00000086 CD 00 00 147 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000089 11 02 00 148 LD DE,device_name + 0000008C 3E 00 149 LD A,BYTE3 perror + 0000008E 21 00 00 150 LD HL,LWRD perror + 00000091 CD 00 00 151 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000094 11 01 00 152 LD DE,1 + 00000097 3E 00 153 LD A,BYTE3 exit + 00000099 21 00 00 154 LD HL,LWRD exit + 0000009C CD 00 00 155 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000009F 156 ?0006: + 0000009F 21 00 02 157 LD HL,512 + 000000A2 C3 00 00 158 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000000A5 159 da_write: + 000000A5 CD 00 00 160 CALL LWRD ?ENT_PARM_DIRECT_L09 + 000000A8 21 00 00 161 LD HL,0 + 000000AB E5 162 PUSH HL + 000000AC 69 163 LD L,C + 000000AD 60 164 LD H,B + 000000AE 01 00 00 165 LD BC,0 + 000000B1 3E 09 166 LD A,9 + 000000B3 CD 00 00 167 CALL LWRD ?L_LSH_L03 + 000000B6 C5 168 PUSH BC + 000000B7 E5 169 PUSH HL + 000000B8 ED 5B 00 00 170 LD DE,(device_handle) + 000000BC 3E 00 171 LD A,BYTE3 lseek + 000000BE 21 00 00 172 LD HL,LWRD lseek + 000000C1 CD 00 00 173 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000000C4 F1 174 POP AF + 000000C5 F1 175 POP AF + 000000C6 F1 176 POP AF + 000000C7 CB 78 177 BIT 7,B + 000000C9 28 2E 178 JR Z,?0009 + 000000CB 179 ?0008: + 000000CB 21 00 00 180 LD HL,?0004 + 000000CE E5 181 PUSH HL + 000000CF 3E 00 182 LD A,BYTE3 printf + 000000D1 21 00 00 183 LD HL,LWRD printf + 000000D4 CD 00 00 184 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000000D7 F1 185 POP AF + 000000D8 11 00 00 186 LD DE,stdout + 000000DB 3E 00 187 LD A,BYTE3 fflush + 000000DD 21 00 00 188 LD HL,LWRD fflush + 000000E0 CD 00 00 189 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000000E3 11 02 00 190 LD DE,device_name + 000000E6 3E 00 191 LD A,BYTE3 perror + 000000E8 21 00 00 192 LD HL,LWRD perror + 000000EB CD 00 00 193 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000000EE 11 01 00 194 LD DE,1 + 000000F1 3E 00 195 LD A,BYTE3 exit + 000000F3 21 00 00 196 LD HL,LWRD exit + 000000F6 CD 00 00 197 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000000F9 198 ?0009: + 000000F9 21 00 02 199 LD HL,512 + 000000FC E5 200 PUSH HL + 000000FD DD 4E 0A 201 LD C,(IX+10) + 00000100 DD 46 0B 202 LD B,(IX+11) + 00000103 ED 5B 00 00 203 LD DE,(device_handle) + 00000107 3E 00 204 LD A,BYTE3 _write + 00000109 21 00 00 205 LD HL,LWRD _write + 0000010C CD 00 00 206 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000010F F1 207 POP AF + 00000110 3E 02 208 LD A,2 + 00000112 AC 209 XOR H + 00000113 B5 210 OR L + 00000114 28 2E 211 JR Z,?0011 + 00000116 212 ?0010: + 00000116 21 1A 00 213 LD HL,?0012 + 00000119 E5 214 PUSH HL + 0000011A 3E 00 215 LD A,BYTE3 printf + 0000011C 21 00 00 216 LD HL,LWRD printf + 0000011F CD 00 00 217 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000122 F1 218 POP AF + 00000123 11 00 00 219 LD DE,stdout + 00000126 3E 00 220 LD A,BYTE3 fflush + 00000128 21 00 00 221 LD HL,LWRD fflush + 0000012B CD 00 00 222 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000012E 11 02 00 223 LD DE,device_name + 00000131 3E 00 224 LD A,BYTE3 perror + 00000133 21 00 00 225 LD HL,LWRD perror + 00000136 CD 00 00 226 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000139 11 01 00 227 LD DE,1 + 0000013C 3E 00 228 LD A,BYTE3 exit + 0000013E 21 00 00 229 LD HL,LWRD exit + 00000141 CD 00 00 230 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000144 231 ?0011: + 00000144 21 00 02 232 LD HL,512 + 00000147 C3 00 00 233 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 0000014A 234 pass1: + 0000014A CD 00 00 235 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 0000014D B2 FF 236 DEFW 65458 + 0000014F AF 237 XOR A + 00000150 DD 77 B6 238 LD (IX-74),A + 00000153 DD 77 B7 239 LD (IX-73),A + 00000156 DD 36 B2 01 240 LD (IX-78),1 + 0000015A DD 36 B3 00 241 LD (IX-77),0 + 0000015E 242 ?0014: + 0000015E ED 4B 24 04 243 LD BC,(ninodes) + 00000162 DD 6E B2 244 LD L,(IX-78) + 00000165 DD 66 B3 245 LD H,(IX-77) + 00000168 A7 246 AND A + 00000169 ED 42 247 SBC HL,BC + 0000016B D2 DD 05 248 JP NC,?0013 + 0000016E 249 ?0015: + 0000016E 21 0E 00 250 LD HL,14 + 00000171 39 251 ADD HL,SP + 00000172 4D 252 LD C,L + 00000173 44 253 LD B,H + 00000174 DD 5E B2 254 LD E,(IX-78) + 00000177 DD 56 B3 255 LD D,(IX-77) + 0000017A 3E A1 256 LD A,BYTE3 iread + 0000017C 21 A1 17 257 LD HL,LWRD iread + 0000017F CD 00 00 258 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000182 DD 6E B2 259 LD L,(IX-78) + 00000185 DD 66 B3 260 LD H,(IX-77) + 00000188 ED 4B 38 04 261 LD BC,(link_count) + 0000018C 09 262 ADD HL,BC + 0000018D 36 FF 263 LD (HL),255 + 0000018F DD 6E C0 264 LD L,(IX-64) + 00000192 DD 66 C1 265 LD H,(IX-63) + 00000195 7D 266 LD A,L + 00000196 B4 267 OR H + 00000197 20 03 268 JR NZ,?0017 + 00000199 269 ?0016: + 00000199 C3 D2 05 270 JP LWRD ?0018 + 0000019C 271 ?0017: + 0000019C DD 7E C0 272 LD A,(IX-64) + 0000019F E6 00 273 AND 0 + 000001A1 6F 274 LD L,A + 000001A2 DD 7E C1 275 LD A,(IX-63) + 000001A5 E6 F0 276 AND 240 + 000001A7 67 277 LD H,A + 000001A8 DD 75 B4 278 LD (IX-76),L + 000001AB DD 74 B5 279 LD (IX-75),H + 000001AE 3E A0 280 LD A,160 + 000001B0 AC 281 XOR H + 000001B1 B5 282 OR L + 000001B2 CA 35 02 283 JP Z,?0020 + 000001B5 3E 80 284 LD A,128 + 000001B7 DD AE B5 285 XOR (IX-75) + 000001BA DD B6 B4 286 OR (IX-76) + 000001BD 28 76 287 JR Z,?0020 + 000001BF 3E 40 288 LD A,64 + 000001C1 DD AE B5 289 XOR (IX-75) + 000001C4 DD B6 B4 290 OR (IX-76) + 000001C7 28 6C 291 JR Z,?0020 + 000001C9 3E 90 292 LD A,144 + 000001CB DD AE B5 293 XOR (IX-75) + 000001CE DD B6 B4 294 OR (IX-76) + 000001D1 28 62 295 JR Z,?0020 + 000001D3 3E 60 296 LD A,96 + 000001D5 DD AE B5 297 XOR (IX-75) + 000001D8 DD B6 B4 298 OR (IX-76) + 000001DB 28 58 299 JR Z,?0020 + 000001DD 3E 20 300 LD A,32 + 000001DF DD AE B5 301 XOR (IX-75) + 000001E2 DD B6 B4 302 OR (IX-76) + 000001E5 28 4E 303 JR Z,?0020 + 000001E7 304 ?0022: + 000001E7 305 ?0021: + 000001E7 306 ?0019: + 000001E7 DD 6E C0 307 LD L,(IX-64) + 000001EA DD 66 C1 308 LD H,(IX-63) + 000001ED E5 309 PUSH HL + 000001EE DD 6E B2 310 LD L,(IX-78) + 000001F1 DD 66 B3 311 LD H,(IX-77) + 000001F4 E5 312 PUSH HL + 000001F5 21 28 00 313 LD HL,?0023 + 000001F8 E5 314 PUSH HL + 000001F9 3E 00 315 LD A,BYTE3 printf + 000001FB 21 00 00 316 LD HL,LWRD printf + 000001FE CD 00 00 317 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000201 F1 318 POP AF + 00000202 F1 319 POP AF + 00000203 F1 320 POP AF + 00000204 3E 5A 321 LD A,BYTE3 yes + 00000206 21 5A 19 322 LD HL,LWRD yes + 00000209 CD 00 00 323 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000020C 7D 324 LD A,L + 0000020D B4 325 OR H + 0000020E 28 25 326 JR Z,?0025 + 00000210 327 ?0024: + 00000210 AF 328 XOR A + 00000211 DD 77 C0 329 LD (IX-64),A + 00000214 DD 77 C1 330 LD (IX-63),A + 00000217 AF 331 XOR A + 00000218 DD 77 C2 332 LD (IX-62),A + 0000021B DD 77 C3 333 LD (IX-61),A + 0000021E 21 0E 00 334 LD HL,14 + 00000221 39 335 ADD HL,SP + 00000222 4D 336 LD C,L + 00000223 44 337 LD B,H + 00000224 DD 5E B2 338 LD E,(IX-78) + 00000227 DD 56 B3 339 LD D,(IX-77) + 0000022A 3E EF 340 LD A,BYTE3 iwrite + 0000022C 21 EF 17 341 LD HL,LWRD iwrite + 0000022F CD 00 00 342 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000232 C3 D2 05 343 JP LWRD ?0018 + 00000235 344 ?0025: + 00000235 345 ?0020: + 00000235 DD 6E B2 346 LD L,(IX-78) + 00000238 DD 66 B3 347 LD H,(IX-77) + 0000023B ED 4B 38 04 348 LD BC,(link_count) + 0000023F 09 349 ADD HL,BC + 00000240 36 00 350 LD (HL),0 + 00000242 DD 34 B6 351 INC (IX-74) + 00000245 20 03 352 JR NZ,?0382 + 00000247 DD 34 B7 353 INC (IX-73) + 0000024A 354 ?0382: + 0000024A 3E A0 355 LD A,160 + 0000024C DD AE B5 356 XOR (IX-75) + 0000024F DD B6 B4 357 OR (IX-76) + 00000252 28 1F 358 JR Z,?0026 + 00000254 3E 80 359 LD A,128 + 00000256 DD AE B5 360 XOR (IX-75) + 00000259 DD B6 B4 361 OR (IX-76) + 0000025C 28 15 362 JR Z,?0026 + 0000025E 3E 40 363 LD A,64 + 00000260 DD AE B5 364 XOR (IX-75) + 00000263 DD B6 B4 365 OR (IX-76) + 00000266 28 0B 366 JR Z,?0026 + 00000268 3E 90 367 LD A,144 + 0000026A DD AE B5 368 XOR (IX-75) + 0000026D DD B6 B4 369 OR (IX-76) + 00000270 C2 D2 05 370 JP NZ,?0027 + 00000273 371 ?0028: + 00000273 372 ?0029: + 00000273 373 ?0026: + 00000273 DD 36 B8 12 374 LD (IX-72),18 + 00000277 DD 36 B9 00 375 LD (IX-71),0 + 0000027B 376 ?0031: + 0000027B DD 4E B8 377 LD C,(IX-72) + 0000027E DD 46 B9 378 LD B,(IX-71) + 00000281 21 13 00 379 LD HL,19 + 00000284 A7 380 AND A + 00000285 ED 42 381 SBC HL,BC + 00000287 DA E3 03 382 JP C,?0030 + 0000028A 383 ?0032: + 0000028A DD 6E B8 384 LD L,(IX-72) + 0000028D DD 66 B9 385 LD H,(IX-71) + 00000290 29 386 ADD HL,HL + 00000291 E5 387 PUSH HL + 00000292 21 10 00 388 LD HL,16 + 00000295 39 389 ADD HL,SP + 00000296 01 18 00 390 LD BC,24 + 00000299 09 391 ADD HL,BC + 0000029A 4D 392 LD C,L + 0000029B 44 393 LD B,H + 0000029C E1 394 POP HL + 0000029D 09 395 ADD HL,BC + 0000029E 46 396 LD B,(HL) + 0000029F 23 397 INC HL + 000002A0 66 398 LD H,(HL) + 000002A1 68 399 LD L,B + 000002A2 DD 75 BC 400 LD (IX-68),L + 000002A5 DD 74 BD 401 LD (IX-67),H + 000002A8 7D 402 LD A,L + 000002A9 B4 403 OR H + 000002AA CA 2F 03 404 JP Z,?0034 + 000002AD ED 4B 26 04 405 LD BC,(finode) + 000002B1 DD 6E BC 406 LD L,(IX-68) + 000002B4 DD 66 BD 407 LD H,(IX-67) + 000002B7 A7 408 AND A + 000002B8 ED 42 409 SBC HL,BC + 000002BA 38 0F 410 JR C,?0033 + 000002BC ED 4B 0C 04 411 LD BC,(filsys+6) + 000002C0 DD 6E BC 412 LD L,(IX-68) + 000002C3 DD 66 BD 413 LD H,(IX-67) + 000002C6 A7 414 AND A + 000002C7 ED 42 415 SBC HL,BC + 000002C9 38 64 416 JR C,?0034 + 000002CB 417 ?0037: + 000002CB 418 ?0038: + 000002CB 419 ?0036: + 000002CB 420 ?0035: + 000002CB 421 ?0033: + 000002CB DD 6E BC 422 LD L,(IX-68) + 000002CE DD 66 BD 423 LD H,(IX-67) + 000002D1 E5 424 PUSH HL + 000002D2 DD 6E B8 425 LD L,(IX-72) + 000002D5 DD 66 B9 426 LD H,(IX-71) + 000002D8 E5 427 PUSH HL + 000002D9 DD 6E B2 428 LD L,(IX-78) + 000002DC DD 66 B3 429 LD H,(IX-77) + 000002DF E5 430 PUSH HL + 000002E0 21 5D 00 431 LD HL,?0039 + 000002E3 E5 432 PUSH HL + 000002E4 3E 00 433 LD A,BYTE3 printf + 000002E6 21 00 00 434 LD HL,LWRD printf + 000002E9 CD 00 00 435 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000002EC F1 436 POP AF + 000002ED F1 437 POP AF + 000002EE F1 438 POP AF + 000002EF F1 439 POP AF + 000002F0 3E 5A 440 LD A,BYTE3 yes + 000002F2 21 5A 19 441 LD HL,LWRD yes + 000002F5 CD 00 00 442 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000002F8 7D 443 LD A,L + 000002F9 B4 444 OR H + 000002FA 28 33 445 JR Z,?0041 + 000002FC 446 ?0040: + 000002FC DD 6E B8 447 LD L,(IX-72) + 000002FF DD 66 B9 448 LD H,(IX-71) + 00000302 29 449 ADD HL,HL + 00000303 E5 450 PUSH HL + 00000304 21 10 00 451 LD HL,16 + 00000307 39 452 ADD HL,SP + 00000308 01 18 00 453 LD BC,24 + 0000030B 09 454 ADD HL,BC + 0000030C 4D 455 LD C,L + 0000030D 44 456 LD B,H + 0000030E E1 457 POP HL + 0000030F 09 458 ADD HL,BC + 00000310 AF 459 XOR A + 00000311 77 460 LD (HL),A + 00000312 23 461 INC HL + 00000313 77 462 LD (HL),A + 00000314 21 0E 00 463 LD HL,14 + 00000317 39 464 ADD HL,SP + 00000318 4D 465 LD C,L + 00000319 44 466 LD B,H + 0000031A DD 5E B2 467 LD E,(IX-78) + 0000031D DD 56 B3 468 LD D,(IX-77) + 00000320 3E EF 469 LD A,BYTE3 iwrite + 00000322 21 EF 17 470 LD HL,LWRD iwrite + 00000325 CD 00 00 471 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000328 AF 472 XOR A + 00000329 DD 77 BC 473 LD (IX-68),A + 0000032C DD 77 BD 474 LD (IX-67),A + 0000032F 475 ?0041: + 0000032F 476 ?0034: + 0000032F DD 7E BC 477 LD A,(IX-68) + 00000332 DD B6 BD 478 OR (IX-67) + 00000335 28 7D 479 JR Z,?0043 + 00000337 21 16 00 480 LD HL,22 + 0000033A 39 481 ADD HL,SP + 0000033B 5E 482 LD E,(HL) + 0000033C 23 483 INC HL + 0000033D 56 484 LD D,(HL) + 0000033E 23 485 INC HL + 0000033F 4E 486 LD C,(HL) + 00000340 23 487 INC HL + 00000341 46 488 LD B,(HL) + 00000342 EB 489 EX DE,HL + 00000343 3E 09 490 LD A,9 + 00000345 CD 00 00 491 CALL LWRD ?SL_RSH_L03 + 00000348 01 12 00 492 LD BC,18 + 0000034B A7 493 AND A + 0000034C ED 42 494 SBC HL,BC + 0000034E 30 64 495 JR NC,?0043 + 00000350 496 ?0045: + 00000350 497 ?0044: + 00000350 498 ?0042: + 00000350 DD 6E BC 499 LD L,(IX-68) + 00000353 DD 66 BD 500 LD H,(IX-67) + 00000356 E5 501 PUSH HL + 00000357 DD 6E B8 502 LD L,(IX-72) + 0000035A DD 66 B9 503 LD H,(IX-71) + 0000035D E5 504 PUSH HL + 0000035E DD 6E B2 505 LD L,(IX-78) + 00000361 DD 66 B3 506 LD H,(IX-77) + 00000364 E5 507 PUSH HL + 00000365 21 A7 00 508 LD HL,?0046 + 00000368 E5 509 PUSH HL + 00000369 3E 00 510 LD A,BYTE3 printf + 0000036B 21 00 00 511 LD HL,LWRD printf + 0000036E CD 00 00 512 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000371 F1 513 POP AF + 00000372 F1 514 POP AF + 00000373 F1 515 POP AF + 00000374 F1 516 POP AF + 00000375 3E 5A 517 LD A,BYTE3 yes + 00000377 21 5A 19 518 LD HL,LWRD yes + 0000037A CD 00 00 519 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000037D 7D 520 LD A,L + 0000037E B4 521 OR H + 0000037F 28 33 522 JR Z,?0048 + 00000381 523 ?0047: + 00000381 DD 6E B8 524 LD L,(IX-72) + 00000384 DD 66 B9 525 LD H,(IX-71) + 00000387 29 526 ADD HL,HL + 00000388 E5 527 PUSH HL + 00000389 21 10 00 528 LD HL,16 + 0000038C 39 529 ADD HL,SP + 0000038D 01 18 00 530 LD BC,24 + 00000390 09 531 ADD HL,BC + 00000391 4D 532 LD C,L + 00000392 44 533 LD B,H + 00000393 E1 534 POP HL + 00000394 09 535 ADD HL,BC + 00000395 AF 536 XOR A + 00000396 77 537 LD (HL),A + 00000397 23 538 INC HL + 00000398 77 539 LD (HL),A + 00000399 21 0E 00 540 LD HL,14 + 0000039C 39 541 ADD HL,SP + 0000039D 4D 542 LD C,L + 0000039E 44 543 LD B,H + 0000039F DD 5E B2 544 LD E,(IX-78) + 000003A2 DD 56 B3 545 LD D,(IX-77) + 000003A5 3E EF 546 LD A,BYTE3 iwrite + 000003A7 21 EF 17 547 LD HL,LWRD iwrite + 000003AA CD 00 00 548 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000003AD AF 549 XOR A + 000003AE DD 77 BC 550 LD (IX-68),A + 000003B1 DD 77 BD 551 LD (IX-67),A + 000003B4 552 ?0048: + 000003B4 553 ?0043: + 000003B4 DD 7E BC 554 LD A,(IX-68) + 000003B7 DD B6 BD 555 OR (IX-67) + 000003BA 28 1C 556 JR Z,?0050 + 000003BC 557 ?0049: + 000003BC 06 03 558 LD B,3 + 000003BE DD 5E BC 559 LD E,(IX-68) + 000003C1 DD 56 BD 560 LD D,(IX-67) + 000003C4 CD 00 00 561 CALL LWRD ?US_RSH_L02 + 000003C7 2A 36 04 562 LD HL,(block_bitmap) + 000003CA 19 563 ADD HL,DE + 000003CB DD 7E BC 564 LD A,(IX-68) + 000003CE E6 07 565 AND 7 + 000003D0 47 566 LD B,A + 000003D1 3E 01 567 LD A,1 + 000003D3 CD 00 00 568 CALL LWRD ?C_LSH_L01 + 000003D6 B6 569 OR (HL) + 000003D7 77 570 LD (HL),A + 000003D8 571 ?0050: + 000003D8 DD 34 B8 572 INC (IX-72) + 000003DB 20 03 573 JR NZ,?0383 + 000003DD DD 34 B9 574 INC (IX-71) + 000003E0 575 ?0383: + 000003E0 C3 7B 02 576 JP LWRD ?0031 + 000003E3 577 ?0030: + 000003E3 DD 6E FE 578 LD L,(IX-2) + 000003E6 DD 66 FF 579 LD H,(IX-1) + 000003E9 7D 580 LD A,L + 000003EA B4 581 OR H + 000003EB CA D9 04 582 JP Z,?0052 + 000003EE 583 ?0051: + 000003EE DD 5E FE 584 LD E,(IX-2) + 000003F1 DD 56 FF 585 LD D,(IX-1) + 000003F4 3E 29 586 LD A,BYTE3 daread + 000003F6 21 29 17 587 LD HL,LWRD daread + 000003F9 CD 00 00 588 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000003FC DD 75 BE 589 LD (IX-66),L + 000003FF DD 74 BF 590 LD (IX-65),H + 00000402 AF 591 XOR A + 00000403 DD 77 B8 592 LD (IX-72),A + 00000406 DD 77 B9 593 LD (IX-71),A + 00000409 594 ?0054: + 00000409 01 00 01 595 LD BC,256 + 0000040C DD 6E B8 596 LD L,(IX-72) + 0000040F DD 66 B9 597 LD H,(IX-71) + 00000412 A7 598 AND A + 00000413 ED 42 599 SBC HL,BC + 00000415 D2 D9 04 600 JP NC,?0053 + 00000418 601 ?0055: + 00000418 DD 6E B8 602 LD L,(IX-72) + 0000041B DD 66 B9 603 LD H,(IX-71) + 0000041E 29 604 ADD HL,HL + 0000041F DD 4E BE 605 LD C,(IX-66) + 00000422 DD 46 BF 606 LD B,(IX-65) + 00000425 09 607 ADD HL,BC + 00000426 46 608 LD B,(HL) + 00000427 23 609 INC HL + 00000428 66 610 LD H,(HL) + 00000429 68 611 LD L,B + 0000042A DD 75 BC 612 LD (IX-68),L + 0000042D DD 74 BD 613 LD (IX-67),H + 00000430 7D 614 LD A,L + 00000431 B4 615 OR H + 00000432 28 76 616 JR Z,?0057 + 00000434 ED 4B 26 04 617 LD BC,(finode) + 00000438 DD 6E BC 618 LD L,(IX-68) + 0000043B DD 66 BD 619 LD H,(IX-67) + 0000043E A7 620 AND A + 0000043F ED 42 621 SBC HL,BC + 00000441 38 0F 622 JR C,?0056 + 00000443 ED 4B 0C 04 623 LD BC,(filsys+6) + 00000447 DD 6E BC 624 LD L,(IX-68) + 0000044A DD 66 BD 625 LD H,(IX-67) + 0000044D A7 626 AND A + 0000044E ED 42 627 SBC HL,BC + 00000450 38 58 628 JR C,?0057 + 00000452 629 ?0060: + 00000452 630 ?0061: + 00000452 631 ?0059: + 00000452 632 ?0058: + 00000452 633 ?0056: + 00000452 DD 6E BC 634 LD L,(IX-68) + 00000455 DD 66 BD 635 LD H,(IX-67) + 00000458 E5 636 PUSH HL + 00000459 DD 6E B8 637 LD L,(IX-72) + 0000045C DD 66 B9 638 LD H,(IX-71) + 0000045F E5 639 PUSH HL + 00000460 DD 6E B2 640 LD L,(IX-78) + 00000463 DD 66 B3 641 LD H,(IX-77) + 00000466 E5 642 PUSH HL + 00000467 21 F5 00 643 LD HL,?0062 + 0000046A E5 644 PUSH HL + 0000046B 3E 00 645 LD A,BYTE3 printf + 0000046D 21 00 00 646 LD HL,LWRD printf + 00000470 CD 00 00 647 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000473 F1 648 POP AF + 00000474 F1 649 POP AF + 00000475 F1 650 POP AF + 00000476 F1 651 POP AF + 00000477 3E 5A 652 LD A,BYTE3 yes + 00000479 21 5A 19 653 LD HL,LWRD yes + 0000047C CD 00 00 654 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000047F 7D 655 LD A,L + 00000480 B4 656 OR H + 00000481 28 27 657 JR Z,?0064 + 00000483 658 ?0063: + 00000483 DD 6E B8 659 LD L,(IX-72) + 00000486 DD 66 B9 660 LD H,(IX-71) + 00000489 29 661 ADD HL,HL + 0000048A DD 4E BE 662 LD C,(IX-66) + 0000048D DD 46 BF 663 LD B,(IX-65) + 00000490 09 664 ADD HL,BC + 00000491 AF 665 XOR A + 00000492 77 666 LD (HL),A + 00000493 23 667 INC HL + 00000494 77 668 LD (HL),A + 00000495 DD 5E B8 669 LD E,(IX-72) + 00000498 DD 56 B9 670 LD D,(IX-71) + 0000049B 3E 68 671 LD A,BYTE3 dwrite + 0000049D 21 68 17 672 LD HL,LWRD dwrite + 000004A0 CD 00 00 673 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000004A3 AF 674 XOR A + 000004A4 DD 77 BC 675 LD (IX-68),A + 000004A7 DD 77 BD 676 LD (IX-67),A + 000004AA 677 ?0064: + 000004AA 678 ?0057: + 000004AA DD 7E BC 679 LD A,(IX-68) + 000004AD DD B6 BD 680 OR (IX-67) + 000004B0 28 1C 681 JR Z,?0066 + 000004B2 682 ?0065: + 000004B2 06 03 683 LD B,3 + 000004B4 DD 5E BC 684 LD E,(IX-68) + 000004B7 DD 56 BD 685 LD D,(IX-67) + 000004BA CD 00 00 686 CALL LWRD ?US_RSH_L02 + 000004BD 2A 36 04 687 LD HL,(block_bitmap) + 000004C0 19 688 ADD HL,DE + 000004C1 DD 7E BC 689 LD A,(IX-68) + 000004C4 E6 07 690 AND 7 + 000004C6 47 691 LD B,A + 000004C7 3E 01 692 LD A,1 + 000004C9 CD 00 00 693 CALL LWRD ?C_LSH_L01 + 000004CC B6 694 OR (HL) + 000004CD 77 695 LD (HL),A + 000004CE 696 ?0066: + 000004CE DD 34 B8 697 INC (IX-72) + 000004D1 20 03 698 JR NZ,?0384 + 000004D3 DD 34 B9 699 INC (IX-71) + 000004D6 700 ?0384: + 000004D6 C3 09 04 701 JP LWRD ?0054 + 000004D9 702 ?0053: + 000004D9 703 ?0052: + 000004D9 AF 704 XOR A + 000004DA DD 77 B8 705 LD (IX-72),A + 000004DD DD 77 B9 706 LD (IX-71),A + 000004E0 21 16 00 707 LD HL,22 + 000004E3 39 708 ADD HL,SP + 000004E4 5E 709 LD E,(HL) + 000004E5 23 710 INC HL + 000004E6 56 711 LD D,(HL) + 000004E7 23 712 INC HL + 000004E8 4E 713 LD C,(HL) + 000004E9 23 714 INC HL + 000004EA 46 715 LD B,(HL) + 000004EB EB 716 EX DE,HL + 000004EC 3E 09 717 LD A,9 + 000004EE CD 00 00 718 CALL LWRD ?SL_RSH_L03 + 000004F1 DD 75 BA 719 LD (IX-70),L + 000004F4 DD 74 BB 720 LD (IX-69),H + 000004F7 721 ?0068: + 000004F7 DD 4E B8 722 LD C,(IX-72) + 000004FA DD 46 B9 723 LD B,(IX-71) + 000004FD DD 6E BA 724 LD L,(IX-70) + 00000500 DD 66 BB 725 LD H,(IX-69) + 00000503 A7 726 AND A + 00000504 ED 42 727 SBC HL,BC + 00000506 DA D2 05 728 JP C,?0067 + 00000509 729 ?0069: + 00000509 DD 4E B8 730 LD C,(IX-72) + 0000050C DD 46 B9 731 LD B,(IX-71) + 0000050F 21 0E 00 732 LD HL,14 + 00000512 39 733 ADD HL,SP + 00000513 5D 734 LD E,L + 00000514 54 735 LD D,H + 00000515 3E 05 736 LD A,BYTE3 getblkno + 00000517 21 05 14 737 LD HL,LWRD getblkno + 0000051A CD 00 00 738 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000051D DD 75 BC 739 LD (IX-68),L + 00000520 DD 74 BD 740 LD (IX-67),H + 00000523 7D 741 LD A,L + 00000524 B4 742 OR H + 00000525 28 7C 743 JR Z,?0071 + 00000527 ED 4B 26 04 744 LD BC,(finode) + 0000052B DD 6E BC 745 LD L,(IX-68) + 0000052E DD 66 BD 746 LD H,(IX-67) + 00000531 A7 747 AND A + 00000532 ED 42 748 SBC HL,BC + 00000534 38 0F 749 JR C,?0070 + 00000536 ED 4B 0C 04 750 LD BC,(filsys+6) + 0000053A DD 6E BC 751 LD L,(IX-68) + 0000053D DD 66 BD 752 LD H,(IX-67) + 00000540 A7 753 AND A + 00000541 ED 42 754 SBC HL,BC + 00000543 38 5E 755 JR C,?0071 + 00000545 756 ?0074: + 00000545 757 ?0075: + 00000545 758 ?0073: + 00000545 759 ?0072: + 00000545 760 ?0070: + 00000545 DD 6E BC 761 LD L,(IX-68) + 00000548 DD 66 BD 762 LD H,(IX-67) + 0000054B E5 763 PUSH HL + 0000054C DD 6E B8 764 LD L,(IX-72) + 0000054F DD 66 B9 765 LD H,(IX-71) + 00000552 E5 766 PUSH HL + 00000553 DD 6E B2 767 LD L,(IX-78) + 00000556 DD 66 B3 768 LD H,(IX-77) + 00000559 E5 769 PUSH HL + 0000055A 21 3F 01 770 LD HL,?0076 + 0000055D E5 771 PUSH HL + 0000055E 3E 00 772 LD A,BYTE3 printf + 00000560 21 00 00 773 LD HL,LWRD printf + 00000563 CD 00 00 774 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000566 F1 775 POP AF + 00000567 F1 776 POP AF + 00000568 F1 777 POP AF + 00000569 F1 778 POP AF + 0000056A 3E 5A 779 LD A,BYTE3 yes + 0000056C 21 5A 19 780 LD HL,LWRD yes + 0000056F CD 00 00 781 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000572 7D 782 LD A,L + 00000573 B4 783 OR H + 00000574 28 2D 784 JR Z,?0078 + 00000576 785 ?0077: + 00000576 21 00 00 786 LD HL,0 + 00000579 E5 787 PUSH HL + 0000057A DD 4E B8 788 LD C,(IX-72) + 0000057D DD 46 B9 789 LD B,(IX-71) + 00000580 21 10 00 790 LD HL,16 + 00000583 39 791 ADD HL,SP + 00000584 5D 792 LD E,L + 00000585 54 793 LD D,H + 00000586 3E 01 794 LD A,BYTE3 setblkno + 00000588 21 01 15 795 LD HL,LWRD setblkno + 0000058B CD 00 00 796 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000058E E1 797 POP HL + 0000058F 21 0E 00 798 LD HL,14 + 00000592 39 799 ADD HL,SP + 00000593 4D 800 LD C,L + 00000594 44 801 LD B,H + 00000595 DD 5E B2 802 LD E,(IX-78) + 00000598 DD 56 B3 803 LD D,(IX-77) + 0000059B 3E EF 804 LD A,BYTE3 iwrite + 0000059D 21 EF 17 805 LD HL,LWRD iwrite + 000005A0 CD 00 00 806 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000005A3 807 ?0078: + 000005A3 808 ?0071: + 000005A3 DD 7E BC 809 LD A,(IX-68) + 000005A6 DD B6 BD 810 OR (IX-67) + 000005A9 28 1C 811 JR Z,?0080 + 000005AB 812 ?0079: + 000005AB 06 03 813 LD B,3 + 000005AD DD 5E BC 814 LD E,(IX-68) + 000005B0 DD 56 BD 815 LD D,(IX-67) + 000005B3 CD 00 00 816 CALL LWRD ?US_RSH_L02 + 000005B6 2A 36 04 817 LD HL,(block_bitmap) + 000005B9 19 818 ADD HL,DE + 000005BA DD 7E BC 819 LD A,(IX-68) + 000005BD E6 07 820 AND 7 + 000005BF 47 821 LD B,A + 000005C0 3E 01 822 LD A,1 + 000005C2 CD 00 00 823 CALL LWRD ?C_LSH_L01 + 000005C5 B6 824 OR (HL) + 000005C6 77 825 LD (HL),A + 000005C7 826 ?0080: + 000005C7 DD 34 B8 827 INC (IX-72) + 000005CA 20 03 828 JR NZ,?0385 + 000005CC DD 34 B9 829 INC (IX-71) + 000005CF 830 ?0385: + 000005CF C3 F7 04 831 JP LWRD ?0068 + 000005D2 832 ?0067: + 000005D2 833 ?0027: + 000005D2 834 ?0018: + 000005D2 DD 34 B2 835 INC (IX-78) + 000005D5 20 03 836 JR NZ,?0386 + 000005D7 DD 34 B3 837 INC (IX-77) + 000005DA 838 ?0386: + 000005DA C3 5E 01 839 JP LWRD ?0014 + 000005DD 840 ?0013: + 000005DD DD 4E B6 841 LD C,(IX-74) + 000005E0 DD 46 B7 842 LD B,(IX-73) + 000005E3 2A 24 04 843 LD HL,(ninodes) + 000005E6 A7 844 AND A + 000005E7 ED 42 845 SBC HL,BC + 000005E9 01 FF FF 846 LD BC,65535 + 000005EC 09 847 ADD HL,BC + 000005ED DD 75 B8 848 LD (IX-72),L + 000005F0 DD 74 B9 849 LD (IX-71),H + 000005F3 ED 4B 10 04 850 LD BC,(filsys+10) + 000005F7 A7 851 AND A + 000005F8 ED 42 852 SBC HL,BC + 000005FA 28 40 853 JR Z,?0082 + 000005FC 854 ?0081: + 000005FC DD 6E B8 855 LD L,(IX-72) + 000005FF DD 66 B9 856 LD H,(IX-71) + 00000602 E5 857 PUSH HL + 00000603 21 10 04 858 LD HL,filsys+10 + 00000606 4E 859 LD C,(HL) + 00000607 23 860 INC HL + 00000608 46 861 LD B,(HL) + 00000609 C5 862 PUSH BC + 0000060A 21 79 01 863 LD HL,?0083 + 0000060D E5 864 PUSH HL + 0000060E 3E 00 865 LD A,BYTE3 printf + 00000610 21 00 00 866 LD HL,LWRD printf + 00000613 CD 00 00 867 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000616 F1 868 POP AF + 00000617 F1 869 POP AF + 00000618 F1 870 POP AF + 00000619 3E 5A 871 LD A,BYTE3 yes + 0000061B 21 5A 19 872 LD HL,LWRD yes + 0000061E CD 00 00 873 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000621 7D 874 LD A,L + 00000622 B4 875 OR H + 00000623 28 17 876 JR Z,?0085 + 00000625 877 ?0084: + 00000625 DD 6E B8 878 LD L,(IX-72) + 00000628 DD 66 B9 879 LD H,(IX-71) + 0000062B 22 10 04 880 LD (filsys+10),HL + 0000062E 01 06 04 881 LD BC,filsys + 00000631 11 01 00 882 LD DE,1 + 00000634 3E 68 883 LD A,BYTE3 dwrite + 00000636 21 68 17 884 LD HL,LWRD dwrite + 00000639 CD 00 00 885 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000063C 886 ?0085: + 0000063C 887 ?0082: + 0000063C C3 00 00 888 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 0000063F 889 pass2: + 0000063F CD 00 00 890 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 00000642 F0 FF 891 DEFW 65520 + 00000644 2A 0E 04 892 LD HL,(filsys+8) + 00000647 DD 75 F6 893 LD (IX-10),L + 0000064A DD 74 F7 894 LD (IX-9),H + 0000064D 2A 10 04 895 LD HL,(filsys+10) + 00000650 DD 75 F8 896 LD (IX-8),L + 00000653 DD 74 F9 897 LD (IX-7),H + 00000656 21 B3 01 898 LD HL,?0086 + 00000659 E5 899 PUSH HL + 0000065A 3E 00 900 LD A,BYTE3 printf + 0000065C 21 00 00 901 LD HL,LWRD printf + 0000065F CD 00 00 902 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000662 F1 903 POP AF + 00000663 3E 5A 904 LD A,BYTE3 yes + 00000665 21 5A 19 905 LD HL,LWRD yes + 00000668 CD 00 00 906 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000066B 7D 907 LD A,L + 0000066C B4 908 OR H + 0000066D 20 03 909 JR NZ,?0088 + 0000066F 910 ?0087: + 0000066F C3 E3 08 911 JP LWRD ?0116 + 00000672 912 ?0088: + 00000672 2A 16 04 913 LD HL,(filsys+16) + 00000675 DD 75 FA 914 LD (IX-6),L + 00000678 DD 74 FB 915 LD (IX-5),H + 0000067B 2A 18 04 916 LD HL,(filsys+18) + 0000067E DD 75 FC 917 LD (IX-4),L + 00000681 DD 74 FD 918 LD (IX-3),H + 00000684 2A 1A 04 919 LD HL,(filsys+20) + 00000687 DD 75 FE 920 LD (IX-2),L + 0000068A DD 74 FF 921 LD (IX-1),H + 0000068D AF 922 XOR A + 0000068E DD 77 F2 923 LD (IX-14),A + 00000691 DD 77 F3 924 LD (IX-13),A + 00000694 925 ?0090: + 00000694 2A 0A 04 926 LD HL,(filsys+4) + 00000697 ED 4B 26 04 927 LD BC,(finode) + 0000069B 09 928 ADD HL,BC + 0000069C 4D 929 LD C,L + 0000069D 44 930 LD B,H + 0000069E DD 6E F2 931 LD L,(IX-14) + 000006A1 DD 66 F3 932 LD H,(IX-13) + 000006A4 A7 933 AND A + 000006A5 ED 42 934 SBC HL,BC + 000006A7 30 26 935 JR NC,?0089 + 000006A9 936 ?0091: + 000006A9 06 03 937 LD B,3 + 000006AB DD 5E F2 938 LD E,(IX-14) + 000006AE DD 56 F3 939 LD D,(IX-13) + 000006B1 CD 00 00 940 CALL LWRD ?US_RSH_L02 + 000006B4 2A 36 04 941 LD HL,(block_bitmap) + 000006B7 19 942 ADD HL,DE + 000006B8 DD 7E F2 943 LD A,(IX-14) + 000006BB E6 07 944 AND 7 + 000006BD 47 945 LD B,A + 000006BE 3E 01 946 LD A,1 + 000006C0 CD 00 00 947 CALL LWRD ?C_LSH_L01 + 000006C3 B6 948 OR (HL) + 000006C4 77 949 LD (HL),A + 000006C5 DD 34 F2 950 INC (IX-14) + 000006C8 20 03 951 JR NZ,?0387 + 000006CA DD 34 F3 952 INC (IX-13) + 000006CD 953 ?0387: + 000006CD 18 C5 954 JR ?0090 + 000006CF 955 ?0089: + 000006CF DD 4E FC 956 LD C,(IX-4) + 000006D2 DD 46 FD 957 LD B,(IX-3) + 000006D5 DD 6E FE 958 LD L,(IX-2) + 000006D8 DD 66 FF 959 LD H,(IX-1) + 000006DB A7 960 AND A + 000006DC ED 42 961 SBC HL,BC + 000006DE 29 962 ADD HL,HL + 000006DF 29 963 ADD HL,HL + 000006E0 29 964 ADD HL,HL + 000006E1 DD 75 F4 965 LD (IX-12),L + 000006E4 DD 74 F5 966 LD (IX-11),H + 000006E7 2A 0C 04 967 LD HL,(filsys+6) + 000006EA DD 75 F2 968 LD (IX-14),L + 000006ED DD 74 F3 969 LD (IX-13),H + 000006F0 970 ?0094: + 000006F0 DD 6E F4 971 LD L,(IX-12) + 000006F3 DD 66 F5 972 LD H,(IX-11) + 000006F6 DD 4E F2 973 LD C,(IX-14) + 000006F9 DD 46 F3 974 LD B,(IX-13) + 000006FC A7 975 AND A + 000006FD ED 42 976 SBC HL,BC + 000006FF 28 26 977 JR Z,?0093 + 00000701 978 ?0095: + 00000701 06 03 979 LD B,3 + 00000703 DD 5E F2 980 LD E,(IX-14) + 00000706 DD 56 F3 981 LD D,(IX-13) + 00000709 CD 00 00 982 CALL LWRD ?US_RSH_L02 + 0000070C 2A 36 04 983 LD HL,(block_bitmap) + 0000070F 19 984 ADD HL,DE + 00000710 DD 7E F2 985 LD A,(IX-14) + 00000713 E6 07 986 AND 7 + 00000715 47 987 LD B,A + 00000716 3E 01 988 LD A,1 + 00000718 CD 00 00 989 CALL LWRD ?C_LSH_L01 + 0000071B B6 990 OR (HL) + 0000071C 77 991 LD (HL),A + 0000071D DD 34 F2 992 INC (IX-14) + 00000720 20 03 993 JR NZ,?0388 + 00000722 DD 34 F3 994 INC (IX-13) + 00000725 995 ?0388: + 00000725 18 C9 996 JR ?0094 + 00000727 997 ?0093: + 00000727 21 00 00 998 LD HL,0 + 0000072A 22 0E 04 999 LD (filsys+8),HL + 0000072D 2A 0A 04 1000 LD HL,(filsys+4) + 00000730 ED 4B 26 04 1001 LD BC,(finode) + 00000734 09 1002 ADD HL,BC + 00000735 DD 75 F2 1003 LD (IX-14),L + 00000738 DD 74 F3 1004 LD (IX-13),H + 0000073B 1005 ?0098: + 0000073B ED 4B 0C 04 1006 LD BC,(filsys+6) + 0000073F DD 6E F2 1007 LD L,(IX-14) + 00000742 DD 66 F3 1008 LD H,(IX-13) + 00000745 A7 1009 AND A + 00000746 ED 42 1010 SBC HL,BC + 00000748 30 2E 1011 JR NC,?0097 + 0000074A 1012 ?0099: + 0000074A 06 03 1013 LD B,3 + 0000074C DD 5E F2 1014 LD E,(IX-14) + 0000074F DD 56 F3 1015 LD D,(IX-13) + 00000752 CD 00 00 1016 CALL LWRD ?US_RSH_L02 + 00000755 2A 36 04 1017 LD HL,(block_bitmap) + 00000758 19 1018 ADD HL,DE + 00000759 DD 7E F2 1019 LD A,(IX-14) + 0000075C E6 07 1020 AND 7 + 0000075E 47 1021 LD B,A + 0000075F 3E 01 1022 LD A,1 + 00000761 CD 00 00 1023 CALL LWRD ?C_LSH_L01 + 00000764 A6 1024 AND (HL) + 00000765 20 07 1025 JR NZ,?0102 + 00000767 1026 ?0101: + 00000767 2A 0E 04 1027 LD HL,(filsys+8) + 0000076A 23 1028 INC HL + 0000076B 22 0E 04 1029 LD (filsys+8),HL + 0000076E 1030 ?0102: + 0000076E DD 34 F2 1031 INC (IX-14) + 00000771 20 03 1032 JR NZ,?0389 + 00000773 DD 34 F3 1033 INC (IX-13) + 00000776 1034 ?0389: + 00000776 18 C3 1035 JR ?0098 + 00000778 1036 ?0097: + 00000778 DD 6E FE 1037 LD L,(IX-2) + 0000077B DD 66 FF 1038 LD H,(IX-1) + 0000077E 01 00 00 1039 LD BC,0 + 00000781 C5 1040 PUSH BC + 00000782 E5 1041 PUSH HL + 00000783 DD 6E FC 1042 LD L,(IX-4) + 00000786 DD 66 FD 1043 LD H,(IX-3) + 00000789 01 00 00 1044 LD BC,0 + 0000078C C5 1045 PUSH BC + 0000078D E5 1046 PUSH HL + 0000078E ED 5B 36 04 1047 LD DE,(block_bitmap) + 00000792 3E 4F 1048 LD A,BYTE3 bitmap_dump + 00000794 21 4F 1D 1049 LD HL,LWRD bitmap_dump + 00000797 CD 00 00 1050 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000079A E1 1051 POP HL + 0000079B E1 1052 POP HL + 0000079C E1 1053 POP HL + 0000079D E1 1054 POP HL + 0000079E 2A 34 04 1055 LD HL,(inode_bitmap) + 000007A1 7E 1056 LD A,(HL) + 000007A2 F6 01 1057 OR 1 + 000007A4 77 1058 LD (HL),A + 000007A5 2A 34 04 1059 LD HL,(inode_bitmap) + 000007A8 7E 1060 LD A,(HL) + 000007A9 F6 02 1061 OR 2 + 000007AB 77 1062 LD (HL),A + 000007AC DD 36 F2 02 1063 LD (IX-14),2 + 000007B0 DD 36 F3 00 1064 LD (IX-13),0 + 000007B4 1065 ?0104: + 000007B4 ED 4B 24 04 1066 LD BC,(ninodes) + 000007B8 DD 6E F2 1067 LD L,(IX-14) + 000007BB DD 66 F3 1068 LD H,(IX-13) + 000007BE A7 1069 AND A + 000007BF ED 42 1070 SBC HL,BC + 000007C1 30 35 1071 JR NC,?0103 + 000007C3 1072 ?0105: + 000007C3 DD 6E F2 1073 LD L,(IX-14) + 000007C6 DD 66 F3 1074 LD H,(IX-13) + 000007C9 ED 4B 38 04 1075 LD BC,(link_count) + 000007CD 09 1076 ADD HL,BC + 000007CE 46 1077 LD B,(HL) + 000007CF 04 1078 INC B + 000007D0 28 1C 1079 JR Z,?0108 + 000007D2 1080 ?0107: + 000007D2 06 03 1081 LD B,3 + 000007D4 DD 5E F2 1082 LD E,(IX-14) + 000007D7 DD 56 F3 1083 LD D,(IX-13) + 000007DA CD 00 00 1084 CALL LWRD ?US_RSH_L02 + 000007DD 2A 34 04 1085 LD HL,(inode_bitmap) + 000007E0 19 1086 ADD HL,DE + 000007E1 DD 7E F2 1087 LD A,(IX-14) + 000007E4 E6 07 1088 AND 7 + 000007E6 47 1089 LD B,A + 000007E7 3E 01 1090 LD A,1 + 000007E9 CD 00 00 1091 CALL LWRD ?C_LSH_L01 + 000007EC B6 1092 OR (HL) + 000007ED 77 1093 LD (HL),A + 000007EE 1094 ?0108: + 000007EE DD 34 F2 1095 INC (IX-14) + 000007F1 20 03 1096 JR NZ,?0390 + 000007F3 DD 34 F3 1097 INC (IX-13) + 000007F6 1098 ?0390: + 000007F6 18 BC 1099 JR ?0104 + 000007F8 1100 ?0103: + 000007F8 DD 4E FA 1101 LD C,(IX-6) + 000007FB DD 46 FB 1102 LD B,(IX-5) + 000007FE DD 6E FC 1103 LD L,(IX-4) + 00000801 DD 66 FD 1104 LD H,(IX-3) + 00000804 A7 1105 AND A + 00000805 ED 42 1106 SBC HL,BC + 00000807 29 1107 ADD HL,HL + 00000808 29 1108 ADD HL,HL + 00000809 29 1109 ADD HL,HL + 0000080A DD 75 F4 1110 LD (IX-12),L + 0000080D DD 74 F5 1111 LD (IX-11),H + 00000810 2A 0A 04 1112 LD HL,(filsys+4) + 00000813 29 1113 ADD HL,HL + 00000814 29 1114 ADD HL,HL + 00000815 29 1115 ADD HL,HL + 00000816 DD 75 F2 1116 LD (IX-14),L + 00000819 DD 74 F3 1117 LD (IX-13),H + 0000081C 1118 ?0110: + 0000081C DD 6E F4 1119 LD L,(IX-12) + 0000081F DD 66 F5 1120 LD H,(IX-11) + 00000822 DD 4E F2 1121 LD C,(IX-14) + 00000825 DD 46 F3 1122 LD B,(IX-13) + 00000828 A7 1123 AND A + 00000829 ED 42 1124 SBC HL,BC + 0000082B 28 26 1125 JR Z,?0109 + 0000082D 1126 ?0111: + 0000082D 06 03 1127 LD B,3 + 0000082F DD 5E F2 1128 LD E,(IX-14) + 00000832 DD 56 F3 1129 LD D,(IX-13) + 00000835 CD 00 00 1130 CALL LWRD ?US_RSH_L02 + 00000838 2A 34 04 1131 LD HL,(inode_bitmap) + 0000083B 19 1132 ADD HL,DE + 0000083C DD 7E F2 1133 LD A,(IX-14) + 0000083F E6 07 1134 AND 7 + 00000841 47 1135 LD B,A + 00000842 3E 01 1136 LD A,1 + 00000844 CD 00 00 1137 CALL LWRD ?C_LSH_L01 + 00000847 B6 1138 OR (HL) + 00000848 77 1139 LD (HL),A + 00000849 DD 34 F2 1140 INC (IX-14) + 0000084C 20 03 1141 JR NZ,?0391 + 0000084E DD 34 F3 1142 INC (IX-13) + 00000851 1143 ?0391: + 00000851 18 C9 1144 JR ?0110 + 00000853 1145 ?0109: + 00000853 DD 6E FC 1146 LD L,(IX-4) + 00000856 DD 66 FD 1147 LD H,(IX-3) + 00000859 01 00 00 1148 LD BC,0 + 0000085C C5 1149 PUSH BC + 0000085D E5 1150 PUSH HL + 0000085E DD 6E FA 1151 LD L,(IX-6) + 00000861 DD 66 FB 1152 LD H,(IX-5) + 00000864 01 00 00 1153 LD BC,0 + 00000867 C5 1154 PUSH BC + 00000868 E5 1155 PUSH HL + 00000869 ED 5B 34 04 1156 LD DE,(inode_bitmap) + 0000086D 3E 4F 1157 LD A,BYTE3 bitmap_dump + 0000086F 21 4F 1D 1158 LD HL,LWRD bitmap_dump + 00000872 CD 00 00 1159 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000875 E1 1160 POP HL + 00000876 E1 1161 POP HL + 00000877 E1 1162 POP HL + 00000878 E1 1163 POP HL + 00000879 11 04 00 1164 LD DE,4 + 0000087C 3E 29 1165 LD A,BYTE3 daread + 0000087E 21 29 17 1166 LD HL,LWRD daread + 00000881 CD 00 00 1167 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000884 DD 75 F0 1168 LD (IX-16),L + 00000887 DD 74 F1 1169 LD (IX-15),H + 0000088A 01 1E 00 1170 LD BC,30 + 0000088D C5 1171 PUSH BC + 0000088E 4D 1172 LD C,L + 0000088F 44 1173 LD B,H + 00000890 11 06 04 1174 LD DE,filsys + 00000893 3E 00 1175 LD A,BYTE3 bcopy + 00000895 21 00 00 1176 LD HL,LWRD bcopy + 00000898 CD 00 00 1177 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000089B E1 1178 POP HL + 0000089C DD 4E F0 1179 LD C,(IX-16) + 0000089F DD 46 F1 1180 LD B,(IX-15) + 000008A2 11 04 00 1181 LD DE,4 + 000008A5 3E 68 1182 LD A,BYTE3 dwrite + 000008A7 21 68 17 1183 LD HL,LWRD dwrite + 000008AA CD 00 00 1184 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000008AD 2A 0E 04 1185 LD HL,(filsys+8) + 000008B0 DD 4E F6 1186 LD C,(IX-10) + 000008B3 DD 46 F7 1187 LD B,(IX-9) + 000008B6 A7 1188 AND A + 000008B7 ED 42 1189 SBC HL,BC + 000008B9 28 28 1190 JR Z,?0114 + 000008BB 1191 ?0113: + 000008BB DD 6E F6 1192 LD L,(IX-10) + 000008BE DD 66 F7 1193 LD H,(IX-9) + 000008C1 E5 1194 PUSH HL + 000008C2 21 0E 04 1195 LD HL,filsys+8 + 000008C5 4E 1196 LD C,(HL) + 000008C6 23 1197 INC HL + 000008C7 46 1198 LD B,(HL) + 000008C8 C5 1199 PUSH BC + 000008C9 21 D2 01 1200 LD HL,?0115 + 000008CC E5 1201 PUSH HL + 000008CD 3E 00 1202 LD A,BYTE3 printf + 000008CF 21 00 00 1203 LD HL,LWRD printf + 000008D2 CD 00 00 1204 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000008D5 F1 1205 POP AF + 000008D6 F1 1206 POP AF + 000008D7 F1 1207 POP AF + 000008D8 11 00 00 1208 LD DE,stdout + 000008DB 3E 00 1209 LD A,BYTE3 fflush + 000008DD 21 00 00 1210 LD HL,LWRD fflush + 000008E0 CD 00 00 1211 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000008E3 1212 ?0114: + 000008E3 1213 ?0116: + 000008E3 C3 00 00 1214 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000008E6 1215 pass3: + 000008E6 CD 00 00 1216 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 000008E9 B4 FF 1217 DEFW 65460 + 000008EB 2A 26 04 1218 LD HL,(finode) + 000008EE DD 75 F8 1219 LD (IX-8),L + 000008F1 DD 74 F9 1220 LD (IX-7),H + 000008F4 1221 ?0118: + 000008F4 ED 4B 0C 04 1222 LD BC,(filsys+6) + 000008F8 DD 6E F8 1223 LD L,(IX-8) + 000008FB DD 66 F9 1224 LD H,(IX-7) + 000008FE A7 1225 AND A + 000008FF ED 42 1226 SBC HL,BC + 00000901 30 27 1227 JR NC,?0117 + 00000903 1228 ?0119: + 00000903 06 03 1229 LD B,3 + 00000905 DD 5E F8 1230 LD E,(IX-8) + 00000908 DD 56 F9 1231 LD D,(IX-7) + 0000090B CD 00 00 1232 CALL LWRD ?US_RSH_L02 + 0000090E 2A 36 04 1233 LD HL,(block_bitmap) + 00000911 19 1234 ADD HL,DE + 00000912 DD 7E F8 1235 LD A,(IX-8) + 00000915 E6 07 1236 AND 7 + 00000917 47 1237 LD B,A + 00000918 3E 01 1238 LD A,1 + 0000091A CD 00 00 1239 CALL LWRD ?C_LSH_L01 + 0000091D 2F 1240 CPL + 0000091E A6 1241 AND (HL) + 0000091F 77 1242 LD (HL),A + 00000920 DD 34 F8 1243 INC (IX-8) + 00000923 20 03 1244 JR NZ,?0392 + 00000925 DD 34 F9 1245 INC (IX-7) + 00000928 1246 ?0392: + 00000928 18 CA 1247 JR ?0118 + 0000092A 1248 ?0117: + 0000092A DD 36 B4 01 1249 LD (IX-76),1 + 0000092E DD 36 B5 00 1250 LD (IX-75),0 + 00000932 1251 ?0121: + 00000932 ED 4B 24 04 1252 LD BC,(ninodes) + 00000936 DD 6E B4 1253 LD L,(IX-76) + 00000939 DD 66 B5 1254 LD H,(IX-75) + 0000093C A7 1255 AND A + 0000093D ED 42 1256 SBC HL,BC + 0000093F D2 10 0C 1257 JP NC,?0120 + 00000942 1258 ?0122: + 00000942 21 04 00 1259 LD HL,4 + 00000945 39 1260 ADD HL,SP + 00000946 4D 1261 LD C,L + 00000947 44 1262 LD B,H + 00000948 DD 5E B4 1263 LD E,(IX-76) + 0000094B DD 56 B5 1264 LD D,(IX-75) + 0000094E 3E A1 1265 LD A,BYTE3 iread + 00000950 21 A1 17 1266 LD HL,LWRD iread + 00000953 CD 00 00 1267 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000956 DD 7E B8 1268 LD A,(IX-72) + 00000959 E6 00 1269 AND 0 + 0000095B 6F 1270 LD L,A + 0000095C DD 7E B9 1271 LD A,(IX-71) + 0000095F E6 F0 1272 AND 240 + 00000961 67 1273 LD H,A + 00000962 DD 75 B6 1274 LD (IX-74),L + 00000965 DD 74 B7 1275 LD (IX-73),H + 00000968 3E A0 1276 LD A,160 + 0000096A AC 1277 XOR H + 0000096B B5 1278 OR L + 0000096C 28 21 1279 JR Z,?0124 + 0000096E 3E 80 1280 LD A,128 + 00000970 DD AE B7 1281 XOR (IX-73) + 00000973 DD B6 B6 1282 OR (IX-74) + 00000976 28 17 1283 JR Z,?0124 + 00000978 3E 40 1284 LD A,64 + 0000097A DD AE B7 1285 XOR (IX-73) + 0000097D DD B6 B6 1286 OR (IX-74) + 00000980 28 0D 1287 JR Z,?0124 + 00000982 3E 90 1288 LD A,144 + 00000984 DD AE B7 1289 XOR (IX-73) + 00000987 DD B6 B6 1290 OR (IX-74) + 0000098A 28 03 1291 JR Z,?0124 + 0000098C 1292 ?0126: + 0000098C 1293 ?0125: + 0000098C 1294 ?0123: + 0000098C C3 05 0C 1295 JP LWRD ?0127 + 0000098F 1296 ?0124: + 0000098F DD 36 F8 12 1297 LD (IX-8),18 + 00000993 DD 36 F9 00 1298 LD (IX-7),0 + 00000997 1299 ?0129: + 00000997 DD 4E F8 1300 LD C,(IX-8) + 0000099A DD 46 F9 1301 LD B,(IX-7) + 0000099D 21 13 00 1302 LD HL,19 + 000009A0 A7 1303 AND A + 000009A1 ED 42 1304 SBC HL,BC + 000009A3 DA BF 0A 1305 JP C,?0128 + 000009A6 1306 ?0130: + 000009A6 DD 6E F8 1307 LD L,(IX-8) + 000009A9 DD 66 F9 1308 LD H,(IX-7) + 000009AC 29 1309 ADD HL,HL + 000009AD E5 1310 PUSH HL + 000009AE 21 06 00 1311 LD HL,6 + 000009B1 39 1312 ADD HL,SP + 000009B2 01 18 00 1313 LD BC,24 + 000009B5 09 1314 ADD HL,BC + 000009B6 4D 1315 LD C,L + 000009B7 44 1316 LD B,H + 000009B8 E1 1317 POP HL + 000009B9 09 1318 ADD HL,BC + 000009BA 46 1319 LD B,(HL) + 000009BB 23 1320 INC HL + 000009BC 66 1321 LD H,(HL) + 000009BD 68 1322 LD L,B + 000009BE DD 75 FC 1323 LD (IX-4),L + 000009C1 DD 74 FD 1324 LD (IX-3),H + 000009C4 7D 1325 LD A,L + 000009C5 B4 1326 OR H + 000009C6 CA B4 0A 1327 JP Z,?0132 + 000009C9 1328 ?0131: + 000009C9 06 03 1329 LD B,3 + 000009CB DD 5E FC 1330 LD E,(IX-4) + 000009CE DD 56 FD 1331 LD D,(IX-3) + 000009D1 CD 00 00 1332 CALL LWRD ?US_RSH_L02 + 000009D4 2A 36 04 1333 LD HL,(block_bitmap) + 000009D7 19 1334 ADD HL,DE + 000009D8 DD 7E FC 1335 LD A,(IX-4) + 000009DB E6 07 1336 AND 7 + 000009DD 47 1337 LD B,A + 000009DE 3E 01 1338 LD A,1 + 000009E0 CD 00 00 1339 CALL LWRD ?C_LSH_L01 + 000009E3 A6 1340 AND (HL) + 000009E4 CA 98 0A 1341 JP Z,?0134 + 000009E7 1342 ?0133: + 000009E7 DD 6E FC 1343 LD L,(IX-4) + 000009EA DD 66 FD 1344 LD H,(IX-3) + 000009ED E5 1345 PUSH HL + 000009EE DD 6E B4 1346 LD L,(IX-76) + 000009F1 DD 66 B5 1347 LD H,(IX-75) + 000009F4 E5 1348 PUSH HL + 000009F5 DD 6E F8 1349 LD L,(IX-8) + 000009F8 DD 66 F9 1350 LD H,(IX-7) + 000009FB E5 1351 PUSH HL + 000009FC 21 14 02 1352 LD HL,?0135 + 000009FF E5 1353 PUSH HL + 00000A00 3E 00 1354 LD A,BYTE3 printf + 00000A02 21 00 00 1355 LD HL,LWRD printf + 00000A05 CD 00 00 1356 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000A08 F1 1357 POP AF + 00000A09 F1 1358 POP AF + 00000A0A F1 1359 POP AF + 00000A0B F1 1360 POP AF + 00000A0C 3E 5A 1361 LD A,BYTE3 yes + 00000A0E 21 5A 19 1362 LD HL,LWRD yes + 00000A11 CD 00 00 1363 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000A14 7D 1364 LD A,L + 00000A15 B4 1365 OR H + 00000A16 28 7E 1366 JR Z,?0137 + 00000A18 1367 ?0136: + 00000A18 11 06 04 1368 LD DE,filsys + 00000A1B 3E 57 1369 LD A,BYTE3 _blk_alloc + 00000A1D 21 57 16 1370 LD HL,LWRD _blk_alloc + 00000A20 CD 00 00 1371 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000A23 DD 75 FE 1372 LD (IX-2),L + 00000A26 DD 74 FF 1373 LD (IX-1),H + 00000A29 7D 1374 LD A,L + 00000A2A B4 1375 OR H + 00000A2B 20 1A 1376 JR NZ,?0139 + 00000A2D 1377 ?0138: + 00000A2D 21 55 02 1378 LD HL,?0140 + 00000A30 E5 1379 PUSH HL + 00000A31 3E 00 1380 LD A,BYTE3 printf + 00000A33 21 00 00 1381 LD HL,LWRD printf + 00000A36 CD 00 00 1382 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000A39 F1 1383 POP AF + 00000A3A 11 00 00 1384 LD DE,stdout + 00000A3D 3E 00 1385 LD A,BYTE3 fflush + 00000A3F 21 00 00 1386 LD HL,LWRD fflush + 00000A42 CD 00 00 1387 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000A45 18 4F 1388 JR ?0141 + 00000A47 1389 ?0139: + 00000A47 DD 5E FC 1390 LD E,(IX-4) + 00000A4A DD 56 FD 1391 LD D,(IX-3) + 00000A4D 3E 29 1392 LD A,BYTE3 daread + 00000A4F 21 29 17 1393 LD HL,LWRD daread + 00000A52 CD 00 00 1394 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000A55 4D 1395 LD C,L + 00000A56 44 1396 LD B,H + 00000A57 DD 5E FE 1397 LD E,(IX-2) + 00000A5A DD 56 FF 1398 LD D,(IX-1) + 00000A5D 3E 68 1399 LD A,BYTE3 dwrite + 00000A5F 21 68 17 1400 LD HL,LWRD dwrite + 00000A62 CD 00 00 1401 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000A65 DD 6E F8 1402 LD L,(IX-8) + 00000A68 DD 66 F9 1403 LD H,(IX-7) + 00000A6B 29 1404 ADD HL,HL + 00000A6C E5 1405 PUSH HL + 00000A6D 21 06 00 1406 LD HL,6 + 00000A70 39 1407 ADD HL,SP + 00000A71 01 18 00 1408 LD BC,24 + 00000A74 09 1409 ADD HL,BC + 00000A75 4D 1410 LD C,L + 00000A76 44 1411 LD B,H + 00000A77 E1 1412 POP HL + 00000A78 09 1413 ADD HL,BC + 00000A79 DD 4E FE 1414 LD C,(IX-2) + 00000A7C DD 46 FF 1415 LD B,(IX-1) + 00000A7F 71 1416 LD (HL),C + 00000A80 23 1417 INC HL + 00000A81 70 1418 LD (HL),B + 00000A82 21 04 00 1419 LD HL,4 + 00000A85 39 1420 ADD HL,SP + 00000A86 4D 1421 LD C,L + 00000A87 44 1422 LD B,H + 00000A88 DD 5E B4 1423 LD E,(IX-76) + 00000A8B DD 56 B5 1424 LD D,(IX-75) + 00000A8E 3E EF 1425 LD A,BYTE3 iwrite + 00000A90 21 EF 17 1426 LD HL,LWRD iwrite + 00000A93 CD 00 00 1427 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000A96 1428 ?0141: + 00000A96 1429 ?0137: + 00000A96 18 1C 1430 JR ?0142 + 00000A98 1431 ?0134: + 00000A98 06 03 1432 LD B,3 + 00000A9A DD 5E FC 1433 LD E,(IX-4) + 00000A9D DD 56 FD 1434 LD D,(IX-3) + 00000AA0 CD 00 00 1435 CALL LWRD ?US_RSH_L02 + 00000AA3 2A 36 04 1436 LD HL,(block_bitmap) + 00000AA6 19 1437 ADD HL,DE + 00000AA7 DD 7E FC 1438 LD A,(IX-4) + 00000AAA E6 07 1439 AND 7 + 00000AAC 47 1440 LD B,A + 00000AAD 3E 01 1441 LD A,1 + 00000AAF CD 00 00 1442 CALL LWRD ?C_LSH_L01 + 00000AB2 B6 1443 OR (HL) + 00000AB3 77 1444 LD (HL),A + 00000AB4 1445 ?0142: + 00000AB4 1446 ?0132: + 00000AB4 DD 34 F8 1447 INC (IX-8) + 00000AB7 20 03 1448 JR NZ,?0393 + 00000AB9 DD 34 F9 1449 INC (IX-7) + 00000ABC 1450 ?0393: + 00000ABC C3 97 09 1451 JP LWRD ?0129 + 00000ABF 1452 ?0128: + 00000ABF AF 1453 XOR A + 00000AC0 DD 77 F8 1454 LD (IX-8),A + 00000AC3 DD 77 F9 1455 LD (IX-7),A + 00000AC6 21 0C 00 1456 LD HL,12 + 00000AC9 39 1457 ADD HL,SP + 00000ACA 5E 1458 LD E,(HL) + 00000ACB 23 1459 INC HL + 00000ACC 56 1460 LD D,(HL) + 00000ACD 23 1461 INC HL + 00000ACE 4E 1462 LD C,(HL) + 00000ACF 23 1463 INC HL + 00000AD0 46 1464 LD B,(HL) + 00000AD1 EB 1465 EX DE,HL + 00000AD2 3E 09 1466 LD A,9 + 00000AD4 CD 00 00 1467 CALL LWRD ?SL_RSH_L03 + 00000AD7 DD 75 FA 1468 LD (IX-6),L + 00000ADA DD 74 FB 1469 LD (IX-5),H + 00000ADD 1470 ?0144: + 00000ADD DD 4E F8 1471 LD C,(IX-8) + 00000AE0 DD 46 F9 1472 LD B,(IX-7) + 00000AE3 DD 6E FA 1473 LD L,(IX-6) + 00000AE6 DD 66 FB 1474 LD H,(IX-5) + 00000AE9 A7 1475 AND A + 00000AEA ED 42 1476 SBC HL,BC + 00000AEC DA 05 0C 1477 JP C,?0143 + 00000AEF 1478 ?0145: + 00000AEF DD 4E F8 1479 LD C,(IX-8) + 00000AF2 DD 46 F9 1480 LD B,(IX-7) + 00000AF5 21 04 00 1481 LD HL,4 + 00000AF8 39 1482 ADD HL,SP + 00000AF9 5D 1483 LD E,L + 00000AFA 54 1484 LD D,H + 00000AFB 3E 05 1485 LD A,BYTE3 getblkno + 00000AFD 21 05 14 1486 LD HL,LWRD getblkno + 00000B00 CD 00 00 1487 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000B03 DD 75 FC 1488 LD (IX-4),L + 00000B06 DD 74 FD 1489 LD (IX-3),H + 00000B09 7D 1490 LD A,L + 00000B0A B4 1491 OR H + 00000B0B 20 03 1492 JR NZ,?0147 + 00000B0D 1493 ?0146: + 00000B0D C3 FA 0B 1494 JP LWRD ?0148 + 00000B10 1495 ?0147: + 00000B10 06 03 1496 LD B,3 + 00000B12 DD 5E FC 1497 LD E,(IX-4) + 00000B15 DD 56 FD 1498 LD D,(IX-3) + 00000B18 CD 00 00 1499 CALL LWRD ?US_RSH_L02 + 00000B1B 2A 36 04 1500 LD HL,(block_bitmap) + 00000B1E 19 1501 ADD HL,DE + 00000B1F DD 7E FC 1502 LD A,(IX-4) + 00000B22 E6 07 1503 AND 7 + 00000B24 47 1504 LD B,A + 00000B25 3E 01 1505 LD A,1 + 00000B27 CD 00 00 1506 CALL LWRD ?C_LSH_L01 + 00000B2A A6 1507 AND (HL) + 00000B2B CA DE 0B 1508 JP Z,?0150 + 00000B2E 1509 ?0149: + 00000B2E DD 6E FC 1510 LD L,(IX-4) + 00000B31 DD 66 FD 1511 LD H,(IX-3) + 00000B34 E5 1512 PUSH HL + 00000B35 DD 6E B4 1513 LD L,(IX-76) + 00000B38 DD 66 B5 1514 LD H,(IX-75) + 00000B3B E5 1515 PUSH HL + 00000B3C DD 6E F8 1516 LD L,(IX-8) + 00000B3F DD 66 F9 1517 LD H,(IX-7) + 00000B42 E5 1518 PUSH HL + 00000B43 21 74 02 1519 LD HL,?0151 + 00000B46 E5 1520 PUSH HL + 00000B47 3E 00 1521 LD A,BYTE3 printf + 00000B49 21 00 00 1522 LD HL,LWRD printf + 00000B4C CD 00 00 1523 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000B4F F1 1524 POP AF + 00000B50 F1 1525 POP AF + 00000B51 F1 1526 POP AF + 00000B52 F1 1527 POP AF + 00000B53 3E 5A 1528 LD A,BYTE3 yes + 00000B55 21 5A 19 1529 LD HL,LWRD yes + 00000B58 CD 00 00 1530 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000B5B 7D 1531 LD A,L + 00000B5C B4 1532 OR H + 00000B5D 28 7D 1533 JR Z,?0153 + 00000B5F 1534 ?0152: + 00000B5F 11 06 04 1535 LD DE,filsys + 00000B62 3E 57 1536 LD A,BYTE3 _blk_alloc + 00000B64 21 57 16 1537 LD HL,LWRD _blk_alloc + 00000B67 CD 00 00 1538 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000B6A DD 75 FE 1539 LD (IX-2),L + 00000B6D DD 74 FF 1540 LD (IX-1),H + 00000B70 7D 1541 LD A,L + 00000B71 B4 1542 OR H + 00000B72 20 1A 1543 JR NZ,?0155 + 00000B74 1544 ?0154: + 00000B74 21 55 02 1545 LD HL,?0140 + 00000B77 E5 1546 PUSH HL + 00000B78 3E 00 1547 LD A,BYTE3 printf + 00000B7A 21 00 00 1548 LD HL,LWRD printf + 00000B7D CD 00 00 1549 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000B80 F1 1550 POP AF + 00000B81 11 00 00 1551 LD DE,stdout + 00000B84 3E 00 1552 LD A,BYTE3 fflush + 00000B86 21 00 00 1553 LD HL,LWRD fflush + 00000B89 CD 00 00 1554 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000B8C 18 4E 1555 JR ?0156 + 00000B8E 1556 ?0155: + 00000B8E DD 5E FC 1557 LD E,(IX-4) + 00000B91 DD 56 FD 1558 LD D,(IX-3) + 00000B94 3E 29 1559 LD A,BYTE3 daread + 00000B96 21 29 17 1560 LD HL,LWRD daread + 00000B99 CD 00 00 1561 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000B9C 4D 1562 LD C,L + 00000B9D 44 1563 LD B,H + 00000B9E DD 5E FE 1564 LD E,(IX-2) + 00000BA1 DD 56 FF 1565 LD D,(IX-1) + 00000BA4 3E 68 1566 LD A,BYTE3 dwrite + 00000BA6 21 68 17 1567 LD HL,LWRD dwrite + 00000BA9 CD 00 00 1568 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000BAC DD 6E FE 1569 LD L,(IX-2) + 00000BAF DD 66 FF 1570 LD H,(IX-1) + 00000BB2 E5 1571 PUSH HL + 00000BB3 DD 4E F8 1572 LD C,(IX-8) + 00000BB6 DD 46 F9 1573 LD B,(IX-7) + 00000BB9 21 06 00 1574 LD HL,6 + 00000BBC 39 1575 ADD HL,SP + 00000BBD 5D 1576 LD E,L + 00000BBE 54 1577 LD D,H + 00000BBF 3E 01 1578 LD A,BYTE3 setblkno + 00000BC1 21 01 15 1579 LD HL,LWRD setblkno + 00000BC4 CD 00 00 1580 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000BC7 E1 1581 POP HL + 00000BC8 21 04 00 1582 LD HL,4 + 00000BCB 39 1583 ADD HL,SP + 00000BCC 4D 1584 LD C,L + 00000BCD 44 1585 LD B,H + 00000BCE DD 5E B4 1586 LD E,(IX-76) + 00000BD1 DD 56 B5 1587 LD D,(IX-75) + 00000BD4 3E EF 1588 LD A,BYTE3 iwrite + 00000BD6 21 EF 17 1589 LD HL,LWRD iwrite + 00000BD9 CD 00 00 1590 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000BDC 1591 ?0156: + 00000BDC 1592 ?0153: + 00000BDC 18 1C 1593 JR ?0157 + 00000BDE 1594 ?0150: + 00000BDE 06 03 1595 LD B,3 + 00000BE0 DD 5E FC 1596 LD E,(IX-4) + 00000BE3 DD 56 FD 1597 LD D,(IX-3) + 00000BE6 CD 00 00 1598 CALL LWRD ?US_RSH_L02 + 00000BE9 2A 36 04 1599 LD HL,(block_bitmap) + 00000BEC 19 1600 ADD HL,DE + 00000BED DD 7E FC 1601 LD A,(IX-4) + 00000BF0 E6 07 1602 AND 7 + 00000BF2 47 1603 LD B,A + 00000BF3 3E 01 1604 LD A,1 + 00000BF5 CD 00 00 1605 CALL LWRD ?C_LSH_L01 + 00000BF8 B6 1606 OR (HL) + 00000BF9 77 1607 LD (HL),A + 00000BFA 1608 ?0157: + 00000BFA 1609 ?0148: + 00000BFA DD 34 F8 1610 INC (IX-8) + 00000BFD 20 03 1611 JR NZ,?0394 + 00000BFF DD 34 F9 1612 INC (IX-7) + 00000C02 1613 ?0394: + 00000C02 C3 DD 0A 1614 JP LWRD ?0144 + 00000C05 1615 ?0143: + 00000C05 1616 ?0127: + 00000C05 DD 34 B4 1617 INC (IX-76) + 00000C08 20 03 1618 JR NZ,?0395 + 00000C0A DD 34 B5 1619 INC (IX-75) + 00000C0D 1620 ?0395: + 00000C0D C3 32 09 1621 JP LWRD ?0121 + 00000C10 1622 ?0120: + 00000C10 C3 00 00 1623 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00000C13 1624 ckdir: + 00000C13 CD 00 00 1625 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 00000C16 14 FF 1626 DEFW 65300 + 00000C18 21 00 00 1627 LD HL,0 + 00000C1B 39 1628 ADD HL,SP + 00000C1C 4D 1629 LD C,L + 00000C1D 44 1630 LD B,H + 00000C1E DD 5E 02 1631 LD E,(IX+2) + 00000C21 DD 56 03 1632 LD D,(IX+3) + 00000C24 3E A1 1633 LD A,BYTE3 iread + 00000C26 21 A1 17 1634 LD HL,LWRD iread + 00000C29 CD 00 00 1635 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000C2C 21 00 00 1636 LD HL,0 + 00000C2F 39 1637 ADD HL,SP + 00000C30 7E 1638 LD A,(HL) + 00000C31 E6 00 1639 AND 0 + 00000C33 4F 1640 LD C,A + 00000C34 23 1641 INC HL + 00000C35 7E 1642 LD A,(HL) + 00000C36 E6 F0 1643 AND 240 + 00000C38 47 1644 LD B,A + 00000C39 3E 40 1645 LD A,64 + 00000C3B A8 1646 XOR B + 00000C3C B1 1647 OR C + 00000C3D 28 03 1648 JR Z,?0159 + 00000C3F 1649 ?0158: + 00000C3F C3 AB 10 1650 JP LWRD ?0219 + 00000C42 1651 ?0159: + 00000C42 2A 02 04 1652 LD HL,(depth) + 00000C45 23 1653 INC HL + 00000C46 22 02 04 1654 LD (depth),HL + 00000C49 21 52 00 1655 LD HL,82 + 00000C4C 39 1656 ADD HL,SP + 00000C4D E5 1657 PUSH HL + 00000C4E 21 0A 00 1658 LD HL,10 + 00000C51 39 1659 ADD HL,SP + 00000C52 5E 1660 LD E,(HL) + 00000C53 23 1661 INC HL + 00000C54 56 1662 LD D,(HL) + 00000C55 23 1663 INC HL + 00000C56 4E 1664 LD C,(HL) + 00000C57 23 1665 INC HL + 00000C58 46 1666 LD B,(HL) + 00000C59 EB 1667 EX DE,HL + 00000C5A 7D 1668 LD A,L + 00000C5B E6 0F 1669 AND 15 + 00000C5D 4F 1670 LD C,A + 00000C5E 7C 1671 LD A,H + 00000C5F E6 00 1672 AND 0 + 00000C61 47 1673 LD B,A + 00000C62 E1 1674 POP HL + 00000C63 71 1675 LD (HL),C + 00000C64 23 1676 INC HL + 00000C65 70 1677 LD (HL),B + 00000C66 21 52 00 1678 LD HL,82 + 00000C69 39 1679 ADD HL,SP + 00000C6A 7E 1680 LD A,(HL) + 00000C6B 23 1681 INC HL + 00000C6C B6 1682 OR (HL) + 00000C6D 28 4B 1683 JR Z,?0161 + 00000C6F 1684 ?0160: + 00000C6F 21 52 00 1685 LD HL,82 + 00000C72 39 1686 ADD HL,SP + 00000C73 4E 1687 LD C,(HL) + 00000C74 23 1688 INC HL + 00000C75 46 1689 LD B,(HL) + 00000C76 C5 1690 PUSH BC + 00000C77 DD 6E 02 1691 LD L,(IX+2) + 00000C7A DD 66 03 1692 LD H,(IX+3) + 00000C7D E5 1693 PUSH HL + 00000C7E 21 AC 02 1694 LD HL,?0162 + 00000C81 E5 1695 PUSH HL + 00000C82 3E 00 1696 LD A,BYTE3 printf + 00000C84 21 00 00 1697 LD HL,LWRD printf + 00000C87 CD 00 00 1698 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000C8A F1 1699 POP AF + 00000C8B F1 1700 POP AF + 00000C8C F1 1701 POP AF + 00000C8D 3E 5A 1702 LD A,BYTE3 yes + 00000C8F 21 5A 19 1703 LD HL,LWRD yes + 00000C92 CD 00 00 1704 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000C95 7D 1705 LD A,L + 00000C96 B4 1706 OR H + 00000C97 28 21 1707 JR Z,?0164 + 00000C99 1708 ?0163: + 00000C99 21 08 00 1709 LD HL,8 + 00000C9C 39 1710 ADD HL,SP + 00000C9D 01 00 00 1711 LD BC,0 + 00000CA0 11 F0 FF 1712 LD DE,65520 + 00000CA3 CD 00 00 1713 CALL LWRD ?L_ANDASG_L03 + 00000CA6 21 00 00 1714 LD HL,0 + 00000CA9 39 1715 ADD HL,SP + 00000CAA 4D 1716 LD C,L + 00000CAB 44 1717 LD B,H + 00000CAC DD 5E 02 1718 LD E,(IX+2) + 00000CAF DD 56 03 1719 LD D,(IX+3) + 00000CB2 3E EF 1720 LD A,BYTE3 iwrite + 00000CB4 21 EF 17 1721 LD HL,LWRD iwrite + 00000CB7 CD 00 00 1722 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000CBA 1723 ?0164: + 00000CBA 1724 ?0161: + 00000CBA 21 54 00 1725 LD HL,84 + 00000CBD 39 1726 ADD HL,SP + 00000CBE E5 1727 PUSH HL + 00000CBF 01 00 00 1728 LD BC,0 + 00000CC2 C5 1729 PUSH BC + 00000CC3 01 10 00 1730 LD BC,16 + 00000CC6 C5 1731 PUSH BC + 00000CC7 21 0E 00 1732 LD HL,14 + 00000CCA 39 1733 ADD HL,SP + 00000CCB 5E 1734 LD E,(HL) + 00000CCC 23 1735 INC HL + 00000CCD 56 1736 LD D,(HL) + 00000CCE 23 1737 INC HL + 00000CCF 4E 1738 LD C,(HL) + 00000CD0 23 1739 INC HL + 00000CD1 46 1740 LD B,(HL) + 00000CD2 EB 1741 EX DE,HL + 00000CD3 CD 00 00 1742 CALL LWRD ?SL_DIV_L03 + 00000CD6 EB 1743 EX DE,HL + 00000CD7 E1 1744 POP HL + 00000CD8 73 1745 LD (HL),E + 00000CD9 23 1746 INC HL + 00000CDA 72 1747 LD (HL),D + 00000CDB 21 50 00 1748 LD HL,80 + 00000CDE 39 1749 ADD HL,SP + 00000CDF AF 1750 XOR A + 00000CE0 77 1751 LD (HL),A + 00000CE1 23 1752 INC HL + 00000CE2 77 1753 LD (HL),A + 00000CE3 1754 ?0166: + 00000CE3 21 54 00 1755 LD HL,84 + 00000CE6 39 1756 ADD HL,SP + 00000CE7 4E 1757 LD C,(HL) + 00000CE8 23 1758 INC HL + 00000CE9 46 1759 LD B,(HL) + 00000CEA 21 50 00 1760 LD HL,80 + 00000CED 39 1761 ADD HL,SP + 00000CEE 56 1762 LD D,(HL) + 00000CEF 23 1763 INC HL + 00000CF0 66 1764 LD H,(HL) + 00000CF1 6A 1765 LD L,D + 00000CF2 A7 1766 AND A + 00000CF3 ED 42 1767 SBC HL,BC + 00000CF5 D2 A4 10 1768 JP NC,?0165 + 00000CF8 1769 ?0167: + 00000CF8 21 40 00 1770 LD HL,64 + 00000CFB 39 1771 ADD HL,SP + 00000CFC E5 1772 PUSH HL + 00000CFD 21 52 00 1773 LD HL,82 + 00000D00 39 1774 ADD HL,SP + 00000D01 4E 1775 LD C,(HL) + 00000D02 23 1776 INC HL + 00000D03 46 1777 LD B,(HL) + 00000D04 21 02 00 1778 LD HL,2 + 00000D07 39 1779 ADD HL,SP + 00000D08 5D 1780 LD E,L + 00000D09 54 1781 LD D,H + 00000D0A 3E 5C 1782 LD A,BYTE3 dirread + 00000D0C 21 5C 18 1783 LD HL,LWRD dirread + 00000D0F CD 00 00 1784 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000D12 E1 1785 POP HL + 00000D13 21 40 00 1786 LD HL,64 + 00000D16 39 1787 ADD HL,SP + 00000D17 46 1788 LD B,(HL) + 00000D18 23 1789 INC HL + 00000D19 66 1790 LD H,(HL) + 00000D1A 68 1791 LD L,B + 00000D1B 7D 1792 LD A,L + 00000D1C B4 1793 OR H + 00000D1D 20 03 1794 JR NZ,?0169 + 00000D1F 1795 ?0168: + 00000D1F C3 98 10 1796 JP LWRD ?0170 + 00000D22 1797 ?0169: + 00000D22 21 40 00 1798 LD HL,64 + 00000D25 39 1799 ADD HL,SP + 00000D26 46 1800 LD B,(HL) + 00000D27 23 1801 INC HL + 00000D28 66 1802 LD H,(HL) + 00000D29 68 1803 LD L,B + 00000D2A 01 01 00 1804 LD BC,1 + 00000D2D A7 1805 AND A + 00000D2E ED 42 1806 SBC HL,BC + 00000D30 38 15 1807 JR C,?0171 + 00000D32 2A 0A 04 1808 LD HL,(filsys+4) + 00000D35 29 1809 ADD HL,HL + 00000D36 29 1810 ADD HL,HL + 00000D37 29 1811 ADD HL,HL + 00000D38 4D 1812 LD C,L + 00000D39 44 1813 LD B,H + 00000D3A 21 40 00 1814 LD HL,64 + 00000D3D 39 1815 ADD HL,SP + 00000D3E 56 1816 LD D,(HL) + 00000D3F 23 1817 INC HL + 00000D40 66 1818 LD H,(HL) + 00000D41 6A 1819 LD L,D + 00000D42 A7 1820 AND A + 00000D43 ED 42 1821 SBC HL,BC + 00000D45 38 60 1822 JR C,?0172 + 00000D47 1823 ?0173: + 00000D47 1824 ?0174: + 00000D47 1825 ?0171: + 00000D47 21 40 00 1826 LD HL,64 + 00000D4A 39 1827 ADD HL,SP + 00000D4B 4E 1828 LD C,(HL) + 00000D4C 23 1829 INC HL + 00000D4D 46 1830 LD B,(HL) + 00000D4E C5 1831 PUSH BC + 00000D4F 21 42 00 1832 LD HL,66 + 00000D52 39 1833 ADD HL,SP + 00000D53 01 02 00 1834 LD BC,2 + 00000D56 09 1835 ADD HL,BC + 00000D57 E5 1836 PUSH HL + 00000D58 DD 6E 0A 1837 LD L,(IX+10) + 00000D5B DD 66 0B 1838 LD H,(IX+11) + 00000D5E E5 1839 PUSH HL + 00000D5F 21 E5 02 1840 LD HL,?0175 + 00000D62 E5 1841 PUSH HL + 00000D63 3E 00 1842 LD A,BYTE3 printf + 00000D65 21 00 00 1843 LD HL,LWRD printf + 00000D68 CD 00 00 1844 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000D6B F1 1845 POP AF + 00000D6C F1 1846 POP AF + 00000D6D F1 1847 POP AF + 00000D6E F1 1848 POP AF + 00000D6F 3E 5A 1849 LD A,BYTE3 yes + 00000D71 21 5A 19 1850 LD HL,LWRD yes + 00000D74 CD 00 00 1851 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000D77 7D 1852 LD A,L + 00000D78 B4 1853 OR H + 00000D79 28 2C 1854 JR Z,?0177 + 00000D7B 1855 ?0176: + 00000D7B 21 40 00 1856 LD HL,64 + 00000D7E 39 1857 ADD HL,SP + 00000D7F AF 1858 XOR A + 00000D80 77 1859 LD (HL),A + 00000D81 23 1860 INC HL + 00000D82 77 1861 LD (HL),A + 00000D83 21 42 00 1862 LD HL,66 + 00000D86 39 1863 ADD HL,SP + 00000D87 36 00 1864 LD (HL),0 + 00000D89 21 40 00 1865 LD HL,64 + 00000D8C 39 1866 ADD HL,SP + 00000D8D E5 1867 PUSH HL + 00000D8E 21 52 00 1868 LD HL,82 + 00000D91 39 1869 ADD HL,SP + 00000D92 4E 1870 LD C,(HL) + 00000D93 23 1871 INC HL + 00000D94 46 1872 LD B,(HL) + 00000D95 21 02 00 1873 LD HL,2 + 00000D98 39 1874 ADD HL,SP + 00000D99 5D 1875 LD E,L + 00000D9A 54 1876 LD D,H + 00000D9B 3E D0 1877 LD A,BYTE3 dirwrite + 00000D9D 21 D0 18 1878 LD HL,LWRD dirwrite + 00000DA0 CD 00 00 1879 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000DA3 E1 1880 POP HL + 00000DA4 C3 98 10 1881 JP LWRD ?0170 + 00000DA7 1882 ?0177: + 00000DA7 1883 ?0172: + 00000DA7 21 40 00 1884 LD HL,64 + 00000DAA 39 1885 ADD HL,SP + 00000DAB 46 1886 LD B,(HL) + 00000DAC 23 1887 INC HL + 00000DAD 66 1888 LD H,(HL) + 00000DAE 68 1889 LD L,B + 00000DAF 7D 1890 LD A,L + 00000DB0 B4 1891 OR H + 00000DB1 28 71 1892 JR Z,?0179 + 00000DB3 21 40 00 1893 LD HL,64 + 00000DB6 39 1894 ADD HL,SP + 00000DB7 46 1895 LD B,(HL) + 00000DB8 23 1896 INC HL + 00000DB9 66 1897 LD H,(HL) + 00000DBA 68 1898 LD L,B + 00000DBB ED 4B 38 04 1899 LD BC,(link_count) + 00000DBF 09 1900 ADD HL,BC + 00000DC0 46 1901 LD B,(HL) + 00000DC1 04 1902 INC B + 00000DC2 20 60 1903 JR NZ,?0179 + 00000DC4 1904 ?0181: + 00000DC4 1905 ?0180: + 00000DC4 1906 ?0178: + 00000DC4 21 40 00 1907 LD HL,64 + 00000DC7 39 1908 ADD HL,SP + 00000DC8 4E 1909 LD C,(HL) + 00000DC9 23 1910 INC HL + 00000DCA 46 1911 LD B,(HL) + 00000DCB C5 1912 PUSH BC + 00000DCC 21 42 00 1913 LD HL,66 + 00000DCF 39 1914 ADD HL,SP + 00000DD0 01 02 00 1915 LD BC,2 + 00000DD3 09 1916 ADD HL,BC + 00000DD4 E5 1917 PUSH HL + 00000DD5 DD 6E 0A 1918 LD L,(IX+10) + 00000DD8 DD 66 0B 1919 LD H,(IX+11) + 00000DDB E5 1920 PUSH HL + 00000DDC 21 20 03 1921 LD HL,?0182 + 00000DDF E5 1922 PUSH HL + 00000DE0 3E 00 1923 LD A,BYTE3 printf + 00000DE2 21 00 00 1924 LD HL,LWRD printf + 00000DE5 CD 00 00 1925 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000DE8 F1 1926 POP AF + 00000DE9 F1 1927 POP AF + 00000DEA F1 1928 POP AF + 00000DEB F1 1929 POP AF + 00000DEC 3E 5A 1930 LD A,BYTE3 yes + 00000DEE 21 5A 19 1931 LD HL,LWRD yes + 00000DF1 CD 00 00 1932 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000DF4 7D 1933 LD A,L + 00000DF5 B4 1934 OR H + 00000DF6 28 2C 1935 JR Z,?0184 + 00000DF8 1936 ?0183: + 00000DF8 21 40 00 1937 LD HL,64 + 00000DFB 39 1938 ADD HL,SP + 00000DFC AF 1939 XOR A + 00000DFD 77 1940 LD (HL),A + 00000DFE 23 1941 INC HL + 00000DFF 77 1942 LD (HL),A + 00000E00 21 42 00 1943 LD HL,66 + 00000E03 39 1944 ADD HL,SP + 00000E04 36 00 1945 LD (HL),0 + 00000E06 21 40 00 1946 LD HL,64 + 00000E09 39 1947 ADD HL,SP + 00000E0A E5 1948 PUSH HL + 00000E0B 21 52 00 1949 LD HL,82 + 00000E0E 39 1950 ADD HL,SP + 00000E0F 4E 1951 LD C,(HL) + 00000E10 23 1952 INC HL + 00000E11 46 1953 LD B,(HL) + 00000E12 21 02 00 1954 LD HL,2 + 00000E15 39 1955 ADD HL,SP + 00000E16 5D 1956 LD E,L + 00000E17 54 1957 LD D,H + 00000E18 3E D0 1958 LD A,BYTE3 dirwrite + 00000E1A 21 D0 18 1959 LD HL,LWRD dirwrite + 00000E1D CD 00 00 1960 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000E20 E1 1961 POP HL + 00000E21 C3 98 10 1962 JP LWRD ?0170 + 00000E24 1963 ?0184: + 00000E24 1964 ?0179: + 00000E24 21 40 00 1965 LD HL,64 + 00000E27 39 1966 ADD HL,SP + 00000E28 46 1967 LD B,(HL) + 00000E29 23 1968 INC HL + 00000E2A 66 1969 LD H,(HL) + 00000E2B 68 1970 LD L,B + 00000E2C ED 4B 38 04 1971 LD BC,(link_count) + 00000E30 09 1972 ADD HL,BC + 00000E31 46 1973 LD B,(HL) + 00000E32 34 1974 INC (HL) + 00000E33 04 1975 INC B + 00000E34 04 1976 INC B + 00000E35 20 26 1977 JR NZ,?0186 + 00000E37 1978 ?0185: + 00000E37 21 40 00 1979 LD HL,64 + 00000E3A 39 1980 ADD HL,SP + 00000E3B 4E 1981 LD C,(HL) + 00000E3C 23 1982 INC HL + 00000E3D 46 1983 LD B,(HL) + 00000E3E C5 1984 PUSH BC + 00000E3F 21 5A 03 1985 LD HL,?0187 + 00000E42 E5 1986 PUSH HL + 00000E43 21 00 00 1987 LD HL,stderr + 00000E46 E5 1988 PUSH HL + 00000E47 3E 00 1989 LD A,BYTE3 fprintf + 00000E49 21 00 00 1990 LD HL,LWRD fprintf + 00000E4C CD 00 00 1991 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000E4F F1 1992 POP AF + 00000E50 F1 1993 POP AF + 00000E51 F1 1994 POP AF + 00000E52 11 01 00 1995 LD DE,1 + 00000E55 3E 00 1996 LD A,BYTE3 exit + 00000E57 21 00 00 1997 LD HL,LWRD exit + 00000E5A CD 00 00 1998 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000E5D 1999 ?0186: + 00000E5D 21 52 00 2000 LD HL,82 + 00000E60 39 2001 ADD HL,SP + 00000E61 AF 2002 XOR A + 00000E62 77 2003 LD (HL),A + 00000E63 23 2004 INC HL + 00000E64 77 2005 LD (HL),A + 00000E65 2006 ?0189: + 00000E65 01 0E 00 2007 LD BC,14 + 00000E68 21 52 00 2008 LD HL,82 + 00000E6B 39 2009 ADD HL,SP + 00000E6C 56 2010 LD D,(HL) + 00000E6D 23 2011 INC HL + 00000E6E 66 2012 LD H,(HL) + 00000E6F 6A 2013 LD L,D + 00000E70 A7 2014 AND A + 00000E71 ED 42 2015 SBC HL,BC + 00000E73 D2 09 0F 2016 JP NC,?0188 + 00000E76 21 40 00 2017 LD HL,64 + 00000E79 39 2018 ADD HL,SP + 00000E7A 01 02 00 2019 LD BC,2 + 00000E7D 09 2020 ADD HL,BC + 00000E7E E5 2021 PUSH HL + 00000E7F 21 54 00 2022 LD HL,84 + 00000E82 39 2023 ADD HL,SP + 00000E83 4E 2024 LD C,(HL) + 00000E84 23 2025 INC HL + 00000E85 46 2026 LD B,(HL) + 00000E86 E1 2027 POP HL + 00000E87 09 2028 ADD HL,BC + 00000E88 7E 2029 LD A,(HL) + 00000E89 B7 2030 OR A + 00000E8A 28 7D 2031 JR Z,?0188 + 00000E8C 2032 ?0192: + 00000E8C 2033 ?0191: + 00000E8C 2034 ?0190: + 00000E8C 21 40 00 2035 LD HL,64 + 00000E8F 39 2036 ADD HL,SP + 00000E90 01 02 00 2037 LD BC,2 + 00000E93 09 2038 ADD HL,BC + 00000E94 E5 2039 PUSH HL + 00000E95 21 54 00 2040 LD HL,84 + 00000E98 39 2041 ADD HL,SP + 00000E99 4E 2042 LD C,(HL) + 00000E9A 23 2043 INC HL + 00000E9B 46 2044 LD B,(HL) + 00000E9C E1 2045 POP HL + 00000E9D 09 2046 ADD HL,BC + 00000E9E 7E 2047 LD A,(HL) + 00000E9F FE 2F 2048 CP 47 + 00000EA1 20 5A 2049 JR NZ,?0194 + 00000EA3 2050 ?0193: + 00000EA3 21 40 00 2051 LD HL,64 + 00000EA6 39 2052 ADD HL,SP + 00000EA7 01 02 00 2053 LD BC,2 + 00000EAA 09 2054 ADD HL,BC + 00000EAB E5 2055 PUSH HL + 00000EAC DD 6E 0A 2056 LD L,(IX+10) + 00000EAF DD 66 0B 2057 LD H,(IX+11) + 00000EB2 E5 2058 PUSH HL + 00000EB3 21 9D 03 2059 LD HL,?0195 + 00000EB6 E5 2060 PUSH HL + 00000EB7 3E 00 2061 LD A,BYTE3 printf + 00000EB9 21 00 00 2062 LD HL,LWRD printf + 00000EBC CD 00 00 2063 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000EBF F1 2064 POP AF + 00000EC0 F1 2065 POP AF + 00000EC1 F1 2066 POP AF + 00000EC2 3E 5A 2067 LD A,BYTE3 yes + 00000EC4 21 5A 19 2068 LD HL,LWRD yes + 00000EC7 CD 00 00 2069 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000ECA 7D 2070 LD A,L + 00000ECB B4 2071 OR H + 00000ECC 28 2F 2072 JR Z,?0197 + 00000ECE 2073 ?0196: + 00000ECE 21 40 00 2074 LD HL,64 + 00000ED1 39 2075 ADD HL,SP + 00000ED2 01 02 00 2076 LD BC,2 + 00000ED5 09 2077 ADD HL,BC + 00000ED6 E5 2078 PUSH HL + 00000ED7 21 54 00 2079 LD HL,84 + 00000EDA 39 2080 ADD HL,SP + 00000EDB 4E 2081 LD C,(HL) + 00000EDC 23 2082 INC HL + 00000EDD 46 2083 LD B,(HL) + 00000EDE E1 2084 POP HL + 00000EDF 09 2085 ADD HL,BC + 00000EE0 36 7E 2086 LD (HL),126 + 00000EE2 21 40 00 2087 LD HL,64 + 00000EE5 39 2088 ADD HL,SP + 00000EE6 E5 2089 PUSH HL + 00000EE7 21 52 00 2090 LD HL,82 + 00000EEA 39 2091 ADD HL,SP + 00000EEB 4E 2092 LD C,(HL) + 00000EEC 23 2093 INC HL + 00000EED 46 2094 LD B,(HL) + 00000EEE 21 02 00 2095 LD HL,2 + 00000EF1 39 2096 ADD HL,SP + 00000EF2 5D 2097 LD E,L + 00000EF3 54 2098 LD D,H + 00000EF4 3E D0 2099 LD A,BYTE3 dirwrite + 00000EF6 21 D0 18 2100 LD HL,LWRD dirwrite + 00000EF9 CD 00 00 2101 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000EFC E1 2102 POP HL + 00000EFD 2103 ?0197: + 00000EFD 2104 ?0194: + 00000EFD 21 52 00 2105 LD HL,82 + 00000F00 39 2106 ADD HL,SP + 00000F01 34 2107 INC (HL) + 00000F02 23 2108 INC HL + 00000F03 20 01 2109 JR NZ,?0396 + 00000F05 34 2110 INC (HL) + 00000F06 2111 ?0396: + 00000F06 C3 65 0E 2112 JP LWRD ?0189 + 00000F09 2113 ?0188: + 00000F09 01 CD 03 2114 LD BC,?0200 + 00000F0C 21 40 00 2115 LD HL,64 + 00000F0F 39 2116 ADD HL,SP + 00000F10 11 02 00 2117 LD DE,2 + 00000F13 19 2118 ADD HL,DE + 00000F14 EB 2119 EX DE,HL + 00000F15 3E 00 2120 LD A,BYTE3 strcmp + 00000F17 21 00 00 2121 LD HL,LWRD strcmp + 00000F1A CD 00 00 2122 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000F1D 7D 2123 LD A,L + 00000F1E B4 2124 OR H + 00000F1F 20 6B 2125 JR NZ,?0199 + 00000F21 21 40 00 2126 LD HL,64 + 00000F24 39 2127 ADD HL,SP + 00000F25 46 2128 LD B,(HL) + 00000F26 23 2129 INC HL + 00000F27 66 2130 LD H,(HL) + 00000F28 68 2131 LD L,B + 00000F29 DD 4E 02 2132 LD C,(IX+2) + 00000F2C DD 46 03 2133 LD B,(IX+3) + 00000F2F A7 2134 AND A + 00000F30 ED 42 2135 SBC HL,BC + 00000F32 28 58 2136 JR Z,?0199 + 00000F34 2137 ?0202: + 00000F34 2138 ?0201: + 00000F34 2139 ?0198: + 00000F34 21 40 00 2140 LD HL,64 + 00000F37 39 2141 ADD HL,SP + 00000F38 01 02 00 2142 LD BC,2 + 00000F3B 09 2143 ADD HL,BC + 00000F3C E5 2144 PUSH HL + 00000F3D 21 0E 00 2145 LD HL,14 + 00000F40 E5 2146 PUSH HL + 00000F41 DD 6E 0A 2147 LD L,(IX+10) + 00000F44 DD 66 0B 2148 LD H,(IX+11) + 00000F47 E5 2149 PUSH HL + 00000F48 21 CF 03 2150 LD HL,?0203 + 00000F4B E5 2151 PUSH HL + 00000F4C 3E 00 2152 LD A,BYTE3 printf + 00000F4E 21 00 00 2153 LD HL,LWRD printf + 00000F51 CD 00 00 2154 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000F54 F1 2155 POP AF + 00000F55 F1 2156 POP AF + 00000F56 F1 2157 POP AF + 00000F57 F1 2158 POP AF + 00000F58 3E 5A 2159 LD A,BYTE3 yes + 00000F5A 21 5A 19 2160 LD HL,LWRD yes + 00000F5D CD 00 00 2161 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000F60 7D 2162 LD A,L + 00000F61 B4 2163 OR H + 00000F62 28 28 2164 JR Z,?0205 + 00000F64 2165 ?0204: + 00000F64 21 40 00 2166 LD HL,64 + 00000F67 39 2167 ADD HL,SP + 00000F68 DD 4E 02 2168 LD C,(IX+2) + 00000F6B DD 46 03 2169 LD B,(IX+3) + 00000F6E 71 2170 LD (HL),C + 00000F6F 23 2171 INC HL + 00000F70 70 2172 LD (HL),B + 00000F71 21 40 00 2173 LD HL,64 + 00000F74 39 2174 ADD HL,SP + 00000F75 E5 2175 PUSH HL + 00000F76 21 52 00 2176 LD HL,82 + 00000F79 39 2177 ADD HL,SP + 00000F7A 4E 2178 LD C,(HL) + 00000F7B 23 2179 INC HL + 00000F7C 46 2180 LD B,(HL) + 00000F7D 21 02 00 2181 LD HL,2 + 00000F80 39 2182 ADD HL,SP + 00000F81 5D 2183 LD E,L + 00000F82 54 2184 LD D,H + 00000F83 3E D0 2185 LD A,BYTE3 dirwrite + 00000F85 21 D0 18 2186 LD HL,LWRD dirwrite + 00000F88 CD 00 00 2187 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000F8B E1 2188 POP HL + 00000F8C 2189 ?0205: + 00000F8C 2190 ?0199: + 00000F8C 01 FF 03 2191 LD BC,?0208 + 00000F8F 21 40 00 2192 LD HL,64 + 00000F92 39 2193 ADD HL,SP + 00000F93 11 02 00 2194 LD DE,2 + 00000F96 19 2195 ADD HL,DE + 00000F97 EB 2196 EX DE,HL + 00000F98 3E 00 2197 LD A,BYTE3 strcmp + 00000F9A 21 00 00 2198 LD HL,LWRD strcmp + 00000F9D CD 00 00 2199 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000FA0 7D 2200 LD A,L + 00000FA1 B4 2201 OR H + 00000FA2 20 6B 2202 JR NZ,?0207 + 00000FA4 21 40 00 2203 LD HL,64 + 00000FA7 39 2204 ADD HL,SP + 00000FA8 46 2205 LD B,(HL) + 00000FA9 23 2206 INC HL + 00000FAA 66 2207 LD H,(HL) + 00000FAB 68 2208 LD L,B + 00000FAC DD 4E 04 2209 LD C,(IX+4) + 00000FAF DD 46 05 2210 LD B,(IX+5) + 00000FB2 A7 2211 AND A + 00000FB3 ED 42 2212 SBC HL,BC + 00000FB5 28 58 2213 JR Z,?0207 + 00000FB7 2214 ?0210: + 00000FB7 2215 ?0209: + 00000FB7 2216 ?0206: + 00000FB7 21 40 00 2217 LD HL,64 + 00000FBA 39 2218 ADD HL,SP + 00000FBB 01 02 00 2219 LD BC,2 + 00000FBE 09 2220 ADD HL,BC + 00000FBF E5 2221 PUSH HL + 00000FC0 21 0E 00 2222 LD HL,14 + 00000FC3 E5 2223 PUSH HL + 00000FC4 DD 6E 0A 2224 LD L,(IX+10) + 00000FC7 DD 66 0B 2225 LD H,(IX+11) + 00000FCA E5 2226 PUSH HL + 00000FCB 21 02 04 2227 LD HL,?0211 + 00000FCE E5 2228 PUSH HL + 00000FCF 3E 00 2229 LD A,BYTE3 printf + 00000FD1 21 00 00 2230 LD HL,LWRD printf + 00000FD4 CD 00 00 2231 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000FD7 F1 2232 POP AF + 00000FD8 F1 2233 POP AF + 00000FD9 F1 2234 POP AF + 00000FDA F1 2235 POP AF + 00000FDB 3E 5A 2236 LD A,BYTE3 yes + 00000FDD 21 5A 19 2237 LD HL,LWRD yes + 00000FE0 CD 00 00 2238 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000FE3 7D 2239 LD A,L + 00000FE4 B4 2240 OR H + 00000FE5 28 28 2241 JR Z,?0213 + 00000FE7 2242 ?0212: + 00000FE7 21 40 00 2243 LD HL,64 + 00000FEA 39 2244 ADD HL,SP + 00000FEB DD 4E 04 2245 LD C,(IX+4) + 00000FEE DD 46 05 2246 LD B,(IX+5) + 00000FF1 71 2247 LD (HL),C + 00000FF2 23 2248 INC HL + 00000FF3 70 2249 LD (HL),B + 00000FF4 21 40 00 2250 LD HL,64 + 00000FF7 39 2251 ADD HL,SP + 00000FF8 E5 2252 PUSH HL + 00000FF9 21 52 00 2253 LD HL,82 + 00000FFC 39 2254 ADD HL,SP + 00000FFD 4E 2255 LD C,(HL) + 00000FFE 23 2256 INC HL + 00000FFF 46 2257 LD B,(HL) + 00001000 21 02 00 2258 LD HL,2 + 00001003 39 2259 ADD HL,SP + 00001004 5D 2260 LD E,L + 00001005 54 2261 LD D,H + 00001006 3E D0 2262 LD A,BYTE3 dirwrite + 00001008 21 D0 18 2263 LD HL,LWRD dirwrite + 0000100B CD 00 00 2264 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000100E E1 2265 POP HL + 0000100F 2266 ?0213: + 0000100F 2267 ?0207: + 0000100F 21 40 00 2268 LD HL,64 + 00001012 39 2269 ADD HL,SP + 00001013 46 2270 LD B,(HL) + 00001014 23 2271 INC HL + 00001015 66 2272 LD H,(HL) + 00001016 68 2273 LD L,B + 00001017 DD 4E 04 2274 LD C,(IX+4) + 0000101A DD 46 05 2275 LD B,(IX+5) + 0000101D A7 2276 AND A + 0000101E ED 42 2277 SBC HL,BC + 00001020 28 76 2278 JR Z,?0215 + 00001022 21 40 00 2279 LD HL,64 + 00001025 39 2280 ADD HL,SP + 00001026 46 2281 LD B,(HL) + 00001027 23 2282 INC HL + 00001028 66 2283 LD H,(HL) + 00001029 68 2284 LD L,B + 0000102A DD 4E 02 2285 LD C,(IX+2) + 0000102D DD 46 03 2286 LD B,(IX+3) + 00001030 A7 2287 AND A + 00001031 ED 42 2288 SBC HL,BC + 00001033 28 63 2289 JR Z,?0215 + 00001035 01 21 00 2290 LD BC,33 + 00001038 2A 02 04 2291 LD HL,(depth) + 0000103B A7 2292 AND A + 0000103C ED 42 2293 SBC HL,BC + 0000103E 30 58 2294 JR NC,?0215 + 00001040 2295 ?0217: + 00001040 2296 ?0216: + 00001040 2297 ?0214: + 00001040 DD 4E 0A 2298 LD C,(IX+10) + 00001043 DD 46 0B 2299 LD B,(IX+11) + 00001046 21 56 00 2300 LD HL,86 + 00001049 39 2301 ADD HL,SP + 0000104A 5D 2302 LD E,L + 0000104B 54 2303 LD D,H + 0000104C 3E 00 2304 LD A,BYTE3 strcpy + 0000104E 21 00 00 2305 LD HL,LWRD strcpy + 00001051 CD 00 00 2306 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001054 21 40 00 2307 LD HL,64 + 00001057 39 2308 ADD HL,SP + 00001058 01 02 00 2309 LD BC,2 + 0000105B 09 2310 ADD HL,BC + 0000105C 4D 2311 LD C,L + 0000105D 44 2312 LD B,H + 0000105E 21 56 00 2313 LD HL,86 + 00001061 39 2314 ADD HL,SP + 00001062 5D 2315 LD E,L + 00001063 54 2316 LD D,H + 00001064 3E 00 2317 LD A,BYTE3 strcat + 00001066 21 00 00 2318 LD HL,LWRD strcat + 00001069 CD 00 00 2319 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000106C 01 33 04 2320 LD BC,?0218 + 0000106F 21 56 00 2321 LD HL,86 + 00001072 39 2322 ADD HL,SP + 00001073 5D 2323 LD E,L + 00001074 54 2324 LD D,H + 00001075 3E 00 2325 LD A,BYTE3 strcat + 00001077 21 00 00 2326 LD HL,LWRD strcat + 0000107A CD 00 00 2327 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000107D 21 56 00 2328 LD HL,86 + 00001080 39 2329 ADD HL,SP + 00001081 E5 2330 PUSH HL + 00001082 DD 4E 02 2331 LD C,(IX+2) + 00001085 DD 46 03 2332 LD B,(IX+3) + 00001088 21 42 00 2333 LD HL,66 + 0000108B 39 2334 ADD HL,SP + 0000108C 5E 2335 LD E,(HL) + 0000108D 23 2336 INC HL + 0000108E 56 2337 LD D,(HL) + 0000108F 3E 13 2338 LD A,BYTE3 ckdir + 00001091 21 13 0C 2339 LD HL,LWRD ckdir + 00001094 CD 00 00 2340 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001097 E1 2341 POP HL + 00001098 2342 ?0215: + 00001098 2343 ?0170: + 00001098 21 50 00 2344 LD HL,80 + 0000109B 39 2345 ADD HL,SP + 0000109C 34 2346 INC (HL) + 0000109D 23 2347 INC HL + 0000109E 20 01 2348 JR NZ,?0397 + 000010A0 34 2349 INC (HL) + 000010A1 2350 ?0397: + 000010A1 C3 E3 0C 2351 JP LWRD ?0166 + 000010A4 2352 ?0165: + 000010A4 2A 02 04 2353 LD HL,(depth) + 000010A7 2B 2354 DEC HL + 000010A8 22 02 04 2355 LD (depth),HL + 000010AB 2356 ?0219: + 000010AB C3 00 00 2357 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000010AE 2358 pass4: + 000010AE C5 2359 PUSH BC + 000010AF D5 2360 PUSH DE + 000010B0 21 00 00 2361 LD HL,0 + 000010B3 22 02 04 2362 LD (depth),HL + 000010B6 2A 38 04 2363 LD HL,(link_count) + 000010B9 23 2364 INC HL + 000010BA 36 01 2365 LD (HL),1 + 000010BC 21 33 04 2366 LD HL,?0218 + 000010BF E5 2367 PUSH HL + 000010C0 01 01 00 2368 LD BC,1 + 000010C3 11 01 00 2369 LD DE,1 + 000010C6 3E 13 2370 LD A,BYTE3 ckdir + 000010C8 21 13 0C 2371 LD HL,LWRD ckdir + 000010CB CD 00 00 2372 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000010CE E1 2373 POP HL + 000010CF 2A 02 04 2374 LD HL,(depth) + 000010D2 7D 2375 LD A,L + 000010D3 B4 2376 OR H + 000010D4 28 0B 2377 JR Z,?0221 + 000010D6 2378 ?0220: + 000010D6 11 35 04 2379 LD DE,?0222 + 000010D9 3E 97 2380 LD A,BYTE3 mypanic + 000010DB 21 97 1F 2381 LD HL,LWRD mypanic + 000010DE CD 00 00 2382 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000010E1 2383 ?0221: + 000010E1 D1 2384 POP DE + 000010E2 C1 2385 POP BC + 000010E3 C3 00 00 2386 JP LWRD ?BANK_FAST_LEAVE_L08 + 000010E6 2387 mkentry: + 000010E6 CD 00 00 2388 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 000010E9 AC FF 2389 DEFW 65452 + 000010EB 21 00 00 2390 LD HL,0 + 000010EE 39 2391 ADD HL,SP + 000010EF 4D 2392 LD C,L + 000010F0 44 2393 LD B,H + 000010F1 11 01 00 2394 LD DE,1 + 000010F4 3E A1 2395 LD A,BYTE3 iread + 000010F6 21 A1 17 2396 LD HL,LWRD iread + 000010F9 CD 00 00 2397 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000010FC AF 2398 XOR A + 000010FD DD 77 FC 2399 LD (IX-4),A + 00001100 DD 77 FD 2400 LD (IX-3),A + 00001103 21 00 00 2401 LD HL,0 + 00001106 E5 2402 PUSH HL + 00001107 21 10 00 2403 LD HL,16 + 0000110A E5 2404 PUSH HL + 0000110B 21 0C 00 2405 LD HL,12 + 0000110E 39 2406 ADD HL,SP + 0000110F 5E 2407 LD E,(HL) + 00001110 23 2408 INC HL + 00001111 56 2409 LD D,(HL) + 00001112 23 2410 INC HL + 00001113 4E 2411 LD C,(HL) + 00001114 23 2412 INC HL + 00001115 46 2413 LD B,(HL) + 00001116 EB 2414 EX DE,HL + 00001117 CD 00 00 2415 CALL LWRD ?SL_DIV_L03 + 0000111A DD 75 FE 2416 LD (IX-2),L + 0000111D DD 74 FF 2417 LD (IX-1),H + 00001120 2418 ?0224: + 00001120 DD 4E FE 2419 LD C,(IX-2) + 00001123 DD 46 FF 2420 LD B,(IX-1) + 00001126 DD 6E FC 2421 LD L,(IX-4) + 00001129 DD 66 FD 2422 LD H,(IX-3) + 0000112C A7 2423 AND A + 0000112D ED 42 2424 SBC HL,BC + 0000112F 30 7C 2425 JR NC,?0223 + 00001131 2426 ?0225: + 00001131 21 40 00 2427 LD HL,64 + 00001134 39 2428 ADD HL,SP + 00001135 E5 2429 PUSH HL + 00001136 DD 4E FC 2430 LD C,(IX-4) + 00001139 DD 46 FD 2431 LD B,(IX-3) + 0000113C 21 02 00 2432 LD HL,2 + 0000113F 39 2433 ADD HL,SP + 00001140 5D 2434 LD E,L + 00001141 54 2435 LD D,H + 00001142 3E 5C 2436 LD A,BYTE3 dirread + 00001144 21 5C 18 2437 LD HL,LWRD dirread + 00001147 CD 00 00 2438 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000114A E1 2439 POP HL + 0000114B DD 6E EC 2440 LD L,(IX-20) + 0000114E DD 66 ED 2441 LD H,(IX-19) + 00001151 7D 2442 LD A,L + 00001152 B4 2443 OR H + 00001153 20 4D 2444 JR NZ,?0227 + 00001155 DD 7E EE 2445 LD A,(IX-18) + 00001158 B7 2446 OR A + 00001159 20 47 2447 JR NZ,?0227 + 0000115B 2448 ?0229: + 0000115B 2449 ?0228: + 0000115B 2450 ?0226: + 0000115B DD 6E 02 2451 LD L,(IX+2) + 0000115E DD 66 03 2452 LD H,(IX+3) + 00001161 DD 75 EC 2453 LD (IX-20),L + 00001164 DD 74 ED 2454 LD (IX-19),H + 00001167 DD 6E 02 2455 LD L,(IX+2) + 0000116A DD 66 03 2456 LD H,(IX+3) + 0000116D E5 2457 PUSH HL + 0000116E 21 48 04 2458 LD HL,?0230 + 00001171 E5 2459 PUSH HL + 00001172 21 44 00 2460 LD HL,68 + 00001175 39 2461 ADD HL,SP + 00001176 01 02 00 2462 LD BC,2 + 00001179 09 2463 ADD HL,BC + 0000117A E5 2464 PUSH HL + 0000117B 3E 00 2465 LD A,BYTE3 sprintf + 0000117D 21 00 00 2466 LD HL,LWRD sprintf + 00001180 CD 00 00 2467 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001183 F1 2468 POP AF + 00001184 F1 2469 POP AF + 00001185 F1 2470 POP AF + 00001186 21 40 00 2471 LD HL,64 + 00001189 39 2472 ADD HL,SP + 0000118A E5 2473 PUSH HL + 0000118B DD 4E FC 2474 LD C,(IX-4) + 0000118E DD 46 FD 2475 LD B,(IX-3) + 00001191 21 02 00 2476 LD HL,2 + 00001194 39 2477 ADD HL,SP + 00001195 5D 2478 LD E,L + 00001196 54 2479 LD D,H + 00001197 3E D0 2480 LD A,BYTE3 dirwrite + 00001199 21 D0 18 2481 LD HL,LWRD dirwrite + 0000119C CD 00 00 2482 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000119F E1 2483 POP HL + 000011A0 18 23 2484 JR ?0232 + 000011A2 2485 ?0227: + 000011A2 DD 34 FC 2486 INC (IX-4) + 000011A5 20 03 2487 JR NZ,?0398 + 000011A7 DD 34 FD 2488 INC (IX-3) + 000011AA 2489 ?0398: + 000011AA C3 20 11 2490 JP LWRD ?0224 + 000011AD 2491 ?0223: + 000011AD 21 4E 04 2492 LD HL,?0231 + 000011B0 E5 2493 PUSH HL + 000011B1 3E 00 2494 LD A,BYTE3 printf + 000011B3 21 00 00 2495 LD HL,LWRD printf + 000011B6 CD 00 00 2496 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000011B9 F1 2497 POP AF + 000011BA 11 00 00 2498 LD DE,stdout + 000011BD 3E 00 2499 LD A,BYTE3 fflush + 000011BF 21 00 00 2500 LD HL,LWRD fflush + 000011C2 CD 00 00 2501 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000011C5 2502 ?0232: + 000011C5 C3 00 00 2503 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000011C8 2504 pass5: + 000011C8 CD 00 00 2505 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 000011CB BC FF 2506 DEFW 65468 + 000011CD DD 36 BE 01 2507 LD (IX-66),1 + 000011D1 DD 36 BF 00 2508 LD (IX-65),0 + 000011D5 2509 ?0234: + 000011D5 ED 4B 24 04 2510 LD BC,(ninodes) + 000011D9 DD 6E BE 2511 LD L,(IX-66) + 000011DC DD 66 BF 2512 LD H,(IX-65) + 000011DF A7 2513 AND A + 000011E0 ED 42 2514 SBC HL,BC + 000011E2 D2 02 14 2515 JP NC,?0233 + 000011E5 2516 ?0235: + 000011E5 21 04 00 2517 LD HL,4 + 000011E8 39 2518 ADD HL,SP + 000011E9 4D 2519 LD C,L + 000011EA 44 2520 LD B,H + 000011EB DD 5E BE 2521 LD E,(IX-66) + 000011EE DD 56 BF 2522 LD D,(IX-65) + 000011F1 3E A1 2523 LD A,BYTE3 iread + 000011F3 21 A1 17 2524 LD HL,LWRD iread + 000011F6 CD 00 00 2525 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000011F9 DD 6E C0 2526 LD L,(IX-64) + 000011FC DD 66 C1 2527 LD H,(IX-63) + 000011FF 7D 2528 LD A,L + 00001200 B4 2529 OR H + 00001201 20 1D 2530 JR NZ,?0237 + 00001203 2531 ?0236: + 00001203 DD 6E BE 2532 LD L,(IX-66) + 00001206 DD 66 BF 2533 LD H,(IX-65) + 00001209 ED 4B 38 04 2534 LD BC,(link_count) + 0000120D 09 2535 ADD HL,BC + 0000120E 46 2536 LD B,(HL) + 0000120F 04 2537 INC B + 00001210 28 0B 2538 JR Z,?0239 + 00001212 2539 ?0238: + 00001212 11 7A 04 2540 LD DE,?0240 + 00001215 3E 97 2541 LD A,BYTE3 mypanic + 00001217 21 97 1F 2542 LD HL,LWRD mypanic + 0000121A CD 00 00 2543 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000121D 2544 ?0239: + 0000121D C3 F7 13 2545 JP LWRD ?0241 + 00001220 2546 ?0237: + 00001220 DD 6E BE 2547 LD L,(IX-66) + 00001223 DD 66 BF 2548 LD H,(IX-65) + 00001226 ED 4B 38 04 2549 LD BC,(link_count) + 0000122A 09 2550 ADD HL,BC + 0000122B 46 2551 LD B,(HL) + 0000122C 04 2552 INC B + 0000122D 20 15 2553 JR NZ,?0243 + 0000122F DD 6E C0 2554 LD L,(IX-64) + 00001232 DD 66 C1 2555 LD H,(IX-63) + 00001235 7D 2556 LD A,L + 00001236 B4 2557 OR H + 00001237 28 0B 2558 JR Z,?0243 + 00001239 2559 ?0245: + 00001239 2560 ?0244: + 00001239 2561 ?0242: + 00001239 11 7A 04 2562 LD DE,?0240 + 0000123C 3E 97 2563 LD A,BYTE3 mypanic + 0000123E 21 97 1F 2564 LD HL,LWRD mypanic + 00001241 CD 00 00 2565 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001244 2566 ?0243: + 00001244 DD 6E BE 2567 LD L,(IX-66) + 00001247 DD 66 BF 2568 LD H,(IX-65) + 0000124A ED 4B 38 04 2569 LD BC,(link_count) + 0000124E 09 2570 ADD HL,BC + 0000124F 46 2571 LD B,(HL) + 00001250 04 2572 INC B + 00001251 28 7A 2573 JR Z,?0247 + 00001253 DD 6E BE 2574 LD L,(IX-66) + 00001256 DD 66 BF 2575 LD H,(IX-65) + 00001259 ED 4B 38 04 2576 LD BC,(link_count) + 0000125D 09 2577 ADD HL,BC + 0000125E 4E 2578 LD C,(HL) + 0000125F 06 00 2579 LD B,0 + 00001261 DD 6E C2 2580 LD L,(IX-62) + 00001264 DD 66 C3 2581 LD H,(IX-61) + 00001267 A7 2582 AND A + 00001268 ED 42 2583 SBC HL,BC + 0000126A 28 61 2584 JR Z,?0247 + 0000126C 2585 ?0249: + 0000126C 2586 ?0248: + 0000126C 2587 ?0246: + 0000126C DD 6E BE 2588 LD L,(IX-66) + 0000126F DD 66 BF 2589 LD H,(IX-65) + 00001272 ED 4B 38 04 2590 LD BC,(link_count) + 00001276 09 2591 ADD HL,BC + 00001277 4E 2592 LD C,(HL) + 00001278 06 00 2593 LD B,0 + 0000127A C5 2594 PUSH BC + 0000127B DD 6E C2 2595 LD L,(IX-62) + 0000127E DD 66 C3 2596 LD H,(IX-61) + 00001281 E5 2597 PUSH HL + 00001282 DD 6E BE 2598 LD L,(IX-66) + 00001285 DD 66 BF 2599 LD H,(IX-65) + 00001288 E5 2600 PUSH HL + 00001289 21 92 04 2601 LD HL,?0250 + 0000128C E5 2602 PUSH HL + 0000128D 3E 00 2603 LD A,BYTE3 printf + 0000128F 21 00 00 2604 LD HL,LWRD printf + 00001292 CD 00 00 2605 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001295 F1 2606 POP AF + 00001296 F1 2607 POP AF + 00001297 F1 2608 POP AF + 00001298 F1 2609 POP AF + 00001299 3E 5A 2610 LD A,BYTE3 yes + 0000129B 21 5A 19 2611 LD HL,LWRD yes + 0000129E CD 00 00 2612 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000012A1 7D 2613 LD A,L + 000012A2 B4 2614 OR H + 000012A3 28 28 2615 JR Z,?0252 + 000012A5 2616 ?0251: + 000012A5 DD 6E BE 2617 LD L,(IX-66) + 000012A8 DD 66 BF 2618 LD H,(IX-65) + 000012AB ED 4B 38 04 2619 LD BC,(link_count) + 000012AF 09 2620 ADD HL,BC + 000012B0 4E 2621 LD C,(HL) + 000012B1 06 00 2622 LD B,0 + 000012B3 DD 71 C2 2623 LD (IX-62),C + 000012B6 DD 70 C3 2624 LD (IX-61),B + 000012B9 21 04 00 2625 LD HL,4 + 000012BC 39 2626 ADD HL,SP + 000012BD 4D 2627 LD C,L + 000012BE 44 2628 LD B,H + 000012BF DD 5E BE 2629 LD E,(IX-66) + 000012C2 DD 56 BF 2630 LD D,(IX-65) + 000012C5 3E EF 2631 LD A,BYTE3 iwrite + 000012C7 21 EF 17 2632 LD HL,LWRD iwrite + 000012CA CD 00 00 2633 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000012CD 2634 ?0252: + 000012CD 2635 ?0247: + 000012CD DD 6E BE 2636 LD L,(IX-66) + 000012D0 DD 66 BF 2637 LD H,(IX-65) + 000012D3 ED 4B 38 04 2638 LD BC,(link_count) + 000012D7 09 2639 ADD HL,BC + 000012D8 7E 2640 LD A,(HL) + 000012D9 B7 2641 OR A + 000012DA C2 F7 13 2642 JP NZ,?0254 + 000012DD 2643 ?0253: + 000012DD DD 7E C0 2644 LD A,(IX-64) + 000012E0 E6 00 2645 AND 0 + 000012E2 6F 2646 LD L,A + 000012E3 DD 7E C1 2647 LD A,(IX-63) + 000012E6 E6 F0 2648 AND 240 + 000012E8 67 2649 LD H,A + 000012E9 3E 60 2650 LD A,96 + 000012EB AC 2651 XOR H + 000012EC B5 2652 OR L + 000012ED 28 25 2653 JR Z,?0255 + 000012EF DD 7E C0 2654 LD A,(IX-64) + 000012F2 E6 00 2655 AND 0 + 000012F4 6F 2656 LD L,A + 000012F5 DD 7E C1 2657 LD A,(IX-63) + 000012F8 E6 F0 2658 AND 240 + 000012FA 67 2659 LD H,A + 000012FB 3E 20 2660 LD A,32 + 000012FD AC 2661 XOR H + 000012FE B5 2662 OR L + 000012FF 28 13 2663 JR Z,?0255 + 00001301 21 0C 00 2664 LD HL,12 + 00001304 39 2665 ADD HL,SP + 00001305 5E 2666 LD E,(HL) + 00001306 23 2667 INC HL + 00001307 56 2668 LD D,(HL) + 00001308 23 2669 INC HL + 00001309 4E 2670 LD C,(HL) + 0000130A 23 2671 INC HL + 0000130B 46 2672 LD B,(HL) + 0000130C EB 2673 EX DE,HL + 0000130D 7D 2674 LD A,L + 0000130E B4 2675 OR H + 0000130F B1 2676 OR C + 00001310 B0 2677 OR B + 00001311 C2 A4 13 2678 JP NZ,?0256 + 00001314 2679 ?0257: + 00001314 2680 ?0258: + 00001314 2681 ?0255: + 00001314 DD 6E C2 2682 LD L,(IX-62) + 00001317 DD 66 C3 2683 LD H,(IX-61) + 0000131A E5 2684 PUSH HL + 0000131B DD 6E C0 2685 LD L,(IX-64) + 0000131E DD 66 C1 2686 LD H,(IX-63) + 00001321 E5 2687 PUSH HL + 00001322 DD 6E BE 2688 LD L,(IX-66) + 00001325 DD 66 BF 2689 LD H,(IX-65) + 00001328 E5 2690 PUSH HL + 00001329 21 C1 04 2691 LD HL,?0259 + 0000132C E5 2692 PUSH HL + 0000132D 3E 00 2693 LD A,BYTE3 printf + 0000132F 21 00 00 2694 LD HL,LWRD printf + 00001332 CD 00 00 2695 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001335 F1 2696 POP AF + 00001336 F1 2697 POP AF + 00001337 F1 2698 POP AF + 00001338 F1 2699 POP AF + 00001339 3E 5A 2700 LD A,BYTE3 yes + 0000133B 21 5A 19 2701 LD HL,LWRD yes + 0000133E CD 00 00 2702 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001341 7D 2703 LD A,L + 00001342 B4 2704 OR H + 00001343 28 5D 2705 JR Z,?0261 + 00001345 2706 ?0260: + 00001345 AF 2707 XOR A + 00001346 DD 77 C2 2708 LD (IX-62),A + 00001349 DD 77 C3 2709 LD (IX-61),A + 0000134C AF 2710 XOR A + 0000134D DD 77 C0 2711 LD (IX-64),A + 00001350 DD 77 C1 2712 LD (IX-63),A + 00001353 21 04 00 2713 LD HL,4 + 00001356 39 2714 ADD HL,SP + 00001357 4D 2715 LD C,L + 00001358 44 2716 LD B,H + 00001359 DD 5E BE 2717 LD E,(IX-66) + 0000135C DD 56 BF 2718 LD D,(IX-65) + 0000135F 3E EF 2719 LD A,BYTE3 iwrite + 00001361 21 EF 17 2720 LD HL,LWRD iwrite + 00001364 CD 00 00 2721 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001367 2A 10 04 2722 LD HL,(filsys+10) + 0000136A 23 2723 INC HL + 0000136B 22 10 04 2724 LD (filsys+10),HL + 0000136E 11 04 00 2725 LD DE,4 + 00001371 3E 29 2726 LD A,BYTE3 daread + 00001373 21 29 17 2727 LD HL,LWRD daread + 00001376 CD 00 00 2728 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001379 DD 75 BC 2729 LD (IX-68),L + 0000137C DD 74 BD 2730 LD (IX-67),H + 0000137F 01 1E 00 2731 LD BC,30 + 00001382 C5 2732 PUSH BC + 00001383 4D 2733 LD C,L + 00001384 44 2734 LD B,H + 00001385 11 06 04 2735 LD DE,filsys + 00001388 3E 00 2736 LD A,BYTE3 bcopy + 0000138A 21 00 00 2737 LD HL,LWRD bcopy + 0000138D CD 00 00 2738 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001390 E1 2739 POP HL + 00001391 DD 4E BC 2740 LD C,(IX-68) + 00001394 DD 46 BD 2741 LD B,(IX-67) + 00001397 11 04 00 2742 LD DE,4 + 0000139A 3E 68 2743 LD A,BYTE3 dwrite + 0000139C 21 68 17 2744 LD HL,LWRD dwrite + 0000139F CD 00 00 2745 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000013A2 2746 ?0261: + 000013A2 18 53 2747 JR ?0262 + 000013A4 2748 ?0256: + 000013A4 DD 6E C2 2749 LD L,(IX-62) + 000013A7 DD 66 C3 2750 LD H,(IX-61) + 000013AA E5 2751 PUSH HL + 000013AB DD 6E BE 2752 LD L,(IX-66) + 000013AE DD 66 BF 2753 LD H,(IX-65) + 000013B1 E5 2754 PUSH HL + 000013B2 21 0D 05 2755 LD HL,?0263 + 000013B5 E5 2756 PUSH HL + 000013B6 3E 00 2757 LD A,BYTE3 printf + 000013B8 21 00 00 2758 LD HL,LWRD printf + 000013BB CD 00 00 2759 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000013BE F1 2760 POP AF + 000013BF F1 2761 POP AF + 000013C0 F1 2762 POP AF + 000013C1 3E 5A 2763 LD A,BYTE3 yes + 000013C3 21 5A 19 2764 LD HL,LWRD yes + 000013C6 CD 00 00 2765 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000013C9 7D 2766 LD A,L + 000013CA B4 2767 OR H + 000013CB 28 2A 2768 JR Z,?0265 + 000013CD 2769 ?0264: + 000013CD DD 36 C2 01 2770 LD (IX-62),1 + 000013D1 DD 36 C3 00 2771 LD (IX-61),0 + 000013D5 21 04 00 2772 LD HL,4 + 000013D8 39 2773 ADD HL,SP + 000013D9 4D 2774 LD C,L + 000013DA 44 2775 LD B,H + 000013DB DD 5E BE 2776 LD E,(IX-66) + 000013DE DD 56 BF 2777 LD D,(IX-65) + 000013E1 3E EF 2778 LD A,BYTE3 iwrite + 000013E3 21 EF 17 2779 LD HL,LWRD iwrite + 000013E6 CD 00 00 2780 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000013E9 DD 5E BE 2781 LD E,(IX-66) + 000013EC DD 56 BF 2782 LD D,(IX-65) + 000013EF 3E E6 2783 LD A,BYTE3 mkentry + 000013F1 21 E6 10 2784 LD HL,LWRD mkentry + 000013F4 CD 00 00 2785 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000013F7 2786 ?0265: + 000013F7 2787 ?0262: + 000013F7 2788 ?0254: + 000013F7 2789 ?0241: + 000013F7 DD 34 BE 2790 INC (IX-66) + 000013FA 20 03 2791 JR NZ,?0399 + 000013FC DD 34 BF 2792 INC (IX-65) + 000013FF 2793 ?0399: + 000013FF C3 D5 11 2794 JP LWRD ?0234 + 00001402 2795 ?0233: + 00001402 C3 00 00 2796 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00001405 2797 getblkno: + 00001405 CD 00 00 2798 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 00001408 FA FF 2799 DEFW 65530 + 0000140A 11 12 00 2800 LD DE,18 + 0000140D 69 2801 LD L,C + 0000140E 60 2802 LD H,B + 0000140F A7 2803 AND A + 00001410 ED 52 2804 SBC HL,DE + 00001412 30 19 2805 JR NC,?0267 + 00001414 2806 ?0266: + 00001414 DD 6E 04 2807 LD L,(IX+4) + 00001417 DD 66 05 2808 LD H,(IX+5) + 0000141A 29 2809 ADD HL,HL + 0000141B DD 4E 02 2810 LD C,(IX+2) + 0000141E DD 46 03 2811 LD B,(IX+3) + 00001421 09 2812 ADD HL,BC + 00001422 01 18 00 2813 LD BC,24 + 00001425 09 2814 ADD HL,BC + 00001426 46 2815 LD B,(HL) + 00001427 23 2816 INC HL + 00001428 66 2817 LD H,(HL) + 00001429 68 2818 LD L,B + 0000142A C3 FE 14 2819 JP LWRD ?0274 + 0000142D 2820 ?0267: + 0000142D 01 12 01 2821 LD BC,274 + 00001430 DD 6E 04 2822 LD L,(IX+4) + 00001433 DD 66 05 2823 LD H,(IX+5) + 00001436 A7 2824 AND A + 00001437 ED 42 2825 SBC HL,BC + 00001439 30 48 2826 JR NC,?0269 + 0000143B 2827 ?0268: + 0000143B 21 3C 00 2828 LD HL,60 + 0000143E DD 4E 02 2829 LD C,(IX+2) + 00001441 DD 46 03 2830 LD B,(IX+3) + 00001444 09 2831 ADD HL,BC + 00001445 46 2832 LD B,(HL) + 00001446 23 2833 INC HL + 00001447 66 2834 LD H,(HL) + 00001448 68 2835 LD L,B + 00001449 DD 75 FA 2836 LD (IX-6),L + 0000144C DD 74 FB 2837 LD (IX-5),H + 0000144F 7D 2838 LD A,L + 00001450 B4 2839 OR H + 00001451 20 06 2840 JR NZ,?0271 + 00001453 2841 ?0270: + 00001453 21 00 00 2842 LD HL,0 + 00001456 C3 FE 14 2843 JP LWRD ?0274 + 00001459 2844 ?0271: + 00001459 DD 5E FA 2845 LD E,(IX-6) + 0000145C DD 56 FB 2846 LD D,(IX-5) + 0000145F 3E 29 2847 LD A,BYTE3 daread + 00001461 21 29 17 2848 LD HL,LWRD daread + 00001464 CD 00 00 2849 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001467 DD 75 FE 2850 LD (IX-2),L + 0000146A DD 74 FF 2851 LD (IX-1),H + 0000146D E5 2852 PUSH HL + 0000146E DD 6E 04 2853 LD L,(IX+4) + 00001471 DD 66 05 2854 LD H,(IX+5) + 00001474 29 2855 ADD HL,HL + 00001475 4D 2856 LD C,L + 00001476 44 2857 LD B,H + 00001477 E1 2858 POP HL + 00001478 09 2859 ADD HL,BC + 00001479 01 DC FF 2860 LD BC,65500 + 0000147C 09 2861 ADD HL,BC + 0000147D 46 2862 LD B,(HL) + 0000147E 23 2863 INC HL + 0000147F 66 2864 LD H,(HL) + 00001480 68 2865 LD L,B + 00001481 18 7B 2866 JR ?0274 + 00001483 2867 ?0269: + 00001483 21 3E 00 2868 LD HL,62 + 00001486 DD 4E 02 2869 LD C,(IX+2) + 00001489 DD 46 03 2870 LD B,(IX+3) + 0000148C 09 2871 ADD HL,BC + 0000148D 46 2872 LD B,(HL) + 0000148E 23 2873 INC HL + 0000148F 66 2874 LD H,(HL) + 00001490 68 2875 LD L,B + 00001491 DD 75 FA 2876 LD (IX-6),L + 00001494 DD 74 FB 2877 LD (IX-5),H + 00001497 7D 2878 LD A,L + 00001498 B4 2879 OR H + 00001499 20 05 2880 JR NZ,?0273 + 0000149B 2881 ?0272: + 0000149B 21 00 00 2882 LD HL,0 + 0000149E 18 5E 2883 JR ?0274 + 000014A0 2884 ?0273: + 000014A0 DD 5E FA 2885 LD E,(IX-6) + 000014A3 DD 56 FB 2886 LD D,(IX-5) + 000014A6 3E 29 2887 LD A,BYTE3 daread + 000014A8 21 29 17 2888 LD HL,LWRD daread + 000014AB CD 00 00 2889 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000014AE DD 75 FE 2890 LD (IX-2),L + 000014B1 DD 74 FF 2891 LD (IX-1),H + 000014B4 21 EE FE 2892 LD HL,65262 + 000014B7 DD 4E 04 2893 LD C,(IX+4) + 000014BA DD 46 05 2894 LD B,(IX+5) + 000014BD 09 2895 ADD HL,BC + 000014BE DD 75 FA 2896 LD (IX-6),L + 000014C1 DD 74 FB 2897 LD (IX-5),H + 000014C4 6C 2898 LD L,H + 000014C5 26 00 2899 LD H,0 + 000014C7 29 2900 ADD HL,HL + 000014C8 DD 4E FE 2901 LD C,(IX-2) + 000014CB DD 46 FF 2902 LD B,(IX-1) + 000014CE 09 2903 ADD HL,BC + 000014CF 56 2904 LD D,(HL) + 000014D0 23 2905 INC HL + 000014D1 66 2906 LD H,(HL) + 000014D2 6A 2907 LD L,D + 000014D3 DD 75 FC 2908 LD (IX-4),L + 000014D6 DD 74 FD 2909 LD (IX-3),H + 000014D9 EB 2910 EX DE,HL + 000014DA 3E 29 2911 LD A,BYTE3 daread + 000014DC 21 29 17 2912 LD HL,LWRD daread + 000014DF CD 00 00 2913 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000014E2 DD 75 FE 2914 LD (IX-2),L + 000014E5 DD 74 FF 2915 LD (IX-1),H + 000014E8 E5 2916 PUSH HL + 000014E9 DD 7E FA 2917 LD A,(IX-6) + 000014EC E6 FF 2918 AND 255 + 000014EE 6F 2919 LD L,A + 000014EF DD 7E FB 2920 LD A,(IX-5) + 000014F2 E6 00 2921 AND 0 + 000014F4 67 2922 LD H,A + 000014F5 29 2923 ADD HL,HL + 000014F6 4D 2924 LD C,L + 000014F7 44 2925 LD B,H + 000014F8 E1 2926 POP HL + 000014F9 09 2927 ADD HL,BC + 000014FA 46 2928 LD B,(HL) + 000014FB 23 2929 INC HL + 000014FC 66 2930 LD H,(HL) + 000014FD 68 2931 LD L,B + 000014FE 2932 ?0274: + 000014FE C3 00 00 2933 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00001501 2934 setblkno: + 00001501 CD 00 00 2935 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 00001504 FA FF 2936 DEFW 65530 + 00001506 11 12 00 2937 LD DE,18 + 00001509 69 2938 LD L,C + 0000150A 60 2939 LD H,B + 0000150B A7 2940 AND A + 0000150C ED 52 2941 SBC HL,DE + 0000150E 30 1E 2942 JR NC,?0276 + 00001510 2943 ?0275: + 00001510 DD 6E 04 2944 LD L,(IX+4) + 00001513 DD 66 05 2945 LD H,(IX+5) + 00001516 29 2946 ADD HL,HL + 00001517 DD 4E 02 2947 LD C,(IX+2) + 0000151A DD 46 03 2948 LD B,(IX+3) + 0000151D 09 2949 ADD HL,BC + 0000151E 01 18 00 2950 LD BC,24 + 00001521 09 2951 ADD HL,BC + 00001522 DD 4E 0A 2952 LD C,(IX+10) + 00001525 DD 46 0B 2953 LD B,(IX+11) + 00001528 71 2954 LD (HL),C + 00001529 23 2955 INC HL + 0000152A 70 2956 LD (HL),B + 0000152B C3 54 16 2957 JP LWRD ?0277 + 0000152E 2958 ?0276: + 0000152E 01 12 01 2959 LD BC,274 + 00001531 DD 6E 04 2960 LD L,(IX+4) + 00001534 DD 66 05 2961 LD H,(IX+5) + 00001537 A7 2962 AND A + 00001538 ED 42 2963 SBC HL,BC + 0000153A 30 67 2964 JR NC,?0279 + 0000153C 2965 ?0278: + 0000153C 21 3C 00 2966 LD HL,60 + 0000153F DD 4E 02 2967 LD C,(IX+2) + 00001542 DD 46 03 2968 LD B,(IX+3) + 00001545 09 2969 ADD HL,BC + 00001546 46 2970 LD B,(HL) + 00001547 23 2971 INC HL + 00001548 66 2972 LD H,(HL) + 00001549 68 2973 LD L,B + 0000154A DD 75 FA 2974 LD (IX-6),L + 0000154D DD 74 FB 2975 LD (IX-5),H + 00001550 7D 2976 LD A,L + 00001551 B4 2977 OR H + 00001552 20 0B 2978 JR NZ,?0281 + 00001554 2979 ?0280: + 00001554 11 43 05 2980 LD DE,?0282 + 00001557 3E 97 2981 LD A,BYTE3 mypanic + 00001559 21 97 1F 2982 LD HL,LWRD mypanic + 0000155C CD 00 00 2983 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000155F 2984 ?0281: + 0000155F DD 5E FA 2985 LD E,(IX-6) + 00001562 DD 56 FB 2986 LD D,(IX-5) + 00001565 3E 29 2987 LD A,BYTE3 daread + 00001567 21 29 17 2988 LD HL,LWRD daread + 0000156A CD 00 00 2989 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000156D DD 75 FE 2990 LD (IX-2),L + 00001570 DD 74 FF 2991 LD (IX-1),H + 00001573 E5 2992 PUSH HL + 00001574 DD 6E 04 2993 LD L,(IX+4) + 00001577 DD 66 05 2994 LD H,(IX+5) + 0000157A 29 2995 ADD HL,HL + 0000157B 4D 2996 LD C,L + 0000157C 44 2997 LD B,H + 0000157D E1 2998 POP HL + 0000157E 09 2999 ADD HL,BC + 0000157F 01 DC FF 3000 LD BC,65500 + 00001582 09 3001 ADD HL,BC + 00001583 DD 4E 0A 3002 LD C,(IX+10) + 00001586 DD 46 0B 3003 LD B,(IX+11) + 00001589 71 3004 LD (HL),C + 0000158A 23 3005 INC HL + 0000158B 70 3006 LD (HL),B + 0000158C DD 4E FE 3007 LD C,(IX-2) + 0000158F DD 46 FF 3008 LD B,(IX-1) + 00001592 DD 5E FA 3009 LD E,(IX-6) + 00001595 DD 56 FB 3010 LD D,(IX-5) + 00001598 3E 68 3011 LD A,BYTE3 dwrite + 0000159A 21 68 17 3012 LD HL,LWRD dwrite + 0000159D CD 00 00 3013 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000015A0 C3 54 16 3014 JP LWRD ?0283 + 000015A3 3015 ?0279: + 000015A3 21 3E 00 3016 LD HL,62 + 000015A6 DD 4E 02 3017 LD C,(IX+2) + 000015A9 DD 46 03 3018 LD B,(IX+3) + 000015AC 09 3019 ADD HL,BC + 000015AD 46 3020 LD B,(HL) + 000015AE 23 3021 INC HL + 000015AF 66 3022 LD H,(HL) + 000015B0 68 3023 LD L,B + 000015B1 DD 75 FA 3024 LD (IX-6),L + 000015B4 DD 74 FB 3025 LD (IX-5),H + 000015B7 7D 3026 LD A,L + 000015B8 B4 3027 OR H + 000015B9 20 0B 3028 JR NZ,?0285 + 000015BB 3029 ?0284: + 000015BB 11 43 05 3030 LD DE,?0282 + 000015BE 3E 97 3031 LD A,BYTE3 mypanic + 000015C0 21 97 1F 3032 LD HL,LWRD mypanic + 000015C3 CD 00 00 3033 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000015C6 3034 ?0285: + 000015C6 DD 5E FA 3035 LD E,(IX-6) + 000015C9 DD 56 FB 3036 LD D,(IX-5) + 000015CC 3E 29 3037 LD A,BYTE3 daread + 000015CE 21 29 17 3038 LD HL,LWRD daread + 000015D1 CD 00 00 3039 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000015D4 DD 75 FE 3040 LD (IX-2),L + 000015D7 DD 74 FF 3041 LD (IX-1),H + 000015DA 21 0A 00 3042 LD HL,10 + 000015DD 39 3043 ADD HL,SP + 000015DE 7E 3044 LD A,(HL) + 000015DF D6 12 3045 SUB 18 + 000015E1 77 3046 LD (HL),A + 000015E2 23 3047 INC HL + 000015E3 7E 3048 LD A,(HL) + 000015E4 DE 01 3049 SBC A,1 + 000015E6 77 3050 LD (HL),A + 000015E7 DD 6E 04 3051 LD L,(IX+4) + 000015EA DD 66 05 3052 LD H,(IX+5) + 000015ED 6C 3053 LD L,H + 000015EE 26 00 3054 LD H,0 + 000015F0 29 3055 ADD HL,HL + 000015F1 DD 4E FE 3056 LD C,(IX-2) + 000015F4 DD 46 FF 3057 LD B,(IX-1) + 000015F7 09 3058 ADD HL,BC + 000015F8 46 3059 LD B,(HL) + 000015F9 23 3060 INC HL + 000015FA 66 3061 LD H,(HL) + 000015FB 68 3062 LD L,B + 000015FC DD 75 FC 3063 LD (IX-4),L + 000015FF DD 74 FD 3064 LD (IX-3),H + 00001602 7D 3065 LD A,L + 00001603 B4 3066 OR H + 00001604 20 0B 3067 JR NZ,?0287 + 00001606 3068 ?0286: + 00001606 11 43 05 3069 LD DE,?0282 + 00001609 3E 97 3070 LD A,BYTE3 mypanic + 0000160B 21 97 1F 3071 LD HL,LWRD mypanic + 0000160E CD 00 00 3072 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001611 3073 ?0287: + 00001611 DD 5E FC 3074 LD E,(IX-4) + 00001614 DD 56 FD 3075 LD D,(IX-3) + 00001617 3E 29 3076 LD A,BYTE3 daread + 00001619 21 29 17 3077 LD HL,LWRD daread + 0000161C CD 00 00 3078 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000161F DD 75 FE 3079 LD (IX-2),L + 00001622 DD 74 FF 3080 LD (IX-1),H + 00001625 E5 3081 PUSH HL + 00001626 DD 7E 04 3082 LD A,(IX+4) + 00001629 E6 FF 3083 AND 255 + 0000162B 6F 3084 LD L,A + 0000162C DD 7E 05 3085 LD A,(IX+5) + 0000162F E6 00 3086 AND 0 + 00001631 67 3087 LD H,A + 00001632 29 3088 ADD HL,HL + 00001633 4D 3089 LD C,L + 00001634 44 3090 LD B,H + 00001635 E1 3091 POP HL + 00001636 09 3092 ADD HL,BC + 00001637 DD 4E 04 3093 LD C,(IX+4) + 0000163A DD 46 05 3094 LD B,(IX+5) + 0000163D 71 3095 LD (HL),C + 0000163E 23 3096 INC HL + 0000163F 70 3097 LD (HL),B + 00001640 DD 4E FE 3098 LD C,(IX-2) + 00001643 DD 46 FF 3099 LD B,(IX-1) + 00001646 DD 5E FA 3100 LD E,(IX-6) + 00001649 DD 56 FB 3101 LD D,(IX-5) + 0000164C 3E 68 3102 LD A,BYTE3 dwrite + 0000164E 21 68 17 3103 LD HL,LWRD dwrite + 00001651 CD 00 00 3104 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001654 3105 ?0283: + 00001654 3106 ?0277: + 00001654 C3 00 00 3107 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00001657 3108 _blk_alloc: + 00001657 CD 00 00 3109 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 0000165A F6 FF 3110 DEFW 65526 + 0000165C 21 12 00 3111 LD HL,18 + 0000165F DD 4E 02 3112 LD C,(IX+2) + 00001662 DD 46 03 3113 LD B,(IX+3) + 00001665 09 3114 ADD HL,BC + 00001666 56 3115 LD D,(HL) + 00001667 23 3116 INC HL + 00001668 66 3117 LD H,(HL) + 00001669 6A 3118 LD L,D + 0000166A DD 75 FC 3119 LD (IX-4),L + 0000166D DD 74 FD 3120 LD (IX-3),H + 00001670 21 14 00 3121 LD HL,20 + 00001673 09 3122 ADD HL,BC + 00001674 46 3123 LD B,(HL) + 00001675 23 3124 INC HL + 00001676 66 3125 LD H,(HL) + 00001677 68 3126 LD L,B + 00001678 DD 75 FE 3127 LD (IX-2),L + 0000167B DD 74 FF 3128 LD (IX-1),H + 0000167E 4D 3129 LD C,L + 0000167F 44 3130 LD B,H + 00001680 DD 5E FC 3131 LD E,(IX-4) + 00001683 DD 56 FD 3132 LD D,(IX-3) + 00001686 3E 45 3133 LD A,BYTE3 bitmap_find + 00001688 21 45 1E 3134 LD HL,LWRD bitmap_find + 0000168B CD 00 00 3135 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000168E DD 75 FA 3136 LD (IX-6),L + 00001691 DD 74 FB 3137 LD (IX-5),H + 00001694 7D 3138 LD A,L + 00001695 A4 3139 AND H + 00001696 3C 3140 INC A + 00001697 20 06 3141 JR NZ,?0289 + 00001699 3142 ?0288: + 00001699 21 00 00 3143 LD HL,0 + 0000169C C3 26 17 3144 JP LWRD ?0295 + 0000169F 3145 ?0289: + 0000169F 21 08 00 3146 LD HL,8 + 000016A2 DD 4E 02 3147 LD C,(IX+2) + 000016A5 DD 46 03 3148 LD B,(IX+3) + 000016A8 09 3149 ADD HL,BC + 000016A9 4E 3150 LD C,(HL) + 000016AA 23 3151 INC HL + 000016AB 46 3152 LD B,(HL) + 000016AC 0B 3153 DEC BC + 000016AD 70 3154 LD (HL),B + 000016AE 2B 3155 DEC HL + 000016AF 71 3156 LD (HL),C + 000016B0 ED 4B 26 04 3157 LD BC,(finode) + 000016B4 DD 6E FA 3158 LD L,(IX-6) + 000016B7 DD 66 FB 3159 LD H,(IX-5) + 000016BA A7 3160 AND A + 000016BB ED 42 3161 SBC HL,BC + 000016BD 38 18 3162 JR C,?0290 + 000016BF 21 06 00 3163 LD HL,6 + 000016C2 DD 4E 02 3164 LD C,(IX+2) + 000016C5 DD 46 03 3165 LD B,(IX+3) + 000016C8 09 3166 ADD HL,BC + 000016C9 4E 3167 LD C,(HL) + 000016CA 23 3168 INC HL + 000016CB 46 3169 LD B,(HL) + 000016CC DD 6E FA 3170 LD L,(IX-6) + 000016CF DD 66 FB 3171 LD H,(IX-5) + 000016D2 A7 3172 AND A + 000016D3 ED 42 3173 SBC HL,BC + 000016D5 38 12 3174 JR C,?0291 + 000016D7 3175 ?0292: + 000016D7 3176 ?0293: + 000016D7 3177 ?0290: + 000016D7 21 5A 05 3178 LD HL,?0294 + 000016DA E5 3179 PUSH HL + 000016DB 3E 00 3180 LD A,BYTE3 printf + 000016DD 21 00 00 3181 LD HL,LWRD printf + 000016E0 CD 00 00 3182 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000016E3 F1 3183 POP AF + 000016E4 21 00 00 3184 LD HL,0 + 000016E7 18 3D 3185 JR ?0295 + 000016E9 3186 ?0291: + 000016E9 11 04 00 3187 LD DE,4 + 000016EC 3E 29 3188 LD A,BYTE3 daread + 000016EE 21 29 17 3189 LD HL,LWRD daread + 000016F1 CD 00 00 3190 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000016F4 DD 75 F8 3191 LD (IX-8),L + 000016F7 DD 74 F9 3192 LD (IX-7),H + 000016FA 01 02 00 3193 LD BC,2 + 000016FD C5 3194 PUSH BC + 000016FE 4D 3195 LD C,L + 000016FF 44 3196 LD B,H + 00001700 21 0E 00 3197 LD HL,14 + 00001703 39 3198 ADD HL,SP + 00001704 5D 3199 LD E,L + 00001705 54 3200 LD D,H + 00001706 3E 00 3201 LD A,BYTE3 bcopy + 00001708 21 00 00 3202 LD HL,LWRD bcopy + 0000170B CD 00 00 3203 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000170E E1 3204 POP HL + 0000170F DD 4E F8 3205 LD C,(IX-8) + 00001712 DD 46 F9 3206 LD B,(IX-7) + 00001715 11 04 00 3207 LD DE,4 + 00001718 3E 68 3208 LD A,BYTE3 dwrite + 0000171A 21 68 17 3209 LD HL,LWRD dwrite + 0000171D CD 00 00 3210 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001720 DD 6E FA 3211 LD L,(IX-6) + 00001723 DD 66 FB 3212 LD H,(IX-5) + 00001726 3213 ?0295: + 00001726 C3 00 00 3214 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00001729 3215 daread: + 00001729 CD 00 00 3216 CALL LWRD ?ENT_PARM_DIRECT_L09 + 0000172C 21 3A 04 3217 LD HL,?0296 + 0000172F E5 3218 PUSH HL + 00001730 4B 3219 LD C,E + 00001731 42 3220 LD B,D + 00001732 ED 5B 04 04 3221 LD DE,(dev) + 00001736 3E 00 3222 LD A,BYTE3 da_read + 00001738 21 00 00 3223 LD HL,LWRD da_read + 0000173B CD 00 00 3224 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000173E F1 3225 POP AF + 0000173F 3E 02 3226 LD A,2 + 00001741 AC 3227 XOR H + 00001742 B5 3228 OR L + 00001743 28 1D 3229 JR Z,?0298 + 00001745 3230 ?0297: + 00001745 DD 6E 02 3231 LD L,(IX+2) + 00001748 DD 66 03 3232 LD H,(IX+3) + 0000174B E5 3233 PUSH HL + 0000174C 21 86 05 3234 LD HL,?0299 + 0000174F E5 3235 PUSH HL + 00001750 3E 00 3236 LD A,BYTE3 printf + 00001752 21 00 00 3237 LD HL,LWRD printf + 00001755 CD 00 00 3238 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001758 F1 3239 POP AF + 00001759 F1 3240 POP AF + 0000175A 3E 00 3241 LD A,BYTE3 abort + 0000175C 21 00 00 3242 LD HL,LWRD abort + 0000175F CD 00 00 3243 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001762 3244 ?0298: + 00001762 21 3A 04 3245 LD HL,?0296 + 00001765 C3 00 00 3246 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00001768 3247 dwrite: + 00001768 CD 00 00 3248 CALL LWRD ?ENT_PARM_DIRECT_L09 + 0000176B C5 3249 PUSH BC + 0000176C 4B 3250 LD C,E + 0000176D 42 3251 LD B,D + 0000176E ED 5B 04 04 3252 LD DE,(dev) + 00001772 3E A5 3253 LD A,BYTE3 da_write + 00001774 21 A5 00 3254 LD HL,LWRD da_write + 00001777 CD 00 00 3255 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000177A F1 3256 POP AF + 0000177B 3E 02 3257 LD A,2 + 0000177D AC 3258 XOR H + 0000177E B5 3259 OR L + 0000177F 28 1D 3260 JR Z,?0301 + 00001781 3261 ?0300: + 00001781 DD 6E 02 3262 LD L,(IX+2) + 00001784 DD 66 03 3263 LD H,(IX+3) + 00001787 E5 3264 PUSH HL + 00001788 21 A0 05 3265 LD HL,?0302 + 0000178B E5 3266 PUSH HL + 0000178C 3E 00 3267 LD A,BYTE3 printf + 0000178E 21 00 00 3268 LD HL,LWRD printf + 00001791 CD 00 00 3269 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001794 F1 3270 POP AF + 00001795 F1 3271 POP AF + 00001796 3E 00 3272 LD A,BYTE3 abort + 00001798 21 00 00 3273 LD HL,LWRD abort + 0000179B CD 00 00 3274 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000179E 3275 ?0301: + 0000179E C3 00 00 3276 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000017A1 3277 iread: + 000017A1 CD 00 00 3278 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 000017A4 FE FF 3279 DEFW 65534 + 000017A6 06 03 3280 LD B,3 + 000017A8 DD 5E 02 3281 LD E,(IX+2) + 000017AB DD 56 03 3282 LD D,(IX+3) + 000017AE CD 00 00 3283 CALL LWRD ?US_RSH_L02 + 000017B1 2A 26 04 3284 LD HL,(finode) + 000017B4 19 3285 ADD HL,DE + 000017B5 EB 3286 EX DE,HL + 000017B6 3E 29 3287 LD A,BYTE3 daread + 000017B8 21 29 17 3288 LD HL,LWRD daread + 000017BB CD 00 00 3289 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000017BE DD 75 FE 3290 LD (IX-2),L + 000017C1 DD 74 FF 3291 LD (IX-1),H + 000017C4 01 40 00 3292 LD BC,64 + 000017C7 C5 3293 PUSH BC + 000017C8 DD 4E 04 3294 LD C,(IX+4) + 000017CB DD 46 05 3295 LD B,(IX+5) + 000017CE C5 3296 PUSH BC + 000017CF DD 7E 02 3297 LD A,(IX+2) + 000017D2 E6 07 3298 AND 7 + 000017D4 5F 3299 LD E,A + 000017D5 DD 7E 03 3300 LD A,(IX+3) + 000017D8 E6 00 3301 AND 0 + 000017DA 57 3302 LD D,A + 000017DB 06 06 3303 LD B,6 + 000017DD CD 00 00 3304 CALL LWRD ?S_LSH_L02 + 000017E0 19 3305 ADD HL,DE + 000017E1 EB 3306 EX DE,HL + 000017E2 3E 00 3307 LD A,BYTE3 bcopy + 000017E4 21 00 00 3308 LD HL,LWRD bcopy + 000017E7 C1 3309 POP BC + 000017E8 CD 00 00 3310 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000017EB E1 3311 POP HL + 000017EC C3 00 00 3312 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000017EF 3313 iwrite: + 000017EF CD 00 00 3314 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 000017F2 FE FF 3315 DEFW 65534 + 000017F4 06 03 3316 LD B,3 + 000017F6 DD 5E 02 3317 LD E,(IX+2) + 000017F9 DD 56 03 3318 LD D,(IX+3) + 000017FC CD 00 00 3319 CALL LWRD ?US_RSH_L02 + 000017FF 2A 26 04 3320 LD HL,(finode) + 00001802 19 3321 ADD HL,DE + 00001803 EB 3322 EX DE,HL + 00001804 3E 29 3323 LD A,BYTE3 daread + 00001806 21 29 17 3324 LD HL,LWRD daread + 00001809 CD 00 00 3325 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000180C DD 75 FE 3326 LD (IX-2),L + 0000180F DD 74 FF 3327 LD (IX-1),H + 00001812 01 40 00 3328 LD BC,64 + 00001815 C5 3329 PUSH BC + 00001816 DD 7E 02 3330 LD A,(IX+2) + 00001819 E6 07 3331 AND 7 + 0000181B 5F 3332 LD E,A + 0000181C DD 7E 03 3333 LD A,(IX+3) + 0000181F E6 00 3334 AND 0 + 00001821 57 3335 LD D,A + 00001822 06 06 3336 LD B,6 + 00001824 CD 00 00 3337 CALL LWRD ?S_LSH_L02 + 00001827 19 3338 ADD HL,DE + 00001828 4D 3339 LD C,L + 00001829 44 3340 LD B,H + 0000182A DD 5E 04 3341 LD E,(IX+4) + 0000182D DD 56 05 3342 LD D,(IX+5) + 00001830 3E 00 3343 LD A,BYTE3 bcopy + 00001832 21 00 00 3344 LD HL,LWRD bcopy + 00001835 CD 00 00 3345 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001838 E1 3346 POP HL + 00001839 DD 4E FE 3347 LD C,(IX-2) + 0000183C DD 46 FF 3348 LD B,(IX-1) + 0000183F C5 3349 PUSH BC + 00001840 06 03 3350 LD B,3 + 00001842 DD 5E 02 3351 LD E,(IX+2) + 00001845 DD 56 03 3352 LD D,(IX+3) + 00001848 CD 00 00 3353 CALL LWRD ?US_RSH_L02 + 0000184B 2A 26 04 3354 LD HL,(finode) + 0000184E 19 3355 ADD HL,DE + 0000184F EB 3356 EX DE,HL + 00001850 3E 68 3357 LD A,BYTE3 dwrite + 00001852 21 68 17 3358 LD HL,LWRD dwrite + 00001855 C1 3359 POP BC + 00001856 CD 00 00 3360 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001859 C3 00 00 3361 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 0000185C 3362 dirread: + 0000185C CD 00 00 3363 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 0000185F FC FF 3364 DEFW 65532 + 00001861 06 05 3365 LD B,5 + 00001863 DD 5E 04 3366 LD E,(IX+4) + 00001866 DD 56 05 3367 LD D,(IX+5) + 00001869 CD 00 00 3368 CALL LWRD ?US_RSH_L02 + 0000186C 4B 3369 LD C,E + 0000186D 42 3370 LD B,D + 0000186E DD 5E 02 3371 LD E,(IX+2) + 00001871 DD 56 03 3372 LD D,(IX+3) + 00001874 3E 05 3373 LD A,BYTE3 getblkno + 00001876 21 05 14 3374 LD HL,LWRD getblkno + 00001879 CD 00 00 3375 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000187C DD 75 FE 3376 LD (IX-2),L + 0000187F DD 74 FF 3377 LD (IX-1),H + 00001882 7D 3378 LD A,L + 00001883 B4 3379 OR H + 00001884 20 0B 3380 JR NZ,?0304 + 00001886 3381 ?0303: + 00001886 11 BB 05 3382 LD DE,?0305 + 00001889 3E 97 3383 LD A,BYTE3 mypanic + 0000188B 21 97 1F 3384 LD HL,LWRD mypanic + 0000188E CD 00 00 3385 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001891 3386 ?0304: + 00001891 DD 5E FE 3387 LD E,(IX-2) + 00001894 DD 56 FF 3388 LD D,(IX-1) + 00001897 3E 29 3389 LD A,BYTE3 daread + 00001899 21 29 17 3390 LD HL,LWRD daread + 0000189C CD 00 00 3391 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000189F DD 75 FC 3392 LD (IX-4),L + 000018A2 DD 74 FD 3393 LD (IX-3),H + 000018A5 01 10 00 3394 LD BC,16 + 000018A8 C5 3395 PUSH BC + 000018A9 DD 4E 0A 3396 LD C,(IX+10) + 000018AC DD 46 0B 3397 LD B,(IX+11) + 000018AF E5 3398 PUSH HL + 000018B0 DD 7E 04 3399 LD A,(IX+4) + 000018B3 E6 1F 3400 AND 31 + 000018B5 6F 3401 LD L,A + 000018B6 DD 7E 05 3402 LD A,(IX+5) + 000018B9 E6 00 3403 AND 0 + 000018BB 67 3404 LD H,A + 000018BC 29 3405 ADD HL,HL + 000018BD 29 3406 ADD HL,HL + 000018BE 29 3407 ADD HL,HL + 000018BF 29 3408 ADD HL,HL + 000018C0 EB 3409 EX DE,HL + 000018C1 E1 3410 POP HL + 000018C2 19 3411 ADD HL,DE + 000018C3 EB 3412 EX DE,HL + 000018C4 3E 00 3413 LD A,BYTE3 bcopy + 000018C6 21 00 00 3414 LD HL,LWRD bcopy + 000018C9 CD 00 00 3415 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000018CC E1 3416 POP HL + 000018CD C3 00 00 3417 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000018D0 3418 dirwrite: + 000018D0 CD 00 00 3419 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 000018D3 FC FF 3420 DEFW 65532 + 000018D5 06 05 3421 LD B,5 + 000018D7 DD 5E 04 3422 LD E,(IX+4) + 000018DA DD 56 05 3423 LD D,(IX+5) + 000018DD CD 00 00 3424 CALL LWRD ?US_RSH_L02 + 000018E0 4B 3425 LD C,E + 000018E1 42 3426 LD B,D + 000018E2 DD 5E 02 3427 LD E,(IX+2) + 000018E5 DD 56 03 3428 LD D,(IX+3) + 000018E8 3E 05 3429 LD A,BYTE3 getblkno + 000018EA 21 05 14 3430 LD HL,LWRD getblkno + 000018ED CD 00 00 3431 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000018F0 DD 75 FE 3432 LD (IX-2),L + 000018F3 DD 74 FF 3433 LD (IX-1),H + 000018F6 7D 3434 LD A,L + 000018F7 B4 3435 OR H + 000018F8 20 0B 3436 JR NZ,?0307 + 000018FA 3437 ?0306: + 000018FA 11 BB 05 3438 LD DE,?0305 + 000018FD 3E 97 3439 LD A,BYTE3 mypanic + 000018FF 21 97 1F 3440 LD HL,LWRD mypanic + 00001902 CD 00 00 3441 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001905 3442 ?0307: + 00001905 DD 5E FE 3443 LD E,(IX-2) + 00001908 DD 56 FF 3444 LD D,(IX-1) + 0000190B 3E 29 3445 LD A,BYTE3 daread + 0000190D 21 29 17 3446 LD HL,LWRD daread + 00001910 CD 00 00 3447 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001913 DD 75 FC 3448 LD (IX-4),L + 00001916 DD 74 FD 3449 LD (IX-3),H + 00001919 01 10 00 3450 LD BC,16 + 0000191C C5 3451 PUSH BC + 0000191D E5 3452 PUSH HL + 0000191E DD 7E 04 3453 LD A,(IX+4) + 00001921 E6 1F 3454 AND 31 + 00001923 6F 3455 LD L,A + 00001924 DD 7E 05 3456 LD A,(IX+5) + 00001927 E6 00 3457 AND 0 + 00001929 67 3458 LD H,A + 0000192A 29 3459 ADD HL,HL + 0000192B 29 3460 ADD HL,HL + 0000192C 29 3461 ADD HL,HL + 0000192D 29 3462 ADD HL,HL + 0000192E 4D 3463 LD C,L + 0000192F 44 3464 LD B,H + 00001930 E1 3465 POP HL + 00001931 09 3466 ADD HL,BC + 00001932 4D 3467 LD C,L + 00001933 44 3468 LD B,H + 00001934 DD 5E 0A 3469 LD E,(IX+10) + 00001937 DD 56 0B 3470 LD D,(IX+11) + 0000193A 3E 00 3471 LD A,BYTE3 bcopy + 0000193C 21 00 00 3472 LD HL,LWRD bcopy + 0000193F CD 00 00 3473 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001942 E1 3474 POP HL + 00001943 DD 4E FC 3475 LD C,(IX-4) + 00001946 DD 46 FD 3476 LD B,(IX-3) + 00001949 DD 5E FE 3477 LD E,(IX-2) + 0000194C DD 56 FF 3478 LD D,(IX-1) + 0000194F 3E 68 3479 LD A,BYTE3 dwrite + 00001951 21 68 17 3480 LD HL,LWRD dwrite + 00001954 CD 00 00 3481 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001957 C3 00 00 3482 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 0000195A 3483 yes: + 0000195A CD 00 00 3484 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 0000195D EC FF 3485 DEFW 65516 + 0000195F 11 00 00 3486 LD DE,stdout + 00001962 3E 00 3487 LD A,BYTE3 fflush + 00001964 21 00 00 3488 LD HL,LWRD fflush + 00001967 CD 00 00 3489 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000196A 2A 00 00 3490 LD HL,(_yes) + 0000196D 7D 3491 LD A,L + 0000196E B4 3492 OR H + 0000196F 28 0F 3493 JR Z,?0309 + 00001971 3494 ?0308: + 00001971 21 D6 05 3495 LD HL,?0310 + 00001974 E5 3496 PUSH HL + 00001975 3E 00 3497 LD A,BYTE3 printf + 00001977 21 00 00 3498 LD HL,LWRD printf + 0000197A CD 00 00 3499 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000197D F1 3500 POP AF + 0000197E 18 2D 3501 JR ?0311 + 00001980 3502 ?0309: + 00001980 21 00 00 3503 LD HL,stdin + 00001983 E5 3504 PUSH HL + 00001984 01 14 00 3505 LD BC,20 + 00001987 21 02 00 3506 LD HL,2 + 0000198A 39 3507 ADD HL,SP + 0000198B 5D 3508 LD E,L + 0000198C 54 3509 LD D,H + 0000198D 3E 00 3510 LD A,BYTE3 fgets + 0000198F 21 00 00 3511 LD HL,LWRD fgets + 00001992 CD 00 00 3512 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001995 F1 3513 POP AF + 00001996 7D 3514 LD A,L + 00001997 B4 3515 OR H + 00001998 28 0E 3516 JR Z,?0312 + 0000199A DD 7E EC 3517 LD A,(IX-20) + 0000199D FE 79 3518 CP 121 + 0000199F 28 0C 3519 JR Z,?0313 + 000019A1 DD 7E EC 3520 LD A,(IX-20) + 000019A4 FE 59 3521 CP 89 + 000019A6 28 05 3522 JR Z,?0313 + 000019A8 3523 ?0317: + 000019A8 3524 ?0316: + 000019A8 3525 ?0314: + 000019A8 3526 ?0315: + 000019A8 3527 ?0312: + 000019A8 21 00 00 3528 LD HL,0 + 000019AB 18 03 3529 JR ?0318 + 000019AD 3530 ?0313: + 000019AD 3531 ?0311: + 000019AD 21 01 00 3532 LD HL,1 + 000019B0 3533 ?0318: + 000019B0 C3 00 00 3534 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000019B3 3535 main: + 000019B3 CD 00 00 3536 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 000019B6 F8 FF 3537 DEFW 65528 + 000019B8 DD 36 FC 01 3538 LD (IX-4),1 + 000019BC DD 36 FD 00 3539 LD (IX-3),0 + 000019C0 DD 6E 02 3540 LD L,(IX+2) + 000019C3 DD 66 03 3541 LD H,(IX+3) + 000019C6 DD 75 FE 3542 LD (IX-2),L + 000019C9 DD 74 FF 3543 LD (IX-1),H + 000019CC 2B 3544 DEC HL + 000019CD DD 75 FE 3545 LD (IX-2),L + 000019D0 DD 74 FF 3546 LD (IX-1),H + 000019D3 4D 3547 LD C,L + 000019D4 44 3548 LD B,H + 000019D5 21 00 00 3549 LD HL,0 + 000019D8 CD 00 00 3550 CALL LWRD ?SS_CMP_L02 + 000019DB 30 76 3551 JR NC,?0320 + 000019DD DD 6E FC 3552 LD L,(IX-4) + 000019E0 DD 66 FD 3553 LD H,(IX-3) + 000019E3 29 3554 ADD HL,HL + 000019E4 DD 4E 04 3555 LD C,(IX+4) + 000019E7 DD 46 05 3556 LD B,(IX+5) + 000019EA 09 3557 ADD HL,BC + 000019EB 46 3558 LD B,(HL) + 000019EC 23 3559 INC HL + 000019ED 66 3560 LD H,(HL) + 000019EE 68 3561 LD L,B + 000019EF DD 75 FA 3562 LD (IX-6),L + 000019F2 DD 74 FB 3563 LD (IX-5),H + 000019F5 7E 3564 LD A,(HL) + 000019F6 FE 2D 3565 CP 45 + 000019F8 20 59 3566 JR NZ,?0320 + 000019FA 3567 ?0322: + 000019FA 3568 ?0321: + 000019FA 3569 ?0319: + 000019FA DD 6E FA 3570 LD L,(IX-6) + 000019FD DD 66 FB 3571 LD H,(IX-5) + 00001A00 23 3572 INC HL + 00001A01 7E 3573 LD A,(HL) + 00001A02 FE 79 3574 CP 121 + 00001A04 28 31 3575 JR Z,?0324 + 00001A06 DD 6E FA 3576 LD L,(IX-6) + 00001A09 DD 66 FB 3577 LD H,(IX-5) + 00001A0C 23 3578 INC HL + 00001A0D 7E 3579 LD A,(HL) + 00001A0E FE 59 3580 CP 89 + 00001A10 28 25 3581 JR Z,?0324 + 00001A12 3582 ?0326: + 00001A12 3583 ?0325: + 00001A12 3584 ?0323: + 00001A12 DD 6E FA 3585 LD L,(IX-6) + 00001A15 DD 66 FB 3586 LD H,(IX-5) + 00001A18 E5 3587 PUSH HL + 00001A19 21 D9 05 3588 LD HL,?0327 + 00001A1C E5 3589 PUSH HL + 00001A1D 21 00 00 3590 LD HL,stderr + 00001A20 E5 3591 PUSH HL + 00001A21 3E 00 3592 LD A,BYTE3 fprintf + 00001A23 21 00 00 3593 LD HL,LWRD fprintf + 00001A26 CD 00 00 3594 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001A29 F1 3595 POP AF + 00001A2A F1 3596 POP AF + 00001A2B F1 3597 POP AF + 00001A2C 11 01 00 3598 LD DE,1 + 00001A2F 3E 00 3599 LD A,BYTE3 exit + 00001A31 21 00 00 3600 LD HL,LWRD exit + 00001A34 CD 00 00 3601 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001A37 3602 ?0324: + 00001A37 2A 00 00 3603 LD HL,(_yes) + 00001A3A 23 3604 INC HL + 00001A3B 22 00 00 3605 LD (_yes),HL + 00001A3E DD 34 FC 3606 INC (IX-4) + 00001A41 20 03 3607 JR NZ,?0400 + 00001A43 DD 34 FD 3608 INC (IX-3) + 00001A46 3609 ?0400: + 00001A46 DD 6E FE 3610 LD L,(IX-2) + 00001A49 DD 66 FF 3611 LD H,(IX-1) + 00001A4C 2B 3612 DEC HL + 00001A4D DD 75 FE 3613 LD (IX-2),L + 00001A50 DD 74 FF 3614 LD (IX-1),H + 00001A53 3615 ?0320: + 00001A53 3E 01 3616 LD A,1 + 00001A55 DD AE FE 3617 XOR (IX-2) + 00001A58 DD B6 FF 3618 OR (IX-1) + 00001A5B 28 1D 3619 JR Z,?0329 + 00001A5D 3620 ?0328: + 00001A5D 21 EC 05 3621 LD HL,?0330 + 00001A60 E5 3622 PUSH HL + 00001A61 21 00 00 3623 LD HL,stderr + 00001A64 E5 3624 PUSH HL + 00001A65 3E 00 3625 LD A,BYTE3 fprintf + 00001A67 21 00 00 3626 LD HL,LWRD fprintf + 00001A6A CD 00 00 3627 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001A6D F1 3628 POP AF + 00001A6E F1 3629 POP AF + 00001A6F 11 01 00 3630 LD DE,1 + 00001A72 3E 00 3631 LD A,BYTE3 exit + 00001A74 21 00 00 3632 LD HL,LWRD exit + 00001A77 CD 00 00 3633 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001A7A 3634 ?0329: + 00001A7A DD 6E FC 3635 LD L,(IX-4) + 00001A7D DD 66 FD 3636 LD H,(IX-3) + 00001A80 29 3637 ADD HL,HL + 00001A81 DD 4E 04 3638 LD C,(IX+4) + 00001A84 DD 46 05 3639 LD B,(IX+5) + 00001A87 09 3640 ADD HL,BC + 00001A88 4E 3641 LD C,(HL) + 00001A89 23 3642 INC HL + 00001A8A 46 3643 LD B,(HL) + 00001A8B 11 02 00 3644 LD DE,device_name + 00001A8E 3E 00 3645 LD A,BYTE3 strcpy + 00001A90 21 00 00 3646 LD HL,LWRD strcpy + 00001A93 CD 00 00 3647 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001A96 21 02 80 3648 LD HL,32770 + 00001A99 E5 3649 PUSH HL + 00001A9A 21 02 00 3650 LD HL,device_name + 00001A9D E5 3651 PUSH HL + 00001A9E 3E 00 3652 LD A,BYTE3 open + 00001AA0 21 00 00 3653 LD HL,LWRD open + 00001AA3 CD 00 00 3654 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001AA6 F1 3655 POP AF + 00001AA7 F1 3656 POP AF + 00001AA8 22 00 00 3657 LD (device_handle),HL + 00001AAB CB 7C 3658 BIT 7,H + 00001AAD 28 2E 3659 JR Z,?0332 + 00001AAF 3660 ?0331: + 00001AAF 21 05 06 3661 LD HL,?0333 + 00001AB2 E5 3662 PUSH HL + 00001AB3 3E 00 3663 LD A,BYTE3 printf + 00001AB5 21 00 00 3664 LD HL,LWRD printf + 00001AB8 CD 00 00 3665 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001ABB F1 3666 POP AF + 00001ABC 11 00 00 3667 LD DE,stdout + 00001ABF 3E 00 3668 LD A,BYTE3 fflush + 00001AC1 21 00 00 3669 LD HL,LWRD fflush + 00001AC4 CD 00 00 3670 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001AC7 11 02 00 3671 LD DE,device_name + 00001ACA 3E 00 3672 LD A,BYTE3 perror + 00001ACC 21 00 00 3673 LD HL,LWRD perror + 00001ACF CD 00 00 3674 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001AD2 11 01 00 3675 LD DE,1 + 00001AD5 3E 00 3676 LD A,BYTE3 exit + 00001AD7 21 00 00 3677 LD HL,LWRD exit + 00001ADA CD 00 00 3678 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001ADD 3679 ?0332: + 00001ADD 11 04 00 3680 LD DE,4 + 00001AE0 3E 29 3681 LD A,BYTE3 daread + 00001AE2 21 29 17 3682 LD HL,LWRD daread + 00001AE5 CD 00 00 3683 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001AE8 DD 75 F8 3684 LD (IX-8),L + 00001AEB DD 74 F9 3685 LD (IX-7),H + 00001AEE 01 1E 00 3686 LD BC,30 + 00001AF1 C5 3687 PUSH BC + 00001AF2 01 06 04 3688 LD BC,filsys + 00001AF5 EB 3689 EX DE,HL + 00001AF6 3E 00 3690 LD A,BYTE3 bcopy + 00001AF8 21 00 00 3691 LD HL,LWRD bcopy + 00001AFB CD 00 00 3692 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001AFE E1 3693 POP HL + 00001AFF 2A 06 04 3694 LD HL,(filsys) + 00001B02 01 C6 31 3695 LD BC,12742 + 00001B05 A7 3696 AND A + 00001B06 ED 42 3697 SBC HL,BC + 00001B08 28 5E 3698 JR Z,?0335 + 00001B0A 3699 ?0334: + 00001B0A 21 06 04 3700 LD HL,filsys + 00001B0D 4E 3701 LD C,(HL) + 00001B0E 23 3702 INC HL + 00001B0F 46 3703 LD B,(HL) + 00001B10 C5 3704 PUSH BC + 00001B11 2A 04 04 3705 LD HL,(dev) + 00001B14 E5 3706 PUSH HL + 00001B15 21 12 06 3707 LD HL,?0336 + 00001B18 E5 3708 PUSH HL + 00001B19 3E 00 3709 LD A,BYTE3 printf + 00001B1B 21 00 00 3710 LD HL,LWRD printf + 00001B1E CD 00 00 3711 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001B21 F1 3712 POP AF + 00001B22 F1 3713 POP AF + 00001B23 F1 3714 POP AF + 00001B24 3E 5A 3715 LD A,BYTE3 yes + 00001B26 21 5A 19 3716 LD HL,LWRD yes + 00001B29 CD 00 00 3717 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001B2C 7D 3718 LD A,L + 00001B2D B4 3719 OR H + 00001B2E 20 0B 3720 JR NZ,?0338 + 00001B30 3721 ?0337: + 00001B30 11 01 00 3722 LD DE,1 + 00001B33 3E 00 3723 LD A,BYTE3 exit + 00001B35 21 00 00 3724 LD HL,LWRD exit + 00001B38 CD 00 00 3725 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001B3B 3726 ?0338: + 00001B3B 21 C6 31 3727 LD HL,12742 + 00001B3E 22 06 04 3728 LD (filsys),HL + 00001B41 21 1E 00 3729 LD HL,30 + 00001B44 E5 3730 PUSH HL + 00001B45 DD 4E F8 3731 LD C,(IX-8) + 00001B48 DD 46 F9 3732 LD B,(IX-7) + 00001B4B 11 06 04 3733 LD DE,filsys + 00001B4E 3E 00 3734 LD A,BYTE3 bcopy + 00001B50 21 00 00 3735 LD HL,LWRD bcopy + 00001B53 CD 00 00 3736 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001B56 E1 3737 POP HL + 00001B57 DD 4E F8 3738 LD C,(IX-8) + 00001B5A DD 46 F9 3739 LD B,(IX-7) + 00001B5D 11 04 00 3740 LD DE,4 + 00001B60 3E 68 3741 LD A,BYTE3 dwrite + 00001B62 21 68 17 3742 LD HL,LWRD dwrite + 00001B65 CD 00 00 3743 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001B68 3744 ?0335: + 00001B68 2A 08 04 3745 LD HL,(filsys+2) + 00001B6B 01 FB FF 3746 LD BC,65531 + 00001B6E 09 3747 ADD HL,BC + 00001B6F E5 3748 PUSH HL + 00001B70 21 0A 04 3749 LD HL,filsys+4 + 00001B73 4E 3750 LD C,(HL) + 00001B74 23 3751 INC HL + 00001B75 46 3752 LD B,(HL) + 00001B76 C5 3753 PUSH BC + 00001B77 21 0C 04 3754 LD HL,filsys+6 + 00001B7A 4E 3755 LD C,(HL) + 00001B7B 23 3756 INC HL + 00001B7C 46 3757 LD B,(HL) + 00001B7D C5 3758 PUSH BC + 00001B7E 21 02 00 3759 LD HL,device_name + 00001B81 E5 3760 PUSH HL + 00001B82 21 3F 06 3761 LD HL,?0339 + 00001B85 E5 3762 PUSH HL + 00001B86 3E 00 3763 LD A,BYTE3 printf + 00001B88 21 00 00 3764 LD HL,LWRD printf + 00001B8B CD 00 00 3765 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001B8E F1 3766 POP AF + 00001B8F F1 3767 POP AF + 00001B90 F1 3768 POP AF + 00001B91 F1 3769 POP AF + 00001B92 F1 3770 POP AF + 00001B93 3E 5A 3771 LD A,BYTE3 yes + 00001B95 21 5A 19 3772 LD HL,LWRD yes + 00001B98 CD 00 00 3773 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001B9B 7D 3774 LD A,L + 00001B9C B4 3775 OR H + 00001B9D 20 0B 3776 JR NZ,?0341 + 00001B9F 3777 ?0340: + 00001B9F 11 01 00 3778 LD DE,1 + 00001BA2 3E 00 3779 LD A,BYTE3 exit + 00001BA4 21 00 00 3780 LD HL,LWRD exit + 00001BA7 CD 00 00 3781 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001BAA 3782 ?0341: + 00001BAA ED 4B 16 04 3783 LD BC,(filsys+16) + 00001BAE 2A 18 04 3784 LD HL,(filsys+18) + 00001BB1 A7 3785 AND A + 00001BB2 ED 42 3786 SBC HL,BC + 00001BB4 EB 3787 EX DE,HL + 00001BB5 3E 00 3788 LD A,BYTE3 malloc + 00001BB7 21 00 00 3789 LD HL,LWRD malloc + 00001BBA CD 00 00 3790 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001BBD 22 34 04 3791 LD (inode_bitmap),HL + 00001BC0 7D 3792 LD A,L + 00001BC1 B4 3793 OR H + 00001BC2 20 0B 3794 JR NZ,?0343 + 00001BC4 3795 ?0342: + 00001BC4 DD 36 FA 79 3796 LD (IX-6),LOW(?0344) + 00001BC8 DD 36 FB 06 3797 LD (IX-5),HIGH(?0344) + 00001BCC C3 50 1C 3798 JP LWRD ?0345 + 00001BCF 3799 ?0343: + 00001BCF ED 4B 16 04 3800 LD BC,(filsys+16) + 00001BD3 2A 18 04 3801 LD HL,(filsys+18) + 00001BD6 A7 3802 AND A + 00001BD7 ED 42 3803 SBC HL,BC + 00001BD9 E5 3804 PUSH HL + 00001BDA 0E 00 3805 LD C,0 + 00001BDC ED 5B 34 04 3806 LD DE,(inode_bitmap) + 00001BE0 3E 00 3807 LD A,BYTE3 bfill + 00001BE2 21 00 00 3808 LD HL,LWRD bfill + 00001BE5 CD 00 00 3809 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001BE8 E1 3810 POP HL + 00001BE9 ED 4B 18 04 3811 LD BC,(filsys+18) + 00001BED 2A 1A 04 3812 LD HL,(filsys+20) + 00001BF0 A7 3813 AND A + 00001BF1 ED 42 3814 SBC HL,BC + 00001BF3 EB 3815 EX DE,HL + 00001BF4 3E 00 3816 LD A,BYTE3 malloc + 00001BF6 21 00 00 3817 LD HL,LWRD malloc + 00001BF9 CD 00 00 3818 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001BFC 22 36 04 3819 LD (block_bitmap),HL + 00001BFF 7D 3820 LD A,L + 00001C00 B4 3821 OR H + 00001C01 20 0A 3822 JR NZ,?0347 + 00001C03 3823 ?0346: + 00001C03 DD 36 FA 86 3824 LD (IX-6),LOW(?0348) + 00001C07 DD 36 FB 06 3825 LD (IX-5),HIGH(?0348) + 00001C0B 18 43 3826 JR ?0345 + 00001C0D 3827 ?0347: + 00001C0D ED 4B 18 04 3828 LD BC,(filsys+18) + 00001C11 2A 1A 04 3829 LD HL,(filsys+20) + 00001C14 A7 3830 AND A + 00001C15 ED 42 3831 SBC HL,BC + 00001C17 E5 3832 PUSH HL + 00001C18 0E 00 3833 LD C,0 + 00001C1A ED 5B 36 04 3834 LD DE,(block_bitmap) + 00001C1E 3E 00 3835 LD A,BYTE3 bfill + 00001C20 21 00 00 3836 LD HL,LWRD bfill + 00001C23 CD 00 00 3837 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001C26 E1 3838 POP HL + 00001C27 2A 0A 04 3839 LD HL,(filsys+4) + 00001C2A 29 3840 ADD HL,HL + 00001C2B 29 3841 ADD HL,HL + 00001C2C 29 3842 ADD HL,HL + 00001C2D 22 24 04 3843 LD (ninodes),HL + 00001C30 ED 4B 08 04 3844 LD BC,(filsys+2) + 00001C34 ED 43 26 04 3845 LD (finode),BC + 00001C38 EB 3846 EX DE,HL + 00001C39 3E 00 3847 LD A,BYTE3 malloc + 00001C3B 21 00 00 3848 LD HL,LWRD malloc + 00001C3E CD 00 00 3849 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001C41 22 38 04 3850 LD (link_count),HL + 00001C44 7D 3851 LD A,L + 00001C45 B4 3852 OR H + 00001C46 20 2D 3853 JR NZ,?0350 + 00001C48 3854 ?0349: + 00001C48 DD 36 FA 93 3855 LD (IX-6),LOW(?0351) + 00001C4C DD 36 FB 06 3856 LD (IX-5),HIGH(?0351) + 00001C50 3857 ?0345: + 00001C50 DD 6E FA 3858 LD L,(IX-6) + 00001C53 DD 66 FB 3859 LD H,(IX-5) + 00001C56 E5 3860 PUSH HL + 00001C57 21 9F 06 3861 LD HL,?0352 + 00001C5A E5 3862 PUSH HL + 00001C5B 21 00 00 3863 LD HL,stderr + 00001C5E E5 3864 PUSH HL + 00001C5F 3E 00 3865 LD A,BYTE3 fprintf + 00001C61 21 00 00 3866 LD HL,LWRD fprintf + 00001C64 CD 00 00 3867 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001C67 F1 3868 POP AF + 00001C68 F1 3869 POP AF + 00001C69 F1 3870 POP AF + 00001C6A 11 01 00 3871 LD DE,1 + 00001C6D 3E 00 3872 LD A,BYTE3 exit + 00001C6F 21 00 00 3873 LD HL,LWRD exit + 00001C72 CD 00 00 3874 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001C75 3875 ?0350: + 00001C75 2A 24 04 3876 LD HL,(ninodes) + 00001C78 E5 3877 PUSH HL + 00001C79 0E 00 3878 LD C,0 + 00001C7B ED 5B 38 04 3879 LD DE,(link_count) + 00001C7F 3E 00 3880 LD A,BYTE3 bfill + 00001C81 21 00 00 3881 LD HL,LWRD bfill + 00001C84 CD 00 00 3882 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001C87 E1 3883 POP HL + 00001C88 21 BA 06 3884 LD HL,?0353 + 00001C8B E5 3885 PUSH HL + 00001C8C 3E 00 3886 LD A,BYTE3 printf + 00001C8E 21 00 00 3887 LD HL,LWRD printf + 00001C91 CD 00 00 3888 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001C94 F1 3889 POP AF + 00001C95 11 00 00 3890 LD DE,stdout + 00001C98 3E 00 3891 LD A,BYTE3 fflush + 00001C9A 21 00 00 3892 LD HL,LWRD fflush + 00001C9D CD 00 00 3893 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001CA0 3E 4A 3894 LD A,BYTE3 pass1 + 00001CA2 21 4A 01 3895 LD HL,LWRD pass1 + 00001CA5 CD 00 00 3896 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001CA8 21 D5 06 3897 LD HL,?0354 + 00001CAB E5 3898 PUSH HL + 00001CAC 3E 00 3899 LD A,BYTE3 printf + 00001CAE 21 00 00 3900 LD HL,LWRD printf + 00001CB1 CD 00 00 3901 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001CB4 F1 3902 POP AF + 00001CB5 11 00 00 3903 LD DE,stdout + 00001CB8 3E 00 3904 LD A,BYTE3 fflush + 00001CBA 21 00 00 3905 LD HL,LWRD fflush + 00001CBD CD 00 00 3906 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001CC0 3E 3F 3907 LD A,BYTE3 pass2 + 00001CC2 21 3F 06 3908 LD HL,LWRD pass2 + 00001CC5 CD 00 00 3909 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001CC8 21 F7 06 3910 LD HL,?0355 + 00001CCB E5 3911 PUSH HL + 00001CCC 3E 00 3912 LD A,BYTE3 printf + 00001CCE 21 00 00 3913 LD HL,LWRD printf + 00001CD1 CD 00 00 3914 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001CD4 F1 3915 POP AF + 00001CD5 11 00 00 3916 LD DE,stdout + 00001CD8 3E 00 3917 LD A,BYTE3 fflush + 00001CDA 21 00 00 3918 LD HL,LWRD fflush + 00001CDD CD 00 00 3919 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001CE0 3E E6 3920 LD A,BYTE3 pass3 + 00001CE2 21 E6 08 3921 LD HL,LWRD pass3 + 00001CE5 CD 00 00 3922 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001CE8 21 1B 07 3923 LD HL,?0356 + 00001CEB E5 3924 PUSH HL + 00001CEC 3E 00 3925 LD A,BYTE3 printf + 00001CEE 21 00 00 3926 LD HL,LWRD printf + 00001CF1 CD 00 00 3927 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001CF4 F1 3928 POP AF + 00001CF5 11 00 00 3929 LD DE,stdout + 00001CF8 3E 00 3930 LD A,BYTE3 fflush + 00001CFA 21 00 00 3931 LD HL,LWRD fflush + 00001CFD CD 00 00 3932 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001D00 3E AE 3933 LD A,BYTE3 pass4 + 00001D02 21 AE 10 3934 LD HL,LWRD pass4 + 00001D05 CD 00 00 3935 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001D08 21 40 07 3936 LD HL,?0357 + 00001D0B E5 3937 PUSH HL + 00001D0C 3E 00 3938 LD A,BYTE3 printf + 00001D0E 21 00 00 3939 LD HL,LWRD printf + 00001D11 CD 00 00 3940 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001D14 F1 3941 POP AF + 00001D15 11 00 00 3942 LD DE,stdout + 00001D18 3E 00 3943 LD A,BYTE3 fflush + 00001D1A 21 00 00 3944 LD HL,LWRD fflush + 00001D1D CD 00 00 3945 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001D20 3E C8 3946 LD A,BYTE3 pass5 + 00001D22 21 C8 11 3947 LD HL,LWRD pass5 + 00001D25 CD 00 00 3948 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001D28 ED 5B 00 00 3949 LD DE,(device_handle) + 00001D2C 3E 00 3950 LD A,BYTE3 close + 00001D2E 21 00 00 3951 LD HL,LWRD close + 00001D31 CD 00 00 3952 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001D34 21 5F 07 3953 LD HL,?0358 + 00001D37 E5 3954 PUSH HL + 00001D38 3E 00 3955 LD A,BYTE3 printf + 00001D3A 21 00 00 3956 LD HL,LWRD printf + 00001D3D CD 00 00 3957 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001D40 F1 3958 POP AF + 00001D41 11 00 00 3959 LD DE,0 + 00001D44 3E 00 3960 LD A,BYTE3 exit + 00001D46 21 00 00 3961 LD HL,LWRD exit + 00001D49 CD 00 00 3962 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001D4C C3 00 00 3963 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00001D4F 3964 bitmap_dump: + 00001D4F CD 00 00 3965 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 00001D52 FA FF 3966 DEFW 65530 + 00001D54 DD 6E 0A 3967 LD L,(IX+10) + 00001D57 DD 66 0B 3968 LD H,(IX+11) + 00001D5A DD 75 FC 3969 LD (IX-4),L + 00001D5D DD 74 FD 3970 LD (IX-3),H + 00001D60 3971 ?0360: + 00001D60 DD 6E 10 3972 LD L,(IX+16) + 00001D63 DD 66 11 3973 LD H,(IX+17) + 00001D66 E5 3974 PUSH HL + 00001D67 DD 6E 0E 3975 LD L,(IX+14) + 00001D6A DD 66 0F 3976 LD H,(IX+15) + 00001D6D E5 3977 PUSH HL + 00001D6E DD 6E FC 3978 LD L,(IX-4) + 00001D71 DD 66 FD 3979 LD H,(IX-3) + 00001D74 01 00 00 3980 LD BC,0 + 00001D77 CD 00 00 3981 CALL LWRD ?SL_CMP_L03 + 00001D7A D2 42 1E 3982 JP NC,?0359 + 00001D7D 3983 ?0361: + 00001D7D DD 4E 0E 3984 LD C,(IX+14) + 00001D80 DD 46 0F 3985 LD B,(IX+15) + 00001D83 DD 6E FC 3986 LD L,(IX-4) + 00001D86 DD 66 FD 3987 LD H,(IX-3) + 00001D89 3E 02 3988 LD A,2 + 00001D8B 84 3989 ADD A,H + 00001D8C 67 3990 LD H,A + 00001D8D 7D 3991 LD A,L + 00001D8E E6 00 3992 AND 0 + 00001D90 5F 3993 LD E,A + 00001D91 7C 3994 LD A,H + 00001D92 E6 FE 3995 AND 254 + 00001D94 57 3996 LD D,A + 00001D95 3E 00 3997 LD A,BYTE3 int_min + 00001D97 21 00 00 3998 LD HL,LWRD int_min + 00001D9A CD 00 00 3999 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001D9D DD 75 FE 4000 LD (IX-2),L + 00001DA0 DD 74 FF 4001 LD (IX-1),H + 00001DA3 DD 4E FC 4002 LD C,(IX-4) + 00001DA6 DD 46 FD 4003 LD B,(IX-3) + 00001DA9 A7 4004 AND A + 00001DAA ED 42 4005 SBC HL,BC + 00001DAC 01 00 02 4006 LD BC,512 + 00001DAF A7 4007 AND A + 00001DB0 ED 42 4008 SBC HL,BC + 00001DB2 30 1B 4009 JR NC,?0363 + 00001DB4 4010 ?0362: + 00001DB4 06 09 4011 LD B,9 + 00001DB6 DD 5E FC 4012 LD E,(IX-4) + 00001DB9 DD 56 FD 4013 LD D,(IX-3) + 00001DBC CD 00 00 4014 CALL LWRD ?US_RSH_L02 + 00001DBF 3E 29 4015 LD A,BYTE3 daread + 00001DC1 21 29 17 4016 LD HL,LWRD daread + 00001DC4 CD 00 00 4017 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001DC7 DD 75 FA 4018 LD (IX-6),L + 00001DCA DD 74 FB 4019 LD (IX-5),H + 00001DCD 18 08 4020 JR ?0364 + 00001DCF 4021 ?0363: + 00001DCF DD 36 FA 02 4022 LD (IX-6),LOW(zeroed) + 00001DD3 DD 36 FB 02 4023 LD (IX-5),HIGH(zeroed) + 00001DD7 4024 ?0364: + 00001DD7 DD 4E FC 4025 LD C,(IX-4) + 00001DDA DD 46 FD 4026 LD B,(IX-3) + 00001DDD DD 6E FE 4027 LD L,(IX-2) + 00001DE0 DD 66 FF 4028 LD H,(IX-1) + 00001DE3 A7 4029 AND A + 00001DE4 ED 42 4030 SBC HL,BC + 00001DE6 E5 4031 PUSH HL + 00001DE7 79 4032 LD A,C + 00001DE8 E6 FF 4033 AND 255 + 00001DEA 6F 4034 LD L,A + 00001DEB 78 4035 LD A,B + 00001DEC E6 01 4036 AND 1 + 00001DEE 67 4037 LD H,A + 00001DEF DD 5E FA 4038 LD E,(IX-6) + 00001DF2 DD 56 FB 4039 LD D,(IX-5) + 00001DF5 19 4040 ADD HL,DE + 00001DF6 4D 4041 LD C,L + 00001DF7 44 4042 LD B,H + 00001DF8 DD 5E 0A 4043 LD E,(IX+10) + 00001DFB DD 56 0B 4044 LD D,(IX+11) + 00001DFE DD 6E FC 4045 LD L,(IX-4) + 00001E01 DD 66 FD 4046 LD H,(IX-3) + 00001E04 A7 4047 AND A + 00001E05 ED 52 4048 SBC HL,DE + 00001E07 DD 5E 02 4049 LD E,(IX+2) + 00001E0A DD 56 03 4050 LD D,(IX+3) + 00001E0D 19 4051 ADD HL,DE + 00001E0E EB 4052 EX DE,HL + 00001E0F 3E 00 4053 LD A,BYTE3 bcopy + 00001E11 21 00 00 4054 LD HL,LWRD bcopy + 00001E14 CD 00 00 4055 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001E17 E1 4056 POP HL + 00001E18 DD 4E FA 4057 LD C,(IX-6) + 00001E1B DD 46 FB 4058 LD B,(IX-5) + 00001E1E C5 4059 PUSH BC + 00001E1F 06 09 4060 LD B,9 + 00001E21 DD 5E FC 4061 LD E,(IX-4) + 00001E24 DD 56 FD 4062 LD D,(IX-3) + 00001E27 CD 00 00 4063 CALL LWRD ?US_RSH_L02 + 00001E2A 3E 68 4064 LD A,BYTE3 dwrite + 00001E2C 21 68 17 4065 LD HL,LWRD dwrite + 00001E2F C1 4066 POP BC + 00001E30 CD 00 00 4067 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001E33 DD 6E FE 4068 LD L,(IX-2) + 00001E36 DD 66 FF 4069 LD H,(IX-1) + 00001E39 DD 75 FC 4070 LD (IX-4),L + 00001E3C DD 74 FD 4071 LD (IX-3),H + 00001E3F C3 60 1D 4072 JP LWRD ?0360 + 00001E42 4073 ?0359: + 00001E42 C3 00 00 4074 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00001E45 4075 bitmap_find: + 00001E45 CD 00 00 4076 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 00001E48 F4 FF 4077 DEFW 65524 + 00001E4A DD 6E 02 4078 LD L,(IX+2) + 00001E4D DD 66 03 4079 LD H,(IX+3) + 00001E50 DD 75 FA 4080 LD (IX-6),L + 00001E53 DD 74 FB 4081 LD (IX-5),H + 00001E56 4082 ?0366: + 00001E56 DD 4E 04 4083 LD C,(IX+4) + 00001E59 DD 46 05 4084 LD B,(IX+5) + 00001E5C DD 6E FA 4085 LD L,(IX-6) + 00001E5F DD 66 FB 4086 LD H,(IX-5) + 00001E62 A7 4087 AND A + 00001E63 ED 42 4088 SBC HL,BC + 00001E65 D2 91 1F 4089 JP NC,?0365 + 00001E68 4090 ?0367: + 00001E68 DD 4E 04 4091 LD C,(IX+4) + 00001E6B DD 46 05 4092 LD B,(IX+5) + 00001E6E DD 6E FA 4093 LD L,(IX-6) + 00001E71 DD 66 FB 4094 LD H,(IX-5) + 00001E74 3E 02 4095 LD A,2 + 00001E76 84 4096 ADD A,H + 00001E77 67 4097 LD H,A + 00001E78 7D 4098 LD A,L + 00001E79 E6 00 4099 AND 0 + 00001E7B 5F 4100 LD E,A + 00001E7C 7C 4101 LD A,H + 00001E7D E6 FE 4102 AND 254 + 00001E7F 57 4103 LD D,A + 00001E80 3E 00 4104 LD A,BYTE3 int_min + 00001E82 21 00 00 4105 LD HL,LWRD int_min + 00001E85 CD 00 00 4106 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001E88 DD 75 FC 4107 LD (IX-4),L + 00001E8B DD 74 FD 4108 LD (IX-3),H + 00001E8E 06 09 4109 LD B,9 + 00001E90 DD 5E FA 4110 LD E,(IX-6) + 00001E93 DD 56 FB 4111 LD D,(IX-5) + 00001E96 CD 00 00 4112 CALL LWRD ?US_RSH_L02 + 00001E99 3E 29 4113 LD A,BYTE3 daread + 00001E9B 21 29 17 4114 LD HL,LWRD daread + 00001E9E CD 00 00 4115 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001EA1 DD 75 F4 4116 LD (IX-12),L + 00001EA4 DD 74 F5 4117 LD (IX-11),H + 00001EA7 DD 7E FA 4118 LD A,(IX-6) + 00001EAA E6 FF 4119 AND 255 + 00001EAC 4F 4120 LD C,A + 00001EAD DD 7E FB 4121 LD A,(IX-5) + 00001EB0 E6 01 4122 AND 1 + 00001EB2 47 4123 LD B,A + 00001EB3 09 4124 ADD HL,BC + 00001EB4 DD 75 F6 4125 LD (IX-10),L + 00001EB7 DD 74 F7 4126 LD (IX-9),H + 00001EBA DD 6E FA 4127 LD L,(IX-6) + 00001EBD DD 66 FB 4128 LD H,(IX-5) + 00001EC0 DD 75 F8 4129 LD (IX-8),L + 00001EC3 DD 74 F9 4130 LD (IX-7),H + 00001EC6 4131 ?0369: + 00001EC6 DD 4E FC 4132 LD C,(IX-4) + 00001EC9 DD 46 FD 4133 LD B,(IX-3) + 00001ECC DD 6E F8 4134 LD L,(IX-8) + 00001ECF DD 66 F9 4135 LD H,(IX-7) + 00001ED2 A7 4136 AND A + 00001ED3 ED 42 4137 SBC HL,BC + 00001ED5 D2 82 1F 4138 JP NC,?0368 + 00001ED8 4139 ?0370: + 00001ED8 DD 6E F6 4140 LD L,(IX-10) + 00001EDB DD 66 F7 4141 LD H,(IX-9) + 00001EDE 46 4142 LD B,(HL) + 00001EDF 04 4143 INC B + 00001EE0 CA 6F 1F 4144 JP Z,?0373 + 00001EE3 4145 ?0372: + 00001EE3 DD 4E 02 4146 LD C,(IX+2) + 00001EE6 DD 46 03 4147 LD B,(IX+3) + 00001EE9 DD 6E F8 4148 LD L,(IX-8) + 00001EEC DD 66 F9 4149 LD H,(IX-7) + 00001EEF A7 4150 AND A + 00001EF0 ED 42 4151 SBC HL,BC + 00001EF2 29 4152 ADD HL,HL + 00001EF3 29 4153 ADD HL,HL + 00001EF4 29 4154 ADD HL,HL + 00001EF5 DD 75 FE 4155 LD (IX-2),L + 00001EF8 DD 74 FF 4156 LD (IX-1),H + 00001EFB AF 4157 XOR A + 00001EFC DD 77 F8 4158 LD (IX-8),A + 00001EFF DD 77 F9 4159 LD (IX-7),A + 00001F02 4160 ?0375: + 00001F02 01 07 00 4161 LD BC,7 + 00001F05 DD 6E F8 4162 LD L,(IX-8) + 00001F08 DD 66 F9 4163 LD H,(IX-7) + 00001F0B A7 4164 AND A + 00001F0C ED 42 4165 SBC HL,BC + 00001F0E 30 1D 4166 JR NC,?0374 + 00001F10 4167 ?0376: + 00001F10 DD 6E F6 4168 LD L,(IX-10) + 00001F13 DD 66 F7 4169 LD H,(IX-9) + 00001F16 DD 46 F8 4170 LD B,(IX-8) + 00001F19 3E 01 4171 LD A,1 + 00001F1B CD 00 00 4172 CALL LWRD ?C_LSH_L01 + 00001F1E A6 4173 AND (HL) + 00001F1F 20 02 4174 JR NZ,?0379 + 00001F21 4175 ?0378: + 00001F21 18 0A 4176 JR ?0374 + 00001F23 4177 ?0379: + 00001F23 DD 34 F8 4178 INC (IX-8) + 00001F26 20 03 4179 JR NZ,?0401 + 00001F28 DD 34 F9 4180 INC (IX-7) + 00001F2B 4181 ?0401: + 00001F2B 18 D5 4182 JR ?0375 + 00001F2D 4183 ?0374: + 00001F2D 21 0A 00 4184 LD HL,10 + 00001F30 39 4185 ADD HL,SP + 00001F31 7E 4186 LD A,(HL) + 00001F32 DD 86 F8 4187 ADD A,(IX-8) + 00001F35 77 4188 LD (HL),A + 00001F36 23 4189 INC HL + 00001F37 7E 4190 LD A,(HL) + 00001F38 DD 8E F9 4191 ADC A,(IX-7) + 00001F3B 77 4192 LD (HL),A + 00001F3C DD 6E F6 4193 LD L,(IX-10) + 00001F3F DD 66 F7 4194 LD H,(IX-9) + 00001F42 DD 46 F8 4195 LD B,(IX-8) + 00001F45 3E 01 4196 LD A,1 + 00001F47 CD 00 00 4197 CALL LWRD ?C_LSH_L01 + 00001F4A B6 4198 OR (HL) + 00001F4B 77 4199 LD (HL),A + 00001F4C DD 4E F4 4200 LD C,(IX-12) + 00001F4F DD 46 F5 4201 LD B,(IX-11) + 00001F52 C5 4202 PUSH BC + 00001F53 06 09 4203 LD B,9 + 00001F55 DD 5E FA 4204 LD E,(IX-6) + 00001F58 DD 56 FB 4205 LD D,(IX-5) + 00001F5B CD 00 00 4206 CALL LWRD ?US_RSH_L02 + 00001F5E 3E 68 4207 LD A,BYTE3 dwrite + 00001F60 21 68 17 4208 LD HL,LWRD dwrite + 00001F63 C1 4209 POP BC + 00001F64 CD 00 00 4210 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001F67 DD 6E FE 4211 LD L,(IX-2) + 00001F6A DD 66 FF 4212 LD H,(IX-1) + 00001F6D 18 25 4213 JR ?0380 + 00001F6F 4214 ?0373: + 00001F6F DD 34 F6 4215 INC (IX-10) + 00001F72 20 03 4216 JR NZ,?0402 + 00001F74 DD 34 F7 4217 INC (IX-9) + 00001F77 4218 ?0402: + 00001F77 DD 34 F8 4219 INC (IX-8) + 00001F7A 20 03 4220 JR NZ,?0403 + 00001F7C DD 34 F9 4221 INC (IX-7) + 00001F7F 4222 ?0403: + 00001F7F C3 C6 1E 4223 JP LWRD ?0369 + 00001F82 4224 ?0368: + 00001F82 DD 6E FC 4225 LD L,(IX-4) + 00001F85 DD 66 FD 4226 LD H,(IX-3) + 00001F88 DD 75 FA 4227 LD (IX-6),L + 00001F8B DD 74 FB 4228 LD (IX-5),H + 00001F8E C3 56 1E 4229 JP LWRD ?0366 + 00001F91 4230 ?0365: + 00001F91 21 FF FF 4231 LD HL,65535 + 00001F94 4232 ?0380: + 00001F94 C3 00 00 4233 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00001F97 4234 mypanic: + 00001F97 CD 00 00 4235 CALL LWRD ?ENT_PARM_DIRECT_L09 + 00001F9A D5 4236 PUSH DE + 00001F9B 21 67 07 4237 LD HL,?0381 + 00001F9E E5 4238 PUSH HL + 00001F9F 3E 00 4239 LD A,BYTE3 printf + 00001FA1 21 00 00 4240 LD HL,LWRD printf + 00001FA4 CD 00 00 4241 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001FA7 F1 4242 POP AF + 00001FA8 F1 4243 POP AF + 00001FA9 11 00 00 4244 LD DE,stdout + 00001FAC 3E 00 4245 LD A,BYTE3 fflush + 00001FAE 21 00 00 4246 LD HL,LWRD fflush + 00001FB1 CD 00 00 4247 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001FB4 11 01 00 4248 LD DE,1 + 00001FB7 3E 00 4249 LD A,BYTE3 exit + 00001FB9 21 00 00 4250 LD HL,LWRD exit + 00001FBC CD 00 00 4251 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00001FBF C3 00 00 4252 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 4253 RSEG CSTR + 00000000 4254 ?0004: + 00000000 63 61 6E 27 74 20 73 4255 DEFB 'can''t seek: ' + 65 65 6B 3A 20 + 0000000C 00 4256 DEFB 0 + 0000000D 4257 ?0007: + 0000000D 63 61 6E 27 74 20 72 4258 DEFB 'can''t read: ' + 65 61 64 3A 20 + 00000019 00 4259 DEFB 0 + 0000001A 4260 ?0012: + 0000001A 63 61 6E 27 74 20 77 4261 DEFB 'can''t write: ' + 72 69 74 65 3A 20 + 00000027 00 4262 DEFB 0 + 00000028 4263 ?0023: + 00000028 49 6E 6F 64 65 20 25 4264 DEFB 'Inode %d with mode 0%o is not of correct type. Zap? ' + 64 20 77 69 74 68 20 + 6D 6F 64 65 20 30 25 + 6F 20 69 73 20 6E 6F + 74 20 6F 66 20 63 6F + 72 72 65 63 74 20 74 + 79 70 65 2E 20 5A 61 + 70 3F 20 + 0000005C 00 4265 DEFB 0 + 0000005D 4266 ?0039: + 0000005D 49 6E 6F 64 65 20 25 4267 DEFB 'Inode %d singly indirect block %d is out of range with value of' + 64 20 73 69 6E 67 6C + 79 20 69 6E 64 69 72 + 65 63 74 20 62 6C 6F + 63 6B 20 25 64 20 69 + 73 20 6F 75 74 20 6F + 66 20 72 61 6E 67 65 + 20 77 69 74 68 20 76 + 61 6C 75 65 20 6F 66 + 0000009C 20 25 75 2E 20 5A 61 4268 DEFB ' %u. Zap? ' + 70 3F 20 + 000000A6 00 4269 DEFB 0 + 000000A7 4270 ?0046: + 000000A7 49 6E 6F 64 65 20 25 4271 DEFB 'Inode %d singly indirect block %d is past end of file with valu' + 64 20 73 69 6E 67 6C + 79 20 69 6E 64 69 72 + 65 63 74 20 62 6C 6F + 63 6B 20 25 64 20 69 + 73 20 70 61 73 74 20 + 65 6E 64 20 6F 66 20 + 66 69 6C 65 20 77 69 + 74 68 20 76 61 6C 75 + 000000E6 65 20 6F 66 20 25 75 4272 DEFB 'e of %u. Zap? ' + 2E 20 5A 61 70 3F 20 + 000000F4 00 4273 DEFB 0 + 000000F5 4274 ?0062: + 000000F5 49 6E 6F 64 65 20 25 4275 DEFB 'Inode %d doubly indirect block %d is out of range with value of' + 64 20 64 6F 75 62 6C + 79 20 69 6E 64 69 72 + 65 63 74 20 62 6C 6F + 63 6B 20 25 64 20 69 + 73 20 6F 75 74 20 6F + 66 20 72 61 6E 67 65 + 20 77 69 74 68 20 76 + 61 6C 75 65 20 6F 66 + 00000134 20 25 75 2E 20 5A 61 4276 DEFB ' %u. Zap? ' + 70 3F 20 + 0000013E 00 4277 DEFB 0 + 0000013F 4278 ?0076: + 0000013F 49 6E 6F 64 65 20 25 4279 DEFB 'Inode %d block %d is out of range with value of %u. Zap? ' + 64 20 62 6C 6F 63 6B + 20 25 64 20 69 73 20 + 6F 75 74 20 6F 66 20 + 72 61 6E 67 65 20 77 + 69 74 68 20 76 61 6C + 75 65 20 6F 66 20 25 + 75 2E 20 5A 61 70 3F + 20 + 00000178 00 4280 DEFB 0 + 00000179 4281 ?0083: + 00000179 46 72 65 65 20 69 6E 4282 DEFB 'Free inode count in super block is %u should be %u. Fix? ' + 6F 64 65 20 63 6F 75 + 6E 74 20 69 6E 20 73 + 75 70 65 72 20 62 6C + 6F 63 6B 20 69 73 20 + 25 75 20 73 68 6F 75 + 6C 64 20 62 65 20 25 + 75 2E 20 46 69 78 3F + 20 + 000001B2 00 4283 DEFB 0 + 000001B3 4284 ?0086: + 000001B3 20 20 20 20 20 20 20 4285 DEFB ' Rebuild free bitmaps? ' + 20 52 65 62 75 69 6C + 64 20 66 72 65 65 20 + 62 69 74 6D 61 70 73 + 3F 20 + 000001D1 00 4286 DEFB 0 + 000001D2 4287 ?0115: + 000001D2 44 75 72 69 6E 67 20 4288 DEFB 'During free list regeneration s_tfree was changed to %d from %d' + 66 72 65 65 20 6C 69 + 73 74 20 72 65 67 65 + 6E 65 72 61 74 69 6F + 6E 20 73 5F 74 66 72 + 65 65 20 77 61 73 20 + 63 68 61 6E 67 65 64 + 20 74 6F 20 25 64 20 + 66 72 6F 6D 20 25 64 + 00000211 2E 4289 DEFB '.' + 00000212 0A 00 4290 DEFB 10,0 + 00000214 4291 ?0135: + 00000214 49 6E 64 69 72 65 63 4292 DEFB 'Indirect block %d in inode %u value %u multiply allocated. Fix?' + 74 20 62 6C 6F 63 6B + 20 25 64 20 69 6E 20 + 69 6E 6F 64 65 20 25 + 75 20 76 61 6C 75 65 + 20 25 75 20 6D 75 6C + 74 69 70 6C 79 20 61 + 6C 6C 6F 63 61 74 65 + 64 2E 20 46 69 78 3F + 00000253 20 4293 DEFB ' ' + 00000254 00 4294 DEFB 0 + 00000255 4295 ?0140: + 00000255 53 6F 72 72 79 2E 2E 4296 DEFB 'Sorry... No more free blocks.' + 2E 20 4E 6F 20 6D 6F + 72 65 20 66 72 65 65 + 20 62 6C 6F 63 6B 73 + 2E + 00000272 0A 00 4297 DEFB 10,0 + 00000274 4298 ?0151: + 00000274 42 6C 6F 63 6B 20 25 4299 DEFB 'Block %d in inode %u value %u multiply allocated. Fix? ' + 64 20 69 6E 20 69 6E + 6F 64 65 20 25 75 20 + 76 61 6C 75 65 20 25 + 75 20 6D 75 6C 74 69 + 70 6C 79 20 61 6C 6C + 6F 63 61 74 65 64 2E + 20 46 69 78 3F 20 + 000002AB 00 4300 DEFB 0 + 000002AC 4301 ?0162: + 000002AC 44 69 72 65 63 74 6F 4302 DEFB 'Directory inode %d has improper length (%d extra). Fix? ' + 72 79 20 69 6E 6F 64 + 65 20 25 64 20 68 61 + 73 20 69 6D 70 72 6F + 70 65 72 20 6C 65 6E + 67 74 68 20 28 25 64 + 20 65 78 74 72 61 29 + 2E 20 46 69 78 3F 20 + 000002E4 00 4303 DEFB 0 + 000002E5 4304 ?0175: + 000002E5 44 69 72 65 63 74 6F 4305 DEFB 'Directory entry %s%-1.14s has out-of-range inode %u. Zap? ' + 72 79 20 65 6E 74 72 + 79 20 25 73 25 2D 31 + 2E 31 34 73 20 68 61 + 73 20 6F 75 74 2D 6F + 66 2D 72 61 6E 67 65 + 20 69 6E 6F 64 65 20 + 25 75 2E 20 5A 61 70 + 3F 20 + 0000031F 00 4306 DEFB 0 + 00000320 4307 ?0182: + 00000320 44 69 72 65 63 74 6F 4308 DEFB 'Directory entry %s%-1.14s points to bogus inode %u. Zap? ' + 72 79 20 65 6E 74 72 + 79 20 25 73 25 2D 31 + 2E 31 34 73 20 70 6F + 69 6E 74 73 20 74 6F + 20 62 6F 67 75 73 20 + 69 6E 6F 64 65 20 25 + 75 2E 20 5A 61 70 3F + 20 + 00000359 00 4309 DEFB 0 + 0000035A 4310 ?0187: + 0000035A 4D 6F 72 65 20 74 68 4311 DEFB 'More than 254 links to inode %u.' + 61 6E 20 32 35 34 20 + 6C 69 6E 6B 73 20 74 + 6F 20 69 6E 6F 64 65 + 20 25 75 2E + 0000037A 0A 4312 DEFB 10 + 0000037B 4E 6F 74 20 65 6E 6F 4313 DEFB 'Not enough memory. FSCK aborted.' + 75 67 68 20 6D 65 6D + 6F 72 79 2E 20 46 53 + 43 4B 20 61 62 6F 72 + 74 65 64 2E + 0000039B 0A 00 4314 DEFB 10,0 + 0000039D 4315 ?0195: + 0000039D 44 69 72 65 63 74 6F 4316 DEFB 'Directory entry %s%-1.14s contains slash. Fix? ' + 72 79 20 65 6E 74 72 + 79 20 25 73 25 2D 31 + 2E 31 34 73 20 63 6F + 6E 74 61 69 6E 73 20 + 73 6C 61 73 68 2E 20 + 46 69 78 3F 20 + 000003CC 00 4317 DEFB 0 + 000003CD 4318 ?0200: + 000003CD 2E 4319 DEFB '.' + 000003CE 00 4320 DEFB 0 + 000003CF 4321 ?0203: + 000003CF 27 2E 27 20 65 6E 74 4322 DEFB '''.'' entry %s%-1.*s points to wrong place. Fix? ' + 72 79 20 25 73 25 2D + 31 2E 2A 73 20 70 6F + 69 6E 74 73 20 74 6F + 20 77 72 6F 6E 67 20 + 70 6C 61 63 65 2E 20 + 46 69 78 3F 20 + 000003FE 00 4323 DEFB 0 + 000003FF 4324 ?0208: + 000003FF 2E 2E 4325 DEFB '..' + 00000401 00 4326 DEFB 0 + 00000402 4327 ?0211: + 00000402 27 2E 2E 27 20 65 6E 4328 DEFB '''..'' entry %s%-1.*s points to wrong place. Fix? ' + 74 72 79 20 25 73 25 + 2D 31 2E 2A 73 20 70 + 6F 69 6E 74 73 20 74 + 6F 20 77 72 6F 6E 67 + 20 70 6C 61 63 65 2E + 20 46 69 78 3F 20 + 00000432 00 4329 DEFB 0 + 00000433 4330 ?0218: + 00000433 2F 4331 DEFB '/' + 00000434 00 4332 DEFB 0 + 00000435 4333 ?0222: + 00000435 49 6E 63 6F 6E 73 69 4334 DEFB 'Inconsistent depth' + 73 74 65 6E 74 20 64 + 65 70 74 68 + 00000447 00 4335 DEFB 0 + 00000448 4336 ?0230: + 00000448 6C 5F 66 25 64 4337 DEFB 'l_f%d' + 0000044D 00 4338 DEFB 0 + 0000044E 4339 ?0231: + 0000044E 53 6F 72 72 79 2E 2E 4340 DEFB 'Sorry... No empty slots in root directory.' + 2E 20 4E 6F 20 65 6D + 70 74 79 20 73 6C 6F + 74 73 20 69 6E 20 72 + 6F 6F 74 20 64 69 72 + 65 63 74 6F 72 79 2E + 00000478 0A 00 4341 DEFB 10,0 + 0000047A 4342 ?0240: + 0000047A 49 6E 63 6F 6E 73 69 4343 DEFB 'Inconsistent link count' + 73 74 65 6E 74 20 6C + 69 6E 6B 20 63 6F 75 + 6E 74 + 00000491 00 4344 DEFB 0 + 00000492 4345 ?0250: + 00000492 49 6E 6F 64 65 20 25 4346 DEFB 'Inode %d has link count %d should be %d. Fix? ' + 64 20 68 61 73 20 6C + 69 6E 6B 20 63 6F 75 + 6E 74 20 25 64 20 73 + 68 6F 75 6C 64 20 62 + 65 20 25 64 2E 20 46 + 69 78 3F 20 + 000004C0 00 4347 DEFB 0 + 000004C1 4348 ?0259: + 000004C1 55 73 65 6C 65 73 73 4349 DEFB 'Useless inode %d with mode 0%o has become detached. Link count ' + 20 69 6E 6F 64 65 20 + 25 64 20 77 69 74 68 + 20 6D 6F 64 65 20 30 + 25 6F 20 68 61 73 20 + 62 65 63 6F 6D 65 20 + 64 65 74 61 63 68 65 + 64 2E 20 4C 69 6E 6B + 20 63 6F 75 6E 74 20 + 00000500 69 73 20 25 64 2E 20 4350 DEFB 'is %d. Zap? ' + 5A 61 70 3F 20 + 0000050C 00 4351 DEFB 0 + 0000050D 4352 ?0263: + 0000050D 49 6E 6F 64 65 20 25 4353 DEFB 'Inode %d has become detached. Link count is %d. Fix? ' + 64 20 68 61 73 20 62 + 65 63 6F 6D 65 20 64 + 65 74 61 63 68 65 64 + 2E 20 4C 69 6E 6B 20 + 63 6F 75 6E 74 20 69 + 73 20 25 64 2E 20 46 + 69 78 3F 20 + 00000542 00 4354 DEFB 0 + 00000543 4355 ?0282: + 00000543 4D 69 73 73 69 6E 67 4356 DEFB 'Missing indirect block' + 20 69 6E 64 69 72 65 + 63 74 20 62 6C 6F 63 + 6B + 00000559 00 4357 DEFB 0 + 0000055A 4358 ?0294: + 0000055A 46 72 65 65 20 6C 69 4359 DEFB 'Free list is corrupt. Did you rebuild it?' + 73 74 20 69 73 20 63 + 6F 72 72 75 70 74 2E + 20 20 44 69 64 20 79 + 6F 75 20 72 65 62 75 + 69 6C 64 20 69 74 3F + 00000584 0A 00 4360 DEFB 10,0 + 00000586 4361 ?0299: + 00000586 52 65 61 64 20 6F 66 4362 DEFB 'Read of block %d failed.' + 20 62 6C 6F 63 6B 20 + 25 64 20 66 61 69 6C + 65 64 2E + 0000059E 0A 00 4363 DEFB 10,0 + 000005A0 4364 ?0302: + 000005A0 57 72 69 74 65 20 6F 4365 DEFB 'Write of block %d failed.' + 66 20 62 6C 6F 63 6B + 20 25 64 20 66 61 69 + 6C 65 64 2E + 000005B9 0A 00 4366 DEFB 10,0 + 000005BB 4367 ?0305: + 000005BB 4D 69 73 73 69 6E 67 4368 DEFB 'Missing block in directory' + 20 62 6C 6F 63 6B 20 + 69 6E 20 64 69 72 65 + 63 74 6F 72 79 + 000005D5 00 4369 DEFB 0 + 000005D6 4370 ?0310: + 000005D6 59 4371 DEFB 'Y' + 000005D7 0A 00 4372 DEFB 10,0 + 000005D9 4373 ?0327: + 000005D9 49 6C 6C 65 67 61 6C 4374 DEFB 'Illegal switch %s' + 20 73 77 69 74 63 68 + 20 25 73 + 000005EA 0A 00 4375 DEFB 10,0 + 000005EC 4376 ?0330: + 000005EC 75 73 61 67 65 3A 20 4377 DEFB 'usage: fsck [-y] device' + 66 73 63 6B 20 5B 2D + 79 5D 20 64 65 76 69 + 63 65 + 00000603 0A 00 4378 DEFB 10,0 + 00000605 4379 ?0333: + 00000605 63 61 6E 27 74 20 6F 4380 DEFB 'can''t open: ' + 70 65 6E 3A 20 + 00000611 00 4381 DEFB 0 + 00000612 4382 ?0336: + 00000612 44 65 76 69 63 65 20 4383 DEFB 'Device %x has invalid magic number %d. Fix? ' + 25 78 20 68 61 73 20 + 69 6E 76 61 6C 69 64 + 20 6D 61 67 69 63 20 + 6E 75 6D 62 65 72 20 + 25 64 2E 20 46 69 78 + 3F 20 + 0000063E 00 4384 DEFB 0 + 0000063F 4385 ?0339: + 0000063F 0A 4386 DEFB 10 + 00000640 43 68 65 63 6B 69 6E 4387 DEFB 'Checking %s with fsize %u, isize %u, rsize %u. Confirm? ' + 67 20 25 73 20 77 69 + 74 68 20 66 73 69 7A + 65 20 25 75 2C 20 69 + 73 69 7A 65 20 25 75 + 2C 20 72 73 69 7A 65 + 20 25 75 2E 20 43 6F + 6E 66 69 72 6D 3F 20 + 00000678 00 4388 DEFB 0 + 00000679 4389 ?0344: + 00000679 69 6E 6F 64 65 20 62 4390 DEFB 'inode bitmap' + 69 74 6D 61 70 + 00000685 00 4391 DEFB 0 + 00000686 4392 ?0348: + 00000686 62 6C 6F 63 6B 20 62 4393 DEFB 'block bitmap' + 69 74 6D 61 70 + 00000692 00 4394 DEFB 0 + 00000693 4395 ?0351: + 00000693 6C 69 6E 6B 20 63 6F 4396 DEFB 'link counts' + 75 6E 74 73 + 0000069E 00 4397 DEFB 0 + 0000069F 4398 ?0352: + 0000069F 4E 6F 74 20 65 6E 6F 4399 DEFB 'Not enough memory for %s.' + 75 67 68 20 6D 65 6D + 6F 72 79 20 66 6F 72 + 20 25 73 2E + 000006B8 0A 00 4400 DEFB 10,0 + 000006BA 4401 ?0353: + 000006BA 0A 4402 DEFB 10 + 000006BB 50 61 73 73 20 31 3A 4403 DEFB 'Pass 1: Checking inodes.' + 20 43 68 65 63 6B 69 + 6E 67 20 69 6E 6F 64 + 65 73 2E + 000006D3 0A 00 4404 DEFB 10,0 + 000006D5 4405 ?0354: + 000006D5 50 61 73 73 20 32 3A 4406 DEFB 'Pass 2: Rebuilding free bitmaps.' + 20 52 65 62 75 69 6C + 64 69 6E 67 20 66 72 + 65 65 20 62 69 74 6D + 61 70 73 2E + 000006F5 0A 00 4407 DEFB 10,0 + 000006F7 4408 ?0355: + 000006F7 50 61 73 73 20 33 3A 4409 DEFB 'Pass 3: Checking block allocation.' + 20 43 68 65 63 6B 69 + 6E 67 20 62 6C 6F 63 + 6B 20 61 6C 6C 6F 63 + 61 74 69 6F 6E 2E + 00000719 0A 00 4410 DEFB 10,0 + 0000071B 4411 ?0356: + 0000071B 50 61 73 73 20 34 3A 4412 DEFB 'Pass 4: Checking directory entries.' + 20 43 68 65 63 6B 69 + 6E 67 20 64 69 72 65 + 63 74 6F 72 79 20 65 + 6E 74 72 69 65 73 2E + 0000073E 0A 00 4413 DEFB 10,0 + 00000740 4414 ?0357: + 00000740 50 61 73 73 20 35 3A 4415 DEFB 'Pass 5: Checking link counts.' + 20 43 68 65 63 6B 69 + 6E 67 20 6C 69 6E 6B + 20 63 6F 75 6E 74 73 + 2E + 0000075D 0A 00 4416 DEFB 10,0 + 0000075F 4417 ?0358: + 0000075F 44 6F 6E 65 2E 4418 DEFB 'Done.' + 00000764 0A 0A 00 4419 DEFB 10,10,0 + 00000767 4420 ?0381: + 00000767 50 41 4E 49 43 3A 20 4421 DEFB 'PANIC: %s' + 25 73 + 00000770 00 4422 DEFB 0 + 4423 RSEG UDATA0 + 00000000 4424 device_handle: + 00000000 4425 DEFS 2 + 00000002 4426 device_name: + 00000002 4427 DEFS 512 + 00000202 4428 zeroed: + 00000202 4429 DEFS 512 + 00000402 4430 depth: + 00000402 4431 DEFS 2 + 00000404 4432 dev: + 00000404 4433 DEFS 2 + 00000406 4434 filsys: + 00000406 4435 DEFS 30 + 00000424 4436 ninodes: + 00000424 4437 DEFS 2 + 00000426 4438 finode: + 00000426 4439 DEFS 2 + 00000428 4440 bitmap_inode: + 00000428 4441 DEFS 4 + 0000042C 4442 bitmap_block: + 0000042C 4443 DEFS 4 + 00000430 4444 bitmap_immov: + 00000430 4445 DEFS 4 + 00000434 4446 inode_bitmap: + 00000434 4447 DEFS 2 + 00000436 4448 block_bitmap: + 00000436 4449 DEFS 2 + 00000438 4450 link_count: + 00000438 4451 DEFS 2 + 0000043A 4452 ?0296: + 0000043A 4453 DEFS 512 + 4454 RSEG IDATA0 + 00000000 4455 _yes: + 00000000 4456 DEFS 2 + 4457 RSEG CDATA0 + 00000000 00 00 4458 DEFW 0 + 00000002 4459 END + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1. +Hexadecimal [32-Bits] +fsck(17) +Symbol Table + + .__.ABS. = 00000000 G | 1 ?0002 00000026 R + 1 ?0003 00000054 R | 2 ?0004 00000000 R + 1 ?0005 00000071 R | 1 ?0006 0000009F R + 2 ?0007 0000000D R | 1 ?0008 000000CB R + 1 ?0009 000000F9 R | 1 ?0010 00000116 R + 1 ?0011 00000144 R | 2 ?0012 0000001A R + 1 ?0013 000005DD R | 1 ?0014 0000015E R + 1 ?0015 0000016E R | 1 ?0016 00000199 R + 1 ?0017 0000019C R | 1 ?0018 000005D2 R + 1 ?0019 000001E7 R | 1 ?0020 00000235 R + 1 ?0021 000001E7 R | 1 ?0022 000001E7 R + 2 ?0023 00000028 R | 1 ?0024 00000210 R + 1 ?0025 00000235 R | 1 ?0026 00000273 R + 1 ?0027 000005D2 R | 1 ?0028 00000273 R + 1 ?0029 00000273 R | 1 ?0030 000003E3 R + 1 ?0031 0000027B R | 1 ?0032 0000028A R + 1 ?0033 000002CB R | 1 ?0034 0000032F R + 1 ?0035 000002CB R | 1 ?0036 000002CB R + 1 ?0037 000002CB R | 1 ?0038 000002CB R + 2 ?0039 0000005D R | 1 ?0040 000002FC R + 1 ?0041 0000032F R | 1 ?0042 00000350 R + 1 ?0043 000003B4 R | 1 ?0044 00000350 R + 1 ?0045 00000350 R | 2 ?0046 000000A7 R + 1 ?0047 00000381 R | 1 ?0048 000003B4 R + 1 ?0049 000003BC R | 1 ?0050 000003D8 R + 1 ?0051 000003EE R | 1 ?0052 000004D9 R + 1 ?0053 000004D9 R | 1 ?0054 00000409 R + 1 ?0055 00000418 R | 1 ?0056 00000452 R + 1 ?0057 000004AA R | 1 ?0058 00000452 R + 1 ?0059 00000452 R | 1 ?0060 00000452 R + 1 ?0061 00000452 R | 2 ?0062 000000F5 R + 1 ?0063 00000483 R | 1 ?0064 000004AA R + 1 ?0065 000004B2 R | 1 ?0066 000004CE R + 1 ?0067 000005D2 R | 1 ?0068 000004F7 R + 1 ?0069 00000509 R | 1 ?0070 00000545 R + 1 ?0071 000005A3 R | 1 ?0072 00000545 R + 1 ?0073 00000545 R | 1 ?0074 00000545 R + 1 ?0075 00000545 R | 2 ?0076 0000013F R + 1 ?0077 00000576 R | 1 ?0078 000005A3 R + 1 ?0079 000005AB R | 1 ?0080 000005C7 R + 1 ?0081 000005FC R | 1 ?0082 0000063C R + 2 ?0083 00000179 R | 1 ?0084 00000625 R + 1 ?0085 0000063C R | 2 ?0086 000001B3 R + 1 ?0087 0000066F R | 1 ?0088 00000672 R + 1 ?0089 000006CF R | 1 ?0090 00000694 R + 1 ?0091 000006A9 R | 1 ?0093 00000727 R + 1 ?0094 000006F0 R | 1 ?0095 00000701 R + 1 ?0097 00000778 R | 1 ?0098 0000073B R + 1 ?0099 0000074A R | 1 ?0101 00000767 R + 1 ?0102 0000076E R | 1 ?0103 000007F8 R + 1 ?0104 000007B4 R | 1 ?0105 000007C3 R + 1 ?0107 000007D2 R | 1 ?0108 000007EE R + 1 ?0109 00000853 R | 1 ?0110 0000081C R + 1 ?0111 0000082D R | 1 ?0113 000008BB R + 1 ?0114 000008E3 R | 2 ?0115 000001D2 R + 1 ?0116 000008E3 R | 1 ?0117 0000092A R + 1 ?0118 000008F4 R | 1 ?0119 00000903 R + 1 ?0120 00000C10 R | 1 ?0121 00000932 R + 1 ?0122 00000942 R | 1 ?0123 0000098C R + 1 ?0124 0000098F R | 1 ?0125 0000098C R + 1 ?0126 0000098C R | 1 ?0127 00000C05 R + 1 ?0128 00000ABF R | 1 ?0129 00000997 R + 1 ?0130 000009A6 R | 1 ?0131 000009C9 R + 1 ?0132 00000AB4 R | 1 ?0133 000009E7 R + 1 ?0134 00000A98 R | 2 ?0135 00000214 R + 1 ?0136 00000A18 R | 1 ?0137 00000A96 R + 1 ?0138 00000A2D R | 1 ?0139 00000A47 R + 2 ?0140 00000255 R | 1 ?0141 00000A96 R + 1 ?0142 00000AB4 R | 1 ?0143 00000C05 R + 1 ?0144 00000ADD R | 1 ?0145 00000AEF R + 1 ?0146 00000B0D R | 1 ?0147 00000B10 R + 1 ?0148 00000BFA R | 1 ?0149 00000B2E R + 1 ?0150 00000BDE R | 2 ?0151 00000274 R + 1 ?0152 00000B5F R | 1 ?0153 00000BDC R + 1 ?0154 00000B74 R | 1 ?0155 00000B8E R + 1 ?0156 00000BDC R | 1 ?0157 00000BFA R + 1 ?0158 00000C3F R | 1 ?0159 00000C42 R + 1 ?0160 00000C6F R | 1 ?0161 00000CBA R + 2 ?0162 000002AC R | 1 ?0163 00000C99 R + 1 ?0164 00000CBA R | 1 ?0165 000010A4 R + 1 ?0166 00000CE3 R | 1 ?0167 00000CF8 R + 1 ?0168 00000D1F R | 1 ?0169 00000D22 R + 1 ?0170 00001098 R | 1 ?0171 00000D47 R + 1 ?0172 00000DA7 R | 1 ?0173 00000D47 R + 1 ?0174 00000D47 R | 2 ?0175 000002E5 R + 1 ?0176 00000D7B R | 1 ?0177 00000DA7 R + 1 ?0178 00000DC4 R | 1 ?0179 00000E24 R + 1 ?0180 00000DC4 R | 1 ?0181 00000DC4 R + 2 ?0182 00000320 R | 1 ?0183 00000DF8 R + 1 ?0184 00000E24 R | 1 ?0185 00000E37 R + 1 ?0186 00000E5D R | 2 ?0187 0000035A R + 1 ?0188 00000F09 R | 1 ?0189 00000E65 R + 1 ?0190 00000E8C R | 1 ?0191 00000E8C R + 1 ?0192 00000E8C R | 1 ?0193 00000EA3 R + 1 ?0194 00000EFD R | 2 ?0195 0000039D R + 1 ?0196 00000ECE R | 1 ?0197 00000EFD R + 1 ?0198 00000F34 R | 1 ?0199 00000F8C R + 2 ?0200 000003CD R | 1 ?0201 00000F34 R + 1 ?0202 00000F34 R | 2 ?0203 000003CF R + 1 ?0204 00000F64 R | 1 ?0205 00000F8C R + 1 ?0206 00000FB7 R | 1 ?0207 0000100F R + 2 ?0208 000003FF R | 1 ?0209 00000FB7 R + 1 ?0210 00000FB7 R | 2 ?0211 00000402 R + 1 ?0212 00000FE7 R | 1 ?0213 0000100F R + 1 ?0214 00001040 R | 1 ?0215 00001098 R + 1 ?0216 00001040 R | 1 ?0217 00001040 R + 2 ?0218 00000433 R | 1 ?0219 000010AB R + 1 ?0220 000010D6 R | 1 ?0221 000010E1 R + 2 ?0222 00000435 R | 1 ?0223 000011AD R + 1 ?0224 00001120 R | 1 ?0225 00001131 R + 1 ?0226 0000115B R | 1 ?0227 000011A2 R + 1 ?0228 0000115B R | 1 ?0229 0000115B R + 2 ?0230 00000448 R | 2 ?0231 0000044E R + 1 ?0232 000011C5 R | 1 ?0233 00001402 R + 1 ?0234 000011D5 R | 1 ?0235 000011E5 R + 1 ?0236 00001203 R | 1 ?0237 00001220 R + 1 ?0238 00001212 R | 1 ?0239 0000121D R + 2 ?0240 0000047A R | 1 ?0241 000013F7 R + 1 ?0242 00001239 R | 1 ?0243 00001244 R + 1 ?0244 00001239 R | 1 ?0245 00001239 R + 1 ?0246 0000126C R | 1 ?0247 000012CD R + 1 ?0248 0000126C R | 1 ?0249 0000126C R + 2 ?0250 00000492 R | 1 ?0251 000012A5 R + 1 ?0252 000012CD R | 1 ?0253 000012DD R + 1 ?0254 000013F7 R | 1 ?0255 00001314 R + 1 ?0256 000013A4 R | 1 ?0257 00001314 R + 1 ?0258 00001314 R | 2 ?0259 000004C1 R + 1 ?0260 00001345 R | 1 ?0261 000013A2 R + 1 ?0262 000013F7 R | 2 ?0263 0000050D R + 1 ?0264 000013CD R | 1 ?0265 000013F7 R + 1 ?0266 00001414 R | 1 ?0267 0000142D R + 1 ?0268 0000143B R | 1 ?0269 00001483 R + 1 ?0270 00001453 R | 1 ?0271 00001459 R + 1 ?0272 0000149B R | 1 ?0273 000014A0 R + 1 ?0274 000014FE R | 1 ?0275 00001510 R + 1 ?0276 0000152E R | 1 ?0277 00001654 R + 1 ?0278 0000153C R | 1 ?0279 000015A3 R + 1 ?0280 00001554 R | 1 ?0281 0000155F R + 2 ?0282 00000543 R | 1 ?0283 00001654 R + 1 ?0284 000015BB R | 1 ?0285 000015C6 R + 1 ?0286 00001606 R | 1 ?0287 00001611 R + 1 ?0288 00001699 R | 1 ?0289 0000169F R + 1 ?0290 000016D7 R | 1 ?0291 000016E9 R + 1 ?0292 000016D7 R | 1 ?0293 000016D7 R + 2 ?0294 0000055A R | 1 ?0295 00001726 R + 3 ?0296 0000043A R | 1 ?0297 00001745 R + 1 ?0298 00001762 R | 2 ?0299 00000586 R + 1 ?0300 00001781 R | 1 ?0301 0000179E R + 2 ?0302 000005A0 R | 1 ?0303 00001886 R + 1 ?0304 00001891 R | 2 ?0305 000005BB R + 1 ?0306 000018FA R | 1 ?0307 00001905 R + 1 ?0308 00001971 R | 1 ?0309 00001980 R + 2 ?0310 000005D6 R | 1 ?0311 000019AD R + 1 ?0312 000019A8 R | 1 ?0313 000019AD R + 1 ?0314 000019A8 R | 1 ?0315 000019A8 R + 1 ?0316 000019A8 R | 1 ?0317 000019A8 R + 1 ?0318 000019B0 R | 1 ?0319 000019FA R + 1 ?0320 00001A53 R | 1 ?0321 000019FA R + 1 ?0322 000019FA R | 1 ?0323 00001A12 R + 1 ?0324 00001A37 R | 1 ?0325 00001A12 R + 1 ?0326 00001A12 R | 2 ?0327 000005D9 R + 1 ?0328 00001A5D R | 1 ?0329 00001A7A R + 2 ?0330 000005EC R | 1 ?0331 00001AAF R + 1 ?0332 00001ADD R | 2 ?0333 00000605 R + 1 ?0334 00001B0A R | 1 ?0335 00001B68 R + 2 ?0336 00000612 R | 1 ?0337 00001B30 R + 1 ?0338 00001B3B R | 2 ?0339 0000063F R + 1 ?0340 00001B9F R | 1 ?0341 00001BAA R + 1 ?0342 00001BC4 R | 1 ?0343 00001BCF R + 2 ?0344 00000679 R | 1 ?0345 00001C50 R + 1 ?0346 00001C03 R | 1 ?0347 00001C0D R + 2 ?0348 00000686 R | 1 ?0349 00001C48 R + 1 ?0350 00001C75 R | 2 ?0351 00000693 R + 2 ?0352 0000069F R | 2 ?0353 000006BA R + 2 ?0354 000006D5 R | 2 ?0355 000006F7 R + 2 ?0356 0000071B R | 2 ?0357 00000740 R + 2 ?0358 0000075F R | 1 ?0359 00001E42 R + 1 ?0360 00001D60 R | 1 ?0361 00001D7D R + 1 ?0362 00001DB4 R | 1 ?0363 00001DCF R + 1 ?0364 00001DD7 R | 1 ?0365 00001F91 R + 1 ?0366 00001E56 R | 1 ?0367 00001E68 R + 1 ?0368 00001F82 R | 1 ?0369 00001EC6 R + 1 ?0370 00001ED8 R | 1 ?0372 00001EE3 R + 1 ?0373 00001F6F R | 1 ?0374 00001F2D R + 1 ?0375 00001F02 R | 1 ?0376 00001F10 R + 1 ?0378 00001F21 R | 1 ?0379 00001F23 R + 1 ?0380 00001F94 R | 2 ?0381 00000767 R + 1 ?0382 0000024A R | 1 ?0383 000003E0 R + 1 ?0384 000004D6 R | 1 ?0385 000005CF R + 1 ?0386 000005DA R | 1 ?0387 000006CD R + 1 ?0388 00000725 R | 1 ?0389 00000776 R + 1 ?0390 000007F6 R | 1 ?0391 00000851 R + 1 ?0392 00000928 R | 1 ?0393 00000ABC R + 1 ?0394 00000C02 R | 1 ?0395 00000C0D R + 1 ?0396 00000F06 R | 1 ?0397 000010A1 R + 1 ?0398 000011AA R | 1 ?0399 000013FF R + 1 ?0400 00001A46 R | 1 ?0401 00001F2B R + 1 ?0402 00001F77 R | 1 ?0403 00001F7F R + ?BANK_CALL_DIR ******** GX | ?BANK_FAST_LEA ******** GX + ?BANK_LEAVE_DI ******** GX | ?CL64180B_4_06 ******** GX + ?C_LSH_L01 ******** GX | ?ENT_AUTO_DIRE ******** GX + ?ENT_PARM_DIRE ******** GX | ?L_ANDASG_L03 ******** GX + ?L_LSH_L03 ******** GX | ?SL_CMP_L03 ******** GX + ?SL_DIV_L03 ******** GX | ?SL_RSH_L03 ******** GX + ?SS_CMP_L02 ******** GX | ?S_LSH_L02 ******** GX + ?US_RSH_L02 ******** GX | 1 _blk_alloc 00001657 GR + _read ******** GX | _write ******** GX + 4 _yes 00000000 GR | abort ******** GX + bcopy ******** GX | bfill ******** GX + 3 bitmap_block 0000042C GR | 1 bitmap_dump 00001D4F GR + 1 bitmap_find 00001E45 GR | 3 bitmap_immov 00000430 GR + 3 bitmap_inode 00000428 GR | 3 block_bitmap 00000436 GR + 1 ckdir 00000C13 GR | close ******** GX + 1 da_read 00000000 GR | 1 da_write 000000A5 GR + 1 daread 00001729 GR | 3 depth 00000402 GR + 3 dev 00000404 GR | 3 device_handle 00000000 GR + 3 device_name 00000002 GR | 1 dirread 0000185C GR + 1 dirwrite 000018D0 GR | 1 dwrite 00001768 GR + exit ******** GX | fflush ******** GX + fgets ******** GX | 3 filsys 00000406 GR + 3 finode 00000426 GR | fprintf ******** GX + 1 getblkno 00001405 GR | 3 inode_bitmap 00000434 GR + int_min ******** GX | 1 iread 000017A1 GR + 1 iwrite 000017EF GR | 3 link_count 00000438 GR + lseek ******** GX | 1 main 000019B3 GR + malloc ******** GX | 1 mkentry 000010E6 GR + 1 mypanic 00001F97 GR | 3 ninodes 00000424 GR + open ******** GX | 1 pass1 0000014A GR + 1 pass2 0000063F GR | 1 pass3 000008E6 GR + 1 pass4 000010AE GR | 1 pass5 000011C8 GR + perror ******** GX | printf ******** GX + 1 setblkno 00001501 GR | sprintf ******** GX + stderr ******** GX | stdin ******** GX + stdout ******** GX | strcat ******** GX + strcmp ******** GX | strcpy ******** GX + 1 yes 0000195A GR | 3 zeroed 00000202 GR + + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2. +Hexadecimal [32-Bits] +fsck(17) +Area Table + + 0 _DEFAULT size 0 flags 0 + 1 CODE size 1FC2 flags 0 + 2 CSTR size 771 flags 0 + 3 UDATA0 size 63A flags 0 + 4 IDATA0 size 2 flags 0 + 5 CDATA0 size 2 flags 0 diff --git a/src/fsutil/fsck.map b/src/fsutil/fsck.map index 851ad610..11243bfe 100644 --- a/src/fsutil/fsck.map +++ b/src/fsutil/fsck.map @@ -6,18 +6,15 @@ Area Addr Size Decimal Bytes (Attributes) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ - 00000000 s__DEFAUL | 00000000 l_CCSTR | 00000000 l_ECSTR - 00000000 l_CONST | 00000000 .__.ABS. | 00000000 ?CL64180L - 00000000 ?CL64180B | 00000014 e__DEFAUL | 00000014 l__DEFAUL - 0000016C l_CDATA0 | 0000016C l_IDATA0 | 00000377 l_RCODE - 000007A9 l_CSTR | 000008CD l_UDATA0 | 00001000 l_CSTACK - 00004000 s_CODE | 00008100 s_RCODE | 00008477 s_CSTR - 00008477 e_RCODE | 00008477 e_CONST | 00008477 s_CONST - 00008C20 e_CSTR | 00008C20 s_IDATA0 | 00008C20 s_CDATA0 - 00008D8C s_UDATA0 | 00008D8C e_CCSTR | 00008D8C e_ECSTR - 00008D8C s_CCSTR | 00008D8C e_CDATA0 | 00008D8C s_ECSTR - 00008D8C e_IDATA0 | 00009659 e_UDATA0 | 00009659 s_CSTACK - 0000A659 e_CSTACK | 0000C015 l_CODE | 00010015 e_CODE + 00000000 00000000 s__DEFAUL | 00000000 00000000 .__.ABS. | 00000000 00000000 ?CL64180L + 00000000 00000000 ?CL64180B | 00000014 00000014 e__DEFAUL | 00004000 00004000 s_CODE + 00008100 00008100 s_RCODE | 00008477 00008477 s_CSTR | 00008477 00008477 e_RCODE + 00008477 00008477 e_CONST | 00008477 00008477 s_CONST | 00008C20 00008C20 e_CSTR + 00008C20 00008C20 s_IDATA0 | 00008C20 00008C20 s_CDATA0 | 00008D8C 00008D8C s_UDATA0 + 00008D8C 00008D8C e_CCSTR | 00008D8C 00008D8C e_ECSTR | 00008D8C 00008D8C s_CCSTR + 00008D8C 00008D8C e_CDATA0 | 00008D8C 00008D8C s_ECSTR | 00008D8C 00008D8C e_IDATA0 + 00009659 00009659 e_UDATA0 | 00009659 00009659 s_CSTACK | 0000A659 0000A659 e_CSTACK + 00010024 00010024 e_CODE Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) @@ -34,18 +31,18 @@ RCODE 00008100 00000377 = 887. bytes (REL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ - 00008100 __init | 0000811F ?US_RSH_L | 00008129 ?S_LSH_L0 - 00008132 ?BANK_LEA | 00008138 ?BANK_FAS | 0000813D ?ENT_PARM - 00008149 ?BANK_CAL | 00008156 ?L_ANDASG | 0000816F ?SL_CMP_L - 000081A0 ?ENT_AUTO | 000081B4 ?SL_DIV_L | 000081E4 ?SS_CMP_L - 000081F6 ?L_INC_L0 | 000081FE ?US_MOD_L | 00008207 ?C_LSH_L0 - 0000820E ?US_DIV_L | 0000821C ?SL_RSH_L | 0000822A ?L_DIVMOD - 00008282 ?BANK_LEA | 0000828E ?L_LSH_L0 | 000082A6 ?S_DIVMOD - 000082BC ?S_MULASG | 000082C6 ?L_NOT_L0 | 000082D5 ?S_MUL_L0 - 000082EB ?C_V_SWIT | 000082FD ?LEAVE_DI | 00008304 ?L_FIND_S - 00008348 ?UL_DIVAS | 00008358 ?V_SWITCH | 00008362 ?UL_MOD_L - 00008387 ?UL_DIV_L | 000083AF ?L_NEG_L0 | 000083C1 ?L_END_MU - 000083CA ?L_MULASG | 000083DA ?L_MUL_L0 | 0000845E ?L_ADDASG + 00000014 00008100 __init | 00000033 0000811F ?US_RSH_L | 0000003D 00008129 ?S_LSH_L0 + 00000046 00008132 ?BANK_LEA | 0000004C 00008138 ?BANK_FAS | 00000051 0000813D ?ENT_PARM + 0000005D 00008149 ?BANK_CAL | 0000006A 00008156 ?L_ANDASG | 00000083 0000816F ?SL_CMP_L + 000000B4 000081A0 ?ENT_AUTO | 000000C8 000081B4 ?SL_DIV_L | 000000F8 000081E4 ?SS_CMP_L + 0000010A 000081F6 ?L_INC_L0 | 00000112 000081FE ?US_MOD_L | 0000011B 00008207 ?C_LSH_L0 + 00000122 0000820E ?US_DIV_L | 00000130 0000821C ?SL_RSH_L | 0000013E 0000822A ?L_DIVMOD + 00000196 00008282 ?BANK_LEA | 000001A2 0000828E ?L_LSH_L0 | 000001BA 000082A6 ?S_DIVMOD + 000001D0 000082BC ?S_MULASG | 000001DA 000082C6 ?L_NOT_L0 | 000001E9 000082D5 ?S_MUL_L0 + 000001FF 000082EB ?C_V_SWIT | 00000211 000082FD ?LEAVE_DI | 00000218 00008304 ?L_FIND_S + 0000025C 00008348 ?UL_DIVAS | 0000026C 00008358 ?V_SWITCH | 00000276 00008362 ?UL_MOD_L + 0000029B 00008387 ?UL_DIV_L | 000002C3 000083AF ?L_NEG_L0 | 000002D5 000083C1 ?L_END_MU + 000002DE 000083CA ?L_MULASG | 000002EE 000083DA ?L_MUL_L0 | 00000372 0000845E ?L_ADDASG Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) @@ -70,9 +67,9 @@ IDATA0 00008C20 0000016C = 364. bytes (NUL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ - 00008C20 _yes | 00008C3A __IO_list | 00008C3C stdin - 00008C54 stdout | 00008C6C stderr | 00008C86 __sys_err - 00008C88 __sys_ner | 00008C8A __on_exit | 00008C8C __ctype + 00000B34 00008C20 _yes | 00000B4E 00008C3A __IO_list | 00000B50 00008C3C stdin + 00000B68 00008C54 stdout | 00000B80 00008C6C stderr | 00000B9A 00008C86 __sys_err + 00000B9C 00008C88 __sys_ner | 00000B9E 00008C8A __on_exit | 00000BA0 00008C8C __ctype Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) @@ -101,36 +98,36 @@ Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------- ---- ---- ------- ----- ------------ -CODE 00004000 0000C015 = 49173. bytes (NUL,CON) +CODE 00004000 0000C024 = 49188. bytes (NUL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ - 00004CA0 da_read | 00004D45 da_write | 00004DEA pass1 - 000052C9 pass2 | 00005570 pass3 | 0000589D ckdir - 00005D38 pass4 | 00005D70 mkentry | 00005E52 pass5 - 0000608F getblkno | 0000618B setblkno | 000062E1 _blk_allo - 000063B3 daread | 000063F2 dwrite | 0000642B iread - 00006479 iwrite | 000064E6 dirread | 0000655A dirwrite - 000065E4 yes | 0000663D main | 000069D9 bitmap_du - 00006ACF bitmap_fi | 00006C21 mypanic | 00006C4C bzero - 00006C76 bfill | 00006CA2 bcopy | 00006CDA int_min - 00006CFB int_max | 00006D11 sprintf | 00006D55 fflush - 00006F68 _write | 00006F87 strcat | 00006FA7 printf - 00006FD6 lseek | 00007003 __stdio_c | 0000706E __stdio_i - 000070AC close | 000070C1 strlen | 000070F8 abort - 00007166 _exit | 0000717B fgets | 00007220 strcmp - 000072C1 perror | 000072FE pause | 0000730E isatty - 00007349 fstat | 00007360 strcpy | 00007387 kill - 0000751E vfprintf | 00007A79 ltoa | 00007ADC __longtoa - 00007C70 itoa | 00007CD9 open | 00007D04 malloc - 00007F30 fprintf | 00007F62 exit | 00007F92 _read - 00007FB1 getpid | 00007FC6 signal | 00014000 strerror - 000141BD unix | 000141D7 fgetc | 000142E7 memcpy - 000143B5 on_exit | 0001442E atexit | 00014441 unix_long - 0001445B strchr | 00014496 free | 00014576 fputc - 00014688 ultoa | 000146DD atoi | 000146F3 sbrk - 00014708 fread | 000148B6 strtol | 000149E4 strtoul - 00014B3B toupper | 00014B60 tolower + 00000CA0 00004CA0 da_read | 00000D45 00004D45 da_write | 00000DEA 00004DEA pass1 + 000012DF 000052DF pass2 | 00001586 00005586 pass3 | 000018B3 000058B3 ckdir + 00001D4E 00005D4E pass4 | 00001D86 00005D86 mkentry | 00001E68 00005E68 pass5 + 000020A5 000060A5 getblkno | 000021A1 000061A1 setblkno | 000022F7 000062F7 _blk_allo + 000023C9 000063C9 daread | 00002408 00006408 dwrite | 00002441 00006441 iread + 0000248F 0000648F iwrite | 000024FC 000064FC dirread | 00002570 00006570 dirwrite + 000025FA 000065FA yes | 00002653 00006653 main | 000029EF 000069EF bitmap_du + 00002AE5 00006AE5 bitmap_fi | 00002C37 00006C37 mypanic | 00002C62 00006C62 bzero + 00002C8C 00006C8C bfill | 00002CB8 00006CB8 bcopy | 00002CF0 00006CF0 int_min + 00002D11 00006D11 int_max | 00002D27 00006D27 sprintf | 00002D6B 00006D6B fflush + 00002F7E 00006F7E _write | 00002F9D 00006F9D strcat | 00002FBD 00006FBD printf + 00002FEC 00006FEC lseek | 00003019 00007019 __stdio_c | 00003084 00007084 __stdio_i + 000030C2 000070C2 close | 000030D7 000070D7 strlen | 0000310E 0000710E abort + 0000317C 0000717C _exit | 00003191 00007191 fgets | 00003236 00007236 strcmp + 000032D7 000072D7 perror | 00003314 00007314 pause | 00003324 00007324 isatty + 0000335F 0000735F fstat | 00003376 00007376 strcpy | 0000339D 0000739D kill + 00003534 00007534 vfprintf | 00003A8F 00007A8F ltoa | 00003AF2 00007AF2 __longtoa + 00003C86 00007C86 itoa | 00003CEF 00007CEF open | 00003D1A 00007D1A malloc + 00003F46 00007F46 fprintf | 00003F78 00007F78 exit | 00003FA8 00007FA8 _read + 00003FC7 00007FC7 getpid | 00003FDC 00007FDC unix | 00004000 00014000 signal + 00004025 00014025 strerror | 000041E2 000141E2 fgetc | 000042F2 000142F2 memcpy + 000043C0 000143C0 on_exit | 00004439 00014439 atexit | 0000444C 0001444C unix_long + 00004466 00014466 strchr | 000044A1 000144A1 free | 00004581 00014581 fputc + 00004693 00014693 ultoa | 000046E8 000146E8 atoi | 000046FE 000146FE sbrk + 00004713 00014713 fread | 000048C1 000148C1 strtol | 000049EF 000149EF strtoul + 00004B46 00014B46 toupper | 00004B6B 00014B6B tolower Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) @@ -139,14 +136,14 @@ UDATA0 00008D8C 000008CD = 2253. bytes (REL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ - 00008D8C _argc | 00008D8E _argv | 00008D90 environ - 00008D92 errno | 00008D94 __cleanup | 00008D97 device_ha - 00008D99 device_na | 00008F99 zeroed | 00009199 depth - 0000919B dev | 0000919D filsys | 000091BB ninodes - 000091BD finode | 000091BF bitmap_in | 000091C3 bitmap_bl - 000091C7 bitmap_im | 000091CB inode_bit | 000091CD block_bit - 000091CF link_coun | 000095D1 __malloc_ | 000095D5 __malloc_ - 00009627 __on_exit + 00000CA0 00008D8C _argc | 00000CA2 00008D8E _argv | 00000CA4 00008D90 environ + 00000CA6 00008D92 errno | 00000CA8 00008D94 __cleanup | 00000CAB 00008D97 device_ha + 00000CAD 00008D99 device_na | 00000EAD 00008F99 zeroed | 000010AD 00009199 depth + 000010AF 0000919B dev | 000010B1 0000919D filsys | 000010CF 000091BB ninodes + 000010D1 000091BD finode | 000010D3 000091BF bitmap_in | 000010D7 000091C3 bitmap_bl + 000010DB 000091C7 bitmap_im | 000010DF 000091CB inode_bit | 000010E1 000091CD block_bit + 000010E3 000091CF link_coun | 000014E5 000095D1 __malloc_ | 000014E9 000095D5 __malloc_ + 0000153B 00009627 __on_exit Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) @@ -159,8 +156,8 @@ CSTACK 00009659 00001000 = 4096. bytes (REL,CON) Files Linked [ module(s) ] ..\..\lib\c0b.rel [ _c0b ] -fsck [ fsck ] -utils [ utils ] +fsck [ fsck.rel ] +utils [ utils.rel ] Libraries Linked [ object file ] diff --git a/src/fsutil/fsck.obj b/src/fsutil/fsck.obj new file mode 100644 index 0000000000000000000000000000000000000000..4b0690132482d2a61b5d029d60550e1e006b9bfa GIT binary patch literal 28879 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 bJDC_uBt&MD$;sp-skJ^^v*a%QFT1}1K_f<{ literal 0 HcmV?d00001 diff --git a/src/fsutil/machdep.obj b/src/fsutil/machdep.obj new file mode 100644 index 0000000000000000000000000000000000000000..02ccb04009e5508f856c8a59b899df1aabfa9572 GIT binary patch literal 6591 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 literal 0 HcmV?d00001 diff --git a/src/fsutil/main.obj b/src/fsutil/main.obj new file mode 100644 index 0000000000000000000000000000000000000000..38695a1dfaa8690c1012048d3a96053affa8e157 GIT binary patch literal 2248 zcmZ`)O>Epm6n@@aZ+5*&x+U8P#GfOgs#O}ZDJ3esB+ZXVQ9@GE6oj@iw%6X6chs!h{it7d3&{y}6!Z>b1M)zn+H!NrLBI|Yyu0RBk_%wzbP zf#QTx)tDBE@cj(-FEa@O;W(6UDa^dV67+|N@1pK1=C+Al1PNqVcq@#1C6b;)a0mU# zMsbI$rlqwU=Ggj$*-I0Xa*~*zoqF}+-1MT1Ny90~^T7izU#J-G)Yfdb(ptAGe$%K} zev8>orLNho;^}X{0s`g%Fga%%P0#l%CZBrkwEV)^Vcll(!u}c5Cva zS8v#k*_5xEP2cuhdE~58E-U9>8XZ;2Lr^FtbEb8nrF#ndPq9Z3HQj5nKFAhx=%5A4 znKx`^cvUk6SvYfKmg^|UVy|QWxid?)S;ef(W8pL(qbI{0&*(*B@8IBoHY@FVYels8 z(f$zyBCG2yi-H`7TyZC!EVK0Hr8kaHGxLjA`cYMhRe3x`t13?5_aWce*sSMIXzt31 zLu9UM`wf+8`Vp;bXpZAktlfCxjB0y&5z>6le9dIGYk4Z`L1utH9=DIFj06gf$>UDa zm#cmOnHCB%EfkPiCbjN)j>@`2Q*0T_T9cd)acq_%wJdVd%wpACO~j#TMn?1Ke1O^% ztM`VwF5Ovi!;ENMvphZz*+-_;@cbYopVcNU#UQQdSyo^jCyR%mbSUwxZ?Bswi^Hr@ zt|~i*ZhkC$yXI>6F(jb5x(wXlmB4P`kJPoQsgCWlPtZrR7vQrHNw9$Tfd+~@`9wT~XGrDh5Tk?{9**^RtRWC(m_>XzLt4vDh9^lJx8z+;DW!#Tu`dFH2-N6) Q05!f=K*jQ=IXv6{06d~*YybcN literal 0 HcmV?d00001 diff --git a/src/fsutil/mkfs.exe b/src/fsutil/mkfs.exe index 34770ddee32f087ce9653091649453f19e6f7459..1fb6a2cab0be16759be00658c8007c777414c1a4 100644 GIT binary patch delta 9486 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

    Ko-5i0NOcu)Q$-pA#)?R~>-*W=r-`o|fT^d(I` zlk78sJf$~Rb3wi>|4qIwi`#m`n0vDLYHwp}(su`ad@H79ld@kit@XO}9P>(&rnSPe zg(e?2@YBEw{NMWRjX=X#T=vk=e?i+?qdoReOEZDuQD)z(20D(pH21Xx16|I{&v|W+ zf&Trd^|99@>BZx1^V9Ov&SqT7xSVk#<4(q4hLY2AL0lLY!%g8*xJ)jWTgWZr%D76- z%x&bha29SGSI6182Cj+Q%kAS1a0j_JxVN}N++prr?kM*G*T#LywR5MqF76C>mivnP zn!CjHaF;oWyTSEycenv=kfSn{nVL*(rtY(x)|b`RtSzgmwOZD1EPG}{RqeDbm20T~ E1wisKo&W#< diff --git a/src/bin/mklink-b.ba% b/src/bin/mklink-b.ba% new file mode 100644 index 00000000..2a70fc8f --- /dev/null +++ b/src/bin/mklink-b.ba% @@ -0,0 +1,30 @@ +@if .%1==. goto failure + +@echo -k %2..\..\lib>%1.lnk +@echo -l libcb.lib>>%1.lnk +@echo -l libsysb.lib>>%1.lnk +@echo -l libiar.lib>>%1.lnk +@echo -m>>%1.lnk +@echo -u>>%1.lnk +@echo -i>>%1.lnk +@echo -o %1>>%1.lnk +@echo -bl RCODE=0x8100>>%1.lnk +@echo -bl CODE=0x4000,0x10000>>%1.lnk +@echo -bc CODE=0x4000>>%1.lnk +@echo %2..\..\lib\c0b.rel>>%1.lnk +@echo %1>>%1.lnk + +@echo SUCCESS +@goto done + +:failure +@echo usage: %0 filename +@echo. +@echo Writes link-z80 definition file "filename.lnk" for banked memory model, +@echo containing the needed commands to link "filename.rel" to "filename.i86". +@echo The generated file can then be manually edited to link further modules. +@echo Please note, any previously existing "filename.lnk" will be overwritten! +@echo. + +:done + diff --git a/src/bin/mklink-l.ba% b/src/bin/mklink-l.ba% new file mode 100644 index 00000000..5ed40087 --- /dev/null +++ b/src/bin/mklink-l.ba% @@ -0,0 +1,28 @@ +@if .%1==. goto failure + +@echo -k %2..\..\lib>%1.lnk +@echo -l libcl.lib>>%1.lnk +@echo -l libsysl.lib>>%1.lnk +@echo -l libiar.lib>>%1.lnk +@echo -m>>%1.lnk +@echo -u>>%1.lnk +@echo -i>>%1.lnk +@echo -o %1>>%1.lnk +@echo -bl RCODE=0x8100>>%1.lnk +@echo %2..\..\lib\c0l.rel>>%1.lnk +@echo %1>>%1.lnk + +@echo SUCCESS +@goto done + +:failure +@echo usage: %0 filename +@echo. +@echo Writes link-z80 definition file "filename.lnk" for large memory model, +@echo containing the needed commands to link "filename.rel" to "filename.i86". +@echo The generated file can then be manually edited to link further modules. +@echo Please note, any previously existing "filename.lnk" will be overwritten! +@echo. + +:done + diff --git a/src/bin/mknbat-b.ba% b/src/bin/mknbat-b.ba% new file mode 100644 index 00000000..d0c375be --- /dev/null +++ b/src/bin/mknbat-b.ba% @@ -0,0 +1,34 @@ +@if .%1==. goto failure + +@echo iccz80 -S -w -mb -v1 -z -A -I..\..\include\ %1>n.bat +@echo @if errorlevel 1 goto failure>>n.bat +@echo del %1.r01>>n.bat +@echo as-z80 -l -o %1.s01>>n.bat +@echo @if errorlevel 1 goto failure>>n.bat +@echo.>>n.bat +@echo link-z80 -f %1>>n.bat +@echo @if errorlevel 1 goto failure>>n.bat +@echo ihex2bin -l %1.i86 %1>>n.bat +@echo @if errorlevel 1 goto failure>>n.bat +@echo.>>n.bat +@echo @echo SUCCESS>>n.bat +@echo @goto done>>n.bat +@echo :failure>>n.bat +@echo @echo FAILURE>>n.bat +@echo :done>>n.bat +@echo.>>n.bat + +@echo SUCCESS +@goto done + +:failure +@echo usage: %0 filename +@echo. +@echo Writes Windows NT/2000/XP batch file "n.bat" for banked memory model, +@echo containing the needed commands to compile "filename.c" to "filename". +@echo The generated file can then be manually edited to add further commands. +@echo Please note, any previously existing "n.bat" will be overwritten! +@echo. + +:done + diff --git a/src/bin/mknbat-b.bat b/src/bin/mknbat-b.bat index fdc1f7e2..d0c375be 100644 --- a/src/bin/mknbat-b.bat +++ b/src/bin/mknbat-b.bat @@ -1,6 +1,6 @@ @if .%1==. goto failure -@echo iccz80 -mb -v1 -s9 -A -I..\..\include\ %1>n.bat +@echo iccz80 -S -w -mb -v1 -z -A -I..\..\include\ %1>n.bat @echo @if errorlevel 1 goto failure>>n.bat @echo del %1.r01>>n.bat @echo as-z80 -l -o %1.s01>>n.bat diff --git a/src/bin/mknbat-l.ba% b/src/bin/mknbat-l.ba% new file mode 100644 index 00000000..921a0bd6 --- /dev/null +++ b/src/bin/mknbat-l.ba% @@ -0,0 +1,34 @@ +@if .%1==. goto failure + +@echo iccz80 -S -w -ml -v1 -z -A -I..\..\include\ %1>n.bat +@echo @if errorlevel 1 goto failure>>n.bat +@echo del %1.r01>>n.bat +@echo as-z80 -l -o %1.s01>>n.bat +@echo @if errorlevel 1 goto failure>>n.bat +@echo.>>n.bat +@echo link-z80 -f %1>>n.bat +@echo @if errorlevel 1 goto failure>>n.bat +@echo ihex2bin -l %1.i86 %1>>n.bat +@echo @if errorlevel 1 goto failure>>n.bat +@echo.>>n.bat +@echo @echo SUCCESS>>n.bat +@echo @goto done>>n.bat +@echo :failure>>n.bat +@echo @echo FAILURE>>n.bat +@echo :done>>n.bat +@echo.>>n.bat + +@echo SUCCESS +@goto done + +:failure +@echo usage: %0 filename +@echo. +@echo Writes Windows NT/2000/XP batch file "n.bat" for large memory model, +@echo containing the needed commands to compile "filename.c" to "filename". +@echo The generated file can then be manually edited to add further commands. +@echo Please note, any previously existing "n.bat" will be overwritten! +@echo. + +:done + diff --git a/src/bin/mknbat-l.bat b/src/bin/mknbat-l.bat index 2214ffde..921a0bd6 100644 --- a/src/bin/mknbat-l.bat +++ b/src/bin/mknbat-l.bat @@ -1,6 +1,6 @@ @if .%1==. goto failure -@echo iccz80 -ml -v1 -s9 -A -I..\..\include\ %1>n.bat +@echo iccz80 -S -w -ml -v1 -z -A -I..\..\include\ %1>n.bat @echo @if errorlevel 1 goto failure>>n.bat @echo del %1.r01>>n.bat @echo as-z80 -l -o %1.s01>>n.bat diff --git a/src/bin/p.pif b/src/bin/p.pif new file mode 100644 index 0000000000000000000000000000000000000000..b0fba8b0793fd4328ff342f0037abbe45ca25e34 GIT binary patch literal 2855 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 PK7(#u8C_L$ANT(N9Q4=q literal 0 HcmV?d00001 diff --git a/src/bin/restool.exe b/src/bin/restool.exe new file mode 100644 index 0000000000000000000000000000000000000000..6ef9d23f609931f690f550481cb2b2fa47bbd28e GIT binary patch literal 118837 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 z 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 IASHH=Ap(<1;G&RN2c9L^=QL16m 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 literal 0 HcmV?d00001 diff --git a/src/bin/tee.exe b/src/bin/tee.exe new file mode 100644 index 0000000000000000000000000000000000000000..9132e8035719ce2e9bc140dff0e4f0ab5efb35c3 GIT binary patch literal 24064 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

    3J>C>O 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

    Ko-5i0NOcu)Q$-pA#)?R~>-*W=r-`o|fT^d(I` zlk78sJf$~Rb3wi>|4qIwi`#m`n0vDLYHwp}(su`ad@H79ld@kit@XO}9P>(&rnSPe zg(e?2@YBEw{NMWRjX=X#T=vk=e?i+?qdoReOEZDuQD)z(20D(pH21Xx16|I{&v|W+ zf&Trd^|99@>BZx1^V9Ov&SqT7xSVk#<4(q4hLY2AL0lLY!%g8*xJ)jWTgWZr%D76- z%x&bha29SGSI6182Cj+Q%kAS1a0j_JxVN}N++prr?kM*G*T#LywR5MqF76C>mivnP zn!CjHaF;oWyTSEycenv=kfSn{nVL*(rtY(x)|b`RtSzgmwOZD1EPG}{RqeDbm20T~ E1wisKo&W#< diff --git a/src/fsutil/mkfs.i86 b/src/fsutil/mkfs.i86 new file mode 100644 index 00000000..f63ff564 --- /dev/null +++ b/src/fsutil/mkfs.i86 @@ -0,0 +1,522 @@ +:020000040000FA +:20000000C9A602007856341214000081008180912D9C2DACD1ED538091C1ED438291E12269 +:130020008491217B583E00CD5281EB217F713E00C3528116 +:20109400CD468121A597E54B42ED5B8D953E00210C51CD5281F13E02ACB5281DDD6E02DD12 +:2010B4006603E521F783E53E0021DE61CD5281F1F13E0021F862CD528121A597C32981CD3E +:2010D4004681C54B42ED5B8D953E0021CF51CD5281F13E02ACB5281DDD6E02DD6603E521EA +:2010F4001184E53E0021DE61CD5281F1F13E0021F862CD5281C32981CD4681210000E56979 +:20111400600100003E09CD1682C5E5ED5B8B913E00210D62CD5281F1F1F1CB78282E212C79 +:2011340084E53E0021DE61CD5281F11148903E0021AC5FCD5281118D913E00216A64CD5295 +:20115400811101003E00217F71CD5281210002E5DD4E0ADD460BED5B8B913E0021AF71CDDE +:201174005281F13E02ACB5284C2A86917DB42017210002E50EAADD5E0ADD560B3E00211126 +:201194005FCD5281E1182E213984E53E0021DE61CD5281F11148903E0021AC5FCD5281111F +:2011B4008D913E00216A64CD52811101003E00217F71CD5281210002C32981CD46812100EA +:2011D40000E569600100003E09CD1682C5E5ED5B8B913E00210D62CD5281F1F1F1CB7828E6 +:2011F4002E212C84E53E0021DE61CD5281F11148903E0021AC5FCD5281118D913E00216ADD +:2012140064CD52811101003E00217F71CD5281210002E5DD4E0ADD460BED5B8B913E002187 +:20123400BF61CD5281F13E02ACB5282E214684E53E0021DE61CD5281F11148903E0021ACFF +:201254005FCD5281118D913E00216A64CD52811101003E00217F71CD5281210002C32981EE +:20127400CDAE81ECFF014890DD5E02DD56033E0021986ECD52811148903E0021AC5FCD52B0 +:20129400813A2A90B728100148901154843E0021986ECD5281182D213090E50114002102CC +:2012B40000395D543E00217B63CD5281F17DB4280EDD7EECFE79280CDD7EECFE592805211D +:2012D40000001803210100C32981CDAE81DCFF3A2C90B72818215784E53E0021DE61CD52EE +:2012F40081F11148903E0021AC5FCD5281AFDD77DCDD77DD010008DD6EDCDD66DDA7ED423F +:20131400D2A753010002DD5EDCDD56DD210008A7ED52EB3E0021755FCD5281DD75DEDD7475 +:20133400DF010002A7ED42301B0609DD5EDCDD56DDCD1F813E00219450CD5281DD75FEDDE3 +:2013540074FF1808DD36FE8DDD36FF93DD6EDEDD66DFE5DD4EFEDD46FF212986DD5EDCDD64 +:2013740056DD19EB3E00213D5FCD5281E1DD4EFEDD46FFC50609DD5EDCDD56DDCD1F813EB5 +:201394000021D350C1CD52813E02DD86DDDD77DDC30853010002118D933E0021E75ECD52CE +:2013B400813A2C90B72818216F84E53E0021DE61CD5281F11148903E0021AC5FCD52813A56 +:2013D4002B90B72819DD6E04DD6605DD4E0ADD460B0901050009DD75DEDD74DF180CDD6E65 +:2013F40002DD6603DD75DEDD74DF210500DD4E0ADD460B09DD75DCDD74DDDD4EDEDD46DF38 +:20141400DD6EDCDD66DDA7ED4230513A2C90B72830010900DD5EDCDD56DDCDDE817BB2206B +:2014340020DD6EDCDD66DDE5219384E53E0021DE61CD5281F1F11148903E0021AC5FCD529D +:2014540081018D93DD5EDCDD56DD13DD73DCDD72DD1B3E0021D350CD5281189E3A2C90B7A4 +:201474002827DD6EDCDD66DD2BDD75DCDD74DDE5219C84E53E0021DE61CD5281F1F11148B7 +:20149400903E0021AC5FCD52813A2C90B7281821A584E53E0021DE61CD5281F11148903E2C +:2014B4000021AC5FCD5281011E00210400395D543E0021E75ECD5281DD36E0C6DD36E131FC +:2014D400210500DD4E0ADD460B09DD75E2DD74E3DD6E04DD6605DD75E4DD74E5DD6E02DDD1 +:2014F4006603DD75E6DD74E7DD6E04DD660529292911FEFF19DD75EADD74EBDD6E04DD66BC +:201514000509010600094D44DD6E02DD6603A7ED42DD75E8DD74E92A8F97DD75F0DD74F157 +:201534002A9397DD75F2DD74F32A9797DD75F4DD74F52A9B97DD75F6DD74F7AFDD77DCDD2F +:2015540077DDDD6E04DD6605DD4E0ADD460B09010600094D44DD6EDCDD66DDA7ED4230260C +:201574000603DD5EDCDD56DDCD1F812AA19719DD7EDCE607473E01CDE781B677DD34DC2026 +:2015940003DD34DD18BCED4B93972A9797A7ED42292929DD75DEDD74DFDD6E02DD6603DD97 +:2015B40075DCDD74DDDD6EDEDD66DFDD4EDCDD46DDA7ED4228260603DD5EDCDD56DDCD1F06 +:2015D400812AA19719DD7EDCE607473E01CDE781B677DD34DC2003DD34DD18C92A9997E5D1 +:2015F4002A9797E52A9597E52A9397E5ED5BA1973E0021F15DCD5281E1E1E1E13A2D90B727 +:20161400CAD856AFDD77DCDD77DDDD6E04DD6605DD4E0ADD460B09010600094D44DD6EDCE3 +:20163400DD66DDA7ED4230260603DD5EDCDD56DDCD1F812AA39719DD7EDCE607473E01CDB9 +:20165400E781B677DD34DC2003DD34DD18BCED4B97972A9B97A7ED42292929DD75DEDD747B +:20167400DFDD6E02DD6603DD75DCDD74DDDD6EDEDD66DFDD4EDCDD46DDA7ED422826060309 +:20169400DD5EDCDD56DDCD1F812AA39719DD7EDCE607473E01CDE781B677DD34DC2003DD2C +:2016B40034DD18C92A9D97E52A9B97E52A9997E52A9797E5ED5BA3973E0021F15DCD528155 +:2016D400E1E1E1E121ED4122CF9521030022D19501000021200022D795ED43D995DD6E0434 +:2016F400DD6605DD4E0ADD460B090105000922E79521010022919521FFFF228F952A9F9746 +:201714007EF601772A9F977EF60277ED4B8F972A9397A7ED42292929DD75DEDD74DFDD6ECE +:2017340004DD6605292929DD75DCDD74DDDD6EDEDD66DFDD4EDCDD46DDA7ED4228260603F3 +:20175400DD5EDCDD56DDCD1F812A9F9719DD7EDCE607473E01CDE781B677DD34DC2003DD6F +:2017740034DD18C92A9597E52A9397E52A9197E52A8F97E5ED5B9F973E0021F15DCD5281B8 +:20179400E1E1E1E1018F95210500DD5E0ADD560B19EB3E0021D350CD528101298EDD6E04B6 +:2017B400DD6605DD5E0ADD560B1911050019EB3E0021D350CD52811104003E00219450CDD0 +:2017D4005281DD75FEDD74FF011E00C54D44210600395D543E00213D5FCD5281E1DD4EFE57 +:2017F400DD46FF1104003E0021D350CD5281C32981CDAE81FEFD3A2C90B7281821BE84E5E3 +:201814003E0021DE61CD5281F11148903E0021AC5FCD5281210002E50EAA210400395D54C3 +:201834003E0021115FCD5281E121000039AF772377DD4E02DD4603210000395623666AA78D +:20185400ED423020210200394D44210000395E23563E0021D350CD528121000039342320E4 +:20187400013418CDC32981CDAE81F4FFAFDD77F8DD77F9DD36FA01DD36FB00DD6E02DD66EA +:2018940003DD75FCDD74FDDD4E02DD4603DD6EFADD66FBCDCC81D27459DD6EFADD66FB295A +:2018B400DD4E04DD46050946236668DD75FEDD74FF7EFE2DC27459DD34FE2003DD34FFDD86 +:2018D40034FA2003DD34FBDD6EFCDD66FD2BDD75FCDD74FDDD6EFEDD66FFAFB6287FDD6E67 +:2018F400FEDD66FF23DD75FEDD74FF2B5ECD34810A00464C515659666C71767949592659D7 +:201914003B59345942592D5926593B59345942592D593E01322A9018413E01322990183AB0 +:201934003E01322B9018333E01322C90182C3E01322D901825DD6EFEDD66FFE521D784E56F +:20195400216090E53E00214D71CD5281F1F1F11101003E00217F71CD5281C3E858C39B5833 +:20197400010480DD6EFCDD66FD3E80AC67ED42301D21EA84E5216090E53E00214D71CD5254 +:2019940081F1F11101003E00217F71CD5281DD6EFADD66FB29DD4E04DD4605094E234611FB +:2019B4008D913E00210965CD5281210280E5218D91E53E0021F66ECD5281F1F1228B91CB8E +:2019D4007C282E211B85E53E0021DE61CD5281F11148903E0021AC5FCD5281118D913E00EC +:2019F400216A64CD52811101003E00217F71CD5281DD6EFADD66FB29DD4E04DD4605092314 +:201A1400235E23563E00214765CD5281DD75F4DD74F5DD6EFADD66FB2909010400095E233D +:201A3400563E00214765CD5281DD75F6DD74F7DD4EFCDD46FD210400CDCC813023DD6EFAE3 +:201A5400DD66FB29DD4E04DD460509010600095E23563E00214765CD5281DD75F8DD74F985 +:201A7400016400DD6EF4DD66F5A7ED423825011E00DD5EF4DD56F5CDEE81DD6EF6DD66F716 +:201A9400A7ED52300EDD4EF8DD46F9216400A7ED42301D212885E5216090E53E00214D7161 +:201AB400CD5281F1F11101003E00217F71CD5281010000211E08228F97ED43919711FFFF98 +:201AD400D511FCFFD5C5E5210300C109EB210000C1ED4A4D44EBCD5F81228F97ED439197D7 +:201AF400C5E5DD6EF6DD66F729292901FFFF09EB0603CD1F81EB110000C109EBC1ED4AE53B +:201B1400D5210100C109EB210000C1ED4A4D44EB229397ED43959711FFFFD511FCFFD5C53E +:201B3400E5210300C109EB210000C1ED4A4D44EBCD5F81229397ED439597C5E521FFFFDD43 +:201B54004EF4DD46F509EB0603CD1F81EB110000C109EBC1ED4AE5D5210100C109EB210052 +:201B740000C1ED4A4D44EB229797ED43999711FFFFD511FCFFD5C5E5210300C109EB2100C4 +:201B940000C1ED4A4D44EBCD5F81229797ED439997229B97ED439D97C5E521FF01C109EB28 +:201BB400210000C1ED4A4D44EB3E09CDFC8101FBFF09DD75F8DD74F93A2D90B7287D21FFE0 +:201BD400FFDD4EF4DD46F509EB0603CD1F81EB010000C5E52A9797C109EB2A9997C1ED4A5C +:201BF400E5D5210100C109EB210000C1ED4A4D44EB229B97ED439D9711FFFFD511FCFFD52E +:201C1400C5E5210300C109EB210000C1ED4A4D44EBCD5F81229B97ED439D97C5E521FF0168 +:201C3400C109EB210000C1ED4A4D44EB3E09CDFC8101FBFF09DD75F8DD74F9DD6EF8DD6697 +:201C5400F9E5DD6EF6DD66F7E5DD6EF4DD66F5E5218D91E5213E85E53E0021DE61CD5281AB +:201C7400F1F1F1F1F11148903E0021AC5FCD52811177853E00217452CD52817DB4200B1169 +:201C940001003E00217F71CD5281218185E53E0021DE61CD5281F13A2990B7280EDD5EF4F6 +:201CB400DD56F53E00210558CD5281ED4B8F972A9397A7ED42EB3E0021216FCD5281229FC9 +:201CD400977DB4200BDD36FE83DD36FF85C3645DED4B8F972A9397A7ED42E50E00ED5B9FEC +:201CF400973E0021115FCD5281E1ED4B93972A9B97A7ED42EB3E0021216FCD528122A19781 +:201D14007DB4200ADD36FE90DD36FF851842ED4B93972A9B97A7ED42E50E00ED5BA1973E7D +:201D34000021115FCD5281E13A2D90B72861ED4B97972A9B97A7ED42EB3E0021216FCD52B5 +:201D54008122A3977DB4202DDD36FE9DDD36FF85DD6EFEDD66FFE521A985E5216090E53EF7 +:201D740000214D71CD5281F1F1F11101003E00217F71CD5281ED4B97972A9B97A7ED42E57F +:201D94000E00ED5BA3973E0021115FCD5281E1DD6EF8DD66F9E5DD4EF6DD46F7DD5EF4DDA4 +:201DB40056F53E0021DE52CD5281E1ED5B8B913E0021E362CD52813A2C90B72812218D91E6 +:201DD400E521C485E53E0021DE61CD5281F1F11100003E00217F71CD5281C32981CDAE8132 +:201DF400FAFFDD6E0ADD660BDD75FCDD74FDDD6E10DD6611E5DD6E0EDD660FE5DD6EFCDD4F +:201E140066FD010000CD7D81D2E45EDD4E0EDD460FDD6EFCDD66FD3E0284677DE6005F7C10 +:201E3400E6FE573E0021755FCD5281DD75FEDD74FFDD4EFCDD46FDA7ED42010002A7ED42EA +:201E5400301B0609DD5EFCDD56FDCD1F813E00219450CD5281DD75FADD74FB1808DD36FA98 +:201E74008DDD36FB93DD4EFCDD46FDDD6EFEDD66FFA7ED42E579E6FF6F78E60167DD5EFACB +:201E9400DD56FB194D44DD5E0ADD560BDD6EFCDD66FDA7ED52DD5E02DD560319EB3E002190 +:201EB4003D5FCD5281E1DD4EFADD46FBC50609DD5EFCDD56FDCD1F813E0021D350C1CD52A4 +:131ED40081DD6EFEDD66FFDD75FCDD74FDC3025EC32981C3 +:20030B0052656164206F6620626C6F636B202564206661696C65642E0A00577269746520A5 +:20032B006F6620626C6F636B202564206661696C65642E0A0063616E2774207365656B3A7D +:20034B00200063616E277420726561643A200063616E27742077726974653A2000590A00BA +:20036B004372656174696E6720626F6F7420626C6F636B2E2E2E0A00496E697469616C697F +:20038B007A696E6720696E6F6465732C2062652070617469656E742E2E2E0A00426C6B2003 +:2003AB002325640D00426C6B202325640A004372656174696E6720737570657220626C6FB1 +:2003CB00636B2E2E2E0A004C6F77206C6576656C20666F726D617474696E672E2E2E0A0057 +:2003EB00496C6C6567616C207377697463682025730A0075736167653A206D6B6673205B29 +:20040B002D79667176625D20646576696365206673697A65206973697A65205B7273697AC7 +:20042B00655D0A0063616E2774206F70656E3A200042616420706172616D6574657220766E +:20044B00616C7565730A000A4D616B696E672066696C6573797374656D206F6E2025732CC6 +:20046B00206673697A652025752C206973697A652025752C207273697A652025752E2000CB +:20048B00436F6E6669726D3F20000A00696E6F6465206269746D617000626C6F636B2062E1 +:2004AB0069746D6170006C6F636B206269746D6170004E6F7420656E6F756768206D656D9A +:2004CB006F727920666F722025732E0A0046696C6573797374656D206F6E2025732073757E +:1A04EB00636365737366756C6C7920696E697469616C697A6564210A0A00CF +:20053D0035324338303330383231313834303234310010CD0E07CD1606CD6D0518220000D6 +:20055D0000424F4F542020202042494E0000001000010000000000000000000000000000E0 +:20057D00CD56016C6F6164696E67202F626F6F742F6B65726E656C2E62696E0D0A00CDB0AE +:20059D0001CD9B00CD7002CD9001CD1705CD3505ED5B0F0ED5218C000E0FEDB0C12A110E9D +:2005BD00F911330019EB2A0B0E97C5C9ED39393EF1ED393A3A8010ED3938E911040021E55B +:2005DD0007CDC5042AE50711C631B7ED52204E2AE7072293072AE9072295072AEB0722975E +:2005FD0007C92AFF0D11C9A6B7ED52C8CD560162616420655F6D616769633A2000182D2AA1 +:20061D00010E110300B7ED52C8CD560162616420655F666F726D61743A2000180FCD56017F +:20063D00626164206D616769633A200019CD1F06CD1606CD5601646F696E67206120636C62 +:20065D0065616E20626F6F740D0A0021E50711E60701FF0136AAEDB01100000604C5D521FF +:20067D00E507CDD304D1C11310F33EAAED390B3E13ED390A18FECD370667626F6F743A20F6 +:20069D0000C33706110200CD84013E81ED390B3E13ED390A973D20FD3D20FD3D20FD3D2065 +:2006BD00FD1100022181FCE5FDE1010500C34606CD56017374617274696E67206F70657231 +:2006DD006174696E672073797374656D0D0A00C9CD64013E10ED393A3EFFED393811011F99 +:2006FD0001FF00CDE8012100F122801F97ED39381101100DCDE80121800F22FC10218010EB +:20071D0022FE10C9CD0B02D86B622B360079B0C8EDB0C9B7ED52D019EBC92A070E11140095 +:20073D0018112A0D0EED5B090E18082A110EED5B0D0E13B7ED524D44C9229907CDB303015A +:20075D00100021E50DCD3C03D823ED5B9907060E231ABE20EAB728051310F51AB7ED5BE557 +:20077D000DC9CD560166696C65206E6F7420666F756E640D0A00C31301CD560166696C6563 +:20079D0020746F6F2073686F72740D0A00C31301110100217107CD190220C7217607CD198E +:2007BD000220BFCDB30321FF0D011400CD3C0338C8CDC200CDDF003EFFED3938CDFA0121AB +:2007DD000010CD3C0397ED3938CD0202EBCD3C03CDE40121150E22130ECDBF03CDDE037D30 +:2007FD00B4283ECD06047BB228497BE60720592A130E7323722322130E061FC5D5CDDE0346 +:20081D007DB4281ACD06047BB22828EBD113B7ED522035C110E5CDDE037DB420C6C9E1E1D4 +:20083D00C9CD56016E756C6C2066696C650D0A00C31301CD5601686F6C6520696E20666993 +:20085D006C650D0A00C31301CD56016E6F7420616C69676E65640D0A00C31301E5C5ED438B +:20087D00F90D22FB0D21000022FD0D2AF50D7DB4201ACDDE037DB4284F22F50DCD06047B7B +:20089D00B228B021E50722F70DCDC5042AF50DED5BF90DCDF3012AF50DB7ED5222F50D2A3D +:2008BD00F90DB7ED5222F90D2AFD0D1922FD0D4B42ED5BFB0D2AF70DEDB022F70DED53FB75 +:2008DD000D2AF90D7DB420AA2AFD0D4D44D1B7ED52E1C921A507CD790421000022F50D2A07 +:2008FD00AD07229B072AAF07229D0721BD07229F0721E50B22A10721E50D22A307C92A9BC8 +:20091D0007ED5B9D07010002B7ED42EB0600ED42EB380B229B07ED539D07210002C92A9B37 +:20093D0007ED439B07C92A9F0711E107B7ED52300B2A9F075E235623229F07C92AA10711C0 +:20095D00E50BB7ED5238132A9F075E235623229F0721E50922A107CDC5042A9F0711E4077C +:20097D00B7ED52300B2AA1075E23562322A107C92AA30711E50DB7ED5238132AA1075E235F +:20099D00562322A10721E50B22A307CDC5042AA3075E23562322A307C9E57BE6070603CB00 +:2009BD003ACB1B10FA2A950737ED52381A2A930719EB21E507F5E5CDC504E1D101400059D1 +:2009DD00ED5C19D1EDB0C9CD560162616420696E6F64653A2000C630CD0906CD37062C2065 +:2009FD0000EBC30D01E5CDDF04E5FDE157E11E03C34606E5CDDF04FDE116035FC346062143 +:200A1D00000637ED52381D010002210002197C6569298FC97E235623CB3A1FCB3A1FCB3A77 +:200A3D001FC631C9CD560162616420626C6F636B3A2000EBC30D0101801021150E180C191C +:200A5D00CDF4041E0402033C1D20FAED5B130EB7ED5238EBC9ED5B110E2A40071922400775 +:200A7D00214407CD65052A420719224207216407CD6505213E07013300EDB0C979832B775E +:200A9D00788A2377234E234679B020F0C9218107CD37F0C8CD56016C6F6164696E672041F9 +:200ABD003A4B45524E454C2E42494E0D0A003E31326207ED5B9107B7ED52202319228F070C +:200ADD007DB42004218E073421004019229107218D0734218107CD37F020D8218D0735CD51 +:200AFD00B001FD21000021FF0D11030C011400CD4606CDC200CDDF00CDFA01D5FDE11100C8 +:200B1D000C6B63CD4606D5CD0202EBD1CD4606CDE401CD90013A8D073C0707472180103EEC +:200B3D00B177233C10FBC36D00F5ED3805E60228F9F1ED3907C93E0DCD09063E0A18EA7CDA +:200B5D00CD24067DF50F0F0F0FCD2D06F1E60FC69027CE402718D2E3F57E23B72805CD091E +:200B7D000618F6F1E3C97BFE04D2C40679E61FC54F0600CD96060C0D2811ED3830EE50EDBB +:200B9D003930FD09DCC00609DCC206C13E05CB38CB193D20F9181AC5012000ED0926ED38E0 +:200BBD0030EE50ED3930FD09DCC00609DCC206C10B78B120E2C9ED0926ED012718053E01B2 +:200BDD00ED3926E5FDE5ED2923ED2124ED1925E1ED2920ED2121ED1122E13E02ED3931C9A8 +:200BFD0014C91CC9C5AFED3926ED39273E04CB38CB193D20F978B1280DC5011000CDEE0695 +:200C1D00C10B78B120F3C14779E60F28204FED3026CC9E06FD09DCC00609DCC206410E014A +:200C3D00ED3830EE50ED3930ED092610F8C93E74ED3900ED39013E22ED3902ED390397ED8D +:200C5D003904ED3905ED3008ED3009ED3927ED392FED3929ED392AED392BED392CC9020015 +:200C7D00060026000C001D0000002F626F6F742F6B65726E656C2E62696E00726F6F743D07 +:200C9D00686430002A000000534E3D303030303000626F6F74006B65726E656C2E62696EA7 +:200CBD0000014B45524E454C202042494E000C000000401A1A1A1A1A1A1A1A1A1A1A1A1A9E +:200CDD001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1AB7 +:200CFD001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A97 +:200D1D001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A76 +:200D3D0001002E0000000000000000000000000001002E2E0000000000000000000000000A +:200D5D00000000000000000000000000000000000000000000000000000000000000000076 +:200D7D00000000000000000000000000000000000000000000000000000000000000000056 +:200D9D00000000000000000000000000000000000000000000000000000000000000000036 +:200DBD00000000000000000000000000000000000000000000000000000000000000000016 +:200DDD000000000000000000000000000000000000000000000000000000000000000000F6 +:200DFD000000000000000000000000000000000000000000000000000000000000000000D6 +:200E1D000000000000000000000000000000000000000000000000000000000000000000B5 +:200E3D00000000000000000000000000000000000000000000000000000000000000000095 +:200E5D00000000000000000000000000000000000000000000000000000000000000000075 +:200E7D00000000000000000000000000000000000000000000000000000000000000000055 +:200E9D00000000000000000000000000000000000000000000000000000000000000000035 +:200EBD00000000000000000000000000000000000000000000000000000000000000000015 +:200EDD000000000000000000000000000000000000000000000000000000000000000000F5 +:200EFD000000000000000000000000000000000000000000000000000000000000000000D5 +:200F1D000000000000000000000000000000000000000000000000000000000000000000B4 +:050F3D000000000000AF +:201EE700CD4681DD6E04DD66052BDD7504DD7405237DB42812DD6E02DD660323DD7502DD64 +:201F070074032B360018DCC32981CD4681DD6E0ADD660B2BDD750ADD740B237DB42814DDFA +:201F27006E02DD660323DD7502DD74032BDD46047018DAC32981CD4681DD6E0ADD660B2B96 +:201F4700DD750ADD740B237DB42820DD6E02DD660323DD7502DD74032B46DD6E04DD6605C0 +:201F670023DD7504DD74052B7018CEC32981CD46814B42DD6E04DD6605CDCC813008DD6E48 +:201F870004DD66051806DD6E02DD6603C32981CD4681EBCDCC81300469601806DD6E02DDF2 +:051FA7006603C329815F +:0A0033000405C8CB3ACB1B10FAC934 +:201FAC00CDAE81F8FFAFDD77FEDD77FFDD7E02DDB60320781130903E0021AC5FCD52817DEB +:201FCC00B4201E1148903E0021AC5FCD52817DB4200F1160903E0021AC5FCD52817DB4284C +:201FEC000621FFFFC3BC612A2E90DD7502DD7403DD7E02DDB603282EDD5E02DD56033E0046 +:20200C0021AC5FCD52817DB4280621FFFFC3BC61211600DD4E02DD4603095623666ADD755C +:20202C0002DD740318CA210000C3BC61210C00DD4E02DD4603097EE680CA1261210600DDAD +:20204C004E02DD4603095E23560A6F030A67A7ED52DD75FADD74FB7DB4CA1061210600DD43 +:20206C004E02DD46030946236668DD75F8DD74F9DD6EFADD66FBE5DD4EF8DD46F9210A0038 +:20208C00DD5E02DD5603195E23563E0021BF61CD5281F1DD75FCDD74FD4D44210000CDCCDA +:2020AC0081301E210000397EDD86FC77237EDD8EFD77210200397EDD96FC77237EDD9EFD3E +:2020CC0077DD4EFCDD46FD210000CDCC8138A1DD7EFCDDA6FD3C20092A86913E04ADB428DA +:2020EC008FDD7EFADDB6FB281B210C00DD4E02DD4603097EF60077237EF60277DD36FEFF8B +:20210C00DD36FFFF186A210C00DD4E02DD4603097EE640285BDD6E02DD66034E2346DD6EDB +:20212C0002DD660323235623666AA7ED42DD75FADD74FB4D44210000CDCC813033210100FD +:20214C00E5DD4EFADD46FBA7210000ED427C079F4F41C5E5210A00DD4E02DD4603095E23F0 +:20216C00563E00210D62CD5281F1F1F1CB782800210C00DD4E02DD4603097EE63F77237E0D +:20218C00E6FA7769602323E5210400DD4E02DD460309E5210600095623666AE56960C17129 +:2021AC002370E1712370E1712370DD6EFEDD66FFC32981CD4681DD6E0ADD660BE5C5D521E7 +:2021CC002400E53E0021C573CD5281F1F1F1F1C32981CDAE81FCFF210E003901020009DD3A +:2021EC0075FCDD74FDE5DD4E0ADD460B1148903E0021DD66CD5281F1DD75FEDD74FFC32924 +:20220C0081CD4681DD6E0EDD660FE5DD6E0CDD660DE5DD6E0ADD660BE5D5211900E53E00C7 +:20222C00216976CD5281F1F1F1F1F1C30A82CDAE81FEFF2A2E90DD75FEDD74FF1148903E46 +:20224C000021AC5FCD52811160903E0021AC5FCD5281DD7EFEDDB6FF283CDD5EFEDD56FFE1 +:20226C003E0021AC5FCD5281210A00DD4EFEDD46FF095E23563E0021E362CD5281210A0083 +:20228C000936FF2336FF211600095623666ADD75FEDD74FF18BCC32981C5D52A78907DB435 +:2022AC002002182E2100002278901101003E0021B764CD52817DB4280C2154907EF60177DD +:1722CC00237EF600770E00113A623E00213676CD5281D1C1C32F8182 +:200F42000000A599A599A599A599A59A0000100000000000000000000000A59AA59AA59A8B +:200F6200A59AA59B01002000000000000000000000006E906E906E906E90709002002200B3 +:0C0F820000000000000000000000010062 +:0B003D00DDF9DDE1D1C1F1ED3939C979 +:2022E300CD4681D5210600E53E0021C573CD5281F1F1C32981C5D5210000E5210000E51129 +:2023030006003E0021E371CD5281F1F13E0021CE71CD52814D441106003E00213065CD5286 +:20232300813E0021A764CD5281210000E5210000E51109003E0021E371CD5281F1F13E0076 +:2023430021CE71CD52814D441109003E00213065CD528111FF003E00216663CD5281D1C1D1 +:20236300C32F81CD4681D5210B00E53E0021C573CD5281F1F1C32981CDAE81FAFFDD71FAAA +:20238300DD70FBDD6E02DD6603DD75FEDD74FFDD6EFADD66FB2BDD75FADD74FB237DB428FD +:2023A30051DD5E0ADD560B3E0021DF73CD5281DD75FCDD74FD7DA43C2018DD6EFEDD66FF39 +:2023C300DD4E02DD4603A7ED422005210000184A1820DD46FCDD6E02DD660323DD7502DDEB +:2023E30074032B703E0ADDAEFCDDB6FD20021802189DDD6E02DD66033600210C00DD4E0A4D +:1D240300DD460B097EE60047237EE602B028052100001806DD6EFEDD66FFC329813D +:12004800E3F5C54E2346237BEDB12002232309C3C2819F +:20242000CDAE81FEFFDD6E02DD6603DD75FEDD74FFDD6EFEDD66FFAFB6280ADD34FE20031C +:20244000DD34FF18ECDD4E02DD4603DD6EFEDD66FFA7ED42E5DD4E02DD46031102003E002B +:2024600021BF61CD5281F1C36482CD46817BB22008DD3602F1DD360385DD5E02DD5603CD17 +:20248000206411F785CD2064ED5B86913E00210872CD5281DD7502DD7403EBCD206411FA13 +:0724A00085CD2064C32981F2 +:0B0505006572726F72003A20000A005D +:2024A700211500E53E0021C573CD5281F1C32F81CDAE81E2FF210000394D44DD5E02DD5627 +:2024C700033E0021F264CD52817DA43C2812DD7EE6E6006FDD7EE7E6F0673E20ACB5280505 +:2024E7002100001803210100C32981CD4681C5D5210D00E53E0021C573CD5281F1F1F1C3FC +:02250700298128 +:19005A00E1C5D5DDE5DD210000DD39E9E526806F7EED2039ED3939E3E96A +:20250900CD468159503E0021BE76CD528123E5DD4E04DD4605DD5E02DD56033E0021EF74AE +:07252900CD5281F1C32981AD +:20007300EBE3F5E5210600397EA377237EA277D1237E73A14F237E72A047F1D1E1C9EBE30A +:20009300D5C5F5D5C5EB210F00397EEE8047722B4E73EBE17CEE8067ED42E1200AEB2B7E54 +:0F00B3002B6E67EBA7ED52C178C1E1D13333C992 +:17253000CD4681C5D5211000E53E0021C573CD5281F1F1F1C32981D9 +:1E00C200E1C5D5DDE5DD210000DD395E235623EB39F9EBE909097E23666FC1F1E3C9FE +:20254700CD4681210A00E50100003E00213C79CD5281F1C32981CDAE81FAFFAFDD77FBDDED +:2025670077FC59503E0021BE76CD5281DD75FDDD74FEDD6E04DD66057EFE2D2014DD6E04A4 +:20258700DD660523DD7504DD74052B46DD700A180EAFDDB60A2808DD34FD2003DD34FEDD96 +:2025A7007E10DDA6113C281DDD4EFDDD46FEDD6E10DD6611CDCC81300CDD6E10DD6611DD97 +:2025C70075FDDD74FEDD4EFDDD46FEDD6E0EDD660FCDCC81300CDD6EFDDD66FEDD750EDD23 +:2025E700740FDD6E0EDD660FDD75FBDD74FC211400397EDD96FD77237EDD9EFE77DD7E0E3F +:20260700DDB60F2009DD7EFDDDB6FECAD466DD7E08DDB6092034DD7E0EDDB60F282CDD7EEE +:20262700FDDDB6FE280FAFDDB60A2809DD7E0CFE3020021823DD460CDD70FADD6E0EDD664D +:202647000F2BDD750EDD740F184EDD7EFDDDB6FE2833AFDDB60A280CDD460ADD70FADD36C8 +:202667000A001812DD6E04DD660523DD7504DD74052B46DD70FADD6EFDDD66FE2BDD75FDFE +:20268700DD74FE1813DD460CDD70FADD6E0EDD660F2BDD750EDD740FDD4E02DD4603DD5E1F +:2026A700FA16003E0021D577CD5281DD7EFAFE0A20183E01DDAE12DDB613200EDD5E02DD59 +:2026C70056033E0021AC5FCD5281C30466DD6EFBDD66FCC36482CDAE81A2FFAFDD77B0DD08 +:2026E70077B1210C00DD5E02DD5603197EE6034F237EE60047DD71FDDD70FE210C00197E14 +:20270700E6FC77237EE6FF77DD6E04DD6605AFB6CAE26BDD6E04DD66057EFE25C2956B3E11 +:2027270002DDAEFDDDB6FE200EDD5E02DD56033E0021AC5FCD5281AFDD77A4DD77A5DD3619 +:20274700B300DD36B220DD36ACFFDD36ADFFAFDD77AADD77ABDD36A8FFDD36A9FFDD36AE7B +:202767000ADD36AF00211B0039DD75B5DD74B6DD36B400AFDD77A6DD77A7AFDD77A2DD779F +:20278700A3DD34042003DD3405DD6E04DD66057EFE30380BDD6E04DD66053E39BE300218A5 +:2027A7006521000039010A00CD4482DD6E04DD66054E060021D0FF094D44210000397E81E7 +:2027C70077237E8877DD7EAADDB6AB280EDD6EA2DD66A3DD75A8DD74A91821DD7EA2DDB6D2 +:2027E700A3200DDD7EB2FE202006DD36B230188ADD6EA2DD66A3DD75ACDD74ADDD34042016 +:2028070003DD34051883DD6E04DD66055ECD34811400002021232A2B2D2E5862636468690C +:202827006C6F70737578916B9969A169246B74696A69F0680569FB680569E16A60698F69FC +:20284700E5686768726886687F68C36A72685768DD6E04DD66052BDD7504DD7405C3956BAF +:20286700DD36A401DD36A500C38167DD6E04DD660546DD70B3C38167DD36B401C38167211A +:202887006800397EC60277237ECE00772B6E672B2B46236668DD75A2DD74A3DD7EAADDB6E0 +:2028A700AB280EDD6EA2DD66A3DD75A8DD74A9182ADD6EA2DD66A3DD75ACDD74ADCB7C28E9 +:2028C7001ADD36A401DD36A500DD4EA2DD46A3A7210000ED42DD75ACDD74ADC38167DD3623 +:2028E700AA01DD36AB00C38167DD36A601DD36A700C38167AFDD77A6DD77A7C38167210A24 +:2029070000E5211D0039E5DD7EA6DDB6A7281D216C00397EC60477237ECE00772B6E670183 +:20292700FCFF095E2356234E2346181A216C00397EC60277237ECE00772B6E672B2B5E2369 +:20294700567A079F4F413E0021386CCD5281F1F1DD75B5DD74B6C3486BDD36AE02DD36AFDC +:20296700001837DD36AE08DD36AF00182DAFDD77A6DD77A7DD36B230DD36AC05DD36AD0014 +:20298700DD36A808DD36A900DD36AE10DD36AF001808DD36AEF0DD36AFFFDD7EA6DDB6A751 +:2029A700281E216800397EC60477237ECE00772B6E6701FCFF095E2356234E2346EB181991 +:2029C700216800397EC60277237ECE00772B6E672B2B46236668010000DD75B9DD74BADD0A +:2029E70071BBDD70BCDD5EAEDD56AFD5211D003901040009E5DD4EBBDD46BCDD5EB9DD56A5 +:202A0700BA3E0021E778CD5281F1F1DD75B5DD74B6DD36B7FCDD36B885AFDDB6B4CAC06AA7 +:202A27003E02DDAEAEDDB6AF200ADD36B7FDDD36B88518493E08DDAEAEDDB6AF2018DD7EDE +:202A4700B9DDB6BADDB6BBDDB6BC2808DD36B700DD36B88618273E10DDAEAEDDB6AF200A4F +:202A6700DD36B702DD36B88618133E0FDDAEAEDDA6AF3C2008DD36B705DD36B886DD6EB7C9 +:202A8700DD66B8AFB62832DD36B200DD4EB7DD46B8211B00395D543E00210965CD5281DD83 +:202AA7004EB5DD46B6211B00395D543E00214976CD5281DD75B5DD74B6C3486BDD6E04DD9F +:202AC7006605234E0600DD71A2DD70A379B02808DD34042003DD3405181C216800397EC64C +:202AE7000277237ECE00772B6E672B2B46236668DD75A2DD74A3DD46A2DD6EB5DD66B670CD +:202B0700DD6EB5DD66B6233600AFDDB6B4280CDD6EB5DD66B646DD70B21822181C216800FD +:202B2700397EC60277237ECE00772B6E672B2B46236668DD75B5DD74B6DD36B220DD36B36C +:202B470000DD6EFDDD66FEE5DD6EA8DD66A9E5DD6EACDD66ADE5DD6EB2E5DD6EB3E5DD6E60 +:202B6700A4DD66A5E5DD4EB5DD46B6DD5E02DD5603CD5D65EB210C0039F9EB4D44210E002D +:202B8700397E8177237E8877180218021842DD4E02DD4603DD6E04DD66055E16003E002194 +:202BA700D577CD5281DD34B02003DD34B1DD6E04DD66057EFE0A20183E01DDAEFDDDB6FECF +:202BC700200EDD5E02DD56033E0021AC5FCD5281DD34042003DD3405C30F67210C00DD4E64 +:202BE70002DD4603097EDDB6FD77237EDDB6FE773E02DDAEFDDDB6FE200EDD5E02DD560375 +:202C07003E0021AC5FCD52813E01DDAEFDDDB6FE2016210400DD4E02DD460309E521060088 +:112C2700094E2346E1712370DD6EB0DD66B1C329819B +:0C051000003062003000307800305800ED +:202C3800CDAE81FEFFDD36FE41DDCB0D7E2816DD36FE61DD4E0CDD460DA7210000ED42DD13 +:202C5800750CDD740DDD6EFEE53E0ADDAE0CDDB60D20043E011801AF4FC5DD6E0CDD660DEA +:202C7800E5DD6E0ADD660BE5DD4E04DD4605DD5E02DD56033E00219B6CCD5281F1F1F1F13B +:032C9800C32981CC +:1200E000C5E5F57CEE806778EE8047F1A7ED42E1C1C9BF +:202C9B00CDAE81D6FFDD6E0ADD660BDD75F8DD74F921000039DD75FADD74FB212C0039DDBC +:202CBB0075FCDD74FD213A00397ED60A77DD4E0CDD460D212400CDCC813811010280DD6EF4 +:202CDB000CDD660D3E80AC67ED423003C31E6EDD6EFCDD66FD23237EE60047237EE680B0CC +:202CFB002831AFDDB60E282BDD6EF8DD66F923DD75F8DD74F92B362DDD4E04DD4605DD6E57 +:202D1B0002DD6603CDC882DD7502DD7403DD7104DD7005DD6EFCDD66FD23237E23B62002A7 +:202D3B00184EDD6E0CDD660D7C079F4F41C5E5DD4E04DD4605DD6E02DD6603CD7B82E5DD99 +:202D5B006EFADD66FB23DD75FADD74FB2BC171212C0039DD5E0CDD560D7A079F4F41CD6BA5 +:202D7B0082DD6EFCDD66FD23237E23B620B41830DD5E02DD5603DD4E0CDD460DCDDE81DD93 +:202D9B006EFADD66FB23DD75FADD74FB2B73DD5E02DD5603CDEE81DD6EFCDD66FD732372DB +:202DBB00DD6EFCDD66FD7E23B620C5210000394D44DD6EFADD66FBA7ED42DD75FFAFDDB65E +:202DDB00FF2840DD6EFADD66FB2BDD75FADD74FB46DD70FE78FE0A300ADD7EFEC630DD773D +:202DFB00FE1809DD7EFEDD8610DD77FEDD6EF8DD66F923DD75F8DD74F92BDD46FE70DD3577 +:202E1B00FF18BADD6EF8DD66F93600DD6E0ADD660BC32981CDAE81FEFFDD36FE41DDCB0B03 +:202E3B007E2816DD36FE61DD4E0ADD460BA7210000ED42DD750ADD740BDD6EFEE50E01C535 +:202E5B00DD6E0ADD660BE5DD6E04DD6605E53E0ADDAE0ADDB60B200DDD5E02DD56037A07B7 +:202E7B009F4F411809DD5E02DD56030100003E00219B6CCD5281F1F1F1F1C32981CDAE8140 +:202E9B00FCFFAFDD77FCDD77FDDD6E02DD6603DD75FEDD74FFDD6EFEDD66FFAFB62833DD71 +:202EBB004E04DD4605DD6EFEDD66FF23DD75FEDD74FF2B5E16003E0021D577CD52817DA424 +:202EDB003C200521FFFF1810DD34FC2003DD34FD18C3DD6EFCDD66FDC32981CD4681DD6E43 +:202EFB000EDD660FE5DD6E0CDD660DE5DD6E0ADD660BE5211400E53E0021C573CD5281F11C +:062F1B00F1F1F1C3298170 +:1E00F200F5E5CD2E82EBE1F1C90405C88710FDC9F5E5CD2E827B2F5F7A2F57E1F1C9EA +:202F2100CDAE81FAFFDD6E02DD6603232323CB3CCB1DCB3CCB1D23DD75FEDD74FF2AA99B90 +:202F4100DD75FCDD74FD7DB42011DD36FCA5DD36FD9B21A59B22A79B22A99BDD6EFCDD665E +:202F6100FD232346236668DD75FADD74FBDD6EFADD66FB232346236668DD4EFADD46FBA754 +:202F8100ED42CA1170DD6EFADD66FB462366682929DD4EFADD46FB09E5030369604E2346F3 +:202FA100E1A7ED42206ADD6EFADD66FB232346236668ED4BA99BA7ED422015DD6EFADD66C0 +:202FC100FB23234623666823234623666822A99BDD6EFADD66FB23237E23666F4E2346DDC2 +:202FE1006EFADD66FB7E8177237E8877DD6EFADD66FB2323E5DD4EFADD46FB030369604E06 +:203001002346030369604E2346E1712370C36E6FDD6EFADD66FB46236668DD4EFEDD46FF36 +:20302100A7ED42DACF70DD6EFADD66FB46236668DD4EFEDD46FFA7ED42201CDD6EFCDD66FF +:20304100FD2323E5DD4EFADD46FB030369604E2346E17123701856DD6EFEDD66FF2929DD71 +:203061004EFADD46FB0922A99BDD6EFCDD66FD2323ED5BA99B7323722AA99B2323E503037A +:2030810069604E2346E1712370DD6EFADD66FB46236668DD4EFEDD46FFA7ED42E52AA99B9C +:2030A100D1732372DD6EFADD66FB712370DD6EFCDD66FD22A99BDD6EFADD66FB2323AF77D3 +:2030C1002377210400DD4EFADD46FB0918272AA99BDD4EFADD46FBA7ED42204F1100043E5C +:2030E1000021E479CD5281DD75FADD74FB7DA43C2006210000C32981DD6EFADD66FB36004F +:20310100233601DD6EFADD66FB2323AF772377210400DD4EFADD46FB09EB3E0021F576CDD8 +:2031210052812AA99BDD75FADD74FBDD6EFADD66FBDD75FCDD74FDDD6EFADD66FB23234687 +:0C314100236668DD75FADD74FBC36E6F59 +:0E011000B7C8CB28CB19CB1CCB1D3D20F5C9A1 +:20314D00CDAE81FCFF2110003901020009DD75FCDD74FDE5DD4E0CDD460DDD5E0ADD560B8A +:20316D003E0021DD66CD5281F1DD75FEDD74FFC32981CD46812A88913A8A91B5B428120132 +:20318D000000DD5E02DD56033A8A912A8891CD5281DD5E02DD56033E00216663CD5281C379 +:2031AD002981CD4681DD6E0ADD660BE5C5D5211700E53E0021C573CD5281F1F1F1F1C3299E +:2031CD0081210000E5210700E53E0021C573CD5281F1F1C32F81CD4681DD6E0CDD660DE5A2 +:1B31ED00DD6E0ADD660BE5D5211A00E53E00216976CD5281F1F1F1F1C30A8259 +:20011E00DDF9DDE1D13333F1ED3939C9B7C8FE083809414C652E00D60818F229CB11CB102F +:1A013E003D20F8C92100003E11CB13CB123DC8CB15CB14ED4230F20918EF39 +:20320800CDAE8176FFAFDD77FEDD77FF2A7C907DB4282BDDCB037E200FED4B7C90DD6E023E +:20322800DD6603CDCC813803C38D73DD6E02DD660329ED4B7A900946236668C3C273DD4EC7 +:2032480002DD4603210000CDCC813803C38D73210000E5210886E53E0021F66ECD5281F117 +:20326800F1DD75FADD74FBCB7C2803C38D73218000E5210400394D44DD5EFADD56FB3E0072 +:2032880021AF71CD5281F1DD75F8DD74F94D44210000CDCC81D28D73AFDD77FCDD77FDDDF5 +:2032A8004EF8DD46F9DD6EFCDD66FDA7ED42D28A7321020039DD4EFCDD46FD097EFE0AC284 +:2032C800527321AB9BDD4EFEDD46FF09360011AB9B3E00214765CD5281DD4E02DD4603A734 +:2032E800ED42205D21000039E501200011AB9B3E00218376CD52814D44E171237079B020AC +:2033080010DD5EFADD56FB3E0021E362CD52811874210000397E23666F7EFE20200B2100AA +:203328000039342320013418E8DD5EFADD56FB3E0021E362CD528121000039462366681850 +:2033480079AFDD77FEDD77FF182D014F00DD6EFEDD66FFA7ED42301F21020039DD4EFCDDF3 +:2033680046FD0946DD6EFEDD66FF23DD75FEDD74FF2B11AB9B1970DD34FC2003DD34FDC359 +:20338800A772C37672011A8611AB9B3E00210965CD5281210A00E511AB9B3E0021BE76CD35 +:1D33A800528101AB9B094D44DD5E02DD56033E00212F6ECD5281F121AB9BC3298180 +:20051C002F6C69622F6C69626572726F722E74787400556E6B6E6F776E206572726F7220E1 +:01053C0000BE +:040F8E00000000005F +:1A33C50021040039C5D55E2356234D44F7300622869121FFFFD1C1C32F81E1 +:0A0158005E2356CD4E82722B73C950 +:2033DF00CDAE81FEFF210C00DD4E02DD4603097EE680280EDD5E02DD56033E0021AC5FCD88 +:2033FF005281210C00DD4E02DD4603097EE6104F237EE603473E10A9B0280621FFFFC3EC1B +:20341F0074DD6E02DD660323234E2346DD6E02DD66035623666AA7ED42DAD274DD6E02DD8D +:20343F0066032323E5210600DD4E02DD4603095E2356E17323726960732372DD6E02DD6635 +:20345F0003E5210600DD4E02DD4603095E2356210800097E23666FA7ED52E5010100DD6E4B +:20347F0002DD66035E23563E0021F979CD5281F1F1DD75FEDD74FF7DB4200521FFFF184D41 +:20349F00DD6E02DD660323237EDD86FE77237EDD8EFF77210C00DD4E02DD4603097EF6401F +:2034BF0077237EF60077210C00097EE6FF77237EE6FB77DD6E02DD66034E234603702B7106 +:2034DF000B0A4F0600DD71FEDD70FF6960C32981CDAE81FCFFDD6E02DD6603DD75FCDD746C +:2034FF00FDDD71FEDD70FFDD6E0ADD660B2BDD750ADD740B237DB42820DD6EFEDD66FF2348 +:20351F00DD75FEDD74FF2B46DD6EFCDD66FD23DD75FCDD74FD2B7018CEDD6E02DD6603C35E +:02353F002981E0 +:16016200F5C5E5784251676BED4CED6CED5C79858257E1C1F1C9FD +:20354100CDAE81FAFF2A7E902BDD75FADD74FB21FFFF227E903E00210000328A9122889144 +:20356100DDCBFB7E2053010500DD5EFADD56FBCD4E8221FB9B195E23562346EBDD75FCDD8A +:2035810074FDDD70FE110500DD4EFADD46FBCD4E8221FE9B194E2346DD5E02DD5603DD7E20 +:2035A100FEDD6EFCDD66FDCD5281DD6EFADD66FB2BDD75FADD74FB18A7C32981CD46812AB5 +:2035C1007E90CB7C200E010A802A7E903E80AC67ED42380B210C0022869121FFFF18533E33 +:2035E10000214175328A91228891DD7E02DDB603DDB604283A010500ED5B7E90CD4E822165 +:20360100FB9B19DD5604DD4E02DD46037123702372010500ED5B7E90CD4E8221FE9B19DD2E +:203621004E0ADD460B7123702A7E9023227E90210000C32981CD4681210000E53E0021BD30 +:0836410075CD5281F1C329810E +:020F920000005D +:20364900CD4681D53E0021BE76CD5281D119EB3E00210965CD5281DD6E02DD6603C3298183 +:2036690021040039D55E2356234D44F7300822869121FFFF4D44D1C32F81CDAE81FEFFDD51 +:203689006E02DD660346DD70FE480600DD6E04DD6605A7ED422008DD6E02DD66031809AF94 +:2036A900DDB6FE2006210000C32981DD34022003DD340318CACDAE81FEFFDD6E02DD660304 +:2036C900DD75FEDD74FFDD6EFEDD66FFAFB6280ADD34FE2003DD34FF18ECDD4E02DD460386 +:0C36E900DD6EFEDD66FFA7ED42C3298107 +:07017800DDF9DDE1D1C1C991 +:2036F500CDAE81FCFF21FCFFDD4E02DD460309DD75FEDD74FF23237E23B6280621FFFFC3F9 +:20371500D2772AA99BDD75FCDD74FDDD4EFCDD46FDDD6EFEDD66FFA7ED423817DD6EFCDD26 +:2037350066FD232346236668DD4EFEDD46FFA7ED423053DD6EFCDD66FD23234E2346DD6E21 +:20375500FCDD66FDA7ED423829DD4EFEDD46FFDD6EFCDD66FDA7ED423816DD6EFCDD66FD64 +:2037750023234E2346DD6EFEDD66FFA7ED4230021814DD6EFCDD66FD232346236668DD7522 +:20379500FCDD74FD1885DD6EFEDD66FF2323E5DD4EFCDD46FD030369604E2346E1712370C5 +:2037B500DD6EFCDD66FD2323DD4EFEDD46FF712370DD6EFCDD66FD22A99B210000C329815D +:2037D500CDAE81FEFF3E0021A562CD5281210C000946236668DD75FEDD74FF7DE6402818E5 +:2037F500DD5E04DD56053E0021AC5FCD52817DB4280621FFFFC3E478DD7EFEE6206FDD7E6D +:20381500FFE603673E20ADB4280621FFFFC3E478210800DD4E04DD4605095E23560A6F033D +:203835000A67A7ED523818DD5E04DD56053E0021AC5FCD52817DB4280621FFFFC3E478DDD1 +:203855006E04DD66054E234603702B710B6960DD460270210C00DD4E04DD4605097EF680E9 +:2038750077237EF600773E0ADDAE02DDB6032007DD7EFEE6012007DD7EFEE6022817DD5EFA +:2038950004DD56053E0021AC5FCD52817DB4280521FFFF183ADD7EFEE6032818210400DD7A +:2038B5004E04DD460509E5210600094E2346E17123701816210400DD4E04DD460509E52106 +:2038D5000800094E2346E1712370DD6E022600C32981CDAE81FEFFDD36FE41DDCB0D7E28A0 +:2038F50016DD36FE61DD4E0CDD460DA7210000ED42DD750CDD740DDD6EFEE50E00C5DD6EC5 +:203915000CDD660DE5DD6E0ADD660BE5DD4E04DD4605DD5E02DD56033E00219B6CCD5281F9 +:20393500F1F1F1F1C32981CDAE81F8FFAFDD77FCDD77FDDD6E02DD6603DD75FEDD74FFDDEE +:203955006EFEDD66FF4E0600218090097EE610280ADD34FE2003DD34FF18E4DD6EFEDD66A6 +:20397500FF7EFE2D2012DD34FC2003DD34FDDD34FE2003DD34FF1813DD6EFEDD66FF7EFEA6 +:203995002B2008DD34FE2003DD34FFDD6E0ADD660BE5DD4E04DD4605DD5EFEDD56FF3E00F5 +:2039B500212D7CCD5281F1DD75F8DD74F9DD71FADD70FBDD7EFCDDB6FD2805CDC882180C24 +:0F39D500DD4EFADD46FBDD6EF8DD66F9C30A82D2 +:20017F00C5D55E2356234E2346EBCDA082C34183EBE3F5DDE5DD210000DD39C5D5DD560945 +:20019F00DD7409DD5E08DD7508CDDA82DDF9DDE1F1D13333C9EBE3F5DDE5DD210000DD3902 +:1D01BF00C5D5DD5609DD7409DD5E08DD7508CDDA82E1C1CD3283DDE1F1D13333C95A +:1539E400CD4681D5211800E53E0021C573CD5281F1F1C32981C1 +:2001DC00F5AF956F3E009C673E00994F3E009847F1C9F5210000010000DD36F821180219A7 +:2001FC0037DDCBFC16DDCBFD16DDCBFE16DDCBFF16DD35F8282ECB11CB10CB15CB14ED52A9 +:20021C0038DD201078DD960738D5200879DD960638CD180479DD96064F78DD9E074730C1D0 +:0A023C002BA718BDF1E56069C1C9E8 +:2039F900CDAE81F8FFAFDD77FEDD77FF3E0021A562CD5281DD7E02DDB6032818DD7E04DDF2 +:203A1900B6052810DD7E0ADDB60B2808DD7E0CDDB60D2006210000C3A47B210C00DD4E0CD3 +:203A3900DD460D0946236668DD75FADD74FB7DE680280EDD5E0CDD560D3E0021AC5FCD523C +:203A590081DD7EFAE6106FDD7EFBE603673E10ADB42806210000C3A47BDD4E0ADD460BDD4C +:203A79005E04DD5605CD4E82DD73FCDD72FDDD6E0CDD660D4E2346DD6E0CDD660D23237E95 +:203A990023666FA7ED42DD75F8DD74F9A7ED523839DD6EFCDD66FDE5DD6E0CDD660D4E23D0 +:203AB90046DD5E02DD56033E0021EF74CD5281F1DD6E0CDD660D7EDD86FC77237EDD8EFDDD +:203AD90077DD6EFCDD66FDC3A47BDD4EF8DD46F9210000CDCC81302BDD6EF8DD66F9E5DDD7 +:203AF9006E0CDD660D4E2346DD5E02DD56033E0021EF74CD5281F1DD6EF8DD66F9DD75FE97 +:203B1900DD74FFDD4EFEDD46FFDD6EFCDD66FDA7ED42E5DD6E02DD6603094D44210A00DD7A +:203B39005E0CDD560D195E23563E0021AF71CD5281F1DD75F8DD74F9CB7C281C210C00DD99 +:203B59004E0CDD460D097EF60077237EF60277AFDD77F8DD77F9181BDD7EF8DDB6F9201331 +:203B7900210C00DD4E0CDD460D097EF60077237EF60177DD6EF8DD66F9DD4EFEDD46FF09C2 +:0E3B9900EBDD4E04DD4605CDEE81EBC3298148 +:18024600F57D2F6F7C2F67792F4F782F47F1C9EB702B712B722B73C9E4 +:203BA700CDAE81FEFFDD36FEFFDD36FFFFDD5E021600218090197EE608280FDD4E02060071 +:203BC70021D0FF09DD75FEDD74FFDD4E020600218090097EE604280FDD4E02060021A9FF3D +:203BE70009DD75FEDD74FFDD4E020600218090097EE602280FDD4E02060021B0FF09DD75AD +:203C0700FEDD74FFDD4E04DD4605DD6EFEDD66FFCDCC813808DD36FEFFDD36FFFFDD6EFEA9 +:203C2700DD66FFC36482CDAE81FAFF110280DD6E0ADD660B3E80AC67ED52380EDD4E0ADDFF +:203C4700460B212400CDCC813007AFDD770ADD770BDD6E02DD66034E0600218090097EE685 +:203C670010280ADD34022003DD340318E4DD6E02DD66037EFE2B200ADD34022003DD340307 +:203C8700186DDD7E0ADDB60B2065DD6E02DD66037EFE30205ADD6E02DD6603237EEE20FE17 +:203CA700582017DD360A10DD360B00210800397EC60277237ECE00771835DD6E02DD66033E +:203CC700237EEE20FE422017DD360A02DD360B00210800397EC60277237ECE00771810DD70 +:203CE700360A08DD360B00DD34022003DD3403DD7E0ADDB60B2008DD360A0ADD360B00AFEE +:203D0700DD77FADD77FBDD77FCDD77FDDD4E0ADD460BDD6E02DD66035ECDA77BDD75FEDDEE +:203D270074FF7DA43C282E21000039DD5E0ADD560B7A079F4F41CD4A8321000039DD5EFE9C +:203D4700DD56FF7A079F4F41CDDE83DD34022003DD340318B7DD7E04DDB6052811DD6E02B6 +:203D6700DD6603E5DD6E04DD6605C1712370DD4EFCDD46FDDD6EFADD66FBC30A82CD468108 +:203D87001600218090197EE604280EDD7E02EE206FDD7E03EE00671806DD6E02DD6603C31D +:203DA7002981CD46811600218090197EE602280EDD7E02EE206FDD7E03EE00671806DD6ECC +:073DC70002DD6603C3298140 +:200F94000101010101010101011111111111010101010101010101010101010101010101CD +:200FB40010202020202020202020202020202020484848484848484848482020202020209D +:200FD400204242424242420202020202020202020202020202020202020202202020202089 +:200FF400204444444444440404040404040404040404040404040404040404202020200154 +:201014000000000000000000000000000000000000000000000000000000000000000000BC +:2010340000000000000000000000000000000000000000000000000000000000000000009C +:2010540000000000000000000000000000000000000000000000000000000000000000007C +:2010740000000000000000000000000000000000000000000000000000000000000000005C +:20025E00C5D55E2356234E2346EBCD5A83C34183E3D5DDE5DD210000DD39DD5609DD7409F5 +:20027E00DD5E08DD7508D5C5F5DD6E0462ED6CDD5605ED5C1959DD5607ED5C19DD5E06500A +:20029E00ED5C19E5DD5E04DD56FEED5CDD6E05DD6607ED6C19DD4606ED4C09E5DD5E04DDC8 +:2002BE005607ED5CDD6E05DD6606ED6CAF1917F5DD5E04DD5606ED5C4A0600AF091755C1BE +:2002DE004CE10984C1814D47EBF1D1D1DDE1D133333333C9F57E83775F237E8A7757237E68 +:0D02FE0089774F237E8877472B2B2BF1C982 +:00000001FF diff --git a/src/fsutil/mkfs.lst b/src/fsutil/mkfs.lst new file mode 100644 index 00000000..05f009e7 --- /dev/null +++ b/src/fsutil/mkfs.lst @@ -0,0 +1,4282 @@ + 1 NAME mkfs(17) + 2 RSEG CODE(0) + 3 RSEG CSTR(0) + 4 RSEG UDATA0(0) + 5 RSEG IDATA0(0) + 6 RSEG CDATA0(0) + 7 PUBLIC _fmt + 8 PUBLIC _immov + 9 PUBLIC _quick + 10 EXTERN _read + 11 PUBLIC _verb + 12 EXTERN _write + 13 PUBLIC _yes + 14 EXTERN abort + 15 EXTERN atoi + 16 EXTERN bcopy + 17 EXTERN bfill + 18 PUBLIC bitmap_block + 19 PUBLIC bitmap_dump + 20 PUBLIC bitmap_final + 21 PUBLIC bitmap_immov + 22 PUBLIC bitmap_inode + 23 PUBLIC block_bitmap + 24 PUBLIC bootblock + 25 EXTERN bzero + 26 EXTERN close + 27 PUBLIC da_read + 28 PUBLIC da_write + 29 PUBLIC daread + 30 PUBLIC dev + 31 PUBLIC device_handle + 32 PUBLIC device_name + 33 PUBLIC dirbuf + 34 PUBLIC doformatting + 35 PUBLIC dwrite + 36 EXTERN errno + 37 EXTERN exit + 38 EXTERN fflush + 39 EXTERN fgets + 40 EXTERN fprintf + 41 EXTERN fputs + 42 PUBLIC immov_bitmap + 43 PUBLIC inode + 44 PUBLIC inode_bitmap + 45 EXTERN int_min + 46 EXTERN lseek + 47 PUBLIC main + 48 EXTERN malloc + 49 PUBLIC mkfs + 50 EXTERN open + 51 EXTERN perror + 52 EXTERN printf + 53 EXTERN stderr + 54 EXTERN stdin + 55 EXTERN stdout + 56 EXTERN strcpy + 57 PUBLIC yes + 58 PUBLIC zeroed + 59 EXTERN ?CL64180B_4_06_L00 + 60 EXTERN ?C_LSH_L01 + 61 EXTERN ?US_RSH_L02 + 62 EXTERN ?US_DIV_L02 + 63 EXTERN ?US_MOD_L02 + 64 EXTERN ?SS_CMP_L02 + 65 EXTERN ?L_LSH_L03 + 66 EXTERN ?SL_RSH_L03 + 67 EXTERN ?L_AND_L03 + 68 EXTERN ?SL_CMP_L03 + 69 EXTERN ?C_V_SWITCH_L06 + 70 EXTERN ?BANK_CALL_DIRECT_L08 + 71 EXTERN ?BANK_LEAVE_DIRECT_L08 + 72 EXTERN ?ENT_PARM_DIRECT_L09 + 73 EXTERN ?ENT_AUTO_DIRECT_L09 + 74 RSEG CODE + 00000000 75 daread: + 00000000 CD 00 00 76 CALL LWRD ?ENT_PARM_DIRECT_L09 + 00000003 21 1A 06 77 LD HL,?0002 + 00000006 E5 78 PUSH HL + 00000007 4B 79 LD C,E + 00000008 42 80 LD B,D + 00000009 ED 5B 02 04 81 LD DE,(dev) + 0000000D 3E 78 82 LD A,BYTE3 da_read + 0000000F 21 78 00 83 LD HL,LWRD da_read + 00000012 CD 00 00 84 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000015 F1 85 POP AF + 00000016 3E 02 86 LD A,2 + 00000018 AC 87 XOR H + 00000019 B5 88 OR L + 0000001A 28 1D 89 JR Z,?0004 + 0000001C 90 ?0003: + 0000001C DD 6E 02 91 LD L,(IX+2) + 0000001F DD 66 03 92 LD H,(IX+3) + 00000022 E5 93 PUSH HL + 00000023 21 00 00 94 LD HL,?0005 + 00000026 E5 95 PUSH HL + 00000027 3E 00 96 LD A,BYTE3 printf + 00000029 21 00 00 97 LD HL,LWRD printf + 0000002C CD 00 00 98 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000002F F1 99 POP AF + 00000030 F1 100 POP AF + 00000031 3E 00 101 LD A,BYTE3 abort + 00000033 21 00 00 102 LD HL,LWRD abort + 00000036 CD 00 00 103 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000039 104 ?0004: + 00000039 21 1A 06 105 LD HL,?0002 + 0000003C C3 00 00 106 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 0000003F 107 dwrite: + 0000003F CD 00 00 108 CALL LWRD ?ENT_PARM_DIRECT_L09 + 00000042 C5 109 PUSH BC + 00000043 4B 110 LD C,E + 00000044 42 111 LD B,D + 00000045 ED 5B 02 04 112 LD DE,(dev) + 00000049 3E 3B 113 LD A,BYTE3 da_write + 0000004B 21 3B 01 114 LD HL,LWRD da_write + 0000004E CD 00 00 115 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000051 F1 116 POP AF + 00000052 3E 02 117 LD A,2 + 00000054 AC 118 XOR H + 00000055 B5 119 OR L + 00000056 28 1D 120 JR Z,?0007 + 00000058 121 ?0006: + 00000058 DD 6E 02 122 LD L,(IX+2) + 0000005B DD 66 03 123 LD H,(IX+3) + 0000005E E5 124 PUSH HL + 0000005F 21 1A 00 125 LD HL,?0008 + 00000062 E5 126 PUSH HL + 00000063 3E 00 127 LD A,BYTE3 printf + 00000065 21 00 00 128 LD HL,LWRD printf + 00000068 CD 00 00 129 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000006B F1 130 POP AF + 0000006C F1 131 POP AF + 0000006D 3E 00 132 LD A,BYTE3 abort + 0000006F 21 00 00 133 LD HL,LWRD abort + 00000072 CD 00 00 134 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000075 135 ?0007: + 00000075 C3 00 00 136 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00000078 137 da_read: + 00000078 CD 00 00 138 CALL LWRD ?ENT_PARM_DIRECT_L09 + 0000007B 21 00 00 139 LD HL,0 + 0000007E E5 140 PUSH HL + 0000007F 69 141 LD L,C + 00000080 60 142 LD H,B + 00000081 01 00 00 143 LD BC,0 + 00000084 3E 09 144 LD A,9 + 00000086 CD 00 00 145 CALL LWRD ?L_LSH_L03 + 00000089 C5 146 PUSH BC + 0000008A E5 147 PUSH HL + 0000008B ED 5B 00 00 148 LD DE,(device_handle) + 0000008F 3E 00 149 LD A,BYTE3 lseek + 00000091 21 00 00 150 LD HL,LWRD lseek + 00000094 CD 00 00 151 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000097 F1 152 POP AF + 00000098 F1 153 POP AF + 00000099 F1 154 POP AF + 0000009A CB 78 155 BIT 7,B + 0000009C 28 2E 156 JR Z,?0010 + 0000009E 157 ?0009: + 0000009E 21 35 00 158 LD HL,?0011 + 000000A1 E5 159 PUSH HL + 000000A2 3E 00 160 LD A,BYTE3 printf + 000000A4 21 00 00 161 LD HL,LWRD printf + 000000A7 CD 00 00 162 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000000AA F1 163 POP AF + 000000AB 11 00 00 164 LD DE,stdout + 000000AE 3E 00 165 LD A,BYTE3 fflush + 000000B0 21 00 00 166 LD HL,LWRD fflush + 000000B3 CD 00 00 167 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000000B6 11 02 00 168 LD DE,device_name + 000000B9 3E 00 169 LD A,BYTE3 perror + 000000BB 21 00 00 170 LD HL,LWRD perror + 000000BE CD 00 00 171 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000000C1 11 01 00 172 LD DE,1 + 000000C4 3E 00 173 LD A,BYTE3 exit + 000000C6 21 00 00 174 LD HL,LWRD exit + 000000C9 CD 00 00 175 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000000CC 176 ?0010: + 000000CC 21 00 02 177 LD HL,512 + 000000CF E5 178 PUSH HL + 000000D0 DD 4E 0A 179 LD C,(IX+10) + 000000D3 DD 46 0B 180 LD B,(IX+11) + 000000D6 ED 5B 00 00 181 LD DE,(device_handle) + 000000DA 3E 00 182 LD A,BYTE3 _read + 000000DC 21 00 00 183 LD HL,LWRD _read + 000000DF CD 00 00 184 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000000E2 F1 185 POP AF + 000000E3 3E 02 186 LD A,2 + 000000E5 AC 187 XOR H + 000000E6 B5 188 OR L + 000000E7 28 4C 189 JR Z,?0013 + 000000E9 190 ?0012: + 000000E9 2A 00 00 191 LD HL,(errno) + 000000EC 7D 192 LD A,L + 000000ED B4 193 OR H + 000000EE 20 17 194 JR NZ,?0015 + 000000F0 195 ?0014: + 000000F0 21 00 02 196 LD HL,512 + 000000F3 E5 197 PUSH HL + 000000F4 0E AA 198 LD C,170 + 000000F6 DD 5E 0A 199 LD E,(IX+10) + 000000F9 DD 56 0B 200 LD D,(IX+11) + 000000FC 3E 00 201 LD A,BYTE3 bfill + 000000FE 21 00 00 202 LD HL,LWRD bfill + 00000101 CD 00 00 203 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000104 E1 204 POP HL + 00000105 18 2E 205 JR ?0016 + 00000107 206 ?0015: + 00000107 21 42 00 207 LD HL,?0017 + 0000010A E5 208 PUSH HL + 0000010B 3E 00 209 LD A,BYTE3 printf + 0000010D 21 00 00 210 LD HL,LWRD printf + 00000110 CD 00 00 211 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000113 F1 212 POP AF + 00000114 11 00 00 213 LD DE,stdout + 00000117 3E 00 214 LD A,BYTE3 fflush + 00000119 21 00 00 215 LD HL,LWRD fflush + 0000011C CD 00 00 216 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000011F 11 02 00 217 LD DE,device_name + 00000122 3E 00 218 LD A,BYTE3 perror + 00000124 21 00 00 219 LD HL,LWRD perror + 00000127 CD 00 00 220 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000012A 11 01 00 221 LD DE,1 + 0000012D 3E 00 222 LD A,BYTE3 exit + 0000012F 21 00 00 223 LD HL,LWRD exit + 00000132 CD 00 00 224 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000135 225 ?0016: + 00000135 226 ?0013: + 00000135 21 00 02 227 LD HL,512 + 00000138 C3 00 00 228 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 0000013B 229 da_write: + 0000013B CD 00 00 230 CALL LWRD ?ENT_PARM_DIRECT_L09 + 0000013E 21 00 00 231 LD HL,0 + 00000141 E5 232 PUSH HL + 00000142 69 233 LD L,C + 00000143 60 234 LD H,B + 00000144 01 00 00 235 LD BC,0 + 00000147 3E 09 236 LD A,9 + 00000149 CD 00 00 237 CALL LWRD ?L_LSH_L03 + 0000014C C5 238 PUSH BC + 0000014D E5 239 PUSH HL + 0000014E ED 5B 00 00 240 LD DE,(device_handle) + 00000152 3E 00 241 LD A,BYTE3 lseek + 00000154 21 00 00 242 LD HL,LWRD lseek + 00000157 CD 00 00 243 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000015A F1 244 POP AF + 0000015B F1 245 POP AF + 0000015C F1 246 POP AF + 0000015D CB 78 247 BIT 7,B + 0000015F 28 2E 248 JR Z,?0019 + 00000161 249 ?0018: + 00000161 21 35 00 250 LD HL,?0011 + 00000164 E5 251 PUSH HL + 00000165 3E 00 252 LD A,BYTE3 printf + 00000167 21 00 00 253 LD HL,LWRD printf + 0000016A CD 00 00 254 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000016D F1 255 POP AF + 0000016E 11 00 00 256 LD DE,stdout + 00000171 3E 00 257 LD A,BYTE3 fflush + 00000173 21 00 00 258 LD HL,LWRD fflush + 00000176 CD 00 00 259 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000179 11 02 00 260 LD DE,device_name + 0000017C 3E 00 261 LD A,BYTE3 perror + 0000017E 21 00 00 262 LD HL,LWRD perror + 00000181 CD 00 00 263 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000184 11 01 00 264 LD DE,1 + 00000187 3E 00 265 LD A,BYTE3 exit + 00000189 21 00 00 266 LD HL,LWRD exit + 0000018C CD 00 00 267 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000018F 268 ?0019: + 0000018F 21 00 02 269 LD HL,512 + 00000192 E5 270 PUSH HL + 00000193 DD 4E 0A 271 LD C,(IX+10) + 00000196 DD 46 0B 272 LD B,(IX+11) + 00000199 ED 5B 00 00 273 LD DE,(device_handle) + 0000019D 3E 00 274 LD A,BYTE3 _write + 0000019F 21 00 00 275 LD HL,LWRD _write + 000001A2 CD 00 00 276 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000001A5 F1 277 POP AF + 000001A6 3E 02 278 LD A,2 + 000001A8 AC 279 XOR H + 000001A9 B5 280 OR L + 000001AA 28 2E 281 JR Z,?0021 + 000001AC 282 ?0020: + 000001AC 21 4F 00 283 LD HL,?0022 + 000001AF E5 284 PUSH HL + 000001B0 3E 00 285 LD A,BYTE3 printf + 000001B2 21 00 00 286 LD HL,LWRD printf + 000001B5 CD 00 00 287 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000001B8 F1 288 POP AF + 000001B9 11 00 00 289 LD DE,stdout + 000001BC 3E 00 290 LD A,BYTE3 fflush + 000001BE 21 00 00 291 LD HL,LWRD fflush + 000001C1 CD 00 00 292 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000001C4 11 02 00 293 LD DE,device_name + 000001C7 3E 00 294 LD A,BYTE3 perror + 000001C9 21 00 00 295 LD HL,LWRD perror + 000001CC CD 00 00 296 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000001CF 11 01 00 297 LD DE,1 + 000001D2 3E 00 298 LD A,BYTE3 exit + 000001D4 21 00 00 299 LD HL,LWRD exit + 000001D7 CD 00 00 300 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000001DA 301 ?0021: + 000001DA 21 00 02 302 LD HL,512 + 000001DD C3 00 00 303 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000001E0 304 yes: + 000001E0 CD 00 00 305 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 000001E3 EC FF 306 DEFW 65516 + 000001E5 01 00 00 307 LD BC,stdout + 000001E8 DD 5E 02 308 LD E,(IX+2) + 000001EB DD 56 03 309 LD D,(IX+3) + 000001EE 3E 00 310 LD A,BYTE3 fputs + 000001F0 21 00 00 311 LD HL,LWRD fputs + 000001F3 CD 00 00 312 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000001F6 11 00 00 313 LD DE,stdout + 000001F9 3E 00 314 LD A,BYTE3 fflush + 000001FB 21 00 00 315 LD HL,LWRD fflush + 000001FE CD 00 00 316 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000201 3A 01 0A 317 LD A,(_yes) + 00000204 B7 318 OR A + 00000205 28 10 319 JR Z,?0024 + 00000207 320 ?0023: + 00000207 01 00 00 321 LD BC,stdout + 0000020A 11 5D 00 322 LD DE,?0025 + 0000020D 3E 00 323 LD A,BYTE3 fputs + 0000020F 21 00 00 324 LD HL,LWRD fputs + 00000212 CD 00 00 325 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000215 18 2D 326 JR ?0026 + 00000217 327 ?0024: + 00000217 21 00 00 328 LD HL,stdin + 0000021A E5 329 PUSH HL + 0000021B 01 14 00 330 LD BC,20 + 0000021E 21 02 00 331 LD HL,2 + 00000221 39 332 ADD HL,SP + 00000222 5D 333 LD E,L + 00000223 54 334 LD D,H + 00000224 3E 00 335 LD A,BYTE3 fgets + 00000226 21 00 00 336 LD HL,LWRD fgets + 00000229 CD 00 00 337 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000022C F1 338 POP AF + 0000022D 7D 339 LD A,L + 0000022E B4 340 OR H + 0000022F 28 0E 341 JR Z,?0027 + 00000231 DD 7E EC 342 LD A,(IX-20) + 00000234 FE 79 343 CP 121 + 00000236 28 0C 344 JR Z,?0028 + 00000238 DD 7E EC 345 LD A,(IX-20) + 0000023B FE 59 346 CP 89 + 0000023D 28 05 347 JR Z,?0028 + 0000023F 348 ?0032: + 0000023F 349 ?0031: + 0000023F 350 ?0029: + 0000023F 351 ?0030: + 0000023F 352 ?0027: + 0000023F 21 00 00 353 LD HL,0 + 00000242 18 03 354 JR ?0033 + 00000244 355 ?0028: + 00000244 356 ?0026: + 00000244 21 01 00 357 LD HL,1 + 00000247 358 ?0033: + 00000247 C3 00 00 359 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 0000024A 360 mkfs: + 0000024A CD 00 00 361 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 0000024D DC FF 362 DEFW 65500 + 0000024F 3A 03 0A 363 LD A,(_verb) + 00000252 B7 364 OR A + 00000253 28 18 365 JR Z,?0035 + 00000255 366 ?0034: + 00000255 21 60 00 367 LD HL,?0036 + 00000258 E5 368 PUSH HL + 00000259 3E 00 369 LD A,BYTE3 printf + 0000025B 21 00 00 370 LD HL,LWRD printf + 0000025E CD 00 00 371 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000261 F1 372 POP AF + 00000262 11 00 00 373 LD DE,stdout + 00000265 3E 00 374 LD A,BYTE3 fflush + 00000267 21 00 00 375 LD HL,LWRD fflush + 0000026A CD 00 00 376 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000026D 377 ?0035: + 0000026D AF 378 XOR A + 0000026E DD 77 DC 379 LD (IX-36),A + 00000271 DD 77 DD 380 LD (IX-35),A + 00000274 381 ?0038: + 00000274 01 00 08 382 LD BC,2048 + 00000277 DD 6E DC 383 LD L,(IX-36) + 0000027A DD 66 DD 384 LD H,(IX-35) + 0000027D A7 385 AND A + 0000027E ED 42 386 SBC HL,BC + 00000280 D2 13 03 387 JP NC,?0037 + 00000283 388 ?0039: + 00000283 01 00 02 389 LD BC,512 + 00000286 DD 5E DC 390 LD E,(IX-36) + 00000289 DD 56 DD 391 LD D,(IX-35) + 0000028C 21 00 08 392 LD HL,2048 + 0000028F A7 393 AND A + 00000290 ED 52 394 SBC HL,DE + 00000292 EB 395 EX DE,HL + 00000293 3E 00 396 LD A,BYTE3 int_min + 00000295 21 00 00 397 LD HL,LWRD int_min + 00000298 CD 00 00 398 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000029B DD 75 DE 399 LD (IX-34),L + 0000029E DD 74 DF 400 LD (IX-33),H + 000002A1 01 00 02 401 LD BC,512 + 000002A4 A7 402 AND A + 000002A5 ED 42 403 SBC HL,BC + 000002A7 30 1B 404 JR NC,?0042 + 000002A9 405 ?0041: + 000002A9 06 09 406 LD B,9 + 000002AB DD 5E DC 407 LD E,(IX-36) + 000002AE DD 56 DD 408 LD D,(IX-35) + 000002B1 CD 00 00 409 CALL LWRD ?US_RSH_L02 + 000002B4 3E 00 410 LD A,BYTE3 daread + 000002B6 21 00 00 411 LD HL,LWRD daread + 000002B9 CD 00 00 412 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000002BC DD 75 FE 413 LD (IX-2),L + 000002BF DD 74 FF 414 LD (IX-1),H + 000002C2 18 08 415 JR ?0043 + 000002C4 416 ?0042: + 000002C4 DD 36 FE 02 417 LD (IX-2),LOW(zeroed) + 000002C8 DD 36 FF 02 418 LD (IX-1),HIGH(zeroed) + 000002CC 419 ?0043: + 000002CC DD 6E DE 420 LD L,(IX-34) + 000002CF DD 66 DF 421 LD H,(IX-33) + 000002D2 E5 422 PUSH HL + 000002D3 DD 4E FE 423 LD C,(IX-2) + 000002D6 DD 46 FF 424 LD B,(IX-1) + 000002D9 21 00 00 425 LD HL,bootblock + 000002DC DD 5E DC 426 LD E,(IX-36) + 000002DF DD 56 DD 427 LD D,(IX-35) + 000002E2 19 428 ADD HL,DE + 000002E3 EB 429 EX DE,HL + 000002E4 3E 00 430 LD A,BYTE3 bcopy + 000002E6 21 00 00 431 LD HL,LWRD bcopy + 000002E9 CD 00 00 432 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000002EC E1 433 POP HL + 000002ED DD 4E FE 434 LD C,(IX-2) + 000002F0 DD 46 FF 435 LD B,(IX-1) + 000002F3 C5 436 PUSH BC + 000002F4 06 09 437 LD B,9 + 000002F6 DD 5E DC 438 LD E,(IX-36) + 000002F9 DD 56 DD 439 LD D,(IX-35) + 000002FC CD 00 00 440 CALL LWRD ?US_RSH_L02 + 000002FF 3E 3F 441 LD A,BYTE3 dwrite + 00000301 21 3F 00 442 LD HL,LWRD dwrite + 00000304 C1 443 POP BC + 00000305 CD 00 00 444 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000308 3E 02 445 LD A,2 + 0000030A DD 86 DD 446 ADD A,(IX-35) + 0000030D DD 77 DD 447 LD (IX-35),A + 00000310 C3 74 02 448 JP LWRD ?0038 + 00000313 449 ?0037: + 00000313 01 00 02 450 LD BC,512 + 00000316 11 02 02 451 LD DE,zeroed + 00000319 3E 00 452 LD A,BYTE3 bzero + 0000031B 21 00 00 453 LD HL,LWRD bzero + 0000031E CD 00 00 454 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000321 3A 03 0A 455 LD A,(_verb) + 00000324 B7 456 OR A + 00000325 28 18 457 JR Z,?0045 + 00000327 458 ?0044: + 00000327 21 78 00 459 LD HL,?0046 + 0000032A E5 460 PUSH HL + 0000032B 3E 00 461 LD A,BYTE3 printf + 0000032D 21 00 00 462 LD HL,LWRD printf + 00000330 CD 00 00 463 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000333 F1 464 POP AF + 00000334 11 00 00 465 LD DE,stdout + 00000337 3E 00 466 LD A,BYTE3 fflush + 00000339 21 00 00 467 LD HL,LWRD fflush + 0000033C CD 00 00 468 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000033F 469 ?0045: + 0000033F 3A 02 0A 470 LD A,(_quick) + 00000342 B7 471 OR A + 00000343 28 19 472 JR Z,?0048 + 00000345 473 ?0047: + 00000345 DD 6E 04 474 LD L,(IX+4) + 00000348 DD 66 05 475 LD H,(IX+5) + 0000034B DD 4E 0A 476 LD C,(IX+10) + 0000034E DD 46 0B 477 LD B,(IX+11) + 00000351 09 478 ADD HL,BC + 00000352 01 05 00 479 LD BC,5 + 00000355 09 480 ADD HL,BC + 00000356 DD 75 DE 481 LD (IX-34),L + 00000359 DD 74 DF 482 LD (IX-33),H + 0000035C 18 0C 483 JR ?0049 + 0000035E 484 ?0048: + 0000035E DD 6E 02 485 LD L,(IX+2) + 00000361 DD 66 03 486 LD H,(IX+3) + 00000364 DD 75 DE 487 LD (IX-34),L + 00000367 DD 74 DF 488 LD (IX-33),H + 0000036A 489 ?0049: + 0000036A 21 05 00 490 LD HL,5 + 0000036D DD 4E 0A 491 LD C,(IX+10) + 00000370 DD 46 0B 492 LD B,(IX+11) + 00000373 09 493 ADD HL,BC + 00000374 DD 75 DC 494 LD (IX-36),L + 00000377 DD 74 DD 495 LD (IX-35),H + 0000037A 496 ?0051: + 0000037A DD 4E DE 497 LD C,(IX-34) + 0000037D DD 46 DF 498 LD B,(IX-33) + 00000380 DD 6E DC 499 LD L,(IX-36) + 00000383 DD 66 DD 500 LD H,(IX-35) + 00000386 A7 501 AND A + 00000387 ED 42 502 SBC HL,BC + 00000389 30 51 503 JR NC,?0050 + 0000038B 504 ?0052: + 0000038B 3A 03 0A 505 LD A,(_verb) + 0000038E B7 506 OR A + 0000038F 28 30 507 JR Z,?0054 + 00000391 01 09 00 508 LD BC,9 + 00000394 DD 5E DC 509 LD E,(IX-36) + 00000397 DD 56 DD 510 LD D,(IX-35) + 0000039A CD 00 00 511 CALL LWRD ?US_MOD_L02 + 0000039D 7B 512 LD A,E + 0000039E B2 513 OR D + 0000039F 20 20 514 JR NZ,?0054 + 000003A1 515 ?0056: + 000003A1 516 ?0055: + 000003A1 517 ?0053: + 000003A1 DD 6E DC 518 LD L,(IX-36) + 000003A4 DD 66 DD 519 LD H,(IX-35) + 000003A7 E5 520 PUSH HL + 000003A8 21 9C 00 521 LD HL,?0057 + 000003AB E5 522 PUSH HL + 000003AC 3E 00 523 LD A,BYTE3 printf + 000003AE 21 00 00 524 LD HL,LWRD printf + 000003B1 CD 00 00 525 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000003B4 F1 526 POP AF + 000003B5 F1 527 POP AF + 000003B6 11 00 00 528 LD DE,stdout + 000003B9 3E 00 529 LD A,BYTE3 fflush + 000003BB 21 00 00 530 LD HL,LWRD fflush + 000003BE CD 00 00 531 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000003C1 532 ?0054: + 000003C1 01 02 02 533 LD BC,zeroed + 000003C4 DD 5E DC 534 LD E,(IX-36) + 000003C7 DD 56 DD 535 LD D,(IX-35) + 000003CA 13 536 INC DE + 000003CB DD 73 DC 537 LD (IX-36),E + 000003CE DD 72 DD 538 LD (IX-35),D + 000003D1 1B 539 DEC DE + 000003D2 3E 3F 540 LD A,BYTE3 dwrite + 000003D4 21 3F 00 541 LD HL,LWRD dwrite + 000003D7 CD 00 00 542 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000003DA 18 9E 543 JR ?0051 + 000003DC 544 ?0050: + 000003DC 3A 03 0A 545 LD A,(_verb) + 000003DF B7 546 OR A + 000003E0 28 27 547 JR Z,?0059 + 000003E2 548 ?0058: + 000003E2 DD 6E DC 549 LD L,(IX-36) + 000003E5 DD 66 DD 550 LD H,(IX-35) + 000003E8 2B 551 DEC HL + 000003E9 DD 75 DC 552 LD (IX-36),L + 000003EC DD 74 DD 553 LD (IX-35),H + 000003EF E5 554 PUSH HL + 000003F0 21 A5 00 555 LD HL,?0060 + 000003F3 E5 556 PUSH HL + 000003F4 3E 00 557 LD A,BYTE3 printf + 000003F6 21 00 00 558 LD HL,LWRD printf + 000003F9 CD 00 00 559 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000003FC F1 560 POP AF + 000003FD F1 561 POP AF + 000003FE 11 00 00 562 LD DE,stdout + 00000401 3E 00 563 LD A,BYTE3 fflush + 00000403 21 00 00 564 LD HL,LWRD fflush + 00000406 CD 00 00 565 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000409 566 ?0059: + 00000409 3A 03 0A 567 LD A,(_verb) + 0000040C B7 568 OR A + 0000040D 28 18 569 JR Z,?0062 + 0000040F 570 ?0061: + 0000040F 21 AE 00 571 LD HL,?0063 + 00000412 E5 572 PUSH HL + 00000413 3E 00 573 LD A,BYTE3 printf + 00000415 21 00 00 574 LD HL,LWRD printf + 00000418 CD 00 00 575 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000041B F1 576 POP AF + 0000041C 11 00 00 577 LD DE,stdout + 0000041F 3E 00 578 LD A,BYTE3 fflush + 00000421 21 00 00 579 LD HL,LWRD fflush + 00000424 CD 00 00 580 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000427 581 ?0062: + 00000427 01 1E 00 582 LD BC,30 + 0000042A 21 04 00 583 LD HL,4 + 0000042D 39 584 ADD HL,SP + 0000042E 5D 585 LD E,L + 0000042F 54 586 LD D,H + 00000430 3E 00 587 LD A,BYTE3 bzero + 00000432 21 00 00 588 LD HL,LWRD bzero + 00000435 CD 00 00 589 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000438 DD 36 E0 C6 590 LD (IX-32),198 + 0000043C DD 36 E1 31 591 LD (IX-31),49 + 00000440 21 05 00 592 LD HL,5 + 00000443 DD 4E 0A 593 LD C,(IX+10) + 00000446 DD 46 0B 594 LD B,(IX+11) + 00000449 09 595 ADD HL,BC + 0000044A DD 75 E2 596 LD (IX-30),L + 0000044D DD 74 E3 597 LD (IX-29),H + 00000450 DD 6E 04 598 LD L,(IX+4) + 00000453 DD 66 05 599 LD H,(IX+5) + 00000456 DD 75 E4 600 LD (IX-28),L + 00000459 DD 74 E5 601 LD (IX-27),H + 0000045C DD 6E 02 602 LD L,(IX+2) + 0000045F DD 66 03 603 LD H,(IX+3) + 00000462 DD 75 E6 604 LD (IX-26),L + 00000465 DD 74 E7 605 LD (IX-25),H + 00000468 DD 6E 04 606 LD L,(IX+4) + 0000046B DD 66 05 607 LD H,(IX+5) + 0000046E 29 608 ADD HL,HL + 0000046F 29 609 ADD HL,HL + 00000470 29 610 ADD HL,HL + 00000471 11 FE FF 611 LD DE,65534 + 00000474 19 612 ADD HL,DE + 00000475 DD 75 EA 613 LD (IX-22),L + 00000478 DD 74 EB 614 LD (IX-21),H + 0000047B DD 6E 04 615 LD L,(IX+4) + 0000047E DD 66 05 616 LD H,(IX+5) + 00000481 09 617 ADD HL,BC + 00000482 01 06 00 618 LD BC,6 + 00000485 09 619 ADD HL,BC + 00000486 4D 620 LD C,L + 00000487 44 621 LD B,H + 00000488 DD 6E 02 622 LD L,(IX+2) + 0000048B DD 66 03 623 LD H,(IX+3) + 0000048E A7 624 AND A + 0000048F ED 42 625 SBC HL,BC + 00000491 DD 75 E8 626 LD (IX-24),L + 00000494 DD 74 E9 627 LD (IX-23),H + 00000497 2A 04 06 628 LD HL,(bitmap_inode) + 0000049A DD 75 F0 629 LD (IX-16),L + 0000049D DD 74 F1 630 LD (IX-15),H + 000004A0 2A 08 06 631 LD HL,(bitmap_block) + 000004A3 DD 75 F2 632 LD (IX-14),L + 000004A6 DD 74 F3 633 LD (IX-13),H + 000004A9 2A 0C 06 634 LD HL,(bitmap_immov) + 000004AC DD 75 F4 635 LD (IX-12),L + 000004AF DD 74 F5 636 LD (IX-11),H + 000004B2 2A 10 06 637 LD HL,(bitmap_final) + 000004B5 DD 75 F6 638 LD (IX-10),L + 000004B8 DD 74 F7 639 LD (IX-9),H + 000004BB AF 640 XOR A + 000004BC DD 77 DC 641 LD (IX-36),A + 000004BF DD 77 DD 642 LD (IX-35),A + 000004C2 643 ?0065: + 000004C2 DD 6E 04 644 LD L,(IX+4) + 000004C5 DD 66 05 645 LD H,(IX+5) + 000004C8 DD 4E 0A 646 LD C,(IX+10) + 000004CB DD 46 0B 647 LD B,(IX+11) + 000004CE 09 648 ADD HL,BC + 000004CF 01 06 00 649 LD BC,6 + 000004D2 09 650 ADD HL,BC + 000004D3 4D 651 LD C,L + 000004D4 44 652 LD B,H + 000004D5 DD 6E DC 653 LD L,(IX-36) + 000004D8 DD 66 DD 654 LD H,(IX-35) + 000004DB A7 655 AND A + 000004DC ED 42 656 SBC HL,BC + 000004DE 30 26 657 JR NC,?0064 + 000004E0 658 ?0066: + 000004E0 06 03 659 LD B,3 + 000004E2 DD 5E DC 660 LD E,(IX-36) + 000004E5 DD 56 DD 661 LD D,(IX-35) + 000004E8 CD 00 00 662 CALL LWRD ?US_RSH_L02 + 000004EB 2A 16 06 663 LD HL,(block_bitmap) + 000004EE 19 664 ADD HL,DE + 000004EF DD 7E DC 665 LD A,(IX-36) + 000004F2 E6 07 666 AND 7 + 000004F4 47 667 LD B,A + 000004F5 3E 01 668 LD A,1 + 000004F7 CD 00 00 669 CALL LWRD ?C_LSH_L01 + 000004FA B6 670 OR (HL) + 000004FB 77 671 LD (HL),A + 000004FC DD 34 DC 672 INC (IX-36) + 000004FF 20 03 673 JR NZ,?0153 + 00000501 DD 34 DD 674 INC (IX-35) + 00000504 675 ?0153: + 00000504 18 BC 676 JR ?0065 + 00000506 677 ?0064: + 00000506 ED 4B 08 06 678 LD BC,(bitmap_block) + 0000050A 2A 0C 06 679 LD HL,(bitmap_immov) + 0000050D A7 680 AND A + 0000050E ED 42 681 SBC HL,BC + 00000510 29 682 ADD HL,HL + 00000511 29 683 ADD HL,HL + 00000512 29 684 ADD HL,HL + 00000513 DD 75 DE 685 LD (IX-34),L + 00000516 DD 74 DF 686 LD (IX-33),H + 00000519 DD 6E 02 687 LD L,(IX+2) + 0000051C DD 66 03 688 LD H,(IX+3) + 0000051F DD 75 DC 689 LD (IX-36),L + 00000522 DD 74 DD 690 LD (IX-35),H + 00000525 691 ?0069: + 00000525 DD 6E DE 692 LD L,(IX-34) + 00000528 DD 66 DF 693 LD H,(IX-33) + 0000052B DD 4E DC 694 LD C,(IX-36) + 0000052E DD 46 DD 695 LD B,(IX-35) + 00000531 A7 696 AND A + 00000532 ED 42 697 SBC HL,BC + 00000534 28 26 698 JR Z,?0068 + 00000536 699 ?0070: + 00000536 06 03 700 LD B,3 + 00000538 DD 5E DC 701 LD E,(IX-36) + 0000053B DD 56 DD 702 LD D,(IX-35) + 0000053E CD 00 00 703 CALL LWRD ?US_RSH_L02 + 00000541 2A 16 06 704 LD HL,(block_bitmap) + 00000544 19 705 ADD HL,DE + 00000545 DD 7E DC 706 LD A,(IX-36) + 00000548 E6 07 707 AND 7 + 0000054A 47 708 LD B,A + 0000054B 3E 01 709 LD A,1 + 0000054D CD 00 00 710 CALL LWRD ?C_LSH_L01 + 00000550 B6 711 OR (HL) + 00000551 77 712 LD (HL),A + 00000552 DD 34 DC 713 INC (IX-36) + 00000555 20 03 714 JR NZ,?0154 + 00000557 DD 34 DD 715 INC (IX-35) + 0000055A 716 ?0154: + 0000055A 18 C9 717 JR ?0069 + 0000055C 718 ?0068: + 0000055C 2A 0E 06 719 LD HL,(bitmap_immov+2) + 0000055F E5 720 PUSH HL + 00000560 2A 0C 06 721 LD HL,(bitmap_immov) + 00000563 E5 722 PUSH HL + 00000564 2A 0A 06 723 LD HL,(bitmap_block+2) + 00000567 E5 724 PUSH HL + 00000568 2A 08 06 725 LD HL,(bitmap_block) + 0000056B E5 726 PUSH HL + 0000056C ED 5B 16 06 727 LD DE,(block_bitmap) + 00000570 3E 5D 728 LD A,BYTE3 bitmap_dump + 00000572 21 5D 0D 729 LD HL,LWRD bitmap_dump + 00000575 CD 00 00 730 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000578 E1 731 POP HL + 00000579 E1 732 POP HL + 0000057A E1 733 POP HL + 0000057B E1 734 POP HL + 0000057C 3A 04 0A 735 LD A,(_immov) + 0000057F B7 736 OR A + 00000580 CA 44 06 737 JP Z,?0073 + 00000583 738 ?0072: + 00000583 AF 739 XOR A + 00000584 DD 77 DC 740 LD (IX-36),A + 00000587 DD 77 DD 741 LD (IX-35),A + 0000058A 742 ?0075: + 0000058A DD 6E 04 743 LD L,(IX+4) + 0000058D DD 66 05 744 LD H,(IX+5) + 00000590 DD 4E 0A 745 LD C,(IX+10) + 00000593 DD 46 0B 746 LD B,(IX+11) + 00000596 09 747 ADD HL,BC + 00000597 01 06 00 748 LD BC,6 + 0000059A 09 749 ADD HL,BC + 0000059B 4D 750 LD C,L + 0000059C 44 751 LD B,H + 0000059D DD 6E DC 752 LD L,(IX-36) + 000005A0 DD 66 DD 753 LD H,(IX-35) + 000005A3 A7 754 AND A + 000005A4 ED 42 755 SBC HL,BC + 000005A6 30 26 756 JR NC,?0074 + 000005A8 757 ?0076: + 000005A8 06 03 758 LD B,3 + 000005AA DD 5E DC 759 LD E,(IX-36) + 000005AD DD 56 DD 760 LD D,(IX-35) + 000005B0 CD 00 00 761 CALL LWRD ?US_RSH_L02 + 000005B3 2A 18 06 762 LD HL,(immov_bitmap) + 000005B6 19 763 ADD HL,DE + 000005B7 DD 7E DC 764 LD A,(IX-36) + 000005BA E6 07 765 AND 7 + 000005BC 47 766 LD B,A + 000005BD 3E 01 767 LD A,1 + 000005BF CD 00 00 768 CALL LWRD ?C_LSH_L01 + 000005C2 B6 769 OR (HL) + 000005C3 77 770 LD (HL),A + 000005C4 DD 34 DC 771 INC (IX-36) + 000005C7 20 03 772 JR NZ,?0155 + 000005C9 DD 34 DD 773 INC (IX-35) + 000005CC 774 ?0155: + 000005CC 18 BC 775 JR ?0075 + 000005CE 776 ?0074: + 000005CE ED 4B 0C 06 777 LD BC,(bitmap_immov) + 000005D2 2A 10 06 778 LD HL,(bitmap_final) + 000005D5 A7 779 AND A + 000005D6 ED 42 780 SBC HL,BC + 000005D8 29 781 ADD HL,HL + 000005D9 29 782 ADD HL,HL + 000005DA 29 783 ADD HL,HL + 000005DB DD 75 DE 784 LD (IX-34),L + 000005DE DD 74 DF 785 LD (IX-33),H + 000005E1 DD 6E 02 786 LD L,(IX+2) + 000005E4 DD 66 03 787 LD H,(IX+3) + 000005E7 DD 75 DC 788 LD (IX-36),L + 000005EA DD 74 DD 789 LD (IX-35),H + 000005ED 790 ?0079: + 000005ED DD 6E DE 791 LD L,(IX-34) + 000005F0 DD 66 DF 792 LD H,(IX-33) + 000005F3 DD 4E DC 793 LD C,(IX-36) + 000005F6 DD 46 DD 794 LD B,(IX-35) + 000005F9 A7 795 AND A + 000005FA ED 42 796 SBC HL,BC + 000005FC 28 26 797 JR Z,?0078 + 000005FE 798 ?0080: + 000005FE 06 03 799 LD B,3 + 00000600 DD 5E DC 800 LD E,(IX-36) + 00000603 DD 56 DD 801 LD D,(IX-35) + 00000606 CD 00 00 802 CALL LWRD ?US_RSH_L02 + 00000609 2A 18 06 803 LD HL,(immov_bitmap) + 0000060C 19 804 ADD HL,DE + 0000060D DD 7E DC 805 LD A,(IX-36) + 00000610 E6 07 806 AND 7 + 00000612 47 807 LD B,A + 00000613 3E 01 808 LD A,1 + 00000615 CD 00 00 809 CALL LWRD ?C_LSH_L01 + 00000618 B6 810 OR (HL) + 00000619 77 811 LD (HL),A + 0000061A DD 34 DC 812 INC (IX-36) + 0000061D 20 03 813 JR NZ,?0156 + 0000061F DD 34 DD 814 INC (IX-35) + 00000622 815 ?0156: + 00000622 18 C9 816 JR ?0079 + 00000624 817 ?0078: + 00000624 2A 12 06 818 LD HL,(bitmap_final+2) + 00000627 E5 819 PUSH HL + 00000628 2A 10 06 820 LD HL,(bitmap_final) + 0000062B E5 821 PUSH HL + 0000062C 2A 0E 06 822 LD HL,(bitmap_immov+2) + 0000062F E5 823 PUSH HL + 00000630 2A 0C 06 824 LD HL,(bitmap_immov) + 00000633 E5 825 PUSH HL + 00000634 ED 5B 18 06 826 LD DE,(immov_bitmap) + 00000638 3E 5D 827 LD A,BYTE3 bitmap_dump + 0000063A 21 5D 0D 828 LD HL,LWRD bitmap_dump + 0000063D CD 00 00 829 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000640 E1 830 POP HL + 00000641 E1 831 POP HL + 00000642 E1 832 POP HL + 00000643 E1 833 POP HL + 00000644 834 ?0073: + 00000644 21 ED 41 835 LD HL,16877 + 00000647 22 44 04 836 LD (inode+64),HL + 0000064A 21 03 00 837 LD HL,3 + 0000064D 22 46 04 838 LD (inode+66),HL + 00000650 01 00 00 839 LD BC,0 + 00000653 21 20 00 840 LD HL,32 + 00000656 22 4C 04 841 LD (inode+72),HL + 00000659 ED 43 4E 04 842 LD (inode+74),BC + 0000065D DD 6E 04 843 LD L,(IX+4) + 00000660 DD 66 05 844 LD H,(IX+5) + 00000663 DD 4E 0A 845 LD C,(IX+10) + 00000666 DD 46 0B 846 LD B,(IX+11) + 00000669 09 847 ADD HL,BC + 0000066A 01 05 00 848 LD BC,5 + 0000066D 09 849 ADD HL,BC + 0000066E 22 5C 04 850 LD (inode+88),HL + 00000671 21 01 00 851 LD HL,1 + 00000674 22 06 04 852 LD (inode+2),HL + 00000677 21 FF FF 853 LD HL,65535 + 0000067A 22 04 04 854 LD (inode),HL + 0000067D 2A 14 06 855 LD HL,(inode_bitmap) + 00000680 7E 856 LD A,(HL) + 00000681 F6 01 857 OR 1 + 00000683 77 858 LD (HL),A + 00000684 2A 14 06 859 LD HL,(inode_bitmap) + 00000687 7E 860 LD A,(HL) + 00000688 F6 02 861 OR 2 + 0000068A 77 862 LD (HL),A + 0000068B ED 4B 04 06 863 LD BC,(bitmap_inode) + 0000068F 2A 08 06 864 LD HL,(bitmap_block) + 00000692 A7 865 AND A + 00000693 ED 42 866 SBC HL,BC + 00000695 29 867 ADD HL,HL + 00000696 29 868 ADD HL,HL + 00000697 29 869 ADD HL,HL + 00000698 DD 75 DE 870 LD (IX-34),L + 0000069B DD 74 DF 871 LD (IX-33),H + 0000069E DD 6E 04 872 LD L,(IX+4) + 000006A1 DD 66 05 873 LD H,(IX+5) + 000006A4 29 874 ADD HL,HL + 000006A5 29 875 ADD HL,HL + 000006A6 29 876 ADD HL,HL + 000006A7 DD 75 DC 877 LD (IX-36),L + 000006AA DD 74 DD 878 LD (IX-35),H + 000006AD 879 ?0083: + 000006AD DD 6E DE 880 LD L,(IX-34) + 000006B0 DD 66 DF 881 LD H,(IX-33) + 000006B3 DD 4E DC 882 LD C,(IX-36) + 000006B6 DD 46 DD 883 LD B,(IX-35) + 000006B9 A7 884 AND A + 000006BA ED 42 885 SBC HL,BC + 000006BC 28 26 886 JR Z,?0082 + 000006BE 887 ?0084: + 000006BE 06 03 888 LD B,3 + 000006C0 DD 5E DC 889 LD E,(IX-36) + 000006C3 DD 56 DD 890 LD D,(IX-35) + 000006C6 CD 00 00 891 CALL LWRD ?US_RSH_L02 + 000006C9 2A 14 06 892 LD HL,(inode_bitmap) + 000006CC 19 893 ADD HL,DE + 000006CD DD 7E DC 894 LD A,(IX-36) + 000006D0 E6 07 895 AND 7 + 000006D2 47 896 LD B,A + 000006D3 3E 01 897 LD A,1 + 000006D5 CD 00 00 898 CALL LWRD ?C_LSH_L01 + 000006D8 B6 899 OR (HL) + 000006D9 77 900 LD (HL),A + 000006DA DD 34 DC 901 INC (IX-36) + 000006DD 20 03 902 JR NZ,?0157 + 000006DF DD 34 DD 903 INC (IX-35) + 000006E2 904 ?0157: + 000006E2 18 C9 905 JR ?0083 + 000006E4 906 ?0082: + 000006E4 2A 0A 06 907 LD HL,(bitmap_block+2) + 000006E7 E5 908 PUSH HL + 000006E8 2A 08 06 909 LD HL,(bitmap_block) + 000006EB E5 910 PUSH HL + 000006EC 2A 06 06 911 LD HL,(bitmap_inode+2) + 000006EF E5 912 PUSH HL + 000006F0 2A 04 06 913 LD HL,(bitmap_inode) + 000006F3 E5 914 PUSH HL + 000006F4 ED 5B 14 06 915 LD DE,(inode_bitmap) + 000006F8 3E 5D 916 LD A,BYTE3 bitmap_dump + 000006FA 21 5D 0D 917 LD HL,LWRD bitmap_dump + 000006FD CD 00 00 918 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000700 E1 919 POP HL + 00000701 E1 920 POP HL + 00000702 E1 921 POP HL + 00000703 E1 922 POP HL + 00000704 01 04 04 923 LD BC,inode + 00000707 21 05 00 924 LD HL,5 + 0000070A DD 5E 0A 925 LD E,(IX+10) + 0000070D DD 56 0B 926 LD D,(IX+11) + 00000710 19 927 ADD HL,DE + 00000711 EB 928 EX DE,HL + 00000712 3E 3F 929 LD A,BYTE3 dwrite + 00000714 21 3F 00 930 LD HL,LWRD dwrite + 00000717 CD 00 00 931 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000071A 01 00 08 932 LD BC,dirbuf + 0000071D DD 6E 04 933 LD L,(IX+4) + 00000720 DD 66 05 934 LD H,(IX+5) + 00000723 DD 5E 0A 935 LD E,(IX+10) + 00000726 DD 56 0B 936 LD D,(IX+11) + 00000729 19 937 ADD HL,DE + 0000072A 11 05 00 938 LD DE,5 + 0000072D 19 939 ADD HL,DE + 0000072E EB 940 EX DE,HL + 0000072F 3E 3F 941 LD A,BYTE3 dwrite + 00000731 21 3F 00 942 LD HL,LWRD dwrite + 00000734 CD 00 00 943 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000737 11 04 00 944 LD DE,4 + 0000073A 3E 00 945 LD A,BYTE3 daread + 0000073C 21 00 00 946 LD HL,LWRD daread + 0000073F CD 00 00 947 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000742 DD 75 FE 948 LD (IX-2),L + 00000745 DD 74 FF 949 LD (IX-1),H + 00000748 01 1E 00 950 LD BC,30 + 0000074B C5 951 PUSH BC + 0000074C 4D 952 LD C,L + 0000074D 44 953 LD B,H + 0000074E 21 06 00 954 LD HL,6 + 00000751 39 955 ADD HL,SP + 00000752 5D 956 LD E,L + 00000753 54 957 LD D,H + 00000754 3E 00 958 LD A,BYTE3 bcopy + 00000756 21 00 00 959 LD HL,LWRD bcopy + 00000759 CD 00 00 960 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000075C E1 961 POP HL + 0000075D DD 4E FE 962 LD C,(IX-2) + 00000760 DD 46 FF 963 LD B,(IX-1) + 00000763 11 04 00 964 LD DE,4 + 00000766 3E 3F 965 LD A,BYTE3 dwrite + 00000768 21 3F 00 966 LD HL,LWRD dwrite + 0000076B CD 00 00 967 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000076E C3 00 00 968 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00000771 969 doformatting: + 00000771 CD 00 00 970 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 00000774 FE FD 971 DEFW 65022 + 00000776 3A 03 0A 972 LD A,(_verb) + 00000779 B7 973 OR A + 0000077A 28 18 974 JR Z,?0087 + 0000077C 975 ?0086: + 0000077C 21 C7 00 976 LD HL,?0088 + 0000077F E5 977 PUSH HL + 00000780 3E 00 978 LD A,BYTE3 printf + 00000782 21 00 00 979 LD HL,LWRD printf + 00000785 CD 00 00 980 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000788 F1 981 POP AF + 00000789 11 00 00 982 LD DE,stdout + 0000078C 3E 00 983 LD A,BYTE3 fflush + 0000078E 21 00 00 984 LD HL,LWRD fflush + 00000791 CD 00 00 985 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000794 986 ?0087: + 00000794 21 00 02 987 LD HL,512 + 00000797 E5 988 PUSH HL + 00000798 0E AA 989 LD C,170 + 0000079A 21 04 00 990 LD HL,4 + 0000079D 39 991 ADD HL,SP + 0000079E 5D 992 LD E,L + 0000079F 54 993 LD D,H + 000007A0 3E 00 994 LD A,BYTE3 bfill + 000007A2 21 00 00 995 LD HL,LWRD bfill + 000007A5 CD 00 00 996 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000007A8 E1 997 POP HL + 000007A9 21 00 00 998 LD HL,0 + 000007AC 39 999 ADD HL,SP + 000007AD AF 1000 XOR A + 000007AE 77 1001 LD (HL),A + 000007AF 23 1002 INC HL + 000007B0 77 1003 LD (HL),A + 000007B1 1004 ?0090: + 000007B1 DD 4E 02 1005 LD C,(IX+2) + 000007B4 DD 46 03 1006 LD B,(IX+3) + 000007B7 21 00 00 1007 LD HL,0 + 000007BA 39 1008 ADD HL,SP + 000007BB 56 1009 LD D,(HL) + 000007BC 23 1010 INC HL + 000007BD 66 1011 LD H,(HL) + 000007BE 6A 1012 LD L,D + 000007BF A7 1013 AND A + 000007C0 ED 42 1014 SBC HL,BC + 000007C2 30 20 1015 JR NC,?0089 + 000007C4 1016 ?0091: + 000007C4 21 02 00 1017 LD HL,2 + 000007C7 39 1018 ADD HL,SP + 000007C8 4D 1019 LD C,L + 000007C9 44 1020 LD B,H + 000007CA 21 00 00 1021 LD HL,0 + 000007CD 39 1022 ADD HL,SP + 000007CE 5E 1023 LD E,(HL) + 000007CF 23 1024 INC HL + 000007D0 56 1025 LD D,(HL) + 000007D1 3E 3F 1026 LD A,BYTE3 dwrite + 000007D3 21 3F 00 1027 LD HL,LWRD dwrite + 000007D6 CD 00 00 1028 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000007D9 21 00 00 1029 LD HL,0 + 000007DC 39 1030 ADD HL,SP + 000007DD 34 1031 INC (HL) + 000007DE 23 1032 INC HL + 000007DF 20 01 1033 JR NZ,?0158 + 000007E1 34 1034 INC (HL) + 000007E2 1035 ?0158: + 000007E2 18 CD 1036 JR ?0090 + 000007E4 1037 ?0089: + 000007E4 C3 00 00 1038 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000007E7 1039 main: + 000007E7 CD 00 00 1040 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 000007EA F4 FF 1041 DEFW 65524 + 000007EC AF 1042 XOR A + 000007ED DD 77 F8 1043 LD (IX-8),A + 000007F0 DD 77 F9 1044 LD (IX-7),A + 000007F3 DD 36 FA 01 1045 LD (IX-6),1 + 000007F7 DD 36 FB 00 1046 LD (IX-5),0 + 000007FB DD 6E 02 1047 LD L,(IX+2) + 000007FE DD 66 03 1048 LD H,(IX+3) + 00000801 DD 75 FC 1049 LD (IX-4),L + 00000804 DD 74 FD 1050 LD (IX-3),H + 00000807 1051 ?0094: + 00000807 DD 4E 02 1052 LD C,(IX+2) + 0000080A DD 46 03 1053 LD B,(IX+3) + 0000080D DD 6E FA 1054 LD L,(IX-6) + 00000810 DD 66 FB 1055 LD H,(IX-5) + 00000813 CD 00 00 1056 CALL LWRD ?SS_CMP_L02 + 00000816 D2 E0 08 1057 JP NC,?0093 + 00000819 DD 6E FA 1058 LD L,(IX-6) + 0000081C DD 66 FB 1059 LD H,(IX-5) + 0000081F 29 1060 ADD HL,HL + 00000820 DD 4E 04 1061 LD C,(IX+4) + 00000823 DD 46 05 1062 LD B,(IX+5) + 00000826 09 1063 ADD HL,BC + 00000827 46 1064 LD B,(HL) + 00000828 23 1065 INC HL + 00000829 66 1066 LD H,(HL) + 0000082A 68 1067 LD L,B + 0000082B DD 75 FE 1068 LD (IX-2),L + 0000082E DD 74 FF 1069 LD (IX-1),H + 00000831 7E 1070 LD A,(HL) + 00000832 FE 2D 1071 CP 45 + 00000834 C2 E0 08 1072 JP NZ,?0093 + 00000837 1073 ?0097: + 00000837 1074 ?0096: + 00000837 1075 ?0095: + 00000837 DD 34 FE 1076 INC (IX-2) + 0000083A 20 03 1077 JR NZ,?0159 + 0000083C DD 34 FF 1078 INC (IX-1) + 0000083F 1079 ?0159: + 0000083F DD 34 FA 1080 INC (IX-6) + 00000842 20 03 1081 JR NZ,?0160 + 00000844 DD 34 FB 1082 INC (IX-5) + 00000847 1083 ?0160: + 00000847 DD 6E FC 1084 LD L,(IX-4) + 0000084A DD 66 FD 1085 LD H,(IX-3) + 0000084D 2B 1086 DEC HL + 0000084E DD 75 FC 1087 LD (IX-4),L + 00000851 DD 74 FD 1088 LD (IX-3),H + 00000854 1089 ?0099: + 00000854 DD 6E FE 1090 LD L,(IX-2) + 00000857 DD 66 FF 1091 LD H,(IX-1) + 0000085A AF 1092 XOR A + 0000085B B6 1093 OR (HL) + 0000085C 28 7F 1094 JR Z,?0098 + 0000085E 1095 ?0100: + 0000085E DD 6E FE 1096 LD L,(IX-2) + 00000861 DD 66 FF 1097 LD H,(IX-1) + 00000864 23 1098 INC HL + 00000865 DD 75 FE 1099 LD (IX-2),L + 00000868 DD 74 FF 1100 LD (IX-1),H + 0000086B 2B 1101 DEC HL + 0000086C 5E 1102 LD E,(HL) + 0000086D CD 00 00 1103 CALL LWRD ?C_V_SWITCH_L06 + 00000870 0A 00 1104 DEFW 10 + 00000872 46 1105 DEFB 70 + 00000873 4C 1106 DEFB 76 + 00000874 51 1107 DEFB 81 + 00000875 56 1108 DEFB 86 + 00000876 59 1109 DEFB 89 + 00000877 66 1110 DEFB 102 + 00000878 6C 1111 DEFB 108 + 00000879 71 1112 DEFB 113 + 0000087A 76 1113 DEFB 118 + 0000087B 79 1114 DEFB 121 + 0000087C B5 08 1115 DEFW ?0107 + 0000087E 92 08 1116 DEFW ?0102 + 00000880 A7 08 1117 DEFW ?0105 + 00000882 A0 08 1118 DEFW ?0104 + 00000884 AE 08 1119 DEFW ?0106 + 00000886 99 08 1120 DEFW ?0103 + 00000888 92 08 1121 DEFW ?0102 + 0000088A A7 08 1122 DEFW ?0105 + 0000088C A0 08 1123 DEFW ?0104 + 0000088E AE 08 1124 DEFW ?0106 + 00000890 99 08 1125 DEFW ?0103 + 00000892 1126 ?0102: + 00000892 3E 01 1127 LD A,1 + 00000894 32 01 0A 1128 LD (_yes),A + 00000897 18 41 1129 JR ?0101 + 00000899 1130 ?0103: + 00000899 3E 01 1131 LD A,1 + 0000089B 32 00 0A 1132 LD (_fmt),A + 0000089E 18 3A 1133 JR ?0101 + 000008A0 1134 ?0104: + 000008A0 3E 01 1135 LD A,1 + 000008A2 32 02 0A 1136 LD (_quick),A + 000008A5 18 33 1137 JR ?0101 + 000008A7 1138 ?0105: + 000008A7 3E 01 1139 LD A,1 + 000008A9 32 03 0A 1140 LD (_verb),A + 000008AC 18 2C 1141 JR ?0101 + 000008AE 1142 ?0106: + 000008AE 3E 01 1143 LD A,1 + 000008B0 32 04 0A 1144 LD (_immov),A + 000008B3 18 25 1145 JR ?0101 + 000008B5 1146 ?0107: + 000008B5 DD 6E FE 1147 LD L,(IX-2) + 000008B8 DD 66 FF 1148 LD H,(IX-1) + 000008BB E5 1149 PUSH HL + 000008BC 21 E0 00 1150 LD HL,?0108 + 000008BF E5 1151 PUSH HL + 000008C0 21 00 00 1152 LD HL,stderr + 000008C3 E5 1153 PUSH HL + 000008C4 3E 00 1154 LD A,BYTE3 fprintf + 000008C6 21 00 00 1155 LD HL,LWRD fprintf + 000008C9 CD 00 00 1156 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000008CC F1 1157 POP AF + 000008CD F1 1158 POP AF + 000008CE F1 1159 POP AF + 000008CF 11 01 00 1160 LD DE,1 + 000008D2 3E 00 1161 LD A,BYTE3 exit + 000008D4 21 00 00 1162 LD HL,LWRD exit + 000008D7 CD 00 00 1163 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000008DA 1164 ?0101: + 000008DA C3 54 08 1165 JP LWRD ?0099 + 000008DD 1166 ?0098: + 000008DD C3 07 08 1167 JP LWRD ?0094 + 000008E0 1168 ?0093: + 000008E0 01 04 80 1169 LD BC,32772 + 000008E3 DD 6E FC 1170 LD L,(IX-4) + 000008E6 DD 66 FD 1171 LD H,(IX-3) + 000008E9 3E 80 1172 LD A,128 + 000008EB AC 1173 XOR H + 000008EC 67 1174 LD H,A + 000008ED ED 42 1175 SBC HL,BC + 000008EF 30 1D 1176 JR NC,?0110 + 000008F1 1177 ?0109: + 000008F1 21 F3 00 1178 LD HL,?0111 + 000008F4 E5 1179 PUSH HL + 000008F5 21 00 00 1180 LD HL,stderr + 000008F8 E5 1181 PUSH HL + 000008F9 3E 00 1182 LD A,BYTE3 fprintf + 000008FB 21 00 00 1183 LD HL,LWRD fprintf + 000008FE CD 00 00 1184 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000901 F1 1185 POP AF + 00000902 F1 1186 POP AF + 00000903 11 01 00 1187 LD DE,1 + 00000906 3E 00 1188 LD A,BYTE3 exit + 00000908 21 00 00 1189 LD HL,LWRD exit + 0000090B CD 00 00 1190 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000090E 1191 ?0110: + 0000090E DD 6E FA 1192 LD L,(IX-6) + 00000911 DD 66 FB 1193 LD H,(IX-5) + 00000914 29 1194 ADD HL,HL + 00000915 DD 4E 04 1195 LD C,(IX+4) + 00000918 DD 46 05 1196 LD B,(IX+5) + 0000091B 09 1197 ADD HL,BC + 0000091C 4E 1198 LD C,(HL) + 0000091D 23 1199 INC HL + 0000091E 46 1200 LD B,(HL) + 0000091F 11 02 00 1201 LD DE,device_name + 00000922 3E 00 1202 LD A,BYTE3 strcpy + 00000924 21 00 00 1203 LD HL,LWRD strcpy + 00000927 CD 00 00 1204 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000092A 21 02 80 1205 LD HL,32770 + 0000092D E5 1206 PUSH HL + 0000092E 21 02 00 1207 LD HL,device_name + 00000931 E5 1208 PUSH HL + 00000932 3E 00 1209 LD A,BYTE3 open + 00000934 21 00 00 1210 LD HL,LWRD open + 00000937 CD 00 00 1211 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000093A F1 1212 POP AF + 0000093B F1 1213 POP AF + 0000093C 22 00 00 1214 LD (device_handle),HL + 0000093F CB 7C 1215 BIT 7,H + 00000941 28 2E 1216 JR Z,?0113 + 00000943 1217 ?0112: + 00000943 21 24 01 1218 LD HL,?0114 + 00000946 E5 1219 PUSH HL + 00000947 3E 00 1220 LD A,BYTE3 printf + 00000949 21 00 00 1221 LD HL,LWRD printf + 0000094C CD 00 00 1222 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000094F F1 1223 POP AF + 00000950 11 00 00 1224 LD DE,stdout + 00000953 3E 00 1225 LD A,BYTE3 fflush + 00000955 21 00 00 1226 LD HL,LWRD fflush + 00000958 CD 00 00 1227 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000095B 11 02 00 1228 LD DE,device_name + 0000095E 3E 00 1229 LD A,BYTE3 perror + 00000960 21 00 00 1230 LD HL,LWRD perror + 00000963 CD 00 00 1231 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000966 11 01 00 1232 LD DE,1 + 00000969 3E 00 1233 LD A,BYTE3 exit + 0000096B 21 00 00 1234 LD HL,LWRD exit + 0000096E CD 00 00 1235 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000971 1236 ?0113: + 00000971 DD 6E FA 1237 LD L,(IX-6) + 00000974 DD 66 FB 1238 LD H,(IX-5) + 00000977 29 1239 ADD HL,HL + 00000978 DD 4E 04 1240 LD C,(IX+4) + 0000097B DD 46 05 1241 LD B,(IX+5) + 0000097E 09 1242 ADD HL,BC + 0000097F 23 1243 INC HL + 00000980 23 1244 INC HL + 00000981 5E 1245 LD E,(HL) + 00000982 23 1246 INC HL + 00000983 56 1247 LD D,(HL) + 00000984 3E 00 1248 LD A,BYTE3 atoi + 00000986 21 00 00 1249 LD HL,LWRD atoi + 00000989 CD 00 00 1250 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000098C DD 75 F4 1251 LD (IX-12),L + 0000098F DD 74 F5 1252 LD (IX-11),H + 00000992 DD 6E FA 1253 LD L,(IX-6) + 00000995 DD 66 FB 1254 LD H,(IX-5) + 00000998 29 1255 ADD HL,HL + 00000999 09 1256 ADD HL,BC + 0000099A 01 04 00 1257 LD BC,4 + 0000099D 09 1258 ADD HL,BC + 0000099E 5E 1259 LD E,(HL) + 0000099F 23 1260 INC HL + 000009A0 56 1261 LD D,(HL) + 000009A1 3E 00 1262 LD A,BYTE3 atoi + 000009A3 21 00 00 1263 LD HL,LWRD atoi + 000009A6 CD 00 00 1264 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000009A9 DD 75 F6 1265 LD (IX-10),L + 000009AC DD 74 F7 1266 LD (IX-9),H + 000009AF DD 4E FC 1267 LD C,(IX-4) + 000009B2 DD 46 FD 1268 LD B,(IX-3) + 000009B5 21 04 00 1269 LD HL,4 + 000009B8 CD 00 00 1270 CALL LWRD ?SS_CMP_L02 + 000009BB 30 23 1271 JR NC,?0116 + 000009BD 1272 ?0115: + 000009BD DD 6E FA 1273 LD L,(IX-6) + 000009C0 DD 66 FB 1274 LD H,(IX-5) + 000009C3 29 1275 ADD HL,HL + 000009C4 DD 4E 04 1276 LD C,(IX+4) + 000009C7 DD 46 05 1277 LD B,(IX+5) + 000009CA 09 1278 ADD HL,BC + 000009CB 01 06 00 1279 LD BC,6 + 000009CE 09 1280 ADD HL,BC + 000009CF 5E 1281 LD E,(HL) + 000009D0 23 1282 INC HL + 000009D1 56 1283 LD D,(HL) + 000009D2 3E 00 1284 LD A,BYTE3 atoi + 000009D4 21 00 00 1285 LD HL,LWRD atoi + 000009D7 CD 00 00 1286 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000009DA DD 75 F8 1287 LD (IX-8),L + 000009DD DD 74 F9 1288 LD (IX-7),H + 000009E0 1289 ?0116: + 000009E0 01 64 00 1290 LD BC,100 + 000009E3 DD 6E F4 1291 LD L,(IX-12) + 000009E6 DD 66 F5 1292 LD H,(IX-11) + 000009E9 A7 1293 AND A + 000009EA ED 42 1294 SBC HL,BC + 000009EC 38 25 1295 JR C,?0117 + 000009EE 01 1E 00 1296 LD BC,30 + 000009F1 DD 5E F4 1297 LD E,(IX-12) + 000009F4 DD 56 F5 1298 LD D,(IX-11) + 000009F7 CD 00 00 1299 CALL LWRD ?US_DIV_L02 + 000009FA DD 6E F6 1300 LD L,(IX-10) + 000009FD DD 66 F7 1301 LD H,(IX-9) + 00000A00 A7 1302 AND A + 00000A01 ED 52 1303 SBC HL,DE + 00000A03 30 0E 1304 JR NC,?0117 + 00000A05 DD 4E F8 1305 LD C,(IX-8) + 00000A08 DD 46 F9 1306 LD B,(IX-7) + 00000A0B 21 64 00 1307 LD HL,100 + 00000A0E A7 1308 AND A + 00000A0F ED 42 1309 SBC HL,BC + 00000A11 30 1D 1310 JR NC,?0118 + 00000A13 1311 ?0119: + 00000A13 1312 ?0120: + 00000A13 1313 ?0117: + 00000A13 21 31 01 1314 LD HL,?0121 + 00000A16 E5 1315 PUSH HL + 00000A17 21 00 00 1316 LD HL,stderr + 00000A1A E5 1317 PUSH HL + 00000A1B 3E 00 1318 LD A,BYTE3 fprintf + 00000A1D 21 00 00 1319 LD HL,LWRD fprintf + 00000A20 CD 00 00 1320 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000A23 F1 1321 POP AF + 00000A24 F1 1322 POP AF + 00000A25 11 01 00 1323 LD DE,1 + 00000A28 3E 00 1324 LD A,BYTE3 exit + 00000A2A 21 00 00 1325 LD HL,LWRD exit + 00000A2D CD 00 00 1326 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000A30 1327 ?0118: + 00000A30 01 00 00 1328 LD BC,0 + 00000A33 21 1E 08 1329 LD HL,2078 + 00000A36 22 04 06 1330 LD (bitmap_inode),HL + 00000A39 ED 43 06 06 1331 LD (bitmap_inode+2),BC + 00000A3D 11 FF FF 1332 LD DE,65535 + 00000A40 D5 1333 PUSH DE + 00000A41 11 FC FF 1334 LD DE,65532 + 00000A44 D5 1335 PUSH DE + 00000A45 C5 1336 PUSH BC + 00000A46 E5 1337 PUSH HL + 00000A47 21 03 00 1338 LD HL,3 + 00000A4A C1 1339 POP BC + 00000A4B 09 1340 ADD HL,BC + 00000A4C EB 1341 EX DE,HL + 00000A4D 21 00 00 1342 LD HL,0 + 00000A50 C1 1343 POP BC + 00000A51 ED 4A 1344 ADC HL,BC + 00000A53 4D 1345 LD C,L + 00000A54 44 1346 LD B,H + 00000A55 EB 1347 EX DE,HL + 00000A56 CD 00 00 1348 CALL LWRD ?L_AND_L03 + 00000A59 22 04 06 1349 LD (bitmap_inode),HL + 00000A5C ED 43 06 06 1350 LD (bitmap_inode+2),BC + 00000A60 C5 1351 PUSH BC + 00000A61 E5 1352 PUSH HL + 00000A62 DD 6E F6 1353 LD L,(IX-10) + 00000A65 DD 66 F7 1354 LD H,(IX-9) + 00000A68 29 1355 ADD HL,HL + 00000A69 29 1356 ADD HL,HL + 00000A6A 29 1357 ADD HL,HL + 00000A6B 01 FF FF 1358 LD BC,65535 + 00000A6E 09 1359 ADD HL,BC + 00000A6F EB 1360 EX DE,HL + 00000A70 06 03 1361 LD B,3 + 00000A72 CD 00 00 1362 CALL LWRD ?US_RSH_L02 + 00000A75 EB 1363 EX DE,HL + 00000A76 11 00 00 1364 LD DE,0 + 00000A79 C1 1365 POP BC + 00000A7A 09 1366 ADD HL,BC + 00000A7B EB 1367 EX DE,HL + 00000A7C C1 1368 POP BC + 00000A7D ED 4A 1369 ADC HL,BC + 00000A7F E5 1370 PUSH HL + 00000A80 D5 1371 PUSH DE + 00000A81 21 01 00 1372 LD HL,1 + 00000A84 C1 1373 POP BC + 00000A85 09 1374 ADD HL,BC + 00000A86 EB 1375 EX DE,HL + 00000A87 21 00 00 1376 LD HL,0 + 00000A8A C1 1377 POP BC + 00000A8B ED 4A 1378 ADC HL,BC + 00000A8D 4D 1379 LD C,L + 00000A8E 44 1380 LD B,H + 00000A8F EB 1381 EX DE,HL + 00000A90 22 08 06 1382 LD (bitmap_block),HL + 00000A93 ED 43 0A 06 1383 LD (bitmap_block+2),BC + 00000A97 11 FF FF 1384 LD DE,65535 + 00000A9A D5 1385 PUSH DE + 00000A9B 11 FC FF 1386 LD DE,65532 + 00000A9E D5 1387 PUSH DE + 00000A9F C5 1388 PUSH BC + 00000AA0 E5 1389 PUSH HL + 00000AA1 21 03 00 1390 LD HL,3 + 00000AA4 C1 1391 POP BC + 00000AA5 09 1392 ADD HL,BC + 00000AA6 EB 1393 EX DE,HL + 00000AA7 21 00 00 1394 LD HL,0 + 00000AAA C1 1395 POP BC + 00000AAB ED 4A 1396 ADC HL,BC + 00000AAD 4D 1397 LD C,L + 00000AAE 44 1398 LD B,H + 00000AAF EB 1399 EX DE,HL + 00000AB0 CD 00 00 1400 CALL LWRD ?L_AND_L03 + 00000AB3 22 08 06 1401 LD (bitmap_block),HL + 00000AB6 ED 43 0A 06 1402 LD (bitmap_block+2),BC + 00000ABA C5 1403 PUSH BC + 00000ABB E5 1404 PUSH HL + 00000ABC 21 FF FF 1405 LD HL,65535 + 00000ABF DD 4E F4 1406 LD C,(IX-12) + 00000AC2 DD 46 F5 1407 LD B,(IX-11) + 00000AC5 09 1408 ADD HL,BC + 00000AC6 EB 1409 EX DE,HL + 00000AC7 06 03 1410 LD B,3 + 00000AC9 CD 00 00 1411 CALL LWRD ?US_RSH_L02 + 00000ACC EB 1412 EX DE,HL + 00000ACD 11 00 00 1413 LD DE,0 + 00000AD0 C1 1414 POP BC + 00000AD1 09 1415 ADD HL,BC + 00000AD2 EB 1416 EX DE,HL + 00000AD3 C1 1417 POP BC + 00000AD4 ED 4A 1418 ADC HL,BC + 00000AD6 E5 1419 PUSH HL + 00000AD7 D5 1420 PUSH DE + 00000AD8 21 01 00 1421 LD HL,1 + 00000ADB C1 1422 POP BC + 00000ADC 09 1423 ADD HL,BC + 00000ADD EB 1424 EX DE,HL + 00000ADE 21 00 00 1425 LD HL,0 + 00000AE1 C1 1426 POP BC + 00000AE2 ED 4A 1427 ADC HL,BC + 00000AE4 4D 1428 LD C,L + 00000AE5 44 1429 LD B,H + 00000AE6 EB 1430 EX DE,HL + 00000AE7 22 0C 06 1431 LD (bitmap_immov),HL + 00000AEA ED 43 0E 06 1432 LD (bitmap_immov+2),BC + 00000AEE 11 FF FF 1433 LD DE,65535 + 00000AF1 D5 1434 PUSH DE + 00000AF2 11 FC FF 1435 LD DE,65532 + 00000AF5 D5 1436 PUSH DE + 00000AF6 C5 1437 PUSH BC + 00000AF7 E5 1438 PUSH HL + 00000AF8 21 03 00 1439 LD HL,3 + 00000AFB C1 1440 POP BC + 00000AFC 09 1441 ADD HL,BC + 00000AFD EB 1442 EX DE,HL + 00000AFE 21 00 00 1443 LD HL,0 + 00000B01 C1 1444 POP BC + 00000B02 ED 4A 1445 ADC HL,BC + 00000B04 4D 1446 LD C,L + 00000B05 44 1447 LD B,H + 00000B06 EB 1448 EX DE,HL + 00000B07 CD 00 00 1449 CALL LWRD ?L_AND_L03 + 00000B0A 22 0C 06 1450 LD (bitmap_immov),HL + 00000B0D ED 43 0E 06 1451 LD (bitmap_immov+2),BC + 00000B11 22 10 06 1452 LD (bitmap_final),HL + 00000B14 ED 43 12 06 1453 LD (bitmap_final+2),BC + 00000B18 C5 1454 PUSH BC + 00000B19 E5 1455 PUSH HL + 00000B1A 21 FF 01 1456 LD HL,511 + 00000B1D C1 1457 POP BC + 00000B1E 09 1458 ADD HL,BC + 00000B1F EB 1459 EX DE,HL + 00000B20 21 00 00 1460 LD HL,0 + 00000B23 C1 1461 POP BC + 00000B24 ED 4A 1462 ADC HL,BC + 00000B26 4D 1463 LD C,L + 00000B27 44 1464 LD B,H + 00000B28 EB 1465 EX DE,HL + 00000B29 3E 09 1466 LD A,9 + 00000B2B CD 00 00 1467 CALL LWRD ?SL_RSH_L03 + 00000B2E 01 FB FF 1468 LD BC,65531 + 00000B31 09 1469 ADD HL,BC + 00000B32 DD 75 F8 1470 LD (IX-8),L + 00000B35 DD 74 F9 1471 LD (IX-7),H + 00000B38 3A 04 0A 1472 LD A,(_immov) + 00000B3B B7 1473 OR A + 00000B3C 28 7D 1474 JR Z,?0123 + 00000B3E 1475 ?0122: + 00000B3E 21 FF FF 1476 LD HL,65535 + 00000B41 DD 4E F4 1477 LD C,(IX-12) + 00000B44 DD 46 F5 1478 LD B,(IX-11) + 00000B47 09 1479 ADD HL,BC + 00000B48 EB 1480 EX DE,HL + 00000B49 06 03 1481 LD B,3 + 00000B4B CD 00 00 1482 CALL LWRD ?US_RSH_L02 + 00000B4E EB 1483 EX DE,HL + 00000B4F 01 00 00 1484 LD BC,0 + 00000B52 C5 1485 PUSH BC + 00000B53 E5 1486 PUSH HL + 00000B54 2A 0C 06 1487 LD HL,(bitmap_immov) + 00000B57 C1 1488 POP BC + 00000B58 09 1489 ADD HL,BC + 00000B59 EB 1490 EX DE,HL + 00000B5A 2A 0E 06 1491 LD HL,(bitmap_immov+2) + 00000B5D C1 1492 POP BC + 00000B5E ED 4A 1493 ADC HL,BC + 00000B60 E5 1494 PUSH HL + 00000B61 D5 1495 PUSH DE + 00000B62 21 01 00 1496 LD HL,1 + 00000B65 C1 1497 POP BC + 00000B66 09 1498 ADD HL,BC + 00000B67 EB 1499 EX DE,HL + 00000B68 21 00 00 1500 LD HL,0 + 00000B6B C1 1501 POP BC + 00000B6C ED 4A 1502 ADC HL,BC + 00000B6E 4D 1503 LD C,L + 00000B6F 44 1504 LD B,H + 00000B70 EB 1505 EX DE,HL + 00000B71 22 10 06 1506 LD (bitmap_final),HL + 00000B74 ED 43 12 06 1507 LD (bitmap_final+2),BC + 00000B78 11 FF FF 1508 LD DE,65535 + 00000B7B D5 1509 PUSH DE + 00000B7C 11 FC FF 1510 LD DE,65532 + 00000B7F D5 1511 PUSH DE + 00000B80 C5 1512 PUSH BC + 00000B81 E5 1513 PUSH HL + 00000B82 21 03 00 1514 LD HL,3 + 00000B85 C1 1515 POP BC + 00000B86 09 1516 ADD HL,BC + 00000B87 EB 1517 EX DE,HL + 00000B88 21 00 00 1518 LD HL,0 + 00000B8B C1 1519 POP BC + 00000B8C ED 4A 1520 ADC HL,BC + 00000B8E 4D 1521 LD C,L + 00000B8F 44 1522 LD B,H + 00000B90 EB 1523 EX DE,HL + 00000B91 CD 00 00 1524 CALL LWRD ?L_AND_L03 + 00000B94 22 10 06 1525 LD (bitmap_final),HL + 00000B97 ED 43 12 06 1526 LD (bitmap_final+2),BC + 00000B9B C5 1527 PUSH BC + 00000B9C E5 1528 PUSH HL + 00000B9D 21 FF 01 1529 LD HL,511 + 00000BA0 C1 1530 POP BC + 00000BA1 09 1531 ADD HL,BC + 00000BA2 EB 1532 EX DE,HL + 00000BA3 21 00 00 1533 LD HL,0 + 00000BA6 C1 1534 POP BC + 00000BA7 ED 4A 1535 ADC HL,BC + 00000BA9 4D 1536 LD C,L + 00000BAA 44 1537 LD B,H + 00000BAB EB 1538 EX DE,HL + 00000BAC 3E 09 1539 LD A,9 + 00000BAE CD 00 00 1540 CALL LWRD ?SL_RSH_L03 + 00000BB1 01 FB FF 1541 LD BC,65531 + 00000BB4 09 1542 ADD HL,BC + 00000BB5 DD 75 F8 1543 LD (IX-8),L + 00000BB8 DD 74 F9 1544 LD (IX-7),H + 00000BBB 1545 ?0123: + 00000BBB DD 6E F8 1546 LD L,(IX-8) + 00000BBE DD 66 F9 1547 LD H,(IX-7) + 00000BC1 E5 1548 PUSH HL + 00000BC2 DD 6E F6 1549 LD L,(IX-10) + 00000BC5 DD 66 F7 1550 LD H,(IX-9) + 00000BC8 E5 1551 PUSH HL + 00000BC9 DD 6E F4 1552 LD L,(IX-12) + 00000BCC DD 66 F5 1553 LD H,(IX-11) + 00000BCF E5 1554 PUSH HL + 00000BD0 21 02 00 1555 LD HL,device_name + 00000BD3 E5 1556 PUSH HL + 00000BD4 21 47 01 1557 LD HL,?0124 + 00000BD7 E5 1558 PUSH HL + 00000BD8 3E 00 1559 LD A,BYTE3 printf + 00000BDA 21 00 00 1560 LD HL,LWRD printf + 00000BDD CD 00 00 1561 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000BE0 F1 1562 POP AF + 00000BE1 F1 1563 POP AF + 00000BE2 F1 1564 POP AF + 00000BE3 F1 1565 POP AF + 00000BE4 F1 1566 POP AF + 00000BE5 11 00 00 1567 LD DE,stdout + 00000BE8 3E 00 1568 LD A,BYTE3 fflush + 00000BEA 21 00 00 1569 LD HL,LWRD fflush + 00000BED CD 00 00 1570 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000BF0 11 80 01 1571 LD DE,?0127 + 00000BF3 3E E0 1572 LD A,BYTE3 yes + 00000BF5 21 E0 01 1573 LD HL,LWRD yes + 00000BF8 CD 00 00 1574 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000BFB 7D 1575 LD A,L + 00000BFC B4 1576 OR H + 00000BFD 20 0B 1577 JR NZ,?0126 + 00000BFF 1578 ?0125: + 00000BFF 11 01 00 1579 LD DE,1 + 00000C02 3E 00 1580 LD A,BYTE3 exit + 00000C04 21 00 00 1581 LD HL,LWRD exit + 00000C07 CD 00 00 1582 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000C0A 1583 ?0126: + 00000C0A 21 8A 01 1584 LD HL,?0128 + 00000C0D E5 1585 PUSH HL + 00000C0E 3E 00 1586 LD A,BYTE3 printf + 00000C10 21 00 00 1587 LD HL,LWRD printf + 00000C13 CD 00 00 1588 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000C16 F1 1589 POP AF + 00000C17 3A 00 0A 1590 LD A,(_fmt) + 00000C1A B7 1591 OR A + 00000C1B 28 0E 1592 JR Z,?0130 + 00000C1D 1593 ?0129: + 00000C1D DD 5E F4 1594 LD E,(IX-12) + 00000C20 DD 56 F5 1595 LD D,(IX-11) + 00000C23 3E 71 1596 LD A,BYTE3 doformatting + 00000C25 21 71 07 1597 LD HL,LWRD doformatting + 00000C28 CD 00 00 1598 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000C2B 1599 ?0130: + 00000C2B ED 4B 04 06 1600 LD BC,(bitmap_inode) + 00000C2F 2A 08 06 1601 LD HL,(bitmap_block) + 00000C32 A7 1602 AND A + 00000C33 ED 42 1603 SBC HL,BC + 00000C35 EB 1604 EX DE,HL + 00000C36 3E 00 1605 LD A,BYTE3 malloc + 00000C38 21 00 00 1606 LD HL,LWRD malloc + 00000C3B CD 00 00 1607 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000C3E 22 14 06 1608 LD (inode_bitmap),HL + 00000C41 7D 1609 LD A,L + 00000C42 B4 1610 OR H + 00000C43 20 0B 1611 JR NZ,?0132 + 00000C45 1612 ?0131: + 00000C45 DD 36 FE 8C 1613 LD (IX-2),LOW(?0133) + 00000C49 DD 36 FF 01 1614 LD (IX-1),HIGH(?0133) + 00000C4D C3 D0 0C 1615 JP LWRD ?0134 + 00000C50 1616 ?0132: + 00000C50 ED 4B 04 06 1617 LD BC,(bitmap_inode) + 00000C54 2A 08 06 1618 LD HL,(bitmap_block) + 00000C57 A7 1619 AND A + 00000C58 ED 42 1620 SBC HL,BC + 00000C5A E5 1621 PUSH HL + 00000C5B 0E 00 1622 LD C,0 + 00000C5D ED 5B 14 06 1623 LD DE,(inode_bitmap) + 00000C61 3E 00 1624 LD A,BYTE3 bfill + 00000C63 21 00 00 1625 LD HL,LWRD bfill + 00000C66 CD 00 00 1626 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000C69 E1 1627 POP HL + 00000C6A ED 4B 08 06 1628 LD BC,(bitmap_block) + 00000C6E 2A 10 06 1629 LD HL,(bitmap_final) + 00000C71 A7 1630 AND A + 00000C72 ED 42 1631 SBC HL,BC + 00000C74 EB 1632 EX DE,HL + 00000C75 3E 00 1633 LD A,BYTE3 malloc + 00000C77 21 00 00 1634 LD HL,LWRD malloc + 00000C7A CD 00 00 1635 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000C7D 22 16 06 1636 LD (block_bitmap),HL + 00000C80 7D 1637 LD A,L + 00000C81 B4 1638 OR H + 00000C82 20 0A 1639 JR NZ,?0136 + 00000C84 1640 ?0135: + 00000C84 DD 36 FE 99 1641 LD (IX-2),LOW(?0137) + 00000C88 DD 36 FF 01 1642 LD (IX-1),HIGH(?0137) + 00000C8C 18 42 1643 JR ?0134 + 00000C8E 1644 ?0136: + 00000C8E ED 4B 08 06 1645 LD BC,(bitmap_block) + 00000C92 2A 10 06 1646 LD HL,(bitmap_final) + 00000C95 A7 1647 AND A + 00000C96 ED 42 1648 SBC HL,BC + 00000C98 E5 1649 PUSH HL + 00000C99 0E 00 1650 LD C,0 + 00000C9B ED 5B 16 06 1651 LD DE,(block_bitmap) + 00000C9F 3E 00 1652 LD A,BYTE3 bfill + 00000CA1 21 00 00 1653 LD HL,LWRD bfill + 00000CA4 CD 00 00 1654 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000CA7 E1 1655 POP HL + 00000CA8 3A 04 0A 1656 LD A,(_immov) + 00000CAB B7 1657 OR A + 00000CAC 28 61 1658 JR Z,?0139 + 00000CAE 1659 ?0138: + 00000CAE ED 4B 0C 06 1660 LD BC,(bitmap_immov) + 00000CB2 2A 10 06 1661 LD HL,(bitmap_final) + 00000CB5 A7 1662 AND A + 00000CB6 ED 42 1663 SBC HL,BC + 00000CB8 EB 1664 EX DE,HL + 00000CB9 3E 00 1665 LD A,BYTE3 malloc + 00000CBB 21 00 00 1666 LD HL,LWRD malloc + 00000CBE CD 00 00 1667 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000CC1 22 18 06 1668 LD (immov_bitmap),HL + 00000CC4 7D 1669 LD A,L + 00000CC5 B4 1670 OR H + 00000CC6 20 2D 1671 JR NZ,?0141 + 00000CC8 1672 ?0140: + 00000CC8 DD 36 FE A6 1673 LD (IX-2),LOW(?0142) + 00000CCC DD 36 FF 01 1674 LD (IX-1),HIGH(?0142) + 00000CD0 1675 ?0134: + 00000CD0 DD 6E FE 1676 LD L,(IX-2) + 00000CD3 DD 66 FF 1677 LD H,(IX-1) + 00000CD6 E5 1678 PUSH HL + 00000CD7 21 B2 01 1679 LD HL,?0143 + 00000CDA E5 1680 PUSH HL + 00000CDB 21 00 00 1681 LD HL,stderr + 00000CDE E5 1682 PUSH HL + 00000CDF 3E 00 1683 LD A,BYTE3 fprintf + 00000CE1 21 00 00 1684 LD HL,LWRD fprintf + 00000CE4 CD 00 00 1685 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000CE7 F1 1686 POP AF + 00000CE8 F1 1687 POP AF + 00000CE9 F1 1688 POP AF + 00000CEA 11 01 00 1689 LD DE,1 + 00000CED 3E 00 1690 LD A,BYTE3 exit + 00000CEF 21 00 00 1691 LD HL,LWRD exit + 00000CF2 CD 00 00 1692 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000CF5 1693 ?0141: + 00000CF5 ED 4B 0C 06 1694 LD BC,(bitmap_immov) + 00000CF9 2A 10 06 1695 LD HL,(bitmap_final) + 00000CFC A7 1696 AND A + 00000CFD ED 42 1697 SBC HL,BC + 00000CFF E5 1698 PUSH HL + 00000D00 0E 00 1699 LD C,0 + 00000D02 ED 5B 18 06 1700 LD DE,(immov_bitmap) + 00000D06 3E 00 1701 LD A,BYTE3 bfill + 00000D08 21 00 00 1702 LD HL,LWRD bfill + 00000D0B CD 00 00 1703 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000D0E E1 1704 POP HL + 00000D0F 1705 ?0139: + 00000D0F DD 6E F8 1706 LD L,(IX-8) + 00000D12 DD 66 F9 1707 LD H,(IX-7) + 00000D15 E5 1708 PUSH HL + 00000D16 DD 4E F6 1709 LD C,(IX-10) + 00000D19 DD 46 F7 1710 LD B,(IX-9) + 00000D1C DD 5E F4 1711 LD E,(IX-12) + 00000D1F DD 56 F5 1712 LD D,(IX-11) + 00000D22 3E 4A 1713 LD A,BYTE3 mkfs + 00000D24 21 4A 02 1714 LD HL,LWRD mkfs + 00000D27 CD 00 00 1715 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000D2A E1 1716 POP HL + 00000D2B ED 5B 00 00 1717 LD DE,(device_handle) + 00000D2F 3E 00 1718 LD A,BYTE3 close + 00000D31 21 00 00 1719 LD HL,LWRD close + 00000D34 CD 00 00 1720 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000D37 3A 03 0A 1721 LD A,(_verb) + 00000D3A B7 1722 OR A + 00000D3B 28 12 1723 JR Z,?0145 + 00000D3D 1724 ?0144: + 00000D3D 21 02 00 1725 LD HL,device_name + 00000D40 E5 1726 PUSH HL + 00000D41 21 CD 01 1727 LD HL,?0146 + 00000D44 E5 1728 PUSH HL + 00000D45 3E 00 1729 LD A,BYTE3 printf + 00000D47 21 00 00 1730 LD HL,LWRD printf + 00000D4A CD 00 00 1731 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000D4D F1 1732 POP AF + 00000D4E F1 1733 POP AF + 00000D4F 1734 ?0145: + 00000D4F 11 00 00 1735 LD DE,0 + 00000D52 3E 00 1736 LD A,BYTE3 exit + 00000D54 21 00 00 1737 LD HL,LWRD exit + 00000D57 CD 00 00 1738 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000D5A C3 00 00 1739 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00000D5D 1740 bitmap_dump: + 00000D5D CD 00 00 1741 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 00000D60 FA FF 1742 DEFW 65530 + 00000D62 DD 6E 0A 1743 LD L,(IX+10) + 00000D65 DD 66 0B 1744 LD H,(IX+11) + 00000D68 DD 75 FC 1745 LD (IX-4),L + 00000D6B DD 74 FD 1746 LD (IX-3),H + 00000D6E 1747 ?0148: + 00000D6E DD 6E 10 1748 LD L,(IX+16) + 00000D71 DD 66 11 1749 LD H,(IX+17) + 00000D74 E5 1750 PUSH HL + 00000D75 DD 6E 0E 1751 LD L,(IX+14) + 00000D78 DD 66 0F 1752 LD H,(IX+15) + 00000D7B E5 1753 PUSH HL + 00000D7C DD 6E FC 1754 LD L,(IX-4) + 00000D7F DD 66 FD 1755 LD H,(IX-3) + 00000D82 01 00 00 1756 LD BC,0 + 00000D85 CD 00 00 1757 CALL LWRD ?SL_CMP_L03 + 00000D88 D2 50 0E 1758 JP NC,?0147 + 00000D8B 1759 ?0149: + 00000D8B DD 4E 0E 1760 LD C,(IX+14) + 00000D8E DD 46 0F 1761 LD B,(IX+15) + 00000D91 DD 6E FC 1762 LD L,(IX-4) + 00000D94 DD 66 FD 1763 LD H,(IX-3) + 00000D97 3E 02 1764 LD A,2 + 00000D99 84 1765 ADD A,H + 00000D9A 67 1766 LD H,A + 00000D9B 7D 1767 LD A,L + 00000D9C E6 00 1768 AND 0 + 00000D9E 5F 1769 LD E,A + 00000D9F 7C 1770 LD A,H + 00000DA0 E6 FE 1771 AND 254 + 00000DA2 57 1772 LD D,A + 00000DA3 3E 00 1773 LD A,BYTE3 int_min + 00000DA5 21 00 00 1774 LD HL,LWRD int_min + 00000DA8 CD 00 00 1775 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000DAB DD 75 FE 1776 LD (IX-2),L + 00000DAE DD 74 FF 1777 LD (IX-1),H + 00000DB1 DD 4E FC 1778 LD C,(IX-4) + 00000DB4 DD 46 FD 1779 LD B,(IX-3) + 00000DB7 A7 1780 AND A + 00000DB8 ED 42 1781 SBC HL,BC + 00000DBA 01 00 02 1782 LD BC,512 + 00000DBD A7 1783 AND A + 00000DBE ED 42 1784 SBC HL,BC + 00000DC0 30 1B 1785 JR NC,?0151 + 00000DC2 1786 ?0150: + 00000DC2 06 09 1787 LD B,9 + 00000DC4 DD 5E FC 1788 LD E,(IX-4) + 00000DC7 DD 56 FD 1789 LD D,(IX-3) + 00000DCA CD 00 00 1790 CALL LWRD ?US_RSH_L02 + 00000DCD 3E 00 1791 LD A,BYTE3 daread + 00000DCF 21 00 00 1792 LD HL,LWRD daread + 00000DD2 CD 00 00 1793 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000DD5 DD 75 FA 1794 LD (IX-6),L + 00000DD8 DD 74 FB 1795 LD (IX-5),H + 00000DDB 18 08 1796 JR ?0152 + 00000DDD 1797 ?0151: + 00000DDD DD 36 FA 02 1798 LD (IX-6),LOW(zeroed) + 00000DE1 DD 36 FB 02 1799 LD (IX-5),HIGH(zeroed) + 00000DE5 1800 ?0152: + 00000DE5 DD 4E FC 1801 LD C,(IX-4) + 00000DE8 DD 46 FD 1802 LD B,(IX-3) + 00000DEB DD 6E FE 1803 LD L,(IX-2) + 00000DEE DD 66 FF 1804 LD H,(IX-1) + 00000DF1 A7 1805 AND A + 00000DF2 ED 42 1806 SBC HL,BC + 00000DF4 E5 1807 PUSH HL + 00000DF5 79 1808 LD A,C + 00000DF6 E6 FF 1809 AND 255 + 00000DF8 6F 1810 LD L,A + 00000DF9 78 1811 LD A,B + 00000DFA E6 01 1812 AND 1 + 00000DFC 67 1813 LD H,A + 00000DFD DD 5E FA 1814 LD E,(IX-6) + 00000E00 DD 56 FB 1815 LD D,(IX-5) + 00000E03 19 1816 ADD HL,DE + 00000E04 4D 1817 LD C,L + 00000E05 44 1818 LD B,H + 00000E06 DD 5E 0A 1819 LD E,(IX+10) + 00000E09 DD 56 0B 1820 LD D,(IX+11) + 00000E0C DD 6E FC 1821 LD L,(IX-4) + 00000E0F DD 66 FD 1822 LD H,(IX-3) + 00000E12 A7 1823 AND A + 00000E13 ED 52 1824 SBC HL,DE + 00000E15 DD 5E 02 1825 LD E,(IX+2) + 00000E18 DD 56 03 1826 LD D,(IX+3) + 00000E1B 19 1827 ADD HL,DE + 00000E1C EB 1828 EX DE,HL + 00000E1D 3E 00 1829 LD A,BYTE3 bcopy + 00000E1F 21 00 00 1830 LD HL,LWRD bcopy + 00000E22 CD 00 00 1831 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000E25 E1 1832 POP HL + 00000E26 DD 4E FA 1833 LD C,(IX-6) + 00000E29 DD 46 FB 1834 LD B,(IX-5) + 00000E2C C5 1835 PUSH BC + 00000E2D 06 09 1836 LD B,9 + 00000E2F DD 5E FC 1837 LD E,(IX-4) + 00000E32 DD 56 FD 1838 LD D,(IX-3) + 00000E35 CD 00 00 1839 CALL LWRD ?US_RSH_L02 + 00000E38 3E 3F 1840 LD A,BYTE3 dwrite + 00000E3A 21 3F 00 1841 LD HL,LWRD dwrite + 00000E3D C1 1842 POP BC + 00000E3E CD 00 00 1843 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00000E41 DD 6E FE 1844 LD L,(IX-2) + 00000E44 DD 66 FF 1845 LD H,(IX-1) + 00000E47 DD 75 FC 1846 LD (IX-4),L + 00000E4A DD 74 FD 1847 LD (IX-3),H + 00000E4D C3 6E 0D 1848 JP LWRD ?0148 + 00000E50 1849 ?0147: + 00000E50 C3 00 00 1850 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 1851 RSEG CSTR + 00000000 1852 ?0005: + 00000000 52 65 61 64 20 6F 66 1853 DEFB 'Read of block %d failed.' + 20 62 6C 6F 63 6B 20 + 25 64 20 66 61 69 6C + 65 64 2E + 00000018 0A 00 1854 DEFB 10,0 + 0000001A 1855 ?0008: + 0000001A 57 72 69 74 65 20 6F 1856 DEFB 'Write of block %d failed.' + 66 20 62 6C 6F 63 6B + 20 25 64 20 66 61 69 + 6C 65 64 2E + 00000033 0A 00 1857 DEFB 10,0 + 00000035 1858 ?0011: + 00000035 63 61 6E 27 74 20 73 1859 DEFB 'can''t seek: ' + 65 65 6B 3A 20 + 00000041 00 1860 DEFB 0 + 00000042 1861 ?0017: + 00000042 63 61 6E 27 74 20 72 1862 DEFB 'can''t read: ' + 65 61 64 3A 20 + 0000004E 00 1863 DEFB 0 + 0000004F 1864 ?0022: + 0000004F 63 61 6E 27 74 20 77 1865 DEFB 'can''t write: ' + 72 69 74 65 3A 20 + 0000005C 00 1866 DEFB 0 + 0000005D 1867 ?0025: + 0000005D 59 1868 DEFB 'Y' + 0000005E 0A 00 1869 DEFB 10,0 + 00000060 1870 ?0036: + 00000060 43 72 65 61 74 69 6E 1871 DEFB 'Creating boot block...' + 67 20 62 6F 6F 74 20 + 62 6C 6F 63 6B 2E 2E + 2E + 00000076 0A 00 1872 DEFB 10,0 + 00000078 1873 ?0046: + 00000078 49 6E 69 74 69 61 6C 1874 DEFB 'Initializing inodes, be patient...' + 69 7A 69 6E 67 20 69 + 6E 6F 64 65 73 2C 20 + 62 65 20 70 61 74 69 + 65 6E 74 2E 2E 2E + 0000009A 0A 00 1875 DEFB 10,0 + 0000009C 1876 ?0057: + 0000009C 42 6C 6B 20 23 25 64 1877 DEFB 'Blk #%d' + 000000A3 0D 00 1878 DEFB 13,0 + 000000A5 1879 ?0060: + 000000A5 42 6C 6B 20 23 25 64 1880 DEFB 'Blk #%d' + 000000AC 0A 00 1881 DEFB 10,0 + 000000AE 1882 ?0063: + 000000AE 43 72 65 61 74 69 6E 1883 DEFB 'Creating super block...' + 67 20 73 75 70 65 72 + 20 62 6C 6F 63 6B 2E + 2E 2E + 000000C5 0A 00 1884 DEFB 10,0 + 000000C7 1885 ?0088: + 000000C7 4C 6F 77 20 6C 65 76 1886 DEFB 'Low level formatting...' + 65 6C 20 66 6F 72 6D + 61 74 74 69 6E 67 2E + 2E 2E + 000000DE 0A 00 1887 DEFB 10,0 + 000000E0 1888 ?0108: + 000000E0 49 6C 6C 65 67 61 6C 1889 DEFB 'Illegal switch %s' + 20 73 77 69 74 63 68 + 20 25 73 + 000000F1 0A 00 1890 DEFB 10,0 + 000000F3 1891 ?0111: + 000000F3 75 73 61 67 65 3A 20 1892 DEFB 'usage: mkfs [-yfqvb] device fsize isize [rsize]' + 6D 6B 66 73 20 5B 2D + 79 66 71 76 62 5D 20 + 64 65 76 69 63 65 20 + 66 73 69 7A 65 20 69 + 73 69 7A 65 20 5B 72 + 73 69 7A 65 5D + 00000122 0A 00 1893 DEFB 10,0 + 00000124 1894 ?0114: + 00000124 63 61 6E 27 74 20 6F 1895 DEFB 'can''t open: ' + 70 65 6E 3A 20 + 00000130 00 1896 DEFB 0 + 00000131 1897 ?0121: + 00000131 42 61 64 20 70 61 72 1898 DEFB 'Bad parameter values' + 61 6D 65 74 65 72 20 + 76 61 6C 75 65 73 + 00000145 0A 00 1899 DEFB 10,0 + 00000147 1900 ?0124: + 00000147 0A 1901 DEFB 10 + 00000148 4D 61 6B 69 6E 67 20 1902 DEFB 'Making filesystem on %s, fsize %u, isize %u, rsize %u. ' + 66 69 6C 65 73 79 73 + 74 65 6D 20 6F 6E 20 + 25 73 2C 20 66 73 69 + 7A 65 20 25 75 2C 20 + 69 73 69 7A 65 20 25 + 75 2C 20 72 73 69 7A + 65 20 25 75 2E 20 + 0000017F 00 1903 DEFB 0 + 00000180 1904 ?0127: + 00000180 43 6F 6E 66 69 72 6D 1905 DEFB 'Confirm? ' + 3F 20 + 00000189 00 1906 DEFB 0 + 0000018A 1907 ?0128: + 0000018A 0A 00 1908 DEFB 10,0 + 0000018C 1909 ?0133: + 0000018C 69 6E 6F 64 65 20 62 1910 DEFB 'inode bitmap' + 69 74 6D 61 70 + 00000198 00 1911 DEFB 0 + 00000199 1912 ?0137: + 00000199 62 6C 6F 63 6B 20 62 1913 DEFB 'block bitmap' + 69 74 6D 61 70 + 000001A5 00 1914 DEFB 0 + 000001A6 1915 ?0142: + 000001A6 6C 6F 63 6B 20 62 69 1916 DEFB 'lock bitmap' + 74 6D 61 70 + 000001B1 00 1917 DEFB 0 + 000001B2 1918 ?0143: + 000001B2 4E 6F 74 20 65 6E 6F 1919 DEFB 'Not enough memory for %s.' + 75 67 68 20 6D 65 6D + 6F 72 79 20 66 6F 72 + 20 25 73 2E + 000001CB 0A 00 1920 DEFB 10,0 + 000001CD 1921 ?0146: + 000001CD 46 69 6C 65 73 79 73 1922 DEFB 'Filesystem on %s successfully initialized!' + 74 65 6D 20 6F 6E 20 + 25 73 20 73 75 63 63 + 65 73 73 66 75 6C 6C + 79 20 69 6E 69 74 69 + 61 6C 69 7A 65 64 21 + 000001F7 0A 0A 00 1923 DEFB 10,10,0 + 1924 RSEG UDATA0 + 00000000 1925 device_handle: + 00000000 1926 DEFS 2 + 00000002 1927 device_name: + 00000002 1928 DEFS 512 + 00000202 1929 zeroed: + 00000202 1930 DEFS 512 + 00000402 1931 dev: + 00000402 1932 DEFS 2 + 00000404 1933 inode: + 00000404 1934 DEFS 512 + 00000604 1935 bitmap_inode: + 00000604 1936 DEFS 4 + 00000608 1937 bitmap_block: + 00000608 1938 DEFS 4 + 0000060C 1939 bitmap_immov: + 0000060C 1940 DEFS 4 + 00000610 1941 bitmap_final: + 00000610 1942 DEFS 4 + 00000614 1943 inode_bitmap: + 00000614 1944 DEFS 2 + 00000616 1945 block_bitmap: + 00000616 1946 DEFS 2 + 00000618 1947 immov_bitmap: + 00000618 1948 DEFS 2 + 0000061A 1949 ?0002: + 0000061A 1950 DEFS 512 + 1951 RSEG IDATA0 + 00000000 1952 bootblock: + 00000000 1953 DEFS 2048 + 00000800 1954 dirbuf: + 00000800 1955 DEFS 512 + 00000A00 1956 _fmt: + 00000A00 1957 DEFS 1 + 00000A01 1958 _yes: + 00000A01 1959 DEFS 1 + 00000A02 1960 _quick: + 00000A02 1961 DEFS 1 + 00000A03 1962 _verb: + 00000A03 1963 DEFS 1 + 00000A04 1964 _immov: + 00000A04 1965 DEFS 1 + 1966 RSEG CDATA0 + 00000000 35 1967 DEFB '5' + 00000001 32 1968 DEFB '2' + 00000002 43 1969 DEFB 'C' + 00000003 38 1970 DEFB '8' + 00000004 30 1971 DEFB '0' + 00000005 33 1972 DEFB '3' + 00000006 30 1973 DEFB '0' + 00000007 38 1974 DEFB '8' + 00000008 32 1975 DEFB '2' + 00000009 31 1976 DEFB '1' + 0000000A 31 1977 DEFB '1' + 0000000B 38 1978 DEFB '8' + 0000000C 34 1979 DEFB '4' + 0000000D 30 1980 DEFB '0' + 0000000E 32 1981 DEFB '2' + 0000000F 34 1982 DEFB '4' + 00000010 31 1983 DEFB '1' + 00000011 00 1984 DEFB 0 + 00000012 10 1985 DEFB 16 + 00000013 CD 1986 DEFB 205 + 00000014 0E 1987 DEFB 14 + 00000015 07 1988 DEFB 7 + 00000016 CD 1989 DEFB 205 + 00000017 16 1990 DEFB 22 + 00000018 06 1991 DEFB 6 + 00000019 CD 1992 DEFB 205 + 0000001A 6D 1993 DEFB 'm' + 0000001B 05 1994 DEFB 5 + 0000001C 18 1995 DEFB 24 + 0000001D 22 1996 DEFB '"' + 0000001E 00 1997 DEFB 0 + 0000001F 00 1998 DEFB 0 + 00000020 00 1999 DEFB 0 + 00000021 42 2000 DEFB 'B' + 00000022 4F 2001 DEFB 'O' + 00000023 4F 2002 DEFB 'O' + 00000024 54 2003 DEFB 'T' + 00000025 20 2004 DEFB ' ' + 00000026 20 2005 DEFB ' ' + 00000027 20 2006 DEFB ' ' + 00000028 20 2007 DEFB ' ' + 00000029 42 2008 DEFB 'B' + 0000002A 49 2009 DEFB 'I' + 0000002B 4E 2010 DEFB 'N' + 0000002C 00 2011 DEFB 0 + 0000002D 00 2012 DEFB 0 + 0000002E 00 2013 DEFB 0 + 0000002F 10 2014 DEFB 16 + 00000030 00 2015 DEFB 0 + 00000031 01 2016 DEFB 1 + 00000032 00 2017 DEFB 0 + 00000033 00 2018 DEFB 0 + 00000034 00 2019 DEFB 0 + 00000035 00 2020 DEFB 0 + 00000036 00 2021 DEFB 0 + 00000037 00 2022 DEFB 0 + 00000038 00 2023 DEFB 0 + 00000039 00 2024 DEFB 0 + 0000003A 00 2025 DEFB 0 + 0000003B 00 2026 DEFB 0 + 0000003C 00 2027 DEFB 0 + 0000003D 00 2028 DEFB 0 + 0000003E 00 2029 DEFB 0 + 0000003F 00 2030 DEFB 0 + 00000040 CD 2031 DEFB 205 + 00000041 56 2032 DEFB 'V' + 00000042 01 2033 DEFB 1 + 00000043 6C 2034 DEFB 'l' + 00000044 6F 2035 DEFB 'o' + 00000045 61 2036 DEFB 'a' + 00000046 64 2037 DEFB 'd' + 00000047 69 2038 DEFB 'i' + 00000048 6E 2039 DEFB 'n' + 00000049 67 2040 DEFB 'g' + 0000004A 20 2041 DEFB ' ' + 0000004B 2F 2042 DEFB '/' + 0000004C 62 2043 DEFB 'b' + 0000004D 6F 2044 DEFB 'o' + 0000004E 6F 2045 DEFB 'o' + 0000004F 74 2046 DEFB 't' + 00000050 2F 2047 DEFB '/' + 00000051 6B 2048 DEFB 'k' + 00000052 65 2049 DEFB 'e' + 00000053 72 2050 DEFB 'r' + 00000054 6E 2051 DEFB 'n' + 00000055 65 2052 DEFB 'e' + 00000056 6C 2053 DEFB 'l' + 00000057 2E 2054 DEFB '.' + 00000058 62 2055 DEFB 'b' + 00000059 69 2056 DEFB 'i' + 0000005A 6E 2057 DEFB 'n' + 0000005B 0D 2058 DEFB 13 + 0000005C 0A 2059 DEFB 10 + 0000005D 00 2060 DEFB 0 + 0000005E CD 2061 DEFB 205 + 0000005F B0 2062 DEFB 176 + 00000060 01 2063 DEFB 1 + 00000061 CD 2064 DEFB 205 + 00000062 9B 2065 DEFB 155 + 00000063 00 2066 DEFB 0 + 00000064 CD 2067 DEFB 205 + 00000065 70 2068 DEFB 'p' + 00000066 02 2069 DEFB 2 + 00000067 CD 2070 DEFB 205 + 00000068 90 2071 DEFB 144 + 00000069 01 2072 DEFB 1 + 0000006A CD 2073 DEFB 205 + 0000006B 17 2074 DEFB 23 + 0000006C 05 2075 DEFB 5 + 0000006D CD 2076 DEFB 205 + 0000006E 35 2077 DEFB '5' + 0000006F 05 2078 DEFB 5 + 00000070 ED 2079 DEFB 237 + 00000071 5B 2080 DEFB '[' + 00000072 0F 2081 DEFB 15 + 00000073 0E 2082 DEFB 14 + 00000074 D5 2083 DEFB 213 + 00000075 21 2084 DEFB '!' + 00000076 8C 2085 DEFB 140 + 00000077 00 2086 DEFB 0 + 00000078 0E 2087 DEFB 14 + 00000079 0F 2088 DEFB 15 + 0000007A ED 2089 DEFB 237 + 0000007B B0 2090 DEFB 176 + 0000007C C1 2091 DEFB 193 + 0000007D 2A 2092 DEFB '*' + 0000007E 11 2093 DEFB 17 + 0000007F 0E 2094 DEFB 14 + 00000080 F9 2095 DEFB 249 + 00000081 11 2096 DEFB 17 + 00000082 33 2097 DEFB '3' + 00000083 00 2098 DEFB 0 + 00000084 19 2099 DEFB 25 + 00000085 EB 2100 DEFB 235 + 00000086 2A 2101 DEFB '*' + 00000087 0B 2102 DEFB 11 + 00000088 0E 2103 DEFB 14 + 00000089 97 2104 DEFB 151 + 0000008A C5 2105 DEFB 197 + 0000008B C9 2106 DEFB 201 + 0000008C ED 2107 DEFB 237 + 0000008D 39 2108 DEFB '9' + 0000008E 39 2109 DEFB '9' + 0000008F 3E 2110 DEFB '>' + 00000090 F1 2111 DEFB 241 + 00000091 ED 2112 DEFB 237 + 00000092 39 2113 DEFB '9' + 00000093 3A 2114 DEFB ':' + 00000094 3A 2115 DEFB ':' + 00000095 80 2116 DEFB 128 + 00000096 10 2117 DEFB 16 + 00000097 ED 2118 DEFB 237 + 00000098 39 2119 DEFB '9' + 00000099 38 2120 DEFB '8' + 0000009A E9 2121 DEFB 233 + 0000009B 11 2122 DEFB 17 + 0000009C 04 2123 DEFB 4 + 0000009D 00 2124 DEFB 0 + 0000009E 21 2125 DEFB '!' + 0000009F E5 2126 DEFB 229 + 000000A0 07 2127 DEFB 7 + 000000A1 CD 2128 DEFB 205 + 000000A2 C5 2129 DEFB 197 + 000000A3 04 2130 DEFB 4 + 000000A4 2A 2131 DEFB '*' + 000000A5 E5 2132 DEFB 229 + 000000A6 07 2133 DEFB 7 + 000000A7 11 2134 DEFB 17 + 000000A8 C6 2135 DEFB 198 + 000000A9 31 2136 DEFB '1' + 000000AA B7 2137 DEFB 183 + 000000AB ED 2138 DEFB 237 + 000000AC 52 2139 DEFB 'R' + 000000AD 20 2140 DEFB ' ' + 000000AE 4E 2141 DEFB 'N' + 000000AF 2A 2142 DEFB '*' + 000000B0 E7 2143 DEFB 231 + 000000B1 07 2144 DEFB 7 + 000000B2 22 2145 DEFB '"' + 000000B3 93 2146 DEFB 147 + 000000B4 07 2147 DEFB 7 + 000000B5 2A 2148 DEFB '*' + 000000B6 E9 2149 DEFB 233 + 000000B7 07 2150 DEFB 7 + 000000B8 22 2151 DEFB '"' + 000000B9 95 2152 DEFB 149 + 000000BA 07 2153 DEFB 7 + 000000BB 2A 2154 DEFB '*' + 000000BC EB 2155 DEFB 235 + 000000BD 07 2156 DEFB 7 + 000000BE 22 2157 DEFB '"' + 000000BF 97 2158 DEFB 151 + 000000C0 07 2159 DEFB 7 + 000000C1 C9 2160 DEFB 201 + 000000C2 2A 2161 DEFB '*' + 000000C3 FF 2162 DEFB 255 + 000000C4 0D 2163 DEFB 13 + 000000C5 11 2164 DEFB 17 + 000000C6 C9 2165 DEFB 201 + 000000C7 A6 2166 DEFB 166 + 000000C8 B7 2167 DEFB 183 + 000000C9 ED 2168 DEFB 237 + 000000CA 52 2169 DEFB 'R' + 000000CB C8 2170 DEFB 200 + 000000CC CD 2171 DEFB 205 + 000000CD 56 2172 DEFB 'V' + 000000CE 01 2173 DEFB 1 + 000000CF 62 2174 DEFB 'b' + 000000D0 61 2175 DEFB 'a' + 000000D1 64 2176 DEFB 'd' + 000000D2 20 2177 DEFB ' ' + 000000D3 65 2178 DEFB 'e' + 000000D4 5F 2179 DEFB '_' + 000000D5 6D 2180 DEFB 'm' + 000000D6 61 2181 DEFB 'a' + 000000D7 67 2182 DEFB 'g' + 000000D8 69 2183 DEFB 'i' + 000000D9 63 2184 DEFB 'c' + 000000DA 3A 2185 DEFB ':' + 000000DB 20 2186 DEFB ' ' + 000000DC 00 2187 DEFB 0 + 000000DD 18 2188 DEFB 24 + 000000DE 2D 2189 DEFB '-' + 000000DF 2A 2190 DEFB '*' + 000000E0 01 2191 DEFB 1 + 000000E1 0E 2192 DEFB 14 + 000000E2 11 2193 DEFB 17 + 000000E3 03 2194 DEFB 3 + 000000E4 00 2195 DEFB 0 + 000000E5 B7 2196 DEFB 183 + 000000E6 ED 2197 DEFB 237 + 000000E7 52 2198 DEFB 'R' + 000000E8 C8 2199 DEFB 200 + 000000E9 CD 2200 DEFB 205 + 000000EA 56 2201 DEFB 'V' + 000000EB 01 2202 DEFB 1 + 000000EC 62 2203 DEFB 'b' + 000000ED 61 2204 DEFB 'a' + 000000EE 64 2205 DEFB 'd' + 000000EF 20 2206 DEFB ' ' + 000000F0 65 2207 DEFB 'e' + 000000F1 5F 2208 DEFB '_' + 000000F2 66 2209 DEFB 'f' + 000000F3 6F 2210 DEFB 'o' + 000000F4 72 2211 DEFB 'r' + 000000F5 6D 2212 DEFB 'm' + 000000F6 61 2213 DEFB 'a' + 000000F7 74 2214 DEFB 't' + 000000F8 3A 2215 DEFB ':' + 000000F9 20 2216 DEFB ' ' + 000000FA 00 2217 DEFB 0 + 000000FB 18 2218 DEFB 24 + 000000FC 0F 2219 DEFB 15 + 000000FD CD 2220 DEFB 205 + 000000FE 56 2221 DEFB 'V' + 000000FF 01 2222 DEFB 1 + 00000100 62 2223 DEFB 'b' + 00000101 61 2224 DEFB 'a' + 00000102 64 2225 DEFB 'd' + 00000103 20 2226 DEFB ' ' + 00000104 6D 2227 DEFB 'm' + 00000105 61 2228 DEFB 'a' + 00000106 67 2229 DEFB 'g' + 00000107 69 2230 DEFB 'i' + 00000108 63 2231 DEFB 'c' + 00000109 3A 2232 DEFB ':' + 0000010A 20 2233 DEFB ' ' + 0000010B 00 2234 DEFB 0 + 0000010C 19 2235 DEFB 25 + 0000010D CD 2236 DEFB 205 + 0000010E 1F 2237 DEFB 31 + 0000010F 06 2238 DEFB 6 + 00000110 CD 2239 DEFB 205 + 00000111 16 2240 DEFB 22 + 00000112 06 2241 DEFB 6 + 00000113 CD 2242 DEFB 205 + 00000114 56 2243 DEFB 'V' + 00000115 01 2244 DEFB 1 + 00000116 64 2245 DEFB 'd' + 00000117 6F 2246 DEFB 'o' + 00000118 69 2247 DEFB 'i' + 00000119 6E 2248 DEFB 'n' + 0000011A 67 2249 DEFB 'g' + 0000011B 20 2250 DEFB ' ' + 0000011C 61 2251 DEFB 'a' + 0000011D 20 2252 DEFB ' ' + 0000011E 63 2253 DEFB 'c' + 0000011F 6C 2254 DEFB 'l' + 00000120 65 2255 DEFB 'e' + 00000121 61 2256 DEFB 'a' + 00000122 6E 2257 DEFB 'n' + 00000123 20 2258 DEFB ' ' + 00000124 62 2259 DEFB 'b' + 00000125 6F 2260 DEFB 'o' + 00000126 6F 2261 DEFB 'o' + 00000127 74 2262 DEFB 't' + 00000128 0D 2263 DEFB 13 + 00000129 0A 2264 DEFB 10 + 0000012A 00 2265 DEFB 0 + 0000012B 21 2266 DEFB '!' + 0000012C E5 2267 DEFB 229 + 0000012D 07 2268 DEFB 7 + 0000012E 11 2269 DEFB 17 + 0000012F E6 2270 DEFB 230 + 00000130 07 2271 DEFB 7 + 00000131 01 2272 DEFB 1 + 00000132 FF 2273 DEFB 255 + 00000133 01 2274 DEFB 1 + 00000134 36 2275 DEFB '6' + 00000135 AA 2276 DEFB 170 + 00000136 ED 2277 DEFB 237 + 00000137 B0 2278 DEFB 176 + 00000138 11 2279 DEFB 17 + 00000139 00 2280 DEFB 0 + 0000013A 00 2281 DEFB 0 + 0000013B 06 2282 DEFB 6 + 0000013C 04 2283 DEFB 4 + 0000013D C5 2284 DEFB 197 + 0000013E D5 2285 DEFB 213 + 0000013F 21 2286 DEFB '!' + 00000140 E5 2287 DEFB 229 + 00000141 07 2288 DEFB 7 + 00000142 CD 2289 DEFB 205 + 00000143 D3 2290 DEFB 211 + 00000144 04 2291 DEFB 4 + 00000145 D1 2292 DEFB 209 + 00000146 C1 2293 DEFB 193 + 00000147 13 2294 DEFB 19 + 00000148 10 2295 DEFB 16 + 00000149 F3 2296 DEFB 243 + 0000014A 3E 2297 DEFB '>' + 0000014B AA 2298 DEFB 170 + 0000014C ED 2299 DEFB 237 + 0000014D 39 2300 DEFB '9' + 0000014E 0B 2301 DEFB 11 + 0000014F 3E 2302 DEFB '>' + 00000150 13 2303 DEFB 19 + 00000151 ED 2304 DEFB 237 + 00000152 39 2305 DEFB '9' + 00000153 0A 2306 DEFB 10 + 00000154 18 2307 DEFB 24 + 00000155 FE 2308 DEFB 254 + 00000156 CD 2309 DEFB 205 + 00000157 37 2310 DEFB '7' + 00000158 06 2311 DEFB 6 + 00000159 67 2312 DEFB 'g' + 0000015A 62 2313 DEFB 'b' + 0000015B 6F 2314 DEFB 'o' + 0000015C 6F 2315 DEFB 'o' + 0000015D 74 2316 DEFB 't' + 0000015E 3A 2317 DEFB ':' + 0000015F 20 2318 DEFB ' ' + 00000160 00 2319 DEFB 0 + 00000161 C3 2320 DEFB 195 + 00000162 37 2321 DEFB '7' + 00000163 06 2322 DEFB 6 + 00000164 11 2323 DEFB 17 + 00000165 02 2324 DEFB 2 + 00000166 00 2325 DEFB 0 + 00000167 CD 2326 DEFB 205 + 00000168 84 2327 DEFB 132 + 00000169 01 2328 DEFB 1 + 0000016A 3E 2329 DEFB '>' + 0000016B 81 2330 DEFB 129 + 0000016C ED 2331 DEFB 237 + 0000016D 39 2332 DEFB '9' + 0000016E 0B 2333 DEFB 11 + 0000016F 3E 2334 DEFB '>' + 00000170 13 2335 DEFB 19 + 00000171 ED 2336 DEFB 237 + 00000172 39 2337 DEFB '9' + 00000173 0A 2338 DEFB 10 + 00000174 97 2339 DEFB 151 + 00000175 3D 2340 DEFB '=' + 00000176 20 2341 DEFB ' ' + 00000177 FD 2342 DEFB 253 + 00000178 3D 2343 DEFB '=' + 00000179 20 2344 DEFB ' ' + 0000017A FD 2345 DEFB 253 + 0000017B 3D 2346 DEFB '=' + 0000017C 20 2347 DEFB ' ' + 0000017D FD 2348 DEFB 253 + 0000017E 3D 2349 DEFB '=' + 0000017F 20 2350 DEFB ' ' + 00000180 FD 2351 DEFB 253 + 00000181 11 2352 DEFB 17 + 00000182 00 2353 DEFB 0 + 00000183 02 2354 DEFB 2 + 00000184 21 2355 DEFB '!' + 00000185 81 2356 DEFB 129 + 00000186 FC 2357 DEFB 252 + 00000187 E5 2358 DEFB 229 + 00000188 FD 2359 DEFB 253 + 00000189 E1 2360 DEFB 225 + 0000018A 01 2361 DEFB 1 + 0000018B 05 2362 DEFB 5 + 0000018C 00 2363 DEFB 0 + 0000018D C3 2364 DEFB 195 + 0000018E 46 2365 DEFB 'F' + 0000018F 06 2366 DEFB 6 + 00000190 CD 2367 DEFB 205 + 00000191 56 2368 DEFB 'V' + 00000192 01 2369 DEFB 1 + 00000193 73 2370 DEFB 's' + 00000194 74 2371 DEFB 't' + 00000195 61 2372 DEFB 'a' + 00000196 72 2373 DEFB 'r' + 00000197 74 2374 DEFB 't' + 00000198 69 2375 DEFB 'i' + 00000199 6E 2376 DEFB 'n' + 0000019A 67 2377 DEFB 'g' + 0000019B 20 2378 DEFB ' ' + 0000019C 6F 2379 DEFB 'o' + 0000019D 70 2380 DEFB 'p' + 0000019E 65 2381 DEFB 'e' + 0000019F 72 2382 DEFB 'r' + 000001A0 61 2383 DEFB 'a' + 000001A1 74 2384 DEFB 't' + 000001A2 69 2385 DEFB 'i' + 000001A3 6E 2386 DEFB 'n' + 000001A4 67 2387 DEFB 'g' + 000001A5 20 2388 DEFB ' ' + 000001A6 73 2389 DEFB 's' + 000001A7 79 2390 DEFB 'y' + 000001A8 73 2391 DEFB 's' + 000001A9 74 2392 DEFB 't' + 000001AA 65 2393 DEFB 'e' + 000001AB 6D 2394 DEFB 'm' + 000001AC 0D 2395 DEFB 13 + 000001AD 0A 2396 DEFB 10 + 000001AE 00 2397 DEFB 0 + 000001AF C9 2398 DEFB 201 + 000001B0 CD 2399 DEFB 205 + 000001B1 64 2400 DEFB 'd' + 000001B2 01 2401 DEFB 1 + 000001B3 3E 2402 DEFB '>' + 000001B4 10 2403 DEFB 16 + 000001B5 ED 2404 DEFB 237 + 000001B6 39 2405 DEFB '9' + 000001B7 3A 2406 DEFB ':' + 000001B8 3E 2407 DEFB '>' + 000001B9 FF 2408 DEFB 255 + 000001BA ED 2409 DEFB 237 + 000001BB 39 2410 DEFB '9' + 000001BC 38 2411 DEFB '8' + 000001BD 11 2412 DEFB 17 + 000001BE 01 2413 DEFB 1 + 000001BF 1F 2414 DEFB 31 + 000001C0 01 2415 DEFB 1 + 000001C1 FF 2416 DEFB 255 + 000001C2 00 2417 DEFB 0 + 000001C3 CD 2418 DEFB 205 + 000001C4 E8 2419 DEFB 232 + 000001C5 01 2420 DEFB 1 + 000001C6 21 2421 DEFB '!' + 000001C7 00 2422 DEFB 0 + 000001C8 F1 2423 DEFB 241 + 000001C9 22 2424 DEFB '"' + 000001CA 80 2425 DEFB 128 + 000001CB 1F 2426 DEFB 31 + 000001CC 97 2427 DEFB 151 + 000001CD ED 2428 DEFB 237 + 000001CE 39 2429 DEFB '9' + 000001CF 38 2430 DEFB '8' + 000001D0 11 2431 DEFB 17 + 000001D1 01 2432 DEFB 1 + 000001D2 10 2433 DEFB 16 + 000001D3 0D 2434 DEFB 13 + 000001D4 CD 2435 DEFB 205 + 000001D5 E8 2436 DEFB 232 + 000001D6 01 2437 DEFB 1 + 000001D7 21 2438 DEFB '!' + 000001D8 80 2439 DEFB 128 + 000001D9 0F 2440 DEFB 15 + 000001DA 22 2441 DEFB '"' + 000001DB FC 2442 DEFB 252 + 000001DC 10 2443 DEFB 16 + 000001DD 21 2444 DEFB '!' + 000001DE 80 2445 DEFB 128 + 000001DF 10 2446 DEFB 16 + 000001E0 22 2447 DEFB '"' + 000001E1 FE 2448 DEFB 254 + 000001E2 10 2449 DEFB 16 + 000001E3 C9 2450 DEFB 201 + 000001E4 CD 2451 DEFB 205 + 000001E5 0B 2452 DEFB 11 + 000001E6 02 2453 DEFB 2 + 000001E7 D8 2454 DEFB 216 + 000001E8 6B 2455 DEFB 'k' + 000001E9 62 2456 DEFB 'b' + 000001EA 2B 2457 DEFB '+' + 000001EB 36 2458 DEFB '6' + 000001EC 00 2459 DEFB 0 + 000001ED 79 2460 DEFB 'y' + 000001EE B0 2461 DEFB 176 + 000001EF C8 2462 DEFB 200 + 000001F0 ED 2463 DEFB 237 + 000001F1 B0 2464 DEFB 176 + 000001F2 C9 2465 DEFB 201 + 000001F3 B7 2466 DEFB 183 + 000001F4 ED 2467 DEFB 237 + 000001F5 52 2468 DEFB 'R' + 000001F6 D0 2469 DEFB 208 + 000001F7 19 2470 DEFB 25 + 000001F8 EB 2471 DEFB 235 + 000001F9 C9 2472 DEFB 201 + 000001FA 2A 2473 DEFB '*' + 000001FB 07 2474 DEFB 7 + 000001FC 0E 2475 DEFB 14 + 000001FD 11 2476 DEFB 17 + 000001FE 14 2477 DEFB 20 + 000001FF 00 2478 DEFB 0 + 00000200 18 2479 DEFB 24 + 00000201 11 2480 DEFB 17 + 00000202 2A 2481 DEFB '*' + 00000203 0D 2482 DEFB 13 + 00000204 0E 2483 DEFB 14 + 00000205 ED 2484 DEFB 237 + 00000206 5B 2485 DEFB '[' + 00000207 09 2486 DEFB 9 + 00000208 0E 2487 DEFB 14 + 00000209 18 2488 DEFB 24 + 0000020A 08 2489 DEFB 8 + 0000020B 2A 2490 DEFB '*' + 0000020C 11 2491 DEFB 17 + 0000020D 0E 2492 DEFB 14 + 0000020E ED 2493 DEFB 237 + 0000020F 5B 2494 DEFB '[' + 00000210 0D 2495 DEFB 13 + 00000211 0E 2496 DEFB 14 + 00000212 13 2497 DEFB 19 + 00000213 B7 2498 DEFB 183 + 00000214 ED 2499 DEFB 237 + 00000215 52 2500 DEFB 'R' + 00000216 4D 2501 DEFB 'M' + 00000217 44 2502 DEFB 'D' + 00000218 C9 2503 DEFB 201 + 00000219 22 2504 DEFB '"' + 0000021A 99 2505 DEFB 153 + 0000021B 07 2506 DEFB 7 + 0000021C CD 2507 DEFB 205 + 0000021D B3 2508 DEFB 179 + 0000021E 03 2509 DEFB 3 + 0000021F 01 2510 DEFB 1 + 00000220 10 2511 DEFB 16 + 00000221 00 2512 DEFB 0 + 00000222 21 2513 DEFB '!' + 00000223 E5 2514 DEFB 229 + 00000224 0D 2515 DEFB 13 + 00000225 CD 2516 DEFB 205 + 00000226 3C 2517 DEFB '<' + 00000227 03 2518 DEFB 3 + 00000228 D8 2519 DEFB 216 + 00000229 23 2520 DEFB '#' + 0000022A ED 2521 DEFB 237 + 0000022B 5B 2522 DEFB '[' + 0000022C 99 2523 DEFB 153 + 0000022D 07 2524 DEFB 7 + 0000022E 06 2525 DEFB 6 + 0000022F 0E 2526 DEFB 14 + 00000230 23 2527 DEFB '#' + 00000231 1A 2528 DEFB 26 + 00000232 BE 2529 DEFB 190 + 00000233 20 2530 DEFB ' ' + 00000234 EA 2531 DEFB 234 + 00000235 B7 2532 DEFB 183 + 00000236 28 2533 DEFB '(' + 00000237 05 2534 DEFB 5 + 00000238 13 2535 DEFB 19 + 00000239 10 2536 DEFB 16 + 0000023A F5 2537 DEFB 245 + 0000023B 1A 2538 DEFB 26 + 0000023C B7 2539 DEFB 183 + 0000023D ED 2540 DEFB 237 + 0000023E 5B 2541 DEFB '[' + 0000023F E5 2542 DEFB 229 + 00000240 0D 2543 DEFB 13 + 00000241 C9 2544 DEFB 201 + 00000242 CD 2545 DEFB 205 + 00000243 56 2546 DEFB 'V' + 00000244 01 2547 DEFB 1 + 00000245 66 2548 DEFB 'f' + 00000246 69 2549 DEFB 'i' + 00000247 6C 2550 DEFB 'l' + 00000248 65 2551 DEFB 'e' + 00000249 20 2552 DEFB ' ' + 0000024A 6E 2553 DEFB 'n' + 0000024B 6F 2554 DEFB 'o' + 0000024C 74 2555 DEFB 't' + 0000024D 20 2556 DEFB ' ' + 0000024E 66 2557 DEFB 'f' + 0000024F 6F 2558 DEFB 'o' + 00000250 75 2559 DEFB 'u' + 00000251 6E 2560 DEFB 'n' + 00000252 64 2561 DEFB 'd' + 00000253 0D 2562 DEFB 13 + 00000254 0A 2563 DEFB 10 + 00000255 00 2564 DEFB 0 + 00000256 C3 2565 DEFB 195 + 00000257 13 2566 DEFB 19 + 00000258 01 2567 DEFB 1 + 00000259 CD 2568 DEFB 205 + 0000025A 56 2569 DEFB 'V' + 0000025B 01 2570 DEFB 1 + 0000025C 66 2571 DEFB 'f' + 0000025D 69 2572 DEFB 'i' + 0000025E 6C 2573 DEFB 'l' + 0000025F 65 2574 DEFB 'e' + 00000260 20 2575 DEFB ' ' + 00000261 74 2576 DEFB 't' + 00000262 6F 2577 DEFB 'o' + 00000263 6F 2578 DEFB 'o' + 00000264 20 2579 DEFB ' ' + 00000265 73 2580 DEFB 's' + 00000266 68 2581 DEFB 'h' + 00000267 6F 2582 DEFB 'o' + 00000268 72 2583 DEFB 'r' + 00000269 74 2584 DEFB 't' + 0000026A 0D 2585 DEFB 13 + 0000026B 0A 2586 DEFB 10 + 0000026C 00 2587 DEFB 0 + 0000026D C3 2588 DEFB 195 + 0000026E 13 2589 DEFB 19 + 0000026F 01 2590 DEFB 1 + 00000270 11 2591 DEFB 17 + 00000271 01 2592 DEFB 1 + 00000272 00 2593 DEFB 0 + 00000273 21 2594 DEFB '!' + 00000274 71 2595 DEFB 'q' + 00000275 07 2596 DEFB 7 + 00000276 CD 2597 DEFB 205 + 00000277 19 2598 DEFB 25 + 00000278 02 2599 DEFB 2 + 00000279 20 2600 DEFB ' ' + 0000027A C7 2601 DEFB 199 + 0000027B 21 2602 DEFB '!' + 0000027C 76 2603 DEFB 'v' + 0000027D 07 2604 DEFB 7 + 0000027E CD 2605 DEFB 205 + 0000027F 19 2606 DEFB 25 + 00000280 02 2607 DEFB 2 + 00000281 20 2608 DEFB ' ' + 00000282 BF 2609 DEFB 191 + 00000283 CD 2610 DEFB 205 + 00000284 B3 2611 DEFB 179 + 00000285 03 2612 DEFB 3 + 00000286 21 2613 DEFB '!' + 00000287 FF 2614 DEFB 255 + 00000288 0D 2615 DEFB 13 + 00000289 01 2616 DEFB 1 + 0000028A 14 2617 DEFB 20 + 0000028B 00 2618 DEFB 0 + 0000028C CD 2619 DEFB 205 + 0000028D 3C 2620 DEFB '<' + 0000028E 03 2621 DEFB 3 + 0000028F 38 2622 DEFB '8' + 00000290 C8 2623 DEFB 200 + 00000291 CD 2624 DEFB 205 + 00000292 C2 2625 DEFB 194 + 00000293 00 2626 DEFB 0 + 00000294 CD 2627 DEFB 205 + 00000295 DF 2628 DEFB 223 + 00000296 00 2629 DEFB 0 + 00000297 3E 2630 DEFB '>' + 00000298 FF 2631 DEFB 255 + 00000299 ED 2632 DEFB 237 + 0000029A 39 2633 DEFB '9' + 0000029B 38 2634 DEFB '8' + 0000029C CD 2635 DEFB 205 + 0000029D FA 2636 DEFB 250 + 0000029E 01 2637 DEFB 1 + 0000029F 21 2638 DEFB '!' + 000002A0 00 2639 DEFB 0 + 000002A1 10 2640 DEFB 16 + 000002A2 CD 2641 DEFB 205 + 000002A3 3C 2642 DEFB '<' + 000002A4 03 2643 DEFB 3 + 000002A5 97 2644 DEFB 151 + 000002A6 ED 2645 DEFB 237 + 000002A7 39 2646 DEFB '9' + 000002A8 38 2647 DEFB '8' + 000002A9 CD 2648 DEFB 205 + 000002AA 02 2649 DEFB 2 + 000002AB 02 2650 DEFB 2 + 000002AC EB 2651 DEFB 235 + 000002AD CD 2652 DEFB 205 + 000002AE 3C 2653 DEFB '<' + 000002AF 03 2654 DEFB 3 + 000002B0 CD 2655 DEFB 205 + 000002B1 E4 2656 DEFB 228 + 000002B2 01 2657 DEFB 1 + 000002B3 21 2658 DEFB '!' + 000002B4 15 2659 DEFB 21 + 000002B5 0E 2660 DEFB 14 + 000002B6 22 2661 DEFB '"' + 000002B7 13 2662 DEFB 19 + 000002B8 0E 2663 DEFB 14 + 000002B9 CD 2664 DEFB 205 + 000002BA BF 2665 DEFB 191 + 000002BB 03 2666 DEFB 3 + 000002BC CD 2667 DEFB 205 + 000002BD DE 2668 DEFB 222 + 000002BE 03 2669 DEFB 3 + 000002BF 7D 2670 DEFB '}' + 000002C0 B4 2671 DEFB 180 + 000002C1 28 2672 DEFB '(' + 000002C2 3E 2673 DEFB '>' + 000002C3 CD 2674 DEFB 205 + 000002C4 06 2675 DEFB 6 + 000002C5 04 2676 DEFB 4 + 000002C6 7B 2677 DEFB '{' + 000002C7 B2 2678 DEFB 178 + 000002C8 28 2679 DEFB '(' + 000002C9 49 2680 DEFB 'I' + 000002CA 7B 2681 DEFB '{' + 000002CB E6 2682 DEFB 230 + 000002CC 07 2683 DEFB 7 + 000002CD 20 2684 DEFB ' ' + 000002CE 59 2685 DEFB 'Y' + 000002CF 2A 2686 DEFB '*' + 000002D0 13 2687 DEFB 19 + 000002D1 0E 2688 DEFB 14 + 000002D2 73 2689 DEFB 's' + 000002D3 23 2690 DEFB '#' + 000002D4 72 2691 DEFB 'r' + 000002D5 23 2692 DEFB '#' + 000002D6 22 2693 DEFB '"' + 000002D7 13 2694 DEFB 19 + 000002D8 0E 2695 DEFB 14 + 000002D9 06 2696 DEFB 6 + 000002DA 1F 2697 DEFB 31 + 000002DB C5 2698 DEFB 197 + 000002DC D5 2699 DEFB 213 + 000002DD CD 2700 DEFB 205 + 000002DE DE 2701 DEFB 222 + 000002DF 03 2702 DEFB 3 + 000002E0 7D 2703 DEFB '}' + 000002E1 B4 2704 DEFB 180 + 000002E2 28 2705 DEFB '(' + 000002E3 1A 2706 DEFB 26 + 000002E4 CD 2707 DEFB 205 + 000002E5 06 2708 DEFB 6 + 000002E6 04 2709 DEFB 4 + 000002E7 7B 2710 DEFB '{' + 000002E8 B2 2711 DEFB 178 + 000002E9 28 2712 DEFB '(' + 000002EA 28 2713 DEFB '(' + 000002EB EB 2714 DEFB 235 + 000002EC D1 2715 DEFB 209 + 000002ED 13 2716 DEFB 19 + 000002EE B7 2717 DEFB 183 + 000002EF ED 2718 DEFB 237 + 000002F0 52 2719 DEFB 'R' + 000002F1 20 2720 DEFB ' ' + 000002F2 35 2721 DEFB '5' + 000002F3 C1 2722 DEFB 193 + 000002F4 10 2723 DEFB 16 + 000002F5 E5 2724 DEFB 229 + 000002F6 CD 2725 DEFB 205 + 000002F7 DE 2726 DEFB 222 + 000002F8 03 2727 DEFB 3 + 000002F9 7D 2728 DEFB '}' + 000002FA B4 2729 DEFB 180 + 000002FB 20 2730 DEFB ' ' + 000002FC C6 2731 DEFB 198 + 000002FD C9 2732 DEFB 201 + 000002FE E1 2733 DEFB 225 + 000002FF E1 2734 DEFB 225 + 00000300 C9 2735 DEFB 201 + 00000301 CD 2736 DEFB 205 + 00000302 56 2737 DEFB 'V' + 00000303 01 2738 DEFB 1 + 00000304 6E 2739 DEFB 'n' + 00000305 75 2740 DEFB 'u' + 00000306 6C 2741 DEFB 'l' + 00000307 6C 2742 DEFB 'l' + 00000308 20 2743 DEFB ' ' + 00000309 66 2744 DEFB 'f' + 0000030A 69 2745 DEFB 'i' + 0000030B 6C 2746 DEFB 'l' + 0000030C 65 2747 DEFB 'e' + 0000030D 0D 2748 DEFB 13 + 0000030E 0A 2749 DEFB 10 + 0000030F 00 2750 DEFB 0 + 00000310 C3 2751 DEFB 195 + 00000311 13 2752 DEFB 19 + 00000312 01 2753 DEFB 1 + 00000313 CD 2754 DEFB 205 + 00000314 56 2755 DEFB 'V' + 00000315 01 2756 DEFB 1 + 00000316 68 2757 DEFB 'h' + 00000317 6F 2758 DEFB 'o' + 00000318 6C 2759 DEFB 'l' + 00000319 65 2760 DEFB 'e' + 0000031A 20 2761 DEFB ' ' + 0000031B 69 2762 DEFB 'i' + 0000031C 6E 2763 DEFB 'n' + 0000031D 20 2764 DEFB ' ' + 0000031E 66 2765 DEFB 'f' + 0000031F 69 2766 DEFB 'i' + 00000320 6C 2767 DEFB 'l' + 00000321 65 2768 DEFB 'e' + 00000322 0D 2769 DEFB 13 + 00000323 0A 2770 DEFB 10 + 00000324 00 2771 DEFB 0 + 00000325 C3 2772 DEFB 195 + 00000326 13 2773 DEFB 19 + 00000327 01 2774 DEFB 1 + 00000328 CD 2775 DEFB 205 + 00000329 56 2776 DEFB 'V' + 0000032A 01 2777 DEFB 1 + 0000032B 6E 2778 DEFB 'n' + 0000032C 6F 2779 DEFB 'o' + 0000032D 74 2780 DEFB 't' + 0000032E 20 2781 DEFB ' ' + 0000032F 61 2782 DEFB 'a' + 00000330 6C 2783 DEFB 'l' + 00000331 69 2784 DEFB 'i' + 00000332 67 2785 DEFB 'g' + 00000333 6E 2786 DEFB 'n' + 00000334 65 2787 DEFB 'e' + 00000335 64 2788 DEFB 'd' + 00000336 0D 2789 DEFB 13 + 00000337 0A 2790 DEFB 10 + 00000338 00 2791 DEFB 0 + 00000339 C3 2792 DEFB 195 + 0000033A 13 2793 DEFB 19 + 0000033B 01 2794 DEFB 1 + 0000033C E5 2795 DEFB 229 + 0000033D C5 2796 DEFB 197 + 0000033E ED 2797 DEFB 237 + 0000033F 43 2798 DEFB 'C' + 00000340 F9 2799 DEFB 249 + 00000341 0D 2800 DEFB 13 + 00000342 22 2801 DEFB '"' + 00000343 FB 2802 DEFB 251 + 00000344 0D 2803 DEFB 13 + 00000345 21 2804 DEFB '!' + 00000346 00 2805 DEFB 0 + 00000347 00 2806 DEFB 0 + 00000348 22 2807 DEFB '"' + 00000349 FD 2808 DEFB 253 + 0000034A 0D 2809 DEFB 13 + 0000034B 2A 2810 DEFB '*' + 0000034C F5 2811 DEFB 245 + 0000034D 0D 2812 DEFB 13 + 0000034E 7D 2813 DEFB '}' + 0000034F B4 2814 DEFB 180 + 00000350 20 2815 DEFB ' ' + 00000351 1A 2816 DEFB 26 + 00000352 CD 2817 DEFB 205 + 00000353 DE 2818 DEFB 222 + 00000354 03 2819 DEFB 3 + 00000355 7D 2820 DEFB '}' + 00000356 B4 2821 DEFB 180 + 00000357 28 2822 DEFB '(' + 00000358 4F 2823 DEFB 'O' + 00000359 22 2824 DEFB '"' + 0000035A F5 2825 DEFB 245 + 0000035B 0D 2826 DEFB 13 + 0000035C CD 2827 DEFB 205 + 0000035D 06 2828 DEFB 6 + 0000035E 04 2829 DEFB 4 + 0000035F 7B 2830 DEFB '{' + 00000360 B2 2831 DEFB 178 + 00000361 28 2832 DEFB '(' + 00000362 B0 2833 DEFB 176 + 00000363 21 2834 DEFB '!' + 00000364 E5 2835 DEFB 229 + 00000365 07 2836 DEFB 7 + 00000366 22 2837 DEFB '"' + 00000367 F7 2838 DEFB 247 + 00000368 0D 2839 DEFB 13 + 00000369 CD 2840 DEFB 205 + 0000036A C5 2841 DEFB 197 + 0000036B 04 2842 DEFB 4 + 0000036C 2A 2843 DEFB '*' + 0000036D F5 2844 DEFB 245 + 0000036E 0D 2845 DEFB 13 + 0000036F ED 2846 DEFB 237 + 00000370 5B 2847 DEFB '[' + 00000371 F9 2848 DEFB 249 + 00000372 0D 2849 DEFB 13 + 00000373 CD 2850 DEFB 205 + 00000374 F3 2851 DEFB 243 + 00000375 01 2852 DEFB 1 + 00000376 2A 2853 DEFB '*' + 00000377 F5 2854 DEFB 245 + 00000378 0D 2855 DEFB 13 + 00000379 B7 2856 DEFB 183 + 0000037A ED 2857 DEFB 237 + 0000037B 52 2858 DEFB 'R' + 0000037C 22 2859 DEFB '"' + 0000037D F5 2860 DEFB 245 + 0000037E 0D 2861 DEFB 13 + 0000037F 2A 2862 DEFB '*' + 00000380 F9 2863 DEFB 249 + 00000381 0D 2864 DEFB 13 + 00000382 B7 2865 DEFB 183 + 00000383 ED 2866 DEFB 237 + 00000384 52 2867 DEFB 'R' + 00000385 22 2868 DEFB '"' + 00000386 F9 2869 DEFB 249 + 00000387 0D 2870 DEFB 13 + 00000388 2A 2871 DEFB '*' + 00000389 FD 2872 DEFB 253 + 0000038A 0D 2873 DEFB 13 + 0000038B 19 2874 DEFB 25 + 0000038C 22 2875 DEFB '"' + 0000038D FD 2876 DEFB 253 + 0000038E 0D 2877 DEFB 13 + 0000038F 4B 2878 DEFB 'K' + 00000390 42 2879 DEFB 'B' + 00000391 ED 2880 DEFB 237 + 00000392 5B 2881 DEFB '[' + 00000393 FB 2882 DEFB 251 + 00000394 0D 2883 DEFB 13 + 00000395 2A 2884 DEFB '*' + 00000396 F7 2885 DEFB 247 + 00000397 0D 2886 DEFB 13 + 00000398 ED 2887 DEFB 237 + 00000399 B0 2888 DEFB 176 + 0000039A 22 2889 DEFB '"' + 0000039B F7 2890 DEFB 247 + 0000039C 0D 2891 DEFB 13 + 0000039D ED 2892 DEFB 237 + 0000039E 53 2893 DEFB 'S' + 0000039F FB 2894 DEFB 251 + 000003A0 0D 2895 DEFB 13 + 000003A1 2A 2896 DEFB '*' + 000003A2 F9 2897 DEFB 249 + 000003A3 0D 2898 DEFB 13 + 000003A4 7D 2899 DEFB '}' + 000003A5 B4 2900 DEFB 180 + 000003A6 20 2901 DEFB ' ' + 000003A7 AA 2902 DEFB 170 + 000003A8 2A 2903 DEFB '*' + 000003A9 FD 2904 DEFB 253 + 000003AA 0D 2905 DEFB 13 + 000003AB 4D 2906 DEFB 'M' + 000003AC 44 2907 DEFB 'D' + 000003AD D1 2908 DEFB 209 + 000003AE B7 2909 DEFB 183 + 000003AF ED 2910 DEFB 237 + 000003B0 52 2911 DEFB 'R' + 000003B1 E1 2912 DEFB 225 + 000003B2 C9 2913 DEFB 201 + 000003B3 21 2914 DEFB '!' + 000003B4 A5 2915 DEFB 165 + 000003B5 07 2916 DEFB 7 + 000003B6 CD 2917 DEFB 205 + 000003B7 79 2918 DEFB 'y' + 000003B8 04 2919 DEFB 4 + 000003B9 21 2920 DEFB '!' + 000003BA 00 2921 DEFB 0 + 000003BB 00 2922 DEFB 0 + 000003BC 22 2923 DEFB '"' + 000003BD F5 2924 DEFB 245 + 000003BE 0D 2925 DEFB 13 + 000003BF 2A 2926 DEFB '*' + 000003C0 AD 2927 DEFB 173 + 000003C1 07 2928 DEFB 7 + 000003C2 22 2929 DEFB '"' + 000003C3 9B 2930 DEFB 155 + 000003C4 07 2931 DEFB 7 + 000003C5 2A 2932 DEFB '*' + 000003C6 AF 2933 DEFB 175 + 000003C7 07 2934 DEFB 7 + 000003C8 22 2935 DEFB '"' + 000003C9 9D 2936 DEFB 157 + 000003CA 07 2937 DEFB 7 + 000003CB 21 2938 DEFB '!' + 000003CC BD 2939 DEFB 189 + 000003CD 07 2940 DEFB 7 + 000003CE 22 2941 DEFB '"' + 000003CF 9F 2942 DEFB 159 + 000003D0 07 2943 DEFB 7 + 000003D1 21 2944 DEFB '!' + 000003D2 E5 2945 DEFB 229 + 000003D3 0B 2946 DEFB 11 + 000003D4 22 2947 DEFB '"' + 000003D5 A1 2948 DEFB 161 + 000003D6 07 2949 DEFB 7 + 000003D7 21 2950 DEFB '!' + 000003D8 E5 2951 DEFB 229 + 000003D9 0D 2952 DEFB 13 + 000003DA 22 2953 DEFB '"' + 000003DB A3 2954 DEFB 163 + 000003DC 07 2955 DEFB 7 + 000003DD C9 2956 DEFB 201 + 000003DE 2A 2957 DEFB '*' + 000003DF 9B 2958 DEFB 155 + 000003E0 07 2959 DEFB 7 + 000003E1 ED 2960 DEFB 237 + 000003E2 5B 2961 DEFB '[' + 000003E3 9D 2962 DEFB 157 + 000003E4 07 2963 DEFB 7 + 000003E5 01 2964 DEFB 1 + 000003E6 00 2965 DEFB 0 + 000003E7 02 2966 DEFB 2 + 000003E8 B7 2967 DEFB 183 + 000003E9 ED 2968 DEFB 237 + 000003EA 42 2969 DEFB 'B' + 000003EB EB 2970 DEFB 235 + 000003EC 06 2971 DEFB 6 + 000003ED 00 2972 DEFB 0 + 000003EE ED 2973 DEFB 237 + 000003EF 42 2974 DEFB 'B' + 000003F0 EB 2975 DEFB 235 + 000003F1 38 2976 DEFB '8' + 000003F2 0B 2977 DEFB 11 + 000003F3 22 2978 DEFB '"' + 000003F4 9B 2979 DEFB 155 + 000003F5 07 2980 DEFB 7 + 000003F6 ED 2981 DEFB 237 + 000003F7 53 2982 DEFB 'S' + 000003F8 9D 2983 DEFB 157 + 000003F9 07 2984 DEFB 7 + 000003FA 21 2985 DEFB '!' + 000003FB 00 2986 DEFB 0 + 000003FC 02 2987 DEFB 2 + 000003FD C9 2988 DEFB 201 + 000003FE 2A 2989 DEFB '*' + 000003FF 9B 2990 DEFB 155 + 00000400 07 2991 DEFB 7 + 00000401 ED 2992 DEFB 237 + 00000402 43 2993 DEFB 'C' + 00000403 9B 2994 DEFB 155 + 00000404 07 2995 DEFB 7 + 00000405 C9 2996 DEFB 201 + 00000406 2A 2997 DEFB '*' + 00000407 9F 2998 DEFB 159 + 00000408 07 2999 DEFB 7 + 00000409 11 3000 DEFB 17 + 0000040A E1 3001 DEFB 225 + 0000040B 07 3002 DEFB 7 + 0000040C B7 3003 DEFB 183 + 0000040D ED 3004 DEFB 237 + 0000040E 52 3005 DEFB 'R' + 0000040F 30 3006 DEFB '0' + 00000410 0B 3007 DEFB 11 + 00000411 2A 3008 DEFB '*' + 00000412 9F 3009 DEFB 159 + 00000413 07 3010 DEFB 7 + 00000414 5E 3011 DEFB '^' + 00000415 23 3012 DEFB '#' + 00000416 56 3013 DEFB 'V' + 00000417 23 3014 DEFB '#' + 00000418 22 3015 DEFB '"' + 00000419 9F 3016 DEFB 159 + 0000041A 07 3017 DEFB 7 + 0000041B C9 3018 DEFB 201 + 0000041C 2A 3019 DEFB '*' + 0000041D A1 3020 DEFB 161 + 0000041E 07 3021 DEFB 7 + 0000041F 11 3022 DEFB 17 + 00000420 E5 3023 DEFB 229 + 00000421 0B 3024 DEFB 11 + 00000422 B7 3025 DEFB 183 + 00000423 ED 3026 DEFB 237 + 00000424 52 3027 DEFB 'R' + 00000425 38 3028 DEFB '8' + 00000426 13 3029 DEFB 19 + 00000427 2A 3030 DEFB '*' + 00000428 9F 3031 DEFB 159 + 00000429 07 3032 DEFB 7 + 0000042A 5E 3033 DEFB '^' + 0000042B 23 3034 DEFB '#' + 0000042C 56 3035 DEFB 'V' + 0000042D 23 3036 DEFB '#' + 0000042E 22 3037 DEFB '"' + 0000042F 9F 3038 DEFB 159 + 00000430 07 3039 DEFB 7 + 00000431 21 3040 DEFB '!' + 00000432 E5 3041 DEFB 229 + 00000433 09 3042 DEFB 9 + 00000434 22 3043 DEFB '"' + 00000435 A1 3044 DEFB 161 + 00000436 07 3045 DEFB 7 + 00000437 CD 3046 DEFB 205 + 00000438 C5 3047 DEFB 197 + 00000439 04 3048 DEFB 4 + 0000043A 2A 3049 DEFB '*' + 0000043B 9F 3050 DEFB 159 + 0000043C 07 3051 DEFB 7 + 0000043D 11 3052 DEFB 17 + 0000043E E4 3053 DEFB 228 + 0000043F 07 3054 DEFB 7 + 00000440 B7 3055 DEFB 183 + 00000441 ED 3056 DEFB 237 + 00000442 52 3057 DEFB 'R' + 00000443 30 3058 DEFB '0' + 00000444 0B 3059 DEFB 11 + 00000445 2A 3060 DEFB '*' + 00000446 A1 3061 DEFB 161 + 00000447 07 3062 DEFB 7 + 00000448 5E 3063 DEFB '^' + 00000449 23 3064 DEFB '#' + 0000044A 56 3065 DEFB 'V' + 0000044B 23 3066 DEFB '#' + 0000044C 22 3067 DEFB '"' + 0000044D A1 3068 DEFB 161 + 0000044E 07 3069 DEFB 7 + 0000044F C9 3070 DEFB 201 + 00000450 2A 3071 DEFB '*' + 00000451 A3 3072 DEFB 163 + 00000452 07 3073 DEFB 7 + 00000453 11 3074 DEFB 17 + 00000454 E5 3075 DEFB 229 + 00000455 0D 3076 DEFB 13 + 00000456 B7 3077 DEFB 183 + 00000457 ED 3078 DEFB 237 + 00000458 52 3079 DEFB 'R' + 00000459 38 3080 DEFB '8' + 0000045A 13 3081 DEFB 19 + 0000045B 2A 3082 DEFB '*' + 0000045C A1 3083 DEFB 161 + 0000045D 07 3084 DEFB 7 + 0000045E 5E 3085 DEFB '^' + 0000045F 23 3086 DEFB '#' + 00000460 56 3087 DEFB 'V' + 00000461 23 3088 DEFB '#' + 00000462 22 3089 DEFB '"' + 00000463 A1 3090 DEFB 161 + 00000464 07 3091 DEFB 7 + 00000465 21 3092 DEFB '!' + 00000466 E5 3093 DEFB 229 + 00000467 0B 3094 DEFB 11 + 00000468 22 3095 DEFB '"' + 00000469 A3 3096 DEFB 163 + 0000046A 07 3097 DEFB 7 + 0000046B CD 3098 DEFB 205 + 0000046C C5 3099 DEFB 197 + 0000046D 04 3100 DEFB 4 + 0000046E 2A 3101 DEFB '*' + 0000046F A3 3102 DEFB 163 + 00000470 07 3103 DEFB 7 + 00000471 5E 3104 DEFB '^' + 00000472 23 3105 DEFB '#' + 00000473 56 3106 DEFB 'V' + 00000474 23 3107 DEFB '#' + 00000475 22 3108 DEFB '"' + 00000476 A3 3109 DEFB 163 + 00000477 07 3110 DEFB 7 + 00000478 C9 3111 DEFB 201 + 00000479 E5 3112 DEFB 229 + 0000047A 7B 3113 DEFB '{' + 0000047B E6 3114 DEFB 230 + 0000047C 07 3115 DEFB 7 + 0000047D 06 3116 DEFB 6 + 0000047E 03 3117 DEFB 3 + 0000047F CB 3118 DEFB 203 + 00000480 3A 3119 DEFB ':' + 00000481 CB 3120 DEFB 203 + 00000482 1B 3121 DEFB 27 + 00000483 10 3122 DEFB 16 + 00000484 FA 3123 DEFB 250 + 00000485 2A 3124 DEFB '*' + 00000486 95 3125 DEFB 149 + 00000487 07 3126 DEFB 7 + 00000488 37 3127 DEFB '7' + 00000489 ED 3128 DEFB 237 + 0000048A 52 3129 DEFB 'R' + 0000048B 38 3130 DEFB '8' + 0000048C 1A 3131 DEFB 26 + 0000048D 2A 3132 DEFB '*' + 0000048E 93 3133 DEFB 147 + 0000048F 07 3134 DEFB 7 + 00000490 19 3135 DEFB 25 + 00000491 EB 3136 DEFB 235 + 00000492 21 3137 DEFB '!' + 00000493 E5 3138 DEFB 229 + 00000494 07 3139 DEFB 7 + 00000495 F5 3140 DEFB 245 + 00000496 E5 3141 DEFB 229 + 00000497 CD 3142 DEFB 205 + 00000498 C5 3143 DEFB 197 + 00000499 04 3144 DEFB 4 + 0000049A E1 3145 DEFB 225 + 0000049B D1 3146 DEFB 209 + 0000049C 01 3147 DEFB 1 + 0000049D 40 3148 DEFB '@' + 0000049E 00 3149 DEFB 0 + 0000049F 59 3150 DEFB 'Y' + 000004A0 ED 3151 DEFB 237 + 000004A1 5C 3152 DEFB 92 + 000004A2 19 3153 DEFB 25 + 000004A3 D1 3154 DEFB 209 + 000004A4 ED 3155 DEFB 237 + 000004A5 B0 3156 DEFB 176 + 000004A6 C9 3157 DEFB 201 + 000004A7 CD 3158 DEFB 205 + 000004A8 56 3159 DEFB 'V' + 000004A9 01 3160 DEFB 1 + 000004AA 62 3161 DEFB 'b' + 000004AB 61 3162 DEFB 'a' + 000004AC 64 3163 DEFB 'd' + 000004AD 20 3164 DEFB ' ' + 000004AE 69 3165 DEFB 'i' + 000004AF 6E 3166 DEFB 'n' + 000004B0 6F 3167 DEFB 'o' + 000004B1 64 3168 DEFB 'd' + 000004B2 65 3169 DEFB 'e' + 000004B3 3A 3170 DEFB ':' + 000004B4 20 3171 DEFB ' ' + 000004B5 00 3172 DEFB 0 + 000004B6 C6 3173 DEFB 198 + 000004B7 30 3174 DEFB '0' + 000004B8 CD 3175 DEFB 205 + 000004B9 09 3176 DEFB 9 + 000004BA 06 3177 DEFB 6 + 000004BB CD 3178 DEFB 205 + 000004BC 37 3179 DEFB '7' + 000004BD 06 3180 DEFB 6 + 000004BE 2C 3181 DEFB ',' + 000004BF 20 3182 DEFB ' ' + 000004C0 00 3183 DEFB 0 + 000004C1 EB 3184 DEFB 235 + 000004C2 C3 3185 DEFB 195 + 000004C3 0D 3186 DEFB 13 + 000004C4 01 3187 DEFB 1 + 000004C5 E5 3188 DEFB 229 + 000004C6 CD 3189 DEFB 205 + 000004C7 DF 3190 DEFB 223 + 000004C8 04 3191 DEFB 4 + 000004C9 E5 3192 DEFB 229 + 000004CA FD 3193 DEFB 253 + 000004CB E1 3194 DEFB 225 + 000004CC 57 3195 DEFB 'W' + 000004CD E1 3196 DEFB 225 + 000004CE 1E 3197 DEFB 30 + 000004CF 03 3198 DEFB 3 + 000004D0 C3 3199 DEFB 195 + 000004D1 46 3200 DEFB 'F' + 000004D2 06 3201 DEFB 6 + 000004D3 E5 3202 DEFB 229 + 000004D4 CD 3203 DEFB 205 + 000004D5 DF 3204 DEFB 223 + 000004D6 04 3205 DEFB 4 + 000004D7 FD 3206 DEFB 253 + 000004D8 E1 3207 DEFB 225 + 000004D9 16 3208 DEFB 22 + 000004DA 03 3209 DEFB 3 + 000004DB 5F 3210 DEFB '_' + 000004DC C3 3211 DEFB 195 + 000004DD 46 3212 DEFB 'F' + 000004DE 06 3213 DEFB 6 + 000004DF 21 3214 DEFB '!' + 000004E0 00 3215 DEFB 0 + 000004E1 06 3216 DEFB 6 + 000004E2 37 3217 DEFB '7' + 000004E3 ED 3218 DEFB 237 + 000004E4 52 3219 DEFB 'R' + 000004E5 38 3220 DEFB '8' + 000004E6 1D 3221 DEFB 29 + 000004E7 01 3222 DEFB 1 + 000004E8 00 3223 DEFB 0 + 000004E9 02 3224 DEFB 2 + 000004EA 21 3225 DEFB '!' + 000004EB 00 3226 DEFB 0 + 000004EC 02 3227 DEFB 2 + 000004ED 19 3228 DEFB 25 + 000004EE 7C 3229 DEFB '|' + 000004EF 65 3230 DEFB 'e' + 000004F0 69 3231 DEFB 'i' + 000004F1 29 3232 DEFB ')' + 000004F2 8F 3233 DEFB 143 + 000004F3 C9 3234 DEFB 201 + 000004F4 7E 3235 DEFB '~' + 000004F5 23 3236 DEFB '#' + 000004F6 56 3237 DEFB 'V' + 000004F7 23 3238 DEFB '#' + 000004F8 CB 3239 DEFB 203 + 000004F9 3A 3240 DEFB ':' + 000004FA 1F 3241 DEFB 31 + 000004FB CB 3242 DEFB 203 + 000004FC 3A 3243 DEFB ':' + 000004FD 1F 3244 DEFB 31 + 000004FE CB 3245 DEFB 203 + 000004FF 3A 3246 DEFB ':' + 00000500 1F 3247 DEFB 31 + 00000501 C6 3248 DEFB 198 + 00000502 31 3249 DEFB '1' + 00000503 C9 3250 DEFB 201 + 00000504 CD 3251 DEFB 205 + 00000505 56 3252 DEFB 'V' + 00000506 01 3253 DEFB 1 + 00000507 62 3254 DEFB 'b' + 00000508 61 3255 DEFB 'a' + 00000509 64 3256 DEFB 'd' + 0000050A 20 3257 DEFB ' ' + 0000050B 62 3258 DEFB 'b' + 0000050C 6C 3259 DEFB 'l' + 0000050D 6F 3260 DEFB 'o' + 0000050E 63 3261 DEFB 'c' + 0000050F 6B 3262 DEFB 'k' + 00000510 3A 3263 DEFB ':' + 00000511 20 3264 DEFB ' ' + 00000512 00 3265 DEFB 0 + 00000513 EB 3266 DEFB 235 + 00000514 C3 3267 DEFB 195 + 00000515 0D 3268 DEFB 13 + 00000516 01 3269 DEFB 1 + 00000517 01 3270 DEFB 1 + 00000518 80 3271 DEFB 128 + 00000519 10 3272 DEFB 16 + 0000051A 21 3273 DEFB '!' + 0000051B 15 3274 DEFB 21 + 0000051C 0E 3275 DEFB 14 + 0000051D 18 3276 DEFB 24 + 0000051E 0C 3277 DEFB 12 + 0000051F 19 3278 DEFB 25 + 00000520 CD 3279 DEFB 205 + 00000521 F4 3280 DEFB 244 + 00000522 04 3281 DEFB 4 + 00000523 1E 3282 DEFB 30 + 00000524 04 3283 DEFB 4 + 00000525 02 3284 DEFB 2 + 00000526 03 3285 DEFB 3 + 00000527 3C 3286 DEFB '<' + 00000528 1D 3287 DEFB 29 + 00000529 20 3288 DEFB ' ' + 0000052A FA 3289 DEFB 250 + 0000052B ED 3290 DEFB 237 + 0000052C 5B 3291 DEFB '[' + 0000052D 13 3292 DEFB 19 + 0000052E 0E 3293 DEFB 14 + 0000052F B7 3294 DEFB 183 + 00000530 ED 3295 DEFB 237 + 00000531 52 3296 DEFB 'R' + 00000532 38 3297 DEFB '8' + 00000533 EB 3298 DEFB 235 + 00000534 C9 3299 DEFB 201 + 00000535 ED 3300 DEFB 237 + 00000536 5B 3301 DEFB '[' + 00000537 11 3302 DEFB 17 + 00000538 0E 3303 DEFB 14 + 00000539 2A 3304 DEFB '*' + 0000053A 40 3305 DEFB '@' + 0000053B 07 3306 DEFB 7 + 0000053C 19 3307 DEFB 25 + 0000053D 22 3308 DEFB '"' + 0000053E 40 3309 DEFB '@' + 0000053F 07 3310 DEFB 7 + 00000540 21 3311 DEFB '!' + 00000541 44 3312 DEFB 'D' + 00000542 07 3313 DEFB 7 + 00000543 CD 3314 DEFB 205 + 00000544 65 3315 DEFB 'e' + 00000545 05 3316 DEFB 5 + 00000546 2A 3317 DEFB '*' + 00000547 42 3318 DEFB 'B' + 00000548 07 3319 DEFB 7 + 00000549 19 3320 DEFB 25 + 0000054A 22 3321 DEFB '"' + 0000054B 42 3322 DEFB 'B' + 0000054C 07 3323 DEFB 7 + 0000054D 21 3324 DEFB '!' + 0000054E 64 3325 DEFB 'd' + 0000054F 07 3326 DEFB 7 + 00000550 CD 3327 DEFB 205 + 00000551 65 3328 DEFB 'e' + 00000552 05 3329 DEFB 5 + 00000553 21 3330 DEFB '!' + 00000554 3E 3331 DEFB '>' + 00000555 07 3332 DEFB 7 + 00000556 01 3333 DEFB 1 + 00000557 33 3334 DEFB '3' + 00000558 00 3335 DEFB 0 + 00000559 ED 3336 DEFB 237 + 0000055A B0 3337 DEFB 176 + 0000055B C9 3338 DEFB 201 + 0000055C 79 3339 DEFB 'y' + 0000055D 83 3340 DEFB 131 + 0000055E 2B 3341 DEFB '+' + 0000055F 77 3342 DEFB 'w' + 00000560 78 3343 DEFB 'x' + 00000561 8A 3344 DEFB 138 + 00000562 23 3345 DEFB '#' + 00000563 77 3346 DEFB 'w' + 00000564 23 3347 DEFB '#' + 00000565 4E 3348 DEFB 'N' + 00000566 23 3349 DEFB '#' + 00000567 46 3350 DEFB 'F' + 00000568 79 3351 DEFB 'y' + 00000569 B0 3352 DEFB 176 + 0000056A 20 3353 DEFB ' ' + 0000056B F0 3354 DEFB 240 + 0000056C C9 3355 DEFB 201 + 0000056D 21 3356 DEFB '!' + 0000056E 81 3357 DEFB 129 + 0000056F 07 3358 DEFB 7 + 00000570 CD 3359 DEFB 205 + 00000571 37 3360 DEFB '7' + 00000572 F0 3361 DEFB 240 + 00000573 C8 3362 DEFB 200 + 00000574 CD 3363 DEFB 205 + 00000575 56 3364 DEFB 'V' + 00000576 01 3365 DEFB 1 + 00000577 6C 3366 DEFB 'l' + 00000578 6F 3367 DEFB 'o' + 00000579 61 3368 DEFB 'a' + 0000057A 64 3369 DEFB 'd' + 0000057B 69 3370 DEFB 'i' + 0000057C 6E 3371 DEFB 'n' + 0000057D 67 3372 DEFB 'g' + 0000057E 20 3373 DEFB ' ' + 0000057F 41 3374 DEFB 'A' + 00000580 3A 3375 DEFB ':' + 00000581 4B 3376 DEFB 'K' + 00000582 45 3377 DEFB 'E' + 00000583 52 3378 DEFB 'R' + 00000584 4E 3379 DEFB 'N' + 00000585 45 3380 DEFB 'E' + 00000586 4C 3381 DEFB 'L' + 00000587 2E 3382 DEFB '.' + 00000588 42 3383 DEFB 'B' + 00000589 49 3384 DEFB 'I' + 0000058A 4E 3385 DEFB 'N' + 0000058B 0D 3386 DEFB 13 + 0000058C 0A 3387 DEFB 10 + 0000058D 00 3388 DEFB 0 + 0000058E 3E 3389 DEFB '>' + 0000058F 31 3390 DEFB '1' + 00000590 32 3391 DEFB '2' + 00000591 62 3392 DEFB 'b' + 00000592 07 3393 DEFB 7 + 00000593 ED 3394 DEFB 237 + 00000594 5B 3395 DEFB '[' + 00000595 91 3396 DEFB 145 + 00000596 07 3397 DEFB 7 + 00000597 B7 3398 DEFB 183 + 00000598 ED 3399 DEFB 237 + 00000599 52 3400 DEFB 'R' + 0000059A 20 3401 DEFB ' ' + 0000059B 23 3402 DEFB '#' + 0000059C 19 3403 DEFB 25 + 0000059D 22 3404 DEFB '"' + 0000059E 8F 3405 DEFB 143 + 0000059F 07 3406 DEFB 7 + 000005A0 7D 3407 DEFB '}' + 000005A1 B4 3408 DEFB 180 + 000005A2 20 3409 DEFB ' ' + 000005A3 04 3410 DEFB 4 + 000005A4 21 3411 DEFB '!' + 000005A5 8E 3412 DEFB 142 + 000005A6 07 3413 DEFB 7 + 000005A7 34 3414 DEFB '4' + 000005A8 21 3415 DEFB '!' + 000005A9 00 3416 DEFB 0 + 000005AA 40 3417 DEFB '@' + 000005AB 19 3418 DEFB 25 + 000005AC 22 3419 DEFB '"' + 000005AD 91 3420 DEFB 145 + 000005AE 07 3421 DEFB 7 + 000005AF 21 3422 DEFB '!' + 000005B0 8D 3423 DEFB 141 + 000005B1 07 3424 DEFB 7 + 000005B2 34 3425 DEFB '4' + 000005B3 21 3426 DEFB '!' + 000005B4 81 3427 DEFB 129 + 000005B5 07 3428 DEFB 7 + 000005B6 CD 3429 DEFB 205 + 000005B7 37 3430 DEFB '7' + 000005B8 F0 3431 DEFB 240 + 000005B9 20 3432 DEFB ' ' + 000005BA D8 3433 DEFB 216 + 000005BB 21 3434 DEFB '!' + 000005BC 8D 3435 DEFB 141 + 000005BD 07 3436 DEFB 7 + 000005BE 35 3437 DEFB '5' + 000005BF CD 3438 DEFB 205 + 000005C0 B0 3439 DEFB 176 + 000005C1 01 3440 DEFB 1 + 000005C2 FD 3441 DEFB 253 + 000005C3 21 3442 DEFB '!' + 000005C4 00 3443 DEFB 0 + 000005C5 00 3444 DEFB 0 + 000005C6 21 3445 DEFB '!' + 000005C7 FF 3446 DEFB 255 + 000005C8 0D 3447 DEFB 13 + 000005C9 11 3448 DEFB 17 + 000005CA 03 3449 DEFB 3 + 000005CB 0C 3450 DEFB 12 + 000005CC 01 3451 DEFB 1 + 000005CD 14 3452 DEFB 20 + 000005CE 00 3453 DEFB 0 + 000005CF CD 3454 DEFB 205 + 000005D0 46 3455 DEFB 'F' + 000005D1 06 3456 DEFB 6 + 000005D2 CD 3457 DEFB 205 + 000005D3 C2 3458 DEFB 194 + 000005D4 00 3459 DEFB 0 + 000005D5 CD 3460 DEFB 205 + 000005D6 DF 3461 DEFB 223 + 000005D7 00 3462 DEFB 0 + 000005D8 CD 3463 DEFB 205 + 000005D9 FA 3464 DEFB 250 + 000005DA 01 3465 DEFB 1 + 000005DB D5 3466 DEFB 213 + 000005DC FD 3467 DEFB 253 + 000005DD E1 3468 DEFB 225 + 000005DE 11 3469 DEFB 17 + 000005DF 00 3470 DEFB 0 + 000005E0 0C 3471 DEFB 12 + 000005E1 6B 3472 DEFB 'k' + 000005E2 63 3473 DEFB 'c' + 000005E3 CD 3474 DEFB 205 + 000005E4 46 3475 DEFB 'F' + 000005E5 06 3476 DEFB 6 + 000005E6 D5 3477 DEFB 213 + 000005E7 CD 3478 DEFB 205 + 000005E8 02 3479 DEFB 2 + 000005E9 02 3480 DEFB 2 + 000005EA EB 3481 DEFB 235 + 000005EB D1 3482 DEFB 209 + 000005EC CD 3483 DEFB 205 + 000005ED 46 3484 DEFB 'F' + 000005EE 06 3485 DEFB 6 + 000005EF CD 3486 DEFB 205 + 000005F0 E4 3487 DEFB 228 + 000005F1 01 3488 DEFB 1 + 000005F2 CD 3489 DEFB 205 + 000005F3 90 3490 DEFB 144 + 000005F4 01 3491 DEFB 1 + 000005F5 3A 3492 DEFB ':' + 000005F6 8D 3493 DEFB 141 + 000005F7 07 3494 DEFB 7 + 000005F8 3C 3495 DEFB '<' + 000005F9 07 3496 DEFB 7 + 000005FA 07 3497 DEFB 7 + 000005FB 47 3498 DEFB 'G' + 000005FC 21 3499 DEFB '!' + 000005FD 80 3500 DEFB 128 + 000005FE 10 3501 DEFB 16 + 000005FF 3E 3502 DEFB '>' + 00000600 B1 3503 DEFB 177 + 00000601 77 3504 DEFB 'w' + 00000602 23 3505 DEFB '#' + 00000603 3C 3506 DEFB '<' + 00000604 10 3507 DEFB 16 + 00000605 FB 3508 DEFB 251 + 00000606 C3 3509 DEFB 195 + 00000607 6D 3510 DEFB 'm' + 00000608 00 3511 DEFB 0 + 00000609 F5 3512 DEFB 245 + 0000060A ED 3513 DEFB 237 + 0000060B 38 3514 DEFB '8' + 0000060C 05 3515 DEFB 5 + 0000060D E6 3516 DEFB 230 + 0000060E 02 3517 DEFB 2 + 0000060F 28 3518 DEFB '(' + 00000610 F9 3519 DEFB 249 + 00000611 F1 3520 DEFB 241 + 00000612 ED 3521 DEFB 237 + 00000613 39 3522 DEFB '9' + 00000614 07 3523 DEFB 7 + 00000615 C9 3524 DEFB 201 + 00000616 3E 3525 DEFB '>' + 00000617 0D 3526 DEFB 13 + 00000618 CD 3527 DEFB 205 + 00000619 09 3528 DEFB 9 + 0000061A 06 3529 DEFB 6 + 0000061B 3E 3530 DEFB '>' + 0000061C 0A 3531 DEFB 10 + 0000061D 18 3532 DEFB 24 + 0000061E EA 3533 DEFB 234 + 0000061F 7C 3534 DEFB '|' + 00000620 CD 3535 DEFB 205 + 00000621 24 3536 DEFB '$' + 00000622 06 3537 DEFB 6 + 00000623 7D 3538 DEFB '}' + 00000624 F5 3539 DEFB 245 + 00000625 0F 3540 DEFB 15 + 00000626 0F 3541 DEFB 15 + 00000627 0F 3542 DEFB 15 + 00000628 0F 3543 DEFB 15 + 00000629 CD 3544 DEFB 205 + 0000062A 2D 3545 DEFB '-' + 0000062B 06 3546 DEFB 6 + 0000062C F1 3547 DEFB 241 + 0000062D E6 3548 DEFB 230 + 0000062E 0F 3549 DEFB 15 + 0000062F C6 3550 DEFB 198 + 00000630 90 3551 DEFB 144 + 00000631 27 3552 DEFB '''' + 00000632 CE 3553 DEFB 206 + 00000633 40 3554 DEFB '@' + 00000634 27 3555 DEFB '''' + 00000635 18 3556 DEFB 24 + 00000636 D2 3557 DEFB 210 + 00000637 E3 3558 DEFB 227 + 00000638 F5 3559 DEFB 245 + 00000639 7E 3560 DEFB '~' + 0000063A 23 3561 DEFB '#' + 0000063B B7 3562 DEFB 183 + 0000063C 28 3563 DEFB '(' + 0000063D 05 3564 DEFB 5 + 0000063E CD 3565 DEFB 205 + 0000063F 09 3566 DEFB 9 + 00000640 06 3567 DEFB 6 + 00000641 18 3568 DEFB 24 + 00000642 F6 3569 DEFB 246 + 00000643 F1 3570 DEFB 241 + 00000644 E3 3571 DEFB 227 + 00000645 C9 3572 DEFB 201 + 00000646 7B 3573 DEFB '{' + 00000647 FE 3574 DEFB 254 + 00000648 04 3575 DEFB 4 + 00000649 D2 3576 DEFB 210 + 0000064A C4 3577 DEFB 196 + 0000064B 06 3578 DEFB 6 + 0000064C 79 3579 DEFB 'y' + 0000064D E6 3580 DEFB 230 + 0000064E 1F 3581 DEFB 31 + 0000064F C5 3582 DEFB 197 + 00000650 4F 3583 DEFB 'O' + 00000651 06 3584 DEFB 6 + 00000652 00 3585 DEFB 0 + 00000653 CD 3586 DEFB 205 + 00000654 96 3587 DEFB 150 + 00000655 06 3588 DEFB 6 + 00000656 0C 3589 DEFB 12 + 00000657 0D 3590 DEFB 13 + 00000658 28 3591 DEFB '(' + 00000659 11 3592 DEFB 17 + 0000065A ED 3593 DEFB 237 + 0000065B 38 3594 DEFB '8' + 0000065C 30 3595 DEFB '0' + 0000065D EE 3596 DEFB 238 + 0000065E 50 3597 DEFB 'P' + 0000065F ED 3598 DEFB 237 + 00000660 39 3599 DEFB '9' + 00000661 30 3600 DEFB '0' + 00000662 FD 3601 DEFB 253 + 00000663 09 3602 DEFB 9 + 00000664 DC 3603 DEFB 220 + 00000665 C0 3604 DEFB 192 + 00000666 06 3605 DEFB 6 + 00000667 09 3606 DEFB 9 + 00000668 DC 3607 DEFB 220 + 00000669 C2 3608 DEFB 194 + 0000066A 06 3609 DEFB 6 + 0000066B C1 3610 DEFB 193 + 0000066C 3E 3611 DEFB '>' + 0000066D 05 3612 DEFB 5 + 0000066E CB 3613 DEFB 203 + 0000066F 38 3614 DEFB '8' + 00000670 CB 3615 DEFB 203 + 00000671 19 3616 DEFB 25 + 00000672 3D 3617 DEFB '=' + 00000673 20 3618 DEFB ' ' + 00000674 F9 3619 DEFB 249 + 00000675 18 3620 DEFB 24 + 00000676 1A 3621 DEFB 26 + 00000677 C5 3622 DEFB 197 + 00000678 01 3623 DEFB 1 + 00000679 20 3624 DEFB ' ' + 0000067A 00 3625 DEFB 0 + 0000067B ED 3626 DEFB 237 + 0000067C 09 3627 DEFB 9 + 0000067D 26 3628 DEFB '&' + 0000067E ED 3629 DEFB 237 + 0000067F 38 3630 DEFB '8' + 00000680 30 3631 DEFB '0' + 00000681 EE 3632 DEFB 238 + 00000682 50 3633 DEFB 'P' + 00000683 ED 3634 DEFB 237 + 00000684 39 3635 DEFB '9' + 00000685 30 3636 DEFB '0' + 00000686 FD 3637 DEFB 253 + 00000687 09 3638 DEFB 9 + 00000688 DC 3639 DEFB 220 + 00000689 C0 3640 DEFB 192 + 0000068A 06 3641 DEFB 6 + 0000068B 09 3642 DEFB 9 + 0000068C DC 3643 DEFB 220 + 0000068D C2 3644 DEFB 194 + 0000068E 06 3645 DEFB 6 + 0000068F C1 3646 DEFB 193 + 00000690 0B 3647 DEFB 11 + 00000691 78 3648 DEFB 'x' + 00000692 B1 3649 DEFB 177 + 00000693 20 3650 DEFB ' ' + 00000694 E2 3651 DEFB 226 + 00000695 C9 3652 DEFB 201 + 00000696 ED 3653 DEFB 237 + 00000697 09 3654 DEFB 9 + 00000698 26 3655 DEFB '&' + 00000699 ED 3656 DEFB 237 + 0000069A 01 3657 DEFB 1 + 0000069B 27 3658 DEFB '''' + 0000069C 18 3659 DEFB 24 + 0000069D 05 3660 DEFB 5 + 0000069E 3E 3661 DEFB '>' + 0000069F 01 3662 DEFB 1 + 000006A0 ED 3663 DEFB 237 + 000006A1 39 3664 DEFB '9' + 000006A2 26 3665 DEFB '&' + 000006A3 E5 3666 DEFB 229 + 000006A4 FD 3667 DEFB 253 + 000006A5 E5 3668 DEFB 229 + 000006A6 ED 3669 DEFB 237 + 000006A7 29 3670 DEFB ')' + 000006A8 23 3671 DEFB '#' + 000006A9 ED 3672 DEFB 237 + 000006AA 21 3673 DEFB '!' + 000006AB 24 3674 DEFB '$' + 000006AC ED 3675 DEFB 237 + 000006AD 19 3676 DEFB 25 + 000006AE 25 3677 DEFB '%' + 000006AF E1 3678 DEFB 225 + 000006B0 ED 3679 DEFB 237 + 000006B1 29 3680 DEFB ')' + 000006B2 20 3681 DEFB ' ' + 000006B3 ED 3682 DEFB 237 + 000006B4 21 3683 DEFB '!' + 000006B5 21 3684 DEFB '!' + 000006B6 ED 3685 DEFB 237 + 000006B7 11 3686 DEFB 17 + 000006B8 22 3687 DEFB '"' + 000006B9 E1 3688 DEFB 225 + 000006BA 3E 3689 DEFB '>' + 000006BB 02 3690 DEFB 2 + 000006BC ED 3691 DEFB 237 + 000006BD 39 3692 DEFB '9' + 000006BE 31 3693 DEFB '1' + 000006BF C9 3694 DEFB 201 + 000006C0 14 3695 DEFB 20 + 000006C1 C9 3696 DEFB 201 + 000006C2 1C 3697 DEFB 28 + 000006C3 C9 3698 DEFB 201 + 000006C4 C5 3699 DEFB 197 + 000006C5 AF 3700 DEFB 175 + 000006C6 ED 3701 DEFB 237 + 000006C7 39 3702 DEFB '9' + 000006C8 26 3703 DEFB '&' + 000006C9 ED 3704 DEFB 237 + 000006CA 39 3705 DEFB '9' + 000006CB 27 3706 DEFB '''' + 000006CC 3E 3707 DEFB '>' + 000006CD 04 3708 DEFB 4 + 000006CE CB 3709 DEFB 203 + 000006CF 38 3710 DEFB '8' + 000006D0 CB 3711 DEFB 203 + 000006D1 19 3712 DEFB 25 + 000006D2 3D 3713 DEFB '=' + 000006D3 20 3714 DEFB ' ' + 000006D4 F9 3715 DEFB 249 + 000006D5 78 3716 DEFB 'x' + 000006D6 B1 3717 DEFB 177 + 000006D7 28 3718 DEFB '(' + 000006D8 0D 3719 DEFB 13 + 000006D9 C5 3720 DEFB 197 + 000006DA 01 3721 DEFB 1 + 000006DB 10 3722 DEFB 16 + 000006DC 00 3723 DEFB 0 + 000006DD CD 3724 DEFB 205 + 000006DE EE 3725 DEFB 238 + 000006DF 06 3726 DEFB 6 + 000006E0 C1 3727 DEFB 193 + 000006E1 0B 3728 DEFB 11 + 000006E2 78 3729 DEFB 'x' + 000006E3 B1 3730 DEFB 177 + 000006E4 20 3731 DEFB ' ' + 000006E5 F3 3732 DEFB 243 + 000006E6 C1 3733 DEFB 193 + 000006E7 47 3734 DEFB 'G' + 000006E8 79 3735 DEFB 'y' + 000006E9 E6 3736 DEFB 230 + 000006EA 0F 3737 DEFB 15 + 000006EB 28 3738 DEFB '(' + 000006EC 20 3739 DEFB ' ' + 000006ED 4F 3740 DEFB 'O' + 000006EE ED 3741 DEFB 237 + 000006EF 30 3742 DEFB '0' + 000006F0 26 3743 DEFB '&' + 000006F1 CC 3744 DEFB 204 + 000006F2 9E 3745 DEFB 158 + 000006F3 06 3746 DEFB 6 + 000006F4 FD 3747 DEFB 253 + 000006F5 09 3748 DEFB 9 + 000006F6 DC 3749 DEFB 220 + 000006F7 C0 3750 DEFB 192 + 000006F8 06 3751 DEFB 6 + 000006F9 09 3752 DEFB 9 + 000006FA DC 3753 DEFB 220 + 000006FB C2 3754 DEFB 194 + 000006FC 06 3755 DEFB 6 + 000006FD 41 3756 DEFB 'A' + 000006FE 0E 3757 DEFB 14 + 000006FF 01 3758 DEFB 1 + 00000700 ED 3759 DEFB 237 + 00000701 38 3760 DEFB '8' + 00000702 30 3761 DEFB '0' + 00000703 EE 3762 DEFB 238 + 00000704 50 3763 DEFB 'P' + 00000705 ED 3764 DEFB 237 + 00000706 39 3765 DEFB '9' + 00000707 30 3766 DEFB '0' + 00000708 ED 3767 DEFB 237 + 00000709 09 3768 DEFB 9 + 0000070A 26 3769 DEFB '&' + 0000070B 10 3770 DEFB 16 + 0000070C F8 3771 DEFB 248 + 0000070D C9 3772 DEFB 201 + 0000070E 3E 3773 DEFB '>' + 0000070F 74 3774 DEFB 't' + 00000710 ED 3775 DEFB 237 + 00000711 39 3776 DEFB '9' + 00000712 00 3777 DEFB 0 + 00000713 ED 3778 DEFB 237 + 00000714 39 3779 DEFB '9' + 00000715 01 3780 DEFB 1 + 00000716 3E 3781 DEFB '>' + 00000717 22 3782 DEFB '"' + 00000718 ED 3783 DEFB 237 + 00000719 39 3784 DEFB '9' + 0000071A 02 3785 DEFB 2 + 0000071B ED 3786 DEFB 237 + 0000071C 39 3787 DEFB '9' + 0000071D 03 3788 DEFB 3 + 0000071E 97 3789 DEFB 151 + 0000071F ED 3790 DEFB 237 + 00000720 39 3791 DEFB '9' + 00000721 04 3792 DEFB 4 + 00000722 ED 3793 DEFB 237 + 00000723 39 3794 DEFB '9' + 00000724 05 3795 DEFB 5 + 00000725 ED 3796 DEFB 237 + 00000726 30 3797 DEFB '0' + 00000727 08 3798 DEFB 8 + 00000728 ED 3799 DEFB 237 + 00000729 30 3800 DEFB '0' + 0000072A 09 3801 DEFB 9 + 0000072B ED 3802 DEFB 237 + 0000072C 39 3803 DEFB '9' + 0000072D 27 3804 DEFB '''' + 0000072E ED 3805 DEFB 237 + 0000072F 39 3806 DEFB '9' + 00000730 2F 3807 DEFB '/' + 00000731 ED 3808 DEFB 237 + 00000732 39 3809 DEFB '9' + 00000733 29 3810 DEFB ')' + 00000734 ED 3811 DEFB 237 + 00000735 39 3812 DEFB '9' + 00000736 2A 3813 DEFB '*' + 00000737 ED 3814 DEFB 237 + 00000738 39 3815 DEFB '9' + 00000739 2B 3816 DEFB '+' + 0000073A ED 3817 DEFB 237 + 0000073B 39 3818 DEFB '9' + 0000073C 2C 3819 DEFB ',' + 0000073D C9 3820 DEFB 201 + 0000073E 02 3821 DEFB 2 + 0000073F 00 3822 DEFB 0 + 00000740 06 3823 DEFB 6 + 00000741 00 3824 DEFB 0 + 00000742 26 3825 DEFB '&' + 00000743 00 3826 DEFB 0 + 00000744 0C 3827 DEFB 12 + 00000745 00 3828 DEFB 0 + 00000746 1D 3829 DEFB 29 + 00000747 00 3830 DEFB 0 + 00000748 00 3831 DEFB 0 + 00000749 00 3832 DEFB 0 + 0000074A 2F 3833 DEFB '/' + 0000074B 62 3834 DEFB 'b' + 0000074C 6F 3835 DEFB 'o' + 0000074D 6F 3836 DEFB 'o' + 0000074E 74 3837 DEFB 't' + 0000074F 2F 3838 DEFB '/' + 00000750 6B 3839 DEFB 'k' + 00000751 65 3840 DEFB 'e' + 00000752 72 3841 DEFB 'r' + 00000753 6E 3842 DEFB 'n' + 00000754 65 3843 DEFB 'e' + 00000755 6C 3844 DEFB 'l' + 00000756 2E 3845 DEFB '.' + 00000757 62 3846 DEFB 'b' + 00000758 69 3847 DEFB 'i' + 00000759 6E 3848 DEFB 'n' + 0000075A 00 3849 DEFB 0 + 0000075B 72 3850 DEFB 'r' + 0000075C 6F 3851 DEFB 'o' + 0000075D 6F 3852 DEFB 'o' + 0000075E 74 3853 DEFB 't' + 0000075F 3D 3854 DEFB '=' + 00000760 68 3855 DEFB 'h' + 00000761 64 3856 DEFB 'd' + 00000762 30 3857 DEFB '0' + 00000763 00 3858 DEFB 0 + 00000764 2A 3859 DEFB '*' + 00000765 00 3860 DEFB 0 + 00000766 00 3861 DEFB 0 + 00000767 00 3862 DEFB 0 + 00000768 53 3863 DEFB 'S' + 00000769 4E 3864 DEFB 'N' + 0000076A 3D 3865 DEFB '=' + 0000076B 30 3866 DEFB '0' + 0000076C 30 3867 DEFB '0' + 0000076D 30 3868 DEFB '0' + 0000076E 30 3869 DEFB '0' + 0000076F 30 3870 DEFB '0' + 00000770 00 3871 DEFB 0 + 00000771 62 3872 DEFB 'b' + 00000772 6F 3873 DEFB 'o' + 00000773 6F 3874 DEFB 'o' + 00000774 74 3875 DEFB 't' + 00000775 00 3876 DEFB 0 + 00000776 6B 3877 DEFB 'k' + 00000777 65 3878 DEFB 'e' + 00000778 72 3879 DEFB 'r' + 00000779 6E 3880 DEFB 'n' + 0000077A 65 3881 DEFB 'e' + 0000077B 6C 3882 DEFB 'l' + 0000077C 2E 3883 DEFB '.' + 0000077D 62 3884 DEFB 'b' + 0000077E 69 3885 DEFB 'i' + 0000077F 6E 3886 DEFB 'n' + 00000780 00 3887 DEFB 0 + 00000781 01 3888 DEFB 1 + 00000782 4B 3889 DEFB 'K' + 00000783 45 3890 DEFB 'E' + 00000784 52 3891 DEFB 'R' + 00000785 4E 3892 DEFB 'N' + 00000786 45 3893 DEFB 'E' + 00000787 4C 3894 DEFB 'L' + 00000788 20 3895 DEFB ' ' + 00000789 20 3896 DEFB ' ' + 0000078A 42 3897 DEFB 'B' + 0000078B 49 3898 DEFB 'I' + 0000078C 4E 3899 DEFB 'N' + 0000078D 00 3900 DEFB 0 + 0000078E 0C 3901 DEFB 12 + 0000078F 00 3902 DEFB 0 + 00000790 00 3903 DEFB 0 + 00000791 00 3904 DEFB 0 + 00000792 40 3905 DEFB '@' + 00000793 1A 3906 DEFB 26 + 00000794 1A 3907 DEFB 26 + 00000795 1A 3908 DEFB 26 + 00000796 1A 3909 DEFB 26 + 00000797 1A 3910 DEFB 26 + 00000798 1A 3911 DEFB 26 + 00000799 1A 3912 DEFB 26 + 0000079A 1A 3913 DEFB 26 + 0000079B 1A 3914 DEFB 26 + 0000079C 1A 3915 DEFB 26 + 0000079D 1A 3916 DEFB 26 + 0000079E 1A 3917 DEFB 26 + 0000079F 1A 3918 DEFB 26 + 000007A0 1A 3919 DEFB 26 + 000007A1 1A 3920 DEFB 26 + 000007A2 1A 3921 DEFB 26 + 000007A3 1A 3922 DEFB 26 + 000007A4 1A 3923 DEFB 26 + 000007A5 1A 3924 DEFB 26 + 000007A6 1A 3925 DEFB 26 + 000007A7 1A 3926 DEFB 26 + 000007A8 1A 3927 DEFB 26 + 000007A9 1A 3928 DEFB 26 + 000007AA 1A 3929 DEFB 26 + 000007AB 1A 3930 DEFB 26 + 000007AC 1A 3931 DEFB 26 + 000007AD 1A 3932 DEFB 26 + 000007AE 1A 3933 DEFB 26 + 000007AF 1A 3934 DEFB 26 + 000007B0 1A 3935 DEFB 26 + 000007B1 1A 3936 DEFB 26 + 000007B2 1A 3937 DEFB 26 + 000007B3 1A 3938 DEFB 26 + 000007B4 1A 3939 DEFB 26 + 000007B5 1A 3940 DEFB 26 + 000007B6 1A 3941 DEFB 26 + 000007B7 1A 3942 DEFB 26 + 000007B8 1A 3943 DEFB 26 + 000007B9 1A 3944 DEFB 26 + 000007BA 1A 3945 DEFB 26 + 000007BB 1A 3946 DEFB 26 + 000007BC 1A 3947 DEFB 26 + 000007BD 1A 3948 DEFB 26 + 000007BE 1A 3949 DEFB 26 + 000007BF 1A 3950 DEFB 26 + 000007C0 1A 3951 DEFB 26 + 000007C1 1A 3952 DEFB 26 + 000007C2 1A 3953 DEFB 26 + 000007C3 1A 3954 DEFB 26 + 000007C4 1A 3955 DEFB 26 + 000007C5 1A 3956 DEFB 26 + 000007C6 1A 3957 DEFB 26 + 000007C7 1A 3958 DEFB 26 + 000007C8 1A 3959 DEFB 26 + 000007C9 1A 3960 DEFB 26 + 000007CA 1A 3961 DEFB 26 + 000007CB 1A 3962 DEFB 26 + 000007CC 1A 3963 DEFB 26 + 000007CD 1A 3964 DEFB 26 + 000007CE 1A 3965 DEFB 26 + 000007CF 1A 3966 DEFB 26 + 000007D0 1A 3967 DEFB 26 + 000007D1 1A 3968 DEFB 26 + 000007D2 1A 3969 DEFB 26 + 000007D3 1A 3970 DEFB 26 + 000007D4 1A 3971 DEFB 26 + 000007D5 1A 3972 DEFB 26 + 000007D6 1A 3973 DEFB 26 + 000007D7 1A 3974 DEFB 26 + 000007D8 1A 3975 DEFB 26 + 000007D9 1A 3976 DEFB 26 + 000007DA 1A 3977 DEFB 26 + 000007DB 1A 3978 DEFB 26 + 000007DC 1A 3979 DEFB 26 + 000007DD 1A 3980 DEFB 26 + 000007DE 1A 3981 DEFB 26 + 000007DF 1A 3982 DEFB 26 + 000007E0 1A 3983 DEFB 26 + 000007E1 1A 3984 DEFB 26 + 000007E2 1A 3985 DEFB 26 + 000007E3 1A 3986 DEFB 26 + 000007E4 1A 3987 DEFB 26 + 000007E5 1A 3988 DEFB 26 + 000007E6 1A 3989 DEFB 26 + 000007E7 1A 3990 DEFB 26 + 000007E8 1A 3991 DEFB 26 + 000007E9 1A 3992 DEFB 26 + 000007EA 1A 3993 DEFB 26 + 000007EB 1A 3994 DEFB 26 + 000007EC 1A 3995 DEFB 26 + 000007ED 1A 3996 DEFB 26 + 000007EE 1A 3997 DEFB 26 + 000007EF 1A 3998 DEFB 26 + 000007F0 1A 3999 DEFB 26 + 000007F1 1A 4000 DEFB 26 + 000007F2 1A 4001 DEFB 26 + 000007F3 1A 4002 DEFB 26 + 000007F4 1A 4003 DEFB 26 + 000007F5 1A 4004 DEFB 26 + 000007F6 1A 4005 DEFB 26 + 000007F7 1A 4006 DEFB 26 + 000007F8 1A 4007 DEFB 26 + 000007F9 1A 4008 DEFB 26 + 000007FA 1A 4009 DEFB 26 + 000007FB 1A 4010 DEFB 26 + 000007FC 1A 4011 DEFB 26 + 000007FD 1A 4012 DEFB 26 + 000007FE 1A 4013 DEFB 26 + 000007FF 1A 4014 DEFB 26 + 00000800 01 00 4015 DEFW 1 + 00000802 2E 4016 DEFB '.' + 00000803 00 4017 DEFB 0 + 00000804 00 00 00 00 00 00 00 4018 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 + 00 00 00 00 00 + 00000810 01 00 4019 DEFW 1 + 00000812 2E 2E 4020 DEFB '..' + 00000814 00 4021 DEFB 0 + 00000815 00 00 00 00 00 00 00 4022 DEFB 0,0,0,0,0,0,0,0,0,0,0 + 00 00 00 00 + 00000820 00 00 00 00 00 00 00 4023 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00000841 00 00 00 00 00 00 00 4024 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00000862 00 00 00 00 00 00 00 4025 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00000883 00 00 00 00 00 00 00 4026 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 000008A4 00 00 00 00 00 00 00 4027 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 000008C5 00 00 00 00 00 00 00 4028 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 000008E6 00 00 00 00 00 00 00 4029 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00000907 00 00 00 00 00 00 00 4030 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00000928 00 00 00 00 00 00 00 4031 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00000949 00 00 00 00 00 00 00 4032 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 0000096A 00 00 00 00 00 00 00 4033 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 0000098B 00 00 00 00 00 00 00 4034 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 000009AC 00 00 00 00 00 00 00 4035 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 000009CD 00 00 00 00 00 00 00 4036 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 000009EE 00 00 00 00 00 00 00 4037 DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 00 00 00 00 00 00 00 + 00 00 00 00 + 00000A00 00 4038 DEFB 0 + 00000A01 00 4039 DEFB 0 + 00000A02 00 4040 DEFB 0 + 00000A03 00 4041 DEFB 0 + 00000A04 00 4042 DEFB 0 + 00000A05 4043 END + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1. +Hexadecimal [32-Bits] +mkfs(17) +Symbol Table + + .__.ABS. = 00000000 G | 3 ?0002 0000061A R + 1 ?0003 0000001C R | 1 ?0004 00000039 R + 2 ?0005 00000000 R | 1 ?0006 00000058 R + 1 ?0007 00000075 R | 2 ?0008 0000001A R + 1 ?0009 0000009E R | 1 ?0010 000000CC R + 2 ?0011 00000035 R | 1 ?0012 000000E9 R + 1 ?0013 00000135 R | 1 ?0014 000000F0 R + 1 ?0015 00000107 R | 1 ?0016 00000135 R + 2 ?0017 00000042 R | 1 ?0018 00000161 R + 1 ?0019 0000018F R | 1 ?0020 000001AC R + 1 ?0021 000001DA R | 2 ?0022 0000004F R + 1 ?0023 00000207 R | 1 ?0024 00000217 R + 2 ?0025 0000005D R | 1 ?0026 00000244 R + 1 ?0027 0000023F R | 1 ?0028 00000244 R + 1 ?0029 0000023F R | 1 ?0030 0000023F R + 1 ?0031 0000023F R | 1 ?0032 0000023F R + 1 ?0033 00000247 R | 1 ?0034 00000255 R + 1 ?0035 0000026D R | 2 ?0036 00000060 R + 1 ?0037 00000313 R | 1 ?0038 00000274 R + 1 ?0039 00000283 R | 1 ?0041 000002A9 R + 1 ?0042 000002C4 R | 1 ?0043 000002CC R + 1 ?0044 00000327 R | 1 ?0045 0000033F R + 2 ?0046 00000078 R | 1 ?0047 00000345 R + 1 ?0048 0000035E R | 1 ?0049 0000036A R + 1 ?0050 000003DC R | 1 ?0051 0000037A R + 1 ?0052 0000038B R | 1 ?0053 000003A1 R + 1 ?0054 000003C1 R | 1 ?0055 000003A1 R + 1 ?0056 000003A1 R | 2 ?0057 0000009C R + 1 ?0058 000003E2 R | 1 ?0059 00000409 R + 2 ?0060 000000A5 R | 1 ?0061 0000040F R + 1 ?0062 00000427 R | 2 ?0063 000000AE R + 1 ?0064 00000506 R | 1 ?0065 000004C2 R + 1 ?0066 000004E0 R | 1 ?0068 0000055C R + 1 ?0069 00000525 R | 1 ?0070 00000536 R + 1 ?0072 00000583 R | 1 ?0073 00000644 R + 1 ?0074 000005CE R | 1 ?0075 0000058A R + 1 ?0076 000005A8 R | 1 ?0078 00000624 R + 1 ?0079 000005ED R | 1 ?0080 000005FE R + 1 ?0082 000006E4 R | 1 ?0083 000006AD R + 1 ?0084 000006BE R | 1 ?0086 0000077C R + 1 ?0087 00000794 R | 2 ?0088 000000C7 R + 1 ?0089 000007E4 R | 1 ?0090 000007B1 R + 1 ?0091 000007C4 R | 1 ?0093 000008E0 R + 1 ?0094 00000807 R | 1 ?0095 00000837 R + 1 ?0096 00000837 R | 1 ?0097 00000837 R + 1 ?0098 000008DD R | 1 ?0099 00000854 R + 1 ?0100 0000085E R | 1 ?0101 000008DA R + 1 ?0102 00000892 R | 1 ?0103 00000899 R + 1 ?0104 000008A0 R | 1 ?0105 000008A7 R + 1 ?0106 000008AE R | 1 ?0107 000008B5 R + 2 ?0108 000000E0 R | 1 ?0109 000008F1 R + 1 ?0110 0000090E R | 2 ?0111 000000F3 R + 1 ?0112 00000943 R | 1 ?0113 00000971 R + 2 ?0114 00000124 R | 1 ?0115 000009BD R + 1 ?0116 000009E0 R | 1 ?0117 00000A13 R + 1 ?0118 00000A30 R | 1 ?0119 00000A13 R + 1 ?0120 00000A13 R | 2 ?0121 00000131 R + 1 ?0122 00000B3E R | 1 ?0123 00000BBB R + 2 ?0124 00000147 R | 1 ?0125 00000BFF R + 1 ?0126 00000C0A R | 2 ?0127 00000180 R + 2 ?0128 0000018A R | 1 ?0129 00000C1D R + 1 ?0130 00000C2B R | 1 ?0131 00000C45 R + 1 ?0132 00000C50 R | 2 ?0133 0000018C R + 1 ?0134 00000CD0 R | 1 ?0135 00000C84 R + 1 ?0136 00000C8E R | 2 ?0137 00000199 R + 1 ?0138 00000CAE R | 1 ?0139 00000D0F R + 1 ?0140 00000CC8 R | 1 ?0141 00000CF5 R + 2 ?0142 000001A6 R | 2 ?0143 000001B2 R + 1 ?0144 00000D3D R | 1 ?0145 00000D4F R + 2 ?0146 000001CD R | 1 ?0147 00000E50 R + 1 ?0148 00000D6E R | 1 ?0149 00000D8B R + 1 ?0150 00000DC2 R | 1 ?0151 00000DDD R + 1 ?0152 00000DE5 R | 1 ?0153 00000504 R + 1 ?0154 0000055A R | 1 ?0155 000005CC R + 1 ?0156 00000622 R | 1 ?0157 000006E2 R + 1 ?0158 000007E2 R | 1 ?0159 0000083F R + 1 ?0160 00000847 R | ?BANK_CALL_DIR ******** GX + ?BANK_LEAVE_DI ******** GX | ?CL64180B_4_06 ******** GX + ?C_LSH_L01 ******** GX | ?C_V_SWITCH_L0 ******** GX + ?ENT_AUTO_DIRE ******** GX | ?ENT_PARM_DIRE ******** GX + ?L_AND_L03 ******** GX | ?L_LSH_L03 ******** GX + ?SL_CMP_L03 ******** GX | ?SL_RSH_L03 ******** GX + ?SS_CMP_L02 ******** GX | ?US_DIV_L02 ******** GX + ?US_MOD_L02 ******** GX | ?US_RSH_L02 ******** GX + 4 _fmt 00000A00 GR | 4 _immov 00000A04 GR + 4 _quick 00000A02 GR | _read ******** GX + 4 _verb 00000A03 GR | _write ******** GX + 4 _yes 00000A01 GR | abort ******** GX + atoi ******** GX | bcopy ******** GX + bfill ******** GX | 3 bitmap_block 00000608 GR + 1 bitmap_dump 00000D5D GR | 3 bitmap_final 00000610 GR + 3 bitmap_immov 0000060C GR | 3 bitmap_inode 00000604 GR + 3 block_bitmap 00000616 GR | 4 bootblock 00000000 GR + bzero ******** GX | close ******** GX + 1 da_read 00000078 GR | 1 da_write 0000013B GR + 1 daread 00000000 GR | 3 dev 00000402 GR + 3 device_handle 00000000 GR | 3 device_name 00000002 GR + 4 dirbuf 00000800 GR | 1 doformatting 00000771 GR + 1 dwrite 0000003F GR | errno ******** GX + exit ******** GX | fflush ******** GX + fgets ******** GX | fprintf ******** GX + fputs ******** GX | 3 immov_bitmap 00000618 GR + 3 inode 00000404 GR | 3 inode_bitmap 00000614 GR + int_min ******** GX | lseek ******** GX + 1 main 000007E7 GR | malloc ******** GX + 1 mkfs 0000024A GR | open ******** GX + perror ******** GX | printf ******** GX + stderr ******** GX | stdin ******** GX + stdout ******** GX | strcpy ******** GX + 1 yes 000001E0 GR | 3 zeroed 00000202 GR + + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2. +Hexadecimal [32-Bits] +mkfs(17) +Area Table + + 0 _DEFAULT size 0 flags 0 + 1 CODE size E53 flags 0 + 2 CSTR size 1FA flags 0 + 3 UDATA0 size 81A flags 0 + 4 IDATA0 size A05 flags 0 + 5 CDATA0 size A05 flags 0 diff --git a/src/fsutil/mkfs.map b/src/fsutil/mkfs.map index 6b653807..5560a01f 100644 --- a/src/fsutil/mkfs.map +++ b/src/fsutil/mkfs.map @@ -6,18 +6,15 @@ Area Addr Size Decimal Bytes (Attributes) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ - 00000000 s__DEFAUL | 00000000 l_CODE | 00000000 l_CCSTR - 00000000 l_ECSTR | 00000000 l_CONST | 00000000 .__.ABS. - 00000000 ?CL64180L | 00000000 ?CL64180B | 00000014 e__DEFAUL - 00000014 l__DEFAUL | 00000232 l_CSTR | 000002F7 l_RCODE - 00000AAD l_UDATA0 | 00000AD7 l_CDATA0 | 00000AD7 l_IDATA0 - 00001000 l_CSTACK | 00004000 e_CODE | 00004000 s_CODE - 00008100 s_RCODE | 000083F7 s_CSTR | 000083F7 e_RCODE - 000083F7 e_CONST | 000083F7 s_CONST | 00008629 e_CSTR - 00008629 s_IDATA0 | 00008629 s_CDATA0 | 00009100 s_UDATA0 - 00009100 e_CCSTR | 00009100 e_ECSTR | 00009100 s_CCSTR - 00009100 e_CDATA0 | 00009100 s_ECSTR | 00009100 e_IDATA0 - 00009BAD e_UDATA0 | 00009BAD s_CSTACK | 0000ABAD e_CSTACK + 00000000 00000000 s__DEFAUL | 00000000 00000000 .__.ABS. | 00000000 00000000 ?CL64180L + 00000000 00000000 ?CL64180B | 00000014 00000014 e__DEFAUL | 00004000 00004000 e_CODE + 00004000 00004000 s_CODE | 00008100 00008100 s_RCODE | 000083F7 000083F7 s_CSTR + 000083F7 000083F7 e_RCODE | 000083F7 000083F7 e_CONST | 000083F7 000083F7 s_CONST + 00008629 00008629 e_CSTR | 00008629 00008629 s_IDATA0 | 00008629 00008629 s_CDATA0 + 00009180 00009180 s_UDATA0 | 00009180 00009180 e_CCSTR | 00009180 00009180 e_ECSTR + 00009180 00009180 s_CCSTR | 00009180 00009180 e_CDATA0 | 00009180 00009180 s_ECSTR + 00009180 00009180 e_IDATA0 | 00009C2D 00009C2D e_UDATA0 | 00009C2D 00009C2D s_CSTACK + 0000AC2D 0000AC2D e_CSTACK Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) @@ -34,17 +31,17 @@ RCODE 00008100 000002F7 = 759. bytes (REL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ - 00008100 __init | 0000811F ?US_RSH_L | 00008129 ?BANK_LEA - 0000812F ?BANK_FAS | 00008134 ?C_V_SWIT | 00008146 ?ENT_PARM - 00008152 ?BANK_CAL | 0000815F ?L_AND_L0 | 0000817D ?SL_CMP_L - 000081AE ?ENT_AUTO | 000081C2 ?V_SWITCH | 000081CC ?SS_CMP_L - 000081DE ?US_MOD_L | 000081E7 ?C_LSH_L0 | 000081EE ?US_DIV_L - 000081FC ?SL_RSH_L | 0000820A ?BANK_LEA | 00008216 ?L_LSH_L0 - 0000822E ?S_DIVMOD | 00008244 ?S_MULASG | 0000824E ?S_MUL_L0 - 00008264 ?LEAVE_DI | 0000826B ?UL_DIVAS | 0000827B ?UL_MOD_L - 000082A0 ?UL_DIV_L | 000082C8 ?L_NEG_L0 | 000082DA ?L_DIVMOD - 00008332 ?L_NOT_L0 | 00008341 ?L_END_MU | 0000834A ?L_MULASG - 0000835A ?L_MUL_L0 | 000083DE ?L_ADDASG + 00000014 00008100 __init | 00000033 0000811F ?US_RSH_L | 0000003D 00008129 ?BANK_LEA + 00000043 0000812F ?BANK_FAS | 00000048 00008134 ?C_V_SWIT | 0000005A 00008146 ?ENT_PARM + 00000066 00008152 ?BANK_CAL | 00000073 0000815F ?L_AND_L0 | 00000091 0000817D ?SL_CMP_L + 000000C2 000081AE ?ENT_AUTO | 000000D6 000081C2 ?V_SWITCH | 000000E0 000081CC ?SS_CMP_L + 000000F2 000081DE ?US_MOD_L | 000000FB 000081E7 ?C_LSH_L0 | 00000102 000081EE ?US_DIV_L + 00000110 000081FC ?SL_RSH_L | 0000011E 0000820A ?BANK_LEA | 0000012A 00008216 ?L_LSH_L0 + 00000142 0000822E ?S_DIVMOD | 00000158 00008244 ?S_MULASG | 00000162 0000824E ?S_MUL_L0 + 00000178 00008264 ?LEAVE_DI | 0000017F 0000826B ?UL_DIVAS | 0000018F 0000827B ?UL_MOD_L + 000001B4 000082A0 ?UL_DIV_L | 000001DC 000082C8 ?L_NEG_L0 | 000001EE 000082DA ?L_DIVMOD + 00000246 00008332 ?L_NOT_L0 | 00000255 00008341 ?L_END_MU | 0000025E 0000834A ?L_MULASG + 0000026E 0000835A ?L_MUL_L0 | 000002F2 000083DE ?L_ADDASG Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) @@ -65,20 +62,20 @@ Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------- ---- ---- ------- ----- ------------ -IDATA0 00008629 00000AD7 = 2775. bytes (NUL,CON) +IDATA0 00008629 00000B57 = 2903. bytes (NUL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ - 00008629 bootblock | 00008DA9 dirbuf | 00008FA9 _fmt - 00008FAA _yes | 00008FAB _quick | 00008FAC _verb - 00008FAD _immov | 00008FAE __IO_list | 00008FB0 stdin - 00008FC8 stdout | 00008FE0 stderr | 00008FFA __sys_err - 00008FFC __sys_ner | 00008FFE __on_exit | 00009000 __ctype + 0000053D 00008629 bootblock | 00000D3D 00008E29 dirbuf | 00000F3D 00009029 _fmt + 00000F3E 0000902A _yes | 00000F3F 0000902B _quick | 00000F40 0000902C _verb + 00000F41 0000902D _immov | 00000F42 0000902E __IO_list | 00000F44 00009030 stdin + 00000F5C 00009048 stdout | 00000F74 00009060 stderr | 00000F8E 0000907A __sys_err + 00000F90 0000907C __sys_ner | 00000F92 0000907E __on_exit | 00000F94 00009080 __ctype Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------- ---- ---- ------- ----- ------------ -CDATA0 00008629 00000AD7 = 2775. bytes (REL,CON) +CDATA0 00008629 00000B57 = 2903. bytes (REL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ @@ -86,7 +83,7 @@ Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------- ---- ---- ------- ----- ------------ -ECSTR 00009100 00000000 = 0. bytes (NUL,CON) +ECSTR 00009180 00000000 = 0. bytes (NUL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ @@ -94,7 +91,7 @@ Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------- ---- ---- ------- ----- ------------ -CCSTR 00009100 00000000 = 0. bytes (REL,CON) +CCSTR 00009180 00000000 = 0. bytes (REL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ @@ -106,47 +103,47 @@ CODE 00004000 00000000 = 0. bytes (NUL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ - 00005014 daread | 00005053 dwrite | 0000508C da_read - 0000514F da_write | 000051F4 yes | 0000525E mkfs - 00005785 doformatt | 000057FB main | 00005D71 bitmap_du - 00005E67 bzero | 00005E91 bfill | 00005EBD bcopy - 00005EF5 int_min | 00005F16 int_max | 00005F2C fflush - 0000613F _write | 0000615E printf | 0000618D lseek - 000061BA __stdio_c | 00006225 __stdio_i | 00006263 close - 00006278 abort | 000062E6 _exit | 000062FB fgets - 000063EA perror | 00006427 pause | 00006437 isatty - 00006472 fstat | 00006489 strcpy | 000064B0 kill - 000064C7 atoi | 0000665D vfprintf | 00006BB8 ltoa - 00006C1B __longtoa | 00006DAF itoa | 00006E18 fputs - 00006E76 open | 00006EA1 malloc | 000070CD fprintf - 000070FF exit | 0000712F _read | 0000714E getpid - 00007163 signal | 00007188 strerror | 00007345 unix - 0000735F fgetc | 0000746F memcpy | 0000753D on_exit - 000075B6 atexit | 000075C9 strcat | 000075E9 unix_long - 00007603 strchr | 0000763E strlen | 00007675 free - 00007755 fputc | 00007867 ultoa | 000078BC strtol - 00007964 sbrk | 00007979 fread | 00007BAD strtoul - 00007D04 toupper | 00007D29 tolower + 00001094 00005094 daread | 000010D3 000050D3 dwrite | 0000110C 0000510C da_read + 000011CF 000051CF da_write | 00001274 00005274 yes | 000012DE 000052DE mkfs + 00001805 00005805 doformatt | 0000187B 0000587B main | 00001DF1 00005DF1 bitmap_du + 00001EE7 00005EE7 bzero | 00001F11 00005F11 bfill | 00001F3D 00005F3D bcopy + 00001F75 00005F75 int_min | 00001F96 00005F96 int_max | 00001FAC 00005FAC fflush + 000021BF 000061BF _write | 000021DE 000061DE printf | 0000220D 0000620D lseek + 0000223A 0000623A __stdio_c | 000022A5 000062A5 __stdio_i | 000022E3 000062E3 close + 000022F8 000062F8 abort | 00002366 00006366 _exit | 0000237B 0000637B fgets + 0000246A 0000646A perror | 000024A7 000064A7 pause | 000024B7 000064B7 isatty + 000024F2 000064F2 fstat | 00002509 00006509 strcpy | 00002530 00006530 kill + 00002547 00006547 atoi | 000026DD 000066DD vfprintf | 00002C38 00006C38 ltoa + 00002C9B 00006C9B __longtoa | 00002E2F 00006E2F itoa | 00002E98 00006E98 fputs + 00002EF6 00006EF6 open | 00002F21 00006F21 malloc | 0000314D 0000714D fprintf + 0000317F 0000717F exit | 000031AF 000071AF _read | 000031CE 000071CE getpid + 000031E3 000071E3 signal | 00003208 00007208 strerror | 000033C5 000073C5 unix + 000033DF 000073DF fgetc | 000034EF 000074EF memcpy | 000035BD 000075BD on_exit + 00003636 00007636 atexit | 00003649 00007649 strcat | 00003669 00007669 unix_long + 00003683 00007683 strchr | 000036BE 000076BE strlen | 000036F5 000076F5 free + 000037D5 000077D5 fputc | 000038E7 000078E7 ultoa | 0000393C 0000793C strtol + 000039E4 000079E4 sbrk | 000039F9 000079F9 fread | 00003C2D 00007C2D strtoul + 00003D84 00007D84 toupper | 00003DA9 00007DA9 tolower Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------- ---- ---- ------- ----- ------------ -UDATA0 00009100 00000AAD = 2733. bytes (REL,CON) +UDATA0 00009180 00000AAD = 2733. bytes (REL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ - 00009100 _argc | 00009102 _argv | 00009104 environ - 00009106 errno | 00009108 __cleanup | 0000910B device_ha - 0000910D device_na | 0000930D zeroed | 0000950D dev - 0000950F inode | 0000970F bitmap_in | 00009713 bitmap_bl - 00009717 bitmap_im | 0000971B bitmap_fi | 0000971F inode_bit - 00009721 block_bit | 00009723 immov_bit | 00009B25 __malloc_ - 00009B29 __malloc_ | 00009B7B __on_exit + 00001094 00009180 _argc | 00001096 00009182 _argv | 00001098 00009184 environ + 0000109A 00009186 errno | 0000109C 00009188 __cleanup | 0000109F 0000918B device_ha + 000010A1 0000918D device_na | 000012A1 0000938D zeroed | 000014A1 0000958D dev + 000014A3 0000958F inode | 000016A3 0000978F bitmap_in | 000016A7 00009793 bitmap_bl + 000016AB 00009797 bitmap_im | 000016AF 0000979B bitmap_fi | 000016B3 0000979F inode_bit + 000016B5 000097A1 block_bit | 000016B7 000097A3 immov_bit | 00001AB9 00009BA5 __malloc_ + 00001ABD 00009BA9 __malloc_ | 00001B0F 00009BFB __on_exit Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------- ---- ---- ------- ----- ------------ -CSTACK 00009BAD 00001000 = 4096. bytes (REL,CON) +CSTACK 00009C2D 00001000 = 4096. bytes (REL,CON) Value Global Value Global Value Global ----- ------ ----- ------ ----- ------ @@ -154,8 +151,8 @@ CSTACK 00009BAD 00001000 = 4096. bytes (REL,CON) Files Linked [ module(s) ] ..\..\lib\c0b.rel [ _c0b ] -mkfs [ mkfs ] -utils [ utils ] +mkfs [ mkfs.rel ] +utils [ utils.rel ] Libraries Linked [ object file ] diff --git a/src/fsutil/mkfs.obj b/src/fsutil/mkfs.obj new file mode 100644 index 0000000000000000000000000000000000000000..49368b5306fe9eb3c6e8d14a11bd257ef7ea7b30 GIT binary patch literal 17055 zcmeHvdw5jUx%ay>*Gz5`2uK3TPQo=nNVtRymk=&N`6P%SUJl?e$;^a-Boi_dFenxp zQNoDDW7S%<)mrt@)AnHNsn#AT0TEL=M?h#fUu^{h1d{PU3kn*@`MqoHy)zTk(|&)P z=lRZa_LKST-+tG--u13`UH00y%u}qiB{F;Z=OsknC%F}R8-3N`H9qZ-hJlzB{Ycw8 zoK)!bRW;QNS)`}@%uZAQy(7s|G9SB}$T_pHDiqRncyCFHKazX{740nadcvN#Bv&fY z3H;)>aw^|h81~&0juZYYjp+JpqJ40*wV0@{@)4=DV7cbsZMy0Nklm}@q%0C&7MD_vSN|SPLCj2wcHygFRgB_SsSQd+O#gPG}KtV)E{aJ z2Wpqrt@4KogHc(Iw=ntzS7LHWMj~i1J2&=Qk&KfmJy`>=>s0*wM z)Yqu9f^`jnT3@4jyRR`62-d5`;|hz43QJujC51(!Da9G@b2$!7_?6+;FB2d(#p?Am z`aIrrvO3Wa)P$d@s&EC;?ovX<(N-ySuw@fRed3Q19cg z6!fxoJ-P*3%f^0SPgu;{bDWwvj)BD=3as<7M30Ikpi9^Zp@Yt{&c{ydN3kqXR;JAj_c*&TG-)!&VzPPkB6z=pg-7H=Lv_=W3Tlz z6NbC4ba!)Kv##?s27O+3tjlohtAg<-c*Vikiv5h9(3(hvJ z$h_jxNhQ}vCS4;by+-2dEh#O^=&@|657znWxLJ8b@tkA!G}ct>-JeiZ7Odf*o<>Dk zBgs?Ehujb3VFSnNoECscsC0!y~UJsrsx)ukoxK}%MpfnENC-~ja(@rUv zVd^{$Zf{dv12+o0&aH2ia=l0Of!GoXdm6(m;YbUKKTz+f<+9m79yYQ^v2T2&^(byt zy+^TYeaPmk0BHqA>!xUF^`1IkU!?R*S6WBv z4`HrR!{n-9FkDp|tj631xn8Q6ML4@^Xj;92M)Z01Zm=P=1nPrcUp8c1VY#JhG5dxj zQQ+6)s;djG`RXJQPEO)zX=RB*+_J=8NurRiP6}`#T2dz0QnyEDx4$mjTZG9;#KO?B zx>q*^s#kF=da_#FYkZAWy%j}KZ1A|zL}qs&Sd~F0XB|ZLkQ;%;8o>zxH+yo850ipF z=oXSeP)T+N>wWhG!tQVybhwSII9uY7vlOxdPMkRX`P`utNO=lhU=nb%kgzVQEb5J|jgF+V7n1lWZwn@l7(wKu{VBAD0bY5c)`Vk`j zsF1y+F$WFBS$vX^jntTfTwvD=*))wgXfarpklm#*2L-_f3Ry^F4tfBLJ4y;|)|i8y z0UIP_&uPp-KLbO9L+|GrbI@)uEQ2B2t1$=t0j$4}{ZV5M`U}`~LiU-)9F&F=3HRR= z%G8*HMu7Dbve6oI&@8Y4LUyCZ9CSAr4~!J5(iqwjEJw)JYs^941;bJudf(HSgI)&X z^-T)>lg1qM7Fddq?a-Km-Uo9C*#{bP(8plBPD!CpH0Gd7U{i&xOJfe2IBr&H(fFd$ zamB@@6N<)7C?;n#-4^X{jn-KPO`v+RN(06eDCwCdN=TIJG)~RXGU)2r(ZN=( z`R$4~$QAOa)wMoPy~_1MW#CNaDVx%*l)M_-j(%u0?>Wp4eqcV(*4O#hvR7lSl(N1t zmt(-y=p<_m=RzsFCs{L-DEfd>woy-ia+-R@_{*fE+>Ko)uN+e>w0jO0F4i4fez3vU z=-~yWib*T%tAh{iQLj>l=u9r_Mu;+%!AdtpPb;}}K5xU|CxytF#)1tQd0o!j4bHr) z&h}_Z(vekFqe`fG`+KqN?TE(y?2h&VTY6>|4ah7=OOGu{P9I=LYs8kMrT0a83oHt@iPNucPW1d&l`e0b~2b=1> zaC3KGMHh#IK{d1@*vJutI8&kA)wXDMlDao{joAMN#pHIUDOrSKO5cm_qUc8?su%qN z6>~z$6^kY%b$~`sD7pR8^ZKSoe`AXN*|h%k5oJ-U`QD$8n0xOjn|fD4-}F#^V?NTY zgZCVk3OQ0?M8^THnmVz~c~T^(@3tR1#_rcQ)z+$92gCCfK~yMEpD5%CdTMc&@o7~& zxhFR3a$4S(X}LssSJDbDrmcTn&5?!Pl6Nspmb)E&B=7Sy?#CC?VoNTkMgOXR!4;?! zTo&YVTEUgHY}mMYW^BoqX$7CB#kM0)Y!Ucnw)!g4D`y`-rep27FWREbW-b%?e`?En z+E(z-w!CL;xo_L@erU@*nUeQBFfH!|jE$#lu_e#i6iRv{HnYP@fYKCXh%JITC5iM| zPebpAw#;KTST9Ney*vN*d{}BPc;1$IG6mAozCF_1lgY5pwLzW}TAt@+p68M01?1s6 zA&((tpI#7oUXY4#?IhaEYT7q>-$3UV1&`Y%AxBQZW47!LgzMr-*gtkaDW|()OS2E4 z&!UxhXp0p92GzSo(PS$I*=UtIcBd&PqaT?ug6=qWg9$^3kFFf+Z*qg@l9erAj|iZ? z+4uPZBfryrKkBz{@?iP*Zn17$tS@1lEh-zF=w<^_v!fTxH<*)5Q?FOQh%M=x&K2uu zk1feeFDSQV=at)XXWODaOTkPW%(Uft`5?E>z-P|&2?LAxa*XGa9pVPcuJ=dPQ z(H5O_j^`$E9MnqdPVOmD;`&c7JHP#s^(|seaD8jH|IWLn~+Q8*?EuJ za<_sCE9w#OiI`xopeJDbWSUZW2w?^h0|;a1@Rehkl)9=Kvco)j4shZL1yk|lt+uH) z+l`nW%3fQWKh^o=?mD^{E47?T8gUsDu&uo;4e>2=3^;pVbcl8R#SCoGG1l{^GTz-b z{NKul4>OQ zA+hYC$6_PZSZ;1CGw)bgQp{D{p4C36ea}BbE9M$rX4dTA^V*2CJ(#+ppIY14;9uKr zY(AASLcJwcH0*ajuo@oCNLO?ZP@?lvds#Trc*<(e?C?Vz= z8*`0}xe8*gQ8Cx(cD}qDhI2HpXnLRis1YZCX)C-%xXVGbX#TV!-iS{N)N_&~MRovr zg5|S)dCq_5rcfcu?AdUfDCkN0U-myR0t<0hR1Nx7G5M)Oy{g}X6QQ?|*OPbf?ai-A ztoGCo533=cZxv=tZ1R}zUB(~xP8atbg~DAZU>4NH@`lHR^q{a1CC{zL)i2Jp;_k1Q z@NQo%RCzl_6_>%Pxap`a5qGJU ziSlI}uyU)HahQqlHh3Cw^Ck>;)_7{0d~BK=m7Z0+vePa}vAR=nXL~3rDlHFf8m(Dp zCJIo8HWjMKO0$CX{y<~hbUt8PB1EdZXM#hLZP|0ocZ2lg`G~ZyKG;;VLdD&?U}H1K z0_Adp&yknMhA(QUsk+)13i+`LFBCeO+%EQSveL5M$RDXlT@b0X-|CO>l@u-PogJ31%`S4TM6s!DN0S%y zDtOb*^@Z_S%qvtF*6f-SQdTNLynHYt+e=VI^B5vHYT0raxfgInyMKt)P_OR59kF338j5u7GwRLf)(WaYr zhWljfsOW6D)ErLB*iqTpa`~>XdHl`}%bN-!962c>)6zL%{Lbe%1PS}w&L$fsJ2r@-;{CM$P5#FPFe9=!HB#Z+ zI?riotvu9W#h__jd0;}32TgJjdea3Ne9fACj)b^rPKO$VE9 zfLDp*ETOT4cgWIO@w-Un@3;yryOh?&`%iQ2THdjDJk#Uya1_^aMnN#Y*=A3UZ)l{I zL$+3as1Fyre{aQy?-paEwd}I^TNnS?j}h!|tvKq(4B&6AJdQAIH6Ol;d*_gzid3dT zb?a=070ILCgTe`ImO$Q4zZk60`&65GkbbTw{V#g=NJh0=b}Ax_x;F+6ZR^8=n%-0_b44;+7K#_SD@i;{b;8t72IAtqW|Weuv2TIgl5wQQmPziqJtYV zgp?WeGUO}GS}vY@Rt||&99a-ISkPCGEHqT?+T^&g(~M{sz2ckZN9}aAbt^w~)Q4c| z-ij`cB1fT1%mH1IimoXY_E0}f5pu)Bj{j@S$?D#U3!HIpMW=!tP7AFSrz4e}Q!4El zTMw~hF`vsLsoPpByI^Dd&MiqTm&Rml;!}O3vP+B*By@^Gp?bRIGzKM1bYWV{+;lMG zfmUI+3-h8KLp{#F6PO|*l}B67%xML#KRSNx^hm`~WZQ-u)IH>J-n}atTj`jglTw|G z)yXiOT#r(370t4u99gwyNY$1DXI5YWI->$w)}J=7&%Q>{t|=N-mbNrA_7zDRh(sn` z@&XDWZ5{FVE>5&U=4~_UZHVr2$&lLPr03Y*`?2H_EirFfYFyfdmi3psjn_pgF5$Fs z1Kj!iysP3|$l9|0f_Kf=S5c0+A$GK(nE6_EnOcr_wF(}oIJY%*55m-K%x9Ra6;W9^ zo3*r=T8?$KigiL{@uilt3dWfjH#pTPn*18OLLtt|#BIgG}=Mps&UiKCY!Nx?8#w{ za}0CxC1YhFV=*dWd2EjF5>5K3Jo609$v}@1VOhA6L``&CssFXDWPOA$`bI->s}Em- zqF&_$2Zv}zF;~dt_*ada1mCbamo?DrAtDzL>2p|nT+-*4)P%a3<6P>qf}28smfyZo zwhT{5oc5KQg*SyEiNR#Cn0c>nBuHX9ES=%nfuQa=Or77m&ugZI? zo@predrVcP_YgJRG_Mrxrd_%RI9qo0q_%z0voJ-SF2TJEXNF^ha@g=pPCVYUQU=%{ z{H)^f6+g<%!mC?ELxgM$Fki?f0`mmp*Pn*sXB7`LW!~FxJX@sl!%NO(rCOlO8wQhk zH-qubF)KX+EW-`Fhy~rYNf0tkffYS0G zz)FSe6Cgiuw9*$qew!^zyqw2%u~IT3Doevd2(7gKV6wCuz_Ns1KA0?R445o!4wx)$ z9+<4honSYK9LvC@WgnQV$4W41xe-iSUJE8IZv>N;zXK*MKMr=I@cGAJbA)Anpe!xF z1|}{45=>g&0VXZ)29uVfVAAqOU^2&Pu!X|%IYV|4Oj_aI$~PVnAuySPA6nlkWPQP8 z-s_Fj5nv01y(M6L3&KiXFpppXFzNGZFllcMm@Ms8u;n7}9xzp~Ltq2JtaJj5AMsl0 zESOuQUIF9B@L7~<()I9AkM0(-fnd^uAz;fy-jQJWBDEMydQbu;J(vN;k5H`?0+V^S zfh`rX$HDSN-eUA1d};Ng30=Z!T6!ImF@@QN7Ytp1>*jnpMzkD`n$@`3SXsFhv@%Mt8NgYhGG=}SA9 zw1+opHN8Ft8w4ix^1-BDfstASCQF+PmMzNQ2knyGY_R19t1(!E!PbHe5P83CuvUZd z!*`kbG?=XK^I$U09~!AKgYlzusdv@Tv)FViDPYp)zF^YR!CFuhY;w zZ|Hq#=s93k&S4o~8-fowqBI+KA5z82u#-Z&tTHZ2{74TJ~h}E2E(&GEww+G z>^XxBHo{;f1}g`XV_}ZL78>jhgDnMMX&0r`RZTYaF_k@x9w8369*gqL;ADE2Q zez5z5mBU~%x_<(bF*pt;qk9(YUZM9NVEmRy7F_|8aY;f~S|?I%VA4t-Fxl4zgVl%} zBfw-_3c+L~CxA7J)Tv-{gw8bBJg|F&oCm7xbq+8YU4H*rmeC(fmN6JiS{@1}z2eUW?u5N8ngJ%q(T!js zAzKKB219>Y0w!C3Ias5R;RQXd-GX4U+_hkvMe4m^n*{q7*h7M~fITSKLtw3fMZi`I z_9fVIuq+yjPM``_1~w4PO6$So{PzUdD3QuK@?Cb5@Wf0LaBLC2*u-kgE;R9I1agI{ zfJvfmCecGI;*~u)j+5vqq?+j^Vc{1*EA0f@XfMz~CxNNr)xUI76rQO~z&_*z_9eVX z0KfS|j($`ORH+1*E7rmo58z332hdDjpoLZgai#{^XcN#uF91_%J1~vj2By<*ff;lF zm`%S2=7=#w^k;Ar{RhxYT|f)ju@bUU4$ww}fOe_?CevJ?gXRNML@T4M!EID6Qr81h z>1kjFy$;Nzw}E}>ePBO20KATl0CVU(a3GmYe1%{IE~5d!yD1;&rfEPA%?0}Cc3=(N z4Gd5Xu#SSjdWryp^a^mbc%873_JN1!_rNe+0j?!G)*j822fUw(fZw7L;07uOZls%l z-=+n?7P=d_iBh13RlwJ1HSl%%N8m5%H^4Wj4fqy)0Q@y|0^g==oYQyEKwuk90v@Dt;0H7pc!(AO z50e-82dV=ep*6sdXfyCAeINL-cwz4Z?FBzY7l5D8XTY=6$A;Eah5;=~8PKlW3`|y* z0UgRJV7gL+9*CI@d@!{DReBaUgnj`WN>Si&Itm;?$AN|7RZ)C=0j|(rfoMdWUF|di zm`ue$2Tca1&@5moEd-{~!@zWU9GF2r06OVqU?yz`_N6y~{peS~f%HD`dip&ukNybE zr=!53bP70vE&)eVH*g~L$HZ4cV}O&W1n8n!z{#`#IE9u0r;-;qgVq6O(l+2MdIC6` zegeFi+JW=vkHGnK9C#;n0`H=$z@?OfNopC52D)iBa5>!$tfJ*WFEs%Jv=O+9z7MRW zSAap<0Swa_U^9IIyq6TrshcPr_#ou~AEIHvtyB(tgysUb(E{M3v>5mpH3A=}hk;Mf zc5n+F09xr|U@}=T8>UhoFr8dLCrttNp_#z`^Z@WWdKQ>N zF9HYBtH43r7tllc)8wv5 zkyu`hkFp8_UTeMscjbAWivKVUlNDyoVeuIRkN+r+Ju@l%SsbqzN^>UsyHt<=AP&<7 zbi^|NnW&-LE#AT>GmNlK61l~@`Z$V{h*$b4DNcg-{-LeJN$_z1+cYHcpV?s=LFs(v zcuEy9c0GFjJF;M-)YgMQispGiIP#AMJ8&y(ra|)TqC*d8c9`x z#4X+kfGELoL!yrS3@J{>jaM6>qG!_fyfW_bIsWrPOqJY%=x6*<;lvN7@C7P1xBS*l za0_OyB+(Pfam*heiW-yKQ-xPTg$e*V=lb ziM~OFReBB{FE}%C*P|ax746lg!dj_gg;eNJp-)Q6b&1IJ6D^nAx#ib=Bz3qJ{9Y7a zJNy*27%!BBhb0q;SMt(B-5;4t_vbaCO*CEXb${5GM1Odl+*6BRYPsYNQ5ByCN*(rx zt?j^XAN-jul!QN%O6VrTA9oc7bFH+X#aVoRq)Uh+&u{G*0*<_!zfMV%;ANV|Ag>2` z6FPo>ZBuB46i5kwXrdkSPHVwQHx#Z3*rzny->@!>A*fhguUcqC0`SC>&Ph?^afpjjX&l57x-Kw6gh^a z<0cSaQ_7JdCFAIwUXmhuGf`4Jp1x~H+*Len>1A`>-Bs1WhUNqb<`H*YpkB)K_>>lv z(0zs-JsOGi;uSq_D+TJ&xEV*H?#8?k#44*N8q*P*#OPZ=qX~)fP?Z{Uzf*8VCOrAMDO#7y`@R(Esu#B>wT;eM{LJu z^!eSI9eIW=<ODf{xv5JA`95zh)}ljRcjS0n25iTL?87mM`*ST>jwJP!yl48b@+@r5n*q z3ZY>{ST>F{lk)psa!<$dv3z>*^yzY?R9@~Xck!}GewPmx_c1vQ5#L!4!JwI7IKZDT G(|-aQu75fJ literal 0 HcmV?d00001 diff --git a/src/fsutil/mkfs.rel b/src/fsutil/mkfs.rel index e12e8062..0db7b5f7 100644 --- a/src/fsutil/mkfs.rel +++ b/src/fsutil/mkfs.rel @@ -1,6 +1,5 @@ XL4 H 6 areas 44 global symbols -M mkfs S ?US_RSH_L02 Ref00000000 S fflush Ref00000000 S bfill Ref00000000 @@ -66,15 +65,15 @@ S bitmap_inode Def00000604 S device_name Def00000002 S device_handle Def00000000 S dev Def00000402 -A IDATA0 size 985 flags 0 -S _immov Def00000984 -S _verb Def00000983 -S _fmt Def00000980 -S _yes Def00000981 -S dirbuf Def00000780 -S _quick Def00000982 +A IDATA0 size A05 flags 0 +S _immov Def00000A04 +S _verb Def00000A03 +S _fmt Def00000A00 +S _yes Def00000A01 +S dirbuf Def00000800 +S _quick Def00000A02 S bootblock Def00000000 -A CDATA0 size 985 flags 0 +A CDATA0 size A05 flags 0 T 00 00 00 00 R 00 00 01 00 T 00 00 00 00 CD 00 00 00 00 21 1A 06 00 00 E5 @@ -277,7 +276,7 @@ T F4 01 00 00 00 00 00 00 11 00 00 00 00 3E R 00 00 01 00 02 04 11 00 02 09 12 00 T FA 01 00 00 00 00 00 00 21 00 00 00 00 CD R 00 00 01 00 2B 04 01 00 02 09 01 00 -T FF 01 00 00 00 00 00 00 3A 81 09 00 00 B7 28 +T FF 01 00 00 00 00 00 00 3A 01 0A 00 00 B7 28 R 00 00 01 00 02 04 11 00 00 09 04 00 T 06 02 00 00 10 R 00 00 01 00 @@ -327,7 +326,7 @@ T 4A 02 00 00 R 00 00 01 00 T 4A 02 00 00 CD 00 00 00 00 DC FF 3A R 00 00 01 00 02 05 17 00 -T 50 02 00 00 83 09 00 00 B7 28 18 +T 50 02 00 00 03 0A 00 00 B7 28 18 R 00 00 01 00 00 04 04 00 T 55 02 00 00 R 00 00 01 00 @@ -345,7 +344,7 @@ T 6D 02 00 00 AF DD 77 DC DD 77 DD R 00 00 01 00 T 74 02 00 00 R 00 00 01 00 -T 74 02 00 00 01 80 07 DD 6E DC DD 66 DD A7 ED +T 74 02 00 00 01 00 08 DD 6E DC DD 66 DD A7 ED R 00 00 01 00 T 7F 02 00 00 42 D2 13 03 00 00 R 00 00 01 00 00 06 01 00 @@ -353,7 +352,7 @@ T 83 02 00 00 R 00 00 01 00 T 83 02 00 00 01 00 02 DD 5E DC DD 56 DD 21 R 00 00 01 00 -T 8D 02 00 00 80 07 A7 ED 52 EB 3E 00 00 00 00 +T 8D 02 00 00 00 08 A7 ED 52 EB 3E 00 00 00 00 R 00 00 01 00 2B 0B 19 00 T 95 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD R 00 00 01 00 02 05 19 00 02 0A 11 00 @@ -403,7 +402,7 @@ T 13 03 00 00 01 00 02 11 02 02 00 00 3E R 00 00 01 00 00 08 03 00 T 1A 03 00 00 00 00 00 00 21 00 00 00 00 CD R 00 00 01 00 2B 04 0F 00 02 09 0F 00 -T 1F 03 00 00 00 00 00 00 3A 83 09 00 00 B7 28 +T 1F 03 00 00 00 00 00 00 3A 03 0A 00 00 B7 28 R 00 00 01 00 02 04 11 00 00 09 04 00 T 26 03 00 00 18 R 00 00 01 00 @@ -419,7 +418,7 @@ T 3A 03 00 00 00 00 00 00 CD 00 00 00 00 R 00 00 01 00 02 04 01 00 02 09 11 00 T 3F 03 00 00 R 00 00 01 00 -T 3F 03 00 00 3A 82 09 00 00 B7 28 19 +T 3F 03 00 00 3A 02 0A 00 00 B7 28 19 R 00 00 01 00 00 05 04 00 T 45 03 00 00 R 00 00 01 00 @@ -449,7 +448,7 @@ T 85 03 00 00 DD A7 ED 42 30 51 R 00 00 01 00 T 8B 03 00 00 R 00 00 01 00 -T 8B 03 00 00 3A 83 09 00 00 B7 28 30 01 09 00 +T 8B 03 00 00 3A 03 0A 00 00 B7 28 30 01 09 00 R 00 00 01 00 00 05 04 00 T 94 03 00 00 DD 5E DC DD 56 DD CD 00 00 00 00 R 00 00 01 00 02 0B 1D 00 @@ -483,7 +482,7 @@ T D8 03 00 00 00 00 00 00 18 9E R 00 00 01 00 02 04 11 00 T DC 03 00 00 R 00 00 01 00 -T DC 03 00 00 3A 83 09 00 00 B7 28 27 +T DC 03 00 00 3A 03 0A 00 00 B7 28 27 R 00 00 01 00 00 05 04 00 T E2 03 00 00 R 00 00 01 00 @@ -501,7 +500,7 @@ T 07 04 00 00 00 00 00 00 R 00 00 01 00 02 04 11 00 T 09 04 00 00 R 00 00 01 00 -T 09 04 00 00 3A 83 09 00 00 B7 28 18 +T 09 04 00 00 3A 03 0A 00 00 B7 28 18 R 00 00 01 00 00 05 04 00 T 0F 04 00 00 R 00 00 01 00 @@ -615,7 +614,7 @@ T 70 05 00 00 3E 5D 0D 00 00 21 5D 0D 00 00 CD R 00 00 01 00 29 05 01 00 00 0A 01 00 T 76 05 00 00 00 00 00 00 E1 E1 E1 E1 3A R 00 00 01 00 02 04 11 00 -T 7D 05 00 00 84 09 00 00 B7 CA 44 06 00 00 +T 7D 05 00 00 04 0A 00 00 B7 CA 44 06 00 00 R 00 00 01 00 00 04 04 00 00 0A 01 00 T 83 05 00 00 R 00 00 01 00 @@ -755,7 +754,7 @@ T 0E 07 00 00 56 0B 19 EB 3E 3F 00 00 00 21 R 00 00 01 00 29 09 01 00 T 15 07 00 00 3F 00 00 00 CD 00 00 00 00 01 R 00 00 01 00 00 04 01 00 02 09 11 00 -T 1B 07 00 00 80 07 00 00 DD 6E 04 DD 66 05 DD +T 1B 07 00 00 00 08 00 00 DD 6E 04 DD 66 05 DD R 00 00 01 00 00 04 04 00 T 24 07 00 00 5E 0A DD 56 0B 19 11 05 00 19 EB R 00 00 01 00 @@ -783,7 +782,7 @@ T 71 07 00 00 R 00 00 01 00 T 71 07 00 00 CD 00 00 00 00 FE FD 3A R 00 00 01 00 02 05 17 00 -T 77 07 00 00 83 09 00 00 B7 28 18 +T 77 07 00 00 03 0A 00 00 B7 28 18 R 00 00 01 00 00 04 04 00 T 7C 07 00 00 R 00 00 01 00 @@ -895,23 +894,23 @@ T 90 08 00 00 99 08 00 00 R 00 00 01 00 00 04 01 00 T 92 08 00 00 R 00 00 01 00 -T 92 08 00 00 3E 01 32 81 09 00 00 18 41 +T 92 08 00 00 3E 01 32 01 0A 00 00 18 41 R 00 00 01 00 00 07 04 00 T 99 08 00 00 R 00 00 01 00 -T 99 08 00 00 3E 01 32 80 09 00 00 18 3A +T 99 08 00 00 3E 01 32 00 0A 00 00 18 3A R 00 00 01 00 00 07 04 00 T A0 08 00 00 R 00 00 01 00 -T A0 08 00 00 3E 01 32 82 09 00 00 18 33 +T A0 08 00 00 3E 01 32 02 0A 00 00 18 33 R 00 00 01 00 00 07 04 00 T A7 08 00 00 R 00 00 01 00 -T A7 08 00 00 3E 01 32 83 09 00 00 18 2C +T A7 08 00 00 3E 01 32 03 0A 00 00 18 2C R 00 00 01 00 00 07 04 00 T AE 08 00 00 R 00 00 01 00 -T AE 08 00 00 3E 01 32 84 09 00 00 18 25 +T AE 08 00 00 3E 01 32 04 0A 00 00 18 25 R 00 00 01 00 00 07 04 00 T B5 08 00 00 R 00 00 01 00 @@ -1103,7 +1102,7 @@ T 1F 0B 00 00 EB 21 00 00 C1 ED 4A 4D 44 EB 3E R 00 00 01 00 T 2A 0B 00 00 09 CD 00 00 00 00 01 FB FF 09 DD R 00 00 01 00 02 06 21 00 -T 33 0B 00 00 75 F8 DD 74 F9 3A 84 09 00 00 B7 +T 33 0B 00 00 75 F8 DD 74 F9 3A 04 0A 00 00 B7 R 00 00 01 00 00 0A 04 00 T 3C 0B 00 00 28 7D R 00 00 01 00 @@ -1171,7 +1170,7 @@ T 0A 0C 00 00 21 8A 01 00 00 E5 3E 00 00 00 00 R 00 00 01 00 00 05 02 00 2B 0B 04 00 T 10 0C 00 00 21 00 00 00 00 CD 00 00 00 00 F1 R 00 00 01 00 02 05 04 00 02 0A 11 00 -T 17 0C 00 00 3A 80 09 00 00 B7 28 0E +T 17 0C 00 00 3A 00 0A 00 00 B7 28 0E R 00 00 01 00 00 05 04 00 T 1D 0C 00 00 R 00 00 01 00 @@ -1229,7 +1228,7 @@ T 9D 0C 00 00 16 06 00 00 3E 00 00 00 00 21 R 00 00 01 00 00 04 03 00 2B 09 02 00 T A2 0C 00 00 00 00 00 00 CD 00 00 00 00 E1 3A R 00 00 01 00 02 04 02 00 02 09 11 00 -T A9 0C 00 00 84 09 00 00 B7 28 61 +T A9 0C 00 00 04 0A 00 00 B7 28 61 R 00 00 01 00 00 04 04 00 T AE 0C 00 00 R 00 00 01 00 @@ -1283,7 +1282,7 @@ T 28 0D 00 00 00 00 00 00 E1 ED 5B 00 00 00 00 R 00 00 01 00 02 04 11 00 00 0B 03 00 T 2F 0D 00 00 3E 00 00 00 00 21 00 00 00 00 CD R 00 00 01 00 2B 05 08 00 02 0A 08 00 -T 35 0D 00 00 00 00 00 00 3A 83 09 00 00 B7 28 +T 35 0D 00 00 00 00 00 00 3A 03 0A 00 00 B7 28 R 00 00 01 00 02 04 11 00 00 09 04 00 T 3C 0D 00 00 12 R 00 00 01 00 @@ -1605,405 +1604,405 @@ T 00 00 00 00 R 00 00 04 00 T 00 00 00 00 R 00 00 04 00 -T 80 07 00 00 +T 00 08 00 00 R 00 00 04 00 -T 80 07 00 00 +T 00 08 00 00 R 00 00 04 00 -T 80 09 00 00 +T 00 0A 00 00 R 00 00 04 00 -T 80 09 00 00 +T 00 0A 00 00 R 00 00 04 00 -T 81 09 00 00 +T 01 0A 00 00 R 00 00 04 00 -T 81 09 00 00 +T 01 0A 00 00 R 00 00 04 00 -T 82 09 00 00 +T 02 0A 00 00 R 00 00 04 00 -T 82 09 00 00 +T 02 0A 00 00 R 00 00 04 00 -T 83 09 00 00 +T 03 0A 00 00 R 00 00 04 00 -T 83 09 00 00 +T 03 0A 00 00 R 00 00 04 00 -T 84 09 00 00 +T 04 0A 00 00 R 00 00 04 00 -T 84 09 00 00 +T 04 0A 00 00 R 00 00 04 00 -T 00 00 00 00 43 36 45 46 30 33 30 35 30 39 32 +T 00 00 00 00 35 32 43 38 30 33 30 38 32 31 31 R 00 00 05 00 -T 0B 00 00 00 30 33 39 31 30 31 00 80 CD A3 06 +T 0B 00 00 00 38 34 30 32 34 31 00 10 CD 0E 07 R 00 00 05 00 -T 16 00 00 00 CD AB 05 CD FD 04 18 22 00 00 00 +T 16 00 00 00 CD 16 06 CD 6D 05 18 22 00 00 00 R 00 00 05 00 T 21 00 00 00 42 4F 4F 54 20 20 20 20 42 49 4E R 00 00 05 00 -T 2C 00 00 00 00 00 00 0F 00 01 00 00 00 00 00 +T 2C 00 00 00 00 00 00 10 00 01 00 00 00 00 00 R 00 00 05 00 -T 37 00 00 00 00 00 00 00 00 00 00 00 00 CD D2 +T 37 00 00 00 00 00 00 00 00 00 00 00 00 CD 56 R 00 00 05 00 T 42 00 00 00 01 6C 6F 61 64 69 6E 67 20 2F 62 R 00 00 05 00 T 4D 00 00 00 6F 6F 74 2F 6B 65 72 6E 65 6C 2E R 00 00 05 00 -T 58 00 00 00 62 69 6E 0D 0A 00 CD 2C 02 11 04 +T 58 00 00 00 62 69 6E 0D 0A 00 CD B0 01 CD 9B R 00 00 05 00 -T 63 00 00 00 00 21 7A 07 CD AB 04 2A 7A 07 11 +T 63 00 00 00 00 CD 70 02 CD 90 01 CD 17 05 CD R 00 00 05 00 -T 6E 00 00 00 C6 31 B7 ED 52 C2 79 01 2A 7C 07 +T 6E 00 00 00 35 05 ED 5B 0F 0E D5 21 8C 00 0E R 00 00 05 00 -T 79 00 00 00 22 28 07 2A 7E 07 22 2A 07 2A 80 +T 79 00 00 00 0F ED B0 C1 2A 11 0E F9 11 33 00 R 00 00 05 00 -T 84 00 00 00 07 22 2C 07 11 01 00 21 06 07 CD +T 84 00 00 00 19 EB 2A 0B 0E 97 C5 C9 ED 39 39 R 00 00 05 00 -T 8F 00 00 00 70 02 20 7B 21 0B 07 CD 70 02 20 +T 8F 00 00 00 3E F1 ED 39 3A 3A 80 10 ED 39 38 R 00 00 05 00 -T 9A 00 00 00 73 CD 99 03 21 94 0D 01 14 00 CD +T 9A 00 00 00 E9 11 04 00 21 E5 07 CD C5 04 2A R 00 00 05 00 -T A5 00 00 00 22 03 38 7B CD 40 01 CD 5D 01 3E +T A5 00 00 00 E5 07 11 C6 31 B7 ED 52 20 4E 2A R 00 00 05 00 -T B0 00 00 00 F8 ED 39 38 CD 51 02 21 00 80 CD +T B0 00 00 00 E7 07 22 93 07 2A E9 07 22 95 07 R 00 00 05 00 -T BB 00 00 00 22 03 3E FC ED 39 38 CD 59 02 EB +T BB 00 00 00 2A EB 07 22 97 07 C9 2A FF 0D 11 R 00 00 05 00 -T C6 00 00 00 CD 22 03 CD 62 02 D4 3F 02 CD 99 +T C6 00 00 00 C9 A6 B7 ED 52 C8 CD 56 01 62 61 R 00 00 05 00 -T D1 00 00 00 02 CD 0C 02 01 80 80 21 AA 0D 18 +T D1 00 00 00 64 20 65 5F 6D 61 67 69 63 3A 20 R 00 00 05 00 -T DC 00 00 00 06 19 CD DA 04 02 03 ED 5B A8 0D +T DC 00 00 00 00 18 2D 2A 01 0E 11 03 00 B7 ED R 00 00 05 00 -T E7 00 00 00 B7 ED 52 38 F1 31 CD FF 21 D3 06 +T E7 00 00 00 52 C8 CD 56 01 62 61 64 20 65 5F R 00 00 05 00 -T F2 00 00 00 11 CD FF 01 33 00 ED B0 21 3A 01 +T F2 00 00 00 66 6F 72 6D 61 74 3A 20 00 18 0F R 00 00 05 00 -T FD 00 00 00 ED 5B A4 0D D5 0E 06 ED B0 2A A0 +T FD 00 00 00 CD 56 01 62 61 64 20 6D 61 67 69 R 00 00 05 00 -T 08 01 00 00 0D ED 5B A6 0D C9 CD D2 01 66 69 +T 08 01 00 00 63 3A 20 00 19 CD 1F 06 CD 16 06 R 00 00 05 00 -T 13 01 00 00 6C 65 20 6E 6F 74 20 66 6F 75 6E +T 13 01 00 00 CD 56 01 64 6F 69 6E 67 20 61 20 R 00 00 05 00 -T 1E 01 00 00 64 0D 0A 00 18 6B CD D2 01 66 69 +T 1E 01 00 00 63 6C 65 61 6E 20 62 6F 6F 74 0D R 00 00 05 00 -T 29 01 00 00 6C 65 20 74 6F 6F 20 73 68 6F 72 +T 29 01 00 00 0A 00 21 E5 07 11 E6 07 01 FF 01 R 00 00 05 00 -T 34 01 00 00 74 0D 0A 00 18 55 3E 84 ED 39 3A +T 34 01 00 00 36 AA ED B0 11 00 00 06 04 C5 D5 R 00 00 05 00 -T 3F 01 00 00 E9 2A 94 0D 11 C9 A6 B7 ED 52 C8 +T 3F 01 00 00 21 E5 07 CD D3 04 D1 C1 13 10 F3 R 00 00 05 00 -T 4A 01 00 00 CD D2 01 62 61 64 20 65 5F 6D 61 +T 4A 01 00 00 3E AA ED 39 0B 3E 13 ED 39 0A 18 R 00 00 05 00 -T 55 01 00 00 67 69 63 3A 20 00 18 2B 2A 96 0D +T 55 01 00 00 FE CD 37 06 67 62 6F 6F 74 3A 20 R 00 00 05 00 -T 60 01 00 00 11 03 00 B7 ED 52 C8 CD D2 01 62 +T 60 01 00 00 00 C3 37 06 11 02 00 CD 84 01 3E R 00 00 05 00 -T 6B 01 00 00 61 64 20 65 5F 66 6F 72 6D 61 74 +T 6B 01 00 00 81 ED 39 0B 3E 13 ED 39 0A 97 3D R 00 00 05 00 -T 76 01 00 00 3A 20 00 CD D2 01 62 61 64 20 6D +T 76 01 00 00 20 FD 3D 20 FD 3D 20 FD 3D 20 FD R 00 00 05 00 -T 81 01 00 00 61 67 69 63 3A 20 00 19 CD B4 05 +T 81 01 00 00 11 00 02 21 81 FC E5 FD E1 01 05 R 00 00 05 00 -T 8C 01 00 00 CD AB 05 CD D2 01 64 6F 69 6E 67 +T 8C 01 00 00 00 C3 46 06 CD 56 01 73 74 61 72 R 00 00 05 00 -T 97 01 00 00 20 61 20 63 6C 65 61 6E 20 62 6F +T 97 01 00 00 74 69 6E 67 20 6F 70 65 72 61 74 R 00 00 05 00 -T A2 01 00 00 6F 74 0D 0A 00 21 7A 07 11 7B 07 +T A2 01 00 00 69 6E 67 20 73 79 73 74 65 6D 0D R 00 00 05 00 -T AD 01 00 00 01 FF 01 36 AA ED B0 11 00 00 06 +T AD 01 00 00 0A 00 C9 CD 64 01 3E 10 ED 39 3A R 00 00 05 00 -T B8 01 00 00 04 C5 D5 21 7A 07 CD B9 04 D1 C1 +T B8 01 00 00 3E FF ED 39 38 11 01 1F 01 FF 00 R 00 00 05 00 -T C3 01 00 00 13 10 F3 3E AA ED 39 0B 3E 13 ED +T C3 01 00 00 CD E8 01 21 00 F1 22 80 1F 97 ED R 00 00 05 00 -T CE 01 00 00 39 0A 18 FE CD CC 05 67 62 6F 6F +T CE 01 00 00 39 38 11 01 10 0D CD E8 01 21 80 R 00 00 05 00 -T D9 01 00 00 74 3A 20 00 C3 CC 05 11 02 00 CD +T D9 01 00 00 0F 22 FC 10 21 80 10 22 FE 10 C9 R 00 00 05 00 -T E4 01 00 00 00 02 3E 81 ED 39 0B 3E 13 ED 39 +T E4 01 00 00 CD 0B 02 D8 6B 62 2B 36 00 79 B0 R 00 00 05 00 -T EF 01 00 00 0A 97 3D 20 FD 3D 20 FD 3D 20 FD +T EF 01 00 00 C8 ED B0 C9 B7 ED 52 D0 19 EB C9 R 00 00 05 00 -T FA 01 00 00 3D 20 FD 11 00 02 21 81 FC E5 FD +T FA 01 00 00 2A 07 0E 11 14 00 18 11 2A 0D 0E R 00 00 05 00 -T 05 02 00 00 E1 01 05 00 C3 DB 05 CD D2 01 73 +T 05 02 00 00 ED 5B 09 0E 18 08 2A 11 0E ED 5B R 00 00 05 00 -T 10 02 00 00 74 61 72 74 69 6E 67 20 6F 70 65 +T 10 02 00 00 0D 0E 13 B7 ED 52 4D 44 C9 22 99 R 00 00 05 00 -T 1B 02 00 00 72 61 74 69 6E 67 20 73 79 73 74 +T 1B 02 00 00 07 CD B3 03 01 10 00 21 E5 0D CD R 00 00 05 00 -T 26 02 00 00 65 6D 0D 0A 00 C9 CD E0 01 3E 80 +T 26 02 00 00 3C 03 D8 23 ED 5B 99 07 06 0E 23 R 00 00 05 00 -T 31 02 00 00 ED 39 3A 3E FC ED 39 38 11 01 80 +T 31 02 00 00 1A BE 20 EA B7 28 05 13 10 F5 1A R 00 00 05 00 -T 3C 02 00 00 01 FF 00 6B 62 2B 36 00 79 B0 C8 +T 3C 02 00 00 B7 ED 5B E5 0D C9 CD 56 01 66 69 R 00 00 05 00 -T 47 02 00 00 ED B0 C9 B7 ED 52 D0 19 EB C9 2A +T 47 02 00 00 6C 65 20 6E 6F 74 20 66 6F 75 6E R 00 00 05 00 -T 52 02 00 00 9C 0D 11 14 00 18 11 2A A2 0D ED +T 52 02 00 00 64 0D 0A 00 C3 13 01 CD 56 01 66 R 00 00 05 00 -T 5D 02 00 00 5B 9E 0D 18 08 2A A6 0D ED 5B A2 +T 5D 02 00 00 69 6C 65 20 74 6F 6F 20 73 68 6F R 00 00 05 00 -T 68 02 00 00 0D 13 B7 ED 52 4D 44 C9 22 2E 07 +T 68 02 00 00 72 74 0D 0A 00 C3 13 01 11 01 00 R 00 00 05 00 -T 73 02 00 00 CD 99 03 01 10 00 21 7A 0D CD 22 +T 73 02 00 00 21 71 07 CD 19 02 20 C7 21 76 07 R 00 00 05 00 -T 7E 02 00 00 03 D8 23 ED 5B 2E 07 06 0E 23 1A +T 7E 02 00 00 CD 19 02 20 BF CD B3 03 21 FF 0D R 00 00 05 00 -T 89 02 00 00 BE 20 EA B7 28 05 13 10 F5 1A B7 +T 89 02 00 00 01 14 00 CD 3C 03 38 C8 CD C2 00 R 00 00 05 00 -T 94 02 00 00 ED 5B 7A 0D C9 21 AA 0D 22 A8 0D +T 94 02 00 00 CD DF 00 3E FF ED 39 38 CD FA 01 R 00 00 05 00 -T 9F 02 00 00 CD A5 03 CD C4 03 7D B4 28 3E CD +T 9F 02 00 00 21 00 10 CD 3C 03 97 ED 39 38 CD R 00 00 05 00 -T AA 02 00 00 EC 03 7B B2 28 49 7B E6 07 20 59 +T AA 02 00 00 02 02 EB CD 3C 03 CD E4 01 21 15 R 00 00 05 00 -T B5 02 00 00 2A A8 0D 73 23 72 23 22 A8 0D 06 +T B5 02 00 00 0E 22 13 0E CD BF 03 CD DE 03 7D R 00 00 05 00 -T C0 02 00 00 1F C5 D5 CD C4 03 7D B4 28 1A CD +T C0 02 00 00 B4 28 3E CD 06 04 7B B2 28 49 7B R 00 00 05 00 -T CB 02 00 00 EC 03 7B B2 28 28 EB D1 13 B7 ED +T CB 02 00 00 E6 07 20 59 2A 13 0E 73 23 72 23 R 00 00 05 00 -T D6 02 00 00 52 20 35 C1 10 E5 CD C4 03 7D B4 +T D6 02 00 00 22 13 0E 06 1F C5 D5 CD DE 03 7D R 00 00 05 00 -T E1 02 00 00 20 C6 C9 E1 E1 C9 CD D2 01 6E 75 +T E1 02 00 00 B4 28 1A CD 06 04 7B B2 28 28 EB R 00 00 05 00 -T EC 02 00 00 6C 6C 20 66 69 6C 65 0D 0A 00 C3 +T EC 02 00 00 D1 13 B7 ED 52 20 35 C1 10 E5 CD R 00 00 05 00 -T F7 02 00 00 8F 01 CD D2 01 68 6F 6C 65 20 69 +T F7 02 00 00 DE 03 7D B4 20 C6 C9 E1 E1 C9 CD R 00 00 05 00 -T 02 03 00 00 6E 20 66 69 6C 65 0D 0A 00 C3 8F +T 02 03 00 00 56 01 6E 75 6C 6C 20 66 69 6C 65 R 00 00 05 00 -T 0D 03 00 00 01 CD D2 01 6E 6F 74 20 61 6C 69 +T 0D 03 00 00 0D 0A 00 C3 13 01 CD 56 01 68 6F R 00 00 05 00 -T 18 03 00 00 67 6E 65 64 0D 0A 00 C3 8F 01 E5 +T 18 03 00 00 6C 65 20 69 6E 20 66 69 6C 65 0D R 00 00 05 00 -T 23 03 00 00 C5 ED 43 8E 0D 22 90 0D 21 00 00 +T 23 03 00 00 0A 00 C3 13 01 CD 56 01 6E 6F 74 R 00 00 05 00 -T 2E 03 00 00 22 92 0D 2A 8A 0D 7D B4 20 1A CD +T 2E 03 00 00 20 61 6C 69 67 6E 65 64 0D 0A 00 R 00 00 05 00 -T 39 03 00 00 C4 03 7D B4 28 4F 22 8A 0D CD EC +T 39 03 00 00 C3 13 01 E5 C5 ED 43 F9 0D 22 FB R 00 00 05 00 -T 44 03 00 00 03 7B B2 28 B0 21 7A 07 22 8C 0D +T 44 03 00 00 0D 21 00 00 22 FD 0D 2A F5 0D 7D R 00 00 05 00 -T 4F 03 00 00 CD AB 04 2A 8A 0D ED 5B 8E 0D CD +T 4F 03 00 00 B4 20 1A CD DE 03 7D B4 28 4F 22 R 00 00 05 00 -T 5A 03 00 00 4A 02 2A 8A 0D B7 ED 52 22 8A 0D +T 5A 03 00 00 F5 0D CD 06 04 7B B2 28 B0 21 E5 R 00 00 05 00 -T 65 03 00 00 2A 8E 0D B7 ED 52 22 8E 0D 2A 92 +T 65 03 00 00 07 22 F7 0D CD C5 04 2A F5 0D ED R 00 00 05 00 -T 70 03 00 00 0D 19 22 92 0D 4B 42 ED 5B 90 0D +T 70 03 00 00 5B F9 0D CD F3 01 2A F5 0D B7 ED R 00 00 05 00 -T 7B 03 00 00 2A 8C 0D ED B0 22 8C 0D ED 53 90 +T 7B 03 00 00 52 22 F5 0D 2A F9 0D B7 ED 52 22 R 00 00 05 00 -T 86 03 00 00 0D 2A 8E 0D 7D B4 20 AA 2A 92 0D +T 86 03 00 00 F9 0D 2A FD 0D 19 22 FD 0D 4B 42 R 00 00 05 00 -T 91 03 00 00 4D 44 D1 B7 ED 52 E1 C9 21 3A 07 +T 91 03 00 00 ED 5B FB 0D 2A F7 0D ED B0 22 F7 R 00 00 05 00 -T 9C 03 00 00 CD 5F 04 21 00 00 22 8A 0D 2A 42 +T 9C 03 00 00 0D ED 53 FB 0D 2A F9 0D 7D B4 20 R 00 00 05 00 -T A7 03 00 00 07 22 30 07 2A 44 07 22 32 07 21 +T A7 03 00 00 AA 2A FD 0D 4D 44 D1 B7 ED 52 E1 R 00 00 05 00 -T B2 03 00 00 52 07 22 34 07 21 7A 0B 22 36 07 +T B2 03 00 00 C9 21 A5 07 CD 79 04 21 00 00 22 R 00 00 05 00 -T BD 03 00 00 21 7A 0D 22 38 07 C9 2A 30 07 ED +T BD 03 00 00 F5 0D 2A AD 07 22 9B 07 2A AF 07 R 00 00 05 00 -T C8 03 00 00 5B 32 07 01 00 02 B7 ED 42 EB 06 +T C8 03 00 00 22 9D 07 21 BD 07 22 9F 07 21 E5 R 00 00 05 00 -T D3 03 00 00 00 ED 42 EB 38 0B 22 30 07 ED 53 +T D3 03 00 00 0B 22 A1 07 21 E5 0D 22 A3 07 C9 R 00 00 05 00 -T DE 03 00 00 32 07 21 00 02 C9 2A 30 07 ED 43 +T DE 03 00 00 2A 9B 07 ED 5B 9D 07 01 00 02 B7 R 00 00 05 00 -T E9 03 00 00 30 07 C9 2A 34 07 11 76 07 B7 ED +T E9 03 00 00 ED 42 EB 06 00 ED 42 EB 38 0B 22 R 00 00 05 00 -T F4 03 00 00 52 30 0B 2A 34 07 5E 23 56 23 22 +T F4 03 00 00 9B 07 ED 53 9D 07 21 00 02 C9 2A R 00 00 05 00 -T FF 03 00 00 34 07 C9 2A 36 07 11 7A 0B B7 ED +T FF 03 00 00 9B 07 ED 43 9B 07 C9 2A 9F 07 11 R 00 00 05 00 -T 0A 04 00 00 52 38 13 2A 34 07 5E 23 56 23 22 +T 0A 04 00 00 E1 07 B7 ED 52 30 0B 2A 9F 07 5E R 00 00 05 00 -T 15 04 00 00 34 07 21 7A 09 22 36 07 CD AB 04 +T 15 04 00 00 23 56 23 22 9F 07 C9 2A A1 07 11 R 00 00 05 00 -T 20 04 00 00 2A 34 07 11 79 07 B7 ED 52 30 0B +T 20 04 00 00 E5 0B B7 ED 52 38 13 2A 9F 07 5E R 00 00 05 00 -T 2B 04 00 00 2A 36 07 5E 23 56 23 22 36 07 C9 +T 2B 04 00 00 23 56 23 22 9F 07 21 E5 09 22 A1 R 00 00 05 00 -T 36 04 00 00 2A 38 07 11 7A 0D B7 ED 52 38 13 +T 36 04 00 00 07 CD C5 04 2A 9F 07 11 E4 07 B7 R 00 00 05 00 -T 41 04 00 00 2A 36 07 5E 23 56 23 22 36 07 21 +T 41 04 00 00 ED 52 30 0B 2A A1 07 5E 23 56 23 R 00 00 05 00 -T 4C 04 00 00 7A 0B 22 38 07 CD AB 04 2A 38 07 +T 4C 04 00 00 22 A1 07 C9 2A A3 07 11 E5 0D B7 R 00 00 05 00 -T 57 04 00 00 5E 23 56 23 22 38 07 C9 E5 7B E6 +T 57 04 00 00 ED 52 38 13 2A A1 07 5E 23 56 23 R 00 00 05 00 -T 62 04 00 00 07 06 03 CB 3A CB 1B 10 FA 2A 2A +T 62 04 00 00 22 A1 07 21 E5 0B 22 A3 07 CD C5 R 00 00 05 00 -T 6D 04 00 00 07 37 ED 52 38 1A 2A 28 07 19 EB +T 6D 04 00 00 04 2A A3 07 5E 23 56 23 22 A3 07 R 00 00 05 00 -T 78 04 00 00 21 7A 07 F5 E5 CD AB 04 E1 D1 01 +T 78 04 00 00 C9 E5 7B E6 07 06 03 CB 3A CB 1B R 00 00 05 00 -T 83 04 00 00 40 00 59 ED 5C 19 D1 ED B0 C9 CD +T 83 04 00 00 10 FA 2A 95 07 37 ED 52 38 1A 2A R 00 00 05 00 -T 8E 04 00 00 D2 01 62 61 64 20 69 6E 6F 64 65 +T 8E 04 00 00 93 07 19 EB 21 E5 07 F5 E5 CD C5 R 00 00 05 00 -T 99 04 00 00 3A 20 00 C6 30 CD 9E 05 CD CC 05 +T 99 04 00 00 04 E1 D1 01 40 00 59 ED 5C 19 D1 R 00 00 05 00 -T A4 04 00 00 2C 20 00 EB C3 89 01 E5 CD C5 04 +T A4 04 00 00 ED B0 C9 CD 56 01 62 61 64 20 69 R 00 00 05 00 -T AF 04 00 00 E5 FD E1 57 E1 1E 03 C3 DB 05 E5 +T AF 04 00 00 6E 6F 64 65 3A 20 00 C6 30 CD 09 R 00 00 05 00 -T BA 04 00 00 CD C5 04 FD E1 16 03 5F C3 DB 05 +T BA 04 00 00 06 CD 37 06 2C 20 00 EB C3 0D 01 R 00 00 05 00 -T C5 04 00 00 21 00 06 37 ED 52 38 1D 01 00 02 +T C5 04 00 00 E5 CD DF 04 E5 FD E1 57 E1 1E 03 R 00 00 05 00 -T D0 04 00 00 21 00 02 19 7C 65 69 29 8F C9 7E +T D0 04 00 00 C3 46 06 E5 CD DF 04 FD E1 16 03 R 00 00 05 00 -T DB 04 00 00 23 56 23 CB 3A 1F CB 3A 1F CB 3A +T DB 04 00 00 5F C3 46 06 21 00 06 37 ED 52 38 R 00 00 05 00 -T E6 04 00 00 1F C6 3C C9 CD D2 01 62 61 64 20 +T E6 04 00 00 1D 01 00 02 21 00 02 19 7C 65 69 R 00 00 05 00 -T F1 04 00 00 62 6C 6F 63 6B 3A 20 00 EB C3 89 +T F1 04 00 00 29 8F C9 7E 23 56 23 CB 3A 1F CB R 00 00 05 00 -T FC 04 00 00 01 21 16 07 CD 37 F0 C8 CD D2 01 +T FC 04 00 00 3A 1F CB 3A 1F C6 31 C9 CD 56 01 R 00 00 05 00 -T 07 05 00 00 6C 6F 61 64 69 6E 67 20 41 3A 4B +T 07 05 00 00 62 61 64 20 62 6C 6F 63 6B 3A 20 R 00 00 05 00 -T 12 05 00 00 45 52 4E 45 4C 2E 42 49 4E 0D 0A +T 12 05 00 00 00 EB C3 0D 01 01 80 10 21 15 0E R 00 00 05 00 -T 1D 05 00 00 00 3E 31 32 F7 06 ED 5B 26 07 B7 +T 1D 05 00 00 18 0C 19 CD F4 04 1E 04 02 03 3C R 00 00 05 00 -T 28 05 00 00 ED 52 20 23 19 22 24 07 7D B4 20 +T 28 05 00 00 1D 20 FA ED 5B 13 0E B7 ED 52 38 R 00 00 05 00 -T 33 05 00 00 04 21 23 07 34 21 00 40 19 22 26 +T 33 05 00 00 EB C9 ED 5B 11 0E 2A 40 07 19 22 R 00 00 05 00 -T 3E 05 00 00 07 21 22 07 34 21 16 07 CD 37 F0 +T 3E 05 00 00 40 07 21 44 07 CD 65 05 2A 42 07 R 00 00 05 00 -T 49 05 00 00 20 D8 21 22 07 35 CD 2C 02 FD 21 +T 49 05 00 00 19 22 42 07 21 64 07 CD 65 05 21 R 00 00 05 00 -T 54 05 00 00 00 00 21 94 0D 11 03 0C 01 14 00 +T 54 05 00 00 3E 07 01 33 00 ED B0 C9 79 83 2B R 00 00 05 00 -T 5F 05 00 00 CD DB 05 CD 40 01 CD 5D 01 CD 51 +T 5F 05 00 00 77 78 8A 23 77 23 4E 23 46 79 B0 R 00 00 05 00 -T 6A 05 00 00 02 D5 FD E1 11 00 0C 6B 63 CD DB +T 6A 05 00 00 20 F0 C9 21 81 07 CD 37 F0 C8 CD R 00 00 05 00 -T 75 05 00 00 05 D5 CD 59 02 21 00 C0 19 D1 CD +T 75 05 00 00 56 01 6C 6F 61 64 69 6E 67 20 41 R 00 00 05 00 -T 80 05 00 00 DB 05 CD 62 02 D4 3F 02 CD 0C 02 +T 80 05 00 00 3A 4B 45 52 4E 45 4C 2E 42 49 4E R 00 00 05 00 -T 8B 05 00 00 3A 22 07 3C 47 21 80 80 3E BC 77 +T 8B 05 00 00 0D 0A 00 3E 31 32 62 07 ED 5B 91 R 00 00 05 00 -T 96 05 00 00 23 C6 04 10 FA C3 EC 00 F5 ED 38 +T 96 05 00 00 07 B7 ED 52 20 23 19 22 8F 07 7D R 00 00 05 00 -T A1 05 00 00 05 E6 02 28 F9 F1 ED 39 07 C9 3E +T A1 05 00 00 B4 20 04 21 8E 07 34 21 00 40 19 R 00 00 05 00 -T AC 05 00 00 0D CD 9E 05 3E 0A 18 EA 7C CD B9 +T AC 05 00 00 22 91 07 21 8D 07 34 21 81 07 CD R 00 00 05 00 -T B7 05 00 00 05 7D F5 0F 0F 0F 0F CD C2 05 F1 +T B7 05 00 00 37 F0 20 D8 21 8D 07 35 CD B0 01 R 00 00 05 00 -T C2 05 00 00 E6 0F C6 90 27 CE 40 27 18 D2 E3 +T C2 05 00 00 FD 21 00 00 21 FF 0D 11 03 0C 01 R 00 00 05 00 -T CD 05 00 00 F5 7E 23 B7 28 05 CD 9E 05 18 F6 +T CD 05 00 00 14 00 CD 46 06 CD C2 00 CD DF 00 R 00 00 05 00 -T D8 05 00 00 F1 E3 C9 7B FE 04 D2 59 06 79 E6 +T D8 05 00 00 CD FA 01 D5 FD E1 11 00 0C 6B 63 R 00 00 05 00 -T E3 05 00 00 1F C5 4F 06 00 CD 2B 06 0C 0D 28 +T E3 05 00 00 CD 46 06 D5 CD 02 02 EB D1 CD 46 R 00 00 05 00 -T EE 05 00 00 11 ED 38 30 EE 50 ED 39 30 FD 09 +T EE 05 00 00 06 CD E4 01 CD 90 01 3A 8D 07 3C R 00 00 05 00 -T F9 05 00 00 DC 55 06 09 DC 57 06 C1 3E 05 CB +T F9 05 00 00 07 07 47 21 80 10 3E B1 77 23 3C R 00 00 05 00 -T 04 06 00 00 38 CB 19 3D 20 F9 18 1A C5 01 20 +T 04 06 00 00 10 FB C3 6D 00 F5 ED 38 05 E6 02 R 00 00 05 00 -T 0F 06 00 00 00 ED 09 26 ED 38 30 EE 50 ED 39 +T 0F 06 00 00 28 F9 F1 ED 39 07 C9 3E 0D CD 09 R 00 00 05 00 -T 1A 06 00 00 30 FD 09 DC 55 06 09 DC 57 06 C1 +T 1A 06 00 00 06 3E 0A 18 EA 7C CD 24 06 7D F5 R 00 00 05 00 -T 25 06 00 00 0B 78 B1 20 E2 C9 ED 09 26 ED 01 +T 25 06 00 00 0F 0F 0F 0F CD 2D 06 F1 E6 0F C6 R 00 00 05 00 -T 30 06 00 00 27 18 05 3E 01 ED 39 26 E5 FD E5 +T 30 06 00 00 90 27 CE 40 27 18 D2 E3 F5 7E 23 R 00 00 05 00 -T 3B 06 00 00 ED 29 23 ED 21 24 ED 19 25 E1 ED +T 3B 06 00 00 B7 28 05 CD 09 06 18 F6 F1 E3 C9 R 00 00 05 00 -T 46 06 00 00 29 20 ED 21 21 ED 11 22 E1 3E 02 +T 46 06 00 00 7B FE 04 D2 C4 06 79 E6 1F C5 4F R 00 00 05 00 -T 51 06 00 00 ED 39 31 C9 14 C9 1C C9 C5 AF ED +T 51 06 00 00 06 00 CD 96 06 0C 0D 28 11 ED 38 R 00 00 05 00 -T 5C 06 00 00 39 26 ED 39 27 3E 04 CB 38 CB 19 +T 5C 06 00 00 30 EE 50 ED 39 30 FD 09 DC C0 06 R 00 00 05 00 -T 67 06 00 00 3D 20 F9 78 B1 28 0D C5 01 10 00 +T 67 06 00 00 09 DC C2 06 C1 3E 05 CB 38 CB 19 R 00 00 05 00 -T 72 06 00 00 CD 83 06 C1 0B 78 B1 20 F3 C1 47 +T 72 06 00 00 3D 20 F9 18 1A C5 01 20 00 ED 09 R 00 00 05 00 -T 7D 06 00 00 79 E6 0F 28 20 4F ED 30 26 CC 33 +T 7D 06 00 00 26 ED 38 30 EE 50 ED 39 30 FD 09 R 00 00 05 00 -T 88 06 00 00 06 FD 09 DC 55 06 09 DC 57 06 41 +T 88 06 00 00 DC C0 06 09 DC C2 06 C1 0B 78 B1 R 00 00 05 00 -T 93 06 00 00 0E 01 ED 38 30 EE 50 ED 39 30 ED +T 93 06 00 00 20 E2 C9 ED 09 26 ED 01 27 18 05 R 00 00 05 00 -T 9E 06 00 00 09 26 10 F8 C9 3E 74 ED 39 00 ED +T 9E 06 00 00 3E 01 ED 39 26 E5 FD E5 ED 29 23 R 00 00 05 00 -T A9 06 00 00 39 01 3E 22 ED 39 02 ED 39 03 97 +T A9 06 00 00 ED 21 24 ED 19 25 E1 ED 29 20 ED R 00 00 05 00 -T B4 06 00 00 ED 39 04 ED 39 05 ED 30 08 ED 30 +T B4 06 00 00 21 21 ED 11 22 E1 3E 02 ED 39 31 R 00 00 05 00 -T BF 06 00 00 09 ED 39 27 ED 39 2F ED 39 29 ED +T BF 06 00 00 C9 14 C9 1C C9 C5 AF ED 39 26 ED R 00 00 05 00 -T CA 06 00 00 39 2A ED 39 2B ED 39 2C C9 02 00 +T CA 06 00 00 39 27 3E 04 CB 38 CB 19 3D 20 F9 R 00 00 05 00 -T D5 06 00 00 D3 FF F3 FF D9 FF EA FF 00 00 2F +T D5 06 00 00 78 B1 28 0D C5 01 10 00 CD EE 06 R 00 00 05 00 -T E0 06 00 00 62 6F 6F 74 2F 6B 65 72 6E 65 6C +T E0 06 00 00 C1 0B 78 B1 20 F3 C1 47 79 E6 0F R 00 00 05 00 -T EB 06 00 00 2E 62 69 6E 00 72 6F 6F 74 3D 68 +T EB 06 00 00 28 20 4F ED 30 26 CC 9E 06 FD 09 R 00 00 05 00 -T F6 06 00 00 64 30 00 F7 FF 00 00 53 4E 3D 30 +T F6 06 00 00 DC C0 06 09 DC C2 06 41 0E 01 ED R 00 00 05 00 -T 01 07 00 00 30 30 30 30 00 62 6F 6F 74 00 6B +T 01 07 00 00 38 30 EE 50 ED 39 30 ED 09 26 10 R 00 00 05 00 -T 0C 07 00 00 65 72 6E 65 6C 2E 62 69 6E 00 01 +T 0C 07 00 00 F8 C9 3E 74 ED 39 00 ED 39 01 3E R 00 00 05 00 -T 17 07 00 00 4B 45 52 4E 45 4C 20 20 42 49 4E +T 17 07 00 00 22 ED 39 02 ED 39 03 97 ED 39 04 R 00 00 05 00 -T 22 07 00 00 00 0C 00 00 00 40 1A 1A 1A 1A 1A +T 22 07 00 00 ED 39 05 ED 30 08 ED 30 09 ED 39 R 00 00 05 00 -T 2D 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A +T 2D 07 00 00 27 ED 39 2F ED 39 29 ED 39 2A ED R 00 00 05 00 -T 38 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A +T 38 07 00 00 39 2B ED 39 2C C9 02 00 06 00 26 R 00 00 05 00 -T 43 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A +T 43 07 00 00 00 0C 00 1D 00 00 00 2F 62 6F 6F R 00 00 05 00 -T 4E 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A +T 4E 07 00 00 74 2F 6B 65 72 6E 65 6C 2E 62 69 R 00 00 05 00 -T 59 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A +T 59 07 00 00 6E 00 72 6F 6F 74 3D 68 64 30 00 R 00 00 05 00 -T 64 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A +T 64 07 00 00 2A 00 00 00 53 4E 3D 30 30 30 30 R 00 00 05 00 -T 6F 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A +T 6F 07 00 00 30 00 62 6F 6F 74 00 6B 65 72 6E R 00 00 05 00 -T 7A 07 00 00 1A 1A 1A 1A 1A 1A 01 00 2E 00 00 +T 7A 07 00 00 65 6C 2E 62 69 6E 00 01 4B 45 52 R 00 00 05 00 -T 85 07 00 00 00 00 00 00 00 00 00 00 00 00 00 +T 85 07 00 00 4E 45 4C 20 20 42 49 4E 00 0C 00 R 00 00 05 00 -T 90 07 00 00 01 00 2E 2E 00 00 00 00 00 00 00 +T 90 07 00 00 00 00 40 1A 1A 1A 1A 1A 1A 1A 1A R 00 00 05 00 -T 9B 07 00 00 00 00 00 00 00 00 00 00 00 00 00 +T 9B 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A R 00 00 05 00 -T A6 07 00 00 00 00 00 00 00 00 00 00 00 00 00 +T A6 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A R 00 00 05 00 -T B1 07 00 00 00 00 00 00 00 00 00 00 00 00 00 +T B1 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A R 00 00 05 00 -T BC 07 00 00 00 00 00 00 00 00 00 00 00 00 00 +T BC 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A R 00 00 05 00 -T C7 07 00 00 00 00 00 00 00 00 00 00 00 00 00 +T C7 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A R 00 00 05 00 -T D2 07 00 00 00 00 00 00 00 00 00 00 00 00 00 +T D2 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A R 00 00 05 00 -T DD 07 00 00 00 00 00 00 00 00 00 00 00 00 00 +T DD 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A R 00 00 05 00 -T E8 07 00 00 00 00 00 00 00 00 00 00 00 00 00 +T E8 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A R 00 00 05 00 -T F3 07 00 00 00 00 00 00 00 00 00 00 00 00 00 +T F3 07 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A R 00 00 05 00 -T FE 07 00 00 00 00 00 00 00 00 00 00 00 00 00 +T FE 07 00 00 1A 1A 01 00 2E 00 00 00 00 00 00 R 00 00 05 00 -T 09 08 00 00 00 00 00 00 00 00 00 00 00 00 00 +T 09 08 00 00 00 00 00 00 00 00 00 01 00 2E 2E R 00 00 05 00 T 14 08 00 00 00 00 00 00 00 00 00 00 00 00 00 R 00 00 05 00 @@ -2071,5 +2070,29 @@ T 69 09 00 00 00 00 00 00 00 00 00 00 00 00 00 R 00 00 05 00 T 74 09 00 00 00 00 00 00 00 00 00 00 00 00 00 R 00 00 05 00 -T 7F 09 00 00 00 00 00 00 00 00 +T 7F 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 8A 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 95 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T A0 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T AB 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T B6 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T C1 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T CC 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T D7 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T E2 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T ED 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T F8 09 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 03 0A 00 00 00 00 R 00 00 05 00 diff --git a/src/fsutil/mkfs.rst b/src/fsutil/mkfs.rst new file mode 100644 index 00000000..edc4f24b --- /dev/null +++ b/src/fsutil/mkfs.rst @@ -0,0 +1,4282 @@ + 1 NAME mkfs(17) + 2 RSEG CODE(0) + 3 RSEG CSTR(0) + 4 RSEG UDATA0(0) + 5 RSEG IDATA0(0) + 6 RSEG CDATA0(0) + 7 PUBLIC _fmt + 8 PUBLIC _immov + 9 PUBLIC _quick + 10 EXTERN _read + 11 PUBLIC _verb + 12 EXTERN _write + 13 PUBLIC _yes + 14 EXTERN abort + 15 EXTERN atoi + 16 EXTERN bcopy + 17 EXTERN bfill + 18 PUBLIC bitmap_block + 19 PUBLIC bitmap_dump + 20 PUBLIC bitmap_final + 21 PUBLIC bitmap_immov + 22 PUBLIC bitmap_inode + 23 PUBLIC block_bitmap + 24 PUBLIC bootblock + 25 EXTERN bzero + 26 EXTERN close + 27 PUBLIC da_read + 28 PUBLIC da_write + 29 PUBLIC daread + 30 PUBLIC dev + 31 PUBLIC device_handle + 32 PUBLIC device_name + 33 PUBLIC dirbuf + 34 PUBLIC doformatting + 35 PUBLIC dwrite + 36 EXTERN errno + 37 EXTERN exit + 38 EXTERN fflush + 39 EXTERN fgets + 40 EXTERN fprintf + 41 EXTERN fputs + 42 PUBLIC immov_bitmap + 43 PUBLIC inode + 44 PUBLIC inode_bitmap + 45 EXTERN int_min + 46 EXTERN lseek + 47 PUBLIC main + 48 EXTERN malloc + 49 PUBLIC mkfs + 50 EXTERN open + 51 EXTERN perror + 52 EXTERN printf + 53 EXTERN stderr + 54 EXTERN stdin + 55 EXTERN stdout + 56 EXTERN strcpy + 57 PUBLIC yes + 58 PUBLIC zeroed + 59 EXTERN ?CL64180B_4_06_L00 + 60 EXTERN ?C_LSH_L01 + 61 EXTERN ?US_RSH_L02 + 62 EXTERN ?US_DIV_L02 + 63 EXTERN ?US_MOD_L02 + 64 EXTERN ?SS_CMP_L02 + 65 EXTERN ?L_LSH_L03 + 66 EXTERN ?SL_RSH_L03 + 67 EXTERN ?L_AND_L03 + 68 EXTERN ?SL_CMP_L03 + 69 EXTERN ?C_V_SWITCH_L06 + 70 EXTERN ?BANK_CALL_DIRECT_L08 + 71 EXTERN ?BANK_LEAVE_DIRECT_L08 + 72 EXTERN ?ENT_PARM_DIRECT_L09 + 73 EXTERN ?ENT_AUTO_DIRECT_L09 + 74 RSEG CODE + 00005094 75 daread: + 00005094 CD 46 81 76 CALL LWRD ?ENT_PARM_DIRECT_L09 + 00005097 21 A5 97 77 LD HL,?0002 + 0000509A E5 78 PUSH HL + 0000509B 4B 79 LD C,E + 0000509C 42 80 LD B,D + 0000509D ED 5B 8D 95 81 LD DE,(dev) + 000050A1 3E 00 82 LD A,BYTE3 da_read + 000050A3 21 0C 51 83 LD HL,LWRD da_read + 000050A6 CD 52 81 84 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000050A9 F1 85 POP AF + 000050AA 3E 02 86 LD A,2 + 000050AC AC 87 XOR H + 000050AD B5 88 OR L + 000050AE 28 1D 89 JR Z,?0004 + 000050B0 90 ?0003: + 000050B0 DD 6E 02 91 LD L,(IX+2) + 000050B3 DD 66 03 92 LD H,(IX+3) + 000050B6 E5 93 PUSH HL + 000050B7 21 F7 83 94 LD HL,?0005 + 000050BA E5 95 PUSH HL + 000050BB 3E 00 96 LD A,BYTE3 printf + 000050BD 21 DE 61 97 LD HL,LWRD printf + 000050C0 CD 52 81 98 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000050C3 F1 99 POP AF + 000050C4 F1 100 POP AF + 000050C5 3E 00 101 LD A,BYTE3 abort + 000050C7 21 F8 62 102 LD HL,LWRD abort + 000050CA CD 52 81 103 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000050CD 104 ?0004: + 000050CD 21 A5 97 105 LD HL,?0002 + 000050D0 C3 29 81 106 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000050D3 107 dwrite: + 000050D3 CD 46 81 108 CALL LWRD ?ENT_PARM_DIRECT_L09 + 000050D6 C5 109 PUSH BC + 000050D7 4B 110 LD C,E + 000050D8 42 111 LD B,D + 000050D9 ED 5B 8D 95 112 LD DE,(dev) + 000050DD 3E 00 113 LD A,BYTE3 da_write + 000050DF 21 CF 51 114 LD HL,LWRD da_write + 000050E2 CD 52 81 115 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000050E5 F1 116 POP AF + 000050E6 3E 02 117 LD A,2 + 000050E8 AC 118 XOR H + 000050E9 B5 119 OR L + 000050EA 28 1D 120 JR Z,?0007 + 000050EC 121 ?0006: + 000050EC DD 6E 02 122 LD L,(IX+2) + 000050EF DD 66 03 123 LD H,(IX+3) + 000050F2 E5 124 PUSH HL + 000050F3 21 11 84 125 LD HL,?0008 + 000050F6 E5 126 PUSH HL + 000050F7 3E 00 127 LD A,BYTE3 printf + 000050F9 21 DE 61 128 LD HL,LWRD printf + 000050FC CD 52 81 129 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000050FF F1 130 POP AF + 00005100 F1 131 POP AF + 00005101 3E 00 132 LD A,BYTE3 abort + 00005103 21 F8 62 133 LD HL,LWRD abort + 00005106 CD 52 81 134 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005109 135 ?0007: + 00005109 C3 29 81 136 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 0000510C 137 da_read: + 0000510C CD 46 81 138 CALL LWRD ?ENT_PARM_DIRECT_L09 + 0000510F 21 00 00 139 LD HL,0 + 00005112 E5 140 PUSH HL + 00005113 69 141 LD L,C + 00005114 60 142 LD H,B + 00005115 01 00 00 143 LD BC,0 + 00005118 3E 09 144 LD A,9 + 0000511A CD 16 82 145 CALL LWRD ?L_LSH_L03 + 0000511D C5 146 PUSH BC + 0000511E E5 147 PUSH HL + 0000511F ED 5B 8B 91 148 LD DE,(device_handle) + 00005123 3E 00 149 LD A,BYTE3 lseek + 00005125 21 0D 62 150 LD HL,LWRD lseek + 00005128 CD 52 81 151 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000512B F1 152 POP AF + 0000512C F1 153 POP AF + 0000512D F1 154 POP AF + 0000512E CB 78 155 BIT 7,B + 00005130 28 2E 156 JR Z,?0010 + 00005132 157 ?0009: + 00005132 21 2C 84 158 LD HL,?0011 + 00005135 E5 159 PUSH HL + 00005136 3E 00 160 LD A,BYTE3 printf + 00005138 21 DE 61 161 LD HL,LWRD printf + 0000513B CD 52 81 162 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000513E F1 163 POP AF + 0000513F 11 48 90 164 LD DE,stdout + 00005142 3E 00 165 LD A,BYTE3 fflush + 00005144 21 AC 5F 166 LD HL,LWRD fflush + 00005147 CD 52 81 167 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000514A 11 8D 91 168 LD DE,device_name + 0000514D 3E 00 169 LD A,BYTE3 perror + 0000514F 21 6A 64 170 LD HL,LWRD perror + 00005152 CD 52 81 171 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005155 11 01 00 172 LD DE,1 + 00005158 3E 00 173 LD A,BYTE3 exit + 0000515A 21 7F 71 174 LD HL,LWRD exit + 0000515D CD 52 81 175 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005160 176 ?0010: + 00005160 21 00 02 177 LD HL,512 + 00005163 E5 178 PUSH HL + 00005164 DD 4E 0A 179 LD C,(IX+10) + 00005167 DD 46 0B 180 LD B,(IX+11) + 0000516A ED 5B 8B 91 181 LD DE,(device_handle) + 0000516E 3E 00 182 LD A,BYTE3 _read + 00005170 21 AF 71 183 LD HL,LWRD _read + 00005173 CD 52 81 184 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005176 F1 185 POP AF + 00005177 3E 02 186 LD A,2 + 00005179 AC 187 XOR H + 0000517A B5 188 OR L + 0000517B 28 4C 189 JR Z,?0013 + 0000517D 190 ?0012: + 0000517D 2A 86 91 191 LD HL,(errno) + 00005180 7D 192 LD A,L + 00005181 B4 193 OR H + 00005182 20 17 194 JR NZ,?0015 + 00005184 195 ?0014: + 00005184 21 00 02 196 LD HL,512 + 00005187 E5 197 PUSH HL + 00005188 0E AA 198 LD C,170 + 0000518A DD 5E 0A 199 LD E,(IX+10) + 0000518D DD 56 0B 200 LD D,(IX+11) + 00005190 3E 00 201 LD A,BYTE3 bfill + 00005192 21 11 5F 202 LD HL,LWRD bfill + 00005195 CD 52 81 203 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005198 E1 204 POP HL + 00005199 18 2E 205 JR ?0016 + 0000519B 206 ?0015: + 0000519B 21 39 84 207 LD HL,?0017 + 0000519E E5 208 PUSH HL + 0000519F 3E 00 209 LD A,BYTE3 printf + 000051A1 21 DE 61 210 LD HL,LWRD printf + 000051A4 CD 52 81 211 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000051A7 F1 212 POP AF + 000051A8 11 48 90 213 LD DE,stdout + 000051AB 3E 00 214 LD A,BYTE3 fflush + 000051AD 21 AC 5F 215 LD HL,LWRD fflush + 000051B0 CD 52 81 216 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000051B3 11 8D 91 217 LD DE,device_name + 000051B6 3E 00 218 LD A,BYTE3 perror + 000051B8 21 6A 64 219 LD HL,LWRD perror + 000051BB CD 52 81 220 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000051BE 11 01 00 221 LD DE,1 + 000051C1 3E 00 222 LD A,BYTE3 exit + 000051C3 21 7F 71 223 LD HL,LWRD exit + 000051C6 CD 52 81 224 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000051C9 225 ?0016: + 000051C9 226 ?0013: + 000051C9 21 00 02 227 LD HL,512 + 000051CC C3 29 81 228 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000051CF 229 da_write: + 000051CF CD 46 81 230 CALL LWRD ?ENT_PARM_DIRECT_L09 + 000051D2 21 00 00 231 LD HL,0 + 000051D5 E5 232 PUSH HL + 000051D6 69 233 LD L,C + 000051D7 60 234 LD H,B + 000051D8 01 00 00 235 LD BC,0 + 000051DB 3E 09 236 LD A,9 + 000051DD CD 16 82 237 CALL LWRD ?L_LSH_L03 + 000051E0 C5 238 PUSH BC + 000051E1 E5 239 PUSH HL + 000051E2 ED 5B 8B 91 240 LD DE,(device_handle) + 000051E6 3E 00 241 LD A,BYTE3 lseek + 000051E8 21 0D 62 242 LD HL,LWRD lseek + 000051EB CD 52 81 243 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000051EE F1 244 POP AF + 000051EF F1 245 POP AF + 000051F0 F1 246 POP AF + 000051F1 CB 78 247 BIT 7,B + 000051F3 28 2E 248 JR Z,?0019 + 000051F5 249 ?0018: + 000051F5 21 2C 84 250 LD HL,?0011 + 000051F8 E5 251 PUSH HL + 000051F9 3E 00 252 LD A,BYTE3 printf + 000051FB 21 DE 61 253 LD HL,LWRD printf + 000051FE CD 52 81 254 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005201 F1 255 POP AF + 00005202 11 48 90 256 LD DE,stdout + 00005205 3E 00 257 LD A,BYTE3 fflush + 00005207 21 AC 5F 258 LD HL,LWRD fflush + 0000520A CD 52 81 259 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000520D 11 8D 91 260 LD DE,device_name + 00005210 3E 00 261 LD A,BYTE3 perror + 00005212 21 6A 64 262 LD HL,LWRD perror + 00005215 CD 52 81 263 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005218 11 01 00 264 LD DE,1 + 0000521B 3E 00 265 LD A,BYTE3 exit + 0000521D 21 7F 71 266 LD HL,LWRD exit + 00005220 CD 52 81 267 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005223 268 ?0019: + 00005223 21 00 02 269 LD HL,512 + 00005226 E5 270 PUSH HL + 00005227 DD 4E 0A 271 LD C,(IX+10) + 0000522A DD 46 0B 272 LD B,(IX+11) + 0000522D ED 5B 8B 91 273 LD DE,(device_handle) + 00005231 3E 00 274 LD A,BYTE3 _write + 00005233 21 BF 61 275 LD HL,LWRD _write + 00005236 CD 52 81 276 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005239 F1 277 POP AF + 0000523A 3E 02 278 LD A,2 + 0000523C AC 279 XOR H + 0000523D B5 280 OR L + 0000523E 28 2E 281 JR Z,?0021 + 00005240 282 ?0020: + 00005240 21 46 84 283 LD HL,?0022 + 00005243 E5 284 PUSH HL + 00005244 3E 00 285 LD A,BYTE3 printf + 00005246 21 DE 61 286 LD HL,LWRD printf + 00005249 CD 52 81 287 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000524C F1 288 POP AF + 0000524D 11 48 90 289 LD DE,stdout + 00005250 3E 00 290 LD A,BYTE3 fflush + 00005252 21 AC 5F 291 LD HL,LWRD fflush + 00005255 CD 52 81 292 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005258 11 8D 91 293 LD DE,device_name + 0000525B 3E 00 294 LD A,BYTE3 perror + 0000525D 21 6A 64 295 LD HL,LWRD perror + 00005260 CD 52 81 296 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005263 11 01 00 297 LD DE,1 + 00005266 3E 00 298 LD A,BYTE3 exit + 00005268 21 7F 71 299 LD HL,LWRD exit + 0000526B CD 52 81 300 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000526E 301 ?0021: + 0000526E 21 00 02 302 LD HL,512 + 00005271 C3 29 81 303 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00005274 304 yes: + 00005274 CD AE 81 305 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 00005277 EC FF 306 DEFW 65516 + 00005279 01 48 90 307 LD BC,stdout + 0000527C DD 5E 02 308 LD E,(IX+2) + 0000527F DD 56 03 309 LD D,(IX+3) + 00005282 3E 00 310 LD A,BYTE3 fputs + 00005284 21 98 6E 311 LD HL,LWRD fputs + 00005287 CD 52 81 312 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000528A 11 48 90 313 LD DE,stdout + 0000528D 3E 00 314 LD A,BYTE3 fflush + 0000528F 21 AC 5F 315 LD HL,LWRD fflush + 00005292 CD 52 81 316 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005295 3A 2A 90 317 LD A,(_yes) + 00005298 B7 318 OR A + 00005299 28 10 319 JR Z,?0024 + 0000529B 320 ?0023: + 0000529B 01 48 90 321 LD BC,stdout + 0000529E 11 54 84 322 LD DE,?0025 + 000052A1 3E 00 323 LD A,BYTE3 fputs + 000052A3 21 98 6E 324 LD HL,LWRD fputs + 000052A6 CD 52 81 325 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000052A9 18 2D 326 JR ?0026 + 000052AB 327 ?0024: + 000052AB 21 30 90 328 LD HL,stdin + 000052AE E5 329 PUSH HL + 000052AF 01 14 00 330 LD BC,20 + 000052B2 21 02 00 331 LD HL,2 + 000052B5 39 332 ADD HL,SP + 000052B6 5D 333 LD E,L + 000052B7 54 334 LD D,H + 000052B8 3E 00 335 LD A,BYTE3 fgets + 000052BA 21 7B 63 336 LD HL,LWRD fgets + 000052BD CD 52 81 337 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000052C0 F1 338 POP AF + 000052C1 7D 339 LD A,L + 000052C2 B4 340 OR H + 000052C3 28 0E 341 JR Z,?0027 + 000052C5 DD 7E EC 342 LD A,(IX-20) + 000052C8 FE 79 343 CP 121 + 000052CA 28 0C 344 JR Z,?0028 + 000052CC DD 7E EC 345 LD A,(IX-20) + 000052CF FE 59 346 CP 89 + 000052D1 28 05 347 JR Z,?0028 + 000052D3 348 ?0032: + 000052D3 349 ?0031: + 000052D3 350 ?0029: + 000052D3 351 ?0030: + 000052D3 352 ?0027: + 000052D3 21 00 00 353 LD HL,0 + 000052D6 18 03 354 JR ?0033 + 000052D8 355 ?0028: + 000052D8 356 ?0026: + 000052D8 21 01 00 357 LD HL,1 + 000052DB 358 ?0033: + 000052DB C3 29 81 359 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000052DE 360 mkfs: + 000052DE CD AE 81 361 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 000052E1 DC FF 362 DEFW 65500 + 000052E3 3A 2C 90 363 LD A,(_verb) + 000052E6 B7 364 OR A + 000052E7 28 18 365 JR Z,?0035 + 000052E9 366 ?0034: + 000052E9 21 57 84 367 LD HL,?0036 + 000052EC E5 368 PUSH HL + 000052ED 3E 00 369 LD A,BYTE3 printf + 000052EF 21 DE 61 370 LD HL,LWRD printf + 000052F2 CD 52 81 371 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000052F5 F1 372 POP AF + 000052F6 11 48 90 373 LD DE,stdout + 000052F9 3E 00 374 LD A,BYTE3 fflush + 000052FB 21 AC 5F 375 LD HL,LWRD fflush + 000052FE CD 52 81 376 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005301 377 ?0035: + 00005301 AF 378 XOR A + 00005302 DD 77 DC 379 LD (IX-36),A + 00005305 DD 77 DD 380 LD (IX-35),A + 00005308 381 ?0038: + 00005308 01 00 08 382 LD BC,2048 + 0000530B DD 6E DC 383 LD L,(IX-36) + 0000530E DD 66 DD 384 LD H,(IX-35) + 00005311 A7 385 AND A + 00005312 ED 42 386 SBC HL,BC + 00005314 D2 A7 53 387 JP NC,?0037 + 00005317 388 ?0039: + 00005317 01 00 02 389 LD BC,512 + 0000531A DD 5E DC 390 LD E,(IX-36) + 0000531D DD 56 DD 391 LD D,(IX-35) + 00005320 21 00 08 392 LD HL,2048 + 00005323 A7 393 AND A + 00005324 ED 52 394 SBC HL,DE + 00005326 EB 395 EX DE,HL + 00005327 3E 00 396 LD A,BYTE3 int_min + 00005329 21 75 5F 397 LD HL,LWRD int_min + 0000532C CD 52 81 398 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000532F DD 75 DE 399 LD (IX-34),L + 00005332 DD 74 DF 400 LD (IX-33),H + 00005335 01 00 02 401 LD BC,512 + 00005338 A7 402 AND A + 00005339 ED 42 403 SBC HL,BC + 0000533B 30 1B 404 JR NC,?0042 + 0000533D 405 ?0041: + 0000533D 06 09 406 LD B,9 + 0000533F DD 5E DC 407 LD E,(IX-36) + 00005342 DD 56 DD 408 LD D,(IX-35) + 00005345 CD 1F 81 409 CALL LWRD ?US_RSH_L02 + 00005348 3E 00 410 LD A,BYTE3 daread + 0000534A 21 94 50 411 LD HL,LWRD daread + 0000534D CD 52 81 412 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005350 DD 75 FE 413 LD (IX-2),L + 00005353 DD 74 FF 414 LD (IX-1),H + 00005356 18 08 415 JR ?0043 + 00005358 416 ?0042: + 00005358 DD 36 FE 8D 417 LD (IX-2),LOW(zeroed) + 0000535C DD 36 FF 93 418 LD (IX-1),HIGH(zeroed) + 00005360 419 ?0043: + 00005360 DD 6E DE 420 LD L,(IX-34) + 00005363 DD 66 DF 421 LD H,(IX-33) + 00005366 E5 422 PUSH HL + 00005367 DD 4E FE 423 LD C,(IX-2) + 0000536A DD 46 FF 424 LD B,(IX-1) + 0000536D 21 29 86 425 LD HL,bootblock + 00005370 DD 5E DC 426 LD E,(IX-36) + 00005373 DD 56 DD 427 LD D,(IX-35) + 00005376 19 428 ADD HL,DE + 00005377 EB 429 EX DE,HL + 00005378 3E 00 430 LD A,BYTE3 bcopy + 0000537A 21 3D 5F 431 LD HL,LWRD bcopy + 0000537D CD 52 81 432 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005380 E1 433 POP HL + 00005381 DD 4E FE 434 LD C,(IX-2) + 00005384 DD 46 FF 435 LD B,(IX-1) + 00005387 C5 436 PUSH BC + 00005388 06 09 437 LD B,9 + 0000538A DD 5E DC 438 LD E,(IX-36) + 0000538D DD 56 DD 439 LD D,(IX-35) + 00005390 CD 1F 81 440 CALL LWRD ?US_RSH_L02 + 00005393 3E 00 441 LD A,BYTE3 dwrite + 00005395 21 D3 50 442 LD HL,LWRD dwrite + 00005398 C1 443 POP BC + 00005399 CD 52 81 444 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000539C 3E 02 445 LD A,2 + 0000539E DD 86 DD 446 ADD A,(IX-35) + 000053A1 DD 77 DD 447 LD (IX-35),A + 000053A4 C3 08 53 448 JP LWRD ?0038 + 000053A7 449 ?0037: + 000053A7 01 00 02 450 LD BC,512 + 000053AA 11 8D 93 451 LD DE,zeroed + 000053AD 3E 00 452 LD A,BYTE3 bzero + 000053AF 21 E7 5E 453 LD HL,LWRD bzero + 000053B2 CD 52 81 454 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000053B5 3A 2C 90 455 LD A,(_verb) + 000053B8 B7 456 OR A + 000053B9 28 18 457 JR Z,?0045 + 000053BB 458 ?0044: + 000053BB 21 6F 84 459 LD HL,?0046 + 000053BE E5 460 PUSH HL + 000053BF 3E 00 461 LD A,BYTE3 printf + 000053C1 21 DE 61 462 LD HL,LWRD printf + 000053C4 CD 52 81 463 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000053C7 F1 464 POP AF + 000053C8 11 48 90 465 LD DE,stdout + 000053CB 3E 00 466 LD A,BYTE3 fflush + 000053CD 21 AC 5F 467 LD HL,LWRD fflush + 000053D0 CD 52 81 468 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000053D3 469 ?0045: + 000053D3 3A 2B 90 470 LD A,(_quick) + 000053D6 B7 471 OR A + 000053D7 28 19 472 JR Z,?0048 + 000053D9 473 ?0047: + 000053D9 DD 6E 04 474 LD L,(IX+4) + 000053DC DD 66 05 475 LD H,(IX+5) + 000053DF DD 4E 0A 476 LD C,(IX+10) + 000053E2 DD 46 0B 477 LD B,(IX+11) + 000053E5 09 478 ADD HL,BC + 000053E6 01 05 00 479 LD BC,5 + 000053E9 09 480 ADD HL,BC + 000053EA DD 75 DE 481 LD (IX-34),L + 000053ED DD 74 DF 482 LD (IX-33),H + 000053F0 18 0C 483 JR ?0049 + 000053F2 484 ?0048: + 000053F2 DD 6E 02 485 LD L,(IX+2) + 000053F5 DD 66 03 486 LD H,(IX+3) + 000053F8 DD 75 DE 487 LD (IX-34),L + 000053FB DD 74 DF 488 LD (IX-33),H + 000053FE 489 ?0049: + 000053FE 21 05 00 490 LD HL,5 + 00005401 DD 4E 0A 491 LD C,(IX+10) + 00005404 DD 46 0B 492 LD B,(IX+11) + 00005407 09 493 ADD HL,BC + 00005408 DD 75 DC 494 LD (IX-36),L + 0000540B DD 74 DD 495 LD (IX-35),H + 0000540E 496 ?0051: + 0000540E DD 4E DE 497 LD C,(IX-34) + 00005411 DD 46 DF 498 LD B,(IX-33) + 00005414 DD 6E DC 499 LD L,(IX-36) + 00005417 DD 66 DD 500 LD H,(IX-35) + 0000541A A7 501 AND A + 0000541B ED 42 502 SBC HL,BC + 0000541D 30 51 503 JR NC,?0050 + 0000541F 504 ?0052: + 0000541F 3A 2C 90 505 LD A,(_verb) + 00005422 B7 506 OR A + 00005423 28 30 507 JR Z,?0054 + 00005425 01 09 00 508 LD BC,9 + 00005428 DD 5E DC 509 LD E,(IX-36) + 0000542B DD 56 DD 510 LD D,(IX-35) + 0000542E CD DE 81 511 CALL LWRD ?US_MOD_L02 + 00005431 7B 512 LD A,E + 00005432 B2 513 OR D + 00005433 20 20 514 JR NZ,?0054 + 00005435 515 ?0056: + 00005435 516 ?0055: + 00005435 517 ?0053: + 00005435 DD 6E DC 518 LD L,(IX-36) + 00005438 DD 66 DD 519 LD H,(IX-35) + 0000543B E5 520 PUSH HL + 0000543C 21 93 84 521 LD HL,?0057 + 0000543F E5 522 PUSH HL + 00005440 3E 00 523 LD A,BYTE3 printf + 00005442 21 DE 61 524 LD HL,LWRD printf + 00005445 CD 52 81 525 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005448 F1 526 POP AF + 00005449 F1 527 POP AF + 0000544A 11 48 90 528 LD DE,stdout + 0000544D 3E 00 529 LD A,BYTE3 fflush + 0000544F 21 AC 5F 530 LD HL,LWRD fflush + 00005452 CD 52 81 531 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005455 532 ?0054: + 00005455 01 8D 93 533 LD BC,zeroed + 00005458 DD 5E DC 534 LD E,(IX-36) + 0000545B DD 56 DD 535 LD D,(IX-35) + 0000545E 13 536 INC DE + 0000545F DD 73 DC 537 LD (IX-36),E + 00005462 DD 72 DD 538 LD (IX-35),D + 00005465 1B 539 DEC DE + 00005466 3E 00 540 LD A,BYTE3 dwrite + 00005468 21 D3 50 541 LD HL,LWRD dwrite + 0000546B CD 52 81 542 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000546E 18 9E 543 JR ?0051 + 00005470 544 ?0050: + 00005470 3A 2C 90 545 LD A,(_verb) + 00005473 B7 546 OR A + 00005474 28 27 547 JR Z,?0059 + 00005476 548 ?0058: + 00005476 DD 6E DC 549 LD L,(IX-36) + 00005479 DD 66 DD 550 LD H,(IX-35) + 0000547C 2B 551 DEC HL + 0000547D DD 75 DC 552 LD (IX-36),L + 00005480 DD 74 DD 553 LD (IX-35),H + 00005483 E5 554 PUSH HL + 00005484 21 9C 84 555 LD HL,?0060 + 00005487 E5 556 PUSH HL + 00005488 3E 00 557 LD A,BYTE3 printf + 0000548A 21 DE 61 558 LD HL,LWRD printf + 0000548D CD 52 81 559 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005490 F1 560 POP AF + 00005491 F1 561 POP AF + 00005492 11 48 90 562 LD DE,stdout + 00005495 3E 00 563 LD A,BYTE3 fflush + 00005497 21 AC 5F 564 LD HL,LWRD fflush + 0000549A CD 52 81 565 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000549D 566 ?0059: + 0000549D 3A 2C 90 567 LD A,(_verb) + 000054A0 B7 568 OR A + 000054A1 28 18 569 JR Z,?0062 + 000054A3 570 ?0061: + 000054A3 21 A5 84 571 LD HL,?0063 + 000054A6 E5 572 PUSH HL + 000054A7 3E 00 573 LD A,BYTE3 printf + 000054A9 21 DE 61 574 LD HL,LWRD printf + 000054AC CD 52 81 575 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000054AF F1 576 POP AF + 000054B0 11 48 90 577 LD DE,stdout + 000054B3 3E 00 578 LD A,BYTE3 fflush + 000054B5 21 AC 5F 579 LD HL,LWRD fflush + 000054B8 CD 52 81 580 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000054BB 581 ?0062: + 000054BB 01 1E 00 582 LD BC,30 + 000054BE 21 04 00 583 LD HL,4 + 000054C1 39 584 ADD HL,SP + 000054C2 5D 585 LD E,L + 000054C3 54 586 LD D,H + 000054C4 3E 00 587 LD A,BYTE3 bzero + 000054C6 21 E7 5E 588 LD HL,LWRD bzero + 000054C9 CD 52 81 589 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000054CC DD 36 E0 C6 590 LD (IX-32),198 + 000054D0 DD 36 E1 31 591 LD (IX-31),49 + 000054D4 21 05 00 592 LD HL,5 + 000054D7 DD 4E 0A 593 LD C,(IX+10) + 000054DA DD 46 0B 594 LD B,(IX+11) + 000054DD 09 595 ADD HL,BC + 000054DE DD 75 E2 596 LD (IX-30),L + 000054E1 DD 74 E3 597 LD (IX-29),H + 000054E4 DD 6E 04 598 LD L,(IX+4) + 000054E7 DD 66 05 599 LD H,(IX+5) + 000054EA DD 75 E4 600 LD (IX-28),L + 000054ED DD 74 E5 601 LD (IX-27),H + 000054F0 DD 6E 02 602 LD L,(IX+2) + 000054F3 DD 66 03 603 LD H,(IX+3) + 000054F6 DD 75 E6 604 LD (IX-26),L + 000054F9 DD 74 E7 605 LD (IX-25),H + 000054FC DD 6E 04 606 LD L,(IX+4) + 000054FF DD 66 05 607 LD H,(IX+5) + 00005502 29 608 ADD HL,HL + 00005503 29 609 ADD HL,HL + 00005504 29 610 ADD HL,HL + 00005505 11 FE FF 611 LD DE,65534 + 00005508 19 612 ADD HL,DE + 00005509 DD 75 EA 613 LD (IX-22),L + 0000550C DD 74 EB 614 LD (IX-21),H + 0000550F DD 6E 04 615 LD L,(IX+4) + 00005512 DD 66 05 616 LD H,(IX+5) + 00005515 09 617 ADD HL,BC + 00005516 01 06 00 618 LD BC,6 + 00005519 09 619 ADD HL,BC + 0000551A 4D 620 LD C,L + 0000551B 44 621 LD B,H + 0000551C DD 6E 02 622 LD L,(IX+2) + 0000551F DD 66 03 623 LD H,(IX+3) + 00005522 A7 624 AND A + 00005523 ED 42 625 SBC HL,BC + 00005525 DD 75 E8 626 LD (IX-24),L + 00005528 DD 74 E9 627 LD (IX-23),H + 0000552B 2A 8F 97 628 LD HL,(bitmap_inode) + 0000552E DD 75 F0 629 LD (IX-16),L + 00005531 DD 74 F1 630 LD (IX-15),H + 00005534 2A 93 97 631 LD HL,(bitmap_block) + 00005537 DD 75 F2 632 LD (IX-14),L + 0000553A DD 74 F3 633 LD (IX-13),H + 0000553D 2A 97 97 634 LD HL,(bitmap_immov) + 00005540 DD 75 F4 635 LD (IX-12),L + 00005543 DD 74 F5 636 LD (IX-11),H + 00005546 2A 9B 97 637 LD HL,(bitmap_final) + 00005549 DD 75 F6 638 LD (IX-10),L + 0000554C DD 74 F7 639 LD (IX-9),H + 0000554F AF 640 XOR A + 00005550 DD 77 DC 641 LD (IX-36),A + 00005553 DD 77 DD 642 LD (IX-35),A + 00005556 643 ?0065: + 00005556 DD 6E 04 644 LD L,(IX+4) + 00005559 DD 66 05 645 LD H,(IX+5) + 0000555C DD 4E 0A 646 LD C,(IX+10) + 0000555F DD 46 0B 647 LD B,(IX+11) + 00005562 09 648 ADD HL,BC + 00005563 01 06 00 649 LD BC,6 + 00005566 09 650 ADD HL,BC + 00005567 4D 651 LD C,L + 00005568 44 652 LD B,H + 00005569 DD 6E DC 653 LD L,(IX-36) + 0000556C DD 66 DD 654 LD H,(IX-35) + 0000556F A7 655 AND A + 00005570 ED 42 656 SBC HL,BC + 00005572 30 26 657 JR NC,?0064 + 00005574 658 ?0066: + 00005574 06 03 659 LD B,3 + 00005576 DD 5E DC 660 LD E,(IX-36) + 00005579 DD 56 DD 661 LD D,(IX-35) + 0000557C CD 1F 81 662 CALL LWRD ?US_RSH_L02 + 0000557F 2A A1 97 663 LD HL,(block_bitmap) + 00005582 19 664 ADD HL,DE + 00005583 DD 7E DC 665 LD A,(IX-36) + 00005586 E6 07 666 AND 7 + 00005588 47 667 LD B,A + 00005589 3E 01 668 LD A,1 + 0000558B CD E7 81 669 CALL LWRD ?C_LSH_L01 + 0000558E B6 670 OR (HL) + 0000558F 77 671 LD (HL),A + 00005590 DD 34 DC 672 INC (IX-36) + 00005593 20 03 673 JR NZ,?0153 + 00005595 DD 34 DD 674 INC (IX-35) + 00005598 675 ?0153: + 00005598 18 BC 676 JR ?0065 + 0000559A 677 ?0064: + 0000559A ED 4B 93 97 678 LD BC,(bitmap_block) + 0000559E 2A 97 97 679 LD HL,(bitmap_immov) + 000055A1 A7 680 AND A + 000055A2 ED 42 681 SBC HL,BC + 000055A4 29 682 ADD HL,HL + 000055A5 29 683 ADD HL,HL + 000055A6 29 684 ADD HL,HL + 000055A7 DD 75 DE 685 LD (IX-34),L + 000055AA DD 74 DF 686 LD (IX-33),H + 000055AD DD 6E 02 687 LD L,(IX+2) + 000055B0 DD 66 03 688 LD H,(IX+3) + 000055B3 DD 75 DC 689 LD (IX-36),L + 000055B6 DD 74 DD 690 LD (IX-35),H + 000055B9 691 ?0069: + 000055B9 DD 6E DE 692 LD L,(IX-34) + 000055BC DD 66 DF 693 LD H,(IX-33) + 000055BF DD 4E DC 694 LD C,(IX-36) + 000055C2 DD 46 DD 695 LD B,(IX-35) + 000055C5 A7 696 AND A + 000055C6 ED 42 697 SBC HL,BC + 000055C8 28 26 698 JR Z,?0068 + 000055CA 699 ?0070: + 000055CA 06 03 700 LD B,3 + 000055CC DD 5E DC 701 LD E,(IX-36) + 000055CF DD 56 DD 702 LD D,(IX-35) + 000055D2 CD 1F 81 703 CALL LWRD ?US_RSH_L02 + 000055D5 2A A1 97 704 LD HL,(block_bitmap) + 000055D8 19 705 ADD HL,DE + 000055D9 DD 7E DC 706 LD A,(IX-36) + 000055DC E6 07 707 AND 7 + 000055DE 47 708 LD B,A + 000055DF 3E 01 709 LD A,1 + 000055E1 CD E7 81 710 CALL LWRD ?C_LSH_L01 + 000055E4 B6 711 OR (HL) + 000055E5 77 712 LD (HL),A + 000055E6 DD 34 DC 713 INC (IX-36) + 000055E9 20 03 714 JR NZ,?0154 + 000055EB DD 34 DD 715 INC (IX-35) + 000055EE 716 ?0154: + 000055EE 18 C9 717 JR ?0069 + 000055F0 718 ?0068: + 000055F0 2A 99 97 719 LD HL,(bitmap_immov+2) + 000055F3 E5 720 PUSH HL + 000055F4 2A 97 97 721 LD HL,(bitmap_immov) + 000055F7 E5 722 PUSH HL + 000055F8 2A 95 97 723 LD HL,(bitmap_block+2) + 000055FB E5 724 PUSH HL + 000055FC 2A 93 97 725 LD HL,(bitmap_block) + 000055FF E5 726 PUSH HL + 00005600 ED 5B A1 97 727 LD DE,(block_bitmap) + 00005604 3E 00 728 LD A,BYTE3 bitmap_dump + 00005606 21 F1 5D 729 LD HL,LWRD bitmap_dump + 00005609 CD 52 81 730 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000560C E1 731 POP HL + 0000560D E1 732 POP HL + 0000560E E1 733 POP HL + 0000560F E1 734 POP HL + 00005610 3A 2D 90 735 LD A,(_immov) + 00005613 B7 736 OR A + 00005614 CA D8 56 737 JP Z,?0073 + 00005617 738 ?0072: + 00005617 AF 739 XOR A + 00005618 DD 77 DC 740 LD (IX-36),A + 0000561B DD 77 DD 741 LD (IX-35),A + 0000561E 742 ?0075: + 0000561E DD 6E 04 743 LD L,(IX+4) + 00005621 DD 66 05 744 LD H,(IX+5) + 00005624 DD 4E 0A 745 LD C,(IX+10) + 00005627 DD 46 0B 746 LD B,(IX+11) + 0000562A 09 747 ADD HL,BC + 0000562B 01 06 00 748 LD BC,6 + 0000562E 09 749 ADD HL,BC + 0000562F 4D 750 LD C,L + 00005630 44 751 LD B,H + 00005631 DD 6E DC 752 LD L,(IX-36) + 00005634 DD 66 DD 753 LD H,(IX-35) + 00005637 A7 754 AND A + 00005638 ED 42 755 SBC HL,BC + 0000563A 30 26 756 JR NC,?0074 + 0000563C 757 ?0076: + 0000563C 06 03 758 LD B,3 + 0000563E DD 5E DC 759 LD E,(IX-36) + 00005641 DD 56 DD 760 LD D,(IX-35) + 00005644 CD 1F 81 761 CALL LWRD ?US_RSH_L02 + 00005647 2A A3 97 762 LD HL,(immov_bitmap) + 0000564A 19 763 ADD HL,DE + 0000564B DD 7E DC 764 LD A,(IX-36) + 0000564E E6 07 765 AND 7 + 00005650 47 766 LD B,A + 00005651 3E 01 767 LD A,1 + 00005653 CD E7 81 768 CALL LWRD ?C_LSH_L01 + 00005656 B6 769 OR (HL) + 00005657 77 770 LD (HL),A + 00005658 DD 34 DC 771 INC (IX-36) + 0000565B 20 03 772 JR NZ,?0155 + 0000565D DD 34 DD 773 INC (IX-35) + 00005660 774 ?0155: + 00005660 18 BC 775 JR ?0075 + 00005662 776 ?0074: + 00005662 ED 4B 97 97 777 LD BC,(bitmap_immov) + 00005666 2A 9B 97 778 LD HL,(bitmap_final) + 00005669 A7 779 AND A + 0000566A ED 42 780 SBC HL,BC + 0000566C 29 781 ADD HL,HL + 0000566D 29 782 ADD HL,HL + 0000566E 29 783 ADD HL,HL + 0000566F DD 75 DE 784 LD (IX-34),L + 00005672 DD 74 DF 785 LD (IX-33),H + 00005675 DD 6E 02 786 LD L,(IX+2) + 00005678 DD 66 03 787 LD H,(IX+3) + 0000567B DD 75 DC 788 LD (IX-36),L + 0000567E DD 74 DD 789 LD (IX-35),H + 00005681 790 ?0079: + 00005681 DD 6E DE 791 LD L,(IX-34) + 00005684 DD 66 DF 792 LD H,(IX-33) + 00005687 DD 4E DC 793 LD C,(IX-36) + 0000568A DD 46 DD 794 LD B,(IX-35) + 0000568D A7 795 AND A + 0000568E ED 42 796 SBC HL,BC + 00005690 28 26 797 JR Z,?0078 + 00005692 798 ?0080: + 00005692 06 03 799 LD B,3 + 00005694 DD 5E DC 800 LD E,(IX-36) + 00005697 DD 56 DD 801 LD D,(IX-35) + 0000569A CD 1F 81 802 CALL LWRD ?US_RSH_L02 + 0000569D 2A A3 97 803 LD HL,(immov_bitmap) + 000056A0 19 804 ADD HL,DE + 000056A1 DD 7E DC 805 LD A,(IX-36) + 000056A4 E6 07 806 AND 7 + 000056A6 47 807 LD B,A + 000056A7 3E 01 808 LD A,1 + 000056A9 CD E7 81 809 CALL LWRD ?C_LSH_L01 + 000056AC B6 810 OR (HL) + 000056AD 77 811 LD (HL),A + 000056AE DD 34 DC 812 INC (IX-36) + 000056B1 20 03 813 JR NZ,?0156 + 000056B3 DD 34 DD 814 INC (IX-35) + 000056B6 815 ?0156: + 000056B6 18 C9 816 JR ?0079 + 000056B8 817 ?0078: + 000056B8 2A 9D 97 818 LD HL,(bitmap_final+2) + 000056BB E5 819 PUSH HL + 000056BC 2A 9B 97 820 LD HL,(bitmap_final) + 000056BF E5 821 PUSH HL + 000056C0 2A 99 97 822 LD HL,(bitmap_immov+2) + 000056C3 E5 823 PUSH HL + 000056C4 2A 97 97 824 LD HL,(bitmap_immov) + 000056C7 E5 825 PUSH HL + 000056C8 ED 5B A3 97 826 LD DE,(immov_bitmap) + 000056CC 3E 00 827 LD A,BYTE3 bitmap_dump + 000056CE 21 F1 5D 828 LD HL,LWRD bitmap_dump + 000056D1 CD 52 81 829 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000056D4 E1 830 POP HL + 000056D5 E1 831 POP HL + 000056D6 E1 832 POP HL + 000056D7 E1 833 POP HL + 000056D8 834 ?0073: + 000056D8 21 ED 41 835 LD HL,16877 + 000056DB 22 CF 95 836 LD (inode+64),HL + 000056DE 21 03 00 837 LD HL,3 + 000056E1 22 D1 95 838 LD (inode+66),HL + 000056E4 01 00 00 839 LD BC,0 + 000056E7 21 20 00 840 LD HL,32 + 000056EA 22 D7 95 841 LD (inode+72),HL + 000056ED ED 43 D9 95 842 LD (inode+74),BC + 000056F1 DD 6E 04 843 LD L,(IX+4) + 000056F4 DD 66 05 844 LD H,(IX+5) + 000056F7 DD 4E 0A 845 LD C,(IX+10) + 000056FA DD 46 0B 846 LD B,(IX+11) + 000056FD 09 847 ADD HL,BC + 000056FE 01 05 00 848 LD BC,5 + 00005701 09 849 ADD HL,BC + 00005702 22 E7 95 850 LD (inode+88),HL + 00005705 21 01 00 851 LD HL,1 + 00005708 22 91 95 852 LD (inode+2),HL + 0000570B 21 FF FF 853 LD HL,65535 + 0000570E 22 8F 95 854 LD (inode),HL + 00005711 2A 9F 97 855 LD HL,(inode_bitmap) + 00005714 7E 856 LD A,(HL) + 00005715 F6 01 857 OR 1 + 00005717 77 858 LD (HL),A + 00005718 2A 9F 97 859 LD HL,(inode_bitmap) + 0000571B 7E 860 LD A,(HL) + 0000571C F6 02 861 OR 2 + 0000571E 77 862 LD (HL),A + 0000571F ED 4B 8F 97 863 LD BC,(bitmap_inode) + 00005723 2A 93 97 864 LD HL,(bitmap_block) + 00005726 A7 865 AND A + 00005727 ED 42 866 SBC HL,BC + 00005729 29 867 ADD HL,HL + 0000572A 29 868 ADD HL,HL + 0000572B 29 869 ADD HL,HL + 0000572C DD 75 DE 870 LD (IX-34),L + 0000572F DD 74 DF 871 LD (IX-33),H + 00005732 DD 6E 04 872 LD L,(IX+4) + 00005735 DD 66 05 873 LD H,(IX+5) + 00005738 29 874 ADD HL,HL + 00005739 29 875 ADD HL,HL + 0000573A 29 876 ADD HL,HL + 0000573B DD 75 DC 877 LD (IX-36),L + 0000573E DD 74 DD 878 LD (IX-35),H + 00005741 879 ?0083: + 00005741 DD 6E DE 880 LD L,(IX-34) + 00005744 DD 66 DF 881 LD H,(IX-33) + 00005747 DD 4E DC 882 LD C,(IX-36) + 0000574A DD 46 DD 883 LD B,(IX-35) + 0000574D A7 884 AND A + 0000574E ED 42 885 SBC HL,BC + 00005750 28 26 886 JR Z,?0082 + 00005752 887 ?0084: + 00005752 06 03 888 LD B,3 + 00005754 DD 5E DC 889 LD E,(IX-36) + 00005757 DD 56 DD 890 LD D,(IX-35) + 0000575A CD 1F 81 891 CALL LWRD ?US_RSH_L02 + 0000575D 2A 9F 97 892 LD HL,(inode_bitmap) + 00005760 19 893 ADD HL,DE + 00005761 DD 7E DC 894 LD A,(IX-36) + 00005764 E6 07 895 AND 7 + 00005766 47 896 LD B,A + 00005767 3E 01 897 LD A,1 + 00005769 CD E7 81 898 CALL LWRD ?C_LSH_L01 + 0000576C B6 899 OR (HL) + 0000576D 77 900 LD (HL),A + 0000576E DD 34 DC 901 INC (IX-36) + 00005771 20 03 902 JR NZ,?0157 + 00005773 DD 34 DD 903 INC (IX-35) + 00005776 904 ?0157: + 00005776 18 C9 905 JR ?0083 + 00005778 906 ?0082: + 00005778 2A 95 97 907 LD HL,(bitmap_block+2) + 0000577B E5 908 PUSH HL + 0000577C 2A 93 97 909 LD HL,(bitmap_block) + 0000577F E5 910 PUSH HL + 00005780 2A 91 97 911 LD HL,(bitmap_inode+2) + 00005783 E5 912 PUSH HL + 00005784 2A 8F 97 913 LD HL,(bitmap_inode) + 00005787 E5 914 PUSH HL + 00005788 ED 5B 9F 97 915 LD DE,(inode_bitmap) + 0000578C 3E 00 916 LD A,BYTE3 bitmap_dump + 0000578E 21 F1 5D 917 LD HL,LWRD bitmap_dump + 00005791 CD 52 81 918 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005794 E1 919 POP HL + 00005795 E1 920 POP HL + 00005796 E1 921 POP HL + 00005797 E1 922 POP HL + 00005798 01 8F 95 923 LD BC,inode + 0000579B 21 05 00 924 LD HL,5 + 0000579E DD 5E 0A 925 LD E,(IX+10) + 000057A1 DD 56 0B 926 LD D,(IX+11) + 000057A4 19 927 ADD HL,DE + 000057A5 EB 928 EX DE,HL + 000057A6 3E 00 929 LD A,BYTE3 dwrite + 000057A8 21 D3 50 930 LD HL,LWRD dwrite + 000057AB CD 52 81 931 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000057AE 01 29 8E 932 LD BC,dirbuf + 000057B1 DD 6E 04 933 LD L,(IX+4) + 000057B4 DD 66 05 934 LD H,(IX+5) + 000057B7 DD 5E 0A 935 LD E,(IX+10) + 000057BA DD 56 0B 936 LD D,(IX+11) + 000057BD 19 937 ADD HL,DE + 000057BE 11 05 00 938 LD DE,5 + 000057C1 19 939 ADD HL,DE + 000057C2 EB 940 EX DE,HL + 000057C3 3E 00 941 LD A,BYTE3 dwrite + 000057C5 21 D3 50 942 LD HL,LWRD dwrite + 000057C8 CD 52 81 943 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000057CB 11 04 00 944 LD DE,4 + 000057CE 3E 00 945 LD A,BYTE3 daread + 000057D0 21 94 50 946 LD HL,LWRD daread + 000057D3 CD 52 81 947 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000057D6 DD 75 FE 948 LD (IX-2),L + 000057D9 DD 74 FF 949 LD (IX-1),H + 000057DC 01 1E 00 950 LD BC,30 + 000057DF C5 951 PUSH BC + 000057E0 4D 952 LD C,L + 000057E1 44 953 LD B,H + 000057E2 21 06 00 954 LD HL,6 + 000057E5 39 955 ADD HL,SP + 000057E6 5D 956 LD E,L + 000057E7 54 957 LD D,H + 000057E8 3E 00 958 LD A,BYTE3 bcopy + 000057EA 21 3D 5F 959 LD HL,LWRD bcopy + 000057ED CD 52 81 960 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000057F0 E1 961 POP HL + 000057F1 DD 4E FE 962 LD C,(IX-2) + 000057F4 DD 46 FF 963 LD B,(IX-1) + 000057F7 11 04 00 964 LD DE,4 + 000057FA 3E 00 965 LD A,BYTE3 dwrite + 000057FC 21 D3 50 966 LD HL,LWRD dwrite + 000057FF CD 52 81 967 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005802 C3 29 81 968 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00005805 969 doformatting: + 00005805 CD AE 81 970 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 00005808 FE FD 971 DEFW 65022 + 0000580A 3A 2C 90 972 LD A,(_verb) + 0000580D B7 973 OR A + 0000580E 28 18 974 JR Z,?0087 + 00005810 975 ?0086: + 00005810 21 BE 84 976 LD HL,?0088 + 00005813 E5 977 PUSH HL + 00005814 3E 00 978 LD A,BYTE3 printf + 00005816 21 DE 61 979 LD HL,LWRD printf + 00005819 CD 52 81 980 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000581C F1 981 POP AF + 0000581D 11 48 90 982 LD DE,stdout + 00005820 3E 00 983 LD A,BYTE3 fflush + 00005822 21 AC 5F 984 LD HL,LWRD fflush + 00005825 CD 52 81 985 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005828 986 ?0087: + 00005828 21 00 02 987 LD HL,512 + 0000582B E5 988 PUSH HL + 0000582C 0E AA 989 LD C,170 + 0000582E 21 04 00 990 LD HL,4 + 00005831 39 991 ADD HL,SP + 00005832 5D 992 LD E,L + 00005833 54 993 LD D,H + 00005834 3E 00 994 LD A,BYTE3 bfill + 00005836 21 11 5F 995 LD HL,LWRD bfill + 00005839 CD 52 81 996 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000583C E1 997 POP HL + 0000583D 21 00 00 998 LD HL,0 + 00005840 39 999 ADD HL,SP + 00005841 AF 1000 XOR A + 00005842 77 1001 LD (HL),A + 00005843 23 1002 INC HL + 00005844 77 1003 LD (HL),A + 00005845 1004 ?0090: + 00005845 DD 4E 02 1005 LD C,(IX+2) + 00005848 DD 46 03 1006 LD B,(IX+3) + 0000584B 21 00 00 1007 LD HL,0 + 0000584E 39 1008 ADD HL,SP + 0000584F 56 1009 LD D,(HL) + 00005850 23 1010 INC HL + 00005851 66 1011 LD H,(HL) + 00005852 6A 1012 LD L,D + 00005853 A7 1013 AND A + 00005854 ED 42 1014 SBC HL,BC + 00005856 30 20 1015 JR NC,?0089 + 00005858 1016 ?0091: + 00005858 21 02 00 1017 LD HL,2 + 0000585B 39 1018 ADD HL,SP + 0000585C 4D 1019 LD C,L + 0000585D 44 1020 LD B,H + 0000585E 21 00 00 1021 LD HL,0 + 00005861 39 1022 ADD HL,SP + 00005862 5E 1023 LD E,(HL) + 00005863 23 1024 INC HL + 00005864 56 1025 LD D,(HL) + 00005865 3E 00 1026 LD A,BYTE3 dwrite + 00005867 21 D3 50 1027 LD HL,LWRD dwrite + 0000586A CD 52 81 1028 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000586D 21 00 00 1029 LD HL,0 + 00005870 39 1030 ADD HL,SP + 00005871 34 1031 INC (HL) + 00005872 23 1032 INC HL + 00005873 20 01 1033 JR NZ,?0158 + 00005875 34 1034 INC (HL) + 00005876 1035 ?0158: + 00005876 18 CD 1036 JR ?0090 + 00005878 1037 ?0089: + 00005878 C3 29 81 1038 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 0000587B 1039 main: + 0000587B CD AE 81 1040 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 0000587E F4 FF 1041 DEFW 65524 + 00005880 AF 1042 XOR A + 00005881 DD 77 F8 1043 LD (IX-8),A + 00005884 DD 77 F9 1044 LD (IX-7),A + 00005887 DD 36 FA 01 1045 LD (IX-6),1 + 0000588B DD 36 FB 00 1046 LD (IX-5),0 + 0000588F DD 6E 02 1047 LD L,(IX+2) + 00005892 DD 66 03 1048 LD H,(IX+3) + 00005895 DD 75 FC 1049 LD (IX-4),L + 00005898 DD 74 FD 1050 LD (IX-3),H + 0000589B 1051 ?0094: + 0000589B DD 4E 02 1052 LD C,(IX+2) + 0000589E DD 46 03 1053 LD B,(IX+3) + 000058A1 DD 6E FA 1054 LD L,(IX-6) + 000058A4 DD 66 FB 1055 LD H,(IX-5) + 000058A7 CD CC 81 1056 CALL LWRD ?SS_CMP_L02 + 000058AA D2 74 59 1057 JP NC,?0093 + 000058AD DD 6E FA 1058 LD L,(IX-6) + 000058B0 DD 66 FB 1059 LD H,(IX-5) + 000058B3 29 1060 ADD HL,HL + 000058B4 DD 4E 04 1061 LD C,(IX+4) + 000058B7 DD 46 05 1062 LD B,(IX+5) + 000058BA 09 1063 ADD HL,BC + 000058BB 46 1064 LD B,(HL) + 000058BC 23 1065 INC HL + 000058BD 66 1066 LD H,(HL) + 000058BE 68 1067 LD L,B + 000058BF DD 75 FE 1068 LD (IX-2),L + 000058C2 DD 74 FF 1069 LD (IX-1),H + 000058C5 7E 1070 LD A,(HL) + 000058C6 FE 2D 1071 CP 45 + 000058C8 C2 74 59 1072 JP NZ,?0093 + 000058CB 1073 ?0097: + 000058CB 1074 ?0096: + 000058CB 1075 ?0095: + 000058CB DD 34 FE 1076 INC (IX-2) + 000058CE 20 03 1077 JR NZ,?0159 + 000058D0 DD 34 FF 1078 INC (IX-1) + 000058D3 1079 ?0159: + 000058D3 DD 34 FA 1080 INC (IX-6) + 000058D6 20 03 1081 JR NZ,?0160 + 000058D8 DD 34 FB 1082 INC (IX-5) + 000058DB 1083 ?0160: + 000058DB DD 6E FC 1084 LD L,(IX-4) + 000058DE DD 66 FD 1085 LD H,(IX-3) + 000058E1 2B 1086 DEC HL + 000058E2 DD 75 FC 1087 LD (IX-4),L + 000058E5 DD 74 FD 1088 LD (IX-3),H + 000058E8 1089 ?0099: + 000058E8 DD 6E FE 1090 LD L,(IX-2) + 000058EB DD 66 FF 1091 LD H,(IX-1) + 000058EE AF 1092 XOR A + 000058EF B6 1093 OR (HL) + 000058F0 28 7F 1094 JR Z,?0098 + 000058F2 1095 ?0100: + 000058F2 DD 6E FE 1096 LD L,(IX-2) + 000058F5 DD 66 FF 1097 LD H,(IX-1) + 000058F8 23 1098 INC HL + 000058F9 DD 75 FE 1099 LD (IX-2),L + 000058FC DD 74 FF 1100 LD (IX-1),H + 000058FF 2B 1101 DEC HL + 00005900 5E 1102 LD E,(HL) + 00005901 CD 34 81 1103 CALL LWRD ?C_V_SWITCH_L06 + 00005904 0A 00 1104 DEFW 10 + 00005906 46 1105 DEFB 70 + 00005907 4C 1106 DEFB 76 + 00005908 51 1107 DEFB 81 + 00005909 56 1108 DEFB 86 + 0000590A 59 1109 DEFB 89 + 0000590B 66 1110 DEFB 102 + 0000590C 6C 1111 DEFB 108 + 0000590D 71 1112 DEFB 113 + 0000590E 76 1113 DEFB 118 + 0000590F 79 1114 DEFB 121 + 00005910 49 59 1115 DEFW ?0107 + 00005912 26 59 1116 DEFW ?0102 + 00005914 3B 59 1117 DEFW ?0105 + 00005916 34 59 1118 DEFW ?0104 + 00005918 42 59 1119 DEFW ?0106 + 0000591A 2D 59 1120 DEFW ?0103 + 0000591C 26 59 1121 DEFW ?0102 + 0000591E 3B 59 1122 DEFW ?0105 + 00005920 34 59 1123 DEFW ?0104 + 00005922 42 59 1124 DEFW ?0106 + 00005924 2D 59 1125 DEFW ?0103 + 00005926 1126 ?0102: + 00005926 3E 01 1127 LD A,1 + 00005928 32 2A 90 1128 LD (_yes),A + 0000592B 18 41 1129 JR ?0101 + 0000592D 1130 ?0103: + 0000592D 3E 01 1131 LD A,1 + 0000592F 32 29 90 1132 LD (_fmt),A + 00005932 18 3A 1133 JR ?0101 + 00005934 1134 ?0104: + 00005934 3E 01 1135 LD A,1 + 00005936 32 2B 90 1136 LD (_quick),A + 00005939 18 33 1137 JR ?0101 + 0000593B 1138 ?0105: + 0000593B 3E 01 1139 LD A,1 + 0000593D 32 2C 90 1140 LD (_verb),A + 00005940 18 2C 1141 JR ?0101 + 00005942 1142 ?0106: + 00005942 3E 01 1143 LD A,1 + 00005944 32 2D 90 1144 LD (_immov),A + 00005947 18 25 1145 JR ?0101 + 00005949 1146 ?0107: + 00005949 DD 6E FE 1147 LD L,(IX-2) + 0000594C DD 66 FF 1148 LD H,(IX-1) + 0000594F E5 1149 PUSH HL + 00005950 21 D7 84 1150 LD HL,?0108 + 00005953 E5 1151 PUSH HL + 00005954 21 60 90 1152 LD HL,stderr + 00005957 E5 1153 PUSH HL + 00005958 3E 00 1154 LD A,BYTE3 fprintf + 0000595A 21 4D 71 1155 LD HL,LWRD fprintf + 0000595D CD 52 81 1156 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005960 F1 1157 POP AF + 00005961 F1 1158 POP AF + 00005962 F1 1159 POP AF + 00005963 11 01 00 1160 LD DE,1 + 00005966 3E 00 1161 LD A,BYTE3 exit + 00005968 21 7F 71 1162 LD HL,LWRD exit + 0000596B CD 52 81 1163 CALL LWRD ?BANK_CALL_DIRECT_L08 + 0000596E 1164 ?0101: + 0000596E C3 E8 58 1165 JP LWRD ?0099 + 00005971 1166 ?0098: + 00005971 C3 9B 58 1167 JP LWRD ?0094 + 00005974 1168 ?0093: + 00005974 01 04 80 1169 LD BC,32772 + 00005977 DD 6E FC 1170 LD L,(IX-4) + 0000597A DD 66 FD 1171 LD H,(IX-3) + 0000597D 3E 80 1172 LD A,128 + 0000597F AC 1173 XOR H + 00005980 67 1174 LD H,A + 00005981 ED 42 1175 SBC HL,BC + 00005983 30 1D 1176 JR NC,?0110 + 00005985 1177 ?0109: + 00005985 21 EA 84 1178 LD HL,?0111 + 00005988 E5 1179 PUSH HL + 00005989 21 60 90 1180 LD HL,stderr + 0000598C E5 1181 PUSH HL + 0000598D 3E 00 1182 LD A,BYTE3 fprintf + 0000598F 21 4D 71 1183 LD HL,LWRD fprintf + 00005992 CD 52 81 1184 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005995 F1 1185 POP AF + 00005996 F1 1186 POP AF + 00005997 11 01 00 1187 LD DE,1 + 0000599A 3E 00 1188 LD A,BYTE3 exit + 0000599C 21 7F 71 1189 LD HL,LWRD exit + 0000599F CD 52 81 1190 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000059A2 1191 ?0110: + 000059A2 DD 6E FA 1192 LD L,(IX-6) + 000059A5 DD 66 FB 1193 LD H,(IX-5) + 000059A8 29 1194 ADD HL,HL + 000059A9 DD 4E 04 1195 LD C,(IX+4) + 000059AC DD 46 05 1196 LD B,(IX+5) + 000059AF 09 1197 ADD HL,BC + 000059B0 4E 1198 LD C,(HL) + 000059B1 23 1199 INC HL + 000059B2 46 1200 LD B,(HL) + 000059B3 11 8D 91 1201 LD DE,device_name + 000059B6 3E 00 1202 LD A,BYTE3 strcpy + 000059B8 21 09 65 1203 LD HL,LWRD strcpy + 000059BB CD 52 81 1204 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000059BE 21 02 80 1205 LD HL,32770 + 000059C1 E5 1206 PUSH HL + 000059C2 21 8D 91 1207 LD HL,device_name + 000059C5 E5 1208 PUSH HL + 000059C6 3E 00 1209 LD A,BYTE3 open + 000059C8 21 F6 6E 1210 LD HL,LWRD open + 000059CB CD 52 81 1211 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000059CE F1 1212 POP AF + 000059CF F1 1213 POP AF + 000059D0 22 8B 91 1214 LD (device_handle),HL + 000059D3 CB 7C 1215 BIT 7,H + 000059D5 28 2E 1216 JR Z,?0113 + 000059D7 1217 ?0112: + 000059D7 21 1B 85 1218 LD HL,?0114 + 000059DA E5 1219 PUSH HL + 000059DB 3E 00 1220 LD A,BYTE3 printf + 000059DD 21 DE 61 1221 LD HL,LWRD printf + 000059E0 CD 52 81 1222 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000059E3 F1 1223 POP AF + 000059E4 11 48 90 1224 LD DE,stdout + 000059E7 3E 00 1225 LD A,BYTE3 fflush + 000059E9 21 AC 5F 1226 LD HL,LWRD fflush + 000059EC CD 52 81 1227 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000059EF 11 8D 91 1228 LD DE,device_name + 000059F2 3E 00 1229 LD A,BYTE3 perror + 000059F4 21 6A 64 1230 LD HL,LWRD perror + 000059F7 CD 52 81 1231 CALL LWRD ?BANK_CALL_DIRECT_L08 + 000059FA 11 01 00 1232 LD DE,1 + 000059FD 3E 00 1233 LD A,BYTE3 exit + 000059FF 21 7F 71 1234 LD HL,LWRD exit + 00005A02 CD 52 81 1235 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005A05 1236 ?0113: + 00005A05 DD 6E FA 1237 LD L,(IX-6) + 00005A08 DD 66 FB 1238 LD H,(IX-5) + 00005A0B 29 1239 ADD HL,HL + 00005A0C DD 4E 04 1240 LD C,(IX+4) + 00005A0F DD 46 05 1241 LD B,(IX+5) + 00005A12 09 1242 ADD HL,BC + 00005A13 23 1243 INC HL + 00005A14 23 1244 INC HL + 00005A15 5E 1245 LD E,(HL) + 00005A16 23 1246 INC HL + 00005A17 56 1247 LD D,(HL) + 00005A18 3E 00 1248 LD A,BYTE3 atoi + 00005A1A 21 47 65 1249 LD HL,LWRD atoi + 00005A1D CD 52 81 1250 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005A20 DD 75 F4 1251 LD (IX-12),L + 00005A23 DD 74 F5 1252 LD (IX-11),H + 00005A26 DD 6E FA 1253 LD L,(IX-6) + 00005A29 DD 66 FB 1254 LD H,(IX-5) + 00005A2C 29 1255 ADD HL,HL + 00005A2D 09 1256 ADD HL,BC + 00005A2E 01 04 00 1257 LD BC,4 + 00005A31 09 1258 ADD HL,BC + 00005A32 5E 1259 LD E,(HL) + 00005A33 23 1260 INC HL + 00005A34 56 1261 LD D,(HL) + 00005A35 3E 00 1262 LD A,BYTE3 atoi + 00005A37 21 47 65 1263 LD HL,LWRD atoi + 00005A3A CD 52 81 1264 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005A3D DD 75 F6 1265 LD (IX-10),L + 00005A40 DD 74 F7 1266 LD (IX-9),H + 00005A43 DD 4E FC 1267 LD C,(IX-4) + 00005A46 DD 46 FD 1268 LD B,(IX-3) + 00005A49 21 04 00 1269 LD HL,4 + 00005A4C CD CC 81 1270 CALL LWRD ?SS_CMP_L02 + 00005A4F 30 23 1271 JR NC,?0116 + 00005A51 1272 ?0115: + 00005A51 DD 6E FA 1273 LD L,(IX-6) + 00005A54 DD 66 FB 1274 LD H,(IX-5) + 00005A57 29 1275 ADD HL,HL + 00005A58 DD 4E 04 1276 LD C,(IX+4) + 00005A5B DD 46 05 1277 LD B,(IX+5) + 00005A5E 09 1278 ADD HL,BC + 00005A5F 01 06 00 1279 LD BC,6 + 00005A62 09 1280 ADD HL,BC + 00005A63 5E 1281 LD E,(HL) + 00005A64 23 1282 INC HL + 00005A65 56 1283 LD D,(HL) + 00005A66 3E 00 1284 LD A,BYTE3 atoi + 00005A68 21 47 65 1285 LD HL,LWRD atoi + 00005A6B CD 52 81 1286 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005A6E DD 75 F8 1287 LD (IX-8),L + 00005A71 DD 74 F9 1288 LD (IX-7),H + 00005A74 1289 ?0116: + 00005A74 01 64 00 1290 LD BC,100 + 00005A77 DD 6E F4 1291 LD L,(IX-12) + 00005A7A DD 66 F5 1292 LD H,(IX-11) + 00005A7D A7 1293 AND A + 00005A7E ED 42 1294 SBC HL,BC + 00005A80 38 25 1295 JR C,?0117 + 00005A82 01 1E 00 1296 LD BC,30 + 00005A85 DD 5E F4 1297 LD E,(IX-12) + 00005A88 DD 56 F5 1298 LD D,(IX-11) + 00005A8B CD EE 81 1299 CALL LWRD ?US_DIV_L02 + 00005A8E DD 6E F6 1300 LD L,(IX-10) + 00005A91 DD 66 F7 1301 LD H,(IX-9) + 00005A94 A7 1302 AND A + 00005A95 ED 52 1303 SBC HL,DE + 00005A97 30 0E 1304 JR NC,?0117 + 00005A99 DD 4E F8 1305 LD C,(IX-8) + 00005A9C DD 46 F9 1306 LD B,(IX-7) + 00005A9F 21 64 00 1307 LD HL,100 + 00005AA2 A7 1308 AND A + 00005AA3 ED 42 1309 SBC HL,BC + 00005AA5 30 1D 1310 JR NC,?0118 + 00005AA7 1311 ?0119: + 00005AA7 1312 ?0120: + 00005AA7 1313 ?0117: + 00005AA7 21 28 85 1314 LD HL,?0121 + 00005AAA E5 1315 PUSH HL + 00005AAB 21 60 90 1316 LD HL,stderr + 00005AAE E5 1317 PUSH HL + 00005AAF 3E 00 1318 LD A,BYTE3 fprintf + 00005AB1 21 4D 71 1319 LD HL,LWRD fprintf + 00005AB4 CD 52 81 1320 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005AB7 F1 1321 POP AF + 00005AB8 F1 1322 POP AF + 00005AB9 11 01 00 1323 LD DE,1 + 00005ABC 3E 00 1324 LD A,BYTE3 exit + 00005ABE 21 7F 71 1325 LD HL,LWRD exit + 00005AC1 CD 52 81 1326 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005AC4 1327 ?0118: + 00005AC4 01 00 00 1328 LD BC,0 + 00005AC7 21 1E 08 1329 LD HL,2078 + 00005ACA 22 8F 97 1330 LD (bitmap_inode),HL + 00005ACD ED 43 91 97 1331 LD (bitmap_inode+2),BC + 00005AD1 11 FF FF 1332 LD DE,65535 + 00005AD4 D5 1333 PUSH DE + 00005AD5 11 FC FF 1334 LD DE,65532 + 00005AD8 D5 1335 PUSH DE + 00005AD9 C5 1336 PUSH BC + 00005ADA E5 1337 PUSH HL + 00005ADB 21 03 00 1338 LD HL,3 + 00005ADE C1 1339 POP BC + 00005ADF 09 1340 ADD HL,BC + 00005AE0 EB 1341 EX DE,HL + 00005AE1 21 00 00 1342 LD HL,0 + 00005AE4 C1 1343 POP BC + 00005AE5 ED 4A 1344 ADC HL,BC + 00005AE7 4D 1345 LD C,L + 00005AE8 44 1346 LD B,H + 00005AE9 EB 1347 EX DE,HL + 00005AEA CD 5F 81 1348 CALL LWRD ?L_AND_L03 + 00005AED 22 8F 97 1349 LD (bitmap_inode),HL + 00005AF0 ED 43 91 97 1350 LD (bitmap_inode+2),BC + 00005AF4 C5 1351 PUSH BC + 00005AF5 E5 1352 PUSH HL + 00005AF6 DD 6E F6 1353 LD L,(IX-10) + 00005AF9 DD 66 F7 1354 LD H,(IX-9) + 00005AFC 29 1355 ADD HL,HL + 00005AFD 29 1356 ADD HL,HL + 00005AFE 29 1357 ADD HL,HL + 00005AFF 01 FF FF 1358 LD BC,65535 + 00005B02 09 1359 ADD HL,BC + 00005B03 EB 1360 EX DE,HL + 00005B04 06 03 1361 LD B,3 + 00005B06 CD 1F 81 1362 CALL LWRD ?US_RSH_L02 + 00005B09 EB 1363 EX DE,HL + 00005B0A 11 00 00 1364 LD DE,0 + 00005B0D C1 1365 POP BC + 00005B0E 09 1366 ADD HL,BC + 00005B0F EB 1367 EX DE,HL + 00005B10 C1 1368 POP BC + 00005B11 ED 4A 1369 ADC HL,BC + 00005B13 E5 1370 PUSH HL + 00005B14 D5 1371 PUSH DE + 00005B15 21 01 00 1372 LD HL,1 + 00005B18 C1 1373 POP BC + 00005B19 09 1374 ADD HL,BC + 00005B1A EB 1375 EX DE,HL + 00005B1B 21 00 00 1376 LD HL,0 + 00005B1E C1 1377 POP BC + 00005B1F ED 4A 1378 ADC HL,BC + 00005B21 4D 1379 LD C,L + 00005B22 44 1380 LD B,H + 00005B23 EB 1381 EX DE,HL + 00005B24 22 93 97 1382 LD (bitmap_block),HL + 00005B27 ED 43 95 97 1383 LD (bitmap_block+2),BC + 00005B2B 11 FF FF 1384 LD DE,65535 + 00005B2E D5 1385 PUSH DE + 00005B2F 11 FC FF 1386 LD DE,65532 + 00005B32 D5 1387 PUSH DE + 00005B33 C5 1388 PUSH BC + 00005B34 E5 1389 PUSH HL + 00005B35 21 03 00 1390 LD HL,3 + 00005B38 C1 1391 POP BC + 00005B39 09 1392 ADD HL,BC + 00005B3A EB 1393 EX DE,HL + 00005B3B 21 00 00 1394 LD HL,0 + 00005B3E C1 1395 POP BC + 00005B3F ED 4A 1396 ADC HL,BC + 00005B41 4D 1397 LD C,L + 00005B42 44 1398 LD B,H + 00005B43 EB 1399 EX DE,HL + 00005B44 CD 5F 81 1400 CALL LWRD ?L_AND_L03 + 00005B47 22 93 97 1401 LD (bitmap_block),HL + 00005B4A ED 43 95 97 1402 LD (bitmap_block+2),BC + 00005B4E C5 1403 PUSH BC + 00005B4F E5 1404 PUSH HL + 00005B50 21 FF FF 1405 LD HL,65535 + 00005B53 DD 4E F4 1406 LD C,(IX-12) + 00005B56 DD 46 F5 1407 LD B,(IX-11) + 00005B59 09 1408 ADD HL,BC + 00005B5A EB 1409 EX DE,HL + 00005B5B 06 03 1410 LD B,3 + 00005B5D CD 1F 81 1411 CALL LWRD ?US_RSH_L02 + 00005B60 EB 1412 EX DE,HL + 00005B61 11 00 00 1413 LD DE,0 + 00005B64 C1 1414 POP BC + 00005B65 09 1415 ADD HL,BC + 00005B66 EB 1416 EX DE,HL + 00005B67 C1 1417 POP BC + 00005B68 ED 4A 1418 ADC HL,BC + 00005B6A E5 1419 PUSH HL + 00005B6B D5 1420 PUSH DE + 00005B6C 21 01 00 1421 LD HL,1 + 00005B6F C1 1422 POP BC + 00005B70 09 1423 ADD HL,BC + 00005B71 EB 1424 EX DE,HL + 00005B72 21 00 00 1425 LD HL,0 + 00005B75 C1 1426 POP BC + 00005B76 ED 4A 1427 ADC HL,BC + 00005B78 4D 1428 LD C,L + 00005B79 44 1429 LD B,H + 00005B7A EB 1430 EX DE,HL + 00005B7B 22 97 97 1431 LD (bitmap_immov),HL + 00005B7E ED 43 99 97 1432 LD (bitmap_immov+2),BC + 00005B82 11 FF FF 1433 LD DE,65535 + 00005B85 D5 1434 PUSH DE + 00005B86 11 FC FF 1435 LD DE,65532 + 00005B89 D5 1436 PUSH DE + 00005B8A C5 1437 PUSH BC + 00005B8B E5 1438 PUSH HL + 00005B8C 21 03 00 1439 LD HL,3 + 00005B8F C1 1440 POP BC + 00005B90 09 1441 ADD HL,BC + 00005B91 EB 1442 EX DE,HL + 00005B92 21 00 00 1443 LD HL,0 + 00005B95 C1 1444 POP BC + 00005B96 ED 4A 1445 ADC HL,BC + 00005B98 4D 1446 LD C,L + 00005B99 44 1447 LD B,H + 00005B9A EB 1448 EX DE,HL + 00005B9B CD 5F 81 1449 CALL LWRD ?L_AND_L03 + 00005B9E 22 97 97 1450 LD (bitmap_immov),HL + 00005BA1 ED 43 99 97 1451 LD (bitmap_immov+2),BC + 00005BA5 22 9B 97 1452 LD (bitmap_final),HL + 00005BA8 ED 43 9D 97 1453 LD (bitmap_final+2),BC + 00005BAC C5 1454 PUSH BC + 00005BAD E5 1455 PUSH HL + 00005BAE 21 FF 01 1456 LD HL,511 + 00005BB1 C1 1457 POP BC + 00005BB2 09 1458 ADD HL,BC + 00005BB3 EB 1459 EX DE,HL + 00005BB4 21 00 00 1460 LD HL,0 + 00005BB7 C1 1461 POP BC + 00005BB8 ED 4A 1462 ADC HL,BC + 00005BBA 4D 1463 LD C,L + 00005BBB 44 1464 LD B,H + 00005BBC EB 1465 EX DE,HL + 00005BBD 3E 09 1466 LD A,9 + 00005BBF CD FC 81 1467 CALL LWRD ?SL_RSH_L03 + 00005BC2 01 FB FF 1468 LD BC,65531 + 00005BC5 09 1469 ADD HL,BC + 00005BC6 DD 75 F8 1470 LD (IX-8),L + 00005BC9 DD 74 F9 1471 LD (IX-7),H + 00005BCC 3A 2D 90 1472 LD A,(_immov) + 00005BCF B7 1473 OR A + 00005BD0 28 7D 1474 JR Z,?0123 + 00005BD2 1475 ?0122: + 00005BD2 21 FF FF 1476 LD HL,65535 + 00005BD5 DD 4E F4 1477 LD C,(IX-12) + 00005BD8 DD 46 F5 1478 LD B,(IX-11) + 00005BDB 09 1479 ADD HL,BC + 00005BDC EB 1480 EX DE,HL + 00005BDD 06 03 1481 LD B,3 + 00005BDF CD 1F 81 1482 CALL LWRD ?US_RSH_L02 + 00005BE2 EB 1483 EX DE,HL + 00005BE3 01 00 00 1484 LD BC,0 + 00005BE6 C5 1485 PUSH BC + 00005BE7 E5 1486 PUSH HL + 00005BE8 2A 97 97 1487 LD HL,(bitmap_immov) + 00005BEB C1 1488 POP BC + 00005BEC 09 1489 ADD HL,BC + 00005BED EB 1490 EX DE,HL + 00005BEE 2A 99 97 1491 LD HL,(bitmap_immov+2) + 00005BF1 C1 1492 POP BC + 00005BF2 ED 4A 1493 ADC HL,BC + 00005BF4 E5 1494 PUSH HL + 00005BF5 D5 1495 PUSH DE + 00005BF6 21 01 00 1496 LD HL,1 + 00005BF9 C1 1497 POP BC + 00005BFA 09 1498 ADD HL,BC + 00005BFB EB 1499 EX DE,HL + 00005BFC 21 00 00 1500 LD HL,0 + 00005BFF C1 1501 POP BC + 00005C00 ED 4A 1502 ADC HL,BC + 00005C02 4D 1503 LD C,L + 00005C03 44 1504 LD B,H + 00005C04 EB 1505 EX DE,HL + 00005C05 22 9B 97 1506 LD (bitmap_final),HL + 00005C08 ED 43 9D 97 1507 LD (bitmap_final+2),BC + 00005C0C 11 FF FF 1508 LD DE,65535 + 00005C0F D5 1509 PUSH DE + 00005C10 11 FC FF 1510 LD DE,65532 + 00005C13 D5 1511 PUSH DE + 00005C14 C5 1512 PUSH BC + 00005C15 E5 1513 PUSH HL + 00005C16 21 03 00 1514 LD HL,3 + 00005C19 C1 1515 POP BC + 00005C1A 09 1516 ADD HL,BC + 00005C1B EB 1517 EX DE,HL + 00005C1C 21 00 00 1518 LD HL,0 + 00005C1F C1 1519 POP BC + 00005C20 ED 4A 1520 ADC HL,BC + 00005C22 4D 1521 LD C,L + 00005C23 44 1522 LD B,H + 00005C24 EB 1523 EX DE,HL + 00005C25 CD 5F 81 1524 CALL LWRD ?L_AND_L03 + 00005C28 22 9B 97 1525 LD (bitmap_final),HL + 00005C2B ED 43 9D 97 1526 LD (bitmap_final+2),BC + 00005C2F C5 1527 PUSH BC + 00005C30 E5 1528 PUSH HL + 00005C31 21 FF 01 1529 LD HL,511 + 00005C34 C1 1530 POP BC + 00005C35 09 1531 ADD HL,BC + 00005C36 EB 1532 EX DE,HL + 00005C37 21 00 00 1533 LD HL,0 + 00005C3A C1 1534 POP BC + 00005C3B ED 4A 1535 ADC HL,BC + 00005C3D 4D 1536 LD C,L + 00005C3E 44 1537 LD B,H + 00005C3F EB 1538 EX DE,HL + 00005C40 3E 09 1539 LD A,9 + 00005C42 CD FC 81 1540 CALL LWRD ?SL_RSH_L03 + 00005C45 01 FB FF 1541 LD BC,65531 + 00005C48 09 1542 ADD HL,BC + 00005C49 DD 75 F8 1543 LD (IX-8),L + 00005C4C DD 74 F9 1544 LD (IX-7),H + 00005C4F 1545 ?0123: + 00005C4F DD 6E F8 1546 LD L,(IX-8) + 00005C52 DD 66 F9 1547 LD H,(IX-7) + 00005C55 E5 1548 PUSH HL + 00005C56 DD 6E F6 1549 LD L,(IX-10) + 00005C59 DD 66 F7 1550 LD H,(IX-9) + 00005C5C E5 1551 PUSH HL + 00005C5D DD 6E F4 1552 LD L,(IX-12) + 00005C60 DD 66 F5 1553 LD H,(IX-11) + 00005C63 E5 1554 PUSH HL + 00005C64 21 8D 91 1555 LD HL,device_name + 00005C67 E5 1556 PUSH HL + 00005C68 21 3E 85 1557 LD HL,?0124 + 00005C6B E5 1558 PUSH HL + 00005C6C 3E 00 1559 LD A,BYTE3 printf + 00005C6E 21 DE 61 1560 LD HL,LWRD printf + 00005C71 CD 52 81 1561 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005C74 F1 1562 POP AF + 00005C75 F1 1563 POP AF + 00005C76 F1 1564 POP AF + 00005C77 F1 1565 POP AF + 00005C78 F1 1566 POP AF + 00005C79 11 48 90 1567 LD DE,stdout + 00005C7C 3E 00 1568 LD A,BYTE3 fflush + 00005C7E 21 AC 5F 1569 LD HL,LWRD fflush + 00005C81 CD 52 81 1570 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005C84 11 77 85 1571 LD DE,?0127 + 00005C87 3E 00 1572 LD A,BYTE3 yes + 00005C89 21 74 52 1573 LD HL,LWRD yes + 00005C8C CD 52 81 1574 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005C8F 7D 1575 LD A,L + 00005C90 B4 1576 OR H + 00005C91 20 0B 1577 JR NZ,?0126 + 00005C93 1578 ?0125: + 00005C93 11 01 00 1579 LD DE,1 + 00005C96 3E 00 1580 LD A,BYTE3 exit + 00005C98 21 7F 71 1581 LD HL,LWRD exit + 00005C9B CD 52 81 1582 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005C9E 1583 ?0126: + 00005C9E 21 81 85 1584 LD HL,?0128 + 00005CA1 E5 1585 PUSH HL + 00005CA2 3E 00 1586 LD A,BYTE3 printf + 00005CA4 21 DE 61 1587 LD HL,LWRD printf + 00005CA7 CD 52 81 1588 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005CAA F1 1589 POP AF + 00005CAB 3A 29 90 1590 LD A,(_fmt) + 00005CAE B7 1591 OR A + 00005CAF 28 0E 1592 JR Z,?0130 + 00005CB1 1593 ?0129: + 00005CB1 DD 5E F4 1594 LD E,(IX-12) + 00005CB4 DD 56 F5 1595 LD D,(IX-11) + 00005CB7 3E 00 1596 LD A,BYTE3 doformatting + 00005CB9 21 05 58 1597 LD HL,LWRD doformatting + 00005CBC CD 52 81 1598 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005CBF 1599 ?0130: + 00005CBF ED 4B 8F 97 1600 LD BC,(bitmap_inode) + 00005CC3 2A 93 97 1601 LD HL,(bitmap_block) + 00005CC6 A7 1602 AND A + 00005CC7 ED 42 1603 SBC HL,BC + 00005CC9 EB 1604 EX DE,HL + 00005CCA 3E 00 1605 LD A,BYTE3 malloc + 00005CCC 21 21 6F 1606 LD HL,LWRD malloc + 00005CCF CD 52 81 1607 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005CD2 22 9F 97 1608 LD (inode_bitmap),HL + 00005CD5 7D 1609 LD A,L + 00005CD6 B4 1610 OR H + 00005CD7 20 0B 1611 JR NZ,?0132 + 00005CD9 1612 ?0131: + 00005CD9 DD 36 FE 83 1613 LD (IX-2),LOW(?0133) + 00005CDD DD 36 FF 85 1614 LD (IX-1),HIGH(?0133) + 00005CE1 C3 64 5D 1615 JP LWRD ?0134 + 00005CE4 1616 ?0132: + 00005CE4 ED 4B 8F 97 1617 LD BC,(bitmap_inode) + 00005CE8 2A 93 97 1618 LD HL,(bitmap_block) + 00005CEB A7 1619 AND A + 00005CEC ED 42 1620 SBC HL,BC + 00005CEE E5 1621 PUSH HL + 00005CEF 0E 00 1622 LD C,0 + 00005CF1 ED 5B 9F 97 1623 LD DE,(inode_bitmap) + 00005CF5 3E 00 1624 LD A,BYTE3 bfill + 00005CF7 21 11 5F 1625 LD HL,LWRD bfill + 00005CFA CD 52 81 1626 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005CFD E1 1627 POP HL + 00005CFE ED 4B 93 97 1628 LD BC,(bitmap_block) + 00005D02 2A 9B 97 1629 LD HL,(bitmap_final) + 00005D05 A7 1630 AND A + 00005D06 ED 42 1631 SBC HL,BC + 00005D08 EB 1632 EX DE,HL + 00005D09 3E 00 1633 LD A,BYTE3 malloc + 00005D0B 21 21 6F 1634 LD HL,LWRD malloc + 00005D0E CD 52 81 1635 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005D11 22 A1 97 1636 LD (block_bitmap),HL + 00005D14 7D 1637 LD A,L + 00005D15 B4 1638 OR H + 00005D16 20 0A 1639 JR NZ,?0136 + 00005D18 1640 ?0135: + 00005D18 DD 36 FE 90 1641 LD (IX-2),LOW(?0137) + 00005D1C DD 36 FF 85 1642 LD (IX-1),HIGH(?0137) + 00005D20 18 42 1643 JR ?0134 + 00005D22 1644 ?0136: + 00005D22 ED 4B 93 97 1645 LD BC,(bitmap_block) + 00005D26 2A 9B 97 1646 LD HL,(bitmap_final) + 00005D29 A7 1647 AND A + 00005D2A ED 42 1648 SBC HL,BC + 00005D2C E5 1649 PUSH HL + 00005D2D 0E 00 1650 LD C,0 + 00005D2F ED 5B A1 97 1651 LD DE,(block_bitmap) + 00005D33 3E 00 1652 LD A,BYTE3 bfill + 00005D35 21 11 5F 1653 LD HL,LWRD bfill + 00005D38 CD 52 81 1654 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005D3B E1 1655 POP HL + 00005D3C 3A 2D 90 1656 LD A,(_immov) + 00005D3F B7 1657 OR A + 00005D40 28 61 1658 JR Z,?0139 + 00005D42 1659 ?0138: + 00005D42 ED 4B 97 97 1660 LD BC,(bitmap_immov) + 00005D46 2A 9B 97 1661 LD HL,(bitmap_final) + 00005D49 A7 1662 AND A + 00005D4A ED 42 1663 SBC HL,BC + 00005D4C EB 1664 EX DE,HL + 00005D4D 3E 00 1665 LD A,BYTE3 malloc + 00005D4F 21 21 6F 1666 LD HL,LWRD malloc + 00005D52 CD 52 81 1667 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005D55 22 A3 97 1668 LD (immov_bitmap),HL + 00005D58 7D 1669 LD A,L + 00005D59 B4 1670 OR H + 00005D5A 20 2D 1671 JR NZ,?0141 + 00005D5C 1672 ?0140: + 00005D5C DD 36 FE 9D 1673 LD (IX-2),LOW(?0142) + 00005D60 DD 36 FF 85 1674 LD (IX-1),HIGH(?0142) + 00005D64 1675 ?0134: + 00005D64 DD 6E FE 1676 LD L,(IX-2) + 00005D67 DD 66 FF 1677 LD H,(IX-1) + 00005D6A E5 1678 PUSH HL + 00005D6B 21 A9 85 1679 LD HL,?0143 + 00005D6E E5 1680 PUSH HL + 00005D6F 21 60 90 1681 LD HL,stderr + 00005D72 E5 1682 PUSH HL + 00005D73 3E 00 1683 LD A,BYTE3 fprintf + 00005D75 21 4D 71 1684 LD HL,LWRD fprintf + 00005D78 CD 52 81 1685 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005D7B F1 1686 POP AF + 00005D7C F1 1687 POP AF + 00005D7D F1 1688 POP AF + 00005D7E 11 01 00 1689 LD DE,1 + 00005D81 3E 00 1690 LD A,BYTE3 exit + 00005D83 21 7F 71 1691 LD HL,LWRD exit + 00005D86 CD 52 81 1692 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005D89 1693 ?0141: + 00005D89 ED 4B 97 97 1694 LD BC,(bitmap_immov) + 00005D8D 2A 9B 97 1695 LD HL,(bitmap_final) + 00005D90 A7 1696 AND A + 00005D91 ED 42 1697 SBC HL,BC + 00005D93 E5 1698 PUSH HL + 00005D94 0E 00 1699 LD C,0 + 00005D96 ED 5B A3 97 1700 LD DE,(immov_bitmap) + 00005D9A 3E 00 1701 LD A,BYTE3 bfill + 00005D9C 21 11 5F 1702 LD HL,LWRD bfill + 00005D9F CD 52 81 1703 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005DA2 E1 1704 POP HL + 00005DA3 1705 ?0139: + 00005DA3 DD 6E F8 1706 LD L,(IX-8) + 00005DA6 DD 66 F9 1707 LD H,(IX-7) + 00005DA9 E5 1708 PUSH HL + 00005DAA DD 4E F6 1709 LD C,(IX-10) + 00005DAD DD 46 F7 1710 LD B,(IX-9) + 00005DB0 DD 5E F4 1711 LD E,(IX-12) + 00005DB3 DD 56 F5 1712 LD D,(IX-11) + 00005DB6 3E 00 1713 LD A,BYTE3 mkfs + 00005DB8 21 DE 52 1714 LD HL,LWRD mkfs + 00005DBB CD 52 81 1715 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005DBE E1 1716 POP HL + 00005DBF ED 5B 8B 91 1717 LD DE,(device_handle) + 00005DC3 3E 00 1718 LD A,BYTE3 close + 00005DC5 21 E3 62 1719 LD HL,LWRD close + 00005DC8 CD 52 81 1720 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005DCB 3A 2C 90 1721 LD A,(_verb) + 00005DCE B7 1722 OR A + 00005DCF 28 12 1723 JR Z,?0145 + 00005DD1 1724 ?0144: + 00005DD1 21 8D 91 1725 LD HL,device_name + 00005DD4 E5 1726 PUSH HL + 00005DD5 21 C4 85 1727 LD HL,?0146 + 00005DD8 E5 1728 PUSH HL + 00005DD9 3E 00 1729 LD A,BYTE3 printf + 00005DDB 21 DE 61 1730 LD HL,LWRD printf + 00005DDE CD 52 81 1731 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005DE1 F1 1732 POP AF + 00005DE2 F1 1733 POP AF + 00005DE3 1734 ?0145: + 00005DE3 11 00 00 1735 LD DE,0 + 00005DE6 3E 00 1736 LD A,BYTE3 exit + 00005DE8 21 7F 71 1737 LD HL,LWRD exit + 00005DEB CD 52 81 1738 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005DEE C3 29 81 1739 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00005DF1 1740 bitmap_dump: + 00005DF1 CD AE 81 1741 CALL LWRD ?ENT_AUTO_DIRECT_L09 + 00005DF4 FA FF 1742 DEFW 65530 + 00005DF6 DD 6E 0A 1743 LD L,(IX+10) + 00005DF9 DD 66 0B 1744 LD H,(IX+11) + 00005DFC DD 75 FC 1745 LD (IX-4),L + 00005DFF DD 74 FD 1746 LD (IX-3),H + 00005E02 1747 ?0148: + 00005E02 DD 6E 10 1748 LD L,(IX+16) + 00005E05 DD 66 11 1749 LD H,(IX+17) + 00005E08 E5 1750 PUSH HL + 00005E09 DD 6E 0E 1751 LD L,(IX+14) + 00005E0C DD 66 0F 1752 LD H,(IX+15) + 00005E0F E5 1753 PUSH HL + 00005E10 DD 6E FC 1754 LD L,(IX-4) + 00005E13 DD 66 FD 1755 LD H,(IX-3) + 00005E16 01 00 00 1756 LD BC,0 + 00005E19 CD 7D 81 1757 CALL LWRD ?SL_CMP_L03 + 00005E1C D2 E4 5E 1758 JP NC,?0147 + 00005E1F 1759 ?0149: + 00005E1F DD 4E 0E 1760 LD C,(IX+14) + 00005E22 DD 46 0F 1761 LD B,(IX+15) + 00005E25 DD 6E FC 1762 LD L,(IX-4) + 00005E28 DD 66 FD 1763 LD H,(IX-3) + 00005E2B 3E 02 1764 LD A,2 + 00005E2D 84 1765 ADD A,H + 00005E2E 67 1766 LD H,A + 00005E2F 7D 1767 LD A,L + 00005E30 E6 00 1768 AND 0 + 00005E32 5F 1769 LD E,A + 00005E33 7C 1770 LD A,H + 00005E34 E6 FE 1771 AND 254 + 00005E36 57 1772 LD D,A + 00005E37 3E 00 1773 LD A,BYTE3 int_min + 00005E39 21 75 5F 1774 LD HL,LWRD int_min + 00005E3C CD 52 81 1775 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005E3F DD 75 FE 1776 LD (IX-2),L + 00005E42 DD 74 FF 1777 LD (IX-1),H + 00005E45 DD 4E FC 1778 LD C,(IX-4) + 00005E48 DD 46 FD 1779 LD B,(IX-3) + 00005E4B A7 1780 AND A + 00005E4C ED 42 1781 SBC HL,BC + 00005E4E 01 00 02 1782 LD BC,512 + 00005E51 A7 1783 AND A + 00005E52 ED 42 1784 SBC HL,BC + 00005E54 30 1B 1785 JR NC,?0151 + 00005E56 1786 ?0150: + 00005E56 06 09 1787 LD B,9 + 00005E58 DD 5E FC 1788 LD E,(IX-4) + 00005E5B DD 56 FD 1789 LD D,(IX-3) + 00005E5E CD 1F 81 1790 CALL LWRD ?US_RSH_L02 + 00005E61 3E 00 1791 LD A,BYTE3 daread + 00005E63 21 94 50 1792 LD HL,LWRD daread + 00005E66 CD 52 81 1793 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005E69 DD 75 FA 1794 LD (IX-6),L + 00005E6C DD 74 FB 1795 LD (IX-5),H + 00005E6F 18 08 1796 JR ?0152 + 00005E71 1797 ?0151: + 00005E71 DD 36 FA 8D 1798 LD (IX-6),LOW(zeroed) + 00005E75 DD 36 FB 93 1799 LD (IX-5),HIGH(zeroed) + 00005E79 1800 ?0152: + 00005E79 DD 4E FC 1801 LD C,(IX-4) + 00005E7C DD 46 FD 1802 LD B,(IX-3) + 00005E7F DD 6E FE 1803 LD L,(IX-2) + 00005E82 DD 66 FF 1804 LD H,(IX-1) + 00005E85 A7 1805 AND A + 00005E86 ED 42 1806 SBC HL,BC + 00005E88 E5 1807 PUSH HL + 00005E89 79 1808 LD A,C + 00005E8A E6 FF 1809 AND 255 + 00005E8C 6F 1810 LD L,A + 00005E8D 78 1811 LD A,B + 00005E8E E6 01 1812 AND 1 + 00005E90 67 1813 LD H,A + 00005E91 DD 5E FA 1814 LD E,(IX-6) + 00005E94 DD 56 FB 1815 LD D,(IX-5) + 00005E97 19 1816 ADD HL,DE + 00005E98 4D 1817 LD C,L + 00005E99 44 1818 LD B,H + 00005E9A DD 5E 0A 1819 LD E,(IX+10) + 00005E9D DD 56 0B 1820 LD D,(IX+11) + 00005EA0 DD 6E FC 1821 LD L,(IX-4) + 00005EA3 DD 66 FD 1822 LD H,(IX-3) + 00005EA6 A7 1823 AND A + 00005EA7 ED 52 1824 SBC HL,DE + 00005EA9 DD 5E 02 1825 LD E,(IX+2) + 00005EAC DD 56 03 1826 LD D,(IX+3) + 00005EAF 19 1827 ADD HL,DE + 00005EB0 EB 1828 EX DE,HL + 00005EB1 3E 00 1829 LD A,BYTE3 bcopy + 00005EB3 21 3D 5F 1830 LD HL,LWRD bcopy + 00005EB6 CD 52 81 1831 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005EB9 E1 1832 POP HL + 00005EBA DD 4E FA 1833 LD C,(IX-6) + 00005EBD DD 46 FB 1834 LD B,(IX-5) + 00005EC0 C5 1835 PUSH BC + 00005EC1 06 09 1836 LD B,9 + 00005EC3 DD 5E FC 1837 LD E,(IX-4) + 00005EC6 DD 56 FD 1838 LD D,(IX-3) + 00005EC9 CD 1F 81 1839 CALL LWRD ?US_RSH_L02 + 00005ECC 3E 00 1840 LD A,BYTE3 dwrite + 00005ECE 21 D3 50 1841 LD HL,LWRD dwrite + 00005ED1 C1 1842 POP BC + 00005ED2 CD 52 81 1843 CALL LWRD ?BANK_CALL_DIRECT_L08 + 00005ED5 DD 6E FE 1844 LD L,(IX-2) + 00005ED8 DD 66 FF 1845 LD H,(IX-1) + 00005EDB DD 75 FC 1846 LD (IX-4),L + 00005EDE DD 74 FD 1847 LD (IX-3),H + 00005EE1 C3 02 5E 1848 JP LWRD ?0148 + 00005EE4 1849 ?0147: + 00005EE4 C3 29 81 1850 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 1851 RSEG CSTR + 000083F7 1852 ?0005: + 000083F7 52 65 61 64 20 6F 66 1853 DEFB 'Read of block %d failed.' + 20 62 6C 6F 63 6B 20 + 25 64 20 66 61 69 6C + 65 64 2E + 0000840F 0A 00 1854 DEFB 10,0 + 00008411 1855 ?0008: + 00008411 57 72 69 74 65 20 6F 1856 DEFB 'Write of block %d failed.' + 66 20 62 6C 6F 63 6B + 20 25 64 20 66 61 69 + 6C 65 64 2E + 0000842A 0A 00 1857 DEFB 10,0 + 0000842C 1858 ?0011: + 0000842C 63 61 6E 27 74 20 73 1859 DEFB 'can''t seek: ' + 65 65 6B 3A 20 + 00008438 00 1860 DEFB 0 + 00008439 1861 ?0017: + 00008439 63 61 6E 27 74 20 72 1862 DEFB 'can''t read: ' + 65 61 64 3A 20 + 00008445 00 1863 DEFB 0 + 00008446 1864 ?0022: + 00008446 63 61 6E 27 74 20 77 1865 DEFB 'can''t write: ' + 72 69 74 65 3A 20 + 00008453 00 1866 DEFB 0 + 00008454 1867 ?0025: + 00008454 59 1868 DEFB 'Y' + 00008455 0A 00 1869 DEFB 10,0 + 00008457 1870 ?0036: + 00008457 43 72 65 61 74 69 6E 1871 DEFB 'Creating boot block...' + 67 20 62 6F 6F 74 20 + 62 6C 6F 63 6B 2E 2E + 2E + 0000846D 0A 00 1872 DEFB 10,0 + 0000846F 1873 ?0046: + 0000846F 49 6E 69 74 69 61 6C 1874 DEFB 'Initializing inodes, be patient...' + 69 7A 69 6E 67 20 69 + 6E 6F 64 65 73 2C 20 + 62 65 20 70 61 74 69 + 65 6E 74 2E 2E 2E + 00008491 0A 00 1875 DEFB 10,0 + 00008493 1876 ?0057: + 00008493 42 6C 6B 20 23 25 64 1877 DEFB 'Blk #%d' + 0000849A 0D 00 1878 DEFB 13,0 + 0000849C 1879 ?0060: + 0000849C 42 6C 6B 20 23 25 64 1880 DEFB 'Blk #%d' + 000084A3 0A 00 1881 DEFB 10,0 + 000084A5 1882 ?0063: + 000084A5 43 72 65 61 74 69 6E 1883 DEFB 'Creating super block...' + 67 20 73 75 70 65 72 + 20 62 6C 6F 63 6B 2E + 2E 2E + 000084BC 0A 00 1884 DEFB 10,0 + 000084BE 1885 ?0088: + 000084BE 4C 6F 77 20 6C 65 76 1886 DEFB 'Low level formatting...' + 65 6C 20 66 6F 72 6D + 61 74 74 69 6E 67 2E + 2E 2E + 000084D5 0A 00 1887 DEFB 10,0 + 000084D7 1888 ?0108: + 000084D7 49 6C 6C 65 67 61 6C 1889 DEFB 'Illegal switch %s' + 20 73 77 69 74 63 68 + 20 25 73 + 000084E8 0A 00 1890 DEFB 10,0 + 000084EA 1891 ?0111: + 000084EA 75 73 61 67 65 3A 20 1892 DEFB 'usage: mkfs [-yfqvb] device fsize isize [rsize]' + 6D 6B 66 73 20 5B 2D + 79 66 71 76 62 5D 20 + 64 65 76 69 63 65 20 + 66 73 69 7A 65 20 69 + 73 69 7A 65 20 5B 72 + 73 69 7A 65 5D + 00008519 0A 00 1893 DEFB 10,0 + 0000851B 1894 ?0114: + 0000851B 63 61 6E 27 74 20 6F 1895 DEFB 'can''t open: ' + 70 65 6E 3A 20 + 00008527 00 1896 DEFB 0 + 00008528 1897 ?0121: + 00008528 42 61 64 20 70 61 72 1898 DEFB 'Bad parameter values' + 61 6D 65 74 65 72 20 + 76 61 6C 75 65 73 + 0000853C 0A 00 1899 DEFB 10,0 + 0000853E 1900 ?0124: + 0000853E 0A 1901 DEFB 10 + 0000853F 4D 61 6B 69 6E 67 20 1902 DEFB 'Making filesystem on %s, fsize %u, isize %u, rsize %u. ' + 66 69 6C 65 73 79 73 + 74 65 6D 20 6F 6E 20 + 25 73 2C 20 66 73 69 + 7A 65 20 25 75 2C 20 + 69 73 69 7A 65 20 25 + 75 2C 20 72 73 69 7A + 65 20 25 75 2E 20 + 00008576 00 1903 DEFB 0 + 00008577 1904 ?0127: + 00008577 43 6F 6E 66 69 72 6D 1905 DEFB 'Confirm? ' + 3F 20 + 00008580 00 1906 DEFB 0 + 00008581 1907 ?0128: + 00008581 0A 00 1908 DEFB 10,0 + 00008583 1909 ?0133: + 00008583 69 6E 6F 64 65 20 62 1910 DEFB 'inode bitmap' + 69 74 6D 61 70 + 0000858F 00 1911 DEFB 0 + 00008590 1912 ?0137: + 00008590 62 6C 6F 63 6B 20 62 1913 DEFB 'block bitmap' + 69 74 6D 61 70 + 0000859C 00 1914 DEFB 0 + 0000859D 1915 ?0142: + 0000859D 6C 6F 63 6B 20 62 69 1916 DEFB 'lock bitmap' + 74 6D 61 70 + 000085A8 00 1917 DEFB 0 + 000085A9 1918 ?0143: + 000085A9 4E 6F 74 20 65 6E 6F 1919 DEFB 'Not enough memory for %s.' + 75 67 68 20 6D 65 6D + 6F 72 79 20 66 6F 72 + 20 25 73 2E + 000085C2 0A 00 1920 DEFB 10,0 + 000085C4 1921 ?0146: + 000085C4 46 69 6C 65 73 79 73 1922 DEFB 'Filesystem on %s successfully initialized!' + 74 65 6D 20 6F 6E 20 + 25 73 20 73 75 63 63 + 65 73 73 66 75 6C 6C + 79 20 69 6E 69 74 69 + 61 6C 69 7A 65 64 21 + 000085EE 0A 0A 00 1923 DEFB 10,10,0 + 1924 RSEG UDATA0 + 0000918B 1925 device_handle: + 0000918B 1926 DEFS 2 + 0000918D 1927 device_name: + 0000918D 1928 DEFS 512 + 0000938D 1929 zeroed: + 0000938D 1930 DEFS 512 + 0000958D 1931 dev: + 0000958D 1932 DEFS 2 + 0000958F 1933 inode: + 0000958F 1934 DEFS 512 + 0000978F 1935 bitmap_inode: + 0000978F 1936 DEFS 4 + 00009793 1937 bitmap_block: + 00009793 1938 DEFS 4 + 00009797 1939 bitmap_immov: + 00009797 1940 DEFS 4 + 0000979B 1941 bitmap_final: + 0000979B 1942 DEFS 4 + 0000979F 1943 inode_bitmap: + 0000979F 1944 DEFS 2 + 000097A1 1945 block_bitmap: + 000097A1 1946 DEFS 2 + 000097A3 1947 immov_bitmap: + 000097A3 1948 DEFS 2 + 000097A5 1949 ?0002: + 000097A5 1950 DEFS 512 + 1951 RSEG IDATA0 + 00008629 1952 bootblock: + 00008629 1953 DEFS 2048 + 00008E29 1954 dirbuf: + 00008E29 1955 DEFS 512 + 00009029 1956 _fmt: + 00009029 1957 DEFS 1 + 0000902A 1958 _yes: + 0000902A 1959 DEFS 1 + 0000902B 1960 _quick: + 0000902B 1961 DEFS 1 + 0000902C 1962 _verb: + 0000902C 1963 DEFS 1 + 0000902D 1964 _immov: + 0000902D 1965 DEFS 1 + 1966 RSEG CDATA0 + 00008629 35 1967 DEFB '5' + 0000862A 32 1968 DEFB '2' + 0000862B 43 1969 DEFB 'C' + 0000862C 38 1970 DEFB '8' + 0000862D 30 1971 DEFB '0' + 0000862E 33 1972 DEFB '3' + 0000862F 30 1973 DEFB '0' + 00008630 38 1974 DEFB '8' + 00008631 32 1975 DEFB '2' + 00008632 31 1976 DEFB '1' + 00008633 31 1977 DEFB '1' + 00008634 38 1978 DEFB '8' + 00008635 34 1979 DEFB '4' + 00008636 30 1980 DEFB '0' + 00008637 32 1981 DEFB '2' + 00008638 34 1982 DEFB '4' + 00008639 31 1983 DEFB '1' + 0000863A 00 1984 DEFB 0 + 0000863B 10 1985 DEFB 16 + 0000863C CD 1986 DEFB 205 + 0000863D 0E 1987 DEFB 14 + 0000863E 07 1988 DEFB 7 + 0000863F CD 1989 DEFB 205 + 00008640 16 1990 DEFB 22 + 00008641 06 1991 DEFB 6 + 00008642 CD 1992 DEFB 205 + 00008643 6D 1993 DEFB 'm' + 00008644 05 1994 DEFB 5 + 00008645 18 1995 DEFB 24 + 00008646 22 1996 DEFB '"' + 00008647 00 1997 DEFB 0 + 00008648 00 1998 DEFB 0 + 00008649 00 1999 DEFB 0 + 0000864A 42 2000 DEFB 'B' + 0000864B 4F 2001 DEFB 'O' + 0000864C 4F 2002 DEFB 'O' + 0000864D 54 2003 DEFB 'T' + 0000864E 20 2004 DEFB ' ' + 0000864F 20 2005 DEFB ' ' + 00008650 20 2006 DEFB ' ' + 00008651 20 2007 DEFB ' ' + 00008652 42 2008 DEFB 'B' + 00008653 49 2009 DEFB 'I' + 00008654 4E 2010 DEFB 'N' + 00008655 00 2011 DEFB 0 + 00008656 00 2012 DEFB 0 + 00008657 00 2013 DEFB 0 + 00008658 10 2014 DEFB 16 + 00008659 00 2015 DEFB 0 + 0000865A 01 2016 DEFB 1 + 0000865B 00 2017 DEFB 0 + 0000865C 00 2018 DEFB 0 + 0000865D 00 2019 DEFB 0 + 0000865E 00 2020 DEFB 0 + 0000865F 00 2021 DEFB 0 + 00008660 00 2022 DEFB 0 + 00008661 00 2023 DEFB 0 + 00008662 00 2024 DEFB 0 + 00008663 00 2025 DEFB 0 + 00008664 00 2026 DEFB 0 + 00008665 00 2027 DEFB 0 + 00008666 00 2028 DEFB 0 + 00008667 00 2029 DEFB 0 + 00008668 00 2030 DEFB 0 + 00008669 CD 2031 DEFB 205 + 0000866A 56 2032 DEFB 'V' + 0000866B 01 2033 DEFB 1 + 0000866C 6C 2034 DEFB 'l' + 0000866D 6F 2035 DEFB 'o' + 0000866E 61 2036 DEFB 'a' + 0000866F 64 2037 DEFB 'd' + 00008670 69 2038 DEFB 'i' + 00008671 6E 2039 DEFB 'n' + 00008672 67 2040 DEFB 'g' + 00008673 20 2041 DEFB ' ' + 00008674 2F 2042 DEFB '/' + 00008675 62 2043 DEFB 'b' + 00008676 6F 2044 DEFB 'o' + 00008677 6F 2045 DEFB 'o' + 00008678 74 2046 DEFB 't' + 00008679 2F 2047 DEFB '/' + 0000867A 6B 2048 DEFB 'k' + 0000867B 65 2049 DEFB 'e' + 0000867C 72 2050 DEFB 'r' + 0000867D 6E 2051 DEFB 'n' + 0000867E 65 2052 DEFB 'e' + 0000867F 6C 2053 DEFB 'l' + 00008680 2E 2054 DEFB '.' + 00008681 62 2055 DEFB 'b' + 00008682 69 2056 DEFB 'i' + 00008683 6E 2057 DEFB 'n' + 00008684 0D 2058 DEFB 13 + 00008685 0A 2059 DEFB 10 + 00008686 00 2060 DEFB 0 + 00008687 CD 2061 DEFB 205 + 00008688 B0 2062 DEFB 176 + 00008689 01 2063 DEFB 1 + 0000868A CD 2064 DEFB 205 + 0000868B 9B 2065 DEFB 155 + 0000868C 00 2066 DEFB 0 + 0000868D CD 2067 DEFB 205 + 0000868E 70 2068 DEFB 'p' + 0000868F 02 2069 DEFB 2 + 00008690 CD 2070 DEFB 205 + 00008691 90 2071 DEFB 144 + 00008692 01 2072 DEFB 1 + 00008693 CD 2073 DEFB 205 + 00008694 17 2074 DEFB 23 + 00008695 05 2075 DEFB 5 + 00008696 CD 2076 DEFB 205 + 00008697 35 2077 DEFB '5' + 00008698 05 2078 DEFB 5 + 00008699 ED 2079 DEFB 237 + 0000869A 5B 2080 DEFB '[' + 0000869B 0F 2081 DEFB 15 + 0000869C 0E 2082 DEFB 14 + 0000869D D5 2083 DEFB 213 + 0000869E 21 2084 DEFB '!' + 0000869F 8C 2085 DEFB 140 + 000086A0 00 2086 DEFB 0 + 000086A1 0E 2087 DEFB 14 + 000086A2 0F 2088 DEFB 15 + 000086A3 ED 2089 DEFB 237 + 000086A4 B0 2090 DEFB 176 + 000086A5 C1 2091 DEFB 193 + 000086A6 2A 2092 DEFB '*' + 000086A7 11 2093 DEFB 17 + 000086A8 0E 2094 DEFB 14 + 000086A9 F9 2095 DEFB 249 + 000086AA 11 2096 DEFB 17 + 000086AB 33 2097 DEFB '3' + 000086AC 00 2098 DEFB 0 + 000086AD 19 2099 DEFB 25 + 000086AE EB 2100 DEFB 235 + 000086AF 2A 2101 DEFB '*' + 000086B0 0B 2102 DEFB 11 + 000086B1 0E 2103 DEFB 14 + 000086B2 97 2104 DEFB 151 + 000086B3 C5 2105 DEFB 197 + 000086B4 C9 2106 DEFB 201 + 000086B5 ED 2107 DEFB 237 + 000086B6 39 2108 DEFB '9' + 000086B7 39 2109 DEFB '9' + 000086B8 3E 2110 DEFB '>' + 000086B9 F1 2111 DEFB 241 + 000086BA ED 2112 DEFB 237 + 000086BB 39 2113 DEFB '9' + 000086BC 3A 2114 DEFB ':' + 000086BD 3A 2115 DEFB ':' + 000086BE 80 2116 DEFB 128 + 000086BF 10 2117 DEFB 16 + 000086C0 ED 2118 DEFB 237 + 000086C1 39 2119 DEFB '9' + 000086C2 38 2120 DEFB '8' + 000086C3 E9 2121 DEFB 233 + 000086C4 11 2122 DEFB 17 + 000086C5 04 2123 DEFB 4 + 000086C6 00 2124 DEFB 0 + 000086C7 21 2125 DEFB '!' + 000086C8 E5 2126 DEFB 229 + 000086C9 07 2127 DEFB 7 + 000086CA CD 2128 DEFB 205 + 000086CB C5 2129 DEFB 197 + 000086CC 04 2130 DEFB 4 + 000086CD 2A 2131 DEFB '*' + 000086CE E5 2132 DEFB 229 + 000086CF 07 2133 DEFB 7 + 000086D0 11 2134 DEFB 17 + 000086D1 C6 2135 DEFB 198 + 000086D2 31 2136 DEFB '1' + 000086D3 B7 2137 DEFB 183 + 000086D4 ED 2138 DEFB 237 + 000086D5 52 2139 DEFB 'R' + 000086D6 20 2140 DEFB ' ' + 000086D7 4E 2141 DEFB 'N' + 000086D8 2A 2142 DEFB '*' + 000086D9 E7 2143 DEFB 231 + 000086DA 07 2144 DEFB 7 + 000086DB 22 2145 DEFB '"' + 000086DC 93 2146 DEFB 147 + 000086DD 07 2147 DEFB 7 + 000086DE 2A 2148 DEFB '*' + 000086DF E9 2149 DEFB 233 + 000086E0 07 2150 DEFB 7 + 000086E1 22 2151 DEFB '"' + 000086E2 95 2152 DEFB 149 + 000086E3 07 2153 DEFB 7 + 000086E4 2A 2154 DEFB '*' + 000086E5 EB 2155 DEFB 235 + 000086E6 07 2156 DEFB 7 + 000086E7 22 2157 DEFB '"' + 000086E8 97 2158 DEFB 151 + 000086E9 07 2159 DEFB 7 + 000086EA C9 2160 DEFB 201 + 000086EB 2A 2161 DEFB '*' + 000086EC FF 2162 DEFB 255 + 000086ED 0D 2163 DEFB 13 + 000086EE 11 2164 DEFB 17 + 000086EF C9 2165 DEFB 201 + 000086F0 A6 2166 DEFB 166 + 000086F1 B7 2167 DEFB 183 + 000086F2 ED 2168 DEFB 237 + 000086F3 52 2169 DEFB 'R' + 000086F4 C8 2170 DEFB 200 + 000086F5 CD 2171 DEFB 205 + 000086F6 56 2172 DEFB 'V' + 000086F7 01 2173 DEFB 1 + 000086F8 62 2174 DEFB 'b' + 000086F9 61 2175 DEFB 'a' + 000086FA 64 2176 DEFB 'd' + 000086FB 20 2177 DEFB ' ' + 000086FC 65 2178 DEFB 'e' + 000086FD 5F 2179 DEFB '_' + 000086FE 6D 2180 DEFB 'm' + 000086FF 61 2181 DEFB 'a' + 00008700 67 2182 DEFB 'g' + 00008701 69 2183 DEFB 'i' + 00008702 63 2184 DEFB 'c' + 00008703 3A 2185 DEFB ':' + 00008704 20 2186 DEFB ' ' + 00008705 00 2187 DEFB 0 + 00008706 18 2188 DEFB 24 + 00008707 2D 2189 DEFB '-' + 00008708 2A 2190 DEFB '*' + 00008709 01 2191 DEFB 1 + 0000870A 0E 2192 DEFB 14 + 0000870B 11 2193 DEFB 17 + 0000870C 03 2194 DEFB 3 + 0000870D 00 2195 DEFB 0 + 0000870E B7 2196 DEFB 183 + 0000870F ED 2197 DEFB 237 + 00008710 52 2198 DEFB 'R' + 00008711 C8 2199 DEFB 200 + 00008712 CD 2200 DEFB 205 + 00008713 56 2201 DEFB 'V' + 00008714 01 2202 DEFB 1 + 00008715 62 2203 DEFB 'b' + 00008716 61 2204 DEFB 'a' + 00008717 64 2205 DEFB 'd' + 00008718 20 2206 DEFB ' ' + 00008719 65 2207 DEFB 'e' + 0000871A 5F 2208 DEFB '_' + 0000871B 66 2209 DEFB 'f' + 0000871C 6F 2210 DEFB 'o' + 0000871D 72 2211 DEFB 'r' + 0000871E 6D 2212 DEFB 'm' + 0000871F 61 2213 DEFB 'a' + 00008720 74 2214 DEFB 't' + 00008721 3A 2215 DEFB ':' + 00008722 20 2216 DEFB ' ' + 00008723 00 2217 DEFB 0 + 00008724 18 2218 DEFB 24 + 00008725 0F 2219 DEFB 15 + 00008726 CD 2220 DEFB 205 + 00008727 56 2221 DEFB 'V' + 00008728 01 2222 DEFB 1 + 00008729 62 2223 DEFB 'b' + 0000872A 61 2224 DEFB 'a' + 0000872B 64 2225 DEFB 'd' + 0000872C 20 2226 DEFB ' ' + 0000872D 6D 2227 DEFB 'm' + 0000872E 61 2228 DEFB 'a' + 0000872F 67 2229 DEFB 'g' + 00008730 69 2230 DEFB 'i' + 00008731 63 2231 DEFB 'c' + 00008732 3A 2232 DEFB ':' + 00008733 20 2233 DEFB ' ' + 00008734 00 2234 DEFB 0 + 00008735 19 2235 DEFB 25 + 00008736 CD 2236 DEFB 205 + 00008737 1F 2237 DEFB 31 + 00008738 06 2238 DEFB 6 + 00008739 CD 2239 DEFB 205 + 0000873A 16 2240 DEFB 22 + 0000873B 06 2241 DEFB 6 + 0000873C CD 2242 DEFB 205 + 0000873D 56 2243 DEFB 'V' + 0000873E 01 2244 DEFB 1 + 0000873F 64 2245 DEFB 'd' + 00008740 6F 2246 DEFB 'o' + 00008741 69 2247 DEFB 'i' + 00008742 6E 2248 DEFB 'n' + 00008743 67 2249 DEFB 'g' + 00008744 20 2250 DEFB ' ' + 00008745 61 2251 DEFB 'a' + 00008746 20 2252 DEFB ' ' + 00008747 63 2253 DEFB 'c' + 00008748 6C 2254 DEFB 'l' + 00008749 65 2255 DEFB 'e' + 0000874A 61 2256 DEFB 'a' + 0000874B 6E 2257 DEFB 'n' + 0000874C 20 2258 DEFB ' ' + 0000874D 62 2259 DEFB 'b' + 0000874E 6F 2260 DEFB 'o' + 0000874F 6F 2261 DEFB 'o' + 00008750 74 2262 DEFB 't' + 00008751 0D 2263 DEFB 13 + 00008752 0A 2264 DEFB 10 + 00008753 00 2265 DEFB 0 + 00008754 21 2266 DEFB '!' + 00008755 E5 2267 DEFB 229 + 00008756 07 2268 DEFB 7 + 00008757 11 2269 DEFB 17 + 00008758 E6 2270 DEFB 230 + 00008759 07 2271 DEFB 7 + 0000875A 01 2272 DEFB 1 + 0000875B FF 2273 DEFB 255 + 0000875C 01 2274 DEFB 1 + 0000875D 36 2275 DEFB '6' + 0000875E AA 2276 DEFB 170 + 0000875F ED 2277 DEFB 237 + 00008760 B0 2278 DEFB 176 + 00008761 11 2279 DEFB 17 + 00008762 00 2280 DEFB 0 + 00008763 00 2281 DEFB 0 + 00008764 06 2282 DEFB 6 + 00008765 04 2283 DEFB 4 + 00008766 C5 2284 DEFB 197 + 00008767 D5 2285 DEFB 213 + 00008768 21 2286 DEFB '!' + 00008769 E5 2287 DEFB 229 + 0000876A 07 2288 DEFB 7 + 0000876B CD 2289 DEFB 205 + 0000876C D3 2290 DEFB 211 + 0000876D 04 2291 DEFB 4 + 0000876E D1 2292 DEFB 209 + 0000876F C1 2293 DEFB 193 + 00008770 13 2294 DEFB 19 + 00008771 10 2295 DEFB 16 + 00008772 F3 2296 DEFB 243 + 00008773 3E 2297 DEFB '>' + 00008774 AA 2298 DEFB 170 + 00008775 ED 2299 DEFB 237 + 00008776 39 2300 DEFB '9' + 00008777 0B 2301 DEFB 11 + 00008778 3E 2302 DEFB '>' + 00008779 13 2303 DEFB 19 + 0000877A ED 2304 DEFB 237 + 0000877B 39 2305 DEFB '9' + 0000877C 0A 2306 DEFB 10 + 0000877D 18 2307 DEFB 24 + 0000877E FE 2308 DEFB 254 + 0000877F CD 2309 DEFB 205 + 00008780 37 2310 DEFB '7' + 00008781 06 2311 DEFB 6 + 00008782 67 2312 DEFB 'g' + 00008783 62 2313 DEFB 'b' + 00008784 6F 2314 DEFB 'o' + 00008785 6F 2315 DEFB 'o' + 00008786 74 2316 DEFB 't' + 00008787 3A 2317 DEFB ':' + 00008788 20 2318 DEFB ' ' + 00008789 00 2319 DEFB 0 + 0000878A C3 2320 DEFB 195 + 0000878B 37 2321 DEFB '7' + 0000878C 06 2322 DEFB 6 + 0000878D 11 2323 DEFB 17 + 0000878E 02 2324 DEFB 2 + 0000878F 00 2325 DEFB 0 + 00008790 CD 2326 DEFB 205 + 00008791 84 2327 DEFB 132 + 00008792 01 2328 DEFB 1 + 00008793 3E 2329 DEFB '>' + 00008794 81 2330 DEFB 129 + 00008795 ED 2331 DEFB 237 + 00008796 39 2332 DEFB '9' + 00008797 0B 2333 DEFB 11 + 00008798 3E 2334 DEFB '>' + 00008799 13 2335 DEFB 19 + 0000879A ED 2336 DEFB 237 + 0000879B 39 2337 DEFB '9' + 0000879C 0A 2338 DEFB 10 + 0000879D 97 2339 DEFB 151 + 0000879E 3D 2340 DEFB '=' + 0000879F 20 2341 DEFB ' ' + 000087A0 FD 2342 DEFB 253 + 000087A1 3D 2343 DEFB '=' + 000087A2 20 2344 DEFB ' ' + 000087A3 FD 2345 DEFB 253 + 000087A4 3D 2346 DEFB '=' + 000087A5 20 2347 DEFB ' ' + 000087A6 FD 2348 DEFB 253 + 000087A7 3D 2349 DEFB '=' + 000087A8 20 2350 DEFB ' ' + 000087A9 FD 2351 DEFB 253 + 000087AA 11 2352 DEFB 17 + 000087AB 00 2353 DEFB 0 + 000087AC 02 2354 DEFB 2 + 000087AD 21 2355 DEFB '!' + 000087AE 81 2356 DEFB 129 + 000087AF FC 2357 DEFB 252 + 000087B0 E5 2358 DEFB 229 + 000087B1 FD 2359 DEFB 253 + 000087B2 E1 2360 DEFB 225 + 000087B3 01 2361 DEFB 1 + 000087B4 05 2362 DEFB 5 + 000087B5 00 2363 DEFB 0 + 000087B6 C3 2364 DEFB 195 + 000087B7 46 2365 DEFB 'F' + 000087B8 06 2366 DEFB 6 + 000087B9 CD 2367 DEFB 205 + 000087BA 56 2368 DEFB 'V' + 000087BB 01 2369 DEFB 1 + 000087BC 73 2370 DEFB 's' + 000087BD 74 2371 DEFB 't' + 000087BE 61 2372 DEFB 'a' + 000087BF 72 2373 DEFB 'r' + 000087C0 74 2374 DEFB 't' + 000087C1 69 2375 DEFB 'i' + 000087C2 6E 2376 DEFB 'n' + 000087C3 67 2377 DEFB 'g' + 000087C4 20 2378 DEFB ' ' + 000087C5 6F 2379 DEFB 'o' + 000087C6 70 2380 DEFB 'p' + 000087C7 65 2381 DEFB 'e' + 000087C8 72 2382 DEFB 'r' + 000087C9 61 2383 DEFB 'a' + 000087CA 74 2384 DEFB 't' + 000087CB 69 2385 DEFB 'i' + 000087CC 6E 2386 DEFB 'n' + 000087CD 67 2387 DEFB 'g' + 000087CE 20 2388 DEFB ' ' + 000087CF 73 2389 DEFB 's' + 000087D0 79 2390 DEFB 'y' + 000087D1 73 2391 DEFB 's' + 000087D2 74 2392 DEFB 't' + 000087D3 65 2393 DEFB 'e' + 000087D4 6D 2394 DEFB 'm' + 000087D5 0D 2395 DEFB 13 + 000087D6 0A 2396 DEFB 10 + 000087D7 00 2397 DEFB 0 + 000087D8 C9 2398 DEFB 201 + 000087D9 CD 2399 DEFB 205 + 000087DA 64 2400 DEFB 'd' + 000087DB 01 2401 DEFB 1 + 000087DC 3E 2402 DEFB '>' + 000087DD 10 2403 DEFB 16 + 000087DE ED 2404 DEFB 237 + 000087DF 39 2405 DEFB '9' + 000087E0 3A 2406 DEFB ':' + 000087E1 3E 2407 DEFB '>' + 000087E2 FF 2408 DEFB 255 + 000087E3 ED 2409 DEFB 237 + 000087E4 39 2410 DEFB '9' + 000087E5 38 2411 DEFB '8' + 000087E6 11 2412 DEFB 17 + 000087E7 01 2413 DEFB 1 + 000087E8 1F 2414 DEFB 31 + 000087E9 01 2415 DEFB 1 + 000087EA FF 2416 DEFB 255 + 000087EB 00 2417 DEFB 0 + 000087EC CD 2418 DEFB 205 + 000087ED E8 2419 DEFB 232 + 000087EE 01 2420 DEFB 1 + 000087EF 21 2421 DEFB '!' + 000087F0 00 2422 DEFB 0 + 000087F1 F1 2423 DEFB 241 + 000087F2 22 2424 DEFB '"' + 000087F3 80 2425 DEFB 128 + 000087F4 1F 2426 DEFB 31 + 000087F5 97 2427 DEFB 151 + 000087F6 ED 2428 DEFB 237 + 000087F7 39 2429 DEFB '9' + 000087F8 38 2430 DEFB '8' + 000087F9 11 2431 DEFB 17 + 000087FA 01 2432 DEFB 1 + 000087FB 10 2433 DEFB 16 + 000087FC 0D 2434 DEFB 13 + 000087FD CD 2435 DEFB 205 + 000087FE E8 2436 DEFB 232 + 000087FF 01 2437 DEFB 1 + 00008800 21 2438 DEFB '!' + 00008801 80 2439 DEFB 128 + 00008802 0F 2440 DEFB 15 + 00008803 22 2441 DEFB '"' + 00008804 FC 2442 DEFB 252 + 00008805 10 2443 DEFB 16 + 00008806 21 2444 DEFB '!' + 00008807 80 2445 DEFB 128 + 00008808 10 2446 DEFB 16 + 00008809 22 2447 DEFB '"' + 0000880A FE 2448 DEFB 254 + 0000880B 10 2449 DEFB 16 + 0000880C C9 2450 DEFB 201 + 0000880D CD 2451 DEFB 205 + 0000880E 0B 2452 DEFB 11 + 0000880F 02 2453 DEFB 2 + 00008810 D8 2454 DEFB 216 + 00008811 6B 2455 DEFB 'k' + 00008812 62 2456 DEFB 'b' + 00008813 2B 2457 DEFB '+' + 00008814 36 2458 DEFB '6' + 00008815 00 2459 DEFB 0 + 00008816 79 2460 DEFB 'y' + 00008817 B0 2461 DEFB 176 + 00008818 C8 2462 DEFB 200 + 00008819 ED 2463 DEFB 237 + 0000881A B0 2464 DEFB 176 + 0000881B C9 2465 DEFB 201 + 0000881C B7 2466 DEFB 183 + 0000881D ED 2467 DEFB 237 + 0000881E 52 2468 DEFB 'R' + 0000881F D0 2469 DEFB 208 + 00008820 19 2470 DEFB 25 + 00008821 EB 2471 DEFB 235 + 00008822 C9 2472 DEFB 201 + 00008823 2A 2473 DEFB '*' + 00008824 07 2474 DEFB 7 + 00008825 0E 2475 DEFB 14 + 00008826 11 2476 DEFB 17 + 00008827 14 2477 DEFB 20 + 00008828 00 2478 DEFB 0 + 00008829 18 2479 DEFB 24 + 0000882A 11 2480 DEFB 17 + 0000882B 2A 2481 DEFB '*' + 0000882C 0D 2482 DEFB 13 + 0000882D 0E 2483 DEFB 14 + 0000882E ED 2484 DEFB 237 + 0000882F 5B 2485 DEFB '[' + 00008830 09 2486 DEFB 9 + 00008831 0E 2487 DEFB 14 + 00008832 18 2488 DEFB 24 + 00008833 08 2489 DEFB 8 + 00008834 2A 2490 DEFB '*' + 00008835 11 2491 DEFB 17 + 00008836 0E 2492 DEFB 14 + 00008837 ED 2493 DEFB 237 + 00008838 5B 2494 DEFB '[' + 00008839 0D 2495 DEFB 13 + 0000883A 0E 2496 DEFB 14 + 0000883B 13 2497 DEFB 19 + 0000883C B7 2498 DEFB 183 + 0000883D ED 2499 DEFB 237 + 0000883E 52 2500 DEFB 'R' + 0000883F 4D 2501 DEFB 'M' + 00008840 44 2502 DEFB 'D' + 00008841 C9 2503 DEFB 201 + 00008842 22 2504 DEFB '"' + 00008843 99 2505 DEFB 153 + 00008844 07 2506 DEFB 7 + 00008845 CD 2507 DEFB 205 + 00008846 B3 2508 DEFB 179 + 00008847 03 2509 DEFB 3 + 00008848 01 2510 DEFB 1 + 00008849 10 2511 DEFB 16 + 0000884A 00 2512 DEFB 0 + 0000884B 21 2513 DEFB '!' + 0000884C E5 2514 DEFB 229 + 0000884D 0D 2515 DEFB 13 + 0000884E CD 2516 DEFB 205 + 0000884F 3C 2517 DEFB '<' + 00008850 03 2518 DEFB 3 + 00008851 D8 2519 DEFB 216 + 00008852 23 2520 DEFB '#' + 00008853 ED 2521 DEFB 237 + 00008854 5B 2522 DEFB '[' + 00008855 99 2523 DEFB 153 + 00008856 07 2524 DEFB 7 + 00008857 06 2525 DEFB 6 + 00008858 0E 2526 DEFB 14 + 00008859 23 2527 DEFB '#' + 0000885A 1A 2528 DEFB 26 + 0000885B BE 2529 DEFB 190 + 0000885C 20 2530 DEFB ' ' + 0000885D EA 2531 DEFB 234 + 0000885E B7 2532 DEFB 183 + 0000885F 28 2533 DEFB '(' + 00008860 05 2534 DEFB 5 + 00008861 13 2535 DEFB 19 + 00008862 10 2536 DEFB 16 + 00008863 F5 2537 DEFB 245 + 00008864 1A 2538 DEFB 26 + 00008865 B7 2539 DEFB 183 + 00008866 ED 2540 DEFB 237 + 00008867 5B 2541 DEFB '[' + 00008868 E5 2542 DEFB 229 + 00008869 0D 2543 DEFB 13 + 0000886A C9 2544 DEFB 201 + 0000886B CD 2545 DEFB 205 + 0000886C 56 2546 DEFB 'V' + 0000886D 01 2547 DEFB 1 + 0000886E 66 2548 DEFB 'f' + 0000886F 69 2549 DEFB 'i' + 00008870 6C 2550 DEFB 'l' + 00008871 65 2551 DEFB 'e' + 00008872 20 2552 DEFB ' ' + 00008873 6E 2553 DEFB 'n' + 00008874 6F 2554 DEFB 'o' + 00008875 74 2555 DEFB 't' + 00008876 20 2556 DEFB ' ' + 00008877 66 2557 DEFB 'f' + 00008878 6F 2558 DEFB 'o' + 00008879 75 2559 DEFB 'u' + 0000887A 6E 2560 DEFB 'n' + 0000887B 64 2561 DEFB 'd' + 0000887C 0D 2562 DEFB 13 + 0000887D 0A 2563 DEFB 10 + 0000887E 00 2564 DEFB 0 + 0000887F C3 2565 DEFB 195 + 00008880 13 2566 DEFB 19 + 00008881 01 2567 DEFB 1 + 00008882 CD 2568 DEFB 205 + 00008883 56 2569 DEFB 'V' + 00008884 01 2570 DEFB 1 + 00008885 66 2571 DEFB 'f' + 00008886 69 2572 DEFB 'i' + 00008887 6C 2573 DEFB 'l' + 00008888 65 2574 DEFB 'e' + 00008889 20 2575 DEFB ' ' + 0000888A 74 2576 DEFB 't' + 0000888B 6F 2577 DEFB 'o' + 0000888C 6F 2578 DEFB 'o' + 0000888D 20 2579 DEFB ' ' + 0000888E 73 2580 DEFB 's' + 0000888F 68 2581 DEFB 'h' + 00008890 6F 2582 DEFB 'o' + 00008891 72 2583 DEFB 'r' + 00008892 74 2584 DEFB 't' + 00008893 0D 2585 DEFB 13 + 00008894 0A 2586 DEFB 10 + 00008895 00 2587 DEFB 0 + 00008896 C3 2588 DEFB 195 + 00008897 13 2589 DEFB 19 + 00008898 01 2590 DEFB 1 + 00008899 11 2591 DEFB 17 + 0000889A 01 2592 DEFB 1 + 0000889B 00 2593 DEFB 0 + 0000889C 21 2594 DEFB '!' + 0000889D 71 2595 DEFB 'q' + 0000889E 07 2596 DEFB 7 + 0000889F CD 2597 DEFB 205 + 000088A0 19 2598 DEFB 25 + 000088A1 02 2599 DEFB 2 + 000088A2 20 2600 DEFB ' ' + 000088A3 C7 2601 DEFB 199 + 000088A4 21 2602 DEFB '!' + 000088A5 76 2603 DEFB 'v' + 000088A6 07 2604 DEFB 7 + 000088A7 CD 2605 DEFB 205 + 000088A8 19 2606 DEFB 25 + 000088A9 02 2607 DEFB 2 + 000088AA 20 2608 DEFB ' ' + 000088AB BF 2609 DEFB 191 + 000088AC CD 2610 DEFB 205 + 000088AD B3 2611 DEFB 179 + 000088AE 03 2612 DEFB 3 + 000088AF 21 2613 DEFB '!' + 000088B0 FF 2614 DEFB 255 + 000088B1 0D 2615 DEFB 13 + 000088B2 01 2616 DEFB 1 + 000088B3 14 2617 DEFB 20 + 000088B4 00 2618 DEFB 0 + 000088B5 CD 2619 DEFB 205 + 000088B6 3C 2620 DEFB '<' + 000088B7 03 2621 DEFB 3 + 000088B8 38 2622 DEFB '8' + 000088B9 C8 2623 DEFB 200 + 000088BA CD 2624 DEFB 205 + 000088BB C2 2625 DEFB 194 + 000088BC 00 2626 DEFB 0 + 000088BD CD 2627 DEFB 205 + 000088BE DF 2628 DEFB 223 + 000088BF 00 2629 DEFB 0 + 000088C0 3E 2630 DEFB '>' + 000088C1 FF 2631 DEFB 255 + 000088C2 ED 2632 DEFB 237 + 000088C3 39 2633 DEFB '9' + 000088C4 38 2634 DEFB '8' + 000088C5 CD 2635 DEFB 205 + 000088C6 FA 2636 DEFB 250 + 000088C7 01 2637 DEFB 1 + 000088C8 21 2638 DEFB '!' + 000088C9 00 2639 DEFB 0 + 000088CA 10 2640 DEFB 16 + 000088CB CD 2641 DEFB 205 + 000088CC 3C 2642 DEFB '<' + 000088CD 03 2643 DEFB 3 + 000088CE 97 2644 DEFB 151 + 000088CF ED 2645 DEFB 237 + 000088D0 39 2646 DEFB '9' + 000088D1 38 2647 DEFB '8' + 000088D2 CD 2648 DEFB 205 + 000088D3 02 2649 DEFB 2 + 000088D4 02 2650 DEFB 2 + 000088D5 EB 2651 DEFB 235 + 000088D6 CD 2652 DEFB 205 + 000088D7 3C 2653 DEFB '<' + 000088D8 03 2654 DEFB 3 + 000088D9 CD 2655 DEFB 205 + 000088DA E4 2656 DEFB 228 + 000088DB 01 2657 DEFB 1 + 000088DC 21 2658 DEFB '!' + 000088DD 15 2659 DEFB 21 + 000088DE 0E 2660 DEFB 14 + 000088DF 22 2661 DEFB '"' + 000088E0 13 2662 DEFB 19 + 000088E1 0E 2663 DEFB 14 + 000088E2 CD 2664 DEFB 205 + 000088E3 BF 2665 DEFB 191 + 000088E4 03 2666 DEFB 3 + 000088E5 CD 2667 DEFB 205 + 000088E6 DE 2668 DEFB 222 + 000088E7 03 2669 DEFB 3 + 000088E8 7D 2670 DEFB '}' + 000088E9 B4 2671 DEFB 180 + 000088EA 28 2672 DEFB '(' + 000088EB 3E 2673 DEFB '>' + 000088EC CD 2674 DEFB 205 + 000088ED 06 2675 DEFB 6 + 000088EE 04 2676 DEFB 4 + 000088EF 7B 2677 DEFB '{' + 000088F0 B2 2678 DEFB 178 + 000088F1 28 2679 DEFB '(' + 000088F2 49 2680 DEFB 'I' + 000088F3 7B 2681 DEFB '{' + 000088F4 E6 2682 DEFB 230 + 000088F5 07 2683 DEFB 7 + 000088F6 20 2684 DEFB ' ' + 000088F7 59 2685 DEFB 'Y' + 000088F8 2A 2686 DEFB '*' + 000088F9 13 2687 DEFB 19 + 000088FA 0E 2688 DEFB 14 + 000088FB 73 2689 DEFB 's' + 000088FC 23 2690 DEFB '#' + 000088FD 72 2691 DEFB 'r' + 000088FE 23 2692 DEFB '#' + 000088FF 22 2693 DEFB '"' + 00008900 13 2694 DEFB 19 + 00008901 0E 2695 DEFB 14 + 00008902 06 2696 DEFB 6 + 00008903 1F 2697 DEFB 31 + 00008904 C5 2698 DEFB 197 + 00008905 D5 2699 DEFB 213 + 00008906 CD 2700 DEFB 205 + 00008907 DE 2701 DEFB 222 + 00008908 03 2702 DEFB 3 + 00008909 7D 2703 DEFB '}' + 0000890A B4 2704 DEFB 180 + 0000890B 28 2705 DEFB '(' + 0000890C 1A 2706 DEFB 26 + 0000890D CD 2707 DEFB 205 + 0000890E 06 2708 DEFB 6 + 0000890F 04 2709 DEFB 4 + 00008910 7B 2710 DEFB '{' + 00008911 B2 2711 DEFB 178 + 00008912 28 2712 DEFB '(' + 00008913 28 2713 DEFB '(' + 00008914 EB 2714 DEFB 235 + 00008915 D1 2715 DEFB 209 + 00008916 13 2716 DEFB 19 + 00008917 B7 2717 DEFB 183 + 00008918 ED 2718 DEFB 237 + 00008919 52 2719 DEFB 'R' + 0000891A 20 2720 DEFB ' ' + 0000891B 35 2721 DEFB '5' + 0000891C C1 2722 DEFB 193 + 0000891D 10 2723 DEFB 16 + 0000891E E5 2724 DEFB 229 + 0000891F CD 2725 DEFB 205 + 00008920 DE 2726 DEFB 222 + 00008921 03 2727 DEFB 3 + 00008922 7D 2728 DEFB '}' + 00008923 B4 2729 DEFB 180 + 00008924 20 2730 DEFB ' ' + 00008925 C6 2731 DEFB 198 + 00008926 C9 2732 DEFB 201 + 00008927 E1 2733 DEFB 225 + 00008928 E1 2734 DEFB 225 + 00008929 C9 2735 DEFB 201 + 0000892A CD 2736 DEFB 205 + 0000892B 56 2737 DEFB 'V' + 0000892C 01 2738 DEFB 1 + 0000892D 6E 2739 DEFB 'n' + 0000892E 75 2740 DEFB 'u' + 0000892F 6C 2741 DEFB 'l' + 00008930 6C 2742 DEFB 'l' + 00008931 20 2743 DEFB ' ' + 00008932 66 2744 DEFB 'f' + 00008933 69 2745 DEFB 'i' + 00008934 6C 2746 DEFB 'l' + 00008935 65 2747 DEFB 'e' + 00008936 0D 2748 DEFB 13 + 00008937 0A 2749 DEFB 10 + 00008938 00 2750 DEFB 0 + 00008939 C3 2751 DEFB 195 + 0000893A 13 2752 DEFB 19 + 0000893B 01 2753 DEFB 1 + 0000893C CD 2754 DEFB 205 + 0000893D 56 2755 DEFB 'V' + 0000893E 01 2756 DEFB 1 + 0000893F 68 2757 DEFB 'h' + 00008940 6F 2758 DEFB 'o' + 00008941 6C 2759 DEFB 'l' + 00008942 65 2760 DEFB 'e' + 00008943 20 2761 DEFB ' ' + 00008944 69 2762 DEFB 'i' + 00008945 6E 2763 DEFB 'n' + 00008946 20 2764 DEFB ' ' + 00008947 66 2765 DEFB 'f' + 00008948 69 2766 DEFB 'i' + 00008949 6C 2767 DEFB 'l' + 0000894A 65 2768 DEFB 'e' + 0000894B 0D 2769 DEFB 13 + 0000894C 0A 2770 DEFB 10 + 0000894D 00 2771 DEFB 0 + 0000894E C3 2772 DEFB 195 + 0000894F 13 2773 DEFB 19 + 00008950 01 2774 DEFB 1 + 00008951 CD 2775 DEFB 205 + 00008952 56 2776 DEFB 'V' + 00008953 01 2777 DEFB 1 + 00008954 6E 2778 DEFB 'n' + 00008955 6F 2779 DEFB 'o' + 00008956 74 2780 DEFB 't' + 00008957 20 2781 DEFB ' ' + 00008958 61 2782 DEFB 'a' + 00008959 6C 2783 DEFB 'l' + 0000895A 69 2784 DEFB 'i' + 0000895B 67 2785 DEFB 'g' + 0000895C 6E 2786 DEFB 'n' + 0000895D 65 2787 DEFB 'e' + 0000895E 64 2788 DEFB 'd' + 0000895F 0D 2789 DEFB 13 + 00008960 0A 2790 DEFB 10 + 00008961 00 2791 DEFB 0 + 00008962 C3 2792 DEFB 195 + 00008963 13 2793 DEFB 19 + 00008964 01 2794 DEFB 1 + 00008965 E5 2795 DEFB 229 + 00008966 C5 2796 DEFB 197 + 00008967 ED 2797 DEFB 237 + 00008968 43 2798 DEFB 'C' + 00008969 F9 2799 DEFB 249 + 0000896A 0D 2800 DEFB 13 + 0000896B 22 2801 DEFB '"' + 0000896C FB 2802 DEFB 251 + 0000896D 0D 2803 DEFB 13 + 0000896E 21 2804 DEFB '!' + 0000896F 00 2805 DEFB 0 + 00008970 00 2806 DEFB 0 + 00008971 22 2807 DEFB '"' + 00008972 FD 2808 DEFB 253 + 00008973 0D 2809 DEFB 13 + 00008974 2A 2810 DEFB '*' + 00008975 F5 2811 DEFB 245 + 00008976 0D 2812 DEFB 13 + 00008977 7D 2813 DEFB '}' + 00008978 B4 2814 DEFB 180 + 00008979 20 2815 DEFB ' ' + 0000897A 1A 2816 DEFB 26 + 0000897B CD 2817 DEFB 205 + 0000897C DE 2818 DEFB 222 + 0000897D 03 2819 DEFB 3 + 0000897E 7D 2820 DEFB '}' + 0000897F B4 2821 DEFB 180 + 00008980 28 2822 DEFB '(' + 00008981 4F 2823 DEFB 'O' + 00008982 22 2824 DEFB '"' + 00008983 F5 2825 DEFB 245 + 00008984 0D 2826 DEFB 13 + 00008985 CD 2827 DEFB 205 + 00008986 06 2828 DEFB 6 + 00008987 04 2829 DEFB 4 + 00008988 7B 2830 DEFB '{' + 00008989 B2 2831 DEFB 178 + 0000898A 28 2832 DEFB '(' + 0000898B B0 2833 DEFB 176 + 0000898C 21 2834 DEFB '!' + 0000898D E5 2835 DEFB 229 + 0000898E 07 2836 DEFB 7 + 0000898F 22 2837 DEFB '"' + 00008990 F7 2838 DEFB 247 + 00008991 0D 2839 DEFB 13 + 00008992 CD 2840 DEFB 205 + 00008993 C5 2841 DEFB 197 + 00008994 04 2842 DEFB 4 + 00008995 2A 2843 DEFB '*' + 00008996 F5 2844 DEFB 245 + 00008997 0D 2845 DEFB 13 + 00008998 ED 2846 DEFB 237 + 00008999 5B 2847 DEFB '[' + 0000899A F9 2848 DEFB 249 + 0000899B 0D 2849 DEFB 13 + 0000899C CD 2850 DEFB 205 + 0000899D F3 2851 DEFB 243 + 0000899E 01 2852 DEFB 1 + 0000899F 2A 2853 DEFB '*' + 000089A0 F5 2854 DEFB 245 + 000089A1 0D 2855 DEFB 13 + 000089A2 B7 2856 DEFB 183 + 000089A3 ED 2857 DEFB 237 + 000089A4 52 2858 DEFB 'R' + 000089A5 22 2859 DEFB '"' + 000089A6 F5 2860 DEFB 245 + 000089A7 0D 2861 DEFB 13 + 000089A8 2A 2862 DEFB '*' + 000089A9 F9 2863 DEFB 249 + 000089AA 0D 2864 DEFB 13 + 000089AB B7 2865 DEFB 183 + 000089AC ED 2866 DEFB 237 + 000089AD 52 2867 DEFB 'R' + 000089AE 22 2868 DEFB '"' + 000089AF F9 2869 DEFB 249 + 000089B0 0D 2870 DEFB 13 + 000089B1 2A 2871 DEFB '*' + 000089B2 FD 2872 DEFB 253 + 000089B3 0D 2873 DEFB 13 + 000089B4 19 2874 DEFB 25 + 000089B5 22 2875 DEFB '"' + 000089B6 FD 2876 DEFB 253 + 000089B7 0D 2877 DEFB 13 + 000089B8 4B 2878 DEFB 'K' + 000089B9 42 2879 DEFB 'B' + 000089BA ED 2880 DEFB 237 + 000089BB 5B 2881 DEFB '[' + 000089BC FB 2882 DEFB 251 + 000089BD 0D 2883 DEFB 13 + 000089BE 2A 2884 DEFB '*' + 000089BF F7 2885 DEFB 247 + 000089C0 0D 2886 DEFB 13 + 000089C1 ED 2887 DEFB 237 + 000089C2 B0 2888 DEFB 176 + 000089C3 22 2889 DEFB '"' + 000089C4 F7 2890 DEFB 247 + 000089C5 0D 2891 DEFB 13 + 000089C6 ED 2892 DEFB 237 + 000089C7 53 2893 DEFB 'S' + 000089C8 FB 2894 DEFB 251 + 000089C9 0D 2895 DEFB 13 + 000089CA 2A 2896 DEFB '*' + 000089CB F9 2897 DEFB 249 + 000089CC 0D 2898 DEFB 13 + 000089CD 7D 2899 DEFB '}' + 000089CE B4 2900 DEFB 180 + 000089CF 20 2901 DEFB ' ' + 000089D0 AA 2902 DEFB 170 + 000089D1 2A 2903 DEFB '*' + 000089D2 FD 2904 DEFB 253 + 000089D3 0D 2905 DEFB 13 + 000089D4 4D 2906 DEFB 'M' + 000089D5 44 2907 DEFB 'D' + 000089D6 D1 2908 DEFB 209 + 000089D7 B7 2909 DEFB 183 + 000089D8 ED 2910 DEFB 237 + 000089D9 52 2911 DEFB 'R' + 000089DA E1 2912 DEFB 225 + 000089DB C9 2913 DEFB 201 + 000089DC 21 2914 DEFB '!' + 000089DD A5 2915 DEFB 165 + 000089DE 07 2916 DEFB 7 + 000089DF CD 2917 DEFB 205 + 000089E0 79 2918 DEFB 'y' + 000089E1 04 2919 DEFB 4 + 000089E2 21 2920 DEFB '!' + 000089E3 00 2921 DEFB 0 + 000089E4 00 2922 DEFB 0 + 000089E5 22 2923 DEFB '"' + 000089E6 F5 2924 DEFB 245 + 000089E7 0D 2925 DEFB 13 + 000089E8 2A 2926 DEFB '*' + 000089E9 AD 2927 DEFB 173 + 000089EA 07 2928 DEFB 7 + 000089EB 22 2929 DEFB '"' + 000089EC 9B 2930 DEFB 155 + 000089ED 07 2931 DEFB 7 + 000089EE 2A 2932 DEFB '*' + 000089EF AF 2933 DEFB 175 + 000089F0 07 2934 DEFB 7 + 000089F1 22 2935 DEFB '"' + 000089F2 9D 2936 DEFB 157 + 000089F3 07 2937 DEFB 7 + 000089F4 21 2938 DEFB '!' + 000089F5 BD 2939 DEFB 189 + 000089F6 07 2940 DEFB 7 + 000089F7 22 2941 DEFB '"' + 000089F8 9F 2942 DEFB 159 + 000089F9 07 2943 DEFB 7 + 000089FA 21 2944 DEFB '!' + 000089FB E5 2945 DEFB 229 + 000089FC 0B 2946 DEFB 11 + 000089FD 22 2947 DEFB '"' + 000089FE A1 2948 DEFB 161 + 000089FF 07 2949 DEFB 7 + 00008A00 21 2950 DEFB '!' + 00008A01 E5 2951 DEFB 229 + 00008A02 0D 2952 DEFB 13 + 00008A03 22 2953 DEFB '"' + 00008A04 A3 2954 DEFB 163 + 00008A05 07 2955 DEFB 7 + 00008A06 C9 2956 DEFB 201 + 00008A07 2A 2957 DEFB '*' + 00008A08 9B 2958 DEFB 155 + 00008A09 07 2959 DEFB 7 + 00008A0A ED 2960 DEFB 237 + 00008A0B 5B 2961 DEFB '[' + 00008A0C 9D 2962 DEFB 157 + 00008A0D 07 2963 DEFB 7 + 00008A0E 01 2964 DEFB 1 + 00008A0F 00 2965 DEFB 0 + 00008A10 02 2966 DEFB 2 + 00008A11 B7 2967 DEFB 183 + 00008A12 ED 2968 DEFB 237 + 00008A13 42 2969 DEFB 'B' + 00008A14 EB 2970 DEFB 235 + 00008A15 06 2971 DEFB 6 + 00008A16 00 2972 DEFB 0 + 00008A17 ED 2973 DEFB 237 + 00008A18 42 2974 DEFB 'B' + 00008A19 EB 2975 DEFB 235 + 00008A1A 38 2976 DEFB '8' + 00008A1B 0B 2977 DEFB 11 + 00008A1C 22 2978 DEFB '"' + 00008A1D 9B 2979 DEFB 155 + 00008A1E 07 2980 DEFB 7 + 00008A1F ED 2981 DEFB 237 + 00008A20 53 2982 DEFB 'S' + 00008A21 9D 2983 DEFB 157 + 00008A22 07 2984 DEFB 7 + 00008A23 21 2985 DEFB '!' + 00008A24 00 2986 DEFB 0 + 00008A25 02 2987 DEFB 2 + 00008A26 C9 2988 DEFB 201 + 00008A27 2A 2989 DEFB '*' + 00008A28 9B 2990 DEFB 155 + 00008A29 07 2991 DEFB 7 + 00008A2A ED 2992 DEFB 237 + 00008A2B 43 2993 DEFB 'C' + 00008A2C 9B 2994 DEFB 155 + 00008A2D 07 2995 DEFB 7 + 00008A2E C9 2996 DEFB 201 + 00008A2F 2A 2997 DEFB '*' + 00008A30 9F 2998 DEFB 159 + 00008A31 07 2999 DEFB 7 + 00008A32 11 3000 DEFB 17 + 00008A33 E1 3001 DEFB 225 + 00008A34 07 3002 DEFB 7 + 00008A35 B7 3003 DEFB 183 + 00008A36 ED 3004 DEFB 237 + 00008A37 52 3005 DEFB 'R' + 00008A38 30 3006 DEFB '0' + 00008A39 0B 3007 DEFB 11 + 00008A3A 2A 3008 DEFB '*' + 00008A3B 9F 3009 DEFB 159 + 00008A3C 07 3010 DEFB 7 + 00008A3D 5E 3011 DEFB '^' + 00008A3E 23 3012 DEFB '#' + 00008A3F 56 3013 DEFB 'V' + 00008A40 23 3014 DEFB '#' + 00008A41 22 3015 DEFB '"' + 00008A42 9F 3016 DEFB 159 + 00008A43 07 3017 DEFB 7 + 00008A44 C9 3018 DEFB 201 + 00008A45 2A 3019 DEFB '*' + 00008A46 A1 3020 DEFB 161 + 00008A47 07 3021 DEFB 7 + 00008A48 11 3022 DEFB 17 + 00008A49 E5 3023 DEFB 229 + 00008A4A 0B 3024 DEFB 11 + 00008A4B B7 3025 DEFB 183 + 00008A4C ED 3026 DEFB 237 + 00008A4D 52 3027 DEFB 'R' + 00008A4E 38 3028 DEFB '8' + 00008A4F 13 3029 DEFB 19 + 00008A50 2A 3030 DEFB '*' + 00008A51 9F 3031 DEFB 159 + 00008A52 07 3032 DEFB 7 + 00008A53 5E 3033 DEFB '^' + 00008A54 23 3034 DEFB '#' + 00008A55 56 3035 DEFB 'V' + 00008A56 23 3036 DEFB '#' + 00008A57 22 3037 DEFB '"' + 00008A58 9F 3038 DEFB 159 + 00008A59 07 3039 DEFB 7 + 00008A5A 21 3040 DEFB '!' + 00008A5B E5 3041 DEFB 229 + 00008A5C 09 3042 DEFB 9 + 00008A5D 22 3043 DEFB '"' + 00008A5E A1 3044 DEFB 161 + 00008A5F 07 3045 DEFB 7 + 00008A60 CD 3046 DEFB 205 + 00008A61 C5 3047 DEFB 197 + 00008A62 04 3048 DEFB 4 + 00008A63 2A 3049 DEFB '*' + 00008A64 9F 3050 DEFB 159 + 00008A65 07 3051 DEFB 7 + 00008A66 11 3052 DEFB 17 + 00008A67 E4 3053 DEFB 228 + 00008A68 07 3054 DEFB 7 + 00008A69 B7 3055 DEFB 183 + 00008A6A ED 3056 DEFB 237 + 00008A6B 52 3057 DEFB 'R' + 00008A6C 30 3058 DEFB '0' + 00008A6D 0B 3059 DEFB 11 + 00008A6E 2A 3060 DEFB '*' + 00008A6F A1 3061 DEFB 161 + 00008A70 07 3062 DEFB 7 + 00008A71 5E 3063 DEFB '^' + 00008A72 23 3064 DEFB '#' + 00008A73 56 3065 DEFB 'V' + 00008A74 23 3066 DEFB '#' + 00008A75 22 3067 DEFB '"' + 00008A76 A1 3068 DEFB 161 + 00008A77 07 3069 DEFB 7 + 00008A78 C9 3070 DEFB 201 + 00008A79 2A 3071 DEFB '*' + 00008A7A A3 3072 DEFB 163 + 00008A7B 07 3073 DEFB 7 + 00008A7C 11 3074 DEFB 17 + 00008A7D E5 3075 DEFB 229 + 00008A7E 0D 3076 DEFB 13 + 00008A7F B7 3077 DEFB 183 + 00008A80 ED 3078 DEFB 237 + 00008A81 52 3079 DEFB 'R' + 00008A82 38 3080 DEFB '8' + 00008A83 13 3081 DEFB 19 + 00008A84 2A 3082 DEFB '*' + 00008A85 A1 3083 DEFB 161 + 00008A86 07 3084 DEFB 7 + 00008A87 5E 3085 DEFB '^' + 00008A88 23 3086 DEFB '#' + 00008A89 56 3087 DEFB 'V' + 00008A8A 23 3088 DEFB '#' + 00008A8B 22 3089 DEFB '"' + 00008A8C A1 3090 DEFB 161 + 00008A8D 07 3091 DEFB 7 + 00008A8E 21 3092 DEFB '!' + 00008A8F E5 3093 DEFB 229 + 00008A90 0B 3094 DEFB 11 + 00008A91 22 3095 DEFB '"' + 00008A92 A3 3096 DEFB 163 + 00008A93 07 3097 DEFB 7 + 00008A94 CD 3098 DEFB 205 + 00008A95 C5 3099 DEFB 197 + 00008A96 04 3100 DEFB 4 + 00008A97 2A 3101 DEFB '*' + 00008A98 A3 3102 DEFB 163 + 00008A99 07 3103 DEFB 7 + 00008A9A 5E 3104 DEFB '^' + 00008A9B 23 3105 DEFB '#' + 00008A9C 56 3106 DEFB 'V' + 00008A9D 23 3107 DEFB '#' + 00008A9E 22 3108 DEFB '"' + 00008A9F A3 3109 DEFB 163 + 00008AA0 07 3110 DEFB 7 + 00008AA1 C9 3111 DEFB 201 + 00008AA2 E5 3112 DEFB 229 + 00008AA3 7B 3113 DEFB '{' + 00008AA4 E6 3114 DEFB 230 + 00008AA5 07 3115 DEFB 7 + 00008AA6 06 3116 DEFB 6 + 00008AA7 03 3117 DEFB 3 + 00008AA8 CB 3118 DEFB 203 + 00008AA9 3A 3119 DEFB ':' + 00008AAA CB 3120 DEFB 203 + 00008AAB 1B 3121 DEFB 27 + 00008AAC 10 3122 DEFB 16 + 00008AAD FA 3123 DEFB 250 + 00008AAE 2A 3124 DEFB '*' + 00008AAF 95 3125 DEFB 149 + 00008AB0 07 3126 DEFB 7 + 00008AB1 37 3127 DEFB '7' + 00008AB2 ED 3128 DEFB 237 + 00008AB3 52 3129 DEFB 'R' + 00008AB4 38 3130 DEFB '8' + 00008AB5 1A 3131 DEFB 26 + 00008AB6 2A 3132 DEFB '*' + 00008AB7 93 3133 DEFB 147 + 00008AB8 07 3134 DEFB 7 + 00008AB9 19 3135 DEFB 25 + 00008ABA EB 3136 DEFB 235 + 00008ABB 21 3137 DEFB '!' + 00008ABC E5 3138 DEFB 229 + 00008ABD 07 3139 DEFB 7 + 00008ABE F5 3140 DEFB 245 + 00008ABF E5 3141 DEFB 229 + 00008AC0 CD 3142 DEFB 205 + 00008AC1 C5 3143 DEFB 197 + 00008AC2 04 3144 DEFB 4 + 00008AC3 E1 3145 DEFB 225 + 00008AC4 D1 3146 DEFB 209 + 00008AC5 01 3147 DEFB 1 + 00008AC6 40 3148 DEFB '@' + 00008AC7 00 3149 DEFB 0 + 00008AC8 59 3150 DEFB 'Y' + 00008AC9 ED 3151 DEFB 237 + 00008ACA 5C 3152 DEFB 92 + 00008ACB 19 3153 DEFB 25 + 00008ACC D1 3154 DEFB 209 + 00008ACD ED 3155 DEFB 237 + 00008ACE B0 3156 DEFB 176 + 00008ACF C9 3157 DEFB 201 + 00008AD0 CD 3158 DEFB 205 + 00008AD1 56 3159 DEFB 'V' + 00008AD2 01 3160 DEFB 1 + 00008AD3 62 3161 DEFB 'b' + 00008AD4 61 3162 DEFB 'a' + 00008AD5 64 3163 DEFB 'd' + 00008AD6 20 3164 DEFB ' ' + 00008AD7 69 3165 DEFB 'i' + 00008AD8 6E 3166 DEFB 'n' + 00008AD9 6F 3167 DEFB 'o' + 00008ADA 64 3168 DEFB 'd' + 00008ADB 65 3169 DEFB 'e' + 00008ADC 3A 3170 DEFB ':' + 00008ADD 20 3171 DEFB ' ' + 00008ADE 00 3172 DEFB 0 + 00008ADF C6 3173 DEFB 198 + 00008AE0 30 3174 DEFB '0' + 00008AE1 CD 3175 DEFB 205 + 00008AE2 09 3176 DEFB 9 + 00008AE3 06 3177 DEFB 6 + 00008AE4 CD 3178 DEFB 205 + 00008AE5 37 3179 DEFB '7' + 00008AE6 06 3180 DEFB 6 + 00008AE7 2C 3181 DEFB ',' + 00008AE8 20 3182 DEFB ' ' + 00008AE9 00 3183 DEFB 0 + 00008AEA EB 3184 DEFB 235 + 00008AEB C3 3185 DEFB 195 + 00008AEC 0D 3186 DEFB 13 + 00008AED 01 3187 DEFB 1 + 00008AEE E5 3188 DEFB 229 + 00008AEF CD 3189 DEFB 205 + 00008AF0 DF 3190 DEFB 223 + 00008AF1 04 3191 DEFB 4 + 00008AF2 E5 3192 DEFB 229 + 00008AF3 FD 3193 DEFB 253 + 00008AF4 E1 3194 DEFB 225 + 00008AF5 57 3195 DEFB 'W' + 00008AF6 E1 3196 DEFB 225 + 00008AF7 1E 3197 DEFB 30 + 00008AF8 03 3198 DEFB 3 + 00008AF9 C3 3199 DEFB 195 + 00008AFA 46 3200 DEFB 'F' + 00008AFB 06 3201 DEFB 6 + 00008AFC E5 3202 DEFB 229 + 00008AFD CD 3203 DEFB 205 + 00008AFE DF 3204 DEFB 223 + 00008AFF 04 3205 DEFB 4 + 00008B00 FD 3206 DEFB 253 + 00008B01 E1 3207 DEFB 225 + 00008B02 16 3208 DEFB 22 + 00008B03 03 3209 DEFB 3 + 00008B04 5F 3210 DEFB '_' + 00008B05 C3 3211 DEFB 195 + 00008B06 46 3212 DEFB 'F' + 00008B07 06 3213 DEFB 6 + 00008B08 21 3214 DEFB '!' + 00008B09 00 3215 DEFB 0 + 00008B0A 06 3216 DEFB 6 + 00008B0B 37 3217 DEFB '7' + 00008B0C ED 3218 DEFB 237 + 00008B0D 52 3219 DEFB 'R' + 00008B0E 38 3220 DEFB '8' + 00008B0F 1D 3221 DEFB 29 + 00008B10 01 3222 DEFB 1 + 00008B11 00 3223 DEFB 0 + 00008B12 02 3224 DEFB 2 + 00008B13 21 3225 DEFB '!' + 00008B14 00 3226 DEFB 0 + 00008B15 02 3227 DEFB 2 + 00008B16 19 3228 DEFB 25 + 00008B17 7C 3229 DEFB '|' + 00008B18 65 3230 DEFB 'e' + 00008B19 69 3231 DEFB 'i' + 00008B1A 29 3232 DEFB ')' + 00008B1B 8F 3233 DEFB 143 + 00008B1C C9 3234 DEFB 201 + 00008B1D 7E 3235 DEFB '~' + 00008B1E 23 3236 DEFB '#' + 00008B1F 56 3237 DEFB 'V' + 00008B20 23 3238 DEFB '#' + 00008B21 CB 3239 DEFB 203 + 00008B22 3A 3240 DEFB ':' + 00008B23 1F 3241 DEFB 31 + 00008B24 CB 3242 DEFB 203 + 00008B25 3A 3243 DEFB ':' + 00008B26 1F 3244 DEFB 31 + 00008B27 CB 3245 DEFB 203 + 00008B28 3A 3246 DEFB ':' + 00008B29 1F 3247 DEFB 31 + 00008B2A C6 3248 DEFB 198 + 00008B2B 31 3249 DEFB '1' + 00008B2C C9 3250 DEFB 201 + 00008B2D CD 3251 DEFB 205 + 00008B2E 56 3252 DEFB 'V' + 00008B2F 01 3253 DEFB 1 + 00008B30 62 3254 DEFB 'b' + 00008B31 61 3255 DEFB 'a' + 00008B32 64 3256 DEFB 'd' + 00008B33 20 3257 DEFB ' ' + 00008B34 62 3258 DEFB 'b' + 00008B35 6C 3259 DEFB 'l' + 00008B36 6F 3260 DEFB 'o' + 00008B37 63 3261 DEFB 'c' + 00008B38 6B 3262 DEFB 'k' + 00008B39 3A 3263 DEFB ':' + 00008B3A 20 3264 DEFB ' ' + 00008B3B 00 3265 DEFB 0 + 00008B3C EB 3266 DEFB 235 + 00008B3D C3 3267 DEFB 195 + 00008B3E 0D 3268 DEFB 13 + 00008B3F 01 3269 DEFB 1 + 00008B40 01 3270 DEFB 1 + 00008B41 80 3271 DEFB 128 + 00008B42 10 3272 DEFB 16 + 00008B43 21 3273 DEFB '!' + 00008B44 15 3274 DEFB 21 + 00008B45 0E 3275 DEFB 14 + 00008B46 18 3276 DEFB 24 + 00008B47 0C 3277 DEFB 12 + 00008B48 19 3278 DEFB 25 + 00008B49 CD 3279 DEFB 205 + 00008B4A F4 3280 DEFB 244 + 00008B4B 04 3281 DEFB 4 + 00008B4C 1E 3282 DEFB 30 + 00008B4D 04 3283 DEFB 4 + 00008B4E 02 3284 DEFB 2 + 00008B4F 03 3285 DEFB 3 + 00008B50 3C 3286 DEFB '<' + 00008B51 1D 3287 DEFB 29 + 00008B52 20 3288 DEFB ' ' + 00008B53 FA 3289 DEFB 250 + 00008B54 ED 3290 DEFB 237 + 00008B55 5B 3291 DEFB '[' + 00008B56 13 3292 DEFB 19 + 00008B57 0E 3293 DEFB 14 + 00008B58 B7 3294 DEFB 183 + 00008B59 ED 3295 DEFB 237 + 00008B5A 52 3296 DEFB 'R' + 00008B5B 38 3297 DEFB '8' + 00008B5C EB 3298 DEFB 235 + 00008B5D C9 3299 DEFB 201 + 00008B5E ED 3300 DEFB 237 + 00008B5F 5B 3301 DEFB '[' + 00008B60 11 3302 DEFB 17 + 00008B61 0E 3303 DEFB 14 + 00008B62 2A 3304 DEFB '*' + 00008B63 40 3305 DEFB '@' + 00008B64 07 3306 DEFB 7 + 00008B65 19 3307 DEFB 25 + 00008B66 22 3308 DEFB '"' + 00008B67 40 3309 DEFB '@' + 00008B68 07 3310 DEFB 7 + 00008B69 21 3311 DEFB '!' + 00008B6A 44 3312 DEFB 'D' + 00008B6B 07 3313 DEFB 7 + 00008B6C CD 3314 DEFB 205 + 00008B6D 65 3315 DEFB 'e' + 00008B6E 05 3316 DEFB 5 + 00008B6F 2A 3317 DEFB '*' + 00008B70 42 3318 DEFB 'B' + 00008B71 07 3319 DEFB 7 + 00008B72 19 3320 DEFB 25 + 00008B73 22 3321 DEFB '"' + 00008B74 42 3322 DEFB 'B' + 00008B75 07 3323 DEFB 7 + 00008B76 21 3324 DEFB '!' + 00008B77 64 3325 DEFB 'd' + 00008B78 07 3326 DEFB 7 + 00008B79 CD 3327 DEFB 205 + 00008B7A 65 3328 DEFB 'e' + 00008B7B 05 3329 DEFB 5 + 00008B7C 21 3330 DEFB '!' + 00008B7D 3E 3331 DEFB '>' + 00008B7E 07 3332 DEFB 7 + 00008B7F 01 3333 DEFB 1 + 00008B80 33 3334 DEFB '3' + 00008B81 00 3335 DEFB 0 + 00008B82 ED 3336 DEFB 237 + 00008B83 B0 3337 DEFB 176 + 00008B84 C9 3338 DEFB 201 + 00008B85 79 3339 DEFB 'y' + 00008B86 83 3340 DEFB 131 + 00008B87 2B 3341 DEFB '+' + 00008B88 77 3342 DEFB 'w' + 00008B89 78 3343 DEFB 'x' + 00008B8A 8A 3344 DEFB 138 + 00008B8B 23 3345 DEFB '#' + 00008B8C 77 3346 DEFB 'w' + 00008B8D 23 3347 DEFB '#' + 00008B8E 4E 3348 DEFB 'N' + 00008B8F 23 3349 DEFB '#' + 00008B90 46 3350 DEFB 'F' + 00008B91 79 3351 DEFB 'y' + 00008B92 B0 3352 DEFB 176 + 00008B93 20 3353 DEFB ' ' + 00008B94 F0 3354 DEFB 240 + 00008B95 C9 3355 DEFB 201 + 00008B96 21 3356 DEFB '!' + 00008B97 81 3357 DEFB 129 + 00008B98 07 3358 DEFB 7 + 00008B99 CD 3359 DEFB 205 + 00008B9A 37 3360 DEFB '7' + 00008B9B F0 3361 DEFB 240 + 00008B9C C8 3362 DEFB 200 + 00008B9D CD 3363 DEFB 205 + 00008B9E 56 3364 DEFB 'V' + 00008B9F 01 3365 DEFB 1 + 00008BA0 6C 3366 DEFB 'l' + 00008BA1 6F 3367 DEFB 'o' + 00008BA2 61 3368 DEFB 'a' + 00008BA3 64 3369 DEFB 'd' + 00008BA4 69 3370 DEFB 'i' + 00008BA5 6E 3371 DEFB 'n' + 00008BA6 67 3372 DEFB 'g' + 00008BA7 20 3373 DEFB ' ' + 00008BA8 41 3374 DEFB 'A' + 00008BA9 3A 3375 DEFB ':' + 00008BAA 4B 3376 DEFB 'K' + 00008BAB 45 3377 DEFB 'E' + 00008BAC 52 3378 DEFB 'R' + 00008BAD 4E 3379 DEFB 'N' + 00008BAE 45 3380 DEFB 'E' + 00008BAF 4C 3381 DEFB 'L' + 00008BB0 2E 3382 DEFB '.' + 00008BB1 42 3383 DEFB 'B' + 00008BB2 49 3384 DEFB 'I' + 00008BB3 4E 3385 DEFB 'N' + 00008BB4 0D 3386 DEFB 13 + 00008BB5 0A 3387 DEFB 10 + 00008BB6 00 3388 DEFB 0 + 00008BB7 3E 3389 DEFB '>' + 00008BB8 31 3390 DEFB '1' + 00008BB9 32 3391 DEFB '2' + 00008BBA 62 3392 DEFB 'b' + 00008BBB 07 3393 DEFB 7 + 00008BBC ED 3394 DEFB 237 + 00008BBD 5B 3395 DEFB '[' + 00008BBE 91 3396 DEFB 145 + 00008BBF 07 3397 DEFB 7 + 00008BC0 B7 3398 DEFB 183 + 00008BC1 ED 3399 DEFB 237 + 00008BC2 52 3400 DEFB 'R' + 00008BC3 20 3401 DEFB ' ' + 00008BC4 23 3402 DEFB '#' + 00008BC5 19 3403 DEFB 25 + 00008BC6 22 3404 DEFB '"' + 00008BC7 8F 3405 DEFB 143 + 00008BC8 07 3406 DEFB 7 + 00008BC9 7D 3407 DEFB '}' + 00008BCA B4 3408 DEFB 180 + 00008BCB 20 3409 DEFB ' ' + 00008BCC 04 3410 DEFB 4 + 00008BCD 21 3411 DEFB '!' + 00008BCE 8E 3412 DEFB 142 + 00008BCF 07 3413 DEFB 7 + 00008BD0 34 3414 DEFB '4' + 00008BD1 21 3415 DEFB '!' + 00008BD2 00 3416 DEFB 0 + 00008BD3 40 3417 DEFB '@' + 00008BD4 19 3418 DEFB 25 + 00008BD5 22 3419 DEFB '"' + 00008BD6 91 3420 DEFB 145 + 00008BD7 07 3421 DEFB 7 + 00008BD8 21 3422 DEFB '!' + 00008BD9 8D 3423 DEFB 141 + 00008BDA 07 3424 DEFB 7 + 00008BDB 34 3425 DEFB '4' + 00008BDC 21 3426 DEFB '!' + 00008BDD 81 3427 DEFB 129 + 00008BDE 07 3428 DEFB 7 + 00008BDF CD 3429 DEFB 205 + 00008BE0 37 3430 DEFB '7' + 00008BE1 F0 3431 DEFB 240 + 00008BE2 20 3432 DEFB ' ' + 00008BE3 D8 3433 DEFB 216 + 00008BE4 21 3434 DEFB '!' + 00008BE5 8D 3435 DEFB 141 + 00008BE6 07 3436 DEFB 7 + 00008BE7 35 3437 DEFB '5' + 00008BE8 CD 3438 DEFB 205 + 00008BE9 B0 3439 DEFB 176 + 00008BEA 01 3440 DEFB 1 + 00008BEB FD 3441 DEFB 253 + 00008BEC 21 3442 DEFB '!' + 00008BED 00 3443 DEFB 0 + 00008BEE 00 3444 DEFB 0 + 00008BEF 21 3445 DEFB '!' + 00008BF0 FF 3446 DEFB 255 + 00008BF1 0D 3447 DEFB 13 + 00008BF2 11 3448 DEFB 17 + 00008BF3 03 3449 DEFB 3 + 00008BF4 0C 3450 DEFB 12 + 00008BF5 01 3451 DEFB 1 + 00008BF6 14 3452 DEFB 20 + 00008BF7 00 3453 DEFB 0 + 00008BF8 CD 3454 DEFB 205 + 00008BF9 46 3455 DEFB 'F' + 00008BFA 06 3456 DEFB 6 + 00008BFB CD 3457 DEFB 205 + 00008BFC C2 3458 DEFB 194 + 00008BFD 00 3459 DEFB 0 + 00008BFE CD 3460 DEFB 205 + 00008BFF DF 3461 DEFB 223 + 00008C00 00 3462 DEFB 0 + 00008C01 CD 3463 DEFB 205 + 00008C02 FA 3464 DEFB 250 + 00008C03 01 3465 DEFB 1 + 00008C04 D5 3466 DEFB 213 + 00008C05 FD 3467 DEFB 253 + 00008C06 E1 3468 DEFB 225 + 00008C07 11 3469 DEFB 17 + 00008C08 00 3470 DEFB 0 + 00008C09 0C 3471 DEFB 12 + 00008C0A 6B 3472 DEFB 'k' + 00008C0B 63 3473 DEFB 'c' + 00008C0C CD 3474 DEFB 205 + 00008C0D 46 3475 DEFB 'F' + 00008C0E 06 3476 DEFB 6 + 00008C0F D5 3477 DEFB 213 + 00008C10 CD 3478 DEFB 205 + 00008C11 02 3479 DEFB 2 + 00008C12 02 3480 DEFB 2 + 00008C13 EB 3481 DEFB 235 + 00008C14 D1 3482 DEFB 209 + 00008C15 CD 3483 DEFB 205 + 00008C16 46 3484 DEFB 'F' + 00008C17 06 3485 DEFB 6 + 00008C18 CD 3486 DEFB 205 + 00008C19 E4 3487 DEFB 228 + 00008C1A 01 3488 DEFB 1 + 00008C1B CD 3489 DEFB 205 + 00008C1C 90 3490 DEFB 144 + 00008C1D 01 3491 DEFB 1 + 00008C1E 3A 3492 DEFB ':' + 00008C1F 8D 3493 DEFB 141 + 00008C20 07 3494 DEFB 7 + 00008C21 3C 3495 DEFB '<' + 00008C22 07 3496 DEFB 7 + 00008C23 07 3497 DEFB 7 + 00008C24 47 3498 DEFB 'G' + 00008C25 21 3499 DEFB '!' + 00008C26 80 3500 DEFB 128 + 00008C27 10 3501 DEFB 16 + 00008C28 3E 3502 DEFB '>' + 00008C29 B1 3503 DEFB 177 + 00008C2A 77 3504 DEFB 'w' + 00008C2B 23 3505 DEFB '#' + 00008C2C 3C 3506 DEFB '<' + 00008C2D 10 3507 DEFB 16 + 00008C2E FB 3508 DEFB 251 + 00008C2F C3 3509 DEFB 195 + 00008C30 6D 3510 DEFB 'm' + 00008C31 00 3511 DEFB 0 + 00008C32 F5 3512 DEFB 245 + 00008C33 ED 3513 DEFB 237 + 00008C34 38 3514 DEFB '8' + 00008C35 05 3515 DEFB 5 + 00008C36 E6 3516 DEFB 230 + 00008C37 02 3517 DEFB 2 + 00008C38 28 3518 DEFB '(' + 00008C39 F9 3519 DEFB 249 + 00008C3A F1 3520 DEFB 241 + 00008C3B ED 3521 DEFB 237 + 00008C3C 39 3522 DEFB '9' + 00008C3D 07 3523 DEFB 7 + 00008C3E C9 3524 DEFB 201 + 00008C3F 3E 3525 DEFB '>' + 00008C40 0D 3526 DEFB 13 + 00008C41 CD 3527 DEFB 205 + 00008C42 09 3528 DEFB 9 + 00008C43 06 3529 DEFB 6 + 00008C44 3E 3530 DEFB '>' + 00008C45 0A 3531 DEFB 10 + 00008C46 18 3532 DEFB 24 + 00008C47 EA 3533 DEFB 234 + 00008C48 7C 3534 DEFB '|' + 00008C49 CD 3535 DEFB 205 + 00008C4A 24 3536 DEFB '$' + 00008C4B 06 3537 DEFB 6 + 00008C4C 7D 3538 DEFB '}' + 00008C4D F5 3539 DEFB 245 + 00008C4E 0F 3540 DEFB 15 + 00008C4F 0F 3541 DEFB 15 + 00008C50 0F 3542 DEFB 15 + 00008C51 0F 3543 DEFB 15 + 00008C52 CD 3544 DEFB 205 + 00008C53 2D 3545 DEFB '-' + 00008C54 06 3546 DEFB 6 + 00008C55 F1 3547 DEFB 241 + 00008C56 E6 3548 DEFB 230 + 00008C57 0F 3549 DEFB 15 + 00008C58 C6 3550 DEFB 198 + 00008C59 90 3551 DEFB 144 + 00008C5A 27 3552 DEFB '''' + 00008C5B CE 3553 DEFB 206 + 00008C5C 40 3554 DEFB '@' + 00008C5D 27 3555 DEFB '''' + 00008C5E 18 3556 DEFB 24 + 00008C5F D2 3557 DEFB 210 + 00008C60 E3 3558 DEFB 227 + 00008C61 F5 3559 DEFB 245 + 00008C62 7E 3560 DEFB '~' + 00008C63 23 3561 DEFB '#' + 00008C64 B7 3562 DEFB 183 + 00008C65 28 3563 DEFB '(' + 00008C66 05 3564 DEFB 5 + 00008C67 CD 3565 DEFB 205 + 00008C68 09 3566 DEFB 9 + 00008C69 06 3567 DEFB 6 + 00008C6A 18 3568 DEFB 24 + 00008C6B F6 3569 DEFB 246 + 00008C6C F1 3570 DEFB 241 + 00008C6D E3 3571 DEFB 227 + 00008C6E C9 3572 DEFB 201 + 00008C6F 7B 3573 DEFB '{' + 00008C70 FE 3574 DEFB 254 + 00008C71 04 3575 DEFB 4 + 00008C72 D2 3576 DEFB 210 + 00008C73 C4 3577 DEFB 196 + 00008C74 06 3578 DEFB 6 + 00008C75 79 3579 DEFB 'y' + 00008C76 E6 3580 DEFB 230 + 00008C77 1F 3581 DEFB 31 + 00008C78 C5 3582 DEFB 197 + 00008C79 4F 3583 DEFB 'O' + 00008C7A 06 3584 DEFB 6 + 00008C7B 00 3585 DEFB 0 + 00008C7C CD 3586 DEFB 205 + 00008C7D 96 3587 DEFB 150 + 00008C7E 06 3588 DEFB 6 + 00008C7F 0C 3589 DEFB 12 + 00008C80 0D 3590 DEFB 13 + 00008C81 28 3591 DEFB '(' + 00008C82 11 3592 DEFB 17 + 00008C83 ED 3593 DEFB 237 + 00008C84 38 3594 DEFB '8' + 00008C85 30 3595 DEFB '0' + 00008C86 EE 3596 DEFB 238 + 00008C87 50 3597 DEFB 'P' + 00008C88 ED 3598 DEFB 237 + 00008C89 39 3599 DEFB '9' + 00008C8A 30 3600 DEFB '0' + 00008C8B FD 3601 DEFB 253 + 00008C8C 09 3602 DEFB 9 + 00008C8D DC 3603 DEFB 220 + 00008C8E C0 3604 DEFB 192 + 00008C8F 06 3605 DEFB 6 + 00008C90 09 3606 DEFB 9 + 00008C91 DC 3607 DEFB 220 + 00008C92 C2 3608 DEFB 194 + 00008C93 06 3609 DEFB 6 + 00008C94 C1 3610 DEFB 193 + 00008C95 3E 3611 DEFB '>' + 00008C96 05 3612 DEFB 5 + 00008C97 CB 3613 DEFB 203 + 00008C98 38 3614 DEFB '8' + 00008C99 CB 3615 DEFB 203 + 00008C9A 19 3616 DEFB 25 + 00008C9B 3D 3617 DEFB '=' + 00008C9C 20 3618 DEFB ' ' + 00008C9D F9 3619 DEFB 249 + 00008C9E 18 3620 DEFB 24 + 00008C9F 1A 3621 DEFB 26 + 00008CA0 C5 3622 DEFB 197 + 00008CA1 01 3623 DEFB 1 + 00008CA2 20 3624 DEFB ' ' + 00008CA3 00 3625 DEFB 0 + 00008CA4 ED 3626 DEFB 237 + 00008CA5 09 3627 DEFB 9 + 00008CA6 26 3628 DEFB '&' + 00008CA7 ED 3629 DEFB 237 + 00008CA8 38 3630 DEFB '8' + 00008CA9 30 3631 DEFB '0' + 00008CAA EE 3632 DEFB 238 + 00008CAB 50 3633 DEFB 'P' + 00008CAC ED 3634 DEFB 237 + 00008CAD 39 3635 DEFB '9' + 00008CAE 30 3636 DEFB '0' + 00008CAF FD 3637 DEFB 253 + 00008CB0 09 3638 DEFB 9 + 00008CB1 DC 3639 DEFB 220 + 00008CB2 C0 3640 DEFB 192 + 00008CB3 06 3641 DEFB 6 + 00008CB4 09 3642 DEFB 9 + 00008CB5 DC 3643 DEFB 220 + 00008CB6 C2 3644 DEFB 194 + 00008CB7 06 3645 DEFB 6 + 00008CB8 C1 3646 DEFB 193 + 00008CB9 0B 3647 DEFB 11 + 00008CBA 78 3648 DEFB 'x' + 00008CBB B1 3649 DEFB 177 + 00008CBC 20 3650 DEFB ' ' + 00008CBD E2 3651 DEFB 226 + 00008CBE C9 3652 DEFB 201 + 00008CBF ED 3653 DEFB 237 + 00008CC0 09 3654 DEFB 9 + 00008CC1 26 3655 DEFB '&' + 00008CC2 ED 3656 DEFB 237 + 00008CC3 01 3657 DEFB 1 + 00008CC4 27 3658 DEFB '''' + 00008CC5 18 3659 DEFB 24 + 00008CC6 05 3660 DEFB 5 + 00008CC7 3E 3661 DEFB '>' + 00008CC8 01 3662 DEFB 1 + 00008CC9 ED 3663 DEFB 237 + 00008CCA 39 3664 DEFB '9' + 00008CCB 26 3665 DEFB '&' + 00008CCC E5 3666 DEFB 229 + 00008CCD FD 3667 DEFB 253 + 00008CCE E5 3668 DEFB 229 + 00008CCF ED 3669 DEFB 237 + 00008CD0 29 3670 DEFB ')' + 00008CD1 23 3671 DEFB '#' + 00008CD2 ED 3672 DEFB 237 + 00008CD3 21 3673 DEFB '!' + 00008CD4 24 3674 DEFB '$' + 00008CD5 ED 3675 DEFB 237 + 00008CD6 19 3676 DEFB 25 + 00008CD7 25 3677 DEFB '%' + 00008CD8 E1 3678 DEFB 225 + 00008CD9 ED 3679 DEFB 237 + 00008CDA 29 3680 DEFB ')' + 00008CDB 20 3681 DEFB ' ' + 00008CDC ED 3682 DEFB 237 + 00008CDD 21 3683 DEFB '!' + 00008CDE 21 3684 DEFB '!' + 00008CDF ED 3685 DEFB 237 + 00008CE0 11 3686 DEFB 17 + 00008CE1 22 3687 DEFB '"' + 00008CE2 E1 3688 DEFB 225 + 00008CE3 3E 3689 DEFB '>' + 00008CE4 02 3690 DEFB 2 + 00008CE5 ED 3691 DEFB 237 + 00008CE6 39 3692 DEFB '9' + 00008CE7 31 3693 DEFB '1' + 00008CE8 C9 3694 DEFB 201 + 00008CE9 14 3695 DEFB 20 + 00008CEA C9 3696 DEFB 201 + 00008CEB 1C 3697 DEFB 28 + 00008CEC C9 3698 DEFB 201 + 00008CED C5 3699 DEFB 197 + 00008CEE AF 3700 DEFB 175 + 00008CEF ED 3701 DEFB 237 + 00008CF0 39 3702 DEFB '9' + 00008CF1 26 3703 DEFB '&' + 00008CF2 ED 3704 DEFB 237 + 00008CF3 39 3705 DEFB '9' + 00008CF4 27 3706 DEFB '''' + 00008CF5 3E 3707 DEFB '>' + 00008CF6 04 3708 DEFB 4 + 00008CF7 CB 3709 DEFB 203 + 00008CF8 38 3710 DEFB '8' + 00008CF9 CB 3711 DEFB 203 + 00008CFA 19 3712 DEFB 25 + 00008CFB 3D 3713 DEFB '=' + 00008CFC 20 3714 DEFB ' ' + 00008CFD F9 3715 DEFB 249 + 00008CFE 78 3716 DEFB 'x' + 00008CFF B1 3717 DEFB 177 + 00008D00 28 3718 DEFB '(' + 00008D01 0D 3719 DEFB 13 + 00008D02 C5 3720 DEFB 197 + 00008D03 01 3721 DEFB 1 + 00008D04 10 3722 DEFB 16 + 00008D05 00 3723 DEFB 0 + 00008D06 CD 3724 DEFB 205 + 00008D07 EE 3725 DEFB 238 + 00008D08 06 3726 DEFB 6 + 00008D09 C1 3727 DEFB 193 + 00008D0A 0B 3728 DEFB 11 + 00008D0B 78 3729 DEFB 'x' + 00008D0C B1 3730 DEFB 177 + 00008D0D 20 3731 DEFB ' ' + 00008D0E F3 3732 DEFB 243 + 00008D0F C1 3733 DEFB 193 + 00008D10 47 3734 DEFB 'G' + 00008D11 79 3735 DEFB 'y' + 00008D12 E6 3736 DEFB 230 + 00008D13 0F 3737 DEFB 15 + 00008D14 28 3738 DEFB '(' + 00008D15 20 3739 DEFB ' ' + 00008D16 4F 3740 DEFB 'O' + 00008D17 ED 3741 DEFB 237 + 00008D18 30 3742 DEFB '0' + 00008D19 26 3743 DEFB '&' + 00008D1A CC 3744 DEFB 204 + 00008D1B 9E 3745 DEFB 158 + 00008D1C 06 3746 DEFB 6 + 00008D1D FD 3747 DEFB 253 + 00008D1E 09 3748 DEFB 9 + 00008D1F DC 3749 DEFB 220 + 00008D20 C0 3750 DEFB 192 + 00008D21 06 3751 DEFB 6 + 00008D22 09 3752 DEFB 9 + 00008D23 DC 3753 DEFB 220 + 00008D24 C2 3754 DEFB 194 + 00008D25 06 3755 DEFB 6 + 00008D26 41 3756 DEFB 'A' + 00008D27 0E 3757 DEFB 14 + 00008D28 01 3758 DEFB 1 + 00008D29 ED 3759 DEFB 237 + 00008D2A 38 3760 DEFB '8' + 00008D2B 30 3761 DEFB '0' + 00008D2C EE 3762 DEFB 238 + 00008D2D 50 3763 DEFB 'P' + 00008D2E ED 3764 DEFB 237 + 00008D2F 39 3765 DEFB '9' + 00008D30 30 3766 DEFB '0' + 00008D31 ED 3767 DEFB 237 + 00008D32 09 3768 DEFB 9 + 00008D33 26 3769 DEFB '&' + 00008D34 10 3770 DEFB 16 + 00008D35 F8 3771 DEFB 248 + 00008D36 C9 3772 DEFB 201 + 00008D37 3E 3773 DEFB '>' + 00008D38 74 3774 DEFB 't' + 00008D39 ED 3775 DEFB 237 + 00008D3A 39 3776 DEFB '9' + 00008D3B 00 3777 DEFB 0 + 00008D3C ED 3778 DEFB 237 + 00008D3D 39 3779 DEFB '9' + 00008D3E 01 3780 DEFB 1 + 00008D3F 3E 3781 DEFB '>' + 00008D40 22 3782 DEFB '"' + 00008D41 ED 3783 DEFB 237 + 00008D42 39 3784 DEFB '9' + 00008D43 02 3785 DEFB 2 + 00008D44 ED 3786 DEFB 237 + 00008D45 39 3787 DEFB '9' + 00008D46 03 3788 DEFB 3 + 00008D47 97 3789 DEFB 151 + 00008D48 ED 3790 DEFB 237 + 00008D49 39 3791 DEFB '9' + 00008D4A 04 3792 DEFB 4 + 00008D4B ED 3793 DEFB 237 + 00008D4C 39 3794 DEFB '9' + 00008D4D 05 3795 DEFB 5 + 00008D4E ED 3796 DEFB 237 + 00008D4F 30 3797 DEFB '0' + 00008D50 08 3798 DEFB 8 + 00008D51 ED 3799 DEFB 237 + 00008D52 30 3800 DEFB '0' + 00008D53 09 3801 DEFB 9 + 00008D54 ED 3802 DEFB 237 + 00008D55 39 3803 DEFB '9' + 00008D56 27 3804 DEFB '''' + 00008D57 ED 3805 DEFB 237 + 00008D58 39 3806 DEFB '9' + 00008D59 2F 3807 DEFB '/' + 00008D5A ED 3808 DEFB 237 + 00008D5B 39 3809 DEFB '9' + 00008D5C 29 3810 DEFB ')' + 00008D5D ED 3811 DEFB 237 + 00008D5E 39 3812 DEFB '9' + 00008D5F 2A 3813 DEFB '*' + 00008D60 ED 3814 DEFB 237 + 00008D61 39 3815 DEFB '9' + 00008D62 2B 3816 DEFB '+' + 00008D63 ED 3817 DEFB 237 + 00008D64 39 3818 DEFB '9' + 00008D65 2C 3819 DEFB ',' + 00008D66 C9 3820 DEFB 201 + 00008D67 02 3821 DEFB 2 + 00008D68 00 3822 DEFB 0 + 00008D69 06 3823 DEFB 6 + 00008D6A 00 3824 DEFB 0 + 00008D6B 26 3825 DEFB '&' + 00008D6C 00 3826 DEFB 0 + 00008D6D 0C 3827 DEFB 12 + 00008D6E 00 3828 DEFB 0 + 00008D6F 1D 3829 DEFB 29 + 00008D70 00 3830 DEFB 0 + 00008D71 00 3831 DEFB 0 + 00008D72 00 3832 DEFB 0 + 00008D73 2F 3833 DEFB '/' + 00008D74 62 3834 DEFB 'b' + 00008D75 6F 3835 DEFB 'o' + 00008D76 6F 3836 DEFB 'o' + 00008D77 74 3837 DEFB 't' + 00008D78 2F 3838 DEFB '/' + 00008D79 6B 3839 DEFB 'k' + 00008D7A 65 3840 DEFB 'e' + 00008D7B 72 3841 DEFB 'r' + 00008D7C 6E 3842 DEFB 'n' + 00008D7D 65 3843 DEFB 'e' + 00008D7E 6C 3844 DEFB 'l' + 00008D7F 2E 3845 DEFB '.' + 00008D80 62 3846 DEFB 'b' + 00008D81 69 3847 DEFB 'i' + 00008D82 6E 3848 DEFB 'n' + 00008D83 00 3849 DEFB 0 + 00008D84 72 3850 DEFB 'r' + 00008D85 6F 3851 DEFB 'o' + 00008D86 6F 3852 DEFB 'o' + 00008D87 74 3853 DEFB 't' + 00008D88 3D 3854 DEFB '=' + 00008D89 68 3855 DEFB 'h' + 00008D8A 64 3856 DEFB 'd' + 00008D8B 30 3857 DEFB '0' + 00008D8C 00 3858 DEFB 0 + 00008D8D 2A 3859 DEFB '*' + 00008D8E 00 3860 DEFB 0 + 00008D8F 00 3861 DEFB 0 + 00008D90 00 3862 DEFB 0 + 00008D91 53 3863 DEFB 'S' + 00008D92 4E 3864 DEFB 'N' + 00008D93 3D 3865 DEFB '=' + 00008D94 30 3866 DEFB '0' + 00008D95 30 3867 DEFB '0' + 00008D96 30 3868 DEFB '0' + 00008D97 30 3869 DEFB '0' + 00008D98 30 3870 DEFB '0' + 00008D99 00 3871 DEFB 0 + 00008D9A 62 3872 DEFB 'b' + 00008D9B 6F 3873 DEFB 'o' + 00008D9C 6F 3874 DEFB 'o' + 00008D9D 74 3875 DEFB 't' + 00008D9E 00 3876 DEFB 0 + 00008D9F 6B 3877 DEFB 'k' + 00008DA0 65 3878 DEFB 'e' + 00008DA1 72 3879 DEFB 'r' + 00008DA2 6E 3880 DEFB 'n' + 00008DA3 65 3881 DEFB 'e' + 00008DA4 6C 3882 DEFB 'l' + 00008DA5 2E 3883 DEFB '.' + 00008DA6 62 3884 DEFB 'b' + 00008DA7 69 3885 DEFB 'i' + 00008DA8 6E 3886 DEFB 'n' + 00008DA9 00 3887 DEFB 0 + 00008DAA 01 3888 DEFB 1 + 00008DAB 4B 3889 DEFB 'K' + 00008DAC 45 3890 DEFB 'E' + 00008DAD 52 3891 DEFB 'R' + 00008DAE 4E 3892 DEFB 'N' + 00008DAF 45 3893 DEFB 'E' + 00008DB0 4C 3894 DEFB 'L' + 00008DB1 20 3895 DEFB ' ' + 00008DB2 20 3896 DEFB ' ' + 00008DB3 42 3897 DEFB 'B' + 00008DB4 49 3898 DEFB 'I' + 00008DB5 4E 3899 DEFB 'N' + 00008DB6 00 3900 DEFB 0 + 00008DB7 0C 3901 DEFB 12 + 00008DB8 00 3902 DEFB 0 + 00008DB9 00 3903 DEFB 0 + 00008DBA 00 3904 DEFB 0 + 00008DBB 40 3905 DEFB '@' + 00008DBC 1A 3906 DEFB 26 + 00008DBD 1A 3907 DEFB 26 + 00008DBE 1A 3908 DEFB 26 + 00008DBF 1A 3909 DEFB 26 + 00008DC0 1A 3910 DEFB 26 + 00008DC1 1A 3911 DEFB 26 + 00008DC2 1A 3912 DEFB 26 + 00008DC3 1A 3913 DEFB 26 + 00008DC4 1A 3914 DEFB 26 + 00008DC5 1A 3915 DEFB 26 + 00008DC6 1A 3916 DEFB 26 + 00008DC7 1A 3917 DEFB 26 + 00008DC8 1A 3918 DEFB 26 + 00008DC9 1A 3919 DEFB 26 + 00008DCA 1A 3920 DEFB 26 + 00008DCB 1A 3921 DEFB 26 + 00008DCC 1A 3922 DEFB 26 + 00008DCD 1A 3923 DEFB 26 + 00008DCE 1A 3924 DEFB 26 + 00008DCF 1A 3925 DEFB 26 + 00008DD0 1A 3926 DEFB 26 + 00008DD1 1A 3927 DEFB 26 + 00008DD2 1A 3928 DEFB 26 + 00008DD3 1A 3929 DEFB 26 + 00008DD4 1A 3930 DEFB 26 + 00008DD5 1A 3931 DEFB 26 + 00008DD6 1A 3932 DEFB 26 + 00008DD7 1A 3933 DEFB 26 + 00008DD8 1A 3934 DEFB 26 + 00008DD9 1A 3935 DEFB 26 + 00008DDA 1A 3936 DEFB 26 + 00008DDB 1A 3937 DEFB 26 + 00008DDC 1A 3938 DEFB 26 + 00008DDD 1A 3939 DEFB 26 + 00008DDE 1A 3940 DEFB 26 + 00008DDF 1A 3941 DEFB 26 + 00008DE0 1A 3942 DEFB 26 + 00008DE1 1A 3943 DEFB 26 + 00008DE2 1A 3944 DEFB 26 + 00008DE3 1A 3945 DEFB 26 + 00008DE4 1A 3946 DEFB 26 + 00008DE5 1A 3947 DEFB 26 + 00008DE6 1A 3948 DEFB 26 + 00008DE7 1A 3949 DEFB 26 + 00008DE8 1A 3950 DEFB 26 + 00008DE9 1A 3951 DEFB 26 + 00008DEA 1A 3952 DEFB 26 + 00008DEB 1A 3953 DEFB 26 + 00008DEC 1A 3954 DEFB 26 + 00008DED 1A 3955 DEFB 26 + 00008DEE 1A 3956 DEFB 26 + 00008DEF 1A 3957 DEFB 26 + 00008DF0 1A 3958 DEFB 26 + 00008DF1 1A 3959 DEFB 26 + 00008DF2 1A 3960 DEFB 26 + 00008DF3 1A 3961 DEFB 26 + 00008DF4 1A 3962 DEFB 26 + 00008DF5 1A 3963 DEFB 26 + 00008DF6 1A 3964 DEFB 26 + 00008DF7 1A 3965 DEFB 26 + 00008DF8 1A 3966 DEFB 26 + 00008DF9 1A 3967 DEFB 26 + 00008DFA 1A 3968 DEFB 26 + 00008DFB 1A 3969 DEFB 26 + 00008DFC 1A 3970 DEFB 26 + 00008DFD 1A 3971 DEFB 26 + 00008DFE 1A 3972 DEFB 26 + 00008DFF 1A 3973 DEFB 26 + 00008E00 1A 3974 DEFB 26 + 00008E01 1A 3975 DEFB 26 + 00008E02 1A 3976 DEFB 26 + 00008E03 1A 3977 DEFB 26 + 00008E04 1A 3978 DEFB 26 + 00008E05 1A 3979 DEFB 26 + 00008E06 1A 3980 DEFB 26 + 00008E07 1A 3981 DEFB 26 + 00008E08 1A 3982 DEFB 26 + 00008E09 1A 3983 DEFB 26 + 00008E0A 1A 3984 DEFB 26 + 00008E0B 1A 3985 DEFB 26 + 00008E0C 1A 3986 DEFB 26 + 00008E0D 1A 3987 DEFB 26 + 00008E0E 1A 3988 DEFB 26 + 00008E0F 1A 3989 DEFB 26 + 00008E10 1A 3990 DEFB 26 + 00008E11 1A 3991 DEFB 26 + 00008E12 1A 3992 DEFB 26 + 00008E13 1A 3993 DEFB 26 + 00008E14 1A 3994 DEFB 26 + 00008E15 1A 3995 DEFB 26 + 00008E16 1A 3996 DEFB 26 + 00008E17 1A 3997 DEFB 26 + 00008E18 1A 3998 DEFB 26 + 00008E19 1A 3999 DEFB 26 + 00008E1A 1A 4000 DEFB 26 + 00008E1B 1A 4001 DEFB 26 + 00008E1C 1A 4002 DEFB 26 + 00008E1D 1A 4003 DEFB 26 + 00008E1E 1A 4004 DEFB 26 + 00008E1F 1A 4005 DEFB 26 + 00008E20 1A 4006 DEFB 26 + 00008E21 1A 4007 DEFB 26 + 00008E22 1A 4008 DEFB 26 + 00008E23 1A 4009 DEFB 26 + 00008E24 1A 4010 DEFB 26 + 00008E25 1A 4011 DEFB 26 + 00008E26 1A 4012 DEFB 26 + 00008E27 1A 4013 DEFB 26 + 00008E28 1A 4014 DEFB 26 + 00008E29 01 00 4015 DEFW 1 + 00008E2B 2E 4016 DEFB '.' + 00008E2C 00 4017 DEFB 0 + 00008E2D 00 00 00 00 00 00 00 4018 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 + 00 00 00 00 00 + 00008E39 01 00 4019 DEFW 1 + 00008E3B 2E 2E 4020 DEFB '..' + 00008E3D 00 4021 DEFB 0 + 00008E3E 00 00 00 00 00 00 00 4022 DEFB 0,0,0,0,0,0,0,0,0,0,0 + 00 00 00 00 + 00008E49 00 00 00 00 00 00 00 4023 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008E6A 00 00 00 00 00 00 00 4024 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008E8B 00 00 00 00 00 00 00 4025 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008EAC 00 00 00 00 00 00 00 4026 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008ECD 00 00 00 00 00 00 00 4027 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008EEE 00 00 00 00 00 00 00 4028 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008F0F 00 00 00 00 00 00 00 4029 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008F30 00 00 00 00 00 00 00 4030 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008F51 00 00 00 00 00 00 00 4031 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008F72 00 00 00 00 00 00 00 4032 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008F93 00 00 00 00 00 00 00 4033 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008FB4 00 00 00 00 00 00 00 4034 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008FD5 00 00 00 00 00 00 00 4035 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00008FF6 00 00 00 00 00 00 00 4036 DEFB 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 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 + 00 00 00 00 00 + 00009017 00 00 00 00 00 00 00 4037 DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 00 00 00 00 00 00 00 + 00 00 00 00 + 00009029 00 4038 DEFB 0 + 0000902A 00 4039 DEFB 0 + 0000902B 00 4040 DEFB 0 + 0000902C 00 4041 DEFB 0 + 0000902D 00 4042 DEFB 0 + 00000A05 4043 END + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1. +Hexadecimal [32-Bits] +mkfs(17) +Symbol Table + + .__.ABS. = 00000000 G | 3 ?0002 0000061A R + 1 ?0003 0000001C R | 1 ?0004 00000039 R + 2 ?0005 00000000 R | 1 ?0006 00000058 R + 1 ?0007 00000075 R | 2 ?0008 0000001A R + 1 ?0009 0000009E R | 1 ?0010 000000CC R + 2 ?0011 00000035 R | 1 ?0012 000000E9 R + 1 ?0013 00000135 R | 1 ?0014 000000F0 R + 1 ?0015 00000107 R | 1 ?0016 00000135 R + 2 ?0017 00000042 R | 1 ?0018 00000161 R + 1 ?0019 0000018F R | 1 ?0020 000001AC R + 1 ?0021 000001DA R | 2 ?0022 0000004F R + 1 ?0023 00000207 R | 1 ?0024 00000217 R + 2 ?0025 0000005D R | 1 ?0026 00000244 R + 1 ?0027 0000023F R | 1 ?0028 00000244 R + 1 ?0029 0000023F R | 1 ?0030 0000023F R + 1 ?0031 0000023F R | 1 ?0032 0000023F R + 1 ?0033 00000247 R | 1 ?0034 00000255 R + 1 ?0035 0000026D R | 2 ?0036 00000060 R + 1 ?0037 00000313 R | 1 ?0038 00000274 R + 1 ?0039 00000283 R | 1 ?0041 000002A9 R + 1 ?0042 000002C4 R | 1 ?0043 000002CC R + 1 ?0044 00000327 R | 1 ?0045 0000033F R + 2 ?0046 00000078 R | 1 ?0047 00000345 R + 1 ?0048 0000035E R | 1 ?0049 0000036A R + 1 ?0050 000003DC R | 1 ?0051 0000037A R + 1 ?0052 0000038B R | 1 ?0053 000003A1 R + 1 ?0054 000003C1 R | 1 ?0055 000003A1 R + 1 ?0056 000003A1 R | 2 ?0057 0000009C R + 1 ?0058 000003E2 R | 1 ?0059 00000409 R + 2 ?0060 000000A5 R | 1 ?0061 0000040F R + 1 ?0062 00000427 R | 2 ?0063 000000AE R + 1 ?0064 00000506 R | 1 ?0065 000004C2 R + 1 ?0066 000004E0 R | 1 ?0068 0000055C R + 1 ?0069 00000525 R | 1 ?0070 00000536 R + 1 ?0072 00000583 R | 1 ?0073 00000644 R + 1 ?0074 000005CE R | 1 ?0075 0000058A R + 1 ?0076 000005A8 R | 1 ?0078 00000624 R + 1 ?0079 000005ED R | 1 ?0080 000005FE R + 1 ?0082 000006E4 R | 1 ?0083 000006AD R + 1 ?0084 000006BE R | 1 ?0086 0000077C R + 1 ?0087 00000794 R | 2 ?0088 000000C7 R + 1 ?0089 000007E4 R | 1 ?0090 000007B1 R + 1 ?0091 000007C4 R | 1 ?0093 000008E0 R + 1 ?0094 00000807 R | 1 ?0095 00000837 R + 1 ?0096 00000837 R | 1 ?0097 00000837 R + 1 ?0098 000008DD R | 1 ?0099 00000854 R + 1 ?0100 0000085E R | 1 ?0101 000008DA R + 1 ?0102 00000892 R | 1 ?0103 00000899 R + 1 ?0104 000008A0 R | 1 ?0105 000008A7 R + 1 ?0106 000008AE R | 1 ?0107 000008B5 R + 2 ?0108 000000E0 R | 1 ?0109 000008F1 R + 1 ?0110 0000090E R | 2 ?0111 000000F3 R + 1 ?0112 00000943 R | 1 ?0113 00000971 R + 2 ?0114 00000124 R | 1 ?0115 000009BD R + 1 ?0116 000009E0 R | 1 ?0117 00000A13 R + 1 ?0118 00000A30 R | 1 ?0119 00000A13 R + 1 ?0120 00000A13 R | 2 ?0121 00000131 R + 1 ?0122 00000B3E R | 1 ?0123 00000BBB R + 2 ?0124 00000147 R | 1 ?0125 00000BFF R + 1 ?0126 00000C0A R | 2 ?0127 00000180 R + 2 ?0128 0000018A R | 1 ?0129 00000C1D R + 1 ?0130 00000C2B R | 1 ?0131 00000C45 R + 1 ?0132 00000C50 R | 2 ?0133 0000018C R + 1 ?0134 00000CD0 R | 1 ?0135 00000C84 R + 1 ?0136 00000C8E R | 2 ?0137 00000199 R + 1 ?0138 00000CAE R | 1 ?0139 00000D0F R + 1 ?0140 00000CC8 R | 1 ?0141 00000CF5 R + 2 ?0142 000001A6 R | 2 ?0143 000001B2 R + 1 ?0144 00000D3D R | 1 ?0145 00000D4F R + 2 ?0146 000001CD R | 1 ?0147 00000E50 R + 1 ?0148 00000D6E R | 1 ?0149 00000D8B R + 1 ?0150 00000DC2 R | 1 ?0151 00000DDD R + 1 ?0152 00000DE5 R | 1 ?0153 00000504 R + 1 ?0154 0000055A R | 1 ?0155 000005CC R + 1 ?0156 00000622 R | 1 ?0157 000006E2 R + 1 ?0158 000007E2 R | 1 ?0159 0000083F R + 1 ?0160 00000847 R | ?BANK_CALL_DIR ******** GX + ?BANK_LEAVE_DI ******** GX | ?CL64180B_4_06 ******** GX + ?C_LSH_L01 ******** GX | ?C_V_SWITCH_L0 ******** GX + ?ENT_AUTO_DIRE ******** GX | ?ENT_PARM_DIRE ******** GX + ?L_AND_L03 ******** GX | ?L_LSH_L03 ******** GX + ?SL_CMP_L03 ******** GX | ?SL_RSH_L03 ******** GX + ?SS_CMP_L02 ******** GX | ?US_DIV_L02 ******** GX + ?US_MOD_L02 ******** GX | ?US_RSH_L02 ******** GX + 4 _fmt 00000A00 GR | 4 _immov 00000A04 GR + 4 _quick 00000A02 GR | _read ******** GX + 4 _verb 00000A03 GR | _write ******** GX + 4 _yes 00000A01 GR | abort ******** GX + atoi ******** GX | bcopy ******** GX + bfill ******** GX | 3 bitmap_block 00000608 GR + 1 bitmap_dump 00000D5D GR | 3 bitmap_final 00000610 GR + 3 bitmap_immov 0000060C GR | 3 bitmap_inode 00000604 GR + 3 block_bitmap 00000616 GR | 4 bootblock 00000000 GR + bzero ******** GX | close ******** GX + 1 da_read 00000078 GR | 1 da_write 0000013B GR + 1 daread 00000000 GR | 3 dev 00000402 GR + 3 device_handle 00000000 GR | 3 device_name 00000002 GR + 4 dirbuf 00000800 GR | 1 doformatting 00000771 GR + 1 dwrite 0000003F GR | errno ******** GX + exit ******** GX | fflush ******** GX + fgets ******** GX | fprintf ******** GX + fputs ******** GX | 3 immov_bitmap 00000618 GR + 3 inode 00000404 GR | 3 inode_bitmap 00000614 GR + int_min ******** GX | lseek ******** GX + 1 main 000007E7 GR | malloc ******** GX + 1 mkfs 0000024A GR | open ******** GX + perror ******** GX | printf ******** GX + stderr ******** GX | stdin ******** GX + stdout ******** GX | strcpy ******** GX + 1 yes 000001E0 GR | 3 zeroed 00000202 GR + + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2. +Hexadecimal [32-Bits] +mkfs(17) +Area Table + + 0 _DEFAULT size 0 flags 0 + 1 CODE size E53 flags 0 + 2 CSTR size 1FA flags 0 + 3 UDATA0 size 81A flags 0 + 4 IDATA0 size A05 flags 0 + 5 CDATA0 size A05 flags 0 diff --git a/src/fsutil/mkfs.s01 b/src/fsutil/mkfs.s01 new file mode 100644 index 00000000..3fa25feb --- /dev/null +++ b/src/fsutil/mkfs.s01 @@ -0,0 +1,4043 @@ + NAME mkfs(17) + RSEG CODE(0) + RSEG CSTR(0) + RSEG UDATA0(0) + RSEG IDATA0(0) + RSEG CDATA0(0) + PUBLIC _fmt + PUBLIC _immov + PUBLIC _quick + EXTERN _read + PUBLIC _verb + EXTERN _write + PUBLIC _yes + EXTERN abort + EXTERN atoi + EXTERN bcopy + EXTERN bfill + PUBLIC bitmap_block + PUBLIC bitmap_dump + PUBLIC bitmap_final + PUBLIC bitmap_immov + PUBLIC bitmap_inode + PUBLIC block_bitmap + PUBLIC bootblock + EXTERN bzero + EXTERN close + PUBLIC da_read + PUBLIC da_write + PUBLIC daread + PUBLIC dev + PUBLIC device_handle + PUBLIC device_name + PUBLIC dirbuf + PUBLIC doformatting + PUBLIC dwrite + EXTERN errno + EXTERN exit + EXTERN fflush + EXTERN fgets + EXTERN fprintf + EXTERN fputs + PUBLIC immov_bitmap + PUBLIC inode + PUBLIC inode_bitmap + EXTERN int_min + EXTERN lseek + PUBLIC main + EXTERN malloc + PUBLIC mkfs + EXTERN open + EXTERN perror + EXTERN printf + EXTERN stderr + EXTERN stdin + EXTERN stdout + EXTERN strcpy + PUBLIC yes + PUBLIC zeroed + EXTERN ?CL64180B_4_06_L00 + EXTERN ?C_LSH_L01 + EXTERN ?US_RSH_L02 + EXTERN ?US_DIV_L02 + EXTERN ?US_MOD_L02 + EXTERN ?SS_CMP_L02 + EXTERN ?L_LSH_L03 + EXTERN ?SL_RSH_L03 + EXTERN ?L_AND_L03 + EXTERN ?SL_CMP_L03 + EXTERN ?C_V_SWITCH_L06 + EXTERN ?BANK_CALL_DIRECT_L08 + EXTERN ?BANK_LEAVE_DIRECT_L08 + EXTERN ?ENT_PARM_DIRECT_L09 + EXTERN ?ENT_AUTO_DIRECT_L09 + RSEG CODE +daread: + CALL LWRD ?ENT_PARM_DIRECT_L09 + LD HL,?0002 + PUSH HL + LD C,E + LD B,D + LD DE,(dev) + LD A,BYTE3 da_read + LD HL,LWRD da_read + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD A,2 + XOR H + OR L + JR Z,?0004 +?0003: + LD L,(IX+2) + LD H,(IX+3) + PUSH HL + LD HL,?0005 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + LD A,BYTE3 abort + LD HL,LWRD abort + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0004: + LD HL,?0002 + JP LWRD ?BANK_LEAVE_DIRECT_L08 +dwrite: + CALL LWRD ?ENT_PARM_DIRECT_L09 + PUSH BC + LD C,E + LD B,D + LD DE,(dev) + LD A,BYTE3 da_write + LD HL,LWRD da_write + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD A,2 + XOR H + OR L + JR Z,?0007 +?0006: + LD L,(IX+2) + LD H,(IX+3) + PUSH HL + LD HL,?0008 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + LD A,BYTE3 abort + LD HL,LWRD abort + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0007: + JP LWRD ?BANK_LEAVE_DIRECT_L08 +da_read: + CALL LWRD ?ENT_PARM_DIRECT_L09 + LD HL,0 + PUSH HL + LD L,C + LD H,B + LD BC,0 + LD A,9 + CALL LWRD ?L_LSH_L03 + PUSH BC + PUSH HL + LD DE,(device_handle) + LD A,BYTE3 lseek + LD HL,LWRD lseek + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + POP AF + BIT 7,B + JR Z,?0010 +?0009: + LD HL,?0011 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,device_name + LD A,BYTE3 perror + LD HL,LWRD perror + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,1 + LD A,BYTE3 exit + LD HL,LWRD exit + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0010: + LD HL,512 + PUSH HL + LD C,(IX+10) + LD B,(IX+11) + LD DE,(device_handle) + LD A,BYTE3 _read + LD HL,LWRD _read + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD A,2 + XOR H + OR L + JR Z,?0013 +?0012: + LD HL,(errno) + LD A,L + OR H + JR NZ,?0015 +?0014: + LD HL,512 + PUSH HL + LD C,170 + LD E,(IX+10) + LD D,(IX+11) + LD A,BYTE3 bfill + LD HL,LWRD bfill + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL + JR ?0016 +?0015: + LD HL,?0017 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,device_name + LD A,BYTE3 perror + LD HL,LWRD perror + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,1 + LD A,BYTE3 exit + LD HL,LWRD exit + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0016: +?0013: + LD HL,512 + JP LWRD ?BANK_LEAVE_DIRECT_L08 +da_write: + CALL LWRD ?ENT_PARM_DIRECT_L09 + LD HL,0 + PUSH HL + LD L,C + LD H,B + LD BC,0 + LD A,9 + CALL LWRD ?L_LSH_L03 + PUSH BC + PUSH HL + LD DE,(device_handle) + LD A,BYTE3 lseek + LD HL,LWRD lseek + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + POP AF + BIT 7,B + JR Z,?0019 +?0018: + LD HL,?0011 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,device_name + LD A,BYTE3 perror + LD HL,LWRD perror + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,1 + LD A,BYTE3 exit + LD HL,LWRD exit + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0019: + LD HL,512 + PUSH HL + LD C,(IX+10) + LD B,(IX+11) + LD DE,(device_handle) + LD A,BYTE3 _write + LD HL,LWRD _write + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD A,2 + XOR H + OR L + JR Z,?0021 +?0020: + LD HL,?0022 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,device_name + LD A,BYTE3 perror + LD HL,LWRD perror + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,1 + LD A,BYTE3 exit + LD HL,LWRD exit + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0021: + LD HL,512 + JP LWRD ?BANK_LEAVE_DIRECT_L08 +yes: + CALL LWRD ?ENT_AUTO_DIRECT_L09 + DEFW 65516 + LD BC,stdout + LD E,(IX+2) + LD D,(IX+3) + LD A,BYTE3 fputs + LD HL,LWRD fputs + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD A,(_yes) + OR A + JR Z,?0024 +?0023: + LD BC,stdout + LD DE,?0025 + LD A,BYTE3 fputs + LD HL,LWRD fputs + CALL LWRD ?BANK_CALL_DIRECT_L08 + JR ?0026 +?0024: + LD HL,stdin + PUSH HL + LD BC,20 + LD HL,2 + ADD HL,SP + LD E,L + LD D,H + LD A,BYTE3 fgets + LD HL,LWRD fgets + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD A,L + OR H + JR Z,?0027 + LD A,(IX-20) + CP 121 + JR Z,?0028 + LD A,(IX-20) + CP 89 + JR Z,?0028 +?0032: +?0031: +?0029: +?0030: +?0027: + LD HL,0 + JR ?0033 +?0028: +?0026: + LD HL,1 +?0033: + JP LWRD ?BANK_LEAVE_DIRECT_L08 +mkfs: + CALL LWRD ?ENT_AUTO_DIRECT_L09 + DEFW 65500 + LD A,(_verb) + OR A + JR Z,?0035 +?0034: + LD HL,?0036 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0035: + XOR A + LD (IX-36),A + LD (IX-35),A +?0038: + LD BC,2048 + LD L,(IX-36) + LD H,(IX-35) + AND A + SBC HL,BC + JP NC,?0037 +?0039: + LD BC,512 + LD E,(IX-36) + LD D,(IX-35) + LD HL,2048 + AND A + SBC HL,DE + EX DE,HL + LD A,BYTE3 int_min + LD HL,LWRD int_min + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (IX-34),L + LD (IX-33),H + LD BC,512 + AND A + SBC HL,BC + JR NC,?0042 +?0041: + LD B,9 + LD E,(IX-36) + LD D,(IX-35) + CALL LWRD ?US_RSH_L02 + LD A,BYTE3 daread + LD HL,LWRD daread + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (IX-2),L + LD (IX-1),H + JR ?0043 +?0042: + LD (IX-2),LOW(zeroed) + LD (IX-1),HIGH(zeroed) +?0043: + LD L,(IX-34) + LD H,(IX-33) + PUSH HL + LD C,(IX-2) + LD B,(IX-1) + LD HL,bootblock + LD E,(IX-36) + LD D,(IX-35) + ADD HL,DE + EX DE,HL + LD A,BYTE3 bcopy + LD HL,LWRD bcopy + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL + LD C,(IX-2) + LD B,(IX-1) + PUSH BC + LD B,9 + LD E,(IX-36) + LD D,(IX-35) + CALL LWRD ?US_RSH_L02 + LD A,BYTE3 dwrite + LD HL,LWRD dwrite + POP BC + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD A,2 + ADD A,(IX-35) + LD (IX-35),A + JP LWRD ?0038 +?0037: + LD BC,512 + LD DE,zeroed + LD A,BYTE3 bzero + LD HL,LWRD bzero + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD A,(_verb) + OR A + JR Z,?0045 +?0044: + LD HL,?0046 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0045: + LD A,(_quick) + OR A + JR Z,?0048 +?0047: + LD L,(IX+4) + LD H,(IX+5) + LD C,(IX+10) + LD B,(IX+11) + ADD HL,BC + LD BC,5 + ADD HL,BC + LD (IX-34),L + LD (IX-33),H + JR ?0049 +?0048: + LD L,(IX+2) + LD H,(IX+3) + LD (IX-34),L + LD (IX-33),H +?0049: + LD HL,5 + LD C,(IX+10) + LD B,(IX+11) + ADD HL,BC + LD (IX-36),L + LD (IX-35),H +?0051: + LD C,(IX-34) + LD B,(IX-33) + LD L,(IX-36) + LD H,(IX-35) + AND A + SBC HL,BC + JR NC,?0050 +?0052: + LD A,(_verb) + OR A + JR Z,?0054 + LD BC,9 + LD E,(IX-36) + LD D,(IX-35) + CALL LWRD ?US_MOD_L02 + LD A,E + OR D + JR NZ,?0054 +?0056: +?0055: +?0053: + LD L,(IX-36) + LD H,(IX-35) + PUSH HL + LD HL,?0057 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0054: + LD BC,zeroed + LD E,(IX-36) + LD D,(IX-35) + INC DE + LD (IX-36),E + LD (IX-35),D + DEC DE + LD A,BYTE3 dwrite + LD HL,LWRD dwrite + CALL LWRD ?BANK_CALL_DIRECT_L08 + JR ?0051 +?0050: + LD A,(_verb) + OR A + JR Z,?0059 +?0058: + LD L,(IX-36) + LD H,(IX-35) + DEC HL + LD (IX-36),L + LD (IX-35),H + PUSH HL + LD HL,?0060 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0059: + LD A,(_verb) + OR A + JR Z,?0062 +?0061: + LD HL,?0063 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0062: + LD BC,30 + LD HL,4 + ADD HL,SP + LD E,L + LD D,H + LD A,BYTE3 bzero + LD HL,LWRD bzero + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (IX-32),198 + LD (IX-31),49 + LD HL,5 + LD C,(IX+10) + LD B,(IX+11) + ADD HL,BC + LD (IX-30),L + LD (IX-29),H + LD L,(IX+4) + LD H,(IX+5) + LD (IX-28),L + LD (IX-27),H + LD L,(IX+2) + LD H,(IX+3) + LD (IX-26),L + LD (IX-25),H + LD L,(IX+4) + LD H,(IX+5) + ADD HL,HL + ADD HL,HL + ADD HL,HL + LD DE,65534 + ADD HL,DE + LD (IX-22),L + LD (IX-21),H + LD L,(IX+4) + LD H,(IX+5) + ADD HL,BC + LD BC,6 + ADD HL,BC + LD C,L + LD B,H + LD L,(IX+2) + LD H,(IX+3) + AND A + SBC HL,BC + LD (IX-24),L + LD (IX-23),H + LD HL,(bitmap_inode) + LD (IX-16),L + LD (IX-15),H + LD HL,(bitmap_block) + LD (IX-14),L + LD (IX-13),H + LD HL,(bitmap_immov) + LD (IX-12),L + LD (IX-11),H + LD HL,(bitmap_final) + LD (IX-10),L + LD (IX-9),H + XOR A + LD (IX-36),A + LD (IX-35),A +?0065: + LD L,(IX+4) + LD H,(IX+5) + LD C,(IX+10) + LD B,(IX+11) + ADD HL,BC + LD BC,6 + ADD HL,BC + LD C,L + LD B,H + LD L,(IX-36) + LD H,(IX-35) + AND A + SBC HL,BC + JR NC,?0064 +?0066: + LD B,3 + LD E,(IX-36) + LD D,(IX-35) + CALL LWRD ?US_RSH_L02 + LD HL,(block_bitmap) + ADD HL,DE + LD A,(IX-36) + AND 7 + LD B,A + LD A,1 + CALL LWRD ?C_LSH_L01 + OR (HL) + LD (HL),A + INC (IX-36) + JR NZ,?0153 + INC (IX-35) +?0153: + JR ?0065 +?0064: + LD BC,(bitmap_block) + LD HL,(bitmap_immov) + AND A + SBC HL,BC + ADD HL,HL + ADD HL,HL + ADD HL,HL + LD (IX-34),L + LD (IX-33),H + LD L,(IX+2) + LD H,(IX+3) + LD (IX-36),L + LD (IX-35),H +?0069: + LD L,(IX-34) + LD H,(IX-33) + LD C,(IX-36) + LD B,(IX-35) + AND A + SBC HL,BC + JR Z,?0068 +?0070: + LD B,3 + LD E,(IX-36) + LD D,(IX-35) + CALL LWRD ?US_RSH_L02 + LD HL,(block_bitmap) + ADD HL,DE + LD A,(IX-36) + AND 7 + LD B,A + LD A,1 + CALL LWRD ?C_LSH_L01 + OR (HL) + LD (HL),A + INC (IX-36) + JR NZ,?0154 + INC (IX-35) +?0154: + JR ?0069 +?0068: + LD HL,(bitmap_immov+2) + PUSH HL + LD HL,(bitmap_immov) + PUSH HL + LD HL,(bitmap_block+2) + PUSH HL + LD HL,(bitmap_block) + PUSH HL + LD DE,(block_bitmap) + LD A,BYTE3 bitmap_dump + LD HL,LWRD bitmap_dump + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL + POP HL + POP HL + POP HL + LD A,(_immov) + OR A + JP Z,?0073 +?0072: + XOR A + LD (IX-36),A + LD (IX-35),A +?0075: + LD L,(IX+4) + LD H,(IX+5) + LD C,(IX+10) + LD B,(IX+11) + ADD HL,BC + LD BC,6 + ADD HL,BC + LD C,L + LD B,H + LD L,(IX-36) + LD H,(IX-35) + AND A + SBC HL,BC + JR NC,?0074 +?0076: + LD B,3 + LD E,(IX-36) + LD D,(IX-35) + CALL LWRD ?US_RSH_L02 + LD HL,(immov_bitmap) + ADD HL,DE + LD A,(IX-36) + AND 7 + LD B,A + LD A,1 + CALL LWRD ?C_LSH_L01 + OR (HL) + LD (HL),A + INC (IX-36) + JR NZ,?0155 + INC (IX-35) +?0155: + JR ?0075 +?0074: + LD BC,(bitmap_immov) + LD HL,(bitmap_final) + AND A + SBC HL,BC + ADD HL,HL + ADD HL,HL + ADD HL,HL + LD (IX-34),L + LD (IX-33),H + LD L,(IX+2) + LD H,(IX+3) + LD (IX-36),L + LD (IX-35),H +?0079: + LD L,(IX-34) + LD H,(IX-33) + LD C,(IX-36) + LD B,(IX-35) + AND A + SBC HL,BC + JR Z,?0078 +?0080: + LD B,3 + LD E,(IX-36) + LD D,(IX-35) + CALL LWRD ?US_RSH_L02 + LD HL,(immov_bitmap) + ADD HL,DE + LD A,(IX-36) + AND 7 + LD B,A + LD A,1 + CALL LWRD ?C_LSH_L01 + OR (HL) + LD (HL),A + INC (IX-36) + JR NZ,?0156 + INC (IX-35) +?0156: + JR ?0079 +?0078: + LD HL,(bitmap_final+2) + PUSH HL + LD HL,(bitmap_final) + PUSH HL + LD HL,(bitmap_immov+2) + PUSH HL + LD HL,(bitmap_immov) + PUSH HL + LD DE,(immov_bitmap) + LD A,BYTE3 bitmap_dump + LD HL,LWRD bitmap_dump + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL + POP HL + POP HL + POP HL +?0073: + LD HL,16877 + LD (inode+64),HL + LD HL,3 + LD (inode+66),HL + LD BC,0 + LD HL,32 + LD (inode+72),HL + LD (inode+74),BC + LD L,(IX+4) + LD H,(IX+5) + LD C,(IX+10) + LD B,(IX+11) + ADD HL,BC + LD BC,5 + ADD HL,BC + LD (inode+88),HL + LD HL,1 + LD (inode+2),HL + LD HL,65535 + LD (inode),HL + LD HL,(inode_bitmap) + LD A,(HL) + OR 1 + LD (HL),A + LD HL,(inode_bitmap) + LD A,(HL) + OR 2 + LD (HL),A + LD BC,(bitmap_inode) + LD HL,(bitmap_block) + AND A + SBC HL,BC + ADD HL,HL + ADD HL,HL + ADD HL,HL + LD (IX-34),L + LD (IX-33),H + LD L,(IX+4) + LD H,(IX+5) + ADD HL,HL + ADD HL,HL + ADD HL,HL + LD (IX-36),L + LD (IX-35),H +?0083: + LD L,(IX-34) + LD H,(IX-33) + LD C,(IX-36) + LD B,(IX-35) + AND A + SBC HL,BC + JR Z,?0082 +?0084: + LD B,3 + LD E,(IX-36) + LD D,(IX-35) + CALL LWRD ?US_RSH_L02 + LD HL,(inode_bitmap) + ADD HL,DE + LD A,(IX-36) + AND 7 + LD B,A + LD A,1 + CALL LWRD ?C_LSH_L01 + OR (HL) + LD (HL),A + INC (IX-36) + JR NZ,?0157 + INC (IX-35) +?0157: + JR ?0083 +?0082: + LD HL,(bitmap_block+2) + PUSH HL + LD HL,(bitmap_block) + PUSH HL + LD HL,(bitmap_inode+2) + PUSH HL + LD HL,(bitmap_inode) + PUSH HL + LD DE,(inode_bitmap) + LD A,BYTE3 bitmap_dump + LD HL,LWRD bitmap_dump + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL + POP HL + POP HL + POP HL + LD BC,inode + LD HL,5 + LD E,(IX+10) + LD D,(IX+11) + ADD HL,DE + EX DE,HL + LD A,BYTE3 dwrite + LD HL,LWRD dwrite + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD BC,dirbuf + LD L,(IX+4) + LD H,(IX+5) + LD E,(IX+10) + LD D,(IX+11) + ADD HL,DE + LD DE,5 + ADD HL,DE + EX DE,HL + LD A,BYTE3 dwrite + LD HL,LWRD dwrite + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,4 + LD A,BYTE3 daread + LD HL,LWRD daread + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (IX-2),L + LD (IX-1),H + LD BC,30 + PUSH BC + LD C,L + LD B,H + LD HL,6 + ADD HL,SP + LD E,L + LD D,H + LD A,BYTE3 bcopy + LD HL,LWRD bcopy + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL + LD C,(IX-2) + LD B,(IX-1) + LD DE,4 + LD A,BYTE3 dwrite + LD HL,LWRD dwrite + CALL LWRD ?BANK_CALL_DIRECT_L08 + JP LWRD ?BANK_LEAVE_DIRECT_L08 +doformatting: + CALL LWRD ?ENT_AUTO_DIRECT_L09 + DEFW 65022 + LD A,(_verb) + OR A + JR Z,?0087 +?0086: + LD HL,?0088 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0087: + LD HL,512 + PUSH HL + LD C,170 + LD HL,4 + ADD HL,SP + LD E,L + LD D,H + LD A,BYTE3 bfill + LD HL,LWRD bfill + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL + LD HL,0 + ADD HL,SP + XOR A + LD (HL),A + INC HL + LD (HL),A +?0090: + LD C,(IX+2) + LD B,(IX+3) + LD HL,0 + ADD HL,SP + LD D,(HL) + INC HL + LD H,(HL) + LD L,D + AND A + SBC HL,BC + JR NC,?0089 +?0091: + LD HL,2 + ADD HL,SP + LD C,L + LD B,H + LD HL,0 + ADD HL,SP + LD E,(HL) + INC HL + LD D,(HL) + LD A,BYTE3 dwrite + LD HL,LWRD dwrite + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD HL,0 + ADD HL,SP + INC (HL) + INC HL + JR NZ,?0158 + INC (HL) +?0158: + JR ?0090 +?0089: + JP LWRD ?BANK_LEAVE_DIRECT_L08 +main: + CALL LWRD ?ENT_AUTO_DIRECT_L09 + DEFW 65524 + XOR A + LD (IX-8),A + LD (IX-7),A + LD (IX-6),1 + LD (IX-5),0 + LD L,(IX+2) + LD H,(IX+3) + LD (IX-4),L + LD (IX-3),H +?0094: + LD C,(IX+2) + LD B,(IX+3) + LD L,(IX-6) + LD H,(IX-5) + CALL LWRD ?SS_CMP_L02 + JP NC,?0093 + LD L,(IX-6) + LD H,(IX-5) + ADD HL,HL + LD C,(IX+4) + LD B,(IX+5) + ADD HL,BC + LD B,(HL) + INC HL + LD H,(HL) + LD L,B + LD (IX-2),L + LD (IX-1),H + LD A,(HL) + CP 45 + JP NZ,?0093 +?0097: +?0096: +?0095: + INC (IX-2) + JR NZ,?0159 + INC (IX-1) +?0159: + INC (IX-6) + JR NZ,?0160 + INC (IX-5) +?0160: + LD L,(IX-4) + LD H,(IX-3) + DEC HL + LD (IX-4),L + LD (IX-3),H +?0099: + LD L,(IX-2) + LD H,(IX-1) + XOR A + OR (HL) + JR Z,?0098 +?0100: + LD L,(IX-2) + LD H,(IX-1) + INC HL + LD (IX-2),L + LD (IX-1),H + DEC HL + LD E,(HL) + CALL LWRD ?C_V_SWITCH_L06 + DEFW 10 + DEFB 70 + DEFB 76 + DEFB 81 + DEFB 86 + DEFB 89 + DEFB 102 + DEFB 108 + DEFB 113 + DEFB 118 + DEFB 121 + DEFW ?0107 + DEFW ?0102 + DEFW ?0105 + DEFW ?0104 + DEFW ?0106 + DEFW ?0103 + DEFW ?0102 + DEFW ?0105 + DEFW ?0104 + DEFW ?0106 + DEFW ?0103 +?0102: + LD A,1 + LD (_yes),A + JR ?0101 +?0103: + LD A,1 + LD (_fmt),A + JR ?0101 +?0104: + LD A,1 + LD (_quick),A + JR ?0101 +?0105: + LD A,1 + LD (_verb),A + JR ?0101 +?0106: + LD A,1 + LD (_immov),A + JR ?0101 +?0107: + LD L,(IX-2) + LD H,(IX-1) + PUSH HL + LD HL,?0108 + PUSH HL + LD HL,stderr + PUSH HL + LD A,BYTE3 fprintf + LD HL,LWRD fprintf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + POP AF + LD DE,1 + LD A,BYTE3 exit + LD HL,LWRD exit + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0101: + JP LWRD ?0099 +?0098: + JP LWRD ?0094 +?0093: + LD BC,32772 + LD L,(IX-4) + LD H,(IX-3) + LD A,128 + XOR H + LD H,A + SBC HL,BC + JR NC,?0110 +?0109: + LD HL,?0111 + PUSH HL + LD HL,stderr + PUSH HL + LD A,BYTE3 fprintf + LD HL,LWRD fprintf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + LD DE,1 + LD A,BYTE3 exit + LD HL,LWRD exit + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0110: + LD L,(IX-6) + LD H,(IX-5) + ADD HL,HL + LD C,(IX+4) + LD B,(IX+5) + ADD HL,BC + LD C,(HL) + INC HL + LD B,(HL) + LD DE,device_name + LD A,BYTE3 strcpy + LD HL,LWRD strcpy + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD HL,32770 + PUSH HL + LD HL,device_name + PUSH HL + LD A,BYTE3 open + LD HL,LWRD open + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + LD (device_handle),HL + BIT 7,H + JR Z,?0113 +?0112: + LD HL,?0114 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,device_name + LD A,BYTE3 perror + LD HL,LWRD perror + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,1 + LD A,BYTE3 exit + LD HL,LWRD exit + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0113: + LD L,(IX-6) + LD H,(IX-5) + ADD HL,HL + LD C,(IX+4) + LD B,(IX+5) + ADD HL,BC + INC HL + INC HL + LD E,(HL) + INC HL + LD D,(HL) + LD A,BYTE3 atoi + LD HL,LWRD atoi + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (IX-12),L + LD (IX-11),H + LD L,(IX-6) + LD H,(IX-5) + ADD HL,HL + ADD HL,BC + LD BC,4 + ADD HL,BC + LD E,(HL) + INC HL + LD D,(HL) + LD A,BYTE3 atoi + LD HL,LWRD atoi + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (IX-10),L + LD (IX-9),H + LD C,(IX-4) + LD B,(IX-3) + LD HL,4 + CALL LWRD ?SS_CMP_L02 + JR NC,?0116 +?0115: + LD L,(IX-6) + LD H,(IX-5) + ADD HL,HL + LD C,(IX+4) + LD B,(IX+5) + ADD HL,BC + LD BC,6 + ADD HL,BC + LD E,(HL) + INC HL + LD D,(HL) + LD A,BYTE3 atoi + LD HL,LWRD atoi + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (IX-8),L + LD (IX-7),H +?0116: + LD BC,100 + LD L,(IX-12) + LD H,(IX-11) + AND A + SBC HL,BC + JR C,?0117 + LD BC,30 + LD E,(IX-12) + LD D,(IX-11) + CALL LWRD ?US_DIV_L02 + LD L,(IX-10) + LD H,(IX-9) + AND A + SBC HL,DE + JR NC,?0117 + LD C,(IX-8) + LD B,(IX-7) + LD HL,100 + AND A + SBC HL,BC + JR NC,?0118 +?0119: +?0120: +?0117: + LD HL,?0121 + PUSH HL + LD HL,stderr + PUSH HL + LD A,BYTE3 fprintf + LD HL,LWRD fprintf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + LD DE,1 + LD A,BYTE3 exit + LD HL,LWRD exit + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0118: + LD BC,0 + LD HL,2078 + LD (bitmap_inode),HL + LD (bitmap_inode+2),BC + LD DE,65535 + PUSH DE + LD DE,65532 + PUSH DE + PUSH BC + PUSH HL + LD HL,3 + POP BC + ADD HL,BC + EX DE,HL + LD HL,0 + POP BC + ADC HL,BC + LD C,L + LD B,H + EX DE,HL + CALL LWRD ?L_AND_L03 + LD (bitmap_inode),HL + LD (bitmap_inode+2),BC + PUSH BC + PUSH HL + LD L,(IX-10) + LD H,(IX-9) + ADD HL,HL + ADD HL,HL + ADD HL,HL + LD BC,65535 + ADD HL,BC + EX DE,HL + LD B,3 + CALL LWRD ?US_RSH_L02 + EX DE,HL + LD DE,0 + POP BC + ADD HL,BC + EX DE,HL + POP BC + ADC HL,BC + PUSH HL + PUSH DE + LD HL,1 + POP BC + ADD HL,BC + EX DE,HL + LD HL,0 + POP BC + ADC HL,BC + LD C,L + LD B,H + EX DE,HL + LD (bitmap_block),HL + LD (bitmap_block+2),BC + LD DE,65535 + PUSH DE + LD DE,65532 + PUSH DE + PUSH BC + PUSH HL + LD HL,3 + POP BC + ADD HL,BC + EX DE,HL + LD HL,0 + POP BC + ADC HL,BC + LD C,L + LD B,H + EX DE,HL + CALL LWRD ?L_AND_L03 + LD (bitmap_block),HL + LD (bitmap_block+2),BC + PUSH BC + PUSH HL + LD HL,65535 + LD C,(IX-12) + LD B,(IX-11) + ADD HL,BC + EX DE,HL + LD B,3 + CALL LWRD ?US_RSH_L02 + EX DE,HL + LD DE,0 + POP BC + ADD HL,BC + EX DE,HL + POP BC + ADC HL,BC + PUSH HL + PUSH DE + LD HL,1 + POP BC + ADD HL,BC + EX DE,HL + LD HL,0 + POP BC + ADC HL,BC + LD C,L + LD B,H + EX DE,HL + LD (bitmap_immov),HL + LD (bitmap_immov+2),BC + LD DE,65535 + PUSH DE + LD DE,65532 + PUSH DE + PUSH BC + PUSH HL + LD HL,3 + POP BC + ADD HL,BC + EX DE,HL + LD HL,0 + POP BC + ADC HL,BC + LD C,L + LD B,H + EX DE,HL + CALL LWRD ?L_AND_L03 + LD (bitmap_immov),HL + LD (bitmap_immov+2),BC + LD (bitmap_final),HL + LD (bitmap_final+2),BC + PUSH BC + PUSH HL + LD HL,511 + POP BC + ADD HL,BC + EX DE,HL + LD HL,0 + POP BC + ADC HL,BC + LD C,L + LD B,H + EX DE,HL + LD A,9 + CALL LWRD ?SL_RSH_L03 + LD BC,65531 + ADD HL,BC + LD (IX-8),L + LD (IX-7),H + LD A,(_immov) + OR A + JR Z,?0123 +?0122: + LD HL,65535 + LD C,(IX-12) + LD B,(IX-11) + ADD HL,BC + EX DE,HL + LD B,3 + CALL LWRD ?US_RSH_L02 + EX DE,HL + LD BC,0 + PUSH BC + PUSH HL + LD HL,(bitmap_immov) + POP BC + ADD HL,BC + EX DE,HL + LD HL,(bitmap_immov+2) + POP BC + ADC HL,BC + PUSH HL + PUSH DE + LD HL,1 + POP BC + ADD HL,BC + EX DE,HL + LD HL,0 + POP BC + ADC HL,BC + LD C,L + LD B,H + EX DE,HL + LD (bitmap_final),HL + LD (bitmap_final+2),BC + LD DE,65535 + PUSH DE + LD DE,65532 + PUSH DE + PUSH BC + PUSH HL + LD HL,3 + POP BC + ADD HL,BC + EX DE,HL + LD HL,0 + POP BC + ADC HL,BC + LD C,L + LD B,H + EX DE,HL + CALL LWRD ?L_AND_L03 + LD (bitmap_final),HL + LD (bitmap_final+2),BC + PUSH BC + PUSH HL + LD HL,511 + POP BC + ADD HL,BC + EX DE,HL + LD HL,0 + POP BC + ADC HL,BC + LD C,L + LD B,H + EX DE,HL + LD A,9 + CALL LWRD ?SL_RSH_L03 + LD BC,65531 + ADD HL,BC + LD (IX-8),L + LD (IX-7),H +?0123: + LD L,(IX-8) + LD H,(IX-7) + PUSH HL + LD L,(IX-10) + LD H,(IX-9) + PUSH HL + LD L,(IX-12) + LD H,(IX-11) + PUSH HL + LD HL,device_name + PUSH HL + LD HL,?0124 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + POP AF + POP AF + POP AF + LD DE,stdout + LD A,BYTE3 fflush + LD HL,LWRD fflush + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD DE,?0127 + LD A,BYTE3 yes + LD HL,LWRD yes + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD A,L + OR H + JR NZ,?0126 +?0125: + LD DE,1 + LD A,BYTE3 exit + LD HL,LWRD exit + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0126: + LD HL,?0128 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + LD A,(_fmt) + OR A + JR Z,?0130 +?0129: + LD E,(IX-12) + LD D,(IX-11) + LD A,BYTE3 doformatting + LD HL,LWRD doformatting + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0130: + LD BC,(bitmap_inode) + LD HL,(bitmap_block) + AND A + SBC HL,BC + EX DE,HL + LD A,BYTE3 malloc + LD HL,LWRD malloc + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (inode_bitmap),HL + LD A,L + OR H + JR NZ,?0132 +?0131: + LD (IX-2),LOW(?0133) + LD (IX-1),HIGH(?0133) + JP LWRD ?0134 +?0132: + LD BC,(bitmap_inode) + LD HL,(bitmap_block) + AND A + SBC HL,BC + PUSH HL + LD C,0 + LD DE,(inode_bitmap) + LD A,BYTE3 bfill + LD HL,LWRD bfill + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL + LD BC,(bitmap_block) + LD HL,(bitmap_final) + AND A + SBC HL,BC + EX DE,HL + LD A,BYTE3 malloc + LD HL,LWRD malloc + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (block_bitmap),HL + LD A,L + OR H + JR NZ,?0136 +?0135: + LD (IX-2),LOW(?0137) + LD (IX-1),HIGH(?0137) + JR ?0134 +?0136: + LD BC,(bitmap_block) + LD HL,(bitmap_final) + AND A + SBC HL,BC + PUSH HL + LD C,0 + LD DE,(block_bitmap) + LD A,BYTE3 bfill + LD HL,LWRD bfill + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL + LD A,(_immov) + OR A + JR Z,?0139 +?0138: + LD BC,(bitmap_immov) + LD HL,(bitmap_final) + AND A + SBC HL,BC + EX DE,HL + LD A,BYTE3 malloc + LD HL,LWRD malloc + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (immov_bitmap),HL + LD A,L + OR H + JR NZ,?0141 +?0140: + LD (IX-2),LOW(?0142) + LD (IX-1),HIGH(?0142) +?0134: + LD L,(IX-2) + LD H,(IX-1) + PUSH HL + LD HL,?0143 + PUSH HL + LD HL,stderr + PUSH HL + LD A,BYTE3 fprintf + LD HL,LWRD fprintf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF + POP AF + LD DE,1 + LD A,BYTE3 exit + LD HL,LWRD exit + CALL LWRD ?BANK_CALL_DIRECT_L08 +?0141: + LD BC,(bitmap_immov) + LD HL,(bitmap_final) + AND A + SBC HL,BC + PUSH HL + LD C,0 + LD DE,(immov_bitmap) + LD A,BYTE3 bfill + LD HL,LWRD bfill + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL +?0139: + LD L,(IX-8) + LD H,(IX-7) + PUSH HL + LD C,(IX-10) + LD B,(IX-9) + LD E,(IX-12) + LD D,(IX-11) + LD A,BYTE3 mkfs + LD HL,LWRD mkfs + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL + LD DE,(device_handle) + LD A,BYTE3 close + LD HL,LWRD close + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD A,(_verb) + OR A + JR Z,?0145 +?0144: + LD HL,device_name + PUSH HL + LD HL,?0146 + PUSH HL + LD A,BYTE3 printf + LD HL,LWRD printf + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP AF + POP AF +?0145: + LD DE,0 + LD A,BYTE3 exit + LD HL,LWRD exit + CALL LWRD ?BANK_CALL_DIRECT_L08 + JP LWRD ?BANK_LEAVE_DIRECT_L08 +bitmap_dump: + CALL LWRD ?ENT_AUTO_DIRECT_L09 + DEFW 65530 + LD L,(IX+10) + LD H,(IX+11) + LD (IX-4),L + LD (IX-3),H +?0148: + LD L,(IX+16) + LD H,(IX+17) + PUSH HL + LD L,(IX+14) + LD H,(IX+15) + PUSH HL + LD L,(IX-4) + LD H,(IX-3) + LD BC,0 + CALL LWRD ?SL_CMP_L03 + JP NC,?0147 +?0149: + LD C,(IX+14) + LD B,(IX+15) + LD L,(IX-4) + LD H,(IX-3) + LD A,2 + ADD A,H + LD H,A + LD A,L + AND 0 + LD E,A + LD A,H + AND 254 + LD D,A + LD A,BYTE3 int_min + LD HL,LWRD int_min + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (IX-2),L + LD (IX-1),H + LD C,(IX-4) + LD B,(IX-3) + AND A + SBC HL,BC + LD BC,512 + AND A + SBC HL,BC + JR NC,?0151 +?0150: + LD B,9 + LD E,(IX-4) + LD D,(IX-3) + CALL LWRD ?US_RSH_L02 + LD A,BYTE3 daread + LD HL,LWRD daread + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD (IX-6),L + LD (IX-5),H + JR ?0152 +?0151: + LD (IX-6),LOW(zeroed) + LD (IX-5),HIGH(zeroed) +?0152: + LD C,(IX-4) + LD B,(IX-3) + LD L,(IX-2) + LD H,(IX-1) + AND A + SBC HL,BC + PUSH HL + LD A,C + AND 255 + LD L,A + LD A,B + AND 1 + LD H,A + LD E,(IX-6) + LD D,(IX-5) + ADD HL,DE + LD C,L + LD B,H + LD E,(IX+10) + LD D,(IX+11) + LD L,(IX-4) + LD H,(IX-3) + AND A + SBC HL,DE + LD E,(IX+2) + LD D,(IX+3) + ADD HL,DE + EX DE,HL + LD A,BYTE3 bcopy + LD HL,LWRD bcopy + CALL LWRD ?BANK_CALL_DIRECT_L08 + POP HL + LD C,(IX-6) + LD B,(IX-5) + PUSH BC + LD B,9 + LD E,(IX-4) + LD D,(IX-3) + CALL LWRD ?US_RSH_L02 + LD A,BYTE3 dwrite + LD HL,LWRD dwrite + POP BC + CALL LWRD ?BANK_CALL_DIRECT_L08 + LD L,(IX-2) + LD H,(IX-1) + LD (IX-4),L + LD (IX-3),H + JP LWRD ?0148 +?0147: + JP LWRD ?BANK_LEAVE_DIRECT_L08 + RSEG CSTR +?0005: + DEFB 'Read of block %d failed.' + DEFB 10,0 +?0008: + DEFB 'Write of block %d failed.' + DEFB 10,0 +?0011: + DEFB 'can''t seek: ' + DEFB 0 +?0017: + DEFB 'can''t read: ' + DEFB 0 +?0022: + DEFB 'can''t write: ' + DEFB 0 +?0025: + DEFB 'Y' + DEFB 10,0 +?0036: + DEFB 'Creating boot block...' + DEFB 10,0 +?0046: + DEFB 'Initializing inodes, be patient...' + DEFB 10,0 +?0057: + DEFB 'Blk #%d' + DEFB 13,0 +?0060: + DEFB 'Blk #%d' + DEFB 10,0 +?0063: + DEFB 'Creating super block...' + DEFB 10,0 +?0088: + DEFB 'Low level formatting...' + DEFB 10,0 +?0108: + DEFB 'Illegal switch %s' + DEFB 10,0 +?0111: + DEFB 'usage: mkfs [-yfqvb] device fsize isize [rsize]' + DEFB 10,0 +?0114: + DEFB 'can''t open: ' + DEFB 0 +?0121: + DEFB 'Bad parameter values' + DEFB 10,0 +?0124: + DEFB 10 + DEFB 'Making filesystem on %s, fsize %u, isize %u, rsize %u. ' + DEFB 0 +?0127: + DEFB 'Confirm? ' + DEFB 0 +?0128: + DEFB 10,0 +?0133: + DEFB 'inode bitmap' + DEFB 0 +?0137: + DEFB 'block bitmap' + DEFB 0 +?0142: + DEFB 'lock bitmap' + DEFB 0 +?0143: + DEFB 'Not enough memory for %s.' + DEFB 10,0 +?0146: + DEFB 'Filesystem on %s successfully initialized!' + DEFB 10,10,0 + RSEG UDATA0 +device_handle: + DEFS 2 +device_name: + DEFS 512 +zeroed: + DEFS 512 +dev: + DEFS 2 +inode: + DEFS 512 +bitmap_inode: + DEFS 4 +bitmap_block: + DEFS 4 +bitmap_immov: + DEFS 4 +bitmap_final: + DEFS 4 +inode_bitmap: + DEFS 2 +block_bitmap: + DEFS 2 +immov_bitmap: + DEFS 2 +?0002: + DEFS 512 + RSEG IDATA0 +bootblock: + DEFS 2048 +dirbuf: + DEFS 512 +_fmt: + DEFS 1 +_yes: + DEFS 1 +_quick: + DEFS 1 +_verb: + DEFS 1 +_immov: + DEFS 1 + RSEG CDATA0 + DEFB '5' + DEFB '2' + DEFB 'C' + DEFB '8' + DEFB '0' + DEFB '3' + DEFB '0' + DEFB '8' + DEFB '2' + DEFB '1' + DEFB '1' + DEFB '8' + DEFB '4' + DEFB '0' + DEFB '2' + DEFB '4' + DEFB '1' + DEFB 0 + DEFB 16 + DEFB 205 + DEFB 14 + DEFB 7 + DEFB 205 + DEFB 22 + DEFB 6 + DEFB 205 + DEFB 'm' + DEFB 5 + DEFB 24 + DEFB '"' + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 'B' + DEFB 'O' + DEFB 'O' + DEFB 'T' + DEFB ' ' + DEFB ' ' + DEFB ' ' + DEFB ' ' + DEFB 'B' + DEFB 'I' + DEFB 'N' + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 16 + DEFB 0 + DEFB 1 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'l' + DEFB 'o' + DEFB 'a' + DEFB 'd' + DEFB 'i' + DEFB 'n' + DEFB 'g' + DEFB ' ' + DEFB '/' + DEFB 'b' + DEFB 'o' + DEFB 'o' + DEFB 't' + DEFB '/' + DEFB 'k' + DEFB 'e' + DEFB 'r' + DEFB 'n' + DEFB 'e' + DEFB 'l' + DEFB '.' + DEFB 'b' + DEFB 'i' + DEFB 'n' + DEFB 13 + DEFB 10 + DEFB 0 + DEFB 205 + DEFB 176 + DEFB 1 + DEFB 205 + DEFB 155 + DEFB 0 + DEFB 205 + DEFB 'p' + DEFB 2 + DEFB 205 + DEFB 144 + DEFB 1 + DEFB 205 + DEFB 23 + DEFB 5 + DEFB 205 + DEFB '5' + DEFB 5 + DEFB 237 + DEFB '[' + DEFB 15 + DEFB 14 + DEFB 213 + DEFB '!' + DEFB 140 + DEFB 0 + DEFB 14 + DEFB 15 + DEFB 237 + DEFB 176 + DEFB 193 + DEFB '*' + DEFB 17 + DEFB 14 + DEFB 249 + DEFB 17 + DEFB '3' + DEFB 0 + DEFB 25 + DEFB 235 + DEFB '*' + DEFB 11 + DEFB 14 + DEFB 151 + DEFB 197 + DEFB 201 + DEFB 237 + DEFB '9' + DEFB '9' + DEFB '>' + DEFB 241 + DEFB 237 + DEFB '9' + DEFB ':' + DEFB ':' + DEFB 128 + DEFB 16 + DEFB 237 + DEFB '9' + DEFB '8' + DEFB 233 + DEFB 17 + DEFB 4 + DEFB 0 + DEFB '!' + DEFB 229 + DEFB 7 + DEFB 205 + DEFB 197 + DEFB 4 + DEFB '*' + DEFB 229 + DEFB 7 + DEFB 17 + DEFB 198 + DEFB '1' + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB ' ' + DEFB 'N' + DEFB '*' + DEFB 231 + DEFB 7 + DEFB '"' + DEFB 147 + DEFB 7 + DEFB '*' + DEFB 233 + DEFB 7 + DEFB '"' + DEFB 149 + DEFB 7 + DEFB '*' + DEFB 235 + DEFB 7 + DEFB '"' + DEFB 151 + DEFB 7 + DEFB 201 + DEFB '*' + DEFB 255 + DEFB 13 + DEFB 17 + DEFB 201 + DEFB 166 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB 200 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'b' + DEFB 'a' + DEFB 'd' + DEFB ' ' + DEFB 'e' + DEFB '_' + DEFB 'm' + DEFB 'a' + DEFB 'g' + DEFB 'i' + DEFB 'c' + DEFB ':' + DEFB ' ' + DEFB 0 + DEFB 24 + DEFB '-' + DEFB '*' + DEFB 1 + DEFB 14 + DEFB 17 + DEFB 3 + DEFB 0 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB 200 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'b' + DEFB 'a' + DEFB 'd' + DEFB ' ' + DEFB 'e' + DEFB '_' + DEFB 'f' + DEFB 'o' + DEFB 'r' + DEFB 'm' + DEFB 'a' + DEFB 't' + DEFB ':' + DEFB ' ' + DEFB 0 + DEFB 24 + DEFB 15 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'b' + DEFB 'a' + DEFB 'd' + DEFB ' ' + DEFB 'm' + DEFB 'a' + DEFB 'g' + DEFB 'i' + DEFB 'c' + DEFB ':' + DEFB ' ' + DEFB 0 + DEFB 25 + DEFB 205 + DEFB 31 + DEFB 6 + DEFB 205 + DEFB 22 + DEFB 6 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'd' + DEFB 'o' + DEFB 'i' + DEFB 'n' + DEFB 'g' + DEFB ' ' + DEFB 'a' + DEFB ' ' + DEFB 'c' + DEFB 'l' + DEFB 'e' + DEFB 'a' + DEFB 'n' + DEFB ' ' + DEFB 'b' + DEFB 'o' + DEFB 'o' + DEFB 't' + DEFB 13 + DEFB 10 + DEFB 0 + DEFB '!' + DEFB 229 + DEFB 7 + DEFB 17 + DEFB 230 + DEFB 7 + DEFB 1 + DEFB 255 + DEFB 1 + DEFB '6' + DEFB 170 + DEFB 237 + DEFB 176 + DEFB 17 + DEFB 0 + DEFB 0 + DEFB 6 + DEFB 4 + DEFB 197 + DEFB 213 + DEFB '!' + DEFB 229 + DEFB 7 + DEFB 205 + DEFB 211 + DEFB 4 + DEFB 209 + DEFB 193 + DEFB 19 + DEFB 16 + DEFB 243 + DEFB '>' + DEFB 170 + DEFB 237 + DEFB '9' + DEFB 11 + DEFB '>' + DEFB 19 + DEFB 237 + DEFB '9' + DEFB 10 + DEFB 24 + DEFB 254 + DEFB 205 + DEFB '7' + DEFB 6 + DEFB 'g' + DEFB 'b' + DEFB 'o' + DEFB 'o' + DEFB 't' + DEFB ':' + DEFB ' ' + DEFB 0 + DEFB 195 + DEFB '7' + DEFB 6 + DEFB 17 + DEFB 2 + DEFB 0 + DEFB 205 + DEFB 132 + DEFB 1 + DEFB '>' + DEFB 129 + DEFB 237 + DEFB '9' + DEFB 11 + DEFB '>' + DEFB 19 + DEFB 237 + DEFB '9' + DEFB 10 + DEFB 151 + DEFB '=' + DEFB ' ' + DEFB 253 + DEFB '=' + DEFB ' ' + DEFB 253 + DEFB '=' + DEFB ' ' + DEFB 253 + DEFB '=' + DEFB ' ' + DEFB 253 + DEFB 17 + DEFB 0 + DEFB 2 + DEFB '!' + DEFB 129 + DEFB 252 + DEFB 229 + DEFB 253 + DEFB 225 + DEFB 1 + DEFB 5 + DEFB 0 + DEFB 195 + DEFB 'F' + DEFB 6 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 's' + DEFB 't' + DEFB 'a' + DEFB 'r' + DEFB 't' + DEFB 'i' + DEFB 'n' + DEFB 'g' + DEFB ' ' + DEFB 'o' + DEFB 'p' + DEFB 'e' + DEFB 'r' + DEFB 'a' + DEFB 't' + DEFB 'i' + DEFB 'n' + DEFB 'g' + DEFB ' ' + DEFB 's' + DEFB 'y' + DEFB 's' + DEFB 't' + DEFB 'e' + DEFB 'm' + DEFB 13 + DEFB 10 + DEFB 0 + DEFB 201 + DEFB 205 + DEFB 'd' + DEFB 1 + DEFB '>' + DEFB 16 + DEFB 237 + DEFB '9' + DEFB ':' + DEFB '>' + DEFB 255 + DEFB 237 + DEFB '9' + DEFB '8' + DEFB 17 + DEFB 1 + DEFB 31 + DEFB 1 + DEFB 255 + DEFB 0 + DEFB 205 + DEFB 232 + DEFB 1 + DEFB '!' + DEFB 0 + DEFB 241 + DEFB '"' + DEFB 128 + DEFB 31 + DEFB 151 + DEFB 237 + DEFB '9' + DEFB '8' + DEFB 17 + DEFB 1 + DEFB 16 + DEFB 13 + DEFB 205 + DEFB 232 + DEFB 1 + DEFB '!' + DEFB 128 + DEFB 15 + DEFB '"' + DEFB 252 + DEFB 16 + DEFB '!' + DEFB 128 + DEFB 16 + DEFB '"' + DEFB 254 + DEFB 16 + DEFB 201 + DEFB 205 + DEFB 11 + DEFB 2 + DEFB 216 + DEFB 'k' + DEFB 'b' + DEFB '+' + DEFB '6' + DEFB 0 + DEFB 'y' + DEFB 176 + DEFB 200 + DEFB 237 + DEFB 176 + DEFB 201 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB 208 + DEFB 25 + DEFB 235 + DEFB 201 + DEFB '*' + DEFB 7 + DEFB 14 + DEFB 17 + DEFB 20 + DEFB 0 + DEFB 24 + DEFB 17 + DEFB '*' + DEFB 13 + DEFB 14 + DEFB 237 + DEFB '[' + DEFB 9 + DEFB 14 + DEFB 24 + DEFB 8 + DEFB '*' + DEFB 17 + DEFB 14 + DEFB 237 + DEFB '[' + DEFB 13 + DEFB 14 + DEFB 19 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB 'M' + DEFB 'D' + DEFB 201 + DEFB '"' + DEFB 153 + DEFB 7 + DEFB 205 + DEFB 179 + DEFB 3 + DEFB 1 + DEFB 16 + DEFB 0 + DEFB '!' + DEFB 229 + DEFB 13 + DEFB 205 + DEFB '<' + DEFB 3 + DEFB 216 + DEFB '#' + DEFB 237 + DEFB '[' + DEFB 153 + DEFB 7 + DEFB 6 + DEFB 14 + DEFB '#' + DEFB 26 + DEFB 190 + DEFB ' ' + DEFB 234 + DEFB 183 + DEFB '(' + DEFB 5 + DEFB 19 + DEFB 16 + DEFB 245 + DEFB 26 + DEFB 183 + DEFB 237 + DEFB '[' + DEFB 229 + DEFB 13 + DEFB 201 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'f' + DEFB 'i' + DEFB 'l' + DEFB 'e' + DEFB ' ' + DEFB 'n' + DEFB 'o' + DEFB 't' + DEFB ' ' + DEFB 'f' + DEFB 'o' + DEFB 'u' + DEFB 'n' + DEFB 'd' + DEFB 13 + DEFB 10 + DEFB 0 + DEFB 195 + DEFB 19 + DEFB 1 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'f' + DEFB 'i' + DEFB 'l' + DEFB 'e' + DEFB ' ' + DEFB 't' + DEFB 'o' + DEFB 'o' + DEFB ' ' + DEFB 's' + DEFB 'h' + DEFB 'o' + DEFB 'r' + DEFB 't' + DEFB 13 + DEFB 10 + DEFB 0 + DEFB 195 + DEFB 19 + DEFB 1 + DEFB 17 + DEFB 1 + DEFB 0 + DEFB '!' + DEFB 'q' + DEFB 7 + DEFB 205 + DEFB 25 + DEFB 2 + DEFB ' ' + DEFB 199 + DEFB '!' + DEFB 'v' + DEFB 7 + DEFB 205 + DEFB 25 + DEFB 2 + DEFB ' ' + DEFB 191 + DEFB 205 + DEFB 179 + DEFB 3 + DEFB '!' + DEFB 255 + DEFB 13 + DEFB 1 + DEFB 20 + DEFB 0 + DEFB 205 + DEFB '<' + DEFB 3 + DEFB '8' + DEFB 200 + DEFB 205 + DEFB 194 + DEFB 0 + DEFB 205 + DEFB 223 + DEFB 0 + DEFB '>' + DEFB 255 + DEFB 237 + DEFB '9' + DEFB '8' + DEFB 205 + DEFB 250 + DEFB 1 + DEFB '!' + DEFB 0 + DEFB 16 + DEFB 205 + DEFB '<' + DEFB 3 + DEFB 151 + DEFB 237 + DEFB '9' + DEFB '8' + DEFB 205 + DEFB 2 + DEFB 2 + DEFB 235 + DEFB 205 + DEFB '<' + DEFB 3 + DEFB 205 + DEFB 228 + DEFB 1 + DEFB '!' + DEFB 21 + DEFB 14 + DEFB '"' + DEFB 19 + DEFB 14 + DEFB 205 + DEFB 191 + DEFB 3 + DEFB 205 + DEFB 222 + DEFB 3 + DEFB '}' + DEFB 180 + DEFB '(' + DEFB '>' + DEFB 205 + DEFB 6 + DEFB 4 + DEFB '{' + DEFB 178 + DEFB '(' + DEFB 'I' + DEFB '{' + DEFB 230 + DEFB 7 + DEFB ' ' + DEFB 'Y' + DEFB '*' + DEFB 19 + DEFB 14 + DEFB 's' + DEFB '#' + DEFB 'r' + DEFB '#' + DEFB '"' + DEFB 19 + DEFB 14 + DEFB 6 + DEFB 31 + DEFB 197 + DEFB 213 + DEFB 205 + DEFB 222 + DEFB 3 + DEFB '}' + DEFB 180 + DEFB '(' + DEFB 26 + DEFB 205 + DEFB 6 + DEFB 4 + DEFB '{' + DEFB 178 + DEFB '(' + DEFB '(' + DEFB 235 + DEFB 209 + DEFB 19 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB ' ' + DEFB '5' + DEFB 193 + DEFB 16 + DEFB 229 + DEFB 205 + DEFB 222 + DEFB 3 + DEFB '}' + DEFB 180 + DEFB ' ' + DEFB 198 + DEFB 201 + DEFB 225 + DEFB 225 + DEFB 201 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'n' + DEFB 'u' + DEFB 'l' + DEFB 'l' + DEFB ' ' + DEFB 'f' + DEFB 'i' + DEFB 'l' + DEFB 'e' + DEFB 13 + DEFB 10 + DEFB 0 + DEFB 195 + DEFB 19 + DEFB 1 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'h' + DEFB 'o' + DEFB 'l' + DEFB 'e' + DEFB ' ' + DEFB 'i' + DEFB 'n' + DEFB ' ' + DEFB 'f' + DEFB 'i' + DEFB 'l' + DEFB 'e' + DEFB 13 + DEFB 10 + DEFB 0 + DEFB 195 + DEFB 19 + DEFB 1 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'n' + DEFB 'o' + DEFB 't' + DEFB ' ' + DEFB 'a' + DEFB 'l' + DEFB 'i' + DEFB 'g' + DEFB 'n' + DEFB 'e' + DEFB 'd' + DEFB 13 + DEFB 10 + DEFB 0 + DEFB 195 + DEFB 19 + DEFB 1 + DEFB 229 + DEFB 197 + DEFB 237 + DEFB 'C' + DEFB 249 + DEFB 13 + DEFB '"' + DEFB 251 + DEFB 13 + DEFB '!' + DEFB 0 + DEFB 0 + DEFB '"' + DEFB 253 + DEFB 13 + DEFB '*' + DEFB 245 + DEFB 13 + DEFB '}' + DEFB 180 + DEFB ' ' + DEFB 26 + DEFB 205 + DEFB 222 + DEFB 3 + DEFB '}' + DEFB 180 + DEFB '(' + DEFB 'O' + DEFB '"' + DEFB 245 + DEFB 13 + DEFB 205 + DEFB 6 + DEFB 4 + DEFB '{' + DEFB 178 + DEFB '(' + DEFB 176 + DEFB '!' + DEFB 229 + DEFB 7 + DEFB '"' + DEFB 247 + DEFB 13 + DEFB 205 + DEFB 197 + DEFB 4 + DEFB '*' + DEFB 245 + DEFB 13 + DEFB 237 + DEFB '[' + DEFB 249 + DEFB 13 + DEFB 205 + DEFB 243 + DEFB 1 + DEFB '*' + DEFB 245 + DEFB 13 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB '"' + DEFB 245 + DEFB 13 + DEFB '*' + DEFB 249 + DEFB 13 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB '"' + DEFB 249 + DEFB 13 + DEFB '*' + DEFB 253 + DEFB 13 + DEFB 25 + DEFB '"' + DEFB 253 + DEFB 13 + DEFB 'K' + DEFB 'B' + DEFB 237 + DEFB '[' + DEFB 251 + DEFB 13 + DEFB '*' + DEFB 247 + DEFB 13 + DEFB 237 + DEFB 176 + DEFB '"' + DEFB 247 + DEFB 13 + DEFB 237 + DEFB 'S' + DEFB 251 + DEFB 13 + DEFB '*' + DEFB 249 + DEFB 13 + DEFB '}' + DEFB 180 + DEFB ' ' + DEFB 170 + DEFB '*' + DEFB 253 + DEFB 13 + DEFB 'M' + DEFB 'D' + DEFB 209 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB 225 + DEFB 201 + DEFB '!' + DEFB 165 + DEFB 7 + DEFB 205 + DEFB 'y' + DEFB 4 + DEFB '!' + DEFB 0 + DEFB 0 + DEFB '"' + DEFB 245 + DEFB 13 + DEFB '*' + DEFB 173 + DEFB 7 + DEFB '"' + DEFB 155 + DEFB 7 + DEFB '*' + DEFB 175 + DEFB 7 + DEFB '"' + DEFB 157 + DEFB 7 + DEFB '!' + DEFB 189 + DEFB 7 + DEFB '"' + DEFB 159 + DEFB 7 + DEFB '!' + DEFB 229 + DEFB 11 + DEFB '"' + DEFB 161 + DEFB 7 + DEFB '!' + DEFB 229 + DEFB 13 + DEFB '"' + DEFB 163 + DEFB 7 + DEFB 201 + DEFB '*' + DEFB 155 + DEFB 7 + DEFB 237 + DEFB '[' + DEFB 157 + DEFB 7 + DEFB 1 + DEFB 0 + DEFB 2 + DEFB 183 + DEFB 237 + DEFB 'B' + DEFB 235 + DEFB 6 + DEFB 0 + DEFB 237 + DEFB 'B' + DEFB 235 + DEFB '8' + DEFB 11 + DEFB '"' + DEFB 155 + DEFB 7 + DEFB 237 + DEFB 'S' + DEFB 157 + DEFB 7 + DEFB '!' + DEFB 0 + DEFB 2 + DEFB 201 + DEFB '*' + DEFB 155 + DEFB 7 + DEFB 237 + DEFB 'C' + DEFB 155 + DEFB 7 + DEFB 201 + DEFB '*' + DEFB 159 + DEFB 7 + DEFB 17 + DEFB 225 + DEFB 7 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB '0' + DEFB 11 + DEFB '*' + DEFB 159 + DEFB 7 + DEFB '^' + DEFB '#' + DEFB 'V' + DEFB '#' + DEFB '"' + DEFB 159 + DEFB 7 + DEFB 201 + DEFB '*' + DEFB 161 + DEFB 7 + DEFB 17 + DEFB 229 + DEFB 11 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB '8' + DEFB 19 + DEFB '*' + DEFB 159 + DEFB 7 + DEFB '^' + DEFB '#' + DEFB 'V' + DEFB '#' + DEFB '"' + DEFB 159 + DEFB 7 + DEFB '!' + DEFB 229 + DEFB 9 + DEFB '"' + DEFB 161 + DEFB 7 + DEFB 205 + DEFB 197 + DEFB 4 + DEFB '*' + DEFB 159 + DEFB 7 + DEFB 17 + DEFB 228 + DEFB 7 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB '0' + DEFB 11 + DEFB '*' + DEFB 161 + DEFB 7 + DEFB '^' + DEFB '#' + DEFB 'V' + DEFB '#' + DEFB '"' + DEFB 161 + DEFB 7 + DEFB 201 + DEFB '*' + DEFB 163 + DEFB 7 + DEFB 17 + DEFB 229 + DEFB 13 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB '8' + DEFB 19 + DEFB '*' + DEFB 161 + DEFB 7 + DEFB '^' + DEFB '#' + DEFB 'V' + DEFB '#' + DEFB '"' + DEFB 161 + DEFB 7 + DEFB '!' + DEFB 229 + DEFB 11 + DEFB '"' + DEFB 163 + DEFB 7 + DEFB 205 + DEFB 197 + DEFB 4 + DEFB '*' + DEFB 163 + DEFB 7 + DEFB '^' + DEFB '#' + DEFB 'V' + DEFB '#' + DEFB '"' + DEFB 163 + DEFB 7 + DEFB 201 + DEFB 229 + DEFB '{' + DEFB 230 + DEFB 7 + DEFB 6 + DEFB 3 + DEFB 203 + DEFB ':' + DEFB 203 + DEFB 27 + DEFB 16 + DEFB 250 + DEFB '*' + DEFB 149 + DEFB 7 + DEFB '7' + DEFB 237 + DEFB 'R' + DEFB '8' + DEFB 26 + DEFB '*' + DEFB 147 + DEFB 7 + DEFB 25 + DEFB 235 + DEFB '!' + DEFB 229 + DEFB 7 + DEFB 245 + DEFB 229 + DEFB 205 + DEFB 197 + DEFB 4 + DEFB 225 + DEFB 209 + DEFB 1 + DEFB '@' + DEFB 0 + DEFB 'Y' + DEFB 237 + DEFB 92 + DEFB 25 + DEFB 209 + DEFB 237 + DEFB 176 + DEFB 201 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'b' + DEFB 'a' + DEFB 'd' + DEFB ' ' + DEFB 'i' + DEFB 'n' + DEFB 'o' + DEFB 'd' + DEFB 'e' + DEFB ':' + DEFB ' ' + DEFB 0 + DEFB 198 + DEFB '0' + DEFB 205 + DEFB 9 + DEFB 6 + DEFB 205 + DEFB '7' + DEFB 6 + DEFB ',' + DEFB ' ' + DEFB 0 + DEFB 235 + DEFB 195 + DEFB 13 + DEFB 1 + DEFB 229 + DEFB 205 + DEFB 223 + DEFB 4 + DEFB 229 + DEFB 253 + DEFB 225 + DEFB 'W' + DEFB 225 + DEFB 30 + DEFB 3 + DEFB 195 + DEFB 'F' + DEFB 6 + DEFB 229 + DEFB 205 + DEFB 223 + DEFB 4 + DEFB 253 + DEFB 225 + DEFB 22 + DEFB 3 + DEFB '_' + DEFB 195 + DEFB 'F' + DEFB 6 + DEFB '!' + DEFB 0 + DEFB 6 + DEFB '7' + DEFB 237 + DEFB 'R' + DEFB '8' + DEFB 29 + DEFB 1 + DEFB 0 + DEFB 2 + DEFB '!' + DEFB 0 + DEFB 2 + DEFB 25 + DEFB '|' + DEFB 'e' + DEFB 'i' + DEFB ')' + DEFB 143 + DEFB 201 + DEFB '~' + DEFB '#' + DEFB 'V' + DEFB '#' + DEFB 203 + DEFB ':' + DEFB 31 + DEFB 203 + DEFB ':' + DEFB 31 + DEFB 203 + DEFB ':' + DEFB 31 + DEFB 198 + DEFB '1' + DEFB 201 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'b' + DEFB 'a' + DEFB 'd' + DEFB ' ' + DEFB 'b' + DEFB 'l' + DEFB 'o' + DEFB 'c' + DEFB 'k' + DEFB ':' + DEFB ' ' + DEFB 0 + DEFB 235 + DEFB 195 + DEFB 13 + DEFB 1 + DEFB 1 + DEFB 128 + DEFB 16 + DEFB '!' + DEFB 21 + DEFB 14 + DEFB 24 + DEFB 12 + DEFB 25 + DEFB 205 + DEFB 244 + DEFB 4 + DEFB 30 + DEFB 4 + DEFB 2 + DEFB 3 + DEFB '<' + DEFB 29 + DEFB ' ' + DEFB 250 + DEFB 237 + DEFB '[' + DEFB 19 + DEFB 14 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB '8' + DEFB 235 + DEFB 201 + DEFB 237 + DEFB '[' + DEFB 17 + DEFB 14 + DEFB '*' + DEFB '@' + DEFB 7 + DEFB 25 + DEFB '"' + DEFB '@' + DEFB 7 + DEFB '!' + DEFB 'D' + DEFB 7 + DEFB 205 + DEFB 'e' + DEFB 5 + DEFB '*' + DEFB 'B' + DEFB 7 + DEFB 25 + DEFB '"' + DEFB 'B' + DEFB 7 + DEFB '!' + DEFB 'd' + DEFB 7 + DEFB 205 + DEFB 'e' + DEFB 5 + DEFB '!' + DEFB '>' + DEFB 7 + DEFB 1 + DEFB '3' + DEFB 0 + DEFB 237 + DEFB 176 + DEFB 201 + DEFB 'y' + DEFB 131 + DEFB '+' + DEFB 'w' + DEFB 'x' + DEFB 138 + DEFB '#' + DEFB 'w' + DEFB '#' + DEFB 'N' + DEFB '#' + DEFB 'F' + DEFB 'y' + DEFB 176 + DEFB ' ' + DEFB 240 + DEFB 201 + DEFB '!' + DEFB 129 + DEFB 7 + DEFB 205 + DEFB '7' + DEFB 240 + DEFB 200 + DEFB 205 + DEFB 'V' + DEFB 1 + DEFB 'l' + DEFB 'o' + DEFB 'a' + DEFB 'd' + DEFB 'i' + DEFB 'n' + DEFB 'g' + DEFB ' ' + DEFB 'A' + DEFB ':' + DEFB 'K' + DEFB 'E' + DEFB 'R' + DEFB 'N' + DEFB 'E' + DEFB 'L' + DEFB '.' + DEFB 'B' + DEFB 'I' + DEFB 'N' + DEFB 13 + DEFB 10 + DEFB 0 + DEFB '>' + DEFB '1' + DEFB '2' + DEFB 'b' + DEFB 7 + DEFB 237 + DEFB '[' + DEFB 145 + DEFB 7 + DEFB 183 + DEFB 237 + DEFB 'R' + DEFB ' ' + DEFB '#' + DEFB 25 + DEFB '"' + DEFB 143 + DEFB 7 + DEFB '}' + DEFB 180 + DEFB ' ' + DEFB 4 + DEFB '!' + DEFB 142 + DEFB 7 + DEFB '4' + DEFB '!' + DEFB 0 + DEFB '@' + DEFB 25 + DEFB '"' + DEFB 145 + DEFB 7 + DEFB '!' + DEFB 141 + DEFB 7 + DEFB '4' + DEFB '!' + DEFB 129 + DEFB 7 + DEFB 205 + DEFB '7' + DEFB 240 + DEFB ' ' + DEFB 216 + DEFB '!' + DEFB 141 + DEFB 7 + DEFB '5' + DEFB 205 + DEFB 176 + DEFB 1 + DEFB 253 + DEFB '!' + DEFB 0 + DEFB 0 + DEFB '!' + DEFB 255 + DEFB 13 + DEFB 17 + DEFB 3 + DEFB 12 + DEFB 1 + DEFB 20 + DEFB 0 + DEFB 205 + DEFB 'F' + DEFB 6 + DEFB 205 + DEFB 194 + DEFB 0 + DEFB 205 + DEFB 223 + DEFB 0 + DEFB 205 + DEFB 250 + DEFB 1 + DEFB 213 + DEFB 253 + DEFB 225 + DEFB 17 + DEFB 0 + DEFB 12 + DEFB 'k' + DEFB 'c' + DEFB 205 + DEFB 'F' + DEFB 6 + DEFB 213 + DEFB 205 + DEFB 2 + DEFB 2 + DEFB 235 + DEFB 209 + DEFB 205 + DEFB 'F' + DEFB 6 + DEFB 205 + DEFB 228 + DEFB 1 + DEFB 205 + DEFB 144 + DEFB 1 + DEFB ':' + DEFB 141 + DEFB 7 + DEFB '<' + DEFB 7 + DEFB 7 + DEFB 'G' + DEFB '!' + DEFB 128 + DEFB 16 + DEFB '>' + DEFB 177 + DEFB 'w' + DEFB '#' + DEFB '<' + DEFB 16 + DEFB 251 + DEFB 195 + DEFB 'm' + DEFB 0 + DEFB 245 + DEFB 237 + DEFB '8' + DEFB 5 + DEFB 230 + DEFB 2 + DEFB '(' + DEFB 249 + DEFB 241 + DEFB 237 + DEFB '9' + DEFB 7 + DEFB 201 + DEFB '>' + DEFB 13 + DEFB 205 + DEFB 9 + DEFB 6 + DEFB '>' + DEFB 10 + DEFB 24 + DEFB 234 + DEFB '|' + DEFB 205 + DEFB '$' + DEFB 6 + DEFB '}' + DEFB 245 + DEFB 15 + DEFB 15 + DEFB 15 + DEFB 15 + DEFB 205 + DEFB '-' + DEFB 6 + DEFB 241 + DEFB 230 + DEFB 15 + DEFB 198 + DEFB 144 + DEFB '''' + DEFB 206 + DEFB '@' + DEFB '''' + DEFB 24 + DEFB 210 + DEFB 227 + DEFB 245 + DEFB '~' + DEFB '#' + DEFB 183 + DEFB '(' + DEFB 5 + DEFB 205 + DEFB 9 + DEFB 6 + DEFB 24 + DEFB 246 + DEFB 241 + DEFB 227 + DEFB 201 + DEFB '{' + DEFB 254 + DEFB 4 + DEFB 210 + DEFB 196 + DEFB 6 + DEFB 'y' + DEFB 230 + DEFB 31 + DEFB 197 + DEFB 'O' + DEFB 6 + DEFB 0 + DEFB 205 + DEFB 150 + DEFB 6 + DEFB 12 + DEFB 13 + DEFB '(' + DEFB 17 + DEFB 237 + DEFB '8' + DEFB '0' + DEFB 238 + DEFB 'P' + DEFB 237 + DEFB '9' + DEFB '0' + DEFB 253 + DEFB 9 + DEFB 220 + DEFB 192 + DEFB 6 + DEFB 9 + DEFB 220 + DEFB 194 + DEFB 6 + DEFB 193 + DEFB '>' + DEFB 5 + DEFB 203 + DEFB '8' + DEFB 203 + DEFB 25 + DEFB '=' + DEFB ' ' + DEFB 249 + DEFB 24 + DEFB 26 + DEFB 197 + DEFB 1 + DEFB ' ' + DEFB 0 + DEFB 237 + DEFB 9 + DEFB '&' + DEFB 237 + DEFB '8' + DEFB '0' + DEFB 238 + DEFB 'P' + DEFB 237 + DEFB '9' + DEFB '0' + DEFB 253 + DEFB 9 + DEFB 220 + DEFB 192 + DEFB 6 + DEFB 9 + DEFB 220 + DEFB 194 + DEFB 6 + DEFB 193 + DEFB 11 + DEFB 'x' + DEFB 177 + DEFB ' ' + DEFB 226 + DEFB 201 + DEFB 237 + DEFB 9 + DEFB '&' + DEFB 237 + DEFB 1 + DEFB '''' + DEFB 24 + DEFB 5 + DEFB '>' + DEFB 1 + DEFB 237 + DEFB '9' + DEFB '&' + DEFB 229 + DEFB 253 + DEFB 229 + DEFB 237 + DEFB ')' + DEFB '#' + DEFB 237 + DEFB '!' + DEFB '$' + DEFB 237 + DEFB 25 + DEFB '%' + DEFB 225 + DEFB 237 + DEFB ')' + DEFB ' ' + DEFB 237 + DEFB '!' + DEFB '!' + DEFB 237 + DEFB 17 + DEFB '"' + DEFB 225 + DEFB '>' + DEFB 2 + DEFB 237 + DEFB '9' + DEFB '1' + DEFB 201 + DEFB 20 + DEFB 201 + DEFB 28 + DEFB 201 + DEFB 197 + DEFB 175 + DEFB 237 + DEFB '9' + DEFB '&' + DEFB 237 + DEFB '9' + DEFB '''' + DEFB '>' + DEFB 4 + DEFB 203 + DEFB '8' + DEFB 203 + DEFB 25 + DEFB '=' + DEFB ' ' + DEFB 249 + DEFB 'x' + DEFB 177 + DEFB '(' + DEFB 13 + DEFB 197 + DEFB 1 + DEFB 16 + DEFB 0 + DEFB 205 + DEFB 238 + DEFB 6 + DEFB 193 + DEFB 11 + DEFB 'x' + DEFB 177 + DEFB ' ' + DEFB 243 + DEFB 193 + DEFB 'G' + DEFB 'y' + DEFB 230 + DEFB 15 + DEFB '(' + DEFB ' ' + DEFB 'O' + DEFB 237 + DEFB '0' + DEFB '&' + DEFB 204 + DEFB 158 + DEFB 6 + DEFB 253 + DEFB 9 + DEFB 220 + DEFB 192 + DEFB 6 + DEFB 9 + DEFB 220 + DEFB 194 + DEFB 6 + DEFB 'A' + DEFB 14 + DEFB 1 + DEFB 237 + DEFB '8' + DEFB '0' + DEFB 238 + DEFB 'P' + DEFB 237 + DEFB '9' + DEFB '0' + DEFB 237 + DEFB 9 + DEFB '&' + DEFB 16 + DEFB 248 + DEFB 201 + DEFB '>' + DEFB 't' + DEFB 237 + DEFB '9' + DEFB 0 + DEFB 237 + DEFB '9' + DEFB 1 + DEFB '>' + DEFB '"' + DEFB 237 + DEFB '9' + DEFB 2 + DEFB 237 + DEFB '9' + DEFB 3 + DEFB 151 + DEFB 237 + DEFB '9' + DEFB 4 + DEFB 237 + DEFB '9' + DEFB 5 + DEFB 237 + DEFB '0' + DEFB 8 + DEFB 237 + DEFB '0' + DEFB 9 + DEFB 237 + DEFB '9' + DEFB '''' + DEFB 237 + DEFB '9' + DEFB '/' + DEFB 237 + DEFB '9' + DEFB ')' + DEFB 237 + DEFB '9' + DEFB '*' + DEFB 237 + DEFB '9' + DEFB '+' + DEFB 237 + DEFB '9' + DEFB ',' + DEFB 201 + DEFB 2 + DEFB 0 + DEFB 6 + DEFB 0 + DEFB '&' + DEFB 0 + DEFB 12 + DEFB 0 + DEFB 29 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB '/' + DEFB 'b' + DEFB 'o' + DEFB 'o' + DEFB 't' + DEFB '/' + DEFB 'k' + DEFB 'e' + DEFB 'r' + DEFB 'n' + DEFB 'e' + DEFB 'l' + DEFB '.' + DEFB 'b' + DEFB 'i' + DEFB 'n' + DEFB 0 + DEFB 'r' + DEFB 'o' + DEFB 'o' + DEFB 't' + DEFB '=' + DEFB 'h' + DEFB 'd' + DEFB '0' + DEFB 0 + DEFB '*' + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 'S' + DEFB 'N' + DEFB '=' + DEFB '0' + DEFB '0' + DEFB '0' + DEFB '0' + DEFB '0' + DEFB 0 + DEFB 'b' + DEFB 'o' + DEFB 'o' + DEFB 't' + DEFB 0 + DEFB 'k' + DEFB 'e' + DEFB 'r' + DEFB 'n' + DEFB 'e' + DEFB 'l' + DEFB '.' + DEFB 'b' + DEFB 'i' + DEFB 'n' + DEFB 0 + DEFB 1 + DEFB 'K' + DEFB 'E' + DEFB 'R' + DEFB 'N' + DEFB 'E' + DEFB 'L' + DEFB ' ' + DEFB ' ' + DEFB 'B' + DEFB 'I' + DEFB 'N' + DEFB 0 + DEFB 12 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB '@' + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFB 26 + DEFW 1 + DEFB '.' + DEFB 0 + DEFB 0,0,0,0,0,0,0,0,0,0,0,0 + DEFW 1 + DEFB '..' + DEFB 0 + DEFB 0,0,0,0,0,0,0,0,0,0,0 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 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 + DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + DEFB 0 + END diff --git a/src/fsutil/mklink-b.bat b/src/fsutil/mklink-b.bat new file mode 100644 index 00000000..2a70fc8f --- /dev/null +++ b/src/fsutil/mklink-b.bat @@ -0,0 +1,30 @@ +@if .%1==. goto failure + +@echo -k %2..\..\lib>%1.lnk +@echo -l libcb.lib>>%1.lnk +@echo -l libsysb.lib>>%1.lnk +@echo -l libiar.lib>>%1.lnk +@echo -m>>%1.lnk +@echo -u>>%1.lnk +@echo -i>>%1.lnk +@echo -o %1>>%1.lnk +@echo -bl RCODE=0x8100>>%1.lnk +@echo -bl CODE=0x4000,0x10000>>%1.lnk +@echo -bc CODE=0x4000>>%1.lnk +@echo %2..\..\lib\c0b.rel>>%1.lnk +@echo %1>>%1.lnk + +@echo SUCCESS +@goto done + +:failure +@echo usage: %0 filename +@echo. +@echo Writes link-z80 definition file "filename.lnk" for banked memory model, +@echo containing the needed commands to link "filename.rel" to "filename.i86". +@echo The generated file can then be manually edited to link further modules. +@echo Please note, any previously existing "filename.lnk" will be overwritten! +@echo. + +:done + diff --git a/src/fsutil/mklink-l.bat b/src/fsutil/mklink-l.bat new file mode 100644 index 00000000..5ed40087 --- /dev/null +++ b/src/fsutil/mklink-l.bat @@ -0,0 +1,28 @@ +@if .%1==. goto failure + +@echo -k %2..\..\lib>%1.lnk +@echo -l libcl.lib>>%1.lnk +@echo -l libsysl.lib>>%1.lnk +@echo -l libiar.lib>>%1.lnk +@echo -m>>%1.lnk +@echo -u>>%1.lnk +@echo -i>>%1.lnk +@echo -o %1>>%1.lnk +@echo -bl RCODE=0x8100>>%1.lnk +@echo %2..\..\lib\c0l.rel>>%1.lnk +@echo %1>>%1.lnk + +@echo SUCCESS +@goto done + +:failure +@echo usage: %0 filename +@echo. +@echo Writes link-z80 definition file "filename.lnk" for large memory model, +@echo containing the needed commands to link "filename.rel" to "filename.i86". +@echo The generated file can then be manually edited to link further modules. +@echo Please note, any previously existing "filename.lnk" will be overwritten! +@echo. + +:done + diff --git a/src/fsutil/process.obj b/src/fsutil/process.obj new file mode 100644 index 0000000000000000000000000000000000000000..6c5382da0a40d553955ef07fa8a8db6c414dfed0 GIT binary patch literal 12082 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 literal 0 HcmV?d00001 diff --git a/src/fsutil/scall2.obj b/src/fsutil/scall2.obj new file mode 100644 index 0000000000000000000000000000000000000000..930c7da9fee4610590e41e9d46402d3a954d643e GIT binary patch literal 12236 zcmb7K4Rn;%nSLjkOeS9@KR|-~DT9O`4TSs={-i))G$N57ja5q>lFSTD5;8HF!GfiV z5haIE}EEE z@0@w&x$k}Nd*A!spYQwbch|YHXkT*8ivOBH^c<-C0E&^=eZq``EFS(&+*ZPW2J)BZ5v`a=RD3?sKhn$Orwv=m zLXGjp6ut4_hv8T1wUWyFbiG&G@@kM{X?k4m{7^X3m}rZ)MVpqcyS#R_KUJ`P-I^;` z)d#NfXQ1@Oq+FhP+0xC;JGb5xZQq>O72Vv`*}OT@m54{%Hg`2QwzXB3#hO~yl8drX zW_5kExii)ki^TnNH(lhfs+`{xjr&(GSY2A`U*8drZjbJYwr};Xj&1LVwuL+W*MvK} zqOo>=MP*redD-G6H8o}B6_i_Ow}SsUp3dc>3D>o8t4|R0Ln!{aPd6dH*^OYIs z?93-mA;L}^-^`9^$cOas$jC?$O1nBT$U|jmb<{wU>!`%<#AqGfNVKgj6z*!aE&7q4 ziPnvSMISh)J&n!m1FLY!$$-pgdn`{^8bdlG_O-R%>q2Q1`2qf?rqtTCvn$vU?Ff%) zmT9FMt*po&Z8fJWxyG|-COegps4PHoP$%8+S@O@B{0hz=O38;k6(+j{9H<3pfm#pS z9H=YsOK~}eUG75vhHWEd9EPSudVa2B{) z#`>5(DR@G&kNivNYYAT@rb3?Hu4!6-inEN2kB-JfSD4#Xp4P4-Q09L6Cubo``YF1# zy|FDVzIMm)V(94%$I-g4>;I6pyTxf&8qkWFoo01xMABPVq7C|;2Bme4ZH=AVZO3@! zNpUQ_!F+e%sBU!Hkp_2$n_@BP{`67{u*UIn@wv16rPS7Nyek~fqinN`K(TOif$)^9 ztEjA6JVvr4T~b{>MpEG$wUe>Fbxi&ktJPzyE-X)rb-Iz7G1b;ojM1qaBNwnCAAv*MShZ+oR3lu^nGP-oo)Flo^SpaS+^R1n!P_V^c9iGhjkp-cIyd zFcjV~0pfo!nx0rB2;K1z@`|Xgta!A!wX1+K3+F-R#roCOils6i0zU-VUBLw3^$U?^ zpL5W;(e_9z7-tEa$-#}77s_B)E+h%)xD(O#I9p_|VKLFv7He+JgTRkm4~A4*Fz(aI ztVHv+#!gQ01j_1)ZdG~Qnk+OSh=G(TZS%0%iW>HeGqd4nJN)2m_QNAih+Qd*+g>nk zA@fFL@_o|O5sM%W?B7MozYtVI2z+KCuSQu?3un((+0By8)y(8-a63d0IiKU;V7VQAz)hm~FX=YI`*aaf{zGfC3 z1e-3h`!%!ZNw66rJFJ;S7h$%Rifq1S7PW&_iL6sIiyj7BF0#ipv*<0bH6nXkGmFm0 zg28v)T$-VoMb%(@6V0W?npt!s*wrFSXlBu4VBZqiQ<_;+j1{+4WRo?s=yI@5k=1Kv z(f7c1iR?DbEV>8myCVCcX7Cy8Hj%xpnMHpB+bgn9G_z<9ZYxQVm1<^D4D9bk)}@(6 zkAnS3WKU{l(J`=}iR^@C7X2FRry@J8nMLn_JteaDG_&XvuqQ?KnPwOVSWcf1nOif9 z#)I)V%B6{#S>y+MTx2DhSyT!3n8<20vuF+2qav%*%%W?+?ibnhnpqSEdst*q%`CbJ z>>-ieteHhUV24DuUo(sD1A9spB|Qzp1OKeV zTzyqv^22YR;7XDK@2n9>TKjzHP@*2#tRFtbWeG)-fx@0zHzd6czI_|Lx>WbsqLYE4 zk&}VJkrs+@Y-z*CjNLDLVW4~WFeM69ZMlJO;@Z2(i3`u_)z44e~Bd+Uex?K{nahT%;u)EgMG>-K3=XOs13zqXFSWW%7N zj;XfMleeeF4GH_NJlFXCzDtA@i!16TD;=bO%pxrLSf5_1uUvIKR#j9Ehm646xoP+vry=UTnwo>O?#`B&Mid;&FAv9xme*$>Ft<2V&t4-Sxa44t%G3`CRf&F-PX-P&o_Eqdy((>%Ht=;`<|(pY`n_UfB4@V=^M6S~5VsMk#GjXLy& zm`^J3GCX@~3wfL?KmPV&vY_CoG^YED?TLv6N2N*KUxpJ_dY|yjvik)04OLHIuzUBQ zui(zp2zIi5aHM2E`)>~ccR$~Mw2QvvDtG_$tf%gIwcdVyP}B=uyiluom*sJ+64P~a zIMGv!p(`Yh?~eU3lH4Qh*04mf)^9a2Y!I-#EAaT(20~ zSIkMynulP###w=Ly%OJjd7R{|acUwWWHLN6)QCgs|9#<6NS>%Xf;@^m@^+9XtP-f$ zO2fWsSOSb^h=&dX`5DY3Z!kRXi|Aj0s_dI!Geve5c%d*4d{?=C!xn&XcNNhhFjZm$ zm@3g}^mZC{w_y*0sj_bw*++(D<5|NmmP-s<3Z^`$Gwhp&H5-QQ4eal+^*fDhKiDFX z{n*GJGK}AiY9#j;M)o4uLdZPSXL5gMa^E-XKMnhfVP6^M#v76Hd7NSVuBBwN4O?Is zzjdkHZ-DW;TM=DnWI-_1jy5CP38u!ut%e;mxsMq3Q?M(=-ccia)385)@mpLG72tNE zJeUC%7Fj7+NZ4wVyUwspV9kiw&D;SgB#vhFxOVD#O+qw!yHVVNt{4hV24V(YVLRegyW2c>k=CP4n9R%`t3| zVJi*0)UbNPHW_xUVK*4I&9Dx`b{TeuVRspJz_3GxJ!RO_hP`OmX)xa9@X#5sr-Z!) z#yc7wdK>HsVef)HF6;xa$AolJ9}8;z}<8y&_f%5+0+2Es0o-$F`$ob2IkRj;6&N`!#o9d(GP){^mCw_P62c2 zH^4kP4a}Fj3elV38T22(9O?&R7Ypd4VPGD4Gg;FD7RYWPVgQ~&Q-Rr30`yW9Fo!M$ z=F%0wJh~E?FFT1u*MPgJ1?Z(XFo$*k;Vm$q?f{M>-Z7j&&j5?*m%xeiE8ux_5;&P& z1x}IuMxr;sUGyF>gZ>E2l)Dw4*TAv&BCT?@>nFwiSIk~wrEIQD~qKDr;6M-Kpt=p=9=y#+jv`hk<_Q{WUj z2b?OqphUyqnKT9KqnmiwFpDk%X47h*S9S$+=vr_~c0-A_fV-&`m_<8*+4NnYSN28m zND7`oKLEPveqa_o1k9md0t@J6-~>7iETZ26C&|t!(I3FG=r6!*%EU^TLlc15L6%i< zDKMYvfCY3lu#m0;j;9-dMYIh#kvf5s=`P?@dIUI~o&oylBya}34xB|3u|~|Msld53 z3wSXt1kR&%!1;6yu#B333n&Dvpa`&vV!&$p9&jOb0~gbN;1W6rTuMIyuB0b`tLQmk zEgb<~Mkj!E^a}8D`ZaJZsgIvaZ;G|giTn9GDB{F5PNaQ%*Q_`ne8$$lc7S0=b4__! zN2uwuPs{M7KMY;IzQQKn){L^U&8^|i_Hdgz^`MSAG%F1oS2p7yLs>NBnQ74oN@e2s z$LKK;EFF~Tnr$na|I{NQ>}#g$d9>tuFmK<_Pbsz3;~|(n(BT6jd?@7Z!}ySEE=&Nq zGSMd)F1!WF(;y!p;ni7P{DpQd>T?>jTs~#S5jmdRMr$RX)YD!rpS{i|DVS| zWo=4_@A;xbWnm@ZIF6ROft4NCRHT#+`^?t(S+N;DPZPbM`er7aVbmX|W!uNuqG|i% zLCWdReYQkev0b!NVHOffhy7t|_d@ed_)}`s7J%{k&z89c9;ui;4#^skGr*2;J}tp_ zkkL}y%j&XqxJ{#yU^E!(2)Cz5n8tLP|3;(XY*&ZYDU*LY8dH#RMx#>utornjE;ahM z6IAJNG}s!qV&(psed$c$$^OFf*iv?|eFo@Iq+2io%m}sZM?MNsc z_J^&pKi9#Z<)RjpkEuchFrJ&5V;$TKx!A)X4hS@c_{$bwsXjYv*OQM{h@R~;7P&N^ z-*EW+JJGfws1Kwl9rl^6U4maXd{$$`j+oQVziShh%D-JZmWH(2edti>Q;aMke*bq~ zcOj{CxOTS2zh_bV6{2X@?zD4G@>Fz3XZP6JH#utOqixRXAd*UlYv;bY8NWZG_N$HJ zV_^LJz^%ZF6pHaN8l9WkJI=a%x~^+P(~i&B_2)H*hqK3c_%zBZ9rlo|O~S8Yx_Y}t z+x6<_v{SC_L>#sA`pc~do7L|_N9|RP+R;+ELn$4uovkf_&gH1RRV)WP8gV8;C_ti- zas*K7bB)*8eT_Hrgu+#F)nyeGi>ibxpKvs(HJq?l1-27x425{Ih>}>wY7+`~>SbFb zocE$q07|J)thp`Lr6;`jqvPXj>2jAUrq)-xcla*kjL!vGsiU`Dmoin#9+%QVT`snU z0(2blQS;aC9j6_B#^;Oo&qhZtufopSXF6)BAo z&%jO(oprsd>)J0RY!An-Kby53b^rQ!jEDS2sC3vvwpM~)%&$%ujLvSS9llHRbwJRr zeQbZ->ZtvTF|`*!qI9@+w#IM3`~B)H1LD)z6zjB?I^y`){pGZrp#mqnz@y`N?A`NC zhd)zvDQSejRQRKG*q_6Y@hP$s@JC%G>sw1IDytXq6Se9cmd`;ce$rMFK03Cj68iv7 zNjdIl4oMAe&irgYTB-)6_+21HQh_%Hrv!HR-9hODaS|xFJ=(6kKmQ`Aj7^`CC#^zHkYP)nR2! zLVbYP&Rw)bSOpXpR}-GE`J@`J`&_z`r6|r)oac@;;}s!dGy7DVvMDEg6_sb6SsCXUGd|fq#gehli!o=qatq^T zAoqF;qpme?f2)f<0}wC)vEg>X1B~JYOdA$W&og8yW4g6u`ZGhOQ%L;nK)#ZmCP))V mgS%Bsa%FmXW?oEbRc1_aQF2ULacN0rPE2WXfnGsM5(5As9XGT9 delta 143 zcmdmZfOFLW&Iu1#l3I7$ZG0m0gYn5`#-E>g7@uta%E~y;m@#Mj6idcFFUBX+m0K7$ z1G(2*73N1sWlS3uO@C&{bP9>T9mrSGQvzvX h1!{1%iYcwij43Wkj!7#nEy>J@DNQcWD@aLV003h%Hwyp& diff --git a/src/fsutil/ucp.map b/src/fsutil/ucp.map index 44d8238b..0f9259c1 100644 --- a/src/fsutil/ucp.map +++ b/src/fsutil/ucp.map @@ -1,6 +1,6 @@ ucp - Timestamp is 3ebb8562 (Fri May 09 20:39:30 2003) + Timestamp is 3f448b89 (Thu Aug 21 19:06:17 2003) Preferred load address is 00400000 @@ -305,8 +305,8 @@ 0001:0001077e __access 0041177e f LIBC:access.obj 0001:000107c2 _getenv 004117c2 f LIBC:getenv.obj 0001:0001083f __input 0041183f f LIBC:input.obj - 0001:000112f0 _lseek 004122f0 f LIBC:lseek.obj 0001:000112f0 __lseek 004122f0 f LIBC:lseek.obj + 0001:000112f0 _lseek 004122f0 f LIBC:lseek.obj 0001:0001138a __getbuf 0041238a f LIBC:_getbuf.obj 0001:000113ce _isatty 004123ce f LIBC:isatty.obj 0001:000113ce __isatty 004123ce f LIBC:isatty.obj @@ -410,8 +410,8 @@ 0001:000157af _ungetc 004167af f LIBC:ungetc.obj 0001:00015820 __alloca_probe 00416820 f LIBC:chkstk.obj 0001:00015820 __chkstk 00416820 f LIBC:chkstk.obj - 0001:0001584f __open 0041684f f LIBC:open.obj 0001:0001584f _open 0041684f f LIBC:open.obj + 0001:0001584f __open 0041684f f LIBC:open.obj 0001:00015866 __sopen 00416866 f LIBC:open.obj 0001:00015b20 _strncpy 00416b20 f LIBC:strncpy.obj 0001:00015c20 _strcmp 00416c20 f LIBC:strcmp.obj @@ -492,9 +492,9 @@ 0001:00017564 _SetEndOfFile@4 00418564 f kernel32:KERNEL32.dll 0001:0001756a _LCMapStringA@24 0041856a f kernel32:KERNEL32.dll 0001:00017570 _LCMapStringW@24 00418570 f kernel32:KERNEL32.dll - 0001:00017580 __stricmp 00418580 f LIBC:stricmp.obj 0001:00017580 __strcmpi 00418580 f LIBC:stricmp.obj 0001:00017580 _stricmp 00418580 f LIBC:stricmp.obj + 0001:00017580 __stricmp 00418580 f LIBC:stricmp.obj 0001:0001760c _chdir 0041860c f LIBC:chdir.obj 0001:0001760c __chdir 0041860c f LIBC:chdir.obj 0001:000176a0 _memicmp 004186a0 f LIBC:memicmp.obj @@ -710,7 +710,7 @@ 0003:0000c5a0 __nstream 004295a0 0004:00000000 __IMPORT_DESCRIPTOR_KERNEL32 0042a000 kernel32:KERNEL32.dll 0004:00000014 __NULL_IMPORT_DESCRIPTOR 0042a014 kernel32:KERNEL32.dll - 0004:0000016c __imp__GetEnvironmentStringsW@0 0042a16c kernel32:KERNEL32.dll + 0004:0000016c __imp__ExitProcess@4 0042a16c kernel32:KERNEL32.dll 0004:00000170 __imp__TerminateProcess@8 0042a170 kernel32:KERNEL32.dll 0004:00000174 __imp__GetCurrentProcess@0 0042a174 kernel32:KERNEL32.dll 0004:00000178 __imp__GetTimeZoneInformation@4 0042a178 kernel32:KERNEL32.dll @@ -740,7 +740,7 @@ 0004:000001d8 __imp__FreeEnvironmentStringsA@4 0042a1d8 kernel32:KERNEL32.dll 0004:000001dc __imp__FreeEnvironmentStringsW@4 0042a1dc kernel32:KERNEL32.dll 0004:000001e0 __imp__GetEnvironmentStrings@0 0042a1e0 kernel32:KERNEL32.dll - 0004:000001e4 __imp__ExitProcess@4 0042a1e4 kernel32:KERNEL32.dll + 0004:000001e4 __imp__GetEnvironmentStringsW@0 0042a1e4 kernel32:KERNEL32.dll 0004:000001e8 __imp__GetModuleHandleA@4 0042a1e8 kernel32:KERNEL32.dll 0004:000001ec __imp__GetEnvironmentVariableA@12 0042a1ec kernel32:KERNEL32.dll 0004:000001f0 __imp__GetVersionExA@4 0042a1f0 kernel32:KERNEL32.dll diff --git a/src/fsutil/ucp.obj b/src/fsutil/ucp.obj new file mode 100644 index 0000000000000000000000000000000000000000..6184495be5b2ae4d2e2d323e38b0c3d9bdd607e0 GIT binary patch literal 15162 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 literal 0 HcmV?d00001 diff --git a/src/fsutil/ucpsub.obj b/src/fsutil/ucpsub.obj new file mode 100644 index 0000000000000000000000000000000000000000..b87acb248fca50d8fe8e0713becc58fdc72ffc61 GIT binary patch literal 22088 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 literal 0 HcmV?d00001 diff --git a/src/fsutil/utils.lst b/src/fsutil/utils.lst new file mode 100644 index 00000000..79a2f416 --- /dev/null +++ b/src/fsutil/utils.lst @@ -0,0 +1,148 @@ + 1 NAME utils(17) + 2 RSEG CODE(0) + 3 PUBLIC bcopy + 4 PUBLIC bfill + 5 PUBLIC bzero + 6 PUBLIC int_max + 7 PUBLIC int_min + 8 EXTERN ?CL64180B_4_06_L00 + 9 EXTERN ?SS_CMP_L02 + 10 EXTERN ?BANK_LEAVE_DIRECT_L08 + 11 EXTERN ?ENT_PARM_DIRECT_L09 + 12 RSEG CODE + 00000000 13 bzero: + 00000000 CD 00 00 14 CALL LWRD ?ENT_PARM_DIRECT_L09 + 00000003 15 ?0015: + 00000003 16 ?0001: + 00000003 DD 6E 04 17 LD L,(IX+4) + 00000006 DD 66 05 18 LD H,(IX+5) + 00000009 2B 19 DEC HL + 0000000A DD 75 04 20 LD (IX+4),L + 0000000D DD 74 05 21 LD (IX+5),H + 00000010 23 22 INC HL + 00000011 7D 23 LD A,L + 00000012 B4 24 OR H + 00000013 28 12 25 JR Z,?0000 + 00000015 26 ?0002: + 00000015 DD 6E 02 27 LD L,(IX+2) + 00000018 DD 66 03 28 LD H,(IX+3) + 0000001B 23 29 INC HL + 0000001C DD 75 02 30 LD (IX+2),L + 0000001F DD 74 03 31 LD (IX+3),H + 00000022 2B 32 DEC HL + 00000023 36 00 33 LD (HL),0 + 00000025 18 DC 34 JR ?0001 + 00000027 35 ?0000: + 00000027 C3 00 00 36 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 0000002A 37 bfill: + 0000002A CD 00 00 38 CALL LWRD ?ENT_PARM_DIRECT_L09 + 0000002D 39 ?0016: + 0000002D 40 ?0004: + 0000002D DD 6E 0A 41 LD L,(IX+10) + 00000030 DD 66 0B 42 LD H,(IX+11) + 00000033 2B 43 DEC HL + 00000034 DD 75 0A 44 LD (IX+10),L + 00000037 DD 74 0B 45 LD (IX+11),H + 0000003A 23 46 INC HL + 0000003B 7D 47 LD A,L + 0000003C B4 48 OR H + 0000003D 28 14 49 JR Z,?0003 + 0000003F 50 ?0005: + 0000003F DD 6E 02 51 LD L,(IX+2) + 00000042 DD 66 03 52 LD H,(IX+3) + 00000045 23 53 INC HL + 00000046 DD 75 02 54 LD (IX+2),L + 00000049 DD 74 03 55 LD (IX+3),H + 0000004C 2B 56 DEC HL + 0000004D DD 46 04 57 LD B,(IX+4) + 00000050 70 58 LD (HL),B + 00000051 18 DA 59 JR ?0004 + 00000053 60 ?0003: + 00000053 C3 00 00 61 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 00000056 62 bcopy: + 00000056 CD 00 00 63 CALL LWRD ?ENT_PARM_DIRECT_L09 + 00000059 64 ?0017: + 00000059 65 ?0007: + 00000059 DD 6E 0A 66 LD L,(IX+10) + 0000005C DD 66 0B 67 LD H,(IX+11) + 0000005F 2B 68 DEC HL + 00000060 DD 75 0A 69 LD (IX+10),L + 00000063 DD 74 0B 70 LD (IX+11),H + 00000066 23 71 INC HL + 00000067 7D 72 LD A,L + 00000068 B4 73 OR H + 00000069 28 20 74 JR Z,?0006 + 0000006B 75 ?0008: + 0000006B DD 6E 02 76 LD L,(IX+2) + 0000006E DD 66 03 77 LD H,(IX+3) + 00000071 23 78 INC HL + 00000072 DD 75 02 79 LD (IX+2),L + 00000075 DD 74 03 80 LD (IX+3),H + 00000078 2B 81 DEC HL + 00000079 46 82 LD B,(HL) + 0000007A DD 6E 04 83 LD L,(IX+4) + 0000007D DD 66 05 84 LD H,(IX+5) + 00000080 23 85 INC HL + 00000081 DD 75 04 86 LD (IX+4),L + 00000084 DD 74 05 87 LD (IX+5),H + 00000087 2B 88 DEC HL + 00000088 70 89 LD (HL),B + 00000089 18 CE 90 JR ?0007 + 0000008B 91 ?0006: + 0000008B C3 00 00 92 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 0000008E 93 int_min: + 0000008E CD 00 00 94 CALL LWRD ?ENT_PARM_DIRECT_L09 + 00000091 4B 95 LD C,E + 00000092 42 96 LD B,D + 00000093 DD 6E 04 97 LD L,(IX+4) + 00000096 DD 66 05 98 LD H,(IX+5) + 00000099 CD 00 00 99 CALL LWRD ?SS_CMP_L02 + 0000009C 30 08 100 JR NC,?0010 + 0000009E DD 6E 04 101 LD L,(IX+4) + 000000A1 DD 66 05 102 LD H,(IX+5) + 000000A4 18 06 103 JR ?0011 + 000000A6 104 ?0010: + 000000A6 DD 6E 02 105 LD L,(IX+2) + 000000A9 DD 66 03 106 LD H,(IX+3) + 000000AC 107 ?0011: + 000000AC C3 00 00 108 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000000AF 109 int_max: + 000000AF CD 00 00 110 CALL LWRD ?ENT_PARM_DIRECT_L09 + 000000B2 EB 111 EX DE,HL + 000000B3 CD 00 00 112 CALL LWRD ?SS_CMP_L02 + 000000B6 30 04 113 JR NC,?0013 + 000000B8 69 114 LD L,C + 000000B9 60 115 LD H,B + 000000BA 18 06 116 JR ?0014 + 000000BC 117 ?0013: + 000000BC DD 6E 02 118 LD L,(IX+2) + 000000BF DD 66 03 119 LD H,(IX+3) + 000000C2 120 ?0014: + 000000C2 C3 00 00 121 JP LWRD ?BANK_LEAVE_DIRECT_L08 + 000000C5 122 END + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1. +Hexadecimal [32-Bits] +utils(17) +Symbol Table + + .__.ABS. = 00000000 G | 1 ?0000 00000027 R + 1 ?0001 00000003 R | 1 ?0002 00000015 R + 1 ?0003 00000053 R | 1 ?0004 0000002D R + 1 ?0005 0000003F R | 1 ?0006 0000008B R + 1 ?0007 00000059 R | 1 ?0008 0000006B R + 1 ?0010 000000A6 R | 1 ?0011 000000AC R + 1 ?0013 000000BC R | 1 ?0014 000000C2 R + 1 ?0015 00000003 R | 1 ?0016 0000002D R + 1 ?0017 00000059 R | ?BANK_LEAVE_DI ******** GX + ?CL64180B_4_06 ******** GX | ?ENT_PARM_DIRE ******** GX + ?SS_CMP_L02 ******** GX | 1 bcopy 00000056 GR + 1 bfill 0000002A GR | 1 bzero 00000000 GR + 1 int_max 000000AF GR | 1 int_min 0000008E GR + + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2. +Hexadecimal [32-Bits] +utils(17) +Area Table + + 0 _DEFAULT size 0 flags 0 + 1 CODE size C5 flags 0 diff --git a/src/fsutil/utils.obj b/src/fsutil/utils.obj new file mode 100644 index 0000000000000000000000000000000000000000..39946c2ebc7ed164e097b7fd7402de933c76e468 GIT binary patch literal 2080 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 literal 0 HcmV?d00001 diff --git a/src/fsutil/xip.obj b/src/fsutil/xip.obj new file mode 100644 index 0000000000000000000000000000000000000000..cebbe48935771ca2c5d6f8b254954645688efe88 GIT binary patch literal 17088 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 xp-q&69K89 0, clear bc+1 bytes at de-1 - .endif call file_scan ; scan file and construct block list - .if 1 ; new kernel format call say_starting ; tell the user we have liftoff - .else - call virtual_init ; modifies CBR (can't call EPROM now) - .endif ld bc,8080h ; initial spot in virt memory table - .if 1 ; new kernel format ld hl,region_list ; -> block no. of 1st found region - .else - ld hl,region_list+2 ; -> block no. of 2nd found region - .endif jr translate_loope translate_loop: @@ -155,15 +141,7 @@ translate_loope: sbc hl,de ; see if we've gone past the end jr c,translate_loop - .if 0 ; new kernel format - ld hl,region_list ; there is at least one entry - call block_to_bbr ; a = required bbr value for init code - .endif - kazumi: - .if 0 - ; please preserve a for entering kernel at label runsys! - .endif ld sp,parameters-parameters_end ; stack just under copied params ld hl,parameters ; pre-initialised parameter block @@ -172,59 +150,34 @@ kazumi: ldir ; copy parameter block for kernel init ; careful! b will be used again below!! - .if 1 ; so as not to corrupt CBR when jumping to the loaded program ld hl,runsys ; start of small stub program below - .if 1 ; new kernel format ld de,(e_stack) ; load into base of stack region - .else - ld de,8100h ; -> just after virtual memory table - .endif push de ld c,runsys_end-runsys ; size of small stub program (b=0) ldir ; copy stub program - .if 1 ; new kernel format ld hl,(e_entry) ; information for the runsys stub ld de,(e_break) ; information for the client program - .endif ret ; enter stub program (jp 8100h) - .else - ld e,30h-8 - out0 (CBR),e ; window onto runsys (CBAR = 80h) - jp runsys+8000h ; run the remaining startup from window - .endif bad_file: call gmess defb 'file not found',0dh,0ah,0 jr error_bomb - .if 1 ; new kernel format bad_length: call gmess defb 'file too short',0dh,0ah,0 jr error_bomb - .endif runsys: - .if 1 ; new kernel format ld a,84h out0 (CBAR),a ; CA0 = 16k, bank area = 16k, CA1 = 32k jp (hl) ; jump to entry address from exe header - .else - ld e,84h - out0 (CBAR),e ; CA0 = 16k, bank area = 16k, CA1 = 32k - - out0 (BBR),a ; bank area = logical 4000 = abs c:0000 - jp 4000h ; execute file from the 1st loaded page - .endif - .if 1 ; so as not to corrupt CBR when jumping to the loaded program runsys_end: - .endif ; ----------------------------------------------------------------------------- ; had some kind of fatal error, the entry points are to save code space - .if 1 ; new kernel format check_e_magic: ld hl,(e_magic) ld de,E_MAGIC_FIXME @@ -245,9 +198,7 @@ check_e_format: call gmess defb 'bad e_format: ',0 - ; fall into error_magic - - .endif + jr error_magic black_magic: call gmess @@ -352,19 +303,12 @@ copy_serial_no: ret .endif - .if 1 ; new kernel format say_starting: call gmess defb 'starting operating system',0dh,0ah,0 ret -.endif virtual_init: - .if 0 ; new kernel format - call gmess - defb 'starting operating system',0dh,0ah,0 - .endif - call rsel1 ld a,80h @@ -373,7 +317,6 @@ virtual_init: ld a,4-8 ;0 also works, see bstartup.s01 at label init out0 (CBR),a ; window onto 0:8000, virt memory table - .if 1 ; new kernel format ld de,08001h ; address of virtual memory table+1 ld bc,0ffh ; size of virtual memory table-1 ; fall into clear_bc_p1_at_de_m1 @@ -422,14 +365,6 @@ calculate_size: ; enter with hl = start addr, de = end ld c,l ld b,h ; bc = bytes to load for region ret - .else - ld hl,08000h - ld de,08001h - ld bc,0ffh - ld (hl),l ; 0 - ldir ; zero out the virtual memory table - ret - .endif ; ----------------------------------------------------------------------------- @@ -739,11 +674,9 @@ file_read_done: pop hl ; hl preserved for convenience of user ret - .endif ; ----------------------------------------------------------------------------- - .if 1 ; new kernel format file_setup: ; enter with de = inode number for file to be read @@ -1023,16 +956,12 @@ cont: ld hl,4000h call LDFILE ; copy more CMX.BIN data to LDSEG:LDPTR jr nz,loop - .if 1 ; virtual memory ld hl,LDEXT dec (hl) ; account for extent that wasn't found - .endif done: - .if 1 ; virtual memory call virtual_init ; modifies CBR (can't call EPROM now) - .if 1 ; new kernel format ld iy,0 ld hl,exe_header_buf ld de,0c03h ; copy from c: to 3: @@ -1063,36 +992,20 @@ done: call nc,clear_bc_p1_at_de_m1 ; if bc => 0, clear bc+1 bytes at de-1 call say_starting ; tell the user we have liftoff - .endif ld a,(LDEXT) - .if 1 ; new kernel format inc a ; do all pages, including the first - .endif ld b,a ; how many extents were loaded ? (-1) ld hl,8080h ; initial spot in virt memory table - .if 1 ; new kernel format ld a,0c0h-4 ; bbr value to access 1st loaded page - .else - ld a,0c0h ; bbr value to access 2nd loaded page - .endif virtual_loop: ld (hl),a ; map 16kbytes into virt memory space inc hl add a,4 djnz virtual_loop - .else - call rsel1 ; select RAM for segments 0: and 1: - ld a,80h - out0 (CBAR),a ; CA0 = 0k, bank area = 32k, CA1 = 32k - .endif - - .if 0 ; new kernel format - ld a,0c0h-4 ; bbr value to access 1st loaded page - .endif jp kazumi ; ----------------------------------------------------------------------------- diff --git a/src/gboot/gboot.new b/src/gboot/gboot.new new file mode 100644 index 00000000..1dd90446 --- /dev/null +++ b/src/gboot/gboot.new @@ -0,0 +1,1095 @@ +; gboot.asm +; Generic Hytech boot loader program to occupy 4 sectors at start of each disk + +$ io64180.inc + +LDFILE equ 0f037h ; BOOTLDR.BIN entry point + +SUPERBLOCK equ 4 ; starting position of filesystem +SMOUNTED equ 12742 ; random number to specify mounted fs +ROOTINODE equ 1 ; inode number of / for all mounted fs + +BUFSIZE equ 200h ; how many bytes per disk block +BUFSIZELOG equ 9 ; shift count representing the above + +SIZEOF_DINODE_T equ 64 ; how many bytes per disk inode +DINODESPERBLOCK equ 8 ; how many disk inodes per disk block +DINODESPERBLOCKLOG equ 3 ; shift count representing the above + +DIRECTBLOCKS equ 18 +INDIRECTBLOCKS equ 1 ; MUST BE 1! +DINDIRECTBLOCKS equ 1 ; MUST BE 1! + +SIZEOF_DIRECT_T equ 16 ; how many bytes per directory entry +DIRNAMELEN equ 14 ; how many bytes of these are dir name + +REGION_LOG equ 14 +REGION_BYTES equ (1<> 14) & 1 + defb ((800h-(final-start)) >> 14) & 2 + defb ((0c00h-(final-start)) >> 14) & 3 + defb 0,0,0,0,0,0,0,0,0,0,0,0 + +; ----------------------------------------------------------------------------- + +entry: + call gmess + defb 'loading /boot/kernel.bin',0dh,0ah,0 + + call virtual_init ; modifies CBR (can't call EPROM now) + + ld de,SUPERBLOCK + ld hl,block + call block_read + + ld hl,(block) + ld de,SMOUNTED + or a + sbc hl,de + jp nz,black_magic + + ld hl,(block+2) + ld (reserv),hl + ld hl,(block+4) + ld (isize),hl + ld hl,(block+6) + ld (fsize),hl + + ld de,ROOTINODE + ld hl,name_boot + call dir_search ; returns de = the found inode + jr nz,bad_file + + ld hl,name_kernel_bin + call dir_search ; returns de = the found inode + jr nz,bad_file + + call file_setup ; read inode and prepare to walk file + + ld hl,exe_header_buf + ld bc,exe_header_size + call file_read ; read first block, copy header to buf + jr c,bad_length + + call check_e_magic ; ensure e_magic = E_MAGIC + call check_e_format ; ensure e_format = E_FORMAT_KERNEL + + ld a,0-8 ; so that logical 8000 = phys 0:0000 + out0 (CBR),a + + call get_ca0_size ; returns bc = size, de = start of copy + ld hl,8000h ; destination = start of CA0 region + call file_read ; read CA0 data to common data segment + + ld a,4-8 ; so that logical 8000 = phys 0:4000 + out0 (CBR),a + + call get_ca1_size ; returns bc = size, de = start of copy + ex de,hl ; destination specified by file header + call file_read ; read CA1 data to kernel data segment + + call get_udata_size_m1 ; returns bc = size-1, de = start+1 + call nc,clear_bc_p1_at_de_m1 ; if bc => 0, clear bc+1 bytes at de-1 + + call file_scan ; scan file and construct block list + + call say_starting ; tell the user we have liftoff + + ld bc,8080h ; initial spot in virt memory table + ld hl,region_list ; -> block no. of 1st found region + jr translate_loope + +translate_loop: + add hl,de ; restore hl value from comparison + + call block_to_bbr ; calculates a from word at hl (bumped) + ld (bc),a ; a = required bbr value to access page + inc bc + +translate_loope: + ld de,(region_ptr) ; indicates end of region list + or a + sbc hl,de ; see if we've gone past the end + jr c,translate_loop + +kazumi: + ld sp,parameters-parameters_end ; stack just under copied params + + ld hl,parameters ; pre-initialised parameter block + ld de,parameters-parameters_end ; to fit neatly at top of memory + ld bc,parameters_end-parameters ; size in bytes to copy + ldir ; copy parameter block for kernel init + ; careful! b will be used again below!! + + ld hl,runsys ; start of small stub program below + ld de,(e_stack) ; load into base of stack region + push de + ld c,runsys_end-runsys ; size of small stub program (b=0) + ldir ; copy stub program + ld hl,(e_entry) ; information for the runsys stub + ld de,(e_break) ; information for the client program + ret ; enter stub program (jp 8100h) + +bad_file: + call gmess + defb 'file not found',0dh,0ah,0 + jr error_bomb + +bad_length: + call gmess + defb 'file too short',0dh,0ah,0 + jr error_bomb + +runsys: + ld a,84h + out0 (CBAR),a ; CA0 = 16k, bank area = 16k, CA1 = 32k + jp (hl) ; jump to entry address from exe header +runsys_end: + +; ----------------------------------------------------------------------------- +; had some kind of fatal error, the entry points are to save code space + +check_e_magic: + ld hl,(e_magic) + ld de,E_MAGIC_FIXME + or a + sbc hl,de + ret z + + call gmess + defb 'bad e_magic: ',0 + jr error_magic + +check_e_format: + ld hl,(e_format) + ld de,E_FORMAT_KERNEL + or a + sbc hl,de + ret z + + call gmess + defb 'bad e_format: ',0 + jr error_magic + +black_magic: + call gmess + defb 'bad magic: ',0 + +error_magic: + add hl,de + +error_ahexw: + call ahexw + +error_acrlf: + call acrlf + +error_bomb: + ; try not to surprise the user unnecessarily + call gmess + defb 'doing a clean boot',0dh,0ah,0 + + ; before erroring, prepare to clobber CP/M drive A: directory + ld hl,block + ld de,block+1 + ld bc,BUFSIZE-1 + ld (hl),0aah ; clobbering pattern + ldir ; initialise temporary buffer + + ; perform the clobbering (this ensures a clean boot from EPROM) + .if 1 + ld de,0 + ld b,4 +clobber_loop: + push bc + push de + + ld hl,block + call block_write + + pop de + pop bc + inc de + djnz clobber_loop + .else + ld de,304h + ld l,c + ld h,b ; ld hl,0 ; e:hl -> destination 4:0000 + + ld b,4 ; clobber until just before 4:0800 +clobber_loop: + push bc + + ld iy,block ; copy from d:iy -> destination + ld bc,BUFSIZE ; bytes to copy + call copyr ; copy them, one byte at a time + + pop bc + djnz clobber_loop + .endif + + ; ready to error, by instructing the WPO chip on motherboard + ld a,0aah + out0 (TRDR),A ; command byte to error the system + ld a,13h + out0 (CNTR),A ; TE=1, divisor = 3, start transmission + + ; wait for the error to occur, or else we're rather stuck + jr $ + +; ----------------------------------------------------------------------------- + +gmess: call amess + defb 'gboot: ',0 + jp amess + +rsel1: + .if 1 ; temporary only + ld de,2 ; save eprom serial no to 2:fc81 + call copy_serial_no + .endif + ld a,81h + out0 (TRDR),A ; command byte to set RSEL=1 + ld a,13h + out0 (CNTR),A ; TE=1, divisor = 3, start transmission + + sub a + dec a + jr nz,$-1 + dec a + jr nz,$-1 + dec a + jr nz,$-1 + dec a + jr nz,$-1 ; delay for command to be processed + .if 1 ; temporary only + ld de,200h ; restore eprom serial no from 2:fc81 +copy_serial_no: + ld hl,0fc81h + push hl + pop iy + ld bc,5 + jp copyr + .else + ret + .endif + +say_starting: + call gmess + defb 'starting operating system',0dh,0ah,0 + ret + +virtual_init: + call rsel1 + + ld a,80h + out0 (CBAR),a ; CA0 = 0k, bank area = 32k, CA1 = 32k + + ld a,4-8 ;0 also works, see bstartup.s01 at label init + out0 (CBR),a ; window onto 0:8000, virt memory table + + ld de,08001h ; address of virtual memory table+1 + ld bc,0ffh ; size of virtual memory table-1 + ; fall into clear_bc_p1_at_de_m1 + +clear_bc_p1_at_de_m1: + ld l,e + ld h,d + dec hl + ld (hl),0 + + ld a,c + or b + ret z + + ldir + ret + +de_min_hl_de: + ; enter with values in hl and de, returns de = min(hl, de) + or a + sbc hl,de + ret nc ; de is lesser + add hl,de ; hl was lesser, restore its value + ex de,hl ; and return the original hl in de + ret + +get_ca0_size: + ld hl,(e_hsize) ; variable size of header + ld de,exe_header_size ; subtract fixed size of header + jr calculate_size + +get_ca1_size: + ld hl,(e_udata) ; ending logical addr in CA1 region + ld de,(e_idata) ; starting logical addr in CA1 region + jr calculate_size + +get_udata_size_m1: + ld hl,(e_break) ; ending logical addr to be cleared + ld de,(e_udata) ; starting logical addr to be cleared + inc de ; special algorithm for correct cf + ; fall into calculate_size + +calculate_size: ; enter with hl = start addr, de = end + or a + sbc hl,de ; find the difference + ld c,l + ld b,h ; bc = bytes to load for region + ret + +; ----------------------------------------------------------------------------- + +dir_search: + ld (dir_name),hl + + .if 1 ; new kernel format + call file_setup ; read inode and prepare to walk file + +dir_search_loop: + ld bc,SIZEOF_DIRECT_T + ld hl,directory_buf + call file_read ; returns hl = preserved, cf set up + ret c ; also implies nz ; directory search failed (not found) + + inc hl + + ld de,(dir_name) + ld b,DIRNAMELEN + +dir_search_compare_loop: + inc hl + + ld a,(de) + cp (hl) + jr nz,dir_search_loop ; didn't match, go and read another + or a + jr z,dir_search_compare_good ; matched, and sentinel was reached + + inc de + djnz dir_search_compare_loop + + ; matched, and directory filename was of maximal length + ld a,(de) + or a + ; if user's filename is exactly maximum, return zf=1 (found) + ; if user's filename is longer than maximum, return zf=0 (not found) + +dir_search_compare_good: + ld de,(directory_buf) ; de = return value, inode number + ret ; with zf=1 from the comparisons above + .else + ld hl,inode + call inode_read ; read inode of the dir to be searched + + call bmap_setup ; prepare counters to walk the file + jr dir_search_loope + +dir_search_loop: + push hl ; h = count of entries in current block + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_dir_block ; hole in directory + + ld hl,block + push hl + call block_read + pop hl + pop bc ; b = count of entries in current block + +dir_search_entry_loop: + push hl + inc hl + + ld de,(dir_name) + ld c,DIRNAMELEN + +dir_search_compare_loop: + inc hl + + ld a,(de) + cp (hl) + jr nz,dir_search_compare_bad + or a + jr z,dir_search_compare_good + + inc de + dec c + jr nz,dir_search_compare_loop + + ; matched, and directory filename was of maximal length + ld a,(de) + or a + ; if user's filename is exactly maximum, return zf=1 (found) + ; if user's filename is longer than maximum, return zf=0 (not found) + +dir_search_compare_good: + pop hl + ld e,(hl) + inc hl + ld d,(hl) + ret + +dir_search_compare_bad: + pop hl + ld de,SIZEOF_DIRECT_T + add hl,de + djnz dir_search_entry_loop + +dir_search_loope: + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + add hl,hl + add hl,hl + add hl,hl + add hl,hl ; assumes SIZEOF_DIRECT_T = 16!! + + ld a,h ; a = valid bytes / SIZEOF_DIRECT_T + or a + jr nz,dir_search_loop + + inc a ; nz + ret + +bad_dir_block: + call gmess + defb 'hole in directory',0dh,0ah,0 + jp error_bomb + .endif + +; ----------------------------------------------------------------------------- + +file_scan: + ld hl,region_list + ld (region_ptr),hl + + .if 0 ; new kernel format + ld hl,inode + call inode_read ; read inode of the target file + .endif + + call bmap_setup ; prepare counters to walk the file + call bmap_remain ; get hl = valid bytes in first block + ; and decrement the file size remaining + ld a,l + or h ; any bytes in file? + jr z,bad_file_size ; no, abort proceedings + +file_scan_loop: + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block +; ld l,e +; ld h,d +; call ahexw + + ld a,e + and PAGE_BLOCKS-1 ; check it starts on a page boundary + jr nz,bad_alignment + + ld hl,(region_ptr) + ld (hl),e + inc hl + ld (hl),d ; stash away the starting block no. + inc hl + ld (region_ptr),hl ; for the current region (bumped) + + ld b,REGION_BLOCKS-1 + +file_region_loop: + push bc + push de + + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h + jr z,file_region_final + + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block +; ld a,' ' +; call abyte +; ld l,e +; ld h,d +; call ahexw + + ex de,hl ; hl = the actual block no. from file + pop de + inc de ; de = expected, contiguous block no. + + or a + sbc hl,de + jr nz,bad_alignment + + pop bc + djnz file_region_loop +; call acrlf + + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h ; anything left to read? + jr nz,file_scan_loop ; yes (scan is limited by file size) + ret ; last region is = REGION_BLOCKS blocks + +file_region_final: +; call acrlf + pop hl ; last region is < REGION_BLOCKS blocks + pop hl ; clean up saved variables, and done + ret + +bad_file_size: + call gmess + defb 'null file',0dh,0ah,0 + jp error_bomb + +bad_file_block: + call gmess + defb 'hole in file',0dh,0ah,0 + jp error_bomb + +bad_alignment: + call gmess + defb 'not aligned',0dh,0ah,0 + jp error_bomb + +; ----------------------------------------------------------------------------- + + .if 1 ; new kernel format +file_read: + ; enter with hl -> user buffer, bc = bytes to read (must be nonzero!!) + + push hl ; this will be preserved for caller + push bc ; this will be used to set cf on return + + ld (read_user),bc + ld (read_user_ptr),hl + + ld hl,0 + ld (read_done),hl + + ld hl,(read_remain) + ld a,l + or h ; got any leftover data in buffer? + jr nz,file_read_entry ; yes, use it first + +file_read_loop: + ; read a new block into the buffer, recording no. of valid bytes read + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h + jr z,file_read_done ; reached end of file + + ld (read_remain),hl + + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block ; hole in file + + ld hl,block + ld (read_remain_ptr),hl + call block_read + +file_read_entry: + ; satisfy as much as possible of user's request from current buffer + ld hl,(read_remain) ; bytes available + ld de,(read_user) ; bytes wanted + call de_min_hl_de ; de = amount to be processed this time + + ld hl,(read_remain) + or a + sbc hl,de + ld (read_remain),hl ; reduce bytes available by amount + + ld hl,(read_user) + or a + sbc hl,de + ld (read_user),hl ; reduce bytes wanted by amount + + ld hl,(read_done) + add hl,de + ld (read_done),hl ; increase bytes copied by amount + + ld c,e + ld b,d + ld de,(read_user_ptr) + ld hl,(read_remain_ptr) + ldir + ld (read_remain_ptr),hl + ld (read_user_ptr),de + + ; see if the user's entire request has now been processed + ld hl,(read_user) + ld a,l + or h + jr nz,file_read_loop ; no, get another block + +file_read_done: + ld hl,(read_done) ; indicates how much was really read + ld c,l + ld b,h ; bc = return value, how much was read + + pop de ; de = size of user's original request + or a + sbc hl,de ; set cf=1 if less than amount wanted + + pop hl ; hl preserved for convenience of user + ret + +; ----------------------------------------------------------------------------- + +file_setup: + ; enter with de = inode number for file to be read + + ld hl,inode + call inode_read ; read inode of the dir to be searched + + ld hl,0 + ld (read_remain),hl ; forces a new data block to be loaded + ; fall into bmap_setup + .endif + +bmap_setup: + ld hl,(inode+8) + ld (size_remain),hl + ld hl,(inode+10) + ld (size_remain+2),hl + + ld hl,inode+24 + ld (direct_ptr),hl + ld hl,indirect_block+BUFSIZE + ld (indirect_ptr),hl + ld hl,dindirect_block+BUFSIZE + ld (dindirect_ptr),hl + ret + +bmap_remain: + ld hl,(size_remain) + ld de,(size_remain+2) + + ld bc,BUFSIZE + or a + sbc hl,bc + ex de,hl + ld b,0 ; ld bc,0 + sbc hl,bc + ex de,hl + jr c,bmap_remain_final + + ld (size_remain),hl + ld (size_remain+2),de + + ld hl,BUFSIZE + ret ; return a complete block of size hl + +bmap_remain_final: + ld hl,(size_remain) + ld (size_remain),bc ; 0 + ;ld (size_remain+2),bc ; 0 + ret ; return a partial block of size hl + +bmap_block: + ld hl,(direct_ptr) + ld de,inode+24+DIRECTBLOCKS*2 + or a + sbc hl,de + jr nc,bmap_indirect + + ld hl,(direct_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (direct_ptr),hl + ret + +bmap_indirect: + ld hl,(indirect_ptr) + ld de,indirect_block+BUFSIZE + or a + sbc hl,de + jr c,bmap_indirect_already + + ld hl,(direct_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (direct_ptr),hl + + ld hl,indirect_block + ld (indirect_ptr),hl + call block_read + +bmap_indirect_already: + ld hl,(direct_ptr) + ld de,inode+24+DIRECTBLOCKS*2+INDIRECTBLOCKS*2+1 ; fudge! + or a + sbc hl,de + jr nc,bmap_dindirect + + ld hl,(indirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (indirect_ptr),hl + ret + +bmap_dindirect: + ld hl,(dindirect_ptr) + ld de,dindirect_block+BUFSIZE + or a + sbc hl,de + jr c,bmap_dindirect_already + + ld hl,(indirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (indirect_ptr),hl + + ld hl,dindirect_block + ld (dindirect_ptr),hl + call block_read + +bmap_dindirect_already: + ld hl,(dindirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (dindirect_ptr),hl + ret + +; ----------------------------------------------------------------------------- +; enter with hl -> buffer, de = inode number + +inode_read: + push hl + + ld a,e + and DINODESPERBLOCK-1 ; find inode position within disk block + + ld b,DINODESPERBLOCKLOG ; shift count to find which disk block +inode_shift: + srl d + rr e + djnz inode_shift ; leaves de = block (relative to itab) + + ld hl,(isize) + scf + sbc hl,de ; check if block is beyond end of table + jr c,bad_inode + + ld hl,(reserv) + add hl,de + ex de,hl ; adjust block for start of inode table + + ld hl,block + push af + push hl + call block_read + pop hl + pop de ; d = inode position within block + + ld bc,SIZEOF_DINODE_T + ld e,c + mlt de + add hl,de + pop de ; de -> user's buffer for disk inode + ldir ; copy it, freeing up block buffer + ret + +bad_inode: + call gmess + defb 'bad inode: ',0 + add a,'0' + call abyte + call amess + defb ', ',0 + ex de,hl + jp error_ahexw + +; ----------------------------------------------------------------------------- +; enter with hl -> buffer, de = block number + +block_read: + push hl + call block_xlate ; a:hl -> data in ramdrive + + push hl + pop iy + ld d,a ; d:iy -> data in ramdrive + + pop hl + ld e,3 ; e:hl -> user's buffer in seg 3: + jp copyr ; copy BUFSIZE bytes from d:iy to e:hl + +block_write: + push hl + call block_xlate ; a:hl -> data in ramdrive + + pop iy + ld d,3 ; d:iy -> user's buffer in seg 3: + + ld e,a ; e:hl -> data in ramdrive + jp copyr ; copy BUFSIZE bytes from d:iy to e:hl + +block_xlate: + ld hl,HD0_SIZE + scf + sbc hl,de ; check whether block no is in range + jr c,bad_block + + ld bc,BUFSIZE ; bytes to be copied for 1 block + + ld hl,HD0_START + add hl,de ; hl = block index (from start of ram) + + ld a,h + ld h,l + ld l,c ;0 ; a:hl = block index * 100h + + add hl,hl + adc a,a ; a:hl = block index * BUFSIZE (200h!!) + ret + +block_to_bbr: + ld a,(hl) + inc hl + ld d,(hl) ; d:a = block no. from start of disk + inc hl + + srl d + rra + srl d + rra + srl d + rra ; a = block / 8 (PAGE_BLOCKS = 8!!) + + add a,HD0_START/PAGE_BLOCKS-4 + ret + +bad_block: + call gmess + defb 'bad block: ',0 + ex de,hl + jp error_ahexw + +; ----------------------------------------------------------------------------- + +initial_boot: + ld hl,UZINAM + call LDFILE ; copy entire KERNEL.BIN data to c:0000 + ret z ; halt if the file could not be found + + call gmess + defb 'loading A:KERNEL.BIN',0dh,0ah,0 + + ld a,'1' + ld (argument_1+7),a ; so kernel will use /dev/hd1 as root + +loop: ld de,(LDMAX) + or a + sbc hl,de ; did we load an entire extent? + jr nz,done ; no, assume the file is fully loaded + + add hl,de ; restore hl = LDMAX + ld (LDPTR),hl ; load from where we finished last time + + ld a,l + or h ; did we wrap around to a new segment? + jr nz,cont + + ld hl,LDSEG + inc (hl) ; yes, need to advance segment counter + +cont: ld hl,4000h + add hl,de + ld (LDMAX),hl ; advance LDMAX to load 4000h bytes + + ld hl,LDEXT + inc (hl) ; advance extent counter to next extent + + ld hl,UZINAM + call LDFILE ; copy more CMX.BIN data to LDSEG:LDPTR + jr nz,loop + + ld hl,LDEXT + dec (hl) ; account for extent that wasn't found + +done: + call virtual_init ; modifies CBR (can't call EPROM now) + + ld iy,0 + ld hl,exe_header_buf + ld de,0c03h ; copy from c: to 3: + ld bc,exe_header_size + call copyr ; read the executable's header + + call check_e_magic ; ensure e_magic = E_MAGIC + call check_e_format ; ensure e_format = E_FORMAT_KERNEL + + call get_ca0_size ; returns bc = size, de = start of copy + push de + pop iy + + ld de,0c00h ; copy from c: to 0: + ld l,e + ld h,e ; destination = 0 (start of CA0 region) + call copyr ; returns iy advanced, d & e preserved + push de + + call get_ca1_size ; returns bc = size, de = start of copy + ld hl,4000h-8000h + add hl,de ; correct for the intended CBR = 4-8 + + pop de ; copy from c: to 0: + call copyr + + call get_udata_size_m1 ; returns bc = size-1, de = start+1 + call nc,clear_bc_p1_at_de_m1 ; if bc => 0, clear bc+1 bytes at de-1 + + call say_starting ; tell the user we have liftoff + + ld a,(LDEXT) + inc a ; do all pages, including the first + ld b,a ; how many extents were loaded ? (-1) + + ld hl,8080h ; initial spot in virt memory table + ld a,0c0h-4 ; bbr value to access 1st loaded page + +virtual_loop: + ld (hl),a ; map 16kbytes into virt memory space + inc hl + add a,4 + djnz virtual_loop + + jp kazumi + +; ----------------------------------------------------------------------------- + +$ diag.inc +$ copyr.inc +$ clears.inc + +; ----------------------------------------------------------------------------- + +parameters: defw 2 ; argc + defw arguments-parameters_end ; argv + defw environment-parameters_end ; envp +arguments: defw argument_0-parameters_end + defw argument_1-parameters_end + defw 0 ; terminates the argument list +argument_0: defb '/boot/kernel.bin',0 +argument_1: defb 'root=hd0',0 +environment: defw environment_0-parameters_end + defw 0 ; termninates the environment list +environment_0: defb 'SN=00000',0 +parameters_end: ; this will equal address 0 after parameters are copied + +name_boot: defb 'boot',0 +name_kernel_bin: defb 'kernel.bin',0 + + ; note: defb 1 is very important here, because if UZINAM ends + ; up on a 32 byte boundary, the KERNEL.BIN filename (extent 0) + ; may be seen by the initial_boot routine, preventing the + ; proper loading of /boot/kernel after formatting the ramdrive +UZINAM: defb 1,'KERNEL BIN' ; LDNAM +LDEXT: defb 0 ; LDEXT +LDSEG: defb 0ch ; LDSEG +LDPTR: defw 0 ; LDPTR +LDMAX: defw 4000h ; LDMAX + +; ----------------------------------------------------------------------------- + +final: ; initialised code and data ends here + +reserv: +isize equ reserv+2 +fsize equ isize+2 + +dir_name equ fsize+2 +size_remain equ dir_name+2 + +direct_ptr equ size_remain+4 +indirect_ptr equ direct_ptr+2 +dindirect_ptr equ indirect_ptr+2 + +inode equ dindirect_ptr+2 +block equ inode+SIZEOF_DINODE_T + +indirect_block equ block+BUFSIZE +dindirect_block equ indirect_block+BUFSIZE + + .if 1 ; new kernel format +directory_buf equ dindirect_block+BUFSIZE + +read_remain equ directory_buf+SIZEOF_DIRECT_T +read_remain_ptr equ read_remain+2 +read_user equ read_remain_ptr+2 +read_user_ptr equ read_user+2 +read_done equ read_user_ptr+2 + +exe_header_buf equ read_done+2 +e_magic equ exe_header_buf +e_format equ e_magic+2 +e_size equ e_format+2 +e_hsize equ e_size+4 +e_idata equ e_hsize+2 +e_entry equ e_idata+2 +e_udata equ e_entry+2 +e_stack equ e_udata+2 +e_break equ e_stack+2 +exe_header_size equ e_break+2-exe_header_buf + +region_ptr equ exe_header_buf+exe_header_size + .else +region_ptr equ dindirect_block+BUFSIZE + .endif +region_list equ region_ptr+2 + +; ----------------------------------------------------------------------------- + + END diff --git a/src/gboot/gboot.old b/src/gboot/gboot.old new file mode 100644 index 00000000..c6a807e3 --- /dev/null +++ b/src/gboot/gboot.old @@ -0,0 +1,1182 @@ +; gboot.asm +; Generic Hytech boot loader program to occupy 4 sectors at start of each disk + +$ io64180.inc + +LDFILE equ 0f037h ; BOOTLDR.BIN entry point + +SUPERBLOCK equ 4 ; starting position of filesystem +SMOUNTED equ 12742 ; random number to specify mounted fs +ROOTINODE equ 1 ; inode number of / for all mounted fs + +BUFSIZE equ 200h ; how many bytes per disk block +BUFSIZELOG equ 9 ; shift count representing the above + +SIZEOF_DINODE_T equ 64 ; how many bytes per disk inode +DINODESPERBLOCK equ 8 ; how many disk inodes per disk block +DINODESPERBLOCKLOG equ 3 ; shift count representing the above + +DIRECTBLOCKS equ 18 +INDIRECTBLOCKS equ 1 ; MUST BE 1! +DINDIRECTBLOCKS equ 1 ; MUST BE 1! + +SIZEOF_DIRECT_T equ 16 ; how many bytes per directory entry +DIRNAMELEN equ 14 ; how many bytes of these are dir name + +REGION_LOG equ 14 +REGION_BYTES equ (1<> 14) & 1 + defb ((800h-(final-start)) >> 14) & 2 + defb ((0c00h-(final-start)) >> 14) & 3 + defb 0,0,0,0,0,0,0,0,0,0,0,0 + +; ----------------------------------------------------------------------------- + +entry: + call gmess + defb 'loading /boot/kernel.bin',0dh,0ah,0 + + .if 1 ; new kernel format + call virtual_init ; modifies CBR (can't call EPROM now) + .endif + + ld de,SUPERBLOCK + ld hl,block + call block_read + + ld hl,(block) + ld de,SMOUNTED + or a + sbc hl,de + jp nz,black_magic + + ld hl,(block+2) + ld (reserv),hl + ld hl,(block+4) + ld (isize),hl + ld hl,(block+6) + ld (fsize),hl + + ld de,ROOTINODE + ld hl,name_boot + call dir_search ; returns de = the found inode + jr nz,bad_file + + ld hl,name_kernel_bin + call dir_search ; returns de = the found inode + jr nz,bad_file + + .if 1 ; new kernel format + call file_setup ; read inode and prepare to walk file + + ld hl,exe_header_buf + ld bc,exe_header_size + call file_read ; read first block, copy header to buf + jr c,bad_length + + call check_e_magic ; ensure e_magic = E_MAGIC + call check_e_format ; ensure e_format = E_FORMAT_KERNEL + + ld a,0-8 ; so that logical 8000 = phys 0:0000 + out0 (CBR),a + + call get_ca0_size ; returns bc = size, de = start of copy + ld hl,8000h ; destination = start of CA0 region + call file_read ; read CA0 data to common data segment + + ld a,4-8 ; so that logical 8000 = phys 0:4000 + out0 (CBR),a + + call get_ca1_size ; returns bc = size, de = start of copy + ex de,hl ; destination specified by file header + call file_read ; read CA1 data to kernel data segment + + call get_udata_size_m1 ; returns bc = size-1, de = start+1 + call nc,clear_bc_p1_at_de_m1 ; if bc => 0, clear bc+1 bytes at de-1 + .endif + + call file_scan ; scan file and construct block list + + .if 1 ; new kernel format + call say_starting ; tell the user we have liftoff + .else + call virtual_init ; modifies CBR (can't call EPROM now) + .endif + + ld bc,8080h ; initial spot in virt memory table + .if 1 ; new kernel format + ld hl,region_list ; -> block no. of 1st found region + .else + ld hl,region_list+2 ; -> block no. of 2nd found region + .endif + jr translate_loope + +translate_loop: + add hl,de ; restore hl value from comparison + + call block_to_bbr ; calculates a from word at hl (bumped) + ld (bc),a ; a = required bbr value to access page + inc bc + +translate_loope: + ld de,(region_ptr) ; indicates end of region list + or a + sbc hl,de ; see if we've gone past the end + jr c,translate_loop + + .if 0 ; new kernel format + ld hl,region_list ; there is at least one entry + call block_to_bbr ; a = required bbr value for init code + .endif + +kazumi: + .if 0 + ; please preserve a for entering kernel at label runsys! + .endif + ld sp,parameters-parameters_end ; stack just under copied params + + ld hl,parameters ; pre-initialised parameter block + ld de,parameters-parameters_end ; to fit neatly at top of memory + ld bc,parameters_end-parameters ; size in bytes to copy + ldir ; copy parameter block for kernel init + ; careful! b will be used again below!! + + .if 1 ; so as not to corrupt CBR when jumping to the loaded program + ld hl,runsys ; start of small stub program below + .if 1 ; new kernel format + ld de,(e_stack) ; load into base of stack region + .else + ld de,8100h ; -> just after virtual memory table + .endif + push de + ld c,runsys_end-runsys ; size of small stub program (b=0) + ldir ; copy stub program + .if 1 ; new kernel format + ld hl,(e_entry) ; information for the runsys stub + ld de,(e_break) ; information for the client program + .endif + ret ; enter stub program (jp 8100h) + .else + ld e,30h-8 + out0 (CBR),e ; window onto runsys (CBAR = 80h) + jp runsys+8000h ; run the remaining startup from window + .endif + +bad_file: + call gmess + defb 'file not found',0dh,0ah,0 + jr error_bomb + + .if 1 ; new kernel format +bad_length: + call gmess + defb 'file too short',0dh,0ah,0 + jr error_bomb + .endif + +runsys: + .if 1 ; new kernel format + ld a,84h + out0 (CBAR),a ; CA0 = 16k, bank area = 16k, CA1 = 32k + jp (hl) ; jump to entry address from exe header + .else + ld e,84h + out0 (CBAR),e ; CA0 = 16k, bank area = 16k, CA1 = 32k + + out0 (BBR),a ; bank area = logical 4000 = abs c:0000 + jp 4000h ; execute file from the 1st loaded page + .endif + .if 1 ; so as not to corrupt CBR when jumping to the loaded program +runsys_end: + .endif + +; ----------------------------------------------------------------------------- +; had some kind of fatal error, the entry points are to save code space + + .if 1 ; new kernel format +check_e_magic: + ld hl,(e_magic) + ld de,E_MAGIC_FIXME + or a + sbc hl,de + ret z + + call gmess + defb 'bad e_magic: ',0 + jr error_magic + +check_e_format: + ld hl,(e_format) + ld de,E_FORMAT_KERNEL + or a + sbc hl,de + ret z + + call gmess + defb 'bad e_format: ',0 + ; fall into error_magic + + .endif + +black_magic: + call gmess + defb 'bad magic: ',0 + +error_magic: + add hl,de + +error_ahexw: + call ahexw + +error_acrlf: + call acrlf + +error_bomb: + ; try not to surprise the user unnecessarily + call gmess + defb 'doing a clean boot',0dh,0ah,0 + + ; before erroring, prepare to clobber CP/M drive A: directory + ld hl,block + ld de,block+1 + ld bc,BUFSIZE-1 + ld (hl),0aah ; clobbering pattern + ldir ; initialise temporary buffer + + ; perform the clobbering (this ensures a clean boot from EPROM) + .if 1 + ld de,0 + ld b,4 +clobber_loop: + push bc + push de + + ld hl,block + call block_write + + pop de + pop bc + inc de + djnz clobber_loop + .else + ld de,304h + ld l,c + ld h,b ; ld hl,0 ; e:hl -> destination 4:0000 + + ld b,4 ; clobber until just before 4:0800 +clobber_loop: + push bc + + ld iy,block ; copy from d:iy -> destination + ld bc,BUFSIZE ; bytes to copy + call copyr ; copy them, one byte at a time + + pop bc + djnz clobber_loop + .endif + + ; ready to error, by instructing the WPO chip on motherboard + ld a,0aah + out0 (TRDR),A ; command byte to error the system + ld a,13h + out0 (CNTR),A ; TE=1, divisor = 3, start transmission + + ; wait for the error to occur, or else we're rather stuck + jr $ + +; ----------------------------------------------------------------------------- + +gmess: call amess + defb 'gboot: ',0 + jp amess + +rsel1: + .if 1 ; temporary only + ld de,2 ; save eprom serial no to 2:fc81 + call copy_serial_no + .endif + ld a,81h + out0 (TRDR),A ; command byte to set RSEL=1 + ld a,13h + out0 (CNTR),A ; TE=1, divisor = 3, start transmission + + sub a + dec a + jr nz,$-1 + dec a + jr nz,$-1 + dec a + jr nz,$-1 + dec a + jr nz,$-1 ; delay for command to be processed + .if 1 ; temporary only + ld de,200h ; restore eprom serial no from 2:fc81 +copy_serial_no: + ld hl,0fc81h + push hl + pop iy + ld bc,5 + jp copyr + .else + ret + .endif + + .if 1 ; new kernel format +say_starting: + call gmess + defb 'starting operating system',0dh,0ah,0 + ret +.endif + +virtual_init: + .if 0 ; new kernel format + call gmess + defb 'starting operating system',0dh,0ah,0 + .endif + + call rsel1 + + ld a,80h + out0 (CBAR),a ; CA0 = 0k, bank area = 32k, CA1 = 32k + + ld a,4-8 ;0 also works, see bstartup.s01 at label init + out0 (CBR),a ; window onto 0:8000, virt memory table + + .if 1 ; new kernel format + ld de,08001h ; address of virtual memory table+1 + ld bc,0ffh ; size of virtual memory table-1 + ; fall into clear_bc_p1_at_de_m1 + +clear_bc_p1_at_de_m1: + ld l,e + ld h,d + dec hl + ld (hl),0 + + ld a,c + or b + ret z + + ldir + ret + +de_min_hl_de: + ; enter with values in hl and de, returns de = min(hl, de) + or a + sbc hl,de + ret nc ; de is lesser + add hl,de ; hl was lesser, restore its value + ex de,hl ; and return the original hl in de + ret + +get_ca0_size: + ld hl,(e_hsize) ; variable size of header + ld de,exe_header_size ; subtract fixed size of header + jr calculate_size + +get_ca1_size: + ld hl,(e_udata) ; ending logical addr in CA1 region + ld de,(e_idata) ; starting logical addr in CA1 region + jr calculate_size + +get_udata_size_m1: + ld hl,(e_break) ; ending logical addr to be cleared + ld de,(e_udata) ; starting logical addr to be cleared + inc de ; special algorithm for correct cf + ; fall into calculate_size + +calculate_size: ; enter with hl = start addr, de = end + or a + sbc hl,de ; find the difference + ld c,l + ld b,h ; bc = bytes to load for region + ret + .else + ld hl,08000h + ld de,08001h + ld bc,0ffh + ld (hl),l ; 0 + ldir ; zero out the virtual memory table + ret + .endif + +; ----------------------------------------------------------------------------- + +dir_search: + ld (dir_name),hl + + .if 1 ; new kernel format + call file_setup ; read inode and prepare to walk file + +dir_search_loop: + ld bc,SIZEOF_DIRECT_T + ld hl,directory_buf + call file_read ; returns hl = preserved, cf set up + ret c ; also implies nz ; directory search failed (not found) + + inc hl + + ld de,(dir_name) + ld b,DIRNAMELEN + +dir_search_compare_loop: + inc hl + + ld a,(de) + cp (hl) + jr nz,dir_search_loop ; didn't match, go and read another + or a + jr z,dir_search_compare_good ; matched, and sentinel was reached + + inc de + djnz dir_search_compare_loop + + ; matched, and directory filename was of maximal length + ld a,(de) + or a + ; if user's filename is exactly maximum, return zf=1 (found) + ; if user's filename is longer than maximum, return zf=0 (not found) + +dir_search_compare_good: + ld de,(directory_buf) ; de = return value, inode number + ret ; with zf=1 from the comparisons above + .else + ld hl,inode + call inode_read ; read inode of the dir to be searched + + call bmap_setup ; prepare counters to walk the file + jr dir_search_loope + +dir_search_loop: + push hl ; h = count of entries in current block + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_dir_block ; hole in directory + + ld hl,block + push hl + call block_read + pop hl + pop bc ; b = count of entries in current block + +dir_search_entry_loop: + push hl + inc hl + + ld de,(dir_name) + ld c,DIRNAMELEN + +dir_search_compare_loop: + inc hl + + ld a,(de) + cp (hl) + jr nz,dir_search_compare_bad + or a + jr z,dir_search_compare_good + + inc de + dec c + jr nz,dir_search_compare_loop + + ; matched, and directory filename was of maximal length + ld a,(de) + or a + ; if user's filename is exactly maximum, return zf=1 (found) + ; if user's filename is longer than maximum, return zf=0 (not found) + +dir_search_compare_good: + pop hl + ld e,(hl) + inc hl + ld d,(hl) + ret + +dir_search_compare_bad: + pop hl + ld de,SIZEOF_DIRECT_T + add hl,de + djnz dir_search_entry_loop + +dir_search_loope: + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + add hl,hl + add hl,hl + add hl,hl + add hl,hl ; assumes SIZEOF_DIRECT_T = 16!! + + ld a,h ; a = valid bytes / SIZEOF_DIRECT_T + or a + jr nz,dir_search_loop + + inc a ; nz + ret + +bad_dir_block: + call gmess + defb 'hole in directory',0dh,0ah,0 + jp error_bomb + .endif + +; ----------------------------------------------------------------------------- + +file_scan: + ld hl,region_list + ld (region_ptr),hl + + .if 0 ; new kernel format + ld hl,inode + call inode_read ; read inode of the target file + .endif + + call bmap_setup ; prepare counters to walk the file + call bmap_remain ; get hl = valid bytes in first block + ; and decrement the file size remaining + ld a,l + or h ; any bytes in file? + jr z,bad_file_size ; no, abort proceedings + +file_scan_loop: + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block +; ld l,e +; ld h,d +; call ahexw + + ld a,e + and PAGE_BLOCKS-1 ; check it starts on a page boundary + jr nz,bad_alignment + + ld hl,(region_ptr) + ld (hl),e + inc hl + ld (hl),d ; stash away the starting block no. + inc hl + ld (region_ptr),hl ; for the current region (bumped) + + ld b,REGION_BLOCKS-1 + +file_region_loop: + push bc + push de + + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h + jr z,file_region_final + + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block +; ld a,' ' +; call abyte +; ld l,e +; ld h,d +; call ahexw + + ex de,hl ; hl = the actual block no. from file + pop de + inc de ; de = expected, contiguous block no. + + or a + sbc hl,de + jr nz,bad_alignment + + pop bc + djnz file_region_loop +; call acrlf + + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h ; anything left to read? + jr nz,file_scan_loop ; yes (scan is limited by file size) + ret ; last region is = REGION_BLOCKS blocks + +file_region_final: +; call acrlf + pop hl ; last region is < REGION_BLOCKS blocks + pop hl ; clean up saved variables, and done + ret + +bad_file_size: + call gmess + defb 'null file',0dh,0ah,0 + jp error_bomb + +bad_file_block: + call gmess + defb 'hole in file',0dh,0ah,0 + jp error_bomb + +bad_alignment: + call gmess + defb 'not aligned',0dh,0ah,0 + jp error_bomb + +; ----------------------------------------------------------------------------- + + .if 1 ; new kernel format +file_read: + ; enter with hl -> user buffer, bc = bytes to read (must be nonzero!!) + + push hl ; this will be preserved for caller + push bc ; this will be used to set cf on return + + ld (read_user),bc + ld (read_user_ptr),hl + + ld hl,0 + ld (read_done),hl + + ld hl,(read_remain) + ld a,l + or h ; got any leftover data in buffer? + jr nz,file_read_entry ; yes, use it first + +file_read_loop: + ; read a new block into the buffer, recording no. of valid bytes read + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h + jr z,file_read_done ; reached end of file + + ld (read_remain),hl + + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block ; hole in file + + ld hl,block + ld (read_remain_ptr),hl + call block_read + +file_read_entry: + ; satisfy as much as possible of user's request from current buffer + ld hl,(read_remain) ; bytes available + ld de,(read_user) ; bytes wanted + call de_min_hl_de ; de = amount to be processed this time + + ld hl,(read_remain) + or a + sbc hl,de + ld (read_remain),hl ; reduce bytes available by amount + + ld hl,(read_user) + or a + sbc hl,de + ld (read_user),hl ; reduce bytes wanted by amount + + ld hl,(read_done) + add hl,de + ld (read_done),hl ; increase bytes copied by amount + + ld c,e + ld b,d + ld de,(read_user_ptr) + ld hl,(read_remain_ptr) + ldir + ld (read_remain_ptr),hl + ld (read_user_ptr),de + + ; see if the user's entire request has now been processed + ld hl,(read_user) + ld a,l + or h + jr nz,file_read_loop ; no, get another block + +file_read_done: + ld hl,(read_done) ; indicates how much was really read + ld c,l + ld b,h ; bc = return value, how much was read + + pop de ; de = size of user's original request + or a + sbc hl,de ; set cf=1 if less than amount wanted + + pop hl ; hl preserved for convenience of user + ret + .endif + +; ----------------------------------------------------------------------------- + + .if 1 ; new kernel format +file_setup: + ; enter with de = inode number for file to be read + + ld hl,inode + call inode_read ; read inode of the dir to be searched + + ld hl,0 + ld (read_remain),hl ; forces a new data block to be loaded + ; fall into bmap_setup + .endif + +bmap_setup: + ld hl,(inode+8) + ld (size_remain),hl + ld hl,(inode+10) + ld (size_remain+2),hl + + ld hl,inode+24 + ld (direct_ptr),hl + ld hl,indirect_block+BUFSIZE + ld (indirect_ptr),hl + ld hl,dindirect_block+BUFSIZE + ld (dindirect_ptr),hl + ret + +bmap_remain: + ld hl,(size_remain) + ld de,(size_remain+2) + + ld bc,BUFSIZE + or a + sbc hl,bc + ex de,hl + ld b,0 ; ld bc,0 + sbc hl,bc + ex de,hl + jr c,bmap_remain_final + + ld (size_remain),hl + ld (size_remain+2),de + + ld hl,BUFSIZE + ret ; return a complete block of size hl + +bmap_remain_final: + ld hl,(size_remain) + ld (size_remain),bc ; 0 + ;ld (size_remain+2),bc ; 0 + ret ; return a partial block of size hl + +bmap_block: + ld hl,(direct_ptr) + ld de,inode+24+DIRECTBLOCKS*2 + or a + sbc hl,de + jr nc,bmap_indirect + + ld hl,(direct_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (direct_ptr),hl + ret + +bmap_indirect: + ld hl,(indirect_ptr) + ld de,indirect_block+BUFSIZE + or a + sbc hl,de + jr c,bmap_indirect_already + + ld hl,(direct_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (direct_ptr),hl + + ld hl,indirect_block + ld (indirect_ptr),hl + call block_read + +bmap_indirect_already: + ld hl,(direct_ptr) + ld de,inode+24+DIRECTBLOCKS*2+INDIRECTBLOCKS*2+1 ; fudge! + or a + sbc hl,de + jr nc,bmap_dindirect + + ld hl,(indirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (indirect_ptr),hl + ret + +bmap_dindirect: + ld hl,(dindirect_ptr) + ld de,dindirect_block+BUFSIZE + or a + sbc hl,de + jr c,bmap_dindirect_already + + ld hl,(indirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (indirect_ptr),hl + + ld hl,dindirect_block + ld (dindirect_ptr),hl + call block_read + +bmap_dindirect_already: + ld hl,(dindirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (dindirect_ptr),hl + ret + +; ----------------------------------------------------------------------------- +; enter with hl -> buffer, de = inode number + +inode_read: + push hl + + ld a,e + and DINODESPERBLOCK-1 ; find inode position within disk block + + ld b,DINODESPERBLOCKLOG ; shift count to find which disk block +inode_shift: + srl d + rr e + djnz inode_shift ; leaves de = block (relative to itab) + + ld hl,(isize) + scf + sbc hl,de ; check if block is beyond end of table + jr c,bad_inode + + ld hl,(reserv) + add hl,de + ex de,hl ; adjust block for start of inode table + + ld hl,block + push af + push hl + call block_read + pop hl + pop de ; d = inode position within block + + ld bc,SIZEOF_DINODE_T + ld e,c + mlt de + add hl,de + pop de ; de -> user's buffer for disk inode + ldir ; copy it, freeing up block buffer + ret + +bad_inode: + call gmess + defb 'bad inode: ',0 + add a,'0' + call abyte + call amess + defb ', ',0 + ex de,hl + jp error_ahexw + +; ----------------------------------------------------------------------------- +; enter with hl -> buffer, de = block number + +block_read: + push hl + call block_xlate ; a:hl -> data in ramdrive + + push hl + pop iy + ld d,a ; d:iy -> data in ramdrive + + pop hl + ld e,3 ; e:hl -> user's buffer in seg 3: + jp copyr ; copy BUFSIZE bytes from d:iy to e:hl + +block_write: + push hl + call block_xlate ; a:hl -> data in ramdrive + + pop iy + ld d,3 ; d:iy -> user's buffer in seg 3: + + ld e,a ; e:hl -> data in ramdrive + jp copyr ; copy BUFSIZE bytes from d:iy to e:hl + +block_xlate: + ld hl,HD0_SIZE + scf + sbc hl,de ; check whether block no is in range + jr c,bad_block + + ld bc,BUFSIZE ; bytes to be copied for 1 block + + ld hl,HD0_START + add hl,de ; hl = block index (from start of ram) + + ld a,h + ld h,l + ld l,c ;0 ; a:hl = block index * 100h + + add hl,hl + adc a,a ; a:hl = block index * BUFSIZE (200h!!) + ret + +block_to_bbr: + ld a,(hl) + inc hl + ld d,(hl) ; d:a = block no. from start of disk + inc hl + + srl d + rra + srl d + rra + srl d + rra ; a = block / 8 (PAGE_BLOCKS = 8!!) + + add a,HD0_START/PAGE_BLOCKS-4 + ret + +bad_block: + call gmess + defb 'bad block: ',0 + ex de,hl + jp error_ahexw + +; ----------------------------------------------------------------------------- + +initial_boot: + ld hl,UZINAM + call LDFILE ; copy entire KERNEL.BIN data to c:0000 + ret z ; halt if the file could not be found + + call gmess + defb 'loading A:KERNEL.BIN',0dh,0ah,0 + + ld a,'1' + ld (argument_1+7),a ; so kernel will use /dev/hd1 as root + +loop: ld de,(LDMAX) + or a + sbc hl,de ; did we load an entire extent? + jr nz,done ; no, assume the file is fully loaded + + add hl,de ; restore hl = LDMAX + ld (LDPTR),hl ; load from where we finished last time + + ld a,l + or h ; did we wrap around to a new segment? + jr nz,cont + + ld hl,LDSEG + inc (hl) ; yes, need to advance segment counter + +cont: ld hl,4000h + add hl,de + ld (LDMAX),hl ; advance LDMAX to load 4000h bytes + + ld hl,LDEXT + inc (hl) ; advance extent counter to next extent + + ld hl,UZINAM + call LDFILE ; copy more CMX.BIN data to LDSEG:LDPTR + jr nz,loop + + .if 1 ; virtual memory + ld hl,LDEXT + dec (hl) ; account for extent that wasn't found + .endif + +done: + .if 1 ; virtual memory + call virtual_init ; modifies CBR (can't call EPROM now) + + .if 1 ; new kernel format + ld iy,0 + ld hl,exe_header_buf + ld de,0c03h ; copy from c: to 3: + ld bc,exe_header_size + call copyr ; read the executable's header + + call check_e_magic ; ensure e_magic = E_MAGIC + call check_e_format ; ensure e_format = E_FORMAT_KERNEL + + call get_ca0_size ; returns bc = size, de = start of copy + push de + pop iy + + ld de,0c00h ; copy from c: to 0: + ld l,e + ld h,e ; destination = 0 (start of CA0 region) + call copyr ; returns iy advanced, d & e preserved + push de + + call get_ca1_size ; returns bc = size, de = start of copy + ld hl,4000h-8000h + add hl,de ; correct for the intended CBR = 4-8 + + pop de ; copy from c: to 0: + call copyr + + call get_udata_size_m1 ; returns bc = size-1, de = start+1 + call nc,clear_bc_p1_at_de_m1 ; if bc => 0, clear bc+1 bytes at de-1 + + call say_starting ; tell the user we have liftoff + .endif + + ld a,(LDEXT) + .if 1 ; new kernel format + inc a ; do all pages, including the first + .endif + ld b,a ; how many extents were loaded ? (-1) + + ld hl,8080h ; initial spot in virt memory table + .if 1 ; new kernel format + ld a,0c0h-4 ; bbr value to access 1st loaded page + .else + ld a,0c0h ; bbr value to access 2nd loaded page + .endif + +virtual_loop: + ld (hl),a ; map 16kbytes into virt memory space + inc hl + add a,4 + djnz virtual_loop + .else + call rsel1 ; select RAM for segments 0: and 1: + + ld a,80h + out0 (CBAR),a ; CA0 = 0k, bank area = 32k, CA1 = 32k + .endif + + .if 0 ; new kernel format + ld a,0c0h-4 ; bbr value to access 1st loaded page + .endif + jp kazumi + +; ----------------------------------------------------------------------------- + +$ diag.inc +$ copyr.inc +$ clears.inc + +; ----------------------------------------------------------------------------- + +parameters: defw 2 ; argc + defw arguments-parameters_end ; argv + defw environment-parameters_end ; envp +arguments: defw argument_0-parameters_end + defw argument_1-parameters_end + defw 0 ; terminates the argument list +argument_0: defb '/boot/kernel.bin',0 +argument_1: defb 'root=hd0',0 +environment: defw environment_0-parameters_end + defw 0 ; termninates the environment list +environment_0: defb 'SN=00000',0 +parameters_end: ; this will equal address 0 after parameters are copied + +name_boot: defb 'boot',0 +name_kernel_bin: defb 'kernel.bin',0 + + ; note: defb 1 is very important here, because if UZINAM ends + ; up on a 32 byte boundary, the KERNEL.BIN filename (extent 0) + ; may be seen by the initial_boot routine, preventing the + ; proper loading of /boot/kernel after formatting the ramdrive +UZINAM: defb 1,'KERNEL BIN' ; LDNAM +LDEXT: defb 0 ; LDEXT +LDSEG: defb 0ch ; LDSEG +LDPTR: defw 0 ; LDPTR +LDMAX: defw 4000h ; LDMAX + +; ----------------------------------------------------------------------------- + +final: ; initialised code and data ends here + +reserv: +isize equ reserv+2 +fsize equ isize+2 + +dir_name equ fsize+2 +size_remain equ dir_name+2 + +direct_ptr equ size_remain+4 +indirect_ptr equ direct_ptr+2 +dindirect_ptr equ indirect_ptr+2 + +inode equ dindirect_ptr+2 +block equ inode+SIZEOF_DINODE_T + +indirect_block equ block+BUFSIZE +dindirect_block equ indirect_block+BUFSIZE + + .if 1 ; new kernel format +directory_buf equ dindirect_block+BUFSIZE + +read_remain equ directory_buf+SIZEOF_DIRECT_T +read_remain_ptr equ read_remain+2 +read_user equ read_remain_ptr+2 +read_user_ptr equ read_user+2 +read_done equ read_user_ptr+2 + +exe_header_buf equ read_done+2 +e_magic equ exe_header_buf +e_format equ e_magic+2 +e_size equ e_format+2 +e_hsize equ e_size+4 +e_idata equ e_hsize+2 +e_entry equ e_idata+2 +e_udata equ e_entry+2 +e_stack equ e_udata+2 +e_break equ e_stack+2 +exe_header_size equ e_break+2-exe_header_buf + +region_ptr equ exe_header_buf+exe_header_size + .else +region_ptr equ dindirect_block+BUFSIZE + .endif +region_list equ region_ptr+2 + +; ----------------------------------------------------------------------------- + + END diff --git a/src/kernel/uzi/unix.h b/src/kernel/uzi/unix.h index 4ec9c3d3..d1c8f6bf 100644 --- a/src/kernel/uzi/unix.h +++ b/src/kernel/uzi/unix.h @@ -11,7 +11,7 @@ From UZI by Doug Braun and UZI280 by Stefan Nitschke. #define __UNIX_H #ifndef VAX /* Nick UZIX compatible */ -#include /* for mode_t and others */ +#include /* for mode_t and others */ #include /* for O_RDONLY and others */ #include /* for signal_t and others */ #include /* for info_t and others */ @@ -144,7 +144,8 @@ typedef long off_t; typedef uchar bool_t; /* boolean value */ typedef uint count_t; /* counter for anything */ typedef unsigned int mode_t; - +#endif /* HACK! */ +#ifndef BUFSIZE /* HACK! */ #define BUFSIZE 512 /* uzix buffer/block size */ #define BUFSIZELOG 9 /* uzix buffer/block size log2 */ #endif /* __TYPES_H Nick */ diff --git a/src/libc/c0b.asm b/src/libc/c0b.asm index 9e55b758..e609182b 100644 --- a/src/libc/c0b.asm +++ b/src/libc/c0b.asm @@ -15,7 +15,7 @@ $ io64180.s01 extern main ; vendor _main extern exit ; vendor _exit - extern l__DEFAULT ; e_hsize +; extern l__DEFAULT ; e_hsize extern s_RCODE ; e_idata extern s_UDATA0 ; e_udata extern s_CSTACK ; e_stack @@ -58,7 +58,7 @@ E_STACK_SIZE equ 1000h defw E_MAGIC ; e_magic defw E_FORMAT_BANKED ; e_format defd 12345678h ; e_size - defw l__DEFAULT ; e_hsize + defw 14h ;l__DEFAULT ; e_hsize defw s_RCODE ; e_idata defw __init ; e_entry defw s_UDATA0 ; e_udata diff --git a/src/libc/c0l.asm b/src/libc/c0l.asm index bc69b550..f0754f46 100644 --- a/src/libc/c0l.asm +++ b/src/libc/c0l.asm @@ -15,7 +15,7 @@ $ io64180.s01 extern main ; vendor _main extern exit ; vendor _exit - extern l__DEFAULT ; e_hsize +; extern l__DEFAULT ; e_hsize extern s_RCODE ; e_idata extern s_UDATA0 ; e_udata extern s_CSTACK ; e_stack @@ -58,7 +58,7 @@ E_STACK_SIZE equ 1000h defw E_MAGIC ; e_magic defw E_FORMAT_LARGE ; e_format defd 12345678h ; e_size - defw l__DEFAULT ; e_hsize + defw 14h ;l__DEFAULT ; e_hsize defw s_RCODE ; e_idata defw __init ; e_entry defw s_UDATA0 ; e_udata diff --git a/src/make.d/arch.mk b/src/make.d/arch.mk new file mode 100644 index 00000000..c2897ea0 --- /dev/null +++ b/src/make.d/arch.mk @@ -0,0 +1,12 @@ +# /uzi/src/make.d/arch.mk by Nick for Hytech NOS/UZI project + +# Enter with ARCH = the architecture currently being compiled (win, z80, etc) +# Enter with TOPSRCDIR = relative path to /uzi/src top level source directory + +# ----------------------------------------------------------------------------- + +include $(TOPMAKDIR)top_defs.mk +include $(TOPMAKDIR)top_gens.mk + +# ----------------------------------------------------------------------------- + diff --git a/src/make.d/host.mk b/src/make.d/host.mk new file mode 100644 index 00000000..0c10ec4b --- /dev/null +++ b/src/make.d/host.mk @@ -0,0 +1,23 @@ +# /uzi/src/make.d/host.mk by Nick for Hytech NOS/UZI project + +# Enter with TOPSRCDIR = relative path to current directory, which will be +# blank if the project is at the same level as this host.mk file, for example +# /uzi/src/simple has an "include ../make.d/host.mk" with TOPSRCDIR = blank + +# ----------------------------------------------------------------------------- + +TOPSRCDIR:= $(TOPSRCDIR)../ +TOPMAKDIR= $(TOPSRCDIR)make.d/ + +# ----------------------------------------------------------------------------- + +BUILD= build +ARCH= z80 +MODEL= banked + +HOST:= $(ARCH) + +include $(TOPMAKDIR)arch.mk + +# ----------------------------------------------------------------------------- + diff --git a/src/make.d/top_defs.mk b/src/make.d/top_defs.mk new file mode 100644 index 00000000..9981000d --- /dev/null +++ b/src/make.d/top_defs.mk @@ -0,0 +1,63 @@ +# /uzi/src/make.d/top_defs.mk by Nick for Hytech NOS/UZI project + +# Enter with TOPSRCDIR = relative path to /uzi/src top level source directory + +# ----------------------------------------------------------------------------- + +TOPDIR= $(TOPSRCDIR)../ +TOPBINDIR= $(TOPDIR)bin/ +TOPINCDIR= $(TOPDIR)include/ +TOPLIBDIR= $(TOPDIR)lib/ + +# ----------------------------------------------------------------------------- + +AR= ar +AS= as +CAT= cat +CC= cc +CP= cp -f +CPP= cpp +CPROTO= cproto +ECHO= echo +LD= ld +LN= ln -sf +MKDIR= mkdir -p +MV= mv -f +RM= rm -f +RMDIR= rmdir -p +SED= sed +TEE= tee +TEST= test + +ARFLAGS= +ASFLAGS= +CFLAGS= +CPPFLAGS= +LDFLAGS= +INCDIRS= $(TOPINCDIR) +LIBDIRS= $(TOPLIBDIR) +STDLIBS= + +ASMEXT= as +BINEXT= bin +EXEEXT= +IHXEXT= ihx +INTEXT= i +LBREXT= ar +LIBEXT= a +LNKEXT= ld +OBJEXT= o +TMPEXT= tmp + +BINOUT= $(TOPBINDIR) +EXEOUT= $(TOPBINDIR) +HDROUT= $(TOPINCDIR) +LIBOUT= $(TOPLIBDIR) +TMPOUT= $(BUILD:%=%/)$(ARCH:%=%/) + +# ----------------------------------------------------------------------------- + +include $(TOPMAKDIR)$(ARCH:%=%/)arch_defs.mk + +# ----------------------------------------------------------------------------- + diff --git a/src/make.d/top_gens.mk b/src/make.d/top_gens.mk new file mode 100644 index 00000000..69babed2 --- /dev/null +++ b/src/make.d/top_gens.mk @@ -0,0 +1,775 @@ +# /uzi/src/make.d/top_gens.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +APPEND= $(if $(strip $2), $(eval $(strip $1)+=$(strip $2))) +ASSIGN= $(if $(strip $2), $(eval $(strip $1)=$(strip $2))) +CANON= $(strip $(subst .,_,$1)) +CHOOSE= $(strip $(if $(strip $1), $1, $2)) + +define CLASS +$(strip \ + $(if \ + $(filter \ + all $(PHONIES), \ + $1 \ + ), \ + .phony, \ + $(if \ + $(filter \ + $(SUBDIRS), \ + $1 \ + ), \ + .d, \ + $(suffix \ + $1 \ + ) \ + ) \ + ) \ +) +endef + +GENERATE= $(call RECURSE, all,, $(OUTPUTS) $(SUBDIRS),,) + +define INHERIT +$(if \ + $(call \ + $1 \ + ),, \ + $(call \ + ASSIGN, \ + $1, \ + $(call \ + $2 \ + ) \ + ) \ +) +endef + +define INHERITS +$(foreach \ + VARIABLE, \ + $1, \ + $(call \ + INHERIT, \ + $(strip \ + $2 \ + )$(VARIABLE), \ + $(strip \ + $3 \ + )$(VARIABLE) \ + ) \ +) +endef + +# ----------------------------------------------------------------------------- + +define DEPENDS +$(if \ + $(call \ + $2 \ + ),, \ + $(call \ + ASSIGN, \ + $2, \ + $(call \ + GUESS$(call \ + CANON, \ + $(call \ + CLASS, \ + $1 \ + ) \ + ), \ + $1 \ + ) \ + ) \ +) \ +$(call \ + CHOOSE, \ + $(call \ + DERIVE$(call \ + CANON, \ + $(call \ + CLASS, \ + $1 \ + ) \ + ), \ + $(call \ + $2 \ + ) \ + ), \ + $(call \ + $2 \ + ) \ +) +endef + +define MUNGE +$(strip \ + $(filter \ + all %.all $(SUBDIRS), \ + $1 \ + ) \ + $(filter \ + %.c %.S %.hin %.h %.po %.txt, \ + $1 \ + ) \ + $(patsubst \ + %, \ + $(TMPOUT)%, \ + $(notdir \ + $(filter \ +%.$(ASMEXT) %.$(INTEXT) %.$(LBREXT) %.$(LNKEXT) %.$(OBJEXT) %.$(TMPEXT) \ +%.$(IHXEXT) %.l, \ + $1 \ + ) \ + ) \ + ) \ + $(patsubst \ + %, \ + $(BINOUT)%, \ + $(filter \ + %.$(BINEXT), \ + $1 \ + ) \ + ) \ + $(patsubst \ + %, \ + $(LIBOUT)%, \ + $(filter \ + %.$(LIBEXT), \ + $1 \ + ) \ + ) \ + $(patsubst \ + %, \ + $(EXEOUT)%, \ + $(strip \ + $(filter-out \ + all $(PHONIES) $(SUBDIRS) \ + %.c %.S %.hin %.h %.po %.txt \ +%.$(ASMEXT) %.$(INTEXT) %.$(LBREXT) %.$(LNKEXT) %.$(OBJEXT) %.$(TMPEXT) \ +%.$(IHXEXT) %.$(BINEXT) %.$(LIBEXT) %.l, \ + $1 \ + ) \ + ) \ + ) \ +) +endef + +define RECURSE +$(call \ + INHERITS, \ +ARFLAGS ASFLAGS CFLAGS CPPFLAGS LDFLAGS DEFINES INCDIRS LIBDIRS STDLIBS, \ + $(call \ + CANON, \ + $1 \ + )_, \ + $2 \ +) \ +$(if \ + $5, \ + $(call \ + APPEND, \ + $(call \ + CANON, \ + $1 \ + )_DEFINES, \ + $5 \ + ) \ +) \ +$(eval \ + $(call \ + TEMPLATE$(call \ + CANON, \ + $(call \ + CLASS, \ + $1 \ + ) \ + ), \ + $1, \ + $(strip \ + $3 $4 \ + ) \ + ) \ +) \ +$(foreach \ + SOURCE, \ + $3, \ + $(if \ + $(call \ + $(call \ + CANON, \ + $(SOURCE) \ + )_CLIENTS \ + ), \ + $(call \ + APPEND, \ + $(call \ + CANON, \ + $(SOURCE) \ + )_CLIENTS, \ + $1 \ + ), \ + $(call \ + ASSIGN, \ + $(call \ + CANON, \ + $(SOURCE) \ + )_CLIENTS, \ + $1 \ + ) \ + $(call \ + RECURSE, \ + $(SOURCE), \ + $(call \ + CANON, \ + $1 \ + )_, \ + $(if \ + $(call \ + $(call \ + CANON, \ + $(SOURCE) \ + )_MODSRCS \ + ),, \ + $(call \ + DEPENDS, \ + $(SOURCE), \ + $(call \ + CANON, \ + $(SOURCE) \ + )_SOURCES \ + ) \ + ), \ + $(call \ + $(call \ + CANON, \ + $(SOURCE) \ + )_MODSRCS \ + ), \ + $(call \ + $(call \ + CANON, \ + $(SOURCE) \ + )_MODDEFS \ + ) \ + ) \ + ) \ +) +endef + +# ----------------------------------------------------------------------------- + +define DERIVE +$(foreach \ + DEPEND, \ + $1, \ + $(if \ + $(call \ + $(call \ + CANON, \ + $(DEPEND) \ + )_MODULES \ + ), \ + $(foreach \ + MODULE, \ + $(call \ + $(call \ + CANON, \ + $(DEPEND) \ + )_MODULES \ + ), \ + $(MODULE).$(OBJEXT) \ + $(call \ + ASSIGN, \ + $(call \ + CANON, \ + $(MODULE).$(OBJEXT) \ + )_MODSRCS, \ + $(DEPEND) \ + $(filter \ + %.h %.hin, \ + $1 \ + ) \ + ) \ + $(call \ + ASSIGN, \ + $(call \ + CANON, \ + $(MODULE).$(OBJEXT) \ + )_MODDEFS, \ + MODULE MODULE_$(MODULE) \ + ) \ + ), \ + $(patsubst \ + %.c, \ + %.$(OBJEXT), \ + $(patsubst \ + %.S, \ + %.$(OBJEXT), \ + $(DEPEND) \ + ) \ + ) \ + ) \ +) +endef + +define GUESS +$(firstword \ + $(wildcard \ + $(call \ + MUNGE, \ + $(1:%$(EXEEXT)=%.c) \ + ) \ + $(call \ + MUNGE, \ + $(1:%$(EXEEXT)=%.S) \ + ) \ + $(call \ + MUNGE, \ + $(1:%$(EXEEXT)=%.$(OBJEXT)) \ + ) \ + ) \ +) +endef + +# ----------------------------------------------------------------------------- + +define DERIVE_$(BINEXT) +$(foreach \ + DEPEND, \ + $1, \ + $(if \ + $(call \ + $(call \ + CANON, \ + $(DEPEND) \ + )_MODULES \ + ), \ + $(foreach \ + MODULE, \ + $(call \ + $(call \ + CANON, \ + $(DEPEND) \ + )_MODULES \ + ), \ + $(MODULE).$(OBJEXT) \ + $(call \ + ASSIGN, \ + $(call \ + CANON, \ + $(MODULE).$(OBJEXT) \ + )_MODSRCS, \ + $(DEPEND) \ + $(filter \ + %.h %.hin, \ + $1 \ + ) \ + ) \ + $(call \ + ASSIGN, \ + $(call \ + CANON, \ + $(MODULE).$(OBJEXT) \ + )_MODDEFS, \ + MODULE MODULE_$(MODULE) \ + ) \ + ), \ + $(patsubst \ + %.c, \ + %.$(OBJEXT), \ + $(patsubst \ + %.S, \ + %.$(OBJEXT), \ + $(DEPEND) \ + ) \ + ) \ + ) \ +) +endef + +define GUESS_$(BINEXT) +$(firstword \ + $(wildcard \ + $(call \ + MUNGE, \ + $(1:%.$(BINEXT)=%.c) \ + ) \ + $(call \ + MUNGE, \ + $(1:%.$(BINEXT)=%.S) \ + ) \ + $(call \ + MUNGE, \ + $(1:%.$(BINEXT)=%.$(OBJEXT)) \ + ) \ + ) \ +) +endef + +# ----------------------------------------------------------------------------- + +define GUESS_$(INTEXT) +$(firstword \ + $(wildcard \ + $(call \ + MUNGE, \ + $(1:%.$(INTEXT)=%.c) \ + ) \ + $(call \ + MUNGE, \ + $(1:%.$(INTEXT)=%.S) \ + ) \ + $(call \ + MUNGE, \ + $(1:%.$(INTEXT)=%.$(INTEXT)) \ + ) \ + ) \ +) \ +$(firstword \ + $(wildcard \ + $(call \ + MUNGE, \ + $(1:%.$(INTEXT)=%.hin) \ + ) \ + $(call \ + MUNGE, \ + $(1:%.$(INTEXT)=%.h) \ + ) \ + ) \ +) +endef + +define TEMPLATE_$(INTEXT) +$(foreach \ + SOURCE, \ + $(filter \ + %.c, \ + $2 \ + ), \ + $(call \ + TEMPLATE_$(INTEXT)_c, \ + $1, \ + $(SOURCE), \ + $(filter-out \ + $(SOURCE), \ + $2 \ + ) \ + ) \ +) \ +$(foreach \ + SOURCE, \ + $(filter \ + %.S, \ + $2 \ + ), \ + $(call \ + TEMPLATE_$(INTEXT)_S, \ + $1, \ + $(SOURCE), \ + $(filter-out \ + $(SOURCE), \ + $2 \ + ) \ + ) \ +) +endef + +define TEMPLATE_$(INTEXT)_c + +$(call MUNGE, $1): $(strip $(call MUNGE, $2) $(call MUNGE, $3)) +$(if $(TMPOUT), $(TEST) -d $(TMPOUT) || $(MKDIR) $(TMPOUT)) + $(CPP) $(strip $($(call CANON, $1)_CPPFLAGS) \ +$(foreach DEFINE, $($(call CANON, $1)_DEFINES), -D$(DEFINE)) \ +$(foreach INCDIR, $($(call CANON, $1)_INCDIRS), -I$(INCDIR))) \ +$(call MUNGE, $2) $(call MUNGE, $1) + +endef + +define TEMPLATE_$(INTEXT)_S + +$(call MUNGE, $1): $(strip $(call MUNGE, $2) $(call MUNGE, $3)) +$(if $(TMPOUT), $(TEST) -d $(TMPOUT) || $(MKDIR) $(TMPOUT)) + $(CPP) $(strip $($(call CANON, $1)_CPPFLAGS) \ +$(foreach DEFINE, $($(call CANON, $1)_DEFINES), -D$(DEFINE)) \ +$(foreach INCDIR, $($(call CANON, $1)_INCDIRS), -I$(INCDIR))) \ +$(call MUNGE, $2) $(call MUNGE, $1) + +endef + +# ----------------------------------------------------------------------------- + +define DERIVE_$(LIBEXT) +$(foreach \ + DEPEND, \ + $1, \ + $(if \ + $(call \ + $(call \ + CANON, \ + $(DEPEND) \ + )_MODULES \ + ), \ + $(foreach \ + MODULE, \ + $(call \ + $(call \ + CANON, \ + $(DEPEND) \ + )_MODULES \ + ), \ + $(MODULE).$(OBJEXT) \ + $(call \ + ASSIGN, \ + $(call \ + CANON, \ + $(MODULE).$(OBJEXT) \ + )_MODSRCS, \ + $(DEPEND) \ + $(filter \ + %.h %.hin, \ + $1 \ + ) \ + ) \ + $(call \ + ASSIGN, \ + $(call \ + CANON, \ + $(MODULE).$(OBJEXT) \ + )_MODDEFS, \ + MODULE MODULE_$(MODULE) \ + ) \ + ), \ + $(patsubst \ + %.c, \ + %.$(OBJEXT), \ + $(patsubst \ + %.S, \ + %.$(OBJEXT), \ + $(DEPEND) \ + ) \ + ) \ + ) \ +) +endef + +define GUESS_$(LIBEXT) +$(firstword \ + $(wildcard \ + $(call \ + MUNGE, \ + $(1:%.$(LIBEXT)=%.c) \ + ) \ + $(call \ + MUNGE, \ + $(1:%.$(LIBEXT)=%.S) \ + ) \ + $(call \ + MUNGE, \ + $(1:%.$(LIBEXT)=%.$(OBJEXT)) \ + ) \ + ) \ +) +endef + +# ----------------------------------------------------------------------------- + +define DERIVE_$(OBJEXT) +$(patsubst \ + %.hin, \ + %.h, \ + $1 \ +) +endef + +define GUESS_$(OBJEXT) +$(firstword \ + $(wildcard \ + $(call \ + MUNGE, \ + $(1:%.$(OBJEXT)=%.c) \ + ) \ + $(call \ + MUNGE, \ + $(1:%.$(OBJEXT)=%.S) \ + ) \ + $(call \ + MUNGE, \ + $(1:%.$(OBJEXT)=%.$(OBJEXT)) \ + ) \ + ) \ +) \ +$(firstword \ + $(wildcard \ + $(call \ + MUNGE, \ + $(1:%.$(OBJEXT)=%.hin) \ + ) \ + $(call \ + MUNGE, \ + $(1:%.$(OBJEXT)=%.h) \ + ) \ + ) \ +) +endef + +define TEMPLATE_$(OBJEXT) +$(foreach \ + SOURCE, \ + $(filter \ + %.c, \ + $2 \ + ), \ + $(call \ + TEMPLATE_$(OBJEXT)_c, \ + $1, \ + $(SOURCE), \ + $(filter-out \ + $(SOURCE), \ + $2 \ + ) \ + ) \ +) \ +$(foreach \ + SOURCE, \ + $(filter \ + %.S, \ + $2 \ + ), \ + $(call \ + TEMPLATE_$(OBJEXT)_S, \ + $1, \ + $(SOURCE), \ + $(filter-out \ + $(SOURCE), \ + $2 \ + ) \ + ) \ +) +endef + +# ----------------------------------------------------------------------------- + +define TEMPLATE_d + +$(call MUNGE, $1): $(call MUNGE, $2) + +$(MAKE) -C $(call MUNGE, $1) + +.PHONY: $(call MUNGE, $1) + +endef + +# ----------------------------------------------------------------------------- + +define GUESS_h +$(firstword \ + $(wildcard \ + $(call \ + MUNGE, \ + $(1:%.h=%.c) \ + ) \ + ) \ +) +$(firstword \ + $(wildcard \ + $(call \ + MUNGE, \ + $(1:%.h=%.hin) \ + ) \ + ) \ +) +endef + +define TEMPLATE_h + +$(call MUNGE, $1): $(call MUNGE, $2) +$(if $(TMPOUT), $(TEST) -d $(TMPOUT) || $(MKDIR) $(TMPOUT)) + ( \ +echo "/* $(strip $1) generated from $(strip $2) */"; \ +echo "/* please do not edit this file, edit the source files instead */"; \ +echo ""; \ +echo -n "#ifndef __"; \ +echo "$(strip $1)" | \ + $(SED) -e "y/abcdefghijklmnopqrstuvwxyz./ABCDEFGHIJKLMNOPQRSTUVWXYZ_/"; \ +echo -n "#define __"; \ +echo "$(strip $1)" | \ + $(SED) -e "y/abcdefghijklmnopqrstuvwxyz./ABCDEFGHIJKLMNOPQRSTUVWXYZ_/"; \ +echo ""; \ +echo -n "/* -------------------------------------"; \ +echo "------------------------------------ */"; \ +( \ +$(foreach HINDEP, $(filter %.hin, $2), $(CAT) $(call MUNGE, $(HINDEP));) \ +) | $(TEE) $(call MUNGE, $1); \ +$(CPROTO) -E "$(CPP) $(strip $($(call CANON, $1)_CPPFLAGS) \ +$(foreach DEFINE, $($(call CANON, $1)_DEFINES), -D$(DEFINE)) \ +$(foreach INCDIR, $($(call CANON, $1)_INCDIRS), -I$(INCDIR)))" \ +$(call MUNGE, $(filter %.c, $2)); \ +echo ""; \ +echo -n "/* -------------------------------------"; \ +echo "------------------------------------ */"; \ +echo ""; \ +echo -n "#endif /* __"; \ +echo -n "$(strip $1)" | \ + $(SED) -e "y/abcdefghijklmnopqrstuvwxyz./ABCDEFGHIJKLMNOPQRSTUVWXYZ_/"; \ +echo " */"; \ +echo ""; ) > $(call MUNGE, cproto.tmp) + $(MV) $(call MUNGE, cproto.tmp) $(call MUNGE, $1) + +endef + +# ----------------------------------------------------------------------------- + +define DERIVE_po +$(patsubst \ + %.c, \ + %.i, \ + $1 \ +) +endef + +define GUESS_po +$(firstword \ + $(wildcard \ + $(call \ + MUNGE, \ + $(1:%.po=%.c) \ + ) \ + $(call \ + MUNGE, \ + $(1:%.po=%.S) \ + ) \ + ) \ +) +endef + +define TEMPLATE_po + +$(call MUNGE, $1): $(call MUNGE, $2) +$(if $(TMPOUT), $(TEST) -d $(TMPOUT) || $(MKDIR) $(TMPOUT)) + ( \ +$(foreach INTDEP, \ + $(filter %.$(INTEXT), $2), $(ECHO) "c2po $(call MUNGE, $(INTDEP))";) \ +) > $(call MUNGE, $(1:%.po=%.txt)) + restool $(call MUNGE, $(1:%.po=%.txt)) $(call MUNGE, $1) \ +$(HDROUT)po/$(1:%.po=%.h) $(NOSLIBDIR)$(1:%.po=%.$(LIBEXT)) + +endef + +# ----------------------------------------------------------------------------- + +define TEMPLATE_phony + +$(call MUNGE, $1): $(call MUNGE, $2) + +.PHONY: $(call MUNGE, $1) + +endef + +# ----------------------------------------------------------------------------- + +include $(TOPMAKDIR)$(ARCH:%=%/)arch_gens.mk + +# ----------------------------------------------------------------------------- + diff --git a/src/make.d/z80/arch_defs.mk b/src/make.d/z80/arch_defs.mk new file mode 100644 index 00000000..4f357c6b --- /dev/null +++ b/src/make.d/z80/arch_defs.mk @@ -0,0 +1,27 @@ +# /uzi/src/make.d/z80/arch_defs.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +AR= lib-z80 +AS= as-z80 +CC= iccz80 +CPP= tradcpp +LD= link-z80 +LN= $(CP) + +ASFLAGS+= -l -o -z +CFLAGS+= -A -v1 -mb +LDFLAGS+= -i -m -u -z +STDLIBS+= crt_$(MODEL).$(LIBEXT) iar.$(LIBEXT) + +ASMEXT= asm +IHXEXT= i86 +LBREXT= lbr +LIBEXT= lib +LNKEXT= lnk +OBJEXT= rel + +TMPOUT= $(BUILD:%=%/)$(ARCH:%=%/)$(MODEL:%=%/) + +# ----------------------------------------------------------------------------- + diff --git a/src/make.d/z80/arch_gens.mk b/src/make.d/z80/arch_gens.mk new file mode 100644 index 00000000..2e5f718b --- /dev/null +++ b/src/make.d/z80/arch_gens.mk @@ -0,0 +1,105 @@ +# /uzi/src/make.d/z80/arch_gens.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +define TEMPLATE + +$(call MUNGE, $(1:%=%$(EXEEXT))): $(call MUNGE, $(filter-out %.h, $2)) +$(if $(EXEOUT), $(TEST) -d $(EXEOUT) || $(MKDIR) $(EXEOUT)) + ( \ +$(foreach LIBDIR, $(LIBDIRS), $(ECHO) "-k $(LIBDIR)";) \ +$(foreach LIBDEP, $(filter %.$(LIBEXT), $2), $(ECHO) "-l $(LIBDEP)";) \ +$(foreach STDLIB, $(STDLIBS), $(ECHO) "-l $(STDLIB)";) \ +$(ECHO) "-o $(call MUNGE, $(1:%=%.$(IHXEXT)))"; \ +$(ECHO) "-bl RCODE=0x1100"; \ +$(ECHO) "-bl CODE=0xf000,0x10000"; \ +$(ECHO) "-bc CODE=0x1000"; \ +$(ECHO) "-w"; \ +$(ECHO) "$(TOPLIBDIR)c0b"; \ +$(foreach OBJDEP, \ + $(filter %.$(OBJEXT), $2), $(ECHO) "$(call MUNGE, $(OBJDEP))";) \ +) > $(call MUNGE, $(1:%=%.$(LNKEXT))) + $(LD) $(strip $($(call CANON, $1)_LDFLAGS) -f) \ +$(call MUNGE, $(1:%=%.$(LNKEXT))) + ihex2bin $(call MUNGE, $(1:%=%.$(IHXEXT))) \ +$(call MUNGE, $(1:%=%(EXEEXT))) + +endef + +# ----------------------------------------------------------------------------- + +define TEMPLATE_$(BINEXT) + +$(call MUNGE, $1): $(call MUNGE, $(filter-out %.h, $2)) +$(if $(BINOUT), $(TEST) -d $(BINOUT) || $(MKDIR) $(BINOUT)) + ( \ +$(foreach LIBDIR, $(LIBDIRS), $(ECHO) "-k $(LIBDIR)";) \ +$(foreach LIBDEP, $(filter %.$(LIBEXT), $2), $(ECHO) "-l $(LIBDEP)";) \ +$(foreach STDLIB, $(STDLIBS), $(ECHO) "-l $(STDLIB)";) \ +$(ECHO) "-o $(call MUNGE, $(1:%.$(BINEXT)=%.$(IHXEXT)))"; \ +$(ECHO) "-bl RCODE=0"; \ +$(ECHO) "-bl ICODE=0x1100"; \ +$(ECHO) "-bl CODE=0x80f000,0x10000"; \ +$(ECHO) "-bc CODE=0x1000"; \ +$(ECHO) "-w"; \ +$(foreach OBJDEP, \ + $(filter %.$(OBJEXT), $2), $(ECHO) "$(call MUNGE, $(OBJDEP))";) \ +) > $(call MUNGE, $(1:%.$(BINEXT)=%.$(LNKEXT))) + $(LD) $(strip $($(call CANON, $1)_LDFLAGS) -f) \ +$(call MUNGE, $(1:%.$(BINEXT)=%.$(LNKEXT))) + ihex2bin $(call MUNGE, $(1:%.$(BINEXT)=%.$(IHXEXT))) $(call MUNGE, $1) + +endef + +# ----------------------------------------------------------------------------- + +define TEMPLATE_$(LIBEXT) + +$(call MUNGE, $1): $(call MUNGE, $(filter-out %.h, $2)) +$(if $(LIBOUT), $(TEST) -d $(LIBOUT) || $(MKDIR) $(LIBOUT)) + ( \ +$(ECHO) "-o $(call MUNGE, $1)"; \ +$(foreach OBJDEP, \ + $(filter %.$(OBJEXT), $2), $(ECHO) "$(call MUNGE, $(OBJDEP))";) \ +) > $(call MUNGE, $(1:%.$(LIBEXT)=%.$(LBREXT))) + $(AR) $(strip $($(call CANON, $1)_ARFLAGS) -f) \ +$(call MUNGE, $(1:%.$(LIBEXT)=%.$(LBREXT))) + +endef + +# ----------------------------------------------------------------------------- + +define TEMPLATE_$(OBJEXT)_c + +$(call MUNGE, $1): $(strip $(call MUNGE, $2) $(call MUNGE, $3)) +$(if $(TMPOUT), $(TEST) -d $(TMPOUT) || $(MKDIR) $(TMPOUT)) + $(CPP) $(strip $($(call CANON, $1)_CPPFLAGS) \ +$(foreach DEFINE, $($(call CANON, $1)_DEFINES), -D$(DEFINE)) \ +$(foreach INCDIR, $($(call CANON, $1)_INCDIRS), -I$(INCDIR))) \ +$(call MUNGE, $2) $(call MUNGE, $(1:%.$(OBJEXT)=%.$(INTEXT))) + po2c ../po/messages.po $(call MUNGE, $(1:%.$(OBJEXT)=%.$(INTEXT))) + $(CC) $($(call CANON, $1)_CFLAGS) \ +$(call MUNGE, $(1:%.$(OBJEXT)=%.l)) + $(RM) $(strip $(patsubst %.$(OBJEXT), %.r01, $(call MUNGE, $1))) + $(MV) $(strip $(patsubst %.$(OBJEXT), %.s01, $(call MUNGE, $1))) \ +$(call MUNGE, $(1:%.$(OBJEXT)=%.$(ASMEXT))) + $(AS) $(strip $($(call CANON, $1)_ASFLAGS) -u) \ +$(call MUNGE, $(1:%.$(OBJEXT)=%.$(ASMEXT))) + +endef + +define TEMPLATE_$(OBJEXT)_S + +$(call MUNGE, $1): $(strip $(call MUNGE, $2) $(call MUNGE, $3)) +$(if $(TMPOUT), $(TEST) -d $(TMPOUT) || $(MKDIR) $(TMPOUT)) + $(CPP) $(strip $($(call CANON, $1)_CPPFLAGS) \ +$(foreach DEFINE, $($(call CANON, $1)_DEFINES), -D$(DEFINE)) \ +$(foreach INCDIR, $($(call CANON, $1)_INCDIRS), -I$(INCDIR))) \ +$(call MUNGE, $2) $(call MUNGE, $(1:%.$(OBJEXT)=%.$(ASMEXT))) + $(AS) $($(call CANON, $1)_ASFLAGS) \ +$(call MUNGE, $(1:%.$(OBJEXT)=%.$(ASMEXT))) + +endef + +# ----------------------------------------------------------------------------- + diff --git a/src/mkfont/bmp2txt.cpp b/src/mkfont/bmp2txt.cpp index 73d10004..34a1592a 100644 --- a/src/mkfont/bmp2txt.cpp +++ b/src/mkfont/bmp2txt.cpp @@ -12,7 +12,7 @@ #define DEBUG 0 #endif -#include "hymb.h" +#include "hymem.h" #include "hyfs.h" #include "hyfile.h" #include "hyimage.h" @@ -160,7 +160,7 @@ static int fiProcess(FILETAG *pftOut, BMPTAG *pbtIn) int cx, cy; int iCurrent, iState, iSample, iOffset; int *piTotal, *piRow, *piColumn; - MBHANDLE mbhTotal, mbhRow, mbhColumn; + MEMTAG mtTotal, mtRow, mtColumn; char *pc; cx = pbtIn->pbih->biWidth; @@ -176,12 +176,12 @@ static int fiProcess(FILETAG *pftOut, BMPTAG *pbtIn) #endif // prepare to find total of black values per pixel row - MBAlloc(&mbhTotal, cy * sizeof(int)); - piTotal = (int *)mbhTotal.pcBase; + MemAlloc(&mtTotal, cy * sizeof(int)); + piTotal = (int *)mtTotal.pcBase; // prepare to find row indices of the character lines - MBAlloc(&mbhRow, (cy + 1) * sizeof(int)); - piRow = (int *)mbhRow.pcBase; + MemAlloc(&mtRow, (cy + 1) * sizeof(int)); + piRow = (int *)mtRow.pcBase; // find blackness of each row and divide into character lines r = 0; @@ -217,8 +217,8 @@ static int fiProcess(FILETAG *pftOut, BMPTAG *pbtIn) } // prepare to find column indices of individual characters - MBAlloc(&mbhColumn, (cx + 1) * sizeof(int)); - piColumn = (int *)mbhColumn.pcBase; + MemAlloc(&mtColumn, (cx + 1) * sizeof(int)); + piColumn = (int *)mtColumn.pcBase; // loop through the character lines found pc = pftOut->pcBase; @@ -346,9 +346,9 @@ static int fiProcess(FILETAG *pftOut, BMPTAG *pbtIn) } - MBFree(&mbhColumn); - MBFree(&mbhRow); - MBFree(&mbhTotal); + MemFree(&mtColumn); + MemFree(&mtRow); + MemFree(&mtTotal); pftOut->pcAppend = pc; diff --git a/src/mkfont/bmp2txt.exe b/src/mkfont/bmp2txt.exe index 017ab5711be49e21bce0339941d202573d9595e1..62678d207d8a86fbdcd64db96d6c2ff18cc379c5 100644 GIT binary patch delta 26257 zcmdtLe_WK+_CNZ}FyN?zGbku3$e@rv@CVE=!@$h&Lm9-B8bm-;P!bFgm0-qSsRIoZ z!{e0p*vZP%(X@_rtSmi7Wd%ZlWo2chsfA^I9vUkwQ!H}sd+h%Q*&>+)*< zc=ldlWmo76NGJ&FvTtjcS=r`5-v>GEsY5< zY?I()TjVI=q(rVS@9k?$7zxQOe`=0fGPSCt*jCJO=LVw!IQlvoA|0i#EJ2YPMb^F) zN&jCe$2Ct~?rVCH=mkBjX{Ask9W`XvAQXWzR#bEFerZjhl!=+5f_5!p?E}Z zN)g>T0#Q9xd_5G=NhKl|<-SNl6rn)$xf#)-a72}(5WSUvC?*V1fF99dYC9qj(a>N- z?_nriZ$%?|Fb2^=jJj(>yaRCw;ff!Fh$CE&3`f+QjOZuA@Vyby8tSQ(usX&fdTJOV z6M^i|BFZF+<`c+f>aLA?T1}*K)bZ08aMuL_d6$MXiiUZehIt7fXDhp6lt5%Y}((N4-O1crlYqh?ElnxTOj{)X48wER&h4BlW(aQ$El^ELo<0 zfmz+|CWduvFC!Sxqx%q)ZJ|aBSR*;8DP)bhsS)qqtDsh8y9mUPEMx}{4_?GDD0ufi zs-jVgox;7r6UTRhJpK_PbuM2|l~z7Wo-H>0#@OM0gb0``9u(dU4tE^jEebv}n9r8G za`*C%lX_(uH1d7a4YI%kl<{0ZpU2lv%X48hs(0F-Es~UT)U-{ z63hUfyI1*Q_5@dM8`?QViObUD8OUcfIlCk-#G9Hp<(4A^nyYZ|mbRGb6I_-yKC8`@ zb+X-ZijcHhnkhl6+-B!di7U66w=^3q2R3E2TekPrWNml00N-|C;Vs*Z)76{CQ{UNP zyyc|!c%wpEd)W(6KKGR0hpyaHD0Mc2l#`yfJmP`kxJe4ue!jyRj8F3S-<>xePyoYMV(ACZ0p z9rJUx%3N9d`#uy~U0J*OxWwn~cjXdmElq4_O`zA9wQExlh~h2#_^eZY1b)i%1%upy z@qUOg?TX3Tzv8&xW7n>`ERIwE4GE2mkSMkqvrcV<95lIdcX*_p&)O}giRS+4hWKRd zSH74z!Ijm%?=hezw zxmS40t{BUHtjH^nrI@S+EZn^@x%=nxmIiCt5mGW)hqA>fP?^p)%)ueQlMobIq*=Re z<#L1aMPk_&6#JHyk6qt6Zt`ota?2zlgw|tQOy6>B^RsNh8i1h0WbL?iX4LVT3oSJ* zi2gux$^j6)&g_#w|& z)HG&^4UoUSqW@LUbq8kUW~t-9!U5zM7l;lRIfq!sgHY(}xT^&lNLM^XCD5zxte$Lf z##LIgGN$no`tp`bRx!qxr&XML$d#>Vq5<*W6t7AmO5 z43R7mBF1P`pZ&x%l;?A{lZ5;v6pu-eToE1{Ge#Qolkn=87|GqjH)E!Zoqw5e1-q(q zQ!i(iX`4N%e3lAw-0M85m@A&YEWDr&6_k+y!rX|-k`loYF-cl{S@>5(xHRCh@J>Xm zL==9D7$<#UnxIzC813rrV~cGNV`SG$#7&FbDt<3)R*w!o7|V81Op}#$A)70%6rNY# zHo-NG4TX5gXZ1Q;6xpJi;UeZl^uq>q3%{u|B)f&_k(!wKQ&|(#_w{uj^_8odE56B) z$*32%rN=7XEBqsJ#KdQO@Vw=U(;(eAjxAbQwrKv5u>fdP?p!GMDL)EdMvjoKi96U6 zIYA`TO%oIO_V@kGLuq3!vl3*vZ!~~hNsw%^qrI01 zlE#BYrGSo*Tgz$)dhAWS(F8p$dJMyDU1RLQQEIJ@%n@) zbP6Ev_YD@1t|@&pu#LgVfKHKJ)}K=Co6TWiT%0R%p8k;!&^C9y%S7U$ zRqT9T*ch!Idi^`9rO^&!(9s^@h3L^!pJa^`MoX_Pj5r`_SpilsFnU-U64yK37N9yS zT#H^5(#A@O!&Ebu$^JV+*=-TyKK1oM$W*LB;!OlW?yQU1;>7QS=WYw1@V0L%h(%&i z7n@nk71VPmmI!a@Wpg1az7u}DEm~@rEDRr?B<+n6&d(erRE&?2>=Sm3pE0(CHI!2e zXqD{Hxy038tN56Y-N*|cB!4Y*PUw_Q`yb)x#AxZ$lZCE{#Y0jta}WzYQ&tD*XDkgqe7a;-X zvdaz-{OWPSf@$H>mE(o=)53;bp`t0{{vc<>1!3Q`yQKHsCMaSbl>QVg?2MfuT{%{` z5L+cpj23d^o|iU82{O&{F{Y_#nydCT&Fak-Lm3G&He*_W*E~AW7Dcr(B0OuKF*9~k zB#gYdW$UP=E8>q%tA*LxrIJ;`i`r2Gj!@GUrxRUS zr?SiHsHrQguPK%b=+bYJ%oC35!v}Ow<+;(q_xh+b;S4c1l%$=Z-O0WouU&F~jw@5e zrg3h!0lQ$fXkk@y{*g+2&MgZ=mAH1aFgM}x$aKnoI*L)}euTj1if^3u$t!8wmktIR zilvcT2y7k>rqDb6V8&1X0GoF3p(H^fc|sUxnk@Z&xR7lMbG&%!me~)+PN14wc7pJv z;W!Ct0;NVNsT37E4eUH?*?CTvs!HR|6!!30!OVc!an`bYtIiZ& zI%^5*{|r7;2(x)V^Z_i;1C)3M3YSdt0ts7g_vx(e(^Dp>ge>!j;VAjC^J-hFedHO- zF6Slr`LHN)-zZ^&d2td0K5{zi2muorN6uQBPM7wa&boA_u=k9m_jGvFt<8J;nkz>M z!;;5oQFYos46%3){B&8au;sE3Q@asUyDz&eI1Y6yf*BK;faVIzlTE|sQE~V!#REP% z*p$4>KQiwGV=!jew$NzhRpc?bP)Gpudk1Y@x3eXlsfeLwa$f4!0w`D7ALdNIW_U@skUm0c z3=)1#A3b}_9|SP9`pr8;I(0;fdOIcrhOnt2jaxgWhF?6c_a?7Z10Dec*e5s&*o|IoR75WE1Oreus!i^`jf6?K2$!jfidPA{y;xJ`POLa@#Z7XF!$IC&Uc5)kd1 zwjbNiM*n*t11y)8?Sr`ZX4sEZ(9VGe3udh)D|Cc# z^7cRnq(fm9@8k&_Goo;AQgHB5>?a}n98MdQLdc5Yvtpar0Vov|v8CEe$BJI(cQ{or zb8q8F-~utqH|5Uj)9k2Jpvz;@MV`~;q5YNsJY8%6Fpm|kY?-2rt0AcX4ZRNt(%I3D zzHP@x*N(=&(A7kAjk`(Lb0CM&bsheP|2K4v?59geo~@SZ9}t$zjt=^R6s(JEabAtE zefDhW3ohZp>^r67l92=p8FL;7FJpzyIl}{QgJY2m4!eDo;FmSc0oA}5I-=duL;8rV zux#->1C)7Sh%&>Cuz$rUz%Jk8+|=VUoo{Etd!dD`e!RzS$=A zo-7NEO5@7pW5Mf7pt?*JiBC=~{C;P)Lo83@>_J{zl-wJVx-E^fdP7V|oExJQTn@h| zD%fSd2#|*GP69OTuBc;J$MS(?$mO~3={0s&4dVlRJvo1n8Fd6w{e4kc)Od6g7L8sf zq1S?fvdI%sFku1;MzVtXvkQgyta3Tg;0-Zs6V6*B$AxOsxcofvDe#Z)ai>RxT0vZB zp12TeB`=>pErtvhBC~Z7qkU_~i<5WvI;gkK8a3w$BxhhbC$McRwcty>WtLFmj8e#jm#Et@Bdm>Wfjd2VPl zA#%^+79*L1kd9zNh)0-=5QPvnPuMUwGnjShCCoJlTM%~56F!|=Qo!Yb7Vot)=KFpVW!_5EnU((o!8}6hkyV1>0WQtBV3*! zY#<7W>s>Q3N$ZAzZ_^9TlHi!W+*_DJnh`1C03 z4mP>FQtAA*+v8WRDl+Q!<^ni^Kh`43tm6H*`OuE>1lC`*`;|+IoW}?@ublJhP6Dkr zBpu>c#y1tFaoIW;d$cZV8~K^bDm9a6=zevz>`Fs-{yv8B>%@BZT`Vg;>t1{i$v%pC;)k@dtQ`G3`NP@ zC(f9nY}RG9rYMKh7I0=tXb>!l8&7=M`Q(Ohr}+}(m{Zoz1mtV5A~|>9Nvy%HbbOzk zGKxTtpZSFW_nbd-=7#4z@wv%DY~FCk0kDYeE;n)fH2F_BL=SK*Xcgg)hp~Z!!k%vQ zB?cjP_N&&`rpt|~T)Y28pt=8nRBlfvGVT5%;!F5!_rHYPWR~kj?i7JsL8g_T6D8Yy zsXQQ!a|K>17v9aA>|oOjo=4Xt!)22vesT>y<-BsKsD(Ek`;Qf-5Wb@EOEo27K5BUCU9}F9*tcsf6RSUgwQYH?7Kt2{J>wd&Xo)`;54N6N{FGHuEWNkBXW!!(~Hp2#y z7~aq7Ku4Z<2^$M(zN6aa#YGE`la!Ww%jQFN%XU1H%9ZQ}$2e<=3)}&PmsF5mSE=X? znTL^SKWaSX3TdK6(NTMWe4?(vL-=aB07Kjrc!08^YR`V8*rkSIR-wu;{bAzcfGu#A zI(j)VQ4i4zu>#$mbZn*KwRo)eD`+C_!m1O$ibK?V#p~VOfwDa(5LvytW+YzS5rR@4 zA`1g|VPu;Fj<;Om<@`Xnx~s_B+dIWqQ0+ALqLtLN zOXhq1<&f-U*D@3eiG8lqRL_y1=j6LhDwchnZcgp$95M8|@NmH$QBMM2&9cBBoXbKv z=WU#GnVc&qYQ=7&xSATMvJJ3`8m?dYY(j(P2E8na;R)Wu#9+|Ue036}U z2Ofvni#=9fdT`@{sS;^tzOa8`lk|#4Shi@Lw8|iKE_zVftr024CI?H3=1YQYG;j7cEUng9ue}*Y%uhPu zFa0~2_<+41Nj_Sm`KUK)fM~U0uyDrckZ|cDe@*&j3 zB@1#ktDP+}^EzD`xA8meN3Y5;C;U`O-LmE>@H)KfIZqzh+DArb}0s6AO3@RkY+RoDLY$cQcL%pNfHp=Qvl z$fmRDMFAjawTCQ8dtg})Omgu_44}X>h>W*T@mH`6qg3`=fn{ip8KjBynV)E#Z(o+9 zJ)0Qb1|+%s6tdqor|#~+7jLe_hr1Hz&s1nGyu1+BmyB>QgYpySvEUg-)@bAVULAqo z+-^T9T<9531dM&F1}lQU#%IueH-sHy%jqygczM0?n*EzwDO+6Rql#?OfZb#cw`OKu zJ3YGj+R1VLw3*VbvD?AyW`e;jklajzRzC1B?<) zA@G!ezxFa_0Iw+~+g1#M@~PP*4=AXLuDwCX*3QZkGl7IeKH0^r@^*jf6LlQM_04;TV|EEM7M;<}_~4w; zGzDn5rwOSmkcQLlzY8&Dk;9BpwOb*p!Q==NOQRhsm_<3T<`sOJDxbgMJk}etUeWTS zlK)`&aT#cEZ;_;%z!@u*f$2~_XyY_M9qNa4mje+(FAR%(3 zC(?a;Cxf_Izq6?gEdUWf5Ct+gvG_uT$B)t+IloZmmvzOp0M2IxIo*(%D|ey%!#@#F z*yH>fbX`%_ldg!d_wa>1Ex*aiQ(Sh%>>`Kpi#1aI3%{%${zD+4mc~y}@~QE2+fp3= z`Fmu>d*t?1=Wpujus0d~?|%HlwNE2$P3br0_{r?I5ovLr2>0wxR?R98`3R?aM*2M< z9jN5|ESc*LUtY$~lDqDZJHUAis1V+ZE1X?!{9IXAi(YuJd(nq7x8g%r5t_(dz;K7m z1q^q{jCaWGOB%sJ@U$UId84HP`ReGJO-jx_tPO6B&@|4@UD2 zfECD4@EVQn6yrx{*1<2a&0&SwDlb4|Fb( z-C!lobvP_8&%p|)RCqsSMczud`TCbWX&ffodAzEz15m)t#F#_;$s1nvTCUcT0AY_Z3>(_L12^W)Qj z`Tc{U1BbEQR_ydGV7A=*TGJrQ+GwTAF;-s#cR+kC9nyvKD?%sRSX)tgVH*;C`UnX0}G&R z<<1Uo*BhkB!ikw$Zz6~hCf^e-UAIk`eNPdRga5kcHmMY)A6L(D>}Hz>EL&Vp-`o)f zLeWw=vuT{>t=Or&Ik`AA4|tPyEl+rvTK!kO&3D&dRn{p$AU}m>sa#gZ0SH@TDrxvn z=nST;qoZND3=3F-8t86EPQLdOnwJ+*(L~6N-S#m~GvzqD{~k)6<~sHjwue$rh$~<> zWn39DmyR+#GO_Lls3Z4-JAlWP5$w(gb={$GZC1H5ZY zPvl#f9`nmkG3LYCU`qgE6X8^Py@A0na`_DMW66x|Yy4cB6<$lPH%o2{to6{aoj=O! z&u)5|-e&Oc^J`?b$cVy>| zj6KS_&oDlZ$S+oqAn`x*tufb}KZLg2@N4;2;kQ=hGx^H-zcyW6Js_AcPjM_vDFbpTR?b8y_4pKH?qkZjNTH#Fe+Wb-J`N`NZx_MlSYbG9T z${RA|uEp|+eiJif?l}Q+_x&V6t|6XyF&+<0A>tG9uA#wEAa~CjDQAn%6~wxY`55;~ z%EKQ|w1&ECsS(+#{aa-=3=mvFW69kk%jXl_kCB2f{^Z)!%eT7<g*!j(g;;xCRww(W5sWtsXYf zLOoT*^FMoDP#$jf>-PN99X8z8@F*Il^*5v;H4JxW$X6U!!Y>!o@@FoAMX+h}l!pi9 z!QWTCO9 zc&vI*je)cKrFyOykJ+a;T7ny-yr1#p+8AT^n(=+G-POU`W|!6wU>}fLV+!DG*IhG+ z)}>(o47tlMCMy^nS$Z*_FqC@x=My((1F2|>U@?E)|i6JCjc0VuPXx^@JUdM8$ zODt!ph;W7D&$#LJ%_aA}a#DCBn1wqqak@fTPpigjxzhC{^`Uh?L_%!5taOs`P?P9Y z);A-gJsz3W6PeW=nbqr#S2~PZdw|!{1D6@Z!amRov((a?=E2onuhA+~y6NzP!3W4^VWI)_`d)~^#jrgbj_3J0@H(pb!*e5x^Usmwd$f2+={@L$nMWW&-<4F z`g~!}dH*FW(|z93ea_xR2D$cl*)Gs;2qbjM?Ja&Ce(z?B#&+T7^@U-+E^_&bC{QChc6sN9m^pxY?Cl;HO4MW(9;Id4eKHY^*9+|%yPx{{ymwX5iMBi0*IhjPfz zU_AJAZK8X6&p-bF-bwc)#z^u{nR&mf>9Mj@8+I{8jbW6s?mY|x-VSsTh8|pI>dZ4d z#?n2?6YPwpFLH(;AyTkTY3&L3Z!|k5fEzAsSXl~JAmzbTT;(e3I{?QAPJl%6A(IjN zeVAu_XH$qfepbwf?)ZN<;dYI@-p3TT+pqCB495e;{2+dVWLLEN(}xoXJeB6Hw-nV< zQK5O;Ek%wxD!bh*+)_sB%adSs-%@lR6-AjJx~1rTDhe_~`QbIKuggXhc^M_;a_`3l zE|x7Q^2nV_?9$N%3XIEv;)wSF$eRg;A;OlJn=ksI zDK8dSYEsO$vAN=YG=hiJ6~Ms7_W+*n)r;RZBjY?KEAac>5Me)F=w(!hu^lLOg%dj0 zn8iiy{#KAGfh(6=*k{3#8}lappJS!HIT^fSKHa=NpYCqD{Bh|{mkU=nM-Npns&S`g z{23(3#fEfc@e`lqz^1iSU^x-@v_h%O4S9nLF!XB}Io3QJ? zX=6yOY?}L42|#@4W&#~KQ4LON{{4NE6$G;Jbx#1VLqW7NV#Ges19dTmZ|6U_<<3G_ z=o~GDHd^P5R_!H{dz|pVkH7%-Z4;h%PRk-h-jH3WqI0LSExk4GO?JZ)0BnP-;(5p! z7B>k|?TsbW>o-Msk^n^rpF(aqtn{*`?Wyd7J1kk4RF@!a-YzVyyPJ{|b)kb(v5Y)} za%}yRp@??JR|xX^ql{LxGpcNKU`R95 zX1MWk9u(}ie#XC1m9jnzeBRxMO<5ggD*h8ic-+I9Iz?l-pI=YeAz;WCH;ranfxCVQ zte&zR466%ReFgbeaf|Q6LDkz?^}Q(Z9-fzvGYD&C6_=x=Or@6e6_iylxNV~d_2k7K zdMV;&4amc<7e|4b0%XdsctdCoAt~MBQv|RV+6>bR08xQEED@F^yJdh;YhhJa_+J=;Yba%Ho zYxl)U;ogRHX=ZttJM8&_BdY&WeRQ7q7M`fm0vqY! z*=>HlIOuhsZ>Js0qBYNR3GTvQ^7705wBDjbcA>dB9ZbQ3k{!TMr(I1|IBkJeu?aGa zo5=#Gcjt}ZjUyP0H~xUw27K(Jz!`Ob%P{KLUFyaou(Eu9J}1Oo*)MUJzy zhn~G{k~c=U*GgRW-ao9`!>#4G6?z#~23fT}lU8}Sm07j)49mZ9Oor!V&2LlC${yg% z3YL2OYkrHd2cR59c%ltY-SU~;Y-9CG~lG)=nx$@0-on5gWho*nDgRwchb1UpJURF7-9izNm`DUwC zRF4E6thTNMW0tB~&)a)2Ub)eJr79TW-$#V;oi)S;oI|lFRDPFTxTb+a&C=T#+EoH2 zf_J#^XyBsfYKz>is{hF52*8qn`-mpNlXbO4MykeP55oY5AEt7k?Zzjns2!NJ>9#o)x9?gy>jl7C^+C7 z@fyy5WrN!@A?PY+sT6`@yI4`PP=NRe6I?^Ml^<-ng+D z*7h~+yAHo@zw6G+UT3#g`+@eD^Qf%$0w7MN@7ZAFV0lG2;r zYdCGw*EQRIG@P@Iue)gbA3SWze6;fI z6z3-Jm-6#+aO(T|HvSCOAb8UJ(+ilvcljH*Qv3Ot#tg6ac+yPoTA58YYu2?7`Id!6 zi;uSoJ6=x^9NCF_ad+x}e1OWK9M3#^kkA9vjg+bonGlxjW)D!s-RuD>5_*72i14uU zOC%={+7ON)975QSuoq$HZuS6`b?GI{+*7HX0zv&0dw^QA2ekMepvEE#Z2##2Y6BX8 zA_CsJ1NkO|PK5vZ0JUZhdw`0B9-vY?V2(#(LP$rLgD?+a5kd*V+CA(6s*jwlDA<9p z58=ojVe{6%NoR!$!?(?d&t`|hP&~uH#%EWFF=QDe%L@u@!A^5oVH&)|gP}j5t4UMI zv5(&~N^o!6G>{G*XTKI7yl`;X!}m#oNUFGnQhJa#~p)>L;Aav4?)YN+mi;=U<(!xjTH87e_VR^Xd(5H z5UF+a!Td+gNJF^=*q!?iyZ1qwV9K_Zg)R^>cRVdE7%BX?W3n`6q!9jCjO2ze>#;S` zDSL&M$EKzmfD)Eokn@s)?|u5|WlxK9!*PgRf?^o_$~XO!klQmK(PHIW{sg^e5u$eg z62vBiruh|u_VG6zzrO(T`>YmMAe}^;VnLHpZd1d~n{M8*knB9?^e zRq6It2+Aiyr|&{niLtgSXLIay^VUVwuiGM8aUf{I-bouyeH7Z1r)rxE-b%$u#kmRp zdH`CdaXXx)hxelGTWZui{dB>e zbXWsVdvbwby%$DsCgcH*r zhnoDY3WLEHC<{?XFoEd<5<<3u+w)FAIRB>$2Z^t9xKw>8kgkdzl&k$z5q)F1;lfo>!1Qq za2-r9<3fpPZDh{jxNEzc*KI_;?8*onM!cWm@e4uPtYsH{1!X5G-BU@d{&bJ6Vt5+2 zn?A5z5BHwrPuHKd4cTq05N`j+s1Rxi*AGqwo*vrH*x$j*f5;>=>3mRah8cR2%+RkQ z*zo|5-qJsW1sZJ?2ZGHwk%V-B7AT-U+n7U{cZ(LH@cORkph*`oxqOe91`CMZUfwTU z-W3{g{wZjmWnr+1+MUZ3praKF)%mVh>(yR;6-SYWb|*x!)8^Zr8Ehi*#ACaCHoBG$ z!MJsEE8YO$ce~@q(`SA)^yhyvo1LaOuU*g1g_ftH94CmC16*OT+UAA-&FW1iH(D8R$F6MrfO3I&7+0Hu)_3Fl+f0kK9`Ri^tDe ze$^Yodd?Z(RK$A0^8aFR-*P~!4*S#TjM(2IlelFqHa{LB^oJu)Fz$&P>O242hx*KY ztGMc#uzAmY5Ye!xL&hH~B3Bo?$nRuMAKaotBDfrTICK#tTe;;$ z$Rng%`Oq_z5!Jq%ib8qqZzQUlCiEM>igIa=I1@iazr|9X@9dQJ?M*9aZvxj_?`Y|f zD-U;EO}|}IgGYR&gSZAYsuZs02YbYo%o;EKs%UgZ>SR`ffLYDR? zUS)(|(l&%SM999__&wROviG(x5?1`{zS}BLbhc3b1kMIF6)r>0PN5Q9Up#@2t1T+q zptDof6$-=lj~~zhrGmHOLfZaOjvbhD?O9{1J(+%?h~K;9m9?Q7``|gYxNVRWPdL@( zl{HfZynm-zjk1pJC(EVt_Ye*`f#X-oVZh|SnrAx?@!^5RsP^*ni8UW}*j*z^`bvVO`|rh5+uly)h8;`g$`Q6B{D`ou z9R~%3ZxP-`xV;0vVng6M1k>S3l3?NP!!0@Tk(jHDWq2bUQcD&O`TgK(vQI7Js77h* zv5#W~;blD#1NRJ&*jfh~j?M7%$B!6#xvo{1)UxjW%4h0?dtaF|O7ti7qF7eD=~r(` zl?p z;4SuW{3z)RipwRuD4s;7!1#87Ei7MbqdXRf$YjJm$fv-05yJg_zBn1Ryk7yiYPhia z?`;Ef#SNWk;0gK59wNN_>R9R1u7jVx8XzI9^2KX$lmxwgpYXx!S0yRJu_GChwL;(< zsrYA5?s((b;Rm1{@Xt+omLz5=Y)d!csiWd`)nXy=&AS}lXak7xMw?ii%HnhuXR>$> zi>)l4$Kv@cUc}-hEG}Vj8H+1eOt0s>(KZ&ZWAR27*RZ&b#SIiYqPMUQ^2~dqx3hQ$ zi+8ek7mN3@cpr=Rv-kju53#t3#Yb4&%;Gi{cd+;bi%+un6pK%@_#BH|tmOEevm~)_B%JHMJ#T~-#w}L0l>cGU&kC}ye zOSgSUExT)UqH|l8C#9xz7=G6^4Bp`!u?}SbL|?;eHVqp^8$)-FSVDFrTPQ>6CLu@M za1)3a@P)qo?E*fANaKmz2RaSI5ufVCMz?~=iaVf@E4=jJ+DR9 zIHyG>j5?M$x&Q3$={v{w<7hqMjV8JEMiaZe(L~$9+GF-92fLFWk{!JI^W%QQQ=he@ zpi8nAIs9J4_qX+tQ4-B?at9!P+&MjM&f-i`I_R>{LOHrA= zysC7mZFSXp^{Ul2b?M4V+j=g;zG|s$`RY}yX!**@iqe&(t8AqugzS#h>WbA%S5&Ku z*Ay?WD88!#NHUgJl&&gXS*o_JrrK3^18#0<^=f<7(o%IvX>m!#YRA$QXt8>E3B!U) zdxgyhUR-rI(ZQv!URk_+mAbU5YIPNTPp?|NqI8wIa(QJbHxGDM7Oz^bu2{ZmMKvKW zE}61=RmFPsGIXu3USDl1U5PfcR;?+nSYCqhm98KhAhx=)7(`S!N|)Kx7*R>-n&lWb zQG9FnvsM*XR#vU9tXf_S_RN}gr+Vq?Rko_t73$TMrB%hmj6aA#(JIz)^?xc;V-Wv~ zpkhbW-F9LkQ8f$9Qh*m7BGaNGq*kqepv2eCfL7)wb$e*~|u( zyK2R%)ocG?q?iZm#ubG ztt>`IeUqD3bvFi6-6sJ)f%)^O)vK!*-9$FcYo*;bZMEHoq#wyFNMu!&y%KV%Ue+(L zON%Qi0N;8-qZ9 zv@SOsP31NtP=0D_DyM0EWsSdN%%A}g%Tl@NFQ*>dEe-VZYg@)LvR7h9NrEJgt{g4N z98kJ4tpbbaQORgY$fGAmOU8}KDqWdTRa%;)p0U~vp3+iWhHv%C(v?`6kB$hFgukK< zlRO)cS8b~*u~$x*NL1XKr|gB6A`wrA2JUAaek?aevW~VZ*%}G@n*Nl*AOJhw^ zZLbU+C)ps4q%V3HM`1@_pyAOUy|cUg%1hHEcdA}#o+de@970f?*adulk3JYJ(Kv2A zpUVBGa4I;BJA$waVJm_SVF^MyLM%cUf*j$>ur%%@!V!dh2s;tBAZ$daL|B4gMMy=6 zMF>Oa9STPqLfg3b1Wy&I=?6=3+=12Zs`O z1SwqXTpdz4;JGD5yd(sf9Kk*-H7L%IR!6>tP^4Tf>u$k5rL6X|#P6kZuJUNT7f zsCuF#?Umw5lDj33E}1ClaRdYC2o4JHcymoiskcK&ski+|BarSzO4RK{N>jcaDO{P{ z7NoRa)**%4lG})sMrT8cvj$gz6i*JhGNd%h5~OOROOPs%&JRt?=LREVMFH*`xJ;xp zyi}w#d;?NqQ!G+q%LJt4{8l3!fix5;`4fVXjzg+K8iiC5`skCBB{{ELpDdXS$Y{NfL9pcD*Si5<(Kf?Fh>dYzQ@vNbv7%XaE0V5RV$BOEx~Lnjr~(G6OW=KXnx@v~x^rDT}Ja-0c?Su;@k znD(T0m2RN^u%1g8op2-}IVsyzWqQCQn4U5z&7;j)^FH$-^9i$m^5Eq0$@XL}6_Sg# z4nzDsiSb5{k^ar|36R;1aSz08iThjJ6LCMp{Te6H1ZhTS#%LyJ(loO)cW4%97HjO9 zdo@pL=7XfQT8Fky+o0W|{kQh4_7`ohmW!9g%i|UCs`%je(D=LJ%i=5IE8}hPpT~a_ z&*=u}6grhISQn>TsB`PK>vrgNI&`~qdv*JC`*jC&zv?)>OfT0f^sni!=?5glCln== zB&{U6-M|U3Z6Wu1>8_(r4=P^u>C+{$9OH|FC|K{)qlv{iFm< z!j^=;CH$1olW-$JW|-tKR2ZHx>^6LEkR(2n_P_FddBalgl@G{ZHMHCj!gW(J%4d72WG{dwn>znnT>CfxG z(qCrNH8deAAvPg7Aw6MM!kr0=64oSa#8`JGJe6<=0(myUXjlr;-%0u;=|WO>($%B@ zquDsqVZ76rYb-P_Gp;uNV*Je*U{aVSU|tNSWYc_8k!hL9ZhGGInrW0d-u!R#>*iBt zK6yv-Ka=Gtg()wja5Ws)27>p;y%KjsGf}%$Ylz<;KUk;Ghv}#2b$Sb?;644PAW)Vt zC}CK_sDv4isZ}8BT*5Si$?&ql@us285Sy5qczfb|VEx#nX-Tt^@{$%Otw?%4>20uC zOj=`n$e3o@U~-xsG(BT_-Sn-g+w?o+!-_?^%4{<~fTjAhxyk&l`3v)9vn+W;a%A%4 z(H_u#sQniDViGjQ z^7z&9o8te5aep75r>oSh*WIJ9fxtEC-`0Pu{{mwVO&FiBJYiG96AAxJXiYes@I%5c z34R8ZA>0s+=O%`kh8qU|#Mz0f5{1O46aSU?dg2#Jmy+bhXk&~q0n@U^__*<(5URJ0 zpBsCON>i9=x@neaf$2TdH>O7OZu6^9E31;ZT^x4;Q*k=BJN8v+fP;Jp{)oh1Yoz(7Ldf(g!EZ!93oR@O(n5G0*5V4aZ`QHcv5Y%m%Z`oMu)g z2V)Yn$tlU{$py)!$#szYe+up@f^N2Mk?ua-!@9?GFX)cyKG*d^mWS!b>kazZ`nmdg{X_Z| zeTV)#{lEkx7TMB-y$Poh1{X2D-%BfFZ|6B=1JhhO!Hjx0`qFK9isW0d2Gs* zl*E+VQ}R+iPq~zGBZX_`xE&avV|?snjBH`-U9q;x|{~miFwj)-IO^&n1RbuY8 zLmXd-Yl=G>_YTH)HEx(DMl)NpNAs%Yl4hQEy|!8RnQp9pgZ?r7%g_Xa62>KzCDbM4 z8de(qVR*&xTcS77FKIy1U?{U;Nh6X*Cq*QUOB$aP0@am@WiNAJZz_h0{hRsk=Htn| z$sp+@j6)>*;*P|P#l|yL6R%0qq-ruWb2M``^EE|KL*<%E%^J-{&3&2%&4Xa<Pb95_o>vT??OZT2mqJL4}u76)YJ|PYoEfd;WYN#WV z9|}FE)<@|l=qKxA_3@ArlRj0Sj;&{o-m0IcpRZq}U!pJ3m+33?m3o_goqi*9L!G`s zzeT@Qzg@pWU$RrbOTSk?5BjWE4>4fQ&>741J>5}P+sTUeiVGcHjnWM~;p{z~jbn_hZJm|<0GY*-P2mEb` zL_UQ)N&_(bnMsS5uD^Tj@>PrM8}F|cN@WT{fN5oBg^7hXZ}-qpQJGPa^L*DCP`l65@2}rKkDt$eIeV|Y z_S$Q$z4l&f55Bph-)nWDTPxii_3Ng+x?^}mU;60Sz=+qx@0bV=%Fm8ON9;j4<;bvz zBPgxMA|w1_IV9o*l=&-`IA|>MU;pe@hRJ0^nMI#UGy1yPnZfKJwjaZEp=FiWI*1uI z7ZnA4@B`U+b`?K~ohr4n%mn^1HdelfW%l-`PL_$~cS@4`Df3uH#y&QB1b>>9>8^Z@ zE*eZ2MI4M@Q|c3%>7vm!*t9Wj7%AgY_1vEYZ7GcVaPtEj#|vv zF(ne&NRZlbb_lYk(~%97Bij;(Y{v*>Po^Q87mMtI7FkLdGBzC9v?yfn4np=r60)Po z$X+2-c^WtJYy!NEa4j5#ESV724MjGM23OJStu&oUhb)yo|2YQPt2ClTjZ8+ppAeR} zXp%-EP)l?EZbbG37TjSVkgK$$S+va48e}FcDXn84eIGXYE^C`M#4!g(;;(RkJhR>SCnHZAr62^LBtZ&xGDm(`+T(`R#lHkFrY{FB5-V> zLGO!$WT55)kik`T(IC#ZTTY`KI|yWtiC-KwH0n+fgPim2p)Ojr(8Y666UQ&2flm;r z`CJus+BusnPx#=f$PV8VL_ogK!k>?d<7cYn?jxM_NPWA+?z8R46K)rwWL)76Z($ue zeDW$O^fk{{xF=sQ_jX$Mc&!JUt)1v#nyp<_fb(48k??(a6TF3O80QgKul2Nl0B1Yx z>0rIcD^4@vTaFNDp`5d}B~P2+wYG7#Hn-Q--fX=@NSdv!RA5wLtLHfDEo|kitww80 zMNYG|rnkpdjkF zJ5mE+VMQ0?jNuATgFw#O$=MEiqc#Foq!%MvZg6Z{z7Y1iC}z&O&1=03F>n#y!c)!G zv%QP4p7qqZC0^@U&UV&l>kRij973d@#l&3hR;kz4*!v;h>b2GOa)~Q!^cE6pt*6DM zod&%|TWv)Ih~lhuob6HwfnV}}DMIeYdOvRGY_-X@#=B00JpJo$UhAcsaJc`3gjPmK z$hlb)l4m4%ZCn0Iis8OD zNieoH2t23*A=47PR(D(9x@?Wm6B0i07E8nejn>+V+x|C%&)M2TY+Eq1e~0=^Q1ZvU zg*BYDE7NGLagO9{HC|g6S152Kr&bbsp&*hWbm;oT9?e+=&UP8vNiw$zBIg9&5;M## zg!>M|#Bo-r%VjQVqqnfSw?1d1)LYoYS!qaq3_pr3(hU;4)>a_0wTgP)iuD-_d%}Isit_H=nSJ}u zS|hHyMx3C=n3qtI0y5p)j99L)U0t_X8le^UpRHX))^4r@mh%3PF{onvb;NsT0#?{0 z8OvEuiO5c2@lEVlG>RNQi$bOfHW~-m_Q`wlsNG~ zGzKT`sK>$4p`mOk?5WSTEl*f`h4!pew0LE`b?Xkhupn5cU0is|n`N}xiX#G#(qD4r|=(tRf1Fu7d5#%tw zE^aUz&3_c9QamWa%lu!62haOI@)4ub*k|~eqee;Ef8eABb17 z&+@OtkChyq%%6^*KGM+D%Teb*k^dd9lMt+6&9nTJgppAVQ^Z3T(glw&g*0D~@}&vm zCOkb^s>qJbFp_SQr9Ny);jl{(T>76~4mmd_ny^|LEvpl82@q*fV+p z%Ub!5$3#YGV!`jDB3d~lQ=bBUj}#@d>bt(-F{BHQN`ibKxEerK5acjYy`+Pk1WD_` zUX(*WWOm1Xf>vF}t0m~ENhd@|xd_>-V~$RO{8C&3QE)L?qyTuc{&^iQEEBY7MjRlY z3@#RsPva&jN+3ssgL2{)=9oZ0_XW{GF~{+iV&h~OB)KgPETiSS!`Kwf)&9|!tX1*lrMbxZQp|XtLr*WikfiAE?j<^ z&rM1gazgB-MMjFyzkkbbNE$h1shGweB`5)+T$s`!3KXn_ zF^|E{;H*8tZQjtq9~+k>aZKXB8J8|enZ%D7Z)Ml;j`7pSOce*o2paY$FD9Q@(qk7+ z1UZa4|GedEe*c7aN#Gm)@rg;2PbcwjO zXwu_DDoIX@;1SS`miAHA0cY|sNtE$xk+)>uAO*4KcK-RvLx*l38^7^bK-4+xhiV?~uHa$hS>>L^39kU#Xlfc{YK6UAbDaVl1DO`l{sZ zG5p!o6{A+t&?-1Dv=UoSo-j}(K`M$%#?Mo2pST<@3rsr^Zrfv=p{y9q;a=<5LnGgU z$J57y8T?4~64t`I)g$_MQs=}teusMG_=zH6(mrdJ$YJw4l<@%gDYkcBaAPC?FLjwD zGvUB&O#&Ogp1S9Z40adx3j90zIWTO)dh zVy}QMT?L!SKdp=F-%XwJ5&XNl#H=Ofh`BMO>Y}9X6ThLX9kNh{abzZBF+QIj2WFlS zEq2McCsyGz-;s+h;icjHn6zg`JE`7pxJaGv2?Ea-9&ZgQD{00<2QH*7mW)0^V4L6? zf?IuHiqCF`l^-g7sJAJ9-Gueee*m8$qcN{w}Pu z=s47zx7M_2Gnp*rTxmCFixTfTPo1|u)z?^e-Wt;urUbwjF2%Xh&hysTzR#$0rSMJm z!WiJPx}OUF0RD(+P8eY;>}s`jwN9SE@Nwp0L(%e8`<2E_*YI=J9iC3vh1f)4ZVW%m zyf9q^KGJGCLcm1Ek@MEt)@9wTw$5{3wRx->U9F+9$b~I% z?dk4MqTK`0mP53A@*LTt(f4=wu%vS2yG`N^7E|OVYPQ|f-1hN-YRit$(c?~u42Fb* zr@)>u0NgAW$HNBu28pM@qHK9Y0(|_&wYV3CBQFzH z@u1k#YlDf%%kPVni6&HWeb^)sm^sORY}G{%xQ?BOzg3*Eg^$gNnGkaWn?fA1IfxBl z5u#OpAo$HIZiz{_55bgP_6SRY?X(7LOmVe2{I;BN68}K{NRCZXGmsy2OWe43!)^@O zcS0mo9HIy*>HcwkH~_dgrJKXPk~VfF~$z!Vv2+x&`?y&wF)oG`1*Wp{Jx+Z1GYssX}&oA@@5}#N!hgTO)kf10nR3_0lV2(l&iK z&*9%FoDmfyXB8UOBUK~S%;5(Y?Ufu<^GAxNxL?Lbt*R?=eW|W%DB_?VM(viQEN0!H zB4JQuuq(FeiYugyUEpa7_k7b;RK^6fOARDR6BKAca8%V5XJV1yfe|aIsw;91vP1v%<~=URLC!*!?@2>%AlIH9EK zyYNk0(9kQg?4p7~;ZuZoVRf)grQB8j#3CU)0zPqZeT`*Rt^< zg+RPv^YK-GQ5N#PH*79d1;ws8C}AF+1#;-4OI8*uJOkJg&$1pysGZ0_d1nCIu11(J zVeJG6x&|YJ_;HZ?V%*Y&lwSjZovYBc%Zbb$&^pv^sJwP5fsL%C(+MGOxGt#xqyVLi z8-TEvJx_QZ*Wr?q25y-UaJ36#(d{ws#wdw1RA^7Z%uZ;zVlvD#Q6GrzhVBCX2GBcw zKz>w8dZCngS%pk+s|D67ghKe=;F@#Y#%p9pMTdXT#%nXEzNCzu8wlNxDVP76BbT$T ze2=MW4?dZKVqdWK4!w%F5($|0%?*0fhhd=xb-dbS5CM`Zty#DhiI{1fmU7QhD`G*AP

    rf?tWvX?>jK2RD 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 delta 2518 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 delta 12349 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 JI!TuBzW|^@54r#V diff --git a/src/mkfont/hfmwidth.obj b/src/mkfont/hfmwidth.obj index 52834eef778cd07a742cad041009fade56ea8a60..a0241bbe98ae97c5ab41de12ae9548310a2ca7da 100644 GIT binary patch delta 357 zcmdm}a6p06hmnnem&My&Vj`zAXE754gBBwL!`z9X-kfil85pjxGcatKxKf_+*~F8| ztR@T$3{NJ0v=!1}-~=)m7*yS@Vv;M<%QN#PTQVjyTbh||p3nH5(S06Jjt7Xj85TiV zTnuGEbLGHdRZtceLkExrGKrg^2g>4NmsF)77 z@B_C5==tDm+`bRZkhat$63_a(2U^^P(3RUGc%|JyBiuCnobVk zH3rHUGkidmF|eFGhgVV5*ua$G2AYh?MDyp=R{6t&KxEN1}#PghG`Q+y*ZyTGccTGXJA-6aiu)t{fQ@) zS#=l~817E|Xv?k2zzJkBFvvMuO?F^RW;Qgl*u0GKJEQw_pdb$rb2H3_vbY%Xfdg@a#>L5zVF=rk6fpj5KeZYsF9f|!ylkBRv>0(PziQ7G%_=poXl$slrduXfGT5Z zF?ltwqNtIn3BwIE8RN+hd5xKkOpPXs^SO!|nOHL9psFyjm|Vyg!DM1K`81yilZnY> VMt(OY6QjwV{N;=~lMnLO0|0L #include #pragma hdrstop -#include "hymb.h" +#include "hymem.h" #include "hyfs.h" #include "hyfile.h" #include "hylist.h" @@ -63,9 +63,9 @@ int fiCacheFlush(LISTTAG *plt, int iItem, int iDirtiness) if (pct->iDirty >= iDirtiness) // got name for the entry, and is it dirty? { #if 1 // highly temporary, add a diagnostic (but error now bombs!! - FileWriteOut(&pct->ft, pct->mbh.pcBase); + FileWriteOut(&pct->ft, pct->mt.pcBase); #else - if (fiFileWriteOut(&pct->ft, pct->mbh.pcBase) == 0) + if (fiFileWriteOut(&pct->ft, pct->mt.pcBase) == 0) { return FALSE; } @@ -120,7 +120,7 @@ int fiCacheFree(LISTTAG *plt, int iItem) // unconditionally delete this entry from the cache if (pct->iDirty >= 2) // got a name for the entry? { - fiSuccess &= fiMBFree(&pct->mbh); + fiSuccess &= fiMemFree(&pct->mt); } if (pct->iDirty >= 1) // got any data for the entry? @@ -142,7 +142,7 @@ int fiCacheSearch(LISTTAG *plt, int *piItem, char *pszName) while (pct = (CACHETAG *) pcListCanGet(plt)) { if (pct->iDirty >= 2 && // got a name for the entry? - strcmp(pszName, pct->mbh.pcBase) == 0) // matching name? + strcmp(pszName, pct->mt.pcBase) == 0) // matching name? { plt->iPosition--; // it was advanced by pcListCanGet() @@ -171,16 +171,16 @@ int fiCacheReadIn(LISTTAG *plt, int *piItem, char *pszName) return FALSE; // no more entries in the cache } - if (fiMBAlloc(&pct->mbh, strlen(pszName) + 1) == 0) + if (fiMemAlloc(&pct->mt, strlen(pszName) + 1) == 0) { plt->iAppend = plt->iPosition; return FALSE; // not enough memory for the file name } - strcpy(pct->mbh.pcBase, pszName); // stash the file name + strcpy(pct->mt.pcBase, pszName); // stash the file name if (fiFileReadIn(&pct->ft, pszName) == 0) { - fiMBFree(&pct->mbh); + fiMemFree(&pct->mt); plt->iAppend = plt->iPosition; return FALSE; // file not found or not enough memory } @@ -193,7 +193,7 @@ int fiCacheReadIn(LISTTAG *plt, int *piItem, char *pszName) int fiCacheWriteOut(LISTTAG *plt, int iItem, char *pszName) { CACHETAG *pct; - MBHANDLE mbh; + MEMTAG mt; plt->iPosition = iItem; pct = (CACHETAG *) pcListCanGet(plt); @@ -203,24 +203,24 @@ int fiCacheWriteOut(LISTTAG *plt, int iItem, char *pszName) } if (pct->iDirty >= 2 && // got a name for the entry? - strcmp(pszName, pct->mbh.pcBase) == 0) // matching name? + strcmp(pszName, pct->mt.pcBase) == 0) // matching name? { - return TRUE; // no action needed, maybe pszName == pct->mbh.pcBase + return TRUE; // no action needed, maybe pszName == pct->mt.pcBase } - if (fiMBAlloc(&mbh, strlen(pszName) + 1) == 0) + if (fiMemAlloc(&mt, strlen(pszName) + 1) == 0) { return FALSE; // not enough memory for the new file name } - strcpy(mbh.pcBase, pszName); // stash the file name + strcpy(mt.pcBase, pszName); // stash the file name if (pct->iDirty >= 2 && // got an existing name for the entry? - fiMBFree(&pct->mbh) == 0) // if so, it's now safe to free it + fiMemFree(&pct->mt) == 0) // if so, it's now safe to free it { - fiMBFree(&mbh); + fiMemFree(&mt); return FALSE; // couldn't free the existing name storage } - memcpy(&pct->mbh, &mbh, sizeof(MBHANDLE)); // can now clobber the old mbh + memcpy(&pct->mt, &mt, sizeof(MEMTAG)); // can now clobber the old mt pct->iDirty = 3; // dirty return TRUE; // the new name has been registered, flush the data later diff --git a/src/mkfont/hycache.h b/src/mkfont/hycache.h index afaea5a6..f31af2ce 100644 --- a/src/mkfont/hycache.h +++ b/src/mkfont/hycache.h @@ -8,7 +8,7 @@ typedef struct { int iDirty; // 0 = free, 1 = unnamed, 2 = clean, 3 = dirty - MBHANDLE mbh; // smallish memory block containing the filename + MEMTAG mt; // smallish memory block containing the filename FILETAG ft; // potentially large memory block containing the data } CACHETAG; @@ -35,10 +35,10 @@ inline CACHETAG *pctCacheItem(LISTTAG *plt, int iItem) return (CACHETAG *) pcListItem(plt, iItem); } -inline MBHANDLE *pmbhCacheItem(LISTTAG *plt, int iItem) +inline MEMTAG *pmtCacheItem(LISTTAG *plt, int iItem) { // return pointer to memory block handle within item, no casting needed - return &pctCacheItem(plt, iItem)->mbh; + return &pctCacheItem(plt, iItem)->mt; } inline FILETAG *pftCacheItem(LISTTAG *plt, int iItem) @@ -103,7 +103,7 @@ inline void CacheFlush(LISTTAG *plt, int iItem, int iDirtiness) // plt, //#endif // iItem, -// pmbhCacheItem(plt, iItem)->pcBase, +// pmtCacheItem(plt, iItem)->pcBase, // iFileSize(pftCacheItem(plt, iItem))); #if DEBUG @@ -169,6 +169,7 @@ inline void CacheWriteOut(LISTTAG *plt, int iItem, char *pszName) exit(1); } +#if DEBUG /* TEMPORARY! */ printf( #if DEBUG "CacheWriteOut: " @@ -182,6 +183,7 @@ inline void CacheWriteOut(LISTTAG *plt, int iItem, char *pszName) plt, #endif iItem, pszName, iFileSize(pftCacheItem(plt, iItem))); +#endif } #endif diff --git a/src/mkfont/hycache.obj b/src/mkfont/hycache.obj index 1976fa2c3de76b569d8fb6b04f8c805f5660a697..6029bb2fa446e49c0da98f7b61a6f77d18c95fdc 100644 GIT binary patch delta 925 zcmZ9KUr1AN6vxl+-fgr^(fl*+q+ra4T$`D0^IxWsMG;06 z#W*h(`JjPmy%ZND3wtRcsX!y}Aq!IIp@+a8B9d6=-n$<12j6=?=X=iYaPRs3gbDV1 zf@zwV4)lt~I;AzPajEZ_06y>leeqVKx}X%mSPo!|U)HN*2LNVCEAcr!`yO95smdw= zrYkYZ@>0tHV4lKFk`@h2&x+8=Ov;uj0K^D0svi)olN5M|viZ2cOsZoRfH{lQpqd&i zQuvdUhr2mFvttEkQbrE~e8LXSsNN!S90C}}>y&+nt6Vm|;4;`NB9rnfWnB1&>e|Fs zw8B`#>y;xEEux=@z6@5epYO^j0ku?7&|nP&N4w5-M{$$y_Acacr~O7lSkD?qz zD;$1jsERwIvPT+I0p5xLozX^{w5bpvuLQsuJ*!BOGJw0BGtmbM&PAtH)3$Peo8{Dr z8#0Oj;3=20oD$`sf+}gK8f)zUQHr2Vy2JE=Q=n_y-ALo8n(7?@_Z&$BCmT$1InS9x zS%QKtDiu^?#}0sxbWpHKKba~k0EXxSckk01!9p*DY@A|JjbFIqreAz+U&4x`g|>)_ zv7f6+s%7F?;5GG#N7C~_N}kB|y6C&uES5Sd^g6>-s3=IfSm(-e4 zB*ROl_M{d|kqjPzA26u}QY6C^Q^GwRUZqF|jdyk%ppZrXG6EYiJzO?S5g#-FJWFbR zeSP6XhPoN7VC4N9SzH%(g-)D08amz^4n>Z&b#?ZI`ooTr;_jAaGPsI_Zwi&UDpw{x z2|oz585(}jfXjzYnsUW(Mjzf;idaJvyJ9HmgS)v9=t*T9yXbLM40EW@9mmVmt-Z$~ zs`lK#cKYhEW8YP6E!n+I*g}`Q3g*!xuO0IfVw}ZkYVh5{ESmRS#6=qPTksH#_)lU! znFE&0>)V&d;oEQosXSoAZrUFhSaXF3&E>I0*a!lSbN4gn3YrU?U!C|1f5&tE+@4v{ j;tBM&wz}O1wCZ}T@z1{Lbj^U(qjhw2h5u`11dD$IOm@Q& diff --git a/src/mkfont/hyfile.cpp b/src/mkfont/hyfile.cpp index df8e2e0a..edeaaefb 100644 --- a/src/mkfont/hyfile.cpp +++ b/src/mkfont/hyfile.cpp @@ -8,7 +8,7 @@ #include #include #pragma hdrstop -#include "hymb.h" +#include "hymem.h" #include "hyfs.h" #include "hyfile.h" @@ -20,8 +20,8 @@ int fiFileAllocate(FILETAG *pft, int iSize) memset(pft, 0, sizeof(FILETAG)); // allocate via the lower level wrapper, relying on the fact - // that the FILETAG structure is compatible with MBHANDLE !! - if (fiMBAlloc((MBHANDLE *) pft, iSize) == 0) + // that the FILETAG structure is compatible with MEMTAG !! + if (fiMemAlloc((MEMTAG *) pft, iSize) == FALSE) { return FALSE; // indicates failure to allocate block } @@ -34,11 +34,26 @@ int fiFileAllocate(FILETAG *pft, int iSize) return TRUE; } +int fiFileResize(FILETAG *pft, int iSize) + { + char *pc; + + pc = pft->pcBase; + if (fiMemResize((MEMTAG *) pft, iSize) == FALSE) + { + return FALSE; // indicates failure to resize block + } + + pft->pcPosition = pft->pcBase + (pft->pcPosition - pc); + pft->pcAppend = pft->pcBase + (pft->pcAppend - pc); + return TRUE; // indicates success and tag updated + } + int fiFileFree(FILETAG *pft) { // free via the lower level wrapper, relying on the fact - // that the FILETAG structure is compatible with MBHANDLE !! - if (fiMBFree((MBHANDLE *) pft) == 0) + // that the FILETAG structure is compatible with MEMTAG !! + if (fiMemFree((MEMTAG *) pft) == FALSE) { return FALSE; // indicates failure to free block } @@ -134,9 +149,9 @@ int fiFileCopy(FILETAG *pft, FILETAG *pftIn) memset(pft, 0, sizeof(FILETAG)); // allocate via the lower level wrapper, relying on the fact - // that the FILETAG structure is compatible with MBHANDLE !! + // that the FILETAG structure is compatible with MEMTAG !! iSize = iFileSize(pftIn); - if (fiMBAlloc((MBHANDLE *) pft, iSize) == FALSE) + if (fiMemAlloc((MEMTAG *) pft, iSize) == FALSE) { return FALSE; // indicates failure to allocate block } @@ -170,9 +185,9 @@ int fiFileCopyPadded(FILETAG *pft, FILETAG *pftIn, int iLeft, int iRight) memset(pft, 0, sizeof(FILETAG)); // allocate via the lower level wrapper, relying on the fact - // that the FILETAG structure is compatible with MBHANDLE !! + // that the FILETAG structure is compatible with MEMTAG !! iSize = iFileSize(pftIn); - if (fiMBAlloc((MBHANDLE *) pft, iLeft + iSize + iRight) == FALSE) + if (fiMemAlloc((MEMTAG *) pft, iLeft + iSize + iRight) == FALSE) { return FALSE; // indicates failure to allocate block } diff --git a/src/mkfont/hyfile.h b/src/mkfont/hyfile.h index c59fcf23..ff493120 100644 --- a/src/mkfont/hyfile.h +++ b/src/mkfont/hyfile.h @@ -16,6 +16,7 @@ typedef struct // ---------------------------------------------------------------------------- int fiFileAllocate(FILETAG *pft, int iSize); +int fiFileResize(FILETAG *pmbh, int iSize); int fiFileFree(FILETAG *pft); int fiFileReadIn(FILETAG *pft, char *pszName); @@ -53,6 +54,21 @@ inline void FileAllocate(FILETAG *pft, int iSize) #endif } +inline void FileResize(FILETAG *pmbh, int iSize) + { + if (fiFileResize(pmbh, iSize) == FALSE) + { + printf("FileResize: " + "Could not resize to 0x%08x bytes, exiting\n", iSize); + exit(1); + } + +#if DEBUG + printf("FileResize: " + "Resized file 0x%08x size 0x%08x\n", pmbh, iSize); +#endif + } + inline void FileFree(FILETAG *pft) { if (fiFileFree(pft) == FALSE) diff --git a/src/mkfont/hyfile.obj b/src/mkfont/hyfile.obj index 8f5cfdc3db3795e6110c476382eddc1ddfd8d578..a446946a3c7700e337299791ccea077bf75d005d 100644 GIT binary patch delta 2708 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 diff --git a/src/mkfont/hyfs.cpp b/src/mkfont/hyfs.cpp index ebdf991f..9e34fa79 100644 --- a/src/mkfont/hyfs.cpp +++ b/src/mkfont/hyfs.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #pragma hdrstop #include "hyfs.h" @@ -26,6 +27,24 @@ void FSExitCleanup(void) int fiFSOpen(FSHANDLE *pfsh, char *pszName) { +#if 1 /* munging to accept unix style paths */ + int i; + + pszName = strdup(pszName); + if (pszName == NULL) + { + perror("strdup()"); + exit(1); + } + for (i = strlen(pszName) - 1; i >= 0; i--) + { + if (pszName[i] == '/') + { + pszName[i] = '\\'; + } + } +#endif + // clear filestreamtag, although we should also free name and error if // not null, so calling convention needs to be revised (zero it for now) memset(pfsh, 0, sizeof(FSHANDLE)); @@ -50,6 +69,24 @@ int fiFSOpen(FSHANDLE *pfsh, char *pszName) int fiFSCreate(FSHANDLE *pfsh, char *pszName) { +#if 1 /* munging to accept unix style paths */ + int i; + + pszName = strdup(pszName); + if (pszName == NULL) + { + perror("strdup()"); + exit(1); + } + for (i = strlen(pszName) - 1; i >= 0; i--) + { + if (pszName[i] == '/') + { + pszName[i] = '\\'; + } + } +#endif + // clear filestreamtag, although we should also free name and error if // not null, so calling convention needs to be revised (zero it for now) memset(pfsh, 0, sizeof(FSHANDLE)); diff --git a/src/mkfont/hyfs.obj b/src/mkfont/hyfs.obj index 840b0972f69f21f2fdd9d866e25b697343ca4a9d..d7041c812d3b90293621af0dc9ebbcb4c101535d 100644 GIT binary patch delta 1998 zcmchY|4-XR7{}kA(n2X8O8E{BDBnh*h0*~cAc0BN5T_WJVj?NxfWkloEHHK1Y+Mr! z>3)Grlq`lHh%s|cGsQ$r)Tq;G)R@H>U7S&WnZjl?aX&4o!S~fG%Il6&3zo_p@O z``lfhu8ypaXWp+_;56UY?WzavUCG?1{k&3Fm413ZP_F@Rt_(UKo;3j-F5p}paKsH{ zqX*^af6P06bnz&5OFrcI$ z*>H`jQQ3ZtD;pYlYIiAHb6nZ*DpfZS=H&B+gbjnyKZh?RFc9_Y{ac)d$YLG$gFkno`j|eIQ|qY-!8>*v<6lU@US&TP9D%aI%=OQv9*3kF1f~jY}NVQwC#~ zO@W)*RS~N>9FAUB>;5lGUY#zQM$~Uje48Ha6T_}vQ}nuc#kC#I<@Z&v=AoJ_XH5lP z8%kO8&`g#n)k*GC>LhuGQZJIlN_|BdQLa(R`KkDgG@{&~GNRm~GNLr|x)`N~iv%c* zFsoDt=#mF{o9#;ZcwP61Z)>ZL)1FtecACO>A(V+j|f?U zGh`_?$TFNK%kd6bf%nK7d`P;~+X6nPHsgEJf}hAV{6SjrSD1|r+1!{8Cuv75>42Ne zM+aGiLu3j1$TA!wotP&paDuGFv!n|VvQ|A>AWCh<%cKPxWEw7zR$L@)c%RI~CDM*B zHLjnfz7@DalNsBj1%H!ixJ_E|FR4T4iDjXHbfB2bmM@>Bg4&D@(t?9z8V-|IJV5Fg zCbKX}IxtOUV_`8gzBFGeZ&T`aqr)M1QGklq{N0CS)X78!2`rtM3M_=i0#7_XF*myy zI6l_u^UjZt{v+J(22*O4c*NbMofd2EDqSWvnau1zuGNVz+~uYtZn5ny)3SxtbElRo zx;!q^qi!+jDN8Sq%d=DphsP=2@YuB?@qx#gSxKABPt(kcF0tjQ3y*MZ;wcUaxI>RF|5|| zik$lVuzc{ca8oSanF-ZqlPRo0c!P%JlZ1sg2FPt<8 delta 1442 zcmY+EOK4L;6o&tsN1NOvO)9q4)RMH(w$Z#=eAH4}>I*DJt5~FBO<$=X1x3+?3$qY( zp%vN@3NBo@6BHB`1qDG@wu+z#3PJ@%6a^Pu=t9u{%)M#Mz3GbWTLZWZU~GCIlDbCmvl*Cb1>SI0q8(B652wcSqo$W^p$>_}zW)q>HiUK$6zd${T3%&Lr|tHFT^WZ(QqxBJ;ifzzak0_n$9GJxx35I4yXZj&{*PuA+I03K1h@Pc&XwH&L&2hxL&q=|22 z0E=W5ev?6cTNEtWg_Wcm5wa3-(t{-FM;95y4l;zDWVPHU$6jg|j*@O1Co6G=^x!P% z$CMG1W3x0uxJp)o*Ux*Xg`55ArVfvFsz73eYEC2_Un6QD(QV|^l|(En9V=bBc&X=? zJjog^dvziThvB0oNu;B#-b;;6*b!EH=9z_i%9Y$;EK{AymiPi=>vT*pRx(H{Td_5I z52#oEWJKLaRvC5bVKNe^r(c@>JI_be=VV-6Ox1c<+0jjEE*&Wh(kf+=Rwy6+G_4q^ zzKNE6B#rDI>0+Q*QF)&AdJo{&EiseUFEpw3vyjSLo(J->OONl9=(2H=)&oxK@+94M z&LKWtJ{TZ3HhJu1UQ2={E)`^*Dqd064r$kGu^=zh`*f)Aht5(F(#YjwhNcxGcOWVD zaw-W(bmdZ~sJc4TR}OKHVO4U$1>cpg`G kGEH^mhfftx$qPT$o9c^F!0eDrUS^xk5 diff --git a/src/mkfont/hyimage.obj b/src/mkfont/hyimage.obj index 270ec88a866b7106865c99415819fd7a17b966ab..3c8797b6bbd0f9658687076d45d240020f94441e 100644 GIT binary patch delta 809 zcmZ9JL1+^}6o%hyk|w*6R%1;>C}~I`pl#XBZjxOoR!wXbtCv``P0}_ANfgB*C=$@v z9z;CZ@Ny7aQHdT3B1&@W!Gc!t!)2&dLB40bpNw)XzSZivdy70X$~`8s$Z=SRDsgp|x55;AQUeM!+_Z z0GPop=4TZ=#scgiuM50BrRuji0N^=(roER`JF!dXuxZ5Vs0anuArMIe^b8+PW{ZWJ zm#$(}$XJYUxaP1l+VRJpYaYk$zP;Q;Matwa#&Y@ejVsq{Dc76sJC6zOqUD5VrjlTe z0k}D`Urb<>>nn@WPW9l&!t;a#nvehIky>Ak+i6N51_`U?L>v7Fe?e&Sl9 zPiXU_J$Z!9;!yG~YvB82jorhURJTQ!gIGS`F5rsiDsb36oH%CQmDFqQTN48{0OjIz>d9?&E8R-)pIbm`=` z(PreoEp$0X^WApTh=d$1B&03Vf7$K{$#^+a8duIYXVq+`${~G(T>p)#tOcztL{&fT xXs^m@aHW;V7|oV?=Eo=l|F%M@iXwMfceGbzz4kSmXMz#NGr31htF7lEmOq`wp3?vT delta 773 zcmZ9J&ubG=5Xa|jvfAB9w#HIK38^HwAPrDX}|lL{;f z)i>es_nwrOni+t$01)+xN%q!js8ZSi7(5QJ?yV%G+tUC~DLUS(1XH|@Dw-vL2F6*E zE#e`jGLPpQJl~?66bAs{4t}Atdz6PTE-2zCu~pQBbCDECqyggjF}yF#g*40YmC*Aj z9*gb9PuuJMLhRAV#hc{VMiGJKK*?~G0St4t7$_Oi)Vjf$7AP5%5Ws%Ub_7a>Nm6;v zP6kSb6;cJxRs$tNZVSL^fP?h#cvpf9-?jqOxbbJ8WJpqXbr3E5c#AJ4pF9lUn7 z!CVw8Cd*^4QfGtspt8g+W3GB3)}HD%4v?CfFm&5;@LBbG3{LRg=`D^O)57z!dsN5N z{t%-PDY_?`yVg%kT$^nj`CRNy8kBG~{V=Vy=c=2r2R0MOv7XTH= #include #pragma hdrstop -#include "hymb.h" +#include "hymem.h" #include "hyfs.h" #include "hylist.h" @@ -20,8 +20,8 @@ int fiListAllocate(LISTTAG *plt, int iItemCount, int iItemSize) memset(plt, 0, sizeof(LISTTAG)); // allocate via the lower level wrapper, relying on the fact - // that the LISTTAG structure is compatible with MBHANDLE !! - if (fiMBAlloc((MBHANDLE *) plt, iItemCount * iItemSize) == 0) + // that the LISTTAG structure is compatible with MEMTAG !! + if (fiMemAlloc((MEMTAG *) plt, iItemCount * iItemSize) == 0) { return FALSE; // indicates failure to allocate block } @@ -42,8 +42,8 @@ int fiListAllocate(LISTTAG *plt, int iItemCount, int iItemSize) int fiListFree(LISTTAG *plt) { // free via the lower level wrapper, relying on the fact - // that the LISTTAG structure is compatible with MBHANDLE !! - if (fiMBFree((MBHANDLE *) plt) == 0) + // that the LISTTAG structure is compatible with MEMTAG !! + if (fiMemFree((MEMTAG *) plt) == 0) { return FALSE; // indicates failure to free block } @@ -145,9 +145,9 @@ int fiListCopy(LISTTAG *plt, LISTTAG *pltIn, int iItemSize) memset(plt, 0, sizeof(LISTTAG)); // allocate via the lower level wrapper, relying on the fact - // that the LISTTAG structure is compatible with MBHANDLE !! + // that the LISTTAG structure is compatible with MEMTAG !! iSize = iListSize(pltIn) * pltIn->iItemSize; - if (fiMBAlloc((MBHANDLE *) plt, iSize) == FALSE) + if (fiMemAlloc((MEMTAG *) plt, iSize) == FALSE) { return FALSE; // indicates failure to allocate block } diff --git a/src/mkfont/hylist.obj b/src/mkfont/hylist.obj index cb779f07b2706736f2d3d583648e661a678a7f00..654b5cdfb423051df931c63e72b84fcd8a469455 100644 GIT binary patch delta 787 zcmX?Jc%hKfhmnIpp2gdK!9-4HPF*zyh9!&)3>PPcDs#qaFfgpsW?x zawo2oXRQZvj!ZnO%y|PU`flP+c~%B}28M{qvW)VqCP1Y*lN}k;g|rwr!P=DFtzwcZ z)5|mSCU0g;WVSRj+bqtME6LBxz$|c2h=GC4*VQ+~(S7q&>94GtXDb@B)uYMG0U84` ziko2pl*Pp$40I__FHlSz%Hm>(1hS;SVzE#b7sFd1OBF2k5z69X$Yo++umy`1LRnl4 zzkw`Qu-JblVF;6p!I_zXAsQ^`zBy1shFwgLL5x9hrK`OQP*5=)?yVYq3GPoH_0lqP zQh^c%lOLE$b2%jE=N9N?rm!hbKCExY0}5R}pk(?C*Z-4w4O|#EO%5{XR`mc1r2#QB zg8~B+qbQIC3e_(<5RU+vK#)F}$uK**1<0BL#1NGVKo$egLlU|W?}4}s3@afNkOZ0r zW}m_kd5IzNb@BF|$%(kY%VqWAZ#R9nsWW$DEw}WCw>xM~?u< aP)HJ+{J>08BsJHqC^Z#TVzZq2N=5+ke}dKk delta 748 zcmcamc)XC)hmnIJ;VO&$)QOzVoLXuO3`-ap7|u-$RpyM+U|?9S&A_mJVxv4~ydDD> zWKCQt&sqcI9GrMone!@C^!3D_@~nS>oY2X#jPk5HK&6?J9U0TPl^Hm}+GL!qChuZQ zWHvOj*eu7CD=Em&z$|c2h=GB_*U7`t&&9`e^DODFtODr5oBI?^*y^VO%>bFh%`g+n z;$q+dIuocLC?)`9aWMn|SyEuJFerWpOd2F)=XMg2l3+EG~vGK$a_5 z><5&^#bCqCz!1&Azyh?yVRMLv47<7-gBSxVFtk{KDy5RGVoIwrV~UHCV{)_8^7Be! z%970t^a@gvCePQ`WqKh$`JBET4=7CefXY{hT&@O4nr8%8VF$DU0$}DPOfEIrEZz(iX93y6XaZEi4a8ZK?Tyzn zE}Z<{Sd{VPWLA?(#zT|qO+*>RCr>q5Fa8v&hYhSJ2&i5Rh+j{RHeD~y4s`4%AcpuY z7APJM#HN!K%}RwqsR$KlO +#include +#pragma hdrstop +#include "hymem.h" + +// ---------------------------------------------------------------------------- + +void MemEntrySetup(void) + { + // for future expansion + } + +void MemExitCleanup(void) + { + // for future expansion + } + +// ---------------------------------------------------------------------------- + +int fiMemAlloc(MEMTAG *pmt, int iBytes) + { + // zero the entire memory block handle area, avoiding leaks + memset(pmt, 0, sizeof(MEMTAG)); + + pmt->pcBase = (char *) malloc(iBytes); + if (pmt->pcBase == NULL) + { + return FALSE; // indicates failure to allocate block + } + + pmt->pcLimit = pmt->pcBase + iBytes; + + return TRUE; // indicates success and handle set up + } + +int fiMemResize(MEMTAG *pmt, int iBytes) + { + char *pc; + int iBytesIn; + + if (iBytes == 0) + { + pc = NULL; + free(pmt->pcBase); + } + else + { + pc = (char *) realloc(pmt->pcBase, iBytes); + if (pc == NULL) + { + return FALSE; // indicates failure to reallocate block + } + } + + iBytesIn = iMemSize(pmt); + if (iBytes > iBytesIn) + { + memset(pc + iBytesIn, 0, iBytes - iBytesIn); + } + + pmt->pcBase = pc; + pmt->pcLimit = pmt->pcBase + iBytes; + + return TRUE; // indicates success and handle updated + } + +int fiMemFree(MEMTAG *pmt) + { +#if 0 + if (pmt->pcBase == NULL) + { + return FALSE; // indicates no such block allocated + } +#endif + + free(pmt->pcBase); // this can't fail, apparently + + // zero the entire memory block handle area, avoiding leaks + memset(pmt, 0, sizeof(MEMTAG)); + + return TRUE; // indicates success, and handle zeroed + } + +// ---------------------------------------------------------------------------- + +#ifdef _INC_JLHANDLE +int hiMemNew(int iBytes) + { + int hi; + MEMTAG *pmt; + + // take a new handle, before bothering with memory + hi = hiJLHandleNew(patMem); + pmt = (MEMTAG *) pcArrayElement(patMem, 1, hi); + + // use inline wrapper to allocate the required bytes + MemAlloc(pmt, iBytes); // this will bomb on failure + + return hi; // caller's reference is the opaque handle + } + +void MemResize(int hi, int iBytes) + { + MEMTAG *pmt; + + // find supplied handle, before bothering with memory + pmt = (MEMTAG *) pcArrayElement(patMem, 1, hi); + + // use inline wrapper to reallocate the required bytes + MemRealloc(pmt, iBytes); // this will bomb on failure + } + +void MemDelete(int hi) + { + // find supplied handle, before bothering with memory + pmt = (MEMTAG *) pcArrayElement(patMem, 1, hi); + + // use inline wrapper to free up the allocated memory + MemFree(pmt); // this will bomb on failure (null pcBase) + } + +int hiMemDelete(int hi) + { + MemDelete(hi); + return 0; // handy way for caller to zero out its copy of handle + } +#endif + +// ---------------------------------------------------------------------------- + diff --git a/src/mkfont/hymem.h b/src/mkfont/hymem.h new file mode 100644 index 00000000..a54f28b9 --- /dev/null +++ b/src/mkfont/hymem.h @@ -0,0 +1,95 @@ +// hymem.h + +#ifndef _INC_HYMEM +#define _INC_HYMEM + +// ---------------------------------------------------------------------------- + +typedef struct + { + char *pcBase; // also the 'handle' for malloc & free + char *pcLimit; // similar to Microsoft's _msize func. + } MEMTAG; + +// ---------------------------------------------------------------------------- + +#ifdef _INC_JLHANDLE +// the optional registration of allocated memory blocks is based on a handle +// system identical to JLHANDLE.CPP, see comments for atJLHandle, patJLH etc + +extern ARRAYTAG atMemHandle; + +extern int hiMemHandleFree; // to head of most recently used free handles list +extern ARRAYTAG *patMemH; // patMemH is slightly more readable than &atMemHandle +#endif + +// ---------------------------------------------------------------------------- + +void MemEntrySetup(void); +void MemExitCleanup(void); + +int fiMemAlloc(MEMTAG *pmt, int iBytes); +int fiMemResize(MEMTAG *pmt, int iBytes); +int fiMemFree(MEMTAG *pmt); + +// ---------------------------------------------------------------------------- + +inline int iMemSize(MEMTAG *pmt) + { + return pmt->pcLimit - pmt->pcBase; + } + +// ---------------------------------------------------------------------------- +// handy functions for the client, not important to the interface: + +#ifdef _INC_STDIO +inline void MemAlloc(MEMTAG *pmt, int iBytes) + { + if (fiMemAlloc(pmt, iBytes) == FALSE) + { + printf("MemAlloc: " + "Could not allocate 0x%08x bytes, exiting\n", iBytes); + exit(1); + } + +#if DEBUG + printf("MemAlloc: " + "Allocated memory 0x%08x size 0x%08x\n", pmt, iBytes); +#endif + } + +inline void MemResize(MEMTAG *pmt, int iBytes) + { + if (fiMemResize(pmt, iBytes) == FALSE) + { + printf("MemResize: " + "Could not resize to 0x%08x bytes, exiting\n", iBytes); + exit(1); + } + +#if DEBUG + printf("MemResize: " + "Resized memory 0x%08x size 0x%08x\n", pmt, iBytes); +#endif + } + +inline void MemFree(MEMTAG *pmt) + { + if (fiMemFree(pmt) == FALSE) + { + printf("MemFree: " + "Could not free memory 0x%08x, exiting\n", pmt); + exit(1); + } + +#if DEBUG + printf("MemFree: " + "Freed memory 0x%08x\n", pmt); +#endif + } +#endif + +// ---------------------------------------------------------------------------- + +#endif + diff --git a/src/mkfont/hymem.obj b/src/mkfont/hymem.obj new file mode 100644 index 0000000000000000000000000000000000000000..9da993b0ba60eca65032e808c1b22686604c660b GIT binary patch literal 11783 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 literal 0 HcmV?d00001 diff --git a/src/mkfont/hystring.cpp b/src/mkfont/hystring.cpp index 9efcd3f9..090782ed 100644 --- a/src/mkfont/hystring.cpp +++ b/src/mkfont/hystring.cpp @@ -11,7 +11,16 @@ int fiStringEqual(char *psz0, int iCount0, char *psz1, int iCount1) { if (iCount0 != iCount1) + { return FALSE; + } + +#if 0 + if (iCount0 < 1) + { + return TRUE; // matching null strings + } +#endif return memcmp(psz0, psz1, iCount0) == 0; } @@ -19,10 +28,35 @@ int fiStringEqual(char *psz0, int iCount0, char *psz1, int iCount1) int iStringCompare(char *psz0, int iCount0, char *psz1, int iCount1) { if (iCount0 < iCount1) + { +#if 0 + if (iCount0 < 1) + { + return -1; // psz0 null, psz1 non-null + } +#endif + return memcmp(psz0, psz1, iCount0) > 0 ? 1 : -1; + } if (iCount0 > iCount1) + { +#if 0 + if (iCount1 < 1) + { + return 1; // psz0 non-null, psz1 null + } +#endif + return memcmp(psz0, psz1, iCount1) < 0 ? -1 : 1; + } + +#if 0 + if (iCount0 < 1) + { + return TRUE; // matching null strings + } +#endif return memcmp(psz0, psz1, iCount0); } @@ -190,3 +224,136 @@ mybreak: // ---------------------------------------------------------------------------- +int iStringTokenise(int iIndex, char *psz, int iLimit, + char **ppsz, int *piCount) + { + int i, j, iCount, ch, qu; + + iCount = iLimit - iIndex; + if (iCount < 1) + { + *ppsz = NULL; + *piCount = 0; + return iIndex; + } + + // scan past any leading whitespace + for (i = 0; i < iCount; i++) + { + ch = psz[iIndex + i]; + switch (ch) + { + case 0x09: + case 0x0a: + case 0x0c: + case 0x0d: + case 0x20: + continue; + case '/': + if ((i + 1) >= iCount) + { + break; + } + switch (psz[iIndex + i + 1]) + { + case '*': + for (i += 2; (i + 1) < iCount; i++) + { + if (psz[iIndex + i] == '*' && + psz[iIndex + i + 1] == '/') + { + i++; + break; + } + } + i++; + continue; + case '/': + for (i += 2; i < iCount; i++) + { + switch (psz[iIndex + i]) + { + case 0x00: + case 0x0a: + case 0x0d: + continue; + } + } + continue; + } + } + break; + } + + if (i >= iCount) + { + *ppsz = NULL; + *piCount = 0; + return iIndex; + } + + j = i; + ch = ((unsigned char *)psz)[iIndex + i++]; + + // quoted strings are handled differently + if (ch == '"' || ch == '\'') + { + qu = ch; // take note of the closing quote style + + // scan past quoted string, skipping escapes + for (; i < iCount; i++) + { + ch = ((unsigned char *)psz)[iIndex + i]; + if (ch == qu) + { + i++; // skip the closing quote + break; // end of string encountered + } + if (ch == '\\') + { + i++; // skip a possible quote if escaped + if (i >= iCount) + { + break; // backslash-newline encountered + } + } + } + + // string (maybe incomplete), so return start and length to caller + *ppsz = psz + iIndex + j; + *piCount = i - j; + return iIndex + i; + } + + if ((ch < '0' || ch > '9') && + (ch < 'A' || ch > 'Z') && + (ch < 'a' || ch > 'z') && + ch != '_') + { + // single char operator, so return start and length to caller + *ppsz = psz + iIndex + j; + *piCount = 1; + return iIndex + i; + } + + // scan past as much symbol text as possible + for (; i < iCount; i++) + { + ch = ((unsigned char *)psz)[iIndex + i]; + if ((ch < '0' || ch > '9') && + (ch < 'A' || ch > 'Z') && + (ch < 'a' || ch > 'z') && + ch != '_') + { + break; + } + } + + // valid symbol, so return start and length to caller + *ppsz = psz + iIndex + j; + *piCount = i - j; + return iIndex + i; + } + +// ---------------------------------------------------------------------------- + diff --git a/src/mkfont/hystring.h b/src/mkfont/hystring.h index 795d353f..c911a43b 100644 --- a/src/mkfont/hystring.h +++ b/src/mkfont/hystring.h @@ -14,6 +14,8 @@ void StringToUpper(char *psz, char *pszIn, int iCount); int iStringIsolate(int iIndex, char *psz, int iLimit, char **ppsz, int *piCount); +int iStringTokenise(int iIndex, char *psz, int iLimit, + char **ppsz, int *piCount); // ---------------------------------------------------------------------------- diff --git a/src/mkfont/hystring.obj b/src/mkfont/hystring.obj index f30ca48315d7821199aef7c32ec04f045809acd5..7e05b429c94d29f3c3950a9003902e5ccfc53935 100644 GIT binary patch delta 2616 zcma);ZEO@(6o%i~-7f8POIunfAoPp2TUy)wt}Ue$g+&q8U|`WGUsBpyOp54k5YlDQ zjmUPzh&S<%LY4Rd#;6G*1eH)VK~ZC33?>?tAEIqqlWJD8Mxeg;?rdA|kMrZ1cg~zS z_ndR*&Yjry&mYTMtyxfJS=HX*1J)hNYcDLQ1uPm+yb$WBIkd5)@k1-{Y#k7A0l99V z2>VfvHCr0Db#4uJSFKCC0$vJ-@6ge%88;(G8LMw!w4q~n_pY8^QKWU4Tbi0q?A8vO zOWaPMyAU}h1NtG#Y#lT$Qgz1-wOZb2rZJkK`+OaQ;odvQ_bj+WoEHuOkOZ}++# z4|VqTJSr|&%EYv+e1>lJ{wH*^Pb|&aymEAWd_2Sm+V(tH3&xBqQ^$igUM4d)dkT4# zGOnyW%XWl&L(>0B#(!t{#D%PRmC+*%CF{(^QA6pdVDk!&rQ*L+O}KwM5xw7>dPFwJKXRRa8nHUdlzv*lZ{rzf-MHwm%J}qaX`d zt!%}H(osgWO4$||N=F^loyyi|C>?E7E0yh5L+J>f7_S{L&j=<)W25B>e?h%JJMK@# zA}O)4eopihJ9yroe)j@e0c`F^U)t~Ci8vc})L?GK7NG5`| z{^h!M!2fe}U*zYyP%h~RZ5w`Fc_d?lrg$L9bb`s)M_ODCF7slPhmU4u1nSN|glQB#qXC|Tym-59_p-e21;pw$hxzVLHn2OjF{%o@>-qv5N9SC09 z7rBJcbW#sxlX)Q%<6Ri}bok;m6-bsPHrJO#x5_s8lX3s(L^7Up{T4m$ADc)e78$Dy zSxI}iPqpyMfBGG1pXfCknQ3-w@Cqx+%*@D546z|xG!d7%N11$|%7~ zBx%K2avIK)+4zdI;Wu(Ru95|)Wx}&iN6v4S-1i&p4l8;Zy!m`Apwio8vIX_jF*^$M&Z@4$L; z6?(`3_KSIB$uT2>Tn(lK6a!h7Uq43b;$1=)qa$R1eO z{_V&kAHqy>2WrWkXd%PsAa|jY+>LIs4`DKbedJ#3C!^py!6Ij&;<&$kIdw&MW^>)} zoTEhhLzFlgOx6Wrg=2|L?&CG|c_H=dHSw%twoUHga^F5(wEPG0uA|(P>lPOsUD{mH z=Cqp@xRGTlJbo#U<;(e#RVl6j%xj}KvtzGIoKyup9DHjWt3A4+mtraaUdqs@C za|f@{i?97LYzvy3H>2E>4c; zZ1$-af2zf+7R02*%;S$%CspnGwIdA})UXI*H&;V0`y@2r0T@l8TY delta 924 zcmZ9LO=uHA6vzLwN%}FdN+8-&L;7Jg(z@Gh%x-oQZ3Pb&Y(~HA>2FgwSk+nTQPyk;OP$O18-E2G#0KfJEOZ$Ls9oUMaXvgtUV{E)Id$#LD zEfwG}){XLVDZCqvO2!XosZ|sMrtMS~#A2Y?be&8DjhertzH2aTx~@g((38qWT}$Wu zLymZB!+7MAL@O5*Q7-P2#1d1Ba?3tRH1oD?%I)+?;uRC0iTA7eBw_J+4CP#(BvzPg zV4f3S)({f!m=3DM4?anJVLG7Pnoklxm<}oT(-t`yL)jprcvbr4dQ1n>)S)KbwA6)mdhU7qW) z$a6zwICVqx@P+W*>_CV+AjI5S%;smWpU+>JF6J*?EKOdX$zLtnNn>iPKm|+JzO_-= z>Pvb(665q-Yq!^*RV~GiRz{)Xb zmDMDzvs$1|H?ixS_qb}*+AD=ET#i>*9h7m>G~u?N@j4H3b10QG)42AZ*^l|n#%p1` y=DYj5A+Ji|)aD#ECVh818gKiBfTCGlROy8kB_kJ(dcVrQ<1=U|_c6pZ+4uu?kc!U$ diff --git a/src/mkfont/main.c b/src/mkfont/main.c new file mode 100644 index 00000000..4bee387a --- /dev/null +++ b/src/mkfont/main.c @@ -0,0 +1,1124 @@ +/* Main-level NOS program: + * initialization + * keyboard processing + * generic user commands + * + * Copyright 1986-1995 Phil Karn, KA9Q + */ +#include +#include +#include +#if defined(__TURBOC__) && defined(MSDOS) +#include +#include +#endif +#include "nos/global.h" +#include "nos/config.h" /* Nick for MTHRESH */ +#include +#include "nos/mbuf.h" +#include "nos/timer.h" +#include "nos/proc.h" +#include "nos/iface.h" +#include "nos/ip.h" +#include "nos/tcp.h" +#include "nos/udp.h" +#include "nos/ax25.h" +#include "nos/kiss.h" +#include "nos/enet.h" +#include "nos/netrom.h" +#include "nos/ftpcli.h" +#include "nos/telnet.h" +#include "nos/tty.h" +#include "nos/session.h" +#include "nos/hardware.h" +#include "nos/usock.h" +#include "nos/socket.h" +#include "nos/cmdparse.h" +#include "nos/commands.h" +#include "nos/daemon.h" +#include "nos/devparam.h" +#include "nos/domain.h" +#include "nos/files.h" +#include "nos/main.h" +#include "nos/remote.h" +#include "nos/trace.h" +#include "nos/display.h" +#ifdef ZILOG +#include "z80/asm.h" +#include "uzi/devio.h" +#include "uzi/xfs.h" /* for xfs_init() and xfs_end() */ +#include "po/messages.h" +#endif + +extern struct cmds Cmds[],Startcmds[],Stopcmds[],Attab[]; + +#ifdef MODULE +#define STATIC +#ifndef MSDOS +extern char Escape; +#endif +extern char Prompt[]; +extern FILE *Logfp; +extern time_t StartTime; +extern int Verbose; +#else +#define STATIC static +#define MODULE_Badhost +#define MODULE_Hostname +#define MODULE_Nospace +#define MODULE_Cmdpp +#define MODULE_Display +#define MODULE_Cmdline +#define MODULE_main_exit +#define MODULE_Prompt +#define MODULE_Logfp +#define MODULE_StartTime +#define MODULE_Verbose +#define MODULE_main +#define MODULE_keyboard +#define MODULE_pass +#define MODULE_passchar +#define MODULE_dorepeat +#define MODULE_keychar +#define MODULE_dodelete +#define MODULE_dorename +#define MODULE_doexit +#define MODULE_dohostname +#define MODULE_dolog +#define MODULE_dohelp +#define MODULE_doattach +#define MODULE_doparam +#define MODULE_doescape +#define MODULE_doremote +#define MODULE_dopage +#define MODULE_dodebug +#define MODULE_dowipe +#define MODULE_donothing +#define MODULE_logmsg +#endif + +#ifndef MSDOS /* PC uses F-10 key always */ +#ifdef MODULE_main +STATIC char Escape = 0x1d; /* default escape character is ^] */ +#endif +#endif + +#ifdef MODULE_Badhost +char Badhost[] = "Unknown host %s\n"; +#endif +#ifdef MODULE_Hostname +char *Hostname; +#endif +#ifdef MODULE_Nospace +char Nospace[] = "No space!!\n"; /* Generic malloc fail message */ +#endif +#ifdef MODULE_Cmdpp +struct proc *Cmdpp; +#endif +#ifdef MODULE_Display +struct proc *Display; +#endif +#ifdef MODULE_Cmdline +char *Cmdline; /* Copy of most recent command line */ +#endif +#ifdef MODULE_main_exit +int main_exit = FALSE; /* from main program (flag) */ +#endif + +#ifdef MODULE_Prompt +STATIC char Prompt[] = "net> "; +#endif +#ifdef MODULE_Logfp +STATIC FILE *Logfp; +#endif +#ifdef MODULE_StartTime +STATIC time_t StartTime; /* time that NOS was started */ +#endif +#ifdef MODULE_Verbose +STATIC int Verbose; +#endif + +STATIC int keychar(int c); +STATIC void pass(char *,int len); +STATIC void passchar(int c); + +#ifdef MODULE_main +int +main(argc,argv) +int argc; +char *argv[]; +{ + FILE *fp; + struct daemon *tp; + int c; + char cmdbuf[256]; +#ifdef ZILOG + long hinit = MTHRESH*2; +#else + long hinit = 102400; +#endif +#ifdef LARGEDATA + unsigned chunk; + void **list; +#endif +#if 0 /* Nick */ + struct proc cmdproc; +#endif + +#ifdef ZILOG + amess("kernel: parameters:"); + if (argc < 2) + { + amess(" none"); + } + else + { + for (c = 1; c < argc; c++) + { + abyte(' '); + amess(argv[c]); + } + } + acrlf(); + +/* Kdebug = 1; */ +#endif + + StartTime = time(&StartTime); + + while((c = getopt(argc,argv,"f:s:d:bvh:")) != EOF){ + switch(c){ + case 'h': /* Heap initialization */ + hinit = atol(optarg); + break; +#if 1 /* Nick */ + case 'm': /* Memory threshold */ + Memthresh = atol(optarg); + break; +#endif + case 'f': /* Number of files */ + Nfiles = atoi(optarg); + break; + case 's': /* Number of sockets */ + Nsock = atoi(optarg); + break; + case 'd': /* Root directory for various files */ + initroot(optarg); + break; +#ifdef __TURBOC__ + case 'b': /* Use BIOS for screen output */ + directvideo = 0; + break; +#endif + case 'v': + Verbose = 1; + break; + } + } + /* Get some memory on the heap so interrupt calls to malloc + * won't fail unnecessarily + */ +#ifdef LARGEDATA + list = calloc(sizeof(void *),(hinit / 32768L) + 1); + for(c=0;hinit > 0;hinit -= chunk){ + chunk = min(hinit,32768U); + list[c++] = malloc(chunk); + } + while(c > 0) + free(list[--c]); + free(list); +#else + free(malloc(hinit)); /* may be free(NULL); */ +#endif + + kinit(); + ipinit(); + ioinit(); + sockinit(); +#if 0 /* Nick */ + Cmdpp = mainproc(&cmdproc, "main"); +#else + Cmdpp = mainproc("main"); /* "cmdintrp"); */ +#endif + +#ifdef ZILOG /* Nick */ +/* abyte('A'); */ + /* set up temporary polled output to catch initialization errors */ + stdin = diagopen(1, "rt"); /* can't fail */ + stdout = diagopen(1, "wt"); /* can't fail */ + _printf(_("\n")); /* really just testing the temporary polled output */ + fflush(stdout); /* really just testing the temporary polled output */ + +#if 0 /* temporary */ + _printf(_("performing interrupt flag tests\n")); + fflush(stdout); + + disable(); + if (istate()) + { + enable(); + _fprintf(stderr, _("disable() returns istate() = 1\n")); + fflush(stderr); + } + + enable(); + if (istate() == 0) + { + _fprintf(stderr, _("disable() returns istate() = 0\n")); + fflush(stderr); + } + + disable(); + if (dirps()) + { + enable(); + _fprintf(stderr, _("disable() returns dirps() = 1\n")); + fflush(stderr); + } + + enable(); + if (dirps() == 0) + { + enable(); + _fprintf(stderr, _("enable() returns dirps() = 0\n")); + fflush(stderr); + } + + restore(0); + if (dirps()) + { + enable(); + _fprintf(stderr, _("restore(0) returns dirps() = 1\n")); + fflush(stderr); + } + + restore(1); + if (dirps() == 0) + { + enable(); + _fprintf(stderr, _("restore(1) returns dirps() = 0\n")); + fflush(stderr); + } + + enable(); + _printf(_("completed interrupt flag tests\n\n")); + fflush(stdout); +#endif +#endif + +#if 0 /* Nick */ + Sessions = (struct session **)callocw(Nsessions,sizeof(struct session *)); +#endif +/* abyte('D'); */ + Command = Lastcurr = newsession("console",COMMAND,1); /* command interpreter",COMMAND,1); */ +/* abyte('E'); */ + Display = newproc("display",350,display,0,NULL,NULL,0); +/* abyte('F'); */ + printf( +#if 1 /* Nick */ + "Hytech " +#endif + "KA9Q NOS kernel\n" + "Version %s\n" +#ifdef ZILOG + "Compiled for Zilog Z8S180 CPU\n" +#endif +#ifdef CPU386 + "Compiled for Intel 386/486 CPU\n" +#endif + "\n" + "Copyright 1986-1995 by Phil Karn, KA9Q\n" +#if 1 /* Nick */ + "Copyright 2003 by Nick Downing, Hytech\n" +#endif + "\n", + Version); + fflush(stdout); +#ifdef ZILOG + abyte('F'); + xfs_init(0); +#endif + abyte('G'); + usercvt(); + /* Start background Daemons */ +/* abyte('H'); */ + for(tp=Daemons;;tp++){ +/* abyte('I'); */ + if(tp->name == NULL) + break; + newproc(tp->name,tp->stksize,tp->fp,0,NULL,NULL,0); + } +/* abyte('J'); */ + Encap.txproc = newproc("encap tx",512,if_tx,0,&Encap,NULL,0); +/* abyte('K'); */ + if(optind < argc){ + /* Read startup file named on command line */ + if((fp = fopen(argv[optind],READ_TEXT)) == NULL){ + _fprintf(stderr, _("Can't read config file ")); + perror(argv[optind]); + } + } else { + fp = fopen(Startup,READ_TEXT); + } +/* abyte('L'); */ + if(fp != NULL){ + while(fgets(cmdbuf,sizeof(cmdbuf),fp) != NULL){ + rip(cmdbuf); + if(Cmdline != NULL) + free(Cmdline); + Cmdline = strdupw(cmdbuf); + if(Verbose) + _printf(_("%s\n"),Cmdline); + if(cmdparse(Cmds,cmdbuf,NULL) != 0){ + _printf(_("input line: %s\n"),Cmdline); + } + } + fclose(fp); + } + /* Now loop forever, processing commands */ +/* abyte('M'); */ + for(;;){ + printf(Prompt); + fflush(stdout); + if(fgets(cmdbuf,sizeof(cmdbuf),stdin) != NULL){ + rip(cmdbuf); + if(Cmdline) + free(Cmdline); + Cmdline = strdupw(cmdbuf); + (void)cmdparse(Cmds,cmdbuf,Lastcurr); + } +#if 1 /* Nick */ + else + { + kwait(NULL); /* stdin doesn't exist or has been closed */ + } +#endif + } +} +#endif + +/* Keyboard input process */ +#ifdef MODULE_keyboard +void +keyboard(i,v1,v2) +int i; +void *v1; +void *v2; +{ + int c; + int j; + + /* Keyboard process loop */ +loop: +#ifdef ZILOG + c = fgetc(Current->keyboard); + while (c == EOF) + { + kwait(NULL); /* don't hog if there's no keyboard stream */ + c = fgetc(Current->keyboard); /* see if it's now been opened */ + } +#else + c = kbread(); +#endif +#ifdef MSDOS + if(c >= 256){ + /* Pass all special characters to app upcall */ + if(Current->ctlproc != NULL && (c = (*Current->ctlproc)(c)) == 0) + goto loop; /* Upcall took them */ + + c -= 256; + if(Current->scrollmode == SCROLL_INBAND){ + /* In inband scroll mode, pass escape sequences + * for cursor control keys. Otherwise fall thru + */ + switch(c){ + case CURSHOM: + pass("\033O\0",3); + goto loop; + case CURSUP: + pass("\033OA",3); + goto loop; + case PAGEUP: + pass("\033[5~",4); + goto loop; + case CURSEND: + pass("\033OU",3); + goto loop; + case CURSDWN: + pass("\033OB",3); + goto loop; + case PAGEDWN: + pass("\033[6~",4); + goto loop; + case CURSRIGHT: + pass("\033OC",3); + goto loop; + case CURSLEFT: + pass("\033OD",3); + goto loop; + } + } + /* In local scroll mode, we can get here with cursor + * control keys + */ + switch(c){ + case CURSHOM: + dhome(Current->output->ptr); + break; + case CURSUP: + dcursup(Current->output->ptr); + break; + case PAGEUP: + dpgup(Current->output->ptr); + break; + case CURSEND: + dend(Current->output->ptr); + break; + case CURSDWN: + dcursdown(Current->output->ptr); + break; + case PAGEDWN: + dpgdown(Current->output->ptr); + break; + case F10: /* F-10 (go to command mode) */ + if(Current != Command){ + /* Save current tty mode and set cooked */ + Lastcurr = Current; + Current = Command; + alert(Display,1); + } + break; + case F9: /* F-9 (resume last current session) */ + if(Current == Command && Lastcurr != NULL){ + Current = Lastcurr; + alert(Display,1); + } + break; + case F8: /* F-8 (next session) */ + for(j = Current->index+1;j != Current->index;j++){ + if(j >= Nsessions) + j = 0; + if(Sessions[j] != NULL){ + Current = Sessions[j]; + alert(Display,1); + break; + } + } + break; + case F7: /* F-7 (prev session) */ + for(j = Current->index-1;j != Current->index;j--){ + if(j == -1) + j = Nsessions-1; + if(Sessions[j] != NULL){ + Current = Sessions[j]; + alert(Display,1); + break; + } + } + break; + case F6: /* Toggle scroll mode */ + if(Current == NULL) + break; + Current->scrollmode = !Current->scrollmode; + dscrollmode(Current->output->ptr,Current->scrollmode); + break; + case F5: /* Kick current session */ + if(Current != NULL) + dokick(0,NULL,Current); + break; + case AF1: + case AF2: + case AF3: + case AF4: + case AF5: + case AF6: + case AF7: + case AF8: + case AF9: + case AF10: /* Alt-F1 thru Alt-F10 */ + c -= 103; + if(c < Nsessions && Sessions[c] != NULL){ + Current = Sessions[c]; + alert(Display,1); + } + break; + case AF11: /* Alt-F11 or Alt-F12 */ + case AF12: + c -= 128; + if(c < Nsessions && Sessions[c] != NULL){ + Current = Sessions[c]; + alert(Display,1); + } + break; + default: /* else ignore */ + break; + } + goto loop; + } +#else + if(c == Escape && Escape != 0 && Current != Command){ + /* Save current tty mode and set cooked */ + Lastcurr = Current; + Current = Command; + alert(Display,1); + goto loop; + } +#endif + passchar(c); + goto loop; +} +#endif + +#ifdef MODULE_pass +STATIC void +pass(s,len) +char *s; +int len; +{ + while(len-- != 0) + passchar(*s++); +} +#endif + +#ifdef MODULE_passchar +STATIC void +passchar(c) +int c; +{ + int cnt; + + /* If a normal-character upcall exists, give it the character. + * if the upcall returns 0, don't pass it to the regular tty editor + */ + if(Current->inproc != NULL && (*Current->inproc)(c) == 0) + return; + + /* Ordinary ASCII character, hand to tty editor */ + if((cnt = ttydriv(Current,(char)c)) != 0){ + /* Input ready to hand to process */ + fwrite(Current->ttystate.line,1,cnt,Current->input); + fflush(Current->input); + } +} +#endif + +/* Standard commands called from main */ +#ifdef MODULE_dorepeat +int +dorepeat(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int32 interval; + int ret; + struct session *sp; + + if(isdigit(argv[1][0])){ + interval = atol(argv[1]); + argc--; + argv++; + } else { + interval = MSPTICK; + } + if((sp = newsession(Cmdline,REPEAT,1)) == NULL){ + _printf(_("Too many sessions\n")); + return 1; + } + sp->inproc = keychar; /* Intercept ^C */ + /* Set enough buffering to handle an entire screen so it'll get + * displayed in one quick update when we flush + */ + setvbuf(sp->output,NULL,_IOFBF,2048); + while(sp->inproc == keychar){ /* ^C will clear sp->inproc */ + _printf(_("%c[2J"),ESC); /* Clear screen */ + ret = subcmd(Cmds,argc,argv,p); + fflush(sp->output); + if(ret != 0 || ppause(interval) == -1) + break; + } + keywait(NULL,1); + freesession(sp); + return 0; +} +#endif + +#ifdef MODULE_keychar +STATIC int +keychar(c) +int c; +{ + if(c != CTLC) + return 1; /* Ignore all but ^C */ + + _fprintf(Current->output, _("^C\n")); + alert(Current->proc,EABORT); + Current->inproc = NULL; + return 0; +} +#endif + +#ifdef MODULE_dodelete +int +dodelete(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int i; + + for(i=1;i < argc; i++){ + if(unlink(argv[i]) == -1){ + _printf(_("Can't delete %s"),argv[i]); + perror(""); + } + } + return 0; +} +#endif + +#ifdef MODULE_dorename +int +dorename(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + if(rename(argv[1],argv[2]) == -1){ + _printf(_("Can't rename %s"),argv[1]); + perror(""); + } + return 0; +} +#endif + +#ifdef MODULE_doexit +int +doexit(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int i; + time_t StopTime; + struct session *sp; + + StopTime = time(&StopTime); + main_exit = TRUE; /* let everyone know we're out of here */ + /* Alert each session task that we're aborting */ + for(i=0;iproc,EABORT); + alert(sp->proc1,EABORT); + alert(sp->proc2,EABORT); + } + reset_all(); + if(Dfile_updater != NULL) + alert(Dfile_updater,0); /* don't wait for timeout */ + for(i=0;i<100;i++) + kwait(NULL); /* Allow tasks to complete */ + shuttrace(); + logmsg(-1,"NOS was stopped at %s", ctime(&StopTime)); + if(Logfp){ + fclose(Logfp); + Logfp = NULL; + } +#ifdef ZILOG + abyte('X'); + xfs_end(); + abyte('Y'); +#else + clrscr(); +#endif + iostop(); + exit(0); + return 0; /* To satisfy lint */ +} +#endif + +#ifdef MODULE_dohostname +int +dohostname(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + if(argc < 2) + _printf(_("%s\n"),Hostname); + else { + struct iface *ifp; + char *name; + + if((ifp = if_lookup(argv[1])) != NULL){ + if((name = resolve_a(ifp->addr, FALSE)) == NULL){ + _printf(_("Interface address not resolved\n")); + return 1; + } else { + if(Hostname != NULL) + free(Hostname); + Hostname = name; + + /* remove trailing dot */ + if ( Hostname[strlen(Hostname)] == '.' ) { + Hostname[strlen(Hostname)] = '\0'; + } + _printf(_("Hostname set to %s\n"), name ); + } + } else { + if(Hostname != NULL) + free(Hostname); + Hostname = strdupw(argv[1]); + } + } + return 0; +} +#endif + +#ifdef MODULE_dolog +int +dolog(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + static char *logname; + + if(argc < 2){ + if(Logfp) + _printf(_("Logging to %s\n"),logname); + else + _printf(_("Logging off\n")); + return 0; + } + if(Logfp){ + logmsg(-1,"NOS log closed"); + fclose(Logfp); + Logfp = NULL; + free(logname); + logname = NULL; + } + if(strcmp(argv[1],"stop") != 0){ + logname = strdupw(argv[1]); + Logfp = fopen(logname,APPEND_TEXT); + logmsg(-1,"NOS was started at %s", ctime(&StartTime)); + } + return 0; +} +#endif + +#ifdef MODULE_dohelp +int +dohelp(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct cmds *cmdp; + int i; + char buf[66]; + + _printf(_("Main commands:\n")); + memset(buf,' ',sizeof(buf)); + buf[64] = '\n'; + buf[65] = '\0'; + for(i=0,cmdp = Cmds;cmdp->name != NULL;cmdp++,i = (i+1)%4){ + strncpy(&buf[i*16],cmdp->name,strlen(cmdp->name)); + if(i == 3){ + printf(buf); + memset(buf,' ',sizeof(buf)); + buf[64] = '\n'; + buf[65] = '\0'; + } + } + if(i != 0) + printf(buf); + return 0; +} +#endif + + +/* Attach an interface + * Syntax: attach 1fPH-M>umT}TRRyFG|)WHFDCP^1zpQ%mDY?%YiNfjy?aM>ju)XeOX zEb@4?tQT*1c4!B)pUyZ##J5ldnRW3Dj+(H=dDdfR`<>+EuPjxor{ z)1RM1=f!Y>l9kQ&oXb(p)1E*{#%CX|yU%*q`P1yY`$&qN{0xYgz#&Xv9_=t(F26{$ zbapgwQ)YEVPogkR3J9YwG4^tSTru0KWRBYcVESjYxRgE~>%w^(m%BtNaXbtc znzROIG#pAA{6W;f0Vqx{8LK~ryV|V8RD^sQ@?}tDdxx#P+1{~l-vfPliJ`EPxH4nL z35Jdudn(WyUqqc2W|8Ln#7s|mqj-4+UM`O}znso@eW)^dFw|B!%v1?qE6|>bS=5;_VVz^oO&rFasyKnK zI}#ILmr2nr&$Hqg4$)V^Y~~WpK*=<}eB%M$$h?Mem4|Un_=Z%;c^nHUQBqer%*}RQ z#Gt?eIchXd$ciCbo+NkEcx*~mMI6bG=$FLYM+T)N{qCH*Ql?Zde zXp+>zwOr66xKh<&_L-T$!T%s=)w1TueonSLWB3MBRuYc~P+G;(J>-4A!y94dK8@Q& z=DAoV&S5j_BDwE(xVw4FQLD~K62lI+R9Q#+k`SedJ3c z&Wybq3=Mo1FI!0CJ(~Pv0M(ziboNNX4w%GC5J2}>RWpS;bc>Jq(v(%c_ zuVf5nczrtrNqCiw#13l@p1C2v=7A^HL^ehCI`k`S@nA{sIHe!mj6AOS9_n<@cg8Uo zF_;R*#F5bs9JzRyAwJM6Hz(8xBs{n)K4$5S}w)tngGEQ?XADw~XT z#@S_#5t4O1Ky(Ol`*+}UIWB7zT}=c;Lku$XP+9?p4^7rU%iMg#4SJ%>eTmb%&%SnwoquV z*_dBFj&C--L1=$&V}5me4VFrgH*RBobr@f6x?gB-w=uuUOr4oH6F9)Hy-r&vlc!Ov zCcfc2s7dUhvT5~GvHG1;8DGl9S3hZ8aPw3i^iIc4?le-SGbd9vUO8o5nEJ`B&!9c2 za4_)67RXLcHLwX&qv@~E4JBL?XIh@Cf>v^sv@vO&d(Jvb`jmBU(mFqJ^qeZ(G8H>J z@swvWcJ^RkDswJ1Wu2e2&P>J5K;`ojPX{J5=WR{u%YzW~6T0A=y^G)rnN3Ch=OmaGQ0nOJt zHb}CDj~W?Li|Btw&AaF8kUw#>MHN;}SuN0{32bN3jSFT>nxIkDs~={!V`tFC>9D^7 zt=$-`ykj96nX2$wXuWU+s%*LU@*9`(GLGf)qvdsa1|NQ`z4^k*ylAWj_j zz`j$l^RVPJ1Wb!r>Wx_{lhPFQJ8wwr!mC^HZM9M*;3*uQj`~ug1!gfChRHG7sXy9i zr(m>QaF=qUotkO1Yr!@ZyD;zT%@e;}U05ii;H44kC%4mD>rnojb(+5STJ4l|T8wad zDt7wD*r|EbUlUti@MccW`+CKsb#~(D+12A!ul^axKyMk(gArB)@6oqRWlm2#?U~G+ z#=v{@z{k8oV#rv(Z_rWdfVSV*l8JF{unKRSYA8XoIAN@TB zlb-6>Xv*?I=45wqFrm%NtFm}`fL2s`G2J0);&_wsVmJ_{%+4kZlCO*mA80c3qDf-F z-Dfr-Xg+t0U(sc2&mH4eay7;;+Y*~NTJL#B{gl--)m=F`O-@iMK*=;sb@(Qw1}I)o zVojWy53%ONlOnTFJMpB59B(O!3I{zpSUf4M%scix8k#=FFW^odBWY@ywRTR4ETgk; zO3Iv`P9Eboe5a-bK14Y2GtZ&2LsuKg2IxBWRpYPEC_w$}#K@@qVfzdC)8=@j;BIsO;0W z*BwB>I9P34m8IyXRC}t)bd_qo1l1ZX#{vJzzjKX}hD?O2P z&#?v?uMw|HO^GKthLaJ}{xprXSoh16qMzcrQ_Uz~KTW|O9HE&WI&(B_kF!mw8!PxrQ%H7I+wo#fg_VwKUL<>R#Sf$_N0~c4g&J6jRUvuMqvz(#)M-7} z9W2BsqMaX$bC*QhqR?uCSA3Cf4p|4d2}3xHPUqRMRnMGFPfio({KuD^JMI0w?dMP zF^_Db-qxwIgyfXYQ%=IXFB{XK*?ISTiyrFg7^)hpR8E{mj(Bn^cG4SrXo*Qe_wob4w8b9+#%)xK`ZHitBKga}wAG#hcE8Y`1vV+zH-XUuTGV%)(w_i( zkI??rq5T5by;9@Xz;q2yjnQ-=ut%iE7GTGOFAA(*Xa|95ohN{4ogV02Ta%a4lr%CUjx&v`F%=#R_d++rfD|;(;CEpy<4Q* z3QSul4@_${1nh1p9RqfsNO_x6It}bSLVL)eeH7Tcq{g2DyH83#159i6*TA%eegy2D z!uNlH?GV0t44>9-EikQL8!)ZQR$%Xt8aDyEPik0BX)iFXOV*+719ntu8DKmIY*D`krt4k+)*-YSzo9J$ru}psuvetC9T?Bbs+9$d zr)w>$2bh+!A6TW(?gaLN)c777(3(3M?$N>PFLU9WdS6CBU>iG>Z$99sdfq7|%{-UF0g~Yu|^&sd~QcK&kN<9urwfYKRt$GsBubu&{Q_ll7s22en z)h_|@xIr{t3AjjI3bkZ zJm7rwCBTL1S-{2WCBP->M}W)KzX7gL=K)u$8mu&LP>TQqY6akG)d_g1+5xy$?E$<@ z?FGC-;s4{+mEspz|A5!1cLMsyn42e?92c-dkt zU_f0CxLUOVUaGDKT&vy$c)3adUa9s0u2WNh*QgHyu2&BNwyKW-ZcrZwY*U{G+@u}{ z+@d}Qc%%9%;7#gzz&EKE0E6nE06XM#Jgi;?-l-N~h3isF03&#zky6{$wSZBz2{0z> zx>9?ASE@e&tdjggsmFjftIq+>SN{WWfqDvXp?VH*vHC9HGW7$%73wE|m#EhOSE*kE zu2HpE7cWzb054Z70k2Y50bZ@P0A8b_fY+)%z*cn^;3oAIz%A;p0Jo}d0p6f~1bCzR zN5GrZKLc)4zXa@14RG18S_WvTRe%w-6>z(X1IE?60Tb%|fGPDUz>GQ$*sERy+^x<4 z?oq!7yjfLY9eImd0hm>7fNxd3fc@$Nfcw;^0CVbVfCK990r#u#0p`^iz=Nt8k$p&Q z2OL%h0B=`!0gkE%0mszifCcqAz{Bb(z$5Bqz`N9M0FSDT2nFv@VZe8)w*bCNjR4-Q z?gX4r?*qI?eGc$G^;5t}oTM_FI0yKC^*g{1s!GJl2UQ*5pQzPJq?9R0eRBdNbf<>KNeV>VCj0)dPT6$;zPA$ASCRX94Tf7Xjy~9|1P2 zDukXEwFq#bS_8O9Z3A4U@O2Kz$2Z3y`K^Gf)e*qU)MJ2`tFHrIss0Y|D)k+}_3B4} z*Q(b5H>#flws9K5m;8V?s_OxR3SZ5Hx8Mmpyag|=z$_>L?ob~9jH`zMcdAbU_NZq7 z)9OXQUiGhlyVdUj_oymF%v;n#z+2Taz&>>u;68N)V2;myaAt~~jee$c8et93ed@8N zTVd!2NHYcYnStH}tU^JHr2YY5)##o{644b*E0%IofUjKQj%)pdZ4DvBq8 z!NI{{{Ht~D2E5i~d~jc2Xt)r-KP(F^(0X`n>(;}8d?9yeEHFG^?)lG9V}97J^i?l> zGXTHE?yVB$TY^ni>9L4oI!q%mLJNG79zb(2x8|n>o?=Y54wy0B0>Rb* zR?0f(7t?i)=1R;qfcpTSuG)6;!^=u7bd4>MvVUK+kdGFkv~ug14wGMZn3(A>HpZtU!wf*{S|PhSFZxy5GL6Zxf!n!Xy-=Iy`!Q%+(=^|Y!Pm@~rYTxCP0X*x$M6-i z8v=ZFP#`}vfZFRvh7Hyqc=PahL5PF5qWgmgutOu`@Tj4E0hADB=@8!SF&4=0<3DKj z_YERqs6%7>^ZW33?8s1|?{FYDIyyWW=qm&Y!?)#zZt$aJ;TbE8+Po+k4)DJk-CWeL z$oB_iNqcA)GG`Y?Sy$kb#U~EH8FrjObL&}BS!aR#et1X+gq8+sZZk5 zB9rn_VAY6G#^X4mda^zO%y=AgDz7wNDLz`KI8cAgWSwJjZm>nu;Ror@a(U|AV#|Gi zZ}l*fQ@`iKcm-9}UO~)u$p5TOzJRLQCZ7j3yG=fe61Pn%#U@o^lX|g9D#tGexx?3} zP%xw=@#^XT|LGL(ukvI1mrjm3Y~!bGw0QHTD$b6|kwbeA%xxNKtW85qOtaG+o$#=p z&${OhQFy4sa~>?#>M49$kZUS+9G`0Bea34TNwn8|4H)ARt;BJyR7(M?vCc8yWY=o3 zs!@}Xe#V*Pc)@L~K6#rJja3r4%HzjYNMIY3^t)o@!W&|2nZ|caVCUOY%b(Fd zT0LULKwCfW^WB)?Jjr|N)@P`j(W*tTa*tYMm$US@MRWPJx&CuHu{Es|u~|(valBqz zjas+JCfn$zH7Q@Jmw=B}V`-(^Y6JfjtGxm#T0>&Ch8Ig~O4sIkJ5tJ{^pd!0&P;K( zp5eo4es9AaWAT8R3)^q;(U}mB9B0pjI#5FGT4YPewX6jRJQhQIs%49&6M$dfUfV`z zOqG%>R7q0PB8Q0!Rdl#-Uv8hIMS->Zu9hV&uy!oKK;*3b@)D?2u5Vvt$UWciE`oi5 ze!j=f=5(t2FMByOXpM)6EzGKeG5z6W(OEMA`nL2^&gUDL3NG_;4{BvOC&_#7xX^ zT=x%WqZ?37XQQpaX3s`>>SAohZg?gAHQ6W^s#&wq0TehMd9iF1|8s0#9-onB%u=2b zQWxD}Vt#qK=X!*aRiCl8bwbLj{d2u=@{ay3t?Nhj?fu2i*Hbg_G7$a#b?lHm%qZ9Q zkBr!A;7@x$-kP*NzpwhzI>oPRWDE%dr^?L`Ld$yjV0dTsZuhsHr{h;Py?jSsBeNI!TL9td!SF)kI zUpOQ|zqpg*D^Yv)-+!1rhsEsi+6r8c*MTEU7}iTD0MWkgv;S5}->DU4@zv4Hb73DQ zVS*8`r`eHF{8y&w8!7IWOIL%->oK-z41ec)S|8Tdxglqap`9dIE|KH182hCy#-$TyIAX1GCP;s$7(?JdiV`x+UYYZM$T19J-1cGhdhjhwCcU@8vcaQ z7;VTn($Ao?hgy-3FTK72f1#o4mC_tnujewM<1D1{xhIQqcn-~rJk$iI4>m>H+3i2n zM_c2qWW=TY$ZZYbajZd|inX{P6)(3n{2+ThVL+_|Ytf3ve|7<%YrdmM9fr=@S7{Au z#ojLH($5v(KevzJKM={u3p|+11A>=&_#Hyy=_N1IFV29{dGWBJh^_bpwDfup=$eQ6 zP}-yTtb;x~gfV+4cc_2lh~Qcuq7RESVr~sf+u}1DUfLgxhVwuv)o=@B2}NXnOzOD7 z{{&t0P(w=N`(%$nLnb-;`hnCXPJMX&dkMwZu(Yj5g_Eb9yo`p6fR}1`8$=d0d|tQ> zaLuE9eJC-ph2f?=wk)$L; zr(E~;a>`~b<+g^|0ZFED&x>}>4&ZEVOy6sY?pN!kw}PnqmF0U-3=95N*gb7+W2ABQ zeZ%$FwK|k6j@SARjo9_1EmHbS5GO_2+Hn2mt4nI(oUpuBNu<@awsK=(w{E<*blfkq z$Lv!g&3G@uMwz$VkHrfPW5b} zMq1uOt+?v*XCFRGa*5Y*J@9(26}nO%Iu*roXjfO?u@UlUw3<^uE=YFf4hhs*&q~^u z*B1pEYcPTdk29C4Q?Zs9S!xit<6#r-y%LS7!-=o_4F7B-@zC`X7tO*$iKP|;L0x6* z+$`3hR^;Q4QGAWXCDxdad#}gn@`byO57w?o?qeXa_N%LnfYMxyc(%i;>zKIg!KeOf7 zkJ@>rJowN-g#>N{q$iY^5x9 zSjlOPYq402np0M|2S0j2a>-0#Te_#KqzpbSe@#zmBH?j*N?FBPYwTM3kGrQ!Kq}4@ zmM@;s)1|^gn}An6eExgyEbZw}KsP;|%{O+~JzXk2rRJ2ypC)+)e@lDHwscR|Nf~~c zLjJmYDm+e4DXUm(yzBb@4;E{A7@BaAM~~EXHbv(EW<4bjd!cPO#amo{j1cT>@1QY! zn#Zvrds3|RDDH}v+lB#QME`k=V)^He4k<+z)aE8T{(sU`UK_Wo?~Ti4Cb0 z`S^1({AL+6bnT#5TfQ+?)cJDMD%F{%eL@j!2kcr}Uw3}E1|+YCk*4&t$E@$H zVPg1f``kBjD&bnAID-5h8)flliuC37=d~aePlWa_`g<(2MzKA%9P(%yzYDA{TFh93 z6zZ(UBBB{===Nvfar~J&6>DLEab0eIz6|uz6QMQQpItwVL|c13n_Ln!`g!QPP5-7s zdwW~Pez{e9dr)nY1AGgIi6OpgY<#4>eNS+A67Oc!FTiSVZ@<~a)Hyglc3=iecadkP zFnXjXSC~bPF!3R$dH6n4jIeCWhT5~O;bePq`}SD7yTZ1%ZJXuGHQP4h+cn!Zo3Gcj zt8D{$HzOr?yZg}XG|tog84Xi?-E637Zn@>pAUU`CDQ2i|s4G_>F&PZIwYCM|w~M3(isYpV!LIi9RLUtrsg(r*b!O`YvkQ!~J6yj}f01l{f+8g_gP-&dGJvilLgX33b>-L<#79a1c>1@h7REaEhW>*2R8 z&*|z6aT0&@<6ZKWgq|d4ahMKacfPZI2ckl|er~*NGoE7}+O~Pyno#GyZLQlj4`Ar@ z?bx=>e1^<9%2JrY9=33MS3I6T%c{e=VvfT;^HpjBb>6 zBAjTqk{y=T!PF_&LXMT7Mo|aDIYSF0-TCn!&9Oyvb?n}LGiT+R;tw3H!C@QDFcG2b t-$8OuNmn&J8BKsInGddk>1yABpHGnKFn8G0<70 +#include +#include +#include +#include +#include +#include +#pragma hdrstop + +#ifndef DEBUG +#define DEBUG 0 +#endif + +#include "hymem.h" +#include "hyfs.h" +#include "hyfile.h" +#include "hylist.h" +#include "hycache.h" +#include "hystring.h" +#include "po2c.h" + +//#include "reslib.h" + +// ---------------------------------------------------------------------------- +// local preprocessor definitions + +#define LINE_MAX 0x200 +#define PATH_MAX 0x200 + +#define OUTPUT_BUFFER 0x100000 // to create output files of up to 1 Megabyte +#define CACHE_MAX 0x1000 // the maximum number of files to operate on + +#define ARGUMENT_MAX 0x100 // the maximum number of arguments per command +#define MESS_MAX 0x1000 // the maximum number of msgs in the output file +#define MESS_SIZE 0x2000 // the maximum size of a "po" formatted message + +#define SYM_SIZE 0x1f // the assumed maximum symbol length for linking + +// ---------------------------------------------------------------------------- +// local struct and type definitions + +typedef struct + { + char *pszVerb; + int (*pfiHandler)(LISTTAG *pltCache, int argc, char **argv); + } VERBTAG; + +// ---------------------------------------------------------------------------- +// local function prototypes + +int main(int argc, char **argv); + +static int fiExecute(LISTTAG *pltCache, FILETAG *ftIn); + +static int fiMunge(void); +static int fiConstruct(LISTTAG *pltCache, FILETAG *pft); + +static int iC2Po(LISTTAG *pltCache, int argc, char **argv); +static int fiProcessC2Po(FILETAG *pftIn); + +// ---------------------------------------------------------------------------- +// global variables + +char *pszHdrFileName; +char *pszLibFileName; + +// table of argv[0] values for use by fiExecute() +VERBTAG vtVerb[] = + { + { "c2po", iC2Po }, + { "po2c", iPo2C }, + }; + +#define VERBS (sizeof(vtVerb) / sizeof(VERBTAG)) + +// FCS lookup table as generated by fcsgen.c (NOS) +unsigned short usFcstab[256] = { + 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, + 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, + 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, + 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, + 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, + 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, + 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, + 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, + 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, + 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, + 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, + 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, + 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, + 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, + 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, + 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, + 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, + 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, + 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, + 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, + 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, + 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, + 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, + 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, + 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, + 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, + 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, + 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, + 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, + 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, + 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, + 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 +}; + +// 16 bit CRC-CCITT stuff. Extracted from Bill Simpson's PPP (NOS) +#define FCS_START 0xffff // Starting bit string for FCS calculation +#define FCS(fcs, c) (((fcs) >> 8) ^ usFcstab[((fcs) ^ (c)) & 0x00ff]) + +#if DEBUG +int fiDebug; // this one is really accessible to all modules +#endif + +// ---------------------------------------------------------------------------- + +int main(int argc, char **argv) + { + int i; + LISTTAG ltCache; + + int iCacheIn; + FILETAG *pftIn; + char *pszInFileName; + + int iCacheOut; + FILETAG *pftOut; + char *pszOutFileName; + + char szOutFileName[PATH_MAX+1]; + char szHdrFileName[PATH_MAX+1]; + char szLibFileName[PATH_MAX+1]; + + pszInFileName = NULL; + pszOutFileName = NULL; + pszHdrFileName = NULL; + pszLibFileName = NULL; + + if (argc > 1) + { + pszInFileName = argv[1]; + } + +#if DEBUG + fiDebug = 0; +#endif + if (argc > 2) + { +#if DEBUG + i = atoi(argv[2]); + if (i < 1 || i > 0xff) +#endif + { + pszOutFileName = argv[2]; + if (argc > 3) + { +#if DEBUG + i = atoi(argv[3]); + if (i < 1 || i > 0xff) +#endif + { + pszHdrFileName = argv[3]; + if (argc > 4) + { +#if DEBUG + i = atoi(argv[4]); + if (i < 1 || i > 0xff) +#endif + { + pszLibFileName = + argv[4]; +#if DEBUG + if (argc > 5) + { + fiDebug = + atoi(argv[5]); + } +#endif + } +#if DEBUG + else + { + fiDebug = i; + } +#endif + } + } +#if DEBUG + else + { + fiDebug = i; + } +#endif + } + } +#if DEBUG + else + { + fiDebug = i; + } +#endif + } + + if (pszInFileName == NULL) + { + printf("usage: restool infile.txt" + " [outfile.po] [outfile.h] [outfile.lib]" +#if DEBUG + " [debuglevel]" +#endif + "\n"); + exit(1); + } + + if (pszOutFileName == NULL) + { + pszOutFileName = szOutFileName; + strcpy(pszOutFileName, pszInFileName); + + i = strlen(pszOutFileName); + while (i--) + { + if (pszOutFileName[i] == ':' || + pszOutFileName[i] == '/' || + pszOutFileName[i] == '\\') + { + break; /* no extension, so don't strip it */ + } + if (pszOutFileName[i] == '.') + { + pszOutFileName[i] = 0; /* strip dot and extension */ + break; /* ready to concatenate our extension */ + } + } + + strcat(pszOutFileName, ".po"); + } + + if (pszHdrFileName == NULL) + { + pszHdrFileName = szHdrFileName; + strcpy(pszHdrFileName, pszOutFileName); + + i = strlen(pszHdrFileName); + while (i--) + { + if (pszHdrFileName[i] == ':' || + pszHdrFileName[i] == '/' || + pszHdrFileName[i] == '\\') + { + break; /* no extension, so don't strip it */ + } + if (pszHdrFileName[i] == '.') + { + pszHdrFileName[i] = 0; /* strip dot and extension */ + break; /* ready to concatenate our extension */ + } + } + + strcat(pszHdrFileName, ".h"); + } + + if (pszLibFileName == NULL) + { + pszLibFileName = szLibFileName; + strcpy(pszLibFileName, pszHdrFileName); + + i = strlen(pszLibFileName); + while (i--) + { + if (pszLibFileName[i] == ':' || + pszLibFileName[i] == '/' || + pszLibFileName[i] == '\\') + { + break; /* no extension, so don't strip it */ + } + if (pszLibFileName[i] == '.') + { + pszLibFileName[i] = 0; /* strip dot and extension */ + break; /* ready to concatenate our extension */ + } + } + + strcat(pszLibFileName, ".lib"); + } + + if (strcmp(pszInFileName, pszOutFileName) == 0 || + strcmp(pszInFileName, pszHdrFileName) == 0 || + strcmp(pszInFileName, pszLibFileName) == 0) + { + printf("Input and output filenames identical\n"); + exit(1); + } + + // set up the cache to track intermediate memory files + CacheEntrySetup(<Cache, CACHE_MAX); // to handle CACHE_MAX files + + // allocate message list to collect information about messages + ListAllocate(<Mess, MESS_MAX, sizeof(MESSTAG)); + + // read the input txt file entirely to a malloc'd block + CacheReadIn(<Cache, &iCacheIn, pszInFileName); + pftIn = pftCacheItem(<Cache, iCacheIn); + + // interpret commands and construct intermediate files + if (fiExecute(<Cache, pftIn) == FALSE) + { + exit(1); + } + + // do some conversion steps on the information collected +#if 0 + if (fiUnescAll() == FALSE) + { + exit(1); + } +#endif + + if (fiSort() == FALSE) + { + exit(1); + } + + if (fiUniq() == FALSE) + { + exit(1); + } + + if (fiMunge() == FALSE) + { + exit(1); + } + + // prepare an output buffer for font metric data + CacheAllocate(<Cache, &iCacheOut, OUTPUT_BUFFER); + pftOut = pftCacheItem(<Cache, iCacheOut); + + // construct output based on the message information collected + if (fiConstruct(<Cache, pftOut) == FALSE) + { + exit(1); + } + + // ready to write the output we found + CacheWriteOut(<Cache, iCacheOut, pszOutFileName); +#if 1 + pctCacheItem(<Cache, iCacheOut)->iDirty = 4; // extra dirty +#else + CacheFlush(<Cache, iCacheOut, 3); // force immediate writing +#endif + + // junk the internal font list buffer + ListFree(<Mess); + + // it just goes on and on my friend +#if DEBUG + CacheExitFlush(<Cache, 3); // force writing of intermediate files +#else + CacheExitFlush(<Cache, 4); // force writing of output files only +#endif + CacheExitCleanup(<Cache); // deallocate memory, though it's redundant + + return 0; + } + +// ---------------------------------------------------------------------------- + +static int fiExecute(LISTTAG *pltCache, FILETAG *pftIn) + { + int i; + char sz[LINE_MAX+1]; + int argc; + char *argv[ARGUMENT_MAX]; + int iSize, iSizeArg; + char *pcArg; + + // execute the user's script file (similar to unix shell) + while (fiFileGetLine(pftIn, sz, sizeof(sz) - 1, &iSize)) + { + argc = 0; + + i = iStringIsolate(0, sz, iSize, &pcArg, &iSizeArg); + while (iSizeArg && argc < ARGUMENT_MAX) + { + argv[argc++] = pcArg; // stash reference to string + pcArg[iSizeArg] = 0; // add null terminator + + i = iStringIsolate(i + 1, sz, iSize, + &pcArg, &iSizeArg); + } + + if (argc < 1 || argv[0][0] == '#') + { + continue; // comments and blank file lines ignored + } + +#if DEBUG + for (i = 0; i < argc; i++) + { + printf("Argument %d = \"%s\"\n", i, argv[i]); + } +#endif + + for (i = 0; i < VERBS; i++) + { + if (strcmp(argv[0], vtVerb[i].pszVerb) == 0) + { + break; + } + } + + if (i >= VERBS) + { + printf("Unrecognised command \"%s\"\n", argv[0]); + return FALSE; + } + + i = (vtVerb[i].pfiHandler)(pltCache, argc, argv); +#if DEBUG + printf("Exitcode = %d\n", i); +#endif + if (i) + { + printf("Command \"%s\" reports failure\n", argv[0]); + return FALSE; + } + } + + return TRUE; + } + +// ---------------------------------------------------------------------------- + +static int fiMunge(void) + { + int i, ch, iSeq, iFCS; + char *pc, *pcIn; + MESSTAG *pmt; + FILETAG ft, *pftOut; + + // set up one item of lookahead in message table + ltMess.iPosition = 0; + pmt = (MESSTAG *) pcListCanGet(<Mess); + + // munge one message at a time (sorted, no dupes) + iSeq = 0; + while (pmt) + { + pftOut = &pmt->ftOut; + FileAllocate(&ft, SYM_SIZE + 4); // 4 = sprintf overflow + + iFCS = FCS_START; + for (pcIn = pftOut->pcBase; pcIn < pftOut->pcAppend; pcIn++) + { + iFCS = FCS(iFCS, *pcIn); + } + + pc = ft.pcBase; + pc += sprintf(pc, "__%04x_%04x_", iSeq++, iFCS); + for (pcIn = pftOut->pcBase; pcIn < pftOut->pcAppend; pcIn++) + { + ch = *pcIn; + if (strchr("0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz", ch)) + { + *pc++ = ch; + } + else + { + pc += sprintf(pc, "_%02x", ch & 0xff); + } + if (pc > ft.pcBase + SYM_SIZE) + { + pc = ft.pcBase + SYM_SIZE; + break; + } + } + memcpy(pc, "\r\n", 2); /* 1 for UNIX! */ + pc += 2; + + ft.pcAppend = pc; + FileResize(&ft, pc - ft.pcBase); + + FileFree(pftOut); + memcpy(pftOut, &ft, sizeof(ft)); + + pmt = (MESSTAG *) pcListCanGet(<Mess); + } + + return TRUE; + } + +// ---------------------------------------------------------------------------- + +static int fiConstruct(LISTTAG *pltCache, FILETAG *pft) + { + char *pc; + int i, j, iSize; + int iSizeIn, iSizeOut; + MESSTAG *pmt; + FILETAG *pftHdr, *pftLib, *pftRel; + int iCacheHdr, iCacheLib, iCacheRel; + char *pcHdr, *pcLib, *pcRel; + char szRelFileName[LINE_MAX]; + FILETAG ftUnesc; + char *pcUnesc; + int iCount, fiMkDir; + +// printf("construct\n"); + fiMkDir = 0; + + // prepare an output buffer for header file data + CacheAllocate(pltCache, &iCacheHdr, OUTPUT_BUFFER); + pftHdr = pftCacheItem(pltCache, iCacheHdr); + pcHdr = pftHdr->pcAppend; + pcHdr += sprintf(pcHdr, + "/* %s generated by c2po, do not edit! */\r\n" + "\r\n" + "#ifndef __MESSAGES_H\r\n" + "#define __MESSAGES_H\r\n" + "\r\n", pszHdrFileName); + + // prepare an output buffer for library file data + CacheAllocate(pltCache, &iCacheLib, OUTPUT_BUFFER); + pftLib = pftCacheItem(pltCache, iCacheLib); + pcLib = pftLib->pcAppend; + + // set up one item of lookahead in message table + ltMess.iPosition = 0; + pmt = (MESSTAG *) pcListCanGet(<Mess); + + // write one message at a time (sorted, no dupes) + pc = pft->pcAppend; + while (pmt) + { + iSizeIn = iFileSize(&pmt->ftIn); +#if 0 + if (pmt->ftOut.pcBase == NULL) + { + iSizeOut = 4; /* 3 for UNIX! */ + } + else +#endif + { + iSizeOut = iFileSize(&pmt->ftOut); + } + iSize = 6 + iSizeIn + 7 + iSizeOut + 2; /* 1 for UNIX! */ + if (pc + iSize > pft->pcLimit) + { +// printf("a\n"); + return FALSE; // the buffer was too small + } + + memcpy(pc, "msgid ", 6); + pc += 6; + + memcpy(pc, pmt->ftIn.pcBase, iSizeIn); + pc += iSizeIn; + + memcpy(pc, "msgstr ", 7); + pc += 7; + +#if 0 + if (pmt->ftOut.pcBase == NULL) + { + memcpy(pc, "\"\"\r\n", 4); /* UNIX!! */ + } + else +#endif + { + memcpy(pc, pmt->ftOut.pcBase, iSizeOut); + } + pc += iSizeOut; + + memcpy(pc, "\r\n", 2); + pc += 2; /* 1 for UNIX!! */ + + // generate function prototype for header file + memcpy(pcHdr, "void ", 5); + pcHdr += 5; + + memcpy(pcHdr, pmt->ftOut.pcBase, iSizeOut - 2); + pcHdr += iSizeOut - 2; + + memcpy(pcHdr, "(void);\r\n", 9); + pcHdr += 9; + + // generate object file name from "out" string + i = strlen(pszLibFileName); + memcpy(szRelFileName, pszLibFileName, i); + for (j = i - 1; j >= 0; j--) + { + switch (szRelFileName[j]) + { + case ':': + case '/': + case '\\': + goto mybreak; + case '.': + szRelFileName[j] = '_'; + } + } + mybreak: + j++; + szRelFileName[i] = '/'; + memcpy(szRelFileName + i + 1, + pmt->ftOut.pcBase + 2, iSizeOut - 4); + memcpy(szRelFileName + i + 1 + iSizeOut - 4, ".rel", 5); + + // append object file name and symbol name to library + memcpy(pcLib, szRelFileName + j, (i - j) + 1 + iSizeOut); + pcLib += (i - j) + 1 + iSizeOut; + memcpy(pcLib, "\r\n _", 4); + pcLib += 4; + memcpy(pcLib, pmt->ftOut.pcBase, iSizeOut); + pcLib += iSizeOut; +// printf("%s\n", szRelFileName); + + // for Windows, can now change the directory separator! + if (fiMkDir == 0) + { + szRelFileName[i] = 0; // just the directory name + if (mkdir(szRelFileName) && errno != EEXIST) + { + perror(szRelFileName); + exit(1); + } + fiMkDir = 1; + } + szRelFileName[i] = '/'; // see hyfs.cpp '\\'; + + // regenerate binary message data for object file + FileAllocate(&ftUnesc, MESS_SIZE); + pmt->ftIn.pcPosition = pmt->ftIn.pcBase; + if (fiUnesc(&ftUnesc, &pmt->ftIn, NULL, 0) == FALSE) + { +// printf("b\n"); + CacheFree(pltCache, iCacheLib); + return FALSE; + } + *ftUnesc.pcAppend++ = 0; // append the trailing null +#if 1 + iCount = iFileSize(&ftUnesc); + memmove(ftUnesc.pcBase + 2, ftUnesc.pcBase, iCount); + + // prepend a length word that includes the trailing null + ftUnesc.pcBase[0] = iCount & 0xff; + ftUnesc.pcBase[1] = (iCount >> 8) & 0xff; + + // adjust the filetag's size to include the length word + ftUnesc.pcAppend += 2; +#endif + + // prepare an output buffer for object file data + CacheAllocate(pltCache, &iCacheRel, OUTPUT_BUFFER); + pftRel = pftCacheItem(pltCache, iCacheRel); + pcRel = pftRel->pcAppend; + + pcRel += sprintf(pcRel, "XL4\r\n" + "H 2 areas 2 global symbols\r\n" + "S .__.ABS. Def00000000\r\n" + "A _DEFAULT size 0 flags 0\r\n" + "A CODE size %x flags 0\r\n" + "S _", iFileSize(&ftUnesc)); + + memcpy(pcRel, pmt->ftOut.pcBase, iSizeOut - 2); + pcRel += iSizeOut - 2; + + memcpy(pcRel, " Def00000000\r\n" + "T 00 00 00 00\r\n" + "R 00 00 01 00\r\n", 44); + pcRel += 44; + + for (pcUnesc = ftUnesc.pcBase; + pcUnesc < ftUnesc.pcAppend; + pcUnesc += i) + { + i = ftUnesc.pcAppend - pcUnesc; + if (i > 11) + { + i = 11; // bytes to write on this line + } + j = pcUnesc - ftUnesc.pcBase; + pcRel += sprintf(pcRel, "T %02x %02x %02x %02x", + j & 0xff, + (j >> 8) & 0xff, + (j >> 16) & 0xff, + (j >> 24) & 0xff); + for (j = 0; j < i; j++) + { + pcRel += sprintf(pcRel, " %02x", + pcUnesc[j] & 0xff); + } + memcpy(pcRel, "\r\n" + "R 00 00 01 00\r\n", 17); + pcRel += 17; + } + + // set the file length to be written + pftRel->pcAppend = pcRel; + FileResize(pftRel, pcRel - pftRel->pcBase); + + // free the regenerated binary message data + FileFree(&ftUnesc); + + // ready to write the final object file + CacheWriteOut(pltCache, iCacheRel, szRelFileName); +#if 1 + pctCacheItem(pltCache, iCacheRel)->iDirty = 4; // extra dirty +#else + CacheFlush(pltCache, iCacheRel, 3); // force immediate writing +#endif + + pmt = (MESSTAG *) pcListCanGet(<Mess); + } + + pcHdr += sprintf(pcHdr, + "\r\n" + "#endif /* __MESSAGES_H */\r\n" + "\r\n"); + + // set the file lengths to be written + pft->pcAppend = pc; + pftHdr->pcAppend = pcHdr; + pftLib->pcAppend = pcLib; + + // ready to write the final header file + CacheWriteOut(pltCache, iCacheHdr, pszHdrFileName); +#if 1 + pctCacheItem(pltCache, iCacheHdr)->iDirty = 4; // extra dirty +#else + CacheFlush(pltCache, iCacheHdr, 3); // force immediate writing +#endif + + // ready to write the final library file + CacheWriteOut(pltCache, iCacheLib, pszLibFileName); +#if 1 + pctCacheItem(pltCache, iCacheLib)->iDirty = 4; // extra dirty +#else + CacheFlush(pltCache, iCacheLib, 3); // force immediate writing +#endif + + return TRUE; + } + +// ---------------------------------------------------------------------------- + +int iC2Po(LISTTAG *pltCache, int argc, char **argv) + { + int iCacheIn; + FILETAG *pftIn; + char *pszInFileName; + + if (argc < 2) + { + printf("usage: c2po infile.c\n"); + exit(1); + } + + pszInFileName = argv[1]; + + // read the input chs file entirely to a malloc'd block + CacheReadIn(pltCache, &iCacheIn, pszInFileName); + pftIn = pftCacheItem(pltCache, iCacheIn); + + // parse the 'C' source code, taking special action for keywords + if (fiProcess(fiProcessC2Po, pftIn) == FALSE) + { + return 1; + } + + return 0; + } + +// ---------------------------------------------------------------------------- + +static int fiProcessC2Po(FILETAG *pftIn) + { + int i, j; + char *pcArg; + int iSizeArg; +#if 1 + MESSTAG *pmt; + + // create a new zeroed list entry to hold 2 strings + pmt = (MESSTAG *) pcListPut(<Mess); + + // convert pointer to keyword into file position + i = pftIn->pcPosition - pftIn->pcBase; + + // skip the tokens _ and (, we know they will match + i = iStringTokenise(i, pftIn->pcBase, iFileSize(pftIn), + &pcArg, &iSizeArg); + i = iStringTokenise(i, pftIn->pcBase, iFileSize(pftIn), + &pcArg, &iSizeArg); + + // collect (without parsing) the individual 'C' strings + FileAllocate(&pmt->ftIn, MESS_SIZE); + pftIn->pcPosition = pftIn->pcBase + i; + if (fiSuck(&pmt->ftIn, pftIn, ")", 1) == FALSE) + { + i = iStringTokenise(i, pftIn->pcBase, iFileSize(pftIn), + &pcArg, &iSizeArg); + fputs("msgid too long at token:\n", stderr); + fwrite(pcArg, iSizeArg, 1, stderr); + fputs("\n", stderr); + exit(1); + } + i = pftIn->pcPosition - pftIn->pcBase; + FileResize(&pmt->ftIn, iFileSize(&pmt->ftIn)); + + // check the result is a (possibly concatenated) string, + // in the process retain the binary version for sorting + FileAllocate(&pmt->ftOut, MESS_SIZE); + pmt->ftIn.pcPosition = pmt->ftIn.pcBase; + if (fiUnesc(&pmt->ftOut, &pmt->ftIn, NULL, 0) == FALSE) + { + // it wasn't really a valid 'C' preprocessor string + FileFree(&pmt->ftOut); + FileFree(&pmt->ftIn); + + // so remove it from the list, sorry matey! + ltMess.iAppend--; + return FALSE; + } + FileResize(&pmt->ftOut, iFileSize(&pmt->ftOut)); + + // check for the ) keyword closing the expression + i = iStringTokenise(i, pftIn->pcBase, iFileSize(pftIn), + &pcArg, &iSizeArg); + if (fiStringEqual(pcArg, iSizeArg, ")", 1) == FALSE) + { + fputs("syntax error at token:\n", stderr); + fwrite(pcArg, iSizeArg, 1, stderr); + fputs("\n", stderr); + exit(1); + } + + pftIn->pcPosition = pftIn->pcBase + i; + return TRUE; +#else + int iIndex; + FILETAG ft; + static int iSlot = 0; + + iIndex = 0; + i = iStringTokenise(i, pftIn->pcBase, iFileSize(pftIn), + &pcArg, &iSizeArg); + while (iSizeArg) + { + if (iIndex >= 3 && fiStringEqual(pcArg, iSizeArg, ")", 1)) + { + iSlot++; + memcpy(&((MESSTAG *) pcListPut(<Mess))->ftIn, + &ft, sizeof(ft)); + pftIn->pcPosition = pftIn->pcBase + i; + return TRUE; + } + + if (iIndex >= 2) + { + if (iSizeArg < 2 || pcArg[0] != '"') + { + FileFree(&ft); + return FALSE; + } + for (j = 1; j < iSizeArg; j++) + { + if (pcArg[j] == '\\') + { + j++; + if (j >= iSizeArg) + { + return FALSE; + } + } + } + if (pcArg[j - 1] != '"') + { + FileFree(&ft); + return FALSE; + } + printf("%d ", iSlot); + fwrite(pcArg, 1, iSizeArg, stdout); + fputs("\n", stdout); + + if (ft.pcAppend + iSizeArg + 2 > ft.pcLimit) + { + FileFree(&ft); + return FALSE; + } + + memcpy(ft.pcAppend, pcArg, iSizeArg); + ft.pcAppend += iSizeArg; + *ft.pcAppend++ = '\r'; /* remove this for UNIX! */ + *ft.pcAppend++ = '\n'; + } + + iIndex++; + i = iStringTokenise(i, pftIn->pcBase, iFileSize(pftIn), + &pcArg, &iSizeArg); + } + + FileFree(&ft); + return FALSE; +#endif + } + +// ---------------------------------------------------------------------------- + diff --git a/src/mkfont/restool.exe b/src/mkfont/restool.exe new file mode 100644 index 0000000000000000000000000000000000000000..6ef9d23f609931f690f550481cb2b2fa47bbd28e GIT binary patch literal 118837 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 z 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 IASH~mPAtaEP&18Z=)t@$? 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 O>-2AXsFDRcvi=XQo6jr& delta 4860 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 delta 41770 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 z%0D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 - 0003:00006020 _rel 0041b020 - 0003:00006040 _txt 0041b040 - 0003:00006050 _fflag 0041b050 - 0003:000064e0 _module 0041b4e0 - 0003:00006534 _tlevel 0041b534 - 0003:00006538 _symp 0041b538 - 0003:0000653c _inpfil 0041b53c - 0003:00006540 _afn 0041b540 - 0003:00006640 _afp 0041b640 - 0003:00006644 _lmode 0041b644 - 0003:00006660 _cbt 0041b660 - 0003:00006860 _symhash 0041b860 - 0003:00006960 _mnehash 0041b960 - 0003:00006a60 _srcfn 0041ba60 - 0003:00007060 _laddr 0041c060 - 0003:00007080 _srcfp 0041c080 - 0003:00007098 _cpt 0041c098 - 0003:0000709c _fuzz 0041c09c - 0003:000070a0 _erb 0041c0a0 - 0003:00007124 _incfil 0041c124 - 0003:00007140 _incfn 0041c140 - 0003:00007740 _incfp 0041c740 - 0003:00007760 _ifp 0041c760 - 0003:00007778 _cfile 0041c778 - 0003:0000777c _lfp 0041c77c - 0003:00007780 _gflag 0041c780 - 0003:00007784 _a_mask 0041c784 - 0003:00007788 _line 0041c788 - 0003:0000778c _lop 0041c78c - 0003:00007790 _ofp 0041c790 - 0003:00007794 _zflag 0041c794 - 0003:000077a0 _srcline 0041c7a0 - 0003:000077b8 _oflag 0041c7b8 - 0003:000077c0 _sfp 0041c7c0 - 0003:000077d8 _areap 0041c7d8 - 0003:000077dc _tfp 0041c7dc - 0003:000077e0 _page 0041c7e0 - 0003:00007800 _stb 0041c800 - 0003:00007850 _pass 0041c850 - 0003:00007854 _sflag 0041c854 - 0003:00007860 _cb 0041c860 - 0003:000078e0 _eb 0041c8e0 - 0003:000078e4 _cp 0041c8e4 - 0003:000078e8 _aserr 0041c8e8 - 0003:000078ec _ep 0041c8ec - 0003:00007900 _ib 0041c900 - 0003:00007980 _wflag 0041c980 - 0003:00007984 _ip 0041c984 - 0003:000079a0 _afntmp 0041c9a0 - 0003:00007aa0 _tb 0041caa0 - 0003:00007af0 _lflag 0041caf0 - 0003:00007af4 _a_bytes 0041caf4 - 0003:00007af8 _afptmp 0041caf8 - 0003:00007afc _pflag 0041cafc - 0003:00007b00 _incline 0041cb00 - 0003:00007b18 _aflag 0041cb18 - 0003:00007b20 _ifcnd 0041cb20 - 0003:00007b4c _s_mask 0041cb4c - 0003:00007b50 _xflag 0041cb50 - 0003:00007b54 _radix 0041cb54 - 0003:00007b58 _flevel 0041cb58 - 0003:00007b60 _jump_env 0041cb60 - 0003:00007ba0 _v_mask 0041cba0 - 0003:00007bc0 _iflvl 0041cbc0 - 0003:00007bec ___mbcodepage 0041cbec - 0003:00007c70 ___mbulinfo 0041cc70 - 0003:00007c7c ___ismbcodepage 0041cc7c - 0003:00007c80 __mbcasemap 0041cc80 - 0003:00007d80 __mbctype 0041cd80 - 0003:00007e84 ___mblcid 0041ce84 - 0003:00007e88 ___sbh_sizeHeaderList 0041ce88 - 0003:00007e9c ___sbh_indGroupDefer 0041ce9c - 0003:00007ea0 ___sbh_pHeaderScan 0041cea0 - 0003:00007ea4 ___sbh_initialized 0041cea4 - 0003:00007ea8 ___sbh_pHeaderDefer 0041cea8 - 0003:00007eac ___sbh_cntHeaderList 0041ceac - 0003:00007eb0 ___sbh_pHeaderList 0041ceb0 - 0003:00007eb4 ___sbh_threshold 0041ceb4 - 0003:00007eb8 __crtheap 0041ceb8 - 0003:00007ec8 ___active_heap 0041cec8 - 0003:00007ee0 ___pioinfo 0041cee0 - 0003:0000801c __nhandle 0041d01c - 0003:00008020 __acmdln 0041d020 - 0003:0000802c __setjmpexused 0041d02c - 0003:00008038 ___env_initialized 0041d038 - 0003:00008048 ___mbctype_initialized 0041d048 - 0003:0000804c ___onexitend 0041d04c - 0003:00008050 ___onexitbegin 0041d050 - 0003:00008054 __FPinit 0041d054 - 0003:00008058 ___piob 0041d058 - 0003:000083a0 __bufin 0041d3a0 - 0003:000093a0 __nstream 0041e3a0 - 0004:00000000 __IMPORT_DESCRIPTOR_KERNEL32 0041f000 kernel32:KERNEL32.dll - 0004:00000014 __NULL_IMPORT_DESCRIPTOR 0041f014 kernel32:KERNEL32.dll - 0004:00000134 __imp__IsBadWritePtr@8 0041f134 kernel32:KERNEL32.dll - 0004:00000138 __imp__ExitProcess@4 0041f138 kernel32:KERNEL32.dll - 0004:0000013c __imp__TerminateProcess@8 0041f13c kernel32:KERNEL32.dll - 0004:00000140 __imp__GetCurrentProcess@0 0041f140 kernel32:KERNEL32.dll - 0004:00000144 __imp__GetCommandLineA@0 0041f144 kernel32:KERNEL32.dll - 0004:00000148 __imp__GetVersion@0 0041f148 kernel32:KERNEL32.dll - 0004:0000014c __imp__HeapFree@12 0041f14c kernel32:KERNEL32.dll - 0004:00000150 __imp__GetLastError@0 0041f150 kernel32:KERNEL32.dll - 0004:00000154 __imp__CloseHandle@4 0041f154 kernel32:KERNEL32.dll - 0004:00000158 __imp__SetFilePointer@16 0041f158 kernel32:KERNEL32.dll - 0004:0000015c __imp__SetHandleCount@4 0041f15c kernel32:KERNEL32.dll - 0004:00000160 __imp__GetStdHandle@4 0041f160 kernel32:KERNEL32.dll - 0004:00000164 __imp__GetFileType@4 0041f164 kernel32:KERNEL32.dll - 0004:00000168 __imp__GetStartupInfoA@4 0041f168 kernel32:KERNEL32.dll - 0004:0000016c __imp__WriteFile@20 0041f16c kernel32:KERNEL32.dll - 0004:00000170 __imp__GetModuleHandleA@4 0041f170 kernel32:KERNEL32.dll - 0004:00000174 __imp__GetModuleFileNameA@12 0041f174 kernel32:KERNEL32.dll - 0004:00000178 __imp__GetEnvironmentVariableA@12 0041f178 kernel32:KERNEL32.dll - 0004:0000017c __imp__GetVersionExA@4 0041f17c kernel32:KERNEL32.dll - 0004:00000180 __imp__HeapDestroy@4 0041f180 kernel32:KERNEL32.dll - 0004:00000184 __imp__HeapCreate@12 0041f184 kernel32:KERNEL32.dll - 0004:00000188 __imp__VirtualFree@12 0041f188 kernel32:KERNEL32.dll - 0004:0000018c __imp__VirtualAlloc@16 0041f18c kernel32:KERNEL32.dll - 0004:00000190 __imp__HeapReAlloc@16 0041f190 kernel32:KERNEL32.dll - 0004:00000194 __imp__HeapAlloc@12 0041f194 kernel32:KERNEL32.dll - 0004:00000198 __imp__RtlUnwind@16 0041f198 kernel32:KERNEL32.dll - 0004:0000019c __imp__UnhandledExceptionFilter@4 0041f19c kernel32:KERNEL32.dll - 0004:000001a0 __imp__FreeEnvironmentStringsA@4 0041f1a0 kernel32:KERNEL32.dll - 0004:000001a4 __imp__FreeEnvironmentStringsW@4 0041f1a4 kernel32:KERNEL32.dll - 0004:000001a8 __imp__WideCharToMultiByte@32 0041f1a8 kernel32:KERNEL32.dll - 0004:000001ac __imp__GetEnvironmentStrings@0 0041f1ac kernel32:KERNEL32.dll - 0004:000001b0 __imp__GetEnvironmentStringsW@0 0041f1b0 kernel32:KERNEL32.dll - 0004:000001b4 __imp__SetStdHandle@8 0041f1b4 kernel32:KERNEL32.dll - 0004:000001b8 __imp__FlushFileBuffers@4 0041f1b8 kernel32:KERNEL32.dll - 0004:000001bc __imp__ReadFile@20 0041f1bc kernel32:KERNEL32.dll - 0004:000001c0 __imp__CreateFileA@28 0041f1c0 kernel32:KERNEL32.dll - 0004:000001c4 __imp__GetCPInfo@8 0041f1c4 kernel32:KERNEL32.dll - 0004:000001c8 __imp__GetACP@0 0041f1c8 kernel32:KERNEL32.dll - 0004:000001cc __imp__GetOEMCP@0 0041f1cc kernel32:KERNEL32.dll - 0004:000001d0 __imp__GetProcAddress@8 0041f1d0 kernel32:KERNEL32.dll - 0004:000001d4 __imp__LoadLibraryA@4 0041f1d4 kernel32:KERNEL32.dll - 0004:000001d8 __imp__SetEndOfFile@4 0041f1d8 kernel32:KERNEL32.dll - 0004:000001dc __imp__MultiByteToWideChar@24 0041f1dc kernel32:KERNEL32.dll - 0004:000001e0 __imp__LCMapStringA@24 0041f1e0 kernel32:KERNEL32.dll - 0004:000001e4 __imp__LCMapStringW@24 0041f1e4 kernel32:KERNEL32.dll - 0004:000001e8 __imp__GetStringTypeA@20 0041f1e8 kernel32:KERNEL32.dll - 0004:000001ec __imp__GetStringTypeW@16 0041f1ec kernel32:KERNEL32.dll - 0004:000001f0 \177KERNEL32_NULL_THUNK_DATA 0041f1f0 kernel32:KERNEL32.dll + 0001:0000459f _asexit 0040559f f asmain.obj + 0001:0000466b _asmbl 0040566b f asmain.obj + 0001:000058dd _afile 004068dd f asmain.obj + 0001:000059c9 _afilex 004069c9 f asmain.obj + 0001:00005b22 _fndidx 00406b22 f asmain.obj + 0001:00005b98 _newdot 00406b98 f asmain.obj + 0001:00005be4 _phase 00406be4 f asmain.obj + 0001:00005c09 _usage 00406c09 f asmain.obj + 0001:00006370 _outab 00407370 f asout.obj + 0001:00006383 _outaw 00407383 f asout.obj + 0001:00006396 _outa3b 00407396 f asout.obj + 0001:000063a9 _outa4b 004073a9 f asout.obj + 0001:000063bc _outaxb 004073bc f asout.obj + 0001:00006412 _outatxb 00407412 f asout.obj + 0001:00006571 _outrb 00407571 f asout.obj + 0001:00006588 _outrw 00407588 f asout.obj + 0001:0000659f _outr3b 0040759f f asout.obj + 0001:000065b6 _outr4b 004075b6 f asout.obj + 0001:000065cd _outrxb 004075cd f asout.obj + 0001:000067eb _outdp 004077eb f asout.obj + 0001:000068f3 _outall 004078f3 f asout.obj + 0001:00006917 _outdot 00407917 f asout.obj + 0001:000069cc _outchk 004079cc f asout.obj + 0001:00006a6e _outbuf 00407a6e f asout.obj + 0001:00006b1d _outgsd 00407b1d f asout.obj + 0001:00006dd4 _outarea 00407dd4 f asout.obj + 0001:00006e80 _outsym 00407e80 f asout.obj + 0001:00006fc5 _out 00407fc5 f asout.obj + 0001:00007095 _out_lb 00408095 f asout.obj + 0001:000070d8 _out_lw 004080d8 f asout.obj + 0001:000070ef _out_l3b 004080ef f asout.obj + 0001:00007106 _out_l4b 00408106 f asout.obj + 0001:0000711d _out_lxb 0040811d f asout.obj + 0001:000072e9 _out_rw 004082e9 f asout.obj + 0001:00007385 _out_txb 00408385 f asout.obj + 0001:000074e4 _lobyte 004084e4 f asout.obj + 0001:000074f1 _hibyte 004084f1 f asout.obj + 0001:00007501 _thrdbyte 00408501 f asout.obj + 0001:00007511 _frthbyte 00408511 f asout.obj + 0001:00007521 _outr11 00408521 f asout.obj + 0001:00007691 _outr19 00408691 f asout.obj + 0001:00007d60 _err 00408d60 f assubr.obj + 0001:00007dfe _diag 00408dfe f assubr.obj + 0001:00007f58 _rerr 00408f58 f assubr.obj + 0001:00007f67 _aerr 00408f67 f assubr.obj + 0001:00007f76 _qerr 00408f76 f assubr.obj + 0001:00007f85 _geterr 00408f85 f assubr.obj + 0001:00008060 _syminit 00409060 f assym.obj + 0001:00008165 _alookup 00409165 f assym.obj + 0001:000081a5 _mlookup 004091a5 f assym.obj + 0001:000081fd _slookup 004091fd f assym.obj + 0001:0000825e _lookup 0040925e f assym.obj + 0001:00008351 _symglob 00409351 f assym.obj + 0001:000083ab _allglob 004093ab f assym.obj + 0001:0000840f _symeq 0040940f f assym.obj + 0001:000084b4 _hash 004094b4 f assym.obj + 0001:00008515 _strsto 00409515 f assym.obj + 0001:00008594 _new 00409594 f assym.obj + 0001:00008730 _addr 00409730 f z80adr.obj + 0001:000089f9 _admode 004099f9 f z80adr.obj + 0001:00008a68 _srch 00409a68 f z80adr.obj + 0001:00008b2d _any 00409b2d f z80adr.obj + 0001:00008c70 _machine 00409c70 f z80mch.obj + 0001:00009d09 _genop 0040ad09 f z80mch.obj + 0001:00009e23 _gixiy 0040ae23 f z80mch.obj + 0001:00009e99 _mchpcr 0040ae99 f z80mch.obj + 0001:00009edb _comma 0040aedb f z80mch.obj + 0001:00009ef4 _minit 0040aef4 f z80mch.obj + 0001:0000a3b0 _strlen 0040b3b0 f LIBC:strlen.obj + 0001:0000a430 _strcpy 0040b430 f LIBC:strcat.obj + 0001:0000a440 _strcat 0040b440 f LIBC:strcat.obj + 0001:0000a520 _fclose 0040b520 f LIBC:fclose.obj + 0001:0000a576 _fgets 0040b576 f LIBC:fgets.obj + 0001:0000a5cd __flsbuf 0040b5cd f LIBC:_flsbuf.obj + 0001:0000a6e2 _fprintf 0040b6e2 f LIBC:fprintf.obj + 0001:0000a720 _strcmp 0040b720 f LIBC:strcmp.obj + 0001:0000a7a4 _malloc 0040b7a4 f LIBC:malloc.obj + 0001:0000a7b6 __nh_malloc 0040b7b6 f LIBC:malloc.obj + 0001:0000a7e2 __heap_alloc 0040b7e2 f LIBC:malloc.obj + 0001:0000a818 _rewind 0040b818 f LIBC:rewind.obj + 0001:0000a86c ___initstdio 0040b86c f LIBC:_file.obj + 0001:0000a911 ___endstdio 0040b911 f LIBC:_file.obj + 0001:0000a928 __setjmp3 0040b928 f LIBC:setjmp3.obj + 0001:0000a9a3 __cinit 0040b9a3 f LIBC:crt0dat.obj + 0001:0000a9d0 _exit 0040b9d0 f LIBC:crt0dat.obj + 0001:0000a9e1 __exit 0040b9e1 f LIBC:crt0dat.obj + 0001:0000a9f2 __cexit 0040b9f2 f LIBC:crt0dat.obj + 0001:0000aa01 __c_exit 0040ba01 f LIBC:crt0dat.obj + 0001:0000aac3 _printf 0040bac3 f LIBC:printf.obj + 0001:0000aaf4 __fsopen 0040baf4 f LIBC:fopen.obj + 0001:0000ab14 _fopen 0040bb14 f LIBC:fopen.obj + 0001:0000ab30 _strncpy 0040bb30 f LIBC:strncpy.obj + 0001:0000ac30 _strrchr 0040bc30 f LIBC:strrchr.obj + 0001:0000ac58 _longjmp 0040bc58 f LIBC:longjmp.obj + 0001:0000acd1 _sprintf 0040bcd1 f LIBC:sprintf.obj + 0001:0000ad23 _mainCRTStartup 0040bd23 f LIBC:crt0.obj + 0001:0000ae02 __amsg_exit 0040be02 f LIBC:crt0.obj + 0001:0000ae4b _free 0040be4b f LIBC:free.obj + 0001:0000ae7a __close 0040be7a f LIBC:close.obj + 0001:0000af2d __freebuf 0040bf2d f LIBC:_freebuf.obj + 0001:0000af58 _fflush 0040bf58 f LIBC:fflush.obj + 0001:0000af93 __flush 0040bf93 f LIBC:fflush.obj + 0001:0000afef __flushall 0040bfef f LIBC:fflush.obj + 0001:0000b065 __filbuf 0040c065 f LIBC:_filbuf.obj + 0001:0000b13e __lseek 0040c13e f LIBC:lseek.obj + 0001:0000b1d8 __ioinit 0040c1d8 f LIBC:ioinit.obj + 0001:0000b383 __ioterm 0040c383 f LIBC:ioinit.obj + 0001:0000b3a6 __write 0040c3a6 f LIBC:write.obj + 0001:0000b553 __getbuf 0040c553 f LIBC:_getbuf.obj + 0001:0000b597 __isatty 0040c597 f LIBC:isatty.obj + 0001:0000b5bd __stbuf 0040c5bd f LIBC:_sftbuf.obj + 0001:0000b64a __ftbuf 0040c64a f LIBC:_sftbuf.obj + 0001:0000b687 __output 0040c687 f LIBC:output.obj + 0001:0000be91 ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z 0040ce91 f LIBC:handler.obj + 0001:0000bea1 ?_query_new_handler@@YAP6AHI@ZXZ 0040cea1 f LIBC:handler.obj + 0001:0000bea7 __callnewh 0040cea7 f LIBC:handler.obj + 0001:0000bec2 __heap_init 0040cec2 f LIBC:heapinit.obj + 0001:0000befe __heap_term 0040cefe f LIBC:heapinit.obj + 0001:0000bf73 __get_sbh_threshold 0040cf73 f LIBC:sbheap.obj + 0001:0000bf79 __set_sbh_threshold 0040cf79 f LIBC:sbheap.obj + 0001:0000bf90 ___sbh_heap_init 0040cf90 f LIBC:sbheap.obj + 0001:0000bfce ___sbh_find_block 0040cfce f LIBC:sbheap.obj + 0001:0000bff9 ___sbh_free_block 0040cff9 f LIBC:sbheap.obj + 0001:0000c324 ___sbh_alloc_block 0040d324 f LIBC:sbheap.obj + 0001:0000c62d ___sbh_alloc_new_region 0040d62d f LIBC:sbheap.obj + 0001:0000c6de ___sbh_alloc_new_group 0040d6de f LIBC:sbheap.obj + 0001:0000c7d9 ___sbh_resize_block 0040d7d9 f LIBC:sbheap.obj + 0001:0000cacf ___sbh_heapmin 0040dacf f LIBC:sbheap.obj + 0001:0000cba0 ___sbh_heap_check 0040dba0 f LIBC:sbheap.obj + 0001:0000cecf _calloc 0040decf f LIBC:calloc.obj + 0001:0000cf4c __fcloseall 0040df4c f LIBC:closeall.obj + 0001:0000cfa4 __global_unwind2 0040dfa4 f LIBC:exsup.obj + 0001:0000cfe6 __local_unwind2 0040dfe6 f LIBC:exsup.obj + 0001:0000d03e __NLG_Return2 0040e03e f LIBC:exsup.obj + 0001:0000d04e __abnormal_termination 0040e04e f LIBC:exsup.obj + 0001:0000d071 __NLG_Notify1 0040e071 f LIBC:exsup.obj + 0001:0000d07a __NLG_Notify 0040e07a f LIBC:exsup.obj + 0001:0000d08d __NLG_Dispatch 0040e08d f LIBC:exsup.obj + 0001:0000d092 __openfile 0040e092 f LIBC:_open.obj + 0001:0000d202 __getstream 0040e202 f LIBC:stream.obj + 0001:0000d27a __rt_probe_read4@4 0040e27a f LIBC:sehsupp.obj + 0001:0000d2df __XcptFilter 0040e2df f LIBC:winxfltr.obj + 0001:0000d463 __setenvp 0040e463 f LIBC:stdenvp.obj + 0001:0000d51c __setargv 0040e51c f LIBC:stdargv.obj + 0001:0000d769 ___crtGetEnvironmentStringsA 0040e769 f LIBC:a_env.obj + 0001:0000d8a4 __except_handler3 0040e8a4 f LIBC:exsup3.obj + 0001:0000d961 __seh_longjmp_unwind@4 0040e961 f LIBC:exsup3.obj + 0001:0000d97c __FF_MSGBANNER 0040e97c f LIBC:crt0msg.obj + 0001:0000d9b5 __NMSG_WRITE 0040e9b5 f LIBC:crt0msg.obj + 0001:0000db08 __GET_RTERRMSG 0040eb08 f LIBC:crt0msg.obj + 0001:0000db39 __dosmaperr 0040eb39 f LIBC:dosmap.obj + 0001:0000dba0 __alloc_osfhnd 0040eba0 f LIBC:osfinfo.obj + 0001:0000dc35 __set_osfhnd 0040ec35 f LIBC:osfinfo.obj + 0001:0000dcac __free_osfhnd 0040ecac f LIBC:osfinfo.obj + 0001:0000dd26 __get_osfhandle 0040ed26 f LIBC:osfinfo.obj + 0001:0000dd63 __open_osfhandle 0040ed63 f LIBC:osfinfo.obj + 0001:0000de00 __commit 0040ee00 f LIBC:commit.obj + 0001:0000de57 __read 0040ee57 f LIBC:read.obj + 0001:0000e04d _wctomb 0040f04d f LIBC:wctomb.obj + 0001:0000e0c0 __aulldiv 0040f0c0 f LIBC:ulldiv.obj + 0001:0000e130 __aullrem 0040f130 f LIBC:ullrem.obj + 0001:0000e1b0 _memmove 0040f1b0 f LIBC:memmove.obj + 0001:0000e4f0 _memset 0040f4f0 f LIBC:memset.obj + 0001:0000e548 __open 0040f548 f LIBC:open.obj + 0001:0000e55f __sopen 0040f55f f LIBC:open.obj + 0001:0000e818 __setmbcp 0040f818 f LIBC:mbctype.obj + 0001:0000ebdc __getmbcp 0040fbdc f LIBC:mbctype.obj + 0001:0000ebec ___initmbctable 0040fbec f LIBC:mbctype.obj + 0001:0000ec10 _memcpy 0040fc10 f LIBC:memcpy.obj + 0001:0000ef45 ___crtMessageBoxA 0040ff45 f LIBC:crtmbox.obj + 0001:0000efce __fptrap 0040ffce f LIBC:crt0fp.obj + 0001:0000efd7 __chsize 0040ffd7 f LIBC:chsize.obj + 0001:0000f11d ___crtLCMapStringA 0041011d f LIBC:a_map.obj + 0001:0000f36c ___crtGetStringTypeA 0041036c f LIBC:a_str.obj + 0001:0000f4b5 __setmode 004104b5 f LIBC:setmode.obj + 0001:0000f530 __alloca_probe 00410530 f LIBC:chkstk.obj + 0001:0000f530 __chkstk 00410530 f LIBC:chkstk.obj + 0001:0000f560 _HeapAlloc@12 00410560 f kernel32:KERNEL32.dll + 0001:0000f566 _ExitProcess@4 00410566 f kernel32:KERNEL32.dll + 0001:0000f56c _TerminateProcess@8 0041056c f kernel32:KERNEL32.dll + 0001:0000f572 _GetCurrentProcess@0 00410572 f kernel32:KERNEL32.dll + 0001:0000f578 _GetCommandLineA@0 00410578 f kernel32:KERNEL32.dll + 0001:0000f57e _GetVersion@0 0041057e f kernel32:KERNEL32.dll + 0001:0000f584 _HeapFree@12 00410584 f kernel32:KERNEL32.dll + 0001:0000f58a _GetLastError@0 0041058a f kernel32:KERNEL32.dll + 0001:0000f590 _CloseHandle@4 00410590 f kernel32:KERNEL32.dll + 0001:0000f596 _SetFilePointer@16 00410596 f kernel32:KERNEL32.dll + 0001:0000f59c _SetHandleCount@4 0041059c f kernel32:KERNEL32.dll + 0001:0000f5a2 _GetStdHandle@4 004105a2 f kernel32:KERNEL32.dll + 0001:0000f5a8 _GetFileType@4 004105a8 f kernel32:KERNEL32.dll + 0001:0000f5ae _GetStartupInfoA@4 004105ae f kernel32:KERNEL32.dll + 0001:0000f5b4 _WriteFile@20 004105b4 f kernel32:KERNEL32.dll + 0001:0000f5ba _HeapDestroy@4 004105ba f kernel32:KERNEL32.dll + 0001:0000f5c0 _HeapCreate@12 004105c0 f kernel32:KERNEL32.dll + 0001:0000f5c6 _VirtualFree@12 004105c6 f kernel32:KERNEL32.dll + 0001:0000f5cc _VirtualAlloc@16 004105cc f kernel32:KERNEL32.dll + 0001:0000f5d2 _HeapReAlloc@16 004105d2 f kernel32:KERNEL32.dll + 0001:0000f5d8 _IsBadWritePtr@8 004105d8 f kernel32:KERNEL32.dll + 0001:0000f5de _RtlUnwind@16 004105de f kernel32:KERNEL32.dll + 0001:0000f5e4 _UnhandledExceptionFilter@4 004105e4 f kernel32:KERNEL32.dll + 0001:0000f5ea _GetModuleFileNameA@12 004105ea f kernel32:KERNEL32.dll + 0001:0000f5f0 _FreeEnvironmentStringsA@4 004105f0 f kernel32:KERNEL32.dll + 0001:0000f5f6 _FreeEnvironmentStringsW@4 004105f6 f kernel32:KERNEL32.dll + 0001:0000f5fc _WideCharToMultiByte@32 004105fc f kernel32:KERNEL32.dll + 0001:0000f602 _GetEnvironmentStrings@0 00410602 f kernel32:KERNEL32.dll + 0001:0000f608 _GetEnvironmentStringsW@0 00410608 f kernel32:KERNEL32.dll + 0001:0000f60e _SetStdHandle@8 0041060e f kernel32:KERNEL32.dll + 0001:0000f614 _FlushFileBuffers@4 00410614 f kernel32:KERNEL32.dll + 0001:0000f61a _ReadFile@20 0041061a f kernel32:KERNEL32.dll + 0001:0000f620 _CreateFileA@28 00410620 f kernel32:KERNEL32.dll + 0001:0000f626 _GetCPInfo@8 00410626 f kernel32:KERNEL32.dll + 0001:0000f62c _GetACP@0 0041062c f kernel32:KERNEL32.dll + 0001:0000f632 _GetOEMCP@0 00410632 f kernel32:KERNEL32.dll + 0001:0000f638 _GetProcAddress@8 00410638 f kernel32:KERNEL32.dll + 0001:0000f63e _LoadLibraryA@4 0041063e f kernel32:KERNEL32.dll + 0001:0000f644 _SetEndOfFile@4 00410644 f kernel32:KERNEL32.dll + 0001:0000f64a _MultiByteToWideChar@24 0041064a f kernel32:KERNEL32.dll + 0001:0000f650 _LCMapStringA@24 00410650 f kernel32:KERNEL32.dll + 0001:0000f656 _LCMapStringW@24 00410656 f kernel32:KERNEL32.dll + 0001:0000f65c _GetStringTypeA@20 0041065c f kernel32:KERNEL32.dll + 0001:0000f662 _GetStringTypeW@16 00410662 f kernel32:KERNEL32.dll + 0002:0000002c ___lookuptable 0041302c LIBC:output.obj + 0002:00000088 ??_C@_1O@POHA@?$AA?$CI?$AAn?$AAu?$AAl?$AAl?$AA?$CJ?$AA?$AA@ 00413088 LIBC:output.obj + 0002:00000098 ??_C@_06ONKE@?$CInull?$CJ?$AA@ 00413098 LIBC:output.obj + 0002:000000ac ??_C@_0P@GGKG@runtime?5error?5?$AA@ 004130ac LIBC:crt0msg.obj + 0002:000000bc ??_C@_02PIMC@?$AN?6?$AA@ 004130bc LIBC:crt0msg.obj + 0002:000000c0 ??_C@_0O@DELO@TLOSS?5error?$AN?6?$AA@ 004130c0 LIBC:crt0msg.obj + 0002:000000d0 ??_C@_0N@OMLL@SING?5error?$AN?6?$AA@ 004130d0 LIBC:crt0msg.obj + 0002:000000e0 ??_C@_0P@OJAK@DOMAIN?5error?$AN?6?$AA@ 004130e0 LIBC:crt0msg.obj + 0002:000000f0 ??_C@_0CF@EANP@R6028?$AN?6?9?5unable?5to?5initialize?5he@ 004130f0 LIBC:crt0msg.obj + 0002:00000118 ??_C@_0DF@ECGN@R6027?$AN?6?9?5not?5enough?5space?5for?5lo@ 00413118 LIBC:crt0msg.obj + 0002:00000150 ??_C@_0DF@FKAC@R6026?$AN?6?9?5not?5enough?5space?5for?5st@ 00413150 LIBC:crt0msg.obj + 0002:00000188 ??_C@_0CG@DPMN@R6025?$AN?6?9?5pure?5virtual?5function?5c@ 00413188 LIBC:crt0msg.obj + 0002:000001b0 ??_C@_0DF@CKIP@R6024?$AN?6?9?5not?5enough?5space?5for?5_o@ 004131b0 LIBC:crt0msg.obj + 0002:000001e8 ??_C@_0CJ@GGOE@R6019?$AN?6?9?5unable?5to?5open?5console?5@ 004131e8 LIBC:crt0msg.obj + 0002:00000214 ??_C@_0CB@LBOB@R6018?$AN?6?9?5unexpected?5heap?5error?$AN?6@ 00413214 LIBC:crt0msg.obj + 0002:00000238 ??_C@_0CN@FPEG@R6017?$AN?6?9?5unexpected?5multithread?5@ 00413238 LIBC:crt0msg.obj + 0002:00000268 ??_C@_0CM@OBIC@R6016?$AN?6?9?5not?5enough?5space?5for?5th@ 00413268 LIBC:crt0msg.obj + 0002:00000294 ??_C@_0CB@HPAL@?$AN?6abnormal?5program?5termination?$AN?6@ 00413294 LIBC:crt0msg.obj + 0002:000002b8 ??_C@_0CM@JOOB@R6009?$AN?6?9?5not?5enough?5space?5for?5en@ 004132b8 LIBC:crt0msg.obj + 0002:000002e4 ??_C@_0CK@OIBL@R6008?$AN?6?9?5not?5enough?5space?5for?5ar@ 004132e4 LIBC:crt0msg.obj + 0002:00000310 ??_C@_0CF@LKPB@R6002?$AN?6?9?5floating?5point?5not?5load@ 00413310 LIBC:crt0msg.obj + 0002:00000338 ??_C@_0CF@JPDF@Microsoft?5Visual?5C?$CL?$CL?5Runtime?5Lib@ 00413338 LIBC:crt0msg.obj + 0002:00000360 ??_C@_02JJJH@?6?6?$AA@ 00413360 LIBC:crt0msg.obj + 0002:00000364 ??_C@_0BK@DEOK@Runtime?5Error?$CB?6?6Program?3?5?$AA@ 00413364 LIBC:crt0msg.obj + 0002:00000380 ??_C@_03NAME@?4?4?4?$AA@ 00413380 LIBC:crt0msg.obj + 0002:00000384 ??_C@_0BH@NNCD@?$DMprogram?5name?5unknown?$DO?$AA@ 00413384 LIBC:crt0msg.obj + 0002:0000039c ??_C@_0BD@NJFP@GetLastActivePopup?$AA@ 0041339c LIBC:crtmbox.obj + 0002:000003b0 ??_C@_0BA@GILI@GetActiveWindow?$AA@ 004133b0 LIBC:crtmbox.obj + 0002:000003c0 ??_C@_0M@PKCK@MessageBoxA?$AA@ 004133c0 LIBC:crtmbox.obj + 0002:000003cc ??_C@_0L@HKL@user32?4dll?$AA@ 004133cc LIBC:crtmbox.obj + 0002:000003d8 ??_C@_01A@?$AA?$AA@ 004133d8 LIBC:a_map.obj + 0002:000003dc ??_C@_13A@?$AA?$AA?$AA?$AA@ 004133dc LIBC:a_map.obj + 0003:00000000 ___xc_a 00414000 LIBC:crt0init.obj + 0003:00000104 ___xc_z 00414104 LIBC:crt0init.obj + 0003:00000208 ___xi_a 00414208 LIBC:crt0init.obj + 0003:00000418 ___xi_z 00414418 LIBC:crt0init.obj + 0003:0000051c ___xp_a 0041451c LIBC:crt0init.obj + 0003:00000724 ___xp_z 00414724 LIBC:crt0init.obj + 0003:00000828 ___xt_a 00414828 LIBC:crt0init.obj + 0003:0000092c ___xt_z 0041492c LIBC:crt0init.obj + 0003:00000a30 _symtbl 00414a30 asdata.obj + 0003:00000a40 _aretbl 00414a40 asdata.obj + 0003:00000a50 _sym 00414a50 asdata.obj + 0003:00000a88 _area 00414a88 asdata.obj + 0003:00000aa0 _ctype 00414aa0 asdata.obj + 0003:00000b20 _ccase 00414b20 asdata.obj + 0003:00001214 _usetxt 00415214 asmain.obj + 0003:00001670 _txtp 00415670 asout.obj + 0003:00001674 _relp 00415674 asout.obj + 0003:00001824 _errors 00415824 assubr.obj + 0003:00001b78 _R8 00415b78 z80adr.obj + 0003:00001bb8 _R8X 00415bb8 z80adr.obj + 0003:00001bd0 _R16 00415bd0 z80adr.obj + 0003:00001c08 _R16X 00415c08 z80adr.obj + 0003:00001c20 _CND 00415c20 z80adr.obj + 0003:00001ca4 _cpu 00415ca4 z80ext.obj + 0003:00001ca8 _dsft 00415ca8 z80ext.obj + 0003:00001cd4 _imtab 00415cd4 z80mch.obj + 0003:00001cd8 _mne 00415cd8 z80pst.obj + 0003:00002cb0 __iob 00416cb0 LIBC:_file.obj + 0003:00002f30 __aexit_rtn 00416f30 LIBC:crt0.obj + 0003:00002f34 ___app_type 00416f34 LIBC:crt0.obj + 0003:00002f38 ___badioinfo 00416f38 LIBC:ioinit.obj + 0003:00002f40 ___nullstring 00416f40 LIBC:output.obj + 0003:00002f44 ___wnullstring 00416f44 LIBC:output.obj + 0003:00002f48 __amblksiz 00416f48 LIBC:heapinit.obj + 0003:00002f4c ___sbh_threshold 00416f4c LIBC:sbheap.obj + 0003:00002f50 __NLG_Destination 00416f50 LIBC:exsup.obj + 0003:00002f60 __XcptActTab 00416f60 LIBC:winxfltr.obj + 0003:00002fd8 __First_FPE_Indx 00416fd8 LIBC:winxfltr.obj + 0003:00002fdc __Num_FPE 00416fdc LIBC:winxfltr.obj + 0003:00002fe0 __XcptActTabCount 00416fe0 LIBC:winxfltr.obj + 0003:00002fe4 __fpecode 00416fe4 LIBC:winxfltr.obj + 0003:000031e0 __cfltcvt_tab 004171e0 LIBC:cmiscdat.obj + 0003:000031f8 __pctype 004171f8 LIBC:ctype.obj + 0003:000031fc __pwctype 004171fc LIBC:ctype.obj + 0003:00003200 __ctype 00417200 LIBC:ctype.obj + 0003:00003510 ___mb_cur_max 00417510 LIBC:nlsdata1.obj + 0003:00003514 ___decimal_point 00417514 LIBC:nlsdata1.obj + 0003:00003518 ___decimal_point_length 00417518 LIBC:nlsdata1.obj + 0003:00003804 _hd64 00417804 + 0003:00003824 _uflag 00417824 + 0003:00003828 _hilo 00417828 z80ext.obj + 0003:0000382c __cflush 0041782c LIBC:_file.obj + 0003:00003830 _errno 00417830 LIBC:crt0dat.obj + 0003:00003834 __doserrno 00417834 LIBC:crt0dat.obj + 0003:00003838 __umaskval 00417838 LIBC:crt0dat.obj + 0003:0000383c __osver 0041783c LIBC:crt0dat.obj + 0003:00003840 __winver 00417840 LIBC:crt0dat.obj + 0003:00003844 __winmajor 00417844 LIBC:crt0dat.obj + 0003:00003848 __winminor 00417848 LIBC:crt0dat.obj + 0003:0000384c ___argc 0041784c LIBC:crt0dat.obj + 0003:00003850 ___argv 00417850 LIBC:crt0dat.obj + 0003:00003854 ___wargv 00417854 LIBC:crt0dat.obj + 0003:00003858 __environ 00417858 LIBC:crt0dat.obj + 0003:0000385c ___initenv 0041785c LIBC:crt0dat.obj + 0003:00003860 __wenviron 00417860 LIBC:crt0dat.obj + 0003:00003864 ___winitenv 00417864 LIBC:crt0dat.obj + 0003:00003868 __pgmptr 00417868 LIBC:crt0dat.obj + 0003:0000386c __wpgmptr 0041786c LIBC:crt0dat.obj + 0003:00003870 __exitflag 00417870 LIBC:crt0dat.obj + 0003:00003874 __C_Termination_Done 00417874 LIBC:crt0dat.obj + 0003:00003878 __C_Exit_Done 00417878 LIBC:crt0dat.obj + 0003:0000387c __aenvptr 0041787c LIBC:crt0.obj + 0003:00003880 __wenvptr 00417880 LIBC:crt0.obj + 0003:00003884 ___error_mode 00417884 LIBC:crt0.obj + 0003:00003888 __stdbuf 00417888 LIBC:_sftbuf.obj + 0003:00003890 __newmode 00417890 LIBC:_newmode.obj + 0003:00003894 ?_pnhHeap@@3P6AHI@ZA 00417894 LIBC:handler.obj + 0003:00003898 __pxcptinfoptrs 00417898 LIBC:winxfltr.obj + 0003:000039a4 __adbgmsg 004179a4 LIBC:crt0msg.obj + 0003:000039a8 __commode 004179a8 LIBC:ncommode.obj + 0003:000039bc ___lc_handle 004179bc LIBC:nlsdata2.obj + 0003:000039d4 ___lc_codepage 004179d4 LIBC:nlsdata2.obj + 0003:000039d8 ___lc_collate_cp 004179d8 LIBC:nlsdata2.obj + 0003:000039dc __fmode 004179dc LIBC:txtmode.obj + 0003:000039e8 _fflag 004179e8 + 0003:000039ec _tlevel 004179ec + 0003:000039f0 _rel 004179f0 + 0003:00003a00 _txt 00417a00 + 0003:00003a10 _symp 00417a10 + 0003:00003a14 _inpfil 00417a14 + 0003:00003a18 _afp 00417a18 + 0003:00003a1c _lmode 00417a1c + 0003:00003a20 _module 00417a20 + 0003:00003a74 _laddr 00417a74 + 0003:00003a78 _cpt 00417a78 + 0003:00003a7c _fuzz 00417a7c + 0003:00003a80 _afn 00417a80 + 0003:00003b80 _cbt 00417b80 + 0003:00003d80 _symhash 00417d80 + 0003:00003e80 _mnehash 00417e80 + 0003:00003f80 _srcfn 00417f80 + 0003:00004580 _srcfp 00418580 + 0003:00004598 _incfil 00418598 + 0003:0000459c _cfile 0041859c + 0003:000045a0 _erb 004185a0 + 0003:00004624 _lfp 00418624 + 0003:00004628 _gflag 00418628 + 0003:0000462c _a_mask 0041862c + 0003:00004630 _line 00418630 + 0003:00004634 _lop 00418634 + 0003:00004638 _ofp 00418638 + 0003:0000463c _zflag 0041863c + 0003:00004640 _incfn 00418640 + 0003:00004c40 _incfp 00418c40 + 0003:00004c58 _oflag 00418c58 + 0003:00004c5c _areap 00418c5c + 0003:00004c60 _ifp 00418c60 + 0003:00004c78 _tfp 00418c78 + 0003:00004c7c _page 00418c7c + 0003:00004c80 _srcline 00418c80 + 0003:00004c98 _pass 00418c98 + 0003:00004c9c _sflag 00418c9c + 0003:00004ca0 _sfp 00418ca0 + 0003:00004cb8 _eb 00418cb8 + 0003:00004cbc _cp 00418cbc + 0003:00004cc0 _stb 00418cc0 + 0003:00004d10 _aserr 00418d10 + 0003:00004d14 _ep 00418d14 + 0003:00004d18 _wflag 00418d18 + 0003:00004d1c _ip 00418d1c + 0003:00004d20 _cb 00418d20 + 0003:00004da0 _ib 00418da0 + 0003:00004e20 _afntmp 00418e20 + 0003:00004f20 _tb 00418f20 + 0003:00004f70 _lflag 00418f70 + 0003:00004f74 _a_bytes 00418f74 + 0003:00004f78 _afptmp 00418f78 + 0003:00004f7c _pflag 00418f7c + 0003:00004f80 _incline 00418f80 + 0003:00004f98 _aflag 00418f98 + 0003:00004f9c _s_mask 00418f9c + 0003:00004fa0 _ifcnd 00418fa0 + 0003:00004fcc _xflag 00418fcc + 0003:00004fd0 _radix 00418fd0 + 0003:00004fd4 _flevel 00418fd4 + 0003:00004fd8 _v_mask 00418fd8 + 0003:00004fe0 _jump_env 00418fe0 + 0003:00005020 _iflvl 00419020 + 0003:000055cc ___mbcodepage 004195cc + 0003:00005650 ___mbulinfo 00419650 + 0003:0000565c ___ismbcodepage 0041965c + 0003:00005660 __mbcasemap 00419660 + 0003:00005760 __mbctype 00419760 + 0003:00005864 ___mblcid 00419864 + 0003:00005868 ___sbh_sizeHeaderList 00419868 + 0003:00005878 ___sbh_indGroupDefer 00419878 + 0003:0000587c ___sbh_pHeaderScan 0041987c + 0003:00005880 ___sbh_pHeaderDefer 00419880 + 0003:00005884 ___sbh_cntHeaderList 00419884 + 0003:00005888 ___sbh_pHeaderList 00419888 + 0003:0000588c __crtheap 0041988c + 0003:000058a0 ___pioinfo 004198a0 + 0003:000059dc __nhandle 004199dc + 0003:000059e0 __acmdln 004199e0 + 0003:000059ec __setjmpexused 004199ec + 0003:000059f8 ___env_initialized 004199f8 + 0003:00005a08 ___mbctype_initialized 00419a08 + 0003:00005a0c ___onexitend 00419a0c + 0003:00005a10 ___onexitbegin 00419a10 + 0003:00005a14 __FPinit 00419a14 + 0003:00005a18 ___piob 00419a18 + 0003:00005d60 __bufin 00419d60 + 0003:00006d60 __nstream 0041ad60 + 0004:00000000 __IMPORT_DESCRIPTOR_KERNEL32 0041b000 kernel32:KERNEL32.dll + 0004:00000014 __NULL_IMPORT_DESCRIPTOR 0041b014 kernel32:KERNEL32.dll + 0004:00000124 __imp__HeapAlloc@12 0041b124 kernel32:KERNEL32.dll + 0004:00000128 __imp__ExitProcess@4 0041b128 kernel32:KERNEL32.dll + 0004:0000012c __imp__TerminateProcess@8 0041b12c kernel32:KERNEL32.dll + 0004:00000130 __imp__GetCurrentProcess@0 0041b130 kernel32:KERNEL32.dll + 0004:00000134 __imp__GetCommandLineA@0 0041b134 kernel32:KERNEL32.dll + 0004:00000138 __imp__GetVersion@0 0041b138 kernel32:KERNEL32.dll + 0004:0000013c __imp__HeapFree@12 0041b13c kernel32:KERNEL32.dll + 0004:00000140 __imp__GetLastError@0 0041b140 kernel32:KERNEL32.dll + 0004:00000144 __imp__CloseHandle@4 0041b144 kernel32:KERNEL32.dll + 0004:00000148 __imp__SetFilePointer@16 0041b148 kernel32:KERNEL32.dll + 0004:0000014c __imp__SetHandleCount@4 0041b14c kernel32:KERNEL32.dll + 0004:00000150 __imp__GetStdHandle@4 0041b150 kernel32:KERNEL32.dll + 0004:00000154 __imp__GetFileType@4 0041b154 kernel32:KERNEL32.dll + 0004:00000158 __imp__GetStartupInfoA@4 0041b158 kernel32:KERNEL32.dll + 0004:0000015c __imp__WriteFile@20 0041b15c kernel32:KERNEL32.dll + 0004:00000160 __imp__HeapDestroy@4 0041b160 kernel32:KERNEL32.dll + 0004:00000164 __imp__HeapCreate@12 0041b164 kernel32:KERNEL32.dll + 0004:00000168 __imp__VirtualFree@12 0041b168 kernel32:KERNEL32.dll + 0004:0000016c __imp__VirtualAlloc@16 0041b16c kernel32:KERNEL32.dll + 0004:00000170 __imp__HeapReAlloc@16 0041b170 kernel32:KERNEL32.dll + 0004:00000174 __imp__IsBadWritePtr@8 0041b174 kernel32:KERNEL32.dll + 0004:00000178 __imp__RtlUnwind@16 0041b178 kernel32:KERNEL32.dll + 0004:0000017c __imp__UnhandledExceptionFilter@4 0041b17c kernel32:KERNEL32.dll + 0004:00000180 __imp__GetModuleFileNameA@12 0041b180 kernel32:KERNEL32.dll + 0004:00000184 __imp__FreeEnvironmentStringsA@4 0041b184 kernel32:KERNEL32.dll + 0004:00000188 __imp__FreeEnvironmentStringsW@4 0041b188 kernel32:KERNEL32.dll + 0004:0000018c __imp__WideCharToMultiByte@32 0041b18c kernel32:KERNEL32.dll + 0004:00000190 __imp__GetEnvironmentStrings@0 0041b190 kernel32:KERNEL32.dll + 0004:00000194 __imp__GetEnvironmentStringsW@0 0041b194 kernel32:KERNEL32.dll + 0004:00000198 __imp__SetStdHandle@8 0041b198 kernel32:KERNEL32.dll + 0004:0000019c __imp__FlushFileBuffers@4 0041b19c kernel32:KERNEL32.dll + 0004:000001a0 __imp__ReadFile@20 0041b1a0 kernel32:KERNEL32.dll + 0004:000001a4 __imp__CreateFileA@28 0041b1a4 kernel32:KERNEL32.dll + 0004:000001a8 __imp__GetCPInfo@8 0041b1a8 kernel32:KERNEL32.dll + 0004:000001ac __imp__GetACP@0 0041b1ac kernel32:KERNEL32.dll + 0004:000001b0 __imp__GetOEMCP@0 0041b1b0 kernel32:KERNEL32.dll + 0004:000001b4 __imp__GetProcAddress@8 0041b1b4 kernel32:KERNEL32.dll + 0004:000001b8 __imp__LoadLibraryA@4 0041b1b8 kernel32:KERNEL32.dll + 0004:000001bc __imp__SetEndOfFile@4 0041b1bc kernel32:KERNEL32.dll + 0004:000001c0 __imp__MultiByteToWideChar@24 0041b1c0 kernel32:KERNEL32.dll + 0004:000001c4 __imp__LCMapStringA@24 0041b1c4 kernel32:KERNEL32.dll + 0004:000001c8 __imp__LCMapStringW@24 0041b1c8 kernel32:KERNEL32.dll + 0004:000001cc __imp__GetStringTypeA@20 0041b1cc kernel32:KERNEL32.dll + 0004:000001d0 __imp__GetStringTypeW@16 0041b1d0 kernel32:KERNEL32.dll + 0004:000001d4 \177KERNEL32_NULL_THUNK_DATA 0041b1d4 kernel32:KERNEL32.dll - entry point at 0001:0000acf3 + entry point at 0001:0000ad23 diff --git a/src/mkutil/as-z80/asdata.c b/src/mkutil/as-z80/asdata.c index c0bf59d1..00092cb3 100644 --- a/src/mkutil/as-z80/asdata.c +++ b/src/mkutil/as-z80/asdata.c @@ -101,6 +101,8 @@ int gflag; /* -g, make undefined symbols global flag */ int aflag; /* -a, make all symbols global flag */ +int uflag; /* -u, underscore prepended to globals flag + */ int oflag; /* -o, generate relocatable output flag */ int sflag; /* -s, generate symbol table flag diff --git a/src/mkutil/as-z80/asdata.obj b/src/mkutil/as-z80/asdata.obj new file mode 100644 index 0000000000000000000000000000000000000000..30a5bda10b2d65a0834e97e0f4183b37f6eb18d0 GIT binary patch literal 5248 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/as-z80/aslex.obj b/src/mkutil/as-z80/aslex.obj new file mode 100644 index 0000000000000000000000000000000000000000..66f462c1e74949ab5fb7a5697da265b3a2c9daff GIT binary patch literal 7382 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/as-z80/asmain.c b/src/mkutil/as-z80/asmain.c index 3c3fefc3..202b1c8b 100644 --- a/src/mkutil/as-z80/asmain.c +++ b/src/mkutil/as-z80/asmain.c @@ -166,7 +166,9 @@ char *argv[]; register int c, i; struct area *ap; +#if 0 /* Nick */ fprintf(stdout, "\n"); +#endif inpfil = -1; #if 1 /* Nick */ pflag = 0; @@ -182,6 +184,13 @@ char *argv[]; while ((c = *p++) != 0) switch(c) { +#if 1 /* Nick */ + case 'u': + case 'U': + ++uflag; + break; +#endif + case 'a': case 'A': ++aflag; @@ -1161,6 +1170,9 @@ loop: --incfil; err('i'); } else { +#if 1 /* Nick */ + printf("reading %s\n", afntmp); +#endif lop = NLPP; incline[incfil] = 0; strcpy(afn, afntmp); @@ -1222,10 +1234,21 @@ int wf; afilex(fn, ft); - if ((fp = fopen(afntmp, wf?"w":"r")) == NULL) { - fprintf(stderr, "%s: cannot %s.\n", afntmp, wf?"create":"open"); - asexit(ER_FATAL); + if ((fp = fopen(afntmp, wf ? "w" : "r")) == NULL) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "file \"%s\": can't %s\n", + afntmp, wf ? "create" : "open"); +#else + fprintf(stderr, "%s: cannot %s.\n", + afntmp, wf ? "create" : "open"); +#endif + asexit(ER_FATAL); } +#if 1 /* Nick */ + fflush(stderr); + printf("%s \"%s\"\n", wf ? "writing" : "reading", afntmp); +#endif strcpy(afn, afntmp); afp = afptmp; @@ -1279,12 +1302,17 @@ char *ft; { register char *p1, *p2, *p3; register int c; -#if 1 /* Nick */ +#if 0 /* Nick */ int l; #endif if (strlen(fn) > (FILSPC-5)) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "file \"%s\": name too long\n", fn); +#else fprintf(stderr, "File Specification %s is too long.", fn); +#endif asexit(ER_FATAL); } @@ -1292,6 +1320,15 @@ char *ft; * Save the File Name Index */ strcpy(afntmp, fn); +#ifdef WIN32 /* Nick */ + for (p1 = afntmp; *p1; p1++) + { + if (*p1 == '/') + { + *p1 = SLASH; + } + } +#endif afptmp = fndidx(afntmp); p1 = &afntmp[afptmp]; p2 = &fn[afptmp]; @@ -1299,7 +1336,7 @@ char *ft; /* * Skip to File Extension Seperator */ -#if 1 /* Nick */ +#if 0 /* Nick */ l = strlen(p2); for (c = l - 1; c >= 0; c--) { @@ -1308,11 +1345,7 @@ char *ft; l = c; break; } -#ifdef WIN32 - if (p2[c] == '\\') -#else - if (p2[c] == '/') -#endif + if (p2[c] == SLASH) { break; } @@ -1381,9 +1414,11 @@ char *str; * Skip Path Delimiters */ p1 = str; - if ((p2 = strrchr(p1, ':')) != NULL) { p1 = p2 + 1; } - if ((p2 = strrchr(p1, '/')) != NULL) { p1 = p2 + 1; } - if ((p2 = strrchr(p1, '\\')) != NULL) { p1 = p2 + 1; } + if ((p2 = strrchr(p1, ':')) != NULL) { p1 = p2 + 1; } +#ifdef WIN32 /* Nick */ + if ((p2 = strrchr(p1, '/')) != NULL) { p1 = p2 + 1; } +#endif + if ((p2 = strrchr(p1, SLASH)) != NULL) { p1 = p2 + 1; } return(p1 - str); } @@ -1471,6 +1506,9 @@ char *usetxt[] = { " x hex listing (default)", " g undefined symbols made global", " a all user symbols made global", +#if 1 /* Nick */ + " u underscore prepended to globals", +#endif " l create list output file1[.lst]", " o create object output file1[.rel]", " s create symbol output file1[.sym]", @@ -1517,8 +1555,15 @@ int n; { register char **dp; +#if 1 /* Nick */ + fflush(stderr); + printf("\nASxxxx Assembler %s (%s)\n\n", VERSION, cpu); + for (dp = usetxt; *dp; dp++) + printf("%s\n", *dp); +#else fprintf(stderr, "\nASxxxx Assembler %s (%s)\n\n", VERSION, cpu); for (dp = usetxt; *dp; dp++) fprintf(stderr, "%s\n", *dp); +#endif asexit(n); } diff --git a/src/mkutil/as-z80/asmain.obj b/src/mkutil/as-z80/asmain.obj new file mode 100644 index 0000000000000000000000000000000000000000..608a941ead3178c5c1f6d544160299c6bbea2f71 GIT binary patch literal 29354 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 HzwG}2+ceXE literal 0 HcmV?d00001 diff --git a/src/mkutil/as-z80/asout.c b/src/mkutil/as-z80/asout.c index 684b76f4..70bbc674 100644 --- a/src/mkutil/as-z80/asout.c +++ b/src/mkutil/as-z80/asout.c @@ -825,9 +825,14 @@ outgsd() * Module name */ if (module[0]) { +#if 1 /* Nick */ + ptr = &module[0]; + fprintf(ofp, "M %s\n", ptr); +#else fprintf(ofp, "M "); ptr = &module[0]; fprintf(ofp, "%s\n", ptr); +#endif } /* @@ -894,9 +899,14 @@ register struct area *ap; { register char *ptr; +#if 1 /* Nick */ + ptr = &ap->a_id[0]; + fprintf(ofp, "A %s", ptr); +#else fprintf(ofp, "A "); ptr = &ap->a_id[0]; fprintf(ofp, "%s", ptr); +#endif if (xflag == 0) { fprintf(ofp, " size %X flags %X\n", ap->a_size, ap->a_flag); } else @@ -944,10 +954,18 @@ register struct sym *sp; */ s_addr = sp->s_addr & a_mask; +#if 1 /* Nick */ + ptr = &sp->s_id[0]; /* JLH */ + fprintf(ofp, "S %s%s %s", + (uflag && *ptr != '.' && *ptr != '?') ? "_" : "", + ptr, + sp->s_type == S_NEW ? "Ref" : "Def"); +#else fprintf(ofp, "S "); ptr = &sp->s_id[0]; /* JLH */ fprintf(ofp, "%s", ptr); fprintf(ofp, " %s", sp->s_type==S_NEW ? "Ref" : "Def"); +#endif switch(xflag) { default: case 0: diff --git a/src/mkutil/as-z80/asout.obj b/src/mkutil/as-z80/asout.obj new file mode 100644 index 0000000000000000000000000000000000000000..6393b5378d4ba95f1efd8864bf7159642c0c0dc5 GIT binary patch literal 21762 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/as-z80/assubr.c b/src/mkutil/as-z80/assubr.c index f8ef428e..0c5b1b7e 100644 --- a/src/mkutil/as-z80/assubr.c +++ b/src/mkutil/as-z80/assubr.c @@ -66,6 +66,12 @@ err(c) register int c; { register char *p; +#if 1 /* Nick */ + if (pass == 2) + { + printf("file \"%s\": line %d: error '%c'\n", afn, line, c); + } +#endif aserr++; p = eb; diff --git a/src/mkutil/as-z80/assubr.obj b/src/mkutil/as-z80/assubr.obj new file mode 100644 index 0000000000000000000000000000000000000000..be9a7667d810b34e7d00d75a7f42a5cfcda389d6 GIT binary patch literal 5958 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/as-z80/assym.obj b/src/mkutil/as-z80/assym.obj new file mode 100644 index 0000000000000000000000000000000000000000..aaa0e4117e9bbb72024c23076bb56d9b33b9f65d GIT binary patch literal 7171 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 = S_IMMED; } else if (c == LFIND) { +#if 0 /* Nick differentiate between LD A,(SYMBOL) and LD A,(SYMBOL)+1 */ + ipsave = ip; +#endif if ((indx = admode(R8)) != 0) { mode = S_INDB; } else @@ -79,8 +85,18 @@ register struct expr *esp; silly_silly: #endif if ((c = getnb()) != RTIND) + { +#if 0 /* Nick differentiate between LD A,(SYMBOL) and LD A,(SYMBOL)+1 */ + ip = ipsave; + goto even_sillier; +#else qerr(); +#endif + } } else { +#if 0 /* Nick differentiate between LD A,(SYMBOL) and LD A,(SYMBOL)+1 */ + even_sillier: +#endif unget(c); if ((indx = admode(R8)) != 0) { mode = S_R8; diff --git a/src/mkutil/as-z80/z80adr.obj b/src/mkutil/as-z80/z80adr.obj new file mode 100644 index 0000000000000000000000000000000000000000..b621d076250527aed4e0c36757b5b54f6dc7ccdc GIT binary patch literal 4818 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/as-z80/z80ext.obj b/src/mkutil/as-z80/z80ext.obj new file mode 100644 index 0000000000000000000000000000000000000000..89301272672ffffffca2cc8f7ea85e9876c25b31 GIT binary patch literal 1046 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 PR9>;VwX(Ll@>2R=5tY~4 literal 0 HcmV?d00001 diff --git a/src/mkutil/as-z80/z80pst.c b/src/mkutil/as-z80/z80pst.c index 80a82971..144ae09d 100644 --- a/src/mkutil/as-z80/z80pst.c +++ b/src/mkutil/as-z80/z80pst.c @@ -86,12 +86,14 @@ struct mne mne[] = { { NULL, ".title", S_TITLE, 0, 0 }, { NULL, "title", S_TITLE, 0, 0 }, /* Nick */ + { NULL, "name", S_TITLE, 0, 0 }, /* Nick */ { NULL, ".sbttl", S_SBTL, 0, 0 }, { NULL, "sbttl", S_SBTL, 0, 0 }, /* Nick */ { NULL, ".globl", S_GLOBL, 0, 0 }, { NULL, "extern", S_GLOBL, 0, 0 }, /* Nick */ + { NULL, "extrn", S_GLOBL, 0, 0 }, /* Nick */ { NULL, "public", S_GLOBL, 0, 0 }, /* Nick */ { NULL, ".area", S_DAREA, 0, 0 }, @@ -125,7 +127,6 @@ struct mne mne[] = { { NULL, ".module", S_MODUL, 0, 0 }, { NULL, "module", S_MODUL, 0, 0 }, /* Nick */ - { NULL, "name", S_MODUL, 0, 0 }, /* Nick */ { NULL, ".endmod", S_ENDMOD, 0, 0 }, /* Nick */ { NULL, "endmod", S_ENDMOD, 0, 0 }, /* Nick */ diff --git a/src/mkutil/as-z80/z80pst.obj b/src/mkutil/as-z80/z80pst.obj new file mode 100644 index 0000000000000000000000000000000000000000..98452b1ae8ac624e97eafe460b1224c15b3b1cd9 GIT binary patch literal 8478 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/bin2avr.exe b/src/mkutil/bin2avr.exe index 3ea5d5131218f0026f2f36d2168ae33fedca7fe7..0a228564d1862c4627a249d150943f5093e94e27 100644 GIT binary patch delta 150 zcmZ2?fMx3emI)77f-+s~H$K@e$!M~9j+7-ckh&(zEy*}#^CPnl_KYTzFPHTLImzV< zEqFmn8GwKZh)p*OZV(S(a!{J8#TduLr82dPaTO|Wy8{#B30Yl`CPttJcdMA>%JlNg hyqMCe%$VY$*Fwy`3 delta 120 zcmdmbfMwkQmI)77csq96ZG5s_l5xuBIZ~F)K=~y_zFgK1~?q7 zJQ|0z%eJvLn>I>JQQG`SUuxR^h-iOQZEPVyp;GfBs#=L3Y3nMg>ei?)rApeQxZk;V zW;|;k%1Hj^yWc(M+;h*pvoqHNo=O_h`?vSpMbts^QsWsdW{zuClO6dR zEt(r?I$}#VJVX`v`&)%ne7NnQ&`#CVPMNk5?%zYlN-xoyRYdU`qJG*>3JrcvjYrIg z%Wf9@!8(@!+DomMtZ_eM_iO?2BY*eB<8F#;iAXMKCiQ5~z}}sGid#4|(0_2pfn7%w zPIe?03V!o2T*9?PV% zsf4MlA8JuHw{ME-rqcIt-^Pu~p|q)w>1T9fMCnV7rS+tiQ6ASaSv_SaZS87ntJ>Aw z*{QZ}pxTf-Z7vO`@-5u2*4sTE-&jO9g5(bcAaN;uk<3Vp1ujnoLa;E-!u1aq7B0in zXGF#{A^dM)LAWI1x={~{cOaw@->(}9B*xM#q-${UM{|jUmZ^jE56jJ?FGuS=w64IQ ziak;}leG`5I8|t~9D??d_?9FjAtDn)r<}%B->SSy*k_nr&mb34%y#u?rlc!oW z9tkJ)tobVZxV*LWn#F49l!w=!wWlpsLr04@zIbCj9Iq9)TIdDi`7+B-1U%2w6?fGY z_xL7D+z+J!%F(*w&cLLw%TEixT+=9f%n7$EzEQ>1IN`D7{Im!iEO1h#60hK7iKXHc zM;R)Lkb{Q7N6TkiNR&I7ug-f{>VLjRl7h82Ve2WtvrDr)TPtKXu zWZ^oR`DsR)=(;slQIy)5_8miW#$qNzb{3Nb-oE*1M#|kTbXkFY9~Zh*;tg$Q5wJ!o z6EJbGHKpilSJ9o1tY$r!#Ogb{1m@SGE(MN0SS)c} z>;dJpJ>?g}t{L}Hv`(d#Oe|{PSK7_v&bPUM9W_~&j+#s|OV2fbqf$IhPE^wV-)z~Wh zhWAqgShLVJf;9=Y6>P2O-3BHj?*My1^zL=EgJ5#BV_h23|Y-q*ooydQ(fcs~bQBcfabyI*+x9_&7$y$dEI&wOFMJt! z8JLW`5^S}I@&K5uP#2i2MlaaCqIba2q7FL&_9@Xj?r6`0-2-g}{Sa)GVAsK9#pl3Q z3Xk`|D}-2J^>aKqv>GF1Un1HA6tGp2PSvj^I)>}FM`SHegjNa zw;I;+z3UaZ`^4H+i+xo~52J6H`1TCZ4)D8aAFzQw3tUBU;5}pjSJM}O_tRH^Ylz?E z3S9&?(yxGP=?}nW`Xg{1{TtXqKCJl$@&g~D08pj-fNj(X+)R6b9ds1fNnv0&od)*M zmw?;oW#FUqZQyo#1K3MH1NPBxfc^A4;A8Z6;BLAJ+)K4s$$iuSJU}hLgR~uZh>idU zNe3RL3E<=O67U$k0(^pg3Vf1&0X$A`1H<%ZV1zydCa4}OH%iSwoelz@q6uJ<&H_{P z9Pslr1!bJPg@GV!O)By9t}KtsTkw{A^LU7Wg{b6k79iUEAqopMN@gw`uJ0IBX+z7WhZ8Q*Nt?}R3b)P zfeBOoM&ysutfI#?!_;GuBs;_+#yV3;r8T2RVZW1(7RzW66T=ccfmh3(nY+RB?$^oj9O#<-T@FwI%TOaW^M z<;LzT&6ea|RNClDxzg25Z#qgio6g`6kbr>8iPP0dKS5iLF5+~x(~p)YZS;Ld31jcX z(UOD{$MN?c(&Yj(OR_!?9w3f-F zGPl@t(eR>;JB(G;+g78qgSISsWz9@%jI-fO%#@V~pZWM&%xAOswU#pt!v>F|G+FdY zpLQ$SDcz1@MNTA=x$LOhhRYN%0bfuZp3)jZtiY)WpBnv^#C h!G#T}npAiPFM7QutZi`rZ=jMrJ#t*TpYL3O{{tX%6iWaA literal 0 HcmV?d00001 diff --git a/src/mkutil/bin2c.exe b/src/mkutil/bin2c.exe index ec59276a56a1a9400b544811936520a91e6642fe..23be9988cf6b40595bd842dd0d33ebac7f59f945 100644 GIT binary patch delta 147 zcmZ3pfMxRnmI)770yACgH$HKfWHi~VBW1}9q|#)$B^jq|E;9RI&uB6^xvU?^`CKNb z$qQ1-00c}xY`j@;fp`FugV1EH4{=OfB9ps5tU~2&cKCEcRvV;;5vbnXDkixyy*x87 ernD+Erno3MCO5mZBr_)_DKpO~S+5`^i2(pCXECq< delta 140 zcmdnIfMv}BmI)77csq96ZG7S`$v9=Rj+7-ckV=!~mSi;9Tx9mao^i_LylrTq2XTKEyFO2u<$#unLv8+2PX(Srw2TMxc6UtC-TN%$VY$ XLPimiJTU(?Xn=-Ep|MBRMAV9U?5=>D zbshoeAaz`@^FH8cxR| zuFjn?-BN~j4Q=199Lrkzw0>4MQp%7yoz*j1PI*wv<#p3gc6X{B9cpi1IIMQGQ(dFT zYXdii3mL-yr6xz?3rt6Kqk)2rA&9t$)uL6hv-kXn@_(9qrYKv5e7BvVHPZw z{mYJ1gE5O6A^WfGRUJ1AhQ;aWnq5yuH?%4WQWJ$5pK&K0i0Ec)J^343Fp(hIZbd8} zJ`0N=>k3I8-ptx$*33(7frokhtQN60*uFKV*zU~)zS?1YnzarwOK74FJFE9sshK$CGHlqU_4)D#d9IwXY0$u_2rSkT!r^3*ETmJy+tTD$ffPytwF-!qQvTz0%rWVRgg#rs9953RO$nWJtd-Z#W++{#z|H zmFGF9Uj({TMN3sn-%fMkYp1tsbBZcmD6|Rd^dMXusdo@qnQ)pu$6`avsOWnDM z;%~4NYx#d!a-kE~SzZz;=wzr;;k$LbJkOnS=2$;h;#;q{z(@^Wd<9*QRjjV8T;bT` zm3gk$aSqwBFN^H}Pg-gy%bj$=-brP#f9|Pp_;cNIvo)N5vYAV1<-1}`WRqs6-mI=X zz22Lle(8HCyu{XHbkHvR5BrySdy2BKYe!a3K5*&D>SZ|DQ@VZ$KB8S~uf$po zc4roO`o)WZ)$I+~_kg_zMO53ee)Uc5Z2ds__a|PzAF;OM7o;&@JANDKVIV(lf^-6S zw~(cP+XVXxkYBbN=_O#RVC(Q$+6oq=X0R?oMb z_Ar>tmI1p<*cHL<6j448CZklqWR$Oi-68B=bhY0Clkt84CgZ&ZcDsmj8SFOU@hh;8 z3)yeMWaLFKMQHyCCL=Gq+5q0iGV%s68F>@f$3&FPV6sEKV6q#7V7ChGs4I)P>?GJN zLObKiz5upKRPY_JX2I~xL*Kd2Z@G4hu3a~dE8;Cghrw#JaRQ6kDq zU|WRUYhW_lPr&%y7o?xN+N-YieXs`MQHyua2Eq6(v|f0$g2_F!6HIop6HNAMFPQAr zI#|osoL^KN5FK78YN?}L&~2a|U?c4V-b{yq&GZoP7D@nbB?EXHeHwTNJq5gzz5!I| z`@k0ZDR2w@8rVv|0dAwe1KTKo6>O&}_U_R|x< zz4SEjUU~sIKraIa=|{jJdK-9v-T~f6?*R|eHQ*tt!@3-%X5bNO10JOT;4zv6j*$)= zr*psw`ZDkVdKUN~y$XDY-T;1*egXUxy$774e*jO=UFd#<#(|I0Brryg0pm0S)aY?w zik<AOIkehfTCZvqW^2WZk?fsauYRw74DK#O(&XQ&T&TAb--sgRGRw0=dLCKY)C zQ!!8;u}@KI{6sCqz?=P!CO)vc6gqNhdb14BKDU*t2_tT@^uYwj+9Rx ztTA2p8jR!2tm=v2mRiD7pZxgHSot8q1|YwWp8=~c@5cyN=J)aE2wLyCydNT1EZFdg zn?FD5%5U?Hge$^_ZApz3fUN`D_j+<)qBB;?+&xbZw+p2fgS@BG?NF z=>nA5v8nQo$c?k7hrZ-`i8y<@=`+_!x@h(~NvC){+cQn_ZoDCKxKBJ`Y@4i>%b7Xb z$ju(^#r^7b%p1n3d9AsJd+^k8z4BHrKArVMj<6)kpFw=B contributed the Cray support. + + There are some preprocessor constants that can + be defined when compiling for your specific system, for + improved efficiency; however, the defaults should be okay. + + The general concept of this implementation is to keep + track of all alloca-allocated blocks, and reclaim any + that are found to be deeper in the stack than the current + invocation. This heuristic does not reclaim storage as + soon as it becomes invalid, but it will do so eventually. + + As a special case, alloca(0) reclaims storage without + allocating any. It is a good idea to use alloca(0) in + your main control loop, etc. to force garbage collection. */ + +/* + +@deftypefn Replacement void* alloca (size_t @var{size}) + +This function allocates memory which will be automatically reclaimed +after the procedure exits. The @libib{} implementation does not free +the memory immediately but will do so eventually during subsequent +calls to this function. Memory is allocated using @code{xmalloc} under +normal circumstances. + +The header file @file{alloca-conf.h} can be used in conjunction with the +GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make +available this function. The @code{AC_FUNC_ALLOCA} test requires that +client code use a block of preprocessor code to be safe (see the Autoconf +manual for more); this header incorporates that logic and more, including +the possibility of a GCC built-in function. + +@end deftypefn + +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif + +/* These variables are used by the ASTRDUP implementation that relies + on C_alloca. */ +const char *libiberty_optr; +char *libiberty_nptr; +unsigned long libiberty_len; + +/* If your stack is a linked list of frames, you have to + provide an "address metric" ADDRESS_FUNCTION macro. */ + +#if defined (CRAY) && defined (CRAY_STACKSEG_END) +static long i00afunc (); +#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) +#else +#define ADDRESS_FUNCTION(arg) &(arg) +#endif + +#ifndef NULL +#define NULL 0 +#endif + +/* Define STACK_DIRECTION if you know the direction of stack + growth for your system; otherwise it will be automatically + deduced at run-time. + + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ + +#ifndef STACK_DIRECTION +#define STACK_DIRECTION 0 /* Direction unknown. */ +#endif + +#if STACK_DIRECTION != 0 + +#define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ + +#else /* STACK_DIRECTION == 0; need run-time code. */ + +static int stack_dir; /* 1 or -1 once known. */ +#define STACK_DIR stack_dir + +static void +find_stack_direction () +{ + static char *addr = NULL; /* Address of first `dummy', once known. */ + auto char dummy; /* To get stack address. */ + + if (addr == NULL) + { /* Initial entry. */ + addr = ADDRESS_FUNCTION (dummy); + + find_stack_direction (); /* Recurse once. */ + } + else + { + /* Second entry. */ + if (ADDRESS_FUNCTION (dummy) > addr) + stack_dir = 1; /* Stack grew upward. */ + else + stack_dir = -1; /* Stack grew downward. */ + } +} + +#endif /* STACK_DIRECTION == 0 */ + +/* An "alloca header" is used to: + (a) chain together all alloca'ed blocks; + (b) keep track of stack depth. + + It is very important that sizeof(header) agree with malloc + alignment chunk size. The following default should work okay. */ + +#ifndef ALIGN_SIZE +#define ALIGN_SIZE sizeof(double) +#endif + +typedef union hdr +{ + char align[ALIGN_SIZE]; /* To force sizeof(header). */ + struct + { + union hdr *next; /* For chaining headers. */ + char *deep; /* For stack depth measure. */ + } h; +} header; + +static header *last_alloca_header = NULL; /* -> last alloca header. */ + +/* Return a pointer to at least SIZE bytes of storage, + which will be automatically reclaimed upon exit from + the procedure that called alloca. Originally, this space + was supposed to be taken from the current stack frame of the + caller, but that method cannot be made to work for some + implementations of C, for example under Gould's UTX/32. */ + +/* @undocumented C_alloca */ + +PTR +C_alloca (size) + size_t size; +{ + auto char probe; /* Probes stack depth: */ + register char *depth = ADDRESS_FUNCTION (probe); + +#if STACK_DIRECTION == 0 + if (STACK_DIR == 0) /* Unknown growth direction. */ + find_stack_direction (); +#endif + + /* Reclaim garbage, defined as all alloca'd storage that + was allocated from deeper in the stack than currently. */ + + { + register header *hp; /* Traverses linked list. */ + + for (hp = last_alloca_header; hp != NULL;) + if ((STACK_DIR > 0 && hp->h.deep > depth) + || (STACK_DIR < 0 && hp->h.deep < depth)) + { + register header *np = hp->h.next; + + free ((PTR) hp); /* Collect garbage. */ + + hp = np; /* -> next header. */ + } + else + break; /* Rest are not deeper. */ + + last_alloca_header = hp; /* -> last valid storage. */ + } + + if (size == 0) + return NULL; /* No allocation required. */ + + /* Allocate combined header + user data storage. */ + + { + register PTR new = xmalloc (sizeof (header) + size); + /* Address of header. */ + + if (new == 0) + abort(); + + ((header *) new)->h.next = last_alloca_header; + ((header *) new)->h.deep = depth; + + last_alloca_header = (header *) new; + + /* User storage begins just after header. */ + + return (PTR) ((char *) new + sizeof (header)); + } +} + +#if defined (CRAY) && defined (CRAY_STACKSEG_END) + +#ifdef DEBUG_I00AFUNC +#include +#endif + +#ifndef CRAY_STACK +#define CRAY_STACK +#ifndef CRAY2 +/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ +struct stack_control_header + { + long shgrow:32; /* Number of times stack has grown. */ + long shaseg:32; /* Size of increments to stack. */ + long shhwm:32; /* High water mark of stack. */ + long shsize:32; /* Current size of stack (all segments). */ + }; + +/* The stack segment linkage control information occurs at + the high-address end of a stack segment. (The stack + grows from low addresses to high addresses.) The initial + part of the stack segment linkage control information is + 0200 (octal) words. This provides for register storage + for the routine which overflows the stack. */ + +struct stack_segment_linkage + { + long ss[0200]; /* 0200 overflow words. */ + long sssize:32; /* Number of words in this segment. */ + long ssbase:32; /* Offset to stack base. */ + long:32; + long sspseg:32; /* Offset to linkage control of previous + segment of stack. */ + long:32; + long sstcpt:32; /* Pointer to task common address block. */ + long sscsnm; /* Private control structure number for + microtasking. */ + long ssusr1; /* Reserved for user. */ + long ssusr2; /* Reserved for user. */ + long sstpid; /* Process ID for pid based multi-tasking. */ + long ssgvup; /* Pointer to multitasking thread giveup. */ + long sscray[7]; /* Reserved for Cray Research. */ + long ssa0; + long ssa1; + long ssa2; + long ssa3; + long ssa4; + long ssa5; + long ssa6; + long ssa7; + long sss0; + long sss1; + long sss2; + long sss3; + long sss4; + long sss5; + long sss6; + long sss7; + }; + +#else /* CRAY2 */ +/* The following structure defines the vector of words + returned by the STKSTAT library routine. */ +struct stk_stat + { + long now; /* Current total stack size. */ + long maxc; /* Amount of contiguous space which would + be required to satisfy the maximum + stack demand to date. */ + long high_water; /* Stack high-water mark. */ + long overflows; /* Number of stack overflow ($STKOFEN) calls. */ + long hits; /* Number of internal buffer hits. */ + long extends; /* Number of block extensions. */ + long stko_mallocs; /* Block allocations by $STKOFEN. */ + long underflows; /* Number of stack underflow calls ($STKRETN). */ + long stko_free; /* Number of deallocations by $STKRETN. */ + long stkm_free; /* Number of deallocations by $STKMRET. */ + long segments; /* Current number of stack segments. */ + long maxs; /* Maximum number of stack segments so far. */ + long pad_size; /* Stack pad size. */ + long current_address; /* Current stack segment address. */ + long current_size; /* Current stack segment size. This + number is actually corrupted by STKSTAT to + include the fifteen word trailer area. */ + long initial_address; /* Address of initial segment. */ + long initial_size; /* Size of initial segment. */ + }; + +/* The following structure describes the data structure which trails + any stack segment. I think that the description in 'asdef' is + out of date. I only describe the parts that I am sure about. */ + +struct stk_trailer + { + long this_address; /* Address of this block. */ + long this_size; /* Size of this block (does not include + this trailer). */ + long unknown2; + long unknown3; + long link; /* Address of trailer block of previous + segment. */ + long unknown5; + long unknown6; + long unknown7; + long unknown8; + long unknown9; + long unknown10; + long unknown11; + long unknown12; + long unknown13; + long unknown14; + }; + +#endif /* CRAY2 */ +#endif /* not CRAY_STACK */ + +#ifdef CRAY2 +/* Determine a "stack measure" for an arbitrary ADDRESS. + I doubt that "lint" will like this much. */ + +static long +i00afunc (long *address) +{ + struct stk_stat status; + struct stk_trailer *trailer; + long *block, size; + long result = 0; + + /* We want to iterate through all of the segments. The first + step is to get the stack status structure. We could do this + more quickly and more directly, perhaps, by referencing the + $LM00 common block, but I know that this works. */ + + STKSTAT (&status); + + /* Set up the iteration. */ + + trailer = (struct stk_trailer *) (status.current_address + + status.current_size + - 15); + + /* There must be at least one stack segment. Therefore it is + a fatal error if "trailer" is null. */ + + if (trailer == 0) + abort (); + + /* Discard segments that do not contain our argument address. */ + + while (trailer != 0) + { + block = (long *) trailer->this_address; + size = trailer->this_size; + if (block == 0 || size == 0) + abort (); + trailer = (struct stk_trailer *) trailer->link; + if ((block <= address) && (address < (block + size))) + break; + } + + /* Set the result to the offset in this segment and add the sizes + of all predecessor segments. */ + + result = address - block; + + if (trailer == 0) + { + return result; + } + + do + { + if (trailer->this_size <= 0) + abort (); + result += trailer->this_size; + trailer = (struct stk_trailer *) trailer->link; + } + while (trailer != 0); + + /* We are done. Note that if you present a bogus address (one + not in any segment), you will get a different number back, formed + from subtracting the address of the first block. This is probably + not what you want. */ + + return (result); +} + +#else /* not CRAY2 */ +/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. + Determine the number of the cell within the stack, + given the address of the cell. The purpose of this + routine is to linearize, in some sense, stack addresses + for alloca. */ + +static long +i00afunc (long address) +{ + long stkl = 0; + + long size, pseg, this_segment, stack; + long result = 0; + + struct stack_segment_linkage *ssptr; + + /* Register B67 contains the address of the end of the + current stack segment. If you (as a subprogram) store + your registers on the stack and find that you are past + the contents of B67, you have overflowed the segment. + + B67 also points to the stack segment linkage control + area, which is what we are really interested in. */ + + stkl = CRAY_STACKSEG_END (); + ssptr = (struct stack_segment_linkage *) stkl; + + /* If one subtracts 'size' from the end of the segment, + one has the address of the first word of the segment. + + If this is not the first segment, 'pseg' will be + nonzero. */ + + pseg = ssptr->sspseg; + size = ssptr->sssize; + + this_segment = stkl - size; + + /* It is possible that calling this routine itself caused + a stack overflow. Discard stack segments which do not + contain the target address. */ + + while (!(this_segment <= address && address <= stkl)) + { +#ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); +#endif + if (pseg == 0) + break; + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + this_segment = stkl - size; + } + + result = address - this_segment; + + /* If you subtract pseg from the current end of the stack, + you get the address of the previous stack segment's end. + This seems a little convoluted to me, but I'll bet you save + a cycle somewhere. */ + + while (pseg != 0) + { +#ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o\n", pseg, size); +#endif + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + result += size; + } + return (result); +} + +#endif /* not CRAY2 */ +#endif /* CRAY */ diff --git a/src/mkutil/cpp/alloca.obj b/src/mkutil/cpp/alloca.obj new file mode 100644 index 0000000000000000000000000000000000000000..1d01e022c658a71d11aedc28fff08f93b508fe17 GIT binary patch literal 2592 zcmZuzU5pb|6h70R-7>q~El>~vWiZH(3u6}y0T$D;YYiGI0?Umn_}*zaUpYc*UduL4Z93+t=6ysyiRcBt zrCE*7L5hs4*?QgK@ORMLu<<;_E~$og*6`StVXPAYqEkVl<$b86;P>Q7+wW5jH3slC z?B2qDcjUD~rcpGCdUoHT$HpfVuj25bN1iy4N*+@XG;N_}qO+3QH`SQcr|PxbROxiX z(2G;KYIQ18ELL(EwUT}Iagqqp&_qhl)hhK$!BDmy-KOl?xg)C^%EW^cBO}V;s-c(k zS-pHpnW&VidQqz>PiwWhUMVZ1JJncB-7~s-j~Y{HAmR=A3K~3%%c$S1bSzS6B5nB} zroKoB>IQ0{uFq-_C~hw@ukR%?~4&~#aYRSV{|sxiHa`gww)oP=C!!7#dZK>P}R zeA87giy23HteXz2T=gM5u3mNm%nKHK2xGRv_QScqtetV_`v_;nQw{)wLJy;EU*Q;} zXhARM({&@0JDtw!d;+mx%c(!Yld(!5lh4<9)?$v(1@nzk=^Q&+N1=%7x*5Wj>shU4 zoJ&`#MvaZVQ9Q;njB8=M&+$OvUeBUdUJduX6S>R{ZUgkZbXHkW%+w8glhV^#Ca=}P zh(2XO zx6wP0BlIEUcKR4nrB5Muins3}5hu}?&;;mP$Ugc3GDJT?%Jeg2m~KE0(VvjR^cQ4= zf>`(!h??jDtn#_l;rJNvy?1`nXL7q^YBis|r55l&gU98cMI;-^e(iIXj%6Z;cU;x; z*Eh(t2#z1Aua_cuzx~qY9^FRX^vF^9rFndK{|gtCwng%$M$VdkY0xtKNAeTMZ@=IO z+ZssL_B4FISi^<=5v5R and C89 more + thoroughly than the simple VA_START() macro mentioned above. + + VA_OPEN and VA_CLOSE are used *instead of* va_start and va_end. + Immediately after VA_OPEN, put a sequence of VA_FIXEDARG calls + corresponding to the list of fixed arguments. Then use va_arg + normally to get the variable arguments, or pass your va_list object + around. You do not declare the va_list yourself; VA_OPEN does it + for you. + + Here is a complete example: + + int + printf VPARAMS ((const char *format, ...)) + { + int result; + + VA_OPEN (ap, format); + VA_FIXEDARG (ap, const char *, format); + + result = vfprintf (stdout, format, ap); + VA_CLOSE (ap); + + return result; + } + + + You can declare variables either before or after the VA_OPEN, + VA_FIXEDARG sequence. Also, VA_OPEN and VA_CLOSE are the beginning + and end of a block. They must appear at the same nesting level, + and any variables declared after VA_OPEN go out of scope at + VA_CLOSE. Unfortunately, with a K+R compiler, that includes the + argument list. You can have multiple instances of VA_OPEN/VA_CLOSE + pairs in a single function in case you need to traverse the + argument list more than once. + + For ease of writing code which uses GCC extensions but needs to be + portable to other compilers, we provide the GCC_VERSION macro that + simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various + wrappers around __attribute__. Also, __extension__ will be #defined + to nothing if it doesn't work. See below. + + This header also defines a lot of obsolete macros: + CONST, VOLATILE, SIGNED, PROTO, EXFUN, DEFUN, DEFUN_VOID, + AND, DOTS, NOARGS. Don't use them. */ + +#ifndef _ANSIDECL_H +#define _ANSIDECL_H 1 + +/* Every source file includes this file, + so they will all get the switch for lint. */ +/* LINTLIBRARY */ + +/* Using MACRO(x,y) in cpp #if conditionals does not work with some + older preprocessors. Thus we can't define something like this: + +#define HAVE_GCC_VERSION(MAJOR, MINOR) \ + (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR))) + +and then test "#if HAVE_GCC_VERSION(2,7)". + +So instead we use the macro below and test it against specific values. */ + +/* This macro simplifies testing whether we are using gcc, and if it + is of a particular minimum version. (Both major & minor numbers are + significant.) This macro will evaluate to 0 if we are not using + gcc at all. */ +#ifndef GCC_VERSION +#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) +#endif /* GCC_VERSION */ + +#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32) +/* All known AIX compilers implement these things (but don't always + define __STDC__). The RISC/OS MIPS compiler defines these things + in SVR4 mode, but does not define __STDC__. */ + +#define ANSI_PROTOTYPES 1 +#define PTR void * +#define PTRCONST void *const +#define LONG_DOUBLE long double + +#define PARAMS(ARGS) ARGS +#define VPARAMS(ARGS) ARGS +#define VA_START(VA_LIST, VAR) va_start(VA_LIST, VAR) + +/* variadic function helper macros */ +/* "struct Qdmy" swallows the semicolon after VA_OPEN/VA_FIXEDARG's + use without inhibiting further decls and without declaring an + actual variable. */ +#define VA_OPEN(AP, VAR) { va_list AP; va_start(AP, VAR); { struct Qdmy +#define VA_CLOSE(AP) } va_end(AP); } +#define VA_FIXEDARG(AP, T, N) struct Qdmy + +#undef const +#undef volatile +#undef signed + +/* inline requires special treatment; it's in C99, and GCC >=2.7 supports + it too, but it's not in C89. */ +#undef inline +#if __STDC_VERSION__ > 199901L +/* it's a keyword */ +#else +# if GCC_VERSION >= 2007 +# define inline __inline__ /* __inline__ prevents -pedantic warnings */ +# else +# define inline /* nothing */ +# endif +#endif + +/* These are obsolete. Do not use. */ +#ifndef IN_GCC +#define CONST const +#define VOLATILE volatile +#define SIGNED signed + +#define PROTO(type, name, arglist) type name arglist +#define EXFUN(name, proto) name proto +#define DEFUN(name, arglist, args) name(args) +#define DEFUN_VOID(name) name(void) +#define AND , +#define DOTS , ... +#define NOARGS void +#endif /* ! IN_GCC */ + +#else /* Not ANSI C. */ + +#undef ANSI_PROTOTYPES +#define PTR char * +#define PTRCONST PTR +#define LONG_DOUBLE double + +#define PARAMS(args) () +#define VPARAMS(args) (va_alist) va_dcl +#define VA_START(va_list, var) va_start(va_list) + +#define VA_OPEN(AP, VAR) { va_list AP; va_start(AP); { struct Qdmy +#define VA_CLOSE(AP) } va_end(AP); } +#define VA_FIXEDARG(AP, TYPE, NAME) TYPE NAME = va_arg(AP, TYPE) + +/* some systems define these in header files for non-ansi mode */ +#undef const +#undef volatile +#undef signed +#undef inline +#define const +#define volatile +#define signed +#define inline + +#ifndef IN_GCC +#define CONST +#define VOLATILE +#define SIGNED + +#define PROTO(type, name, arglist) type name () +#define EXFUN(name, proto) name() +#define DEFUN(name, arglist, args) name arglist args; +#define DEFUN_VOID(name) name() +#define AND ; +#define DOTS +#define NOARGS +#endif /* ! IN_GCC */ + +#endif /* ANSI C. */ + +/* Define macros for some gcc attributes. This permits us to use the + macros freely, and know that they will come into play for the + version of gcc in which they are supported. */ + +#if (GCC_VERSION < 2007) +# define __attribute__(x) +#endif + +/* Attribute __malloc__ on functions was valid as of gcc 2.96. */ +#ifndef ATTRIBUTE_MALLOC +# if (GCC_VERSION >= 2096) +# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define ATTRIBUTE_MALLOC +# endif /* GNUC >= 2.96 */ +#endif /* ATTRIBUTE_MALLOC */ + +/* Attributes on labels were valid as of gcc 2.93. */ +#ifndef ATTRIBUTE_UNUSED_LABEL +# if (GCC_VERSION >= 2093) +# define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED +# else +# define ATTRIBUTE_UNUSED_LABEL +# endif /* GNUC >= 2.93 */ +#endif /* ATTRIBUTE_UNUSED_LABEL */ + +#ifndef ATTRIBUTE_UNUSED +#define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +#endif /* ATTRIBUTE_UNUSED */ + +#ifndef ATTRIBUTE_NORETURN +#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +#endif /* ATTRIBUTE_NORETURN */ + +#ifndef ATTRIBUTE_PRINTF +#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) +#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2) +#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3) +#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4) +#define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5) +#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6) +#endif /* ATTRIBUTE_PRINTF */ + +/* We use __extension__ in some places to suppress -pedantic warnings + about GCC extensions. This feature didn't work properly before + gcc 2.8. */ +#if GCC_VERSION < 2008 +#define __extension__ +#endif + +/* Bootstrap support: Adjust certain macros defined by Autoconf, + which are only valid for the stage1 compiler. If we detect + a modern version of GCC, we are probably in stage2 or beyond, + so unconditionally reset the values. Note that const, inline, + etc. have been dealt with above. */ +#if (GCC_VERSION >= 2007) +# ifndef HAVE_LONG_DOUBLE +# define HAVE_LONG_DOUBLE 1 +# endif +#endif /* GCC >= 2.7 */ + +#endif /* ansidecl.h */ diff --git a/src/mkutil/cpp/config.h b/src/mkutil/cpp/config.h new file mode 100644 index 00000000..5a13a0bd --- /dev/null +++ b/src/mkutil/cpp/config.h @@ -0,0 +1,27 @@ +/* config.h by Nick for GNU C preprocessor */ + +#define IN_GCC +/* #define __STDC__ 1 */ +#define BITS_PER_UNIT 8 + +#define HAVE_LOCALE_H 1 +#define HAVE_STDDEF_H 1 +#define HAVE_STRING_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_TIME_H 1 +#define HAVE_FCNTL_H 1 +#define HAVE_MALLOC_H 1 +#define HAVE_SYS_STAT_H 1 + +/* #define S_IFBLK -1 */ +#define SIZEOF_LONG 4 +#define BITS_PER_WORD 32 + +/* extra settings added by Nick */ +#define HAVE_WINDOWS_H 1 +#define HAVE_PARAM_H 1 + +#include + diff --git a/src/mkutil/cpp/configargs.h b/src/mkutil/cpp/configargs.h new file mode 100644 index 00000000..2dd954f2 --- /dev/null +++ b/src/mkutil/cpp/configargs.h @@ -0,0 +1,3 @@ +#define CPP_PREDEFINES 1 +#define DEFAULT_TARGET_VERSION 1 +#define DEFAULT_TARGET_MACHINE 1 diff --git a/src/mkutil/cpp/cppdefault.c b/src/mkutil/cpp/cppdefault.c new file mode 100644 index 00000000..cad0096f --- /dev/null +++ b/src/mkutil/cpp/cppdefault.c @@ -0,0 +1,83 @@ +/* CPP Library. + Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000 Free Software Foundation, Inc. + Contributed by Per Bothner, 1994-95. + Based on CCCP program by Paul Rubin, June 1986 + Adapted to ANSI C, Richard Stallman, Jan 1987 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* This file contains data definitions shared between cpplib and + tradcpp. */ + +#include "config.h" +#include "system.h" +#include "cppdefault.h" + +const struct default_include cpp_include_defaults[] +#ifdef INCLUDE_DEFAULTS += INCLUDE_DEFAULTS; +#else += { +#ifdef GPLUSPLUS_INCLUDE_DIR + /* Pick up GNU C++ generic include files. */ + { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, +#endif +#ifdef GPLUSPLUS_TOOL_INCLUDE_DIR + /* Pick up GNU C++ target-dependent include files. */ + { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1 }, +#endif +#ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR + /* Pick up GNU C++ backward and deprecated include files. */ + { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1 }, +#endif +#ifdef LOCAL_INCLUDE_DIR + /* /usr/local/include comes before the fixincluded header files. */ + { LOCAL_INCLUDE_DIR, 0, 0, 1 }, +#endif +#ifdef PREFIX_INCLUDE_DIR + { PREFIX_INCLUDE_DIR, 0, 0, 1 }, +#endif +#ifdef GCC_INCLUDE_DIR + /* This is the dir for fixincludes and for gcc's private headers. */ + { GCC_INCLUDE_DIR, "GCC", 0, 0 }, +#endif +#ifdef CROSS_INCLUDE_DIR + /* One place the target system's headers might be. */ + { CROSS_INCLUDE_DIR, "GCC", 0, 0 }, +#endif +#ifdef TOOL_INCLUDE_DIR + /* Another place the target system's headers might be. */ + { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 }, +#endif +#ifdef SYSTEM_INCLUDE_DIR + /* Some systems have an extra dir of include files. */ + { SYSTEM_INCLUDE_DIR, 0, 0, 0 }, +#endif +#ifdef STANDARD_INCLUDE_DIR + /* /usr/include comes dead last. */ + { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 }, +#endif + { 0, 0, 0, 0 } + }; +#endif /* no INCLUDE_DEFAULTS */ + +#ifdef GCC_INCLUDE_DIR +const char cpp_GCC_INCLUDE_DIR[] = GCC_INCLUDE_DIR; +const size_t cpp_GCC_INCLUDE_DIR_len = sizeof GCC_INCLUDE_DIR - 8; +#else +const char cpp_GCC_INCLUDE_DIR[] = ""; +const size_t cpp_GCC_INCLUDE_DIR_len = 0; +#endif diff --git a/src/mkutil/cpp/cppdefault.h b/src/mkutil/cpp/cppdefault.h new file mode 100644 index 00000000..1f66b69b --- /dev/null +++ b/src/mkutil/cpp/cppdefault.h @@ -0,0 +1,112 @@ +/* CPP Library. + Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000 Free Software Foundation, Inc. + Contributed by Per Bothner, 1994-95. + Based on CCCP program by Paul Rubin, June 1986 + Adapted to ANSI C, Richard Stallman, Jan 1987 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef GCC_CPPDEFAULT_H +#define GCC_CPPDEFAULT_H + +/* This header contains declarations and/or #defines for all the + hard-wired defaults in cpp. Note it's used by both cpplib and + tradcpp. */ + +#ifndef STANDARD_INCLUDE_DIR +#define STANDARD_INCLUDE_DIR "/usr/include" +#endif + +#ifndef STANDARD_INCLUDE_COMPONENT +#define STANDARD_INCLUDE_COMPONENT 0 +#endif + +#ifdef CROSS_COMPILE +#undef LOCAL_INCLUDE_DIR +#undef SYSTEM_INCLUDE_DIR +#undef STANDARD_INCLUDE_DIR +#else +#undef CROSS_INCLUDE_DIR +#endif + +/* We let tm.h override the types used here, to handle trivial differences + such as the choice of unsigned int or long unsigned int for size_t. + When machines start needing nontrivial differences in the size type, + it would be best to do something here to figure out automatically + from other information what type to use. */ + +/* The string value for __SIZE_TYPE__. */ + +#ifndef SIZE_TYPE +#define SIZE_TYPE "long unsigned int" +#endif + +/* The string value for __PTRDIFF_TYPE__. */ + +#ifndef PTRDIFF_TYPE +#define PTRDIFF_TYPE "long int" +#endif + +/* The string value for __WCHAR_TYPE__. */ + +#ifndef WCHAR_TYPE +#define WCHAR_TYPE "int" +#endif + +/* The string value for __WINT_TYPE__. */ + +#ifndef WINT_TYPE +#define WINT_TYPE "unsigned int" +#endif + +/* The string value for __USER_LABEL_PREFIX__ */ + +#ifndef USER_LABEL_PREFIX +#define USER_LABEL_PREFIX "" +#endif + +/* The string value for __REGISTER_PREFIX__ */ + +#ifndef REGISTER_PREFIX +#define REGISTER_PREFIX "" +#endif + +/* This is the default list of directories to search for include files. + It may be overridden by the various -I and -ixxx options. + + #include "file" looks in the same directory as the current file, + then this list. + #include just looks in this list. + + All these directories are treated as `system' include directories + (they are not subject to pedantic warnings in some cases). */ + +struct default_include +{ + const char *const fname; /* The name of the directory. */ + const char *const component; /* The component containing the directory + (see update_path in prefix.c) */ + const int cplusplus; /* Only look here if we're compiling C++. */ + const int cxx_aware; /* Includes in this directory don't need to + be wrapped in extern "C" when compiling + C++. */ +}; + +extern const struct default_include cpp_include_defaults[]; +extern const char cpp_GCC_INCLUDE_DIR[]; +extern const size_t cpp_GCC_INCLUDE_DIR_len; + +#endif /* ! GCC_CPPDEFAULT_H */ diff --git a/src/mkutil/cpp/cppdefault.obj b/src/mkutil/cpp/cppdefault.obj new file mode 100644 index 0000000000000000000000000000000000000000..b8ea1ad7a2281e793d36a2734c5c4b3fa4561837 GIT binary patch literal 8836 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�rLyffh25$9y8lqwfG9 zc}tCe)aRi*qG%O{KbSFa2uJJ!uU-Vt*^NsLL?6J8kI)_MCazpe;JzO?FD1QF!(*`1 zh$S?kbXShRXe|Tb*&?9zHo-$5DsX7b4i(fUrZz*S0ag||EOKZ1m(oaQj0IS8iQPzc z1kX~B*XcecuNPy4Zvt=ytAitT3q>T;DU@88H9d5`fR)pL#>`&K9*svD8hFB#juqwg zA?Z_-Y$L-amQR^=D96aikDq6~pg~XHA4wjJh{APl3||S`Ho2BtFuxG$jUWS7I*)xn zoL5hKJ&jQC@DI3F+6e7dka9tmhUmp;qoJS85VnVMt03gY8rnc z)|HcnBB!dN%zv{wx*#@GnZ znz|abExca}eBCFoZNLpFyh;~5f(@u~SPWgYF1GOQ105Uhs!&Rpb0nXJz_#FJLGs#1 z%iN;Og$%SB#SA2Bz&d7Nw#fxg;F2Cq*KXa(z0}bplwX5acmJ^aYSN$4pe5a1-Fc2j zg9?~j&b*il2>7 zBq+jkEO|*r;pxW-_yae86pm{yCu<7F&g3$i2~G0yI_?QQ4gEO>*J7Fxg{Ur0h(niD z94|rWIc}8Yx!BaFGWwu&e_QSMPINUMJ5Q(YB`DdHeu0D5M!b!uY5n)N>9?}+1$-;( zr!S@7%Eo`-8(*wX8{bL4k>Yp%%z|{nc;@uv_?h&rxbYB%-fJuyZ!T8|&&IWj-`L;p z-dSBa+PVAFl|8(BPj~#)uMOkgNa1CEHbuffer; + + if (!buffer) + fprintf (stderr, "%s: ", progname); + else + { + const struct line_map *map; + + if (line == 0) + { + line = pfile->cur_token[-1].line; + col = pfile->cur_token[-1].col; + } + + map = lookup_line (&pfile->line_maps, line); + print_containing_files (&pfile->line_maps, map); + + line = SOURCE_LINE (map, line); + if (col == 0) + col = 1; + + if (line == 0) + fprintf (stderr, "%s:", map->to_file); + else if (CPP_OPTION (pfile, show_column) == 0) + fprintf (stderr, "%s:%u:", map->to_file, line); + else + fprintf (stderr, "%s:%u:%u:", map->to_file, line, col); + + fputc (' ', stderr); + } +} + +/* Set up for an error message: print the file and line, bump the error + counter, etc. LINE is the logical line number; zero means to print + at the location of the previously lexed token, which tends to be the + correct place by default. Returns 0 if the error has been suppressed. */ +int +_cpp_begin_message (pfile, code, line, column) + cpp_reader *pfile; + enum error_type code; + unsigned int line, column; +{ + int is_warning = 0; + + switch (code) + { + case PEDWARN: + case WARNING: + if (CPP_IN_SYSTEM_HEADER (pfile) + && ! CPP_OPTION (pfile, warn_system_headers)) + return 0; + case WARNING_SYSHDR: + if (CPP_OPTION (pfile, warnings_are_errors) + || (code == PEDWARN && CPP_OPTION (pfile, pedantic_errors))) + { + if (CPP_OPTION (pfile, inhibit_errors)) + return 0; + if (pfile->errors < CPP_FATAL_LIMIT) + pfile->errors++; + } + else + { + if (CPP_OPTION (pfile, inhibit_warnings)) + return 0; + is_warning = 1; + } + break; + + case ERROR: + if (CPP_OPTION (pfile, inhibit_errors)) + return 0; + if (pfile->errors < CPP_FATAL_LIMIT) + pfile->errors++; + break; + /* Fatal errors cannot be inhibited. */ + case FATAL: + pfile->errors = CPP_FATAL_LIMIT; + break; + case ICE: + fprintf (stderr, _("internal error: ")); + pfile->errors = CPP_FATAL_LIMIT; + break; + } + + print_location (pfile, line, column); + if (is_warning) + fputs (_("warning: "), stderr); + + return 1; +} + +/* Exported interface. */ + +/* For reporting internal errors. Prints "internal error: " for you, + otherwise identical to cpp_fatal. */ +void +cpp_ice VPARAMS ((cpp_reader *pfile, const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, cpp_reader *, pfile); + VA_FIXEDARG (ap, const char *, msgid); + + if (_cpp_begin_message (pfile, ICE, 0, 0)) + v_message (msgid, ap); + + VA_CLOSE (ap); +} + +/* Same as cpp_error, except we consider the error to be "fatal", + such as inconsistent options. I.e. there is little point in continuing. + (We do not exit, to support use of cpplib as a library. + Instead, it is the caller's responsibility to check + CPP_FATAL_ERRORS. */ +void +cpp_fatal VPARAMS ((cpp_reader *pfile, const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, cpp_reader *, pfile); + VA_FIXEDARG (ap, const char *, msgid); + + if (_cpp_begin_message (pfile, FATAL, 0, 0)) + v_message (msgid, ap); + + VA_CLOSE (ap); +} + +/* Print an error at the location of the previously lexed token. */ +void +cpp_error VPARAMS ((cpp_reader * pfile, const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, cpp_reader *, pfile); + VA_FIXEDARG (ap, const char *, msgid); + + if (_cpp_begin_message (pfile, ERROR, 0, 0)) + v_message (msgid, ap); + + VA_CLOSE (ap); +} + +/* Print an error at a specific location. */ +void +cpp_error_with_line VPARAMS ((cpp_reader *pfile, int line, int column, + const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, cpp_reader *, pfile); + VA_FIXEDARG (ap, int, line); + VA_FIXEDARG (ap, int, column); + VA_FIXEDARG (ap, const char *, msgid); + + if (_cpp_begin_message (pfile, ERROR, line, column)) + v_message (msgid, ap); + + VA_CLOSE (ap); +} + +/* Error including a message from `errno'. */ +void +cpp_error_from_errno (pfile, name) + cpp_reader *pfile; + const char *name; +{ + cpp_error (pfile, "%s: %s", name, xstrerror (errno)); +} + +/* Print a warning at the location of the previously lexed token. */ +void +cpp_warning VPARAMS ((cpp_reader * pfile, const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, cpp_reader *, pfile); + VA_FIXEDARG (ap, const char *, msgid); + + if (_cpp_begin_message (pfile, WARNING, 0, 0)) + v_message (msgid, ap); + + VA_CLOSE (ap); +} + +/* Print a warning at a specific location. */ +void +cpp_warning_with_line VPARAMS ((cpp_reader * pfile, int line, int column, + const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, cpp_reader *, pfile); + VA_FIXEDARG (ap, int, line); + VA_FIXEDARG (ap, int, column); + VA_FIXEDARG (ap, const char *, msgid); + + if (_cpp_begin_message (pfile, WARNING, line, column)) + v_message (msgid, ap); + + VA_CLOSE (ap); +} + +/* Pedwarn at the location of the previously lexed token. */ +void +cpp_pedwarn VPARAMS ((cpp_reader * pfile, const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, cpp_reader *, pfile); + VA_FIXEDARG (ap, const char *, msgid); + + if (_cpp_begin_message (pfile, PEDWARN, 0, 0)) + v_message (msgid, ap); + + VA_CLOSE (ap); +} + +/* Pedwarn at a specific location. */ +void +cpp_pedwarn_with_line VPARAMS ((cpp_reader * pfile, int line, int column, + const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, cpp_reader *, pfile); + VA_FIXEDARG (ap, int, line); + VA_FIXEDARG (ap, int, column); + VA_FIXEDARG (ap, const char *, msgid); + + if (_cpp_begin_message (pfile, PEDWARN, line, column)) + v_message (msgid, ap); + + VA_CLOSE (ap); +} + +/* Print an error message not associated with the translation unit. */ +void +cpp_notice VPARAMS ((cpp_reader *pfile, const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, cpp_reader *, pfile); + VA_FIXEDARG (ap, const char *, msgid); + + if (pfile->errors < CPP_FATAL_LIMIT) + pfile->errors++; + + v_message (msgid, ap); + + VA_CLOSE (ap); +} + +/* Print an error message originating from ERRNO and not associated + with the translation unit. */ +void +cpp_notice_from_errno (pfile, name) + cpp_reader *pfile; + const char *name; +{ + if (name[0] == '\0') + name = "stdout"; + cpp_notice (pfile, "%s: %s", name, xstrerror (errno)); +} diff --git a/src/mkutil/cpp/cpperror.obj b/src/mkutil/cpp/cpperror.obj new file mode 100644 index 0000000000000000000000000000000000000000..7d4ed032149399294ab725f013433edee126644c GIT binary patch literal 18537 zcmd5^33yyrb-rV17LB%%E!mEjcq%b--GgcZa4qZAkQyggr z5dOW$M7%p%MU_s(Qjw&Q4KD$ob5xzM-7tLVH8VFCubG}2zUJV8nNo4=n&HVw{uQRC zCZ^gahW77J9_0mbG+7*;nwXv#Errj{oD=Tca=}os6pmgPJ@345da_hJSiHG7zBe45 zI5=4xD@=v^3scj@iSh8}E$tm0?b|nR+uq)>UDbz#uieZ-%|5^rcz?OY>G3SJAb>Sg z*jpU84i=`T2lo~lmA`Uii>l)?`0{T|T-15V=1b znY@#uSWh!B4ZzR=YKJFA1VM>rh!`u57g|8kY9oBZ6Js+6$J>B9^~x)+a8R%~ZQU?9 zH4Ysu!J4-!cwWV8wXKO2c>iTt6HSv-#qp9gHZeR{f-)DE%N3&uJRP}eAO^*v41bSF zeM2*&qlKw9<#&{)o`Vcqv>Y6H5|m#AWzE6CNs7t83+5Q@9U!OC{tSP=DvRo;&5FZ? z`7#ni-L*q5@4@N4#gR%0?y;xCTca)OWUW$5$^u;YKNFyi0*oT|#$H_!By#@$MYv>+ z7T#&=?QMAfb=eHds09(hx}jLwXVEq13sdFJj`z}S=&H8&augkUVY9uNg!sd25wl%7 zM_{B?RfE5?@b{atz^!G0N2ewZQugtQ#U-XRwc~>a3v|uRb670mn)PI12jBdeiTS^{ z=Vfz*Si~@G6+*n)rujqkHdz><>Rw&F*+RV9dh3{D>JPw`83YgEuObx&Y3lKb(*GhG zzRR8wZ;OQ0Tz5m|Az^h1-YddN+)c}1{lRgyR0TrJ1p4KbkZb|2bE$)?wTcr%Z9p*| z^(!zrHL;hGxkA;19z}qMN`redW;C5JP z(3i>?yK~EdxE_dRD;bX^tZXjdZN-dibSdz+0$+b7-vCunmzH-`SY$v*QY?f z%Ie7{5|)|ESh=*7F?!-L%iy9?!s%RcGOIbAiJ>0@ew~%i8W}4Y$z=N?33o-i@{w33 zZzhZ;&{1^1EjgF@VLUIxkVGOKwR$p!fdypp(cD_}eG+}kMSIyjsa#~Y6^}uRcu(BO zP}&>Oy~}9|Pept)Ez*ruy!ZoxeEKmQ#sm?p7w8ufaZi5t(a+mUPU`Doo~iPhD4}fMonW?$k4ZY zfDIsy#J5)h@dywtma#i(m^nlcT#~k^M-O#UOO?==58aQR<%-S+XW4h%xL+7`@Eu zNu(o4I=xml(r;Ms@(9IYGHI%gaJtibFpak_7PTx+&?gg=tzxF(B*<~}&U*BPOom;B zcZSeG+ty*B+PDjOC8xd?jFy@6r>1vwV}<~NQrOY&x`0?(k@;+8(7PGH!Llm2wCj-4 zo2-eU>C)iv0c&{Q%=iIvTo1}+W;}_kZRHYKD~fc~9f|JbkkirEgtP|rIT1nMTaRs^ zHj+yxsTw|b2cmtE%m({ub=HXHGx6LW$q<>inM-FRVQ10_`VY@TExCBo=t<@*Bb85@ znRGNlyZ!_{4Wc}IDGZgB5TY@bi3~`fla|;vV$EH7BeSP3l8PmaOe3&79Qmw~!Xc|f zL3zBWHIY>Lz-_L!JDpBY>Joaq2@`hXuninGgTvSOUOFEs+al3~B!)~9Zi3K@CL-A^ zvp5%wES^YbHg7uz&%+RULse$Wr|fMYQL(vEgpY%?mMfq`gs_4-Yht``W3gnFsJtd% zR+~Ktb2FMsGucNqZ+m~_6g7HD@z`oSKoZqTUyJv+cC&g?UE3Lq52Jf|!p!x-wPVbZ z88@xbL%6{Qdv=?-EwOa2vx9SofvO$4sf07QUZ(E`o=HoTmVE27QA;bE7PuJmH}=q- z9TU#&BU3DdR-HkeeD>Z8t=Qs-tOo$BTAbLI{oAlEQxd}f~RM2RAlD29y9c)1!P z*N+u$EKFJO;ZlJfa}2X+kICdyvGhQSfkOKQa(hf;C+Z8=WT;M@X(u@?AE-n>ByLSW z?U7gvwlTAPhLJN74k8aIeR+$tOy?)SuGy-h8X$uun8V)}M{rvf7w5rqBgq`y3{Z!6 zVYH+G?6SEGm$ZjVnl21Z4ezri2TS`HbiV~vQ!n-<(7=Bjcliwm?}-};3K^w7Cn1~H z>Ym`yUoSccIa9r|Y;kK*W^4dk28B9_8LEVeaNJKIs+6(%%3uK$V>XPjEi^=B%!uW^A?NWYGDa5l9##D^ zXy&LoLgO-41Muk{8km#)(w?l(U_9%c=H1l{WWS?VEbldPR!=-(7$~SfYbA_+BawBp z(%cn_hBz>o&m^u&qiQvJsad+RFCo56SwWzh2e6Mg$+K%q2NTIl=#dhP`ibPCeQrEZ zFHBZ-$)sH!)AV$&rup8**z@=GCeq!J1i3Q<`4X^nJmzXd5)!n+ptu#&G{mDQTXk+7 zp!InmZzReof+FrzR&jj7D!G}jy!%k>bT-Zarfq4+pw!s8zIw8PCQR;a@u-0sJf3oG6JZ|v76_Iav3QQr(~T4=LnBnu zGw5oABgC`V^x5s`Su`r~U`>pUS|y4_TZC{V*_o?I2At&^i_IcYB|B12I-iL~Y2ufl zqyTSkEL_)7znr#_x4aJT0UGFQzy^~&4vtQC2Axb&0243EN z`?GtpOw`mC$IaE2L_GsKV5f_SI}%3VNJ`Wq1h)N|78o@3aXBX>;q$wxpU;CRh!Qaw zPg4R4&YbKsqbM#iq{zd3k`1RzxR2et0E*0*zZ_{KdC^>cxT=$rxGmN57-R2BJSK6i zYuwTZ@q&smozfe;q#+W076aE*6%#xcR+JHB&zS-|=5q1e3CP|H_WHELr}{`VilaCj zJG+z1%wk=>nbO38!Z;r{Fn^hOx&+75oL-Zz%;`VF)j7dJS0!~DV#TiNm^kgKh;wl; zav?RyEt~#d%ZXh{8N%2Z`(1YwzD^xLJ2jfNxH)VaDNfqONlmHI=@*Ydq!9OLGiy2- zA;LVt;Kq^6#7>!WM5cSN((?C2#L-Acl{J^Ea%BBfuBw7cckeKwIcy5MSU_#w!sz%Y zCTYSp#hV7y(zvmZ*pwnOn~v@@a%4sA_;I|V`uI#w^xKX|<&xYhB`H_(Vf4;jNqPUn zzQ+BJ2?(RqQc4_6#38IDw**~V8Npmk4Hhi60o>-KF;>X=tX-pV1&?qAr~xYyDG$1w zdj;o)AqOIvn49{rZ!vsn!^T83+Z#dXp#F{axeJ-WW+7Vz%geR}t4kK26mdB@RMoKz z54ptQ4i>m!xOCHGL6?^%Sk^fSZo1N~pjEEqeOyU0+uNPq?Kl8~^M0U%DQv`2NJN;t z=uj)g)cIVWeQkoXh^|Pv4ib3H{@Zi|k5RP5b3uC!n&hOJgy3@(=CM`#Q z1`k=(nc2K%Ku?Ha`87C~vX`o;b2Y)}qZtE9BiW71wivfU@{rq=XvGQqE!3>3Lz)** zNH&y*gMIk04+i2~%QzQfmVfM*9V#2Y3a3UUuGeFhHSn~wscWi=OAFLn*eI#9dqLzM zNJ$0DNiPPIfFz}DU)NBo-5 zkFY06E}tq4jufUAK#>E8lsDUl;)NXUfrP$3h-g`~!k^%=zAv6aV5LwdSk&`H5V}r( zZi#D_`50Hwg!mXAc@9O2%t5=dC_H-2?man!?!Xk*h`qEYj-sb2en2t_HbCrn1c z-Jq?`ND)pb`QNScX=M(zQcf!1(rM2iu{uf69Nhbmxn%RBm^^LyV(C0?0a!a9rvQ@MIUZeb=NmJ4rgQHb zq>Q0}0WO1AzSQp-;I#^7y1qlwEzizOFtdZ|(RTM*gVjvY5bCreW!Mb>|m ziWSWqsl;R)>@BkHCWAwuYNY<$+KpqK%?)zn_B(IVKd1(Z-MY|rOr>+;TJA;MM0nLQ zf9B=N4a!x8A z+ZfL$EV3BZv|9jIlOtouCN%68c%$FGisC?okvoto=D-RKxT`0g*WVCFt%C4XyNg}( zWAi=>B*P#IS5;CAT*`34oU38(MN&J^SXdMh%bOWyx7EKRxw%IZIIx^6T@PejFVz)FGAXN9|7Y(H*&01@{e3 z@3TsSLu2?T*xoQuq-Ts&%#aI=-I!L+YdDWP=QS=c&jnU#3#q-L>?A{G5WgKPbi)kB zw6Z31E=`>1rAMy^b>qI0RU9ddmx`ms!W2I#Nn^;mO6S6oaV2kvSK0QX;AB;Y0tEU; z$w16XpyYG^gM;{T3Ul)g%vFy}?WmfzTnDNKZn)ILIKI5GAd>P)l9YVK>i{zz&5@MY z27PGIDS)hd!Kg0M4Rz7|+`EFgrk1dldqtC{Sc=$95#bO3hCwN#!#aRrE-D5H8fGwpK;@J#2dY?zmMK^MZ8fvWE4*uhnX z=v#EFtL(~%>4F_nb2=Z)l~X=bvA2)9A}b~tCT6my@A2ABHka;v4^k=jq!loQ7Y;By z!~u*a%Em2_S~wri4ZSS7?K=v}#Vf(N0+&z2IP7I3N!NCiAJ?8*LSiXlqukQss-=&T z(F98&hI}hv0^eMk7@uAU#}vgXJ&)^=3DBlwl6kda+zW3h1NGB za*W|KE|!P)4NkfHw48qUkr+Eqchk6Cky*J6F5ek>No-lv3iq#&)I4)`FD^L13m0yW z+`aIunqrxLCl0ZTO8NoXH(k6LxtFE+TF~JhOn(BKPtnxQA_e#38|G9Y{pnlKAW?$c{yHDUtvs9%MF8Cmkl@>#fO@i zw0I3GCEUxyOK8&5z_2lkx;R*DYsy+KuBdBFG+0oM`f}q$;fbn4*yK%K!E(KH z4IfO5du7T>f)#p9#r=c+RED-7d2lCgp;NLUx-%rA%mhrETs^J|s;)qZ=hqFJ$;e4X z#%?)~(`^1jgZN(6v{Z7n^XcSPOGK9sC{Z99_j4imt5@%_p`dyk&oW@Y$&KqK<5ix&W3{OEiUdp7xy(l7YW@z*-%g|$Gx(~t+Jt@$^m+v(CxONpn8Xk zdzXuQ22fP!zHLK6wF6q$xRebA)t!KL2;JQ_6jUbw)PvqoUH@9fUwckOCDa=f%0 zkDX87b?28seB|jFf9J6mR&iWD(0S~x+m91_Y^Lq-Ee%U%cFraP7P` znfeIu;D6hvDyGf{W^b3Nk9p8_^fsBg9b=yoGzB=ZZXX7!eO+jtCv^C80q}n6kDX~| zldZdE^PvoorcKar_?A@X3aq>JffSC^85>hk%r;HHA7DlT`)UtpqCz6;Br2yH=Z@y)`j=aF9|*t#QUaK&`>Rn#KO~#3UET(aDUJd1SFluj~t(Q zs}n5?30C`B6|CkpCfG`tayA)4_%vkp*T8`sU!*yUv&mEFY0Xrb^FguZ^PY#~-8SZ# z+H9Zq1V2q<-u8X5X8z=ZV$5TnhxoprEuTily06-n4}w-Xg4Du88?*-_D`adp2rb}^ z%q_1aZ>-WSvifU6x7cPX0(i-5S!GLJYbt}Xe(&D(>SaLW-R92*xc@(8@cZ)0-nHzA zK^!qLOGibVT>Io1K(WsCsW3JUoB#lA0u&PHTtLl$TGdWKtV>(f9=G>8Kutn745(gu zrvb4>_Nf~Hap&}@H@LW40kJansl$NevjBAmAXdRX^&lYDMn3fcK$`@56p)tXuK;OT zehg?MdNC7fTCSi~bpqNTBenz5BQ6J|N4y@;dg;Y46YSpoZtv}Y!qR((+k3a$`&Jis zKcID>YgLZ};)$VEvA)*a{u$7Pg8Pn(d)|e9>O#MAp~f0#EGu$7%UT!O2&i4=>j$K{ z?RR@80BLSFy13h1=nfZpvkN`!LLYIVzj2|*0cmbO1Ejg}^rfW=0MguAT-+)b;!TpK zJI95tbfG>MO1n@$AkB@Z1I_ILxA*;kG`A1AxKFsyXI$uWF7z!I`o0Uj;6g6}(%hPH zc1S^|KGg;&DcaotC?UA>0Pze2ZwI8MvHdWq`7_F#eEZy=J7oj_hT1&$%TIHLd^k3zLhSt&V|kdq(t-f|~|3Dc;2O)8~}(;CCaqijiMg1!QcU$^+9NW17^RfSc7lXhZ7VXj|0B(JoV; zK-;E1hjzL86518&INHep!3sU~E|u;Q`d47C>RMzs#@nQAlI zv(y!6&r=z+=d0alFHrl@UMN5G?2s(4)V;uX)H~4DsP~|)RXjU+)#GUE)RSoI)jyzZ zP|u=mR{xGRBtKnTs!l_OTc*~bZB=KYU9QeYyF$g#u2gxnr>X1Fu2R!zSIfP{TJ>JQ z>*P*DsYd~O)W^_z)fdp>Cz;4f0d<+=ri-vfr3}CxwG*vZ4Wjj_ub>U6Z=kJ{I9BRe zz#jEOv|ja}XnkrFxgekpqOFrV3!LNud(F*duopOXRjf zsY?aZh1RS3(fZWip$({~(bmcBg;HM!>{0)M)~|jkz1P4Af@&CTz1&U-S^x(h^{584esw0=fVu~5P`wRpz4(|?4*>S4htYb~C(!!T7tsdP zHh5uBU5>V1?ktpw0rsdA+9fKFwnp8IwpQUgB892(!LhLXKJn5pb!`7EPaZZ+YaHGc z{x;2AialE11tc8aG>sdB(#XV2N&5H<>#1|$0yiyhypr4e=?nj;`OxsTj`qosp`W+& z2fgHt*Kcu-*z3WSq=?i$tg%XU4Nn}LY%h*Hzb>d=0Zomn{5d&1QPp@%huD3u{3$u5 zs`2p0jnym6?x3kN>L6sQN~tnDm5sP-{UL){3CYAakVxc2HUbWSd^4s^6eG;W>M2X9uH^ZZ)(p+&7xDHWsQza z#i)$@E-`jkp*nnk(SV*@F3f7%{Ze!Cl> zrXhFEhUBLH7Tj|}#JJen(XqV?Pi60Yuk^9OD5Zbi?V^BjWUl7^k2XoaygT-ybRwY} z-CL_Xycl(ua#qa0U Fe*val.str.text; + const U_CHAR *end = start + tok->val.str.len; + const U_CHAR *p = start; + int c = 0, i, nsuff; + unsigned HOST_WIDEST_INT n = 0, nd, MAX_over_base; + int base = 10; + int overflow = 0; + int digit, largest_digit = 0; + const struct suffix *sufftab; + + op.unsignedp = 0; + + if (p[0] == '0') + { + if (end - start >= 3 && (p[1] == 'x' || p[1] == 'X')) + { + p += 2; + base = 16; + } + else + { + p += 1; + base = 8; + } + } + + /* Some buggy compilers (e.g. MPW C) seem to need both casts. */ + MAX_over_base = (((unsigned HOST_WIDEST_INT) -1) + / ((unsigned HOST_WIDEST_INT) base)); + + for(; p < end; p++) + { + c = *p; + + if (ISDIGIT (c) + || (base == 16 && ISXDIGIT (c))) + digit = hex_value (c); + else + break; + + if (largest_digit < digit) + largest_digit = digit; + nd = n * base + digit; + overflow |= MAX_over_base < n || nd < n; + n = nd; + } + + if (p < end) + { + /* Check for a floating point constant. Note that float constants + with an exponent or suffix but no decimal point are technically + invalid (C99 6.4.4.2) but accepted elsewhere. */ + if ((c == '.' || c == 'F' || c == 'f') + || (base == 10 && (c == 'E' || c == 'e') + && p+1 < end && (p[1] == '+' || p[1] == '-')) + || (base == 16 && (c == 'P' || c == 'p') + && p+1 < end && (p[1] == '+' || p[1] == '-'))) + SYNTAX_ERROR ("floating point numbers are not valid in #if"); + + /* Determine the suffix. l means long, and u means unsigned. + See the suffix tables, above. */ + switch (end - p) + { + case 1: sufftab = vsuf_1; nsuff = Nsuff(vsuf_1); break; + case 2: sufftab = vsuf_2; nsuff = Nsuff(vsuf_2); break; + case 3: sufftab = vsuf_3; nsuff = Nsuff(vsuf_3); break; + default: goto invalid_suffix; + } + + for (i = 0; i < nsuff; i++) + if (memcmp (p, sufftab[i].s, end - p) == 0) + break; + if (i == nsuff) + goto invalid_suffix; + op.unsignedp = sufftab[i].u; + + if (CPP_WTRADITIONAL (pfile) + && sufftab[i].u + && ! cpp_sys_macro_p (pfile)) + cpp_warning (pfile, "traditional C rejects the `U' suffix"); + if (sufftab[i].l == 2 && CPP_OPTION (pfile, pedantic) + && ! CPP_OPTION (pfile, c99)) + cpp_pedwarn (pfile, "too many 'l' suffixes in integer constant"); + } + + if (base <= largest_digit) + cpp_pedwarn (pfile, "integer constant contains digits beyond the radix"); + + if (overflow) + cpp_pedwarn (pfile, "integer constant out of range"); + + /* If too big to be signed, consider it unsigned. */ + else if ((HOST_WIDEST_INT) n < 0 && ! op.unsignedp) + { + if (base == 10) + cpp_warning (pfile, "integer constant is so large that it is unsigned"); + op.unsignedp = 1; + } + + op.value = n; + op.op = CPP_NUMBER; + return op; + + invalid_suffix: + cpp_error (pfile, "invalid suffix '%.*s' on integer constant", + (int) (end - p), p); + syntax_error: + op.op = CPP_ERROR; + return op; +} + +/* Handle meeting "defined" in a preprocessor expression. */ +static struct op +parse_defined (pfile) + cpp_reader *pfile; +{ + int paren = 0; + cpp_hashnode *node = 0; + const cpp_token *token; + struct op op; + cpp_context *initial_context = pfile->context; + + /* Don't expand macros. */ + pfile->state.prevent_expansion++; + + token = cpp_get_token (pfile); + if (token->type == CPP_OPEN_PAREN) + { + paren = 1; + token = cpp_get_token (pfile); + } + + if (token->type == CPP_NAME) + { + node = token->val.node; + if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN) + { + cpp_error (pfile, "missing ')' after \"defined\""); + node = 0; + } + } + else + { + cpp_error (pfile, "operator \"defined\" requires an identifier"); + if (token->flags & NAMED_OP) + { + cpp_token op; + + op.flags = 0; + op.type = token->type; + cpp_error (pfile, + "(\"%s\" is an alternative token for \"%s\" in C++)", + cpp_token_as_text (pfile, token), + cpp_token_as_text (pfile, &op)); + } + } + + if (!node) + op.op = CPP_ERROR; + else + { + if (pfile->context != initial_context) + cpp_warning (pfile, "this use of \"defined\" may not be portable"); + + op.value = node->type == NT_MACRO; + op.unsignedp = 0; + op.op = CPP_NUMBER; + + /* A possible controlling macro of the form #if !defined (). + _cpp_parse_expr checks there was no other junk on the line. */ + pfile->mi_ind_cmacro = node; + } + + pfile->state.prevent_expansion--; + return op; +} + +/* Read a token. The returned type is CPP_NUMBER for a valid number + (an interpreted preprocessing number or character constant, or the + result of the "defined" or "#" operators), CPP_ERROR on error, + CPP_EOF, or the type of an operator token. */ +static struct op +lex (pfile, skip_evaluation) + cpp_reader *pfile; + int skip_evaluation; +{ + struct op op; + const cpp_token *token = cpp_get_token (pfile); + + switch (token->type) + { + case CPP_NUMBER: + return parse_number (pfile, token); + + case CPP_CHAR: + case CPP_WCHAR: + { + unsigned int chars_seen; + + if (token->type == CPP_CHAR) + op.unsignedp = 0; + else + op.unsignedp = WCHAR_UNSIGNED; + op.op = CPP_NUMBER; + op.value = cpp_interpret_charconst (pfile, token, 1, 0, &chars_seen); + return op; + } + + case CPP_STRING: + case CPP_WSTRING: + SYNTAX_ERROR ("string constants are not valid in #if"); + + case CPP_OTHER: + if (ISGRAPH (token->val.c)) + SYNTAX_ERROR2 ("invalid character '%c' in #if", token->val.c); + else + SYNTAX_ERROR2 ("invalid character '\\%03o' in #if", token->val.c); + + case CPP_NAME: + if (token->val.node == pfile->spec_nodes.n_defined) + return parse_defined (pfile); + else if (CPP_OPTION (pfile, cplusplus) + && (token->val.node == pfile->spec_nodes.n_true + || token->val.node == pfile->spec_nodes.n_false)) + { + op.op = CPP_NUMBER; + op.unsignedp = 0; + op.value = (token->val.node == pfile->spec_nodes.n_true); + + /* Warn about use of true or false in #if when pedantic + and stdbool.h has not been included. */ + if (CPP_PEDANTIC (pfile) + && ! cpp_defined (pfile, DSC("__bool_true_false_are_defined"))) + cpp_pedwarn (pfile, "ISO C++ does not permit \"%s\" in #if", + NODE_NAME (token->val.node)); + return op; + } + else + { + op.op = CPP_NUMBER; + op.unsignedp = 0; + op.value = 0; + + if (CPP_OPTION (pfile, warn_undef) && !skip_evaluation) + cpp_warning (pfile, "\"%s\" is not defined", + NODE_NAME (token->val.node)); + return op; + } + + case CPP_HASH: + { + int temp; + + op.op = CPP_NUMBER; + if (_cpp_test_assertion (pfile, &temp)) + op.op = CPP_ERROR; + op.unsignedp = 0; + op.value = temp; + return op; + } + + default: + if (((int) token->type > (int) CPP_EQ + && (int) token->type < (int) CPP_PLUS_EQ) + || token->type == CPP_EOF) + { + op.op = token->type; + return op; + } + + SYNTAX_ERROR2 ("\"%s\" is not valid in #if expressions", + cpp_token_as_text (pfile, token)); + } + + syntax_error: + op.op = CPP_ERROR; + return op; +} + +/* Warn if appropriate on overflow. */ +static void +integer_overflow (pfile) + cpp_reader *pfile; +{ + if (CPP_PEDANTIC (pfile)) + cpp_pedwarn (pfile, "integer overflow in preprocessor expression"); +} + +/* Handle shifting A left by B bits. UNSIGNEDP is non-zero if A is + unsigned. */ +static HOST_WIDEST_INT +left_shift (pfile, a, unsignedp, b) + cpp_reader *pfile; + HOST_WIDEST_INT a; + unsigned int unsignedp; + unsigned HOST_WIDEST_INT b; +{ + if (b >= HOST_BITS_PER_WIDEST_INT) + { + if (! unsignedp && a != 0) + integer_overflow (pfile); + return 0; + } + else if (unsignedp) + return (unsigned HOST_WIDEST_INT) a << b; + else + { + HOST_WIDEST_INT l = a << b; + if (l >> b != a) + integer_overflow (pfile); + return l; + } +} + +/* Handle shifting A right by B bits. UNSIGNEDP is non-zero if A is + unsigned. */ +static HOST_WIDEST_INT +right_shift (pfile, a, unsignedp, b) + cpp_reader *pfile ATTRIBUTE_UNUSED; + HOST_WIDEST_INT a; + unsigned int unsignedp; + unsigned HOST_WIDEST_INT b; +{ + if (b >= HOST_BITS_PER_WIDEST_INT) + return unsignedp ? 0 : a >> (HOST_BITS_PER_WIDEST_INT - 1); + else if (unsignedp) + return (unsigned HOST_WIDEST_INT) a >> b; + else + return a >> b; +} + +/* Operator precedence and flags table. + +After an operator is returned from the lexer, if it has priority less +than or equal to the operator on the top of the stack, we reduce the +stack by one operator and repeat the test. Since equal priorities +reduce, this is naturally left-associative. + +We handle right-associative operators by clearing the lower bit of all +left-associative operators, and setting it for right-associative ones. +After the reduction phase of a new operator, just before it is pushed +onto the stack, its RIGHT_ASSOC bit is cleared. The effect is that +during the reduction phase, the current right-associative operator has +a priority one greater than any other operator of otherwise equal +precedence that has been pushed on the top of the stack. This avoids +a reduction pass, and effectively makes the logic right-associative. + +The remaining cases are '(' and ')'. We handle '(' by skipping the +reduction phase completely. ')' is given lower priority than +everything else, including '(', effectively forcing a reduction of the +parenthesised expression. If there is no matching '(', the stack will +be reduced all the way to the beginning, exiting the parser in the +same way as the ultra-low priority end-of-expression dummy operator. +The exit code checks to see if the operator that caused it is ')', and +if so outputs an appropriate error message. + +The parser assumes all shifted operators require a right operand +unless the flag NO_R_OPERAND is set, and similarly for NO_L_OPERAND. +These semantics are automatically checked, any extra semantics need to +be handled with operator-specific code. */ + +#define FLAG_BITS 8 +#define FLAG_MASK ((1 << FLAG_BITS) - 1) +#define PRIO_SHIFT (FLAG_BITS + 1) +#define EXTRACT_PRIO(CNST) ((CNST) >> FLAG_BITS) +#define EXTRACT_FLAGS(CNST) ((CNST) & FLAG_MASK) + +/* Flags. */ +#define HAVE_VALUE (1 << 0) +#define NO_L_OPERAND (1 << 1) +#define NO_R_OPERAND (1 << 2) +#define SHORT_CIRCUIT (1 << 3) + +/* Priority and flag combinations. */ +#define RIGHT_ASSOC (1 << FLAG_BITS) +#define FORCE_REDUCE_PRIO (0 << PRIO_SHIFT) +#define CLOSE_PAREN_PRIO (1 << PRIO_SHIFT) +#define OPEN_PAREN_PRIO ((2 << PRIO_SHIFT) | NO_L_OPERAND) +#define COMMA_PRIO (3 << PRIO_SHIFT) +#define COND_PRIO ((4 << PRIO_SHIFT) | RIGHT_ASSOC | SHORT_CIRCUIT) +#define COLON_PRIO ((5 << PRIO_SHIFT) | SHORT_CIRCUIT) +#define OROR_PRIO ((6 << PRIO_SHIFT) | SHORT_CIRCUIT) +#define ANDAND_PRIO ((7 << PRIO_SHIFT) | SHORT_CIRCUIT) +#define OR_PRIO (8 << PRIO_SHIFT) +#define XOR_PRIO (9 << PRIO_SHIFT) +#define AND_PRIO (10 << PRIO_SHIFT) +#define MINMAX_PRIO (11 << PRIO_SHIFT) +#define EQUAL_PRIO (12 << PRIO_SHIFT) +#define LESS_PRIO (13 << PRIO_SHIFT) +#define SHIFT_PRIO (14 << PRIO_SHIFT) +#define PLUS_PRIO (15 << PRIO_SHIFT) +#define MUL_PRIO (16 << PRIO_SHIFT) +#define UNARY_PRIO ((17 << PRIO_SHIFT) | RIGHT_ASSOC | NO_L_OPERAND) + +/* Operator to priority map. Must be in the same order as the first + N entries of enum cpp_ttype. */ +static const short +op_to_prio[] = +{ + /* EQ */ 0, /* dummy entry - can't happen */ + /* NOT */ UNARY_PRIO, + /* GREATER */ LESS_PRIO, + /* LESS */ LESS_PRIO, + /* PLUS */ UNARY_PRIO, /* note these two can be unary */ + /* MINUS */ UNARY_PRIO, /* or binary */ + /* MULT */ MUL_PRIO, + /* DIV */ MUL_PRIO, + /* MOD */ MUL_PRIO, + /* AND */ AND_PRIO, + /* OR */ OR_PRIO, + /* XOR */ XOR_PRIO, + /* RSHIFT */ SHIFT_PRIO, + /* LSHIFT */ SHIFT_PRIO, + /* MIN */ MINMAX_PRIO, /* C++ specific */ + /* MAX */ MINMAX_PRIO, /* extensions */ + + /* COMPL */ UNARY_PRIO, + /* AND_AND */ ANDAND_PRIO, + /* OR_OR */ OROR_PRIO, + /* QUERY */ COND_PRIO, + /* COLON */ COLON_PRIO, + /* COMMA */ COMMA_PRIO, + /* OPEN_PAREN */ OPEN_PAREN_PRIO, + /* CLOSE_PAREN */ CLOSE_PAREN_PRIO, + /* EQ_EQ */ EQUAL_PRIO, + /* NOT_EQ */ EQUAL_PRIO, + /* GREATER_EQ */ LESS_PRIO, + /* LESS_EQ */ LESS_PRIO +}; + +#define COMPARE(OP) \ + top->unsignedp = 0; \ + top->value = (unsigned1 | unsigned2) \ + ? (unsigned HOST_WIDEST_INT) v1 OP (unsigned HOST_WIDEST_INT) v2 \ + : (v1 OP v2) +#define EQUALITY(OP) \ + top->value = v1 OP v2; \ + top->unsignedp = 0; +#define BITWISE(OP) \ + top->value = v1 OP v2; \ + top->unsignedp = unsigned1 | unsigned2; +#define MINMAX(OP) \ + top->value = (v1 OP v2) ? v1 : v2; \ + top->unsignedp = unsigned1 | unsigned2; +#define UNARY(OP) \ + top->value = OP v2; \ + top->unsignedp = unsigned2; \ + top->flags |= HAVE_VALUE; +#define SHIFT(PSH, MSH) \ + if (skip_evaluation) \ + break; \ + top->unsignedp = unsigned1; \ + if (v2 < 0 && ! unsigned2) \ + top->value = MSH (pfile, v1, unsigned1, -v2); \ + else \ + top->value = PSH (pfile, v1, unsigned1, v2); + +/* Parse and evaluate a C expression, reading from PFILE. + Returns the truth value of the expression. */ +int +_cpp_parse_expr (pfile) + cpp_reader *pfile; +{ + /* The implementation is an operator precedence parser, i.e. a + bottom-up parser, using a stack for not-yet-reduced tokens. + + The stack base is 'stack', and the current stack pointer is 'top'. + There is a stack element for each operator (only), + and the most recently pushed operator is 'top->op'. + An operand (value) is stored in the 'value' field of the stack + element of the operator that precedes it. + In that case the 'flags' field has the HAVE_VALUE flag set. */ + +#define INIT_STACK_SIZE 20 + struct op init_stack[INIT_STACK_SIZE]; + struct op *stack = init_stack; + struct op *limit = stack + INIT_STACK_SIZE; + struct op *top = stack + 1; + int skip_evaluation = 0; + int result; + unsigned int lex_count, saw_leading_not; + + /* Set up detection of #if ! defined(). */ + pfile->mi_ind_cmacro = 0; + saw_leading_not = 0; + lex_count = 0; + + /* We've finished when we try to reduce this. */ + top->op = CPP_EOF; + /* Nifty way to catch missing '('. */ + top->prio = EXTRACT_PRIO(CLOSE_PAREN_PRIO); + /* Avoid missing right operand checks. */ + top->flags = NO_R_OPERAND; + + for (;;) + { + unsigned int prio; + unsigned int flags; + struct op op; + + /* Read a token */ + op = lex (pfile, skip_evaluation); + lex_count++; + + /* If the token is an operand, push its value and get next + token. If it is an operator, get its priority and flags, and + try to reduce the expression on the stack. */ + switch (op.op) + { + case CPP_ERROR: + goto syntax_error; + push_immediate: + case CPP_NUMBER: + /* Push a value onto the stack. */ + if (top->flags & HAVE_VALUE) + SYNTAX_ERROR ("missing binary operator"); + top->value = op.value; + top->unsignedp = op.unsignedp; + top->flags |= HAVE_VALUE; + continue; + + case CPP_EOF: prio = FORCE_REDUCE_PRIO; break; + + case CPP_NOT: + saw_leading_not = lex_count == 1; + prio = op_to_prio[op.op]; + break; + case CPP_PLUS: + case CPP_MINUS: prio = PLUS_PRIO; if (top->flags & HAVE_VALUE) break; + /* else unary; fall through */ + default: prio = op_to_prio[op.op]; break; + } + + /* Separate the operator's code into priority and flags. */ + flags = EXTRACT_FLAGS(prio); + prio = EXTRACT_PRIO(prio); + if (prio == EXTRACT_PRIO(OPEN_PAREN_PRIO)) + goto skip_reduction; + + /* Check for reductions. Then push the operator. */ + while (prio <= top->prio) + { + HOST_WIDEST_INT v1, v2; + unsigned int unsigned1, unsigned2; + + /* Most operators that can appear on the stack require a + right operand. Check this before trying to reduce. */ + if ((top->flags & (HAVE_VALUE | NO_R_OPERAND)) == 0) + { + if (top->op == CPP_OPEN_PAREN) + SYNTAX_ERROR ("void expression between '(' and ')'"); + else + SYNTAX_ERROR2 ("operator '%s' has no right operand", + op_as_text (pfile, top->op)); + } + + unsigned2 = top->unsignedp, v2 = top->value; + top--; + unsigned1 = top->unsignedp, v1 = top->value; + + /* Now set top->value = (top[1].op)(v1, v2); */ + switch (top[1].op) + { + default: + cpp_ice (pfile, "impossible operator '%s'", + op_as_text (pfile, top[1].op)); + goto syntax_error; + + case CPP_NOT: UNARY(!); break; + case CPP_COMPL: UNARY(~); break; + case CPP_LESS: COMPARE(<); break; + case CPP_GREATER: COMPARE(>); break; + case CPP_LESS_EQ: COMPARE(<=); break; + case CPP_GREATER_EQ: COMPARE(>=); break; + case CPP_EQ_EQ: EQUALITY(==); break; + case CPP_NOT_EQ: EQUALITY(!=); break; + case CPP_AND: BITWISE(&); break; + case CPP_XOR: BITWISE(^); break; + case CPP_OR: BITWISE(|); break; + case CPP_LSHIFT: SHIFT(left_shift, right_shift); break; + case CPP_RSHIFT: SHIFT(right_shift, left_shift); break; + case CPP_MIN: MINMAX(<); break; + case CPP_MAX: MINMAX(>); break; + + case CPP_PLUS: + if (!(top->flags & HAVE_VALUE)) + { + /* Can't use UNARY(+) because K+R C did not have unary + plus. Can't use UNARY() because some compilers object + to the empty argument. */ + top->value = v2; + top->unsignedp = unsigned2; + top->flags |= HAVE_VALUE; + + if (CPP_WTRADITIONAL (pfile)) + cpp_warning (pfile, + "traditional C rejects the unary plus operator"); + } + else + { + top->value = v1 + v2; + top->unsignedp = unsigned1 | unsigned2; + if (! top->unsignedp && ! skip_evaluation + && ! possible_sum_sign (v1, v2, top->value)) + integer_overflow (pfile); + } + break; + case CPP_MINUS: + if (!(top->flags & HAVE_VALUE)) + { + UNARY(-); + if (!skip_evaluation && (top->value & v2) < 0 && !unsigned2) + integer_overflow (pfile); + } + else + { /* Binary '-' */ + top->value = v1 - v2; + top->unsignedp = unsigned1 | unsigned2; + if (! top->unsignedp && ! skip_evaluation + && ! possible_sum_sign (top->value, v2, v1)) + integer_overflow (pfile); + } + break; + case CPP_MULT: + top->unsignedp = unsigned1 | unsigned2; + if (top->unsignedp) + top->value = (unsigned HOST_WIDEST_INT) v1 * v2; + else if (!skip_evaluation) + { + top->value = v1 * v2; + if (v1 && (top->value / v1 != v2 + || (top->value & v1 & v2) < 0)) + integer_overflow (pfile); + } + break; + case CPP_DIV: + case CPP_MOD: + if (skip_evaluation) + break; + if (v2 == 0) + SYNTAX_ERROR ("division by zero in #if"); + top->unsignedp = unsigned1 | unsigned2; + if (top[1].op == CPP_DIV) + { + if (top->unsignedp) + top->value = (unsigned HOST_WIDEST_INT) v1 / v2; + else + { + top->value = v1 / v2; + if ((top->value & v1 & v2) < 0) + integer_overflow (pfile); + } + } + else + { + if (top->unsignedp) + top->value = (unsigned HOST_WIDEST_INT) v1 % v2; + else + top->value = v1 % v2; + } + break; + + case CPP_OR_OR: + top->value = v1 || v2; + top->unsignedp = 0; + if (v1) skip_evaluation--; + break; + case CPP_AND_AND: + top->value = v1 && v2; + top->unsignedp = 0; + if (!v1) skip_evaluation--; + break; + case CPP_COMMA: + if (CPP_PEDANTIC (pfile)) + cpp_pedwarn (pfile, "comma operator in operand of #if"); + top->value = v2; + top->unsignedp = unsigned2; + break; + case CPP_QUERY: + SYNTAX_ERROR ("syntax error '?' without following ':'"); + case CPP_COLON: + if (top[0].op != CPP_QUERY) + SYNTAX_ERROR ("syntax error ':' without preceding '?'"); + top--; + if (top->value) skip_evaluation--; + top->value = top->value ? v1 : v2; + top->unsignedp = unsigned1 | unsigned2; + break; + case CPP_OPEN_PAREN: + if (op.op != CPP_CLOSE_PAREN) + SYNTAX_ERROR ("missing ')' in expression"); + op.value = v2; + op.unsignedp = unsigned2; + goto push_immediate; + case CPP_EOF: + /* Reducing this dummy operator indicates we've finished. */ + if (op.op == CPP_CLOSE_PAREN) + SYNTAX_ERROR ("missing '(' in expression"); + goto done; + } + } + + /* Handle short-circuit evaluations. */ + if (flags & SHORT_CIRCUIT) + switch (op.op) + { + case CPP_OR_OR: if (top->value) skip_evaluation++; break; + case CPP_AND_AND: + case CPP_QUERY: if (!top->value) skip_evaluation++; break; + case CPP_COLON: + if (top[-1].value) /* Was '?' condition true? */ + skip_evaluation++; + else + skip_evaluation--; + default: + break; + } + + skip_reduction: + /* Check we have a left operand iff we need one. */ + if (flags & NO_L_OPERAND) + { + if (top->flags & HAVE_VALUE) + SYNTAX_ERROR2 ("missing binary operator before '%s'", + op_as_text (pfile, op.op)); + } + else + { + if (!(top->flags & HAVE_VALUE)) + SYNTAX_ERROR2 ("operator '%s' has no left operand", + op_as_text (pfile, op.op)); + } + + /* Check for and handle stack overflow. */ + top++; + if (top == limit) + { + struct op *new_stack; + int old_size = (char *) limit - (char *) stack; + int new_size = 2 * old_size; + if (stack != init_stack) + new_stack = (struct op *) xrealloc (stack, new_size); + else + { + new_stack = (struct op *) xmalloc (new_size); + memcpy (new_stack, stack, old_size); + } + stack = new_stack; + top = (struct op *) ((char *) new_stack + old_size); + limit = (struct op *) ((char *) new_stack + new_size); + } + + top->flags = flags; + top->prio = prio & ~EXTRACT_PRIO(RIGHT_ASSOC); + top->op = op.op; + } + + done: + /* The controlling macro expression is only valid if we called lex 3 + times: and . push_conditional () + checks that we are at top-of-file. */ + if (pfile->mi_ind_cmacro && !(saw_leading_not && lex_count == 3)) + pfile->mi_ind_cmacro = 0; + + result = (top[1].value != 0); + + if (top != stack) + CPP_ICE ("unbalanced stack in #if"); + else if (!(top[1].flags & HAVE_VALUE)) + { + SYNTAX_ERROR ("#if with no expression"); + syntax_error: + result = 0; /* Return 0 on syntax error. */ + } + + /* Free dynamic stack if we allocated one. */ + if (stack != init_stack) + free (stack); + return result; +} + +/* Output OP as text for diagnostics. */ +static const unsigned char * +op_as_text (pfile, op) + cpp_reader *pfile; + enum cpp_ttype op; +{ + cpp_token token; + + token.type = op; + token.flags = 0; + return cpp_token_as_text (pfile, &token); +} diff --git a/src/mkutil/cpp/cppexp.obj b/src/mkutil/cpp/cppexp.obj new file mode 100644 index 0000000000000000000000000000000000000000..b49bb61d7502744b4dbc69a2744bdd3ca9110fe0 GIT binary patch literal 29195 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 JS-;03{}bY-fj|HN literal 0 HcmV?d00001 diff --git a/src/mkutil/cpp/cppfiles.c b/src/mkutil/cpp/cppfiles.c new file mode 100644 index 00000000..59359b05 --- /dev/null +++ b/src/mkutil/cpp/cppfiles.c @@ -0,0 +1,1187 @@ +/* Part of CPP library. (include file handling) + Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998, + 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Written by Per Bothner, 1994. + Based on CCCP program by Paul Rubin, June 1986 + Adapted to ANSI C, Richard Stallman, Jan 1987 + Split out of cpplib.c, Zack Weinberg, Oct 1998 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include "config.h" +#include "system.h" +#include "cpplib.h" +#include "cpphash.h" +#include "intl.h" +#include "mkdeps.h" +#include "splay-tree.h" + +#ifdef HAVE_MMAP_FILE +# include +# ifndef MMAP_THRESHOLD +# define MMAP_THRESHOLD 3 /* Minimum page count to mmap the file. */ +# endif +# if MMAP_THRESHOLD +# define TEST_THRESHOLD(size, pagesize) \ + (size / pagesize >= MMAP_THRESHOLD && (size % pagesize) != 0) + /* Use mmap if the file is big enough to be worth it (controlled + by MMAP_THRESHOLD) and if we can safely count on there being + at least one readable NUL byte after the end of the file's + contents. This is true for all tested operating systems when + the file size is not an exact multiple of the page size. */ +# define SHOULD_MMAP(size, pagesize) TEST_THRESHOLD (size, pagesize) +# endif + +#else /* No MMAP_FILE */ +# undef MMAP_THRESHOLD +# define MMAP_THRESHOLD 0 +#endif + +#ifndef O_BINARY +# define O_BINARY 0 +#endif + +/* If errno is inspected immediately after a system call fails, it will be + nonzero, and no error number will ever be zero. */ +#ifndef ENOENT +# define ENOENT 0 +#endif +#ifndef ENOTDIR +# define ENOTDIR 0 +#endif + +/* Suppress warning about function macros used w/o arguments in traditional + C. It is unlikely that glibc's strcmp macro helps this file at all. */ +#undef strcmp + +/* This structure is used for the table of all includes. */ +struct include_file +{ + const char *name; /* actual path name of file */ + const cpp_hashnode *cmacro; /* macro, if any, preventing reinclusion. */ + const struct search_path *foundhere; + /* location in search path where file was + found, for #include_next and sysp. */ + const unsigned char *buffer; /* pointer to cached file contents */ + struct stat st; /* copy of stat(2) data for file */ + int fd; /* fd open on file (short term storage only) */ + int err_no; /* errno obtained if opening a file failed */ + unsigned short include_count; /* number of times file has been read */ + unsigned short refcnt; /* number of stacked buffers using this file */ + unsigned char mapped; /* file buffer is mmapped */ +}; + +/* Variable length record files on VMS will have a stat size that includes + record control characters that won't be included in the read size. */ +#ifdef VMS +# define FAB_C_VAR 2 /* variable length records (see Starlet fabdef.h) */ +# define STAT_SIZE_TOO_BIG(ST) ((ST).st_fab_rfm == FAB_C_VAR) +#else +# define STAT_SIZE_TOO_BIG(ST) 0 +#endif + +/* The cmacro works like this: If it's NULL, the file is to be + included again. If it's NEVER_REREAD, the file is never to be + included again. Otherwise it is a macro hashnode, and the file is + to be included again if the macro is defined. */ +#define NEVER_REREAD ((const cpp_hashnode *)-1) +#define DO_NOT_REREAD(inc) \ +((inc)->cmacro && ((inc)->cmacro == NEVER_REREAD \ + || (inc)->cmacro->type == NT_MACRO)) +#define NO_INCLUDE_PATH ((struct include_file *) -1) + +static struct file_name_map *read_name_map + PARAMS ((cpp_reader *, const char *)); +static char *read_filename_string PARAMS ((int, FILE *)); +static char *remap_filename PARAMS ((cpp_reader *, char *, + struct search_path *)); +static struct search_path *search_from PARAMS ((cpp_reader *, + enum include_type)); +static struct include_file * + find_include_file PARAMS ((cpp_reader *, const cpp_token *, + enum include_type)); +static struct include_file *open_file PARAMS ((cpp_reader *, const char *)); +static int read_include_file PARAMS ((cpp_reader *, struct include_file *)); +static bool stack_include_file PARAMS ((cpp_reader *, struct include_file *)); +static void purge_cache PARAMS ((struct include_file *)); +static void destroy_node PARAMS ((splay_tree_value)); +static int report_missing_guard PARAMS ((splay_tree_node, void *)); +static splay_tree_node find_or_create_entry PARAMS ((cpp_reader *, + const char *)); +static void handle_missing_header PARAMS ((cpp_reader *, const char *, int)); +static int remove_component_p PARAMS ((const char *)); + +/* Set up the splay tree we use to store information about all the + file names seen in this compilation. We also have entries for each + file we tried to open but failed; this saves system calls since we + don't try to open it again in future. + + The key of each node is the file name, after processing by + _cpp_simplify_pathname. The path name may or may not be absolute. + The path string has been malloced, as is automatically freed by + registering free () as the splay tree key deletion function. + + A node's value is a pointer to a struct include_file, and is never + NULL. */ +void +_cpp_init_includes (pfile) + cpp_reader *pfile; +{ + pfile->all_include_files + = splay_tree_new ((splay_tree_compare_fn) strcmp, + (splay_tree_delete_key_fn) free, + destroy_node); +} + +/* Tear down the splay tree. */ +void +_cpp_cleanup_includes (pfile) + cpp_reader *pfile; +{ + splay_tree_delete (pfile->all_include_files); +} + +/* Free a node. The path string is automatically freed. */ +static void +destroy_node (v) + splay_tree_value v; +{ + struct include_file *f = (struct include_file *)v; + + if (f) + { + purge_cache (f); + free (f); + } +} + +/* Mark a file to not be reread (e.g. #import, read failure). */ +void +_cpp_never_reread (file) + struct include_file *file; +{ + file->cmacro = NEVER_REREAD; +} + +/* Lookup a filename, which is simplified after making a copy, and + create an entry if none exists. errno is nonzero iff a (reported) + stat() error occurred during simplification. */ +static splay_tree_node +find_or_create_entry (pfile, fname) + cpp_reader *pfile; + const char *fname; +{ + splay_tree_node node; + struct include_file *file; + char *name = xstrdup (fname); + + _cpp_simplify_pathname (name); + node = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) name); + if (node) + free (name); + else + { + file = xcnew (struct include_file); + file->name = name; + file->err_no = errno; + node = splay_tree_insert (pfile->all_include_files, + (splay_tree_key) file->name, + (splay_tree_value) file); + } + + return node; +} + +/* Enter a file name in the splay tree, for the sake of cpp_included. */ +void +_cpp_fake_include (pfile, fname) + cpp_reader *pfile; + const char *fname; +{ + find_or_create_entry (pfile, fname); +} + +/* Given a file name, look it up in the cache; if there is no entry, + create one with a non-NULL value (regardless of success in opening + the file). If the file doesn't exist or is inaccessible, this + entry is flagged so we don't attempt to open it again in the + future. If the file isn't open, open it. The empty string is + interpreted as stdin. + + Returns an include_file structure with an open file descriptor on + success, or NULL on failure. */ +static struct include_file * +open_file (pfile, filename) + cpp_reader *pfile; + const char *filename; +{ + splay_tree_node nd = find_or_create_entry (pfile, filename); + struct include_file *file = (struct include_file *) nd->value; + + if (file->err_no) + { + /* Ugh. handle_missing_header () needs errno to be set. */ + errno = file->err_no; + return 0; + } + + /* Don't reopen an idempotent file. */ + if (DO_NOT_REREAD (file)) + return file; + + /* Don't reopen one which is already loaded. */ + if (file->buffer != NULL) + return file; + + /* We used to open files in nonblocking mode, but that caused more + problems than it solved. Do take care not to acquire a + controlling terminal by mistake (this can't happen on sane + systems, but paranoia is a virtue). + + Use the three-argument form of open even though we aren't + specifying O_CREAT, to defend against broken system headers. + + O_BINARY tells some runtime libraries (notably DJGPP) not to do + newline translation; we can handle DOS line breaks just fine + ourselves. + + Special case: the empty string is translated to stdin. */ + + if (filename[0] == '\0') + file->fd = 0; + else + file->fd = open (file->name, O_RDONLY | O_NOCTTY | O_BINARY, 0666); + + if (file->fd != -1 && fstat (file->fd, &file->st) == 0) + { + if (!S_ISDIR (file->st.st_mode)) + return file; + + /* If it's a directory, we return null and continue the search + as the file we're looking for may appear elsewhere in the + search path. */ + errno = ENOENT; + close (file->fd); + file->fd = -1; + } + + file->err_no = errno; + return 0; +} + +/* Place the file referenced by INC into a new buffer on the buffer + stack, unless there are errors, or the file is not re-included + because of e.g. multiple-include guards. Returns true if a buffer + is stacked. */ +static bool +stack_include_file (pfile, inc) + cpp_reader *pfile; + struct include_file *inc; +{ + cpp_buffer *fp; + int sysp; + const char *filename; + + if (DO_NOT_REREAD (inc)) + return false; + + sysp = MAX ((pfile->map ? pfile->map->sysp : 0), + (inc->foundhere ? inc->foundhere->sysp : 0)); + + /* For -M, add the file to the dependencies on its first inclusion. */ + if (CPP_OPTION (pfile, print_deps) > sysp && !inc->include_count) + deps_add_dep (pfile->deps, inc->name); + + /* Not in cache? */ + if (! inc->buffer) + { + if (read_include_file (pfile, inc)) + { + /* If an error occurs, do not try to read this file again. */ + _cpp_never_reread (inc); + return false; + } + /* Mark a regular, zero-length file never-reread. We read it, + NUL-terminate it, and stack it once, so preprocessing a main + file of zero length does not raise an error. */ + if (S_ISREG (inc->st.st_mode) && inc->st.st_size == 0) + _cpp_never_reread (inc); + close (inc->fd); + inc->fd = -1; + } + + if (pfile->buffer) + /* We don't want MI guard advice for the main file. */ + inc->include_count++; + + /* Push a buffer. */ + fp = cpp_push_buffer (pfile, inc->buffer, inc->st.st_size, + /* from_stage3 */ CPP_OPTION (pfile, preprocessed), 0); + fp->inc = inc; + fp->inc->refcnt++; + + /* Initialise controlling macro state. */ + pfile->mi_valid = true; + pfile->mi_cmacro = 0; + + /* Generate the call back. */ + filename = inc->name; + if (*filename == '\0') + filename = ""; + _cpp_do_file_change (pfile, LC_ENTER, filename, 1, sysp); + + return true; +} + +/* Read the file referenced by INC into the file cache. + + If fd points to a plain file, we might be able to mmap it; we can + definitely allocate the buffer all at once. If fd is a pipe or + terminal, we can't do either. If fd is something weird, like a + block device, we don't want to read it at all. + + Unfortunately, different systems use different st.st_mode values + for pipes: some have S_ISFIFO, some S_ISSOCK, some are buggy and + zero the entire struct stat except a couple fields. Hence we don't + even try to figure out what something is, except for plain files + and block devices. + + FIXME: Flush file cache and try again if we run out of memory. */ +static int +read_include_file (pfile, inc) + cpp_reader *pfile; + struct include_file *inc; +{ + ssize_t size, offset, count; + U_CHAR *buf; +#if MMAP_THRESHOLD + static int pagesize = -1; +#endif + + if (S_ISREG (inc->st.st_mode)) + { + /* off_t might have a wider range than ssize_t - in other words, + the max size of a file might be bigger than the address + space. We can't handle a file that large. (Anyone with + a single source file bigger than 2GB needs to rethink + their coding style.) Some systems (e.g. AIX 4.1) define + SSIZE_MAX to be much smaller than the actual range of the + type. Use INTTYPE_MAXIMUM unconditionally to ensure this + does not bite us. */ + if (inc->st.st_size > INTTYPE_MAXIMUM (ssize_t)) + { + cpp_error (pfile, "%s is too large", inc->name); + goto fail; + } + size = inc->st.st_size; + + inc->mapped = 0; +#if MMAP_THRESHOLD + if (pagesize == -1) + pagesize = getpagesize (); + + if (SHOULD_MMAP (size, pagesize)) + { + buf = (U_CHAR *) mmap (0, size, PROT_READ, MAP_PRIVATE, inc->fd, 0); + if (buf == (U_CHAR *)-1) + goto perror_fail; + inc->mapped = 1; + } + else +#endif + { + buf = (U_CHAR *) xmalloc (size + 1); + offset = 0; + while (offset < size) + { + count = read (inc->fd, buf + offset, size - offset); + if (count < 0) + goto perror_fail; + if (count == 0) + { + if (!STAT_SIZE_TOO_BIG (inc->st)) + cpp_warning + (pfile, "%s is shorter than expected", inc->name); + size = offset; + buf = xrealloc (buf, size + 1); + inc->st.st_size = size; + break; + } + offset += count; + } + /* The lexer requires that the buffer be NUL-terminated. */ + buf[size] = '\0'; + } + } + else if (S_ISBLK (inc->st.st_mode)) + { + cpp_error (pfile, "%s is a block device", inc->name); + goto fail; + } + else + { + /* 8 kilobytes is a sensible starting size. It ought to be + bigger than the kernel pipe buffer, and it's definitely + bigger than the majority of C source files. */ + size = 8 * 1024; + + buf = (U_CHAR *) xmalloc (size + 1); + offset = 0; + while ((count = read (inc->fd, buf + offset, size - offset)) > 0) + { + offset += count; + if (offset == size) + { + size *= 2; + buf = xrealloc (buf, size + 1); + } + } + if (count < 0) + goto perror_fail; + + if (offset + 1 < size) + buf = xrealloc (buf, offset + 1); + + /* The lexer requires that the buffer be NUL-terminated. */ + buf[offset] = '\0'; + inc->st.st_size = offset; + } + + inc->buffer = buf; + return 0; + + perror_fail: + cpp_error_from_errno (pfile, inc->name); + fail: + return 1; +} + +/* Drop INC's buffer from memory, if we are unlikely to need it again. */ +static void +purge_cache (inc) + struct include_file *inc; +{ + if (inc->buffer) + { +#if MMAP_THRESHOLD + if (inc->mapped) + munmap ((PTR) inc->buffer, inc->st.st_size); + else +#endif + free ((PTR) inc->buffer); + inc->buffer = NULL; + } +} + +/* Return 1 if the file named by FNAME has been included before in + any context, 0 otherwise. */ +int +cpp_included (pfile, fname) + cpp_reader *pfile; + const char *fname; +{ + struct search_path *path; + char *name, *n; + splay_tree_node nd; + + if (IS_ABSOLUTE_PATHNAME (fname)) + { + /* Just look it up. */ + nd = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) fname); + return (nd && nd->value); + } + + /* Search directory path for the file. */ + name = (char *) alloca (strlen (fname) + pfile->max_include_len + 2); + for (path = CPP_OPTION (pfile, quote_include); path; path = path->next) + { + memcpy (name, path->name, path->len); + name[path->len] = '/'; + strcpy (&name[path->len + 1], fname); + if (CPP_OPTION (pfile, remap)) + n = remap_filename (pfile, name, path); + else + n = name; + + nd = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) n); + if (nd && nd->value) + return 1; + } + return 0; +} + +/* Search for HEADER. Return 0 if there is no such file (or it's + un-openable), in which case an error code will be in errno. If + there is no include path to use it returns NO_INCLUDE_PATH, + otherwise an include_file structure. If this request originates + from a directive of TYPE #include_next, set INCLUDE_NEXT to true. */ +static struct include_file * +find_include_file (pfile, header, type) + cpp_reader *pfile; + const cpp_token *header; + enum include_type type; +{ + const char *fname = (const char *) header->val.str.text; + struct search_path *path; + struct include_file *file; + char *name, *n; + + if (IS_ABSOLUTE_PATHNAME (fname)) + return open_file (pfile, fname); + + /* For #include_next, skip in the search path past the dir in which + the current file was found, but if it was found via an absolute + path use the normal search logic. */ + if (type == IT_INCLUDE_NEXT && pfile->buffer->inc->foundhere) + path = pfile->buffer->inc->foundhere->next; + else if (header->type == CPP_HEADER_NAME) + path = CPP_OPTION (pfile, bracket_include); + else + path = search_from (pfile, type); + + if (path == NULL) + { + cpp_error (pfile, "no include path in which to find %s", fname); + return NO_INCLUDE_PATH; + } + + /* Search directory path for the file. */ + name = (char *) alloca (strlen (fname) + pfile->max_include_len + 2); + for (; path; path = path->next) + { + int len = path->len; + memcpy (name, path->name, len); + /* Don't turn / into // or // into ///; // may be a namespace + escape. */ + if (name[len-1] == '/') + len--; + name[len] = '/'; + strcpy (&name[len + 1], fname); + if (CPP_OPTION (pfile, remap)) + n = remap_filename (pfile, name, path); + else + n = name; + + file = open_file (pfile, n); + if (file) + { + file->foundhere = path; + return file; + } + } + + return 0; +} + +/* Not everyone who wants to set system-header-ness on a buffer can + see the details of a buffer. This is an exported interface because + fix-header needs it. */ +void +cpp_make_system_header (pfile, syshdr, externc) + cpp_reader *pfile; + int syshdr, externc; +{ + int flags = 0; + + /* 1 = system header, 2 = system header to be treated as C. */ + if (syshdr) + flags = 1 + (externc != 0); + _cpp_do_file_change (pfile, LC_RENAME, pfile->map->to_file, + SOURCE_LINE (pfile->map, pfile->line), flags); +} + +/* Report on all files that might benefit from a multiple include guard. + Triggered by -H. */ +void +_cpp_report_missing_guards (pfile) + cpp_reader *pfile; +{ + int banner = 0; + splay_tree_foreach (pfile->all_include_files, report_missing_guard, + (PTR) &banner); +} + +/* Callback function for splay_tree_foreach(). */ +static int +report_missing_guard (n, b) + splay_tree_node n; + void *b; +{ + struct include_file *f = (struct include_file *) n->value; + int *bannerp = (int *)b; + + if (f && f->cmacro == 0 && f->include_count == 1) + { + if (*bannerp == 0) + { + fputs (_("Multiple include guards may be useful for:\n"), stderr); + *bannerp = 1; + } + fputs (f->name, stderr); + putc ('\n', stderr); + } + return 0; +} + +/* Create a dependency for file FNAME, or issue an error message as + appropriate. ANGLE_BRACKETS is non-zero if the file was bracketed + like <..>. */ +static void +handle_missing_header (pfile, fname, angle_brackets) + cpp_reader *pfile; + const char *fname; + int angle_brackets; +{ + int print_dep = CPP_PRINT_DEPS(pfile) > (angle_brackets || pfile->map->sysp); + + if (CPP_OPTION (pfile, print_deps_missing_files) && print_dep) + { + if (!angle_brackets || IS_ABSOLUTE_PATHNAME (fname)) + deps_add_dep (pfile->deps, fname); + else + { + /* If requested as a system header, assume it belongs in + the first system header directory. */ + struct search_path *ptr = CPP_OPTION (pfile, bracket_include); + char *p; + int len = 0, fname_len = strlen (fname); + + if (ptr) + len = ptr->len; + + p = (char *) alloca (len + fname_len + 2); + if (len) + { + memcpy (p, ptr->name, len); + p[len++] = '/'; + } + memcpy (p + len, fname, fname_len + 1); + deps_add_dep (pfile->deps, p); + } + } + /* If -M was specified, then don't count this as an error, because + we can still produce correct output. Otherwise, we can't produce + correct output, because there may be dependencies we need inside + the missing file, and we don't know what directory this missing + file exists in. FIXME: Use a future cpp_diagnostic_with_errno () + for both of these cases. */ + else if (CPP_PRINT_DEPS (pfile) && ! print_dep) + cpp_warning (pfile, "%s: %s", fname, xstrerror (errno)); + else + cpp_error_from_errno (pfile, fname); +} + +/* Handles #include-family directives (distinguished by TYPE), + including HEADER, and the command line -imacros and -include. + Returns true if a buffer was stacked. */ +bool +_cpp_execute_include (pfile, header, type) + cpp_reader *pfile; + const cpp_token *header; + enum include_type type; +{ + bool stacked = false; + struct include_file *inc = find_include_file (pfile, header, type); + + if (inc == 0) + handle_missing_header (pfile, (const char *) header->val.str.text, + header->type == CPP_HEADER_NAME); + else if (inc != NO_INCLUDE_PATH) + { + stacked = stack_include_file (pfile, inc); + + if (type == IT_IMPORT) + _cpp_never_reread (inc); + } + + return stacked; +} + +/* Locate HEADER, and determine whether it is newer than the current + file. If it cannot be located or dated, return -1, if it is newer + newer, return 1, otherwise 0. */ +int +_cpp_compare_file_date (pfile, header) + cpp_reader *pfile; + const cpp_token *header; +{ + struct include_file *inc = find_include_file (pfile, header, 0); + + if (inc == NULL || inc == NO_INCLUDE_PATH) + return -1; + + if (inc->fd > 0) + { + close (inc->fd); + inc->fd = -1; + } + + return inc->st.st_mtime > pfile->buffer->inc->st.st_mtime; +} + + +/* Push an input buffer and load it up with the contents of FNAME. If + FNAME is "", read standard input. Return true if a buffer was + stacked. */ +bool +_cpp_read_file (pfile, fname) + cpp_reader *pfile; + const char *fname; +{ + struct include_file *f = open_file (pfile, fname); + + if (f == NULL) + { + cpp_error_from_errno (pfile, fname); + return false; + } + + return stack_include_file (pfile, f); +} + +/* Do appropriate cleanup when a file INC's buffer is popped off the + input stack. Push the next -include file, if any remain. */ +bool +_cpp_pop_file_buffer (pfile, inc) + cpp_reader *pfile; + struct include_file *inc; +{ + bool pushed = false; + + /* Record the inclusion-preventing macro, which could be NULL + meaning no controlling macro. */ + if (pfile->mi_valid && inc->cmacro == NULL) + inc->cmacro = pfile->mi_cmacro; + + /* Invalidate control macros in the #including file. */ + pfile->mi_valid = false; + + inc->refcnt--; + if (inc->refcnt == 0 && DO_NOT_REREAD (inc)) + purge_cache (inc); + + /* Don't generate a callback for popping the main file. */ + if (pfile->buffer) + { + _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0); + + /* Finally, push the next -included file, if any. */ + if (!pfile->buffer->prev) + pushed = _cpp_push_next_buffer (pfile); + } + + return pushed; +} + +/* Returns the first place in the include chain to start searching for + "" includes. This involves stripping away the basename of the + current file, unless -I- was specified. + + If we're handling -include or -imacros, use the "" chain, but with + the preprocessor's cwd prepended. */ +static struct search_path * +search_from (pfile, type) + cpp_reader *pfile; + enum include_type type; +{ + cpp_buffer *buffer = pfile->buffer; + unsigned int dlen; + + /* Command line uses the cwd, and does not cache the result. */ + if (type == IT_CMDLINE) + goto use_cwd; + + /* Ignore the current file's directory if -I- was given. */ + if (CPP_OPTION (pfile, ignore_srcdir)) + return CPP_OPTION (pfile, quote_include); + + if (! buffer->search_cached) + { + buffer->search_cached = 1; + + dlen = lbasename (buffer->inc->name) - buffer->inc->name; + + if (dlen) + { + /* We don't guarantee NAME is null-terminated. This saves + allocating and freeing memory. Drop a trailing '/'. */ + buffer->dir.name = buffer->inc->name; + if (dlen > 1) + dlen--; + } + else + { + use_cwd: + buffer->dir.name = "."; + dlen = 1; + } + + if (dlen > pfile->max_include_len) + pfile->max_include_len = dlen; + + buffer->dir.len = dlen; + buffer->dir.next = CPP_OPTION (pfile, quote_include); + buffer->dir.sysp = pfile->map->sysp; + } + + return &buffer->dir; +} + +/* The file_name_map structure holds a mapping of file names for a + particular directory. This mapping is read from the file named + FILE_NAME_MAP_FILE in that directory. Such a file can be used to + map filenames on a file system with severe filename restrictions, + such as DOS. The format of the file name map file is just a series + of lines with two tokens on each line. The first token is the name + to map, and the second token is the actual name to use. */ +struct file_name_map +{ + struct file_name_map *map_next; + char *map_from; + char *map_to; +}; + +#define FILE_NAME_MAP_FILE "header.gcc" + +/* Read a space delimited string of unlimited length from a stdio + file F. */ +static char * +read_filename_string (ch, f) + int ch; + FILE *f; +{ + char *alloc, *set; + int len; + + len = 20; + set = alloc = xmalloc (len + 1); + if (! is_space(ch)) + { + *set++ = ch; + while ((ch = getc (f)) != EOF && ! is_space(ch)) + { + if (set - alloc == len) + { + len *= 2; + alloc = xrealloc (alloc, len + 1); + set = alloc + len / 2; + } + *set++ = ch; + } + } + *set = '\0'; + ungetc (ch, f); + return alloc; +} + +/* This structure holds a linked list of file name maps, one per directory. */ +struct file_name_map_list +{ + struct file_name_map_list *map_list_next; + char *map_list_name; + struct file_name_map *map_list_map; +}; + +/* Read the file name map file for DIRNAME. */ +static struct file_name_map * +read_name_map (pfile, dirname) + cpp_reader *pfile; + const char *dirname; +{ + struct file_name_map_list *map_list_ptr; + char *name; + FILE *f; + + /* Check the cache of directories, and mappings in their remap file. */ + for (map_list_ptr = CPP_OPTION (pfile, map_list); map_list_ptr; + map_list_ptr = map_list_ptr->map_list_next) + if (! strcmp (map_list_ptr->map_list_name, dirname)) + return map_list_ptr->map_list_map; + + map_list_ptr = ((struct file_name_map_list *) + xmalloc (sizeof (struct file_name_map_list))); + map_list_ptr->map_list_name = xstrdup (dirname); + + /* The end of the list ends in NULL. */ + map_list_ptr->map_list_map = NULL; + + name = (char *) alloca (strlen (dirname) + strlen (FILE_NAME_MAP_FILE) + 2); + strcpy (name, dirname); + if (*dirname) + strcat (name, "/"); + strcat (name, FILE_NAME_MAP_FILE); + f = fopen (name, "r"); + + /* Silently return NULL if we cannot open. */ + if (f) + { + int ch; + int dirlen = strlen (dirname); + + while ((ch = getc (f)) != EOF) + { + char *from, *to; + struct file_name_map *ptr; + + if (is_space(ch)) + continue; + from = read_filename_string (ch, f); + while ((ch = getc (f)) != EOF && is_hspace(ch)) + ; + to = read_filename_string (ch, f); + + ptr = ((struct file_name_map *) + xmalloc (sizeof (struct file_name_map))); + ptr->map_from = from; + + /* Make the real filename absolute. */ + if (IS_ABSOLUTE_PATHNAME (to)) + ptr->map_to = to; + else + { + ptr->map_to = xmalloc (dirlen + strlen (to) + 2); + strcpy (ptr->map_to, dirname); + ptr->map_to[dirlen] = '/'; + strcpy (ptr->map_to + dirlen + 1, to); + free (to); + } + + ptr->map_next = map_list_ptr->map_list_map; + map_list_ptr->map_list_map = ptr; + + while ((ch = getc (f)) != '\n') + if (ch == EOF) + break; + } + fclose (f); + } + + /* Add this information to the cache. */ + map_list_ptr->map_list_next = CPP_OPTION (pfile, map_list); + CPP_OPTION (pfile, map_list) = map_list_ptr; + + return map_list_ptr->map_list_map; +} + +/* Remap an unsimplified path NAME based on the file_name_map (if any) + for LOC. */ +static char * +remap_filename (pfile, name, loc) + cpp_reader *pfile; + char *name; + struct search_path *loc; +{ + struct file_name_map *map; + const char *from, *p; + char *dir; + + if (! loc->name_map) + { + /* Get a null-terminated path. */ + char *dname = alloca (loc->len + 1); + memcpy (dname, loc->name, loc->len); + dname[loc->len] = '\0'; + + loc->name_map = read_name_map (pfile, dname); + if (! loc->name_map) + return name; + } + + /* This works since NAME has not been simplified yet. */ + from = name + loc->len + 1; + + for (map = loc->name_map; map; map = map->map_next) + if (!strcmp (map->map_from, from)) + return map->map_to; + + /* Try to find a mapping file for the particular directory we are + looking in. Thus #include will look up sys/types.h + in /usr/include/header.gcc and look up types.h in + /usr/include/sys/header.gcc. */ + p = strrchr (name, '/'); + if (!p) + return name; + + /* We know p != name as absolute paths don't call remap_filename. */ + if (p == name) + cpp_ice (pfile, "absolute file name in remap_filename"); + + dir = (char *) alloca (p - name + 1); + memcpy (dir, name, p - name); + dir[p - name] = '\0'; + from = p + 1; + + for (map = read_name_map (pfile, dir); map; map = map->map_next) + if (! strcmp (map->map_from, from)) + return map->map_to; + + return name; +} + +/* Returns true if it is safe to remove the final component of path, + when it is followed by a ".." component. We use lstat to avoid + symlinks if we have it. If not, we can still catch errors with + stat (). */ +static int +remove_component_p (path) + const char *path; +{ + struct stat s; + int result; + +#ifdef HAVE_LSTAT + result = lstat (path, &s); +#else + result = stat (path, &s); +#endif + + /* There's no guarantee that errno will be unchanged, even on + success. Cygwin's lstat(), for example, will often set errno to + ENOSYS. In case of success, reset errno to zero. */ + if (result == 0) + errno = 0; + + return result == 0 && S_ISDIR (s.st_mode); +} + +/* Simplify a path name in place, deleting redundant components. This + reduces OS overhead and guarantees that equivalent paths compare + the same (modulo symlinks). + + Transforms made: + foo/bar/../quux foo/quux + foo/./bar foo/bar + foo//bar foo/bar + /../quux /quux + //quux //quux (POSIX allows leading // as a namespace escape) + + Guarantees no trailing slashes. All transforms reduce the length + of the string. Returns PATH. errno is 0 if no error occurred; + nonzero if an error occurred when using stat () or lstat (). */ +char * +_cpp_simplify_pathname (path) + char *path; +{ +#ifndef VMS + char *from, *to; + char *base, *orig_base; + int absolute = 0; + + errno = 0; + /* Don't overflow the empty path by putting a '.' in it below. */ + if (*path == '\0') + return path; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Convert all backslashes to slashes. */ + for (from = path; *from; from++) + if (*from == '\\') *from = '/'; + + /* Skip over leading drive letter if present. */ + if (ISALPHA (path[0]) && path[1] == ':') + from = to = &path[2]; + else + from = to = path; +#else + from = to = path; +#endif + + /* Remove redundant leading /s. */ + if (*from == '/') + { + absolute = 1; + to++; + from++; + if (*from == '/') + { + if (*++from == '/') + /* 3 or more initial /s are equivalent to 1 /. */ + while (*++from == '/'); + else + /* On some hosts // differs from /; Posix allows this. */ + to++; + } + } + + base = orig_base = to; + for (;;) + { + int move_base = 0; + + while (*from == '/') + from++; + + if (*from == '\0') + break; + + if (*from == '.') + { + if (from[1] == '\0') + break; + if (from[1] == '/') + { + from += 2; + continue; + } + else if (from[1] == '.' && (from[2] == '/' || from[2] == '\0')) + { + /* Don't simplify if there was no previous component. */ + if (absolute && orig_base == to) + { + from += 2; + continue; + } + /* Don't simplify if the previous component was "../", + or if an error has already occurred with (l)stat. */ + if (base != to && errno == 0) + { + /* We don't back up if it's a symlink. */ + *to = '\0'; + if (remove_component_p (path)) + { + while (to > base && *to != '/') + to--; + from += 2; + continue; + } + } + move_base = 1; + } + } + + /* Add the component separator. */ + if (to > orig_base) + *to++ = '/'; + + /* Copy this component until the trailing null or '/'. */ + while (*from != '\0' && *from != '/') + *to++ = *from++; + + if (move_base) + base = to; + } + + /* Change the empty string to "." so that it is not treated as stdin. + Null terminate. */ + if (to == path) + *to++ = '.'; + *to = '\0'; + + return path; +#else /* VMS */ + errno = 0; + return path; +#endif /* !VMS */ +} diff --git a/src/mkutil/cpp/cppfiles.obj b/src/mkutil/cpp/cppfiles.obj new file mode 100644 index 0000000000000000000000000000000000000000..dcd38cf39be66e31687a0c32558322519b82b081 GIT binary patch literal 29765 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/cpp/cpphash.c b/src/mkutil/cpp/cpphash.c new file mode 100644 index 00000000..10862d1c --- /dev/null +++ b/src/mkutil/cpp/cpphash.c @@ -0,0 +1,130 @@ +/* Hash tables for the CPP library. + Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998, + 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Written by Per Bothner, 1994. + Based on CCCP program by Paul Rubin, June 1986 + Adapted to ANSI C, Richard Stallman, Jan 1987 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + +#include "config.h" +#include "system.h" +#include "cpplib.h" +#include "cpphash.h" + +static cpp_hashnode *alloc_node PARAMS ((hash_table *)); + +/* Return an identifier node for hashtable.c. Used by cpplib except + when integrated with the C front ends. */ +static cpp_hashnode * +alloc_node (table) + hash_table *table; +{ + cpp_hashnode *node; + + node = (cpp_hashnode *) obstack_alloc (&table->pfile->hash_ob, + sizeof (cpp_hashnode)); + memset ((PTR) node, 0, sizeof (cpp_hashnode)); + return node; +} + +/* Set up the identifier hash table. Use TABLE if non-null, otherwise + create our own. */ +void +_cpp_init_hashtable (pfile, table) + cpp_reader *pfile; + hash_table *table; +{ + struct spec_nodes *s; + + if (table == NULL) + { + pfile->our_hashtable = 1; + table = ht_create (13); /* 8K (=2^13) entries. */ + table->alloc_node = (hashnode (*) PARAMS ((hash_table *))) alloc_node; + gcc_obstack_init (&pfile->hash_ob); + } + + table->pfile = pfile; + pfile->hash_table = table; + + /* Now we can initialize things that use the hash table. */ + _cpp_init_directives (pfile); + _cpp_init_internal_pragmas (pfile); + + s = &pfile->spec_nodes; + s->n_defined = cpp_lookup (pfile, DSC("defined")); + s->n_true = cpp_lookup (pfile, DSC("true")); + s->n_false = cpp_lookup (pfile, DSC("false")); + s->n__STRICT_ANSI__ = cpp_lookup (pfile, DSC("__STRICT_ANSI__")); + s->n__VA_ARGS__ = cpp_lookup (pfile, DSC("__VA_ARGS__")); + s->n__VA_ARGS__->flags |= NODE_DIAGNOSTIC; +} + +/* Tear down the identifier hash table. */ +void +_cpp_destroy_hashtable (pfile) + cpp_reader *pfile; +{ + if (pfile->our_hashtable) + { + ht_destroy (pfile->hash_table); + obstack_free (&pfile->hash_ob, 0); + } +} + +/* Returns the hash entry for the STR of length LEN, creating one + if necessary. */ +cpp_hashnode * +cpp_lookup (pfile, str, len) + cpp_reader *pfile; + const unsigned char *str; + unsigned int len; +{ + /* ht_lookup cannot return NULL. */ + return CPP_HASHNODE (ht_lookup (pfile->hash_table, str, len, HT_ALLOC)); +} + +/* Determine whether the str STR, of length LEN, is a defined macro. */ +int +cpp_defined (pfile, str, len) + cpp_reader *pfile; + const unsigned char *str; + int len; +{ + cpp_hashnode *node; + + node = CPP_HASHNODE (ht_lookup (pfile->hash_table, str, len, HT_NO_INSERT)); + + /* If it's of type NT_MACRO, it cannot be poisoned. */ + return node && node->type == NT_MACRO; +} + +/* For all nodes in the hashtable, callback CB with parameters PFILE, + the node, and V. */ +void +cpp_forall_identifiers (pfile, cb, v) + cpp_reader *pfile; + cpp_cb cb; + PTR v; +{ + /* We don't need a proxy since the hash table's identifier comes + first in cpp_hashnode. */ + ht_forall (pfile->hash_table, (ht_cb) cb, v); +} diff --git a/src/mkutil/cpp/cpphash.h b/src/mkutil/cpp/cpphash.h new file mode 100644 index 00000000..abeb5247 --- /dev/null +++ b/src/mkutil/cpp/cpphash.h @@ -0,0 +1,485 @@ +/* Part of CPP library. + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 + Free Software Foundation, Inc. + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* This header defines all the internal data structures and functions + that need to be visible across files. It's called cpphash.h for + historical reasons. */ + +#ifndef GCC_CPPHASH_H +#define GCC_CPPHASH_H + +#include "hashtable.h" + +struct directive; /* Deliberately incomplete. */ + +/* Test if a sign is valid within a preprocessing number. */ +#define VALID_SIGN(c, prevc) \ + (((c) == '+' || (c) == '-') && \ + ((prevc) == 'e' || (prevc) == 'E' \ + || (((prevc) == 'p' || (prevc) == 'P') \ + && CPP_OPTION (pfile, extended_numbers)))) + +#define CPP_OPTION(PFILE, OPTION) ((PFILE)->opts.OPTION) +#define CPP_BUFFER(PFILE) ((PFILE)->buffer) +#define CPP_BUF_COLUMN(BUF, CUR) ((CUR) - (BUF)->line_base + (BUF)->col_adjust) +#define CPP_BUF_COL(BUF) CPP_BUF_COLUMN(BUF, (BUF)->cur) + +/* Maximum nesting of cpp_buffers. We use a static limit, partly for + efficiency, and partly to limit runaway recursion. */ +#define CPP_STACK_MAX 200 + +/* A generic memory buffer, and operations on it. */ +typedef struct _cpp_buff _cpp_buff; +struct _cpp_buff +{ + struct _cpp_buff *next; + unsigned char *base, *cur, *limit; +}; + +extern _cpp_buff *_cpp_get_buff PARAMS ((cpp_reader *, size_t)); +extern void _cpp_release_buff PARAMS ((cpp_reader *, _cpp_buff *)); +extern void _cpp_extend_buff PARAMS ((cpp_reader *, _cpp_buff **, size_t)); +extern _cpp_buff *_cpp_append_extend_buff PARAMS ((cpp_reader *, _cpp_buff *, + size_t)); +extern void _cpp_free_buff PARAMS ((_cpp_buff *)); +extern unsigned char *_cpp_aligned_alloc PARAMS ((cpp_reader *, size_t)); +extern unsigned char *_cpp_unaligned_alloc PARAMS ((cpp_reader *, size_t)); + +#define BUFF_ROOM(BUFF) (size_t) ((BUFF)->limit - (BUFF)->cur) +#define BUFF_FRONT(BUFF) ((BUFF)->cur) +#define BUFF_LIMIT(BUFF) ((BUFF)->limit) + +/* List of directories to look for include files in. */ +struct search_path +{ + struct search_path *next; + + /* NOTE: NAME may not be null terminated for the case of the current + file's directory! */ + const char *name; + unsigned int len; + /* We use these to tell if the directory mentioned here is a duplicate + of an earlier directory on the search path. */ + ino_t ino; + dev_t dev; + /* Non-zero if it is a system include directory. */ + int sysp; + /* Mapping of file names for this directory. Only used on MS-DOS + and related platforms. */ + struct file_name_map *name_map; +}; + +/* #include types. */ +enum include_type {IT_INCLUDE, IT_INCLUDE_NEXT, IT_IMPORT, IT_CMDLINE}; + +union utoken +{ + const cpp_token *token; + const cpp_token **ptoken; +}; + +/* A "run" of tokens; part of a chain of runs. */ +typedef struct tokenrun tokenrun; +struct tokenrun +{ + tokenrun *next, *prev; + cpp_token *base, *limit; +}; + +typedef struct cpp_context cpp_context; +struct cpp_context +{ + /* Doubly-linked list. */ + cpp_context *next, *prev; + + /* Contexts other than the base context are contiguous tokens. + e.g. macro expansions, expanded argument tokens. */ + union utoken first; + union utoken last; + + /* If non-NULL, a buffer used for storage related to this context. + When the context is popped, the buffer is released. */ + _cpp_buff *buff; + + /* For a macro context, the macro node, otherwise NULL. */ + cpp_hashnode *macro; + + /* True if utoken element is token, else ptoken. */ + bool direct_p; +}; + +struct lexer_state +{ + /* Nonzero if first token on line is CPP_HASH. */ + unsigned char in_directive; + + /* True if we are skipping a failed conditional group. */ + unsigned char skipping; + + /* Nonzero if in a directive that takes angle-bracketed headers. */ + unsigned char angled_headers; + + /* Nonzero to save comments. Turned off if discard_comments, and in + all directives apart from #define. */ + unsigned char save_comments; + + /* Nonzero if we're mid-comment. */ + unsigned char lexing_comment; + + /* Nonzero if lexing __VA_ARGS__ is valid. */ + unsigned char va_args_ok; + + /* Nonzero if lexing poisoned identifiers is valid. */ + unsigned char poisoned_ok; + + /* Nonzero to prevent macro expansion. */ + unsigned char prevent_expansion; + + /* Nonzero when parsing arguments to a function-like macro. */ + unsigned char parsing_args; +}; + +/* Special nodes - identifiers with predefined significance. */ +struct spec_nodes +{ + cpp_hashnode *n_defined; /* defined operator */ + cpp_hashnode *n_true; /* C++ keyword true */ + cpp_hashnode *n_false; /* C++ keyword false */ + cpp_hashnode *n__STRICT_ANSI__; /* STDC_0_IN_SYSTEM_HEADERS */ + cpp_hashnode *n__VA_ARGS__; /* C99 vararg macros */ +}; + +/* Represents the contents of a file cpplib has read in. */ +struct cpp_buffer +{ + const unsigned char *cur; /* current position */ + const unsigned char *backup_to; /* if peeked character is not wanted */ + const unsigned char *rlimit; /* end of valid data */ + const unsigned char *line_base; /* start of current line */ + + struct cpp_buffer *prev; + + const unsigned char *buf; /* Entire character buffer. */ + + /* Pointer into the include table; non-NULL if this is a file + buffer. Used for include_next and to record control macros. */ + struct include_file *inc; + + /* Value of if_stack at start of this file. + Used to prohibit unmatched #endif (etc) in an include file. */ + struct if_stack *if_stack; + + /* Token column position adjustment owing to tabs in whitespace. */ + unsigned int col_adjust; + + /* Contains PREV_WHITE and/or AVOID_LPASTE. */ + unsigned char saved_flags; + + /* Because of the way the lexer works, -Wtrigraphs can sometimes + warn twice for the same trigraph. This helps prevent that. */ + const unsigned char *last_Wtrigraphs; + + /* True if we have already warned about C++ comments in this file. + The warning happens only for C89 extended mode with -pedantic on, + or for -Wtraditional, and only once per file (otherwise it would + be far too noisy). */ + unsigned char warned_cplusplus_comments; + + /* True if we don't process trigraphs and escaped newlines. True + for preprocessed input, command line directives, and _Pragma + buffers. */ + unsigned char from_stage3; + + /* Nonzero means that the directory to start searching for "" + include files has been calculated and stored in "dir" below. */ + unsigned char search_cached; + + /* At EOF, a buffer is automatically popped. If RETURN_AT_EOF is + true, a CPP_EOF token is then returned. Otherwise, the next + token from the enclosing buffer is returned. */ + bool return_at_eof; + + /* The directory of the this buffer's file. Its NAME member is not + allocated, so we don't need to worry about freeing it. */ + struct search_path dir; +}; + +/* A cpp_reader encapsulates the "state" of a pre-processor run. + Applying cpp_get_token repeatedly yields a stream of pre-processor + tokens. Usually, there is only one cpp_reader object active. */ +struct cpp_reader +{ + /* Top of buffer stack. */ + cpp_buffer *buffer; + + /* Lexer state. */ + struct lexer_state state; + + /* Source line tracking. */ + struct line_maps line_maps; + const struct line_map *map; + unsigned int line; + + /* The line of the '#' of the current directive. */ + unsigned int directive_line; + + /* Memory buffers. */ + _cpp_buff *a_buff; /* Aligned permanent storage. */ + _cpp_buff *u_buff; /* Unaligned permanent storage. */ + _cpp_buff *free_buffs; /* Free buffer chain. */ + + /* Context stack. */ + struct cpp_context base_context; + struct cpp_context *context; + + /* If in_directive, the directive if known. */ + const struct directive *directive; + + /* Multiple inlcude optimisation. */ + const cpp_hashnode *mi_cmacro; + const cpp_hashnode *mi_ind_cmacro; + bool mi_valid; + + /* Lexing. */ + cpp_token *cur_token; + tokenrun base_run, *cur_run; + unsigned int lookaheads; + + /* Non-zero prevents the lexer from re-using the token runs. */ + unsigned int keep_tokens; + + /* Error counter for exit code. */ + unsigned int errors; + + /* Line and column where a newline was first seen in a string + constant (multi-line strings). */ + unsigned int mls_line; + unsigned int mls_col; + + /* Buffer to hold macro definition string. */ + unsigned char *macro_buffer; + unsigned int macro_buffer_len; + + /* Tree of other included files. See cppfiles.c. */ + struct splay_tree_s *all_include_files; + + /* Current maximum length of directory names in the search path + for include files. (Altered as we get more of them.) */ + unsigned int max_include_len; + + /* Date and time tokens. Calculated together if either is requested. */ + cpp_token date; + cpp_token time; + + /* EOF token, and a token forcing paste avoidance. */ + cpp_token avoid_paste; + cpp_token eof; + + /* Opaque handle to the dependencies of mkdeps.c. Used by -M etc. */ + struct deps *deps; + + /* Obstack holding all macro hash nodes. This never shrinks. + See cpphash.c */ + struct obstack hash_ob; + + /* Obstack holding buffer and conditional structures. This is a + real stack. See cpplib.c. */ + struct obstack buffer_ob; + + /* Pragma table - dynamic, because a library user can add to the + list of recognized pragmas. */ + struct pragma_entry *pragmas; + + /* Call backs. */ + struct cpp_callbacks cb; + + /* Identifier hash table. */ + struct ht *hash_table; + + /* User visible options. */ + struct cpp_options opts; + + /* Special nodes - identifiers with predefined significance to the + preprocessor. */ + struct spec_nodes spec_nodes; + + /* Whether to print our version number. Done this way so + we don't get it twice for -v -version. */ + unsigned char print_version; + + /* Whether cpplib owns the hashtable. */ + unsigned char our_hashtable; +}; + +/* Character classes. Based on the more primitive macros in safe-ctype.h. + If the definition of `numchar' looks odd to you, please look up the + definition of a pp-number in the C standard [section 6.4.8 of C99]. + + In the unlikely event that characters other than \r and \n enter + the set is_vspace, the macro handle_newline() in cpplex.c must be + updated. */ +#define _dollar_ok(x) ((x) == '$' && CPP_OPTION (pfile, dollars_in_ident)) + +#define is_idchar(x) (ISIDNUM(x) || _dollar_ok(x)) +#define is_numchar(x) ISIDNUM(x) +#define is_idstart(x) (ISIDST(x) || _dollar_ok(x)) +#define is_numstart(x) ISDIGIT(x) +#define is_hspace(x) ISBLANK(x) +#define is_vspace(x) IS_VSPACE(x) +#define is_nvspace(x) IS_NVSPACE(x) +#define is_space(x) IS_SPACE_OR_NUL(x) + +/* This table is constant if it can be initialized at compile time, + which is the case if cpp was compiled with GCC >=2.7, or another + compiler that supports C99. */ +#if HAVE_DESIGNATED_INITIALIZERS +extern const unsigned char _cpp_trigraph_map[UCHAR_MAX + 1]; +#else +extern unsigned char _cpp_trigraph_map[UCHAR_MAX + 1]; +#endif + +/* Macros. */ + +#define CPP_PRINT_DEPS(PFILE) CPP_OPTION (PFILE, print_deps) +#define CPP_IN_SYSTEM_HEADER(PFILE) ((PFILE)->map && (PFILE)->map->sysp) +#define CPP_PEDANTIC(PF) CPP_OPTION (PF, pedantic) +#define CPP_WTRADITIONAL(PF) CPP_OPTION (PF, warn_traditional) + +/* In cpperror.c */ +enum error_type { WARNING = 0, WARNING_SYSHDR, PEDWARN, ERROR, FATAL, ICE }; +extern int _cpp_begin_message PARAMS ((cpp_reader *, enum error_type, + unsigned int, unsigned int)); + +/* In cppmacro.c */ +extern void _cpp_free_definition PARAMS ((cpp_hashnode *)); +extern int _cpp_create_definition PARAMS ((cpp_reader *, cpp_hashnode *)); +extern void _cpp_pop_context PARAMS ((cpp_reader *)); + +/* In cpphash.c */ +extern void _cpp_init_hashtable PARAMS ((cpp_reader *, hash_table *)); +extern void _cpp_destroy_hashtable PARAMS ((cpp_reader *)); + +/* In cppfiles.c */ +extern void _cpp_fake_include PARAMS ((cpp_reader *, const char *)); +extern void _cpp_never_reread PARAMS ((struct include_file *)); +extern char *_cpp_simplify_pathname PARAMS ((char *)); +extern bool _cpp_read_file PARAMS ((cpp_reader *, const char *)); +extern bool _cpp_execute_include PARAMS ((cpp_reader *, + const cpp_token *, + enum include_type)); +extern int _cpp_compare_file_date PARAMS ((cpp_reader *, + const cpp_token *)); +extern void _cpp_report_missing_guards PARAMS ((cpp_reader *)); +extern void _cpp_init_includes PARAMS ((cpp_reader *)); +extern void _cpp_cleanup_includes PARAMS ((cpp_reader *)); +extern bool _cpp_pop_file_buffer PARAMS ((cpp_reader *, + struct include_file *)); + +/* In cppexp.c */ +extern int _cpp_parse_expr PARAMS ((cpp_reader *)); + +/* In cpplex.c */ +extern cpp_token *_cpp_temp_token PARAMS ((cpp_reader *)); +extern const cpp_token *_cpp_lex_token PARAMS ((cpp_reader *)); +extern cpp_token *_cpp_lex_direct PARAMS ((cpp_reader *)); +extern int _cpp_equiv_tokens PARAMS ((const cpp_token *, + const cpp_token *)); +extern void _cpp_init_tokenrun PARAMS ((tokenrun *, unsigned int)); + +/* In cppinit.c. */ +extern bool _cpp_push_next_buffer PARAMS ((cpp_reader *)); + +/* In cpplib.c */ +extern int _cpp_test_assertion PARAMS ((cpp_reader *, int *)); +extern int _cpp_handle_directive PARAMS ((cpp_reader *, int)); +extern void _cpp_define_builtin PARAMS ((cpp_reader *, const char *)); +extern void _cpp_do__Pragma PARAMS ((cpp_reader *)); +extern void _cpp_init_directives PARAMS ((cpp_reader *)); +extern void _cpp_init_internal_pragmas PARAMS ((cpp_reader *)); +extern void _cpp_do_file_change PARAMS ((cpp_reader *, enum lc_reason, + const char *, + unsigned int, unsigned int)); +extern void _cpp_pop_buffer PARAMS ((cpp_reader *)); + +/* Utility routines and macros. */ +#define DSC(str) (const U_CHAR *)str, sizeof str - 1 +#define xnew(T) (T *) xmalloc (sizeof(T)) +#define xcnew(T) (T *) xcalloc (1, sizeof(T)) +#define xnewvec(T, N) (T *) xmalloc (sizeof(T) * (N)) +#define xcnewvec(T, N) (T *) xcalloc (N, sizeof(T)) +#define xobnew(O, T) (T *) obstack_alloc (O, sizeof(T)) + +/* These are inline functions instead of macros so we can get type + checking. */ +typedef unsigned char U_CHAR; +#define U (const U_CHAR *) /* Intended use: U"string" */ + +static inline int ustrcmp PARAMS ((const U_CHAR *, const U_CHAR *)); +static inline int ustrncmp PARAMS ((const U_CHAR *, const U_CHAR *, + size_t)); +static inline size_t ustrlen PARAMS ((const U_CHAR *)); +static inline U_CHAR *uxstrdup PARAMS ((const U_CHAR *)); +static inline U_CHAR *ustrchr PARAMS ((const U_CHAR *, int)); +static inline int ufputs PARAMS ((const U_CHAR *, FILE *)); + +static inline int +ustrcmp (s1, s2) + const U_CHAR *s1, *s2; +{ + return strcmp ((const char *)s1, (const char *)s2); +} + +static inline int +ustrncmp (s1, s2, n) + const U_CHAR *s1, *s2; + size_t n; +{ + return strncmp ((const char *)s1, (const char *)s2, n); +} + +static inline size_t +ustrlen (s1) + const U_CHAR *s1; +{ + return strlen ((const char *)s1); +} + +static inline U_CHAR * +uxstrdup (s1) + const U_CHAR *s1; +{ + return (U_CHAR *) xstrdup ((const char *)s1); +} + +static inline U_CHAR * +ustrchr (s1, c) + const U_CHAR *s1; + int c; +{ + return (U_CHAR *) strchr ((const char *)s1, c); +} + +static inline int +ufputs (s, f) + const U_CHAR *s; + FILE *f; +{ + return fputs ((const char *)s, f); +} + +#endif /* ! GCC_CPPHASH_H */ diff --git a/src/mkutil/cpp/cpphash.obj b/src/mkutil/cpp/cpphash.obj new file mode 100644 index 0000000000000000000000000000000000000000..2e7d1f1951b1f88a0cdf6129917e57872dfa1604 GIT binary patch literal 12790 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/cpp/cppinit.c b/src/mkutil/cpp/cppinit.c new file mode 100644 index 00000000..8d7fc1a5 --- /dev/null +++ b/src/mkutil/cpp/cppinit.c @@ -0,0 +1,2014 @@ +/* CPP Library. + Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Contributed by Per Bothner, 1994-95. + Based on CCCP program by Paul Rubin, June 1986 + Adapted to ANSI C, Richard Stallman, Jan 1987 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include "config.h" +#include "system.h" +#include "cpplib.h" +#include "cpphash.h" +#include "prefix.h" +#include "intl.h" +#include "version.h" +#include "mkdeps.h" +#include "cppdefault.h" +#include "except.h" /* for USING_SJLJ_EXCEPTIONS */ + +/* Predefined symbols, built-in macros, and the default include path. */ + +#ifndef GET_ENV_PATH_LIST +#define GET_ENV_PATH_LIST(VAR,NAME) do { (VAR) = getenv (NAME); } while (0) +#endif + +/* Windows does not natively support inodes, and neither does MSDOS. + Cygwin's emulation can generate non-unique inodes, so don't use it. + VMS has non-numeric inodes. */ +#ifdef VMS +# define INO_T_EQ(A, B) (!memcmp (&(A), &(B), sizeof (A))) +# define INO_T_COPY(DEST, SRC) memcpy(&(DEST), &(SRC), sizeof (SRC)) +#else +# if (defined _WIN32 && ! defined (_UWIN)) || defined __MSDOS__ +# define INO_T_EQ(A, B) 0 +# else +# define INO_T_EQ(A, B) ((A) == (B)) +# endif +# define INO_T_COPY(DEST, SRC) (DEST) = (SRC) +#endif + +/* Internal structures and prototypes. */ + +/* A `struct pending_option' remembers one -D, -A, -U, -include, or + -imacros switch. */ +typedef void (* cl_directive_handler) PARAMS ((cpp_reader *, const char *)); +struct pending_option +{ + struct pending_option *next; + const char *arg; + cl_directive_handler handler; +}; + +/* The `pending' structure accumulates all the options that are not + actually processed until we hit cpp_read_main_file. It consists of + several lists, one for each type of option. We keep both head and + tail pointers for quick insertion. */ +struct cpp_pending +{ + struct pending_option *directive_head, *directive_tail; + + struct search_path *quote_head, *quote_tail; + struct search_path *brack_head, *brack_tail; + struct search_path *systm_head, *systm_tail; + struct search_path *after_head, *after_tail; + + struct pending_option *imacros_head, *imacros_tail; + struct pending_option *include_head, *include_tail; +}; + +#if 1 /* Nick def __STDC__ */ +#define APPEND(pend, list, elt) \ + do { if (!(pend)->list##_head) (pend)->list##_head = (elt); \ + else (pend)->list##_tail->next = (elt); \ + (pend)->list##_tail = (elt); \ + } while (0) +#else +#define APPEND(pend, list, elt) \ + do { if (!(pend)->list/**/_head) (pend)->list/**/_head = (elt); \ + else (pend)->list/**/_tail->next = (elt); \ + (pend)->list/**/_tail = (elt); \ + } while (0) +#endif + +static void print_help PARAMS ((void)); +static void path_include PARAMS ((cpp_reader *, + char *, int)); +static void init_library PARAMS ((void)); +static void init_builtins PARAMS ((cpp_reader *)); +static void mark_named_operators PARAMS ((cpp_reader *)); +static void append_include_chain PARAMS ((cpp_reader *, + char *, int, int)); +static struct search_path * remove_dup_dir PARAMS ((cpp_reader *, + struct search_path *)); +static struct search_path * remove_dup_dirs PARAMS ((cpp_reader *, + struct search_path *)); +static void merge_include_chains PARAMS ((cpp_reader *)); +static bool push_include PARAMS ((cpp_reader *, + struct pending_option *)); +static void free_chain PARAMS ((struct pending_option *)); +static void set_lang PARAMS ((cpp_reader *, enum c_lang)); +static void init_dependency_output PARAMS ((cpp_reader *)); +static void init_standard_includes PARAMS ((cpp_reader *)); +static void read_original_filename PARAMS ((cpp_reader *)); +static void new_pending_directive PARAMS ((struct cpp_pending *, + const char *, + cl_directive_handler)); +static void output_deps PARAMS ((cpp_reader *)); +static int parse_option PARAMS ((const char *)); + +/* Fourth argument to append_include_chain: chain to use. + Note it's never asked to append to the quote chain. */ +enum { BRACKET = 0, SYSTEM, AFTER }; + +/* If we have designated initializers (GCC >2.7) these tables can be + initialized, constant data. Otherwise, they have to be filled in at + runtime. */ +#if HAVE_DESIGNATED_INITIALIZERS + +#define init_trigraph_map() /* Nothing. */ +#define TRIGRAPH_MAP \ +__extension__ const U_CHAR _cpp_trigraph_map[UCHAR_MAX + 1] = { + +#define END }; +#define s(p, v) [p] = v, + +#else + +#define TRIGRAPH_MAP U_CHAR _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \ + static void init_trigraph_map PARAMS ((void)) { \ + unsigned char *x = _cpp_trigraph_map; + +#define END } +#define s(p, v) x[p] = v; + +#endif + +TRIGRAPH_MAP + s('=', '#') s(')', ']') s('!', '|') + s('(', '[') s('\'', '^') s('>', '}') + s('/', '\\') s('<', '{') s('-', '~') +END + +#undef s +#undef END +#undef TRIGRAPH_MAP + +/* Given a colon-separated list of file names PATH, + add all the names to the search path for include files. */ +static void +path_include (pfile, list, path) + cpp_reader *pfile; + char *list; + int path; +{ + char *p, *q, *name; + + p = list; + + do + { + /* Find the end of this name. */ + q = p; + while (*q != 0 && *q != PATH_SEPARATOR) q++; + if (q == p) + { + /* An empty name in the path stands for the current directory. */ + name = (char *) xmalloc (2); + name[0] = '.'; + name[1] = 0; + } + else + { + /* Otherwise use the directory that is named. */ + name = (char *) xmalloc (q - p + 1); + memcpy (name, p, q - p); + name[q - p] = 0; + } + + append_include_chain (pfile, name, path, 0); + + /* Advance past this name. */ + if (*q == 0) + break; + p = q + 1; + } + while (1); +} + +/* Append DIR to include path PATH. DIR must be allocated on the + heap; this routine takes responsibility for freeing it. CXX_AWARE + is non-zero if the header contains extern "C" guards for C++, + otherwise it is zero. */ +static void +append_include_chain (pfile, dir, path, cxx_aware) + cpp_reader *pfile; + char *dir; + int path; + int cxx_aware ATTRIBUTE_UNUSED; +{ + struct cpp_pending *pend = CPP_OPTION (pfile, pending); + struct search_path *new; + struct stat st; + unsigned int len; + + if (*dir == '\0') + { + free (dir); + dir = xstrdup ("."); + } + _cpp_simplify_pathname (dir); + + if (stat (dir, &st)) + { + /* Dirs that don't exist are silently ignored. */ + if (errno != ENOENT) + cpp_notice_from_errno (pfile, dir); + else if (CPP_OPTION (pfile, verbose)) + fprintf (stderr, _("ignoring nonexistent directory \"%s\"\n"), dir); + free (dir); + return; + } + + if (!S_ISDIR (st.st_mode)) + { + cpp_notice (pfile, "%s: Not a directory", dir); + free (dir); + return; + } + + len = strlen (dir); + if (len > pfile->max_include_len) + pfile->max_include_len = len; + + new = (struct search_path *) xmalloc (sizeof (struct search_path)); + new->name = dir; + new->len = len; + INO_T_COPY (new->ino, st.st_ino); + new->dev = st.st_dev; + /* Both systm and after include file lists should be treated as system + include files since these two lists are really just a concatenation + of one "system" list. */ + if (path == SYSTEM || path == AFTER) +#ifdef NO_IMPLICIT_EXTERN_C + new->sysp = 1; +#else + new->sysp = cxx_aware ? 1 : 2; +#endif + else + new->sysp = 0; + new->name_map = NULL; + new->next = NULL; + + switch (path) + { + case BRACKET: APPEND (pend, brack, new); break; + case SYSTEM: APPEND (pend, systm, new); break; + case AFTER: APPEND (pend, after, new); break; + } +} + +/* Handle a duplicated include path. PREV is the link in the chain + before the duplicate. The duplicate is removed from the chain and + freed. Returns PREV. */ +static struct search_path * +remove_dup_dir (pfile, prev) + cpp_reader *pfile; + struct search_path *prev; +{ + struct search_path *cur = prev->next; + + if (CPP_OPTION (pfile, verbose)) + fprintf (stderr, _("ignoring duplicate directory \"%s\"\n"), cur->name); + + prev->next = cur->next; + free ((PTR) cur->name); + free (cur); + + return prev; +} + +/* Remove duplicate directories from a chain. Returns the tail of the + chain, or NULL if the chain is empty. This algorithm is quadratic + in the number of -I switches, which is acceptable since there + aren't usually that many of them. */ +static struct search_path * +remove_dup_dirs (pfile, head) + cpp_reader *pfile; + struct search_path *head; +{ + struct search_path *prev = NULL, *cur, *other; + + for (cur = head; cur; cur = cur->next) + { + for (other = head; other != cur; other = other->next) + if (INO_T_EQ (cur->ino, other->ino) && cur->dev == other->dev) + { + if (cur->sysp && !other->sysp) + { + cpp_warning (pfile, + "changing search order for system directory \"%s\"", + cur->name); + if (strcmp (cur->name, other->name)) + cpp_warning (pfile, + " as it is the same as non-system directory \"%s\"", + other->name); + else + cpp_warning (pfile, + " as it has already been specified as a non-system directory"); + } + cur = remove_dup_dir (pfile, prev); + break; + } + prev = cur; + } + + return prev; +} + +/* Merge the four include chains together in the order quote, bracket, + system, after. Remove duplicate dirs (as determined by + INO_T_EQ()). The system_include and after_include chains are never + referred to again after this function; all access is through the + bracket_include path. */ +static void +merge_include_chains (pfile) + cpp_reader *pfile; +{ + struct search_path *quote, *brack, *systm, *qtail; + + struct cpp_pending *pend = CPP_OPTION (pfile, pending); + + quote = pend->quote_head; + brack = pend->brack_head; + systm = pend->systm_head; + qtail = pend->quote_tail; + + /* Paste together bracket, system, and after include chains. */ + if (systm) + pend->systm_tail->next = pend->after_head; + else + systm = pend->after_head; + + if (brack) + pend->brack_tail->next = systm; + else + brack = systm; + + /* This is a bit tricky. First we drop dupes from the quote-include + list. Then we drop dupes from the bracket-include list. + Finally, if qtail and brack are the same directory, we cut out + brack and move brack up to point to qtail. + + We can't just merge the lists and then uniquify them because + then we may lose directories from the <> search path that should + be there; consider -Ifoo -Ibar -I- -Ifoo -Iquux. It is however + safe to treat -Ibar -Ifoo -I- -Ifoo -Iquux as if written + -Ibar -I- -Ifoo -Iquux. */ + + remove_dup_dirs (pfile, brack); + qtail = remove_dup_dirs (pfile, quote); + + if (quote) + { + qtail->next = brack; + + /* If brack == qtail, remove brack as it's simpler. */ + if (brack && INO_T_EQ (qtail->ino, brack->ino) + && qtail->dev == brack->dev) + brack = remove_dup_dir (pfile, qtail); + } + else + quote = brack; + + CPP_OPTION (pfile, quote_include) = quote; + CPP_OPTION (pfile, bracket_include) = brack; +} + +/* A set of booleans indicating what CPP features each source language + requires. */ +struct lang_flags +{ + char c99; + char objc; + char cplusplus; + char extended_numbers; + char trigraphs; + char dollars_in_ident; + char cplusplus_comments; + char digraphs; +}; + +/* ??? Enable $ in identifiers in assembly? */ +static const struct lang_flags lang_defaults[] = +{ /* c99 objc c++ xnum trig dollar c++comm digr */ + /* GNUC89 */ { 0, 0, 0, 1, 0, 1, 1, 1 }, + /* GNUC99 */ { 1, 0, 0, 1, 0, 1, 1, 1 }, + /* STDC89 */ { 0, 0, 0, 0, 1, 0, 0, 0 }, + /* STDC94 */ { 0, 0, 0, 0, 1, 0, 0, 1 }, + /* STDC99 */ { 1, 0, 0, 1, 1, 0, 1, 1 }, + /* GNUCXX */ { 0, 0, 1, 1, 0, 1, 1, 1 }, + /* CXX98 */ { 0, 0, 1, 1, 1, 0, 1, 1 }, + /* OBJC */ { 0, 1, 0, 1, 0, 1, 1, 1 }, + /* OBJCXX */ { 0, 1, 1, 1, 0, 1, 1, 1 }, + /* ASM */ { 0, 0, 0, 1, 0, 0, 1, 0 } +}; + +/* Sets internal flags correctly for a given language. */ +static void +set_lang (pfile, lang) + cpp_reader *pfile; + enum c_lang lang; +{ + const struct lang_flags *l = &lang_defaults[(int) lang]; + + CPP_OPTION (pfile, lang) = lang; + + CPP_OPTION (pfile, c99) = l->c99; + CPP_OPTION (pfile, objc) = l->objc; + CPP_OPTION (pfile, cplusplus) = l->cplusplus; + CPP_OPTION (pfile, extended_numbers) = l->extended_numbers; + CPP_OPTION (pfile, trigraphs) = l->trigraphs; + CPP_OPTION (pfile, dollars_in_ident) = l->dollars_in_ident; + CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments; + CPP_OPTION (pfile, digraphs) = l->digraphs; +} + +#ifdef HOST_EBCDIC +static int opt_comp PARAMS ((const void *, const void *)); + +/* Run-time sorting of options array. */ +static int +opt_comp (p1, p2) + const void *p1, *p2; +{ + return strcmp (((struct cl_option *) p1)->opt_text, + ((struct cl_option *) p2)->opt_text); +} +#endif + +/* init initializes library global state. It might not need to + do anything depending on the platform and compiler. */ +static void +init_library () +{ + static int initialized = 0; + + if (! initialized) + { + initialized = 1; + +#ifdef HOST_EBCDIC + /* For non-ASCII hosts, the cl_options array needs to be sorted at + runtime. */ + qsort (cl_options, N_OPTS, sizeof (struct cl_option), opt_comp); +#endif + + /* Set up the trigraph map. This doesn't need to do anything if + we were compiled with a compiler that supports C99 designated + initializers. */ + init_trigraph_map (); + } +} + +/* Initialize a cpp_reader structure. */ +cpp_reader * +cpp_create_reader (lang) + enum c_lang lang; +{ + cpp_reader *pfile; + + /* Initialise this instance of the library if it hasn't been already. */ + init_library (); + + pfile = (cpp_reader *) xcalloc (1, sizeof (cpp_reader)); + + set_lang (pfile, lang); + CPP_OPTION (pfile, warn_import) = 1; + CPP_OPTION (pfile, discard_comments) = 1; + CPP_OPTION (pfile, show_column) = 1; + CPP_OPTION (pfile, tabstop) = 8; + CPP_OPTION (pfile, operator_names) = 1; +#if DEFAULT_SIGNED_CHAR + CPP_OPTION (pfile, signed_char) = 1; +#else + CPP_OPTION (pfile, signed_char) = 0; +#endif + + CPP_OPTION (pfile, pending) = + (struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending)); + + /* It's simplest to just create this struct whether or not it will + be needed. */ + pfile->deps = deps_init (); + + /* Initialise the line map. Start at logical line 1, so we can use + a line number of zero for special states. */ + init_line_maps (&pfile->line_maps); + pfile->line = 1; + + /* Initialize lexer state. */ + pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments); + + /* Set up static tokens. */ + pfile->date.type = CPP_EOF; + pfile->avoid_paste.type = CPP_PADDING; + pfile->avoid_paste.val.source = NULL; + pfile->eof.type = CPP_EOF; + pfile->eof.flags = 0; + + /* Create a token buffer for the lexer. */ + _cpp_init_tokenrun (&pfile->base_run, 250); + pfile->cur_run = &pfile->base_run; + pfile->cur_token = pfile->base_run.base; + + /* Initialise the base context. */ + pfile->context = &pfile->base_context; + pfile->base_context.macro = 0; + pfile->base_context.prev = pfile->base_context.next = 0; + + /* Aligned and unaligned storage. */ + pfile->a_buff = _cpp_get_buff (pfile, 0); + pfile->u_buff = _cpp_get_buff (pfile, 0); + + /* Initialise the buffer obstack. */ + gcc_obstack_init (&pfile->buffer_ob); + + _cpp_init_includes (pfile); + + return pfile; +} + +/* Free resources used by PFILE. Accessing PFILE after this function + returns leads to undefined behaviour. Returns the error count. */ +int +cpp_destroy (pfile) + cpp_reader *pfile; +{ + int result; + struct search_path *dir, *dirn; + cpp_context *context, *contextn; + tokenrun *run, *runn; + + while (CPP_BUFFER (pfile) != NULL) + _cpp_pop_buffer (pfile); + + if (pfile->macro_buffer) + { + free ((PTR) pfile->macro_buffer); + pfile->macro_buffer = NULL; + pfile->macro_buffer_len = 0; + } + + deps_free (pfile->deps); + obstack_free (&pfile->buffer_ob, 0); + + _cpp_destroy_hashtable (pfile); + _cpp_cleanup_includes (pfile); + + _cpp_free_buff (pfile->a_buff); + _cpp_free_buff (pfile->u_buff); + _cpp_free_buff (pfile->free_buffs); + + for (run = &pfile->base_run; run; run = runn) + { + runn = run->next; + free (run->base); + if (run != &pfile->base_run) + free (run); + } + + for (dir = CPP_OPTION (pfile, quote_include); dir; dir = dirn) + { + dirn = dir->next; + free ((PTR) dir->name); + free (dir); + } + + for (context = pfile->base_context.next; context; context = contextn) + { + contextn = context->next; + free (context); + } + + free_line_maps (&pfile->line_maps); + + result = pfile->errors; + free (pfile); + + return result; +} + + +/* This structure defines one built-in identifier. A node will be + entered in the hash table under the name NAME, with value VALUE (if + any). If flags has OPERATOR, the node's operator field is used; if + flags has BUILTIN the node's builtin field is used. Macros that are + known at build time should not be flagged BUILTIN, as then they do + not appear in macro dumps with e.g. -dM or -dD. + + Two values are not compile time constants, so we tag + them in the FLAGS field instead: + VERS value is the global version_string, quoted + ULP value is the global user_label_prefix */ +struct builtin +{ + const U_CHAR *name; + const char *value; + unsigned char builtin; + unsigned short flags; + unsigned short len; +}; +#define VERS 0x01 +#define ULP 0x02 +#define BUILTIN 0x08 + +#define B(n, t) { U n, 0, t, BUILTIN, sizeof n - 1 } +#define C(n, v) { U n, v, 0, 0, sizeof n - 1 } +#define X(n, f) { U n, 0, 0, f, sizeof n - 1 } +static const struct builtin builtin_array[] = +{ + B("__TIME__", BT_TIME), + B("__DATE__", BT_DATE), + B("__FILE__", BT_FILE), + B("__BASE_FILE__", BT_BASE_FILE), + B("__LINE__", BT_SPECLINE), + B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL), + B("_Pragma", BT_PRAGMA), + + X("__VERSION__", VERS), + X("__USER_LABEL_PREFIX__", ULP), + C("__REGISTER_PREFIX__", REGISTER_PREFIX), + C("__HAVE_BUILTIN_SETJMP__", "1"), +#if USING_SJLJ_EXCEPTIONS + /* libgcc needs to know this. */ + C("__USING_SJLJ_EXCEPTIONS__","1"), +#endif +#ifndef NO_BUILTIN_SIZE_TYPE + C("__SIZE_TYPE__", SIZE_TYPE), +#endif +#ifndef NO_BUILTIN_PTRDIFF_TYPE + C("__PTRDIFF_TYPE__", PTRDIFF_TYPE), +#endif +#ifndef NO_BUILTIN_WCHAR_TYPE + C("__WCHAR_TYPE__", WCHAR_TYPE), +#endif +#ifndef NO_BUILTIN_WINT_TYPE + C("__WINT_TYPE__", WINT_TYPE), +#endif +#ifdef STDC_0_IN_SYSTEM_HEADERS + B("__STDC__", BT_STDC), +#else + C("__STDC__", "1"), +#endif +}; +#undef B +#undef C +#undef X +#define builtin_array_end \ + builtin_array + sizeof(builtin_array)/sizeof(struct builtin) + +/* Named operators known to the preprocessor. These cannot be + #defined and always have their stated meaning. They are treated + like normal identifiers except for the type code and the meaning. + Most of them are only for C++ (but see iso646.h). */ +#define B(n, t) { DSC(n), t } +static const struct named_op +{ + const U_CHAR *name; + unsigned int len; + enum cpp_ttype value; +} operator_array[] = { + B("and", CPP_AND_AND), + B("and_eq", CPP_AND_EQ), + B("bitand", CPP_AND), + B("bitor", CPP_OR), + B("compl", CPP_COMPL), + B("not", CPP_NOT), + B("not_eq", CPP_NOT_EQ), + B("or", CPP_OR_OR), + B("or_eq", CPP_OR_EQ), + B("xor", CPP_XOR), + B("xor_eq", CPP_XOR_EQ) +}; +#undef B + +/* Mark the C++ named operators in the hash table. */ +static void +mark_named_operators (pfile) + cpp_reader *pfile; +{ + const struct named_op *b; + + for (b = operator_array; + b < (operator_array + ARRAY_SIZE (operator_array)); + b++) + { + cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len); + hp->flags |= NODE_OPERATOR; + hp->value.operator = b->value; + } +} + +/* Subroutine of cpp_read_main_file; reads the builtins table above and + enters them, and language-specific macros, into the hash table. */ +static void +init_builtins (pfile) + cpp_reader *pfile; +{ + const struct builtin *b; + + for(b = builtin_array; b < builtin_array_end; b++) + { + if (b->flags & BUILTIN) + { + cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len); + hp->type = NT_MACRO; + hp->flags |= NODE_BUILTIN | NODE_WARN; + hp->value.builtin = b->builtin; + } + else /* A standard macro of some kind. */ + { + const char *val; + char *str; + + if (b->flags & VERS) + { + /* Allocate enough space for 'name "value"\n\0'. */ + str = alloca (b->len + strlen (version_string) + 5); + sprintf (str, "%s \"%s\"\n", b->name, version_string); + } + else + { + if (b->flags & ULP) + val = CPP_OPTION (pfile, user_label_prefix); + else + val = b->value; + + /* Allocate enough space for "name value\n\0". */ + str = alloca (b->len + strlen (val) + 3); + sprintf(str, "%s %s\n", b->name, val); + } + + _cpp_define_builtin (pfile, str); + } + } + + if (CPP_OPTION (pfile, cplusplus)) + { + _cpp_define_builtin (pfile, "__cplusplus 1"); + if (SUPPORTS_ONE_ONLY) + _cpp_define_builtin (pfile, "__GXX_WEAK__ 1"); + else + _cpp_define_builtin (pfile, "__GXX_WEAK__ 0"); + } + if (CPP_OPTION (pfile, objc)) + _cpp_define_builtin (pfile, "__OBJC__ 1"); + + if (CPP_OPTION (pfile, lang) == CLK_STDC94) + _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L"); + else if (CPP_OPTION (pfile, c99)) + _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L"); + + if (CPP_OPTION (pfile, signed_char) == 0) + _cpp_define_builtin (pfile, "__CHAR_UNSIGNED__ 1"); + + if (CPP_OPTION (pfile, lang) == CLK_STDC89 + || CPP_OPTION (pfile, lang) == CLK_STDC94 + || CPP_OPTION (pfile, lang) == CLK_STDC99) + _cpp_define_builtin (pfile, "__STRICT_ANSI__ 1"); + else if (CPP_OPTION (pfile, lang) == CLK_ASM) + _cpp_define_builtin (pfile, "__ASSEMBLER__ 1"); +} +#undef BUILTIN +#undef OPERATOR +#undef VERS +#undef ULP +#undef builtin_array_end + +/* And another subroutine. This one sets up the standard include path. */ +static void +init_standard_includes (pfile) + cpp_reader *pfile; +{ + char *path; + const struct default_include *p; + const char *specd_prefix = CPP_OPTION (pfile, include_prefix); + + /* Several environment variables may add to the include search path. + CPATH specifies an additional list of directories to be searched + as if specified with -I, while C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, + etc. specify an additional list of directories to be searched as + if specified with -isystem, for the language indicated. */ + + GET_ENV_PATH_LIST (path, "CPATH"); + if (path != 0 && *path != 0) + path_include (pfile, path, BRACKET); + + switch ((CPP_OPTION (pfile, objc) << 1) + CPP_OPTION (pfile, cplusplus)) + { + case 0: + GET_ENV_PATH_LIST (path, "C_INCLUDE_PATH"); + break; + case 1: + GET_ENV_PATH_LIST (path, "CPLUS_INCLUDE_PATH"); + break; + case 2: + GET_ENV_PATH_LIST (path, "OBJC_INCLUDE_PATH"); + break; + case 3: + GET_ENV_PATH_LIST (path, "OBJCPLUS_INCLUDE_PATH"); + break; + } + if (path != 0 && *path != 0) + path_include (pfile, path, SYSTEM); + + /* Search "translated" versions of GNU directories. + These have /usr/local/lib/gcc... replaced by specd_prefix. */ + if (specd_prefix != 0 && cpp_GCC_INCLUDE_DIR_len) + { + /* Remove the `include' from /usr/local/lib/gcc.../include. + GCC_INCLUDE_DIR will always end in /include. */ + int default_len = cpp_GCC_INCLUDE_DIR_len; + char *default_prefix = (char *) alloca (default_len + 1); + int specd_len = strlen (specd_prefix); + + memcpy (default_prefix, cpp_GCC_INCLUDE_DIR, default_len); + default_prefix[default_len] = '\0'; + + for (p = cpp_include_defaults; p->fname; p++) + { + /* Some standard dirs are only for C++. */ + if (!p->cplusplus + || (CPP_OPTION (pfile, cplusplus) + && !CPP_OPTION (pfile, no_standard_cplusplus_includes))) + { + /* Does this dir start with the prefix? */ + if (!memcmp (p->fname, default_prefix, default_len)) + { + /* Yes; change prefix and add to search list. */ + int flen = strlen (p->fname); + int this_len = specd_len + flen - default_len; + char *str = (char *) xmalloc (this_len + 1); + memcpy (str, specd_prefix, specd_len); + memcpy (str + specd_len, + p->fname + default_len, + flen - default_len + 1); + + append_include_chain (pfile, str, SYSTEM, p->cxx_aware); + } + } + } + } + + /* Search ordinary names for GNU include directories. */ + for (p = cpp_include_defaults; p->fname; p++) + { + /* Some standard dirs are only for C++. */ + if (!p->cplusplus + || (CPP_OPTION (pfile, cplusplus) + && !CPP_OPTION (pfile, no_standard_cplusplus_includes))) + { + char *str = update_path (p->fname, p->component); + append_include_chain (pfile, str, SYSTEM, p->cxx_aware); + } + } +} + +/* Pushes a command line -imacro and -include file indicated by P onto + the buffer stack. Returns non-zero if successful. */ +static bool +push_include (pfile, p) + cpp_reader *pfile; + struct pending_option *p; +{ + cpp_token header; + + /* Later: maybe update this to use the #include "" search path + if cpp_read_file fails. */ + header.type = CPP_STRING; + header.val.str.text = (const unsigned char *) p->arg; + header.val.str.len = strlen (p->arg); + /* Make the command line directive take up a line. */ + pfile->line++; + + return _cpp_execute_include (pfile, &header, IT_CMDLINE); +} + +/* Frees a pending_option chain. */ +static void +free_chain (head) + struct pending_option *head; +{ + struct pending_option *next; + + while (head) + { + next = head->next; + free (head); + head = next; + } +} + +/* This is called after options have been parsed, and partially + processed. Setup for processing input from the file named FNAME, + or stdin if it is the empty string. Return the original filename + on success (e.g. foo.i->foo.c), or NULL on failure. */ +const char * +cpp_read_main_file (pfile, fname, table) + cpp_reader *pfile; + const char *fname; + hash_table *table; +{ + /* The front ends don't set up the hash table until they have + finished processing the command line options, so initializing the + hashtable is deferred until now. */ + _cpp_init_hashtable (pfile, table); + + /* Set up the include search path now. */ + if (! CPP_OPTION (pfile, no_standard_includes)) + init_standard_includes (pfile); + + merge_include_chains (pfile); + + /* With -v, print the list of dirs to search. */ + if (CPP_OPTION (pfile, verbose)) + { + struct search_path *l; + fprintf (stderr, _("#include \"...\" search starts here:\n")); + for (l = CPP_OPTION (pfile, quote_include); l; l = l->next) + { + if (l == CPP_OPTION (pfile, bracket_include)) + fprintf (stderr, _("#include <...> search starts here:\n")); + fprintf (stderr, " %s\n", l->name); + } + fprintf (stderr, _("End of search list.\n")); + } + + if (CPP_OPTION (pfile, print_deps)) + /* Set the default target (if there is none already). */ + deps_add_default_target (pfile->deps, fname); + + /* Open the main input file. */ + if (!_cpp_read_file (pfile, fname)) + return NULL; + + /* Set this after cpp_post_options so the client can change the + option if it wishes, and after stacking the main file so we don't + trace the main file. */ + pfile->line_maps.trace_includes = CPP_OPTION (pfile, print_include_names); + + /* For foo.i, read the original filename foo.c now, for the benefit + of the front ends. */ + if (CPP_OPTION (pfile, preprocessed)) + read_original_filename (pfile); + + return pfile->map->to_file; +} + +/* For preprocessed files, if the first tokens are of the form # NUM. + handle the directive so we know the original file name. This will + generate file_change callbacks, which the front ends must handle + appropriately given their state of initialization. */ +static void +read_original_filename (pfile) + cpp_reader *pfile; +{ + const cpp_token *token, *token1; + + /* Lex ahead; if the first tokens are of the form # NUM, then + process the directive, otherwise back up. */ + token = _cpp_lex_direct (pfile); + if (token->type == CPP_HASH) + { + token1 = _cpp_lex_direct (pfile); + _cpp_backup_tokens (pfile, 1); + + /* If it's a #line directive, handle it. */ + if (token1->type == CPP_NUMBER) + { + _cpp_handle_directive (pfile, token->flags & PREV_WHITE); + return; + } + } + + /* Backup as if nothing happened. */ + _cpp_backup_tokens (pfile, 1); +} + +/* Handle pending command line options: -D, -U, -A, -imacros and + -include. This should be called after debugging has been properly + set up in the front ends. */ +void +cpp_finish_options (pfile) + cpp_reader *pfile; +{ + /* Mark named operators before handling command line macros. */ + if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names)) + mark_named_operators (pfile); + + /* Install builtins and process command line macros etc. in the order + they appeared, but only if not already preprocessed. */ + if (! CPP_OPTION (pfile, preprocessed)) + { + struct pending_option *p; + + _cpp_do_file_change (pfile, LC_RENAME, _(""), 1, 0); + init_builtins (pfile); + _cpp_do_file_change (pfile, LC_RENAME, _(""), 1, 0); + for (p = CPP_OPTION (pfile, pending)->directive_head; p; p = p->next) + (*p->handler) (pfile, p->arg); + + /* Scan -imacros files after command line defines, but before + files given with -include. */ + while ((p = CPP_OPTION (pfile, pending)->imacros_head) != NULL) + { + if (push_include (pfile, p)) + { + pfile->buffer->return_at_eof = true; + cpp_scan_nooutput (pfile); + } + CPP_OPTION (pfile, pending)->imacros_head = p->next; + free (p); + } + } + + free_chain (CPP_OPTION (pfile, pending)->directive_head); + _cpp_push_next_buffer (pfile); +} + +/* Called to push the next buffer on the stack given by -include. If + there are none, free the pending structure and restore the line map + for the main file. */ +bool +_cpp_push_next_buffer (pfile) + cpp_reader *pfile; +{ + bool pushed = false; + + /* This is't pretty; we'd rather not be relying on this as a boolean + for reverting the line map. Further, we only free the chains in + this conditional, so an early call to cpp_finish / cpp_destroy + will leak that memory. */ + if (CPP_OPTION (pfile, pending) + && CPP_OPTION (pfile, pending)->imacros_head == NULL) + { + while (!pushed) + { + struct pending_option *p = CPP_OPTION (pfile, pending)->include_head; + + if (p == NULL) + break; + if (! CPP_OPTION (pfile, preprocessed)) + pushed = push_include (pfile, p); + CPP_OPTION (pfile, pending)->include_head = p->next; + free (p); + } + + if (!pushed) + { + free (CPP_OPTION (pfile, pending)); + CPP_OPTION (pfile, pending) = NULL; + + /* Restore the line map for the main file. */ + if (! CPP_OPTION (pfile, preprocessed)) + _cpp_do_file_change (pfile, LC_RENAME, + pfile->line_maps.maps[0].to_file, 1, 0); + } + } + + return pushed; +} + +/* Use mkdeps.c to output dependency information. */ +static void +output_deps (pfile) + cpp_reader *pfile; +{ + /* Stream on which to print the dependency information. */ + FILE *deps_stream = 0; + const char *const deps_mode = + CPP_OPTION (pfile, print_deps_append) ? "a" : "w"; + + if (CPP_OPTION (pfile, deps_file)[0] == '\0') + deps_stream = stdout; + else + { + deps_stream = fopen (CPP_OPTION (pfile, deps_file), deps_mode); + if (deps_stream == 0) + { + cpp_notice_from_errno (pfile, CPP_OPTION (pfile, deps_file)); + return; + } + } + + deps_write (pfile->deps, deps_stream, 72); + + if (CPP_OPTION (pfile, deps_phony_targets)) + deps_phony_targets (pfile->deps, deps_stream); + + /* Don't close stdout. */ + if (deps_stream != stdout) + { + if (ferror (deps_stream) || fclose (deps_stream) != 0) + cpp_fatal (pfile, "I/O error on output"); + } +} + +/* This is called at the end of preprocessing. It pops the + last buffer and writes dependency output. It should also + clear macro definitions, such that you could call cpp_start_read + with a new filename to restart processing. */ +void +cpp_finish (pfile) + cpp_reader *pfile; +{ + /* cpplex.c leaves the final buffer on the stack. This it so that + it returns an unending stream of CPP_EOFs to the client. If we + popped the buffer, we'd dereference a NULL buffer pointer and + segfault. It's nice to allow the client to do worry-free excess + cpp_get_token calls. */ + while (pfile->buffer) + _cpp_pop_buffer (pfile); + + /* Don't write the deps file if preprocessing has failed. */ + if (CPP_OPTION (pfile, print_deps) && pfile->errors == 0) + output_deps (pfile); + + /* Report on headers that could use multiple include guards. */ + if (CPP_OPTION (pfile, print_include_names)) + _cpp_report_missing_guards (pfile); +} + +/* Add a directive to be handled later in the initialization phase. */ +static void +new_pending_directive (pend, text, handler) + struct cpp_pending *pend; + const char *text; + cl_directive_handler handler; +{ + struct pending_option *o = (struct pending_option *) + xmalloc (sizeof (struct pending_option)); + + o->arg = text; + o->next = NULL; + o->handler = handler; + APPEND (pend, directive, o); +} + +/* Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); + I.e. a const string initializer with parens around it. That is + what N_("string") resolves to, so we make no_* be macros instead. */ +#define no_arg N_("argument missing after %s") +#define no_ass N_("assertion missing after %s") +#define no_dir N_("directory name missing after %s") +#define no_fil N_("file name missing after %s") +#define no_mac N_("macro name missing after %s") +#define no_pth N_("path name missing after %s") +#define no_num N_("number missing after %s") +#define no_tgt N_("target missing after %s") + +/* This is the list of all command line options, with the leading + "-" removed. It must be sorted in ASCII collating order. */ +#define COMMAND_LINE_OPTIONS \ + DEF_OPT("$", 0, OPT_dollar) \ + DEF_OPT("+", 0, OPT_plus) \ + DEF_OPT("-help", 0, OPT__help) \ + DEF_OPT("-target-help", 0, OPT_target__help) \ + DEF_OPT("-version", 0, OPT__version) \ + DEF_OPT("A", no_ass, OPT_A) \ + DEF_OPT("C", 0, OPT_C) \ + DEF_OPT("D", no_mac, OPT_D) \ + DEF_OPT("H", 0, OPT_H) \ + DEF_OPT("I", no_dir, OPT_I) \ + DEF_OPT("M", 0, OPT_M) \ + DEF_OPT("MD", no_fil, OPT_MD) \ + DEF_OPT("MF", no_fil, OPT_MF) \ + DEF_OPT("MG", 0, OPT_MG) \ + DEF_OPT("MM", 0, OPT_MM) \ + DEF_OPT("MMD", no_fil, OPT_MMD) \ + DEF_OPT("MP", 0, OPT_MP) \ + DEF_OPT("MQ", no_tgt, OPT_MQ) \ + DEF_OPT("MT", no_tgt, OPT_MT) \ + DEF_OPT("P", 0, OPT_P) \ + DEF_OPT("U", no_mac, OPT_U) \ + DEF_OPT("W", no_arg, OPT_W) /* arg optional */ \ + DEF_OPT("d", no_arg, OPT_d) \ + DEF_OPT("fleading-underscore", 0, OPT_fleading_underscore) \ + DEF_OPT("fno-leading-underscore", 0, OPT_fno_leading_underscore) \ + DEF_OPT("fno-operator-names", 0, OPT_fno_operator_names) \ + DEF_OPT("fno-preprocessed", 0, OPT_fno_preprocessed) \ + DEF_OPT("fno-show-column", 0, OPT_fno_show_column) \ + DEF_OPT("fpreprocessed", 0, OPT_fpreprocessed) \ + DEF_OPT("fshow-column", 0, OPT_fshow_column) \ + DEF_OPT("fsigned-char", 0, OPT_fsigned_char) \ + DEF_OPT("ftabstop=", no_num, OPT_ftabstop) \ + DEF_OPT("funsigned-char", 0, OPT_funsigned_char) \ + DEF_OPT("h", 0, OPT_h) \ + DEF_OPT("idirafter", no_dir, OPT_idirafter) \ + DEF_OPT("imacros", no_fil, OPT_imacros) \ + DEF_OPT("include", no_fil, OPT_include) \ + DEF_OPT("iprefix", no_pth, OPT_iprefix) \ + DEF_OPT("isystem", no_dir, OPT_isystem) \ + DEF_OPT("iwithprefix", no_dir, OPT_iwithprefix) \ + DEF_OPT("iwithprefixbefore", no_dir, OPT_iwithprefixbefore) \ + DEF_OPT("lang-asm", 0, OPT_lang_asm) \ + DEF_OPT("lang-c", 0, OPT_lang_c) \ + DEF_OPT("lang-c++", 0, OPT_lang_cplusplus) \ + DEF_OPT("lang-c89", 0, OPT_lang_c89) \ + DEF_OPT("lang-objc", 0, OPT_lang_objc) \ + DEF_OPT("lang-objc++", 0, OPT_lang_objcplusplus) \ + DEF_OPT("nostdinc", 0, OPT_nostdinc) \ + DEF_OPT("nostdinc++", 0, OPT_nostdincplusplus) \ + DEF_OPT("o", no_fil, OPT_o) \ + DEF_OPT("pedantic", 0, OPT_pedantic) \ + DEF_OPT("pedantic-errors", 0, OPT_pedantic_errors) \ + DEF_OPT("remap", 0, OPT_remap) \ + DEF_OPT("std=c++98", 0, OPT_std_cplusplus98) \ + DEF_OPT("std=c89", 0, OPT_std_c89) \ + DEF_OPT("std=c99", 0, OPT_std_c99) \ + DEF_OPT("std=c9x", 0, OPT_std_c9x) \ + DEF_OPT("std=gnu89", 0, OPT_std_gnu89) \ + DEF_OPT("std=gnu99", 0, OPT_std_gnu99) \ + DEF_OPT("std=gnu9x", 0, OPT_std_gnu9x) \ + DEF_OPT("std=iso9899:1990", 0, OPT_std_iso9899_1990) \ + DEF_OPT("std=iso9899:199409", 0, OPT_std_iso9899_199409) \ + DEF_OPT("std=iso9899:1999", 0, OPT_std_iso9899_1999) \ + DEF_OPT("std=iso9899:199x", 0, OPT_std_iso9899_199x) \ + DEF_OPT("trigraphs", 0, OPT_trigraphs) \ + DEF_OPT("v", 0, OPT_v) \ + DEF_OPT("version", 0, OPT_version) \ + DEF_OPT("w", 0, OPT_w) + +#define DEF_OPT(text, msg, code) code, +enum opt_code +{ + COMMAND_LINE_OPTIONS + N_OPTS +}; +#undef DEF_OPT + +struct cl_option +{ + const char *opt_text; + const char *msg; + size_t opt_len; + enum opt_code opt_code; +}; + +#define DEF_OPT(text, msg, code) { text, msg, sizeof(text) - 1, code }, +#ifdef HOST_EBCDIC +static struct cl_option cl_options[] = +#else +static const struct cl_option cl_options[] = +#endif +{ + COMMAND_LINE_OPTIONS +}; +#undef DEF_OPT +#undef COMMAND_LINE_OPTIONS + +/* Perform a binary search to find which, if any, option the given + command-line matches. Returns its index in the option array, + negative on failure. Complications arise since some options can be + suffixed with an argument, and multiple complete matches can occur, + e.g. -iwithprefix and -iwithprefixbefore. Moreover, we need to + accept options beginning with -W that we do not recognise, but not + to swallow any subsequent command line argument; this is handled as + special cases in cpp_handle_option. */ +static int +parse_option (input) + const char *input; +{ + unsigned int md, mn, mx; + size_t opt_len; + int comp; + + mn = 0; + mx = N_OPTS; + + while (mx > mn) + { + md = (mn + mx) / 2; + + opt_len = cl_options[md].opt_len; + comp = memcmp (input, cl_options[md].opt_text, opt_len); + + if (comp > 0) + mn = md + 1; + else if (comp < 0) + mx = md; + else + { + if (input[opt_len] == '\0') + return md; + /* We were passed more text. If the option takes an argument, + we may match a later option or we may have been passed the + argument. The longest possible option match succeeds. + If the option takes no arguments we have not matched and + continue the search (e.g. input="stdc++" match was "stdc"). */ + mn = md + 1; + if (cl_options[md].msg) + { + /* Scan forwards. If we get an exact match, return it. + Otherwise, return the longest option-accepting match. + This loops no more than twice with current options. */ + mx = md; + for (; mn < (unsigned int) N_OPTS; mn++) + { + opt_len = cl_options[mn].opt_len; + if (memcmp (input, cl_options[mn].opt_text, opt_len)) + break; + if (input[opt_len] == '\0') + return mn; + if (cl_options[mn].msg) + mx = mn; + } + return mx; + } + } + } + + return -1; +} + +/* Handle one command-line option in (argc, argv). + Can be called multiple times, to handle multiple sets of options. + If ignore is non-zero, this will ignore unrecognized -W* options. + Returns number of strings consumed. */ +int +cpp_handle_option (pfile, argc, argv, ignore) + cpp_reader *pfile; + int argc; + char **argv; + int ignore; +{ + int i = 0; + struct cpp_pending *pend = CPP_OPTION (pfile, pending); + + /* Interpret "-" or a non-option as a file name. */ + if (argv[i][0] != '-' || argv[i][1] == '\0') + { + if (CPP_OPTION (pfile, in_fname) == NULL) + CPP_OPTION (pfile, in_fname) = argv[i]; + else if (CPP_OPTION (pfile, out_fname) == NULL) + CPP_OPTION (pfile, out_fname) = argv[i]; + else + cpp_fatal (pfile, "too many filenames. Type %s --help for usage info", + progname); + } + else + { + enum opt_code opt_code; + int opt_index; + const char *arg = 0; + + /* Skip over '-'. */ + opt_index = parse_option (&argv[i][1]); + if (opt_index < 0) + return i; + + opt_code = cl_options[opt_index].opt_code; + if (cl_options[opt_index].msg) + { + arg = &argv[i][cl_options[opt_index].opt_len + 1]; + + /* Yuk. Special case for -W as it must not swallow + up any following argument. If this becomes common, add + another field to the cl_options table. */ + if (arg[0] == '\0' && opt_code != OPT_W) + { + arg = argv[++i]; + if (!arg) + { + cpp_fatal (pfile, cl_options[opt_index].msg, argv[i - 1]); + return argc; + } + } + } + + switch (opt_code) + { + case N_OPTS: /* Shut GCC up. */ + break; + case OPT_fleading_underscore: + CPP_OPTION (pfile, user_label_prefix) = "_"; + break; + case OPT_fno_leading_underscore: + CPP_OPTION (pfile, user_label_prefix) = ""; + break; + case OPT_fno_operator_names: + CPP_OPTION (pfile, operator_names) = 0; + break; + case OPT_fpreprocessed: + CPP_OPTION (pfile, preprocessed) = 1; + break; + case OPT_fno_preprocessed: + CPP_OPTION (pfile, preprocessed) = 0; + break; + case OPT_fshow_column: + CPP_OPTION (pfile, show_column) = 1; + break; + case OPT_fno_show_column: + CPP_OPTION (pfile, show_column) = 0; + break; + case OPT_fsigned_char: + CPP_OPTION (pfile, signed_char) = 1; + break; + case OPT_funsigned_char: + CPP_OPTION (pfile, signed_char) = 0; + break; + case OPT_ftabstop: + /* Silently ignore empty string, non-longs and silly values. */ + if (arg[0] != '\0') + { + char *endptr; + long tabstop = strtol (arg, &endptr, 10); + if (*endptr == '\0' && tabstop >= 1 && tabstop <= 100) + CPP_OPTION (pfile, tabstop) = tabstop; + } + break; + case OPT_w: + CPP_OPTION (pfile, inhibit_warnings) = 1; + break; + case OPT_h: + case OPT__help: + print_help (); + CPP_OPTION (pfile, help_only) = 1; + break; + case OPT_target__help: + /* Print if any target specific options. cpplib has none, but + make sure help_only gets set. */ + CPP_OPTION (pfile, help_only) = 1; + break; + + /* --version inhibits compilation, -version doesn't. -v means + verbose and -version. Historical reasons, don't ask. */ + case OPT__version: + CPP_OPTION (pfile, help_only) = 1; + pfile->print_version = 1; + break; + case OPT_v: + CPP_OPTION (pfile, verbose) = 1; + pfile->print_version = 1; + break; + case OPT_version: + pfile->print_version = 1; + break; + + case OPT_C: + CPP_OPTION (pfile, discard_comments) = 0; + break; + case OPT_P: + CPP_OPTION (pfile, no_line_commands) = 1; + break; + case OPT_dollar: /* Don't include $ in identifiers. */ + CPP_OPTION (pfile, dollars_in_ident) = 0; + break; + case OPT_H: + CPP_OPTION (pfile, print_include_names) = 1; + break; + case OPT_D: + new_pending_directive (pend, arg, cpp_define); + break; + case OPT_pedantic_errors: + CPP_OPTION (pfile, pedantic_errors) = 1; + /* fall through */ + case OPT_pedantic: + CPP_OPTION (pfile, pedantic) = 1; + break; + case OPT_trigraphs: + CPP_OPTION (pfile, trigraphs) = 1; + break; + case OPT_plus: + CPP_OPTION (pfile, cplusplus) = 1; + CPP_OPTION (pfile, cplusplus_comments) = 1; + break; + case OPT_remap: + CPP_OPTION (pfile, remap) = 1; + break; + case OPT_iprefix: + CPP_OPTION (pfile, include_prefix) = arg; + CPP_OPTION (pfile, include_prefix_len) = strlen (arg); + break; + case OPT_lang_c: + set_lang (pfile, CLK_GNUC89); + break; + case OPT_lang_cplusplus: + set_lang (pfile, CLK_GNUCXX); + break; + case OPT_lang_objc: + set_lang (pfile, CLK_OBJC); + break; + case OPT_lang_objcplusplus: + set_lang (pfile, CLK_OBJCXX); + break; + case OPT_lang_asm: + set_lang (pfile, CLK_ASM); + break; + case OPT_std_cplusplus98: + set_lang (pfile, CLK_CXX98); + break; + case OPT_std_gnu89: + set_lang (pfile, CLK_GNUC89); + break; + case OPT_std_gnu9x: + case OPT_std_gnu99: + set_lang (pfile, CLK_GNUC99); + break; + case OPT_std_iso9899_199409: + set_lang (pfile, CLK_STDC94); + break; + case OPT_std_iso9899_1990: + case OPT_std_c89: + case OPT_lang_c89: + set_lang (pfile, CLK_STDC89); + break; + case OPT_std_iso9899_199x: + case OPT_std_iso9899_1999: + case OPT_std_c9x: + case OPT_std_c99: + set_lang (pfile, CLK_STDC99); + break; + case OPT_nostdinc: + /* -nostdinc causes no default include directories. + You must specify all include-file directories with -I. */ + CPP_OPTION (pfile, no_standard_includes) = 1; + break; + case OPT_nostdincplusplus: + /* -nostdinc++ causes no default C++-specific include directories. */ + CPP_OPTION (pfile, no_standard_cplusplus_includes) = 1; + break; + case OPT_o: + if (CPP_OPTION (pfile, out_fname) == NULL) + CPP_OPTION (pfile, out_fname) = arg; + else + { + cpp_fatal (pfile, "output filename specified twice"); + return argc; + } + break; + case OPT_d: + /* Args to -d specify what parts of macros to dump. + Silently ignore unrecognised options; they may + be aimed at the compiler proper. */ + { + char c; + + while ((c = *arg++) != '\0') + switch (c) + { + case 'M': + CPP_OPTION (pfile, dump_macros) = dump_only; + break; + case 'N': + CPP_OPTION (pfile, dump_macros) = dump_names; + break; + case 'D': + CPP_OPTION (pfile, dump_macros) = dump_definitions; + break; + case 'I': + CPP_OPTION (pfile, dump_includes) = 1; + break; + } + } + break; + + case OPT_MG: + CPP_OPTION (pfile, print_deps_missing_files) = 1; + break; + case OPT_M: + /* When doing dependencies with -M or -MM, suppress normal + preprocessed output, but still do -dM etc. as software + depends on this. Preprocessed output occurs if -MD, -MMD + or environment var dependency generation is used. */ + CPP_OPTION (pfile, print_deps) = 2; + CPP_OPTION (pfile, no_output) = 1; + break; + case OPT_MM: + CPP_OPTION (pfile, print_deps) = 1; + CPP_OPTION (pfile, no_output) = 1; + break; + case OPT_MF: + CPP_OPTION (pfile, deps_file) = arg; + break; + case OPT_MP: + CPP_OPTION (pfile, deps_phony_targets) = 1; + break; + case OPT_MQ: + case OPT_MT: + /* Add a target. -MQ quotes for Make. */ + deps_add_target (pfile->deps, arg, opt_code == OPT_MQ); + break; + + case OPT_MD: + CPP_OPTION (pfile, print_deps) = 2; + CPP_OPTION (pfile, deps_file) = arg; + break; + case OPT_MMD: + CPP_OPTION (pfile, print_deps) = 1; + CPP_OPTION (pfile, deps_file) = arg; + break; + + case OPT_A: + if (arg[0] == '-') + { + /* -A with an argument beginning with '-' acts as + #unassert on whatever immediately follows the '-'. + If "-" is the whole argument, we eliminate all + predefined macros and assertions, including those + that were specified earlier on the command line. + That way we can get rid of any that were passed + automatically in from GCC. */ + + if (arg[1] == '\0') + { + free_chain (pend->directive_head); + pend->directive_head = NULL; + pend->directive_tail = NULL; + } + else + new_pending_directive (pend, arg + 1, cpp_unassert); + } + else + new_pending_directive (pend, arg, cpp_assert); + break; + case OPT_U: + new_pending_directive (pend, arg, cpp_undef); + break; + case OPT_I: /* Add directory to path for includes. */ + if (!strcmp (arg, "-")) + { + /* -I- means: + Use the preceding -I directories for #include "..." + but not #include <...>. + Don't search the directory of the present file + for #include "...". (Note that -I. -I- is not the same as + the default setup; -I. uses the compiler's working dir.) */ + if (! CPP_OPTION (pfile, ignore_srcdir)) + { + pend->quote_head = pend->brack_head; + pend->quote_tail = pend->brack_tail; + pend->brack_head = 0; + pend->brack_tail = 0; + CPP_OPTION (pfile, ignore_srcdir) = 1; + } + else + { + cpp_fatal (pfile, "-I- specified twice"); + return argc; + } + } + else + append_include_chain (pfile, xstrdup (arg), BRACKET, 0); + break; + case OPT_isystem: + /* Add directory to beginning of system include path, as a system + include directory. */ + append_include_chain (pfile, xstrdup (arg), SYSTEM, 0); + break; + case OPT_include: + case OPT_imacros: + { + struct pending_option *o = (struct pending_option *) + xmalloc (sizeof (struct pending_option)); + o->arg = arg; + o->next = NULL; + + if (opt_code == OPT_include) + APPEND (pend, include, o); + else + APPEND (pend, imacros, o); + } + break; + case OPT_iwithprefix: + /* Add directory to end of path for includes, + with the default prefix at the front of its name. */ + /* fall through */ + case OPT_iwithprefixbefore: + /* Add directory to main path for includes, + with the default prefix at the front of its name. */ + { + char *fname; + int len; + + len = strlen (arg); + + if (CPP_OPTION (pfile, include_prefix) != 0) + { + size_t ipl = CPP_OPTION (pfile, include_prefix_len); + fname = xmalloc (ipl + len + 1); + memcpy (fname, CPP_OPTION (pfile, include_prefix), ipl); + memcpy (fname + ipl, arg, len + 1); + } + else if (cpp_GCC_INCLUDE_DIR_len) + { + fname = xmalloc (cpp_GCC_INCLUDE_DIR_len + len + 1); + memcpy (fname, cpp_GCC_INCLUDE_DIR, cpp_GCC_INCLUDE_DIR_len); + memcpy (fname + cpp_GCC_INCLUDE_DIR_len, arg, len + 1); + } + else + fname = xstrdup (arg); + + append_include_chain (pfile, fname, + opt_code == OPT_iwithprefix ? SYSTEM: BRACKET, 0); + } + break; + case OPT_idirafter: + /* Add directory to end of path for includes. */ + append_include_chain (pfile, xstrdup (arg), AFTER, 0); + break; + case OPT_W: + /* Silently ignore unrecognised options. */ + if (!strcmp (argv[i], "-Wall")) + { + CPP_OPTION (pfile, warn_trigraphs) = 1; + CPP_OPTION (pfile, warn_comments) = 1; + } + else if (!strcmp (argv[i], "-Wtraditional")) + CPP_OPTION (pfile, warn_traditional) = 1; + else if (!strcmp (argv[i], "-Wtrigraphs")) + CPP_OPTION (pfile, warn_trigraphs) = 1; + else if (!strcmp (argv[i], "-Wcomment")) + CPP_OPTION (pfile, warn_comments) = 1; + else if (!strcmp (argv[i], "-Wcomments")) + CPP_OPTION (pfile, warn_comments) = 1; + else if (!strcmp (argv[i], "-Wundef")) + CPP_OPTION (pfile, warn_undef) = 1; + else if (!strcmp (argv[i], "-Wimport")) + CPP_OPTION (pfile, warn_import) = 1; + else if (!strcmp (argv[i], "-Werror")) + CPP_OPTION (pfile, warnings_are_errors) = 1; + else if (!strcmp (argv[i], "-Wsystem-headers")) + CPP_OPTION (pfile, warn_system_headers) = 1; + else if (!strcmp (argv[i], "-Wno-traditional")) + CPP_OPTION (pfile, warn_traditional) = 0; + else if (!strcmp (argv[i], "-Wno-trigraphs")) + CPP_OPTION (pfile, warn_trigraphs) = 0; + else if (!strcmp (argv[i], "-Wno-comment")) + CPP_OPTION (pfile, warn_comments) = 0; + else if (!strcmp (argv[i], "-Wno-comments")) + CPP_OPTION (pfile, warn_comments) = 0; + else if (!strcmp (argv[i], "-Wno-undef")) + CPP_OPTION (pfile, warn_undef) = 0; + else if (!strcmp (argv[i], "-Wno-import")) + CPP_OPTION (pfile, warn_import) = 0; + else if (!strcmp (argv[i], "-Wno-error")) + CPP_OPTION (pfile, warnings_are_errors) = 0; + else if (!strcmp (argv[i], "-Wno-system-headers")) + CPP_OPTION (pfile, warn_system_headers) = 0; + else if (! ignore) + return i; + break; + } + } + return i + 1; +} + +/* Handle command-line options in (argc, argv). + Can be called multiple times, to handle multiple sets of options. + Returns if an unrecognized option is seen. + Returns number of strings consumed. */ +int +cpp_handle_options (pfile, argc, argv) + cpp_reader *pfile; + int argc; + char **argv; +{ + int i; + int strings_processed; + + for (i = 0; i < argc; i += strings_processed) + { + strings_processed = cpp_handle_option (pfile, argc - i, argv + i, 1); + if (strings_processed == 0) + break; + } + + return i; +} + +/* Extra processing when all options are parsed, after all calls to + cpp_handle_option[s]. Consistency checks etc. */ +void +cpp_post_options (pfile) + cpp_reader *pfile; +{ + if (pfile->print_version) + { + fprintf (stderr, _("GNU CPP version %s (cpplib)"), version_string); +#ifdef TARGET_VERSION + TARGET_VERSION; +#endif + fputc ('\n', stderr); + } + + /* Canonicalize in_fname and out_fname. We guarantee they are not + NULL, and that the empty string represents stdin / stdout. */ + if (CPP_OPTION (pfile, in_fname) == NULL + || !strcmp (CPP_OPTION (pfile, in_fname), "-")) + CPP_OPTION (pfile, in_fname) = ""; + + if (CPP_OPTION (pfile, out_fname) == NULL + || !strcmp (CPP_OPTION (pfile, out_fname), "-")) + CPP_OPTION (pfile, out_fname) = ""; + + /* -Wtraditional is not useful in C++ mode. */ + if (CPP_OPTION (pfile, cplusplus)) + CPP_OPTION (pfile, warn_traditional) = 0; + + /* Set this if it hasn't been set already. */ + if (CPP_OPTION (pfile, user_label_prefix) == NULL) + CPP_OPTION (pfile, user_label_prefix) = USER_LABEL_PREFIX; + + /* Permanently disable macro expansion if we are rescanning + preprocessed text. */ + if (CPP_OPTION (pfile, preprocessed)) + pfile->state.prevent_expansion = 1; + + /* -dM makes no normal output. This is set here so that -dM -dD + works as expected. */ + if (CPP_OPTION (pfile, dump_macros) == dump_only) + CPP_OPTION (pfile, no_output) = 1; + + /* Disable -dD, -dN and -dI if we should make no normal output + (such as with -M). Allow -M -dM since some software relies on + this. */ + if (CPP_OPTION (pfile, no_output)) + { + if (CPP_OPTION (pfile, dump_macros) != dump_only) + CPP_OPTION (pfile, dump_macros) = dump_none; + CPP_OPTION (pfile, dump_includes) = 0; + } + + /* We need to do this after option processing and before + cpp_start_read, as cppmain.c relies on the options->no_output to + set its callbacks correctly before calling cpp_start_read. */ + init_dependency_output (pfile); + + /* After checking the environment variables, check if -M or -MM has + not been specified, but other -M options have. */ + if (CPP_OPTION (pfile, print_deps) == 0 && + (CPP_OPTION (pfile, print_deps_missing_files) + || CPP_OPTION (pfile, deps_file) + || CPP_OPTION (pfile, deps_phony_targets))) + cpp_fatal (pfile, "you must additionally specify either -M or -MM"); +} + +/* Set up dependency-file output. On exit, if print_deps is non-zero + then deps_file is not NULL; stdout is the empty string. */ +static void +init_dependency_output (pfile) + cpp_reader *pfile; +{ + char *spec, *s, *output_file; + + /* Either of two environment variables can specify output of deps. + Its value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET", + where OUTPUT_FILE is the file to write deps info to + and DEPS_TARGET is the target to mention in the deps. */ + + if (CPP_OPTION (pfile, print_deps) == 0) + { + spec = getenv ("DEPENDENCIES_OUTPUT"); + if (spec) + CPP_OPTION (pfile, print_deps) = 1; + else + { + spec = getenv ("SUNPRO_DEPENDENCIES"); + if (spec) + CPP_OPTION (pfile, print_deps) = 2; + else + return; + } + + /* Find the space before the DEPS_TARGET, if there is one. */ + s = strchr (spec, ' '); + if (s) + { + /* Let the caller perform MAKE quoting. */ + deps_add_target (pfile->deps, s + 1, 0); + output_file = (char *) xmalloc (s - spec + 1); + memcpy (output_file, spec, s - spec); + output_file[s - spec] = 0; + } + else + output_file = spec; + + /* Command line -MF overrides environment variables and default. */ + if (CPP_OPTION (pfile, deps_file) == 0) + CPP_OPTION (pfile, deps_file) = output_file; + + CPP_OPTION (pfile, print_deps_append) = 1; + } + else if (CPP_OPTION (pfile, deps_file) == 0) + /* If -M or -MM was seen without -MF, default output to wherever + was specified with -o. out_fname is non-NULL here. */ + CPP_OPTION (pfile, deps_file) = CPP_OPTION (pfile, out_fname); +} + +/* Handle --help output. */ +static void +print_help () +{ + /* To keep the lines from getting too long for some compilers, limit + to about 500 characters (6 lines) per chunk. */ + fputs (_("\ +Switches:\n\ + -include Include the contents of before other files\n\ + -imacros Accept definition of macros in \n\ + -iprefix Specify as a prefix for next two options\n\ + -iwithprefix

    Add to the end of the system include path\n\ + -iwithprefixbefore Add to the end of the main include path\n\ + -isystem Add to the start of the system include path\n\ +"), stdout); + fputs (_("\ + -idirafter Add to the end of the system include path\n\ + -I Add to the end of the main include path\n\ + -I- Fine-grained include path control; see info docs\n\ + -nostdinc Do not search system include directories\n\ + (dirs specified with -isystem will still be used)\n\ + -nostdinc++ Do not search system include directories for C++\n\ + -o Put output into \n\ +"), stdout); + fputs (_("\ + -pedantic Issue all warnings demanded by strict ISO C\n\ + -pedantic-errors Issue -pedantic warnings as errors instead\n\ + -trigraphs Support ISO C trigraphs\n\ + -lang-c Assume that the input sources are in C\n\ + -lang-c89 Assume that the input sources are in C89\n\ +"), stdout); + fputs (_("\ + -lang-c++ Assume that the input sources are in C++\n\ + -lang-objc Assume that the input sources are in ObjectiveC\n\ + -lang-objc++ Assume that the input sources are in ObjectiveC++\n\ + -lang-asm Assume that the input sources are in assembler\n\ +"), stdout); + fputs (_("\ + -std= Specify the conformance standard; one of:\n\ + gnu89, gnu99, c89, c99, iso9899:1990,\n\ + iso9899:199409, iso9899:1999\n\ + -+ Allow parsing of C++ style features\n\ + -w Inhibit warning messages\n\ + -Wtrigraphs Warn if trigraphs are encountered\n\ + -Wno-trigraphs Do not warn about trigraphs\n\ + -Wcomment{s} Warn if one comment starts inside another\n\ +"), stdout); + fputs (_("\ + -Wno-comment{s} Do not warn about comments\n\ + -Wtraditional Warn about features not present in traditional C\n\ + -Wno-traditional Do not warn about traditional C\n\ + -Wundef Warn if an undefined macro is used by #if\n\ + -Wno-undef Do not warn about testing undefined macros\n\ + -Wimport Warn about the use of the #import directive\n\ +"), stdout); + fputs (_("\ + -Wno-import Do not warn about the use of #import\n\ + -Werror Treat all warnings as errors\n\ + -Wno-error Do not treat warnings as errors\n\ + -Wsystem-headers Do not suppress warnings from system headers\n\ + -Wno-system-headers Suppress warnings from system headers\n\ + -Wall Enable all preprocessor warnings\n\ +"), stdout); + fputs (_("\ + -M Generate make dependencies\n\ + -MM As -M, but ignore system header files\n\ + -MD Generate make dependencies and compile\n\ + -MMD As -MD, but ignore system header files\n\ + -MF Write dependency output to the given file\n\ + -MG Treat missing header file as generated files\n\ +"), stdout); + fputs (_("\ + -MP Generate phony targets for all headers\n\ + -MQ Add a MAKE-quoted target\n\ + -MT Add an unquoted target\n\ +"), stdout); + fputs (_("\ + -D Define a with string '1' as its value\n\ + -D= Define a with as its value\n\ + -A= Assert the to \n\ + -A-= Disable the to \n\ + -U Undefine \n\ + -v Display the version number\n\ +"), stdout); + fputs (_("\ + -H Print the name of header files as they are used\n\ + -C Do not discard comments\n\ + -dM Display a list of macro definitions active at end\n\ + -dD Preserve macro definitions in output\n\ + -dN As -dD except that only the names are preserved\n\ + -dI Include #include directives in the output\n\ +"), stdout); + fputs (_("\ + -fpreprocessed Treat the input file as already preprocessed\n\ + -ftabstop= Distance between tab stops for column reporting\n\ + -P Do not generate #line directives\n\ + -$ Do not allow '$' in identifiers\n\ + -remap Remap file names when including files\n\ + --version Display version information\n\ + -h or --help Display this information\n\ +"), stdout); +} diff --git a/src/mkutil/cpp/cppinit.i b/src/mkutil/cpp/cppinit.i new file mode 100644 index 00000000..34327efd --- /dev/null +++ b/src/mkutil/cpp/cppinit.i @@ -0,0 +1,301693 @@ +#line 1 "cppinit.c" + + + + + + + + + + + + + + + + + + + + + +#line 1 "config.h" + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 ".\\defaults.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 37 ".\\defaults.h" + + + + + + + + + + + + + + + + + +#line 55 ".\\defaults.h" + + + +#line 59 ".\\defaults.h" + + + + + + + + + + +#line 70 ".\\defaults.h" + + + + + +#line 76 ".\\defaults.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 116 ".\\defaults.h" + + + + + + + + + + + + + + + + + + +#line 135 ".\\defaults.h" + + + + + + + + +#line 144 ".\\defaults.h" + + + + + + + + + + + + +#line 157 ".\\defaults.h" +#line 158 ".\\defaults.h" + + + + + +#line 164 ".\\defaults.h" + +#line 166 ".\\defaults.h" +#line 167 ".\\defaults.h" + + + + + + + +#line 175 ".\\defaults.h" +#line 176 ".\\defaults.h" + + + + + + + + + + + + +#line 189 ".\\defaults.h" + +#line 191 ".\\defaults.h" +#line 192 ".\\defaults.h" + + + + + +#line 198 ".\\defaults.h" + + + + + + +#line 205 ".\\defaults.h" + + + + + +#line 211 ".\\defaults.h" + + + + + + + +#line 219 ".\\defaults.h" + + + + + + + + +#line 228 ".\\defaults.h" + + + + + + + + + + + + + + + + + + + + + +#line 250 ".\\defaults.h" + + + + + + + + + +#line 260 ".\\defaults.h" + + + + +#line 265 ".\\defaults.h" + + + + + + +#line 272 ".\\defaults.h" + + + + + + +#line 279 ".\\defaults.h" + + + + + + + +#line 287 ".\\defaults.h" + + + + +#line 292 ".\\defaults.h" + + + +#line 296 ".\\defaults.h" + + + +#line 300 ".\\defaults.h" + + + +#line 304 ".\\defaults.h" + + + +#line 308 ".\\defaults.h" + + + +#line 312 ".\\defaults.h" + + + +#line 316 ".\\defaults.h" + + + +#line 320 ".\\defaults.h" + + + +#line 324 ".\\defaults.h" + + + +#line 328 ".\\defaults.h" + + + +#line 332 ".\\defaults.h" + + + +#line 336 ".\\defaults.h" + + + + + +#line 342 ".\\defaults.h" + +#line 344 ".\\defaults.h" + + + + + + + + +#line 353 ".\\defaults.h" + + + +#line 357 ".\\defaults.h" + + + + + + + +#line 365 ".\\defaults.h" +#line 366 ".\\defaults.h" + + + + + +#line 372 ".\\defaults.h" + + + + + + + + + +#line 382 ".\\defaults.h" + + + + + + +#line 389 ".\\defaults.h" + + + + + + + + + + +#line 400 ".\\defaults.h" + + + + + + +#line 407 ".\\defaults.h" + + + +#line 411 ".\\defaults.h" + + + + + + + + + + +#line 422 ".\\defaults.h" + + + + + + + + + + + + + + + + + + +#line 441 ".\\defaults.h" + + + + + +#line 447 ".\\defaults.h" + + + + + + + + + +#line 457 ".\\defaults.h" + + + + + + +#line 464 ".\\defaults.h" + + + + + +#line 470 ".\\defaults.h" + +#line 472 ".\\defaults.h" +#line 26 "config.h" + +#line 23 "cppinit.c" +#line 1 "system.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 ".\\ansidecl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 138 ".\\ansidecl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 171 ".\\ansidecl.h" + + +#line 174 ".\\ansidecl.h" + +#line 176 ".\\ansidecl.h" +#line 177 ".\\ansidecl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 233 ".\\ansidecl.h" + + + + + + + +#line 241 ".\\ansidecl.h" + + + + + +#line 247 ".\\ansidecl.h" + +#line 249 ".\\ansidecl.h" +#line 250 ".\\ansidecl.h" + + + + + +#line 256 ".\\ansidecl.h" + +#line 258 ".\\ansidecl.h" +#line 259 ".\\ansidecl.h" + + + +#line 263 ".\\ansidecl.h" + + + +#line 267 ".\\ansidecl.h" + + + + + + + + +#line 276 ".\\ansidecl.h" + + + + + + +#line 283 ".\\ansidecl.h" + + + + + + + + + + +#line 294 ".\\ansidecl.h" + +#line 296 ".\\ansidecl.h" +#line 32 "system.h" + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdarg.h" + + + + + + + + + + + + + + + +#pragma once +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdarg.h" + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdarg.h" + + + + + + + +#pragma pack(push,8) +#line 34 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdarg.h" + + + + + + + + + + + + + + +typedef char * va_list; +#line 50 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdarg.h" + +#line 52 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdarg.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 153 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdarg.h" + + + + + + + +#pragma pack(pop) +#line 162 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdarg.h" + +#line 164 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdarg.h" +#line 36 "system.h" + + +#line 39 "system.h" + + + + + + +#line 46 "system.h" +#line 47 "system.h" + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + + + + + + + + + + + + + + + +#pragma once +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + + + + + + + + + + + + + + + +#line 41 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" +#line 42 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + + + + + +#line 48 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + + + + + + + + +#line 57 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" +#line 58 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + + + + + + + + + +#line 68 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" +#line 69 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + + + + + + + + + + +#line 80 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + extern int errno; +#line 82 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + + + + + +typedef int ptrdiff_t; + +#line 90 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + + + +typedef unsigned int size_t; + +#line 96 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + + + +typedef unsigned short wchar_t; + +#line 102 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" + + + + + + + + + + + + + +#line 116 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stddef.h" +#line 50 "system.h" +#line 51 "system.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + + + + + + + + + +#pragma once +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + +#pragma pack(push,8) +#line 34 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + + + + + + + + + + + + + + + + +#line 57 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef wchar_t wint_t; +typedef wchar_t wctype_t; + +#line 87 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" +#line 88 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + + + + + + + + + + + + + +#line 108 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + +#line 110 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 141 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + +struct _iobuf { + char *_ptr; + int _cnt; + char *_base; + int _flag; + int _file; + int _charbuf; + int _bufsiz; + char *_tmpfname; + }; +typedef struct _iobuf FILE; + +#line 159 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + + + + + + +#line 172 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + + + + + + +#line 185 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + extern FILE _iob[]; +#line 222 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + + + +#line 232 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + +#line 237 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" +typedef struct fpos_t { + unsigned int lopart; + int hipart; + } fpos_t; + +#line 243 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" +#line 244 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + +#line 247 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + int __cdecl _filbuf(FILE *); + int __cdecl _flsbuf(int, FILE *); + + + + + FILE * __cdecl _fsopen(const char *, const char *, int); +#line 283 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + void __cdecl clearerr(FILE *); + int __cdecl fclose(FILE *); + int __cdecl _fcloseall(void); + + + + + FILE * __cdecl _fdopen(int, const char *); +#line 293 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + int __cdecl feof(FILE *); + int __cdecl ferror(FILE *); + int __cdecl fflush(FILE *); + int __cdecl fgetc(FILE *); + int __cdecl _fgetchar(void); + int __cdecl fgetpos(FILE *, fpos_t *); + char * __cdecl fgets(char *, int, FILE *); + + + + + int __cdecl _fileno(FILE *); +#line 307 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + int __cdecl _flushall(void); + FILE * __cdecl fopen(const char *, const char *); + int __cdecl fprintf(FILE *, const char *, ...); + int __cdecl fputc(int, FILE *); + int __cdecl _fputchar(int); + int __cdecl fputs(const char *, FILE *); + size_t __cdecl fread(void *, size_t, size_t, FILE *); + FILE * __cdecl freopen(const char *, const char *, FILE *); + int __cdecl fscanf(FILE *, const char *, ...); + int __cdecl fsetpos(FILE *, const fpos_t *); + int __cdecl fseek(FILE *, long, int); + long __cdecl ftell(FILE *); + size_t __cdecl fwrite(const void *, size_t, size_t, FILE *); + int __cdecl getc(FILE *); + int __cdecl getchar(void); + int __cdecl _getmaxstdio(void); + char * __cdecl gets(char *); + int __cdecl _getw(FILE *); + void __cdecl perror(const char *); + int __cdecl _pclose(FILE *); + FILE * __cdecl _popen(const char *, const char *); + int __cdecl printf(const char *, ...); + int __cdecl putc(int, FILE *); + int __cdecl putchar(int); + int __cdecl puts(const char *); + int __cdecl _putw(int, FILE *); + int __cdecl remove(const char *); + int __cdecl rename(const char *, const char *); + void __cdecl rewind(FILE *); + int __cdecl _rmtmp(void); + int __cdecl scanf(const char *, ...); + void __cdecl setbuf(FILE *, char *); + int __cdecl _setmaxstdio(int); + int __cdecl setvbuf(FILE *, char *, int, size_t); + int __cdecl _snprintf(char *, size_t, const char *, ...); + int __cdecl sprintf(char *, const char *, ...); + int __cdecl sscanf(const char *, const char *, ...); + char * __cdecl _tempnam(const char *, const char *); + FILE * __cdecl tmpfile(void); + char * __cdecl tmpnam(char *); + int __cdecl ungetc(int, FILE *); + int __cdecl _unlink(const char *); + int __cdecl vfprintf(FILE *, const char *, va_list); + int __cdecl vprintf(const char *, va_list); + int __cdecl _vsnprintf(char *, size_t, const char *, va_list); + int __cdecl vsprintf(char *, const char *, va_list); + + + + + + + + +#line 363 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + FILE * __cdecl _wfsopen(const wchar_t *, const wchar_t *, int); +#line 369 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + wint_t __cdecl fgetwc(FILE *); + wint_t __cdecl _fgetwchar(void); + wint_t __cdecl fputwc(wint_t, FILE *); + wint_t __cdecl _fputwchar(wint_t); + wint_t __cdecl getwc(FILE *); + wint_t __cdecl getwchar(void); + wint_t __cdecl putwc(wint_t, FILE *); + wint_t __cdecl putwchar(wint_t); + wint_t __cdecl ungetwc(wint_t, FILE *); + + wchar_t * __cdecl fgetws(wchar_t *, int, FILE *); + int __cdecl fputws(const wchar_t *, FILE *); + wchar_t * __cdecl _getws(wchar_t *); + int __cdecl _putws(const wchar_t *); + + int __cdecl fwprintf(FILE *, const wchar_t *, ...); + int __cdecl wprintf(const wchar_t *, ...); + int __cdecl _snwprintf(wchar_t *, size_t, const wchar_t *, ...); + int __cdecl swprintf(wchar_t *, const wchar_t *, ...); + int __cdecl vfwprintf(FILE *, const wchar_t *, va_list); + int __cdecl vwprintf(const wchar_t *, va_list); + int __cdecl _vsnwprintf(wchar_t *, size_t, const wchar_t *, va_list); + int __cdecl vswprintf(wchar_t *, const wchar_t *, va_list); + int __cdecl fwscanf(FILE *, const wchar_t *, ...); + int __cdecl swscanf(const wchar_t *, const wchar_t *, ...); + int __cdecl wscanf(const wchar_t *, ...); + + + + + + + FILE * __cdecl _wfdopen(int, const wchar_t *); + FILE * __cdecl _wfopen(const wchar_t *, const wchar_t *); + FILE * __cdecl _wfreopen(const wchar_t *, const wchar_t *, FILE *); + void __cdecl _wperror(const wchar_t *); + FILE * __cdecl _wpopen(const wchar_t *, const wchar_t *); + int __cdecl _wremove(const wchar_t *); + wchar_t * __cdecl _wtempnam(const wchar_t *, const wchar_t *); + wchar_t * __cdecl _wtmpnam(wchar_t *); + + + +#line 414 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" +#line 415 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + +#line 418 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 463 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + + + + + + +#pragma pack(pop) +#line 471 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" + +#line 473 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdio.h" +#line 53 "system.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 108 "system.h" + + + + +#line 1 ".\\safe-ctype.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +enum { + + _sch_isblank = 0x0001, + _sch_iscntrl = 0x0002, + _sch_isdigit = 0x0004, + _sch_islower = 0x0008, + _sch_isprint = 0x0010, + _sch_ispunct = 0x0020, + _sch_isspace = 0x0040, + _sch_isupper = 0x0080, + _sch_isxdigit = 0x0100, + + + _sch_isidst = 0x0200, + _sch_isvsp = 0x0400, + _sch_isnvsp = 0x0800, + + + _sch_isalpha = _sch_isupper|_sch_islower, + _sch_isalnum = _sch_isalpha|_sch_isdigit, + _sch_isidnum = _sch_isidst|_sch_isdigit, + _sch_isgraph = _sch_isalnum|_sch_ispunct, + _sch_iscppsp = _sch_isvsp|_sch_isnvsp, + _sch_isbasic = _sch_isprint|_sch_iscppsp + +}; + + +extern const unsigned short _sch_istable[256]; + + + + + + + + + + + + + + + + + + + + + + + + +extern const unsigned char _sch_toupper[256]; +extern const unsigned char _sch_tolower[256]; + + + +#line 103 ".\\safe-ctype.h" +#line 104 ".\\safe-ctype.h" +#line 113 "system.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/types.h" + + + + + + + + + + + + + + + +#pragma once +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/types.h" + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/types.h" + + + +typedef long time_t; + +#line 31 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/types.h" + + + + +typedef unsigned short _ino_t; + + + + +#line 41 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/types.h" + + +#line 44 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/types.h" + + + + +typedef unsigned int _dev_t; + + + + +#line 54 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/types.h" + + +#line 57 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/types.h" + + + + +typedef long _off_t; + + + + +#line 67 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/types.h" + + +#line 70 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/types.h" + +#line 72 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/types.h" +#line 115 "system.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\errno.h" + + + + + + + + + + + + + + + + +#pragma once +#line 19 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\errno.h" + + + + + + +#line 26 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\errno.h" + + + + + + + + + + + + + + + + + + + + + + + +#line 50 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\errno.h" + + + + + + + + + + + + + + + + + +#line 68 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\errno.h" + extern int errno; +#line 70 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\errno.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 122 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\errno.h" +#line 117 "system.h" + + + +#line 121 "system.h" + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + + + + + + + + + + + + + + + +#pragma once +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + + + + + + + + + + + + + + + + + + + + + + +#line 48 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + + + + + + + + + + + + + + + + + + + + + + + +#line 72 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + + + + +#line 77 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + + + + + + + + + + + + + + + + + + + + + + + + + void * __cdecl memcpy(void *, const void *, size_t); + int __cdecl memcmp(const void *, const void *, size_t); + void * __cdecl memset(void *, int, size_t); + char * __cdecl _strset(char *, int); + char * __cdecl strcpy(char *, const char *); + char * __cdecl strcat(char *, const char *); + int __cdecl strcmp(const char *, const char *); + size_t __cdecl strlen(const char *); +#line 110 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + void * __cdecl _memccpy(void *, const void *, int, unsigned int); + void * __cdecl memchr(const void *, int, size_t); + int __cdecl _memicmp(const void *, const void *, unsigned int); + + + + + + void * __cdecl memmove(void *, const void *, size_t); +#line 120 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + + + char * __cdecl strchr(const char *, int); + int __cdecl _strcmpi(const char *, const char *); + int __cdecl _stricmp(const char *, const char *); + int __cdecl strcoll(const char *, const char *); + int __cdecl _stricoll(const char *, const char *); + int __cdecl _strncoll(const char *, const char *, size_t); + int __cdecl _strnicoll(const char *, const char *, size_t); + size_t __cdecl strcspn(const char *, const char *); + char * __cdecl _strdup(const char *); + char * __cdecl _strerror(const char *); + char * __cdecl strerror(int); + char * __cdecl _strlwr(char *); + char * __cdecl strncat(char *, const char *, size_t); + int __cdecl strncmp(const char *, const char *, size_t); + int __cdecl _strnicmp(const char *, const char *, size_t); + char * __cdecl strncpy(char *, const char *, size_t); + char * __cdecl _strnset(char *, int, size_t); + char * __cdecl strpbrk(const char *, const char *); + char * __cdecl strrchr(const char *, int); + char * __cdecl _strrev(char *); + size_t __cdecl strspn(const char *, const char *); + char * __cdecl strstr(const char *, const char *); + char * __cdecl strtok(char *, const char *); + char * __cdecl _strupr(char *); + size_t __cdecl strxfrm (char *, const char *, size_t); + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 174 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + + + + + + + + wchar_t * __cdecl wcscat(wchar_t *, const wchar_t *); + wchar_t * __cdecl wcschr(const wchar_t *, wchar_t); + int __cdecl wcscmp(const wchar_t *, const wchar_t *); + wchar_t * __cdecl wcscpy(wchar_t *, const wchar_t *); + size_t __cdecl wcscspn(const wchar_t *, const wchar_t *); + size_t __cdecl wcslen(const wchar_t *); + wchar_t * __cdecl wcsncat(wchar_t *, const wchar_t *, size_t); + int __cdecl wcsncmp(const wchar_t *, const wchar_t *, size_t); + wchar_t * __cdecl wcsncpy(wchar_t *, const wchar_t *, size_t); + wchar_t * __cdecl wcspbrk(const wchar_t *, const wchar_t *); + wchar_t * __cdecl wcsrchr(const wchar_t *, wchar_t); + size_t __cdecl wcsspn(const wchar_t *, const wchar_t *); + wchar_t * __cdecl wcsstr(const wchar_t *, const wchar_t *); + wchar_t * __cdecl wcstok(wchar_t *, const wchar_t *); + + wchar_t * __cdecl _wcsdup(const wchar_t *); + int __cdecl _wcsicmp(const wchar_t *, const wchar_t *); + int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t); + wchar_t * __cdecl _wcsnset(wchar_t *, wchar_t, size_t); + wchar_t * __cdecl _wcsrev(wchar_t *); + wchar_t * __cdecl _wcsset(wchar_t *, wchar_t); + + wchar_t * __cdecl _wcslwr(wchar_t *); + wchar_t * __cdecl _wcsupr(wchar_t *); + size_t __cdecl wcsxfrm(wchar_t *, const wchar_t *, size_t); + int __cdecl wcscoll(const wchar_t *, const wchar_t *); + int __cdecl _wcsicoll(const wchar_t *, const wchar_t *); + int __cdecl _wcsncoll(const wchar_t *, const wchar_t *, size_t); + int __cdecl _wcsnicoll(const wchar_t *, const wchar_t *, size_t); + + + + + + + + + + + + + + + + + +#line 228 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + + +#line 231 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + +#line 233 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" + + + + + +#line 239 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\string.h" +#line 128 "system.h" + + + + +#line 133 "system.h" +#line 134 "system.h" + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + + + + + + + + + + + +#pragma once +#line 19 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + +#line 26 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + + +#pragma pack(push,8) +#line 35 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + + + + + + + + + + + + + + + + + +#line 58 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef int (__cdecl * _onexit_t)(void); + + + +#line 105 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + +#line 107 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + +typedef struct _div_t { + int quot; + int rem; +} div_t; + +typedef struct _ldiv_t { + long quot; + long rem; +} ldiv_t; + + +#line 125 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + + + + + + + + extern int __mb_cur_max; +#line 139 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + + + + + + + + + + + + + + + + +#line 161 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + + + + + + + + + + + + +#line 179 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + extern int errno; + extern unsigned long _doserrno; +#line 182 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + + + extern char * _sys_errlist[]; + extern int _sys_nerr; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 221 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + extern int __argc; + extern char ** __argv; + + extern wchar_t ** __wargv; +#line 227 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + extern char ** _environ; + + extern wchar_t ** _wenviron; +#line 235 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" +#line 236 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + extern char * _pgmptr; + + extern wchar_t * _wpgmptr; +#line 241 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + +#line 243 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + extern int _fmode; + extern int _fileinfo; + + + + + extern unsigned int _osver; + extern unsigned int _winver; + extern unsigned int _winmajor; + extern unsigned int _winminor; + + + + + + __declspec(noreturn) void __cdecl abort(void); + __declspec(noreturn) void __cdecl exit(int); + + + +#line 266 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + +#line 270 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + int __cdecl abs(int); +#line 272 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + int __cdecl atexit(void (__cdecl *)(void)); + double __cdecl atof(const char *); + int __cdecl atoi(const char *); + long __cdecl atol(const char *); + + + + void * __cdecl bsearch(const void *, const void *, size_t, size_t, + int (__cdecl *)(const void *, const void *)); + void * __cdecl calloc(size_t, size_t); + div_t __cdecl div(int, int); + void __cdecl free(void *); + char * __cdecl getenv(const char *); + char * __cdecl _itoa(int, char *, int); + + char * __cdecl _i64toa(__int64, char *, int); + char * __cdecl _ui64toa(unsigned __int64, char *, int); + __int64 __cdecl _atoi64(const char *); +#line 291 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + +#line 294 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + long __cdecl labs(long); +#line 296 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + ldiv_t __cdecl ldiv(long, long); + char * __cdecl _ltoa(long, char *, int); + void * __cdecl malloc(size_t); + int __cdecl mblen(const char *, size_t); + size_t __cdecl _mbstrlen(const char *s); + int __cdecl mbtowc(wchar_t *, const char *, size_t); + size_t __cdecl mbstowcs(wchar_t *, const char *, size_t); + void __cdecl qsort(void *, size_t, size_t, int (__cdecl *) + (const void *, const void *)); + int __cdecl rand(void); + void * __cdecl realloc(void *, size_t); + int __cdecl _set_error_mode(int); + void __cdecl srand(unsigned int); + double __cdecl strtod(const char *, char **); + long __cdecl strtol(const char *, char **, int); + + + + unsigned long __cdecl strtoul(const char *, char **, int); + + int __cdecl system(const char *); +#line 318 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + char * __cdecl _ultoa(unsigned long, char *, int); + int __cdecl wctomb(char *, wchar_t); + size_t __cdecl wcstombs(char *, const wchar_t *, size_t); + + + + + + + + wchar_t * __cdecl _itow (int, wchar_t *, int); + wchar_t * __cdecl _ltow (long, wchar_t *, int); + wchar_t * __cdecl _ultow (unsigned long, wchar_t *, int); + double __cdecl wcstod(const wchar_t *, wchar_t **); + long __cdecl wcstol(const wchar_t *, wchar_t **, int); + unsigned long __cdecl wcstoul(const wchar_t *, wchar_t **, int); + wchar_t * __cdecl _wgetenv(const wchar_t *); + int __cdecl _wsystem(const wchar_t *); + int __cdecl _wtoi(const wchar_t *); + long __cdecl _wtol(const wchar_t *); + + wchar_t * __cdecl _i64tow(__int64, wchar_t *, int); + wchar_t * __cdecl _ui64tow(unsigned __int64, wchar_t *, int); + __int64 __cdecl _wtoi64(const wchar_t *); +#line 343 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + +#line 346 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" +#line 347 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + char * __cdecl _ecvt(double, int, int *, int *); + + __declspec(noreturn) void __cdecl _exit(int); + + +#line 357 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + char * __cdecl _fcvt(double, int, int *, int *); + char * __cdecl _fullpath(char *, const char *, size_t); + char * __cdecl _gcvt(double, int, char *); + unsigned long __cdecl _lrotl(unsigned long, int); + unsigned long __cdecl _lrotr(unsigned long, int); + + void __cdecl _makepath(char *, const char *, const char *, const char *, + const char *); +#line 366 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + _onexit_t __cdecl _onexit(_onexit_t); + void __cdecl perror(const char *); + int __cdecl _putenv(const char *); + unsigned int __cdecl _rotl(unsigned int, int); + unsigned int __cdecl _rotr(unsigned int, int); + void __cdecl _searchenv(const char *, const char *, char *); + + void __cdecl _splitpath(const char *, char *, char *, char *, char *); +#line 375 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + void __cdecl _swab(char *, char *, int); + + + + + + + wchar_t * __cdecl _wfullpath(wchar_t *, const wchar_t *, size_t); + void __cdecl _wmakepath(wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *, + const wchar_t *); + void __cdecl _wperror(const wchar_t *); + int __cdecl _wputenv(const wchar_t *); + void __cdecl _wsearchenv(const wchar_t *, const wchar_t *, wchar_t *); + void __cdecl _wsplitpath(const wchar_t *, wchar_t *, wchar_t *, wchar_t *, wchar_t *); + + +#line 392 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" +#line 393 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + void __cdecl _seterrormode(int); + void __cdecl _beep(unsigned, unsigned); + void __cdecl _sleep(unsigned long); +#line 401 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + +#line 404 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + + + + + + + + +#line 418 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 448 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + + + + + + + +#pragma pack(pop) +#line 457 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" + +#line 459 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\stdlib.h" +#line 137 "system.h" +#line 138 "system.h" + + + + + + + + + +#line 148 "system.h" +#line 149 "system.h" + + + + + + +#line 156 "system.h" +#line 157 "system.h" + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + + + + + + + + + + + + +#line 43 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + + + +#pragma once +#line 50 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 100 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + + + + + + + + + + + + + + + + + + +#line 121 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + +#line 125 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + +#line 129 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + +#line 133 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + +#line 137 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + +#line 141 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + +#line 145 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + + +#line 150 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 151 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + +#pragma warning(disable:4001) +#pragma warning(disable:4201) +#pragma warning(disable:4214) +#pragma warning(disable:4514) +#line 159 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\excpt.h" + + + + + + + + + + + + + + + +#pragma once +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\excpt.h" + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\excpt.h" + + + + + + + +#pragma pack(push,8) +#line 34 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\excpt.h" + + + + + + + + + + + + + + + + + + + + + + +#line 57 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\excpt.h" + + + + + + + + + + + + + + + +typedef enum _EXCEPTION_DISPOSITION { + ExceptionContinueExecution, + ExceptionContinueSearch, + ExceptionNestedException, + ExceptionCollidedUnwind +} EXCEPTION_DISPOSITION; + + + + + + + + + + + +struct _EXCEPTION_RECORD; +struct _CONTEXT; + +EXCEPTION_DISPOSITION __cdecl _except_handler ( + struct _EXCEPTION_RECORD *ExceptionRecord, + void * EstablisherFrame, + struct _CONTEXT *ContextRecord, + void * DispatcherContext + ); + + + + + + + + + + + + + + + + + + + +#line 118 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\excpt.h" + + + + + + + + + + + + + + + +unsigned long __cdecl _exception_code(void); +void * __cdecl _exception_info(void); +int __cdecl _abnormal_termination(void); + +#line 138 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\excpt.h" + + + + + + + + + + + + + + + + + +#pragma pack(pop) +#line 157 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\excpt.h" + +#line 159 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\excpt.h" +#line 160 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 162 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + + + + + + + + + + + + + +#line 17 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + + + + + + + + + + + + + + + + + + + + + + + +typedef unsigned long ULONG; +typedef ULONG *PULONG; +typedef unsigned short USHORT; +typedef USHORT *PUSHORT; +typedef unsigned char UCHAR; +typedef UCHAR *PUCHAR; +typedef char *PSZ; +#line 51 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + + + + + + + + + + + +#line 65 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + +#line 69 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + +#line 73 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + +#line 77 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + +#line 81 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + + + + + + + + + +#line 93 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + + + + +#line 100 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + +#line 104 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" +#line 105 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 132 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + + + + + +#line 140 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + +typedef unsigned long DWORD; +typedef int BOOL; +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef float FLOAT; +typedef FLOAT *PFLOAT; +typedef BOOL *PBOOL; +typedef BOOL *LPBOOL; +typedef BYTE *PBYTE; +typedef BYTE *LPBYTE; +typedef int *PINT; +typedef int *LPINT; +typedef WORD *PWORD; +typedef WORD *LPWORD; +typedef long *LPLONG; +typedef DWORD *PDWORD; +typedef DWORD *LPDWORD; +typedef void *LPVOID; +typedef const void *LPCVOID; + +typedef int INT; +typedef unsigned int UINT; +typedef unsigned int *PUINT; + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + + + + + + + + + + + +#pragma once +#line 17 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + + + +#line 24 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + + + + + + + + + + + + + + + + + + + + +#line 48 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 75 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + extern unsigned short _ctype[]; + extern unsigned short *_pctype; + + extern wctype_t *_pwctype; +#line 83 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" +#line 84 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + + + + + + + + + + + + + + + + + + + + int __cdecl _isctype(int, int); + int __cdecl isalpha(int); + int __cdecl isupper(int); + int __cdecl islower(int); + int __cdecl isdigit(int); + int __cdecl isxdigit(int); + int __cdecl isspace(int); + int __cdecl ispunct(int); + int __cdecl isalnum(int); + int __cdecl isprint(int); + int __cdecl isgraph(int); + int __cdecl iscntrl(int); + int __cdecl toupper(int); + int __cdecl tolower(int); + int __cdecl _tolower(int); + int __cdecl _toupper(int); + int __cdecl __isascii(int); + int __cdecl __toascii(int); + int __cdecl __iscsymf(int); + int __cdecl __iscsym(int); + +#line 128 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + + + + + + + int __cdecl iswalpha(wint_t); + int __cdecl iswupper(wint_t); + int __cdecl iswlower(wint_t); + int __cdecl iswdigit(wint_t); + int __cdecl iswxdigit(wint_t); + int __cdecl iswspace(wint_t); + int __cdecl iswpunct(wint_t); + int __cdecl iswalnum(wint_t); + int __cdecl iswprint(wint_t); + int __cdecl iswgraph(wint_t); + int __cdecl iswcntrl(wint_t); + int __cdecl iswascii(wint_t); + int __cdecl isleadbyte(int); + + wchar_t __cdecl towupper(wchar_t); + wchar_t __cdecl towlower(wchar_t); + + int __cdecl iswctype(wint_t, wctype_t); + + + int __cdecl is_wctype(wint_t, wctype_t); + + + +#line 162 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" +#line 163 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 252 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + +#line 254 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 295 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + +#line 297 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + + + +#line 304 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + + + + + + + + + + + + + + + +#line 323 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" + + + + + + +#line 330 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ctype.h" +#line 26 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + +#line 31 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +#line 39 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + +#line 43 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + +#line 47 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +#line 49 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + +#pragma warning(disable:4116) + + + +#line 62 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + +#line 81 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + +#line 85 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef unsigned long POINTER_64_INT; +#line 88 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +#line 90 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\basetsd.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef int LONG32, *PLONG32; +typedef int INT32, *PINT32; + + + + + +typedef unsigned int ULONG32, *PULONG32; +typedef unsigned int DWORD32, *PDWORD32; +typedef unsigned int UINT32, *PUINT32; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef long INT_PTR, *PINT_PTR; +typedef unsigned long UINT_PTR, *PUINT_PTR; + + + + + +typedef unsigned short UHALF_PTR, *PUHALF_PTR; +typedef short HALF_PTR, *PHALF_PTR; + + + + + + + + + + + +#line 144 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\basetsd.h" + + + + + + +typedef UINT_PTR SIZE_T, *PSIZE_T; +typedef INT_PTR SSIZE_T, *PSSIZE_T; + + + + + +typedef __int64 LONG64, *PLONG64; +typedef __int64 INT64, *PINT64; + + + + + + +typedef unsigned __int64 ULONG64, *PULONG64; +typedef unsigned __int64 DWORD64, *PDWORD64; +typedef unsigned __int64 UINT64, *PUINT64; + + + + + +#line 174 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\basetsd.h" +#line 92 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + +#line 99 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + +#line 105 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef void *PVOID; +typedef void * PVOID64; + + + + + + + +#line 116 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + +#line 126 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + +typedef char CHAR; +typedef short SHORT; +typedef long LONG; +#line 138 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + +typedef wchar_t WCHAR; + + + +#line 149 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef WCHAR *PWCHAR; +typedef WCHAR *LPWCH, *PWCH; +typedef const WCHAR *LPCWCH, *PCWCH; +typedef WCHAR *NWPSTR; +typedef WCHAR *LPWSTR, *PWSTR; + +typedef const WCHAR *LPCWSTR, *PCWSTR; + + + + +typedef CHAR *PCHAR; +typedef CHAR *LPCH, *PCH; + +typedef const CHAR *LPCCH, *PCCH; +typedef CHAR *NPSTR; +typedef CHAR *LPSTR, *PSTR; +typedef const CHAR *LPCSTR, *PCSTR; + + + + + + + + + + + + + + + + + + + + + +typedef char TCHAR, *PTCHAR; +typedef unsigned char TBYTE , *PTBYTE ; + +#line 193 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef LPSTR LPTCH, PTCH; +typedef LPSTR PTSTR, LPTSTR; +typedef LPCSTR LPCTSTR; + + +#line 200 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + +typedef SHORT *PSHORT; +typedef LONG *PLONG; + + +typedef void *HANDLE; + + + + +#line 213 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" +typedef HANDLE *PHANDLE; + + + + + +typedef BYTE FCHAR; +typedef WORD FSHORT; +typedef DWORD FLONG; + + + + + +typedef LONG HRESULT; + +#line 230 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + +#line 236 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + +#line 246 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + +#line 260 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + +typedef char CCHAR; +typedef DWORD LCID; +typedef PDWORD PLCID; +typedef WORD LANGID; + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _FLOAT128 { + __int64 LowPart; + __int64 HighPart; +} FLOAT128; + +typedef FLOAT128 *PFLOAT128; + + + + + + +#line 316 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + +typedef __int64 LONGLONG; +typedef unsigned __int64 ULONGLONG; + + + + + + + + + + + + + + +#line 342 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef LONGLONG *PLONGLONG; +typedef ULONGLONG *PULONGLONG; + + + +typedef LONGLONG USN; + + + +#line 353 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" +typedef union _LARGE_INTEGER { + struct { + DWORD LowPart; + LONG HighPart; + }; + struct { + DWORD LowPart; + LONG HighPart; + } u; +#line 363 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + LONGLONG QuadPart; +} LARGE_INTEGER; + +typedef LARGE_INTEGER *PLARGE_INTEGER; + + + + +#line 372 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" +typedef union _ULARGE_INTEGER { + struct { + DWORD LowPart; + DWORD HighPart; + }; + struct { + DWORD LowPart; + DWORD HighPart; + } u; +#line 382 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + ULONGLONG QuadPart; +} ULARGE_INTEGER; + +typedef ULARGE_INTEGER *PULARGE_INTEGER; + + + + + + + + +typedef struct _LUID { + DWORD LowPart; + LONG HighPart; +} LUID, *PLUID; + + +typedef ULONGLONG DWORDLONG; +typedef DWORDLONG *PDWORDLONG; + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 489 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + +ULONGLONG +__stdcall +Int64ShllMod32 ( + ULONGLONG Value, + DWORD ShiftCount + ); + +LONGLONG +__stdcall +Int64ShraMod32 ( + LONGLONG Value, + DWORD ShiftCount + ); + +ULONGLONG +__stdcall +Int64ShrlMod32 ( + ULONGLONG Value, + DWORD ShiftCount + ); + +#pragma warning(disable:4035) + +__inline ULONGLONG +__stdcall +Int64ShllMod32 ( + ULONGLONG Value, + DWORD ShiftCount + ) +{ + __asm { + mov ecx, ShiftCount + mov eax, dword ptr [Value] + mov edx, dword ptr [Value+4] + shld edx, eax, cl + shl eax, cl + } +} + +__inline LONGLONG +__stdcall +Int64ShraMod32 ( + LONGLONG Value, + DWORD ShiftCount + ) +{ + __asm { + mov ecx, ShiftCount + mov eax, dword ptr [Value] + mov edx, dword ptr [Value+4] + shrd eax, edx, cl + sar edx, cl + } +} + +__inline ULONGLONG +__stdcall +Int64ShrlMod32 ( + ULONGLONG Value, + DWORD ShiftCount + ) +{ + __asm { + mov ecx, ShiftCount + mov eax, dword ptr [Value] + mov edx, dword ptr [Value+4] + shrd eax, edx, cl + shr edx, cl + } +} + +#pragma warning(default:4035) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 633 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + +typedef BYTE BOOLEAN; +typedef BOOLEAN *PBOOLEAN; + + + + + +typedef struct _LIST_ENTRY { + struct _LIST_ENTRY *Flink; + struct _LIST_ENTRY *Blink; +} LIST_ENTRY, *PLIST_ENTRY, * PRLIST_ENTRY; + + + + + + +typedef struct _SINGLE_LIST_ENTRY { + struct _SINGLE_LIST_ENTRY *Next; +} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY; + + + + + + + + +typedef struct _GUID { + DWORD Data1; + WORD Data2; + WORD Data3; + BYTE Data4[8]; +} GUID; + +#line 672 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + +typedef struct _OBJECTID { + GUID Lineage; + DWORD Uniquifier; +} OBJECTID; +#line 681 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1049 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1088 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + +typedef UINT_PTR KSPIN_LOCK; +typedef KSPIN_LOCK *PKSPIN_LOCK; + + + + + + + + + + + + + + +#line 1109 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" +struct _TEB * +NtCurrentTeb(void); +#line 1112 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4164) + + +#pragma function(_enable) +#pragma function(_disable) +#line 1510 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +#pragma warning(default:4164) + +#line 1514 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" +#line 1515 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + +#pragma warning (disable:4035) +_inline PVOID GetFiberData( void ) { __asm { + mov eax, fs:[0x10] + mov eax,[eax] + } + } +_inline PVOID GetCurrentFiber( void ) { __asm mov eax, fs:[0x10] } + +#pragma warning (default:4035) +#line 1528 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1561 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + +typedef struct _FLOATING_SAVE_AREA { + DWORD ControlWord; + DWORD StatusWord; + DWORD TagWord; + DWORD ErrorOffset; + DWORD ErrorSelector; + DWORD DataOffset; + DWORD DataSelector; + BYTE RegisterArea[80]; + DWORD Cr0NpxState; +} FLOATING_SAVE_AREA; + +typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA; + + + + + + + + + + + +typedef struct _CONTEXT { + + + + + + + + + + + + + + + + + + + + DWORD ContextFlags; + + + + + + + + DWORD Dr0; + DWORD Dr1; + DWORD Dr2; + DWORD Dr3; + DWORD Dr6; + DWORD Dr7; + + + + + + + FLOATING_SAVE_AREA FloatSave; + + + + + + + DWORD SegGs; + DWORD SegFs; + DWORD SegEs; + DWORD SegDs; + + + + + + + DWORD Edi; + DWORD Esi; + DWORD Ebx; + DWORD Edx; + DWORD Ecx; + DWORD Eax; + + + + + + + DWORD Ebp; + DWORD Eip; + DWORD SegCs; + DWORD EFlags; + DWORD Esp; + DWORD SegSs; + + + + + + + + BYTE ExtendedRegisters[512]; + +} CONTEXT; + + + +typedef CONTEXT *PCONTEXT; + + + +#line 1681 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + +typedef struct _LDT_ENTRY { + WORD LimitLow; + WORD BaseLow; + union { + struct { + BYTE BaseMid; + BYTE Flags1; + BYTE Flags2; + BYTE BaseHi; + } Bytes; + struct { + DWORD BaseMid : 8; + DWORD Type : 5; + DWORD Dpl : 2; + DWORD Pres : 1; + DWORD LimitHi : 4; + DWORD Sys : 1; + DWORD Reserved_0 : 1; + DWORD Default_Big : 1; + DWORD Granularity : 1; + DWORD BaseHi : 8; + } Bits; + } HighWord; +} LDT_ENTRY, *PLDT_ENTRY; + +#line 1712 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2058 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + +#line 2069 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2299 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2528 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + +#line 2544 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _EXCEPTION_RECORD { + DWORD ExceptionCode; + DWORD ExceptionFlags; + struct _EXCEPTION_RECORD *ExceptionRecord; + PVOID ExceptionAddress; + DWORD NumberParameters; + UINT_PTR ExceptionInformation[15]; + } EXCEPTION_RECORD; + +typedef EXCEPTION_RECORD *PEXCEPTION_RECORD; + + + + + +typedef struct _EXCEPTION_POINTERS { + PEXCEPTION_RECORD ExceptionRecord; + PCONTEXT ContextRecord; +} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; +typedef PVOID PACCESS_TOKEN; +typedef PVOID PSECURITY_DESCRIPTOR; +typedef PVOID PSID; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef DWORD ACCESS_MASK; +typedef ACCESS_MASK *PACCESS_MASK; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _GENERIC_MAPPING { + ACCESS_MASK GenericRead; + ACCESS_MASK GenericWrite; + ACCESS_MASK GenericExecute; + ACCESS_MASK GenericAll; +} GENERIC_MAPPING; +typedef GENERIC_MAPPING *PGENERIC_MAPPING; + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#pragma pack(4) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#line 3265 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef struct _LUID_AND_ATTRIBUTES { + LUID Luid; + DWORD Attributes; + } LUID_AND_ATTRIBUTES, * PLUID_AND_ATTRIBUTES; +typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[1]; +typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY; + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 3274 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _SID_IDENTIFIER_AUTHORITY { + BYTE Value[6]; +} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY; +#line 3312 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + +typedef struct _SID { + BYTE Revision; + BYTE SubAuthorityCount; + SID_IDENTIFIER_AUTHORITY IdentifierAuthority; + + + + DWORD SubAuthority[1]; +#line 3325 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" +} SID, *PISID; +#line 3327 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + +typedef enum _SID_NAME_USE { + SidTypeUser = 1, + SidTypeGroup, + SidTypeDomain, + SidTypeAlias, + SidTypeWellKnownGroup, + SidTypeDeletedAccount, + SidTypeInvalid, + SidTypeUnknown, + SidTypeComputer +} SID_NAME_USE, *PSID_NAME_USE; + +typedef struct _SID_AND_ATTRIBUTES { + PSID Sid; + DWORD Attributes; + } SID_AND_ATTRIBUTES, * PSID_AND_ATTRIBUTES; + +typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[1]; +typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _ACL { + BYTE AclRevision; + BYTE Sbz1; + WORD AclSize; + WORD AceCount; + WORD Sbz2; +} ACL; +typedef ACL *PACL; + + + + + + + + + + + + + + + + + + + + + +typedef struct _ACE_HEADER { + BYTE AceType; + BYTE AceFlags; + WORD AceSize; +} ACE_HEADER; +typedef ACE_HEADER *PACE_HEADER; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _ACCESS_ALLOWED_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD SidStart; +} ACCESS_ALLOWED_ACE; + +typedef ACCESS_ALLOWED_ACE *PACCESS_ALLOWED_ACE; + +typedef struct _ACCESS_DENIED_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD SidStart; +} ACCESS_DENIED_ACE; +typedef ACCESS_DENIED_ACE *PACCESS_DENIED_ACE; + +typedef struct _SYSTEM_AUDIT_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD SidStart; +} SYSTEM_AUDIT_ACE; +typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE; + +typedef struct _SYSTEM_ALARM_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD SidStart; +} SYSTEM_ALARM_ACE; +typedef SYSTEM_ALARM_ACE *PSYSTEM_ALARM_ACE; + + + + +typedef struct _ACCESS_ALLOWED_OBJECT_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD Flags; + GUID ObjectType; + GUID InheritedObjectType; + DWORD SidStart; +} ACCESS_ALLOWED_OBJECT_ACE, *PACCESS_ALLOWED_OBJECT_ACE; + +typedef struct _ACCESS_DENIED_OBJECT_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD Flags; + GUID ObjectType; + GUID InheritedObjectType; + DWORD SidStart; +} ACCESS_DENIED_OBJECT_ACE, *PACCESS_DENIED_OBJECT_ACE; + +typedef struct _SYSTEM_AUDIT_OBJECT_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD Flags; + GUID ObjectType; + GUID InheritedObjectType; + DWORD SidStart; +} SYSTEM_AUDIT_OBJECT_ACE, *PSYSTEM_AUDIT_OBJECT_ACE; + +typedef struct _SYSTEM_ALARM_OBJECT_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD Flags; + GUID ObjectType; + GUID InheritedObjectType; + DWORD SidStart; +} SYSTEM_ALARM_OBJECT_ACE, *PSYSTEM_ALARM_OBJECT_ACE; + + + + + + + + + + + + + + + +typedef enum _ACL_INFORMATION_CLASS { + AclRevisionInformation = 1, + AclSizeInformation +} ACL_INFORMATION_CLASS; + + + + + + +typedef struct _ACL_REVISION_INFORMATION { + DWORD AclRevision; +} ACL_REVISION_INFORMATION; +typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION; + + + + + +typedef struct _ACL_SIZE_INFORMATION { + DWORD AceCount; + DWORD AclBytesInUse; + DWORD AclBytesFree; +} ACL_SIZE_INFORMATION; +typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION; + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _SECURITY_DESCRIPTOR_RELATIVE { + BYTE Revision; + BYTE Sbz1; + SECURITY_DESCRIPTOR_CONTROL Control; + DWORD Owner; + DWORD Group; + DWORD Sacl; + DWORD Dacl; + } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE; + +typedef struct _SECURITY_DESCRIPTOR { + BYTE Revision; + BYTE Sbz1; + SECURITY_DESCRIPTOR_CONTROL Control; + PSID Owner; + PSID Group; + PACL Sacl; + PACL Dacl; + + } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _OBJECT_TYPE_LIST { + WORD Level; + WORD Sbz; + GUID *ObjectType; +} OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST; + + + + + + + + + + + + + + + +typedef enum _AUDIT_EVENT_TYPE { + AuditEventObjectAccess, + AuditEventDirectoryServiceAccess +} AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _PRIVILEGE_SET { + DWORD PrivilegeCount; + DWORD Control; + LUID_AND_ATTRIBUTES Privilege[1]; + } PRIVILEGE_SET, * PPRIVILEGE_SET; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef enum _SECURITY_IMPERSONATION_LEVEL { + SecurityAnonymous, + SecurityIdentification, + SecurityImpersonation, + SecurityDelegation + } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef enum _TOKEN_TYPE { + TokenPrimary = 1, + TokenImpersonation + } TOKEN_TYPE; +typedef TOKEN_TYPE *PTOKEN_TYPE; + + + + + + + +typedef enum _TOKEN_INFORMATION_CLASS { + TokenUser = 1, + TokenGroups, + TokenPrivileges, + TokenOwner, + TokenPrimaryGroup, + TokenDefaultDacl, + TokenSource, + TokenType, + TokenImpersonationLevel, + TokenStatistics, + TokenRestrictedSids, + TokenSessionId +} TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS; + + + + + + +typedef struct _TOKEN_USER { + SID_AND_ATTRIBUTES User; +} TOKEN_USER, *PTOKEN_USER; + +typedef struct _TOKEN_GROUPS { + DWORD GroupCount; + SID_AND_ATTRIBUTES Groups[1]; +} TOKEN_GROUPS, *PTOKEN_GROUPS; + + +typedef struct _TOKEN_PRIVILEGES { + DWORD PrivilegeCount; + LUID_AND_ATTRIBUTES Privileges[1]; +} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES; + + +typedef struct _TOKEN_OWNER { + PSID Owner; +} TOKEN_OWNER, *PTOKEN_OWNER; + + +typedef struct _TOKEN_PRIMARY_GROUP { + PSID PrimaryGroup; +} TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP; + + +typedef struct _TOKEN_DEFAULT_DACL { + PACL DefaultDacl; +} TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL; + + + + + +typedef struct _TOKEN_SOURCE { + CHAR SourceName[8]; + LUID SourceIdentifier; +} TOKEN_SOURCE, *PTOKEN_SOURCE; + + +typedef struct _TOKEN_STATISTICS { + LUID TokenId; + LUID AuthenticationId; + LARGE_INTEGER ExpirationTime; + TOKEN_TYPE TokenType; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + DWORD DynamicCharged; + DWORD DynamicAvailable; + DWORD GroupCount; + DWORD PrivilegeCount; + LUID ModifiedId; +} TOKEN_STATISTICS, *PTOKEN_STATISTICS; + + + +typedef struct _TOKEN_CONTROL { + LUID TokenId; + LUID AuthenticationId; + LUID ModifiedId; + TOKEN_SOURCE TokenSource; + } TOKEN_CONTROL, *PTOKEN_CONTROL; + + + + + + + + +typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, + * PSECURITY_CONTEXT_TRACKING_MODE; + + + + + + + +typedef struct _SECURITY_QUALITY_OF_SERVICE { + DWORD Length; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; + BOOLEAN EffectiveOnly; + } SECURITY_QUALITY_OF_SERVICE, * PSECURITY_QUALITY_OF_SERVICE; + + + + + + +typedef struct _SE_IMPERSONATION_STATE { + PACCESS_TOKEN Token; + BOOLEAN CopyOnOpen; + BOOLEAN EffectiveOnly; + SECURITY_IMPERSONATION_LEVEL Level; +} SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE; + + +typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _NT_TIB { + struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; + PVOID StackBase; + PVOID StackLimit; + PVOID SubSystemTib; + union { + PVOID FiberData; + DWORD Version; + }; + PVOID ArbitraryUserPointer; + struct _NT_TIB *Self; +} NT_TIB; +typedef NT_TIB *PNT_TIB; + + + +#line 4366 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + +typedef struct _QUOTA_LIMITS { + SIZE_T PagedPoolLimit; + SIZE_T NonPagedPoolLimit; + DWORD MinimumWorkingSetSize; + DWORD MaximumWorkingSetSize; + SIZE_T PagefileLimit; + LARGE_INTEGER TimeLimit; +} QUOTA_LIMITS; +typedef QUOTA_LIMITS *PQUOTA_LIMITS; + + + +typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION { + LARGE_INTEGER TotalUserTime; + LARGE_INTEGER TotalKernelTime; + LARGE_INTEGER ThisPeriodTotalUserTime; + LARGE_INTEGER ThisPeriodTotalKernelTime; + DWORD TotalPageFaultCount; + DWORD TotalProcesses; + DWORD ActiveProcesses; + DWORD TotalTerminatedProcesses; +} JOBOBJECT_BASIC_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION; + +typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION { + LARGE_INTEGER PerProcessUserTimeLimit; + LARGE_INTEGER PerJobUserTimeLimit; + DWORD LimitFlags; + DWORD MinimumWorkingSetSize; + DWORD MaximumWorkingSetSize; + DWORD ActiveProcessLimit; + DWORD Affinity; + DWORD PriorityClass; +} JOBOBJECT_BASIC_LIMIT_INFORMATION, *PJOBOBJECT_BASIC_LIMIT_INFORMATION; + +typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST { + DWORD NumberOfAssignedProcesses; + DWORD NumberOfProcessIdsInList; + UINT_PTR ProcessIdList[1]; +} JOBOBJECT_BASIC_PROCESS_ID_LIST, *PJOBOBJECT_BASIC_PROCESS_ID_LIST; + +typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS { + DWORD UIRestrictionsClass; +} JOBOBJECT_BASIC_UI_RESTRICTIONS, *PJOBOBJECT_BASIC_UI_RESTRICTIONS; + +typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION { + DWORD SecurityLimitFlags ; + HANDLE JobToken ; + PTOKEN_GROUPS SidsToDisable ; + PTOKEN_PRIVILEGES PrivilegesToDelete ; + PTOKEN_GROUPS RestrictedSids ; +} JOBOBJECT_SECURITY_LIMIT_INFORMATION, *PJOBOBJECT_SECURITY_LIMIT_INFORMATION ; + +typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION { + DWORD EndOfJobTimeAction; +} JOBOBJECT_END_OF_JOB_TIME_INFORMATION, *PJOBOBJECT_END_OF_JOB_TIME_INFORMATION; + +typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT { + PVOID CompletionKey; + HANDLE CompletionPort; +} JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef enum _JOBOBJECTINFOCLASS { + JobObjectBasicAccountingInformation = 1, + JobObjectBasicLimitInformation, + JobObjectBasicProcessIdList, + JobObjectBasicUIRestrictions, + JobObjectSecurityLimitInformation, + JobObjectEndOfJobTimeInformation, + JobObjectAssociateCompletionPortInformation, + MaxJobObjectInfoClass + } JOBOBJECTINFOCLASS; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _MEMORY_BASIC_INFORMATION { + PVOID BaseAddress; + PVOID AllocationBase; + DWORD AllocationProtect; + SIZE_T RegionSize; + DWORD State; + DWORD Protect; + DWORD Type; +} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION; + +typedef struct _MEMORY_BASIC_INFORMATION_VLM { + union { + PVOID64 BaseAddress; + ULONGLONG BaseAddressAsUlongLong; + }; + union { + PVOID64 AllocationBase; + ULONGLONG AllocationBaseAsUlongLong; + }; + ULONGLONG RegionSize; + DWORD AllocationProtect; + DWORD State; + DWORD Protect; + DWORD Type; +} MEMORY_BASIC_INFORMATION_VLM, *PMEMORY_BASIC_INFORMATION_VLM; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _FILE_NOTIFY_INFORMATION { + DWORD NextEntryOffset; + DWORD Action; + DWORD FileNameLength; + WCHAR FileName[1]; +} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION; + + + + + + +typedef union _FILE_SEGMENT_ELEMENT { + PVOID64 Buffer; + ULONGLONG Alignment; +}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT; + + + + + + + + + + + +typedef struct _REPARSE_DATA_BUFFER { + DWORD ReparseTag; + WORD ReparseDataLength; + WORD Reserved; + union { + struct { + WORD SubstituteNameOffset; + WORD SubstituteNameLength; + WORD PrintNameOffset; + WORD PrintNameLength; + WCHAR PathBuffer[1]; + } SymbolicLinkReparseBuffer; + struct { + WORD SubstituteNameOffset; + WORD SubstituteNameLength; + WORD PrintNameOffset; + WORD PrintNameLength; + WCHAR PathBuffer[1]; + } MountPointReparseBuffer; + struct { + BYTE DataBuffer[1]; + } GenericReparseBuffer; + }; +} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; + + + + + + + + + + + + +typedef struct _REPARSE_GUID_DATA_BUFFER { + DWORD ReparseTag; + WORD ReparseDataLength; + WORD Reserved; + GUID ReparseGuid; + struct { + BYTE DataBuffer[1]; + } GenericReparseBuffer; +} REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER; + + + + + + + + + +typedef struct _REPARSE_POINT_INFORMATION { + WORD ReparseDataLength; + WORD UnparsedNameLength; +} REPARSE_POINT_INFORMATION, *PREPARSE_POINT_INFORMATION; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef DWORD EXECUTION_STATE; + +typedef enum { + LT_DONT_CARE, + LT_LOWEST_LATENCY +} LATENCY_TIME; + + +typedef struct _POWER_DEVICE_TIMEOUTS { + DWORD ConservationIdleTime; + DWORD PerformanceIdleTime; +} POWER_DEVICE_TIMEOUTS, *PPOWER_DEVICE_TIMEOUTS; + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#pragma pack(4) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#line 4950 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#pragma pack(2) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#line 4958 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + +#line 4968 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef struct _IMAGE_DOS_HEADER { + WORD e_magic; + WORD e_cblp; + WORD e_cp; + WORD e_crlc; + WORD e_cparhdr; + WORD e_minalloc; + WORD e_maxalloc; + WORD e_ss; + WORD e_sp; + WORD e_csum; + WORD e_ip; + WORD e_cs; + WORD e_lfarlc; + WORD e_ovno; + WORD e_res[4]; + WORD e_oemid; + WORD e_oeminfo; + WORD e_res2[10]; + LONG e_lfanew; + } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; + +typedef struct _IMAGE_OS2_HEADER { + WORD ne_magic; + CHAR ne_ver; + CHAR ne_rev; + WORD ne_enttab; + WORD ne_cbenttab; + LONG ne_crc; + WORD ne_flags; + WORD ne_autodata; + WORD ne_heap; + WORD ne_stack; + LONG ne_csip; + LONG ne_sssp; + WORD ne_cseg; + WORD ne_cmod; + WORD ne_cbnrestab; + WORD ne_segtab; + WORD ne_rsrctab; + WORD ne_restab; + WORD ne_modtab; + WORD ne_imptab; + LONG ne_nrestab; + WORD ne_cmovent; + WORD ne_align; + WORD ne_cres; + BYTE ne_exetyp; + BYTE ne_flagsothers; + WORD ne_pretthunks; + WORD ne_psegrefbytes; + WORD ne_swaparea; + WORD ne_expver; + } IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER; + +typedef struct _IMAGE_VXD_HEADER { + WORD e32_magic; + BYTE e32_border; + BYTE e32_worder; + DWORD e32_level; + WORD e32_cpu; + WORD e32_os; + DWORD e32_ver; + DWORD e32_mflags; + DWORD e32_mpages; + DWORD e32_startobj; + DWORD e32_eip; + DWORD e32_stackobj; + DWORD e32_esp; + DWORD e32_pagesize; + DWORD e32_lastpagesize; + DWORD e32_fixupsize; + DWORD e32_fixupsum; + DWORD e32_ldrsize; + DWORD e32_ldrsum; + DWORD e32_objtab; + DWORD e32_objcnt; + DWORD e32_objmap; + DWORD e32_itermap; + DWORD e32_rsrctab; + DWORD e32_rsrccnt; + DWORD e32_restab; + DWORD e32_enttab; + DWORD e32_dirtab; + DWORD e32_dircnt; + DWORD e32_fpagetab; + DWORD e32_frectab; + DWORD e32_impmod; + DWORD e32_impmodcnt; + DWORD e32_impproc; + DWORD e32_pagesum; + DWORD e32_datapage; + DWORD e32_preload; + DWORD e32_nrestab; + DWORD e32_cbnrestab; + DWORD e32_nressum; + DWORD e32_autodata; + DWORD e32_debuginfo; + DWORD e32_debuglen; + DWORD e32_instpreload; + DWORD e32_instdemand; + DWORD e32_heapsize; + BYTE e32_res3[12]; + DWORD e32_winresoff; + DWORD e32_winreslen; + WORD e32_devid; + WORD e32_ddkver; + } IMAGE_VXD_HEADER, *PIMAGE_VXD_HEADER; + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 5080 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" +#line 5081 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + +typedef struct _IMAGE_FILE_HEADER { + WORD Machine; + WORD NumberOfSections; + DWORD TimeDateStamp; + DWORD PointerToSymbolTable; + DWORD NumberOfSymbols; + WORD SizeOfOptionalHeader; + WORD Characteristics; +} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _IMAGE_DATA_DIRECTORY { + DWORD VirtualAddress; + DWORD Size; +} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; + + + + + + + +typedef struct _IMAGE_OPTIONAL_HEADER { + + + + + WORD Magic; + BYTE MajorLinkerVersion; + BYTE MinorLinkerVersion; + DWORD SizeOfCode; + DWORD SizeOfInitializedData; + DWORD SizeOfUninitializedData; + DWORD AddressOfEntryPoint; + DWORD BaseOfCode; + DWORD BaseOfData; + + + + + + DWORD ImageBase; + DWORD SectionAlignment; + DWORD FileAlignment; + WORD MajorOperatingSystemVersion; + WORD MinorOperatingSystemVersion; + WORD MajorImageVersion; + WORD MinorImageVersion; + WORD MajorSubsystemVersion; + WORD MinorSubsystemVersion; + DWORD Win32VersionValue; + DWORD SizeOfImage; + DWORD SizeOfHeaders; + DWORD CheckSum; + WORD Subsystem; + WORD DllCharacteristics; + DWORD SizeOfStackReserve; + DWORD SizeOfStackCommit; + DWORD SizeOfHeapReserve; + DWORD SizeOfHeapCommit; + DWORD LoaderFlags; + DWORD NumberOfRvaAndSizes; + IMAGE_DATA_DIRECTORY DataDirectory[16]; +} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; + +typedef struct _IMAGE_ROM_OPTIONAL_HEADER { + WORD Magic; + BYTE MajorLinkerVersion; + BYTE MinorLinkerVersion; + DWORD SizeOfCode; + DWORD SizeOfInitializedData; + DWORD SizeOfUninitializedData; + DWORD AddressOfEntryPoint; + DWORD BaseOfCode; + DWORD BaseOfData; + DWORD BaseOfBss; + DWORD GprMask; + DWORD CprMask[4]; + DWORD GpValue; +} IMAGE_ROM_OPTIONAL_HEADER, *PIMAGE_ROM_OPTIONAL_HEADER; + +typedef struct _IMAGE_OPTIONAL_HEADER64 { + WORD Magic; + BYTE MajorLinkerVersion; + BYTE MinorLinkerVersion; + DWORD SizeOfCode; + DWORD SizeOfInitializedData; + DWORD SizeOfUninitializedData; + DWORD AddressOfEntryPoint; + DWORD BaseOfCode; + ULONGLONG ImageBase; + DWORD SectionAlignment; + DWORD FileAlignment; + WORD MajorOperatingSystemVersion; + WORD MinorOperatingSystemVersion; + WORD MajorImageVersion; + WORD MinorImageVersion; + WORD MajorSubsystemVersion; + WORD MinorSubsystemVersion; + DWORD Win32VersionValue; + DWORD SizeOfImage; + DWORD SizeOfHeaders; + DWORD CheckSum; + WORD Subsystem; + WORD DllCharacteristics; + ULONGLONG SizeOfStackReserve; + ULONGLONG SizeOfStackCommit; + ULONGLONG SizeOfHeapReserve; + ULONGLONG SizeOfHeapCommit; + DWORD LoaderFlags; + DWORD NumberOfRvaAndSizes; + IMAGE_DATA_DIRECTORY DataDirectory[16]; +} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64; + + + + + + + + + + + + + + + + +typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER; +typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER; + + +#line 5262 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef struct _IMAGE_NT_HEADERS64 { + DWORD Signature; + IMAGE_FILE_HEADER FileHeader; + IMAGE_OPTIONAL_HEADER64 OptionalHeader; +} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64; + +typedef struct _IMAGE_NT_HEADERS { + DWORD Signature; + IMAGE_FILE_HEADER FileHeader; + IMAGE_OPTIONAL_HEADER32 OptionalHeader; +} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32; + +typedef struct _IMAGE_ROM_HEADERS { + IMAGE_FILE_HEADER FileHeader; + IMAGE_ROM_OPTIONAL_HEADER OptionalHeader; +} IMAGE_ROM_HEADERS, *PIMAGE_ROM_HEADERS; + + + + + + + + + + + + + + + + + + +typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS; +typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; + +#line 5301 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _IMAGE_SECTION_HEADER { + BYTE Name[8]; + union { + DWORD PhysicalAddress; + DWORD VirtualSize; + } Misc; + DWORD VirtualAddress; + DWORD SizeOfRawData; + DWORD PointerToRawData; + DWORD PointerToRelocations; + DWORD PointerToLinenumbers; + WORD NumberOfRelocations; + WORD NumberOfLinenumbers; + DWORD Characteristics; +} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#pragma pack(2) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#line 5427 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" +#line 5428 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + +typedef struct _IMAGE_SYMBOL { + union { + BYTE ShortName[8]; + struct { + DWORD Short; + DWORD Long; + } Name; + PBYTE LongName[2]; + } N; + DWORD Value; + SHORT SectionNumber; + WORD Type; + BYTE StorageClass; + BYTE NumberOfAuxSymbols; +} IMAGE_SYMBOL; +typedef IMAGE_SYMBOL *PIMAGE_SYMBOL; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5545 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + +#line 5550 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + +#line 5556 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + +#line 5561 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + +#line 5565 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + +#line 5568 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + +typedef union _IMAGE_AUX_SYMBOL { + struct { + DWORD TagIndex; + union { + struct { + WORD Linenumber; + WORD Size; + } LnSz; + DWORD TotalSize; + } Misc; + union { + struct { + DWORD PointerToLinenumber; + DWORD PointerToNextFunction; + } Function; + struct { + WORD Dimension[4]; + } Array; + } FcnAry; + WORD TvIndex; + } Sym; + struct { + BYTE Name[18]; + } File; + struct { + DWORD Length; + WORD NumberOfRelocations; + WORD NumberOfLinenumbers; + DWORD CheckSum; + SHORT Number; + BYTE Selection; + } Section; +} IMAGE_AUX_SYMBOL; +typedef IMAGE_AUX_SYMBOL *PIMAGE_AUX_SYMBOL; + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _IMAGE_RELOCATION { + union { + DWORD VirtualAddress; + DWORD RelocCount; + }; + DWORD SymbolTableIndex; + WORD Type; +} IMAGE_RELOCATION; +typedef IMAGE_RELOCATION *PIMAGE_RELOCATION; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _IMAGE_LINENUMBER { + union { + DWORD SymbolTableIndex; + DWORD VirtualAddress; + } Type; + WORD Linenumber; +} IMAGE_LINENUMBER; +typedef IMAGE_LINENUMBER *PIMAGE_LINENUMBER; + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 5864 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" +#line 5865 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + +typedef struct _IMAGE_BASE_RELOCATION { + DWORD VirtualAddress; + DWORD SizeOfBlock; + +} IMAGE_BASE_RELOCATION; +typedef IMAGE_BASE_RELOCATION * PIMAGE_BASE_RELOCATION; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER { + BYTE Name[16]; + BYTE Date[12]; + BYTE UserID[6]; + BYTE GroupID[6]; + BYTE Mode[8]; + BYTE Size[10]; + BYTE EndHeader[2]; +} IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER; + + + + + + + + + + + +typedef struct _IMAGE_EXPORT_DIRECTORY { + DWORD Characteristics; + DWORD TimeDateStamp; + WORD MajorVersion; + WORD MinorVersion; + DWORD Name; + DWORD Base; + DWORD NumberOfFunctions; + DWORD NumberOfNames; + DWORD AddressOfFunctions; + DWORD AddressOfNames; + DWORD AddressOfNameOrdinals; +} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY; + + + + + +typedef struct _IMAGE_IMPORT_BY_NAME { + WORD Hint; + BYTE Name[1]; +} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME; + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#pragma pack(8) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#line 5953 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef struct _IMAGE_THUNK_DATA64 { + union { + PBYTE ForwarderString; + PDWORD Function; + ULONGLONG Ordinal; + PIMAGE_IMPORT_BY_NAME AddressOfData; + } u1; +} IMAGE_THUNK_DATA64; +typedef IMAGE_THUNK_DATA64 * PIMAGE_THUNK_DATA64; + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 5965 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef struct _IMAGE_THUNK_DATA32 { + union { + PBYTE ForwarderString; + PDWORD Function; + DWORD Ordinal; + PIMAGE_IMPORT_BY_NAME AddressOfData; + } u1; +} IMAGE_THUNK_DATA32; +typedef IMAGE_THUNK_DATA32 * PIMAGE_THUNK_DATA32; + + + + + + + + + + + + +typedef void +(__stdcall *PIMAGE_TLS_CALLBACK) ( + PVOID DllHandle, + DWORD Reason, + PVOID Reserved + ); + +typedef struct _IMAGE_TLS_DIRECTORY64 { + ULONGLONG StartAddressOfRawData; + ULONGLONG EndAddressOfRawData; + PDWORD AddressOfIndex; + PIMAGE_TLS_CALLBACK *AddressOfCallBacks; + DWORD SizeOfZeroFill; + DWORD Characteristics; +} IMAGE_TLS_DIRECTORY64; +typedef IMAGE_TLS_DIRECTORY64 * PIMAGE_TLS_DIRECTORY64; + +typedef struct _IMAGE_TLS_DIRECTORY32 { + DWORD StartAddressOfRawData; + DWORD EndAddressOfRawData; + PDWORD AddressOfIndex; + PIMAGE_TLS_CALLBACK *AddressOfCallBacks; + DWORD SizeOfZeroFill; + DWORD Characteristics; +} IMAGE_TLS_DIRECTORY32; +typedef IMAGE_TLS_DIRECTORY32 * PIMAGE_TLS_DIRECTORY32; + + + + + + + + + + + + +typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA; +typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA; + +typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY; +typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY; +#line 6031 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef struct _IMAGE_IMPORT_DESCRIPTOR { + union { + DWORD Characteristics; + DWORD OriginalFirstThunk; + }; + DWORD TimeDateStamp; + + + + + DWORD ForwarderChain; + DWORD Name; + DWORD FirstThunk; +} IMAGE_IMPORT_DESCRIPTOR; +typedef IMAGE_IMPORT_DESCRIPTOR *PIMAGE_IMPORT_DESCRIPTOR; + + + + + +typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR { + DWORD TimeDateStamp; + WORD OffsetModuleName; + WORD NumberOfModuleForwarderRefs; + +} IMAGE_BOUND_IMPORT_DESCRIPTOR, *PIMAGE_BOUND_IMPORT_DESCRIPTOR; + +typedef struct _IMAGE_BOUND_FORWARDER_REF { + DWORD TimeDateStamp; + WORD OffsetModuleName; + WORD Reserved; +} IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _IMAGE_RESOURCE_DIRECTORY { + DWORD Characteristics; + DWORD TimeDateStamp; + WORD MajorVersion; + WORD MinorVersion; + WORD NumberOfNamedEntries; + WORD NumberOfIdEntries; + +} IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY; + + + + + + + + + + + + + + + + + + +typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY { + union { + struct { + DWORD NameOffset:31; + DWORD NameIsString:1; + }; + DWORD Name; + WORD Id; + }; + union { + DWORD OffsetToData; + struct { + DWORD OffsetToDirectory:31; + DWORD DataIsDirectory:1; + }; + }; +} IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY; + + + + + + + + + + +typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING { + WORD Length; + CHAR NameString[ 1 ]; +} IMAGE_RESOURCE_DIRECTORY_STRING, *PIMAGE_RESOURCE_DIRECTORY_STRING; + + +typedef struct _IMAGE_RESOURCE_DIR_STRING_U { + WORD Length; + WCHAR NameString[ 1 ]; +} IMAGE_RESOURCE_DIR_STRING_U, *PIMAGE_RESOURCE_DIR_STRING_U; + + + + + + + + + + + +typedef struct _IMAGE_RESOURCE_DATA_ENTRY { + DWORD OffsetToData; + DWORD Size; + DWORD CodePage; + DWORD Reserved; +} IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY; + + + + + +typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY { + DWORD Characteristics; + DWORD TimeDateStamp; + WORD MajorVersion; + WORD MinorVersion; + DWORD GlobalFlagsClear; + DWORD GlobalFlagsSet; + DWORD CriticalSectionDefaultTimeout; + DWORD DeCommitFreeBlockThreshold; + DWORD DeCommitTotalFreeThreshold; + PVOID LockPrefixTable; + DWORD MaximumAllocationSize; + DWORD VirtualMemoryThreshold; + DWORD ProcessHeapFlags; + DWORD ProcessAffinityMask; + WORD CSDVersion; + WORD Reserved1; + PVOID EditList; + DWORD Reserved[ 1 ]; +} IMAGE_LOAD_CONFIG_DIRECTORY, *PIMAGE_LOAD_CONFIG_DIRECTORY; + + + + + + + + + +typedef struct _IMAGE_IA64_RUNTIME_FUNCTION_ENTRY { + DWORD BeginAddress; + DWORD EndAddress; + DWORD UnwindInfoAddress; +} IMAGE_IA64_RUNTIME_FUNCTION_ENTRY, *PIMAGE_IA64_RUNTIME_FUNCTION_ENTRY; + + + + + + + + +typedef struct _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY { + DWORD BeginAddress; + DWORD EndAddress; + DWORD ExceptionHandler; + DWORD HandlerData; + DWORD PrologEndAddress; +} IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY, *PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY; + +typedef struct _IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY { + ULONGLONG BeginAddress; + ULONGLONG EndAddress; + ULONGLONG ExceptionHandler; + ULONGLONG HandlerData; + ULONGLONG PrologEndAddress; +} IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY, *PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY; + +typedef IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY IMAGE_AXP64_RUNTIME_FUNCTION_ENTRY; +typedef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY PIMAGE_AXP64_RUNTIME_FUNCTION_ENTRY; + + + + + +typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY { + DWORD FuncStart; + DWORD PrologLen : 8; + DWORD FuncLen : 22; + DWORD ThirtyTwoBit : 1; + DWORD ExceptionFlag : 1; +} IMAGE_CE_RUNTIME_FUNCTION_ENTRY, * PIMAGE_CE_RUNTIME_FUNCTION_ENTRY; + + + + + + +#line 6263 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY; +typedef PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY; + +#line 6268 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + +typedef struct _IMAGE_DEBUG_DIRECTORY { + DWORD Characteristics; + DWORD TimeDateStamp; + WORD MajorVersion; + WORD MinorVersion; + DWORD Type; + DWORD SizeOfData; + DWORD AddressOfRawData; + DWORD PointerToRawData; +} IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY; + + + + + + + + + + + + + + +typedef struct _IMAGE_COFF_SYMBOLS_HEADER { + DWORD NumberOfSymbols; + DWORD LvaToFirstSymbol; + DWORD NumberOfLinenumbers; + DWORD LvaToFirstLinenumber; + DWORD RvaToFirstByteOfCode; + DWORD RvaToLastByteOfCode; + DWORD RvaToFirstByteOfData; + DWORD RvaToLastByteOfData; +} IMAGE_COFF_SYMBOLS_HEADER, *PIMAGE_COFF_SYMBOLS_HEADER; + + + + + + +typedef struct _FPO_DATA { + DWORD ulOffStart; + DWORD cbProcSize; + DWORD cdwLocals; + WORD cdwParams; + WORD cbProlog : 8; + WORD cbRegs : 3; + WORD fHasSEH : 1; + WORD fUseBP : 1; + WORD reserved : 1; + WORD cbFrame : 2; +} FPO_DATA, *PFPO_DATA; + + + + + +typedef struct _IMAGE_DEBUG_MISC { + DWORD DataType; + DWORD Length; + + BOOLEAN Unicode; + BYTE Reserved[ 3 ]; + BYTE Data[ 1 ]; +} IMAGE_DEBUG_MISC, *PIMAGE_DEBUG_MISC; + + + + + + + + + + + + + + + + +#line 6355 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef struct _IMAGE_FUNCTION_ENTRY { + DWORD StartingAddress; + DWORD EndingAddress; + DWORD EndOfPrologue; +} IMAGE_FUNCTION_ENTRY, *PIMAGE_FUNCTION_ENTRY; + +#line 6363 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" +typedef struct _IMAGE_FUNCTION_ENTRY64 { + ULONGLONG StartingAddress; + ULONGLONG EndingAddress; + ULONGLONG EndOfPrologue; +} IMAGE_FUNCTION_ENTRY64, *PIMAGE_FUNCTION_ENTRY64; + + + + + + + + + + + + + + + + + + + + + +typedef struct _IMAGE_SEPARATE_DEBUG_HEADER { + WORD Signature; + WORD Flags; + WORD Machine; + WORD Characteristics; + DWORD TimeDateStamp; + DWORD CheckSum; + DWORD ImageBase; + DWORD SizeOfImage; + DWORD NumberOfSections; + DWORD ExportedNamesSize; + DWORD DebugDirectorySize; + DWORD SectionAlignment; + DWORD Reserved[2]; +} IMAGE_SEPARATE_DEBUG_HEADER, *PIMAGE_SEPARATE_DEBUG_HEADER; + + + + + +#line 6410 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + +typedef struct _ImageArchitectureHeader { + unsigned int AmaskValue: 1; + + int :7; + unsigned int AmaskShift: 8; + int :16; + DWORD FirstEntryRVA; +} IMAGE_ARCHITECTURE_HEADER, *PIMAGE_ARCHITECTURE_HEADER; + +typedef struct _ImageArchitectureEntry { + DWORD FixupInstRVA; + DWORD NewInst; +} IMAGE_ARCHITECTURE_ENTRY, *PIMAGE_ARCHITECTURE_ENTRY; + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 6438 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + +typedef struct IMPORT_OBJECT_HEADER { + WORD Sig1; + WORD Sig2; + WORD Version; + WORD Machine; + DWORD TimeDateStamp; + DWORD SizeOfData; + + union { + WORD Ordinal; + WORD Hint; + }; + + WORD Type : 2; + WORD NameType : 3; + WORD Reserved : 11; +} IMPORT_OBJECT_HEADER; + +typedef enum IMPORT_OBJECT_TYPE +{ + IMPORT_OBJECT_CODE = 0, + IMPORT_OBJECT_DATA = 1, + IMPORT_OBJECT_CONST = 2, +} IMPORT_OBJECT_TYPE; + +typedef enum IMPORT_OBJECT_NAME_TYPE +{ + IMPORT_OBJECT_ORDINAL = 0, + IMPORT_OBJECT_NAME = 1, + IMPORT_OBJECT_NAME_NO_PREFIX = 2, + IMPORT_OBJECT_NAME_UNDECORATE = 3, + +} IMPORT_OBJECT_NAME_TYPE; + + + + + + + + + + + + + + +#line 6494 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +SIZE_T +__stdcall +RtlCompareMemory ( + const void *Source1, + const void *Source2, + SIZE_T Length + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6597 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + +#line 6605 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6636 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" + +typedef struct _MESSAGE_RESOURCE_ENTRY { + WORD Length; + WORD Flags; + BYTE Text[ 1 ]; +} MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY; + + + +typedef struct _MESSAGE_RESOURCE_BLOCK { + DWORD LowId; + DWORD HighId; + DWORD OffsetToEntries; +} MESSAGE_RESOURCE_BLOCK, *PMESSAGE_RESOURCE_BLOCK; + +typedef struct _MESSAGE_RESOURCE_DATA { + DWORD NumberOfBlocks; + MESSAGE_RESOURCE_BLOCK Blocks[ 1 ]; +} MESSAGE_RESOURCE_DATA, *PMESSAGE_RESOURCE_DATA; + + +typedef struct _RTL_CRITICAL_SECTION_DEBUG { + WORD Type; + WORD CreatorBackTraceIndex; + struct _RTL_CRITICAL_SECTION *CriticalSection; + LIST_ENTRY ProcessLocksList; + DWORD EntryCount; + DWORD ContentionCount; + DWORD Spare[ 2 ]; +} RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG; + + + + +typedef struct _RTL_CRITICAL_SECTION { + PRTL_CRITICAL_SECTION_DEBUG DebugInfo; + + + + + + + LONG LockCount; + LONG RecursionCount; + HANDLE OwningThread; + HANDLE LockSemaphore; + DWORD SpinCount; +} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION; + + + + + + + + + + +typedef void (__stdcall * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN ); +typedef void (__stdcall * WORKERCALLBACKFUNC) (PVOID ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _EVENTLOGRECORD { + DWORD Length; + DWORD Reserved; + DWORD RecordNumber; + DWORD TimeGenerated; + DWORD TimeWritten; + DWORD EventID; + WORD EventType; + WORD NumStrings; + WORD EventCategory; + WORD ReservedFlags; + DWORD ClosingRecordNumber; + DWORD StringOffset; + DWORD UserSidLength; + DWORD UserSidOffset; + DWORD DataLength; + DWORD DataOffset; + + + + + + + + + + + +} EVENTLOGRECORD, *PEVENTLOGRECORD; + + + + + +#pragma warning(disable : 4200) +typedef struct _EVENTSFORLOGFILE{ + DWORD ulSize; + WCHAR szLogicalLogFile[256]; + DWORD ulNumRecords; + EVENTLOGRECORD pEventLogRecords[]; +}EVENTSFORLOGFILE, *PEVENTSFORLOGFILE; + +typedef struct _PACKEDEVENTINFO{ + DWORD ulSize; + DWORD ulNumEventsForLogFile; + DWORD ulOffsets[]; +}PACKEDEVENTINFO, *PPACKEDEVENTINFO; + +#pragma warning(default : 4200) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef enum _CM_SERVICE_NODE_TYPE { + DriverType = 0x00000001, + FileSystemType = 0x00000002, + Win32ServiceOwnProcess = 0x00000010, + Win32ServiceShareProcess = 0x00000020, + AdapterType = 0x00000004, + RecognizerType = 0x00000008 +} SERVICE_NODE_TYPE; + +typedef enum _CM_SERVICE_LOAD_TYPE { + BootLoad = 0x00000000, + SystemLoad = 0x00000001, + AutoLoad = 0x00000002, + DemandLoad = 0x00000003, + DisableLoad = 0x00000004 +} SERVICE_LOAD_TYPE; + +typedef enum _CM_ERROR_CONTROL_TYPE { + IgnoreError = 0x00000000, + NormalError = 0x00000001, + SevereError = 0x00000002, + CriticalError = 0x00000003 +} SERVICE_ERROR_TYPE; + + + + + + + + + + +typedef struct _TAPE_ERASE { + DWORD Type; + BOOLEAN Immediate; +} TAPE_ERASE, *PTAPE_ERASE; + + + + + + + + + + + + +typedef struct _TAPE_PREPARE { + DWORD Operation; + BOOLEAN Immediate; +} TAPE_PREPARE, *PTAPE_PREPARE; + + + + + + + + + + +typedef struct _TAPE_WRITE_MARKS { + DWORD Type; + DWORD Count; + BOOLEAN Immediate; +} TAPE_WRITE_MARKS, *PTAPE_WRITE_MARKS; + + + + + + + + + +typedef struct _TAPE_GET_POSITION { + DWORD Type; + DWORD Partition; + LARGE_INTEGER Offset; +} TAPE_GET_POSITION, *PTAPE_GET_POSITION; + + + + + + + + + + + + + + + + +typedef struct _TAPE_SET_POSITION { + DWORD Method; + DWORD Partition; + LARGE_INTEGER Offset; + BOOLEAN Immediate; +} TAPE_SET_POSITION, *PTAPE_SET_POSITION; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _TAPE_GET_DRIVE_PARAMETERS { + BOOLEAN ECC; + BOOLEAN Compression; + BOOLEAN DataPadding; + BOOLEAN ReportSetmarks; + DWORD DefaultBlockSize; + DWORD MaximumBlockSize; + DWORD MinimumBlockSize; + DWORD MaximumPartitionCount; + DWORD FeaturesLow; + DWORD FeaturesHigh; + DWORD EOTWarningZoneSize; +} TAPE_GET_DRIVE_PARAMETERS, *PTAPE_GET_DRIVE_PARAMETERS; + + + + + +typedef struct _TAPE_SET_DRIVE_PARAMETERS { + BOOLEAN ECC; + BOOLEAN Compression; + BOOLEAN DataPadding; + BOOLEAN ReportSetmarks; + DWORD EOTWarningZoneSize; +} TAPE_SET_DRIVE_PARAMETERS, *PTAPE_SET_DRIVE_PARAMETERS; + + + + + +typedef struct _TAPE_GET_MEDIA_PARAMETERS { + LARGE_INTEGER Capacity; + LARGE_INTEGER Remaining; + DWORD BlockSize; + DWORD PartitionCount; + BOOLEAN WriteProtected; +} TAPE_GET_MEDIA_PARAMETERS, *PTAPE_GET_MEDIA_PARAMETERS; + + + + + +typedef struct _TAPE_SET_MEDIA_PARAMETERS { + DWORD BlockSize; +} TAPE_SET_MEDIA_PARAMETERS, *PTAPE_SET_MEDIA_PARAMETERS; + + + + + + + + + +typedef struct _TAPE_CREATE_PARTITION { + DWORD Method; + DWORD Count; + DWORD Size; +} TAPE_CREATE_PARTITION, *PTAPE_CREATE_PARTITION; + + + + + + +#line 7223 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnt.h" +#line 167 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" +#line 168 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + +typedef UINT WPARAM; +typedef LONG LPARAM; +typedef LONG LRESULT; + + + + + +#line 179 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + +#line 183 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + +#line 185 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + + + + + + + + +struct HWND__ { int unused; }; typedef struct HWND__ *HWND; +struct HHOOK__ { int unused; }; typedef struct HHOOK__ *HHOOK; + + + +#line 201 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + +typedef WORD ATOM; + +typedef HANDLE *SPHANDLE; +typedef HANDLE *LPHANDLE; +typedef HANDLE HGLOBAL; +typedef HANDLE HLOCAL; +typedef HANDLE GLOBALHANDLE; +typedef HANDLE LOCALHANDLE; + +typedef int ( __stdcall *FARPROC)(); +typedef int ( __stdcall *NEARPROC)(); +typedef int (__stdcall *PROC)(); + + + + +#line 219 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + + +typedef void * HGDIOBJ; + + +#line 226 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" +#line 227 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + +struct HACCEL__ { int unused; }; typedef struct HACCEL__ *HACCEL; +#line 231 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + +struct HBITMAP__ { int unused; }; typedef struct HBITMAP__ *HBITMAP; +struct HBRUSH__ { int unused; }; typedef struct HBRUSH__ *HBRUSH; +#line 235 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + +struct HCOLORSPACE__ { int unused; }; typedef struct HCOLORSPACE__ *HCOLORSPACE; +#line 238 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + +struct HDC__ { int unused; }; typedef struct HDC__ *HDC; +#line 241 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" +struct HGLRC__ { int unused; }; typedef struct HGLRC__ *HGLRC; +struct HDESK__ { int unused; }; typedef struct HDESK__ *HDESK; +struct HENHMETAFILE__ { int unused; }; typedef struct HENHMETAFILE__ *HENHMETAFILE; + +struct HFONT__ { int unused; }; typedef struct HFONT__ *HFONT; +#line 247 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" +struct HICON__ { int unused; }; typedef struct HICON__ *HICON; + +struct HMENU__ { int unused; }; typedef struct HMENU__ *HMENU; +#line 251 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" +struct HMETAFILE__ { int unused; }; typedef struct HMETAFILE__ *HMETAFILE; +struct HINSTANCE__ { int unused; }; typedef struct HINSTANCE__ *HINSTANCE; +typedef HINSTANCE HMODULE; + +struct HPALETTE__ { int unused; }; typedef struct HPALETTE__ *HPALETTE; +struct HPEN__ { int unused; }; typedef struct HPEN__ *HPEN; +#line 258 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" +struct HRGN__ { int unused; }; typedef struct HRGN__ *HRGN; +struct HRSRC__ { int unused; }; typedef struct HRSRC__ *HRSRC; +struct HSTR__ { int unused; }; typedef struct HSTR__ *HSTR; +struct HTASK__ { int unused; }; typedef struct HTASK__ *HTASK; +struct HWINSTA__ { int unused; }; typedef struct HWINSTA__ *HWINSTA; +struct HKL__ { int unused; }; typedef struct HKL__ *HKL; + + + + + + + +#line 272 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + + +typedef int HFILE; +typedef HICON HCURSOR; + + + +#line 280 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + +typedef DWORD COLORREF; +typedef DWORD *LPCOLORREF; + + + +typedef struct tagRECT +{ + LONG left; + LONG top; + LONG right; + LONG bottom; +} RECT, *PRECT, *NPRECT, *LPRECT; + +typedef const RECT * LPCRECT; + +typedef struct _RECTL +{ + LONG left; + LONG top; + LONG right; + LONG bottom; +} RECTL, *PRECTL, *LPRECTL; + +typedef const RECTL * LPCRECTL; + +typedef struct tagPOINT +{ + LONG x; + LONG y; +} POINT, *PPOINT, *NPPOINT, *LPPOINT; + +typedef struct _POINTL +{ + LONG x; + LONG y; +} POINTL, *PPOINTL; + +typedef struct tagSIZE +{ + LONG cx; + LONG cy; +} SIZE, *PSIZE, *LPSIZE; + +typedef SIZE SIZEL; +typedef SIZE *PSIZEL, *LPSIZEL; + +typedef struct tagPOINTS +{ + + SHORT x; + SHORT y; + + + +#line 336 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" +} POINTS, *PPOINTS, *LPPOINTS; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 374 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windef.h" + +#line 164 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + +#line 31 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 109 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 157 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _OVERLAPPED { + DWORD Internal; + DWORD InternalHigh; + DWORD Offset; + DWORD OffsetHigh; + HANDLE hEvent; +} OVERLAPPED, *LPOVERLAPPED; + +typedef struct _SECURITY_ATTRIBUTES { + DWORD nLength; + LPVOID lpSecurityDescriptor; + BOOL bInheritHandle; +} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; + +typedef struct _PROCESS_INFORMATION { + HANDLE hProcess; + HANDLE hThread; + DWORD dwProcessId; + DWORD dwThreadId; +} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION; + + + + + +typedef struct _FILETIME { + DWORD dwLowDateTime; + DWORD dwHighDateTime; +} FILETIME, *PFILETIME, *LPFILETIME; + + + + + +typedef struct _SYSTEMTIME { + WORD wYear; + WORD wMonth; + WORD wDayOfWeek; + WORD wDay; + WORD wHour; + WORD wMinute; + WORD wSecond; + WORD wMilliseconds; +} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME; + +typedef DWORD (__stdcall *PTHREAD_START_ROUTINE)( + LPVOID lpThreadParameter + ); +typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE; + + + + + + +#line 271 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +typedef RTL_CRITICAL_SECTION CRITICAL_SECTION; +typedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION; +typedef PRTL_CRITICAL_SECTION LPCRITICAL_SECTION; + +typedef RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG; +typedef PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG; +typedef PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG; + + +typedef PLDT_ENTRY LPLDT_ENTRY; + + +#line 285 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _COMMPROP { + WORD wPacketLength; + WORD wPacketVersion; + DWORD dwServiceMask; + DWORD dwReserved1; + DWORD dwMaxTxQueue; + DWORD dwMaxRxQueue; + DWORD dwMaxBaud; + DWORD dwProvSubType; + DWORD dwProvCapabilities; + DWORD dwSettableParams; + DWORD dwSettableBaud; + WORD wSettableData; + WORD wSettableStopParity; + DWORD dwCurrentTxQueue; + DWORD dwCurrentRxQueue; + DWORD dwProvSpec1; + DWORD dwProvSpec2; + WCHAR wcProvChar[1]; +} COMMPROP,*LPCOMMPROP; + + + + + + + +typedef struct _COMSTAT { + DWORD fCtsHold : 1; + DWORD fDsrHold : 1; + DWORD fRlsdHold : 1; + DWORD fXoffHold : 1; + DWORD fXoffSent : 1; + DWORD fEof : 1; + DWORD fTxim : 1; + DWORD fReserved : 25; + DWORD cbInQue; + DWORD cbOutQue; +} COMSTAT, *LPCOMSTAT; + + + + + + + + + + + + + + + + +typedef struct _DCB { + DWORD DCBlength; + DWORD BaudRate; + DWORD fBinary: 1; + DWORD fParity: 1; + DWORD fOutxCtsFlow:1; + DWORD fOutxDsrFlow:1; + DWORD fDtrControl:2; + DWORD fDsrSensitivity:1; + DWORD fTXContinueOnXoff: 1; + DWORD fOutX: 1; + DWORD fInX: 1; + DWORD fErrorChar: 1; + DWORD fNull: 1; + DWORD fRtsControl:2; + DWORD fAbortOnError:1; + DWORD fDummy2:17; + WORD wReserved; + WORD XonLim; + WORD XoffLim; + BYTE ByteSize; + BYTE Parity; + BYTE StopBits; + char XonChar; + char XoffChar; + char ErrorChar; + char EofChar; + char EvtChar; + WORD wReserved1; +} DCB, *LPDCB; + +typedef struct _COMMTIMEOUTS { + DWORD ReadIntervalTimeout; + DWORD ReadTotalTimeoutMultiplier; + DWORD ReadTotalTimeoutConstant; + DWORD WriteTotalTimeoutMultiplier; + DWORD WriteTotalTimeoutConstant; +} COMMTIMEOUTS,*LPCOMMTIMEOUTS; + +typedef struct _COMMCONFIG { + DWORD dwSize; + WORD wVersion; + WORD wReserved; + DCB dcb; + DWORD dwProviderSubType; + + DWORD dwProviderOffset; + + DWORD dwProviderSize; + WCHAR wcProviderData[1]; +} COMMCONFIG,*LPCOMMCONFIG; + +typedef struct _SYSTEM_INFO { + union { + DWORD dwOemId; + struct { + WORD wProcessorArchitecture; + WORD wReserved; + }; + }; + DWORD dwPageSize; + LPVOID lpMinimumApplicationAddress; + LPVOID lpMaximumApplicationAddress; + DWORD dwActiveProcessorMask; + DWORD dwNumberOfProcessors; + DWORD dwProcessorType; + DWORD dwAllocationGranularity; + WORD wProcessorLevel; + WORD wProcessorRevision; +} SYSTEM_INFO, *LPSYSTEM_INFO; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _MEMORYSTATUS { + DWORD dwLength; + DWORD dwMemoryLoad; + DWORD dwTotalPhys; + DWORD dwAvailPhys; + DWORD dwTotalPageFile; + DWORD dwAvailPageFile; + DWORD dwTotalVirtual; + DWORD dwAvailVirtual; +} MEMORYSTATUS, *LPMEMORYSTATUS; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _EXCEPTION_DEBUG_INFO { + EXCEPTION_RECORD ExceptionRecord; + DWORD dwFirstChance; +} EXCEPTION_DEBUG_INFO, *LPEXCEPTION_DEBUG_INFO; + +typedef struct _CREATE_THREAD_DEBUG_INFO { + HANDLE hThread; + LPVOID lpThreadLocalBase; + LPTHREAD_START_ROUTINE lpStartAddress; +} CREATE_THREAD_DEBUG_INFO, *LPCREATE_THREAD_DEBUG_INFO; + +typedef struct _CREATE_PROCESS_DEBUG_INFO { + HANDLE hFile; + HANDLE hProcess; + HANDLE hThread; + LPVOID lpBaseOfImage; + DWORD dwDebugInfoFileOffset; + DWORD nDebugInfoSize; + LPVOID lpThreadLocalBase; + LPTHREAD_START_ROUTINE lpStartAddress; + LPVOID lpImageName; + WORD fUnicode; +} CREATE_PROCESS_DEBUG_INFO, *LPCREATE_PROCESS_DEBUG_INFO; + +typedef struct _EXIT_THREAD_DEBUG_INFO { + DWORD dwExitCode; +} EXIT_THREAD_DEBUG_INFO, *LPEXIT_THREAD_DEBUG_INFO; + +typedef struct _EXIT_PROCESS_DEBUG_INFO { + DWORD dwExitCode; +} EXIT_PROCESS_DEBUG_INFO, *LPEXIT_PROCESS_DEBUG_INFO; + +typedef struct _LOAD_DLL_DEBUG_INFO { + HANDLE hFile; + LPVOID lpBaseOfDll; + DWORD dwDebugInfoFileOffset; + DWORD nDebugInfoSize; + LPVOID lpImageName; + WORD fUnicode; +} LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO; + +typedef struct _UNLOAD_DLL_DEBUG_INFO { + LPVOID lpBaseOfDll; +} UNLOAD_DLL_DEBUG_INFO, *LPUNLOAD_DLL_DEBUG_INFO; + +typedef struct _OUTPUT_DEBUG_STRING_INFO { + LPSTR lpDebugStringData; + WORD fUnicode; + WORD nDebugStringLength; +} OUTPUT_DEBUG_STRING_INFO, *LPOUTPUT_DEBUG_STRING_INFO; + +typedef struct _RIP_INFO { + DWORD dwError; + DWORD dwType; +} RIP_INFO, *LPRIP_INFO; + + +typedef struct _DEBUG_EVENT { + DWORD dwDebugEventCode; + DWORD dwProcessId; + DWORD dwThreadId; + union { + EXCEPTION_DEBUG_INFO Exception; + CREATE_THREAD_DEBUG_INFO CreateThread; + CREATE_PROCESS_DEBUG_INFO CreateProcessInfo; + EXIT_THREAD_DEBUG_INFO ExitThread; + EXIT_PROCESS_DEBUG_INFO ExitProcess; + LOAD_DLL_DEBUG_INFO LoadDll; + UNLOAD_DLL_DEBUG_INFO UnloadDll; + OUTPUT_DEBUG_STRING_INFO DebugString; + RIP_INFO RipInfo; + } u; +} DEBUG_EVENT, *LPDEBUG_EVENT; + + +typedef PCONTEXT LPCONTEXT; +typedef PEXCEPTION_RECORD LPEXCEPTION_RECORD; +typedef PEXCEPTION_POINTERS LPEXCEPTION_POINTERS; +#line 719 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + +#line 734 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _OFSTRUCT { + BYTE cBytes; + BYTE fFixedDisk; + WORD nErrCode; + WORD Reserved1; + WORD Reserved2; + CHAR szPathName[128]; +} OFSTRUCT, *LPOFSTRUCT, *POFSTRUCT; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1003 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + +__declspec(dllimport) +LONG +__stdcall +InterlockedIncrement( + LPLONG lpAddend + ); + +__declspec(dllimport) +LONG +__stdcall +InterlockedDecrement( + LPLONG lpAddend + ); + +__declspec(dllimport) +LONG +__stdcall +InterlockedExchange( + LPLONG Target, + LONG Value + ); + +__declspec(dllimport) +LONG +__stdcall +InterlockedExchangeAdd( + LPLONG Addend, + LONG Value + ); + +__declspec(dllimport) +PVOID +__stdcall +InterlockedCompareExchange ( + PVOID *Destination, + PVOID Exchange, + PVOID Comperand + ); + +#line 1046 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +#line 1048 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +FreeResource( + HGLOBAL hResData + ); + +__declspec(dllimport) +LPVOID +__stdcall +LockResource( + HGLOBAL hResData + ); + + + + + + + +int +__stdcall + + + +#line 1075 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" +WinMain( + HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nShowCmd + ); + +__declspec(dllimport) +BOOL +__stdcall +FreeLibrary( + HMODULE hLibModule + ); + + +__declspec(dllimport) +void +__stdcall +FreeLibraryAndExitThread( + HMODULE hLibModule, + DWORD dwExitCode + ); + +__declspec(dllimport) +BOOL +__stdcall +DisableThreadLibraryCalls( + HMODULE hLibModule + ); + +__declspec(dllimport) +FARPROC +__stdcall +GetProcAddress( + HMODULE hModule, + LPCSTR lpProcName + ); + +__declspec(dllimport) +DWORD +__stdcall +GetVersion( void ); + +__declspec(dllimport) +HGLOBAL +__stdcall +GlobalAlloc( + UINT uFlags, + DWORD dwBytes + ); + +__declspec(dllimport) +HGLOBAL +__stdcall +GlobalReAlloc( + HGLOBAL hMem, + DWORD dwBytes, + UINT uFlags + ); + +__declspec(dllimport) +DWORD +__stdcall +GlobalSize( + HGLOBAL hMem + ); + +__declspec(dllimport) +UINT +__stdcall +GlobalFlags( + HGLOBAL hMem + ); + + +__declspec(dllimport) +LPVOID +__stdcall +GlobalLock( + HGLOBAL hMem + ); + + +__declspec(dllimport) +HGLOBAL +__stdcall +GlobalHandle( + LPCVOID pMem + ); + + +__declspec(dllimport) +BOOL +__stdcall +GlobalUnlock( + HGLOBAL hMem + ); + + +__declspec(dllimport) +HGLOBAL +__stdcall +GlobalFree( + HGLOBAL hMem + ); + +__declspec(dllimport) +UINT +__stdcall +GlobalCompact( + DWORD dwMinFree + ); + +__declspec(dllimport) +void +__stdcall +GlobalFix( + HGLOBAL hMem + ); + +__declspec(dllimport) +void +__stdcall +GlobalUnfix( + HGLOBAL hMem + ); + +__declspec(dllimport) +LPVOID +__stdcall +GlobalWire( + HGLOBAL hMem + ); + +__declspec(dllimport) +BOOL +__stdcall +GlobalUnWire( + HGLOBAL hMem + ); + +__declspec(dllimport) +void +__stdcall +GlobalMemoryStatus( + LPMEMORYSTATUS lpBuffer + ); + +__declspec(dllimport) +HLOCAL +__stdcall +LocalAlloc( + UINT uFlags, + UINT uBytes + ); + +__declspec(dllimport) +HLOCAL +__stdcall +LocalReAlloc( + HLOCAL hMem, + UINT uBytes, + UINT uFlags + ); + +__declspec(dllimport) +LPVOID +__stdcall +LocalLock( + HLOCAL hMem + ); + +__declspec(dllimport) +HLOCAL +__stdcall +LocalHandle( + LPCVOID pMem + ); + +__declspec(dllimport) +BOOL +__stdcall +LocalUnlock( + HLOCAL hMem + ); + +__declspec(dllimport) +UINT +__stdcall +LocalSize( + HLOCAL hMem + ); + +__declspec(dllimport) +UINT +__stdcall +LocalFlags( + HLOCAL hMem + ); + +__declspec(dllimport) +HLOCAL +__stdcall +LocalFree( + HLOCAL hMem + ); + +__declspec(dllimport) +UINT +__stdcall +LocalShrink( + HLOCAL hMem, + UINT cbNewSize + ); + +__declspec(dllimport) +UINT +__stdcall +LocalCompact( + UINT uMinFree + ); + +__declspec(dllimport) +BOOL +__stdcall +FlushInstructionCache( + HANDLE hProcess, + LPCVOID lpBaseAddress, + DWORD dwSize + ); + +__declspec(dllimport) +LPVOID +__stdcall +VirtualAlloc( + LPVOID lpAddress, + DWORD dwSize, + DWORD flAllocationType, + DWORD flProtect + ); + +__declspec(dllimport) +BOOL +__stdcall +VirtualFree( + LPVOID lpAddress, + DWORD dwSize, + DWORD dwFreeType + ); + +__declspec(dllimport) +BOOL +__stdcall +VirtualProtect( + LPVOID lpAddress, + DWORD dwSize, + DWORD flNewProtect, + PDWORD lpflOldProtect + ); + +__declspec(dllimport) +DWORD +__stdcall +VirtualQuery( + LPCVOID lpAddress, + PMEMORY_BASIC_INFORMATION lpBuffer, + DWORD dwLength + ); + +__declspec(dllimport) +LPVOID +__stdcall +VirtualAllocEx( + HANDLE hProcess, + LPVOID lpAddress, + DWORD dwSize, + DWORD flAllocationType, + DWORD flProtect + ); + +__declspec(dllimport) +BOOL +__stdcall +VirtualFreeEx( + HANDLE hProcess, + LPVOID lpAddress, + DWORD dwSize, + DWORD dwFreeType + ); + +__declspec(dllimport) +BOOL +__stdcall +VirtualProtectEx( + HANDLE hProcess, + LPVOID lpAddress, + DWORD dwSize, + DWORD flNewProtect, + PDWORD lpflOldProtect + ); + +__declspec(dllimport) +DWORD +__stdcall +VirtualQueryEx( + HANDLE hProcess, + LPCVOID lpAddress, + PMEMORY_BASIC_INFORMATION lpBuffer, + DWORD dwLength + ); + +__declspec(dllimport) +HANDLE +__stdcall +HeapCreate( + DWORD flOptions, + DWORD dwInitialSize, + DWORD dwMaximumSize + ); + +__declspec(dllimport) +BOOL +__stdcall +HeapDestroy( + HANDLE hHeap + ); + + +__declspec(dllimport) +LPVOID +__stdcall +HeapAlloc( + HANDLE hHeap, + DWORD dwFlags, + DWORD dwBytes + ); + +__declspec(dllimport) +LPVOID +__stdcall +HeapReAlloc( + HANDLE hHeap, + DWORD dwFlags, + LPVOID lpMem, + DWORD dwBytes + ); + +__declspec(dllimport) +BOOL +__stdcall +HeapFree( + HANDLE hHeap, + DWORD dwFlags, + LPVOID lpMem + ); + +__declspec(dllimport) +DWORD +__stdcall +HeapSize( + HANDLE hHeap, + DWORD dwFlags, + LPCVOID lpMem + ); + +__declspec(dllimport) +BOOL +__stdcall +HeapValidate( + HANDLE hHeap, + DWORD dwFlags, + LPCVOID lpMem + ); + +__declspec(dllimport) +UINT +__stdcall +HeapCompact( + HANDLE hHeap, + DWORD dwFlags + ); + +__declspec(dllimport) +HANDLE +__stdcall +GetProcessHeap( void ); + +__declspec(dllimport) +DWORD +__stdcall +GetProcessHeaps( + DWORD NumberOfHeaps, + PHANDLE ProcessHeaps + ); + +typedef struct _PROCESS_HEAP_ENTRY { + PVOID lpData; + DWORD cbData; + BYTE cbOverhead; + BYTE iRegionIndex; + WORD wFlags; + union { + struct { + HANDLE hMem; + DWORD dwReserved[ 3 ]; + } Block; + struct { + DWORD dwCommittedSize; + DWORD dwUnCommittedSize; + LPVOID lpFirstBlock; + LPVOID lpLastBlock; + } Region; + }; +} PROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY, *PPROCESS_HEAP_ENTRY; + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +HeapLock( + HANDLE hHeap + ); + +__declspec(dllimport) +BOOL +__stdcall +HeapUnlock( + HANDLE hHeap + ); + + +__declspec(dllimport) +BOOL +__stdcall +HeapWalk( + HANDLE hHeap, + LPPROCESS_HEAP_ENTRY lpEntry + ); + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +GetBinaryTypeA( + LPCSTR lpApplicationName, + LPDWORD lpBinaryType + ); +__declspec(dllimport) +BOOL +__stdcall +GetBinaryTypeW( + LPCWSTR lpApplicationName, + LPDWORD lpBinaryType + ); + + + + +#line 1547 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetShortPathNameA( + LPCSTR lpszLongPath, + LPSTR lpszShortPath, + DWORD cchBuffer + ); +__declspec(dllimport) +DWORD +__stdcall +GetShortPathNameW( + LPCWSTR lpszLongPath, + LPWSTR lpszShortPath, + DWORD cchBuffer + ); + + + + +#line 1569 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetLongPathNameA( + LPCSTR lpszShortPath, + LPSTR lpszLongPath, + DWORD cchBuffer + ); +__declspec(dllimport) +DWORD +__stdcall +GetLongPathNameW( + LPCWSTR lpszShortPath, + LPWSTR lpszLongPath, + DWORD cchBuffer + ); + + + + +#line 1591 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +GetProcessAffinityMask( + HANDLE hProcess, + LPDWORD lpProcessAffinityMask, + LPDWORD lpSystemAffinityMask + ); + +__declspec(dllimport) +BOOL +__stdcall +SetProcessAffinityMask( + HANDLE hProcess, + DWORD dwProcessAffinityMask + ); + + +__declspec(dllimport) +BOOL +__stdcall +GetProcessTimes( + HANDLE hProcess, + LPFILETIME lpCreationTime, + LPFILETIME lpExitTime, + LPFILETIME lpKernelTime, + LPFILETIME lpUserTime + ); + +__declspec(dllimport) +BOOL +__stdcall +GetProcessWorkingSetSize( + HANDLE hProcess, + LPDWORD lpMinimumWorkingSetSize, + LPDWORD lpMaximumWorkingSetSize + ); + +__declspec(dllimport) +BOOL +__stdcall +SetProcessWorkingSetSize( + HANDLE hProcess, + DWORD dwMinimumWorkingSetSize, + DWORD dwMaximumWorkingSetSize + ); + +__declspec(dllimport) +HANDLE +__stdcall +OpenProcess( + DWORD dwDesiredAccess, + BOOL bInheritHandle, + DWORD dwProcessId + ); + +__declspec(dllimport) +HANDLE +__stdcall +GetCurrentProcess( + void + ); + +__declspec(dllimport) +DWORD +__stdcall +GetCurrentProcessId( + void + ); + +__declspec(dllimport) +void +__stdcall +ExitProcess( + UINT uExitCode + ); + +__declspec(dllimport) +BOOL +__stdcall +TerminateProcess( + HANDLE hProcess, + UINT uExitCode + ); + +__declspec(dllimport) +BOOL +__stdcall +GetExitCodeProcess( + HANDLE hProcess, + LPDWORD lpExitCode + ); + + +__declspec(dllimport) +void +__stdcall +FatalExit( + int ExitCode + ); + +__declspec(dllimport) +LPSTR +__stdcall +GetEnvironmentStrings( + void + ); + +__declspec(dllimport) +LPWSTR +__stdcall +GetEnvironmentStringsW( + void + ); + + + + + +#line 1712 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +FreeEnvironmentStringsA( + LPSTR + ); +__declspec(dllimport) +BOOL +__stdcall +FreeEnvironmentStringsW( + LPWSTR + ); + + + + +#line 1730 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +void +__stdcall +RaiseException( + DWORD dwExceptionCode, + DWORD dwExceptionFlags, + DWORD nNumberOfArguments, + const DWORD *lpArguments + ); + +__declspec(dllimport) +LONG +__stdcall +UnhandledExceptionFilter( + struct _EXCEPTION_POINTERS *ExceptionInfo + ); + +typedef LONG (__stdcall *PTOP_LEVEL_EXCEPTION_FILTER)( + struct _EXCEPTION_POINTERS *ExceptionInfo + ); +typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER; + +__declspec(dllimport) +LPTOP_LEVEL_EXCEPTION_FILTER +__stdcall +SetUnhandledExceptionFilter( + LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1798 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +CreateThread( + LPSECURITY_ATTRIBUTES lpThreadAttributes, + DWORD dwStackSize, + LPTHREAD_START_ROUTINE lpStartAddress, + LPVOID lpParameter, + DWORD dwCreationFlags, + LPDWORD lpThreadId + ); + +__declspec(dllimport) +HANDLE +__stdcall +CreateRemoteThread( + HANDLE hProcess, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + DWORD dwStackSize, + LPTHREAD_START_ROUTINE lpStartAddress, + LPVOID lpParameter, + DWORD dwCreationFlags, + LPDWORD lpThreadId + ); + +__declspec(dllimport) +HANDLE +__stdcall +GetCurrentThread( + void + ); + +__declspec(dllimport) +DWORD +__stdcall +GetCurrentThreadId( + void + ); + +__declspec(dllimport) +DWORD +__stdcall +SetThreadAffinityMask( + HANDLE hThread, + DWORD dwThreadAffinityMask + ); + + + + + + + + + +#line 1855 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +SetProcessPriorityBoost( + HANDLE hProcess, + BOOL bDisablePriorityBoost + ); + +__declspec(dllimport) +BOOL +__stdcall +GetProcessPriorityBoost( + HANDLE hProcess, + PBOOL pDisablePriorityBoost + ); + +__declspec(dllimport) +BOOL +__stdcall +RequestWakeupLatency( + LATENCY_TIME latency + ); + +__declspec(dllimport) +BOOL +__stdcall +SetThreadPriority( + HANDLE hThread, + int nPriority + ); + +__declspec(dllimport) +BOOL +__stdcall +SetThreadPriorityBoost( + HANDLE hThread, + BOOL bDisablePriorityBoost + ); + +__declspec(dllimport) +BOOL +__stdcall +GetThreadPriorityBoost( + HANDLE hThread, + PBOOL pDisablePriorityBoost + ); + +__declspec(dllimport) +int +__stdcall +GetThreadPriority( + HANDLE hThread + ); + +__declspec(dllimport) +BOOL +__stdcall +GetThreadTimes( + HANDLE hThread, + LPFILETIME lpCreationTime, + LPFILETIME lpExitTime, + LPFILETIME lpKernelTime, + LPFILETIME lpUserTime + ); + +__declspec(dllimport) +void +__stdcall +ExitThread( + DWORD dwExitCode + ); + +__declspec(dllimport) +BOOL +__stdcall +TerminateThread( + HANDLE hThread, + DWORD dwExitCode + ); + +__declspec(dllimport) +BOOL +__stdcall +GetExitCodeThread( + HANDLE hThread, + LPDWORD lpExitCode + ); + +__declspec(dllimport) +BOOL +__stdcall +GetThreadSelectorEntry( + HANDLE hThread, + DWORD dwSelector, + LPLDT_ENTRY lpSelectorEntry + ); + +__declspec(dllimport) +EXECUTION_STATE +__stdcall +SetThreadExecutionState( + EXECUTION_STATE esFlags + ); + +__declspec(dllimport) +DWORD +__stdcall +GetLastError( + void + ); + +__declspec(dllimport) +void +__stdcall +SetLastError( + DWORD dwErrCode + ); + + + +__declspec(dllimport) +BOOL +__stdcall +GetOverlappedResult( + HANDLE hFile, + LPOVERLAPPED lpOverlapped, + LPDWORD lpNumberOfBytesTransferred, + BOOL bWait + ); + +__declspec(dllimport) +HANDLE +__stdcall +CreateIoCompletionPort( + HANDLE FileHandle, + HANDLE ExistingCompletionPort, + DWORD CompletionKey, + DWORD NumberOfConcurrentThreads + ); + +__declspec(dllimport) +BOOL +__stdcall +GetQueuedCompletionStatus( + HANDLE CompletionPort, + LPDWORD lpNumberOfBytesTransferred, + LPDWORD lpCompletionKey, + LPOVERLAPPED *lpOverlapped, + DWORD dwMilliseconds + ); + +__declspec(dllimport) +BOOL +__stdcall +PostQueuedCompletionStatus( + HANDLE CompletionPort, + DWORD dwNumberOfBytesTransferred, + DWORD dwCompletionKey, + LPOVERLAPPED lpOverlapped + ); + + + + + + +__declspec(dllimport) +UINT +__stdcall +SetErrorMode( + UINT uMode + ); + +__declspec(dllimport) +BOOL +__stdcall +ReadProcessMemory( + HANDLE hProcess, + LPCVOID lpBaseAddress, + LPVOID lpBuffer, + DWORD nSize, + LPDWORD lpNumberOfBytesRead + ); + +__declspec(dllimport) +BOOL +__stdcall +WriteProcessMemory( + HANDLE hProcess, + LPVOID lpBaseAddress, + LPVOID lpBuffer, + DWORD nSize, + LPDWORD lpNumberOfBytesWritten + ); + + +__declspec(dllimport) +BOOL +__stdcall +GetThreadContext( + HANDLE hThread, + LPCONTEXT lpContext + ); + +__declspec(dllimport) +BOOL +__stdcall +SetThreadContext( + HANDLE hThread, + const CONTEXT *lpContext + ); +#line 2068 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +SuspendThread( + HANDLE hThread + ); + +__declspec(dllimport) +DWORD +__stdcall +ResumeThread( + HANDLE hThread + ); + + + + + + + + + + + + + + + + + + +#line 2101 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + +#line 2110 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +void +__stdcall +DebugBreak( + void + ); + +__declspec(dllimport) +BOOL +__stdcall +WaitForDebugEvent( + LPDEBUG_EVENT lpDebugEvent, + DWORD dwMilliseconds + ); + +__declspec(dllimport) +BOOL +__stdcall +ContinueDebugEvent( + DWORD dwProcessId, + DWORD dwThreadId, + DWORD dwContinueStatus + ); + +__declspec(dllimport) +BOOL +__stdcall +DebugActiveProcess( + DWORD dwProcessId + ); + +__declspec(dllimport) +void +__stdcall +InitializeCriticalSection( + LPCRITICAL_SECTION lpCriticalSection + ); + +__declspec(dllimport) +void +__stdcall +EnterCriticalSection( + LPCRITICAL_SECTION lpCriticalSection + ); + +__declspec(dllimport) +void +__stdcall +LeaveCriticalSection( + LPCRITICAL_SECTION lpCriticalSection + ); + + + + + + + + + + + + + + + + + +#line 2180 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + +#line 2189 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +void +__stdcall +DeleteCriticalSection( + LPCRITICAL_SECTION lpCriticalSection + ); + +__declspec(dllimport) +BOOL +__stdcall +SetEvent( + HANDLE hEvent + ); + +__declspec(dllimport) +BOOL +__stdcall +ResetEvent( + HANDLE hEvent + ); + +__declspec(dllimport) +BOOL +__stdcall +PulseEvent( + HANDLE hEvent + ); + +__declspec(dllimport) +BOOL +__stdcall +ReleaseSemaphore( + HANDLE hSemaphore, + LONG lReleaseCount, + LPLONG lpPreviousCount + ); + +__declspec(dllimport) +BOOL +__stdcall +ReleaseMutex( + HANDLE hMutex + ); + +__declspec(dllimport) +DWORD +__stdcall +WaitForSingleObject( + HANDLE hHandle, + DWORD dwMilliseconds + ); + +__declspec(dllimport) +DWORD +__stdcall +WaitForMultipleObjects( + DWORD nCount, + const HANDLE *lpHandles, + BOOL bWaitAll, + DWORD dwMilliseconds + ); + +__declspec(dllimport) +void +__stdcall +Sleep( + DWORD dwMilliseconds + ); + +__declspec(dllimport) +HGLOBAL +__stdcall +LoadResource( + HMODULE hModule, + HRSRC hResInfo + ); + +__declspec(dllimport) +DWORD +__stdcall +SizeofResource( + HMODULE hModule, + HRSRC hResInfo + ); + + +__declspec(dllimport) +ATOM +__stdcall +GlobalDeleteAtom( + ATOM nAtom + ); + +__declspec(dllimport) +BOOL +__stdcall +InitAtomTable( + DWORD nSize + ); + +__declspec(dllimport) +ATOM +__stdcall +DeleteAtom( + ATOM nAtom + ); + +__declspec(dllimport) +UINT +__stdcall +SetHandleCount( + UINT uNumber + ); + +__declspec(dllimport) +DWORD +__stdcall +GetLogicalDrives( + void + ); + +__declspec(dllimport) +BOOL +__stdcall +LockFile( + HANDLE hFile, + DWORD dwFileOffsetLow, + DWORD dwFileOffsetHigh, + DWORD nNumberOfBytesToLockLow, + DWORD nNumberOfBytesToLockHigh + ); + +__declspec(dllimport) +BOOL +__stdcall +UnlockFile( + HANDLE hFile, + DWORD dwFileOffsetLow, + DWORD dwFileOffsetHigh, + DWORD nNumberOfBytesToUnlockLow, + DWORD nNumberOfBytesToUnlockHigh + ); + +__declspec(dllimport) +BOOL +__stdcall +LockFileEx( + HANDLE hFile, + DWORD dwFlags, + DWORD dwReserved, + DWORD nNumberOfBytesToLockLow, + DWORD nNumberOfBytesToLockHigh, + LPOVERLAPPED lpOverlapped + ); + + + + +__declspec(dllimport) +BOOL +__stdcall +UnlockFileEx( + HANDLE hFile, + DWORD dwReserved, + DWORD nNumberOfBytesToUnlockLow, + DWORD nNumberOfBytesToUnlockHigh, + LPOVERLAPPED lpOverlapped + ); + +typedef struct _BY_HANDLE_FILE_INFORMATION { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD dwVolumeSerialNumber; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + DWORD nNumberOfLinks; + DWORD nFileIndexHigh; + DWORD nFileIndexLow; +} BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION; + +__declspec(dllimport) +BOOL +__stdcall +GetFileInformationByHandle( + HANDLE hFile, + LPBY_HANDLE_FILE_INFORMATION lpFileInformation + ); + +__declspec(dllimport) +DWORD +__stdcall +GetFileType( + HANDLE hFile + ); + +__declspec(dllimport) +DWORD +__stdcall +GetFileSize( + HANDLE hFile, + LPDWORD lpFileSizeHigh + ); + +__declspec(dllimport) +HANDLE +__stdcall +GetStdHandle( + DWORD nStdHandle + ); + +__declspec(dllimport) +BOOL +__stdcall +SetStdHandle( + DWORD nStdHandle, + HANDLE hHandle + ); + +__declspec(dllimport) +BOOL +__stdcall +WriteFile( + HANDLE hFile, + LPCVOID lpBuffer, + DWORD nNumberOfBytesToWrite, + LPDWORD lpNumberOfBytesWritten, + LPOVERLAPPED lpOverlapped + ); + +__declspec(dllimport) +BOOL +__stdcall +ReadFile( + HANDLE hFile, + LPVOID lpBuffer, + DWORD nNumberOfBytesToRead, + LPDWORD lpNumberOfBytesRead, + LPOVERLAPPED lpOverlapped + ); + +__declspec(dllimport) +BOOL +__stdcall +FlushFileBuffers( + HANDLE hFile + ); + +__declspec(dllimport) +BOOL +__stdcall +DeviceIoControl( + HANDLE hDevice, + DWORD dwIoControlCode, + LPVOID lpInBuffer, + DWORD nInBufferSize, + LPVOID lpOutBuffer, + DWORD nOutBufferSize, + LPDWORD lpBytesReturned, + LPOVERLAPPED lpOverlapped + ); + +__declspec(dllimport) +BOOL +__stdcall +GetDevicePowerState( + HANDLE hFile + ); + +__declspec(dllimport) +BOOL +__stdcall +SetEndOfFile( + HANDLE hFile + ); + +__declspec(dllimport) +DWORD +__stdcall +SetFilePointer( + HANDLE hFile, + LONG lDistanceToMove, + PLONG lpDistanceToMoveHigh, + DWORD dwMoveMethod + ); + +__declspec(dllimport) +BOOL +__stdcall +FindClose( + HANDLE hFindFile + ); + +__declspec(dllimport) +BOOL +__stdcall +GetFileTime( + HANDLE hFile, + LPFILETIME lpCreationTime, + LPFILETIME lpLastAccessTime, + LPFILETIME lpLastWriteTime + ); + +__declspec(dllimport) +BOOL +__stdcall +SetFileTime( + HANDLE hFile, + const FILETIME *lpCreationTime, + const FILETIME *lpLastAccessTime, + const FILETIME *lpLastWriteTime + ); + +__declspec(dllimport) +BOOL +__stdcall +CloseHandle( + HANDLE hObject + ); + +__declspec(dllimport) +BOOL +__stdcall +DuplicateHandle( + HANDLE hSourceProcessHandle, + HANDLE hSourceHandle, + HANDLE hTargetProcessHandle, + LPHANDLE lpTargetHandle, + DWORD dwDesiredAccess, + BOOL bInheritHandle, + DWORD dwOptions + ); + +__declspec(dllimport) +BOOL +__stdcall +GetHandleInformation( + HANDLE hObject, + LPDWORD lpdwFlags + ); + +__declspec(dllimport) +BOOL +__stdcall +SetHandleInformation( + HANDLE hObject, + DWORD dwMask, + DWORD dwFlags + ); + + + + + + +__declspec(dllimport) +DWORD +__stdcall +LoadModule( + LPCSTR lpModuleName, + LPVOID lpParameterBlock + ); + +__declspec(dllimport) +UINT +__stdcall +WinExec( + LPCSTR lpCmdLine, + UINT uCmdShow + ); + +__declspec(dllimport) +BOOL +__stdcall +ClearCommBreak( + HANDLE hFile + ); + +__declspec(dllimport) +BOOL +__stdcall +ClearCommError( + HANDLE hFile, + LPDWORD lpErrors, + LPCOMSTAT lpStat + ); + +__declspec(dllimport) +BOOL +__stdcall +SetupComm( + HANDLE hFile, + DWORD dwInQueue, + DWORD dwOutQueue + ); + +__declspec(dllimport) +BOOL +__stdcall +EscapeCommFunction( + HANDLE hFile, + DWORD dwFunc + ); + +__declspec(dllimport) +BOOL +__stdcall +GetCommConfig( + HANDLE hCommDev, + LPCOMMCONFIG lpCC, + LPDWORD lpdwSize + ); + +__declspec(dllimport) +BOOL +__stdcall +GetCommMask( + HANDLE hFile, + LPDWORD lpEvtMask + ); + +__declspec(dllimport) +BOOL +__stdcall +GetCommProperties( + HANDLE hFile, + LPCOMMPROP lpCommProp + ); + +__declspec(dllimport) +BOOL +__stdcall +GetCommModemStatus( + HANDLE hFile, + LPDWORD lpModemStat + ); + +__declspec(dllimport) +BOOL +__stdcall +GetCommState( + HANDLE hFile, + LPDCB lpDCB + ); + +__declspec(dllimport) +BOOL +__stdcall +GetCommTimeouts( + HANDLE hFile, + LPCOMMTIMEOUTS lpCommTimeouts + ); + +__declspec(dllimport) +BOOL +__stdcall +PurgeComm( + HANDLE hFile, + DWORD dwFlags + ); + +__declspec(dllimport) +BOOL +__stdcall +SetCommBreak( + HANDLE hFile + ); + +__declspec(dllimport) +BOOL +__stdcall +SetCommConfig( + HANDLE hCommDev, + LPCOMMCONFIG lpCC, + DWORD dwSize + ); + +__declspec(dllimport) +BOOL +__stdcall +SetCommMask( + HANDLE hFile, + DWORD dwEvtMask + ); + +__declspec(dllimport) +BOOL +__stdcall +SetCommState( + HANDLE hFile, + LPDCB lpDCB + ); + +__declspec(dllimport) +BOOL +__stdcall +SetCommTimeouts( + HANDLE hFile, + LPCOMMTIMEOUTS lpCommTimeouts + ); + +__declspec(dllimport) +BOOL +__stdcall +TransmitCommChar( + HANDLE hFile, + char cChar + ); + +__declspec(dllimport) +BOOL +__stdcall +WaitCommEvent( + HANDLE hFile, + LPDWORD lpEvtMask, + LPOVERLAPPED lpOverlapped + ); + + +__declspec(dllimport) +DWORD +__stdcall +SetTapePosition( + HANDLE hDevice, + DWORD dwPositionMethod, + DWORD dwPartition, + DWORD dwOffsetLow, + DWORD dwOffsetHigh, + BOOL bImmediate + ); + +__declspec(dllimport) +DWORD +__stdcall +GetTapePosition( + HANDLE hDevice, + DWORD dwPositionType, + LPDWORD lpdwPartition, + LPDWORD lpdwOffsetLow, + LPDWORD lpdwOffsetHigh + ); + +__declspec(dllimport) +DWORD +__stdcall +PrepareTape( + HANDLE hDevice, + DWORD dwOperation, + BOOL bImmediate + ); + +__declspec(dllimport) +DWORD +__stdcall +EraseTape( + HANDLE hDevice, + DWORD dwEraseType, + BOOL bImmediate + ); + +__declspec(dllimport) +DWORD +__stdcall +CreateTapePartition( + HANDLE hDevice, + DWORD dwPartitionMethod, + DWORD dwCount, + DWORD dwSize + ); + +__declspec(dllimport) +DWORD +__stdcall +WriteTapemark( + HANDLE hDevice, + DWORD dwTapemarkType, + DWORD dwTapemarkCount, + BOOL bImmediate + ); + +__declspec(dllimport) +DWORD +__stdcall +GetTapeStatus( + HANDLE hDevice + ); + +__declspec(dllimport) +DWORD +__stdcall +GetTapeParameters( + HANDLE hDevice, + DWORD dwOperation, + LPDWORD lpdwSize, + LPVOID lpTapeInformation + ); + + + + +__declspec(dllimport) +DWORD +__stdcall +SetTapeParameters( + HANDLE hDevice, + DWORD dwOperation, + LPVOID lpTapeInformation + ); + + + + +__declspec(dllimport) +BOOL +__stdcall +Beep( + DWORD dwFreq, + DWORD dwDuration + ); + +__declspec(dllimport) +int +__stdcall +MulDiv( + int nNumber, + int nNumerator, + int nDenominator + ); + +__declspec(dllimport) +void +__stdcall +GetSystemTime( + LPSYSTEMTIME lpSystemTime + ); + +__declspec(dllimport) +void +__stdcall +GetSystemTimeAsFileTime( + LPFILETIME lpSystemTimeAsFileTime + ); + +__declspec(dllimport) +BOOL +__stdcall +SetSystemTime( + const SYSTEMTIME *lpSystemTime + ); + +__declspec(dllimport) +void +__stdcall +GetLocalTime( + LPSYSTEMTIME lpSystemTime + ); + +__declspec(dllimport) +BOOL +__stdcall +SetLocalTime( + const SYSTEMTIME *lpSystemTime + ); + +__declspec(dllimport) +void +__stdcall +GetSystemInfo( + LPSYSTEM_INFO lpSystemInfo + ); + +__declspec(dllimport) +BOOL +__stdcall +IsProcessorFeaturePresent( + DWORD ProcessorFeature + ); + +typedef struct _TIME_ZONE_INFORMATION { + LONG Bias; + WCHAR StandardName[ 32 ]; + SYSTEMTIME StandardDate; + LONG StandardBias; + WCHAR DaylightName[ 32 ]; + SYSTEMTIME DaylightDate; + LONG DaylightBias; +} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION; + +__declspec(dllimport) +BOOL +__stdcall +SystemTimeToTzSpecificLocalTime( + LPTIME_ZONE_INFORMATION lpTimeZoneInformation, + LPSYSTEMTIME lpUniversalTime, + LPSYSTEMTIME lpLocalTime + ); + +__declspec(dllimport) +DWORD +__stdcall +GetTimeZoneInformation( + LPTIME_ZONE_INFORMATION lpTimeZoneInformation + ); + +__declspec(dllimport) +BOOL +__stdcall +SetTimeZoneInformation( + const TIME_ZONE_INFORMATION *lpTimeZoneInformation + ); + + + + + + +__declspec(dllimport) +BOOL +__stdcall +SystemTimeToFileTime( + const SYSTEMTIME *lpSystemTime, + LPFILETIME lpFileTime + ); + +__declspec(dllimport) +BOOL +__stdcall +FileTimeToLocalFileTime( + const FILETIME *lpFileTime, + LPFILETIME lpLocalFileTime + ); + +__declspec(dllimport) +BOOL +__stdcall +LocalFileTimeToFileTime( + const FILETIME *lpLocalFileTime, + LPFILETIME lpFileTime + ); + +__declspec(dllimport) +BOOL +__stdcall +FileTimeToSystemTime( + const FILETIME *lpFileTime, + LPSYSTEMTIME lpSystemTime + ); + +__declspec(dllimport) +LONG +__stdcall +CompareFileTime( + const FILETIME *lpFileTime1, + const FILETIME *lpFileTime2 + ); + +__declspec(dllimport) +BOOL +__stdcall +FileTimeToDosDateTime( + const FILETIME *lpFileTime, + LPWORD lpFatDate, + LPWORD lpFatTime + ); + +__declspec(dllimport) +BOOL +__stdcall +DosDateTimeToFileTime( + WORD wFatDate, + WORD wFatTime, + LPFILETIME lpFileTime + ); + +__declspec(dllimport) +DWORD +__stdcall +GetTickCount( + void + ); + +__declspec(dllimport) +BOOL +__stdcall +SetSystemTimeAdjustment( + DWORD dwTimeAdjustment, + BOOL bTimeAdjustmentDisabled + ); + +__declspec(dllimport) +BOOL +__stdcall +GetSystemTimeAdjustment( + PDWORD lpTimeAdjustment, + PDWORD lpTimeIncrement, + PBOOL lpTimeAdjustmentDisabled + ); + + +__declspec(dllimport) +DWORD +__stdcall +FormatMessageA( + DWORD dwFlags, + LPCVOID lpSource, + DWORD dwMessageId, + DWORD dwLanguageId, + LPSTR lpBuffer, + DWORD nSize, + va_list *Arguments + ); +__declspec(dllimport) +DWORD +__stdcall +FormatMessageW( + DWORD dwFlags, + LPCVOID lpSource, + DWORD dwMessageId, + DWORD dwLanguageId, + LPWSTR lpBuffer, + DWORD nSize, + va_list *Arguments + ); + + + + +#line 3019 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" +#line 3020 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +CreatePipe( + PHANDLE hReadPipe, + PHANDLE hWritePipe, + LPSECURITY_ATTRIBUTES lpPipeAttributes, + DWORD nSize + ); + +__declspec(dllimport) +BOOL +__stdcall +ConnectNamedPipe( + HANDLE hNamedPipe, + LPOVERLAPPED lpOverlapped + ); + +__declspec(dllimport) +BOOL +__stdcall +DisconnectNamedPipe( + HANDLE hNamedPipe + ); + +__declspec(dllimport) +BOOL +__stdcall +SetNamedPipeHandleState( + HANDLE hNamedPipe, + LPDWORD lpMode, + LPDWORD lpMaxCollectionCount, + LPDWORD lpCollectDataTimeout + ); + +__declspec(dllimport) +BOOL +__stdcall +GetNamedPipeInfo( + HANDLE hNamedPipe, + LPDWORD lpFlags, + LPDWORD lpOutBufferSize, + LPDWORD lpInBufferSize, + LPDWORD lpMaxInstances + ); + +__declspec(dllimport) +BOOL +__stdcall +PeekNamedPipe( + HANDLE hNamedPipe, + LPVOID lpBuffer, + DWORD nBufferSize, + LPDWORD lpBytesRead, + LPDWORD lpTotalBytesAvail, + LPDWORD lpBytesLeftThisMessage + ); + +__declspec(dllimport) +BOOL +__stdcall +TransactNamedPipe( + HANDLE hNamedPipe, + LPVOID lpInBuffer, + DWORD nInBufferSize, + LPVOID lpOutBuffer, + DWORD nOutBufferSize, + LPDWORD lpBytesRead, + LPOVERLAPPED lpOverlapped + ); + +__declspec(dllimport) +HANDLE +__stdcall +CreateMailslotA( + LPCSTR lpName, + DWORD nMaxMessageSize, + DWORD lReadTimeout, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); +__declspec(dllimport) +HANDLE +__stdcall +CreateMailslotW( + LPCWSTR lpName, + DWORD nMaxMessageSize, + DWORD lReadTimeout, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); + + + + +#line 3124 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +GetMailslotInfo( + HANDLE hMailslot, + LPDWORD lpMaxMessageSize, + LPDWORD lpNextSize, + LPDWORD lpMessageCount, + LPDWORD lpReadTimeout + ); + +__declspec(dllimport) +BOOL +__stdcall +SetMailslotInfo( + HANDLE hMailslot, + DWORD lReadTimeout + ); + +__declspec(dllimport) +LPVOID +__stdcall +MapViewOfFile( + HANDLE hFileMappingObject, + DWORD dwDesiredAccess, + DWORD dwFileOffsetHigh, + DWORD dwFileOffsetLow, + DWORD dwNumberOfBytesToMap + ); + + +__declspec(dllimport) +PVOID64 +__stdcall +MapViewOfFileVlm( + HANDLE hFileMappingObject, + DWORD dwDesiredAccess, + DWORDLONG ulOffset, + DWORDLONG ulNumberOfBytesToMap, + PVOID64 lpBaseAddress + ); + +__declspec(dllimport) +BOOL +__stdcall +FlushViewOfFile( + LPCVOID lpBaseAddress, + DWORD dwNumberOfBytesToFlush + ); + +__declspec(dllimport) +BOOL +__stdcall +UnmapViewOfFile( + LPCVOID lpBaseAddress + ); + +__declspec(dllimport) +BOOL +__stdcall +UnmapViewOfFileVlm( + PVOID64 lpBaseAddress + ); + + + + + +__declspec(dllimport) +BOOL +__stdcall +EncryptFileA( + LPCSTR lpFileName + ); +__declspec(dllimport) +BOOL +__stdcall +EncryptFileW( + LPCWSTR lpFileName + ); + + + + +#line 3210 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +DecryptFileA( + LPCSTR lpFileName, + DWORD dwReserved + ); +__declspec(dllimport) +BOOL +__stdcall +DecryptFileW( + LPCWSTR lpFileName, + DWORD dwReserved + ); + + + + +#line 3230 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + +typedef +DWORD +(*PFE_EXPORT_FUNC)( + PBYTE pbData, + PVOID pvCallbackContext, + ULONG ulLength + ); + +typedef +DWORD +(*PFE_IMPORT_FUNC)( + PBYTE pbData, + PVOID pvCallbackContext, + PULONG ulLength + ); + + + + + + + + + + +__declspec(dllimport) +DWORD +__stdcall +OpenRawA( + LPCSTR lpFileName, + ULONG ulFlags, + PVOID * pvContext + ); +__declspec(dllimport) +DWORD +__stdcall +OpenRawW( + LPCWSTR lpFileName, + ULONG ulFlags, + PVOID * pvContext + ); + + + + +#line 3283 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +ReadRaw( + PFE_EXPORT_FUNC pfExportCallback, + PVOID pvCallbackContext, + PVOID pvContext + ); + +__declspec(dllimport) +DWORD +__stdcall +WriteRaw( + PFE_IMPORT_FUNC pfImportCallback, + PVOID pvCallbackContext, + PVOID pvContext + ); + +__declspec(dllimport) +void +__stdcall +CloseRaw( + PVOID pvContext + ); + +typedef struct _RECOVERY_AGENT_INFORMATIONA { + DWORD NextEntryOffset; + DWORD AgentNameLength; + CHAR AgentInformation[1]; +} RECOVERY_AGENT_INFORMATIONA, *LPRECOVERY_AGENT_INFORMATIONA; +typedef struct _RECOVERY_AGENT_INFORMATIONW { + DWORD NextEntryOffset; + DWORD AgentNameLength; + WCHAR AgentInformation[1]; +} RECOVERY_AGENT_INFORMATIONW, *LPRECOVERY_AGENT_INFORMATIONW; + + + + +typedef RECOVERY_AGENT_INFORMATIONA RECOVERY_AGENT_INFORMATION; +typedef LPRECOVERY_AGENT_INFORMATIONA LPRECOVERY_AGENT_INFORMATION; +#line 3326 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +QueryRecoveryAgentsA( + LPCSTR lpFileName, + PDWORD AgentCount, + LPRECOVERY_AGENT_INFORMATIONA * RecoveryAgentInformation + ); +__declspec(dllimport) +DWORD +__stdcall +QueryRecoveryAgentsW( + LPCWSTR lpFileName, + PDWORD AgentCount, + LPRECOVERY_AGENT_INFORMATIONW * RecoveryAgentInformation + ); + + + + +#line 3348 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + +__declspec(dllimport) +int +__stdcall +lstrcmpA( + LPCSTR lpString1, + LPCSTR lpString2 + ); +__declspec(dllimport) +int +__stdcall +lstrcmpW( + LPCWSTR lpString1, + LPCWSTR lpString2 + ); + + + + +#line 3372 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +int +__stdcall +lstrcmpiA( + LPCSTR lpString1, + LPCSTR lpString2 + ); +__declspec(dllimport) +int +__stdcall +lstrcmpiW( + LPCWSTR lpString1, + LPCWSTR lpString2 + ); + + + + +#line 3392 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +LPSTR +__stdcall +lstrcpynA( + LPSTR lpString1, + LPCSTR lpString2, + int iMaxLength + ); +__declspec(dllimport) +LPWSTR +__stdcall +lstrcpynW( + LPWSTR lpString1, + LPCWSTR lpString2, + int iMaxLength + ); + + + + +#line 3414 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +LPSTR +__stdcall +lstrcpyA( + LPSTR lpString1, + LPCSTR lpString2 + ); +__declspec(dllimport) +LPWSTR +__stdcall +lstrcpyW( + LPWSTR lpString1, + LPCWSTR lpString2 + ); + + + + +#line 3434 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +LPSTR +__stdcall +lstrcatA( + LPSTR lpString1, + LPCSTR lpString2 + ); +__declspec(dllimport) +LPWSTR +__stdcall +lstrcatW( + LPWSTR lpString1, + LPCWSTR lpString2 + ); + + + + +#line 3454 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +int +__stdcall +lstrlenA( + LPCSTR lpString + ); +__declspec(dllimport) +int +__stdcall +lstrlenW( + LPCWSTR lpString + ); + + + + +#line 3472 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HFILE +__stdcall +OpenFile( + LPCSTR lpFileName, + LPOFSTRUCT lpReOpenBuff, + UINT uStyle + ); + +__declspec(dllimport) +HFILE +__stdcall +_lopen( + LPCSTR lpPathName, + int iReadWrite + ); + +__declspec(dllimport) +HFILE +__stdcall +_lcreat( + LPCSTR lpPathName, + int iAttribute + ); + +__declspec(dllimport) +UINT +__stdcall +_lread( + HFILE hFile, + LPVOID lpBuffer, + UINT uBytes + ); + +__declspec(dllimport) +UINT +__stdcall +_lwrite( + HFILE hFile, + LPCSTR lpBuffer, + UINT uBytes + ); + +__declspec(dllimport) +long +__stdcall +_hread( + HFILE hFile, + LPVOID lpBuffer, + long lBytes + ); + +__declspec(dllimport) +long +__stdcall +_hwrite( + HFILE hFile, + LPCSTR lpBuffer, + long lBytes + ); + +__declspec(dllimport) +HFILE +__stdcall +_lclose( + HFILE hFile + ); + +__declspec(dllimport) +LONG +__stdcall +_llseek( + HFILE hFile, + LONG lOffset, + int iOrigin + ); + +__declspec(dllimport) +BOOL +__stdcall +IsTextUnicode( + const LPVOID lpBuffer, + int cb, + LPINT lpi + ); + +__declspec(dllimport) +DWORD +__stdcall +TlsAlloc( + void + ); + + + +__declspec(dllimport) +LPVOID +__stdcall +TlsGetValue( + DWORD dwTlsIndex + ); + +__declspec(dllimport) +BOOL +__stdcall +TlsSetValue( + DWORD dwTlsIndex, + LPVOID lpTlsValue + ); + +__declspec(dllimport) +BOOL +__stdcall +TlsFree( + DWORD dwTlsIndex + ); + +typedef +void +(__stdcall *LPOVERLAPPED_COMPLETION_ROUTINE)( + DWORD dwErrorCode, + DWORD dwNumberOfBytesTransfered, + LPOVERLAPPED lpOverlapped + ); + +__declspec(dllimport) +DWORD +__stdcall +SleepEx( + DWORD dwMilliseconds, + BOOL bAlertable + ); + +__declspec(dllimport) +DWORD +__stdcall +WaitForSingleObjectEx( + HANDLE hHandle, + DWORD dwMilliseconds, + BOOL bAlertable + ); + +__declspec(dllimport) +DWORD +__stdcall +WaitForMultipleObjectsEx( + DWORD nCount, + const HANDLE *lpHandles, + BOOL bWaitAll, + DWORD dwMilliseconds, + BOOL bAlertable + ); + + + + + + + + + + + +#line 3637 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +ReadFileEx( + HANDLE hFile, + LPVOID lpBuffer, + DWORD nNumberOfBytesToRead, + LPOVERLAPPED lpOverlapped, + LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine + ); + +__declspec(dllimport) +BOOL +__stdcall +WriteFileEx( + HANDLE hFile, + LPCVOID lpBuffer, + DWORD nNumberOfBytesToWrite, + LPOVERLAPPED lpOverlapped, + LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine + ); + +__declspec(dllimport) +BOOL +__stdcall +BackupRead( + HANDLE hFile, + LPBYTE lpBuffer, + DWORD nNumberOfBytesToRead, + LPDWORD lpNumberOfBytesRead, + BOOL bAbort, + BOOL bProcessSecurity, + LPVOID *lpContext + ); + +__declspec(dllimport) +BOOL +__stdcall +BackupSeek( + HANDLE hFile, + DWORD dwLowBytesToSeek, + DWORD dwHighBytesToSeek, + LPDWORD lpdwLowByteSeeked, + LPDWORD lpdwHighByteSeeked, + LPVOID *lpContext + ); + +__declspec(dllimport) +BOOL +__stdcall +BackupWrite( + HANDLE hFile, + LPBYTE lpBuffer, + DWORD nNumberOfBytesToWrite, + LPDWORD lpNumberOfBytesWritten, + BOOL bAbort, + BOOL bProcessSecurity, + LPVOID *lpContext + ); + + + + +typedef struct _WIN32_STREAM_ID { + DWORD dwStreamId ; + DWORD dwStreamAttributes ; + LARGE_INTEGER Size ; + DWORD dwStreamNameSize ; + WCHAR cStreamName[ 1 ] ; +} WIN32_STREAM_ID, *LPWIN32_STREAM_ID ; + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +ReadFileScatter( + HANDLE hFile, + FILE_SEGMENT_ELEMENT aSegmentArray[], + DWORD nNumberOfBytesToRead, + LPDWORD lpReserved, + LPOVERLAPPED lpOverlapped + ); + +__declspec(dllimport) +BOOL +__stdcall +WriteFileGather( + HANDLE hFile, + FILE_SEGMENT_ELEMENT aSegmentArray[], + DWORD nNumberOfBytesToWrite, + LPDWORD lpReserved, + LPOVERLAPPED lpOverlapped + ); + + + + + + + + + + + + + + + + +#line 3773 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +typedef struct _STARTUPINFOA { + DWORD cb; + LPSTR lpReserved; + LPSTR lpDesktop; + LPSTR lpTitle; + DWORD dwX; + DWORD dwY; + DWORD dwXSize; + DWORD dwYSize; + DWORD dwXCountChars; + DWORD dwYCountChars; + DWORD dwFillAttribute; + DWORD dwFlags; + WORD wShowWindow; + WORD cbReserved2; + LPBYTE lpReserved2; + HANDLE hStdInput; + HANDLE hStdOutput; + HANDLE hStdError; +} STARTUPINFOA, *LPSTARTUPINFOA; +typedef struct _STARTUPINFOW { + DWORD cb; + LPWSTR lpReserved; + LPWSTR lpDesktop; + LPWSTR lpTitle; + DWORD dwX; + DWORD dwY; + DWORD dwXSize; + DWORD dwYSize; + DWORD dwXCountChars; + DWORD dwYCountChars; + DWORD dwFillAttribute; + DWORD dwFlags; + WORD wShowWindow; + WORD cbReserved2; + LPBYTE lpReserved2; + HANDLE hStdInput; + HANDLE hStdOutput; + HANDLE hStdError; +} STARTUPINFOW, *LPSTARTUPINFOW; + + + + +typedef STARTUPINFOA STARTUPINFO; +typedef LPSTARTUPINFOA LPSTARTUPINFO; +#line 3821 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + +typedef struct _WIN32_FIND_DATAA { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + DWORD dwReserved0; + DWORD dwReserved1; + CHAR cFileName[ 260 ]; + CHAR cAlternateFileName[ 14 ]; + + + + + +} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA; +typedef struct _WIN32_FIND_DATAW { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + DWORD dwReserved0; + DWORD dwReserved1; + WCHAR cFileName[ 260 ]; + WCHAR cAlternateFileName[ 14 ]; + + + + + +} WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW; + + + + + +typedef WIN32_FIND_DATAA WIN32_FIND_DATA; +typedef PWIN32_FIND_DATAA PWIN32_FIND_DATA; +typedef LPWIN32_FIND_DATAA LPWIN32_FIND_DATA; +#line 3867 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +typedef struct _WIN32_FILE_ATTRIBUTE_DATA { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; +} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA; + +__declspec(dllimport) +HANDLE +__stdcall +CreateMutexA( + LPSECURITY_ATTRIBUTES lpMutexAttributes, + BOOL bInitialOwner, + LPCSTR lpName + ); +__declspec(dllimport) +HANDLE +__stdcall +CreateMutexW( + LPSECURITY_ATTRIBUTES lpMutexAttributes, + BOOL bInitialOwner, + LPCWSTR lpName + ); + + + + +#line 3898 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +OpenMutexA( + DWORD dwDesiredAccess, + BOOL bInheritHandle, + LPCSTR lpName + ); +__declspec(dllimport) +HANDLE +__stdcall +OpenMutexW( + DWORD dwDesiredAccess, + BOOL bInheritHandle, + LPCWSTR lpName + ); + + + + +#line 3920 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +CreateEventA( + LPSECURITY_ATTRIBUTES lpEventAttributes, + BOOL bManualReset, + BOOL bInitialState, + LPCSTR lpName + ); +__declspec(dllimport) +HANDLE +__stdcall +CreateEventW( + LPSECURITY_ATTRIBUTES lpEventAttributes, + BOOL bManualReset, + BOOL bInitialState, + LPCWSTR lpName + ); + + + + +#line 3944 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +OpenEventA( + DWORD dwDesiredAccess, + BOOL bInheritHandle, + LPCSTR lpName + ); +__declspec(dllimport) +HANDLE +__stdcall +OpenEventW( + DWORD dwDesiredAccess, + BOOL bInheritHandle, + LPCWSTR lpName + ); + + + + +#line 3966 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +CreateSemaphoreA( + LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, + LONG lInitialCount, + LONG lMaximumCount, + LPCSTR lpName + ); +__declspec(dllimport) +HANDLE +__stdcall +CreateSemaphoreW( + LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, + LONG lInitialCount, + LONG lMaximumCount, + LPCWSTR lpName + ); + + + + +#line 3990 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +OpenSemaphoreA( + DWORD dwDesiredAccess, + BOOL bInheritHandle, + LPCSTR lpName + ); +__declspec(dllimport) +HANDLE +__stdcall +OpenSemaphoreW( + DWORD dwDesiredAccess, + BOOL bInheritHandle, + LPCWSTR lpName + ); + + + + +#line 4012 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4085 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +CreateFileMappingA( + HANDLE hFile, + LPSECURITY_ATTRIBUTES lpFileMappingAttributes, + DWORD flProtect, + DWORD dwMaximumSizeHigh, + DWORD dwMaximumSizeLow, + LPCSTR lpName + ); +__declspec(dllimport) +HANDLE +__stdcall +CreateFileMappingW( + HANDLE hFile, + LPSECURITY_ATTRIBUTES lpFileMappingAttributes, + DWORD flProtect, + DWORD dwMaximumSizeHigh, + DWORD dwMaximumSizeLow, + LPCWSTR lpName + ); + + + + +#line 4113 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +OpenFileMappingA( + DWORD dwDesiredAccess, + BOOL bInheritHandle, + LPCSTR lpName + ); +__declspec(dllimport) +HANDLE +__stdcall +OpenFileMappingW( + DWORD dwDesiredAccess, + BOOL bInheritHandle, + LPCWSTR lpName + ); + + + + +#line 4135 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetLogicalDriveStringsA( + DWORD nBufferLength, + LPSTR lpBuffer + ); +__declspec(dllimport) +DWORD +__stdcall +GetLogicalDriveStringsW( + DWORD nBufferLength, + LPWSTR lpBuffer + ); + + + + +#line 4155 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HMODULE +__stdcall +LoadLibraryA( + LPCSTR lpLibFileName + ); +__declspec(dllimport) +HMODULE +__stdcall +LoadLibraryW( + LPCWSTR lpLibFileName + ); + + + + +#line 4173 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HMODULE +__stdcall +LoadLibraryExA( + LPCSTR lpLibFileName, + HANDLE hFile, + DWORD dwFlags + ); +__declspec(dllimport) +HMODULE +__stdcall +LoadLibraryExW( + LPCWSTR lpLibFileName, + HANDLE hFile, + DWORD dwFlags + ); + + + + +#line 4195 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + +__declspec(dllimport) +DWORD +__stdcall +GetModuleFileNameA( + HMODULE hModule, + LPSTR lpFilename, + DWORD nSize + ); +__declspec(dllimport) +DWORD +__stdcall +GetModuleFileNameW( + HMODULE hModule, + LPWSTR lpFilename, + DWORD nSize + ); + + + + +#line 4223 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HMODULE +__stdcall +GetModuleHandleA( + LPCSTR lpModuleName + ); +__declspec(dllimport) +HMODULE +__stdcall +GetModuleHandleW( + LPCWSTR lpModuleName + ); + + + + +#line 4241 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +CreateProcessA( + LPCSTR lpApplicationName, + LPSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCSTR lpCurrentDirectory, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation + ); +__declspec(dllimport) +BOOL +__stdcall +CreateProcessW( + LPCWSTR lpApplicationName, + LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation + ); + + + + +#line 4277 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +SetProcessShutdownParameters( + DWORD dwLevel, + DWORD dwFlags + ); + +__declspec(dllimport) +BOOL +__stdcall +GetProcessShutdownParameters( + LPDWORD lpdwLevel, + LPDWORD lpdwFlags + ); + +__declspec(dllimport) +DWORD +__stdcall +GetProcessVersion( + DWORD ProcessId + ); + +__declspec(dllimport) +void +__stdcall +FatalAppExitA( + UINT uAction, + LPCSTR lpMessageText + ); +__declspec(dllimport) +void +__stdcall +FatalAppExitW( + UINT uAction, + LPCWSTR lpMessageText + ); + + + + +#line 4320 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +void +__stdcall +GetStartupInfoA( + LPSTARTUPINFOA lpStartupInfo + ); +__declspec(dllimport) +void +__stdcall +GetStartupInfoW( + LPSTARTUPINFOW lpStartupInfo + ); + + + + +#line 4338 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +LPSTR +__stdcall +GetCommandLineA( + void + ); +__declspec(dllimport) +LPWSTR +__stdcall +GetCommandLineW( + void + ); + + + + +#line 4356 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetEnvironmentVariableA( + LPCSTR lpName, + LPSTR lpBuffer, + DWORD nSize + ); +__declspec(dllimport) +DWORD +__stdcall +GetEnvironmentVariableW( + LPCWSTR lpName, + LPWSTR lpBuffer, + DWORD nSize + ); + + + + +#line 4378 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +SetEnvironmentVariableA( + LPCSTR lpName, + LPCSTR lpValue + ); +__declspec(dllimport) +BOOL +__stdcall +SetEnvironmentVariableW( + LPCWSTR lpName, + LPCWSTR lpValue + ); + + + + +#line 4398 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +ExpandEnvironmentStringsA( + LPCSTR lpSrc, + LPSTR lpDst, + DWORD nSize + ); +__declspec(dllimport) +DWORD +__stdcall +ExpandEnvironmentStringsW( + LPCWSTR lpSrc, + LPWSTR lpDst, + DWORD nSize + ); + + + + +#line 4420 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +void +__stdcall +OutputDebugStringA( + LPCSTR lpOutputString + ); +__declspec(dllimport) +void +__stdcall +OutputDebugStringW( + LPCWSTR lpOutputString + ); + + + + +#line 4438 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HRSRC +__stdcall +FindResourceA( + HMODULE hModule, + LPCSTR lpName, + LPCSTR lpType + ); +__declspec(dllimport) +HRSRC +__stdcall +FindResourceW( + HMODULE hModule, + LPCWSTR lpName, + LPCWSTR lpType + ); + + + + +#line 4460 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HRSRC +__stdcall +FindResourceExA( + HMODULE hModule, + LPCSTR lpType, + LPCSTR lpName, + WORD wLanguage + ); +__declspec(dllimport) +HRSRC +__stdcall +FindResourceExW( + HMODULE hModule, + LPCWSTR lpType, + LPCWSTR lpName, + WORD wLanguage + ); + + + + +#line 4484 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +typedef BOOL (__stdcall* ENUMRESTYPEPROC)(HMODULE hModule, LPTSTR lpType, + LONG lParam); +typedef BOOL (__stdcall* ENUMRESNAMEPROC)(HMODULE hModule, LPCTSTR lpType, + LPTSTR lpName, LONG lParam); +typedef BOOL (__stdcall* ENUMRESLANGPROC)(HMODULE hModule, LPCTSTR lpType, + LPCTSTR lpName, WORD wLanguage, LONG lParam); + + + + +#line 4497 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +EnumResourceTypesA( + HMODULE hModule, + ENUMRESTYPEPROC lpEnumFunc, + LONG lParam + ); +__declspec(dllimport) +BOOL +__stdcall +EnumResourceTypesW( + HMODULE hModule, + ENUMRESTYPEPROC lpEnumFunc, + LONG lParam + ); + + + + +#line 4519 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +BOOL +__stdcall +EnumResourceNamesA( + HMODULE hModule, + LPCSTR lpType, + ENUMRESNAMEPROC lpEnumFunc, + LONG lParam + ); +__declspec(dllimport) +BOOL +__stdcall +EnumResourceNamesW( + HMODULE hModule, + LPCWSTR lpType, + ENUMRESNAMEPROC lpEnumFunc, + LONG lParam + ); + + + + +#line 4544 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +EnumResourceLanguagesA( + HMODULE hModule, + LPCSTR lpType, + LPCSTR lpName, + ENUMRESLANGPROC lpEnumFunc, + LONG lParam + ); +__declspec(dllimport) +BOOL +__stdcall +EnumResourceLanguagesW( + HMODULE hModule, + LPCWSTR lpType, + LPCWSTR lpName, + ENUMRESLANGPROC lpEnumFunc, + LONG lParam + ); + + + + +#line 4570 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +BeginUpdateResourceA( + LPCSTR pFileName, + BOOL bDeleteExistingResources + ); +__declspec(dllimport) +HANDLE +__stdcall +BeginUpdateResourceW( + LPCWSTR pFileName, + BOOL bDeleteExistingResources + ); + + + + +#line 4590 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +UpdateResourceA( + HANDLE hUpdate, + LPCSTR lpType, + LPCSTR lpName, + WORD wLanguage, + LPVOID lpData, + DWORD cbData + ); +__declspec(dllimport) +BOOL +__stdcall +UpdateResourceW( + HANDLE hUpdate, + LPCWSTR lpType, + LPCWSTR lpName, + WORD wLanguage, + LPVOID lpData, + DWORD cbData + ); + + + + +#line 4618 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +EndUpdateResourceA( + HANDLE hUpdate, + BOOL fDiscard + ); +__declspec(dllimport) +BOOL +__stdcall +EndUpdateResourceW( + HANDLE hUpdate, + BOOL fDiscard + ); + + + + +#line 4638 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +ATOM +__stdcall +GlobalAddAtomA( + LPCSTR lpString + ); +__declspec(dllimport) +ATOM +__stdcall +GlobalAddAtomW( + LPCWSTR lpString + ); + + + + +#line 4656 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +ATOM +__stdcall +GlobalFindAtomA( + LPCSTR lpString + ); +__declspec(dllimport) +ATOM +__stdcall +GlobalFindAtomW( + LPCWSTR lpString + ); + + + + +#line 4674 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +UINT +__stdcall +GlobalGetAtomNameA( + ATOM nAtom, + LPSTR lpBuffer, + int nSize + ); +__declspec(dllimport) +UINT +__stdcall +GlobalGetAtomNameW( + ATOM nAtom, + LPWSTR lpBuffer, + int nSize + ); + + + + +#line 4696 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +ATOM +__stdcall +AddAtomA( + LPCSTR lpString + ); +__declspec(dllimport) +ATOM +__stdcall +AddAtomW( + LPCWSTR lpString + ); + + + + +#line 4714 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +ATOM +__stdcall +FindAtomA( + LPCSTR lpString + ); +__declspec(dllimport) +ATOM +__stdcall +FindAtomW( + LPCWSTR lpString + ); + + + + +#line 4732 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +UINT +__stdcall +GetAtomNameA( + ATOM nAtom, + LPSTR lpBuffer, + int nSize + ); +__declspec(dllimport) +UINT +__stdcall +GetAtomNameW( + ATOM nAtom, + LPWSTR lpBuffer, + int nSize + ); + + + + +#line 4754 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +UINT +__stdcall +GetProfileIntA( + LPCSTR lpAppName, + LPCSTR lpKeyName, + INT nDefault + ); +__declspec(dllimport) +UINT +__stdcall +GetProfileIntW( + LPCWSTR lpAppName, + LPCWSTR lpKeyName, + INT nDefault + ); + + + + +#line 4776 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetProfileStringA( + LPCSTR lpAppName, + LPCSTR lpKeyName, + LPCSTR lpDefault, + LPSTR lpReturnedString, + DWORD nSize + ); +__declspec(dllimport) +DWORD +__stdcall +GetProfileStringW( + LPCWSTR lpAppName, + LPCWSTR lpKeyName, + LPCWSTR lpDefault, + LPWSTR lpReturnedString, + DWORD nSize + ); + + + + +#line 4802 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +WriteProfileStringA( + LPCSTR lpAppName, + LPCSTR lpKeyName, + LPCSTR lpString + ); +__declspec(dllimport) +BOOL +__stdcall +WriteProfileStringW( + LPCWSTR lpAppName, + LPCWSTR lpKeyName, + LPCWSTR lpString + ); + + + + +#line 4824 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetProfileSectionA( + LPCSTR lpAppName, + LPSTR lpReturnedString, + DWORD nSize + ); +__declspec(dllimport) +DWORD +__stdcall +GetProfileSectionW( + LPCWSTR lpAppName, + LPWSTR lpReturnedString, + DWORD nSize + ); + + + + +#line 4846 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +WriteProfileSectionA( + LPCSTR lpAppName, + LPCSTR lpString + ); +__declspec(dllimport) +BOOL +__stdcall +WriteProfileSectionW( + LPCWSTR lpAppName, + LPCWSTR lpString + ); + + + + +#line 4866 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +UINT +__stdcall +GetPrivateProfileIntA( + LPCSTR lpAppName, + LPCSTR lpKeyName, + INT nDefault, + LPCSTR lpFileName + ); +__declspec(dllimport) +UINT +__stdcall +GetPrivateProfileIntW( + LPCWSTR lpAppName, + LPCWSTR lpKeyName, + INT nDefault, + LPCWSTR lpFileName + ); + + + + +#line 4890 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetPrivateProfileStringA( + LPCSTR lpAppName, + LPCSTR lpKeyName, + LPCSTR lpDefault, + LPSTR lpReturnedString, + DWORD nSize, + LPCSTR lpFileName + ); +__declspec(dllimport) +DWORD +__stdcall +GetPrivateProfileStringW( + LPCWSTR lpAppName, + LPCWSTR lpKeyName, + LPCWSTR lpDefault, + LPWSTR lpReturnedString, + DWORD nSize, + LPCWSTR lpFileName + ); + + + + +#line 4918 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +WritePrivateProfileStringA( + LPCSTR lpAppName, + LPCSTR lpKeyName, + LPCSTR lpString, + LPCSTR lpFileName + ); +__declspec(dllimport) +BOOL +__stdcall +WritePrivateProfileStringW( + LPCWSTR lpAppName, + LPCWSTR lpKeyName, + LPCWSTR lpString, + LPCWSTR lpFileName + ); + + + + +#line 4942 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetPrivateProfileSectionA( + LPCSTR lpAppName, + LPSTR lpReturnedString, + DWORD nSize, + LPCSTR lpFileName + ); +__declspec(dllimport) +DWORD +__stdcall +GetPrivateProfileSectionW( + LPCWSTR lpAppName, + LPWSTR lpReturnedString, + DWORD nSize, + LPCWSTR lpFileName + ); + + + + +#line 4966 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +WritePrivateProfileSectionA( + LPCSTR lpAppName, + LPCSTR lpString, + LPCSTR lpFileName + ); +__declspec(dllimport) +BOOL +__stdcall +WritePrivateProfileSectionW( + LPCWSTR lpAppName, + LPCWSTR lpString, + LPCWSTR lpFileName + ); + + + + +#line 4988 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +DWORD +__stdcall +GetPrivateProfileSectionNamesA( + LPSTR lpszReturnBuffer, + DWORD nSize, + LPCSTR lpFileName + ); +__declspec(dllimport) +DWORD +__stdcall +GetPrivateProfileSectionNamesW( + LPWSTR lpszReturnBuffer, + DWORD nSize, + LPCWSTR lpFileName + ); + + + + +#line 5011 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +GetPrivateProfileStructA( + LPCSTR lpszSection, + LPCSTR lpszKey, + LPVOID lpStruct, + UINT uSizeStruct, + LPCSTR szFile + ); +__declspec(dllimport) +BOOL +__stdcall +GetPrivateProfileStructW( + LPCWSTR lpszSection, + LPCWSTR lpszKey, + LPVOID lpStruct, + UINT uSizeStruct, + LPCWSTR szFile + ); + + + + +#line 5037 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +WritePrivateProfileStructA( + LPCSTR lpszSection, + LPCSTR lpszKey, + LPVOID lpStruct, + UINT uSizeStruct, + LPCSTR szFile + ); +__declspec(dllimport) +BOOL +__stdcall +WritePrivateProfileStructW( + LPCWSTR lpszSection, + LPCWSTR lpszKey, + LPVOID lpStruct, + UINT uSizeStruct, + LPCWSTR szFile + ); + + + + +#line 5063 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +UINT +__stdcall +GetDriveTypeA( + LPCSTR lpRootPathName + ); +__declspec(dllimport) +UINT +__stdcall +GetDriveTypeW( + LPCWSTR lpRootPathName + ); + + + + +#line 5082 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +UINT +__stdcall +GetSystemDirectoryA( + LPSTR lpBuffer, + UINT uSize + ); +__declspec(dllimport) +UINT +__stdcall +GetSystemDirectoryW( + LPWSTR lpBuffer, + UINT uSize + ); + + + + +#line 5102 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetTempPathA( + DWORD nBufferLength, + LPSTR lpBuffer + ); +__declspec(dllimport) +DWORD +__stdcall +GetTempPathW( + DWORD nBufferLength, + LPWSTR lpBuffer + ); + + + + +#line 5122 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +UINT +__stdcall +GetTempFileNameA( + LPCSTR lpPathName, + LPCSTR lpPrefixString, + UINT uUnique, + LPSTR lpTempFileName + ); +__declspec(dllimport) +UINT +__stdcall +GetTempFileNameW( + LPCWSTR lpPathName, + LPCWSTR lpPrefixString, + UINT uUnique, + LPWSTR lpTempFileName + ); + + + + +#line 5146 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +UINT +__stdcall +GetWindowsDirectoryA( + LPSTR lpBuffer, + UINT uSize + ); +__declspec(dllimport) +UINT +__stdcall +GetWindowsDirectoryW( + LPWSTR lpBuffer, + UINT uSize + ); + + + + +#line 5166 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +SetCurrentDirectoryA( + LPCSTR lpPathName + ); +__declspec(dllimport) +BOOL +__stdcall +SetCurrentDirectoryW( + LPCWSTR lpPathName + ); + + + + +#line 5184 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetCurrentDirectoryA( + DWORD nBufferLength, + LPSTR lpBuffer + ); +__declspec(dllimport) +DWORD +__stdcall +GetCurrentDirectoryW( + DWORD nBufferLength, + LPWSTR lpBuffer + ); + + + + +#line 5204 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +GetDiskFreeSpaceA( + LPCSTR lpRootPathName, + LPDWORD lpSectorsPerCluster, + LPDWORD lpBytesPerSector, + LPDWORD lpNumberOfFreeClusters, + LPDWORD lpTotalNumberOfClusters + ); +__declspec(dllimport) +BOOL +__stdcall +GetDiskFreeSpaceW( + LPCWSTR lpRootPathName, + LPDWORD lpSectorsPerCluster, + LPDWORD lpBytesPerSector, + LPDWORD lpNumberOfFreeClusters, + LPDWORD lpTotalNumberOfClusters + ); + + + + +#line 5230 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +GetDiskFreeSpaceExA( + LPCSTR lpDirectoryName, + PULARGE_INTEGER lpFreeBytesAvailableToCaller, + PULARGE_INTEGER lpTotalNumberOfBytes, + PULARGE_INTEGER lpTotalNumberOfFreeBytes + ); +__declspec(dllimport) +BOOL +__stdcall +GetDiskFreeSpaceExW( + LPCWSTR lpDirectoryName, + PULARGE_INTEGER lpFreeBytesAvailableToCaller, + PULARGE_INTEGER lpTotalNumberOfBytes, + PULARGE_INTEGER lpTotalNumberOfFreeBytes + ); + + + + +#line 5254 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +CreateDirectoryA( + LPCSTR lpPathName, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); +__declspec(dllimport) +BOOL +__stdcall +CreateDirectoryW( + LPCWSTR lpPathName, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); + + + + +#line 5274 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +CreateDirectoryExA( + LPCSTR lpTemplateDirectory, + LPCSTR lpNewDirectory, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); +__declspec(dllimport) +BOOL +__stdcall +CreateDirectoryExW( + LPCWSTR lpTemplateDirectory, + LPCWSTR lpNewDirectory, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); + + + + +#line 5296 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +RemoveDirectoryA( + LPCSTR lpPathName + ); +__declspec(dllimport) +BOOL +__stdcall +RemoveDirectoryW( + LPCWSTR lpPathName + ); + + + + +#line 5314 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetFullPathNameA( + LPCSTR lpFileName, + DWORD nBufferLength, + LPSTR lpBuffer, + LPSTR *lpFilePart + ); +__declspec(dllimport) +DWORD +__stdcall +GetFullPathNameW( + LPCWSTR lpFileName, + DWORD nBufferLength, + LPWSTR lpBuffer, + LPWSTR *lpFilePart + ); + + + + +#line 5338 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +DefineDosDeviceA( + DWORD dwFlags, + LPCSTR lpDeviceName, + LPCSTR lpTargetPath + ); +__declspec(dllimport) +BOOL +__stdcall +DefineDosDeviceW( + DWORD dwFlags, + LPCWSTR lpDeviceName, + LPCWSTR lpTargetPath + ); + + + + +#line 5366 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +QueryDosDeviceA( + LPCSTR lpDeviceName, + LPSTR lpTargetPath, + DWORD ucchMax + ); +__declspec(dllimport) +DWORD +__stdcall +QueryDosDeviceW( + LPCWSTR lpDeviceName, + LPWSTR lpTargetPath, + DWORD ucchMax + ); + + + + +#line 5388 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + +__declspec(dllimport) +HANDLE +__stdcall +CreateFileA( + LPCSTR lpFileName, + DWORD dwDesiredAccess, + DWORD dwShareMode, + LPSECURITY_ATTRIBUTES lpSecurityAttributes, + DWORD dwCreationDisposition, + DWORD dwFlagsAndAttributes, + HANDLE hTemplateFile + ); +__declspec(dllimport) +HANDLE +__stdcall +CreateFileW( + LPCWSTR lpFileName, + DWORD dwDesiredAccess, + DWORD dwShareMode, + LPSECURITY_ATTRIBUTES lpSecurityAttributes, + DWORD dwCreationDisposition, + DWORD dwFlagsAndAttributes, + HANDLE hTemplateFile + ); + + + + +#line 5420 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +SetFileAttributesA( + LPCSTR lpFileName, + DWORD dwFileAttributes + ); +__declspec(dllimport) +BOOL +__stdcall +SetFileAttributesW( + LPCWSTR lpFileName, + DWORD dwFileAttributes + ); + + + + +#line 5440 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetFileAttributesA( + LPCSTR lpFileName + ); +__declspec(dllimport) +DWORD +__stdcall +GetFileAttributesW( + LPCWSTR lpFileName + ); + + + + +#line 5458 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +typedef enum _GET_FILEEX_INFO_LEVELS { + GetFileExInfoStandard, + GetFileExMaxInfoLevel +} GET_FILEEX_INFO_LEVELS; + +__declspec(dllimport) +BOOL +__stdcall +GetFileAttributesExA( + LPCSTR lpFileName, + GET_FILEEX_INFO_LEVELS fInfoLevelId, + LPVOID lpFileInformation + ); +__declspec(dllimport) +BOOL +__stdcall +GetFileAttributesExW( + LPCWSTR lpFileName, + GET_FILEEX_INFO_LEVELS fInfoLevelId, + LPVOID lpFileInformation + ); + + + + +#line 5485 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +GetCompressedFileSizeA( + LPCSTR lpFileName, + LPDWORD lpFileSizeHigh + ); +__declspec(dllimport) +DWORD +__stdcall +GetCompressedFileSizeW( + LPCWSTR lpFileName, + LPDWORD lpFileSizeHigh + ); + + + + +#line 5505 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +DeleteFileA( + LPCSTR lpFileName + ); +__declspec(dllimport) +BOOL +__stdcall +DeleteFileW( + LPCWSTR lpFileName + ); + + + + +#line 5523 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5567 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +FindFirstFileA( + LPCSTR lpFileName, + LPWIN32_FIND_DATAA lpFindFileData + ); +__declspec(dllimport) +HANDLE +__stdcall +FindFirstFileW( + LPCWSTR lpFileName, + LPWIN32_FIND_DATAW lpFindFileData + ); + + + + +#line 5587 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +FindNextFileA( + HANDLE hFindFile, + LPWIN32_FIND_DATAA lpFindFileData + ); +__declspec(dllimport) +BOOL +__stdcall +FindNextFileW( + HANDLE hFindFile, + LPWIN32_FIND_DATAW lpFindFileData + ); + + + + +#line 5607 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +DWORD +__stdcall +SearchPathA( + LPCSTR lpPath, + LPCSTR lpFileName, + LPCSTR lpExtension, + DWORD nBufferLength, + LPSTR lpBuffer, + LPSTR *lpFilePart + ); +__declspec(dllimport) +DWORD +__stdcall +SearchPathW( + LPCWSTR lpPath, + LPCWSTR lpFileName, + LPCWSTR lpExtension, + DWORD nBufferLength, + LPWSTR lpBuffer, + LPWSTR *lpFilePart + ); + + + + +#line 5635 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +CopyFileA( + LPCSTR lpExistingFileName, + LPCSTR lpNewFileName, + BOOL bFailIfExists + ); +__declspec(dllimport) +BOOL +__stdcall +CopyFileW( + LPCWSTR lpExistingFileName, + LPCWSTR lpNewFileName, + BOOL bFailIfExists + ); + + + + +#line 5657 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5701 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +MoveFileA( + LPCSTR lpExistingFileName, + LPCSTR lpNewFileName + ); +__declspec(dllimport) +BOOL +__stdcall +MoveFileW( + LPCWSTR lpExistingFileName, + LPCWSTR lpNewFileName + ); + + + + +#line 5721 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +MoveFileExA( + LPCSTR lpExistingFileName, + LPCSTR lpNewFileName, + DWORD dwFlags + ); +__declspec(dllimport) +BOOL +__stdcall +MoveFileExW( + LPCWSTR lpExistingFileName, + LPCWSTR lpNewFileName, + DWORD dwFlags + ); + + + + +#line 5743 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5771 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + +#line 5780 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5810 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +HANDLE +__stdcall +CreateNamedPipeA( + LPCSTR lpName, + DWORD dwOpenMode, + DWORD dwPipeMode, + DWORD nMaxInstances, + DWORD nOutBufferSize, + DWORD nInBufferSize, + DWORD nDefaultTimeOut, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); +__declspec(dllimport) +HANDLE +__stdcall +CreateNamedPipeW( + LPCWSTR lpName, + DWORD dwOpenMode, + DWORD dwPipeMode, + DWORD nMaxInstances, + DWORD nOutBufferSize, + DWORD nInBufferSize, + DWORD nDefaultTimeOut, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); + + + + +#line 5843 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +GetNamedPipeHandleStateA( + HANDLE hNamedPipe, + LPDWORD lpState, + LPDWORD lpCurInstances, + LPDWORD lpMaxCollectionCount, + LPDWORD lpCollectDataTimeout, + LPSTR lpUserName, + DWORD nMaxUserNameSize + ); +__declspec(dllimport) +BOOL +__stdcall +GetNamedPipeHandleStateW( + HANDLE hNamedPipe, + LPDWORD lpState, + LPDWORD lpCurInstances, + LPDWORD lpMaxCollectionCount, + LPDWORD lpCollectDataTimeout, + LPWSTR lpUserName, + DWORD nMaxUserNameSize + ); + + + + +#line 5873 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +CallNamedPipeA( + LPCSTR lpNamedPipeName, + LPVOID lpInBuffer, + DWORD nInBufferSize, + LPVOID lpOutBuffer, + DWORD nOutBufferSize, + LPDWORD lpBytesRead, + DWORD nTimeOut + ); +__declspec(dllimport) +BOOL +__stdcall +CallNamedPipeW( + LPCWSTR lpNamedPipeName, + LPVOID lpInBuffer, + DWORD nInBufferSize, + LPVOID lpOutBuffer, + DWORD nOutBufferSize, + LPDWORD lpBytesRead, + DWORD nTimeOut + ); + + + + +#line 5903 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +WaitNamedPipeA( + LPCSTR lpNamedPipeName, + DWORD nTimeOut + ); +__declspec(dllimport) +BOOL +__stdcall +WaitNamedPipeW( + LPCWSTR lpNamedPipeName, + DWORD nTimeOut + ); + + + + +#line 5923 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +SetVolumeLabelA( + LPCSTR lpRootPathName, + LPCSTR lpVolumeName + ); +__declspec(dllimport) +BOOL +__stdcall +SetVolumeLabelW( + LPCWSTR lpRootPathName, + LPCWSTR lpVolumeName + ); + + + + +#line 5943 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +void +__stdcall +SetFileApisToOEM( void ); + +__declspec(dllimport) +void +__stdcall +SetFileApisToANSI( void ); + +__declspec(dllimport) +BOOL +__stdcall +AreFileApisANSI( void ); + +__declspec(dllimport) +BOOL +__stdcall +GetVolumeInformationA( + LPCSTR lpRootPathName, + LPSTR lpVolumeNameBuffer, + DWORD nVolumeNameSize, + LPDWORD lpVolumeSerialNumber, + LPDWORD lpMaximumComponentLength, + LPDWORD lpFileSystemFlags, + LPSTR lpFileSystemNameBuffer, + DWORD nFileSystemNameSize + ); +__declspec(dllimport) +BOOL +__stdcall +GetVolumeInformationW( + LPCWSTR lpRootPathName, + LPWSTR lpVolumeNameBuffer, + DWORD nVolumeNameSize, + LPDWORD lpVolumeSerialNumber, + LPDWORD lpMaximumComponentLength, + LPDWORD lpFileSystemFlags, + LPWSTR lpFileSystemNameBuffer, + DWORD nFileSystemNameSize + ); + + + + +#line 5990 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +CancelIo( + HANDLE hFile + ); + + + + + +__declspec(dllimport) +BOOL +__stdcall +ClearEventLogA ( + HANDLE hEventLog, + LPCSTR lpBackupFileName + ); +__declspec(dllimport) +BOOL +__stdcall +ClearEventLogW ( + HANDLE hEventLog, + LPCWSTR lpBackupFileName + ); + + + + +#line 6021 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +BackupEventLogA ( + HANDLE hEventLog, + LPCSTR lpBackupFileName + ); +__declspec(dllimport) +BOOL +__stdcall +BackupEventLogW ( + HANDLE hEventLog, + LPCWSTR lpBackupFileName + ); + + + + +#line 6041 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +CloseEventLog ( + HANDLE hEventLog + ); + +__declspec(dllimport) +BOOL +__stdcall +DeregisterEventSource ( + HANDLE hEventLog + ); + +__declspec(dllimport) +BOOL +__stdcall +NotifyChangeEventLog( + HANDLE hEventLog, + HANDLE hEvent + ); + +__declspec(dllimport) +BOOL +__stdcall +GetNumberOfEventLogRecords ( + HANDLE hEventLog, + PDWORD NumberOfRecords + ); + +__declspec(dllimport) +BOOL +__stdcall +GetOldestEventLogRecord ( + HANDLE hEventLog, + PDWORD OldestRecord + ); + +__declspec(dllimport) +HANDLE +__stdcall +OpenEventLogA ( + LPCSTR lpUNCServerName, + LPCSTR lpSourceName + ); +__declspec(dllimport) +HANDLE +__stdcall +OpenEventLogW ( + LPCWSTR lpUNCServerName, + LPCWSTR lpSourceName + ); + + + + +#line 6099 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +RegisterEventSourceA ( + LPCSTR lpUNCServerName, + LPCSTR lpSourceName + ); +__declspec(dllimport) +HANDLE +__stdcall +RegisterEventSourceW ( + LPCWSTR lpUNCServerName, + LPCWSTR lpSourceName + ); + + + + +#line 6119 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +HANDLE +__stdcall +OpenBackupEventLogA ( + LPCSTR lpUNCServerName, + LPCSTR lpFileName + ); +__declspec(dllimport) +HANDLE +__stdcall +OpenBackupEventLogW ( + LPCWSTR lpUNCServerName, + LPCWSTR lpFileName + ); + + + + +#line 6139 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +ReadEventLogA ( + HANDLE hEventLog, + DWORD dwReadFlags, + DWORD dwRecordOffset, + LPVOID lpBuffer, + DWORD nNumberOfBytesToRead, + DWORD *pnBytesRead, + DWORD *pnMinNumberOfBytesNeeded + ); +__declspec(dllimport) +BOOL +__stdcall +ReadEventLogW ( + HANDLE hEventLog, + DWORD dwReadFlags, + DWORD dwRecordOffset, + LPVOID lpBuffer, + DWORD nNumberOfBytesToRead, + DWORD *pnBytesRead, + DWORD *pnMinNumberOfBytesNeeded + ); + + + + +#line 6169 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +ReportEventA ( + HANDLE hEventLog, + WORD wType, + WORD wCategory, + DWORD dwEventID, + PSID lpUserSid, + WORD wNumStrings, + DWORD dwDataSize, + LPCSTR *lpStrings, + LPVOID lpRawData + ); +__declspec(dllimport) +BOOL +__stdcall +ReportEventW ( + HANDLE hEventLog, + WORD wType, + WORD wCategory, + DWORD dwEventID, + PSID lpUserSid, + WORD wNumStrings, + DWORD dwDataSize, + LPCWSTR *lpStrings, + LPVOID lpRawData + ); + + + + +#line 6203 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +DuplicateToken( + HANDLE ExistingTokenHandle, + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel, + PHANDLE DuplicateTokenHandle + ); + +__declspec(dllimport) +BOOL +__stdcall +GetKernelObjectSecurity ( + HANDLE Handle, + SECURITY_INFORMATION RequestedInformation, + PSECURITY_DESCRIPTOR pSecurityDescriptor, + DWORD nLength, + LPDWORD lpnLengthNeeded + ); + +__declspec(dllimport) +BOOL +__stdcall +ImpersonateNamedPipeClient( + HANDLE hNamedPipe + ); + +__declspec(dllimport) +BOOL +__stdcall +ImpersonateSelf( + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel + ); + + +__declspec(dllimport) +BOOL +__stdcall +RevertToSelf ( + void + ); + +__declspec(dllimport) +BOOL +__stdcall +SetThreadToken ( + PHANDLE Thread, + HANDLE Token + ); + +__declspec(dllimport) +BOOL +__stdcall +AccessCheck ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + HANDLE ClientToken, + DWORD DesiredAccess, + PGENERIC_MAPPING GenericMapping, + PPRIVILEGE_SET PrivilegeSet, + LPDWORD PrivilegeSetLength, + LPDWORD GrantedAccess, + LPBOOL AccessStatus + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6309 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +BOOL +__stdcall +OpenProcessToken ( + HANDLE ProcessHandle, + DWORD DesiredAccess, + PHANDLE TokenHandle + ); + + +__declspec(dllimport) +BOOL +__stdcall +OpenThreadToken ( + HANDLE ThreadHandle, + DWORD DesiredAccess, + BOOL OpenAsSelf, + PHANDLE TokenHandle + ); + + +__declspec(dllimport) +BOOL +__stdcall +GetTokenInformation ( + HANDLE TokenHandle, + TOKEN_INFORMATION_CLASS TokenInformationClass, + LPVOID TokenInformation, + DWORD TokenInformationLength, + PDWORD ReturnLength + ); + + +__declspec(dllimport) +BOOL +__stdcall +SetTokenInformation ( + HANDLE TokenHandle, + TOKEN_INFORMATION_CLASS TokenInformationClass, + LPVOID TokenInformation, + DWORD TokenInformationLength + ); + + +__declspec(dllimport) +BOOL +__stdcall +AdjustTokenPrivileges ( + HANDLE TokenHandle, + BOOL DisableAllPrivileges, + PTOKEN_PRIVILEGES NewState, + DWORD BufferLength, + PTOKEN_PRIVILEGES PreviousState, + PDWORD ReturnLength + ); + + +__declspec(dllimport) +BOOL +__stdcall +AdjustTokenGroups ( + HANDLE TokenHandle, + BOOL ResetToDefault, + PTOKEN_GROUPS NewState, + DWORD BufferLength, + PTOKEN_GROUPS PreviousState, + PDWORD ReturnLength + ); + + +__declspec(dllimport) +BOOL +__stdcall +PrivilegeCheck ( + HANDLE ClientToken, + PPRIVILEGE_SET RequiredPrivileges, + LPBOOL pfResult + ); + + +__declspec(dllimport) +BOOL +__stdcall +AccessCheckAndAuditAlarmA ( + LPCSTR SubsystemName, + LPVOID HandleId, + LPSTR ObjectTypeName, + LPSTR ObjectName, + PSECURITY_DESCRIPTOR SecurityDescriptor, + DWORD DesiredAccess, + PGENERIC_MAPPING GenericMapping, + BOOL ObjectCreation, + LPDWORD GrantedAccess, + LPBOOL AccessStatus, + LPBOOL pfGenerateOnClose + ); +__declspec(dllimport) +BOOL +__stdcall +AccessCheckAndAuditAlarmW ( + LPCWSTR SubsystemName, + LPVOID HandleId, + LPWSTR ObjectTypeName, + LPWSTR ObjectName, + PSECURITY_DESCRIPTOR SecurityDescriptor, + DWORD DesiredAccess, + PGENERIC_MAPPING GenericMapping, + BOOL ObjectCreation, + LPDWORD GrantedAccess, + LPBOOL AccessStatus, + LPBOOL pfGenerateOnClose + ); + + + + +#line 6428 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6528 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +BOOL +__stdcall +ObjectOpenAuditAlarmA ( + LPCSTR SubsystemName, + LPVOID HandleId, + LPSTR ObjectTypeName, + LPSTR ObjectName, + PSECURITY_DESCRIPTOR pSecurityDescriptor, + HANDLE ClientToken, + DWORD DesiredAccess, + DWORD GrantedAccess, + PPRIVILEGE_SET Privileges, + BOOL ObjectCreation, + BOOL AccessGranted, + LPBOOL GenerateOnClose + ); +__declspec(dllimport) +BOOL +__stdcall +ObjectOpenAuditAlarmW ( + LPCWSTR SubsystemName, + LPVOID HandleId, + LPWSTR ObjectTypeName, + LPWSTR ObjectName, + PSECURITY_DESCRIPTOR pSecurityDescriptor, + HANDLE ClientToken, + DWORD DesiredAccess, + DWORD GrantedAccess, + PPRIVILEGE_SET Privileges, + BOOL ObjectCreation, + BOOL AccessGranted, + LPBOOL GenerateOnClose + ); + + + + +#line 6569 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +BOOL +__stdcall +ObjectPrivilegeAuditAlarmA ( + LPCSTR SubsystemName, + LPVOID HandleId, + HANDLE ClientToken, + DWORD DesiredAccess, + PPRIVILEGE_SET Privileges, + BOOL AccessGranted + ); +__declspec(dllimport) +BOOL +__stdcall +ObjectPrivilegeAuditAlarmW ( + LPCWSTR SubsystemName, + LPVOID HandleId, + HANDLE ClientToken, + DWORD DesiredAccess, + PPRIVILEGE_SET Privileges, + BOOL AccessGranted + ); + + + + +#line 6598 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +BOOL +__stdcall +ObjectCloseAuditAlarmA ( + LPCSTR SubsystemName, + LPVOID HandleId, + BOOL GenerateOnClose + ); +__declspec(dllimport) +BOOL +__stdcall +ObjectCloseAuditAlarmW ( + LPCWSTR SubsystemName, + LPVOID HandleId, + BOOL GenerateOnClose + ); + + + + +#line 6621 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +BOOL +__stdcall +ObjectDeleteAuditAlarmA ( + LPCSTR SubsystemName, + LPVOID HandleId, + BOOL GenerateOnClose + ); +__declspec(dllimport) +BOOL +__stdcall +ObjectDeleteAuditAlarmW ( + LPCWSTR SubsystemName, + LPVOID HandleId, + BOOL GenerateOnClose + ); + + + + +#line 6644 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +BOOL +__stdcall +PrivilegedServiceAuditAlarmA ( + LPCSTR SubsystemName, + LPCSTR ServiceName, + HANDLE ClientToken, + PPRIVILEGE_SET Privileges, + BOOL AccessGranted + ); +__declspec(dllimport) +BOOL +__stdcall +PrivilegedServiceAuditAlarmW ( + LPCWSTR SubsystemName, + LPCWSTR ServiceName, + HANDLE ClientToken, + PPRIVILEGE_SET Privileges, + BOOL AccessGranted + ); + + + + +#line 6671 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +BOOL +__stdcall +IsValidSid ( + PSID pSid + ); + + +__declspec(dllimport) +BOOL +__stdcall +EqualSid ( + PSID pSid1, + PSID pSid2 + ); + + +__declspec(dllimport) +BOOL +__stdcall +EqualPrefixSid ( + PSID pSid1, + PSID pSid2 + ); + + +__declspec(dllimport) +DWORD +__stdcall +GetSidLengthRequired ( + UCHAR nSubAuthorityCount + ); + + +__declspec(dllimport) +BOOL +__stdcall +AllocateAndInitializeSid ( + PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, + BYTE nSubAuthorityCount, + DWORD nSubAuthority0, + DWORD nSubAuthority1, + DWORD nSubAuthority2, + DWORD nSubAuthority3, + DWORD nSubAuthority4, + DWORD nSubAuthority5, + DWORD nSubAuthority6, + DWORD nSubAuthority7, + PSID *pSid + ); + +__declspec(dllimport) +PVOID +__stdcall +FreeSid( + PSID pSid + ); + +__declspec(dllimport) +BOOL +__stdcall +InitializeSid ( + PSID Sid, + PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, + BYTE nSubAuthorityCount + ); + + +__declspec(dllimport) +PSID_IDENTIFIER_AUTHORITY +__stdcall +GetSidIdentifierAuthority ( + PSID pSid + ); + + +__declspec(dllimport) +PDWORD +__stdcall +GetSidSubAuthority ( + PSID pSid, + DWORD nSubAuthority + ); + + +__declspec(dllimport) +PUCHAR +__stdcall +GetSidSubAuthorityCount ( + PSID pSid + ); + + +__declspec(dllimport) +DWORD +__stdcall +GetLengthSid ( + PSID pSid + ); + + +__declspec(dllimport) +BOOL +__stdcall +CopySid ( + DWORD nDestinationSidLength, + PSID pDestinationSid, + PSID pSourceSid + ); + + +__declspec(dllimport) +BOOL +__stdcall +AreAllAccessesGranted ( + DWORD GrantedAccess, + DWORD DesiredAccess + ); + + +__declspec(dllimport) +BOOL +__stdcall +AreAnyAccessesGranted ( + DWORD GrantedAccess, + DWORD DesiredAccess + ); + + +__declspec(dllimport) +void +__stdcall +MapGenericMask ( + PDWORD AccessMask, + PGENERIC_MAPPING GenericMapping + ); + + +__declspec(dllimport) +BOOL +__stdcall +IsValidAcl ( + PACL pAcl + ); + + +__declspec(dllimport) +BOOL +__stdcall +InitializeAcl ( + PACL pAcl, + DWORD nAclLength, + DWORD dwAclRevision + ); + + +__declspec(dllimport) +BOOL +__stdcall +GetAclInformation ( + PACL pAcl, + LPVOID pAclInformation, + DWORD nAclInformationLength, + ACL_INFORMATION_CLASS dwAclInformationClass + ); + + +__declspec(dllimport) +BOOL +__stdcall +SetAclInformation ( + PACL pAcl, + LPVOID pAclInformation, + DWORD nAclInformationLength, + ACL_INFORMATION_CLASS dwAclInformationClass + ); + + +__declspec(dllimport) +BOOL +__stdcall +AddAce ( + PACL pAcl, + DWORD dwAceRevision, + DWORD dwStartingAceIndex, + LPVOID pAceList, + DWORD nAceListLength + ); + + +__declspec(dllimport) +BOOL +__stdcall +DeleteAce ( + PACL pAcl, + DWORD dwAceIndex + ); + + +__declspec(dllimport) +BOOL +__stdcall +GetAce ( + PACL pAcl, + DWORD dwAceIndex, + LPVOID *pAce + ); + + +__declspec(dllimport) +BOOL +__stdcall +AddAccessAllowedAce ( + PACL pAcl, + DWORD dwAceRevision, + DWORD AccessMask, + PSID pSid + ); + + + + + + + + + + + + +#line 6904 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +BOOL +__stdcall +AddAccessDeniedAce ( + PACL pAcl, + DWORD dwAceRevision, + DWORD AccessMask, + PSID pSid + ); + + + + + + + + + + + + +#line 6928 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +AddAuditAccessAce( + PACL pAcl, + DWORD dwAceRevision, + DWORD dwAccessMask, + PSID pSid, + BOOL bAuditSuccess, + BOOL bAuditFailure + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6996 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +FindFirstFreeAce ( + PACL pAcl, + LPVOID *pAce + ); + + +__declspec(dllimport) +BOOL +__stdcall +InitializeSecurityDescriptor ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + DWORD dwRevision + ); + + +__declspec(dllimport) +BOOL +__stdcall +IsValidSecurityDescriptor ( + PSECURITY_DESCRIPTOR pSecurityDescriptor + ); + + +__declspec(dllimport) +DWORD +__stdcall +GetSecurityDescriptorLength ( + PSECURITY_DESCRIPTOR pSecurityDescriptor + ); + + +__declspec(dllimport) +BOOL +__stdcall +GetSecurityDescriptorControl ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + PSECURITY_DESCRIPTOR_CONTROL pControl, + LPDWORD lpdwRevision + ); + + + + + + + + + + +#line 7050 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +SetSecurityDescriptorDacl ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + BOOL bDaclPresent, + PACL pDacl, + BOOL bDaclDefaulted + ); + + +__declspec(dllimport) +BOOL +__stdcall +GetSecurityDescriptorDacl ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + LPBOOL lpbDaclPresent, + PACL *pDacl, + LPBOOL lpbDaclDefaulted + ); + + +__declspec(dllimport) +BOOL +__stdcall +SetSecurityDescriptorSacl ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + BOOL bSaclPresent, + PACL pSacl, + BOOL bSaclDefaulted + ); + + +__declspec(dllimport) +BOOL +__stdcall +GetSecurityDescriptorSacl ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + LPBOOL lpbSaclPresent, + PACL *pSacl, + LPBOOL lpbSaclDefaulted + ); + + +__declspec(dllimport) +BOOL +__stdcall +SetSecurityDescriptorOwner ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + PSID pOwner, + BOOL bOwnerDefaulted + ); + + +__declspec(dllimport) +BOOL +__stdcall +GetSecurityDescriptorOwner ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + PSID *pOwner, + LPBOOL lpbOwnerDefaulted + ); + + +__declspec(dllimport) +BOOL +__stdcall +SetSecurityDescriptorGroup ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + PSID pGroup, + BOOL bGroupDefaulted + ); + + +__declspec(dllimport) +BOOL +__stdcall +GetSecurityDescriptorGroup ( + PSECURITY_DESCRIPTOR pSecurityDescriptor, + PSID *pGroup, + LPBOOL lpbGroupDefaulted + ); + + +__declspec(dllimport) +BOOL +__stdcall +CreatePrivateObjectSecurity ( + PSECURITY_DESCRIPTOR ParentDescriptor, + PSECURITY_DESCRIPTOR CreatorDescriptor, + PSECURITY_DESCRIPTOR * NewDescriptor, + BOOL IsDirectoryObject, + HANDLE Token, + PGENERIC_MAPPING GenericMapping + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7175 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +SetPrivateObjectSecurity ( + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR ModificationDescriptor, + PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, + PGENERIC_MAPPING GenericMapping, + HANDLE Token + ); + + + + + + + + + + + + + +#line 7200 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +GetPrivateObjectSecurity ( + PSECURITY_DESCRIPTOR ObjectDescriptor, + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR ResultantDescriptor, + DWORD DescriptorLength, + PDWORD ReturnLength + ); + + +__declspec(dllimport) +BOOL +__stdcall +DestroyPrivateObjectSecurity ( + PSECURITY_DESCRIPTOR * ObjectDescriptor + ); + + +__declspec(dllimport) +BOOL +__stdcall +MakeSelfRelativeSD ( + PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor, + PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor, + LPDWORD lpdwBufferLength + ); + + +__declspec(dllimport) +BOOL +__stdcall +MakeAbsoluteSD ( + PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor, + PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor, + LPDWORD lpdwAbsoluteSecurityDescriptorSize, + PACL pDacl, + LPDWORD lpdwDaclSize, + PACL pSacl, + LPDWORD lpdwSaclSize, + PSID pOwner, + LPDWORD lpdwOwnerSize, + PSID pPrimaryGroup, + LPDWORD lpdwPrimaryGroupSize + ); + + +__declspec(dllimport) +BOOL +__stdcall +SetFileSecurityA ( + LPCSTR lpFileName, + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR pSecurityDescriptor + ); +__declspec(dllimport) +BOOL +__stdcall +SetFileSecurityW ( + LPCWSTR lpFileName, + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR pSecurityDescriptor + ); + + + + +#line 7270 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +BOOL +__stdcall +GetFileSecurityA ( + LPCSTR lpFileName, + SECURITY_INFORMATION RequestedInformation, + PSECURITY_DESCRIPTOR pSecurityDescriptor, + DWORD nLength, + LPDWORD lpnLengthNeeded + ); +__declspec(dllimport) +BOOL +__stdcall +GetFileSecurityW ( + LPCWSTR lpFileName, + SECURITY_INFORMATION RequestedInformation, + PSECURITY_DESCRIPTOR pSecurityDescriptor, + DWORD nLength, + LPDWORD lpnLengthNeeded + ); + + + + +#line 7297 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +__declspec(dllimport) +BOOL +__stdcall +SetKernelObjectSecurity ( + HANDLE Handle, + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR SecurityDescriptor + ); + + + +__declspec(dllimport) +HANDLE +__stdcall +FindFirstChangeNotificationA( + LPCSTR lpPathName, + BOOL bWatchSubtree, + DWORD dwNotifyFilter + ); +__declspec(dllimport) +HANDLE +__stdcall +FindFirstChangeNotificationW( + LPCWSTR lpPathName, + BOOL bWatchSubtree, + DWORD dwNotifyFilter + ); + + + + +#line 7331 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +FindNextChangeNotification( + HANDLE hChangeHandle + ); + +__declspec(dllimport) +BOOL +__stdcall +FindCloseChangeNotification( + HANDLE hChangeHandle + ); + + + + + + + + + + + + + + + +#line 7361 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +VirtualLock( + LPVOID lpAddress, + DWORD dwSize + ); + +__declspec(dllimport) +BOOL +__stdcall +VirtualUnlock( + LPVOID lpAddress, + DWORD dwSize + ); + +__declspec(dllimport) +LPVOID +__stdcall +MapViewOfFileEx( + HANDLE hFileMappingObject, + DWORD dwDesiredAccess, + DWORD dwFileOffsetHigh, + DWORD dwFileOffsetLow, + DWORD dwNumberOfBytesToMap, + LPVOID lpBaseAddress + ); + +__declspec(dllimport) +BOOL +__stdcall +SetPriorityClass( + HANDLE hProcess, + DWORD dwPriorityClass + ); + +__declspec(dllimport) +DWORD +__stdcall +GetPriorityClass( + HANDLE hProcess + ); + +__declspec(dllimport) +BOOL +__stdcall +IsBadReadPtr( + const void *lp, + UINT ucb + ); + +__declspec(dllimport) +BOOL +__stdcall +IsBadWritePtr( + LPVOID lp, + UINT ucb + ); + +__declspec(dllimport) +BOOL +__stdcall +IsBadHugeReadPtr( + const void *lp, + UINT ucb + ); + +__declspec(dllimport) +BOOL +__stdcall +IsBadHugeWritePtr( + LPVOID lp, + UINT ucb + ); + +__declspec(dllimport) +BOOL +__stdcall +IsBadCodePtr( + FARPROC lpfn + ); + +__declspec(dllimport) +BOOL +__stdcall +IsBadStringPtrA( + LPCSTR lpsz, + UINT ucchMax + ); +__declspec(dllimport) +BOOL +__stdcall +IsBadStringPtrW( + LPCWSTR lpsz, + UINT ucchMax + ); + + + + +#line 7463 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +LookupAccountSidA( + LPCSTR lpSystemName, + PSID Sid, + LPSTR Name, + LPDWORD cbName, + LPSTR ReferencedDomainName, + LPDWORD cbReferencedDomainName, + PSID_NAME_USE peUse + ); +__declspec(dllimport) +BOOL +__stdcall +LookupAccountSidW( + LPCWSTR lpSystemName, + PSID Sid, + LPWSTR Name, + LPDWORD cbName, + LPWSTR ReferencedDomainName, + LPDWORD cbReferencedDomainName, + PSID_NAME_USE peUse + ); + + + + +#line 7493 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +LookupAccountNameA( + LPCSTR lpSystemName, + LPCSTR lpAccountName, + PSID Sid, + LPDWORD cbSid, + LPSTR ReferencedDomainName, + LPDWORD cbReferencedDomainName, + PSID_NAME_USE peUse + ); +__declspec(dllimport) +BOOL +__stdcall +LookupAccountNameW( + LPCWSTR lpSystemName, + LPCWSTR lpAccountName, + PSID Sid, + LPDWORD cbSid, + LPWSTR ReferencedDomainName, + LPDWORD cbReferencedDomainName, + PSID_NAME_USE peUse + ); + + + + +#line 7523 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +LookupPrivilegeValueA( + LPCSTR lpSystemName, + LPCSTR lpName, + PLUID lpLuid + ); +__declspec(dllimport) +BOOL +__stdcall +LookupPrivilegeValueW( + LPCWSTR lpSystemName, + LPCWSTR lpName, + PLUID lpLuid + ); + + + + +#line 7545 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +LookupPrivilegeNameA( + LPCSTR lpSystemName, + PLUID lpLuid, + LPSTR lpName, + LPDWORD cbName + ); +__declspec(dllimport) +BOOL +__stdcall +LookupPrivilegeNameW( + LPCWSTR lpSystemName, + PLUID lpLuid, + LPWSTR lpName, + LPDWORD cbName + ); + + + + +#line 7569 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +LookupPrivilegeDisplayNameA( + LPCSTR lpSystemName, + LPCSTR lpName, + LPSTR lpDisplayName, + LPDWORD cbDisplayName, + LPDWORD lpLanguageId + ); +__declspec(dllimport) +BOOL +__stdcall +LookupPrivilegeDisplayNameW( + LPCWSTR lpSystemName, + LPCWSTR lpName, + LPWSTR lpDisplayName, + LPDWORD cbDisplayName, + LPDWORD lpLanguageId + ); + + + + +#line 7595 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +AllocateLocallyUniqueId( + PLUID Luid + ); + +__declspec(dllimport) +BOOL +__stdcall +BuildCommDCBA( + LPCSTR lpDef, + LPDCB lpDCB + ); +__declspec(dllimport) +BOOL +__stdcall +BuildCommDCBW( + LPCWSTR lpDef, + LPDCB lpDCB + ); + + + + +#line 7622 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +BuildCommDCBAndTimeoutsA( + LPCSTR lpDef, + LPDCB lpDCB, + LPCOMMTIMEOUTS lpCommTimeouts + ); +__declspec(dllimport) +BOOL +__stdcall +BuildCommDCBAndTimeoutsW( + LPCWSTR lpDef, + LPDCB lpDCB, + LPCOMMTIMEOUTS lpCommTimeouts + ); + + + + +#line 7644 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +CommConfigDialogA( + LPCSTR lpszName, + HWND hWnd, + LPCOMMCONFIG lpCC + ); +__declspec(dllimport) +BOOL +__stdcall +CommConfigDialogW( + LPCWSTR lpszName, + HWND hWnd, + LPCOMMCONFIG lpCC + ); + + + + +#line 7666 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +GetDefaultCommConfigA( + LPCSTR lpszName, + LPCOMMCONFIG lpCC, + LPDWORD lpdwSize + ); +__declspec(dllimport) +BOOL +__stdcall +GetDefaultCommConfigW( + LPCWSTR lpszName, + LPCOMMCONFIG lpCC, + LPDWORD lpdwSize + ); + + + + +#line 7688 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +SetDefaultCommConfigA( + LPCSTR lpszName, + LPCOMMCONFIG lpCC, + DWORD dwSize + ); +__declspec(dllimport) +BOOL +__stdcall +SetDefaultCommConfigW( + LPCWSTR lpszName, + LPCOMMCONFIG lpCC, + DWORD dwSize + ); + + + + +#line 7710 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + +#line 7716 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +GetComputerNameA ( + LPSTR lpBuffer, + LPDWORD nSize + ); +__declspec(dllimport) +BOOL +__stdcall +GetComputerNameW ( + LPWSTR lpBuffer, + LPDWORD nSize + ); + + + + +#line 7736 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +SetComputerNameA ( + LPCSTR lpComputerName + ); +__declspec(dllimport) +BOOL +__stdcall +SetComputerNameW ( + LPCWSTR lpComputerName + ); + + + + +#line 7754 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +GetUserNameA ( + LPSTR lpBuffer, + LPDWORD nSize + ); +__declspec(dllimport) +BOOL +__stdcall +GetUserNameW ( + LPWSTR lpBuffer, + LPDWORD nSize + ); + + + + +#line 7774 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + +#line 7789 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + +#line 7792 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + +__declspec(dllimport) +BOOL +__stdcall +LogonUserA ( + LPSTR lpszUsername, + LPSTR lpszDomain, + LPSTR lpszPassword, + DWORD dwLogonType, + DWORD dwLogonProvider, + PHANDLE phToken + ); +__declspec(dllimport) +BOOL +__stdcall +LogonUserW ( + LPWSTR lpszUsername, + LPWSTR lpszDomain, + LPWSTR lpszPassword, + DWORD dwLogonType, + DWORD dwLogonProvider, + PHANDLE phToken + ); + + + + +#line 7822 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +ImpersonateLoggedOnUser( + HANDLE hToken + ); + +__declspec(dllimport) +BOOL +__stdcall +CreateProcessAsUserA ( + HANDLE hToken, + LPCSTR lpApplicationName, + LPSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCSTR lpCurrentDirectory, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation + ); +__declspec(dllimport) +BOOL +__stdcall +CreateProcessAsUserW ( + HANDLE hToken, + LPCWSTR lpApplicationName, + LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation + ); + + + + +#line 7867 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +__declspec(dllimport) +BOOL +__stdcall +DuplicateTokenEx( + HANDLE hExistingToken, + DWORD dwDesiredAccess, + LPSECURITY_ATTRIBUTES lpTokenAttributes, + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel, + TOKEN_TYPE TokenType, + PHANDLE phNewToken); + +__declspec(dllimport) +BOOL +__stdcall +CreateRestrictedToken( + HANDLE ExistingTokenHandle, + DWORD Flags, + DWORD DisableSidCount, + PSID_AND_ATTRIBUTES SidsToDisable , + DWORD DeletePrivilegeCount, + PLUID_AND_ATTRIBUTES PrivilegesToDelete , + DWORD RestrictedSidCount, + PSID_AND_ATTRIBUTES SidsToRestrict , + PHANDLE NewTokenHandle + ); + +__declspec(dllimport) +BOOL +__stdcall +IsTokenRestricted( + HANDLE TokenHandle + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7953 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + +__declspec(dllimport) +BOOL +__stdcall +QueryPerformanceCounter( + LARGE_INTEGER *lpPerformanceCount + ); + +__declspec(dllimport) +BOOL +__stdcall +QueryPerformanceFrequency( + LARGE_INTEGER *lpFrequency + ); + +typedef struct _OSVERSIONINFOA { + DWORD dwOSVersionInfoSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformId; + CHAR szCSDVersion[ 128 ]; +} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA; +typedef struct _OSVERSIONINFOW { + DWORD dwOSVersionInfoSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformId; + WCHAR szCSDVersion[ 128 ]; +} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW; + + + + + +typedef OSVERSIONINFOA OSVERSIONINFO; +typedef POSVERSIONINFOA POSVERSIONINFO; +typedef LPOSVERSIONINFOA LPOSVERSIONINFO; +#line 7997 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +typedef struct _OSVERSIONINFOEXA { + DWORD dwOSVersionInfoSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformId; + CHAR szCSDVersion[ 128 ]; + WORD wServicePackMajor; + WORD wServicePackMinor; + WORD wReserved[2]; +} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA; +typedef struct _OSVERSIONINFOEXW { + DWORD dwOSVersionInfoSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformId; + WCHAR szCSDVersion[ 128 ]; + WORD wServicePackMajor; + WORD wServicePackMinor; + WORD wReserved[2]; +} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW; + + + + + +typedef OSVERSIONINFOEXA OSVERSIONINFOEX; +typedef POSVERSIONINFOEXA POSVERSIONINFOEX; +typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX; +#line 8029 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +GetVersionExA( + LPOSVERSIONINFOA lpVersionInformation + ); +__declspec(dllimport) +BOOL +__stdcall +GetVersionExW( + LPOSVERSIONINFOW lpVersionInformation + ); + + + + +#line 8056 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winerror.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8021 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winerror.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8208 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winerror.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 12937 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winerror.h" +#line 8063 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _SYSTEM_POWER_STATUS { + BYTE ACLineStatus; + BYTE BatteryFlag; + BYTE BatteryLifePercent; + BYTE Reserved1; + DWORD BatteryLifeTime; + DWORD BatteryFullLifeTime; +} SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS; + +BOOL +__stdcall +GetSystemPowerStatus( + LPSYSTEM_POWER_STATUS lpSystemPowerStatus + ); + +BOOL +__stdcall +SetSystemPowerState( + BOOL fSuspend, + BOOL fForce + ); + +#line 8115 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + + + + + +typedef struct _WIN_CERTIFICATE { + DWORD dwLength; + WORD wRevision; + WORD wCertificateType; + BYTE bCertificate[1]; +} WIN_CERTIFICATE, *LPWIN_CERTIFICATE; + + + + + + + + + + + + + + + + + + + + + + + +BOOL +__stdcall +WinSubmitCertificate( + LPWIN_CERTIFICATE lpCertificate + ); + + + + + + + + + +LONG +__stdcall +WinVerifyTrust( + HWND hwnd, + GUID * ActionID, + LPVOID ActionData + ); + + +BOOL +__stdcall +WinLoadTrustProvider( + GUID * ActionID + ); + + + + + + + + + + + + +typedef LPVOID WIN_TRUST_SUBJECT; + + + + + +typedef struct _WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT { + + HANDLE hClientToken; + GUID * SubjectType; + WIN_TRUST_SUBJECT Subject; + +} WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT, *LPWIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT ; + + +typedef struct _WIN_TRUST_ACTDATA_SUBJECT_ONLY { + + GUID * SubjectType; + WIN_TRUST_SUBJECT Subject; + +} WIN_TRUST_ACTDATA_SUBJECT_ONLY, *LPWIN_TRUST_ACTDATA_SUBJECT_ONLY; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _WIN_TRUST_SUBJECT_FILE { + + HANDLE hFile; + LPCWSTR lpPath; + +} WIN_TRUST_SUBJECT_FILE, *LPWIN_TRUST_SUBJECT_FILE; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _WIN_TRUST_SUBJECT_FILE_AND_DISPLAY { + + HANDLE hFile; + LPCWSTR lpPath; + LPCWSTR lpDisplayName; + + +} WIN_TRUST_SUBJECT_FILE_AND_DISPLAY, *LPWIN_TRUST_SUBJECT_FILE_AND_DISPLAY; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _WIN_SPUB_TRUSTED_PUBLISHER_DATA { + + HANDLE hClientToken; + LPWIN_CERTIFICATE lpCertificate; + +} WIN_SPUB_TRUSTED_PUBLISHER_DATA, *LPWIN_SPUB_TRUSTED_PUBLISHER_DATA; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8611 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + + + + + + + +#line 8619 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winbase.h" + +#line 165 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + +#line 35 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 88 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 122 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + +#line 145 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + +#line 162 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + +#line 165 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _DRAWPATRECT { + POINT ptPosition; + POINT ptSize; + WORD wStyle; + WORD wPattern; +} DRAWPATRECT, *PDRAWPATRECT; +#line 257 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +#line 259 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _PSINJECTDATA { + + DWORD DataBytes; + DWORD InjectionPoint; + DWORD Flags; + DWORD Reserved; + + + +} PSINJECTDATA, *PPSINJECTDATA; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagXFORM + { + FLOAT eM11; + FLOAT eM12; + FLOAT eM21; + FLOAT eM22; + FLOAT eDx; + FLOAT eDy; + } XFORM, *PXFORM, *LPXFORM; + + +typedef struct tagBITMAP + { + LONG bmType; + LONG bmWidth; + LONG bmHeight; + LONG bmWidthBytes; + WORD bmPlanes; + WORD bmBitsPixel; + LPVOID bmBits; + } BITMAP, *PBITMAP, *NPBITMAP, *LPBITMAP; + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#pragma pack(1) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#line 489 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +typedef struct tagRGBTRIPLE { + BYTE rgbtBlue; + BYTE rgbtGreen; + BYTE rgbtRed; +} RGBTRIPLE; +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 495 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef struct tagRGBQUAD { + BYTE rgbBlue; + BYTE rgbGreen; + BYTE rgbRed; + BYTE rgbReserved; +} RGBQUAD; +typedef RGBQUAD * LPRGBQUAD; + + + + + + + + + + + + + + + + + + +typedef LONG LCSCSTYPE; + + + + +typedef LONG LCSGAMUTMATCH; + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef long FXPT16DOT16, *LPFXPT16DOT16; +typedef long FXPT2DOT30, *LPFXPT2DOT30; + + + + +typedef struct tagCIEXYZ +{ + FXPT2DOT30 ciexyzX; + FXPT2DOT30 ciexyzY; + FXPT2DOT30 ciexyzZ; +} CIEXYZ; +typedef CIEXYZ *LPCIEXYZ; + +typedef struct tagICEXYZTRIPLE +{ + CIEXYZ ciexyzRed; + CIEXYZ ciexyzGreen; + CIEXYZ ciexyzBlue; +} CIEXYZTRIPLE; +typedef CIEXYZTRIPLE *LPCIEXYZTRIPLE; + + + + + + +typedef struct tagLOGCOLORSPACEA { + DWORD lcsSignature; + DWORD lcsVersion; + DWORD lcsSize; + LCSCSTYPE lcsCSType; + LCSGAMUTMATCH lcsIntent; + CIEXYZTRIPLE lcsEndpoints; + DWORD lcsGammaRed; + DWORD lcsGammaGreen; + DWORD lcsGammaBlue; + CHAR lcsFilename[260]; +} LOGCOLORSPACEA, *LPLOGCOLORSPACEA; +typedef struct tagLOGCOLORSPACEW { + DWORD lcsSignature; + DWORD lcsVersion; + DWORD lcsSize; + LCSCSTYPE lcsCSType; + LCSGAMUTMATCH lcsIntent; + CIEXYZTRIPLE lcsEndpoints; + DWORD lcsGammaRed; + DWORD lcsGammaGreen; + DWORD lcsGammaBlue; + WCHAR lcsFilename[260]; +} LOGCOLORSPACEW, *LPLOGCOLORSPACEW; + + + + +typedef LOGCOLORSPACEA LOGCOLORSPACE; +typedef LPLOGCOLORSPACEA LPLOGCOLORSPACE; +#line 611 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +#line 613 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + +typedef struct tagBITMAPCOREHEADER { + DWORD bcSize; + WORD bcWidth; + WORD bcHeight; + WORD bcPlanes; + WORD bcBitCount; +} BITMAPCOREHEADER, *LPBITMAPCOREHEADER, *PBITMAPCOREHEADER; + +typedef struct tagBITMAPINFOHEADER{ + DWORD biSize; + LONG biWidth; + LONG biHeight; + WORD biPlanes; + WORD biBitCount; + DWORD biCompression; + DWORD biSizeImage; + LONG biXPelsPerMeter; + LONG biYPelsPerMeter; + DWORD biClrUsed; + DWORD biClrImportant; +} BITMAPINFOHEADER, *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER; + + +typedef struct { + DWORD bV4Size; + LONG bV4Width; + LONG bV4Height; + WORD bV4Planes; + WORD bV4BitCount; + DWORD bV4V4Compression; + DWORD bV4SizeImage; + LONG bV4XPelsPerMeter; + LONG bV4YPelsPerMeter; + DWORD bV4ClrUsed; + DWORD bV4ClrImportant; + DWORD bV4RedMask; + DWORD bV4GreenMask; + DWORD bV4BlueMask; + DWORD bV4AlphaMask; + DWORD bV4CSType; + CIEXYZTRIPLE bV4Endpoints; + DWORD bV4GammaRed; + DWORD bV4GammaGreen; + DWORD bV4GammaBlue; +} BITMAPV4HEADER, *LPBITMAPV4HEADER, *PBITMAPV4HEADER; +#line 661 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 694 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + +#line 702 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef struct tagBITMAPINFO { + BITMAPINFOHEADER bmiHeader; + RGBQUAD bmiColors[1]; +} BITMAPINFO, *LPBITMAPINFO, *PBITMAPINFO; + +typedef struct tagBITMAPCOREINFO { + BITMAPCOREHEADER bmciHeader; + RGBTRIPLE bmciColors[1]; +} BITMAPCOREINFO, *LPBITMAPCOREINFO, *PBITMAPCOREINFO; + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#pragma pack(2) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#line 714 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +typedef struct tagBITMAPFILEHEADER { + WORD bfType; + DWORD bfSize; + WORD bfReserved1; + WORD bfReserved2; + DWORD bfOffBits; +} BITMAPFILEHEADER, *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER; +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 722 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + +typedef struct tagFONTSIGNATURE +{ + DWORD fsUsb[4]; + DWORD fsCsb[2]; +} FONTSIGNATURE, *PFONTSIGNATURE, *LPFONTSIGNATURE; + +typedef struct tagCHARSETINFO +{ + UINT ciCharset; + UINT ciACP; + FONTSIGNATURE fs; +} CHARSETINFO, *PCHARSETINFO, *NPCHARSETINFO, *LPCHARSETINFO; + + + + + +typedef struct tagLOCALESIGNATURE +{ + DWORD lsUsb[4]; + DWORD lsCsbDefault[2]; + DWORD lsCsbSupported[2]; +} LOCALESIGNATURE, *PLOCALESIGNATURE, *LPLOCALESIGNATURE; + + +#line 753 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +#line 754 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + +typedef struct tagHANDLETABLE + { + HGDIOBJ objectHandle[1]; + } HANDLETABLE, *PHANDLETABLE, *LPHANDLETABLE; + +typedef struct tagMETARECORD + { + DWORD rdSize; + WORD rdFunction; + WORD rdParm[1]; + } METARECORD; +typedef struct tagMETARECORD *PMETARECORD; +typedef struct tagMETARECORD *LPMETARECORD; + +typedef struct tagMETAFILEPICT + { + LONG mm; + LONG xExt; + LONG yExt; + HMETAFILE hMF; + } METAFILEPICT, *LPMETAFILEPICT; + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#pragma pack(2) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#line 781 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +typedef struct tagMETAHEADER +{ + WORD mtType; + WORD mtHeaderSize; + WORD mtVersion; + DWORD mtSize; + WORD mtNoObjects; + DWORD mtMaxRecord; + WORD mtNoParameters; +} METAHEADER; +typedef struct tagMETAHEADER *PMETAHEADER; +typedef struct tagMETAHEADER *LPMETAHEADER; + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 795 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + +typedef struct tagENHMETARECORD +{ + DWORD iType; + DWORD nSize; + DWORD dParm[1]; +} ENHMETARECORD, *PENHMETARECORD, *LPENHMETARECORD; + +typedef struct tagENHMETAHEADER +{ + DWORD iType; + DWORD nSize; + + RECTL rclBounds; + RECTL rclFrame; + DWORD dSignature; + DWORD nVersion; + DWORD nBytes; + DWORD nRecords; + WORD nHandles; + + WORD sReserved; + DWORD nDescription; + + DWORD offDescription; + + DWORD nPalEntries; + SIZEL szlDevice; + SIZEL szlMillimeters; + + DWORD cbPixelFormat; + + DWORD offPixelFormat; + + DWORD bOpenGL; + +#line 833 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +} ENHMETAHEADER, *PENHMETAHEADER, *LPENHMETAHEADER; + +#line 836 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + typedef BYTE BCHAR; +#line 853 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef struct tagTEXTMETRICA +{ + LONG tmHeight; + LONG tmAscent; + LONG tmDescent; + LONG tmInternalLeading; + LONG tmExternalLeading; + LONG tmAveCharWidth; + LONG tmMaxCharWidth; + LONG tmWeight; + LONG tmOverhang; + LONG tmDigitizedAspectX; + LONG tmDigitizedAspectY; + BYTE tmFirstChar; + BYTE tmLastChar; + BYTE tmDefaultChar; + BYTE tmBreakChar; + BYTE tmItalic; + BYTE tmUnderlined; + BYTE tmStruckOut; + BYTE tmPitchAndFamily; + BYTE tmCharSet; +} TEXTMETRICA, *PTEXTMETRICA, *NPTEXTMETRICA, *LPTEXTMETRICA; +typedef struct tagTEXTMETRICW +{ + LONG tmHeight; + LONG tmAscent; + LONG tmDescent; + LONG tmInternalLeading; + LONG tmExternalLeading; + LONG tmAveCharWidth; + LONG tmMaxCharWidth; + LONG tmWeight; + LONG tmOverhang; + LONG tmDigitizedAspectX; + LONG tmDigitizedAspectY; + WCHAR tmFirstChar; + WCHAR tmLastChar; + WCHAR tmDefaultChar; + WCHAR tmBreakChar; + BYTE tmItalic; + BYTE tmUnderlined; + BYTE tmStruckOut; + BYTE tmPitchAndFamily; + BYTE tmCharSet; +} TEXTMETRICW, *PTEXTMETRICW, *NPTEXTMETRICW, *LPTEXTMETRICW; + + + + + + +typedef TEXTMETRICA TEXTMETRIC; +typedef PTEXTMETRICA PTEXTMETRIC; +typedef NPTEXTMETRICA NPTEXTMETRIC; +typedef LPTEXTMETRICA LPTEXTMETRIC; +#line 911 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#pragma pack(4) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#line 925 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +typedef struct tagNEWTEXTMETRICA +{ + LONG tmHeight; + LONG tmAscent; + LONG tmDescent; + LONG tmInternalLeading; + LONG tmExternalLeading; + LONG tmAveCharWidth; + LONG tmMaxCharWidth; + LONG tmWeight; + LONG tmOverhang; + LONG tmDigitizedAspectX; + LONG tmDigitizedAspectY; + BYTE tmFirstChar; + BYTE tmLastChar; + BYTE tmDefaultChar; + BYTE tmBreakChar; + BYTE tmItalic; + BYTE tmUnderlined; + BYTE tmStruckOut; + BYTE tmPitchAndFamily; + BYTE tmCharSet; + DWORD ntmFlags; + UINT ntmSizeEM; + UINT ntmCellHeight; + UINT ntmAvgWidth; +} NEWTEXTMETRICA, *PNEWTEXTMETRICA, *NPNEWTEXTMETRICA, *LPNEWTEXTMETRICA; +typedef struct tagNEWTEXTMETRICW +{ + LONG tmHeight; + LONG tmAscent; + LONG tmDescent; + LONG tmInternalLeading; + LONG tmExternalLeading; + LONG tmAveCharWidth; + LONG tmMaxCharWidth; + LONG tmWeight; + LONG tmOverhang; + LONG tmDigitizedAspectX; + LONG tmDigitizedAspectY; + WCHAR tmFirstChar; + WCHAR tmLastChar; + WCHAR tmDefaultChar; + WCHAR tmBreakChar; + BYTE tmItalic; + BYTE tmUnderlined; + BYTE tmStruckOut; + BYTE tmPitchAndFamily; + BYTE tmCharSet; + DWORD ntmFlags; + UINT ntmSizeEM; + UINT ntmCellHeight; + UINT ntmAvgWidth; +} NEWTEXTMETRICW, *PNEWTEXTMETRICW, *NPNEWTEXTMETRICW, *LPNEWTEXTMETRICW; + + + + + + +typedef NEWTEXTMETRICA NEWTEXTMETRIC; +typedef PNEWTEXTMETRICA PNEWTEXTMETRIC; +typedef NPNEWTEXTMETRICA NPNEWTEXTMETRIC; +typedef LPNEWTEXTMETRICA LPNEWTEXTMETRIC; +#line 990 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 991 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + +typedef struct tagNEWTEXTMETRICEXA +{ + NEWTEXTMETRICA ntmTm; + FONTSIGNATURE ntmFontSig; +}NEWTEXTMETRICEXA; +typedef struct tagNEWTEXTMETRICEXW +{ + NEWTEXTMETRICW ntmTm; + FONTSIGNATURE ntmFontSig; +}NEWTEXTMETRICEXW; + + + +typedef NEWTEXTMETRICEXA NEWTEXTMETRICEX; +#line 1008 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +#line 1009 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +#line 1011 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +typedef struct tagPELARRAY + { + LONG paXCount; + LONG paYCount; + LONG paXExt; + LONG paYExt; + BYTE paRGBs; + } PELARRAY, *PPELARRAY, *NPPELARRAY, *LPPELARRAY; + + +typedef struct tagLOGBRUSH + { + UINT lbStyle; + COLORREF lbColor; + LONG lbHatch; + } LOGBRUSH, *PLOGBRUSH, *NPLOGBRUSH, *LPLOGBRUSH; + +typedef LOGBRUSH PATTERN; +typedef PATTERN *PPATTERN; +typedef PATTERN *NPPATTERN; +typedef PATTERN *LPPATTERN; + + +typedef struct tagLOGPEN + { + UINT lopnStyle; + POINT lopnWidth; + COLORREF lopnColor; + } LOGPEN, *PLOGPEN, *NPLOGPEN, *LPLOGPEN; + +typedef struct tagEXTLOGPEN { + DWORD elpPenStyle; + DWORD elpWidth; + UINT elpBrushStyle; + COLORREF elpColor; + LONG elpHatch; + DWORD elpNumEntries; + DWORD elpStyleEntry[1]; +} EXTLOGPEN, *PEXTLOGPEN, *NPEXTLOGPEN, *LPEXTLOGPEN; + +typedef struct tagPALETTEENTRY { + BYTE peRed; + BYTE peGreen; + BYTE peBlue; + BYTE peFlags; +} PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY; + + +typedef struct tagLOGPALETTE { + WORD palVersion; + WORD palNumEntries; + PALETTEENTRY palPalEntry[1]; +} LOGPALETTE, *PLOGPALETTE, *NPLOGPALETTE, *LPLOGPALETTE; + + + + + +typedef struct tagLOGFONTA +{ + LONG lfHeight; + LONG lfWidth; + LONG lfEscapement; + LONG lfOrientation; + LONG lfWeight; + BYTE lfItalic; + BYTE lfUnderline; + BYTE lfStrikeOut; + BYTE lfCharSet; + BYTE lfOutPrecision; + BYTE lfClipPrecision; + BYTE lfQuality; + BYTE lfPitchAndFamily; + CHAR lfFaceName[32]; +} LOGFONTA, *PLOGFONTA, *NPLOGFONTA, *LPLOGFONTA; +typedef struct tagLOGFONTW +{ + LONG lfHeight; + LONG lfWidth; + LONG lfEscapement; + LONG lfOrientation; + LONG lfWeight; + BYTE lfItalic; + BYTE lfUnderline; + BYTE lfStrikeOut; + BYTE lfCharSet; + BYTE lfOutPrecision; + BYTE lfClipPrecision; + BYTE lfQuality; + BYTE lfPitchAndFamily; + WCHAR lfFaceName[32]; +} LOGFONTW, *PLOGFONTW, *NPLOGFONTW, *LPLOGFONTW; + + + + + + +typedef LOGFONTA LOGFONT; +typedef PLOGFONTA PLOGFONT; +typedef NPLOGFONTA NPLOGFONT; +typedef LPLOGFONTA LPLOGFONT; +#line 1117 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + +typedef struct tagENUMLOGFONTA +{ + LOGFONTA elfLogFont; + BYTE elfFullName[64]; + BYTE elfStyle[32]; +} ENUMLOGFONTA, * LPENUMLOGFONTA; + +typedef struct tagENUMLOGFONTW +{ + LOGFONTW elfLogFont; + WCHAR elfFullName[64]; + WCHAR elfStyle[32]; +} ENUMLOGFONTW, * LPENUMLOGFONTW; + + + + +typedef ENUMLOGFONTA ENUMLOGFONT; +typedef LPENUMLOGFONTA LPENUMLOGFONT; +#line 1141 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + +typedef struct tagENUMLOGFONTEXA +{ + LOGFONTA elfLogFont; + BYTE elfFullName[64]; + BYTE elfStyle[32]; + BYTE elfScript[32]; +} ENUMLOGFONTEXA, *LPENUMLOGFONTEXA; +typedef struct tagENUMLOGFONTEXW +{ + LOGFONTW elfLogFont; + WCHAR elfFullName[64]; + WCHAR elfStyle[32]; + WCHAR elfScript[32]; +} ENUMLOGFONTEXW, *LPENUMLOGFONTEXW; + + + + +typedef ENUMLOGFONTEXA ENUMLOGFONTEX; +typedef LPENUMLOGFONTEXA LPENUMLOGFONTEX; +#line 1164 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +#line 1165 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1192 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + +#line 1199 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1240 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagPANOSE +{ + BYTE bFamilyType; + BYTE bSerifStyle; + BYTE bWeight; + BYTE bProportion; + BYTE bContrast; + BYTE bStrokeVariation; + BYTE bArmStyle; + BYTE bLetterform; + BYTE bMidline; + BYTE bXHeight; +} PANOSE, * LPPANOSE; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagEXTLOGFONTA { + LOGFONTA elfLogFont; + BYTE elfFullName[64]; + BYTE elfStyle[32]; + DWORD elfVersion; + DWORD elfStyleSize; + DWORD elfMatch; + DWORD elfReserved; + BYTE elfVendorId[4]; + DWORD elfCulture; + PANOSE elfPanose; +} EXTLOGFONTA, *PEXTLOGFONTA, *NPEXTLOGFONTA, *LPEXTLOGFONTA; +typedef struct tagEXTLOGFONTW { + LOGFONTW elfLogFont; + WCHAR elfFullName[64]; + WCHAR elfStyle[32]; + DWORD elfVersion; + DWORD elfStyleSize; + DWORD elfMatch; + DWORD elfReserved; + BYTE elfVendorId[4]; + DWORD elfCulture; + PANOSE elfPanose; +} EXTLOGFONTW, *PEXTLOGFONTW, *NPEXTLOGFONTW, *LPEXTLOGFONTW; + + + + + + +typedef EXTLOGFONTA EXTLOGFONT; +typedef PEXTLOGFONTA PEXTLOGFONT; +typedef NPEXTLOGFONTA NPEXTLOGFONT; +typedef LPEXTLOGFONTA LPEXTLOGFONT; +#line 1445 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1526 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + +#line 1531 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +#line 1535 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +#line 1539 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1620 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1722 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1754 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _devicemodeA { + BYTE dmDeviceName[32]; + WORD dmSpecVersion; + WORD dmDriverVersion; + WORD dmSize; + WORD dmDriverExtra; + DWORD dmFields; + union { + struct { + short dmOrientation; + short dmPaperSize; + short dmPaperLength; + short dmPaperWidth; + }; + POINTL dmPosition; + }; + short dmScale; + short dmCopies; + short dmDefaultSource; + short dmPrintQuality; + short dmColor; + short dmDuplex; + short dmYResolution; + short dmTTOption; + short dmCollate; + BYTE dmFormName[32]; + WORD dmLogPixels; + DWORD dmBitsPerPel; + DWORD dmPelsWidth; + DWORD dmPelsHeight; + DWORD dmDisplayFlags; + DWORD dmDisplayFrequency; + + DWORD dmICMMethod; + DWORD dmICMIntent; + DWORD dmMediaType; + DWORD dmDitherType; + DWORD dmReserved1; + DWORD dmReserved2; + + + +#line 1824 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +#line 1825 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +} DEVMODEA, *PDEVMODEA, *NPDEVMODEA, *LPDEVMODEA; +typedef struct _devicemodeW { + WCHAR dmDeviceName[32]; + WORD dmSpecVersion; + WORD dmDriverVersion; + WORD dmSize; + WORD dmDriverExtra; + DWORD dmFields; + union { + struct { + short dmOrientation; + short dmPaperSize; + short dmPaperLength; + short dmPaperWidth; + }; + POINTL dmPosition; + }; + short dmScale; + short dmCopies; + short dmDefaultSource; + short dmPrintQuality; + short dmColor; + short dmDuplex; + short dmYResolution; + short dmTTOption; + short dmCollate; + WCHAR dmFormName[32]; + WORD dmLogPixels; + DWORD dmBitsPerPel; + DWORD dmPelsWidth; + DWORD dmPelsHeight; + DWORD dmDisplayFlags; + DWORD dmDisplayFrequency; + + DWORD dmICMMethod; + DWORD dmICMIntent; + DWORD dmMediaType; + DWORD dmDitherType; + DWORD dmReserved1; + DWORD dmReserved2; + + + +#line 1869 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +#line 1870 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +} DEVMODEW, *PDEVMODEW, *NPDEVMODEW, *LPDEVMODEW; + + + + + + +typedef DEVMODEA DEVMODE; +typedef PDEVMODEA PDEVMODE; +typedef NPDEVMODEA NPDEVMODE; +typedef LPDEVMODEA LPDEVMODE; +#line 1882 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + +#line 1887 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +#line 1891 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + +#line 1901 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + +#line 1924 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2001 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2054 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +#line 2058 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +#line 2062 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2107 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2157 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef struct _DISPLAY_DEVICEA { + DWORD cb; + BYTE DeviceName[32]; + BYTE DeviceString[128]; + DWORD StateFlags; +} DISPLAY_DEVICEA, *PDISPLAY_DEVICEA, *LPDISPLAY_DEVICEA; +typedef struct _DISPLAY_DEVICEW { + DWORD cb; + WCHAR DeviceName[32]; + WCHAR DeviceString[128]; + DWORD StateFlags; +} DISPLAY_DEVICEW, *PDISPLAY_DEVICEW, *LPDISPLAY_DEVICEW; + + + + + +typedef DISPLAY_DEVICEA DISPLAY_DEVICE; +typedef PDISPLAY_DEVICEA PDISPLAY_DEVICE; +typedef LPDISPLAY_DEVICEA LPDISPLAY_DEVICE; +#line 2179 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + +typedef struct _RGNDATAHEADER { + DWORD dwSize; + DWORD iType; + DWORD nCount; + DWORD nRgnSize; + RECT rcBound; +} RGNDATAHEADER, *PRGNDATAHEADER; + +typedef struct _RGNDATA { + RGNDATAHEADER rdh; + char Buffer[1]; +} RGNDATA, *PRGNDATA, *NPRGNDATA, *LPRGNDATA; + + +typedef struct _ABC { + int abcA; + UINT abcB; + int abcC; +} ABC, *PABC, *NPABC, *LPABC; + +typedef struct _ABCFLOAT { + FLOAT abcfA; + FLOAT abcfB; + FLOAT abcfC; +} ABCFLOAT, *PABCFLOAT, *NPABCFLOAT, *LPABCFLOAT; + + + + + + +typedef struct _OUTLINETEXTMETRICA { + UINT otmSize; + TEXTMETRICA otmTextMetrics; + BYTE otmFiller; + PANOSE otmPanoseNumber; + UINT otmfsSelection; + UINT otmfsType; + int otmsCharSlopeRise; + int otmsCharSlopeRun; + int otmItalicAngle; + UINT otmEMSquare; + int otmAscent; + int otmDescent; + UINT otmLineGap; + UINT otmsCapEmHeight; + UINT otmsXHeight; + RECT otmrcFontBox; + int otmMacAscent; + int otmMacDescent; + UINT otmMacLineGap; + UINT otmusMinimumPPEM; + POINT otmptSubscriptSize; + POINT otmptSubscriptOffset; + POINT otmptSuperscriptSize; + POINT otmptSuperscriptOffset; + UINT otmsStrikeoutSize; + int otmsStrikeoutPosition; + int otmsUnderscoreSize; + int otmsUnderscorePosition; + PSTR otmpFamilyName; + PSTR otmpFaceName; + PSTR otmpStyleName; + PSTR otmpFullName; +} OUTLINETEXTMETRICA, *POUTLINETEXTMETRICA, *NPOUTLINETEXTMETRICA, *LPOUTLINETEXTMETRICA; +typedef struct _OUTLINETEXTMETRICW { + UINT otmSize; + TEXTMETRICW otmTextMetrics; + BYTE otmFiller; + PANOSE otmPanoseNumber; + UINT otmfsSelection; + UINT otmfsType; + int otmsCharSlopeRise; + int otmsCharSlopeRun; + int otmItalicAngle; + UINT otmEMSquare; + int otmAscent; + int otmDescent; + UINT otmLineGap; + UINT otmsCapEmHeight; + UINT otmsXHeight; + RECT otmrcFontBox; + int otmMacAscent; + int otmMacDescent; + UINT otmMacLineGap; + UINT otmusMinimumPPEM; + POINT otmptSubscriptSize; + POINT otmptSubscriptOffset; + POINT otmptSuperscriptSize; + POINT otmptSuperscriptOffset; + UINT otmsStrikeoutSize; + int otmsStrikeoutPosition; + int otmsUnderscoreSize; + int otmsUnderscorePosition; + PSTR otmpFamilyName; + PSTR otmpFaceName; + PSTR otmpStyleName; + PSTR otmpFullName; +} OUTLINETEXTMETRICW, *POUTLINETEXTMETRICW, *NPOUTLINETEXTMETRICW, *LPOUTLINETEXTMETRICW; + + + + + + +typedef OUTLINETEXTMETRICA OUTLINETEXTMETRIC; +typedef POUTLINETEXTMETRICA POUTLINETEXTMETRIC; +typedef NPOUTLINETEXTMETRICA NPOUTLINETEXTMETRIC; +typedef LPOUTLINETEXTMETRICA LPOUTLINETEXTMETRIC; +#line 2300 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + +#line 2306 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + +typedef struct tagPOLYTEXTA +{ + int x; + int y; + UINT n; + LPCSTR lpstr; + UINT uiFlags; + RECT rcl; + int *pdx; +} POLYTEXTA, *PPOLYTEXTA, *NPPOLYTEXTA, *LPPOLYTEXTA; +typedef struct tagPOLYTEXTW +{ + int x; + int y; + UINT n; + LPCWSTR lpstr; + UINT uiFlags; + RECT rcl; + int *pdx; +} POLYTEXTW, *PPOLYTEXTW, *NPPOLYTEXTW, *LPPOLYTEXTW; + + + + + + +typedef POLYTEXTA POLYTEXT; +typedef PPOLYTEXTA PPOLYTEXT; +typedef NPPOLYTEXTA NPPOLYTEXT; +typedef LPPOLYTEXTA LPPOLYTEXT; +#line 2339 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef struct _FIXED { + + WORD fract; + short value; + + + +#line 2348 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +} FIXED; + + +typedef struct _MAT2 { + FIXED eM11; + FIXED eM12; + FIXED eM21; + FIXED eM22; +} MAT2, *LPMAT2; + + + +typedef struct _GLYPHMETRICS { + UINT gmBlackBoxX; + UINT gmBlackBoxY; + POINT gmptGlyphOrigin; + short gmCellIncX; + short gmCellIncY; +} GLYPHMETRICS, *LPGLYPHMETRICS; + + + + + + + + + + + + + +#line 2381 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + +typedef struct tagPOINTFX +{ + FIXED x; + FIXED y; +} POINTFX, * LPPOINTFX; + +typedef struct tagTTPOLYCURVE +{ + WORD wType; + WORD cpfx; + POINTFX apfx[1]; +} TTPOLYCURVE, * LPTTPOLYCURVE; + +typedef struct tagTTPOLYGONHEADER +{ + DWORD cb; + DWORD dwType; + POINTFX pfxStart; +} TTPOLYGONHEADER, * LPTTPOLYGONHEADER; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagGCP_RESULTSA + { + DWORD lStructSize; + LPSTR lpOutString; + UINT *lpOrder; + int *lpDx; + int *lpCaretPos; + LPSTR lpClass; + LPWSTR lpGlyphs; + UINT nGlyphs; + int nMaxFit; + } GCP_RESULTSA, * LPGCP_RESULTSA; +typedef struct tagGCP_RESULTSW + { + DWORD lStructSize; + LPWSTR lpOutString; + UINT *lpOrder; + int *lpDx; + int *lpCaretPos; + LPSTR lpClass; + LPWSTR lpGlyphs; + UINT nGlyphs; + int nMaxFit; + } GCP_RESULTSW, * LPGCP_RESULTSW; + + + + +typedef GCP_RESULTSA GCP_RESULTS; +typedef LPGCP_RESULTSA LPGCP_RESULTS; +#line 2483 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +#line 2484 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef struct _RASTERIZER_STATUS { + short nSize; + short wFlags; + short nLanguageID; +} RASTERIZER_STATUS, *LPRASTERIZER_STATUS; + + + + + + +typedef struct tagPIXELFORMATDESCRIPTOR +{ + WORD nSize; + WORD nVersion; + DWORD dwFlags; + BYTE iPixelType; + BYTE cColorBits; + BYTE cRedBits; + BYTE cRedShift; + BYTE cGreenBits; + BYTE cGreenShift; + BYTE cBlueBits; + BYTE cBlueShift; + BYTE cAlphaBits; + BYTE cAlphaShift; + BYTE cAccumBits; + BYTE cAccumRedBits; + BYTE cAccumGreenBits; + BYTE cAccumBlueBits; + BYTE cAccumAlphaBits; + BYTE cDepthBits; + BYTE cStencilBits; + BYTE cAuxBuffers; + BYTE iLayerType; + BYTE bReserved; + DWORD dwLayerMask; + DWORD dwVisibleMask; + DWORD dwDamageMask; +} PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef int (__stdcall* OLDFONTENUMPROCA)(const LOGFONTA *, const TEXTMETRICA *, DWORD, LPARAM); +typedef int (__stdcall* OLDFONTENUMPROCW)(const LOGFONTW *, const TEXTMETRICW *, DWORD, LPARAM); + + + + +#line 2565 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + +#line 2574 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef OLDFONTENUMPROCA FONTENUMPROCA; +typedef OLDFONTENUMPROCW FONTENUMPROCW; + + + +typedef FONTENUMPROCA FONTENUMPROC; +#line 2582 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef int (__stdcall* GOBJENUMPROC)(LPVOID, LPARAM); +typedef void (__stdcall* LINEDDAPROC)(int, int, LPARAM); + + + + + + + + + + + +#line 2597 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) int __stdcall AddFontResourceA(LPCSTR); +__declspec(dllimport) int __stdcall AddFontResourceW(LPCWSTR); + + + + +#line 2605 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + +__declspec(dllimport) BOOL __stdcall AnimatePalette(HPALETTE, UINT, UINT, const PALETTEENTRY *); +__declspec(dllimport) BOOL __stdcall Arc(HDC, int, int, int, int, int, int, int, int); +__declspec(dllimport) BOOL __stdcall BitBlt(HDC, int, int, int, int, HDC, int, int, DWORD); +__declspec(dllimport) BOOL __stdcall CancelDC(HDC); +__declspec(dllimport) BOOL __stdcall Chord(HDC, int, int, int, int, int, int, int, int); +__declspec(dllimport) int __stdcall ChoosePixelFormat(HDC, const PIXELFORMATDESCRIPTOR *); +__declspec(dllimport) HMETAFILE __stdcall CloseMetaFile(HDC); +__declspec(dllimport) int __stdcall CombineRgn(HRGN, HRGN, HRGN, int); +__declspec(dllimport) HMETAFILE __stdcall CopyMetaFileA(HMETAFILE, LPCSTR); +__declspec(dllimport) HMETAFILE __stdcall CopyMetaFileW(HMETAFILE, LPCWSTR); + + + + +#line 2622 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) HBITMAP __stdcall CreateBitmap(int, int, UINT, UINT, const void *); +__declspec(dllimport) HBITMAP __stdcall CreateBitmapIndirect(const BITMAP *); +__declspec(dllimport) HBRUSH __stdcall CreateBrushIndirect(const LOGBRUSH *); +__declspec(dllimport) HBITMAP __stdcall CreateCompatibleBitmap(HDC, int, int); +__declspec(dllimport) HBITMAP __stdcall CreateDiscardableBitmap(HDC, int, int); +__declspec(dllimport) HDC __stdcall CreateCompatibleDC(HDC); +__declspec(dllimport) HDC __stdcall CreateDCA(LPCSTR, LPCSTR , LPCSTR , const DEVMODEA *); +__declspec(dllimport) HDC __stdcall CreateDCW(LPCWSTR, LPCWSTR , LPCWSTR , const DEVMODEW *); + + + + +#line 2635 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) HBITMAP __stdcall CreateDIBitmap(HDC, const BITMAPINFOHEADER *, DWORD, const void *, const BITMAPINFO *, UINT); +__declspec(dllimport) HBRUSH __stdcall CreateDIBPatternBrush(HGLOBAL, UINT); +__declspec(dllimport) HBRUSH __stdcall CreateDIBPatternBrushPt(const void *, UINT); +__declspec(dllimport) HRGN __stdcall CreateEllipticRgn(int, int, int, int); +__declspec(dllimport) HRGN __stdcall CreateEllipticRgnIndirect(const RECT *); +__declspec(dllimport) HFONT __stdcall CreateFontIndirectA(const LOGFONTA *); +__declspec(dllimport) HFONT __stdcall CreateFontIndirectW(const LOGFONTW *); + + + + +#line 2647 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) HFONT __stdcall CreateFontA(int, int, int, int, int, DWORD, + DWORD, DWORD, DWORD, DWORD, DWORD, + DWORD, DWORD, LPCSTR); +__declspec(dllimport) HFONT __stdcall CreateFontW(int, int, int, int, int, DWORD, + DWORD, DWORD, DWORD, DWORD, DWORD, + DWORD, DWORD, LPCWSTR); + + + + +#line 2658 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) HBRUSH __stdcall CreateHatchBrush(int, COLORREF); +__declspec(dllimport) HDC __stdcall CreateICA(LPCSTR, LPCSTR , LPCSTR , const DEVMODEA *); +__declspec(dllimport) HDC __stdcall CreateICW(LPCWSTR, LPCWSTR , LPCWSTR , const DEVMODEW *); + + + + +#line 2667 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) HDC __stdcall CreateMetaFileA(LPCSTR); +__declspec(dllimport) HDC __stdcall CreateMetaFileW(LPCWSTR); + + + + +#line 2674 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) HPALETTE __stdcall CreatePalette(const LOGPALETTE *); +__declspec(dllimport) HPEN __stdcall CreatePen(int, int, COLORREF); +__declspec(dllimport) HPEN __stdcall CreatePenIndirect(const LOGPEN *); +__declspec(dllimport) HRGN __stdcall CreatePolyPolygonRgn(const POINT *, const INT *, int, int); +__declspec(dllimport) HBRUSH __stdcall CreatePatternBrush(HBITMAP); +__declspec(dllimport) HRGN __stdcall CreateRectRgn(int, int, int, int); +__declspec(dllimport) HRGN __stdcall CreateRectRgnIndirect(const RECT *); +__declspec(dllimport) HRGN __stdcall CreateRoundRectRgn(int, int, int, int, int, int); +__declspec(dllimport) BOOL __stdcall CreateScalableFontResourceA(DWORD, LPCSTR, LPCSTR, LPCSTR); +__declspec(dllimport) BOOL __stdcall CreateScalableFontResourceW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR); + + + + +#line 2689 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) HBRUSH __stdcall CreateSolidBrush(COLORREF); + +__declspec(dllimport) BOOL __stdcall DeleteDC(HDC); +__declspec(dllimport) BOOL __stdcall DeleteMetaFile(HMETAFILE); +__declspec(dllimport) BOOL __stdcall DeleteObject(HGDIOBJ); +__declspec(dllimport) int __stdcall DescribePixelFormat(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR); + + + + + +typedef UINT (__stdcall* LPFNDEVMODE)(HWND, HMODULE, LPDEVMODE, LPSTR, LPSTR, LPDEVMODE, LPSTR, UINT); + +typedef DWORD (__stdcall* LPFNDEVCAPS)(LPSTR, LPSTR, UINT, LPSTR, LPDEVMODE); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2742 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + +#line 2757 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + +#line 2775 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) int __stdcall DeviceCapabilitiesA(LPCSTR, LPCSTR, WORD, + LPSTR, const DEVMODEA *); +__declspec(dllimport) int __stdcall DeviceCapabilitiesW(LPCWSTR, LPCWSTR, WORD, + LPWSTR, const DEVMODEW *); + + + + +#line 2785 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) int __stdcall DrawEscape(HDC, int, int, LPCSTR); +__declspec(dllimport) BOOL __stdcall Ellipse(HDC, int, int, int, int); + + +__declspec(dllimport) int __stdcall EnumFontFamiliesExA(HDC, LPLOGFONTA,FONTENUMPROCA, LPARAM,DWORD); +__declspec(dllimport) int __stdcall EnumFontFamiliesExW(HDC, LPLOGFONTW,FONTENUMPROCW, LPARAM,DWORD); + + + + +#line 2797 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +#line 2798 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) int __stdcall EnumFontFamiliesA(HDC, LPCSTR, FONTENUMPROCA, LPARAM); +__declspec(dllimport) int __stdcall EnumFontFamiliesW(HDC, LPCWSTR, FONTENUMPROCW, LPARAM); + + + + +#line 2806 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) int __stdcall EnumFontsA(HDC, LPCSTR, FONTENUMPROCA, LPARAM); +__declspec(dllimport) int __stdcall EnumFontsW(HDC, LPCWSTR, FONTENUMPROCW, LPARAM); + + + + +#line 2813 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + +__declspec(dllimport) int __stdcall EnumObjects(HDC, int, GOBJENUMPROC, LPARAM); + + +#line 2819 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + +__declspec(dllimport) BOOL __stdcall EqualRgn(HRGN, HRGN); +__declspec(dllimport) int __stdcall Escape(HDC, int, int, LPCSTR, LPVOID); +__declspec(dllimport) int __stdcall ExtEscape(HDC, int, int, LPCSTR, int, LPSTR); +__declspec(dllimport) int __stdcall ExcludeClipRect(HDC, int, int, int, int); +__declspec(dllimport) HRGN __stdcall ExtCreateRegion(const XFORM *, DWORD, const RGNDATA *); +__declspec(dllimport) BOOL __stdcall ExtFloodFill(HDC, int, int, COLORREF, UINT); +__declspec(dllimport) BOOL __stdcall FillRgn(HDC, HRGN, HBRUSH); +__declspec(dllimport) BOOL __stdcall FloodFill(HDC, int, int, COLORREF); +__declspec(dllimport) BOOL __stdcall FrameRgn(HDC, HRGN, HBRUSH, int, int); +__declspec(dllimport) int __stdcall GetROP2(HDC); +__declspec(dllimport) BOOL __stdcall GetAspectRatioFilterEx(HDC, LPSIZE); +__declspec(dllimport) COLORREF __stdcall GetBkColor(HDC); + + + + +#line 2838 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) int __stdcall GetBkMode(HDC); +__declspec(dllimport) LONG __stdcall GetBitmapBits(HBITMAP, LONG, LPVOID); +__declspec(dllimport) BOOL __stdcall GetBitmapDimensionEx(HBITMAP, LPSIZE); +__declspec(dllimport) UINT __stdcall GetBoundsRect(HDC, LPRECT, UINT); + +__declspec(dllimport) BOOL __stdcall GetBrushOrgEx(HDC, LPPOINT); + +__declspec(dllimport) BOOL __stdcall GetCharWidthA(HDC, UINT, UINT, LPINT); +__declspec(dllimport) BOOL __stdcall GetCharWidthW(HDC, UINT, UINT, LPINT); + + + + +#line 2853 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall GetCharWidth32A(HDC, UINT, UINT, LPINT); +__declspec(dllimport) BOOL __stdcall GetCharWidth32W(HDC, UINT, UINT, LPINT); + + + + +#line 2860 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall GetCharWidthFloatA(HDC, UINT, UINT, PFLOAT); +__declspec(dllimport) BOOL __stdcall GetCharWidthFloatW(HDC, UINT, UINT, PFLOAT); + + + + +#line 2867 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall GetCharABCWidthsA(HDC, UINT, UINT, LPABC); +__declspec(dllimport) BOOL __stdcall GetCharABCWidthsW(HDC, UINT, UINT, LPABC); + + + + +#line 2874 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall GetCharABCWidthsFloatA(HDC, UINT, UINT, LPABCFLOAT); +__declspec(dllimport) BOOL __stdcall GetCharABCWidthsFloatW(HDC, UINT, UINT, LPABCFLOAT); + + + + +#line 2881 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) int __stdcall GetClipBox(HDC, LPRECT); +__declspec(dllimport) int __stdcall GetClipRgn(HDC, HRGN); +__declspec(dllimport) int __stdcall GetMetaRgn(HDC, HRGN); +__declspec(dllimport) HGDIOBJ __stdcall GetCurrentObject(HDC, UINT); +__declspec(dllimport) BOOL __stdcall GetCurrentPositionEx(HDC, LPPOINT); +__declspec(dllimport) int __stdcall GetDeviceCaps(HDC, int); +__declspec(dllimport) int __stdcall GetDIBits(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT); +__declspec(dllimport) DWORD __stdcall GetFontData(HDC, DWORD, DWORD, LPVOID, DWORD); +__declspec(dllimport) DWORD __stdcall GetGlyphOutlineA(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, const MAT2 *); +__declspec(dllimport) DWORD __stdcall GetGlyphOutlineW(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, const MAT2 *); + + + + +#line 2896 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) int __stdcall GetGraphicsMode(HDC); +__declspec(dllimport) int __stdcall GetMapMode(HDC); +__declspec(dllimport) UINT __stdcall GetMetaFileBitsEx(HMETAFILE, UINT, LPVOID); +__declspec(dllimport) HMETAFILE __stdcall GetMetaFileA(LPCSTR); +__declspec(dllimport) HMETAFILE __stdcall GetMetaFileW(LPCWSTR); + + + + +#line 2906 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) COLORREF __stdcall GetNearestColor(HDC, COLORREF); +__declspec(dllimport) UINT __stdcall GetNearestPaletteIndex(HPALETTE, COLORREF); +__declspec(dllimport) DWORD __stdcall GetObjectType(HGDIOBJ h); + + + +__declspec(dllimport) UINT __stdcall GetOutlineTextMetricsA(HDC, UINT, LPOUTLINETEXTMETRICA); +__declspec(dllimport) UINT __stdcall GetOutlineTextMetricsW(HDC, UINT, LPOUTLINETEXTMETRICW); + + + + +#line 2919 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +#line 2921 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) UINT __stdcall GetPaletteEntries(HPALETTE, UINT, UINT, LPPALETTEENTRY); +__declspec(dllimport) COLORREF __stdcall GetPixel(HDC, int, int); +__declspec(dllimport) int __stdcall GetPixelFormat(HDC); +__declspec(dllimport) int __stdcall GetPolyFillMode(HDC); +__declspec(dllimport) BOOL __stdcall GetRasterizerCaps(LPRASTERIZER_STATUS, UINT); +__declspec(dllimport) DWORD __stdcall GetRegionData(HRGN, DWORD, LPRGNDATA); +__declspec(dllimport) int __stdcall GetRgnBox(HRGN, LPRECT); +__declspec(dllimport) HGDIOBJ __stdcall GetStockObject(int); +__declspec(dllimport) int __stdcall GetStretchBltMode(HDC); +__declspec(dllimport) UINT __stdcall GetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY); +__declspec(dllimport) UINT __stdcall GetSystemPaletteUse(HDC); +__declspec(dllimport) int __stdcall GetTextCharacterExtra(HDC); +__declspec(dllimport) UINT __stdcall GetTextAlign(HDC); +__declspec(dllimport) COLORREF __stdcall GetTextColor(HDC); + +__declspec(dllimport) BOOL __stdcall GetTextExtentPointA( + HDC, + LPCSTR, + int, + LPSIZE + ); +__declspec(dllimport) BOOL __stdcall GetTextExtentPointW( + HDC, + LPCWSTR, + int, + LPSIZE + ); + + + + +#line 2954 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) BOOL __stdcall GetTextExtentPoint32A( + HDC, + LPCSTR, + int, + LPSIZE + ); +__declspec(dllimport) BOOL __stdcall GetTextExtentPoint32W( + HDC, + LPCWSTR, + int, + LPSIZE + ); + + + + +#line 2972 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) BOOL __stdcall GetTextExtentExPointA( + HDC, + LPCSTR, + int, + int, + LPINT, + LPINT, + LPSIZE + ); +__declspec(dllimport) BOOL __stdcall GetTextExtentExPointW( + HDC, + LPCWSTR, + int, + int, + LPINT, + LPINT, + LPSIZE + ); + + + + +#line 2996 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) int __stdcall GetTextCharset(HDC hdc); +__declspec(dllimport) int __stdcall GetTextCharsetInfo(HDC hdc, LPFONTSIGNATURE lpSig, DWORD dwFlags); +__declspec(dllimport) BOOL __stdcall TranslateCharsetInfo( DWORD *lpSrc, LPCHARSETINFO lpCs, DWORD dwFlags); +__declspec(dllimport) DWORD __stdcall GetFontLanguageInfo( HDC ); +__declspec(dllimport) DWORD __stdcall GetCharacterPlacementA(HDC, LPCSTR, int, int, LPGCP_RESULTSA, DWORD); +__declspec(dllimport) DWORD __stdcall GetCharacterPlacementW(HDC, LPCWSTR, int, int, LPGCP_RESULTSW, DWORD); + + + + +#line 3008 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +#line 3009 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3188 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + +__declspec(dllimport) BOOL __stdcall GetViewportExtEx(HDC, LPSIZE); +__declspec(dllimport) BOOL __stdcall GetViewportOrgEx(HDC, LPPOINT); +__declspec(dllimport) BOOL __stdcall GetWindowExtEx(HDC, LPSIZE); +__declspec(dllimport) BOOL __stdcall GetWindowOrgEx(HDC, LPPOINT); + +__declspec(dllimport) int __stdcall IntersectClipRect(HDC, int, int, int, int); +__declspec(dllimport) BOOL __stdcall InvertRgn(HDC, HRGN); +__declspec(dllimport) BOOL __stdcall LineDDA(int, int, int, int, LINEDDAPROC, LPARAM); +__declspec(dllimport) BOOL __stdcall LineTo(HDC, int, int); +__declspec(dllimport) BOOL __stdcall MaskBlt(HDC, int, int, int, int, + HDC, int, int, HBITMAP, int, int, DWORD); +__declspec(dllimport) BOOL __stdcall PlgBlt(HDC, const POINT *, HDC, int, int, int, + int, HBITMAP, int, int); + +__declspec(dllimport) int __stdcall OffsetClipRgn(HDC, int, int); +__declspec(dllimport) int __stdcall OffsetRgn(HRGN, int, int); +__declspec(dllimport) BOOL __stdcall PatBlt(HDC, int, int, int, int, DWORD); +__declspec(dllimport) BOOL __stdcall Pie(HDC, int, int, int, int, int, int, int, int); +__declspec(dllimport) BOOL __stdcall PlayMetaFile(HDC, HMETAFILE); +__declspec(dllimport) BOOL __stdcall PaintRgn(HDC, HRGN); +__declspec(dllimport) BOOL __stdcall PolyPolygon(HDC, const POINT *, const INT *, int); +__declspec(dllimport) BOOL __stdcall PtInRegion(HRGN, int, int); +__declspec(dllimport) BOOL __stdcall PtVisible(HDC, int, int); +__declspec(dllimport) BOOL __stdcall RectInRegion(HRGN, const RECT *); +__declspec(dllimport) BOOL __stdcall RectVisible(HDC, const RECT *); +__declspec(dllimport) BOOL __stdcall Rectangle(HDC, int, int, int, int); +__declspec(dllimport) BOOL __stdcall RestoreDC(HDC, int); +__declspec(dllimport) HDC __stdcall ResetDCA(HDC, const DEVMODEA *); +__declspec(dllimport) HDC __stdcall ResetDCW(HDC, const DEVMODEW *); + + + + +#line 3224 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) UINT __stdcall RealizePalette(HDC); +__declspec(dllimport) BOOL __stdcall RemoveFontResourceA(LPCSTR); +__declspec(dllimport) BOOL __stdcall RemoveFontResourceW(LPCWSTR); + + + + +#line 3232 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall RoundRect(HDC, int, int, int, int, int, int); +__declspec(dllimport) BOOL __stdcall ResizePalette(HPALETTE, UINT); + +__declspec(dllimport) int __stdcall SaveDC(HDC); +__declspec(dllimport) int __stdcall SelectClipRgn(HDC, HRGN); +__declspec(dllimport) int __stdcall ExtSelectClipRgn(HDC, HRGN, int); +__declspec(dllimport) int __stdcall SetMetaRgn(HDC); +__declspec(dllimport) HGDIOBJ __stdcall SelectObject(HDC, HGDIOBJ); +__declspec(dllimport) HPALETTE __stdcall SelectPalette(HDC, HPALETTE, BOOL); +__declspec(dllimport) COLORREF __stdcall SetBkColor(HDC, COLORREF); + + + + +#line 3247 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) int __stdcall SetBkMode(HDC, int); +__declspec(dllimport) LONG __stdcall SetBitmapBits(HBITMAP, DWORD, const void *); + +__declspec(dllimport) UINT __stdcall SetBoundsRect(HDC, const RECT *, UINT); +__declspec(dllimport) int __stdcall SetDIBits(HDC, HBITMAP, UINT, UINT, const void *, const BITMAPINFO *, UINT); +__declspec(dllimport) int __stdcall SetDIBitsToDevice(HDC, int, int, DWORD, DWORD, int, + int, UINT, UINT, const void *, const BITMAPINFO *, UINT); +__declspec(dllimport) DWORD __stdcall SetMapperFlags(HDC, DWORD); +__declspec(dllimport) int __stdcall SetGraphicsMode(HDC hdc, int iMode); +__declspec(dllimport) int __stdcall SetMapMode(HDC, int); +__declspec(dllimport) HMETAFILE __stdcall SetMetaFileBitsEx(UINT, const BYTE *); +__declspec(dllimport) UINT __stdcall SetPaletteEntries(HPALETTE, UINT, UINT, const PALETTEENTRY *); +__declspec(dllimport) COLORREF __stdcall SetPixel(HDC, int, int, COLORREF); +__declspec(dllimport) BOOL __stdcall SetPixelV(HDC, int, int, COLORREF); +__declspec(dllimport) BOOL __stdcall SetPixelFormat(HDC, int, const PIXELFORMATDESCRIPTOR *); +__declspec(dllimport) int __stdcall SetPolyFillMode(HDC, int); +__declspec(dllimport) BOOL __stdcall StretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD); +__declspec(dllimport) BOOL __stdcall SetRectRgn(HRGN, int, int, int, int); +__declspec(dllimport) int __stdcall StretchDIBits(HDC, int, int, int, int, int, int, int, int, const + void *, const BITMAPINFO *, UINT, DWORD); +__declspec(dllimport) int __stdcall SetROP2(HDC, int); +__declspec(dllimport) int __stdcall SetStretchBltMode(HDC, int); +__declspec(dllimport) UINT __stdcall SetSystemPaletteUse(HDC, UINT); +__declspec(dllimport) int __stdcall SetTextCharacterExtra(HDC, int); +__declspec(dllimport) COLORREF __stdcall SetTextColor(HDC, COLORREF); +__declspec(dllimport) UINT __stdcall SetTextAlign(HDC, UINT); +__declspec(dllimport) BOOL __stdcall SetTextJustification(HDC, int, int); +__declspec(dllimport) BOOL __stdcall UpdateColors(HDC); + + + + + + + + +typedef USHORT COLOR16; + +typedef struct _TRIVERTEX +{ + LONG x; + LONG y; + COLOR16 Red; + COLOR16 Green; + COLOR16 Blue; + COLOR16 Alpha; +}TRIVERTEX,*PTRIVERTEX,*LPTRIVERTEX; + +typedef struct _GRADIENT_TRIANGLE +{ + ULONG Vertex1; + ULONG Vertex2; + ULONG Vertex3; +} GRADIENT_TRIANGLE,*PGRADIENT_TRIANGLE,*LPGRADIENT_TRIANGLE; + +typedef struct _GRADIENT_RECT +{ + ULONG UpperLeft; + ULONG LowerRight; +}GRADIENT_RECT,*PGRADIENT_RECT,*LPGRADIENT_RECT; + +typedef struct _BLENDFUNCTION +{ + BYTE BlendOp; + BYTE BlendFlags; + BYTE SourceConstantAlpha; + BYTE AlphaFormat; +}BLENDFUNCTION,*PBLENDFUNCTION; + + + + + + + + + + + + + + + + + +__declspec(dllimport) BOOL __stdcall AlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION); + +__declspec(dllimport) BOOL __stdcall AlphaDIBBlend(HDC,int,int,int,int,const void *, + const BITMAPINFO *,UINT,int,int,int,int,BLENDFUNCTION); + +__declspec(dllimport) BOOL __stdcall TransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT); + +__declspec(dllimport) BOOL __stdcall TransparentDIBits(HDC,int,int,int,int,const void *, + const BITMAPINFO *,UINT,int,int,int,int,UINT); + + + + + + + + + + +__declspec(dllimport) BOOL __stdcall GradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG); + +#line 3355 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + +__declspec(dllimport) BOOL __stdcall PlayMetaFileRecord(HDC, LPHANDLETABLE, LPMETARECORD, UINT); +typedef int (__stdcall* MFENUMPROC)(HDC, HANDLETABLE *, METARECORD *, int, LPARAM); +__declspec(dllimport) BOOL __stdcall EnumMetaFile(HDC, HMETAFILE, MFENUMPROC, LPARAM); + +typedef int (__stdcall* ENHMFENUMPROC)(HDC, HANDLETABLE *, const ENHMETARECORD *, int, LPARAM); + + + +__declspec(dllimport) HENHMETAFILE __stdcall CloseEnhMetaFile(HDC); +__declspec(dllimport) HENHMETAFILE __stdcall CopyEnhMetaFileA(HENHMETAFILE, LPCSTR); +__declspec(dllimport) HENHMETAFILE __stdcall CopyEnhMetaFileW(HENHMETAFILE, LPCWSTR); + + + + +#line 3375 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) HDC __stdcall CreateEnhMetaFileA(HDC, LPCSTR, const RECT *, LPCSTR); +__declspec(dllimport) HDC __stdcall CreateEnhMetaFileW(HDC, LPCWSTR, const RECT *, LPCWSTR); + + + + +#line 3382 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall DeleteEnhMetaFile(HENHMETAFILE); +__declspec(dllimport) BOOL __stdcall EnumEnhMetaFile(HDC, HENHMETAFILE, ENHMFENUMPROC, + LPVOID, const RECT *); +__declspec(dllimport) HENHMETAFILE __stdcall GetEnhMetaFileA(LPCSTR); +__declspec(dllimport) HENHMETAFILE __stdcall GetEnhMetaFileW(LPCWSTR); + + + + +#line 3392 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) UINT __stdcall GetEnhMetaFileBits(HENHMETAFILE, UINT, LPBYTE); +__declspec(dllimport) UINT __stdcall GetEnhMetaFileDescriptionA(HENHMETAFILE, UINT, LPSTR ); +__declspec(dllimport) UINT __stdcall GetEnhMetaFileDescriptionW(HENHMETAFILE, UINT, LPWSTR ); + + + + +#line 3400 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) UINT __stdcall GetEnhMetaFileHeader(HENHMETAFILE, UINT, LPENHMETAHEADER ); +__declspec(dllimport) UINT __stdcall GetEnhMetaFilePaletteEntries(HENHMETAFILE, UINT, LPPALETTEENTRY ); +__declspec(dllimport) UINT __stdcall GetEnhMetaFilePixelFormat(HENHMETAFILE, UINT, + PIXELFORMATDESCRIPTOR *); +__declspec(dllimport) UINT __stdcall GetWinMetaFileBits(HENHMETAFILE, UINT, LPBYTE, INT, HDC); +__declspec(dllimport) BOOL __stdcall PlayEnhMetaFile(HDC, HENHMETAFILE, const RECT *); +__declspec(dllimport) BOOL __stdcall PlayEnhMetaFileRecord(HDC, LPHANDLETABLE, const ENHMETARECORD *, UINT); +__declspec(dllimport) HENHMETAFILE __stdcall SetEnhMetaFileBits(UINT, const BYTE *); +__declspec(dllimport) HENHMETAFILE __stdcall SetWinMetaFileBits(UINT, const BYTE *, HDC, const METAFILEPICT *); +__declspec(dllimport) BOOL __stdcall GdiComment(HDC, UINT, const BYTE *); + +#line 3412 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +__declspec(dllimport) BOOL __stdcall GetTextMetricsA(HDC, LPTEXTMETRICA); +__declspec(dllimport) BOOL __stdcall GetTextMetricsW(HDC, LPTEXTMETRICW); + + + + +#line 3422 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +#line 3424 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +typedef struct tagDIBSECTION { + BITMAP dsBm; + BITMAPINFOHEADER dsBmih; + DWORD dsBitfields[3]; + HANDLE dshSection; + DWORD dsOffset; +} DIBSECTION, *LPDIBSECTION, *PDIBSECTION; + +__declspec(dllimport) BOOL __stdcall AngleArc(HDC, int, int, DWORD, FLOAT, FLOAT); +__declspec(dllimport) BOOL __stdcall PolyPolyline(HDC, const POINT *, const DWORD *, DWORD); +__declspec(dllimport) BOOL __stdcall GetWorldTransform(HDC, LPXFORM); +__declspec(dllimport) BOOL __stdcall SetWorldTransform(HDC, const XFORM *); +__declspec(dllimport) BOOL __stdcall ModifyWorldTransform(HDC, const XFORM *, DWORD); +__declspec(dllimport) BOOL __stdcall CombineTransform(LPXFORM, const XFORM *, const XFORM *); +__declspec(dllimport) HBITMAP __stdcall CreateDIBSection(HDC, const BITMAPINFO *, UINT, void **, HANDLE, DWORD); +__declspec(dllimport) UINT __stdcall GetDIBColorTable(HDC, UINT, UINT, RGBQUAD *); +__declspec(dllimport) UINT __stdcall SetDIBColorTable(HDC, UINT, UINT, const RGBQUAD *); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagCOLORADJUSTMENT { + WORD caSize; + WORD caFlags; + WORD caIlluminantIndex; + WORD caRedGamma; + WORD caGreenGamma; + WORD caBlueGamma; + WORD caReferenceBlack; + WORD caReferenceWhite; + SHORT caContrast; + SHORT caBrightness; + SHORT caColorfulness; + SHORT caRedGreenTint; +} COLORADJUSTMENT, *PCOLORADJUSTMENT, *LPCOLORADJUSTMENT; + +__declspec(dllimport) BOOL __stdcall SetColorAdjustment(HDC, const COLORADJUSTMENT *); +__declspec(dllimport) BOOL __stdcall GetColorAdjustment(HDC, LPCOLORADJUSTMENT); +__declspec(dllimport) HPALETTE __stdcall CreateHalftonePalette(HDC); + + +typedef BOOL (__stdcall* ABORTPROC)(HDC, int); + + +#line 3504 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef struct _DOCINFOA { + int cbSize; + LPCSTR lpszDocName; + LPCSTR lpszOutput; + + LPCSTR lpszDatatype; + DWORD fwType; +#line 3513 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +} DOCINFOA, *LPDOCINFOA; +typedef struct _DOCINFOW { + int cbSize; + LPCWSTR lpszDocName; + LPCWSTR lpszOutput; + + LPCWSTR lpszDatatype; + DWORD fwType; +#line 3522 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +} DOCINFOW, *LPDOCINFOW; + + + + +typedef DOCINFOA DOCINFO; +typedef LPDOCINFOA LPDOCINFO; +#line 3530 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + +#line 3535 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) int __stdcall StartDocA(HDC, const DOCINFOA *); +__declspec(dllimport) int __stdcall StartDocW(HDC, const DOCINFOW *); + + + + +#line 3543 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) int __stdcall EndDoc(HDC); +__declspec(dllimport) int __stdcall StartPage(HDC); +__declspec(dllimport) int __stdcall EndPage(HDC); +__declspec(dllimport) int __stdcall AbortDoc(HDC); +__declspec(dllimport) int __stdcall SetAbortProc(HDC, ABORTPROC); + +__declspec(dllimport) BOOL __stdcall AbortPath(HDC); +__declspec(dllimport) BOOL __stdcall ArcTo(HDC, int, int, int, int, int, int,int, int); +__declspec(dllimport) BOOL __stdcall BeginPath(HDC); +__declspec(dllimport) BOOL __stdcall CloseFigure(HDC); +__declspec(dllimport) BOOL __stdcall EndPath(HDC); +__declspec(dllimport) BOOL __stdcall FillPath(HDC); +__declspec(dllimport) BOOL __stdcall FlattenPath(HDC); +__declspec(dllimport) int __stdcall GetPath(HDC, LPPOINT, LPBYTE, int); +__declspec(dllimport) HRGN __stdcall PathToRegion(HDC); +__declspec(dllimport) BOOL __stdcall PolyDraw(HDC, const POINT *, const BYTE *, int); +__declspec(dllimport) BOOL __stdcall SelectClipPath(HDC, int); +__declspec(dllimport) int __stdcall SetArcDirection(HDC, int); +__declspec(dllimport) BOOL __stdcall SetMiterLimit(HDC, FLOAT, PFLOAT); +__declspec(dllimport) BOOL __stdcall StrokeAndFillPath(HDC); +__declspec(dllimport) BOOL __stdcall StrokePath(HDC); +__declspec(dllimport) BOOL __stdcall WidenPath(HDC); +__declspec(dllimport) HPEN __stdcall ExtCreatePen(DWORD, DWORD, const LOGBRUSH *, DWORD, const DWORD *); +__declspec(dllimport) BOOL __stdcall GetMiterLimit(HDC, PFLOAT); +__declspec(dllimport) int __stdcall GetArcDirection(HDC); + +__declspec(dllimport) int __stdcall GetObjectA(HGDIOBJ, int, LPVOID); +__declspec(dllimport) int __stdcall GetObjectW(HGDIOBJ, int, LPVOID); + + + + +#line 3576 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall MoveToEx(HDC, int, int, LPPOINT); +__declspec(dllimport) BOOL __stdcall TextOutA(HDC, int, int, LPCSTR, int); +__declspec(dllimport) BOOL __stdcall TextOutW(HDC, int, int, LPCWSTR, int); + + + + +#line 3584 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall ExtTextOutA(HDC, int, int, UINT, const RECT *,LPCSTR, UINT, const INT *); +__declspec(dllimport) BOOL __stdcall ExtTextOutW(HDC, int, int, UINT, const RECT *,LPCWSTR, UINT, const INT *); + + + + +#line 3591 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall PolyTextOutA(HDC, const POLYTEXTA *, int); +__declspec(dllimport) BOOL __stdcall PolyTextOutW(HDC, const POLYTEXTW *, int); + + + + +#line 3598 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) HRGN __stdcall CreatePolygonRgn(const POINT *, int, int); +__declspec(dllimport) BOOL __stdcall DPtoLP(HDC, LPPOINT, int); +__declspec(dllimport) BOOL __stdcall LPtoDP(HDC, LPPOINT, int); +__declspec(dllimport) BOOL __stdcall Polygon(HDC, const POINT *, int); +__declspec(dllimport) BOOL __stdcall Polyline(HDC, const POINT *, int); + +__declspec(dllimport) BOOL __stdcall PolyBezier(HDC, const POINT *, DWORD); +__declspec(dllimport) BOOL __stdcall PolyBezierTo(HDC, const POINT *, DWORD); +__declspec(dllimport) BOOL __stdcall PolylineTo(HDC, const POINT *, DWORD); + +__declspec(dllimport) BOOL __stdcall SetViewportExtEx(HDC, int, int, LPSIZE); +__declspec(dllimport) BOOL __stdcall SetViewportOrgEx(HDC, int, int, LPPOINT); +__declspec(dllimport) BOOL __stdcall SetWindowExtEx(HDC, int, int, LPSIZE); +__declspec(dllimport) BOOL __stdcall SetWindowOrgEx(HDC, int, int, LPPOINT); + +__declspec(dllimport) BOOL __stdcall OffsetViewportOrgEx(HDC, int, int, LPPOINT); +__declspec(dllimport) BOOL __stdcall OffsetWindowOrgEx(HDC, int, int, LPPOINT); +__declspec(dllimport) BOOL __stdcall ScaleViewportExtEx(HDC, int, int, int, int, LPSIZE); +__declspec(dllimport) BOOL __stdcall ScaleWindowExtEx(HDC, int, int, int, int, LPSIZE); +__declspec(dllimport) BOOL __stdcall SetBitmapDimensionEx(HBITMAP, int, int, LPSIZE); +__declspec(dllimport) BOOL __stdcall SetBrushOrgEx(HDC, int, int, LPPOINT); + +__declspec(dllimport) int __stdcall GetTextFaceA(HDC, int, LPSTR); +__declspec(dllimport) int __stdcall GetTextFaceW(HDC, int, LPWSTR); + + + + +#line 3628 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +typedef struct tagKERNINGPAIR { + WORD wFirst; + WORD wSecond; + int iKernAmount; +} KERNINGPAIR, *LPKERNINGPAIR; + +__declspec(dllimport) DWORD __stdcall GetKerningPairsA(HDC, DWORD, LPKERNINGPAIR); +__declspec(dllimport) DWORD __stdcall GetKerningPairsW(HDC, DWORD, LPKERNINGPAIR); + + + + +#line 3644 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) BOOL __stdcall GetDCOrgEx(HDC,LPPOINT); +__declspec(dllimport) BOOL __stdcall FixBrushOrgEx(HDC,int,int,LPPOINT); +__declspec(dllimport) BOOL __stdcall UnrealizeObject(HGDIOBJ); + +__declspec(dllimport) BOOL __stdcall GdiFlush(); +__declspec(dllimport) DWORD __stdcall GdiSetBatchLimit(DWORD); +__declspec(dllimport) DWORD __stdcall GdiGetBatchLimit(); + + + + + + + + + +typedef int (__stdcall* ICMENUMPROCA)(LPSTR, LPARAM); +typedef int (__stdcall* ICMENUMPROCW)(LPWSTR, LPARAM); + + + + +#line 3668 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +__declspec(dllimport) int __stdcall SetICMMode(HDC, int); +__declspec(dllimport) BOOL __stdcall CheckColorsInGamut(HDC,LPVOID,LPVOID,DWORD); +__declspec(dllimport) HCOLORSPACE __stdcall GetColorSpace(HDC); +__declspec(dllimport) BOOL __stdcall GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACEA,DWORD); +__declspec(dllimport) BOOL __stdcall GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACEW,DWORD); + + + + +#line 3679 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) HCOLORSPACE __stdcall CreateColorSpaceA(LPLOGCOLORSPACEA); +__declspec(dllimport) HCOLORSPACE __stdcall CreateColorSpaceW(LPLOGCOLORSPACEW); + + + + +#line 3686 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) HCOLORSPACE __stdcall SetColorSpace(HDC,HCOLORSPACE); +__declspec(dllimport) BOOL __stdcall DeleteColorSpace(HCOLORSPACE); +__declspec(dllimport) BOOL __stdcall GetICMProfileA(HDC,LPDWORD,LPSTR); +__declspec(dllimport) BOOL __stdcall GetICMProfileW(HDC,LPDWORD,LPWSTR); + + + + +#line 3695 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall SetICMProfileA(HDC,LPSTR); +__declspec(dllimport) BOOL __stdcall SetICMProfileW(HDC,LPWSTR); + + + + +#line 3702 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall GetDeviceGammaRamp(HDC,LPVOID); +__declspec(dllimport) BOOL __stdcall SetDeviceGammaRamp(HDC,LPVOID); +__declspec(dllimport) BOOL __stdcall ColorMatchToTarget(HDC,HDC,DWORD); +__declspec(dllimport) int __stdcall EnumICMProfilesA(HDC,ICMENUMPROCA,LPARAM); +__declspec(dllimport) int __stdcall EnumICMProfilesW(HDC,ICMENUMPROCW,LPARAM); + + + + +#line 3712 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall UpdateICMRegKeyA(DWORD,LPSTR,LPSTR,UINT); +__declspec(dllimport) BOOL __stdcall UpdateICMRegKeyW(DWORD,LPWSTR,LPWSTR,UINT); + + + + +#line 3719 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +#line 3720 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +#line 3724 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + +#line 3734 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3851 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + + + + + + + + + + + + + +#line 3870 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + +#line 3876 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +#line 3880 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + +typedef struct tagEMR +{ + DWORD iType; + DWORD nSize; + +} EMR, *PEMR; + + + +typedef struct tagEMRTEXT +{ + POINTL ptlReference; + DWORD nChars; + DWORD offString; + DWORD fOptions; + RECTL rcl; + DWORD offDx; + +} EMRTEXT, *PEMRTEXT; + + + +typedef struct tagABORTPATH +{ + EMR emr; +} EMRABORTPATH, *PEMRABORTPATH, + EMRBEGINPATH, *PEMRBEGINPATH, + EMRENDPATH, *PEMRENDPATH, + EMRCLOSEFIGURE, *PEMRCLOSEFIGURE, + EMRFLATTENPATH, *PEMRFLATTENPATH, + EMRWIDENPATH, *PEMRWIDENPATH, + EMRSETMETARGN, *PEMRSETMETARGN, + EMRSAVEDC, *PEMRSAVEDC, + EMRREALIZEPALETTE, *PEMRREALIZEPALETTE; + +typedef struct tagEMRSELECTCLIPPATH +{ + EMR emr; + DWORD iMode; +} EMRSELECTCLIPPATH, *PEMRSELECTCLIPPATH, + EMRSETBKMODE, *PEMRSETBKMODE, + EMRSETMAPMODE, *PEMRSETMAPMODE, + EMRSETPOLYFILLMODE, *PEMRSETPOLYFILLMODE, + EMRSETROP2, *PEMRSETROP2, + EMRSETSTRETCHBLTMODE, *PEMRSETSTRETCHBLTMODE, + EMRSETICMMODE, *PEMRSETICMMODE, + EMRSETTEXTALIGN, *PEMRSETTEXTALIGN; + +typedef struct tagEMRSETMITERLIMIT +{ + EMR emr; + FLOAT eMiterLimit; +} EMRSETMITERLIMIT, *PEMRSETMITERLIMIT; + +typedef struct tagEMRRESTOREDC +{ + EMR emr; + LONG iRelative; +} EMRRESTOREDC, *PEMRRESTOREDC; + +typedef struct tagEMRSETARCDIRECTION +{ + EMR emr; + DWORD iArcDirection; + +} EMRSETARCDIRECTION, *PEMRSETARCDIRECTION; + +typedef struct tagEMRSETMAPPERFLAGS +{ + EMR emr; + DWORD dwFlags; +} EMRSETMAPPERFLAGS, *PEMRSETMAPPERFLAGS; + +typedef struct tagEMRSETTEXTCOLOR +{ + EMR emr; + COLORREF crColor; +} EMRSETBKCOLOR, *PEMRSETBKCOLOR, + EMRSETTEXTCOLOR, *PEMRSETTEXTCOLOR; + +typedef struct tagEMRSELECTOBJECT +{ + EMR emr; + DWORD ihObject; +} EMRSELECTOBJECT, *PEMRSELECTOBJECT, + EMRDELETEOBJECT, *PEMRDELETEOBJECT; + + +typedef struct tagEMRSELECTCOLORSPACE +{ + EMR emr; + DWORD ihCS; +} EMRSELECTCOLORSPACE, *PEMRSELECTCOLORSPACE, + EMRDELETECOLORSPACE, *PEMRDELETECOLORSPACE; +#line 3978 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef struct tagEMRSELECTPALETTE +{ + EMR emr; + DWORD ihPal; +} EMRSELECTPALETTE, *PEMRSELECTPALETTE; + +typedef struct tagEMRRESIZEPALETTE +{ + EMR emr; + DWORD ihPal; + DWORD cEntries; +} EMRRESIZEPALETTE, *PEMRRESIZEPALETTE; + +typedef struct tagEMRSETPALETTEENTRIES +{ + EMR emr; + DWORD ihPal; + DWORD iStart; + DWORD cEntries; + PALETTEENTRY aPalEntries[1]; +} EMRSETPALETTEENTRIES, *PEMRSETPALETTEENTRIES; + +typedef struct tagEMRSETCOLORADJUSTMENT +{ + EMR emr; + COLORADJUSTMENT ColorAdjustment; +} EMRSETCOLORADJUSTMENT, *PEMRSETCOLORADJUSTMENT; + +typedef struct tagEMRGDICOMMENT +{ + EMR emr; + DWORD cbData; + BYTE Data[1]; +} EMRGDICOMMENT, *PEMRGDICOMMENT; + +typedef struct tagEMREOF +{ + EMR emr; + DWORD nPalEntries; + DWORD offPalEntries; + DWORD nSizeLast; + + +} EMREOF, *PEMREOF; + +typedef struct tagEMRLINETO +{ + EMR emr; + POINTL ptl; +} EMRLINETO, *PEMRLINETO, + EMRMOVETOEX, *PEMRMOVETOEX; + +typedef struct tagEMROFFSETCLIPRGN +{ + EMR emr; + POINTL ptlOffset; +} EMROFFSETCLIPRGN, *PEMROFFSETCLIPRGN; + +typedef struct tagEMRFILLPATH +{ + EMR emr; + RECTL rclBounds; +} EMRFILLPATH, *PEMRFILLPATH, + EMRSTROKEANDFILLPATH, *PEMRSTROKEANDFILLPATH, + EMRSTROKEPATH, *PEMRSTROKEPATH; + +typedef struct tagEMREXCLUDECLIPRECT +{ + EMR emr; + RECTL rclClip; +} EMREXCLUDECLIPRECT, *PEMREXCLUDECLIPRECT, + EMRINTERSECTCLIPRECT, *PEMRINTERSECTCLIPRECT; + +typedef struct tagEMRSETVIEWPORTORGEX +{ + EMR emr; + POINTL ptlOrigin; +} EMRSETVIEWPORTORGEX, *PEMRSETVIEWPORTORGEX, + EMRSETWINDOWORGEX, *PEMRSETWINDOWORGEX, + EMRSETBRUSHORGEX, *PEMRSETBRUSHORGEX; + +typedef struct tagEMRSETVIEWPORTEXTEX +{ + EMR emr; + SIZEL szlExtent; +} EMRSETVIEWPORTEXTEX, *PEMRSETVIEWPORTEXTEX, + EMRSETWINDOWEXTEX, *PEMRSETWINDOWEXTEX; + +typedef struct tagEMRSCALEVIEWPORTEXTEX +{ + EMR emr; + LONG xNum; + LONG xDenom; + LONG yNum; + LONG yDenom; +} EMRSCALEVIEWPORTEXTEX, *PEMRSCALEVIEWPORTEXTEX, + EMRSCALEWINDOWEXTEX, *PEMRSCALEWINDOWEXTEX; + +typedef struct tagEMRSETWORLDTRANSFORM +{ + EMR emr; + XFORM xform; +} EMRSETWORLDTRANSFORM, *PEMRSETWORLDTRANSFORM; + +typedef struct tagEMRMODIFYWORLDTRANSFORM +{ + EMR emr; + XFORM xform; + DWORD iMode; +} EMRMODIFYWORLDTRANSFORM, *PEMRMODIFYWORLDTRANSFORM; + +typedef struct tagEMRSETPIXELV +{ + EMR emr; + POINTL ptlPixel; + COLORREF crColor; +} EMRSETPIXELV, *PEMRSETPIXELV; + +typedef struct tagEMREXTFLOODFILL +{ + EMR emr; + POINTL ptlStart; + COLORREF crColor; + DWORD iMode; +} EMREXTFLOODFILL, *PEMREXTFLOODFILL; + +typedef struct tagEMRELLIPSE +{ + EMR emr; + RECTL rclBox; +} EMRELLIPSE, *PEMRELLIPSE, + EMRRECTANGLE, *PEMRRECTANGLE; + +typedef struct tagEMRROUNDRECT +{ + EMR emr; + RECTL rclBox; + SIZEL szlCorner; +} EMRROUNDRECT, *PEMRROUNDRECT; + +typedef struct tagEMRARC +{ + EMR emr; + RECTL rclBox; + POINTL ptlStart; + POINTL ptlEnd; +} EMRARC, *PEMRARC, + EMRARCTO, *PEMRARCTO, + EMRCHORD, *PEMRCHORD, + EMRPIE, *PEMRPIE; + +typedef struct tagEMRANGLEARC +{ + EMR emr; + POINTL ptlCenter; + DWORD nRadius; + FLOAT eStartAngle; + FLOAT eSweepAngle; +} EMRANGLEARC, *PEMRANGLEARC; + +typedef struct tagEMRPOLYLINE +{ + EMR emr; + RECTL rclBounds; + DWORD cptl; + POINTL aptl[1]; +} EMRPOLYLINE, *PEMRPOLYLINE, + EMRPOLYBEZIER, *PEMRPOLYBEZIER, + EMRPOLYGON, *PEMRPOLYGON, + EMRPOLYBEZIERTO, *PEMRPOLYBEZIERTO, + EMRPOLYLINETO, *PEMRPOLYLINETO; + +typedef struct tagEMRPOLYLINE16 +{ + EMR emr; + RECTL rclBounds; + DWORD cpts; + POINTS apts[1]; +} EMRPOLYLINE16, *PEMRPOLYLINE16, + EMRPOLYBEZIER16, *PEMRPOLYBEZIER16, + EMRPOLYGON16, *PEMRPOLYGON16, + EMRPOLYBEZIERTO16, *PEMRPOLYBEZIERTO16, + EMRPOLYLINETO16, *PEMRPOLYLINETO16; + +typedef struct tagEMRPOLYDRAW +{ + EMR emr; + RECTL rclBounds; + DWORD cptl; + POINTL aptl[1]; + BYTE abTypes[1]; +} EMRPOLYDRAW, *PEMRPOLYDRAW; + +typedef struct tagEMRPOLYDRAW16 +{ + EMR emr; + RECTL rclBounds; + DWORD cpts; + POINTS apts[1]; + BYTE abTypes[1]; +} EMRPOLYDRAW16, *PEMRPOLYDRAW16; + +typedef struct tagEMRPOLYPOLYLINE +{ + EMR emr; + RECTL rclBounds; + DWORD nPolys; + DWORD cptl; + DWORD aPolyCounts[1]; + POINTL aptl[1]; +} EMRPOLYPOLYLINE, *PEMRPOLYPOLYLINE, + EMRPOLYPOLYGON, *PEMRPOLYPOLYGON; + +typedef struct tagEMRPOLYPOLYLINE16 +{ + EMR emr; + RECTL rclBounds; + DWORD nPolys; + DWORD cpts; + DWORD aPolyCounts[1]; + POINTS apts[1]; +} EMRPOLYPOLYLINE16, *PEMRPOLYPOLYLINE16, + EMRPOLYPOLYGON16, *PEMRPOLYPOLYGON16; + +typedef struct tagEMRINVERTRGN +{ + EMR emr; + RECTL rclBounds; + DWORD cbRgnData; + BYTE RgnData[1]; +} EMRINVERTRGN, *PEMRINVERTRGN, + EMRPAINTRGN, *PEMRPAINTRGN; + +typedef struct tagEMRFILLRGN +{ + EMR emr; + RECTL rclBounds; + DWORD cbRgnData; + DWORD ihBrush; + BYTE RgnData[1]; +} EMRFILLRGN, *PEMRFILLRGN; + +typedef struct tagEMRFRAMERGN +{ + EMR emr; + RECTL rclBounds; + DWORD cbRgnData; + DWORD ihBrush; + SIZEL szlStroke; + BYTE RgnData[1]; +} EMRFRAMERGN, *PEMRFRAMERGN; + + + + + + + + + + + + + +#line 4244 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef struct tagEMREXTSELECTCLIPRGN +{ + EMR emr; + DWORD cbRgnData; + DWORD iMode; + BYTE RgnData[1]; +} EMREXTSELECTCLIPRGN, *PEMREXTSELECTCLIPRGN; + +typedef struct tagEMREXTTEXTOUTA +{ + EMR emr; + RECTL rclBounds; + DWORD iGraphicsMode; + FLOAT exScale; + FLOAT eyScale; + EMRTEXT emrtext; + +} EMREXTTEXTOUTA, *PEMREXTTEXTOUTA, + EMREXTTEXTOUTW, *PEMREXTTEXTOUTW; + +typedef struct tagEMRPOLYTEXTOUTA +{ + EMR emr; + RECTL rclBounds; + DWORD iGraphicsMode; + FLOAT exScale; + FLOAT eyScale; + LONG cStrings; + EMRTEXT aemrtext[1]; + +} EMRPOLYTEXTOUTA, *PEMRPOLYTEXTOUTA, + EMRPOLYTEXTOUTW, *PEMRPOLYTEXTOUTW; + +typedef struct tagEMRBITBLT +{ + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG cxDest; + LONG cyDest; + DWORD dwRop; + LONG xSrc; + LONG ySrc; + XFORM xformSrc; + COLORREF crBkColorSrc; + DWORD iUsageSrc; + + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; +} EMRBITBLT, *PEMRBITBLT; + +typedef struct tagEMRSTRETCHBLT +{ + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG cxDest; + LONG cyDest; + DWORD dwRop; + LONG xSrc; + LONG ySrc; + XFORM xformSrc; + COLORREF crBkColorSrc; + DWORD iUsageSrc; + + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + LONG cxSrc; + LONG cySrc; +} EMRSTRETCHBLT, *PEMRSTRETCHBLT; + +typedef struct tagEMRMASKBLT +{ + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG cxDest; + LONG cyDest; + DWORD dwRop; + LONG xSrc; + LONG ySrc; + XFORM xformSrc; + COLORREF crBkColorSrc; + DWORD iUsageSrc; + + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + LONG xMask; + LONG yMask; + DWORD iUsageMask; + DWORD offBmiMask; + DWORD cbBmiMask; + DWORD offBitsMask; + DWORD cbBitsMask; +} EMRMASKBLT, *PEMRMASKBLT; + +typedef struct tagEMRPLGBLT +{ + EMR emr; + RECTL rclBounds; + POINTL aptlDest[3]; + LONG xSrc; + LONG ySrc; + LONG cxSrc; + LONG cySrc; + XFORM xformSrc; + COLORREF crBkColorSrc; + DWORD iUsageSrc; + + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + LONG xMask; + LONG yMask; + DWORD iUsageMask; + DWORD offBmiMask; + DWORD cbBmiMask; + DWORD offBitsMask; + DWORD cbBitsMask; +} EMRPLGBLT, *PEMRPLGBLT; + +typedef struct tagEMRSETDIBITSTODEVICE +{ + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG xSrc; + LONG ySrc; + LONG cxSrc; + LONG cySrc; + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + DWORD iUsageSrc; + DWORD iStartScan; + DWORD cScans; +} EMRSETDIBITSTODEVICE, *PEMRSETDIBITSTODEVICE; + +typedef struct tagEMRSTRETCHDIBITS +{ + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG xSrc; + LONG ySrc; + LONG cxSrc; + LONG cySrc; + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + DWORD iUsageSrc; + DWORD dwRop; + LONG cxDest; + LONG cyDest; +} EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4464 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef struct tagEMREXTCREATEFONTINDIRECTW +{ + EMR emr; + DWORD ihFont; + EXTLOGFONTW elfw; +} EMREXTCREATEFONTINDIRECTW, *PEMREXTCREATEFONTINDIRECTW; + + +typedef struct tagEMRCREATEPALETTE +{ + EMR emr; + DWORD ihPal; + LOGPALETTE lgpl; + +} EMRCREATEPALETTE, *PEMRCREATEPALETTE; + + + +typedef struct tagEMRCREATECOLORSPACE +{ + EMR emr; + DWORD ihCS; + LOGCOLORSPACEW lcs; +} EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE; + +#line 4491 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +typedef struct tagEMRCREATEPEN +{ + EMR emr; + DWORD ihPen; + LOGPEN lopn; +} EMRCREATEPEN, *PEMRCREATEPEN; + +typedef struct tagEMREXTCREATEPEN +{ + EMR emr; + DWORD ihPen; + DWORD offBmi; + DWORD cbBmi; + + + DWORD offBits; + DWORD cbBits; + EXTLOGPEN elp; +} EMREXTCREATEPEN, *PEMREXTCREATEPEN; + +typedef struct tagEMRCREATEBRUSHINDIRECT +{ + EMR emr; + DWORD ihBrush; + LOGBRUSH lb; + +} EMRCREATEBRUSHINDIRECT, *PEMRCREATEBRUSHINDIRECT; + +typedef struct tagEMRCREATEMONOBRUSH +{ + EMR emr; + DWORD ihBrush; + DWORD iUsage; + DWORD offBmi; + DWORD cbBmi; + DWORD offBits; + DWORD cbBits; +} EMRCREATEMONOBRUSH, *PEMRCREATEMONOBRUSH; + +typedef struct tagEMRCREATEDIBPATTERNBRUSHPT +{ + EMR emr; + DWORD ihBrush; + DWORD iUsage; + DWORD offBmi; + DWORD cbBmi; + + + DWORD offBits; + DWORD cbBits; +} EMRCREATEDIBPATTERNBRUSHPT, *PEMRCREATEDIBPATTERNBRUSHPT; + +typedef struct tagEMRFORMAT +{ + DWORD dSignature; + DWORD nVersion; + DWORD cbData; + DWORD offData; + +} EMRFORMAT, *PEMRFORMAT; + +typedef struct tagEMRGLSRECORD +{ + EMR emr; + DWORD cbData; + BYTE Data[1]; +} EMRGLSRECORD, *PEMRGLSRECORD; + +typedef struct tagEMRGLSBOUNDEDRECORD +{ + EMR emr; + RECTL rclBounds; + DWORD cbData; + BYTE Data[1]; +} EMRGLSBOUNDEDRECORD, *PEMRGLSBOUNDEDRECORD; + +typedef struct tagEMRPIXELFORMAT +{ + EMR emr; + PIXELFORMATDESCRIPTOR pfd; +} EMRPIXELFORMAT, *PEMRPIXELFORMAT; + + + +typedef struct tagEMRSETICMPROFILE +{ + EMR emr; + DWORD dwFlags; + DWORD cbName; + DWORD cbData; + BYTE Data[1]; +} EMRSETICMPROFILE, *PEMRSETICMPROFILE; + + + + + + + + +#line 4593 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + +__declspec(dllimport) BOOL __stdcall wglCopyContext(HGLRC, HGLRC, UINT); +__declspec(dllimport) HGLRC __stdcall wglCreateContext(HDC); +__declspec(dllimport) HGLRC __stdcall wglCreateLayerContext(HDC, int); +__declspec(dllimport) BOOL __stdcall wglDeleteContext(HGLRC); +__declspec(dllimport) HGLRC __stdcall wglGetCurrentContext(void); +__declspec(dllimport) HDC __stdcall wglGetCurrentDC(void); +__declspec(dllimport) PROC __stdcall wglGetProcAddress(LPCSTR); +__declspec(dllimport) BOOL __stdcall wglMakeCurrent(HDC, HGLRC); +__declspec(dllimport) BOOL __stdcall wglShareLists(HGLRC, HGLRC); +__declspec(dllimport) BOOL __stdcall wglUseFontBitmapsA(HDC, DWORD, DWORD, DWORD); +__declspec(dllimport) BOOL __stdcall wglUseFontBitmapsW(HDC, DWORD, DWORD, DWORD); + + + + +#line 4613 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" +__declspec(dllimport) BOOL __stdcall SwapBuffers(HDC); + +typedef struct _POINTFLOAT { + FLOAT x; + FLOAT y; +} POINTFLOAT, *PPOINTFLOAT; + +typedef struct _GLYPHMETRICSFLOAT { + FLOAT gmfBlackBoxX; + FLOAT gmfBlackBoxY; + POINTFLOAT gmfptGlyphOrigin; + FLOAT gmfCellIncX; + FLOAT gmfCellIncY; +} GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT; + + + +__declspec(dllimport) BOOL __stdcall wglUseFontOutlinesA(HDC, DWORD, DWORD, DWORD, FLOAT, + FLOAT, int, LPGLYPHMETRICSFLOAT); +__declspec(dllimport) BOOL __stdcall wglUseFontOutlinesW(HDC, DWORD, DWORD, DWORD, FLOAT, + FLOAT, int, LPGLYPHMETRICSFLOAT); + + + + +#line 4639 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + +typedef struct tagLAYERPLANEDESCRIPTOR { + WORD nSize; + WORD nVersion; + DWORD dwFlags; + BYTE iPixelType; + BYTE cColorBits; + BYTE cRedBits; + BYTE cRedShift; + BYTE cGreenBits; + BYTE cGreenShift; + BYTE cBlueBits; + BYTE cBlueShift; + BYTE cAlphaBits; + BYTE cAlphaShift; + BYTE cAccumBits; + BYTE cAccumRedBits; + BYTE cAccumGreenBits; + BYTE cAccumBlueBits; + BYTE cAccumAlphaBits; + BYTE cDepthBits; + BYTE cStencilBits; + BYTE cAuxBuffers; + BYTE iLayerPlane; + BYTE bReserved; + COLORREF crTransparent; +} LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) BOOL __stdcall wglDescribeLayerPlane(HDC, int, int, UINT, + LPLAYERPLANEDESCRIPTOR); +__declspec(dllimport) int __stdcall wglSetLayerPaletteEntries(HDC, int, int, int, + const COLORREF *); +__declspec(dllimport) int __stdcall wglGetLayerPaletteEntries(HDC, int, int, int, + COLORREF *); +__declspec(dllimport) BOOL __stdcall wglRealizeLayerPalette(HDC, int, BOOL); +__declspec(dllimport) BOOL __stdcall wglSwapLayerBuffers(HDC, UINT); + + + + + + + + + + + + + +#line 4738 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +#line 4740 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + + + + + + +#line 4747 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wingdi.h" + +#line 166 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + +#line 22 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + +typedef HANDLE HDWP; +typedef void MENUTEMPLATEA; +typedef void MENUTEMPLATEW; + + + +typedef MENUTEMPLATEA MENUTEMPLATE; +#line 47 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +typedef PVOID LPMENUTEMPLATEA; +typedef PVOID LPMENUTEMPLATEW; + + + +typedef LPMENUTEMPLATEA LPMENUTEMPLATE; +#line 54 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +typedef LRESULT (__stdcall* WNDPROC)(HWND, UINT, WPARAM, LPARAM); + + + +typedef BOOL (__stdcall* DLGPROC)(HWND, UINT, WPARAM, LPARAM); +typedef void (__stdcall* TIMERPROC)(HWND, UINT, UINT, DWORD); +typedef BOOL (__stdcall* GRAYSTRINGPROC)(HDC, LPARAM, int); +typedef BOOL (__stdcall* WNDENUMPROC)(HWND, LPARAM); +typedef LRESULT (__stdcall* HOOKPROC)(int code, WPARAM wParam, LPARAM lParam); +typedef void (__stdcall* SENDASYNCPROC)(HWND, UINT, DWORD, LRESULT); + +typedef BOOL (__stdcall* PROPENUMPROCA)(HWND, LPCSTR, HANDLE); +typedef BOOL (__stdcall* PROPENUMPROCW)(HWND, LPCWSTR, HANDLE); + +typedef BOOL (__stdcall* PROPENUMPROCEXA)(HWND, LPSTR, HANDLE, DWORD); +typedef BOOL (__stdcall* PROPENUMPROCEXW)(HWND, LPWSTR, HANDLE, DWORD); + +typedef int (__stdcall* EDITWORDBREAKPROCA)(LPSTR lpch, int ichCurrent, int cch, int code); +typedef int (__stdcall* EDITWORDBREAKPROCW)(LPWSTR lpch, int ichCurrent, int cch, int code); + + +typedef BOOL (__stdcall* DRAWSTATEPROC)(HDC hdc, LPARAM lData, WPARAM wData, int cx, int cy); +#line 78 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + +#line 100 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + +typedef PROPENUMPROCA PROPENUMPROC; +typedef PROPENUMPROCEXA PROPENUMPROCEX; +typedef EDITWORDBREAKPROCA EDITWORDBREAKPROC; +#line 110 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +typedef BOOL (__stdcall* NAMEENUMPROCA)(LPSTR, LPARAM); +typedef BOOL (__stdcall* NAMEENUMPROCW)(LPWSTR, LPARAM); + +typedef NAMEENUMPROCA WINSTAENUMPROCA; +typedef NAMEENUMPROCA DESKTOPENUMPROCA; +typedef NAMEENUMPROCW WINSTAENUMPROCW; +typedef NAMEENUMPROCW DESKTOPENUMPROCW; + + + + + + + + + + + + +#line 133 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + +typedef WINSTAENUMPROCA WINSTAENUMPROC; +typedef DESKTOPENUMPROCA DESKTOPENUMPROC; + +#line 144 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + +#line 152 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 181 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +#line 184 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +wvsprintfA( + LPSTR, + LPCSTR, + va_list arglist); +__declspec(dllimport) +int +__stdcall +wvsprintfW( + LPWSTR, + LPCWSTR, + va_list arglist); + + + + +#line 204 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) int __cdecl wsprintfA(LPSTR, LPCSTR, ...); +__declspec(dllimport) int __cdecl wsprintfW(LPWSTR, LPCWSTR, ...); + + + + +#line 212 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 243 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 287 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + +#line 303 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 436 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + +#line 450 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + +#line 473 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +#line 478 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +#line 483 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 485 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +#line 488 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagCBT_CREATEWNDA +{ + struct tagCREATESTRUCTA *lpcs; + HWND hwndInsertAfter; +} CBT_CREATEWNDA, *LPCBT_CREATEWNDA; + + + +typedef struct tagCBT_CREATEWNDW +{ + struct tagCREATESTRUCTW *lpcs; + HWND hwndInsertAfter; +} CBT_CREATEWNDW, *LPCBT_CREATEWNDW; + + + + +typedef CBT_CREATEWNDA CBT_CREATEWND; +typedef LPCBT_CREATEWNDA LPCBT_CREATEWND; +#line 540 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +typedef struct tagCBTACTIVATESTRUCT +{ + BOOL fMouse; + HWND hWndActive; +} CBTACTIVATESTRUCT, *LPCBTACTIVATESTRUCT; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 580 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 581 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +typedef struct tagEVENTMSG { + UINT message; + UINT paramL; + UINT paramH; + DWORD time; + HWND hwnd; +} EVENTMSG, *PEVENTMSGMSG, *NPEVENTMSGMSG, *LPEVENTMSGMSG; + +typedef struct tagEVENTMSG *PEVENTMSG, *NPEVENTMSG, *LPEVENTMSG; + + + + +typedef struct tagCWPSTRUCT { + LPARAM lParam; + WPARAM wParam; + UINT message; + HWND hwnd; +} CWPSTRUCT, *PCWPSTRUCT, *NPCWPSTRUCT, *LPCWPSTRUCT; + + + + + +typedef struct tagCWPRETSTRUCT { + LRESULT lResult; + LPARAM lParam; + WPARAM wParam; + UINT message; + HWND hwnd; +} CWPRETSTRUCT, *PCWPRETSTRUCT, *NPCWPRETSTRUCT, *LPCWPRETSTRUCT; + +#line 619 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 654 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +typedef struct tagDEBUGHOOKINFO +{ + DWORD idThread; + DWORD idThreadInstaller; + LPARAM lParam; + WPARAM wParam; + int code; +} DEBUGHOOKINFO, *PDEBUGHOOKINFO, *NPDEBUGHOOKINFO, * LPDEBUGHOOKINFO; + + + + +typedef struct tagMOUSEHOOKSTRUCT { + POINT pt; + HWND hwnd; + UINT wHitTestCode; + DWORD dwExtraInfo; +} MOUSEHOOKSTRUCT, *LPMOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT; + + + + +typedef struct tagHARDWAREHOOKSTRUCT { + HWND hwnd; + UINT message; + WPARAM wParam; + LPARAM lParam; +} HARDWAREHOOKSTRUCT, *LPHARDWAREHOOKSTRUCT, *PHARDWAREHOOKSTRUCT; +#line 687 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 688 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + +#line 704 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +__declspec(dllimport) +HKL +__stdcall +LoadKeyboardLayoutA( + LPCSTR pwszKLID, + UINT Flags); +__declspec(dllimport) +HKL +__stdcall +LoadKeyboardLayoutW( + LPCWSTR pwszKLID, + UINT Flags); + + + + +#line 729 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +__declspec(dllimport) +HKL +__stdcall +ActivateKeyboardLayout( + HKL hkl, + UINT Flags); + + + + + + + +#line 746 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +int +__stdcall +ToUnicodeEx( + UINT wVirtKey, + UINT wScanCode, + PBYTE lpKeyState, + LPWSTR pwszBuff, + int cchBuff, + UINT wFlags, + HKL dwhkl); +#line 760 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +UnloadKeyboardLayout( + HKL hkl); + +__declspec(dllimport) +BOOL +__stdcall +GetKeyboardLayoutNameA( + LPSTR pwszKLID); +__declspec(dllimport) +BOOL +__stdcall +GetKeyboardLayoutNameW( + LPWSTR pwszKLID); + + + + +#line 782 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +int +__stdcall +GetKeyboardLayoutList( + int nBuff, + HKL *lpList); + +__declspec(dllimport) +HKL +__stdcall +GetKeyboardLayout( + DWORD dwLayout +); +#line 798 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + +#line 824 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +HDESK +__stdcall +CreateDesktopA( + LPSTR lpszDesktop, + LPSTR lpszDevice, + LPDEVMODEA pDevmode, + DWORD dwFlags, + ACCESS_MASK dwDesiredAccess, + LPSECURITY_ATTRIBUTES lpsa); +__declspec(dllimport) +HDESK +__stdcall +CreateDesktopW( + LPWSTR lpszDesktop, + LPWSTR lpszDevice, + LPDEVMODEW pDevmode, + DWORD dwFlags, + ACCESS_MASK dwDesiredAccess, + LPSECURITY_ATTRIBUTES lpsa); + + + + +#line 872 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 874 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 875 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HDESK +__stdcall +OpenDesktopA( + LPSTR lpszDesktop, + DWORD dwFlags, + BOOL fInherit, + ACCESS_MASK dwDesiredAccess); +__declspec(dllimport) +HDESK +__stdcall +OpenDesktopW( + LPWSTR lpszDesktop, + DWORD dwFlags, + BOOL fInherit, + ACCESS_MASK dwDesiredAccess); + + + + +#line 897 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HDESK +__stdcall +OpenInputDesktop( + DWORD dwFlags, + BOOL fInherit, + ACCESS_MASK dwDesiredAccess); + +__declspec(dllimport) +BOOL +__stdcall +EnumDesktopsA( + HWINSTA hwinsta, + DESKTOPENUMPROCA lpEnumFunc, + LPARAM lParam); +__declspec(dllimport) +BOOL +__stdcall +EnumDesktopsW( + HWINSTA hwinsta, + DESKTOPENUMPROCW lpEnumFunc, + LPARAM lParam); + + + + +#line 925 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +EnumDesktopWindows( + HDESK hDesktop, + WNDENUMPROC lpfn, + LPARAM lParam); + +__declspec(dllimport) +BOOL +__stdcall +SwitchDesktop( + HDESK hDesktop); + +__declspec(dllimport) +BOOL +__stdcall +SetThreadDesktop( + HDESK hDesktop); + +__declspec(dllimport) +BOOL +__stdcall +CloseDesktop( + HDESK hDesktop); + +__declspec(dllimport) +HDESK +__stdcall +GetThreadDesktop( + DWORD dwThreadId); +#line 958 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +HWINSTA +__stdcall +CreateWindowStationA( + LPSTR lpwinsta, + DWORD dwReserved, + ACCESS_MASK dwDesiredAccess, + LPSECURITY_ATTRIBUTES lpsa); +__declspec(dllimport) +HWINSTA +__stdcall +CreateWindowStationW( + LPWSTR lpwinsta, + DWORD dwReserved, + ACCESS_MASK dwDesiredAccess, + LPSECURITY_ATTRIBUTES lpsa); + + + + +#line 1000 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HWINSTA +__stdcall +OpenWindowStationA( + LPSTR lpszWinSta, + BOOL fInherit, + ACCESS_MASK dwDesiredAccess); +__declspec(dllimport) +HWINSTA +__stdcall +OpenWindowStationW( + LPWSTR lpszWinSta, + BOOL fInherit, + ACCESS_MASK dwDesiredAccess); + + + + +#line 1020 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +EnumWindowStationsA( + WINSTAENUMPROCA lpEnumFunc, + LPARAM lParam); +__declspec(dllimport) +BOOL +__stdcall +EnumWindowStationsW( + WINSTAENUMPROCW lpEnumFunc, + LPARAM lParam); + + + + +#line 1038 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +BOOL +__stdcall +CloseWindowStation( + HWINSTA hWinSta); + +__declspec(dllimport) +BOOL +__stdcall +SetProcessWindowStation( + HWINSTA hWinSta); + +__declspec(dllimport) +HWINSTA +__stdcall +GetProcessWindowStation( + void); +#line 1058 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +__declspec(dllimport) +BOOL +__stdcall +SetUserObjectSecurity( + HANDLE hObj, + PSECURITY_INFORMATION pSIRequested, + PSECURITY_DESCRIPTOR pSID); + +__declspec(dllimport) +BOOL +__stdcall +GetUserObjectSecurity( + HANDLE hObj, + PSECURITY_INFORMATION pSIRequested, + PSECURITY_DESCRIPTOR pSID, + DWORD nLength, + LPDWORD lpnLengthNeeded); + + + + + + +typedef struct tagUSEROBJECTFLAGS { + BOOL fInherit; + BOOL fReserved; + DWORD dwFlags; +} USEROBJECTFLAGS, *PUSEROBJECTFLAGS; + +__declspec(dllimport) +BOOL +__stdcall +GetUserObjectInformationA( + HANDLE hObj, + int nIndex, + PVOID pvInfo, + DWORD nLength, + LPDWORD lpnLengthNeeded); +__declspec(dllimport) +BOOL +__stdcall +GetUserObjectInformationW( + HANDLE hObj, + int nIndex, + PVOID pvInfo, + DWORD nLength, + LPDWORD lpnLengthNeeded); + + + + +#line 1113 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +SetUserObjectInformationA( + HANDLE hObj, + int nIndex, + PVOID pvInfo, + DWORD nLength); +__declspec(dllimport) +BOOL +__stdcall +SetUserObjectInformationW( + HANDLE hObj, + int nIndex, + PVOID pvInfo, + DWORD nLength); + + + + +#line 1135 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 1137 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +typedef struct tagWNDCLASSEXA { + UINT cbSize; + + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HINSTANCE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCSTR lpszMenuName; + LPCSTR lpszClassName; + + HICON hIconSm; +} WNDCLASSEXA, *PWNDCLASSEXA, *NPWNDCLASSEXA, *LPWNDCLASSEXA; +typedef struct tagWNDCLASSEXW { + UINT cbSize; + + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HINSTANCE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCWSTR lpszMenuName; + LPCWSTR lpszClassName; + + HICON hIconSm; +} WNDCLASSEXW, *PWNDCLASSEXW, *NPWNDCLASSEXW, *LPWNDCLASSEXW; + + + + + + +typedef WNDCLASSEXA WNDCLASSEX; +typedef PWNDCLASSEXA PWNDCLASSEX; +typedef NPWNDCLASSEXA NPWNDCLASSEX; +typedef LPWNDCLASSEXA LPWNDCLASSEX; +#line 1182 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 1183 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +typedef struct tagWNDCLASSA { + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HINSTANCE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCSTR lpszMenuName; + LPCSTR lpszClassName; +} WNDCLASSA, *PWNDCLASSA, *NPWNDCLASSA, *LPWNDCLASSA; +typedef struct tagWNDCLASSW { + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HINSTANCE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCWSTR lpszMenuName; + LPCWSTR lpszClassName; +} WNDCLASSW, *PWNDCLASSW, *NPWNDCLASSW, *LPWNDCLASSW; + + + + + + +typedef WNDCLASSA WNDCLASS; +typedef PWNDCLASSA PWNDCLASS; +typedef NPWNDCLASSA NPWNDCLASS; +typedef LPWNDCLASSA LPWNDCLASS; +#line 1219 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + +typedef struct tagMSG { + HWND hwnd; + UINT message; + WPARAM wParam; + LPARAM lParam; + DWORD time; + POINT pt; + + + +} MSG, *PMSG, *NPMSG, *LPMSG; + + + + + + + + + + + +#line 1249 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1280 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 1282 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1325 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + +typedef struct tagMINMAXINFO { + POINT ptReserved; + POINT ptMaxSize; + POINT ptMaxPosition; + POINT ptMinTrackSize; + POINT ptMaxTrackSize; +} MINMAXINFO, *PMINMAXINFO, *LPMINMAXINFO; + + + + + + + + + + + + + + + + + + + +#line 1369 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagCOPYDATASTRUCT { + DWORD dwData; + DWORD cbData; + PVOID lpData; +} COPYDATASTRUCT, *PCOPYDATASTRUCT; + + + + + + + + + + + + + + + + + + + + + + + +#line 1421 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1458 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + +#line 1477 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1504 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 1506 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +#line 1510 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +#line 1513 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + +typedef struct tagMDINEXTMENU +{ + HMENU hmenuIn; + HMENU hmenuNext; + HWND hwndNext; +} MDINEXTMENU, * PMDINEXTMENU, * LPMDINEXTMENU; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1563 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1591 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +#line 1594 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +#line 1598 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +#line 1604 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1635 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + +#line 1643 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + +#line 1664 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1701 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + +#line 1711 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 1713 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + +__declspec(dllimport) +UINT +__stdcall +RegisterWindowMessageA( + LPCSTR lpString); +__declspec(dllimport) +UINT +__stdcall +RegisterWindowMessageW( + LPCWSTR lpString); + + + + +#line 1745 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagWINDOWPOS { + HWND hwnd; + HWND hwndInsertAfter; + int x; + int y; + int cx; + int cy; + UINT flags; +} WINDOWPOS, *LPWINDOWPOS, *PWINDOWPOS; + + + + +typedef struct tagNCCALCSIZE_PARAMS { + RECT rgrc[3]; + PWINDOWPOS lppos; +} NCCALCSIZE_PARAMS, *LPNCCALCSIZE_PARAMS; + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1815 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1845 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +#line 1849 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1932 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + +#line 1955 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +DrawEdge(HDC hdc, LPRECT qrc, UINT edge, UINT grfFlags); + + + + + + + + + +#line 2021 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2055 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +__declspec(dllimport) +BOOL +__stdcall +DrawFrameControl(HDC, LPRECT, UINT, UINT); + + + + + + + + + + +#line 2075 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +DrawCaption(HWND, HDC, const RECT *, UINT); + + + + + + +__declspec(dllimport) +BOOL +__stdcall +DrawAnimatedRects(HWND hwnd, int idAni, const RECT * lprcFrom, const RECT * lprcTo); + +#line 2092 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2119 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + +#line 2141 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + +typedef struct tagACCEL { + + BYTE fVirt; + WORD key; + WORD cmd; + + + + +#line 2161 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +} ACCEL, *LPACCEL; + +typedef struct tagPAINTSTRUCT { + HDC hdc; + BOOL fErase; + RECT rcPaint; + BOOL fRestore; + BOOL fIncUpdate; + BYTE rgbReserved[32]; +} PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, *LPPAINTSTRUCT; + +typedef struct tagCREATESTRUCTA { + LPVOID lpCreateParams; + HINSTANCE hInstance; + HMENU hMenu; + HWND hwndParent; + int cy; + int cx; + int y; + int x; + LONG style; + LPCSTR lpszName; + LPCSTR lpszClass; + DWORD dwExStyle; +} CREATESTRUCTA, *LPCREATESTRUCTA; +typedef struct tagCREATESTRUCTW { + LPVOID lpCreateParams; + HINSTANCE hInstance; + HMENU hMenu; + HWND hwndParent; + int cy; + int cx; + int y; + int x; + LONG style; + LPCWSTR lpszName; + LPCWSTR lpszClass; + DWORD dwExStyle; +} CREATESTRUCTW, *LPCREATESTRUCTW; + + + + +typedef CREATESTRUCTA CREATESTRUCT; +typedef LPCREATESTRUCTA LPCREATESTRUCT; +#line 2207 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +typedef struct tagWINDOWPLACEMENT { + UINT length; + UINT flags; + UINT showCmd; + POINT ptMinPosition; + POINT ptMaxPosition; + RECT rcNormalPosition; + + + +} WINDOWPLACEMENT; +typedef WINDOWPLACEMENT *PWINDOWPLACEMENT, *LPWINDOWPLACEMENT; + + + + +typedef struct tagNMHDR +{ + HWND hwndFrom; + UINT idFrom; + UINT code; +} NMHDR; +typedef NMHDR * LPNMHDR; + +typedef struct tagSTYLESTRUCT +{ + DWORD styleOld; + DWORD styleNew; +} STYLESTRUCT, * LPSTYLESTRUCT; +#line 2238 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + +#line 2250 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + +#line 2270 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +#line 2274 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +typedef struct tagMEASUREITEMSTRUCT { + UINT CtlType; + UINT CtlID; + UINT itemID; + UINT itemWidth; + UINT itemHeight; + DWORD itemData; +} MEASUREITEMSTRUCT, *PMEASUREITEMSTRUCT, *LPMEASUREITEMSTRUCT; + + + + + +typedef struct tagDRAWITEMSTRUCT { + UINT CtlType; + UINT CtlID; + UINT itemID; + UINT itemAction; + UINT itemState; + HWND hwndItem; + HDC hDC; + RECT rcItem; + DWORD itemData; +} DRAWITEMSTRUCT, *PDRAWITEMSTRUCT, *LPDRAWITEMSTRUCT; + + + + +typedef struct tagDELETEITEMSTRUCT { + UINT CtlType; + UINT CtlID; + UINT itemID; + HWND hwndItem; + UINT itemData; +} DELETEITEMSTRUCT, *PDELETEITEMSTRUCT, *LPDELETEITEMSTRUCT; + + + + +typedef struct tagCOMPAREITEMSTRUCT { + UINT CtlType; + UINT CtlID; + HWND hwndItem; + UINT itemID1; + DWORD itemData1; + UINT itemID2; + DWORD itemData2; + DWORD dwLocaleId; +} COMPAREITEMSTRUCT, *PCOMPAREITEMSTRUCT, *LPCOMPAREITEMSTRUCT; + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +GetMessageA( + LPMSG lpMsg, + HWND hWnd , + UINT wMsgFilterMin, + UINT wMsgFilterMax); +__declspec(dllimport) +BOOL +__stdcall +GetMessageW( + LPMSG lpMsg, + HWND hWnd , + UINT wMsgFilterMin, + UINT wMsgFilterMax); + + + + +#line 2355 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +TranslateMessage( + const MSG *lpMsg); + +__declspec(dllimport) +LONG +__stdcall +DispatchMessageA( + const MSG *lpMsg); +__declspec(dllimport) +LONG +__stdcall +DispatchMessageW( + const MSG *lpMsg); + + + + +#line 2377 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +BOOL +__stdcall +SetMessageQueue( + int cMessagesMax); + +__declspec(dllimport) +BOOL +__stdcall +PeekMessageA( + LPMSG lpMsg, + HWND hWnd , + UINT wMsgFilterMin, + UINT wMsgFilterMax, + UINT wRemoveMsg); +__declspec(dllimport) +BOOL +__stdcall +PeekMessageW( + LPMSG lpMsg, + HWND hWnd , + UINT wMsgFilterMin, + UINT wMsgFilterMax, + UINT wRemoveMsg); + + + + +#line 2408 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +#line 2417 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +RegisterHotKey( + HWND hWnd , + int id, + UINT fsModifiers, + UINT vk); + +__declspec(dllimport) +BOOL +__stdcall +UnregisterHotKey( + HWND hWnd, + int id); + + + + + + + + + + + + + + + + + + + + + + +#line 2456 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +#line 2465 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +__declspec(dllimport) +BOOL +__stdcall +ExitWindowsEx( + UINT uFlags, + DWORD dwReserved); + +__declspec(dllimport) +BOOL +__stdcall +SwapMouseButton( + BOOL fSwap); + +__declspec(dllimport) +DWORD +__stdcall +GetMessagePos( + void); + +__declspec(dllimport) +LONG +__stdcall +GetMessageTime( + void); + +__declspec(dllimport) +LONG +__stdcall +GetMessageExtraInfo( + void); + + +__declspec(dllimport) +LPARAM +__stdcall +SetMessageExtraInfo( + LPARAM lParam); +#line 2507 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +LRESULT +__stdcall +SendMessageA( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam); +__declspec(dllimport) +LRESULT +__stdcall +SendMessageW( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam); + + + + +#line 2529 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +LRESULT +__stdcall +SendMessageTimeoutA( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam, + UINT fuFlags, + UINT uTimeout, + LPDWORD lpdwResult); +__declspec(dllimport) +LRESULT +__stdcall +SendMessageTimeoutW( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam, + UINT fuFlags, + UINT uTimeout, + LPDWORD lpdwResult); + + + + +#line 2557 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +SendNotifyMessageA( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam); +__declspec(dllimport) +BOOL +__stdcall +SendNotifyMessageW( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam); + + + + +#line 2579 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +SendMessageCallbackA( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam, + SENDASYNCPROC lpResultCallBack, + DWORD dwData); +__declspec(dllimport) +BOOL +__stdcall +SendMessageCallbackW( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam, + SENDASYNCPROC lpResultCallBack, + DWORD dwData); + + + + +#line 2605 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + +#line 2617 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +#line 2620 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + +#line 2640 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2678 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +BOOL +__stdcall +PostMessageA( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam); +__declspec(dllimport) +BOOL +__stdcall +PostMessageW( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam); + + + + +#line 2701 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +PostThreadMessageA( + DWORD idThread, + UINT Msg, + WPARAM wParam, + LPARAM lParam); +__declspec(dllimport) +BOOL +__stdcall +PostThreadMessageW( + DWORD idThread, + UINT Msg, + WPARAM wParam, + LPARAM lParam); + + + + +#line 2723 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + +#line 2733 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +#line 2742 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +AttachThreadInput( + DWORD idAttach, + DWORD idAttachTo, + BOOL fAttach); + + +__declspec(dllimport) +BOOL +__stdcall +ReplyMessage( + LRESULT lResult); + +__declspec(dllimport) +BOOL +__stdcall +WaitMessage( + void); + +__declspec(dllimport) +DWORD +__stdcall +WaitForInputIdle( + HANDLE hProcess, + DWORD dwMilliseconds); + +__declspec(dllimport) + +LRESULT +__stdcall + + + +#line 2779 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +DefWindowProcA( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam); +__declspec(dllimport) + +LRESULT +__stdcall + + + +#line 2792 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +DefWindowProcW( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam); + + + + +#line 2802 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +void +__stdcall +PostQuitMessage( + int nExitCode); + + + +__declspec(dllimport) +LRESULT +__stdcall +CallWindowProcA( + WNDPROC lpPrevWndFunc, + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam); +__declspec(dllimport) +LRESULT +__stdcall +CallWindowProcW( + WNDPROC lpPrevWndFunc, + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam); + + + + +#line 2834 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2862 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +InSendMessage( + void); + + + + + + + + + + + + + + + + +#line 2885 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +UINT +__stdcall +GetDoubleClickTime( + void); + +__declspec(dllimport) +BOOL +__stdcall +SetDoubleClickTime( + UINT); + +__declspec(dllimport) +ATOM +__stdcall +RegisterClassA( + const WNDCLASSA *lpWndClass); +__declspec(dllimport) +ATOM +__stdcall +RegisterClassW( + const WNDCLASSW *lpWndClass); + + + + +#line 2913 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +UnregisterClassA( + LPCSTR lpClassName, + HINSTANCE hInstance); +__declspec(dllimport) +BOOL +__stdcall +UnregisterClassW( + LPCWSTR lpClassName, + HINSTANCE hInstance); + + + + +#line 2931 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +GetClassInfoA( + HINSTANCE hInstance , + LPCSTR lpClassName, + LPWNDCLASSA lpWndClass); +__declspec(dllimport) +BOOL +__stdcall +GetClassInfoW( + HINSTANCE hInstance , + LPCWSTR lpClassName, + LPWNDCLASSW lpWndClass); + + + + +#line 2951 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +ATOM +__stdcall +RegisterClassExA(const WNDCLASSEXA *); +__declspec(dllimport) +ATOM +__stdcall +RegisterClassExW(const WNDCLASSEXW *); + + + + +#line 2966 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +GetClassInfoExA(HINSTANCE, LPCSTR, LPWNDCLASSEXA); +__declspec(dllimport) +BOOL +__stdcall +GetClassInfoExW(HINSTANCE, LPCWSTR, LPWNDCLASSEXW); + + + + +#line 2980 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 2982 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +__declspec(dllimport) +HWND +__stdcall +CreateWindowExA( + DWORD dwExStyle, + LPCSTR lpClassName, + LPCSTR lpWindowName, + DWORD dwStyle, + int X, + int Y, + int nWidth, + int nHeight, + HWND hWndParent , + HMENU hMenu, + HINSTANCE hInstance, + LPVOID lpParam); +__declspec(dllimport) +HWND +__stdcall +CreateWindowExW( + DWORD dwExStyle, + LPCWSTR lpClassName, + LPCWSTR lpWindowName, + DWORD dwStyle, + int X, + int Y, + int nWidth, + int nHeight, + HWND hWndParent , + HMENU hMenu, + HINSTANCE hInstance, + LPVOID lpParam); + + + + +#line 3027 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + +#line 3041 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +IsWindow( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +IsMenu( + HMENU hMenu); + +__declspec(dllimport) +BOOL +__stdcall +IsChild( + HWND hWndParent, + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +DestroyWindow( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +ShowWindow( + HWND hWnd, + int nCmdShow); + + + + + + + + + +#line 3083 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +BOOL +__stdcall +ShowWindowAsync( + HWND hWnd, + int nCmdShow); +#line 3092 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +FlashWindow( + HWND hWnd, + + +#line 3101 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + BOOL bInvert); +#line 3103 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +#line 3112 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +ShowOwnedPopups( + HWND hWnd, + BOOL fShow); + +__declspec(dllimport) +BOOL +__stdcall +OpenIcon( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +CloseWindow( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +MoveWindow( + HWND hWnd, + int X, + int Y, + int nWidth, + int nHeight, + BOOL bRepaint); + +__declspec(dllimport) +BOOL +__stdcall +SetWindowPos( + HWND hWnd, + HWND hWndInsertAfter , + int X, + int Y, + int cx, + int cy, + UINT uFlags); + +__declspec(dllimport) +BOOL +__stdcall +GetWindowPlacement( + HWND hWnd, + WINDOWPLACEMENT *lpwndpl); + +__declspec(dllimport) +BOOL +__stdcall +SetWindowPlacement( + HWND hWnd, + const WINDOWPLACEMENT *lpwndpl); + + + + +__declspec(dllimport) +HDWP +__stdcall +BeginDeferWindowPos( + int nNumWindows); + +__declspec(dllimport) +HDWP +__stdcall +DeferWindowPos( + HDWP hWinPosInfo, + HWND hWnd, + HWND hWndInsertAfter , + int x, + int y, + int cx, + int cy, + UINT uFlags); + +__declspec(dllimport) +BOOL +__stdcall +EndDeferWindowPos( + HDWP hWinPosInfo); + +#line 3198 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +IsWindowVisible( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +IsIconic( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +AnyPopup( + void); + +__declspec(dllimport) +BOOL +__stdcall +BringWindowToTop( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +IsZoomed( + HWND hWnd); + + + + + + + + + + + + + + + + + + + + + + +#line 3251 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#pragma pack(2) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack2.h" +#line 3266 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +typedef struct { + DWORD style; + DWORD dwExtendedStyle; + WORD cdit; + short x; + short y; + short cx; + short cy; +} DLGTEMPLATE; +typedef DLGTEMPLATE *LPDLGTEMPLATEA; +typedef DLGTEMPLATE *LPDLGTEMPLATEW; + + + +typedef LPDLGTEMPLATEA LPDLGTEMPLATE; +#line 3286 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +typedef const DLGTEMPLATE *LPCDLGTEMPLATEA; +typedef const DLGTEMPLATE *LPCDLGTEMPLATEW; + + + +typedef LPCDLGTEMPLATEA LPCDLGTEMPLATE; +#line 3293 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +typedef struct { + DWORD style; + DWORD dwExtendedStyle; + short x; + short y; + short cx; + short cy; + WORD id; +} DLGITEMTEMPLATE; +typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEA; +typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEW; + + + +typedef PDLGITEMTEMPLATEA PDLGITEMTEMPLATE; +#line 3313 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEA; +typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEW; + + + +typedef LPDLGITEMTEMPLATEA LPDLGITEMTEMPLATE; +#line 3320 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 3323 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HWND +__stdcall +CreateDialogParamA( + HINSTANCE hInstance, + LPCSTR lpTemplateName, + HWND hWndParent , + DLGPROC lpDialogFunc, + LPARAM dwInitParam); +__declspec(dllimport) +HWND +__stdcall +CreateDialogParamW( + HINSTANCE hInstance, + LPCWSTR lpTemplateName, + HWND hWndParent , + DLGPROC lpDialogFunc, + LPARAM dwInitParam); + + + + +#line 3347 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HWND +__stdcall +CreateDialogIndirectParamA( + HINSTANCE hInstance, + LPCDLGTEMPLATEA lpTemplate, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam); +__declspec(dllimport) +HWND +__stdcall +CreateDialogIndirectParamW( + HINSTANCE hInstance, + LPCDLGTEMPLATEW lpTemplate, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam); + + + + +#line 3371 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + +#line 3381 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + +#line 3391 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +DialogBoxParamA( + HINSTANCE hInstance, + LPCSTR lpTemplateName, + HWND hWndParent , + DLGPROC lpDialogFunc, + LPARAM dwInitParam); +__declspec(dllimport) +int +__stdcall +DialogBoxParamW( + HINSTANCE hInstance, + LPCWSTR lpTemplateName, + HWND hWndParent , + DLGPROC lpDialogFunc, + LPARAM dwInitParam); + + + + +#line 3415 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +DialogBoxIndirectParamA( + HINSTANCE hInstance, + LPCDLGTEMPLATEA hDialogTemplate, + HWND hWndParent , + DLGPROC lpDialogFunc, + LPARAM dwInitParam); +__declspec(dllimport) +int +__stdcall +DialogBoxIndirectParamW( + HINSTANCE hInstance, + LPCDLGTEMPLATEW hDialogTemplate, + HWND hWndParent , + DLGPROC lpDialogFunc, + LPARAM dwInitParam); + + + + +#line 3439 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + +#line 3449 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + +#line 3459 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +EndDialog( + HWND hDlg, + int nResult); + +__declspec(dllimport) +HWND +__stdcall +GetDlgItem( + HWND hDlg, + int nIDDlgItem); + +__declspec(dllimport) +BOOL +__stdcall +SetDlgItemInt( + HWND hDlg, + int nIDDlgItem, + UINT uValue, + BOOL bSigned); + +__declspec(dllimport) +UINT +__stdcall +GetDlgItemInt( + HWND hDlg, + int nIDDlgItem, + BOOL *lpTranslated, + BOOL bSigned); + +__declspec(dllimport) +BOOL +__stdcall +SetDlgItemTextA( + HWND hDlg, + int nIDDlgItem, + LPCSTR lpString); +__declspec(dllimport) +BOOL +__stdcall +SetDlgItemTextW( + HWND hDlg, + int nIDDlgItem, + LPCWSTR lpString); + + + + +#line 3511 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +UINT +__stdcall +GetDlgItemTextA( + HWND hDlg, + int nIDDlgItem, + LPSTR lpString, + int nMaxCount); +__declspec(dllimport) +UINT +__stdcall +GetDlgItemTextW( + HWND hDlg, + int nIDDlgItem, + LPWSTR lpString, + int nMaxCount); + + + + +#line 3533 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +CheckDlgButton( + HWND hDlg, + int nIDButton, + UINT uCheck); + +__declspec(dllimport) +BOOL +__stdcall +CheckRadioButton( + HWND hDlg, + int nIDFirstButton, + int nIDLastButton, + int nIDCheckButton); + +__declspec(dllimport) +UINT +__stdcall +IsDlgButtonChecked( + HWND hDlg, + int nIDButton); + +__declspec(dllimport) +LONG +__stdcall +SendDlgItemMessageA( + HWND hDlg, + int nIDDlgItem, + UINT Msg, + WPARAM wParam, + LPARAM lParam); +__declspec(dllimport) +LONG +__stdcall +SendDlgItemMessageW( + HWND hDlg, + int nIDDlgItem, + UINT Msg, + WPARAM wParam, + LPARAM lParam); + + + + +#line 3581 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HWND +__stdcall +GetNextDlgGroupItem( + HWND hDlg, + HWND hCtl, + BOOL bPrevious); + +__declspec(dllimport) +HWND +__stdcall +GetNextDlgTabItem( + HWND hDlg, + HWND hCtl, + BOOL bPrevious); + +__declspec(dllimport) +int +__stdcall +GetDlgCtrlID( + HWND hWnd); + +__declspec(dllimport) +long +__stdcall +GetDialogBaseUnits(void); + +__declspec(dllimport) + +LRESULT +__stdcall + + + +#line 3617 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +DefDlgProcA( + HWND hDlg, + UINT Msg, + WPARAM wParam, + LPARAM lParam); +__declspec(dllimport) + +LRESULT +__stdcall + + + +#line 3630 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +DefDlgProcW( + HWND hDlg, + UINT Msg, + WPARAM wParam, + LPARAM lParam); + + + + +#line 3640 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +#line 3649 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 3651 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +__declspec(dllimport) +BOOL +__stdcall +CallMsgFilterA( + LPMSG lpMsg, + int nCode); +__declspec(dllimport) +BOOL +__stdcall +CallMsgFilterW( + LPMSG lpMsg, + int nCode); + + + + +#line 3671 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 3673 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +OpenClipboard( + HWND hWndNewOwner); + +__declspec(dllimport) +BOOL +__stdcall +CloseClipboard( + void); + + + + + + + + +#line 3700 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HWND +__stdcall +GetClipboardOwner( + void); + +__declspec(dllimport) +HWND +__stdcall +SetClipboardViewer( + HWND hWndNewViewer); + +__declspec(dllimport) +HWND +__stdcall +GetClipboardViewer( + void); + +__declspec(dllimport) +BOOL +__stdcall +ChangeClipboardChain( + HWND hWndRemove, + HWND hWndNewNext); + +__declspec(dllimport) +HANDLE +__stdcall +SetClipboardData( + UINT uFormat, + HANDLE hMem); + +__declspec(dllimport) +HANDLE +__stdcall + GetClipboardData( + UINT uFormat); + +__declspec(dllimport) +UINT +__stdcall +RegisterClipboardFormatA( + LPCSTR lpszFormat); +__declspec(dllimport) +UINT +__stdcall +RegisterClipboardFormatW( + LPCWSTR lpszFormat); + + + + +#line 3754 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +CountClipboardFormats( + void); + +__declspec(dllimport) +UINT +__stdcall +EnumClipboardFormats( + UINT format); + +__declspec(dllimport) +int +__stdcall +GetClipboardFormatNameA( + UINT format, + LPSTR lpszFormatName, + int cchMaxCount); +__declspec(dllimport) +int +__stdcall +GetClipboardFormatNameW( + UINT format, + LPWSTR lpszFormatName, + int cchMaxCount); + + + + +#line 3786 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +EmptyClipboard( + void); + +__declspec(dllimport) +BOOL +__stdcall +IsClipboardFormatAvailable( + UINT format); + +__declspec(dllimport) +int +__stdcall +GetPriorityClipboardFormat( + UINT *paFormatPriorityList, + int cFormats); + +__declspec(dllimport) +HWND +__stdcall +GetOpenClipboardWindow( + void); + +#line 3813 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +__declspec(dllimport) +BOOL +__stdcall +CharToOemA( + LPCSTR lpszSrc, + LPSTR lpszDst); +__declspec(dllimport) +BOOL +__stdcall +CharToOemW( + LPCWSTR lpszSrc, + LPSTR lpszDst); + + + + +#line 3835 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +OemToCharA( + LPCSTR lpszSrc, + LPSTR lpszDst); +__declspec(dllimport) +BOOL +__stdcall +OemToCharW( + LPCSTR lpszSrc, + LPWSTR lpszDst); + + + + +#line 3853 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +CharToOemBuffA( + LPCSTR lpszSrc, + LPSTR lpszDst, + DWORD cchDstLength); +__declspec(dllimport) +BOOL +__stdcall +CharToOemBuffW( + LPCWSTR lpszSrc, + LPSTR lpszDst, + DWORD cchDstLength); + + + + +#line 3873 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +OemToCharBuffA( + LPCSTR lpszSrc, + LPSTR lpszDst, + DWORD cchDstLength); +__declspec(dllimport) +BOOL +__stdcall +OemToCharBuffW( + LPCSTR lpszSrc, + LPWSTR lpszDst, + DWORD cchDstLength); + + + + +#line 3893 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +LPSTR +__stdcall +CharUpperA( + LPSTR lpsz); +__declspec(dllimport) +LPWSTR +__stdcall +CharUpperW( + LPWSTR lpsz); + + + + +#line 3909 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +DWORD +__stdcall +CharUpperBuffA( + LPSTR lpsz, + DWORD cchLength); +__declspec(dllimport) +DWORD +__stdcall +CharUpperBuffW( + LPWSTR lpsz, + DWORD cchLength); + + + + +#line 3927 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +LPSTR +__stdcall +CharLowerA( + LPSTR lpsz); +__declspec(dllimport) +LPWSTR +__stdcall +CharLowerW( + LPWSTR lpsz); + + + + +#line 3943 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +DWORD +__stdcall +CharLowerBuffA( + LPSTR lpsz, + DWORD cchLength); +__declspec(dllimport) +DWORD +__stdcall +CharLowerBuffW( + LPWSTR lpsz, + DWORD cchLength); + + + + +#line 3961 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +LPSTR +__stdcall +CharNextA( + LPCSTR lpsz); +__declspec(dllimport) +LPWSTR +__stdcall +CharNextW( + LPCWSTR lpsz); + + + + +#line 3977 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +LPSTR +__stdcall +CharPrevA( + LPCSTR lpszStart, + LPCSTR lpszCurrent); +__declspec(dllimport) +LPWSTR +__stdcall +CharPrevW( + LPCWSTR lpszStart, + LPCWSTR lpszCurrent); + + + + +#line 3995 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +LPSTR +__stdcall +CharNextExA( + WORD CodePage, + LPCSTR lpCurrentChar, + DWORD dwFlags); + +__declspec(dllimport) +LPSTR +__stdcall +CharPrevExA( + WORD CodePage, + LPCSTR lpStart, + LPCSTR lpCurrentChar, + DWORD dwFlags); +#line 4014 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +IsCharAlphaA( + CHAR ch); +__declspec(dllimport) +BOOL +__stdcall +IsCharAlphaW( + WCHAR ch); + + + + +#line 4049 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +IsCharAlphaNumericA( + CHAR ch); +__declspec(dllimport) +BOOL +__stdcall +IsCharAlphaNumericW( + WCHAR ch); + + + + +#line 4065 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +IsCharUpperA( + CHAR ch); +__declspec(dllimport) +BOOL +__stdcall +IsCharUpperW( + WCHAR ch); + + + + +#line 4081 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +IsCharLowerA( + CHAR ch); +__declspec(dllimport) +BOOL +__stdcall +IsCharLowerW( + WCHAR ch); + + + + +#line 4097 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 4099 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HWND +__stdcall +SetFocus( + HWND hWnd); + +__declspec(dllimport) +HWND +__stdcall +GetActiveWindow( + void); + +__declspec(dllimport) +HWND +__stdcall +GetFocus( + void); + +__declspec(dllimport) +UINT +__stdcall +GetKBCodePage( + void); + +__declspec(dllimport) +SHORT +__stdcall +GetKeyState( + int nVirtKey); + +__declspec(dllimport) +SHORT +__stdcall +GetAsyncKeyState( + int vKey); + +__declspec(dllimport) +BOOL +__stdcall +GetKeyboardState( + PBYTE lpKeyState); + +__declspec(dllimport) +BOOL +__stdcall +SetKeyboardState( + LPBYTE lpKeyState); + +__declspec(dllimport) +int +__stdcall +GetKeyNameTextA( + LONG lParam, + LPSTR lpString, + int nSize + ); +__declspec(dllimport) +int +__stdcall +GetKeyNameTextW( + LONG lParam, + LPWSTR lpString, + int nSize + ); + + + + +#line 4169 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +GetKeyboardType( + int nTypeFlag); + +__declspec(dllimport) +int +__stdcall +ToAscii( + UINT uVirtKey, + UINT uScanCode, + PBYTE lpKeyState, + LPWORD lpChar, + UINT uFlags); + + +__declspec(dllimport) +int +__stdcall +ToAsciiEx( + UINT uVirtKey, + UINT uScanCode, + PBYTE lpKeyState, + LPWORD lpChar, + UINT uFlags, + HKL dwhkl); +#line 4198 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +ToUnicode( + UINT wVirtKey, + UINT wScanCode, + PBYTE lpKeyState, + LPWSTR pwszBuff, + int cchBuff, + UINT wFlags); + +__declspec(dllimport) +DWORD +__stdcall +OemKeyScan( + WORD wOemChar); + +__declspec(dllimport) +SHORT +__stdcall +VkKeyScanA( + CHAR ch); +__declspec(dllimport) +SHORT +__stdcall +VkKeyScanW( + WCHAR ch); + + + + +#line 4231 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +SHORT +__stdcall VkKeyScanExA( + CHAR ch, + HKL dwhkl); +__declspec(dllimport) +SHORT +__stdcall VkKeyScanExW( + WCHAR ch, + HKL dwhkl); + + + + +#line 4248 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 4249 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +__declspec(dllimport) +void +__stdcall +keybd_event( + BYTE bVk, + BYTE bScan, + DWORD dwFlags, + DWORD dwExtraInfo); + + + + + + + + + + + +__declspec(dllimport) +void +__stdcall +mouse_event( + DWORD dwFlags, + DWORD dx, + DWORD dy, + DWORD dwData, + DWORD dwExtraInfo); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4330 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + +#line 4343 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +UINT +__stdcall +MapVirtualKeyA( + UINT uCode, + UINT uMapType); +__declspec(dllimport) +UINT +__stdcall +MapVirtualKeyW( + UINT uCode, + UINT uMapType); + + + + +#line 4361 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +UINT +__stdcall +MapVirtualKeyExA( + UINT uCode, + UINT uMapType, + HKL dwhkl); +__declspec(dllimport) +UINT +__stdcall +MapVirtualKeyExW( + UINT uCode, + UINT uMapType, + HKL dwhkl); + + + + +#line 4382 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 4383 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +GetInputState( + void); + +__declspec(dllimport) +DWORD +__stdcall +GetQueueStatus( + UINT flags); + +__declspec(dllimport) +HWND +__stdcall +GetCapture( + void); + +__declspec(dllimport) +HWND +__stdcall +SetCapture( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +ReleaseCapture( + void); + +__declspec(dllimport) +DWORD +__stdcall +MsgWaitForMultipleObjects( + DWORD nCount, + LPHANDLE pHandles, + BOOL fWaitAll, + DWORD dwMilliseconds, + DWORD dwWakeMask); + +__declspec(dllimport) +DWORD +__stdcall +MsgWaitForMultipleObjectsEx( + DWORD nCount, + LPHANDLE pHandles, + DWORD dwMilliseconds, + DWORD dwWakeMask, + DWORD dwFlags); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +UINT +__stdcall +SetTimer( + HWND hWnd , + UINT nIDEvent, + UINT uElapse, + TIMERPROC lpTimerFunc); + +__declspec(dllimport) +BOOL +__stdcall +KillTimer( + HWND hWnd, + UINT uIDEvent); + +__declspec(dllimport) +BOOL +__stdcall +IsWindowUnicode( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +EnableWindow( + HWND hWnd, + BOOL bEnable); + +__declspec(dllimport) +BOOL +__stdcall +IsWindowEnabled( + HWND hWnd); + +__declspec(dllimport) +HACCEL +__stdcall +LoadAcceleratorsA( + HINSTANCE hInstance, + LPCSTR lpTableName); +__declspec(dllimport) +HACCEL +__stdcall +LoadAcceleratorsW( + HINSTANCE hInstance, + LPCWSTR lpTableName); + + + + +#line 4527 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HACCEL +__stdcall +CreateAcceleratorTableA( + LPACCEL, int); +__declspec(dllimport) +HACCEL +__stdcall +CreateAcceleratorTableW( + LPACCEL, int); + + + + +#line 4543 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +DestroyAcceleratorTable( + HACCEL hAccel); + +__declspec(dllimport) +int +__stdcall +CopyAcceleratorTableA( + HACCEL hAccelSrc, + LPACCEL lpAccelDst, + int cAccelEntries); +__declspec(dllimport) +int +__stdcall +CopyAcceleratorTableW( + HACCEL hAccelSrc, + LPACCEL lpAccelDst, + int cAccelEntries); + + + + +#line 4569 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +__declspec(dllimport) +int +__stdcall +TranslateAcceleratorA( + HWND hWnd, + HACCEL hAccTable, + LPMSG lpMsg); +__declspec(dllimport) +int +__stdcall +TranslateAcceleratorW( + HWND hWnd, + HACCEL hAccTable, + LPMSG lpMsg); + + + + +#line 4591 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 4593 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4675 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + +#line 4682 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +#line 4685 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + +#line 4693 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +#line 4699 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +GetSystemMetrics( + int nIndex); + +#line 4707 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +__declspec(dllimport) +HMENU +__stdcall +LoadMenuA( + HINSTANCE hInstance, + LPCSTR lpMenuName); +__declspec(dllimport) +HMENU +__stdcall +LoadMenuW( + HINSTANCE hInstance, + LPCWSTR lpMenuName); + + + + +#line 4727 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HMENU +__stdcall +LoadMenuIndirectA( + const MENUTEMPLATEA *lpMenuTemplate); +__declspec(dllimport) +HMENU +__stdcall +LoadMenuIndirectW( + const MENUTEMPLATEW *lpMenuTemplate); + + + + +#line 4743 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HMENU +__stdcall +GetMenu( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +SetMenu( + HWND hWnd, + HMENU hMenu); + +__declspec(dllimport) +BOOL +__stdcall +ChangeMenuA( + HMENU hMenu, + UINT cmd, + LPCSTR lpszNewItem, + UINT cmdInsert, + UINT flags); +__declspec(dllimport) +BOOL +__stdcall +ChangeMenuW( + HMENU hMenu, + UINT cmd, + LPCWSTR lpszNewItem, + UINT cmdInsert, + UINT flags); + + + + +#line 4780 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +HiliteMenuItem( + HWND hWnd, + HMENU hMenu, + UINT uIDHiliteItem, + UINT uHilite); + +__declspec(dllimport) +int +__stdcall +GetMenuStringA( + HMENU hMenu, + UINT uIDItem, + LPSTR lpString, + int nMaxCount, + UINT uFlag); +__declspec(dllimport) +int +__stdcall +GetMenuStringW( + HMENU hMenu, + UINT uIDItem, + LPWSTR lpString, + int nMaxCount, + UINT uFlag); + + + + +#line 4813 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +UINT +__stdcall +GetMenuState( + HMENU hMenu, + UINT uId, + UINT uFlags); + +__declspec(dllimport) +BOOL +__stdcall +DrawMenuBar( + HWND hWnd); + + +__declspec(dllimport) +HMENU +__stdcall +GetSystemMenu( + HWND hWnd, + BOOL bRevert); + + +__declspec(dllimport) +HMENU +__stdcall +CreateMenu( + void); + +__declspec(dllimport) +HMENU +__stdcall +CreatePopupMenu( + void); + +__declspec(dllimport) +BOOL +__stdcall +DestroyMenu( + HMENU hMenu); + +__declspec(dllimport) +DWORD +__stdcall +CheckMenuItem( + HMENU hMenu, + UINT uIDCheckItem, + UINT uCheck); + +__declspec(dllimport) +BOOL +__stdcall +EnableMenuItem( + HMENU hMenu, + UINT uIDEnableItem, + UINT uEnable); + +__declspec(dllimport) +HMENU +__stdcall +GetSubMenu( + HMENU hMenu, + int nPos); + +__declspec(dllimport) +UINT +__stdcall +GetMenuItemID( + HMENU hMenu, + int nPos); + +__declspec(dllimport) +int +__stdcall +GetMenuItemCount( + HMENU hMenu); + +__declspec(dllimport) +BOOL +__stdcall +InsertMenuA( + HMENU hMenu, + UINT uPosition, + UINT uFlags, + UINT uIDNewItem, + LPCSTR lpNewItem + ); +__declspec(dllimport) +BOOL +__stdcall +InsertMenuW( + HMENU hMenu, + UINT uPosition, + UINT uFlags, + UINT uIDNewItem, + LPCWSTR lpNewItem + ); + + + + +#line 4916 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +AppendMenuA( + HMENU hMenu, + UINT uFlags, + UINT uIDNewItem, + LPCSTR lpNewItem + ); +__declspec(dllimport) +BOOL +__stdcall +AppendMenuW( + HMENU hMenu, + UINT uFlags, + UINT uIDNewItem, + LPCWSTR lpNewItem + ); + + + + +#line 4940 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +ModifyMenuA( + HMENU hMnu, + UINT uPosition, + UINT uFlags, + UINT uIDNewItem, + LPCSTR lpNewItem + ); +__declspec(dllimport) +BOOL +__stdcall +ModifyMenuW( + HMENU hMnu, + UINT uPosition, + UINT uFlags, + UINT uIDNewItem, + LPCWSTR lpNewItem + ); + + + + +#line 4966 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall RemoveMenu( + HMENU hMenu, + UINT uPosition, + UINT uFlags); + +__declspec(dllimport) +BOOL +__stdcall +DeleteMenu( + HMENU hMenu, + UINT uPosition, + UINT uFlags); + +__declspec(dllimport) +BOOL +__stdcall +SetMenuItemBitmaps( + HMENU hMenu, + UINT uPosition, + UINT uFlags, + HBITMAP hBitmapUnchecked, + HBITMAP hBitmapChecked); + +__declspec(dllimport) +LONG +__stdcall +GetMenuCheckMarkDimensions( + void); + +__declspec(dllimport) +BOOL +__stdcall +TrackPopupMenu( + HMENU hMenu, + UINT uFlags, + int x, + int y, + int nReserved, + HWND hWnd, + const RECT *prcRect); + + + + + + + + +typedef struct tagTPMPARAMS +{ + UINT cbSize; + RECT rcExclude; +} TPMPARAMS; +typedef TPMPARAMS *LPTPMPARAMS; + +__declspec(dllimport) BOOL __stdcall TrackPopupMenuEx(HMENU, UINT, int, int, HWND, LPTPMPARAMS); +#line 5026 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5100 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +#line 5109 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + +#line 5127 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +typedef struct tagMENUITEMINFOA +{ + UINT cbSize; + UINT fMask; + UINT fType; + UINT fState; + UINT wID; + HMENU hSubMenu; + HBITMAP hbmpChecked; + HBITMAP hbmpUnchecked; + DWORD dwItemData; + LPSTR dwTypeData; + UINT cch; + + +#line 5145 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +} MENUITEMINFOA, *LPMENUITEMINFOA; +typedef struct tagMENUITEMINFOW +{ + UINT cbSize; + UINT fMask; + UINT fType; + UINT fState; + UINT wID; + HMENU hSubMenu; + HBITMAP hbmpChecked; + HBITMAP hbmpUnchecked; + DWORD dwItemData; + LPWSTR dwTypeData; + UINT cch; + + +#line 5162 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +} MENUITEMINFOW, *LPMENUITEMINFOW; + + + + +typedef MENUITEMINFOA MENUITEMINFO; +typedef LPMENUITEMINFOA LPMENUITEMINFO; +#line 5170 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +typedef MENUITEMINFOA const *LPCMENUITEMINFOA; +typedef MENUITEMINFOW const *LPCMENUITEMINFOW; + + + +typedef LPCMENUITEMINFOA LPCMENUITEMINFO; +#line 5177 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +InsertMenuItemA( + HMENU, + UINT, + BOOL, + LPCMENUITEMINFOA + ); +__declspec(dllimport) +BOOL +__stdcall +InsertMenuItemW( + HMENU, + UINT, + BOOL, + LPCMENUITEMINFOW + ); + + + + +#line 5201 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +GetMenuItemInfoA( + HMENU, + UINT, + BOOL, + LPMENUITEMINFOA + ); +__declspec(dllimport) +BOOL +__stdcall +GetMenuItemInfoW( + HMENU, + UINT, + BOOL, + LPMENUITEMINFOW + ); + + + + +#line 5225 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +SetMenuItemInfoA( + HMENU, + UINT, + BOOL, + LPCMENUITEMINFOA + ); +__declspec(dllimport) +BOOL +__stdcall +SetMenuItemInfoW( + HMENU, + UINT, + BOOL, + LPCMENUITEMINFOW + ); + + + + +#line 5249 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +__declspec(dllimport) UINT __stdcall GetMenuDefaultItem(HMENU hMenu, UINT fByPos, UINT gmdiFlags); +__declspec(dllimport) BOOL __stdcall SetMenuDefaultItem(HMENU hMenu, UINT uItem, UINT fByPos); + +__declspec(dllimport) BOOL __stdcall GetMenuItemRect(HWND hWnd, HMENU hMenu, UINT uItem, LPRECT lprcItem); +__declspec(dllimport) int __stdcall MenuItemFromPoint(HWND hWnd, HMENU hMenu, POINT ptScreen); +#line 5260 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + +#line 5279 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +#line 5282 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +#line 5285 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + +typedef struct tagDROPSTRUCT +{ + HWND hwndSource; + HWND hwndSink; + DWORD wFmt; + DWORD dwData; + POINT ptDrop; + DWORD dwControlData; +} DROPSTRUCT, *PDROPSTRUCT, *LPDROPSTRUCT; + + + + + + + + + + + +__declspec(dllimport) +DWORD +__stdcall +DragObject(HWND, HWND, UINT, DWORD, HCURSOR); + +__declspec(dllimport) +BOOL +__stdcall +DragDetect(HWND, POINT); +#line 5322 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +DrawIcon( + HDC hDC, + int X, + int Y, + HICON hIcon); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagDRAWTEXTPARAMS +{ + UINT cbSize; + int iTabLength; + int iLeftMargin; + int iRightMargin; + UINT uiLengthDrawn; +} DRAWTEXTPARAMS, *LPDRAWTEXTPARAMS; +#line 5371 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +int +__stdcall +DrawTextA( + HDC hDC, + LPCSTR lpString, + int nCount, + LPRECT lpRect, + UINT uFormat); +__declspec(dllimport) +int +__stdcall +DrawTextW( + HDC hDC, + LPCWSTR lpString, + int nCount, + LPRECT lpRect, + UINT uFormat); + + + + +#line 5396 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +__declspec(dllimport) +int +__stdcall +DrawTextExA(HDC, LPSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS); +__declspec(dllimport) +int +__stdcall +DrawTextExW(HDC, LPWSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS); + + + + +#line 5412 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 5413 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 5415 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +GrayStringA( + HDC hDC, + HBRUSH hBrush, + GRAYSTRINGPROC lpOutputFunc, + LPARAM lpData, + int nCount, + int X, + int Y, + int nWidth, + int nHeight); +__declspec(dllimport) +BOOL +__stdcall +GrayStringW( + HDC hDC, + HBRUSH hBrush, + GRAYSTRINGPROC lpOutputFunc, + LPARAM lpData, + int nCount, + int X, + int Y, + int nWidth, + int nHeight); + + + + +#line 5447 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + +__declspec(dllimport) BOOL __stdcall DrawStateA(HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT); +__declspec(dllimport) BOOL __stdcall DrawStateW(HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT); + + + + +#line 5471 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 5472 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +LONG +__stdcall +TabbedTextOutA( + HDC hDC, + int X, + int Y, + LPCSTR lpString, + int nCount, + int nTabPositions, + LPINT lpnTabStopPositions, + int nTabOrigin); +__declspec(dllimport) +LONG +__stdcall +TabbedTextOutW( + HDC hDC, + int X, + int Y, + LPCWSTR lpString, + int nCount, + int nTabPositions, + LPINT lpnTabStopPositions, + int nTabOrigin); + + + + +#line 5502 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +DWORD +__stdcall +GetTabbedTextExtentA( + HDC hDC, + LPCSTR lpString, + int nCount, + int nTabPositions, + LPINT lpnTabStopPositions); +__declspec(dllimport) +DWORD +__stdcall +GetTabbedTextExtentW( + HDC hDC, + LPCWSTR lpString, + int nCount, + int nTabPositions, + LPINT lpnTabStopPositions); + + + + +#line 5526 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +UpdateWindow( + HWND hWnd); + +__declspec(dllimport) +HWND +__stdcall +SetActiveWindow( + HWND hWnd); + +__declspec(dllimport) +HWND +__stdcall +GetForegroundWindow( + void); + + +__declspec(dllimport) BOOL __stdcall PaintDesktop(HDC hdc); + +#line 5549 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +SetForegroundWindow( + HWND hWnd); + +__declspec(dllimport) +HWND +__stdcall +WindowFromDC( + HDC hDC); + +__declspec(dllimport) +HDC +__stdcall +GetDC( + HWND hWnd); + +__declspec(dllimport) +HDC +__stdcall +GetDCEx( + HWND hWnd , + HRGN hrgnClip, + DWORD flags); + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +AlignRects(LPRECT arc, DWORD cCount, DWORD iPrimary, DWORD dwFlags); + + + + + + + + + + + + + +__declspec(dllimport) +HDC +__stdcall +GetWindowDC( + HWND hWnd); + +__declspec(dllimport) +int +__stdcall +ReleaseDC( + HWND hWnd, + HDC hDC); + +__declspec(dllimport) +HDC +__stdcall +BeginPaint( + HWND hWnd, + LPPAINTSTRUCT lpPaint); + +__declspec(dllimport) +BOOL +__stdcall +EndPaint( + HWND hWnd, + const PAINTSTRUCT *lpPaint); + +__declspec(dllimport) +BOOL +__stdcall +GetUpdateRect( + HWND hWnd, + LPRECT lpRect, + BOOL bErase); + +__declspec(dllimport) +int +__stdcall +GetUpdateRgn( + HWND hWnd, + HRGN hRgn, + BOOL bErase); + +__declspec(dllimport) +int +__stdcall +SetWindowRgn( + HWND hWnd, + HRGN hRgn, + BOOL bRedraw); + +__declspec(dllimport) +int +__stdcall +GetWindowRgn( + HWND hWnd, + HRGN hRgn); + +__declspec(dllimport) +int +__stdcall +ExcludeUpdateRgn( + HDC hDC, + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +InvalidateRect( + HWND hWnd , + const RECT *lpRect, + BOOL bErase); + +__declspec(dllimport) +BOOL +__stdcall +ValidateRect( + HWND hWnd , + const RECT *lpRect); + +__declspec(dllimport) +BOOL +__stdcall +InvalidateRgn( + HWND hWnd, + HRGN hRgn, + BOOL bErase); + +__declspec(dllimport) +BOOL +__stdcall +ValidateRgn( + HWND hWnd, + HRGN hRgn); + + +__declspec(dllimport) +BOOL +__stdcall +RedrawWindow( + HWND hWnd, + const RECT *lprcUpdate, + HRGN hrgnUpdate, + UINT flags); + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +LockWindowUpdate( + HWND hWndLock); + +__declspec(dllimport) +BOOL +__stdcall +ScrollWindow( + HWND hWnd, + int XAmount, + int YAmount, + const RECT *lpRect, + const RECT *lpClipRect); + +__declspec(dllimport) +BOOL +__stdcall +ScrollDC( + HDC hDC, + int dx, + int dy, + const RECT *lprcScroll, + const RECT *lprcClip , + HRGN hrgnUpdate, + LPRECT lprcUpdate); + +__declspec(dllimport) +int +__stdcall +ScrollWindowEx( + HWND hWnd, + int dx, + int dy, + const RECT *prcScroll, + const RECT *prcClip , + HRGN hrgnUpdate, + LPRECT prcUpdate, + UINT flags); + + + + + + +#line 5792 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +__declspec(dllimport) +int +__stdcall +SetScrollPos( + HWND hWnd, + int nBar, + int nPos, + BOOL bRedraw); + +__declspec(dllimport) +int +__stdcall +GetScrollPos( + HWND hWnd, + int nBar); + +__declspec(dllimport) +BOOL +__stdcall +SetScrollRange( + HWND hWnd, + int nBar, + int nMinPos, + int nMaxPos, + BOOL bRedraw); + +__declspec(dllimport) +BOOL +__stdcall +GetScrollRange( + HWND hWnd, + int nBar, + LPINT lpMinPos, + LPINT lpMaxPos); + +__declspec(dllimport) +BOOL +__stdcall +ShowScrollBar( + HWND hWnd, + int wBar, + BOOL bShow); + +__declspec(dllimport) +BOOL +__stdcall +EnableScrollBar( + HWND hWnd, + UINT wSBflags, + UINT wArrows); + + + + + + + + + + + + + + + + + + +#line 5864 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +SetPropA( + HWND hWnd, + LPCSTR lpString, + HANDLE hData); +__declspec(dllimport) +BOOL +__stdcall +SetPropW( + HWND hWnd, + LPCWSTR lpString, + HANDLE hData); + + + + +#line 5884 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HANDLE +__stdcall +GetPropA( + HWND hWnd, + LPCSTR lpString); +__declspec(dllimport) +HANDLE +__stdcall +GetPropW( + HWND hWnd, + LPCWSTR lpString); + + + + +#line 5902 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HANDLE +__stdcall +RemovePropA( + HWND hWnd, + LPCSTR lpString); +__declspec(dllimport) +HANDLE +__stdcall +RemovePropW( + HWND hWnd, + LPCWSTR lpString); + + + + +#line 5920 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +EnumPropsExA( + HWND hWnd, + PROPENUMPROCEXA lpEnumFunc, + LPARAM lParam); +__declspec(dllimport) +int +__stdcall +EnumPropsExW( + HWND hWnd, + PROPENUMPROCEXW lpEnumFunc, + LPARAM lParam); + + + + +#line 5940 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +EnumPropsA( + HWND hWnd, + PROPENUMPROCA lpEnumFunc); +__declspec(dllimport) +int +__stdcall +EnumPropsW( + HWND hWnd, + PROPENUMPROCW lpEnumFunc); + + + + +#line 5958 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +SetWindowTextA( + HWND hWnd, + LPCSTR lpString); +__declspec(dllimport) +BOOL +__stdcall +SetWindowTextW( + HWND hWnd, + LPCWSTR lpString); + + + + +#line 5976 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +GetWindowTextA( + HWND hWnd, + LPSTR lpString, + int nMaxCount); +__declspec(dllimport) +int +__stdcall +GetWindowTextW( + HWND hWnd, + LPWSTR lpString, + int nMaxCount); + + + + +#line 5996 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +GetWindowTextLengthA( + HWND hWnd); +__declspec(dllimport) +int +__stdcall +GetWindowTextLengthW( + HWND hWnd); + + + + +#line 6012 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +GetClientRect( + HWND hWnd, + LPRECT lpRect); + +__declspec(dllimport) +BOOL +__stdcall +GetWindowRect( + HWND hWnd, + LPRECT lpRect); + +__declspec(dllimport) +BOOL +__stdcall +AdjustWindowRect( + LPRECT lpRect, + DWORD dwStyle, + BOOL bMenu); + +__declspec(dllimport) +BOOL +__stdcall +AdjustWindowRectEx( + LPRECT lpRect, + DWORD dwStyle, + BOOL bMenu, + DWORD dwExStyle); + + + + +typedef struct tagHELPINFO +{ + UINT cbSize; + int iContextType; + int iCtrlId; + HANDLE hItemHandle; + DWORD dwContextId; + POINT MousePos; +} HELPINFO, *LPHELPINFO; + +__declspec(dllimport) BOOL __stdcall SetWindowContextHelpId(HWND, DWORD); +__declspec(dllimport) DWORD __stdcall GetWindowContextHelpId(HWND); +__declspec(dllimport) BOOL __stdcall SetMenuContextHelpId(HMENU, DWORD); +__declspec(dllimport) DWORD __stdcall GetMenuContextHelpId(HMENU); + +#line 6063 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + +#line 6088 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + +#line 6098 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + +#line 6105 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + +#line 6117 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + +__declspec(dllimport) +int +__stdcall +MessageBoxA( + HWND hWnd , + LPCSTR lpText, + LPCSTR lpCaption, + UINT uType); +__declspec(dllimport) +int +__stdcall +MessageBoxW( + HWND hWnd , + LPCWSTR lpText, + LPCWSTR lpCaption, + UINT uType); + + + + +#line 6154 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +MessageBoxExA( + HWND hWnd , + LPCSTR lpText, + LPCSTR lpCaption, + UINT uType, + WORD wLanguageId); +__declspec(dllimport) +int +__stdcall +MessageBoxExW( + HWND hWnd , + LPCWSTR lpText, + LPCWSTR lpCaption, + UINT uType, + WORD wLanguageId); + + + + +#line 6178 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +typedef void (__stdcall *MSGBOXCALLBACK)(LPHELPINFO lpHelpInfo); + +typedef struct tagMSGBOXPARAMSA +{ + UINT cbSize; + HWND hwndOwner; + HINSTANCE hInstance; + LPCSTR lpszText; + LPCSTR lpszCaption; + DWORD dwStyle; + LPCSTR lpszIcon; + DWORD dwContextHelpId; + MSGBOXCALLBACK lpfnMsgBoxCallback; + DWORD dwLanguageId; +} MSGBOXPARAMSA, *PMSGBOXPARAMSA, *LPMSGBOXPARAMSA; +typedef struct tagMSGBOXPARAMSW +{ + UINT cbSize; + HWND hwndOwner; + HINSTANCE hInstance; + LPCWSTR lpszText; + LPCWSTR lpszCaption; + DWORD dwStyle; + LPCWSTR lpszIcon; + DWORD dwContextHelpId; + MSGBOXCALLBACK lpfnMsgBoxCallback; + DWORD dwLanguageId; +} MSGBOXPARAMSW, *PMSGBOXPARAMSW, *LPMSGBOXPARAMSW; + + + + + +typedef MSGBOXPARAMSA MSGBOXPARAMS; +typedef PMSGBOXPARAMSA PMSGBOXPARAMS; +typedef LPMSGBOXPARAMSA LPMSGBOXPARAMS; +#line 6218 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) int __stdcall MessageBoxIndirectA(LPMSGBOXPARAMSA); +__declspec(dllimport) int __stdcall MessageBoxIndirectW(LPMSGBOXPARAMSW); + + + + +#line 6227 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 6228 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +__declspec(dllimport) +BOOL +__stdcall +MessageBeep( + UINT uType); + +#line 6238 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +ShowCursor( + BOOL bShow); + +__declspec(dllimport) +BOOL +__stdcall +SetCursorPos( + int X, + int Y); + +__declspec(dllimport) +HCURSOR +__stdcall +SetCursor( + HCURSOR hCursor); + +__declspec(dllimport) +BOOL +__stdcall +GetCursorPos( + LPPOINT lpPoint); + +__declspec(dllimport) +BOOL +__stdcall +ClipCursor( + const RECT *lpRect); + +__declspec(dllimport) +BOOL +__stdcall +GetClipCursor( + LPRECT lpRect); + +__declspec(dllimport) +HCURSOR +__stdcall +GetCursor( + void); + +__declspec(dllimport) +BOOL +__stdcall +CreateCaret( + HWND hWnd, + HBITMAP hBitmap , + int nWidth, + int nHeight); + +__declspec(dllimport) +UINT +__stdcall +GetCaretBlinkTime( + void); + +__declspec(dllimport) +BOOL +__stdcall +SetCaretBlinkTime( + UINT uMSeconds); + +__declspec(dllimport) +BOOL +__stdcall +DestroyCaret( + void); + +__declspec(dllimport) +BOOL +__stdcall +HideCaret( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +ShowCaret( + HWND hWnd); + +__declspec(dllimport) +BOOL +__stdcall +SetCaretPos( + int X, + int Y); + +__declspec(dllimport) +BOOL +__stdcall +GetCaretPos( + LPPOINT lpPoint); + +__declspec(dllimport) +BOOL +__stdcall +ClientToScreen( + HWND hWnd, + LPPOINT lpPoint); + +__declspec(dllimport) +BOOL +__stdcall +ScreenToClient( + HWND hWnd, + LPPOINT lpPoint); + +__declspec(dllimport) +int +__stdcall +MapWindowPoints( + HWND hWndFrom, + HWND hWndTo, + LPPOINT lpPoints, + UINT cPoints); + +__declspec(dllimport) +HWND +__stdcall +WindowFromPoint( + POINT Point); + +__declspec(dllimport) +HWND +__stdcall +ChildWindowFromPoint( + HWND hWndParent, + POINT Point); + + + + + + + +__declspec(dllimport) HWND __stdcall ChildWindowFromPointEx(HWND, POINT, UINT); +#line 6378 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6421 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +#line 6427 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +#line 6436 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +DWORD +__stdcall +GetSysColor( + int nIndex); + + +__declspec(dllimport) +HBRUSH +__stdcall +GetSysColorBrush( + int nIndex); + + +#line 6453 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +SetSysColors( + int cElements, + const INT * lpaElements, + const COLORREF * lpaRgbValues); + +#line 6463 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +DrawFocusRect( + HDC hDC, + const RECT * lprc); + +__declspec(dllimport) +int +__stdcall +FillRect( + HDC hDC, + const RECT *lprc, + HBRUSH hbr); + +__declspec(dllimport) +int +__stdcall +FrameRect( + HDC hDC, + const RECT *lprc, + HBRUSH hbr); + +__declspec(dllimport) +BOOL +__stdcall +InvertRect( + HDC hDC, + const RECT *lprc); + +__declspec(dllimport) +BOOL +__stdcall +SetRect( + LPRECT lprc, + int xLeft, + int yTop, + int xRight, + int yBottom); + +__declspec(dllimport) +BOOL +__stdcall + SetRectEmpty( + LPRECT lprc); + +__declspec(dllimport) +BOOL +__stdcall +CopyRect( + LPRECT lprcDst, + const RECT *lprcSrc); + +__declspec(dllimport) +BOOL +__stdcall +InflateRect( + LPRECT lprc, + int dx, + int dy); + +__declspec(dllimport) +BOOL +__stdcall +IntersectRect( + LPRECT lprcDst, + const RECT *lprcSrc1, + const RECT *lprcSrc2); + +__declspec(dllimport) +BOOL +__stdcall +UnionRect( + LPRECT lprcDst, + const RECT *lprcSrc1, + const RECT *lprcSrc2); + +__declspec(dllimport) +BOOL +__stdcall +SubtractRect( + LPRECT lprcDst, + const RECT *lprcSrc1, + const RECT *lprcSrc2); + +__declspec(dllimport) +BOOL +__stdcall +OffsetRect( + LPRECT lprc, + int dx, + int dy); + +__declspec(dllimport) +BOOL +__stdcall +IsRectEmpty( + const RECT *lprc); + +__declspec(dllimport) +BOOL +__stdcall +EqualRect( + const RECT *lprc1, + const RECT *lprc2); + +__declspec(dllimport) +BOOL +__stdcall +PtInRect( + const RECT *lprc, + POINT pt); + + + +__declspec(dllimport) +WORD +__stdcall +GetWindowWord( + HWND hWnd, + int nIndex); + +__declspec(dllimport) +WORD +__stdcall +SetWindowWord( + HWND hWnd, + int nIndex, + WORD wNewWord); + +__declspec(dllimport) +LONG +__stdcall +GetWindowLongA( + HWND hWnd, + int nIndex); +__declspec(dllimport) +LONG +__stdcall +GetWindowLongW( + HWND hWnd, + int nIndex); + + + + +#line 6611 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +LONG +__stdcall +SetWindowLongA( + HWND hWnd, + int nIndex, + LONG dwNewLong); +__declspec(dllimport) +LONG +__stdcall +SetWindowLongW( + HWND hWnd, + int nIndex, + LONG dwNewLong); + + + + +#line 6631 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +WORD +__stdcall +GetClassWord( + HWND hWnd, + int nIndex); + +__declspec(dllimport) +WORD +__stdcall +SetClassWord( + HWND hWnd, + int nIndex, + WORD wNewWord); + +__declspec(dllimport) +DWORD +__stdcall +GetClassLongA( + HWND hWnd, + int nIndex); +__declspec(dllimport) +DWORD +__stdcall +GetClassLongW( + HWND hWnd, + int nIndex); + + + + +#line 6664 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +DWORD +__stdcall +SetClassLongA( + HWND hWnd, + int nIndex, + LONG dwNewLong); +__declspec(dllimport) +DWORD +__stdcall +SetClassLongW( + HWND hWnd, + int nIndex, + LONG dwNewLong); + + + + +#line 6684 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 6686 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HWND +__stdcall +GetDesktopWindow( + void); + + +__declspec(dllimport) +HWND +__stdcall +GetParent( + HWND hWnd); + +__declspec(dllimport) +HWND +__stdcall +SetParent( + HWND hWndChild, + HWND hWndNewParent); + +__declspec(dllimport) +BOOL +__stdcall +EnumChildWindows( + HWND hWndParent, + WNDENUMPROC lpEnumFunc, + LPARAM lParam); + +__declspec(dllimport) +HWND +__stdcall +FindWindowA( + LPCSTR lpClassName , + LPCSTR lpWindowName); +__declspec(dllimport) +HWND +__stdcall +FindWindowW( + LPCWSTR lpClassName , + LPCWSTR lpWindowName); + + + + +#line 6732 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) HWND __stdcall FindWindowExA(HWND, HWND, LPCSTR, LPCSTR); +__declspec(dllimport) HWND __stdcall FindWindowExW(HWND, HWND, LPCWSTR, LPCWSTR); + + + + +#line 6741 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 6743 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +BOOL +__stdcall +EnumWindows( + WNDENUMPROC lpEnumFunc, + LPARAM lParam); + +__declspec(dllimport) +BOOL +__stdcall +EnumThreadWindows( + DWORD dwThreadId, + WNDENUMPROC lpfn, + LPARAM lParam); + + + +__declspec(dllimport) +int +__stdcall +GetClassNameA( + HWND hWnd, + LPSTR lpClassName, + int nMaxCount); +__declspec(dllimport) +int +__stdcall +GetClassNameW( + HWND hWnd, + LPWSTR lpClassName, + int nMaxCount); + + + + +#line 6781 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HWND +__stdcall +GetTopWindow( + HWND hWnd); + + + + + +__declspec(dllimport) +DWORD +__stdcall +GetWindowThreadProcessId( + HWND hWnd, + LPDWORD lpdwProcessId); + + + + +__declspec(dllimport) +HWND +__stdcall +GetLastActivePopup( + HWND hWnd); + + + + + + + + + + + + + + + +#line 6823 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HWND +__stdcall +GetWindow( + HWND hWnd, + UINT uCmd); + + + + + + + +__declspec(dllimport) +HHOOK +__stdcall +SetWindowsHookA( + int nFilterType, + HOOKPROC pfnFilterProc); +__declspec(dllimport) +HHOOK +__stdcall +SetWindowsHookW( + int nFilterType, + HOOKPROC pfnFilterProc); + + + + +#line 6854 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + +#line 6876 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +UnhookWindowsHook( + int nCode, + HOOKPROC pfnFilterProc); + +__declspec(dllimport) +HHOOK +__stdcall +SetWindowsHookExA( + int idHook, + HOOKPROC lpfn, + HINSTANCE hmod, + DWORD dwThreadId); +__declspec(dllimport) +HHOOK +__stdcall +SetWindowsHookExW( + int idHook, + HOOKPROC lpfn, + HINSTANCE hmod, + DWORD dwThreadId); + + + + +#line 6905 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +UnhookWindowsHookEx( + HHOOK hhk); + +__declspec(dllimport) +LRESULT +__stdcall +CallNextHookEx( + HHOOK hhk, + int nCode, + WPARAM wParam, + LPARAM lParam); + + + + + + + + + + +#line 6931 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 6933 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6975 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +#line 6980 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +#line 6985 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7015 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 7017 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +__declspec(dllimport) +BOOL +__stdcall +CheckMenuRadioItem(HMENU, UINT, UINT, UINT, UINT); +#line 7027 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +typedef struct { + WORD versionNumber; + WORD offset; +} MENUITEMTEMPLATEHEADER, *PMENUITEMTEMPLATEHEADER; + +typedef struct { + WORD mtOption; + WORD mtID; + WCHAR mtString[1]; +} MENUITEMTEMPLATE, *PMENUITEMTEMPLATE; + + +#line 7044 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7073 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + +#line 7081 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +__declspec(dllimport) +HBITMAP +__stdcall +LoadBitmapA( + HINSTANCE hInstance, + LPCSTR lpBitmapName); +__declspec(dllimport) +HBITMAP +__stdcall +LoadBitmapW( + HINSTANCE hInstance, + LPCWSTR lpBitmapName); + + + + +#line 7103 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HCURSOR +__stdcall +LoadCursorA( + HINSTANCE hInstance, + LPCSTR lpCursorName); +__declspec(dllimport) +HCURSOR +__stdcall +LoadCursorW( + HINSTANCE hInstance, + LPCWSTR lpCursorName); + + + + +#line 7121 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HCURSOR +__stdcall +LoadCursorFromFileA( + LPCSTR lpFileName); +__declspec(dllimport) +HCURSOR +__stdcall +LoadCursorFromFileW( + LPCWSTR lpFileName); + + + + +#line 7137 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HCURSOR +__stdcall +CreateCursor( + HINSTANCE hInst, + int xHotSpot, + int yHotSpot, + int nWidth, + int nHeight, + const void *pvANDPlane, + const void *pvXORPlane); + +__declspec(dllimport) +BOOL +__stdcall +DestroyCursor( + HCURSOR hCursor); + + + + + + + + + +#line 7165 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + +#line 7185 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +#line 7189 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +SetSystemCursor( + HCURSOR hcur, + DWORD id); + +typedef struct _ICONINFO { + BOOL fIcon; + DWORD xHotspot; + DWORD yHotspot; + HBITMAP hbmMask; + HBITMAP hbmColor; +} ICONINFO; +typedef ICONINFO *PICONINFO; + +__declspec(dllimport) +HICON +__stdcall +LoadIconA( + HINSTANCE hInstance, + LPCSTR lpIconName); +__declspec(dllimport) +HICON +__stdcall +LoadIconW( + HINSTANCE hInstance, + LPCWSTR lpIconName); + + + + +#line 7223 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +HICON +__stdcall +CreateIcon( + HINSTANCE hInstance, + int nWidth, + int nHeight, + BYTE cPlanes, + BYTE cBitsPixel, + const BYTE *lpbANDbits, + const BYTE *lpbXORbits); + +__declspec(dllimport) +BOOL +__stdcall +DestroyIcon( + HICON hIcon); + +__declspec(dllimport) +int +__stdcall +LookupIconIdFromDirectory( + PBYTE presbits, + BOOL fIcon); + + +__declspec(dllimport) +int +__stdcall +LookupIconIdFromDirectoryEx( + PBYTE presbits, + BOOL fIcon, + int cxDesired, + int cyDesired, + UINT Flags); +#line 7261 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HICON +__stdcall +CreateIconFromResource( + PBYTE presbits, + DWORD dwResSize, + BOOL fIcon, + DWORD dwVer); + + +__declspec(dllimport) +HICON +__stdcall +CreateIconFromResourceEx( + PBYTE presbits, + DWORD dwResSize, + BOOL fIcon, + DWORD dwVer, + int cxDesired, + int cyDesired, + UINT Flags); + + +typedef struct tagCURSORSHAPE +{ + int xHotSpot; + int yHotSpot; + int cx; + int cy; + int cbWidth; + BYTE Planes; + BYTE BitsPixel; +} CURSORSHAPE, *LPCURSORSHAPE; +#line 7296 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +HANDLE +__stdcall +LoadImageA( + HINSTANCE, + LPCSTR, + UINT, + int, + int, + UINT); +__declspec(dllimport) +HANDLE +__stdcall +LoadImageW( + HINSTANCE, + LPCWSTR, + UINT, + int, + int, + UINT); + + + + +#line 7342 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HANDLE +__stdcall +CopyImage( + HANDLE, + UINT, + int, + int, + UINT); + + + + + + + +__declspec(dllimport) BOOL __stdcall DrawIconEx(HDC hdc, int xLeft, int yTop, + HICON hIcon, int cxWidth, int cyWidth, + UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags); +#line 7363 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +HICON +__stdcall +CreateIconIndirect( + PICONINFO piconinfo); + +__declspec(dllimport) +HICON +__stdcall +CopyIcon( + HICON hIcon); + +__declspec(dllimport) +BOOL +__stdcall +GetIconInfo( + HICON hIcon, + PICONINFO piconinfo); + + + + +#line 7387 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7498 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 7499 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +#line 7505 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +#line 7509 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +LoadStringA( + HINSTANCE hInstance, + UINT uID, + LPSTR lpBuffer, + int nBufferMax); +__declspec(dllimport) +int +__stdcall +LoadStringW( + HINSTANCE hInstance, + UINT uID, + LPWSTR lpBuffer, + int nBufferMax); + + + + +#line 7531 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + +#line 7548 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7580 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +#line 7584 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + +#line 7603 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + +#line 7613 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7660 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +#line 7665 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +#line 7669 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7710 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + +#line 7727 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + +#line 7747 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7773 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + +#line 7785 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + +#line 7802 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 7804 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +IsDialogMessageA( + HWND hDlg, + LPMSG lpMsg); +__declspec(dllimport) +BOOL +__stdcall +IsDialogMessageW( + HWND hDlg, + LPMSG lpMsg); + + + + +#line 7840 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 7842 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +MapDialogRect( + HWND hDlg, + LPRECT lpRect); + +__declspec(dllimport) +int +__stdcall +DlgDirListA( + HWND hDlg, + LPSTR lpPathSpec, + int nIDListBox, + int nIDStaticPath, + UINT uFileType); +__declspec(dllimport) +int +__stdcall +DlgDirListW( + HWND hDlg, + LPWSTR lpPathSpec, + int nIDListBox, + int nIDStaticPath, + UINT uFileType); + + + + +#line 7873 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +DlgDirSelectExA( + HWND hDlg, + LPSTR lpString, + int nCount, + int nIDListBox); +__declspec(dllimport) +BOOL +__stdcall +DlgDirSelectExW( + HWND hDlg, + LPWSTR lpString, + int nCount, + int nIDListBox); + + + + +#line 7909 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +int +__stdcall +DlgDirListComboBoxA( + HWND hDlg, + LPSTR lpPathSpec, + int nIDComboBox, + int nIDStaticPath, + UINT uFiletype); +__declspec(dllimport) +int +__stdcall +DlgDirListComboBoxW( + HWND hDlg, + LPWSTR lpPathSpec, + int nIDComboBox, + int nIDStaticPath, + UINT uFiletype); + + + + +#line 7933 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +BOOL +__stdcall +DlgDirSelectComboBoxExA( + HWND hDlg, + LPSTR lpString, + int nCount, + int nIDComboBox); +__declspec(dllimport) +BOOL +__stdcall +DlgDirSelectComboBoxExW( + HWND hDlg, + LPWSTR lpString, + int nCount, + int nIDComboBox); + + + + +#line 7955 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7981 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +#line 7990 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8086 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +#line 8091 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 8093 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + +#line 8118 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +#line 8123 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8169 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +#line 8172 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8214 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +#line 8219 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 8220 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + +#line 8242 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +#line 8246 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagSCROLLINFO +{ + UINT cbSize; + UINT fMask; + int nMin; + int nMax; + UINT nPage; + int nPos; + int nTrackPos; +} SCROLLINFO, *LPSCROLLINFO; +typedef SCROLLINFO const *LPCSCROLLINFO; + +__declspec(dllimport) int __stdcall SetScrollInfo(HWND, int, LPCSCROLLINFO, BOOL); +__declspec(dllimport) BOOL __stdcall GetScrollInfo(HWND, int, LPSCROLLINFO); +#line 8283 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 8284 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 8285 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + +typedef struct tagMDICREATESTRUCTA { + LPCSTR szClass; + LPCSTR szTitle; + HANDLE hOwner; + int x; + int y; + int cx; + int cy; + DWORD style; + LPARAM lParam; +} MDICREATESTRUCTA, *LPMDICREATESTRUCTA; +typedef struct tagMDICREATESTRUCTW { + LPCWSTR szClass; + LPCWSTR szTitle; + HANDLE hOwner; + int x; + int y; + int cx; + int cy; + DWORD style; + LPARAM lParam; +} MDICREATESTRUCTW, *LPMDICREATESTRUCTW; + + + + +typedef MDICREATESTRUCTA MDICREATESTRUCT; +typedef LPMDICREATESTRUCTA LPMDICREATESTRUCT; +#line 8329 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +typedef struct tagCLIENTCREATESTRUCT { + HANDLE hWindowMenu; + UINT idFirstChild; +} CLIENTCREATESTRUCT, *LPCLIENTCREATESTRUCT; + +__declspec(dllimport) +LRESULT +__stdcall +DefFrameProcA( + HWND hWnd, + HWND hWndMDIClient , + UINT uMsg, + WPARAM wParam, + LPARAM lParam); +__declspec(dllimport) +LRESULT +__stdcall +DefFrameProcW( + HWND hWnd, + HWND hWndMDIClient , + UINT uMsg, + WPARAM wParam, + LPARAM lParam); + + + + +#line 8358 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) + +LRESULT +__stdcall + + + +#line 8367 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +DefMDIChildProcA( + HWND hWnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam); +__declspec(dllimport) + +LRESULT +__stdcall + + + +#line 8380 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +DefMDIChildProcW( + HWND hWnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam); + + + + +#line 8390 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + +__declspec(dllimport) +BOOL +__stdcall +TranslateMDISysAccel( + HWND hWndClient, + LPMSG lpMsg); + +#line 8401 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +UINT +__stdcall +ArrangeIconicWindows( + HWND hWnd); + +__declspec(dllimport) +HWND +__stdcall +CreateMDIWindowA( + LPSTR lpClassName, + LPSTR lpWindowName, + DWORD dwStyle, + int X, + int Y, + int nWidth, + int nHeight, + HWND hWndParent, + HINSTANCE hInstance, + LPARAM lParam + ); +__declspec(dllimport) +HWND +__stdcall +CreateMDIWindowW( + LPWSTR lpClassName, + LPWSTR lpWindowName, + DWORD dwStyle, + int X, + int Y, + int nWidth, + int nHeight, + HWND hWndParent, + HINSTANCE hInstance, + LPARAM lParam + ); + + + + +#line 8443 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) WORD __stdcall TileWindows(HWND hwndParent, UINT wHow, const RECT * lpRect, UINT cKids, const HWND * lpKids); +__declspec(dllimport) WORD __stdcall CascadeWindows(HWND hwndParent, UINT wHow, const RECT * lpRect, UINT cKids, const HWND * lpKids); +#line 8448 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 8449 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 8451 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +typedef DWORD HELPPOLY; +typedef struct tagMULTIKEYHELPA { + + DWORD mkSize; + + +#line 8463 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + CHAR mkKeylist; + CHAR szKeyphrase[1]; +} MULTIKEYHELPA, *PMULTIKEYHELPA, *LPMULTIKEYHELPA; +typedef struct tagMULTIKEYHELPW { + + DWORD mkSize; + + +#line 8472 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + WCHAR mkKeylist; + WCHAR szKeyphrase[1]; +} MULTIKEYHELPW, *PMULTIKEYHELPW, *LPMULTIKEYHELPW; + + + + + +typedef MULTIKEYHELPA MULTIKEYHELP; +typedef PMULTIKEYHELPA PMULTIKEYHELP; +typedef LPMULTIKEYHELPA LPMULTIKEYHELP; +#line 8484 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +typedef struct tagHELPWININFOA { + int wStructSize; + int x; + int y; + int dx; + int dy; + int wMax; + CHAR rgchMember[2]; +} HELPWININFOA, *PHELPWININFOA, *LPHELPWININFOA; +typedef struct tagHELPWININFOW { + int wStructSize; + int x; + int y; + int dx; + int dy; + int wMax; + WCHAR rgchMember[2]; +} HELPWININFOW, *PHELPWININFOW, *LPHELPWININFOW; + + + + + +typedef HELPWININFOA HELPWININFO; +typedef PHELPWININFOA PHELPWININFO; +typedef LPHELPWININFOA LPHELPWININFO; +#line 8512 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8551 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +__declspec(dllimport) +BOOL +__stdcall +WinHelpA( + HWND hWndMain, + LPCSTR lpszHelp, + UINT uCommand, + DWORD dwData + ); +__declspec(dllimport) +BOOL +__stdcall +WinHelpW( + HWND hWndMain, + LPCWSTR lpszHelp, + UINT uCommand, + DWORD dwData + ); + + + + +#line 8578 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 8580 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + +#line 8587 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8672 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + +#line 8688 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + +#line 8704 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + +#line 8711 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + +#line 8736 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + +typedef struct tagNONCLIENTMETRICSA +{ + UINT cbSize; + int iBorderWidth; + int iScrollWidth; + int iScrollHeight; + int iCaptionWidth; + int iCaptionHeight; + LOGFONTA lfCaptionFont; + int iSmCaptionWidth; + int iSmCaptionHeight; + LOGFONTA lfSmCaptionFont; + int iMenuWidth; + int iMenuHeight; + LOGFONTA lfMenuFont; + LOGFONTA lfStatusFont; + LOGFONTA lfMessageFont; +} NONCLIENTMETRICSA, *PNONCLIENTMETRICSA, * LPNONCLIENTMETRICSA; +typedef struct tagNONCLIENTMETRICSW +{ + UINT cbSize; + int iBorderWidth; + int iScrollWidth; + int iScrollHeight; + int iCaptionWidth; + int iCaptionHeight; + LOGFONTW lfCaptionFont; + int iSmCaptionWidth; + int iSmCaptionHeight; + LOGFONTW lfSmCaptionFont; + int iMenuWidth; + int iMenuHeight; + LOGFONTW lfMenuFont; + LOGFONTW lfStatusFont; + LOGFONTW lfMessageFont; +} NONCLIENTMETRICSW, *PNONCLIENTMETRICSW, * LPNONCLIENTMETRICSW; + + + + + +typedef NONCLIENTMETRICSA NONCLIENTMETRICS; +typedef PNONCLIENTMETRICSA PNONCLIENTMETRICS; +typedef LPNONCLIENTMETRICSA LPNONCLIENTMETRICS; +#line 8793 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 8794 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 8795 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + +typedef struct tagMINIMIZEDMETRICS +{ + UINT cbSize; + int iWidth; + int iHorzGap; + int iVertGap; + int iArrange; +} MINIMIZEDMETRICS, *PMINIMIZEDMETRICS, *LPMINIMIZEDMETRICS; + + + +typedef struct tagICONMETRICSA +{ + UINT cbSize; + int iHorzSpacing; + int iVertSpacing; + int iTitleWrap; + LOGFONTA lfFont; +} ICONMETRICSA, *PICONMETRICSA, *LPICONMETRICSA; +typedef struct tagICONMETRICSW +{ + UINT cbSize; + int iHorzSpacing; + int iVertSpacing; + int iTitleWrap; + LOGFONTW lfFont; +} ICONMETRICSW, *PICONMETRICSW, *LPICONMETRICSW; + + + + + +typedef ICONMETRICSA ICONMETRICS; +typedef PICONMETRICSA PICONMETRICS; +typedef LPICONMETRICSA LPICONMETRICS; +#line 8846 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 8847 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 8848 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +typedef struct tagANIMATIONINFO +{ + UINT cbSize; + int iMinAnimate; +} ANIMATIONINFO, *LPANIMATIONINFO; + +typedef struct tagSERIALKEYSA +{ + UINT cbSize; + DWORD dwFlags; + LPSTR lpszActivePort; + LPSTR lpszPort; + UINT iBaudRate; + UINT iPortState; + UINT iActive; +} SERIALKEYSA, *LPSERIALKEYSA; +typedef struct tagSERIALKEYSW +{ + UINT cbSize; + DWORD dwFlags; + LPWSTR lpszActivePort; + LPWSTR lpszPort; + UINT iBaudRate; + UINT iPortState; + UINT iActive; +} SERIALKEYSW, *LPSERIALKEYSW; + + + + +typedef SERIALKEYSA SERIALKEYS; +typedef LPSERIALKEYSA LPSERIALKEYS; +#line 8882 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + +typedef struct tagHIGHCONTRASTA +{ + UINT cbSize; + DWORD dwFlags; + LPSTR lpszDefaultScheme; +} HIGHCONTRASTA, *LPHIGHCONTRASTA; +typedef struct tagHIGHCONTRASTW +{ + UINT cbSize; + DWORD dwFlags; + LPWSTR lpszDefaultScheme; +} HIGHCONTRASTW, *LPHIGHCONTRASTW; + + + + +typedef HIGHCONTRASTA HIGHCONTRAST; +typedef LPHIGHCONTRASTA LPHIGHCONTRAST; +#line 8908 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +LONG +__stdcall +ChangeDisplaySettingsA( + LPDEVMODEA lpDevMode, + DWORD dwFlags); +__declspec(dllimport) +LONG +__stdcall +ChangeDisplaySettingsW( + LPDEVMODEW lpDevMode, + DWORD dwFlags); + + + + +#line 8957 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +__declspec(dllimport) +LONG +__stdcall +ChangeDisplaySettingsExA( + LPCSTR lpszDeviceName, + LPDEVMODEA lpDevMode, + HWND hwnd, + DWORD dwflags, + LPVOID lParam); +__declspec(dllimport) +LONG +__stdcall +ChangeDisplaySettingsExW( + LPCWSTR lpszDeviceName, + LPDEVMODEW lpDevMode, + HWND hwnd, + DWORD dwflags, + LPVOID lParam); + + + + +#line 8981 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +__declspec(dllimport) +BOOL +__stdcall +EnumDisplaySettingsA( + LPCSTR lpszDeviceName, + DWORD iModeNum, + LPDEVMODEA lpDevMode); +__declspec(dllimport) +BOOL +__stdcall +EnumDisplaySettingsW( + LPCWSTR lpszDeviceName, + DWORD iModeNum, + LPDEVMODEW lpDevMode); + + + + +#line 9004 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + + + + + + + + + + + + + + + + + +#line 9029 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 9031 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 9032 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + +__declspec(dllimport) +BOOL +__stdcall +SystemParametersInfoA( + UINT uiAction, + UINT uiParam, + PVOID pvParam, + UINT fWinIni); +__declspec(dllimport) +BOOL +__stdcall +SystemParametersInfoW( + UINT uiAction, + UINT uiParam, + PVOID pvParam, + UINT fWinIni); + + + + +#line 9055 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +#line 9057 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + +typedef struct tagFILTERKEYS +{ + UINT cbSize; + DWORD dwFlags; + DWORD iWaitMSec; + DWORD iDelayMSec; + DWORD iRepeatMSec; + DWORD iBounceMSec; +} FILTERKEYS, *LPFILTERKEYS; + + + + + + + + + + + + +typedef struct tagSTICKYKEYS +{ + UINT cbSize; + DWORD dwFlags; +} STICKYKEYS, *LPSTICKYKEYS; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 9118 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +typedef struct tagMOUSEKEYS +{ + UINT cbSize; + DWORD dwFlags; + DWORD iMaxSpeed; + DWORD iTimeToMaxSpeed; + DWORD iCtrlSpeed; + DWORD dwReserved1; + DWORD dwReserved2; +} MOUSEKEYS, *LPMOUSEKEYS; + + + + + + + + + + + + + + + + + + +#line 9148 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + +typedef struct tagACCESSTIMEOUT +{ + UINT cbSize; + DWORD dwFlags; + DWORD iTimeOutMSec; +} ACCESSTIMEOUT, *LPACCESSTIMEOUT; + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagSOUNDSENTRYA +{ + UINT cbSize; + DWORD dwFlags; + DWORD iFSTextEffect; + DWORD iFSTextEffectMSec; + DWORD iFSTextEffectColorBits; + DWORD iFSGrafEffect; + DWORD iFSGrafEffectMSec; + DWORD iFSGrafEffectColor; + DWORD iWindowsEffect; + DWORD iWindowsEffectMSec; + LPSTR lpszWindowsEffectDLL; + DWORD iWindowsEffectOrdinal; +} SOUNDSENTRYA, *LPSOUNDSENTRYA; +typedef struct tagSOUNDSENTRYW +{ + UINT cbSize; + DWORD dwFlags; + DWORD iFSTextEffect; + DWORD iFSTextEffectMSec; + DWORD iFSTextEffectColorBits; + DWORD iFSGrafEffect; + DWORD iFSGrafEffectMSec; + DWORD iFSGrafEffectColor; + DWORD iWindowsEffect; + DWORD iWindowsEffectMSec; + LPWSTR lpszWindowsEffectDLL; + DWORD iWindowsEffectOrdinal; +} SOUNDSENTRYW, *LPSOUNDSENTRYW; + + + + +typedef SOUNDSENTRYA SOUNDSENTRY; +typedef LPSOUNDSENTRYA LPSOUNDSENTRY; +#line 9216 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +typedef struct tagTOGGLEKEYS +{ + UINT cbSize; + DWORD dwFlags; +} TOGGLEKEYS, *LPTOGGLEKEYS; + + + + + + + + + + + + + + + +__declspec(dllimport) +void +__stdcall +SetDebugErrorLevel( + DWORD dwLevel + ); + + + + + + + + + +__declspec(dllimport) +void +__stdcall +SetLastErrorEx( + DWORD dwErrCode, + DWORD dwType + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 10129 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + + +#line 10138 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + + + +#line 10146 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" + + + + + +#line 10152 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winuser.h" +#line 167 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 63 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 147 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 371 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 491 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + +#line 501 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + + + + + + + + + + +#line 523 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 579 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef DWORD LCTYPE; + + + + + +typedef DWORD CALTYPE; + + + + + +typedef DWORD CALID; + + + + + + +typedef struct _cpinfo { + UINT MaxCharSize; + BYTE DefaultChar[2]; + BYTE LeadByte[12]; +} CPINFO, *LPCPINFO; + +typedef struct _cpinfoexA { + UINT MaxCharSize; + BYTE DefaultChar[2]; + BYTE LeadByte[12]; + WCHAR UnicodeDefaultChar; + UINT CodePage; + CHAR CodePageName[260]; +} CPINFOEXA, *LPCPINFOEXA; +typedef struct _cpinfoexW { + UINT MaxCharSize; + BYTE DefaultChar[2]; + BYTE LeadByte[12]; + WCHAR UnicodeDefaultChar; + UINT CodePage; + WCHAR CodePageName[260]; +} CPINFOEXW, *LPCPINFOEXW; + + + + +typedef CPINFOEXA CPINFOEX; +typedef LPCPINFOEXA LPCPINFOEX; +#line 664 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + +typedef struct _numberfmtA { + UINT NumDigits; + UINT LeadingZero; + UINT Grouping; + LPSTR lpDecimalSep; + LPSTR lpThousandSep; + UINT NegativeOrder; +} NUMBERFMTA, *LPNUMBERFMTA; +typedef struct _numberfmtW { + UINT NumDigits; + UINT LeadingZero; + UINT Grouping; + LPWSTR lpDecimalSep; + LPWSTR lpThousandSep; + UINT NegativeOrder; +} NUMBERFMTW, *LPNUMBERFMTW; + + + + +typedef NUMBERFMTA NUMBERFMT; +typedef LPNUMBERFMTA LPNUMBERFMT; +#line 693 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + +typedef struct _currencyfmtA { + UINT NumDigits; + UINT LeadingZero; + UINT Grouping; + LPSTR lpDecimalSep; + LPSTR lpThousandSep; + UINT NegativeOrder; + UINT PositiveOrder; + LPSTR lpCurrencySymbol; +} CURRENCYFMTA, *LPCURRENCYFMTA; +typedef struct _currencyfmtW { + UINT NumDigits; + UINT LeadingZero; + UINT Grouping; + LPWSTR lpDecimalSep; + LPWSTR lpThousandSep; + UINT NegativeOrder; + UINT PositiveOrder; + LPWSTR lpCurrencySymbol; +} CURRENCYFMTW, *LPCURRENCYFMTW; + + + + +typedef CURRENCYFMTA CURRENCYFMT; +typedef LPCURRENCYFMTA LPCURRENCYFMT; +#line 726 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + +typedef BOOL (__stdcall* LOCALE_ENUMPROCA)(LPSTR); +typedef BOOL (__stdcall* CODEPAGE_ENUMPROCA)(LPSTR); +typedef BOOL (__stdcall* DATEFMT_ENUMPROCA)(LPSTR); +typedef BOOL (__stdcall* DATEFMT_ENUMPROCEXA)(LPSTR, CALID); +typedef BOOL (__stdcall* TIMEFMT_ENUMPROCA)(LPSTR); +typedef BOOL (__stdcall* CALINFO_ENUMPROCA)(LPSTR); +typedef BOOL (__stdcall* CALINFO_ENUMPROCEXA)(LPSTR, CALID); + +typedef BOOL (__stdcall* LOCALE_ENUMPROCW)(LPWSTR); +typedef BOOL (__stdcall* CODEPAGE_ENUMPROCW)(LPWSTR); +typedef BOOL (__stdcall* DATEFMT_ENUMPROCW)(LPWSTR); +typedef BOOL (__stdcall* DATEFMT_ENUMPROCEXW)(LPWSTR, CALID); +typedef BOOL (__stdcall* TIMEFMT_ENUMPROCW)(LPWSTR); +typedef BOOL (__stdcall* CALINFO_ENUMPROCW)(LPWSTR); +typedef BOOL (__stdcall* CALINFO_ENUMPROCEXW)(LPWSTR, CALID); + + + + + + + + + + + + + + + + + + + +#line 769 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + + + + + + + + + + +#line 791 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +IsValidCodePage( + UINT CodePage); + +__declspec(dllimport) +UINT +__stdcall +GetACP(void); + +__declspec(dllimport) +UINT +__stdcall +GetOEMCP(void); + +__declspec(dllimport) +BOOL +__stdcall +GetCPInfo( + UINT CodePage, + LPCPINFO lpCPInfo); + +__declspec(dllimport) +BOOL +__stdcall +GetCPInfoExA( + UINT CodePage, + DWORD dwFlags, + LPCPINFOEXA lpCPInfoEx); +__declspec(dllimport) +BOOL +__stdcall +GetCPInfoExW( + UINT CodePage, + DWORD dwFlags, + LPCPINFOEXW lpCPInfoEx); + + + + +#line 860 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +BOOL +__stdcall +IsDBCSLeadByte( + BYTE TestChar); + +__declspec(dllimport) +BOOL +__stdcall +IsDBCSLeadByteEx( + UINT CodePage, + BYTE TestChar); + +__declspec(dllimport) +int +__stdcall +MultiByteToWideChar( + UINT CodePage, + DWORD dwFlags, + LPCSTR lpMultiByteStr, + int cchMultiByte, + LPWSTR lpWideCharStr, + int cchWideChar); + +__declspec(dllimport) +int +__stdcall +WideCharToMultiByte( + UINT CodePage, + DWORD dwFlags, + LPCWSTR lpWideCharStr, + int cchWideChar, + LPSTR lpMultiByteStr, + int cchMultiByte, + LPCSTR lpDefaultChar, + LPBOOL lpUsedDefaultChar); + + + + + + +__declspec(dllimport) +int +__stdcall +CompareStringA( + LCID Locale, + DWORD dwCmpFlags, + LPCSTR lpString1, + int cchCount1, + LPCSTR lpString2, + int cchCount2); +__declspec(dllimport) +int +__stdcall +CompareStringW( + LCID Locale, + DWORD dwCmpFlags, + LPCWSTR lpString1, + int cchCount1, + LPCWSTR lpString2, + int cchCount2); + + + + +#line 928 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +int +__stdcall +LCMapStringA( + LCID Locale, + DWORD dwMapFlags, + LPCSTR lpSrcStr, + int cchSrc, + LPSTR lpDestStr, + int cchDest); +__declspec(dllimport) +int +__stdcall +LCMapStringW( + LCID Locale, + DWORD dwMapFlags, + LPCWSTR lpSrcStr, + int cchSrc, + LPWSTR lpDestStr, + int cchDest); + + + + +#line 954 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +int +__stdcall +GetLocaleInfoA( + LCID Locale, + LCTYPE LCType, + LPSTR lpLCData, + int cchData); +__declspec(dllimport) +int +__stdcall +GetLocaleInfoW( + LCID Locale, + LCTYPE LCType, + LPWSTR lpLCData, + int cchData); + + + + +#line 976 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +BOOL +__stdcall +SetLocaleInfoA( + LCID Locale, + LCTYPE LCType, + LPCSTR lpLCData); +__declspec(dllimport) +BOOL +__stdcall +SetLocaleInfoW( + LCID Locale, + LCTYPE LCType, + LPCWSTR lpLCData); + + + + +#line 996 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +int +__stdcall +GetTimeFormatA( + LCID Locale, + DWORD dwFlags, + const SYSTEMTIME *lpTime, + LPCSTR lpFormat, + LPSTR lpTimeStr, + int cchTime); +__declspec(dllimport) +int +__stdcall +GetTimeFormatW( + LCID Locale, + DWORD dwFlags, + const SYSTEMTIME *lpTime, + LPCWSTR lpFormat, + LPWSTR lpTimeStr, + int cchTime); + + + + +#line 1022 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +int +__stdcall +GetDateFormatA( + LCID Locale, + DWORD dwFlags, + const SYSTEMTIME *lpDate, + LPCSTR lpFormat, + LPSTR lpDateStr, + int cchDate); +__declspec(dllimport) +int +__stdcall +GetDateFormatW( + LCID Locale, + DWORD dwFlags, + const SYSTEMTIME *lpDate, + LPCWSTR lpFormat, + LPWSTR lpDateStr, + int cchDate); + + + + +#line 1048 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +int +__stdcall +GetNumberFormatA( + LCID Locale, + DWORD dwFlags, + LPCSTR lpValue, + const NUMBERFMTA *lpFormat, + LPSTR lpNumberStr, + int cchNumber); +__declspec(dllimport) +int +__stdcall +GetNumberFormatW( + LCID Locale, + DWORD dwFlags, + LPCWSTR lpValue, + const NUMBERFMTW *lpFormat, + LPWSTR lpNumberStr, + int cchNumber); + + + + +#line 1074 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +int +__stdcall +GetCurrencyFormatA( + LCID Locale, + DWORD dwFlags, + LPCSTR lpValue, + const CURRENCYFMTA *lpFormat, + LPSTR lpCurrencyStr, + int cchCurrency); +__declspec(dllimport) +int +__stdcall +GetCurrencyFormatW( + LCID Locale, + DWORD dwFlags, + LPCWSTR lpValue, + const CURRENCYFMTW *lpFormat, + LPWSTR lpCurrencyStr, + int cchCurrency); + + + + +#line 1100 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +BOOL +__stdcall +EnumCalendarInfoA( + CALINFO_ENUMPROCA lpCalInfoEnumProc, + LCID Locale, + CALID Calendar, + CALTYPE CalType); +__declspec(dllimport) +BOOL +__stdcall +EnumCalendarInfoW( + CALINFO_ENUMPROCW lpCalInfoEnumProc, + LCID Locale, + CALID Calendar, + CALTYPE CalType); + + + + +#line 1122 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + + + + + + + + + + + + +#line 1146 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +BOOL +__stdcall +EnumTimeFormatsA( + TIMEFMT_ENUMPROCA lpTimeFmtEnumProc, + LCID Locale, + DWORD dwFlags); +__declspec(dllimport) +BOOL +__stdcall +EnumTimeFormatsW( + TIMEFMT_ENUMPROCW lpTimeFmtEnumProc, + LCID Locale, + DWORD dwFlags); + + + + +#line 1166 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +BOOL +__stdcall +EnumDateFormatsA( + DATEFMT_ENUMPROCA lpDateFmtEnumProc, + LCID Locale, + DWORD dwFlags); +__declspec(dllimport) +BOOL +__stdcall +EnumDateFormatsW( + DATEFMT_ENUMPROCW lpDateFmtEnumProc, + LCID Locale, + DWORD dwFlags); + + + + +#line 1186 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + + + + + + + + + + +#line 1208 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +BOOL +__stdcall +IsValidLocale( + LCID Locale, + DWORD dwFlags); + +__declspec(dllimport) +LCID +__stdcall +ConvertDefaultLocale( + LCID Locale); + +__declspec(dllimport) +LCID +__stdcall +GetThreadLocale(void); + +__declspec(dllimport) +BOOL +__stdcall +SetThreadLocale( + LCID Locale + ); + +__declspec(dllimport) +LANGID +__stdcall +GetSystemDefaultLangID(void); + +__declspec(dllimport) +LANGID +__stdcall +GetUserDefaultLangID(void); + +__declspec(dllimport) +LCID +__stdcall +GetSystemDefaultLCID(void); + +__declspec(dllimport) +LCID +__stdcall +GetUserDefaultLCID(void); + + + + + + +__declspec(dllimport) +BOOL +__stdcall +GetStringTypeExA( + LCID Locale, + DWORD dwInfoType, + LPCSTR lpSrcStr, + int cchSrc, + LPWORD lpCharType); +__declspec(dllimport) +BOOL +__stdcall +GetStringTypeExW( + LCID Locale, + DWORD dwInfoType, + LPCWSTR lpSrcStr, + int cchSrc, + LPWORD lpCharType); + + + + +#line 1282 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +GetStringTypeA( + LCID Locale, + DWORD dwInfoType, + LPCSTR lpSrcStr, + int cchSrc, + LPWORD lpCharType); + +__declspec(dllimport) +BOOL +__stdcall +GetStringTypeW( + DWORD dwInfoType, + LPCWSTR lpSrcStr, + int cchSrc, + LPWORD lpCharType); + + +__declspec(dllimport) +int +__stdcall +FoldStringA( + DWORD dwMapFlags, + LPCSTR lpSrcStr, + int cchSrc, + LPSTR lpDestStr, + int cchDest); +__declspec(dllimport) +int +__stdcall +FoldStringW( + DWORD dwMapFlags, + LPCWSTR lpSrcStr, + int cchSrc, + LPWSTR lpDestStr, + int cchDest); + + + + +#line 1337 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +BOOL +__stdcall +EnumSystemLocalesA( + LOCALE_ENUMPROCA lpLocaleEnumProc, + DWORD dwFlags); +__declspec(dllimport) +BOOL +__stdcall +EnumSystemLocalesW( + LOCALE_ENUMPROCW lpLocaleEnumProc, + DWORD dwFlags); + + + + +#line 1355 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + +__declspec(dllimport) +BOOL +__stdcall +EnumSystemCodePagesA( + CODEPAGE_ENUMPROCA lpCodePageEnumProc, + DWORD dwFlags); +__declspec(dllimport) +BOOL +__stdcall +EnumSystemCodePagesW( + CODEPAGE_ENUMPROCW lpCodePageEnumProc, + DWORD dwFlags); + + + + +#line 1373 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + +#line 1376 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" + + + + + + +#line 1383 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnls.h" +#line 173 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 174 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _COORD { + SHORT X; + SHORT Y; +} COORD, *PCOORD; + +typedef struct _SMALL_RECT { + SHORT Left; + SHORT Top; + SHORT Right; + SHORT Bottom; +} SMALL_RECT, *PSMALL_RECT; + +typedef struct _KEY_EVENT_RECORD { + BOOL bKeyDown; + WORD wRepeatCount; + WORD wVirtualKeyCode; + WORD wVirtualScanCode; + union { + WCHAR UnicodeChar; + CHAR AsciiChar; + } uChar; + DWORD dwControlKeyState; +} KEY_EVENT_RECORD, *PKEY_EVENT_RECORD; + + + + + + + + + + + + + + + + + + + + + + +typedef struct _MOUSE_EVENT_RECORD { + COORD dwMousePosition; + DWORD dwButtonState; + DWORD dwControlKeyState; + DWORD dwEventFlags; +} MOUSE_EVENT_RECORD, *PMOUSE_EVENT_RECORD; + + + + + + + + + + + + + + + + + + + +typedef struct _WINDOW_BUFFER_SIZE_RECORD { + COORD dwSize; +} WINDOW_BUFFER_SIZE_RECORD, *PWINDOW_BUFFER_SIZE_RECORD; + +typedef struct _MENU_EVENT_RECORD { + UINT dwCommandId; +} MENU_EVENT_RECORD, *PMENU_EVENT_RECORD; + +typedef struct _FOCUS_EVENT_RECORD { + BOOL bSetFocus; +} FOCUS_EVENT_RECORD, *PFOCUS_EVENT_RECORD; + +typedef struct _INPUT_RECORD { + WORD EventType; + union { + KEY_EVENT_RECORD KeyEvent; + MOUSE_EVENT_RECORD MouseEvent; + WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent; + MENU_EVENT_RECORD MenuEvent; + FOCUS_EVENT_RECORD FocusEvent; + } Event; +} INPUT_RECORD, *PINPUT_RECORD; + + + + + + + + + + + +typedef struct _CHAR_INFO { + union { + WCHAR UnicodeChar; + CHAR AsciiChar; + } Char; + WORD Attributes; +} CHAR_INFO, *PCHAR_INFO; + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _CONSOLE_SCREEN_BUFFER_INFO { + COORD dwSize; + COORD dwCursorPosition; + WORD wAttributes; + SMALL_RECT srWindow; + COORD dwMaximumWindowSize; +} CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO; + +typedef struct _CONSOLE_CURSOR_INFO { + DWORD dwSize; + BOOL bVisible; +} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO; + + + + + +typedef +BOOL +(__stdcall *PHANDLER_ROUTINE)( + DWORD CtrlType + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +PeekConsoleInputA( + HANDLE hConsoleInput, + PINPUT_RECORD lpBuffer, + DWORD nLength, + LPDWORD lpNumberOfEventsRead + ); +__declspec(dllimport) +BOOL +__stdcall +PeekConsoleInputW( + HANDLE hConsoleInput, + PINPUT_RECORD lpBuffer, + DWORD nLength, + LPDWORD lpNumberOfEventsRead + ); + + + + +#line 238 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +ReadConsoleInputA( + HANDLE hConsoleInput, + PINPUT_RECORD lpBuffer, + DWORD nLength, + LPDWORD lpNumberOfEventsRead + ); +__declspec(dllimport) +BOOL +__stdcall +ReadConsoleInputW( + HANDLE hConsoleInput, + PINPUT_RECORD lpBuffer, + DWORD nLength, + LPDWORD lpNumberOfEventsRead + ); + + + + +#line 262 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +WriteConsoleInputA( + HANDLE hConsoleInput, + const INPUT_RECORD *lpBuffer, + DWORD nLength, + LPDWORD lpNumberOfEventsWritten + ); +__declspec(dllimport) +BOOL +__stdcall +WriteConsoleInputW( + HANDLE hConsoleInput, + const INPUT_RECORD *lpBuffer, + DWORD nLength, + LPDWORD lpNumberOfEventsWritten + ); + + + + +#line 286 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +ReadConsoleOutputA( + HANDLE hConsoleOutput, + PCHAR_INFO lpBuffer, + COORD dwBufferSize, + COORD dwBufferCoord, + PSMALL_RECT lpReadRegion + ); +__declspec(dllimport) +BOOL +__stdcall +ReadConsoleOutputW( + HANDLE hConsoleOutput, + PCHAR_INFO lpBuffer, + COORD dwBufferSize, + COORD dwBufferCoord, + PSMALL_RECT lpReadRegion + ); + + + + +#line 312 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +WriteConsoleOutputA( + HANDLE hConsoleOutput, + const CHAR_INFO *lpBuffer, + COORD dwBufferSize, + COORD dwBufferCoord, + PSMALL_RECT lpWriteRegion + ); +__declspec(dllimport) +BOOL +__stdcall +WriteConsoleOutputW( + HANDLE hConsoleOutput, + const CHAR_INFO *lpBuffer, + COORD dwBufferSize, + COORD dwBufferCoord, + PSMALL_RECT lpWriteRegion + ); + + + + +#line 338 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +ReadConsoleOutputCharacterA( + HANDLE hConsoleOutput, + LPSTR lpCharacter, + DWORD nLength, + COORD dwReadCoord, + LPDWORD lpNumberOfCharsRead + ); +__declspec(dllimport) +BOOL +__stdcall +ReadConsoleOutputCharacterW( + HANDLE hConsoleOutput, + LPWSTR lpCharacter, + DWORD nLength, + COORD dwReadCoord, + LPDWORD lpNumberOfCharsRead + ); + + + + +#line 364 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +ReadConsoleOutputAttribute( + HANDLE hConsoleOutput, + LPWORD lpAttribute, + DWORD nLength, + COORD dwReadCoord, + LPDWORD lpNumberOfAttrsRead + ); + +__declspec(dllimport) +BOOL +__stdcall +WriteConsoleOutputCharacterA( + HANDLE hConsoleOutput, + LPCSTR lpCharacter, + DWORD nLength, + COORD dwWriteCoord, + LPDWORD lpNumberOfCharsWritten + ); +__declspec(dllimport) +BOOL +__stdcall +WriteConsoleOutputCharacterW( + HANDLE hConsoleOutput, + LPCWSTR lpCharacter, + DWORD nLength, + COORD dwWriteCoord, + LPDWORD lpNumberOfCharsWritten + ); + + + + +#line 401 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +WriteConsoleOutputAttribute( + HANDLE hConsoleOutput, + const WORD *lpAttribute, + DWORD nLength, + COORD dwWriteCoord, + LPDWORD lpNumberOfAttrsWritten + ); + +__declspec(dllimport) +BOOL +__stdcall +FillConsoleOutputCharacterA( + HANDLE hConsoleOutput, + CHAR cCharacter, + DWORD nLength, + COORD dwWriteCoord, + LPDWORD lpNumberOfCharsWritten + ); +__declspec(dllimport) +BOOL +__stdcall +FillConsoleOutputCharacterW( + HANDLE hConsoleOutput, + WCHAR cCharacter, + DWORD nLength, + COORD dwWriteCoord, + LPDWORD lpNumberOfCharsWritten + ); + + + + +#line 438 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +FillConsoleOutputAttribute( + HANDLE hConsoleOutput, + WORD wAttribute, + DWORD nLength, + COORD dwWriteCoord, + LPDWORD lpNumberOfAttrsWritten + ); + +__declspec(dllimport) +BOOL +__stdcall +GetConsoleMode( + HANDLE hConsoleHandle, + LPDWORD lpMode + ); + +__declspec(dllimport) +BOOL +__stdcall +GetNumberOfConsoleInputEvents( + HANDLE hConsoleInput, + LPDWORD lpNumberOfEvents + ); + +__declspec(dllimport) +BOOL +__stdcall +GetConsoleScreenBufferInfo( + HANDLE hConsoleOutput, + PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo + ); + +__declspec(dllimport) +COORD +__stdcall +GetLargestConsoleWindowSize( + HANDLE hConsoleOutput + ); + +__declspec(dllimport) +BOOL +__stdcall +GetConsoleCursorInfo( + HANDLE hConsoleOutput, + PCONSOLE_CURSOR_INFO lpConsoleCursorInfo + ); + +__declspec(dllimport) +BOOL +__stdcall +GetNumberOfConsoleMouseButtons( + LPDWORD lpNumberOfMouseButtons + ); + +__declspec(dllimport) +BOOL +__stdcall +SetConsoleMode( + HANDLE hConsoleHandle, + DWORD dwMode + ); + +__declspec(dllimport) +BOOL +__stdcall +SetConsoleActiveScreenBuffer( + HANDLE hConsoleOutput + ); + +__declspec(dllimport) +BOOL +__stdcall +FlushConsoleInputBuffer( + HANDLE hConsoleInput + ); + +__declspec(dllimport) +BOOL +__stdcall +SetConsoleScreenBufferSize( + HANDLE hConsoleOutput, + COORD dwSize + ); + +__declspec(dllimport) +BOOL +__stdcall +SetConsoleCursorPosition( + HANDLE hConsoleOutput, + COORD dwCursorPosition + ); + +__declspec(dllimport) +BOOL +__stdcall +SetConsoleCursorInfo( + HANDLE hConsoleOutput, + const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo + ); + +__declspec(dllimport) +BOOL +__stdcall +ScrollConsoleScreenBufferA( + HANDLE hConsoleOutput, + const SMALL_RECT *lpScrollRectangle, + const SMALL_RECT *lpClipRectangle, + COORD dwDestinationOrigin, + const CHAR_INFO *lpFill + ); +__declspec(dllimport) +BOOL +__stdcall +ScrollConsoleScreenBufferW( + HANDLE hConsoleOutput, + const SMALL_RECT *lpScrollRectangle, + const SMALL_RECT *lpClipRectangle, + COORD dwDestinationOrigin, + const CHAR_INFO *lpFill + ); + + + + +#line 567 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +SetConsoleWindowInfo( + HANDLE hConsoleOutput, + BOOL bAbsolute, + const SMALL_RECT *lpConsoleWindow + ); + +__declspec(dllimport) +BOOL +__stdcall +SetConsoleTextAttribute( + HANDLE hConsoleOutput, + WORD wAttributes + ); + +__declspec(dllimport) +BOOL +__stdcall +SetConsoleCtrlHandler( + PHANDLER_ROUTINE HandlerRoutine, + BOOL Add + ); + +__declspec(dllimport) +BOOL +__stdcall +GenerateConsoleCtrlEvent( + DWORD dwCtrlEvent, + DWORD dwProcessGroupId + ); + +__declspec(dllimport) +BOOL +__stdcall +AllocConsole( void ); + +__declspec(dllimport) +BOOL +__stdcall +FreeConsole( void ); + + +__declspec(dllimport) +DWORD +__stdcall +GetConsoleTitleA( + LPSTR lpConsoleTitle, + DWORD nSize + ); +__declspec(dllimport) +DWORD +__stdcall +GetConsoleTitleW( + LPWSTR lpConsoleTitle, + DWORD nSize + ); + + + + +#line 631 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +SetConsoleTitleA( + LPCSTR lpConsoleTitle + ); +__declspec(dllimport) +BOOL +__stdcall +SetConsoleTitleW( + LPCWSTR lpConsoleTitle + ); + + + + +#line 649 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +ReadConsoleA( + HANDLE hConsoleInput, + LPVOID lpBuffer, + DWORD nNumberOfCharsToRead, + LPDWORD lpNumberOfCharsRead, + LPVOID lpReserved + ); +__declspec(dllimport) +BOOL +__stdcall +ReadConsoleW( + HANDLE hConsoleInput, + LPVOID lpBuffer, + DWORD nNumberOfCharsToRead, + LPDWORD lpNumberOfCharsRead, + LPVOID lpReserved + ); + + + + +#line 675 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +__declspec(dllimport) +BOOL +__stdcall +WriteConsoleA( + HANDLE hConsoleOutput, + const void *lpBuffer, + DWORD nNumberOfCharsToWrite, + LPDWORD lpNumberOfCharsWritten, + LPVOID lpReserved + ); +__declspec(dllimport) +BOOL +__stdcall +WriteConsoleW( + HANDLE hConsoleOutput, + const void *lpBuffer, + DWORD nNumberOfCharsToWrite, + LPDWORD lpNumberOfCharsWritten, + LPVOID lpReserved + ); + + + + +#line 701 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + + + +__declspec(dllimport) +HANDLE +__stdcall +CreateConsoleScreenBuffer( + DWORD dwDesiredAccess, + DWORD dwShareMode, + const SECURITY_ATTRIBUTES *lpSecurityAttributes, + DWORD dwFlags, + LPVOID lpScreenBufferData + ); + +__declspec(dllimport) +UINT +__stdcall +GetConsoleCP( void ); + +__declspec(dllimport) +BOOL +__stdcall +SetConsoleCP( + UINT wCodePageID + ); + +__declspec(dllimport) +UINT +__stdcall +GetConsoleOutputCP( void ); + +__declspec(dllimport) +BOOL +__stdcall +SetConsoleOutputCP( + UINT wCodePageID + ); + + + + + +#line 744 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincon.h" + +#line 176 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winver.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 31 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winver.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagVS_FIXEDFILEINFO +{ + DWORD dwSignature; + DWORD dwStrucVersion; + DWORD dwFileVersionMS; + DWORD dwFileVersionLS; + DWORD dwProductVersionMS; + DWORD dwProductVersionLS; + DWORD dwFileFlagsMask; + DWORD dwFileFlags; + DWORD dwFileOS; + DWORD dwFileType; + DWORD dwFileSubtype; + DWORD dwFileDateMS; + DWORD dwFileDateLS; +} VS_FIXEDFILEINFO; + + + +DWORD +__stdcall +VerFindFileA( + DWORD uFlags, + LPSTR szFileName, + LPSTR szWinDir, + LPSTR szAppDir, + LPSTR szCurDir, + PUINT lpuCurDirLen, + LPSTR szDestDir, + PUINT lpuDestDirLen + ); +DWORD +__stdcall +VerFindFileW( + DWORD uFlags, + LPWSTR szFileName, + LPWSTR szWinDir, + LPWSTR szAppDir, + LPWSTR szCurDir, + PUINT lpuCurDirLen, + LPWSTR szDestDir, + PUINT lpuDestDirLen + ); + + + + +#line 176 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winver.h" + +DWORD +__stdcall +VerInstallFileA( + DWORD uFlags, + LPSTR szSrcFileName, + LPSTR szDestFileName, + LPSTR szSrcDir, + LPSTR szDestDir, + LPSTR szCurDir, + LPSTR szTmpFile, + PUINT lpuTmpFileLen + ); +DWORD +__stdcall +VerInstallFileW( + DWORD uFlags, + LPWSTR szSrcFileName, + LPWSTR szDestFileName, + LPWSTR szSrcDir, + LPWSTR szDestDir, + LPWSTR szCurDir, + LPWSTR szTmpFile, + PUINT lpuTmpFileLen + ); + + + + +#line 206 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winver.h" + + +DWORD +__stdcall +GetFileVersionInfoSizeA( + LPSTR lptstrFilename, + LPDWORD lpdwHandle + ); + +DWORD +__stdcall +GetFileVersionInfoSizeW( + LPWSTR lptstrFilename, + LPDWORD lpdwHandle + ); + + + + +#line 226 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winver.h" + + +BOOL +__stdcall +GetFileVersionInfoA( + LPSTR lptstrFilename, + DWORD dwHandle, + DWORD dwLen, + LPVOID lpData + ); + +BOOL +__stdcall +GetFileVersionInfoW( + LPWSTR lptstrFilename, + DWORD dwHandle, + DWORD dwLen, + LPVOID lpData + ); + + + + +#line 250 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winver.h" + +DWORD +__stdcall +VerLanguageNameA( + DWORD wLang, + LPSTR szLang, + DWORD nSize + ); +DWORD +__stdcall +VerLanguageNameW( + DWORD wLang, + LPWSTR szLang, + DWORD nSize + ); + + + + +#line 270 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winver.h" + +BOOL +__stdcall +VerQueryValueA( + const LPVOID pBlock, + LPSTR lpSubBlock, + LPVOID * lplpBuffer, + PUINT puLen + ); +BOOL +__stdcall +VerQueryValueW( + const LPVOID pBlock, + LPWSTR lpSubBlock, + LPVOID * lplpBuffer, + PUINT puLen + ); + + + + +#line 292 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winver.h" + +#line 294 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winver.h" + + + + + +#line 300 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winver.h" +#line 177 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 178 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef ACCESS_MASK REGSAM; + + + + + +struct HKEY__ { int unused; }; typedef struct HKEY__ *HKEY; +typedef HKEY *PHKEY; +#line 45 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + + + + + + + + + + + + + + + + + + + +struct val_context { + int valuelen; + LPVOID value_context; + LPVOID val_buff_ptr; +}; + +typedef struct val_context *PVALCONTEXT; + +typedef struct pvalueA { + LPSTR pv_valuename; + int pv_valuelen; + LPVOID pv_value_context; + DWORD pv_type; +}PVALUEA, *PPVALUEA; +typedef struct pvalueW { + LPWSTR pv_valuename; + int pv_valuelen; + LPVOID pv_value_context; + DWORD pv_type; +}PVALUEW, *PPVALUEW; + + + + +typedef PVALUEA PVALUE; +typedef PPVALUEA PPVALUE; +#line 91 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +typedef +DWORD _cdecl +QUERYHANDLER (LPVOID keycontext, PVALCONTEXT val_list, DWORD num_vals, + LPVOID outputbuffer, DWORD *total_outlen, DWORD input_blen); + +typedef QUERYHANDLER *PQUERYHANDLER; + +typedef struct provider_info { + PQUERYHANDLER pi_R0_1val; + PQUERYHANDLER pi_R0_allvals; + PQUERYHANDLER pi_R3_1val; + PQUERYHANDLER pi_R3_allvals; + DWORD pi_flags; + LPVOID pi_key_context; +}REG_PROVIDER; + +typedef struct provider_info *PPROVIDER; + +typedef struct value_entA { + LPSTR ve_valuename; + DWORD ve_valuelen; + DWORD ve_valueptr; + DWORD ve_type; +}VALENTA, *PVALENTA; +typedef struct value_entW { + LPWSTR ve_valuename; + DWORD ve_valuelen; + DWORD ve_valueptr; + DWORD ve_type; +}VALENTW, *PVALENTW; + + + + +typedef VALENTA VALENT; +typedef PVALENTA PVALENT; +#line 129 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +#line 131 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + + +#line 134 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + + + + + + + + + + + + + +__declspec(dllimport) +LONG +__stdcall +RegCloseKey ( + HKEY hKey + ); + +__declspec(dllimport) +LONG +__stdcall +RegOverridePredefKey ( + HKEY hKey, + HKEY hNewHKey + ); + +__declspec(dllimport) +LONG +__stdcall +RegConnectRegistryA ( + LPCSTR lpMachineName, + HKEY hKey, + PHKEY phkResult + ); +__declspec(dllimport) +LONG +__stdcall +RegConnectRegistryW ( + LPCWSTR lpMachineName, + HKEY hKey, + PHKEY phkResult + ); + + + + +#line 183 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegCreateKeyA ( + HKEY hKey, + LPCSTR lpSubKey, + PHKEY phkResult + ); +__declspec(dllimport) +LONG +__stdcall +RegCreateKeyW ( + HKEY hKey, + LPCWSTR lpSubKey, + PHKEY phkResult + ); + + + + +#line 205 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegCreateKeyExA ( + HKEY hKey, + LPCSTR lpSubKey, + DWORD Reserved, + LPSTR lpClass, + DWORD dwOptions, + REGSAM samDesired, + LPSECURITY_ATTRIBUTES lpSecurityAttributes, + PHKEY phkResult, + LPDWORD lpdwDisposition + ); +__declspec(dllimport) +LONG +__stdcall +RegCreateKeyExW ( + HKEY hKey, + LPCWSTR lpSubKey, + DWORD Reserved, + LPWSTR lpClass, + DWORD dwOptions, + REGSAM samDesired, + LPSECURITY_ATTRIBUTES lpSecurityAttributes, + PHKEY phkResult, + LPDWORD lpdwDisposition + ); + + + + +#line 239 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegDeleteKeyA ( + HKEY hKey, + LPCSTR lpSubKey + ); +__declspec(dllimport) +LONG +__stdcall +RegDeleteKeyW ( + HKEY hKey, + LPCWSTR lpSubKey + ); + + + + +#line 259 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegDeleteValueA ( + HKEY hKey, + LPCSTR lpValueName + ); +__declspec(dllimport) +LONG +__stdcall +RegDeleteValueW ( + HKEY hKey, + LPCWSTR lpValueName + ); + + + + +#line 279 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegEnumKeyA ( + HKEY hKey, + DWORD dwIndex, + LPSTR lpName, + DWORD cbName + ); +__declspec(dllimport) +LONG +__stdcall +RegEnumKeyW ( + HKEY hKey, + DWORD dwIndex, + LPWSTR lpName, + DWORD cbName + ); + + + + +#line 303 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegEnumKeyExA ( + HKEY hKey, + DWORD dwIndex, + LPSTR lpName, + LPDWORD lpcbName, + LPDWORD lpReserved, + LPSTR lpClass, + LPDWORD lpcbClass, + PFILETIME lpftLastWriteTime + ); +__declspec(dllimport) +LONG +__stdcall +RegEnumKeyExW ( + HKEY hKey, + DWORD dwIndex, + LPWSTR lpName, + LPDWORD lpcbName, + LPDWORD lpReserved, + LPWSTR lpClass, + LPDWORD lpcbClass, + PFILETIME lpftLastWriteTime + ); + + + + +#line 335 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegEnumValueA ( + HKEY hKey, + DWORD dwIndex, + LPSTR lpValueName, + LPDWORD lpcbValueName, + LPDWORD lpReserved, + LPDWORD lpType, + LPBYTE lpData, + LPDWORD lpcbData + ); +__declspec(dllimport) +LONG +__stdcall +RegEnumValueW ( + HKEY hKey, + DWORD dwIndex, + LPWSTR lpValueName, + LPDWORD lpcbValueName, + LPDWORD lpReserved, + LPDWORD lpType, + LPBYTE lpData, + LPDWORD lpcbData + ); + + + + +#line 367 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegFlushKey ( + HKEY hKey + ); + +__declspec(dllimport) +LONG +__stdcall +RegGetKeySecurity ( + HKEY hKey, + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR pSecurityDescriptor, + LPDWORD lpcbSecurityDescriptor + ); + +__declspec(dllimport) +LONG +__stdcall +RegLoadKeyA ( + HKEY hKey, + LPCSTR lpSubKey, + LPCSTR lpFile + ); +__declspec(dllimport) +LONG +__stdcall +RegLoadKeyW ( + HKEY hKey, + LPCWSTR lpSubKey, + LPCWSTR lpFile + ); + + + + +#line 406 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegNotifyChangeKeyValue ( + HKEY hKey, + BOOL bWatchSubtree, + DWORD dwNotifyFilter, + HANDLE hEvent, + BOOL fAsynchronus + ); + +__declspec(dllimport) +LONG +__stdcall +RegOpenKeyA ( + HKEY hKey, + LPCSTR lpSubKey, + PHKEY phkResult + ); +__declspec(dllimport) +LONG +__stdcall +RegOpenKeyW ( + HKEY hKey, + LPCWSTR lpSubKey, + PHKEY phkResult + ); + + + + +#line 439 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegOpenKeyExA ( + HKEY hKey, + LPCSTR lpSubKey, + DWORD ulOptions, + REGSAM samDesired, + PHKEY phkResult + ); +__declspec(dllimport) +LONG +__stdcall +RegOpenKeyExW ( + HKEY hKey, + LPCWSTR lpSubKey, + DWORD ulOptions, + REGSAM samDesired, + PHKEY phkResult + ); + + + + +#line 465 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegQueryInfoKeyA ( + HKEY hKey, + LPSTR lpClass, + LPDWORD lpcbClass, + LPDWORD lpReserved, + LPDWORD lpcSubKeys, + LPDWORD lpcbMaxSubKeyLen, + LPDWORD lpcbMaxClassLen, + LPDWORD lpcValues, + LPDWORD lpcbMaxValueNameLen, + LPDWORD lpcbMaxValueLen, + LPDWORD lpcbSecurityDescriptor, + PFILETIME lpftLastWriteTime + ); +__declspec(dllimport) +LONG +__stdcall +RegQueryInfoKeyW ( + HKEY hKey, + LPWSTR lpClass, + LPDWORD lpcbClass, + LPDWORD lpReserved, + LPDWORD lpcSubKeys, + LPDWORD lpcbMaxSubKeyLen, + LPDWORD lpcbMaxClassLen, + LPDWORD lpcValues, + LPDWORD lpcbMaxValueNameLen, + LPDWORD lpcbMaxValueLen, + LPDWORD lpcbSecurityDescriptor, + PFILETIME lpftLastWriteTime + ); + + + + +#line 505 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegQueryValueA ( + HKEY hKey, + LPCSTR lpSubKey, + LPSTR lpValue, + PLONG lpcbValue + ); +__declspec(dllimport) +LONG +__stdcall +RegQueryValueW ( + HKEY hKey, + LPCWSTR lpSubKey, + LPWSTR lpValue, + PLONG lpcbValue + ); + + + + +#line 529 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + + +__declspec(dllimport) +LONG +__stdcall +RegQueryMultipleValuesA ( + HKEY hKey, + PVALENTA val_list, + DWORD num_vals, + LPSTR lpValueBuf, + LPDWORD ldwTotsize + ); +__declspec(dllimport) +LONG +__stdcall +RegQueryMultipleValuesW ( + HKEY hKey, + PVALENTW val_list, + DWORD num_vals, + LPWSTR lpValueBuf, + LPDWORD ldwTotsize + ); + + + + +#line 556 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" +#line 557 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegQueryValueExA ( + HKEY hKey, + LPCSTR lpValueName, + LPDWORD lpReserved, + LPDWORD lpType, + LPBYTE lpData, + LPDWORD lpcbData + ); +__declspec(dllimport) +LONG +__stdcall +RegQueryValueExW ( + HKEY hKey, + LPCWSTR lpValueName, + LPDWORD lpReserved, + LPDWORD lpType, + LPBYTE lpData, + LPDWORD lpcbData + ); + + + + +#line 585 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegReplaceKeyA ( + HKEY hKey, + LPCSTR lpSubKey, + LPCSTR lpNewFile, + LPCSTR lpOldFile + ); +__declspec(dllimport) +LONG +__stdcall +RegReplaceKeyW ( + HKEY hKey, + LPCWSTR lpSubKey, + LPCWSTR lpNewFile, + LPCWSTR lpOldFile + ); + + + + +#line 609 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegRestoreKeyA ( + HKEY hKey, + LPCSTR lpFile, + DWORD dwFlags + ); +__declspec(dllimport) +LONG +__stdcall +RegRestoreKeyW ( + HKEY hKey, + LPCWSTR lpFile, + DWORD dwFlags + ); + + + + +#line 631 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegSaveKeyA ( + HKEY hKey, + LPCSTR lpFile, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); +__declspec(dllimport) +LONG +__stdcall +RegSaveKeyW ( + HKEY hKey, + LPCWSTR lpFile, + LPSECURITY_ATTRIBUTES lpSecurityAttributes + ); + + + + +#line 653 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegSetKeySecurity ( + HKEY hKey, + SECURITY_INFORMATION SecurityInformation, + PSECURITY_DESCRIPTOR pSecurityDescriptor + ); + +__declspec(dllimport) +LONG +__stdcall +RegSetValueA ( + HKEY hKey, + LPCSTR lpSubKey, + DWORD dwType, + LPCSTR lpData, + DWORD cbData + ); +__declspec(dllimport) +LONG +__stdcall +RegSetValueW ( + HKEY hKey, + LPCWSTR lpSubKey, + DWORD dwType, + LPCWSTR lpData, + DWORD cbData + ); + + + + +#line 688 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + + +__declspec(dllimport) +LONG +__stdcall +RegSetValueExA ( + HKEY hKey, + LPCSTR lpValueName, + DWORD Reserved, + DWORD dwType, + const BYTE* lpData, + DWORD cbData + ); +__declspec(dllimport) +LONG +__stdcall +RegSetValueExW ( + HKEY hKey, + LPCWSTR lpValueName, + DWORD Reserved, + DWORD dwType, + const BYTE* lpData, + DWORD cbData + ); + + + + +#line 717 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +__declspec(dllimport) +LONG +__stdcall +RegUnLoadKeyA ( + HKEY hKey, + LPCSTR lpSubKey + ); +__declspec(dllimport) +LONG +__stdcall +RegUnLoadKeyW ( + HKEY hKey, + LPCWSTR lpSubKey + ); + + + + +#line 737 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + + + + + +__declspec(dllimport) +BOOL +__stdcall +InitiateSystemShutdownA( + LPSTR lpMachineName, + LPSTR lpMessage, + DWORD dwTimeout, + BOOL bForceAppsClosed, + BOOL bRebootAfterShutdown + ); +__declspec(dllimport) +BOOL +__stdcall +InitiateSystemShutdownW( + LPWSTR lpMachineName, + LPWSTR lpMessage, + DWORD dwTimeout, + BOOL bForceAppsClosed, + BOOL bRebootAfterShutdown + ); + + + + +#line 767 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + + +__declspec(dllimport) +BOOL +__stdcall +AbortSystemShutdownA( + LPSTR lpMachineName + ); +__declspec(dllimport) +BOOL +__stdcall +AbortSystemShutdownW( + LPWSTR lpMachineName + ); + + + + +#line 786 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + + + + + + +#line 793 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winreg.h" + +#line 180 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 181 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 79 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + +#line 86 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + + + + +#line 96 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + + + + + + + + +#line 110 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + +#line 114 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +typedef struct _NETRESOURCEA { + DWORD dwScope; + DWORD dwType; + DWORD dwDisplayType; + DWORD dwUsage; + LPSTR lpLocalName; + LPSTR lpRemoteName; + LPSTR lpComment ; + LPSTR lpProvider; +}NETRESOURCEA, *LPNETRESOURCEA; +typedef struct _NETRESOURCEW { + DWORD dwScope; + DWORD dwType; + DWORD dwDisplayType; + DWORD dwUsage; + LPWSTR lpLocalName; + LPWSTR lpRemoteName; + LPWSTR lpComment ; + LPWSTR lpProvider; +}NETRESOURCEW, *LPNETRESOURCEW; + + + + +typedef NETRESOURCEA NETRESOURCE; +typedef LPNETRESOURCEA LPNETRESOURCE; +#line 142 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + + + + + + + + + + + + + + + + +#line 164 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +DWORD __stdcall +WNetAddConnectionA( + LPCSTR lpRemoteName, + LPCSTR lpPassword, + LPCSTR lpLocalName + ); +DWORD __stdcall +WNetAddConnectionW( + LPCWSTR lpRemoteName, + LPCWSTR lpPassword, + LPCWSTR lpLocalName + ); + + + + +#line 182 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +DWORD __stdcall +WNetAddConnection2A( + LPNETRESOURCEA lpNetResource, + LPCSTR lpPassword, + LPCSTR lpUserName, + DWORD dwFlags + ); +DWORD __stdcall +WNetAddConnection2W( + LPNETRESOURCEW lpNetResource, + LPCWSTR lpPassword, + LPCWSTR lpUserName, + DWORD dwFlags + ); + + + + +#line 202 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +DWORD __stdcall +WNetAddConnection3A( + HWND hwndOwner, + LPNETRESOURCEA lpNetResource, + LPCSTR lpPassword, + LPCSTR lpUserName, + DWORD dwFlags + ); +DWORD __stdcall +WNetAddConnection3W( + HWND hwndOwner, + LPNETRESOURCEW lpNetResource, + LPCWSTR lpPassword, + LPCWSTR lpUserName, + DWORD dwFlags + ); + + + + +#line 224 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +DWORD __stdcall +WNetCancelConnectionA( + LPCSTR lpName, + BOOL fForce + ); +DWORD __stdcall +WNetCancelConnectionW( + LPCWSTR lpName, + BOOL fForce + ); + + + + +#line 240 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +DWORD __stdcall +WNetCancelConnection2A( + LPCSTR lpName, + DWORD dwFlags, + BOOL fForce + ); +DWORD __stdcall +WNetCancelConnection2W( + LPCWSTR lpName, + DWORD dwFlags, + BOOL fForce + ); + + + + +#line 258 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +DWORD __stdcall +WNetGetConnectionA( + LPCSTR lpLocalName, + LPSTR lpRemoteName, + LPDWORD lpnLength + ); +DWORD __stdcall +WNetGetConnectionW( + LPCWSTR lpLocalName, + LPWSTR lpRemoteName, + LPDWORD lpnLength + ); + + + + +#line 276 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + +DWORD __stdcall +WNetUseConnectionA( + HWND hwndOwner, + LPNETRESOURCEA lpNetResource, + LPCSTR lpUserID, + LPCSTR lpPassword, + DWORD dwFlags, + LPSTR lpAccessName, + LPDWORD lpBufferSize, + LPDWORD lpResult + ); +DWORD __stdcall +WNetUseConnectionW( + HWND hwndOwner, + LPNETRESOURCEW lpNetResource, + LPCWSTR lpUserID, + LPCWSTR lpPassword, + DWORD dwFlags, + LPWSTR lpAccessName, + LPDWORD lpBufferSize, + LPDWORD lpResult + ); + + + + +#line 306 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" +#line 307 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + +DWORD __stdcall +WNetConnectionDialog( + HWND hwnd, + DWORD dwType + ); + +DWORD __stdcall +WNetDisconnectDialog( + HWND hwnd, + DWORD dwType + ); + + +typedef struct _CONNECTDLGSTRUCTA{ + DWORD cbStructure; + HWND hwndOwner; + LPNETRESOURCEA lpConnRes; + DWORD dwFlags; + DWORD dwDevNum; +} CONNECTDLGSTRUCTA, *LPCONNECTDLGSTRUCTA; +typedef struct _CONNECTDLGSTRUCTW{ + DWORD cbStructure; + HWND hwndOwner; + LPNETRESOURCEW lpConnRes; + DWORD dwFlags; + DWORD dwDevNum; +} CONNECTDLGSTRUCTW, *LPCONNECTDLGSTRUCTW; + + + + +typedef CONNECTDLGSTRUCTA CONNECTDLGSTRUCT; +typedef LPCONNECTDLGSTRUCTA LPCONNECTDLGSTRUCT; +#line 347 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + + + + + + + + + +DWORD __stdcall +WNetConnectionDialog1A( + LPCONNECTDLGSTRUCTA lpConnDlgStruct + ); +DWORD __stdcall +WNetConnectionDialog1W( + LPCONNECTDLGSTRUCTW lpConnDlgStruct + ); + + + + +#line 374 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +typedef struct _DISCDLGSTRUCTA{ + DWORD cbStructure; + HWND hwndOwner; + LPSTR lpLocalName; + LPSTR lpRemoteName; + DWORD dwFlags; +} DISCDLGSTRUCTA, *LPDISCDLGSTRUCTA; +typedef struct _DISCDLGSTRUCTW{ + DWORD cbStructure; + HWND hwndOwner; + LPWSTR lpLocalName; + LPWSTR lpRemoteName; + DWORD dwFlags; +} DISCDLGSTRUCTW, *LPDISCDLGSTRUCTW; + + + + +typedef DISCDLGSTRUCTA DISCDLGSTRUCT; +typedef LPDISCDLGSTRUCTA LPDISCDLGSTRUCT; +#line 396 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + +DWORD __stdcall +WNetDisconnectDialog1A( + LPDISCDLGSTRUCTA lpConnDlgStruct + ); +DWORD __stdcall +WNetDisconnectDialog1W( + LPDISCDLGSTRUCTW lpConnDlgStruct + ); + + + + +#line 413 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" +#line 414 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + +DWORD __stdcall +WNetOpenEnumA( + DWORD dwScope, + DWORD dwType, + DWORD dwUsage, + LPNETRESOURCEA lpNetResource, + LPHANDLE lphEnum + ); +DWORD __stdcall +WNetOpenEnumW( + DWORD dwScope, + DWORD dwType, + DWORD dwUsage, + LPNETRESOURCEW lpNetResource, + LPHANDLE lphEnum + ); + + + + +#line 440 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +DWORD __stdcall +WNetEnumResourceA( + HANDLE hEnum, + LPDWORD lpcCount, + LPVOID lpBuffer, + LPDWORD lpBufferSize + ); +DWORD __stdcall +WNetEnumResourceW( + HANDLE hEnum, + LPDWORD lpcCount, + LPVOID lpBuffer, + LPDWORD lpBufferSize + ); + + + + +#line 460 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +DWORD __stdcall +WNetCloseEnum( + HANDLE hEnum + ); + + + + + + + + + +typedef struct _UNIVERSAL_NAME_INFOA { + LPSTR lpUniversalName; +}UNIVERSAL_NAME_INFOA, *LPUNIVERSAL_NAME_INFOA; +typedef struct _UNIVERSAL_NAME_INFOW { + LPWSTR lpUniversalName; +}UNIVERSAL_NAME_INFOW, *LPUNIVERSAL_NAME_INFOW; + + + + +typedef UNIVERSAL_NAME_INFOA UNIVERSAL_NAME_INFO; +typedef LPUNIVERSAL_NAME_INFOA LPUNIVERSAL_NAME_INFO; +#line 487 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +typedef struct _REMOTE_NAME_INFOA { + LPSTR lpUniversalName; + LPSTR lpConnectionName; + LPSTR lpRemainingPath; +}REMOTE_NAME_INFOA, *LPREMOTE_NAME_INFOA; +typedef struct _REMOTE_NAME_INFOW { + LPWSTR lpUniversalName; + LPWSTR lpConnectionName; + LPWSTR lpRemainingPath; +}REMOTE_NAME_INFOW, *LPREMOTE_NAME_INFOW; + + + + +typedef REMOTE_NAME_INFOA REMOTE_NAME_INFO; +typedef LPREMOTE_NAME_INFOA LPREMOTE_NAME_INFO; +#line 505 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +DWORD __stdcall +WNetGetUniversalNameA( + LPCSTR lpLocalPath, + DWORD dwInfoLevel, + LPVOID lpBuffer, + LPDWORD lpBufferSize + ); +DWORD __stdcall +WNetGetUniversalNameW( + LPCWSTR lpLocalPath, + DWORD dwInfoLevel, + LPVOID lpBuffer, + LPDWORD lpBufferSize + ); + + + + +#line 525 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + +DWORD __stdcall +WNetGetUserA( + LPCSTR lpName, + LPSTR lpUserName, + LPDWORD lpnLength + ); +DWORD __stdcall +WNetGetUserW( + LPCWSTR lpName, + LPWSTR lpUserName, + LPDWORD lpnLength + ); + + + + +#line 547 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + + + + + + +#line 559 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + +DWORD __stdcall +WNetGetProviderNameA( + DWORD dwNetType, + LPSTR lpProviderName, + LPDWORD lpBufferSize + ); +DWORD __stdcall +WNetGetProviderNameW( + DWORD dwNetType, + LPWSTR lpProviderName, + LPDWORD lpBufferSize + ); + + + + +#line 579 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +typedef struct _NETINFOSTRUCT{ + DWORD cbStructure; + DWORD dwProviderVersion; + DWORD dwStatus; + DWORD dwCharacteristics; + DWORD dwHandle; + WORD wNetType; + DWORD dwPrinters; + DWORD dwDrives; +} NETINFOSTRUCT, *LPNETINFOSTRUCT; + + + + + +DWORD __stdcall +WNetGetNetworkInformationA( + LPCSTR lpProvider, + LPNETINFOSTRUCT lpNetInfoStruct + ); +DWORD __stdcall +WNetGetNetworkInformationW( + LPCWSTR lpProvider, + LPNETINFOSTRUCT lpNetInfoStruct + ); + + + + +#line 610 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + +typedef UINT ( __stdcall *PFNGETPROFILEPATHA) ( + LPCSTR pszUsername, + LPSTR pszBuffer, + UINT cbBuffer + ); +typedef UINT ( __stdcall *PFNGETPROFILEPATHW) ( + LPCWSTR pszUsername, + LPWSTR pszBuffer, + UINT cbBuffer + ); + + + + +#line 630 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +typedef UINT ( __stdcall *PFNRECONCILEPROFILEA) ( + LPCSTR pszCentralFile, + LPCSTR pszLocalFile, + DWORD dwFlags + ); +typedef UINT ( __stdcall *PFNRECONCILEPROFILEW) ( + LPCWSTR pszCentralFile, + LPCWSTR pszLocalFile, + DWORD dwFlags + ); + + + + +#line 646 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + + + + +typedef BOOL ( __stdcall *PFNPROCESSPOLICIESA) ( + HWND hwnd, + LPCSTR pszPath, + LPCSTR pszUsername, + LPCSTR pszComputerName, + DWORD dwFlags + ); +typedef BOOL ( __stdcall *PFNPROCESSPOLICIESW) ( + HWND hwnd, + LPCWSTR pszPath, + LPCWSTR pszUsername, + LPCWSTR pszComputerName, + DWORD dwFlags + ); + + + + +#line 674 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + +#line 677 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + +DWORD __stdcall +WNetGetLastErrorA( + LPDWORD lpError, + LPSTR lpErrorBuf, + DWORD nErrorBufSize, + LPSTR lpNameBuf, + DWORD nNameBufSize + ); +DWORD __stdcall +WNetGetLastErrorW( + LPDWORD lpError, + LPWSTR lpErrorBuf, + DWORD nErrorBufSize, + LPWSTR lpNameBuf, + DWORD nNameBufSize + ); + + + + +#line 703 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 733 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 764 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + + +typedef struct _NETCONNECTINFOSTRUCT{ + DWORD cbStructure; + DWORD dwFlags; + DWORD dwSpeed; + DWORD dwDelay; + DWORD dwOptDataSize; +} NETCONNECTINFOSTRUCT, *LPNETCONNECTINFOSTRUCT; + + + + + + +DWORD __stdcall +MultinetGetConnectionPerformanceA( + LPNETRESOURCEA lpNetResource, + LPNETCONNECTINFOSTRUCT lpNetConnectInfoStruct + ); +DWORD __stdcall +MultinetGetConnectionPerformanceW( + LPNETRESOURCEW lpNetResource, + LPNETCONNECTINFOSTRUCT lpNetConnectInfoStruct + ); + + + + +#line 798 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" +#line 799 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + + + + + +#line 805 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winnetwk.h" + +#line 183 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 184 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\cderr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 59 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\cderr.h" +#line 187 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\dde.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct { + + unsigned short bAppReturnCode:8, + reserved:6, + fBusy:1, + fAck:1; + + +#line 55 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\dde.h" +} DDEACK; + + + + + + + + + +typedef struct { + + unsigned short reserved:14, + fDeferUpd:1, + fAckReq:1; + + +#line 73 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\dde.h" + short cfFormat; +} DDEADVISE; + + + + + + + + + + + +typedef struct { + + unsigned short unused:12, + fResponse:1, + fRelease:1, + reserved:1, + fAckReq:1; + + +#line 96 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\dde.h" + short cfFormat; + BYTE Value[1]; +} DDEDATA; + + + + + + + + + + + +typedef struct { + + unsigned short unused:13, + + fRelease:1, + fReserved:2; + + +#line 119 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\dde.h" + short cfFormat; + BYTE Value[1]; + + +} DDEPOKE; + + + + + + + + + + + +typedef struct { + + unsigned short unused:13, + fRelease:1, + fDeferUpd:1, + fAckReq:1; + + +#line 144 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\dde.h" + short cfFormat; +} DDELN; + +typedef struct { + + unsigned short unused:12, + fAck:1, + fRelease:1, + fReserved:1, + fAckReq:1; + + +#line 157 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\dde.h" + short cfFormat; + BYTE rgb[1]; +} DDEUP; + + + + + + +BOOL +__stdcall +DdeSetQualityOfService( + HWND hwndClient, + const SECURITY_QUALITY_OF_SERVICE *pqosNew, + PSECURITY_QUALITY_OF_SERVICE pqosPrev); + +BOOL +__stdcall +ImpersonateDdeClientWindow( + HWND hWndClient, + HWND hWndServer); + + + + +LONG __stdcall PackDDElParam(UINT msg, UINT uiLo, UINT uiHi); +BOOL __stdcall UnpackDDElParam(UINT msg, LONG lParam, PUINT puiLo, PUINT puiHi); +BOOL __stdcall FreeDDElParam(UINT msg, LONG lParam); +LONG __stdcall ReuseDDElParam(LONG lParam, UINT msgIn, UINT msgOut, UINT uiLo, UINT uiHi); + + + + + +#line 192 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\dde.h" +#line 188 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ddeml.h" + + + + + + + + + + + + + + + + + + + + + +struct HCONVLIST__ { int unused; }; typedef struct HCONVLIST__ *HCONVLIST; +struct HCONV__ { int unused; }; typedef struct HCONV__ *HCONV; +struct HSZ__ { int unused; }; typedef struct HSZ__ *HSZ; +struct HDDEDATA__ { int unused; }; typedef struct HDDEDATA__ *HDDEDATA; + + + + +typedef struct tagHSZPAIR { + HSZ hszSvc; + HSZ hszTopic; +} HSZPAIR; +typedef HSZPAIR *PHSZPAIR; + + + + +typedef struct tagCONVCONTEXT { + UINT cb; + UINT wFlags; + UINT wCountryID; + int iCodePage; + DWORD dwLangID; + DWORD dwSecurity; + SECURITY_QUALITY_OF_SERVICE qos; +} CONVCONTEXT; +typedef CONVCONTEXT *PCONVCONTEXT; + + + + +typedef struct tagCONVINFO { + DWORD cb; + DWORD hUser; + HCONV hConvPartner; + HSZ hszSvcPartner; + HSZ hszServiceReq; + HSZ hszTopic; + HSZ hszItem; + UINT wFmt; + UINT wType; + UINT wStatus; + UINT wConvst; + UINT wLastError; + HCONVLIST hConvList; + CONVCONTEXT ConvCtxt; + HWND hwnd; + HWND hwndPartner; +} CONVINFO; +typedef CONVINFO *PCONVINFO; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 137 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ddeml.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 198 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ddeml.h" + + + + +typedef HDDEDATA __stdcall FNCALLBACK(UINT wType, UINT wFmt, HCONV hConv, + HSZ hsz1, HSZ hsz2, HDDEDATA hData, DWORD dwData1, DWORD dwData2); +typedef HDDEDATA (__stdcall *PFNCALLBACK)(UINT wType, UINT wFmt, HCONV hConv, + HSZ hsz1, HSZ hsz2, HDDEDATA hData, DWORD dwData1, DWORD dwData2); + + + + + +UINT __stdcall DdeInitializeA(LPDWORD pidInst, PFNCALLBACK pfnCallback, + DWORD afCmd, DWORD ulRes); +UINT __stdcall DdeInitializeW(LPDWORD pidInst, PFNCALLBACK pfnCallback, + DWORD afCmd, DWORD ulRes); + + + + +#line 220 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ddeml.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BOOL __stdcall DdeUninitialize(DWORD idInst); + + + + + +HCONVLIST __stdcall DdeConnectList(DWORD idInst, HSZ hszService, HSZ hszTopic, + HCONVLIST hConvList, PCONVCONTEXT pCC); +HCONV __stdcall DdeQueryNextServer(HCONVLIST hConvList, HCONV hConvPrev); +BOOL __stdcall DdeDisconnectList(HCONVLIST hConvList); + + + + + +HCONV __stdcall DdeConnect(DWORD idInst, HSZ hszService, HSZ hszTopic, + PCONVCONTEXT pCC); +BOOL __stdcall DdeDisconnect(HCONV hConv); +HCONV __stdcall DdeReconnect(HCONV hConv); +UINT __stdcall DdeQueryConvInfo(HCONV hConv, DWORD idTransaction, PCONVINFO pConvInfo); +BOOL __stdcall DdeSetUserHandle(HCONV hConv, DWORD id, DWORD hUser); +BOOL __stdcall DdeAbandonTransaction(DWORD idInst, HCONV hConv, DWORD idTransaction); + + + + + + +BOOL __stdcall DdePostAdvise(DWORD idInst, HSZ hszTopic, HSZ hszItem); +BOOL __stdcall DdeEnableCallback(DWORD idInst, HCONV hConv, UINT wCmd); +BOOL __stdcall DdeImpersonateClient(HCONV hConv); + + + + + + +HDDEDATA __stdcall DdeNameService(DWORD idInst, HSZ hsz1, HSZ hsz2, UINT afCmd); + + + + + + + + + + +HDDEDATA __stdcall DdeClientTransaction(LPBYTE pData, DWORD cbData, + HCONV hConv, HSZ hszItem, UINT wFmt, UINT wType, + DWORD dwTimeout, LPDWORD pdwResult); + + + + + +HDDEDATA __stdcall DdeCreateDataHandle(DWORD idInst, LPBYTE pSrc, DWORD cb, + DWORD cbOff, HSZ hszItem, UINT wFmt, UINT afCmd); +HDDEDATA __stdcall DdeAddData(HDDEDATA hData, LPBYTE pSrc, DWORD cb, DWORD cbOff); +DWORD __stdcall DdeGetData(HDDEDATA hData, LPBYTE pDst, DWORD cbMax, DWORD cbOff); +LPBYTE __stdcall DdeAccessData(HDDEDATA hData, LPDWORD pcbDataSize); +BOOL __stdcall DdeUnaccessData(HDDEDATA hData); +BOOL __stdcall DdeFreeDataHandle(HDDEDATA hData); + + + + +UINT __stdcall DdeGetLastError(DWORD idInst); + + + + + + + + + + + + + + + + + + + + + + + + + + +HSZ __stdcall DdeCreateStringHandleA(DWORD idInst, LPCSTR psz, int iCodePage); +HSZ __stdcall DdeCreateStringHandleW(DWORD idInst, LPCWSTR psz, int iCodePage); + + + + +#line 353 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ddeml.h" +DWORD __stdcall DdeQueryStringA(DWORD idInst, HSZ hsz, LPSTR psz, DWORD cchMax, int iCodePage); +DWORD __stdcall DdeQueryStringW(DWORD idInst, HSZ hsz, LPWSTR psz, DWORD cchMax, int iCodePage); + + + + +#line 360 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ddeml.h" +BOOL __stdcall DdeFreeStringHandle(DWORD idInst, HSZ hsz); +BOOL __stdcall DdeKeepStringHandle(DWORD idInst, HSZ hsz); +int __stdcall DdeCmpStringHandles(HSZ hsz1, HSZ hsz2); + + + + + + + +typedef struct tagDDEML_MSG_HOOK_DATA { + UINT uiLo; + UINT uiHi; + DWORD cbData; + DWORD Data[8]; +} DDEML_MSG_HOOK_DATA, *PDDEML_MSG_HOOK_DATA; + + +typedef struct tagMONMSGSTRUCT { + UINT cb; + HWND hwndTo; + DWORD dwTime; + HANDLE hTask; + UINT wMsg; + WPARAM wParam; + LPARAM lParam; + DDEML_MSG_HOOK_DATA dmhd; +} MONMSGSTRUCT, *PMONMSGSTRUCT; + +typedef struct tagMONCBSTRUCT { + UINT cb; + DWORD dwTime; + HANDLE hTask; + DWORD dwRet; + UINT wType; + UINT wFmt; + HCONV hConv; + HSZ hsz1; + HSZ hsz2; + HDDEDATA hData; + DWORD dwData1; + DWORD dwData2; + CONVCONTEXT cc; + DWORD cbData; + DWORD Data[8]; +} MONCBSTRUCT, *PMONCBSTRUCT; + +typedef struct tagMONHSZSTRUCTA { + UINT cb; + BOOL fsAction; + DWORD dwTime; + HSZ hsz; + HANDLE hTask; + CHAR str[1]; +} MONHSZSTRUCTA, *PMONHSZSTRUCTA; +typedef struct tagMONHSZSTRUCTW { + UINT cb; + BOOL fsAction; + DWORD dwTime; + HSZ hsz; + HANDLE hTask; + WCHAR str[1]; +} MONHSZSTRUCTW, *PMONHSZSTRUCTW; + + + + +typedef MONHSZSTRUCTA MONHSZSTRUCT; +typedef PMONHSZSTRUCTA PMONHSZSTRUCT; +#line 430 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ddeml.h" + + + + + + +typedef struct tagMONERRSTRUCT { + UINT cb; + UINT wLastError; + DWORD dwTime; + HANDLE hTask; +} MONERRSTRUCT, *PMONERRSTRUCT; + +typedef struct tagMONLINKSTRUCT { + UINT cb; + DWORD dwTime; + HANDLE hTask; + BOOL fEstablished; + BOOL fNoData; + HSZ hszSvc; + HSZ hszTopic; + HSZ hszItem; + UINT wFmt; + BOOL fServer; + HCONV hConvServer; + HCONV hConvClient; +} MONLINKSTRUCT, *PMONLINKSTRUCT; + +typedef struct tagMONCONVSTRUCT { + UINT cb; + BOOL fConnect; + DWORD dwTime; + HANDLE hTask; + HSZ hszSvc; + HSZ hszTopic; + HCONV hConvClient; + HCONV hConvServer; +} MONCONVSTRUCT, *PMONCONVSTRUCT; + + + + + + + + + + + + + + + + + + +#line 487 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ddeml.h" + + + + + +#line 493 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ddeml.h" + + +#line 189 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\dlgs.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 236 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\dlgs.h" + + + + + + + +typedef struct tagCRGB +{ + BYTE bRed; + BYTE bGreen; + BYTE bBlue; + BYTE bExtra; +} CRGB; + + +#line 253 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\dlgs.h" +#line 190 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\lzexpand.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +INT +__stdcall +LZStart( + void + ); + +void +__stdcall +LZDone( + void + ); + +LONG +__stdcall +CopyLZFile( + INT, + INT + ); + +LONG +__stdcall +LZCopy( + INT, + INT + ); + +INT +__stdcall +LZInit( + INT + ); + +INT +__stdcall +GetExpandedNameA( + LPSTR, + LPSTR + ); +INT +__stdcall +GetExpandedNameW( + LPWSTR, + LPWSTR + ); + + + + +#line 79 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\lzexpand.h" + +INT +__stdcall +LZOpenFileA( + LPSTR, + LPOFSTRUCT, + WORD + ); +INT +__stdcall +LZOpenFileW( + LPWSTR, + LPOFSTRUCT, + WORD + ); + + + + +#line 99 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\lzexpand.h" + +LONG +__stdcall +LZSeek( + INT, + LONG, + INT + ); + +INT +__stdcall +LZRead( + INT, + LPSTR, + INT + ); + +void +__stdcall +LZClose( + INT + ); + + + + + + +#line 128 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\lzexpand.h" +#line 192 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#pragma pack(1) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +#line 38 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + +#line 49 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +#line 54 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 109 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +typedef UINT MMVERSION; + + +#line 117 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +typedef UINT MMRESULT; + + + +typedef UINT *LPUINT; + + +typedef struct mmtime_tag +{ + UINT wType; + union + { + DWORD ms; + DWORD sample; + DWORD cb; + DWORD ticks; + + + struct + { + BYTE hour; + BYTE min; + BYTE sec; + BYTE frame; + BYTE fps; + BYTE dummy; + + BYTE pad[2]; +#line 146 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + } smpte; + + + struct + { + DWORD songptrpos; + } midi; + } u; +} MMTIME, *PMMTIME, *NPMMTIME, *LPMMTIME; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 215 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + +#line 228 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 232 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct HDRVR__ { int unused; }; typedef struct HDRVR__ *HDRVR; +#line 290 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + +typedef struct DRVCONFIGINFOEX { + DWORD dwDCISize; + LPCWSTR lpszDCISectionName; + LPCWSTR lpszDCIAliasName; + DWORD dnDevNode; +} DRVCONFIGINFOEX, *PDRVCONFIGINFOEX, *NPDRVCONFIGINFOEX, *LPDRVCONFIGINFOEX; + + + + + + + + +#line 315 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagDRVCONFIGINFO { + DWORD dwDCISize; + LPCWSTR lpszDCISectionName; + LPCWSTR lpszDCIAliasName; +} DRVCONFIGINFO, *PDRVCONFIGINFO, *NPDRVCONFIGINFO, *LPDRVCONFIGINFO; + + + + + + +#line 350 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + +typedef LRESULT (__stdcall* DRIVERPROC)(DWORD, HDRVR, UINT, LPARAM, LPARAM); + +__declspec(dllimport) LRESULT __stdcall CloseDriver(HDRVR hDriver, LONG lParam1, LONG lParam2); +__declspec(dllimport) HDRVR __stdcall OpenDriver(LPCWSTR szDriverName, LPCWSTR szSectionName, LONG lParam2); +__declspec(dllimport) LRESULT __stdcall SendDriverMessage(HDRVR hDriver, UINT message, LONG lParam1, LONG lParam2); +__declspec(dllimport) HMODULE __stdcall DrvGetModuleHandle(HDRVR hDriver); +__declspec(dllimport) HMODULE __stdcall GetDriverModuleHandle(HDRVR hDriver); +__declspec(dllimport) LRESULT __stdcall DefDriverProc(DWORD dwDriverIdentifier, HDRVR hdrvr, UINT uMsg, LPARAM lParam1, LPARAM lParam2); + #line 369 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + +#line 377 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 378 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 379 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + +#line 387 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +#line 392 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + +#line 411 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +typedef void (__stdcall DRVCALLBACK)(HDRVR hdrvr, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2); + +typedef DRVCALLBACK *LPDRVCALLBACK; + +typedef DRVCALLBACK *PDRVCALLBACK; +#line 420 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 422 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + +#line 434 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +#line 439 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 441 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 442 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + +__declspec(dllimport) BOOL __stdcall sndPlaySoundA(LPCSTR pszSound, UINT fuSound); +__declspec(dllimport) BOOL __stdcall sndPlaySoundW(LPCWSTR pszSound, UINT fuSound); + + + + +#line 460 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 464 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + +#line 484 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + +__declspec(dllimport) BOOL __stdcall PlaySoundA(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound); +__declspec(dllimport) BOOL __stdcall PlaySoundW(LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound); + + + + +#line 506 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 510 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 512 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 513 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + +struct HWAVE__ { int unused; }; typedef struct HWAVE__ *HWAVE; +struct HWAVEIN__ { int unused; }; typedef struct HWAVEIN__ *HWAVEIN; +struct HWAVEOUT__ { int unused; }; typedef struct HWAVEOUT__ *HWAVEOUT; + +typedef HWAVEIN *LPHWAVEIN; +typedef HWAVEOUT *LPHWAVEOUT; +typedef DRVCALLBACK WAVECALLBACK; +typedef WAVECALLBACK *LPWAVECALLBACK; +#line 538 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + +#line 558 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct wavehdr_tag { + LPSTR lpData; + DWORD dwBufferLength; + DWORD dwBytesRecorded; + DWORD dwUser; + DWORD dwFlags; + DWORD dwLoops; + struct wavehdr_tag *lpNext; + DWORD reserved; +} WAVEHDR, *PWAVEHDR, *NPWAVEHDR, *LPWAVEHDR; + + + + + + + + + + + +typedef struct tagWAVEOUTCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[32]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; + DWORD dwSupport; +} WAVEOUTCAPSA, *PWAVEOUTCAPSA, *NPWAVEOUTCAPSA, *LPWAVEOUTCAPSA; +typedef struct tagWAVEOUTCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[32]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; + DWORD dwSupport; +} WAVEOUTCAPSW, *PWAVEOUTCAPSW, *NPWAVEOUTCAPSW, *LPWAVEOUTCAPSW; + + + + + + +typedef WAVEOUTCAPSA WAVEOUTCAPS; +typedef PWAVEOUTCAPSA PWAVEOUTCAPS; +typedef NPWAVEOUTCAPSA NPWAVEOUTCAPS; +typedef LPWAVEOUTCAPSA LPWAVEOUTCAPS; +#line 612 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + +#line 624 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + +typedef struct tagWAVEINCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[32]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; +} WAVEINCAPSA, *PWAVEINCAPSA, *NPWAVEINCAPSA, *LPWAVEINCAPSA; +typedef struct tagWAVEINCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[32]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; +} WAVEINCAPSW, *PWAVEINCAPSW, *NPWAVEINCAPSW, *LPWAVEINCAPSW; + + + + + + +typedef WAVEINCAPSA WAVEINCAPS; +typedef PWAVEINCAPSA PWAVEINCAPS; +typedef NPWAVEINCAPSA NPWAVEINCAPS; +typedef LPWAVEINCAPSA LPWAVEINCAPS; +#line 666 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + +#line 677 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + +typedef struct waveformat_tag { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; +} WAVEFORMAT, *PWAVEFORMAT, *NPWAVEFORMAT, *LPWAVEFORMAT; + + + + + +typedef struct pcmwaveformat_tag { + WAVEFORMAT wf; + WORD wBitsPerSample; +} PCMWAVEFORMAT, *PPCMWAVEFORMAT, *NPPCMWAVEFORMAT, *LPPCMWAVEFORMAT; + + + + + + + + +typedef struct tWAVEFORMATEX +{ + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; + WORD wBitsPerSample; + WORD cbSize; + +} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX; +typedef const WAVEFORMATEX *LPCWAVEFORMATEX; + +#line 732 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +__declspec(dllimport) UINT __stdcall waveOutGetNumDevs(void); + + + +__declspec(dllimport) MMRESULT __stdcall waveOutGetDevCapsA(UINT uDeviceID, LPWAVEOUTCAPSA pwoc, UINT cbwoc); +__declspec(dllimport) MMRESULT __stdcall waveOutGetDevCapsW(UINT uDeviceID, LPWAVEOUTCAPSW pwoc, UINT cbwoc); + + + + +#line 746 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 750 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +__declspec(dllimport) MMRESULT __stdcall waveOutGetVolume(HWAVEOUT hwo, LPDWORD pdwVolume); +__declspec(dllimport) MMRESULT __stdcall waveOutSetVolume(HWAVEOUT hwo, DWORD dwVolume); + + + +#line 758 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +__declspec(dllimport) MMRESULT __stdcall waveOutGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText); +__declspec(dllimport) MMRESULT __stdcall waveOutGetErrorTextW(MMRESULT mmrError, LPWSTR pszText, UINT cchText); + + + + +#line 768 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 772 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +__declspec(dllimport) MMRESULT __stdcall waveOutOpen(LPHWAVEOUT phwo, UINT uDeviceID, + LPCWAVEFORMATEX pwfx, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen); + +__declspec(dllimport) MMRESULT __stdcall waveOutClose(HWAVEOUT hwo); +__declspec(dllimport) MMRESULT __stdcall waveOutPrepareHeader(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh); +__declspec(dllimport) MMRESULT __stdcall waveOutUnprepareHeader(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh); +__declspec(dllimport) MMRESULT __stdcall waveOutWrite(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh); +__declspec(dllimport) MMRESULT __stdcall waveOutPause(HWAVEOUT hwo); +__declspec(dllimport) MMRESULT __stdcall waveOutRestart(HWAVEOUT hwo); +__declspec(dllimport) MMRESULT __stdcall waveOutReset(HWAVEOUT hwo); +__declspec(dllimport) MMRESULT __stdcall waveOutBreakLoop(HWAVEOUT hwo); +__declspec(dllimport) MMRESULT __stdcall waveOutGetPosition(HWAVEOUT hwo, LPMMTIME pmmt, UINT cbmmt); +__declspec(dllimport) MMRESULT __stdcall waveOutGetPitch(HWAVEOUT hwo, LPDWORD pdwPitch); +__declspec(dllimport) MMRESULT __stdcall waveOutSetPitch(HWAVEOUT hwo, DWORD dwPitch); +__declspec(dllimport) MMRESULT __stdcall waveOutGetPlaybackRate(HWAVEOUT hwo, LPDWORD pdwRate); +__declspec(dllimport) MMRESULT __stdcall waveOutSetPlaybackRate(HWAVEOUT hwo, DWORD dwRate); +__declspec(dllimport) MMRESULT __stdcall waveOutGetID(HWAVEOUT hwo, LPUINT puDeviceID); + + + +__declspec(dllimport) MMRESULT __stdcall waveOutMessage(HWAVEOUT hwo, UINT uMsg, DWORD dw1, DWORD dw2); + + +#line 797 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 798 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +__declspec(dllimport) UINT __stdcall waveInGetNumDevs(void); + + + +__declspec(dllimport) MMRESULT __stdcall waveInGetDevCapsA(UINT uDeviceID, LPWAVEINCAPSA pwic, UINT cbwic); +__declspec(dllimport) MMRESULT __stdcall waveInGetDevCapsW(UINT uDeviceID, LPWAVEINCAPSW pwic, UINT cbwic); + + + + +#line 810 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 814 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +__declspec(dllimport) MMRESULT __stdcall waveInGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText); +__declspec(dllimport) MMRESULT __stdcall waveInGetErrorTextW(MMRESULT mmrError, LPWSTR pszText, UINT cchText); + + + + +#line 824 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 828 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +__declspec(dllimport) MMRESULT __stdcall waveInOpen(LPHWAVEIN phwi, UINT uDeviceID, + LPCWAVEFORMATEX pwfx, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen); + +__declspec(dllimport) MMRESULT __stdcall waveInClose(HWAVEIN hwi); +__declspec(dllimport) MMRESULT __stdcall waveInPrepareHeader(HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh); +__declspec(dllimport) MMRESULT __stdcall waveInUnprepareHeader(HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh); +__declspec(dllimport) MMRESULT __stdcall waveInAddBuffer(HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh); +__declspec(dllimport) MMRESULT __stdcall waveInStart(HWAVEIN hwi); +__declspec(dllimport) MMRESULT __stdcall waveInStop(HWAVEIN hwi); +__declspec(dllimport) MMRESULT __stdcall waveInReset(HWAVEIN hwi); +__declspec(dllimport) MMRESULT __stdcall waveInGetPosition(HWAVEIN hwi, LPMMTIME pmmt, UINT cbmmt); +__declspec(dllimport) MMRESULT __stdcall waveInGetID(HWAVEIN hwi, LPUINT puDeviceID); + + + +__declspec(dllimport) MMRESULT __stdcall waveInMessage(HWAVEIN hwi, UINT uMsg, DWORD dw1, DWORD dw2); + + +#line 848 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 849 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 851 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 853 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + +struct HMIDI__ { int unused; }; typedef struct HMIDI__ *HMIDI; +struct HMIDIIN__ { int unused; }; typedef struct HMIDIIN__ *HMIDIIN; +struct HMIDIOUT__ { int unused; }; typedef struct HMIDIOUT__ *HMIDIOUT; +struct HMIDISTRM__ { int unused; }; typedef struct HMIDISTRM__ *HMIDISTRM; + +typedef HMIDI *LPHMIDI; +typedef HMIDIIN *LPHMIDIIN; +typedef HMIDIOUT *LPHMIDIOUT; +typedef HMIDISTRM *LPHMIDISTRM; +typedef DRVCALLBACK MIDICALLBACK; +typedef MIDICALLBACK *LPMIDICALLBACK; + +typedef WORD PATCHARRAY[128]; +typedef WORD *LPPATCHARRAY; +typedef WORD KEYARRAY[128]; +typedef WORD *LPKEYARRAY; +#line 890 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + +#line 906 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + +#line 915 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + +typedef struct tagMIDIOUTCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[32]; + WORD wTechnology; + WORD wVoices; + WORD wNotes; + WORD wChannelMask; + DWORD dwSupport; +} MIDIOUTCAPSA, *PMIDIOUTCAPSA, *NPMIDIOUTCAPSA, *LPMIDIOUTCAPSA; +typedef struct tagMIDIOUTCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[32]; + WORD wTechnology; + WORD wVoices; + WORD wNotes; + WORD wChannelMask; + DWORD dwSupport; +} MIDIOUTCAPSW, *PMIDIOUTCAPSW, *NPMIDIOUTCAPSW, *LPMIDIOUTCAPSW; + + + + + + +typedef MIDIOUTCAPSA MIDIOUTCAPS; +typedef PMIDIOUTCAPSA PMIDIOUTCAPS; +typedef NPMIDIOUTCAPSA NPMIDIOUTCAPS; +typedef LPMIDIOUTCAPSA LPMIDIOUTCAPS; +#line 958 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + +#line 972 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + +#line 987 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +typedef struct tagMIDIINCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[32]; + + DWORD dwSupport; +#line 999 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +} MIDIINCAPSA, *PMIDIINCAPSA, *NPMIDIINCAPSA, *LPMIDIINCAPSA; +typedef struct tagMIDIINCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[32]; + + DWORD dwSupport; +#line 1008 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +} MIDIINCAPSW, *PMIDIINCAPSW, *NPMIDIINCAPSW, *LPMIDIINCAPSW; + + + + + + +typedef MIDIINCAPSA MIDIINCAPS; +typedef PMIDIINCAPSA PMIDIINCAPS; +typedef NPMIDIINCAPSA NPMIDIINCAPS; +typedef LPMIDIINCAPSA LPMIDIINCAPS; +#line 1020 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + +#line 1032 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct midihdr_tag { + LPSTR lpData; + DWORD dwBufferLength; + DWORD dwBytesRecorded; + DWORD dwUser; + DWORD dwFlags; + struct midihdr_tag *lpNext; + DWORD reserved; + + DWORD dwOffset; + DWORD dwReserved[8]; +#line 1046 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +} MIDIHDR, *PMIDIHDR, *NPMIDIHDR, *LPMIDIHDR; + + +typedef struct midievent_tag +{ + DWORD dwDeltaTime; + DWORD dwStreamID; + DWORD dwEvent; + DWORD dwParms[1]; +} MIDIEVENT; + +typedef struct midistrmbuffver_tag +{ + DWORD dwVersion; + DWORD dwMid; + DWORD dwOEMVersion; +} MIDISTRMBUFFVER; +#line 1064 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct midiproptimediv_tag +{ + DWORD cbStruct; + DWORD dwTimeDiv; +} MIDIPROPTIMEDIV, *LPMIDIPROPTIMEDIV; + +typedef struct midiproptempo_tag +{ + DWORD cbStruct; + DWORD dwTempo; +} MIDIPROPTEMPO, *LPMIDIPROPTEMPO; + +#line 1129 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +__declspec(dllimport) UINT __stdcall midiOutGetNumDevs(void); + +__declspec(dllimport) MMRESULT __stdcall midiStreamOpen(LPHMIDISTRM phms, LPUINT puDeviceID, DWORD cMidi, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen); +__declspec(dllimport) MMRESULT __stdcall midiStreamClose(HMIDISTRM hms); + +__declspec(dllimport) MMRESULT __stdcall midiStreamProperty(HMIDISTRM hms, LPBYTE lppropdata, DWORD dwProperty); +__declspec(dllimport) MMRESULT __stdcall midiStreamPosition(HMIDISTRM hms, LPMMTIME lpmmt, UINT cbmmt); + +__declspec(dllimport) MMRESULT __stdcall midiStreamOut(HMIDISTRM hms, LPMIDIHDR pmh, UINT cbmh); +__declspec(dllimport) MMRESULT __stdcall midiStreamPause(HMIDISTRM hms); +__declspec(dllimport) MMRESULT __stdcall midiStreamRestart(HMIDISTRM hms); +__declspec(dllimport) MMRESULT __stdcall midiStreamStop(HMIDISTRM hms); + + +__declspec(dllimport) MMRESULT __stdcall midiConnect(HMIDI hmi, HMIDIOUT hmo, LPVOID pReserved); +__declspec(dllimport) MMRESULT __stdcall midiDisconnect(HMIDI hmi, HMIDIOUT hmo, LPVOID pReserved); +#line 1150 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 1151 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +__declspec(dllimport) MMRESULT __stdcall midiOutGetDevCapsA(UINT uDeviceID, LPMIDIOUTCAPSA pmoc, UINT cbmoc); +__declspec(dllimport) MMRESULT __stdcall midiOutGetDevCapsW(UINT uDeviceID, LPMIDIOUTCAPSW pmoc, UINT cbmoc); + + + + +#line 1161 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 1165 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +__declspec(dllimport) MMRESULT __stdcall midiOutGetVolume(HMIDIOUT hmo, LPDWORD pdwVolume); +__declspec(dllimport) MMRESULT __stdcall midiOutSetVolume(HMIDIOUT hmo, DWORD dwVolume); + + + +#line 1173 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +__declspec(dllimport) MMRESULT __stdcall midiOutGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText); +__declspec(dllimport) MMRESULT __stdcall midiOutGetErrorTextW(MMRESULT mmrError, LPWSTR pszText, UINT cchText); + + + + +#line 1183 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 1187 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +__declspec(dllimport) MMRESULT __stdcall midiOutOpen(LPHMIDIOUT phmo, UINT uDeviceID, + DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen); +__declspec(dllimport) MMRESULT __stdcall midiOutClose(HMIDIOUT hmo); +__declspec(dllimport) MMRESULT __stdcall midiOutPrepareHeader(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh); +__declspec(dllimport) MMRESULT __stdcall midiOutUnprepareHeader(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh); +__declspec(dllimport) MMRESULT __stdcall midiOutShortMsg(HMIDIOUT hmo, DWORD dwMsg); +__declspec(dllimport) MMRESULT __stdcall midiOutLongMsg(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh); +__declspec(dllimport) MMRESULT __stdcall midiOutReset(HMIDIOUT hmo); +__declspec(dllimport) MMRESULT __stdcall midiOutCachePatches(HMIDIOUT hmo, UINT uBank, LPWORD pwpa, UINT fuCache); +__declspec(dllimport) MMRESULT __stdcall midiOutCacheDrumPatches(HMIDIOUT hmo, UINT uPatch, LPWORD pwkya, UINT fuCache); +__declspec(dllimport) MMRESULT __stdcall midiOutGetID(HMIDIOUT hmo, LPUINT puDeviceID); + + + +__declspec(dllimport) MMRESULT __stdcall midiOutMessage(HMIDIOUT hmo, UINT uMsg, DWORD dw1, DWORD dw2); + + +#line 1206 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 1207 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +__declspec(dllimport) UINT __stdcall midiInGetNumDevs(void); + + + +__declspec(dllimport) MMRESULT __stdcall midiInGetDevCapsA(UINT uDeviceID, LPMIDIINCAPSA pmic, UINT cbmic); +__declspec(dllimport) MMRESULT __stdcall midiInGetDevCapsW(UINT uDeviceID, LPMIDIINCAPSW pmic, UINT cbmic); + + + + +#line 1219 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +__declspec(dllimport) MMRESULT __stdcall midiInGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText); +__declspec(dllimport) MMRESULT __stdcall midiInGetErrorTextW(MMRESULT mmrError, LPWSTR pszText, UINT cchText); + + + + +#line 1226 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +#line 1231 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +__declspec(dllimport) MMRESULT __stdcall midiInOpen(LPHMIDIIN phmi, UINT uDeviceID, + DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen); +__declspec(dllimport) MMRESULT __stdcall midiInClose(HMIDIIN hmi); +__declspec(dllimport) MMRESULT __stdcall midiInPrepareHeader(HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh); +__declspec(dllimport) MMRESULT __stdcall midiInUnprepareHeader(HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh); +__declspec(dllimport) MMRESULT __stdcall midiInAddBuffer(HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh); +__declspec(dllimport) MMRESULT __stdcall midiInStart(HMIDIIN hmi); +__declspec(dllimport) MMRESULT __stdcall midiInStop(HMIDIIN hmi); +__declspec(dllimport) MMRESULT __stdcall midiInReset(HMIDIIN hmi); +__declspec(dllimport) MMRESULT __stdcall midiInGetID(HMIDIIN hmi, LPUINT puDeviceID); + + + +__declspec(dllimport) MMRESULT __stdcall midiInMessage(HMIDIIN hmi, UINT uMsg, DWORD dw1, DWORD dw2); + + +#line 1249 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 1250 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 1252 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 1254 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + +typedef struct tagAUXCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[32]; + WORD wTechnology; + WORD wReserved1; + DWORD dwSupport; +} AUXCAPSA, *PAUXCAPSA, *NPAUXCAPSA, *LPAUXCAPSA; +typedef struct tagAUXCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[32]; + WORD wTechnology; + WORD wReserved1; + DWORD dwSupport; +} AUXCAPSW, *PAUXCAPSW, *NPAUXCAPSW, *LPAUXCAPSW; + + + + + + +typedef AUXCAPSA AUXCAPS; +typedef PAUXCAPSA PAUXCAPS; +typedef NPAUXCAPSA NPAUXCAPS; +typedef LPAUXCAPSA LPAUXCAPS; +#line 1297 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + +#line 1308 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + +__declspec(dllimport) UINT __stdcall auxGetNumDevs(void); + + +__declspec(dllimport) MMRESULT __stdcall auxGetDevCapsA(UINT uDeviceID, LPAUXCAPSA pac, UINT cbac); +__declspec(dllimport) MMRESULT __stdcall auxGetDevCapsW(UINT uDeviceID, LPAUXCAPSW pac, UINT cbac); + + + + +#line 1330 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 1334 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +__declspec(dllimport) MMRESULT __stdcall auxSetVolume(UINT uDeviceID, DWORD dwVolume); +__declspec(dllimport) MMRESULT __stdcall auxGetVolume(UINT uDeviceID, LPDWORD pdwVolume); + + + +__declspec(dllimport) MMRESULT __stdcall auxOutMessage(UINT uDeviceID, UINT uMsg, DWORD dw1, DWORD dw2); + + +#line 1343 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 1344 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 1346 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 1348 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + +struct HMIXEROBJ__ { int unused; }; typedef struct HMIXEROBJ__ *HMIXEROBJ; +typedef HMIXEROBJ *LPHMIXEROBJ; + +struct HMIXER__ { int unused; }; typedef struct HMIXER__ *HMIXER; +typedef HMIXER *LPHMIXER; + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) UINT __stdcall mixerGetNumDevs(void); + + + +typedef struct tagMIXERCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[32]; + DWORD fdwSupport; + DWORD cDestinations; +} MIXERCAPSA, *PMIXERCAPSA, *LPMIXERCAPSA; +typedef struct tagMIXERCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[32]; + DWORD fdwSupport; + DWORD cDestinations; +} MIXERCAPSW, *PMIXERCAPSW, *LPMIXERCAPSW; + + + + + +typedef MIXERCAPSA MIXERCAPS; +typedef PMIXERCAPSA PMIXERCAPS; +typedef LPMIXERCAPSA LPMIXERCAPS; +#line 1417 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + +#line 1428 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +__declspec(dllimport) MMRESULT __stdcall mixerGetDevCapsA(UINT uMxId, LPMIXERCAPSA pmxcaps, UINT cbmxcaps); +__declspec(dllimport) MMRESULT __stdcall mixerGetDevCapsW(UINT uMxId, LPMIXERCAPSW pmxcaps, UINT cbmxcaps); + + + + +#line 1438 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 1442 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +__declspec(dllimport) MMRESULT __stdcall mixerOpen(LPHMIXER phmx, UINT uMxId, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen); + +__declspec(dllimport) MMRESULT __stdcall mixerClose(HMIXER hmx); + +__declspec(dllimport) DWORD __stdcall mixerMessage(HMIXER hmx, UINT uMsg, DWORD dwParam1, DWORD dwParam2); + + + +typedef struct tagMIXERLINEA { + DWORD cbStruct; + DWORD dwDestination; + DWORD dwSource; + DWORD dwLineID; + DWORD fdwLine; + DWORD dwUser; + DWORD dwComponentType; + DWORD cChannels; + DWORD cConnections; + DWORD cControls; + CHAR szShortName[16]; + CHAR szName[64]; + struct { + DWORD dwType; + DWORD dwDeviceID; + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[32]; + } Target; +} MIXERLINEA, *PMIXERLINEA, *LPMIXERLINEA; +typedef struct tagMIXERLINEW { + DWORD cbStruct; + DWORD dwDestination; + DWORD dwSource; + DWORD dwLineID; + DWORD fdwLine; + DWORD dwUser; + DWORD dwComponentType; + DWORD cChannels; + DWORD cConnections; + DWORD cControls; + WCHAR szShortName[16]; + WCHAR szName[64]; + struct { + DWORD dwType; + DWORD dwDeviceID; + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[32]; + } Target; +} MIXERLINEW, *PMIXERLINEW, *LPMIXERLINEW; + + + + + +typedef MIXERLINEA MIXERLINE; +typedef PMIXERLINEA PMIXERLINE; +typedef LPMIXERLINEA LPMIXERLINE; +#line 1504 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + +#line 1529 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) MMRESULT __stdcall mixerGetLineInfoA(HMIXEROBJ hmxobj, LPMIXERLINEA pmxl, DWORD fdwInfo); +__declspec(dllimport) MMRESULT __stdcall mixerGetLineInfoW(HMIXEROBJ hmxobj, LPMIXERLINEW pmxl, DWORD fdwInfo); + + + + +#line 1590 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 1594 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + +__declspec(dllimport) MMRESULT __stdcall mixerGetID(HMIXEROBJ hmxobj, UINT *puMxId, DWORD fdwId); + + + + + + + +typedef struct tagMIXERCONTROLA { + DWORD cbStruct; + DWORD dwControlID; + DWORD dwControlType; + DWORD fdwControl; + DWORD cMultipleItems; + CHAR szShortName[16]; + CHAR szName[64]; + union { + struct { + LONG lMinimum; + LONG lMaximum; + }; + struct { + DWORD dwMinimum; + DWORD dwMaximum; + }; + DWORD dwReserved[6]; + } Bounds; + union { + DWORD cSteps; + DWORD cbCustomData; + DWORD dwReserved[6]; + } Metrics; +} MIXERCONTROLA, *PMIXERCONTROLA, *LPMIXERCONTROLA; +typedef struct tagMIXERCONTROLW { + DWORD cbStruct; + DWORD dwControlID; + DWORD dwControlType; + DWORD fdwControl; + DWORD cMultipleItems; + WCHAR szShortName[16]; + WCHAR szName[64]; + union { + struct { + LONG lMinimum; + LONG lMaximum; + }; + struct { + DWORD dwMinimum; + DWORD dwMaximum; + }; + DWORD dwReserved[6]; + } Bounds; + union { + DWORD cSteps; + DWORD cbCustomData; + DWORD dwReserved[6]; + } Metrics; +} MIXERCONTROLW, *PMIXERCONTROLW, *LPMIXERCONTROLW; + + + + + +typedef MIXERCONTROLA MIXERCONTROL; +typedef PMIXERCONTROLA PMIXERCONTROL; +typedef LPMIXERCONTROLA LPMIXERCONTROL; +#line 1670 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1698 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagMIXERLINECONTROLSA { + DWORD cbStruct; + DWORD dwLineID; + union { + DWORD dwControlID; + DWORD dwControlType; + }; + DWORD cControls; + DWORD cbmxctrl; + LPMIXERCONTROLA pamxctrl; +} MIXERLINECONTROLSA, *PMIXERLINECONTROLSA, *LPMIXERLINECONTROLSA; +typedef struct tagMIXERLINECONTROLSW { + DWORD cbStruct; + DWORD dwLineID; + union { + DWORD dwControlID; + DWORD dwControlType; + }; + DWORD cControls; + DWORD cbmxctrl; + LPMIXERCONTROLW pamxctrl; +} MIXERLINECONTROLSW, *PMIXERLINECONTROLSW, *LPMIXERLINECONTROLSW; + + + + + +typedef MIXERLINECONTROLSA MIXERLINECONTROLS; +typedef PMIXERLINECONTROLSA PMIXERLINECONTROLS; +typedef LPMIXERLINECONTROLSA LPMIXERLINECONTROLS; +#line 1813 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + +#line 1827 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + +__declspec(dllimport) MMRESULT __stdcall mixerGetLineControlsA(HMIXEROBJ hmxobj, LPMIXERLINECONTROLSA pmxlc, DWORD fdwControls); +__declspec(dllimport) MMRESULT __stdcall mixerGetLineControlsW(HMIXEROBJ hmxobj, LPMIXERLINECONTROLSW pmxlc, DWORD fdwControls); + + + + +#line 1840 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 1844 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + +typedef struct tMIXERCONTROLDETAILS { + DWORD cbStruct; + DWORD dwControlID; + DWORD cChannels; + union { + HWND hwndOwner; + DWORD cMultipleItems; + }; + DWORD cbDetails; + LPVOID paDetails; +} MIXERCONTROLDETAILS, *PMIXERCONTROLDETAILS, *LPMIXERCONTROLDETAILS; + + + + + + + +typedef struct tagMIXERCONTROLDETAILS_LISTTEXTA { + DWORD dwParam1; + DWORD dwParam2; + CHAR szName[64]; +} MIXERCONTROLDETAILS_LISTTEXTA, *PMIXERCONTROLDETAILS_LISTTEXTA, *LPMIXERCONTROLDETAILS_LISTTEXTA; +typedef struct tagMIXERCONTROLDETAILS_LISTTEXTW { + DWORD dwParam1; + DWORD dwParam2; + WCHAR szName[64]; +} MIXERCONTROLDETAILS_LISTTEXTW, *PMIXERCONTROLDETAILS_LISTTEXTW, *LPMIXERCONTROLDETAILS_LISTTEXTW; + + + + + +typedef MIXERCONTROLDETAILS_LISTTEXTA MIXERCONTROLDETAILS_LISTTEXT; +typedef PMIXERCONTROLDETAILS_LISTTEXTA PMIXERCONTROLDETAILS_LISTTEXT; +typedef LPMIXERCONTROLDETAILS_LISTTEXTA LPMIXERCONTROLDETAILS_LISTTEXT; +#line 1888 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + +#line 1896 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + +typedef struct tMIXERCONTROLDETAILS_BOOLEAN { + LONG fValue; +} MIXERCONTROLDETAILS_BOOLEAN, + *PMIXERCONTROLDETAILS_BOOLEAN, + *LPMIXERCONTROLDETAILS_BOOLEAN; + +typedef struct tMIXERCONTROLDETAILS_SIGNED { + LONG lValue; +} MIXERCONTROLDETAILS_SIGNED, + *PMIXERCONTROLDETAILS_SIGNED, + *LPMIXERCONTROLDETAILS_SIGNED; + +typedef struct tMIXERCONTROLDETAILS_UNSIGNED { + DWORD dwValue; +} MIXERCONTROLDETAILS_UNSIGNED, + *PMIXERCONTROLDETAILS_UNSIGNED, + *LPMIXERCONTROLDETAILS_UNSIGNED; + + + +__declspec(dllimport) MMRESULT __stdcall mixerGetControlDetailsA(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails); +__declspec(dllimport) MMRESULT __stdcall mixerGetControlDetailsW(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails); + + + + +#line 1928 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 1932 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + +__declspec(dllimport) MMRESULT __stdcall mixerSetControlDetails(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails); + + + + + + +#line 1946 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 1947 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + +typedef void (__stdcall TIMECALLBACK)(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2); + +typedef TIMECALLBACK *LPTIMECALLBACK; + + + + + + + + + +#line 1975 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct timecaps_tag { + UINT wPeriodMin; + UINT wPeriodMax; +} TIMECAPS, *PTIMECAPS, *NPTIMECAPS, *LPTIMECAPS; + + +__declspec(dllimport) MMRESULT __stdcall timeGetSystemTime(LPMMTIME pmmt, UINT cbmmt); +__declspec(dllimport) DWORD __stdcall timeGetTime(void); +__declspec(dllimport) MMRESULT __stdcall timeSetEvent(UINT uDelay, UINT uResolution, + LPTIMECALLBACK fptc, DWORD dwUser, UINT fuEvent); +__declspec(dllimport) MMRESULT __stdcall timeKillEvent(UINT uTimerID); +__declspec(dllimport) MMRESULT __stdcall timeGetDevCaps(LPTIMECAPS ptc, UINT cbtc); +__declspec(dllimport) MMRESULT __stdcall timeBeginPeriod(UINT uPeriod); +__declspec(dllimport) MMRESULT __stdcall timeEndPeriod(UINT uPeriod); + +#line 1993 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 1994 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagJOYCAPSA { + WORD wMid; + WORD wPid; + CHAR szPname[32]; + UINT wXmin; + UINT wXmax; + UINT wYmin; + UINT wYmax; + UINT wZmin; + UINT wZmax; + UINT wNumButtons; + UINT wPeriodMin; + UINT wPeriodMax; + + UINT wRmin; + UINT wRmax; + UINT wUmin; + UINT wUmax; + UINT wVmin; + UINT wVmax; + UINT wCaps; + UINT wMaxAxes; + UINT wNumAxes; + UINT wMaxButtons; + CHAR szRegKey[32]; + CHAR szOEMVxD[260]; +#line 2126 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +} JOYCAPSA, *PJOYCAPSA, *NPJOYCAPSA, *LPJOYCAPSA; +typedef struct tagJOYCAPSW { + WORD wMid; + WORD wPid; + WCHAR szPname[32]; + UINT wXmin; + UINT wXmax; + UINT wYmin; + UINT wYmax; + UINT wZmin; + UINT wZmax; + UINT wNumButtons; + UINT wPeriodMin; + UINT wPeriodMax; + + UINT wRmin; + UINT wRmax; + UINT wUmin; + UINT wUmax; + UINT wVmin; + UINT wVmax; + UINT wCaps; + UINT wMaxAxes; + UINT wNumAxes; + UINT wMaxButtons; + WCHAR szRegKey[32]; + WCHAR szOEMVxD[260]; +#line 2154 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +} JOYCAPSW, *PJOYCAPSW, *NPJOYCAPSW, *LPJOYCAPSW; + + + + + + +typedef JOYCAPSA JOYCAPS; +typedef PJOYCAPSA PJOYCAPS; +typedef NPJOYCAPSA NPJOYCAPS; +typedef LPJOYCAPSA LPJOYCAPS; +#line 2166 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2197 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct joyinfo_tag { + UINT wXpos; + UINT wYpos; + UINT wZpos; + UINT wButtons; +} JOYINFO, *PJOYINFO, *NPJOYINFO, *LPJOYINFO; + + +typedef struct joyinfoex_tag { + DWORD dwSize; + DWORD dwFlags; + DWORD dwXpos; + DWORD dwYpos; + DWORD dwZpos; + DWORD dwRpos; + DWORD dwUpos; + DWORD dwVpos; + DWORD dwButtons; + DWORD dwButtonNumber; + DWORD dwPOV; + DWORD dwReserved1; + DWORD dwReserved2; +} JOYINFOEX, *PJOYINFOEX, *NPJOYINFOEX, *LPJOYINFOEX; +#line 2223 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +__declspec(dllimport) UINT __stdcall joyGetNumDevs(void); + + +__declspec(dllimport) MMRESULT __stdcall joyGetDevCapsA(UINT uJoyID, LPJOYCAPSA pjc, UINT cbjc); +__declspec(dllimport) MMRESULT __stdcall joyGetDevCapsW(UINT uJoyID, LPJOYCAPSW pjc, UINT cbjc); + + + + +#line 2237 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 2241 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +__declspec(dllimport) MMRESULT __stdcall joyGetPos(UINT uJoyID, LPJOYINFO pji); + + +__declspec(dllimport) MMRESULT __stdcall joyGetPosEx(UINT uJoyID, LPJOYINFOEX pji); +#line 2246 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +__declspec(dllimport) MMRESULT __stdcall joyGetThreshold(UINT uJoyID, LPUINT puThreshold); +__declspec(dllimport) MMRESULT __stdcall joyReleaseCapture(UINT uJoyID); +__declspec(dllimport) MMRESULT __stdcall joySetCapture(HWND hwnd, UINT uJoyID, UINT uPeriod, + BOOL fChanged); +__declspec(dllimport) MMRESULT __stdcall joySetThreshold(UINT uJoyID, UINT uThreshold); + +#line 2254 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 2256 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef DWORD FOURCC; +typedef char * HPSTR; +struct HMMIO__ { int unused; }; typedef struct HMMIO__ *HMMIO; +typedef LRESULT (__stdcall MMIOPROC)(LPSTR lpmmioinfo, UINT uMsg, + LPARAM lParam1, LPARAM lParam2); +typedef MMIOPROC *LPMMIOPROC; + + +typedef struct _MMIOINFO +{ + + DWORD dwFlags; + FOURCC fccIOProc; + LPMMIOPROC pIOProc; + UINT wErrorRet; + HTASK htask; + + + LONG cchBuffer; + HPSTR pchBuffer; + HPSTR pchNext; + HPSTR pchEndRead; + HPSTR pchEndWrite; + LONG lBufOffset; + + + LONG lDiskOffset; + DWORD adwInfo[3]; + + + DWORD dwReserved1; + DWORD dwReserved2; + HMMIO hmmio; +} MMIOINFO, *PMMIOINFO, *NPMMIOINFO, *LPMMIOINFO; +typedef const MMIOINFO *LPCMMIOINFO; + + +typedef struct _MMCKINFO +{ + FOURCC ckid; + DWORD cksize; + FOURCC fccType; + DWORD dwDataOffset; + DWORD dwFlags; +} MMCKINFO, *PMMCKINFO, *NPMMCKINFO, *LPMMCKINFO; +typedef const MMCKINFO *LPCMMCKINFO; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2387 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) FOURCC __stdcall mmioStringToFOURCCA(LPCSTR sz, UINT uFlags); +__declspec(dllimport) FOURCC __stdcall mmioStringToFOURCCW(LPCWSTR sz, UINT uFlags); + + + + +#line 2421 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +__declspec(dllimport) LPMMIOPROC __stdcall mmioInstallIOProcA(FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags); +__declspec(dllimport) LPMMIOPROC __stdcall mmioInstallIOProcW(FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags); + + + + +#line 2428 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +__declspec(dllimport) HMMIO __stdcall mmioOpenA(LPSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen); +__declspec(dllimport) HMMIO __stdcall mmioOpenW(LPWSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen); + + + + +#line 2435 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +__declspec(dllimport) MMRESULT __stdcall mmioRenameA(LPCSTR pszFileName, LPCSTR pszNewFileName, LPCMMIOINFO pmmioinfo, DWORD fdwRename); +__declspec(dllimport) MMRESULT __stdcall mmioRenameW(LPCWSTR pszFileName, LPCWSTR pszNewFileName, LPCMMIOINFO pmmioinfo, DWORD fdwRename); + + + + +#line 2442 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + +#line 2450 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +__declspec(dllimport) MMRESULT __stdcall mmioClose(HMMIO hmmio, UINT fuClose); +__declspec(dllimport) LONG __stdcall mmioRead(HMMIO hmmio, HPSTR pch, LONG cch); +__declspec(dllimport) LONG __stdcall mmioWrite(HMMIO hmmio, const char * pch, LONG cch); +__declspec(dllimport) LONG __stdcall mmioSeek(HMMIO hmmio, LONG lOffset, int iOrigin); +__declspec(dllimport) MMRESULT __stdcall mmioGetInfo(HMMIO hmmio, LPMMIOINFO pmmioinfo, UINT fuInfo); +__declspec(dllimport) MMRESULT __stdcall mmioSetInfo(HMMIO hmmio, LPCMMIOINFO pmmioinfo, UINT fuInfo); +__declspec(dllimport) MMRESULT __stdcall mmioSetBuffer(HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer, + UINT fuBuffer); +__declspec(dllimport) MMRESULT __stdcall mmioFlush(HMMIO hmmio, UINT fuFlush); +__declspec(dllimport) MMRESULT __stdcall mmioAdvance(HMMIO hmmio, LPMMIOINFO pmmioinfo, UINT fuAdvance); +__declspec(dllimport) LRESULT __stdcall mmioSendMessage(HMMIO hmmio, UINT uMsg, + LPARAM lParam1, LPARAM lParam2); +__declspec(dllimport) MMRESULT __stdcall mmioDescend(HMMIO hmmio, LPMMCKINFO pmmcki, + const MMCKINFO * pmmckiParent, UINT fuDescend); +__declspec(dllimport) MMRESULT __stdcall mmioAscend(HMMIO hmmio, LPMMCKINFO pmmcki, UINT fuAscend); +__declspec(dllimport) MMRESULT __stdcall mmioCreateChunk(HMMIO hmmio, LPMMCKINFO pmmcki, UINT fuCreate); + +#line 2469 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 2470 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + +typedef DWORD MCIERROR; +#line 2483 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +typedef UINT MCIDEVICEID; +#line 2488 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +typedef UINT (__stdcall *YIELDPROC)(MCIDEVICEID mciId, DWORD dwYieldData); + + + + +__declspec(dllimport) MCIERROR __stdcall mciSendCommandA(MCIDEVICEID mciId, UINT uMsg, DWORD dwParam1, DWORD dwParam2); +__declspec(dllimport) MCIERROR __stdcall mciSendCommandW(MCIDEVICEID mciId, UINT uMsg, DWORD dwParam1, DWORD dwParam2); + + + + +#line 2501 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +__declspec(dllimport) MCIERROR __stdcall mciSendStringA(LPCSTR lpstrCommand, LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback); +__declspec(dllimport) MCIERROR __stdcall mciSendStringW(LPCWSTR lpstrCommand, LPWSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback); + + + + +#line 2508 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +__declspec(dllimport) MCIDEVICEID __stdcall mciGetDeviceIDA(LPCSTR pszDevice); +__declspec(dllimport) MCIDEVICEID __stdcall mciGetDeviceIDW(LPCWSTR pszDevice); + + + + +#line 2515 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +__declspec(dllimport) MCIDEVICEID __stdcall mciGetDeviceIDFromElementIDA(DWORD dwElementID, LPCSTR lpstrType ); +__declspec(dllimport) MCIDEVICEID __stdcall mciGetDeviceIDFromElementIDW(DWORD dwElementID, LPCWSTR lpstrType ); + + + + +#line 2522 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +__declspec(dllimport) BOOL __stdcall mciGetErrorStringA(MCIERROR mcierr, LPSTR pszText, UINT cchText); +__declspec(dllimport) BOOL __stdcall mciGetErrorStringW(MCIERROR mcierr, LPWSTR pszText, UINT cchText); + + + + +#line 2529 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + +#line 2536 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +__declspec(dllimport) BOOL __stdcall mciSetYieldProc(MCIDEVICEID mciId, YIELDPROC fpYieldProc, + DWORD dwYieldData); + + +__declspec(dllimport) HTASK __stdcall mciGetCreatorTask(MCIDEVICEID mciId); +__declspec(dllimport) YIELDPROC __stdcall mciGetYieldProc(MCIDEVICEID mciId, LPDWORD pdwYieldData); +#line 2544 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + +#line 2548 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagMCI_GENERIC_PARMS { + DWORD dwCallback; +} MCI_GENERIC_PARMS, *PMCI_GENERIC_PARMS, *LPMCI_GENERIC_PARMS; + + + + +typedef struct tagMCI_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; +} MCI_OPEN_PARMSA, *PMCI_OPEN_PARMSA, *LPMCI_OPEN_PARMSA; +typedef struct tagMCI_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; +} MCI_OPEN_PARMSW, *PMCI_OPEN_PARMSW, *LPMCI_OPEN_PARMSW; + + + + + +typedef MCI_OPEN_PARMSA MCI_OPEN_PARMS; +typedef PMCI_OPEN_PARMSA PMCI_OPEN_PARMS; +typedef LPMCI_OPEN_PARMSA LPMCI_OPEN_PARMS; +#line 2867 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + +#line 2878 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct tagMCI_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} MCI_PLAY_PARMS, *PMCI_PLAY_PARMS, *LPMCI_PLAY_PARMS; + + +typedef struct tagMCI_SEEK_PARMS { + DWORD dwCallback; + DWORD dwTo; +} MCI_SEEK_PARMS, *PMCI_SEEK_PARMS, *LPMCI_SEEK_PARMS; + + +typedef struct tagMCI_STATUS_PARMS { + DWORD dwCallback; + DWORD dwReturn; + DWORD dwItem; + DWORD dwTrack; +} MCI_STATUS_PARMS, *PMCI_STATUS_PARMS, * LPMCI_STATUS_PARMS; + + + + +typedef struct tagMCI_INFO_PARMSA { + DWORD dwCallback; + LPSTR lpstrReturn; + DWORD dwRetSize; +} MCI_INFO_PARMSA, * LPMCI_INFO_PARMSA; +typedef struct tagMCI_INFO_PARMSW { + DWORD dwCallback; + LPWSTR lpstrReturn; + DWORD dwRetSize; +} MCI_INFO_PARMSW, * LPMCI_INFO_PARMSW; + + + + +typedef MCI_INFO_PARMSA MCI_INFO_PARMS; +typedef LPMCI_INFO_PARMSA LPMCI_INFO_PARMS; +#line 2920 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + +#line 2928 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct tagMCI_GETDEVCAPS_PARMS { + DWORD dwCallback; + DWORD dwReturn; + DWORD dwItem; +} MCI_GETDEVCAPS_PARMS, *PMCI_GETDEVCAPS_PARMS, * LPMCI_GETDEVCAPS_PARMS; + + + + +typedef struct tagMCI_SYSINFO_PARMSA { + DWORD dwCallback; + LPSTR lpstrReturn; + DWORD dwRetSize; + DWORD dwNumber; + UINT wDeviceType; +} MCI_SYSINFO_PARMSA, *PMCI_SYSINFO_PARMSA, * LPMCI_SYSINFO_PARMSA; +typedef struct tagMCI_SYSINFO_PARMSW { + DWORD dwCallback; + LPWSTR lpstrReturn; + DWORD dwRetSize; + DWORD dwNumber; + UINT wDeviceType; +} MCI_SYSINFO_PARMSW, *PMCI_SYSINFO_PARMSW, * LPMCI_SYSINFO_PARMSW; + + + + + +typedef MCI_SYSINFO_PARMSA MCI_SYSINFO_PARMS; +typedef PMCI_SYSINFO_PARMSA PMCI_SYSINFO_PARMS; +typedef LPMCI_SYSINFO_PARMSA LPMCI_SYSINFO_PARMS; +#line 2962 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + +#line 2972 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct tagMCI_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; +} MCI_SET_PARMS, *PMCI_SET_PARMS, *LPMCI_SET_PARMS; + + +typedef struct tagMCI_BREAK_PARMS { + DWORD dwCallback; + + int nVirtKey; + HWND hwndBreak; + + + + + +#line 2992 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +} MCI_BREAK_PARMS, *PMCI_BREAK_PARMS, * LPMCI_BREAK_PARMS; + + + + +typedef struct tagMCI_SAVE_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; +} MCI_SAVE_PARMSA, *PMCI_SAVE_PARMSA, * LPMCI_SAVE_PARMSA; +typedef struct tagMCI_SAVE_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; +} MCI_SAVE_PARMSW, *PMCI_SAVE_PARMSW, * LPMCI_SAVE_PARMSW; + + + + + +typedef MCI_SAVE_PARMSA MCI_SAVE_PARMS; +typedef PMCI_SAVE_PARMSA PMCI_SAVE_PARMS; +typedef LPMCI_SAVE_PARMSA LPMCI_SAVE_PARMS; +#line 3014 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + +#line 3021 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +typedef struct tagMCI_LOAD_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; +} MCI_LOAD_PARMSA, *PMCI_LOAD_PARMSA, * LPMCI_LOAD_PARMSA; +typedef struct tagMCI_LOAD_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; +} MCI_LOAD_PARMSW, *PMCI_LOAD_PARMSW, * LPMCI_LOAD_PARMSW; + + + + + +typedef MCI_LOAD_PARMSA MCI_LOAD_PARMS; +typedef PMCI_LOAD_PARMSA PMCI_LOAD_PARMS; +typedef LPMCI_LOAD_PARMSA LPMCI_LOAD_PARMS; +#line 3042 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + +#line 3049 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct tagMCI_RECORD_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} MCI_RECORD_PARMS, *LPMCI_RECORD_PARMS; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagMCI_VD_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; + DWORD dwSpeed; +} MCI_VD_PLAY_PARMS, *PMCI_VD_PLAY_PARMS, *LPMCI_VD_PLAY_PARMS; + + +typedef struct tagMCI_VD_STEP_PARMS { + DWORD dwCallback; + DWORD dwFrames; +} MCI_VD_STEP_PARMS, *PMCI_VD_STEP_PARMS, *LPMCI_VD_STEP_PARMS; + + + + +typedef struct tagMCI_VD_ESCAPE_PARMSA { + DWORD dwCallback; + LPCSTR lpstrCommand; +} MCI_VD_ESCAPE_PARMSA, *PMCI_VD_ESCAPE_PARMSA, *LPMCI_VD_ESCAPE_PARMSA; +typedef struct tagMCI_VD_ESCAPE_PARMSW { + DWORD dwCallback; + LPCWSTR lpstrCommand; +} MCI_VD_ESCAPE_PARMSW, *PMCI_VD_ESCAPE_PARMSW, *LPMCI_VD_ESCAPE_PARMSW; + + + + + +typedef MCI_VD_ESCAPE_PARMSA MCI_VD_ESCAPE_PARMS; +typedef PMCI_VD_ESCAPE_PARMSA PMCI_VD_ESCAPE_PARMS; +typedef LPMCI_VD_ESCAPE_PARMSA LPMCI_VD_ESCAPE_PARMS; +#line 3142 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + +#line 3149 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagMCI_WAVE_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwBufferSeconds; +} MCI_WAVE_OPEN_PARMSA, *PMCI_WAVE_OPEN_PARMSA, *LPMCI_WAVE_OPEN_PARMSA; +typedef struct tagMCI_WAVE_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwBufferSeconds; +} MCI_WAVE_OPEN_PARMSW, *PMCI_WAVE_OPEN_PARMSW, *LPMCI_WAVE_OPEN_PARMSW; + + + + + +typedef MCI_WAVE_OPEN_PARMSA MCI_WAVE_OPEN_PARMS; +typedef PMCI_WAVE_OPEN_PARMSA PMCI_WAVE_OPEN_PARMS; +typedef LPMCI_WAVE_OPEN_PARMSA LPMCI_WAVE_OPEN_PARMS; +#line 3225 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + +#line 3237 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct tagMCI_WAVE_DELETE_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} MCI_WAVE_DELETE_PARMS, *PMCI_WAVE_DELETE_PARMS, *LPMCI_WAVE_DELETE_PARMS; + + +typedef struct tagMCI_WAVE_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; + + UINT wInput; + UINT wOutput; + + + + + +#line 3259 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + WORD wFormatTag; + WORD wReserved2; + WORD nChannels; + WORD wReserved3; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; + WORD wReserved4; + WORD wBitsPerSample; + WORD wReserved5; +} MCI_WAVE_SET_PARMS, *PMCI_WAVE_SET_PARMS, * LPMCI_WAVE_SET_PARMS; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagMCI_SEQ_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; + DWORD dwTempo; + DWORD dwPort; + DWORD dwSlave; + DWORD dwMaster; + DWORD dwOffset; +} MCI_SEQ_SET_PARMS, *PMCI_SEQ_SET_PARMS, * LPMCI_SEQ_SET_PARMS; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagMCI_ANIM_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_ANIM_OPEN_PARMSA, *PMCI_ANIM_OPEN_PARMSA, *LPMCI_ANIM_OPEN_PARMSA; +typedef struct tagMCI_ANIM_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_ANIM_OPEN_PARMSW, *PMCI_ANIM_OPEN_PARMSW, *LPMCI_ANIM_OPEN_PARMSW; + + + + + +typedef MCI_ANIM_OPEN_PARMSA MCI_ANIM_OPEN_PARMS; +typedef PMCI_ANIM_OPEN_PARMSA PMCI_ANIM_OPEN_PARMS; +typedef LPMCI_ANIM_OPEN_PARMSA LPMCI_ANIM_OPEN_PARMS; +#line 3413 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + +#line 3427 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct tagMCI_ANIM_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; + DWORD dwSpeed; +} MCI_ANIM_PLAY_PARMS, *PMCI_ANIM_PLAY_PARMS, *LPMCI_ANIM_PLAY_PARMS; + + +typedef struct tagMCI_ANIM_STEP_PARMS { + DWORD dwCallback; + DWORD dwFrames; +} MCI_ANIM_STEP_PARMS, *PMCI_ANIM_STEP_PARMS, *LPMCI_ANIM_STEP_PARMS; + + + + +typedef struct tagMCI_ANIM_WINDOW_PARMSA { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCSTR lpstrText; +} MCI_ANIM_WINDOW_PARMSA, *PMCI_ANIM_WINDOW_PARMSA, * LPMCI_ANIM_WINDOW_PARMSA; +typedef struct tagMCI_ANIM_WINDOW_PARMSW { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCWSTR lpstrText; +} MCI_ANIM_WINDOW_PARMSW, *PMCI_ANIM_WINDOW_PARMSW, * LPMCI_ANIM_WINDOW_PARMSW; + + + + + +typedef MCI_ANIM_WINDOW_PARMSA MCI_ANIM_WINDOW_PARMS; +typedef PMCI_ANIM_WINDOW_PARMSA PMCI_ANIM_WINDOW_PARMS; +typedef LPMCI_ANIM_WINDOW_PARMSA LPMCI_ANIM_WINDOW_PARMS; +#line 3466 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + +#line 3477 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct tagMCI_ANIM_RECT_PARMS { + DWORD dwCallback; + + + + + RECT rc; +#line 3487 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +} MCI_ANIM_RECT_PARMS; +typedef MCI_ANIM_RECT_PARMS * PMCI_ANIM_RECT_PARMS; +typedef MCI_ANIM_RECT_PARMS * LPMCI_ANIM_RECT_PARMS; + + +typedef struct tagMCI_ANIM_UPDATE_PARMS { + DWORD dwCallback; + RECT rc; + HDC hDC; +} MCI_ANIM_UPDATE_PARMS, *PMCI_ANIM_UPDATE_PARMS, * LPMCI_ANIM_UPDATE_PARMS; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagMCI_OVLY_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_OVLY_OPEN_PARMSA, *PMCI_OVLY_OPEN_PARMSA, *LPMCI_OVLY_OPEN_PARMSA; +typedef struct tagMCI_OVLY_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} MCI_OVLY_OPEN_PARMSW, *PMCI_OVLY_OPEN_PARMSW, *LPMCI_OVLY_OPEN_PARMSW; + + + + + +typedef MCI_OVLY_OPEN_PARMSA MCI_OVLY_OPEN_PARMS; +typedef PMCI_OVLY_OPEN_PARMSA PMCI_OVLY_OPEN_PARMS; +typedef LPMCI_OVLY_OPEN_PARMSA LPMCI_OVLY_OPEN_PARMS; +#line 3569 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + +#line 3583 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +typedef struct tagMCI_OVLY_WINDOW_PARMSA { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCSTR lpstrText; +} MCI_OVLY_WINDOW_PARMSA, *PMCI_OVLY_WINDOW_PARMSA, * LPMCI_OVLY_WINDOW_PARMSA; +typedef struct tagMCI_OVLY_WINDOW_PARMSW { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCWSTR lpstrText; +} MCI_OVLY_WINDOW_PARMSW, *PMCI_OVLY_WINDOW_PARMSW, * LPMCI_OVLY_WINDOW_PARMSW; + + + + + +typedef MCI_OVLY_WINDOW_PARMSA MCI_OVLY_WINDOW_PARMS; +typedef PMCI_OVLY_WINDOW_PARMSA PMCI_OVLY_WINDOW_PARMS; +typedef LPMCI_OVLY_WINDOW_PARMSA LPMCI_OVLY_WINDOW_PARMS; +#line 3608 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + +#line 3618 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + +typedef struct tagMCI_OVLY_RECT_PARMS { + DWORD dwCallback; + + + + + RECT rc; +#line 3628 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +} MCI_OVLY_RECT_PARMS, *PMCI_OVLY_RECT_PARMS, * LPMCI_OVLY_RECT_PARMS; + + + + +typedef struct tagMCI_OVLY_SAVE_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; + RECT rc; +} MCI_OVLY_SAVE_PARMSA, *PMCI_OVLY_SAVE_PARMSA, * LPMCI_OVLY_SAVE_PARMSA; +typedef struct tagMCI_OVLY_SAVE_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; + RECT rc; +} MCI_OVLY_SAVE_PARMSW, *PMCI_OVLY_SAVE_PARMSW, * LPMCI_OVLY_SAVE_PARMSW; + + + + + +typedef MCI_OVLY_SAVE_PARMSA MCI_OVLY_SAVE_PARMS; +typedef PMCI_OVLY_SAVE_PARMSA PMCI_OVLY_SAVE_PARMS; +typedef LPMCI_OVLY_SAVE_PARMSA LPMCI_OVLY_SAVE_PARMS; +#line 3652 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + +#line 3659 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +typedef struct tagMCI_OVLY_LOAD_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; + RECT rc; +} MCI_OVLY_LOAD_PARMSA, *PMCI_OVLY_LOAD_PARMSA, * LPMCI_OVLY_LOAD_PARMSA; +typedef struct tagMCI_OVLY_LOAD_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; + RECT rc; +} MCI_OVLY_LOAD_PARMSW, *PMCI_OVLY_LOAD_PARMSW, * LPMCI_OVLY_LOAD_PARMSW; + + + + + +typedef MCI_OVLY_LOAD_PARMSA MCI_OVLY_LOAD_PARMS; +typedef PMCI_OVLY_LOAD_PARMSA PMCI_OVLY_LOAD_PARMS; +typedef LPMCI_OVLY_LOAD_PARMSA LPMCI_OVLY_LOAD_PARMS; +#line 3682 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + +#line 3689 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 3691 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 3692 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + +#line 3704 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 3736 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + + + + +#line 3741 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" + +#line 3743 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mmsystem.h" +#line 193 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\nb30.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _NCB { + UCHAR ncb_command; + UCHAR ncb_retcode; + UCHAR ncb_lsn; + UCHAR ncb_num; + PUCHAR ncb_buffer; + WORD ncb_length; + UCHAR ncb_callname[16]; + UCHAR ncb_name[16]; + UCHAR ncb_rto; + UCHAR ncb_sto; + void (__stdcall *ncb_post)( struct _NCB * ); + UCHAR ncb_lana_num; + UCHAR ncb_cmd_cplt; + UCHAR ncb_reserve[10]; + HANDLE ncb_event; + + + +} NCB, *PNCB; + + + + + + +typedef struct _ADAPTER_STATUS { + UCHAR adapter_address[6]; + UCHAR rev_major; + UCHAR reserved0; + UCHAR adapter_type; + UCHAR rev_minor; + WORD duration; + WORD frmr_recv; + WORD frmr_xmit; + + WORD iframe_recv_err; + + WORD xmit_aborts; + DWORD xmit_success; + DWORD recv_success; + + WORD iframe_xmit_err; + + WORD recv_buff_unavail; + WORD t1_timeouts; + WORD ti_timeouts; + DWORD reserved1; + WORD free_ncbs; + WORD max_cfg_ncbs; + WORD max_ncbs; + WORD xmit_buf_unavail; + WORD max_dgram_size; + WORD pending_sess; + WORD max_cfg_sess; + WORD max_sess; + WORD max_sess_pkt_size; + WORD name_count; +} ADAPTER_STATUS, *PADAPTER_STATUS; + +typedef struct _NAME_BUFFER { + UCHAR name[16]; + UCHAR name_num; + UCHAR name_flags; +} NAME_BUFFER, *PNAME_BUFFER; + + + + + + + + + + + + + + + + + + + + + +typedef struct _SESSION_HEADER { + UCHAR sess_name; + UCHAR num_sess; + UCHAR rcv_dg_outstanding; + UCHAR rcv_any_outstanding; +} SESSION_HEADER, *PSESSION_HEADER; + +typedef struct _SESSION_BUFFER { + UCHAR lsn; + UCHAR state; + UCHAR local_name[16]; + UCHAR remote_name[16]; + UCHAR rcvs_outstanding; + UCHAR sends_outstanding; +} SESSION_BUFFER, *PSESSION_BUFFER; + + + + + + + + + + + + + + + + + +typedef struct _LANA_ENUM { + UCHAR length; + UCHAR lana[254+1]; +} LANA_ENUM, *PLANA_ENUM; + + + + + + +typedef struct _FIND_NAME_HEADER { + WORD node_count; + UCHAR reserved; + UCHAR unique_group; +} FIND_NAME_HEADER, *PFIND_NAME_HEADER; + +typedef struct _FIND_NAME_BUFFER { + UCHAR length; + UCHAR access_control; + UCHAR frame_control; + UCHAR destination_addr[6]; + UCHAR source_addr[6]; + UCHAR routing_info[18]; +} FIND_NAME_BUFFER, *PFIND_NAME_BUFFER; + + + + + + +typedef struct _ACTION_HEADER { + ULONG transport_id; + USHORT action_code; + USHORT reserved; +} ACTION_HEADER, *PACTION_HEADER; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +UCHAR +__stdcall +Netbios( + PNCB pncb + ); + + + + + + + + + + + + + + +#line 309 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\nb30.h" +#line 194 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + +#line 40 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + +#line 44 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + +#line 51 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + +typedef void * I_RPC_HANDLE; +typedef long RPC_STATUS; + + + +#line 58 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + +#line 78 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + +#line 87 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + +#line 93 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + +#line 99 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + +#line 105 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef I_RPC_HANDLE RPC_BINDING_HANDLE; +typedef RPC_BINDING_HANDLE handle_t; + + + + + + + + + + + + + + + +typedef GUID UUID; + + +#line 51 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" +#line 52 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + +typedef struct _RPC_BINDING_VECTOR +{ + unsigned long Count; + RPC_BINDING_HANDLE BindingH[1]; +} RPC_BINDING_VECTOR; + + +#line 61 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + +typedef struct _UUID_VECTOR +{ + unsigned long Count; + UUID *Uuid[1]; +} UUID_VECTOR; + + +#line 70 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + +typedef void * RPC_IF_HANDLE; + + + +typedef struct _RPC_IF_ID +{ + UUID Uuid; + unsigned short VersMajor; + unsigned short VersMinor; +} RPC_IF_ID; +#line 82 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _RPC_PROTSEQ_VECTORA +{ + unsigned int Count; + unsigned char * Protseq[1]; +} RPC_PROTSEQ_VECTORA; + +typedef struct _RPC_PROTSEQ_VECTORW +{ + unsigned int Count; + unsigned short * Protseq[1]; +} RPC_PROTSEQ_VECTORW; + + + + + +#line 145 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + +#line 155 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" +typedef struct _RPC_POLICY { + unsigned int Length ; + unsigned long EndpointFlags ; + unsigned long NICFlags ; + } RPC_POLICY, *PRPC_POLICY ; + +typedef void __stdcall +RPC_OBJECT_INQ_FN ( + UUID * ObjectUuid, + UUID * TypeUuid, + RPC_STATUS * Status + ); + +typedef RPC_STATUS __stdcall +RPC_IF_CALLBACK_FN ( + RPC_IF_HANDLE InterfaceUuid, + void *Context + ) ; + + + +typedef struct +{ + unsigned int Count; + unsigned long Stats[1]; +} RPC_STATS_VECTOR; + + + + + + +typedef struct +{ + unsigned long Count; + RPC_IF_ID * IfId[1]; +} RPC_IF_ID_VECTOR; + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingCopy ( + RPC_BINDING_HANDLE SourceBinding, + RPC_BINDING_HANDLE * DestinationBinding + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingFree ( + RPC_BINDING_HANDLE * Binding + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingSetOption( RPC_BINDING_HANDLE hBinding, + unsigned long option, + unsigned long optionValue ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingInqOption( RPC_BINDING_HANDLE hBinding, + unsigned long option, + unsigned long *pOptionValue ); + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingFromStringBindingA ( + unsigned char * StringBinding, + RPC_BINDING_HANDLE * Binding + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingFromStringBindingW ( + unsigned short * StringBinding, + RPC_BINDING_HANDLE * Binding + ); + + + + + +#line 251 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + +#line 263 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingInqObject ( + RPC_BINDING_HANDLE Binding, + UUID * ObjectUuid + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingReset ( + RPC_BINDING_HANDLE Binding + ); + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingSetObject ( + RPC_BINDING_HANDLE Binding, + UUID * ObjectUuid + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtInqDefaultProtectLevel( + unsigned long AuthnSvc, + unsigned long *AuthnLevel + ); + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingToStringBindingA ( + RPC_BINDING_HANDLE Binding, + unsigned char * * StringBinding + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingToStringBindingW ( + RPC_BINDING_HANDLE Binding, + unsigned short * * StringBinding + ); + + + + + +#line 327 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + +#line 339 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingVectorFree ( + RPC_BINDING_VECTOR * * BindingVector + ); + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcStringBindingComposeA ( + unsigned char * ObjUuid , + unsigned char * Protseq , + unsigned char * NetworkAddr , + unsigned char * Endpoint , + unsigned char * Options , + unsigned char * * StringBinding + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcStringBindingComposeW ( + unsigned short * ObjUuid , + unsigned short * Protseq , + unsigned short * NetworkAddr , + unsigned short * Endpoint , + unsigned short * Options , + unsigned short * * StringBinding + ); + + + + + +#line 381 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + + + + +#line 397 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcStringBindingParseA ( + unsigned char * StringBinding, + unsigned char * * ObjUuid , + unsigned char * * Protseq , + unsigned char * * NetworkAddr , + unsigned char * * Endpoint , + unsigned char * * NetworkOptions + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcStringBindingParseW ( + unsigned short * StringBinding, + unsigned short * * ObjUuid , + unsigned short * * Protseq , + unsigned short * * NetworkAddr , + unsigned short * * Endpoint , + unsigned short * * NetworkOptions + ); + + + + + +#line 431 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + + + + +#line 447 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcStringFreeA ( + unsigned char * * String + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcStringFreeW ( + unsigned short * * String + ); + + + + + +#line 471 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + +#line 482 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcIfInqId ( + RPC_IF_HANDLE RpcIfHandle, + RPC_IF_ID * RpcIfId + ); + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcNetworkIsProtseqValidA ( + unsigned char * Protseq + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcNetworkIsProtseqValidW ( + unsigned short * Protseq + ); + + + + + +#line 515 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + +#line 526 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtInqComTimeout ( + RPC_BINDING_HANDLE Binding, + unsigned int * Timeout + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtSetComTimeout ( + RPC_BINDING_HANDLE Binding, + unsigned int Timeout + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtSetCancelTimeout( + long Timeout + ); + + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcNetworkInqProtseqsA ( + RPC_PROTSEQ_VECTORA * * ProtseqVector + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcNetworkInqProtseqsW ( + RPC_PROTSEQ_VECTORW * * ProtseqVector + ); + + + + + +#line 577 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + +#line 588 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcObjectInqType ( + UUID * ObjUuid, + UUID * TypeUuid + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcObjectSetInqFn ( + RPC_OBJECT_INQ_FN * InquiryFn + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcObjectSetType ( + UUID * ObjUuid, + UUID * TypeUuid + ); + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcProtseqVectorFreeA ( + RPC_PROTSEQ_VECTORA * * ProtseqVector + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcProtseqVectorFreeW ( + RPC_PROTSEQ_VECTORW * * ProtseqVector + ); + + + + + +#line 638 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + +#line 649 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerInqBindings ( + RPC_BINDING_VECTOR * * BindingVector + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerInqIf ( + RPC_IF_HANDLE IfSpec, + UUID * MgrTypeUuid, + void * * MgrEpv + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerListen ( + unsigned int MinimumCallThreads, + unsigned int MaxCalls, + unsigned int DontWait + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerRegisterIf ( + RPC_IF_HANDLE IfSpec, + UUID * MgrTypeUuid , + void * MgrEpv + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerRegisterIfEx ( + RPC_IF_HANDLE IfSpec, + UUID * MgrTypeUuid, + void * MgrEpv, + unsigned int Flags, + unsigned int MaxCalls, + RPC_IF_CALLBACK_FN *IfCallback + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUnregisterIf ( + RPC_IF_HANDLE IfSpec, + UUID * MgrTypeUuid, + unsigned int WaitForCallsToComplete + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseAllProtseqs ( + unsigned int MaxCalls, + void * SecurityDescriptor + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseAllProtseqsEx ( + unsigned int MaxCalls, + void * SecurityDescriptor, + PRPC_POLICY Policy + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseAllProtseqsIf ( + unsigned int MaxCalls, + RPC_IF_HANDLE IfSpec, + void * SecurityDescriptor + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseAllProtseqsIfEx ( + unsigned int MaxCalls, + RPC_IF_HANDLE IfSpec, + void * SecurityDescriptor, + PRPC_POLICY Policy + ); + + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqA ( + unsigned char * Protseq, + unsigned int MaxCalls, + void * SecurityDescriptor + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqExA ( + unsigned char * Protseq, + unsigned int MaxCalls, + void * SecurityDescriptor, + PRPC_POLICY Policy + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqW ( + unsigned short * Protseq, + unsigned int MaxCalls, + void * SecurityDescriptor + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqExW ( + unsigned short * Protseq, + unsigned int MaxCalls, + void * SecurityDescriptor, + PRPC_POLICY Policy + ); + + + + + + + +#line 801 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + + + + + + + + + + + +#line 824 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqEpA ( + unsigned char * Protseq, + unsigned int MaxCalls, + unsigned char * Endpoint, + void * SecurityDescriptor + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqEpExA ( + unsigned char * Protseq, + unsigned int MaxCalls, + unsigned char * Endpoint, + void * SecurityDescriptor, + PRPC_POLICY Policy + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqEpW ( + unsigned short * Protseq, + unsigned int MaxCalls, + unsigned short * Endpoint, + void * SecurityDescriptor + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqEpExW ( + unsigned short * Protseq, + unsigned int MaxCalls, + unsigned short * Endpoint, + void * SecurityDescriptor, + PRPC_POLICY Policy + ); + + + + + + + +#line 878 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + + + + + + + + + + + + + +#line 903 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqIfA ( + unsigned char * Protseq, + unsigned int MaxCalls, + RPC_IF_HANDLE IfSpec, + void * SecurityDescriptor + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqIfExA ( + unsigned char * Protseq, + unsigned int MaxCalls, + RPC_IF_HANDLE IfSpec, + void * SecurityDescriptor, + PRPC_POLICY Policy + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqIfW ( + unsigned short * Protseq, + unsigned int MaxCalls, + RPC_IF_HANDLE IfSpec, + void * SecurityDescriptor + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerUseProtseqIfExW ( + unsigned short * Protseq, + unsigned int MaxCalls, + RPC_IF_HANDLE IfSpec, + void * SecurityDescriptor, + PRPC_POLICY Policy + ); + + + + + + + +#line 957 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + + + + + + + + + + + + + +#line 982 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtStatsVectorFree ( + RPC_STATS_VECTOR ** StatsVector + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtInqStats ( + RPC_BINDING_HANDLE Binding, + RPC_STATS_VECTOR ** Statistics + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtIsServerListening ( + RPC_BINDING_HANDLE Binding + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtStopServerListening ( + RPC_BINDING_HANDLE Binding + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtWaitServerListen ( + void + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtSetServerStackSize ( + unsigned long ThreadStackSize + ); + + +__declspec(dllimport) +void +__stdcall +RpcSsDontSerializeContext ( + void + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtEnableIdleCleanup ( + void + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtInqIfIds ( + RPC_BINDING_HANDLE Binding, + RPC_IF_ID_VECTOR * * IfIdVector + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcIfIdVectorFree ( + RPC_IF_ID_VECTOR * * IfIdVector + ); + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtInqServerPrincNameA ( + RPC_BINDING_HANDLE Binding, + unsigned long AuthnSvc, + unsigned char * * ServerPrincName + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtInqServerPrincNameW ( + RPC_BINDING_HANDLE Binding, + unsigned long AuthnSvc, + unsigned short * * ServerPrincName + ); + + + + + +#line 1088 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + +#line 1101 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerInqDefaultPrincNameA ( + unsigned long AuthnSvc, + unsigned char * * PrincName + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerInqDefaultPrincNameW ( + unsigned long AuthnSvc, + unsigned short * * PrincName + ); + + + + + +#line 1125 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + +#line 1137 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcEpResolveBinding ( + RPC_BINDING_HANDLE Binding, + RPC_IF_HANDLE IfSpec + ); + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcNsBindingInqEntryNameA ( + RPC_BINDING_HANDLE Binding, + unsigned long EntryNameSyntax, + unsigned char * * EntryName + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcNsBindingInqEntryNameW ( + RPC_BINDING_HANDLE Binding, + unsigned long EntryNameSyntax, + unsigned short * * EntryName + ); + + + + + +#line 1174 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + +#line 1187 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + +typedef void * RPC_AUTH_IDENTITY_HANDLE; +typedef void * RPC_AUTHZ_HANDLE; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _RPC_SECURITY_QOS { + unsigned long Version; + unsigned long Capabilities; + unsigned long IdentityTracking; + unsigned long ImpersonationType; +} RPC_SECURITY_QOS, *PRPC_SECURITY_QOS; + + + + + + + + +#line 1246 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + +typedef struct _SEC_WINNT_AUTH_IDENTITY_W { + unsigned short *User; + unsigned long UserLength; + unsigned short *Domain; + unsigned long DomainLength; + unsigned short *Password; + unsigned long PasswordLength; + unsigned long Flags; +} SEC_WINNT_AUTH_IDENTITY_W, *PSEC_WINNT_AUTH_IDENTITY_W; + +typedef struct _SEC_WINNT_AUTH_IDENTITY_A { + unsigned char *User; + unsigned long UserLength; + unsigned char *Domain; + unsigned long DomainLength; + unsigned char *Password; + unsigned long PasswordLength; + unsigned long Flags; +} SEC_WINNT_AUTH_IDENTITY_A, *PSEC_WINNT_AUTH_IDENTITY_A; + + + + + + + + + + +#line 1281 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" +#line 1282 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingInqAuthClientA ( + RPC_BINDING_HANDLE ClientBinding, + RPC_AUTHZ_HANDLE * Privs, + unsigned char * * ServerPrincName, + unsigned long * AuthnLevel, + unsigned long * AuthnSvc, + unsigned long * AuthzSvc + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingInqAuthClientW ( + RPC_BINDING_HANDLE ClientBinding, + RPC_AUTHZ_HANDLE * Privs, + unsigned short * * ServerPrincName, + unsigned long * AuthnLevel, + unsigned long * AuthnSvc, + unsigned long * AuthzSvc + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingInqAuthInfoA ( + RPC_BINDING_HANDLE Binding, + unsigned char * * ServerPrincName, + unsigned long * AuthnLevel, + unsigned long * AuthnSvc, + RPC_AUTH_IDENTITY_HANDLE * AuthIdentity, + unsigned long * AuthzSvc + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingInqAuthInfoW ( + RPC_BINDING_HANDLE Binding, + unsigned short * * ServerPrincName, + unsigned long * AuthnLevel, + unsigned long * AuthnSvc, + RPC_AUTH_IDENTITY_HANDLE * AuthIdentity, + unsigned long * AuthzSvc + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingSetAuthInfoA ( + RPC_BINDING_HANDLE Binding, + unsigned char * ServerPrincName, + unsigned long AuthnLevel, + unsigned long AuthnSvc, + RPC_AUTH_IDENTITY_HANDLE AuthIdentity, + unsigned long AuthzSvc + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingSetAuthInfoExA ( + RPC_BINDING_HANDLE Binding, + unsigned char * ServerPrincName, + unsigned long AuthnLevel, + unsigned long AuthnSvc, + RPC_AUTH_IDENTITY_HANDLE AuthIdentity, + unsigned long AuthzSvc, + RPC_SECURITY_QOS *SecurityQos + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingSetAuthInfoW ( + RPC_BINDING_HANDLE Binding, + unsigned short * ServerPrincName, + unsigned long AuthnLevel, + unsigned long AuthnSvc, + RPC_AUTH_IDENTITY_HANDLE AuthIdentity, + unsigned long AuthzSvc + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingSetAuthInfoExW ( + RPC_BINDING_HANDLE Binding, + unsigned short * ServerPrincName, + unsigned long AuthnLevel, + unsigned long AuthnSvc, + RPC_AUTH_IDENTITY_HANDLE AuthIdentity, + unsigned long AuthzSvc, + RPC_SECURITY_QOS *SecurityQOS + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingInqAuthInfoExA ( + RPC_BINDING_HANDLE Binding, + unsigned char * * ServerPrincName, + unsigned long * AuthnLevel, + unsigned long * AuthnSvc, + RPC_AUTH_IDENTITY_HANDLE * AuthIdentity, + unsigned long * AuthzSvc, + unsigned long RpcQosVersion, + RPC_SECURITY_QOS *SecurityQOS + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingInqAuthInfoExW ( + RPC_BINDING_HANDLE Binding, + unsigned short * * ServerPrincName, + unsigned long * AuthnLevel, + unsigned long * AuthnSvc, + RPC_AUTH_IDENTITY_HANDLE * AuthIdentity, + unsigned long * AuthzSvc , + unsigned long RpcQosVersion, + RPC_SECURITY_QOS *SecurityQOS + ); + +typedef void +(__stdcall * RPC_AUTH_KEY_RETRIEVAL_FN) ( + void * Arg, + unsigned short * ServerPrincName, + unsigned long KeyVer, + void * * Key, + RPC_STATUS * Status + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerRegisterAuthInfoA ( + unsigned char * ServerPrincName, + unsigned long AuthnSvc, + RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn , + void * Arg + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerRegisterAuthInfoW ( + unsigned short * ServerPrincName, + unsigned long AuthnSvc, + RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn , + void * Arg + ); + + + + + + + + + + + + + + + +#line 1459 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1518 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + +typedef struct { + unsigned char * UserName; + unsigned char * ComputerName; + unsigned short Privilege; + unsigned long AuthFlags; +} RPC_CLIENT_INFORMATION1, * PRPC_CLIENT_INFORMATION1; + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcBindingServerFromClient ( + RPC_BINDING_HANDLE ClientBinding, + RPC_BINDING_HANDLE * ServerBinding + ); + +__declspec(dllimport) +void +__stdcall +RpcRaiseException ( + RPC_STATUS exception + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcTestCancel( + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcServerTestCancel ( + RPC_BINDING_HANDLE BindingHandle + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcCancelThread( + void * Thread + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +UuidCreate ( + UUID * Uuid + ); + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +UuidToStringA ( + UUID * Uuid, + unsigned char * * StringUuid + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +UuidFromStringA ( + unsigned char * StringUuid, + UUID * Uuid + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +UuidToStringW ( + UUID * Uuid, + unsigned short * * StringUuid + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +UuidFromStringW ( + unsigned short * StringUuid, + UUID * Uuid + ); + + + + + + + +#line 1614 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + + + + + + + + + + +#line 1636 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + +__declspec(dllimport) +signed int +__stdcall +UuidCompare ( + UUID * Uuid1, + UUID * Uuid2, + RPC_STATUS * Status + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +UuidCreateNil ( + UUID * NilUuid + ); + +__declspec(dllimport) +int +__stdcall +UuidEqual ( + UUID * Uuid1, + UUID * Uuid2, + RPC_STATUS * Status + ); + +__declspec(dllimport) +unsigned short +__stdcall +UuidHash ( + UUID * Uuid, + RPC_STATUS * Status + ); + +__declspec(dllimport) +int +__stdcall +UuidIsNil ( + UUID * Uuid, + RPC_STATUS * Status + ); + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcEpRegisterNoReplaceA ( + RPC_IF_HANDLE IfSpec, + RPC_BINDING_VECTOR * BindingVector, + UUID_VECTOR * UuidVector , + unsigned char * Annotation + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcEpRegisterNoReplaceW ( + RPC_IF_HANDLE IfSpec, + RPC_BINDING_VECTOR * BindingVector, + UUID_VECTOR * UuidVector , + unsigned short * Annotation + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcEpRegisterA ( + RPC_IF_HANDLE IfSpec, + RPC_BINDING_VECTOR * BindingVector, + UUID_VECTOR * UuidVector , + unsigned char * Annotation + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcEpRegisterW ( + RPC_IF_HANDLE IfSpec, + RPC_BINDING_VECTOR * BindingVector, + UUID_VECTOR * UuidVector , + unsigned short * Annotation + ); + + + + + + + +#line 1727 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + + + + + + + + + + + + +#line 1751 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcEpUnregister( + RPC_IF_HANDLE IfSpec, + RPC_BINDING_VECTOR * BindingVector, + UUID_VECTOR * UuidVector + ); + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +DceErrorInqTextA ( + RPC_STATUS RpcStatus, + unsigned char * ErrorText + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +DceErrorInqTextW ( + RPC_STATUS RpcStatus, + unsigned short * ErrorText + ); + + + + + +#line 1785 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + +#line 1797 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + +typedef I_RPC_HANDLE * RPC_EP_INQ_HANDLE; + + + + + + + + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtEpEltInqBegin ( + RPC_BINDING_HANDLE EpBinding , + unsigned long InquiryType, + RPC_IF_ID * IfId , + unsigned long VersOption , + UUID * ObjectUuid , + RPC_EP_INQ_HANDLE * InquiryContext + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtEpEltInqDone ( + RPC_EP_INQ_HANDLE * InquiryContext + ); + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtEpEltInqNextA ( + RPC_EP_INQ_HANDLE InquiryContext, + RPC_IF_ID * IfId, + RPC_BINDING_HANDLE * Binding , + UUID * ObjectUuid , + unsigned char * * Annotation + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtEpEltInqNextW ( + RPC_EP_INQ_HANDLE InquiryContext, + RPC_IF_ID * IfId, + RPC_BINDING_HANDLE * Binding , + UUID * ObjectUuid , + unsigned short * * Annotation + ); + + + + + +#line 1861 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + + + + + + + + + +#line 1875 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtEpUnregister ( + RPC_BINDING_HANDLE EpBinding , + RPC_IF_ID * IfId, + RPC_BINDING_HANDLE Binding, + UUID * ObjectUuid + ); + +typedef int +(__stdcall * RPC_MGMT_AUTHORIZATION_FN) ( + RPC_BINDING_HANDLE ClientBinding, + unsigned long RequestedMgmtOperation, + RPC_STATUS * Status + ); + + + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtSetAuthorizationFn ( + RPC_MGMT_AUTHORIZATION_FN AuthorizationFn + ); + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtInqParameter ( + unsigned Parameter, + unsigned long * Value + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtSetParameter ( + unsigned Parameter, + unsigned long Value + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtBindingInqParameter ( + RPC_BINDING_HANDLE Handle, + unsigned Parameter, + unsigned long * Value + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcMgmtBindingSetParameter ( + RPC_BINDING_HANDLE Handle, + unsigned Parameter, + unsigned long Value + ); + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" + + + + + + + + + + + + + + + + + + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" + + + + + +typedef struct _RPC_VERSION { + unsigned short MajorVersion; + unsigned short MinorVersion; +} RPC_VERSION; + +typedef struct _RPC_SYNTAX_IDENTIFIER { + GUID SyntaxGUID; + RPC_VERSION SyntaxVersion; +} RPC_SYNTAX_IDENTIFIER, * PRPC_SYNTAX_IDENTIFIER; + +typedef struct _RPC_MESSAGE +{ + RPC_BINDING_HANDLE Handle; + unsigned long DataRepresentation; + void * Buffer; + unsigned int BufferLength; + unsigned int ProcNum; + PRPC_SYNTAX_IDENTIFIER TransferSyntax; + void * RpcInterfaceInformation; + void * ReservedForRuntime; + void * ManagerEpv; + void * ImportContext; + unsigned long RpcFlags; +} RPC_MESSAGE, * PRPC_MESSAGE; + + +typedef RPC_STATUS +__stdcall RPC_FORWARD_FUNCTION( + UUID * InterfaceId, + RPC_VERSION * InterfaceVersion, + UUID * ObjectId, + unsigned char * Rpcpro, + void * * ppDestEndpoint); + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 90 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" + + + +#line 94 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" + +typedef +void +(__stdcall * RPC_DISPATCH_FUNCTION) ( + PRPC_MESSAGE Message + ); + +typedef struct { + unsigned int DispatchTableCount; + RPC_DISPATCH_FUNCTION * DispatchTable; + int Reserved; +} RPC_DISPATCH_TABLE, * PRPC_DISPATCH_TABLE; + +typedef struct _RPC_PROTSEQ_ENDPOINT +{ + unsigned char * RpcProtocolSequence; + unsigned char * Endpoint; +} RPC_PROTSEQ_ENDPOINT, * PRPC_PROTSEQ_ENDPOINT; + + + + + + + + +typedef struct _RPC_SERVER_INTERFACE +{ + unsigned int Length; + RPC_SYNTAX_IDENTIFIER InterfaceId; + RPC_SYNTAX_IDENTIFIER TransferSyntax; + PRPC_DISPATCH_TABLE DispatchTable; + unsigned int RpcProtseqEndpointCount; + PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint; + void *DefaultManagerEpv; + void const *InterpreterInfo; + unsigned int Flags ; +} RPC_SERVER_INTERFACE, * PRPC_SERVER_INTERFACE; + +typedef struct _RPC_CLIENT_INTERFACE +{ + unsigned int Length; + RPC_SYNTAX_IDENTIFIER InterfaceId; + RPC_SYNTAX_IDENTIFIER TransferSyntax; + PRPC_DISPATCH_TABLE DispatchTable; + unsigned int RpcProtseqEndpointCount; + PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint; + unsigned long Reserved; + void const * InterpreterInfo; + unsigned int Flags ; +} RPC_CLIENT_INTERFACE, * PRPC_CLIENT_INTERFACE; + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcGetBuffer ( + RPC_MESSAGE * Message + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcSendReceive ( + RPC_MESSAGE * Message + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcFreeBuffer ( + RPC_MESSAGE * Message + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcSend ( + PRPC_MESSAGE Message + ) ; + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcReceive ( + PRPC_MESSAGE Message, + unsigned int Size + ) ; + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcFreePipeBuffer ( + RPC_MESSAGE * Message + ) ; + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcReallocPipeBuffer ( + PRPC_MESSAGE Message, + unsigned int NewSize + ) ; + +typedef void * I_RPC_MUTEX; + +__declspec(dllimport) +void +__stdcall +I_RpcRequestMutex ( + I_RPC_MUTEX * Mutex + ); + +__declspec(dllimport) +void +__stdcall +I_RpcClearMutex ( + I_RPC_MUTEX Mutex + ); + +__declspec(dllimport) +void +__stdcall +I_RpcDeleteMutex ( + I_RPC_MUTEX Mutex + ); + +__declspec(dllimport) +void * +__stdcall +I_RpcAllocate ( + unsigned int Size + ); + +__declspec(dllimport) +void +__stdcall +I_RpcFree ( + void * Object + ); + +__declspec(dllimport) +void +__stdcall +I_RpcPauseExecution ( + unsigned long Milliseconds + ); + +typedef +void +(__stdcall * PRPC_RUNDOWN) ( + void * AssociationContext + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcMonitorAssociation ( + RPC_BINDING_HANDLE Handle, + PRPC_RUNDOWN RundownRoutine, + void * Context + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcStopMonitorAssociation ( + RPC_BINDING_HANDLE Handle + ); + +__declspec(dllimport) +RPC_BINDING_HANDLE +__stdcall +I_RpcGetCurrentCallHandle( + void + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcGetAssociationContext ( + RPC_BINDING_HANDLE BindingHandle, + void * * AssociationContext + ); + +__declspec(dllimport) +void * +__stdcall +I_RpcGetServerContextList ( + RPC_BINDING_HANDLE BindingHandle + ); + +__declspec(dllimport) +void +__stdcall +I_RpcSetServerContextList ( + RPC_BINDING_HANDLE BindingHandle, + void * ServerContextList + ); + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcNsBindingSetEntryNameW ( + RPC_BINDING_HANDLE Binding, + unsigned long EntryNameSyntax, + unsigned short * EntryName + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcNsBindingSetEntryNameA ( + RPC_BINDING_HANDLE Binding, + unsigned long EntryNameSyntax, + unsigned char * EntryName + ); + + + + + +#line 318 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" + + + + + + + + + + + + +#line 331 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcBindingInqDynamicEndpointW ( + RPC_BINDING_HANDLE Binding, + unsigned short * * DynamicEndpoint + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcBindingInqDynamicEndpointA ( + RPC_BINDING_HANDLE Binding, + unsigned char * * DynamicEndpoint + ); + + + + + +#line 355 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" + + + + + + + + + + + +#line 367 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" + + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcBindingInqTransportType ( + RPC_BINDING_HANDLE Binding, + unsigned int * Type + ); + +typedef struct _RPC_TRANSFER_SYNTAX +{ + UUID Uuid; + unsigned short VersMajor; + unsigned short VersMinor; +} RPC_TRANSFER_SYNTAX; + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcIfInqTransferSyntaxes ( + RPC_IF_HANDLE RpcIfHandle, + RPC_TRANSFER_SYNTAX * TransferSyntaxes, + unsigned int TransferSyntaxSize, + unsigned int * TransferSyntaxCount + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_UuidCreate ( + UUID * Uuid + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcBindingCopy ( + RPC_BINDING_HANDLE SourceBinding, + RPC_BINDING_HANDLE * DestinationBinding + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcBindingIsClientLocal ( + RPC_BINDING_HANDLE BindingHandle , + unsigned int * ClientLocalFlag + ); + +__declspec(dllimport) +void +__stdcall +I_RpcSsDontSerializeContext ( + void + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcLaunchDatagramReceiveThread( + void * pAddress + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcServerRegisterForwardFunction ( + RPC_FORWARD_FUNCTION * pForwardFunction + ); + + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcConnectionInqSockBuffSize( + unsigned long * RecvBuffSize, + unsigned long * SendBuffSize + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcConnectionSetSockBuffSize( + unsigned long RecvBuffSize, + unsigned long SendBuffSize + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcServerStartListening( + void * hWnd + ) ; + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcServerStopListening( + ) ; + +typedef RPC_STATUS (*RPC_BLOCKING_FN) ( + void * hWnd, + void * Context, + void * hSyncEvent + ) ; + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcBindingSetAsync( + RPC_BINDING_HANDLE Binding, + RPC_BLOCKING_FN BlockingFn, + unsigned long ServerTid + ) ; + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcSetThreadParams( + int fClientFree, + void *Context, + void * hWndClient + ); + +__declspec(dllimport) +unsigned int +__stdcall +I_RpcWindowProc( + void * hWnd, + unsigned int Message, + unsigned int wParam, + unsigned long lParam + ) ; +#line 571 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" + + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcServerUnregisterEndpointA ( + unsigned char * Protseq, + unsigned char * Endpoint + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcServerUnregisterEndpointW ( + unsigned short * Protseq, + unsigned short * Endpoint + ); + + + + + +#line 594 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" +#line 595 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" + +__declspec(dllimport) +RPC_STATUS +__stdcall +I_RpcServerInqTransportType( + unsigned int * Type + ) ; + + + + + + + + + +#line 612 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" + +#line 614 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdcep.h" +#line 1948 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" + + + + + +#line 1954 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcdce.h" +#line 133 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsi.h" + + + + + + + + + + + + + + + + + + +typedef void * RPC_NS_HANDLE; + + + + + + + + + + + + + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingExportA( + unsigned long EntryNameSyntax , + unsigned char * EntryName, + RPC_IF_HANDLE IfSpec , + RPC_BINDING_VECTOR * BindingVec , + UUID_VECTOR * ObjectUuidVec + ); + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingUnexportA( + unsigned long EntryNameSyntax , + unsigned char * EntryName, + RPC_IF_HANDLE IfSpec , + UUID_VECTOR * ObjectUuidVec + ); + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingExportW( + unsigned long EntryNameSyntax , + unsigned short * EntryName, + RPC_IF_HANDLE IfSpec , + RPC_BINDING_VECTOR * BindingVec , + UUID_VECTOR * ObjectUuidVec + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingUnexportW( + unsigned long EntryNameSyntax , + unsigned short * EntryName, + RPC_IF_HANDLE IfSpec , + UUID_VECTOR * ObjectUuidVec + ); + +#line 73 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsi.h" + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingLookupBeginA( + unsigned long EntryNameSyntax , + unsigned char * EntryName , + RPC_IF_HANDLE IfSpec , + UUID * ObjUuid , + unsigned long BindingMaxCount , + RPC_NS_HANDLE * LookupContext + ); + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingLookupBeginW( + unsigned long EntryNameSyntax , + unsigned short * EntryName , + RPC_IF_HANDLE IfSpec , + UUID * ObjUuid , + unsigned long BindingMaxCount , + RPC_NS_HANDLE * LookupContext + ); +#line 98 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsi.h" + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingLookupNext( + RPC_NS_HANDLE LookupContext, + RPC_BINDING_VECTOR * * BindingVec + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingLookupDone( + RPC_NS_HANDLE * LookupContext + ); + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsGroupDeleteA( + unsigned long GroupNameSyntax , + unsigned char * GroupName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsGroupMbrAddA( + unsigned long GroupNameSyntax , + unsigned char * GroupName, + unsigned long MemberNameSyntax , + unsigned char * MemberName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsGroupMbrRemoveA( + unsigned long GroupNameSyntax , + unsigned char * GroupName, + unsigned long MemberNameSyntax , + unsigned char * MemberName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsGroupMbrInqBeginA( + unsigned long GroupNameSyntax , + unsigned char * GroupName, + unsigned long MemberNameSyntax , + RPC_NS_HANDLE * InquiryContext + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsGroupMbrInqNextA( + RPC_NS_HANDLE InquiryContext, + unsigned char * * MemberName + ); + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsGroupDeleteW( + unsigned long GroupNameSyntax , + unsigned short * GroupName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsGroupMbrAddW( + unsigned long GroupNameSyntax , + unsigned short * GroupName, + unsigned long MemberNameSyntax , + unsigned short * MemberName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsGroupMbrRemoveW( + unsigned long GroupNameSyntax , + unsigned short * GroupName, + unsigned long MemberNameSyntax , + unsigned short * MemberName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsGroupMbrInqBeginW( + unsigned long GroupNameSyntax , + unsigned short * GroupName, + unsigned long MemberNameSyntax , + RPC_NS_HANDLE * InquiryContext + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsGroupMbrInqNextW( + RPC_NS_HANDLE InquiryContext, + unsigned short * * MemberName + ); + +#line 187 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsi.h" + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsGroupMbrInqDone( + RPC_NS_HANDLE * InquiryContext + ); + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsProfileDeleteA( + unsigned long ProfileNameSyntax , + unsigned char * ProfileName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsProfileEltAddA( + unsigned long ProfileNameSyntax , + unsigned char * ProfileName, + RPC_IF_ID * IfId , + unsigned long MemberNameSyntax , + unsigned char * MemberName, + unsigned long Priority, + unsigned char * Annotation + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsProfileEltRemoveA( + unsigned long ProfileNameSyntax , + unsigned char * ProfileName, + RPC_IF_ID * IfId , + unsigned long MemberNameSyntax , + unsigned char * MemberName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsProfileEltInqBeginA( + unsigned long ProfileNameSyntax , + unsigned char * ProfileName, + unsigned long InquiryType, + RPC_IF_ID * IfId , + unsigned long VersOption, + unsigned long MemberNameSyntax , + unsigned char * MemberName , + RPC_NS_HANDLE * InquiryContext + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsProfileEltInqNextA( + RPC_NS_HANDLE InquiryContext, + RPC_IF_ID * IfId, + unsigned char * * MemberName, + unsigned long * Priority, + unsigned char * * Annotation + ); + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsProfileDeleteW( + unsigned long ProfileNameSyntax , + unsigned short * ProfileName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsProfileEltAddW( + unsigned long ProfileNameSyntax , + unsigned short * ProfileName, + RPC_IF_ID * IfId , + unsigned long MemberNameSyntax , + unsigned short * MemberName, + unsigned long Priority, + unsigned short * Annotation + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsProfileEltRemoveW( + unsigned long ProfileNameSyntax , + unsigned short * ProfileName, + RPC_IF_ID * IfId , + unsigned long MemberNameSyntax , + unsigned short * MemberName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsProfileEltInqBeginW( + unsigned long ProfileNameSyntax , + unsigned short * ProfileName, + unsigned long InquiryType, + RPC_IF_ID * IfId , + unsigned long VersOption, + unsigned long MemberNameSyntax , + unsigned short * MemberName , + RPC_NS_HANDLE * InquiryContext + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsProfileEltInqNextW( + RPC_NS_HANDLE InquiryContext, + RPC_IF_ID * IfId, + unsigned short * * MemberName, + unsigned long * Priority, + unsigned short * * Annotation + ); + +#line 292 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsi.h" + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsProfileEltInqDone( + RPC_NS_HANDLE * InquiryContext + ); + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsEntryObjectInqBeginA( + unsigned long EntryNameSyntax , + unsigned char * EntryName, + RPC_NS_HANDLE * InquiryContext + ); + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsEntryObjectInqBeginW( + unsigned long EntryNameSyntax , + unsigned short * EntryName, + RPC_NS_HANDLE * InquiryContext + ); + +#line 317 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsi.h" + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsEntryObjectInqNext( + RPC_NS_HANDLE InquiryContext, + UUID * ObjUuid + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsEntryObjectInqDone( + RPC_NS_HANDLE * InquiryContext + ); + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsEntryExpandNameA( + unsigned long EntryNameSyntax , + unsigned char * EntryName, + unsigned char * * ExpandedName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsMgmtBindingUnexportA( + unsigned long EntryNameSyntax , + unsigned char * EntryName, + RPC_IF_ID * IfId , + unsigned long VersOption, + UUID_VECTOR * ObjectUuidVec + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsMgmtEntryCreateA( + unsigned long EntryNameSyntax , + unsigned char * EntryName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsMgmtEntryDeleteA( + unsigned long EntryNameSyntax , + unsigned char * EntryName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsMgmtEntryInqIfIdsA( + unsigned long EntryNameSyntax , + unsigned char * EntryName, + RPC_IF_ID_VECTOR * * IfIdVec + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsMgmtHandleSetExpAge( + RPC_NS_HANDLE NsHandle, + unsigned long ExpirationAge + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsMgmtInqExpAge( + unsigned long * ExpirationAge + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsMgmtSetExpAge( + unsigned long ExpirationAge + ); + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsEntryExpandNameW( + unsigned long EntryNameSyntax , + unsigned short * EntryName, + unsigned short * * ExpandedName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsMgmtBindingUnexportW( + unsigned long EntryNameSyntax , + unsigned short * EntryName, + RPC_IF_ID * IfId , + unsigned long VersOption, + UUID_VECTOR * ObjectUuidVec + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsMgmtEntryCreateW( + unsigned long EntryNameSyntax , + unsigned short * EntryName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsMgmtEntryDeleteW( + unsigned long EntryNameSyntax , + unsigned short * EntryName + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsMgmtEntryInqIfIdsW( + unsigned long EntryNameSyntax , + unsigned short * EntryName, + RPC_IF_ID_VECTOR * * IfIdVec + ); + +#line 420 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsi.h" + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingImportBeginA( + unsigned long EntryNameSyntax , + unsigned char * EntryName , + RPC_IF_HANDLE IfSpec , + UUID * ObjUuid , + RPC_NS_HANDLE * ImportContext + ); + + + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingImportBeginW( + unsigned long EntryNameSyntax , + unsigned short * EntryName , + RPC_IF_HANDLE IfSpec , + UUID * ObjUuid , + RPC_NS_HANDLE * ImportContext + ); + +#line 444 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsi.h" + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingImportNext( + RPC_NS_HANDLE ImportContext, + RPC_BINDING_HANDLE * Binding + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingImportDone( + RPC_NS_HANDLE * ImportContext + ); + +__declspec(dllimport) RPC_STATUS __stdcall +RpcNsBindingSelect( + RPC_BINDING_VECTOR * BindingVec, + RPC_BINDING_HANDLE * Binding + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 509 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsi.h" + +#line 511 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsi.h" +#line 134 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnterr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnterr.h" +#line 135 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winerror.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 137 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcImpersonateClient ( + RPC_BINDING_HANDLE BindingHandle + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcRevertToSelfEx ( + RPC_BINDING_HANDLE BindingHandle + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcRevertToSelf ( + ); + +__declspec(dllimport) +long +__stdcall +I_RpcMapWin32Status ( + RPC_STATUS Status + ); + +#line 201 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcasync.h" + + + + + + + + + + + + + + + + + + + + + + + + +typedef +enum _RPC_NOTIFICATION_TYPES +{ + RpcNotificationTypeNone, + RpcNotificationTypeEvent, + RpcNotificationTypeApc, + RpcNotificationTypeIoc, + RpcNotificationTypeHwnd, + RpcNotificationTypeCallback +} RPC_NOTIFICATION_TYPES; + +typedef +enum _RPC_ASYNC_EVENT { + RpcCallComplete, + RpcSendComplete, + RpcReceiveComplete + } RPC_ASYNC_EVENT; + +typedef void __stdcall +RPCNOTIFICATION_ROUTINE ( + struct _RPC_ASYNC_STATE *pAsync, + void *Context, + RPC_ASYNC_EVENT Event); +typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE; + +typedef struct _RPC_ASYNC_STATE { + unsigned int Size; + unsigned long Signature; + long Lock; + unsigned long Flags; + void *StubInfo; + void *UserInfo; + void *RuntimeInfo; + RPC_ASYNC_EVENT Event; + + RPC_NOTIFICATION_TYPES NotificationType; + union { + + + + struct { + PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine; + HANDLE hThread; + } APC; + + + + + struct { + HANDLE hIOPort; + DWORD dwNumberOfBytesTransferred; + DWORD dwCompletionKey; + LPOVERLAPPED lpOverlapped; + } IOC; + + + + + struct { + HWND hWnd; + UINT Msg; + } HWND; + + + + + + HANDLE hEvent; + + + + + + + PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine; + } u; + + long Reserved[4]; + } RPC_ASYNC_STATE, *PRPC_ASYNC_STATE; + + + + + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcAsyncInitializeHandle ( + PRPC_ASYNC_STATE pAsync, + unsigned int Size + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcAsyncRegisterInfo ( + PRPC_ASYNC_STATE pAsync + ) ; + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcAsyncGetCallStatus ( + PRPC_ASYNC_STATE pAsync + ) ; + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcAsyncCompleteCall ( + PRPC_ASYNC_STATE pAsync, + void *Reply + ) ; + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcAsyncAbortCall ( + PRPC_ASYNC_STATE pAsync, + unsigned long ExceptionCode + ) ; + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcAsyncCancelCall ( + PRPC_ASYNC_STATE pAsync, + BOOL fAbort + ) ; + + + + +RPC_STATUS __stdcall +I_RpcAsyncSetHandle ( + PRPC_MESSAGE Message, + PRPC_ASYNC_STATE pAsync + ); + +RPC_STATUS __stdcall +I_RpcAsyncAbortCall ( + PRPC_ASYNC_STATE pAsync, + unsigned long ExceptionCode + ) ; + + + + + +#line 177 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcasync.h" + +#line 206 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + +#line 208 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + +#line 214 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + +#line 195 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 196 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + + + + + + + + + + + + + +#line 22 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +#line 23 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + +#line 42 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +#line 43 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#pragma pack(1) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#line 46 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + +struct HDROP__ { int unused; }; typedef struct HDROP__ *HDROP; + +__declspec(dllimport) UINT __stdcall DragQueryFileA(HDROP,UINT,LPSTR,UINT); +__declspec(dllimport) UINT __stdcall DragQueryFileW(HDROP,UINT,LPWSTR,UINT); + + + + +#line 62 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +__declspec(dllimport) BOOL __stdcall DragQueryPoint(HDROP,LPPOINT); +__declspec(dllimport) void __stdcall DragFinish(HDROP); +__declspec(dllimport) void __stdcall DragAcceptFiles(HWND,BOOL); + +__declspec(dllimport) HINSTANCE __stdcall ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd); +__declspec(dllimport) HINSTANCE __stdcall ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd); + + + + +#line 73 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +__declspec(dllimport) HINSTANCE __stdcall FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lpResult); +__declspec(dllimport) HINSTANCE __stdcall FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, LPWSTR lpResult); + + + + +#line 80 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +__declspec(dllimport) LPWSTR * __stdcall CommandLineToArgvW(LPCWSTR lpCmdLine, int*pNumArgs); + +__declspec(dllimport) INT __stdcall ShellAboutA(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon); +__declspec(dllimport) INT __stdcall ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon); + + + + +#line 89 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +__declspec(dllimport) HICON __stdcall DuplicateIcon(HINSTANCE hInst, HICON hIcon); +__declspec(dllimport) HICON __stdcall ExtractAssociatedIconA(HINSTANCE hInst, LPSTR lpIconPath, LPWORD lpiIcon); +__declspec(dllimport) HICON __stdcall ExtractAssociatedIconW(HINSTANCE hInst, LPWSTR lpIconPath, LPWORD lpiIcon); + + + + +#line 97 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + +__declspec(dllimport) HICON __stdcall ExtractIconA(HINSTANCE hInst, LPCSTR lpszExeFileName, UINT nIconIndex); +__declspec(dllimport) HICON __stdcall ExtractIconW(HINSTANCE hInst, LPCWSTR lpszExeFileName, UINT nIconIndex); + + + + +#line 105 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + +typedef struct _DRAGINFOA { + UINT uSize; + POINT pt; + BOOL fNC; + LPSTR lpFileList; + DWORD grfKeyState; +} DRAGINFOA, * LPDRAGINFOA; +typedef struct _DRAGINFOW { + UINT uSize; + POINT pt; + BOOL fNC; + LPWSTR lpFileList; + DWORD grfKeyState; +} DRAGINFOW, * LPDRAGINFOW; + + + + +typedef DRAGINFOA DRAGINFO; +typedef LPDRAGINFOA LPDRAGINFO; +#line 128 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _AppBarData +{ + DWORD cbSize; + HWND hWnd; + UINT uCallbackMessage; + UINT uEdge; + RECT rc; + LPARAM lParam; +} APPBARDATA, *PAPPBARDATA; + +__declspec(dllimport) UINT __stdcall SHAppBarMessage(DWORD dwMessage, PAPPBARDATA pData); + + + + + + +__declspec(dllimport) DWORD __stdcall DoEnvironmentSubstA(LPSTR szString, UINT cbString); +__declspec(dllimport) DWORD __stdcall DoEnvironmentSubstW(LPWSTR szString, UINT cbString); + + + + +#line 186 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +__declspec(dllimport) LPSTR __stdcall FindEnvironmentStringA(LPSTR szEnvVar); +__declspec(dllimport) LPWSTR __stdcall FindEnvironmentStringW(LPWSTR szEnvVar); + + + + +#line 193 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + +__declspec(dllimport) UINT __stdcall ExtractIconExA(LPCSTR lpszFile, int nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons); +__declspec(dllimport) UINT __stdcall ExtractIconExW(LPCWSTR lpszFile, int nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons); + + + + +#line 202 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef WORD FILEOP_FLAGS; + + + + + + + + + + + + +typedef WORD PRINTEROP_FLAGS; + +#line 246 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + +typedef struct _SHFILEOPSTRUCTA +{ + HWND hwnd; + UINT wFunc; + LPCSTR pFrom; + LPCSTR pTo; + FILEOP_FLAGS fFlags; + BOOL fAnyOperationsAborted; + LPVOID hNameMappings; + LPCSTR lpszProgressTitle; +} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA; +typedef struct _SHFILEOPSTRUCTW +{ + HWND hwnd; + UINT wFunc; + LPCWSTR pFrom; + LPCWSTR pTo; + FILEOP_FLAGS fFlags; + BOOL fAnyOperationsAborted; + LPVOID hNameMappings; + LPCWSTR lpszProgressTitle; +} SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW; + + + + +typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT; +typedef LPSHFILEOPSTRUCTA LPSHFILEOPSTRUCT; +#line 283 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + +__declspec(dllimport) int __stdcall SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp); +__declspec(dllimport) int __stdcall SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp); + + + + +#line 291 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + +__declspec(dllimport) void __stdcall SHFreeNameMappings(HANDLE hNameMappings); + +typedef struct _SHNAMEMAPPINGA +{ + LPSTR pszOldPath; + LPSTR pszNewPath; + int cchOldPath; + int cchNewPath; +} SHNAMEMAPPINGA, *LPSHNAMEMAPPINGA; +typedef struct _SHNAMEMAPPINGW +{ + LPWSTR pszOldPath; + LPWSTR pszNewPath; + int cchOldPath; + int cchNewPath; +} SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW; + + + + +typedef SHNAMEMAPPINGA SHNAMEMAPPING; +typedef LPSHNAMEMAPPINGA LPSHNAMEMAPPING; +#line 315 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + + + + + + + + + + + + + +#line 336 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _SHELLEXECUTEINFOA +{ + DWORD cbSize; + ULONG fMask; + HWND hwnd; + LPCSTR lpVerb; + LPCSTR lpFile; + LPCSTR lpParameters; + LPCSTR lpDirectory; + int nShow; + HINSTANCE hInstApp; + + LPVOID lpIDList; + LPCSTR lpClass; + HKEY hkeyClass; + DWORD dwHotKey; + union { + HANDLE hIcon; + HANDLE hMonitor; + }; + HANDLE hProcess; +} SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA; + + + + + + + + + + + + + + + + + +typedef struct _SHELLEXECUTEINFOW +{ + DWORD cbSize; + ULONG fMask; + HWND hwnd; + LPCWSTR lpVerb; + LPCWSTR lpFile; + LPCWSTR lpParameters; + LPCWSTR lpDirectory; + int nShow; + HINSTANCE hInstApp; + + LPVOID lpIDList; + LPCWSTR lpClass; + HKEY hkeyClass; + DWORD dwHotKey; + union { + HANDLE hIcon; + HANDLE hMonitor; + }; + HANDLE hProcess; +} SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW; + + + + +typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO; +typedef LPSHELLEXECUTEINFOA LPSHELLEXECUTEINFO; +#line 432 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + +__declspec(dllimport) BOOL __stdcall ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo); +__declspec(dllimport) BOOL __stdcall ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo); + + + + +#line 440 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +__declspec(dllimport) void __stdcall WinExecErrorA(HWND hwnd, int error, LPCSTR lpstrFileName, LPCSTR lpstrTitle); +__declspec(dllimport) void __stdcall WinExecErrorW(HWND hwnd, int error, LPCWSTR lpstrFileName, LPCWSTR lpstrTitle); + + + + +#line 447 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + + + + +typedef struct _SHQUERYRBINFO { + DWORD cbSize; + + __int64 i64Size; + __int64 i64NumItems; + + + +#line 467 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +} SHQUERYRBINFO, *LPSHQUERYRBINFO; + + + + + + + + + +extern __declspec(dllimport) HRESULT __stdcall SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo ); +extern __declspec(dllimport) HRESULT __stdcall SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo ); + + + + +#line 484 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +extern __declspec(dllimport) HRESULT __stdcall SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags ); +extern __declspec(dllimport) HRESULT __stdcall SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags ); + + + + +#line 491 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + + +typedef struct _NOTIFYICONDATAA { + DWORD cbSize; + HWND hWnd; + UINT uID; + UINT uFlags; + UINT uCallbackMessage; + HICON hIcon; + CHAR szTip[64]; +} NOTIFYICONDATAA, *PNOTIFYICONDATAA; +typedef struct _NOTIFYICONDATAW { + DWORD cbSize; + HWND hWnd; + UINT uID; + UINT uFlags; + UINT uCallbackMessage; + HICON hIcon; + WCHAR szTip[64]; +} NOTIFYICONDATAW, *PNOTIFYICONDATAW; + + + + +typedef NOTIFYICONDATAA NOTIFYICONDATA; +typedef PNOTIFYICONDATAA PNOTIFYICONDATA; +#line 525 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + + + +__declspec(dllimport) BOOL __stdcall Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData); +__declspec(dllimport) BOOL __stdcall Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData); + + + + +#line 542 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _SHFILEINFOA +{ + HICON hIcon; + int iIcon; + DWORD dwAttributes; + CHAR szDisplayName[260]; + CHAR szTypeName[80]; +} SHFILEINFOA; +typedef struct _SHFILEINFOW +{ + HICON hIcon; + int iIcon; + DWORD dwAttributes; + WCHAR szDisplayName[260]; + WCHAR szTypeName[80]; +} SHFILEINFOW; + + + +typedef SHFILEINFOA SHFILEINFO; +#line 590 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + + + + + + + + + + + +extern __declspec(dllimport) DWORD __stdcall SHGetFileInfoA(LPCSTR pszPath, DWORD dwFileAttributes, SHFILEINFOA *psfi, UINT cbFileInfo, UINT uFlags); +extern __declspec(dllimport) DWORD __stdcall SHGetFileInfoW(LPCWSTR pszPath, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT cbFileInfo, UINT uFlags); + + + + +#line 615 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +extern __declspec(dllimport) BOOL __stdcall SHGetDiskFreeSpaceA(LPCSTR pszVolume, ULARGE_INTEGER *pqwFreeCaller, ULARGE_INTEGER *pqwTot, ULARGE_INTEGER *pqwFree); +extern __declspec(dllimport) BOOL __stdcall SHGetDiskFreeSpaceW(LPCWSTR pszVolume, ULARGE_INTEGER *pqwFreeCaller, ULARGE_INTEGER *pqwTot, ULARGE_INTEGER *pqwFree); + + + + +#line 622 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" +extern __declspec(dllimport) BOOL __stdcall SHGetNewLinkInfoA(LPCSTR pszLinkTo, LPCSTR pszDir, LPSTR pszName, BOOL *pfMustCopy, UINT uFlags); +extern __declspec(dllimport) BOOL __stdcall SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName, BOOL *pfMustCopy, UINT uFlags); + + + + +#line 629 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + + + + + + + + + + + + + + + + + +extern __declspec(dllimport) BOOL __stdcall SHInvokePrinterCommandA(HWND hwnd, UINT uAction, LPCSTR lpBuf1, LPCSTR lpBuf2, BOOL fModal); +extern __declspec(dllimport) BOOL __stdcall SHInvokePrinterCommandW(HWND hwnd, UINT uAction, LPCWSTR lpBuf1, LPCWSTR lpBuf2, BOOL fModal); + + + + +#line 658 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + +#line 662 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 669 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + +#line 671 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\shellapi.h" + +#line 197 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winperf.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _PERF_DATA_BLOCK { + WCHAR Signature[4]; + DWORD LittleEndian; + DWORD Version; + + DWORD Revision; + + DWORD TotalByteLength; + DWORD HeaderLength; + DWORD NumObjectTypes; + + LONG DefaultObject; + + + + + SYSTEMTIME SystemTime; + + LARGE_INTEGER PerfTime; + + LARGE_INTEGER PerfFreq; + + LARGE_INTEGER PerfTime100nSec; + + DWORD SystemNameLength; + DWORD SystemNameOffset; + + +} PERF_DATA_BLOCK, *PPERF_DATA_BLOCK; + + + + + + + + + +typedef struct _PERF_OBJECT_TYPE { + DWORD TotalByteLength; + + + + + + + + DWORD DefinitionLength; + + + + + + + + DWORD HeaderLength; + + + + DWORD ObjectNameTitleIndex; + + LPWSTR ObjectNameTitle; + + + DWORD ObjectHelpTitleIndex; + + LPWSTR ObjectHelpTitle; + + + DWORD DetailLevel; + + + + DWORD NumCounters; + + + LONG DefaultCounter; + + + + LONG NumInstances; + + + + + + + + + + + + DWORD CodePage; + + + LARGE_INTEGER PerfTime; + + LARGE_INTEGER PerfFreq; + +} PERF_OBJECT_TYPE, *PPERF_OBJECT_TYPE; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _PERF_COUNTER_DEFINITION { + DWORD ByteLength; + DWORD CounterNameTitleIndex; + + + LPWSTR CounterNameTitle; + + + DWORD CounterHelpTitleIndex; + + + LPWSTR CounterHelpTitle; + + + LONG DefaultScale; + + + DWORD DetailLevel; + + DWORD CounterType; + DWORD CounterSize; + DWORD CounterOffset; + + +} PERF_COUNTER_DEFINITION, *PPERF_COUNTER_DEFINITION; + + + + + + + + + + + + + + +typedef struct _PERF_INSTANCE_DEFINITION { + DWORD ByteLength; + + DWORD ParentObjectTitleIndex; + + + + + + DWORD ParentObjectInstance; + + + + LONG UniqueID; + + + DWORD NameOffset; + + + DWORD NameLength; + + + + + +} PERF_INSTANCE_DEFINITION, *PPERF_INSTANCE_DEFINITION; + + + + + + + + + + + + + +typedef struct _PERF_COUNTER_BLOCK { + DWORD ByteLength; + +} PERF_COUNTER_BLOCK, *PPERF_COUNTER_BLOCK; + + + + + + + + + + + + + + + + +typedef DWORD (__stdcall PM_OPEN_PROC) (LPWSTR); +typedef DWORD (__stdcall PM_COLLECT_PROC) (LPWSTR, LPVOID *, LPDWORD, LPDWORD); +typedef DWORD (__stdcall PM_CLOSE_PROC) (void); +typedef DWORD (__stdcall PM_QUERY_PROC) (LPDWORD, LPVOID *, LPDWORD, LPDWORD); + + +#line 569 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winperf.h" + + + +#line 199 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + + +#line 204 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsock.h" + + + + + + + + + + + + + + + + + + + + + + + + + +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; + + + + + +typedef u_int SOCKET; + + + + + + + + + + + +#line 48 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsock.h" + +typedef struct fd_set { + u_int fd_count; + SOCKET fd_array[64]; +} fd_set; + + + + + +extern int __stdcall __WSAFDIsSet(SOCKET, fd_set *); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct timeval { + long tv_sec; + long tv_usec; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct hostent { + char * h_name; + char * * h_aliases; + short h_addrtype; + short h_length; + char * * h_addr_list; + +}; + + + + + +struct netent { + char * n_name; + char * * n_aliases; + short n_addrtype; + u_long n_net; +}; + +struct servent { + char * s_name; + char * * s_aliases; + short s_port; + char * s_proto; +}; + +struct protoent { + char * p_name; + char * * p_aliases; + short p_proto; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct in_addr { + union { + struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; + struct { u_short s_w1,s_w2; } S_un_w; + u_long S_addr; + } S_un; + + + + + + + + + + + + +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct sockaddr_in { + short sin_family; + u_short sin_port; + struct in_addr sin_addr; + char sin_zero[8]; +}; + + + + +typedef struct WSAData { + WORD wVersion; + WORD wHighVersion; + char szDescription[256+1]; + char szSystemStatus[128+1]; + unsigned short iMaxSockets; + unsigned short iMaxUdpDg; + char * lpVendorInfo; +} WSADATA; + +typedef WSADATA *LPWSADATA; + + + + + + + + + + + + + + + + + + + + + + +struct ip_mreq { + struct in_addr imr_multiaddr; + struct in_addr imr_interface; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct sockaddr { + u_short sa_family; + char sa_data[14]; +}; + + + + + +struct sockproto { + u_short sp_family; + u_short sp_protocol; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct linger { + u_short l_onoff; + u_short l_linger; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 700 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsock.h" + + + + + + + +SOCKET __stdcall accept (SOCKET s, struct sockaddr *addr, + int *addrlen); + +int __stdcall bind (SOCKET s, const struct sockaddr *addr, int namelen); + +int __stdcall closesocket (SOCKET s); + +int __stdcall connect (SOCKET s, const struct sockaddr *name, int namelen); + +int __stdcall ioctlsocket (SOCKET s, long cmd, u_long *argp); + +int __stdcall getpeername (SOCKET s, struct sockaddr *name, + int * namelen); + +int __stdcall getsockname (SOCKET s, struct sockaddr *name, + int * namelen); + +int __stdcall getsockopt (SOCKET s, int level, int optname, + char * optval, int *optlen); + +u_long __stdcall htonl (u_long hostlong); + +u_short __stdcall htons (u_short hostshort); + +unsigned long __stdcall inet_addr (const char * cp); + +char * __stdcall inet_ntoa (struct in_addr in); + +int __stdcall listen (SOCKET s, int backlog); + +u_long __stdcall ntohl (u_long netlong); + +u_short __stdcall ntohs (u_short netshort); + +int __stdcall recv (SOCKET s, char * buf, int len, int flags); + +int __stdcall recvfrom (SOCKET s, char * buf, int len, int flags, + struct sockaddr *from, int * fromlen); + +int __stdcall select (int nfds, fd_set *readfds, fd_set *writefds, + fd_set *exceptfds, const struct timeval *timeout); + +int __stdcall send (SOCKET s, const char * buf, int len, int flags); + +int __stdcall sendto (SOCKET s, const char * buf, int len, int flags, + const struct sockaddr *to, int tolen); + +int __stdcall setsockopt (SOCKET s, int level, int optname, + const char * optval, int optlen); + +int __stdcall shutdown (SOCKET s, int how); + +SOCKET __stdcall socket (int af, int type, int protocol); + + + +struct hostent * __stdcall gethostbyaddr(const char * addr, + int len, int type); + +struct hostent * __stdcall gethostbyname(const char * name); + +int __stdcall gethostname (char * name, int namelen); + +struct servent * __stdcall getservbyport(int port, const char * proto); + +struct servent * __stdcall getservbyname(const char * name, + const char * proto); + +struct protoent * __stdcall getprotobynumber(int proto); + +struct protoent * __stdcall getprotobyname(const char * name); + + + +int __stdcall WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData); + +int __stdcall WSACleanup(void); + +void __stdcall WSASetLastError(int iError); + +int __stdcall WSAGetLastError(void); + +BOOL __stdcall WSAIsBlocking(void); + +int __stdcall WSAUnhookBlockingHook(void); + +FARPROC __stdcall WSASetBlockingHook(FARPROC lpBlockFunc); + +int __stdcall WSACancelBlockingCall(void); + +HANDLE __stdcall WSAAsyncGetServByName(HWND hWnd, u_int wMsg, + const char * name, + const char * proto, + char * buf, int buflen); + +HANDLE __stdcall WSAAsyncGetServByPort(HWND hWnd, u_int wMsg, int port, + const char * proto, char * buf, + int buflen); + +HANDLE __stdcall WSAAsyncGetProtoByName(HWND hWnd, u_int wMsg, + const char * name, char * buf, + int buflen); + +HANDLE __stdcall WSAAsyncGetProtoByNumber(HWND hWnd, u_int wMsg, + int number, char * buf, + int buflen); + +HANDLE __stdcall WSAAsyncGetHostByName(HWND hWnd, u_int wMsg, + const char * name, char * buf, + int buflen); + +HANDLE __stdcall WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg, + const char * addr, int len, int type, + char * buf, int buflen); + +int __stdcall WSACancelAsyncRequest(HANDLE hAsyncTaskHandle); + +int __stdcall WSAAsyncSelect(SOCKET s, HWND hWnd, u_int wMsg, + long lEvent); + +int __stdcall WSARecvEx (SOCKET s, char * buf, int len, int *flags); + +typedef struct _TRANSMIT_FILE_BUFFERS { + PVOID Head; + DWORD HeadLength; + PVOID Tail; + DWORD TailLength; +} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS; + + + + + +BOOL +__stdcall +TransmitFile ( + SOCKET hSocket, + HANDLE hFile, + DWORD nNumberOfBytesToWrite, + DWORD nNumberOfBytesPerSend, + LPOVERLAPPED lpOverlapped, + LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, + DWORD dwReserved + ); + +BOOL +__stdcall +AcceptEx ( + SOCKET sListenSocket, + SOCKET sAcceptSocket, + PVOID lpOutputBuffer, + DWORD dwReceiveDataLength, + DWORD dwLocalAddressLength, + DWORD dwRemoteAddressLength, + LPDWORD lpdwBytesReceived, + LPOVERLAPPED lpOverlapped + ); + +void +__stdcall +GetAcceptExSockaddrs ( + PVOID lpOutputBuffer, + DWORD dwReceiveDataLength, + DWORD dwLocalAddressLength, + DWORD dwRemoteAddressLength, + struct sockaddr **LocalSockaddr, + LPINT LocalSockaddrLength, + struct sockaddr **RemoteSockaddr, + LPINT RemoteSockaddrLength + ); + + + + + + +typedef struct sockaddr SOCKADDR; +typedef struct sockaddr *PSOCKADDR; +typedef struct sockaddr *LPSOCKADDR; + +typedef struct sockaddr_in SOCKADDR_IN; +typedef struct sockaddr_in *PSOCKADDR_IN; +typedef struct sockaddr_in *LPSOCKADDR_IN; + +typedef struct linger LINGER; +typedef struct linger *PLINGER; +typedef struct linger *LPLINGER; + +typedef struct in_addr IN_ADDR; +typedef struct in_addr *PIN_ADDR; +typedef struct in_addr *LPIN_ADDR; + +typedef struct fd_set FD_SET; +typedef struct fd_set *PFD_SET; +typedef struct fd_set *LPFD_SET; + +typedef struct hostent HOSTENT; +typedef struct hostent *PHOSTENT; +typedef struct hostent *LPHOSTENT; + +typedef struct servent SERVENT; +typedef struct servent *PSERVENT; +typedef struct servent *LPSERVENT; + +typedef struct protoent PROTOENT; +typedef struct protoent *PPROTOENT; +typedef struct protoent *LPPROTOENT; + +typedef struct timeval TIMEVAL; +typedef struct timeval *PTIMEVAL; +typedef struct timeval *LPTIMEVAL; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 958 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsock.h" + + +#line 205 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 206 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 208 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincrypt.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7891 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincrypt.h" + + +#line 7894 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wincrypt.h" +#line 210 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 211 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#pragma pack(1) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack1.h" +#line 13 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" +#line 34 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" +#line 35 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + +typedef UINT (__stdcall *LPOFNHOOKPROC) (HWND, UINT, WPARAM, LPARAM); + + +#line 55 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + +typedef struct tagOFNA { + DWORD lStructSize; + HWND hwndOwner; + HINSTANCE hInstance; + LPCSTR lpstrFilter; + LPSTR lpstrCustomFilter; + DWORD nMaxCustFilter; + DWORD nFilterIndex; + LPSTR lpstrFile; + DWORD nMaxFile; + LPSTR lpstrFileTitle; + DWORD nMaxFileTitle; + LPCSTR lpstrInitialDir; + LPCSTR lpstrTitle; + DWORD Flags; + WORD nFileOffset; + WORD nFileExtension; + LPCSTR lpstrDefExt; + LPARAM lCustData; + LPOFNHOOKPROC lpfnHook; + LPCSTR lpTemplateName; + + + + +} OPENFILENAMEA, *LPOPENFILENAMEA; +typedef struct tagOFNW { + DWORD lStructSize; + HWND hwndOwner; + HINSTANCE hInstance; + LPCWSTR lpstrFilter; + LPWSTR lpstrCustomFilter; + DWORD nMaxCustFilter; + DWORD nFilterIndex; + LPWSTR lpstrFile; + DWORD nMaxFile; + LPWSTR lpstrFileTitle; + DWORD nMaxFileTitle; + LPCWSTR lpstrInitialDir; + LPCWSTR lpstrTitle; + DWORD Flags; + WORD nFileOffset; + WORD nFileExtension; + LPCWSTR lpstrDefExt; + LPARAM lCustData; + LPOFNHOOKPROC lpfnHook; + LPCWSTR lpTemplateName; + + + + +} OPENFILENAMEW, *LPOPENFILENAMEW; + + + + +typedef OPENFILENAMEA OPENFILENAME; +typedef LPOPENFILENAMEA LPOPENFILENAME; +#line 115 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + +BOOL __stdcall GetOpenFileNameA(LPOPENFILENAMEA); +BOOL __stdcall GetOpenFileNameW(LPOPENFILENAMEW); + + + + +#line 123 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" +BOOL __stdcall GetSaveFileNameA(LPOPENFILENAMEA); +BOOL __stdcall GetSaveFileNameW(LPOPENFILENAMEW); + + + + +#line 130 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" +short __stdcall GetFileTitleA(LPCSTR, LPSTR, WORD); +short __stdcall GetFileTitleW(LPCWSTR, LPWSTR, WORD); + + + + +#line 137 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 164 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + +typedef UINT (__stdcall *LPCCHOOKPROC) (HWND, UINT, WPARAM, LPARAM); + + +#line 184 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + +typedef struct _OFNOTIFYA +{ + NMHDR hdr; + LPOPENFILENAMEA lpOFN; + LPSTR pszFile; +} OFNOTIFYA, *LPOFNOTIFYA; + +typedef struct _OFNOTIFYW +{ + NMHDR hdr; + LPOPENFILENAMEW lpOFN; + LPWSTR pszFile; +} OFNOTIFYW, *LPOFNOTIFYW; + + + + +typedef OFNOTIFYA OFNOTIFY; +typedef LPOFNOTIFYA LPOFNOTIFY; +#line 207 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + +typedef struct _OFNOTIFYEXA +{ + NMHDR hdr; + LPOPENFILENAMEA lpOFN; + LPVOID psf; + LPVOID pidl; +} OFNOTIFYEXA, *LPOFNOTIFYEXA; + +typedef struct _OFNOTIFYEXW +{ + NMHDR hdr; + LPOPENFILENAMEW lpOFN; + LPVOID psf; + LPVOID pidl; +} OFNOTIFYEXW, *LPOFNOTIFYEXW; + + + + +typedef OFNOTIFYEXA OFNOTIFYEX; +typedef LPOFNOTIFYEXA LPOFNOTIFYEX; +#line 232 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 265 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + +#line 279 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + +#line 293 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 322 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + +typedef struct tagCHOOSECOLORA { + DWORD lStructSize; + HWND hwndOwner; + HWND hInstance; + COLORREF rgbResult; + COLORREF* lpCustColors; + DWORD Flags; + LPARAM lCustData; + LPCCHOOKPROC lpfnHook; + LPCSTR lpTemplateName; +} CHOOSECOLORA, *LPCHOOSECOLORA; +typedef struct tagCHOOSECOLORW { + DWORD lStructSize; + HWND hwndOwner; + HWND hInstance; + COLORREF rgbResult; + COLORREF* lpCustColors; + DWORD Flags; + LPARAM lCustData; + LPCCHOOKPROC lpfnHook; + LPCWSTR lpTemplateName; +} CHOOSECOLORW, *LPCHOOSECOLORW; + + + + +typedef CHOOSECOLORA CHOOSECOLOR; +typedef LPCHOOSECOLORA LPCHOOSECOLOR; +#line 353 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 386 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + +BOOL __stdcall ChooseColorA(LPCHOOSECOLORA); +BOOL __stdcall ChooseColorW(LPCHOOSECOLORW); + + + + +#line 394 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + +#line 406 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + +typedef UINT (__stdcall *LPFRHOOKPROC) (HWND, UINT, WPARAM, LPARAM); + + +#line 412 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + +typedef struct tagFINDREPLACEA { + DWORD lStructSize; + HWND hwndOwner; + HINSTANCE hInstance; + + DWORD Flags; + LPSTR lpstrFindWhat; + LPSTR lpstrReplaceWith; + WORD wFindWhatLen; + WORD wReplaceWithLen; + LPARAM lCustData; + LPFRHOOKPROC lpfnHook; + LPCSTR lpTemplateName; +} FINDREPLACEA, *LPFINDREPLACEA; +typedef struct tagFINDREPLACEW { + DWORD lStructSize; + HWND hwndOwner; + HINSTANCE hInstance; + + DWORD Flags; + LPWSTR lpstrFindWhat; + LPWSTR lpstrReplaceWith; + WORD wFindWhatLen; + WORD wReplaceWithLen; + LPARAM lCustData; + LPFRHOOKPROC lpfnHook; + LPCWSTR lpTemplateName; +} FINDREPLACEW, *LPFINDREPLACEW; + + + + +typedef FINDREPLACEA FINDREPLACE; +typedef LPFINDREPLACEA LPFINDREPLACE; +#line 448 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + + + + +HWND __stdcall FindTextA(LPFINDREPLACEA); +HWND __stdcall FindTextW(LPFINDREPLACEW); + + + + +#line 474 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + +HWND __stdcall ReplaceTextA(LPFINDREPLACEA); +HWND __stdcall ReplaceTextW(LPFINDREPLACEW); + + + + +#line 482 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + +#line 491 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + +typedef UINT (__stdcall *LPCFHOOKPROC) (HWND, UINT, WPARAM, LPARAM); + + +#line 497 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + +typedef struct tagCHOOSEFONTA { + DWORD lStructSize; + HWND hwndOwner; + HDC hDC; + LPLOGFONTA lpLogFont; + INT iPointSize; + DWORD Flags; + COLORREF rgbColors; + LPARAM lCustData; + LPCFHOOKPROC lpfnHook; + LPCSTR lpTemplateName; + HINSTANCE hInstance; + + LPSTR lpszStyle; + + WORD nFontType; + + + WORD ___MISSING_ALIGNMENT__; + INT nSizeMin; + INT nSizeMax; + +} CHOOSEFONTA, *LPCHOOSEFONTA; +typedef struct tagCHOOSEFONTW { + DWORD lStructSize; + HWND hwndOwner; + HDC hDC; + LPLOGFONTW lpLogFont; + INT iPointSize; + DWORD Flags; + COLORREF rgbColors; + LPARAM lCustData; + LPCFHOOKPROC lpfnHook; + LPCWSTR lpTemplateName; + HINSTANCE hInstance; + + LPWSTR lpszStyle; + + WORD nFontType; + + + WORD ___MISSING_ALIGNMENT__; + INT nSizeMin; + INT nSizeMax; + +} CHOOSEFONTW, *LPCHOOSEFONTW; + + + + +typedef CHOOSEFONTA CHOOSEFONT; +typedef LPCHOOSEFONTA LPCHOOSEFONT; +#line 551 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + +BOOL __stdcall ChooseFontA(LPCHOOSEFONTA); +BOOL __stdcall ChooseFontW(LPCHOOSEFONTW); + + + + +#line 559 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + +#line 575 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + +#line 592 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 655 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + +typedef UINT (__stdcall *LPPRINTHOOKPROC) (HWND, UINT, WPARAM, LPARAM); +typedef UINT (__stdcall *LPSETUPHOOKPROC) (HWND, UINT, WPARAM, LPARAM); + + + +#line 669 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + +typedef struct tagPDA { + DWORD lStructSize; + HWND hwndOwner; + HGLOBAL hDevMode; + HGLOBAL hDevNames; + HDC hDC; + DWORD Flags; + WORD nFromPage; + WORD nToPage; + WORD nMinPage; + WORD nMaxPage; + WORD nCopies; + HINSTANCE hInstance; + LPARAM lCustData; + LPPRINTHOOKPROC lpfnPrintHook; + LPSETUPHOOKPROC lpfnSetupHook; + LPCSTR lpPrintTemplateName; + LPCSTR lpSetupTemplateName; + HGLOBAL hPrintTemplate; + HGLOBAL hSetupTemplate; +} PRINTDLGA, *LPPRINTDLGA; +typedef struct tagPDW { + DWORD lStructSize; + HWND hwndOwner; + HGLOBAL hDevMode; + HGLOBAL hDevNames; + HDC hDC; + DWORD Flags; + WORD nFromPage; + WORD nToPage; + WORD nMinPage; + WORD nMaxPage; + WORD nCopies; + HINSTANCE hInstance; + LPARAM lCustData; + LPPRINTHOOKPROC lpfnPrintHook; + LPSETUPHOOKPROC lpfnSetupHook; + LPCWSTR lpPrintTemplateName; + LPCWSTR lpSetupTemplateName; + HGLOBAL hPrintTemplate; + HGLOBAL hSetupTemplate; +} PRINTDLGW, *LPPRINTDLGW; + + + + +typedef PRINTDLGA PRINTDLG; +typedef LPPRINTDLGA LPPRINTDLG; +#line 719 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + +BOOL __stdcall PrintDlgA(LPPRINTDLGA); +BOOL __stdcall PrintDlgW(LPPRINTDLGW); + + + + +#line 727 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagDEVNAMES { + WORD wDriverOffset; + WORD wDeviceOffset; + WORD wOutputOffset; + WORD wDefault; +} DEVNAMES; + +typedef DEVNAMES * LPDEVNAMES; + + + + +DWORD __stdcall CommDlgExtendedError(void); + + + + + + + + + + +typedef UINT (__stdcall* LPPAGEPAINTHOOK)( HWND, UINT, WPARAM, LPARAM ); +typedef UINT (__stdcall* LPPAGESETUPHOOK)( HWND, UINT, WPARAM, LPARAM ); + +typedef struct tagPSDA +{ + DWORD lStructSize; + HWND hwndOwner; + HGLOBAL hDevMode; + HGLOBAL hDevNames; + DWORD Flags; + POINT ptPaperSize; + RECT rtMinMargin; + RECT rtMargin; + HINSTANCE hInstance; + LPARAM lCustData; + LPPAGESETUPHOOK lpfnPageSetupHook; + LPPAGEPAINTHOOK lpfnPagePaintHook; + LPCSTR lpPageSetupTemplateName; + HGLOBAL hPageSetupTemplate; +} PAGESETUPDLGA, * LPPAGESETUPDLGA; +typedef struct tagPSDW +{ + DWORD lStructSize; + HWND hwndOwner; + HGLOBAL hDevMode; + HGLOBAL hDevNames; + DWORD Flags; + POINT ptPaperSize; + RECT rtMinMargin; + RECT rtMargin; + HINSTANCE hInstance; + LPARAM lCustData; + LPPAGESETUPHOOK lpfnPageSetupHook; + LPPAGEPAINTHOOK lpfnPagePaintHook; + LPCWSTR lpPageSetupTemplateName; + HGLOBAL hPageSetupTemplate; +} PAGESETUPDLGW, * LPPAGESETUPDLGW; + + + + +typedef PAGESETUPDLGA PAGESETUPDLG; +typedef LPPAGESETUPDLGA LPPAGESETUPDLG; +#line 820 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + +BOOL __stdcall PageSetupDlgA( LPPAGESETUPDLGA ); +BOOL __stdcall PageSetupDlgW( LPPAGESETUPDLGW ); + + + + +#line 828 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + + + + + + + + + + + + + + + + + +#line 850 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 856 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" +#line 857 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\commdlg.h" +#line 214 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + + + + + + + + + + + + + + + + + + +#line 22 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + + + + + + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + + + + + + + + + + + + + + + +#line 55 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" +#line 56 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + + + + + + + + + + + + + + + + + + + + + + +struct _PSP; +typedef struct _PSP * HPROPSHEETPAGE; + + +struct _PROPSHEETPAGEA; +struct _PROPSHEETPAGEW; +#line 87 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + +typedef UINT (__stdcall * LPFNPSPCALLBACKA)(HWND hwnd, UINT uMsg, struct _PROPSHEETPAGEA *ppsp); +typedef UINT (__stdcall * LPFNPSPCALLBACKW)(HWND hwnd, UINT uMsg, struct _PROPSHEETPAGEW *ppsp); + + + + + +#line 96 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + + + + + + + + + + + + + + + + + +#line 116 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + + + + + + +typedef struct _PROPSHEETPAGEA { + DWORD dwSize; + DWORD dwFlags; + HINSTANCE hInstance; + union { + LPCSTR pszTemplate; + + LPCDLGTEMPLATE pResource; + + +#line 135 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + } ; + union { + HICON hIcon; + LPCSTR pszIcon; + } ; + LPCSTR pszTitle; + DLGPROC pfnDlgProc; + LPARAM lParam; + LPFNPSPCALLBACKA pfnCallback; + UINT * pcRefParent; + + + LPCSTR pszHeaderTitle; + LPCSTR pszHeaderSubTitle; +#line 150 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" +} PROPSHEETPAGEA, *LPPROPSHEETPAGEA; +typedef const PROPSHEETPAGEA *LPCPROPSHEETPAGEA; + +typedef struct _PROPSHEETPAGEW { + DWORD dwSize; + DWORD dwFlags; + HINSTANCE hInstance; + union { + LPCWSTR pszTemplate; + + LPCDLGTEMPLATE pResource; + + +#line 164 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + }; + union { + HICON hIcon; + LPCWSTR pszIcon; + }; + LPCWSTR pszTitle; + DLGPROC pfnDlgProc; + LPARAM lParam; + LPFNPSPCALLBACKW pfnCallback; + UINT * pcRefParent; + + + LPCWSTR pszHeaderTitle; + LPCWSTR pszHeaderSubTitle; +#line 179 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" +} PROPSHEETPAGEW, *LPPROPSHEETPAGEW; +typedef const PROPSHEETPAGEW *LPCPROPSHEETPAGEW; + + + + + + + + + + + +#line 193 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 223 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + +typedef int (__stdcall *PFNPROPSHEETCALLBACK)(HWND, UINT, LPARAM); + + + + +typedef struct _PROPSHEETHEADERA { + DWORD dwSize; + DWORD dwFlags; + HWND hwndParent; + HINSTANCE hInstance; + union { + HICON hIcon; + LPCSTR pszIcon; + }; + LPCSTR pszCaption; + + UINT nPages; + union { + UINT nStartPage; + LPCSTR pStartPage; + }; + union { + LPCPROPSHEETPAGEA ppsp; + HPROPSHEETPAGE *phpage; + }; + PFNPROPSHEETCALLBACK pfnCallback; + + + union { + HBITMAP hbmWatermark; + LPCSTR pszbmWatermark; + } ; + HPALETTE hplWatermark; + union { + HBITMAP hbmHeader; + LPCSTR pszbmHeader; + } ; +#line 263 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" +} PROPSHEETHEADERA, *LPPROPSHEETHEADERA; + +typedef const PROPSHEETHEADERA *LPCPROPSHEETHEADERA; + +typedef struct _PROPSHEETHEADERW { + DWORD dwSize; + DWORD dwFlags; + HWND hwndParent; + HINSTANCE hInstance; + union { + HICON hIcon; + LPCWSTR pszIcon; + }; + LPCWSTR pszCaption; + + + UINT nPages; + union { + UINT nStartPage; + LPCWSTR pStartPage; + }; + union { + LPCPROPSHEETPAGEW ppsp; + HPROPSHEETPAGE *phpage; + }; + PFNPROPSHEETCALLBACK pfnCallback; + + + union { + HBITMAP hbmWatermark; + LPCWSTR pszbmWatermark; + } ; + HPALETTE hplWatermark; + union { + HBITMAP hbmHeader; + LPCWSTR pszbmHeader; + } ; +#line 301 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" +} PROPSHEETHEADERW, *LPPROPSHEETHEADERW; +typedef const PROPSHEETHEADERW *LPCPROPSHEETHEADERW; + + + + + + + + + + + +#line 315 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + + + +__declspec(dllimport) HPROPSHEETPAGE __stdcall CreatePropertySheetPageA(LPCPROPSHEETPAGEA); +__declspec(dllimport) HPROPSHEETPAGE __stdcall CreatePropertySheetPageW(LPCPROPSHEETPAGEW); +__declspec(dllimport) BOOL __stdcall DestroyPropertySheetPage(HPROPSHEETPAGE); +__declspec(dllimport) int __stdcall PropertySheetA(LPCPROPSHEETHEADERA); +__declspec(dllimport) int __stdcall PropertySheetW(LPCPROPSHEETHEADERW); + + + + + + + +#line 333 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + +typedef BOOL (__stdcall * LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM); +typedef BOOL (__stdcall * LPFNADDPROPSHEETPAGES)(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM); + + +typedef struct _PSHNOTIFY +{ + NMHDR hdr; + LPARAM lParam; +} PSHNOTIFY, *LPPSHNOTIFY; + + + + + + + + + + + + + + + + + + +#line 364 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 428 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 473 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 519 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\prsht.h" + +#line 26 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" +#line 27 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _PRINTER_INFO_1A { + DWORD Flags; + LPSTR pDescription; + LPSTR pName; + LPSTR pComment; +} PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A; +typedef struct _PRINTER_INFO_1W { + DWORD Flags; + LPWSTR pDescription; + LPWSTR pName; + LPWSTR pComment; +} PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W; + + + + + +typedef PRINTER_INFO_1A PRINTER_INFO_1; +typedef PPRINTER_INFO_1A PPRINTER_INFO_1; +typedef LPPRINTER_INFO_1A LPPRINTER_INFO_1; +#line 49 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _PRINTER_INFO_2A { + LPSTR pServerName; + LPSTR pPrinterName; + LPSTR pShareName; + LPSTR pPortName; + LPSTR pDriverName; + LPSTR pComment; + LPSTR pLocation; + LPDEVMODEA pDevMode; + LPSTR pSepFile; + LPSTR pPrintProcessor; + LPSTR pDatatype; + LPSTR pParameters; + PSECURITY_DESCRIPTOR pSecurityDescriptor; + DWORD Attributes; + DWORD Priority; + DWORD DefaultPriority; + DWORD StartTime; + DWORD UntilTime; + DWORD Status; + DWORD cJobs; + DWORD AveragePPM; +} PRINTER_INFO_2A, *PPRINTER_INFO_2A, *LPPRINTER_INFO_2A; +typedef struct _PRINTER_INFO_2W { + LPWSTR pServerName; + LPWSTR pPrinterName; + LPWSTR pShareName; + LPWSTR pPortName; + LPWSTR pDriverName; + LPWSTR pComment; + LPWSTR pLocation; + LPDEVMODEW pDevMode; + LPWSTR pSepFile; + LPWSTR pPrintProcessor; + LPWSTR pDatatype; + LPWSTR pParameters; + PSECURITY_DESCRIPTOR pSecurityDescriptor; + DWORD Attributes; + DWORD Priority; + DWORD DefaultPriority; + DWORD StartTime; + DWORD UntilTime; + DWORD Status; + DWORD cJobs; + DWORD AveragePPM; +} PRINTER_INFO_2W, *PPRINTER_INFO_2W, *LPPRINTER_INFO_2W; + + + + + +typedef PRINTER_INFO_2A PRINTER_INFO_2; +typedef PPRINTER_INFO_2A PPRINTER_INFO_2; +typedef LPPRINTER_INFO_2A LPPRINTER_INFO_2; +#line 105 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _PRINTER_INFO_3 { + PSECURITY_DESCRIPTOR pSecurityDescriptor; +} PRINTER_INFO_3, *PPRINTER_INFO_3, *LPPRINTER_INFO_3; + +typedef struct _PRINTER_INFO_4A { + LPSTR pPrinterName; + LPSTR pServerName; + DWORD Attributes; +} PRINTER_INFO_4A, *PPRINTER_INFO_4A, *LPPRINTER_INFO_4A; +typedef struct _PRINTER_INFO_4W { + LPWSTR pPrinterName; + LPWSTR pServerName; + DWORD Attributes; +} PRINTER_INFO_4W, *PPRINTER_INFO_4W, *LPPRINTER_INFO_4W; + + + + + +typedef PRINTER_INFO_4A PRINTER_INFO_4; +typedef PPRINTER_INFO_4A PPRINTER_INFO_4; +typedef LPPRINTER_INFO_4A LPPRINTER_INFO_4; +#line 129 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _PRINTER_INFO_5A { + LPSTR pPrinterName; + LPSTR pPortName; + DWORD Attributes; + DWORD DeviceNotSelectedTimeout; + DWORD TransmissionRetryTimeout; +} PRINTER_INFO_5A, *PPRINTER_INFO_5A, *LPPRINTER_INFO_5A; +typedef struct _PRINTER_INFO_5W { + LPWSTR pPrinterName; + LPWSTR pPortName; + DWORD Attributes; + DWORD DeviceNotSelectedTimeout; + DWORD TransmissionRetryTimeout; +} PRINTER_INFO_5W, *PPRINTER_INFO_5W, *LPPRINTER_INFO_5W; + + + + + +typedef PRINTER_INFO_5A PRINTER_INFO_5; +typedef PPRINTER_INFO_5A PPRINTER_INFO_5; +typedef LPPRINTER_INFO_5A LPPRINTER_INFO_5; +#line 153 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _PRINTER_INFO_6 { + DWORD dwStatus; +} PRINTER_INFO_6, *PPRINTER_INFO_6, *LPPRINTER_INFO_6; + + +typedef struct _PRINTER_INFO_7A { + LPSTR pszObjectGUID; + DWORD dwAction; +} PRINTER_INFO_7A, *PPRINTER_INFO_7A, *LPPRINTER_INFO_7A; +typedef struct _PRINTER_INFO_7W { + LPWSTR pszObjectGUID; + DWORD dwAction; +} PRINTER_INFO_7W, *PPRINTER_INFO_7W, *LPPRINTER_INFO_7W; + + + + + +typedef PRINTER_INFO_7A PRINTER_INFO_7; +typedef PPRINTER_INFO_7A PPRINTER_INFO_7; +typedef LPPRINTER_INFO_7A LPPRINTER_INFO_7; +#line 176 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _JOB_INFO_1A { + DWORD JobId; + LPSTR pPrinterName; + LPSTR pMachineName; + LPSTR pUserName; + LPSTR pDocument; + LPSTR pDatatype; + LPSTR pStatus; + DWORD Status; + DWORD Priority; + DWORD Position; + DWORD TotalPages; + DWORD PagesPrinted; + SYSTEMTIME Submitted; +} JOB_INFO_1A, *PJOB_INFO_1A, *LPJOB_INFO_1A; +typedef struct _JOB_INFO_1W { + DWORD JobId; + LPWSTR pPrinterName; + LPWSTR pMachineName; + LPWSTR pUserName; + LPWSTR pDocument; + LPWSTR pDatatype; + LPWSTR pStatus; + DWORD Status; + DWORD Priority; + DWORD Position; + DWORD TotalPages; + DWORD PagesPrinted; + SYSTEMTIME Submitted; +} JOB_INFO_1W, *PJOB_INFO_1W, *LPJOB_INFO_1W; + + + + + +typedef JOB_INFO_1A JOB_INFO_1; +typedef PJOB_INFO_1A PJOB_INFO_1; +typedef LPJOB_INFO_1A LPJOB_INFO_1; +#line 277 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _JOB_INFO_2A { + DWORD JobId; + LPSTR pPrinterName; + LPSTR pMachineName; + LPSTR pUserName; + LPSTR pDocument; + LPSTR pNotifyName; + LPSTR pDatatype; + LPSTR pPrintProcessor; + LPSTR pParameters; + LPSTR pDriverName; + LPDEVMODEA pDevMode; + LPSTR pStatus; + PSECURITY_DESCRIPTOR pSecurityDescriptor; + DWORD Status; + DWORD Priority; + DWORD Position; + DWORD StartTime; + DWORD UntilTime; + DWORD TotalPages; + DWORD Size; + SYSTEMTIME Submitted; + DWORD Time; + DWORD PagesPrinted; +} JOB_INFO_2A, *PJOB_INFO_2A, *LPJOB_INFO_2A; +typedef struct _JOB_INFO_2W { + DWORD JobId; + LPWSTR pPrinterName; + LPWSTR pMachineName; + LPWSTR pUserName; + LPWSTR pDocument; + LPWSTR pNotifyName; + LPWSTR pDatatype; + LPWSTR pPrintProcessor; + LPWSTR pParameters; + LPWSTR pDriverName; + LPDEVMODEW pDevMode; + LPWSTR pStatus; + PSECURITY_DESCRIPTOR pSecurityDescriptor; + DWORD Status; + DWORD Priority; + DWORD Position; + DWORD StartTime; + DWORD UntilTime; + DWORD TotalPages; + DWORD Size; + SYSTEMTIME Submitted; + DWORD Time; + DWORD PagesPrinted; +} JOB_INFO_2W, *PJOB_INFO_2W, *LPJOB_INFO_2W; + + + + + +typedef JOB_INFO_2A JOB_INFO_2; +typedef PJOB_INFO_2A PJOB_INFO_2; +typedef LPJOB_INFO_2A LPJOB_INFO_2; +#line 337 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _JOB_INFO_3 { + DWORD JobId; + DWORD NextJobId; + DWORD Reserved; +} JOB_INFO_3, *PJOB_INFO_3, *LPJOB_INFO_3; + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _ADDJOB_INFO_1A { + LPSTR Path; + DWORD JobId; +} ADDJOB_INFO_1A, *PADDJOB_INFO_1A, *LPADDJOB_INFO_1A; +typedef struct _ADDJOB_INFO_1W { + LPWSTR Path; + DWORD JobId; +} ADDJOB_INFO_1W, *PADDJOB_INFO_1W, *LPADDJOB_INFO_1W; + + + + + +typedef ADDJOB_INFO_1A ADDJOB_INFO_1; +typedef PADDJOB_INFO_1A PADDJOB_INFO_1; +typedef LPADDJOB_INFO_1A LPADDJOB_INFO_1; +#line 384 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _DRIVER_INFO_1A { + LPSTR pName; +} DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A; +typedef struct _DRIVER_INFO_1W { + LPWSTR pName; +} DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W; + + + + + +typedef DRIVER_INFO_1A DRIVER_INFO_1; +typedef PDRIVER_INFO_1A PDRIVER_INFO_1; +typedef LPDRIVER_INFO_1A LPDRIVER_INFO_1; +#line 400 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _DRIVER_INFO_2A { + DWORD cVersion; + LPSTR pName; + LPSTR pEnvironment; + LPSTR pDriverPath; + LPSTR pDataFile; + LPSTR pConfigFile; +} DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A; +typedef struct _DRIVER_INFO_2W { + DWORD cVersion; + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDriverPath; + LPWSTR pDataFile; + LPWSTR pConfigFile; +} DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W; + + + + + +typedef DRIVER_INFO_2A DRIVER_INFO_2; +typedef PDRIVER_INFO_2A PDRIVER_INFO_2; +typedef LPDRIVER_INFO_2A LPDRIVER_INFO_2; +#line 426 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _DRIVER_INFO_3A { + DWORD cVersion; + LPSTR pName; + LPSTR pEnvironment; + LPSTR pDriverPath; + LPSTR pDataFile; + LPSTR pConfigFile; + LPSTR pHelpFile; + LPSTR pDependentFiles; + LPSTR pMonitorName; + LPSTR pDefaultDataType; +} DRIVER_INFO_3A, *PDRIVER_INFO_3A, *LPDRIVER_INFO_3A; +typedef struct _DRIVER_INFO_3W { + DWORD cVersion; + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDriverPath; + LPWSTR pDataFile; + LPWSTR pConfigFile; + LPWSTR pHelpFile; + LPWSTR pDependentFiles; + LPWSTR pMonitorName; + LPWSTR pDefaultDataType; +} DRIVER_INFO_3W, *PDRIVER_INFO_3W, *LPDRIVER_INFO_3W; + + + + + +typedef DRIVER_INFO_3A DRIVER_INFO_3; +typedef PDRIVER_INFO_3A PDRIVER_INFO_3; +typedef LPDRIVER_INFO_3A LPDRIVER_INFO_3; +#line 460 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + + + + + + + + + + +typedef struct _DOC_INFO_1A { + LPSTR pDocName; + LPSTR pOutputFile; + LPSTR pDatatype; +} DOC_INFO_1A, *PDOC_INFO_1A, *LPDOC_INFO_1A; +typedef struct _DOC_INFO_1W { + LPWSTR pDocName; + LPWSTR pOutputFile; + LPWSTR pDatatype; +} DOC_INFO_1W, *PDOC_INFO_1W, *LPDOC_INFO_1W; + + + + + +typedef DOC_INFO_1A DOC_INFO_1; +typedef PDOC_INFO_1A PDOC_INFO_1; +typedef LPDOC_INFO_1A LPDOC_INFO_1; +#line 491 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _FORM_INFO_1A { + DWORD Flags; + LPSTR pName; + SIZEL Size; + RECTL ImageableArea; +} FORM_INFO_1A, *PFORM_INFO_1A, *LPFORM_INFO_1A; +typedef struct _FORM_INFO_1W { + DWORD Flags; + LPWSTR pName; + SIZEL Size; + RECTL ImageableArea; +} FORM_INFO_1W, *PFORM_INFO_1W, *LPFORM_INFO_1W; + + + + + +typedef FORM_INFO_1A FORM_INFO_1; +typedef PFORM_INFO_1A PFORM_INFO_1; +typedef LPFORM_INFO_1A LPFORM_INFO_1; +#line 513 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _DOC_INFO_2A { + LPSTR pDocName; + LPSTR pOutputFile; + LPSTR pDatatype; + DWORD dwMode; + DWORD JobId; +} DOC_INFO_2A, *PDOC_INFO_2A, *LPDOC_INFO_2A; +typedef struct _DOC_INFO_2W { + LPWSTR pDocName; + LPWSTR pOutputFile; + LPWSTR pDatatype; + DWORD dwMode; + DWORD JobId; +} DOC_INFO_2W, *PDOC_INFO_2W, *LPDOC_INFO_2W; + + + + + +typedef DOC_INFO_2A DOC_INFO_2; +typedef PDOC_INFO_2A PDOC_INFO_2; +typedef LPDOC_INFO_2A LPDOC_INFO_2; +#line 537 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + + + + + + + + + +typedef struct _PRINTPROCESSOR_INFO_1A { + LPSTR pName; +} PRINTPROCESSOR_INFO_1A, *PPRINTPROCESSOR_INFO_1A, *LPPRINTPROCESSOR_INFO_1A; +typedef struct _PRINTPROCESSOR_INFO_1W { + LPWSTR pName; +} PRINTPROCESSOR_INFO_1W, *PPRINTPROCESSOR_INFO_1W, *LPPRINTPROCESSOR_INFO_1W; + + + + + +typedef PRINTPROCESSOR_INFO_1A PRINTPROCESSOR_INFO_1; +typedef PPRINTPROCESSOR_INFO_1A PPRINTPROCESSOR_INFO_1; +typedef LPPRINTPROCESSOR_INFO_1A LPPRINTPROCESSOR_INFO_1; +#line 563 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _PRINTPROCESSOR_CAPS_1 { + DWORD dwLevel; + DWORD dwNupOptions; + DWORD dwPageOrderFlags; + DWORD dwNumberOfCopies; +} PRINTPROCESSOR_CAPS_1, *PPRINTPROCESSOR_CAPS_1; + +typedef struct _PORT_INFO_1A { + LPSTR pName; +} PORT_INFO_1A, *PPORT_INFO_1A, *LPPORT_INFO_1A; +typedef struct _PORT_INFO_1W { + LPWSTR pName; +} PORT_INFO_1W, *PPORT_INFO_1W, *LPPORT_INFO_1W; + + + + + +typedef PORT_INFO_1A PORT_INFO_1; +typedef PPORT_INFO_1A PPORT_INFO_1; +typedef LPPORT_INFO_1A LPPORT_INFO_1; +#line 586 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _PORT_INFO_2A { + LPSTR pPortName; + LPSTR pMonitorName; + LPSTR pDescription; + DWORD fPortType; + DWORD Reserved; +} PORT_INFO_2A, *PPORT_INFO_2A, *LPPORT_INFO_2A; +typedef struct _PORT_INFO_2W { + LPWSTR pPortName; + LPWSTR pMonitorName; + LPWSTR pDescription; + DWORD fPortType; + DWORD Reserved; +} PORT_INFO_2W, *PPORT_INFO_2W, *LPPORT_INFO_2W; + + + + + +typedef PORT_INFO_2A PORT_INFO_2; +typedef PPORT_INFO_2A PPORT_INFO_2; +typedef LPPORT_INFO_2A LPPORT_INFO_2; +#line 610 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + + + + +typedef struct _PORT_INFO_3A { + DWORD dwStatus; + LPSTR pszStatus; + DWORD dwSeverity; +} PORT_INFO_3A, *PPORT_INFO_3A, *LPPORT_INFO_3A; +typedef struct _PORT_INFO_3W { + DWORD dwStatus; + LPWSTR pszStatus; + DWORD dwSeverity; +} PORT_INFO_3W, *PPORT_INFO_3W, *LPPORT_INFO_3W; + + + + + +typedef PORT_INFO_3A PORT_INFO_3; +typedef PPORT_INFO_3A PPORT_INFO_3; +typedef LPPORT_INFO_3A LPPORT_INFO_3; +#line 635 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + + + + + + + + + + + + + + + + + + + +typedef struct _MONITOR_INFO_1A{ + LPSTR pName; +} MONITOR_INFO_1A, *PMONITOR_INFO_1A, *LPMONITOR_INFO_1A; +typedef struct _MONITOR_INFO_1W{ + LPWSTR pName; +} MONITOR_INFO_1W, *PMONITOR_INFO_1W, *LPMONITOR_INFO_1W; + + + + + +typedef MONITOR_INFO_1A MONITOR_INFO_1; +typedef PMONITOR_INFO_1A PMONITOR_INFO_1; +typedef LPMONITOR_INFO_1A LPMONITOR_INFO_1; +#line 671 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _MONITOR_INFO_2A{ + LPSTR pName; + LPSTR pEnvironment; + LPSTR pDLLName; +} MONITOR_INFO_2A, *PMONITOR_INFO_2A, *LPMONITOR_INFO_2A; +typedef struct _MONITOR_INFO_2W{ + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDLLName; +} MONITOR_INFO_2W, *PMONITOR_INFO_2W, *LPMONITOR_INFO_2W; + + + + + +typedef MONITOR_INFO_2A MONITOR_INFO_2; +typedef PMONITOR_INFO_2A PMONITOR_INFO_2; +typedef LPMONITOR_INFO_2A LPMONITOR_INFO_2; +#line 691 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _DATATYPES_INFO_1A{ + LPSTR pName; +} DATATYPES_INFO_1A, *PDATATYPES_INFO_1A, *LPDATATYPES_INFO_1A; +typedef struct _DATATYPES_INFO_1W{ + LPWSTR pName; +} DATATYPES_INFO_1W, *PDATATYPES_INFO_1W, *LPDATATYPES_INFO_1W; + + + + + +typedef DATATYPES_INFO_1A DATATYPES_INFO_1; +typedef PDATATYPES_INFO_1A PDATATYPES_INFO_1; +typedef LPDATATYPES_INFO_1A LPDATATYPES_INFO_1; +#line 707 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _PRINTER_DEFAULTSA{ + LPSTR pDatatype; + LPDEVMODEA pDevMode; + ACCESS_MASK DesiredAccess; +} PRINTER_DEFAULTSA, *PPRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA; +typedef struct _PRINTER_DEFAULTSW{ + LPWSTR pDatatype; + LPDEVMODEW pDevMode; + ACCESS_MASK DesiredAccess; +} PRINTER_DEFAULTSW, *PPRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW; + + + + + +typedef PRINTER_DEFAULTSA PRINTER_DEFAULTS; +typedef PPRINTER_DEFAULTSA PPRINTER_DEFAULTS; +typedef LPPRINTER_DEFAULTSA LPPRINTER_DEFAULTS; +#line 727 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +typedef struct _PRINTER_ENUM_VALUESA { + LPSTR pValueName; + DWORD cbValueName; + DWORD dwType; + LPBYTE pData; + DWORD cbData; +} PRINTER_ENUM_VALUESA, *PPRINTER_ENUM_VALUESA, *LPPRINTER_ENUM_VALUESA; +typedef struct _PRINTER_ENUM_VALUESW { + LPWSTR pValueName; + DWORD cbValueName; + DWORD dwType; + LPBYTE pData; + DWORD cbData; +} PRINTER_ENUM_VALUESW, *PPRINTER_ENUM_VALUESW, *LPPRINTER_ENUM_VALUESW; + + + + + +typedef PRINTER_ENUM_VALUESA PRINTER_ENUM_VALUES; +typedef PPRINTER_ENUM_VALUESA PPRINTER_ENUM_VALUES; +typedef LPPRINTER_ENUM_VALUESA LPPRINTER_ENUM_VALUES; +#line 751 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +EnumPrintersA( + DWORD Flags, + LPSTR Name, + DWORD Level, + LPBYTE pPrinterEnum, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); +BOOL +__stdcall +EnumPrintersW( + DWORD Flags, + LPWSTR Name, + DWORD Level, + LPBYTE pPrinterEnum, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); + + + + +#line 779 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + + + + + + + + + + + + + + + + + + + + + +BOOL +__stdcall +OpenPrinterA( + LPSTR pPrinterName, + LPHANDLE phPrinter, + LPPRINTER_DEFAULTSA pDefault +); +BOOL +__stdcall +OpenPrinterW( + LPWSTR pPrinterName, + LPHANDLE phPrinter, + LPPRINTER_DEFAULTSW pDefault +); + + + + +#line 821 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +ResetPrinterA( + HANDLE hPrinter, + LPPRINTER_DEFAULTSA pDefault +); +BOOL +__stdcall +ResetPrinterW( + HANDLE hPrinter, + LPPRINTER_DEFAULTSW pDefault +); + + + + +#line 839 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +SetJobA( + HANDLE hPrinter, + DWORD JobId, + DWORD Level, + LPBYTE pJob, + DWORD Command +); +BOOL +__stdcall +SetJobW( + HANDLE hPrinter, + DWORD JobId, + DWORD Level, + LPBYTE pJob, + DWORD Command +); + + + + +#line 863 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +GetJobA( + HANDLE hPrinter, + DWORD JobId, + DWORD Level, + LPBYTE pJob, + DWORD cbBuf, + LPDWORD pcbNeeded +); +BOOL +__stdcall +GetJobW( + HANDLE hPrinter, + DWORD JobId, + DWORD Level, + LPBYTE pJob, + DWORD cbBuf, + LPDWORD pcbNeeded +); + + + + +#line 889 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +EnumJobsA( + HANDLE hPrinter, + DWORD FirstJob, + DWORD NoJobs, + DWORD Level, + LPBYTE pJob, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); +BOOL +__stdcall +EnumJobsW( + HANDLE hPrinter, + DWORD FirstJob, + DWORD NoJobs, + DWORD Level, + LPBYTE pJob, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); + + + + +#line 919 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +HANDLE +__stdcall +AddPrinterA( + LPSTR pName, + DWORD Level, + LPBYTE pPrinter +); +HANDLE +__stdcall +AddPrinterW( + LPWSTR pName, + DWORD Level, + LPBYTE pPrinter +); + + + + +#line 939 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +DeletePrinter( + HANDLE hPrinter +); + +BOOL +__stdcall +SetPrinterA( + HANDLE hPrinter, + DWORD Level, + LPBYTE pPrinter, + DWORD Command +); +BOOL +__stdcall +SetPrinterW( + HANDLE hPrinter, + DWORD Level, + LPBYTE pPrinter, + DWORD Command +); + + + + +#line 967 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +GetPrinterA( + HANDLE hPrinter, + DWORD Level, + LPBYTE pPrinter, + DWORD cbBuf, + LPDWORD pcbNeeded +); +BOOL +__stdcall +GetPrinterW( + HANDLE hPrinter, + DWORD Level, + LPBYTE pPrinter, + DWORD cbBuf, + LPDWORD pcbNeeded +); + + + + +#line 991 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +AddPrinterDriverA( + LPSTR pName, + DWORD Level, + LPBYTE pDriverInfo +); +BOOL +__stdcall +AddPrinterDriverW( + LPWSTR pName, + DWORD Level, + LPBYTE pDriverInfo +); + + + + +#line 1011 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +AddPrinterDriverExA( + LPSTR pName, + DWORD Level, + LPBYTE pDriverInfo, + DWORD dwFileCopyFlags +); +BOOL +__stdcall +AddPrinterDriverExW( + LPWSTR pName, + DWORD Level, + LPBYTE pDriverInfo, + DWORD dwFileCopyFlags +); + + + + +#line 1033 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +EnumPrinterDriversA( + LPSTR pName, + LPSTR pEnvironment, + DWORD Level, + LPBYTE pDriverInfo, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); +BOOL +__stdcall +EnumPrinterDriversW( + LPWSTR pName, + LPWSTR pEnvironment, + DWORD Level, + LPBYTE pDriverInfo, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); + + + + +#line 1061 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +GetPrinterDriverA( + HANDLE hPrinter, + LPSTR pEnvironment, + DWORD Level, + LPBYTE pDriverInfo, + DWORD cbBuf, + LPDWORD pcbNeeded +); +BOOL +__stdcall +GetPrinterDriverW( + HANDLE hPrinter, + LPWSTR pEnvironment, + DWORD Level, + LPBYTE pDriverInfo, + DWORD cbBuf, + LPDWORD pcbNeeded +); + + + + +#line 1087 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +GetPrinterDriverDirectoryA( + LPSTR pName, + LPSTR pEnvironment, + DWORD Level, + LPBYTE pDriverDirectory, + DWORD cbBuf, + LPDWORD pcbNeeded +); +BOOL +__stdcall +GetPrinterDriverDirectoryW( + LPWSTR pName, + LPWSTR pEnvironment, + DWORD Level, + LPBYTE pDriverDirectory, + DWORD cbBuf, + LPDWORD pcbNeeded +); + + + + +#line 1113 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +DeletePrinterDriverA( + LPSTR pName, + LPSTR pEnvironment, + LPSTR pDriverName +); +BOOL +__stdcall +DeletePrinterDriverW( + LPWSTR pName, + LPWSTR pEnvironment, + LPWSTR pDriverName +); + + + + +#line 1133 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +DeletePrinterDriverExA( + LPSTR pName, + LPSTR pEnvironment, + LPSTR pDriverName, + DWORD dwDeleteFlag, + DWORD dwVersionFlag +); +BOOL +__stdcall +DeletePrinterDriverExW( + LPWSTR pName, + LPWSTR pEnvironment, + LPWSTR pDriverName, + DWORD dwDeleteFlag, + DWORD dwVersionFlag +); + + + + +#line 1157 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +AddPerMachineConnectionA( + LPCSTR pServer, + LPCSTR pPrinterName, + LPCSTR pPrintServer, + LPCSTR pProvider +); +BOOL +__stdcall +AddPerMachineConnectionW( + LPCWSTR pServer, + LPCWSTR pPrinterName, + LPCWSTR pPrintServer, + LPCWSTR pProvider +); + + + + +#line 1179 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +DeletePerMachineConnectionA( + LPCSTR pServer, + LPCSTR pPrinterName +); +BOOL +__stdcall +DeletePerMachineConnectionW( + LPCWSTR pServer, + LPCWSTR pPrinterName +); + + + + +#line 1197 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +EnumPerMachineConnectionsA( + LPCSTR pServer, + LPBYTE pPrinterEnum, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); +BOOL +__stdcall +EnumPerMachineConnectionsW( + LPCWSTR pServer, + LPBYTE pPrinterEnum, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); + + + + +#line 1221 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +AddPrintProcessorA( + LPSTR pName, + LPSTR pEnvironment, + LPSTR pPathName, + LPSTR pPrintProcessorName +); +BOOL +__stdcall +AddPrintProcessorW( + LPWSTR pName, + LPWSTR pEnvironment, + LPWSTR pPathName, + LPWSTR pPrintProcessorName +); + + + + +#line 1243 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +EnumPrintProcessorsA( + LPSTR pName, + LPSTR pEnvironment, + DWORD Level, + LPBYTE pPrintProcessorInfo, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); +BOOL +__stdcall +EnumPrintProcessorsW( + LPWSTR pName, + LPWSTR pEnvironment, + DWORD Level, + LPBYTE pPrintProcessorInfo, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); + + + + +#line 1271 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +GetPrintProcessorDirectoryA( + LPSTR pName, + LPSTR pEnvironment, + DWORD Level, + LPBYTE pPrintProcessorInfo, + DWORD cbBuf, + LPDWORD pcbNeeded +); +BOOL +__stdcall +GetPrintProcessorDirectoryW( + LPWSTR pName, + LPWSTR pEnvironment, + DWORD Level, + LPBYTE pPrintProcessorInfo, + DWORD cbBuf, + LPDWORD pcbNeeded +); + + + + +#line 1299 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +EnumPrintProcessorDatatypesA( + LPSTR pName, + LPSTR pPrintProcessorName, + DWORD Level, + LPBYTE pDatatypes, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); +BOOL +__stdcall +EnumPrintProcessorDatatypesW( + LPWSTR pName, + LPWSTR pPrintProcessorName, + DWORD Level, + LPBYTE pDatatypes, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); + + + + +#line 1327 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +DeletePrintProcessorA( + LPSTR pName, + LPSTR pEnvironment, + LPSTR pPrintProcessorName +); +BOOL +__stdcall +DeletePrintProcessorW( + LPWSTR pName, + LPWSTR pEnvironment, + LPWSTR pPrintProcessorName +); + + + + +#line 1347 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +DWORD +__stdcall +StartDocPrinterA( + HANDLE hPrinter, + DWORD Level, + LPBYTE pDocInfo +); +DWORD +__stdcall +StartDocPrinterW( + HANDLE hPrinter, + DWORD Level, + LPBYTE pDocInfo +); + + + + +#line 1367 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +StartPagePrinter( + HANDLE hPrinter +); + +BOOL +__stdcall +WritePrinter( + HANDLE hPrinter, + LPVOID pBuf, + DWORD cbBuf, + LPDWORD pcWritten +); + + +BOOL +__stdcall +EndPagePrinter( + HANDLE hPrinter +); + +BOOL +__stdcall +AbortPrinter( + HANDLE hPrinter +); + +BOOL +__stdcall +ReadPrinter( + HANDLE hPrinter, + LPVOID pBuf, + DWORD cbBuf, + LPDWORD pNoBytesRead +); + +BOOL +__stdcall +EndDocPrinter( + HANDLE hPrinter +); + +BOOL +__stdcall +AddJobA( + HANDLE hPrinter, + DWORD Level, + LPBYTE pData, + DWORD cbBuf, + LPDWORD pcbNeeded +); +BOOL +__stdcall +AddJobW( + HANDLE hPrinter, + DWORD Level, + LPBYTE pData, + DWORD cbBuf, + LPDWORD pcbNeeded +); + + + + +#line 1434 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +ScheduleJob( + HANDLE hPrinter, + DWORD JobId +); + +BOOL +__stdcall +PrinterProperties( + HWND hWnd, + HANDLE hPrinter +); + +LONG +__stdcall +DocumentPropertiesA( + HWND hWnd, + HANDLE hPrinter, + LPSTR pDeviceName, + PDEVMODEA pDevModeOutput, + PDEVMODEA pDevModeInput, + DWORD fMode +); +LONG +__stdcall +DocumentPropertiesW( + HWND hWnd, + HANDLE hPrinter, + LPWSTR pDeviceName, + PDEVMODEW pDevModeOutput, + PDEVMODEW pDevModeInput, + DWORD fMode +); + + + + +#line 1474 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +LONG +__stdcall +AdvancedDocumentPropertiesA( + HWND hWnd, + HANDLE hPrinter, + LPSTR pDeviceName, + PDEVMODEA pDevModeOutput, + PDEVMODEA pDevModeInput +); +LONG +__stdcall +AdvancedDocumentPropertiesW( + HWND hWnd, + HANDLE hPrinter, + LPWSTR pDeviceName, + PDEVMODEW pDevModeOutput, + PDEVMODEW pDevModeInput +); + + + + +#line 1498 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + +DWORD +__stdcall +GetPrinterDataA( + HANDLE hPrinter, + LPSTR pValueName, + LPDWORD pType, + LPBYTE pData, + DWORD nSize, + LPDWORD pcbNeeded +); +DWORD +__stdcall +GetPrinterDataW( + HANDLE hPrinter, + LPWSTR pValueName, + LPDWORD pType, + LPBYTE pData, + DWORD nSize, + LPDWORD pcbNeeded +); + + + + +#line 1525 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +DWORD +__stdcall +GetPrinterDataExA( + HANDLE hPrinter, + LPCSTR pKeyName, + LPCSTR pValueName, + LPDWORD pType, + LPBYTE pData, + DWORD nSize, + LPDWORD pcbNeeded +); +DWORD +__stdcall +GetPrinterDataExW( + HANDLE hPrinter, + LPCWSTR pKeyName, + LPCWSTR pValueName, + LPDWORD pType, + LPBYTE pData, + DWORD nSize, + LPDWORD pcbNeeded +); + + + + +#line 1553 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +DWORD +__stdcall +EnumPrinterDataA( + HANDLE hPrinter, + DWORD dwIndex, + LPSTR pValueName, + DWORD cbValueName, + LPDWORD pcbValueName, + LPDWORD pType, + LPBYTE pData, + DWORD cbData, + LPDWORD pcbData +); +DWORD +__stdcall +EnumPrinterDataW( + HANDLE hPrinter, + DWORD dwIndex, + LPWSTR pValueName, + DWORD cbValueName, + LPDWORD pcbValueName, + LPDWORD pType, + LPBYTE pData, + DWORD cbData, + LPDWORD pcbData +); + + + + +#line 1585 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +DWORD +__stdcall +EnumPrinterDataExA( + HANDLE hPrinter, + LPCSTR pKeyName, + LPBYTE pEnumValues, + DWORD cbEnumValues, + LPDWORD pcbEnumValues, + LPDWORD pnEnumValues +); +DWORD +__stdcall +EnumPrinterDataExW( + HANDLE hPrinter, + LPCWSTR pKeyName, + LPBYTE pEnumValues, + DWORD cbEnumValues, + LPDWORD pcbEnumValues, + LPDWORD pnEnumValues +); + + + + +#line 1611 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +DWORD +__stdcall +EnumPrinterKeyA( + HANDLE hPrinter, + LPCSTR pKeyName, + LPSTR pSubkey, + DWORD cbSubkey, + LPDWORD pcbSubkey +); +DWORD +__stdcall +EnumPrinterKeyW( + HANDLE hPrinter, + LPCWSTR pKeyName, + LPWSTR pSubkey, + DWORD cbSubkey, + LPDWORD pcbSubkey +); + + + + +#line 1635 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + +DWORD +__stdcall +SetPrinterDataA( + HANDLE hPrinter, + LPSTR pValueName, + DWORD Type, + LPBYTE pData, + DWORD cbData +); +DWORD +__stdcall +SetPrinterDataW( + HANDLE hPrinter, + LPWSTR pValueName, + DWORD Type, + LPBYTE pData, + DWORD cbData +); + + + + +#line 1660 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + +DWORD +__stdcall +SetPrinterDataExA( + HANDLE hPrinter, + LPCSTR pKeyName, + LPCSTR pValueName, + DWORD Type, + LPBYTE pData, + DWORD cbData +); +DWORD +__stdcall +SetPrinterDataExW( + HANDLE hPrinter, + LPCWSTR pKeyName, + LPCWSTR pValueName, + DWORD Type, + LPBYTE pData, + DWORD cbData +); + + + + +#line 1687 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +DWORD +__stdcall +DeletePrinterDataA( + HANDLE hPrinter, + LPSTR pValueName +); +DWORD +__stdcall +DeletePrinterDataW( + HANDLE hPrinter, + LPWSTR pValueName +); + + + + +#line 1707 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + +DWORD +__stdcall +DeletePrinterDataExA( + HANDLE hPrinter, + LPCSTR pKeyName, + LPCSTR pValueName +); +DWORD +__stdcall +DeletePrinterDataExW( + HANDLE hPrinter, + LPCWSTR pKeyName, + LPCWSTR pValueName +); + + + + +#line 1728 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + +DWORD +__stdcall +DeletePrinterKeyA( + HANDLE hPrinter, + LPCSTR pKeyName +); +DWORD +__stdcall +DeletePrinterKeyW( + HANDLE hPrinter, + LPCWSTR pKeyName +); + + + + +#line 1747 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE { + WORD Type; + WORD Reserved0; + DWORD Reserved1; + DWORD Reserved2; + DWORD Count; + PWORD pFields; +} PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE, *LPPRINTER_NOTIFY_OPTIONS_TYPE; + + + + +typedef struct _PRINTER_NOTIFY_OPTIONS { + DWORD Version; + DWORD Flags; + DWORD Count; + PPRINTER_NOTIFY_OPTIONS_TYPE pTypes; +} PRINTER_NOTIFY_OPTIONS, *PPRINTER_NOTIFY_OPTIONS, *LPPRINTER_NOTIFY_OPTIONS; + + + + + +typedef struct _PRINTER_NOTIFY_INFO_DATA { + WORD Type; + WORD Field; + DWORD Reserved; + DWORD Id; + union { + DWORD adwData[2]; + struct { + DWORD cbBuf; + LPVOID pBuf; + } Data; + } NotifyData; +} PRINTER_NOTIFY_INFO_DATA, *PPRINTER_NOTIFY_INFO_DATA, *LPPRINTER_NOTIFY_INFO_DATA; + +typedef struct _PRINTER_NOTIFY_INFO { + DWORD Version; + DWORD Flags; + DWORD Count; + PRINTER_NOTIFY_INFO_DATA aData[1]; +} PRINTER_NOTIFY_INFO, *PPRINTER_NOTIFY_INFO, *LPPRINTER_NOTIFY_INFO; + +DWORD +__stdcall +WaitForPrinterChange( + HANDLE hPrinter, + DWORD Flags +); + +HANDLE +__stdcall +FindFirstPrinterChangeNotification( + HANDLE hPrinter, + DWORD fdwFlags, + DWORD fdwOptions, + LPVOID pPrinterNotifyOptions +); + + +BOOL +__stdcall +FindNextPrinterChangeNotification( + HANDLE hChange, + PDWORD pdwChange, + LPVOID pvReserved, + LPVOID *ppPrinterNotifyInfo +); + +BOOL +__stdcall +FreePrinterNotifyInfo( + PPRINTER_NOTIFY_INFO pPrinterNotifyInfo +); + +BOOL +__stdcall +FindClosePrinterChangeNotification( + HANDLE hChange +); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +DWORD +__stdcall +PrinterMessageBoxA( + HANDLE hPrinter, + DWORD Error, + HWND hWnd, + LPSTR pText, + LPSTR pCaption, + DWORD dwType +); +DWORD +__stdcall +PrinterMessageBoxW( + HANDLE hPrinter, + DWORD Error, + HWND hWnd, + LPWSTR pText, + LPWSTR pCaption, + DWORD dwType +); + + + + +#line 1941 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + + + + + + + + + +BOOL +__stdcall +ClosePrinter( + HANDLE hPrinter +); + +BOOL +__stdcall +AddFormA( + HANDLE hPrinter, + DWORD Level, + LPBYTE pForm +); +BOOL +__stdcall +AddFormW( + HANDLE hPrinter, + DWORD Level, + LPBYTE pForm +); + + + + +#line 1977 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +DeleteFormA( + HANDLE hPrinter, + LPSTR pFormName +); +BOOL +__stdcall +DeleteFormW( + HANDLE hPrinter, + LPWSTR pFormName +); + + + + +#line 1997 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +GetFormA( + HANDLE hPrinter, + LPSTR pFormName, + DWORD Level, + LPBYTE pForm, + DWORD cbBuf, + LPDWORD pcbNeeded +); +BOOL +__stdcall +GetFormW( + HANDLE hPrinter, + LPWSTR pFormName, + DWORD Level, + LPBYTE pForm, + DWORD cbBuf, + LPDWORD pcbNeeded +); + + + + +#line 2025 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +SetFormA( + HANDLE hPrinter, + LPSTR pFormName, + DWORD Level, + LPBYTE pForm +); +BOOL +__stdcall +SetFormW( + HANDLE hPrinter, + LPWSTR pFormName, + DWORD Level, + LPBYTE pForm +); + + + + +#line 2049 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +EnumFormsA( + HANDLE hPrinter, + DWORD Level, + LPBYTE pForm, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); +BOOL +__stdcall +EnumFormsW( + HANDLE hPrinter, + DWORD Level, + LPBYTE pForm, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); + + + + +#line 2077 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +EnumMonitorsA( + LPSTR pName, + DWORD Level, + LPBYTE pMonitors, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); +BOOL +__stdcall +EnumMonitorsW( + LPWSTR pName, + DWORD Level, + LPBYTE pMonitors, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); + + + + +#line 2105 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +AddMonitorA( + LPSTR pName, + DWORD Level, + LPBYTE pMonitors +); +BOOL +__stdcall +AddMonitorW( + LPWSTR pName, + DWORD Level, + LPBYTE pMonitors +); + + + + +#line 2127 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +DeleteMonitorA( + LPSTR pName, + LPSTR pEnvironment, + LPSTR pMonitorName +); +BOOL +__stdcall +DeleteMonitorW( + LPWSTR pName, + LPWSTR pEnvironment, + LPWSTR pMonitorName +); + + + + +#line 2149 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +EnumPortsA( + LPSTR pName, + DWORD Level, + LPBYTE pPorts, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); +BOOL +__stdcall +EnumPortsW( + LPWSTR pName, + DWORD Level, + LPBYTE pPorts, + DWORD cbBuf, + LPDWORD pcbNeeded, + LPDWORD pcReturned +); + + + + +#line 2177 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +AddPortA( + LPSTR pName, + HWND hWnd, + LPSTR pMonitorName +); +BOOL +__stdcall +AddPortW( + LPWSTR pName, + HWND hWnd, + LPWSTR pMonitorName +); + + + + +#line 2199 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +ConfigurePortA( + LPSTR pName, + HWND hWnd, + LPSTR pPortName +); +BOOL +__stdcall +ConfigurePortW( + LPWSTR pName, + HWND hWnd, + LPWSTR pPortName +); + + + + +#line 2221 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +DeletePortA( + LPSTR pName, + HWND hWnd, + LPSTR pPortName +); +BOOL +__stdcall +DeletePortW( + LPWSTR pName, + HWND hWnd, + LPWSTR pPortName +); + + + + +#line 2241 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +XcvDataW( + HANDLE hXcv, + PCWSTR pszDataName, + PBYTE pInputData, + DWORD cbInputData, + PBYTE pOutputData, + DWORD cbOutputData, + PDWORD pcbOutputNeeded, + PDWORD pdwStatus +); + + + +BOOL +__stdcall +SetPortA( + LPSTR pName, + LPSTR pPortName, + DWORD dwLevel, + LPBYTE pPortInfo +); +BOOL +__stdcall +SetPortW( + LPWSTR pName, + LPWSTR pPortName, + DWORD dwLevel, + LPBYTE pPortInfo +); + + + + +#line 2278 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +AddPrinterConnectionA( + LPSTR pName +); +BOOL +__stdcall +AddPrinterConnectionW( + LPWSTR pName +); + + + + +#line 2296 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +DeletePrinterConnectionA( + LPSTR pName +); +BOOL +__stdcall +DeletePrinterConnectionW( + LPWSTR pName +); + + + + +#line 2314 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +HANDLE +__stdcall +ConnectToPrinterDlg( + HWND hwnd, + DWORD Flags +); + +typedef struct _PROVIDOR_INFO_1A{ + LPSTR pName; + LPSTR pEnvironment; + LPSTR pDLLName; +} PROVIDOR_INFO_1A, *PPROVIDOR_INFO_1A, *LPPROVIDOR_INFO_1A; +typedef struct _PROVIDOR_INFO_1W{ + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDLLName; +} PROVIDOR_INFO_1W, *PPROVIDOR_INFO_1W, *LPPROVIDOR_INFO_1W; + + + + + +typedef PROVIDOR_INFO_1A PROVIDOR_INFO_1; +typedef PPROVIDOR_INFO_1A PPROVIDOR_INFO_1; +typedef LPPROVIDOR_INFO_1A LPPROVIDOR_INFO_1; +#line 2343 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + +BOOL +__stdcall +AddPrintProvidorA( + LPSTR pName, + DWORD level, + LPBYTE pProvidorInfo +); +BOOL +__stdcall +AddPrintProvidorW( + LPWSTR pName, + DWORD level, + LPBYTE pProvidorInfo +); + + + + +#line 2365 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +BOOL +__stdcall +DeletePrintProvidorA( + LPSTR pName, + LPSTR pEnvironment, + LPSTR pPrintProvidorName +); +BOOL +__stdcall +DeletePrintProvidorW( + LPWSTR pName, + LPWSTR pEnvironment, + LPWSTR pPrintProvidorName +); + + + + +#line 2385 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +DWORD +__stdcall +SetPrinterHTMLViewA( + HANDLE hPrinter, + DWORD dwView, + LPCSTR lpszPath +); +DWORD +__stdcall +SetPrinterHTMLViewW( + HANDLE hPrinter, + DWORD dwView, + LPCWSTR lpszPath +); + + + + +#line 2565 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + +DWORD +__stdcall +GetPrinterHTMLViewA( + HANDLE hPrinter, + DWORD dwView, + LPSTR lpszPath, + DWORD nSize, + LPDWORD pcbNeeded +); +DWORD +__stdcall +GetPrinterHTMLViewW( + HANDLE hPrinter, + DWORD dwView, + LPWSTR lpszPath, + DWORD nSize, + LPDWORD pcbNeeded +); + + + + +#line 2589 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" + + + + + +#line 2595 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winspool.h" +#line 216 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#pragma pack(8) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#line 17 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + +#line 22 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + +#line 27 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winerror.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 34 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 13 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 51 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + +#line 70 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + +#line 74 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsip.h" + + + + + + + + + + + + + + + + + + + + + + +typedef struct +{ + RPC_NS_HANDLE LookupContext; + RPC_BINDING_HANDLE ProposedHandle; + RPC_BINDING_VECTOR * Bindings; + +} RPC_IMPORT_CONTEXT_P, * PRPC_IMPORT_CONTEXT_P; + + + + +RPC_STATUS __stdcall +I_RpcNsGetBuffer( + PRPC_MESSAGE Message + ); + +RPC_STATUS __stdcall +I_RpcNsSendReceive( + PRPC_MESSAGE Message, + RPC_BINDING_HANDLE * Handle + ); + +void __stdcall +I_RpcNsRaiseException( + PRPC_MESSAGE Message, + RPC_STATUS Status + ); + +RPC_STATUS __stdcall +I_RpcReBindBuffer( + PRPC_MESSAGE Message + ); + +RPC_STATUS __stdcall +I_NsServerBindSearch( + ); + +RPC_STATUS __stdcall +I_NsClientBindSearch( + ); + +void __stdcall +I_NsClientBindDone( + ); + + + + + +#line 73 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcnsip.h" +#line 76 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 140 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + +#line 143 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + +#line 152 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + +#line 154 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + +#line 158 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + +#line 160 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + +#line 166 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + +typedef unsigned char byte; +typedef unsigned char boolean; + + + + + + + + + + +#line 185 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + +#line 187 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + +#line 212 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" +#line 213 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + +void * __stdcall MIDL_user_allocate(size_t); +void __stdcall MIDL_user_free( void * ); + + + + + +#line 232 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + +#line 242 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + +typedef void * NDR_CCONTEXT; + +typedef struct + { + void * pad[2]; + void * userContext; + } * NDR_SCONTEXT; + + + + + +typedef void (__stdcall * NDR_RUNDOWN)(void * context); + +typedef struct _SCONTEXT_QUEUE { + unsigned long NumberOfObjects; + NDR_SCONTEXT * ArrayOfObjects; + } SCONTEXT_QUEUE, * PSCONTEXT_QUEUE; + +__declspec(dllimport) +RPC_BINDING_HANDLE +__stdcall +NDRCContextBinding ( + NDR_CCONTEXT CContext + ); + +__declspec(dllimport) +void +__stdcall +NDRCContextMarshall ( + NDR_CCONTEXT CContext, + void *pBuff + ); + +__declspec(dllimport) +void +__stdcall +NDRCContextUnmarshall ( + NDR_CCONTEXT *pCContext, + RPC_BINDING_HANDLE hBinding, + void * pBuff, + unsigned long DataRepresentation + ); + +__declspec(dllimport) +void +__stdcall +NDRSContextMarshall ( + NDR_SCONTEXT CContext, + void *pBuff, + NDR_RUNDOWN userRunDownIn + ); + +__declspec(dllimport) +NDR_SCONTEXT +__stdcall +NDRSContextUnmarshall ( + void *pBuff, + unsigned long DataRepresentation + ); + +__declspec(dllimport) +void +__stdcall +NDRSContextMarshallEx ( + RPC_BINDING_HANDLE BindingHandle, + NDR_SCONTEXT CContext, + void *pBuff, + NDR_RUNDOWN userRunDownIn + ); + +__declspec(dllimport) +NDR_SCONTEXT +__stdcall +NDRSContextUnmarshallEx ( + RPC_BINDING_HANDLE BindingHandle, + void *pBuff, + unsigned long DataRepresentation + ); + +__declspec(dllimport) +void +__stdcall +RpcSsDestroyClientContext ( + void * * ContextHandle + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 422 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + +__declspec(dllimport) +void +__stdcall +NDRcopy ( + void *pTarget, + void *pSource, + unsigned int size + ); + +__declspec(dllimport) +size_t +__stdcall +MIDL_wchar_strlen ( + wchar_t * s + ); + +__declspec(dllimport) +void +__stdcall +MIDL_wchar_strcpy ( + void * t, + wchar_t * s + ); + +__declspec(dllimport) +void +__stdcall +char_from_ndr ( + PRPC_MESSAGE SourceMessage, + unsigned char * Target + ); + +__declspec(dllimport) +void +__stdcall +char_array_from_ndr ( + PRPC_MESSAGE SourceMessage, + unsigned long LowerIndex, + unsigned long UpperIndex, + unsigned char * Target + ); + +__declspec(dllimport) +void +__stdcall +short_from_ndr ( + PRPC_MESSAGE source, + unsigned short * target + ); + +__declspec(dllimport) +void +__stdcall +short_array_from_ndr( + PRPC_MESSAGE SourceMessage, + unsigned long LowerIndex, + unsigned long UpperIndex, + unsigned short * Target + ); + +__declspec(dllimport) +void +__stdcall +short_from_ndr_temp ( + unsigned char * * source, + unsigned short * target, + unsigned long format + ); + +__declspec(dllimport) +void +__stdcall +long_from_ndr ( + PRPC_MESSAGE source, + unsigned long * target + ); + +__declspec(dllimport) +void +__stdcall +long_array_from_ndr( + PRPC_MESSAGE SourceMessage, + unsigned long LowerIndex, + unsigned long UpperIndex, + unsigned long * Target + ); + +__declspec(dllimport) +void +__stdcall +long_from_ndr_temp ( + unsigned char * * source, + unsigned long * target, + unsigned long format + ); + +__declspec(dllimport) +void +__stdcall +enum_from_ndr( + PRPC_MESSAGE SourceMessage, + unsigned int * Target + ); + +__declspec(dllimport) +void +__stdcall +float_from_ndr ( + PRPC_MESSAGE SourceMessage, + void * Target + ); + +__declspec(dllimport) +void +__stdcall +float_array_from_ndr ( + PRPC_MESSAGE SourceMessage, + unsigned long LowerIndex, + unsigned long UpperIndex, + void * Target + ); + +__declspec(dllimport) +void +__stdcall +double_from_ndr ( + PRPC_MESSAGE SourceMessage, + void * Target + ); + +__declspec(dllimport) +void +__stdcall +double_array_from_ndr ( + PRPC_MESSAGE SourceMessage, + unsigned long LowerIndex, + unsigned long UpperIndex, + void * Target + ); + +__declspec(dllimport) +void +__stdcall +hyper_from_ndr ( + PRPC_MESSAGE source, + __int64 * target + ); + +__declspec(dllimport) +void +__stdcall +hyper_array_from_ndr( + PRPC_MESSAGE SourceMessage, + unsigned long LowerIndex, + unsigned long UpperIndex, + __int64 * Target + ); + +__declspec(dllimport) +void +__stdcall +hyper_from_ndr_temp ( + unsigned char * * source, + __int64 * target, + unsigned long format + ); + +__declspec(dllimport) +void +__stdcall +data_from_ndr ( + PRPC_MESSAGE source, + void * target, + char * format, + unsigned char MscPak + ); + +__declspec(dllimport) +void +__stdcall +data_into_ndr ( + void * source, + PRPC_MESSAGE target, + char * format, + unsigned char MscPak + ); + +__declspec(dllimport) +void +__stdcall +tree_into_ndr ( + void * source, + PRPC_MESSAGE target, + char * format, + unsigned char MscPak + ); + +__declspec(dllimport) +void +__stdcall +data_size_ndr ( + void * source, + PRPC_MESSAGE target, + char * format, + unsigned char MscPak + ); + +__declspec(dllimport) +void +__stdcall +tree_size_ndr ( + void * source, + PRPC_MESSAGE target, + char * format, + unsigned char MscPak + ); + +__declspec(dllimport) +void +__stdcall +tree_peek_ndr ( + PRPC_MESSAGE source, + unsigned char * * buffer, + char * format, + unsigned char MscPak + ); + +__declspec(dllimport) +void * +__stdcall +midl_allocate ( + size_t size + ); + + + + + +typedef unsigned long error_status_t; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 724 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + +#line 728 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + +struct _MIDL_STUB_MESSAGE; +struct _MIDL_STUB_DESC; +struct _FULL_PTR_XLAT_TABLES; + +typedef unsigned char * RPC_BUFPTR; +typedef unsigned long RPC_LENGTH; + + +typedef void (__stdcall * EXPR_EVAL)( struct _MIDL_STUB_MESSAGE * ); + +typedef const unsigned char * PFORMAT_STRING; + + + + +typedef struct + { + long Dimension; + + + unsigned long * BufferConformanceMark; + unsigned long * BufferVarianceMark; + + + unsigned long * MaxCountArray; + unsigned long * OffsetArray; + unsigned long * ActualCountArray; + } ARRAY_INFO, *PARRAY_INFO; + + + + + +typedef struct _NDR_PIPE_DESC * PNDR_PIPE_DESC; +typedef struct _NDR_PIPE_MESSAGE * PNDR_PIPE_MESSAGE; + +typedef struct _NDR_ASYNC_MESSAGE * PNDR_ASYNC_MESSAGE; + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#pragma pack(4) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack4.h" +#line 790 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" +#line 791 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + +typedef struct _MIDL_STUB_MESSAGE + { + + PRPC_MESSAGE RpcMsg; + + + unsigned char * Buffer; + + + + + + unsigned char * BufferStart; + unsigned char * BufferEnd; + + + + + + + + + unsigned char * BufferMark; + + + unsigned long BufferLength; + + + unsigned long MemorySize; + + + unsigned char * Memory; + + + int IsClient; + + + int ReuseBuffer; + + + unsigned char * AllocAllNodesMemory; + + + unsigned char * AllocAllNodesMemoryEnd; + + + + + + + int IgnoreEmbeddedPointers; + + + + + + unsigned char * PointerBufferMark; + + + + + unsigned char fBufferValid; + + + + + unsigned char Unused; + + + + + + unsigned long MaxCount; + + + + + + unsigned long Offset; + + + + + + unsigned long ActualCount; + + + void * ( __stdcall * pfnAllocate)(size_t); + void ( __stdcall * pfnFree)(void *); + + + + + + + + unsigned char * StackTop; + + + + + + unsigned char * pPresentedType; + unsigned char * pTransmitType; + + + + + + + + + + handle_t SavedHandle; + + + + + const struct _MIDL_STUB_DESC * StubDesc; + + + + + struct _FULL_PTR_XLAT_TABLES * FullPtrXlatTables; + + unsigned long FullPtrRefId; + + + + + + int fCheckBounds; + + int fInDontFree :1; + int fDontCallFreeInst :1; + int fInOnlyParam :1; + int fHasReturn :1; + + unsigned long dwDestContext; + void * pvDestContext; + + NDR_SCONTEXT * SavedContextHandles; + + long ParamNumber; + + struct IRpcChannelBuffer * pRpcChannelBuffer; + + PARRAY_INFO pArrayInfo; + + + + + + unsigned long * SizePtrCountArray; + unsigned long * SizePtrOffsetArray; + unsigned long * SizePtrLengthArray; + + + + + void * pArgQueue; + + unsigned long dwStubPhase; + + + + + PNDR_PIPE_DESC pPipeDesc; + + + + + PNDR_ASYNC_MESSAGE pAsyncMsg; + + unsigned long Reserved[3]; + + + + + + } MIDL_STUB_MESSAGE, *PMIDL_STUB_MESSAGE; + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 976 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" +#line 977 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + +typedef void * + ( __stdcall * GENERIC_BINDING_ROUTINE) + (void *); +typedef void + ( __stdcall * GENERIC_UNBIND_ROUTINE) + (void *, unsigned char *); + +typedef struct _GENERIC_BINDING_ROUTINE_PAIR + { + GENERIC_BINDING_ROUTINE pfnBind; + GENERIC_UNBIND_ROUTINE pfnUnbind; + } GENERIC_BINDING_ROUTINE_PAIR, *PGENERIC_BINDING_ROUTINE_PAIR; + +typedef struct __GENERIC_BINDING_INFO + { + void * pObj; + unsigned int Size; + GENERIC_BINDING_ROUTINE pfnBind; + GENERIC_UNBIND_ROUTINE pfnUnbind; + } GENERIC_BINDING_INFO, *PGENERIC_BINDING_INFO; + + + + + + + + + +#line 1011 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + +typedef void ( __stdcall * XMIT_HELPER_ROUTINE) + ( PMIDL_STUB_MESSAGE ); + +typedef struct _XMIT_ROUTINE_QUINTUPLE + { + XMIT_HELPER_ROUTINE pfnTranslateToXmit; + XMIT_HELPER_ROUTINE pfnTranslateFromXmit; + XMIT_HELPER_ROUTINE pfnFreeXmit; + XMIT_HELPER_ROUTINE pfnFreeInst; + } XMIT_ROUTINE_QUINTUPLE, *PXMIT_ROUTINE_QUINTUPLE; + +typedef unsigned long +( __stdcall * USER_MARSHAL_SIZING_ROUTINE) + (unsigned long *, + unsigned long, + void * ); + +typedef unsigned char * +( __stdcall * USER_MARSHAL_MARSHALLING_ROUTINE) + (unsigned long *, + unsigned char * , + void * ); + +typedef unsigned char * +( __stdcall * USER_MARSHAL_UNMARSHALLING_ROUTINE) + (unsigned long *, + unsigned char * , + void * ); + +typedef void ( __stdcall * USER_MARSHAL_FREEING_ROUTINE) + (unsigned long *, + void * ); + +typedef struct _USER_MARSHAL_ROUTINE_QUADRUPLE + { + USER_MARSHAL_SIZING_ROUTINE pfnBufferSize; + USER_MARSHAL_MARSHALLING_ROUTINE pfnMarshall; + USER_MARSHAL_UNMARSHALLING_ROUTINE pfnUnmarshall; + USER_MARSHAL_FREEING_ROUTINE pfnFree; + } USER_MARSHAL_ROUTINE_QUADRUPLE; + +typedef struct _USER_MARSHAL_CB +{ + unsigned long Flags; + PMIDL_STUB_MESSAGE pStubMsg; + PFORMAT_STRING pReserve; +} USER_MARSHAL_CB; + + + + + + + + + +typedef struct _MALLOC_FREE_STRUCT + { + void * ( __stdcall * pfnAllocate)(size_t); + void ( __stdcall * pfnFree)(void *); + } MALLOC_FREE_STRUCT; + +typedef struct _COMM_FAULT_OFFSETS + { + short CommOffset; + short FaultOffset; + } COMM_FAULT_OFFSETS; + + + + + +typedef struct _MIDL_STUB_DESC + { + + void * RpcInterfaceInformation; + + void * ( __stdcall * pfnAllocate)(size_t); + void ( __stdcall * pfnFree)(void *); + + union + { + handle_t * pAutoHandle; + handle_t * pPrimitiveHandle; + PGENERIC_BINDING_INFO pGenericBindingInfo; + } IMPLICIT_HANDLE_INFO; + + const NDR_RUNDOWN * apfnNdrRundownRoutines; + const GENERIC_BINDING_ROUTINE_PAIR * aGenericBindingRoutinePairs; + + const EXPR_EVAL * apfnExprEval; + + const XMIT_ROUTINE_QUINTUPLE * aXmitQuintuple; + + const unsigned char * pFormatTypes; + + int fCheckBounds; + + + unsigned long Version; + + + + + + MALLOC_FREE_STRUCT * pMallocFreeStruct; + + long MIDLVersion; + + const COMM_FAULT_OFFSETS * CommFaultOffsets; + + + + const USER_MARSHAL_ROUTINE_QUADRUPLE * aUserMarshalQuadruple; + + long Reserved1; + long Reserved2; + long Reserved3; + long Reserved4; + long Reserved5; + + } MIDL_STUB_DESC; + +typedef const MIDL_STUB_DESC * PMIDL_STUB_DESC; + +typedef void * PMIDL_XMIT_TYPE; + + + + + +#pragma warning( disable:4200 ) +#line 1146 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" +typedef struct _MIDL_FORMAT_STRING + { + short Pad; + unsigned char Format[]; + } MIDL_FORMAT_STRING; + +#pragma warning( default:4200 ) +#line 1154 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + +typedef void ( __stdcall * STUB_THUNK)( PMIDL_STUB_MESSAGE ); + +typedef long ( __stdcall * SERVER_ROUTINE)(); + + + + +typedef struct _MIDL_SERVER_INFO_ + { + PMIDL_STUB_DESC pStubDesc; + const SERVER_ROUTINE * DispatchTable; + PFORMAT_STRING ProcString; + const unsigned short * FmtStringOffset; + const STUB_THUNK * ThunkTable; + PFORMAT_STRING LocalFormatTypes; + PFORMAT_STRING LocalProcString; + const unsigned short * LocalFmtStringOffset; + } MIDL_SERVER_INFO, *PMIDL_SERVER_INFO; + + + + +typedef struct _MIDL_STUBLESS_PROXY_INFO + { + PMIDL_STUB_DESC pStubDesc; + PFORMAT_STRING ProcFormatString; + const unsigned short * FormatStringOffset; + PFORMAT_STRING LocalFormatTypes; + PFORMAT_STRING LocalProcString; + const unsigned short * LocalFmtStringOffset; + } MIDL_STUBLESS_PROXY_INFO; + +typedef MIDL_STUBLESS_PROXY_INFO * PMIDL_STUBLESS_PROXY_INFO; + + + + +typedef union _CLIENT_CALL_RETURN + { + void * Pointer; + long Simple; + } CLIENT_CALL_RETURN; + + + + + +typedef enum + { + XLAT_SERVER = 1, + XLAT_CLIENT + } XLAT_SIDE; + + + + + +typedef struct _FULL_PTR_TO_REFID_ELEMENT + { + struct _FULL_PTR_TO_REFID_ELEMENT * Next; + + void * Pointer; + unsigned long RefId; + unsigned char State; + } FULL_PTR_TO_REFID_ELEMENT, *PFULL_PTR_TO_REFID_ELEMENT; + + + + +typedef struct _FULL_PTR_XLAT_TABLES + { + + + + struct + { + void * * XlatTable; + unsigned char * StateTable; + unsigned long NumberOfEntries; + } RefIdToPointer; + + + + + struct + { + PFULL_PTR_TO_REFID_ELEMENT * XlatTable; + unsigned long NumberOfBuckets; + unsigned long HashMask; + } PointerToRefId; + + + + + unsigned long NextRefId; + + + + + + + + + XLAT_SIDE XlatSide; + } FULL_PTR_XLAT_TABLES, *PFULL_PTR_XLAT_TABLES; + + + + + + + + + +__declspec(dllimport) +void +__stdcall +NdrSimpleTypeMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + unsigned char FormatChar + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrPointerMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrSimpleStructMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrConformantStructMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrConformantVaryingStructMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrHardStructMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrComplexStructMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrFixedArrayMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrConformantArrayMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrConformantVaryingArrayMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrVaryingArrayMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrComplexArrayMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrNonConformantStringMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrConformantStringMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrEncapsulatedUnionMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrNonEncapsulatedUnionMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrByteCountPointerMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrXmitOrRepAsMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrUserMarshalMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrInterfacePointerMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrClientContextMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + NDR_CCONTEXT ContextHandle, + int fCheck + ); + +__declspec(dllimport) +void +__stdcall +NdrServerContextMarshall( + PMIDL_STUB_MESSAGE pStubMsg, + NDR_SCONTEXT ContextHandle, + NDR_RUNDOWN RundownRoutine + ); + + + + + +__declspec(dllimport) +void +__stdcall +NdrSimpleTypeUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + unsigned char FormatChar + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrPointerUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrSimpleStructUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrConformantStructUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrConformantVaryingStructUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrHardStructUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrComplexStructUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrFixedArrayUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrConformantArrayUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrConformantVaryingArrayUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrVaryingArrayUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrComplexArrayUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrNonConformantStringUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrConformantStringUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrEncapsulatedUnionUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrNonEncapsulatedUnionUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrByteCountPointerUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrXmitOrRepAsUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrUserMarshalUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrInterfacePointerUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * ppMemory, + PFORMAT_STRING pFormat, + unsigned char fMustAlloc + ); + + + +__declspec(dllimport) +void +__stdcall +NdrClientContextUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg, + NDR_CCONTEXT * pContextHandle, + RPC_BINDING_HANDLE BindHandle + ); + +__declspec(dllimport) +NDR_SCONTEXT +__stdcall +NdrServerContextUnmarshall( + PMIDL_STUB_MESSAGE pStubMsg + ); + + + + + +__declspec(dllimport) +void +__stdcall +NdrPointerBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrSimpleStructBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrConformantStructBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrConformantVaryingStructBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrHardStructBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrComplexStructBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrFixedArrayBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrConformantArrayBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrConformantVaryingArrayBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrVaryingArrayBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrComplexArrayBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrConformantStringBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrNonConformantStringBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrEncapsulatedUnionBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrNonEncapsulatedUnionBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrByteCountPointerBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrXmitOrRepAsBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrUserMarshalBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrInterfacePointerBufferSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrContextHandleSize( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + + + +__declspec(dllimport) +unsigned long +__stdcall +NdrPointerMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned long +__stdcall +NdrSimpleStructMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned long +__stdcall +NdrConformantStructMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned long +__stdcall +NdrConformantVaryingStructMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned long +__stdcall +NdrHardStructMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned long +__stdcall +NdrComplexStructMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned long +__stdcall +NdrFixedArrayMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned long +__stdcall +NdrConformantArrayMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned long +__stdcall +NdrConformantVaryingArrayMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned long +__stdcall +NdrVaryingArrayMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned long +__stdcall +NdrComplexArrayMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned long +__stdcall +NdrConformantStringMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned long +__stdcall +NdrNonConformantStringMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned long +__stdcall +NdrEncapsulatedUnionMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +unsigned long +__stdcall +NdrNonEncapsulatedUnionMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned long +__stdcall +NdrXmitOrRepAsMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned long +__stdcall +NdrUserMarshalMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +unsigned long +__stdcall +NdrInterfacePointerMemorySize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + + + + + +__declspec(dllimport) +void +__stdcall +NdrPointerFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrSimpleStructFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrConformantStructFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrConformantVaryingStructFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrHardStructFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrComplexStructFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrFixedArrayFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrConformantArrayFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrConformantVaryingArrayFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrVaryingArrayFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrComplexArrayFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrEncapsulatedUnionFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + +__declspec(dllimport) +void +__stdcall +NdrNonEncapsulatedUnionFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrByteCountPointerFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrXmitOrRepAsFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrUserMarshalFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +void +__stdcall +NdrInterfacePointerFree( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pMemory, + PFORMAT_STRING pFormat + ); + + + + + +__declspec(dllimport) +void +__stdcall +NdrConvert2( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat, + long NumberParams + ); + +__declspec(dllimport) +void +__stdcall +NdrConvert( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + + + + + + + + + + + + + + +__declspec(dllimport) +unsigned char * +__stdcall +NdrUserMarshalSimpleTypeConvert( + unsigned long * pFlags, + unsigned char * pBuffer, + unsigned char FormatChar + ); + + + + + +__declspec(dllimport) +void +__stdcall +NdrClientInitializeNew( + PRPC_MESSAGE pRpcMsg, + PMIDL_STUB_MESSAGE pStubMsg, + PMIDL_STUB_DESC pStubDescriptor, + unsigned int ProcNum + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrServerInitializeNew( + PRPC_MESSAGE pRpcMsg, + PMIDL_STUB_MESSAGE pStubMsg, + PMIDL_STUB_DESC pStubDescriptor + ); + +__declspec(dllimport) +void +__stdcall +NdrServerInitializePartial( + PRPC_MESSAGE pRpcMsg, + PMIDL_STUB_MESSAGE pStubMsg, + PMIDL_STUB_DESC pStubDescriptor, + unsigned long RequestedBufferSize + ); + +__declspec(dllimport) +void +__stdcall +NdrClientInitialize( + PRPC_MESSAGE pRpcMsg, + PMIDL_STUB_MESSAGE pStubMsg, + PMIDL_STUB_DESC pStubDescriptor, + unsigned int ProcNum + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrServerInitialize( + PRPC_MESSAGE pRpcMsg, + PMIDL_STUB_MESSAGE pStubMsg, + PMIDL_STUB_DESC pStubDescriptor + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrServerInitializeUnmarshall ( + PMIDL_STUB_MESSAGE pStubMsg, + PMIDL_STUB_DESC pStubDescriptor, + PRPC_MESSAGE pRpcMsg + ); + +__declspec(dllimport) +void +__stdcall +NdrServerInitializeMarshall ( + PRPC_MESSAGE pRpcMsg, + PMIDL_STUB_MESSAGE pStubMsg + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrGetBuffer( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned long BufferLength, + RPC_BINDING_HANDLE Handle + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrNsGetBuffer( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned long BufferLength, + RPC_BINDING_HANDLE Handle + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrGetPipeBuffer( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned long BufferLength, + RPC_BINDING_HANDLE Handle ); + +__declspec(dllimport) +void +__stdcall +NdrGetPartialBuffer( + PMIDL_STUB_MESSAGE pStubMsg ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrSendReceive( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pBufferEnd + ); + +__declspec(dllimport) +unsigned char * +__stdcall +NdrNsSendReceive( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * pBufferEnd, + RPC_BINDING_HANDLE * pAutoHandle + ); + +__declspec(dllimport) +void +__stdcall +NdrPipeSendReceive( + PMIDL_STUB_MESSAGE pStubMsg, + PNDR_PIPE_DESC pPipeDesc + ); + +__declspec(dllimport) +void +__stdcall +NdrFreeBuffer( + PMIDL_STUB_MESSAGE pStubMsg + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +NdrGetDcomProtocolVersion( + PMIDL_STUB_MESSAGE pStubMsg, + RPC_VERSION * pVersion ); + + + + + + +__declspec(dllimport) +void +__stdcall +NdrPipesInitialize( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pParamDesc, + PNDR_PIPE_DESC pPipeDesc, + PNDR_PIPE_MESSAGE pPipeMsg, + char * pStackTop, + unsigned long NumberParams ); + +__declspec(dllimport) +void +__stdcall +NdrPipePull( + char * pState, + void * buf, + unsigned long esize, + unsigned long * ecount ); + +__declspec(dllimport) +void +__stdcall +NdrPipePush( + char * pState, + void * buf, + unsigned long ecount ); + +__declspec(dllimport) +void +__stdcall +NdrIsAppDoneWithPipes( + PNDR_PIPE_DESC pPipeDesc + ); + +__declspec(dllimport) +void +__stdcall +NdrPipesDone( + PMIDL_STUB_MESSAGE pStubMsg + ); + + + + + + + + +CLIENT_CALL_RETURN __cdecl +NdrClientCall2( + PMIDL_STUB_DESC pStubDescriptor, + PFORMAT_STRING pFormat, + ... + ); + +CLIENT_CALL_RETURN __cdecl +NdrClientCall( + PMIDL_STUB_DESC pStubDescriptor, + PFORMAT_STRING pFormat, + ... + ); + +CLIENT_CALL_RETURN __cdecl +NdrAsyncClientCall( + PMIDL_STUB_DESC pStubDescriptor, + PFORMAT_STRING pFormat, + ... + ); + + +typedef enum { + STUB_UNMARSHAL, + STUB_CALL_SERVER, + STUB_MARSHAL, + STUB_CALL_SERVER_NO_HRESULT +}STUB_PHASE; + +typedef enum { + PROXY_CALCSIZE, + PROXY_GETBUFFER, + PROXY_MARSHAL, + PROXY_SENDRECEIVE, + PROXY_UNMARSHAL +}PROXY_PHASE; + +struct IRpcStubBuffer; + +__declspec(dllimport) +long +__stdcall +NdrAsyncStubCall( + struct IRpcStubBuffer * pThis, + struct IRpcChannelBuffer * pChannel, + PRPC_MESSAGE pRpcMsg, + unsigned long * pdwStubPhase + ); + +__declspec(dllimport) +void +__stdcall +NdrAsyncServerCall( + PRPC_MESSAGE pRpcMsg + ); + +__declspec(dllimport) +long +__stdcall +NdrStubCall2( + struct IRpcStubBuffer * pThis, + struct IRpcChannelBuffer * pChannel, + PRPC_MESSAGE pRpcMsg, + unsigned long * pdwStubPhase + ); + +__declspec(dllimport) +void +__stdcall +NdrServerCall2( + PRPC_MESSAGE pRpcMsg + ); + +__declspec(dllimport) +long +__stdcall +NdrStubCall ( + struct IRpcStubBuffer * pThis, + struct IRpcChannelBuffer * pChannel, + PRPC_MESSAGE pRpcMsg, + unsigned long * pdwStubPhase + ); + +__declspec(dllimport) +void +__stdcall +NdrServerCall( + PRPC_MESSAGE pRpcMsg + ); + +__declspec(dllimport) +int +__stdcall +NdrServerUnmarshall( + struct IRpcChannelBuffer * pChannel, + PRPC_MESSAGE pRpcMsg, + PMIDL_STUB_MESSAGE pStubMsg, + PMIDL_STUB_DESC pStubDescriptor, + PFORMAT_STRING pFormat, + void * pParamList + ); + +__declspec(dllimport) +void +__stdcall +NdrServerMarshall( + struct IRpcStubBuffer * pThis, + struct IRpcChannelBuffer * pChannel, + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat + ); + + + +__declspec(dllimport) +RPC_STATUS +__stdcall +NdrMapCommAndFaultStatus( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned long * pCommStatus, + unsigned long * pFaultStatus, + RPC_STATUS Status + ); + + + +__declspec(dllimport) +int +__stdcall +NdrSH_UPDecision( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * pPtrInMem, + RPC_BUFPTR pBuffer + ); + +__declspec(dllimport) +int +__stdcall +NdrSH_TLUPDecision( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * pPtrInMem + ); + +__declspec(dllimport) +int +__stdcall +NdrSH_TLUPDecisionBuffer( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * pPtrInMem + ); + +__declspec(dllimport) +int +__stdcall +NdrSH_IfAlloc( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * pPtrInMem, + unsigned long Count + ); + +__declspec(dllimport) +int +__stdcall +NdrSH_IfAllocRef( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * pPtrInMem, + unsigned long Count + ); + +__declspec(dllimport) +int +__stdcall +NdrSH_IfAllocSet( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * pPtrInMem, + unsigned long Count + ); + +__declspec(dllimport) +RPC_BUFPTR +__stdcall +NdrSH_IfCopy( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * pPtrInMem, + unsigned long Count + ); + +__declspec(dllimport) +RPC_BUFPTR +__stdcall +NdrSH_IfAllocCopy( + PMIDL_STUB_MESSAGE pStubMsg, + unsigned char * * pPtrInMem, + unsigned long Count + ); + +__declspec(dllimport) +unsigned long +__stdcall +NdrSH_Copy( + unsigned char * pStubMsg, + unsigned char * pPtrInMem, + unsigned long Count + ); + +__declspec(dllimport) +void +__stdcall +NdrSH_IfFree( + PMIDL_STUB_MESSAGE pMessage, + unsigned char * pPtr ); + + +__declspec(dllimport) +RPC_BUFPTR +__stdcall +NdrSH_StringMarshall( + PMIDL_STUB_MESSAGE pMessage, + unsigned char * pMemory, + unsigned long Count, + int Size ); + +__declspec(dllimport) +RPC_BUFPTR +__stdcall +NdrSH_StringUnMarshall( + PMIDL_STUB_MESSAGE pMessage, + unsigned char * * pMemory, + int Size ); + + + + + +typedef void * RPC_SS_THREAD_HANDLE; + +typedef void * __stdcall +RPC_CLIENT_ALLOC ( + size_t Size + ); + +typedef void __stdcall +RPC_CLIENT_FREE ( + void * Ptr + ); + + + + + +__declspec(dllimport) +void * +__stdcall +RpcSsAllocate ( + size_t Size + ); + +__declspec(dllimport) +void +__stdcall +RpcSsDisableAllocate ( + void + ); + +__declspec(dllimport) +void +__stdcall +RpcSsEnableAllocate ( + void + ); + +__declspec(dllimport) +void +__stdcall +RpcSsFree ( + void * NodeToFree + ); + +__declspec(dllimport) +RPC_SS_THREAD_HANDLE +__stdcall +RpcSsGetThreadHandle ( + void + ); + +__declspec(dllimport) +void +__stdcall +RpcSsSetClientAllocFree ( + RPC_CLIENT_ALLOC * ClientAlloc, + RPC_CLIENT_FREE * ClientFree + ); + +__declspec(dllimport) +void +__stdcall +RpcSsSetThreadHandle ( + RPC_SS_THREAD_HANDLE Id + ); + +__declspec(dllimport) +void +__stdcall +RpcSsSwapClientAllocFree ( + RPC_CLIENT_ALLOC * ClientAlloc, + RPC_CLIENT_FREE * ClientFree, + RPC_CLIENT_ALLOC * * OldClientAlloc, + RPC_CLIENT_FREE * * OldClientFree + ); + + + + + +__declspec(dllimport) +void * +__stdcall +RpcSmAllocate ( + size_t Size, + RPC_STATUS * pStatus + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcSmClientFree ( + void * pNodeToFree + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcSmDestroyClientContext ( + void * * ContextHandle + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcSmDisableAllocate ( + void + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcSmEnableAllocate ( + void + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcSmFree ( + void * NodeToFree + ); + +__declspec(dllimport) +RPC_SS_THREAD_HANDLE +__stdcall +RpcSmGetThreadHandle ( + RPC_STATUS * pStatus + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcSmSetClientAllocFree ( + RPC_CLIENT_ALLOC * ClientAlloc, + RPC_CLIENT_FREE * ClientFree + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcSmSetThreadHandle ( + RPC_SS_THREAD_HANDLE Id + ); + +__declspec(dllimport) +RPC_STATUS +__stdcall +RpcSmSwapClientAllocFree ( + RPC_CLIENT_ALLOC * ClientAlloc, + RPC_CLIENT_FREE * ClientFree, + RPC_CLIENT_ALLOC * * OldClientAlloc, + RPC_CLIENT_FREE * * OldClientFree + ); + + + + + +__declspec(dllimport) +void +__stdcall +NdrRpcSsEnableAllocate( + PMIDL_STUB_MESSAGE pMessage ); + +__declspec(dllimport) +void +__stdcall +NdrRpcSsDisableAllocate( + PMIDL_STUB_MESSAGE pMessage ); + +__declspec(dllimport) +void +__stdcall +NdrRpcSmSetClientToOsf( + PMIDL_STUB_MESSAGE pMessage ); + +__declspec(dllimport) +void * +__stdcall +NdrRpcSmClientAllocate ( + size_t Size + ); + +__declspec(dllimport) +void +__stdcall +NdrRpcSmClientFree ( + void * NodeToFree + ); + +__declspec(dllimport) +void * +__stdcall +NdrRpcSsDefaultAllocate ( + size_t Size + ); + +__declspec(dllimport) +void +__stdcall +NdrRpcSsDefaultFree ( + void * NodeToFree + ); + + + + + + + + + +__declspec(dllimport) +PFULL_PTR_XLAT_TABLES +__stdcall +NdrFullPointerXlatInit( + unsigned long NumberOfPointers, + XLAT_SIDE XlatSide + ); + +__declspec(dllimport) +void +__stdcall +NdrFullPointerXlatFree( + PFULL_PTR_XLAT_TABLES pXlatTables + ); + +__declspec(dllimport) +int +__stdcall +NdrFullPointerQueryPointer( + PFULL_PTR_XLAT_TABLES pXlatTables, + void * pPointer, + unsigned char QueryType, + unsigned long * pRefId + ); + +__declspec(dllimport) +int +__stdcall +NdrFullPointerQueryRefId( + PFULL_PTR_XLAT_TABLES pXlatTables, + unsigned long RefId, + unsigned char QueryType, + void * * ppPointer + ); + +__declspec(dllimport) +void +__stdcall +NdrFullPointerInsertRefId( + PFULL_PTR_XLAT_TABLES pXlatTables, + unsigned long RefId, + void * pPointer + ); + +__declspec(dllimport) +int +__stdcall +NdrFullPointerFree( + PFULL_PTR_XLAT_TABLES pXlatTables, + void * Pointer + ); + +__declspec(dllimport) +void * +__stdcall +NdrAllocate( + PMIDL_STUB_MESSAGE pStubMsg, + size_t Len + ); + +__declspec(dllimport) +void +__stdcall +NdrClearOutParameters( + PMIDL_STUB_MESSAGE pStubMsg, + PFORMAT_STRING pFormat, + void * ArgAddr + ); + + + + + + +__declspec(dllimport) +void * +__stdcall +NdrOleAllocate ( + size_t Size + ); + +__declspec(dllimport) +void +__stdcall +NdrOleFree ( + void * NodeToFree + ); + + + + + +#line 3037 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + +#line 3049 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + +#line 3056 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + +#line 3068 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + +#line 3070 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + +#line 14 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#pragma pack(8) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#line 19 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 74 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + +#line 76 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 191 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + +#line 202 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + +#line 205 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" +#line 206 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + + + + + + + + + + + + +#line 228 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + +#line 231 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + + + +#line 244 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" +#line 245 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + +#line 254 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" +#line 255 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 285 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + +#line 291 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + +typedef enum tagREGCLS +{ + REGCLS_SINGLEUSE = 0, + REGCLS_MULTIPLEUSE = 1, + + REGCLS_MULTI_SEPARATE = 2, + + REGCLS_SUSPENDED = 4, + + REGCLS_SURROGATE = 8 + + +} REGCLS; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 340 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct IRpcStubBuffer IRpcStubBuffer; +typedef struct IRpcChannelBuffer IRpcChannelBuffer; + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + + + + + + + + +void * __stdcall MIDL_user_allocate(size_t); +void __stdcall MIDL_user_free( void * ); + + + + + + + + + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_wtypes_0000_v0_0_s_ifspec; + + + + + + + + + + + + +typedef struct tagRemHGLOBAL + { + long fNullHGlobal; + unsigned long cbData; + byte data[ 1 ]; + } RemHGLOBAL; + +typedef struct tagRemHMETAFILEPICT + { + long mm; + long xExt; + long yExt; + unsigned long cbData; + byte data[ 1 ]; + } RemHMETAFILEPICT; + +typedef struct tagRemHENHMETAFILE + { + unsigned long cbData; + byte data[ 1 ]; + } RemHENHMETAFILE; + +typedef struct tagRemHBITMAP + { + unsigned long cbData; + byte data[ 1 ]; + } RemHBITMAP; + +typedef struct tagRemHPALETTE + { + unsigned long cbData; + byte data[ 1 ]; + } RemHPALETTE; + +typedef struct tagRemBRUSH + { + unsigned long cbData; + byte data[ 1 ]; + } RemHBRUSH; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 329 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + +typedef WCHAR OLECHAR; + +typedef OLECHAR *LPOLESTR; + +typedef const OLECHAR *LPCOLESTR; + + + + + + + + + +#line 345 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + + + + + + + + + + + + + + + + + + + + + + +typedef unsigned char UCHAR; + +typedef short SHORT; + +typedef unsigned short USHORT; + +typedef DWORD ULONG; + +typedef double DOUBLE; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 409 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _COAUTHIDENTITY + { + USHORT *User; + ULONG UserLength; + USHORT *Domain; + ULONG DomainLength; + USHORT *Password; + ULONG PasswordLength; + ULONG Flags; + } COAUTHIDENTITY; + +typedef struct _COAUTHINFO + { + DWORD dwAuthnSvc; + DWORD dwAuthzSvc; + LPWSTR pwszServerPrincName; + DWORD dwAuthnLevel; + DWORD dwImpersonationLevel; + COAUTHIDENTITY *pAuthIdentityData; + DWORD dwCapabilities; + } COAUTHINFO; + +typedef LONG SCODE; + + + + + + +typedef SCODE *PSCODE; + + + + + + + + + + + + + + +typedef GUID *LPGUID; + +#line 536 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + + + + + + + + + + +typedef GUID IID; + +typedef IID *LPIID; + + + +typedef GUID CLSID; + +typedef CLSID *LPCLSID; + + + +typedef GUID FMTID; + +typedef FMTID *LPFMTID; + + + + + + + + + + + + +#line 576 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + + + + + + + + + + + + + + + +#line 594 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + +#line 598 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + +#line 602 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + +#line 606 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + +#line 610 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +#line 611 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +#line 612 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +typedef +enum tagMEMCTX + { MEMCTX_TASK = 1, + MEMCTX_SHARED = 2, + MEMCTX_MACSYSTEM = 3, + MEMCTX_UNKNOWN = -1, + MEMCTX_SAME = -2 + } MEMCTX; + + + + + +#line 626 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + +#line 630 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +typedef +enum tagCLSCTX + { CLSCTX_INPROC_SERVER = 0x1, + CLSCTX_INPROC_HANDLER = 0x2, + CLSCTX_LOCAL_SERVER = 0x4, + CLSCTX_INPROC_SERVER16 = 0x8, + CLSCTX_REMOTE_SERVER = 0x10, + CLSCTX_INPROC_HANDLER16 = 0x20, + CLSCTX_INPROC_SERVERX86 = 0x40, + CLSCTX_INPROC_HANDLERX86 = 0x80, + CLSCTX_ESERVER_HANDLER = 0x100 + } CLSCTX; + +typedef +enum tagMSHLFLAGS + { MSHLFLAGS_NORMAL = 0, + MSHLFLAGS_TABLESTRONG = 1, + MSHLFLAGS_TABLEWEAK = 2, + MSHLFLAGS_NOPING = 4 + } MSHLFLAGS; + +typedef +enum tagMSHCTX + { MSHCTX_LOCAL = 0, + MSHCTX_NOSHAREDMEM = 1, + MSHCTX_DIFFERENTMACHINE = 2, + MSHCTX_INPROC = 3 + } MSHCTX; + +typedef +enum tagDVASPECT + { DVASPECT_CONTENT = 1, + DVASPECT_THUMBNAIL = 2, + DVASPECT_ICON = 4, + DVASPECT_DOCPRINT = 8 + } DVASPECT; + +typedef +enum tagSTGC + { STGC_DEFAULT = 0, + STGC_OVERWRITE = 1, + STGC_ONLYIFCURRENT = 2, + STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4, + STGC_CONSOLIDATE = 8 + } STGC; + +typedef +enum tagSTGMOVE + { STGMOVE_MOVE = 0, + STGMOVE_COPY = 1, + STGMOVE_SHALLOWCOPY = 2 + } STGMOVE; + +typedef +enum tagSTATFLAG + { STATFLAG_DEFAULT = 0, + STATFLAG_NONAME = 1, + STATFLAG_NOOPEN = 2 + } STATFLAG; + +typedef void *HCONTEXT; + + + +typedef DWORD LCID; + +#line 697 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +typedef struct _BYTE_BLOB + { + unsigned long clSize; + byte abData[ 1 ]; + } BYTE_BLOB; + +typedef BYTE_BLOB *UP_BYTE_BLOB; + +typedef struct _WORD_BLOB + { + unsigned long clSize; + unsigned short asData[ 1 ]; + } WORD_BLOB; + +typedef WORD_BLOB *UP_WORD_BLOB; + +typedef struct _DWORD_BLOB + { + unsigned long clSize; + unsigned long alData[ 1 ]; + } DWORD_BLOB; + +typedef DWORD_BLOB *UP_DWORD_BLOB; + +typedef struct _FLAGGED_BYTE_BLOB + { + unsigned long fFlags; + unsigned long clSize; + byte abData[ 1 ]; + } FLAGGED_BYTE_BLOB; + +typedef FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB; + +typedef struct _FLAGGED_WORD_BLOB + { + unsigned long fFlags; + unsigned long clSize; + unsigned short asData[ 1 ]; + } FLAGGED_WORD_BLOB; + +typedef FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB; + +typedef struct _BYTE_SIZEDARR + { + unsigned long clSize; + byte *pData; + } BYTE_SIZEDARR; + +typedef struct _SHORT_SIZEDARR + { + unsigned long clSize; + unsigned short *pData; + } WORD_SIZEDARR; + +typedef struct _LONG_SIZEDARR + { + unsigned long clSize; + unsigned long *pData; + } DWORD_SIZEDARR; + +typedef struct _HYPER_SIZEDARR + { + unsigned long clSize; + __int64 *pData; + } HYPER_SIZEDARR; + + + + + +typedef struct _userCLIPFORMAT + { + long fContext; + union __MIDL_IWinTypes_0001 + { + DWORD dwValue; + wchar_t *pwszName; + } u; + } userCLIPFORMAT; + +typedef userCLIPFORMAT *wireCLIPFORMAT; + +typedef WORD CLIPFORMAT; + +typedef struct _GDI_NONREMOTE + { + long fContext; + union __MIDL_IWinTypes_0002 + { + long hInproc; + DWORD_BLOB *hRemote; + } u; + } GDI_NONREMOTE; + +typedef struct _userHGLOBAL + { + long fContext; + union __MIDL_IWinTypes_0003 + { + long hInproc; + FLAGGED_BYTE_BLOB *hRemote; + long hGlobal; + } u; + } userHGLOBAL; + +typedef userHGLOBAL *wireHGLOBAL; + +typedef struct _userHMETAFILE + { + long fContext; + union __MIDL_IWinTypes_0004 + { + long hInproc; + BYTE_BLOB *hRemote; + long hGlobal; + } u; + } userHMETAFILE; + +typedef struct _remoteMETAFILEPICT + { + long mm; + long xExt; + long yExt; + userHMETAFILE *hMF; + } remoteMETAFILEPICT; + +typedef struct _userHMETAFILEPICT + { + long fContext; + union __MIDL_IWinTypes_0005 + { + long hInproc; + remoteMETAFILEPICT *hRemote; + long hGlobal; + } u; + } userHMETAFILEPICT; + +typedef struct _userHENHMETAFILE + { + long fContext; + union __MIDL_IWinTypes_0006 + { + long hInproc; + BYTE_BLOB *hRemote; + long hGlobal; + } u; + } userHENHMETAFILE; + +typedef struct _userBITMAP + { + LONG bmType; + LONG bmWidth; + LONG bmHeight; + LONG bmWidthBytes; + WORD bmPlanes; + WORD bmBitsPixel; + ULONG cbSize; + byte pBuffer[ 1 ]; + } userBITMAP; + +typedef struct _userHBITMAP + { + long fContext; + union __MIDL_IWinTypes_0007 + { + long hInproc; + userBITMAP *hRemote; + long hGlobal; + } u; + } userHBITMAP; + +typedef struct tagrpcLOGPALETTE + { + WORD palVersion; + WORD palNumEntries; + PALETTEENTRY palPalEntry[ 1 ]; + } rpcLOGPALETTE; + +typedef struct _userHPALETTE + { + long fContext; + union __MIDL_IWinTypes_0008 + { + long hInproc; + rpcLOGPALETTE *hRemote; + long hGlobal; + } u; + } userHPALETTE; + +typedef struct _RemotableHandle + { + long fContext; + union __MIDL_IWinTypes_0009 + { + long hInproc; + long hRemote; + } u; + } RemotableHandle; + +typedef RemotableHandle *wireHWND; + +typedef RemotableHandle *wireHMENU; + +typedef RemotableHandle *wireHACCEL; + +typedef RemotableHandle *wireHBRUSH; + +typedef RemotableHandle *wireHFONT; + +typedef RemotableHandle *wireHDC; + +typedef RemotableHandle *wireHICON; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 956 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + + + + + + + + + + + + + + + + + + +typedef userHBITMAP *wireHBITMAP; + +typedef userHPALETTE *wireHPALETTE; + +typedef userHENHMETAFILE *wireHENHMETAFILE; + +typedef userHMETAFILE *wireHMETAFILE; + +typedef userHMETAFILEPICT *wireHMETAFILEPICT; + + + + + + + + + + + + + + +#line 1000 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +typedef void *HMETAFILEPICT; + + + +extern RPC_IF_HANDLE IWinTypes_v0_1_c_ifspec; +extern RPC_IF_HANDLE IWinTypes_v0_1_s_ifspec; +#line 1007 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + + + + + + + + +#pragma warning(disable:4201) +#line 1019 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +typedef double DATE; + + + + + + + + + + + + +#line 1033 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + +typedef union tagCY { + struct { + + + + + unsigned long Lo; + long Hi; +#line 1043 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + }; + LONGLONG int64; +} CY; +#line 1047 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +#line 1048 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +typedef CY *LPCY; + + + + + + + + + + + + + +#line 1063 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + +typedef struct tagDEC { + USHORT wReserved; + union { + struct { + BYTE scale; + BYTE sign; + }; + USHORT signscale; + }; + ULONG Hi32; + union { + struct { + + + + + ULONG Lo32; + ULONG Mid32; +#line 1083 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + }; + ULONGLONG Lo64; + }; +} DECIMAL; + + + +#line 1091 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +typedef DECIMAL *LPDECIMAL; + + +#pragma warning(default:4201) +#line 1096 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +typedef FLAGGED_WORD_BLOB *wireBSTR; + +typedef OLECHAR *BSTR; + +typedef BSTR *LPBSTR; + + +typedef short VARIANT_BOOL; + + + + + +#line 1110 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + +#line 1113 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +typedef boolean BOOLEAN; + + + + + + +typedef struct tagBSTRBLOB + { + ULONG cbSize; + BYTE *pData; + } BSTRBLOB; + +typedef struct tagBSTRBLOB *LPBSTRBLOB; + +#line 1129 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + + + + +typedef struct tagBLOB + { + ULONG cbSize; + BYTE *pBlobData; + } BLOB; + +typedef struct tagBLOB *LPBLOB; + +#line 1144 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +typedef struct tagCLIPDATA + { + ULONG cbSize; + long ulClipFmt; + BYTE *pClipData; + } CLIPDATA; + + + +typedef unsigned short VARTYPE; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +enum VARENUM + { VT_EMPTY = 0, + VT_NULL = 1, + VT_I2 = 2, + VT_I4 = 3, + VT_R4 = 4, + VT_R8 = 5, + VT_CY = 6, + VT_DATE = 7, + VT_BSTR = 8, + VT_DISPATCH = 9, + VT_ERROR = 10, + VT_BOOL = 11, + VT_VARIANT = 12, + VT_UNKNOWN = 13, + VT_DECIMAL = 14, + VT_I1 = 16, + VT_UI1 = 17, + VT_UI2 = 18, + VT_UI4 = 19, + VT_I8 = 20, + VT_UI8 = 21, + VT_INT = 22, + VT_UINT = 23, + VT_VOID = 24, + VT_HRESULT = 25, + VT_PTR = 26, + VT_SAFEARRAY = 27, + VT_CARRAY = 28, + VT_USERDEFINED = 29, + VT_LPSTR = 30, + VT_LPWSTR = 31, + VT_RECORD = 36, + VT_FILETIME = 64, + VT_BLOB = 65, + VT_STREAM = 66, + VT_STORAGE = 67, + VT_STREAMED_OBJECT = 68, + VT_STORED_OBJECT = 69, + VT_BLOB_OBJECT = 70, + VT_CF = 71, + VT_CLSID = 72, + VT_BSTR_BLOB = 0xfff, + VT_VECTOR = 0x1000, + VT_ARRAY = 0x2000, + VT_BYREF = 0x4000, + VT_RESERVED = 0x8000, + VT_ILLEGAL = 0xffff, + VT_ILLEGALMASKED = 0xfff, + VT_TYPEMASK = 0xfff + }; +typedef ULONG PROPID; + + + + + + + + + + + + + + + + + + + + + + + + +typedef GUID APPID; + +typedef struct tagCSPLATFORM + { + DWORD dwPlatformId; + DWORD dwVersionHi; + DWORD dwVersionLo; + DWORD dwProcessorArch; + } CSPLATFORM; + +typedef struct tagQUERYCONTEXT + { + DWORD dwContext; + CSPLATFORM Platform; + LCID Locale; + DWORD dwVersionHi; + DWORD dwVersionLo; + } QUERYCONTEXT; + +typedef +enum tagTYSPEC + { TYSPEC_CLSID = 0, + TYSPEC_FILEEXT = TYSPEC_CLSID + 1, + TYSPEC_MIMETYPE = TYSPEC_FILEEXT + 1, + TYSPEC_PROGID = TYSPEC_MIMETYPE + 1, + TYSPEC_IID = TYSPEC_PROGID + 1, + TYSPEC_TYPELIB = TYSPEC_IID + 1, + TYSPEC_FILENAME = TYSPEC_TYPELIB + 1, + TYSPEC_JAVACLASS = TYSPEC_FILENAME + 1, + TYSPEC_PACKAGENAME = TYSPEC_JAVACLASS + 1 + } TYSPEC; + +typedef struct __MIDL___MIDL_itf_wtypes_0001_0001 + { + DWORD tyspec; + union __MIDL___MIDL_itf_wtypes_0001_0003 + { + CLSID clsid; + IID iid; + GUID typelibID; + LPOLESTR pFileExt; + LPOLESTR pMimeType; + LPOLESTR pProgId; + LPOLESTR pFileName; + LPOLESTR pJavaClassName; + LPOLESTR pPackageName; + } tagged_union; + } uCLSSPEC; + +typedef struct _PUBLISHEDAPPINFO + { + LPOLESTR pwszFileExtension; + LPOLESTR pwszDisplayName; + LPOLESTR pwszPackagePath; + } PUBLISHEDAPPINFO; + +typedef +enum tagAPPINFOTYPE + { APPINFO_PUBLISHED = 1, + APPINFO_SHELLNEW = APPINFO_PUBLISHED + 1, + APPINFO_INSERTABLE = APPINFO_SHELLNEW + 1 + } APPINFOTYPE; + + + + + + + + + + + + + +typedef +enum _CLASSPATHTYPE + { ExeNamePath = 0, + DllNamePath = ExeNamePath + 1, + TlbNamePath = DllNamePath + 1, + CabFilePath = TlbNamePath + 1, + InfFilePath = CabFilePath + 1, + DrwFilePath = InfFilePath + 1, + SetupNamePath = DrwFilePath + 1 + } CLASSPATHTYPE; + +typedef struct tagAPPDETAIL + { + GUID AppID; + DWORD cClasses; + CLSID *prgClsIdList; + DWORD cTypeLibIds; + CLSID *prgTypeLibIdList; + DWORD cServers; + LPOLESTR *prgServerNames; + } APPDETAIL; + +typedef struct tagPACKAGEDETAIL + { + CLASSPATHTYPE PathType; + LPOLESTR pszPath; + LPOLESTR pszIconPath; + LPOLESTR pszSetupCommand; + DWORD dwActFlags; + LPOLESTR pszVendor; + LPOLESTR pszPackageName; + LPOLESTR pszProductName; + DWORD dwContext; + CSPLATFORM Platform; + LCID Locale; + DWORD dwVersionHi; + DWORD dwVersionLo; + ULONGLONG Usn; + DWORD cApps; + APPDETAIL *pAppDetail; + } PACKAGEDETAIL; + +typedef struct tagPACKAGEINFO + { + LPOLESTR pszClassIconPath; + CLSID *pTreatAsClsid; + DWORD cPackages; + PACKAGEDETAIL *pPackageDetail; + } PACKAGEINFO; + + + +extern RPC_IF_HANDLE __MIDL_itf_wtypes_0001_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_wtypes_0001_v0_0_s_ifspec; + + + + + + + + + +#line 1426 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +#line 371 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + + + + + + + + + +typedef struct IUnknown IUnknown; +#line 44 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + +typedef struct IClassFactory IClassFactory; +#line 50 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\wtypes.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 54 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + +void * __stdcall MIDL_user_allocate(size_t); +void __stdcall MIDL_user_free( void * ); + + + + + + + + + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_unknwn_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_unknwn_0000_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IUnknown *LPUNKNOWN; + + + + + + +extern const IID IID_IUnknown; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 133 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + typedef struct IUnknownVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IUnknown * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IUnknown * This); + + ULONG ( __stdcall *Release )( + IUnknown * This); + + + } IUnknownVtbl; + + struct IUnknown + { + struct IUnknownVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + +#line 175 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + +HRESULT __stdcall IUnknown_QueryInterface_Proxy( + IUnknown * This, + const IID * const riid, + void * *ppvObject); + + +void __stdcall IUnknown_QueryInterface_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +ULONG __stdcall IUnknown_AddRef_Proxy( + IUnknown * This); + + +void __stdcall IUnknown_AddRef_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +ULONG __stdcall IUnknown_Release_Proxy( + IUnknown * This); + + +void __stdcall IUnknown_Release_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 213 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + + + + + + + + + + +typedef IClassFactory *LPCLASSFACTORY; + + +extern const IID IID_IClassFactory; + + + + + + + + + + + + + + + + + +#line 248 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + typedef struct IClassFactoryVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IClassFactory * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IClassFactory * This); + + ULONG ( __stdcall *Release )( + IClassFactory * This); + + HRESULT ( __stdcall *CreateInstance )( + IClassFactory * This, + IUnknown *pUnkOuter, + const IID * const riid, + void * *ppvObject); + + HRESULT ( __stdcall *LockServer )( + IClassFactory * This, + BOOL fLock); + + + } IClassFactoryVtbl; + + struct IClassFactory + { + struct IClassFactoryVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 307 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + HRESULT __stdcall IClassFactory_RemoteCreateInstance_Proxy( + IClassFactory * This, + const IID * const riid, + IUnknown * *ppvObject); + + +void __stdcall IClassFactory_RemoteCreateInstance_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IClassFactory_RemoteLockServer_Proxy( + IClassFactory * This, + BOOL fLock); + + +void __stdcall IClassFactory_RemoteLockServer_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 337 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + + HRESULT __stdcall IClassFactory_CreateInstance_Proxy( + IClassFactory * This, + IUnknown *pUnkOuter, + const IID * const riid, + void * *ppvObject); + + + HRESULT __stdcall IClassFactory_CreateInstance_Stub( + IClassFactory * This, + const IID * const riid, + IUnknown * *ppvObject); + + HRESULT __stdcall IClassFactory_LockServer_Proxy( + IClassFactory * This, + BOOL fLock); + + + HRESULT __stdcall IClassFactory_LockServer_Stub( + IClassFactory * This, + BOOL fLock); + + + + + + + + + +#line 371 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" +#line 372 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + +typedef struct IMarshal IMarshal; +#line 44 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IMalloc IMalloc; +#line 50 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IMallocSpy IMallocSpy; +#line 56 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IStdMarshalInfo IStdMarshalInfo; +#line 62 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IExternalConnection IExternalConnection; +#line 68 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IMultiQI IMultiQI; +#line 74 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IEnumUnknown IEnumUnknown; +#line 80 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IBindCtx IBindCtx; +#line 86 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IEnumMoniker IEnumMoniker; +#line 92 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IRunnableObject IRunnableObject; +#line 98 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IRunningObjectTable IRunningObjectTable; +#line 104 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IPersist IPersist; +#line 110 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IPersistStream IPersistStream; +#line 116 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IMoniker IMoniker; +#line 122 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IROTData IROTData; +#line 128 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IEnumString IEnumString; +#line 134 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct ISequentialStream ISequentialStream; +#line 140 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IStream IStream; +#line 146 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IEnumSTATSTG IEnumSTATSTG; +#line 152 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IStorage IStorage; +#line 158 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IPersistFile IPersistFile; +#line 164 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IPersistStorage IPersistStorage; +#line 170 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct ILockBytes ILockBytes; +#line 176 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IEnumFORMATETC IEnumFORMATETC; +#line 182 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IEnumSTATDATA IEnumSTATDATA; +#line 188 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IRootStorage IRootStorage; +#line 194 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IAdviseSink IAdviseSink; +#line 200 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IAdviseSink2 IAdviseSink2; +#line 206 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IDataObject IDataObject; +#line 212 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IDataAdviseHolder IDataAdviseHolder; +#line 218 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IMessageFilter IMessageFilter; +#line 224 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IRpcChannelBuffer IRpcChannelBuffer; +#line 230 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IRpcChannelBuffer2 IRpcChannelBuffer2; +#line 236 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IRpcChannelBuffer3 IRpcChannelBuffer3; +#line 242 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IRpcProxyBuffer IRpcProxyBuffer; +#line 248 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IRpcStubBuffer IRpcStubBuffer; +#line 254 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IPSFactoryBuffer IPSFactoryBuffer; +#line 260 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IChannelHook IChannelHook; +#line 266 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IPropertyStorage IPropertyStorage; +#line 272 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IPropertySetStorage IPropertySetStorage; +#line 278 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IEnumSTATPROPSTG IEnumSTATPROPSTG; +#line 284 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG; +#line 290 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IClientSecurity IClientSecurity; +#line 296 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IServerSecurity IServerSecurity; +#line 302 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IClassActivator IClassActivator; +#line 308 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IRpcOptions IRpcOptions; +#line 314 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IComBinding IComBinding; +#line 320 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IFillLockBytes IFillLockBytes; +#line 326 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IProgressNotify IProgressNotify; +#line 332 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct ILayoutStorage ILayoutStorage; +#line 338 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct ISurrogate ISurrogate; +#line 344 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IGlobalInterfaceTable IGlobalInterfaceTable; +#line 350 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IDirectWriterLock IDirectWriterLock; +#line 356 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct ISynchronize ISynchronize; +#line 362 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct ISynchronizeMutex ISynchronizeMutex; +#line 368 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IAsyncSetup IAsyncSetup; +#line 374 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct ICancelMethodCalls ICancelMethodCalls; +#line 380 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IAsyncManager IAsyncManager; +#line 386 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IWaitMultiple IWaitMultiple; +#line 392 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct ISynchronizeEvent ISynchronizeEvent; +#line 398 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IUrlMon IUrlMon; +#line 404 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IClassAccess IClassAccess; +#line 410 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IClassRefresh IClassRefresh; +#line 416 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IEnumPackage IEnumPackage; +#line 422 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IEnumClass IEnumClass; +#line 428 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + +typedef struct IClassAdmin IClassAdmin; +#line 434 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 438 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + +void * __stdcall MIDL_user_allocate(size_t); +void __stdcall MIDL_user_free( void * ); + + + + + + + + + + + + + + + + +#pragma warning(disable:4201) +#line 459 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + +typedef +enum _SRVINFO + { SRVINFO_F_COSERVERINFO = 0, + SRVINFO_F_COSERVERINFO2 = 1 + } SRVINFO; + +typedef struct _COSERVERINFO + { + DWORD dwReserved1; + LPWSTR pwszName; + COAUTHINFO *pAuthInfo; + DWORD dwReserved2; + } COSERVERINFO; + +typedef struct _COSERVERINFO2 + { + DWORD dwFlags; + LPWSTR pwszName; + COAUTHINFO *pAuthInfo; + IUnknown * *ppCall; + LPWSTR pwszCodeURL; + DWORD dwFileVersionMS; + DWORD dwFileVersionLS; + LPWSTR pwszContentType; + } COSERVERINFO2; + + + +extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_objidl_0000_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IMarshal *LPMARSHAL; + + +extern const IID IID_IMarshal; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 561 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IMarshalVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IMarshal * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IMarshal * This); + + ULONG ( __stdcall *Release )( + IMarshal * This); + + HRESULT ( __stdcall *GetUnmarshalClass )( + IMarshal * This, + const IID * const riid, + void *pv, + DWORD dwDestContext, + void *pvDestContext, + DWORD mshlflags, + CLSID *pCid); + + HRESULT ( __stdcall *GetMarshalSizeMax )( + IMarshal * This, + const IID * const riid, + void *pv, + DWORD dwDestContext, + void *pvDestContext, + DWORD mshlflags, + DWORD *pSize); + + HRESULT ( __stdcall *MarshalInterface )( + IMarshal * This, + IStream *pStm, + const IID * const riid, + void *pv, + DWORD dwDestContext, + void *pvDestContext, + DWORD mshlflags); + + HRESULT ( __stdcall *UnmarshalInterface )( + IMarshal * This, + IStream *pStm, + const IID * const riid, + void * *ppv); + + HRESULT ( __stdcall *ReleaseMarshalData )( + IMarshal * This, + IStream *pStm); + + HRESULT ( __stdcall *DisconnectObject )( + IMarshal * This, + DWORD dwReserved); + + + } IMarshalVtbl; + + struct IMarshal + { + struct IMarshalVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 663 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IMarshal_GetUnmarshalClass_Proxy( + IMarshal * This, + const IID * const riid, + void *pv, + DWORD dwDestContext, + void *pvDestContext, + DWORD mshlflags, + CLSID *pCid); + + +void __stdcall IMarshal_GetUnmarshalClass_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMarshal_GetMarshalSizeMax_Proxy( + IMarshal * This, + const IID * const riid, + void *pv, + DWORD dwDestContext, + void *pvDestContext, + DWORD mshlflags, + DWORD *pSize); + + +void __stdcall IMarshal_GetMarshalSizeMax_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMarshal_MarshalInterface_Proxy( + IMarshal * This, + IStream *pStm, + const IID * const riid, + void *pv, + DWORD dwDestContext, + void *pvDestContext, + DWORD mshlflags); + + +void __stdcall IMarshal_MarshalInterface_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMarshal_UnmarshalInterface_Proxy( + IMarshal * This, + IStream *pStm, + const IID * const riid, + void * *ppv); + + +void __stdcall IMarshal_UnmarshalInterface_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMarshal_ReleaseMarshalData_Proxy( + IMarshal * This, + IStream *pStm); + + +void __stdcall IMarshal_ReleaseMarshalData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMarshal_DisconnectObject_Proxy( + IMarshal * This, + DWORD dwReserved); + + +void __stdcall IMarshal_DisconnectObject_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 757 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IMalloc *LPMALLOC; + + +extern const IID IID_IMalloc; + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 802 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IMallocVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IMalloc * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IMalloc * This); + + ULONG ( __stdcall *Release )( + IMalloc * This); + + void *( __stdcall *Alloc )( + IMalloc * This, + ULONG cb); + + void *( __stdcall *Realloc )( + IMalloc * This, + void *pv, + ULONG cb); + + void ( __stdcall *Free )( + IMalloc * This, + void *pv); + + ULONG ( __stdcall *GetSize )( + IMalloc * This, + void *pv); + + int ( __stdcall *DidAlloc )( + IMalloc * This, + void *pv); + + void ( __stdcall *HeapMinimize )( + IMalloc * This); + + + } IMallocVtbl; + + struct IMalloc + { + struct IMallocVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 887 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +void *__stdcall IMalloc_Alloc_Proxy( + IMalloc * This, + ULONG cb); + + +void __stdcall IMalloc_Alloc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void *__stdcall IMalloc_Realloc_Proxy( + IMalloc * This, + void *pv, + ULONG cb); + + +void __stdcall IMalloc_Realloc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void __stdcall IMalloc_Free_Proxy( + IMalloc * This, + void *pv); + + +void __stdcall IMalloc_Free_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +ULONG __stdcall IMalloc_GetSize_Proxy( + IMalloc * This, + void *pv); + + +void __stdcall IMalloc_GetSize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +int __stdcall IMalloc_DidAlloc_Proxy( + IMalloc * This, + void *pv); + + +void __stdcall IMalloc_DidAlloc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void __stdcall IMalloc_HeapMinimize_Proxy( + IMalloc * This); + + +void __stdcall IMalloc_HeapMinimize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 964 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IMallocSpy *LPMALLOCSPY; + + +extern const IID IID_IMallocSpy; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1035 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IMallocSpyVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IMallocSpy * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IMallocSpy * This); + + ULONG ( __stdcall *Release )( + IMallocSpy * This); + + ULONG ( __stdcall *PreAlloc )( + IMallocSpy * This, + ULONG cbRequest); + + void *( __stdcall *PostAlloc )( + IMallocSpy * This, + void *pActual); + + void *( __stdcall *PreFree )( + IMallocSpy * This, + void *pRequest, + BOOL fSpyed); + + void ( __stdcall *PostFree )( + IMallocSpy * This, + BOOL fSpyed); + + ULONG ( __stdcall *PreRealloc )( + IMallocSpy * This, + void *pRequest, + ULONG cbRequest, + void * *ppNewRequest, + BOOL fSpyed); + + void *( __stdcall *PostRealloc )( + IMallocSpy * This, + void *pActual, + BOOL fSpyed); + + void *( __stdcall *PreGetSize )( + IMallocSpy * This, + void *pRequest, + BOOL fSpyed); + + ULONG ( __stdcall *PostGetSize )( + IMallocSpy * This, + ULONG cbActual, + BOOL fSpyed); + + void *( __stdcall *PreDidAlloc )( + IMallocSpy * This, + void *pRequest, + BOOL fSpyed); + + int ( __stdcall *PostDidAlloc )( + IMallocSpy * This, + void *pRequest, + BOOL fSpyed, + int fActual); + + void ( __stdcall *PreHeapMinimize )( + IMallocSpy * This); + + void ( __stdcall *PostHeapMinimize )( + IMallocSpy * This); + + + } IMallocSpyVtbl; + + struct IMallocSpy + { + struct IMallocSpyVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1170 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +ULONG __stdcall IMallocSpy_PreAlloc_Proxy( + IMallocSpy * This, + ULONG cbRequest); + + +void __stdcall IMallocSpy_PreAlloc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void *__stdcall IMallocSpy_PostAlloc_Proxy( + IMallocSpy * This, + void *pActual); + + +void __stdcall IMallocSpy_PostAlloc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void *__stdcall IMallocSpy_PreFree_Proxy( + IMallocSpy * This, + void *pRequest, + BOOL fSpyed); + + +void __stdcall IMallocSpy_PreFree_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void __stdcall IMallocSpy_PostFree_Proxy( + IMallocSpy * This, + BOOL fSpyed); + + +void __stdcall IMallocSpy_PostFree_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +ULONG __stdcall IMallocSpy_PreRealloc_Proxy( + IMallocSpy * This, + void *pRequest, + ULONG cbRequest, + void * *ppNewRequest, + BOOL fSpyed); + + +void __stdcall IMallocSpy_PreRealloc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void *__stdcall IMallocSpy_PostRealloc_Proxy( + IMallocSpy * This, + void *pActual, + BOOL fSpyed); + + +void __stdcall IMallocSpy_PostRealloc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void *__stdcall IMallocSpy_PreGetSize_Proxy( + IMallocSpy * This, + void *pRequest, + BOOL fSpyed); + + +void __stdcall IMallocSpy_PreGetSize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +ULONG __stdcall IMallocSpy_PostGetSize_Proxy( + IMallocSpy * This, + ULONG cbActual, + BOOL fSpyed); + + +void __stdcall IMallocSpy_PostGetSize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void *__stdcall IMallocSpy_PreDidAlloc_Proxy( + IMallocSpy * This, + void *pRequest, + BOOL fSpyed); + + +void __stdcall IMallocSpy_PreDidAlloc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +int __stdcall IMallocSpy_PostDidAlloc_Proxy( + IMallocSpy * This, + void *pRequest, + BOOL fSpyed, + int fActual); + + +void __stdcall IMallocSpy_PostDidAlloc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void __stdcall IMallocSpy_PreHeapMinimize_Proxy( + IMallocSpy * This); + + +void __stdcall IMallocSpy_PreHeapMinimize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void __stdcall IMallocSpy_PostHeapMinimize_Proxy( + IMallocSpy * This); + + +void __stdcall IMallocSpy_PostHeapMinimize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1327 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IStdMarshalInfo *LPSTDMARSHALINFO; + + +extern const IID IID_IStdMarshalInfo; + + + + + + + + + + + + + + +#line 1359 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IStdMarshalInfoVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IStdMarshalInfo * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IStdMarshalInfo * This); + + ULONG ( __stdcall *Release )( + IStdMarshalInfo * This); + + HRESULT ( __stdcall *GetClassForHandler )( + IStdMarshalInfo * This, + DWORD dwDestContext, + void *pvDestContext, + CLSID *pClsid); + + + } IStdMarshalInfoVtbl; + + struct IStdMarshalInfo + { + struct IStdMarshalInfoVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 1411 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IStdMarshalInfo_GetClassForHandler_Proxy( + IStdMarshalInfo * This, + DWORD dwDestContext, + void *pvDestContext, + CLSID *pClsid); + + +void __stdcall IStdMarshalInfo_GetClassForHandler_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1430 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IExternalConnection *LPEXTERNALCONNECTION; + +typedef +enum tagEXTCONN + { EXTCONN_STRONG = 0x1, + EXTCONN_WEAK = 0x2, + EXTCONN_CALLABLE = 0x4 + } EXTCONN; + + +extern const IID IID_IExternalConnection; + + + + + + + + + + + + + + + + + + +#line 1473 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IExternalConnectionVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IExternalConnection * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IExternalConnection * This); + + ULONG ( __stdcall *Release )( + IExternalConnection * This); + + DWORD ( __stdcall *AddConnection )( + IExternalConnection * This, + DWORD extconn, + DWORD reserved); + + DWORD ( __stdcall *ReleaseConnection )( + IExternalConnection * This, + DWORD extconn, + DWORD reserved, + BOOL fLastReleaseCloses); + + + } IExternalConnectionVtbl; + + struct IExternalConnection + { + struct IExternalConnectionVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1533 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +DWORD __stdcall IExternalConnection_AddConnection_Proxy( + IExternalConnection * This, + DWORD extconn, + DWORD reserved); + + +void __stdcall IExternalConnection_AddConnection_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +DWORD __stdcall IExternalConnection_ReleaseConnection_Proxy( + IExternalConnection * This, + DWORD extconn, + DWORD reserved, + BOOL fLastReleaseCloses); + + +void __stdcall IExternalConnection_ReleaseConnection_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1565 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IMultiQI *LPMULTIQI; + +typedef struct tagMULTI_QI + { + const IID *pIID; + IUnknown *pItf; + HRESULT hr; + } MULTI_QI; + + +extern const IID IID_IMultiQI; + + + + + + + + + + + + + +#line 1603 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IMultiQIVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IMultiQI * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IMultiQI * This); + + ULONG ( __stdcall *Release )( + IMultiQI * This); + + HRESULT ( __stdcall *QueryMultipleInterfaces )( + IMultiQI * This, + ULONG cMQIs, + MULTI_QI *pMQIs); + + + } IMultiQIVtbl; + + struct IMultiQI + { + struct IMultiQIVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 1654 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IMultiQI_QueryMultipleInterfaces_Proxy( + IMultiQI * This, + ULONG cMQIs, + MULTI_QI *pMQIs); + + +void __stdcall IMultiQI_QueryMultipleInterfaces_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1672 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IEnumUnknown *LPENUMUNKNOWN; + + +extern const IID IID_IEnumUnknown; + + + + + + + + + + + + + + + + + + + + + + +#line 1712 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IEnumUnknownVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumUnknown * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumUnknown * This); + + ULONG ( __stdcall *Release )( + IEnumUnknown * This); + + HRESULT ( __stdcall *Next )( + IEnumUnknown * This, + ULONG celt, + IUnknown * *rgelt, + ULONG *pceltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumUnknown * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumUnknown * This); + + HRESULT ( __stdcall *Clone )( + IEnumUnknown * This, + IEnumUnknown * *ppenum); + + + } IEnumUnknownVtbl; + + struct IEnumUnknown + { + struct IEnumUnknownVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1784 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IEnumUnknown_RemoteNext_Proxy( + IEnumUnknown * This, + ULONG celt, + IUnknown * *rgelt, + ULONG *pceltFetched); + + +void __stdcall IEnumUnknown_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumUnknown_Skip_Proxy( + IEnumUnknown * This, + ULONG celt); + + +void __stdcall IEnumUnknown_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumUnknown_Reset_Proxy( + IEnumUnknown * This); + + +void __stdcall IEnumUnknown_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumUnknown_Clone_Proxy( + IEnumUnknown * This, + IEnumUnknown * *ppenum); + + +void __stdcall IEnumUnknown_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1838 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IBindCtx *LPBC; + +typedef IBindCtx *LPBINDCTX; + +typedef struct tagBIND_OPTS + { + DWORD cbStruct; + DWORD grfFlags; + DWORD grfMode; + DWORD dwTickCountDeadline; + } BIND_OPTS; + +typedef struct tagBIND_OPTS *LPBIND_OPTS; + + + + + + + + +#line 1873 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +typedef struct tagBIND_OPTS2 + { + DWORD cbStruct; + DWORD grfFlags; + DWORD grfMode; + DWORD dwTickCountDeadline; + DWORD dwTrackFlags; + DWORD dwClassContext; + LCID locale; + COSERVERINFO *pServerInfo; + } BIND_OPTS2; + +typedef struct tagBIND_OPTS2 *LPBIND_OPTS2; + +#line 1888 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +typedef +enum tagBIND_FLAGS + { BIND_MAYBOTHERUSER = 1, + BIND_JUSTTESTEXISTENCE = 2 + } BIND_FLAGS; + + +extern const IID IID_IBindCtx; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1937 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IBindCtxVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IBindCtx * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IBindCtx * This); + + ULONG ( __stdcall *Release )( + IBindCtx * This); + + HRESULT ( __stdcall *RegisterObjectBound )( + IBindCtx * This, + IUnknown *punk); + + HRESULT ( __stdcall *RevokeObjectBound )( + IBindCtx * This, + IUnknown *punk); + + HRESULT ( __stdcall *ReleaseBoundObjects )( + IBindCtx * This); + + HRESULT ( __stdcall *SetBindOptions )( + IBindCtx * This, + BIND_OPTS *pbindopts); + + HRESULT ( __stdcall *GetBindOptions )( + IBindCtx * This, + BIND_OPTS *pbindopts); + + HRESULT ( __stdcall *GetRunningObjectTable )( + IBindCtx * This, + IRunningObjectTable * *pprot); + + HRESULT ( __stdcall *RegisterObjectParam )( + IBindCtx * This, + LPOLESTR pszKey, + IUnknown *punk); + + HRESULT ( __stdcall *GetObjectParam )( + IBindCtx * This, + LPOLESTR pszKey, + IUnknown * *ppunk); + + HRESULT ( __stdcall *EnumObjectParam )( + IBindCtx * This, + IEnumString * *ppenum); + + HRESULT ( __stdcall *RevokeObjectParam )( + IBindCtx * This, + LPOLESTR pszKey); + + + } IBindCtxVtbl; + + struct IBindCtx + { + struct IBindCtxVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2051 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IBindCtx_RegisterObjectBound_Proxy( + IBindCtx * This, + IUnknown *punk); + + +void __stdcall IBindCtx_RegisterObjectBound_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindCtx_RevokeObjectBound_Proxy( + IBindCtx * This, + IUnknown *punk); + + +void __stdcall IBindCtx_RevokeObjectBound_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindCtx_ReleaseBoundObjects_Proxy( + IBindCtx * This); + + +void __stdcall IBindCtx_ReleaseBoundObjects_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IBindCtx_RemoteSetBindOptions_Proxy( + IBindCtx * This, + BIND_OPTS2 *pbindopts); + + +void __stdcall IBindCtx_RemoteSetBindOptions_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IBindCtx_RemoteGetBindOptions_Proxy( + IBindCtx * This, + BIND_OPTS2 *pbindopts); + + +void __stdcall IBindCtx_RemoteGetBindOptions_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindCtx_GetRunningObjectTable_Proxy( + IBindCtx * This, + IRunningObjectTable * *pprot); + + +void __stdcall IBindCtx_GetRunningObjectTable_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindCtx_RegisterObjectParam_Proxy( + IBindCtx * This, + LPOLESTR pszKey, + IUnknown *punk); + + +void __stdcall IBindCtx_RegisterObjectParam_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindCtx_GetObjectParam_Proxy( + IBindCtx * This, + LPOLESTR pszKey, + IUnknown * *ppunk); + + +void __stdcall IBindCtx_GetObjectParam_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindCtx_EnumObjectParam_Proxy( + IBindCtx * This, + IEnumString * *ppenum); + + +void __stdcall IBindCtx_EnumObjectParam_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindCtx_RevokeObjectParam_Proxy( + IBindCtx * This, + LPOLESTR pszKey); + + +void __stdcall IBindCtx_RevokeObjectParam_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2177 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IEnumMoniker *LPENUMMONIKER; + + +extern const IID IID_IEnumMoniker; + + + + + + + + + + + + + + + + + + + + + + +#line 2217 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IEnumMonikerVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumMoniker * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumMoniker * This); + + ULONG ( __stdcall *Release )( + IEnumMoniker * This); + + HRESULT ( __stdcall *Next )( + IEnumMoniker * This, + ULONG celt, + IMoniker * *rgelt, + ULONG *pceltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumMoniker * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumMoniker * This); + + HRESULT ( __stdcall *Clone )( + IEnumMoniker * This, + IEnumMoniker * *ppenum); + + + } IEnumMonikerVtbl; + + struct IEnumMoniker + { + struct IEnumMonikerVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2289 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IEnumMoniker_RemoteNext_Proxy( + IEnumMoniker * This, + ULONG celt, + IMoniker * *rgelt, + ULONG *pceltFetched); + + +void __stdcall IEnumMoniker_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumMoniker_Skip_Proxy( + IEnumMoniker * This, + ULONG celt); + + +void __stdcall IEnumMoniker_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumMoniker_Reset_Proxy( + IEnumMoniker * This); + + +void __stdcall IEnumMoniker_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumMoniker_Clone_Proxy( + IEnumMoniker * This, + IEnumMoniker * *ppenum); + + +void __stdcall IEnumMoniker_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2343 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IRunnableObject *LPRUNNABLEOBJECT; + + +extern const IID IID_IRunnableObject; + + + + + + + + + + + + + + + + + + + + + + + + +#line 2385 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IRunnableObjectVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IRunnableObject * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IRunnableObject * This); + + ULONG ( __stdcall *Release )( + IRunnableObject * This); + + HRESULT ( __stdcall *GetRunningClass )( + IRunnableObject * This, + LPCLSID lpClsid); + + HRESULT ( __stdcall *Run )( + IRunnableObject * This, + LPBINDCTX pbc); + + BOOL ( __stdcall *IsRunning )( + IRunnableObject * This); + + HRESULT ( __stdcall *LockRunning )( + IRunnableObject * This, + BOOL fLock, + BOOL fLastUnlockCloses); + + HRESULT ( __stdcall *SetContainedObject )( + IRunnableObject * This, + BOOL fContained); + + + } IRunnableObjectVtbl; + + struct IRunnableObject + { + struct IRunnableObjectVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2463 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IRunnableObject_GetRunningClass_Proxy( + IRunnableObject * This, + LPCLSID lpClsid); + + +void __stdcall IRunnableObject_GetRunningClass_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRunnableObject_Run_Proxy( + IRunnableObject * This, + LPBINDCTX pbc); + + +void __stdcall IRunnableObject_Run_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IRunnableObject_RemoteIsRunning_Proxy( + IRunnableObject * This); + + +void __stdcall IRunnableObject_RemoteIsRunning_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRunnableObject_LockRunning_Proxy( + IRunnableObject * This, + BOOL fLock, + BOOL fLastUnlockCloses); + + +void __stdcall IRunnableObject_LockRunning_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRunnableObject_SetContainedObject_Proxy( + IRunnableObject * This, + BOOL fContained); + + +void __stdcall IRunnableObject_SetContainedObject_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2528 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IRunningObjectTable *LPRUNNINGOBJECTTABLE; + + +extern const IID IID_IRunningObjectTable; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2582 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IRunningObjectTableVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IRunningObjectTable * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IRunningObjectTable * This); + + ULONG ( __stdcall *Release )( + IRunningObjectTable * This); + + HRESULT ( __stdcall *Register )( + IRunningObjectTable * This, + DWORD grfFlags, + IUnknown *punkObject, + IMoniker *pmkObjectName, + DWORD *pdwRegister); + + HRESULT ( __stdcall *Revoke )( + IRunningObjectTable * This, + DWORD dwRegister); + + HRESULT ( __stdcall *IsRunning )( + IRunningObjectTable * This, + IMoniker *pmkObjectName); + + HRESULT ( __stdcall *GetObjectA )( + IRunningObjectTable * This, + IMoniker *pmkObjectName, + IUnknown * *ppunkObject); + + HRESULT ( __stdcall *NoteChangeTime )( + IRunningObjectTable * This, + DWORD dwRegister, + FILETIME *pfiletime); + + HRESULT ( __stdcall *GetTimeOfLastChange )( + IRunningObjectTable * This, + IMoniker *pmkObjectName, + FILETIME *pfiletime); + + HRESULT ( __stdcall *EnumRunning )( + IRunningObjectTable * This, + IEnumMoniker * *ppenumMoniker); + + + } IRunningObjectTableVtbl; + + struct IRunningObjectTable + { + struct IRunningObjectTableVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2680 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IRunningObjectTable_Register_Proxy( + IRunningObjectTable * This, + DWORD grfFlags, + IUnknown *punkObject, + IMoniker *pmkObjectName, + DWORD *pdwRegister); + + +void __stdcall IRunningObjectTable_Register_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRunningObjectTable_Revoke_Proxy( + IRunningObjectTable * This, + DWORD dwRegister); + + +void __stdcall IRunningObjectTable_Revoke_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRunningObjectTable_IsRunning_Proxy( + IRunningObjectTable * This, + IMoniker *pmkObjectName); + + +void __stdcall IRunningObjectTable_IsRunning_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRunningObjectTable_GetObject_Proxy( + IRunningObjectTable * This, + IMoniker *pmkObjectName, + IUnknown * *ppunkObject); + + +void __stdcall IRunningObjectTable_GetObject_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRunningObjectTable_NoteChangeTime_Proxy( + IRunningObjectTable * This, + DWORD dwRegister, + FILETIME *pfiletime); + + +void __stdcall IRunningObjectTable_NoteChangeTime_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRunningObjectTable_GetTimeOfLastChange_Proxy( + IRunningObjectTable * This, + IMoniker *pmkObjectName, + FILETIME *pfiletime); + + +void __stdcall IRunningObjectTable_GetTimeOfLastChange_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRunningObjectTable_EnumRunning_Proxy( + IRunningObjectTable * This, + IEnumMoniker * *ppenumMoniker); + + +void __stdcall IRunningObjectTable_EnumRunning_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2775 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IPersist *LPPERSIST; + + +extern const IID IID_IPersist; + + + + + + + + + + + + +#line 2805 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IPersistVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IPersist * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IPersist * This); + + ULONG ( __stdcall *Release )( + IPersist * This); + + HRESULT ( __stdcall *GetClassID )( + IPersist * This, + CLSID *pClassID); + + + } IPersistVtbl; + + struct IPersist + { + struct IPersistVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 2855 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IPersist_GetClassID_Proxy( + IPersist * This, + CLSID *pClassID); + + +void __stdcall IPersist_GetClassID_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2872 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IPersistStream *LPPERSISTSTREAM; + + +extern const IID IID_IPersistStream; + + + + + + + + + + + + + + + + + + + + + +#line 2911 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IPersistStreamVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IPersistStream * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IPersistStream * This); + + ULONG ( __stdcall *Release )( + IPersistStream * This); + + HRESULT ( __stdcall *GetClassID )( + IPersistStream * This, + CLSID *pClassID); + + HRESULT ( __stdcall *IsDirty )( + IPersistStream * This); + + HRESULT ( __stdcall *Load )( + IPersistStream * This, + IStream *pStm); + + HRESULT ( __stdcall *Save )( + IPersistStream * This, + IStream *pStm, + BOOL fClearDirty); + + HRESULT ( __stdcall *GetSizeMax )( + IPersistStream * This, + ULARGE_INTEGER *pcbSize); + + + } IPersistStreamVtbl; + + struct IPersistStream + { + struct IPersistStreamVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2990 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IPersistStream_IsDirty_Proxy( + IPersistStream * This); + + +void __stdcall IPersistStream_IsDirty_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistStream_Load_Proxy( + IPersistStream * This, + IStream *pStm); + + +void __stdcall IPersistStream_Load_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistStream_Save_Proxy( + IPersistStream * This, + IStream *pStm, + BOOL fClearDirty); + + +void __stdcall IPersistStream_Save_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistStream_GetSizeMax_Proxy( + IPersistStream * This, + ULARGE_INTEGER *pcbSize); + + +void __stdcall IPersistStream_GetSizeMax_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3043 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IMoniker *LPMONIKER; + +typedef +enum tagMKSYS + { MKSYS_NONE = 0, + MKSYS_GENERICCOMPOSITE = 1, + MKSYS_FILEMONIKER = 2, + MKSYS_ANTIMONIKER = 3, + MKSYS_ITEMMONIKER = 4, + MKSYS_POINTERMONIKER = 5, + MKSYS_CLASSMONIKER = 7 + } MKSYS; + +typedef +enum tagMKREDUCE + { MKRREDUCE_ONE = 3 << 16, + MKRREDUCE_TOUSER = 2 << 16, + MKRREDUCE_THROUGHUSER = 1 << 16, + MKRREDUCE_ALL = 0 + } MKRREDUCE; + + +extern const IID IID_IMoniker; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3158 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IMonikerVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IMoniker * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IMoniker * This); + + ULONG ( __stdcall *Release )( + IMoniker * This); + + HRESULT ( __stdcall *GetClassID )( + IMoniker * This, + CLSID *pClassID); + + HRESULT ( __stdcall *IsDirty )( + IMoniker * This); + + HRESULT ( __stdcall *Load )( + IMoniker * This, + IStream *pStm); + + HRESULT ( __stdcall *Save )( + IMoniker * This, + IStream *pStm, + BOOL fClearDirty); + + HRESULT ( __stdcall *GetSizeMax )( + IMoniker * This, + ULARGE_INTEGER *pcbSize); + + HRESULT ( __stdcall *BindToObject )( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + const IID * const riidResult, + void * *ppvResult); + + HRESULT ( __stdcall *BindToStorage )( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + const IID * const riid, + void * *ppvObj); + + HRESULT ( __stdcall *Reduce )( + IMoniker * This, + IBindCtx *pbc, + DWORD dwReduceHowFar, + IMoniker * *ppmkToLeft, + IMoniker * *ppmkReduced); + + HRESULT ( __stdcall *ComposeWith )( + IMoniker * This, + IMoniker *pmkRight, + BOOL fOnlyIfNotGeneric, + IMoniker * *ppmkComposite); + + HRESULT ( __stdcall *Enum )( + IMoniker * This, + BOOL fForward, + IEnumMoniker * *ppenumMoniker); + + HRESULT ( __stdcall *IsEqual )( + IMoniker * This, + IMoniker *pmkOtherMoniker); + + HRESULT ( __stdcall *Hash )( + IMoniker * This, + DWORD *pdwHash); + + HRESULT ( __stdcall *IsRunning )( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + IMoniker *pmkNewlyRunning); + + HRESULT ( __stdcall *GetTimeOfLastChange )( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + FILETIME *pFileTime); + + HRESULT ( __stdcall *Inverse )( + IMoniker * This, + IMoniker * *ppmk); + + HRESULT ( __stdcall *CommonPrefixWith )( + IMoniker * This, + IMoniker *pmkOther, + IMoniker * *ppmkPrefix); + + HRESULT ( __stdcall *RelativePathTo )( + IMoniker * This, + IMoniker *pmkOther, + IMoniker * *ppmkRelPath); + + HRESULT ( __stdcall *GetDisplayName )( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + LPOLESTR *ppszDisplayName); + + HRESULT ( __stdcall *ParseDisplayName )( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + LPOLESTR pszDisplayName, + ULONG *pchEaten, + IMoniker * *ppmkOut); + + HRESULT ( __stdcall *IsSystemMoniker )( + IMoniker * This, + DWORD *pdwMksys); + + + } IMonikerVtbl; + + struct IMoniker + { + struct IMonikerVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3367 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IMoniker_RemoteBindToObject_Proxy( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + const IID * const riidResult, + IUnknown * *ppvResult); + + +void __stdcall IMoniker_RemoteBindToObject_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IMoniker_RemoteBindToStorage_Proxy( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + const IID * const riid, + IUnknown * *ppvObj); + + +void __stdcall IMoniker_RemoteBindToStorage_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_Reduce_Proxy( + IMoniker * This, + IBindCtx *pbc, + DWORD dwReduceHowFar, + IMoniker * *ppmkToLeft, + IMoniker * *ppmkReduced); + + +void __stdcall IMoniker_Reduce_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_ComposeWith_Proxy( + IMoniker * This, + IMoniker *pmkRight, + BOOL fOnlyIfNotGeneric, + IMoniker * *ppmkComposite); + + +void __stdcall IMoniker_ComposeWith_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_Enum_Proxy( + IMoniker * This, + BOOL fForward, + IEnumMoniker * *ppenumMoniker); + + +void __stdcall IMoniker_Enum_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_IsEqual_Proxy( + IMoniker * This, + IMoniker *pmkOtherMoniker); + + +void __stdcall IMoniker_IsEqual_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_Hash_Proxy( + IMoniker * This, + DWORD *pdwHash); + + +void __stdcall IMoniker_Hash_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_IsRunning_Proxy( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + IMoniker *pmkNewlyRunning); + + +void __stdcall IMoniker_IsRunning_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_GetTimeOfLastChange_Proxy( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + FILETIME *pFileTime); + + +void __stdcall IMoniker_GetTimeOfLastChange_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_Inverse_Proxy( + IMoniker * This, + IMoniker * *ppmk); + + +void __stdcall IMoniker_Inverse_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_CommonPrefixWith_Proxy( + IMoniker * This, + IMoniker *pmkOther, + IMoniker * *ppmkPrefix); + + +void __stdcall IMoniker_CommonPrefixWith_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_RelativePathTo_Proxy( + IMoniker * This, + IMoniker *pmkOther, + IMoniker * *ppmkRelPath); + + +void __stdcall IMoniker_RelativePathTo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_GetDisplayName_Proxy( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + LPOLESTR *ppszDisplayName); + + +void __stdcall IMoniker_GetDisplayName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_ParseDisplayName_Proxy( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + LPOLESTR pszDisplayName, + ULONG *pchEaten, + IMoniker * *ppmkOut); + + +void __stdcall IMoniker_ParseDisplayName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IMoniker_IsSystemMoniker_Proxy( + IMoniker * This, + DWORD *pdwMksys); + + +void __stdcall IMoniker_IsSystemMoniker_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3576 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IROTData; + + + + + + + + + + + + + + +#line 3606 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IROTDataVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IROTData * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IROTData * This); + + ULONG ( __stdcall *Release )( + IROTData * This); + + HRESULT ( __stdcall *GetComparisonData )( + IROTData * This, + byte *pbData, + ULONG cbMax, + ULONG *pcbData); + + + } IROTDataVtbl; + + struct IROTData + { + struct IROTDataVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 3658 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IROTData_GetComparisonData_Proxy( + IROTData * This, + byte *pbData, + ULONG cbMax, + ULONG *pcbData); + + +void __stdcall IROTData_GetComparisonData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3677 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IEnumString *LPENUMSTRING; + + +extern const IID IID_IEnumString; + + + + + + + + + + + + + + + + + + + + + + +#line 3717 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IEnumStringVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumString * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumString * This); + + ULONG ( __stdcall *Release )( + IEnumString * This); + + HRESULT ( __stdcall *Next )( + IEnumString * This, + ULONG celt, + LPOLESTR *rgelt, + ULONG *pceltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumString * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumString * This); + + HRESULT ( __stdcall *Clone )( + IEnumString * This, + IEnumString * *ppenum); + + + } IEnumStringVtbl; + + struct IEnumString + { + struct IEnumStringVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3789 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IEnumString_RemoteNext_Proxy( + IEnumString * This, + ULONG celt, + LPOLESTR *rgelt, + ULONG *pceltFetched); + + +void __stdcall IEnumString_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumString_Skip_Proxy( + IEnumString * This, + ULONG celt); + + +void __stdcall IEnumString_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumString_Reset_Proxy( + IEnumString * This); + + +void __stdcall IEnumString_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumString_Clone_Proxy( + IEnumString * This, + IEnumString * *ppenum); + + +void __stdcall IEnumString_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3843 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_ISequentialStream; + + + + + + + + + + + + + + + + + + + +#line 3878 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct ISequentialStreamVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ISequentialStream * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ISequentialStream * This); + + ULONG ( __stdcall *Release )( + ISequentialStream * This); + + HRESULT ( __stdcall *Read )( + ISequentialStream * This, + void *pv, + ULONG cb, + ULONG *pcbRead); + + HRESULT ( __stdcall *Write )( + ISequentialStream * This, + const void *pv, + ULONG cb, + ULONG *pcbWritten); + + + } ISequentialStreamVtbl; + + struct ISequentialStream + { + struct ISequentialStreamVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3939 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall ISequentialStream_RemoteRead_Proxy( + ISequentialStream * This, + byte *pv, + ULONG cb, + ULONG *pcbRead); + + +void __stdcall ISequentialStream_RemoteRead_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ISequentialStream_RemoteWrite_Proxy( + ISequentialStream * This, + const byte *pv, + ULONG cb, + ULONG *pcbWritten); + + +void __stdcall ISequentialStream_RemoteWrite_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3972 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IStream *LPSTREAM; + + + + + + + + + + + + + + + + + + + +typedef struct tagSTATSTG + { + LPOLESTR pwcsName; + DWORD type; + ULARGE_INTEGER cbSize; + FILETIME mtime; + FILETIME ctime; + FILETIME atime; + DWORD grfMode; + DWORD grfLocksSupported; + CLSID clsid; + DWORD grfStateBits; + DWORD reserved; + } STATSTG; + +#line 4021 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +typedef +enum tagSTGTY + { STGTY_STORAGE = 1, + STGTY_STREAM = 2, + STGTY_LOCKBYTES = 3, + STGTY_PROPERTY = 4 + } STGTY; + +typedef +enum tagSTREAM_SEEK + { STREAM_SEEK_SET = 0, + STREAM_SEEK_CUR = 1, + STREAM_SEEK_END = 2 + } STREAM_SEEK; + +typedef +enum tagLOCKTYPE + { LOCK_WRITE = 1, + LOCK_EXCLUSIVE = 2, + LOCK_ONLYONCE = 4 + } LOCKTYPE; + + +extern const IID IID_IStream; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4091 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IStreamVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IStream * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IStream * This); + + ULONG ( __stdcall *Release )( + IStream * This); + + HRESULT ( __stdcall *Read )( + IStream * This, + void *pv, + ULONG cb, + ULONG *pcbRead); + + HRESULT ( __stdcall *Write )( + IStream * This, + const void *pv, + ULONG cb, + ULONG *pcbWritten); + + HRESULT ( __stdcall *Seek )( + IStream * This, + LARGE_INTEGER dlibMove, + DWORD dwOrigin, + ULARGE_INTEGER *plibNewPosition); + + HRESULT ( __stdcall *SetSize )( + IStream * This, + ULARGE_INTEGER libNewSize); + + HRESULT ( __stdcall *CopyTo )( + IStream * This, + IStream *pstm, + ULARGE_INTEGER cb, + ULARGE_INTEGER *pcbRead, + ULARGE_INTEGER *pcbWritten); + + HRESULT ( __stdcall *Commit )( + IStream * This, + DWORD grfCommitFlags); + + HRESULT ( __stdcall *Revert )( + IStream * This); + + HRESULT ( __stdcall *LockRegion )( + IStream * This, + ULARGE_INTEGER libOffset, + ULARGE_INTEGER cb, + DWORD dwLockType); + + HRESULT ( __stdcall *UnlockRegion )( + IStream * This, + ULARGE_INTEGER libOffset, + ULARGE_INTEGER cb, + DWORD dwLockType); + + HRESULT ( __stdcall *Stat )( + IStream * This, + STATSTG *pstatstg, + DWORD grfStatFlag); + + HRESULT ( __stdcall *Clone )( + IStream * This, + IStream * *ppstm); + + + } IStreamVtbl; + + struct IStream + { + struct IStreamVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4225 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IStream_RemoteSeek_Proxy( + IStream * This, + LARGE_INTEGER dlibMove, + DWORD dwOrigin, + ULARGE_INTEGER *plibNewPosition); + + +void __stdcall IStream_RemoteSeek_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStream_SetSize_Proxy( + IStream * This, + ULARGE_INTEGER libNewSize); + + +void __stdcall IStream_SetSize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IStream_RemoteCopyTo_Proxy( + IStream * This, + IStream *pstm, + ULARGE_INTEGER cb, + ULARGE_INTEGER *pcbRead, + ULARGE_INTEGER *pcbWritten); + + +void __stdcall IStream_RemoteCopyTo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStream_Commit_Proxy( + IStream * This, + DWORD grfCommitFlags); + + +void __stdcall IStream_Commit_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStream_Revert_Proxy( + IStream * This); + + +void __stdcall IStream_Revert_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStream_LockRegion_Proxy( + IStream * This, + ULARGE_INTEGER libOffset, + ULARGE_INTEGER cb, + DWORD dwLockType); + + +void __stdcall IStream_LockRegion_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStream_UnlockRegion_Proxy( + IStream * This, + ULARGE_INTEGER libOffset, + ULARGE_INTEGER cb, + DWORD dwLockType); + + +void __stdcall IStream_UnlockRegion_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStream_Stat_Proxy( + IStream * This, + STATSTG *pstatstg, + DWORD grfStatFlag); + + +void __stdcall IStream_Stat_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStream_Clone_Proxy( + IStream * This, + IStream * *ppstm); + + +void __stdcall IStream_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4347 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IEnumSTATSTG *LPENUMSTATSTG; + + +extern const IID IID_IEnumSTATSTG; + + + + + + + + + + + + + + + + + + + + + + +#line 4387 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IEnumSTATSTGVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumSTATSTG * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumSTATSTG * This); + + ULONG ( __stdcall *Release )( + IEnumSTATSTG * This); + + HRESULT ( __stdcall *Next )( + IEnumSTATSTG * This, + ULONG celt, + STATSTG *rgelt, + ULONG *pceltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumSTATSTG * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumSTATSTG * This); + + HRESULT ( __stdcall *Clone )( + IEnumSTATSTG * This, + IEnumSTATSTG * *ppenum); + + + } IEnumSTATSTGVtbl; + + struct IEnumSTATSTG + { + struct IEnumSTATSTGVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4459 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IEnumSTATSTG_RemoteNext_Proxy( + IEnumSTATSTG * This, + ULONG celt, + STATSTG *rgelt, + ULONG *pceltFetched); + + +void __stdcall IEnumSTATSTG_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATSTG_Skip_Proxy( + IEnumSTATSTG * This, + ULONG celt); + + +void __stdcall IEnumSTATSTG_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATSTG_Reset_Proxy( + IEnumSTATSTG * This); + + +void __stdcall IEnumSTATSTG_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATSTG_Clone_Proxy( + IEnumSTATSTG * This, + IEnumSTATSTG * *ppenum); + + +void __stdcall IEnumSTATSTG_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4513 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IStorage *LPSTORAGE; + +typedef struct tagRemSNB + { + unsigned long ulCntStr; + unsigned long ulCntChar; + OLECHAR rgString[ 1 ]; + } RemSNB; + +typedef RemSNB *wireSNB; + +typedef OLECHAR * *SNB; + + +extern const IID IID_IStorage; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4627 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IStorageVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IStorage * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IStorage * This); + + ULONG ( __stdcall *Release )( + IStorage * This); + + HRESULT ( __stdcall *CreateStream )( + IStorage * This, + const OLECHAR *pwcsName, + DWORD grfMode, + DWORD reserved1, + DWORD reserved2, + IStream * *ppstm); + + HRESULT ( __stdcall *OpenStream )( + IStorage * This, + const OLECHAR *pwcsName, + void *reserved1, + DWORD grfMode, + DWORD reserved2, + IStream * *ppstm); + + HRESULT ( __stdcall *CreateStorage )( + IStorage * This, + const OLECHAR *pwcsName, + DWORD grfMode, + DWORD reserved1, + DWORD reserved2, + IStorage * *ppstg); + + HRESULT ( __stdcall *OpenStorage )( + IStorage * This, + const OLECHAR *pwcsName, + IStorage *pstgPriority, + DWORD grfMode, + SNB snbExclude, + DWORD reserved, + IStorage * *ppstg); + + HRESULT ( __stdcall *CopyTo )( + IStorage * This, + DWORD ciidExclude, + const IID *rgiidExclude, + SNB snbExclude, + IStorage *pstgDest); + + HRESULT ( __stdcall *MoveElementTo )( + IStorage * This, + const OLECHAR *pwcsName, + IStorage *pstgDest, + const OLECHAR *pwcsNewName, + DWORD grfFlags); + + HRESULT ( __stdcall *Commit )( + IStorage * This, + DWORD grfCommitFlags); + + HRESULT ( __stdcall *Revert )( + IStorage * This); + + HRESULT ( __stdcall *EnumElements )( + IStorage * This, + DWORD reserved1, + void *reserved2, + DWORD reserved3, + IEnumSTATSTG * *ppenum); + + HRESULT ( __stdcall *DestroyElement )( + IStorage * This, + const OLECHAR *pwcsName); + + HRESULT ( __stdcall *RenameElement )( + IStorage * This, + const OLECHAR *pwcsOldName, + const OLECHAR *pwcsNewName); + + HRESULT ( __stdcall *SetElementTimes )( + IStorage * This, + const OLECHAR *pwcsName, + const FILETIME *pctime, + const FILETIME *patime, + const FILETIME *pmtime); + + HRESULT ( __stdcall *SetClass )( + IStorage * This, + const CLSID * const clsid); + + HRESULT ( __stdcall *SetStateBits )( + IStorage * This, + DWORD grfStateBits, + DWORD grfMask); + + HRESULT ( __stdcall *Stat )( + IStorage * This, + STATSTG *pstatstg, + DWORD grfStatFlag); + + + } IStorageVtbl; + + struct IStorage + { + struct IStorageVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4806 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IStorage_CreateStream_Proxy( + IStorage * This, + const OLECHAR *pwcsName, + DWORD grfMode, + DWORD reserved1, + DWORD reserved2, + IStream * *ppstm); + + +void __stdcall IStorage_CreateStream_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IStorage_RemoteOpenStream_Proxy( + IStorage * This, + const OLECHAR *pwcsName, + unsigned long cbReserved1, + byte *reserved1, + DWORD grfMode, + DWORD reserved2, + IStream * *ppstm); + + +void __stdcall IStorage_RemoteOpenStream_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_CreateStorage_Proxy( + IStorage * This, + const OLECHAR *pwcsName, + DWORD grfMode, + DWORD reserved1, + DWORD reserved2, + IStorage * *ppstg); + + +void __stdcall IStorage_CreateStorage_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_OpenStorage_Proxy( + IStorage * This, + const OLECHAR *pwcsName, + IStorage *pstgPriority, + DWORD grfMode, + SNB snbExclude, + DWORD reserved, + IStorage * *ppstg); + + +void __stdcall IStorage_OpenStorage_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_CopyTo_Proxy( + IStorage * This, + DWORD ciidExclude, + const IID *rgiidExclude, + SNB snbExclude, + IStorage *pstgDest); + + +void __stdcall IStorage_CopyTo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_MoveElementTo_Proxy( + IStorage * This, + const OLECHAR *pwcsName, + IStorage *pstgDest, + const OLECHAR *pwcsNewName, + DWORD grfFlags); + + +void __stdcall IStorage_MoveElementTo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_Commit_Proxy( + IStorage * This, + DWORD grfCommitFlags); + + +void __stdcall IStorage_Commit_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_Revert_Proxy( + IStorage * This); + + +void __stdcall IStorage_Revert_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IStorage_RemoteEnumElements_Proxy( + IStorage * This, + DWORD reserved1, + unsigned long cbReserved2, + byte *reserved2, + DWORD reserved3, + IEnumSTATSTG * *ppenum); + + +void __stdcall IStorage_RemoteEnumElements_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_DestroyElement_Proxy( + IStorage * This, + const OLECHAR *pwcsName); + + +void __stdcall IStorage_DestroyElement_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_RenameElement_Proxy( + IStorage * This, + const OLECHAR *pwcsOldName, + const OLECHAR *pwcsNewName); + + +void __stdcall IStorage_RenameElement_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_SetElementTimes_Proxy( + IStorage * This, + const OLECHAR *pwcsName, + const FILETIME *pctime, + const FILETIME *patime, + const FILETIME *pmtime); + + +void __stdcall IStorage_SetElementTimes_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_SetClass_Proxy( + IStorage * This, + const CLSID * const clsid); + + +void __stdcall IStorage_SetClass_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_SetStateBits_Proxy( + IStorage * This, + DWORD grfStateBits, + DWORD grfMask); + + +void __stdcall IStorage_SetStateBits_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IStorage_Stat_Proxy( + IStorage * This, + STATSTG *pstatstg, + DWORD grfStatFlag); + + +void __stdcall IStorage_Stat_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5024 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IPersistFile *LPPERSISTFILE; + + +extern const IID IID_IPersistFile; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5067 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IPersistFileVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IPersistFile * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IPersistFile * This); + + ULONG ( __stdcall *Release )( + IPersistFile * This); + + HRESULT ( __stdcall *GetClassID )( + IPersistFile * This, + CLSID *pClassID); + + HRESULT ( __stdcall *IsDirty )( + IPersistFile * This); + + HRESULT ( __stdcall *Load )( + IPersistFile * This, + LPCOLESTR pszFileName, + DWORD dwMode); + + HRESULT ( __stdcall *Save )( + IPersistFile * This, + LPCOLESTR pszFileName, + BOOL fRemember); + + HRESULT ( __stdcall *SaveCompleted )( + IPersistFile * This, + LPCOLESTR pszFileName); + + HRESULT ( __stdcall *GetCurFile )( + IPersistFile * This, + LPOLESTR *ppszFileName); + + + } IPersistFileVtbl; + + struct IPersistFile + { + struct IPersistFileVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5154 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IPersistFile_IsDirty_Proxy( + IPersistFile * This); + + +void __stdcall IPersistFile_IsDirty_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistFile_Load_Proxy( + IPersistFile * This, + LPCOLESTR pszFileName, + DWORD dwMode); + + +void __stdcall IPersistFile_Load_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistFile_Save_Proxy( + IPersistFile * This, + LPCOLESTR pszFileName, + BOOL fRemember); + + +void __stdcall IPersistFile_Save_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistFile_SaveCompleted_Proxy( + IPersistFile * This, + LPCOLESTR pszFileName); + + +void __stdcall IPersistFile_SaveCompleted_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistFile_GetCurFile_Proxy( + IPersistFile * This, + LPOLESTR *ppszFileName); + + +void __stdcall IPersistFile_GetCurFile_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5220 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IPersistStorage *LPPERSISTSTORAGE; + + +extern const IID IID_IPersistStorage; + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5264 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IPersistStorageVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IPersistStorage * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IPersistStorage * This); + + ULONG ( __stdcall *Release )( + IPersistStorage * This); + + HRESULT ( __stdcall *GetClassID )( + IPersistStorage * This, + CLSID *pClassID); + + HRESULT ( __stdcall *IsDirty )( + IPersistStorage * This); + + HRESULT ( __stdcall *InitNew )( + IPersistStorage * This, + IStorage *pStg); + + HRESULT ( __stdcall *Load )( + IPersistStorage * This, + IStorage *pStg); + + HRESULT ( __stdcall *Save )( + IPersistStorage * This, + IStorage *pStgSave, + BOOL fSameAsLoad); + + HRESULT ( __stdcall *SaveCompleted )( + IPersistStorage * This, + IStorage *pStgNew); + + HRESULT ( __stdcall *HandsOffStorage )( + IPersistStorage * This); + + + } IPersistStorageVtbl; + + struct IPersistStorage + { + struct IPersistStorageVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5356 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IPersistStorage_IsDirty_Proxy( + IPersistStorage * This); + + +void __stdcall IPersistStorage_IsDirty_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistStorage_InitNew_Proxy( + IPersistStorage * This, + IStorage *pStg); + + +void __stdcall IPersistStorage_InitNew_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistStorage_Load_Proxy( + IPersistStorage * This, + IStorage *pStg); + + +void __stdcall IPersistStorage_Load_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistStorage_Save_Proxy( + IPersistStorage * This, + IStorage *pStgSave, + BOOL fSameAsLoad); + + +void __stdcall IPersistStorage_Save_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistStorage_SaveCompleted_Proxy( + IPersistStorage * This, + IStorage *pStgNew); + + +void __stdcall IPersistStorage_SaveCompleted_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistStorage_HandsOffStorage_Proxy( + IPersistStorage * This); + + +void __stdcall IPersistStorage_HandsOffStorage_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5432 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef ILockBytes *LPLOCKBYTES; + + +extern const IID IID_ILockBytes; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5490 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct ILockBytesVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ILockBytes * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ILockBytes * This); + + ULONG ( __stdcall *Release )( + ILockBytes * This); + + HRESULT ( __stdcall *ReadAt )( + ILockBytes * This, + ULARGE_INTEGER ulOffset, + void *pv, + ULONG cb, + ULONG *pcbRead); + + HRESULT ( __stdcall *WriteAt )( + ILockBytes * This, + ULARGE_INTEGER ulOffset, + const void *pv, + ULONG cb, + ULONG *pcbWritten); + + HRESULT ( __stdcall *Flush )( + ILockBytes * This); + + HRESULT ( __stdcall *SetSize )( + ILockBytes * This, + ULARGE_INTEGER cb); + + HRESULT ( __stdcall *LockRegion )( + ILockBytes * This, + ULARGE_INTEGER libOffset, + ULARGE_INTEGER cb, + DWORD dwLockType); + + HRESULT ( __stdcall *UnlockRegion )( + ILockBytes * This, + ULARGE_INTEGER libOffset, + ULARGE_INTEGER cb, + DWORD dwLockType); + + HRESULT ( __stdcall *Stat )( + ILockBytes * This, + STATSTG *pstatstg, + DWORD grfStatFlag); + + + } ILockBytesVtbl; + + struct ILockBytes + { + struct ILockBytesVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5592 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall ILockBytes_RemoteReadAt_Proxy( + ILockBytes * This, + ULARGE_INTEGER ulOffset, + byte *pv, + ULONG cb, + ULONG *pcbRead); + + +void __stdcall ILockBytes_RemoteReadAt_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ILockBytes_RemoteWriteAt_Proxy( + ILockBytes * This, + ULARGE_INTEGER ulOffset, + const byte *pv, + ULONG cb, + ULONG *pcbWritten); + + +void __stdcall ILockBytes_RemoteWriteAt_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ILockBytes_Flush_Proxy( + ILockBytes * This); + + +void __stdcall ILockBytes_Flush_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ILockBytes_SetSize_Proxy( + ILockBytes * This, + ULARGE_INTEGER cb); + + +void __stdcall ILockBytes_SetSize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ILockBytes_LockRegion_Proxy( + ILockBytes * This, + ULARGE_INTEGER libOffset, + ULARGE_INTEGER cb, + DWORD dwLockType); + + +void __stdcall ILockBytes_LockRegion_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ILockBytes_UnlockRegion_Proxy( + ILockBytes * This, + ULARGE_INTEGER libOffset, + ULARGE_INTEGER cb, + DWORD dwLockType); + + +void __stdcall ILockBytes_UnlockRegion_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ILockBytes_Stat_Proxy( + ILockBytes * This, + STATSTG *pstatstg, + DWORD grfStatFlag); + + +void __stdcall ILockBytes_Stat_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5691 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IEnumFORMATETC *LPENUMFORMATETC; + +typedef struct tagDVTARGETDEVICE + { + DWORD tdSize; + WORD tdDriverNameOffset; + WORD tdDeviceNameOffset; + WORD tdPortNameOffset; + WORD tdExtDevmodeOffset; + BYTE tdData[ 1 ]; + } DVTARGETDEVICE; + +typedef CLIPFORMAT *LPCLIPFORMAT; + +typedef struct tagFORMATETC + { + CLIPFORMAT cfFormat; + DVTARGETDEVICE *ptd; + DWORD dwAspect; + LONG lindex; + DWORD tymed; + } FORMATETC; + +typedef struct tagFORMATETC *LPFORMATETC; + + +extern const IID IID_IEnumFORMATETC; + + + + + + + + + + + + + + + + + + + + + + +#line 5754 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IEnumFORMATETCVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumFORMATETC * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumFORMATETC * This); + + ULONG ( __stdcall *Release )( + IEnumFORMATETC * This); + + HRESULT ( __stdcall *Next )( + IEnumFORMATETC * This, + ULONG celt, + FORMATETC *rgelt, + ULONG *pceltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumFORMATETC * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumFORMATETC * This); + + HRESULT ( __stdcall *Clone )( + IEnumFORMATETC * This, + IEnumFORMATETC * *ppenum); + + + } IEnumFORMATETCVtbl; + + struct IEnumFORMATETC + { + struct IEnumFORMATETCVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5826 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IEnumFORMATETC_RemoteNext_Proxy( + IEnumFORMATETC * This, + ULONG celt, + FORMATETC *rgelt, + ULONG *pceltFetched); + + +void __stdcall IEnumFORMATETC_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumFORMATETC_Skip_Proxy( + IEnumFORMATETC * This, + ULONG celt); + + +void __stdcall IEnumFORMATETC_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumFORMATETC_Reset_Proxy( + IEnumFORMATETC * This); + + +void __stdcall IEnumFORMATETC_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumFORMATETC_Clone_Proxy( + IEnumFORMATETC * This, + IEnumFORMATETC * *ppenum); + + +void __stdcall IEnumFORMATETC_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5880 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IEnumSTATDATA *LPENUMSTATDATA; + +typedef +enum tagADVF + { ADVF_NODATA = 1, + ADVF_PRIMEFIRST = 2, + ADVF_ONLYONCE = 4, + ADVF_DATAONSTOP = 64, + ADVFCACHE_NOHANDLER = 8, + ADVFCACHE_FORCEBUILTIN = 16, + ADVFCACHE_ONSAVE = 32 + } ADVF; + +typedef struct tagSTATDATA + { + FORMATETC formatetc; + DWORD advf; + IAdviseSink *pAdvSink; + DWORD dwConnection; + } STATDATA; + +typedef STATDATA *LPSTATDATA; + + +extern const IID IID_IEnumSTATDATA; + + + + + + + + + + + + + + + + + + + + + + +#line 5941 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IEnumSTATDATAVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumSTATDATA * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumSTATDATA * This); + + ULONG ( __stdcall *Release )( + IEnumSTATDATA * This); + + HRESULT ( __stdcall *Next )( + IEnumSTATDATA * This, + ULONG celt, + STATDATA *rgelt, + ULONG *pceltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumSTATDATA * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumSTATDATA * This); + + HRESULT ( __stdcall *Clone )( + IEnumSTATDATA * This, + IEnumSTATDATA * *ppenum); + + + } IEnumSTATDATAVtbl; + + struct IEnumSTATDATA + { + struct IEnumSTATDATAVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6013 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IEnumSTATDATA_RemoteNext_Proxy( + IEnumSTATDATA * This, + ULONG celt, + STATDATA *rgelt, + ULONG *pceltFetched); + + +void __stdcall IEnumSTATDATA_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATDATA_Skip_Proxy( + IEnumSTATDATA * This, + ULONG celt); + + +void __stdcall IEnumSTATDATA_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATDATA_Reset_Proxy( + IEnumSTATDATA * This); + + +void __stdcall IEnumSTATDATA_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATDATA_Clone_Proxy( + IEnumSTATDATA * This, + IEnumSTATDATA * *ppenum); + + +void __stdcall IEnumSTATDATA_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 6067 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IRootStorage *LPROOTSTORAGE; + + +extern const IID IID_IRootStorage; + + + + + + + + + + + + +#line 6097 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IRootStorageVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IRootStorage * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IRootStorage * This); + + ULONG ( __stdcall *Release )( + IRootStorage * This); + + HRESULT ( __stdcall *SwitchToFile )( + IRootStorage * This, + LPOLESTR pszFile); + + + } IRootStorageVtbl; + + struct IRootStorage + { + struct IRootStorageVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 6147 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IRootStorage_SwitchToFile_Proxy( + IRootStorage * This, + LPOLESTR pszFile); + + +void __stdcall IRootStorage_SwitchToFile_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 6164 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IAdviseSink *LPADVISESINK; + +typedef +enum tagTYMED + { TYMED_HGLOBAL = 1, + TYMED_FILE = 2, + TYMED_ISTREAM = 4, + TYMED_ISTORAGE = 8, + TYMED_GDI = 16, + TYMED_MFPICT = 32, + TYMED_ENHMF = 64, + TYMED_NULL = 0 + } TYMED; + + +#pragma warning(disable:4200) +#line 6194 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +typedef struct tagRemSTGMEDIUM + { + DWORD tymed; + DWORD dwHandleType; + unsigned long pData; + unsigned long pUnkForRelease; + unsigned long cbData; + byte data[ 1 ]; + } RemSTGMEDIUM; + + +#pragma warning(default:4200) +#line 6207 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + +typedef struct tagSTGMEDIUM + { + DWORD tymed; + union + { + HBITMAP hBitmap; + HMETAFILEPICT hMetaFilePict; + HENHMETAFILE hEnhMetaFile; + HGLOBAL hGlobal; + LPOLESTR lpszFileName; + IStream *pstm; + IStorage *pstg; + + } ; + IUnknown *pUnkForRelease; + } uSTGMEDIUM; + +#line 6240 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +typedef struct _GDI_OBJECT + { + DWORD ObjectType; + union __MIDL_IAdviseSink_0002 + { + wireHBITMAP hBitmap; + wireHPALETTE hPalette; + wireHGLOBAL hGeneric; + } u; + } GDI_OBJECT; + +typedef struct _userSTGMEDIUM + { + struct _STGMEDIUM_UNION + { + DWORD tymed; + union __MIDL_IAdviseSink_0003 + { + + wireHMETAFILEPICT hMetaFilePict; + wireHENHMETAFILE hHEnhMetaFile; + GDI_OBJECT *hGdiHandle; + wireHGLOBAL hGlobal; + LPOLESTR lpszFileName; + BYTE_BLOB *pstm; + BYTE_BLOB *pstg; + } u; + } ; + IUnknown *pUnkForRelease; + } userSTGMEDIUM; + +typedef userSTGMEDIUM *wireSTGMEDIUM; + +typedef uSTGMEDIUM STGMEDIUM; + +typedef userSTGMEDIUM *wireASYNC_STGMEDIUM; + +typedef STGMEDIUM ASYNC_STGMEDIUM; + +typedef STGMEDIUM *LPSTGMEDIUM; + +typedef struct _userFLAG_STGMEDIUM + { + long ContextFlags; + long fPassOwnership; + userSTGMEDIUM Stgmed; + } userFLAG_STGMEDIUM; + +typedef userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM; + +typedef struct _FLAG_STGMEDIUM + { + long ContextFlags; + long fPassOwnership; + STGMEDIUM Stgmed; + } FLAG_STGMEDIUM; + + +extern const IID IID_IAdviseSink; + + + + + + + + + + + + + + + + + + + + + + + + +#line 6324 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IAdviseSinkVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IAdviseSink * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IAdviseSink * This); + + ULONG ( __stdcall *Release )( + IAdviseSink * This); + + void ( __stdcall *OnDataChange )( + IAdviseSink * This, + FORMATETC *pFormatetc, + STGMEDIUM *pStgmed); + + void ( __stdcall *OnViewChange )( + IAdviseSink * This, + DWORD dwAspect, + LONG lindex); + + void ( __stdcall *OnRename )( + IAdviseSink * This, + IMoniker *pmk); + + void ( __stdcall *OnSave )( + IAdviseSink * This); + + void ( __stdcall *OnClose )( + IAdviseSink * This); + + + } IAdviseSinkVtbl; + + struct IAdviseSink + { + struct IAdviseSinkVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6402 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IAdviseSink_RemoteOnDataChange_Proxy( + IAdviseSink * This, + IAsyncManager * *ppIAM, + FORMATETC *pFormatetc, + ASYNC_STGMEDIUM *pStgmed); + + +void __stdcall IAdviseSink_RemoteOnDataChange_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IAdviseSink_RemoteOnViewChange_Proxy( + IAdviseSink * This, + IAsyncManager * *ppIAM, + DWORD dwAspect, + LONG lindex); + + +void __stdcall IAdviseSink_RemoteOnViewChange_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IAdviseSink_RemoteOnRename_Proxy( + IAdviseSink * This, + IAsyncManager * *ppIAM, + IMoniker *pmk); + + +void __stdcall IAdviseSink_RemoteOnRename_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IAdviseSink_RemoteOnSave_Proxy( + IAdviseSink * This, + IAsyncManager * *ppIAM); + + +void __stdcall IAdviseSink_RemoteOnSave_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IAdviseSink_RemoteOnClose_Proxy( + IAdviseSink * This); + + +void __stdcall IAdviseSink_RemoteOnClose_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 6471 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IAdviseSink2 *LPADVISESINK2; + + +extern const IID IID_IAdviseSink2; + + + + + + + + + + + + +#line 6501 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IAdviseSink2Vtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IAdviseSink2 * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IAdviseSink2 * This); + + ULONG ( __stdcall *Release )( + IAdviseSink2 * This); + + void ( __stdcall *OnDataChange )( + IAdviseSink2 * This, + FORMATETC *pFormatetc, + STGMEDIUM *pStgmed); + + void ( __stdcall *OnViewChange )( + IAdviseSink2 * This, + DWORD dwAspect, + LONG lindex); + + void ( __stdcall *OnRename )( + IAdviseSink2 * This, + IMoniker *pmk); + + void ( __stdcall *OnSave )( + IAdviseSink2 * This); + + void ( __stdcall *OnClose )( + IAdviseSink2 * This); + + void ( __stdcall *OnLinkSrcChange )( + IAdviseSink2 * This, + IMoniker *pmk); + + + } IAdviseSink2Vtbl; + + struct IAdviseSink2 + { + struct IAdviseSink2Vtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6587 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IAdviseSink2_RemoteOnLinkSrcChange_Proxy( + IAdviseSink2 * This, + IAsyncManager * *ppIAM, + IMoniker *pmk); + + +void __stdcall IAdviseSink2_RemoteOnLinkSrcChange_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 6605 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IDataObject *LPDATAOBJECT; + +typedef +enum tagDATADIR + { DATADIR_GET = 1, + DATADIR_SET = 2 + } DATADIR; + + +extern const IID IID_IDataObject; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6674 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IDataObjectVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IDataObject * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IDataObject * This); + + ULONG ( __stdcall *Release )( + IDataObject * This); + + HRESULT ( __stdcall *GetData )( + IDataObject * This, + FORMATETC *pformatetcIn, + STGMEDIUM *pmedium); + + HRESULT ( __stdcall *GetDataHere )( + IDataObject * This, + FORMATETC *pformatetc, + STGMEDIUM *pmedium); + + HRESULT ( __stdcall *QueryGetData )( + IDataObject * This, + FORMATETC *pformatetc); + + HRESULT ( __stdcall *GetCanonicalFormatEtc )( + IDataObject * This, + FORMATETC *pformatectIn, + FORMATETC *pformatetcOut); + + HRESULT ( __stdcall *SetData )( + IDataObject * This, + FORMATETC *pformatetc, + STGMEDIUM *pmedium, + BOOL fRelease); + + HRESULT ( __stdcall *EnumFormatEtc )( + IDataObject * This, + DWORD dwDirection, + IEnumFORMATETC * *ppenumFormatEtc); + + HRESULT ( __stdcall *DAdvise )( + IDataObject * This, + FORMATETC *pformatetc, + DWORD advf, + IAdviseSink *pAdvSink, + DWORD *pdwConnection); + + HRESULT ( __stdcall *DUnadvise )( + IDataObject * This, + DWORD dwConnection); + + HRESULT ( __stdcall *EnumDAdvise )( + IDataObject * This, + IEnumSTATDATA * *ppenumAdvise); + + + } IDataObjectVtbl; + + struct IDataObject + { + struct IDataObjectVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6789 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IDataObject_RemoteGetData_Proxy( + IDataObject * This, + FORMATETC *pformatetcIn, + STGMEDIUM *pRemoteMedium); + + +void __stdcall IDataObject_RemoteGetData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IDataObject_RemoteGetDataHere_Proxy( + IDataObject * This, + FORMATETC *pformatetc, + STGMEDIUM *pRemoteMedium); + + +void __stdcall IDataObject_RemoteGetDataHere_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDataObject_QueryGetData_Proxy( + IDataObject * This, + FORMATETC *pformatetc); + + +void __stdcall IDataObject_QueryGetData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDataObject_GetCanonicalFormatEtc_Proxy( + IDataObject * This, + FORMATETC *pformatectIn, + FORMATETC *pformatetcOut); + + +void __stdcall IDataObject_GetCanonicalFormatEtc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IDataObject_RemoteSetData_Proxy( + IDataObject * This, + FORMATETC *pformatetc, + FLAG_STGMEDIUM *pmedium, + BOOL fRelease); + + +void __stdcall IDataObject_RemoteSetData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDataObject_EnumFormatEtc_Proxy( + IDataObject * This, + DWORD dwDirection, + IEnumFORMATETC * *ppenumFormatEtc); + + +void __stdcall IDataObject_EnumFormatEtc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDataObject_DAdvise_Proxy( + IDataObject * This, + FORMATETC *pformatetc, + DWORD advf, + IAdviseSink *pAdvSink, + DWORD *pdwConnection); + + +void __stdcall IDataObject_DAdvise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDataObject_DUnadvise_Proxy( + IDataObject * This, + DWORD dwConnection); + + +void __stdcall IDataObject_DUnadvise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDataObject_EnumDAdvise_Proxy( + IDataObject * This, + IEnumSTATDATA * *ppenumAdvise); + + +void __stdcall IDataObject_EnumDAdvise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 6911 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IDataAdviseHolder *LPDATAADVISEHOLDER; + + +extern const IID IID_IDataAdviseHolder; + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6956 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IDataAdviseHolderVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IDataAdviseHolder * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IDataAdviseHolder * This); + + ULONG ( __stdcall *Release )( + IDataAdviseHolder * This); + + HRESULT ( __stdcall *Advise )( + IDataAdviseHolder * This, + IDataObject *pDataObject, + FORMATETC *pFetc, + DWORD advf, + IAdviseSink *pAdvise, + DWORD *pdwConnection); + + HRESULT ( __stdcall *Unadvise )( + IDataAdviseHolder * This, + DWORD dwConnection); + + HRESULT ( __stdcall *EnumAdvise )( + IDataAdviseHolder * This, + IEnumSTATDATA * *ppenumAdvise); + + HRESULT ( __stdcall *SendOnDataChange )( + IDataAdviseHolder * This, + IDataObject *pDataObject, + DWORD dwReserved, + DWORD advf); + + + } IDataAdviseHolderVtbl; + + struct IDataAdviseHolder + { + struct IDataAdviseHolderVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7033 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IDataAdviseHolder_Advise_Proxy( + IDataAdviseHolder * This, + IDataObject *pDataObject, + FORMATETC *pFetc, + DWORD advf, + IAdviseSink *pAdvise, + DWORD *pdwConnection); + + +void __stdcall IDataAdviseHolder_Advise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDataAdviseHolder_Unadvise_Proxy( + IDataAdviseHolder * This, + DWORD dwConnection); + + +void __stdcall IDataAdviseHolder_Unadvise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDataAdviseHolder_EnumAdvise_Proxy( + IDataAdviseHolder * This, + IEnumSTATDATA * *ppenumAdvise); + + +void __stdcall IDataAdviseHolder_EnumAdvise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDataAdviseHolder_SendOnDataChange_Proxy( + IDataAdviseHolder * This, + IDataObject *pDataObject, + DWORD dwReserved, + DWORD advf); + + +void __stdcall IDataAdviseHolder_SendOnDataChange_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 7092 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IMessageFilter *LPMESSAGEFILTER; + +typedef +enum tagCALLTYPE + { CALLTYPE_TOPLEVEL = 1, + CALLTYPE_NESTED = 2, + CALLTYPE_ASYNC = 3, + CALLTYPE_TOPLEVEL_CALLPENDING = 4, + CALLTYPE_ASYNC_CALLPENDING = 5 + } CALLTYPE; + +typedef +enum tagSERVERCALL + { SERVERCALL_ISHANDLED = 0, + SERVERCALL_REJECTED = 1, + SERVERCALL_RETRYLATER = 2 + } SERVERCALL; + +typedef +enum tagPENDINGTYPE + { PENDINGTYPE_TOPLEVEL = 1, + PENDINGTYPE_NESTED = 2 + } PENDINGTYPE; + +typedef +enum tagPENDINGMSG + { PENDINGMSG_CANCELCALL = 0, + PENDINGMSG_WAITNOPROCESS = 1, + PENDINGMSG_WAITDEFPROCESS = 2 + } PENDINGMSG; + +typedef struct tagINTERFACEINFO + { + IUnknown *pUnk; + IID iid; + WORD wMethod; + } INTERFACEINFO; + +typedef struct tagINTERFACEINFO *LPINTERFACEINFO; + + +extern const IID IID_IMessageFilter; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7173 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IMessageFilterVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IMessageFilter * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IMessageFilter * This); + + ULONG ( __stdcall *Release )( + IMessageFilter * This); + + DWORD ( __stdcall *HandleInComingCall )( + IMessageFilter * This, + DWORD dwCallType, + HTASK htaskCaller, + DWORD dwTickCount, + LPINTERFACEINFO lpInterfaceInfo); + + DWORD ( __stdcall *RetryRejectedCall )( + IMessageFilter * This, + HTASK htaskCallee, + DWORD dwTickCount, + DWORD dwRejectType); + + DWORD ( __stdcall *MessagePending )( + IMessageFilter * This, + HTASK htaskCallee, + DWORD dwTickCount, + DWORD dwPendingType); + + + } IMessageFilterVtbl; + + struct IMessageFilter + { + struct IMessageFilterVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7244 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +DWORD __stdcall IMessageFilter_HandleInComingCall_Proxy( + IMessageFilter * This, + DWORD dwCallType, + HTASK htaskCaller, + DWORD dwTickCount, + LPINTERFACEINFO lpInterfaceInfo); + + +void __stdcall IMessageFilter_HandleInComingCall_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +DWORD __stdcall IMessageFilter_RetryRejectedCall_Proxy( + IMessageFilter * This, + HTASK htaskCallee, + DWORD dwTickCount, + DWORD dwRejectType); + + +void __stdcall IMessageFilter_RetryRejectedCall_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +DWORD __stdcall IMessageFilter_MessagePending_Proxy( + IMessageFilter * This, + HTASK htaskCallee, + DWORD dwTickCount, + DWORD dwPendingType); + + +void __stdcall IMessageFilter_MessagePending_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 7292 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef unsigned long RPCOLEDATAREP; + +typedef struct tagRPCOLEMESSAGE + { + void *reserved1; + RPCOLEDATAREP dataRepresentation; + void *Buffer; + ULONG cbBuffer; + ULONG iMethod; + void *reserved2[ 5 ]; + ULONG rpcFlags; + } RPCOLEMESSAGE; + +typedef RPCOLEMESSAGE *PRPCOLEMESSAGE; + + +extern const IID IID_IRpcChannelBuffer; + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7349 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IRpcChannelBufferVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IRpcChannelBuffer * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IRpcChannelBuffer * This); + + ULONG ( __stdcall *Release )( + IRpcChannelBuffer * This); + + HRESULT ( __stdcall *GetBuffer )( + IRpcChannelBuffer * This, + RPCOLEMESSAGE *pMessage, + const IID * const riid); + + HRESULT ( __stdcall *SendReceive )( + IRpcChannelBuffer * This, + RPCOLEMESSAGE *pMessage, + ULONG *pStatus); + + HRESULT ( __stdcall *FreeBuffer )( + IRpcChannelBuffer * This, + RPCOLEMESSAGE *pMessage); + + HRESULT ( __stdcall *GetDestCtx )( + IRpcChannelBuffer * This, + DWORD *pdwDestContext, + void * *ppvDestContext); + + HRESULT ( __stdcall *IsConnected )( + IRpcChannelBuffer * This); + + + } IRpcChannelBufferVtbl; + + struct IRpcChannelBuffer + { + struct IRpcChannelBufferVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7429 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IRpcChannelBuffer_GetBuffer_Proxy( + IRpcChannelBuffer * This, + RPCOLEMESSAGE *pMessage, + const IID * const riid); + + +void __stdcall IRpcChannelBuffer_GetBuffer_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcChannelBuffer_SendReceive_Proxy( + IRpcChannelBuffer * This, + RPCOLEMESSAGE *pMessage, + ULONG *pStatus); + + +void __stdcall IRpcChannelBuffer_SendReceive_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcChannelBuffer_FreeBuffer_Proxy( + IRpcChannelBuffer * This, + RPCOLEMESSAGE *pMessage); + + +void __stdcall IRpcChannelBuffer_FreeBuffer_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcChannelBuffer_GetDestCtx_Proxy( + IRpcChannelBuffer * This, + DWORD *pdwDestContext, + void * *ppvDestContext); + + +void __stdcall IRpcChannelBuffer_GetDestCtx_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcChannelBuffer_IsConnected_Proxy( + IRpcChannelBuffer * This); + + +void __stdcall IRpcChannelBuffer_IsConnected_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 7496 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IRpcChannelBuffer2; + + + + + + + + + + + + +#line 7524 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IRpcChannelBuffer2Vtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IRpcChannelBuffer2 * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IRpcChannelBuffer2 * This); + + ULONG ( __stdcall *Release )( + IRpcChannelBuffer2 * This); + + HRESULT ( __stdcall *GetBuffer )( + IRpcChannelBuffer2 * This, + RPCOLEMESSAGE *pMessage, + const IID * const riid); + + HRESULT ( __stdcall *SendReceive )( + IRpcChannelBuffer2 * This, + RPCOLEMESSAGE *pMessage, + ULONG *pStatus); + + HRESULT ( __stdcall *FreeBuffer )( + IRpcChannelBuffer2 * This, + RPCOLEMESSAGE *pMessage); + + HRESULT ( __stdcall *GetDestCtx )( + IRpcChannelBuffer2 * This, + DWORD *pdwDestContext, + void * *ppvDestContext); + + HRESULT ( __stdcall *IsConnected )( + IRpcChannelBuffer2 * This); + + HRESULT ( __stdcall *GetProtocolVersion )( + IRpcChannelBuffer2 * This, + DWORD *pdwVersion); + + + } IRpcChannelBuffer2Vtbl; + + struct IRpcChannelBuffer2 + { + struct IRpcChannelBuffer2Vtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7612 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IRpcChannelBuffer2_GetProtocolVersion_Proxy( + IRpcChannelBuffer2 * This, + DWORD *pdwVersion); + + +void __stdcall IRpcChannelBuffer2_GetProtocolVersion_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 7629 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IRpcChannelBuffer3; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7684 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IRpcChannelBuffer3Vtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IRpcChannelBuffer3 * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IRpcChannelBuffer3 * This); + + ULONG ( __stdcall *Release )( + IRpcChannelBuffer3 * This); + + HRESULT ( __stdcall *GetBuffer )( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMessage, + const IID * const riid); + + HRESULT ( __stdcall *SendReceive )( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMessage, + ULONG *pStatus); + + HRESULT ( __stdcall *FreeBuffer )( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMessage); + + HRESULT ( __stdcall *GetDestCtx )( + IRpcChannelBuffer3 * This, + DWORD *pdwDestContext, + void * *ppvDestContext); + + HRESULT ( __stdcall *IsConnected )( + IRpcChannelBuffer3 * This); + + HRESULT ( __stdcall *GetProtocolVersion )( + IRpcChannelBuffer3 * This, + DWORD *pdwVersion); + + HRESULT ( __stdcall *Send )( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + ULONG *pulStatus); + + HRESULT ( __stdcall *Receive )( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + ULONG ulSize, + ULONG *pulStatus); + + HRESULT ( __stdcall *Cancel )( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg); + + HRESULT ( __stdcall *GetCallContext )( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + const IID * const riid, + void * *pInterface); + + HRESULT ( __stdcall *GetDestCtxEx )( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + DWORD *pdwDestContext, + void * *ppvDestContext); + + HRESULT ( __stdcall *GetState )( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + DWORD *pState); + + HRESULT ( __stdcall *RegisterAsync )( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + IAsyncManager *pAsyncMgr); + + + } IRpcChannelBuffer3Vtbl; + + struct IRpcChannelBuffer3 + { + struct IRpcChannelBuffer3Vtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 7831 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IRpcChannelBuffer3_Send_Proxy( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + ULONG *pulStatus); + + +void __stdcall IRpcChannelBuffer3_Send_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcChannelBuffer3_Receive_Proxy( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + ULONG ulSize, + ULONG *pulStatus); + + +void __stdcall IRpcChannelBuffer3_Receive_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcChannelBuffer3_Cancel_Proxy( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg); + + +void __stdcall IRpcChannelBuffer3_Cancel_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcChannelBuffer3_GetCallContext_Proxy( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + const IID * const riid, + void * *pInterface); + + +void __stdcall IRpcChannelBuffer3_GetCallContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcChannelBuffer3_GetDestCtxEx_Proxy( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + DWORD *pdwDestContext, + void * *ppvDestContext); + + +void __stdcall IRpcChannelBuffer3_GetDestCtxEx_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcChannelBuffer3_GetState_Proxy( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + DWORD *pState); + + +void __stdcall IRpcChannelBuffer3_GetState_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcChannelBuffer3_RegisterAsync_Proxy( + IRpcChannelBuffer3 * This, + RPCOLEMESSAGE *pMsg, + IAsyncManager *pAsyncMgr); + + +void __stdcall IRpcChannelBuffer3_RegisterAsync_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 7929 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IRpcProxyBuffer; + + + + + + + + + + + + + + +#line 7959 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IRpcProxyBufferVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IRpcProxyBuffer * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IRpcProxyBuffer * This); + + ULONG ( __stdcall *Release )( + IRpcProxyBuffer * This); + + HRESULT ( __stdcall *Connect )( + IRpcProxyBuffer * This, + IRpcChannelBuffer *pRpcChannelBuffer); + + void ( __stdcall *Disconnect )( + IRpcProxyBuffer * This); + + + } IRpcProxyBufferVtbl; + + struct IRpcProxyBuffer + { + struct IRpcProxyBufferVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8015 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IRpcProxyBuffer_Connect_Proxy( + IRpcProxyBuffer * This, + IRpcChannelBuffer *pRpcChannelBuffer); + + +void __stdcall IRpcProxyBuffer_Connect_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void __stdcall IRpcProxyBuffer_Disconnect_Proxy( + IRpcProxyBuffer * This); + + +void __stdcall IRpcProxyBuffer_Disconnect_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 8043 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IRpcStubBuffer; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8088 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IRpcStubBufferVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IRpcStubBuffer * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IRpcStubBuffer * This); + + ULONG ( __stdcall *Release )( + IRpcStubBuffer * This); + + HRESULT ( __stdcall *Connect )( + IRpcStubBuffer * This, + IUnknown *pUnkServer); + + void ( __stdcall *Disconnect )( + IRpcStubBuffer * This); + + HRESULT ( __stdcall *Invoke )( + IRpcStubBuffer * This, + RPCOLEMESSAGE *_prpcmsg, + IRpcChannelBuffer *_pRpcChannelBuffer); + + IRpcStubBuffer *( __stdcall *IsIIDSupported )( + IRpcStubBuffer * This, + const IID * const riid); + + ULONG ( __stdcall *CountRefs )( + IRpcStubBuffer * This); + + HRESULT ( __stdcall *DebugServerQueryInterface )( + IRpcStubBuffer * This, + void * *ppv); + + void ( __stdcall *DebugServerRelease )( + IRpcStubBuffer * This, + void *pv); + + + } IRpcStubBufferVtbl; + + struct IRpcStubBuffer + { + struct IRpcStubBufferVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8179 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IRpcStubBuffer_Connect_Proxy( + IRpcStubBuffer * This, + IUnknown *pUnkServer); + + +void __stdcall IRpcStubBuffer_Connect_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void __stdcall IRpcStubBuffer_Disconnect_Proxy( + IRpcStubBuffer * This); + + +void __stdcall IRpcStubBuffer_Disconnect_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcStubBuffer_Invoke_Proxy( + IRpcStubBuffer * This, + RPCOLEMESSAGE *_prpcmsg, + IRpcChannelBuffer *_pRpcChannelBuffer); + + +void __stdcall IRpcStubBuffer_Invoke_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +IRpcStubBuffer *__stdcall IRpcStubBuffer_IsIIDSupported_Proxy( + IRpcStubBuffer * This, + const IID * const riid); + + +void __stdcall IRpcStubBuffer_IsIIDSupported_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +ULONG __stdcall IRpcStubBuffer_CountRefs_Proxy( + IRpcStubBuffer * This); + + +void __stdcall IRpcStubBuffer_CountRefs_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRpcStubBuffer_DebugServerQueryInterface_Proxy( + IRpcStubBuffer * This, + void * *ppv); + + +void __stdcall IRpcStubBuffer_DebugServerQueryInterface_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +void __stdcall IRpcStubBuffer_DebugServerRelease_Proxy( + IRpcStubBuffer * This, + void *pv); + + +void __stdcall IRpcStubBuffer_DebugServerRelease_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 8267 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IPSFactoryBuffer; + + + + + + + + + + + + + + + + + + + + +#line 8303 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IPSFactoryBufferVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IPSFactoryBuffer * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IPSFactoryBuffer * This); + + ULONG ( __stdcall *Release )( + IPSFactoryBuffer * This); + + HRESULT ( __stdcall *CreateProxy )( + IPSFactoryBuffer * This, + IUnknown *pUnkOuter, + const IID * const riid, + IRpcProxyBuffer * *ppProxy, + void * *ppv); + + HRESULT ( __stdcall *CreateStub )( + IPSFactoryBuffer * This, + const IID * const riid, + IUnknown *pUnkServer, + IRpcStubBuffer * *ppStub); + + + } IPSFactoryBufferVtbl; + + struct IPSFactoryBuffer + { + struct IPSFactoryBufferVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8365 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IPSFactoryBuffer_CreateProxy_Proxy( + IPSFactoryBuffer * This, + IUnknown *pUnkOuter, + const IID * const riid, + IRpcProxyBuffer * *ppProxy, + void * *ppv); + + +void __stdcall IPSFactoryBuffer_CreateProxy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPSFactoryBuffer_CreateStub_Proxy( + IPSFactoryBuffer * This, + const IID * const riid, + IUnknown *pUnkServer, + IRpcStubBuffer * *ppStub); + + +void __stdcall IPSFactoryBuffer_CreateStub_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 8399 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 8703 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + +extern RPC_IF_HANDLE __MIDL_itf_objidl_0044_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_objidl_0044_v0_0_s_ifspec; + + + + + + + + + + + + + + +extern const FMTID FMTID_SummaryInformation; + +extern const FMTID FMTID_DocSummaryInformation; + +extern const FMTID FMTID_UserDefinedProperties; + + + + + + + + + + + + +typedef IPropertyStorage *LPPROPERTYSTORAGE; + +typedef struct tagPROPVARIANT PROPVARIANT; + +typedef struct tagCAUB + { + ULONG cElems; + unsigned char *pElems; + } CAUB; + +typedef struct tagCAI + { + ULONG cElems; + short *pElems; + } CAI; + +typedef struct tagCAUI + { + ULONG cElems; + USHORT *pElems; + } CAUI; + +typedef struct tagCAL + { + ULONG cElems; + long *pElems; + } CAL; + +typedef struct tagCAUL + { + ULONG cElems; + ULONG *pElems; + } CAUL; + +typedef struct tagCAFLT + { + ULONG cElems; + float *pElems; + } CAFLT; + +typedef struct tagCADBL + { + ULONG cElems; + double *pElems; + } CADBL; + +typedef struct tagCACY + { + ULONG cElems; + CY *pElems; + } CACY; + +typedef struct tagCADATE + { + ULONG cElems; + DATE *pElems; + } CADATE; + +typedef struct tagCABSTR + { + ULONG cElems; + BSTR *pElems; + } CABSTR; + +typedef struct tagCABSTRBLOB + { + ULONG cElems; + BSTRBLOB *pElems; + } CABSTRBLOB; + +typedef struct tagCABOOL + { + ULONG cElems; + VARIANT_BOOL *pElems; + } CABOOL; + +typedef struct tagCASCODE + { + ULONG cElems; + SCODE *pElems; + } CASCODE; + +typedef struct tagCAPROPVARIANT + { + ULONG cElems; + PROPVARIANT *pElems; + } CAPROPVARIANT; + +typedef struct tagCAH + { + ULONG cElems; + LARGE_INTEGER *pElems; + } CAH; + +typedef struct tagCAUH + { + ULONG cElems; + ULARGE_INTEGER *pElems; + } CAUH; + +typedef struct tagCALPSTR + { + ULONG cElems; + LPSTR *pElems; + } CALPSTR; + +typedef struct tagCALPWSTR + { + ULONG cElems; + LPWSTR *pElems; + } CALPWSTR; + +typedef struct tagCAFILETIME + { + ULONG cElems; + FILETIME *pElems; + } CAFILETIME; + +typedef struct tagCACLIPDATA + { + ULONG cElems; + CLIPDATA *pElems; + } CACLIPDATA; + +typedef struct tagCACLSID + { + ULONG cElems; + CLSID *pElems; + } CACLSID; + + + + +#pragma warning(disable:4237) +struct tagPROPVARIANT + { + VARTYPE vt; + WORD wReserved1; + WORD wReserved2; + WORD wReserved3; + union + { + + UCHAR bVal; + short iVal; + USHORT uiVal; + VARIANT_BOOL boolVal; + + long lVal; + ULONG ulVal; + float fltVal; + SCODE scode; + LARGE_INTEGER hVal; + ULARGE_INTEGER uhVal; + double dblVal; + CY cyVal; + DATE date; + FILETIME filetime; + CLSID *puuid; + BLOB blob; + CLIPDATA *pclipdata; + IStream *pStream; + IStorage *pStorage; + BSTR bstrVal; + BSTRBLOB bstrblobVal; + LPSTR pszVal; + LPWSTR pwszVal; + CAUB caub; + CAI cai; + CAUI caui; + CABOOL cabool; + CAL cal; + CAUL caul; + CAFLT caflt; + CASCODE cascode; + CAH cah; + CAUH cauh; + CADBL cadbl; + CACY cacy; + CADATE cadate; + CAFILETIME cafiletime; + CACLSID cauuid; + CACLIPDATA caclipdata; + CABSTR cabstr; + CABSTRBLOB cabstrblob; + CALPSTR calpstr; + CALPWSTR calpwstr; + CAPROPVARIANT capropvar; + } ; + }; +typedef struct tagPROPVARIANT *LPPROPVARIANT; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct tagPROPSPEC + { + ULONG ulKind; + union + { + PROPID propid; + LPOLESTR lpwstr; + + } ; + } PROPSPEC; + +typedef struct tagSTATPROPSTG + { + LPOLESTR lpwstrName; + PROPID propid; + VARTYPE vt; + } STATPROPSTG; + + + + + + +typedef struct tagSTATPROPSETSTG + { + FMTID fmtid; + CLSID clsid; + DWORD grfFlags; + FILETIME mtime; + FILETIME ctime; + FILETIME atime; + DWORD dwOSVersion; + } STATPROPSETSTG; + + +extern const IID IID_IPropertyStorage; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 9070 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IPropertyStorageVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IPropertyStorage * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IPropertyStorage * This); + + ULONG ( __stdcall *Release )( + IPropertyStorage * This); + + HRESULT ( __stdcall *ReadMultiple )( + IPropertyStorage * This, + ULONG cpspec, + const PROPSPEC rgpspec[ ], + PROPVARIANT rgpropvar[ ]); + + HRESULT ( __stdcall *WriteMultiple )( + IPropertyStorage * This, + ULONG cpspec, + const PROPSPEC rgpspec[ ], + const PROPVARIANT rgpropvar[ ], + PROPID propidNameFirst); + + HRESULT ( __stdcall *DeleteMultiple )( + IPropertyStorage * This, + ULONG cpspec, + const PROPSPEC rgpspec[ ]); + + HRESULT ( __stdcall *ReadPropertyNames )( + IPropertyStorage * This, + ULONG cpropid, + const PROPID rgpropid[ ], + LPOLESTR rglpwstrName[ ]); + + HRESULT ( __stdcall *WritePropertyNames )( + IPropertyStorage * This, + ULONG cpropid, + const PROPID rgpropid[ ], + const LPOLESTR rglpwstrName[ ]); + + HRESULT ( __stdcall *DeletePropertyNames )( + IPropertyStorage * This, + ULONG cpropid, + const PROPID rgpropid[ ]); + + HRESULT ( __stdcall *Commit )( + IPropertyStorage * This, + DWORD grfCommitFlags); + + HRESULT ( __stdcall *Revert )( + IPropertyStorage * This); + + HRESULT ( __stdcall *Enum )( + IPropertyStorage * This, + IEnumSTATPROPSTG * *ppenum); + + HRESULT ( __stdcall *SetTimes )( + IPropertyStorage * This, + const FILETIME *pctime, + const FILETIME *patime, + const FILETIME *pmtime); + + HRESULT ( __stdcall *SetClass )( + IPropertyStorage * This, + const CLSID * const clsid); + + HRESULT ( __stdcall *Stat )( + IPropertyStorage * This, + STATPROPSETSTG *pstatpsstg); + + + } IPropertyStorageVtbl; + + struct IPropertyStorage + { + struct IPropertyStorageVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 9209 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IPropertyStorage_ReadMultiple_Proxy( + IPropertyStorage * This, + ULONG cpspec, + const PROPSPEC rgpspec[ ], + PROPVARIANT rgpropvar[ ]); + + +void __stdcall IPropertyStorage_ReadMultiple_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertyStorage_WriteMultiple_Proxy( + IPropertyStorage * This, + ULONG cpspec, + const PROPSPEC rgpspec[ ], + const PROPVARIANT rgpropvar[ ], + PROPID propidNameFirst); + + +void __stdcall IPropertyStorage_WriteMultiple_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertyStorage_DeleteMultiple_Proxy( + IPropertyStorage * This, + ULONG cpspec, + const PROPSPEC rgpspec[ ]); + + +void __stdcall IPropertyStorage_DeleteMultiple_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertyStorage_ReadPropertyNames_Proxy( + IPropertyStorage * This, + ULONG cpropid, + const PROPID rgpropid[ ], + LPOLESTR rglpwstrName[ ]); + + +void __stdcall IPropertyStorage_ReadPropertyNames_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertyStorage_WritePropertyNames_Proxy( + IPropertyStorage * This, + ULONG cpropid, + const PROPID rgpropid[ ], + const LPOLESTR rglpwstrName[ ]); + + +void __stdcall IPropertyStorage_WritePropertyNames_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertyStorage_DeletePropertyNames_Proxy( + IPropertyStorage * This, + ULONG cpropid, + const PROPID rgpropid[ ]); + + +void __stdcall IPropertyStorage_DeletePropertyNames_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertyStorage_Commit_Proxy( + IPropertyStorage * This, + DWORD grfCommitFlags); + + +void __stdcall IPropertyStorage_Commit_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertyStorage_Revert_Proxy( + IPropertyStorage * This); + + +void __stdcall IPropertyStorage_Revert_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertyStorage_Enum_Proxy( + IPropertyStorage * This, + IEnumSTATPROPSTG * *ppenum); + + +void __stdcall IPropertyStorage_Enum_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertyStorage_SetTimes_Proxy( + IPropertyStorage * This, + const FILETIME *pctime, + const FILETIME *patime, + const FILETIME *pmtime); + + +void __stdcall IPropertyStorage_SetTimes_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertyStorage_SetClass_Proxy( + IPropertyStorage * This, + const CLSID * const clsid); + + +void __stdcall IPropertyStorage_SetClass_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertyStorage_Stat_Proxy( + IPropertyStorage * This, + STATPROPSETSTG *pstatpsstg); + + +void __stdcall IPropertyStorage_Stat_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 9370 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IPropertySetStorage *LPPROPERTYSETSTORAGE; + + +extern const IID IID_IPropertySetStorage; + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 9415 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IPropertySetStorageVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IPropertySetStorage * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IPropertySetStorage * This); + + ULONG ( __stdcall *Release )( + IPropertySetStorage * This); + + HRESULT ( __stdcall *Create )( + IPropertySetStorage * This, + const FMTID * const rfmtid, + const CLSID *pclsid, + DWORD grfFlags, + DWORD grfMode, + IPropertyStorage * *ppprstg); + + HRESULT ( __stdcall *Open )( + IPropertySetStorage * This, + const FMTID * const rfmtid, + DWORD grfMode, + IPropertyStorage * *ppprstg); + + HRESULT ( __stdcall *Delete )( + IPropertySetStorage * This, + const FMTID * const rfmtid); + + HRESULT ( __stdcall *Enum )( + IPropertySetStorage * This, + IEnumSTATPROPSETSTG * *ppenum); + + + } IPropertySetStorageVtbl; + + struct IPropertySetStorage + { + struct IPropertySetStorageVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 9492 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IPropertySetStorage_Create_Proxy( + IPropertySetStorage * This, + const FMTID * const rfmtid, + const CLSID *pclsid, + DWORD grfFlags, + DWORD grfMode, + IPropertyStorage * *ppprstg); + + +void __stdcall IPropertySetStorage_Create_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertySetStorage_Open_Proxy( + IPropertySetStorage * This, + const FMTID * const rfmtid, + DWORD grfMode, + IPropertyStorage * *ppprstg); + + +void __stdcall IPropertySetStorage_Open_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertySetStorage_Delete_Proxy( + IPropertySetStorage * This, + const FMTID * const rfmtid); + + +void __stdcall IPropertySetStorage_Delete_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPropertySetStorage_Enum_Proxy( + IPropertySetStorage * This, + IEnumSTATPROPSETSTG * *ppenum); + + +void __stdcall IPropertySetStorage_Enum_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 9551 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IEnumSTATPROPSTG *LPENUMSTATPROPSTG; + + +extern const IID IID_IEnumSTATPROPSTG; + + + + + + + + + + + + + + + + + + + + + + +#line 9591 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IEnumSTATPROPSTGVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumSTATPROPSTG * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumSTATPROPSTG * This); + + ULONG ( __stdcall *Release )( + IEnumSTATPROPSTG * This); + + HRESULT ( __stdcall *Next )( + IEnumSTATPROPSTG * This, + ULONG celt, + STATPROPSTG *rgelt, + ULONG *pceltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumSTATPROPSTG * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumSTATPROPSTG * This); + + HRESULT ( __stdcall *Clone )( + IEnumSTATPROPSTG * This, + IEnumSTATPROPSTG * *ppenum); + + + } IEnumSTATPROPSTGVtbl; + + struct IEnumSTATPROPSTG + { + struct IEnumSTATPROPSTGVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 9663 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IEnumSTATPROPSTG_RemoteNext_Proxy( + IEnumSTATPROPSTG * This, + ULONG celt, + STATPROPSTG *rgelt, + ULONG *pceltFetched); + + +void __stdcall IEnumSTATPROPSTG_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATPROPSTG_Skip_Proxy( + IEnumSTATPROPSTG * This, + ULONG celt); + + +void __stdcall IEnumSTATPROPSTG_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATPROPSTG_Reset_Proxy( + IEnumSTATPROPSTG * This); + + +void __stdcall IEnumSTATPROPSTG_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATPROPSTG_Clone_Proxy( + IEnumSTATPROPSTG * This, + IEnumSTATPROPSTG * *ppenum); + + +void __stdcall IEnumSTATPROPSTG_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 9717 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG; + + +extern const IID IID_IEnumSTATPROPSETSTG; + + + + + + + + + + + + + + + + + + + + + + +#line 9757 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IEnumSTATPROPSETSTGVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumSTATPROPSETSTG * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumSTATPROPSETSTG * This); + + ULONG ( __stdcall *Release )( + IEnumSTATPROPSETSTG * This); + + HRESULT ( __stdcall *Next )( + IEnumSTATPROPSETSTG * This, + ULONG celt, + STATPROPSETSTG *rgelt, + ULONG *pceltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumSTATPROPSETSTG * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumSTATPROPSETSTG * This); + + HRESULT ( __stdcall *Clone )( + IEnumSTATPROPSETSTG * This, + IEnumSTATPROPSETSTG * *ppenum); + + + } IEnumSTATPROPSETSTGVtbl; + + struct IEnumSTATPROPSETSTG + { + struct IEnumSTATPROPSETSTGVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 9829 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IEnumSTATPROPSETSTG_RemoteNext_Proxy( + IEnumSTATPROPSETSTG * This, + ULONG celt, + STATPROPSETSTG *rgelt, + ULONG *pceltFetched); + + +void __stdcall IEnumSTATPROPSETSTG_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATPROPSETSTG_Skip_Proxy( + IEnumSTATPROPSETSTG * This, + ULONG celt); + + +void __stdcall IEnumSTATPROPSETSTG_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATPROPSETSTG_Reset_Proxy( + IEnumSTATPROPSETSTG * This); + + +void __stdcall IEnumSTATPROPSETSTG_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumSTATPROPSETSTG_Clone_Proxy( + IEnumSTATPROPSETSTG * This, + IEnumSTATPROPSETSTG * *ppenum); + + +void __stdcall IEnumSTATPROPSETSTG_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 9883 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + +extern __declspec(dllimport) HRESULT __stdcall PropVariantCopy ( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc ); +extern __declspec(dllimport) HRESULT __stdcall PropVariantClear ( PROPVARIANT * pvar ); +extern __declspec(dllimport) HRESULT __stdcall FreePropVariantArray ( ULONG cVariants, PROPVARIANT * rgvars ); + + + + + + + + + +#line 9906 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +extern __declspec(dllimport) HRESULT __stdcall StgCreatePropStg( IUnknown* pUnk, const FMTID * const fmtid, const CLSID *pclsid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg ); +extern __declspec(dllimport) HRESULT __stdcall StgOpenPropStg( IUnknown* pUnk, const FMTID * const fmtid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg ); +extern __declspec(dllimport) HRESULT __stdcall StgCreatePropSetStg( IStorage *pStorage, DWORD dwReserved, IPropertySetStorage **ppPropSetStg); + + +extern __declspec(dllimport) HRESULT __stdcall FmtIdToPropStgName( const FMTID *pfmtid, LPOLESTR oszName ); +extern __declspec(dllimport) HRESULT __stdcall PropStgNameToFmtId( const LPOLESTR oszName, FMTID *pfmtid ); +#line 9917 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 10726 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + +extern RPC_IF_HANDLE __MIDL_itf_objidl_0053_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_objidl_0053_v0_0_s_ifspec; + + + + + + + + + + + + + +extern const IID IID_IFillLockBytes; + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 10771 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IFillLockBytesVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IFillLockBytes * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IFillLockBytes * This); + + ULONG ( __stdcall *Release )( + IFillLockBytes * This); + + HRESULT ( __stdcall *FillAppend )( + IFillLockBytes * This, + const void *pv, + ULONG cb, + ULONG *pcbWritten); + + HRESULT ( __stdcall *FillAt )( + IFillLockBytes * This, + ULARGE_INTEGER ulOffset, + const void *pv, + ULONG cb, + ULONG *pcbWritten); + + HRESULT ( __stdcall *SetFillSize )( + IFillLockBytes * This, + ULARGE_INTEGER ulSize); + + HRESULT ( __stdcall *Terminate )( + IFillLockBytes * This, + BOOL bCanceled); + + + } IFillLockBytesVtbl; + + struct IFillLockBytes + { + struct IFillLockBytesVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 10847 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + HRESULT __stdcall IFillLockBytes_RemoteFillAppend_Proxy( + IFillLockBytes * This, + const byte *pv, + ULONG cb, + ULONG *pcbWritten); + + +void __stdcall IFillLockBytes_RemoteFillAppend_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IFillLockBytes_RemoteFillAt_Proxy( + IFillLockBytes * This, + ULARGE_INTEGER ulOffset, + const byte *pv, + ULONG cb, + ULONG *pcbWritten); + + +void __stdcall IFillLockBytes_RemoteFillAt_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IFillLockBytes_SetFillSize_Proxy( + IFillLockBytes * This, + ULARGE_INTEGER ulSize); + + +void __stdcall IFillLockBytes_SetFillSize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IFillLockBytes_Terminate_Proxy( + IFillLockBytes * This, + BOOL bCanceled); + + +void __stdcall IFillLockBytes_Terminate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 10905 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IProgressNotify; + + + + + + + + + + + + + + + +#line 10936 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IProgressNotifyVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IProgressNotify * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IProgressNotify * This); + + ULONG ( __stdcall *Release )( + IProgressNotify * This); + + HRESULT ( __stdcall *OnProgress )( + IProgressNotify * This, + DWORD dwProgressCurrent, + DWORD dwProgressMaximum, + BOOL fAccurate, + BOOL fOwner); + + + } IProgressNotifyVtbl; + + struct IProgressNotify + { + struct IProgressNotifyVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 10989 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IProgressNotify_OnProgress_Proxy( + IProgressNotify * This, + DWORD dwProgressCurrent, + DWORD dwProgressMaximum, + BOOL fAccurate, + BOOL fOwner); + + +void __stdcall IProgressNotify_OnProgress_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 11009 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef struct tagStorageLayout + { + DWORD LayoutType; + OLECHAR *pwcsElementName; + LARGE_INTEGER cOffset; + LARGE_INTEGER cBytes; + } StorageLayout; + + +extern const IID IID_ILayoutStorage; + + + + + + + + + + + + + + + + + + + + + + + + +#line 11057 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct ILayoutStorageVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ILayoutStorage * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ILayoutStorage * This); + + ULONG ( __stdcall *Release )( + ILayoutStorage * This); + + HRESULT ( __stdcall *LayoutScript )( + ILayoutStorage * This, + StorageLayout *pStorageLayout, + DWORD nEntries, + DWORD glfInterleavedFlag); + + HRESULT ( __stdcall *BeginMonitor )( + ILayoutStorage * This); + + HRESULT ( __stdcall *EndMonitor )( + ILayoutStorage * This); + + HRESULT ( __stdcall *ReLayoutDocfile )( + ILayoutStorage * This, + OLECHAR *pwcsNewDfName); + + HRESULT ( __stdcall *ReLayoutDocfileOnILockBytes )( + ILayoutStorage * This, + ILockBytes *pILockBytes); + + + } ILayoutStorageVtbl; + + struct ILayoutStorage + { + struct ILayoutStorageVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 11135 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall ILayoutStorage_LayoutScript_Proxy( + ILayoutStorage * This, + StorageLayout *pStorageLayout, + DWORD nEntries, + DWORD glfInterleavedFlag); + + +void __stdcall ILayoutStorage_LayoutScript_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ILayoutStorage_BeginMonitor_Proxy( + ILayoutStorage * This); + + +void __stdcall ILayoutStorage_BeginMonitor_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ILayoutStorage_EndMonitor_Proxy( + ILayoutStorage * This); + + +void __stdcall ILayoutStorage_EndMonitor_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ILayoutStorage_ReLayoutDocfile_Proxy( + ILayoutStorage * This, + OLECHAR *pwcsNewDfName); + + +void __stdcall ILayoutStorage_ReLayoutDocfile_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ILayoutStorage_ReLayoutDocfileOnILockBytes_Proxy( + ILayoutStorage * This, + ILockBytes *pILockBytes); + + +void __stdcall ILayoutStorage_ReLayoutDocfileOnILockBytes_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 11200 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef ISurrogate *LPSURROGATE; + + +extern const IID IID_ISurrogate; + + + + + + + + + + + + + + +#line 11232 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct ISurrogateVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ISurrogate * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ISurrogate * This); + + ULONG ( __stdcall *Release )( + ISurrogate * This); + + HRESULT ( __stdcall *LoadDllServer )( + ISurrogate * This, + const CLSID * const Clsid); + + HRESULT ( __stdcall *FreeSurrogate )( + ISurrogate * This); + + + } ISurrogateVtbl; + + struct ISurrogate + { + struct ISurrogateVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 11288 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall ISurrogate_LoadDllServer_Proxy( + ISurrogate * This, + const CLSID * const Clsid); + + +void __stdcall ISurrogate_LoadDllServer_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ISurrogate_FreeSurrogate_Proxy( + ISurrogate * This); + + +void __stdcall ISurrogate_FreeSurrogate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 11316 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef IGlobalInterfaceTable *LPGLOBALINTERFACETABLE; + + +extern const IID IID_IGlobalInterfaceTable; + + + + + + + + + + + + + + + + + + + + + + +#line 11356 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IGlobalInterfaceTableVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IGlobalInterfaceTable * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IGlobalInterfaceTable * This); + + ULONG ( __stdcall *Release )( + IGlobalInterfaceTable * This); + + HRESULT ( __stdcall *RegisterInterfaceInGlobal )( + IGlobalInterfaceTable * This, + IUnknown *pUnk, + const IID * const riid, + DWORD *pdwCookie); + + HRESULT ( __stdcall *RevokeInterfaceFromGlobal )( + IGlobalInterfaceTable * This, + DWORD dwCookie); + + HRESULT ( __stdcall *GetInterfaceFromGlobal )( + IGlobalInterfaceTable * This, + DWORD dwCookie, + const IID * const riid, + void * *ppv); + + + } IGlobalInterfaceTableVtbl; + + struct IGlobalInterfaceTable + { + struct IGlobalInterfaceTableVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 11424 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IGlobalInterfaceTable_RegisterInterfaceInGlobal_Proxy( + IGlobalInterfaceTable * This, + IUnknown *pUnk, + const IID * const riid, + DWORD *pdwCookie); + + +void __stdcall IGlobalInterfaceTable_RegisterInterfaceInGlobal_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Proxy( + IGlobalInterfaceTable * This, + DWORD dwCookie); + + +void __stdcall IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IGlobalInterfaceTable_GetInterfaceFromGlobal_Proxy( + IGlobalInterfaceTable * This, + DWORD dwCookie, + const IID * const riid, + void * *ppv); + + +void __stdcall IGlobalInterfaceTable_GetInterfaceFromGlobal_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 11469 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IDirectWriterLock; + + + + + + + + + + + + + + + + +#line 11501 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IDirectWriterLockVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IDirectWriterLock * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IDirectWriterLock * This); + + ULONG ( __stdcall *Release )( + IDirectWriterLock * This); + + HRESULT ( __stdcall *WaitForWriteAccess )( + IDirectWriterLock * This, + DWORD dwTimeout); + + HRESULT ( __stdcall *ReleaseWriteAccess )( + IDirectWriterLock * This); + + HRESULT ( __stdcall *HaveWriteAccess )( + IDirectWriterLock * This); + + + } IDirectWriterLockVtbl; + + struct IDirectWriterLock + { + struct IDirectWriterLockVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 11563 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IDirectWriterLock_WaitForWriteAccess_Proxy( + IDirectWriterLock * This, + DWORD dwTimeout); + + +void __stdcall IDirectWriterLock_WaitForWriteAccess_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDirectWriterLock_ReleaseWriteAccess_Proxy( + IDirectWriterLock * This); + + +void __stdcall IDirectWriterLock_ReleaseWriteAccess_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDirectWriterLock_HaveWriteAccess_Proxy( + IDirectWriterLock * This); + + +void __stdcall IDirectWriterLock_HaveWriteAccess_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 11602 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_ISynchronize; + + + + + + + + + + + + + + + + +#line 11634 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct ISynchronizeVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ISynchronize * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ISynchronize * This); + + ULONG ( __stdcall *Release )( + ISynchronize * This); + + HRESULT ( __stdcall *Wait )( + ISynchronize * This, + DWORD dwMilliseconds); + + HRESULT ( __stdcall *Signal )( + ISynchronize * This); + + HRESULT ( __stdcall *Reset )( + ISynchronize * This); + + + } ISynchronizeVtbl; + + struct ISynchronize + { + struct ISynchronizeVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 11696 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall ISynchronize_Wait_Proxy( + ISynchronize * This, + DWORD dwMilliseconds); + + +void __stdcall ISynchronize_Wait_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ISynchronize_Signal_Proxy( + ISynchronize * This); + + +void __stdcall ISynchronize_Signal_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ISynchronize_Reset_Proxy( + ISynchronize * This); + + +void __stdcall ISynchronize_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 11735 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_ISynchronizeMutex; + + + + + + + + + + + +#line 11762 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct ISynchronizeMutexVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ISynchronizeMutex * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ISynchronizeMutex * This); + + ULONG ( __stdcall *Release )( + ISynchronizeMutex * This); + + HRESULT ( __stdcall *Wait )( + ISynchronizeMutex * This, + DWORD dwMilliseconds); + + HRESULT ( __stdcall *Signal )( + ISynchronizeMutex * This); + + HRESULT ( __stdcall *Reset )( + ISynchronizeMutex * This); + + HRESULT ( __stdcall *ReleaseMutex )( + ISynchronizeMutex * This); + + + } ISynchronizeMutexVtbl; + + struct ISynchronizeMutex + { + struct ISynchronizeMutexVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 11831 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall ISynchronizeMutex_ReleaseMutex_Proxy( + ISynchronizeMutex * This); + + +void __stdcall ISynchronizeMutex_ReleaseMutex_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 11847 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IAsyncSetup; + + + + + + + + + + + + + + + + +#line 11879 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IAsyncSetupVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IAsyncSetup * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IAsyncSetup * This); + + ULONG ( __stdcall *Release )( + IAsyncSetup * This); + + HRESULT ( __stdcall *GetAsyncManager )( + IAsyncSetup * This, + const IID * const riid, + IUnknown *pOuter, + DWORD dwFlags, + IUnknown * *ppInner, + IAsyncManager * *ppAsyncMgr); + + + } IAsyncSetupVtbl; + + struct IAsyncSetup + { + struct IAsyncSetupVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 11933 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IAsyncSetup_GetAsyncManager_Proxy( + IAsyncSetup * This, + const IID * const riid, + IUnknown *pOuter, + DWORD dwFlags, + IUnknown * *ppInner, + IAsyncManager * *ppAsyncMgr); + + +void __stdcall IAsyncSetup_GetAsyncManager_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 11954 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef ICancelMethodCalls *LPCANCELMETHODCALLS; + + +extern const IID IID_ICancelMethodCalls; + + + + + + + + + + + + + + + + +#line 11988 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct ICancelMethodCallsVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ICancelMethodCalls * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ICancelMethodCalls * This); + + ULONG ( __stdcall *Release )( + ICancelMethodCalls * This); + + HRESULT ( __stdcall *Cancel )( + ICancelMethodCalls * This); + + HRESULT ( __stdcall *TestCancel )( + ICancelMethodCalls * This); + + HRESULT ( __stdcall *SetCancelTimeout )( + ICancelMethodCalls * This, + ULONG ulSeconds); + + + } ICancelMethodCallsVtbl; + + struct ICancelMethodCalls + { + struct ICancelMethodCallsVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 12050 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall ICancelMethodCalls_Cancel_Proxy( + ICancelMethodCalls * This); + + +void __stdcall ICancelMethodCalls_Cancel_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICancelMethodCalls_TestCancel_Proxy( + ICancelMethodCalls * This); + + +void __stdcall ICancelMethodCalls_TestCancel_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICancelMethodCalls_SetCancelTimeout_Proxy( + ICancelMethodCalls * This, + ULONG ulSeconds); + + +void __stdcall ICancelMethodCalls_SetCancelTimeout_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 12089 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef +enum tagDCOM_CALL_STATE + { DCOM_NONE = 0, + DCOM_CALL_COMPLETE = 0x1, + DCOM_CALL_CANCELED = 0x2 + } DCOM_CALL_STATE; + + +extern const IID IID_IAsyncManager; + + + + + + + + + + + + + + + + + + + +#line 12131 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IAsyncManagerVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IAsyncManager * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IAsyncManager * This); + + ULONG ( __stdcall *Release )( + IAsyncManager * This); + + HRESULT ( __stdcall *CompleteCall )( + IAsyncManager * This, + HRESULT Result); + + HRESULT ( __stdcall *GetCallContext )( + IAsyncManager * This, + const IID * const riid, + void * *pInterface); + + HRESULT ( __stdcall *GetState )( + IAsyncManager * This, + ULONG *pulStateFlags); + + + } IAsyncManagerVtbl; + + struct IAsyncManager + { + struct IAsyncManagerVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 12196 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IAsyncManager_CompleteCall_Proxy( + IAsyncManager * This, + HRESULT Result); + + +void __stdcall IAsyncManager_CompleteCall_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IAsyncManager_GetCallContext_Proxy( + IAsyncManager * This, + const IID * const riid, + void * *pInterface); + + +void __stdcall IAsyncManager_GetCallContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IAsyncManager_GetState_Proxy( + IAsyncManager * This, + ULONG *pulStateFlags); + + +void __stdcall IAsyncManager_GetState_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 12238 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IWaitMultiple; + + + + + + + + + + + + + + + + +#line 12270 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IWaitMultipleVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IWaitMultiple * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IWaitMultiple * This); + + ULONG ( __stdcall *Release )( + IWaitMultiple * This); + + HRESULT ( __stdcall *WaitMultiple )( + IWaitMultiple * This, + DWORD timeout, + ISynchronize * *pSync); + + HRESULT ( __stdcall *AddSynchronize )( + IWaitMultiple * This, + ISynchronize *pSync); + + + } IWaitMultipleVtbl; + + struct IWaitMultiple + { + struct IWaitMultipleVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 12328 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IWaitMultiple_WaitMultiple_Proxy( + IWaitMultiple * This, + DWORD timeout, + ISynchronize * *pSync); + + +void __stdcall IWaitMultiple_WaitMultiple_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IWaitMultiple_AddSynchronize_Proxy( + IWaitMultiple * This, + ISynchronize *pSync); + + +void __stdcall IWaitMultiple_AddSynchronize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 12358 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_ISynchronizeEvent; + + + + + + + + + + + + +#line 12386 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct ISynchronizeEventVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ISynchronizeEvent * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ISynchronizeEvent * This); + + ULONG ( __stdcall *Release )( + ISynchronizeEvent * This); + + HRESULT ( __stdcall *GetEvent )( + ISynchronizeEvent * This, + HANDLE *pEvent); + + + } ISynchronizeEventVtbl; + + struct ISynchronizeEvent + { + struct ISynchronizeEventVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 12436 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall ISynchronizeEvent_GetEvent_Proxy( + ISynchronizeEvent * This, + HANDLE *pEvent); + + +void __stdcall ISynchronizeEvent_GetEvent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 12453 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IUrlMon; + + + + + + + + + + + + + + + + + + + + + +#line 12490 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IUrlMonVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IUrlMon * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IUrlMon * This); + + ULONG ( __stdcall *Release )( + IUrlMon * This); + + HRESULT ( __stdcall *AsyncGetClassBits )( + IUrlMon * This, + const CLSID * const rclsid, + LPCWSTR pszTYPE, + LPCWSTR pszExt, + DWORD dwFileVersionMS, + DWORD dwFileVersionLS, + LPCWSTR pszCodeBase, + IBindCtx *pbc, + DWORD dwClassContext, + const IID * const riid, + DWORD flags); + + + } IUrlMonVtbl; + + struct IUrlMon + { + struct IUrlMonVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 12549 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IUrlMon_AsyncGetClassBits_Proxy( + IUrlMon * This, + const CLSID * const rclsid, + LPCWSTR pszTYPE, + LPCWSTR pszExt, + DWORD dwFileVersionMS, + DWORD dwFileVersionLS, + LPCWSTR pszCodeBase, + IBindCtx *pbc, + DWORD dwClassContext, + const IID * const riid, + DWORD flags); + + +void __stdcall IUrlMon_AsyncGetClassBits_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 12575 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef struct tagPUBLISHEDINFOLIST + { + DWORD cPublApps; + PUBLISHEDAPPINFO *pPublAppInfo; + } PUBLISHEDINFOLIST; + + +extern const IID IID_IClassAccess; + + + + + + + + + + + + + + + + + + + + + + + +#line 12620 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IClassAccessVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IClassAccess * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IClassAccess * This); + + ULONG ( __stdcall *Release )( + IClassAccess * This); + + HRESULT ( __stdcall *GetClassInfoA )( + IClassAccess * This, + const CLSID * const clsid, + QUERYCONTEXT QryContext, + PACKAGEINFO *pPackageInfo); + + HRESULT ( __stdcall *GetClassSpecInfo )( + IClassAccess * This, + uCLSSPEC *pClassSpec, + QUERYCONTEXT QryContext, + PACKAGEINFO *pPackageInfo); + + HRESULT ( __stdcall *GetInstallablePackages )( + IClassAccess * This, + DWORD Count, + PUBLISHEDINFOLIST *pInfoList); + + + } IClassAccessVtbl; + + struct IClassAccess + { + struct IClassAccessVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 12689 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IClassAccess_GetClassInfo_Proxy( + IClassAccess * This, + const CLSID * const clsid, + QUERYCONTEXT QryContext, + PACKAGEINFO *pPackageInfo); + + +void __stdcall IClassAccess_GetClassInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAccess_GetClassSpecInfo_Proxy( + IClassAccess * This, + uCLSSPEC *pClassSpec, + QUERYCONTEXT QryContext, + PACKAGEINFO *pPackageInfo); + + +void __stdcall IClassAccess_GetClassSpecInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAccess_GetInstallablePackages_Proxy( + IClassAccess * This, + DWORD Count, + PUBLISHEDINFOLIST *pInfoList); + + +void __stdcall IClassAccess_GetInstallablePackages_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 12735 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + +typedef struct tagPACKAGEINFOLIST + { + DWORD cPackInfo; + PACKAGEINFO *pPackageInfo; + } PACKAGEINFOLIST; + + +extern const IID IID_IClassRefresh; + + + + + + + + + + + + + + + + + + +#line 12775 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IClassRefreshVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IClassRefresh * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IClassRefresh * This); + + ULONG ( __stdcall *Release )( + IClassRefresh * This); + + HRESULT ( __stdcall *GetUpgrades )( + IClassRefresh * This, + ULONG cClasses, + CLSID *pClassList, + CSPLATFORM Platform, + LCID Locale, + PACKAGEINFOLIST *pPackageInfoList); + + HRESULT ( __stdcall *CommitUpgrades )( + IClassRefresh * This); + + + } IClassRefreshVtbl; + + struct IClassRefresh + { + struct IClassRefreshVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 12835 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IClassRefresh_GetUpgrades_Proxy( + IClassRefresh * This, + ULONG cClasses, + CLSID *pClassList, + CSPLATFORM Platform, + LCID Locale, + PACKAGEINFOLIST *pPackageInfoList); + + +void __stdcall IClassRefresh_GetUpgrades_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassRefresh_CommitUpgrades_Proxy( + IClassRefresh * This); + + +void __stdcall IClassRefresh_CommitUpgrades_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 12867 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + +typedef struct tagCLASSDETAIL + { + CLSID Clsid; + LPOLESTR pszDesc; + LPOLESTR pszIconPath; + CLSID TreatAsClsid; + CLSID AutoConvertClsid; + DWORD cFileExt; + LPOLESTR *prgFileExt; + LPOLESTR pMimeType; + LPOLESTR pDefaultProgId; + DWORD cOtherProgId; + LPOLESTR *prgOtherProgId; + } CLASSDETAIL; + + + + + +extern RPC_IF_HANDLE __MIDL_itf_objidl_0069_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_objidl_0069_v0_0_s_ifspec; + + + + + + + + + + + + + +extern const IID IID_IEnumPackage; + + + + + + + + + + + + + + + + + + + + + + +#line 12935 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IEnumPackageVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumPackage * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumPackage * This); + + ULONG ( __stdcall *Release )( + IEnumPackage * This); + + HRESULT ( __stdcall *Next )( + IEnumPackage * This, + ULONG celt, + PACKAGEDETAIL *rgelt, + ULONG *pceltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumPackage * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumPackage * This); + + HRESULT ( __stdcall *Clone )( + IEnumPackage * This, + IEnumPackage * *ppenum); + + + } IEnumPackageVtbl; + + struct IEnumPackage + { + struct IEnumPackageVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 13007 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IEnumPackage_Next_Proxy( + IEnumPackage * This, + ULONG celt, + PACKAGEDETAIL *rgelt, + ULONG *pceltFetched); + + +void __stdcall IEnumPackage_Next_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumPackage_Skip_Proxy( + IEnumPackage * This, + ULONG celt); + + +void __stdcall IEnumPackage_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumPackage_Reset_Proxy( + IEnumPackage * This); + + +void __stdcall IEnumPackage_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumPackage_Clone_Proxy( + IEnumPackage * This, + IEnumPackage * *ppenum); + + +void __stdcall IEnumPackage_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 13061 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + +extern const IID IID_IEnumClass; + + + + + + + + + + + + + + + + + + + + + + +#line 13099 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IEnumClassVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumClass * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumClass * This); + + ULONG ( __stdcall *Release )( + IEnumClass * This); + + HRESULT ( __stdcall *Next )( + IEnumClass * This, + ULONG celt, + CLASSDETAIL *rgelt, + ULONG *pceltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumClass * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumClass * This); + + HRESULT ( __stdcall *Clone )( + IEnumClass * This, + IEnumClass * *ppenum); + + + } IEnumClassVtbl; + + struct IEnumClass + { + struct IEnumClassVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 13171 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IEnumClass_Next_Proxy( + IEnumClass * This, + ULONG celt, + CLASSDETAIL *rgelt, + ULONG *pceltFetched); + + +void __stdcall IEnumClass_Next_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumClass_Skip_Proxy( + IEnumClass * This, + ULONG celt); + + +void __stdcall IEnumClass_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumClass_Reset_Proxy( + IEnumClass * This); + + +void __stdcall IEnumClass_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumClass_Clone_Proxy( + IEnumClass * This, + IEnumClass * *ppenum); + + +void __stdcall IEnumClass_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 13225 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + +#line 13236 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + +extern RPC_IF_HANDLE __MIDL_itf_objidl_0071_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_objidl_0071_v0_0_s_ifspec; + + + + + + + + + + + + + +extern const IID IID_IClassAdmin; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 13310 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + typedef struct IClassAdminVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IClassAdmin * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IClassAdmin * This); + + ULONG ( __stdcall *Release )( + IClassAdmin * This); + + HRESULT ( __stdcall *NewClass )( + IClassAdmin * This, + CLASSDETAIL *pClassDetail); + + HRESULT ( __stdcall *DeleteClass )( + IClassAdmin * This, + const CLSID * const guidClsId); + + HRESULT ( __stdcall *NewInterface )( + IClassAdmin * This, + const IID * const iid, + LPOLESTR pszDesc, + const CLSID * const psclsid, + const CLSID * const typelibid); + + HRESULT ( __stdcall *DeleteInterface )( + IClassAdmin * This, + const IID * const iid); + + HRESULT ( __stdcall *NewPackage )( + IClassAdmin * This, + PACKAGEDETAIL *pPackageDetail); + + HRESULT ( __stdcall *DeletePackage )( + IClassAdmin * This, + LPOLESTR pszPackageName); + + HRESULT ( __stdcall *GetClassesEnum )( + IClassAdmin * This, + IEnumClass * *ppIEnumClass); + + HRESULT ( __stdcall *GetPackagesEnum )( + IClassAdmin * This, + const CLSID * const guidClsid, + LPOLESTR pszVendor, + CSPLATFORM Platform, + DWORD dwContext, + LCID Locale, + IEnumPackage * *ppIEnumPackage); + + HRESULT ( __stdcall *GetClassDetails )( + IClassAdmin * This, + const CLSID * const guidClsId, + CLASSDETAIL *pClassDetail); + + HRESULT ( __stdcall *GetIidDetails )( + IClassAdmin * This, + const IID * const iid, + LPOLESTR *ppszDesc, + CLSID *psClsid, + CLSID *pTypeLibId); + + HRESULT ( __stdcall *GetPackageDetails )( + IClassAdmin * This, + LPOLESTR pszPackageName, + PACKAGEDETAIL *pPackageDetail); + + + } IClassAdminVtbl; + + struct IClassAdmin + { + struct IClassAdminVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 13443 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + +HRESULT __stdcall IClassAdmin_NewClass_Proxy( + IClassAdmin * This, + CLASSDETAIL *pClassDetail); + + +void __stdcall IClassAdmin_NewClass_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAdmin_DeleteClass_Proxy( + IClassAdmin * This, + const CLSID * const guidClsId); + + +void __stdcall IClassAdmin_DeleteClass_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAdmin_NewInterface_Proxy( + IClassAdmin * This, + const IID * const iid, + LPOLESTR pszDesc, + const CLSID * const psclsid, + const CLSID * const typelibid); + + +void __stdcall IClassAdmin_NewInterface_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAdmin_DeleteInterface_Proxy( + IClassAdmin * This, + const IID * const iid); + + +void __stdcall IClassAdmin_DeleteInterface_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAdmin_NewPackage_Proxy( + IClassAdmin * This, + PACKAGEDETAIL *pPackageDetail); + + +void __stdcall IClassAdmin_NewPackage_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAdmin_DeletePackage_Proxy( + IClassAdmin * This, + LPOLESTR pszPackageName); + + +void __stdcall IClassAdmin_DeletePackage_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAdmin_GetClassesEnum_Proxy( + IClassAdmin * This, + IEnumClass * *ppIEnumClass); + + +void __stdcall IClassAdmin_GetClassesEnum_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAdmin_GetPackagesEnum_Proxy( + IClassAdmin * This, + const CLSID * const guidClsid, + LPOLESTR pszVendor, + CSPLATFORM Platform, + DWORD dwContext, + LCID Locale, + IEnumPackage * *ppIEnumPackage); + + +void __stdcall IClassAdmin_GetPackagesEnum_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAdmin_GetClassDetails_Proxy( + IClassAdmin * This, + const CLSID * const guidClsId, + CLASSDETAIL *pClassDetail); + + +void __stdcall IClassAdmin_GetClassDetails_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAdmin_GetIidDetails_Proxy( + IClassAdmin * This, + const IID * const iid, + LPOLESTR *ppszDesc, + CLSID *psClsid, + CLSID *pTypeLibId); + + +void __stdcall IClassAdmin_GetIidDetails_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IClassAdmin_GetPackageDetails_Proxy( + IClassAdmin * This, + LPOLESTR pszPackageName, + PACKAGEDETAIL *pPackageDetail); + + +void __stdcall IClassAdmin_GetPackageDetails_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 13593 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + +#pragma warning(default:4201) +#line 13606 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + +extern RPC_IF_HANDLE __MIDL_itf_objidl_0072_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_objidl_0072_v0_0_s_ifspec; + + + +unsigned long __stdcall ASYNC_STGMEDIUM_UserSize( unsigned long *, unsigned long , ASYNC_STGMEDIUM * ); +unsigned char * __stdcall ASYNC_STGMEDIUM_UserMarshal( unsigned long *, unsigned char *, ASYNC_STGMEDIUM * ); +unsigned char * __stdcall ASYNC_STGMEDIUM_UserUnmarshal(unsigned long *, unsigned char *, ASYNC_STGMEDIUM * ); +void __stdcall ASYNC_STGMEDIUM_UserFree( unsigned long *, ASYNC_STGMEDIUM * ); + +unsigned long __stdcall BSTR_UserSize( unsigned long *, unsigned long , BSTR * ); +unsigned char * __stdcall BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * ); +unsigned char * __stdcall BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); +void __stdcall BSTR_UserFree( unsigned long *, BSTR * ); + +unsigned long __stdcall CLIPFORMAT_UserSize( unsigned long *, unsigned long , CLIPFORMAT * ); +unsigned char * __stdcall CLIPFORMAT_UserMarshal( unsigned long *, unsigned char *, CLIPFORMAT * ); +unsigned char * __stdcall CLIPFORMAT_UserUnmarshal(unsigned long *, unsigned char *, CLIPFORMAT * ); +void __stdcall CLIPFORMAT_UserFree( unsigned long *, CLIPFORMAT * ); + +unsigned long __stdcall FLAG_STGMEDIUM_UserSize( unsigned long *, unsigned long , FLAG_STGMEDIUM * ); +unsigned char * __stdcall FLAG_STGMEDIUM_UserMarshal( unsigned long *, unsigned char *, FLAG_STGMEDIUM * ); +unsigned char * __stdcall FLAG_STGMEDIUM_UserUnmarshal(unsigned long *, unsigned char *, FLAG_STGMEDIUM * ); +void __stdcall FLAG_STGMEDIUM_UserFree( unsigned long *, FLAG_STGMEDIUM * ); + +unsigned long __stdcall SNB_UserSize( unsigned long *, unsigned long , SNB * ); +unsigned char * __stdcall SNB_UserMarshal( unsigned long *, unsigned char *, SNB * ); +unsigned char * __stdcall SNB_UserUnmarshal(unsigned long *, unsigned char *, SNB * ); +void __stdcall SNB_UserFree( unsigned long *, SNB * ); + +unsigned long __stdcall STGMEDIUM_UserSize( unsigned long *, unsigned long , STGMEDIUM * ); +unsigned char * __stdcall STGMEDIUM_UserMarshal( unsigned long *, unsigned char *, STGMEDIUM * ); +unsigned char * __stdcall STGMEDIUM_UserUnmarshal(unsigned long *, unsigned char *, STGMEDIUM * ); +void __stdcall STGMEDIUM_UserFree( unsigned long *, STGMEDIUM * ); + + HRESULT __stdcall IEnumUnknown_Next_Proxy( + IEnumUnknown * This, + ULONG celt, + IUnknown * *rgelt, + ULONG *pceltFetched); + + + HRESULT __stdcall IEnumUnknown_Next_Stub( + IEnumUnknown * This, + ULONG celt, + IUnknown * *rgelt, + ULONG *pceltFetched); + + HRESULT __stdcall IBindCtx_SetBindOptions_Proxy( + IBindCtx * This, + BIND_OPTS *pbindopts); + + + HRESULT __stdcall IBindCtx_SetBindOptions_Stub( + IBindCtx * This, + BIND_OPTS2 *pbindopts); + + HRESULT __stdcall IBindCtx_GetBindOptions_Proxy( + IBindCtx * This, + BIND_OPTS *pbindopts); + + + HRESULT __stdcall IBindCtx_GetBindOptions_Stub( + IBindCtx * This, + BIND_OPTS2 *pbindopts); + + HRESULT __stdcall IEnumMoniker_Next_Proxy( + IEnumMoniker * This, + ULONG celt, + IMoniker * *rgelt, + ULONG *pceltFetched); + + + HRESULT __stdcall IEnumMoniker_Next_Stub( + IEnumMoniker * This, + ULONG celt, + IMoniker * *rgelt, + ULONG *pceltFetched); + + BOOL __stdcall IRunnableObject_IsRunning_Proxy( + IRunnableObject * This); + + + HRESULT __stdcall IRunnableObject_IsRunning_Stub( + IRunnableObject * This); + + HRESULT __stdcall IMoniker_BindToObject_Proxy( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + const IID * const riidResult, + void * *ppvResult); + + + HRESULT __stdcall IMoniker_BindToObject_Stub( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + const IID * const riidResult, + IUnknown * *ppvResult); + + HRESULT __stdcall IMoniker_BindToStorage_Proxy( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + const IID * const riid, + void * *ppvObj); + + + HRESULT __stdcall IMoniker_BindToStorage_Stub( + IMoniker * This, + IBindCtx *pbc, + IMoniker *pmkToLeft, + const IID * const riid, + IUnknown * *ppvObj); + + HRESULT __stdcall IEnumString_Next_Proxy( + IEnumString * This, + ULONG celt, + LPOLESTR *rgelt, + ULONG *pceltFetched); + + + HRESULT __stdcall IEnumString_Next_Stub( + IEnumString * This, + ULONG celt, + LPOLESTR *rgelt, + ULONG *pceltFetched); + + HRESULT __stdcall ISequentialStream_Read_Proxy( + ISequentialStream * This, + void *pv, + ULONG cb, + ULONG *pcbRead); + + + HRESULT __stdcall ISequentialStream_Read_Stub( + ISequentialStream * This, + byte *pv, + ULONG cb, + ULONG *pcbRead); + + HRESULT __stdcall ISequentialStream_Write_Proxy( + ISequentialStream * This, + const void *pv, + ULONG cb, + ULONG *pcbWritten); + + + HRESULT __stdcall ISequentialStream_Write_Stub( + ISequentialStream * This, + const byte *pv, + ULONG cb, + ULONG *pcbWritten); + + HRESULT __stdcall IStream_Seek_Proxy( + IStream * This, + LARGE_INTEGER dlibMove, + DWORD dwOrigin, + ULARGE_INTEGER *plibNewPosition); + + + HRESULT __stdcall IStream_Seek_Stub( + IStream * This, + LARGE_INTEGER dlibMove, + DWORD dwOrigin, + ULARGE_INTEGER *plibNewPosition); + + HRESULT __stdcall IStream_CopyTo_Proxy( + IStream * This, + IStream *pstm, + ULARGE_INTEGER cb, + ULARGE_INTEGER *pcbRead, + ULARGE_INTEGER *pcbWritten); + + + HRESULT __stdcall IStream_CopyTo_Stub( + IStream * This, + IStream *pstm, + ULARGE_INTEGER cb, + ULARGE_INTEGER *pcbRead, + ULARGE_INTEGER *pcbWritten); + + HRESULT __stdcall IEnumSTATSTG_Next_Proxy( + IEnumSTATSTG * This, + ULONG celt, + STATSTG *rgelt, + ULONG *pceltFetched); + + + HRESULT __stdcall IEnumSTATSTG_Next_Stub( + IEnumSTATSTG * This, + ULONG celt, + STATSTG *rgelt, + ULONG *pceltFetched); + + HRESULT __stdcall IStorage_OpenStream_Proxy( + IStorage * This, + const OLECHAR *pwcsName, + void *reserved1, + DWORD grfMode, + DWORD reserved2, + IStream * *ppstm); + + + HRESULT __stdcall IStorage_OpenStream_Stub( + IStorage * This, + const OLECHAR *pwcsName, + unsigned long cbReserved1, + byte *reserved1, + DWORD grfMode, + DWORD reserved2, + IStream * *ppstm); + + HRESULT __stdcall IStorage_EnumElements_Proxy( + IStorage * This, + DWORD reserved1, + void *reserved2, + DWORD reserved3, + IEnumSTATSTG * *ppenum); + + + HRESULT __stdcall IStorage_EnumElements_Stub( + IStorage * This, + DWORD reserved1, + unsigned long cbReserved2, + byte *reserved2, + DWORD reserved3, + IEnumSTATSTG * *ppenum); + + HRESULT __stdcall ILockBytes_ReadAt_Proxy( + ILockBytes * This, + ULARGE_INTEGER ulOffset, + void *pv, + ULONG cb, + ULONG *pcbRead); + + + HRESULT __stdcall ILockBytes_ReadAt_Stub( + ILockBytes * This, + ULARGE_INTEGER ulOffset, + byte *pv, + ULONG cb, + ULONG *pcbRead); + + HRESULT __stdcall ILockBytes_WriteAt_Proxy( + ILockBytes * This, + ULARGE_INTEGER ulOffset, + const void *pv, + ULONG cb, + ULONG *pcbWritten); + + + HRESULT __stdcall ILockBytes_WriteAt_Stub( + ILockBytes * This, + ULARGE_INTEGER ulOffset, + const byte *pv, + ULONG cb, + ULONG *pcbWritten); + + HRESULT __stdcall IEnumFORMATETC_Next_Proxy( + IEnumFORMATETC * This, + ULONG celt, + FORMATETC *rgelt, + ULONG *pceltFetched); + + + HRESULT __stdcall IEnumFORMATETC_Next_Stub( + IEnumFORMATETC * This, + ULONG celt, + FORMATETC *rgelt, + ULONG *pceltFetched); + + HRESULT __stdcall IEnumSTATDATA_Next_Proxy( + IEnumSTATDATA * This, + ULONG celt, + STATDATA *rgelt, + ULONG *pceltFetched); + + + HRESULT __stdcall IEnumSTATDATA_Next_Stub( + IEnumSTATDATA * This, + ULONG celt, + STATDATA *rgelt, + ULONG *pceltFetched); + + void __stdcall IAdviseSink_OnDataChange_Proxy( + IAdviseSink * This, + FORMATETC *pFormatetc, + STGMEDIUM *pStgmed); + + + HRESULT __stdcall IAdviseSink_OnDataChange_Stub( + IAdviseSink * This, + IAsyncManager * *ppIAM, + FORMATETC *pFormatetc, + ASYNC_STGMEDIUM *pStgmed); + + void __stdcall IAdviseSink_OnViewChange_Proxy( + IAdviseSink * This, + DWORD dwAspect, + LONG lindex); + + + HRESULT __stdcall IAdviseSink_OnViewChange_Stub( + IAdviseSink * This, + IAsyncManager * *ppIAM, + DWORD dwAspect, + LONG lindex); + + void __stdcall IAdviseSink_OnRename_Proxy( + IAdviseSink * This, + IMoniker *pmk); + + + HRESULT __stdcall IAdviseSink_OnRename_Stub( + IAdviseSink * This, + IAsyncManager * *ppIAM, + IMoniker *pmk); + + void __stdcall IAdviseSink_OnSave_Proxy( + IAdviseSink * This); + + + HRESULT __stdcall IAdviseSink_OnSave_Stub( + IAdviseSink * This, + IAsyncManager * *ppIAM); + + void __stdcall IAdviseSink_OnClose_Proxy( + IAdviseSink * This); + + + HRESULT __stdcall IAdviseSink_OnClose_Stub( + IAdviseSink * This); + + void __stdcall IAdviseSink2_OnLinkSrcChange_Proxy( + IAdviseSink2 * This, + IMoniker *pmk); + + + HRESULT __stdcall IAdviseSink2_OnLinkSrcChange_Stub( + IAdviseSink2 * This, + IAsyncManager * *ppIAM, + IMoniker *pmk); + + HRESULT __stdcall IDataObject_GetData_Proxy( + IDataObject * This, + FORMATETC *pformatetcIn, + STGMEDIUM *pmedium); + + + HRESULT __stdcall IDataObject_GetData_Stub( + IDataObject * This, + FORMATETC *pformatetcIn, + STGMEDIUM *pRemoteMedium); + + HRESULT __stdcall IDataObject_GetDataHere_Proxy( + IDataObject * This, + FORMATETC *pformatetc, + STGMEDIUM *pmedium); + + + HRESULT __stdcall IDataObject_GetDataHere_Stub( + IDataObject * This, + FORMATETC *pformatetc, + STGMEDIUM *pRemoteMedium); + + HRESULT __stdcall IDataObject_SetData_Proxy( + IDataObject * This, + FORMATETC *pformatetc, + STGMEDIUM *pmedium, + BOOL fRelease); + + + HRESULT __stdcall IDataObject_SetData_Stub( + IDataObject * This, + FORMATETC *pformatetc, + FLAG_STGMEDIUM *pmedium, + BOOL fRelease); + + HRESULT __stdcall IEnumSTATPROPSTG_Next_Proxy( + IEnumSTATPROPSTG * This, + ULONG celt, + STATPROPSTG *rgelt, + ULONG *pceltFetched); + + + HRESULT __stdcall IEnumSTATPROPSTG_Next_Stub( + IEnumSTATPROPSTG * This, + ULONG celt, + STATPROPSTG *rgelt, + ULONG *pceltFetched); + + HRESULT __stdcall IEnumSTATPROPSETSTG_Next_Proxy( + IEnumSTATPROPSETSTG * This, + ULONG celt, + STATPROPSETSTG *rgelt, + ULONG *pceltFetched); + + + HRESULT __stdcall IEnumSTATPROPSETSTG_Next_Stub( + IEnumSTATPROPSETSTG * This, + ULONG celt, + STATPROPSETSTG *rgelt, + ULONG *pceltFetched); + + HRESULT __stdcall IFillLockBytes_FillAppend_Proxy( + IFillLockBytes * This, + const void *pv, + ULONG cb, + ULONG *pcbWritten); + + + HRESULT __stdcall IFillLockBytes_FillAppend_Stub( + IFillLockBytes * This, + const byte *pv, + ULONG cb, + ULONG *pcbWritten); + + HRESULT __stdcall IFillLockBytes_FillAt_Proxy( + IFillLockBytes * This, + ULARGE_INTEGER ulOffset, + const void *pv, + ULONG cb, + ULONG *pcbWritten); + + + HRESULT __stdcall IFillLockBytes_FillAt_Stub( + IFillLockBytes * This, + ULARGE_INTEGER ulOffset, + const byte *pv, + ULONG cb, + ULONG *pcbWritten); + + + + + + + + + +#line 14051 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 373 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + +#line 399 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 440 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" +#line 441 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\cguid.h" + + + + + + + + + + + + + + + + +extern const IID GUID_NULL; +extern const IID IID_IRpcChannel; +extern const IID IID_IRpcStub; +extern const IID IID_IStubManager; +extern const IID IID_IRpcProxy; +extern const IID IID_IProxyManager; +extern const IID IID_IPSFactory; +extern const IID IID_IInternalMoniker; +extern const IID IID_IDfReserved1; +extern const IID IID_IDfReserved2; +extern const IID IID_IDfReserved3; +extern const CLSID CLSID_StdMarshal; +extern const CLSID CLSID_AggStdMarshal; +extern const CLSID CLSID_StdAsyncActManager; +extern const IID IID_IStub; +extern const IID IID_IProxy; +extern const IID IID_IEnumGeneric; +extern const IID IID_IEnumHolder; +extern const IID IID_IEnumCallback; +extern const IID IID_IOleManager; +extern const IID IID_IOlePresObj; +extern const IID IID_IDebug; +extern const IID IID_IDebugStream; +extern const CLSID CLSID_PSGenObject; +extern const CLSID CLSID_PSClientSite; +extern const CLSID CLSID_PSClassObject; +extern const CLSID CLSID_PSInPlaceActive; +extern const CLSID CLSID_PSInPlaceFrame; +extern const CLSID CLSID_PSDragDrop; +extern const CLSID CLSID_PSBindCtx; +extern const CLSID CLSID_PSEnumerators; +extern const CLSID CLSID_StaticMetafile; +extern const CLSID CLSID_StaticDib; +extern const CLSID CID_CDfsVolume; +extern const CLSID CLSID_DCOMAccessControl; +extern const CLSID CLSID_StdGlobalInterfaceTable; +extern const CLSID CLSID_ComBinding; + + + + + + + + + +extern const CLSID CLSID_CCDFormKrnl; +extern const CLSID CLSID_CCDPropertyPage; +extern const CLSID CLSID_CCDFormDialog; + + + + +extern const CLSID CLSID_CCDCommandButton; +extern const CLSID CLSID_CCDComboBox; +extern const CLSID CLSID_CCDTextBox; +extern const CLSID CLSID_CCDCheckBox; +extern const CLSID CLSID_CCDLabel; +extern const CLSID CLSID_CCDOptionButton; +extern const CLSID CLSID_CCDListBox; +extern const CLSID CLSID_CCDScrollBar; +extern const CLSID CLSID_CCDGroupBox; + + + + +extern const CLSID CLSID_CCDGeneralPropertyPage; +extern const CLSID CLSID_CCDGenericPropertyPage; +extern const CLSID CLSID_CCDFontPropertyPage; +extern const CLSID CLSID_CCDColorPropertyPage; +extern const CLSID CLSID_CCDLabelPropertyPage; +extern const CLSID CLSID_CCDCheckBoxPropertyPage; +extern const CLSID CLSID_CCDTextBoxPropertyPage; +extern const CLSID CLSID_CCDOptionButtonPropertyPage; +extern const CLSID CLSID_CCDListBoxPropertyPage; +extern const CLSID CLSID_CCDCommandButtonPropertyPage; +extern const CLSID CLSID_CCDComboBoxPropertyPage; +extern const CLSID CLSID_CCDScrollBarPropertyPage; +extern const CLSID CLSID_CCDGroupBoxPropertyPage; +extern const CLSID CLSID_CCDXObjectPropertyPage; + +extern const CLSID CLSID_CStdPropertyFrame; + +extern const CLSID CLSID_CFormPropertyPage; +extern const CLSID CLSID_CGridPropertyPage; + +extern const CLSID CLSID_CWSJArticlePage; +extern const CLSID CLSID_CSystemPage; + +extern const CLSID CLSID_IdentityUnmarshal; +extern const CLSID CLSID_InProcFreeMarshaler; + +extern const CLSID CLSID_Picture_Metafile; +extern const CLSID CLSID_Picture_EnhMetafile; +extern const CLSID CLSID_Picture_Dib; + + + + +extern const GUID GUID_TRISTATE; + + + + + + +#line 124 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\cguid.h" +#line 476 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" +#line 477 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + +typedef enum tagCOINIT +{ + COINIT_APARTMENTTHREADED = 0x2, + + + + + + +#line 489 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" +} COINIT; + + + + + + + +extern __declspec(dllimport) DWORD __stdcall CoBuildVersion( void ); + + + +extern __declspec(dllimport) HRESULT __stdcall CoInitialize(LPVOID pvReserved); +extern __declspec(dllimport) void __stdcall CoUninitialize(void); +extern __declspec(dllimport) HRESULT __stdcall CoGetMalloc(DWORD dwMemContext, LPMALLOC * ppMalloc); +extern __declspec(dllimport) DWORD __stdcall CoGetCurrentProcess(void); +extern __declspec(dllimport) HRESULT __stdcall CoRegisterMallocSpy(LPMALLOCSPY pMallocSpy); +extern __declspec(dllimport) HRESULT __stdcall CoRevokeMallocSpy(void); +extern __declspec(dllimport) HRESULT __stdcall CoCreateStandardMalloc(DWORD memctx, IMalloc * * ppMalloc); + + + +#line 512 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + +#line 517 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + +extern __declspec(dllimport) HRESULT __stdcall CoGetClassObject(const CLSID * const rclsid, DWORD dwClsContext, LPVOID pvReserved, + const IID * const riid, LPVOID * ppv); +extern __declspec(dllimport) HRESULT __stdcall CoRegisterClassObject(const CLSID * const rclsid, LPUNKNOWN pUnk, + DWORD dwClsContext, DWORD flags, LPDWORD lpdwRegister); +extern __declspec(dllimport) HRESULT __stdcall CoRevokeClassObject(DWORD dwRegister); +extern __declspec(dllimport) HRESULT __stdcall CoResumeClassObjects(void); +extern __declspec(dllimport) HRESULT __stdcall CoSuspendClassObjects(void); +extern __declspec(dllimport) ULONG __stdcall CoAddRefServerProcess(void); +extern __declspec(dllimport) ULONG __stdcall CoReleaseServerProcess(void); +extern __declspec(dllimport) HRESULT __stdcall CoGetPSClsid(const IID * const riid, CLSID *pClsid); +extern __declspec(dllimport) HRESULT __stdcall CoRegisterPSClsid(const IID * const riid, const CLSID * const rclsid); + + +extern __declspec(dllimport) HRESULT __stdcall CoRegisterSurrogate(LPSURROGATE pSurrogate); + + + +extern __declspec(dllimport) HRESULT __stdcall CoGetMarshalSizeMax(ULONG *pulSize, const IID * const riid, LPUNKNOWN pUnk, + DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags); +extern __declspec(dllimport) HRESULT __stdcall CoMarshalInterface(LPSTREAM pStm, const IID * const riid, LPUNKNOWN pUnk, + DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags); +extern __declspec(dllimport) HRESULT __stdcall CoUnmarshalInterface(LPSTREAM pStm, const IID * const riid, LPVOID * ppv); +extern __declspec(dllimport) HRESULT __stdcall CoMarshalHresult(LPSTREAM pstm, HRESULT hresult); +extern __declspec(dllimport) HRESULT __stdcall CoUnmarshalHresult(LPSTREAM pstm, HRESULT * phresult); +extern __declspec(dllimport) HRESULT __stdcall CoReleaseMarshalData(LPSTREAM pStm); +extern __declspec(dllimport) HRESULT __stdcall CoDisconnectObject(LPUNKNOWN pUnk, DWORD dwReserved); +extern __declspec(dllimport) HRESULT __stdcall CoLockObjectExternal(LPUNKNOWN pUnk, BOOL fLock, BOOL fLastUnlockReleases); +extern __declspec(dllimport) HRESULT __stdcall CoGetStandardMarshal(const IID * const riid, LPUNKNOWN pUnk, + DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, + LPMARSHAL * ppMarshal); + + +extern __declspec(dllimport) HRESULT __stdcall CoGetStdMarshalEx(LPUNKNOWN pUnkOuter, DWORD smexflags, + LPUNKNOWN * ppUnkInner); +extern __declspec(dllimport) HRESULT __stdcall CoGetStaticMarshal(IUnknown *pUnkControl, + ULONG cItfs, + IID **arIIDs, + UUID **arIPIDs, + DWORD dwBindingFlags, + ULONG cBindings, + LPUNKNOWN *pBindings, + IUnknown **ppUnkInner); + + +typedef enum tagSTDMSHLFLAGS +{ + SMEXF_SERVER = 0x01, + SMEXF_HANDLER = 0x02 +} STDMSHLFLAGS; + + +extern __declspec(dllimport) BOOL __stdcall CoIsHandlerConnected(LPUNKNOWN pUnk); +extern __declspec(dllimport) BOOL __stdcall CoHasStrongExternalConnections(LPUNKNOWN pUnk); + + +extern __declspec(dllimport) HRESULT __stdcall CoMarshalInterThreadInterfaceInStream(const IID * const riid, LPUNKNOWN pUnk, + LPSTREAM *ppStm); + +extern __declspec(dllimport) HRESULT __stdcall CoGetInterfaceAndReleaseStream(LPSTREAM pStm, const IID * const iid, + LPVOID * ppv); + +extern __declspec(dllimport) HRESULT __stdcall CoCreateFreeThreadedMarshaler(LPUNKNOWN punkOuter, + LPUNKNOWN *ppunkMarshal); + + + +extern __declspec(dllimport) HINSTANCE __stdcall CoLoadLibrary(LPOLESTR lpszLibName, BOOL bAutoFree); +extern __declspec(dllimport) void __stdcall CoFreeLibrary(HINSTANCE hInst); +extern __declspec(dllimport) void __stdcall CoFreeAllLibraries(void); +extern __declspec(dllimport) void __stdcall CoFreeUnusedLibraries(void); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 646 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + +extern __declspec(dllimport) HRESULT __stdcall CoCreateInstance(const CLSID * const rclsid, LPUNKNOWN pUnkOuter, + DWORD dwClsContext, const IID * const riid, LPVOID * ppv); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 683 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + +#line 693 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + + + + + + + + + + + + + + + + + + + + +#line 717 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + +extern __declspec(dllimport) HRESULT __stdcall StringFromCLSID(const CLSID * const rclsid, LPOLESTR * lplpsz); +extern __declspec(dllimport) HRESULT __stdcall CLSIDFromString(LPOLESTR lpsz, LPCLSID pclsid); +extern __declspec(dllimport) HRESULT __stdcall StringFromIID(const IID * const rclsid, LPOLESTR * lplpsz); +extern __declspec(dllimport) HRESULT __stdcall IIDFromString(LPOLESTR lpsz, LPIID lpiid); +extern __declspec(dllimport) BOOL __stdcall CoIsOle1Class(const CLSID * const rclsid); +extern __declspec(dllimport) HRESULT __stdcall ProgIDFromCLSID (const CLSID * const clsid, LPOLESTR * lplpszProgID); +extern __declspec(dllimport) HRESULT __stdcall CLSIDFromProgID (LPCOLESTR lpszProgID, LPCLSID lpclsid); +extern __declspec(dllimport) int __stdcall StringFromGUID2(const GUID * const rguid, LPOLESTR lpsz, int cbMax); + +extern __declspec(dllimport) HRESULT __stdcall CoCreateGuid(GUID *pguid); + +extern __declspec(dllimport) BOOL __stdcall CoFileTimeToDosDateTime( + FILETIME * lpFileTime, LPWORD lpDosDate, LPWORD lpDosTime); +extern __declspec(dllimport) BOOL __stdcall CoDosDateTimeToFileTime( + WORD nDosDate, WORD nDosTime, FILETIME * lpFileTime); +extern __declspec(dllimport) HRESULT __stdcall CoFileTimeNow( FILETIME * lpFileTime ); + + +extern __declspec(dllimport) HRESULT __stdcall CoRegisterMessageFilter( LPMESSAGEFILTER lpMessageFilter, + LPMESSAGEFILTER * lplpMessageFilter ); + + + +#line 744 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + +extern __declspec(dllimport) HRESULT __stdcall CoGetTreatAsClass(const CLSID * const clsidOld, LPCLSID pClsidNew); +extern __declspec(dllimport) HRESULT __stdcall CoTreatAsClass(const CLSID * const clsidOld, const CLSID * const clsidNew); + + + + + + + + + + +typedef HRESULT (__stdcall * LPFNGETCLASSOBJECT) (const CLSID * const, const IID * const, LPVOID *); + + + + + +typedef HRESULT (__stdcall * LPFNCANUNLOADNOW)(void); + + +extern HRESULT __stdcall DllGetClassObject(const CLSID * const rclsid, const IID * const riid, LPVOID * ppv); + +extern HRESULT __stdcall DllCanUnloadNow(void); + + + +extern __declspec(dllimport) LPVOID __stdcall CoTaskMemAlloc(ULONG cb); +extern __declspec(dllimport) LPVOID __stdcall CoTaskMemRealloc(LPVOID pv, ULONG cb); +extern __declspec(dllimport) void __stdcall CoTaskMemFree(LPVOID pv); + + + + +extern __declspec(dllimport) HRESULT __stdcall CreateDataAdviseHolder(LPDATAADVISEHOLDER * ppDAHolder); + +extern __declspec(dllimport) HRESULT __stdcall CreateDataCache(LPUNKNOWN pUnkOuter, const CLSID * const rclsid, + const IID * const iid, LPVOID * ppv); + + + + + + + +extern __declspec(dllimport) HRESULT __stdcall StgCreateDocfile(const OLECHAR * pwcsName, + DWORD grfMode, + DWORD reserved, + IStorage * *ppstgOpen); + +extern __declspec(dllimport) HRESULT __stdcall StgCreateDocfileOnILockBytes(ILockBytes *plkbyt, + DWORD grfMode, + DWORD reserved, + IStorage * *ppstgOpen); + +extern __declspec(dllimport) HRESULT __stdcall StgOpenStorage(const OLECHAR * pwcsName, + IStorage *pstgPriority, + DWORD grfMode, + SNB snbExclude, + DWORD reserved, + IStorage * *ppstgOpen); +extern __declspec(dllimport) HRESULT __stdcall StgOpenStorageOnILockBytes(ILockBytes *plkbyt, + IStorage *pstgPriority, + DWORD grfMode, + SNB snbExclude, + DWORD reserved, + IStorage * *ppstgOpen); + +extern __declspec(dllimport) HRESULT __stdcall StgIsStorageFile(const OLECHAR * pwcsName); +extern __declspec(dllimport) HRESULT __stdcall StgIsStorageILockBytes(ILockBytes * plkbyt); + +extern __declspec(dllimport) HRESULT __stdcall StgSetTimes(OLECHAR const * lpszName, + FILETIME const * pctime, + FILETIME const * patime, + FILETIME const * pmtime); + +extern __declspec(dllimport) HRESULT __stdcall StgOpenAsyncDocfileOnIFillLockBytes( IFillLockBytes *pflb, + DWORD grfMode, + DWORD asyncFlags, + IStorage **ppstgOpen); + +extern __declspec(dllimport) HRESULT __stdcall StgGetIFillLockBytesOnILockBytes( ILockBytes *pilb, + IFillLockBytes **ppflb); + +extern __declspec(dllimport) HRESULT __stdcall StgGetIFillLockBytesOnFile(OLECHAR const *pwcsName, + IFillLockBytes **ppflb); + + +extern __declspec(dllimport) HRESULT __stdcall StgOpenLayoutDocfile(OLECHAR const *pwcsDfName, + DWORD grfMode, + DWORD reserved, + IStorage **ppstgOpen); + +extern __declspec(dllimport) HRESULT __stdcall StgCreateStorageEx (const WCHAR* pwcsName, + DWORD grfMode, + DWORD stgfmt, + DWORD grfAttrs, + void * reserved1, + void * reserved2, + const IID * const riid, + void ** ppObjectOpen); + +extern __declspec(dllimport) HRESULT __stdcall StgOpenStorageEx (const WCHAR* pwcsName, + DWORD grfMode, + DWORD stgfmt, + DWORD grfAttrs, + void * reserved1, + void * reserved2, + const IID * const riid, + void ** ppObjectOpen); + + + + + + +extern __declspec(dllimport) HRESULT __stdcall BindMoniker(LPMONIKER pmk, DWORD grfOpt, const IID * const iidResult, LPVOID * ppvResult); + +extern __declspec(dllimport) HRESULT __stdcall CoInstall( + IBindCtx * pbc, + DWORD dwFlags, + uCLSSPEC * pClassSpec, + QUERYCONTEXT * pQuery, + LPWSTR pszCodeBase); + +extern __declspec(dllimport) HRESULT __stdcall CoGetObject(LPCWSTR pszName, BIND_OPTS *pBindOptions, const IID * const riid, void **ppv); +extern __declspec(dllimport) HRESULT __stdcall MkParseDisplayName(LPBC pbc, LPCOLESTR szUserName, + ULONG * pchEaten, LPMONIKER * ppmk); +extern __declspec(dllimport) HRESULT __stdcall MonikerRelativePathTo(LPMONIKER pmkSrc, LPMONIKER pmkDest, LPMONIKER + * ppmkRelPath, BOOL dwReserved); +extern __declspec(dllimport) HRESULT __stdcall MonikerCommonPrefixWith(LPMONIKER pmkThis, LPMONIKER pmkOther, + LPMONIKER * ppmkCommon); +extern __declspec(dllimport) HRESULT __stdcall CreateBindCtx(DWORD reserved, LPBC * ppbc); +extern __declspec(dllimport) HRESULT __stdcall CreateGenericComposite(LPMONIKER pmkFirst, LPMONIKER pmkRest, + LPMONIKER * ppmkComposite); +extern __declspec(dllimport) HRESULT __stdcall GetClassFile (LPCOLESTR szFilename, CLSID * pclsid); + +extern __declspec(dllimport) HRESULT __stdcall CreateClassMoniker(const CLSID * const rclsid, LPMONIKER * ppmk); + +extern __declspec(dllimport) HRESULT __stdcall CreateFileMoniker(LPCOLESTR lpszPathName, LPMONIKER * ppmk); + +extern __declspec(dllimport) HRESULT __stdcall CreateItemMoniker(LPCOLESTR lpszDelim, LPCOLESTR lpszItem, + LPMONIKER * ppmk); +extern __declspec(dllimport) HRESULT __stdcall CreateAntiMoniker(LPMONIKER * ppmk); +extern __declspec(dllimport) HRESULT __stdcall CreatePointerMoniker(LPUNKNOWN punk, LPMONIKER * ppmk); + +extern __declspec(dllimport) HRESULT __stdcall GetRunningObjectTable( DWORD reserved, LPRUNNINGOBJECTTABLE * pprot); + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 13 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 14 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 17 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + + + +typedef struct IPersistMoniker IPersistMoniker; +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IBindProtocol IBindProtocol; +#line 38 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IBinding IBinding; +#line 44 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IBindStatusCallback IBindStatusCallback; +#line 50 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IAuthenticate IAuthenticate; +#line 56 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IHttpNegotiate IHttpNegotiate; +#line 62 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IWindowForBindingUI IWindowForBindingUI; +#line 68 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct ICodeInstall ICodeInstall; +#line 74 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IWinInetInfo IWinInetInfo; +#line 80 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IHttpSecurity IHttpSecurity; +#line 86 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IWinInetHttpInfo IWinInetHttpInfo; +#line 92 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IBindHost IBindHost; +#line 98 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternet IInternet; +#line 104 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetBindInfo IInternetBindInfo; +#line 110 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetProtocolRoot IInternetProtocolRoot; +#line 116 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetProtocol IInternetProtocol; +#line 122 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetProtocolSink IInternetProtocolSink; +#line 128 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetSession IInternetSession; +#line 134 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetThreadSwitch IInternetThreadSwitch; +#line 140 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetPriority IInternetPriority; +#line 146 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetProtocolInfo IInternetProtocolInfo; +#line 152 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetSecurityMgrSite IInternetSecurityMgrSite; +#line 158 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetSecurityManager IInternetSecurityManager; +#line 164 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetHostSecurityManager IInternetHostSecurityManager; +#line 170 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IInternetZoneManager IInternetZoneManager; +#line 176 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct ISoftDistExt ISoftDistExt; +#line 182 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IDataFilter IDataFilter; +#line 188 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +typedef struct IEncodingFilterFactory IEncodingFilterFactory; +#line 194 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 198 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + +typedef struct IOleAdviseHolder IOleAdviseHolder; +#line 44 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleCache IOleCache; +#line 50 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleCache2 IOleCache2; +#line 56 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleCacheControl IOleCacheControl; +#line 62 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IParseDisplayName IParseDisplayName; +#line 68 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleContainer IOleContainer; +#line 74 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleClientSite IOleClientSite; +#line 80 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleObject IOleObject; +#line 86 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleWindow IOleWindow; +#line 92 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleLink IOleLink; +#line 98 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleItemContainer IOleItemContainer; +#line 104 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleInPlaceUIWindow IOleInPlaceUIWindow; +#line 110 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleInPlaceActiveObject IOleInPlaceActiveObject; +#line 116 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleInPlaceFrame IOleInPlaceFrame; +#line 122 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleInPlaceObject IOleInPlaceObject; +#line 128 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IOleInPlaceSite IOleInPlaceSite; +#line 134 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IContinue IContinue; +#line 140 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IViewObject IViewObject; +#line 146 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IViewObject2 IViewObject2; +#line 152 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IDropSource IDropSource; +#line 158 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IDropTarget IDropTarget; +#line 164 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +typedef struct IEnumOLEVERB IEnumOLEVERB; +#line 170 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 174 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + +void * __stdcall MIDL_user_allocate(size_t); +void __stdcall MIDL_user_free( void * ); + + + + + + + + + + + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_oleidl_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_oleidl_0000_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IOleAdviseHolder *LPOLEADVISEHOLDER; + + +extern const IID IID_IOleAdviseHolder; + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 241 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleAdviseHolderVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleAdviseHolder * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleAdviseHolder * This); + + ULONG ( __stdcall *Release )( + IOleAdviseHolder * This); + + HRESULT ( __stdcall *Advise )( + IOleAdviseHolder * This, + IAdviseSink *pAdvise, + DWORD *pdwConnection); + + HRESULT ( __stdcall *Unadvise )( + IOleAdviseHolder * This, + DWORD dwConnection); + + HRESULT ( __stdcall *EnumAdvise )( + IOleAdviseHolder * This, + IEnumSTATDATA * *ppenumAdvise); + + HRESULT ( __stdcall *SendOnRename )( + IOleAdviseHolder * This, + IMoniker *pmk); + + HRESULT ( __stdcall *SendOnSave )( + IOleAdviseHolder * This); + + HRESULT ( __stdcall *SendOnClose )( + IOleAdviseHolder * This); + + + } IOleAdviseHolderVtbl; + + struct IOleAdviseHolder + { + struct IOleAdviseHolderVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 325 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IOleAdviseHolder_Advise_Proxy( + IOleAdviseHolder * This, + IAdviseSink *pAdvise, + DWORD *pdwConnection); + + +void __stdcall IOleAdviseHolder_Advise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleAdviseHolder_Unadvise_Proxy( + IOleAdviseHolder * This, + DWORD dwConnection); + + +void __stdcall IOleAdviseHolder_Unadvise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleAdviseHolder_EnumAdvise_Proxy( + IOleAdviseHolder * This, + IEnumSTATDATA * *ppenumAdvise); + + +void __stdcall IOleAdviseHolder_EnumAdvise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleAdviseHolder_SendOnRename_Proxy( + IOleAdviseHolder * This, + IMoniker *pmk); + + +void __stdcall IOleAdviseHolder_SendOnRename_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleAdviseHolder_SendOnSave_Proxy( + IOleAdviseHolder * This); + + +void __stdcall IOleAdviseHolder_SendOnSave_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleAdviseHolder_SendOnClose_Proxy( + IOleAdviseHolder * This); + + +void __stdcall IOleAdviseHolder_SendOnClose_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 401 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleCache *LPOLECACHE; + + +extern const IID IID_IOleCache; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 447 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleCacheVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleCache * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleCache * This); + + ULONG ( __stdcall *Release )( + IOleCache * This); + + HRESULT ( __stdcall *Cache )( + IOleCache * This, + FORMATETC *pformatetc, + DWORD advf, + DWORD *pdwConnection); + + HRESULT ( __stdcall *Uncache )( + IOleCache * This, + DWORD dwConnection); + + HRESULT ( __stdcall *EnumCache )( + IOleCache * This, + IEnumSTATDATA * *ppenumSTATDATA); + + HRESULT ( __stdcall *InitCache )( + IOleCache * This, + IDataObject *pDataObject); + + HRESULT ( __stdcall *SetData )( + IOleCache * This, + FORMATETC *pformatetc, + STGMEDIUM *pmedium, + BOOL fRelease); + + + } IOleCacheVtbl; + + struct IOleCache + { + struct IOleCacheVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 529 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IOleCache_Cache_Proxy( + IOleCache * This, + FORMATETC *pformatetc, + DWORD advf, + DWORD *pdwConnection); + + +void __stdcall IOleCache_Cache_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleCache_Uncache_Proxy( + IOleCache * This, + DWORD dwConnection); + + +void __stdcall IOleCache_Uncache_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleCache_EnumCache_Proxy( + IOleCache * This, + IEnumSTATDATA * *ppenumSTATDATA); + + +void __stdcall IOleCache_EnumCache_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleCache_InitCache_Proxy( + IOleCache * This, + IDataObject *pDataObject); + + +void __stdcall IOleCache_InitCache_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleCache_SetData_Proxy( + IOleCache * This, + FORMATETC *pformatetc, + STGMEDIUM *pmedium, + BOOL fRelease); + + +void __stdcall IOleCache_SetData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 598 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleCache2 *LPOLECACHE2; + + + + + + + + + + + + + + + + + + + +typedef +enum tagDISCARDCACHE + { DISCARDCACHE_SAVEIFDIRTY = 0, + DISCARDCACHE_NOSAVE = 1 + } DISCARDCACHE; + + +extern const IID IID_IOleCache2; + + + + + + + + + + + + + + + + + +#line 657 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleCache2Vtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleCache2 * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleCache2 * This); + + ULONG ( __stdcall *Release )( + IOleCache2 * This); + + HRESULT ( __stdcall *Cache )( + IOleCache2 * This, + FORMATETC *pformatetc, + DWORD advf, + DWORD *pdwConnection); + + HRESULT ( __stdcall *Uncache )( + IOleCache2 * This, + DWORD dwConnection); + + HRESULT ( __stdcall *EnumCache )( + IOleCache2 * This, + IEnumSTATDATA * *ppenumSTATDATA); + + HRESULT ( __stdcall *InitCache )( + IOleCache2 * This, + IDataObject *pDataObject); + + HRESULT ( __stdcall *SetData )( + IOleCache2 * This, + FORMATETC *pformatetc, + STGMEDIUM *pmedium, + BOOL fRelease); + + HRESULT ( __stdcall *UpdateCache )( + IOleCache2 * This, + LPDATAOBJECT pDataObject, + DWORD grfUpdf, + LPVOID pReserved); + + HRESULT ( __stdcall *DiscardCache )( + IOleCache2 * This, + DWORD dwDiscardOptions); + + + } IOleCache2Vtbl; + + struct IOleCache2 + { + struct IOleCache2Vtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 756 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + HRESULT __stdcall IOleCache2_RemoteUpdateCache_Proxy( + IOleCache2 * This, + LPDATAOBJECT pDataObject, + DWORD grfUpdf, + DWORD pReserved); + + +void __stdcall IOleCache2_RemoteUpdateCache_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleCache2_DiscardCache_Proxy( + IOleCache2 * This, + DWORD dwDiscardOptions); + + +void __stdcall IOleCache2_DiscardCache_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 787 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleCacheControl *LPOLECACHECONTROL; + + +extern const IID IID_IOleCacheControl; + + + + + + + + + + + + + + +#line 819 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleCacheControlVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleCacheControl * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleCacheControl * This); + + ULONG ( __stdcall *Release )( + IOleCacheControl * This); + + HRESULT ( __stdcall *OnRun )( + IOleCacheControl * This, + LPDATAOBJECT pDataObject); + + HRESULT ( __stdcall *OnStop )( + IOleCacheControl * This); + + + } IOleCacheControlVtbl; + + struct IOleCacheControl + { + struct IOleCacheControlVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 875 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IOleCacheControl_OnRun_Proxy( + IOleCacheControl * This, + LPDATAOBJECT pDataObject); + + +void __stdcall IOleCacheControl_OnRun_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleCacheControl_OnStop_Proxy( + IOleCacheControl * This); + + +void __stdcall IOleCacheControl_OnStop_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 903 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IParseDisplayName *LPPARSEDISPLAYNAME; + + +extern const IID IID_IParseDisplayName; + + + + + + + + + + + + + + + +#line 936 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IParseDisplayNameVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IParseDisplayName * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IParseDisplayName * This); + + ULONG ( __stdcall *Release )( + IParseDisplayName * This); + + HRESULT ( __stdcall *ParseDisplayName )( + IParseDisplayName * This, + IBindCtx *pbc, + LPOLESTR pszDisplayName, + ULONG *pchEaten, + IMoniker * *ppmkOut); + + + } IParseDisplayNameVtbl; + + struct IParseDisplayName + { + struct IParseDisplayNameVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 989 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IParseDisplayName_ParseDisplayName_Proxy( + IParseDisplayName * This, + IBindCtx *pbc, + LPOLESTR pszDisplayName, + ULONG *pchEaten, + IMoniker * *ppmkOut); + + +void __stdcall IParseDisplayName_ParseDisplayName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1009 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleContainer *LPOLECONTAINER; + + +extern const IID IID_IOleContainer; + + + + + + + + + + + + + + + + +#line 1043 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleContainerVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleContainer * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleContainer * This); + + ULONG ( __stdcall *Release )( + IOleContainer * This); + + HRESULT ( __stdcall *ParseDisplayName )( + IOleContainer * This, + IBindCtx *pbc, + LPOLESTR pszDisplayName, + ULONG *pchEaten, + IMoniker * *ppmkOut); + + HRESULT ( __stdcall *EnumObjects )( + IOleContainer * This, + DWORD grfFlags, + IEnumUnknown * *ppenum); + + HRESULT ( __stdcall *LockContainer )( + IOleContainer * This, + BOOL fLock); + + + } IOleContainerVtbl; + + struct IOleContainer + { + struct IOleContainerVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1112 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IOleContainer_EnumObjects_Proxy( + IOleContainer * This, + DWORD grfFlags, + IEnumUnknown * *ppenum); + + +void __stdcall IOleContainer_EnumObjects_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleContainer_LockContainer_Proxy( + IOleContainer * This, + BOOL fLock); + + +void __stdcall IOleContainer_LockContainer_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1142 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleClientSite *LPOLECLIENTSITE; + + +extern const IID IID_IOleClientSite; + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1186 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleClientSiteVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleClientSite * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleClientSite * This); + + ULONG ( __stdcall *Release )( + IOleClientSite * This); + + HRESULT ( __stdcall *SaveObject )( + IOleClientSite * This); + + HRESULT ( __stdcall *GetMoniker )( + IOleClientSite * This, + DWORD dwAssign, + DWORD dwWhichMoniker, + IMoniker * *ppmk); + + HRESULT ( __stdcall *GetContainer )( + IOleClientSite * This, + IOleContainer * *ppContainer); + + HRESULT ( __stdcall *ShowObject )( + IOleClientSite * This); + + HRESULT ( __stdcall *OnShowWindow )( + IOleClientSite * This, + BOOL fShow); + + HRESULT ( __stdcall *RequestNewObjectLayout )( + IOleClientSite * This); + + + } IOleClientSiteVtbl; + + struct IOleClientSite + { + struct IOleClientSiteVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1270 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IOleClientSite_SaveObject_Proxy( + IOleClientSite * This); + + +void __stdcall IOleClientSite_SaveObject_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleClientSite_GetMoniker_Proxy( + IOleClientSite * This, + DWORD dwAssign, + DWORD dwWhichMoniker, + IMoniker * *ppmk); + + +void __stdcall IOleClientSite_GetMoniker_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleClientSite_GetContainer_Proxy( + IOleClientSite * This, + IOleContainer * *ppContainer); + + +void __stdcall IOleClientSite_GetContainer_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleClientSite_ShowObject_Proxy( + IOleClientSite * This); + + +void __stdcall IOleClientSite_ShowObject_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleClientSite_OnShowWindow_Proxy( + IOleClientSite * This, + BOOL fShow); + + +void __stdcall IOleClientSite_OnShowWindow_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleClientSite_RequestNewObjectLayout_Proxy( + IOleClientSite * This); + + +void __stdcall IOleClientSite_RequestNewObjectLayout_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1346 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleObject *LPOLEOBJECT; + +typedef +enum tagOLEGETMONIKER + { OLEGETMONIKER_ONLYIFTHERE = 1, + OLEGETMONIKER_FORCEASSIGN = 2, + OLEGETMONIKER_UNASSIGN = 3, + OLEGETMONIKER_TEMPFORUSER = 4 + } OLEGETMONIKER; + +typedef +enum tagOLEWHICHMK + { OLEWHICHMK_CONTAINER = 1, + OLEWHICHMK_OBJREL = 2, + OLEWHICHMK_OBJFULL = 3 + } OLEWHICHMK; + +typedef +enum tagUSERCLASSTYPE + { USERCLASSTYPE_FULL = 1, + USERCLASSTYPE_SHORT = 2, + USERCLASSTYPE_APPNAME = 3 + } USERCLASSTYPE; + +typedef +enum tagOLEMISC + { OLEMISC_RECOMPOSEONRESIZE = 0x1, + OLEMISC_ONLYICONIC = 0x2, + OLEMISC_INSERTNOTREPLACE = 0x4, + OLEMISC_STATIC = 0x8, + OLEMISC_CANTLINKINSIDE = 0x10, + OLEMISC_CANLINKBYOLE1 = 0x20, + OLEMISC_ISLINKOBJECT = 0x40, + OLEMISC_INSIDEOUT = 0x80, + OLEMISC_ACTIVATEWHENVISIBLE = 0x100, + OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200, + OLEMISC_INVISIBLEATRUNTIME = 0x400, + OLEMISC_ALWAYSRUN = 0x800, + OLEMISC_ACTSLIKEBUTTON = 0x1000, + OLEMISC_ACTSLIKELABEL = 0x2000, + OLEMISC_NOUIACTIVATE = 0x4000, + OLEMISC_ALIGNABLE = 0x8000, + OLEMISC_SIMPLEFRAME = 0x10000, + OLEMISC_SETCLIENTSITEFIRST = 0x20000, + OLEMISC_IMEMODE = 0x40000, + OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000, + OLEMISC_WANTSTOMENUMERGE = 0x100000, + OLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000 + } OLEMISC; + +typedef +enum tagOLECLOSE + { OLECLOSE_SAVEIFDIRTY = 0, + OLECLOSE_NOSAVE = 1, + OLECLOSE_PROMPTSAVE = 2 + } OLECLOSE; + + +extern const IID IID_IOleObject; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1506 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleObjectVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleObject * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleObject * This); + + ULONG ( __stdcall *Release )( + IOleObject * This); + + HRESULT ( __stdcall *SetClientSite )( + IOleObject * This, + IOleClientSite *pClientSite); + + HRESULT ( __stdcall *GetClientSite )( + IOleObject * This, + IOleClientSite * *ppClientSite); + + HRESULT ( __stdcall *SetHostNames )( + IOleObject * This, + LPCOLESTR szContainerApp, + LPCOLESTR szContainerObj); + + HRESULT ( __stdcall *Close )( + IOleObject * This, + DWORD dwSaveOption); + + HRESULT ( __stdcall *SetMoniker )( + IOleObject * This, + DWORD dwWhichMoniker, + IMoniker *pmk); + + HRESULT ( __stdcall *GetMoniker )( + IOleObject * This, + DWORD dwAssign, + DWORD dwWhichMoniker, + IMoniker * *ppmk); + + HRESULT ( __stdcall *InitFromData )( + IOleObject * This, + IDataObject *pDataObject, + BOOL fCreation, + DWORD dwReserved); + + HRESULT ( __stdcall *GetClipboardData )( + IOleObject * This, + DWORD dwReserved, + IDataObject * *ppDataObject); + + HRESULT ( __stdcall *DoVerb )( + IOleObject * This, + LONG iVerb, + LPMSG lpmsg, + IOleClientSite *pActiveSite, + LONG lindex, + HWND hwndParent, + LPCRECT lprcPosRect); + + HRESULT ( __stdcall *EnumVerbs )( + IOleObject * This, + IEnumOLEVERB * *ppEnumOleVerb); + + HRESULT ( __stdcall *Update )( + IOleObject * This); + + HRESULT ( __stdcall *IsUpToDate )( + IOleObject * This); + + HRESULT ( __stdcall *GetUserClassID )( + IOleObject * This, + CLSID *pClsid); + + HRESULT ( __stdcall *GetUserType )( + IOleObject * This, + DWORD dwFormOfType, + LPOLESTR *pszUserType); + + HRESULT ( __stdcall *SetExtent )( + IOleObject * This, + DWORD dwDrawAspect, + SIZEL *psizel); + + HRESULT ( __stdcall *GetExtent )( + IOleObject * This, + DWORD dwDrawAspect, + SIZEL *psizel); + + HRESULT ( __stdcall *Advise )( + IOleObject * This, + IAdviseSink *pAdvSink, + DWORD *pdwConnection); + + HRESULT ( __stdcall *Unadvise )( + IOleObject * This, + DWORD dwConnection); + + HRESULT ( __stdcall *EnumAdvise )( + IOleObject * This, + IEnumSTATDATA * *ppenumAdvise); + + HRESULT ( __stdcall *GetMiscStatus )( + IOleObject * This, + DWORD dwAspect, + DWORD *pdwStatus); + + HRESULT ( __stdcall *SetColorScheme )( + IOleObject * This, + LOGPALETTE *pLogpal); + + + } IOleObjectVtbl; + + struct IOleObject + { + struct IOleObjectVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1711 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IOleObject_SetClientSite_Proxy( + IOleObject * This, + IOleClientSite *pClientSite); + + +void __stdcall IOleObject_SetClientSite_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_GetClientSite_Proxy( + IOleObject * This, + IOleClientSite * *ppClientSite); + + +void __stdcall IOleObject_GetClientSite_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_SetHostNames_Proxy( + IOleObject * This, + LPCOLESTR szContainerApp, + LPCOLESTR szContainerObj); + + +void __stdcall IOleObject_SetHostNames_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_Close_Proxy( + IOleObject * This, + DWORD dwSaveOption); + + +void __stdcall IOleObject_Close_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_SetMoniker_Proxy( + IOleObject * This, + DWORD dwWhichMoniker, + IMoniker *pmk); + + +void __stdcall IOleObject_SetMoniker_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_GetMoniker_Proxy( + IOleObject * This, + DWORD dwAssign, + DWORD dwWhichMoniker, + IMoniker * *ppmk); + + +void __stdcall IOleObject_GetMoniker_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_InitFromData_Proxy( + IOleObject * This, + IDataObject *pDataObject, + BOOL fCreation, + DWORD dwReserved); + + +void __stdcall IOleObject_InitFromData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_GetClipboardData_Proxy( + IOleObject * This, + DWORD dwReserved, + IDataObject * *ppDataObject); + + +void __stdcall IOleObject_GetClipboardData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_DoVerb_Proxy( + IOleObject * This, + LONG iVerb, + LPMSG lpmsg, + IOleClientSite *pActiveSite, + LONG lindex, + HWND hwndParent, + LPCRECT lprcPosRect); + + +void __stdcall IOleObject_DoVerb_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_EnumVerbs_Proxy( + IOleObject * This, + IEnumOLEVERB * *ppEnumOleVerb); + + +void __stdcall IOleObject_EnumVerbs_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_Update_Proxy( + IOleObject * This); + + +void __stdcall IOleObject_Update_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_IsUpToDate_Proxy( + IOleObject * This); + + +void __stdcall IOleObject_IsUpToDate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_GetUserClassID_Proxy( + IOleObject * This, + CLSID *pClsid); + + +void __stdcall IOleObject_GetUserClassID_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_GetUserType_Proxy( + IOleObject * This, + DWORD dwFormOfType, + LPOLESTR *pszUserType); + + +void __stdcall IOleObject_GetUserType_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_SetExtent_Proxy( + IOleObject * This, + DWORD dwDrawAspect, + SIZEL *psizel); + + +void __stdcall IOleObject_SetExtent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_GetExtent_Proxy( + IOleObject * This, + DWORD dwDrawAspect, + SIZEL *psizel); + + +void __stdcall IOleObject_GetExtent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_Advise_Proxy( + IOleObject * This, + IAdviseSink *pAdvSink, + DWORD *pdwConnection); + + +void __stdcall IOleObject_Advise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_Unadvise_Proxy( + IOleObject * This, + DWORD dwConnection); + + +void __stdcall IOleObject_Unadvise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_EnumAdvise_Proxy( + IOleObject * This, + IEnumSTATDATA * *ppenumAdvise); + + +void __stdcall IOleObject_EnumAdvise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_GetMiscStatus_Proxy( + IOleObject * This, + DWORD dwAspect, + DWORD *pdwStatus); + + +void __stdcall IOleObject_GetMiscStatus_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleObject_SetColorScheme_Proxy( + IOleObject * This, + LOGPALETTE *pLogpal); + + +void __stdcall IOleObject_SetColorScheme_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1983 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef +enum tagOLERENDER + { OLERENDER_NONE = 0, + OLERENDER_DRAW = 1, + OLERENDER_FORMAT = 2, + OLERENDER_ASIS = 3 + } OLERENDER; + +typedef OLERENDER *LPOLERENDER; + +typedef struct tagOBJECTDESCRIPTOR + { + ULONG cbSize; + CLSID clsid; + DWORD dwDrawAspect; + SIZEL sizel; + POINTL pointl; + DWORD dwStatus; + DWORD dwFullUserTypeName; + DWORD dwSrcOfCopy; + } OBJECTDESCRIPTOR; + +typedef struct tagOBJECTDESCRIPTOR *POBJECTDESCRIPTOR; + +typedef struct tagOBJECTDESCRIPTOR *LPOBJECTDESCRIPTOR; + +typedef struct tagOBJECTDESCRIPTOR LINKSRCDESCRIPTOR; + +typedef struct tagOBJECTDESCRIPTOR *PLINKSRCDESCRIPTOR; + +typedef struct tagOBJECTDESCRIPTOR *LPLINKSRCDESCRIPTOR; + + + +extern RPC_IF_HANDLE IOLETypes_v0_0_c_ifspec; +extern RPC_IF_HANDLE IOLETypes_v0_0_s_ifspec; +#line 2033 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + +typedef IOleWindow *LPOLEWINDOW; + + +extern const IID IID_IOleWindow; + + + + + + + + + + + + + + + +#line 2065 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleWindowVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleWindow * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleWindow * This); + + ULONG ( __stdcall *Release )( + IOleWindow * This); + + HRESULT ( __stdcall *GetWindow )( + IOleWindow * This, + HWND *phwnd); + + HRESULT ( __stdcall *ContextSensitiveHelp )( + IOleWindow * This, + BOOL fEnterMode); + + + } IOleWindowVtbl; + + struct IOleWindow + { + struct IOleWindowVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2122 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + HRESULT __stdcall IOleWindow_GetWindow_Proxy( + IOleWindow * This, + HWND *phwnd); + + +void __stdcall IOleWindow_GetWindow_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleWindow_ContextSensitiveHelp_Proxy( + IOleWindow * This, + BOOL fEnterMode); + + +void __stdcall IOleWindow_ContextSensitiveHelp_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2151 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleLink *LPOLELINK; + +typedef +enum tagOLEUPDATE + { OLEUPDATE_ALWAYS = 1, + OLEUPDATE_ONCALL = 3 + } OLEUPDATE; + +typedef OLEUPDATE *LPOLEUPDATE; + +typedef OLEUPDATE *POLEUPDATE; + +typedef +enum tagOLELINKBIND + { OLELINKBIND_EVENIFCLASSDIFF = 1 + } OLELINKBIND; + + +extern const IID IID_IOleLink; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2226 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleLinkVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleLink * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleLink * This); + + ULONG ( __stdcall *Release )( + IOleLink * This); + + HRESULT ( __stdcall *SetUpdateOptions )( + IOleLink * This, + DWORD dwUpdateOpt); + + HRESULT ( __stdcall *GetUpdateOptions )( + IOleLink * This, + DWORD *pdwUpdateOpt); + + HRESULT ( __stdcall *SetSourceMoniker )( + IOleLink * This, + IMoniker *pmk, + const CLSID * const rclsid); + + HRESULT ( __stdcall *GetSourceMoniker )( + IOleLink * This, + IMoniker * *ppmk); + + HRESULT ( __stdcall *SetSourceDisplayName )( + IOleLink * This, + LPCOLESTR pszStatusText); + + HRESULT ( __stdcall *GetSourceDisplayName )( + IOleLink * This, + LPOLESTR *ppszDisplayName); + + HRESULT ( __stdcall *BindToSource )( + IOleLink * This, + DWORD bindflags, + IBindCtx *pbc); + + HRESULT ( __stdcall *BindIfRunning )( + IOleLink * This); + + HRESULT ( __stdcall *GetBoundSource )( + IOleLink * This, + IUnknown * *ppunk); + + HRESULT ( __stdcall *UnbindSource )( + IOleLink * This); + + HRESULT ( __stdcall *Update )( + IOleLink * This, + IBindCtx *pbc); + + + } IOleLinkVtbl; + + struct IOleLink + { + struct IOleLinkVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2346 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IOleLink_SetUpdateOptions_Proxy( + IOleLink * This, + DWORD dwUpdateOpt); + + +void __stdcall IOleLink_SetUpdateOptions_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleLink_GetUpdateOptions_Proxy( + IOleLink * This, + DWORD *pdwUpdateOpt); + + +void __stdcall IOleLink_GetUpdateOptions_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleLink_SetSourceMoniker_Proxy( + IOleLink * This, + IMoniker *pmk, + const CLSID * const rclsid); + + +void __stdcall IOleLink_SetSourceMoniker_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleLink_GetSourceMoniker_Proxy( + IOleLink * This, + IMoniker * *ppmk); + + +void __stdcall IOleLink_GetSourceMoniker_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleLink_SetSourceDisplayName_Proxy( + IOleLink * This, + LPCOLESTR pszStatusText); + + +void __stdcall IOleLink_SetSourceDisplayName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleLink_GetSourceDisplayName_Proxy( + IOleLink * This, + LPOLESTR *ppszDisplayName); + + +void __stdcall IOleLink_GetSourceDisplayName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleLink_BindToSource_Proxy( + IOleLink * This, + DWORD bindflags, + IBindCtx *pbc); + + +void __stdcall IOleLink_BindToSource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleLink_BindIfRunning_Proxy( + IOleLink * This); + + +void __stdcall IOleLink_BindIfRunning_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleLink_GetBoundSource_Proxy( + IOleLink * This, + IUnknown * *ppunk); + + +void __stdcall IOleLink_GetBoundSource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleLink_UnbindSource_Proxy( + IOleLink * This); + + +void __stdcall IOleLink_UnbindSource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleLink_Update_Proxy( + IOleLink * This, + IBindCtx *pbc); + + +void __stdcall IOleLink_Update_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2483 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleItemContainer *LPOLEITEMCONTAINER; + +typedef +enum tagBINDSPEED + { BINDSPEED_INDEFINITE = 1, + BINDSPEED_MODERATE = 2, + BINDSPEED_IMMEDIATE = 3 + } BINDSPEED; + +typedef +enum tagOLECONTF + { OLECONTF_EMBEDDINGS = 1, + OLECONTF_LINKS = 2, + OLECONTF_OTHERS = 4, + OLECONTF_ONLYUSER = 8, + OLECONTF_ONLYIFRUNNING = 16 + } OLECONTF; + + +extern const IID IID_IOleItemContainer; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2542 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleItemContainerVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleItemContainer * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleItemContainer * This); + + ULONG ( __stdcall *Release )( + IOleItemContainer * This); + + HRESULT ( __stdcall *ParseDisplayName )( + IOleItemContainer * This, + IBindCtx *pbc, + LPOLESTR pszDisplayName, + ULONG *pchEaten, + IMoniker * *ppmkOut); + + HRESULT ( __stdcall *EnumObjects )( + IOleItemContainer * This, + DWORD grfFlags, + IEnumUnknown * *ppenum); + + HRESULT ( __stdcall *LockContainer )( + IOleItemContainer * This, + BOOL fLock); + + HRESULT ( __stdcall *GetObjectA )( + IOleItemContainer * This, + LPOLESTR pszItem, + DWORD dwSpeedNeeded, + IBindCtx *pbc, + const IID * const riid, + void * *ppvObject); + + HRESULT ( __stdcall *GetObjectStorage )( + IOleItemContainer * This, + LPOLESTR pszItem, + IBindCtx *pbc, + const IID * const riid, + void * *ppvStorage); + + HRESULT ( __stdcall *IsRunning )( + IOleItemContainer * This, + LPOLESTR pszItem); + + + } IOleItemContainerVtbl; + + struct IOleItemContainer + { + struct IOleItemContainerVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2640 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IOleItemContainer_GetObject_Proxy( + IOleItemContainer * This, + LPOLESTR pszItem, + DWORD dwSpeedNeeded, + IBindCtx *pbc, + const IID * const riid, + void * *ppvObject); + + +void __stdcall IOleItemContainer_GetObject_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleItemContainer_GetObjectStorage_Proxy( + IOleItemContainer * This, + LPOLESTR pszItem, + IBindCtx *pbc, + const IID * const riid, + void * *ppvStorage); + + +void __stdcall IOleItemContainer_GetObjectStorage_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleItemContainer_IsRunning_Proxy( + IOleItemContainer * This, + LPOLESTR pszItem); + + +void __stdcall IOleItemContainer_IsRunning_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2688 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW; + +typedef RECT BORDERWIDTHS; + +typedef LPRECT LPBORDERWIDTHS; + +typedef LPCRECT LPCBORDERWIDTHS; + + +extern const IID IID_IOleInPlaceUIWindow; + + + + + + + + + + + + + + + + + + + + + + +#line 2734 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleInPlaceUIWindowVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleInPlaceUIWindow * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleInPlaceUIWindow * This); + + ULONG ( __stdcall *Release )( + IOleInPlaceUIWindow * This); + + HRESULT ( __stdcall *GetWindow )( + IOleInPlaceUIWindow * This, + HWND *phwnd); + + HRESULT ( __stdcall *ContextSensitiveHelp )( + IOleInPlaceUIWindow * This, + BOOL fEnterMode); + + HRESULT ( __stdcall *GetBorder )( + IOleInPlaceUIWindow * This, + LPRECT lprectBorder); + + HRESULT ( __stdcall *RequestBorderSpace )( + IOleInPlaceUIWindow * This, + LPCBORDERWIDTHS pborderwidths); + + HRESULT ( __stdcall *SetBorderSpace )( + IOleInPlaceUIWindow * This, + LPCBORDERWIDTHS pborderwidths); + + HRESULT ( __stdcall *SetActiveObject )( + IOleInPlaceUIWindow * This, + IOleInPlaceActiveObject *pActiveObject, + LPCOLESTR pszObjName); + + + } IOleInPlaceUIWindowVtbl; + + struct IOleInPlaceUIWindow + { + struct IOleInPlaceUIWindowVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2821 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + HRESULT __stdcall IOleInPlaceUIWindow_GetBorder_Proxy( + IOleInPlaceUIWindow * This, + LPRECT lprectBorder); + + +void __stdcall IOleInPlaceUIWindow_GetBorder_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IOleInPlaceUIWindow_RequestBorderSpace_Proxy( + IOleInPlaceUIWindow * This, + LPCBORDERWIDTHS pborderwidths); + + +void __stdcall IOleInPlaceUIWindow_RequestBorderSpace_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IOleInPlaceUIWindow_SetBorderSpace_Proxy( + IOleInPlaceUIWindow * This, + LPCBORDERWIDTHS pborderwidths); + + +void __stdcall IOleInPlaceUIWindow_SetBorderSpace_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceUIWindow_SetActiveObject_Proxy( + IOleInPlaceUIWindow * This, + IOleInPlaceActiveObject *pActiveObject, + LPCOLESTR pszObjName); + + +void __stdcall IOleInPlaceUIWindow_SetActiveObject_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2875 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT; + + +extern const IID IID_IOleInPlaceActiveObject; + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2919 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleInPlaceActiveObjectVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleInPlaceActiveObject * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleInPlaceActiveObject * This); + + ULONG ( __stdcall *Release )( + IOleInPlaceActiveObject * This); + + HRESULT ( __stdcall *GetWindow )( + IOleInPlaceActiveObject * This, + HWND *phwnd); + + HRESULT ( __stdcall *ContextSensitiveHelp )( + IOleInPlaceActiveObject * This, + BOOL fEnterMode); + + HRESULT ( __stdcall *TranslateAcceleratorA )( + IOleInPlaceActiveObject * This, + LPMSG lpmsg); + + HRESULT ( __stdcall *OnFrameWindowActivate )( + IOleInPlaceActiveObject * This, + BOOL fActivate); + + HRESULT ( __stdcall *OnDocWindowActivate )( + IOleInPlaceActiveObject * This, + BOOL fActivate); + + HRESULT ( __stdcall *ResizeBorder )( + IOleInPlaceActiveObject * This, + LPCRECT prcBorder, + IOleInPlaceUIWindow *pUIWindow, + BOOL fFrameWindow); + + HRESULT ( __stdcall *EnableModeless )( + IOleInPlaceActiveObject * This, + BOOL fEnable); + + + } IOleInPlaceActiveObjectVtbl; + + struct IOleInPlaceActiveObject + { + struct IOleInPlaceActiveObjectVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3014 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + HRESULT __stdcall IOleInPlaceActiveObject_RemoteTranslateAccelerator_Proxy( + IOleInPlaceActiveObject * This); + + +void __stdcall IOleInPlaceActiveObject_RemoteTranslateAccelerator_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IOleInPlaceActiveObject_OnFrameWindowActivate_Proxy( + IOleInPlaceActiveObject * This, + BOOL fActivate); + + +void __stdcall IOleInPlaceActiveObject_OnFrameWindowActivate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IOleInPlaceActiveObject_OnDocWindowActivate_Proxy( + IOleInPlaceActiveObject * This, + BOOL fActivate); + + +void __stdcall IOleInPlaceActiveObject_OnDocWindowActivate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IOleInPlaceActiveObject_RemoteResizeBorder_Proxy( + IOleInPlaceActiveObject * This, + LPCRECT prcBorder, + const IID * const riid, + IOleInPlaceUIWindow *pUIWindow, + BOOL fFrameWindow); + + +void __stdcall IOleInPlaceActiveObject_RemoteResizeBorder_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceActiveObject_EnableModeless_Proxy( + IOleInPlaceActiveObject * This, + BOOL fEnable); + + +void __stdcall IOleInPlaceActiveObject_EnableModeless_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3081 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleInPlaceFrame *LPOLEINPLACEFRAME; + +typedef struct tagOIFI + { + UINT cb; + BOOL fMDIApp; + HWND hwndFrame; + HACCEL haccel; + UINT cAccelEntries; + } OLEINPLACEFRAMEINFO; + +typedef struct tagOIFI *LPOLEINPLACEFRAMEINFO; + +typedef struct tagOleMenuGroupWidths + { + LONG width[ 6 ]; + } OLEMENUGROUPWIDTHS; + +typedef struct tagOleMenuGroupWidths *LPOLEMENUGROUPWIDTHS; + +typedef HGLOBAL HOLEMENU; + + +extern const IID IID_IOleInPlaceFrame; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3150 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleInPlaceFrameVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleInPlaceFrame * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleInPlaceFrame * This); + + ULONG ( __stdcall *Release )( + IOleInPlaceFrame * This); + + HRESULT ( __stdcall *GetWindow )( + IOleInPlaceFrame * This, + HWND *phwnd); + + HRESULT ( __stdcall *ContextSensitiveHelp )( + IOleInPlaceFrame * This, + BOOL fEnterMode); + + HRESULT ( __stdcall *GetBorder )( + IOleInPlaceFrame * This, + LPRECT lprectBorder); + + HRESULT ( __stdcall *RequestBorderSpace )( + IOleInPlaceFrame * This, + LPCBORDERWIDTHS pborderwidths); + + HRESULT ( __stdcall *SetBorderSpace )( + IOleInPlaceFrame * This, + LPCBORDERWIDTHS pborderwidths); + + HRESULT ( __stdcall *SetActiveObject )( + IOleInPlaceFrame * This, + IOleInPlaceActiveObject *pActiveObject, + LPCOLESTR pszObjName); + + HRESULT ( __stdcall *InsertMenus )( + IOleInPlaceFrame * This, + HMENU hmenuShared, + LPOLEMENUGROUPWIDTHS lpMenuWidths); + + HRESULT ( __stdcall *SetMenu )( + IOleInPlaceFrame * This, + HMENU hmenuShared, + HOLEMENU holemenu, + HWND hwndActiveObject); + + HRESULT ( __stdcall *RemoveMenus )( + IOleInPlaceFrame * This, + HMENU hmenuShared); + + HRESULT ( __stdcall *SetStatusText )( + IOleInPlaceFrame * This, + LPCOLESTR pszStatusText); + + HRESULT ( __stdcall *EnableModeless )( + IOleInPlaceFrame * This, + BOOL fEnable); + + HRESULT ( __stdcall *TranslateAcceleratorA )( + IOleInPlaceFrame * This, + LPMSG lpmsg, + WORD wID); + + + } IOleInPlaceFrameVtbl; + + struct IOleInPlaceFrame + { + struct IOleInPlaceFrameVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3284 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IOleInPlaceFrame_InsertMenus_Proxy( + IOleInPlaceFrame * This, + HMENU hmenuShared, + LPOLEMENUGROUPWIDTHS lpMenuWidths); + + +void __stdcall IOleInPlaceFrame_InsertMenus_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IOleInPlaceFrame_SetMenu_Proxy( + IOleInPlaceFrame * This, + HMENU hmenuShared, + HOLEMENU holemenu, + HWND hwndActiveObject); + + +void __stdcall IOleInPlaceFrame_SetMenu_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceFrame_RemoveMenus_Proxy( + IOleInPlaceFrame * This, + HMENU hmenuShared); + + +void __stdcall IOleInPlaceFrame_RemoveMenus_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IOleInPlaceFrame_SetStatusText_Proxy( + IOleInPlaceFrame * This, + LPCOLESTR pszStatusText); + + +void __stdcall IOleInPlaceFrame_SetStatusText_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceFrame_EnableModeless_Proxy( + IOleInPlaceFrame * This, + BOOL fEnable); + + +void __stdcall IOleInPlaceFrame_EnableModeless_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceFrame_TranslateAccelerator_Proxy( + IOleInPlaceFrame * This, + LPMSG lpmsg, + WORD wID); + + +void __stdcall IOleInPlaceFrame_TranslateAccelerator_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3365 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleInPlaceObject *LPOLEINPLACEOBJECT; + + +extern const IID IID_IOleInPlaceObject; + + + + + + + + + + + + + + + + + + + +#line 3402 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleInPlaceObjectVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleInPlaceObject * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleInPlaceObject * This); + + ULONG ( __stdcall *Release )( + IOleInPlaceObject * This); + + HRESULT ( __stdcall *GetWindow )( + IOleInPlaceObject * This, + HWND *phwnd); + + HRESULT ( __stdcall *ContextSensitiveHelp )( + IOleInPlaceObject * This, + BOOL fEnterMode); + + HRESULT ( __stdcall *InPlaceDeactivate )( + IOleInPlaceObject * This); + + HRESULT ( __stdcall *UIDeactivate )( + IOleInPlaceObject * This); + + HRESULT ( __stdcall *SetObjectRects )( + IOleInPlaceObject * This, + LPCRECT lprcPosRect, + LPCRECT lprcClipRect); + + HRESULT ( __stdcall *ReactivateAndUndo )( + IOleInPlaceObject * This); + + + } IOleInPlaceObjectVtbl; + + struct IOleInPlaceObject + { + struct IOleInPlaceObjectVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3486 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IOleInPlaceObject_InPlaceDeactivate_Proxy( + IOleInPlaceObject * This); + + +void __stdcall IOleInPlaceObject_InPlaceDeactivate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceObject_UIDeactivate_Proxy( + IOleInPlaceObject * This); + + +void __stdcall IOleInPlaceObject_UIDeactivate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IOleInPlaceObject_SetObjectRects_Proxy( + IOleInPlaceObject * This, + LPCRECT lprcPosRect, + LPCRECT lprcClipRect); + + +void __stdcall IOleInPlaceObject_SetObjectRects_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceObject_ReactivateAndUndo_Proxy( + IOleInPlaceObject * This); + + +void __stdcall IOleInPlaceObject_ReactivateAndUndo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3537 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IOleInPlaceSite *LPOLEINPLACESITE; + + +extern const IID IID_IOleInPlaceSite; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3592 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IOleInPlaceSiteVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IOleInPlaceSite * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IOleInPlaceSite * This); + + ULONG ( __stdcall *Release )( + IOleInPlaceSite * This); + + HRESULT ( __stdcall *GetWindow )( + IOleInPlaceSite * This, + HWND *phwnd); + + HRESULT ( __stdcall *ContextSensitiveHelp )( + IOleInPlaceSite * This, + BOOL fEnterMode); + + HRESULT ( __stdcall *CanInPlaceActivate )( + IOleInPlaceSite * This); + + HRESULT ( __stdcall *OnInPlaceActivate )( + IOleInPlaceSite * This); + + HRESULT ( __stdcall *OnUIActivate )( + IOleInPlaceSite * This); + + HRESULT ( __stdcall *GetWindowContext )( + IOleInPlaceSite * This, + IOleInPlaceFrame * *ppFrame, + IOleInPlaceUIWindow * *ppDoc, + LPRECT lprcPosRect, + LPRECT lprcClipRect, + LPOLEINPLACEFRAMEINFO lpFrameInfo); + + HRESULT ( __stdcall *Scroll )( + IOleInPlaceSite * This, + SIZE scrollExtant); + + HRESULT ( __stdcall *OnUIDeactivate )( + IOleInPlaceSite * This, + BOOL fUndoable); + + HRESULT ( __stdcall *OnInPlaceDeactivate )( + IOleInPlaceSite * This); + + HRESULT ( __stdcall *DiscardUndoState )( + IOleInPlaceSite * This); + + HRESULT ( __stdcall *DeactivateAndUndo )( + IOleInPlaceSite * This); + + HRESULT ( __stdcall *OnPosRectChange )( + IOleInPlaceSite * This, + LPCRECT lprcPosRect); + + + } IOleInPlaceSiteVtbl; + + struct IOleInPlaceSite + { + struct IOleInPlaceSiteVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3718 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IOleInPlaceSite_CanInPlaceActivate_Proxy( + IOleInPlaceSite * This); + + +void __stdcall IOleInPlaceSite_CanInPlaceActivate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceSite_OnInPlaceActivate_Proxy( + IOleInPlaceSite * This); + + +void __stdcall IOleInPlaceSite_OnInPlaceActivate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceSite_OnUIActivate_Proxy( + IOleInPlaceSite * This); + + +void __stdcall IOleInPlaceSite_OnUIActivate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceSite_GetWindowContext_Proxy( + IOleInPlaceSite * This, + IOleInPlaceFrame * *ppFrame, + IOleInPlaceUIWindow * *ppDoc, + LPRECT lprcPosRect, + LPRECT lprcClipRect, + LPOLEINPLACEFRAMEINFO lpFrameInfo); + + +void __stdcall IOleInPlaceSite_GetWindowContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceSite_Scroll_Proxy( + IOleInPlaceSite * This, + SIZE scrollExtant); + + +void __stdcall IOleInPlaceSite_Scroll_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceSite_OnUIDeactivate_Proxy( + IOleInPlaceSite * This, + BOOL fUndoable); + + +void __stdcall IOleInPlaceSite_OnUIDeactivate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceSite_OnInPlaceDeactivate_Proxy( + IOleInPlaceSite * This); + + +void __stdcall IOleInPlaceSite_OnInPlaceDeactivate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceSite_DiscardUndoState_Proxy( + IOleInPlaceSite * This); + + +void __stdcall IOleInPlaceSite_DiscardUndoState_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceSite_DeactivateAndUndo_Proxy( + IOleInPlaceSite * This); + + +void __stdcall IOleInPlaceSite_DeactivateAndUndo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IOleInPlaceSite_OnPosRectChange_Proxy( + IOleInPlaceSite * This, + LPCRECT lprcPosRect); + + +void __stdcall IOleInPlaceSite_OnPosRectChange_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3841 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + + +extern const IID IID_IContinue; + + + + + + + + + + + +#line 3868 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IContinueVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IContinue * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IContinue * This); + + ULONG ( __stdcall *Release )( + IContinue * This); + + HRESULT ( __stdcall *FContinue )( + IContinue * This); + + + } IContinueVtbl; + + struct IContinue + { + struct IContinueVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 3917 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IContinue_FContinue_Proxy( + IContinue * This); + + +void __stdcall IContinue_FContinue_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3933 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IViewObject *LPVIEWOBJECT; + + +extern const IID IID_IViewObject; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4000 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IViewObjectVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IViewObject * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IViewObject * This); + + ULONG ( __stdcall *Release )( + IViewObject * This); + + HRESULT ( __stdcall *Draw )( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + void *pvAspect, + DVTARGETDEVICE *ptd, + HDC hdcTargetDev, + HDC hdcDraw, + LPCRECTL lprcBounds, + LPCRECTL lprcWBounds, + BOOL ( __stdcall *pfnContinue )( + DWORD dwContinue), + DWORD dwContinue); + + HRESULT ( __stdcall *GetColorSet )( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + void *pvAspect, + DVTARGETDEVICE *ptd, + HDC hicTargetDev, + LOGPALETTE * *ppColorSet); + + HRESULT ( __stdcall *Freeze )( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + void *pvAspect, + DWORD *pdwFreeze); + + HRESULT ( __stdcall *Unfreeze )( + IViewObject * This, + DWORD dwFreeze); + + HRESULT ( __stdcall *SetAdvise )( + IViewObject * This, + DWORD aspects, + DWORD advf, + IAdviseSink *pAdvSink); + + HRESULT ( __stdcall *GetAdvise )( + IViewObject * This, + DWORD *pAspects, + DWORD *pAdvf, + IAdviseSink * *ppAdvSink); + + + } IViewObjectVtbl; + + struct IViewObject + { + struct IViewObjectVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4107 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + HRESULT __stdcall IViewObject_RemoteDraw_Proxy( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + DWORD pvAspect, + DVTARGETDEVICE *ptd, + DWORD hdcTargetDev, + DWORD hdcDraw, + LPCRECTL lprcBounds, + LPCRECTL lprcWBounds, + IContinue *pContinue); + + +void __stdcall IViewObject_RemoteDraw_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IViewObject_RemoteGetColorSet_Proxy( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + DWORD pvAspect, + DVTARGETDEVICE *ptd, + DWORD hicTargetDev, + LOGPALETTE * *ppColorSet); + + +void __stdcall IViewObject_RemoteGetColorSet_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IViewObject_RemoteFreeze_Proxy( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + DWORD pvAspect, + DWORD *pdwFreeze); + + +void __stdcall IViewObject_RemoteFreeze_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IViewObject_Unfreeze_Proxy( + IViewObject * This, + DWORD dwFreeze); + + +void __stdcall IViewObject_Unfreeze_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IViewObject_SetAdvise_Proxy( + IViewObject * This, + DWORD aspects, + DWORD advf, + IAdviseSink *pAdvSink); + + +void __stdcall IViewObject_SetAdvise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IViewObject_RemoteGetAdvise_Proxy( + IViewObject * This, + DWORD *pAspects, + DWORD *pAdvf, + IAdviseSink * *ppAdvSink); + + +void __stdcall IViewObject_RemoteGetAdvise_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4204 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IViewObject2 *LPVIEWOBJECT2; + + +extern const IID IID_IViewObject2; + + + + + + + + + + + + + + + +#line 4237 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IViewObject2Vtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IViewObject2 * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IViewObject2 * This); + + ULONG ( __stdcall *Release )( + IViewObject2 * This); + + HRESULT ( __stdcall *Draw )( + IViewObject2 * This, + DWORD dwDrawAspect, + LONG lindex, + void *pvAspect, + DVTARGETDEVICE *ptd, + HDC hdcTargetDev, + HDC hdcDraw, + LPCRECTL lprcBounds, + LPCRECTL lprcWBounds, + BOOL ( __stdcall *pfnContinue )( + DWORD dwContinue), + DWORD dwContinue); + + HRESULT ( __stdcall *GetColorSet )( + IViewObject2 * This, + DWORD dwDrawAspect, + LONG lindex, + void *pvAspect, + DVTARGETDEVICE *ptd, + HDC hicTargetDev, + LOGPALETTE * *ppColorSet); + + HRESULT ( __stdcall *Freeze )( + IViewObject2 * This, + DWORD dwDrawAspect, + LONG lindex, + void *pvAspect, + DWORD *pdwFreeze); + + HRESULT ( __stdcall *Unfreeze )( + IViewObject2 * This, + DWORD dwFreeze); + + HRESULT ( __stdcall *SetAdvise )( + IViewObject2 * This, + DWORD aspects, + DWORD advf, + IAdviseSink *pAdvSink); + + HRESULT ( __stdcall *GetAdvise )( + IViewObject2 * This, + DWORD *pAspects, + DWORD *pAdvf, + IAdviseSink * *ppAdvSink); + + HRESULT ( __stdcall *GetExtent )( + IViewObject2 * This, + DWORD dwDrawAspect, + LONG lindex, + DVTARGETDEVICE *ptd, + LPSIZEL lpsizel); + + + } IViewObject2Vtbl; + + struct IViewObject2 + { + struct IViewObject2Vtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4355 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IViewObject2_GetExtent_Proxy( + IViewObject2 * This, + DWORD dwDrawAspect, + LONG lindex, + DVTARGETDEVICE *ptd, + LPSIZEL lpsizel); + + +void __stdcall IViewObject2_GetExtent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4375 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IDropSource *LPDROPSOURCE; + + +extern const IID IID_IDropSource; + + + + + + + + + + + + + + + + +#line 4409 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IDropSourceVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IDropSource * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IDropSource * This); + + ULONG ( __stdcall *Release )( + IDropSource * This); + + HRESULT ( __stdcall *QueryContinueDrag )( + IDropSource * This, + BOOL fEscapePressed, + DWORD grfKeyState); + + HRESULT ( __stdcall *GiveFeedback )( + IDropSource * This, + DWORD dwEffect); + + + } IDropSourceVtbl; + + struct IDropSource + { + struct IDropSourceVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4467 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IDropSource_QueryContinueDrag_Proxy( + IDropSource * This, + BOOL fEscapePressed, + DWORD grfKeyState); + + +void __stdcall IDropSource_QueryContinueDrag_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDropSource_GiveFeedback_Proxy( + IDropSource * This, + DWORD dwEffect); + + +void __stdcall IDropSource_GiveFeedback_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4497 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IDropTarget *LPDROPTARGET; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern const IID IID_IDropTarget; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4575 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IDropTargetVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IDropTarget * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IDropTarget * This); + + ULONG ( __stdcall *Release )( + IDropTarget * This); + + HRESULT ( __stdcall *DragEnter )( + IDropTarget * This, + IDataObject *pDataObj, + DWORD grfKeyState, + POINTL pt, + DWORD *pdwEffect); + + HRESULT ( __stdcall *DragOver )( + IDropTarget * This, + DWORD grfKeyState, + POINTL pt, + DWORD *pdwEffect); + + HRESULT ( __stdcall *DragLeave )( + IDropTarget * This); + + HRESULT ( __stdcall *Drop )( + IDropTarget * This, + IDataObject *pDataObj, + DWORD grfKeyState, + POINTL pt, + DWORD *pdwEffect); + + + } IDropTargetVtbl; + + struct IDropTarget + { + struct IDropTargetVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4653 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + +HRESULT __stdcall IDropTarget_DragEnter_Proxy( + IDropTarget * This, + IDataObject *pDataObj, + DWORD grfKeyState, + POINTL pt, + DWORD *pdwEffect); + + +void __stdcall IDropTarget_DragEnter_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDropTarget_DragOver_Proxy( + IDropTarget * This, + DWORD grfKeyState, + POINTL pt, + DWORD *pdwEffect); + + +void __stdcall IDropTarget_DragOver_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDropTarget_DragLeave_Proxy( + IDropTarget * This); + + +void __stdcall IDropTarget_DragLeave_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDropTarget_Drop_Proxy( + IDropTarget * This, + IDataObject *pDataObj, + DWORD grfKeyState, + POINTL pt, + DWORD *pdwEffect); + + +void __stdcall IDropTarget_Drop_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4713 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + +typedef IEnumOLEVERB *LPENUMOLEVERB; + +typedef struct tagOLEVERB + { + LONG lVerb; + LPOLESTR lpszVerbName; + DWORD fuFlags; + DWORD grfAttribs; + } OLEVERB; + +typedef struct tagOLEVERB *LPOLEVERB; + +typedef +enum tagOLEVERBATTRIB + { OLEVERBATTRIB_NEVERDIRTIES = 1, + OLEVERBATTRIB_ONCONTAINERMENU = 2 + } OLEVERBATTRIB; + + +extern const IID IID_IEnumOLEVERB; + + + + + + + + + + + + + + + + + + + + + + +#line 4769 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + typedef struct IEnumOLEVERBVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumOLEVERB * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumOLEVERB * This); + + ULONG ( __stdcall *Release )( + IEnumOLEVERB * This); + + HRESULT ( __stdcall *Next )( + IEnumOLEVERB * This, + ULONG celt, + LPOLEVERB rgelt, + ULONG *pceltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumOLEVERB * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumOLEVERB * This); + + HRESULT ( __stdcall *Clone )( + IEnumOLEVERB * This, + IEnumOLEVERB * *ppenum); + + + } IEnumOLEVERBVtbl; + + struct IEnumOLEVERB + { + struct IEnumOLEVERBVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4841 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + HRESULT __stdcall IEnumOLEVERB_RemoteNext_Proxy( + IEnumOLEVERB * This, + ULONG celt, + LPOLEVERB rgelt, + ULONG *pceltFetched); + + +void __stdcall IEnumOLEVERB_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumOLEVERB_Skip_Proxy( + IEnumOLEVERB * This, + ULONG celt); + + +void __stdcall IEnumOLEVERB_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumOLEVERB_Reset_Proxy( + IEnumOLEVERB * This); + + +void __stdcall IEnumOLEVERB_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumOLEVERB_Clone_Proxy( + IEnumOLEVERB * This, + IEnumOLEVERB * *ppenum); + + +void __stdcall IEnumOLEVERB_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4895 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + +unsigned long __stdcall CLIPFORMAT_UserSize( unsigned long *, unsigned long , CLIPFORMAT * ); +unsigned char * __stdcall CLIPFORMAT_UserMarshal( unsigned long *, unsigned char *, CLIPFORMAT * ); +unsigned char * __stdcall CLIPFORMAT_UserUnmarshal(unsigned long *, unsigned char *, CLIPFORMAT * ); +void __stdcall CLIPFORMAT_UserFree( unsigned long *, CLIPFORMAT * ); + +unsigned long __stdcall HACCEL_UserSize( unsigned long *, unsigned long , HACCEL * ); +unsigned char * __stdcall HACCEL_UserMarshal( unsigned long *, unsigned char *, HACCEL * ); +unsigned char * __stdcall HACCEL_UserUnmarshal(unsigned long *, unsigned char *, HACCEL * ); +void __stdcall HACCEL_UserFree( unsigned long *, HACCEL * ); + +unsigned long __stdcall HGLOBAL_UserSize( unsigned long *, unsigned long , HGLOBAL * ); +unsigned char * __stdcall HGLOBAL_UserMarshal( unsigned long *, unsigned char *, HGLOBAL * ); +unsigned char * __stdcall HGLOBAL_UserUnmarshal(unsigned long *, unsigned char *, HGLOBAL * ); +void __stdcall HGLOBAL_UserFree( unsigned long *, HGLOBAL * ); + +unsigned long __stdcall HMENU_UserSize( unsigned long *, unsigned long , HMENU * ); +unsigned char * __stdcall HMENU_UserMarshal( unsigned long *, unsigned char *, HMENU * ); +unsigned char * __stdcall HMENU_UserUnmarshal(unsigned long *, unsigned char *, HMENU * ); +void __stdcall HMENU_UserFree( unsigned long *, HMENU * ); + +unsigned long __stdcall HWND_UserSize( unsigned long *, unsigned long , HWND * ); +unsigned char * __stdcall HWND_UserMarshal( unsigned long *, unsigned char *, HWND * ); +unsigned char * __stdcall HWND_UserUnmarshal(unsigned long *, unsigned char *, HWND * ); +void __stdcall HWND_UserFree( unsigned long *, HWND * ); + +unsigned long __stdcall STGMEDIUM_UserSize( unsigned long *, unsigned long , STGMEDIUM * ); +unsigned char * __stdcall STGMEDIUM_UserMarshal( unsigned long *, unsigned char *, STGMEDIUM * ); +unsigned char * __stdcall STGMEDIUM_UserUnmarshal(unsigned long *, unsigned char *, STGMEDIUM * ); +void __stdcall STGMEDIUM_UserFree( unsigned long *, STGMEDIUM * ); + + HRESULT __stdcall IOleInPlaceActiveObject_TranslateAccelerator_Proxy( + IOleInPlaceActiveObject * This, + LPMSG lpmsg); + + + HRESULT __stdcall IOleInPlaceActiveObject_TranslateAccelerator_Stub( + IOleInPlaceActiveObject * This); + + HRESULT __stdcall IOleInPlaceActiveObject_ResizeBorder_Proxy( + IOleInPlaceActiveObject * This, + LPCRECT prcBorder, + IOleInPlaceUIWindow *pUIWindow, + BOOL fFrameWindow); + + + HRESULT __stdcall IOleInPlaceActiveObject_ResizeBorder_Stub( + IOleInPlaceActiveObject * This, + LPCRECT prcBorder, + const IID * const riid, + IOleInPlaceUIWindow *pUIWindow, + BOOL fFrameWindow); + + HRESULT __stdcall IViewObject_Draw_Proxy( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + void *pvAspect, + DVTARGETDEVICE *ptd, + HDC hdcTargetDev, + HDC hdcDraw, + LPCRECTL lprcBounds, + LPCRECTL lprcWBounds, + BOOL ( __stdcall *pfnContinue )( + DWORD dwContinue), + DWORD dwContinue); + + + HRESULT __stdcall IViewObject_Draw_Stub( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + DWORD pvAspect, + DVTARGETDEVICE *ptd, + DWORD hdcTargetDev, + DWORD hdcDraw, + LPCRECTL lprcBounds, + LPCRECTL lprcWBounds, + IContinue *pContinue); + + HRESULT __stdcall IViewObject_GetColorSet_Proxy( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + void *pvAspect, + DVTARGETDEVICE *ptd, + HDC hicTargetDev, + LOGPALETTE * *ppColorSet); + + + HRESULT __stdcall IViewObject_GetColorSet_Stub( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + DWORD pvAspect, + DVTARGETDEVICE *ptd, + DWORD hicTargetDev, + LOGPALETTE * *ppColorSet); + + HRESULT __stdcall IViewObject_Freeze_Proxy( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + void *pvAspect, + DWORD *pdwFreeze); + + + HRESULT __stdcall IViewObject_Freeze_Stub( + IViewObject * This, + DWORD dwDrawAspect, + LONG lindex, + DWORD pvAspect, + DWORD *pdwFreeze); + + HRESULT __stdcall IViewObject_GetAdvise_Proxy( + IViewObject * This, + DWORD *pAspects, + DWORD *pAdvf, + IAdviseSink * *ppAdvSink); + + + HRESULT __stdcall IViewObject_GetAdvise_Stub( + IViewObject * This, + DWORD *pAspects, + DWORD *pAdvf, + IAdviseSink * *ppAdvSink); + + HRESULT __stdcall IEnumOLEVERB_Next_Proxy( + IEnumOLEVERB * This, + ULONG celt, + LPOLEVERB rgelt, + ULONG *pceltFetched); + + + HRESULT __stdcall IEnumOLEVERB_Next_Stub( + IEnumOLEVERB * This, + ULONG celt, + LPOLEVERB rgelt, + ULONG *pceltFetched); + + HRESULT __stdcall IOleCache2_UpdateCache_Proxy( + IOleCache2 * This, + LPDATAOBJECT pDataObject, + DWORD grfUpdf, + LPVOID pReserved); + + + HRESULT __stdcall IOleCache2_UpdateCache_Stub( + IOleCache2 * This, + LPDATAOBJECT pDataObject, + DWORD grfUpdf, + DWORD pReserved); + + + + + + + + + +#line 5060 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" +#line 199 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" + + + + + + + + + + + + +typedef struct IServiceProvider IServiceProvider; +#line 44 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 48 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" + +void * __stdcall MIDL_user_allocate(size_t); +void __stdcall MIDL_user_free( void * ); + + + + + + + + + + + + + + + + + + + + +#pragma comment(lib,"uuid.lib") + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_servprov_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_servprov_0000_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IServiceProvider *LPSERVICEPROVIDER; + + +extern const IID IID_IServiceProvider; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 130 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" + + typedef struct IServiceProviderVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IServiceProvider * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IServiceProvider * This); + + ULONG ( __stdcall *Release )( + IServiceProvider * This); + + HRESULT ( __stdcall *QueryService )( + IServiceProvider * This, + const GUID * const guidService, + const IID * const riid, + void * *ppvObject); + + + } IServiceProviderVtbl; + + struct IServiceProvider + { + struct IServiceProviderVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 182 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" + + + + HRESULT __stdcall IServiceProvider_RemoteQueryService_Proxy( + IServiceProvider * This, + const GUID * const guidService, + const IID * const riid, + IUnknown * *ppvObject); + + +void __stdcall IServiceProvider_RemoteQueryService_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 201 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" + + + + + + + + + + +#line 212 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" + + +extern RPC_IF_HANDLE __MIDL_itf_servprov_0074_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_servprov_0074_v0_0_s_ifspec; + + + + HRESULT __stdcall IServiceProvider_QueryService_Proxy( + IServiceProvider * This, + const GUID * const guidService, + const IID * const riid, + void * *ppvObject); + + + HRESULT __stdcall IServiceProvider_QueryService_Stub( + IServiceProvider * This, + const GUID * const guidService, + const IID * const riid, + IUnknown * *ppvObject); + + + + + + + + + +#line 241 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\servprov.h" +#line 200 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 13 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 14 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + + + + + + + + + +typedef struct IXMLElementCollection IXMLElementCollection; +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + +typedef struct IXMLDocument IXMLDocument; +#line 34 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + +typedef struct IXMLElement IXMLElement; +#line 40 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + +typedef struct IXMLError IXMLError; +#line 46 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + +typedef struct IXMLElementNotificationSink IXMLElementNotificationSink; +#line 52 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + + + + + +typedef struct XMLDocument XMLDocument; +#line 62 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + +#line 64 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\unknwn.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 68 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 69 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + +typedef struct ICreateTypeInfo ICreateTypeInfo; +#line 44 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ICreateTypeInfo2 ICreateTypeInfo2; +#line 50 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ICreateTypeLib ICreateTypeLib; +#line 56 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ICreateTypeLib2 ICreateTypeLib2; +#line 62 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct IDispatch IDispatch; +#line 68 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct IEnumVARIANT IEnumVARIANT; +#line 74 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ITypeComp ITypeComp; +#line 80 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ITypeInfo ITypeInfo; +#line 86 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ITypeInfo2 ITypeInfo2; +#line 92 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ITypeLib ITypeLib; +#line 98 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ITypeLib2 ITypeLib2; +#line 104 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ITypeChangeEvents ITypeChangeEvents; +#line 110 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct IErrorInfo IErrorInfo; +#line 116 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ICreateErrorInfo ICreateErrorInfo; +#line 122 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ISupportErrorInfo ISupportErrorInfo; +#line 128 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ITypeFactory ITypeFactory; +#line 134 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct ITypeMarshal ITypeMarshal; +#line 140 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + +typedef struct IRecordInfo IRecordInfo; +#line 146 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objidl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 150 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + +void * __stdcall MIDL_user_allocate(size_t); +void __stdcall MIDL_user_free( void * ); + + + + + + + + + + + + + + + + +#pragma warning(disable:4201) +#line 171 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_oaidl_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_oaidl_0000_v0_0_s_ifspec; + + + + + + + + + + + + +typedef CY CURRENCY; + +typedef struct tagSAFEARRAYBOUND + { + ULONG cElements; + LONG lLbound; + } SAFEARRAYBOUND; + +typedef struct tagSAFEARRAYBOUND *LPSAFEARRAYBOUND; + + +typedef struct _wireVARIANT *wireVARIANT; + +typedef struct _wireBRECORD *wireBRECORD; + +typedef struct _wireSAFEARR_BSTR + { + ULONG Size; + wireBSTR *aBstr; + } SAFEARR_BSTR; + +typedef struct _wireSAFEARR_UNKNOWN + { + ULONG Size; + IUnknown * *apUnknown; + } SAFEARR_UNKNOWN; + +typedef struct _wireSAFEARR_DISPATCH + { + ULONG Size; + IDispatch * *apDispatch; + } SAFEARR_DISPATCH; + +typedef struct _wireSAFEARR_VARIANT + { + ULONG Size; + wireVARIANT *aVariant; + } SAFEARR_VARIANT; + +typedef struct _wireSAFEARR_BRECORD + { + ULONG Size; + wireBRECORD *aRecord; + } SAFEARR_BRECORD; + +typedef struct _wireSAFEARR_HAVEIID + { + ULONG Size; + IUnknown * *apUnknown; + IID iid; + } SAFEARR_HAVEIID; + +typedef +enum tagSF_TYPE + { SF_ERROR = VT_ERROR, + SF_I1 = VT_I1, + SF_I2 = VT_I2, + SF_I4 = VT_I4, + SF_I8 = VT_I8, + SF_BSTR = VT_BSTR, + SF_UNKNOWN = VT_UNKNOWN, + SF_DISPATCH = VT_DISPATCH, + SF_VARIANT = VT_VARIANT, + SF_RECORD = VT_RECORD, + SF_HAVEIID = VT_UNKNOWN | VT_RESERVED + } SF_TYPE; + +typedef struct _wireSAFEARRAY_UNION + { + ULONG sfType; + union __MIDL_IOleAutomationTypes_0001 + { + SAFEARR_BSTR BstrStr; + SAFEARR_UNKNOWN UnknownStr; + SAFEARR_DISPATCH DispatchStr; + SAFEARR_VARIANT VariantStr; + SAFEARR_BRECORD RecordStr; + SAFEARR_HAVEIID HaveIidStr; + BYTE_SIZEDARR ByteStr; + WORD_SIZEDARR WordStr; + DWORD_SIZEDARR LongStr; + HYPER_SIZEDARR HyperStr; + } u; + } SAFEARRAYUNION; + +typedef struct _wireSAFEARRAY + { + USHORT cDims; + USHORT fFeatures; + ULONG cbElements; + ULONG cLocks; + SAFEARRAYUNION uArrayStructs; + SAFEARRAYBOUND rgsabound[ 1 ]; + } *wireSAFEARRAY; + +typedef wireSAFEARRAY *wirePSAFEARRAY; + +typedef struct tagSAFEARRAY + { + USHORT cDims; + USHORT fFeatures; + ULONG cbElements; + ULONG cLocks; + PVOID pvData; + SAFEARRAYBOUND rgsabound[ 1 ]; + } SAFEARRAY; + +typedef SAFEARRAY *LPSAFEARRAY; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 399 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" +typedef struct tagVARIANT VARIANT; + +struct tagVARIANT + { + union + { + struct __tagVARIANT + { + VARTYPE vt; + WORD wReserved1; + WORD wReserved2; + WORD wReserved3; + union + { + LONG lVal; + BYTE bVal; + SHORT iVal; + FLOAT fltVal; + DOUBLE dblVal; + VARIANT_BOOL boolVal; + + SCODE scode; + CY cyVal; + DATE date; + BSTR bstrVal; + IUnknown *punkVal; + IDispatch *pdispVal; + SAFEARRAY *parray; + BYTE *pbVal; + SHORT *piVal; + LONG *plVal; + FLOAT *pfltVal; + DOUBLE *pdblVal; + VARIANT_BOOL *pboolVal; + + SCODE *pscode; + CY *pcyVal; + DATE *pdate; + BSTR *pbstrVal; + IUnknown * *ppunkVal; + IDispatch * *ppdispVal; + SAFEARRAY * *pparray; + VARIANT *pvarVal; + PVOID byref; + CHAR cVal; + USHORT uiVal; + ULONG ulVal; + INT intVal; + UINT uintVal; + DECIMAL *pdecVal; + CHAR *pcVal; + USHORT *puiVal; + ULONG *pulVal; + INT *pintVal; + UINT *puintVal; + struct __tagBRECORD + { + PVOID pvRecord; + IRecordInfo *pRecInfo; + } brecVal; + } n3; + } n2; + DECIMAL decVal; + } n1; + }; +typedef VARIANT *LPVARIANT; + +typedef VARIANT VARIANTARG; + +typedef VARIANT *LPVARIANTARG; + + +struct _wireBRECORD + { + ULONG fFlags; + ULONG clSize; + IRecordInfo *pRecInfo; + byte *pRecord; + }; +struct _wireVARIANT + { + DWORD clSize; + DWORD rpcReserved; + USHORT vt; + USHORT wReserved1; + USHORT wReserved2; + USHORT wReserved3; + union + { + LONG lVal; + BYTE bVal; + SHORT iVal; + FLOAT fltVal; + DOUBLE dblVal; + VARIANT_BOOL boolVal; + SCODE scode; + CY cyVal; + DATE date; + wireBSTR bstrVal; + IUnknown *punkVal; + IDispatch *pdispVal; + wireSAFEARRAY parray; + wireBRECORD brecVal; + BYTE *pbVal; + SHORT *piVal; + LONG *plVal; + FLOAT *pfltVal; + DOUBLE *pdblVal; + VARIANT_BOOL *pboolVal; + SCODE *pscode; + CY *pcyVal; + DATE *pdate; + wireBSTR *pbstrVal; + IUnknown * *ppunkVal; + IDispatch * *ppdispVal; + wireSAFEARRAY *pparray; + wireVARIANT *pvarVal; + CHAR cVal; + USHORT uiVal; + ULONG ulVal; + INT intVal; + UINT uintVal; + DECIMAL decVal; + DECIMAL *pdecVal; + CHAR *pcVal; + USHORT *puiVal; + ULONG *pulVal; + INT *pintVal; + UINT *puintVal; + + + } ; + }; +typedef LONG DISPID; + +typedef DISPID MEMBERID; + +typedef DWORD HREFTYPE; + +typedef +enum tagTYPEKIND + { TKIND_ENUM = 0, + TKIND_RECORD = TKIND_ENUM + 1, + TKIND_MODULE = TKIND_RECORD + 1, + TKIND_INTERFACE = TKIND_MODULE + 1, + TKIND_DISPATCH = TKIND_INTERFACE + 1, + TKIND_COCLASS = TKIND_DISPATCH + 1, + TKIND_ALIAS = TKIND_COCLASS + 1, + TKIND_UNION = TKIND_ALIAS + 1, + TKIND_MAX = TKIND_UNION + 1 + } TYPEKIND; + +typedef struct tagTYPEDESC + { + union + { + struct tagTYPEDESC *lptdesc; + struct tagARRAYDESC *lpadesc; + HREFTYPE hreftype; + + } ; + VARTYPE vt; + } TYPEDESC; + +typedef struct tagARRAYDESC + { + TYPEDESC tdescElem; + USHORT cDims; + SAFEARRAYBOUND rgbounds[ 1 ]; + } ARRAYDESC; + +typedef struct tagPARAMDESCEX + { + ULONG cBytes; + VARIANTARG varDefaultValue; + } PARAMDESCEX; + +typedef struct tagPARAMDESCEX *LPPARAMDESCEX; + +typedef struct tagPARAMDESC + { + LPPARAMDESCEX pparamdescex; + USHORT wParamFlags; + } PARAMDESC; + +typedef struct tagPARAMDESC *LPPARAMDESC; + + + + + + + + + + + + + + + + + +typedef struct tagIDLDESC + { + ULONG dwReserved; + USHORT wIDLFlags; + } IDLDESC; + +typedef struct tagIDLDESC *LPIDLDESC; + + + + + + + + + + + + + + + + + + + +#line 629 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" +typedef struct tagELEMDESC { + TYPEDESC tdesc; + union { + IDLDESC idldesc; + PARAMDESC paramdesc; + }; +} ELEMDESC, * LPELEMDESC; +#line 637 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" +typedef struct tagTYPEATTR + { + GUID guid; + LCID lcid; + DWORD dwReserved; + MEMBERID memidConstructor; + MEMBERID memidDestructor; + LPOLESTR lpstrSchema; + ULONG cbSizeInstance; + TYPEKIND typekind; + WORD cFuncs; + WORD cVars; + WORD cImplTypes; + WORD cbSizeVft; + WORD cbAlignment; + WORD wTypeFlags; + WORD wMajorVerNum; + WORD wMinorVerNum; + TYPEDESC tdescAlias; + IDLDESC idldescType; + } TYPEATTR; + +typedef struct tagTYPEATTR *LPTYPEATTR; + +typedef struct tagDISPPARAMS + { + VARIANTARG *rgvarg; + DISPID *rgdispidNamedArgs; + UINT cArgs; + UINT cNamedArgs; + } DISPPARAMS; + + + + + + + + + + + + + + + + +#line 685 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" +typedef struct tagEXCEPINFO { + WORD wCode; + WORD wReserved; + BSTR bstrSource; + BSTR bstrDescription; + BSTR bstrHelpFile; + DWORD dwHelpContext; + PVOID pvReserved; + HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *); + SCODE scode; +} EXCEPINFO, * LPEXCEPINFO; +#line 697 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" +typedef +enum tagCALLCONV + { CC_FASTCALL = 0, + CC_CDECL = 1, + CC_MSCPASCAL = CC_CDECL + 1, + CC_PASCAL = CC_MSCPASCAL, + CC_MACPASCAL = CC_PASCAL + 1, + CC_STDCALL = CC_MACPASCAL + 1, + CC_FPFASTCALL = CC_STDCALL + 1, + CC_SYSCALL = CC_FPFASTCALL + 1, + CC_MPWCDECL = CC_SYSCALL + 1, + CC_MPWPASCAL = CC_MPWCDECL + 1, + CC_MAX = CC_MPWPASCAL + 1 + } CALLCONV; + +typedef +enum tagFUNCKIND + { FUNC_VIRTUAL = 0, + FUNC_PUREVIRTUAL = FUNC_VIRTUAL + 1, + FUNC_NONVIRTUAL = FUNC_PUREVIRTUAL + 1, + FUNC_STATIC = FUNC_NONVIRTUAL + 1, + FUNC_DISPATCH = FUNC_STATIC + 1 + } FUNCKIND; + +typedef +enum tagINVOKEKIND + { INVOKE_FUNC = 1, + INVOKE_PROPERTYGET = 2, + INVOKE_PROPERTYPUT = 4, + INVOKE_PROPERTYPUTREF = 8 + } INVOKEKIND; + +typedef struct tagFUNCDESC + { + MEMBERID memid; + SCODE *lprgscode; + ELEMDESC *lprgelemdescParam; + FUNCKIND funckind; + INVOKEKIND invkind; + CALLCONV callconv; + SHORT cParams; + SHORT cParamsOpt; + SHORT oVft; + SHORT cScodes; + ELEMDESC elemdescFunc; + WORD wFuncFlags; + } FUNCDESC; + +typedef struct tagFUNCDESC *LPFUNCDESC; + +typedef +enum tagVARKIND + { VAR_PERINSTANCE = 0, + VAR_STATIC = VAR_PERINSTANCE + 1, + VAR_CONST = VAR_STATIC + 1, + VAR_DISPATCH = VAR_CONST + 1 + } VARKIND; + + + + + + + + + +typedef struct tagVARDESC + { + MEMBERID memid; + LPOLESTR lpstrSchema; + union + { + ULONG oInst; + VARIANT *lpvarValue; + } ; + ELEMDESC elemdescVar; + WORD wVarFlags; + VARKIND varkind; + } VARDESC; + +typedef struct tagVARDESC *LPVARDESC; + +typedef +enum tagTYPEFLAGS + { TYPEFLAG_FAPPOBJECT = 0x1, + TYPEFLAG_FCANCREATE = 0x2, + TYPEFLAG_FLICENSED = 0x4, + TYPEFLAG_FPREDECLID = 0x8, + TYPEFLAG_FHIDDEN = 0x10, + TYPEFLAG_FCONTROL = 0x20, + TYPEFLAG_FDUAL = 0x40, + TYPEFLAG_FNONEXTENSIBLE = 0x80, + TYPEFLAG_FOLEAUTOMATION = 0x100, + TYPEFLAG_FRESTRICTED = 0x200, + TYPEFLAG_FAGGREGATABLE = 0x400, + TYPEFLAG_FREPLACEABLE = 0x800, + TYPEFLAG_FDISPATCHABLE = 0x1000, + TYPEFLAG_FREVERSEBIND = 0x2000 + } TYPEFLAGS; + +typedef +enum tagFUNCFLAGS + { FUNCFLAG_FRESTRICTED = 0x1, + FUNCFLAG_FSOURCE = 0x2, + FUNCFLAG_FBINDABLE = 0x4, + FUNCFLAG_FREQUESTEDIT = 0x8, + FUNCFLAG_FDISPLAYBIND = 0x10, + FUNCFLAG_FDEFAULTBIND = 0x20, + FUNCFLAG_FHIDDEN = 0x40, + FUNCFLAG_FUSESGETLASTERROR = 0x80, + FUNCFLAG_FDEFAULTCOLLELEM = 0x100, + FUNCFLAG_FUIDEFAULT = 0x200, + FUNCFLAG_FNONBROWSABLE = 0x400, + FUNCFLAG_FREPLACEABLE = 0x800, + FUNCFLAG_FIMMEDIATEBIND = 0x1000 + } FUNCFLAGS; + +typedef +enum tagVARFLAGS + { VARFLAG_FREADONLY = 0x1, + VARFLAG_FSOURCE = 0x2, + VARFLAG_FBINDABLE = 0x4, + VARFLAG_FREQUESTEDIT = 0x8, + VARFLAG_FDISPLAYBIND = 0x10, + VARFLAG_FDEFAULTBIND = 0x20, + VARFLAG_FHIDDEN = 0x40, + VARFLAG_FRESTRICTED = 0x80, + VARFLAG_FDEFAULTCOLLELEM = 0x100, + VARFLAG_FUIDEFAULT = 0x200, + VARFLAG_FNONBROWSABLE = 0x400, + VARFLAG_FREPLACEABLE = 0x800, + VARFLAG_FIMMEDIATEBIND = 0x1000 + } VARFLAGS; + +typedef struct tagCLEANLOCALSTORAGE + { + IUnknown *pInterface; + PVOID pStorage; + DWORD flags; + } CLEANLOCALSTORAGE; + +typedef struct tagCUSTDATAITEM + { + GUID guid; + VARIANTARG varValue; + } CUSTDATAITEM; + +typedef struct tagCUSTDATAITEM *LPCUSTDATAITEM; + +typedef struct tagCUSTDATA + { + DWORD cCustData; + LPCUSTDATAITEM prgCustData; + } CUSTDATA; + +typedef struct tagCUSTDATA *LPCUSTDATA; + + + +extern RPC_IF_HANDLE IOleAutomationTypes_v1_0_c_ifspec; +extern RPC_IF_HANDLE IOleAutomationTypes_v1_0_s_ifspec; +#line 859 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + +typedef ICreateTypeInfo *LPCREATETYPEINFO; + + +extern const IID IID_ICreateTypeInfo; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 969 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ICreateTypeInfoVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ICreateTypeInfo * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ICreateTypeInfo * This); + + ULONG ( __stdcall *Release )( + ICreateTypeInfo * This); + + HRESULT ( __stdcall *SetGuid )( + ICreateTypeInfo * This, + const GUID * const guid); + + HRESULT ( __stdcall *SetTypeFlags )( + ICreateTypeInfo * This, + UINT uTypeFlags); + + HRESULT ( __stdcall *SetDocString )( + ICreateTypeInfo * This, + LPOLESTR pStrDoc); + + HRESULT ( __stdcall *SetHelpContext )( + ICreateTypeInfo * This, + DWORD dwHelpContext); + + HRESULT ( __stdcall *SetVersion )( + ICreateTypeInfo * This, + WORD wMajorVerNum, + WORD wMinorVerNum); + + HRESULT ( __stdcall *AddRefTypeInfo )( + ICreateTypeInfo * This, + ITypeInfo *pTInfo, + HREFTYPE *phRefType); + + HRESULT ( __stdcall *AddFuncDesc )( + ICreateTypeInfo * This, + UINT index, + FUNCDESC *pFuncDesc); + + HRESULT ( __stdcall *AddImplType )( + ICreateTypeInfo * This, + UINT index, + HREFTYPE hRefType); + + HRESULT ( __stdcall *SetImplTypeFlags )( + ICreateTypeInfo * This, + UINT index, + INT implTypeFlags); + + HRESULT ( __stdcall *SetAlignment )( + ICreateTypeInfo * This, + WORD cbAlignment); + + HRESULT ( __stdcall *SetSchema )( + ICreateTypeInfo * This, + LPOLESTR pStrSchema); + + HRESULT ( __stdcall *AddVarDesc )( + ICreateTypeInfo * This, + UINT index, + VARDESC *pVarDesc); + + HRESULT ( __stdcall *SetFuncAndParamNames )( + ICreateTypeInfo * This, + UINT index, + LPOLESTR *rgszNames, + UINT cNames); + + HRESULT ( __stdcall *SetVarName )( + ICreateTypeInfo * This, + UINT index, + LPOLESTR szName); + + HRESULT ( __stdcall *SetTypeDescAlias )( + ICreateTypeInfo * This, + TYPEDESC *pTDescAlias); + + HRESULT ( __stdcall *DefineFuncAsDllEntry )( + ICreateTypeInfo * This, + UINT index, + LPOLESTR szDllName, + LPOLESTR szProcName); + + HRESULT ( __stdcall *SetFuncDocString )( + ICreateTypeInfo * This, + UINT index, + LPOLESTR szDocString); + + HRESULT ( __stdcall *SetVarDocString )( + ICreateTypeInfo * This, + UINT index, + LPOLESTR szDocString); + + HRESULT ( __stdcall *SetFuncHelpContext )( + ICreateTypeInfo * This, + UINT index, + DWORD dwHelpContext); + + HRESULT ( __stdcall *SetVarHelpContext )( + ICreateTypeInfo * This, + UINT index, + DWORD dwHelpContext); + + HRESULT ( __stdcall *SetMops )( + ICreateTypeInfo * This, + UINT index, + BSTR bstrMops); + + HRESULT ( __stdcall *SetTypeIdldesc )( + ICreateTypeInfo * This, + IDLDESC *pIdlDesc); + + HRESULT ( __stdcall *LayOut )( + ICreateTypeInfo * This); + + + } ICreateTypeInfoVtbl; + + struct ICreateTypeInfo + { + struct ICreateTypeInfoVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1188 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall ICreateTypeInfo_SetGuid_Proxy( + ICreateTypeInfo * This, + const GUID * const guid); + + +void __stdcall ICreateTypeInfo_SetGuid_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetTypeFlags_Proxy( + ICreateTypeInfo * This, + UINT uTypeFlags); + + +void __stdcall ICreateTypeInfo_SetTypeFlags_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetDocString_Proxy( + ICreateTypeInfo * This, + LPOLESTR pStrDoc); + + +void __stdcall ICreateTypeInfo_SetDocString_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetHelpContext_Proxy( + ICreateTypeInfo * This, + DWORD dwHelpContext); + + +void __stdcall ICreateTypeInfo_SetHelpContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetVersion_Proxy( + ICreateTypeInfo * This, + WORD wMajorVerNum, + WORD wMinorVerNum); + + +void __stdcall ICreateTypeInfo_SetVersion_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_AddRefTypeInfo_Proxy( + ICreateTypeInfo * This, + ITypeInfo *pTInfo, + HREFTYPE *phRefType); + + +void __stdcall ICreateTypeInfo_AddRefTypeInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_AddFuncDesc_Proxy( + ICreateTypeInfo * This, + UINT index, + FUNCDESC *pFuncDesc); + + +void __stdcall ICreateTypeInfo_AddFuncDesc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_AddImplType_Proxy( + ICreateTypeInfo * This, + UINT index, + HREFTYPE hRefType); + + +void __stdcall ICreateTypeInfo_AddImplType_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetImplTypeFlags_Proxy( + ICreateTypeInfo * This, + UINT index, + INT implTypeFlags); + + +void __stdcall ICreateTypeInfo_SetImplTypeFlags_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetAlignment_Proxy( + ICreateTypeInfo * This, + WORD cbAlignment); + + +void __stdcall ICreateTypeInfo_SetAlignment_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetSchema_Proxy( + ICreateTypeInfo * This, + LPOLESTR pStrSchema); + + +void __stdcall ICreateTypeInfo_SetSchema_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_AddVarDesc_Proxy( + ICreateTypeInfo * This, + UINT index, + VARDESC *pVarDesc); + + +void __stdcall ICreateTypeInfo_AddVarDesc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetFuncAndParamNames_Proxy( + ICreateTypeInfo * This, + UINT index, + LPOLESTR *rgszNames, + UINT cNames); + + +void __stdcall ICreateTypeInfo_SetFuncAndParamNames_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetVarName_Proxy( + ICreateTypeInfo * This, + UINT index, + LPOLESTR szName); + + +void __stdcall ICreateTypeInfo_SetVarName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetTypeDescAlias_Proxy( + ICreateTypeInfo * This, + TYPEDESC *pTDescAlias); + + +void __stdcall ICreateTypeInfo_SetTypeDescAlias_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_DefineFuncAsDllEntry_Proxy( + ICreateTypeInfo * This, + UINT index, + LPOLESTR szDllName, + LPOLESTR szProcName); + + +void __stdcall ICreateTypeInfo_DefineFuncAsDllEntry_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetFuncDocString_Proxy( + ICreateTypeInfo * This, + UINT index, + LPOLESTR szDocString); + + +void __stdcall ICreateTypeInfo_SetFuncDocString_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetVarDocString_Proxy( + ICreateTypeInfo * This, + UINT index, + LPOLESTR szDocString); + + +void __stdcall ICreateTypeInfo_SetVarDocString_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetFuncHelpContext_Proxy( + ICreateTypeInfo * This, + UINT index, + DWORD dwHelpContext); + + +void __stdcall ICreateTypeInfo_SetFuncHelpContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetVarHelpContext_Proxy( + ICreateTypeInfo * This, + UINT index, + DWORD dwHelpContext); + + +void __stdcall ICreateTypeInfo_SetVarHelpContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetMops_Proxy( + ICreateTypeInfo * This, + UINT index, + BSTR bstrMops); + + +void __stdcall ICreateTypeInfo_SetMops_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_SetTypeIdldesc_Proxy( + ICreateTypeInfo * This, + IDLDESC *pIdlDesc); + + +void __stdcall ICreateTypeInfo_SetTypeIdldesc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo_LayOut_Proxy( + ICreateTypeInfo * This); + + +void __stdcall ICreateTypeInfo_LayOut_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1484 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef ICreateTypeInfo2 *LPCREATETYPEINFO2; + + +extern const IID IID_ICreateTypeInfo2; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1568 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ICreateTypeInfo2Vtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ICreateTypeInfo2 * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ICreateTypeInfo2 * This); + + ULONG ( __stdcall *Release )( + ICreateTypeInfo2 * This); + + HRESULT ( __stdcall *SetGuid )( + ICreateTypeInfo2 * This, + const GUID * const guid); + + HRESULT ( __stdcall *SetTypeFlags )( + ICreateTypeInfo2 * This, + UINT uTypeFlags); + + HRESULT ( __stdcall *SetDocString )( + ICreateTypeInfo2 * This, + LPOLESTR pStrDoc); + + HRESULT ( __stdcall *SetHelpContext )( + ICreateTypeInfo2 * This, + DWORD dwHelpContext); + + HRESULT ( __stdcall *SetVersion )( + ICreateTypeInfo2 * This, + WORD wMajorVerNum, + WORD wMinorVerNum); + + HRESULT ( __stdcall *AddRefTypeInfo )( + ICreateTypeInfo2 * This, + ITypeInfo *pTInfo, + HREFTYPE *phRefType); + + HRESULT ( __stdcall *AddFuncDesc )( + ICreateTypeInfo2 * This, + UINT index, + FUNCDESC *pFuncDesc); + + HRESULT ( __stdcall *AddImplType )( + ICreateTypeInfo2 * This, + UINT index, + HREFTYPE hRefType); + + HRESULT ( __stdcall *SetImplTypeFlags )( + ICreateTypeInfo2 * This, + UINT index, + INT implTypeFlags); + + HRESULT ( __stdcall *SetAlignment )( + ICreateTypeInfo2 * This, + WORD cbAlignment); + + HRESULT ( __stdcall *SetSchema )( + ICreateTypeInfo2 * This, + LPOLESTR pStrSchema); + + HRESULT ( __stdcall *AddVarDesc )( + ICreateTypeInfo2 * This, + UINT index, + VARDESC *pVarDesc); + + HRESULT ( __stdcall *SetFuncAndParamNames )( + ICreateTypeInfo2 * This, + UINT index, + LPOLESTR *rgszNames, + UINT cNames); + + HRESULT ( __stdcall *SetVarName )( + ICreateTypeInfo2 * This, + UINT index, + LPOLESTR szName); + + HRESULT ( __stdcall *SetTypeDescAlias )( + ICreateTypeInfo2 * This, + TYPEDESC *pTDescAlias); + + HRESULT ( __stdcall *DefineFuncAsDllEntry )( + ICreateTypeInfo2 * This, + UINT index, + LPOLESTR szDllName, + LPOLESTR szProcName); + + HRESULT ( __stdcall *SetFuncDocString )( + ICreateTypeInfo2 * This, + UINT index, + LPOLESTR szDocString); + + HRESULT ( __stdcall *SetVarDocString )( + ICreateTypeInfo2 * This, + UINT index, + LPOLESTR szDocString); + + HRESULT ( __stdcall *SetFuncHelpContext )( + ICreateTypeInfo2 * This, + UINT index, + DWORD dwHelpContext); + + HRESULT ( __stdcall *SetVarHelpContext )( + ICreateTypeInfo2 * This, + UINT index, + DWORD dwHelpContext); + + HRESULT ( __stdcall *SetMops )( + ICreateTypeInfo2 * This, + UINT index, + BSTR bstrMops); + + HRESULT ( __stdcall *SetTypeIdldesc )( + ICreateTypeInfo2 * This, + IDLDESC *pIdlDesc); + + HRESULT ( __stdcall *LayOut )( + ICreateTypeInfo2 * This); + + HRESULT ( __stdcall *DeleteFuncDesc )( + ICreateTypeInfo2 * This, + UINT index); + + HRESULT ( __stdcall *DeleteFuncDescByMemId )( + ICreateTypeInfo2 * This, + MEMBERID memid, + INVOKEKIND invKind); + + HRESULT ( __stdcall *DeleteVarDesc )( + ICreateTypeInfo2 * This, + UINT index); + + HRESULT ( __stdcall *DeleteVarDescByMemId )( + ICreateTypeInfo2 * This, + MEMBERID memid); + + HRESULT ( __stdcall *DeleteImplType )( + ICreateTypeInfo2 * This, + UINT index); + + HRESULT ( __stdcall *SetCustData )( + ICreateTypeInfo2 * This, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *SetFuncCustData )( + ICreateTypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *SetParamCustData )( + ICreateTypeInfo2 * This, + UINT indexFunc, + UINT indexParam, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *SetVarCustData )( + ICreateTypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *SetImplTypeCustData )( + ICreateTypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *SetHelpStringContext )( + ICreateTypeInfo2 * This, + ULONG dwHelpStringContext); + + HRESULT ( __stdcall *SetFuncHelpStringContext )( + ICreateTypeInfo2 * This, + UINT index, + ULONG dwHelpStringContext); + + HRESULT ( __stdcall *SetVarHelpStringContext )( + ICreateTypeInfo2 * This, + UINT index, + ULONG dwHelpStringContext); + + HRESULT ( __stdcall *Invalidate )( + ICreateTypeInfo2 * This); + + HRESULT ( __stdcall *SetName )( + ICreateTypeInfo2 * This, + LPOLESTR szName); + + + } ICreateTypeInfo2Vtbl; + + struct ICreateTypeInfo2 + { + struct ICreateTypeInfo2Vtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1905 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall ICreateTypeInfo2_DeleteFuncDesc_Proxy( + ICreateTypeInfo2 * This, + UINT index); + + +void __stdcall ICreateTypeInfo2_DeleteFuncDesc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_DeleteFuncDescByMemId_Proxy( + ICreateTypeInfo2 * This, + MEMBERID memid, + INVOKEKIND invKind); + + +void __stdcall ICreateTypeInfo2_DeleteFuncDescByMemId_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_DeleteVarDesc_Proxy( + ICreateTypeInfo2 * This, + UINT index); + + +void __stdcall ICreateTypeInfo2_DeleteVarDesc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_DeleteVarDescByMemId_Proxy( + ICreateTypeInfo2 * This, + MEMBERID memid); + + +void __stdcall ICreateTypeInfo2_DeleteVarDescByMemId_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_DeleteImplType_Proxy( + ICreateTypeInfo2 * This, + UINT index); + + +void __stdcall ICreateTypeInfo2_DeleteImplType_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_SetCustData_Proxy( + ICreateTypeInfo2 * This, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ICreateTypeInfo2_SetCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_SetFuncCustData_Proxy( + ICreateTypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ICreateTypeInfo2_SetFuncCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_SetParamCustData_Proxy( + ICreateTypeInfo2 * This, + UINT indexFunc, + UINT indexParam, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ICreateTypeInfo2_SetParamCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_SetVarCustData_Proxy( + ICreateTypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ICreateTypeInfo2_SetVarCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_SetImplTypeCustData_Proxy( + ICreateTypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ICreateTypeInfo2_SetImplTypeCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_SetHelpStringContext_Proxy( + ICreateTypeInfo2 * This, + ULONG dwHelpStringContext); + + +void __stdcall ICreateTypeInfo2_SetHelpStringContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_SetFuncHelpStringContext_Proxy( + ICreateTypeInfo2 * This, + UINT index, + ULONG dwHelpStringContext); + + +void __stdcall ICreateTypeInfo2_SetFuncHelpStringContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_SetVarHelpStringContext_Proxy( + ICreateTypeInfo2 * This, + UINT index, + ULONG dwHelpStringContext); + + +void __stdcall ICreateTypeInfo2_SetVarHelpStringContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_Invalidate_Proxy( + ICreateTypeInfo2 * This); + + +void __stdcall ICreateTypeInfo2_Invalidate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeInfo2_SetName_Proxy( + ICreateTypeInfo2 * This, + LPOLESTR szName); + + +void __stdcall ICreateTypeInfo2_SetName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2102 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef ICreateTypeLib *LPCREATETYPELIB; + + +extern const IID IID_ICreateTypeLib; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2161 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ICreateTypeLibVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ICreateTypeLib * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ICreateTypeLib * This); + + ULONG ( __stdcall *Release )( + ICreateTypeLib * This); + + HRESULT ( __stdcall *CreateTypeInfo )( + ICreateTypeLib * This, + LPOLESTR szName, + TYPEKIND tkind, + ICreateTypeInfo * *ppCTInfo); + + HRESULT ( __stdcall *SetName )( + ICreateTypeLib * This, + LPOLESTR szName); + + HRESULT ( __stdcall *SetVersion )( + ICreateTypeLib * This, + WORD wMajorVerNum, + WORD wMinorVerNum); + + HRESULT ( __stdcall *SetGuid )( + ICreateTypeLib * This, + const GUID * const guid); + + HRESULT ( __stdcall *SetDocString )( + ICreateTypeLib * This, + LPOLESTR szDoc); + + HRESULT ( __stdcall *SetHelpFileName )( + ICreateTypeLib * This, + LPOLESTR szHelpFileName); + + HRESULT ( __stdcall *SetHelpContext )( + ICreateTypeLib * This, + DWORD dwHelpContext); + + HRESULT ( __stdcall *SetLcid )( + ICreateTypeLib * This, + LCID lcid); + + HRESULT ( __stdcall *SetLibFlags )( + ICreateTypeLib * This, + UINT uLibFlags); + + HRESULT ( __stdcall *SaveAllChanges )( + ICreateTypeLib * This); + + + } ICreateTypeLibVtbl; + + struct ICreateTypeLib + { + struct ICreateTypeLibVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2276 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall ICreateTypeLib_CreateTypeInfo_Proxy( + ICreateTypeLib * This, + LPOLESTR szName, + TYPEKIND tkind, + ICreateTypeInfo * *ppCTInfo); + + +void __stdcall ICreateTypeLib_CreateTypeInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib_SetName_Proxy( + ICreateTypeLib * This, + LPOLESTR szName); + + +void __stdcall ICreateTypeLib_SetName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib_SetVersion_Proxy( + ICreateTypeLib * This, + WORD wMajorVerNum, + WORD wMinorVerNum); + + +void __stdcall ICreateTypeLib_SetVersion_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib_SetGuid_Proxy( + ICreateTypeLib * This, + const GUID * const guid); + + +void __stdcall ICreateTypeLib_SetGuid_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib_SetDocString_Proxy( + ICreateTypeLib * This, + LPOLESTR szDoc); + + +void __stdcall ICreateTypeLib_SetDocString_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib_SetHelpFileName_Proxy( + ICreateTypeLib * This, + LPOLESTR szHelpFileName); + + +void __stdcall ICreateTypeLib_SetHelpFileName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib_SetHelpContext_Proxy( + ICreateTypeLib * This, + DWORD dwHelpContext); + + +void __stdcall ICreateTypeLib_SetHelpContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib_SetLcid_Proxy( + ICreateTypeLib * This, + LCID lcid); + + +void __stdcall ICreateTypeLib_SetLcid_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib_SetLibFlags_Proxy( + ICreateTypeLib * This, + UINT uLibFlags); + + +void __stdcall ICreateTypeLib_SetLibFlags_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib_SaveAllChanges_Proxy( + ICreateTypeLib * This); + + +void __stdcall ICreateTypeLib_SaveAllChanges_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2403 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef ICreateTypeLib2 *LPCREATETYPELIB2; + + +extern const IID IID_ICreateTypeLib2; + + + + + + + + + + + + + + + + + + + + + + +#line 2443 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ICreateTypeLib2Vtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ICreateTypeLib2 * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ICreateTypeLib2 * This); + + ULONG ( __stdcall *Release )( + ICreateTypeLib2 * This); + + HRESULT ( __stdcall *CreateTypeInfo )( + ICreateTypeLib2 * This, + LPOLESTR szName, + TYPEKIND tkind, + ICreateTypeInfo * *ppCTInfo); + + HRESULT ( __stdcall *SetName )( + ICreateTypeLib2 * This, + LPOLESTR szName); + + HRESULT ( __stdcall *SetVersion )( + ICreateTypeLib2 * This, + WORD wMajorVerNum, + WORD wMinorVerNum); + + HRESULT ( __stdcall *SetGuid )( + ICreateTypeLib2 * This, + const GUID * const guid); + + HRESULT ( __stdcall *SetDocString )( + ICreateTypeLib2 * This, + LPOLESTR szDoc); + + HRESULT ( __stdcall *SetHelpFileName )( + ICreateTypeLib2 * This, + LPOLESTR szHelpFileName); + + HRESULT ( __stdcall *SetHelpContext )( + ICreateTypeLib2 * This, + DWORD dwHelpContext); + + HRESULT ( __stdcall *SetLcid )( + ICreateTypeLib2 * This, + LCID lcid); + + HRESULT ( __stdcall *SetLibFlags )( + ICreateTypeLib2 * This, + UINT uLibFlags); + + HRESULT ( __stdcall *SaveAllChanges )( + ICreateTypeLib2 * This); + + HRESULT ( __stdcall *DeleteTypeInfo )( + ICreateTypeLib2 * This, + LPOLESTR szName); + + HRESULT ( __stdcall *SetCustData )( + ICreateTypeLib2 * This, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *SetHelpStringContext )( + ICreateTypeLib2 * This, + ULONG dwHelpStringContext); + + HRESULT ( __stdcall *SetHelpStringDll )( + ICreateTypeLib2 * This, + LPOLESTR szFileName); + + + } ICreateTypeLib2Vtbl; + + struct ICreateTypeLib2 + { + struct ICreateTypeLib2Vtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2588 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall ICreateTypeLib2_DeleteTypeInfo_Proxy( + ICreateTypeLib2 * This, + LPOLESTR szName); + + +void __stdcall ICreateTypeLib2_DeleteTypeInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib2_SetCustData_Proxy( + ICreateTypeLib2 * This, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ICreateTypeLib2_SetCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib2_SetHelpStringContext_Proxy( + ICreateTypeLib2 * This, + ULONG dwHelpStringContext); + + +void __stdcall ICreateTypeLib2_SetHelpStringContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateTypeLib2_SetHelpStringDll_Proxy( + ICreateTypeLib2 * This, + LPOLESTR szFileName); + + +void __stdcall ICreateTypeLib2_SetHelpStringDll_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2642 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef IDispatch *LPDISPATCH; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern const IID IID_IDispatch; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2725 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct IDispatchVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IDispatch * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IDispatch * This); + + ULONG ( __stdcall *Release )( + IDispatch * This); + + HRESULT ( __stdcall *GetTypeInfoCount )( + IDispatch * This, + UINT *pctinfo); + + HRESULT ( __stdcall *GetTypeInfo )( + IDispatch * This, + UINT iTInfo, + LCID lcid, + ITypeInfo * *ppTInfo); + + HRESULT ( __stdcall *GetIDsOfNames )( + IDispatch * This, + const IID * const riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId); + + HRESULT ( __stdcall *Invoke )( + IDispatch * This, + DISPID dispIdMember, + const IID * const riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr); + + + } IDispatchVtbl; + + struct IDispatch + { + struct IDispatchVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2809 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall IDispatch_GetTypeInfoCount_Proxy( + IDispatch * This, + UINT *pctinfo); + + +void __stdcall IDispatch_GetTypeInfoCount_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDispatch_GetTypeInfo_Proxy( + IDispatch * This, + UINT iTInfo, + LCID lcid, + ITypeInfo * *ppTInfo); + + +void __stdcall IDispatch_GetTypeInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDispatch_GetIDsOfNames_Proxy( + IDispatch * This, + const IID * const riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId); + + +void __stdcall IDispatch_GetIDsOfNames_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IDispatch_RemoteInvoke_Proxy( + IDispatch * This, + DISPID dispIdMember, + const IID * const riid, + LCID lcid, + DWORD dwFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *pArgErr, + UINT cVarRef, + UINT *rgVarRefIdx, + VARIANTARG *rgVarRef); + + +void __stdcall IDispatch_RemoteInvoke_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2878 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef IEnumVARIANT *LPENUMVARIANT; + + +extern const IID IID_IEnumVARIANT; + + + + + + + + + + + + + + + + + + + + + + +#line 2918 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct IEnumVARIANTVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEnumVARIANT * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEnumVARIANT * This); + + ULONG ( __stdcall *Release )( + IEnumVARIANT * This); + + HRESULT ( __stdcall *Next )( + IEnumVARIANT * This, + ULONG celt, + VARIANT *rgVar, + ULONG *pCeltFetched); + + HRESULT ( __stdcall *Skip )( + IEnumVARIANT * This, + ULONG celt); + + HRESULT ( __stdcall *Reset )( + IEnumVARIANT * This); + + HRESULT ( __stdcall *Clone )( + IEnumVARIANT * This, + IEnumVARIANT * *ppEnum); + + + } IEnumVARIANTVtbl; + + struct IEnumVARIANT + { + struct IEnumVARIANTVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2990 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + HRESULT __stdcall IEnumVARIANT_RemoteNext_Proxy( + IEnumVARIANT * This, + ULONG celt, + VARIANT *rgVar, + ULONG *pCeltFetched); + + +void __stdcall IEnumVARIANT_RemoteNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumVARIANT_Skip_Proxy( + IEnumVARIANT * This, + ULONG celt); + + +void __stdcall IEnumVARIANT_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumVARIANT_Reset_Proxy( + IEnumVARIANT * This); + + +void __stdcall IEnumVARIANT_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEnumVARIANT_Clone_Proxy( + IEnumVARIANT * This, + IEnumVARIANT * *ppEnum); + + +void __stdcall IEnumVARIANT_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3044 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef ITypeComp *LPTYPECOMP; + +typedef +enum tagDESCKIND + { DESCKIND_NONE = 0, + DESCKIND_FUNCDESC = DESCKIND_NONE + 1, + DESCKIND_VARDESC = DESCKIND_FUNCDESC + 1, + DESCKIND_TYPECOMP = DESCKIND_VARDESC + 1, + DESCKIND_IMPLICITAPPOBJ = DESCKIND_TYPECOMP + 1, + DESCKIND_MAX = DESCKIND_IMPLICITAPPOBJ + 1 + } DESCKIND; + +typedef union tagBINDPTR + { + FUNCDESC *lpfuncdesc; + VARDESC *lpvardesc; + ITypeComp *lptcomp; + } BINDPTR; + +typedef union tagBINDPTR *LPBINDPTR; + + +extern const IID IID_ITypeComp; + + + + + + + + + + + + + + + + + + + + + + + +#line 3104 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ITypeCompVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ITypeComp * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ITypeComp * This); + + ULONG ( __stdcall *Release )( + ITypeComp * This); + + HRESULT ( __stdcall *Bind )( + ITypeComp * This, + LPOLESTR szName, + ULONG lHashVal, + WORD wFlags, + ITypeInfo * *ppTInfo, + DESCKIND *pDescKind, + BINDPTR *pBindPtr); + + HRESULT ( __stdcall *BindType )( + ITypeComp * This, + LPOLESTR szName, + ULONG lHashVal, + ITypeInfo * *ppTInfo, + ITypeComp * *ppTComp); + + + } ITypeCompVtbl; + + struct ITypeComp + { + struct ITypeCompVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3169 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + HRESULT __stdcall ITypeComp_RemoteBind_Proxy( + ITypeComp * This, + LPOLESTR szName, + ULONG lHashVal, + WORD wFlags, + ITypeInfo * *ppTInfo, + DESCKIND *pDescKind, + LPFUNCDESC *ppFuncDesc, + LPVARDESC *ppVarDesc, + ITypeComp * *ppTypeComp, + CLEANLOCALSTORAGE *pDummy); + + +void __stdcall ITypeComp_RemoteBind_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeComp_RemoteBindType_Proxy( + ITypeComp * This, + LPOLESTR szName, + ULONG lHashVal, + ITypeInfo * *ppTInfo); + + +void __stdcall ITypeComp_RemoteBindType_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3208 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef ITypeInfo *LPTYPEINFO; + + +extern const IID IID_ITypeInfo; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3322 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ITypeInfoVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ITypeInfo * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ITypeInfo * This); + + ULONG ( __stdcall *Release )( + ITypeInfo * This); + + HRESULT ( __stdcall *GetTypeAttr )( + ITypeInfo * This, + TYPEATTR * *ppTypeAttr); + + HRESULT ( __stdcall *GetTypeComp )( + ITypeInfo * This, + ITypeComp * *ppTComp); + + HRESULT ( __stdcall *GetFuncDesc )( + ITypeInfo * This, + UINT index, + FUNCDESC * *ppFuncDesc); + + HRESULT ( __stdcall *GetVarDesc )( + ITypeInfo * This, + UINT index, + VARDESC * *ppVarDesc); + + HRESULT ( __stdcall *GetNames )( + ITypeInfo * This, + MEMBERID memid, + BSTR *rgBstrNames, + UINT cMaxNames, + UINT *pcNames); + + HRESULT ( __stdcall *GetRefTypeOfImplType )( + ITypeInfo * This, + UINT index, + HREFTYPE *pRefType); + + HRESULT ( __stdcall *GetImplTypeFlags )( + ITypeInfo * This, + UINT index, + INT *pImplTypeFlags); + + HRESULT ( __stdcall *GetIDsOfNames )( + ITypeInfo * This, + LPOLESTR *rgszNames, + UINT cNames, + MEMBERID *pMemId); + + HRESULT ( __stdcall *Invoke )( + ITypeInfo * This, + PVOID pvInstance, + MEMBERID memid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr); + + HRESULT ( __stdcall *GetDocumentation )( + ITypeInfo * This, + MEMBERID memid, + BSTR *pBstrName, + BSTR *pBstrDocString, + DWORD *pdwHelpContext, + BSTR *pBstrHelpFile); + + HRESULT ( __stdcall *GetDllEntry )( + ITypeInfo * This, + MEMBERID memid, + INVOKEKIND invKind, + BSTR *pBstrDllName, + BSTR *pBstrName, + WORD *pwOrdinal); + + HRESULT ( __stdcall *GetRefTypeInfo )( + ITypeInfo * This, + HREFTYPE hRefType, + ITypeInfo * *ppTInfo); + + HRESULT ( __stdcall *AddressOfMember )( + ITypeInfo * This, + MEMBERID memid, + INVOKEKIND invKind, + PVOID *ppv); + + HRESULT ( __stdcall *CreateInstance )( + ITypeInfo * This, + IUnknown *pUnkOuter, + const IID * const riid, + PVOID *ppvObj); + + HRESULT ( __stdcall *GetMops )( + ITypeInfo * This, + MEMBERID memid, + BSTR *pBstrMops); + + HRESULT ( __stdcall *GetContainingTypeLib )( + ITypeInfo * This, + ITypeLib * *ppTLib, + UINT *pIndex); + + void ( __stdcall *ReleaseTypeAttr )( + ITypeInfo * This, + TYPEATTR *pTypeAttr); + + void ( __stdcall *ReleaseFuncDesc )( + ITypeInfo * This, + FUNCDESC *pFuncDesc); + + void ( __stdcall *ReleaseVarDesc )( + ITypeInfo * This, + VARDESC *pVarDesc); + + + } ITypeInfoVtbl; + + struct ITypeInfo + { + struct ITypeInfoVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3528 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + HRESULT __stdcall ITypeInfo_RemoteGetTypeAttr_Proxy( + ITypeInfo * This, + LPTYPEATTR *ppTypeAttr, + CLEANLOCALSTORAGE *pDummy); + + +void __stdcall ITypeInfo_RemoteGetTypeAttr_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo_GetTypeComp_Proxy( + ITypeInfo * This, + ITypeComp * *ppTComp); + + +void __stdcall ITypeInfo_GetTypeComp_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_RemoteGetFuncDesc_Proxy( + ITypeInfo * This, + UINT index, + LPFUNCDESC *ppFuncDesc, + CLEANLOCALSTORAGE *pDummy); + + +void __stdcall ITypeInfo_RemoteGetFuncDesc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_RemoteGetVarDesc_Proxy( + ITypeInfo * This, + UINT index, + LPVARDESC *ppVarDesc, + CLEANLOCALSTORAGE *pDummy); + + +void __stdcall ITypeInfo_RemoteGetVarDesc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_RemoteGetNames_Proxy( + ITypeInfo * This, + MEMBERID memid, + BSTR *rgBstrNames, + UINT cMaxNames, + UINT *pcNames); + + +void __stdcall ITypeInfo_RemoteGetNames_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo_GetRefTypeOfImplType_Proxy( + ITypeInfo * This, + UINT index, + HREFTYPE *pRefType); + + +void __stdcall ITypeInfo_GetRefTypeOfImplType_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo_GetImplTypeFlags_Proxy( + ITypeInfo * This, + UINT index, + INT *pImplTypeFlags); + + +void __stdcall ITypeInfo_GetImplTypeFlags_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_LocalGetIDsOfNames_Proxy( + ITypeInfo * This); + + +void __stdcall ITypeInfo_LocalGetIDsOfNames_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_LocalInvoke_Proxy( + ITypeInfo * This); + + +void __stdcall ITypeInfo_LocalInvoke_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_RemoteGetDocumentation_Proxy( + ITypeInfo * This, + MEMBERID memid, + DWORD refPtrFlags, + BSTR *pBstrName, + BSTR *pBstrDocString, + DWORD *pdwHelpContext, + BSTR *pBstrHelpFile); + + +void __stdcall ITypeInfo_RemoteGetDocumentation_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_RemoteGetDllEntry_Proxy( + ITypeInfo * This, + MEMBERID memid, + INVOKEKIND invKind, + DWORD refPtrFlags, + BSTR *pBstrDllName, + BSTR *pBstrName, + WORD *pwOrdinal); + + +void __stdcall ITypeInfo_RemoteGetDllEntry_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo_GetRefTypeInfo_Proxy( + ITypeInfo * This, + HREFTYPE hRefType, + ITypeInfo * *ppTInfo); + + +void __stdcall ITypeInfo_GetRefTypeInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_LocalAddressOfMember_Proxy( + ITypeInfo * This); + + +void __stdcall ITypeInfo_LocalAddressOfMember_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_RemoteCreateInstance_Proxy( + ITypeInfo * This, + const IID * const riid, + IUnknown * *ppvObj); + + +void __stdcall ITypeInfo_RemoteCreateInstance_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo_GetMops_Proxy( + ITypeInfo * This, + MEMBERID memid, + BSTR *pBstrMops); + + +void __stdcall ITypeInfo_GetMops_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_RemoteGetContainingTypeLib_Proxy( + ITypeInfo * This, + ITypeLib * *ppTLib, + UINT *pIndex); + + +void __stdcall ITypeInfo_RemoteGetContainingTypeLib_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_LocalReleaseTypeAttr_Proxy( + ITypeInfo * This); + + +void __stdcall ITypeInfo_LocalReleaseTypeAttr_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_LocalReleaseFuncDesc_Proxy( + ITypeInfo * This); + + +void __stdcall ITypeInfo_LocalReleaseFuncDesc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo_LocalReleaseVarDesc_Proxy( + ITypeInfo * This); + + +void __stdcall ITypeInfo_LocalReleaseVarDesc_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3779 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef ITypeInfo2 *LPTYPEINFO2; + + +extern const IID IID_ITypeInfo2; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3873 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ITypeInfo2Vtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ITypeInfo2 * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ITypeInfo2 * This); + + ULONG ( __stdcall *Release )( + ITypeInfo2 * This); + + HRESULT ( __stdcall *GetTypeAttr )( + ITypeInfo2 * This, + TYPEATTR * *ppTypeAttr); + + HRESULT ( __stdcall *GetTypeComp )( + ITypeInfo2 * This, + ITypeComp * *ppTComp); + + HRESULT ( __stdcall *GetFuncDesc )( + ITypeInfo2 * This, + UINT index, + FUNCDESC * *ppFuncDesc); + + HRESULT ( __stdcall *GetVarDesc )( + ITypeInfo2 * This, + UINT index, + VARDESC * *ppVarDesc); + + HRESULT ( __stdcall *GetNames )( + ITypeInfo2 * This, + MEMBERID memid, + BSTR *rgBstrNames, + UINT cMaxNames, + UINT *pcNames); + + HRESULT ( __stdcall *GetRefTypeOfImplType )( + ITypeInfo2 * This, + UINT index, + HREFTYPE *pRefType); + + HRESULT ( __stdcall *GetImplTypeFlags )( + ITypeInfo2 * This, + UINT index, + INT *pImplTypeFlags); + + HRESULT ( __stdcall *GetIDsOfNames )( + ITypeInfo2 * This, + LPOLESTR *rgszNames, + UINT cNames, + MEMBERID *pMemId); + + HRESULT ( __stdcall *Invoke )( + ITypeInfo2 * This, + PVOID pvInstance, + MEMBERID memid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr); + + HRESULT ( __stdcall *GetDocumentation )( + ITypeInfo2 * This, + MEMBERID memid, + BSTR *pBstrName, + BSTR *pBstrDocString, + DWORD *pdwHelpContext, + BSTR *pBstrHelpFile); + + HRESULT ( __stdcall *GetDllEntry )( + ITypeInfo2 * This, + MEMBERID memid, + INVOKEKIND invKind, + BSTR *pBstrDllName, + BSTR *pBstrName, + WORD *pwOrdinal); + + HRESULT ( __stdcall *GetRefTypeInfo )( + ITypeInfo2 * This, + HREFTYPE hRefType, + ITypeInfo * *ppTInfo); + + HRESULT ( __stdcall *AddressOfMember )( + ITypeInfo2 * This, + MEMBERID memid, + INVOKEKIND invKind, + PVOID *ppv); + + HRESULT ( __stdcall *CreateInstance )( + ITypeInfo2 * This, + IUnknown *pUnkOuter, + const IID * const riid, + PVOID *ppvObj); + + HRESULT ( __stdcall *GetMops )( + ITypeInfo2 * This, + MEMBERID memid, + BSTR *pBstrMops); + + HRESULT ( __stdcall *GetContainingTypeLib )( + ITypeInfo2 * This, + ITypeLib * *ppTLib, + UINT *pIndex); + + void ( __stdcall *ReleaseTypeAttr )( + ITypeInfo2 * This, + TYPEATTR *pTypeAttr); + + void ( __stdcall *ReleaseFuncDesc )( + ITypeInfo2 * This, + FUNCDESC *pFuncDesc); + + void ( __stdcall *ReleaseVarDesc )( + ITypeInfo2 * This, + VARDESC *pVarDesc); + + HRESULT ( __stdcall *GetTypeKind )( + ITypeInfo2 * This, + TYPEKIND *pTypeKind); + + HRESULT ( __stdcall *GetTypeFlags )( + ITypeInfo2 * This, + ULONG *pTypeFlags); + + HRESULT ( __stdcall *GetFuncIndexOfMemId )( + ITypeInfo2 * This, + MEMBERID memid, + INVOKEKIND invKind, + UINT *pFuncIndex); + + HRESULT ( __stdcall *GetVarIndexOfMemId )( + ITypeInfo2 * This, + MEMBERID memid, + UINT *pVarIndex); + + HRESULT ( __stdcall *GetCustData )( + ITypeInfo2 * This, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *GetFuncCustData )( + ITypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *GetParamCustData )( + ITypeInfo2 * This, + UINT indexFunc, + UINT indexParam, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *GetVarCustData )( + ITypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *GetImplTypeCustData )( + ITypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *GetDocumentation2 )( + ITypeInfo2 * This, + MEMBERID memid, + LCID lcid, + BSTR *pbstrHelpString, + DWORD *pdwHelpStringContext, + BSTR *pbstrHelpStringDll); + + HRESULT ( __stdcall *GetAllCustData )( + ITypeInfo2 * This, + CUSTDATA *pCustData); + + HRESULT ( __stdcall *GetAllFuncCustData )( + ITypeInfo2 * This, + UINT index, + CUSTDATA *pCustData); + + HRESULT ( __stdcall *GetAllParamCustData )( + ITypeInfo2 * This, + UINT indexFunc, + UINT indexParam, + CUSTDATA *pCustData); + + HRESULT ( __stdcall *GetAllVarCustData )( + ITypeInfo2 * This, + UINT index, + CUSTDATA *pCustData); + + HRESULT ( __stdcall *GetAllImplTypeCustData )( + ITypeInfo2 * This, + UINT index, + CUSTDATA *pCustData); + + + } ITypeInfo2Vtbl; + + struct ITypeInfo2 + { + struct ITypeInfo2Vtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4207 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall ITypeInfo2_GetTypeKind_Proxy( + ITypeInfo2 * This, + TYPEKIND *pTypeKind); + + +void __stdcall ITypeInfo2_GetTypeKind_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetTypeFlags_Proxy( + ITypeInfo2 * This, + ULONG *pTypeFlags); + + +void __stdcall ITypeInfo2_GetTypeFlags_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetFuncIndexOfMemId_Proxy( + ITypeInfo2 * This, + MEMBERID memid, + INVOKEKIND invKind, + UINT *pFuncIndex); + + +void __stdcall ITypeInfo2_GetFuncIndexOfMemId_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetVarIndexOfMemId_Proxy( + ITypeInfo2 * This, + MEMBERID memid, + UINT *pVarIndex); + + +void __stdcall ITypeInfo2_GetVarIndexOfMemId_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetCustData_Proxy( + ITypeInfo2 * This, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ITypeInfo2_GetCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetFuncCustData_Proxy( + ITypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ITypeInfo2_GetFuncCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetParamCustData_Proxy( + ITypeInfo2 * This, + UINT indexFunc, + UINT indexParam, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ITypeInfo2_GetParamCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetVarCustData_Proxy( + ITypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ITypeInfo2_GetVarCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetImplTypeCustData_Proxy( + ITypeInfo2 * This, + UINT index, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ITypeInfo2_GetImplTypeCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeInfo2_RemoteGetDocumentation2_Proxy( + ITypeInfo2 * This, + MEMBERID memid, + LCID lcid, + DWORD refPtrFlags, + BSTR *pbstrHelpString, + DWORD *pdwHelpStringContext, + BSTR *pbstrHelpStringDll); + + +void __stdcall ITypeInfo2_RemoteGetDocumentation2_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetAllCustData_Proxy( + ITypeInfo2 * This, + CUSTDATA *pCustData); + + +void __stdcall ITypeInfo2_GetAllCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetAllFuncCustData_Proxy( + ITypeInfo2 * This, + UINT index, + CUSTDATA *pCustData); + + +void __stdcall ITypeInfo2_GetAllFuncCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetAllParamCustData_Proxy( + ITypeInfo2 * This, + UINT indexFunc, + UINT indexParam, + CUSTDATA *pCustData); + + +void __stdcall ITypeInfo2_GetAllParamCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetAllVarCustData_Proxy( + ITypeInfo2 * This, + UINT index, + CUSTDATA *pCustData); + + +void __stdcall ITypeInfo2_GetAllVarCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeInfo2_GetAllImplTypeCustData_Proxy( + ITypeInfo2 * This, + UINT index, + CUSTDATA *pCustData); + + +void __stdcall ITypeInfo2_GetAllImplTypeCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4415 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef +enum tagSYSKIND + { SYS_WIN16 = 0, + SYS_WIN32 = SYS_WIN16 + 1, + SYS_MAC = SYS_WIN32 + 1 + } SYSKIND; + +typedef +enum tagLIBFLAGS + { LIBFLAG_FRESTRICTED = 0x1, + LIBFLAG_FCONTROL = 0x2, + LIBFLAG_FHIDDEN = 0x4, + LIBFLAG_FHASDISKIMAGE = 0x8 + } LIBFLAGS; + +typedef ITypeLib *LPTYPELIB; + +typedef struct tagTLIBATTR + { + GUID guid; + LCID lcid; + SYSKIND syskind; + WORD wMajorVerNum; + WORD wMinorVerNum; + WORD wLibFlags; + } TLIBATTR; + +typedef struct tagTLIBATTR *LPTLIBATTR; + + +extern const IID IID_ITypeLib; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4511 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ITypeLibVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ITypeLib * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ITypeLib * This); + + ULONG ( __stdcall *Release )( + ITypeLib * This); + + UINT ( __stdcall *GetTypeInfoCount )( + ITypeLib * This); + + HRESULT ( __stdcall *GetTypeInfo )( + ITypeLib * This, + UINT index, + ITypeInfo * *ppTInfo); + + HRESULT ( __stdcall *GetTypeInfoType )( + ITypeLib * This, + UINT index, + TYPEKIND *pTKind); + + HRESULT ( __stdcall *GetTypeInfoOfGuid )( + ITypeLib * This, + const GUID * const guid, + ITypeInfo * *ppTinfo); + + HRESULT ( __stdcall *GetLibAttr )( + ITypeLib * This, + TLIBATTR * *ppTLibAttr); + + HRESULT ( __stdcall *GetTypeComp )( + ITypeLib * This, + ITypeComp * *ppTComp); + + HRESULT ( __stdcall *GetDocumentation )( + ITypeLib * This, + INT index, + BSTR *pBstrName, + BSTR *pBstrDocString, + DWORD *pdwHelpContext, + BSTR *pBstrHelpFile); + + HRESULT ( __stdcall *IsName )( + ITypeLib * This, + LPOLESTR szNameBuf, + ULONG lHashVal, + BOOL *pfName); + + HRESULT ( __stdcall *FindName )( + ITypeLib * This, + LPOLESTR szNameBuf, + ULONG lHashVal, + ITypeInfo * *ppTInfo, + MEMBERID *rgMemId, + USHORT *pcFound); + + void ( __stdcall *ReleaseTLibAttr )( + ITypeLib * This, + TLIBATTR *pTLibAttr); + + + } ITypeLibVtbl; + + struct ITypeLib + { + struct ITypeLibVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4636 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + HRESULT __stdcall ITypeLib_RemoteGetTypeInfoCount_Proxy( + ITypeLib * This, + UINT *pcTInfo); + + +void __stdcall ITypeLib_RemoteGetTypeInfoCount_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeLib_GetTypeInfo_Proxy( + ITypeLib * This, + UINT index, + ITypeInfo * *ppTInfo); + + +void __stdcall ITypeLib_GetTypeInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeLib_GetTypeInfoType_Proxy( + ITypeLib * This, + UINT index, + TYPEKIND *pTKind); + + +void __stdcall ITypeLib_GetTypeInfoType_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeLib_GetTypeInfoOfGuid_Proxy( + ITypeLib * This, + const GUID * const guid, + ITypeInfo * *ppTinfo); + + +void __stdcall ITypeLib_GetTypeInfoOfGuid_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeLib_RemoteGetLibAttr_Proxy( + ITypeLib * This, + LPTLIBATTR *ppTLibAttr, + CLEANLOCALSTORAGE *pDummy); + + +void __stdcall ITypeLib_RemoteGetLibAttr_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeLib_GetTypeComp_Proxy( + ITypeLib * This, + ITypeComp * *ppTComp); + + +void __stdcall ITypeLib_GetTypeComp_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeLib_RemoteGetDocumentation_Proxy( + ITypeLib * This, + INT index, + DWORD refPtrFlags, + BSTR *pBstrName, + BSTR *pBstrDocString, + DWORD *pdwHelpContext, + BSTR *pBstrHelpFile); + + +void __stdcall ITypeLib_RemoteGetDocumentation_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeLib_RemoteIsName_Proxy( + ITypeLib * This, + LPOLESTR szNameBuf, + ULONG lHashVal, + BOOL *pfName, + BSTR *pBstrLibName); + + +void __stdcall ITypeLib_RemoteIsName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeLib_RemoteFindName_Proxy( + ITypeLib * This, + LPOLESTR szNameBuf, + ULONG lHashVal, + ITypeInfo * *ppTInfo, + MEMBERID *rgMemId, + USHORT *pcFound, + BSTR *pBstrLibName); + + +void __stdcall ITypeLib_RemoteFindName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeLib_LocalReleaseTLibAttr_Proxy( + ITypeLib * This); + + +void __stdcall ITypeLib_LocalReleaseTLibAttr_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4777 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef ITypeLib2 *LPTYPELIB2; + + +extern const IID IID_ITypeLib2; + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4822 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ITypeLib2Vtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ITypeLib2 * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ITypeLib2 * This); + + ULONG ( __stdcall *Release )( + ITypeLib2 * This); + + UINT ( __stdcall *GetTypeInfoCount )( + ITypeLib2 * This); + + HRESULT ( __stdcall *GetTypeInfo )( + ITypeLib2 * This, + UINT index, + ITypeInfo * *ppTInfo); + + HRESULT ( __stdcall *GetTypeInfoType )( + ITypeLib2 * This, + UINT index, + TYPEKIND *pTKind); + + HRESULT ( __stdcall *GetTypeInfoOfGuid )( + ITypeLib2 * This, + const GUID * const guid, + ITypeInfo * *ppTinfo); + + HRESULT ( __stdcall *GetLibAttr )( + ITypeLib2 * This, + TLIBATTR * *ppTLibAttr); + + HRESULT ( __stdcall *GetTypeComp )( + ITypeLib2 * This, + ITypeComp * *ppTComp); + + HRESULT ( __stdcall *GetDocumentation )( + ITypeLib2 * This, + INT index, + BSTR *pBstrName, + BSTR *pBstrDocString, + DWORD *pdwHelpContext, + BSTR *pBstrHelpFile); + + HRESULT ( __stdcall *IsName )( + ITypeLib2 * This, + LPOLESTR szNameBuf, + ULONG lHashVal, + BOOL *pfName); + + HRESULT ( __stdcall *FindName )( + ITypeLib2 * This, + LPOLESTR szNameBuf, + ULONG lHashVal, + ITypeInfo * *ppTInfo, + MEMBERID *rgMemId, + USHORT *pcFound); + + void ( __stdcall *ReleaseTLibAttr )( + ITypeLib2 * This, + TLIBATTR *pTLibAttr); + + HRESULT ( __stdcall *GetCustData )( + ITypeLib2 * This, + const GUID * const guid, + VARIANT *pVarVal); + + HRESULT ( __stdcall *GetLibStatistics )( + ITypeLib2 * This, + ULONG *pcUniqueNames, + ULONG *pcchUniqueNames); + + HRESULT ( __stdcall *GetDocumentation2 )( + ITypeLib2 * This, + INT index, + LCID lcid, + BSTR *pbstrHelpString, + DWORD *pdwHelpStringContext, + BSTR *pbstrHelpStringDll); + + HRESULT ( __stdcall *GetAllCustData )( + ITypeLib2 * This, + CUSTDATA *pCustData); + + + } ITypeLib2Vtbl; + + struct ITypeLib2 + { + struct ITypeLib2Vtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4982 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall ITypeLib2_GetCustData_Proxy( + ITypeLib2 * This, + const GUID * const guid, + VARIANT *pVarVal); + + +void __stdcall ITypeLib2_GetCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeLib2_RemoteGetLibStatistics_Proxy( + ITypeLib2 * This, + ULONG *pcUniqueNames, + ULONG *pcchUniqueNames); + + +void __stdcall ITypeLib2_RemoteGetLibStatistics_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall ITypeLib2_RemoteGetDocumentation2_Proxy( + ITypeLib2 * This, + INT index, + LCID lcid, + DWORD refPtrFlags, + BSTR *pbstrHelpString, + DWORD *pdwHelpStringContext, + BSTR *pbstrHelpStringDll); + + +void __stdcall ITypeLib2_RemoteGetDocumentation2_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeLib2_GetAllCustData_Proxy( + ITypeLib2 * This, + CUSTDATA *pCustData); + + +void __stdcall ITypeLib2_GetAllCustData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5042 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef ITypeChangeEvents *LPTYPECHANGEEVENTS; + +typedef +enum tagCHANGEKIND + { CHANGEKIND_ADDMEMBER = 0, + CHANGEKIND_DELETEMEMBER = CHANGEKIND_ADDMEMBER + 1, + CHANGEKIND_SETNAMES = CHANGEKIND_DELETEMEMBER + 1, + CHANGEKIND_SETDOCUMENTATION = CHANGEKIND_SETNAMES + 1, + CHANGEKIND_GENERAL = CHANGEKIND_SETDOCUMENTATION + 1, + CHANGEKIND_INVALIDATE = CHANGEKIND_GENERAL + 1, + CHANGEKIND_CHANGEFAILED = CHANGEKIND_INVALIDATE + 1, + CHANGEKIND_MAX = CHANGEKIND_CHANGEFAILED + 1 + } CHANGEKIND; + + +extern const IID IID_ITypeChangeEvents; + + + + + + + + + + + + + + + + + + + + +#line 5092 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ITypeChangeEventsVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ITypeChangeEvents * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ITypeChangeEvents * This); + + ULONG ( __stdcall *Release )( + ITypeChangeEvents * This); + + HRESULT ( __stdcall *RequestTypeChange )( + ITypeChangeEvents * This, + CHANGEKIND changeKind, + ITypeInfo *pTInfoBefore, + LPOLESTR pStrName, + INT *pfCancel); + + HRESULT ( __stdcall *AfterTypeChange )( + ITypeChangeEvents * This, + CHANGEKIND changeKind, + ITypeInfo *pTInfoAfter, + LPOLESTR pStrName); + + + } ITypeChangeEventsVtbl; + + struct ITypeChangeEvents + { + struct ITypeChangeEventsVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5154 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall ITypeChangeEvents_RequestTypeChange_Proxy( + ITypeChangeEvents * This, + CHANGEKIND changeKind, + ITypeInfo *pTInfoBefore, + LPOLESTR pStrName, + INT *pfCancel); + + +void __stdcall ITypeChangeEvents_RequestTypeChange_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeChangeEvents_AfterTypeChange_Proxy( + ITypeChangeEvents * This, + CHANGEKIND changeKind, + ITypeInfo *pTInfoAfter, + LPOLESTR pStrName); + + +void __stdcall ITypeChangeEvents_AfterTypeChange_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5188 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef IErrorInfo *LPERRORINFO; + + +extern const IID IID_IErrorInfo; + + + + + + + + + + + + + + + + + + + + + + + + +#line 5230 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct IErrorInfoVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IErrorInfo * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IErrorInfo * This); + + ULONG ( __stdcall *Release )( + IErrorInfo * This); + + HRESULT ( __stdcall *GetGUID )( + IErrorInfo * This, + GUID *pGUID); + + HRESULT ( __stdcall *GetSource )( + IErrorInfo * This, + BSTR *pBstrSource); + + HRESULT ( __stdcall *GetDescription )( + IErrorInfo * This, + BSTR *pBstrDescription); + + HRESULT ( __stdcall *GetHelpFile )( + IErrorInfo * This, + BSTR *pBstrHelpFile); + + HRESULT ( __stdcall *GetHelpContext )( + IErrorInfo * This, + DWORD *pdwHelpContext); + + + } IErrorInfoVtbl; + + struct IErrorInfo + { + struct IErrorInfoVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5308 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall IErrorInfo_GetGUID_Proxy( + IErrorInfo * This, + GUID *pGUID); + + +void __stdcall IErrorInfo_GetGUID_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IErrorInfo_GetSource_Proxy( + IErrorInfo * This, + BSTR *pBstrSource); + + +void __stdcall IErrorInfo_GetSource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IErrorInfo_GetDescription_Proxy( + IErrorInfo * This, + BSTR *pBstrDescription); + + +void __stdcall IErrorInfo_GetDescription_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IErrorInfo_GetHelpFile_Proxy( + IErrorInfo * This, + BSTR *pBstrHelpFile); + + +void __stdcall IErrorInfo_GetHelpFile_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IErrorInfo_GetHelpContext_Proxy( + IErrorInfo * This, + DWORD *pdwHelpContext); + + +void __stdcall IErrorInfo_GetHelpContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5373 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef ICreateErrorInfo *LPCREATEERRORINFO; + + +extern const IID IID_ICreateErrorInfo; + + + + + + + + + + + + + + + + + + + + + + + + +#line 5415 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ICreateErrorInfoVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ICreateErrorInfo * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ICreateErrorInfo * This); + + ULONG ( __stdcall *Release )( + ICreateErrorInfo * This); + + HRESULT ( __stdcall *SetGUID )( + ICreateErrorInfo * This, + const GUID * const rguid); + + HRESULT ( __stdcall *SetSource )( + ICreateErrorInfo * This, + LPOLESTR szSource); + + HRESULT ( __stdcall *SetDescription )( + ICreateErrorInfo * This, + LPOLESTR szDescription); + + HRESULT ( __stdcall *SetHelpFile )( + ICreateErrorInfo * This, + LPOLESTR szHelpFile); + + HRESULT ( __stdcall *SetHelpContext )( + ICreateErrorInfo * This, + DWORD dwHelpContext); + + + } ICreateErrorInfoVtbl; + + struct ICreateErrorInfo + { + struct ICreateErrorInfoVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5493 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall ICreateErrorInfo_SetGUID_Proxy( + ICreateErrorInfo * This, + const GUID * const rguid); + + +void __stdcall ICreateErrorInfo_SetGUID_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateErrorInfo_SetSource_Proxy( + ICreateErrorInfo * This, + LPOLESTR szSource); + + +void __stdcall ICreateErrorInfo_SetSource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateErrorInfo_SetDescription_Proxy( + ICreateErrorInfo * This, + LPOLESTR szDescription); + + +void __stdcall ICreateErrorInfo_SetDescription_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateErrorInfo_SetHelpFile_Proxy( + ICreateErrorInfo * This, + LPOLESTR szHelpFile); + + +void __stdcall ICreateErrorInfo_SetHelpFile_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ICreateErrorInfo_SetHelpContext_Proxy( + ICreateErrorInfo * This, + DWORD dwHelpContext); + + +void __stdcall ICreateErrorInfo_SetHelpContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5558 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef ISupportErrorInfo *LPSUPPORTERRORINFO; + + +extern const IID IID_ISupportErrorInfo; + + + + + + + + + + + + +#line 5588 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ISupportErrorInfoVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ISupportErrorInfo * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ISupportErrorInfo * This); + + ULONG ( __stdcall *Release )( + ISupportErrorInfo * This); + + HRESULT ( __stdcall *InterfaceSupportsErrorInfo )( + ISupportErrorInfo * This, + const IID * const riid); + + + } ISupportErrorInfoVtbl; + + struct ISupportErrorInfo + { + struct ISupportErrorInfoVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 5638 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall ISupportErrorInfo_InterfaceSupportsErrorInfo_Proxy( + ISupportErrorInfo * This, + const IID * const riid); + + +void __stdcall ISupportErrorInfo_InterfaceSupportsErrorInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5655 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + + +extern const IID IID_ITypeFactory; + + + + + + + + + + + + + + +#line 5685 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ITypeFactoryVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ITypeFactory * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ITypeFactory * This); + + ULONG ( __stdcall *Release )( + ITypeFactory * This); + + HRESULT ( __stdcall *CreateFromTypeInfo )( + ITypeFactory * This, + ITypeInfo *pTypeInfo, + const IID * const riid, + IUnknown * *ppv); + + + } ITypeFactoryVtbl; + + struct ITypeFactory + { + struct ITypeFactoryVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 5737 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall ITypeFactory_CreateFromTypeInfo_Proxy( + ITypeFactory * This, + ITypeInfo *pTypeInfo, + const IID * const riid, + IUnknown * *ppv); + + +void __stdcall ITypeFactory_CreateFromTypeInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5756 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + + +extern const IID IID_ITypeMarshal; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5805 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct ITypeMarshalVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ITypeMarshal * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ITypeMarshal * This); + + ULONG ( __stdcall *Release )( + ITypeMarshal * This); + + HRESULT ( __stdcall *Size )( + ITypeMarshal * This, + PVOID pvType, + DWORD dwDestContext, + PVOID pvDestContext, + ULONG *pSize); + + HRESULT ( __stdcall *Marshal )( + ITypeMarshal * This, + PVOID pvType, + DWORD dwDestContext, + PVOID pvDestContext, + ULONG cbBufferLength, + BYTE *pBuffer, + ULONG *pcbWritten); + + HRESULT ( __stdcall *Unmarshal )( + ITypeMarshal * This, + PVOID pvType, + DWORD dwFlags, + ULONG cbBufferLength, + BYTE *pBuffer, + ULONG *pcbRead); + + HRESULT ( __stdcall *Free )( + ITypeMarshal * This, + PVOID pvType); + + + } ITypeMarshalVtbl; + + struct ITypeMarshal + { + struct ITypeMarshalVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5888 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall ITypeMarshal_Size_Proxy( + ITypeMarshal * This, + PVOID pvType, + DWORD dwDestContext, + PVOID pvDestContext, + ULONG *pSize); + + +void __stdcall ITypeMarshal_Size_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeMarshal_Marshal_Proxy( + ITypeMarshal * This, + PVOID pvType, + DWORD dwDestContext, + PVOID pvDestContext, + ULONG cbBufferLength, + BYTE *pBuffer, + ULONG *pcbWritten); + + +void __stdcall ITypeMarshal_Marshal_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeMarshal_Unmarshal_Proxy( + ITypeMarshal * This, + PVOID pvType, + DWORD dwFlags, + ULONG cbBufferLength, + BYTE *pBuffer, + ULONG *pcbRead); + + +void __stdcall ITypeMarshal_Unmarshal_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ITypeMarshal_Free_Proxy( + ITypeMarshal * This, + PVOID pvType); + + +void __stdcall ITypeMarshal_Free_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5953 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + +typedef IRecordInfo *LPRECORDINFO; + + +extern const IID IID_IRecordInfo; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6041 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + typedef struct IRecordInfoVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IRecordInfo * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IRecordInfo * This); + + ULONG ( __stdcall *Release )( + IRecordInfo * This); + + HRESULT ( __stdcall *RecordInit )( + IRecordInfo * This, + PVOID pvNew); + + HRESULT ( __stdcall *RecordClear )( + IRecordInfo * This, + PVOID pvExisting); + + HRESULT ( __stdcall *RecordCopy )( + IRecordInfo * This, + PVOID pvExisting, + PVOID pvNew); + + HRESULT ( __stdcall *GetGuid )( + IRecordInfo * This, + GUID *pguid); + + HRESULT ( __stdcall *GetName )( + IRecordInfo * This, + BSTR *pbstrName); + + HRESULT ( __stdcall *GetSize )( + IRecordInfo * This, + ULONG *pcbSize); + + HRESULT ( __stdcall *GetTypeInfo )( + IRecordInfo * This, + ITypeInfo * *ppTypeInfo); + + HRESULT ( __stdcall *GetField )( + IRecordInfo * This, + PVOID pvData, + LPCOLESTR szFieldName, + VARIANT *pvarField); + + HRESULT ( __stdcall *GetFieldNoCopy )( + IRecordInfo * This, + PVOID pvData, + LPCOLESTR szFieldName, + VARIANT *pvarField, + PVOID *ppvDataCArray); + + HRESULT ( __stdcall *PutField )( + IRecordInfo * This, + ULONG wFlags, + PVOID pvData, + LPCOLESTR szFieldName, + VARIANT *pvarField); + + HRESULT ( __stdcall *PutFieldNoCopy )( + IRecordInfo * This, + ULONG wFlags, + PVOID pvData, + LPCOLESTR szFieldName, + VARIANT *pvarField); + + HRESULT ( __stdcall *GetFieldNames )( + IRecordInfo * This, + ULONG *pcNames, + BSTR *rgBstrNames); + + BOOL ( __stdcall *IsMatchingType )( + IRecordInfo * This, + IRecordInfo *pRecordInfo); + + PVOID ( __stdcall *RecordCreate )( + IRecordInfo * This); + + HRESULT ( __stdcall *RecordCreateCopy )( + IRecordInfo * This, + PVOID pvSource, + PVOID *ppvDest); + + HRESULT ( __stdcall *RecordDestroy )( + IRecordInfo * This, + PVOID pvRecord); + + + } IRecordInfoVtbl; + + struct IRecordInfo + { + struct IRecordInfoVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6209 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + +HRESULT __stdcall IRecordInfo_RecordInit_Proxy( + IRecordInfo * This, + PVOID pvNew); + + +void __stdcall IRecordInfo_RecordInit_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_RecordClear_Proxy( + IRecordInfo * This, + PVOID pvExisting); + + +void __stdcall IRecordInfo_RecordClear_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_RecordCopy_Proxy( + IRecordInfo * This, + PVOID pvExisting, + PVOID pvNew); + + +void __stdcall IRecordInfo_RecordCopy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_GetGuid_Proxy( + IRecordInfo * This, + GUID *pguid); + + +void __stdcall IRecordInfo_GetGuid_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_GetName_Proxy( + IRecordInfo * This, + BSTR *pbstrName); + + +void __stdcall IRecordInfo_GetName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_GetSize_Proxy( + IRecordInfo * This, + ULONG *pcbSize); + + +void __stdcall IRecordInfo_GetSize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_GetTypeInfo_Proxy( + IRecordInfo * This, + ITypeInfo * *ppTypeInfo); + + +void __stdcall IRecordInfo_GetTypeInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_GetField_Proxy( + IRecordInfo * This, + PVOID pvData, + LPCOLESTR szFieldName, + VARIANT *pvarField); + + +void __stdcall IRecordInfo_GetField_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_GetFieldNoCopy_Proxy( + IRecordInfo * This, + PVOID pvData, + LPCOLESTR szFieldName, + VARIANT *pvarField, + PVOID *ppvDataCArray); + + +void __stdcall IRecordInfo_GetFieldNoCopy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_PutField_Proxy( + IRecordInfo * This, + ULONG wFlags, + PVOID pvData, + LPCOLESTR szFieldName, + VARIANT *pvarField); + + +void __stdcall IRecordInfo_PutField_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_PutFieldNoCopy_Proxy( + IRecordInfo * This, + ULONG wFlags, + PVOID pvData, + LPCOLESTR szFieldName, + VARIANT *pvarField); + + +void __stdcall IRecordInfo_PutFieldNoCopy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_GetFieldNames_Proxy( + IRecordInfo * This, + ULONG *pcNames, + BSTR *rgBstrNames); + + +void __stdcall IRecordInfo_GetFieldNames_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +BOOL __stdcall IRecordInfo_IsMatchingType_Proxy( + IRecordInfo * This, + IRecordInfo *pRecordInfo); + + +void __stdcall IRecordInfo_IsMatchingType_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +PVOID __stdcall IRecordInfo_RecordCreate_Proxy( + IRecordInfo * This); + + +void __stdcall IRecordInfo_RecordCreate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_RecordCreateCopy_Proxy( + IRecordInfo * This, + PVOID pvSource, + PVOID *ppvDest); + + +void __stdcall IRecordInfo_RecordCreateCopy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IRecordInfo_RecordDestroy_Proxy( + IRecordInfo * This, + PVOID pvRecord); + + +void __stdcall IRecordInfo_RecordDestroy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 6419 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + +#pragma warning(default:4201) +#line 6432 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + +extern RPC_IF_HANDLE __MIDL_itf_oaidl_0092_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_oaidl_0092_v0_0_s_ifspec; + + + +unsigned long __stdcall BSTR_UserSize( unsigned long *, unsigned long , BSTR * ); +unsigned char * __stdcall BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * ); +unsigned char * __stdcall BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); +void __stdcall BSTR_UserFree( unsigned long *, BSTR * ); + +unsigned long __stdcall CLEANLOCALSTORAGE_UserSize( unsigned long *, unsigned long , CLEANLOCALSTORAGE * ); +unsigned char * __stdcall CLEANLOCALSTORAGE_UserMarshal( unsigned long *, unsigned char *, CLEANLOCALSTORAGE * ); +unsigned char * __stdcall CLEANLOCALSTORAGE_UserUnmarshal(unsigned long *, unsigned char *, CLEANLOCALSTORAGE * ); +void __stdcall CLEANLOCALSTORAGE_UserFree( unsigned long *, CLEANLOCALSTORAGE * ); + +unsigned long __stdcall VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * ); +unsigned char * __stdcall VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * ); +unsigned char * __stdcall VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * ); +void __stdcall VARIANT_UserFree( unsigned long *, VARIANT * ); + + HRESULT __stdcall IDispatch_Invoke_Proxy( + IDispatch * This, + DISPID dispIdMember, + const IID * const riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr); + + + HRESULT __stdcall IDispatch_Invoke_Stub( + IDispatch * This, + DISPID dispIdMember, + const IID * const riid, + LCID lcid, + DWORD dwFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *pArgErr, + UINT cVarRef, + UINT *rgVarRefIdx, + VARIANTARG *rgVarRef); + + HRESULT __stdcall IEnumVARIANT_Next_Proxy( + IEnumVARIANT * This, + ULONG celt, + VARIANT *rgVar, + ULONG *pCeltFetched); + + + HRESULT __stdcall IEnumVARIANT_Next_Stub( + IEnumVARIANT * This, + ULONG celt, + VARIANT *rgVar, + ULONG *pCeltFetched); + + HRESULT __stdcall ITypeComp_Bind_Proxy( + ITypeComp * This, + LPOLESTR szName, + ULONG lHashVal, + WORD wFlags, + ITypeInfo * *ppTInfo, + DESCKIND *pDescKind, + BINDPTR *pBindPtr); + + + HRESULT __stdcall ITypeComp_Bind_Stub( + ITypeComp * This, + LPOLESTR szName, + ULONG lHashVal, + WORD wFlags, + ITypeInfo * *ppTInfo, + DESCKIND *pDescKind, + LPFUNCDESC *ppFuncDesc, + LPVARDESC *ppVarDesc, + ITypeComp * *ppTypeComp, + CLEANLOCALSTORAGE *pDummy); + + HRESULT __stdcall ITypeComp_BindType_Proxy( + ITypeComp * This, + LPOLESTR szName, + ULONG lHashVal, + ITypeInfo * *ppTInfo, + ITypeComp * *ppTComp); + + + HRESULT __stdcall ITypeComp_BindType_Stub( + ITypeComp * This, + LPOLESTR szName, + ULONG lHashVal, + ITypeInfo * *ppTInfo); + + HRESULT __stdcall ITypeInfo_GetTypeAttr_Proxy( + ITypeInfo * This, + TYPEATTR * *ppTypeAttr); + + + HRESULT __stdcall ITypeInfo_GetTypeAttr_Stub( + ITypeInfo * This, + LPTYPEATTR *ppTypeAttr, + CLEANLOCALSTORAGE *pDummy); + + HRESULT __stdcall ITypeInfo_GetFuncDesc_Proxy( + ITypeInfo * This, + UINT index, + FUNCDESC * *ppFuncDesc); + + + HRESULT __stdcall ITypeInfo_GetFuncDesc_Stub( + ITypeInfo * This, + UINT index, + LPFUNCDESC *ppFuncDesc, + CLEANLOCALSTORAGE *pDummy); + + HRESULT __stdcall ITypeInfo_GetVarDesc_Proxy( + ITypeInfo * This, + UINT index, + VARDESC * *ppVarDesc); + + + HRESULT __stdcall ITypeInfo_GetVarDesc_Stub( + ITypeInfo * This, + UINT index, + LPVARDESC *ppVarDesc, + CLEANLOCALSTORAGE *pDummy); + + HRESULT __stdcall ITypeInfo_GetNames_Proxy( + ITypeInfo * This, + MEMBERID memid, + BSTR *rgBstrNames, + UINT cMaxNames, + UINT *pcNames); + + + HRESULT __stdcall ITypeInfo_GetNames_Stub( + ITypeInfo * This, + MEMBERID memid, + BSTR *rgBstrNames, + UINT cMaxNames, + UINT *pcNames); + + HRESULT __stdcall ITypeInfo_GetIDsOfNames_Proxy( + ITypeInfo * This, + LPOLESTR *rgszNames, + UINT cNames, + MEMBERID *pMemId); + + + HRESULT __stdcall ITypeInfo_GetIDsOfNames_Stub( + ITypeInfo * This); + + HRESULT __stdcall ITypeInfo_Invoke_Proxy( + ITypeInfo * This, + PVOID pvInstance, + MEMBERID memid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr); + + + HRESULT __stdcall ITypeInfo_Invoke_Stub( + ITypeInfo * This); + + HRESULT __stdcall ITypeInfo_GetDocumentation_Proxy( + ITypeInfo * This, + MEMBERID memid, + BSTR *pBstrName, + BSTR *pBstrDocString, + DWORD *pdwHelpContext, + BSTR *pBstrHelpFile); + + + HRESULT __stdcall ITypeInfo_GetDocumentation_Stub( + ITypeInfo * This, + MEMBERID memid, + DWORD refPtrFlags, + BSTR *pBstrName, + BSTR *pBstrDocString, + DWORD *pdwHelpContext, + BSTR *pBstrHelpFile); + + HRESULT __stdcall ITypeInfo_GetDllEntry_Proxy( + ITypeInfo * This, + MEMBERID memid, + INVOKEKIND invKind, + BSTR *pBstrDllName, + BSTR *pBstrName, + WORD *pwOrdinal); + + + HRESULT __stdcall ITypeInfo_GetDllEntry_Stub( + ITypeInfo * This, + MEMBERID memid, + INVOKEKIND invKind, + DWORD refPtrFlags, + BSTR *pBstrDllName, + BSTR *pBstrName, + WORD *pwOrdinal); + + HRESULT __stdcall ITypeInfo_AddressOfMember_Proxy( + ITypeInfo * This, + MEMBERID memid, + INVOKEKIND invKind, + PVOID *ppv); + + + HRESULT __stdcall ITypeInfo_AddressOfMember_Stub( + ITypeInfo * This); + + HRESULT __stdcall ITypeInfo_CreateInstance_Proxy( + ITypeInfo * This, + IUnknown *pUnkOuter, + const IID * const riid, + PVOID *ppvObj); + + + HRESULT __stdcall ITypeInfo_CreateInstance_Stub( + ITypeInfo * This, + const IID * const riid, + IUnknown * *ppvObj); + + HRESULT __stdcall ITypeInfo_GetContainingTypeLib_Proxy( + ITypeInfo * This, + ITypeLib * *ppTLib, + UINT *pIndex); + + + HRESULT __stdcall ITypeInfo_GetContainingTypeLib_Stub( + ITypeInfo * This, + ITypeLib * *ppTLib, + UINT *pIndex); + + void __stdcall ITypeInfo_ReleaseTypeAttr_Proxy( + ITypeInfo * This, + TYPEATTR *pTypeAttr); + + + HRESULT __stdcall ITypeInfo_ReleaseTypeAttr_Stub( + ITypeInfo * This); + + void __stdcall ITypeInfo_ReleaseFuncDesc_Proxy( + ITypeInfo * This, + FUNCDESC *pFuncDesc); + + + HRESULT __stdcall ITypeInfo_ReleaseFuncDesc_Stub( + ITypeInfo * This); + + void __stdcall ITypeInfo_ReleaseVarDesc_Proxy( + ITypeInfo * This, + VARDESC *pVarDesc); + + + HRESULT __stdcall ITypeInfo_ReleaseVarDesc_Stub( + ITypeInfo * This); + + HRESULT __stdcall ITypeInfo2_GetDocumentation2_Proxy( + ITypeInfo2 * This, + MEMBERID memid, + LCID lcid, + BSTR *pbstrHelpString, + DWORD *pdwHelpStringContext, + BSTR *pbstrHelpStringDll); + + + HRESULT __stdcall ITypeInfo2_GetDocumentation2_Stub( + ITypeInfo2 * This, + MEMBERID memid, + LCID lcid, + DWORD refPtrFlags, + BSTR *pbstrHelpString, + DWORD *pdwHelpStringContext, + BSTR *pbstrHelpStringDll); + + UINT __stdcall ITypeLib_GetTypeInfoCount_Proxy( + ITypeLib * This); + + + HRESULT __stdcall ITypeLib_GetTypeInfoCount_Stub( + ITypeLib * This, + UINT *pcTInfo); + + HRESULT __stdcall ITypeLib_GetLibAttr_Proxy( + ITypeLib * This, + TLIBATTR * *ppTLibAttr); + + + HRESULT __stdcall ITypeLib_GetLibAttr_Stub( + ITypeLib * This, + LPTLIBATTR *ppTLibAttr, + CLEANLOCALSTORAGE *pDummy); + + HRESULT __stdcall ITypeLib_GetDocumentation_Proxy( + ITypeLib * This, + INT index, + BSTR *pBstrName, + BSTR *pBstrDocString, + DWORD *pdwHelpContext, + BSTR *pBstrHelpFile); + + + HRESULT __stdcall ITypeLib_GetDocumentation_Stub( + ITypeLib * This, + INT index, + DWORD refPtrFlags, + BSTR *pBstrName, + BSTR *pBstrDocString, + DWORD *pdwHelpContext, + BSTR *pBstrHelpFile); + + HRESULT __stdcall ITypeLib_IsName_Proxy( + ITypeLib * This, + LPOLESTR szNameBuf, + ULONG lHashVal, + BOOL *pfName); + + + HRESULT __stdcall ITypeLib_IsName_Stub( + ITypeLib * This, + LPOLESTR szNameBuf, + ULONG lHashVal, + BOOL *pfName, + BSTR *pBstrLibName); + + HRESULT __stdcall ITypeLib_FindName_Proxy( + ITypeLib * This, + LPOLESTR szNameBuf, + ULONG lHashVal, + ITypeInfo * *ppTInfo, + MEMBERID *rgMemId, + USHORT *pcFound); + + + HRESULT __stdcall ITypeLib_FindName_Stub( + ITypeLib * This, + LPOLESTR szNameBuf, + ULONG lHashVal, + ITypeInfo * *ppTInfo, + MEMBERID *rgMemId, + USHORT *pcFound, + BSTR *pBstrLibName); + + void __stdcall ITypeLib_ReleaseTLibAttr_Proxy( + ITypeLib * This, + TLIBATTR *pTLibAttr); + + + HRESULT __stdcall ITypeLib_ReleaseTLibAttr_Stub( + ITypeLib * This); + + HRESULT __stdcall ITypeLib2_GetLibStatistics_Proxy( + ITypeLib2 * This, + ULONG *pcUniqueNames, + ULONG *pcchUniqueNames); + + + HRESULT __stdcall ITypeLib2_GetLibStatistics_Stub( + ITypeLib2 * This, + ULONG *pcUniqueNames, + ULONG *pcchUniqueNames); + + HRESULT __stdcall ITypeLib2_GetDocumentation2_Proxy( + ITypeLib2 * This, + INT index, + LCID lcid, + BSTR *pbstrHelpString, + DWORD *pdwHelpStringContext, + BSTR *pbstrHelpStringDll); + + + HRESULT __stdcall ITypeLib2_GetDocumentation2_Stub( + ITypeLib2 * This, + INT index, + LCID lcid, + DWORD refPtrFlags, + BSTR *pbstrHelpString, + DWORD *pdwHelpStringContext, + BSTR *pbstrHelpStringDll); + + + + + + + + + +#line 6827 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" +#line 70 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + +void * __stdcall MIDL_user_allocate(size_t); +void __stdcall MIDL_user_free( void * ); + + + + + + + + + + + + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_msxml_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_msxml_0000_v0_0_s_ifspec; + + + + + + + + + + + + + +typedef +enum xmlelemTYPE + { XMLELEMTYPE_ELEMENT = 0, + XMLELEMTYPE_TEXT = XMLELEMTYPE_ELEMENT + 1, + XMLELEMTYPE_COMMENT = XMLELEMTYPE_TEXT + 1, + XMLELEMTYPE_DOCUMENT = XMLELEMTYPE_COMMENT + 1, + XMLELEMTYPE_DTD = XMLELEMTYPE_DOCUMENT + 1, + XMLELEMTYPE_PI = XMLELEMTYPE_DTD + 1, + XMLELEMTYPE_OTHER = XMLELEMTYPE_PI + 1 + } XMLELEM_TYPE; + +typedef struct _xml_error + { + unsigned int _nLine; + BSTR _pchBuf; + unsigned int _cchBuf; + unsigned int _ich; + BSTR _pszFound; + BSTR _pszExpected; + DWORD _reserved1; + DWORD _reserved2; + } XML_ERROR; + + +extern const IID LIBID_MSXML; + + + + + + + + + + + + + +extern const IID IID_IXMLElementCollection; + + + + + + + + + + + + + + + + + + + + + + + +#line 171 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + typedef struct IXMLElementCollectionVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IXMLElementCollection * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IXMLElementCollection * This); + + ULONG ( __stdcall *Release )( + IXMLElementCollection * This); + + HRESULT ( __stdcall *GetTypeInfoCount )( + IXMLElementCollection * This, + UINT *pctinfo); + + HRESULT ( __stdcall *GetTypeInfo )( + IXMLElementCollection * This, + UINT iTInfo, + LCID lcid, + ITypeInfo * *ppTInfo); + + HRESULT ( __stdcall *GetIDsOfNames )( + IXMLElementCollection * This, + const IID * const riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId); + + HRESULT ( __stdcall *Invoke )( + IXMLElementCollection * This, + DISPID dispIdMember, + const IID * const riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr); + + HRESULT ( __stdcall *put_length )( + IXMLElementCollection * This, + long v); + + HRESULT ( __stdcall *get_length )( + IXMLElementCollection * This, + long *p); + + HRESULT ( __stdcall *get__newEnum )( + IXMLElementCollection * This, + IUnknown * *ppUnk); + + HRESULT ( __stdcall *item )( + IXMLElementCollection * This, + VARIANT var1, + VARIANT var2, + IDispatch * *ppDisp); + + + } IXMLElementCollectionVtbl; + + struct IXMLElementCollection + { + struct IXMLElementCollectionVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 286 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + HRESULT __stdcall IXMLElementCollection_put_length_Proxy( + IXMLElementCollection * This, + long v); + + +void __stdcall IXMLElementCollection_put_length_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElementCollection_get_length_Proxy( + IXMLElementCollection * This, + long *p); + + +void __stdcall IXMLElementCollection_get_length_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElementCollection_get__newEnum_Proxy( + IXMLElementCollection * This, + IUnknown * *ppUnk); + + +void __stdcall IXMLElementCollection_get__newEnum_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElementCollection_item_Proxy( + IXMLElementCollection * This, + VARIANT var1, + VARIANT var2, + IDispatch * *ppDisp); + + +void __stdcall IXMLElementCollection_item_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 341 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + + + + + + + + + + + +extern const IID IID_IXMLDocument; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 410 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + typedef struct IXMLDocumentVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IXMLDocument * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IXMLDocument * This); + + ULONG ( __stdcall *Release )( + IXMLDocument * This); + + HRESULT ( __stdcall *GetTypeInfoCount )( + IXMLDocument * This, + UINT *pctinfo); + + HRESULT ( __stdcall *GetTypeInfo )( + IXMLDocument * This, + UINT iTInfo, + LCID lcid, + ITypeInfo * *ppTInfo); + + HRESULT ( __stdcall *GetIDsOfNames )( + IXMLDocument * This, + const IID * const riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId); + + HRESULT ( __stdcall *Invoke )( + IXMLDocument * This, + DISPID dispIdMember, + const IID * const riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr); + + HRESULT ( __stdcall *get_root )( + IXMLDocument * This, + IXMLElement * *p); + + HRESULT ( __stdcall *get_fileSize )( + IXMLDocument * This, + BSTR *p); + + HRESULT ( __stdcall *get_fileModifiedDate )( + IXMLDocument * This, + BSTR *p); + + HRESULT ( __stdcall *get_fileUpdatedDate )( + IXMLDocument * This, + BSTR *p); + + HRESULT ( __stdcall *get_URL )( + IXMLDocument * This, + BSTR *p); + + HRESULT ( __stdcall *put_URL )( + IXMLDocument * This, + BSTR p); + + HRESULT ( __stdcall *get_mimeType )( + IXMLDocument * This, + BSTR *p); + + HRESULT ( __stdcall *get_readyState )( + IXMLDocument * This, + long *pl); + + HRESULT ( __stdcall *get_charset )( + IXMLDocument * This, + BSTR *p); + + HRESULT ( __stdcall *put_charset )( + IXMLDocument * This, + BSTR p); + + HRESULT ( __stdcall *get_version )( + IXMLDocument * This, + BSTR *p); + + HRESULT ( __stdcall *get_doctype )( + IXMLDocument * This, + BSTR *p); + + HRESULT ( __stdcall *get_dtdURL )( + IXMLDocument * This, + BSTR *p); + + HRESULT ( __stdcall *createElement )( + IXMLDocument * This, + VARIANT vType, + VARIANT var1, + IXMLElement * *ppElem); + + + } IXMLDocumentVtbl; + + struct IXMLDocument + { + struct IXMLDocumentVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 595 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + HRESULT __stdcall IXMLDocument_get_root_Proxy( + IXMLDocument * This, + IXMLElement * *p); + + +void __stdcall IXMLDocument_get_root_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_get_fileSize_Proxy( + IXMLDocument * This, + BSTR *p); + + +void __stdcall IXMLDocument_get_fileSize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_get_fileModifiedDate_Proxy( + IXMLDocument * This, + BSTR *p); + + +void __stdcall IXMLDocument_get_fileModifiedDate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_get_fileUpdatedDate_Proxy( + IXMLDocument * This, + BSTR *p); + + +void __stdcall IXMLDocument_get_fileUpdatedDate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_get_URL_Proxy( + IXMLDocument * This, + BSTR *p); + + +void __stdcall IXMLDocument_get_URL_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_put_URL_Proxy( + IXMLDocument * This, + BSTR p); + + +void __stdcall IXMLDocument_put_URL_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_get_mimeType_Proxy( + IXMLDocument * This, + BSTR *p); + + +void __stdcall IXMLDocument_get_mimeType_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_get_readyState_Proxy( + IXMLDocument * This, + long *pl); + + +void __stdcall IXMLDocument_get_readyState_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_get_charset_Proxy( + IXMLDocument * This, + BSTR *p); + + +void __stdcall IXMLDocument_get_charset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_put_charset_Proxy( + IXMLDocument * This, + BSTR p); + + +void __stdcall IXMLDocument_put_charset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_get_version_Proxy( + IXMLDocument * This, + BSTR *p); + + +void __stdcall IXMLDocument_get_version_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_get_doctype_Proxy( + IXMLDocument * This, + BSTR *p); + + +void __stdcall IXMLDocument_get_doctype_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_get_dtdURL_Proxy( + IXMLDocument * This, + BSTR *p); + + +void __stdcall IXMLDocument_get_dtdURL_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLDocument_createElement_Proxy( + IXMLDocument * This, + VARIANT vType, + VARIANT var1, + IXMLElement * *ppElem); + + +void __stdcall IXMLDocument_createElement_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 770 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + + + + + + + + + + + +extern const IID IID_IXMLElement; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 835 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + typedef struct IXMLElementVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IXMLElement * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IXMLElement * This); + + ULONG ( __stdcall *Release )( + IXMLElement * This); + + HRESULT ( __stdcall *GetTypeInfoCount )( + IXMLElement * This, + UINT *pctinfo); + + HRESULT ( __stdcall *GetTypeInfo )( + IXMLElement * This, + UINT iTInfo, + LCID lcid, + ITypeInfo * *ppTInfo); + + HRESULT ( __stdcall *GetIDsOfNames )( + IXMLElement * This, + const IID * const riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId); + + HRESULT ( __stdcall *Invoke )( + IXMLElement * This, + DISPID dispIdMember, + const IID * const riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr); + + HRESULT ( __stdcall *get_tagName )( + IXMLElement * This, + BSTR *p); + + HRESULT ( __stdcall *put_tagName )( + IXMLElement * This, + BSTR p); + + HRESULT ( __stdcall *get_parent )( + IXMLElement * This, + IXMLElement * *ppParent); + + HRESULT ( __stdcall *setAttribute )( + IXMLElement * This, + BSTR strPropertyName, + VARIANT PropertyValue); + + HRESULT ( __stdcall *getAttribute )( + IXMLElement * This, + BSTR strPropertyName, + VARIANT *PropertyValue); + + HRESULT ( __stdcall *removeAttribute )( + IXMLElement * This, + BSTR strPropertyName); + + HRESULT ( __stdcall *get_children )( + IXMLElement * This, + IXMLElementCollection * *pp); + + HRESULT ( __stdcall *get_type )( + IXMLElement * This, + long *plType); + + HRESULT ( __stdcall *get_text )( + IXMLElement * This, + BSTR *p); + + HRESULT ( __stdcall *put_text )( + IXMLElement * This, + BSTR p); + + HRESULT ( __stdcall *addChild )( + IXMLElement * This, + IXMLElement *pChildElem, + long lIndex, + long lReserved); + + HRESULT ( __stdcall *removeChild )( + IXMLElement * This, + IXMLElement *pChildElem); + + + } IXMLElementVtbl; + + struct IXMLElement + { + struct IXMLElementVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1008 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + HRESULT __stdcall IXMLElement_get_tagName_Proxy( + IXMLElement * This, + BSTR *p); + + +void __stdcall IXMLElement_get_tagName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElement_put_tagName_Proxy( + IXMLElement * This, + BSTR p); + + +void __stdcall IXMLElement_put_tagName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElement_get_parent_Proxy( + IXMLElement * This, + IXMLElement * *ppParent); + + +void __stdcall IXMLElement_get_parent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElement_setAttribute_Proxy( + IXMLElement * This, + BSTR strPropertyName, + VARIANT PropertyValue); + + +void __stdcall IXMLElement_setAttribute_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElement_getAttribute_Proxy( + IXMLElement * This, + BSTR strPropertyName, + VARIANT *PropertyValue); + + +void __stdcall IXMLElement_getAttribute_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElement_removeAttribute_Proxy( + IXMLElement * This, + BSTR strPropertyName); + + +void __stdcall IXMLElement_removeAttribute_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElement_get_children_Proxy( + IXMLElement * This, + IXMLElementCollection * *pp); + + +void __stdcall IXMLElement_get_children_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElement_get_type_Proxy( + IXMLElement * This, + long *plType); + + +void __stdcall IXMLElement_get_type_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElement_get_text_Proxy( + IXMLElement * This, + BSTR *p); + + +void __stdcall IXMLElement_get_text_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElement_put_text_Proxy( + IXMLElement * This, + BSTR p); + + +void __stdcall IXMLElement_put_text_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElement_addChild_Proxy( + IXMLElement * This, + IXMLElement *pChildElem, + long lIndex, + long lReserved); + + +void __stdcall IXMLElement_addChild_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IXMLElement_removeChild_Proxy( + IXMLElement * This, + IXMLElement *pChildElem); + + +void __stdcall IXMLElement_removeChild_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1161 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + + + + + + + + + + + +extern const IID IID_IXMLError; + + + + + + + + + + + + +#line 1189 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + typedef struct IXMLErrorVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IXMLError * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IXMLError * This); + + ULONG ( __stdcall *Release )( + IXMLError * This); + + HRESULT ( __stdcall *GetErrorInfo )( + IXMLError * This, + XML_ERROR *pErrorReturn); + + + } IXMLErrorVtbl; + + struct IXMLError + { + struct IXMLErrorVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 1239 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + +HRESULT __stdcall IXMLError_GetErrorInfo_Proxy( + IXMLError * This, + XML_ERROR *pErrorReturn); + + +void __stdcall IXMLError_GetErrorInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1256 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + + + + + + + + + + + +extern const IID IID_IXMLElementNotificationSink; + + + + + + + + + + + + +#line 1284 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + typedef struct IXMLElementNotificationSinkVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IXMLElementNotificationSink * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IXMLElementNotificationSink * This); + + ULONG ( __stdcall *Release )( + IXMLElementNotificationSink * This); + + HRESULT ( __stdcall *GetTypeInfoCount )( + IXMLElementNotificationSink * This, + UINT *pctinfo); + + HRESULT ( __stdcall *GetTypeInfo )( + IXMLElementNotificationSink * This, + UINT iTInfo, + LCID lcid, + ITypeInfo * *ppTInfo); + + HRESULT ( __stdcall *GetIDsOfNames )( + IXMLElementNotificationSink * This, + const IID * const riid, + LPOLESTR *rgszNames, + UINT cNames, + LCID lcid, + DISPID *rgDispId); + + HRESULT ( __stdcall *Invoke )( + IXMLElementNotificationSink * This, + DISPID dispIdMember, + const IID * const riid, + LCID lcid, + WORD wFlags, + DISPPARAMS *pDispParams, + VARIANT *pVarResult, + EXCEPINFO *pExcepInfo, + UINT *puArgErr); + + HRESULT ( __stdcall *ChildAdded )( + IXMLElementNotificationSink * This, + IDispatch *pChildElem); + + + } IXMLElementNotificationSinkVtbl; + + struct IXMLElementNotificationSink + { + struct IXMLElementNotificationSinkVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1376 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + HRESULT __stdcall IXMLElementNotificationSink_ChildAdded_Proxy( + IXMLElementNotificationSink * This, + IDispatch *pChildElem); + + +void __stdcall IXMLElementNotificationSink_ChildAdded_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1393 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + +extern const CLSID CLSID_XMLDocument; + + + + + + +#line 1403 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" + + + + + + + + + +#line 1413 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\msxml.h" +#line 201 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + +void * __stdcall MIDL_user_allocate(size_t); +void __stdcall MIDL_user_free( void * ); + + + + + + + + + + + + + + + + + + + + +#pragma comment(lib,"uuid.lib") + + + + + + + + + + + + + + + + + + +extern const IID IID_IAsyncMoniker; +extern const IID CLSID_StdURLMoniker; +extern const IID CLSID_HttpProtocol; +extern const IID CLSID_FtpProtocol; +extern const IID CLSID_GopherProtocol; +extern const IID CLSID_HttpSProtocol; +extern const IID CLSID_FileProtocol; +extern const IID CLSID_MkProtocol; +extern const IID CLSID_StdURLProtocol; +extern const IID CLSID_UrlMkBindCtx; +extern const IID CLSID_StdEncodingFilterFac; +extern const IID CLSID_DeCompMimeFilter; +extern const IID CLSID_CdlProtocol; +extern const IID CLSID_ClassInstallFilter; +extern const IID IID_IAsyncBindCtx; + + + + + +extern HRESULT __stdcall CreateURLMoniker(LPMONIKER pMkCtx, LPCWSTR szURL, LPMONIKER * ppmk); +extern HRESULT __stdcall GetClassURL(LPCWSTR szURL, CLSID *pClsID); +extern HRESULT __stdcall CreateAsyncBindCtx(DWORD reserved, IBindStatusCallback *pBSCb, + IEnumFORMATETC *pEFetc, IBindCtx **ppBC); +extern HRESULT __stdcall CreateAsyncBindCtxEx(IBindCtx *pbc, DWORD dwOptions, IBindStatusCallback *pBSCb, IEnumFORMATETC *pEnum, + IBindCtx **ppBC, DWORD reserved); +extern HRESULT __stdcall MkParseDisplayNameEx(IBindCtx *pbc, LPCWSTR szDisplayName, ULONG *pchEaten, + LPMONIKER *ppmk); +extern HRESULT __stdcall RegisterBindStatusCallback(LPBC pBC, IBindStatusCallback *pBSCb, + IBindStatusCallback** ppBSCBPrev, DWORD dwReserved); +extern HRESULT __stdcall RevokeBindStatusCallback(LPBC pBC, IBindStatusCallback *pBSCb); +extern HRESULT __stdcall GetClassFileOrMime(LPBC pBC, LPCWSTR szFilename, LPVOID pBuffer, DWORD cbSize, LPCWSTR szMime, DWORD dwReserved, CLSID *pclsid); +extern HRESULT __stdcall IsValidURL(LPBC pBC, LPCWSTR szURL, DWORD dwReserved); +extern HRESULT __stdcall CoGetClassObjectFromURL( const CLSID * const rCLASSID, + LPCWSTR szCODE, DWORD dwFileVersionMS, + DWORD dwFileVersionLS, LPCWSTR szTYPE, + LPBINDCTX pBindCtx, DWORD dwClsContext, + LPVOID pvReserved, const IID * const riid, LPVOID * ppv); + + +extern HRESULT __stdcall IsAsyncMoniker(IMoniker* pmk); +extern HRESULT __stdcall CreateURLBinding(LPCWSTR lpszUrl, IBindCtx *pbc, IBinding **ppBdg); + +extern HRESULT __stdcall RegisterMediaTypes(UINT ctypes, const LPCSTR* rgszTypes, CLIPFORMAT* rgcfTypes); +extern HRESULT __stdcall FindMediaType(LPCSTR rgszTypes, CLIPFORMAT* rgcfTypes); +extern HRESULT __stdcall CreateFormatEnumerator( UINT cfmtetc, FORMATETC* rgfmtetc, IEnumFORMATETC** ppenumfmtetc); +extern HRESULT __stdcall RegisterFormatEnumerator(LPBC pBC, IEnumFORMATETC *pEFetc, DWORD reserved); +extern HRESULT __stdcall RevokeFormatEnumerator(LPBC pBC, IEnumFORMATETC *pEFetc); +extern HRESULT __stdcall RegisterMediaTypeClass(LPBC pBC,UINT ctypes, const LPCSTR* rgszTypes, CLSID *rgclsID, DWORD reserved); +extern HRESULT __stdcall FindMediaTypeClass(LPBC pBC, LPCSTR szType, CLSID *pclsID, DWORD reserved); +extern HRESULT __stdcall UrlMkSetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength, DWORD dwReserved); +extern HRESULT __stdcall UrlMkGetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength, DWORD *pdwBufferLength, DWORD dwReserved); +extern HRESULT __stdcall FindMimeFromData( + LPBC pBC, + LPCWSTR pwzUrl, + LPVOID pBuffer, + DWORD cbSize, + LPCWSTR pwzMimeProposed, + DWORD dwMimeFlags, + LPWSTR *ppwzMimeOut, + DWORD dwReserved); +extern HRESULT __stdcall ObtainUserAgentString(DWORD dwOption, LPSTR pszUAOut, DWORD* cbSize); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 350 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0000_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IPersistMoniker *LPPERSISTMONIKER; + + +extern const IID IID_IPersistMoniker; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 442 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IPersistMonikerVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IPersistMoniker * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IPersistMoniker * This); + + ULONG ( __stdcall *Release )( + IPersistMoniker * This); + + HRESULT ( __stdcall *GetClassID )( + IPersistMoniker * This, + CLSID *pClassID); + + HRESULT ( __stdcall *IsDirty )( + IPersistMoniker * This); + + HRESULT ( __stdcall *Load )( + IPersistMoniker * This, + BOOL fFullyAvailable, + IMoniker *pimkName, + LPBC pibc, + DWORD grfMode); + + HRESULT ( __stdcall *Save )( + IPersistMoniker * This, + IMoniker *pimkName, + LPBC pbc, + BOOL fRemember); + + HRESULT ( __stdcall *SaveCompleted )( + IPersistMoniker * This, + IMoniker *pimkName, + LPBC pibc); + + HRESULT ( __stdcall *GetCurMoniker )( + IPersistMoniker * This, + IMoniker * *ppimkName); + + + } IPersistMonikerVtbl; + + struct IPersistMoniker + { + struct IPersistMonikerVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 532 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IPersistMoniker_GetClassID_Proxy( + IPersistMoniker * This, + CLSID *pClassID); + + +void __stdcall IPersistMoniker_GetClassID_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistMoniker_IsDirty_Proxy( + IPersistMoniker * This); + + +void __stdcall IPersistMoniker_IsDirty_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistMoniker_Load_Proxy( + IPersistMoniker * This, + BOOL fFullyAvailable, + IMoniker *pimkName, + LPBC pibc, + DWORD grfMode); + + +void __stdcall IPersistMoniker_Load_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistMoniker_Save_Proxy( + IPersistMoniker * This, + IMoniker *pimkName, + LPBC pbc, + BOOL fRemember); + + +void __stdcall IPersistMoniker_Save_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistMoniker_SaveCompleted_Proxy( + IPersistMoniker * This, + IMoniker *pimkName, + LPBC pibc); + + +void __stdcall IPersistMoniker_SaveCompleted_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IPersistMoniker_GetCurMoniker_Proxy( + IPersistMoniker * This, + IMoniker * *ppimkName); + + +void __stdcall IPersistMoniker_GetCurMoniker_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 614 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 625 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0111_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0111_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IBindProtocol *LPBINDPROTOCOL; + + +extern const IID IID_IBindProtocol; + + + + + + + + + + + + + + +#line 662 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IBindProtocolVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IBindProtocol * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IBindProtocol * This); + + ULONG ( __stdcall *Release )( + IBindProtocol * This); + + HRESULT ( __stdcall *CreateBinding )( + IBindProtocol * This, + LPCWSTR szUrl, + IBindCtx *pbc, + IBinding * *ppb); + + + } IBindProtocolVtbl; + + struct IBindProtocol + { + struct IBindProtocolVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 714 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IBindProtocol_CreateBinding_Proxy( + IBindProtocol * This, + LPCWSTR szUrl, + IBindCtx *pbc, + IBinding * *ppb); + + +void __stdcall IBindProtocol_CreateBinding_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 733 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 744 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0112_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0112_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IBinding *LPBINDING; + + +extern const IID IID_IBinding; + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 794 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IBindingVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IBinding * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IBinding * This); + + ULONG ( __stdcall *Release )( + IBinding * This); + + HRESULT ( __stdcall *Abort )( + IBinding * This); + + HRESULT ( __stdcall *Suspend )( + IBinding * This); + + HRESULT ( __stdcall *Resume )( + IBinding * This); + + HRESULT ( __stdcall *SetPriority )( + IBinding * This, + LONG nPriority); + + HRESULT ( __stdcall *GetPriority )( + IBinding * This, + LONG *pnPriority); + + HRESULT ( __stdcall *GetBindResult )( + IBinding * This, + CLSID *pclsidProtocol, + DWORD *pdwResult, + LPOLESTR *pszResult, + DWORD *pdwReserved); + + + } IBindingVtbl; + + struct IBinding + { + struct IBindingVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 879 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IBinding_Abort_Proxy( + IBinding * This); + + +void __stdcall IBinding_Abort_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBinding_Suspend_Proxy( + IBinding * This); + + +void __stdcall IBinding_Suspend_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBinding_Resume_Proxy( + IBinding * This); + + +void __stdcall IBinding_Resume_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBinding_SetPriority_Proxy( + IBinding * This, + LONG nPriority); + + +void __stdcall IBinding_SetPriority_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBinding_GetPriority_Proxy( + IBinding * This, + LONG *pnPriority); + + +void __stdcall IBinding_GetPriority_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IBinding_RemoteGetBindResult_Proxy( + IBinding * This, + CLSID *pclsidProtocol, + DWORD *pdwResult, + LPOLESTR *pszResult, + DWORD dwReserved); + + +void __stdcall IBinding_RemoteGetBindResult_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 956 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 967 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0113_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0113_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IBindStatusCallback *LPBINDSTATUSCALLBACK; + +typedef +enum __MIDL_IBindStatusCallback_0001 + { BINDVERB_GET = 0, + BINDVERB_POST = 0x1, + BINDVERB_PUT = 0x2, + BINDVERB_CUSTOM = 0x3 + } BINDVERB; + +typedef +enum __MIDL_IBindStatusCallback_0002 + { BINDINFOF_URLENCODESTGMEDDATA = 0x1, + BINDINFOF_URLENCODEDEXTRAINFO = 0x2 + } BINDINFOF; + +typedef +enum __MIDL_IBindStatusCallback_0003 + { BINDF_ASYNCHRONOUS = 0x1, + BINDF_ASYNCSTORAGE = 0x2, + BINDF_NOPROGRESSIVERENDERING = 0x4, + BINDF_OFFLINEOPERATION = 0x8, + BINDF_GETNEWESTVERSION = 0x10, + BINDF_NOWRITECACHE = 0x20, + BINDF_NEEDFILE = 0x40, + BINDF_PULLDATA = 0x80, + BINDF_IGNORESECURITYPROBLEM = 0x100, + BINDF_RESYNCHRONIZE = 0x200, + BINDF_HYPERLINK = 0x400, + BINDF_NO_UI = 0x800, + BINDF_SILENTOPERATION = 0x1000, + BINDF_PRAGMA_NO_CACHE = 0x2000, + BINDF_FREE_THREADED = 0x10000, + BINDF_DIRECT_READ = 0x20000, + BINDF_FORMS_SUBMIT = 0x40000, + BINDF_GETFROMCACHE_IF_NET_FAIL = 0x80000 + } BINDF; + +typedef struct _tagBINDINFO + { + ULONG cbSize; + LPWSTR szExtraInfo; + STGMEDIUM stgmedData; + DWORD grfBindInfoF; + DWORD dwBindVerb; + LPWSTR szCustomVerb; + DWORD cbstgmedData; + DWORD dwOptions; + DWORD dwOptionsFlags; + DWORD dwCodePage; + SECURITY_ATTRIBUTES securityAttributes; + IID iid; + IUnknown *pUnk; + DWORD dwReserved; + } BINDINFO; + +typedef struct _REMSECURITY_ATTRIBUTES + { + DWORD nLength; + DWORD lpSecurityDescriptor; + BOOL bInheritHandle; + } REMSECURITY_ATTRIBUTES; + +typedef struct _REMSECURITY_ATTRIBUTES *PREMSECURITY_ATTRIBUTES; + +typedef struct _REMSECURITY_ATTRIBUTES *LPREMSECURITY_ATTRIBUTES; + +typedef struct _tagRemBINDINFO + { + ULONG cbSize; + LPWSTR szExtraInfo; + DWORD grfBindInfoF; + DWORD dwBindVerb; + LPWSTR szCustomVerb; + DWORD cbstgmedData; + DWORD dwOptions; + DWORD dwOptionsFlags; + DWORD dwCodePage; + REMSECURITY_ATTRIBUTES securityAttributes; + IID iid; + IUnknown *pUnk; + DWORD dwReserved; + } RemBINDINFO; + +typedef struct tagRemFORMATETC + { + DWORD cfFormat; + DWORD ptd; + DWORD dwAspect; + LONG lindex; + DWORD tymed; + } RemFORMATETC; + +typedef struct tagRemFORMATETC *LPREMFORMATETC; + +typedef +enum __MIDL_IBindStatusCallback_0004 + { BSCF_FIRSTDATANOTIFICATION = 0x1, + BSCF_INTERMEDIATEDATANOTIFICATION = 0x2, + BSCF_LASTDATANOTIFICATION = 0x4, + BSCF_DATAFULLYAVAILABLE = 0x8, + BSCF_AVAILABLEDATASIZEUNKNOWN = 0x10 + } BSCF; + +typedef +enum tagBINDSTATUS + { BINDSTATUS_FINDINGRESOURCE = 1, + BINDSTATUS_CONNECTING = BINDSTATUS_FINDINGRESOURCE + 1, + BINDSTATUS_REDIRECTING = BINDSTATUS_CONNECTING + 1, + BINDSTATUS_BEGINDOWNLOADDATA = BINDSTATUS_REDIRECTING + 1, + BINDSTATUS_DOWNLOADINGDATA = BINDSTATUS_BEGINDOWNLOADDATA + 1, + BINDSTATUS_ENDDOWNLOADDATA = BINDSTATUS_DOWNLOADINGDATA + 1, + BINDSTATUS_BEGINDOWNLOADCOMPONENTS = BINDSTATUS_ENDDOWNLOADDATA + 1, + BINDSTATUS_INSTALLINGCOMPONENTS = BINDSTATUS_BEGINDOWNLOADCOMPONENTS + 1, + BINDSTATUS_ENDDOWNLOADCOMPONENTS = BINDSTATUS_INSTALLINGCOMPONENTS + 1, + BINDSTATUS_USINGCACHEDCOPY = BINDSTATUS_ENDDOWNLOADCOMPONENTS + 1, + BINDSTATUS_SENDINGREQUEST = BINDSTATUS_USINGCACHEDCOPY + 1, + BINDSTATUS_CLASSIDAVAILABLE = BINDSTATUS_SENDINGREQUEST + 1, + BINDSTATUS_MIMETYPEAVAILABLE = BINDSTATUS_CLASSIDAVAILABLE + 1, + BINDSTATUS_CACHEFILENAMEAVAILABLE = BINDSTATUS_MIMETYPEAVAILABLE + 1, + BINDSTATUS_BEGINSYNCOPERATION = BINDSTATUS_CACHEFILENAMEAVAILABLE + 1, + BINDSTATUS_ENDSYNCOPERATION = BINDSTATUS_BEGINSYNCOPERATION + 1, + BINDSTATUS_BEGINUPLOADDATA = BINDSTATUS_ENDSYNCOPERATION + 1, + BINDSTATUS_UPLOADINGDATA = BINDSTATUS_BEGINUPLOADDATA + 1, + BINDSTATUS_ENDUPLOADDATA = BINDSTATUS_UPLOADINGDATA + 1, + BINDSTATUS_PROTOCOLCLASSID = BINDSTATUS_ENDUPLOADDATA + 1, + BINDSTATUS_ENCODING = BINDSTATUS_PROTOCOLCLASSID + 1, + BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE = BINDSTATUS_ENCODING + 1, + BINDSTATUS_CLASSINSTALLLOCATION = BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE + 1, + BINDSTATUS_DECODING = BINDSTATUS_CLASSINSTALLLOCATION + 1, + BINDSTATUS_LOADINGMIMEHANDLER = BINDSTATUS_DECODING + 1 + } BINDSTATUS; + + +extern const IID IID_IBindStatusCallback; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1164 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IBindStatusCallbackVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IBindStatusCallback * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IBindStatusCallback * This); + + ULONG ( __stdcall *Release )( + IBindStatusCallback * This); + + HRESULT ( __stdcall *OnStartBinding )( + IBindStatusCallback * This, + DWORD dwReserved, + IBinding *pib); + + HRESULT ( __stdcall *GetPriority )( + IBindStatusCallback * This, + LONG *pnPriority); + + HRESULT ( __stdcall *OnLowResource )( + IBindStatusCallback * This, + DWORD reserved); + + HRESULT ( __stdcall *OnProgress )( + IBindStatusCallback * This, + ULONG ulProgress, + ULONG ulProgressMax, + ULONG ulStatusCode, + LPCWSTR szStatusText); + + HRESULT ( __stdcall *OnStopBinding )( + IBindStatusCallback * This, + HRESULT hresult, + LPCWSTR szError); + + HRESULT ( __stdcall *GetBindInfo )( + IBindStatusCallback * This, + DWORD *grfBINDF, + BINDINFO *pbindinfo); + + HRESULT ( __stdcall *OnDataAvailable )( + IBindStatusCallback * This, + DWORD grfBSCF, + DWORD dwSize, + FORMATETC *pformatetc, + STGMEDIUM *pstgmed); + + HRESULT ( __stdcall *OnObjectAvailable )( + IBindStatusCallback * This, + const IID * const riid, + IUnknown *punk); + + + } IBindStatusCallbackVtbl; + + struct IBindStatusCallback + { + struct IBindStatusCallbackVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1273 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IBindStatusCallback_OnStartBinding_Proxy( + IBindStatusCallback * This, + DWORD dwReserved, + IBinding *pib); + + +void __stdcall IBindStatusCallback_OnStartBinding_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindStatusCallback_GetPriority_Proxy( + IBindStatusCallback * This, + LONG *pnPriority); + + +void __stdcall IBindStatusCallback_GetPriority_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindStatusCallback_OnLowResource_Proxy( + IBindStatusCallback * This, + DWORD reserved); + + +void __stdcall IBindStatusCallback_OnLowResource_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindStatusCallback_OnProgress_Proxy( + IBindStatusCallback * This, + ULONG ulProgress, + ULONG ulProgressMax, + ULONG ulStatusCode, + LPCWSTR szStatusText); + + +void __stdcall IBindStatusCallback_OnProgress_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindStatusCallback_OnStopBinding_Proxy( + IBindStatusCallback * This, + HRESULT hresult, + LPCWSTR szError); + + +void __stdcall IBindStatusCallback_OnStopBinding_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IBindStatusCallback_RemoteGetBindInfo_Proxy( + IBindStatusCallback * This, + DWORD *grfBINDF, + RemBINDINFO *pbindinfo, + RemSTGMEDIUM *pstgmed); + + +void __stdcall IBindStatusCallback_RemoteGetBindInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IBindStatusCallback_RemoteOnDataAvailable_Proxy( + IBindStatusCallback * This, + DWORD grfBSCF, + DWORD dwSize, + RemFORMATETC *pformatetc, + RemSTGMEDIUM *pstgmed); + + +void __stdcall IBindStatusCallback_RemoteOnDataAvailable_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IBindStatusCallback_OnObjectAvailable_Proxy( + IBindStatusCallback * This, + const IID * const riid, + IUnknown *punk); + + +void __stdcall IBindStatusCallback_OnObjectAvailable_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1385 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 1396 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0114_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0114_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IAuthenticate *LPAUTHENTICATION; + + +extern const IID IID_IAuthenticate; + + + + + + + + + + + + + + +#line 1433 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IAuthenticateVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IAuthenticate * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IAuthenticate * This); + + ULONG ( __stdcall *Release )( + IAuthenticate * This); + + HRESULT ( __stdcall *Authenticate )( + IAuthenticate * This, + HWND *phwnd, + LPWSTR *pszUsername, + LPWSTR *pszPassword); + + + } IAuthenticateVtbl; + + struct IAuthenticate + { + struct IAuthenticateVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 1485 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IAuthenticate_Authenticate_Proxy( + IAuthenticate * This, + HWND *phwnd, + LPWSTR *pszUsername, + LPWSTR *pszPassword); + + +void __stdcall IAuthenticate_Authenticate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1504 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 1515 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0115_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0115_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IHttpNegotiate *LPHTTPNEGOTIATE; + + +extern const IID IID_IHttpNegotiate; + + + + + + + + + + + + + + + + + + + + + +#line 1559 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IHttpNegotiateVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IHttpNegotiate * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IHttpNegotiate * This); + + ULONG ( __stdcall *Release )( + IHttpNegotiate * This); + + HRESULT ( __stdcall *BeginningTransaction )( + IHttpNegotiate * This, + LPCWSTR szURL, + LPCWSTR szHeaders, + DWORD dwReserved, + LPWSTR *pszAdditionalHeaders); + + HRESULT ( __stdcall *OnResponse )( + IHttpNegotiate * This, + DWORD dwResponseCode, + LPCWSTR szResponseHeaders, + LPCWSTR szRequestHeaders, + LPWSTR *pszAdditionalRequestHeaders); + + + } IHttpNegotiateVtbl; + + struct IHttpNegotiate + { + struct IHttpNegotiateVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1622 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IHttpNegotiate_BeginningTransaction_Proxy( + IHttpNegotiate * This, + LPCWSTR szURL, + LPCWSTR szHeaders, + DWORD dwReserved, + LPWSTR *pszAdditionalHeaders); + + +void __stdcall IHttpNegotiate_BeginningTransaction_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IHttpNegotiate_OnResponse_Proxy( + IHttpNegotiate * This, + DWORD dwResponseCode, + LPCWSTR szResponseHeaders, + LPCWSTR szRequestHeaders, + LPWSTR *pszAdditionalRequestHeaders); + + +void __stdcall IHttpNegotiate_OnResponse_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1657 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 1668 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0116_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0116_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IWindowForBindingUI *LPWINDOWFORBINDINGUI; + + +extern const IID IID_IWindowForBindingUI; + + + + + + + + + + + + + +#line 1704 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IWindowForBindingUIVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IWindowForBindingUI * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IWindowForBindingUI * This); + + ULONG ( __stdcall *Release )( + IWindowForBindingUI * This); + + HRESULT ( __stdcall *GetWindow )( + IWindowForBindingUI * This, + const GUID * const rguidReason, + HWND *phwnd); + + + } IWindowForBindingUIVtbl; + + struct IWindowForBindingUI + { + struct IWindowForBindingUIVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 1755 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IWindowForBindingUI_GetWindow_Proxy( + IWindowForBindingUI * This, + const GUID * const rguidReason, + HWND *phwnd); + + +void __stdcall IWindowForBindingUI_GetWindow_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1773 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 1784 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0117_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0117_v0_0_s_ifspec; + + + + + + + + + + + + +typedef ICodeInstall *LPCODEINSTALL; + +typedef +enum __MIDL_ICodeInstall_0001 + { CIP_DISK_FULL = 0, + CIP_ACCESS_DENIED = CIP_DISK_FULL + 1, + CIP_NEWER_VERSION_EXISTS = CIP_ACCESS_DENIED + 1, + CIP_OLDER_VERSION_EXISTS = CIP_NEWER_VERSION_EXISTS + 1, + CIP_NAME_CONFLICT = CIP_OLDER_VERSION_EXISTS + 1, + CIP_TRUST_VERIFICATION_COMPONENT_MISSING = CIP_NAME_CONFLICT + 1, + CIP_EXE_SELF_REGISTERATION_TIMEOUT = CIP_TRUST_VERIFICATION_COMPONENT_MISSING + 1, + CIP_UNSAFE_TO_ABORT = CIP_EXE_SELF_REGISTERATION_TIMEOUT + 1, + CIP_NEED_REBOOT = CIP_UNSAFE_TO_ABORT + 1 + } CIP_STATUS; + + +extern const IID IID_ICodeInstall; + + + + + + + + + + + + + + + +#line 1835 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct ICodeInstallVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ICodeInstall * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ICodeInstall * This); + + ULONG ( __stdcall *Release )( + ICodeInstall * This); + + HRESULT ( __stdcall *GetWindow )( + ICodeInstall * This, + const GUID * const rguidReason, + HWND *phwnd); + + HRESULT ( __stdcall *OnCodeInstallProblem )( + ICodeInstall * This, + ULONG ulStatusCode, + LPCWSTR szDestination, + LPCWSTR szSource, + DWORD dwReserved); + + + } ICodeInstallVtbl; + + struct ICodeInstall + { + struct ICodeInstallVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1897 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall ICodeInstall_OnCodeInstallProblem_Proxy( + ICodeInstall * This, + ULONG ulStatusCode, + LPCWSTR szDestination, + LPCWSTR szSource, + DWORD dwReserved); + + +void __stdcall ICodeInstall_OnCodeInstallProblem_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 1917 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 1928 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0118_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0118_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IWinInetInfo *LPWININETINFO; + + +extern const IID IID_IWinInetInfo; + + + + + + + + + + + + + + +#line 1965 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IWinInetInfoVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IWinInetInfo * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IWinInetInfo * This); + + ULONG ( __stdcall *Release )( + IWinInetInfo * This); + + HRESULT ( __stdcall *QueryOption )( + IWinInetInfo * This, + DWORD dwOption, + LPVOID pBuffer, + DWORD *pcbBuf); + + + } IWinInetInfoVtbl; + + struct IWinInetInfo + { + struct IWinInetInfoVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + +#line 2017 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + HRESULT __stdcall IWinInetInfo_RemoteQueryOption_Proxy( + IWinInetInfo * This, + DWORD dwOption, + BYTE *pBuffer, + DWORD *pcbBuf); + + +void __stdcall IWinInetInfo_RemoteQueryOption_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2036 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 2047 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0119_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0119_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IHttpSecurity *LPHTTPSECURITY; + + +extern const IID IID_IHttpSecurity; + + + + + + + + + + + + +#line 2083 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IHttpSecurityVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IHttpSecurity * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IHttpSecurity * This); + + ULONG ( __stdcall *Release )( + IHttpSecurity * This); + + HRESULT ( __stdcall *GetWindow )( + IHttpSecurity * This, + const GUID * const rguidReason, + HWND *phwnd); + + HRESULT ( __stdcall *OnSecurityProblem )( + IHttpSecurity * This, + DWORD dwProblem); + + + } IHttpSecurityVtbl; + + struct IHttpSecurity + { + struct IHttpSecurityVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2142 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IHttpSecurity_OnSecurityProblem_Proxy( + IHttpSecurity * This, + DWORD dwProblem); + + +void __stdcall IHttpSecurity_OnSecurityProblem_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2159 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 2170 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0120_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0120_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IWinInetHttpInfo *LPWININETHTTPINFO; + + +extern const IID IID_IWinInetHttpInfo; + + + + + + + + + + + + + + + + +#line 2209 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IWinInetHttpInfoVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IWinInetHttpInfo * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IWinInetHttpInfo * This); + + ULONG ( __stdcall *Release )( + IWinInetHttpInfo * This); + + HRESULT ( __stdcall *QueryOption )( + IWinInetHttpInfo * This, + DWORD dwOption, + LPVOID pBuffer, + DWORD *pcbBuf); + + HRESULT ( __stdcall *QueryInfo )( + IWinInetHttpInfo * This, + DWORD dwOption, + LPVOID pBuffer, + DWORD *pcbBuf, + DWORD *pdwFlags, + DWORD *pdwReserved); + + + } IWinInetHttpInfoVtbl; + + struct IWinInetHttpInfo + { + struct IWinInetHttpInfoVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2273 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + HRESULT __stdcall IWinInetHttpInfo_RemoteQueryInfo_Proxy( + IWinInetHttpInfo * This, + DWORD dwOption, + BYTE *pBuffer, + DWORD *pcbBuf, + DWORD *pdwFlags, + DWORD *pdwReserved); + + +void __stdcall IWinInetHttpInfo_RemoteQueryInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2294 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 2305 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern const GUID SID_BindHost; + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0121_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0121_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IBindHost *LPBINDHOST; + + +extern const IID IID_IBindHost; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2360 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IBindHostVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IBindHost * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IBindHost * This); + + ULONG ( __stdcall *Release )( + IBindHost * This); + + HRESULT ( __stdcall *CreateMoniker )( + IBindHost * This, + LPOLESTR szName, + IBindCtx *pBC, + IMoniker * *ppmk, + DWORD dwReserved); + + HRESULT ( __stdcall *MonikerBindToStorage )( + IBindHost * This, + IMoniker *pMk, + IBindCtx *pBC, + IBindStatusCallback *pBSC, + const IID * const riid, + void * *ppvObj); + + HRESULT ( __stdcall *MonikerBindToObject )( + IBindHost * This, + IMoniker *pMk, + IBindCtx *pBC, + IBindStatusCallback *pBSC, + const IID * const riid, + void * *ppvObj); + + + } IBindHostVtbl; + + struct IBindHost + { + struct IBindHostVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2435 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IBindHost_CreateMoniker_Proxy( + IBindHost * This, + LPOLESTR szName, + IBindCtx *pBC, + IMoniker * *ppmk, + DWORD dwReserved); + + +void __stdcall IBindHost_CreateMoniker_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IBindHost_RemoteMonikerBindToStorage_Proxy( + IBindHost * This, + IMoniker *pMk, + IBindCtx *pBC, + IBindStatusCallback *pBSC, + const IID * const riid, + IUnknown * *ppvObj); + + +void __stdcall IBindHost_RemoteMonikerBindToStorage_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + HRESULT __stdcall IBindHost_RemoteMonikerBindToObject_Proxy( + IBindHost * This, + IMoniker *pMk, + IBindCtx *pBC, + IBindStatusCallback *pBSC, + const IID * const riid, + IUnknown * *ppvObj); + + +void __stdcall IBindHost_RemoteMonikerBindToObject_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2487 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 2498 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + +struct IBindStatusCallback; +extern HRESULT __stdcall HlinkSimpleNavigateToString( + LPCWSTR szTarget, + LPCWSTR szLocation, + LPCWSTR szTargetFrameName, + IUnknown *pUnk, + IBindCtx *pbc, + IBindStatusCallback *, + DWORD grfHLNF, + DWORD dwReserved +); + +extern HRESULT __stdcall HlinkSimpleNavigateToMoniker( + IMoniker *pmkTarget, + LPCWSTR szLocation, + LPCWSTR szTargetFrameName, + IUnknown *pUnk, + IBindCtx *pbc, + IBindStatusCallback *, + DWORD grfHLNF, + DWORD dwReserved +); + +extern HRESULT __stdcall URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK); +extern HRESULT __stdcall URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK); +extern HRESULT __stdcall URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK); +extern HRESULT __stdcall URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK); +extern HRESULT __stdcall URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK); +extern HRESULT __stdcall URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK); +extern HRESULT __stdcall URLDownloadToCacheFileA(LPUNKNOWN,LPCSTR,LPTSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK); +extern HRESULT __stdcall URLDownloadToCacheFileW(LPUNKNOWN,LPCWSTR,LPWSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK); +extern HRESULT __stdcall URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK); +extern HRESULT __stdcall URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK); + + + + + + + + + + + + + +#line 2553 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + +extern HRESULT __stdcall HlinkGoBack(IUnknown *pUnk); +extern HRESULT __stdcall HlinkGoForward(IUnknown *pUnk); +extern HRESULT __stdcall HlinkNavigateString(IUnknown *pUnk, LPCWSTR szTarget); +extern HRESULT __stdcall HlinkNavigateMoniker(IUnknown *pUnk, IMoniker *pmkTarget); + + + + + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0122_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0122_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IInternet *LPIINTERNET; + + +extern const IID IID_IInternet; + + + + + + + + + +#line 2600 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternet * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternet * This); + + ULONG ( __stdcall *Release )( + IInternet * This); + + + } IInternetVtbl; + + struct IInternet + { + struct IInternetVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + +#line 2643 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +#line 2648 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 2659 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0123_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0123_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IInternetBindInfo *LPIINTERNETBINDINFO; + +typedef +enum tagBINDSTRING + { BINDSTRING_HEADERS = 1, + BINDSTRING_ACCEPT_MIMES = BINDSTRING_HEADERS + 1, + BINDSTRING_EXTRA_URL = BINDSTRING_ACCEPT_MIMES + 1, + BINDSTRING_LANGUAGE = BINDSTRING_EXTRA_URL + 1, + BINDSTRING_USERNAME = BINDSTRING_LANGUAGE + 1, + BINDSTRING_PASSWORD = BINDSTRING_USERNAME + 1, + BINDSTRING_UA_PIXELS = BINDSTRING_PASSWORD + 1, + BINDSTRING_UA_COLOR = BINDSTRING_UA_PIXELS + 1, + BINDSTRING_OS = BINDSTRING_UA_COLOR + 1, + BINDSTRING_USER_AGENT = BINDSTRING_OS + 1, + BINDSTRING_ACCEPT_ENCODINGS = BINDSTRING_USER_AGENT + 1, + BINDSTRING_POST_COOKIE = BINDSTRING_ACCEPT_ENCODINGS + 1, + BINDSTRING_POST_DATA_MIME = BINDSTRING_POST_COOKIE + 1, + BINDSTRING_URL = BINDSTRING_POST_DATA_MIME + 1 + } BINDSTRING; + + +extern const IID IID_IInternetBindInfo; + + + + + + + + + + + + + + + + + + + +#line 2719 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetBindInfoVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetBindInfo * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetBindInfo * This); + + ULONG ( __stdcall *Release )( + IInternetBindInfo * This); + + HRESULT ( __stdcall *GetBindInfo )( + IInternetBindInfo * This, + DWORD *grfBINDF, + BINDINFO *pbindinfo); + + HRESULT ( __stdcall *GetBindString )( + IInternetBindInfo * This, + ULONG ulStringType, + LPOLESTR *ppwzStr, + ULONG cEl, + ULONG *pcElFetched); + + + } IInternetBindInfoVtbl; + + struct IInternetBindInfo + { + struct IInternetBindInfoVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2780 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetBindInfo_GetBindInfo_Proxy( + IInternetBindInfo * This, + DWORD *grfBINDF, + BINDINFO *pbindinfo); + + +void __stdcall IInternetBindInfo_GetBindInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetBindInfo_GetBindString_Proxy( + IInternetBindInfo * This, + ULONG ulStringType, + LPOLESTR *ppwzStr, + ULONG cEl, + ULONG *pcElFetched); + + +void __stdcall IInternetBindInfo_GetBindString_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 2813 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 2824 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0124_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0124_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT; + +typedef +enum _tagPI_FLAGS + { PI_PARSE_URL = 0x1, + PI_FILTER_MODE = 0x2, + PI_FORCE_ASYNC = 0x4, + PI_USE_WORKERTHREAD = 0x8, + PI_MIMEVERIFICATION = 0x10, + PI_CLSIDLOOKUP = 0x20, + PI_DATAPROGRESS = 0x40, + PI_SYNCHRONOUS = 0x80, + PI_APARTMENTTHREADED = 0x100, + PI_CLASSINSTALL = 0x200, + PD_FORCE_SWITCH = 0x10000 + } PI_FLAGS; + +typedef struct _tagPROTOCOLDATA + { + DWORD grfFlags; + DWORD dwState; + LPVOID pData; + ULONG cbData; + } PROTOCOLDATA; + + +extern const IID IID_IInternetProtocolRoot; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2900 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetProtocolRootVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetProtocolRoot * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetProtocolRoot * This); + + ULONG ( __stdcall *Release )( + IInternetProtocolRoot * This); + + HRESULT ( __stdcall *Start )( + IInternetProtocolRoot * This, + LPCWSTR szUrl, + IInternetProtocolSink *pOIProtSink, + IInternetBindInfo *pOIBindInfo, + DWORD grfPI, + DWORD dwReserved); + + HRESULT ( __stdcall *Continue )( + IInternetProtocolRoot * This, + PROTOCOLDATA *pProtocolData); + + HRESULT ( __stdcall *Abort )( + IInternetProtocolRoot * This, + HRESULT hrReason, + DWORD dwOptions); + + HRESULT ( __stdcall *Terminate )( + IInternetProtocolRoot * This, + DWORD dwOptions); + + HRESULT ( __stdcall *Suspend )( + IInternetProtocolRoot * This); + + HRESULT ( __stdcall *Resume )( + IInternetProtocolRoot * This); + + + } IInternetProtocolRootVtbl; + + struct IInternetProtocolRoot + { + struct IInternetProtocolRootVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 2988 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetProtocolRoot_Start_Proxy( + IInternetProtocolRoot * This, + LPCWSTR szUrl, + IInternetProtocolSink *pOIProtSink, + IInternetBindInfo *pOIBindInfo, + DWORD grfPI, + DWORD dwReserved); + + +void __stdcall IInternetProtocolRoot_Start_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocolRoot_Continue_Proxy( + IInternetProtocolRoot * This, + PROTOCOLDATA *pProtocolData); + + +void __stdcall IInternetProtocolRoot_Continue_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocolRoot_Abort_Proxy( + IInternetProtocolRoot * This, + HRESULT hrReason, + DWORD dwOptions); + + +void __stdcall IInternetProtocolRoot_Abort_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocolRoot_Terminate_Proxy( + IInternetProtocolRoot * This, + DWORD dwOptions); + + +void __stdcall IInternetProtocolRoot_Terminate_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocolRoot_Suspend_Proxy( + IInternetProtocolRoot * This); + + +void __stdcall IInternetProtocolRoot_Suspend_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocolRoot_Resume_Proxy( + IInternetProtocolRoot * This); + + +void __stdcall IInternetProtocolRoot_Resume_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3068 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 3079 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0125_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0125_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IInternetProtocol *LPIINTERNETPROTOCOL; + + +extern const IID IID_IInternetProtocol; + + + + + + + + + + + + + + + + + + + + + + + + +#line 3126 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetProtocolVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetProtocol * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetProtocol * This); + + ULONG ( __stdcall *Release )( + IInternetProtocol * This); + + HRESULT ( __stdcall *Start )( + IInternetProtocol * This, + LPCWSTR szUrl, + IInternetProtocolSink *pOIProtSink, + IInternetBindInfo *pOIBindInfo, + DWORD grfPI, + DWORD dwReserved); + + HRESULT ( __stdcall *Continue )( + IInternetProtocol * This, + PROTOCOLDATA *pProtocolData); + + HRESULT ( __stdcall *Abort )( + IInternetProtocol * This, + HRESULT hrReason, + DWORD dwOptions); + + HRESULT ( __stdcall *Terminate )( + IInternetProtocol * This, + DWORD dwOptions); + + HRESULT ( __stdcall *Suspend )( + IInternetProtocol * This); + + HRESULT ( __stdcall *Resume )( + IInternetProtocol * This); + + HRESULT ( __stdcall *Read )( + IInternetProtocol * This, + void *pv, + ULONG cb, + ULONG *pcbRead); + + HRESULT ( __stdcall *Seek )( + IInternetProtocol * This, + LARGE_INTEGER dlibMove, + DWORD dwOrigin, + ULARGE_INTEGER *plibNewPosition); + + HRESULT ( __stdcall *LockRequest )( + IInternetProtocol * This, + DWORD dwOptions); + + HRESULT ( __stdcall *UnlockRequest )( + IInternetProtocol * This); + + + } IInternetProtocolVtbl; + + struct IInternetProtocol + { + struct IInternetProtocolVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3246 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetProtocol_Read_Proxy( + IInternetProtocol * This, + void *pv, + ULONG cb, + ULONG *pcbRead); + + +void __stdcall IInternetProtocol_Read_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocol_Seek_Proxy( + IInternetProtocol * This, + LARGE_INTEGER dlibMove, + DWORD dwOrigin, + ULARGE_INTEGER *plibNewPosition); + + +void __stdcall IInternetProtocol_Seek_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocol_LockRequest_Proxy( + IInternetProtocol * This, + DWORD dwOptions); + + +void __stdcall IInternetProtocol_LockRequest_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocol_UnlockRequest_Proxy( + IInternetProtocol * This); + + +void __stdcall IInternetProtocol_UnlockRequest_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3302 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 3313 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0126_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0126_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IInternetProtocolSink *LPIINTERNETPROTOCOLSINK; + + +extern const IID IID_IInternetProtocolSink; + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3362 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetProtocolSinkVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetProtocolSink * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetProtocolSink * This); + + ULONG ( __stdcall *Release )( + IInternetProtocolSink * This); + + HRESULT ( __stdcall *Switch )( + IInternetProtocolSink * This, + PROTOCOLDATA *pProtocolData); + + HRESULT ( __stdcall *ReportProgress )( + IInternetProtocolSink * This, + ULONG ulStatusCode, + LPCWSTR szStatusText); + + HRESULT ( __stdcall *ReportData )( + IInternetProtocolSink * This, + DWORD grfBSCF, + ULONG ulProgress, + ULONG ulProgressMax); + + HRESULT ( __stdcall *ReportResult )( + IInternetProtocolSink * This, + HRESULT hrResult, + DWORD dwError, + LPCWSTR szResult); + + + } IInternetProtocolSinkVtbl; + + struct IInternetProtocolSink + { + struct IInternetProtocolSinkVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3438 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetProtocolSink_Switch_Proxy( + IInternetProtocolSink * This, + PROTOCOLDATA *pProtocolData); + + +void __stdcall IInternetProtocolSink_Switch_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocolSink_ReportProgress_Proxy( + IInternetProtocolSink * This, + ULONG ulStatusCode, + LPCWSTR szStatusText); + + +void __stdcall IInternetProtocolSink_ReportProgress_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocolSink_ReportData_Proxy( + IInternetProtocolSink * This, + DWORD grfBSCF, + ULONG ulProgress, + ULONG ulProgressMax); + + +void __stdcall IInternetProtocolSink_ReportData_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocolSink_ReportResult_Proxy( + IInternetProtocolSink * This, + HRESULT hrResult, + DWORD dwError, + LPCWSTR szResult); + + +void __stdcall IInternetProtocolSink_ReportResult_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3496 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 3507 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0127_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0127_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IInternetSession *LPIINTERNETSESSION; + +typedef +enum _tagOIBDG_FLAGS + { OIBDG_APARTMENTTHREADED = 0x100 + } OIBDG_FLAGS; + + +extern const IID IID_IInternetSession; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3585 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetSessionVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetSession * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetSession * This); + + ULONG ( __stdcall *Release )( + IInternetSession * This); + + HRESULT ( __stdcall *RegisterNameSpace )( + IInternetSession * This, + IClassFactory *pCF, + const CLSID * const rclsid, + LPCWSTR pwzProtocol, + ULONG cPatterns, + const LPCWSTR *ppwzPatterns, + DWORD dwReserved); + + HRESULT ( __stdcall *UnregisterNameSpace )( + IInternetSession * This, + IClassFactory *pCF, + LPCWSTR pszProtocol); + + HRESULT ( __stdcall *RegisterMimeFilter )( + IInternetSession * This, + IClassFactory *pCF, + const CLSID * const rclsid, + LPCWSTR pwzType); + + HRESULT ( __stdcall *UnregisterMimeFilter )( + IInternetSession * This, + IClassFactory *pCF, + LPCWSTR pwzType); + + HRESULT ( __stdcall *CreateBinding )( + IInternetSession * This, + LPBC pBC, + LPCWSTR szUrl, + IUnknown *pUnkOuter, + IUnknown * *ppUnk, + IInternetProtocol * *ppOInetProt, + DWORD dwOption); + + HRESULT ( __stdcall *SetSessionOption )( + IInternetSession * This, + DWORD dwOption, + LPVOID pBuffer, + DWORD dwBufferLength, + DWORD dwReserved); + + HRESULT ( __stdcall *GetSessionOption )( + IInternetSession * This, + DWORD dwOption, + LPVOID pBuffer, + DWORD *pdwBufferLength, + DWORD dwReserved); + + + } IInternetSessionVtbl; + + struct IInternetSession + { + struct IInternetSessionVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3697 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetSession_RegisterNameSpace_Proxy( + IInternetSession * This, + IClassFactory *pCF, + const CLSID * const rclsid, + LPCWSTR pwzProtocol, + ULONG cPatterns, + const LPCWSTR *ppwzPatterns, + DWORD dwReserved); + + +void __stdcall IInternetSession_RegisterNameSpace_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSession_UnregisterNameSpace_Proxy( + IInternetSession * This, + IClassFactory *pCF, + LPCWSTR pszProtocol); + + +void __stdcall IInternetSession_UnregisterNameSpace_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSession_RegisterMimeFilter_Proxy( + IInternetSession * This, + IClassFactory *pCF, + const CLSID * const rclsid, + LPCWSTR pwzType); + + +void __stdcall IInternetSession_RegisterMimeFilter_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSession_UnregisterMimeFilter_Proxy( + IInternetSession * This, + IClassFactory *pCF, + LPCWSTR pwzType); + + +void __stdcall IInternetSession_UnregisterMimeFilter_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSession_CreateBinding_Proxy( + IInternetSession * This, + LPBC pBC, + LPCWSTR szUrl, + IUnknown *pUnkOuter, + IUnknown * *ppUnk, + IInternetProtocol * *ppOInetProt, + DWORD dwOption); + + +void __stdcall IInternetSession_CreateBinding_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSession_SetSessionOption_Proxy( + IInternetSession * This, + DWORD dwOption, + LPVOID pBuffer, + DWORD dwBufferLength, + DWORD dwReserved); + + +void __stdcall IInternetSession_SetSessionOption_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSession_GetSessionOption_Proxy( + IInternetSession * This, + DWORD dwOption, + LPVOID pBuffer, + DWORD *pdwBufferLength, + DWORD dwReserved); + + +void __stdcall IInternetSession_GetSessionOption_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3806 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 3817 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0128_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0128_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IInternetThreadSwitch *LPIINTERNETTHREADSWITCH; + + +extern const IID IID_IInternetThreadSwitch; + + + + + + + + + + + + + +#line 3853 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetThreadSwitchVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetThreadSwitch * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetThreadSwitch * This); + + ULONG ( __stdcall *Release )( + IInternetThreadSwitch * This); + + HRESULT ( __stdcall *Prepare )( + IInternetThreadSwitch * This); + + HRESULT ( __stdcall *Continue )( + IInternetThreadSwitch * This); + + + } IInternetThreadSwitchVtbl; + + struct IInternetThreadSwitch + { + struct IInternetThreadSwitchVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 3908 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetThreadSwitch_Prepare_Proxy( + IInternetThreadSwitch * This); + + +void __stdcall IInternetThreadSwitch_Prepare_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetThreadSwitch_Continue_Proxy( + IInternetThreadSwitch * This); + + +void __stdcall IInternetThreadSwitch_Continue_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 3935 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 3946 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0129_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0129_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IInternetPriority *LPIINTERNETPRIORITY; + + +extern const IID IID_IInternetPriority; + + + + + + + + + + + + + + + +#line 3984 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetPriorityVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetPriority * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetPriority * This); + + ULONG ( __stdcall *Release )( + IInternetPriority * This); + + HRESULT ( __stdcall *SetPriority )( + IInternetPriority * This, + LONG nPriority); + + HRESULT ( __stdcall *GetPriority )( + IInternetPriority * This, + LONG *pnPriority); + + + } IInternetPriorityVtbl; + + struct IInternetPriority + { + struct IInternetPriorityVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4041 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetPriority_SetPriority_Proxy( + IInternetPriority * This, + LONG nPriority); + + +void __stdcall IInternetPriority_SetPriority_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetPriority_GetPriority_Proxy( + IInternetPriority * This, + LONG *pnPriority); + + +void __stdcall IInternetPriority_GetPriority_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4070 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 4081 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0130_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0130_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO; + +typedef +enum _tagPARSEACTION + { PARSE_CANONICALIZE = 1, + PARSE_FRIENDLY = PARSE_CANONICALIZE + 1, + PARSE_SECURITY_URL = PARSE_FRIENDLY + 1, + PARSE_ROOTDOCUMENT = PARSE_SECURITY_URL + 1, + PARSE_DOCUMENT = PARSE_ROOTDOCUMENT + 1, + PARSE_ANCHOR = PARSE_DOCUMENT + 1, + PARSE_ENCODE = PARSE_ANCHOR + 1, + PARSE_DECODE = PARSE_ENCODE + 1, + PARSE_PATH_FROM_URL = PARSE_DECODE + 1, + PARSE_URL_FROM_PATH = PARSE_PATH_FROM_URL + 1, + PARSE_MIME = PARSE_URL_FROM_PATH + 1, + PARSE_SERVER = PARSE_MIME + 1, + PARSE_SCHEMA = PARSE_SERVER + 1, + PARSE_SITE = PARSE_SCHEMA + 1, + PARSE_DOMAIN = PARSE_SITE + 1, + PARSE_LOCATION = PARSE_DOMAIN + 1, + PARSE_SECURITY_DOMAIN = PARSE_LOCATION + 1 + } PARSEACTION; + +typedef +enum _tagPSUACTION + { PSU_DEFAULT = 1, + PSU_SECURITY_URL_ONLY = PSU_DEFAULT + 1 + } PSUACTION; + +typedef +enum _tagQUERYOPTION + { QUERY_EXPIRATION_DATE = 1, + QUERY_TIME_OF_LAST_CHANGE = QUERY_EXPIRATION_DATE + 1, + QUERY_CONTENT_ENCODING = QUERY_TIME_OF_LAST_CHANGE + 1, + QUERY_CONTENT_TYPE = QUERY_CONTENT_ENCODING + 1, + QUERY_REFRESH = QUERY_CONTENT_TYPE + 1, + QUERY_RECOMBINE = QUERY_REFRESH + 1, + QUERY_CAN_NAVIGATE = QUERY_RECOMBINE + 1, + QUERY_USES_NETWORK = QUERY_CAN_NAVIGATE + 1, + QUERY_IS_CACHED = QUERY_USES_NETWORK + 1, + QUERY_IS_INSTALLEDENTRY = QUERY_IS_CACHED + 1, + QUERY_IS_CACHED_OR_MAPPED = QUERY_IS_INSTALLEDENTRY + 1, + QUERY_USES_CACHE = QUERY_IS_CACHED_OR_MAPPED + 1 + } QUERYOPTION; + + +extern const IID IID_IInternetProtocolInfo; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4188 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetProtocolInfoVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetProtocolInfo * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetProtocolInfo * This); + + ULONG ( __stdcall *Release )( + IInternetProtocolInfo * This); + + HRESULT ( __stdcall *ParseUrl )( + IInternetProtocolInfo * This, + LPCWSTR pwzUrl, + PARSEACTION ParseAction, + DWORD dwParseFlags, + LPWSTR pwzResult, + DWORD cchResult, + DWORD *pcchResult, + DWORD dwReserved); + + HRESULT ( __stdcall *CombineUrl )( + IInternetProtocolInfo * This, + LPCWSTR pwzBaseUrl, + LPCWSTR pwzRelativeUrl, + DWORD dwCombineFlags, + LPWSTR pwzResult, + DWORD cchResult, + DWORD *pcchResult, + DWORD dwReserved); + + HRESULT ( __stdcall *CompareUrl )( + IInternetProtocolInfo * This, + LPCWSTR pwzUrl1, + LPCWSTR pwzUrl2, + DWORD dwCompareFlags); + + HRESULT ( __stdcall *QueryInfo )( + IInternetProtocolInfo * This, + LPCWSTR pwzUrl, + QUERYOPTION OueryOption, + DWORD dwQueryFlags, + LPVOID pBuffer, + DWORD cbBuffer, + DWORD *pcbBuf, + DWORD dwReserved); + + + } IInternetProtocolInfoVtbl; + + struct IInternetProtocolInfo + { + struct IInternetProtocolInfoVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4279 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetProtocolInfo_ParseUrl_Proxy( + IInternetProtocolInfo * This, + LPCWSTR pwzUrl, + PARSEACTION ParseAction, + DWORD dwParseFlags, + LPWSTR pwzResult, + DWORD cchResult, + DWORD *pcchResult, + DWORD dwReserved); + + +void __stdcall IInternetProtocolInfo_ParseUrl_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocolInfo_CombineUrl_Proxy( + IInternetProtocolInfo * This, + LPCWSTR pwzBaseUrl, + LPCWSTR pwzRelativeUrl, + DWORD dwCombineFlags, + LPWSTR pwzResult, + DWORD cchResult, + DWORD *pcchResult, + DWORD dwReserved); + + +void __stdcall IInternetProtocolInfo_CombineUrl_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocolInfo_CompareUrl_Proxy( + IInternetProtocolInfo * This, + LPCWSTR pwzUrl1, + LPCWSTR pwzUrl2, + DWORD dwCompareFlags); + + +void __stdcall IInternetProtocolInfo_CompareUrl_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetProtocolInfo_QueryInfo_Proxy( + IInternetProtocolInfo * This, + LPCWSTR pwzUrl, + QUERYOPTION OueryOption, + DWORD dwQueryFlags, + LPVOID pBuffer, + DWORD cbBuffer, + DWORD *pcbBuf, + DWORD dwReserved); + + +void __stdcall IInternetProtocolInfo_QueryInfo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4352 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 4363 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern HRESULT __stdcall CoInternetParseUrl( + LPCWSTR pwzUrl, + PARSEACTION ParseAction, + DWORD dwFlags, + LPWSTR pszResult, + DWORD cchResult, + DWORD *pcchResult, + DWORD dwReserved + ); +extern HRESULT __stdcall CoInternetCombineUrl( + LPCWSTR pwzBaseUrl, + LPCWSTR pwzRelativeUrl, + DWORD dwCombineFlags, + LPWSTR pszResult, + DWORD cchResult, + DWORD *pcchResult, + DWORD dwReserved + ); +extern HRESULT __stdcall CoInternetCompareUrl( + LPCWSTR pwzUrl1, + LPCWSTR pwzUrl2, + DWORD dwFlags + ); +extern HRESULT __stdcall CoInternetGetProtocolFlags( + LPCWSTR pwzUrl, + DWORD *pdwFlags, + DWORD dwReserved + ); +extern HRESULT __stdcall CoInternetQueryInfo( + LPCWSTR pwzUrl, + QUERYOPTION QueryOptions, + DWORD dwQueryFlags, + LPVOID pvBuffer, + DWORD cbBuffer, + DWORD *pcbBuffer, + DWORD dwReserved + ); +extern HRESULT __stdcall CoInternetGetSession( + DWORD dwSessionMode, + IInternetSession **ppIInternetSession, + DWORD dwReserved + ); +extern HRESULT __stdcall CoInternetGetSecurityUrl( + LPCWSTR pwzUrl, + LPWSTR *ppwzSecUrl, + PSUACTION psuAction, + DWORD dwReserved + ); + +extern HRESULT __stdcall CopyStgMedium(const STGMEDIUM * pcstgmedSrc, + STGMEDIUM * pstgmedDest); +extern HRESULT __stdcall CopyBindInfo( const BINDINFO * pcbiSrc, + BINDINFO * pbiDest ); +extern void __stdcall ReleaseBindInfo( BINDINFO * pbindinfo ); + + + + + + + + + + + +#line 4457 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + +extern HRESULT __stdcall CoInternetCreateSecurityManager(IServiceProvider *pSP, IInternetSecurityManager **ppSM, DWORD dwReserved); + +extern HRESULT __stdcall CoInternetCreateZoneManager(IServiceProvider *pSP, IInternetZoneManager **ppZM, DWORD dwReserved); + + + +extern const IID CLSID_InternetSecurityManager; +extern const IID CLSID_InternetZoneManager; + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0131_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0131_v0_0_s_ifspec; + + + + + + + + + + + + + +extern const IID IID_IInternetSecurityMgrSite; + + + + + + + + + + + + + + + +#line 4513 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetSecurityMgrSiteVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetSecurityMgrSite * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetSecurityMgrSite * This); + + ULONG ( __stdcall *Release )( + IInternetSecurityMgrSite * This); + + HRESULT ( __stdcall *GetWindow )( + IInternetSecurityMgrSite * This, + HWND *phwnd); + + HRESULT ( __stdcall *EnableModeless )( + IInternetSecurityMgrSite * This, + BOOL fEnable); + + + } IInternetSecurityMgrSiteVtbl; + + struct IInternetSecurityMgrSite + { + struct IInternetSecurityMgrSiteVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4570 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetSecurityMgrSite_GetWindow_Proxy( + IInternetSecurityMgrSite * This, + HWND *phwnd); + + +void __stdcall IInternetSecurityMgrSite_GetWindow_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSecurityMgrSite_EnableModeless_Proxy( + IInternetSecurityMgrSite * This, + BOOL fEnable); + + +void __stdcall IInternetSecurityMgrSite_EnableModeless_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4599 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 4610 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0132_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0132_v0_0_s_ifspec; + + + + + + + + + + + + + + +typedef +enum __MIDL_IInternetSecurityManager_0001 + { PUAF_DEFAULT = 0, + PUAF_NOUI = 0x1, + PUAF_ISFILE = 0x2, + PUAF_WARN_IF_DENIED = 0x4, + PUAF_FORCEUI_FOREGROUND = 0x8, + PUAF_CHECK_TIFS = 0x10 + } PUAF; + + + + + + + +typedef +enum __MIDL_IInternetSecurityManager_0002 + { SZM_CREATE = 0, + SZM_DELETE = 0x1 + } SZM_FLAGS; + + + + + + + + + + + + + + + + +extern const IID IID_IInternetSecurityManager; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4724 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetSecurityManagerVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetSecurityManager * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetSecurityManager * This); + + ULONG ( __stdcall *Release )( + IInternetSecurityManager * This); + + HRESULT ( __stdcall *SetSecuritySite )( + IInternetSecurityManager * This, + IInternetSecurityMgrSite *pSite); + + HRESULT ( __stdcall *GetSecuritySite )( + IInternetSecurityManager * This, + IInternetSecurityMgrSite * *ppSite); + + HRESULT ( __stdcall *MapUrlToZone )( + IInternetSecurityManager * This, + LPCWSTR pwszUrl, + DWORD *pdwZone, + DWORD dwFlags); + + HRESULT ( __stdcall *GetSecurityId )( + IInternetSecurityManager * This, + LPCWSTR pwszUrl, + BYTE *pbSecurityId, + DWORD *pcbSecurityId, + DWORD dwReserved); + + HRESULT ( __stdcall *ProcessUrlAction )( + IInternetSecurityManager * This, + LPCWSTR pwszUrl, + DWORD dwAction, + BYTE *pPolicy, + DWORD cbPolicy, + BYTE *pContext, + DWORD cbContext, + DWORD dwFlags, + DWORD dwReserved); + + HRESULT ( __stdcall *QueryCustomPolicy )( + IInternetSecurityManager * This, + LPCWSTR pwszUrl, + const GUID * const guidKey, + BYTE * *ppPolicy, + DWORD *pcbPolicy, + BYTE *pContext, + DWORD cbContext, + DWORD dwReserved); + + HRESULT ( __stdcall *SetZoneMapping )( + IInternetSecurityManager * This, + DWORD dwZone, + LPCWSTR lpszPattern, + DWORD dwFlags); + + HRESULT ( __stdcall *GetZoneMappings )( + IInternetSecurityManager * This, + DWORD dwZone, + IEnumString * *ppenumString, + DWORD dwFlags); + + + } IInternetSecurityManagerVtbl; + + struct IInternetSecurityManager + { + struct IInternetSecurityManagerVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 4845 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetSecurityManager_SetSecuritySite_Proxy( + IInternetSecurityManager * This, + IInternetSecurityMgrSite *pSite); + + +void __stdcall IInternetSecurityManager_SetSecuritySite_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSecurityManager_GetSecuritySite_Proxy( + IInternetSecurityManager * This, + IInternetSecurityMgrSite * *ppSite); + + +void __stdcall IInternetSecurityManager_GetSecuritySite_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSecurityManager_MapUrlToZone_Proxy( + IInternetSecurityManager * This, + LPCWSTR pwszUrl, + DWORD *pdwZone, + DWORD dwFlags); + + +void __stdcall IInternetSecurityManager_MapUrlToZone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSecurityManager_GetSecurityId_Proxy( + IInternetSecurityManager * This, + LPCWSTR pwszUrl, + BYTE *pbSecurityId, + DWORD *pcbSecurityId, + DWORD dwReserved); + + +void __stdcall IInternetSecurityManager_GetSecurityId_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSecurityManager_ProcessUrlAction_Proxy( + IInternetSecurityManager * This, + LPCWSTR pwszUrl, + DWORD dwAction, + BYTE *pPolicy, + DWORD cbPolicy, + BYTE *pContext, + DWORD cbContext, + DWORD dwFlags, + DWORD dwReserved); + + +void __stdcall IInternetSecurityManager_ProcessUrlAction_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSecurityManager_QueryCustomPolicy_Proxy( + IInternetSecurityManager * This, + LPCWSTR pwszUrl, + const GUID * const guidKey, + BYTE * *ppPolicy, + DWORD *pcbPolicy, + BYTE *pContext, + DWORD cbContext, + DWORD dwReserved); + + +void __stdcall IInternetSecurityManager_QueryCustomPolicy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSecurityManager_SetZoneMapping_Proxy( + IInternetSecurityManager * This, + DWORD dwZone, + LPCWSTR lpszPattern, + DWORD dwFlags); + + +void __stdcall IInternetSecurityManager_SetZoneMapping_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetSecurityManager_GetZoneMappings_Proxy( + IInternetSecurityManager * This, + DWORD dwZone, + IEnumString * *ppenumString, + DWORD dwFlags); + + +void __stdcall IInternetSecurityManager_GetZoneMappings_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 4968 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 4979 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0133_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0133_v0_0_s_ifspec; + + + + + + + + + + + + + +extern const IID IID_IInternetHostSecurityManager; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5034 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetHostSecurityManagerVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetHostSecurityManager * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetHostSecurityManager * This); + + ULONG ( __stdcall *Release )( + IInternetHostSecurityManager * This); + + HRESULT ( __stdcall *GetSecurityId )( + IInternetHostSecurityManager * This, + BYTE *pbSecurityId, + DWORD *pcbSecurityId, + DWORD dwReserved); + + HRESULT ( __stdcall *ProcessUrlAction )( + IInternetHostSecurityManager * This, + DWORD dwAction, + BYTE *pPolicy, + DWORD cbPolicy, + BYTE *pContext, + DWORD cbContext, + DWORD dwFlags, + DWORD dwReserved); + + HRESULT ( __stdcall *QueryCustomPolicy )( + IInternetHostSecurityManager * This, + const GUID * const guidKey, + BYTE * *ppPolicy, + DWORD *pcbPolicy, + BYTE *pContext, + DWORD cbContext, + DWORD dwReserved); + + + } IInternetHostSecurityManagerVtbl; + + struct IInternetHostSecurityManager + { + struct IInternetHostSecurityManagerVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5111 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetHostSecurityManager_GetSecurityId_Proxy( + IInternetHostSecurityManager * This, + BYTE *pbSecurityId, + DWORD *pcbSecurityId, + DWORD dwReserved); + + +void __stdcall IInternetHostSecurityManager_GetSecurityId_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetHostSecurityManager_ProcessUrlAction_Proxy( + IInternetHostSecurityManager * This, + DWORD dwAction, + BYTE *pPolicy, + DWORD cbPolicy, + BYTE *pContext, + DWORD cbContext, + DWORD dwFlags, + DWORD dwReserved); + + +void __stdcall IInternetHostSecurityManager_ProcessUrlAction_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetHostSecurityManager_QueryCustomPolicy_Proxy( + IInternetHostSecurityManager * This, + const GUID * const guidKey, + BYTE * *ppPolicy, + DWORD *pcbPolicy, + BYTE *pContext, + DWORD cbContext, + DWORD dwReserved); + + +void __stdcall IInternetHostSecurityManager_QueryCustomPolicy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5165 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 5176 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0134_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0134_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IInternetZoneManager *LPURLZONEMANAGER; + +typedef +enum tagURLZONE + { URLZONE_PREDEFINED_MIN = 0, + URLZONE_LOCAL_MACHINE = 0, + URLZONE_INTRANET = URLZONE_LOCAL_MACHINE + 1, + URLZONE_TRUSTED = URLZONE_INTRANET + 1, + URLZONE_INTERNET = URLZONE_TRUSTED + 1, + URLZONE_UNTRUSTED = URLZONE_INTERNET + 1, + URLZONE_PREDEFINED_MAX = 999, + URLZONE_USER_MIN = 1000, + URLZONE_USER_MAX = 10000 + } URLZONE; + +typedef +enum tagURLTEMPLATE + { URLTEMPLATE_CUSTOM = 0, + URLTEMPLATE_PREDEFINED_MIN = 0x10000, + URLTEMPLATE_LOW = 0x10000, + URLTEMPLATE_MEDIUM = 0x11000, + URLTEMPLATE_HIGH = 0x12000, + URLTEMPLATE_PREDEFINED_MAX = 0x20000 + } URLTEMPLATE; + + +enum __MIDL_IInternetZoneManager_0001 + { MAX_ZONE_PATH = 260, + MAX_ZONE_DESCRIPTION = 200 + }; +typedef +enum __MIDL_IInternetZoneManager_0002 + { ZAFLAGS_CUSTOM_EDIT = 0x1, + ZAFLAGS_ADD_SITES = 0x2, + ZAFLAGS_REQUIRE_VERIFICATION = 0x4, + ZAFLAGS_INCLUDE_PROXY_OVERRIDE = 0x8, + ZAFLAGS_INCLUDE_INTRANET_SITES = 0x10, + ZAFLAGS_NO_UI = 0x20, + ZAFLAGS_SUPPORTS_VERIFICATION = 0x40, + ZAFLAGS_UNC_AS_INTRANET = 0x80 + } ZAFLAGS; + +typedef struct _ZONEATTRIBUTES + { + ULONG cbSize; + WCHAR szDisplayName[ 260 ]; + WCHAR szDescription[ 200 ]; + WCHAR szIconPath[ 260 ]; + DWORD dwTemplateMinLevel; + DWORD dwTemplateRecommended; + DWORD dwTemplateCurrentLevel; + DWORD dwFlags; + } ZONEATTRIBUTES; + +typedef struct _ZONEATTRIBUTES *LPZONEATTRIBUTES; + + + + + + + + + + + + + + + + + +typedef +enum _URLZONEREG + { URLZONEREG_DEFAULT = 0, + URLZONEREG_HKLM = URLZONEREG_DEFAULT + 1, + URLZONEREG_HKCU = URLZONEREG_HKLM + 1 + } URLZONEREG; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern const IID IID_IInternetZoneManager; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5513 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IInternetZoneManagerVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IInternetZoneManager * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IInternetZoneManager * This); + + ULONG ( __stdcall *Release )( + IInternetZoneManager * This); + + HRESULT ( __stdcall *GetZoneAttributes )( + IInternetZoneManager * This, + DWORD dwZone, + ZONEATTRIBUTES *pZoneAttributes); + + HRESULT ( __stdcall *SetZoneAttributes )( + IInternetZoneManager * This, + DWORD dwZone, + ZONEATTRIBUTES *pZoneAttributes); + + HRESULT ( __stdcall *GetZoneCustomPolicy )( + IInternetZoneManager * This, + DWORD dwZone, + const GUID * const guidKey, + BYTE * *ppPolicy, + DWORD *pcbPolicy, + URLZONEREG urlZoneReg); + + HRESULT ( __stdcall *SetZoneCustomPolicy )( + IInternetZoneManager * This, + DWORD dwZone, + const GUID * const guidKey, + BYTE *pPolicy, + DWORD cbPolicy, + URLZONEREG urlZoneReg); + + HRESULT ( __stdcall *GetZoneActionPolicy )( + IInternetZoneManager * This, + DWORD dwZone, + DWORD dwAction, + BYTE *pPolicy, + DWORD cbPolicy, + URLZONEREG urlZoneReg); + + HRESULT ( __stdcall *SetZoneActionPolicy )( + IInternetZoneManager * This, + DWORD dwZone, + DWORD dwAction, + BYTE *pPolicy, + DWORD cbPolicy, + URLZONEREG urlZoneReg); + + HRESULT ( __stdcall *PromptAction )( + IInternetZoneManager * This, + DWORD dwAction, + HWND hwndParent, + LPCWSTR pwszUrl, + LPCWSTR pwszText, + DWORD dwPromptFlags); + + HRESULT ( __stdcall *LogAction )( + IInternetZoneManager * This, + DWORD dwAction, + LPCWSTR pwszUrl, + LPCWSTR pwszText, + DWORD dwLogFlags); + + HRESULT ( __stdcall *CreateZoneEnumerator )( + IInternetZoneManager * This, + DWORD *pdwEnum, + DWORD *pdwCount, + DWORD dwFlags); + + HRESULT ( __stdcall *GetZoneAt )( + IInternetZoneManager * This, + DWORD dwEnum, + DWORD dwIndex, + DWORD *pdwZone); + + HRESULT ( __stdcall *DestroyZoneEnumerator )( + IInternetZoneManager * This, + DWORD dwEnum); + + HRESULT ( __stdcall *CopyTemplatePoliciesToZone )( + IInternetZoneManager * This, + DWORD dwTemplate, + DWORD dwZone, + DWORD dwReserved); + + + } IInternetZoneManagerVtbl; + + struct IInternetZoneManager + { + struct IInternetZoneManagerVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5671 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IInternetZoneManager_GetZoneAttributes_Proxy( + IInternetZoneManager * This, + DWORD dwZone, + ZONEATTRIBUTES *pZoneAttributes); + + +void __stdcall IInternetZoneManager_GetZoneAttributes_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetZoneManager_SetZoneAttributes_Proxy( + IInternetZoneManager * This, + DWORD dwZone, + ZONEATTRIBUTES *pZoneAttributes); + + +void __stdcall IInternetZoneManager_SetZoneAttributes_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetZoneManager_GetZoneCustomPolicy_Proxy( + IInternetZoneManager * This, + DWORD dwZone, + const GUID * const guidKey, + BYTE * *ppPolicy, + DWORD *pcbPolicy, + URLZONEREG urlZoneReg); + + +void __stdcall IInternetZoneManager_GetZoneCustomPolicy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetZoneManager_SetZoneCustomPolicy_Proxy( + IInternetZoneManager * This, + DWORD dwZone, + const GUID * const guidKey, + BYTE *pPolicy, + DWORD cbPolicy, + URLZONEREG urlZoneReg); + + +void __stdcall IInternetZoneManager_SetZoneCustomPolicy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetZoneManager_GetZoneActionPolicy_Proxy( + IInternetZoneManager * This, + DWORD dwZone, + DWORD dwAction, + BYTE *pPolicy, + DWORD cbPolicy, + URLZONEREG urlZoneReg); + + +void __stdcall IInternetZoneManager_GetZoneActionPolicy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetZoneManager_SetZoneActionPolicy_Proxy( + IInternetZoneManager * This, + DWORD dwZone, + DWORD dwAction, + BYTE *pPolicy, + DWORD cbPolicy, + URLZONEREG urlZoneReg); + + +void __stdcall IInternetZoneManager_SetZoneActionPolicy_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetZoneManager_PromptAction_Proxy( + IInternetZoneManager * This, + DWORD dwAction, + HWND hwndParent, + LPCWSTR pwszUrl, + LPCWSTR pwszText, + DWORD dwPromptFlags); + + +void __stdcall IInternetZoneManager_PromptAction_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetZoneManager_LogAction_Proxy( + IInternetZoneManager * This, + DWORD dwAction, + LPCWSTR pwszUrl, + LPCWSTR pwszText, + DWORD dwLogFlags); + + +void __stdcall IInternetZoneManager_LogAction_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetZoneManager_CreateZoneEnumerator_Proxy( + IInternetZoneManager * This, + DWORD *pdwEnum, + DWORD *pdwCount, + DWORD dwFlags); + + +void __stdcall IInternetZoneManager_CreateZoneEnumerator_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetZoneManager_GetZoneAt_Proxy( + IInternetZoneManager * This, + DWORD dwEnum, + DWORD dwIndex, + DWORD *pdwZone); + + +void __stdcall IInternetZoneManager_GetZoneAt_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetZoneManager_DestroyZoneEnumerator_Proxy( + IInternetZoneManager * This, + DWORD dwEnum); + + +void __stdcall IInternetZoneManager_DestroyZoneEnumerator_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IInternetZoneManager_CopyTemplatePoliciesToZone_Proxy( + IInternetZoneManager * This, + DWORD dwTemplate, + DWORD dwZone, + DWORD dwReserved); + + +void __stdcall IInternetZoneManager_CopyTemplatePoliciesToZone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 5851 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 5862 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" +extern const IID CLSID_SoftDistExt; + + + + + + + + + + + + + + +typedef struct _tagCODEBASEHOLD + { + ULONG cbSize; + LPWSTR szDistUnit; + LPWSTR szCodeBase; + DWORD dwVersionMS; + DWORD dwVersionLS; + DWORD dwStyle; + } CODEBASEHOLD; + +typedef struct _tagCODEBASEHOLD *LPCODEBASEHOLD; + +typedef struct _tagSOFTDISTINFO + { + ULONG cbSize; + DWORD dwFlags; + DWORD dwAdState; + LPWSTR szTitle; + LPWSTR szAbstract; + LPWSTR szHREF; + DWORD dwInstalledVersionMS; + DWORD dwInstalledVersionLS; + DWORD dwUpdateVersionMS; + DWORD dwUpdateVersionLS; + DWORD dwAdvertisedVersionMS; + DWORD dwAdvertisedVersionLS; + DWORD dwReserved; + } SOFTDISTINFO; + +typedef struct _tagSOFTDISTINFO *LPSOFTDISTINFO; + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0135_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0135_v0_0_s_ifspec; + + + + + + + + + + + + + +extern const IID IID_ISoftDistExt; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 5955 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct ISoftDistExtVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + ISoftDistExt * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + ISoftDistExt * This); + + ULONG ( __stdcall *Release )( + ISoftDistExt * This); + + HRESULT ( __stdcall *ProcessSoftDist )( + ISoftDistExt * This, + LPCWSTR szCDFURL, + IXMLElement *pSoftDistElement, + LPSOFTDISTINFO lpsdi); + + HRESULT ( __stdcall *GetFirstCodeBase )( + ISoftDistExt * This, + LPWSTR *szCodeBase, + LPDWORD dwMaxSize); + + HRESULT ( __stdcall *GetNextCodeBase )( + ISoftDistExt * This, + LPWSTR *szCodeBase, + LPDWORD dwMaxSize); + + HRESULT ( __stdcall *AsyncInstallDistributionUnit )( + ISoftDistExt * This, + IBindCtx *pbc, + LPVOID pvReserved, + DWORD flags, + LPCODEBASEHOLD lpcbh); + + + } ISoftDistExtVtbl; + + struct ISoftDistExt + { + struct ISoftDistExtVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6033 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall ISoftDistExt_ProcessSoftDist_Proxy( + ISoftDistExt * This, + LPCWSTR szCDFURL, + IXMLElement *pSoftDistElement, + LPSOFTDISTINFO lpsdi); + + +void __stdcall ISoftDistExt_ProcessSoftDist_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ISoftDistExt_GetFirstCodeBase_Proxy( + ISoftDistExt * This, + LPWSTR *szCodeBase, + LPDWORD dwMaxSize); + + +void __stdcall ISoftDistExt_GetFirstCodeBase_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ISoftDistExt_GetNextCodeBase_Proxy( + ISoftDistExt * This, + LPWSTR *szCodeBase, + LPDWORD dwMaxSize); + + +void __stdcall ISoftDistExt_GetNextCodeBase_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall ISoftDistExt_AsyncInstallDistributionUnit_Proxy( + ISoftDistExt * This, + IBindCtx *pbc, + LPVOID pvReserved, + DWORD flags, + LPCODEBASEHOLD lpcbh); + + +void __stdcall ISoftDistExt_AsyncInstallDistributionUnit_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 6093 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +extern HRESULT __stdcall GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi ); +extern HRESULT __stdcall SetSoftwareUpdateAdvertisementState( LPCWSTR szDistUnit, DWORD dwAdState, DWORD dwAdvertisedVersionMS, DWORD dwAdvertisedVersionLS ); +#line 6106 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0136_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0136_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IDataFilter *LPDATAFILTER; + + +extern const IID IID_IDataFilter; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6163 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IDataFilterVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IDataFilter * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IDataFilter * This); + + ULONG ( __stdcall *Release )( + IDataFilter * This); + + HRESULT ( __stdcall *DoEncode )( + IDataFilter * This, + DWORD dwFlags, + LONG lInBufferSize, + BYTE *pbInBuffer, + LONG lOutBufferSize, + BYTE *pbOutBuffer, + LONG lInBytesAvailable, + LONG *plInBytesRead, + LONG *plOutBytesWritten, + DWORD dwReserved); + + HRESULT ( __stdcall *DoDecode )( + IDataFilter * This, + DWORD dwFlags, + LONG lInBufferSize, + BYTE *pbInBuffer, + LONG lOutBufferSize, + BYTE *pbOutBuffer, + LONG lInBytesAvailable, + LONG *plInBytesRead, + LONG *plOutBytesWritten, + DWORD dwReserved); + + HRESULT ( __stdcall *SetEncodingLevel )( + IDataFilter * This, + DWORD dwEncLevel); + + + } IDataFilterVtbl; + + struct IDataFilter + { + struct IDataFilterVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6243 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IDataFilter_DoEncode_Proxy( + IDataFilter * This, + DWORD dwFlags, + LONG lInBufferSize, + BYTE *pbInBuffer, + LONG lOutBufferSize, + BYTE *pbOutBuffer, + LONG lInBytesAvailable, + LONG *plInBytesRead, + LONG *plOutBytesWritten, + DWORD dwReserved); + + +void __stdcall IDataFilter_DoEncode_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDataFilter_DoDecode_Proxy( + IDataFilter * This, + DWORD dwFlags, + LONG lInBufferSize, + BYTE *pbInBuffer, + LONG lOutBufferSize, + BYTE *pbOutBuffer, + LONG lInBytesAvailable, + LONG *plInBytesRead, + LONG *plOutBytesWritten, + DWORD dwReserved); + + +void __stdcall IDataFilter_DoDecode_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IDataFilter_SetEncodingLevel_Proxy( + IDataFilter * This, + DWORD dwEncLevel); + + +void __stdcall IDataFilter_SetEncodingLevel_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 6300 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 6311 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + +typedef struct _tagPROTOCOLFILTERDATA + { + DWORD cbSize; + IInternetProtocolSink *pProtocolSink; + IInternetProtocol *pProtocol; + IUnknown *pUnk; + DWORD dwFilterFlags; + } PROTOCOLFILTERDATA; + + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0137_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0137_v0_0_s_ifspec; + + + + + + + + + + + + +typedef IEncodingFilterFactory *LPENCODINGFILTERFACTORY; + +typedef struct _tagDATAINFO + { + ULONG ulTotalSize; + ULONG ulavrPacketSize; + ULONG ulConnectSpeed; + ULONG ulProcessorSpeed; + } DATAINFO; + + +extern const IID IID_IEncodingFilterFactory; + + + + + + + + + + + + + + + + + + + + +#line 6371 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + typedef struct IEncodingFilterFactoryVtbl + { + + + HRESULT ( __stdcall *QueryInterface )( + IEncodingFilterFactory * This, + const IID * const riid, + void * *ppvObject); + + ULONG ( __stdcall *AddRef )( + IEncodingFilterFactory * This); + + ULONG ( __stdcall *Release )( + IEncodingFilterFactory * This); + + HRESULT ( __stdcall *FindBestFilter )( + IEncodingFilterFactory * This, + LPCWSTR pwzCodeIn, + LPCWSTR pwzCodeOut, + DATAINFO info, + IDataFilter * *ppDF); + + HRESULT ( __stdcall *GetDefaultFilter )( + IEncodingFilterFactory * This, + LPCWSTR pwzCodeIn, + LPCWSTR pwzCodeOut, + IDataFilter * *ppDF); + + + } IEncodingFilterFactoryVtbl; + + struct IEncodingFilterFactory + { + struct IEncodingFilterFactoryVtbl *lpVtbl; + }; + + + + + + + + + + + + + + + + + + + + + + + + + +#line 6433 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +HRESULT __stdcall IEncodingFilterFactory_FindBestFilter_Proxy( + IEncodingFilterFactory * This, + LPCWSTR pwzCodeIn, + LPCWSTR pwzCodeOut, + DATAINFO info, + IDataFilter * *ppDF); + + +void __stdcall IEncodingFilterFactory_FindBestFilter_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT __stdcall IEncodingFilterFactory_GetDefaultFilter_Proxy( + IEncodingFilterFactory * This, + LPCWSTR pwzCodeIn, + LPCWSTR pwzCodeOut, + IDataFilter * *ppDF); + + +void __stdcall IEncodingFilterFactory_GetDefaultFilter_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#line 6467 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + + + + + + + + +#line 6478 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + + +BOOL __stdcall IsLoggingEnabledA( LPCTSTR pszUrl); +BOOL __stdcall IsLoggingEnalbedW( LPCWSTR pwszUrl); + + + + +#line 6488 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" +typedef struct _tagHIT_LOGGING_INFO + { + DWORD dwStructSize; + LPSTR lpszLoggedUrlName; + SYSTEMTIME StartTime; + SYSTEMTIME EndTime; + LPSTR lpszExtendedInfo; + } HIT_LOGGING_INFO; + +typedef struct _tagHIT_LOGGING_INFO *LPHIT_LOGGING_INFO; + +BOOL __stdcall WriteHitLogging( LPHIT_LOGGING_INFO lpLogginginfo); +#line 6501 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" + + +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0138_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_urlmon_0138_v0_0_s_ifspec; + + + + HRESULT __stdcall IBinding_GetBindResult_Proxy( + IBinding * This, + CLSID *pclsidProtocol, + DWORD *pdwResult, + LPOLESTR *pszResult, + DWORD *pdwReserved); + + + HRESULT __stdcall IBinding_GetBindResult_Stub( + IBinding * This, + CLSID *pclsidProtocol, + DWORD *pdwResult, + LPOLESTR *pszResult, + DWORD dwReserved); + + HRESULT __stdcall IBindStatusCallback_GetBindInfo_Proxy( + IBindStatusCallback * This, + DWORD *grfBINDF, + BINDINFO *pbindinfo); + + + HRESULT __stdcall IBindStatusCallback_GetBindInfo_Stub( + IBindStatusCallback * This, + DWORD *grfBINDF, + RemBINDINFO *pbindinfo, + RemSTGMEDIUM *pstgmed); + + HRESULT __stdcall IBindStatusCallback_OnDataAvailable_Proxy( + IBindStatusCallback * This, + DWORD grfBSCF, + DWORD dwSize, + FORMATETC *pformatetc, + STGMEDIUM *pstgmed); + + + HRESULT __stdcall IBindStatusCallback_OnDataAvailable_Stub( + IBindStatusCallback * This, + DWORD grfBSCF, + DWORD dwSize, + RemFORMATETC *pformatetc, + RemSTGMEDIUM *pstgmed); + + HRESULT __stdcall IWinInetInfo_QueryOption_Proxy( + IWinInetInfo * This, + DWORD dwOption, + LPVOID pBuffer, + DWORD *pcbBuf); + + + HRESULT __stdcall IWinInetInfo_QueryOption_Stub( + IWinInetInfo * This, + DWORD dwOption, + BYTE *pBuffer, + DWORD *pcbBuf); + + HRESULT __stdcall IWinInetHttpInfo_QueryInfo_Proxy( + IWinInetHttpInfo * This, + DWORD dwOption, + LPVOID pBuffer, + DWORD *pcbBuf, + DWORD *pdwFlags, + DWORD *pdwReserved); + + + HRESULT __stdcall IWinInetHttpInfo_QueryInfo_Stub( + IWinInetHttpInfo * This, + DWORD dwOption, + BYTE *pBuffer, + DWORD *pcbBuf, + DWORD *pdwFlags, + DWORD *pdwReserved); + + HRESULT __stdcall IBindHost_MonikerBindToStorage_Proxy( + IBindHost * This, + IMoniker *pMk, + IBindCtx *pBC, + IBindStatusCallback *pBSC, + const IID * const riid, + void * *ppvObj); + + + HRESULT __stdcall IBindHost_MonikerBindToStorage_Stub( + IBindHost * This, + IMoniker *pMk, + IBindCtx *pBC, + IBindStatusCallback *pBSC, + const IID * const riid, + IUnknown * *ppvObj); + + HRESULT __stdcall IBindHost_MonikerBindToObject_Proxy( + IBindHost * This, + IMoniker *pMk, + IBindCtx *pBC, + IBindStatusCallback *pBSC, + const IID * const riid, + void * *ppvObj); + + + HRESULT __stdcall IBindHost_MonikerBindToObject_Stub( + IBindHost * This, + IMoniker *pMk, + IBindCtx *pBC, + IBindStatusCallback *pBSC, + const IID * const riid, + IUnknown * *ppvObj); + + + + + + + + + +#line 6623 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\urlmon.h" +#line 897 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + + + + +extern __declspec(dllimport) HRESULT __stdcall CreateStdProgressIndicator(HWND hwndParent, + LPCOLESTR pszTitle, + IBindStatusCallback * pIbscCaller, + IBindStatusCallback ** ppIbsc); + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 908 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" +#line 909 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" + +#line 911 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\objbase.h" +#line 42 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(push) +#line 28 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#pragma pack(8) + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\pshpack8.h" +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" +#line 19 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" + + + + + + + + + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" + +extern const IID IID_StdOle; + + + + + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oaidl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 54 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" + + + + + + +extern __declspec(dllimport) BSTR __stdcall SysAllocString(const OLECHAR *); +extern __declspec(dllimport) INT __stdcall SysReAllocString(BSTR *, const OLECHAR *); +extern __declspec(dllimport) BSTR __stdcall SysAllocStringLen(const OLECHAR *, UINT); +extern __declspec(dllimport) INT __stdcall SysReAllocStringLen(BSTR *, const OLECHAR *, UINT); +extern __declspec(dllimport) void __stdcall SysFreeString(BSTR); +extern __declspec(dllimport) UINT __stdcall SysStringLen(BSTR); + + +extern __declspec(dllimport) UINT __stdcall SysStringByteLen(BSTR bstr); +extern __declspec(dllimport) BSTR __stdcall SysAllocStringByteLen(LPCSTR psz, UINT len); +#line 71 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" + + + + + +extern __declspec(dllimport) INT __stdcall DosDateTimeToVariantTime(USHORT wDosDate, USHORT wDosTime, DOUBLE * pvtime); + +extern __declspec(dllimport) INT __stdcall VariantTimeToDosDateTime(DOUBLE vtime, USHORT * pwDosDate, USHORT * pwDosTime); + + +extern __declspec(dllimport) INT __stdcall SystemTimeToVariantTime(LPSYSTEMTIME lpSystemTime, DOUBLE *pvtime); +extern __declspec(dllimport) INT __stdcall VariantTimeToSystemTime(DOUBLE vtime, LPSYSTEMTIME lpSystemTime); +#line 84 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" + + + + + + +extern __declspec(dllimport) HRESULT __stdcall SafeArrayAllocDescriptor(UINT cDims, SAFEARRAY ** ppsaOut); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayAllocDescriptorEx(VARTYPE vt, UINT cDims, SAFEARRAY ** ppsaOut); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayAllocData(SAFEARRAY * psa); +extern __declspec(dllimport) SAFEARRAY * __stdcall SafeArrayCreate(VARTYPE vt, UINT cDims, SAFEARRAYBOUND * rgsabound); +extern __declspec(dllimport) SAFEARRAY * __stdcall SafeArrayCreateEx(VARTYPE vt, UINT cDims, SAFEARRAYBOUND * rgsabound, PVOID pvExtra); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayCopyData(SAFEARRAY *psaSource, SAFEARRAY *psaTarget); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayDestroyDescriptor(SAFEARRAY * psa); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayDestroyData(SAFEARRAY * psa); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayDestroy(SAFEARRAY * psa); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayRedim(SAFEARRAY * psa, SAFEARRAYBOUND * psaboundNew); +extern __declspec(dllimport) UINT __stdcall SafeArrayGetDim(SAFEARRAY * psa); +extern __declspec(dllimport) UINT __stdcall SafeArrayGetElemsize(SAFEARRAY * psa); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayGetUBound(SAFEARRAY * psa, UINT nDim, LONG * plUbound); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayGetLBound(SAFEARRAY * psa, UINT nDim, LONG * plLbound); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayLock(SAFEARRAY * psa); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayUnlock(SAFEARRAY * psa); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayAccessData(SAFEARRAY * psa, void ** ppvData); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayUnaccessData(SAFEARRAY * psa); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayGetElement(SAFEARRAY * psa, LONG * rgIndices, void * pv); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayPutElement(SAFEARRAY * psa, LONG * rgIndices, void * pv); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayCopy(SAFEARRAY * psa, SAFEARRAY ** ppsaOut); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayPtrOfIndex(SAFEARRAY * psa, LONG * rgIndices, void ** ppvData); +extern __declspec(dllimport) HRESULT __stdcall SafeArraySetRecordInfo(SAFEARRAY * psa, IRecordInfo * prinfo); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayGetRecordInfo(SAFEARRAY * psa, IRecordInfo ** prinfo); +extern __declspec(dllimport) HRESULT __stdcall SafeArraySetIID(SAFEARRAY * psa, const GUID * const guid); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayGetIID(SAFEARRAY * psa, GUID * pguid); +extern __declspec(dllimport) HRESULT __stdcall SafeArrayGetVartype(SAFEARRAY * psa, VARTYPE * pvt); +extern __declspec(dllimport) SAFEARRAY * __stdcall SafeArrayCreateVector(VARTYPE vt, LONG lLbound, ULONG cElements); +extern __declspec(dllimport) SAFEARRAY * __stdcall SafeArrayCreateVectorEx(VARTYPE vt, LONG lLbound, ULONG cElements, PVOID pvExtra); + + + + + +extern __declspec(dllimport) void __stdcall VariantInit(VARIANTARG * pvarg); +extern __declspec(dllimport) HRESULT __stdcall VariantClear(VARIANTARG * pvarg); +extern __declspec(dllimport) HRESULT __stdcall VariantCopy(VARIANTARG * pvargDest, VARIANTARG * pvargSrc); +extern __declspec(dllimport) HRESULT __stdcall VariantCopyInd(VARIANT * pvarDest, VARIANTARG * pvargSrc); +extern __declspec(dllimport) HRESULT __stdcall VariantChangeType(VARIANTARG * pvargDest, + VARIANTARG * pvarSrc, USHORT wFlags, VARTYPE vt); +extern __declspec(dllimport) HRESULT __stdcall VariantChangeTypeEx(VARIANTARG * pvargDest, + VARIANTARG * pvarSrc, LCID lcid, USHORT wFlags, VARTYPE vt); + + + + + + + + + + + + + + + + + +extern __declspec(dllimport) HRESULT __stdcall VectorFromBstr (BSTR bstr, SAFEARRAY ** ppsa); +extern __declspec(dllimport) HRESULT __stdcall BstrFromVector (SAFEARRAY *psa, BSTR *pbstr); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromI2(SHORT sIn, BYTE * pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromI4(LONG lIn, BYTE * pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromR4(FLOAT fltIn, BYTE * pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromR8(DOUBLE dblIn, BYTE * pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromCy(CY cyIn, BYTE * pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromDate(DATE dateIn, BYTE * pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromStr(OLECHAR * strIn, LCID lcid, ULONG dwFlags, BYTE * pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromDisp(IDispatch * pdispIn, LCID lcid, BYTE * pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromBool(VARIANT_BOOL boolIn, BYTE * pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromI1(CHAR cIn, BYTE *pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromUI2(USHORT uiIn, BYTE *pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromUI4(ULONG ulIn, BYTE *pbOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI1FromDec(DECIMAL *pdecIn, BYTE *pbOut); + +extern __declspec(dllimport) HRESULT __stdcall VarI2FromUI1(BYTE bIn, SHORT * psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromI4(LONG lIn, SHORT * psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromR4(FLOAT fltIn, SHORT * psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromR8(DOUBLE dblIn, SHORT * psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromCy(CY cyIn, SHORT * psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromDate(DATE dateIn, SHORT * psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromStr(OLECHAR * strIn, LCID lcid, ULONG dwFlags, SHORT * psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromDisp(IDispatch * pdispIn, LCID lcid, SHORT * psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromBool(VARIANT_BOOL boolIn, SHORT * psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromI1(CHAR cIn, SHORT *psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromUI2(USHORT uiIn, SHORT *psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromUI4(ULONG ulIn, SHORT *psOut); +extern __declspec(dllimport) HRESULT __stdcall VarI2FromDec(DECIMAL *pdecIn, SHORT *psOut); + +extern __declspec(dllimport) HRESULT __stdcall VarI4FromUI1(BYTE bIn, LONG * plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromI2(SHORT sIn, LONG * plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromR4(FLOAT fltIn, LONG * plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromR8(DOUBLE dblIn, LONG * plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromCy(CY cyIn, LONG * plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromDate(DATE dateIn, LONG * plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromStr(OLECHAR * strIn, LCID lcid, ULONG dwFlags, LONG * plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromDisp(IDispatch * pdispIn, LCID lcid, LONG * plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromBool(VARIANT_BOOL boolIn, LONG * plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromI1(CHAR cIn, LONG *plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromUI2(USHORT uiIn, LONG *plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromUI4(ULONG ulIn, LONG *plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromDec(DECIMAL *pdecIn, LONG *plOut); +extern __declspec(dllimport) HRESULT __stdcall VarI4FromInt(INT intIn, LONG *plOut); + +extern __declspec(dllimport) HRESULT __stdcall VarR4FromUI1(BYTE bIn, FLOAT * pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromI2(SHORT sIn, FLOAT * pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromI4(LONG lIn, FLOAT * pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromR8(DOUBLE dblIn, FLOAT * pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromCy(CY cyIn, FLOAT * pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromDate(DATE dateIn, FLOAT * pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromStr(OLECHAR * strIn, LCID lcid, ULONG dwFlags, FLOAT *pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromDisp(IDispatch * pdispIn, LCID lcid, FLOAT * pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromBool(VARIANT_BOOL boolIn, FLOAT * pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromI1(CHAR cIn, FLOAT *pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromUI2(USHORT uiIn, FLOAT *pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromUI4(ULONG ulIn, FLOAT *pfltOut); +extern __declspec(dllimport) HRESULT __stdcall VarR4FromDec(DECIMAL *pdecIn, FLOAT *pfltOut); + +extern __declspec(dllimport) HRESULT __stdcall VarR8FromUI1(BYTE bIn, DOUBLE * pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromI2(SHORT sIn, DOUBLE * pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromI4(LONG lIn, DOUBLE * pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromR4(FLOAT fltIn, DOUBLE * pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromCy(CY cyIn, DOUBLE * pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromDate(DATE dateIn, DOUBLE * pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, DOUBLE *pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromDisp(IDispatch * pdispIn, LCID lcid, DOUBLE * pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromBool(VARIANT_BOOL boolIn, DOUBLE * pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromI1(CHAR cIn, DOUBLE *pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromUI2(USHORT uiIn, DOUBLE *pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromUI4(ULONG ulIn, DOUBLE *pdblOut); +extern __declspec(dllimport) HRESULT __stdcall VarR8FromDec(DECIMAL *pdecIn, DOUBLE *pdblOut); + +extern __declspec(dllimport) HRESULT __stdcall VarDateFromUI1(BYTE bIn, DATE * pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromI2(SHORT sIn, DATE * pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromI4(LONG lIn, DATE * pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromR4(FLOAT fltIn, DATE * pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromR8(DOUBLE dblIn, DATE * pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromCy(CY cyIn, DATE * pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, DATE *pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromDisp(IDispatch * pdispIn, LCID lcid, DATE * pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromBool(VARIANT_BOOL boolIn, DATE * pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromI1(CHAR cIn, DATE *pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromUI2(USHORT uiIn, DATE *pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromUI4(ULONG ulIn, DATE *pdateOut); +extern __declspec(dllimport) HRESULT __stdcall VarDateFromDec(DECIMAL *pdecIn, DATE *pdateOut); + +extern __declspec(dllimport) HRESULT __stdcall VarCyFromUI1(BYTE bIn, CY * pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromI2(SHORT sIn, CY * pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromI4(LONG lIn, CY * pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromR4(FLOAT fltIn, CY * pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromR8(DOUBLE dblIn, CY * pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromDate(DATE dateIn, CY * pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromStr(OLECHAR * strIn, LCID lcid, ULONG dwFlags, CY * pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromDisp(IDispatch * pdispIn, LCID lcid, CY * pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromBool(VARIANT_BOOL boolIn, CY * pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromI1(CHAR cIn, CY *pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromUI2(USHORT uiIn, CY *pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromUI4(ULONG ulIn, CY *pcyOut); +extern __declspec(dllimport) HRESULT __stdcall VarCyFromDec(DECIMAL *pdecIn, CY *pcyOut); + +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromUI1(BYTE bVal, LCID lcid, ULONG dwFlags, BSTR * pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromI2(SHORT iVal, LCID lcid, ULONG dwFlags, BSTR * pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromI4(LONG lIn, LCID lcid, ULONG dwFlags, BSTR * pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromR4(FLOAT fltIn, LCID lcid, ULONG dwFlags, BSTR * pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromR8(DOUBLE dblIn, LCID lcid, ULONG dwFlags, BSTR * pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromCy(CY cyIn, LCID lcid, ULONG dwFlags, BSTR * pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromDate(DATE dateIn, LCID lcid, ULONG dwFlags, BSTR * pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromDisp(IDispatch * pdispIn, LCID lcid, ULONG dwFlags, BSTR * pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromBool(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, BSTR * pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromI1(CHAR cIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromUI2(USHORT uiIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromUI4(ULONG ulIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarBstrFromDec(DECIMAL *pdecIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut); + +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromUI1(BYTE bIn, VARIANT_BOOL * pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromI2(SHORT sIn, VARIANT_BOOL * pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromI4(LONG lIn, VARIANT_BOOL * pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromR4(FLOAT fltIn, VARIANT_BOOL * pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromR8(DOUBLE dblIn, VARIANT_BOOL * pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromDate(DATE dateIn, VARIANT_BOOL * pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromCy(CY cyIn, VARIANT_BOOL * pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromStr(OLECHAR * strIn, LCID lcid, ULONG dwFlags, VARIANT_BOOL * pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromDisp(IDispatch * pdispIn, LCID lcid, VARIANT_BOOL * pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromI1(CHAR cIn, VARIANT_BOOL *pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromUI2(USHORT uiIn, VARIANT_BOOL *pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromUI4(ULONG ulIn, VARIANT_BOOL *pboolOut); +extern __declspec(dllimport) HRESULT __stdcall VarBoolFromDec(DECIMAL *pdecIn, VARIANT_BOOL *pboolOut); + +extern __declspec(dllimport) HRESULT __stdcall VarI1FromUI1(BYTE bIn, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromI2(SHORT uiIn, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromI4(LONG lIn, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromR4(FLOAT fltIn, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromR8(DOUBLE dblIn, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromDate(DATE dateIn, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromCy(CY cyIn, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromDisp(IDispatch *pdispIn, LCID lcid, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromBool(VARIANT_BOOL boolIn, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromUI2(USHORT uiIn, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromUI4(ULONG ulIn, CHAR *pcOut); +extern __declspec(dllimport) HRESULT __stdcall VarI1FromDec(DECIMAL *pdecIn, CHAR *pcOut); + +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromUI1(BYTE bIn, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromI2(SHORT uiIn, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromI4(LONG lIn, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromR4(FLOAT fltIn, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromR8(DOUBLE dblIn, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromDate(DATE dateIn, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromCy(CY cyIn, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromDisp(IDispatch *pdispIn, LCID lcid, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromBool(VARIANT_BOOL boolIn, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromI1(CHAR cIn, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromUI4(ULONG ulIn, USHORT *puiOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI2FromDec(DECIMAL *pdecIn, USHORT *puiOut); + +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromUI1(BYTE bIn, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromI2(SHORT uiIn, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromI4(LONG lIn, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromR4(FLOAT fltIn, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromR8(DOUBLE dblIn, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromDate(DATE dateIn, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromCy(CY cyIn, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromDisp(IDispatch *pdispIn, LCID lcid, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromBool(VARIANT_BOOL boolIn, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromI1(CHAR cIn, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromUI2(USHORT uiIn, ULONG *pulOut); +extern __declspec(dllimport) HRESULT __stdcall VarUI4FromDec(DECIMAL *pdecIn, ULONG *pulOut); + +extern __declspec(dllimport) HRESULT __stdcall VarDecFromUI1(BYTE bIn, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromI2(SHORT uiIn, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromI4(LONG lIn, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromR4(FLOAT fltIn, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromR8(DOUBLE dblIn, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromDate(DATE dateIn, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromCy(CY cyIn, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromDisp(IDispatch *pdispIn, LCID lcid, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromBool(VARIANT_BOOL boolIn, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromI1(CHAR cIn, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromUI2(USHORT uiIn, DECIMAL *pdecOut); +extern __declspec(dllimport) HRESULT __stdcall VarDecFromUI4(ULONG ulIn, DECIMAL *pdecOut); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct { + INT cDig; + ULONG dwInFlags; + ULONG dwOutFlags; + INT cchUsed; + INT nBaseShift; + INT nPwr10; +} NUMPARSE; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern __declspec(dllimport) HRESULT __stdcall VarParseNumFromStr(OLECHAR * strIn, LCID lcid, ULONG dwFlags, + NUMPARSE * pnumprs, BYTE * rgbDig); + +extern __declspec(dllimport) HRESULT __stdcall VarNumFromParseNum(NUMPARSE * pnumprs, BYTE * rgbDig, + ULONG dwVtBits, VARIANT * pvar); + + + + + +extern HRESULT __stdcall VarAdd(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarAnd(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarCat(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarDiv(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarEqv(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarIdiv(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarImp(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarMod(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarMul(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarOr(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarPow(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarSub(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); +extern HRESULT __stdcall VarXor(LPVARIANT pvarLeft, LPVARIANT pvarRight, LPVARIANT pvarResult); + +extern HRESULT __stdcall VarAbs(LPVARIANT pvarIn, LPVARIANT pvarResult); +extern HRESULT __stdcall VarFix(LPVARIANT pvarIn, LPVARIANT pvarResult); +extern HRESULT __stdcall VarInt(LPVARIANT pvarIn, LPVARIANT pvarResult); +extern HRESULT __stdcall VarNeg(LPVARIANT pvarIn, LPVARIANT pvarResult); +extern HRESULT __stdcall VarNot(LPVARIANT pvarIn, LPVARIANT pvarResult); + +extern HRESULT __stdcall VarRound(LPVARIANT pvarIn, int cDecimals, LPVARIANT pvarResult); + +extern HRESULT __stdcall VarCmp(LPVARIANT pvarLeft, LPVARIANT pvarRight, LCID lcid); + + + + +extern HRESULT __stdcall VarDecAdd(LPDECIMAL pdecLeft, LPDECIMAL pdecRight, LPDECIMAL pdecResult); +extern HRESULT __stdcall VarDecDiv(LPDECIMAL pdecLeft, LPDECIMAL pdecRight, LPDECIMAL pdecResult); +extern HRESULT __stdcall VarDecMul(LPDECIMAL pdecLeft, LPDECIMAL pdecRight, LPDECIMAL pdecResult); +extern HRESULT __stdcall VarDecSub(LPDECIMAL pdecLeft, LPDECIMAL pdecRight, LPDECIMAL pdecResult); + +extern HRESULT __stdcall VarDecAbs(LPDECIMAL pdecIn, LPDECIMAL pdecResult); +extern HRESULT __stdcall VarDecFix(LPDECIMAL pdecIn, LPDECIMAL pdecResult); +extern HRESULT __stdcall VarDecInt(LPDECIMAL pdecIn, LPDECIMAL pdecResult); +extern HRESULT __stdcall VarDecNeg(LPDECIMAL pdecIn, LPDECIMAL pdecResult); + +extern HRESULT __stdcall VarDecRound(LPDECIMAL pdecIn, int cDecimals, LPDECIMAL pdecResult); + +extern HRESULT __stdcall VarDecCmp(LPDECIMAL pdecLeft, LPDECIMAL pdecRight); +extern HRESULT __stdcall VarDecCmpR8(LPDECIMAL pdecLeft, double dblRight); + + + + +extern HRESULT __stdcall VarCyAdd(CY cyLeft, CY cyRight, LPCY pcyResult); +extern HRESULT __stdcall VarCyMul(CY cyLeft, CY cyRight, LPCY pcyResult); +extern HRESULT __stdcall VarCyMulI4(CY cyLeft, long lRight, LPCY pcyResult); +extern HRESULT __stdcall VarCySub(CY cyLeft, CY cyRight, LPCY pcyResult); + +extern HRESULT __stdcall VarCyAbs(CY cyIn, LPCY pcyResult); +extern HRESULT __stdcall VarCyFix(CY cyIn, LPCY pcyResult); +extern HRESULT __stdcall VarCyInt(CY cyIn, LPCY pcyResult); +extern HRESULT __stdcall VarCyNeg(CY cyIn, LPCY pcyResult); + +extern HRESULT __stdcall VarCyRound(CY cyIn, int cDecimals, LPCY pcyResult); + +extern HRESULT __stdcall VarCyCmp(CY cyLeft, CY cyRight); +extern HRESULT __stdcall VarCyCmpR8(CY cyLeft, double dblRight); + + + + +extern HRESULT __stdcall VarBstrCat(BSTR bstrLeft, BSTR bstrRight, LPBSTR pbstrResult); +extern HRESULT __stdcall VarBstrCmp(BSTR bstrLeft, BSTR bstrRight, LCID lcid); +extern HRESULT __stdcall VarR8Pow(double dblLeft, double dblRight, double *pdblResult); +extern HRESULT __stdcall VarR4CmpR8(float fltLeft, double dblRight); +extern HRESULT __stdcall VarR8Round(double dblIn, int cDecimals, double *pdblResult); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct { + SYSTEMTIME st; + USHORT wDayOfYear; +} UDATE; + + + +extern __declspec(dllimport) HRESULT __stdcall VarDateFromUdate(UDATE *pudateIn, ULONG dwFlags, DATE *pdateOut); + +extern __declspec(dllimport) HRESULT __stdcall VarUdateFromDate(DATE dateIn, ULONG dwFlags, UDATE *pudateOut); + + + + +extern __declspec(dllimport) HRESULT __stdcall GetAltMonthNames(LCID lcid, LPOLESTR * * prgp); + + + + + + + + + + + + + +extern __declspec(dllimport) HRESULT __stdcall VarFormat(LPVARIANT pvarIn, LPOLESTR pstrFormat, int iFirstDay, int iFirstWeek, ULONG dwFlags, BSTR *pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarFormatDateTime(LPVARIANT pvarIn, int iNamedFormat, ULONG dwFlags, BSTR *pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarFormatNumber(LPVARIANT pvarIn, int iNumDig, int iIncLead, int iUseParens, int iGroup, ULONG dwFlags, BSTR *pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarFormatPercent(LPVARIANT pvarIn, int iNumDig, int iIncLead, int iUseParens, int iGroup, ULONG dwFlags, BSTR *pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarFormatCurrency(LPVARIANT pvarIn, int iNumDig, int iIncLead, int iUseParens, int iGroup, ULONG dwFlags, BSTR *pbstrOut); + +extern __declspec(dllimport) HRESULT __stdcall VarWeekdayName(int iWeekday, int fAbbrev, int iFirstDay, ULONG dwFlags, BSTR *pbstrOut); +extern __declspec(dllimport) HRESULT __stdcall VarMonthName(int iMonth, int fAbbrev, ULONG dwFlags, BSTR *pbstrOut); + +extern __declspec(dllimport) HRESULT __stdcall VarFormatFromTokens(LPVARIANT pvarIn, LPOLESTR pstrFormat, LPBYTE pbTokCur, ULONG dwFlags, BSTR *pbstrOut, LCID lcid); +extern __declspec(dllimport) LPBYTE __stdcall VarTokenizeFormatString(LPOLESTR pstrFormat, LPBYTE rgbTok, int cbTok, int iFirstDay, int iFirstWeek, LCID lcid); + + + + + + +typedef ITypeLib * LPTYPELIB; + + + + + + + +typedef LONG DISPID; +typedef DISPID MEMBERID; + + + + + + + + + + + +typedef ITypeInfo * LPTYPEINFO; + + + + + + +typedef ITypeComp * LPTYPECOMP; + + + + + + +typedef ICreateTypeLib * LPCREATETYPELIB; + +typedef ICreateTypeInfo * LPCREATETYPEINFO; + + + + + + + + +extern __declspec(dllimport) ULONG __stdcall LHashValOfNameSysA(SYSKIND syskind, LCID lcid, + LPCSTR szName); +#line 681 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" + +extern __declspec(dllimport) ULONG __stdcall +LHashValOfNameSys(SYSKIND syskind, LCID lcid, const OLECHAR * szName); + + + + + + + + + + + + +extern __declspec(dllimport) HRESULT __stdcall LoadTypeLib(const OLECHAR *szFile, ITypeLib ** pptlib); + + + +typedef enum tagREGKIND +{ + REGKIND_DEFAULT, + REGKIND_REGISTER, + REGKIND_NONE +} REGKIND; + +extern __declspec(dllimport) HRESULT __stdcall LoadTypeLibEx(LPCOLESTR szFile, REGKIND regkind, + ITypeLib ** pptlib); + + + +extern __declspec(dllimport) HRESULT __stdcall LoadRegTypeLib(const GUID * const rguid, WORD wVerMajor, WORD wVerMinor, + LCID lcid, ITypeLib ** pptlib); + + + +extern __declspec(dllimport) HRESULT __stdcall QueryPathOfRegTypeLib(const GUID * const guid, USHORT wMaj, USHORT wMin, + LCID lcid, LPBSTR lpbstrPathName); + + + +extern __declspec(dllimport) HRESULT __stdcall RegisterTypeLib(ITypeLib * ptlib, OLECHAR *szFullPath, + OLECHAR *szHelpDir); + + + + +extern __declspec(dllimport) HRESULT __stdcall UnRegisterTypeLib(const GUID * const libID, WORD wVerMajor, + WORD wVerMinor, LCID lcid, SYSKIND syskind); + +extern __declspec(dllimport) HRESULT __stdcall CreateTypeLib(SYSKIND syskind, const OLECHAR *szFile, + ICreateTypeLib ** ppctlib); + +extern __declspec(dllimport) HRESULT __stdcall CreateTypeLib2(SYSKIND syskind, LPCOLESTR szFile, + ICreateTypeLib2 **ppctlib); + + + + + + +typedef IDispatch * LPDISPATCH; + +typedef struct tagPARAMDATA { + OLECHAR * szName; + VARTYPE vt; +} PARAMDATA, * LPPARAMDATA; + +typedef struct tagMETHODDATA { + OLECHAR * szName; + PARAMDATA * ppdata; + DISPID dispid; + UINT iMeth; + CALLCONV cc; + UINT cArgs; + WORD wFlags; + VARTYPE vtReturn; +} METHODDATA, * LPMETHODDATA; + +typedef struct tagINTERFACEDATA { + METHODDATA * pmethdata; + UINT cMembers; +} INTERFACEDATA, * LPINTERFACEDATA; + + + + + + +extern __declspec(dllimport) HRESULT __stdcall DispGetParam(DISPPARAMS * pdispparams, UINT position, + VARTYPE vtTarg, VARIANT * pvarResult, UINT * puArgErr); + + + +extern __declspec(dllimport) HRESULT __stdcall DispGetIDsOfNames(ITypeInfo * ptinfo, OLECHAR ** rgszNames, + UINT cNames, DISPID * rgdispid); + + + +extern __declspec(dllimport) HRESULT __stdcall DispInvoke(void * _this, ITypeInfo * ptinfo, DISPID dispidMember, + WORD wFlags, DISPPARAMS * pparams, VARIANT * pvarResult, + EXCEPINFO * pexcepinfo, UINT * puArgErr); + + + +extern __declspec(dllimport) HRESULT __stdcall CreateDispTypeInfo(INTERFACEDATA * pidata, LCID lcid, + ITypeInfo ** pptinfo); + + + + +extern __declspec(dllimport) HRESULT __stdcall CreateStdDispatch(IUnknown * punkOuter, void * pvThis, + ITypeInfo * ptinfo, IUnknown ** ppunkStdDisp); + + + + +extern __declspec(dllimport) HRESULT __stdcall DispCallFunc(void * pvInstance, ULONG oVft, CALLCONV cc, + VARTYPE vtReturn, UINT cActuals, VARTYPE * prgvt, + VARIANTARG ** prgpvarg, VARIANT * pvargResult); + + + + + + + + + + +extern __declspec(dllimport) HRESULT __stdcall RegisterActiveObject(IUnknown * punk, const CLSID * const rclsid, + DWORD dwFlags, DWORD * pdwRegister); + +extern __declspec(dllimport) HRESULT __stdcall RevokeActiveObject(DWORD dwRegister, void * pvReserved); + +extern __declspec(dllimport) HRESULT __stdcall GetActiveObject(const CLSID * const rclsid, void * pvReserved, + IUnknown ** ppunk); + + + + + +extern __declspec(dllimport) HRESULT __stdcall SetErrorInfo(ULONG dwReserved, IErrorInfo * perrinfo); +extern __declspec(dllimport) HRESULT __stdcall GetErrorInfo(ULONG dwReserved, IErrorInfo ** pperrinfo); +extern __declspec(dllimport) HRESULT __stdcall CreateErrorInfo(ICreateErrorInfo ** pperrinfo); + + + + + +extern __declspec(dllimport) HRESULT __stdcall GetRecordInfoFromTypeInfo(ITypeInfo * pTypeInfo, + IRecordInfo ** ppRecInfo); + +extern __declspec(dllimport) HRESULT __stdcall GetRecordInfoFromGuids(const GUID * const rGuidTypeLib, + ULONG uVerMajor, ULONG uVerMinor, LCID lcid, + const GUID * const rGuidTypeInfo, IRecordInfo ** ppRecInfo); + + + + + +extern __declspec(dllimport) ULONG __stdcall OaBuildVersion(void); + +extern __declspec(dllimport) void __stdcall ClearCustData(LPCUSTDATA pCustData); + + + + + + + + + + + + + +#line 859 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 911 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" +#line 912 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" + +#line 914 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleauto.h" +#line 43 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 20 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\rpcndr.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 21 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 29 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\oleidl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 107 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + + + + + + + + +extern __declspec(dllimport) HRESULT __stdcall CreateDataAdviseHolder(LPDATAADVISEHOLDER * ppDAHolder); + + + + + + + + + +extern __declspec(dllimport) DWORD __stdcall OleBuildVersion( void ); + + +extern __declspec(dllimport) HRESULT __stdcall ReadClassStg(LPSTORAGE pStg, CLSID * pclsid); +extern __declspec(dllimport) HRESULT __stdcall WriteClassStg(LPSTORAGE pStg, const CLSID * const rclsid); +extern __declspec(dllimport) HRESULT __stdcall ReadClassStm(LPSTREAM pStm, CLSID * pclsid); +extern __declspec(dllimport) HRESULT __stdcall WriteClassStm(LPSTREAM pStm, const CLSID * const rclsid); +extern __declspec(dllimport) HRESULT __stdcall WriteFmtUserTypeStg (LPSTORAGE pstg, CLIPFORMAT cf, LPOLESTR lpszUserType); +extern __declspec(dllimport) HRESULT __stdcall ReadFmtUserTypeStg (LPSTORAGE pstg, CLIPFORMAT * pcf, LPOLESTR * lplpszUserType); + + + + +extern __declspec(dllimport) HRESULT __stdcall OleInitialize(LPVOID pvReserved); +extern __declspec(dllimport) void __stdcall OleUninitialize(void); + + + + + +extern __declspec(dllimport) HRESULT __stdcall OleQueryLinkFromData(LPDATAOBJECT pSrcDataObject); +extern __declspec(dllimport) HRESULT __stdcall OleQueryCreateFromData(LPDATAOBJECT pSrcDataObject); + + + + +extern __declspec(dllimport) HRESULT __stdcall OleCreate(const CLSID * const rclsid, const IID * const riid, DWORD renderopt, + LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite, + LPSTORAGE pStg, LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateEx(const CLSID * const rclsid, const IID * const riid, DWORD dwFlags, + DWORD renderopt, ULONG cFormats, DWORD* rgAdvf, + LPFORMATETC rgFormatEtc, IAdviseSink * lpAdviseSink, + DWORD * rgdwConnection, LPOLECLIENTSITE pClientSite, + LPSTORAGE pStg, LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateFromData(LPDATAOBJECT pSrcDataObj, const IID * const riid, + DWORD renderopt, LPFORMATETC pFormatEtc, + LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, + LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateFromDataEx(LPDATAOBJECT pSrcDataObj, const IID * const riid, + DWORD dwFlags, DWORD renderopt, ULONG cFormats, DWORD* rgAdvf, + LPFORMATETC rgFormatEtc, IAdviseSink * lpAdviseSink, + DWORD * rgdwConnection, LPOLECLIENTSITE pClientSite, + LPSTORAGE pStg, LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateLinkFromData(LPDATAOBJECT pSrcDataObj, const IID * const riid, + DWORD renderopt, LPFORMATETC pFormatEtc, + LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, + LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateLinkFromDataEx(LPDATAOBJECT pSrcDataObj, const IID * const riid, + DWORD dwFlags, DWORD renderopt, ULONG cFormats, DWORD* rgAdvf, + LPFORMATETC rgFormatEtc, IAdviseSink * lpAdviseSink, + DWORD * rgdwConnection, LPOLECLIENTSITE pClientSite, + LPSTORAGE pStg, LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateStaticFromData(LPDATAOBJECT pSrcDataObj, const IID * const iid, + DWORD renderopt, LPFORMATETC pFormatEtc, + LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, + LPVOID * ppvObj); + + +extern __declspec(dllimport) HRESULT __stdcall OleCreateLink(LPMONIKER pmkLinkSrc, const IID * const riid, + DWORD renderopt, LPFORMATETC lpFormatEtc, + LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateLinkEx(LPMONIKER pmkLinkSrc, const IID * const riid, + DWORD dwFlags, DWORD renderopt, ULONG cFormats, DWORD* rgAdvf, + LPFORMATETC rgFormatEtc, IAdviseSink * lpAdviseSink, + DWORD * rgdwConnection, LPOLECLIENTSITE pClientSite, + LPSTORAGE pStg, LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateLinkToFile(LPCOLESTR lpszFileName, const IID * const riid, + DWORD renderopt, LPFORMATETC lpFormatEtc, + LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateLinkToFileEx(LPCOLESTR lpszFileName, const IID * const riid, + DWORD dwFlags, DWORD renderopt, ULONG cFormats, DWORD* rgAdvf, + LPFORMATETC rgFormatEtc, IAdviseSink * lpAdviseSink, + DWORD * rgdwConnection, LPOLECLIENTSITE pClientSite, + LPSTORAGE pStg, LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateFromFile(const CLSID * const rclsid, LPCOLESTR lpszFileName, const IID * const riid, + DWORD renderopt, LPFORMATETC lpFormatEtc, + LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateFromFileEx(const CLSID * const rclsid, LPCOLESTR lpszFileName, const IID * const riid, + DWORD dwFlags, DWORD renderopt, ULONG cFormats, DWORD* rgAdvf, + LPFORMATETC rgFormatEtc, IAdviseSink * lpAdviseSink, + DWORD * rgdwConnection, LPOLECLIENTSITE pClientSite, + LPSTORAGE pStg, LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleLoad(LPSTORAGE pStg, const IID * const riid, LPOLECLIENTSITE pClientSite, + LPVOID * ppvObj); + +extern __declspec(dllimport) HRESULT __stdcall OleSave(LPPERSISTSTORAGE pPS, LPSTORAGE pStg, BOOL fSameAsLoad); + +extern __declspec(dllimport) HRESULT __stdcall OleLoadFromStream( LPSTREAM pStm, const IID * const iidInterface, LPVOID * ppvObj); +extern __declspec(dllimport) HRESULT __stdcall OleSaveToStream( LPPERSISTSTREAM pPStm, LPSTREAM pStm ); + + +extern __declspec(dllimport) HRESULT __stdcall OleSetContainedObject(LPUNKNOWN pUnknown, BOOL fContained); +extern __declspec(dllimport) HRESULT __stdcall OleNoteObjectVisible(LPUNKNOWN pUnknown, BOOL fVisible); + + + + +extern __declspec(dllimport) HRESULT __stdcall RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget); +extern __declspec(dllimport) HRESULT __stdcall RevokeDragDrop(HWND hwnd); +extern __declspec(dllimport) HRESULT __stdcall DoDragDrop(LPDATAOBJECT pDataObj, LPDROPSOURCE pDropSource, + DWORD dwOKEffects, LPDWORD pdwEffect); + + + +extern __declspec(dllimport) HRESULT __stdcall OleSetClipboard(LPDATAOBJECT pDataObj); +extern __declspec(dllimport) HRESULT __stdcall OleGetClipboard(LPDATAOBJECT * ppDataObj); +extern __declspec(dllimport) HRESULT __stdcall OleFlushClipboard(void); +extern __declspec(dllimport) HRESULT __stdcall OleIsCurrentClipboard(LPDATAOBJECT pDataObj); + + + + +extern __declspec(dllimport) HOLEMENU __stdcall OleCreateMenuDescriptor (HMENU hmenuCombined, + LPOLEMENUGROUPWIDTHS lpMenuWidths); +extern __declspec(dllimport) HRESULT __stdcall OleSetMenuDescriptor (HOLEMENU holemenu, HWND hwndFrame, + HWND hwndActiveObject, + LPOLEINPLACEFRAME lpFrame, + LPOLEINPLACEACTIVEOBJECT lpActiveObj); +extern __declspec(dllimport) HRESULT __stdcall OleDestroyMenuDescriptor (HOLEMENU holemenu); + +extern __declspec(dllimport) HRESULT __stdcall OleTranslateAccelerator (LPOLEINPLACEFRAME lpFrame, + LPOLEINPLACEFRAMEINFO lpFrameInfo, LPMSG lpmsg); + + + +extern __declspec(dllimport) HANDLE __stdcall OleDuplicateData (HANDLE hSrc, CLIPFORMAT cfFormat, + UINT uiFlags); + +extern __declspec(dllimport) HRESULT __stdcall OleDraw (LPUNKNOWN pUnknown, DWORD dwAspect, HDC hdcDraw, + LPCRECT lprcBounds); + +extern __declspec(dllimport) HRESULT __stdcall OleRun(LPUNKNOWN pUnknown); +extern __declspec(dllimport) BOOL __stdcall OleIsRunning(LPOLEOBJECT pObject); +extern __declspec(dllimport) HRESULT __stdcall OleLockRunning(LPUNKNOWN pUnknown, BOOL fLock, BOOL fLastUnlockCloses); +extern __declspec(dllimport) void __stdcall ReleaseStgMedium(LPSTGMEDIUM); +extern __declspec(dllimport) HRESULT __stdcall CreateOleAdviseHolder(LPOLEADVISEHOLDER * ppOAHolder); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateDefaultHandler(const CLSID * const clsid, LPUNKNOWN pUnkOuter, + const IID * const riid, LPVOID * lplpObj); + +extern __declspec(dllimport) HRESULT __stdcall OleCreateEmbeddingHelper(const CLSID * const clsid, LPUNKNOWN pUnkOuter, + DWORD flags, LPCLASSFACTORY pCF, + const IID * const riid, LPVOID * lplpObj); + +extern __declspec(dllimport) BOOL __stdcall IsAccelerator(HACCEL hAccel, int cAccelEntries, LPMSG lpMsg, + WORD * lpwCmd); + + +extern __declspec(dllimport) HGLOBAL __stdcall OleGetIconOfFile(LPOLESTR lpszPath, BOOL fUseFileAsLabel); + +extern __declspec(dllimport) HGLOBAL __stdcall OleGetIconOfClass(const CLSID * const rclsid, LPOLESTR lpszLabel, + BOOL fUseTypeAsLabel); + +extern __declspec(dllimport) HGLOBAL __stdcall OleMetafilePictFromIconAndLabel(HICON hIcon, LPOLESTR lpszLabel, + LPOLESTR lpszSourceFile, UINT iIconIndex); + + + + + +extern __declspec(dllimport) HRESULT __stdcall OleRegGetUserType (const CLSID * const clsid, DWORD dwFormOfType, + LPOLESTR * pszUserType); + +extern __declspec(dllimport) HRESULT __stdcall OleRegGetMiscStatus (const CLSID * const clsid, DWORD dwAspect, + DWORD * pdwStatus); + +extern __declspec(dllimport) HRESULT __stdcall OleRegEnumFormatEtc (const CLSID * const clsid, DWORD dwDirection, + LPENUMFORMATETC * ppenum); + +extern __declspec(dllimport) HRESULT __stdcall OleRegEnumVerbs (const CLSID * const clsid, LPENUMOLEVERB * ppenum); + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _OLESTREAM * LPOLESTREAM; + +typedef struct _OLESTREAMVTBL +{ + DWORD (__stdcall* Get)(LPOLESTREAM, void *, DWORD); + DWORD (__stdcall* Put)(LPOLESTREAM, const void *, DWORD); +} OLESTREAMVTBL; +typedef OLESTREAMVTBL * LPOLESTREAMVTBL; + +typedef struct _OLESTREAM +{ + LPOLESTREAMVTBL lpstbl; +} OLESTREAM; + + +extern __declspec(dllimport) HRESULT __stdcall OleConvertOLESTREAMToIStorage + (LPOLESTREAM lpolestream, + LPSTORAGE pstg, + const DVTARGETDEVICE * ptd); + +extern __declspec(dllimport) HRESULT __stdcall OleConvertIStorageToOLESTREAM + (LPSTORAGE pstg, + LPOLESTREAM lpolestream); + + + +extern __declspec(dllimport) HRESULT __stdcall GetHGlobalFromILockBytes (LPLOCKBYTES plkbyt, HGLOBAL * phglobal); +extern __declspec(dllimport) HRESULT __stdcall CreateILockBytesOnHGlobal (HGLOBAL hGlobal, BOOL fDeleteOnRelease, + LPLOCKBYTES * pplkbyt); + +extern __declspec(dllimport) HRESULT __stdcall GetHGlobalFromStream (LPSTREAM pstm, HGLOBAL * phglobal); +extern __declspec(dllimport) HRESULT __stdcall CreateStreamOnHGlobal (HGLOBAL hGlobal, BOOL fDeleteOnRelease, + LPSTREAM * ppstm); + + + + +extern __declspec(dllimport) HRESULT __stdcall OleDoAutoConvert(LPSTORAGE pStg, LPCLSID pClsidNew); +extern __declspec(dllimport) HRESULT __stdcall OleGetAutoConvert(const CLSID * const clsidOld, LPCLSID pClsidNew); +extern __declspec(dllimport) HRESULT __stdcall OleSetAutoConvert(const CLSID * const clsidOld, const CLSID * const clsidNew); +extern __declspec(dllimport) HRESULT __stdcall GetConvertStg(LPSTORAGE pStg); +extern __declspec(dllimport) HRESULT __stdcall SetConvertStg(LPSTORAGE pStg, BOOL fConvert); + + +extern __declspec(dllimport) HRESULT __stdcall OleConvertIStorageToOLESTREAMEx + (LPSTORAGE pstg, + + CLIPFORMAT cfFormat, + LONG lWidth, + LONG lHeight, + DWORD dwSize, + LPSTGMEDIUM pmedium, + LPOLESTREAM polestm); + +extern __declspec(dllimport) HRESULT __stdcall OleConvertOLESTREAMToIStorageEx + (LPOLESTREAM polestm, + LPSTORAGE pstg, + + CLIPFORMAT * pcfFormat, + LONG * plwWidth, + LONG * plHeight, + DWORD * pdwSize, + LPSTGMEDIUM pmedium); + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma warning(disable:4103) + +#pragma pack(pop) + + +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" + + +#line 36 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 37 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\poppack.h" +#line 410 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" +#line 411 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + + + + + + + + + + + +#line 423 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 425 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\ole2.h" + +#line 220 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 221 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 222 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 223 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 224 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 32 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 73 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _SERVICE_DESCRIPTIONA { + LPSTR lpDescription; +} SERVICE_DESCRIPTIONA, *LPSERVICE_DESCRIPTIONA; + + + +typedef struct _SERVICE_DESCRIPTIONW { + LPWSTR lpDescription; +} SERVICE_DESCRIPTIONW, *LPSERVICE_DESCRIPTIONW; + + + + +typedef SERVICE_DESCRIPTIONA SERVICE_DESCRIPTION; +typedef LPSERVICE_DESCRIPTIONA LPSERVICE_DESCRIPTION; +#line 192 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + + + + +typedef enum _SC_ACTION_TYPE { + SC_ACTION_NONE = 0, + SC_ACTION_RESTART = 1, + SC_ACTION_REBOOT = 2, + SC_ACTION_RUN_COMMAND = 3 +} SC_ACTION_TYPE; + +typedef struct _SC_ACTION { + SC_ACTION_TYPE Type; + DWORD Delay; +} SC_ACTION, *LPSC_ACTION; + +typedef struct _SERVICE_FAILURE_ACTIONSA { + DWORD dwResetPeriod; + LPSTR lpRebootMsg; + LPSTR lpCommand; + DWORD cActions; + + + + SC_ACTION * lpsaActions; +} SERVICE_FAILURE_ACTIONSA, *LPSERVICE_FAILURE_ACTIONSA; +typedef struct _SERVICE_FAILURE_ACTIONSW { + DWORD dwResetPeriod; + LPWSTR lpRebootMsg; + LPWSTR lpCommand; + DWORD cActions; + + + + SC_ACTION * lpsaActions; +} SERVICE_FAILURE_ACTIONSW, *LPSERVICE_FAILURE_ACTIONSW; + + + + +typedef SERVICE_FAILURE_ACTIONSA SERVICE_FAILURE_ACTIONS; +typedef LPSERVICE_FAILURE_ACTIONSA LPSERVICE_FAILURE_ACTIONS; +#line 235 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + + + + + + +typedef HANDLE SC_HANDLE; +typedef SC_HANDLE *LPSC_HANDLE; + +typedef DWORD SERVICE_STATUS_HANDLE; + + + + + +typedef struct _SERVICE_STATUS { + DWORD dwServiceType; + DWORD dwCurrentState; + DWORD dwControlsAccepted; + DWORD dwWin32ExitCode; + DWORD dwServiceSpecificExitCode; + DWORD dwCheckPoint; + DWORD dwWaitHint; +} SERVICE_STATUS, *LPSERVICE_STATUS; + + + + + + + +typedef struct _ENUM_SERVICE_STATUSA { + LPSTR lpServiceName; + LPSTR lpDisplayName; + SERVICE_STATUS ServiceStatus; +} ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA; +typedef struct _ENUM_SERVICE_STATUSW { + LPWSTR lpServiceName; + LPWSTR lpDisplayName; + SERVICE_STATUS ServiceStatus; +} ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW; + + + + +typedef ENUM_SERVICE_STATUSA ENUM_SERVICE_STATUS; +typedef LPENUM_SERVICE_STATUSA LPENUM_SERVICE_STATUS; +#line 283 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + + + + + + +typedef LPVOID SC_LOCK; + +typedef struct _QUERY_SERVICE_LOCK_STATUSA { + DWORD fIsLocked; + LPSTR lpLockOwner; + DWORD dwLockDuration; +} QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA; +typedef struct _QUERY_SERVICE_LOCK_STATUSW { + DWORD fIsLocked; + LPWSTR lpLockOwner; + DWORD dwLockDuration; +} QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW; + + + + +typedef QUERY_SERVICE_LOCK_STATUSA QUERY_SERVICE_LOCK_STATUS; +typedef LPQUERY_SERVICE_LOCK_STATUSA LPQUERY_SERVICE_LOCK_STATUS; +#line 308 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + + + + + + + +typedef struct _QUERY_SERVICE_CONFIGA { + DWORD dwServiceType; + DWORD dwStartType; + DWORD dwErrorControl; + LPSTR lpBinaryPathName; + LPSTR lpLoadOrderGroup; + DWORD dwTagId; + LPSTR lpDependencies; + LPSTR lpServiceStartName; + LPSTR lpDisplayName; +} QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA; +typedef struct _QUERY_SERVICE_CONFIGW { + DWORD dwServiceType; + DWORD dwStartType; + DWORD dwErrorControl; + LPWSTR lpBinaryPathName; + LPWSTR lpLoadOrderGroup; + DWORD dwTagId; + LPWSTR lpDependencies; + LPWSTR lpServiceStartName; + LPWSTR lpDisplayName; +} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW; + + + + +typedef QUERY_SERVICE_CONFIGA QUERY_SERVICE_CONFIG; +typedef LPQUERY_SERVICE_CONFIGA LPQUERY_SERVICE_CONFIG; +#line 344 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + + + + + + + +typedef void (__stdcall *LPSERVICE_MAIN_FUNCTIONW)( + DWORD dwNumServicesArgs, + LPWSTR *lpServiceArgVectors + ); + +typedef void (__stdcall *LPSERVICE_MAIN_FUNCTIONA)( + DWORD dwNumServicesArgs, + LPSTR *lpServiceArgVectors + ); + + + + + +#line 366 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + + + + + + +typedef struct _SERVICE_TABLE_ENTRYA { + LPSTR lpServiceName; + LPSERVICE_MAIN_FUNCTIONA lpServiceProc; +}SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA; +typedef struct _SERVICE_TABLE_ENTRYW { + LPWSTR lpServiceName; + LPSERVICE_MAIN_FUNCTIONW lpServiceProc; +}SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW; + + + + +typedef SERVICE_TABLE_ENTRYA SERVICE_TABLE_ENTRY; +typedef LPSERVICE_TABLE_ENTRYA LPSERVICE_TABLE_ENTRY; +#line 387 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + + + + + +typedef void (__stdcall *LPHANDLER_FUNCTION)( + DWORD dwControl + ); + + + + + + + +__declspec(dllimport) +BOOL +__stdcall +ChangeServiceConfigA( + SC_HANDLE hService, + DWORD dwServiceType, + DWORD dwStartType, + DWORD dwErrorControl, + LPCSTR lpBinaryPathName, + LPCSTR lpLoadOrderGroup, + LPDWORD lpdwTagId, + LPCSTR lpDependencies, + LPCSTR lpServiceStartName, + LPCSTR lpPassword, + LPCSTR lpDisplayName + ); +__declspec(dllimport) +BOOL +__stdcall +ChangeServiceConfigW( + SC_HANDLE hService, + DWORD dwServiceType, + DWORD dwStartType, + DWORD dwErrorControl, + LPCWSTR lpBinaryPathName, + LPCWSTR lpLoadOrderGroup, + LPDWORD lpdwTagId, + LPCWSTR lpDependencies, + LPCWSTR lpServiceStartName, + LPCWSTR lpPassword, + LPCWSTR lpDisplayName + ); + + + + +#line 439 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +ChangeServiceConfig2A( + SC_HANDLE hService, + DWORD dwInfoLevel, + LPVOID lpInfo + ); +__declspec(dllimport) +BOOL +__stdcall +ChangeServiceConfig2W( + SC_HANDLE hService, + DWORD dwInfoLevel, + LPVOID lpInfo + ); + + + + +#line 461 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +CloseServiceHandle( + SC_HANDLE hSCObject + ); + +__declspec(dllimport) +BOOL +__stdcall +ControlService( + SC_HANDLE hService, + DWORD dwControl, + LPSERVICE_STATUS lpServiceStatus + ); + +__declspec(dllimport) +SC_HANDLE +__stdcall +CreateServiceA( + SC_HANDLE hSCManager, + LPCSTR lpServiceName, + LPCSTR lpDisplayName, + DWORD dwDesiredAccess, + DWORD dwServiceType, + DWORD dwStartType, + DWORD dwErrorControl, + LPCSTR lpBinaryPathName, + LPCSTR lpLoadOrderGroup, + LPDWORD lpdwTagId, + LPCSTR lpDependencies, + LPCSTR lpServiceStartName, + LPCSTR lpPassword + ); +__declspec(dllimport) +SC_HANDLE +__stdcall +CreateServiceW( + SC_HANDLE hSCManager, + LPCWSTR lpServiceName, + LPCWSTR lpDisplayName, + DWORD dwDesiredAccess, + DWORD dwServiceType, + DWORD dwStartType, + DWORD dwErrorControl, + LPCWSTR lpBinaryPathName, + LPCWSTR lpLoadOrderGroup, + LPDWORD lpdwTagId, + LPCWSTR lpDependencies, + LPCWSTR lpServiceStartName, + LPCWSTR lpPassword + ); + + + + +#line 519 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +DeleteService( + SC_HANDLE hService + ); + +__declspec(dllimport) +BOOL +__stdcall +EnumDependentServicesA( + SC_HANDLE hService, + DWORD dwServiceState, + LPENUM_SERVICE_STATUSA lpServices, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded, + LPDWORD lpServicesReturned + ); +__declspec(dllimport) +BOOL +__stdcall +EnumDependentServicesW( + SC_HANDLE hService, + DWORD dwServiceState, + LPENUM_SERVICE_STATUSW lpServices, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded, + LPDWORD lpServicesReturned + ); + + + + +#line 554 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +EnumServicesStatusA( + SC_HANDLE hSCManager, + DWORD dwServiceType, + DWORD dwServiceState, + LPENUM_SERVICE_STATUSA lpServices, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded, + LPDWORD lpServicesReturned, + LPDWORD lpResumeHandle + ); +__declspec(dllimport) +BOOL +__stdcall +EnumServicesStatusW( + SC_HANDLE hSCManager, + DWORD dwServiceType, + DWORD dwServiceState, + LPENUM_SERVICE_STATUSW lpServices, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded, + LPDWORD lpServicesReturned, + LPDWORD lpResumeHandle + ); + + + + +#line 586 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +GetServiceKeyNameA( + SC_HANDLE hSCManager, + LPCSTR lpDisplayName, + LPSTR lpServiceName, + LPDWORD lpcchBuffer + ); +__declspec(dllimport) +BOOL +__stdcall +GetServiceKeyNameW( + SC_HANDLE hSCManager, + LPCWSTR lpDisplayName, + LPWSTR lpServiceName, + LPDWORD lpcchBuffer + ); + + + + +#line 610 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +GetServiceDisplayNameA( + SC_HANDLE hSCManager, + LPCSTR lpServiceName, + LPSTR lpDisplayName, + LPDWORD lpcchBuffer + ); +__declspec(dllimport) +BOOL +__stdcall +GetServiceDisplayNameW( + SC_HANDLE hSCManager, + LPCWSTR lpServiceName, + LPWSTR lpDisplayName, + LPDWORD lpcchBuffer + ); + + + + +#line 634 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +SC_LOCK +__stdcall +LockServiceDatabase( + SC_HANDLE hSCManager + ); + +__declspec(dllimport) +BOOL +__stdcall +NotifyBootConfigStatus( + BOOL BootAcceptable + ); + +__declspec(dllimport) +SC_HANDLE +__stdcall +OpenSCManagerA( + LPCSTR lpMachineName, + LPCSTR lpDatabaseName, + DWORD dwDesiredAccess + ); +__declspec(dllimport) +SC_HANDLE +__stdcall +OpenSCManagerW( + LPCWSTR lpMachineName, + LPCWSTR lpDatabaseName, + DWORD dwDesiredAccess + ); + + + + +#line 670 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +SC_HANDLE +__stdcall +OpenServiceA( + SC_HANDLE hSCManager, + LPCSTR lpServiceName, + DWORD dwDesiredAccess + ); +__declspec(dllimport) +SC_HANDLE +__stdcall +OpenServiceW( + SC_HANDLE hSCManager, + LPCWSTR lpServiceName, + DWORD dwDesiredAccess + ); + + + + +#line 692 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +QueryServiceConfigA( + SC_HANDLE hService, + LPQUERY_SERVICE_CONFIGA lpServiceConfig, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); +__declspec(dllimport) +BOOL +__stdcall +QueryServiceConfigW( + SC_HANDLE hService, + LPQUERY_SERVICE_CONFIGW lpServiceConfig, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); + + + + +#line 716 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +QueryServiceConfig2A( + SC_HANDLE hService, + DWORD dwInfoLevel, + LPBYTE lpBuffer, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); +__declspec(dllimport) +BOOL +__stdcall +QueryServiceConfig2W( + SC_HANDLE hService, + DWORD dwInfoLevel, + LPBYTE lpBuffer, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); + + + + +#line 742 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +QueryServiceLockStatusA( + SC_HANDLE hSCManager, + LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); +__declspec(dllimport) +BOOL +__stdcall +QueryServiceLockStatusW( + SC_HANDLE hSCManager, + LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); + + + + +#line 766 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +QueryServiceObjectSecurity( + SC_HANDLE hService, + SECURITY_INFORMATION dwSecurityInformation, + PSECURITY_DESCRIPTOR lpSecurityDescriptor, + DWORD cbBufSize, + LPDWORD pcbBytesNeeded + ); + +__declspec(dllimport) +BOOL +__stdcall +QueryServiceStatus( + SC_HANDLE hService, + LPSERVICE_STATUS lpServiceStatus + ); + +__declspec(dllimport) +SERVICE_STATUS_HANDLE +__stdcall +RegisterServiceCtrlHandlerA( + LPCSTR lpServiceName, + LPHANDLER_FUNCTION lpHandlerProc + ); +__declspec(dllimport) +SERVICE_STATUS_HANDLE +__stdcall +RegisterServiceCtrlHandlerW( + LPCWSTR lpServiceName, + LPHANDLER_FUNCTION lpHandlerProc + ); + + + + +#line 805 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +SetServiceObjectSecurity( + SC_HANDLE hService, + SECURITY_INFORMATION dwSecurityInformation, + PSECURITY_DESCRIPTOR lpSecurityDescriptor + ); + +__declspec(dllimport) +BOOL +__stdcall +SetServiceStatus( + SERVICE_STATUS_HANDLE hServiceStatus, + LPSERVICE_STATUS lpServiceStatus + ); + +__declspec(dllimport) +BOOL +__stdcall +StartServiceCtrlDispatcherA( + const SERVICE_TABLE_ENTRYA *lpServiceStartTable + ); +__declspec(dllimport) +BOOL +__stdcall +StartServiceCtrlDispatcherW( + const SERVICE_TABLE_ENTRYW *lpServiceStartTable + ); + + + + +#line 840 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + + +__declspec(dllimport) +BOOL +__stdcall +StartServiceA( + SC_HANDLE hService, + DWORD dwNumServiceArgs, + LPCSTR *lpServiceArgVectors + ); +__declspec(dllimport) +BOOL +__stdcall +StartServiceW( + SC_HANDLE hService, + DWORD dwNumServiceArgs, + LPCWSTR *lpServiceArgVectors + ); + + + + +#line 863 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" + +__declspec(dllimport) +BOOL +__stdcall +UnlockServiceDatabase( + SC_LOCK ScLock + ); + + + + + + +#line 877 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\winsvc.h" +#line 237 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 238 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mcx.h" + + + + + + + + + + + +typedef struct _MODEMDEVCAPS { + DWORD dwActualSize; + DWORD dwRequiredSize; + DWORD dwDevSpecificOffset; + DWORD dwDevSpecificSize; + + + DWORD dwModemProviderVersion; + DWORD dwModemManufacturerOffset; + DWORD dwModemManufacturerSize; + DWORD dwModemModelOffset; + DWORD dwModemModelSize; + DWORD dwModemVersionOffset; + DWORD dwModemVersionSize; + + + DWORD dwDialOptions; + DWORD dwCallSetupFailTimer; + DWORD dwInactivityTimeout; + DWORD dwSpeakerVolume; + DWORD dwSpeakerMode; + DWORD dwModemOptions; + DWORD dwMaxDTERate; + DWORD dwMaxDCERate; + + + BYTE abVariablePortion [1]; +} MODEMDEVCAPS, *PMODEMDEVCAPS, *LPMODEMDEVCAPS; + +typedef struct _MODEMSETTINGS { + DWORD dwActualSize; + DWORD dwRequiredSize; + DWORD dwDevSpecificOffset; + DWORD dwDevSpecificSize; + + + DWORD dwCallSetupFailTimer; + DWORD dwInactivityTimeout; + DWORD dwSpeakerVolume; + DWORD dwSpeakerMode; + DWORD dwPreferredModemOptions; + + + DWORD dwNegotiatedModemOptions; + DWORD dwNegotiatedDCERate; + + + BYTE abVariablePortion [1]; +} MODEMSETTINGS, *PMODEMSETTINGS, *LPMODEMSETTINGS; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 103 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\mcx.h" +#line 242 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 243 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + + + + + + + + + + + + + + + + + +#line 19 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" +typedef DWORD HIMC; +typedef DWORD HIMCC; +#line 22 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +typedef HKL *LPHKL; +typedef UINT *LPUINT; + + +typedef struct tagCOMPOSITIONFORM { + DWORD dwStyle; + POINT ptCurrentPos; + RECT rcArea; +} COMPOSITIONFORM, *PCOMPOSITIONFORM, *NPCOMPOSITIONFORM, *LPCOMPOSITIONFORM; + + +typedef struct tagCANDIDATEFORM { + DWORD dwIndex; + DWORD dwStyle; + POINT ptCurrentPos; + RECT rcArea; +} CANDIDATEFORM, *PCANDIDATEFORM, *NPCANDIDATEFORM, *LPCANDIDATEFORM; + + +typedef struct tagCANDIDATELIST { + DWORD dwSize; + DWORD dwStyle; + DWORD dwCount; + DWORD dwSelection; + DWORD dwPageStart; + DWORD dwPageSize; + DWORD dwOffset[1]; +} CANDIDATELIST, *PCANDIDATELIST, *NPCANDIDATELIST, *LPCANDIDATELIST; + +typedef struct tagREGISTERWORDA { + LPSTR lpReading; + LPSTR lpWord; +} REGISTERWORDA, *PREGISTERWORDA, *NPREGISTERWORDA, *LPREGISTERWORDA; +typedef struct tagREGISTERWORDW { + LPWSTR lpReading; + LPWSTR lpWord; +} REGISTERWORDW, *PREGISTERWORDW, *NPREGISTERWORDW, *LPREGISTERWORDW; + + + + + + +typedef REGISTERWORDA REGISTERWORD; +typedef PREGISTERWORDA PREGISTERWORD; +typedef NPREGISTERWORDA NPREGISTERWORD; +typedef LPREGISTERWORDA LPREGISTERWORD; +#line 71 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + + + + + + + + + + + + + +#line 85 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + + + +typedef struct tagSTYLEBUFA { + DWORD dwStyle; + CHAR szDescription[32]; +} STYLEBUFA, *PSTYLEBUFA, *NPSTYLEBUFA, *LPSTYLEBUFA; +typedef struct tagSTYLEBUFW { + DWORD dwStyle; + WCHAR szDescription[32]; +} STYLEBUFW, *PSTYLEBUFW, *NPSTYLEBUFW, *LPSTYLEBUFW; + + + + + + +typedef STYLEBUFA STYLEBUF; +typedef PSTYLEBUFA PSTYLEBUF; +typedef NPSTYLEBUFA NPSTYLEBUF; +typedef LPSTYLEBUFA LPSTYLEBUF; +#line 107 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 146 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + + + +HKL __stdcall ImmInstallIMEA(LPCSTR lpszIMEFileName, LPCSTR lpszLayoutText); +HKL __stdcall ImmInstallIMEW(LPCWSTR lpszIMEFileName, LPCWSTR lpszLayoutText); + + + + +#line 156 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +HWND __stdcall ImmGetDefaultIMEWnd(HWND); + +UINT __stdcall ImmGetDescriptionA(HKL, LPSTR, UINT uBufLen); +UINT __stdcall ImmGetDescriptionW(HKL, LPWSTR, UINT uBufLen); + + + + +#line 166 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +UINT __stdcall ImmGetIMEFileNameA(HKL, LPSTR, UINT uBufLen); +UINT __stdcall ImmGetIMEFileNameW(HKL, LPWSTR, UINT uBufLen); + + + + +#line 174 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +DWORD __stdcall ImmGetProperty(HKL, DWORD); + + +BOOL __stdcall ImmIsIME(HKL); +BOOL __stdcall ImmSimulateHotKey(HWND, DWORD); + +HIMC __stdcall ImmCreateContext(void); +BOOL __stdcall ImmDestroyContext(HIMC); +HIMC __stdcall ImmGetContext(HWND); +BOOL __stdcall ImmReleaseContext(HWND, HIMC); +HIMC __stdcall ImmAssociateContext(HWND, HIMC); + + +#line 189 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +LONG __stdcall ImmGetCompositionStringA(HIMC, DWORD, LPVOID, DWORD); +LONG __stdcall ImmGetCompositionStringW(HIMC, DWORD, LPVOID, DWORD); + + + + +#line 197 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +BOOL __stdcall ImmSetCompositionStringA(HIMC, DWORD dwIndex, LPCVOID lpComp, DWORD, LPCVOID lpRead, DWORD); +BOOL __stdcall ImmSetCompositionStringW(HIMC, DWORD dwIndex, LPCVOID lpComp, DWORD, LPCVOID lpRead, DWORD); + + + + +#line 205 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +DWORD __stdcall ImmGetCandidateListCountA(HIMC, LPDWORD lpdwListCount); +DWORD __stdcall ImmGetCandidateListCountW(HIMC, LPDWORD lpdwListCount); + + + + +#line 213 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +DWORD __stdcall ImmGetCandidateListA(HIMC, DWORD deIndex, LPCANDIDATELIST, DWORD dwBufLen); +DWORD __stdcall ImmGetCandidateListW(HIMC, DWORD deIndex, LPCANDIDATELIST, DWORD dwBufLen); + + + + +#line 221 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +DWORD __stdcall ImmGetGuideLineA(HIMC, DWORD dwIndex, LPSTR, DWORD dwBufLen); +DWORD __stdcall ImmGetGuideLineW(HIMC, DWORD dwIndex, LPWSTR, DWORD dwBufLen); + + + + +#line 229 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +BOOL __stdcall ImmGetConversionStatus(HIMC, LPDWORD, LPDWORD); +BOOL __stdcall ImmSetConversionStatus(HIMC, DWORD, DWORD); +BOOL __stdcall ImmGetOpenStatus(HIMC); +BOOL __stdcall ImmSetOpenStatus(HIMC, BOOL); + + + +BOOL __stdcall ImmGetCompositionFontA(HIMC, LPLOGFONTA); +BOOL __stdcall ImmGetCompositionFontW(HIMC, LPLOGFONTW); + + + + +#line 244 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +BOOL __stdcall ImmSetCompositionFontA(HIMC, LPLOGFONTA); +BOOL __stdcall ImmSetCompositionFontW(HIMC, LPLOGFONTW); + + + + +#line 252 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" +#line 253 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" +#line 254 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +BOOL __stdcall ImmConfigureIMEA(HKL, HWND, DWORD, LPVOID); +BOOL __stdcall ImmConfigureIMEW(HKL, HWND, DWORD, LPVOID); + + + + +#line 262 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +LRESULT __stdcall ImmEscapeA(HKL, HIMC, UINT, LPVOID); +LRESULT __stdcall ImmEscapeW(HKL, HIMC, UINT, LPVOID); + + + + +#line 270 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +DWORD __stdcall ImmGetConversionListA(HKL, HIMC, LPCSTR, LPCANDIDATELIST, DWORD dwBufLen, UINT uFlag); +DWORD __stdcall ImmGetConversionListW(HKL, HIMC, LPCWSTR, LPCANDIDATELIST, DWORD dwBufLen, UINT uFlag); + + + + +#line 278 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +BOOL __stdcall ImmNotifyIME(HIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue); + + +BOOL __stdcall ImmGetStatusWindowPos(HIMC, LPPOINT); +BOOL __stdcall ImmSetStatusWindowPos(HIMC, LPPOINT); +BOOL __stdcall ImmGetCompositionWindow(HIMC, LPCOMPOSITIONFORM); +BOOL __stdcall ImmSetCompositionWindow(HIMC, LPCOMPOSITIONFORM); +BOOL __stdcall ImmGetCandidateWindow(HIMC, DWORD, LPCANDIDATEFORM); +BOOL __stdcall ImmSetCandidateWindow(HIMC, LPCANDIDATEFORM); + +BOOL __stdcall ImmIsUIMessageA(HWND, UINT, WPARAM, LPARAM); +BOOL __stdcall ImmIsUIMessageW(HWND, UINT, WPARAM, LPARAM); + + + + +#line 296 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + + +UINT __stdcall ImmGetVirtualKey(HWND); + +typedef int (__stdcall *REGISTERWORDENUMPROCA)(LPCSTR, DWORD, LPCSTR, LPVOID); +typedef int (__stdcall *REGISTERWORDENUMPROCW)(LPCWSTR, DWORD, LPCWSTR, LPVOID); + + + + +#line 307 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +BOOL __stdcall ImmRegisterWordA(HKL, LPCSTR lpszReading, DWORD, LPCSTR lpszRegister); +BOOL __stdcall ImmRegisterWordW(HKL, LPCWSTR lpszReading, DWORD, LPCWSTR lpszRegister); + + + + +#line 315 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +BOOL __stdcall ImmUnregisterWordA(HKL, LPCSTR lpszReading, DWORD, LPCSTR lpszUnregister); +BOOL __stdcall ImmUnregisterWordW(HKL, LPCWSTR lpszReading, DWORD, LPCWSTR lpszUnregister); + + + + +#line 323 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +UINT __stdcall ImmGetRegisterWordStyleA(HKL, UINT nItem, LPSTYLEBUFA); +UINT __stdcall ImmGetRegisterWordStyleW(HKL, UINT nItem, LPSTYLEBUFW); + + + + +#line 331 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + +UINT __stdcall ImmEnumRegisterWordA(HKL, REGISTERWORDENUMPROCA, LPCSTR lpszReading, DWORD, LPCSTR lpszRegister, LPVOID); +UINT __stdcall ImmEnumRegisterWordW(HKL, REGISTERWORDENUMPROCW, LPCWSTR lpszReading, DWORD, LPCWSTR lpszRegister, LPVOID); + + + + +#line 339 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + + + + + + + + + + + +#line 351 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 619 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 687 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + + + + + + + + + + + + + +#line 701 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\imm.h" + + +#line 246 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 247 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 248 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 249 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + + + +#pragma warning(default:4001) +#pragma warning(default:4201) +#pragma warning(default:4214) + +#line 257 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 258 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 260 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 262 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" +#line 263 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\windows.h" + +#line 164 "system.h" + +typedef int ssize_t; +typedef int ino_t; +typedef int dev_t; +#line 169 "system.h" + + + + + + + + +#line 1 ".\\param.h" + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\limits.h" + + + + + + + + + + + + + + + +#pragma once +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\limits.h" + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\limits.h" + + + + + + + + + + + + + +#line 39 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\limits.h" + + + + + + + + + + + + + + + + +#line 56 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\limits.h" + + + + + +#line 62 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\limits.h" + + + + + +#line 68 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\limits.h" + + + + + + + + +#line 77 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\limits.h" + + + + + + + + +#line 86 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\limits.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 119 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\limits.h" +#line 15 ".\\param.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 52 ".\\param.h" +#line 178 "system.h" + + +#line 181 "system.h" + + + +#line 185 "system.h" + + +#line 1 "hwint.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 29 "hwint.h" +#line 30 "hwint.h" +#line 31 "hwint.h" + + + + + + + + + + + + + + + + + + + + +#line 56 "hwint.h" + + + + + + + + + +#line 66 "hwint.h" + +#line 68 "hwint.h" + + + + + + + +#line 76 "hwint.h" + + + + +#line 81 "hwint.h" +#line 82 "hwint.h" +#line 83 "hwint.h" + + + + +#line 88 "hwint.h" + + + + +#line 93 "hwint.h" +#line 94 "hwint.h" +#line 95 "hwint.h" + + + + +#line 100 "hwint.h" + + + + +#line 105 "hwint.h" +#line 106 "hwint.h" +#line 107 "hwint.h" + + + + + + + + + + + + +#line 120 "hwint.h" + + +#line 123 "hwint.h" + + + + +#line 128 "hwint.h" +#line 129 "hwint.h" +#line 130 "hwint.h" +#line 131 "hwint.h" + + + + + + + + + + + + +#line 145 "hwint.h" + + + + + +#line 151 "hwint.h" +#line 152 "hwint.h" + +#line 154 "hwint.h" +#line 188 "system.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 222 "system.h" + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + + + + + + + + + + + + + + + + +#pragma once +#line 19 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + + + + + + +#line 26 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + + + + + + + +#pragma pack(push,8) +#line 35 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + + + + + + + + + + + + + + + + + + + + + + +#line 58 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + + + + + + + + + + + + + + + + +#line 75 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + + + + + + + + + +typedef long clock_t; + +#line 87 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + + + + + + + + + + + + + + + + + + + +struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + }; + +#line 119 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + + + + + + + + + + + + + extern int _daylight; + + + extern long _dstbias; + + + extern long _timezone; + + + extern char * _tzname[2]; + + + + + char * __cdecl asctime(const struct tm *); + char * __cdecl ctime(const time_t *); + clock_t __cdecl clock(void); + double __cdecl difftime(time_t, time_t); + struct tm * __cdecl gmtime(const time_t *); + struct tm * __cdecl localtime(const time_t *); + time_t __cdecl mktime(struct tm *); + size_t __cdecl strftime(char *, size_t, const char *, + const struct tm *); + char * __cdecl _strdate(char *); + char * __cdecl _strtime(char *); + time_t __cdecl time(time_t *); + + + + + void __cdecl _tzset(void); +#line 163 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + + + +unsigned __cdecl _getsystime(struct tm *); +unsigned __cdecl _setsystime(struct tm *, unsigned); + + + + + + + + + + + + + + wchar_t * __cdecl _wasctime(const struct tm *); + wchar_t * __cdecl _wctime(const time_t *); + size_t __cdecl wcsftime(wchar_t *, size_t, const wchar_t *, + const struct tm *); + wchar_t * __cdecl _wstrdate(wchar_t *); + wchar_t * __cdecl _wstrtime(wchar_t *); + + +#line 190 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" +#line 191 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + + + + + + + + + + + + + + +#line 206 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + + + + + + + +#pragma pack(pop) +#line 215 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" + +#line 217 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\time.h" +#line 224 "system.h" +#line 225 "system.h" +#line 226 "system.h" +#line 227 "system.h" + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\fcntl.h" + + + + + + + + + + + + + + + +#pragma once +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\fcntl.h" + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\fcntl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 81 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\fcntl.h" + +#line 83 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\fcntl.h" +#line 230 "system.h" + + + + +#line 235 "system.h" + + + + + + + + + + + +#line 247 "system.h" + + +#line 250 "system.h" + + +#line 253 "system.h" + + + + + + + + + + + + + + + + + + + +#line 273 "system.h" + + +#line 276 "system.h" + + +#line 279 "system.h" + + +#line 282 "system.h" + + +#line 285 "system.h" + + + + + + + + +#line 294 "system.h" + + + +#line 298 "system.h" + + + +#line 302 "system.h" + + + +#line 306 "system.h" + + + +#line 310 "system.h" + + + +#line 314 "system.h" + + + +#line 318 "system.h" + + + +#line 322 "system.h" + + + +#line 326 "system.h" + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\malloc.h" + + + + + + + + + + + + + + + +#pragma once +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\malloc.h" + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\malloc.h" + + + + + + + +#pragma pack(push,8) +#line 34 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\malloc.h" + + + + + + + + + + + + + + + + + + + + + +#line 56 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\malloc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct _heapinfo { + int * _pentry; + size_t _size; + int _useflag; + } _HEAPINFO; + +#line 97 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\malloc.h" + + + +extern unsigned int _amblksiz; + + + + + void * __cdecl calloc(size_t, size_t); + void __cdecl free(void *); + void * __cdecl malloc(size_t); + void * __cdecl realloc(void *, size_t); + + + + + + +void * __cdecl _alloca(size_t); + void * __cdecl _expand(void *, size_t); + size_t __cdecl _get_sbh_threshold(void); + int __cdecl _set_sbh_threshold(size_t); + int __cdecl _heapadd(void *, size_t); + int __cdecl _heapchk(void); + int __cdecl _heapmin(void); + int __cdecl _heapset(unsigned int); + int __cdecl _heapwalk(_HEAPINFO *); + size_t __cdecl _heapused(size_t *, size_t *); + size_t __cdecl _msize(void *); + + + + +#line 131 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\malloc.h" + + + +#line 135 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\malloc.h" + +#line 137 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\malloc.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#pragma pack(pop) +#line 165 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\malloc.h" + +#line 167 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\malloc.h" +#line 329 "system.h" +#line 330 "system.h" + + + +#line 334 "system.h" + + + +#line 338 "system.h" + + + +#line 342 "system.h" + + + + + +extern const char *strsignal (int); +#line 349 "system.h" +#line 350 "system.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 378 "system.h" + + + +#line 382 "system.h" + + + + + +#line 388 "system.h" + + + + + +#line 394 "system.h" + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + + + + + + + + + + + + + + +#pragma once +#line 18 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + + + + + +#line 25 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + + +#pragma pack(push,8) +#line 30 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + + + + + + + + + + + + + + + + + + + + + +#line 53 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 80 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + + + + + +struct _stat { + _dev_t st_dev; + _ino_t st_ino; + unsigned short st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + _off_t st_size; + time_t st_atime; + time_t st_mtime; + time_t st_ctime; + }; + + + + + + + + + + + + + + + + + + + +#line 119 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + +struct _stati64 { + _dev_t st_dev; + _ino_t st_ino; + unsigned short st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + __int64 st_size; + time_t st_atime; + time_t st_mtime; + time_t st_ctime; + }; +#line 135 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + +#line 138 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + + + + + + + + + + + + + + int __cdecl _fstat(int, struct _stat *); + int __cdecl _stat(const char *, struct _stat *); + + + int __cdecl _fstati64(int, struct _stati64 *); + int __cdecl _stati64(const char *, struct _stati64 *); +#line 159 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + + + + + + int __cdecl _wstat(const wchar_t *, struct _stat *); + + + int __cdecl _wstati64(const wchar_t *, struct _stati64 *); +#line 170 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + +#line 173 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" +#line 174 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + + + + + + + + + + + + + + + + +#line 192 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + + + + + + + +#pragma pack(pop) +#line 201 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" + +#line 203 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\sys/stat.h" +#line 398 "system.h" +#line 399 "system.h" + + + + +#line 404 "system.h" + + + + +#line 409 "system.h" + + + + +#line 414 "system.h" + + + + +#line 419 "system.h" + + + + + + + +#line 427 "system.h" +#line 428 "system.h" + + + + + + + +#line 436 "system.h" +#line 437 "system.h" + + + + +#line 442 "system.h" + + + + +#line 447 "system.h" + + + + +#line 452 "system.h" + + +#line 455 "system.h" + + +#line 458 "system.h" + + + + + + + + + + + + + + +#line 473 "system.h" +#line 474 "system.h" + + + + +#line 479 "system.h" + + + +#line 483 "system.h" + + + + + + + +#line 491 "system.h" + + + + + + + + + + + + +#line 504 "system.h" + + +#line 1 "libiberty.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 ".\\ansidecl.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 43 "libiberty.h" + + + + + + +#line 50 "libiberty.h" + + + + +extern char **buildargv (const char *) ; + + + +extern void freeargv (char **); + + + + +extern char **dupargv (char **) ; + + + + + + + + + + + + + + +#line 79 "libiberty.h" + +extern char *basename (); +#line 82 "libiberty.h" +#line 83 "libiberty.h" + + + +extern const char *lbasename (const char *); + + + + + +extern char *concat (const char *, ...) ; + + + + + + + + +extern char *reconcat (char *, const char *, ...) ; + + + + + +extern unsigned long concat_length (const char *, ...); + + + + + + +extern char *concat_copy (char *, const char *, ...); + + + + + + +extern char *concat_copy2 (const char *, ...); + + + +extern char *libiberty_concat_ptr; + + + + + + + + + + + +extern int fdmatch (int fd1, int fd2); + + + + +extern char * getpwd (void); + + + +extern long get_run_time (void); + + + +extern char *choose_temp_base (void) ; + + + +extern char *make_temp_file (const char *) ; + + + +extern const char *spaces (int count); + + + + +extern int errno_max (void); + + + + +extern const char *strerrno (int); + + + +extern int strtoerrno (const char *); + + + +extern char *xstrerror (int); + + + + +extern int signo_max (void); + + + + + + + + + + + +extern const char *strsigno (int); + + + +extern int strtosigno (const char *); + + + +extern int xatexit (void (*fn) (void)); + + + +extern void xexit (int status) ; + + + +extern void xmalloc_set_program_name (const char *); + + +extern void xmalloc_failed (size_t) ; + + + + + +extern void * xmalloc (size_t) ; + + + + + +extern void * xrealloc (void *, size_t); + + + + +extern void * xcalloc (size_t, size_t) ; + + + +extern char *xstrdup (const char *) ; + + + +extern void * xmemdup (const void *, size_t, size_t) ; + + + + + +extern const char _hex_value[256]; +extern void hex_init (void); + + + + + + + + + + + + + + + +extern int pexecute +(const char *, char * const *, const char *, const char *, char **, char **, int); + + + +extern int pwait (int, int *, int); + + + + +extern int asprintf (char **, const char *, ...) ; + + + + +extern int vasprintf (char **, const char *, va_list) + ; + + + + + + + + + +extern void * C_alloca (size_t) ; + + + + + + + + + +#line 297 "libiberty.h" + + + + + +extern const char *libiberty_optr; +extern char *libiberty_nptr; +extern unsigned long libiberty_len; + + + + + +#line 311 "libiberty.h" + + + + + + +#line 318 "libiberty.h" +#line 507 "system.h" +#line 1 "symcat.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 37 "symcat.h" + + + + + + + + + + + + +#line 50 "symcat.h" +#line 508 "system.h" + + + + + + +#line 515 "system.h" + + + + + + +#line 522 "system.h" + +#line 524 "system.h" + + + + + + + + + + + + + +#line 538 "system.h" + + + + + +#line 544 "system.h" +#line 545 "system.h" + + + + + + +#line 552 "system.h" + + + + + + + + + + + + + + +typedef char _Bool; +#line 568 "system.h" + + + +#line 572 "system.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 640 "system.h" + +#line 642 "system.h" +#line 24 "cppinit.c" +#line 1 "cpplib.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 "hashtable.h" + + + + + + + + + + + + + + + + + + + + +#line 1 "obstack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 124 "obstack.h" + + + +#line 128 "obstack.h" + + + + + + + + + + + + + + + +#line 144 "obstack.h" +#line 145 "obstack.h" + + + + + + + +#line 153 "obstack.h" + + + + + + +#line 160 "obstack.h" + +struct _obstack_chunk +{ + char *limit; + struct _obstack_chunk *prev; + char contents[4]; +}; + +struct obstack +{ + long chunk_size; + struct _obstack_chunk *chunk; + char *object_base; + char *next_free; + char *chunk_limit; + ptrdiff_t temp; + int alignment_mask; + + + + + struct _obstack_chunk *(*chunkfun) (void *, long); + void (*freefun) (void *, struct _obstack_chunk *); + void *extra_arg; + + + + +#line 189 "obstack.h" + unsigned use_extra_arg:1; + unsigned maybe_empty_object:1; + + + + unsigned alloc_failed:1; + + +}; + + + + +extern void _obstack_newchunk (struct obstack *, int); +extern void _obstack_free (struct obstack *, void *); +extern int _obstack_begin (struct obstack *, int, int, + void *(*) (long), void (*) (void *)); +extern int _obstack_begin_1 (struct obstack *, int, int, + void *(*) (void *, long), + void (*) (void *, void *), void *); +extern int _obstack_memory_used (struct obstack *); + + + + + + +#line 217 "obstack.h" + + + + + + +void obstack_init (struct obstack *obstack); + +void * obstack_alloc (struct obstack *obstack, int size); + +void * obstack_copy (struct obstack *obstack, void *address, int size); +void * obstack_copy0 (struct obstack *obstack, void *address, int size); + +void obstack_free (struct obstack *obstack, void *block); + +void obstack_blank (struct obstack *obstack, int size); + +void obstack_grow (struct obstack *obstack, void *data, int size); +void obstack_grow0 (struct obstack *obstack, void *data, int size); + +void obstack_1grow (struct obstack *obstack, int data_char); +void obstack_ptr_grow (struct obstack *obstack, void *data); +void obstack_int_grow (struct obstack *obstack, int data); + +void * obstack_finish (struct obstack *obstack); + +int obstack_object_size (struct obstack *obstack); + +int obstack_room (struct obstack *obstack); +void obstack_make_room (struct obstack *obstack, int size); +void obstack_1grow_fast (struct obstack *obstack, int data_char); +void obstack_ptr_grow_fast (struct obstack *obstack, void *data); +void obstack_int_grow_fast (struct obstack *obstack, int data); +void obstack_blank_fast (struct obstack *obstack, int size); + +void * obstack_base (struct obstack *obstack); +void * obstack_next_free (struct obstack *obstack); +int obstack_alignment_mask (struct obstack *obstack); +int obstack_chunk_size (struct obstack *obstack); +int obstack_memory_used (struct obstack *obstack); + +#line 259 "obstack.h" + + + + + + + + +extern void (*obstack_alloc_failed_handler) (void); + + +#line 271 "obstack.h" + + +extern int obstack_exit_failure; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 345 "obstack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 494 "obstack.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 592 "obstack.h" + +#line 594 "obstack.h" + + + + + +#line 600 "obstack.h" +#line 22 "hashtable.h" + + + +typedef struct ht_identifier ht_identifier; +struct ht_identifier +{ + unsigned int len; + const unsigned char *str; +}; + + + + + + + + +struct cpp_reader; +typedef struct ht hash_table; +typedef struct ht_identifier *hashnode; + +enum ht_lookup_option {HT_NO_INSERT = 0, HT_ALLOC, HT_ALLOCED}; + + +struct ht +{ + + struct obstack stack; + + hashnode *entries; + + hashnode (*alloc_node) (hash_table *); + + unsigned int nslots; + unsigned int nelements; + + + struct cpp_reader *pfile; + + + unsigned int searches; + unsigned int collisions; +}; + +extern void gcc_obstack_init (struct obstack *); + + +extern hash_table *ht_create (unsigned int order); + + +extern void ht_destroy (hash_table *); + +extern hashnode ht_lookup +(hash_table *, const unsigned char *, unsigned int, enum ht_lookup_option); + + + + +typedef int (*ht_cb) (struct cpp_reader *, hashnode, const void *); +extern void ht_forall (hash_table *, ht_cb, const void *); + + +extern void ht_dump_statistics (hash_table *); + + + +extern double approx_sqrt (double); + +#line 91 "hashtable.h" +#line 28 "cpplib.h" +#line 1 "line-map.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +enum lc_reason {LC_ENTER = 0, LC_LEAVE, LC_RENAME}; + + + + + + + + + +struct line_map +{ + const char *to_file; + unsigned int to_line; + unsigned int from_line; + int included_from; + unsigned int reason : 8; + unsigned char sysp; +}; + + +struct line_maps +{ + struct line_map *maps; + unsigned int allocated; + unsigned int used; + + + + + int last_listed; + + + unsigned int depth; + + + _Bool trace_includes; +}; + + +extern void init_line_maps + (struct line_maps *); + + +extern void free_line_maps + (struct line_maps *); + + + + + + + + + + +extern const struct line_map *add_line_map + +(struct line_maps *, enum lc_reason, unsigned int sysp, unsigned int from_line, const char *to_file, unsigned int to_line); + + + +extern const struct line_map *lookup_line + (struct line_maps *, unsigned int); + + + + +extern void print_containing_files + (struct line_maps *, const struct line_map *); + + + + + + + + + + + + + + + + + + +#line 120 "line-map.h" +#line 29 "cpplib.h" + + + + + + + +typedef struct cpp_reader cpp_reader; +#line 38 "cpplib.h" +typedef struct cpp_buffer cpp_buffer; +typedef struct cpp_options cpp_options; +typedef struct cpp_token cpp_token; +typedef struct cpp_string cpp_string; +typedef struct cpp_hashnode cpp_hashnode; +typedef struct cpp_macro cpp_macro; +typedef struct cpp_callbacks cpp_callbacks; + +struct answer; +struct file_name_map_list; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +enum cpp_ttype +{ + CPP_EQ = 0, CPP_NOT, CPP_GREATER, CPP_LESS, CPP_PLUS, CPP_MINUS, CPP_MULT, CPP_DIV, CPP_MOD, CPP_AND, CPP_OR, CPP_XOR, CPP_RSHIFT, CPP_LSHIFT, CPP_MIN, CPP_MAX, CPP_COMPL, CPP_AND_AND, CPP_OR_OR, CPP_QUERY, CPP_COLON, CPP_COMMA, CPP_OPEN_PAREN, CPP_CLOSE_PAREN, CPP_EQ_EQ, CPP_NOT_EQ, CPP_GREATER_EQ, CPP_LESS_EQ, CPP_PLUS_EQ, CPP_MINUS_EQ, CPP_MULT_EQ, CPP_DIV_EQ, CPP_MOD_EQ, CPP_AND_EQ, CPP_OR_EQ, CPP_XOR_EQ, CPP_RSHIFT_EQ, CPP_LSHIFT_EQ, CPP_MIN_EQ, CPP_MAX_EQ, CPP_HASH, CPP_PASTE, CPP_OPEN_SQUARE, CPP_CLOSE_SQUARE, CPP_OPEN_BRACE, CPP_CLOSE_BRACE, CPP_SEMICOLON, CPP_ELLIPSIS, CPP_PLUS_PLUS, CPP_MINUS_MINUS, CPP_DEREF, CPP_DOT, CPP_SCOPE, CPP_DEREF_STAR, CPP_DOT_STAR, CPP_ATSIGN, CPP_NAME, CPP_NUMBER, CPP_CHAR, CPP_WCHAR, CPP_OTHER, CPP_STRING, CPP_WSTRING, CPP_HEADER_NAME, CPP_COMMENT, CPP_MACRO_ARG, CPP_PADDING, CPP_EOF, + N_TTYPES +}; + + + + +enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99, + CLK_GNUCXX, CLK_CXX98, CLK_OBJC, CLK_OBJCXX, CLK_ASM}; + + +struct cpp_string +{ + unsigned int len; + const unsigned char *text; +}; + + + + + + + + + + + + +struct cpp_token +{ + unsigned int line; + unsigned short col; + unsigned int type : 8; + unsigned char flags; + + union + { + cpp_hashnode *node; + const cpp_token *source; + struct cpp_string str; + unsigned int arg_no; + unsigned char c; + } val; +}; + + + +typedef int cppchar_t; + + + + + + + + +enum { dump_none = 0, dump_only, dump_names, dump_definitions }; + + + +struct cpp_options +{ + + const char *in_fname; + const char *out_fname; + + + unsigned int tabstop; + + + struct cpp_pending *pending; + + + + const char *deps_file; + + + struct search_path *quote_include; + struct search_path *bracket_include; + + + + struct file_name_map_list *map_list; + + + + const char *include_prefix; + unsigned int include_prefix_len; + + + const char *user_label_prefix; + + + enum c_lang lang; + + + unsigned char verbose; + + + unsigned char signed_char; + + + unsigned char cplusplus; + + + unsigned char cplusplus_comments; + + + unsigned char objc; + + + unsigned char discard_comments; + + + unsigned char trigraphs; + + + unsigned char digraphs; + + + unsigned char extended_numbers; + + + + + unsigned char print_deps; + + + unsigned char deps_phony_targets; + + + + unsigned char print_deps_missing_files; + + + unsigned char print_deps_append; + + + unsigned char print_include_names; + + + unsigned char pedantic_errors; + + + unsigned char inhibit_warnings; + + + unsigned char warn_system_headers; + + + + unsigned char inhibit_errors; + + + unsigned char warn_comments; + + + unsigned char warn_trigraphs; + + + unsigned char warn_import; + + + + unsigned char warn_traditional; + + + unsigned char warnings_are_errors; + + + + unsigned char no_output; + + + + unsigned char remap; + + + unsigned char no_line_commands; + + + + unsigned char ignore_srcdir; + + + unsigned char dollars_in_ident; + + + unsigned char warn_undef; + + + unsigned char c99; + + + unsigned char pedantic; + + + + unsigned char preprocessed; + + + unsigned char no_standard_includes; + + + unsigned char no_standard_cplusplus_includes; + + + unsigned char dump_macros; + + + unsigned char dump_includes; + + + unsigned char show_column; + + + unsigned char operator_names; + + + + + unsigned char help_only; +}; + + +struct cpp_callbacks +{ + + void (*line_change) (cpp_reader *, const cpp_token *, int); + void (*file_change) (cpp_reader *, const struct line_map *); + void (*include) +(cpp_reader *, unsigned int, const unsigned char *, const cpp_token *); + void (*define) (cpp_reader *, unsigned int, cpp_hashnode *); + void (*undef) (cpp_reader *, unsigned int, cpp_hashnode *); + void (*ident) (cpp_reader *, unsigned int, const cpp_string *); + void (*def_pragma) (cpp_reader *, unsigned int); +}; + + + + + + +extern const char *progname; + + + + + + + + + + + + + + + + + + + + + +enum node_type +{ + NT_VOID = 0, + NT_MACRO, + NT_ASSERTION +}; + + + +enum builtin_type +{ + BT_SPECLINE = 0, + BT_DATE, + BT_FILE, + BT_BASE_FILE, + BT_INCLUDE_LEVEL, + BT_TIME, + BT_STDC, + BT_PRAGMA +}; + + + + + + + + + +struct cpp_hashnode +{ + struct ht_identifier ident; + unsigned short arg_index; + unsigned char directive_index; + unsigned char rid_code; + unsigned int type : 8; + unsigned char flags; + + union + { + cpp_macro *macro; + struct answer *answers; + enum cpp_ttype operator; + enum builtin_type builtin; + } value; +}; + + +extern cpp_reader *cpp_create_reader (enum c_lang); + + + + + + +extern cpp_options *cpp_get_options (cpp_reader *); +extern const struct line_maps *cpp_get_line_maps (cpp_reader *); +extern cpp_callbacks *cpp_get_callbacks (cpp_reader *); +extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *); + + + + + + + + + +extern int cpp_handle_options (cpp_reader *, int, char **); +extern int cpp_handle_option (cpp_reader *, int, char **, int); +extern void cpp_post_options (cpp_reader *); + + + + + + + + + + + +extern const char *cpp_read_main_file +(cpp_reader *, const char *, struct ht *); + + + + + + +extern void cpp_finish_options (cpp_reader *); + + + + +extern int cpp_destroy (cpp_reader *); + + +extern unsigned int cpp_errors (cpp_reader *); + +extern unsigned int cpp_token_len (const cpp_token *); +extern unsigned char *cpp_token_as_text +(cpp_reader *, const cpp_token *); +extern unsigned char *cpp_spell_token +(cpp_reader *, const cpp_token *, unsigned char *); +extern void cpp_register_pragma + +(cpp_reader *, const char *, const char *, void (*) (cpp_reader *)); + +extern void cpp_finish (cpp_reader *); +extern int cpp_avoid_paste +(cpp_reader *, const cpp_token *, const cpp_token *); +extern const cpp_token *cpp_get_token (cpp_reader *); +extern const unsigned char *cpp_macro_definition +(cpp_reader *, const cpp_hashnode *); +extern void _cpp_backup_tokens (cpp_reader *, unsigned int); + + +extern long +cpp_interpret_charconst +(cpp_reader *, const cpp_token *, int, int, unsigned int *); + +extern void cpp_define (cpp_reader *, const char *); +extern void cpp_assert (cpp_reader *, const char *); +extern void cpp_undef (cpp_reader *, const char *); +extern void cpp_unassert (cpp_reader *, const char *); + +extern cpp_buffer *cpp_push_buffer + +(cpp_reader *, const unsigned char *, size_t, int, int); +extern int cpp_defined (cpp_reader *, const unsigned char *, int); + + + + + + + +extern void cpp_ice (cpp_reader *, const char *msgid, ...) + ; +extern void cpp_fatal (cpp_reader *, const char *msgid, ...) + ; +extern void cpp_error (cpp_reader *, const char *msgid, ...) + ; +extern void cpp_warning (cpp_reader *, const char *msgid, ...) + ; +extern void cpp_pedwarn (cpp_reader *, const char *msgid, ...) + ; +extern void cpp_notice (cpp_reader *, const char *msgid, ...) + ; +extern void cpp_error_with_line (cpp_reader *, int, int, const char *msgid, ...) + ; +extern void cpp_warning_with_line (cpp_reader *, int, int, const char *msgid, ...) + ; +extern void cpp_pedwarn_with_line (cpp_reader *, int, int, const char *msgid, ...) + ; +extern void cpp_error_from_errno (cpp_reader *, const char *); +extern void cpp_notice_from_errno (cpp_reader *, const char *); + + +extern int cpp_ideq +(const cpp_token *, const char *); +extern void cpp_output_line (cpp_reader *, FILE *); +extern void cpp_output_token (const cpp_token *, FILE *); +extern const char *cpp_type2name (enum cpp_ttype); +extern unsigned int cpp_parse_escape + + +(cpp_reader *, const unsigned char **, const unsigned char *, unsigned long, int); + + + + + +extern cpp_hashnode *cpp_lookup + +(cpp_reader *, const unsigned char *, unsigned int); + +typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *); +extern void cpp_forall_identifiers +(cpp_reader *, cpp_cb, void *); + + +extern void cpp_scan_nooutput (cpp_reader *); +extern int cpp_sys_macro_p (cpp_reader *); +extern unsigned char *cpp_quote_string + +(unsigned char *, const unsigned char *, unsigned int); + + +extern int cpp_included (cpp_reader *, const char *); +extern void cpp_make_system_header (cpp_reader *, int, int); + + + + + +#line 608 "cpplib.h" +#line 25 "cppinit.c" +#line 1 "cpphash.h" + + + + + + + + + + + + + + + + + + + + + + + + + +#line 1 "hashtable.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 27 "cpphash.h" + +struct directive; + + + + + + + + + + + + + + + + + + +typedef struct _cpp_buff _cpp_buff; +struct _cpp_buff +{ + struct _cpp_buff *next; + unsigned char *base, *cur, *limit; +}; + +extern _cpp_buff *_cpp_get_buff (cpp_reader *, size_t); +extern void _cpp_release_buff (cpp_reader *, _cpp_buff *); +extern void _cpp_extend_buff (cpp_reader *, _cpp_buff **, size_t); +extern _cpp_buff *_cpp_append_extend_buff +(cpp_reader *, _cpp_buff *, size_t); +#line 59 "cpphash.h" +extern void _cpp_free_buff (_cpp_buff *); +extern unsigned char *_cpp_aligned_alloc (cpp_reader *, size_t); +extern unsigned char *_cpp_unaligned_alloc (cpp_reader *, size_t); + + + + + + +struct search_path +{ + struct search_path *next; + + + + const char *name; + unsigned int len; + + + ino_t ino; + dev_t dev; + + int sysp; + + + struct file_name_map *name_map; +}; + + +enum include_type {IT_INCLUDE, IT_INCLUDE_NEXT, IT_IMPORT, IT_CMDLINE}; + +union utoken +{ + const cpp_token *token; + const cpp_token **ptoken; +}; + + +typedef struct tokenrun tokenrun; +struct tokenrun +{ + tokenrun *next, *prev; + cpp_token *base, *limit; +}; + +typedef struct cpp_context cpp_context; +struct cpp_context +{ + + cpp_context *next, *prev; + + + + union utoken first; + union utoken last; + + + + _cpp_buff *buff; + + + cpp_hashnode *macro; + + + _Bool direct_p; +}; + +struct lexer_state +{ + + unsigned char in_directive; + + + unsigned char skipping; + + + unsigned char angled_headers; + + + + unsigned char save_comments; + + + unsigned char lexing_comment; + + + unsigned char va_args_ok; + + + unsigned char poisoned_ok; + + + unsigned char prevent_expansion; + + + unsigned char parsing_args; +}; + + +struct spec_nodes +{ + cpp_hashnode *n_defined; + cpp_hashnode *n_true; + cpp_hashnode *n_false; + cpp_hashnode *n__STRICT_ANSI__; + cpp_hashnode *n__VA_ARGS__; +}; + + +struct cpp_buffer +{ + const unsigned char *cur; + const unsigned char *backup_to; + const unsigned char *rlimit; + const unsigned char *line_base; + + struct cpp_buffer *prev; + + const unsigned char *buf; + + + + struct include_file *inc; + + + + struct if_stack *if_stack; + + + unsigned int col_adjust; + + + unsigned char saved_flags; + + + + const unsigned char *last_Wtrigraphs; + + + + + + unsigned char warned_cplusplus_comments; + + + + + unsigned char from_stage3; + + + + unsigned char search_cached; + + + + + _Bool return_at_eof; + + + + struct search_path dir; +}; + + + + +struct cpp_reader +{ + + cpp_buffer *buffer; + + + struct lexer_state state; + + + struct line_maps line_maps; + const struct line_map *map; + unsigned int line; + + + unsigned int directive_line; + + + _cpp_buff *a_buff; + _cpp_buff *u_buff; + _cpp_buff *free_buffs; + + + struct cpp_context base_context; + struct cpp_context *context; + + + const struct directive *directive; + + + const cpp_hashnode *mi_cmacro; + const cpp_hashnode *mi_ind_cmacro; + _Bool mi_valid; + + + cpp_token *cur_token; + tokenrun base_run, *cur_run; + unsigned int lookaheads; + + + unsigned int keep_tokens; + + + unsigned int errors; + + + + unsigned int mls_line; + unsigned int mls_col; + + + unsigned char *macro_buffer; + unsigned int macro_buffer_len; + + + struct splay_tree_s *all_include_files; + + + + unsigned int max_include_len; + + + cpp_token date; + cpp_token time; + + + cpp_token avoid_paste; + cpp_token eof; + + + struct deps *deps; + + + + struct obstack hash_ob; + + + + struct obstack buffer_ob; + + + + struct pragma_entry *pragmas; + + + struct cpp_callbacks cb; + + + struct ht *hash_table; + + + struct cpp_options opts; + + + + struct spec_nodes spec_nodes; + + + + unsigned char print_version; + + + unsigned char our_hashtable; +}; + + + + + + + + + + + + + + + + + + + + + + + + +#line 353 "cpphash.h" +extern unsigned char _cpp_trigraph_map[0xff + 1]; +#line 355 "cpphash.h" + + + + + + + + + +enum error_type { WARNING = 0, WARNING_SYSHDR, PEDWARN, ERROR, FATAL, ICE }; +extern int _cpp_begin_message +(cpp_reader *, enum error_type, unsigned int, unsigned int); + + +extern void _cpp_free_definition (cpp_hashnode *); +extern int _cpp_create_definition (cpp_reader *, cpp_hashnode *); +extern void _cpp_pop_context (cpp_reader *); + + +extern void _cpp_init_hashtable (cpp_reader *, hash_table *); +extern void _cpp_destroy_hashtable (cpp_reader *); + + +extern void _cpp_fake_include (cpp_reader *, const char *); +extern void _cpp_never_reread (struct include_file *); +extern char *_cpp_simplify_pathname (char *); +extern _Bool _cpp_read_file (cpp_reader *, const char *); +extern _Bool _cpp_execute_include + +(cpp_reader *, const cpp_token *, enum include_type); +extern int _cpp_compare_file_date +(cpp_reader *, const cpp_token *); +extern void _cpp_report_missing_guards (cpp_reader *); +extern void _cpp_init_includes (cpp_reader *); +extern void _cpp_cleanup_includes (cpp_reader *); +extern _Bool _cpp_pop_file_buffer +(cpp_reader *, struct include_file *); + + +extern int _cpp_parse_expr (cpp_reader *); + + +extern cpp_token *_cpp_temp_token (cpp_reader *); +extern const cpp_token *_cpp_lex_token (cpp_reader *); +extern cpp_token *_cpp_lex_direct (cpp_reader *); +extern int _cpp_equiv_tokens +(const cpp_token *, const cpp_token *); +extern void _cpp_init_tokenrun (tokenrun *, unsigned int); + + +extern _Bool _cpp_push_next_buffer (cpp_reader *); + + +extern int _cpp_test_assertion (cpp_reader *, int *); +extern int _cpp_handle_directive (cpp_reader *, int); +extern void _cpp_define_builtin (cpp_reader *, const char *); +extern void _cpp_do__Pragma (cpp_reader *); +extern void _cpp_init_directives (cpp_reader *); +extern void _cpp_init_internal_pragmas (cpp_reader *); +extern void _cpp_do_file_change + +(cpp_reader *, enum lc_reason, const char *, unsigned int, unsigned int); +extern void _cpp_pop_buffer (cpp_reader *); + + + + + + + + + + + +typedef unsigned char U_CHAR; + + +static int ustrcmp (const U_CHAR *, const U_CHAR *); +static int ustrncmp +(const U_CHAR *, const U_CHAR *, size_t); +#line 435 "cpphash.h" +static size_t ustrlen (const U_CHAR *); +static U_CHAR *uxstrdup (const U_CHAR *); +static U_CHAR *ustrchr (const U_CHAR *, int); +static int ufputs (const U_CHAR *, FILE *); + +static int +ustrcmp (s1, s2) + const U_CHAR *s1, *s2; +{ + return strcmp ((const char *)s1, (const char *)s2); +} + +static int +ustrncmp (s1, s2, n) + const U_CHAR *s1, *s2; + size_t n; +{ + return strncmp ((const char *)s1, (const char *)s2, n); +} + +static size_t +ustrlen (s1) + const U_CHAR *s1; +{ + return strlen ((const char *)s1); +} + +static U_CHAR * +uxstrdup (s1) + const U_CHAR *s1; +{ + return (U_CHAR *) xstrdup ((const char *)s1); +} + +static U_CHAR * +ustrchr (s1, c) + const U_CHAR *s1; + int c; +{ + return (U_CHAR *) strchr ((const char *)s1, c); +} + +static int +ufputs (s, f) + const U_CHAR *s; + FILE *f; +{ + return fputs ((const char *)s, f); +} + +#line 486 "cpphash.h" +#line 26 "cppinit.c" +#line 1 "prefix.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern char *update_path (const char *path, const char *key); +extern void set_std_prefix (const char *, int); + +#line 32 "prefix.h" +#line 27 "cppinit.c" +#line 1 "intl.h" + + + + + + + + + + + + + + + + + + + + + + +#line 1 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\locale.h" + + + + + + + + + + + + + + +#pragma once +#line 17 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\locale.h" + + + + + + +#line 24 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\locale.h" + + + + + + + +#pragma pack(push,8) +#line 33 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\locale.h" + + + + + + + + + + + + + + + + + + + + + + +#line 56 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\locale.h" + + + + + + + + + + + + + + + + + +#line 74 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\locale.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct lconv { + char *decimal_point; + char *thousands_sep; + char *grouping; + char *int_curr_symbol; + char *currency_symbol; + char *mon_decimal_point; + char *mon_thousands_sep; + char *mon_grouping; + char *positive_sign; + char *negative_sign; + char int_frac_digits; + char frac_digits; + char p_cs_precedes; + char p_sep_by_space; + char n_cs_precedes; + char n_sep_by_space; + char p_sign_posn; + char n_sign_posn; + }; + +#line 123 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\locale.h" + + + + + + + + + + + + + char * __cdecl setlocale(int, const char *); + struct lconv * __cdecl localeconv(void); + + + + + + + wchar_t * __cdecl _wsetlocale(int, const wchar_t *); + + +#line 147 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\locale.h" +#line 148 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\locale.h" + + + + + + +#pragma pack(pop) +#line 156 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\locale.h" + +#line 158 "C:\\Program Files\\Microsoft Visual Studio\\VC98\\include\\locale.h" +#line 24 "intl.h" +#line 25 "intl.h" + + + +#line 29 "intl.h" + + + + + + + + +#line 38 "intl.h" +#line 39 "intl.h" + + + + + + + + + + + + +#line 52 "intl.h" + + + +#line 56 "intl.h" + + + +#line 60 "intl.h" + +#line 62 "intl.h" +#line 28 "cppinit.c" +#line 1 "version.h" + + +extern const char *const version_string; +#line 5 "version.h" +#line 29 "cppinit.c" +#line 1 "mkdeps.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct deps; + + +extern struct deps *deps_init (void); + + +extern void deps_free (struct deps *); + + + +extern void deps_add_target (struct deps *, const char *, int); + + + +extern void deps_add_default_target (struct deps *, const char *); + + + + + +extern void deps_add_dep (struct deps *, const char *); + + + +extern void deps_write +(const struct deps *, FILE *, unsigned int); + + + + + +extern void deps_phony_targets (const struct deps *, FILE *); + +#line 63 "mkdeps.h" +#line 30 "cppinit.c" +#line 1 "cppdefault.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#line 32 "cppdefault.h" + + + +#line 36 "cppdefault.h" + + + + + + + +#line 44 "cppdefault.h" + + + + + + + + + + + +#line 56 "cppdefault.h" + + + + + +#line 62 "cppdefault.h" + + + + + +#line 68 "cppdefault.h" + + + + + +#line 74 "cppdefault.h" + + + + + +#line 80 "cppdefault.h" + + + + + +#line 86 "cppdefault.h" + + + + + + + + + + + +struct default_include +{ + const char *const fname; + const char *const component; + + const int cplusplus; + const int cxx_aware; + + +}; + +extern const struct default_include cpp_include_defaults[]; +extern const char cpp_GCC_INCLUDE_DIR[]; +extern const size_t cpp_GCC_INCLUDE_DIR_len; + +#line 113 "cppdefault.h" +#line 31 "cppinit.c" +#line 1 "except.h" + + + + + + + + + + + + + + + + + + + + + + + + +struct varray_head_tag; + +#line 28 "except.h" + +struct function; + +struct inline_remap; + + + +struct eh_status; + + +struct eh_region; + + +extern int doing_eh (int); + + + + +extern void expand_eh_region_start (void); + + + +extern void expand_eh_region_end_cleanup (tree); + + + +extern void expand_start_all_catch (void); + + + + +extern void expand_start_catch (tree); + + +extern void expand_end_catch (void); + + +extern void expand_end_all_catch (void); + + + + +extern void expand_eh_region_end_allowed (tree, tree); + + + +extern void expand_eh_region_end_must_not_throw (tree); + + + + +extern void expand_eh_region_end_throw (tree); + + + + +extern void expand_eh_region_end_fixup (tree); + + + +extern void begin_protect_partials (void); + + + + +extern void add_partial_entry (tree); + + + +extern void end_protect_partials (void); + + + + + +#line 104 "except.h" + + + + + +#line 110 "except.h" + + +extern _Bool nothrow_function_p (void); + + + +extern void finish_eh_generation (void); + +extern void init_eh (void); +extern void init_eh_for_function (void); + + + + +#line 125 "except.h" + +extern void convert_from_eh_region_ranges (void); +extern void convert_to_eh_region_ranges (void); +extern void find_exception_handler_labels (void); +extern _Bool current_function_has_exception_handlers (void); +extern void output_function_exception_table (void); + +extern void expand_builtin_unwind_init (void); + + + + + + + +#line 141 "except.h" +extern void expand_eh_return (void); + + + + + + + + + + + + + + + + + + + + + +#line 164 "except.h" + + + +#line 168 "except.h" + + + + + + + + + + +#line 184 "except.h" + + + + + + + + + + + + + + + + + + + + + + +#line 207 "except.h" +#line 32 "cppinit.c" + + + + + +#line 38 "cppinit.c" + + + + + + + + + + + + +#line 51 "cppinit.c" + +#line 53 "cppinit.c" + + + + + +typedef void (* cl_directive_handler) (cpp_reader *, const char *); +struct pending_option +{ + struct pending_option *next; + const char *arg; + cl_directive_handler handler; +}; + + + + + +struct cpp_pending +{ + struct pending_option *directive_head, *directive_tail; + + struct search_path *quote_head, *quote_tail; + struct search_path *brack_head, *brack_tail; + struct search_path *systm_head, *systm_tail; + struct search_path *after_head, *after_tail; + + struct pending_option *imacros_head, *imacros_tail; + struct pending_option *include_head, *include_tail; +}; + + + + + + + + + + + + + +#line 96 "cppinit.c" + +static void print_help (void); +static void path_include +(cpp_reader *, char *, int); +static void init_library (void); +static void init_builtins (cpp_reader *); +static void mark_named_operators (cpp_reader *); +static void append_include_chain +(cpp_reader *, char *, int, int); +static struct search_path * remove_dup_dir +(cpp_reader *, struct search_path *); +static struct search_path * remove_dup_dirs +(cpp_reader *, struct search_path *); +static void merge_include_chains (cpp_reader *); +static _Bool push_include +(cpp_reader *, struct pending_option *); +static void free_chain (struct pending_option *); +static void set_lang (cpp_reader *, enum c_lang); +static void init_dependency_output (cpp_reader *); +static void init_standard_includes (cpp_reader *); +static void read_original_filename (cpp_reader *); +static void new_pending_directive + +(struct cpp_pending *, const char *, cl_directive_handler); +#line 120 "cppinit.c" +static void output_deps (cpp_reader *); +static int parse_option (const char *); + + + +enum { BRACKET = 0, SYSTEM, AFTER }; + + + + + + + + + + + + + +#line 140 "cppinit.c" + + + + + + + + +#line 149 "cppinit.c" + +U_CHAR _cpp_trigraph_map[0xff + 1] = { 0 }; static void init_trigraph_map (void) { unsigned char *x = _cpp_trigraph_map; + x['='] = '#'; x[')'] = ']'; x['!'] = '|'; + x['('] = '['; x['\''] = '^'; x['>'] = '}'; + x['/'] = '\\'; x['<'] = '{'; x['-'] = '~'; +} + + + + + + + +static void +path_include (pfile, list, path) + cpp_reader *pfile; + char *list; + int path; +{ + char *p, *q, *name; + + p = list; + + do + { + + q = p; + while (*q != 0 && *q != ':') q++; + if (q == p) + { + + name = (char *) xmalloc (2); + name[0] = '.'; + name[1] = 0; + } + else + { + + name = (char *) xmalloc (q - p + 1); + memcpy (name, p, q - p); + name[q - p] = 0; + } + + append_include_chain (pfile, name, path, 0); + + + if (*q == 0) + break; + p = q + 1; + } + while (1); +} + + + + + +static void +append_include_chain (pfile, dir, path, cxx_aware) + cpp_reader *pfile; + char *dir; + int path; + int cxx_aware ; +{ + struct cpp_pending *pend = ((pfile)->opts.pending); + struct search_path *new; + struct stat st; + unsigned int len; + + if (*dir == '\0') + { + free (dir); + dir = xstrdup ("."); + } + _cpp_simplify_pathname (dir); + + if (stat (dir, &st)) + { + + if (errno != 2) + cpp_notice_from_errno (pfile, dir); + else if (((pfile)->opts.verbose)) + fprintf ((&_iob[2]), ("ignoring nonexistent directory \"%s\"\n"), dir); + free (dir); + return; + } + + if (!(((st.st_mode) & S_IFMT) == S_IFDIR)) + { + cpp_notice (pfile, "%s: Not a directory", dir); + free (dir); + return; + } + + len = strlen (dir); + if (len > pfile->max_include_len) + pfile->max_include_len = len; + + new = (struct search_path *) xmalloc (sizeof (struct search_path)); + new->name = dir; + new->len = len; + (new->ino) = (st.st_ino); + new->dev = st.st_dev; + + + + if (path == SYSTEM || path == AFTER) + + + + new->sysp = cxx_aware ? 1 : 2; +#line 261 "cppinit.c" + else + new->sysp = 0; + new->name_map = ((void *)0); + new->next = ((void *)0); + + switch (path) + { + case BRACKET: do { if (!(pend)->brack_head) (pend)->brack_head = (new); else (pend)->brack_tail->next = (new); (pend)->brack_tail = (new); } while (0); break; + case SYSTEM: do { if (!(pend)->systm_head) (pend)->systm_head = (new); else (pend)->systm_tail->next = (new); (pend)->systm_tail = (new); } while (0); break; + case AFTER: do { if (!(pend)->after_head) (pend)->after_head = (new); else (pend)->after_tail->next = (new); (pend)->after_tail = (new); } while (0); break; + } +} + + + + +static struct search_path * +remove_dup_dir (pfile, prev) + cpp_reader *pfile; + struct search_path *prev; +{ + struct search_path *cur = prev->next; + + if (((pfile)->opts.verbose)) + fprintf ((&_iob[2]), ("ignoring duplicate directory \"%s\"\n"), cur->name); + + prev->next = cur->next; + free ((void *) cur->name); + free (cur); + + return prev; +} + + + + + +static struct search_path * +remove_dup_dirs (pfile, head) + cpp_reader *pfile; + struct search_path *head; +{ + struct search_path *prev = ((void *)0), *cur, *other; + + for (cur = head; cur; cur = cur->next) + { + for (other = head; other != cur; other = other->next) + if (0 && cur->dev == other->dev) + { + if (cur->sysp && !other->sysp) + { + cpp_warning (pfile, + "changing search order for system directory \"%s\"", + cur->name); + if (strcmp (cur->name, other->name)) + cpp_warning (pfile, + " as it is the same as non-system directory \"%s\"", + other->name); + else + cpp_warning (pfile, + " as it has already been specified as a non-system directory"); + } + cur = remove_dup_dir (pfile, prev); + break; + } + prev = cur; + } + + return prev; +} + + + + + + +static void +merge_include_chains (pfile) + cpp_reader *pfile; +{ + struct search_path *quote, *brack, *systm, *qtail; + + struct cpp_pending *pend = ((pfile)->opts.pending); + + quote = pend->quote_head; + brack = pend->brack_head; + systm = pend->systm_head; + qtail = pend->quote_tail; + + + if (systm) + pend->systm_tail->next = pend->after_head; + else + systm = pend->after_head; + + if (brack) + pend->brack_tail->next = systm; + else + brack = systm; + + + + + + + + + + + + + remove_dup_dirs (pfile, brack); + qtail = remove_dup_dirs (pfile, quote); + + if (quote) + { + qtail->next = brack; + + + if (brack && 0 + && qtail->dev == brack->dev) + brack = remove_dup_dir (pfile, qtail); + } + else + quote = brack; + + ((pfile)->opts.quote_include) = quote; + ((pfile)->opts.bracket_include) = brack; +} + + + +struct lang_flags +{ + char c99; + char objc; + char cplusplus; + char extended_numbers; + char trigraphs; + char dollars_in_ident; + char cplusplus_comments; + char digraphs; +}; + + +static const struct lang_flags lang_defaults[] = +{ + { 0, 0, 0, 1, 0, 1, 1, 1 }, + { 1, 0, 0, 1, 0, 1, 1, 1 }, + { 0, 0, 0, 0, 1, 0, 0, 0 }, + { 0, 0, 0, 0, 1, 0, 0, 1 }, + { 1, 0, 0, 1, 1, 0, 1, 1 }, + { 0, 0, 1, 1, 0, 1, 1, 1 }, + { 0, 0, 1, 1, 1, 0, 1, 1 }, + { 0, 1, 0, 1, 0, 1, 1, 1 }, + { 0, 1, 1, 1, 0, 1, 1, 1 }, + { 0, 0, 0, 1, 0, 0, 1, 0 } +}; + + +static void +set_lang (pfile, lang) + cpp_reader *pfile; + enum c_lang lang; +{ + const struct lang_flags *l = &lang_defaults[(int) lang]; + + ((pfile)->opts.lang) = lang; + + ((pfile)->opts.c99) = l->c99; + ((pfile)->opts.objc) = l->objc; + ((pfile)->opts.cplusplus) = l->cplusplus; + ((pfile)->opts.extended_numbers) = l->extended_numbers; + ((pfile)->opts.trigraphs) = l->trigraphs; + ((pfile)->opts.dollars_in_ident) = l->dollars_in_ident; + ((pfile)->opts.cplusplus_comments) = l->cplusplus_comments; + ((pfile)->opts.digraphs) = l->digraphs; +} + + + + + + + + + + + + + + + + +static void +init_library () +{ + static int initialized = 0; + + if (! initialized) + { + initialized = 1; + + + + + + + + + + + init_trigraph_map (); + } +} + + +cpp_reader * +cpp_create_reader (lang) + enum c_lang lang; +{ + cpp_reader *pfile; + + + init_library (); + + pfile = (cpp_reader *) xcalloc (1, sizeof (cpp_reader)); + + set_lang (pfile, lang); + ((pfile)->opts.warn_import) = 1; + ((pfile)->opts.discard_comments) = 1; + ((pfile)->opts.show_column) = 1; + ((pfile)->opts.tabstop) = 8; + ((pfile)->opts.operator_names) = 1; + + +#line 498 "cppinit.c" + ((pfile)->opts.signed_char) = 0; +#line 500 "cppinit.c" + + ((pfile)->opts.pending) = + (struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending)); + + + + pfile->deps = deps_init (); + + + + init_line_maps (&pfile->line_maps); + pfile->line = 1; + + + pfile->state.save_comments = ! ((pfile)->opts.discard_comments); + + + pfile->date.type = CPP_EOF; + pfile->avoid_paste.type = CPP_PADDING; + pfile->avoid_paste.val.source = ((void *)0); + pfile->eof.type = CPP_EOF; + pfile->eof.flags = 0; + + + _cpp_init_tokenrun (&pfile->base_run, 250); + pfile->cur_run = &pfile->base_run; + pfile->cur_token = pfile->base_run.base; + + + pfile->context = &pfile->base_context; + pfile->base_context.macro = 0; + pfile->base_context.prev = pfile->base_context.next = 0; + + + pfile->a_buff = _cpp_get_buff (pfile, 0); + pfile->u_buff = _cpp_get_buff (pfile, 0); + + + gcc_obstack_init (&pfile->buffer_ob); + + _cpp_init_includes (pfile); + + return pfile; +} + + + +int +cpp_destroy (pfile) + cpp_reader *pfile; +{ + int result; + struct search_path *dir, *dirn; + cpp_context *context, *contextn; + tokenrun *run, *runn; + + while (((pfile)->buffer) != ((void *)0)) + _cpp_pop_buffer (pfile); + + if (pfile->macro_buffer) + { + free ((void *) pfile->macro_buffer); + pfile->macro_buffer = ((void *)0); + pfile->macro_buffer_len = 0; + } + + deps_free (pfile->deps); + ( (&pfile->buffer_ob)->temp = (char *) (0) - (char *) (&pfile->buffer_ob)->chunk, (((&pfile->buffer_ob)->temp > 0 && (&pfile->buffer_ob)->temp < (&pfile->buffer_ob)->chunk_limit - (char *) (&pfile->buffer_ob)->chunk) ? (int) ((&pfile->buffer_ob)->next_free = (&pfile->buffer_ob)->object_base = (&pfile->buffer_ob)->temp + (char *) (&pfile->buffer_ob)->chunk) : (((obstack_free) ((&pfile->buffer_ob), (&pfile->buffer_ob)->temp + (char *) (&pfile->buffer_ob)->chunk), 0), 0))); + + _cpp_destroy_hashtable (pfile); + _cpp_cleanup_includes (pfile); + + _cpp_free_buff (pfile->a_buff); + _cpp_free_buff (pfile->u_buff); + _cpp_free_buff (pfile->free_buffs); + + for (run = &pfile->base_run; run; run = runn) + { + runn = run->next; + free (run->base); + if (run != &pfile->base_run) + free (run); + } + + for (dir = ((pfile)->opts.quote_include); dir; dir = dirn) + { + dirn = dir->next; + free ((void *) dir->name); + free (dir); + } + + for (context = pfile->base_context.next; context; context = contextn) + { + contextn = context->next; + free (context); + } + + free_line_maps (&pfile->line_maps); + + result = pfile->errors; + free (pfile); + + return result; +} + + + + + + + + + + + + + +struct builtin +{ + const U_CHAR *name; + const char *value; + unsigned char builtin; + unsigned short flags; + unsigned short len; +}; + + + + + + + +static const struct builtin builtin_array[] = +{ + { (const U_CHAR *) "__TIME__", 0, BT_TIME, 0x08, sizeof "__TIME__" - 1 }, + { (const U_CHAR *) "__DATE__", 0, BT_DATE, 0x08, sizeof "__DATE__" - 1 }, + { (const U_CHAR *) "__FILE__", 0, BT_FILE, 0x08, sizeof "__FILE__" - 1 }, + { (const U_CHAR *) "__BASE_FILE__", 0, BT_BASE_FILE, 0x08, sizeof "__BASE_FILE__" - 1 }, + { (const U_CHAR *) "__LINE__", 0, BT_SPECLINE, 0x08, sizeof "__LINE__" - 1 }, + { (const U_CHAR *) "__INCLUDE_LEVEL__", 0, BT_INCLUDE_LEVEL, 0x08, sizeof "__INCLUDE_LEVEL__" - 1 }, + { (const U_CHAR *) "_Pragma", 0, BT_PRAGMA, 0x08, sizeof "_Pragma" - 1 }, + + { (const U_CHAR *) "__VERSION__", 0, 0, 0x01, sizeof "__VERSION__" - 1 }, + { (const U_CHAR *) "__USER_LABEL_PREFIX__", 0, 0, 0x02, sizeof "__USER_LABEL_PREFIX__" - 1 }, + { (const U_CHAR *) "__REGISTER_PREFIX__", "", 0, 0, sizeof "__REGISTER_PREFIX__" - 1 }, + { (const U_CHAR *) "__HAVE_BUILTIN_SETJMP__", "1", 0, 0, sizeof "__HAVE_BUILTIN_SETJMP__" - 1 }, + + + { (const U_CHAR *) "__USING_SJLJ_EXCEPTIONS__", "1", 0, 0, sizeof "__USING_SJLJ_EXCEPTIONS__" - 1 }, +#line 650 "cppinit.c" + + { (const U_CHAR *) "__SIZE_TYPE__", "long unsigned int", 0, 0, sizeof "__SIZE_TYPE__" - 1 }, +#line 653 "cppinit.c" + + { (const U_CHAR *) "__PTRDIFF_TYPE__", "long int", 0, 0, sizeof "__PTRDIFF_TYPE__" - 1 }, +#line 656 "cppinit.c" + + { (const U_CHAR *) "__WCHAR_TYPE__", "int", 0, 0, sizeof "__WCHAR_TYPE__" - 1 }, +#line 659 "cppinit.c" + + { (const U_CHAR *) "__WINT_TYPE__", "unsigned int", 0, 0, sizeof "__WINT_TYPE__" - 1 }, +#line 662 "cppinit.c" + + + + { (const U_CHAR *) "__STDC__", "1", 0, 0, sizeof "__STDC__" - 1 }, +#line 667 "cppinit.c" +}; + + + + + + + + + + + +static const struct named_op +{ + const U_CHAR *name; + unsigned int len; + enum cpp_ttype value; +} operator_array[] = { + { (const U_CHAR *)"and", sizeof "and" - 1, CPP_AND_AND }, + { (const U_CHAR *)"and_eq", sizeof "and_eq" - 1, CPP_AND_EQ }, + { (const U_CHAR *)"bitand", sizeof "bitand" - 1, CPP_AND }, + { (const U_CHAR *)"bitor", sizeof "bitor" - 1, CPP_OR }, + { (const U_CHAR *)"compl", sizeof "compl" - 1, CPP_COMPL }, + { (const U_CHAR *)"not", sizeof "not" - 1, CPP_NOT }, + { (const U_CHAR *)"not_eq", sizeof "not_eq" - 1, CPP_NOT_EQ }, + { (const U_CHAR *)"or", sizeof "or" - 1, CPP_OR_OR }, + { (const U_CHAR *)"or_eq", sizeof "or_eq" - 1, CPP_OR_EQ }, + { (const U_CHAR *)"xor", sizeof "xor" - 1, CPP_XOR }, + { (const U_CHAR *)"xor_eq", sizeof "xor_eq" - 1, CPP_XOR_EQ } +}; + + + +static void +mark_named_operators (pfile) + cpp_reader *pfile; +{ + const struct named_op *b; + + for (b = operator_array; + b < (operator_array + (sizeof (operator_array) / sizeof ((operator_array)[0]))); + b++) + { + cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len); + hp->flags |= (1 << 0); + hp->value.operator = b->value; + } +} + + + +static void +init_builtins (pfile) + cpp_reader *pfile; +{ + const struct builtin *b; + + for(b = builtin_array; b < builtin_array + sizeof(builtin_array)/sizeof(struct builtin); b++) + { + if (b->flags & 0x08) + { + cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len); + hp->type = NT_MACRO; + hp->flags |= (1 << 2) | (1 << 4); + hp->value.builtin = b->builtin; + } + else + { + const char *val; + char *str; + + if (b->flags & 0x01) + { + + str = C_alloca(b->len + strlen (version_string) + 5); + sprintf (str, "%s \"%s\"\n", b->name, version_string); + } + else + { + if (b->flags & 0x02) + val = ((pfile)->opts.user_label_prefix); + else + val = b->value; + + + str = C_alloca(b->len + strlen (val) + 3); + sprintf(str, "%s %s\n", b->name, val); + } + + _cpp_define_builtin (pfile, str); + } + } + + if (((pfile)->opts.cplusplus)) + { + _cpp_define_builtin (pfile, "__cplusplus 1"); + if (0) + _cpp_define_builtin (pfile, "__GXX_WEAK__ 1"); + else + _cpp_define_builtin (pfile, "__GXX_WEAK__ 0"); + } + if (((pfile)->opts.objc)) + _cpp_define_builtin (pfile, "__OBJC__ 1"); + + if (((pfile)->opts.lang) == CLK_STDC94) + _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L"); + else if (((pfile)->opts.c99)) + _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L"); + + if (((pfile)->opts.signed_char) == 0) + _cpp_define_builtin (pfile, "__CHAR_UNSIGNED__ 1"); + + if (((pfile)->opts.lang) == CLK_STDC89 + || ((pfile)->opts.lang) == CLK_STDC94 + || ((pfile)->opts.lang) == CLK_STDC99) + _cpp_define_builtin (pfile, "__STRICT_ANSI__ 1"); + else if (((pfile)->opts.lang) == CLK_ASM) + _cpp_define_builtin (pfile, "__ASSEMBLER__ 1"); +} + + + + + + + +static void +init_standard_includes (pfile) + cpp_reader *pfile; +{ + char *path; + const struct default_include *p; + const char *specd_prefix = ((pfile)->opts.include_prefix); + + + + + + + + do { (path) = getenv ("CPATH"); } while (0); + if (path != 0 && *path != 0) + path_include (pfile, path, BRACKET); + + switch ((((pfile)->opts.objc) << 1) + ((pfile)->opts.cplusplus)) + { + case 0: + do { (path) = getenv ("C_INCLUDE_PATH"); } while (0); + break; + case 1: + do { (path) = getenv ("CPLUS_INCLUDE_PATH"); } while (0); + break; + case 2: + do { (path) = getenv ("OBJC_INCLUDE_PATH"); } while (0); + break; + case 3: + do { (path) = getenv ("OBJCPLUS_INCLUDE_PATH"); } while (0); + break; + } + if (path != 0 && *path != 0) + path_include (pfile, path, SYSTEM); + + + + if (specd_prefix != 0 && cpp_GCC_INCLUDE_DIR_len) + { + + + int default_len = cpp_GCC_INCLUDE_DIR_len; + char *default_prefix = (char *) C_alloca(default_len + 1); + int specd_len = strlen (specd_prefix); + + memcpy (default_prefix, cpp_GCC_INCLUDE_DIR, default_len); + default_prefix[default_len] = '\0'; + + for (p = cpp_include_defaults; p->fname; p++) + { + + if (!p->cplusplus + || (((pfile)->opts.cplusplus) + && !((pfile)->opts.no_standard_cplusplus_includes))) + { + + if (!memcmp (p->fname, default_prefix, default_len)) + { + + int flen = strlen (p->fname); + int this_len = specd_len + flen - default_len; + char *str = (char *) xmalloc (this_len + 1); + memcpy (str, specd_prefix, specd_len); + memcpy (str + specd_len, + p->fname + default_len, + flen - default_len + 1); + + append_include_chain (pfile, str, SYSTEM, p->cxx_aware); + } + } + } + } + + + for (p = cpp_include_defaults; p->fname; p++) + { + + if (!p->cplusplus + || (((pfile)->opts.cplusplus) + && !((pfile)->opts.no_standard_cplusplus_includes))) + { + char *str = update_path (p->fname, p->component); + append_include_chain (pfile, str, SYSTEM, p->cxx_aware); + } + } +} + + + +static _Bool +push_include (pfile, p) + cpp_reader *pfile; + struct pending_option *p; +{ + cpp_token header; + + + + header.type = CPP_STRING; + header.val.str.text = (const unsigned char *) p->arg; + header.val.str.len = strlen (p->arg); + + pfile->line++; + + return _cpp_execute_include (pfile, &header, IT_CMDLINE); +} + + +static void +free_chain (head) + struct pending_option *head; +{ + struct pending_option *next; + + while (head) + { + next = head->next; + free (head); + head = next; + } +} + + + + + +const char * +cpp_read_main_file (pfile, fname, table) + cpp_reader *pfile; + const char *fname; + hash_table *table; +{ + + + + _cpp_init_hashtable (pfile, table); + + + if (! ((pfile)->opts.no_standard_includes)) + init_standard_includes (pfile); + + merge_include_chains (pfile); + + + if (((pfile)->opts.verbose)) + { + struct search_path *l; + fprintf ((&_iob[2]), ("#include \"...\" search starts here:\n")); + for (l = ((pfile)->opts.quote_include); l; l = l->next) + { + if (l == ((pfile)->opts.bracket_include)) + fprintf ((&_iob[2]), ("#include <...> search starts here:\n")); + fprintf ((&_iob[2]), " %s\n", l->name); + } + fprintf ((&_iob[2]), ("End of search list.\n")); + } + + if (((pfile)->opts.print_deps)) + + deps_add_default_target (pfile->deps, fname); + + + if (!_cpp_read_file (pfile, fname)) + return ((void *)0); + + + + + pfile->line_maps.trace_includes = ((pfile)->opts.print_include_names); + + + + if (((pfile)->opts.preprocessed)) + read_original_filename (pfile); + + return pfile->map->to_file; +} + + + + + +static void +read_original_filename (pfile) + cpp_reader *pfile; +{ + const cpp_token *token, *token1; + + + + token = _cpp_lex_direct (pfile); + if (token->type == CPP_HASH) + { + token1 = _cpp_lex_direct (pfile); + _cpp_backup_tokens (pfile, 1); + + + if (token1->type == CPP_NUMBER) + { + _cpp_handle_directive (pfile, token->flags & (1 << 0)); + return; + } + } + + + _cpp_backup_tokens (pfile, 1); +} + + + + +void +cpp_finish_options (pfile) + cpp_reader *pfile; +{ + + if (((pfile)->opts.cplusplus) && ((pfile)->opts.operator_names)) + mark_named_operators (pfile); + + + + if (! ((pfile)->opts.preprocessed)) + { + struct pending_option *p; + + _cpp_do_file_change (pfile, LC_RENAME, (""), 1, 0); + init_builtins (pfile); + _cpp_do_file_change (pfile, LC_RENAME, (""), 1, 0); + for (p = ((pfile)->opts.pending)->directive_head; p; p = p->next) + (*p->handler) (pfile, p->arg); + + + + while ((p = ((pfile)->opts.pending)->imacros_head) != ((void *)0)) + { + if (push_include (pfile, p)) + { + pfile->buffer->return_at_eof = 1; + cpp_scan_nooutput (pfile); + } + ((pfile)->opts.pending)->imacros_head = p->next; + free (p); + } + } + + free_chain (((pfile)->opts.pending)->directive_head); + _cpp_push_next_buffer (pfile); +} + + + + +_Bool +_cpp_push_next_buffer (pfile) + cpp_reader *pfile; +{ + _Bool pushed = 0; + + + + + + if (((pfile)->opts.pending) + && ((pfile)->opts.pending)->imacros_head == ((void *)0)) + { + while (!pushed) + { + struct pending_option *p = ((pfile)->opts.pending)->include_head; + + if (p == ((void *)0)) + break; + if (! ((pfile)->opts.preprocessed)) + pushed = push_include (pfile, p); + ((pfile)->opts.pending)->include_head = p->next; + free (p); + } + + if (!pushed) + { + free (((pfile)->opts.pending)); + ((pfile)->opts.pending) = ((void *)0); + + + if (! ((pfile)->opts.preprocessed)) + _cpp_do_file_change (pfile, LC_RENAME, + pfile->line_maps.maps[0].to_file, 1, 0); + } + } + + return pushed; +} + + +static void +output_deps (pfile) + cpp_reader *pfile; +{ + + FILE *deps_stream = 0; + const char *const deps_mode = + ((pfile)->opts.print_deps_append) ? "a" : "w"; + + if (((pfile)->opts.deps_file)[0] == '\0') + deps_stream = (&_iob[1]); + else + { + deps_stream = fopen (((pfile)->opts.deps_file), deps_mode); + if (deps_stream == 0) + { + cpp_notice_from_errno (pfile, ((pfile)->opts.deps_file)); + return; + } + } + + deps_write (pfile->deps, deps_stream, 72); + + if (((pfile)->opts.deps_phony_targets)) + deps_phony_targets (pfile->deps, deps_stream); + + + if (deps_stream != (&_iob[1])) + { + if (((deps_stream)->_flag & 0x0020) || fclose (deps_stream) != 0) + cpp_fatal (pfile, "I/O error on output"); + } +} + + + + + +void +cpp_finish (pfile) + cpp_reader *pfile; +{ + + + + + + while (pfile->buffer) + _cpp_pop_buffer (pfile); + + + if (((pfile)->opts.print_deps) && pfile->errors == 0) + output_deps (pfile); + + + if (((pfile)->opts.print_include_names)) + _cpp_report_missing_guards (pfile); +} + + +static void +new_pending_directive (pend, text, handler) + struct cpp_pending *pend; + const char *text; + cl_directive_handler handler; +{ + struct pending_option *o = (struct pending_option *) + xmalloc (sizeof (struct pending_option)); + + o->arg = text; + o->next = ((void *)0); + o->handler = handler; + do { if (!(pend)->directive_head) (pend)->directive_head = (o); else (pend)->directive_tail->next = (o); (pend)->directive_tail = (o); } while (0); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +enum opt_code +{ + OPT_dollar, OPT_plus, OPT__help, OPT_target__help, OPT__version, OPT_A, OPT_C, OPT_D, OPT_H, OPT_I, OPT_M, OPT_MD, OPT_MF, OPT_MG, OPT_MM, OPT_MMD, OPT_MP, OPT_MQ, OPT_MT, OPT_P, OPT_U, OPT_W, OPT_d, OPT_fleading_underscore, OPT_fno_leading_underscore, OPT_fno_operator_names, OPT_fno_preprocessed, OPT_fno_show_column, OPT_fpreprocessed, OPT_fshow_column, OPT_fsigned_char, OPT_ftabstop, OPT_funsigned_char, OPT_h, OPT_idirafter, OPT_imacros, OPT_include, OPT_iprefix, OPT_isystem, OPT_iwithprefix, OPT_iwithprefixbefore, OPT_lang_asm, OPT_lang_c, OPT_lang_cplusplus, OPT_lang_c89, OPT_lang_objc, OPT_lang_objcplusplus, OPT_nostdinc, OPT_nostdincplusplus, OPT_o, OPT_pedantic, OPT_pedantic_errors, OPT_remap, OPT_std_cplusplus98, OPT_std_c89, OPT_std_c99, OPT_std_c9x, OPT_std_gnu89, OPT_std_gnu99, OPT_std_gnu9x, OPT_std_iso9899_1990, OPT_std_iso9899_199409, OPT_std_iso9899_1999, OPT_std_iso9899_199x, OPT_trigraphs, OPT_v, OPT_version, OPT_w, + N_OPTS +}; + + +struct cl_option +{ + const char *opt_text; + const char *msg; + size_t opt_len; + enum opt_code opt_code; +}; + + + + + +static const struct cl_option cl_options[] = +#line 1268 "cppinit.c" +{ + { "$", 0, sizeof("$") - 1, OPT_dollar }, { "+", 0, sizeof("+") - 1, OPT_plus }, { "-help", 0, sizeof("-help") - 1, OPT__help }, { "-target-help", 0, sizeof("-target-help") - 1, OPT_target__help }, { "-version", 0, sizeof("-version") - 1, OPT__version }, { "A", ("assertion missing after %s"), sizeof("A") - 1, OPT_A }, { "C", 0, sizeof("C") - 1, OPT_C }, { "D", ("macro name missing after %s"), sizeof("D") - 1, OPT_D }, { "H", 0, sizeof("H") - 1, OPT_H }, { "I", ("directory name missing after %s"), sizeof("I") - 1, OPT_I }, { "M", 0, sizeof("M") - 1, OPT_M }, { "MD", ("file name missing after %s"), sizeof("MD") - 1, OPT_MD }, { "MF", ("file name missing after %s"), sizeof("MF") - 1, OPT_MF }, { "MG", 0, sizeof("MG") - 1, OPT_MG }, { "MM", 0, sizeof("MM") - 1, OPT_MM }, { "MMD", ("file name missing after %s"), sizeof("MMD") - 1, OPT_MMD }, { "MP", 0, sizeof("MP") - 1, OPT_MP }, { "MQ", ("target missing after %s"), sizeof("MQ") - 1, OPT_MQ }, { "MT", ("target missing after %s"), sizeof("MT") - 1, OPT_MT }, { "P", 0, sizeof("P") - 1, OPT_P }, { "U", ("macro name missing after %s"), sizeof("U") - 1, OPT_U }, { "W", ("argument missing after %s"), sizeof("W") - 1, OPT_W }, { "d", ("argument missing after %s"), sizeof("d") - 1, OPT_d }, { "fleading-underscore", 0, sizeof("fleading-underscore") - 1, OPT_fleading_underscore }, { "fno-leading-underscore", 0, sizeof("fno-leading-underscore") - 1, OPT_fno_leading_underscore }, { "fno-operator-names", 0, sizeof("fno-operator-names") - 1, OPT_fno_operator_names }, { "fno-preprocessed", 0, sizeof("fno-preprocessed") - 1, OPT_fno_preprocessed }, { "fno-show-column", 0, sizeof("fno-show-column") - 1, OPT_fno_show_column }, { "fpreprocessed", 0, sizeof("fpreprocessed") - 1, OPT_fpreprocessed }, { "fshow-column", 0, sizeof("fshow-column") - 1, OPT_fshow_column }, { "fsigned-char", 0, sizeof("fsigned-char") - 1, OPT_fsigned_char }, { "ftabstop=", ("number missing after %s"), sizeof("ftabstop=") - 1, OPT_ftabstop }, { "funsigned-char", 0, sizeof("funsigned-char") - 1, OPT_funsigned_char }, { "h", 0, sizeof("h") - 1, OPT_h }, { "idirafter", ("directory name missing after %s"), sizeof("idirafter") - 1, OPT_idirafter }, { "imacros", ("file name missing after %s"), sizeof("imacros") - 1, OPT_imacros }, { "include", ("file name missing after %s"), sizeof("include") - 1, OPT_include }, { "iprefix", ("path name missing after %s"), sizeof("iprefix") - 1, OPT_iprefix }, { "isystem", ("directory name missing after %s"), sizeof("isystem") - 1, OPT_isystem }, { "iwithprefix", ("directory name missing after %s"), sizeof("iwithprefix") - 1, OPT_iwithprefix }, { "iwithprefixbefore", ("directory name missing after %s"), sizeof("iwithprefixbefore") - 1, OPT_iwithprefixbefore }, { "lang-asm", 0, sizeof("lang-asm") - 1, OPT_lang_asm }, { "lang-c", 0, sizeof("lang-c") - 1, OPT_lang_c }, { "lang-c++", 0, sizeof("lang-c++") - 1, OPT_lang_cplusplus }, { "lang-c89", 0, sizeof("lang-c89") - 1, OPT_lang_c89 }, { "lang-objc", 0, sizeof("lang-objc") - 1, OPT_lang_objc }, { "lang-objc++", 0, sizeof("lang-objc++") - 1, OPT_lang_objcplusplus }, { "nostdinc", 0, sizeof("nostdinc") - 1, OPT_nostdinc }, { "nostdinc++", 0, sizeof("nostdinc++") - 1, OPT_nostdincplusplus }, { "o", ("file name missing after %s"), sizeof("o") - 1, OPT_o }, { "pedantic", 0, sizeof("pedantic") - 1, OPT_pedantic }, { "pedantic-errors", 0, sizeof("pedantic-errors") - 1, OPT_pedantic_errors }, { "remap", 0, sizeof("remap") - 1, OPT_remap }, { "std=c++98", 0, sizeof("std=c++98") - 1, OPT_std_cplusplus98 }, { "std=c89", 0, sizeof("std=c89") - 1, OPT_std_c89 }, { "std=c99", 0, sizeof("std=c99") - 1, OPT_std_c99 }, { "std=c9x", 0, sizeof("std=c9x") - 1, OPT_std_c9x }, { "std=gnu89", 0, sizeof("std=gnu89") - 1, OPT_std_gnu89 }, { "std=gnu99", 0, sizeof("std=gnu99") - 1, OPT_std_gnu99 }, { "std=gnu9x", 0, sizeof("std=gnu9x") - 1, OPT_std_gnu9x }, { "std=iso9899:1990", 0, sizeof("std=iso9899:1990") - 1, OPT_std_iso9899_1990 }, { "std=iso9899:199409", 0, sizeof("std=iso9899:199409") - 1, OPT_std_iso9899_199409 }, { "std=iso9899:1999", 0, sizeof("std=iso9899:1999") - 1, OPT_std_iso9899_1999 }, { "std=iso9899:199x", 0, sizeof("std=iso9899:199x") - 1, OPT_std_iso9899_199x }, { "trigraphs", 0, sizeof("trigraphs") - 1, OPT_trigraphs }, { "v", 0, sizeof("v") - 1, OPT_v }, { "version", 0, sizeof("version") - 1, OPT_version }, { "w", 0, sizeof("w") - 1, OPT_w }, +}; + + + + + + + + + + + +static int +parse_option (input) + const char *input; +{ + unsigned int md, mn, mx; + size_t opt_len; + int comp; + + mn = 0; + mx = N_OPTS; + + while (mx > mn) + { + md = (mn + mx) / 2; + + opt_len = cl_options[md].opt_len; + comp = memcmp (input, cl_options[md].opt_text, opt_len); + + if (comp > 0) + mn = md + 1; + else if (comp < 0) + mx = md; + else + { + if (input[opt_len] == '\0') + return md; + + + + + + mn = md + 1; + if (cl_options[md].msg) + { + + + + mx = md; + for (; mn < (unsigned int) N_OPTS; mn++) + { + opt_len = cl_options[mn].opt_len; + if (memcmp (input, cl_options[mn].opt_text, opt_len)) + break; + if (input[opt_len] == '\0') + return mn; + if (cl_options[mn].msg) + mx = mn; + } + return mx; + } + } + } + + return -1; +} + + + + + +int +cpp_handle_option (pfile, argc, argv, ignore) + cpp_reader *pfile; + int argc; + char **argv; + int ignore; +{ + int i = 0; + struct cpp_pending *pend = ((pfile)->opts.pending); + + + if (argv[i][0] != '-' || argv[i][1] == '\0') + { + if (((pfile)->opts.in_fname) == ((void *)0)) + ((pfile)->opts.in_fname) = argv[i]; + else if (((pfile)->opts.out_fname) == ((void *)0)) + ((pfile)->opts.out_fname) = argv[i]; + else + cpp_fatal (pfile, "too many filenames. Type %s --help for usage info", + progname); + } + else + { + enum opt_code opt_code; + int opt_index; + const char *arg = 0; + + + opt_index = parse_option (&argv[i][1]); + if (opt_index < 0) + return i; + + opt_code = cl_options[opt_index].opt_code; + if (cl_options[opt_index].msg) + { + arg = &argv[i][cl_options[opt_index].opt_len + 1]; + + + + + if (arg[0] == '\0' && opt_code != OPT_W) + { + arg = argv[++i]; + if (!arg) + { + cpp_fatal (pfile, cl_options[opt_index].msg, argv[i - 1]); + return argc; + } + } + } + + switch (opt_code) + { + case N_OPTS: + break; + case OPT_fleading_underscore: + ((pfile)->opts.user_label_prefix) = "_"; + break; + case OPT_fno_leading_underscore: + ((pfile)->opts.user_label_prefix) = ""; + break; + case OPT_fno_operator_names: + ((pfile)->opts.operator_names) = 0; + break; + case OPT_fpreprocessed: + ((pfile)->opts.preprocessed) = 1; + break; + case OPT_fno_preprocessed: + ((pfile)->opts.preprocessed) = 0; + break; + case OPT_fshow_column: + ((pfile)->opts.show_column) = 1; + break; + case OPT_fno_show_column: + ((pfile)->opts.show_column) = 0; + break; + case OPT_fsigned_char: + ((pfile)->opts.signed_char) = 1; + break; + case OPT_funsigned_char: + ((pfile)->opts.signed_char) = 0; + break; + case OPT_ftabstop: + + if (arg[0] != '\0') + { + char *endptr; + long tabstop = strtol (arg, &endptr, 10); + if (*endptr == '\0' && tabstop >= 1 && tabstop <= 100) + ((pfile)->opts.tabstop) = tabstop; + } + break; + case OPT_w: + ((pfile)->opts.inhibit_warnings) = 1; + break; + case OPT_h: + case OPT__help: + print_help (); + ((pfile)->opts.help_only) = 1; + break; + case OPT_target__help: + + + ((pfile)->opts.help_only) = 1; + break; + + + + case OPT__version: + ((pfile)->opts.help_only) = 1; + pfile->print_version = 1; + break; + case OPT_v: + ((pfile)->opts.verbose) = 1; + pfile->print_version = 1; + break; + case OPT_version: + pfile->print_version = 1; + break; + + case OPT_C: + ((pfile)->opts.discard_comments) = 0; + break; + case OPT_P: + ((pfile)->opts.no_line_commands) = 1; + break; + case OPT_dollar: + ((pfile)->opts.dollars_in_ident) = 0; + break; + case OPT_H: + ((pfile)->opts.print_include_names) = 1; + break; + case OPT_D: + new_pending_directive (pend, arg, cpp_define); + break; + case OPT_pedantic_errors: + ((pfile)->opts.pedantic_errors) = 1; + + case OPT_pedantic: + ((pfile)->opts.pedantic) = 1; + break; + case OPT_trigraphs: + ((pfile)->opts.trigraphs) = 1; + break; + case OPT_plus: + ((pfile)->opts.cplusplus) = 1; + ((pfile)->opts.cplusplus_comments) = 1; + break; + case OPT_remap: + ((pfile)->opts.remap) = 1; + break; + case OPT_iprefix: + ((pfile)->opts.include_prefix) = arg; + ((pfile)->opts.include_prefix_len) = strlen (arg); + break; + case OPT_lang_c: + set_lang (pfile, CLK_GNUC89); + break; + case OPT_lang_cplusplus: + set_lang (pfile, CLK_GNUCXX); + break; + case OPT_lang_objc: + set_lang (pfile, CLK_OBJC); + break; + case OPT_lang_objcplusplus: + set_lang (pfile, CLK_OBJCXX); + break; + case OPT_lang_asm: + set_lang (pfile, CLK_ASM); + break; + case OPT_std_cplusplus98: + set_lang (pfile, CLK_CXX98); + break; + case OPT_std_gnu89: + set_lang (pfile, CLK_GNUC89); + break; + case OPT_std_gnu9x: + case OPT_std_gnu99: + set_lang (pfile, CLK_GNUC99); + break; + case OPT_std_iso9899_199409: + set_lang (pfile, CLK_STDC94); + break; + case OPT_std_iso9899_1990: + case OPT_std_c89: + case OPT_lang_c89: + set_lang (pfile, CLK_STDC89); + break; + case OPT_std_iso9899_199x: + case OPT_std_iso9899_1999: + case OPT_std_c9x: + case OPT_std_c99: + set_lang (pfile, CLK_STDC99); + break; + case OPT_nostdinc: + + + ((pfile)->opts.no_standard_includes) = 1; + break; + case OPT_nostdincplusplus: + + ((pfile)->opts.no_standard_cplusplus_includes) = 1; + break; + case OPT_o: + if (((pfile)->opts.out_fname) == ((void *)0)) + ((pfile)->opts.out_fname) = arg; + else + { + cpp_fatal (pfile, "output filename specified twice"); + return argc; + } + break; + case OPT_d: + + + + { + char c; + + while ((c = *arg++) != '\0') + switch (c) + { + case 'M': + ((pfile)->opts.dump_macros) = dump_only; + break; + case 'N': + ((pfile)->opts.dump_macros) = dump_names; + break; + case 'D': + ((pfile)->opts.dump_macros) = dump_definitions; + break; + case 'I': + ((pfile)->opts.dump_includes) = 1; + break; + } + } + break; + + case OPT_MG: + ((pfile)->opts.print_deps_missing_files) = 1; + break; + case OPT_M: + + + + + ((pfile)->opts.print_deps) = 2; + ((pfile)->opts.no_output) = 1; + break; + case OPT_MM: + ((pfile)->opts.print_deps) = 1; + ((pfile)->opts.no_output) = 1; + break; + case OPT_MF: + ((pfile)->opts.deps_file) = arg; + break; + case OPT_MP: + ((pfile)->opts.deps_phony_targets) = 1; + break; + case OPT_MQ: + case OPT_MT: + + deps_add_target (pfile->deps, arg, opt_code == OPT_MQ); + break; + + case OPT_MD: + ((pfile)->opts.print_deps) = 2; + ((pfile)->opts.deps_file) = arg; + break; + case OPT_MMD: + ((pfile)->opts.print_deps) = 1; + ((pfile)->opts.deps_file) = arg; + break; + + case OPT_A: + if (arg[0] == '-') + { + + + + + + + + + if (arg[1] == '\0') + { + free_chain (pend->directive_head); + pend->directive_head = ((void *)0); + pend->directive_tail = ((void *)0); + } + else + new_pending_directive (pend, arg + 1, cpp_unassert); + } + else + new_pending_directive (pend, arg, cpp_assert); + break; + case OPT_U: + new_pending_directive (pend, arg, cpp_undef); + break; + case OPT_I: + if (!strcmp (arg, "-")) + { + + + + + + + if (! ((pfile)->opts.ignore_srcdir)) + { + pend->quote_head = pend->brack_head; + pend->quote_tail = pend->brack_tail; + pend->brack_head = 0; + pend->brack_tail = 0; + ((pfile)->opts.ignore_srcdir) = 1; + } + else + { + cpp_fatal (pfile, "-I- specified twice"); + return argc; + } + } + else + append_include_chain (pfile, xstrdup (arg), BRACKET, 0); + break; + case OPT_isystem: + + + append_include_chain (pfile, xstrdup (arg), SYSTEM, 0); + break; + case OPT_include: + case OPT_imacros: + { + struct pending_option *o = (struct pending_option *) + xmalloc (sizeof (struct pending_option)); + o->arg = arg; + o->next = ((void *)0); + + if (opt_code == OPT_include) + do { if (!(pend)->include_head) (pend)->include_head = (o); else (pend)->include_tail->next = (o); (pend)->include_tail = (o); } while (0); + else + do { if (!(pend)->imacros_head) (pend)->imacros_head = (o); else (pend)->imacros_tail->next = (o); (pend)->imacros_tail = (o); } while (0); + } + break; + case OPT_iwithprefix: + + + + case OPT_iwithprefixbefore: + + + { + char *fname; + int len; + + len = strlen (arg); + + if (((pfile)->opts.include_prefix) != 0) + { + size_t ipl = ((pfile)->opts.include_prefix_len); + fname = xmalloc (ipl + len + 1); + memcpy (fname, ((pfile)->opts.include_prefix), ipl); + memcpy (fname + ipl, arg, len + 1); + } + else if (cpp_GCC_INCLUDE_DIR_len) + { + fname = xmalloc (cpp_GCC_INCLUDE_DIR_len + len + 1); + memcpy (fname, cpp_GCC_INCLUDE_DIR, cpp_GCC_INCLUDE_DIR_len); + memcpy (fname + cpp_GCC_INCLUDE_DIR_len, arg, len + 1); + } + else + fname = xstrdup (arg); + + append_include_chain (pfile, fname, + opt_code == OPT_iwithprefix ? SYSTEM: BRACKET, 0); + } + break; + case OPT_idirafter: + + append_include_chain (pfile, xstrdup (arg), AFTER, 0); + break; + case OPT_W: + + if (!strcmp (argv[i], "-Wall")) + { + ((pfile)->opts.warn_trigraphs) = 1; + ((pfile)->opts.warn_comments) = 1; + } + else if (!strcmp (argv[i], "-Wtraditional")) + ((pfile)->opts.warn_traditional) = 1; + else if (!strcmp (argv[i], "-Wtrigraphs")) + ((pfile)->opts.warn_trigraphs) = 1; + else if (!strcmp (argv[i], "-Wcomment")) + ((pfile)->opts.warn_comments) = 1; + else if (!strcmp (argv[i], "-Wcomments")) + ((pfile)->opts.warn_comments) = 1; + else if (!strcmp (argv[i], "-Wundef")) + ((pfile)->opts.warn_undef) = 1; + else if (!strcmp (argv[i], "-Wimport")) + ((pfile)->opts.warn_import) = 1; + else if (!strcmp (argv[i], "-Werror")) + ((pfile)->opts.warnings_are_errors) = 1; + else if (!strcmp (argv[i], "-Wsystem-headers")) + ((pfile)->opts.warn_system_headers) = 1; + else if (!strcmp (argv[i], "-Wno-traditional")) + ((pfile)->opts.warn_traditional) = 0; + else if (!strcmp (argv[i], "-Wno-trigraphs")) + ((pfile)->opts.warn_trigraphs) = 0; + else if (!strcmp (argv[i], "-Wno-comment")) + ((pfile)->opts.warn_comments) = 0; + else if (!strcmp (argv[i], "-Wno-comments")) + ((pfile)->opts.warn_comments) = 0; + else if (!strcmp (argv[i], "-Wno-undef")) + ((pfile)->opts.warn_undef) = 0; + else if (!strcmp (argv[i], "-Wno-import")) + ((pfile)->opts.warn_import) = 0; + else if (!strcmp (argv[i], "-Wno-error")) + ((pfile)->opts.warnings_are_errors) = 0; + else if (!strcmp (argv[i], "-Wno-system-headers")) + ((pfile)->opts.warn_system_headers) = 0; + else if (! ignore) + return i; + break; + } + } + return i + 1; +} + + + + + +int +cpp_handle_options (pfile, argc, argv) + cpp_reader *pfile; + int argc; + char **argv; +{ + int i; + int strings_processed; + + for (i = 0; i < argc; i += strings_processed) + { + strings_processed = cpp_handle_option (pfile, argc - i, argv + i, 1); + if (strings_processed == 0) + break; + } + + return i; +} + + + +void +cpp_post_options (pfile) + cpp_reader *pfile; +{ + if (pfile->print_version) + { + fprintf ((&_iob[2]), ("GNU CPP version %s (cpplib)"), version_string); + + + + fputc ('\n', (&_iob[2])); + } + + + + if (((pfile)->opts.in_fname) == ((void *)0) + || !strcmp (((pfile)->opts.in_fname), "-")) + ((pfile)->opts.in_fname) = ""; + + if (((pfile)->opts.out_fname) == ((void *)0) + || !strcmp (((pfile)->opts.out_fname), "-")) + ((pfile)->opts.out_fname) = ""; + + + if (((pfile)->opts.cplusplus)) + ((pfile)->opts.warn_traditional) = 0; + + + if (((pfile)->opts.user_label_prefix) == ((void *)0)) + ((pfile)->opts.user_label_prefix) = ""; + + + + if (((pfile)->opts.preprocessed)) + pfile->state.prevent_expansion = 1; + + + + if (((pfile)->opts.dump_macros) == dump_only) + ((pfile)->opts.no_output) = 1; + + + + + if (((pfile)->opts.no_output)) + { + if (((pfile)->opts.dump_macros) != dump_only) + ((pfile)->opts.dump_macros) = dump_none; + ((pfile)->opts.dump_includes) = 0; + } + + + + + init_dependency_output (pfile); + + + + if (((pfile)->opts.print_deps) == 0 && + (((pfile)->opts.print_deps_missing_files) + || ((pfile)->opts.deps_file) + || ((pfile)->opts.deps_phony_targets))) + cpp_fatal (pfile, "you must additionally specify either -M or -MM"); +} + + + +static void +init_dependency_output (pfile) + cpp_reader *pfile; +{ + char *spec, *s, *output_file; + + + + + + + if (((pfile)->opts.print_deps) == 0) + { + spec = getenv ("DEPENDENCIES_OUTPUT"); + if (spec) + ((pfile)->opts.print_deps) = 1; + else + { + spec = getenv ("SUNPRO_DEPENDENCIES"); + if (spec) + ((pfile)->opts.print_deps) = 2; + else + return; + } + + + s = strchr (spec, ' '); + if (s) + { + + deps_add_target (pfile->deps, s + 1, 0); + output_file = (char *) xmalloc (s - spec + 1); + memcpy (output_file, spec, s - spec); + output_file[s - spec] = 0; + } + else + output_file = spec; + + + if (((pfile)->opts.deps_file) == 0) + ((pfile)->opts.deps_file) = output_file; + + ((pfile)->opts.print_deps_append) = 1; + } + else if (((pfile)->opts.deps_file) == 0) + + + ((pfile)->opts.deps_file) = ((pfile)->opts.out_fname); +} + + +static void +print_help () +{ + + + fputs ( + + + + + + + +("Switches:\n -include Include the contents of before other files\n -imacros Accept definition of macros in \n -iprefix Specify as a prefix for next two options\n -iwithprefix Add to the end of the system include path\n -iwithprefixbefore Add to the end of the main include path\n -isystem Add to the start of the system include path\n"), (&_iob[1])); + fputs ( + + + + + + + +(" -idirafter Add to the end of the system include path\n -I Add to the end of the main include path\n -I- Fine-grained include path control; see info docs\n -nostdinc Do not search system include directories\n (dirs specified with -isystem will still be used)\n -nostdinc++ Do not search system include directories for C++\n -o Put output into \n"), (&_iob[1])); + fputs ( + + + + + +(" -pedantic Issue all warnings demanded by strict ISO C\n -pedantic-errors Issue -pedantic warnings as errors instead\n -trigraphs Support ISO C trigraphs\n -lang-c Assume that the input sources are in C\n -lang-c89 Assume that the input sources are in C89\n"), (&_iob[1])); + fputs ( + + + + +(" -lang-c++ Assume that the input sources are in C++\n -lang-objc Assume that the input sources are in ObjectiveC\n -lang-objc++ Assume that the input sources are in ObjectiveC++\n -lang-asm Assume that the input sources are in assembler\n"), (&_iob[1])); + fputs ( + + + + + + + + +(" -std= Specify the conformance standard; one of:\n gnu89, gnu99, c89, c99, iso9899:1990,\n iso9899:199409, iso9899:1999\n -+ Allow parsing of C++ style features\n -w Inhibit warning messages\n -Wtrigraphs Warn if trigraphs are encountered\n -Wno-trigraphs Do not warn about trigraphs\n -Wcomment{s} Warn if one comment starts inside another\n"), (&_iob[1])); + fputs ( + + + + + + +(" -Wno-comment{s} Do not warn about comments\n -Wtraditional Warn about features not present in traditional C\n -Wno-traditional Do not warn about traditional C\n -Wundef Warn if an undefined macro is used by #if\n -Wno-undef Do not warn about testing undefined macros\n -Wimport Warn about the use of the #import directive\n"), (&_iob[1])); + fputs ( + + + + + + +(" -Wno-import Do not warn about the use of #import\n -Werror Treat all warnings as errors\n -Wno-error Do not treat warnings as errors\n -Wsystem-headers Do not suppress warnings from system headers\n -Wno-system-headers Suppress warnings from system headers\n -Wall Enable all preprocessor warnings\n"), (&_iob[1])); + fputs ( + + + + + + +(" -M Generate make dependencies\n -MM As -M, but ignore system header files\n -MD Generate make dependencies and compile\n -MMD As -MD, but ignore system header files\n -MF Write dependency output to the given file\n -MG Treat missing header file as generated files\n"), (&_iob[1])); + fputs ( + + + +(" -MP Generate phony targets for all headers\n -MQ Add a MAKE-quoted target\n -MT Add an unquoted target\n"), (&_iob[1])); + fputs ( + + + + + + +(" -D Define a with string '1' as its value\n -D= Define a with as its value\n -A= Assert the to \n -A-= Disable the to \n -U Undefine \n -v Display the version number\n"), (&_iob[1])); + fputs ( + + + + + + +(" -H Print the name of header files as they are used\n -C Do not discard comments\n -dM Display a list of macro definitions active at end\n -dD Preserve macro definitions in output\n -dN As -dD except that only the names are preserved\n -dI Include #include directives in the output\n"), (&_iob[1])); + fputs ( + + + + + + + +(" -fpreprocessed Treat the input file as already preprocessed\n -ftabstop= Distance between tab stops for column reporting\n -P Do not generate #line directives\n -$ Do not allow '$' in identifiers\n -remap Remap file names when including files\n --version Display version information\n -h or --help Display this information\n"), (&_iob[1])); +} diff --git a/src/mkutil/cpp/cppinit.obj b/src/mkutil/cpp/cppinit.obj new file mode 100644 index 0000000000000000000000000000000000000000..56efab92e66e6d2874dcd77fa6ed9b726369d6b9 GIT binary patch literal 58103 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 s{4t#m7t6+s)Gd54;h(q5oo+bgd +#endif + +/* Tokens with SPELL_STRING store their spelling in the token list, + and it's length in the token->val.name.len. */ +enum spell_type +{ + SPELL_OPERATOR = 0, + SPELL_CHAR, + SPELL_IDENT, + SPELL_NUMBER, + SPELL_STRING, + SPELL_NONE +}; + +struct token_spelling +{ + enum spell_type category; + const unsigned char *name; +}; + +static const unsigned char *const digraph_spellings[] = +{ U"%:", U"%:%:", U"<:", U":>", U"<%", U"%>" }; + +#define OP(e, s) { SPELL_OPERATOR, U s }, +#define TK(e, s) { s, U STRINGX (e) }, +static const struct token_spelling token_spellings[N_TTYPES] = { TTYPE_TABLE }; +#undef OP +#undef TK + +#define TOKEN_SPELL(token) (token_spellings[(token)->type].category) +#define TOKEN_NAME(token) (token_spellings[(token)->type].name) +#define BACKUP() do {buffer->cur = buffer->backup_to;} while (0) + +static void handle_newline PARAMS ((cpp_reader *)); +static cppchar_t skip_escaped_newlines PARAMS ((cpp_reader *)); +static cppchar_t get_effective_char PARAMS ((cpp_reader *)); + +static int skip_block_comment PARAMS ((cpp_reader *)); +static int skip_line_comment PARAMS ((cpp_reader *)); +static void adjust_column PARAMS ((cpp_reader *)); +static int skip_whitespace PARAMS ((cpp_reader *, cppchar_t)); +static cpp_hashnode *parse_identifier PARAMS ((cpp_reader *)); +static cpp_hashnode *parse_identifier_slow PARAMS ((cpp_reader *, + const U_CHAR *)); +static void parse_number PARAMS ((cpp_reader *, cpp_string *, cppchar_t, int)); +static int unescaped_terminator_p PARAMS ((cpp_reader *, const U_CHAR *)); +static void parse_string PARAMS ((cpp_reader *, cpp_token *, cppchar_t)); +static void unterminated PARAMS ((cpp_reader *, int)); +static bool trigraph_p PARAMS ((cpp_reader *)); +static void save_comment PARAMS ((cpp_reader *, cpp_token *, const U_CHAR *)); +static int name_p PARAMS ((cpp_reader *, const cpp_string *)); +static int maybe_read_ucs PARAMS ((cpp_reader *, const unsigned char **, + const unsigned char *, unsigned int *)); +static tokenrun *next_tokenrun PARAMS ((tokenrun *)); + +static unsigned int hex_digit_value PARAMS ((unsigned int)); +static _cpp_buff *new_buff PARAMS ((size_t)); + +/* Utility routine: + + Compares, the token TOKEN to the NUL-terminated string STRING. + TOKEN must be a CPP_NAME. Returns 1 for equal, 0 for unequal. */ +int +cpp_ideq (token, string) + const cpp_token *token; + const char *string; +{ + if (token->type != CPP_NAME) + return 0; + + return !ustrcmp (NODE_NAME (token->val.node), (const U_CHAR *) string); +} + +/* Call when meeting a newline, assumed to be in buffer->cur[-1]. + Returns with buffer->cur pointing to the character immediately + following the newline (combination). */ +static void +handle_newline (pfile) + cpp_reader *pfile; +{ + cpp_buffer *buffer = pfile->buffer; + + /* Handle CR-LF and LF-CR. Most other implementations (e.g. java) + only accept CR-LF; maybe we should fall back to that behaviour? */ + if (buffer->cur[-1] + buffer->cur[0] == '\r' + '\n') + buffer->cur++; + + buffer->line_base = buffer->cur; + buffer->col_adjust = 0; + pfile->line++; +} + +/* Subroutine of skip_escaped_newlines; called when a 3-character + sequence beginning with "??" is encountered. buffer->cur points to + the second '?'. + + Warn if necessary, and returns true if the sequence forms a + trigraph and the trigraph should be honoured. */ +static bool +trigraph_p (pfile) + cpp_reader *pfile; +{ + cpp_buffer *buffer = pfile->buffer; + cppchar_t from_char = buffer->cur[1]; + bool accept; + + if (!_cpp_trigraph_map[from_char]) + return false; + + accept = CPP_OPTION (pfile, trigraphs); + + /* Don't warn about trigraphs in comments. */ + if (CPP_OPTION (pfile, warn_trigraphs) && !pfile->state.lexing_comment) + { + if (accept) + cpp_warning_with_line (pfile, pfile->line, CPP_BUF_COL (buffer) - 1, + "trigraph ??%c converted to %c", + (int) from_char, + (int) _cpp_trigraph_map[from_char]); + else if (buffer->cur != buffer->last_Wtrigraphs) + { + buffer->last_Wtrigraphs = buffer->cur; + cpp_warning_with_line (pfile, pfile->line, + CPP_BUF_COL (buffer) - 1, + "trigraph ??%c ignored", (int) from_char); + } + } + + return accept; +} + +/* Skips any escaped newlines introduced by '?' or a '\\', assumed to + lie in buffer->cur[-1]. Returns the next byte, which will be in + buffer->cur[-1]. This routine performs preprocessing stages 1 and + 2 of the ISO C standard. */ +static cppchar_t +skip_escaped_newlines (pfile) + cpp_reader *pfile; +{ + cpp_buffer *buffer = pfile->buffer; + cppchar_t next = buffer->cur[-1]; + + /* Only do this if we apply stages 1 and 2. */ + if (!buffer->from_stage3) + { + const unsigned char *saved_cur; + cppchar_t next1; + + do + { + if (next == '?') + { + if (buffer->cur[0] != '?' || !trigraph_p (pfile)) + break; + + /* Translate the trigraph. */ + next = _cpp_trigraph_map[buffer->cur[1]]; + buffer->cur += 2; + if (next != '\\') + break; + } + + if (buffer->cur == buffer->rlimit) + break; + + /* We have a backslash, and room for at least one more + character. Skip horizontal whitespace. */ + saved_cur = buffer->cur; + do + next1 = *buffer->cur++; + while (is_nvspace (next1) && buffer->cur < buffer->rlimit); + + if (!is_vspace (next1)) + { + buffer->cur = saved_cur; + break; + } + + if (saved_cur != buffer->cur - 1 + && !pfile->state.lexing_comment) + cpp_warning (pfile, "backslash and newline separated by space"); + + handle_newline (pfile); + buffer->backup_to = buffer->cur; + if (buffer->cur == buffer->rlimit) + { + cpp_pedwarn (pfile, "backslash-newline at end of file"); + next = EOF; + } + else + next = *buffer->cur++; + } + while (next == '\\' || next == '?'); + } + + return next; +} + +/* Obtain the next character, after trigraph conversion and skipping + an arbitrarily long string of escaped newlines. The common case of + no trigraphs or escaped newlines falls through quickly. On return, + buffer->backup_to points to where to return to if the character is + not to be processed. */ +static cppchar_t +get_effective_char (pfile) + cpp_reader *pfile; +{ + cppchar_t next; + cpp_buffer *buffer = pfile->buffer; + + buffer->backup_to = buffer->cur; + next = *buffer->cur++; + if (__builtin_expect (next == '?' || next == '\\', 0)) + next = skip_escaped_newlines (pfile); + + return next; +} + +/* Skip a C-style block comment. We find the end of the comment by + seeing if an asterisk is before every '/' we encounter. Returns + non-zero if comment terminated by EOF, zero otherwise. */ +static int +skip_block_comment (pfile) + cpp_reader *pfile; +{ + cpp_buffer *buffer = pfile->buffer; + cppchar_t c = EOF, prevc = EOF; + + pfile->state.lexing_comment = 1; + while (buffer->cur != buffer->rlimit) + { + prevc = c, c = *buffer->cur++; + + /* FIXME: For speed, create a new character class of characters + of interest inside block comments. */ + if (c == '?' || c == '\\') + c = skip_escaped_newlines (pfile); + + /* People like decorating comments with '*', so check for '/' + instead for efficiency. */ + if (c == '/') + { + if (prevc == '*') + break; + + /* Warn about potential nested comments, but not if the '/' + comes immediately before the true comment delimiter. + Don't bother to get it right across escaped newlines. */ + if (CPP_OPTION (pfile, warn_comments) + && buffer->cur[0] == '*' && buffer->cur[1] != '/') + cpp_warning_with_line (pfile, + pfile->line, CPP_BUF_COL (buffer), + "\"/*\" within comment"); + } + else if (is_vspace (c)) + handle_newline (pfile); + else if (c == '\t') + adjust_column (pfile); + } + + pfile->state.lexing_comment = 0; + return c != '/' || prevc != '*'; +} + +/* Skip a C++ line comment, leaving buffer->cur pointing to the + terminating newline. Handles escaped newlines. Returns non-zero + if a multiline comment. */ +static int +skip_line_comment (pfile) + cpp_reader *pfile; +{ + cpp_buffer *buffer = pfile->buffer; + unsigned int orig_line = pfile->line; + cppchar_t c; + + pfile->state.lexing_comment = 1; + do + { + if (buffer->cur == buffer->rlimit) + goto at_eof; + + c = *buffer->cur++; + if (c == '?' || c == '\\') + c = skip_escaped_newlines (pfile); + } + while (!is_vspace (c)); + + /* Step back over the newline, except at EOF. */ + buffer->cur--; + at_eof: + + pfile->state.lexing_comment = 0; + return orig_line != pfile->line; +} + +/* pfile->buffer->cur is one beyond the \t character. Update + col_adjust so we track the column correctly. */ +static void +adjust_column (pfile) + cpp_reader *pfile; +{ + cpp_buffer *buffer = pfile->buffer; + unsigned int col = CPP_BUF_COL (buffer) - 1; /* Zero-based column. */ + + /* Round it up to multiple of the tabstop, but subtract 1 since the + tab itself occupies a character position. */ + buffer->col_adjust += (CPP_OPTION (pfile, tabstop) + - col % CPP_OPTION (pfile, tabstop)) - 1; +} + +/* Skips whitespace, saving the next non-whitespace character. + Adjusts pfile->col_adjust to account for tabs. Without this, + tokens might be assigned an incorrect column. */ +static int +skip_whitespace (pfile, c) + cpp_reader *pfile; + cppchar_t c; +{ + cpp_buffer *buffer = pfile->buffer; + unsigned int warned = 0; + + do + { + /* Horizontal space always OK. */ + if (c == ' ') + ; + else if (c == '\t') + adjust_column (pfile); + /* Just \f \v or \0 left. */ + else if (c == '\0') + { + if (buffer->cur - 1 == buffer->rlimit) + return 0; + if (!warned) + { + cpp_warning (pfile, "null character(s) ignored"); + warned = 1; + } + } + else if (pfile->state.in_directive && CPP_PEDANTIC (pfile)) + cpp_pedwarn_with_line (pfile, pfile->line, + CPP_BUF_COL (buffer), + "%s in preprocessing directive", + c == '\f' ? "form feed" : "vertical tab"); + + c = *buffer->cur++; + } + /* We only want non-vertical space, i.e. ' ' \t \f \v \0. */ + while (is_nvspace (c)); + + buffer->cur--; + return 1; +} + +/* See if the characters of a number token are valid in a name (no + '.', '+' or '-'). */ +static int +name_p (pfile, string) + cpp_reader *pfile; + const cpp_string *string; +{ + unsigned int i; + + for (i = 0; i < string->len; i++) + if (!is_idchar (string->text[i])) + return 0; + + return 1; +} + +/* Parse an identifier, skipping embedded backslash-newlines. This is + a critical inner loop. The common case is an identifier which has + not been split by backslash-newline, does not contain a dollar + sign, and has already been scanned (roughly 10:1 ratio of + seen:unseen identifiers in normal code; the distribution is + Poisson-like). Second most common case is a new identifier, not + split and no dollar sign. The other possibilities are rare and + have been relegated to parse_identifier_slow. */ +static cpp_hashnode * +parse_identifier (pfile) + cpp_reader *pfile; +{ + cpp_hashnode *result; + const U_CHAR *cur; + + /* Fast-path loop. Skim over a normal identifier. + N.B. ISIDNUM does not include $. */ + cur = pfile->buffer->cur; + while (ISIDNUM (*cur)) + cur++; + + /* Check for slow-path cases. */ + if (*cur == '?' || *cur == '\\' || *cur == '$') + result = parse_identifier_slow (pfile, cur); + else + { + const U_CHAR *base = pfile->buffer->cur - 1; + result = (cpp_hashnode *) + ht_lookup (pfile->hash_table, base, cur - base, HT_ALLOC); + pfile->buffer->cur = cur; + } + + /* Rarely, identifiers require diagnostics when lexed. + XXX Has to be forced out of the fast path. */ + if (__builtin_expect ((result->flags & NODE_DIAGNOSTIC) + && !pfile->state.skipping, 0)) + { + /* It is allowed to poison the same identifier twice. */ + if ((result->flags & NODE_POISONED) && !pfile->state.poisoned_ok) + cpp_error (pfile, "attempt to use poisoned \"%s\"", + NODE_NAME (result)); + + /* Constraint 6.10.3.5: __VA_ARGS__ should only appear in the + replacement list of a variadic macro. */ + if (result == pfile->spec_nodes.n__VA_ARGS__ + && !pfile->state.va_args_ok) + cpp_pedwarn (pfile, + "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"); + } + + return result; +} + +/* Slow path. This handles identifiers which have been split, and + identifiers which contain dollar signs. The part of the identifier + from PFILE->buffer->cur-1 to CUR has already been scanned. */ +static cpp_hashnode * +parse_identifier_slow (pfile, cur) + cpp_reader *pfile; + const U_CHAR *cur; +{ + cpp_buffer *buffer = pfile->buffer; + const U_CHAR *base = buffer->cur - 1; + struct obstack *stack = &pfile->hash_table->stack; + unsigned int c, saw_dollar = 0, len; + + /* Copy the part of the token which is known to be okay. */ + obstack_grow (stack, base, cur - base); + + /* Now process the part which isn't. We are looking at one of + '$', '\\', or '?' on entry to this loop. */ + c = *cur++; + buffer->cur = cur; + do + { + while (is_idchar (c)) + { + obstack_1grow (stack, c); + + if (c == '$') + saw_dollar++; + + c = *buffer->cur++; + } + + /* Potential escaped newline? */ + buffer->backup_to = buffer->cur - 1; + if (c != '?' && c != '\\') + break; + c = skip_escaped_newlines (pfile); + } + while (is_idchar (c)); + + /* Step back over the unwanted char. */ + BACKUP (); + + /* $ is not an identifier character in the standard, but is commonly + accepted as an extension. Don't warn about it in skipped + conditional blocks. */ + if (saw_dollar && CPP_PEDANTIC (pfile) && ! pfile->state.skipping) + cpp_pedwarn (pfile, "'$' character(s) in identifier"); + + /* Identifiers are null-terminated. */ + len = obstack_object_size (stack); + obstack_1grow (stack, '\0'); + + return (cpp_hashnode *) + ht_lookup (pfile->hash_table, obstack_finish (stack), len, HT_ALLOCED); +} + +/* Parse a number, beginning with character C, skipping embedded + backslash-newlines. LEADING_PERIOD is non-zero if there was a "." + before C. Place the result in NUMBER. */ +static void +parse_number (pfile, number, c, leading_period) + cpp_reader *pfile; + cpp_string *number; + cppchar_t c; + int leading_period; +{ + cpp_buffer *buffer = pfile->buffer; + unsigned char *dest, *limit; + + dest = BUFF_FRONT (pfile->u_buff); + limit = BUFF_LIMIT (pfile->u_buff); + + /* Place a leading period. */ + if (leading_period) + { + if (dest == limit) + { + _cpp_extend_buff (pfile, &pfile->u_buff, 1); + dest = BUFF_FRONT (pfile->u_buff); + limit = BUFF_LIMIT (pfile->u_buff); + } + *dest++ = '.'; + } + + do + { + do + { + /* Need room for terminating null. */ + if ((size_t) (limit - dest) < 2) + { + size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff); + _cpp_extend_buff (pfile, &pfile->u_buff, 2); + dest = BUFF_FRONT (pfile->u_buff) + len_so_far; + limit = BUFF_LIMIT (pfile->u_buff); + } + *dest++ = c; + + c = *buffer->cur++; + } + while (is_numchar (c) || c == '.' || VALID_SIGN (c, dest[-1])); + + /* Potential escaped newline? */ + buffer->backup_to = buffer->cur - 1; + if (c != '?' && c != '\\') + break; + c = skip_escaped_newlines (pfile); + } + while (is_numchar (c) || c == '.' || VALID_SIGN (c, dest[-1])); + + /* Step back over the unwanted char. */ + BACKUP (); + + /* Null-terminate the number. */ + *dest = '\0'; + + number->text = BUFF_FRONT (pfile->u_buff); + number->len = dest - number->text; + BUFF_FRONT (pfile->u_buff) = dest + 1; +} + +/* Subroutine of parse_string. Emits error for unterminated strings. */ +static void +unterminated (pfile, term) + cpp_reader *pfile; + int term; +{ + cpp_error (pfile, "missing terminating %c character", term); + + if (term == '\"' && pfile->mls_line && pfile->mls_line != pfile->line) + { + cpp_error_with_line (pfile, pfile->mls_line, pfile->mls_col, + "possible start of unterminated string literal"); + pfile->mls_line = 0; + } +} + +/* Subroutine of parse_string. */ +static int +unescaped_terminator_p (pfile, dest) + cpp_reader *pfile; + const unsigned char *dest; +{ + const unsigned char *start, *temp; + + /* In #include-style directives, terminators are not escapeable. */ + if (pfile->state.angled_headers) + return 1; + + start = BUFF_FRONT (pfile->u_buff); + + /* An odd number of consecutive backslashes represents an escaped + terminator. */ + for (temp = dest; temp > start && temp[-1] == '\\'; temp--) + ; + + return ((dest - temp) & 1) == 0; +} + +/* Parses a string, character constant, or angle-bracketed header file + name. Handles embedded trigraphs and escaped newlines. The stored + string is guaranteed NUL-terminated, but it is not guaranteed that + this is the first NUL since embedded NULs are preserved. + Multi-line strings are allowed, but they are deprecated. + + When this function returns, buffer->cur points to the next + character to be processed. */ +static void +parse_string (pfile, token, terminator) + cpp_reader *pfile; + cpp_token *token; + cppchar_t terminator; +{ + cpp_buffer *buffer = pfile->buffer; + unsigned char *dest, *limit; + cppchar_t c; + bool warned_nulls = false, warned_multi = false; + + dest = BUFF_FRONT (pfile->u_buff); + limit = BUFF_LIMIT (pfile->u_buff); + + for (;;) + { + /* We need room for another char, possibly the terminating NUL. */ + if ((size_t) (limit - dest) < 1) + { + size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff); + _cpp_extend_buff (pfile, &pfile->u_buff, 2); + dest = BUFF_FRONT (pfile->u_buff) + len_so_far; + limit = BUFF_LIMIT (pfile->u_buff); + } + + /* Handle trigraphs, escaped newlines etc. */ + c = *buffer->cur++; + if (c == '?' || c == '\\') + c = skip_escaped_newlines (pfile); + + if (c == terminator) + { + if (unescaped_terminator_p (pfile, dest)) + break; + } + else if (is_vspace (c)) + { + /* In assembly language, silently terminate string and + character literals at end of line. This is a kludge + around not knowing where comments are. */ + if (CPP_OPTION (pfile, lang) == CLK_ASM && terminator != '>') + { + buffer->cur--; + break; + } + + /* Character constants and header names may not extend over + multiple lines. In Standard C, neither may strings. + Unfortunately, we accept multiline strings as an + extension, except in #include family directives. */ + if (terminator != '"' || pfile->state.angled_headers) + { + unterminated (pfile, terminator); + buffer->cur--; + break; + } + + if (!warned_multi) + { + warned_multi = true; + cpp_pedwarn (pfile, "multi-line string literals are deprecated"); + } + + if (pfile->mls_line == 0) + { + pfile->mls_line = token->line; + pfile->mls_col = token->col; + } + + handle_newline (pfile); + c = '\n'; + } + else if (c == '\0') + { + if (buffer->cur - 1 == buffer->rlimit) + { + unterminated (pfile, terminator); + buffer->cur--; + break; + } + if (!warned_nulls) + { + warned_nulls = true; + cpp_warning (pfile, "null character(s) preserved in literal"); + } + } + + *dest++ = c; + } + + *dest = '\0'; + + token->val.str.text = BUFF_FRONT (pfile->u_buff); + token->val.str.len = dest - BUFF_FRONT (pfile->u_buff); + BUFF_FRONT (pfile->u_buff) = dest + 1; +} + +/* The stored comment includes the comment start and any terminator. */ +static void +save_comment (pfile, token, from) + cpp_reader *pfile; + cpp_token *token; + const unsigned char *from; +{ + unsigned char *buffer; + unsigned int len; + + len = pfile->buffer->cur - from + 1; /* + 1 for the initial '/'. */ + + /* C++ comments probably (not definitely) have moved past a new + line, which we don't want to save in the comment. */ + if (is_vspace (pfile->buffer->cur[-1])) + len--; + buffer = _cpp_unaligned_alloc (pfile, len); + + token->type = CPP_COMMENT; + token->val.str.len = len; + token->val.str.text = buffer; + + buffer[0] = '/'; + memcpy (buffer + 1, from, len - 1); +} + +/* Allocate COUNT tokens for RUN. */ +void +_cpp_init_tokenrun (run, count) + tokenrun *run; + unsigned int count; +{ + run->base = xnewvec (cpp_token, count); + run->limit = run->base + count; + run->next = NULL; +} + +/* Returns the next tokenrun, or creates one if there is none. */ +static tokenrun * +next_tokenrun (run) + tokenrun *run; +{ + if (run->next == NULL) + { + run->next = xnew (tokenrun); + run->next->prev = run; + _cpp_init_tokenrun (run->next, 250); + } + + return run->next; +} + +/* Allocate a single token that is invalidated at the same time as the + rest of the tokens on the line. Has its line and col set to the + same as the last lexed token, so that diagnostics appear in the + right place. */ +cpp_token * +_cpp_temp_token (pfile) + cpp_reader *pfile; +{ + cpp_token *old, *result; + + old = pfile->cur_token - 1; + if (pfile->cur_token == pfile->cur_run->limit) + { + pfile->cur_run = next_tokenrun (pfile->cur_run); + pfile->cur_token = pfile->cur_run->base; + } + + result = pfile->cur_token++; + result->line = old->line; + result->col = old->col; + return result; +} + +/* Lex a token into RESULT (external interface). Takes care of issues + like directive handling, token lookahead, multiple include + optimization and skipping. */ +const cpp_token * +_cpp_lex_token (pfile) + cpp_reader *pfile; +{ + cpp_token *result; + + for (;;) + { + if (pfile->cur_token == pfile->cur_run->limit) + { + pfile->cur_run = next_tokenrun (pfile->cur_run); + pfile->cur_token = pfile->cur_run->base; + } + + if (pfile->lookaheads) + { + pfile->lookaheads--; + result = pfile->cur_token++; + } + else + result = _cpp_lex_direct (pfile); + + if (result->flags & BOL) + { + /* Is this a directive. If _cpp_handle_directive returns + false, it is an assembler #. */ + if (result->type == CPP_HASH + && !pfile->state.parsing_args + && _cpp_handle_directive (pfile, result->flags & PREV_WHITE)) + continue; + if (pfile->cb.line_change && !pfile->state.skipping) + (*pfile->cb.line_change)(pfile, result, pfile->state.parsing_args); + } + + /* We don't skip tokens in directives. */ + if (pfile->state.in_directive) + break; + + /* Outside a directive, invalidate controlling macros. At file + EOF, _cpp_lex_direct takes care of popping the buffer, so we never + get here and MI optimisation works. */ + pfile->mi_valid = false; + + if (!pfile->state.skipping || result->type == CPP_EOF) + break; + } + + return result; +} + +#define IF_NEXT_IS(CHAR, THEN_TYPE, ELSE_TYPE) \ + do { \ + if (get_effective_char (pfile) == CHAR) \ + result->type = THEN_TYPE; \ + else \ + { \ + BACKUP (); \ + result->type = ELSE_TYPE; \ + } \ + } while (0) + +/* Lex a token into pfile->cur_token, which is also incremented, to + get diagnostics pointing to the correct location. + + Does not handle issues such as token lookahead, multiple-include + optimisation, directives, skipping etc. This function is only + suitable for use by _cpp_lex_token, and in special cases like + lex_expansion_token which doesn't care for any of these issues. + + When meeting a newline, returns CPP_EOF if parsing a directive, + otherwise returns to the start of the token buffer if permissible. + Returns the location of the lexed token. */ +cpp_token * +_cpp_lex_direct (pfile) + cpp_reader *pfile; +{ + cppchar_t c; + cpp_buffer *buffer; + const unsigned char *comment_start; + cpp_token *result = pfile->cur_token++; + + fresh_line: + buffer = pfile->buffer; + result->flags = buffer->saved_flags; + buffer->saved_flags = 0; + update_tokens_line: + result->line = pfile->line; + + skipped_white: + c = *buffer->cur++; + result->col = CPP_BUF_COLUMN (buffer, buffer->cur); + + trigraph: + switch (c) + { + case ' ': case '\t': case '\f': case '\v': case '\0': + result->flags |= PREV_WHITE; + if (skip_whitespace (pfile, c)) + goto skipped_white; + + /* EOF. */ + buffer->cur--; + buffer->saved_flags = BOL; + if (!pfile->state.parsing_args && !pfile->state.in_directive) + { + if (buffer->cur != buffer->line_base) + { + /* Non-empty files should end in a newline. Don't warn + for command line and _Pragma buffers. */ + if (!buffer->from_stage3) + cpp_pedwarn (pfile, "no newline at end of file"); + handle_newline (pfile); + } + + /* Don't pop the last buffer. */ + if (buffer->prev) + { + unsigned char stop = buffer->return_at_eof; + + _cpp_pop_buffer (pfile); + if (!stop) + goto fresh_line; + } + } + result->type = CPP_EOF; + break; + + case '\n': case '\r': + handle_newline (pfile); + buffer->saved_flags = BOL; + if (! pfile->state.in_directive) + { + if (pfile->state.parsing_args == 2) + buffer->saved_flags |= PREV_WHITE; + if (!pfile->keep_tokens) + { + pfile->cur_run = &pfile->base_run; + result = pfile->base_run.base; + pfile->cur_token = result + 1; + } + goto fresh_line; + } + result->type = CPP_EOF; + break; + + case '?': + case '\\': + /* These could start an escaped newline, or '?' a trigraph. Let + skip_escaped_newlines do all the work. */ + { + unsigned int line = pfile->line; + + c = skip_escaped_newlines (pfile); + if (line != pfile->line) + { + buffer->cur--; + /* We had at least one escaped newline of some sort. + Update the token's line and column. */ + goto update_tokens_line; + } + } + + /* We are either the original '?' or '\\', or a trigraph. */ + if (c == '?') + result->type = CPP_QUERY; + else if (c == '\\') + goto random_char; + else + goto trigraph; + break; + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + result->type = CPP_NUMBER; + parse_number (pfile, &result->val.str, c, 0); + break; + + case 'L': + /* 'L' may introduce wide characters or strings. */ + { + const unsigned char *pos = buffer->cur; + + c = get_effective_char (pfile); + if (c == '\'' || c == '"') + { + result->type = (c == '"' ? CPP_WSTRING: CPP_WCHAR); + parse_string (pfile, result, c); + break; + } + buffer->cur = pos; + } + /* Fall through. */ + + start_ident: + case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + result->type = CPP_NAME; + result->val.node = parse_identifier (pfile); + + /* Convert named operators to their proper types. */ + if (result->val.node->flags & NODE_OPERATOR) + { + result->flags |= NAMED_OP; + result->type = result->val.node->value.operator; + } + break; + + case '\'': + case '"': + result->type = c == '"' ? CPP_STRING: CPP_CHAR; + parse_string (pfile, result, c); + break; + + case '/': + /* A potential block or line comment. */ + comment_start = buffer->cur; + c = get_effective_char (pfile); + + if (c == '*') + { + if (skip_block_comment (pfile)) + cpp_error (pfile, "unterminated comment"); + } + else if (c == '/' && (CPP_OPTION (pfile, cplusplus_comments) + || CPP_IN_SYSTEM_HEADER (pfile))) + { + /* Warn about comments only if pedantically GNUC89, and not + in system headers. */ + if (CPP_OPTION (pfile, lang) == CLK_GNUC89 && CPP_PEDANTIC (pfile) + && ! buffer->warned_cplusplus_comments) + { + cpp_pedwarn (pfile, + "C++ style comments are not allowed in ISO C89"); + cpp_pedwarn (pfile, + "(this will be reported only once per input file)"); + buffer->warned_cplusplus_comments = 1; + } + + if (skip_line_comment (pfile) && CPP_OPTION (pfile, warn_comments)) + cpp_warning (pfile, "multi-line comment"); + } + else if (c == '=') + { + result->type = CPP_DIV_EQ; + break; + } + else + { + BACKUP (); + result->type = CPP_DIV; + break; + } + + if (!pfile->state.save_comments) + { + result->flags |= PREV_WHITE; + goto update_tokens_line; + } + + /* Save the comment as a token in its own right. */ + save_comment (pfile, result, comment_start); + break; + + case '<': + if (pfile->state.angled_headers) + { + result->type = CPP_HEADER_NAME; + parse_string (pfile, result, '>'); + break; + } + + c = get_effective_char (pfile); + if (c == '=') + result->type = CPP_LESS_EQ; + else if (c == '<') + IF_NEXT_IS ('=', CPP_LSHIFT_EQ, CPP_LSHIFT); + else if (c == '?' && CPP_OPTION (pfile, cplusplus)) + IF_NEXT_IS ('=', CPP_MIN_EQ, CPP_MIN); + else if (c == ':' && CPP_OPTION (pfile, digraphs)) + { + result->type = CPP_OPEN_SQUARE; + result->flags |= DIGRAPH; + } + else if (c == '%' && CPP_OPTION (pfile, digraphs)) + { + result->type = CPP_OPEN_BRACE; + result->flags |= DIGRAPH; + } + else + { + BACKUP (); + result->type = CPP_LESS; + } + break; + + case '>': + c = get_effective_char (pfile); + if (c == '=') + result->type = CPP_GREATER_EQ; + else if (c == '>') + IF_NEXT_IS ('=', CPP_RSHIFT_EQ, CPP_RSHIFT); + else if (c == '?' && CPP_OPTION (pfile, cplusplus)) + IF_NEXT_IS ('=', CPP_MAX_EQ, CPP_MAX); + else + { + BACKUP (); + result->type = CPP_GREATER; + } + break; + + case '%': + c = get_effective_char (pfile); + if (c == '=') + result->type = CPP_MOD_EQ; + else if (CPP_OPTION (pfile, digraphs) && c == ':') + { + result->flags |= DIGRAPH; + result->type = CPP_HASH; + if (get_effective_char (pfile) == '%') + { + const unsigned char *pos = buffer->cur; + + if (get_effective_char (pfile) == ':') + result->type = CPP_PASTE; + else + buffer->cur = pos - 1; + } + else + BACKUP (); + } + else if (CPP_OPTION (pfile, digraphs) && c == '>') + { + result->flags |= DIGRAPH; + result->type = CPP_CLOSE_BRACE; + } + else + { + BACKUP (); + result->type = CPP_MOD; + } + break; + + case '.': + result->type = CPP_DOT; + c = get_effective_char (pfile); + if (c == '.') + { + const unsigned char *pos = buffer->cur; + + if (get_effective_char (pfile) == '.') + result->type = CPP_ELLIPSIS; + else + buffer->cur = pos - 1; + } + /* All known character sets have 0...9 contiguous. */ + else if (ISDIGIT (c)) + { + result->type = CPP_NUMBER; + parse_number (pfile, &result->val.str, c, 1); + } + else if (c == '*' && CPP_OPTION (pfile, cplusplus)) + result->type = CPP_DOT_STAR; + else + BACKUP (); + break; + + case '+': + c = get_effective_char (pfile); + if (c == '+') + result->type = CPP_PLUS_PLUS; + else if (c == '=') + result->type = CPP_PLUS_EQ; + else + { + BACKUP (); + result->type = CPP_PLUS; + } + break; + + case '-': + c = get_effective_char (pfile); + if (c == '>') + { + result->type = CPP_DEREF; + if (CPP_OPTION (pfile, cplusplus)) + { + if (get_effective_char (pfile) == '*') + result->type = CPP_DEREF_STAR; + else + BACKUP (); + } + } + else if (c == '-') + result->type = CPP_MINUS_MINUS; + else if (c == '=') + result->type = CPP_MINUS_EQ; + else + { + BACKUP (); + result->type = CPP_MINUS; + } + break; + + case '&': + c = get_effective_char (pfile); + if (c == '&') + result->type = CPP_AND_AND; + else if (c == '=') + result->type = CPP_AND_EQ; + else + { + BACKUP (); + result->type = CPP_AND; + } + break; + + case '|': + c = get_effective_char (pfile); + if (c == '|') + result->type = CPP_OR_OR; + else if (c == '=') + result->type = CPP_OR_EQ; + else + { + BACKUP (); + result->type = CPP_OR; + } + break; + + case ':': + c = get_effective_char (pfile); + if (c == ':' && CPP_OPTION (pfile, cplusplus)) + result->type = CPP_SCOPE; + else if (c == '>' && CPP_OPTION (pfile, digraphs)) + { + result->flags |= DIGRAPH; + result->type = CPP_CLOSE_SQUARE; + } + else + { + BACKUP (); + result->type = CPP_COLON; + } + break; + + case '*': IF_NEXT_IS ('=', CPP_MULT_EQ, CPP_MULT); break; + case '=': IF_NEXT_IS ('=', CPP_EQ_EQ, CPP_EQ); break; + case '!': IF_NEXT_IS ('=', CPP_NOT_EQ, CPP_NOT); break; + case '^': IF_NEXT_IS ('=', CPP_XOR_EQ, CPP_XOR); break; + case '#': IF_NEXT_IS ('#', CPP_PASTE, CPP_HASH); break; + + case '~': result->type = CPP_COMPL; break; + case ',': result->type = CPP_COMMA; break; + case '(': result->type = CPP_OPEN_PAREN; break; + case ')': result->type = CPP_CLOSE_PAREN; break; + case '[': result->type = CPP_OPEN_SQUARE; break; + case ']': result->type = CPP_CLOSE_SQUARE; break; + case '{': result->type = CPP_OPEN_BRACE; break; + case '}': result->type = CPP_CLOSE_BRACE; break; + case ';': result->type = CPP_SEMICOLON; break; + + /* @ is a punctuator in Objective C. */ + case '@': result->type = CPP_ATSIGN; break; + + case '$': + if (CPP_OPTION (pfile, dollars_in_ident)) + goto start_ident; + /* Fall through... */ + + random_char: + default: + result->type = CPP_OTHER; + result->val.c = c; + break; + } + + return result; +} + +/* An upper bound on the number of bytes needed to spell TOKEN, + including preceding whitespace. */ +unsigned int +cpp_token_len (token) + const cpp_token *token; +{ + unsigned int len; + + switch (TOKEN_SPELL (token)) + { + default: len = 0; break; + case SPELL_NUMBER: + case SPELL_STRING: len = token->val.str.len; break; + case SPELL_IDENT: len = NODE_LEN (token->val.node); break; + } + /* 1 for whitespace, 4 for comment delimiters. */ + return len + 5; +} + +/* Write the spelling of a token TOKEN to BUFFER. The buffer must + already contain the enough space to hold the token's spelling. + Returns a pointer to the character after the last character + written. */ +unsigned char * +cpp_spell_token (pfile, token, buffer) + cpp_reader *pfile; /* Would be nice to be rid of this... */ + const cpp_token *token; + unsigned char *buffer; +{ + switch (TOKEN_SPELL (token)) + { + case SPELL_OPERATOR: + { + const unsigned char *spelling; + unsigned char c; + + if (token->flags & DIGRAPH) + spelling + = digraph_spellings[(int) token->type - (int) CPP_FIRST_DIGRAPH]; + else if (token->flags & NAMED_OP) + goto spell_ident; + else + spelling = TOKEN_NAME (token); + + while ((c = *spelling++) != '\0') + *buffer++ = c; + } + break; + + case SPELL_CHAR: + *buffer++ = token->val.c; + break; + + spell_ident: + case SPELL_IDENT: + memcpy (buffer, NODE_NAME (token->val.node), NODE_LEN (token->val.node)); + buffer += NODE_LEN (token->val.node); + break; + + case SPELL_NUMBER: + memcpy (buffer, token->val.str.text, token->val.str.len); + buffer += token->val.str.len; + break; + + case SPELL_STRING: + { + int left, right, tag; + switch (token->type) + { + case CPP_STRING: left = '"'; right = '"'; tag = '\0'; break; + case CPP_WSTRING: left = '"'; right = '"'; tag = 'L'; break; + case CPP_CHAR: left = '\''; right = '\''; tag = '\0'; break; + case CPP_WCHAR: left = '\''; right = '\''; tag = 'L'; break; + case CPP_HEADER_NAME: left = '<'; right = '>'; tag = '\0'; break; + default: + cpp_ice (pfile, "unknown string token %s\n", TOKEN_NAME (token)); + return buffer; + } + if (tag) *buffer++ = tag; + *buffer++ = left; + memcpy (buffer, token->val.str.text, token->val.str.len); + buffer += token->val.str.len; + *buffer++ = right; + } + break; + + case SPELL_NONE: + cpp_ice (pfile, "unspellable token %s", TOKEN_NAME (token)); + break; + } + + return buffer; +} + +/* Returns TOKEN spelt as a null-terminated string. The string is + freed when the reader is destroyed. Useful for diagnostics. */ +unsigned char * +cpp_token_as_text (pfile, token) + cpp_reader *pfile; + const cpp_token *token; +{ + unsigned int len = cpp_token_len (token); + unsigned char *start = _cpp_unaligned_alloc (pfile, len), *end; + + end = cpp_spell_token (pfile, token, start); + end[0] = '\0'; + + return start; +} + +/* Used by C front ends, which really should move to using + cpp_token_as_text. */ +const char * +cpp_type2name (type) + enum cpp_ttype type; +{ + return (const char *) token_spellings[type].name; +} + +/* Writes the spelling of token to FP, without any preceding space. + Separated from cpp_spell_token for efficiency - to avoid stdio + double-buffering. */ +void +cpp_output_token (token, fp) + const cpp_token *token; + FILE *fp; +{ + switch (TOKEN_SPELL (token)) + { + case SPELL_OPERATOR: + { + const unsigned char *spelling; + int c; + + if (token->flags & DIGRAPH) + spelling + = digraph_spellings[(int) token->type - (int) CPP_FIRST_DIGRAPH]; + else if (token->flags & NAMED_OP) + goto spell_ident; + else + spelling = TOKEN_NAME (token); + + c = *spelling; + do + putc (c, fp); + while ((c = *++spelling) != '\0'); + } + break; + + case SPELL_CHAR: + putc (token->val.c, fp); + break; + + spell_ident: + case SPELL_IDENT: + fwrite (NODE_NAME (token->val.node), 1, NODE_LEN (token->val.node), fp); + break; + + case SPELL_NUMBER: + fwrite (token->val.str.text, 1, token->val.str.len, fp); + break; + + case SPELL_STRING: + { + int left, right, tag; + switch (token->type) + { + case CPP_STRING: left = '"'; right = '"'; tag = '\0'; break; + case CPP_WSTRING: left = '"'; right = '"'; tag = 'L'; break; + case CPP_CHAR: left = '\''; right = '\''; tag = '\0'; break; + case CPP_WCHAR: left = '\''; right = '\''; tag = 'L'; break; + case CPP_HEADER_NAME: left = '<'; right = '>'; tag = '\0'; break; + default: + fprintf (stderr, "impossible STRING token %s\n", TOKEN_NAME (token)); + return; + } + if (tag) putc (tag, fp); + putc (left, fp); + fwrite (token->val.str.text, 1, token->val.str.len, fp); + putc (right, fp); + } + break; + + case SPELL_NONE: + /* An error, most probably. */ + break; + } +} + +/* Compare two tokens. */ +int +_cpp_equiv_tokens (a, b) + const cpp_token *a, *b; +{ + if (a->type == b->type && a->flags == b->flags) + switch (TOKEN_SPELL (a)) + { + default: /* Keep compiler happy. */ + case SPELL_OPERATOR: + return 1; + case SPELL_CHAR: + return a->val.c == b->val.c; /* Character. */ + case SPELL_NONE: + return (a->type != CPP_MACRO_ARG || a->val.arg_no == b->val.arg_no); + case SPELL_IDENT: + return a->val.node == b->val.node; + case SPELL_NUMBER: + case SPELL_STRING: + return (a->val.str.len == b->val.str.len + && !memcmp (a->val.str.text, b->val.str.text, + a->val.str.len)); + } + + return 0; +} + +/* Returns nonzero if a space should be inserted to avoid an + accidental token paste for output. For simplicity, it is + conservative, and occasionally advises a space where one is not + needed, e.g. "." and ".2". */ +int +cpp_avoid_paste (pfile, token1, token2) + cpp_reader *pfile; + const cpp_token *token1, *token2; +{ + enum cpp_ttype a = token1->type, b = token2->type; + cppchar_t c; + + if (token1->flags & NAMED_OP) + a = CPP_NAME; + if (token2->flags & NAMED_OP) + b = CPP_NAME; + + c = EOF; + if (token2->flags & DIGRAPH) + c = digraph_spellings[(int) b - (int) CPP_FIRST_DIGRAPH][0]; + else if (token_spellings[b].category == SPELL_OPERATOR) + c = token_spellings[b].name[0]; + + /* Quickly get everything that can paste with an '='. */ + if ((int) a <= (int) CPP_LAST_EQ && c == '=') + return 1; + + switch (a) + { + case CPP_GREATER: return c == '>' || c == '?'; + case CPP_LESS: return c == '<' || c == '?' || c == '%' || c == ':'; + case CPP_PLUS: return c == '+'; + case CPP_MINUS: return c == '-' || c == '>'; + case CPP_DIV: return c == '/' || c == '*'; /* Comments. */ + case CPP_MOD: return c == ':' || c == '>'; + case CPP_AND: return c == '&'; + case CPP_OR: return c == '|'; + case CPP_COLON: return c == ':' || c == '>'; + case CPP_DEREF: return c == '*'; + case CPP_DOT: return c == '.' || c == '%' || b == CPP_NUMBER; + case CPP_HASH: return c == '#' || c == '%'; /* Digraph form. */ + case CPP_NAME: return ((b == CPP_NUMBER + && name_p (pfile, &token2->val.str)) + || b == CPP_NAME + || b == CPP_CHAR || b == CPP_STRING); /* L */ + case CPP_NUMBER: return (b == CPP_NUMBER || b == CPP_NAME + || c == '.' || c == '+' || c == '-'); + case CPP_OTHER: return (CPP_OPTION (pfile, objc) + && token1->val.c == '@' + && (b == CPP_NAME || b == CPP_STRING)); + default: break; + } + + return 0; +} + +/* Output all the remaining tokens on the current line, and a newline + character, to FP. Leading whitespace is removed. If there are + macros, special token padding is not performed. */ +void +cpp_output_line (pfile, fp) + cpp_reader *pfile; + FILE *fp; +{ + const cpp_token *token; + + token = cpp_get_token (pfile); + while (token->type != CPP_EOF) + { + cpp_output_token (token, fp); + token = cpp_get_token (pfile); + if (token->flags & PREV_WHITE) + putc (' ', fp); + } + + putc ('\n', fp); +} + +/* Returns the value of a hexadecimal digit. */ +static unsigned int +hex_digit_value (c) + unsigned int c; +{ + if (hex_p (c)) + return hex_value (c); + else + abort (); +} + +/* Parse a '\uNNNN' or '\UNNNNNNNN' sequence. Returns 1 to indicate + failure if cpplib is not parsing C++ or C99. Such failure is + silent, and no variables are updated. Otherwise returns 0, and + warns if -Wtraditional. + + [lex.charset]: The character designated by the universal character + name \UNNNNNNNN is that character whose character short name in + ISO/IEC 10646 is NNNNNNNN; the character designated by the + universal character name \uNNNN is that character whose character + short name in ISO/IEC 10646 is 0000NNNN. If the hexadecimal value + for a universal character name is less than 0x20 or in the range + 0x7F-0x9F (inclusive), or if the universal character name + designates a character in the basic source character set, then the + program is ill-formed. + + We assume that wchar_t is Unicode, so we don't need to do any + mapping. Is this ever wrong? + + PC points to the 'u' or 'U', PSTR is points to the byte after PC, + LIMIT is the end of the string or charconst. PSTR is updated to + point after the UCS on return, and the UCS is written into PC. */ + +static int +maybe_read_ucs (pfile, pstr, limit, pc) + cpp_reader *pfile; + const unsigned char **pstr; + const unsigned char *limit; + unsigned int *pc; +{ + const unsigned char *p = *pstr; + unsigned int code = 0; + unsigned int c = *pc, length; + + /* Only attempt to interpret a UCS for C++ and C99. */ + if (! (CPP_OPTION (pfile, cplusplus) || CPP_OPTION (pfile, c99))) + return 1; + + if (CPP_WTRADITIONAL (pfile)) + cpp_warning (pfile, "the meaning of '\\%c' varies with -traditional", c); + + length = (c == 'u' ? 4: 8); + + if ((size_t) (limit - p) < length) + { + cpp_error (pfile, "incomplete universal-character-name"); + /* Skip to the end to avoid more diagnostics. */ + p = limit; + } + else + { + for (; length; length--, p++) + { + c = *p; + if (ISXDIGIT (c)) + code = (code << 4) + hex_digit_value (c); + else + { + cpp_error (pfile, + "non-hex digit '%c' in universal-character-name", c); + /* We shouldn't skip in case there are multibyte chars. */ + break; + } + } + } + +#ifdef TARGET_EBCDIC + cpp_error (pfile, "universal-character-name on EBCDIC target"); + code = 0x3f; /* EBCDIC invalid character */ +#else + /* True extended characters are OK. */ + if (code >= 0xa0 + && !(code & 0x80000000) + && !(code >= 0xD800 && code <= 0xDFFF)) + ; + /* The standard permits $, @ and ` to be specified as UCNs. We use + hex escapes so that this also works with EBCDIC hosts. */ + else if (code == 0x24 || code == 0x40 || code == 0x60) + ; + /* Don't give another error if one occurred above. */ + else if (length == 0) + cpp_error (pfile, "universal-character-name out of range"); +#endif + + *pstr = p; + *pc = code; + return 0; +} + +/* Interpret an escape sequence, and return its value. PSTR points to + the input pointer, which is just after the backslash. LIMIT is how + much text we have. MASK is a bitmask for the precision for the + destination type (char or wchar_t). TRADITIONAL, if true, does not + interpret escapes that did not exist in traditional C. + + Handles all relevant diagnostics. */ +unsigned int +cpp_parse_escape (pfile, pstr, limit, mask, traditional) + cpp_reader *pfile; + const unsigned char **pstr; + const unsigned char *limit; + unsigned HOST_WIDE_INT mask; + int traditional; +{ + int unknown = 0; + const unsigned char *str = *pstr; + unsigned int c = *str++; + + switch (c) + { + case '\\': case '\'': case '"': case '?': break; + case 'b': c = TARGET_BS; break; + case 'f': c = TARGET_FF; break; + case 'n': c = TARGET_NEWLINE; break; + case 'r': c = TARGET_CR; break; + case 't': c = TARGET_TAB; break; + case 'v': c = TARGET_VT; break; + + case '(': case '{': case '[': case '%': + /* '\(', etc, are used at beginning of line to avoid confusing Emacs. + '\%' is used to prevent SCCS from getting confused. */ + unknown = CPP_PEDANTIC (pfile); + break; + + case 'a': + if (CPP_WTRADITIONAL (pfile)) + cpp_warning (pfile, "the meaning of '\\a' varies with -traditional"); + if (!traditional) + c = TARGET_BELL; + break; + + case 'e': case 'E': + if (CPP_PEDANTIC (pfile)) + cpp_pedwarn (pfile, "non-ISO-standard escape sequence, '\\%c'", c); + c = TARGET_ESC; + break; + + case 'u': case 'U': + unknown = maybe_read_ucs (pfile, &str, limit, &c); + break; + + case 'x': + if (CPP_WTRADITIONAL (pfile)) + cpp_warning (pfile, "the meaning of '\\x' varies with -traditional"); + + if (!traditional) + { + unsigned int i = 0, overflow = 0; + int digits_found = 0; + + while (str < limit) + { + c = *str; + if (! ISXDIGIT (c)) + break; + str++; + overflow |= i ^ (i << 4 >> 4); + i = (i << 4) + hex_digit_value (c); + digits_found = 1; + } + + if (!digits_found) + cpp_error (pfile, "\\x used with no following hex digits"); + + if (overflow | (i != (i & mask))) + { + cpp_pedwarn (pfile, "hex escape sequence out of range"); + i &= mask; + } + c = i; + } + break; + + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + { + unsigned int i = c - '0'; + int count = 0; + + while (str < limit && ++count < 3) + { + c = *str; + if (c < '0' || c > '7') + break; + str++; + i = (i << 3) + c - '0'; + } + + if (i != (i & mask)) + { + cpp_pedwarn (pfile, "octal escape sequence out of range"); + i &= mask; + } + c = i; + } + break; + + default: + unknown = 1; + break; + } + + if (unknown) + { + if (ISGRAPH (c)) + cpp_pedwarn (pfile, "unknown escape sequence '\\%c'", c); + else + cpp_pedwarn (pfile, "unknown escape sequence: '\\%03o'", c); + } + + if (c > mask) + cpp_pedwarn (pfile, "escape sequence out of range for character"); + + *pstr = str; + return c; +} + +#ifndef MAX_CHAR_TYPE_SIZE +#define MAX_CHAR_TYPE_SIZE CHAR_TYPE_SIZE +#endif + +#ifndef MAX_WCHAR_TYPE_SIZE +#define MAX_WCHAR_TYPE_SIZE WCHAR_TYPE_SIZE +#endif + +/* Interpret a (possibly wide) character constant in TOKEN. + WARN_MULTI warns about multi-character charconsts, if not + TRADITIONAL. TRADITIONAL also indicates not to interpret escapes + that did not exist in traditional C. PCHARS_SEEN points to a + variable that is filled in with the number of characters seen. */ +HOST_WIDE_INT +cpp_interpret_charconst (pfile, token, warn_multi, traditional, pchars_seen) + cpp_reader *pfile; + const cpp_token *token; + int warn_multi; + int traditional; + unsigned int *pchars_seen; +{ + const unsigned char *str = token->val.str.text; + const unsigned char *limit = str + token->val.str.len; + unsigned int chars_seen = 0; + unsigned int width, max_chars, c; + unsigned HOST_WIDE_INT mask; + HOST_WIDE_INT result = 0; + bool unsigned_p; + +#ifdef MULTIBYTE_CHARS + (void) local_mbtowc (NULL, NULL, 0); +#endif + + /* Width in bits. */ + if (token->type == CPP_CHAR) + { + width = MAX_CHAR_TYPE_SIZE; + unsigned_p = CPP_OPTION (pfile, signed_char) == 0; + } + else + { + width = MAX_WCHAR_TYPE_SIZE; + unsigned_p = WCHAR_UNSIGNED; + } + + if (width < HOST_BITS_PER_WIDE_INT) + mask = ((unsigned HOST_WIDE_INT) 1 << width) - 1; + else + mask = ~0; + max_chars = HOST_BITS_PER_WIDE_INT / width; + + while (str < limit) + { +#ifdef MULTIBYTE_CHARS + wchar_t wc; + int char_len; + + char_len = local_mbtowc (&wc, str, limit - str); + if (char_len == -1) + { + cpp_warning (pfile, "ignoring invalid multibyte character"); + c = *str++; + } + else + { + str += char_len; + c = wc; + } +#else + c = *str++; +#endif + + if (c == '\\') + c = cpp_parse_escape (pfile, &str, limit, mask, traditional); + +#ifdef MAP_CHARACTER + if (ISPRINT (c)) + c = MAP_CHARACTER (c); +#endif + + /* Merge character into result; ignore excess chars. */ + if (++chars_seen <= max_chars) + { + if (width < HOST_BITS_PER_WIDE_INT) + result = (result << width) | (c & mask); + else + result = c; + } + } + + if (chars_seen == 0) + cpp_error (pfile, "empty character constant"); + else if (chars_seen > max_chars) + { + chars_seen = max_chars; + cpp_warning (pfile, "character constant too long"); + } + else if (chars_seen > 1 && !traditional && warn_multi) + cpp_warning (pfile, "multi-character character constant"); + + /* If relevant type is signed, sign-extend the constant. */ + if (chars_seen) + { + unsigned int nbits = chars_seen * width; + + mask = (unsigned HOST_WIDE_INT) ~0 >> (HOST_BITS_PER_WIDE_INT - nbits); + if (unsigned_p || ((result >> (nbits - 1)) & 1) == 0) + result &= mask; + else + result |= ~mask; + } + + *pchars_seen = chars_seen; + return result; +} + +/* Memory buffers. Changing these three constants can have a dramatic + effect on performance. The values here are reasonable defaults, + but might be tuned. If you adjust them, be sure to test across a + range of uses of cpplib, including heavy nested function-like macro + expansion. Also check the change in peak memory usage (NJAMD is a + good tool for this). */ +#define MIN_BUFF_SIZE 8000 +#define BUFF_SIZE_UPPER_BOUND(MIN_SIZE) (MIN_BUFF_SIZE + (MIN_SIZE) * 3 / 2) +#define EXTENDED_BUFF_SIZE(BUFF, MIN_EXTRA) \ + (MIN_EXTRA + ((BUFF)->limit - (BUFF)->cur) * 2) + +#if MIN_BUFF_SIZE > BUFF_SIZE_UPPER_BOUND (0) + #error BUFF_SIZE_UPPER_BOUND must be at least as large as MIN_BUFF_SIZE! +#endif + +struct dummy +{ + char c; + union + { + double d; + int *p; + } u; +}; + +#define DEFAULT_ALIGNMENT (offsetof (struct dummy, u)) +#define CPP_ALIGN(size, align) (((size) + ((align) - 1)) & ~((align) - 1)) + +/* Create a new allocation buffer. Place the control block at the end + of the buffer, so that buffer overflows will cause immediate chaos. */ +static _cpp_buff * +new_buff (len) + size_t len; +{ + _cpp_buff *result; + unsigned char *base; + + if (len < MIN_BUFF_SIZE) + len = MIN_BUFF_SIZE; + len = CPP_ALIGN (len, DEFAULT_ALIGNMENT); + + base = xmalloc (len + sizeof (_cpp_buff)); + result = (_cpp_buff *) (base + len); + result->base = base; + result->cur = base; + result->limit = base + len; + result->next = NULL; + return result; +} + +/* Place a chain of unwanted allocation buffers on the free list. */ +void +_cpp_release_buff (pfile, buff) + cpp_reader *pfile; + _cpp_buff *buff; +{ + _cpp_buff *end = buff; + + while (end->next) + end = end->next; + end->next = pfile->free_buffs; + pfile->free_buffs = buff; +} + +/* Return a free buffer of size at least MIN_SIZE. */ +_cpp_buff * +_cpp_get_buff (pfile, min_size) + cpp_reader *pfile; + size_t min_size; +{ + _cpp_buff *result, **p; + + for (p = &pfile->free_buffs;; p = &(*p)->next) + { + size_t size; + + if (*p == NULL) + return new_buff (min_size); + result = *p; + size = result->limit - result->base; + /* Return a buffer that's big enough, but don't waste one that's + way too big. */ + if (size >= min_size && size <= BUFF_SIZE_UPPER_BOUND (min_size)) + break; + } + + *p = result->next; + result->next = NULL; + result->cur = result->base; + return result; +} + +/* Creates a new buffer with enough space to hold the uncommitted + remaining bytes of BUFF, and at least MIN_EXTRA more bytes. Copies + the excess bytes to the new buffer. Chains the new buffer after + BUFF, and returns the new buffer. */ +_cpp_buff * +_cpp_append_extend_buff (pfile, buff, min_extra) + cpp_reader *pfile; + _cpp_buff *buff; + size_t min_extra; +{ + size_t size = EXTENDED_BUFF_SIZE (buff, min_extra); + _cpp_buff *new_buff = _cpp_get_buff (pfile, size); + + buff->next = new_buff; + memcpy (new_buff->base, buff->cur, BUFF_ROOM (buff)); + return new_buff; +} + +/* Creates a new buffer with enough space to hold the uncommitted + remaining bytes of the buffer pointed to by BUFF, and at least + MIN_EXTRA more bytes. Copies the excess bytes to the new buffer. + Chains the new buffer before the buffer pointed to by BUFF, and + updates the pointer to point to the new buffer. */ +void +_cpp_extend_buff (pfile, pbuff, min_extra) + cpp_reader *pfile; + _cpp_buff **pbuff; + size_t min_extra; +{ + _cpp_buff *new_buff, *old_buff = *pbuff; + size_t size = EXTENDED_BUFF_SIZE (old_buff, min_extra); + + new_buff = _cpp_get_buff (pfile, size); + memcpy (new_buff->base, old_buff->cur, BUFF_ROOM (old_buff)); + new_buff->next = old_buff; + *pbuff = new_buff; +} + +/* Free a chain of buffers starting at BUFF. */ +void +_cpp_free_buff (buff) + _cpp_buff *buff; +{ + _cpp_buff *next; + + for (; buff; buff = next) + { + next = buff->next; + free (buff->base); + } +} + +/* Allocate permanent, unaligned storage of length LEN. */ +unsigned char * +_cpp_unaligned_alloc (pfile, len) + cpp_reader *pfile; + size_t len; +{ + _cpp_buff *buff = pfile->u_buff; + unsigned char *result = buff->cur; + + if (len > (size_t) (buff->limit - result)) + { + buff = _cpp_get_buff (pfile, len); + buff->next = pfile->u_buff; + pfile->u_buff = buff; + result = buff->cur; + } + + buff->cur = result + len; + return result; +} + +/* Allocate permanent, unaligned storage of length LEN from a_buff. + That buffer is used for growing allocations when saving macro + replacement lists in a #define, and when parsing an answer to an + assertion in #assert, #unassert or #if (and therefore possibly + whilst expanding macros). It therefore must not be used by any + code that they might call: specifically the lexer and the guts of + the macro expander. + + All existing other uses clearly fit this restriction: storing + registered pragmas during initialization. */ +unsigned char * +_cpp_aligned_alloc (pfile, len) + cpp_reader *pfile; + size_t len; +{ + _cpp_buff *buff = pfile->a_buff; + unsigned char *result = buff->cur; + + if (len > (size_t) (buff->limit - result)) + { + buff = _cpp_get_buff (pfile, len); + buff->next = pfile->a_buff; + pfile->a_buff = buff; + result = buff->cur; + } + + buff->cur = result + len; + return result; +} diff --git a/src/mkutil/cpp/cpplex.obj b/src/mkutil/cpp/cpplex.obj new file mode 100644 index 0000000000000000000000000000000000000000..74777f0c9534906b2fc5b70db327681faf6f525a GIT binary patch literal 59389 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 as q-char and h-char sequences respectively. IN_I + means this directive should be handled even if -fpreprocessed is in + effect (these are the directives with callback hooks). */ +#define COND (1 << 0) +#define IF_COND (1 << 1) +#define INCL (1 << 2) +#define IN_I (1 << 3) + +/* Defines one #-directive, including how to handle it. */ +typedef void (*directive_handler) PARAMS ((cpp_reader *)); +typedef struct directive directive; +struct directive +{ + directive_handler handler; /* Function to handle directive. */ + const U_CHAR *name; /* Name of directive. */ + unsigned short length; /* Length of name. */ + unsigned char origin; /* Origin of directive. */ + unsigned char flags; /* Flags describing this directive. */ +}; + +/* Forward declarations. */ + +static void skip_rest_of_line PARAMS ((cpp_reader *)); +static void check_eol PARAMS ((cpp_reader *)); +static void start_directive PARAMS ((cpp_reader *)); +static void end_directive PARAMS ((cpp_reader *, int)); +static void directive_diagnostics + PARAMS ((cpp_reader *, const directive *, int)); +static void run_directive PARAMS ((cpp_reader *, int, + const char *, size_t)); +static const cpp_token *glue_header_name PARAMS ((cpp_reader *)); +static const cpp_token *parse_include PARAMS ((cpp_reader *)); +static void push_conditional PARAMS ((cpp_reader *, int, int, + const cpp_hashnode *)); +static unsigned int read_flag PARAMS ((cpp_reader *, unsigned int)); +static U_CHAR *dequote_string PARAMS ((cpp_reader *, const U_CHAR *, + unsigned int)); +static int strtoul_for_line PARAMS ((const U_CHAR *, unsigned int, + unsigned long *)); +static void do_diagnostic PARAMS ((cpp_reader *, enum error_type, int)); +static cpp_hashnode *lex_macro_node PARAMS ((cpp_reader *)); +static void do_include_common PARAMS ((cpp_reader *, enum include_type)); +static struct pragma_entry *lookup_pragma_entry + PARAMS ((struct pragma_entry *, const cpp_hashnode *pragma)); +static struct pragma_entry *insert_pragma_entry + PARAMS ((cpp_reader *, struct pragma_entry **, const cpp_hashnode *, + pragma_cb)); +static void do_pragma_once PARAMS ((cpp_reader *)); +static void do_pragma_poison PARAMS ((cpp_reader *)); +static void do_pragma_system_header PARAMS ((cpp_reader *)); +static void do_pragma_dependency PARAMS ((cpp_reader *)); +static void do_linemarker PARAMS ((cpp_reader *)); +static const cpp_token *get_token_no_padding PARAMS ((cpp_reader *)); +static const cpp_token *get__Pragma_string PARAMS ((cpp_reader *)); +static void destringize_and_run PARAMS ((cpp_reader *, const cpp_string *)); +static int parse_answer PARAMS ((cpp_reader *, struct answer **, int)); +static cpp_hashnode *parse_assertion PARAMS ((cpp_reader *, struct answer **, + int)); +static struct answer ** find_answer PARAMS ((cpp_hashnode *, + const struct answer *)); +static void handle_assertion PARAMS ((cpp_reader *, const char *, int)); + +/* This is the table of directive handlers. It is ordered by + frequency of occurrence; the numbers at the end are directive + counts from all the source code I have lying around (egcs and libc + CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and + pcmcia-cs-3.0.9). This is no longer important as directive lookup + is now O(1). All extensions other than #warning and #include_next + are deprecated. The name is where the extension appears to have + come from. */ + +#define DIRECTIVE_TABLE \ +D(define, T_DEFINE = 0, KANDR, IN_I) /* 270554 */ \ +D(include, T_INCLUDE, KANDR, INCL) /* 52262 */ \ +D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \ +D(ifdef, T_IFDEF, KANDR, COND | IF_COND) /* 22000 */ \ +D(if, T_IF, KANDR, COND | IF_COND) /* 18162 */ \ +D(else, T_ELSE, KANDR, COND) /* 9863 */ \ +D(ifndef, T_IFNDEF, KANDR, COND | IF_COND) /* 9675 */ \ +D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \ +D(line, T_LINE, KANDR, 0) /* 2465 */ \ +D(elif, T_ELIF, STDC89, COND) /* 610 */ \ +D(error, T_ERROR, STDC89, 0) /* 475 */ \ +D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \ +D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \ +D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL) /* 19 */ \ +D(ident, T_IDENT, EXTENSION, IN_I) /* 11 */ \ +D(import, T_IMPORT, EXTENSION, INCL) /* 0 ObjC */ \ +D(assert, T_ASSERT, EXTENSION, 0) /* 0 SVR4 */ \ +D(unassert, T_UNASSERT, EXTENSION, 0) /* 0 SVR4 */ \ +SCCS_ENTRY /* 0 SVR4? */ + +/* #sccs is not always recognized. */ +#ifdef SCCS_DIRECTIVE +# define SCCS_ENTRY D(sccs, T_SCCS, EXTENSION, 0) +#else +# define SCCS_ENTRY /* nothing */ +#endif + +/* Use the table to generate a series of prototypes, an enum for the + directive names, and an array of directive handlers. */ + +/* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */ +#define D(name, t, o, f) static void CONCAT2(do_,name) PARAMS ((cpp_reader *)); +DIRECTIVE_TABLE +#undef D + +#define D(n, tag, o, f) tag, +enum +{ + DIRECTIVE_TABLE + N_DIRECTIVES +}; +#undef D + +/* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */ +#define D(name, t, origin, flags) \ +{ CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \ + sizeof STRINGX(name) - 1, origin, flags }, +static const directive dtable[] = +{ +DIRECTIVE_TABLE +}; +#undef D +#undef DIRECTIVE_TABLE + +/* Wrapper struct directive for linemarkers. + The origin is more or less true - the original K+R cpp + did use this notation in its preprocessed output. */ +static const directive linemarker_dir = +{ + do_linemarker, U"#", 1, KANDR, IN_I +}; + +#define SEEN_EOL() (pfile->cur_token[-1].type == CPP_EOF) + +/* Skip any remaining tokens in a directive. */ +static void +skip_rest_of_line (pfile) + cpp_reader *pfile; +{ + /* Discard all stacked contexts. */ + while (pfile->context != &pfile->base_context) + _cpp_pop_context (pfile); + + /* Sweep up all tokens remaining on the line. */ + if (! SEEN_EOL ()) + while (_cpp_lex_token (pfile)->type != CPP_EOF) + ; +} + +/* Ensure there are no stray tokens at the end of a directive. */ +static void +check_eol (pfile) + cpp_reader *pfile; +{ + if (! SEEN_EOL () && _cpp_lex_token (pfile)->type != CPP_EOF) + cpp_pedwarn (pfile, "extra tokens at end of #%s directive", + pfile->directive->name); +} + +/* Called when entering a directive, _Pragma or command-line directive. */ +static void +start_directive (pfile) + cpp_reader *pfile; +{ + /* Setup in-directive state. */ + pfile->state.in_directive = 1; + pfile->state.save_comments = 0; + + /* Some handlers need the position of the # for diagnostics. */ + pfile->directive_line = pfile->line; +} + +/* Called when leaving a directive, _Pragma or command-line directive. */ +static void +end_directive (pfile, skip_line) + cpp_reader *pfile; + int skip_line; +{ + /* We don't skip for an assembler #. */ + if (skip_line) + { + skip_rest_of_line (pfile); + if (!pfile->keep_tokens) + { + pfile->cur_run = &pfile->base_run; + pfile->cur_token = pfile->base_run.base; + } + } + + /* Restore state. */ + pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments); + pfile->state.in_directive = 0; + pfile->state.angled_headers = 0; + pfile->directive = 0; +} + +/* Output diagnostics for a directive DIR. INDENTED is non-zero if + the '#' was indented. */ +static void +directive_diagnostics (pfile, dir, indented) + cpp_reader *pfile; + const directive *dir; + int indented; +{ + /* Issue -pedantic warnings for extensions. */ + if (CPP_PEDANTIC (pfile) + && ! pfile->state.skipping + && dir->origin == EXTENSION) + cpp_pedwarn (pfile, "#%s is a GCC extension", dir->name); + + /* Traditionally, a directive is ignored unless its # is in + column 1. Therefore in code intended to work with K+R + compilers, directives added by C89 must have their # + indented, and directives present in traditional C must not. + This is true even of directives in skipped conditional + blocks. #elif cannot be used at all. */ + if (CPP_WTRADITIONAL (pfile)) + { + if (dir == &dtable[T_ELIF]) + cpp_warning (pfile, "suggest not using #elif in traditional C"); + else if (indented && dir->origin == KANDR) + cpp_warning (pfile, + "traditional C ignores #%s with the # indented", + dir->name); + else if (!indented && dir->origin != KANDR) + cpp_warning (pfile, + "suggest hiding #%s from traditional C with an indented #", + dir->name); + } +} + +/* Check if we have a known directive. INDENTED is non-zero if the + '#' of the directive was indented. This function is in this file + to save unnecessarily exporting dtable etc. to cpplex.c. Returns + non-zero if the line of tokens has been handled, zero if we should + continue processing the line. */ +int +_cpp_handle_directive (pfile, indented) + cpp_reader *pfile; + int indented; +{ + const directive *dir = 0; + const cpp_token *dname; + int skip = 1; + + start_directive (pfile); + dname = _cpp_lex_token (pfile); + + if (dname->type == CPP_NAME) + { + if (dname->val.node->directive_index) + dir = &dtable[dname->val.node->directive_index - 1]; + } + /* We do not recognise the # followed by a number extension in + assembler code. */ + else if (dname->type == CPP_NUMBER && CPP_OPTION (pfile, lang) != CLK_ASM) + { + dir = &linemarker_dir; + if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed) + && ! pfile->state.skipping) + cpp_pedwarn (pfile, "style of line directive is a GCC extension"); + } + + if (dir) + { + /* If we have a directive that is not an opening conditional, + invalidate any control macro. */ + if (! (dir->flags & IF_COND)) + pfile->mi_valid = false; + + /* Kluge alert. In order to be sure that code like this + + #define HASH # + HASH define foo bar + + does not cause '#define foo bar' to get executed when + compiled with -save-temps, we recognize directives in + -fpreprocessed mode only if the # is in column 1. cppmacro.c + puts a space in front of any '#' at the start of a macro. */ + if (CPP_OPTION (pfile, preprocessed) + && (indented || !(dir->flags & IN_I))) + { + skip = 0; + dir = 0; + } + else + { + /* In failed conditional groups, all non-conditional + directives are ignored. Before doing that, whether + skipping or not, we should lex angle-bracketed headers + correctly, and maybe output some diagnostics. */ + pfile->state.angled_headers = dir->flags & INCL; + if (! CPP_OPTION (pfile, preprocessed)) + directive_diagnostics (pfile, dir, indented); + if (pfile->state.skipping && !(dir->flags & COND)) + dir = 0; + } + } + else if (dname->type == CPP_EOF) + ; /* CPP_EOF is the "null directive". */ + else + { + /* An unknown directive. Don't complain about it in assembly + source: we don't know where the comments are, and # may + introduce assembler pseudo-ops. Don't complain about invalid + directives in skipped conditional groups (6.10 p4). */ + if (CPP_OPTION (pfile, lang) == CLK_ASM) + skip = 0; + else if (!pfile->state.skipping) + cpp_error (pfile, "invalid preprocessing directive #%s", + cpp_token_as_text (pfile, dname)); + } + + if (dir) + { + pfile->directive = dir; + (*pfile->directive->handler) (pfile); + } + else if (skip == 0) + _cpp_backup_tokens (pfile, 1); + + end_directive (pfile, skip); + return skip; +} + +/* Directive handler wrapper used by the command line option + processor. */ +static void +run_directive (pfile, dir_no, buf, count) + cpp_reader *pfile; + int dir_no; + const char *buf; + size_t count; +{ + cpp_push_buffer (pfile, (const U_CHAR *) buf, count, + /* from_stage3 */ true, 1); + start_directive (pfile); + /* We don't want a leading # to be interpreted as a directive. */ + pfile->buffer->saved_flags = 0; + pfile->directive = &dtable[dir_no]; + (void) (*pfile->directive->handler) (pfile); + end_directive (pfile, 1); + _cpp_pop_buffer (pfile); +} + +/* Checks for validity the macro name in #define, #undef, #ifdef and + #ifndef directives. */ +static cpp_hashnode * +lex_macro_node (pfile) + cpp_reader *pfile; +{ + cpp_hashnode *node; + const cpp_token *token = _cpp_lex_token (pfile); + + /* The token immediately after #define must be an identifier. That + identifier may not be "defined", per C99 6.10.8p4. + In C++, it may not be any of the "named operators" either, + per C++98 [lex.digraph], [lex.key]. + Finally, the identifier may not have been poisoned. (In that case + the lexer has issued the error message for us.) */ + + if (token->type != CPP_NAME) + { + if (token->type == CPP_EOF) + cpp_error (pfile, "no macro name given in #%s directive", + pfile->directive->name); + else if (token->flags & NAMED_OP) + cpp_error (pfile, + "\"%s\" cannot be used as a macro name as it is an operator in C++", + NODE_NAME (token->val.node)); + else + cpp_error (pfile, "macro names must be identifiers"); + + return 0; + } + + node = token->val.node; + if (node->flags & NODE_POISONED) + return 0; + + if (node == pfile->spec_nodes.n_defined) + { + cpp_error (pfile, "\"%s\" cannot be used as a macro name", + NODE_NAME (node)); + return 0; + } + + return node; +} + +/* Process a #define directive. Most work is done in cppmacro.c. */ +static void +do_define (pfile) + cpp_reader *pfile; +{ + cpp_hashnode *node = lex_macro_node (pfile); + + if (node) + { + if (_cpp_create_definition (pfile, node)) + if (pfile->cb.define) + (*pfile->cb.define) (pfile, pfile->directive_line, node); + } +} + +/* Handle #undef. Mark the identifier NT_VOID in the hash table. */ +static void +do_undef (pfile) + cpp_reader *pfile; +{ + cpp_hashnode *node = lex_macro_node (pfile); + + /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier + is not currently defined as a macro name. */ + if (node && node->type == NT_MACRO) + { + if (pfile->cb.undef) + (*pfile->cb.undef) (pfile, pfile->directive_line, node); + + if (node->flags & NODE_WARN) + cpp_warning (pfile, "undefining \"%s\"", NODE_NAME (node)); + + _cpp_free_definition (node); + } + check_eol (pfile); +} + +/* Helper routine used by parse_include. Reinterpret the current line + as an h-char-sequence (< ... >); we are looking at the first token + after the <. Returns the header as a token, or NULL on failure. */ +static const cpp_token * +glue_header_name (pfile) + cpp_reader *pfile; +{ + cpp_token *header = NULL; + const cpp_token *token; + unsigned char *buffer; + size_t len, total_len = 0, capacity = 1024; + + /* To avoid lexed tokens overwriting our glued name, we can only + allocate from the string pool once we've lexed everything. */ + buffer = (unsigned char *) xmalloc (capacity); + for (;;) + { + token = cpp_get_token (pfile); + + if (token->type == CPP_GREATER || token->type == CPP_EOF) + break; + + len = cpp_token_len (token); + if (total_len + len > capacity) + { + capacity = (capacity + len) * 2; + buffer = (unsigned char *) xrealloc (buffer, capacity); + } + + if (token->flags & PREV_WHITE) + buffer[total_len++] = ' '; + + total_len = cpp_spell_token (pfile, token, &buffer[total_len]) - buffer; + } + + if (token->type == CPP_EOF) + cpp_error (pfile, "missing terminating > character"); + else + { + unsigned char *token_mem = _cpp_unaligned_alloc (pfile, total_len + 1); + memcpy (token_mem, buffer, total_len); + token_mem[total_len] = '\0'; + + header = _cpp_temp_token (pfile); + header->type = CPP_HEADER_NAME; + header->flags = 0; + header->val.str.len = total_len; + header->val.str.text = token_mem; + } + + free ((PTR) buffer); + return header; +} + +/* Returns the header string of #include, #include_next, #import and + #pragma dependency. Returns NULL on error. */ +static const cpp_token * +parse_include (pfile) + cpp_reader *pfile; +{ + const unsigned char *dir; + const cpp_token *header; + + if (pfile->directive == &dtable[T_PRAGMA]) + dir = U"pragma dependency"; + else + dir = pfile->directive->name; + + /* Allow macro expansion. */ + header = cpp_get_token (pfile); + if (header->type != CPP_STRING && header->type != CPP_HEADER_NAME) + { + if (header->type != CPP_LESS) + { + cpp_error (pfile, "#%s expects \"FILENAME\" or ", dir); + return NULL; + } + + header = glue_header_name (pfile); + if (header == NULL) + return header; + } + + if (header->val.str.len == 0) + { + cpp_error (pfile, "empty file name in #%s", dir); + return NULL; + } + + return header; +} + +/* Handle #include, #include_next and #import. */ +static void +do_include_common (pfile, type) + cpp_reader *pfile; + enum include_type type; +{ + const cpp_token *header; + + /* For #include_next, if this is the primary source file, warn and + use the normal search logic. */ + if (type == IT_INCLUDE_NEXT && ! pfile->buffer->prev) + { + cpp_warning (pfile, "#include_next in primary source file"); + type = IT_INCLUDE; + } + else if (type == IT_IMPORT && CPP_OPTION (pfile, warn_import)) + { + CPP_OPTION (pfile, warn_import) = 0; + cpp_warning (pfile, + "#import is obsolete, use an #ifndef wrapper in the header file"); + } + + header = parse_include (pfile); + if (header) + { + /* Prevent #include recursion. */ + if (pfile->line_maps.depth >= CPP_STACK_MAX) + cpp_fatal (pfile, "#include nested too deeply"); + else + { + check_eol (pfile); + /* Get out of macro context, if we are. */ + skip_rest_of_line (pfile); + if (pfile->cb.include) + (*pfile->cb.include) (pfile, pfile->directive_line, + pfile->directive->name, header); + + _cpp_execute_include (pfile, header, type); + } + } +} + +static void +do_include (pfile) + cpp_reader *pfile; +{ + do_include_common (pfile, IT_INCLUDE); +} + +static void +do_import (pfile) + cpp_reader *pfile; +{ + do_include_common (pfile, IT_IMPORT); +} + +static void +do_include_next (pfile) + cpp_reader *pfile; +{ + do_include_common (pfile, IT_INCLUDE_NEXT); +} + +/* Subroutine of do_linemarker. Read possible flags after file name. + LAST is the last flag seen; 0 if this is the first flag. Return the + flag if it is valid, 0 at the end of the directive. Otherwise + complain. */ +static unsigned int +read_flag (pfile, last) + cpp_reader *pfile; + unsigned int last; +{ + const cpp_token *token = _cpp_lex_token (pfile); + + if (token->type == CPP_NUMBER && token->val.str.len == 1) + { + unsigned int flag = token->val.str.text[0] - '0'; + + if (flag > last && flag <= 4 + && (flag != 4 || last == 3) + && (flag != 2 || last == 0)) + return flag; + } + + if (token->type != CPP_EOF) + cpp_error (pfile, "invalid flag \"%s\" in line directive", + cpp_token_as_text (pfile, token)); + return 0; +} + +/* Subroutine of do_line and do_linemarker. Returns a version of STR + which has a NUL terminator and all escape sequences converted to + their equivalents. Temporary, hopefully. */ +static U_CHAR * +dequote_string (pfile, str, len) + cpp_reader *pfile; + const U_CHAR *str; + unsigned int len; +{ + U_CHAR *result = _cpp_unaligned_alloc (pfile, len + 1); + U_CHAR *dst = result; + const U_CHAR *limit = str + len; + unsigned int c; + unsigned HOST_WIDE_INT mask; + + /* We need the mask to match the host's 'unsigned char', not the + target's. */ + if (CHAR_BIT < HOST_BITS_PER_WIDE_INT) + mask = ((unsigned HOST_WIDE_INT) 1 << CHAR_BIT) - 1; + else + mask = ~(unsigned HOST_WIDE_INT)0; + + while (str < limit) + { + c = *str++; + if (c != '\\') + *dst++ = c; + else + *dst++ = cpp_parse_escape (pfile, (const U_CHAR **)&str, limit, mask, 0); + } + *dst++ = '\0'; + return result; +} + +/* Subroutine of do_line and do_linemarker. Convert a number in STR, + of length LEN, to binary; store it in NUMP, and return 0 if the + number was well-formed, 1 if not. Temporary, hopefully. */ +static int +strtoul_for_line (str, len, nump) + const U_CHAR *str; + unsigned int len; + unsigned long *nump; +{ + unsigned long reg = 0; + U_CHAR c; + while (len--) + { + c = *str++; + if (!ISDIGIT (c)) + return 1; + reg *= 10; + reg += c - '0'; + } + *nump = reg; + return 0; +} + +/* Interpret #line command. + Note that the filename string (if any) is a true string constant + (escapes are interpreted), unlike in #line. */ +static void +do_line (pfile) + cpp_reader *pfile; +{ + const cpp_token *token; + const char *new_file = pfile->map->to_file; + unsigned long new_lineno; + + /* C99 raised the minimum limit on #line numbers. */ + unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767; + + /* #line commands expand macros. */ + token = cpp_get_token (pfile); + if (token->type != CPP_NUMBER + || strtoul_for_line (token->val.str.text, token->val.str.len, + &new_lineno)) + { + cpp_error (pfile, "\"%s\" after #line is not a positive integer", + cpp_token_as_text (pfile, token)); + return; + } + + if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap)) + cpp_pedwarn (pfile, "line number out of range"); + + token = cpp_get_token (pfile); + if (token->type == CPP_STRING) + { + new_file = (const char *) dequote_string (pfile, token->val.str.text, + token->val.str.len); + check_eol (pfile); + } + else if (token->type != CPP_EOF) + { + cpp_error (pfile, "\"%s\" is not a valid filename", + cpp_token_as_text (pfile, token)); + return; + } + + skip_rest_of_line (pfile); + _cpp_do_file_change (pfile, LC_RENAME, new_file, new_lineno, + pfile->map->sysp); +} + +/* Interpret the # 44 "file" [flags] notation, which has slightly + different syntax and semantics from #line: Flags are allowed, + and we never complain about the line number being too big. */ +static void +do_linemarker (pfile) + cpp_reader *pfile; +{ + const cpp_token *token; + const char *new_file = pfile->map->to_file; + unsigned long new_lineno; + unsigned int new_sysp = pfile->map->sysp; + enum lc_reason reason = LC_RENAME; + int flag; + + /* Back up so we can get the number again. Putting this in + _cpp_handle_directive risks two calls to _cpp_backup_tokens in + some circumstances, which can segfault. */ + _cpp_backup_tokens (pfile, 1); + + /* #line commands expand macros. */ + token = cpp_get_token (pfile); + if (token->type != CPP_NUMBER + || strtoul_for_line (token->val.str.text, token->val.str.len, + &new_lineno)) + { + cpp_error (pfile, "\"%s\" after # is not a positive integer", + cpp_token_as_text (pfile, token)); + return; + } + + token = cpp_get_token (pfile); + if (token->type == CPP_STRING) + { + new_file = (const char *) dequote_string (pfile, token->val.str.text, + token->val.str.len); + new_sysp = 0; + flag = read_flag (pfile, 0); + if (flag == 1) + { + reason = LC_ENTER; + /* Fake an include for cpp_included (). */ + _cpp_fake_include (pfile, new_file); + flag = read_flag (pfile, flag); + } + else if (flag == 2) + { + reason = LC_LEAVE; + flag = read_flag (pfile, flag); + } + if (flag == 3) + { + new_sysp = 1; + flag = read_flag (pfile, flag); + if (flag == 4) + new_sysp = 2; + } + + check_eol (pfile); + } + else if (token->type != CPP_EOF) + { + cpp_error (pfile, "\"%s\" is not a valid filename", + cpp_token_as_text (pfile, token)); + return; + } + + skip_rest_of_line (pfile); + _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp); +} + +/* Arrange the file_change callback. pfile->line has changed to + FILE_LINE of TO_FILE, for reason REASON. SYSP is 1 for a system + header, 2 for a system header that needs to be extern "C" protected, + and zero otherwise. */ +void +_cpp_do_file_change (pfile, reason, to_file, file_line, sysp) + cpp_reader *pfile; + enum lc_reason reason; + const char *to_file; + unsigned int file_line; + unsigned int sysp; +{ + pfile->map = add_line_map (&pfile->line_maps, reason, sysp, + pfile->line, to_file, file_line); + + if (pfile->cb.file_change) + (*pfile->cb.file_change) (pfile, pfile->map); +} + +/* Report a warning or error detected by the program we are + processing. Use the directive's tokens in the error message. */ +static void +do_diagnostic (pfile, code, print_dir) + cpp_reader *pfile; + enum error_type code; + int print_dir; +{ + if (_cpp_begin_message (pfile, code, 0, 0)) + { + if (print_dir) + fprintf (stderr, "#%s ", pfile->directive->name); + pfile->state.prevent_expansion++; + cpp_output_line (pfile, stderr); + pfile->state.prevent_expansion--; + } +} + +static void +do_error (pfile) + cpp_reader *pfile; +{ + do_diagnostic (pfile, ERROR, 1); +} + +static void +do_warning (pfile) + cpp_reader *pfile; +{ + /* We want #warning diagnostics to be emitted in system headers too. */ + do_diagnostic (pfile, WARNING_SYSHDR, 1); +} + +/* Report program identification. */ +static void +do_ident (pfile) + cpp_reader *pfile; +{ + const cpp_token *str = cpp_get_token (pfile); + + if (str->type != CPP_STRING) + cpp_error (pfile, "invalid #ident directive"); + else if (pfile->cb.ident) + (*pfile->cb.ident) (pfile, pfile->directive_line, &str->val.str); + + check_eol (pfile); +} + +/* Lookup a PRAGMA name in a singly-linked CHAIN. Returns the + matching entry, or NULL if none is found. The returned entry could + be the start of a namespace chain, or a pragma. */ +static struct pragma_entry * +lookup_pragma_entry (chain, pragma) + struct pragma_entry *chain; + const cpp_hashnode *pragma; +{ + while (chain && chain->pragma != pragma) + chain = chain->next; + + return chain; +} + +/* Create and insert a pragma entry for NAME at the beginning of a + singly-linked CHAIN. If handler is NULL, it is a namespace, + otherwise it is a pragma and its handler. */ +static struct pragma_entry * +insert_pragma_entry (pfile, chain, pragma, handler) + cpp_reader *pfile; + struct pragma_entry **chain; + const cpp_hashnode *pragma; + pragma_cb handler; +{ + struct pragma_entry *new; + + new = (struct pragma_entry *) + _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry)); + new->pragma = pragma; + if (handler) + { + new->is_nspace = 0; + new->u.handler = handler; + } + else + { + new->is_nspace = 1; + new->u.space = NULL; + } + + new->next = *chain; + *chain = new; + return new; +} + +/* Register a pragma NAME in namespace SPACE. If SPACE is null, it + goes in the global namespace. HANDLER is the handler it will call, + which must be non-NULL. */ +void +cpp_register_pragma (pfile, space, name, handler) + cpp_reader *pfile; + const char *space; + const char *name; + pragma_cb handler; +{ + struct pragma_entry **chain = &pfile->pragmas; + struct pragma_entry *entry; + const cpp_hashnode *node; + + if (!handler) + abort (); + + if (space) + { + node = cpp_lookup (pfile, U space, strlen (space)); + entry = lookup_pragma_entry (*chain, node); + if (!entry) + entry = insert_pragma_entry (pfile, chain, node, NULL); + else if (!entry->is_nspace) + goto clash; + chain = &entry->u.space; + } + + /* Check for duplicates. */ + node = cpp_lookup (pfile, U name, strlen (name)); + entry = lookup_pragma_entry (*chain, node); + if (entry) + { + if (entry->is_nspace) + clash: + cpp_ice (pfile, + "registering \"%s\" as both a pragma and a pragma namespace", + NODE_NAME (node)); + else if (space) + cpp_ice (pfile, "#pragma %s %s is already registered", space, name); + else + cpp_ice (pfile, "#pragma %s is already registered", name); + } + else + insert_pragma_entry (pfile, chain, node, handler); +} + +/* Register the pragmas the preprocessor itself handles. */ +void +_cpp_init_internal_pragmas (pfile) + cpp_reader *pfile; +{ + /* Pragmas in the global namespace. */ + cpp_register_pragma (pfile, 0, "poison", do_pragma_poison); + cpp_register_pragma (pfile, 0, "once", do_pragma_once); + + /* New GCC-specific pragmas should be put in the GCC namespace. */ + cpp_register_pragma (pfile, "GCC", "poison", do_pragma_poison); + cpp_register_pragma (pfile, "GCC", "system_header", do_pragma_system_header); + cpp_register_pragma (pfile, "GCC", "dependency", do_pragma_dependency); +} + +/* Pragmata handling. We handle some, and pass the rest on to the + front end. C99 defines three pragmas and says that no macro + expansion is to be performed on them; whether or not macro + expansion happens for other pragmas is implementation defined. + This implementation never macro-expands the text after #pragma. */ +static void +do_pragma (pfile) + cpp_reader *pfile; +{ + const struct pragma_entry *p = NULL; + const cpp_token *token; + unsigned int count = 1; + + pfile->state.prevent_expansion++; + + token = cpp_get_token (pfile); + if (token->type == CPP_NAME) + { + p = lookup_pragma_entry (pfile->pragmas, token->val.node); + if (p && p->is_nspace) + { + count = 2; + token = cpp_get_token (pfile); + if (token->type == CPP_NAME) + p = lookup_pragma_entry (p->u.space, token->val.node); + else + p = NULL; + } + } + + /* FIXME. This is an awful kludge to get the front ends to update + their notion of line number for diagnostic purposes. The line + number should be passed to the handler and they should do it + themselves. Stand-alone CPP must ignore us, otherwise it will + prefix the directive with spaces, hence the 1. Ugh. */ + if (pfile->cb.line_change) + (*pfile->cb.line_change)(pfile, token, 1); + + if (p) + (*p->u.handler) (pfile); + else if (pfile->cb.def_pragma) + { + _cpp_backup_tokens (pfile, count); + (*pfile->cb.def_pragma) (pfile, pfile->directive_line); + } + + pfile->state.prevent_expansion--; +} + +/* Handle #pragma once. */ +static void +do_pragma_once (pfile) + cpp_reader *pfile; +{ + cpp_warning (pfile, "#pragma once is obsolete"); + + if (pfile->buffer->prev == NULL) + cpp_warning (pfile, "#pragma once in main file"); + else + _cpp_never_reread (pfile->buffer->inc); + + check_eol (pfile); +} + +/* Handle #pragma poison, to poison one or more identifiers so that + the lexer produces a hard error for each subsequent usage. */ +static void +do_pragma_poison (pfile) + cpp_reader *pfile; +{ + const cpp_token *tok; + cpp_hashnode *hp; + + pfile->state.poisoned_ok = 1; + for (;;) + { + tok = _cpp_lex_token (pfile); + if (tok->type == CPP_EOF) + break; + if (tok->type != CPP_NAME) + { + cpp_error (pfile, "invalid #pragma GCC poison directive"); + break; + } + + hp = tok->val.node; + if (hp->flags & NODE_POISONED) + continue; + + if (hp->type == NT_MACRO) + cpp_warning (pfile, "poisoning existing macro \"%s\"", NODE_NAME (hp)); + _cpp_free_definition (hp); + hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC; + } + pfile->state.poisoned_ok = 0; +} + +/* Mark the current header as a system header. This will suppress + some categories of warnings (notably those from -pedantic). It is + intended for use in system libraries that cannot be implemented in + conforming C, but cannot be certain that their headers appear in a + system include directory. To prevent abuse, it is rejected in the + primary source file. */ +static void +do_pragma_system_header (pfile) + cpp_reader *pfile; +{ + cpp_buffer *buffer = pfile->buffer; + + if (buffer->prev == 0) + cpp_warning (pfile, "#pragma system_header ignored outside include file"); + else + { + check_eol (pfile); + skip_rest_of_line (pfile); + cpp_make_system_header (pfile, 1, 0); + } +} + +/* Check the modified date of the current include file against a specified + file. Issue a diagnostic, if the specified file is newer. We use this to + determine if a fixed header should be refixed. */ +static void +do_pragma_dependency (pfile) + cpp_reader *pfile; +{ + const cpp_token *header; + int ordering; + + header = parse_include (pfile); + if (!header) + return; + + ordering = _cpp_compare_file_date (pfile, header); + if (ordering < 0) + cpp_warning (pfile, "cannot find source %s", + cpp_token_as_text (pfile, header)); + else if (ordering > 0) + { + cpp_warning (pfile, "current file is older than %s", + cpp_token_as_text (pfile, header)); + if (cpp_get_token (pfile)->type != CPP_EOF) + { + _cpp_backup_tokens (pfile, 1); + do_diagnostic (pfile, WARNING, 0); + } + } +} + +/* Get a token but skip padding. */ +static const cpp_token * +get_token_no_padding (pfile) + cpp_reader *pfile; +{ + for (;;) + { + const cpp_token *result = cpp_get_token (pfile); + if (result->type != CPP_PADDING) + return result; + } +} + +/* Check syntax is "(string-literal)". Returns the string on success, + or NULL on failure. */ +static const cpp_token * +get__Pragma_string (pfile) + cpp_reader *pfile; +{ + const cpp_token *string; + + if (get_token_no_padding (pfile)->type != CPP_OPEN_PAREN) + return NULL; + + string = get_token_no_padding (pfile); + if (string->type != CPP_STRING && string->type != CPP_WSTRING) + return NULL; + + if (get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN) + return NULL; + + return string; +} + +/* Destringize IN into a temporary buffer, by removing the first \ of + \" and \\ sequences, and process the result as a #pragma directive. */ +static void +destringize_and_run (pfile, in) + cpp_reader *pfile; + const cpp_string *in; +{ + const unsigned char *src, *limit; + char *dest, *result; + + dest = result = alloca (in->len + 1); + for (src = in->text, limit = src + in->len; src < limit;) + { + /* We know there is a character following the backslash. */ + if (*src == '\\' && (src[1] == '\\' || src[1] == '"')) + src++; + *dest++ = *src++; + } + *dest = '\0'; + + run_directive (pfile, T_PRAGMA, result, dest - result); +} + +/* Handle the _Pragma operator. */ +void +_cpp_do__Pragma (pfile) + cpp_reader *pfile; +{ + const cpp_token *string = get__Pragma_string (pfile); + + if (!string) + cpp_error (pfile, "_Pragma takes a parenthesized string literal"); + else + { + /* Ideally, we'd like + token1 _Pragma ("foo") token2 + to be output as + token1 + # 7 "file.c" + #pragma foo + # 7 "file.c" + token2 + Getting these correct line markers is a little tricky. */ + + unsigned int orig_line = pfile->line; + destringize_and_run (pfile, &string->val.str); + pfile->line = orig_line; + pfile->buffer->saved_flags = BOL; + } +} + +/* Just ignore #sccs, on systems where we define it at all. */ +#ifdef SCCS_DIRECTIVE +static void +do_sccs (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; +{ +} +#endif + +/* Handle #ifdef. */ +static void +do_ifdef (pfile) + cpp_reader *pfile; +{ + int skip = 1; + + if (! pfile->state.skipping) + { + const cpp_hashnode *node = lex_macro_node (pfile); + + if (node) + skip = node->type != NT_MACRO; + + if (node) + check_eol (pfile); + } + + push_conditional (pfile, skip, T_IFDEF, 0); +} + +/* Handle #ifndef. */ +static void +do_ifndef (pfile) + cpp_reader *pfile; +{ + int skip = 1; + const cpp_hashnode *node = 0; + + if (! pfile->state.skipping) + { + node = lex_macro_node (pfile); + if (node) + skip = node->type == NT_MACRO; + + if (node) + check_eol (pfile); + } + + push_conditional (pfile, skip, T_IFNDEF, node); +} + +/* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in + pfile->mi_ind_cmacro so we can handle multiple-include + optimisations. If macro expansion occurs in the expression, we + cannot treat it as a controlling conditional, since the expansion + could change in the future. That is handled by cpp_get_token. */ +static void +do_if (pfile) + cpp_reader *pfile; +{ + int skip = 1; + + if (! pfile->state.skipping) + skip = _cpp_parse_expr (pfile) == 0; + + push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro); +} + +/* Flip skipping state if appropriate and continue without changing + if_stack; this is so that the error message for missing #endif's + etc. will point to the original #if. */ +static void +do_else (pfile) + cpp_reader *pfile; +{ + cpp_buffer *buffer = pfile->buffer; + struct if_stack *ifs = buffer->if_stack; + + if (ifs == NULL) + cpp_error (pfile, "#else without #if"); + else + { + if (ifs->type == T_ELSE) + { + cpp_error (pfile, "#else after #else"); + cpp_error_with_line (pfile, ifs->line, 0, + "the conditional began here"); + } + ifs->type = T_ELSE; + + /* Skip any future (erroneous) #elses or #elifs. */ + pfile->state.skipping = ifs->skip_elses; + ifs->skip_elses = true; + + /* Invalidate any controlling macro. */ + ifs->mi_cmacro = 0; + + /* Only check EOL if was not originally skipping. */ + if (!ifs->was_skipping) + check_eol (pfile); + } +} + +/* Handle a #elif directive by not changing if_stack either. See the + comment above do_else. */ +static void +do_elif (pfile) + cpp_reader *pfile; +{ + cpp_buffer *buffer = pfile->buffer; + struct if_stack *ifs = buffer->if_stack; + + if (ifs == NULL) + cpp_error (pfile, "#elif without #if"); + else + { + if (ifs->type == T_ELSE) + { + cpp_error (pfile, "#elif after #else"); + cpp_error_with_line (pfile, ifs->line, 0, + "the conditional began here"); + } + ifs->type = T_ELIF; + + /* Only evaluate this if we aren't skipping elses. During + evaluation, set skipping to false to get lexer warnings. */ + if (ifs->skip_elses) + pfile->state.skipping = 1; + else + { + pfile->state.skipping = 0; + pfile->state.skipping = ! _cpp_parse_expr (pfile); + ifs->skip_elses = ! pfile->state.skipping; + } + + /* Invalidate any controlling macro. */ + ifs->mi_cmacro = 0; + } +} + +/* #endif pops the if stack and resets pfile->state.skipping. */ +static void +do_endif (pfile) + cpp_reader *pfile; +{ + cpp_buffer *buffer = pfile->buffer; + struct if_stack *ifs = buffer->if_stack; + + if (ifs == NULL) + cpp_error (pfile, "#endif without #if"); + else + { + /* Only check EOL if was not originally skipping. */ + if (!ifs->was_skipping) + check_eol (pfile); + + /* If potential control macro, we go back outside again. */ + if (ifs->next == 0 && ifs->mi_cmacro) + { + pfile->mi_valid = true; + pfile->mi_cmacro = ifs->mi_cmacro; + } + + buffer->if_stack = ifs->next; + pfile->state.skipping = ifs->was_skipping; + obstack_free (&pfile->buffer_ob, ifs); + } +} + +/* Push an if_stack entry for a preprocessor conditional, and set + pfile->state.skipping to SKIP. If TYPE indicates the conditional + is #if or #ifndef, CMACRO is a potentially controlling macro, and + we need to check here that we are at the top of the file. */ +static void +push_conditional (pfile, skip, type, cmacro) + cpp_reader *pfile; + int skip; + int type; + const cpp_hashnode *cmacro; +{ + struct if_stack *ifs; + cpp_buffer *buffer = pfile->buffer; + + ifs = xobnew (&pfile->buffer_ob, struct if_stack); + ifs->line = pfile->directive_line; + ifs->next = buffer->if_stack; + ifs->skip_elses = pfile->state.skipping || !skip; + ifs->was_skipping = pfile->state.skipping; + ifs->type = type; + /* This condition is effectively a test for top-of-file. */ + if (pfile->mi_valid && pfile->mi_cmacro == 0) + ifs->mi_cmacro = cmacro; + else + ifs->mi_cmacro = 0; + + pfile->state.skipping = skip; + buffer->if_stack = ifs; +} + +/* Read the tokens of the answer into the macro pool, in a directive + of type TYPE. Only commit the memory if we intend it as permanent + storage, i.e. the #assert case. Returns 0 on success, and sets + ANSWERP to point to the answer. */ +static int +parse_answer (pfile, answerp, type) + cpp_reader *pfile; + struct answer **answerp; + int type; +{ + const cpp_token *paren; + struct answer *answer; + unsigned int acount; + + /* In a conditional, it is legal to not have an open paren. We + should save the following token in this case. */ + paren = cpp_get_token (pfile); + + /* If not a paren, see if we're OK. */ + if (paren->type != CPP_OPEN_PAREN) + { + /* In a conditional no answer is a test for any answer. It + could be followed by any token. */ + if (type == T_IF) + { + _cpp_backup_tokens (pfile, 1); + return 0; + } + + /* #unassert with no answer is valid - it removes all answers. */ + if (type == T_UNASSERT && paren->type == CPP_EOF) + return 0; + + cpp_error (pfile, "missing '(' after predicate"); + return 1; + } + + for (acount = 0;; acount++) + { + size_t room_needed; + const cpp_token *token = cpp_get_token (pfile); + cpp_token *dest; + + if (token->type == CPP_CLOSE_PAREN) + break; + + if (token->type == CPP_EOF) + { + cpp_error (pfile, "missing ')' to complete answer"); + return 1; + } + + /* struct answer includes the space for one token. */ + room_needed = (sizeof (struct answer) + acount * sizeof (cpp_token)); + + if (BUFF_ROOM (pfile->a_buff) < room_needed) + _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (struct answer)); + + dest = &((struct answer *) BUFF_FRONT (pfile->a_buff))->first[acount]; + *dest = *token; + + /* Drop whitespace at start, for answer equivalence purposes. */ + if (acount == 0) + dest->flags &= ~PREV_WHITE; + } + + if (acount == 0) + { + cpp_error (pfile, "predicate's answer is empty"); + return 1; + } + + answer = (struct answer *) BUFF_FRONT (pfile->a_buff); + answer->count = acount; + answer->next = NULL; + *answerp = answer; + + return 0; +} + +/* Parses an assertion directive of type TYPE, returning a pointer to + the hash node of the predicate, or 0 on error. If an answer was + supplied, it is placed in ANSWERP, otherwise it is set to 0. */ +static cpp_hashnode * +parse_assertion (pfile, answerp, type) + cpp_reader *pfile; + struct answer **answerp; + int type; +{ + cpp_hashnode *result = 0; + const cpp_token *predicate; + + /* We don't expand predicates or answers. */ + pfile->state.prevent_expansion++; + + *answerp = 0; + predicate = cpp_get_token (pfile); + if (predicate->type == CPP_EOF) + cpp_error (pfile, "assertion without predicate"); + else if (predicate->type != CPP_NAME) + cpp_error (pfile, "predicate must be an identifier"); + else if (parse_answer (pfile, answerp, type) == 0) + { + unsigned int len = NODE_LEN (predicate->val.node); + unsigned char *sym = alloca (len + 1); + + /* Prefix '#' to get it out of macro namespace. */ + sym[0] = '#'; + memcpy (sym + 1, NODE_NAME (predicate->val.node), len); + result = cpp_lookup (pfile, sym, len + 1); + } + + pfile->state.prevent_expansion--; + return result; +} + +/* Returns a pointer to the pointer to CANDIDATE in the answer chain, + or a pointer to NULL if the answer is not in the chain. */ +static struct answer ** +find_answer (node, candidate) + cpp_hashnode *node; + const struct answer *candidate; +{ + unsigned int i; + struct answer **result; + + for (result = &node->value.answers; *result; result = &(*result)->next) + { + struct answer *answer = *result; + + if (answer->count == candidate->count) + { + for (i = 0; i < answer->count; i++) + if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i])) + break; + + if (i == answer->count) + break; + } + } + + return result; +} + +/* Test an assertion within a preprocessor conditional. Returns + non-zero on failure, zero on success. On success, the result of + the test is written into VALUE. */ +int +_cpp_test_assertion (pfile, value) + cpp_reader *pfile; + int *value; +{ + struct answer *answer; + cpp_hashnode *node; + + node = parse_assertion (pfile, &answer, T_IF); + if (node) + *value = (node->type == NT_ASSERTION && + (answer == 0 || *find_answer (node, answer) != 0)); + + /* We don't commit the memory for the answer - it's temporary only. */ + return node == 0; +} + +/* Handle #assert. */ +static void +do_assert (pfile) + cpp_reader *pfile; +{ + struct answer *new_answer; + cpp_hashnode *node; + + node = parse_assertion (pfile, &new_answer, T_ASSERT); + if (node) + { + /* Place the new answer in the answer list. First check there + is not a duplicate. */ + new_answer->next = 0; + if (node->type == NT_ASSERTION) + { + if (*find_answer (node, new_answer)) + { + cpp_warning (pfile, "\"%s\" re-asserted", NODE_NAME (node) + 1); + return; + } + new_answer->next = node->value.answers; + } + + node->type = NT_ASSERTION; + node->value.answers = new_answer; + BUFF_FRONT (pfile->a_buff) += (sizeof (struct answer) + + (new_answer->count - 1) + * sizeof (cpp_token)); + check_eol (pfile); + } +} + +/* Handle #unassert. */ +static void +do_unassert (pfile) + cpp_reader *pfile; +{ + cpp_hashnode *node; + struct answer *answer; + + node = parse_assertion (pfile, &answer, T_UNASSERT); + /* It isn't an error to #unassert something that isn't asserted. */ + if (node && node->type == NT_ASSERTION) + { + if (answer) + { + struct answer **p = find_answer (node, answer), *temp; + + /* Remove the answer from the list. */ + temp = *p; + if (temp) + *p = temp->next; + + /* Did we free the last answer? */ + if (node->value.answers == 0) + node->type = NT_VOID; + + check_eol (pfile); + } + else + _cpp_free_definition (node); + } + + /* We don't commit the memory for the answer - it's temporary only. */ +} + +/* These are for -D, -U, -A. */ + +/* Process the string STR as if it appeared as the body of a #define. + If STR is just an identifier, define it with value 1. + If STR has anything after the identifier, then it should + be identifier=definition. */ +void +cpp_define (pfile, str) + cpp_reader *pfile; + const char *str; +{ + char *buf, *p; + size_t count; + + /* Copy the entire option so we can modify it. + Change the first "=" in the string to a space. If there is none, + tack " 1" on the end. */ + + count = strlen (str); + buf = (char *) alloca (count + 3); + memcpy (buf, str, count); + + p = strchr (str, '='); + if (p) + buf[p - str] = ' '; + else + { + buf[count++] = ' '; + buf[count++] = '1'; + } + buf[count] = '\0'; + + run_directive (pfile, T_DEFINE, buf, count); +} + +/* Slight variant of the above for use by initialize_builtins. */ +void +_cpp_define_builtin (pfile, str) + cpp_reader *pfile; + const char *str; +{ + run_directive (pfile, T_DEFINE, str, strlen (str)); +} + +/* Process MACRO as if it appeared as the body of an #undef. */ +void +cpp_undef (pfile, macro) + cpp_reader *pfile; + const char *macro; +{ + run_directive (pfile, T_UNDEF, macro, strlen (macro)); +} + +/* Process the string STR as if it appeared as the body of a #assert. */ +void +cpp_assert (pfile, str) + cpp_reader *pfile; + const char *str; +{ + handle_assertion (pfile, str, T_ASSERT); +} + +/* Process STR as if it appeared as the body of an #unassert. */ +void +cpp_unassert (pfile, str) + cpp_reader *pfile; + const char *str; +{ + handle_assertion (pfile, str, T_UNASSERT); +} + +/* Common code for cpp_assert (-A) and cpp_unassert (-A-). */ +static void +handle_assertion (pfile, str, type) + cpp_reader *pfile; + const char *str; + int type; +{ + size_t count = strlen (str); + const char *p = strchr (str, '='); + + if (p) + { + /* Copy the entire option so we can modify it. Change the first + "=" in the string to a '(', and tack a ')' on the end. */ + char *buf = (char *) alloca (count + 2); + + memcpy (buf, str, count); + buf[p - str] = '('; + buf[count++] = ')'; + buf[count] = '\0'; + str = buf; + } + + run_directive (pfile, type, str, count); +} + +/* The number of errors for a given reader. */ +unsigned int +cpp_errors (pfile) + cpp_reader *pfile; +{ + return pfile->errors; +} + +/* The options structure. */ +cpp_options * +cpp_get_options (pfile) + cpp_reader *pfile; +{ + return &pfile->opts; +} + +/* The callbacks structure. */ +cpp_callbacks * +cpp_get_callbacks (pfile) + cpp_reader *pfile; +{ + return &pfile->cb; +} + +/* The line map set. */ +const struct line_maps * +cpp_get_line_maps (pfile) + cpp_reader *pfile; +{ + return &pfile->line_maps; +} + +/* Copy the given callbacks structure to our own. */ +void +cpp_set_callbacks (pfile, cb) + cpp_reader *pfile; + cpp_callbacks *cb; +{ + pfile->cb = *cb; +} + +/* Push a new buffer on the buffer stack. Returns the new buffer; it + doesn't fail. It does not generate a file change call back; that + is the responsibility of the caller. */ +cpp_buffer * +cpp_push_buffer (pfile, buffer, len, from_stage3, return_at_eof) + cpp_reader *pfile; + const U_CHAR *buffer; + size_t len; + int from_stage3; + int return_at_eof; +{ + cpp_buffer *new = xobnew (&pfile->buffer_ob, cpp_buffer); + + /* Clears, amongst other things, if_stack and mi_cmacro. */ + memset (new, 0, sizeof (cpp_buffer)); + + new->line_base = new->buf = new->cur = buffer; + new->rlimit = buffer + len; + new->from_stage3 = from_stage3; + new->prev = pfile->buffer; + new->return_at_eof = return_at_eof; + new->saved_flags = BOL; + + pfile->buffer = new; + + return new; +} + +/* If called from do_line, pops a single buffer. Otherwise pops all + buffers until a real file is reached. Generates appropriate + call-backs. */ +void +_cpp_pop_buffer (pfile) + cpp_reader *pfile; +{ + cpp_buffer *buffer = pfile->buffer; + struct if_stack *ifs; + bool pushed = false; + + /* Walk back up the conditional stack till we reach its level at + entry to this file, issuing error messages. */ + for (ifs = buffer->if_stack; ifs; ifs = ifs->next) + cpp_error_with_line (pfile, ifs->line, 0, + "unterminated #%s", dtable[ifs->type].name); + + /* In case of a missing #endif. */ + pfile->state.skipping = 0; + + /* Update the reader's buffer before _cpp_do_file_change. */ + pfile->buffer = buffer->prev; + + if (buffer->inc) + pushed = _cpp_pop_file_buffer (pfile, buffer->inc); + + if (!pushed) + obstack_free (&pfile->buffer_ob, buffer); +} + +/* Enter all recognised directives in the hash table. */ +void +_cpp_init_directives (pfile) + cpp_reader *pfile; +{ + unsigned int i; + cpp_hashnode *node; + + for (i = 0; i < (unsigned int) N_DIRECTIVES; i++) + { + node = cpp_lookup (pfile, dtable[i].name, dtable[i].length); + node->directive_index = i + 1; + } +} diff --git a/src/mkutil/cpp/cpplib.h b/src/mkutil/cpp/cpplib.h new file mode 100644 index 00000000..3e8368a6 --- /dev/null +++ b/src/mkutil/cpp/cpplib.h @@ -0,0 +1,607 @@ +/* Definitions for CPP library. + Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Free Software Foundation, Inc. + Written by Per Bothner, 1994-95. + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ +#ifndef GCC_CPPLIB_H +#define GCC_CPPLIB_H + +#include +#include "hashtable.h" +#include "line-map.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* For complex reasons, cpp_reader is also typedefed in c-pragma.h. */ +#ifndef GCC_C_PRAGMA_H +typedef struct cpp_reader cpp_reader; +#endif +typedef struct cpp_buffer cpp_buffer; +typedef struct cpp_options cpp_options; +typedef struct cpp_token cpp_token; +typedef struct cpp_string cpp_string; +typedef struct cpp_hashnode cpp_hashnode; +typedef struct cpp_macro cpp_macro; +typedef struct cpp_callbacks cpp_callbacks; + +struct answer; +struct file_name_map_list; + +/* The first two groups, apart from '=', can appear in preprocessor + expressions. This allows a lookup table to be implemented in + _cpp_parse_expr. + + The first group, to CPP_LAST_EQ, can be immediately followed by an + '='. The lexer needs operators ending in '=', like ">>=", to be in + the same order as their counterparts without the '=', like ">>". */ + +/* Positions in the table. */ +#define CPP_LAST_EQ CPP_MAX +#define CPP_FIRST_DIGRAPH CPP_HASH +#define CPP_LAST_PUNCTUATOR CPP_DOT_STAR + +#define TTYPE_TABLE \ + OP(CPP_EQ = 0, "=") \ + OP(CPP_NOT, "!") \ + OP(CPP_GREATER, ">") /* compare */ \ + OP(CPP_LESS, "<") \ + OP(CPP_PLUS, "+") /* math */ \ + OP(CPP_MINUS, "-") \ + OP(CPP_MULT, "*") \ + OP(CPP_DIV, "/") \ + OP(CPP_MOD, "%") \ + OP(CPP_AND, "&") /* bit ops */ \ + OP(CPP_OR, "|") \ + OP(CPP_XOR, "^") \ + OP(CPP_RSHIFT, ">>") \ + OP(CPP_LSHIFT, "<<") \ + OP(CPP_MIN, "?") \ +\ + OP(CPP_COMPL, "~") \ + OP(CPP_AND_AND, "&&") /* logical */ \ + OP(CPP_OR_OR, "||") \ + OP(CPP_QUERY, "?") \ + OP(CPP_COLON, ":") \ + OP(CPP_COMMA, ",") /* grouping */ \ + OP(CPP_OPEN_PAREN, "(") \ + OP(CPP_CLOSE_PAREN, ")") \ + OP(CPP_EQ_EQ, "==") /* compare */ \ + OP(CPP_NOT_EQ, "!=") \ + OP(CPP_GREATER_EQ, ">=") \ + OP(CPP_LESS_EQ, "<=") \ +\ + OP(CPP_PLUS_EQ, "+=") /* math */ \ + OP(CPP_MINUS_EQ, "-=") \ + OP(CPP_MULT_EQ, "*=") \ + OP(CPP_DIV_EQ, "/=") \ + OP(CPP_MOD_EQ, "%=") \ + OP(CPP_AND_EQ, "&=") /* bit ops */ \ + OP(CPP_OR_EQ, "|=") \ + OP(CPP_XOR_EQ, "^=") \ + OP(CPP_RSHIFT_EQ, ">>=") \ + OP(CPP_LSHIFT_EQ, "<<=") \ + OP(CPP_MIN_EQ, "?=") \ + /* Digraphs together, beginning with CPP_FIRST_DIGRAPH. */ \ + OP(CPP_HASH, "#") /* digraphs */ \ + OP(CPP_PASTE, "##") \ + OP(CPP_OPEN_SQUARE, "[") \ + OP(CPP_CLOSE_SQUARE, "]") \ + OP(CPP_OPEN_BRACE, "{") \ + OP(CPP_CLOSE_BRACE, "}") \ + /* The remainder of the punctuation. Order is not significant. */ \ + OP(CPP_SEMICOLON, ";") /* structure */ \ + OP(CPP_ELLIPSIS, "...") \ + OP(CPP_PLUS_PLUS, "++") /* increment */ \ + OP(CPP_MINUS_MINUS, "--") \ + OP(CPP_DEREF, "->") /* accessors */ \ + OP(CPP_DOT, ".") \ + OP(CPP_SCOPE, "::") \ + OP(CPP_DEREF_STAR, "->*") \ + OP(CPP_DOT_STAR, ".*") \ + OP(CPP_ATSIGN, "@") /* used in Objective C */ \ +\ + TK(CPP_NAME, SPELL_IDENT) /* word */ \ + TK(CPP_NUMBER, SPELL_NUMBER) /* 34_be+ta */ \ +\ + TK(CPP_CHAR, SPELL_STRING) /* 'char' */ \ + TK(CPP_WCHAR, SPELL_STRING) /* L'char' */ \ + TK(CPP_OTHER, SPELL_CHAR) /* stray punctuation */ \ +\ + TK(CPP_STRING, SPELL_STRING) /* "string" */ \ + TK(CPP_WSTRING, SPELL_STRING) /* L"string" */ \ + TK(CPP_HEADER_NAME, SPELL_STRING) /* in #include */ \ +\ + TK(CPP_COMMENT, SPELL_NUMBER) /* Only if output comments. */ \ + /* SPELL_NUMBER happens to DTRT. */ \ + TK(CPP_MACRO_ARG, SPELL_NONE) /* Macro argument. */ \ + TK(CPP_PADDING, SPELL_NONE) /* Whitespace for cpp0. */ \ + TK(CPP_EOF, SPELL_NONE) /* End of line or file. */ + +#define OP(e, s) e, +#define TK(e, s) e, +enum cpp_ttype +{ + TTYPE_TABLE + N_TTYPES +}; +#undef OP +#undef TK + +/* C language kind, used when calling cpp_reader_init. */ +enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99, + CLK_GNUCXX, CLK_CXX98, CLK_OBJC, CLK_OBJCXX, CLK_ASM}; + +/* Payload of a NUMBER, STRING, CHAR or COMMENT token. */ +struct cpp_string +{ + unsigned int len; + const unsigned char *text; +}; + +/* Flags for the cpp_token structure. */ +#define PREV_WHITE (1 << 0) /* If whitespace before this token. */ +#define DIGRAPH (1 << 1) /* If it was a digraph. */ +#define STRINGIFY_ARG (1 << 2) /* If macro argument to be stringified. */ +#define PASTE_LEFT (1 << 3) /* If on LHS of a ## operator. */ +#define NAMED_OP (1 << 4) /* C++ named operators. */ +#define NO_EXPAND (1 << 5) /* Do not macro-expand this token. */ +#define BOL (1 << 6) /* Token at beginning of line. */ + +/* A preprocessing token. This has been carefully packed and should + occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts. */ +struct cpp_token +{ + unsigned int line; /* Logical line of first char of token. */ + unsigned short col; /* Column of first char of token. */ + ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT; /* token type */ + unsigned char flags; /* flags - see above */ + + union + { + cpp_hashnode *node; /* An identifier. */ + const cpp_token *source; /* Inherit padding from this token. */ + struct cpp_string str; /* A string, or number. */ + unsigned int arg_no; /* Argument no. for a CPP_MACRO_ARG. */ + unsigned char c; /* Character represented by CPP_OTHER. */ + } val; +}; + +/* A standalone character. We may want to make it unsigned for the + same reason we use unsigned char - to avoid signedness issues. */ +typedef int cppchar_t; + +/* Values for opts.dump_macros. + dump_only means inhibit output of the preprocessed text + and instead output the definitions of all user-defined + macros in a form suitable for use as input to cpp. + dump_names means pass #define and the macro name through to output. + dump_definitions means pass the whole definition (plus #define) through +*/ +enum { dump_none = 0, dump_only, dump_names, dump_definitions }; + +/* This structure is nested inside struct cpp_reader, and + carries all the options visible to the command line. */ +struct cpp_options +{ + /* Name of input and output files. */ + const char *in_fname; + const char *out_fname; + + /* Characters between tab stops. */ + unsigned int tabstop; + + /* Pending options - -D, -U, -A, -I, -ixxx. */ + struct cpp_pending *pending; + + /* File name which deps are being written to. This is 0 if deps are + being written to stdout. */ + const char *deps_file; + + /* Search paths for include files. */ + struct search_path *quote_include; /* "" */ + struct search_path *bracket_include; /* <> */ + + /* Map between header names and file names, used only on DOS where + file names are limited in length. */ + struct file_name_map_list *map_list; + + /* Directory prefix that should replace `/usr/lib/gcc-lib/TARGET/VERSION' + in the standard include file directories. */ + const char *include_prefix; + unsigned int include_prefix_len; + + /* -fleading_underscore sets this to "_". */ + const char *user_label_prefix; + + /* The language we're preprocessing. */ + enum c_lang lang; + + /* Non-0 means -v, so print the full set of include dirs. */ + unsigned char verbose; + + /* Nonzero means chars are signed. */ + unsigned char signed_char; + + /* Nonzero means use extra default include directories for C++. */ + unsigned char cplusplus; + + /* Nonzero means handle cplusplus style comments */ + unsigned char cplusplus_comments; + + /* Nonzero means handle #import, for objective C. */ + unsigned char objc; + + /* Nonzero means don't copy comments into the output file. */ + unsigned char discard_comments; + + /* Nonzero means process the ISO trigraph sequences. */ + unsigned char trigraphs; + + /* Nonzero means process the ISO digraph sequences. */ + unsigned char digraphs; + + /* Nonzero means to allow hexadecimal floats and LL suffixes. */ + unsigned char extended_numbers; + + /* Nonzero means print the names of included files rather than the + preprocessed output. 1 means just the #include "...", 2 means + #include <...> as well. */ + unsigned char print_deps; + + /* Nonzero if phony targets are created for each header. */ + unsigned char deps_phony_targets; + + /* Nonzero if missing .h files in -M output are assumed to be + generated files and not errors. */ + unsigned char print_deps_missing_files; + + /* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */ + unsigned char print_deps_append; + + /* Nonzero means print names of header files (-H). */ + unsigned char print_include_names; + + /* Nonzero means cpp_pedwarn causes a hard error. */ + unsigned char pedantic_errors; + + /* Nonzero means don't print warning messages. */ + unsigned char inhibit_warnings; + + /* Nonzero means don't suppress warnings from system headers. */ + unsigned char warn_system_headers; + + /* Nonzero means don't print error messages. Has no option to + select it, but can be set by a user of cpplib (e.g. fix-header). */ + unsigned char inhibit_errors; + + /* Nonzero means warn if slash-star appears in a comment. */ + unsigned char warn_comments; + + /* Nonzero means warn if there are any trigraphs. */ + unsigned char warn_trigraphs; + + /* Nonzero means warn if #import is used. */ + unsigned char warn_import; + + /* Nonzero means warn about various incompatibilities with + traditional C. */ + unsigned char warn_traditional; + + /* Nonzero means turn warnings into errors. */ + unsigned char warnings_are_errors; + + /* Nonzero causes output not to be done, but directives such as + #define that have side effects are still obeyed. */ + unsigned char no_output; + + /* Nonzero means we should look for header.gcc files that remap file + names. */ + unsigned char remap; + + /* Nonzero means don't output line number information. */ + unsigned char no_line_commands; + + /* Nonzero means -I- has been seen, so don't look for #include "foo" + the source-file directory. */ + unsigned char ignore_srcdir; + + /* Zero means dollar signs are punctuation. */ + unsigned char dollars_in_ident; + + /* Nonzero means warn if undefined identifiers are evaluated in an #if. */ + unsigned char warn_undef; + + /* Nonzero for the 1999 C Standard, including corrigenda and amendments. */ + unsigned char c99; + + /* Nonzero means give all the error messages the ANSI standard requires. */ + unsigned char pedantic; + + /* Nonzero means we're looking at already preprocessed code, so don't + bother trying to do macro expansion and whatnot. */ + unsigned char preprocessed; + + /* Nonzero disables all the standard directories for headers. */ + unsigned char no_standard_includes; + + /* Nonzero disables the C++-specific standard directories for headers. */ + unsigned char no_standard_cplusplus_includes; + + /* Nonzero means dump macros in some fashion - see above. */ + unsigned char dump_macros; + + /* Nonzero means pass #include lines through to the output. */ + unsigned char dump_includes; + + /* Print column number in error messages. */ + unsigned char show_column; + + /* Nonzero means handle C++ alternate operator names. */ + unsigned char operator_names; + + /* True if --help, --version or --target-help appeared in the + options. Stand-alone CPP should then bail out after option + parsing; drivers might want to continue printing help. */ + unsigned char help_only; +}; + +/* Call backs. */ +struct cpp_callbacks +{ + /* Called when a new line of preprocessed output is started. */ + void (*line_change) PARAMS ((cpp_reader *, const cpp_token *, int)); + void (*file_change) PARAMS ((cpp_reader *, const struct line_map *)); + void (*include) PARAMS ((cpp_reader *, unsigned int, + const unsigned char *, const cpp_token *)); + void (*define) PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *)); + void (*undef) PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *)); + void (*ident) PARAMS ((cpp_reader *, unsigned int, const cpp_string *)); + void (*def_pragma) PARAMS ((cpp_reader *, unsigned int)); +}; + +#define CPP_FATAL_LIMIT 1000 +/* True if we have seen a "fatal" error. */ +#define CPP_FATAL_ERRORS(PFILE) (cpp_errors (PFILE) >= CPP_FATAL_LIMIT) + +/* Name under which this program was invoked. */ +extern const char *progname; + +/* The structure of a node in the hash table. The hash table has + entries for all identifiers: either macros defined by #define + commands (type NT_MACRO), assertions created with #assert + (NT_ASSERTION), or neither of the above (NT_VOID). Builtin macros + like __LINE__ are flagged NODE_BUILTIN. Poisioned identifiers are + flagged NODE_POISONED. NODE_OPERATOR (C++ only) indicates an + identifier that behaves like an operator such as "xor". + NODE_DIAGNOSTIC is for speed in lex_token: it indicates a + diagnostic may be required for this node. Currently this only + applies to __VA_ARGS__ and poisoned identifiers. */ + +/* Hash node flags. */ +#define NODE_OPERATOR (1 << 0) /* C++ named operator. */ +#define NODE_POISONED (1 << 1) /* Poisoned identifier. */ +#define NODE_BUILTIN (1 << 2) /* Builtin macro. */ +#define NODE_DIAGNOSTIC (1 << 3) /* Possible diagnostic when lexed. */ +#define NODE_WARN (1 << 4) /* Warn if redefined or undefined. */ +#define NODE_DISABLED (1 << 5) /* A disabled macro. */ + +/* Different flavors of hash node. */ +enum node_type +{ + NT_VOID = 0, /* No definition yet. */ + NT_MACRO, /* A macro of some form. */ + NT_ASSERTION /* Predicate for #assert. */ +}; + +/* Different flavors of builtin macro. _Pragma is an operator, but we + handle it with the builtin code for efficiency reasons. */ +enum builtin_type +{ + BT_SPECLINE = 0, /* `__LINE__' */ + BT_DATE, /* `__DATE__' */ + BT_FILE, /* `__FILE__' */ + BT_BASE_FILE, /* `__BASE_FILE__' */ + BT_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */ + BT_TIME, /* `__TIME__' */ + BT_STDC, /* `__STDC__' */ + BT_PRAGMA /* `_Pragma' operator */ +}; + +#define CPP_HASHNODE(HNODE) ((cpp_hashnode *) (HNODE)) +#define HT_NODE(NODE) ((ht_identifier *) (NODE)) +#define NODE_LEN(NODE) HT_LEN (&(NODE)->ident) +#define NODE_NAME(NODE) HT_STR (&(NODE)->ident) + +/* The common part of an identifier node shared amongst all 3 C front + ends. Also used to store CPP identifiers, which are a superset of + identifiers in the grammatical sense. */ +struct cpp_hashnode +{ + struct ht_identifier ident; + unsigned short arg_index; /* Macro argument index. */ + unsigned char directive_index; /* Index into directive table. */ + unsigned char rid_code; /* Rid code - for front ends. */ + ENUM_BITFIELD(node_type) type : 8; /* CPP node type. */ + unsigned char flags; /* CPP flags. */ + + union + { + cpp_macro *macro; /* If a macro. */ + struct answer *answers; /* Answers to an assertion. */ + enum cpp_ttype operator; /* Code for a named operator. */ + enum builtin_type builtin; /* Code for a builtin macro. */ + } value; +}; + +/* Call this first to get a handle to pass to other functions. */ +extern cpp_reader *cpp_create_reader PARAMS ((enum c_lang)); + +/* Call these to get pointers to the options and callback structures + for a given reader. These pointers are good until you call + cpp_finish on that reader. You can either edit the callbacks + through the pointer returned from cpp_get_callbacks, or set them + with cpp_set_callbacks. */ +extern cpp_options *cpp_get_options PARAMS ((cpp_reader *)); +extern const struct line_maps *cpp_get_line_maps PARAMS ((cpp_reader *)); +extern cpp_callbacks *cpp_get_callbacks PARAMS ((cpp_reader *)); +extern void cpp_set_callbacks PARAMS ((cpp_reader *, cpp_callbacks *)); + +/* Now call cpp_handle_option[s] to handle 1[or more] switches. The + return value is the number of arguments used. If + cpp_handle_options returns without using all arguments, it couldn't + understand the next switch. When there are no switches left, you + must call cpp_post_options before calling cpp_read_main_file. Only + after cpp_post_options are the contents of the cpp_options + structure reliable. Options processing is not completed until you + call cpp_finish_options. */ +extern int cpp_handle_options PARAMS ((cpp_reader *, int, char **)); +extern int cpp_handle_option PARAMS ((cpp_reader *, int, char **, int)); +extern void cpp_post_options PARAMS ((cpp_reader *)); + +/* This function reads the file, but does not start preprocessing. It + returns the name of the original file; this is the same as the + input file, except for preprocessed input. This will generate at + least one file change callback, and possibly a line change callback + too. If there was an error opening the file, it returns NULL. + + If you want cpplib to manage its own hashtable, pass in a NULL + pointer. Otherise you should pass in an initialised hash table + that cpplib will share; this technique is used by the C front + ends. */ +extern const char *cpp_read_main_file PARAMS ((cpp_reader *, const char *, + struct ht *)); + +/* Deferred handling of command line options that can generate debug + callbacks, such as -D and -imacros. Call this after + cpp_read_main_file. The front ends need this separation so they + can initialize debug output with the original file name, returned + from cpp_read_main_file, before they get debug callbacks. */ +extern void cpp_finish_options PARAMS ((cpp_reader *)); + +/* Call this to release the handle at the end of preprocessing. Any + use of the handle after this function returns is invalid. Returns + cpp_errors (pfile). */ +extern int cpp_destroy PARAMS ((cpp_reader *)); + +/* Error count. */ +extern unsigned int cpp_errors PARAMS ((cpp_reader *)); + +extern unsigned int cpp_token_len PARAMS ((const cpp_token *)); +extern unsigned char *cpp_token_as_text PARAMS ((cpp_reader *, + const cpp_token *)); +extern unsigned char *cpp_spell_token PARAMS ((cpp_reader *, const cpp_token *, + unsigned char *)); +extern void cpp_register_pragma PARAMS ((cpp_reader *, + const char *, const char *, + void (*) PARAMS ((cpp_reader *)))); + +extern void cpp_finish PARAMS ((cpp_reader *)); +extern int cpp_avoid_paste PARAMS ((cpp_reader *, const cpp_token *, + const cpp_token *)); +extern const cpp_token *cpp_get_token PARAMS ((cpp_reader *)); +extern const unsigned char *cpp_macro_definition PARAMS ((cpp_reader *, + const cpp_hashnode *)); +extern void _cpp_backup_tokens PARAMS ((cpp_reader *, unsigned int)); + +/* Evaluate a CPP_CHAR or CPP_WCHAR token. */ +extern HOST_WIDE_INT +cpp_interpret_charconst PARAMS ((cpp_reader *, const cpp_token *, + int, int, unsigned int *)); + +extern void cpp_define PARAMS ((cpp_reader *, const char *)); +extern void cpp_assert PARAMS ((cpp_reader *, const char *)); +extern void cpp_undef PARAMS ((cpp_reader *, const char *)); +extern void cpp_unassert PARAMS ((cpp_reader *, const char *)); + +extern cpp_buffer *cpp_push_buffer PARAMS ((cpp_reader *, + const unsigned char *, size_t, + int, int)); +extern int cpp_defined PARAMS ((cpp_reader *, const unsigned char *, int)); + +/* N.B. The error-message-printer prototypes have not been nicely + formatted because exgettext needs to see 'msgid' on the same line + as the name of the function in order to work properly. Only the + string argument gets a name in an effort to keep the lines from + getting ridiculously oversized. */ + +extern void cpp_ice PARAMS ((cpp_reader *, const char *msgid, ...)) + ATTRIBUTE_PRINTF_2; +extern void cpp_fatal PARAMS ((cpp_reader *, const char *msgid, ...)) + ATTRIBUTE_PRINTF_2; +extern void cpp_error PARAMS ((cpp_reader *, const char *msgid, ...)) + ATTRIBUTE_PRINTF_2; +extern void cpp_warning PARAMS ((cpp_reader *, const char *msgid, ...)) + ATTRIBUTE_PRINTF_2; +extern void cpp_pedwarn PARAMS ((cpp_reader *, const char *msgid, ...)) + ATTRIBUTE_PRINTF_2; +extern void cpp_notice PARAMS ((cpp_reader *, const char *msgid, ...)) + ATTRIBUTE_PRINTF_2; +extern void cpp_error_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...)) + ATTRIBUTE_PRINTF_4; +extern void cpp_warning_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...)) + ATTRIBUTE_PRINTF_4; +extern void cpp_pedwarn_with_line PARAMS ((cpp_reader *, int, int, const char *msgid, ...)) + ATTRIBUTE_PRINTF_4; +extern void cpp_error_from_errno PARAMS ((cpp_reader *, const char *)); +extern void cpp_notice_from_errno PARAMS ((cpp_reader *, const char *)); + +/* In cpplex.c */ +extern int cpp_ideq PARAMS ((const cpp_token *, + const char *)); +extern void cpp_output_line PARAMS ((cpp_reader *, FILE *)); +extern void cpp_output_token PARAMS ((const cpp_token *, FILE *)); +extern const char *cpp_type2name PARAMS ((enum cpp_ttype)); +extern unsigned int cpp_parse_escape PARAMS ((cpp_reader *, + const unsigned char **, + const unsigned char *, + unsigned HOST_WIDE_INT, int)); + +/* In cpphash.c */ + +/* Lookup an identifier in the hashtable. Puts the identifier in the + table if it is not already there. */ +extern cpp_hashnode *cpp_lookup PARAMS ((cpp_reader *, + const unsigned char *, + unsigned int)); + +typedef int (*cpp_cb) PARAMS ((cpp_reader *, cpp_hashnode *, void *)); +extern void cpp_forall_identifiers PARAMS ((cpp_reader *, + cpp_cb, void *)); + +/* In cppmacro.c */ +extern void cpp_scan_nooutput PARAMS ((cpp_reader *)); +extern int cpp_sys_macro_p PARAMS ((cpp_reader *)); +extern unsigned char *cpp_quote_string PARAMS ((unsigned char *, + const unsigned char *, + unsigned int)); + +/* In cppfiles.c */ +extern int cpp_included PARAMS ((cpp_reader *, const char *)); +extern void cpp_make_system_header PARAMS ((cpp_reader *, int, int)); + +#ifdef __cplusplus +} +#endif + +#endif /* ! GCC_CPPLIB_H */ diff --git a/src/mkutil/cpp/cpplib.obj b/src/mkutil/cpp/cpplib.obj new file mode 100644 index 0000000000000000000000000000000000000000..d1155c5366e47265a3be3666f49f68650efed670 GIT binary patch literal 51532 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 = CPP_STRING; + token->val.str.len = len; + token->val.str.text = text; + token->flags = 0; + return token; +} + +/* Allocates and returns a CPP_NUMBER token evaluating to NUMBER. */ +static const cpp_token * +new_number_token (pfile, number) + cpp_reader *pfile; + unsigned int number; +{ + cpp_token *token = _cpp_temp_token (pfile); + /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */ + unsigned char *buf = _cpp_unaligned_alloc (pfile, 21); + + sprintf ((char *) buf, "%u", number); + token->type = CPP_NUMBER; + token->val.str.text = buf; + token->val.str.len = ustrlen (buf); + token->flags = 0; + return token; +} + +static const char * const monthnames[] = +{ + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" +}; + +/* Handle builtin macros like __FILE__, and push the resulting token + on the context stack. Also handles _Pragma, for which no new token + is created. Returns 1 if it generates a new token context, 0 to + return the token to the caller. */ +static int +builtin_macro (pfile, node) + cpp_reader *pfile; + cpp_hashnode *node; +{ + const cpp_token *result; + + switch (node->value.builtin) + { + default: + cpp_ice (pfile, "invalid built-in macro \"%s\"", NODE_NAME (node)); + return 0; + + case BT_FILE: + case BT_BASE_FILE: + { + unsigned int len; + const char *name; + U_CHAR *buf; + const struct line_map *map = pfile->map; + + if (node->value.builtin == BT_BASE_FILE) + while (! MAIN_FILE_P (map)) + map = INCLUDED_FROM (&pfile->line_maps, map); + + name = map->to_file; + len = strlen (name); + buf = _cpp_unaligned_alloc (pfile, len * 4 + 1); + len = cpp_quote_string (buf, (const unsigned char *) name, len) - buf; + + result = new_string_token (pfile, buf, len); + } + break; + + case BT_INCLUDE_LEVEL: + /* The line map depth counts the primary source as level 1, but + historically __INCLUDE_DEPTH__ has called the primary source + level 0. */ + result = new_number_token (pfile, pfile->line_maps.depth - 1); + break; + + case BT_SPECLINE: + /* If __LINE__ is embedded in a macro, it must expand to the + line of the macro's invocation, not its definition. + Otherwise things like assert() will not work properly. */ + result = new_number_token (pfile, + SOURCE_LINE (pfile->map, + pfile->cur_token[-1].line)); + break; + + case BT_STDC: + { + int stdc = (!CPP_IN_SYSTEM_HEADER (pfile) + || pfile->spec_nodes.n__STRICT_ANSI__->type != NT_VOID); + result = new_number_token (pfile, stdc); + } + break; + + case BT_DATE: + case BT_TIME: + if (pfile->date.type == CPP_EOF) + { + /* Allocate __DATE__ and __TIME__ strings from permanent + storage. We only do this once, and don't generate them + at init time, because time() and localtime() are very + slow on some systems. */ + time_t tt = time (NULL); + struct tm *tb = localtime (&tt); + + pfile->date.val.str.text = + _cpp_unaligned_alloc (pfile, sizeof ("Oct 11 1347")); + pfile->date.val.str.len = sizeof ("Oct 11 1347") - 1; + pfile->date.type = CPP_STRING; + pfile->date.flags = 0; + sprintf ((char *) pfile->date.val.str.text, "%s %2d %4d", + monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900); + + pfile->time.val.str.text = + _cpp_unaligned_alloc (pfile, sizeof ("12:34:56")); + pfile->time.val.str.len = sizeof ("12:34:56") - 1; + pfile->time.type = CPP_STRING; + pfile->time.flags = 0; + sprintf ((char *) pfile->time.val.str.text, "%02d:%02d:%02d", + tb->tm_hour, tb->tm_min, tb->tm_sec); + } + + if (node->value.builtin == BT_DATE) + result = &pfile->date; + else + result = &pfile->time; + break; + + case BT_PRAGMA: + /* Don't interpret _Pragma within directives. The standard is + not clear on this, but to me this makes most sense. */ + if (pfile->state.in_directive) + return 0; + + _cpp_do__Pragma (pfile); + return 1; + } + + push_token_context (pfile, NULL, result, 1); + return 1; +} + +/* Copies SRC, of length LEN, to DEST, adding backslashes before all + backslashes and double quotes. Non-printable characters are + converted to octal. DEST must be of sufficient size. Returns + a pointer to the end of the string. */ +U_CHAR * +cpp_quote_string (dest, src, len) + U_CHAR *dest; + const U_CHAR *src; + unsigned int len; +{ + while (len--) + { + U_CHAR c = *src++; + + if (c == '\\' || c == '"') + { + *dest++ = '\\'; + *dest++ = c; + } + else + { + if (ISPRINT (c)) + *dest++ = c; + else + { + sprintf ((char *) dest, "\\%03o", c); + dest += 4; + } + } + } + + return dest; +} + +/* Convert a token sequence ARG to a single string token according to + the rules of the ISO C #-operator. */ +static const cpp_token * +stringify_arg (pfile, arg) + cpp_reader *pfile; + macro_arg *arg; +{ + unsigned char *dest = BUFF_FRONT (pfile->u_buff); + unsigned int i, escape_it, backslash_count = 0; + const cpp_token *source = NULL; + size_t len; + + /* Loop, reading in the argument's tokens. */ + for (i = 0; i < arg->count; i++) + { + const cpp_token *token = arg->first[i]; + + if (token->type == CPP_PADDING) + { + if (source == NULL) + source = token->val.source; + continue; + } + + escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING + || token->type == CPP_CHAR || token->type == CPP_WCHAR); + + /* Room for each char being written in octal, initial space and + final NUL. */ + len = cpp_token_len (token); + if (escape_it) + len *= 4; + len += 2; + + if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len) + { + size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff); + _cpp_extend_buff (pfile, &pfile->u_buff, len); + dest = BUFF_FRONT (pfile->u_buff) + len_so_far; + } + + /* Leading white space? */ + if (dest != BUFF_FRONT (pfile->u_buff)) + { + if (source == NULL) + source = token; + if (source->flags & PREV_WHITE) + *dest++ = ' '; + } + source = NULL; + + if (escape_it) + { + _cpp_buff *buff = _cpp_get_buff (pfile, len); + unsigned char *buf = BUFF_FRONT (buff); + len = cpp_spell_token (pfile, token, buf) - buf; + dest = cpp_quote_string (dest, buf, len); + _cpp_release_buff (pfile, buff); + } + else + dest = cpp_spell_token (pfile, token, dest); + + if (token->type == CPP_OTHER && token->val.c == '\\') + backslash_count++; + else + backslash_count = 0; + } + + /* Ignore the final \ of invalid string literals. */ + if (backslash_count & 1) + { + cpp_warning (pfile, "invalid string literal, ignoring final '\\'"); + dest--; + } + + /* Commit the memory, including NUL, and return the token. */ + len = dest - BUFF_FRONT (pfile->u_buff); + BUFF_FRONT (pfile->u_buff) = dest + 1; + return new_string_token (pfile, dest - len, len); +} + +/* Try to paste two tokens. On success, return non-zero. In any + case, PLHS is updated to point to the pasted token, which is + guaranteed to not have the PASTE_LEFT flag set. */ +static bool +paste_tokens (pfile, plhs, rhs) + cpp_reader *pfile; + const cpp_token **plhs, *rhs; +{ + unsigned char *buf, *end; + const cpp_token *lhs; + unsigned int len; + bool valid; + + lhs = *plhs; + len = cpp_token_len (lhs) + cpp_token_len (rhs) + 1; + buf = (unsigned char *) alloca (len); + end = cpp_spell_token (pfile, lhs, buf); + + /* Avoid comment headers, since they are still processed in stage 3. + It is simpler to insert a space here, rather than modifying the + lexer to ignore comments in some circumstances. Simply returning + false doesn't work, since we want to clear the PASTE_LEFT flag. */ + if (lhs->type == CPP_DIV + && (rhs->type == CPP_MULT || rhs->type == CPP_DIV)) + *end++ = ' '; + end = cpp_spell_token (pfile, rhs, end); + *end = '\0'; + + cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true, 1); + + /* Tweak the column number the lexer will report. */ + pfile->buffer->col_adjust = pfile->cur_token[-1].col - 1; + + /* We don't want a leading # to be interpreted as a directive. */ + pfile->buffer->saved_flags = 0; + + /* Set pfile->cur_token as required by _cpp_lex_direct. */ + pfile->cur_token = _cpp_temp_token (pfile); + *plhs = _cpp_lex_direct (pfile); + valid = pfile->buffer->cur == pfile->buffer->rlimit; + _cpp_pop_buffer (pfile); + + return valid; +} + +/* Handles an arbitrarily long sequence of ## operators, with initial + operand LHS. This implementation is left-associative, + non-recursive, and finishes a paste before handling succeeding + ones. If a paste fails, we back up to the RHS of the failing ## + operator before pushing the context containing the result of prior + successful pastes, with the effect that the RHS appears in the + output stream after the pasted LHS normally. */ +static void +paste_all_tokens (pfile, lhs) + cpp_reader *pfile; + const cpp_token *lhs; +{ + const cpp_token *rhs; + cpp_context *context = pfile->context; + + do + { + /* Take the token directly from the current context. We can do + this, because we are in the replacement list of either an + object-like macro, or a function-like macro with arguments + inserted. In either case, the constraints to #define + guarantee we have at least one more token. */ + if (context->direct_p) + rhs = context->first.token++; + else + rhs = *context->first.ptoken++; + + if (rhs->type == CPP_PADDING) + abort (); + + if (!paste_tokens (pfile, &lhs, rhs)) + { + _cpp_backup_tokens (pfile, 1); + + /* Mandatory warning for all apart from assembler. */ + if (CPP_OPTION (pfile, lang) != CLK_ASM) + cpp_warning (pfile, + "pasting \"%s\" and \"%s\" does not give a valid preprocessing token", + cpp_token_as_text (pfile, lhs), + cpp_token_as_text (pfile, rhs)); + break; + } + } + while (rhs->flags & PASTE_LEFT); + + /* Put the resulting token in its own context. */ + push_token_context (pfile, NULL, lhs, 1); +} + +/* Reads and returns the arguments to a function-like macro + invocation. Assumes the opening parenthesis has been processed. + If there is an error, emits an appropriate diagnostic and returns + NULL. Each argument is terminated by a CPP_EOF token, for the + future benefit of expand_arg(). */ +static _cpp_buff * +collect_args (pfile, node) + cpp_reader *pfile; + const cpp_hashnode *node; +{ + _cpp_buff *buff, *base_buff; + cpp_macro *macro; + macro_arg *args, *arg; + const cpp_token *token; + unsigned int argc; + bool error = false; + + macro = node->value.macro; + if (macro->paramc) + argc = macro->paramc; + else + argc = 1; + buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *) + + sizeof (macro_arg))); + base_buff = buff; + args = (macro_arg *) buff->base; + memset (args, 0, argc * sizeof (macro_arg)); + buff->cur = (unsigned char *) &args[argc]; + arg = args, argc = 0; + + /* Collect the tokens making up each argument. We don't yet know + how many arguments have been supplied, whether too many or too + few. Hence the slightly bizarre usage of "argc" and "arg". */ + do + { + unsigned int paren_depth = 0; + unsigned int ntokens = 0; + + argc++; + arg->first = (const cpp_token **) buff->cur; + + for (;;) + { + /* Require space for 2 new tokens (including a CPP_EOF). */ + if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit) + { + buff = _cpp_append_extend_buff (pfile, buff, + 1000 * sizeof (cpp_token *)); + arg->first = (const cpp_token **) buff->cur; + } + + token = cpp_get_token (pfile); + + if (token->type == CPP_PADDING) + { + /* Drop leading padding. */ + if (ntokens == 0) + continue; + } + else if (token->type == CPP_OPEN_PAREN) + paren_depth++; + else if (token->type == CPP_CLOSE_PAREN) + { + if (paren_depth-- == 0) + break; + } + else if (token->type == CPP_COMMA) + { + /* A comma does not terminate an argument within + parentheses or as part of a variable argument. */ + if (paren_depth == 0 + && ! (macro->variadic && argc == macro->paramc)) + break; + } + else if (token->type == CPP_EOF + || (token->type == CPP_HASH && token->flags & BOL)) + break; + + arg->first[ntokens++] = token; + } + + /* Drop trailing padding. */ + while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING) + ntokens--; + + arg->count = ntokens; + arg->first[ntokens] = &pfile->eof; + + /* Terminate the argument. Excess arguments loop back and + overwrite the final legitimate argument, before failing. */ + if (argc <= macro->paramc) + { + buff->cur = (unsigned char *) &arg->first[ntokens + 1]; + if (argc != macro->paramc) + arg++; + } + } + while (token->type != CPP_CLOSE_PAREN + && token->type != CPP_EOF + && token->type != CPP_HASH); + + if (token->type == CPP_EOF || token->type == CPP_HASH) + { + bool step_back = false; + + /* 6.10.3 paragraph 11: If there are sequences of preprocessing + tokens within the list of arguments that would otherwise act + as preprocessing directives, the behavior is undefined. + + This implementation will report a hard error, terminate the + macro invocation, and proceed to process the directive. */ + if (token->type == CPP_HASH) + { + cpp_error (pfile, + "directives may not be used inside a macro argument"); + step_back = true; + } + else + step_back = (pfile->context->prev || pfile->state.in_directive); + + /* We still need the CPP_EOF to end directives, and to end + pre-expansion of a macro argument. Step back is not + unconditional, since we don't want to return a CPP_EOF to our + callers at the end of an -include-d file. */ + if (step_back) + _cpp_backup_tokens (pfile, 1); + cpp_error (pfile, "unterminated argument list invoking macro \"%s\"", + NODE_NAME (node)); + error = true; + } + else if (argc < macro->paramc) + { + /* As an extension, a rest argument is allowed to not appear in + the invocation at all. + e.g. #define debug(format, args...) something + debug("string"); + + This is exactly the same as if there had been an empty rest + argument - debug("string", ). */ + + if (argc + 1 == macro->paramc && macro->variadic) + { + if (CPP_PEDANTIC (pfile) && ! macro->syshdr) + cpp_pedwarn (pfile, "ISO C99 requires rest arguments to be used"); + } + else + { + cpp_error (pfile, + "macro \"%s\" requires %u arguments, but only %u given", + NODE_NAME (node), macro->paramc, argc); + error = true; + } + } + else if (argc > macro->paramc) + { + /* Empty argument to a macro taking no arguments is OK. */ + if (argc != 1 || arg->count) + { + cpp_error (pfile, + "macro \"%s\" passed %u arguments, but takes just %u", + NODE_NAME (node), argc, macro->paramc); + error = true; + } + } + + if (!error) + return base_buff; + + _cpp_release_buff (pfile, base_buff); + return NULL; +} + +/* Search for an opening parenthesis to the macro of NODE, in such a + way that, if none is found, we don't lose the information in any + intervening padding tokens. If we find the parenthesis, collect + the arguments and return the buffer containing them. */ +static _cpp_buff * +funlike_invocation_p (pfile, node) + cpp_reader *pfile; + cpp_hashnode *node; +{ + const cpp_token *token, *padding = NULL; + + for (;;) + { + token = cpp_get_token (pfile); + if (token->type != CPP_PADDING) + break; + if (padding == NULL + || (!(padding->flags & PREV_WHITE) && token->val.source == NULL)) + padding = token; + } + + if (token->type == CPP_OPEN_PAREN) + { + pfile->state.parsing_args = 2; + return collect_args (pfile, node); + } + + /* CPP_EOF can be the end of macro arguments, or the end of the + file. We mustn't back up over the latter. Ugh. */ + if (token->type != CPP_EOF || token == &pfile->eof) + { + /* Back up. We may have skipped padding, in which case backing + up more than one token when expanding macros is in general + too difficult. We re-insert it in its own context. */ + _cpp_backup_tokens (pfile, 1); + if (padding) + push_token_context (pfile, NULL, padding, 1); + } + + return NULL; +} + +/* Push the context of a macro with hash entry NODE onto the context + stack. If we can successfully expand the macro, we push a context + containing its yet-to-be-rescanned replacement list and return one. + Otherwise, we don't push a context and return zero. */ +static int +enter_macro_context (pfile, node) + cpp_reader *pfile; + cpp_hashnode *node; +{ + /* The presence of a macro invalidates a file's controlling macro. */ + pfile->mi_valid = false; + + pfile->state.angled_headers = false; + + /* Handle standard macros. */ + if (! (node->flags & NODE_BUILTIN)) + { + cpp_macro *macro = node->value.macro; + + if (macro->fun_like) + { + _cpp_buff *buff; + + pfile->state.prevent_expansion++; + pfile->keep_tokens++; + pfile->state.parsing_args = 1; + buff = funlike_invocation_p (pfile, node); + pfile->state.parsing_args = 0; + pfile->keep_tokens--; + pfile->state.prevent_expansion--; + + if (buff == NULL) + { + if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr) + cpp_warning (pfile, + "function-like macro \"%s\" must be used with arguments in traditional C", + NODE_NAME (node)); + + return 0; + } + + if (node->value.macro->paramc > 0) + replace_args (pfile, node, (macro_arg *) buff->base); + _cpp_release_buff (pfile, buff); + } + + /* Disable the macro within its expansion. */ + node->flags |= NODE_DISABLED; + + if (macro->paramc == 0) + push_token_context (pfile, node, macro->expansion, macro->count); + + return 1; + } + + /* Handle built-in macros and the _Pragma operator. */ + return builtin_macro (pfile, node); +} + +/* Replace the parameters in a function-like macro of NODE with the + actual ARGS, and place the result in a newly pushed token context. + Expand each argument before replacing, unless it is operated upon + by the # or ## operators. */ +static void +replace_args (pfile, node, args) + cpp_reader *pfile; + cpp_hashnode *node; + macro_arg *args; +{ + unsigned int i, total; + const cpp_token *src, *limit; + const cpp_token **dest, **first; + macro_arg *arg; + _cpp_buff *buff; + cpp_macro *macro; + + /* First, fully macro-expand arguments, calculating the number of + tokens in the final expansion as we go. The ordering of the if + statements below is subtle; we must handle stringification before + pasting. */ + macro = node->value.macro; + total = macro->count; + limit = macro->expansion + macro->count; + + for (src = macro->expansion; src < limit; src++) + if (src->type == CPP_MACRO_ARG) + { + /* Leading and trailing padding tokens. */ + total += 2; + + /* We have an argument. If it is not being stringified or + pasted it is macro-replaced before insertion. */ + arg = &args[src->val.arg_no - 1]; + + if (src->flags & STRINGIFY_ARG) + { + if (!arg->stringified) + arg->stringified = stringify_arg (pfile, arg); + } + else if ((src->flags & PASTE_LEFT) + || (src > macro->expansion && (src[-1].flags & PASTE_LEFT))) + total += arg->count - 1; + else + { + if (!arg->expanded) + expand_arg (pfile, arg); + total += arg->expanded_count - 1; + } + } + + /* Now allocate space for the expansion, copy the tokens and replace + the arguments. */ + buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *)); + first = (const cpp_token **) buff->base; + dest = first; + + for (src = macro->expansion; src < limit; src++) + { + unsigned int count; + const cpp_token **from, **paste_flag; + + if (src->type != CPP_MACRO_ARG) + { + *dest++ = src; + continue; + } + + paste_flag = 0; + arg = &args[src->val.arg_no - 1]; + if (src->flags & STRINGIFY_ARG) + count = 1, from = &arg->stringified; + else if (src->flags & PASTE_LEFT) + count = arg->count, from = arg->first; + else if (src != macro->expansion && (src[-1].flags & PASTE_LEFT)) + { + count = arg->count, from = arg->first; + if (dest != first) + { + /* GCC has special semantics for , ## b where b is a + varargs parameter: the comma disappears if b was + given no actual arguments (not merely if b is an + empty argument); otherwise the paste flag is removed. */ + if (dest[-1]->type == CPP_COMMA + && macro->variadic + && src->val.arg_no == macro->paramc) + { + if (count == 0) + dest--; + else + paste_flag = dest - 1; + } + /* Remove the paste flag if the RHS is a placemarker. */ + else if (count == 0) + paste_flag = dest - 1; + } + } + else + count = arg->expanded_count, from = arg->expanded; + + /* Padding on the left of an argument (unless RHS of ##). */ + if (!pfile->state.in_directive + && src != macro->expansion && !(src[-1].flags & PASTE_LEFT)) + *dest++ = padding_token (pfile, src); + + if (count) + { + memcpy (dest, from, count * sizeof (cpp_token *)); + dest += count; + + /* With a non-empty argument on the LHS of ##, the last + token should be flagged PASTE_LEFT. */ + if (src->flags & PASTE_LEFT) + paste_flag = dest - 1; + } + + /* Avoid paste on RHS (even case count == 0). */ + if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT)) + *dest++ = &pfile->avoid_paste; + + /* Add a new paste flag, or remove an unwanted one. */ + if (paste_flag) + { + cpp_token *token = _cpp_temp_token (pfile); + token->type = (*paste_flag)->type; + token->val.str = (*paste_flag)->val.str; + if (src->flags & PASTE_LEFT) + token->flags = (*paste_flag)->flags | PASTE_LEFT; + else + token->flags = (*paste_flag)->flags & ~PASTE_LEFT; + *paste_flag = token; + } + } + + /* Free the expanded arguments. */ + for (i = 0; i < macro->paramc; i++) + if (args[i].expanded) + free (args[i].expanded); + + push_ptoken_context (pfile, node, buff, first, dest - first); +} + +/* Return a special padding token, with padding inherited from SOURCE. */ +static const cpp_token * +padding_token (pfile, source) + cpp_reader *pfile; + const cpp_token *source; +{ + cpp_token *result = _cpp_temp_token (pfile); + + result->type = CPP_PADDING; + result->val.source = source; + result->flags = 0; + return result; +} + +/* Get a new uninitialized context. Create a new one if we cannot + re-use an old one. */ +static cpp_context * +next_context (pfile) + cpp_reader *pfile; +{ + cpp_context *result = pfile->context->next; + + if (result == 0) + { + result = xnew (cpp_context); + result->prev = pfile->context; + result->next = 0; + pfile->context->next = result; + } + + pfile->context = result; + return result; +} + +/* Push a list of pointers to tokens. */ +static void +push_ptoken_context (pfile, macro, buff, first, count) + cpp_reader *pfile; + cpp_hashnode *macro; + _cpp_buff *buff; + const cpp_token **first; + unsigned int count; +{ + cpp_context *context = next_context (pfile); + + context->direct_p = false; + context->macro = macro; + context->buff = buff; + context->first.ptoken = first; + context->last.ptoken = first + count; +} + +/* Push a list of tokens. */ +static void +push_token_context (pfile, macro, first, count) + cpp_reader *pfile; + cpp_hashnode *macro; + const cpp_token *first; + unsigned int count; +{ + cpp_context *context = next_context (pfile); + + context->direct_p = true; + context->macro = macro; + context->buff = NULL; + context->first.token = first; + context->last.token = first + count; +} + +/* Expand an argument ARG before replacing parameters in a + function-like macro. This works by pushing a context with the + argument's tokens, and then expanding that into a temporary buffer + as if it were a normal part of the token stream. collect_args() + has terminated the argument's tokens with a CPP_EOF so that we know + when we have fully expanded the argument. */ +static void +expand_arg (pfile, arg) + cpp_reader *pfile; + macro_arg *arg; +{ + unsigned int capacity; + + if (arg->count == 0) + return; + + /* Loop, reading in the arguments. */ + capacity = 256; + arg->expanded = (const cpp_token **) + xmalloc (capacity * sizeof (cpp_token *)); + + push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1); + for (;;) + { + const cpp_token *token; + + if (arg->expanded_count + 1 >= capacity) + { + capacity *= 2; + arg->expanded = (const cpp_token **) + xrealloc (arg->expanded, capacity * sizeof (cpp_token *)); + } + + token = cpp_get_token (pfile); + + if (token->type == CPP_EOF) + break; + + arg->expanded[arg->expanded_count++] = token; + } + + _cpp_pop_context (pfile); +} + +/* Pop the current context off the stack, re-enabling the macro if the + context represented a macro's replacement list. The context + structure is not freed so that we can re-use it later. */ +void +_cpp_pop_context (pfile) + cpp_reader *pfile; +{ + cpp_context *context = pfile->context; + + if (context->macro) + context->macro->flags &= ~NODE_DISABLED; + + if (context->buff) + _cpp_release_buff (pfile, context->buff); + + pfile->context = context->prev; +} + +/* Eternal routine to get a token. Also used nearly everywhere + internally, except for places where we know we can safely call + the lexer directly, such as lexing a directive name. + + Macro expansions and directives are transparently handled, + including entering included files. Thus tokens are post-macro + expansion, and after any intervening directives. External callers + see CPP_EOF only at EOF. Internal callers also see it when meeting + a directive inside a macro call, when at the end of a directive and + state.in_directive is still 1, and at the end of argument + pre-expansion. */ +const cpp_token * +cpp_get_token (pfile) + cpp_reader *pfile; +{ + const cpp_token *result; + + for (;;) + { + cpp_hashnode *node; + cpp_context *context = pfile->context; + + /* Context->prev == 0 <=> base context. */ + if (!context->prev) + result = _cpp_lex_token (pfile); + else if (context->first.token != context->last.token) + { + if (context->direct_p) + result = context->first.token++; + else + result = *context->first.ptoken++; + + if (result->flags & PASTE_LEFT) + { + paste_all_tokens (pfile, result); + if (pfile->state.in_directive) + continue; + return padding_token (pfile, result); + } + } + else + { + _cpp_pop_context (pfile); + if (pfile->state.in_directive) + continue; + return &pfile->avoid_paste; + } + + if (result->type != CPP_NAME) + break; + + node = result->val.node; + + if (node->type != NT_MACRO || (result->flags & NO_EXPAND)) + break; + + if (!(node->flags & NODE_DISABLED)) + { + if (!pfile->state.prevent_expansion + && enter_macro_context (pfile, node)) + { + if (pfile->state.in_directive) + continue; + return padding_token (pfile, result); + } + } + else + { + /* Flag this token as always unexpandable. FIXME: move this + to collect_args()?. */ + cpp_token *t = _cpp_temp_token (pfile); + t->type = result->type; + t->flags = result->flags | NO_EXPAND; + t->val.str = result->val.str; + result = t; + } + + break; + } + + return result; +} + +/* Returns true if we're expanding an object-like macro that was + defined in a system header. Just checks the macro at the top of + the stack. Used for diagnostic suppression. */ +int +cpp_sys_macro_p (pfile) + cpp_reader *pfile; +{ + cpp_hashnode *node = pfile->context->macro; + + return node && node->value.macro && node->value.macro->syshdr; +} + +/* Read each token in, until EOF. Directives are transparently + processed. */ +void +cpp_scan_nooutput (pfile) + cpp_reader *pfile; +{ + while (cpp_get_token (pfile)->type != CPP_EOF) + ; +} + +/* Step back one (or more) tokens. Can only step mack more than 1 if + they are from the lexer, and not from macro expansion. */ +void +_cpp_backup_tokens (pfile, count) + cpp_reader *pfile; + unsigned int count; +{ + if (pfile->context->prev == NULL) + { + pfile->lookaheads += count; + while (count--) + { + pfile->cur_token--; + if (pfile->cur_token == pfile->cur_run->base + /* Possible with -fpreprocessed and no leading #line. */ + && pfile->cur_run->prev != NULL) + { + pfile->cur_run = pfile->cur_run->prev; + pfile->cur_token = pfile->cur_run->limit; + } + } + } + else + { + if (count != 1) + abort (); + if (pfile->context->direct_p) + pfile->context->first.token--; + else + pfile->context->first.ptoken--; + } +} + +/* #define directive parsing and handling. */ + +/* Returns non-zero if a macro redefinition warning is required. */ +static int +warn_of_redefinition (node, macro2) + const cpp_hashnode *node; + const cpp_macro *macro2; +{ + const cpp_macro *macro1; + unsigned int i; + + /* Some redefinitions need to be warned about regardless. */ + if (node->flags & NODE_WARN) + return 1; + + /* Redefinition of a macro is allowed if and only if the old and new + definitions are the same. (6.10.3 paragraph 2). */ + macro1 = node->value.macro; + + /* The quick failures. */ + if (macro1->count != macro2->count + || macro1->paramc != macro2->paramc + || macro1->fun_like != macro2->fun_like + || macro1->variadic != macro2->variadic) + return 1; + + /* Check each token. */ + for (i = 0; i < macro1->count; i++) + if (! _cpp_equiv_tokens (¯o1->expansion[i], ¯o2->expansion[i])) + return 1; + + /* Check parameter spellings. */ + for (i = 0; i < macro1->paramc; i++) + if (macro1->params[i] != macro2->params[i]) + return 1; + + return 0; +} + +/* Free the definition of hashnode H. */ +void +_cpp_free_definition (h) + cpp_hashnode *h; +{ + /* Macros and assertions no longer have anything to free. */ + h->type = NT_VOID; + /* Clear builtin flag in case of redefinition. */ + h->flags &= ~(NODE_BUILTIN | NODE_DISABLED); +} + +/* Save parameter NODE to the parameter list of macro MACRO. Returns + zero on success, non-zero if the parameter is a duplicate. */ +static int +save_parameter (pfile, macro, node) + cpp_reader *pfile; + cpp_macro *macro; + cpp_hashnode *node; +{ + /* Constraint 6.10.3.6 - duplicate parameter names. */ + if (node->arg_index) + { + cpp_error (pfile, "duplicate macro parameter \"%s\"", NODE_NAME (node)); + return 1; + } + + if (BUFF_ROOM (pfile->a_buff) + < (macro->paramc + 1) * sizeof (cpp_hashnode *)) + _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *)); + + ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node; + node->arg_index = macro->paramc; + return 0; +} + +/* Check the syntax of the parameters in a MACRO definition. */ +static int +parse_params (pfile, macro) + cpp_reader *pfile; + cpp_macro *macro; +{ + unsigned int prev_ident = 0; + + for (;;) + { + const cpp_token *token = _cpp_lex_token (pfile); + + switch (token->type) + { + default: + cpp_error (pfile, "\"%s\" may not appear in macro parameter list", + cpp_token_as_text (pfile, token)); + return 0; + + case CPP_NAME: + if (prev_ident) + { + cpp_error (pfile, "macro parameters must be comma-separated"); + return 0; + } + prev_ident = 1; + + if (save_parameter (pfile, macro, token->val.node)) + return 0; + continue; + + case CPP_CLOSE_PAREN: + if (prev_ident || macro->paramc == 0) + return 1; + + /* Fall through to pick up the error. */ + case CPP_COMMA: + if (!prev_ident) + { + cpp_error (pfile, "parameter name missing"); + return 0; + } + prev_ident = 0; + continue; + + case CPP_ELLIPSIS: + macro->variadic = 1; + if (!prev_ident) + { + save_parameter (pfile, macro, pfile->spec_nodes.n__VA_ARGS__); + pfile->state.va_args_ok = 1; + if (! CPP_OPTION (pfile, c99) && CPP_OPTION (pfile, pedantic)) + cpp_pedwarn (pfile, + "anonymous variadic macros were introduced in C99"); + } + else if (CPP_OPTION (pfile, pedantic)) + cpp_pedwarn (pfile, "ISO C does not permit named variadic macros"); + + /* We're at the end, and just expect a closing parenthesis. */ + token = _cpp_lex_token (pfile); + if (token->type == CPP_CLOSE_PAREN) + return 1; + /* Fall through. */ + + case CPP_EOF: + cpp_error (pfile, "missing ')' in macro parameter list"); + return 0; + } + } +} + +/* Allocate room for a token from a macro's replacement list. */ +static cpp_token * +alloc_expansion_token (pfile, macro) + cpp_reader *pfile; + cpp_macro *macro; +{ + if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token)) + _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token)); + + return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++]; +} + +/* Lex a token from the expansion of MACRO, but mark parameters as we + find them and warn of traditional stringification. */ +static cpp_token * +lex_expansion_token (pfile, macro) + cpp_reader *pfile; + cpp_macro *macro; +{ + cpp_token *token; + + pfile->cur_token = alloc_expansion_token (pfile, macro); + token = _cpp_lex_direct (pfile); + + /* Is this a parameter? */ + if (token->type == CPP_NAME && token->val.node->arg_index) + { + token->type = CPP_MACRO_ARG; + token->val.arg_no = token->val.node->arg_index; + } + else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0 + && (token->type == CPP_STRING || token->type == CPP_CHAR)) + check_trad_stringification (pfile, macro, &token->val.str); + + return token; +} + +/* Parse a macro and save its expansion. Returns non-zero on success. */ +int +_cpp_create_definition (pfile, node) + cpp_reader *pfile; + cpp_hashnode *node; +{ + cpp_macro *macro; + cpp_token *token, *saved_cur_token; + const cpp_token *ctoken; + unsigned int i, ok = 1; + + macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro)); + macro->line = pfile->directive_line; + macro->params = 0; + macro->paramc = 0; + macro->variadic = 0; + macro->count = 0; + macro->fun_like = 0; + + /* Get the first token of the expansion (or the '(' of a + function-like macro). */ + ctoken = _cpp_lex_token (pfile); + + if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE)) + { + ok = parse_params (pfile, macro); + macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff); + if (!ok) + goto cleanup2; + + /* Success. Commit the parameter array. */ + BUFF_FRONT (pfile->a_buff) = (U_CHAR *) ¯o->params[macro->paramc]; + macro->fun_like = 1; + } + else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE)) + cpp_pedwarn (pfile, "ISO C requires whitespace after the macro name"); + + saved_cur_token = pfile->cur_token; + + if (macro->fun_like) + token = lex_expansion_token (pfile, macro); + else + { + token = alloc_expansion_token (pfile, macro); + *token = *ctoken; + } + + for (;;) + { + /* Check the stringifying # constraint 6.10.3.2.1 of + function-like macros when lexing the subsequent token. */ + if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like) + { + if (token->type == CPP_MACRO_ARG) + { + token->flags &= ~PREV_WHITE; + token->flags |= STRINGIFY_ARG; + token->flags |= token[-1].flags & PREV_WHITE; + token[-1] = token[0]; + macro->count--; + } + /* Let assembler get away with murder. */ + else if (CPP_OPTION (pfile, lang) != CLK_ASM) + { + ok = 0; + cpp_error (pfile, "'#' is not followed by a macro parameter"); + goto cleanup1; + } + } + + if (token->type == CPP_EOF) + break; + + /* Paste operator constraint 6.10.3.3.1. */ + if (token->type == CPP_PASTE) + { + /* Token-paste ##, can appear in both object-like and + function-like macros, but not at the ends. */ + if (--macro->count > 0) + token = lex_expansion_token (pfile, macro); + + if (macro->count == 0 || token->type == CPP_EOF) + { + ok = 0; + cpp_error (pfile, + "'##' cannot appear at either end of a macro expansion"); + goto cleanup1; + } + + token[-1].flags |= PASTE_LEFT; + } + + token = lex_expansion_token (pfile, macro); + } + + macro->expansion = (cpp_token *) BUFF_FRONT (pfile->a_buff); + + /* Don't count the CPP_EOF. */ + macro->count--; + + /* Clear whitespace on first token for warn_of_redefinition(). */ + if (macro->count) + macro->expansion[0].flags &= ~PREV_WHITE; + + /* Commit the memory. */ + BUFF_FRONT (pfile->a_buff) = (U_CHAR *) ¯o->expansion[macro->count]; + + /* Implement the macro-defined-to-itself optimisation. */ + if (macro->count == 1 && !macro->fun_like + && macro->expansion[0].type == CPP_NAME + && macro->expansion[0].val.node == node) + node->flags |= NODE_DISABLED; + + /* To suppress some diagnostics. */ + macro->syshdr = pfile->map->sysp != 0; + + if (node->type != NT_VOID) + { + if (warn_of_redefinition (node, macro)) + { + cpp_pedwarn_with_line (pfile, pfile->directive_line, 0, + "\"%s\" redefined", NODE_NAME (node)); + + if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN)) + cpp_pedwarn_with_line (pfile, node->value.macro->line, 0, + "this is the location of the previous definition"); + } + _cpp_free_definition (node); + } + + /* Enter definition in hash table. */ + node->type = NT_MACRO; + node->value.macro = macro; + if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))) + node->flags |= NODE_WARN; + + cleanup1: + + /* Set type for SEEN_EOL() in cpplib.c, restore the lexer position. */ + saved_cur_token[-1].type = pfile->cur_token[-1].type; + pfile->cur_token = saved_cur_token; + + cleanup2: + + /* Stop the lexer accepting __VA_ARGS__. */ + pfile->state.va_args_ok = 0; + + /* Clear the fast argument lookup indices. */ + for (i = macro->paramc; i-- > 0; ) + macro->params[i]->arg_index = 0; + + return ok; +} + +/* Warn if a token in STRING matches one of a function-like MACRO's + parameters. */ +static void +check_trad_stringification (pfile, macro, string) + cpp_reader *pfile; + const cpp_macro *macro; + const cpp_string *string; +{ + unsigned int i, len; + const U_CHAR *p, *q, *limit = string->text + string->len; + + /* Loop over the string. */ + for (p = string->text; p < limit; p = q) + { + /* Find the start of an identifier. */ + while (p < limit && !is_idstart (*p)) + p++; + + /* Find the end of the identifier. */ + q = p; + while (q < limit && is_idchar (*q)) + q++; + + len = q - p; + + /* Loop over the function macro arguments to see if the + identifier inside the string matches one of them. */ + for (i = 0; i < macro->paramc; i++) + { + const cpp_hashnode *node = macro->params[i]; + + if (NODE_LEN (node) == len + && !memcmp (p, NODE_NAME (node), len)) + { + cpp_warning (pfile, + "macro argument \"%s\" would be stringified with -traditional", + NODE_NAME (node)); + break; + } + } + } +} + +/* Returns the name, arguments and expansion of a macro, in a format + suitable to be read back in again, and therefore also for DWARF 2 + debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION". + Caller is expected to generate the "#define" bit if needed. The + returned text is temporary, and automatically freed later. */ +const unsigned char * +cpp_macro_definition (pfile, node) + cpp_reader *pfile; + const cpp_hashnode *node; +{ + unsigned int i, len; + const cpp_macro *macro = node->value.macro; + unsigned char *buffer; + + if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN)) + { + cpp_ice (pfile, "invalid hash type %d in cpp_macro_definition", node->type); + return 0; + } + + /* Calculate length. */ + len = NODE_LEN (node) + 2; /* ' ' and NUL. */ + if (macro->fun_like) + { + len += 4; /* "()" plus possible final ".." of named + varargs (we have + 1 below). */ + for (i = 0; i < macro->paramc; i++) + len += NODE_LEN (macro->params[i]) + 1; /* "," */ + } + + for (i = 0; i < macro->count; i++) + { + cpp_token *token = ¯o->expansion[i]; + + if (token->type == CPP_MACRO_ARG) + len += NODE_LEN (macro->params[token->val.arg_no - 1]); + else + len += cpp_token_len (token); /* Includes room for ' '. */ + if (token->flags & STRINGIFY_ARG) + len++; /* "#" */ + if (token->flags & PASTE_LEFT) + len += 3; /* " ##" */ + } + + if (len > pfile->macro_buffer_len) + { + pfile->macro_buffer = (U_CHAR *) xrealloc (pfile->macro_buffer, len); + pfile->macro_buffer_len = len; + } + + /* Fill in the buffer. Start with the macro name. */ + buffer = pfile->macro_buffer; + memcpy (buffer, NODE_NAME (node), NODE_LEN (node)); + buffer += NODE_LEN (node); + + /* Parameter names. */ + if (macro->fun_like) + { + *buffer++ = '('; + for (i = 0; i < macro->paramc; i++) + { + cpp_hashnode *param = macro->params[i]; + + if (param != pfile->spec_nodes.n__VA_ARGS__) + { + memcpy (buffer, NODE_NAME (param), NODE_LEN (param)); + buffer += NODE_LEN (param); + } + + if (i + 1 < macro->paramc) + /* Don't emit a space after the comma here; we're trying + to emit a Dwarf-friendly definition, and the Dwarf spec + forbids spaces in the argument list. */ + *buffer++ = ','; + else if (macro->variadic) + *buffer++ = '.', *buffer++ = '.', *buffer++ = '.'; + } + *buffer++ = ')'; + } + + /* The Dwarf spec requires a space after the macro name, even if the + definition is the empty string. */ + *buffer++ = ' '; + + /* Expansion tokens. */ + if (macro->count) + { + for (i = 0; i < macro->count; i++) + { + cpp_token *token = ¯o->expansion[i]; + + if (token->flags & PREV_WHITE) + *buffer++ = ' '; + if (token->flags & STRINGIFY_ARG) + *buffer++ = '#'; + + if (token->type == CPP_MACRO_ARG) + { + len = NODE_LEN (macro->params[token->val.arg_no - 1]); + memcpy (buffer, + NODE_NAME (macro->params[token->val.arg_no - 1]), len); + buffer += len; + } + else + buffer = cpp_spell_token (pfile, token, buffer); + + if (token->flags & PASTE_LEFT) + { + *buffer++ = ' '; + *buffer++ = '#'; + *buffer++ = '#'; + /* Next has PREV_WHITE; see _cpp_create_definition. */ + } + } + } + + *buffer = '\0'; + return pfile->macro_buffer; +} diff --git a/src/mkutil/cpp/cppmacro.obj b/src/mkutil/cpp/cppmacro.obj new file mode 100644 index 0000000000000000000000000000000000000000..55296496a704243deffe92a2f979d715838868bd GIT binary patch literal 41212 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 to indicate this. Exit + successfully. [The library does not exit itself, because + e.g. cc1 needs to print its own --help message at this point.] */ + if (options->help_only) + return; + + /* Initialize the printer structure. Setting print.line to -1 here + is a trick to guarantee that the first token of the file will + cause a linemarker to be output by maybe_print_line. */ + print.line = (unsigned int) -1; + print.printed = 0; + print.prev = 0; + print.map = 0; + + /* Open the output now. We must do so even if no_output is on, + because there may be other output than from the actual + preprocessing (e.g. from -dM). */ + if (options->out_fname[0] == '\0') + print.outf = stdout; + else + { + print.outf = fopen (options->out_fname, "w"); + if (print.outf == NULL) + { + cpp_notice_from_errno (pfile, options->out_fname); + return; + } + } + + setup_callbacks (); + + if (cpp_read_main_file (pfile, options->in_fname, NULL)) + { + cpp_finish_options (pfile); + + /* A successful cpp_read_main_file guarantees that we can call + cpp_scan_nooutput or cpp_get_token next. */ + if (options->no_output) + cpp_scan_nooutput (pfile); + else + scan_translation_unit (pfile); + + /* -dM command line option. Should this be in cpp_finish? */ + if (options->dump_macros == dump_only) + cpp_forall_identifiers (pfile, dump_macro, NULL); + + cpp_finish (pfile); + } + + /* Flush any pending output. */ + if (print.printed) + putc ('\n', print.outf); + + if (ferror (print.outf) || fclose (print.outf)) + cpp_notice_from_errno (pfile, options->out_fname); +} + +/* Set up the callbacks as appropriate. */ +static void +setup_callbacks () +{ + cpp_callbacks *cb = cpp_get_callbacks (pfile); + + if (! options->no_output) + { + cb->line_change = cb_line_change; + /* Don't emit #pragma or #ident directives if we are processing + assembly language; the assembler may choke on them. */ + if (options->lang != CLK_ASM) + { + cb->ident = cb_ident; + cb->def_pragma = cb_def_pragma; + } + if (! options->no_line_commands) + cb->file_change = cb_file_change; + } + + if (options->dump_includes) + cb->include = cb_include; + + if (options->dump_macros == dump_names + || options->dump_macros == dump_definitions) + { + cb->define = cb_define; + cb->undef = cb_undef; + } +} + +/* Writes out the preprocessed file, handling spacing and paste + avoidance issues. */ +static void +scan_translation_unit (pfile) + cpp_reader *pfile; +{ + bool avoid_paste = false; + + print.source = NULL; + for (;;) + { + const cpp_token *token = cpp_get_token (pfile); + + if (token->type == CPP_PADDING) + { + avoid_paste = true; + if (print.source == NULL + || (!(print.source->flags & PREV_WHITE) + && token->val.source == NULL)) + print.source = token->val.source; + continue; + } + + if (token->type == CPP_EOF) + break; + + /* Subtle logic to output a space if and only if necessary. */ + if (avoid_paste) + { + if (print.source == NULL) + print.source = token; + if (print.source->flags & PREV_WHITE + || (print.prev && cpp_avoid_paste (pfile, print.prev, token)) + || (print.prev == NULL && token->type == CPP_HASH)) + putc (' ', print.outf); + } + else if (token->flags & PREV_WHITE) + putc (' ', print.outf); + + avoid_paste = false; + print.source = NULL; + print.prev = token; + cpp_output_token (token, print.outf); + + if (token->type == CPP_STRING || token->type == CPP_WSTRING + || token->type == CPP_COMMENT) + check_multiline_token (&token->val.str); + } +} + +/* Adjust print.line for newlines embedded in tokens. */ +static void +check_multiline_token (str) + const cpp_string *str; +{ + unsigned int i; + + for (i = 0; i < str->len; i++) + if (str->text[i] == '\n') + print.line++; +} + +/* If the token read on logical line LINE needs to be output on a + different line to the current one, output the required newlines or + a line marker, and return 1. Otherwise return 0. */ +static void +maybe_print_line (map, line) + const struct line_map *map; + unsigned int line; +{ + /* End the previous line of text. */ + if (print.printed) + { + putc ('\n', print.outf); + print.line++; + print.printed = 0; + } + + if (line >= print.line && line < print.line + 8) + { + while (line > print.line) + { + putc ('\n', print.outf); + print.line++; + } + } + else + print_line (map, line, ""); +} + +/* Output a line marker for logical line LINE. Special flags are "1" + or "2" indicating entering or leaving a file. */ +static void +print_line (map, line, special_flags) + const struct line_map *map; + unsigned int line; + const char *special_flags; +{ + /* End any previous line of text. */ + if (print.printed) + putc ('\n', print.outf); + print.printed = 0; + + print.line = line; + if (! options->no_line_commands) + { + size_t to_file_len = strlen (map->to_file); + unsigned char *to_file_quoted = alloca (to_file_len * 4 + 1); + unsigned char *p; + + /* cpp_quote_string does not nul-terminate, so we have to do it + ourselves. */ + p = cpp_quote_string (to_file_quoted, + (unsigned char *)map->to_file, to_file_len); + *p = '\0'; + fprintf (print.outf, "# %u \"%s\"%s", + SOURCE_LINE (map, print.line), to_file_quoted, special_flags); + + if (map->sysp == 2) + fputs (" 3 4", print.outf); + else if (map->sysp == 1) + fputs (" 3", print.outf); + + putc ('\n', print.outf); + } +} + +/* Called when a line of output is started. TOKEN is the first token + of the line, and at end of file will be CPP_EOF. */ +static void +cb_line_change (pfile, token, parsing_args) + cpp_reader *pfile ATTRIBUTE_UNUSED; + const cpp_token *token; + int parsing_args; +{ + if (token->type == CPP_EOF || parsing_args) + return; + + maybe_print_line (print.map, token->line); + print.printed = 1; + print.prev = 0; + print.source = 0; + + /* Supply enough spaces to put this token in its original column, + one space per column greater than 2, since scan_translation_unit + will provide a space if PREV_WHITE. Don't bother trying to + reconstruct tabs; we can't get it right in general, and nothing + ought to care. Some things do care; the fault lies with them. */ + if (token->col > 2) + { + unsigned int spaces = token->col - 2; + + while (spaces--) + putc (' ', print.outf); + } +} + +static void +cb_ident (pfile, line, str) + cpp_reader *pfile ATTRIBUTE_UNUSED; + unsigned int line; + const cpp_string * str; +{ + maybe_print_line (print.map, line); + fprintf (print.outf, "#ident \"%s\"\n", str->text); + print.line++; +} + +static void +cb_define (pfile, line, node) + cpp_reader *pfile; + unsigned int line; + cpp_hashnode *node; +{ + maybe_print_line (print.map, line); + fputs ("#define ", print.outf); + + /* -dD command line option. */ + if (options->dump_macros == dump_definitions) + fputs ((const char *) cpp_macro_definition (pfile, node), print.outf); + else + fputs ((const char *) NODE_NAME (node), print.outf); + + putc ('\n', print.outf); + print.line++; +} + +static void +cb_undef (pfile, line, node) + cpp_reader *pfile ATTRIBUTE_UNUSED; + unsigned int line; + cpp_hashnode *node; +{ + maybe_print_line (print.map, line); + fprintf (print.outf, "#undef %s\n", NODE_NAME (node)); + print.line++; +} + +static void +cb_include (pfile, line, dir, header) + cpp_reader *pfile; + unsigned int line; + const unsigned char *dir; + const cpp_token *header; +{ + maybe_print_line (print.map, line); + fprintf (print.outf, "#%s %s\n", dir, cpp_token_as_text (pfile, header)); + print.line++; +} + +/* The file name, line number or system header flags have changed, as + described in MAP. From this point on, the old print.map might be + pointing to freed memory, and so must not be dereferenced. */ + +static void +cb_file_change (pfile, map) + cpp_reader *pfile ATTRIBUTE_UNUSED; + const struct line_map *map; +{ + const char *flags = ""; + + /* First time? */ + if (print.map == NULL) + { + /* Avoid printing foo.i when the main file is foo.c. */ + if (!options->preprocessed) + print_line (map, map->from_line, flags); + } + else + { + /* Bring current file to correct line when entering a new file. */ + if (map->reason == LC_ENTER) + maybe_print_line (map - 1, map->from_line - 1); + + if (map->reason == LC_ENTER) + flags = " 1"; + else if (map->reason == LC_LEAVE) + flags = " 2"; + print_line (map, map->from_line, flags); + } + + print.map = map; +} + +/* Copy a #pragma directive to the preprocessed output. */ +static void +cb_def_pragma (pfile, line) + cpp_reader *pfile; + unsigned int line; +{ + maybe_print_line (print.map, line); + fputs ("#pragma ", print.outf); + cpp_output_line (pfile, print.outf); + print.line++; +} + +/* Dump out the hash table. */ +static int +dump_macro (pfile, node, v) + cpp_reader *pfile; + cpp_hashnode *node; + void *v ATTRIBUTE_UNUSED; +{ + if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN)) + { + fputs ("#define ", print.outf); + fputs ((const char *) cpp_macro_definition (pfile, node), print.outf); + putc ('\n', print.outf); + print.line++; + } + + return 1; +} diff --git a/src/mkutil/cpp/cppmain.obj b/src/mkutil/cpp/cppmain.obj new file mode 100644 index 0000000000000000000000000000000000000000..9acf9c40850b95f524379093c08fa7066a574924 GIT binary patch literal 22454 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

    I_irbZ+jbud?JiRiklrK)jB%{?G?$ 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/cpp/cppspec.c b/src/mkutil/cpp/cppspec.c new file mode 100644 index 00000000..f464c80e --- /dev/null +++ b/src/mkutil/cpp/cppspec.c @@ -0,0 +1,240 @@ +/* Specific flags and argument handling of the C preprocessor. + Copyright (C) 1999 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + +#include "config.h" +#include "system.h" +#include "gcc.h" + +/* The `cpp' executable installed in $(bindir) and $(cpp_install_dir) + is a customized version of the gcc driver. It forces -E; -S and -c + are errors. It defaults to -x c for files with unrecognized + extensions, unless -x options appear in argv, in which case we + assume the user knows what they're doing. If no explicit input is + mentioned, it will read stdin. */ + +/* Snarfed from gcc.c: */ + +/* This defines which switch letters take arguments. */ + +#define DEFAULT_SWITCH_TAKES_ARG(CHAR) \ + ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \ + || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \ + || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \ + || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \ + || (CHAR) == 'B' || (CHAR) == 'b') + +#ifndef SWITCH_TAKES_ARG +#define SWITCH_TAKES_ARG(CHAR) DEFAULT_SWITCH_TAKES_ARG(CHAR) +#endif + +/* This defines which multi-letter switches take arguments. */ + +#define DEFAULT_WORD_SWITCH_TAKES_ARG(STR) \ + (!strcmp (STR, "Tdata") || !strcmp (STR, "Ttext") \ + || !strcmp (STR, "Tbss") || !strcmp (STR, "include") \ + || !strcmp (STR, "imacros") || !strcmp (STR, "aux-info") \ + || !strcmp (STR, "idirafter") || !strcmp (STR, "iprefix") \ + || !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \ + || !strcmp (STR, "isystem") || !strcmp (STR, "specs") \ + || !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ")) + +#ifndef WORD_SWITCH_TAKES_ARG +#define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR) +#endif + +/* Suffixes for known sorts of input files. Note that we do not list + files which are normally considered to have been preprocessed already, + since the user's expectation is that `cpp' always preprocesses. */ +static const char *const known_suffixes[] = +{ + ".c", ".C", ".S", ".m", + ".cc", ".cxx", ".cpp", ".cp", ".c++", + NULL +}; + +/* Filter argc and argv before processing by the gcc driver proper. */ +void +lang_specific_driver (in_argc, in_argv, in_added_libraries) + int *in_argc; + const char *const **in_argv; + int *in_added_libraries ATTRIBUTE_UNUSED; +{ + int argc = *in_argc; + const char *const *argv = *in_argv; + + /* Do we need to read stdin? */ + int read_stdin = 1; + + /* Do we need to insert -E? */ + int need_E = 1; + + /* Do we need to insert -no-gcc? */ + int need_no_gcc = 1; + + /* Have we seen an input file? */ + int seen_input = 0; + + /* Positions to insert -xc, -xassembler-with-cpp, and -o, if necessary. + 0 means unnecessary. */ + int lang_c_here = 0; + int lang_S_here = 0; + int o_here = 0; + + /* Do we need to fix up an input file with an unrecognized suffix? */ + int need_fixups = 1; + + int i, j, quote = 0; + const char **new_argv; + int new_argc; + extern int is_cpp_driver; + + is_cpp_driver = 1; + + /* First pass. If we see an -S or -c, barf. If we see an input file, + turn off read_stdin. If we see a second input file, it is actually + the output file. If we see a third input file, barf. */ + for (i = 1; i < argc; i++) + { + if (quote == 1) + { + quote = 0; + continue; + } + + if (argv[i][0] == '-') + { + if (argv[i][1] == '\0') + read_stdin = 0; + else if (argv[i][2] == '\0') + { + if (argv[i][1] == 'E') + need_E = 0; + else if (argv[i][1] == 'S' || argv[i][1] == 'c') + { + fatal ("\"%s\" is not a valid option to the preprocessor", + argv[i]); + return; + } + else if (argv[i][1] == 'x') + { + need_fixups = 0; + quote = 1; + } + else if (SWITCH_TAKES_ARG (argv[i][1])) + quote = 1; + } + else if (argv[i][1] == 'x') + need_fixups = 0; + else if (argv[i][1] == 'g' && !strcmp(&argv[i][2], "cc")) + need_no_gcc = 0; + else if (WORD_SWITCH_TAKES_ARG (&argv[i][1])) + quote = 1; + } + else /* not an option */ + { + seen_input++; + if (seen_input == 3) + { + fatal ("too many input files"); + return; + } + else if (seen_input == 2) + { + o_here = i; + } + else + { + read_stdin = 0; + if (need_fixups) + { + int l = strlen (argv[i]); + int known = 0; + const char *const *suff; + + for (suff = known_suffixes; *suff; suff++) + if (!strcmp (*suff, &argv[i][l - strlen(*suff)])) + { + known = 1; + break; + } + + if (! known) + { + /* .s files are a special case; we have to treat + them like .S files so -D__ASSEMBLER__ will be + in effect. */ + if (!strcmp (".s", &argv[i][l - 2])) + lang_S_here = i; + else + lang_c_here = i; + } + } + } + } + } + + /* If we don't need to edit the command line, we can bail early. */ + + new_argc = argc + need_E + need_no_gcc + read_stdin + + !!o_here + !!lang_c_here + !!lang_S_here; + + if (new_argc == argc) + return; + + /* One more slot for a terminating null. */ + new_argv = (const char **) xmalloc ((new_argc + 1) * sizeof(char *)); + + new_argv[0] = argv[0]; + j = 1; + + if (need_E) + new_argv[j++] = "-E"; + + if (need_no_gcc) + new_argv[j++] = "-no-gcc"; + + for (i = 1; i < argc; i++, j++) + { + if (i == lang_c_here) + new_argv[j++] = "-xc"; + else if (i == lang_S_here) + new_argv[j++] = "-xassembler-with-cpp"; + else if (i == o_here) + new_argv[j++] = "-o"; + + new_argv[j] = argv[i]; + } + + if (read_stdin) + new_argv[j++] = "-"; + + new_argv[j] = NULL; + *in_argc = new_argc; + *in_argv = new_argv; +} + +/* Called before linking. Returns 0 on success and -1 on failure. */ +int lang_specific_pre_link () +{ + return 0; /* Not used for cpp. */ +} + +/* Number of extra output files that lang_specific_pre_link may generate. */ +int lang_specific_extra_outfiles = 0; /* Not used for cpp. */ diff --git a/src/mkutil/cpp/cppspec.obj b/src/mkutil/cpp/cppspec.obj new file mode 100644 index 0000000000000000000000000000000000000000..8172aa29f406fbbcddce3b6e770dd07b7f5ba282 GIT binary patch literal 13785 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 64 +#define GCOV_TYPE_SIZE LONG_TYPE_SIZE +#else +#define GCOV_TYPE_SIZE LONG_LONG_TYPE_SIZE +#endif + + +/* By default, the preprocessor should be invoked the same way in C++ + as in C. */ +#ifndef CPLUSPLUS_CPP_SPEC +#ifdef CPP_SPEC +#define CPLUSPLUS_CPP_SPEC CPP_SPEC +#endif +#endif + +#ifndef ACCUMULATE_OUTGOING_ARGS +#define ACCUMULATE_OUTGOING_ARGS 0 +#endif + +/* Supply a default definition for PUSH_ARGS. */ +#ifndef PUSH_ARGS +#ifdef PUSH_ROUNDING +#define PUSH_ARGS !ACCUMULATE_OUTGOING_ARGS +#else +#define PUSH_ARGS 0 +#endif +#endif + +/* If PREFERRED_STACK_BOUNDARY is not defined, set it to STACK_BOUNDARY. + STACK_BOUNDARY is required. */ +#ifndef PREFERRED_STACK_BOUNDARY +#define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY +#endif + +/* By default, the C++ compiler will use function addresses in the + vtable entries. Setting this non-zero tells the compiler to use + function descriptors instead. The value of this macro says how + many words wide the descriptor is (normally 2). It is assumed + that the address of a function descriptor may be treated as a + pointer to a function. */ +#ifndef TARGET_VTABLE_USES_DESCRIPTORS +#define TARGET_VTABLE_USES_DESCRIPTORS 0 +#endif + +/* Select a format to encode pointers in exception handling data. We + prefer those that result in fewer dynamic relocations. Assume no + special support here and encode direct references. */ +#ifndef ASM_PREFERRED_EH_DATA_FORMAT +#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) DW_EH_PE_absptr +#endif + +/* By default, the C++ compiler will use the lowest bit of the pointer + to function to indicate a pointer-to-member-function points to a + virtual member function. However, if FUNCTION_BOUNDARY indicates + function addresses aren't always even, the lowest bit of the delta + field will be used. */ +#ifndef TARGET_PTRMEMFUNC_VBIT_LOCATION +#define TARGET_PTRMEMFUNC_VBIT_LOCATION \ + (FUNCTION_BOUNDARY >= 2 * BITS_PER_UNIT \ + ? ptrmemfunc_vbit_in_pfn : ptrmemfunc_vbit_in_delta) +#endif + +/* True if it is possible to profile code that does not have a frame + pointer. */ + +#ifndef TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER +#define TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER true +#endif + +#ifndef DEFAULT_GDB_EXTENSIONS +#define DEFAULT_GDB_EXTENSIONS 1 +#endif + +/* If more than one debugging type is supported, you must define + PREFERRED_DEBUGGING_TYPE to choose a format in a system-dependent way. + + This is one long line cause VAXC can't handle a \-newline. */ +#if 1 < (defined (DBX_DEBUGGING_INFO) + defined (SDB_DEBUGGING_INFO) + defined (DWARF_DEBUGGING_INFO) + defined (DWARF2_DEBUGGING_INFO) + defined (XCOFF_DEBUGGING_INFO) + defined (VMS_DEBUGGING_INFO)) +#ifndef PREFERRED_DEBUGGING_TYPE +You Lose! You must define PREFERRED_DEBUGGING_TYPE! +#endif /* no PREFERRED_DEBUGGING_TYPE */ +#else /* Only one debugging format supported. Define PREFERRED_DEBUGGING_TYPE + so other code needn't care. */ +#ifdef DBX_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG +#endif +#ifdef SDB_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE SDB_DEBUG +#endif +#ifdef DWARF_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG +#endif +#ifdef DWARF2_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG +#endif +#ifdef VMS_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE VMS_AND_DWARF2_DEBUG +#endif +#ifdef XCOFF_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE XCOFF_DEBUG +#endif +#endif /* More than one debugger format enabled. */ + +/* If still not defined, must have been because no debugging formats + are supported. */ +#ifndef PREFERRED_DEBUGGING_TYPE +#define PREFERRED_DEBUGGING_TYPE NO_DEBUG +#endif + +/* This is set to 1 if BYTES_BIG_ENDIAN is defined but the target uses a + little-endian method of passing and returning structures in registers. + On the HP-UX IA64 and PA64 platforms structures are aligned differently + then integral values and setting this value to 1 will allow for the + special handling of structure arguments and return values in regs. */ + +#ifndef FUNCTION_ARG_REG_LITTLE_ENDIAN +#define FUNCTION_ARG_REG_LITTLE_ENDIAN 0 +#endif + +/* Determine the register class for registers suitable to be the base + address register in a MEM. Allow the choice to be dependent upon + the mode of the memory access. */ +#ifndef MODE_BASE_REG_CLASS +#define MODE_BASE_REG_CLASS(MODE) BASE_REG_CLASS +#endif + +/* Determine whether __cxa_atexit, rather than atexit, is used to + register C++ destructors for local statics and global objects. */ +#ifndef DEFAULT_USE_CXA_ATEXIT +#define DEFAULT_USE_CXA_ATEXIT 0 +#endif + +#endif /* ! GCC_DEFAULTS_H */ diff --git a/src/mkutil/cpp/except.h b/src/mkutil/cpp/except.h new file mode 100644 index 00000000..55cdf5da --- /dev/null +++ b/src/mkutil/cpp/except.h @@ -0,0 +1,206 @@ +/* Exception Handling interface routines. + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Free Software Foundation, Inc. + Contributed by Mike Stump . + +This file is part of GCC. + +GCC 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, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + + +#ifndef GCC_VARRAY_H +struct varray_head_tag; +#define varray_type struct varray_head_tag * +#endif + +struct function; + +struct inline_remap; + +/* Per-function EH data. Used only in except.c, but GC and others + manipulate pointers to the opaque type. */ +struct eh_status; + +/* Internal structure describing a region. */ +struct eh_region; + +/* Test: is exception handling turned on? */ +extern int doing_eh PARAMS ((int)); + +/* Start an exception handling region. All instructions emitted after + this point are considered to be part of the region until an + expand_eh_region_end variant is invoked. */ +extern void expand_eh_region_start PARAMS ((void)); + +/* End an exception handling region for a cleanup. HANDLER is an + expression to expand for the cleanup. */ +extern void expand_eh_region_end_cleanup PARAMS ((tree)); + +/* End an exception handling region for a try block, and prepares + for subsequent calls to expand_start_catch. */ +extern void expand_start_all_catch PARAMS ((void)); + +/* Begin a catch clause. TYPE is an object to be matched by the + runtime, or a list of such objects, or null if this is a catch-all + clause. */ +extern void expand_start_catch PARAMS ((tree)); + +/* End a catch clause. Control will resume after the try/catch block. */ +extern void expand_end_catch PARAMS ((void)); + +/* End a sequence of catch handlers for a try block. */ +extern void expand_end_all_catch PARAMS ((void)); + +/* End an exception region for an exception type filter. ALLOWED is a + TREE_LIST of TREE_VALUE objects to be matched by the runtime. + FAILURE is a function to invoke if a mismatch occurs. */ +extern void expand_eh_region_end_allowed PARAMS ((tree, tree)); + +/* End an exception region for a must-not-throw filter. FAILURE is a + function to invoke if an uncaught exception propagates this far. */ +extern void expand_eh_region_end_must_not_throw PARAMS ((tree)); + +/* End an exception region for a throw. No handling goes on here, + but it's the easiest way for the front-end to indicate what type + is being thrown. */ +extern void expand_eh_region_end_throw PARAMS ((tree)); + +/* End a fixup region. Within this region the cleanups for the immediately + enclosing region are _not_ run. This is used for goto cleanup to avoid + destroying an object twice. */ +extern void expand_eh_region_end_fixup PARAMS ((tree)); + +/* Begin a region that will contain entries created with + add_partial_entry. */ +extern void begin_protect_partials PARAMS ((void)); + +/* Create a new exception region and add the handler for the region + onto a list. These regions will be ended (and their handlers emitted) + when end_protect_partials is invoked. */ +extern void add_partial_entry PARAMS ((tree)); + +/* End all of the pending exception regions that have handlers added with + add_partial_entry. */ +extern void end_protect_partials PARAMS ((void)); + +/* Invokes CALLBACK for every exception handler label. Only used by old + loop hackery; should not be used by new code. */ +#if 0 /* Nick */ +extern void for_each_eh_label PARAMS ((void (*) (rtx))); +#endif + +/* Determine if the given INSN can throw an exception. */ +#if 0 /* Nick */ +extern bool can_throw_internal PARAMS ((rtx)); +extern bool can_throw_external PARAMS ((rtx)); +#endif + +/* Return nonzero if nothing in this function can throw. */ +extern bool nothrow_function_p PARAMS ((void)); + +/* After initial rtl generation, call back to finish generating + exception support code. */ +extern void finish_eh_generation PARAMS ((void)); + +extern void init_eh PARAMS ((void)); +extern void init_eh_for_function PARAMS ((void)); + +#if 0 /* Nick */ +extern rtx reachable_handlers PARAMS ((rtx)); +extern void maybe_remove_eh_handler PARAMS ((rtx)); +#endif + +extern void convert_from_eh_region_ranges PARAMS ((void)); +extern void convert_to_eh_region_ranges PARAMS ((void)); +extern void find_exception_handler_labels PARAMS ((void)); +extern bool current_function_has_exception_handlers PARAMS ((void)); +extern void output_function_exception_table PARAMS ((void)); + +extern void expand_builtin_unwind_init PARAMS ((void)); +#if 0 /* Nick */ +extern rtx expand_builtin_eh_return_data_regno PARAMS ((tree)); +extern rtx expand_builtin_extract_return_addr PARAMS ((tree)); +extern void expand_builtin_init_dwarf_reg_sizes PARAMS ((tree)); +extern rtx expand_builtin_frob_return_addr PARAMS ((tree)); +extern rtx expand_builtin_dwarf_fp_regnum PARAMS ((void)); +extern void expand_builtin_eh_return PARAMS ((tree, tree)); +#endif +extern void expand_eh_return PARAMS ((void)); +#if 0 /* Nick */ +extern rtx get_exception_pointer PARAMS ((struct function *)); +extern int duplicate_eh_regions PARAMS ((struct function *, + struct inline_remap *)); + +extern void sjlj_emit_function_exit_after PARAMS ((rtx)); + + +/* If non-NULL, this is a function that returns an expression to be + executed if an unhandled exception is propagated out of a cleanup + region. For example, in C++, an exception thrown by a destructor + during stack unwinding is required to result in a call to + `std::terminate', so the C++ version of this function returns a + CALL_EXPR for `std::terminate'. */ +extern tree (*lang_protect_cleanup_actions) PARAMS ((void)); + +/* Return true if type A catches type B. */ +extern int (*lang_eh_type_covers) PARAMS ((tree a, tree b)); + +/* Map a type to a runtime object to match type. */ +extern tree (*lang_eh_runtime_type) PARAMS ((tree)); +#endif + +#ifndef GCC_VARRAY_H +#undef varray_type +#endif + + +/* Just because the user configured --with-sjlj-exceptions=no doesn't + mean that we can use call frame exceptions. Detect that the target + has appropriate support. */ + +#if ! (defined (EH_RETURN_DATA_REGNO) \ + && (defined (IA64_UNWIND_INFO) \ + || (DWARF2_UNWIND_INFO \ + && defined (EH_RETURN_STACKADJ_RTX) \ + && (defined (EH_RETURN_HANDLER_RTX) \ + || defined (HAVE_eh_return))))) +#define MUST_USE_SJLJ_EXCEPTIONS 1 +#else +#define MUST_USE_SJLJ_EXCEPTIONS 0 +#endif + +#ifdef CONFIG_SJLJ_EXCEPTIONS +# if CONFIG_SJLJ_EXCEPTIONS == 1 +# define USING_SJLJ_EXCEPTIONS 1 +# endif +# if CONFIG_SJLJ_EXCEPTIONS == 0 +# define USING_SJLJ_EXCEPTIONS 0 +# ifndef EH_RETURN_DATA_REGNO + #error "EH_RETURN_DATA_REGNO required" +# endif +# ifndef EH_RETURN_STACKADJ_RTX + #error "EH_RETURN_STACKADJ_RTX required" +# endif +# if !defined(EH_RETURN_HANDLER_RTX) && !defined(HAVE_eh_return) + #error "EH_RETURN_HANDLER_RTX or eh_return required" +# endif +# if !defined(DWARF2_UNWIND_INFO) && !defined(IA64_UNWIND_INFO) + #error "{DWARF2,IA64}_UNWIND_INFO required" +# endif +# endif +#else +# define USING_SJLJ_EXCEPTIONS MUST_USE_SJLJ_EXCEPTIONS +#endif diff --git a/src/mkutil/cpp/flags.h b/src/mkutil/cpp/flags.h new file mode 100644 index 00000000..c3e72b7e --- /dev/null +++ b/src/mkutil/cpp/flags.h @@ -0,0 +1,644 @@ +/* Compilation switch flag definitions for GCC. + Copyright (C) 1987, 1988, 1994, 1995, 1996, 1997, 1998, 1999, 2000 + Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + +#ifndef GCC_FLAGS_H +#define GCC_FLAGS_H + +/* Name of the input .c file being compiled. */ +extern const char *main_input_filename; + +enum debug_info_type +{ + NO_DEBUG, /* Write no debug info. */ + DBX_DEBUG, /* Write BSD .stabs for DBX (using dbxout.c). */ + SDB_DEBUG, /* Write COFF for (old) SDB (using sdbout.c). */ + DWARF_DEBUG, /* Write Dwarf debug info (using dwarfout.c). */ + DWARF2_DEBUG, /* Write Dwarf v2 debug info (using dwarf2out.c). */ + XCOFF_DEBUG, /* Write IBM/Xcoff debug info (using dbxout.c). */ + VMS_DEBUG, /* Write VMS debug info (using vmsdbgout.c). */ + VMS_AND_DWARF2_DEBUG /* Write VMS debug info (using vmsdbgout.c). + and DWARF v2 debug info (using dwarf2out.c). */ +}; + +/* Specify which kind of debugging info to generate. */ +extern enum debug_info_type write_symbols; + +enum debug_info_level +{ + DINFO_LEVEL_NONE, /* Write no debugging info. */ + DINFO_LEVEL_TERSE, /* Write minimal info to support tracebacks only. */ + DINFO_LEVEL_NORMAL, /* Write info for all declarations (and line table). */ + DINFO_LEVEL_VERBOSE /* Write normal info plus #define/#undef info. */ +}; + +/* Specify how much debugging info to generate. */ +extern enum debug_info_level debug_info_level; + +/* Nonzero means use GNU-only extensions in the generated symbolic + debugging information. */ +extern int use_gnu_debug_info_extensions; + +/* Nonzero means do optimizations. -opt. */ + +extern int optimize; + +/* Nonzero means optimize for size. -Os. */ + +extern int optimize_size; + +/* Don't print functions as they are compiled and don't print + times taken by the various passes. -quiet. */ + +extern int quiet_flag; + +/* Print times taken by the various passes. -ftime-report. */ + +extern int time_report; + +/* Print memory still in use at end of compilation (which may have little + to do with peak memory consumption). -fmem-report. */ + +extern int mem_report; + +/* Don't print warning messages. -w. */ + +extern int inhibit_warnings; + +/* Don't suppress warnings from system headers. -Wsystem-headers. */ + +extern int warn_system_headers; + +/* Do print extra warnings (such as for uninitialized variables). -W. */ + +extern int extra_warnings; + +/* Nonzero to warn about unused variables, functions et.al. Use + set_Wunused() to update the -Wunused-* flags that correspond to the + -Wunused option. */ + +extern void set_Wunused PARAMS ((int setting)); + +extern int warn_unused_function; +extern int warn_unused_label; +extern int warn_unused_parameter; +extern int warn_unused_variable; +extern int warn_unused_value; + +/* Nonzero to warn about code which is never reached. */ + +extern int warn_notreached; + +/* Nonzero means warn if inline function is too large. */ + +extern int warn_inline; + +/* Nonzero to warn about variables used before they are initialized. */ + +extern int warn_uninitialized; + +/* Zero if unknown pragmas are ignored + One if the compiler should warn about an unknown pragma not in + a system include file. + Greater than one if the compiler should warn for all unknown + pragmas. */ + +extern int warn_unknown_pragmas; + +/* Nonzero means warn about all declarations which shadow others. */ + +extern int warn_shadow; + +/* Warn if a switch on an enum fails to have a case for every enum value. */ + +extern int warn_switch; + +/* Nonzero means warn about function definitions that default the return type + or that use a null return and have a return-type other than void. */ + +extern int warn_return_type; + +/* Warn about functions which might be candidates for attribute noreturn. */ + +extern int warn_missing_noreturn; + +/* Nonzero means warn about pointer casts that increase the required + alignment of the target type (and might therefore lead to a crash + due to a misaligned access). */ + +extern int warn_cast_align; + +/* Nonzero means warn about any objects definitions whose size is larger + than N bytes. Also want about function definitions whose returned + values are larger than N bytes. The value N is in `larger_than_size'. */ + +extern int warn_larger_than; +extern HOST_WIDE_INT larger_than_size; + +/* Warn if a function returns an aggregate, + since there are often incompatible calling conventions for doing this. */ + +extern int warn_aggregate_return; + +/* Warn if packed attribute on struct is unnecessary and inefficient. */ + +extern int warn_packed; + +/* Warn when gcc pads a structure to an alignment boundary. */ + +extern int warn_padded; + +/* Warn when an optimization pass is disabled. */ + +extern int warn_disabled_optimization; + +/* Nonzero means warn about uses of __attribute__((deprecated)) + declarations. */ + +extern int warn_deprecated_decl; + +/* Nonzero if generating code to do profiling. */ + +extern int profile_flag; + +/* Nonzero if generating code to profile program flow graph arcs. */ + +extern int profile_arc_flag; + +/* Nonzero if generating info for gcov to calculate line test coverage. */ + +extern int flag_test_coverage; + +/* Nonzero indicates that branch taken probabilities should be calculated. */ + +extern int flag_branch_probabilities; + +/* Nonzero if basic blocks should be reordered. */ + +extern int flag_reorder_blocks; + +/* Nonzero if registers should be renamed. */ + +extern int flag_rename_registers; + +/* Nonzero for -pedantic switch: warn about anything + that standard C forbids. */ + +extern int pedantic; + +/* Temporarily suppress certain warnings. + This is set while reading code from a system header file. */ + +extern int in_system_header; + +/* Nonzero for -dp: annotate the assembly with a comment describing the + pattern and alternative used. */ + +extern int flag_print_asm_name; + +/* Now the symbols that are set with `-f' switches. */ + +/* Nonzero means `char' should be signed. */ + +extern int flag_signed_char; + +/* Nonzero means give an enum type only as many bytes as it needs. */ + +extern int flag_short_enums; + +/* Nonzero for -fcaller-saves: allocate values in regs that need to + be saved across function calls, if that produces overall better code. + Optional now, so people can test it. */ + +extern int flag_caller_saves; + +/* Nonzero for -fpcc-struct-return: return values the same way PCC does. */ + +extern int flag_pcc_struct_return; + +/* Nonzero for -fforce-mem: load memory value into a register + before arithmetic on it. This makes better cse but slower compilation. */ + +extern int flag_force_mem; + +/* Nonzero for -fforce-addr: load memory address into a register before + reference to memory. This makes better cse but slower compilation. */ + +extern int flag_force_addr; + +/* Nonzero for -fdefer-pop: don't pop args after each function call; + instead save them up to pop many calls' args with one insns. */ + +extern int flag_defer_pop; + +/* Nonzero for -ffloat-store: don't allocate floats and doubles + in extended-precision registers. */ + +extern int flag_float_store; + +/* Nonzero enables strength-reduction in loop.c. */ + +extern int flag_strength_reduce; + +/* Nonzero enables loop unrolling in unroll.c. Only loops for which the + number of iterations can be calculated at compile-time (UNROLL_COMPLETELY, + UNROLL_MODULO) or at run-time (preconditioned to be UNROLL_MODULO) are + unrolled. */ + +extern int flag_unroll_loops; + +/* Nonzero enables loop unrolling in unroll.c. All loops are unrolled. + This is generally not a win. */ + +extern int flag_unroll_all_loops; + +/* Nonzero forces all invariant computations in loops to be moved + outside the loop. */ + +extern int flag_move_all_movables; + +/* Nonzero enables prefetch optimizations for arrays in loops. */ + +extern int flag_prefetch_loop_arrays; + +/* Nonzero forces all general induction variables in loops to be + strength reduced. */ + +extern int flag_reduce_all_givs; + +/* Nonzero for -fcse-follow-jumps: + have cse follow jumps to do a more extensive job. */ + +extern int flag_cse_follow_jumps; + +/* Nonzero for -fcse-skip-blocks: + have cse follow a branch around a block. */ + +extern int flag_cse_skip_blocks; + +/* Nonzero for -fexpensive-optimizations: + perform miscellaneous relatively-expensive optimizations. */ +extern int flag_expensive_optimizations; + +/* Nonzero for -fwritable-strings: + store string constants in data segment and don't uniquize them. */ + +extern int flag_writable_strings; + +/* Nonzero means don't put addresses of constant functions in registers. + Used for compiling the Unix kernel, where strange substitutions are + done on the assembly output. */ + +extern int flag_no_function_cse; + +/* Nonzero for -fomit-frame-pointer: + don't make a frame pointer in simple functions that don't require one. */ + +extern int flag_omit_frame_pointer; + +/* Nonzero to inhibit use of define_optimization peephole opts. */ + +extern int flag_no_peephole; + +/* Nonzero means all references through pointers are volatile. */ + +extern int flag_volatile; + +/* Nonzero means treat all global and extern variables as volatile. */ + +extern int flag_volatile_global; + +/* Nonzero means treat all static variables as volatile. */ + +extern int flag_volatile_static; + +/* Nonzero allows GCC to optimize sibling and tail recursive calls. */ + +extern int flag_optimize_sibling_calls; + +/* Nonzero means the front end generally wants `errno' maintained by math + operations, like built-in SQRT. */ + +extern int flag_errno_math; + +/* Nonzero means that unsafe floating-point math optimizations are allowed + for the sake of speed. IEEE compliance is not guaranteed, and operations + are allowed to assume that their arguments and results are "normal" + (e.g., nonnegative for SQRT). */ + +extern int flag_unsafe_math_optimizations; + +/* Zero means that floating-point math operations cannot generate a + (user-visible) trap. This is the case, for example, in nonstop + IEEE 754 arithmetic. */ + +extern int flag_trapping_math; + +/* 0 means straightforward implementation of complex divide acceptable. + 1 means wide ranges of inputs must work for complex divide. + 2 means C99-like requirements for complex divide (not yet implemented). */ + +extern int flag_complex_divide_method; + +/* Nonzero means to run loop optimizations twice. */ + +extern int flag_rerun_loop_opt; + +/* Nonzero means make functions that look like good inline candidates + go inline. */ + +extern int flag_inline_functions; + +/* Nonzero for -fkeep-inline-functions: even if we make a function + go inline everywhere, keep its definition around for debugging + purposes. */ + +extern int flag_keep_inline_functions; + +/* Nonzero means that functions declared `inline' will be treated + as `static'. Prevents generation of zillions of copies of unused + static inline functions; instead, `inlines' are written out + only when actually used. Used in conjunction with -g. Also + does the right thing with #pragma interface. */ + +extern int flag_no_inline; + +/* Nonzero means that we don't want inlining by virtue of -fno-inline, + not just because the tree inliner turned us off. */ + +extern int flag_really_no_inline; + +/* Nonzero if we are only using compiler to check syntax errors. */ + +extern int flag_syntax_only; + +/* Nonzero means we should save auxiliary info into a .X file. */ + +extern int flag_gen_aux_info; + +/* Nonzero means make the text shared if supported. */ + +extern int flag_shared_data; + +/* flag_schedule_insns means schedule insns within basic blocks (before + local_alloc). + flag_schedule_insns_after_reload means schedule insns after + global_alloc. */ + +extern int flag_schedule_insns; +extern int flag_schedule_insns_after_reload; + +/* The following flags have effect only for scheduling before register + allocation: + + flag_schedule_interblock means schedule insns accross basic blocks. + flag_schedule_speculative means allow speculative motion of non-load insns. + flag_schedule_speculative_load means allow speculative motion of some + load insns. + flag_schedule_speculative_load_dangerous allows speculative motion of more + load insns. */ + +extern int flag_schedule_interblock; +extern int flag_schedule_speculative; +extern int flag_schedule_speculative_load; +extern int flag_schedule_speculative_load_dangerous; + +/* flag_branch_on_count_reg means try to replace add-1,compare,branch tupple + by a cheaper branch, on a count register. */ +extern int flag_branch_on_count_reg; + +/* This option is set to 1 on -fsingle-precision-constant option which is + used to convert the floating point constants to single precision + constants. */ + +extern int flag_single_precision_constant; + +/* Nonzero means put things in delayed-branch slots if supported. */ + +extern int flag_delayed_branch; + +/* Nonzero means suppress output of instruction numbers and line number + notes in debugging dumps. */ + +extern int flag_dump_unnumbered; + +/* Nonzero means pretend it is OK to examine bits of target floats, + even if that isn't true. The resulting code will have incorrect constants, + but the same series of instructions that the native compiler would make. */ + +extern int flag_pretend_float; + +/* Nonzero means change certain warnings into errors. + Usually these are warnings about failure to conform to some standard. */ + +extern int flag_pedantic_errors; + +/* Nonzero means generate position-independent code. + This is not fully implemented yet. */ + +extern int flag_pic; + +/* Nonzero means generate extra code for exception handling and enable + exception handling. */ + +extern int flag_exceptions; + +/* Nonzero means generate frame unwind info table when supported */ + +extern int flag_unwind_tables; + +/* Nonzero means generate frame unwind info table exact at each insn boundary */ + +extern int flag_asynchronous_unwind_tables; + +/* Nonzero means don't place uninitialized global data in common storage + by default. */ + +extern int flag_no_common; + +/* -finhibit-size-directive inhibits output of .size for ELF. + This is used only for compiling crtstuff.c, + and it may be extended to other effects + needed for crtstuff.c on other systems. */ +extern int flag_inhibit_size_directive; + +/* Nonzero means place each function into its own section on those platforms + which support arbitrary section names and unlimited numbers of sections. */ + +extern int flag_function_sections; + +/* ... and similar for data. */ + +extern int flag_data_sections; + +/* -fverbose-asm causes extra commentary information to be produced in + the generated assembly code (to make it more readable). This option + is generally only of use to those who actually need to read the + generated assembly code (perhaps while debugging the compiler itself). + -fno-verbose-asm, the default, causes the extra information + to not be added and is useful when comparing two assembler files. */ + +extern int flag_verbose_asm; + +/* -dA causes debug information to be produced in + the generated assembly code (to make it more readable). This option + is generally only of use to those who actually need to read the + generated assembly code (perhaps while debugging the compiler itself). + Currently, this switch is only used by dwarfout.c; however, it is intended + to be a catchall for printing debug information in the assembler file. */ + +extern int flag_debug_asm; + +extern int flag_dump_rtl_in_asm; + +/* -fgnu-linker specifies use of the GNU linker for initializations. + -fno-gnu-linker says that collect will be used. */ +extern int flag_gnu_linker; + +/* Tag all structures with __attribute__(packed) */ +extern int flag_pack_struct; + +/* This flag is only tested if alias checking is enabled. + 0 if pointer arguments may alias each other. True in C. + 1 if pointer arguments may not alias each other but may alias + global variables. + 2 if pointer arguments may not alias each other and may not + alias global variables. True in Fortran. + The value is ignored if flag_alias_check is 0. */ +extern int flag_argument_noalias; + +/* Nonzero if we should do (language-dependent) alias analysis. + Typically, this analysis will assume that expressions of certain + types do not alias expressions of certain other types. Only used + if alias analysis (in general) is enabled. */ +extern int flag_strict_aliasing; + +/* Emit code to probe the stack, to help detect stack overflow; also + may cause large objects to be allocated dynamically. */ +extern int flag_stack_check; + +/* Do the full regmove optimization pass. */ +extern int flag_regmove; + +/* Instrument functions with calls at entry and exit, for profiling. */ +extern int flag_instrument_function_entry_exit; + +/* Perform a peephole pass before sched2. */ +extern int flag_peephole2; + +/* Try to guess branch probablities. */ +extern int flag_guess_branch_prob; + +/* -fbounded-pointers causes gcc to compile pointers as composite + objects occupying three words: the pointer value, the base address + of the referent object, and the address immediately beyond the end + of the referent object. The base and extent allow us to perform + runtime bounds checking. -fbounded-pointers implies -fcheck-bounds. */ +extern int flag_bounded_pointers; + +/* -fcheck-bounds causes gcc to generate array bounds checks. + For C, C++: defaults to value of flag_bounded_pointers. + For ObjC: defaults to off. + For Java: defaults to on. + For Fortran: defaults to off. + For CHILL: defaults to off. */ +extern int flag_bounds_check; + +/* This will attempt to merge constant section constants, if 1 only + string constants and constants from constant pool, if 2 also constant + variables. */ +extern int flag_merge_constants; + +/* If one, renumber instruction UIDs to reduce the number of + unused UIDs if there are a lot of instructions. If greater than + one, unconditionally renumber instruction UIDs. */ +extern int flag_renumber_insns; + +/* Other basic status info about current function. */ + +/* Nonzero means current function must be given a frame pointer. + Set in stmt.c if anything is allocated on the stack there. + Set in reload1.c if anything is allocated on the stack there. */ + +extern int frame_pointer_needed; + +/* Nonzero if the generated code should trap on signed overflow + for PLUS / SUB / MULT. */ +extern int flag_trapv; + +/* Value of the -G xx switch, and whether it was passed or not. */ +extern int g_switch_value; +extern int g_switch_set; + +/* Values of the -falign-* flags: how much to align labels in code. + 0 means `use default', 1 means `don't align'. + For each variable, there is an _log variant which is the power + of two not less than the variable, for .align output. */ + +extern int align_loops; +extern int align_loops_log; +extern int align_loops_max_skip; +extern int align_jumps; +extern int align_jumps_log; +extern int align_jumps_max_skip; +extern int align_labels; +extern int align_labels_log; +extern int align_labels_max_skip; +extern int align_functions; +extern int align_functions_log; + +/* Nonzero if we dump in VCG format, not plain text. */ +extern int dump_for_graph; + +/* Selection of the graph form. */ +enum graph_dump_types +{ + no_graph = 0, + vcg +}; +extern enum graph_dump_types graph_dump_format; + +/* Nonzero means ignore `#ident' directives. 0 means handle them. + On SVR4 targets, it also controls whether or not to emit a + string identifying the compiler. */ + +extern int flag_no_ident; + +/* Nonzero if we want to perform enhanced load motion during gcse. */ + +extern int flag_gcse_lm; + +/* Nonzero if we want to perform store motion after gcse. */ + +extern int flag_gcse_sm; + + +/* Nonzero means we should do dwarf2 duplicate elimination. */ + +extern int flag_eliminate_dwarf2_dups; + +/* Non-zero means to collect statistics which might be expensive + and to print them when we are done. */ +extern int flag_detailed_statistics; + +/* Nonzero means enable synchronous exceptions for non-call instructions. */ +extern int flag_non_call_exceptions; + +#endif /* ! GCC_FLAGS_H */ diff --git a/src/mkutil/cpp/gcc.c b/src/mkutil/cpp/gcc.c new file mode 100644 index 00000000..99e303c3 --- /dev/null +++ b/src/mkutil/cpp/gcc.c @@ -0,0 +1,7001 @@ +/* Compiler driver program that can handle many languages. + Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. + +This paragraph is here to try to keep Sun CC from dying. +The number of chars here seems crucial!!!! */ + +/* This program is the user interface to the C compiler and possibly to +other compilers. It is used because compilation is a complicated procedure +which involves running several programs and passing temporary files between +them, forwarding the users switches to those programs selectively, +and deleting the temporary files at the end. + +CC recognizes how to compile each input file by suffixes in the file names. +Once it knows which kind of compilation to perform, the procedure for +compilation is specified by a string called a "spec". */ + +/* A Short Introduction to Adding a Command-Line Option. + + Before adding a command-line option, consider if it is really + necessary. Each additional command-line option adds complexity and + is difficult to remove in subsequent versions. + + In the following, consider adding the command-line argument + `--bar'. + + 1. Each command-line option is specified in the specs file. The + notation is described below in the comment entitled "The Specs + Language". Read it. + + 2. In this file, add an entry to "option_map" equating the long + `--' argument version and any shorter, single letter version. Read + the comments in the declaration of "struct option_map" for an + explanation. Do not omit the first `-'. + + 3. Look in the "specs" file to determine which program or option + list should be given the argument, e.g., "cc1_options". Add the + appropriate syntax for the shorter option version to the + corresponding "const char *" entry in this file. Omit the first + `-' from the option. For example, use `-bar', rather than `--bar'. + + 4. If the argument takes an argument, e.g., `--baz argument1', + modify either DEFAULT_SWITCH_TAKES_ARG or + DEFAULT_WORD_SWITCH_TAKES_ARG in this file. Omit the first `-' + from `--baz'. + + 5. Document the option in this file's display_help(). If the + option is passed to a subprogram, modify its corresponding + function, e.g., cppinit.c:print_help() or toplev.c:display_help(), + instead. + + 6. Compile and test. Make sure that your new specs file is being + read. For example, use a debugger to investigate the value of + "specs_file" in main(). */ + +#include "config.h" +#include "system.h" +#include +#if ! defined( SIGCHLD ) && defined( SIGCLD ) +# define SIGCHLD SIGCLD +#endif +#include "obstack.h" +#include "intl.h" +#include "prefix.h" +#include "gcc.h" +#include "flags.h" + +#ifdef HAVE_SYS_RESOURCE_H +#include +#endif +#if defined (HAVE_DECL_GETRUSAGE) && !HAVE_DECL_GETRUSAGE +extern int getrusage PARAMS ((int, struct rusage *)); +#endif + +/* By default there is no special suffix for target executables. */ +/* FIXME: when autoconf is fixed, remove the host check - dj */ +#if defined(TARGET_EXECUTABLE_SUFFIX) && defined(HOST_EXECUTABLE_SUFFIX) +#define HAVE_TARGET_EXECUTABLE_SUFFIX +#else +#undef TARGET_EXECUTABLE_SUFFIX +#define TARGET_EXECUTABLE_SUFFIX "" +#endif + +/* By default there is no special suffix for host executables. */ +#ifdef HOST_EXECUTABLE_SUFFIX +#define HAVE_HOST_EXECUTABLE_SUFFIX +#else +#define HOST_EXECUTABLE_SUFFIX "" +#endif + +/* By default, the suffix for target object files is ".o". */ +#ifdef TARGET_OBJECT_SUFFIX +#define HAVE_TARGET_OBJECT_SUFFIX +#else +#define TARGET_OBJECT_SUFFIX ".o" +#endif + +#ifndef VMS +/* FIXME: the location independence code for VMS is hairier than this, + and hasn't been written. */ +#ifndef DIR_UP +#define DIR_UP ".." +#endif /* DIR_UP */ +#endif /* VMS */ + +static const char dir_separator_str[] = { DIR_SEPARATOR, 0 }; + +#define obstack_chunk_alloc xmalloc +#define obstack_chunk_free free + +#ifndef GET_ENV_PATH_LIST +#define GET_ENV_PATH_LIST(VAR,NAME) do { (VAR) = getenv (NAME); } while (0) +#endif + +/* Most every one is fine with LIBRARY_PATH. For some, it conflicts. */ +#ifndef LIBRARY_PATH_ENV +#define LIBRARY_PATH_ENV "LIBRARY_PATH" +#endif + +#ifndef HAVE_KILL +#define kill(p,s) raise(s) +#endif + +/* If a stage of compilation returns an exit status >= 1, + compilation of that file ceases. */ + +#define MIN_FATAL_STATUS 1 + +/* Flag set by cppspec.c to 1. */ +int is_cpp_driver; + +/* Flag saying to pass the greatest exit code returned by a sub-process + to the calling program. */ +static int pass_exit_codes; + +/* Definition of string containing the arguments given to configure. */ +#include "configargs.h" + +/* Flag saying to print the directories gcc will search through looking for + programs, libraries, etc. */ + +static int print_search_dirs; + +/* Flag saying to print the full filename of this file + as found through our usual search mechanism. */ + +static const char *print_file_name = NULL; + +/* As print_file_name, but search for executable file. */ + +static const char *print_prog_name = NULL; + +/* Flag saying to print the relative path we'd use to + find libgcc.a given the current compiler flags. */ + +static int print_multi_directory; + +/* Flag saying to print the list of subdirectories and + compiler flags used to select them in a standard form. */ + +static int print_multi_lib; + +/* Flag saying to print the command line options understood by gcc and its + sub-processes. */ + +static int print_help_list; + +/* Flag indicating whether we should print the command and arguments */ + +static int verbose_flag; + +/* Flag indicating whether we should ONLY print the command and + arguments (like verbose_flag) without executing the command. + Displayed arguments are quoted so that the generated command + line is suitable for execution. This is intended for use in + shell scripts to capture the driver-generated command line. */ +static int verbose_only_flag; + +/* Flag indicating to print target specific command line options. */ + +static int target_help_flag; + +/* Flag indicating whether we should report subprocess execution times + (if this is supported by the system - see pexecute.c). */ + +static int report_times; + +/* Nonzero means write "temp" files in source directory + and use the source file's name in them, and don't delete them. */ + +static int save_temps_flag; + +/* The compiler version. */ + +static const char *compiler_version; + +/* The target version specified with -V */ + +static const char *spec_version = DEFAULT_TARGET_VERSION; + +/* The target machine specified with -b. */ + +static const char *spec_machine = DEFAULT_TARGET_MACHINE; + +/* Nonzero if cross-compiling. + When -b is used, the value comes from the `specs' file. */ + +#ifdef CROSS_COMPILE +static const char *cross_compile = "1"; +#else +static const char *cross_compile = "0"; +#endif + +#ifdef MODIFY_TARGET_NAME + +/* Information on how to alter the target name based on a command-line + switch. The only case we support now is simply appending or deleting a + string to or from the end of the first part of the configuration name. */ + +static const struct modify_target +{ + const char *const sw; + const enum add_del {ADD, DELETE} add_del; + const char *const str; +} +modify_target[] = MODIFY_TARGET_NAME; +#endif + +/* The number of errors that have occurred; the link phase will not be + run if this is non-zero. */ +static int error_count = 0; + +/* Greatest exit code of sub-processes that has been encountered up to + now. */ +static int greatest_status = 1; + +/* This is the obstack which we use to allocate many strings. */ + +static struct obstack obstack; + +/* This is the obstack to build an environment variable to pass to + collect2 that describes all of the relevant switches of what to + pass the compiler in building the list of pointers to constructors + and destructors. */ + +static struct obstack collect_obstack; + +/* These structs are used to collect resource usage information for + subprocesses. */ +#ifdef HAVE_GETRUSAGE +static struct rusage rus, prus; +#endif + +/* Forward declaration for prototypes. */ +struct path_prefix; + +static void init_spec PARAMS ((void)); +#ifndef VMS +static char **split_directories PARAMS ((const char *, int *)); +static void free_split_directories PARAMS ((char **)); +static char *make_relative_prefix PARAMS ((const char *, const char *, const char *)); +#endif /* VMS */ +static void store_arg PARAMS ((const char *, int, int)); +static char *load_specs PARAMS ((const char *)); +static void read_specs PARAMS ((const char *, int)); +static void set_spec PARAMS ((const char *, const char *)); +static struct compiler *lookup_compiler PARAMS ((const char *, size_t, const char *)); +static char *build_search_list PARAMS ((struct path_prefix *, const char *, int)); +static void putenv_from_prefixes PARAMS ((struct path_prefix *, const char *)); +static int access_check PARAMS ((const char *, int)); +static char *find_a_file PARAMS ((struct path_prefix *, const char *, int)); +static void add_prefix PARAMS ((struct path_prefix *, const char *, + const char *, int, int, int *)); +static void translate_options PARAMS ((int *, const char *const **)); +static char *skip_whitespace PARAMS ((char *)); +static void delete_if_ordinary PARAMS ((const char *)); +static void delete_temp_files PARAMS ((void)); +static void delete_failure_queue PARAMS ((void)); +static void clear_failure_queue PARAMS ((void)); +static int check_live_switch PARAMS ((int, int)); +static const char *handle_braces PARAMS ((const char *)); +static char *save_string PARAMS ((const char *, int)); +static void set_collect_gcc_options PARAMS ((void)); +static int do_spec_1 PARAMS ((const char *, int, const char *)); +static const char *find_file PARAMS ((const char *)); +static int is_directory PARAMS ((const char *, const char *, int)); +static void validate_switches PARAMS ((const char *)); +static void validate_all_switches PARAMS ((void)); +static void give_switch PARAMS ((int, int, int)); +static int used_arg PARAMS ((const char *, int)); +static int default_arg PARAMS ((const char *, int)); +static void set_multilib_dir PARAMS ((void)); +static void print_multilib_info PARAMS ((void)); +static void perror_with_name PARAMS ((const char *)); +static void pfatal_pexecute PARAMS ((const char *, const char *)) + ATTRIBUTE_NORETURN; +static void notice PARAMS ((const char *, ...)) + ATTRIBUTE_PRINTF_1; +static void display_help PARAMS ((void)); +static void add_preprocessor_option PARAMS ((const char *, int)); +static void add_assembler_option PARAMS ((const char *, int)); +static void add_linker_option PARAMS ((const char *, int)); +static void process_command PARAMS ((int, const char *const *)); +static int execute PARAMS ((void)); +static void clear_args PARAMS ((void)); +static void fatal_error PARAMS ((int)); +#ifdef ENABLE_SHARED_LIBGCC +static void init_gcc_specs PARAMS ((struct obstack *, + const char *, const char *, + const char *)); +#endif +#if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX) +static const char *convert_filename PARAMS ((const char *, int, int)); +#endif + +/* The Specs Language + +Specs are strings containing lines, each of which (if not blank) +is made up of a program name, and arguments separated by spaces. +The program name must be exact and start from root, since no path +is searched and it is unreliable to depend on the current working directory. +Redirection of input or output is not supported; the subprograms must +accept filenames saying what files to read and write. + +In addition, the specs can contain %-sequences to substitute variable text +or for conditional text. Here is a table of all defined %-sequences. +Note that spaces are not generated automatically around the results of +expanding these sequences; therefore, you can concatenate them together +or with constant text in a single argument. + + %% substitute one % into the program name or argument. + %i substitute the name of the input file being processed. + %b substitute the basename of the input file being processed. + This is the substring up to (and not including) the last period + and not including the directory. + %B same as %b, but include the file suffix (text after the last period). + %gSUFFIX + substitute a file name that has suffix SUFFIX and is chosen + once per compilation, and mark the argument a la %d. To reduce + exposure to denial-of-service attacks, the file name is now + chosen in a way that is hard to predict even when previously + chosen file names are known. For example, `%g.s ... %g.o ... %g.s' + might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX matches + the regexp "[.A-Za-z]*%O"; "%O" is treated exactly as if it + had been pre-processed. Previously, %g was simply substituted + with a file name chosen once per compilation, without regard + to any appended suffix (which was therefore treated just like + ordinary text), making such attacks more likely to succeed. + %uSUFFIX + like %g, but generates a new temporary file name even if %uSUFFIX + was already seen. + %USUFFIX + substitutes the last file name generated with %uSUFFIX, generating a + new one if there is no such last file name. In the absence of any + %uSUFFIX, this is just like %gSUFFIX, except they don't share + the same suffix "space", so `%g.s ... %U.s ... %g.s ... %U.s' + would involve the generation of two distinct file names, one + for each `%g.s' and another for each `%U.s'. Previously, %U was + simply substituted with a file name chosen for the previous %u, + without regard to any appended suffix. + %jSUFFIX + substitutes the name of the HOST_BIT_BUCKET, if any, and if it is + writable, and if save-temps is off; otherwise, substitute the name + of a temporary file, just like %u. This temporary file is not + meant for communication between processes, but rather as a junk + disposal mechanism. + %.SUFFIX + substitutes .SUFFIX for the suffixes of a matched switch's args when + it is subsequently output with %*. SUFFIX is terminated by the next + space or %. + %d marks the argument containing or following the %d as a + temporary file name, so that that file will be deleted if CC exits + successfully. Unlike %g, this contributes no text to the argument. + %w marks the argument containing or following the %w as the + "output file" of this compilation. This puts the argument + into the sequence of arguments that %o will substitute later. + %W{...} + like %{...} but mark last argument supplied within + as a file to be deleted on failure. + %o substitutes the names of all the output files, with spaces + automatically placed around them. You should write spaces + around the %o as well or the results are undefined. + %o is for use in the specs for running the linker. + Input files whose names have no recognized suffix are not compiled + at all, but they are included among the output files, so they will + be linked. + %O substitutes the suffix for object files. Note that this is + handled specially when it immediately follows %g, %u, or %U + (with or without a suffix argument) because of the need for + those to form complete file names. The handling is such that + %O is treated exactly as if it had already been substituted, + except that %g, %u, and %U do not currently support additional + SUFFIX characters following %O as they would following, for + example, `.o'. + %p substitutes the standard macro predefinitions for the + current target machine. Use this when running cpp. + %P like %p, but puts `__' before and after the name of each macro. + (Except macros that already have __.) + This is for ANSI C. + %I Substitute a -iprefix option made from GCC_EXEC_PREFIX. + %s current argument is the name of a library or startup file of some sort. + Search for that file in a standard list of directories + and substitute the full name found. + %eSTR Print STR as an error message. STR is terminated by a newline. + Use this when inconsistent options are detected. + %nSTR Print STR as an notice. STR is terminated by a newline. + %x{OPTION} Accumulate an option for %X. + %X Output the accumulated linker options specified by compilations. + %Y Output the accumulated assembler options specified by compilations. + %Z Output the accumulated preprocessor options specified by compilations. + %v1 Substitute the major version number of GCC. + (For version 2.5.3, this is 2.) + %v2 Substitute the minor version number of GCC. + (For version 2.5.3, this is 5.) + %v3 Substitute the patch level number of GCC. + (For version 2.5.3, this is 3.) + %a process ASM_SPEC as a spec. + This allows config.h to specify part of the spec for running as. + %A process ASM_FINAL_SPEC as a spec. A capital A is actually + used here. This can be used to run a post-processor after the + assembler has done its job. + %D Dump out a -L option for each directory in startfile_prefixes. + If multilib_dir is set, extra entries are generated with it affixed. + %l process LINK_SPEC as a spec. + %L process LIB_SPEC as a spec. + %G process LIBGCC_SPEC as a spec. + %M output multilib_dir with directory separators replaced with "_"; + if multilib_dir is not set or is ".", output "". + %S process STARTFILE_SPEC as a spec. A capital S is actually used here. + %E process ENDFILE_SPEC as a spec. A capital E is actually used here. + %C process CPP_SPEC as a spec. + %1 process CC1_SPEC as a spec. + %2 process CC1PLUS_SPEC as a spec. + %| output "-" if the input for the current command is coming from a pipe. + %* substitute the variable part of a matched option. (See below.) + Note that each comma in the substituted string is replaced by + a single space. + %{S} substitutes the -S switch, if that switch was given to CC. + If that switch was not specified, this substitutes nothing. + Here S is a metasyntactic variable. + %{S*} substitutes all the switches specified to CC whose names start + with -S. This is used for -o, -I, etc; switches that take + arguments. CC considers `-o foo' as being one switch whose + name starts with `o'. %{o*} would substitute this text, + including the space; thus, two arguments would be generated. + %{^S*} likewise, but don't put a blank between a switch and any args. + %{S*&T*} likewise, but preserve order of S and T options (the order + of S and T in the spec is not significant). Can be any number + of ampersand-separated variables; for each the wild card is + optional. Useful for CPP as %{D*&U*&A*}. + %{S*:X} substitutes X if one or more switches whose names start with -S are + specified to CC. Note that the tail part of the -S option + (i.e. the part matched by the `*') will be substituted for each + occurrence of %* within X. + %{ argument required. + o => argument optional. + j => join argument to equivalent, making one word. + * => require other text after NAME as an argument. */ + const char *const arg_info; +}; + +/* This is the table of mappings. Mappings are tried sequentially + for each option encountered; the first one that matches, wins. */ + +static const struct option_map option_map[] = + { + {"--all-warnings", "-Wall", 0}, + {"--ansi", "-ansi", 0}, + {"--assemble", "-S", 0}, + {"--assert", "-A", "a"}, + {"--classpath", "-fclasspath=", "aj"}, + {"--bootclasspath", "-fbootclasspath=", "aj"}, + {"--CLASSPATH", "-fclasspath=", "aj"}, + {"--comments", "-C", 0}, + {"--compile", "-c", 0}, + {"--debug", "-g", "oj"}, + {"--define-macro", "-D", "aj"}, + {"--dependencies", "-M", 0}, + {"--dump", "-d", "a"}, + {"--dumpbase", "-dumpbase", "a"}, + {"--entry", "-e", 0}, + {"--extra-warnings", "-W", 0}, + {"--for-assembler", "-Wa", "a"}, + {"--for-linker", "-Xlinker", "a"}, + {"--force-link", "-u", "a"}, + {"--imacros", "-imacros", "a"}, + {"--include", "-include", "a"}, + {"--include-barrier", "-I-", 0}, + {"--include-directory", "-I", "aj"}, + {"--include-directory-after", "-idirafter", "a"}, + {"--include-prefix", "-iprefix", "a"}, + {"--include-with-prefix", "-iwithprefix", "a"}, + {"--include-with-prefix-before", "-iwithprefixbefore", "a"}, + {"--include-with-prefix-after", "-iwithprefix", "a"}, + {"--language", "-x", "a"}, + {"--library-directory", "-L", "a"}, + {"--machine", "-m", "aj"}, + {"--machine-", "-m", "*j"}, + {"--no-integrated-cpp", "-no-integrated-cpp", 0}, + {"--no-line-commands", "-P", 0}, + {"--no-precompiled-includes", "-noprecomp", 0}, + {"--no-standard-includes", "-nostdinc", 0}, + {"--no-standard-libraries", "-nostdlib", 0}, + {"--no-warnings", "-w", 0}, + {"--optimize", "-O", "oj"}, + {"--output", "-o", "a"}, + {"--output-class-directory", "-foutput-class-dir=", "ja"}, + {"--param", "--param", "a"}, + {"--pedantic", "-pedantic", 0}, + {"--pedantic-errors", "-pedantic-errors", 0}, + {"--pipe", "-pipe", 0}, + {"--prefix", "-B", "a"}, + {"--preprocess", "-E", 0}, + {"--print-search-dirs", "-print-search-dirs", 0}, + {"--print-file-name", "-print-file-name=", "aj"}, + {"--print-libgcc-file-name", "-print-libgcc-file-name", 0}, + {"--print-missing-file-dependencies", "-MG", 0}, + {"--print-multi-lib", "-print-multi-lib", 0}, + {"--print-multi-directory", "-print-multi-directory", 0}, + {"--print-prog-name", "-print-prog-name=", "aj"}, + {"--profile", "-p", 0}, + {"--profile-blocks", "-a", 0}, + {"--quiet", "-q", 0}, + {"--resource", "-fcompile-resource=", "aj"}, + {"--save-temps", "-save-temps", 0}, + {"--shared", "-shared", 0}, + {"--silent", "-q", 0}, + {"--specs", "-specs=", "aj"}, + {"--static", "-static", 0}, + {"--std", "-std=", "aj"}, + {"--symbolic", "-symbolic", 0}, + {"--target", "-b", "a"}, + {"--time", "-time", 0}, + {"--trace-includes", "-H", 0}, + {"--traditional", "-traditional", 0}, + {"--traditional-cpp", "-traditional-cpp", 0}, + {"--trigraphs", "-trigraphs", 0}, + {"--undefine-macro", "-U", "aj"}, + {"--use-version", "-V", "a"}, + {"--user-dependencies", "-MM", 0}, + {"--verbose", "-v", 0}, + {"--warn-", "-W", "*j"}, + {"--write-dependencies", "-MD", 0}, + {"--write-user-dependencies", "-MMD", 0}, + {"--", "-f", "*j"} + }; + + +#ifdef TARGET_OPTION_TRANSLATE_TABLE +static const struct { + const char *const option_found; + const char *const replacements; +} target_option_translations[] = +{ + TARGET_OPTION_TRANSLATE_TABLE, + { 0, 0 } +}; +#endif + +/* Translate the options described by *ARGCP and *ARGVP. + Make a new vector and store it back in *ARGVP, + and store its length in *ARGVC. */ + +static void +translate_options (argcp, argvp) + int *argcp; + const char *const **argvp; +{ + int i; + int argc = *argcp; + const char *const *argv = *argvp; + int newvsize = (argc + 2) * 2 * sizeof (const char *); + const char **newv = + (const char **) xmalloc (newvsize); + int newindex = 0; + + i = 0; + newv[newindex++] = argv[i++]; + + while (i < argc) + { +#ifdef TARGET_OPTION_TRANSLATE_TABLE + int tott_idx; + + for (tott_idx = 0; + target_option_translations[tott_idx].option_found; + tott_idx++) + { + if (strcmp (target_option_translations[tott_idx].option_found, + argv[i]) == 0) + { + int spaces = 1; + const char *sp; + char *np; + + for (sp = target_option_translations[tott_idx].replacements; + *sp; sp++) + { + if (*sp == ' ') + spaces ++; + } + + newvsize += spaces * sizeof (const char *); + newv = (const char **) xrealloc (newv, newvsize); + + sp = target_option_translations[tott_idx].replacements; + np = xstrdup (sp); + + while (1) + { + while (*np == ' ') + np++; + if (*np == 0) + break; + newv[newindex++] = np; + while (*np != ' ' && *np) + np++; + if (*np == 0) + break; + *np++ = 0; + } + + i ++; + break; + } + } + if (target_option_translations[tott_idx].option_found) + continue; +#endif + + /* Translate -- options. */ + if (argv[i][0] == '-' && argv[i][1] == '-') + { + size_t j; + /* Find a mapping that applies to this option. */ + for (j = 0; j < ARRAY_SIZE (option_map); j++) + { + size_t optlen = strlen (option_map[j].name); + size_t arglen = strlen (argv[i]); + size_t complen = arglen > optlen ? optlen : arglen; + const char *arginfo = option_map[j].arg_info; + + if (arginfo == 0) + arginfo = ""; + + if (!strncmp (argv[i], option_map[j].name, complen)) + { + const char *arg = 0; + + if (arglen < optlen) + { + size_t k; + for (k = j + 1; k < ARRAY_SIZE (option_map); k++) + if (strlen (option_map[k].name) >= arglen + && !strncmp (argv[i], option_map[k].name, arglen)) + { + error ("ambiguous abbreviation %s", argv[i]); + break; + } + + if (k != ARRAY_SIZE (option_map)) + break; + } + + if (arglen > optlen) + { + /* If the option has an argument, accept that. */ + if (argv[i][optlen] == '=') + arg = argv[i] + optlen + 1; + + /* If this mapping requires extra text at end of name, + accept that as "argument". */ + else if (strchr (arginfo, '*') != 0) + arg = argv[i] + optlen; + + /* Otherwise, extra text at end means mismatch. + Try other mappings. */ + else + continue; + } + + else if (strchr (arginfo, '*') != 0) + { + error ("incomplete `%s' option", option_map[j].name); + break; + } + + /* Handle arguments. */ + if (strchr (arginfo, 'a') != 0) + { + if (arg == 0) + { + if (i + 1 == argc) + { + error ("missing argument to `%s' option", + option_map[j].name); + break; + } + + arg = argv[++i]; + } + } + else if (strchr (arginfo, '*') != 0) + ; + else if (strchr (arginfo, 'o') == 0) + { + if (arg != 0) + error ("extraneous argument to `%s' option", + option_map[j].name); + arg = 0; + } + + /* Store the translation as one argv elt or as two. */ + if (arg != 0 && strchr (arginfo, 'j') != 0) + newv[newindex++] = concat (option_map[j].equivalent, arg, + NULL); + else if (arg != 0) + { + newv[newindex++] = option_map[j].equivalent; + newv[newindex++] = arg; + } + else + newv[newindex++] = option_map[j].equivalent; + + break; + } + } + i++; + } + + /* Handle old-fashioned options--just copy them through, + with their arguments. */ + else if (argv[i][0] == '-') + { + const char *p = argv[i] + 1; + int c = *p; + int nskip = 1; + + if (SWITCH_TAKES_ARG (c) > (p[1] != 0)) + nskip += SWITCH_TAKES_ARG (c) - (p[1] != 0); + else if (WORD_SWITCH_TAKES_ARG (p)) + nskip += WORD_SWITCH_TAKES_ARG (p); + else if ((c == 'B' || c == 'b' || c == 'V' || c == 'x') + && p[1] == 0) + nskip += 1; + else if (! strcmp (p, "Xlinker")) + nskip += 1; + + /* Watch out for an option at the end of the command line that + is missing arguments, and avoid skipping past the end of the + command line. */ + if (nskip + i > argc) + nskip = argc - i; + + while (nskip > 0) + { + newv[newindex++] = argv[i++]; + nskip--; + } + } + else + /* Ordinary operands, or +e options. */ + newv[newindex++] = argv[i++]; + } + + newv[newindex] = 0; + + *argvp = newv; + *argcp = newindex; +} + +static char * +skip_whitespace (p) + char *p; +{ + while (1) + { + /* A fully-blank line is a delimiter in the SPEC file and shouldn't + be considered whitespace. */ + if (p[0] == '\n' && p[1] == '\n' && p[2] == '\n') + return p + 1; + else if (*p == '\n' || *p == ' ' || *p == '\t') + p++; + else if (*p == '#') + { + while (*p != '\n') + p++; + p++; + } + else + break; + } + + return p; +} +/* Structures to keep track of prefixes to try when looking for files. */ + +struct prefix_list +{ + const char *prefix; /* String to prepend to the path. */ + struct prefix_list *next; /* Next in linked list. */ + int require_machine_suffix; /* Don't use without machine_suffix. */ + /* 2 means try both machine_suffix and just_machine_suffix. */ + int *used_flag_ptr; /* 1 if a file was found with this prefix. */ + int priority; /* Sort key - priority within list */ +}; + +struct path_prefix +{ + struct prefix_list *plist; /* List of prefixes to try */ + int max_len; /* Max length of a prefix in PLIST */ + const char *name; /* Name of this list (used in config stuff) */ +}; + +/* List of prefixes to try when looking for executables. */ + +static struct path_prefix exec_prefixes = { 0, 0, "exec" }; + +/* List of prefixes to try when looking for startup (crt0) files. */ + +static struct path_prefix startfile_prefixes = { 0, 0, "startfile" }; + +/* List of prefixes to try when looking for include files. */ + +static struct path_prefix include_prefixes = { 0, 0, "include" }; + +/* Suffix to attach to directories searched for commands. + This looks like `MACHINE/VERSION/'. */ + +static const char *machine_suffix = 0; + +/* Suffix to attach to directories searched for commands. + This is just `MACHINE/'. */ + +static const char *just_machine_suffix = 0; + +/* Adjusted value of GCC_EXEC_PREFIX envvar. */ + +static const char *gcc_exec_prefix; + +/* Default prefixes to attach to command names. */ + +#ifdef CROSS_COMPILE /* Don't use these prefixes for a cross compiler. */ +#undef MD_EXEC_PREFIX +#undef MD_STARTFILE_PREFIX +#undef MD_STARTFILE_PREFIX_1 +#endif + +/* If no prefixes defined, use the null string, which will disable them. */ +#ifndef MD_EXEC_PREFIX +#define MD_EXEC_PREFIX "" +#endif +#ifndef MD_STARTFILE_PREFIX +#define MD_STARTFILE_PREFIX "" +#endif +#ifndef MD_STARTFILE_PREFIX_1 +#define MD_STARTFILE_PREFIX_1 "" +#endif + +/* Supply defaults for the standard prefixes. */ + +#ifndef STANDARD_EXEC_PREFIX +#define STANDARD_EXEC_PREFIX "/usr/local/lib/gcc-lib/" +#endif +#ifndef STANDARD_STARTFILE_PREFIX +#define STANDARD_STARTFILE_PREFIX "/usr/local/lib/" +#endif +#ifndef TOOLDIR_BASE_PREFIX +#define TOOLDIR_BASE_PREFIX "/usr/local/" +#endif +#ifndef STANDARD_BINDIR_PREFIX +#define STANDARD_BINDIR_PREFIX "/usr/local/bin" +#endif + +static const char *const standard_exec_prefix = STANDARD_EXEC_PREFIX; +static const char *const standard_exec_prefix_1 = "/usr/lib/gcc/"; +static const char *md_exec_prefix = MD_EXEC_PREFIX; + +static const char *md_startfile_prefix = MD_STARTFILE_PREFIX; +static const char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1; +static const char *const standard_startfile_prefix = STANDARD_STARTFILE_PREFIX; +static const char *const standard_startfile_prefix_1 = "/lib/"; +static const char *const standard_startfile_prefix_2 = "/usr/lib/"; + +static const char *const tooldir_base_prefix = TOOLDIR_BASE_PREFIX; +static const char *tooldir_prefix; + +static const char *const standard_bindir_prefix = STANDARD_BINDIR_PREFIX; + +/* Subdirectory to use for locating libraries. Set by + set_multilib_dir based on the compilation options. */ + +static const char *multilib_dir; + +/* Structure to keep track of the specs that have been defined so far. + These are accessed using %(specname) or %[specname] in a compiler + or link spec. */ + +struct spec_list +{ + /* The following 2 fields must be first */ + /* to allow EXTRA_SPECS to be initialized */ + const char *name; /* name of the spec. */ + const char *ptr; /* available ptr if no static pointer */ + + /* The following fields are not initialized */ + /* by EXTRA_SPECS */ + const char **ptr_spec; /* pointer to the spec itself. */ + struct spec_list *next; /* Next spec in linked list. */ + int name_len; /* length of the name */ + int alloc_p; /* whether string was allocated */ +}; + +#define INIT_STATIC_SPEC(NAME,PTR) \ +{ NAME, NULL, PTR, (struct spec_list *) 0, sizeof (NAME) - 1, 0 } + +/* List of statically defined specs. */ +static struct spec_list static_specs[] = +{ + INIT_STATIC_SPEC ("asm", &asm_spec), + INIT_STATIC_SPEC ("asm_debug", &asm_debug), + INIT_STATIC_SPEC ("asm_final", &asm_final_spec), + INIT_STATIC_SPEC ("asm_options", &asm_options), + INIT_STATIC_SPEC ("invoke_as", &invoke_as), + INIT_STATIC_SPEC ("cpp", &cpp_spec), + INIT_STATIC_SPEC ("cpp_options", &cpp_options), + INIT_STATIC_SPEC ("cpp_unique_options", &cpp_unique_options), + INIT_STATIC_SPEC ("trad_capable_cpp", &trad_capable_cpp), + INIT_STATIC_SPEC ("cc1", &cc1_spec), + INIT_STATIC_SPEC ("cc1_options", &cc1_options), + INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec), + INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec), + INIT_STATIC_SPEC ("endfile", &endfile_spec), + INIT_STATIC_SPEC ("link", &link_spec), + INIT_STATIC_SPEC ("lib", &lib_spec), + INIT_STATIC_SPEC ("libgcc", &libgcc_spec), + INIT_STATIC_SPEC ("startfile", &startfile_spec), + INIT_STATIC_SPEC ("switches_need_spaces", &switches_need_spaces), + INIT_STATIC_SPEC ("predefines", &cpp_predefines), + INIT_STATIC_SPEC ("cross_compile", &cross_compile), + INIT_STATIC_SPEC ("version", &compiler_version), + INIT_STATIC_SPEC ("multilib", &multilib_select), + INIT_STATIC_SPEC ("multilib_defaults", &multilib_defaults), + INIT_STATIC_SPEC ("multilib_extra", &multilib_extra), + INIT_STATIC_SPEC ("multilib_matches", &multilib_matches), + INIT_STATIC_SPEC ("multilib_exclusions", &multilib_exclusions), + INIT_STATIC_SPEC ("linker", &linker_name_spec), + INIT_STATIC_SPEC ("link_libgcc", &link_libgcc_spec), + INIT_STATIC_SPEC ("md_exec_prefix", &md_exec_prefix), + INIT_STATIC_SPEC ("md_startfile_prefix", &md_startfile_prefix), + INIT_STATIC_SPEC ("md_startfile_prefix_1", &md_startfile_prefix_1), +}; + +#ifdef EXTRA_SPECS /* additional specs needed */ +/* Structure to keep track of just the first two args of a spec_list. + That is all that the EXTRA_SPECS macro gives us. */ +struct spec_list_1 +{ + const char *const name; + const char *const ptr; +}; + +static const struct spec_list_1 extra_specs_1[] = { EXTRA_SPECS }; +static struct spec_list *extra_specs = (struct spec_list *) 0; +#endif + +/* List of dynamically allocates specs that have been defined so far. */ + +static struct spec_list *specs = (struct spec_list *) 0; + +/* Add appropriate libgcc specs to OBSTACK, taking into account + various permutations of -shared-libgcc, -shared, and such. */ + +#ifdef ENABLE_SHARED_LIBGCC +static void +init_gcc_specs (obstack, shared_name, static_name, eh_name) + struct obstack *obstack; + const char *shared_name; + const char *static_name; + const char *eh_name; +{ + char *buf; + + buf = concat ("%{static|static-libgcc:", static_name, " ", eh_name, + "}%{!static:%{!static-libgcc:", + "%{!shared:%{!shared-libgcc:", static_name, " ", + eh_name, "}%{shared-libgcc:", shared_name, " ", + static_name, "}}%{shared:", +#ifdef LINK_EH_SPEC + "%{shared-libgcc:", shared_name, + "}%{!shared-libgcc:", static_name, "}", +#else + shared_name, +#endif + "}}}", NULL); + + obstack_grow (obstack, buf, strlen (buf)); + free (buf); +} +#endif /* ENABLE_SHARED_LIBGCC */ + +/* Initialize the specs lookup routines. */ + +static void +init_spec () +{ + struct spec_list *next = (struct spec_list *) 0; + struct spec_list *sl = (struct spec_list *) 0; + int i; + + if (specs) + return; /* Already initialized. */ + + if (verbose_flag) + notice ("Using built-in specs.\n"); + +#ifdef EXTRA_SPECS + extra_specs = (struct spec_list *) + xcalloc (sizeof (struct spec_list), ARRAY_SIZE (extra_specs_1)); + + for (i = ARRAY_SIZE (extra_specs_1) - 1; i >= 0; i--) + { + sl = &extra_specs[i]; + sl->name = extra_specs_1[i].name; + sl->ptr = extra_specs_1[i].ptr; + sl->next = next; + sl->name_len = strlen (sl->name); + sl->ptr_spec = &sl->ptr; + next = sl; + } +#endif + + for (i = ARRAY_SIZE (static_specs) - 1; i >= 0; i--) + { + sl = &static_specs[i]; + sl->next = next; + next = sl; + } + +#ifdef ENABLE_SHARED_LIBGCC + /* ??? If neither -shared-libgcc nor --static-libgcc was + seen, then we should be making an educated guess. Some proposed + heuristics for ELF include: + + (1) If "-Wl,--export-dynamic", then it's a fair bet that the + program will be doing dynamic loading, which will likely + need the shared libgcc. + + (2) If "-ldl", then it's also a fair bet that we're doing + dynamic loading. + + (3) For each ET_DYN we're linking against (either through -lfoo + or /some/path/foo.so), check to see whether it or one of + its dependencies depends on a shared libgcc. + + (4) If "-shared" + + If the runtime is fixed to look for program headers instead + of calling __register_frame_info at all, for each object, + use the shared libgcc if any EH symbol referenced. + + If crtstuff is fixed to not invoke __register_frame_info + automatically, for each object, use the shared libgcc if + any non-empty unwind section found. + + Doing any of this probably requires invoking an external program to + do the actual object file scanning. */ + { + const char *p = libgcc_spec; + int in_sep = 1; + + /* Transform the extant libgcc_spec into one that uses the shared libgcc + when given the proper command line arguments. */ + while (*p) + { + if (in_sep && *p == '-' && strncmp (p, "-lgcc", 5) == 0) + { + init_gcc_specs (&obstack, +#ifdef NO_SHARED_LIBGCC_MULTILIB + "-lgcc_s" +#else + "-lgcc_s%M" +#endif + , + "-lgcc", + "-lgcc_eh"); + p += 5; + in_sep = 0; + } + else if (in_sep && *p == 'l' && strncmp (p, "libgcc.a%s", 10) == 0) + { + /* Ug. We don't know shared library extensions. Hope that + systems that use this form don't do shared libraries. */ + init_gcc_specs (&obstack, +#ifdef NO_SHARED_LIBGCC_MULTILIB + "-lgcc_s" +#else + "-lgcc_s%M" +#endif + , + "libgcc.a%s", + "libgcc_eh.a%s"); + p += 10; + in_sep = 0; + } + else + { + obstack_1grow (&obstack, *p); + in_sep = (*p == ' '); + p += 1; + } + } + + obstack_1grow (&obstack, '\0'); + libgcc_spec = obstack_finish (&obstack); + } +#endif +#ifdef USE_AS_TRADITIONAL_FORMAT + /* Prepend "--traditional-format" to whatever asm_spec we had before. */ + { + static const char tf[] = "--traditional-format "; + obstack_grow (&obstack, tf, sizeof(tf) - 1); + obstack_grow0 (&obstack, asm_spec, strlen (asm_spec)); + asm_spec = obstack_finish (&obstack); + } +#endif +#ifdef LINK_EH_SPEC + /* Prepend LINK_EH_SPEC to whatever link_spec we had before. */ + obstack_grow (&obstack, LINK_EH_SPEC, sizeof(LINK_EH_SPEC) - 1); + obstack_grow0 (&obstack, link_spec, strlen (link_spec)); + link_spec = obstack_finish (&obstack); +#endif + + specs = sl; +} + +/* Change the value of spec NAME to SPEC. If SPEC is empty, then the spec is + removed; If the spec starts with a + then SPEC is added to the end of the + current spec. */ + +static void +set_spec (name, spec) + const char *name; + const char *spec; +{ + struct spec_list *sl; + const char *old_spec; + int name_len = strlen (name); + int i; + + /* If this is the first call, initialize the statically allocated specs. */ + if (!specs) + { + struct spec_list *next = (struct spec_list *) 0; + for (i = ARRAY_SIZE (static_specs) - 1; i >= 0; i--) + { + sl = &static_specs[i]; + sl->next = next; + next = sl; + } + specs = sl; + } + + /* See if the spec already exists. */ + for (sl = specs; sl; sl = sl->next) + if (name_len == sl->name_len && !strcmp (sl->name, name)) + break; + + if (!sl) + { + /* Not found - make it. */ + sl = (struct spec_list *) xmalloc (sizeof (struct spec_list)); + sl->name = xstrdup (name); + sl->name_len = name_len; + sl->ptr_spec = &sl->ptr; + sl->alloc_p = 0; + *(sl->ptr_spec) = ""; + sl->next = specs; + specs = sl; + } + + old_spec = *(sl->ptr_spec); + *(sl->ptr_spec) = ((spec[0] == '+' && ISSPACE ((unsigned char)spec[1])) + ? concat (old_spec, spec + 1, NULL) + : xstrdup (spec)); + +#ifdef DEBUG_SPECS + if (verbose_flag) + notice ("Setting spec %s to '%s'\n\n", name, *(sl->ptr_spec)); +#endif + + /* Free the old spec. */ + if (old_spec && sl->alloc_p) + free ((PTR) old_spec); + + sl->alloc_p = 1; +} + +/* Accumulate a command (program name and args), and run it. */ + +/* Vector of pointers to arguments in the current line of specifications. */ + +static const char **argbuf; + +/* Number of elements allocated in argbuf. */ + +static int argbuf_length; + +/* Number of elements in argbuf currently in use (containing args). */ + +static int argbuf_index; + +/* This is the list of suffixes and codes (%g/%u/%U/%j) and the associated + temp file. If the HOST_BIT_BUCKET is used for %j, no entry is made for + it here. */ + +static struct temp_name { + const char *suffix; /* suffix associated with the code. */ + int length; /* strlen (suffix). */ + int unique; /* Indicates whether %g or %u/%U was used. */ + const char *filename; /* associated filename. */ + int filename_length; /* strlen (filename). */ + struct temp_name *next; +} *temp_names; + +/* Number of commands executed so far. */ + +static int execution_count; + +/* Number of commands that exited with a signal. */ + +static int signal_count; + +/* Name with which this program was invoked. */ + +static const char *programname; + +/* Clear out the vector of arguments (after a command is executed). */ + +static void +clear_args () +{ + argbuf_index = 0; +} + +/* Add one argument to the vector at the end. + This is done when a space is seen or at the end of the line. + If DELETE_ALWAYS is nonzero, the arg is a filename + and the file should be deleted eventually. + If DELETE_FAILURE is nonzero, the arg is a filename + and the file should be deleted if this compilation fails. */ + +static void +store_arg (arg, delete_always, delete_failure) + const char *arg; + int delete_always, delete_failure; +{ + if (argbuf_index + 1 == argbuf_length) + argbuf + = (const char **) xrealloc (argbuf, + (argbuf_length *= 2) * sizeof (const char *)); + + argbuf[argbuf_index++] = arg; + argbuf[argbuf_index] = 0; + + if (delete_always || delete_failure) + record_temp_file (arg, delete_always, delete_failure); +} + +/* Load specs from a file name named FILENAME, replacing occurrences of + various different types of line-endings, \r\n, \n\r and just \r, with + a single \n. */ + +static char * +load_specs (filename) + const char *filename; +{ + int desc; + int readlen; + struct stat statbuf; + char *buffer; + char *buffer_p; + char *specs; + char *specs_p; + + if (verbose_flag) + notice ("Reading specs from %s\n", filename); + + /* Open and stat the file. */ + desc = open (filename, O_RDONLY, 0); + if (desc < 0) + pfatal_with_name (filename); + if (stat (filename, &statbuf) < 0) + pfatal_with_name (filename); + + /* Read contents of file into BUFFER. */ + buffer = xmalloc ((unsigned) statbuf.st_size + 1); + readlen = read (desc, buffer, (unsigned) statbuf.st_size); + if (readlen < 0) + pfatal_with_name (filename); + buffer[readlen] = 0; + close (desc); + + specs = xmalloc (readlen + 1); + specs_p = specs; + for (buffer_p = buffer; buffer_p && *buffer_p; buffer_p++) + { + int skip = 0; + char c = *buffer_p; + if (c == '\r') + { + if (buffer_p > buffer && *(buffer_p - 1) == '\n') /* \n\r */ + skip = 1; + else if (*(buffer_p + 1) == '\n') /* \r\n */ + skip = 1; + else /* \r */ + c = '\n'; + } + if (! skip) + *specs_p++ = c; + } + *specs_p = '\0'; + + free (buffer); + return (specs); +} + +/* Read compilation specs from a file named FILENAME, + replacing the default ones. + + A suffix which starts with `*' is a definition for + one of the machine-specific sub-specs. The "suffix" should be + *asm, *cc1, *cpp, *link, *startfile, etc. + The corresponding spec is stored in asm_spec, etc., + rather than in the `compilers' vector. + + Anything invalid in the file is a fatal error. */ + +static void +read_specs (filename, main_p) + const char *filename; + int main_p; +{ + char *buffer; + char *p; + + buffer = load_specs (filename); + + /* Scan BUFFER for specs, putting them in the vector. */ + p = buffer; + while (1) + { + char *suffix; + char *spec; + char *in, *out, *p1, *p2, *p3; + + /* Advance P in BUFFER to the next nonblank nocomment line. */ + p = skip_whitespace (p); + if (*p == 0) + break; + + /* Is this a special command that starts with '%'? */ + /* Don't allow this for the main specs file, since it would + encourage people to overwrite it. */ + if (*p == '%' && !main_p) + { + p1 = p; + while (*p && *p != '\n') + p++; + + /* Skip '\n'. */ + p++; + + if (!strncmp (p1, "%include", sizeof ("%include") - 1) + && (p1[sizeof "%include" - 1] == ' ' + || p1[sizeof "%include" - 1] == '\t')) + { + char *new_filename; + + p1 += sizeof ("%include"); + while (*p1 == ' ' || *p1 == '\t') + p1++; + + if (*p1++ != '<' || p[-2] != '>') + fatal ("specs %%include syntax malformed after %ld characters", + (long) (p1 - buffer + 1)); + + p[-2] = '\0'; + new_filename = find_a_file (&startfile_prefixes, p1, R_OK); + read_specs (new_filename ? new_filename : p1, FALSE); + continue; + } + else if (!strncmp (p1, "%include_noerr", sizeof "%include_noerr" - 1) + && (p1[sizeof "%include_noerr" - 1] == ' ' + || p1[sizeof "%include_noerr" - 1] == '\t')) + { + char *new_filename; + + p1 += sizeof "%include_noerr"; + while (*p1 == ' ' || *p1 == '\t') + p1++; + + if (*p1++ != '<' || p[-2] != '>') + fatal ("specs %%include syntax malformed after %ld characters", + (long) (p1 - buffer + 1)); + + p[-2] = '\0'; + new_filename = find_a_file (&startfile_prefixes, p1, R_OK); + if (new_filename) + read_specs (new_filename, FALSE); + else if (verbose_flag) + notice ("could not find specs file %s\n", p1); + continue; + } + else if (!strncmp (p1, "%rename", sizeof "%rename" - 1) + && (p1[sizeof "%rename" - 1] == ' ' + || p1[sizeof "%rename" - 1] == '\t')) + { + int name_len; + struct spec_list *sl; + + /* Get original name */ + p1 += sizeof "%rename"; + while (*p1 == ' ' || *p1 == '\t') + p1++; + + if (! ISALPHA ((unsigned char) *p1)) + fatal ("specs %%rename syntax malformed after %ld characters", + (long) (p1 - buffer)); + + p2 = p1; + while (*p2 && !ISSPACE ((unsigned char) *p2)) + p2++; + + if (*p2 != ' ' && *p2 != '\t') + fatal ("specs %%rename syntax malformed after %ld characters", + (long) (p2 - buffer)); + + name_len = p2 - p1; + *p2++ = '\0'; + while (*p2 == ' ' || *p2 == '\t') + p2++; + + if (! ISALPHA ((unsigned char) *p2)) + fatal ("specs %%rename syntax malformed after %ld characters", + (long) (p2 - buffer)); + + /* Get new spec name. */ + p3 = p2; + while (*p3 && !ISSPACE ((unsigned char) *p3)) + p3++; + + if (p3 != p - 1) + fatal ("specs %%rename syntax malformed after %ld characters", + (long) (p3 - buffer)); + *p3 = '\0'; + + for (sl = specs; sl; sl = sl->next) + if (name_len == sl->name_len && !strcmp (sl->name, p1)) + break; + + if (!sl) + fatal ("specs %s spec was not found to be renamed", p1); + + if (strcmp (p1, p2) == 0) + continue; + + if (verbose_flag) + { + notice ("rename spec %s to %s\n", p1, p2); +#ifdef DEBUG_SPECS + notice ("spec is '%s'\n\n", *(sl->ptr_spec)); +#endif + } + + set_spec (p2, *(sl->ptr_spec)); + if (sl->alloc_p) + free ((PTR) *(sl->ptr_spec)); + + *(sl->ptr_spec) = ""; + sl->alloc_p = 0; + continue; + } + else + fatal ("specs unknown %% command after %ld characters", + (long) (p1 - buffer)); + } + + /* Find the colon that should end the suffix. */ + p1 = p; + while (*p1 && *p1 != ':' && *p1 != '\n') + p1++; + + /* The colon shouldn't be missing. */ + if (*p1 != ':') + fatal ("specs file malformed after %ld characters", + (long) (p1 - buffer)); + + /* Skip back over trailing whitespace. */ + p2 = p1; + while (p2 > buffer && (p2[-1] == ' ' || p2[-1] == '\t')) + p2--; + + /* Copy the suffix to a string. */ + suffix = save_string (p, p2 - p); + /* Find the next line. */ + p = skip_whitespace (p1 + 1); + if (p[1] == 0) + fatal ("specs file malformed after %ld characters", + (long) (p - buffer)); + + p1 = p; + /* Find next blank line or end of string. */ + while (*p1 && !(*p1 == '\n' && (p1[1] == '\n' || p1[1] == '\0'))) + p1++; + + /* Specs end at the blank line and do not include the newline. */ + spec = save_string (p, p1 - p); + p = p1; + + /* Delete backslash-newline sequences from the spec. */ + in = spec; + out = spec; + while (*in != 0) + { + if (in[0] == '\\' && in[1] == '\n') + in += 2; + else if (in[0] == '#') + while (*in && *in != '\n') + in++; + + else + *out++ = *in++; + } + *out = 0; + + if (suffix[0] == '*') + { + if (! strcmp (suffix, "*link_command")) + link_command_spec = spec; + else + set_spec (suffix + 1, spec); + } + else + { + /* Add this pair to the vector. */ + compilers + = ((struct compiler *) + xrealloc (compilers, + (n_compilers + 2) * sizeof (struct compiler))); + + compilers[n_compilers].suffix = suffix; + compilers[n_compilers].spec = spec; + n_compilers++; + memset (&compilers[n_compilers], 0, sizeof compilers[n_compilers]); + } + + if (*suffix == 0) + link_command_spec = spec; + } + + if (link_command_spec == 0) + fatal ("spec file has no spec for linking"); +} + +/* Record the names of temporary files we tell compilers to write, + and delete them at the end of the run. */ + +/* This is the common prefix we use to make temp file names. + It is chosen once for each run of this program. + It is substituted into a spec by %g or %j. + Thus, all temp file names contain this prefix. + In practice, all temp file names start with this prefix. + + This prefix comes from the envvar TMPDIR if it is defined; + otherwise, from the P_tmpdir macro if that is defined; + otherwise, in /usr/tmp or /tmp; + or finally the current directory if all else fails. */ + +static const char *temp_filename; + +/* Length of the prefix. */ + +static int temp_filename_length; + +/* Define the list of temporary files to delete. */ + +struct temp_file +{ + const char *name; + struct temp_file *next; +}; + +/* Queue of files to delete on success or failure of compilation. */ +static struct temp_file *always_delete_queue; +/* Queue of files to delete on failure of compilation. */ +static struct temp_file *failure_delete_queue; + +/* Record FILENAME as a file to be deleted automatically. + ALWAYS_DELETE nonzero means delete it if all compilation succeeds; + otherwise delete it in any case. + FAIL_DELETE nonzero means delete it if a compilation step fails; + otherwise delete it in any case. */ + +void +record_temp_file (filename, always_delete, fail_delete) + const char *filename; + int always_delete; + int fail_delete; +{ + char *const name = xstrdup (filename); + + if (always_delete) + { + struct temp_file *temp; + for (temp = always_delete_queue; temp; temp = temp->next) + if (! strcmp (name, temp->name)) + goto already1; + + temp = (struct temp_file *) xmalloc (sizeof (struct temp_file)); + temp->next = always_delete_queue; + temp->name = name; + always_delete_queue = temp; + + already1:; + } + + if (fail_delete) + { + struct temp_file *temp; + for (temp = failure_delete_queue; temp; temp = temp->next) + if (! strcmp (name, temp->name)) + goto already2; + + temp = (struct temp_file *) xmalloc (sizeof (struct temp_file)); + temp->next = failure_delete_queue; + temp->name = name; + failure_delete_queue = temp; + + already2:; + } +} + +/* Delete all the temporary files whose names we previously recorded. */ + +static void +delete_if_ordinary (name) + const char *name; +{ + struct stat st; +#ifdef DEBUG + int i, c; + + printf ("Delete %s? (y or n) ", name); + fflush (stdout); + i = getchar (); + if (i != '\n') + while ((c = getchar ()) != '\n' && c != EOF) + ; + + if (i == 'y' || i == 'Y') +#endif /* DEBUG */ + if (stat (name, &st) >= 0 && S_ISREG (st.st_mode)) + if (unlink (name) < 0) + if (verbose_flag) + perror_with_name (name); +} + +static void +delete_temp_files () +{ + struct temp_file *temp; + + for (temp = always_delete_queue; temp; temp = temp->next) + delete_if_ordinary (temp->name); + always_delete_queue = 0; +} + +/* Delete all the files to be deleted on error. */ + +static void +delete_failure_queue () +{ + struct temp_file *temp; + + for (temp = failure_delete_queue; temp; temp = temp->next) + delete_if_ordinary (temp->name); +} + +static void +clear_failure_queue () +{ + failure_delete_queue = 0; +} + +/* Build a list of search directories from PATHS. + PREFIX is a string to prepend to the list. + If CHECK_DIR_P is non-zero we ensure the directory exists. + This is used mostly by putenv_from_prefixes so we use `collect_obstack'. + It is also used by the --print-search-dirs flag. */ + +static char * +build_search_list (paths, prefix, check_dir_p) + struct path_prefix *paths; + const char *prefix; + int check_dir_p; +{ + int suffix_len = (machine_suffix) ? strlen (machine_suffix) : 0; + int just_suffix_len + = (just_machine_suffix) ? strlen (just_machine_suffix) : 0; + int first_time = TRUE; + struct prefix_list *pprefix; + + obstack_grow (&collect_obstack, prefix, strlen (prefix)); + obstack_1grow (&collect_obstack, '='); + + for (pprefix = paths->plist; pprefix != 0; pprefix = pprefix->next) + { + int len = strlen (pprefix->prefix); + + if (machine_suffix + && (! check_dir_p + || is_directory (pprefix->prefix, machine_suffix, 0))) + { + if (!first_time) + obstack_1grow (&collect_obstack, PATH_SEPARATOR); + + first_time = FALSE; + obstack_grow (&collect_obstack, pprefix->prefix, len); + obstack_grow (&collect_obstack, machine_suffix, suffix_len); + } + + if (just_machine_suffix + && pprefix->require_machine_suffix == 2 + && (! check_dir_p + || is_directory (pprefix->prefix, just_machine_suffix, 0))) + { + if (! first_time) + obstack_1grow (&collect_obstack, PATH_SEPARATOR); + + first_time = FALSE; + obstack_grow (&collect_obstack, pprefix->prefix, len); + obstack_grow (&collect_obstack, just_machine_suffix, + just_suffix_len); + } + + if (! pprefix->require_machine_suffix) + { + if (! first_time) + obstack_1grow (&collect_obstack, PATH_SEPARATOR); + + first_time = FALSE; + obstack_grow (&collect_obstack, pprefix->prefix, len); + } + } + + obstack_1grow (&collect_obstack, '\0'); + return obstack_finish (&collect_obstack); +} + +/* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables + for collect. */ + +static void +putenv_from_prefixes (paths, env_var) + struct path_prefix *paths; + const char *env_var; +{ + putenv (build_search_list (paths, env_var, 1)); +} + +#ifndef VMS + +/* FIXME: the location independence code for VMS is hairier than this, + and hasn't been written. */ + +/* Split a filename into component directories. */ + +static char ** +split_directories (name, ptr_num_dirs) + const char *name; + int *ptr_num_dirs; +{ + int num_dirs = 0; + char **dirs; + const char *p, *q; + int ch; + + /* Count the number of directories. Special case MSDOS disk names as part + of the initial directory. */ + p = name; +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + if (name[1] == ':' && IS_DIR_SEPARATOR (name[2])) + { + p += 3; + num_dirs++; + } +#endif /* HAVE_DOS_BASED_FILE_SYSTEM */ + + while ((ch = *p++) != '\0') + { + if (IS_DIR_SEPARATOR (ch)) + { + num_dirs++; + while (IS_DIR_SEPARATOR (*p)) + p++; + } + } + + dirs = (char **) xmalloc (sizeof (char *) * (num_dirs + 2)); + + /* Now copy the directory parts. */ + num_dirs = 0; + p = name; +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + if (name[1] == ':' && IS_DIR_SEPARATOR (name[2])) + { + dirs[num_dirs++] = save_string (p, 3); + p += 3; + } +#endif /* HAVE_DOS_BASED_FILE_SYSTEM */ + + q = p; + while ((ch = *p++) != '\0') + { + if (IS_DIR_SEPARATOR (ch)) + { + while (IS_DIR_SEPARATOR (*p)) + p++; + + dirs[num_dirs++] = save_string (q, p - q); + q = p; + } + } + + if (p - 1 - q > 0) + dirs[num_dirs++] = save_string (q, p - 1 - q); + + dirs[num_dirs] = NULL; + if (ptr_num_dirs) + *ptr_num_dirs = num_dirs; + + return dirs; +} + +/* Release storage held by split directories. */ + +static void +free_split_directories (dirs) + char **dirs; +{ + int i = 0; + + while (dirs[i] != NULL) + free (dirs[i++]); + + free ((char *) dirs); +} + +/* Given three strings PROGNAME, BIN_PREFIX, PREFIX, return a string that gets + to PREFIX starting with the directory portion of PROGNAME and a relative + pathname of the difference between BIN_PREFIX and PREFIX. + + For example, if BIN_PREFIX is /alpha/beta/gamma/gcc/delta, PREFIX is + /alpha/beta/gamma/omega/, and PROGNAME is /red/green/blue/gcc, then this + function will return /red/green/blue/../omega. + + If no relative prefix can be found, return NULL. */ + +static char * +make_relative_prefix (progname, bin_prefix, prefix) + const char *progname; + const char *bin_prefix; + const char *prefix; +{ + char **prog_dirs, **bin_dirs, **prefix_dirs; + int prog_num, bin_num, prefix_num, std_loc_p; + int i, n, common; + + prog_dirs = split_directories (progname, &prog_num); + bin_dirs = split_directories (bin_prefix, &bin_num); + + /* If there is no full pathname, try to find the program by checking in each + of the directories specified in the PATH environment variable. */ + if (prog_num == 1) + { + char *temp; + + GET_ENV_PATH_LIST (temp, "PATH"); + if (temp) + { + char *startp, *endp, *nstore; + size_t prefixlen = strlen (temp) + 1; + if (prefixlen < 2) + prefixlen = 2; + + nstore = (char *) alloca (prefixlen + strlen (progname) + 1); + + startp = endp = temp; + while (1) + { + if (*endp == PATH_SEPARATOR || *endp == 0) + { + if (endp == startp) + { + nstore[0] = '.'; + nstore[1] = DIR_SEPARATOR; + nstore[2] = '\0'; + } + else + { + strncpy (nstore, startp, endp - startp); + if (! IS_DIR_SEPARATOR (endp[-1])) + { + nstore[endp - startp] = DIR_SEPARATOR; + nstore[endp - startp + 1] = 0; + } + else + nstore[endp - startp] = 0; + } + strcat (nstore, progname); + if (! access (nstore, X_OK) +#ifdef HAVE_HOST_EXECUTABLE_SUFFIX + || ! access (strcat (nstore, HOST_EXECUTABLE_SUFFIX), X_OK) +#endif + ) + { + free_split_directories (prog_dirs); + progname = nstore; + prog_dirs = split_directories (progname, &prog_num); + break; + } + + if (*endp == 0) + break; + endp = startp = endp + 1; + } + else + endp++; + } + } + } + + /* Remove the program name from comparison of directory names. */ + prog_num--; + + /* Determine if the compiler is installed in the standard location, and if + so, we don't need to specify relative directories. Also, if argv[0] + doesn't contain any directory specifiers, there is not much we can do. */ + std_loc_p = 0; + if (prog_num == bin_num) + { + for (i = 0; i < bin_num; i++) + { + if (strcmp (prog_dirs[i], bin_dirs[i]) != 0) + break; + } + + if (prog_num <= 0 || i == bin_num) + { + std_loc_p = 1; + free_split_directories (prog_dirs); + free_split_directories (bin_dirs); + prog_dirs = bin_dirs = (char **) 0; + return NULL; + } + } + + prefix_dirs = split_directories (prefix, &prefix_num); + + /* Find how many directories are in common between bin_prefix & prefix. */ + n = (prefix_num < bin_num) ? prefix_num : bin_num; + for (common = 0; common < n; common++) + { + if (strcmp (bin_dirs[common], prefix_dirs[common]) != 0) + break; + } + + /* If there are no common directories, there can be no relative prefix. */ + if (common == 0) + { + free_split_directories (prog_dirs); + free_split_directories (bin_dirs); + free_split_directories (prefix_dirs); + return NULL; + } + + /* Build up the pathnames in argv[0]. */ + for (i = 0; i < prog_num; i++) + obstack_grow (&obstack, prog_dirs[i], strlen (prog_dirs[i])); + + /* Now build up the ..'s. */ + for (i = common; i < n; i++) + { + obstack_grow (&obstack, DIR_UP, sizeof (DIR_UP) - 1); + obstack_1grow (&obstack, DIR_SEPARATOR); + } + + /* Put in directories to move over to prefix. */ + for (i = common; i < prefix_num; i++) + obstack_grow (&obstack, prefix_dirs[i], strlen (prefix_dirs[i])); + + free_split_directories (prog_dirs); + free_split_directories (bin_dirs); + free_split_directories (prefix_dirs); + + obstack_1grow (&obstack, '\0'); + return obstack_finish (&obstack); +} +#endif /* VMS */ + +/* Check whether NAME can be accessed in MODE. This is like access, + except that it never considers directories to be executable. */ + +static int +access_check (name, mode) + const char *name; + int mode; +{ + if (mode == X_OK) + { + struct stat st; + + if (stat (name, &st) < 0 + || S_ISDIR (st.st_mode)) + return -1; + } + + return access (name, mode); +} + +/* Search for NAME using the prefix list PREFIXES. MODE is passed to + access to check permissions. + Return 0 if not found, otherwise return its name, allocated with malloc. */ + +static char * +find_a_file (pprefix, name, mode) + struct path_prefix *pprefix; + const char *name; + int mode; +{ + char *temp; + const char *const file_suffix = + ((mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : ""); + struct prefix_list *pl; + int len = pprefix->max_len + strlen (name) + strlen (file_suffix) + 1; + +#ifdef DEFAULT_ASSEMBLER + if (! strcmp (name, "as") && access (DEFAULT_ASSEMBLER, mode) == 0) + return xstrdup (DEFAULT_ASSEMBLER); +#endif + +#ifdef DEFAULT_LINKER + if (! strcmp(name, "ld") && access (DEFAULT_LINKER, mode) == 0) + return xstrdup (DEFAULT_LINKER); +#endif + + if (machine_suffix) + len += strlen (machine_suffix); + + temp = xmalloc (len); + + /* Determine the filename to execute (special case for absolute paths). */ + + if (IS_ABSOLUTE_PATHNAME (name)) + { + if (access (name, mode) == 0) + { + strcpy (temp, name); + return temp; + } + } + else + for (pl = pprefix->plist; pl; pl = pl->next) + { + if (machine_suffix) + { + /* Some systems have a suffix for executable files. + So try appending that first. */ + if (file_suffix[0] != 0) + { + strcpy (temp, pl->prefix); + strcat (temp, machine_suffix); + strcat (temp, name); + strcat (temp, file_suffix); + if (access_check (temp, mode) == 0) + { + if (pl->used_flag_ptr != 0) + *pl->used_flag_ptr = 1; + return temp; + } + } + + /* Now try just the name. */ + strcpy (temp, pl->prefix); + strcat (temp, machine_suffix); + strcat (temp, name); + if (access_check (temp, mode) == 0) + { + if (pl->used_flag_ptr != 0) + *pl->used_flag_ptr = 1; + return temp; + } + } + + /* Certain prefixes are tried with just the machine type, + not the version. This is used for finding as, ld, etc. */ + if (just_machine_suffix && pl->require_machine_suffix == 2) + { + /* Some systems have a suffix for executable files. + So try appending that first. */ + if (file_suffix[0] != 0) + { + strcpy (temp, pl->prefix); + strcat (temp, just_machine_suffix); + strcat (temp, name); + strcat (temp, file_suffix); + if (access_check (temp, mode) == 0) + { + if (pl->used_flag_ptr != 0) + *pl->used_flag_ptr = 1; + return temp; + } + } + + strcpy (temp, pl->prefix); + strcat (temp, just_machine_suffix); + strcat (temp, name); + if (access_check (temp, mode) == 0) + { + if (pl->used_flag_ptr != 0) + *pl->used_flag_ptr = 1; + return temp; + } + } + + /* Certain prefixes can't be used without the machine suffix + when the machine or version is explicitly specified. */ + if (! pl->require_machine_suffix) + { + /* Some systems have a suffix for executable files. + So try appending that first. */ + if (file_suffix[0] != 0) + { + strcpy (temp, pl->prefix); + strcat (temp, name); + strcat (temp, file_suffix); + if (access_check (temp, mode) == 0) + { + if (pl->used_flag_ptr != 0) + *pl->used_flag_ptr = 1; + return temp; + } + } + + strcpy (temp, pl->prefix); + strcat (temp, name); + if (access_check (temp, mode) == 0) + { + if (pl->used_flag_ptr != 0) + *pl->used_flag_ptr = 1; + return temp; + } + } + } + + free (temp); + return 0; +} + +/* Ranking of prefixes in the sort list. -B prefixes are put before + all others. */ + +enum path_prefix_priority +{ + PREFIX_PRIORITY_B_OPT, + PREFIX_PRIORITY_LAST +}; + +/* Add an entry for PREFIX in PLIST. The PLIST is kept in assending + order according to PRIORITY. Within each PRIORITY, new entries are + appended. + + If WARN is nonzero, we will warn if no file is found + through this prefix. WARN should point to an int + which will be set to 1 if this entry is used. + + COMPONENT is the value to be passed to update_path. + + REQUIRE_MACHINE_SUFFIX is 1 if this prefix can't be used without + the complete value of machine_suffix. + 2 means try both machine_suffix and just_machine_suffix. */ + +static void +add_prefix (pprefix, prefix, component, priority, require_machine_suffix, warn) + struct path_prefix *pprefix; + const char *prefix; + const char *component; + /* enum prefix_priority */ int priority; + int require_machine_suffix; + int *warn; +{ + struct prefix_list *pl, **prev; + int len; + + for (prev = &pprefix->plist; + (*prev) != NULL && (*prev)->priority <= priority; + prev = &(*prev)->next) + ; + + /* Keep track of the longest prefix */ + + prefix = update_path (prefix, component); + len = strlen (prefix); + if (len > pprefix->max_len) + pprefix->max_len = len; + + pl = (struct prefix_list *) xmalloc (sizeof (struct prefix_list)); + pl->prefix = prefix; + pl->require_machine_suffix = require_machine_suffix; + pl->used_flag_ptr = warn; + pl->priority = priority; + if (warn) + *warn = 0; + + /* Insert after PREV */ + pl->next = (*prev); + (*prev) = pl; +} + +#if defined (__MINGW32__) +static char * +canon_filename (char *fname) +{ + char* p = fname; + + while (*p) + { + if (*p == '/') + *p = '\\'; + p++; + } + return fname; +} +#else +#define canon_filename(f) f +#endif + + +/* Execute the command specified by the arguments on the current line of spec. + When using pipes, this includes several piped-together commands + with `|' between them. + + Return 0 if successful, -1 if failed. */ + +static int +execute () +{ + int i; + int n_commands; /* # of command. */ + char *string; + struct command + { + const char *prog; /* program name. */ + const char **argv; /* vector of args. */ + int pid; /* pid of process for this command. */ + }; + + struct command *commands; /* each command buffer with above info. */ + + /* Count # of piped commands. */ + for (n_commands = 1, i = 0; i < argbuf_index; i++) + if (strcmp (argbuf[i], "|") == 0) + n_commands++; + + /* Get storage for each command. */ + commands = (struct command *) alloca (n_commands * sizeof (struct command)); + + /* Split argbuf into its separate piped processes, + and record info about each one. + Also search for the programs that are to be run. */ + + commands[0].prog = argbuf[0]; /* first command. */ + commands[0].argv = &argbuf[0]; + string = find_a_file (&exec_prefixes, commands[0].prog, X_OK); + + if (string) + commands[0].argv[0] = canon_filename(string); + + for (n_commands = 1, i = 0; i < argbuf_index; i++) + if (strcmp (argbuf[i], "|") == 0) + { /* each command. */ +#if defined (__MSDOS__) || defined (OS2) || defined (VMS) + fatal ("-pipe not supported"); +#endif + argbuf[i] = 0; /* termination of command args. */ + commands[n_commands].prog = argbuf[i + 1]; + commands[n_commands].argv = &argbuf[i + 1]; + string = find_a_file (&exec_prefixes, commands[n_commands].prog, X_OK); + if (string) + commands[n_commands].argv[0] = canon_filename(string); + n_commands++; + } + + argbuf[argbuf_index] = 0; + + /* If -v, print what we are about to do, and maybe query. */ + + if (verbose_flag) + { + /* For help listings, put a blank line between sub-processes. */ + if (print_help_list) + fputc ('\n', stderr); + + /* Print each piped command as a separate line. */ + for (i = 0; i < n_commands; i++) + { + const char *const *j; + + if (verbose_only_flag) + { + for (j = commands[i].argv; *j; j++) + { + const char *p; + fprintf (stderr, " \""); + for (p = *j; *p; ++p) + { + if (*p == '"' || *p == '\\' || *p == '$') + fputc ('\\', stderr); + fputc (*p, stderr); + } + fputc ('"', stderr); + } + } + else + for (j = commands[i].argv; *j; j++) + fprintf (stderr, " %s", *j); + + /* Print a pipe symbol after all but the last command. */ + if (i + 1 != n_commands) + fprintf (stderr, " |"); + fprintf (stderr, "\n"); + } + fflush (stderr); + if (verbose_only_flag != 0) + return 0; +#ifdef DEBUG + notice ("\nGo ahead? (y or n) "); + fflush (stderr); + i = getchar (); + if (i != '\n') + while (getchar () != '\n') + ; + + if (i != 'y' && i != 'Y') + return 0; +#endif /* DEBUG */ + } + + /* Run each piped subprocess. */ + + for (i = 0; i < n_commands; i++) + { + char *errmsg_fmt, *errmsg_arg; + const char *string = commands[i].argv[0]; + + /* For some bizarre reason, the second argument of execvp() is + char *const *, not const char *const *. */ + commands[i].pid = pexecute (string, (char *const *) commands[i].argv, + programname, temp_filename, + &errmsg_fmt, &errmsg_arg, + ((i == 0 ? PEXECUTE_FIRST : 0) + | (i + 1 == n_commands ? PEXECUTE_LAST : 0) + | (string == commands[i].prog + ? PEXECUTE_SEARCH : 0) + | (verbose_flag ? PEXECUTE_VERBOSE : 0))); + + if (commands[i].pid == -1) + pfatal_pexecute (errmsg_fmt, errmsg_arg); + + if (string != commands[i].prog) + free ((PTR) string); + } + + execution_count++; + + /* Wait for all the subprocesses to finish. + We don't care what order they finish in; + we know that N_COMMANDS waits will get them all. + Ignore subprocesses that we don't know about, + since they can be spawned by the process that exec'ed us. */ + + { + int ret_code = 0; +#ifdef HAVE_GETRUSAGE + struct timeval d; + double ut = 0.0, st = 0.0; +#endif + + for (i = 0; i < n_commands;) + { + int j; + int status; + int pid; + + pid = pwait (commands[i].pid, &status, 0); + if (pid < 0) + abort (); + +#ifdef HAVE_GETRUSAGE + if (report_times) + { + /* getrusage returns the total resource usage of all children + up to now. Copy the previous values into prus, get the + current statistics, then take the difference. */ + + prus = rus; + getrusage (RUSAGE_CHILDREN, &rus); + d.tv_sec = rus.ru_utime.tv_sec - prus.ru_utime.tv_sec; + d.tv_usec = rus.ru_utime.tv_usec - prus.ru_utime.tv_usec; + ut = (double) d.tv_sec + (double) d.tv_usec / 1.0e6; + + d.tv_sec = rus.ru_stime.tv_sec - prus.ru_stime.tv_sec; + d.tv_usec = rus.ru_stime.tv_usec - prus.ru_stime.tv_usec; + st = (double) d.tv_sec + (double) d.tv_usec / 1.0e6; + } +#endif + + for (j = 0; j < n_commands; j++) + if (commands[j].pid == pid) + { + i++; + if (WIFSIGNALED (status)) + { +#ifdef SIGPIPE + /* SIGPIPE is a special case. It happens in -pipe mode + when the compiler dies before the preprocessor is + done, or the assembler dies before the compiler is + done. There's generally been an error already, and + this is just fallout. So don't generate another error + unless we would otherwise have succeeded. */ + if (WTERMSIG (status) == SIGPIPE + && (signal_count || greatest_status >= MIN_FATAL_STATUS)) + ; + else +#endif + fatal ("\ +Internal error: %s (program %s)\n\ +Please submit a full bug report.\n\ +See %s for instructions.", + strsignal (WTERMSIG (status)), commands[j].prog, + GCCBUGURL); + signal_count++; + ret_code = -1; + } + else if (WIFEXITED (status) + && WEXITSTATUS (status) >= MIN_FATAL_STATUS) + { + if (WEXITSTATUS (status) > greatest_status) + greatest_status = WEXITSTATUS (status); + ret_code = -1; + } +#ifdef HAVE_GETRUSAGE + if (report_times && ut + st != 0) + notice ("# %s %.2f %.2f\n", commands[j].prog, ut, st); +#endif + break; + } + } + return ret_code; + } +} + +/* Find all the switches given to us + and make a vector describing them. + The elements of the vector are strings, one per switch given. + If a switch uses following arguments, then the `part1' field + is the switch itself and the `args' field + is a null-terminated vector containing the following arguments. + The `live_cond' field is: + 0 when initialized + 1 if the switch is true in a conditional spec, + -1 if false (overridden by a later switch) + -2 if this switch should be ignored (used in %{ 2 + && name[len - 2] == '.' + && name[len - 1] == 'o') + { + obstack_grow (&obstack, name, len - 2); + obstack_grow0 (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX)); + name = obstack_finish (&obstack); + } +#endif + +#if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) + /* If there is no filetype, make it the executable suffix (which includes + the "."). But don't get confused if we have just "-o". */ + if (! do_exe || TARGET_EXECUTABLE_SUFFIX[0] == 0 || (len == 2 && name[0] == '-')) + return name; + + for (i = len - 1; i >= 0; i--) + if (IS_DIR_SEPARATOR (name[i])) + break; + + for (i++; i < len; i++) + if (name[i] == '.') + return name; + + obstack_grow (&obstack, name, len); + obstack_grow0 (&obstack, TARGET_EXECUTABLE_SUFFIX, + strlen (TARGET_EXECUTABLE_SUFFIX)); + name = obstack_finish (&obstack); +#endif + + return name; +} +#endif + +/* Display the command line switches accepted by gcc. */ +static void +display_help () +{ + printf (_("Usage: %s [options] file...\n"), programname); + fputs (_("Options:\n"), stdout); + + fputs (_(" -pass-exit-codes Exit with highest error code from a phase\n"), stdout); + fputs (_(" --help Display this information\n"), stdout); + fputs (_(" --target-help Display target specific command line options\n"), stdout); + if (! verbose_flag) + fputs (_(" (Use '-v --help' to display command line options of sub-processes)\n"), stdout); + fputs (_(" -dumpspecs Display all of the built in spec strings\n"), stdout); + fputs (_(" -dumpversion Display the version of the compiler\n"), stdout); + fputs (_(" -dumpmachine Display the compiler's target processor\n"), stdout); + fputs (_(" -print-search-dirs Display the directories in the compiler's search path\n"), stdout); + fputs (_(" -print-libgcc-file-name Display the name of the compiler's companion library\n"), stdout); + fputs (_(" -print-file-name= Display the full path to library \n"), stdout); + fputs (_(" -print-prog-name= Display the full path to compiler component \n"), stdout); + fputs (_(" -print-multi-directory Display the root directory for versions of libgcc\n"), stdout); + fputs (_("\ + -print-multi-lib Display the mapping between command line options and\n\ + multiple library search directories\n"), stdout); + fputs (_(" -Wa, Pass comma-separated on to the assembler\n"), stdout); + fputs (_(" -Wp, Pass comma-separated on to the preprocessor\n"), stdout); + fputs (_(" -Wl, Pass comma-separated on to the linker\n"), stdout); + fputs (_(" -Xlinker Pass on to the linker\n"), stdout); + fputs (_(" -save-temps Do not delete intermediate files\n"), stdout); + fputs (_(" -pipe Use pipes rather than intermediate files\n"), stdout); + fputs (_(" -time Time the execution of each subprocess\n"), stdout); + fputs (_(" -specs= Override built-in specs with the contents of \n"), stdout); + fputs (_(" -std= Assume that the input sources are for \n"), stdout); + fputs (_(" -B Add to the compiler's search paths\n"), stdout); + fputs (_(" -b Run gcc for target , if installed\n"), stdout); + fputs (_(" -V Run gcc version number , if installed\n"), stdout); + fputs (_(" -v Display the programs invoked by the compiler\n"), stdout); + fputs (_(" -### Like -v but options quoted and commands not executed\n"), stdout); + fputs (_(" -E Preprocess only; do not compile, assemble or link\n"), stdout); + fputs (_(" -S Compile only; do not assemble or link\n"), stdout); + fputs (_(" -c Compile and assemble, but do not link\n"), stdout); + fputs (_(" -o Place the output into \n"), stdout); + fputs (_("\ + -x Specify the language of the following input files\n\ + Permissable languages include: c c++ assembler none\n\ + 'none' means revert to the default behavior of\n\ + guessing the language based on the file's extension\n\ +"), stdout); + + printf (_("\ +\nOptions starting with -g, -f, -m, -O, -W, or --param are automatically\n\ + passed on to the various sub-processes invoked by %s. In order to pass\n\ + other options on to these processes the -W options must be used.\n\ +"), programname); + + /* The rest of the options are displayed by invocations of the various + sub-processes. */ +} + +static void +add_preprocessor_option (option, len) + const char *option; + int len; +{ + n_preprocessor_options++; + + if (! preprocessor_options) + preprocessor_options + = (char **) xmalloc (n_preprocessor_options * sizeof (char *)); + else + preprocessor_options + = (char **) xrealloc (preprocessor_options, + n_preprocessor_options * sizeof (char *)); + + preprocessor_options [n_preprocessor_options - 1] = + save_string (option, len); +} + +static void +add_assembler_option (option, len) + const char *option; + int len; +{ + n_assembler_options++; + + if (! assembler_options) + assembler_options + = (char **) xmalloc (n_assembler_options * sizeof (char *)); + else + assembler_options + = (char **) xrealloc (assembler_options, + n_assembler_options * sizeof (char *)); + + assembler_options [n_assembler_options - 1] = save_string (option, len); +} + +static void +add_linker_option (option, len) + const char *option; + int len; +{ + n_linker_options++; + + if (! linker_options) + linker_options + = (char **) xmalloc (n_linker_options * sizeof (char *)); + else + linker_options + = (char **) xrealloc (linker_options, + n_linker_options * sizeof (char *)); + + linker_options [n_linker_options - 1] = save_string (option, len); +} + +/* Create the vector `switches' and its contents. + Store its length in `n_switches'. */ + +static void +process_command (argc, argv) + int argc; + const char *const *argv; +{ + int i; + const char *temp; + char *temp1; + const char *spec_lang = 0; + int last_language_n_infiles; + int have_c = 0; + int have_o = 0; + int lang_n_infiles = 0; +#ifdef MODIFY_TARGET_NAME + int is_modify_target_name; + int j; +#endif + + GET_ENV_PATH_LIST (gcc_exec_prefix, "GCC_EXEC_PREFIX"); + + n_switches = 0; + n_infiles = 0; + added_libraries = 0; + + /* Figure compiler version from version string. */ + + compiler_version = temp1 = xstrdup (version_string); + + for (; *temp1; ++temp1) + { + if (*temp1 == ' ') + { + *temp1 = '\0'; + break; + } + } + + /* Set up the default search paths. If there is no GCC_EXEC_PREFIX, + see if we can create it from the pathname specified in argv[0]. */ + +#ifndef VMS + /* FIXME: make_relative_prefix doesn't yet work for VMS. */ + if (!gcc_exec_prefix) + { + gcc_exec_prefix = make_relative_prefix (argv[0], standard_bindir_prefix, + standard_exec_prefix); + if (gcc_exec_prefix) + putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL)); + } +#endif + + if (gcc_exec_prefix) + { + int len = strlen (gcc_exec_prefix); + + if (len > (int) sizeof ("/lib/gcc-lib/") - 1 + && (IS_DIR_SEPARATOR (gcc_exec_prefix[len-1]))) + { + temp = gcc_exec_prefix + len - sizeof ("/lib/gcc-lib/") + 1; + if (IS_DIR_SEPARATOR (*temp) + && strncmp (temp + 1, "lib", 3) == 0 + && IS_DIR_SEPARATOR (temp[4]) + && strncmp (temp + 5, "gcc-lib", 7) == 0) + len -= sizeof ("/lib/gcc-lib/") - 1; + } + + set_std_prefix (gcc_exec_prefix, len); + add_prefix (&exec_prefixes, gcc_exec_prefix, "GCC", + PREFIX_PRIORITY_LAST, 0, NULL); + add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC", + PREFIX_PRIORITY_LAST, 0, NULL); + } + + /* COMPILER_PATH and LIBRARY_PATH have values + that are lists of directory names with colons. */ + + GET_ENV_PATH_LIST (temp, "COMPILER_PATH"); + if (temp) + { + const char *startp, *endp; + char *nstore = (char *) alloca (strlen (temp) + 3); + + startp = endp = temp; + while (1) + { + if (*endp == PATH_SEPARATOR || *endp == 0) + { + strncpy (nstore, startp, endp - startp); + if (endp == startp) + strcpy (nstore, concat (".", dir_separator_str, NULL)); + else if (!IS_DIR_SEPARATOR (endp[-1])) + { + nstore[endp - startp] = DIR_SEPARATOR; + nstore[endp - startp + 1] = 0; + } + else + nstore[endp - startp] = 0; + add_prefix (&exec_prefixes, nstore, 0, + PREFIX_PRIORITY_LAST, 0, NULL); + add_prefix (&include_prefixes, + concat (nstore, "include", NULL), + 0, PREFIX_PRIORITY_LAST, 0, NULL); + if (*endp == 0) + break; + endp = startp = endp + 1; + } + else + endp++; + } + } + + GET_ENV_PATH_LIST (temp, LIBRARY_PATH_ENV); + if (temp && *cross_compile == '0') + { + const char *startp, *endp; + char *nstore = (char *) alloca (strlen (temp) + 3); + + startp = endp = temp; + while (1) + { + if (*endp == PATH_SEPARATOR || *endp == 0) + { + strncpy (nstore, startp, endp - startp); + if (endp == startp) + strcpy (nstore, concat (".", dir_separator_str, NULL)); + else if (!IS_DIR_SEPARATOR (endp[-1])) + { + nstore[endp - startp] = DIR_SEPARATOR; + nstore[endp - startp + 1] = 0; + } + else + nstore[endp - startp] = 0; + add_prefix (&startfile_prefixes, nstore, NULL, + PREFIX_PRIORITY_LAST, 0, NULL); + if (*endp == 0) + break; + endp = startp = endp + 1; + } + else + endp++; + } + } + + /* Use LPATH like LIBRARY_PATH (for the CMU build program). */ + GET_ENV_PATH_LIST (temp, "LPATH"); + if (temp && *cross_compile == '0') + { + const char *startp, *endp; + char *nstore = (char *) alloca (strlen (temp) + 3); + + startp = endp = temp; + while (1) + { + if (*endp == PATH_SEPARATOR || *endp == 0) + { + strncpy (nstore, startp, endp - startp); + if (endp == startp) + strcpy (nstore, concat (".", dir_separator_str, NULL)); + else if (!IS_DIR_SEPARATOR (endp[-1])) + { + nstore[endp - startp] = DIR_SEPARATOR; + nstore[endp - startp + 1] = 0; + } + else + nstore[endp - startp] = 0; + add_prefix (&startfile_prefixes, nstore, NULL, + PREFIX_PRIORITY_LAST, 0, NULL); + if (*endp == 0) + break; + endp = startp = endp + 1; + } + else + endp++; + } + } + + /* Convert new-style -- options to old-style. */ + translate_options (&argc, &argv); + + /* Do language-specific adjustment/addition of flags. */ + lang_specific_driver (&argc, &argv, &added_libraries); + + /* Scan argv twice. Here, the first time, just count how many switches + there will be in their vector, and how many input files in theirs. + Also parse any switches that determine the configuration name, such as -b. + Here we also parse the switches that cc itself uses (e.g. -v). */ + + for (i = 1; i < argc; i++) + { + if (! strcmp (argv[i], "-dumpspecs")) + { + struct spec_list *sl; + init_spec (); + for (sl = specs; sl; sl = sl->next) + printf ("*%s:\n%s\n\n", sl->name, *(sl->ptr_spec)); + if (link_command_spec) + printf ("*link_command:\n%s\n\n", link_command_spec); + exit (0); + } + else if (! strcmp (argv[i], "-dumpversion")) + { + printf ("%s\n", spec_version); + exit (0); + } + else if (! strcmp (argv[i], "-dumpmachine")) + { + printf ("%s\n", spec_machine); + exit (0); + } + else if (strcmp (argv[i], "-fversion") == 0) + { + /* translate_options () has turned --version into -fversion. */ + printf (_("%s (GCC) %s\n"), programname, version_string); + fputs (_("Copyright (C) 2002 Free Software Foundation, Inc.\n"), + stdout); + fputs (_("This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"), + stdout); + exit (0); + } + else if (strcmp (argv[i], "-fhelp") == 0) + { + /* translate_options () has turned --help into -fhelp. */ + print_help_list = 1; + + /* We will be passing a dummy file on to the sub-processes. */ + n_infiles++; + n_switches++; + + /* CPP driver cannot obtain switch from cc1_options. */ + if (is_cpp_driver) + add_preprocessor_option ("--help", 6); + add_assembler_option ("--help", 6); + add_linker_option ("--help", 6); + } + else if (strcmp (argv[i], "-ftarget-help") == 0) + { + /* translate_options() has turned --target-help into -ftarget-help. */ + target_help_flag = 1; + + /* We will be passing a dummy file on to the sub-processes. */ + n_infiles++; + n_switches++; + + /* CPP driver cannot obtain switch from cc1_options. */ + if (is_cpp_driver) + add_preprocessor_option ("--target-help", 13); + add_assembler_option ("--target-help", 13); + add_linker_option ("--target-help", 13); + } + else if (! strcmp (argv[i], "-pass-exit-codes")) + { + pass_exit_codes = 1; + n_switches++; + } + else if (! strcmp (argv[i], "-print-search-dirs")) + print_search_dirs = 1; + else if (! strcmp (argv[i], "-print-libgcc-file-name")) + print_file_name = "libgcc.a"; + else if (! strncmp (argv[i], "-print-file-name=", 17)) + print_file_name = argv[i] + 17; + else if (! strncmp (argv[i], "-print-prog-name=", 17)) + print_prog_name = argv[i] + 17; + else if (! strcmp (argv[i], "-print-multi-lib")) + print_multi_lib = 1; + else if (! strcmp (argv[i], "-print-multi-directory")) + print_multi_directory = 1; + else if (! strncmp (argv[i], "-Wa,", 4)) + { + int prev, j; + /* Pass the rest of this option to the assembler. */ + + /* Split the argument at commas. */ + prev = 4; + for (j = 4; argv[i][j]; j++) + if (argv[i][j] == ',') + { + add_assembler_option (argv[i] + prev, j - prev); + prev = j + 1; + } + + /* Record the part after the last comma. */ + add_assembler_option (argv[i] + prev, j - prev); + } + else if (! strncmp (argv[i], "-Wp,", 4)) + { + int prev, j; + /* Pass the rest of this option to the preprocessor. */ + + /* Split the argument at commas. */ + prev = 4; + for (j = 4; argv[i][j]; j++) + if (argv[i][j] == ',') + { + add_preprocessor_option (argv[i] + prev, j - prev); + prev = j + 1; + } + + /* Record the part after the last comma. */ + add_preprocessor_option (argv[i] + prev, j - prev); + } + else if (argv[i][0] == '+' && argv[i][1] == 'e') + /* The +e options to the C++ front-end. */ + n_switches++; + else if (strncmp (argv[i], "-Wl,", 4) == 0) + { + int j; + /* Split the argument at commas. */ + for (j = 3; argv[i][j]; j++) + n_infiles += (argv[i][j] == ','); + } + else if (strcmp (argv[i], "-Xlinker") == 0) + { + if (i + 1 == argc) + fatal ("argument to `-Xlinker' is missing"); + + n_infiles++; + i++; + } + else if (strcmp (argv[i], "-l") == 0) + { + if (i + 1 == argc) + fatal ("argument to `-l' is missing"); + + n_infiles++; + i++; + } + else if (strncmp (argv[i], "-l", 2) == 0) + n_infiles++; + else if (strcmp (argv[i], "-save-temps") == 0) + { + save_temps_flag = 1; + n_switches++; + } + else if (strcmp (argv[i], "-specs") == 0) + { + struct user_specs *user = (struct user_specs *) + xmalloc (sizeof (struct user_specs)); + if (++i >= argc) + fatal ("argument to `-specs' is missing"); + + user->next = (struct user_specs *) 0; + user->filename = argv[i]; + if (user_specs_tail) + user_specs_tail->next = user; + else + user_specs_head = user; + user_specs_tail = user; + } + else if (strncmp (argv[i], "-specs=", 7) == 0) + { + struct user_specs *user = (struct user_specs *) + xmalloc (sizeof (struct user_specs)); + if (strlen (argv[i]) == 7) + fatal ("argument to `-specs=' is missing"); + + user->next = (struct user_specs *) 0; + user->filename = argv[i] + 7; + if (user_specs_tail) + user_specs_tail->next = user; + else + user_specs_head = user; + user_specs_tail = user; + } + else if (strcmp (argv[i], "-time") == 0) + report_times = 1; + else if (strcmp (argv[i], "-###") == 0) + { + /* This is similar to -v except that there is no execution + of the commands and the echoed arguments are quoted. It + is intended for use in shell scripts to capture the + driver-generated command line. */ + verbose_only_flag++; + verbose_flag++; + } + else if (argv[i][0] == '-' && argv[i][1] != 0) + { + const char *p = &argv[i][1]; + int c = *p; + + switch (c) + { + case 'b': + n_switches++; + if (p[1] == 0 && i + 1 == argc) + fatal ("argument to `-b' is missing"); + if (p[1] == 0) + spec_machine = argv[++i]; + else + spec_machine = p + 1; + + warn_std_ptr = &warn_std; + break; + + case 'B': + { + const char *value; + int len; + + if (p[1] == 0 && i + 1 == argc) + fatal ("argument to `-B' is missing"); + if (p[1] == 0) + value = argv[++i]; + else + value = p + 1; + + len = strlen (value); + + /* Catch the case where the user has forgotten to append a + directory separator to the path. Note, they may be using + -B to add an executable name prefix, eg "i386-elf-", in + order to distinguish between multiple installations of + GCC in the same directory. Hence we must check to see + if appending a directory separator actually makes a + valid directory name. */ + if (! IS_DIR_SEPARATOR (value [len - 1]) + && is_directory (value, "", 0)) + { + char *tmp = xmalloc (len + 2); + strcpy (tmp, value); + tmp[len] = DIR_SEPARATOR; + tmp[++ len] = 0; + value = tmp; + } + + /* As a kludge, if the arg is "[foo/]stageN/", just + add "[foo/]include" to the include prefix. */ + if ((len == 7 + || (len > 7 + && (IS_DIR_SEPARATOR (value[len - 8])))) + && strncmp (value + len - 7, "stage", 5) == 0 + && ISDIGIT (value[len - 2]) + && (IS_DIR_SEPARATOR (value[len - 1]))) + { + if (len == 7) + add_prefix (&include_prefixes, "include", NULL, + PREFIX_PRIORITY_B_OPT, 0, NULL); + else + { + char * string = xmalloc (len + 1); + + strncpy (string, value, len - 7); + strcpy (string + len - 7, "include"); + add_prefix (&include_prefixes, string, NULL, + PREFIX_PRIORITY_B_OPT, 0, NULL); + } + } + + add_prefix (&exec_prefixes, value, NULL, + PREFIX_PRIORITY_B_OPT, 0, &warn_B); + add_prefix (&startfile_prefixes, value, NULL, + PREFIX_PRIORITY_B_OPT, 0, &warn_B); + add_prefix (&include_prefixes, concat (value, "include", NULL), + NULL, PREFIX_PRIORITY_B_OPT, 0, NULL); + n_switches++; + } + break; + + case 'v': /* Print our subcommands and print versions. */ + n_switches++; + /* If they do anything other than exactly `-v', don't set + verbose_flag; rather, continue on to give the error. */ + if (p[1] != 0) + break; + verbose_flag++; + break; + + case 'V': + n_switches++; + if (p[1] == 0 && i + 1 == argc) + fatal ("argument to `-V' is missing"); + if (p[1] == 0) + spec_version = argv[++i]; + else + spec_version = p + 1; + compiler_version = spec_version; + warn_std_ptr = &warn_std; + + /* Validate the version number. Use the same checks + done when inserting it into a spec. + + The format of the version string is + ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)? */ + { + const char *v = compiler_version; + + /* Ignore leading non-digits. i.e. "foo-" in "foo-2.7.2". */ + while (! ISDIGIT (*v)) + v++; + + if (v > compiler_version && v[-1] != '-') + fatal ("invalid version number format"); + + /* Set V after the first period. */ + while (ISDIGIT (*v)) + v++; + + if (*v != '.') + fatal ("invalid version number format"); + + v++; + while (ISDIGIT (*v)) + v++; + + if (*v != 0 && *v != ' ' && *v != '.' && *v != '-') + fatal ("invalid version number format"); + } + break; + + case 'S': + case 'c': + if (p[1] == 0) + { + have_c = 1; + n_switches++; + break; + } + goto normal_switch; + + case 'o': + have_o = 1; +#if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) + if (! have_c) + { + int skip; + + /* Forward scan, just in case -S or -c is specified + after -o. */ + int j = i + 1; + if (p[1] == 0) + ++j; + while (j < argc) + { + if (argv[j][0] == '-') + { + if (SWITCH_CURTAILS_COMPILATION (argv[j][1]) + && argv[j][2] == 0) + { + have_c = 1; + break; + } + else if ((skip = SWITCH_TAKES_ARG (argv[j][1]))) + j += skip - (argv[j][2] != 0); + else if ((skip = WORD_SWITCH_TAKES_ARG (argv[j] + 1))) + j += skip; + } + j++; + } + } +#endif +#if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) || defined(HAVE_TARGET_OBJECT_SUFFIX) + if (p[1] == 0) + argv[i + 1] = convert_filename (argv[i + 1], ! have_c, 0); + else + argv[i] = convert_filename (argv[i], ! have_c, 0); +#endif + goto normal_switch; + + default: + normal_switch: + +#ifdef MODIFY_TARGET_NAME + is_modify_target_name = 0; + + for (j = 0; + j < sizeof modify_target / sizeof modify_target[0]; j++) + if (! strcmp (argv[i], modify_target[j].sw)) + { + char *new_name + = (char *) xmalloc (strlen (modify_target[j].str) + + strlen (spec_machine)); + const char *p, *r; + char *q; + int made_addition = 0; + + is_modify_target_name = 1; + for (p = spec_machine, q = new_name; *p != 0; ) + { + if (modify_target[j].add_del == DELETE + && (! strncmp (q, modify_target[j].str, + strlen (modify_target[j].str)))) + p += strlen (modify_target[j].str); + else if (modify_target[j].add_del == ADD + && ! made_addition && *p == '-') + { + for (r = modify_target[j].str; *r != 0; ) + *q++ = *r++; + made_addition = 1; + } + + *q++ = *p++; + } + + spec_machine = new_name; + } + + if (is_modify_target_name) + break; +#endif + + n_switches++; + + if (SWITCH_TAKES_ARG (c) > (p[1] != 0)) + i += SWITCH_TAKES_ARG (c) - (p[1] != 0); + else if (WORD_SWITCH_TAKES_ARG (p)) + i += WORD_SWITCH_TAKES_ARG (p); + } + } + else + { + n_infiles++; + lang_n_infiles++; + } + } + + if (have_c && have_o && lang_n_infiles > 1) + fatal ("cannot specify -o with -c or -S and multiple compilations"); + + /* Set up the search paths before we go looking for config files. */ + + /* These come before the md prefixes so that we will find gcc's subcommands + (such as cpp) rather than those of the host system. */ + /* Use 2 as fourth arg meaning try just the machine as a suffix, + as well as trying the machine and the version. */ +#ifndef OS2 + add_prefix (&exec_prefixes, standard_exec_prefix, "GCC", + PREFIX_PRIORITY_LAST, 1, warn_std_ptr); + add_prefix (&exec_prefixes, standard_exec_prefix, "BINUTILS", + PREFIX_PRIORITY_LAST, 2, warn_std_ptr); + add_prefix (&exec_prefixes, standard_exec_prefix_1, "BINUTILS", + PREFIX_PRIORITY_LAST, 2, warn_std_ptr); +#endif + + add_prefix (&startfile_prefixes, standard_exec_prefix, "BINUTILS", + PREFIX_PRIORITY_LAST, 1, warn_std_ptr); + add_prefix (&startfile_prefixes, standard_exec_prefix_1, "BINUTILS", + PREFIX_PRIORITY_LAST, 1, warn_std_ptr); + + tooldir_prefix = concat (tooldir_base_prefix, spec_machine, + dir_separator_str, NULL); + + /* If tooldir is relative, base it on exec_prefixes. A relative + tooldir lets us move the installed tree as a unit. + + If GCC_EXEC_PREFIX is defined, then we want to add two relative + directories, so that we can search both the user specified directory + and the standard place. */ + + if (!IS_ABSOLUTE_PATHNAME (tooldir_prefix)) + { + if (gcc_exec_prefix) + { + char *gcc_exec_tooldir_prefix + = concat (gcc_exec_prefix, spec_machine, dir_separator_str, + spec_version, dir_separator_str, tooldir_prefix, NULL); + + add_prefix (&exec_prefixes, + concat (gcc_exec_tooldir_prefix, "bin", + dir_separator_str, NULL), + NULL, PREFIX_PRIORITY_LAST, 0, NULL); + add_prefix (&startfile_prefixes, + concat (gcc_exec_tooldir_prefix, "lib", + dir_separator_str, NULL), + NULL, PREFIX_PRIORITY_LAST, 0, NULL); + } + + tooldir_prefix = concat (standard_exec_prefix, spec_machine, + dir_separator_str, spec_version, + dir_separator_str, tooldir_prefix, NULL); + } + + add_prefix (&exec_prefixes, + concat (tooldir_prefix, "bin", dir_separator_str, NULL), + "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); + add_prefix (&startfile_prefixes, + concat (tooldir_prefix, "lib", dir_separator_str, NULL), + "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); + + /* More prefixes are enabled in main, after we read the specs file + and determine whether this is cross-compilation or not. */ + + /* Then create the space for the vectors and scan again. */ + + switches = ((struct switchstr *) + xmalloc ((n_switches + 1) * sizeof (struct switchstr))); + infiles = (struct infile *) xmalloc ((n_infiles + 1) * sizeof (struct infile)); + n_switches = 0; + n_infiles = 0; + last_language_n_infiles = -1; + + /* This, time, copy the text of each switch and store a pointer + to the copy in the vector of switches. + Store all the infiles in their vector. */ + + for (i = 1; i < argc; i++) + { + /* Just skip the switches that were handled by the preceding loop. */ +#ifdef MODIFY_TARGET_NAME + is_modify_target_name = 0; + + for (j = 0; j < sizeof modify_target / sizeof modify_target[0]; j++) + if (! strcmp (argv[i], modify_target[j].sw)) + is_modify_target_name = 1; + + if (is_modify_target_name) + ; + else +#endif + if (! strncmp (argv[i], "-Wa,", 4)) + ; + else if (! strncmp (argv[i], "-Wp,", 4)) + ; + else if (! strcmp (argv[i], "-pass-exit-codes")) + ; + else if (! strcmp (argv[i], "-print-search-dirs")) + ; + else if (! strcmp (argv[i], "-print-libgcc-file-name")) + ; + else if (! strncmp (argv[i], "-print-file-name=", 17)) + ; + else if (! strncmp (argv[i], "-print-prog-name=", 17)) + ; + else if (! strcmp (argv[i], "-print-multi-lib")) + ; + else if (! strcmp (argv[i], "-print-multi-directory")) + ; + else if (! strcmp (argv[i], "-ftarget-help")) + ; + else if (! strcmp (argv[i], "-fhelp")) + ; + else if (argv[i][0] == '+' && argv[i][1] == 'e') + { + /* Compensate for the +e options to the C++ front-end; + they're there simply for cfront call-compatibility. We do + some magic in default_compilers to pass them down properly. + Note we deliberately start at the `+' here, to avoid passing + -e0 or -e1 down into the linker. */ + switches[n_switches].part1 = &argv[i][0]; + switches[n_switches].args = 0; + switches[n_switches].live_cond = SWITCH_OK; + switches[n_switches].validated = 0; + n_switches++; + } + else if (strncmp (argv[i], "-Wl,", 4) == 0) + { + int prev, j; + /* Split the argument at commas. */ + prev = 4; + for (j = 4; argv[i][j]; j++) + if (argv[i][j] == ',') + { + infiles[n_infiles].language = "*"; + infiles[n_infiles++].name + = save_string (argv[i] + prev, j - prev); + prev = j + 1; + } + /* Record the part after the last comma. */ + infiles[n_infiles].language = "*"; + infiles[n_infiles++].name = argv[i] + prev; + } + else if (strcmp (argv[i], "-Xlinker") == 0) + { + infiles[n_infiles].language = "*"; + infiles[n_infiles++].name = argv[++i]; + } + else if (strcmp (argv[i], "-l") == 0) + { /* POSIX allows separation of -l and the lib arg; + canonicalize by concatenating -l with its arg */ + infiles[n_infiles].language = "*"; + infiles[n_infiles++].name = concat ("-l", argv[++i], NULL); + } + else if (strncmp (argv[i], "-l", 2) == 0) + { + infiles[n_infiles].language = "*"; + infiles[n_infiles++].name = argv[i]; + } + else if (strcmp (argv[i], "-specs") == 0) + i++; + else if (strncmp (argv[i], "-specs=", 7) == 0) + ; + else if (strcmp (argv[i], "-time") == 0) + ; + else if ((save_temps_flag || report_times) + && strcmp (argv[i], "-pipe") == 0) + { + /* -save-temps overrides -pipe, so that temp files are produced */ + if (save_temps_flag) + error ("warning: -pipe ignored because -save-temps specified"); + /* -time overrides -pipe because we can't get correct stats when + multiple children are running at once. */ + else if (report_times) + error ("warning: -pipe ignored because -time specified"); + } + else if (strcmp (argv[i], "-###") == 0) + ; + else if (argv[i][0] == '-' && argv[i][1] != 0) + { + const char *p = &argv[i][1]; + int c = *p; + + if (c == 'x') + { + if (p[1] == 0 && i + 1 == argc) + fatal ("argument to `-x' is missing"); + if (p[1] == 0) + spec_lang = argv[++i]; + else + spec_lang = p + 1; + if (! strcmp (spec_lang, "none")) + /* Suppress the warning if -xnone comes after the last input + file, because alternate command interfaces like g++ might + find it useful to place -xnone after each input file. */ + spec_lang = 0; + else + last_language_n_infiles = n_infiles; + continue; + } + switches[n_switches].part1 = p; + /* Deal with option arguments in separate argv elements. */ + if ((SWITCH_TAKES_ARG (c) > (p[1] != 0)) + || WORD_SWITCH_TAKES_ARG (p)) + { + int j = 0; + int n_args = WORD_SWITCH_TAKES_ARG (p); + + if (n_args == 0) + { + /* Count only the option arguments in separate argv elements. */ + n_args = SWITCH_TAKES_ARG (c) - (p[1] != 0); + } + if (i + n_args >= argc) + fatal ("argument to `-%s' is missing", p); + switches[n_switches].args + = (const char **) xmalloc ((n_args + 1) * sizeof(const char *)); + while (j < n_args) + switches[n_switches].args[j++] = argv[++i]; + /* Null-terminate the vector. */ + switches[n_switches].args[j] = 0; + } + else if (strchr (switches_need_spaces, c)) + { + /* On some systems, ld cannot handle some options without + a space. So split the option from its argument. */ + char *part1 = (char *) xmalloc (2); + part1[0] = c; + part1[1] = '\0'; + + switches[n_switches].part1 = part1; + switches[n_switches].args + = (const char **) xmalloc (2 * sizeof (const char *)); + switches[n_switches].args[0] = xstrdup (p+1); + switches[n_switches].args[1] = 0; + } + else + switches[n_switches].args = 0; + + switches[n_switches].live_cond = SWITCH_OK; + switches[n_switches].validated = 0; + switches[n_switches].ordering = 0; + /* These are always valid, since gcc.c itself understands it. */ + if (!strcmp (p, "save-temps") + || !strcmp (p, "static-libgcc") + || !strcmp (p, "shared-libgcc")) + switches[n_switches].validated = 1; + else + { + char ch = switches[n_switches].part1[0]; + if (ch == 'V' || ch == 'b' || ch == 'B') + switches[n_switches].validated = 1; + } + n_switches++; + } + else + { +#ifdef HAVE_TARGET_OBJECT_SUFFIX + argv[i] = convert_filename (argv[i], 0, access (argv[i], F_OK)); +#endif + + if (strcmp (argv[i], "-") != 0 && access (argv[i], F_OK) < 0) + { + perror_with_name (argv[i]); + error_count++; + } + else + { + infiles[n_infiles].language = spec_lang; + infiles[n_infiles++].name = argv[i]; + } + } + } + + if (n_infiles == last_language_n_infiles && spec_lang != 0) + error ("warning: `-x %s' after last input file has no effect", spec_lang); + + /* Ensure we only invoke each subprocess once. */ + if (target_help_flag || print_help_list) + { + n_infiles = 1; + + /* Create a dummy input file, so that we can pass --target-help on to + the various sub-processes. */ + infiles[0].language = "c"; + infiles[0].name = "help-dummy"; + + if (target_help_flag) + { + switches[n_switches].part1 = "--target-help"; + switches[n_switches].args = 0; + switches[n_switches].live_cond = SWITCH_OK; + switches[n_switches].validated = 0; + + n_switches++; + } + + if (print_help_list) + { + switches[n_switches].part1 = "--help"; + switches[n_switches].args = 0; + switches[n_switches].live_cond = SWITCH_OK; + switches[n_switches].validated = 0; + + n_switches++; + } + } + + switches[n_switches].part1 = 0; + infiles[n_infiles].name = 0; +} + +/* Store switches not filtered out by %{ 0 && !strcmp (argbuf[argbuf_index - 1], "|")) + argbuf_index--; + + set_collect_gcc_options (); + + if (argbuf_index > 0) + value = execute (); + } + + return value; +} + +/* Process the sub-spec SPEC as a portion of a larger spec. + This is like processing a whole spec except that we do + not initialize at the beginning and we do not supply a + newline by default at the end. + INSWITCH nonzero means don't process %-sequences in SPEC; + in this case, % is treated as an ordinary character. + This is used while substituting switches. + INSWITCH nonzero also causes SPC not to terminate an argument. + + Value is zero unless a line was finished + and the command on that line reported an error. */ + +static int +do_spec_1 (spec, inswitch, soft_matched_part) + const char *spec; + int inswitch; + const char *soft_matched_part; +{ + const char *p = spec; + int c; + int i; + const char *string; + int value; + + while ((c = *p++)) + /* If substituting a switch, treat all chars like letters. + Otherwise, NL, SPC, TAB and % are special. */ + switch (inswitch ? 'a' : c) + { + case '\n': + /* End of line: finish any pending argument, + then run the pending command if one has been started. */ + if (arg_going) + { + obstack_1grow (&obstack, 0); + string = obstack_finish (&obstack); + if (this_is_library_file) + string = find_file (string); + store_arg (string, delete_this_arg, this_is_output_file); + if (this_is_output_file) + outfiles[input_file_number] = string; + } + arg_going = 0; + + if (argbuf_index > 0 && !strcmp (argbuf[argbuf_index - 1], "|")) + { + for (i = 0; i < n_switches; i++) + if (!strcmp (switches[i].part1, "pipe")) + break; + + /* A `|' before the newline means use a pipe here, + but only if -pipe was specified. + Otherwise, execute now and don't pass the `|' as an arg. */ + if (i < n_switches) + { + input_from_pipe = 1; + switches[i].validated = 1; + break; + } + else + argbuf_index--; + } + + set_collect_gcc_options (); + + if (argbuf_index > 0) + { + value = execute (); + if (value) + return value; + } + /* Reinitialize for a new command, and for a new argument. */ + clear_args (); + arg_going = 0; + delete_this_arg = 0; + this_is_output_file = 0; + this_is_library_file = 0; + input_from_pipe = 0; + break; + + case '|': + /* End any pending argument. */ + if (arg_going) + { + obstack_1grow (&obstack, 0); + string = obstack_finish (&obstack); + if (this_is_library_file) + string = find_file (string); + store_arg (string, delete_this_arg, this_is_output_file); + if (this_is_output_file) + outfiles[input_file_number] = string; + } + + /* Use pipe */ + obstack_1grow (&obstack, c); + arg_going = 1; + break; + + case '\t': + case ' ': + /* Space or tab ends an argument if one is pending. */ + if (arg_going) + { + obstack_1grow (&obstack, 0); + string = obstack_finish (&obstack); + if (this_is_library_file) + string = find_file (string); + store_arg (string, delete_this_arg, this_is_output_file); + if (this_is_output_file) + outfiles[input_file_number] = string; + } + /* Reinitialize for a new argument. */ + arg_going = 0; + delete_this_arg = 0; + this_is_output_file = 0; + this_is_library_file = 0; + break; + + case '%': + switch (c = *p++) + { + case 0: + fatal ("invalid specification! Bug in cc"); + + case 'b': + obstack_grow (&obstack, input_basename, basename_length); + arg_going = 1; + break; + + case 'B': + obstack_grow (&obstack, input_basename, suffixed_basename_length); + arg_going = 1; + break; + + case 'd': + delete_this_arg = 2; + break; + + /* Dump out the directories specified with LIBRARY_PATH, + followed by the absolute directories + that we search for startfiles. */ + case 'D': + { + struct prefix_list *pl = startfile_prefixes.plist; + size_t bufsize = 100; + char *buffer = (char *) xmalloc (bufsize); + int idx; + + for (; pl; pl = pl->next) + { +#ifdef RELATIVE_PREFIX_NOT_LINKDIR + /* Used on systems which record the specified -L dirs + and use them to search for dynamic linking. */ + /* Relative directories always come from -B, + and it is better not to use them for searching + at run time. In particular, stage1 loses. */ + if (!IS_ABSOLUTE_PATHNAME (pl->prefix)) + continue; +#endif + /* Try subdirectory if there is one. */ + if (multilib_dir != NULL) + { + if (machine_suffix) + { + if (strlen (pl->prefix) + strlen (machine_suffix) + >= bufsize) + bufsize = (strlen (pl->prefix) + + strlen (machine_suffix)) * 2 + 1; + buffer = (char *) xrealloc (buffer, bufsize); + strcpy (buffer, pl->prefix); + strcat (buffer, machine_suffix); + if (is_directory (buffer, multilib_dir, 1)) + { + do_spec_1 ("-L", 0, NULL); +#ifdef SPACE_AFTER_L_OPTION + do_spec_1 (" ", 0, NULL); +#endif + do_spec_1 (buffer, 1, NULL); + do_spec_1 (multilib_dir, 1, NULL); + /* Make this a separate argument. */ + do_spec_1 (" ", 0, NULL); + } + } + if (!pl->require_machine_suffix) + { + if (is_directory (pl->prefix, multilib_dir, 1)) + { + do_spec_1 ("-L", 0, NULL); +#ifdef SPACE_AFTER_L_OPTION + do_spec_1 (" ", 0, NULL); +#endif + do_spec_1 (pl->prefix, 1, NULL); + do_spec_1 (multilib_dir, 1, NULL); + /* Make this a separate argument. */ + do_spec_1 (" ", 0, NULL); + } + } + } + if (machine_suffix) + { + if (is_directory (pl->prefix, machine_suffix, 1)) + { + do_spec_1 ("-L", 0, NULL); +#ifdef SPACE_AFTER_L_OPTION + do_spec_1 (" ", 0, NULL); +#endif + do_spec_1 (pl->prefix, 1, NULL); + /* Remove slash from machine_suffix. */ + if (strlen (machine_suffix) >= bufsize) + bufsize = strlen (machine_suffix) * 2 + 1; + buffer = (char *) xrealloc (buffer, bufsize); + strcpy (buffer, machine_suffix); + idx = strlen (buffer); + if (IS_DIR_SEPARATOR (buffer[idx - 1])) + buffer[idx - 1] = 0; + do_spec_1 (buffer, 1, NULL); + /* Make this a separate argument. */ + do_spec_1 (" ", 0, NULL); + } + } + if (!pl->require_machine_suffix) + { + if (is_directory (pl->prefix, "", 1)) + { + do_spec_1 ("-L", 0, NULL); +#ifdef SPACE_AFTER_L_OPTION + do_spec_1 (" ", 0, NULL); +#endif + /* Remove slash from pl->prefix. */ + if (strlen (pl->prefix) >= bufsize) + bufsize = strlen (pl->prefix) * 2 + 1; + buffer = (char *) xrealloc (buffer, bufsize); + strcpy (buffer, pl->prefix); + idx = strlen (buffer); + if (IS_DIR_SEPARATOR (buffer[idx - 1])) + buffer[idx - 1] = 0; + do_spec_1 (buffer, 1, NULL); + /* Make this a separate argument. */ + do_spec_1 (" ", 0, NULL); + } + } + } + free (buffer); + } + break; + + case 'e': + /* %efoo means report an error with `foo' as error message + and don't execute any more commands for this file. */ + { + const char *q = p; + char *buf; + while (*p != 0 && *p != '\n') + p++; + buf = (char *) alloca (p - q + 1); + strncpy (buf, q, p - q); + buf[p - q] = 0; + error ("%s", buf); + return -1; + } + break; + case 'n': + /* %nfoo means report an notice with `foo' on stderr. */ + { + const char *q = p; + char *buf; + while (*p != 0 && *p != '\n') + p++; + buf = (char *) alloca (p - q + 1); + strncpy (buf, q, p - q); + buf[p - q] = 0; + notice ("%s\n", buf); + if (*p) + p++; + } + break; + + case 'j': + { + struct stat st; + + /* If save_temps_flag is off, and the HOST_BIT_BUCKET is defined, + and it is not a directory, and it is writable, use it. + Otherwise, fall through and treat this like any other + temporary file. */ + + if ((!save_temps_flag) + && (stat (HOST_BIT_BUCKET, &st) == 0) && (!S_ISDIR (st.st_mode)) + && (access (HOST_BIT_BUCKET, W_OK) == 0)) + { + obstack_grow (&obstack, HOST_BIT_BUCKET, + strlen (HOST_BIT_BUCKET)); + delete_this_arg = 0; + arg_going = 1; + break; + } + } + case 'g': + case 'u': + case 'U': + { + struct temp_name *t; + int suffix_length; + const char *suffix = p; + char *saved_suffix = NULL; + + while (*p == '.' || ISALPHA ((unsigned char) *p)) + p++; + suffix_length = p - suffix; + if (p[0] == '%' && p[1] == 'O') + { + p += 2; + /* We don't support extra suffix characters after %O. */ + if (*p == '.' || ISALPHA ((unsigned char) *p)) + abort (); + if (suffix_length == 0) + suffix = TARGET_OBJECT_SUFFIX; + else + { + saved_suffix + = (char *) xmalloc (suffix_length + + strlen (TARGET_OBJECT_SUFFIX)); + strncpy (saved_suffix, suffix, suffix_length); + strcpy (saved_suffix + suffix_length, + TARGET_OBJECT_SUFFIX); + } + suffix_length += strlen (TARGET_OBJECT_SUFFIX); + } + + /* If the input_filename has the same suffix specified + for the %g, %u, or %U, and -save-temps is specified, + we could end up using that file as an intermediate + thus clobbering the user's source file (.e.g., + gcc -save-temps foo.s would clobber foo.s with the + output of cpp0). So check for this condition and + generate a temp file as the intermediate. */ + + if (save_temps_flag) + { + temp_filename_length = basename_length + suffix_length; + temp_filename = alloca (temp_filename_length + 1); + strncpy ((char *) temp_filename, input_basename, basename_length); + strncpy ((char *) temp_filename + basename_length, suffix, + suffix_length); + *((char *) temp_filename + temp_filename_length) = '\0'; + if (strcmp (temp_filename, input_filename) != 0) + { + struct stat st_temp; + + /* Note, set_input() resets input_stat_set to 0. */ + if (input_stat_set == 0) + { + input_stat_set = stat (input_filename, &input_stat); + if (input_stat_set >= 0) + input_stat_set = 1; + } + + /* If we have the stat for the input_filename + and we can do the stat for the temp_filename + then the they could still refer to the same + file if st_dev/st_ino's are the same. */ + + if (input_stat_set != 1 + || stat (temp_filename, &st_temp) < 0 + || input_stat.st_dev != st_temp.st_dev + || input_stat.st_ino != st_temp.st_ino) + { + temp_filename = save_string (temp_filename, + temp_filename_length + 1); + obstack_grow (&obstack, temp_filename, + temp_filename_length); + arg_going = 1; + break; + } + } + } + + /* See if we already have an association of %g/%u/%U and + suffix. */ + for (t = temp_names; t; t = t->next) + if (t->length == suffix_length + && strncmp (t->suffix, suffix, suffix_length) == 0 + && t->unique == (c != 'g')) + break; + + /* Make a new association if needed. %u and %j + require one. */ + if (t == 0 || c == 'u' || c == 'j') + { + if (t == 0) + { + t = (struct temp_name *) xmalloc (sizeof (struct temp_name)); + t->next = temp_names; + temp_names = t; + } + t->length = suffix_length; + if (saved_suffix) + { + t->suffix = saved_suffix; + saved_suffix = NULL; + } + else + t->suffix = save_string (suffix, suffix_length); + t->unique = (c != 'g'); + temp_filename = make_temp_file (t->suffix); + temp_filename_length = strlen (temp_filename); + t->filename = temp_filename; + t->filename_length = temp_filename_length; + } + + if (saved_suffix) + free (saved_suffix); + + obstack_grow (&obstack, t->filename, t->filename_length); + delete_this_arg = 1; + } + arg_going = 1; + break; + + case 'i': + obstack_grow (&obstack, input_filename, input_filename_length); + arg_going = 1; + break; + + case 'I': + { + struct prefix_list *pl = include_prefixes.plist; + + if (gcc_exec_prefix) + { + do_spec_1 ("-iprefix", 1, NULL); + /* Make this a separate argument. */ + do_spec_1 (" ", 0, NULL); + do_spec_1 (gcc_exec_prefix, 1, NULL); + do_spec_1 (" ", 0, NULL); + } + + for (; pl; pl = pl->next) + { + do_spec_1 ("-isystem", 1, NULL); + /* Make this a separate argument. */ + do_spec_1 (" ", 0, NULL); + do_spec_1 (pl->prefix, 1, NULL); + do_spec_1 (" ", 0, NULL); + } + } + break; + + case 'o': + { + int max = n_infiles; + max += lang_specific_extra_outfiles; + + for (i = 0; i < max; i++) + if (outfiles[i]) + store_arg (outfiles[i], 0, 0); + break; + } + + case 'O': + obstack_grow (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX)); + arg_going = 1; + break; + + case 's': + this_is_library_file = 1; + break; + + case 'w': + this_is_output_file = 1; + break; + + case 'W': + { + int cur_index = argbuf_index; + /* Handle the {...} following the %W. */ + if (*p != '{') + abort (); + p = handle_braces (p + 1); + if (p == 0) + return -1; + /* If any args were output, mark the last one for deletion + on failure. */ + if (argbuf_index != cur_index) + record_temp_file (argbuf[argbuf_index - 1], 0, 1); + break; + } + + /* %x{OPTION} records OPTION for %X to output. */ + case 'x': + { + const char *p1 = p; + char *string; + + /* Skip past the option value and make a copy. */ + if (*p != '{') + abort (); + while (*p++ != '}') + ; + string = save_string (p1 + 1, p - p1 - 2); + + /* See if we already recorded this option. */ + for (i = 0; i < n_linker_options; i++) + if (! strcmp (string, linker_options[i])) + { + free (string); + return 0; + } + + /* This option is new; add it. */ + add_linker_option (string, strlen (string)); + } + break; + + /* Dump out the options accumulated previously using %x. */ + case 'X': + for (i = 0; i < n_linker_options; i++) + { + do_spec_1 (linker_options[i], 1, NULL); + /* Make each accumulated option a separate argument. */ + do_spec_1 (" ", 0, NULL); + } + break; + + /* Dump out the options accumulated previously using -Wa,. */ + case 'Y': + for (i = 0; i < n_assembler_options; i++) + { + do_spec_1 (assembler_options[i], 1, NULL); + /* Make each accumulated option a separate argument. */ + do_spec_1 (" ", 0, NULL); + } + break; + + /* Dump out the options accumulated previously using -Wp,. */ + case 'Z': + for (i = 0; i < n_preprocessor_options; i++) + { + do_spec_1 (preprocessor_options[i], 1, NULL); + /* Make each accumulated option a separate argument. */ + do_spec_1 (" ", 0, NULL); + } + break; + + /* Here are digits and numbers that just process + a certain constant string as a spec. */ + + case '1': + value = do_spec_1 (cc1_spec, 0, NULL); + if (value != 0) + return value; + break; + + case '2': + value = do_spec_1 (cc1plus_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'a': + value = do_spec_1 (asm_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'A': + value = do_spec_1 (asm_final_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'C': + { + const char *const spec + = (input_file_compiler->cpp_spec + ? input_file_compiler->cpp_spec + : cpp_spec); + value = do_spec_1 (spec, 0, NULL); + if (value != 0) + return value; + } + break; + + case 'E': + value = do_spec_1 (endfile_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'l': + value = do_spec_1 (link_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'L': + value = do_spec_1 (lib_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'G': + value = do_spec_1 (libgcc_spec, 0, NULL); + if (value != 0) + return value; + break; + + case 'M': + if (multilib_dir && strcmp (multilib_dir, ".") != 0) + { + char *p; + const char *q; + size_t len; + + len = strlen (multilib_dir); + obstack_blank (&obstack, len + 1); + p = obstack_next_free (&obstack) - (len + 1); + + *p++ = '_'; + for (q = multilib_dir; *q ; ++q, ++p) + *p = (IS_DIR_SEPARATOR (*q) ? '_' : *q); + } + break; + + case 'p': + { + char *x = (char *) alloca (strlen (cpp_predefines) + 1); + char *buf = x; + const char *y; + + /* Copy all of the -D options in CPP_PREDEFINES into BUF. */ + y = cpp_predefines; + while (*y != 0) + { + if (! strncmp (y, "-D", 2)) + /* Copy the whole option. */ + while (*y && *y != ' ' && *y != '\t') + *x++ = *y++; + else if (*y == ' ' || *y == '\t') + /* Copy whitespace to the result. */ + *x++ = *y++; + /* Don't copy other options. */ + else + y++; + } + + *x = 0; + + value = do_spec_1 (buf, 0, NULL); + if (value != 0) + return value; + } + break; + + case 'P': + { + char *x = (char *) alloca (strlen (cpp_predefines) * 4 + 1); + char *buf = x; + const char *y; + + /* Copy all of CPP_PREDEFINES into BUF, + but force them all into the reserved name space if they + aren't already there. The reserved name space is all + identifiers beginning with two underscores or with one + underscore and a capital letter. We do the forcing by + adding up to two underscores to the beginning and end + of each symbol. e.g. mips, _mips, mips_, and _mips_ all + become __mips__. */ + y = cpp_predefines; + while (*y != 0) + { + if (! strncmp (y, "-D", 2)) + { + int flag = 0; + + *x++ = *y++; + *x++ = *y++; + + if (*y != '_' + || (*(y + 1) != '_' + && ! ISUPPER ((unsigned char) *(y + 1)))) + { + /* Stick __ at front of macro name. */ + if (*y != '_') + *x++ = '_'; + *x++ = '_'; + /* Arrange to stick __ at the end as well. */ + flag = 1; + } + + /* Copy the macro name. */ + while (*y && *y != '=' && *y != ' ' && *y != '\t') + *x++ = *y++; + + if (flag) + { + if (x[-1] != '_') + { + if (x[-2] != '_') + *x++ = '_'; + *x++ = '_'; + } + } + + /* Copy the value given, if any. */ + while (*y && *y != ' ' && *y != '\t') + *x++ = *y++; + } + else if (*y == ' ' || *y == '\t') + /* Copy whitespace to the result. */ + *x++ = *y++; + /* Don't copy -A options */ + else + y++; + } + *x++ = ' '; + + /* Copy all of CPP_PREDEFINES into BUF, + but put __ after every -D. */ + y = cpp_predefines; + while (*y != 0) + { + if (! strncmp (y, "-D", 2)) + { + y += 2; + + if (*y != '_' + || (*(y + 1) != '_' + && ! ISUPPER ((unsigned char) *(y + 1)))) + { + /* Stick -D__ at front of macro name. */ + *x++ = '-'; + *x++ = 'D'; + if (*y != '_') + *x++ = '_'; + *x++ = '_'; + + /* Copy the macro name. */ + while (*y && *y != '=' && *y != ' ' && *y != '\t') + *x++ = *y++; + + /* Copy the value given, if any. */ + while (*y && *y != ' ' && *y != '\t') + *x++ = *y++; + } + else + { + /* Do not copy this macro - we have just done it before */ + while (*y && *y != ' ' && *y != '\t') + y++; + } + } + else if (*y == ' ' || *y == '\t') + /* Copy whitespace to the result. */ + *x++ = *y++; + /* Don't copy -A options. */ + else + y++; + } + *x++ = ' '; + + /* Copy all of the -A options in CPP_PREDEFINES into BUF. */ + y = cpp_predefines; + while (*y != 0) + { + if (! strncmp (y, "-A", 2)) + /* Copy the whole option. */ + while (*y && *y != ' ' && *y != '\t') + *x++ = *y++; + else if (*y == ' ' || *y == '\t') + /* Copy whitespace to the result. */ + *x++ = *y++; + /* Don't copy other options. */ + else + y++; + } + + *x = 0; + + value = do_spec_1 (buf, 0, NULL); + if (value != 0) + return value; + } + break; + + case 'S': + value = do_spec_1 (startfile_spec, 0, NULL); + if (value != 0) + return value; + break; + + /* Here we define characters other than letters and digits. */ + + case '{': + p = handle_braces (p); + if (p == 0) + return -1; + break; + + case '%': + obstack_1grow (&obstack, '%'); + break; + + case '.': + { + unsigned len = 0; + + while (p[len] && p[len] != ' ' && p[len] != '%') + len++; + suffix_subst = save_string (p - 1, len + 1); + p += len; + } + break; + + case '*': + if (soft_matched_part) + { + do_spec_1 (soft_matched_part, 1, NULL); + do_spec_1 (" ", 0, NULL); + } + else + /* Catch the case where a spec string contains something like + '%{foo:%*}'. ie there is no * in the pattern on the left + hand side of the :. */ + error ("spec failure: '%%*' has not been initialized by pattern match"); + break; + + /* Process a string found as the value of a spec given by name. + This feature allows individual machine descriptions + to add and use their own specs. + %[...] modifies -D options the way %P does; + %(...) uses the spec unmodified. */ + case '[': + error ("warning: use of obsolete %%[ operator in specs"); + case '(': + { + const char *name = p; + struct spec_list *sl; + int len; + + /* The string after the S/P is the name of a spec that is to be + processed. */ + while (*p && *p != ')' && *p != ']') + p++; + + /* See if it's in the list. */ + for (len = p - name, sl = specs; sl; sl = sl->next) + if (sl->name_len == len && !strncmp (sl->name, name, len)) + { + name = *(sl->ptr_spec); +#ifdef DEBUG_SPECS + notice ("Processing spec %c%s%c, which is '%s'\n", + c, sl->name, (c == '(') ? ')' : ']', name); +#endif + break; + } + + if (sl) + { + if (c == '(') + { + value = do_spec_1 (name, 0, NULL); + if (value != 0) + return value; + } + else + { + char *x = (char *) alloca (strlen (name) * 2 + 1); + char *buf = x; + const char *y = name; + int flag = 0; + + /* Copy all of NAME into BUF, but put __ after + every -D and at the end of each arg. */ + while (1) + { + if (! strncmp (y, "-D", 2)) + { + *x++ = '-'; + *x++ = 'D'; + *x++ = '_'; + *x++ = '_'; + y += 2; + flag = 1; + continue; + } + else if (flag + && (*y == ' ' || *y == '\t' || *y == '=' + || *y == '}' || *y == 0)) + { + *x++ = '_'; + *x++ = '_'; + flag = 0; + } + if (*y == 0) + break; + else + *x++ = *y++; + } + *x = 0; + + value = do_spec_1 (buf, 0, NULL); + if (value != 0) + return value; + } + } + + /* Discard the closing paren or bracket. */ + if (*p) + p++; + } + break; + + case 'v': + { + int c1 = *p++; /* Select first or second version number. */ + const char *v = compiler_version; + const char *q; + static const char zeroc = '0'; + + /* The format of the version string is + ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)? */ + + /* Ignore leading non-digits. i.e. "foo-" in "foo-2.7.2". */ + while (! ISDIGIT (*v)) + v++; + if (v > compiler_version && v[-1] != '-') + abort (); + + /* If desired, advance to second version number. */ + if (c1 >= '2') + { + /* Set V after the first period. */ + while (ISDIGIT (*v)) + v++; + if (*v != '.') + abort (); + v++; + } + + /* If desired, advance to third version number. + But don't complain if it's not present */ + if (c1 == '3') + { + /* Set V after the second period. */ + while (ISDIGIT (*v)) + v++; + if ((*v != 0) && (*v != ' ') && (*v != '.') && (*v != '-')) + abort (); + if (*v != 0) + v++; + } + + /* Set Q at the next period or at the end. */ + q = v; + while (ISDIGIT (*q)) + q++; + if (*q != 0 && q > v && *q != ' ' && *q != '.' && *q != '-') + abort (); + + if (q > v) + /* Put that part into the command. */ + obstack_grow (&obstack, v, q - v); + else + /* Default to "0" */ + obstack_grow (&obstack, &zeroc, 1); + arg_going = 1; + } + break; + + case '|': + if (input_from_pipe) + do_spec_1 ("-", 0, NULL); + break; + + default: + error ("spec failure: unrecognized spec option '%c'", c); + break; + } + break; + + case '\\': + /* Backslash: treat next character as ordinary. */ + c = *p++; + + /* fall through */ + default: + /* Ordinary character: put it into the current argument. */ + obstack_1grow (&obstack, c); + arg_going = 1; + } + + /* End of string. */ + return 0; +} + +/* Return 0 if we call do_spec_1 and that returns -1. */ + +static const char * +handle_braces (p) + const char *p; +{ + const char *filter, *body = NULL, *endbody = NULL; + int pipe_p = 0; + int true_once = 0; /* If, in %{a|b:d}, at least one of a,b was seen. */ + int negate; + int suffix; + int include_blanks = 1; + int elide_switch = 0; + int ordered = 0; + + if (*p == '^') + { + /* A '^' after the open-brace means to not give blanks before args. */ + include_blanks = 0; + ++p; + } + + if (*p == '|') + { + /* A `|' after the open-brace means, + if the test fails, output a single minus sign rather than nothing. + This is used in %{|!pipe:...}. */ + pipe_p = 1; + ++p; + } + + if (*p == '<') + { + /* A `<' after the open-brace means that the switch should be + removed from the command-line. */ + elide_switch = 1; + ++p; + } + +next_member: + negate = suffix = 0; + + if (*p == '!') + /* A `!' after the open-brace negates the condition: + succeed if the specified switch is not present. */ + negate = 1, ++p; + + if (*p == '.') + /* A `.' after the open-brace means test against the current suffix. */ + { + if (pipe_p) + abort (); + + suffix = 1; + ++p; + } + + if (elide_switch && (negate || pipe_p || suffix)) + { + /* It doesn't make sense to mix elision with other flags. We + could fatal() here, but the standard seems to be to abort. */ + abort (); + } + + next_ampersand: + filter = p; + while (*p != ':' && *p != '}' && *p != '|' && *p != '&') + p++; + + if (*p == '|' && (pipe_p || ordered)) + abort (); + + if (!body) + { + if (*p != '}' && *p != '&') + { + int count = 1; + const char *q = p; + + while (*q++ != ':') + continue; + body = q; + + while (count > 0) + { + if (*q == '{') + count++; + else if (*q == '}') + count--; + else if (*q == 0) + fatal ("mismatched braces in specs"); + q++; + } + endbody = q; + } + else + body = p, endbody = p + 1; + } + + if (suffix) + { + int found = (input_suffix != 0 + && (long) strlen (input_suffix) == (long) (p - filter) + && strncmp (input_suffix, filter, p - filter) == 0); + + if (body[0] == '}') + abort (); + + if (negate != found + && do_spec_1 (save_string (body, endbody-body-1), 0, NULL) < 0) + return 0; + } + else if (p[-1] == '*' && (p[0] == '}' || p[0] == '&')) + { + /* Substitute all matching switches as separate args. */ + int i; + + for (i = 0; i < n_switches; i++) + if (!strncmp (switches[i].part1, filter, p - 1 - filter) + && check_live_switch (i, p - 1 - filter)) + { + if (elide_switch) + { + switches[i].live_cond = SWITCH_IGNORE; + switches[i].validated = 1; + } + else + ordered = 1, switches[i].ordering = 1; + } + } + else + { + /* Test for presence of the specified switch. */ + int i; + int present = 0; + + /* If name specified ends in *, as in {x*:...}, + check for %* and handle that case. */ + if (p[-1] == '*' && !negate) + { + int substitution; + const char *r = body; + + /* First see whether we have %*. */ + substitution = 0; + while (r < endbody) + { + if (*r == '%' && r[1] == '*') + substitution = 1; + r++; + } + /* If we do, handle that case. */ + if (substitution) + { + /* Substitute all matching switches as separate args. + But do this by substituting for %* + in the text that follows the colon. */ + + unsigned hard_match_len = p - filter - 1; + char *string = save_string (body, endbody - body - 1); + + for (i = 0; i < n_switches; i++) + if (!strncmp (switches[i].part1, filter, hard_match_len) + && check_live_switch (i, -1)) + { + do_spec_1 (string, 0, &switches[i].part1[hard_match_len]); + /* Pass any arguments this switch has. */ + give_switch (i, 1, 1); + suffix_subst = NULL; + } + + /* We didn't match. Try again. */ + if (*p++ == '|') + goto next_member; + return endbody; + } + } + + /* If name specified ends in *, as in {x*:...}, + check for presence of any switch name starting with x. */ + if (p[-1] == '*') + { + for (i = 0; i < n_switches; i++) + { + unsigned hard_match_len = p - filter - 1; + + if (!strncmp (switches[i].part1, filter, hard_match_len) + && check_live_switch (i, hard_match_len)) + { + present = 1; + break; + } + } + } + /* Otherwise, check for presence of exact name specified. */ + else + { + for (i = 0; i < n_switches; i++) + { + if (!strncmp (switches[i].part1, filter, p - filter) + && switches[i].part1[p - filter] == 0 + && check_live_switch (i, -1)) + { + present = 1; + break; + } + } + } + + /* If it is as desired (present for %{s...}, absent for %{!s...}) + then substitute either the switch or the specified + conditional text. */ + if (present != negate) + { + if (elide_switch) + { + switches[i].live_cond = SWITCH_IGNORE; + switches[i].validated = 1; + } + else if (ordered || *p == '&') + ordered = 1, switches[i].ordering = 1; + else if (*p == '}') + give_switch (i, 0, include_blanks); + else + /* Even if many alternatives are matched, only output once. */ + true_once = 1; + } + else if (pipe_p) + { + /* Here if a %{|...} conditional fails: output a minus sign, + which means "standard output" or "standard input". */ + do_spec_1 ("-", 0, NULL); + return endbody; + } + } + + /* We didn't match; try again. */ + if (*p++ == '|') + goto next_member; + + if (p[-1] == '&') + { + body = 0; + goto next_ampersand; + } + + if (ordered) + { + int i; + /* Doing this set of switches later preserves their command-line + ordering. This is needed for e.g. -U, -D and -A. */ + for (i = 0; i < n_switches; i++) + if (switches[i].ordering == 1) + { + switches[i].ordering = 0; + give_switch (i, 0, include_blanks); + } + } + /* Process the spec just once, regardless of match count. */ + else if (true_once) + { + if (do_spec_1 (save_string (body, endbody - body - 1), + 0, NULL) < 0) + return 0; + } + + return endbody; +} + +/* Return 0 iff switch number SWITCHNUM is obsoleted by a later switch + on the command line. PREFIX_LENGTH is the length of XXX in an {XXX*} + spec, or -1 if either exact match or %* is used. + + A -O switch is obsoleted by a later -O switch. A -f, -m, or -W switch + whose value does not begin with "no-" is obsoleted by the same value + with the "no-", similarly for a switch with the "no-" prefix. */ + +static int +check_live_switch (switchnum, prefix_length) + int switchnum; + int prefix_length; +{ + const char *name = switches[switchnum].part1; + int i; + + /* In the common case of {*}, a negating + switch would always match, so ignore that case. We will just + send the conflicting switches to the compiler phase. */ + if (prefix_length >= 0 && prefix_length <= 1) + return 1; + + /* If we already processed this switch and determined if it was + live or not, return our past determination. */ + if (switches[switchnum].live_cond != 0) + return switches[switchnum].live_cond > 0; + + /* Now search for duplicate in a manner that depends on the name. */ + switch (*name) + { + case 'O': + for (i = switchnum + 1; i < n_switches; i++) + if (switches[i].part1[0] == 'O') + { + switches[switchnum].validated = 1; + switches[switchnum].live_cond = SWITCH_FALSE; + return 0; + } + break; + + case 'W': case 'f': case 'm': + if (! strncmp (name + 1, "no-", 3)) + { + /* We have Xno-YYY, search for XYYY. */ + for (i = switchnum + 1; i < n_switches; i++) + if (switches[i].part1[0] == name[0] + && ! strcmp (&switches[i].part1[1], &name[4])) + { + switches[switchnum].validated = 1; + switches[switchnum].live_cond = SWITCH_FALSE; + return 0; + } + } + else + { + /* We have XYYY, search for Xno-YYY. */ + for (i = switchnum + 1; i < n_switches; i++) + if (switches[i].part1[0] == name[0] + && switches[i].part1[1] == 'n' + && switches[i].part1[2] == 'o' + && switches[i].part1[3] == '-' + && !strcmp (&switches[i].part1[4], &name[1])) + { + switches[switchnum].validated = 1; + switches[switchnum].live_cond = SWITCH_FALSE; + return 0; + } + } + break; + } + + /* Otherwise the switch is live. */ + switches[switchnum].live_cond = SWITCH_LIVE; + return 1; +} + +/* Pass a switch to the current accumulating command + in the same form that we received it. + SWITCHNUM identifies the switch; it is an index into + the vector of switches gcc received, which is `switches'. + This cannot fail since it never finishes a command line. + + If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument. + + If INCLUDE_BLANKS is nonzero, then we include blanks before each argument + of the switch. */ + +static void +give_switch (switchnum, omit_first_word, include_blanks) + int switchnum; + int omit_first_word; + int include_blanks; +{ + if (switches[switchnum].live_cond == SWITCH_IGNORE) + return; + + if (!omit_first_word) + { + do_spec_1 ("-", 0, NULL); + do_spec_1 (switches[switchnum].part1, 1, NULL); + } + + if (switches[switchnum].args != 0) + { + const char **p; + for (p = switches[switchnum].args; *p; p++) + { + const char *arg = *p; + + if (include_blanks) + do_spec_1 (" ", 0, NULL); + if (suffix_subst) + { + unsigned length = strlen (arg); + int dot = 0; + + while (length-- && !IS_DIR_SEPARATOR (arg[length])) + if (arg[length] == '.') + { + ((char *)arg)[length] = 0; + dot = 1; + break; + } + do_spec_1 (arg, 1, NULL); + if (dot) + ((char *)arg)[length] = '.'; + do_spec_1 (suffix_subst, 1, NULL); + } + else + do_spec_1 (arg, 1, NULL); + } + } + + do_spec_1 (" ", 0, NULL); + switches[switchnum].validated = 1; +} + +/* Search for a file named NAME trying various prefixes including the + user's -B prefix and some standard ones. + Return the absolute file name found. If nothing is found, return NAME. */ + +static const char * +find_file (name) + const char *name; +{ + char *newname; + + /* Try multilib_dir if it is defined. */ + if (multilib_dir != NULL) + { + const char *const try = ACONCAT ((multilib_dir, dir_separator_str, name, NULL)); + + newname = find_a_file (&startfile_prefixes, try, R_OK); + + /* If we don't find it in the multi library dir, then fall + through and look for it in the normal places. */ + if (newname != NULL) + return newname; + } + + newname = find_a_file (&startfile_prefixes, name, R_OK); + return newname ? newname : name; +} + +/* Determine whether a directory exists. If LINKER, return 0 for + certain fixed names not needed by the linker. If not LINKER, it is + only important to return 0 if the host machine has a small ARG_MAX + limit. */ + +static int +is_directory (path1, path2, linker) + const char *path1; + const char *path2; + int linker; +{ + int len1 = strlen (path1); + int len2 = strlen (path2); + char *path = (char *) alloca (3 + len1 + len2); + char *cp; + struct stat st; + +#ifndef SMALL_ARG_MAX + if (! linker) + return 1; +#endif + + /* Construct the path from the two parts. Ensure the string ends with "/.". + The resulting path will be a directory even if the given path is a + symbolic link. */ + memcpy (path, path1, len1); + memcpy (path + len1, path2, len2); + cp = path + len1 + len2; + if (!IS_DIR_SEPARATOR (cp[-1])) + *cp++ = DIR_SEPARATOR; + *cp++ = '.'; + *cp = '\0'; + + /* Exclude directories that the linker is known to search. */ + if (linker + && ((cp - path == 6 + && strcmp (path, concat (dir_separator_str, "lib", + dir_separator_str, ".", NULL)) == 0) + || (cp - path == 10 + && strcmp (path, concat (dir_separator_str, "usr", + dir_separator_str, "lib", + dir_separator_str, ".", NULL)) == 0))) + return 0; + + return (stat (path, &st) >= 0 && S_ISDIR (st.st_mode)); +} + +/* Set up the various global variables to indicate that we're processing + the input file named FILENAME. */ + +void +set_input (filename) + const char *filename; +{ + const char *p; + + input_filename = filename; + input_filename_length = strlen (input_filename); + + input_basename = input_filename; +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + /* Skip drive name so 'x:foo' is handled properly. */ + if (input_basename[1] == ':') + input_basename += 2; +#endif + for (p = input_basename; *p; p++) + if (IS_DIR_SEPARATOR (*p)) + input_basename = p + 1; + + /* Find a suffix starting with the last period, + and set basename_length to exclude that suffix. */ + basename_length = strlen (input_basename); + suffixed_basename_length = basename_length; + p = input_basename + basename_length; + while (p != input_basename && *p != '.') + --p; + if (*p == '.' && p != input_basename) + { + basename_length = p - input_basename; + input_suffix = p + 1; + } + else + input_suffix = ""; + + /* If a spec for 'g', 'u', or 'U' is seen with -save-temps then + we will need to do a stat on the input_filename. The + INPUT_STAT_SET signals that the stat is needed. */ + input_stat_set = 0; +} + +/* On fatal signals, delete all the temporary files. */ + +static void +fatal_error (signum) + int signum; +{ + signal (signum, SIG_DFL); + delete_failure_queue (); + delete_temp_files (); + /* Get the same signal again, this time not handled, + so its normal effect occurs. */ + kill (getpid (), signum); +} + +extern int main PARAMS ((int, const char *const *)); + +int +main (argc, argv) + int argc; + const char *const *argv; +{ + size_t i; + int value; + int linker_was_run = 0; + char *explicit_link_files; + char *specs_file; + const char *p; + struct user_specs *uptr; + + p = argv[0] + strlen (argv[0]); + while (p != argv[0] && !IS_DIR_SEPARATOR (p[-1])) + --p; + programname = p; + + xmalloc_set_program_name (programname); + +#ifdef GCC_DRIVER_HOST_INITIALIZATION + /* Perform host dependent initialization when needed. */ + GCC_DRIVER_HOST_INITIALIZATION; +#endif + + gcc_init_libintl (); + + if (signal (SIGINT, SIG_IGN) != SIG_IGN) + signal (SIGINT, fatal_error); +#ifdef SIGHUP + if (signal (SIGHUP, SIG_IGN) != SIG_IGN) + signal (SIGHUP, fatal_error); +#endif + if (signal (SIGTERM, SIG_IGN) != SIG_IGN) + signal (SIGTERM, fatal_error); +#ifdef SIGPIPE + if (signal (SIGPIPE, SIG_IGN) != SIG_IGN) + signal (SIGPIPE, fatal_error); +#endif +#ifdef SIGCHLD + /* We *MUST* set SIGCHLD to SIG_DFL so that the wait4() call will + receive the signal. A different setting is inheritable */ + signal (SIGCHLD, SIG_DFL); +#endif + + argbuf_length = 10; + argbuf = (const char **) xmalloc (argbuf_length * sizeof (const char *)); + + obstack_init (&obstack); + + /* Build multilib_select, et. al from the separate lines that make up each + multilib selection. */ + { + const char *const *q = multilib_raw; + int need_space; + + obstack_init (&multilib_obstack); + while ((p = *q++) != (char *) 0) + obstack_grow (&multilib_obstack, p, strlen (p)); + + obstack_1grow (&multilib_obstack, 0); + multilib_select = obstack_finish (&multilib_obstack); + + q = multilib_matches_raw; + while ((p = *q++) != (char *) 0) + obstack_grow (&multilib_obstack, p, strlen (p)); + + obstack_1grow (&multilib_obstack, 0); + multilib_matches = obstack_finish (&multilib_obstack); + + q = multilib_exclusions_raw; + while ((p = *q++) != (char *) 0) + obstack_grow (&multilib_obstack, p, strlen (p)); + + obstack_1grow (&multilib_obstack, 0); + multilib_exclusions = obstack_finish (&multilib_obstack); + + need_space = FALSE; + for (i = 0; i < ARRAY_SIZE (multilib_defaults_raw); i++) + { + if (need_space) + obstack_1grow (&multilib_obstack, ' '); + obstack_grow (&multilib_obstack, + multilib_defaults_raw[i], + strlen (multilib_defaults_raw[i])); + need_space = TRUE; + } + + obstack_1grow (&multilib_obstack, 0); + multilib_defaults = obstack_finish (&multilib_obstack); + } + + /* Set up to remember the pathname of gcc and any options + needed for collect. We use argv[0] instead of programname because + we need the complete pathname. */ + obstack_init (&collect_obstack); + obstack_grow (&collect_obstack, "COLLECT_GCC=", sizeof ("COLLECT_GCC=") - 1); + obstack_grow (&collect_obstack, argv[0], strlen (argv[0]) + 1); + putenv (obstack_finish (&collect_obstack)); + +#ifdef INIT_ENVIRONMENT + /* Set up any other necessary machine specific environment variables. */ + putenv (INIT_ENVIRONMENT); +#endif + + /* Make a table of what switches there are (switches, n_switches). + Make a table of specified input files (infiles, n_infiles). + Decode switches that are handled locally. */ + + process_command (argc, argv); + + /* Initialize the vector of specs to just the default. + This means one element containing 0s, as a terminator. */ + + compilers = (struct compiler *) xmalloc (sizeof default_compilers); + memcpy ((char *) compilers, (char *) default_compilers, + sizeof default_compilers); + n_compilers = n_default_compilers; + + /* Read specs from a file if there is one. */ + + machine_suffix = concat (spec_machine, dir_separator_str, + spec_version, dir_separator_str, NULL); + just_machine_suffix = concat (spec_machine, dir_separator_str, NULL); + + specs_file = find_a_file (&startfile_prefixes, "specs", R_OK); + /* Read the specs file unless it is a default one. */ + if (specs_file != 0 && strcmp (specs_file, "specs")) + read_specs (specs_file, TRUE); + else + init_spec (); + + /* We need to check standard_exec_prefix/just_machine_suffix/specs + for any override of as, ld and libraries. */ + specs_file = (char *) alloca (strlen (standard_exec_prefix) + + strlen (just_machine_suffix) + + sizeof ("specs")); + + strcpy (specs_file, standard_exec_prefix); + strcat (specs_file, just_machine_suffix); + strcat (specs_file, "specs"); + if (access (specs_file, R_OK) == 0) + read_specs (specs_file, TRUE); + + /* If not cross-compiling, look for startfiles in the standard places. */ + if (*cross_compile == '0') + { + if (*md_exec_prefix) + { + add_prefix (&exec_prefixes, md_exec_prefix, "GCC", + PREFIX_PRIORITY_LAST, 0, NULL); + add_prefix (&startfile_prefixes, md_exec_prefix, "GCC", + PREFIX_PRIORITY_LAST, 0, NULL); + } + + if (*md_startfile_prefix) + add_prefix (&startfile_prefixes, md_startfile_prefix, "GCC", + PREFIX_PRIORITY_LAST, 0, NULL); + + if (*md_startfile_prefix_1) + add_prefix (&startfile_prefixes, md_startfile_prefix_1, "GCC", + PREFIX_PRIORITY_LAST, 0, NULL); + + /* If standard_startfile_prefix is relative, base it on + standard_exec_prefix. This lets us move the installed tree + as a unit. If GCC_EXEC_PREFIX is defined, base + standard_startfile_prefix on that as well. */ + if (IS_ABSOLUTE_PATHNAME (standard_startfile_prefix)) + add_prefix (&startfile_prefixes, standard_startfile_prefix, "BINUTILS", + PREFIX_PRIORITY_LAST, 0, NULL); + else + { + if (gcc_exec_prefix) + add_prefix (&startfile_prefixes, + concat (gcc_exec_prefix, machine_suffix, + standard_startfile_prefix, NULL), + NULL, PREFIX_PRIORITY_LAST, 0, NULL); + add_prefix (&startfile_prefixes, + concat (standard_exec_prefix, + machine_suffix, + standard_startfile_prefix, NULL), + NULL, PREFIX_PRIORITY_LAST, 0, NULL); + } + + add_prefix (&startfile_prefixes, standard_startfile_prefix_1, + "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); + add_prefix (&startfile_prefixes, standard_startfile_prefix_2, + "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); +#if 0 /* Can cause surprises, and one can use -B./ instead. */ + add_prefix (&startfile_prefixes, "./", NULL, + PREFIX_PRIORITY_LAST, 1, NULL); +#endif + } + else + { + if (!IS_ABSOLUTE_PATHNAME (standard_startfile_prefix) + && gcc_exec_prefix) + add_prefix (&startfile_prefixes, + concat (gcc_exec_prefix, machine_suffix, + standard_startfile_prefix, NULL), + "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); + } + + /* Process any user specified specs in the order given on the command + line. */ + for (uptr = user_specs_head; uptr; uptr = uptr->next) + { + char *filename = find_a_file (&startfile_prefixes, uptr->filename, R_OK); + read_specs (filename ? filename : uptr->filename, FALSE); + } + + /* If we have a GCC_EXEC_PREFIX envvar, modify it for cpp's sake. */ + if (gcc_exec_prefix) + gcc_exec_prefix = concat (gcc_exec_prefix, spec_machine, dir_separator_str, + spec_version, dir_separator_str, NULL); + + /* Now we have the specs. + Set the `valid' bits for switches that match anything in any spec. */ + + validate_all_switches (); + + /* Now that we have the switches and the specs, set + the subdirectory based on the options. */ + set_multilib_dir (); + + /* Warn about any switches that no pass was interested in. */ + + for (i = 0; (int) i < n_switches; i++) + if (! switches[i].validated) + error ("unrecognized option `-%s'", switches[i].part1); + + /* Obey some of the options. */ + + if (print_search_dirs) + { + printf (_("install: %s%s\n"), standard_exec_prefix, machine_suffix); + printf (_("programs: %s\n"), build_search_list (&exec_prefixes, "", 0)); + printf (_("libraries: %s\n"), build_search_list (&startfile_prefixes, "", 0)); + return (0); + } + + if (print_file_name) + { + printf ("%s\n", find_file (print_file_name)); + return (0); + } + + if (print_prog_name) + { + char *newname = find_a_file (&exec_prefixes, print_prog_name, X_OK); + printf ("%s\n", (newname ? newname : print_prog_name)); + return (0); + } + + if (print_multi_lib) + { + print_multilib_info (); + return (0); + } + + if (print_multi_directory) + { + if (multilib_dir == NULL) + printf (".\n"); + else + printf ("%s\n", multilib_dir); + return (0); + } + + if (target_help_flag) + { + /* Print if any target specific options. */ + + /* We do not exit here. Instead we have created a fake input file + called 'target-dummy' which needs to be compiled, and we pass this + on to the various sub-processes, along with the --target-help + switch. */ + } + + if (print_help_list) + { + display_help (); + + if (! verbose_flag) + { + printf (_("\nFor bug reporting instructions, please see:\n")); + printf ("%s.\n", GCCBUGURL); + + return (0); + } + + /* We do not exit here. Instead we have created a fake input file + called 'help-dummy' which needs to be compiled, and we pass this + on the various sub-processes, along with the --help switch. */ + } + + if (verbose_flag) + { + int n; + const char *thrmod; + + notice ("Configured with: %s\n", configuration_arguments); + +#ifdef THREAD_MODEL_SPEC + /* We could have defined THREAD_MODEL_SPEC to "%*" by default, + but there's no point in doing all this processing just to get + thread_model back. */ + obstack_init (&obstack); + do_spec_1 (THREAD_MODEL_SPEC, 0, thread_model); + obstack_1grow (&obstack, '\0'); + thrmod = obstack_finish (&obstack); +#else + thrmod = thread_model; +#endif + + notice ("Thread model: %s\n", thrmod); + + /* compiler_version is truncated at the first space when initialized + from version string, so truncate version_string at the first space + before comparing. */ + for (n = 0; version_string[n]; n++) + if (version_string[n] == ' ') + break; + + if (! strncmp (version_string, compiler_version, n) + && compiler_version[n] == 0) + notice ("gcc version %s\n", version_string); + else + notice ("gcc driver version %s executing gcc version %s\n", + version_string, compiler_version); + + if (n_infiles == 0) + return (0); + } + + if (n_infiles == added_libraries) + fatal ("no input files"); + + /* Make a place to record the compiler output file names + that correspond to the input files. */ + + i = n_infiles; + i += lang_specific_extra_outfiles; + outfiles = (const char **) xcalloc (i, sizeof (char *)); + + /* Record which files were specified explicitly as link input. */ + + explicit_link_files = xcalloc (1, n_infiles); + + for (i = 0; (int) i < n_infiles; i++) + { + int this_file_error = 0; + + /* Tell do_spec what to substitute for %i. */ + + input_file_number = i; + set_input (infiles[i].name); + + /* Use the same thing in %o, unless cp->spec says otherwise. */ + + outfiles[i] = input_filename; + + /* Figure out which compiler from the file's suffix. */ + + input_file_compiler + = lookup_compiler (infiles[i].name, input_filename_length, + infiles[i].language); + + if (input_file_compiler) + { + /* Ok, we found an applicable compiler. Run its spec. */ + + if (input_file_compiler->spec[0] == '#') + { + error ("%s: %s compiler not installed on this system", + input_filename, &input_file_compiler->spec[1]); + this_file_error = 1; + } + else + { + value = do_spec (input_file_compiler->spec); + if (value < 0) + this_file_error = 1; + } + } + + /* If this file's name does not contain a recognized suffix, + record it as explicit linker input. */ + + else + explicit_link_files[i] = 1; + + /* Clear the delete-on-failure queue, deleting the files in it + if this compilation failed. */ + + if (this_file_error) + { + delete_failure_queue (); + error_count++; + } + /* If this compilation succeeded, don't delete those files later. */ + clear_failure_queue (); + } + + /* Reset the output file name to the first input file name, for use + with %b in LINK_SPEC on a target that prefers not to emit a.out + by default. */ + if (n_infiles > 0) + set_input (infiles[0].name); + + if (error_count == 0) + { + /* Make sure INPUT_FILE_NUMBER points to first available open + slot. */ + input_file_number = n_infiles; + if (lang_specific_pre_link ()) + error_count++; + } + + /* Run ld to link all the compiler output files. */ + + if (error_count == 0) + { + int tmp = execution_count; + + /* We'll use ld if we can't find collect2. */ + if (! strcmp (linker_name_spec, "collect2")) + { + char *s = find_a_file (&exec_prefixes, "collect2", X_OK); + if (s == NULL) + linker_name_spec = "ld"; + } + /* Rebuild the COMPILER_PATH and LIBRARY_PATH environment variables + for collect. */ + putenv_from_prefixes (&exec_prefixes, "COMPILER_PATH"); + putenv_from_prefixes (&startfile_prefixes, LIBRARY_PATH_ENV); + + value = do_spec (link_command_spec); + if (value < 0) + error_count = 1; + linker_was_run = (tmp != execution_count); + } + + /* If options said don't run linker, + complain about input files to be given to the linker. */ + + if (! linker_was_run && error_count == 0) + for (i = 0; (int) i < n_infiles; i++) + if (explicit_link_files[i]) + error ("%s: linker input file unused because linking not done", + outfiles[i]); + + /* Delete some or all of the temporary files we made. */ + + if (error_count) + delete_failure_queue (); + delete_temp_files (); + + if (print_help_list) + { + printf (("\nFor bug reporting instructions, please see:\n")); + printf ("%s\n", GCCBUGURL); + } + + return (signal_count != 0 ? 2 + : error_count > 0 ? (pass_exit_codes ? greatest_status : 1) + : 0); +} + +/* Find the proper compilation spec for the file name NAME, + whose length is LENGTH. LANGUAGE is the specified language, + or 0 if this file is to be passed to the linker. */ + +static struct compiler * +lookup_compiler (name, length, language) + const char *name; + size_t length; + const char *language; +{ + struct compiler *cp; + + /* If this was specified by the user to be a linker input, indicate that. */ + if (language != 0 && language[0] == '*') + return 0; + + /* Otherwise, look for the language, if one is spec'd. */ + if (language != 0) + { + for (cp = compilers + n_compilers - 1; cp >= compilers; cp--) + if (cp->suffix[0] == '@' && !strcmp (cp->suffix + 1, language)) + return cp; + + error ("language %s not recognized", language); + return 0; + } + + /* Look for a suffix. */ + for (cp = compilers + n_compilers - 1; cp >= compilers; cp--) + { + if (/* The suffix `-' matches only the file name `-'. */ + (!strcmp (cp->suffix, "-") && !strcmp (name, "-")) + || (strlen (cp->suffix) < length + /* See if the suffix matches the end of NAME. */ + && !strcmp (cp->suffix, + name + length - strlen (cp->suffix)) + )) + break; + } + +#if defined (OS2) ||defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* look again, but case-insensitively this time. */ + if (cp < compilers) + for (cp = compilers + n_compilers - 1; cp >= compilers; cp--) + { + if (/* The suffix `-' matches only the file name `-'. */ + (!strcmp (cp->suffix, "-") && !strcmp (name, "-")) + || (strlen (cp->suffix) < length + /* See if the suffix matches the end of NAME. */ + && ((!strcmp (cp->suffix, + name + length - strlen (cp->suffix)) + || !strpbrk (cp->suffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ")) + && !strcasecmp (cp->suffix, + name + length - strlen (cp->suffix))) + )) + break; + } +#endif + + if (cp >= compilers) + { + if (cp->spec[0] != '@') + /* A non-alias entry: return it. */ + return cp; + + /* An alias entry maps a suffix to a language. + Search for the language; pass 0 for NAME and LENGTH + to avoid infinite recursion if language not found. */ + return lookup_compiler (NULL, 0, cp->spec + 1); + } + return 0; +} + +static char * +save_string (s, len) + const char *s; + int len; +{ + char *result = xmalloc (len + 1); + + memcpy (result, s, len); + result[len] = 0; + return result; +} + +void +pfatal_with_name (name) + const char *name; +{ + perror_with_name (name); + delete_temp_files (); + exit (1); +} + +static void +perror_with_name (name) + const char *name; +{ + error ("%s: %s", name, xstrerror (errno)); +} + +static void +pfatal_pexecute (errmsg_fmt, errmsg_arg) + const char *errmsg_fmt; + const char *errmsg_arg; +{ + if (errmsg_arg) + { + int save_errno = errno; + + /* Space for trailing '\0' is in %s. */ + char *msg = xmalloc (strlen (errmsg_fmt) + strlen (errmsg_arg)); + sprintf (msg, errmsg_fmt, errmsg_arg); + errmsg_fmt = msg; + + errno = save_errno; + } + + pfatal_with_name (errmsg_fmt); +} + +/* Output an error message and exit */ + +void +fancy_abort () +{ + fatal ("internal gcc abort"); +} + +/* Output an error message and exit */ + +void +fatal VPARAMS ((const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, const char *, msgid); + + fprintf (stderr, "%s: ", programname); + vfprintf (stderr, _(msgid), ap); + VA_CLOSE (ap); + fprintf (stderr, "\n"); + delete_temp_files (); + exit (1); +} + +void +error VPARAMS ((const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, const char *, msgid); + + fprintf (stderr, "%s: ", programname); + vfprintf (stderr, _(msgid), ap); + VA_CLOSE (ap); + + fprintf (stderr, "\n"); +} + +static void +notice VPARAMS ((const char *msgid, ...)) +{ + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, const char *, msgid); + + vfprintf (stderr, _(msgid), ap); + VA_CLOSE (ap); +} + +static void +validate_all_switches () +{ + struct compiler *comp; + const char *p; + char c; + struct spec_list *spec; + + for (comp = compilers; comp->spec; comp++) + { + p = comp->spec; + while ((c = *p++)) + if (c == '%' && (*p == '{' || (*p == 'W' && *++p == '{'))) + /* We have a switch spec. */ + validate_switches (p + 1); + } + + /* Look through the linked list of specs read from the specs file. */ + for (spec = specs; spec; spec = spec->next) + { + p = *(spec->ptr_spec); + while ((c = *p++)) + if (c == '%' && (*p == '{' || (*p == 'W' && *++p == '{'))) + /* We have a switch spec. */ + validate_switches (p + 1); + } + + p = link_command_spec; + while ((c = *p++)) + if (c == '%' && (*p == '{' || (*p == 'W' && *++p == '{'))) + /* We have a switch spec. */ + validate_switches (p + 1); +} + +/* Look at the switch-name that comes after START + and mark as valid all supplied switches that match it. */ + +static void +validate_switches (start) + const char *start; +{ + const char *p = start; + const char *filter; + int i; + int suffix; + + if (*p == '|') + ++p; + +next_member: + if (*p == '!') + ++p; + + suffix = 0; + if (*p == '.') + suffix = 1, ++p; + + filter = p; + while (*p != ':' && *p != '}' && *p != '|' && *p != '&') + p++; + + if (suffix) + ; + else if (p[-1] == '*') + { + /* Mark all matching switches as valid. */ + for (i = 0; i < n_switches; i++) + if (!strncmp (switches[i].part1, filter, p - filter - 1)) + switches[i].validated = 1; + } + else + { + /* Mark an exact matching switch as valid. */ + for (i = 0; i < n_switches; i++) + { + if (!strncmp (switches[i].part1, filter, p - filter) + && switches[i].part1[p - filter] == 0) + switches[i].validated = 1; + } + } + + if (*p++ == '|' || p[-1] == '&') + goto next_member; +} + +/* Check whether a particular argument was used. The first time we + canonicalize the switches to keep only the ones we care about. */ + +static int +used_arg (p, len) + const char *p; + int len; +{ + struct mswitchstr + { + const char *str; + const char *replace; + int len; + int rep_len; + }; + + static struct mswitchstr *mswitches; + static int n_mswitches; + int i, j; + + if (!mswitches) + { + struct mswitchstr *matches; + const char *q; + int cnt = 0; + + /* Break multilib_matches into the component strings of string + and replacement string. */ + for (q = multilib_matches; *q != '\0'; q++) + if (*q == ';') + cnt++; + + matches = + (struct mswitchstr *) alloca ((sizeof (struct mswitchstr)) * cnt); + i = 0; + q = multilib_matches; + while (*q != '\0') + { + matches[i].str = q; + while (*q != ' ') + { + if (*q == '\0') + abort (); + q++; + } + matches[i].len = q - matches[i].str; + + matches[i].replace = ++q; + while (*q != ';' && *q != '\0') + { + if (*q == ' ') + abort (); + q++; + } + matches[i].rep_len = q - matches[i].replace; + i++; + if (*q == ';') + q++; + } + + /* Now build a list of the replacement string for switches that we care + about. Make sure we allocate at least one entry. This prevents + xmalloc from calling fatal, and prevents us from re-executing this + block of code. */ + mswitches + = (struct mswitchstr *) xmalloc ((sizeof (struct mswitchstr)) + * (n_switches ? n_switches : 1)); + for (i = 0; i < n_switches; i++) + { + int xlen = strlen (switches[i].part1); + for (j = 0; j < cnt; j++) + if (xlen == matches[j].len + && ! strncmp (switches[i].part1, matches[j].str, xlen)) + { + mswitches[n_mswitches].str = matches[j].replace; + mswitches[n_mswitches].len = matches[j].rep_len; + mswitches[n_mswitches].replace = (char *) 0; + mswitches[n_mswitches].rep_len = 0; + n_mswitches++; + break; + } + } + } + + for (i = 0; i < n_mswitches; i++) + if (len == mswitches[i].len && ! strncmp (p, mswitches[i].str, len)) + return 1; + + return 0; +} + +static int +default_arg (p, len) + const char *p; + int len; +{ + const char *start, *end; + + for (start = multilib_defaults; *start != '\0'; start = end + 1) + { + while (*start == ' ' || *start == '\t') + start++; + + if (*start == '\0') + break; + + for (end = start + 1; *end != ' ' && *end != '\t' && *end != '\0'; end++) + ; + + if ((end - start) == len && strncmp (p, start, len) == 0) + return 1; + + if (*end == '\0') + break; + } + + return 0; +} + +/* Work out the subdirectory to use based on the options. The format of + multilib_select is a list of elements. Each element is a subdirectory + name followed by a list of options followed by a semicolon. The format + of multilib_exclusions is the same, but without the preceding + directory. First gcc will check the exclusions, if none of the options + beginning with an exclamation point are present, and all of the other + options are present, then we will ignore this completely. Passing + that, gcc will consider each multilib_select in turn using the same + rules for matching the options. If a match is found, that subdirectory + will be used. */ + +static void +set_multilib_dir () +{ + const char *p; + unsigned int this_path_len; + const char *this_path, *this_arg; + int not_arg; + int ok; + + p = multilib_exclusions; + while (*p != '\0') + { + /* Ignore newlines. */ + if (*p == '\n') + { + ++p; + continue; + } + + /* Check the arguments. */ + ok = 1; + while (*p != ';') + { + if (*p == '\0') + abort (); + + if (! ok) + { + ++p; + continue; + } + + this_arg = p; + while (*p != ' ' && *p != ';') + { + if (*p == '\0') + abort (); + ++p; + } + + if (*this_arg != '!') + not_arg = 0; + else + { + not_arg = 1; + ++this_arg; + } + + ok = used_arg (this_arg, p - this_arg); + if (not_arg) + ok = ! ok; + + if (*p == ' ') + ++p; + } + + if (ok) + return; + + ++p; + } + + p = multilib_select; + while (*p != '\0') + { + /* Ignore newlines. */ + if (*p == '\n') + { + ++p; + continue; + } + + /* Get the initial path. */ + this_path = p; + while (*p != ' ') + { + if (*p == '\0') + abort (); + ++p; + } + this_path_len = p - this_path; + + /* Check the arguments. */ + ok = 1; + ++p; + while (*p != ';') + { + if (*p == '\0') + abort (); + + if (! ok) + { + ++p; + continue; + } + + this_arg = p; + while (*p != ' ' && *p != ';') + { + if (*p == '\0') + abort (); + ++p; + } + + if (*this_arg != '!') + not_arg = 0; + else + { + not_arg = 1; + ++this_arg; + } + + /* If this is a default argument, we can just ignore it. + This is true even if this_arg begins with '!'. Beginning + with '!' does not mean that this argument is necessarily + inappropriate for this library: it merely means that + there is a more specific library which uses this + argument. If this argument is a default, we need not + consider that more specific library. */ + if (! default_arg (this_arg, p - this_arg)) + { + ok = used_arg (this_arg, p - this_arg); + if (not_arg) + ok = ! ok; + } + + if (*p == ' ') + ++p; + } + + if (ok) + { + if (this_path_len != 1 + || this_path[0] != '.') + { + char *new_multilib_dir = xmalloc (this_path_len + 1); + strncpy (new_multilib_dir, this_path, this_path_len); + new_multilib_dir[this_path_len] = '\0'; + multilib_dir = new_multilib_dir; + } + break; + } + + ++p; + } +} + +/* Print out the multiple library subdirectory selection + information. This prints out a series of lines. Each line looks + like SUBDIRECTORY;@OPTION@OPTION, with as many options as is + required. Only the desired options are printed out, the negative + matches. The options are print without a leading dash. There are + no spaces to make it easy to use the information in the shell. + Each subdirectory is printed only once. This assumes the ordering + generated by the genmultilib script. Also, we leave out ones that match + the exclusions. */ + +static void +print_multilib_info () +{ + const char *p = multilib_select; + const char *last_path = 0, *this_path; + int skip; + unsigned int last_path_len = 0; + + while (*p != '\0') + { + skip = 0; + /* Ignore newlines. */ + if (*p == '\n') + { + ++p; + continue; + } + + /* Get the initial path. */ + this_path = p; + while (*p != ' ') + { + if (*p == '\0') + abort (); + ++p; + } + + /* Check for matches with the multilib_exclusions. We don't bother + with the '!' in either list. If any of the exclusion rules match + all of its options with the select rule, we skip it. */ + { + const char *e = multilib_exclusions; + const char *this_arg; + + while (*e != '\0') + { + int m = 1; + /* Ignore newlines. */ + if (*e == '\n') + { + ++e; + continue; + } + + /* Check the arguments. */ + while (*e != ';') + { + const char *q; + int mp = 0; + + if (*e == '\0') + abort (); + + if (! m) + { + ++e; + continue; + } + + this_arg = e; + + while (*e != ' ' && *e != ';') + { + if (*e == '\0') + abort (); + ++e; + } + + q = p + 1; + while (*q != ';') + { + const char *arg; + int len = e - this_arg; + + if (*q == '\0') + abort (); + + arg = q; + + while (*q != ' ' && *q != ';') + { + if (*q == '\0') + abort (); + ++q; + } + + if (! strncmp (arg, this_arg, (len < q - arg) ? q - arg : len) || + default_arg (this_arg, e - this_arg)) + { + mp = 1; + break; + } + + if (*q == ' ') + ++q; + } + + if (! mp) + m = 0; + + if (*e == ' ') + ++e; + } + + if (m) + { + skip = 1; + break; + } + + if (*e != '\0') + ++e; + } + } + + if (! skip) + { + /* If this is a duplicate, skip it. */ + skip = (last_path != 0 && (unsigned int) (p - this_path) == last_path_len + && ! strncmp (last_path, this_path, last_path_len)); + + last_path = this_path; + last_path_len = p - this_path; + } + + /* If this directory requires any default arguments, we can skip + it. We will already have printed a directory identical to + this one which does not require that default argument. */ + if (! skip) + { + const char *q; + + q = p + 1; + while (*q != ';') + { + const char *arg; + + if (*q == '\0') + abort (); + + if (*q == '!') + arg = NULL; + else + arg = q; + + while (*q != ' ' && *q != ';') + { + if (*q == '\0') + abort (); + ++q; + } + + if (arg != NULL + && default_arg (arg, q - arg)) + { + skip = 1; + break; + } + + if (*q == ' ') + ++q; + } + } + + if (! skip) + { + const char *p1; + + for (p1 = last_path; p1 < p; p1++) + putchar (*p1); + putchar (';'); + } + + ++p; + while (*p != ';') + { + int use_arg; + + if (*p == '\0') + abort (); + + if (skip) + { + ++p; + continue; + } + + use_arg = *p != '!'; + + if (use_arg) + putchar ('@'); + + while (*p != ' ' && *p != ';') + { + if (*p == '\0') + abort (); + if (use_arg) + putchar (*p); + ++p; + } + + if (*p == ' ') + ++p; + } + + if (! skip) + { + /* If there are extra options, print them now. */ + if (multilib_extra && *multilib_extra) + { + int print_at = TRUE; + const char *q; + + for (q = multilib_extra; *q != '\0'; q++) + { + if (*q == ' ') + print_at = TRUE; + else + { + if (print_at) + putchar ('@'); + putchar (*q); + print_at = FALSE; + } + } + } + + putchar ('\n'); + } + + ++p; + } +} diff --git a/src/mkutil/cpp/gcc.h b/src/mkutil/cpp/gcc.h new file mode 100644 index 00000000..1d2fb334 --- /dev/null +++ b/src/mkutil/cpp/gcc.h @@ -0,0 +1,55 @@ +/* Header file for modules that link with gcc.c + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + +#ifndef GCC_GCC_H +#define GCC_GCC_H + +#include "version.h" + +/* These are exported by gcc.c. */ +extern int do_spec PARAMS ((const char *)); +extern void record_temp_file PARAMS ((const char *, int, int)); +extern void fancy_abort PARAMS ((void)) ATTRIBUTE_NORETURN; +extern const char *input_filename; +extern size_t input_filename_length; +extern void fatal PARAMS ((const char *, ...)) + ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; +extern void error PARAMS ((const char *, ...)) ATTRIBUTE_PRINTF_1; +extern void pfatal_with_name PARAMS ((const char *)) ATTRIBUTE_NORETURN; +extern void set_input PARAMS ((const char *)); + +/* Spec files linked with gcc.c must provide definitions for these. */ + +/* Called before processing to change/add/remove arguments. */ +extern void lang_specific_driver PARAMS ((int *, const char *const **, int *)); + +/* Called before linking. Returns 0 on success and -1 on failure. */ +extern int lang_specific_pre_link PARAMS ((void)); + +extern int n_infiles; + +/* Number of extra output files that lang_specific_pre_link may generate. */ +extern int lang_specific_extra_outfiles; + +/* A vector of corresponding output files is made up later. */ + +extern const char **outfiles; + +#endif /* ! GCC_GCC_H */ diff --git a/src/mkutil/cpp/hashtable.h b/src/mkutil/cpp/hashtable.h new file mode 100644 index 00000000..1c612cb9 --- /dev/null +++ b/src/mkutil/cpp/hashtable.h @@ -0,0 +1,90 @@ +/* Hash tables. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef GCC_HASHTABLE_H +#define GCC_HASHTABLE_H + +#include "obstack.h" + +/* This is what each hash table entry points to. It may be embedded + deeply within another object. */ +typedef struct ht_identifier ht_identifier; +struct ht_identifier +{ + unsigned int len; + const unsigned char *str; +}; + +#define HT_LEN(NODE) ((NODE)->len) +#define HT_STR(NODE) ((NODE)->str) + +/* We want code outside cpplib, such as the compiler front-ends, to be + able to include this header, and to be able to link with + cpphashtbl.o without pulling in any other parts of cpplib. */ + +struct cpp_reader; +typedef struct ht hash_table; +typedef struct ht_identifier *hashnode; + +enum ht_lookup_option {HT_NO_INSERT = 0, HT_ALLOC, HT_ALLOCED}; + +/* An identifier hash table for cpplib and the front ends. */ +struct ht +{ + /* Identifiers are allocated from here. */ + struct obstack stack; + + hashnode *entries; + /* Call back. */ + hashnode (*alloc_node) PARAMS ((hash_table *)); + + unsigned int nslots; /* Total slots in the entries array. */ + unsigned int nelements; /* Number of live elements. */ + + /* Link to reader, if any. For the benefit of cpplib. */ + struct cpp_reader *pfile; + + /* Table usage statistics. */ + unsigned int searches; + unsigned int collisions; +}; + +extern void gcc_obstack_init PARAMS ((struct obstack *)); + +/* Initialise the hashtable with 2 ^ order entries. */ +extern hash_table *ht_create PARAMS ((unsigned int order)); + +/* Frees all memory associated with a hash table. */ +extern void ht_destroy PARAMS ((hash_table *)); + +extern hashnode ht_lookup PARAMS ((hash_table *, const unsigned char *, + unsigned int, enum ht_lookup_option)); + +/* For all nodes in TABLE, make a callback. The callback takes + TABLE->PFILE, the node, and a PTR, and the callback sequence stops + if the callback returns zero. */ +typedef int (*ht_cb) PARAMS ((struct cpp_reader *, hashnode, const void *)); +extern void ht_forall PARAMS ((hash_table *, ht_cb, const void *)); + +/* Dump allocation statistics to stderr. */ +extern void ht_dump_statistics PARAMS ((hash_table *)); + +/* Approximate positive square root of a host double. This is for + statistical reports, not code generation. */ +extern double approx_sqrt PARAMS ((double)); + +#endif /* GCC_HASHTABLE_H */ diff --git a/src/mkutil/cpp/hex.c b/src/mkutil/cpp/hex.c new file mode 100644 index 00000000..8c77e1ec --- /dev/null +++ b/src/mkutil/cpp/hex.c @@ -0,0 +1,111 @@ +/* Hex character manipulation support. + Copyright (C) 1995, 2001 Free Software Foundation, Inc. + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include /* for EOF */ +#include "libiberty.h" + +/* Provided for ABI compatibility. */ +void +hex_init () +{ +} + +/* Are we ASCII? */ +#if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \ + && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21 \ + && EOF == -1 + +const char _hex_value[_hex_array_size] = +{ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* NUL SOH STX ETX */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* EOT ENQ ACK BEL */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* BS HT LF VT */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FF CR SO SI */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DLE DC1 DC2 DC3 */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DC4 NAK SYN ETB */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* CAN EM SUB ESC */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FS GS RS US */ + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* SP ! " # */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* $ % & ' */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* ( ) * + */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* , - . / */ + 0, 1, 2, 3, /* 0 1 2 3 */ + 4, 5, 6, 7, /* 4 5 6 7 */ + 8, 9, _hex_bad, _hex_bad, /* 8 9 : ; */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* < = > ? */ + + _hex_bad, 10, 11, 12, /* @ A B C */ + 13, 14, 15, _hex_bad, /* D E F G */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* H I J K */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* L M N O */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* P Q R S */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* T U V W */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* X Y Z [ */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* \ ] ^ _ */ + + _hex_bad, 10, 11, 12, /* ` a b c */ + 13, 14, 15, _hex_bad, /* d e f g */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* h i j k */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* l m n o */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* p q r s */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* t u v w */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* x y z { */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* | } ~ DEL */ + + /* The high half of unsigned char, all values are _hex_bad. */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, +}; +#else + #error "Unsupported host character set" +#endif /* not ASCII */ diff --git a/src/mkutil/cpp/hex.obj b/src/mkutil/cpp/hex.obj new file mode 100644 index 0000000000000000000000000000000000000000..5fea152f68164814e486c99c477fde63c07979dc GIT binary patch literal 1295 zcmcgs&2G~`5FXq4Ytn?Mh$4XiSE>+@c1ep=RS{A`0unzdMJ@CcWE^LcE;xzhY?2Zl zfjbgBMi0CIufYTKz=ao}%&cva2r9&dk=FC~&F&@I|JYX1j1TAcjSnN zE?h_BYve>aod?$9&0%MCKMLhF03Fwo9zn+~4hpu!*vs8ant(mid-TM8f_jVra zo7BiEEU3aOPN^}Rh{nKo8r?TTDcpwRd5uGU#QM$GkFjy;skS2=zdz`=rFmoTrg>*` zy(y$wyIm_3%w124u9%2k$E@|co^ZKu9&mpk`aN@FlNF0>dt+;x6&YmmQLm(FUwQ>v zYfJc0qNVU?OZ0@)ApsX5l^_4gr7g;hY4}1@QRdQrot{BJ<2wlXLflr~8hGVqo3uWMQXr;mVM*&SYV(~;WwGbAj zGmF{WxwCiqTmJ0I|B`v}{@cqh^r1lgG!1BwZox9VUCx&8qJ8zx!!&ZXip*;@zq2+@ z2bH7zI0fivG-pl_2%i-Phlq*R$+a|`BE~?{P05Ko0z)Hu&dV$@sVhSxYAQM&uYC-# zv!qmmrx7iG7pfv5j1IFDrHp~s2Z;^`CxwnO)gzki7?^k^ 3000 +# define HOST_BITS_PER_LONGLONG LONG_LONG_TYPE_SIZE +# endif /* gcc */ +#endif +#endif /* no long long */ + +/* Find the largest host integer type and set its size and type. */ + +/* Use long long on the host if the target has a wider long type than + the host. */ + +#if ! defined HOST_BITS_PER_WIDE_INT \ + && defined HOST_BITS_PER_LONGLONG \ + && (HOST_BITS_PER_LONGLONG > HOST_BITS_PER_LONG) \ + && (defined (LONG_LONG_MAX) || defined (LONGLONG_MAX) \ + || defined (LLONG_MAX) || defined (__GNUC__)) + +# ifdef MAX_LONG_TYPE_SIZE +# if MAX_LONG_TYPE_SIZE > HOST_BITS_PER_LONG +# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONGLONG +# define HOST_WIDE_INT long long +# endif +# else +# if LONG_TYPE_SIZE > HOST_BITS_PER_LONG +# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONGLONG +# define HOST_WIDE_INT long long +# endif +# endif + +#endif + +#ifndef HOST_BITS_PER_WIDE_INT + +# if HOST_BITS_PER_LONG > HOST_BITS_PER_INT +# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG +# define HOST_WIDE_INT long +# else +# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT +# define HOST_WIDE_INT int +# endif + +#endif /* ! HOST_BITS_PER_WIDE_INT */ + +/* Provide defaults for the way to print a HOST_WIDE_INT + in various manners. */ + +#ifndef HOST_WIDE_INT_PRINT_DEC +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT +# define HOST_WIDE_INT_PRINT_DEC "%d" +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG +# define HOST_WIDE_INT_PRINT_DEC "%ld" +# else +# define HOST_WIDE_INT_PRINT_DEC "%lld" +# endif +# endif +#endif /* ! HOST_WIDE_INT_PRINT_DEC */ + +#ifndef HOST_WIDE_INT_PRINT_UNSIGNED +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT +# define HOST_WIDE_INT_PRINT_UNSIGNED "%u" +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG +# define HOST_WIDE_INT_PRINT_UNSIGNED "%lu" +# else +# define HOST_WIDE_INT_PRINT_UNSIGNED "%llu" +# endif +# endif +#endif /* ! HOST_WIDE_INT_PRINT_UNSIGNED */ + +#ifndef HOST_WIDE_INT_PRINT_HEX +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT +# define HOST_WIDE_INT_PRINT_HEX "0x%x" +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG +# define HOST_WIDE_INT_PRINT_HEX "0x%lx" +# else +# define HOST_WIDE_INT_PRINT_HEX "0x%llx" +# endif +# endif +#endif /* ! HOST_WIDE_INT_PRINT_HEX */ + +#ifndef HOST_WIDE_INT_PRINT_DOUBLE_HEX +# if HOST_BITS_PER_WIDE_INT == 64 +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%x%016x" +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%lx%016lx" +# else +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%llx%016llx" +# endif +# endif +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%x%08x" +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%lx%08lx" +# else +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%llx%08llx" +# endif +# endif +# endif +#endif /* ! HOST_WIDE_INT_PRINT_DOUBLE_HEX */ + +/* Find HOST_WIDEST_INT and set its bit size, type and print macros. + It will be the largest integer mode supported by the host which may + (or may not) be larger than HOST_WIDE_INT. */ + +#ifndef HOST_WIDEST_INT +#if defined HOST_BITS_PER_LONGLONG \ + && HOST_BITS_PER_LONGLONG > HOST_BITS_PER_LONG +# define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONGLONG +# define HOST_WIDEST_INT long long +# define HOST_WIDEST_INT_PRINT_DEC "%lld" +# define HOST_WIDEST_INT_PRINT_UNSIGNED "%llu" +# define HOST_WIDEST_INT_PRINT_HEX "0x%llx" +# else +# define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONG +# define HOST_WIDEST_INT long +# define HOST_WIDEST_INT_PRINT_DEC "%ld" +# define HOST_WIDEST_INT_PRINT_UNSIGNED "%lu" +# define HOST_WIDEST_INT_PRINT_HEX "0x%lx" +# endif /* long long wider than long */ +#endif /* ! HOST_WIDEST_INT */ + +#endif /* ! GCC_HWINT_H */ diff --git a/src/mkutil/cpp/intl.h b/src/mkutil/cpp/intl.h new file mode 100644 index 00000000..064b027b --- /dev/null +++ b/src/mkutil/cpp/intl.h @@ -0,0 +1,61 @@ +/* intl.h - internationalization + Copyright 1998, 2001 Free Software Foundation, Inc. + + GCC 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, or (at your option) + any later version. + + GCC 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 GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#ifndef GCC_INTL_H +#define GCC_INTL_H + +#ifdef HAVE_LOCALE_H +# include +#endif + +#ifndef HAVE_SETLOCALE +# define setlocale(category, locale) (locale) +#endif + +#ifdef USE_INCLUDED_LIBINTL +# include +#else +# ifdef HAVE_LIBINTL_H +# include +# else +# undef ENABLE_NLS +# endif +#endif + +#ifdef ENABLE_NLS +extern void gcc_init_libintl PARAMS ((void)); +#else +/* Stubs. */ +# undef textdomain +# define textdomain(domain) (domain) +# undef bindtextdomain +# define bindtextdomain(domain, directory) (domain) +# undef gettext +# define gettext(msgid) (msgid) +# define gcc_init_libintl() /* nothing */ +#endif + +#ifndef _ +# define _(msgid) gettext (msgid) +#endif + +#ifndef N_ +# define N_(msgid) (msgid) +#endif + +#endif /* intl.h */ diff --git a/src/mkutil/cpp/lbasename.c b/src/mkutil/cpp/lbasename.c new file mode 100644 index 00000000..d33c9604 --- /dev/null +++ b/src/mkutil/cpp/lbasename.c @@ -0,0 +1,88 @@ +/* Libiberty basename. Like basename, but is not overridden by the + system C library. + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* + +@deftypefn Replacement {const char*} lbasename (const char *@var{name}) + +Given a pointer to a string containing a typical pathname +(@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the +last component of the pathname (@samp{ls.c} in this case). The +returned pointer is guaranteed to lie within the original +string. This latter fact is not true of many vendor C +libraries, which return special strings or modify the passed +strings for particular input. + +In particular, the empty string returns the same empty string, +and a path ending in @code{/} returns the empty string after it. + +@end deftypefn + +*/ + +#include "ansidecl.h" +#include "libiberty.h" +#include "safe-ctype.h" + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) \ + || defined (__DJGPP__) || defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +#endif + +/* Define IS_DIR_SEPARATOR. VMS uses '::', ':', '[...]' and '<...>' to + separate the different components of a file specification. It's a + bit of a stretch to call ':', ']' and '>' directory separators, so + just define the test to find the file name component. */ +#ifdef VMS +# define IS_DIR_SEPARATOR(ch) ((ch) == ':' || (ch) == ']' || (ch) == '>') +#else +# ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +# else +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +# endif +#endif + +const char * +lbasename (name) + const char *name; +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over a possible disk name. */ + if (ISALPHA (name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + + return base; +} diff --git a/src/mkutil/cpp/lbasename.obj b/src/mkutil/cpp/lbasename.obj new file mode 100644 index 0000000000000000000000000000000000000000..a22e274232973149ddc0b0a1d90680f66422e37e GIT binary patch literal 1128 zcmZuw&1(};5TDJqag#Jnv|8|>Zc#)neN9^^wFj$B1GO|(tq~8AnBBb8t(zufUrMba zlu$4%c=P7LKf-gViZ@R^svruYST8+zs08E8Za%i)z&LUfu5z9t;R-5%o+ z!SC6)p5u~00Tr&_Yrc1@MUA2I4)47}?+xX6K3g$`X=s!4SEu8u7g(5|xppO)SX9aJ z0t6iA)B0q(vTmfUvYswHs0hPM>!niK)Up;|$rd;(YRhvNM>n$LNkcCetzurN=Wd=? z$3}-VL#XlL_~4+rP!dMLST|Od)OfK_GE81pZ}YNc6j#)dQ5K7_iIMRM78{08)EhPZ zF=b;7*LEw-AO+e1M8F?a@RFfh7ez!sz0qhm0EOuTKO6@o`sfJK9O=ne`u&VyiL7Sw zFv!sg!hXwG=NZw9W(mJ|Xf>NLk@5nsC>0@i+0=sY(Xk2p+|+`QvVYyM6G~)D+4#~x zbZjSYA5EeH8(*K|zPTfgIrpf?Mi-c-SAFx`g=2|Cf7JACIw8PTOO7tQ_)4{^D;gN$o-~-G$+@js<2$ z?#HPhG>{`>yLZNdI$V}$Fb;}$Bq%CbqM@Ka>GSW+xLofz$PS0vgN9)A=d({Phj#KJ zk#RVDQV(jxqk-v2q@!XMn3iwb^fIR~VXlpl!c3P#-R5wBaTlT2J6?B)+!pU>Qe3h` RbvY;}(9E +/* Get a definition for va_list. */ +#include +#endif + +/* Build an argument vector from a string. Allocates memory using + malloc. Use freeargv to free the vector. */ + +extern char **buildargv PARAMS ((const char *)) ATTRIBUTE_MALLOC; + +/* Free a vector returned by buildargv. */ + +extern void freeargv PARAMS ((char **)); + +/* Duplicate an argument vector. Allocates memory using malloc. Use + freeargv to free the vector. */ + +extern char **dupargv PARAMS ((char **)) ATTRIBUTE_MALLOC; + + +/* Return the last component of a path name. Note that we can't use a + prototype here because the parameter is declared inconsistently + across different systems, sometimes as "char *" and sometimes as + "const char *" */ + +/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is + undefined, we haven't run the autoconf check so provide the + declaration without arguments. If it is 0, we checked and failed + to find the declaration so provide a fully prototyped one. If it + is 1, we found it so don't provide any declaration at all. */ +#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || (defined (HAVE_DECL_BASENAME) && !HAVE_DECL_BASENAME) +extern char *basename PARAMS ((const char *)); +#else +# if !defined (HAVE_DECL_BASENAME) +extern char *basename (); +# endif +#endif + +/* A well-defined basename () that is always compiled in. */ + +extern const char *lbasename PARAMS ((const char *)); + +/* Concatenate an arbitrary number of strings. You must pass NULL as + the last argument of this function, to terminate the list of + strings. Allocates memory using xmalloc. */ + +extern char *concat PARAMS ((const char *, ...)) ATTRIBUTE_MALLOC; + +/* Concatenate an arbitrary number of strings. You must pass NULL as + the last argument of this function, to terminate the list of + strings. Allocates memory using xmalloc. The first argument is + not one of the strings to be concatenated, but if not NULL is a + pointer to be freed after the new string is created, similar to the + way xrealloc works. */ + +extern char *reconcat PARAMS ((char *, const char *, ...)) ATTRIBUTE_MALLOC; + +/* Determine the length of concatenating an arbitrary number of + strings. You must pass NULL as the last argument of this function, + to terminate the list of strings. */ + +extern unsigned long concat_length PARAMS ((const char *, ...)); + +/* Concatenate an arbitrary number of strings into a SUPPLIED area of + memory. You must pass NULL as the last argument of this function, + to terminate the list of strings. The supplied memory is assumed + to be large enough. */ + +extern char *concat_copy PARAMS ((char *, const char *, ...)); + +/* Concatenate an arbitrary number of strings into a GLOBAL area of + memory. You must pass NULL as the last argument of this function, + to terminate the list of strings. The supplied memory is assumed + to be large enough. */ + +extern char *concat_copy2 PARAMS ((const char *, ...)); + +/* This is the global area used by concat_copy2. */ + +extern char *libiberty_concat_ptr; + +/* Concatenate an arbitrary number of strings. You must pass NULL as + the last argument of this function, to terminate the list of + strings. Allocates memory using alloca. The arguments are + evaluated twice! */ +#define ACONCAT(ACONCAT_PARAMS) \ + (libiberty_concat_ptr = alloca (concat_length ACONCAT_PARAMS + 1), \ + concat_copy2 ACONCAT_PARAMS) + +/* Check whether two file descriptors refer to the same file. */ + +extern int fdmatch PARAMS ((int fd1, int fd2)); + +/* Get the working directory. The result is cached, so don't call + chdir() between calls to getpwd(). */ + +extern char * getpwd PARAMS ((void)); + +/* Get the amount of time the process has run, in microseconds. */ + +extern long get_run_time PARAMS ((void)); + +/* Choose a temporary directory to use for scratch files. */ + +extern char *choose_temp_base PARAMS ((void)) ATTRIBUTE_MALLOC; + +/* Return a temporary file name or NULL if unable to create one. */ + +extern char *make_temp_file PARAMS ((const char *)) ATTRIBUTE_MALLOC; + +/* Allocate memory filled with spaces. Allocates using malloc. */ + +extern const char *spaces PARAMS ((int count)); + +/* Return the maximum error number for which strerror will return a + string. */ + +extern int errno_max PARAMS ((void)); + +/* Return the name of an errno value (e.g., strerrno (EINVAL) returns + "EINVAL"). */ + +extern const char *strerrno PARAMS ((int)); + +/* Given the name of an errno value, return the value. */ + +extern int strtoerrno PARAMS ((const char *)); + +/* ANSI's strerror(), but more robust. */ + +extern char *xstrerror PARAMS ((int)); + +/* Return the maximum signal number for which strsignal will return a + string. */ + +extern int signo_max PARAMS ((void)); + +/* Return a signal message string for a signal number + (e.g., strsignal (SIGHUP) returns something like "Hangup"). */ +/* This is commented out as it can conflict with one in system headers. + We still document its existence though. */ + +/*extern const char *strsignal PARAMS ((int));*/ + +/* Return the name of a signal number (e.g., strsigno (SIGHUP) returns + "SIGHUP"). */ + +extern const char *strsigno PARAMS ((int)); + +/* Given the name of a signal, return its number. */ + +extern int strtosigno PARAMS ((const char *)); + +/* Register a function to be run by xexit. Returns 0 on success. */ + +extern int xatexit PARAMS ((void (*fn) (void))); + +/* Exit, calling all the functions registered with xatexit. */ + +extern void xexit PARAMS ((int status)) ATTRIBUTE_NORETURN; + +/* Set the program name used by xmalloc. */ + +extern void xmalloc_set_program_name PARAMS ((const char *)); + +/* Report an allocation failure. */ +extern void xmalloc_failed PARAMS ((size_t)) ATTRIBUTE_NORETURN; + +/* Allocate memory without fail. If malloc fails, this will print a + message to stderr (using the name set by xmalloc_set_program_name, + if any) and then call xexit. */ + +extern PTR xmalloc PARAMS ((size_t)) ATTRIBUTE_MALLOC; + +/* Reallocate memory without fail. This works like xmalloc. Note, + realloc type functions are not suitable for attribute malloc since + they may return the same address across multiple calls. */ + +extern PTR xrealloc PARAMS ((PTR, size_t)); + +/* Allocate memory without fail and set it to zero. This works like + xmalloc. */ + +extern PTR xcalloc PARAMS ((size_t, size_t)) ATTRIBUTE_MALLOC; + +/* Copy a string into a memory buffer without fail. */ + +extern char *xstrdup PARAMS ((const char *)) ATTRIBUTE_MALLOC; + +/* Copy an existing memory buffer to a new memory buffer without fail. */ + +extern PTR xmemdup PARAMS ((const PTR, size_t, size_t)) ATTRIBUTE_MALLOC; + +/* hex character manipulation routines */ + +#define _hex_array_size 256 +#define _hex_bad 99 +extern const char _hex_value[_hex_array_size]; +extern void hex_init PARAMS ((void)); +#define hex_p(c) (hex_value (c) != _hex_bad) +/* If you change this, note well: Some code relies on side effects in + the argument being performed exactly once. */ +#define hex_value(c) (_hex_value[(unsigned char) (c)]) + +/* Definitions used by the pexecute routine. */ + +#define PEXECUTE_FIRST 1 +#define PEXECUTE_LAST 2 +#define PEXECUTE_ONE (PEXECUTE_FIRST + PEXECUTE_LAST) +#define PEXECUTE_SEARCH 4 +#define PEXECUTE_VERBOSE 8 + +/* Execute a program. */ + +extern int pexecute PARAMS ((const char *, char * const *, const char *, + const char *, char **, char **, int)); + +/* Wait for pexecute to finish. */ + +extern int pwait PARAMS ((int, int *, int)); + +/* Like sprintf but provides a pointer to malloc'd storage, which must + be freed by the caller. */ + +extern int asprintf PARAMS ((char **, const char *, ...)) ATTRIBUTE_PRINTF_2; + +/* Like vsprintf but provides a pointer to malloc'd storage, which + must be freed by the caller. */ + +extern int vasprintf PARAMS ((char **, const char *, va_list)) + ATTRIBUTE_PRINTF(2,0); + +#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) + +/* Drastically simplified alloca configurator. If we're using GCC, + we use __builtin_alloca; otherwise we use the C alloca. The C + alloca is always available. You can override GCC by defining + USE_C_ALLOCA yourself. The canonical autoconf macro C_ALLOCA is + also set/unset as it is often used to indicate whether code needs + to call alloca(0). */ +extern PTR C_alloca PARAMS ((size_t)) ATTRIBUTE_MALLOC; +#undef alloca +#if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA +# define alloca(x) __builtin_alloca(x) +# undef C_ALLOCA +# define ASTRDUP(X) \ + (__extension__ ({ const char *const libiberty_optr = (X); \ + const unsigned long libiberty_len = strlen (libiberty_optr) + 1; \ + char *const libiberty_nptr = alloca (libiberty_len); \ + (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len); })) +#else +# define alloca(x) C_alloca(x) +# undef USE_C_ALLOCA +# define USE_C_ALLOCA 1 +# undef C_ALLOCA +# define C_ALLOCA 1 +extern const char *libiberty_optr; +extern char *libiberty_nptr; +extern unsigned long libiberty_len; +# define ASTRDUP(X) \ + (libiberty_optr = (X), \ + libiberty_len = strlen (libiberty_optr) + 1, \ + libiberty_nptr = alloca (libiberty_len), \ + (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len)) +#endif + +#ifdef __cplusplus +} +#endif + + +#endif /* ! defined (LIBIBERTY_H) */ diff --git a/src/mkutil/cpp/line-map.c b/src/mkutil/cpp/line-map.c new file mode 100644 index 00000000..6781eab7 --- /dev/null +++ b/src/mkutil/cpp/line-map.c @@ -0,0 +1,235 @@ +/* Map logical line numbers to (source file, line number) pairs. + Copyright (C) 2001 + Free Software Foundation, Inc. + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + +#include "config.h" +#include "system.h" +#include "line-map.h" +#include "intl.h" + +static void trace_include + PARAMS ((const struct line_maps *, const struct line_map *)); + +/* Initialize a line map set. */ + +void +init_line_maps (set) + struct line_maps *set; +{ + set->maps = 0; + set->allocated = 0; + set->used = 0; + set->last_listed = -1; + set->trace_includes = false; + set->depth = 0; +} + +/* Free a line map set. */ + +void +free_line_maps (set) + struct line_maps *set; +{ + if (set->maps) + { + struct line_map *map; + + /* Depending upon whether we are handling preprocessed input or + not, this can be a user error or an ICE. */ + for (map = CURRENT_LINE_MAP (set); ! MAIN_FILE_P (map); + map = INCLUDED_FROM (set, map)) + fprintf (stderr, "line-map.c: file \"%s\" entered but not left\n", + map->to_file); + + free (set->maps); + } +} + +/* Add a mapping of logical source line to physical source file and + line number. Ther text pointed to by TO_FILE must have a lifetime + at least as long as the final call to lookup_line (). + + FROM_LINE should be monotonic increasing across calls to this + function. */ + +const struct line_map * +add_line_map (set, reason, sysp, from_line, to_file, to_line) + struct line_maps *set; + enum lc_reason reason; + unsigned int sysp; + unsigned int from_line; + const char *to_file; + unsigned int to_line; +{ + struct line_map *map; + + if (set->used && from_line < set->maps[set->used - 1].from_line) + abort (); + + if (set->used == set->allocated) + { + set->allocated = 2 * set->allocated + 256; + set->maps = (struct line_map *) + xrealloc (set->maps, set->allocated * sizeof (struct line_map)); + } + + map = &set->maps[set->used++]; + + /* If we don't keep our line maps consistent, we can easily + segfault. Don't rely on the client to do it for us. */ + if (set->depth == 0) + reason = LC_ENTER; + else if (reason == LC_LEAVE) + { + struct line_map *from; + bool error; + + if (MAIN_FILE_P (map - 1)) + { + error = true; + reason = LC_RENAME; + from = map - 1; + } + else + { + from = INCLUDED_FROM (set, map - 1); + error = to_file && strcmp (from->to_file, to_file); + } + + /* Depending upon whether we are handling preprocessed input or + not, this can be a user error or an ICE. */ + if (error) + fprintf (stderr, "line-map.c: file \"%s\" left but not entered\n", + to_file); + + /* A TO_FILE of NULL is special - we use the natural values. */ + if (error || to_file == NULL) + { + to_file = from->to_file; + to_line = LAST_SOURCE_LINE (from) + 1; + sysp = from->sysp; + } + } + + map->reason = reason; + map->sysp = sysp; + map->from_line = from_line; + map->to_file = to_file; + map->to_line = to_line; + + if (reason == LC_ENTER) + { + set->depth++; + map->included_from = set->used - 2; + if (set->trace_includes) + trace_include (set, map); + } + else if (reason == LC_RENAME) + map->included_from = map[-1].included_from; + else if (reason == LC_LEAVE) + { + set->depth--; + map->included_from = INCLUDED_FROM (set, map - 1)->included_from; + } + + return map; +} + +/* Given a logical line, returns the map from which the corresponding + (source file, line) pair can be deduced. Since the set is built + chronologically, the logical lines are monotonic increasing, and so + the list is sorted and we can use a binary search. */ + +const struct line_map * +lookup_line (set, line) + struct line_maps *set; + unsigned int line; +{ + unsigned int md, mn = 0, mx = set->used; + + if (mx == 0) + abort (); + + while (mx - mn > 1) + { + md = (mn + mx) / 2; + if (set->maps[md].from_line > line) + mx = md; + else + mn = md; + } + + return &set->maps[mn]; +} + +/* Print the file names and line numbers of the #include commands + which led to the map MAP, if any, to stderr. Nothing is output if + the most recently listed stack is the same as the current one. */ + +void +print_containing_files (set, map) + struct line_maps *set; + const struct line_map *map; +{ + if (MAIN_FILE_P (map) || set->last_listed == map->included_from) + return; + + set->last_listed = map->included_from; + map = INCLUDED_FROM (set, map); + + fprintf (stderr, _("In file included from %s:%u"), + map->to_file, LAST_SOURCE_LINE (map)); + + while (! MAIN_FILE_P (map)) + { + map = INCLUDED_FROM (set, map); + /* Translators note: this message is used in conjunction + with "In file included from %s:%ld" and some other + tricks. We want something like this: + + | In file included from sys/select.h:123, + | from sys/types.h:234, + | from userfile.c:31: + | bits/select.h:45: + + with all the "from"s lined up. + The trailing comma is at the beginning of this message, + and the trailing colon is not translated. */ + fprintf (stderr, _(",\n from %s:%u"), + map->to_file, LAST_SOURCE_LINE (map)); + } + + fputs (":\n", stderr); +} + +/* Print an include trace, for e.g. the -H option of the preprocessor. */ + +static void +trace_include (set, map) + const struct line_maps *set; + const struct line_map *map; +{ + unsigned int i = set->depth; + + while (--i) + putc ('.', stderr); + fprintf (stderr, " %s\n", map->to_file); +} diff --git a/src/mkutil/cpp/line-map.h b/src/mkutil/cpp/line-map.h new file mode 100644 index 00000000..37a9cc60 --- /dev/null +++ b/src/mkutil/cpp/line-map.h @@ -0,0 +1,119 @@ +/* Map logical line numbers to (source file, line number) pairs. + Copyright (C) 2001 + Free Software Foundation, Inc. + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + +#ifndef GCC_LINE_MAP_H +#define GCC_LINE_MAP_H + +/* Reason for adding a line change with add_line_map (). LC_ENTER is + when including a new file, e.g. a #include directive in C. + LC_LEAVE is when reaching a file's end. LC_RENAME is when a file + name or line number changes for neither of the above reasons + (e.g. a #line directive in C). */ +enum lc_reason {LC_ENTER = 0, LC_LEAVE, LC_RENAME}; + +/* The logical line FROM_LINE maps to physical source file TO_FILE at + line TO_LINE, and subsequently one-to-one until the next line_map + structure in the set. INCLUDED_FROM is an index into the set that + gives the line mapping at whose end the current one was included. + File(s) at the bottom of the include stack have this set to -1. + REASON is the reason for creation of this line map, SYSP is one for + a system header, two for a C system header file that therefore + needs to be extern "C" protected in C++, and zero otherwise. */ +struct line_map +{ + const char *to_file; + unsigned int to_line; + unsigned int from_line; + int included_from; + ENUM_BITFIELD (lc_reason) reason : CHAR_BIT; + unsigned char sysp; +}; + +/* A set of chronological line_map structures. */ +struct line_maps +{ + struct line_map *maps; + unsigned int allocated; + unsigned int used; + + /* The most recently listed include stack, if any, starts with + LAST_LISTED as the topmost including file. -1 indicates nothing + has been listed yet. */ + int last_listed; + + /* Depth of the include stack, including the current file. */ + unsigned int depth; + + /* If true, prints an include trace a la -H. */ + bool trace_includes; +}; + +/* Initialize a line map set. */ +extern void init_line_maps + PARAMS ((struct line_maps *)); + +/* Free a line map set. */ +extern void free_line_maps + PARAMS ((struct line_maps *)); + +/* Add a mapping of logical source line to physical source file and + line number. The text pointed to by TO_FILE must have a lifetime + at least as long as the line maps. If reason is LC_LEAVE, and + TO_FILE is NULL, then TO_FILE, TO_LINE and SYSP are given their + natural values considering the file we are returning to. + + FROM_LINE should be monotonic increasing across calls to this + function. A call to this function can relocate the previous set of + maps, so any stored line_map pointers should not be used. */ +extern const struct line_map *add_line_map + PARAMS ((struct line_maps *, enum lc_reason, unsigned int sysp, + unsigned int from_line, const char *to_file, unsigned int to_line)); + +/* Given a logical line, returns the map from which the corresponding + (source file, line) pair can be deduced. */ +extern const struct line_map *lookup_line + PARAMS ((struct line_maps *, unsigned int)); + +/* Print the file names and line numbers of the #include commands + which led to the map MAP, if any, to stderr. Nothing is output if + the most recently listed stack is the same as the current one. */ +extern void print_containing_files + PARAMS ((struct line_maps *, const struct line_map *)); + +/* Converts a map and logical line to source line. */ +#define SOURCE_LINE(MAP, LINE) ((LINE) + (MAP)->to_line - (MAP)->from_line) + +/* Returns the last source line within a map. This is the (last) line + of the #include, or other directive, that caused a map change. */ +#define LAST_SOURCE_LINE(MAP) SOURCE_LINE ((MAP), (MAP)[1].from_line - 1) + +/* Returns the map a given map was included from. */ +#define INCLUDED_FROM(SET, MAP) (&(SET)->maps[(MAP)->included_from]) + +/* Non-zero if the map is at the bottom of the include stack. */ +#define MAIN_FILE_P(MAP) ((MAP)->included_from < 0) + +/* The current line map. Saves a call to lookup_line if the caller is + sure he is in the scope of the current map. */ +#define CURRENT_LINE_MAP(MAPS) ((MAPS)->maps + (MAPS)->used - 1) + +#endif /* !GCC_LINE_MAP_H */ diff --git a/src/mkutil/cpp/makefile b/src/mkutil/cpp/makefile new file mode 100644 index 00000000..d01ae028 --- /dev/null +++ b/src/mkutil/cpp/makefile @@ -0,0 +1,80 @@ +# makefile by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +SRCDIR=..\\.. +MAKEDIR=$(SRCDIR)\\makedir + +TARGETS=$(BINDIR)\\cpp.exe +SUBDIRS= + +include $(MAKEDIR)\\x86_make + +# ----------------------------------------------------------------------------- + +CPPFLAGS=-I. $(DEFAULT_CPPFLAGS) + +# ----------------------------------------------------------------------------- + +cppdefault.obj: cppdefault.c + +cpperror.obj: cpperror.c + +cppexp.obj: cppexp.c + +cppfiles.obj: cppfiles.c + +cpphash.obj: cpphash.c + +cppinit.obj: cppinit.c + +cpplex.obj: cpplex.c + +cpplib.obj: cpplib.c + +cppmacro.obj: cppmacro.c + +cppmain.obj: cppmain.c + +cppspec.obj: cppspec.c + +gcc.obj: gcc.c + +line-map.obj: line-map.c + +mkdeps.obj: mkdeps.c + +version.obj: version.c + +alloca.obj: alloca.c + +hex.obj: hex.c + +lbasename.obj: lbasename.c + +obstack.obj: obstack.c + +safe-ctype.obj: safe-ctype.c + +xexit.obj: xexit.c + +xmalloc.obj: xmalloc.c + +xstrdup.obj: xstrdup.c + +xstrerror.obj: xstrerror.c + +cppmain.exe: cppdefault.obj cpperror.obj cppexp.obj cppfiles.obj \ + cpphash.obj cppinit.obj cpplex.obj cpplib.obj \ + cppmacro.obj cppmain.obj cppspec.obj gcc.obj \ + line-map.obj \ + mkdeps.obj version.obj \ + alloca.obj hex.obj lbasename.obj obstack.obj \ + safe-ctype.obj \ + xexit.obj xmalloc.obj xstrdup.obj xstrerror.obj + +$(BINDIR)\\cpp.exe: cppmain.exe + $(CP) $^ $@ + +# ----------------------------------------------------------------------------- + diff --git a/src/mkutil/cpp/mkdeps.c b/src/mkutil/cpp/mkdeps.c new file mode 100644 index 00000000..18de116b --- /dev/null +++ b/src/mkutil/cpp/mkdeps.c @@ -0,0 +1,291 @@ +/* Dependency generator for Makefile fragments. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Zack Weinberg, Mar 2000 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + +#include "config.h" +#include "system.h" +#include "mkdeps.h" + +/* Keep this structure local to this file, so clients don't find it + easy to start making assumptions. */ +struct deps +{ + const char **targetv; + unsigned int ntargets; /* number of slots actually occupied */ + unsigned int targets_size; /* amt of allocated space - in words */ + + const char **depv; + unsigned int ndeps; + unsigned int deps_size; +}; + +static const char *munge PARAMS ((const char *)); + +/* Given a filename, quote characters in that filename which are + significant to Make. Note that it's not possible to quote all such + characters - e.g. \n, %, *, ?, [, \ (in some contexts), and ~ are + not properly handled. It isn't possible to get this right in any + current version of Make. (??? Still true? Old comment referred to + 3.76.1.) */ + +static const char * +munge (filename) + const char *filename; +{ + int len; + const char *p, *q; + char *dst, *buffer; + + for (p = filename, len = 0; *p; p++, len++) + { + switch (*p) + { + case ' ': + case '\t': + /* GNU make uses a weird quoting scheme for white space. + A space or tab preceded by 2N+1 backslashes represents + N backslashes followed by space; a space or tab + preceded by 2N backslashes represents N backslashes at + the end of a file name; and backslashes in other + contexts should not be doubled. */ + for (q = p - 1; filename <= q && *q == '\\'; q--) + len++; + len++; + break; + + case '$': + /* '$' is quoted by doubling it. */ + len++; + break; + } + } + + /* Now we know how big to make the buffer. */ + buffer = xmalloc (len + 1); + + for (p = filename, dst = buffer; *p; p++, dst++) + { + switch (*p) + { + case ' ': + case '\t': + for (q = p - 1; filename <= q && *q == '\\'; q--) + *dst++ = '\\'; + *dst++ = '\\'; + break; + + case '$': + *dst++ = '$'; + break; + + default: + /* nothing */; + } + *dst = *p; + } + + *dst = '\0'; + return buffer; +} + +/* Public routines. */ + +struct deps * +deps_init () +{ + struct deps *d = (struct deps *) xmalloc (sizeof (struct deps)); + + /* Allocate space for the vectors only if we need it. */ + + d->targetv = 0; + d->depv = 0; + + d->ntargets = 0; + d->targets_size = 0; + d->ndeps = 0; + d->deps_size = 0; + + return d; +} + +void +deps_free (d) + struct deps *d; +{ + unsigned int i; + + if (d->targetv) + { + for (i = 0; i < d->ntargets; i++) + free ((PTR) d->targetv[i]); + free (d->targetv); + } + + if (d->depv) + { + for (i = 0; i < d->ndeps; i++) + free ((PTR) d->depv[i]); + free (d->depv); + } + + free (d); +} + +/* Adds a target T. We make a copy, so it need not be a permanent + string. QUOTE is true if the string should be quoted. */ +void +deps_add_target (d, t, quote) + struct deps *d; + const char *t; + int quote; +{ + if (d->ntargets == d->targets_size) + { + d->targets_size = d->targets_size * 2 + 4; + d->targetv = (const char **) xrealloc (d->targetv, + d->targets_size * sizeof (const char *)); + } + + if (quote) + t = munge (t); /* Also makes permanent copy. */ + else + t = xstrdup (t); + + d->targetv[d->ntargets++] = t; +} + +/* Sets the default target if none has been given already. An empty + string as the default target in interpreted as stdin. The string + is quoted for MAKE. */ +void +deps_add_default_target (d, tgt) + struct deps *d; + const char *tgt; +{ + /* Only if we have no targets. */ + if (d->ntargets) + return; + + if (tgt[0] == '\0') + deps_add_target (d, "-", 1); + else + { +#ifndef TARGET_OBJECT_SUFFIX +# define TARGET_OBJECT_SUFFIX ".o" +#endif + const char *start = lbasename (tgt); + char *o = (char *) alloca (strlen (start) + strlen (TARGET_OBJECT_SUFFIX) + 1); + char *suffix; + + strcpy (o, start); + + suffix = strrchr (o, '.'); + if (!suffix) + suffix = o + strlen (o); + strcpy (suffix, TARGET_OBJECT_SUFFIX); + + deps_add_target (d, o, 1); + } +} + +void +deps_add_dep (d, t) + struct deps *d; + const char *t; +{ + t = munge (t); /* Also makes permanent copy. */ + + if (d->ndeps == d->deps_size) + { + d->deps_size = d->deps_size * 2 + 8; + d->depv = (const char **) + xrealloc (d->depv, d->deps_size * sizeof (const char *)); + } + d->depv[d->ndeps++] = t; +} + +void +deps_write (d, fp, colmax) + const struct deps *d; + FILE *fp; + unsigned int colmax; +{ + unsigned int size, i, column; + + column = 0; + if (colmax && colmax < 34) + colmax = 34; + + for (i = 0; i < d->ntargets; i++) + { + size = strlen (d->targetv[i]); + column += size; + if (colmax && column > colmax) + { + fputs (" \\\n ", fp); + column = 1 + size; + } + if (i) + { + putc (' ', fp); + column++; + } + fputs (d->targetv[i], fp); + } + + putc (':', fp); + putc (' ', fp); + column += 2; + + for (i = 0; i < d->ndeps; i++) + { + size = strlen (d->depv[i]); + column += size; + if (colmax && column > colmax) + { + fputs (" \\\n ", fp); + column = 1 + size; + } + if (i) + { + putc (' ', fp); + column++; + } + fputs (d->depv[i], fp); + } + putc ('\n', fp); +} + +void +deps_phony_targets (d, fp) + const struct deps *d; + FILE *fp; +{ + unsigned int i; + + for (i = 1; i < d->ndeps; i++) + { + putc ('\n', fp); + fputs (d->depv[i], fp); + putc (':', fp); + putc ('\n', fp); + } +} diff --git a/src/mkutil/cpp/mkdeps.h b/src/mkutil/cpp/mkdeps.h new file mode 100644 index 00000000..ef6be493 --- /dev/null +++ b/src/mkutil/cpp/mkdeps.h @@ -0,0 +1,62 @@ +/* Dependency generator for Makefile fragments. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Zack Weinberg, Mar 2000 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + +#ifndef GCC_MKDEPS_H +#define GCC_MKDEPS_H + +/* This is the data structure used by all the functions in mkdeps.c. + It's quite straightforward, but should be treated as opaque. */ + +struct deps; + +/* Create a deps buffer. */ +extern struct deps *deps_init PARAMS ((void)); + +/* Destroy a deps buffer. */ +extern void deps_free PARAMS ((struct deps *)); + +/* Add a target (appears on left side of the colon) to the deps list. Takes + a boolean indicating whether to quote the target for MAKE. */ +extern void deps_add_target PARAMS ((struct deps *, const char *, int)); + +/* Sets the default target if none has been given already. An empty + string as the default target in interpreted as stdin. */ +extern void deps_add_default_target PARAMS ((struct deps *, const char *)); + +/* Add a dependency (appears on the right side of the colon) to the + deps list. Dependencies will be printed in the order that they + were entered with this function. By convention, the first + dependency entered should be the primary source file. */ +extern void deps_add_dep PARAMS ((struct deps *, const char *)); + +/* Write out a deps buffer to a specified file. The third argument + is the number of columns to word-wrap at (0 means don't wrap). */ +extern void deps_write PARAMS ((const struct deps *, FILE *, + unsigned int)); + +/* For each dependency *except the first*, emit a dummy rule for that + file, causing it to depend on nothing. This is used to work around + the intermediate-file deletion misfeature in Make, in some + automatic dependency schemes. */ +extern void deps_phony_targets PARAMS ((const struct deps *, FILE *)); + +#endif /* ! GCC_MKDEPS_H */ diff --git a/src/mkutil/cpp/mkdeps.obj b/src/mkutil/cpp/mkdeps.obj new file mode 100644 index 0000000000000000000000000000000000000000..3e0509aa5b0c27c230d5acd50b2dabeeb55e90b8 GIT binary patch literal 14251 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 z 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/cpp/multilib.h b/src/mkutil/cpp/multilib.h new file mode 100644 index 00000000..e69de29b diff --git a/src/mkutil/cpp/obstack.c b/src/mkutil/cpp/obstack.c new file mode 100644 index 00000000..03d50a86 --- /dev/null +++ b/src/mkutil/cpp/obstack.c @@ -0,0 +1,593 @@ +/* obstack.c - subroutines used implicitly by object stack macros + Copyright (C) 1988,89,90,91,92,93,94,96,97 Free Software Foundation, Inc. + + + NOTE: This source is derived from an old version taken from the GNU C + Library (glibc). + + 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "obstack.h" + +/* NOTE BEFORE MODIFYING THIS FILE: This version number must be + incremented whenever callers compiled using an old obstack.h can no + longer properly call the functions in this obstack.c. */ +#define OBSTACK_INTERFACE_VERSION 1 + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself, and the installed library + supports the same library interface we do. This code is part of the GNU + C Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object + files, it is simpler to just do this in the source for each such file. */ + +#include /* Random thing to get __GNU_LIBRARY__. */ +#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1 +#include +#if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION +#define ELIDE_CODE +#endif +#endif + + +#ifndef ELIDE_CODE + + +#if defined (__STDC__) && __STDC__ +#define POINTER void * +#else +#define POINTER char * +#endif + +/* Determine default alignment. */ +struct fooalign {char x; double d;}; +#define DEFAULT_ALIGNMENT \ + ((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0)) +/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT. + But in fact it might be less smart and round addresses to as much as + DEFAULT_ROUNDING. So we prepare for it to do that. */ +union fooround {long x; double d;}; +#define DEFAULT_ROUNDING (sizeof (union fooround)) + +/* When we copy a long block of data, this is the unit to do it with. + On some machines, copying successive ints does not work; + in such a case, redefine COPYING_UNIT to `long' (if that works) + or `char' as a last resort. */ +#ifndef COPYING_UNIT +#define COPYING_UNIT int +#endif + + +/* The functions allocating more room by calling `obstack_chunk_alloc' + jump to the handler pointed to by `obstack_alloc_failed_handler'. + This variable by default points to the internal function + `print_and_abort'. */ +#if defined (__STDC__) && __STDC__ +static void print_and_abort (void); +void (*obstack_alloc_failed_handler) (void) = print_and_abort; +#else +static void print_and_abort (); +void (*obstack_alloc_failed_handler) () = print_and_abort; +#endif + +/* Exit value used when `print_and_abort' is used. */ +#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H +#include +#endif +#ifndef EXIT_FAILURE +#define EXIT_FAILURE 1 +#endif +int obstack_exit_failure = EXIT_FAILURE; + +/* The non-GNU-C macros copy the obstack into this global variable + to avoid multiple evaluation. */ + +struct obstack *_obstack; + +/* Define a macro that either calls functions with the traditional malloc/free + calling interface, or calls functions with the mmalloc/mfree interface + (that adds an extra first argument), based on the state of use_extra_arg. + For free, do not use ?:, since some compilers, like the MIPS compilers, + do not allow (expr) ? void : void. */ + +#if defined (__STDC__) && __STDC__ +#define CALL_CHUNKFUN(h, size) \ + (((h) -> use_extra_arg) \ + ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ + : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size))) + +#define CALL_FREEFUN(h, old_chunk) \ + do { \ + if ((h) -> use_extra_arg) \ + (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ + else \ + (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \ + } while (0) +#else +#define CALL_CHUNKFUN(h, size) \ + (((h) -> use_extra_arg) \ + ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ + : (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size))) + +#define CALL_FREEFUN(h, old_chunk) \ + do { \ + if ((h) -> use_extra_arg) \ + (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ + else \ + (*(void (*) ()) (h)->freefun) ((old_chunk)); \ + } while (0) +#endif + + +/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). + Objects start on multiples of ALIGNMENT (0 means use default). + CHUNKFUN is the function to use to allocate chunks, + and FREEFUN the function to free them. + + Return nonzero if successful, zero if out of memory. + To recover from an out of memory error, + free up some memory, then call this again. */ + +int +_obstack_begin (h, size, alignment, chunkfun, freefun) + struct obstack *h; + int size; + int alignment; +#if defined (__STDC__) && __STDC__ + POINTER (*chunkfun) (long); + void (*freefun) (void *); +#else + POINTER (*chunkfun) (); + void (*freefun) (); +#endif +{ + register struct _obstack_chunk *chunk; /* points to new chunk */ + + if (alignment == 0) + alignment = (int) DEFAULT_ALIGNMENT; + if (size == 0) + /* Default size is what GNU malloc can fit in a 4096-byte block. */ + { + /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. + Use the values for range checking, because if range checking is off, + the extra bytes won't be missed terribly, but if range checking is on + and we used a larger request, a whole extra 4096 bytes would be + allocated. + + These number are irrelevant to the new GNU malloc. I suspect it is + less sensitive to the size of the request. */ + int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + + 4 + DEFAULT_ROUNDING - 1) + & ~(DEFAULT_ROUNDING - 1)); + size = 4096 - extra; + } + +#if defined (__STDC__) && __STDC__ + h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun; + h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; +#else + h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; + h->freefun = freefun; +#endif + h->chunk_size = size; + h->alignment_mask = alignment - 1; + h->use_extra_arg = 0; + + chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); + if (!chunk) + (*obstack_alloc_failed_handler) (); + h->next_free = h->object_base = chunk->contents; + h->chunk_limit = chunk->limit + = (char *) chunk + h->chunk_size; + chunk->prev = 0; + /* The initial chunk now contains no empty object. */ + h->maybe_empty_object = 0; + h->alloc_failed = 0; + return 1; +} + +int +_obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg) + struct obstack *h; + int size; + int alignment; +#if defined (__STDC__) && __STDC__ + POINTER (*chunkfun) (POINTER, long); + void (*freefun) (POINTER, POINTER); +#else + POINTER (*chunkfun) (); + void (*freefun) (); +#endif + POINTER arg; +{ + register struct _obstack_chunk *chunk; /* points to new chunk */ + + if (alignment == 0) + alignment = (int) DEFAULT_ALIGNMENT; + if (size == 0) + /* Default size is what GNU malloc can fit in a 4096-byte block. */ + { + /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. + Use the values for range checking, because if range checking is off, + the extra bytes won't be missed terribly, but if range checking is on + and we used a larger request, a whole extra 4096 bytes would be + allocated. + + These number are irrelevant to the new GNU malloc. I suspect it is + less sensitive to the size of the request. */ + int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + + 4 + DEFAULT_ROUNDING - 1) + & ~(DEFAULT_ROUNDING - 1)); + size = 4096 - extra; + } + +#if defined(__STDC__) && __STDC__ + h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun; + h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; +#else + h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; + h->freefun = freefun; +#endif + h->chunk_size = size; + h->alignment_mask = alignment - 1; + h->extra_arg = arg; + h->use_extra_arg = 1; + + chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); + if (!chunk) + (*obstack_alloc_failed_handler) (); + h->next_free = h->object_base = chunk->contents; + h->chunk_limit = chunk->limit + = (char *) chunk + h->chunk_size; + chunk->prev = 0; + /* The initial chunk now contains no empty object. */ + h->maybe_empty_object = 0; + h->alloc_failed = 0; + return 1; +} + +/* Allocate a new current chunk for the obstack *H + on the assumption that LENGTH bytes need to be added + to the current object, or a new object of length LENGTH allocated. + Copies any partial object from the end of the old chunk + to the beginning of the new one. */ + +void +_obstack_newchunk (h, length) + struct obstack *h; + int length; +{ + register struct _obstack_chunk *old_chunk = h->chunk; + register struct _obstack_chunk *new_chunk; + register long new_size; + register long obj_size = h->next_free - h->object_base; + register long i; + long already; + + /* Compute size for new chunk. */ + new_size = (obj_size + length) + (obj_size >> 3) + 100; + if (new_size < h->chunk_size) + new_size = h->chunk_size; + + /* Allocate and initialize the new chunk. */ + new_chunk = CALL_CHUNKFUN (h, new_size); + if (!new_chunk) + (*obstack_alloc_failed_handler) (); + h->chunk = new_chunk; + new_chunk->prev = old_chunk; + new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; + + /* Move the existing object to the new chunk. + Word at a time is fast and is safe if the object + is sufficiently aligned. */ + if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT) + { + for (i = obj_size / sizeof (COPYING_UNIT) - 1; + i >= 0; i--) + ((COPYING_UNIT *)new_chunk->contents)[i] + = ((COPYING_UNIT *)h->object_base)[i]; + /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT, + but that can cross a page boundary on a machine + which does not do strict alignment for COPYING_UNITS. */ + already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT); + } + else + already = 0; + /* Copy remaining bytes one by one. */ + for (i = already; i < obj_size; i++) + new_chunk->contents[i] = h->object_base[i]; + + /* If the object just copied was the only data in OLD_CHUNK, + free that chunk and remove it from the chain. + But not if that chunk might contain an empty object. */ + if (h->object_base == old_chunk->contents && ! h->maybe_empty_object) + { + new_chunk->prev = old_chunk->prev; + CALL_FREEFUN (h, old_chunk); + } + + h->object_base = new_chunk->contents; + h->next_free = h->object_base + obj_size; + /* The new chunk certainly contains no empty object yet. */ + h->maybe_empty_object = 0; +} + +/* Return nonzero if object OBJ has been allocated from obstack H. + This is here for debugging. + If you use it in a program, you are probably losing. */ + +#if defined (__STDC__) && __STDC__ +/* Suppress -Wmissing-prototypes warning. We don't want to declare this in + obstack.h because it is just for debugging. */ +int _obstack_allocated_p (struct obstack *h, POINTER obj); +#endif + +int +_obstack_allocated_p (h, obj) + struct obstack *h; + POINTER obj; +{ + register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + register struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = (h)->chunk; + /* We use >= rather than > since the object cannot be exactly at + the beginning of the chunk but might be an empty object exactly + at the end of an adjacent chunk. */ + while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) + { + plp = lp->prev; + lp = plp; + } + return lp != 0; +} + +/* Free objects in obstack H, including OBJ and everything allocate + more recently than OBJ. If OBJ is zero, free everything in H. */ + +#undef obstack_free + +/* This function has two names with identical definitions. + This is the first one, called from non-ANSI code. */ + +void +_obstack_free (h, obj) + struct obstack *h; + POINTER obj; +{ + register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + register struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = h->chunk; + /* We use >= because there cannot be an object at the beginning of a chunk. + But there can be an empty object at that address + at the end of another chunk. */ + while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) + { + plp = lp->prev; + CALL_FREEFUN (h, lp); + lp = plp; + /* If we switch chunks, we can't tell whether the new current + chunk contains an empty object, so assume that it may. */ + h->maybe_empty_object = 1; + } + if (lp) + { + h->object_base = h->next_free = (char *) (obj); + h->chunk_limit = lp->limit; + h->chunk = lp; + } + else if (obj != 0) + /* obj is not in any of the chunks! */ + abort (); +} + +/* This function is used from ANSI code. */ + +void +obstack_free (h, obj) + struct obstack *h; + POINTER obj; +{ + register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + register struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = h->chunk; + /* We use >= because there cannot be an object at the beginning of a chunk. + But there can be an empty object at that address + at the end of another chunk. */ + while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) + { + plp = lp->prev; + CALL_FREEFUN (h, lp); + lp = plp; + /* If we switch chunks, we can't tell whether the new current + chunk contains an empty object, so assume that it may. */ + h->maybe_empty_object = 1; + } + if (lp) + { + h->object_base = h->next_free = (char *) (obj); + h->chunk_limit = lp->limit; + h->chunk = lp; + } + else if (obj != 0) + /* obj is not in any of the chunks! */ + abort (); +} + +int +_obstack_memory_used (h) + struct obstack *h; +{ + register struct _obstack_chunk* lp; + register int nbytes = 0; + + for (lp = h->chunk; lp != 0; lp = lp->prev) + { + nbytes += lp->limit - (char *) lp; + } + return nbytes; +} + +/* Define the error handler. */ +#ifndef _ +# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC +# include +# ifndef _ +# define _(Str) gettext (Str) +# endif +# else +# define _(Str) (Str) +# endif +#endif + +static void +print_and_abort () +{ + fputs (_("memory exhausted\n"), stderr); + exit (obstack_exit_failure); +} + +#if 0 +/* These are now turned off because the applications do not use it + and it uses bcopy via obstack_grow, which causes trouble on sysV. */ + +/* Now define the functional versions of the obstack macros. + Define them to simply use the corresponding macros to do the job. */ + +#if defined (__STDC__) && __STDC__ +/* These function definitions do not work with non-ANSI preprocessors; + they won't pass through the macro names in parentheses. */ + +/* The function names appear in parentheses in order to prevent + the macro-definitions of the names from being expanded there. */ + +POINTER (obstack_base) (obstack) + struct obstack *obstack; +{ + return obstack_base (obstack); +} + +POINTER (obstack_next_free) (obstack) + struct obstack *obstack; +{ + return obstack_next_free (obstack); +} + +int (obstack_object_size) (obstack) + struct obstack *obstack; +{ + return obstack_object_size (obstack); +} + +int (obstack_room) (obstack) + struct obstack *obstack; +{ + return obstack_room (obstack); +} + +int (obstack_make_room) (obstack, length) + struct obstack *obstack; + int length; +{ + return obstack_make_room (obstack, length); +} + +void (obstack_grow) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + obstack_grow (obstack, pointer, length); +} + +void (obstack_grow0) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + obstack_grow0 (obstack, pointer, length); +} + +void (obstack_1grow) (obstack, character) + struct obstack *obstack; + int character; +{ + obstack_1grow (obstack, character); +} + +void (obstack_blank) (obstack, length) + struct obstack *obstack; + int length; +{ + obstack_blank (obstack, length); +} + +void (obstack_1grow_fast) (obstack, character) + struct obstack *obstack; + int character; +{ + obstack_1grow_fast (obstack, character); +} + +void (obstack_blank_fast) (obstack, length) + struct obstack *obstack; + int length; +{ + obstack_blank_fast (obstack, length); +} + +POINTER (obstack_finish) (obstack) + struct obstack *obstack; +{ + return obstack_finish (obstack); +} + +POINTER (obstack_alloc) (obstack, length) + struct obstack *obstack; + int length; +{ + return obstack_alloc (obstack, length); +} + +POINTER (obstack_copy) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + return obstack_copy (obstack, pointer, length); +} + +POINTER (obstack_copy0) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + return obstack_copy0 (obstack, pointer, length); +} + +#endif /* __STDC__ */ + +#endif /* 0 */ + +#endif /* !ELIDE_CODE */ diff --git a/src/mkutil/cpp/obstack.h b/src/mkutil/cpp/obstack.h new file mode 100644 index 00000000..01a6f462 --- /dev/null +++ b/src/mkutil/cpp/obstack.h @@ -0,0 +1,599 @@ +/* obstack.h - object stack macros + Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, + 1999, 2000 + Free Software Foundation, Inc. + + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to bug-glibc@gnu.org. + + 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* Summary: + +All the apparent functions defined here are macros. The idea +is that you would use these pre-tested macros to solve a +very specific set of problems, and they would run fast. +Caution: no side-effects in arguments please!! They may be +evaluated MANY times!! + +These macros operate a stack of objects. Each object starts life +small, and may grow to maturity. (Consider building a word syllable +by syllable.) An object can move while it is growing. Once it has +been "finished" it never changes address again. So the "top of the +stack" is typically an immature growing object, while the rest of the +stack is of mature, fixed size and fixed address objects. + +These routines grab large chunks of memory, using a function you +supply, called `obstack_chunk_alloc'. On occasion, they free chunks, +by calling `obstack_chunk_free'. You must define them and declare +them before using any obstack macros. + +Each independent stack is represented by a `struct obstack'. +Each of the obstack macros expects a pointer to such a structure +as the first argument. + +One motivation for this package is the problem of growing char strings +in symbol tables. Unless you are "fascist pig with a read-only mind" +--Gosper's immortal quote from HAKMEM item 154, out of context--you +would not like to put any arbitrary upper limit on the length of your +symbols. + +In practice this often means you will build many short symbols and a +few long symbols. At the time you are reading a symbol you don't know +how long it is. One traditional method is to read a symbol into a +buffer, realloc()ating the buffer every time you try to read a symbol +that is longer than the buffer. This is beaut, but you still will +want to copy the symbol from the buffer to a more permanent +symbol-table entry say about half the time. + +With obstacks, you can work differently. Use one obstack for all symbol +names. As you read a symbol, grow the name in the obstack gradually. +When the name is complete, finalize it. Then, if the symbol exists already, +free the newly read name. + +The way we do this is to take a large chunk, allocating memory from +low addresses. When you want to build a symbol in the chunk you just +add chars above the current "high water mark" in the chunk. When you +have finished adding chars, because you got to the end of the symbol, +you know how long the chars are, and you can create a new object. +Mostly the chars will not burst over the highest address of the chunk, +because you would typically expect a chunk to be (say) 100 times as +long as an average object. + +In case that isn't clear, when we have enough chars to make up +the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed) +so we just point to it where it lies. No moving of chars is +needed and this is the second win: potentially long strings need +never be explicitly shuffled. Once an object is formed, it does not +change its address during its lifetime. + +When the chars burst over a chunk boundary, we allocate a larger +chunk, and then copy the partly formed object from the end of the old +chunk to the beginning of the new larger chunk. We then carry on +accreting characters to the end of the object as we normally would. + +A special macro is provided to add a single char at a time to a +growing object. This allows the use of register variables, which +break the ordinary 'growth' macro. + +Summary: + We allocate large chunks. + We carve out one object at a time from the current chunk. + Once carved, an object never moves. + We are free to append data of any size to the currently + growing object. + Exactly one object is growing in an obstack at any one time. + You can run one obstack per control block. + You may have as many control blocks as you dare. + Because of the way we do it, you can `unwind' an obstack + back to a previous state. (You may remove objects much + as you would with a stack.) +*/ + + +/* Don't do the contents of this file more than once. */ + +#ifndef _OBSTACK_H +#define _OBSTACK_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* We use subtraction of (char *) 0 instead of casting to int + because on word-addressable machines a simple cast to int + may ignore the byte-within-word field of the pointer. */ + +#ifndef __PTR_TO_INT +# define __PTR_TO_INT(P) ((P) - (char *) 0) +#endif + +#ifndef __INT_TO_PTR +# define __INT_TO_PTR(P) ((P) + (char *) 0) +#endif + +/* We need the type of the resulting object. If __PTRDIFF_TYPE__ is + defined, as with GNU C, use that; that way we don't pollute the + namespace with 's symbols. Otherwise, if is + available, include it and use ptrdiff_t. In traditional C, long is + the best that we can do. */ + +#ifdef __PTRDIFF_TYPE__ +# define PTR_INT_TYPE __PTRDIFF_TYPE__ +#else +# ifdef HAVE_STDDEF_H +# include +# define PTR_INT_TYPE ptrdiff_t +# else +# define PTR_INT_TYPE long +# endif +#endif + +#if defined _LIBC || defined HAVE_STRING_H +# include +# if defined __STDC__ && __STDC__ +# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) +# else +# define _obstack_memcpy(To, From, N) memcpy ((To), (char *)(From), (N)) +# endif +#else +# ifdef memcpy +# define _obstack_memcpy(To, From, N) memcpy ((To), (char *)(From), (N)) +# else +# define _obstack_memcpy(To, From, N) bcopy ((char *)(From), (To), (N)) +# endif +#endif + +struct _obstack_chunk /* Lives at front of each chunk. */ +{ + char *limit; /* 1 past end of this chunk */ + struct _obstack_chunk *prev; /* address of prior chunk or NULL */ + char contents[4]; /* objects begin here */ +}; + +struct obstack /* control current object in current chunk */ +{ + long chunk_size; /* preferred size to allocate chunks in */ + struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */ + char *object_base; /* address of object we are building */ + char *next_free; /* where to add next char to current object */ + char *chunk_limit; /* address of char after current chunk */ + PTR_INT_TYPE temp; /* Temporary for some macros. */ + int alignment_mask; /* Mask of alignment for each object. */ +#if defined __STDC__ && __STDC__ + /* These prototypes vary based on `use_extra_arg', and we use + casts to the prototypeless function type in all assignments, + but having prototypes here quiets -Wstrict-prototypes. */ + struct _obstack_chunk *(*chunkfun) (void *, long); + void (*freefun) (void *, struct _obstack_chunk *); + void *extra_arg; /* first arg for chunk alloc/dealloc funcs */ +#else + struct _obstack_chunk *(*chunkfun) (); /* User's fcn to allocate a chunk. */ + void (*freefun) (); /* User's function to free a chunk. */ + char *extra_arg; /* first arg for chunk alloc/dealloc funcs */ +#endif + unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */ + unsigned maybe_empty_object:1;/* There is a possibility that the current + chunk contains a zero-length object. This + prevents freeing the chunk if we allocate + a bigger chunk to replace it. */ + unsigned alloc_failed:1; /* No longer used, as we now call the failed + handler on error, but retained for binary + compatibility. */ +}; + +/* Declare the external functions we use; they are in obstack.c. */ + +#if defined __STDC__ && __STDC__ +extern void _obstack_newchunk (struct obstack *, int); +extern void _obstack_free (struct obstack *, void *); +extern int _obstack_begin (struct obstack *, int, int, + void *(*) (long), void (*) (void *)); +extern int _obstack_begin_1 (struct obstack *, int, int, + void *(*) (void *, long), + void (*) (void *, void *), void *); +extern int _obstack_memory_used (struct obstack *); +#else +extern void _obstack_newchunk (); +extern void _obstack_free (); +extern int _obstack_begin (); +extern int _obstack_begin_1 (); +extern int _obstack_memory_used (); +#endif + +#if defined __STDC__ && __STDC__ + +/* Do the function-declarations after the structs + but before defining the macros. */ + +void obstack_init (struct obstack *obstack); + +void * obstack_alloc (struct obstack *obstack, int size); + +void * obstack_copy (struct obstack *obstack, void *address, int size); +void * obstack_copy0 (struct obstack *obstack, void *address, int size); + +void obstack_free (struct obstack *obstack, void *block); + +void obstack_blank (struct obstack *obstack, int size); + +void obstack_grow (struct obstack *obstack, void *data, int size); +void obstack_grow0 (struct obstack *obstack, void *data, int size); + +void obstack_1grow (struct obstack *obstack, int data_char); +void obstack_ptr_grow (struct obstack *obstack, void *data); +void obstack_int_grow (struct obstack *obstack, int data); + +void * obstack_finish (struct obstack *obstack); + +int obstack_object_size (struct obstack *obstack); + +int obstack_room (struct obstack *obstack); +void obstack_make_room (struct obstack *obstack, int size); +void obstack_1grow_fast (struct obstack *obstack, int data_char); +void obstack_ptr_grow_fast (struct obstack *obstack, void *data); +void obstack_int_grow_fast (struct obstack *obstack, int data); +void obstack_blank_fast (struct obstack *obstack, int size); + +void * obstack_base (struct obstack *obstack); +void * obstack_next_free (struct obstack *obstack); +int obstack_alignment_mask (struct obstack *obstack); +int obstack_chunk_size (struct obstack *obstack); +int obstack_memory_used (struct obstack *obstack); + +#endif /* __STDC__ */ + +/* Non-ANSI C cannot really support alternative functions for these macros, + so we do not declare them. */ + +/* Error handler called when `obstack_chunk_alloc' failed to allocate + more memory. This can be set to a user defined function. The + default action is to print a message and abort. */ +#if defined __STDC__ && __STDC__ +extern void (*obstack_alloc_failed_handler) (void); +#else +extern void (*obstack_alloc_failed_handler) (); +#endif + +/* Exit value used when `print_and_abort' is used. */ +extern int obstack_exit_failure; + +/* Pointer to beginning of object being allocated or to be allocated next. + Note that this might not be the final address of the object + because a new chunk might be needed to hold the final size. */ + +#define obstack_base(h) ((h)->object_base) + +/* Size for allocating ordinary chunks. */ + +#define obstack_chunk_size(h) ((h)->chunk_size) + +/* Pointer to next byte not yet allocated in current chunk. */ + +#define obstack_next_free(h) ((h)->next_free) + +/* Mask specifying low bits that should be clear in address of an object. */ + +#define obstack_alignment_mask(h) ((h)->alignment_mask) + +/* To prevent prototype warnings provide complete argument list in + standard C version. */ +#if defined __STDC__ && __STDC__ + +# define obstack_init(h) \ + _obstack_begin ((h), 0, 0, \ + (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) + +# define obstack_begin(h, size) \ + _obstack_begin ((h), (size), 0, \ + (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) + +# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ + _obstack_begin ((h), (size), (alignment), \ + (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun)) + +# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ + _obstack_begin_1 ((h), (size), (alignment), \ + (void *(*) (void *, long)) (chunkfun), \ + (void (*) (void *, void *)) (freefun), (arg)) + +# define obstack_chunkfun(h, newchunkfun) \ + ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun)) + +# define obstack_freefun(h, newfreefun) \ + ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun)) + +#else + +# define obstack_init(h) \ + _obstack_begin ((h), 0, 0, \ + (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) + +# define obstack_begin(h, size) \ + _obstack_begin ((h), (size), 0, \ + (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) + +# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ + _obstack_begin ((h), (size), (alignment), \ + (void *(*) ()) (chunkfun), (void (*) ()) (freefun)) + +# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ + _obstack_begin_1 ((h), (size), (alignment), \ + (void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg)) + +# define obstack_chunkfun(h, newchunkfun) \ + ((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun)) + +# define obstack_freefun(h, newfreefun) \ + ((h) -> freefun = (void (*)()) (newfreefun)) + +#endif + +#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar) + +#define obstack_blank_fast(h,n) ((h)->next_free += (n)) + +#define obstack_memory_used(h) _obstack_memory_used (h) + +#if defined __GNUC__ && defined __STDC__ && __STDC__ +/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and + does not implement __extension__. But that compiler doesn't define + __GNUC_MINOR__. */ +# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) +# define __extension__ +# endif + +/* For GNU C, if not -traditional, + we can define these macros to compute all args only once + without using a global variable. + Also, we can avoid using the `temp' slot, to make faster code. */ + +# define obstack_object_size(OBSTACK) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + (unsigned) (__o->next_free - __o->object_base); }) + +# define obstack_room(OBSTACK) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + (unsigned) (__o->chunk_limit - __o->next_free); }) + +# define obstack_make_room(OBSTACK,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->chunk_limit - __o->next_free < __len) \ + _obstack_newchunk (__o, __len); \ + (void) 0; }) + +# define obstack_empty_p(OBSTACK) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); }) + +# define obstack_grow(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->next_free + __len > __o->chunk_limit) \ + _obstack_newchunk (__o, __len); \ + _obstack_memcpy (__o->next_free, (where), __len); \ + __o->next_free += __len; \ + (void) 0; }) + +# define obstack_grow0(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->next_free + __len + 1 > __o->chunk_limit) \ + _obstack_newchunk (__o, __len + 1); \ + _obstack_memcpy (__o->next_free, (where), __len); \ + __o->next_free += __len; \ + *(__o->next_free)++ = 0; \ + (void) 0; }) + +# define obstack_1grow(OBSTACK,datum) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + if (__o->next_free + 1 > __o->chunk_limit) \ + _obstack_newchunk (__o, 1); \ + *(__o->next_free)++ = (datum); \ + (void) 0; }) + +/* These assume that the obstack alignment is good enough for pointers or ints, + and that the data added so far to the current object + shares that much alignment. */ + +# define obstack_ptr_grow(OBSTACK,datum) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + if (__o->next_free + sizeof (void *) > __o->chunk_limit) \ + _obstack_newchunk (__o, sizeof (void *)); \ + *((void **)__o->next_free)++ = ((void *)datum); \ + (void) 0; }) + +# define obstack_int_grow(OBSTACK,datum) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + if (__o->next_free + sizeof (int) > __o->chunk_limit) \ + _obstack_newchunk (__o, sizeof (int)); \ + *((int *)__o->next_free)++ = ((int)datum); \ + (void) 0; }) + +# define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr) +# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint) + +# define obstack_blank(OBSTACK,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->chunk_limit - __o->next_free < __len) \ + _obstack_newchunk (__o, __len); \ + __o->next_free += __len; \ + (void) 0; }) + +# define obstack_alloc(OBSTACK,length) \ +__extension__ \ +({ struct obstack *__h = (OBSTACK); \ + obstack_blank (__h, (length)); \ + obstack_finish (__h); }) + +# define obstack_copy(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__h = (OBSTACK); \ + obstack_grow (__h, (where), (length)); \ + obstack_finish (__h); }) + +# define obstack_copy0(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__h = (OBSTACK); \ + obstack_grow0 (__h, (where), (length)); \ + obstack_finish (__h); }) + +/* The local variable is named __o1 to avoid a name conflict + when obstack_blank is called. */ +# define obstack_finish(OBSTACK) \ +__extension__ \ +({ struct obstack *__o1 = (OBSTACK); \ + void *value; \ + value = (void *) __o1->object_base; \ + if (__o1->next_free == value) \ + __o1->maybe_empty_object = 1; \ + __o1->next_free \ + = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\ + & ~ (__o1->alignment_mask)); \ + if (__o1->next_free - (char *)__o1->chunk \ + > __o1->chunk_limit - (char *)__o1->chunk) \ + __o1->next_free = __o1->chunk_limit; \ + __o1->object_base = __o1->next_free; \ + value; }) + +# define obstack_free(OBSTACK, OBJ) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + void *__obj = (OBJ); \ + if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \ + __o->next_free = __o->object_base = __obj; \ + else (obstack_free) (__o, __obj); }) + +#else /* not __GNUC__ or not __STDC__ */ + +# define obstack_object_size(h) \ + (unsigned) ((h)->next_free - (h)->object_base) + +# define obstack_room(h) \ + (unsigned) ((h)->chunk_limit - (h)->next_free) + +# define obstack_empty_p(h) \ + ((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0) + +/* Note that the call to _obstack_newchunk is enclosed in (..., 0) + so that we can avoid having void expressions + in the arms of the conditional expression. + Casting the third operand to void was tried before, + but some compilers won't accept it. */ + +# define obstack_make_room(h,length) \ +( (h)->temp = (length), \ + (((h)->next_free + (h)->temp > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp), 0) : 0)) + +# define obstack_grow(h,where,length) \ +( (h)->temp = (length), \ + (((h)->next_free + (h)->temp > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ + _obstack_memcpy ((h)->next_free, (where), (h)->temp), \ + (h)->next_free += (h)->temp) + +# define obstack_grow0(h,where,length) \ +( (h)->temp = (length), \ + (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \ + _obstack_memcpy ((h)->next_free, (where), (h)->temp), \ + (h)->next_free += (h)->temp, \ + *((h)->next_free)++ = 0) + +# define obstack_1grow(h,datum) \ +( (((h)->next_free + 1 > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), 1), 0) : 0), \ + (*((h)->next_free)++ = (datum))) + +# define obstack_ptr_grow(h,datum) \ +( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ + (*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum))) + +# define obstack_int_grow(h,datum) \ +( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ + (*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum))) + +# define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr) +# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint) + +# define obstack_blank(h,length) \ +( (h)->temp = (length), \ + (((h)->chunk_limit - (h)->next_free < (h)->temp) \ + ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ + ((h)->next_free += (h)->temp)) + +# define obstack_alloc(h,length) \ + (obstack_blank ((h), (length)), obstack_finish ((h))) + +# define obstack_copy(h,where,length) \ + (obstack_grow ((h), (where), (length)), obstack_finish ((h))) + +# define obstack_copy0(h,where,length) \ + (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) + +# define obstack_finish(h) \ +( ((h)->next_free == (h)->object_base \ + ? (((h)->maybe_empty_object = 1), 0) \ + : 0), \ + (h)->temp = __PTR_TO_INT ((h)->object_base), \ + (h)->next_free \ + = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \ + & ~ ((h)->alignment_mask)), \ + (((h)->next_free - (char *) (h)->chunk \ + > (h)->chunk_limit - (char *) (h)->chunk) \ + ? ((h)->next_free = (h)->chunk_limit) : 0), \ + (h)->object_base = (h)->next_free, \ + __INT_TO_PTR ((h)->temp)) + +# if defined __STDC__ && __STDC__ +# define obstack_free(h,obj) \ +( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ + (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ + ? (int) ((h)->next_free = (h)->object_base \ + = (h)->temp + (char *) (h)->chunk) \ + : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0))) +# else +# define obstack_free(h,obj) \ +( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ + (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ + ? (int) ((h)->next_free = (h)->object_base \ + = (h)->temp + (char *) (h)->chunk) \ + : (_obstack_free ((h), (h)->temp + (char *) (h)->chunk), 0))) +# endif + +#endif /* not __GNUC__ or not __STDC__ */ + +#ifdef __cplusplus +} /* C++ */ +#endif + +#endif /* obstack.h */ diff --git a/src/mkutil/cpp/obstack.obj b/src/mkutil/cpp/obstack.obj new file mode 100644 index 0000000000000000000000000000000000000000..04aae311a58fde046844f70b7d57984f2ab61b4e GIT binary patch literal 6160 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 +/* Linux includes limits.h, but this is not universally done. */ +#include + +/* Max number of open files. The Posix version is OPEN_MAX. */ +/* Number of fds is virtually unlimited in cygwin, but we must provide + some reasonable value for Posix conformance */ +#define NOFILE 8192 + +/* Max number of groups; must keep in sync with NGROUPS_MAX in limits.h */ +#define NGROUPS 16 + +/* Ticks/second for system calls such as times() */ +/* FIXME: is this the appropriate value? */ +#define HZ 1000 + +/* Max hostname size that can be dealt with */ +/* FIXME: is this the appropriate value? */ +#define MAXHOSTNAMELEN 64 + +/* This is defined to be the same as MAX_PATH which is used internally. + The Posix version is PATH_MAX. */ +#define MAXPATHLEN (260 - 1 /*NUL*/) + +/* Some autoconf'd packages check for endianness. When cross-building we + can't run programs on the target. Fortunately, autoconf supports the + definition of byte order in sys/param.h (that's us!). + The values here are the same as used in gdb/defs.h (are the more + appropriate values?). */ +#define BIG_ENDIAN 4321 +#define LITTLE_ENDIAN 1234 + +/* All known win32 systems are little endian. */ +#define BYTE_ORDER LITTLE_ENDIAN + +#ifndef NULL +#define NULL 0L +#endif + +#endif diff --git a/src/mkutil/cpp/prefix.h b/src/mkutil/cpp/prefix.h new file mode 100644 index 00000000..d3d6d926 --- /dev/null +++ b/src/mkutil/cpp/prefix.h @@ -0,0 +1,31 @@ +/* Provide prototypes for functions exported from prefix.c. + Copyright (C) 1999 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU Library General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. + +GCC 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with GCC; see the file COPYING. If not, write to the Free +Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + + +#ifndef GCC_PREFIX_H +#define GCC_PREFIX_H + +/* Update PATH using KEY if PATH starts with PREFIX. The returned + string is always malloc-ed, and the caller is responsible for + freeing it. */ +extern char *update_path PARAMS ((const char *path, const char *key)); +extern void set_std_prefix PARAMS ((const char *, int)); + +#endif /* ! GCC_PREFIX_H */ diff --git a/src/mkutil/cpp/safe-ctype.c b/src/mkutil/cpp/safe-ctype.c new file mode 100644 index 00000000..b0eb0d1f --- /dev/null +++ b/src/mkutil/cpp/safe-ctype.c @@ -0,0 +1,163 @@ +/* replacement macros. + + Copyright (C) 2000 Free Software Foundation, Inc. + Contributed by Zack Weinberg . + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* This is a compatible replacement of the standard C library's + with the following properties: + + - Implements all isxxx() macros required by C99. + - Also implements some character classes useful when + parsing C-like languages. + - Does not change behavior depending on the current locale. + - Behaves properly for all values in the range of a signed or + unsigned char. */ + +#include "ansidecl.h" +#include +#include /* for EOF */ + +/* Shorthand */ +#define bl _sch_isblank +#define cn _sch_iscntrl +#define di _sch_isdigit +#define is _sch_isidst +#define lo _sch_islower +#define nv _sch_isnvsp +#define pn _sch_ispunct +#define pr _sch_isprint +#define sp _sch_isspace +#define up _sch_isupper +#define vs _sch_isvsp +#define xd _sch_isxdigit + +/* Masks. */ +#define L lo|is |pr /* lower case letter */ +#define XL lo|is|xd|pr /* lowercase hex digit */ +#define U up|is |pr /* upper case letter */ +#define XU up|is|xd|pr /* uppercase hex digit */ +#define D di |xd|pr /* decimal digit */ +#define P pn |pr /* punctuation */ +#define _ pn|is |pr /* underscore */ + +#define C cn /* control character */ +#define Z nv |cn /* NUL */ +#define M nv|sp |cn /* cursor movement: \f \v */ +#define V vs|sp |cn /* vertical space: \r \n */ +#define T nv|sp|bl|cn /* tab */ +#define S nv|sp|bl|pr /* space */ + +/* Are we ASCII? */ +#if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \ + && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21 \ + && EOF == -1 + +const unsigned short _sch_istable[256] = +{ + Z, C, C, C, C, C, C, C, /* NUL SOH STX ETX EOT ENQ ACK BEL */ + C, T, V, M, M, V, C, C, /* BS HT LF VT FF CR SO SI */ + C, C, C, C, C, C, C, C, /* DLE DC1 DC2 DC3 DC4 NAK SYN ETB */ + C, C, C, C, C, C, C, C, /* CAN EM SUB ESC FS GS RS US */ + S, P, P, P, P, P, P, P, /* SP ! " # $ % & ' */ + P, P, P, P, P, P, P, P, /* ( ) * + , - . / */ + D, D, D, D, D, D, D, D, /* 0 1 2 3 4 5 6 7 */ + D, D, P, P, P, P, P, P, /* 8 9 : ; < = > ? */ + P, XU, XU, XU, XU, XU, XU, U, /* @ A B C D E F G */ + U, U, U, U, U, U, U, U, /* H I J K L M N O */ + U, U, U, U, U, U, U, U, /* P Q R S T U V W */ + U, U, U, P, P, P, P, _, /* X Y Z [ \ ] ^ _ */ + P, XL, XL, XL, XL, XL, XL, L, /* ` a b c d e f g */ + L, L, L, L, L, L, L, L, /* h i j k l m n o */ + L, L, L, L, L, L, L, L, /* p q r s t u v w */ + L, L, L, P, P, P, P, C, /* x y z { | } ~ DEL */ + + /* high half of unsigned char is locale-specific, so all tests are + false in "C" locale */ + 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, 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, + 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, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +const unsigned char _sch_tolower[256] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, + + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + + 91, 92, 93, 94, 95, 96, + + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + + 123,124,125,126,127, + + 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143, + 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159, + 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175, + 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191, + + 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207, + 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223, + 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239, + 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255, +}; + +const unsigned char _sch_toupper[256] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, + + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + + 91, 92, 93, 94, 95, 96, + + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + + 123,124,125,126,127, + + 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143, + 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159, + 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175, + 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191, + + 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207, + 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223, + 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239, + 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255, +}; + +#else + #error "Unsupported host character set" +#endif /* not ASCII */ diff --git a/src/mkutil/cpp/safe-ctype.h b/src/mkutil/cpp/safe-ctype.h new file mode 100644 index 00000000..4b1ec810 --- /dev/null +++ b/src/mkutil/cpp/safe-ctype.h @@ -0,0 +1,103 @@ +/* replacement macros. + + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Zack Weinberg . + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* This is a compatible replacement of the standard C library's + with the following properties: + + - Implements all isxxx() macros required by C99. + - Also implements some character classes useful when + parsing C-like languages. + - Does not change behavior depending on the current locale. + - Behaves properly for all values in the range of a signed or + unsigned char. + + To avoid conflicts, this header defines the isxxx functions in upper + case, e.g. ISALPHA not isalpha. */ + +#ifndef SAFE_CTYPE_H +#define SAFE_CTYPE_H + +#ifdef isalpha + #error "safe-ctype.h and ctype.h may not be used simultaneously" +#else + +/* Categories. */ + +enum { + /* In C99 */ + _sch_isblank = 0x0001, /* space \t */ + _sch_iscntrl = 0x0002, /* nonprinting characters */ + _sch_isdigit = 0x0004, /* 0-9 */ + _sch_islower = 0x0008, /* a-z */ + _sch_isprint = 0x0010, /* any printing character including ' ' */ + _sch_ispunct = 0x0020, /* all punctuation */ + _sch_isspace = 0x0040, /* space \t \n \r \f \v */ + _sch_isupper = 0x0080, /* A-Z */ + _sch_isxdigit = 0x0100, /* 0-9A-Fa-f */ + + /* Extra categories useful to cpplib. */ + _sch_isidst = 0x0200, /* A-Za-z_ */ + _sch_isvsp = 0x0400, /* \n \r */ + _sch_isnvsp = 0x0800, /* space \t \f \v \0 */ + + /* Combinations of the above. */ + _sch_isalpha = _sch_isupper|_sch_islower, /* A-Za-z */ + _sch_isalnum = _sch_isalpha|_sch_isdigit, /* A-Za-z0-9 */ + _sch_isidnum = _sch_isidst|_sch_isdigit, /* A-Za-z0-9_ */ + _sch_isgraph = _sch_isalnum|_sch_ispunct, /* isprint and not space */ + _sch_iscppsp = _sch_isvsp|_sch_isnvsp, /* isspace + \0 */ + _sch_isbasic = _sch_isprint|_sch_iscppsp /* basic charset of ISO C + (plus ` and @) */ +}; + +/* Character classification. */ +extern const unsigned short _sch_istable[256]; + +#define _sch_test(c, bit) (_sch_istable[(c) & 0xff] & (unsigned short)(bit)) + +#define ISALPHA(c) _sch_test(c, _sch_isalpha) +#define ISALNUM(c) _sch_test(c, _sch_isalnum) +#define ISBLANK(c) _sch_test(c, _sch_isblank) +#define ISCNTRL(c) _sch_test(c, _sch_iscntrl) +#define ISDIGIT(c) _sch_test(c, _sch_isdigit) +#define ISGRAPH(c) _sch_test(c, _sch_isgraph) +#define ISLOWER(c) _sch_test(c, _sch_islower) +#define ISPRINT(c) _sch_test(c, _sch_isprint) +#define ISPUNCT(c) _sch_test(c, _sch_ispunct) +#define ISSPACE(c) _sch_test(c, _sch_isspace) +#define ISUPPER(c) _sch_test(c, _sch_isupper) +#define ISXDIGIT(c) _sch_test(c, _sch_isxdigit) + +#define ISIDNUM(c) _sch_test(c, _sch_isidnum) +#define ISIDST(c) _sch_test(c, _sch_isidst) +#define IS_ISOBASIC(c) _sch_test(c, _sch_isbasic) +#define IS_VSPACE(c) _sch_test(c, _sch_isvsp) +#define IS_NVSPACE(c) _sch_test(c, _sch_isnvsp) +#define IS_SPACE_OR_NUL(c) _sch_test(c, _sch_iscppsp) + +/* Character transformation. */ +extern const unsigned char _sch_toupper[256]; +extern const unsigned char _sch_tolower[256]; +#define TOUPPER(c) _sch_toupper[(c) & 0xff] +#define TOLOWER(c) _sch_tolower[(c) & 0xff] + +#endif /* no ctype.h */ +#endif /* SAFE_CTYPE_H */ diff --git a/src/mkutil/cpp/safe-ctype.obj b/src/mkutil/cpp/safe-ctype.obj new file mode 100644 index 0000000000000000000000000000000000000000..5d44941654e6c0fa63d2684c3c328e7b779b5dc1 GIT binary patch literal 1931 zcmeZaWMO!!$ZMa-#=yYG00DX_MXAXpWvNgugBp;r1;&BVTmlSwDXB@N=_kO_$oWI8YyI6%z{fyo#E8HON3kO0U$ z-IUa{#L}FSoXjLEA5SM|1!Mt#9~VDIU)Nv-kOkTdoM62w$yPC?RhcoxMaeO_*`+0! zIWfrv1u?~mX{ox&C6xuKdihCNUJQ&3tU%??zM08I`NjEZB?=lrnhM57x=EQO3eNh@ z+S&^K1tpoenN^v2=?c#IxdoXysYME5sYS(^`FRS4MtTMYdKQLe7J3Gf3>*U0LNIsp z#1|)L#Agqe_+JmlhPH7Gaml$uCbW;$>hKPy}jXE6>a;i7x?hL1wU} z733E~xTPR&ab{I&d^F?)G(Mq&|!UjPhr_OitI9H28=fl9f-xD(3aVpsrVfdY%0 zVF{GQ#jqR5;sT59hqAaBm^hdiP@yx26N?iE5VD|(W9J2O7%MC+6cQE@6%&_`l#-T_ zm6KOcR8m$^Ra4i{)Y8_`)zddHG%_|ZH8Z!cw6eCbwX=6fOiBjk-}H>ktn8fJy!?W~ zqT-U$vhs?`s_2;5xcCIz^3^r9b@dI6P0cN>ZS5VMUEMvsef<+APMSPr>a^)IX3m;D zXYRcD3l=U~ykzOJ$dGXcJA7}XYaoK2M!)OeB|h{<0np@ zI(_Esx$_q;Ub=kc>b2`PZr-|m=kC4x4<0^x{N(Ag=PzEqdj00@yZ0YHe)|07>$mSe ze*XIX=kLG&43zrc(aG7x)y>_*)63h(*Uvv7Feo@AG%P$KG792<-139M|DYV8#URE| zDaLE>2xQA)FIvlz%?$JkQj$LEr2z{`XeI%M9z!}KQmLB^k#I-`mZf@`DKF%?82$s* zFaxU=L=^<8O_&)$l@KaGu6{tSVrB$YK%n}ThZ(Gf0ay-#z;T@lEeH!l zf(3yJKx!a)99(z( D+EBi3 literal 0 HcmV?d00001 diff --git a/src/mkutil/cpp/specs.h b/src/mkutil/cpp/specs.h new file mode 100644 index 00000000..e69de29b diff --git a/src/mkutil/cpp/splay-tree.h b/src/mkutil/cpp/splay-tree.h new file mode 100644 index 00000000..c46a3721 --- /dev/null +++ b/src/mkutil/cpp/splay-tree.h @@ -0,0 +1,154 @@ +/* A splay-tree datatype. + Copyright 1998, 1999, 2000 Free Software Foundation, Inc. + Contributed by Mark Mitchell (mark@markmitchell.com). + +This file is part of GCC. + +GCC 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, or (at your option) +any later version. + +GCC 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 GCC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* For an easily readable description of splay-trees, see: + + Lewis, Harry R. and Denenberg, Larry. Data Structures and Their + Algorithms. Harper-Collins, Inc. 1991. + + The major feature of splay trees is that all basic tree operations + are amortized O(log n) time for a tree with n nodes. */ + +#ifndef _SPLAY_TREE_H +#define _SPLAY_TREE_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include + +/* Use typedefs for the key and data types to facilitate changing + these types, if necessary. These types should be sufficiently wide + that any pointer or scalar can be cast to these types, and then + cast back, without loss of precision. */ +typedef unsigned long int splay_tree_key; +typedef unsigned long int splay_tree_value; + +/* Forward declaration for a node in the tree. */ +typedef struct splay_tree_node_s *splay_tree_node; + +/* The type of a function which compares two splay-tree keys. The + function should return values as for qsort. */ +typedef int (*splay_tree_compare_fn) PARAMS((splay_tree_key, splay_tree_key)); + +/* The type of a function used to deallocate any resources associated + with the key. */ +typedef void (*splay_tree_delete_key_fn) PARAMS((splay_tree_key)); + +/* The type of a function used to deallocate any resources associated + with the value. */ +typedef void (*splay_tree_delete_value_fn) PARAMS((splay_tree_value)); + +/* The type of a function used to iterate over the tree. */ +typedef int (*splay_tree_foreach_fn) PARAMS((splay_tree_node, void*)); + +/* The type of a function used to allocate memory for tree root and + node structures. The first argument is the number of bytes needed; + the second is a data pointer the splay tree functions pass through + to the allocator. This function must never return zero. */ +typedef void *(*splay_tree_allocate_fn) PARAMS((int, void *)); + +/* The type of a function used to free memory allocated using the + corresponding splay_tree_allocate_fn. The first argument is the + memory to be freed; the latter is a data pointer the splay tree + functions pass through to the freer. */ +typedef void (*splay_tree_deallocate_fn) PARAMS((void *, void *)); + +/* The nodes in the splay tree. */ +struct splay_tree_node_s +{ + /* The key. */ + splay_tree_key key; + + /* The value. */ + splay_tree_value value; + + /* The left and right children, respectively. */ + splay_tree_node left; + splay_tree_node right; +}; + +/* The splay tree itself. */ +typedef struct splay_tree_s +{ + /* The root of the tree. */ + splay_tree_node root; + + /* The comparision function. */ + splay_tree_compare_fn comp; + + /* The deallocate-key function. NULL if no cleanup is necessary. */ + splay_tree_delete_key_fn delete_key; + + /* The deallocate-value function. NULL if no cleanup is necessary. */ + splay_tree_delete_value_fn delete_value; + + /* Allocate/free functions, and a data pointer to pass to them. */ + splay_tree_allocate_fn allocate; + splay_tree_deallocate_fn deallocate; + void *allocate_data; + +} *splay_tree; + +extern splay_tree splay_tree_new PARAMS((splay_tree_compare_fn, + splay_tree_delete_key_fn, + splay_tree_delete_value_fn)); +extern splay_tree splay_tree_new_with_allocator + PARAMS((splay_tree_compare_fn, + splay_tree_delete_key_fn, + splay_tree_delete_value_fn, + splay_tree_allocate_fn, + splay_tree_deallocate_fn, + void *)); +extern void splay_tree_delete PARAMS((splay_tree)); +extern splay_tree_node splay_tree_insert + PARAMS((splay_tree, + splay_tree_key, + splay_tree_value)); +extern void splay_tree_remove PARAMS((splay_tree, + splay_tree_key)); +extern splay_tree_node splay_tree_lookup + PARAMS((splay_tree, + splay_tree_key)); +extern splay_tree_node splay_tree_predecessor + PARAMS((splay_tree, + splay_tree_key)); +extern splay_tree_node splay_tree_successor + PARAMS((splay_tree, + splay_tree_key)); +extern splay_tree_node splay_tree_max + PARAMS((splay_tree)); +extern splay_tree_node splay_tree_min + PARAMS((splay_tree)); +extern int splay_tree_foreach PARAMS((splay_tree, + splay_tree_foreach_fn, + void*)); +extern int splay_tree_compare_ints PARAMS((splay_tree_key, + splay_tree_key)); +extern int splay_tree_compare_pointers PARAMS((splay_tree_key, + splay_tree_key)); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _SPLAY_TREE_H */ diff --git a/src/mkutil/cpp/symcat.h b/src/mkutil/cpp/symcat.h new file mode 100644 index 00000000..928870e0 --- /dev/null +++ b/src/mkutil/cpp/symcat.h @@ -0,0 +1,49 @@ +/* Symbol concatenation utilities. + + Copyright (C) 1998, 2000 Free Software Foundation, Inc. + + 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., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef SYM_CAT_H +#define SYM_CAT_H + +#if 1 /* Nick defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) */ +#define CONCAT2(a,b) a##b +#define CONCAT3(a,b,c) a##b##c +#define CONCAT4(a,b,c,d) a##b##c##d +#define STRINGX(s) #s +#else +/* Note one should never pass extra whitespace to the CONCATn macros, + e.g. CONCAT2(foo, bar) because traditonal C will keep the space between + the two labels instead of concatenating them. Instead, make sure to + write CONCAT2(foo,bar). */ +#define CONCAT2(a,b) a/**/b +#define CONCAT3(a,b,c) a/**/b/**/c +#define CONCAT4(a,b,c,d) a/**/b/**/c/**/d +#define STRINGX(s) "s" +#endif + +#define XCONCAT2(a,b) CONCAT2(a,b) +#define XCONCAT3(a,b,c) CONCAT3(a,b,c) +#define XCONCAT4(a,b,c,d) CONCAT4(a,b,c,d) + +/* Note the layer of indirection here is typically used to allow + stringification of the expansion of macros. I.e. "#define foo + bar", "XSTRING(foo)", to yield "bar". Be aware that this only + works for __STDC__, not for traditional C which will still resolve + to "foo". */ +#define XSTRING(s) STRINGX(s) + +#endif /* SYM_CAT_H */ diff --git a/src/mkutil/cpp/system.h b/src/mkutil/cpp/system.h new file mode 100644 index 00000000..80844ae3 --- /dev/null +++ b/src/mkutil/cpp/system.h @@ -0,0 +1,639 @@ +/* Get common system includes and various definitions and declarations based + on autoconf macros. + Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + + +#ifndef GCC_SYSTEM_H +#define GCC_SYSTEM_H + +/* This is the location of the online document giving information how + to report bugs. If you change this string, also check for strings + not under control of the preprocessor. */ +#define GCCBUGURL "" + +#include /* Nick */ + +/* We must include stdarg.h/varargs.h before stdio.h. */ +#ifdef ANSI_PROTOTYPES +#include +#else +#include +#endif + +#ifndef va_copy +# ifdef __va_copy +# define va_copy(d,s) __va_copy((d),(s)) +# else +# define va_copy(d,s) ((d) = (s)) +# endif +#endif + +#ifdef HAVE_STDDEF_H +# include +#endif + +#include + +/* Define a generic NULL if one hasn't already been defined. */ +#ifndef NULL +#define NULL 0 +#endif + +/* The compiler is not a multi-threaded application and therefore we + do not have to use the locking functions. In fact, using the locking + functions can cause the compiler to be significantly slower under + I/O bound conditions (such as -g -O0 on very large source files). + + HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio + code is multi-thread safe by default. If it is set to 0, then do + not worry about using the _unlocked functions. + + fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are + extensions and need to be prototyped by hand (since we do not + define _GNU_SOURCE). */ + +#if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED + +# ifdef HAVE_PUTC_UNLOCKED +# undef putc +# define putc(C, Stream) putc_unlocked (C, Stream) +# endif +# ifdef HAVE_FPUTC_UNLOCKED +# undef fputc +# define fputc(C, Stream) fputc_unlocked (C, Stream) +# endif + +# ifdef HAVE_FPUTS_UNLOCKED +# undef fputs +# define fputs(String, Stream) fputs_unlocked (String, Stream) +# if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED +extern int fputs_unlocked PARAMS ((const char *, FILE *)); +# endif +# endif +# ifdef HAVE_FWRITE_UNLOCKED +# undef fwrite +# define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream) +# if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED +extern int fwrite_unlocked PARAMS ((const PTR, size_t, size_t, FILE *)); +# endif +# endif +# ifdef HAVE_FPRINTF_UNLOCKED +# undef fprintf +/* We can't use a function-like macro here because we don't know if + we have varargs macros. */ +# define fprintf fprintf_unlocked +# if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED +extern int fprintf_unlocked PARAMS ((FILE *, const char *, ...)); +# endif +# endif + +#endif + +/* There are an extraordinary number of issues with . + The last straw is that it varies with the locale. Use libiberty's + replacement instead. */ +#include + +#include + +#include + +#if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO +extern int errno; +#endif + +#ifdef STRING_WITH_STRINGS +# include +# include +#else +# ifdef HAVE_STRING_H +# include +# else +# ifdef HAVE_STRINGS_H +# include +# endif +# endif +#endif + +#ifdef HAVE_STDLIB_H +# include +#endif + +/* If we don't have an overriding definition, set SUCCESS_EXIT_CODE and + FATAL_EXIT_CODE to EXIT_SUCCESS and EXIT_FAILURE respectively, + or 0 and 1 if those macros are not defined. */ +#ifndef SUCCESS_EXIT_CODE +# ifdef EXIT_SUCCESS +# define SUCCESS_EXIT_CODE EXIT_SUCCESS +# else +# define SUCCESS_EXIT_CODE 0 +# endif +#endif + +#ifndef FATAL_EXIT_CODE +# ifdef EXIT_FAILURE +# define FATAL_EXIT_CODE EXIT_FAILURE +# else +# define FATAL_EXIT_CODE 1 +# endif +#endif + +#ifdef HAVE_UNISTD_H +# include +#endif + +#ifdef HAVE_WINDOWS_H /* Nick */ +# include +# undef ERROR +typedef int ssize_t; +#endif + +#ifdef HAVE_SYS_PARAM_H +# include +/* We use this identifier later and it appears in some vendor param.h's. */ +# undef PREFETCH +#endif + +#ifdef HAVE_PARAM_H /* Nick */ +# include +/* We use this identifier later and it appears in some vendor param.h's. */ +# undef PREFETCH +#endif + +#if HAVE_LIMITS_H +# include +#endif + +/* Get definitions of HOST_WIDE_INT and HOST_WIDEST_INT. */ +#include "hwint.h" + +/* A macro to determine whether a VALUE lies inclusively within a + certain range without evaluating the VALUE more than once. This + macro won't warn if the VALUE is unsigned and the LOWER bound is + zero, as it would e.g. with "VALUE >= 0 && ...". Note the LOWER + bound *is* evaluated twice, and LOWER must not be greater than + UPPER. However the bounds themselves can be either positive or + negative. */ +#define IN_RANGE(VALUE, LOWER, UPPER) \ + ((unsigned HOST_WIDE_INT) ((VALUE) - (LOWER)) <= ((UPPER) - (LOWER))) + +/* Infrastructure for defining missing _MAX and _MIN macros. Note that + macros defined with these cannot be used in #if. */ + +/* The extra casts work around common compiler bugs. */ +#define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1)) +/* The outer cast is needed to work around a bug in Cray C 5.0.3.0. + It is necessary at least when t == time_t. */ +#define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \ + ? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0)) +#define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t))) + +/* Use that infrastructure to provide a few constants. */ +#ifndef UCHAR_MAX +# define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char) +#endif + +#ifdef TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# ifdef HAVE_TIME_H +# include +# endif +# endif +#endif + +#ifdef HAVE_FCNTL_H +# include +#else +# ifdef HAVE_SYS_FILE_H +# include +# endif +#endif + +#ifndef SEEK_SET +# define SEEK_SET 0 +# define SEEK_CUR 1 +# define SEEK_END 2 +#endif +#ifndef F_OK +# define F_OK 0 +# define X_OK 1 +# define W_OK 2 +# define R_OK 4 +#endif +#ifndef O_RDONLY +# define O_RDONLY 0 +#endif +#ifndef O_WRONLY +# define O_WRONLY 1 +#endif + +/* Some systems define these in, e.g., param.h. We undefine these names + here to avoid the warnings. We prefer to use our definitions since we + know they are correct. */ + +#undef MIN +#undef MAX +#define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) +#define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) + +/* Returns the least number N such that N * Y >= X. */ +#define CEIL(x,y) (((x) + (y) - 1) / (y)) + +#ifdef HAVE_SYS_WAIT_H +#include +#endif + +#ifndef WIFSIGNALED +#define WIFSIGNALED(S) (((S) & 0xff) != 0 && ((S) & 0xff) != 0x7f) +#endif +#ifndef WTERMSIG +#define WTERMSIG(S) ((S) & 0x7f) +#endif +#ifndef WIFEXITED +#define WIFEXITED(S) (((S) & 0xff) == 0) +#endif +#ifndef WEXITSTATUS +#define WEXITSTATUS(S) (((S) & 0xff00) >> 8) +#endif +#ifndef WSTOPSIG +#define WSTOPSIG WEXITSTATUS +#endif + +/* The HAVE_DECL_* macros are three-state, undefined, 0 or 1. If they + are defined to 0 then we must provide the relevant declaration + here. These checks will be in the undefined state while configure + is running so be careful to test "defined (HAVE_DECL_*)". */ + +#if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF +extern double atof PARAMS ((const char *)); +#endif + +#if defined (HAVE_DECL_ATOL) && !HAVE_DECL_ATOL +extern long atol PARAMS ((const char *)); +#endif + +#if defined (HAVE_DECL_FREE) && !HAVE_DECL_FREE +extern void free PARAMS ((PTR)); +#endif + +#if defined (HAVE_DECL_GETCWD) && !HAVE_DECL_GETCWD +extern char *getcwd PARAMS ((char *, size_t)); +#endif + +#if defined (HAVE_DECL_GETENV) && !HAVE_DECL_GETENV +extern char *getenv PARAMS ((const char *)); +#endif + +#if defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT +extern int getopt PARAMS ((int, char * const *, const char *)); +#endif + +#if defined (HAVE_DECL_GETWD) && !HAVE_DECL_GETWD +extern char *getwd PARAMS ((char *)); +#endif + +#if defined (HAVE_DECL_SBRK) && !HAVE_DECL_SBRK +extern PTR sbrk PARAMS ((int)); +#endif + +#if defined (HAVE_DECL_STRSTR) && !HAVE_DECL_STRSTR +extern char *strstr PARAMS ((const char *, const char *)); +#endif + +#ifdef HAVE_MALLOC_H +#include +#endif + +#if defined (HAVE_DECL_MALLOC) && !HAVE_DECL_MALLOC +extern PTR malloc PARAMS ((size_t)); +#endif + +#if defined (HAVE_DECL_CALLOC) && !HAVE_DECL_CALLOC +extern PTR calloc PARAMS ((size_t, size_t)); +#endif + +#if defined (HAVE_DECL_REALLOC) && !HAVE_DECL_REALLOC +extern PTR realloc PARAMS ((PTR, size_t)); +#endif + +/* If the system doesn't provide strsignal, we get it defined in + libiberty but no declaration is supplied. */ +#ifndef HAVE_STRSIGNAL +# ifndef strsignal +extern const char *strsignal PARAMS ((int)); +# endif +#endif + +#ifdef HAVE_GETRLIMIT +# if defined (HAVE_DECL_GETRLIMIT) && !HAVE_DECL_GETRLIMIT +# ifndef getrlimit +# ifdef ANSI_PROTOTYPES +struct rlimit; +# endif +extern int getrlimit PARAMS ((int, struct rlimit *)); +# endif +# endif +#endif + +#ifdef HAVE_SETRLIMIT +# if defined (HAVE_DECL_SETRLIMIT) && !HAVE_DECL_SETRLIMIT +# ifndef setrlimit +# ifdef ANSI_PROTOTYPES +struct rlimit; +# endif +extern int setrlimit PARAMS ((int, const struct rlimit *)); +# endif +# endif +#endif + +/* HAVE_VOLATILE only refers to the stage1 compiler. We also check + __STDC__ and assume gcc sets it and has volatile in stage >=2. */ +#if !defined(HAVE_VOLATILE) && !defined(__STDC__) && !defined(volatile) +#define volatile +#endif + +#if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT +extern void abort PARAMS ((void)); +#endif + +/* 1 if we have C99 designated initializers. */ +#if !defined(HAVE_DESIGNATED_INITIALIZERS) +#define HAVE_DESIGNATED_INITIALIZERS \ + ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)) +#endif + +/* 1 if we have _Bool. */ +#ifndef HAVE__BOOL +# define HAVE__BOOL \ + ((GCC_VERSION >= 3000) || (__STDC_VERSION__ >= 199901L)) +#endif + + +#if HAVE_SYS_STAT_H +# include +#endif + +/* Test if something is a normal file. */ +#ifndef S_ISREG +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#endif + +/* Test if something is a directory. */ +#ifndef S_ISDIR +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#endif + +/* Test if something is a character special file. */ +#ifndef S_ISCHR +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#endif + +/* Test if something is a block special file. */ +#ifndef S_ISBLK +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#endif + +/* Test if something is a socket. */ +#ifndef S_ISSOCK +# ifdef S_IFSOCK +# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) +# else +# define S_ISSOCK(m) 0 +# endif +#endif + +/* Test if something is a FIFO. */ +#ifndef S_ISFIFO +# ifdef S_IFIFO +# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +# else +# define S_ISFIFO(m) 0 +# endif +#endif + +/* Approximate O_NONBLOCK. */ +#ifndef O_NONBLOCK +#define O_NONBLOCK O_NDELAY +#endif + +/* Approximate O_NOCTTY. */ +#ifndef O_NOCTTY +#define O_NOCTTY 0 +#endif + +/* Define well known filenos if the system does not define them. */ +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +/* Some systems have mkdir that takes a single argument. */ +#ifdef MKDIR_TAKES_ONE_ARG +# define mkdir(a,b) mkdir(a) +#endif + +/* Provide a way to print an address via printf. */ +#ifndef HOST_PTR_PRINTF +# ifdef HAVE_PRINTF_PTR +# define HOST_PTR_PRINTF "%p" +# else +# define HOST_PTR_PRINTF \ + (sizeof (int) == sizeof (char *) ? "%x" \ + : sizeof (long) == sizeof (char *) ? "%lx" : "%llx") +# endif +#endif /* ! HOST_PTR_PRINTF */ + +/* By default, colon separates directories in a path. */ +#ifndef PATH_SEPARATOR +#define PATH_SEPARATOR ':' +#endif + +#ifndef DIR_SEPARATOR +#define DIR_SEPARATOR '/' +#endif + +/* Define IS_DIR_SEPARATOR. */ +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(CH) ((CH) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(CH) \ + (((CH) == DIR_SEPARATOR) || ((CH) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +/* Say how to test for an absolute pathname. On Unix systems, this is if + it starts with a leading slash or a '$', the latter meaning the value of + an environment variable is to be used. On machien with DOS-based + file systems, it is also absolute if it starts with a drive identifier. */ +#ifdef HAVE_DOS_BASED_FILE_SYSTEM +#define IS_ABSOLUTE_PATHNAME(STR) \ + (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$' \ + || ((STR)[0] != '\0' && (STR)[1] == ':' && IS_DIR_SEPARATOR ((STR)[2]))) +#else +#define IS_ABSOLUTE_PATHNAME(STR) \ + (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$') +#endif + +/* Get libiberty declarations. */ +#include "libiberty.h" +#include "symcat.h" + +/* Provide a default for the HOST_BIT_BUCKET. + This suffices for POSIX-like hosts. */ + +#ifndef HOST_BIT_BUCKET +#define HOST_BIT_BUCKET "/dev/null" +#endif + +/* Be conservative and only use enum bitfields with GCC. + FIXME: provide a complete autoconf test for buggy enum bitfields. */ + +#if (GCC_VERSION > 2000) +#define ENUM_BITFIELD(TYPE) enum TYPE +#else +#define ENUM_BITFIELD(TYPE) unsigned int +#endif + +#ifndef offsetof +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER) +#endif + +/* Traditional C cannot initialize union members of structs. Provide + a macro which expands appropriately to handle it. This only works + if you intend to initialize the union member to zero since it relies + on default initialization to zero in the traditional C case. */ +#ifdef __STDC__ +#define UNION_INIT_ZERO , {0} +#else +#define UNION_INIT_ZERO +#endif + +/* Various error reporting routines want to use __FUNCTION__. */ +#if (GCC_VERSION < 2007) +#ifndef __FUNCTION__ +#define __FUNCTION__ "?" +#endif /* ! __FUNCTION__ */ +#endif + +/* __builtin_expect(A, B) evaluates to A, but notifies the compiler that + the most likely value of A is B. This feature was added at some point + between 2.95 and 3.0. Let's use 3.0 as the lower bound for now. */ +#if (GCC_VERSION < 3000) +#define __builtin_expect(a, b) (a) +#endif + +/* Provide some sort of boolean type. We use stdbool.h if it's + available. This must be after all inclusion of system headers, + as some of them will mess us up. */ +#undef bool +#undef true +#undef false +#undef TRUE +#undef FALSE + +#ifdef HAVE_STDBOOL_H +# include +#else +# if !HAVE__BOOL +typedef char _Bool; +# endif +# define bool _Bool +# define true 1 +# define false 0 +#endif + +#define TRUE true +#define FALSE false + +/* As the last action in this file, we poison the identifiers that + shouldn't be used. Note, luckily gcc-3.0's token-based integrated + preprocessor won't trip on poisoned identifiers that arrive from + the expansion of macros. E.g. #define strrchr rindex, won't error + if rindex is poisoned after this directive is issued and later on + strrchr is called. + + Note: We define bypass macros for the few cases where we really + want to use the libc memory allocation routines. Otherwise we + insist you use the "x" versions from libiberty. */ + +#define really_call_malloc malloc +#define really_call_calloc calloc +#define really_call_realloc realloc + +#if (GCC_VERSION >= 3000) + +/* Note autoconf checks for prototype declarations and includes + system.h while doing so. Only poison these tokens if actually + compiling gcc, so that the autoconf declaration tests for malloc + etc don't spuriously fail. */ +#ifdef IN_GCC +#undef malloc +#undef realloc +#undef calloc +#undef strdup + #pragma GCC poison malloc realloc calloc strdup + +/* Old target macros that have moved to the target hooks structure. */ + #pragma GCC poison ASM_OPEN_PAREN ASM_CLOSE_PAREN \ + FUNCTION_PROLOGUE FUNCTION_EPILOGUE \ + FUNCTION_END_PROLOGUE FUNCTION_BEGIN_EPILOGUE \ + DECL_MACHINE_ATTRIBUTES COMP_TYPE_ATTRIBUTES INSERT_ATTRIBUTES \ + VALID_MACHINE_DECL_ATTRIBUTE VALID_MACHINE_TYPE_ATTRIBUTE \ + SET_DEFAULT_TYPE_ATTRIBUTES SET_DEFAULT_DECL_ATTRIBUTES \ + MERGE_MACHINE_TYPE_ATTRIBUTES MERGE_MACHINE_DECL_ATTRIBUTES \ + MD_INIT_BUILTINS MD_EXPAND_BUILTIN ASM_OUTPUT_CONSTRUCTOR \ + ASM_OUTPUT_DESTRUCTOR SIGNED_CHAR_SPEC + +/* And other obsolete target macros, or macros that used to be in target + headers and were not used, and may be obsolete or may never have + been used. */ + #pragma GCC poison INT_ASM_OP ASM_OUTPUT_EH_REGION_BEG \ + ASM_OUTPUT_EH_REGION_END ASM_OUTPUT_LABELREF_AS_INT \ + DOESNT_NEED_UNWINDER EH_TABLE_LOOKUP OBJC_SELECTORS_WITHOUT_LABELS \ + OMIT_EH_TABLE EASY_DIV_EXPR IMPLICIT_FIX_EXPR \ + LONGJMP_RESTORE_FROM_STACK MAX_INT_TYPE_SIZE ASM_IDENTIFY_GCC \ + STDC_VALUE TRAMPOLINE_ALIGN ASM_IDENTIFY_GCC_AFTER_SOURCE \ + SLOW_ZERO_EXTEND SUBREG_REGNO_OFFSET DWARF_LINE_MIN_INSTR_LENGTH \ + BLOCK_PROFILER BLOCK_PROFILER_CODE FUNCTION_BLOCK_PROFILER \ + FUNCTION_BLOCK_PROFILER_EXIT MACHINE_STATE_SAVE \ + MACHINE_STATE_RESTORE + +#endif /* IN_GCC */ + +/* Note: not all uses of the `index' token (e.g. variable names and + structure members) have been eliminated. */ +#undef bcopy +#undef bzero +#undef bcmp +#undef rindex + #pragma GCC poison bcopy bzero bcmp rindex + +#endif /* GCC >= 3.0 */ + +#endif /* ! GCC_SYSTEM_H */ diff --git a/src/mkutil/cpp/version.c b/src/mkutil/cpp/version.c new file mode 100644 index 00000000..a3336ad7 --- /dev/null +++ b/src/mkutil/cpp/version.c @@ -0,0 +1,4 @@ +#include "ansidecl.h" +#include "version.h" + +const char *const version_string = "3.2 20020927 (prerelease)"; diff --git a/src/mkutil/cpp/version.h b/src/mkutil/cpp/version.h new file mode 100644 index 00000000..fc486018 --- /dev/null +++ b/src/mkutil/cpp/version.h @@ -0,0 +1,4 @@ +#ifndef GCC_VERSION_H +#define GCC_VERSION_H +extern const char *const version_string; +#endif /* ! GCC_VERSION_H */ diff --git a/src/mkutil/cpp/version.obj b/src/mkutil/cpp/version.obj new file mode 100644 index 0000000000000000000000000000000000000000..0128b5a52127f0bd2536de2c3e7d55ed51aa6864 GIT binary patch literal 807 zcmZ`%v2N5r5FMX61eXx5Kq-O*ixi;?Q8pW&6hfK{F^GUJMB;$TQgpWWP7A)+TKiI@ zq@bjY((nfq)HM7F7_(u7=xMvaDpEhri2}6ZgU;?i@t%(at+sS$oX!0KfD45>d5tXRix8A9TcqfW{I`El~5JT zU-g%l* zre@%?jT-1nn?-jW+T3HF5T1DAJ!Y*;ODz-G&*hSN_(w1g@BYqq+Q_~4pKC?yf@g8~ zhYzqvoBR9%VCYmgjx34;its92#lP=2-~u@=j{j07^!lztLYcNniO@s4ju8n)U)_$q z`lLKu!y$oOnI|HIk`bqd)h{(ge_V&;LN>GTg&qiPvG=0wm7zIJJsZgy>ChNmhr}~& LcW}EuJq-8<)~<*+ literal 0 HcmV?d00001 diff --git a/src/mkutil/cpp/xexit.c b/src/mkutil/cpp/xexit.c new file mode 100644 index 00000000..709e5b25 --- /dev/null +++ b/src/mkutil/cpp/xexit.c @@ -0,0 +1,53 @@ +/* xexit.c -- Run any exit handlers, then exit. + Copyright (C) 1994, 95, 1997 Free Software Foundation, Inc. + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If not, write +to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* + +@deftypefn Replacement void xexit (int @var{code}) + +Terminates the program. If any functions have been registered with +the @code{xatexit} replacement function, they will be called first. +Termination is handled via the system's normal @code{exit} call. + +@end deftypefn + +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include +#ifdef HAVE_STDLIB_H +#include +#endif +#include "libiberty.h" + + +/* This variable is set by xatexit if it is called. This way, xmalloc + doesn't drag xatexit into the link. */ +void (*_xexit_cleanup) PARAMS ((void)); + +void +xexit (code) + int code; +{ + if (_xexit_cleanup != NULL) + (*_xexit_cleanup) (); + exit (code); +} diff --git a/src/mkutil/cpp/xexit.obj b/src/mkutil/cpp/xexit.obj new file mode 100644 index 0000000000000000000000000000000000000000..c4cb62b5fc4a84cf9cc725831819f07915408aae GIT binary patch literal 1070 zcmZuwK~EDw6n@(+1&hUvA|6a&NC;6$$AXa%j6tb2YCs66r<%39JFTNjchj8(tT*w- zAMl`mz@zcxQH>XWf&KyxUi<^#doyh*i7$CG-}m;L+1YvDu2@-kJ6TxzlmQq86Fg`M zUu}yHg=qwzyQDkk9pHiR(#F(gw=`t|{6=z!Ges8j9yrTfiCv{DW?(o?Iqcm{y-s`Oh?64e#Ev~ihTn=5)!vGUdO%nVzL zmE4kT*=(?Kv=z%xwAd5TN@Ubzvva&u;tR9$3%oP~!%qK+84??F9P`&X9CTO%`sHUJ z=L}(it|#k9fyh7(F2aygJZp3SBd%7uekf|qG%kScOyaZLj%+Gd5v5IY^*BllO^GJ5 zEnGFy5fAS8&ucBiV{FUdcFhfCqTZo2k2wtQJ17rd5e@3vj}FSivV5EmGAUcgXs^4Jlz|xfr(8t;OMzTPCx&mYHYOJudgn0b_ zz1sHYOFRy|zr2oDk2;FOBY=iw+UT2-9&h>BAufZ1i98&k#zwCmdz$QNTjc7K(eGzE zm2Huu$;BT&-l!aFsX|GSfqr*WpKXiLh<;lA^7A!94AVk`ZS;D^Dj;E)}4Rt_kfD2P$-HKjy9ocd8|7r9kwnhKi$rwfIp7b9410uqt AxBvhE literal 0 HcmV?d00001 diff --git a/src/mkutil/cpp/xmalloc.c b/src/mkutil/cpp/xmalloc.c new file mode 100644 index 00000000..dae195c2 --- /dev/null +++ b/src/mkutil/cpp/xmalloc.c @@ -0,0 +1,183 @@ +/* memory allocation routines with error checking. + Copyright 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc. + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* + +@deftypefn Replacement void* xmalloc (size_t) + +Allocate memory without fail. If @code{malloc} fails, this will print +a message to @code{stderr} (using the name set by +@code{xmalloc_set_program_name}, +if any) and then call @code{xexit}. Note that it is therefore safe for +a program to contain @code{#define malloc xmalloc} in its source. + +@end deftypefn + +@deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size}) +Reallocate memory without fail. This routine functions like @code{realloc}, +but will behave the same as @code{xmalloc} if memory cannot be found. + +@end deftypefn + +@deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize}) + +Allocate memory without fail, and set it to zero. This routine functions +like @code{calloc}, but will behave the same as @code{xmalloc} if memory +cannot be found. + +@end deftypefn + +@deftypefn Replacement void xmalloc_set_program_name (const char *@var{name}) + +You can use this to set the name of the program used by +@code{xmalloc_failed} when printing a failure message. + +@end deftypefn + +@deftypefn Replacement void xmalloc_failed (size_t) + +This function is not meant to be called by client code, and is listed +here for completeness only. If any of the allocation routines fail, this +function will be called to print an error message and terminate execution. + +@end deftypefn + +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include "ansidecl.h" +#include "libiberty.h" + +#include + +#ifdef __STDC__ +#include +#else +#define size_t unsigned long +#define ptrdiff_t long +#endif + +#if VMS +#include +#include +#else +/* For systems with larger pointers than ints, these must be declared. */ +PTR malloc PARAMS ((size_t)); +PTR realloc PARAMS ((PTR, size_t)); +PTR calloc PARAMS ((size_t, size_t)); +PTR sbrk PARAMS ((ptrdiff_t)); +#endif + +/* The program name if set. */ +static const char *name = ""; + +#ifdef HAVE_SBRK +/* The initial sbrk, set when the program name is set. Not used for win32 + ports other than cygwin32. */ +static char *first_break = NULL; +#endif /* HAVE_SBRK */ + +void +xmalloc_set_program_name (s) + const char *s; +{ + name = s; +#ifdef HAVE_SBRK + /* Win32 ports other than cygwin32 don't have brk() */ + if (first_break == NULL) + first_break = (char *) sbrk (0); +#endif /* HAVE_SBRK */ +} + +void +xmalloc_failed (size) + size_t size; +{ +#ifdef HAVE_SBRK + extern char **environ; + size_t allocated; + + if (first_break != NULL) + allocated = (char *) sbrk (0) - first_break; + else + allocated = (char *) sbrk (0) - (char *) &environ; + fprintf (stderr, + "\n%s%sCannot allocate %lu bytes after allocating %lu bytes\n", + name, *name ? ": " : "", + (unsigned long) size, (unsigned long) allocated); +#else /* HAVE_SBRK */ + fprintf (stderr, + "\n%s%sCannot allocate %lu bytes\n", + name, *name ? ": " : "", + (unsigned long) size); +#endif /* HAVE_SBRK */ + xexit (1); +} + +PTR +xmalloc (size) + size_t size; +{ + PTR newmem; + + if (size == 0) + size = 1; + newmem = malloc (size); + if (!newmem) + xmalloc_failed (size); + + return (newmem); +} + +PTR +xcalloc (nelem, elsize) + size_t nelem, elsize; +{ + PTR newmem; + + if (nelem == 0 || elsize == 0) + nelem = elsize = 1; + + newmem = calloc (nelem, elsize); + if (!newmem) + xmalloc_failed (nelem * elsize); + + return (newmem); +} + +PTR +xrealloc (oldmem, size) + PTR oldmem; + size_t size; +{ + PTR newmem; + + if (size == 0) + size = 1; + if (!oldmem) + newmem = malloc (size); + else + newmem = realloc (oldmem, size); + if (!newmem) + xmalloc_failed (size); + + return (newmem); +} diff --git a/src/mkutil/cpp/xmalloc.obj b/src/mkutil/cpp/xmalloc.obj new file mode 100644 index 0000000000000000000000000000000000000000..a610245c347f4e3896805882edb37ed2d654236f GIT binary patch literal 3074 zcmZ`*U2IfE6h7PC-o3ruwp-f}`~fdNC55J!<*y({LFxw47FvFc4>gzlxmzyopL_2@ zA&?L&F}MkdMosj=#E1|2fQd2j!Nh1pi2C4z#F&`yVAPPn14ds+D)l=vbGvtePBPz| zIdkTlGw06CxnmKH_N?gIaVAdm1j%CMYfjET=BO^Mfe?!XJ=GdXvhq&0KE3)tFmkz# zXdUcsMWv=2%`=qTW#uz|CNM%fhOerRk2 z1Q)^e2PV9#5hZCQnKW@&`FAidO+lEzKEs9m8_qk0OugtA-R$;?6dqTKd3emb3KkQQS!AhR(vzDWz+6#cwp+>eQas5YMydFFbx}0A0)6ec zTlQ_AyWjMp%jWe0ciAhgP_1}!w9Z}Lq3w68x$)zqH?t>v$CGv(U5ySkZZ^{ThdlAcZ_%0j zfW@A#^t0dl9aqwG+`AE1LgSFWzmcAsXz+cZ$s>$Mb^@-mG<&K4Xhcb|#-EaI_OwoQ z%-69O!b%f?!MXI@?CCkGCmQ4WWS|6jc%rY(o=#A`>qwf$Up-x1dVX1w-K@g#f`qjcoShu#mP?|$6g~odQvhWEfc!6z(<6%6(~nJ z6Fe+*yMX*HHQEh)5VfBsflGx{0}cr3H6Wj%e)BHpyP&=cXzqwWRv(F?$SaUzKhLyl4b7^4!folXHYdIcD#^S};z189iTO7t$| zD18Ks(Pu!7z5~YTN1#r>0S&qa>=Y-N=r71oaVui<59D^b4b+HFMVt(vPRoEDvum*^aJ<*2W_LpCIA2c literal 0 HcmV?d00001 diff --git a/src/mkutil/cpp/xstrdup.c b/src/mkutil/cpp/xstrdup.c new file mode 100644 index 00000000..fb91ee0c --- /dev/null +++ b/src/mkutil/cpp/xstrdup.c @@ -0,0 +1,34 @@ +/* xstrdup.c -- Duplicate a string in memory, using xmalloc. + This trivial function is in the public domain. + Ian Lance Taylor, Cygnus Support, December 1995. */ + +/* + +@deftypefn Replacement char* xstrdup (const char *@var{s}) + +Duplicates a character string without fail, using @code{xmalloc} to +obtain memory. + +@end deftypefn + +*/ + +#include +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#ifdef HAVE_STRING_H +#include +#endif +#include "ansidecl.h" +#include "libiberty.h" + +char * +xstrdup (s) + const char *s; +{ + register size_t len = strlen (s) + 1; + register char *ret = xmalloc (len); + memcpy (ret, s, len); + return ret; +} diff --git a/src/mkutil/cpp/xstrdup.obj b/src/mkutil/cpp/xstrdup.obj new file mode 100644 index 0000000000000000000000000000000000000000..ccaad9f64ea95357133299abe18909343b26c0c7 GIT binary patch literal 1050 zcmZuwO-~b16ur|ar2-{QMB+vrj8T;EENBS9M6k698Y&3ls;1KEYx8tUCo@x0*s>zs zxHjr9aOn>)(VyUoy$K68?i$lr&z+AjB;4fPckg-UzK^+Q*0dyjp2{qLN)TP4z(mcF zrne`L=cLgPxP_83otE3Gd&czUUE{(0Y*l$i;eKIe z##pyK)l>&+w_y}oOKfo*tg2yT$az2{1bRnLPZi9Tj`sQtxGi92NWB?cOGnx}|;uk97h6 ze)D4#Wf_bKx&}YyM-Sl{p9sG*zfz;C@CmvDuhS#=r2q0EVCXqb(*9&-c?I$Hi@UOC zF64w=tNsynd}8p}{tbv4TGTKz0O40mbV8`w$&C>jfTKf|XX<4k>Kg0!yv3Evx6(D% zE=Ok;SFH|M*SL?Y)vre%>H)73UWhXt8ct~Ah?vK^4y@9YP1D{FGjOQVY3^87D}02H zK#1sdj3cVy5y1F#$xrdWJkNm%E8wJ%`WzB6K!Te_RX3voe~$lU5DnhN|JiwC{6CYU Bx0e6_ literal 0 HcmV?d00001 diff --git a/src/mkutil/cpp/xstrerror.c b/src/mkutil/cpp/xstrerror.c new file mode 100644 index 00000000..e163f0c6 --- /dev/null +++ b/src/mkutil/cpp/xstrerror.c @@ -0,0 +1,67 @@ +/* xstrerror.c -- jacket routine for more robust strerror() usage. + Fri Jun 16 18:30:00 1995 Pat Rankin + This code is in the public domain. */ + +/* + +@deftypefn Replacement char* xstrerror (int @var{errnum}) + +Behaves exactly like the standard @code{strerror} function, but +will never return a @code{NULL} pointer. + +@end deftypefn + +*/ + +#include + +#include "libiberty.h" +#include "config.h" + +#ifdef VMS +#include +#if !defined (__STRICT_ANSI__) && !defined (__HIDE_FORBIDDEN_NAMES) +extern char *strerror PARAMS ((int,...)); +#define DONT_DECLARE_STRERROR +#endif +#endif /* VMS */ + +#ifndef DONT_DECLARE_STRERROR +extern char *strerror PARAMS ((int)); +#endif + +/* If strerror returns NULL, we'll format the number into a static buffer. */ + +#define ERRSTR_FMT "undocumented error #%d" +static char xstrerror_buf[sizeof ERRSTR_FMT + 20]; + +/* Like strerror, but result is never a null pointer. */ + +char * +xstrerror (errnum) + int errnum; +{ + char *errstr; +#ifdef VMS + char *(*vmslib_strerror) PARAMS ((int,...)); + + /* Override any possibly-conflicting declaration from system header. */ + vmslib_strerror = (char *(*) PARAMS ((int,...))) strerror; + /* Second argument matters iff first is EVMSERR, but it's simpler to + pass it unconditionally. `vaxc$errno' is declared in + and maintained by the run-time library in parallel to `errno'. + We assume that `errnum' corresponds to the last value assigned to + errno by the run-time library, hence vaxc$errno will be relevant. */ + errstr = (*vmslib_strerror) (errnum, vaxc$errno); +#else + errstr = strerror (errnum); +#endif + + /* If `errnum' is out of range, result might be NULL. We'll fix that. */ + if (!errstr) + { + sprintf (xstrerror_buf, ERRSTR_FMT, errnum); + errstr = xstrerror_buf; + } + return errstr; +} diff --git a/src/mkutil/cpp/xstrerror.obj b/src/mkutil/cpp/xstrerror.obj new file mode 100644 index 0000000000000000000000000000000000000000..3a64b5bc8c60d6822dfb8e24a2540fb585d1b823 GIT binary patch literal 1390 zcmZux&rcIU6n@L%7K+7!2x=m(f(B_A3L-%g1F|;$2ndLJDk<&m78cv?W_K2l#KeRc zV|w#!jDL!WCLa9`53V%+%pzwP+h&VETJdual5>okJG?={?=5U^k@FRs zgzKJw7^twc#tNPnp+PDdg#JrNe`H3U=Oh36&`;q!QJW2TL4J=Lcp9C#BRtA)#4w9_ zzr;&cVS4`loTf&B#rZoAZ!ct4RNB-qv8|bBMXnA#x~5(qA1PQ|)kd{cN?mlgRkn7m%DSrAWydO+uKLt; zJaI6Q!G6S9m!zfu%il6b#G$(b~*$>YHudc1xm6FaVoolDOLP3LA83l z?%+UzFxM7P@X%w)@69O^%^7k9znB0yd5LD&wkkZwDI}&+bZk$AK82pOYvy=oNRDmm z8+lj6v{q~@pDS4&e}`16UI%;#y*T_puQR}YhF%<=RR1hjGi^)zh``?G);F2j-isRe z7pe^rdaz<3iA2TH~4 z1ln9ToC_GE*q?z(?E8W;p9Q~S*t%afE8H~H;F#5cD+Y*r(F@Oe6Ehmp`;WgHTl!?0 zIY!|xE8;ODkL+I^U|nj~oaq9FSsiZ!vyAip2Fpd$ESQ1Nu8p&uJltDCNMiG!iG*mD!F<@YCFRhp% z8(KEo9qr{kCp~X3v8Fxgsilw)>_Yc*0U}Y-nXB#a~#LRnI^{_hEG2)d;a}LFQSuY zJe$n@GXA$S58GD#cILY3ng;i_`nm_}D;{=luBff86Ww2^a@R|>?wVS6-n~WchwCb< z<|ZX2WQ0+#i+$jPt1|hCh^zn7^d}~>Z|4)U;6Jo8=81{$AN^7+^S{26dtwIr=AT#x zf68*6g|DsITunGWPO;y|ajR^x+}fJFC6TyZF4>l7i{rQ_5whP3-IfO51@{bnd#!hT z6JO{T@j0)}ibELjjeSr$O3eH*j{-T)ZR2jS-ah@AW#dvNAnF;8OaF9;PYo@YX(QC1 z`I{?N?GzFF_}B0tx}FUC@FG7q$2~B&zOq8B;J6F%2n7w-co2bN-0;q|z_{}z2ych; zhJAREpBFK6Yb?OUR3;*j@#Ld~GPwGxt#z9@?wrE^$ED8h>iZD9Efrt%7G{c zq8x~FAj*L#2cjH^av;iqC>Hw#|AH%{xYPHA^h1TlVMNkaNjf0#twR$HpXXjYzyR6i5<9SZ3Rek+_ zUAC~a`bL~b3P0FtD5=aJ$8`Er6dQS}Y_DRhl4 zFmR!*c%Zd-#CYLa#0My-d`vKwGOVee!1_6)ACNC4NXcsP;Mzcve#A-;#xSr(|6gGY zM;L|`?2D&peR23bQj>oD)h&!CE$xlzWA*FTcfuTEaqljR6W8KU^K0~Ov=GpUR8y!* z^@1_@1Pi`z(Wq&ve<|;@TH=4>rzvI#%%!fHnaj1bOM;nNfHxy1yS=4dOa#-=O3UOP zvopKBvqS}Wsr;I$<~yGDim?bb?s{4l=auLtI#h`o(!UDd-0srfuo^db6bpD`lA51x z;af)$Thh5QwOiie;5KdSR9At975vU*bz)my2HzTE+MI{lJJ%3h`Yr+4mvu(y)L%1A z6W{8(4BlMH?~GRyoQG_=NrfOsK<+w>2UI8GgC84|0igFyY<(iV;jc#BGPH!@Xq`It+-YD%}ui>rZT zqBN^ie>R*pjU`~Pg9+DQ#n+KQoLZ`X8-Zm?etPzCPluFPtUrS8S(e>yOjTC%O0u$A zIB*Oo9YLkmrQ|!*u1y=u@9&g%XYgSjh_OeA@M`xnUhv?0Dw>vWD{Ct-gO@gl@xe=< z7x^x3gBM8zPK@p1M8n?2HFyJVzdp~&aeh5F8FDC{CGSVg$j4GPc0$mW1m>EOps$)p zB@ejsiN&|z1M%L)=A#@}&)Q0wRwxAAYyA3Uu*hGcf73z%zL$5Ju}{A0<*X(K-pvl) z&57<3J%2Jm24eKRKo^Lqz6E*XYY#)7et=l0Car(X3*PVMJsrDa)DCrC%hNzrq9;Vs z`YElgI>So4)JnUtQ!j8(ok_M%KiZco;`BnKLoIa%ya;lT(@&v6VZ7)(&^v{?i5O#^ ztWG-yRtiTUF#Az|)qDp&xpsX1J3d)@F2J$W*(|`(82}Y5;KoRR4MCia{Ez_gHvHps z2od&K8nA83S^Nx&C{08%bj|hXntn5N9X!;LgDX-uWTYsIe*%!!=}!~jq66nF3U5@C z&f={^dt}5jP(N9Xv#6He=RNZYq~X1d)wgzo9cSy}bG;|R#=LBKQ?(DK&( z67fY)7#U`&A31NbD#-)BG$f7T?c$C1thP`}O<@1v#yb{(Xc0Pojdn-1a*ZnYEV%cPkBzC@W% zar&W;L}f<4w84y|n34+6g3i9W7-yM0{{DaTxug?*rsZ%|2jOXQ541 zpI_qTDi45ToWD|;O}^akDk>>es&q5;0kAClbldAnY7oiQo~E}=04Pbj@zwFRV1HRj z+DWgv>!1i9^*;?LAecfO6@p(1;EmMhg9JGdNDa zlOE+)P4mEhgdO|_9)5FvD?D?4GoJd}L#zoazVm+l3xLCLt_o_rQrPQXqf5j|h*c0Q z_3G;oEiZ0Isu(d=-*huF7BhH#A6}|W5M-tjF9ClI=&lG*054@>C~7Sv-udj)O43%K zJDi1d9zk@=?ZVQY4^lv9)1~JTRzIof z(#!BIC`b-&dxG^og;Jn8)|9A{0NHWh0Ra^%hwRdn5`E_!(9_ahA};Xj|4i>?#$9qK zM!HG!34YBt0x@*@F4o`BK_;TL3Z^uoPw}uI!&!nZJU?X1MVTv6nvKUhN&aJyNbxM* zfNF5cUqoUKCM}({rjB>)s(mOgi?@k2rFvH`u!YPragl7=Fl?GJ7>#1|pCLG4 zQ+53Zcq#L|R3@gE>iSBl3HtI?BbV_Of7Q7SFZ3C&m}+--fDD zW~5>iNRej~kHZXtaOW^Svmt1tjh#dJNnX)OWBhRtGkmse3_;$)b4uJMwR7YBkc>Jc1BQ3>s_dccx3bL~CIa>p9-vOH^3S057ODk~p$=Kh zf^2lzB&T1WOJbWCKYf{T9ffkz=DETP&d#*l2fpV|}( zB{`@-8(mL7=4`$QBA)g-TMY7T;uNCsX_vG4Eqtr1g^W=Q!vM~AP=s9N;4(gN#BBMY z!-i1l#-`C8h#paB8l_2ylvt!c2Nsf0n^2-}rHbD&obM29rDA26VOoJrNmf^43SdP-qp5lz})

    =ID(%d3Nz0_f{f-QQ1gtWHkH6!*#Dp=dS{HEaBj|DG1CdCC`bt@%~rafsi zdPphiYP14DbPT=3OB1^D(`Z3XO)fw_OjS(Y*g1Um`gXb3CAYic!!<<>`(tW4b#lQ7 zXisIJIGk#d94j5}z(Bx>&Nf?abGzuVKBWt)?OAhlbdUX{JYZ%Y#bEP8&Sq;8bv1Vc zV6&Rfi`V@SVv`e-;X#WpVvGj-aLGidYU@bmbvd~olQBn8_FE-G9l=t} zo}s02O1Un^E9L!NKGS6+2CGa=)%$ITILrmng?glkLoazHAtzQJMGxbHg=R2dS35S& z>dNdCZz~XI7Ko|WMhj&+k=-{N?WNl{2rTV}%X;w|6Rek@>T}58=Xy?vpYyyXPH(zI z%~M0ZYZ};A6HV#(Q2Cll$(r;2Ez$V~FyF zDd0#DeoMDFSxwr8G7X=aRhR<4N%nwkBj#ucO|K#z{1~zg9dn5>iNjC3A%G}QFcO}2 ziE-@RrGG02=+0uU=J}H}`6D9=ZFz&A=k_z{hQWUjaIAp2BhSs#Zty{j>W zqwZBwic&~Im+iLP;XfL7ysDSfuI$spl1uGU-()ZHm3Vbvdu*_?)UXFTvs$O+whZlf zGdPo5(KfZs);h6u!iwddOZ6Xu0StF`J0nHN@d=G+f9ugyB2+wv)*GRM&5Eu~w;rUZ zyo@xOGNCktBqc#|=J*_sChU#{u7)tKlxygy7odZNOO(dZFzqTuCny)xMn_lNZTZ7* z$-n1@|767B8=;Ei%5DceDWygF>AN9Md}(9fYw@j~Rek8?@#^L6JYQK`7P#- zm+SeKw{{#0-o&j&er?HZuGT57!fLOlOYynt`>EtdQ#g=KEFVW;B`YroG-vNbXZTo= zsjr8NEB8B!@XBpSCB?~wDKSQD@Jgl>hj0Xe=9YHn-n|eOa>(Xvmf1^&bKe*7 z55=>H^c1=p7N}APr4>BVV0{W2f0zc(%iD*J1B~4x3@=u#>Opu(?bt&g|&a zaz_b2d%HUJMk+0Zp{=Z00}(x+%#)CFm?SFYA*FnzZNj1o@w!FzqI1y>XUmOf1;4RD zIWipC$K_XThVYws1j(<)1Z?-UEw?SdtJB&1XOQYSW6ijnN807kx<~892V^}{^vU`( zae=HSi|GZ9h z9+lr2k&nkTy&43h@z`OSL_o_dOYG^Zhlr5%FNg&N;#^rz#MrFIN#3EC+9gl$x8A-Y zMCX);q`6@ot?3=}MbqqC6b_ym34WFHa!^4LjHKd(?9+YI@E-haux}##>Zd?3nhTnY zpuanahTa2-;5pIAW2S$d>PsGLqCK%EmNhkD%PGY~;5zt#-sr1ny1uTZ%sB)UZE`H3w-i8Yka`^#Fk^4Nw9cLta2k@asPV1cI29DS(a)eTCZ1P}_{<&2K5vpd$4v zjSgq?AQWV^a3K4%A;43mli8s7*%9L9&;-SI()pEtK>{vd|AED)Xsi{3sSUn+u+oY457mX~|d=u?UZ`rbp2rQ|oTyP zN(B9VF9Ss56-tR@(2V;IvqUSzxxp*dqC0qHt2ilm1>NpR3NO4W^!+nlPy$!q>8NEnROQtE2|Z2@t#|GtBa5?nCxz?FoXy|GC%C;0 zZmX<2oGpD26Y_e zN>~vP)a^S*q5)&p8>?GRJDXp}*A{spGJY9vUa#?Px9=5#2zI)`9Iy7mVT{h6moa)d zwbu}iDIoaI^_{|FJT+FnM26_mvp@*O8A|Hc=UDbes7hEKyQAB8me3n>Wc@zz4q1;E zUn+1m(=v3QfCB1gF=myuvZR=q5~zg-V@BV*;0-J2F91Zd>}<7wZ#gdBI^?@5h*O;} za;J2Z5jlm6+4n2rX4N?=Ib!<`;`6`*#0g)>-$znWas;nD2)l_jv4#FlpF>!Q~Lo>M%X8{ z42=su&w?3SZ9uy(Qn9u6vdek7| z++||?7PYW{iz2`bR@koy;acyTMfHJZ1@xqUquzodx(bBCdx$ABaw)Yq6HhN|N)Ek; z!ksU+f76()KhNHO-EMq11|aDF$`bbK-z7i$G{uP5x14@->Tc-W4HJjY%BL}DAAXZK ztzI^GbwIsL`C{GUU5=`(5wiiytifaDVOZ@-?3VC$9!>4nOoJUT3kO=-AC03J+V3#< z&9(m062;f96d%*Y+iBoB23taBmMOJEtN$tP-l#oh){QU+l4CiW=iKXrNN<2hcqcHgh~Q#eJZu7V=fBOe19c#hJ=-oJFL*5 zPIRB4PJUd9Ed4LY94X|+bDWq<8z%Np+12upw$t3A+Lr-OkAIoIasl{`&ba3et+1cQ zZx*hfwNk6y_o8ekjnptH%#;#hOTfU5%HqZGR6Y_;)#$KBK8$%SlhG%zdc%f#@is5F z@>VZb1@~`oI@|!Gb17C9Ow3m~n0U$d z>0*@bnTc^btpwJ(G`JM~Cy=d>-16O~IDr8?`e!VS(>kO>?YyU?w55H|O-P)MR4(U{ zxYB&2O84thIN1_P)_D&a&wqe?8u59V<5dnKCHx^^Q7Sj2u8Djjatp=E{du(VQcZ?6 z{mEO=36v})u6?MnbM8plIXw?Iu<3ZefJl7gx{%$l2jL+@EyHGh~x$My_p>2tBZJdiV=@@QQ9 zVg`^|^teC|iQk2?mA^7UYh~GYG^7O|K=y*!<&8~HosgtW9W3+numf3`c0UIr1;d$b zwhZmbSM8_}aY0)lhgqmNmu9Mopwcq0i8o-a>9vnr`_)7RMt!cefM4#DJ9*FO?q{># zvI@KCtf|dAD;2i9)s@dTNwI;U^+tl)S-@=I?SBK}W)xoy$tGgmc?#0 z?=_rcu}cW9<^_YtGq_B?V&DBgO-8tx8UzwrYm$%Ub(S06?ds66Wc)v8L;#kQ1cb;6-dfV4-k*UlI$z9D0aaX43040Vsst>rmJ`#(w#d;B4t(u{uU|HMJj4 z`>7Jo%Z;hpycL(uqdS&9WFRoME#5yasELBg z7k_nJ5RJXY%EezF7t}&QcP`e(1wBSV8H@Lg3;HqzOeG>EPk5J$Gd5$}B7O>SkU`mS2)Ng=K2WZEDGXF`0tD_6ku)Yb?M+oE6 zh`$IMlL~K?EMQ5RLz`A6uiQvQ(t+6)0?@ z!KRG|X{Q0~4Q$j&!z{I^M4kzy&_$ECZbmgKvc(hyy%nE`FZA$KH)s*#{4+Y(62#_ZrJsNGywPb9tSI-W-z0 zBZ+NGYrP>Kxwyr67_?=84{kA`7pHO11D(yiC|R3}U}Fi6^g;7;3(n%{;^Wk<16)JP_3 znx>{Xzj0J4PCI3&XYPTuFnJjf(iOKM-?ZH$U2JoK&Xsaw8aA2{DN8_#co$ju#kl~S zHm-z-BzgKs&f*+Pr=1G5oSpf?=kuZz_G7qFufj)t-WZmJmsIgVn5W13_zK`hccCn50`%B->IK$fZhU!HK=b9d7VZP4G*h4 zS4d<;C>9qjoS}AOEoNbwbcG&6ncZGhFV+i?4eQRZlnfb(#ZX?Q+fbNe4vdUX5W+4p zAJ9OD-7n0{5+GS>rv3zxTbdRY-iP()f<>5uCD}XL3a)ESZu4H>nr~wx-r-v(L3bI1 zeyp`rqY8@r-OT?6*kY#s5*T21yiR^$C*oqHiSi3u@e*4vkm!#A*R__{--BgnKL$U4 zHTO#|5GKl!;le#6t8W2Xj0U-#X1;6nz*-D8k73j-^zFV#MjtGHAKgCQc^lq(1@7!N!re zGOXCQ+aX%A+XGwQZS7ldJu}i4H+qfA)9}4B$&$+>Q@z zo1>cZVmlNa_ca%ozpv(kSWscF=5`)07V_W8T`9{v(+SP)SIzl^;96Yy{l?8i(v2@Z zc@lzoSk1?RjF=oog@RE|>H^QO^q29pLf?jbg+Z*C)+?*|C1?oHAhuu;wH$q!_8l`@ zZ!Q^+xWm+4MJIGx0Yjxri8&00aI}vGK`wt_wAuj#l_o5F92efbh8Q<=5Oo`rGZQP= z=xgFF+Pv+m;};4x>na5fc{eN$(xhq|u&a5$5Ogn6o9lid7@d{-z--p8NW;%=uT+!h zyJ;6s8DVvCjYD1Q$XO#uv5dCPqBYNrU_dq!!Y^1*Q0@_wWxVo`qwM~pJofXKEW0CX z{j#hqlw0n{x<_g8h*}PdxG?Nxg><%%n!)C#v_^ojN?A6dHaOHT2~>g#&9PnHy^rTa zUrDj{kjq@Rk1yW{42kVx_Rd9sDq?#Ru<0AISdjiBwV`7Il3{;V-abLEKu=WpeabQi z(h5j`D0SXGbmA;$>M=GTlwIZl<)ZBExnw#d=cZGpa!UMF| zjv9Ru8s_KZ#kc+zVpf`2Jp$x9t-l}Wh2X`cl5IRSDU>8_nPnd(Q!$ocI0u1 ziI`^OE~ZAc`$7rUV&1WP{)wWTE$IM_WCkM>a3I5^aE8w2-y@*uGUe)QzJRCJvH?U| z(g5w2=@LjVIUGK42%8M`Gthg>%B-MLzxDzp(I0=;G`*NvF4{iFit+1TLJ%#zP`s>r z0(N_-x*r%y^#e@Cy0n%Dz~<_c3~M8>S^=egJvjDJ{R)e%Lx6cG1!b~e{CYV;s$Fhd zIH39|26qS(Gx^x9n+)3Sr?CWB@PV@RK12?-*)0eRS`#4jHd^<={yyqE*{3a5Vx=Ff zTpDJjdbFe0?r9}XN)yx|<&O4k2@RSY#T}seNoN6@TMeI_6-!eRs-iKmB0(n-7L!PF ze&uW6??Fn?C*zIez!XHv?aqvW#X(q|c8CWly-|&JAys3t)H1Zaf;KJc&6xiO8-=*C z`q@pRglxx(61@OOXbO5abY~##jwSg=T^%xp&8V728P*&0uQ&-(OjX#F$pWO-1OZ5c z8}{T@d(lkB=!D@j(yJ$Q#~<{(ZfT5|-M z;M5$g(797cU(fVAnl6*%te+sarx-ez$a=Pm))LukncXJ&3VoHrUT-2w_`PBUg|D|;EhSoF6J zA438_#1TXp4_z7Z1N$c67YXY9yuENxxsS)nGKf;~vQ|(Ke(EFnmxts(gRDVk%Qt{5 z6Km7up^htjV2L6*?%C-1xN$@)m@2;ae-oc&>OC&SrY>{I3r)5+z==R*I-_!#OLfVYu{Jk?ouPa8Q=O^1_vc0Ey;HS< zw&l$#4$YDVY1_P3keB#|Dh*0g)vq=K9y1k~`PK61l06VJ8$H9$X0p_% zD|ydKL8_2VcVnj20bV;}&?I~JLP#8JW}LO5HBW&XbxI3q=Tc$+%tYgM?cRv&3Bzi8 zS@VRDnl|c0GAS_(d=Jlhth!QAzsSqjsG{uRk*oSeLD?lZn@PwJrMoYn|6WkO$SW%a zWeq_nYlJX$m2IoyczG24H?eWfXb0_aYek5Z_#zSq)mP7a5bqg#1wHY*Tl0+1j{{87 zR`)UhKz@nDqV_za7QtaD6n`g-_?QtTDhbM}i6bO4Ls+V_pVC&_DCmw6)Q_6na$MVG zQ|^W-Z#p%0X%cXGSl^Z=gvT3%D1x?>XC1-n0!cl9#az|IiKr|sPw}I_;oJjtzS4-& z{K`!9uWqqIjwN6h8_2?`39kAWjbQ?Mk(EH3*JQFW&(p2syTs20_-f7_R`oFr>|xkw zKX(e2*vB%Vo)1IeRC%>vVj+AFZ^lx;hE5OTFYVQ%A#M%C9BJNo4URMhE?x2nU3XCPRTEPG| zP<4}u=Uzu_2yGZAkN~FS3ffACQXnX~yj=O6JWhH3JJk8w@|U&sjCM4)L-e$+UMAV& zck)ceswd9;b@=p5zYyLW$wqev3XgRLDnGX5{a)KPH4{^TTo z*TK_MCP*9FR!!g`Em{jF(^xuzZd#7MEW$FxUdXHC|+}akQCH zj^N0U=c2>Q=$v_XpbIIhY}5^l9XS1`EFDqu?g;fQ2NSUqYZ*MJb{BE9+%X53(MRtY z(KckGle(Z$k)T5WWF4tg8?j!6svxs3R(``mkVSw)o_hremhdrM>s2UIVqApt$=7tP z)e+8XkUWrbpI|$tdf@yHs2z;+JD`O?U2)l^5p3)HNUqnU-Is{5#Oiy%a3QSvfx}^G z$F!9=#$nP{#)&u~KIa;TUnLF$0DOo@Inq>i@miR}tH*KJ=ThuSUfKv0X-h(p93wTQ zlla3#8PiHEErs>rHQ`Akx%{CXI zZ7}JHj%?{SVR>t&o}9@{SWFzfKtua9)Ay#MB!97_COG$QAzOoV7E(AT&e`%c#M16m zjpYL4hMJGH_yJDaBVcOKg?&oS=3i0!Du>(|@Fa?RFywnWoR8HI+72#=@u0&g-%lC# zY-xI%8<0C3+EXigQv5|y-?G7mP4v@o@% z@RghbDB`gI!7fYnr0V5Cg{RBeLWWD)Kp@@>DNDMilguN*GkU!5T)gjfrhJZtoR9bE zIrV&axeAje-+%|QgxY`3RAK>-4Y@+qt&_V3CcvqsD^3h;c{YvN1OhGCmi$WZV?EV%!)QHf{*~&A2WwXiN!Q zG$sXxjO4%tBO&mi5f>ORVgetmH;x=&^M4rAFo=)M>fBlY8&M&hMu`tMX6taCR14jc&Z7{qL7`Djf=rRMKQ z`uq&xhY7c5K)OL@whT^+JxC$);-~P$-4O@LH&T_j1N4Gjead`#L0eO@w696@DU}E^tX+jauTZ$OIf2G ztHgy;d5;VHC3TujDUP_@IM&Y%Ea94#5am*i+Q|gFJ>SJRA2!{>$TCBAnr6~@81Ham z4&S_|d%IoPPV6`37Ma^}&E5O-RhAfUyvO`1FzGBXQY z9hV$hUQZgn9L_@%ZLZ)ZVjJ zp;?`^!B5>IXpg6XziM}8m#n9CgzO!?4*OBhC5XO;yHqEpKAsc1uglrQZ%-}4MEW-< zfwhJqk*Q!4FL#GAFqM|2tM9SqNjQYM+NJGD!?f3fjcg+g+3EyO=k95QETstB7Dx2J z7`mH)tI0RQ>Ze=qG=}O=TUZw0v?$0HQ~Q>I*Eoufk2y22|F!QHBxXGg+bJH!cK$f| zQ3p2EsY^WAc}TWZLsvIBs14zuQ)lL|{C--;sJ-JIhkb`j_TbPRT7avOOpa(DsCMxK z6bXuduch_-vBfGBo`68wk|ag%mvExqI|&Rc#!{@K<+OTYPnL#$TRakM9R!G}`FX`Z z@+?&h`sT#$Tvj=ZJ93AB;}Fst%3>;n_7!5hr>DUo=a@L{+aVYqdU~#JpVgr(Cu4gn zcKvP==Gf=t^U%};Yln@JY|PW=VShbZ_Z+pr)mkQK>!t~;*C`WOu9;^r>vSGEGsmB% zHBpPR*3c|t22F|7V$2F)-zrsev~QAN@O+3NUF{~z!%U5z+B((K*)YL2an2eX?2s#X zPRkV(8-z#Ss{pnS(_IlUYL_<8<+<3ftSt@a8?w-M*4s7)J)FcZ%QuESA2zJ^_(r5y z=#T~!TSrc@!}-`Zk(?CvP9qj4ChQD@B-Fp4JtBC98}?}Y6uSFods|#{yW|DNjkfiK zarQE=F|4J#Jg|ktXMU(mBcv8#j|j@`tvFdK7z;c{8z#@ev4vts{XF%e@l#xCVjnR6 zRZE{@r8|mrxsh~Kpw=l`zVOg-XGbqK&3}|fU=Z~266c`=Or8YRf;uyoyE;NR`jDdS z?oQi22`jmoJ*_b|C*&#hKI4IgDuikCVlul}^adMRoH^`}f(3YY*_G?(EftZ`hjF0g- zOR>w1`itos?E4PYQMR^^+OOw=Qzk_)m;)`X9WU9(XBLKL77onB)MlR3lP$$TXTaV# zvk2v?TiHolvTk@eVSi*e`E}vOozu1QnN*fZO_xaygB#+_eFm+5U=z#d0;B7V*@3IZCFmD_gHCY)I>vj@FZ!To`~^yl zbx1j0ZXagcg|>}j@!7E4{f6zXvZ24-sqLrkgoc)mlQML(0NULJ*c&o!kel`{?7_TZ zO6y?lS}u3Fn=Y~4S1%dMj!>!+{XQ(z(UL)Sc-NZdunt)>q>2q_Q^s#z!#x^;{S8C! zcsEx4lXWbg#+VWh+w)f1uvYC+VRfXlo8u2|%8PC{r3K+7CU#*7v=E&WT?L|0AWbfU z3MCXlm$DZHhRoF0F$}8{l=Q6Z_WM8UKnq)fD6!5Ql{OTQJ8raS?DB;P?C_9HypzNz z&X`#%YBRFiGkZkW3Q<@gP4-jHe#+T@Eoa%01>Ntnb4G!!@;0R7L`Lrnlvj1IQ>sIG z9lTBBJ4Cz6b$;XkEu9HMmDBX8=#IDO0BMPc^OWu(A8t~x2TueM6r>kyvBsg=ZD0Y6 zI+G#?XrFr?Lnbwu^|VM78$98~wkRw&A%URNQ8Db*=`o?)eaf-j*}zz$7t^4tc9jKB zpk2g5#o!sAaA82}h8|w+qO)LBmEn>tMn#^aiu{imV`V#q<~7@|j}RuPH)kyxL2Uuv zNLHaaPGSe2uAPITG85V&3vWqjL&K*xks+MxwTU<&PM2BG7CPF9Mpu6j=Zt%?y(0|+ z9c?5vQ_oQYVeR^(naBI}uRRCi47WOguE)5lv9r0KRg?GQ!l7Rx2d1y-esupbTG(o7 zhpkIYl2+7?dS zVhyjCKtquC!UW;j~QsjrC-4jqk= zzA$vOK%Cy@ja`%=PB9BztrJwccCRgbw5TgDD>lJ8+J+--bcTqIwe?z6c9&IUf!H!w zOv6XwiOtppEq!-WhM|X<<$XTh{raM3!PUN-h+deC25rT#pJnmvG+)r!Od|{SF2x6z zBuKo2H)1lbwAye~4HG~d8L; zfN293M_u0F!UUXS^|@kqwNA_x zV5^GH1b?OijheU|XUAiWIi5y`lo)I@6QtO#2?<6Tj!T=gd7>EI2-*|HU<(%V1^pn& z`Pgy@aKi=eiYRm3(_R!ZrZq0J5jF~pGojCHUdKDJoe^3uTCJedGA!MegOgCbJ8nb} zucspjvR9fyds##}`pN6MV1@k=P03m^hAPgwda8#l>h4%lqK{ygAPMbxn5;k?+=eDd z=YR!m8*Q64>;c!t@Lt#%;k~f?aC(fgy21G97Ta-G+t3OxoAa=9Zu*)e%pRd=mt+rl zrdzk%q*DEV{GO4aydEBn^b*PvuwmPTbA)jbJs3wGoy~N9ClG`1VW@}TF2bG7Zy=Bi z!0a-ZI@bNP77q3obpKsg_GUA=BE54W+TpPjTynxl@`M_3CkwV15hRZC?|CVLQ4|=a zG~@R&I|>;~TS_DM2w~|9bEhI*0yZ2$_BP@g0~SyPii-5PxZ6TLMq9wolT;ZP{^RvS z!+*p=jv470U<9^3kc?xpjZ$N;$jw%HVAVI0t_doLJ6fQNTqA=1jzjHp^xYU&X@}&dY(kl989NUC0FO*RRV+fiJ*!48MspByVz*IWS?a-^6k0Xp$g|-vOLJ4FFN=AfL?UBrOTBIO;<<(X}l$J^c&}Xi*(Y(#vK!1FZafvPvd$8 z;~_Pbj*hFH9U;MasAni|r49E51*;Np_C{zej}PFI&0tkL*IG_n<+MT=V6ijGz6SeS z1#Faq$TsH_Y5IB0bLC@hbeA8}riwV{A(-=$@Vx3gg!O}7A+aMeDZy@$0vjxUpmT>K zeC+<$e69f{2UYTaG(#3T0YWD@rr~6?`)zMf{I%i7;AOl_)Mqg~_5Y(vK6o&BPkAI|0 zKW4+-RbT!9JP$U$&pDfE?L#a4plxC^&cKm?b{@(#v6Iwu)cF-!SqiqY-Lzig{c9*M z{#cv07K<_+@9;m;zQchCOpeqO;;n6KY}QU*=+c)x-8)jCfVX{32g$;ILgR%MN2#`s{Xw?Z-dW-y%BG8;Yz*v3tqk;V_a71z*a3iB@;7nP#?J0}};*GM- zi&JGiNpuv5q&OVrF=6ODJc&Jd3E7GS^c5b!bCH^9Hde(PM{2%EX#Zf z^m&{rDuF$oSU0XIOrb{8&eZvpik(gKfSKyISbWja!QD#IfJvi)B$><<2*40)#g>dkmspAPdmLdH3?Lte33p&ZuFnFTd~8E@yQWc=ThxirlEf)i z)w|lh5lfl0?r%rwjdUnVqRWbMQxtF;e-1uLk(@U-7YumOSP|xm9LlYqCWr3ZkrKhx z6YOxewlYjOVNy{)8G>v_as*vZu+MGuMvwv35$qg0Ky^aXwpp>ne^__vPytr516TEQ z&rWFv!+~yqY@aQ=F{CFkT$qk*kA2t(vMoAnffGJ zCS+e6+e026xIPDB(A05NEgKj}1wJh<&u+&}tU{@JNxsb2-!}XQ)H%l4Q&8AeNSD{uoK)0J9P>NWO`+cs5x(Fn~UzB+;{zy<1NZ<0Q?;JV_c2 zt}A9n@$djj{9${+umFrL^Bw9bdzWW)y8v6-V>`ja;cil^q!i>03UKhHe$K`3n;HKj z?I8>m-Oo~_+{f2D>?gYXC8hv0|cV-u@f7wB_4pooZcfUk$|f66X$$ zLrZjpHZzERq7b%3$~#tQpLy+xEy__+1u{?732by{TxG;YGUH4&84!`vlt6CHaC$m)yOU z-6bF8v7BhLHA(5S$rI0zXOo1ccYru39ox9+ewq|79a(r*T!0bggN5hBn{kiGySVEV zL8%BjhoCqFy>9%|#!VK*OGlBeQ(Jn~@`3p}nl!2DkF-vkOMU_dgoJ!V@)3^Kc=Ee<_)VXt(oE!Per(%QD* zzE=c@e=`0JYaI7)YCGC@2IH5u92z~uST{YHJSxJ5k3Zj}{(&UYaCZBLKgDG~C)82w zoxJ#iwtO@D_+87*9lXe|STTG`?YN&hTBJ(WEG8SFhEmk0H1*N@ZS-idvG9ie%pUbv zi%oqS=U=_N-#U~Qg22Sm;L_@aza{}5f&f=To-4R0asD9Qt8Ybcsrd#r=MtpouTHlD zss-{7jv&x{;~)p=e}LX0Z>N|iX~UhEe1Jj`5L-kckiuyZhhrav4cZSDe2h?pesI}Q zifvq9EGa_yaTa*Eiy9EshBN_vOR6(wg3~lch_k`fIaa)6FwFtB(m&h9BntqspT`L& z3=%G|sMC@p;v`DyY;FV6uxxqXO1c#h_ehuT-)N00>>k7w;?JzB5aS|OAx^ zAJIB)Mbo$;d=;X@x(ZS1Ql=VdP5(iE91w5Gctcirqw8tuZpG~O6=DL+-V^Y?0@q9Z z*)Fw2Xtc)b|DEyZ=||AFKV>{>-^S$MVMNn-w21tZ2pfTOM4=uCc>j95?}U32E;5dMVmu)_i~b?|h` z{qDAoBV3TONP4Xrj%|< zSk=FFNuY(O?~g<_P1w&cBv>auK>E7kbC<#zK;Wt`!&(gzyjY}mo2er-5MV3zdC#Am z&EG;Y+W5_1j}vkkBl_2IJOss4k14)$xLU+CaQo$Yy4pJ%SE{fOwfuZe<2i8)PM)8$ za=-<25xf`^3Q<@VMHfg~tWXCO=`1e#yaS6Cyy(qoOm{ZZRM{h?KYD{zw2vpj-jkMn z0Ksgnss{^Zl?qwYtX=Hkr9+KhVA1@ikVW%3rM#EXJZX&P?6)WY8=^da5`T#U&C>ag zkp_al1$s(LCBC%Oh_i?(DYB+MR4SVH&@H9T=0~9Msa<_^u98$BYMm{oOSF|H&gkL- z7+e;2VFj)sxQLI9QfwxoJJqA%=2ZPz&55iw;P-)BP-(EybV_&AEvdN4poFz3m}DGQ zTf$0PrWv*aI}-8{cMNtE4o2-$eq}XlPeT zPI=l`qe;V|Sa$2C>T{24G-+0&!JSe#n7J878*LFrC5!oAzzwa`U~s9{IcQk=hZmS} z)kuug0S*FF9pDJ?99$2NdtlMbF}tMZ%$g!lQp1P!iJA+QmR5wcs#iW%>$vm$`v))& zW;&5Mo6M@_>{aaPXU}!)xt={Yu;&BpNt<)b+12d1l|5;Z%$zN<=T7#d<6GwJAbU2m zXDfS>ZQGo^pFO|9o=>pnx7d@~hB^Bw_I#Q>f5M*6u;(w?^Duip&z|kWI{E3!-c@jK@;DfqG*DCY+Z_&QNWOFv9i0E%oKgxk92cjH^av;iqCN_YH6faCf=!zz=8S%&ci%E)Qw1(>{=`l`)hUHvY1ZJp?@dU%_-i_4d4H;XlOwJfOS;cZ*19N@wdt1%6DsCOnK3q||%e}Rx z_MryCT~T>kUG3Ig?k&jK-LR`cta=z}R@82<*jiJG;#ECFI6!N|whGX&wQ7s#MtLf$ zw%4H4MDO_ASJYN)+g4w*c~{leNe@J2R2 zR##t9UjsHvwc~1=@pW@`&DKgcNZSnLRj3oni`7PDRm0}`nr&!OoNs5mNi>8p5@2wUv*S*M92?BR#R#vGWw>!Gs0tE{XR6l?p$8FoT6F&hE+yqV#;0gFgpWH26EhlkX z@ox?#;clswwr<7ircKLN-Mch*)usYpu76XJZgD4;xx9M|b62ds7P59h)*TCz5^kfqMyE#iKvS*} zYtW&-Smmy+s@TTRa0GWJ!7*_$uJKSsqx0{m8JCcCoone9d}g`^vGVVvn@{PsN%d9k z?KSnH1S$5BT4xy$UGqK@|E9WH^cnH<=-=?%A{B9ruG@1c-L-PF9u5i6PzOF(BI6ot zm`7DRw?S;8{SjxbaS{DzLDubzKN4~b!#oUWS0h%}Lu@hO`EmHq=1VwHWrbJ)5|R=s zzEDfuX)E=-2kR>ycB3OaTvPi|K4-D=d}{qv)q;a{wIqyy542{n@_Z_6L~1p#!V~Nr z#HTG=>yTaTgYIp0HMJsZ1_*&*w|G=ov$?*mp$_u4q^5zYYFTEcdu_OZuB!P0B+4#o zvk7RFkzgOmhM5ToeydPy_?kO+F1ILBN;bGimUO$DQR_8oI8nSh|o!#^4yua~^s3^;m!4gQ(%d(jSD zF9a9;ML7`VK$HVf4n#Q+DjfedmKCIqw`131Rp0Rwo zZJEBQgHT)|TqKV0Qd;uyH8H!3W`p=BBX!7<`JC;V8Ztj_`aH4$Dm( z{ryq;J^)AbJq1Vk{VN=W{~C_yqbqzV{`YVcp9ZE7ed0Ae88M?001e$(+z z?S_8;H11u)JGBY=JwEOo*Fukl?;rR6)p74%8~6V8aqrYlsl8Dh?uB!~xnsXR4ca1Gz{`=t?uJkNy9KACt$&}4`(#J~_B#B%f6dtQ z^6`Hkg>S-cnaDpI_mBM>kKr-y+P@g=lKDseMbf*&{P_Q~N6munupr+S!?P_lPhlg> z1CQ-`Y-X4-KlqdNa^U-x-}K#H+JeG)_XL^$G~hc9zIo7XMStSiG-?HT!~U=SLHOJ- z{2{=<_Pz7pyN>(I_w?`G|JnHW9AGKdU<1*bH#ffN<~F?w!B9r^AiFC4=Vc;64Yp0L}}y3T`7@ zEnG9)H{hOvI|TOz+<(O{%Adc_)$45G8@AZRTpaiBw!*sYRdn-UF4u@#{c1$q)I}Hn zao>qq7rub3DiXvE)BRk_r22YXG8PGZnT6Foj9VNlSJl)4k4SlxRMpdsgdF!>TLJD- z%dfAh;&A$8+19#-sse!Ga>*ouV_A!0ea#mnv8o}L<5DA`>vrLO$a&l{b~e$XF!ag% zS5$I;iYcwH5m_O)hhvJWL<|42I$TYLlUIbVNURKJ%K5GD3fwlgZAI;tx?Jv?jKbWl zxXP0IUopkC)r`DK-_Ffd+vtKwftTUlPKaV;k3{W(Wv^If}rtq6sw zeGoWcbxb%k_;+)`ZK$;A==Pa@)kPY*BUxSOs~WEBte#D5IB z1ou4Bop`t_jbg&};=|o(-)7~`t7^b~n7g?D$-XRZbKHwDCDwg>tl~Z&vsT<%T)PAJ zuW`>sVl0Mn-(%_4R#~5iZ7UjZUnHv#zgW-hrurDi{U34pTcw6-s?Md-mMv%`92X!M z3h~pmbHwSi7`g|Pf;g^%VtxNld*}XC<#ERG7vo(tikey^f)P`r8M5!*ci(+?Q6cDr z0Ja#d!6_8bQo;Krn1pCF(|C)Hx7ZP<#z;dOZ5apZr8LrrsWzHWwbZm;sKrYR^%h92 zHcp>YW2gBSI_Ldm_kGWvGy8m=?|#oYd*(dv%%bdR_sBk;*1_(w zSpFEF#^>;bdxpp>m`Q zWUeff3+0P)i`*e=lM-5bi)dW?h7OD+uyQ)%qRHJHAe^gi17b;di zuM6~Cy+VJiKhd3oUct@ac3@4F*=@Ro{lb>;YWTF9;L6-0=OsZM1Bj~|N=7NDlb_{J z^ym9a{nh?@zuE7Jm*P$MFg}idOh2NR=qk2@9bm`VEdFPHj|XCmC=wOoO)*}+Dp$$P z@)t12Yx1`2qGHufbyFt>qXHhJ2id_;gUr)rVTi1DOWh8)KXNAp% zM7olmqz{QBF|->UPBooD=h7e1I(m?{&<+~M6w6>QunM-CRk3E)$~^ukAI6{J)A>xk zp8tfu%WuKF`ie)y6GDp&F-4S#C1Qj4sn{~X=8VQMm$gCDV*{&p3MvReEtfkZY5vGxA6nKfq%%G_$T}vzsB3S6z9Z; zs#%>=H`PB>Z#_WA>tsDrKc$&Y*ID`px?I1a*Xwq@!Mv~v%nb9AS!*_%qvoXP62^upVR|?@EDINf%fpr7 zws23_6kZP7!+1N?V!PPBVXJL}{hdvMh=d#MZo0e9%LjSJcwRYLg4Uyt(Rmc>bKm%r z{aOA)I2MO^0)8In<8r)=)RCj)EEz(l(o%YgUW2)JXM@>rmcsJcOtyr*#ol2@*a>!) zU0_#PC;kmk?GqgFfKTNmd>*fW_}23+{4e|>zsj#ec6y8c;#KiF=ytF8y*Lk=?Ij1v z5pukoD5uK>a+zEsH_9q`QT9{`>M@1YHubjpnfj&bu9Nh)Ad6H>ZFI3-rK|KVU88ID zK3%UHbfZ3^;>=1=XOv=pbrDM?mErXt2+KTB@Js zkMlGA96uKb?(nPqU4D&U>&N5aI2C8$Oq_#rLG4??X-?tO_zZ5rt@sLV!#A)dsU(ez zBblJ`-Q*UzNBYr6D5GO&HvKL*?+jW_-=wwl7;U3zYzkWg&KuA3c`;wgH}b7~H?QM| zc{3;|Mhq2;#0s$o-1a@u2xOZ?vp55;a0Q&VUEC3#>?&hr9IzfDlfi?L+1%%K`y~1xnwuOJqh`sPCDaKU78yQxyf<4F5eYJa?}L# zfMx(n0Jnbe@q~2jE^GWMeYFzA9KA7omW^s9e!}jTd=q! YZ{FO(ys{Y!=9iS_70ykWUG#nL-+Uy;@c;k- literal 0 HcmV?d00001 diff --git a/src/mkutil/cr.obj b/src/mkutil/cr.obj new file mode 100644 index 0000000000000000000000000000000000000000..9a3f8405a150cba1e5f282ca540596dee0a4dcd1 GIT binary patch literal 2806 zcmaJ@TWr%-82;0QkfxWk(3Jt*Fi>Dn)pP|)TiEE$T-)_V*ffelk~*o=+;Hp`m?|*^ zq!zy*_AoSUlP2w9Vv{Bzgr-S!XhY&^rvO1R-`JfBw$* zU(SDy9iP*0TR|gI-+_pWsF94ukIQ0EnG($|Z3THy=oIem8sf*rfEsQbEl4+PL}j>c zmKllzx5HG^!zsay}RTbMT(9EWj+yz93>l}XzCr1f^s622r1lKBip%Mt<3>R;d*!WHZ^gB zNkxiD=cRa<>rKRxQdE?=6QZ1w5^?VBR=%Z$Z|`Vp<6Cx6MNMhNY*nxrbOHCG#pa0l zrMQQjHEe=x6&-##9ArWzI%P<~gsEBxkMj9E^Ki;yEHNckLdrl=A=x5T=q;dkw-!-S zoEaCrJ9LyBgGU;>6s-`*XR~gEs0Lg zJR&8o2@697+pMtcnIBkAKg}!0HSa0DlEG90SZa?iYXG5yS~)M~=g z5L2z%FMAhfz029#FB!5uugJOs@r&uFZnawTE{#O03R5sMELy3v^Q9S>xlp_HBrWCA zotcK0)#BPZr=lQ($*QsCFE8l?2Nv{Lh8|tJtfa`G8(Kg^( zoqY;q9!~w8HvGOq-|+hu%<#Jpwnq2+16Yr%j+TM1>CB0j#PF*DtJAghVEP}A8o`W+ zJz%R~by6po5!(l5#GU~2=&^B&eF0XjYquNWS5vwfL2*y5Jb<_!F zjtgdt`yp6`ZjD%0#j+Y-X!eDy)N@qp`;~`yD646Y9ybWAr<1@n6aucLbHE0g1HMUD zfE(y4a1(t4+)OusTj(Zm8{GnKryqb#^dqpDegn2r7PyO^0QZm`vumR&U^}e?b`THj zq}{;%)D3)xjsd%97}!G+u#Y|l9;8ozhv{qJQMwL1M&AMZ={9hXegY2D@4!)d2=vlF z!1pN+{D5p&g>k9^inJCOrky~Ex`7co28@yjjMEulf<6MC(RUJ=)RaFgc5+)%+{tG7 z6c@sV#PK}u#)L?XPsS6|aV|A2DZvTmlG>xm*AK#{ML0R-GBBzM4WJ31K=k$0& zdaQdr{W{Tizy-cB{HlF(D%jS-C&vT-KH=HOY*4i4dCb9vJvC_b3)mIJj>${o&dqMh z!^e&@M)53yrN9%|T5z`RrRNY)?5vru=t`HvtAU51AxIjFB$w6qc)`vJIHj&9)A6B9AHamPeA*%_}!w6LGZWWVUnO>fm d7gJi58B<)89Fv<}T9TO)lU$UnSCEp#003;bGJF64 delta 137 zcmdnEfMwMJmI*Idcsq96ZG4j>#yDkjqADl?|I WC^;rKyR;-TCnmWlS+5`^i2(pG1~3f( diff --git a/src/mkutil/crc.obj b/src/mkutil/crc.obj new file mode 100644 index 0000000000000000000000000000000000000000..55b3f6fb0e74b379fbc93fc1a50c63426ac1b734 GIT binary patch literal 3528 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/false.obj b/src/mkutil/false.obj new file mode 100644 index 0000000000000000000000000000000000000000..99145471777255bc98d036c4bc69ff11374c1941 GIT binary patch literal 817 zcmZ`%K~EDw6n@jK1lmjEf%7QF2!yd9X^;!Z)~KY25#h8%ySuaNz_#0Lw;TOXoB0~72n|(VxMBcz!9e(l^wJ%f zE#V8iNRr)Na9D(0TnYN9#;iQzT|WkA(fjD$d5AA=I0PAo=mLN|On z_;aCMcu&t^T;w?vSQ%FoXGB6 +#ifdef _MSC_VER +#include +#else +#include +#endif +#include + +#define COMMAND_MAX 0x800 /* cope with very long command lines */ + +int main(int argc, char **argv) + { + int i, j, k, quote_flag; + int command_length, exitcode; + char command[COMMAND_MAX]; +#ifdef _MSC_VER + STARTUPINFO si; + PROCESS_INFORMATION pi; + DWORD dwExitCode; +#endif + + command_length = 0; + for (i = 1; i < argc; i++) + { + j = strlen(argv[i]); + + quote_flag = 0; + for (k = 0; k < j; k++) + { + if (argv[i][k] == ' ') + { + quote_flag = 1; + break; + } + } + + if (command_length + quote_flag + j + quote_flag + 1 > + sizeof(command)) + { + fprintf(stderr, "%s: command line too long\n", + argv[0]); + exit(1); + } + + if (quote_flag) + { + command[command_length++] = '"'; + } +#ifdef _MSC_VER /* temporary escaping of quotes, but no length check!! fix!! */ + k = 0; + for (j = 0; argv[i][j]; j++) + { + if (argv[i][j] == '"') + { + command[command_length + k++] = '\\'; + } + command[command_length + k++] = argv[i][j]; + } + j = k; +#else + memcpy(&command[command_length], argv[i], j); +#endif + command_length += j; + if (quote_flag) + { + command[command_length++] = '"'; + } + command[command_length++] = ' '; + } + + if (command_length < 1) + { + fprintf(stderr, "usage: %s program [arguments]\n", argv[0]); + exit(1); + } + command[command_length - 1] = 0; + + fprintf(stderr, "%s: executing: %s\n", argv[0], command); + fflush(stderr); + +#ifdef _MSC_VER + memset(&si, 0, sizeof(STARTUPINFO)); + si.cb = sizeof(STARTUPINFO); + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_SHOWMINNOACTIVE; + + memset(&pi, 0, sizeof(PROCESS_INFORMATION)); + + if (CreateProcess( + NULL, //argv[1], // name of executable module + command, // command line string + NULL, //LPSECURITY_ATTRIBUTES lpProcessAttributes, + NULL, //LPSECURITY_ATTRIBUTES lpThreadAttributes, + FALSE, // handle inheritance option + HIGH_PRIORITY_CLASS, // creation flags + NULL, //LPVOID lpEnvironment, // new environment block + NULL, // current directory name + &si, // startup information + &pi // process information + ) == 0) + { + fprintf(stderr, "CreateProcess() failed\n"); + exit(1); + } + + if (WaitForSingleObject(pi.hProcess, INFINITE) != WAIT_OBJECT_0) + { + fprintf(stderr, "WaitForSingleObject() failed\n"); + exit(1); + } + + if (GetExitCodeProcess(pi.hProcess, &dwExitCode) == 0) + { + fprintf(stderr, "GetExitCodeProcess() failed\n"); + exit(1); + } + + exitcode = dwExitCode; +#else + exitcode = system(command); +#endif + + fprintf(stderr, "%s: exitcode: %d\n", argv[0], exitcode); + exit(exitcode); + + return 0; /* can't happen, but keep the compiler happy */ + } + diff --git a/src/mkutil/foster.exe b/src/mkutil/foster.exe new file mode 100644 index 0000000000000000000000000000000000000000..8edc065716e595da50a074d9b6cf683626de7d87 GIT binary patch literal 69684 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/foster.obj b/src/mkutil/foster.obj new file mode 100644 index 0000000000000000000000000000000000000000..80ec401b3d90415563af4abf75eac32184b196c5 GIT binary patch literal 11101 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 NxXIF#;i04A{{UEkv2FkW literal 0 HcmV?d00001 diff --git a/src/mkutil/ihex2bin.exe b/src/mkutil/ihex2bin.exe index c29e1e586af61651bfaad495cf226eb8f29ed495..58ccace3f451d0c3a101d512b6f7e2ab7727ce12 100644 GIT binary patch delta 163 zcmZ2~fMweOmI)tNf-_z0H-4Eb$!M~9lGIW*AZ4M*t-v^CvWueykgRo#XPmP6u4AeN zqse6Fs(v8na+RSeFGw2$5HJC;*=E5F;sHz!N>jBMXaC{NX5jAL?8n%c#<3YE9rfr;^iEEh-< OBT$30)pSV(Mp*#oeklO} diff --git a/src/mkutil/ihex2bin.obj b/src/mkutil/ihex2bin.obj new file mode 100644 index 0000000000000000000000000000000000000000..525393977908b2662a65c2b597892577c65dff1d GIT binary patch literal 7464 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 +#include + +#ifdef WIN32 +#include +#else +#include +#endif + +#include "aslib.h" + +/*)Module lbdata.c + * + * The module lbdata contains the global variables + * and structures used in the linker aslink. + */ + +/* + * Definitions for all Global Variables + */ + +char *_abs_ = { ". .ABS." }; + +int lberr; /* Linker error flag + */ +char *ip; /* Pointer into the REL file text line in ib[] + */ +char ib[NINPUT]; /* REL file text line + */ +char *rp; /* pointer into the LST file + * text line in rb[] + */ +char rb[NINPUT]; /* LST file text line being + * address relocated + */ +int oflag; /* Output file type flag + */ +int objflg; /* Linked file/library object output flag + */ +int mflag; /* Map output flag + */ +int xflag; /* Map file radix type flag + */ +int pflag; /* print linker command file flag + */ +int uflag; /* Listing relocation flag + */ +int wflag; /* Enable wide format listing + */ +int zflag; /* Enable symbol case sensitivity + */ +int radix; /* current number conversion radix: + * 2 (binary), 8 (octal), 10 (decimal), + * 16 (hexadecimal) + */ +int line; /* current line number + */ +int page; /* current page number + */ +int lop; /* current line number on page + */ +int pass; /* linker pass number + */ +int rtcnt; /* count of elements in the + * rtval[] and rtflg[] arrays + */ +a_uint rtval[NTXT]; /* data associated with relocation + */ +int rtflg[NTXT]; /* indicates if rtval[] value is + * to be sent to the output file. + */ +char rtbuf[NMAX]; /* S19/IHX output buffer + */ +int rtaflg = 1; /* rtbuf[] processing + */ +a_uint rtadr0 = 0; /* + */ +a_uint rtadr1 = 0; /* + */ +a_uint rtadr2 = 0; /* + */ +int obj_flag = 0; /* Linked file/library object output flag + */ +int a_bytes; /* REL file T Line address length + */ +int hilo; /* REL file byte ordering + */ +a_uint a_mask; /* Address Mask + */ +a_uint s_mask; /* Sign Mask + */ +a_uint v_mask; /* Value Mask + */ +int gline; /* LST file relocation active + * for current line + */ +int gcntr; /* LST file relocation active + * counter + */ + +/* + * The structure lfile contains a pointer to a + * file specification string, an index which points + * to the file name (past the 'path'), the file type, + * an object output flag, and a link to the next + * lfile structure. + * + * struct lfile + * { + * struct lfile *f_flp; lfile link + * int f_type; File type + * char *f_idp; Pointer to file spec + * int f_idx; Index to file name + * int f_obj; Object output flag + * }; + */ +struct lfile *filep; /* The pointers (lfile *) filep, + * (lfile *) cfp, and (FILE *) sfp + * are used in conjunction with + * the routine getline() to read + * asmlnk commands from + * (1) the standard input or + * (2) or a command file + * and to read the REL files + * sequentially as defined by the + * asmlnk input commands. + * + * The pointer *filep points to the + * beginning of a linked list of + * lfile structures. + */ +struct lfile *cfp; /* The pointer *cfp points to the + * current lfile structure + */ +struct lfile *startp;/* asmlnk startup file structure + */ +#if 1 /* Nick */ +struct lfile *outfp; /* pointer to an lfile structure + * containing an input REL file + * specification, or -o specification + */ +#endif +struct lfile *linkp; /* pointer to first lfile structure + * containing an input REL file + * specification + */ +struct lfile *lfp; /* pointer to current lfile structure + * being processed by parse() + */ +FILE *ofp; /* Output file handle + * for word formats + */ +FILE *mfp; /* Map output file handle + */ +FILE *rfp; /* File handle for output + * address relocated ASxxxx + * listing file + */ +FILE *sfp; /* The file handle sfp points to the + * currently open file + */ +FILE *tfp; /* File handle for input + * ASxxxx listing file + */ + +char afn[FILSPC]; /* current input file specification + */ +int afp; /* current input file path length + */ +char afntmp[FILSPC]; /* temporaryr input file specification + */ +int afptmp; /* temporary input file path length + */ + +/* + * The structures of head, area, areax, and sym are created + * as the REL files are read during the first pass of the + * linker. The struct head is created upon encountering a + * H directive in the REL file. The structure contains a + * link to a link file structure (struct lfile) which describes + * the file containing the H directive, the number of data/code + * areas contained in this header segment, the number of + * symbols referenced/defined in this header segment, a pointer + * to an array of pointers to areax structures (struct areax) + * created as each A directive is read, and a pointer to an + * array of pointers to symbol structures (struct sym) for + * all referenced/defined symbols. As H directives are read + * from the REL files a linked list of head structures is + * created by placing a link to the new head structure + * in the previous head structure. + * + * struct head + * { + * struct head *h_hp; Header link + * struct lfile *h_lfile; Associated file + * int h_narea; # of areas + * struct areax **a_list; Area list + * int h_nglob; # of global symbols + * struct sym **s_list; Global symbol list + * char * m_id; Module name + * }; + */ +struct head *headp; /* The pointer to the first + * head structure of a linked list + */ +struct head *hp; /* Pointer to the current + * head structure + */ + +/* + * A structure area is created for each 'unique' data/code + * area definition found as the REL files are read. The + * struct area contains the name of the area, a flag byte + * which contains the area attributes (REL/CON/OVR/ABS), + * the area base address set flag byte (-b option), and the + * area base address and total size which will be filled + * in at the end of the first pass through the REL files. + * As A directives are read from the REL files a linked + * list of unique area structures is created by placing a + * link to the new area structure in the previous area structure. + * + * struct area + * { + * struct area *a_ap; Area link + * struct areax *a_axp; Area extension link + * a_uint a_addr; Beginning address of area + * a_uint a_size; Total size of the area + * char a_bset; Area base address set + * char a_flag; Flag byte + * char * a_id; Name + * }; + */ +struct area *areap; /* The pointer to the first + * area structure of a linked list + */ +struct area *ap; /* Pointer to the current + * area structure + */ + +/* + * An areax structure is created for every A directive found + * while reading the REL files. The struct areax contains a + * link to the 'unique' area structure referenced by the A + * directive and to the head structure this area segment is + * a part of. The size of this area segment as read from the + * A directive is placed in the areax structure. The beginning + * address of this segment will be filled in at the end of the + * first pass through the REL files. As A directives are read + * from the REL files a linked list of areax structures is + * created for each unique area. The final areax linked + * list has at its head the 'unique' area structure linked + * to the linked areax structures (one areax structure for + * each A directive for this area). + * + * struct areax + * { + * struct areax *a_axp; Area extension link + * struct area *a_bap; Base area link + * struct head *a_bhp; Base header link + * a_uint a_addr; Beginning address of section + * a_uint a_size; Size of the area in section + * }; + */ +struct areax *axp; /* Pointer to the current + * areax structure + */ + +/* + * A sym structure is created for every unique symbol + * referenced/defined while reading the REL files. The + * struct sym contains the symbol's name, a flag value + * (not used in this linker), a symbol type denoting + * referenced/defined, and an address which is loaded + * with the relative address within the area in which + * the symbol was defined. The sym structure also + * contains a link to the area where the symbol was defined. + * The sym structures are linked into linked lists using + * the symbol link element. + * + * struct sym + * { + * struct sym *s_sp; Symbol link + * struct areax *s_axp; Symbol area link + * char s_type; Symbol subtype + * char s_flag; Flag byte + * a_uint s_addr; Address + * char *s_id; Name (JLH) + * char *m_id; Module + * }; + */ +struct sym *symhash[NHASH]; /* array of pointers to NHASH + * linked symbol lists + */ +/* + * The struct base contains a pointer to a + * base definition string and a link to the next + * base structure. + * + * struct base + * { + * struct base *b_base; Base link + * char *b_strp; String pointer + * }; + */ +struct base *basep; /* The pointer to the first + * base structure + */ +struct base *bsp; /* Pointer to the current + * base structure + */ + +/* + * The struct globl contains a pointer to a + * global definition string and a link to the next + * global structure. + * + * struct globl + * { + * struct globl *g_globl; Global link + * char *g_strp; String pointer + * }; + */ +struct globl *globlp;/* The pointer to the first + * globl structure + */ +struct globl *gsp; /* Pointer to the current + * globl structure + */ + +/* + * A structure sdp is created for each 'unique' paged + * area definition found as the REL files are read. + * As P directives are read from the REL files a linked + * list of unique sdp structures is created by placing a + * link to the new sdp structure in the previous area structure. + * + * struct sdp + * { + * struct area *s_area; Paged Area link + * struct areax *s_areax; Paged Area Extension Link + * a_uint s_addr; Page address offset + * }; + */ +struct sdp sdp; /* Base Page Structure */ + +/* + * The structure rerr is loaded with the information + * required to report an error during the linking + * process. The structure contains an index value + * which selects the areax structure from the header + * areax structure list, a mode value which selects + * symbol or area relocation, the base address in the + * area section, an area/symbol list index value, and + * an area/symbol offset value. + * + * struct rerr + * { + * int aindex; Linking area + * int mode; Relocation mode + * a_uint rtbase; Base address in section + * int rindex; Area/Symbol reloaction index + * a_uint rval; Area/Symbol offset value + * }; + */ +struct rerr rerr; /* Structure containing the + * linker error information + */ + +/* + * The structure lbpath is created for each library + * path specification input by the -k option. The + * lbpath structures are linked into a list using + * the next link element. + * + * struct lbpath { + * struct lbpath *next; + * char *path; + * }; + */ +struct lbpath *lbphead; /* pointer to the first + * library path structure + */ + +/* + * The structure lbname is created for all combinations of the + * library path specifications (input by the -k option) and the + * library file specifications (input by the -l option) that + * lead to an existing file. The element path points to + * the path string, element libfil points to the library + * file string, and the element libspc is the concatenation + * of the valid path and libfil strings. + * + * The lbpath structures are linked into a list + * using the next link element. + * + * Each library file contains a list of object files + * that are contained in the particular library. e.g.: + * + * \iolib\termio + * \inilib\termio + * + * Only one specification per line is allowed. + * + * struct lbname { + * struct lbname *next; + * char *path; + * char *libfil; + * char *libspc; + * char f_obj; + * }; + */ +struct lbname *lbnhead; /* pointer to the first + * library name structure + */ + +/* + * The function fndsym() searches through all combinations of the + * library path specifications (input by the -k option) and the + * library file specifications (input by the -l option) that + * lead to an existing file for a symbol definition. + * + * The structure lbfile is created for the first library + * object file which contains the definition for the + * specified undefined symbol. + * + * The element libspc points to the library file path specification + * and element relfil points to the object file specification string. + * The element filspc is the complete path/file specification for + * the library file to be imported into the linker. The f_obj + * flag specifies if the object code from this file is + * to be output by the linker. The file specification + * may be formed in one of two ways: + * + * (1) If the library file contained an absolute + * path/file specification then this becomes filspc. + * (i.e. C:\...) + * + * (2) If the library file contains a relative path/file + * specification then the concatenation of the path + * and this file specification becomes filspc. + * (i.e. \...) + * + * The lbpath structures are linked into a list + * using the next link element. + * + * struct lbfile { + * struct lbfile *next; + * char *libspc; + * char *relfil; + * char *filspc; + * int f_obj; + * }; + */ +struct lbfile *lbfhead; /* pointer to the first + * library file structure + */ + +/* + * array of character types, one per + * ASCII character + */ +char ctype[128] = { +/*NUL*/ ILL, ILL, ILL, ILL, ILL, ILL, ILL, ILL, +/*BS*/ ILL, SPACE, ILL, ILL, SPACE, ILL, ILL, ILL, +/*DLE*/ ILL, ILL, ILL, ILL, ILL, ILL, ILL, ILL, +/*CAN*/ ILL, ILL, ILL, ILL, ILL, ILL, ILL, ILL, +/*SPC*/ SPACE, ETC, ETC, ETC, LETTER, BINOP, BINOP, ETC, +/*(*/ ETC, ETC, BINOP, BINOP, ETC, BINOP, LETTER, BINOP, +/*0*/ DGT2, DGT2, DGT8, DGT8, DGT8, DGT8, DGT8, DGT8, +/*8*/ DGT10, DGT10, ETC, ETC, BINOP, ETC, BINOP, ETC, +/*@*/ ETC, LTR16, LTR16, LTR16, LTR16, LTR16, LTR16, LETTER, +/*H*/ LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, +/*P*/ LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, +/*X*/ LETTER, LETTER, LETTER, ETC, ETC, ETC, BINOP, LETTER, +/*`*/ ETC, LTR16, LTR16, LTR16, LTR16, LTR16, LTR16, LETTER, +/*h*/ LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, +/*p*/ LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, +/*x*/ LETTER, LETTER, LETTER, ETC, BINOP, ETC, ETC, ETC +}; + +/* + * an array of characters which + * perform the case translation function + */ +char ccase[128] = { +/*NUL*/ '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', +/*BS*/ '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', +/*DLE*/ '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', +/*CAN*/ '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', +/*SPC*/ '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', +/*(*/ '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', +/*0*/ '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', +/*8*/ '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', +/*@*/ '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', +/*H*/ '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', +/*P*/ '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', +/*X*/ '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', +/*`*/ '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', +/*h*/ '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', +/*p*/ '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', +/*x*/ '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177' +}; diff --git a/src/mkutil/lib-z80/lbdata.obj b/src/mkutil/lib-z80/lbdata.obj new file mode 100644 index 0000000000000000000000000000000000000000..0c6c33c149b283816f18072fbdd5df902d30823b GIT binary patch literal 5147 zcmai&U2Ggz701tdcl~iUA9fPENt!g9G)X zOJ=ijaIvL+(@WG7Bf8t?n>%=Wj0Wd2MZ+^%L3kfROky+9FpkL^c4?Nzf1NR1SA>2U z4DM)N=Q#hkPqmuQ0QTuzEyu?lE0)Se)Anr3oL;yzH=hoQs|)9^oV$EsG2MeM6Eq+l zN9U(=h1JS!tCnl7Svl7!E)7 zLs43GYA&F*^8=^^=i(3#D0Wb7QzKp@LzXFwr~j*N0t zW;cqQ7!F-XKjtIPBeNr<`;5G~>XqEcH7;3pJ(ASOR}J@8M7kTvWs#8~s_<|}9Y)RJ z^NF>Gqt7-QOC_VoHW{?Fmfaq-WwxBPk!TH6GH;k}K5``6EIH2BP+X7IU~!?HuE#PX z5l%G1F*)xu?JmiJx7v`a3c7;fiaXwkE90qY@SW9h@j|)5quDXNu4g!2gAdV>$$HZ( zM;*rURy3XMM;+@Nl*dM{pyPU$B-L0a$Z$%A1a(}GA-T7XP9u z@wr}U+oXvrm%berH(j~RC)-iI6}xWQ64sINiYw;nc39jk%9D4aZ4wS9kq2?0t>X2v zbPJejmvOp`+hs7uoOx#_vr(=^J_-zf!a6a%i1Dg&d4Uf;gh57bz&byAn<+jR#}RsQ zlN;XBAah7J2?SP_D`feAN49DN+2e)t8$lI3d zy@;?`Tr=2IzvgpJ-C_7HF5aw>2sH1Lz@ff7GPtL(qu0ziCqRFVG|62u~rCqAj4~ z;z7AApXDJE=+0MbN0YCp0Pg9B5u#PLraWphv~kG$~pK?Gg7CO^Ut= zIxp^JO^SX1ni2OSO^V(GofY?%CPnXpvf_TPNzq?GX>otmgl7SCLfj{s6eX}E=Jj}r z`ZXyU0ZoeAtx3^g(73pxniNfgGU8@5DOvzMF7BEpMbCmRi8D1RYJeUP=V`*d0oo_- z1x<>+1)31|T}^yP`8CLTYoqmb{B>;-m%ybGUJ|jy+L|MqX~OVra89<^1{?Q@{jYY; zO0k}JBH7#5KcG^ZHgDNFIJ9m1j^UAecJA7J@1DK)?Mv@JaR0#v4n27I$U~z?$1=yp zvlEjKA3t$&>eTer&;#oxumz|vPr|-P^h98qJ@OqQzYut|i9?HwAl&HULf<-A$QoOU^#$IRRwoUlw zcjS?ZV?y!-O;*~2h981pFBC5lqt8cHc^$Xby40g8l)FT;^=+> z88ou&^^c=tq@D~Jsq{j|UsVV5NW~e7(Nzaulg=zl*-(sM>jd*il^Tli*M7kmUb7-4 zf5q{J>yk<++{>@Q0!Mcm5*;*nKC#`ESIOfqKIvM=SY5rAx{OrJp`%+}nWf|i#TZ?A z8ivcia|F(ii|4SxqMA=G5F^z_$Y3cRiNU&&4c~{n@twen=TI*!>A5YCS*re!k@6>G zP%K1xNs&%8%NiSwg?gVUkeLhDh~a876yq1i!CojsqItTEUkC+zp$dxhlFBi3tO{4n zA!D0T9S6=C1zRK!%CLw*{TVU3sFM#EH1TMdQeg)&J03sW!4bnfAIXC|lg%}L!G=8Y u14-zd9S? +#include + +#ifdef WIN32 +#include +#else +#include +#endif + +#include "aslib.h" + +/*)Module lblex.c + * + * The module lblex.c contains the general lexical analysis + * functions used to scan the text lines from the .rel files. + * + * lblex.c contains the fllowing functions: + * char endline() + * int get() + * VOID getfid() + * VOID getid() + * int getline() + * int getmap() + * int getnb() + * int more() + * VOID skip() + * VOID unget() + * + * lblex.c contains no local variables. + */ + +/*)Function VOID getid(id,c) + * + * char * id a pointer to a string of + * maximum length NCPS-1 + * int c mode flag + * >=0 this is first character to + * copy to the string buffer + * <0 skip white space + * + * The function getid() scans the current input text line + * from the current position copying the next LETTER | DIGIT string + * into the external string buffer (id). The string ends when a non + * LETTER or DIGIT character is found. The maximum number of characters + * copied is NCPS-1. If the input string is larger than NCPS-1 + * characters then the string is truncated. The string is always + * NULL terminated. If the mode argument (c) is >=0 then (c) is + * the first character copied to the string buffer, if (c) is <0 + * then intervening white space (SPACES and TABS) are skipped. + * + * local variables: + * char * p pointer to external string buffer + * int c current character value + * + * global variables: + * char ctype[] a character array which defines the + * type of character being processed. + * This index is the character + * being processed. + * + * called functions: + * int get() lblex.c + * int getnb() lblex.c + * VOID unget() lblex.c + * + * side effects: + * use of getnb(), get(), and unget() updates the + * global pointer ip the position in the current + * input text line. + */ + +VOID +getid(id, c) +register int c; +char *id; +{ + register char *p; + + if (c < 0) { + c = getnb(); + } + p = id; + do { + if (p < &id[NCPS-1]) + *p++ = c; + } while (ctype[c=get()] & (LETTER|DIGIT)); + unget(c); + *p++ = 0; +} + +/*)Function VOID getfid(str,c) + * + * char * str a pointer to a string of + * maximum length FILSPC-1 + * int c this is first character to + * copy to the string buffer + * + * The function getfid() copies a string of characters from + * the current text line into the external string buffer (str). + * The maximum number of characters copied is FILSPC-1. The + * string is terminated by a 'space', 'tab' or end of string. + * + * local variables: + * char * p pointer to external string buffer + * int c current character value + * + * called functions: + * int get() lblex.c + * + * side effects: + * use of get() updates the global pointer ip + * the position in the current input text line. + */ + +VOID +getfid(str, c) +register int c; +char *str; +{ + register char *p; + + p = str; + do { + if (p < &str[FILSPC-1]) + *p++ = c; + c = get(); + } while ((c != 0) && (c != ' ') && (c != '\t')); + *p++ = 0; +} + +/*)Function int getnb() + * + * The function getnb() scans the current input text + * line returning the first character not a SPACE or TAB. + * + * local variables: + * int c current character from input + * + * global variables: + * none + * + * called functions: + * int get() lblex.c + * + * side effects: + * use of get() updates the global pointer ip, the position + * in the current input text line + */ + +int +getnb() +{ + register int c; + + while ((c=get())==' ' || c=='\t') + ; + return (c); +} + +/*)Function VOID skip(c) + * + * The function skip() scans the input text skipping all + * letters and digits. + * + * local variables: + * int c last character read + * none + * + * global variables: + * char ctype[] array of character types, one per + * ASCII character + * + * functions called: + * int get() lblex.c + * int getnb() lblex.c + * VOID unget() lblex.c + * + * side effects: + * Input letters and digits are skipped. + */ + +VOID +skip(c) +register int c; +{ + if (c < 0) + c = getnb(); + while (ctype[c=get()] & (LETTER|DIGIT)) { ; } + unget(c); +} + +/*)Function int get() + * + * The function get() returns the next character in the + * input text line, at the end of the line a + * NULL character is returned. + * + * local variables: + * int c current character from + * input text line + * + * global variables: + * char * ip pointer into the current + * input text line + * + * called functions: + * none + * + * side effects: + * updates ip to the next character position in the + * input text line. If ip is at the end of the + * line, ip is not updated. + */ + +int +get() +{ + register int c; + + if ((c = *ip) != 0) + ++ip; + return (c & 0x007F); +} + +/*)Function VOID unget(c) + * + * int c value of last character + * read from input text line + * + * If (c) is not a NULL character then the global pointer ip + * is updated to point to the preceeding character in the + * input text line. + * + * NOTE: This function does not push the character (c) + * back into the input text line, only + * the pointer ip is changed. + * + * local variables: + * int c last character read + * from input text line + * + * global variables: + * char * ip position into the current + * input text line + * + * called functions: + * none + * + * side effects: + * ip decremented by 1 character position + */ + +VOID +unget(c) +int c; +{ + if (c != 0) + --ip; +} + +/*)Function int getmap(d) + * + * int d value to compare with the + * input text line character + * + * The function getmap() converts the 'C' style characters \b, \f, + * \n, \r, and \t to their equivalent ascii values and also + * converts 'C' style octal constants '\123' to their equivalent + * numeric values. If the first character is equivalent to (d) then + * a (-1) is returned, if the end of the line is detected then + * a 'q' error terminates the parse for this line, or if the first + * character is not a \ then the character value is returned. + * + * local variables: + * int c value of character + * from input text line + * int n looping counter + * int v current value of numeric conversion + * + * global variables: + * none + * + * called functions: + * int get() lblex.c + * VOID unget() lblex.c + * + * side effects: + * use of get() updates the global pointer ip the position + * in the current input text line + */ + +int +getmap(d) +int d; +{ + register int c, n, v; + + if ((c = get()) == '\0') + return (-1); + if (c == d) + return (-1); + if (c == '\\') { + c = get(); + switch (c) { + + case 'b': + c = '\b'; + break; + + case 'f': + c = '\f'; + break; + + case 'n': + c = '\n'; + break; + + case 'r': + c = '\r'; + break; + + case 't': + c = '\t'; + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + n = 0; + v = 0; + while (++n<=3 && c>='0' && c<='7') { + v = (v<<3) + c - '0'; + c = get(); + } + unget(c); + c = v; + break; + } + } + return (c); +} + +/*)Function int getline() + * + * The function getline() reads a line of input text from a + * .rel source text file, a .lbr command file or from stdin. + * Lines of text are processed from a single .lbr file or + * multiple .rel files until all files have been read. + * The input text line is copied into the global string ib[] + * and converted to a NULL terminated string. The function + * getline() returns a (1) after succesfully reading a line + * or a (0) if all files have been read. + * This function also opens each input .lst file and output + * .rst file as each .rel file is processed. + * + * local variables: + * int i string length + * int ftype file type + * char * fid file name + * + * global variables: + * lfile *cfp The pointer *cfp points to the + * current lfile structure + * lfile *filep The pointer *filep points to the + * beginning of a linked list of + * lfile structures. + * int gline get a line from the LST file + * to translate for the RST file + * char ib[NINPUT] REL file text line + * int pass linker pass number + * int pflag print linker command file flag + * FILE *rfp The file handle to the current + * output RST file + * FILE *sfp The file handle sfp points to the + * currently open file + * FILE * stdin c_library + * FILE * stdout c_library + * FILE *tfp The file handle to the current + * LST file being scanned + * int uflag update listing flag + * + * called functions: + * FILE * afile() lbmain.c + * int fclose() c_library + * char * fgets() c_library + * int fprintf() c_library + * VOID lkulist() lklist.c + * VOID lbexit() lbmain.c + * int strlen() c_library + * + * side effects: + * The input stream is scanned. The .rel files will be + * opened and closed sequentially scanning each in turn. + */ + +int +getline() +{ + register int i, ftype; + register char *fid; +#if 1 /* Nick */ + char *str; + int j; +#endif + +loop: if (cfp && cfp->f_type == F_STD) + fprintf(stdout, "ASlib >> "); + + if (sfp == NULL || fgets(ib, sizeof(ib)-2, sfp) == NULL) { + obj_flag = 0; + if (sfp) { + if(sfp != stdin) { + fclose(sfp); + } + sfp = NULL; +#if 1 /* Nick */ + if (rfp) + { + fclose(rfp); + rfp = NULL; + } + + if (oflag) + { + fprintf(stderr, "%s: no symbols defined.\n", + afntmp); + lbexit(ER_FATAL); + } +#endif +#if 0 /* Nick */ + lkulist(0); +#endif + } + if (cfp == NULL) { + cfp = filep; + } else { + cfp = cfp->f_flp; + } + if (cfp) { + ftype = cfp->f_type; + fid = cfp->f_idp; + if (ftype == F_STD) { + sfp = stdin; + } else + if (ftype == F_LBR) { + sfp = afile(fid, "lbr", 0); + } else + if (ftype == F_REL) { + obj_flag = cfp->f_obj; + sfp = afile(fid, "", 0); +#if 1 /* Nick */ + i = strlen(afn); + j = strlen(afntmp + afptmp); + str = malloc(i + 1 + j + 1); + if (str == 0) + { + fprintf(stderr, "fatal: " + "can't allocate memory.\n"); + lbexit(ER_FATAL); + } + strcpy(str, afn); + str[i] = SLASH; + strcpy(str + i + 1, afntmp + afptmp); + rfp = afile(str, "rel", 1); + free(str); +#ifdef WIN32 + afntmp[i] = '/'; +#endif + fprintf(ofp, "%s\n", afntmp + afp); + oflag = 1; /* check if any symbols defined */ +#endif +#if 0 /* Nick */ + if (uflag && (obj_flag == 0) && pass != 0) { + if ((tfp = afile(fid, "lst", 0)) != NULL) { + if ((rfp = afile(fid, "rst", 1)) == NULL) { + fclose(tfp); + tfp = NULL; + } + } + } +#endif + gline = 1; + } else { + fprintf(stderr, "Invalid file type\n"); + lbexit(ER_FATAL); + } + if (sfp == NULL) { + lbexit(ER_FATAL); + } + goto loop; + } else { + filep = NULL; + return(0); + } + } + i = strlen(ib) - 1; + if (ib[i] == '\n') + ib[i] = 0; + return (1); +} + +/*)Function int more() + * + * The function more() scans the input text line + * skipping white space (SPACES and TABS) and returns a (0) + * if the end of the line or a comment delimeter (;) is found, + * or a (1) if their are additional characters in the line. + * + * local variables: + * int c next character from + * the input text line + * + * global variables: + * none + * + * called functions: + * int getnb() lblex.c + * VOID unget() lblex.c + * + * side effects: + * use of getnb() and unget() updates the global pointer ip + * the position in the current input text line + */ + +int +more() +{ + register int c; + + c = getnb(); + unget(c); + return( (c == '\0' || c == ';') ? 0 : 1 ); +} + +/*)Function char endline() + * + * The function endline() scans the input text line + * skipping white space (SPACES and TABS) and returns the next + * character or a (0) if the end of the line is found or a + * comment delimiter (;) is found. + * + * local variables: + * int c next character from + * the input text line + * + * global variables: + * none + * + * called functions: + * int getnb() lblex.c + * + * side effects: + * Use of getnb() updates the global pointer ip the + * position in the current input text line. + */ + +char +endline() +{ + register int c; + + c = getnb(); + return( (c == '\0' || c == ';') ? 0 : c ); +} diff --git a/src/mkutil/lib-z80/lblex.obj b/src/mkutil/lib-z80/lblex.obj new file mode 100644 index 0000000000000000000000000000000000000000..7dba8800062556325bf1bc8ac2bdbb4ab6e1b0c6 GIT binary patch literal 8511 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/lib-z80/lbmain.c b/src/mkutil/lib-z80/lbmain.c new file mode 100644 index 00000000..13c869dc --- /dev/null +++ b/src/mkutil/lib-z80/lbmain.c @@ -0,0 +1,1029 @@ +/* lbmain.c */ + +/* + * (C) Copyright 1989-2003 + * All Rights Reserved + * + * Nick Downing + * nick.downing@hytech-international.com + * + * Alan R. Baldwin + * 721 Berkeley St. + * Kent, Ohio 44240 + */ + +#include +#include + +#ifdef WIN32 +#include +#else +#include +#endif +#include /* Nick */ + +#include "aslib.h" + +/*)Module lbmain.c + * + * The module lbmain.c contains the functions which + * (1) input the linker options, parameters, and specifications + * (2) perform a two pass link + * (3) produce the appropriate linked data output and/or + * link map file and/or relocated listing files. + * + * lbmain.c contains the following functions: + * FILE * afile() + * VOID bassav() + * VOID gblsav() + * VOID link() + * VOID lbexit() + * int fndidx() + * int main() + * VOID map() + * int parse() + * VOID doparse() + * VOID setbas() + * VOID setgbl() + * VOID usage() + * + * lbmain.c contains the following local variables: + * char * usetext[] array of pointers to the + * command option tect lines + * + */ + +/*)Function int main(argc,argv) + * + * int argc number of command line arguments + 1 + * char * argv[] array of pointers to the command line + * arguments + * + * The function main() evaluates the command line arguments to + * determine if the linker parameters are to input through 'stdin' + * or read from a command file. The functiond getline() and parse() + * are to input and evaluate the linker parameters. The linking process + * proceeds by making the first pass through each .rel file in the order + * presented to the linker. At the end of the first pass the setbase(), + * lnkarea(), setgbl(), and symdef() functions are called to evaluate + * the base address terms, link all areas, define global variables, + * and look for undefined symbols. Following these routines a linker + * map file may be produced and the linker output files may be opened. + * The second pass through the .rel files will output the linked data + * in one of the four supported formats. + * + * local variables: + * int c character from argument string + * int i loop counter + * int j loop counter + * int k loop counter + * + * global variables: + * text line in ib[] + * lfile *cfp The pointer *cfp points to the + * current lfile structure + * char ctype[] array of character types, one per + * ASCII character + * lfile *filep The pointer *filep points to the + * beginning of a linked list of + * lfile structures. + * head *hp Pointer to the current + * head structure + * char ib[NINPUT] .rel file text line + * char *ip pointer into the .rel file + * lfile *linkp pointer to first lfile structure + * containing an input .rel file + * specification + * int lberr error flag + * int mflag Map output flag + * int oflag Output file type flag + * FILE *ofp Output file handle + * for word formats + * FILE *ofph Output file handle + * for high byte format + * FILE *ofpl Output file handle + * for low byte format + * int pass linker pass number + * int pflag print linker command file flag + * int radix current number conversion radix + * FILE *sfp The file handle sfp points to the + * currently open file + * lfile *startp asmlnk startup file structure + * FILE * stdout c_library + * + * functions called: + * FILE * afile() lbmain.c + * int fclose() c_library + * int fprintf() c_library + * int getline() lblex.c + * VOID library() lblibr.c + * VOID link() lbmain.c + * VOID lbexit() lbmain.c + * VOID lnkarea() lkarea.c + * VOID map() lbmain.c + * VOID new() lksym.c + * int parse() lbmain.c + * VOID reloc() lkreloc.c + * VOID search() lblibr.c + * VOID setbas() lbmain.c + * VOID setgbl() lbmain.c + * char * sprintf() c_library + * VOID symdef() lksym.c + * VOID usage() lbmain.c + * + * side effects: + * Completion of main() completes the linking process + * and may produce a map file (.map) and/or a linked + * data files (.ihx or .s19) and/or one or more + * relocated listing files (.rst). + */ + +int +main(argc, argv) +int argc; +char *argv[]; +{ + register int c, i, j, k; + struct stat statbuf; + +#if 0 /* Nick */ + fprintf(stdout, "\n"); +#endif + + startp = (struct lfile *) new(sizeof (struct lfile)); + startp->f_idp = ""; + + pflag = 0; /* Nick 1; */ + + for(i=1; i> %s\n", ip); +#endif + parse(); + k++; + } + } else { + strcpy(ip, argv[i]); +#if 0 /* Nick */ + if(pflag) + fprintf(stdout, "ASlink >> %s\n", ip); +#endif + parse(); + } + } + + if (linkp == NULL) + usage(ER_FATAL); + + cfp = NULL; + sfp = NULL; + filep = linkp; + hp = NULL; + radix = 10; + + /* + * Open output file + */ +#if 1 /* Nick */ + ofp = afile(outfp->f_idp, "lib", 1); +#else + ofp = afile(linkp->f_idp, "lib", 1); +#endif + if (ofp == NULL) { + lbexit(ER_FATAL); + } + + /* record output filename, and how much is path */ + strcpy(afn, afntmp); + afp = afptmp; + + /* canonicalize output filename by changing FSEPX to _ */ + for (i = afp; afn[i]; i++) + { + if (afn[i] == FSEPX) + { + afn[i] = '_'; + } + } + + /* create a directory named from the canonicalized filename */ + if (stat(afn, &statbuf) < 0) + { + if (mkdir(afn) < 0) + { + fprintf(stderr, "%s: cannot mkdir.\n", afn); + lbexit(ER_FATAL); + } + } + else + { + if ((statbuf.st_mode & S_IFMT) != S_IFDIR) + { + fprintf(stderr, "%s: not a directory.\n", afn); + lbexit(ER_FATAL); + } + } + + while (getline()) { + ip = ib; + link(); + } + + fclose(ofp); + + lbexit(lberr ? ER_ERROR : ER_NONE); + return(0); +} + +/*)Function VOID lbexit(i) + * + * int i exit code + * + * The function lbexit() explicitly closes all open + * files and then terminates the program. + * + * local variables: + * none + * + * global variables: + * FILE * mfp file handle for .map + * FILE * ofp file handle for .ihx/.s19 + * FILE * rfp file hanlde for .rst + * FILE * sfp file handle for .rel + * FILE * tfp file handle for .lst + * + * functions called: + * int fclose() c_library + * VOID exit() c_library + * + * side effects: + * All files closed. Program terminates. + */ + +VOID +lbexit(i) +int i; +{ + if (mfp != NULL) fclose(mfp); + if (ofp != NULL) fclose(ofp); + if (rfp != NULL) fclose(rfp); + if (sfp != NULL) { if (sfp != stdin) fclose(sfp); } + if (tfp != NULL) fclose(tfp); + exit(i); +} + +/*)Function link() + * + * The function link() evaluates the directives for each line of + * text read from the .rel file(s). The valid directives processed + * are: + * X, D, Q, H, M, A, S, T, R, and P. + * + * local variables: + * int c first non blank character of a line + * + * global variables: + * head *headp The pointer to the first + * head structure of a linked list + * head *hp Pointer to the current + * head structure + * sdp sdp Base Paged structure + * int a_bytes T Line address bytes + * int hilo Byte ordering + * int pass linker pass number + * int radix current number conversion radix + * + * functions called: + * char endline() lklex.c + * int get() lklex.c + * VOID module() lkhead.c + * VOID newarea() lkarea.c + * VOID newhead() lkhead.c + * sym * newsym() lksym.c + * VOID reloc() lkreloc.c + * + * side effects: + * Head, area, and symbol structures are created and + * the radix is set as the .rel file(s) are read. + */ + +VOID +link() +{ + register int c; + char symname[NINPUT+2]; + char d; + + /* copy line to new *.rel file in the library directory */ + fprintf(rfp, "%s\n", ip); + + if ((c=endline()) == 0) { return; } + switch (c) { + + case 'X': + radix = 16; + break; + + case 'D': + radix = 10; + break; + + case 'Q': + radix = 8; + break; + +#if 0 + case 'H': + break; + + case 'M': + break; + + case 'A': + break; +#endif + + case 'S': + sscanf(ip, " %s %c", symname, &d); + + /* If it's an actual symbol, record it */ + if (d == 'D' && strcmp(symname, ".__.ABS.") != 0) + { + oflag = 0; + fprintf(ofp, " %s\n", symname); + } + + break; + +#if 0 + case 'T': + case 'R': + case 'P': + break; +#endif + + default: + break; + } +#if 1 + if (c == 'X' || c == 'D' || c == 'Q') { + while ((c = get()) != 0) { + switch(c) { + case 'H': + hilo = 1; + break; + + case 'L': + hilo = 0; + break; + + case '2': + a_bytes = 2; + break; + + case '3': + a_bytes = 3; + break; + + case '4': + a_bytes = 4; + break; + + default: + break; + } + } + switch(a_bytes) { + default: + a_bytes = 2; + case 2: + a_mask = 0x0000FFFF; + s_mask = 0x00008000; + v_mask = 0x00007FFF; + break; + + case 3: + a_mask = 0x00FFFFFF; + s_mask = 0x00800000; + v_mask = 0x007FFFFF; + break; + + case 4: + a_mask = 0xFFFFFFFF; + s_mask = 0x80000000; + v_mask = 0x7FFFFFFF; + break; + } + } +#endif +} + +/*)Function int parse() + * + * The function parse() evaluates all command line or file input + * linker directives and updates the appropriate variables. + * + * local variables: + * int c character value + * int idx string index + * int sv_type save type of processing + * char *p; string pointer + * char fid[] file id string + * + * global variables: + * char ctype[] array of character types, one per + * ASCII character + * lfile *lfp pointer to current lfile structure + * being processed by parse() + * lfile *linkp pointer to first lfile structure + * containing an input REL file + * specification + * int mflag Map output flag + * int oflag Output file type flag + * int objflg Linked file/library output object flag + * int pflag print linker command file flag + * FILE * stderr c_library + * int uflag Relocated listing flag + * int xflag Map file radix type flag + * int wflag Wide listing format + * int zflag Enable symbol case sensitivity + * + * Functions called: + * VOID addlib() lblibr.c + * VOID addpath() lblibr.c + * VOID bassav() lbmain.c + * VOID doparse() lbmain.c + * int fprintf() c_library + * VOID gblsav() lbmain.c + * VOID getfid() lblex.c + * int get() lblex.c + * int getnb() lblex.c + * VOID lbexit() lbmain.c + * char * strsto() lksym.c + * int strlen() c_library + * + * side effects: + * Various linker flags are updated and the linked + * structure lfile is created. + */ + +int +parse() +{ + register int c, idx; + register char *p; + int sv_type; + char fid[FILSPC+FILSPC]; + + while ((c = getnb()) != 0) { + if ( c == '-') { + while (ctype[c=get()] & LETTER) { + switch(c) { + + case 'c': + case 'C': + if (startp->f_type != 0) + break; + startp->f_type = F_STD; + doparse(); + return(0); + + case 'f': + case 'F': + if (startp->f_type == F_LBR) + return(0); + unget(getnb()); + if (*ip == 0) + usage(ER_FATAL); + sv_type = startp->f_type; +#if 1 /* Nick */ + startp->f_idp = strsto(ip); + outfp = startp; /* Nick */ +#else + startp->f_idp = ip; +#endif + startp->f_idx = fndidx(ip); + startp->f_type = F_LBR; + doparse(); + if (sv_type == F_STD) { + cfp = NULL; + sfp = NULL; + startp->f_type = F_STD; + filep = startp; + } + return(0); + + case 'o': + case 'O': + /* note, this will never be freed */ + outfp = (struct lfile *) + new(sizeof (struct lfile)); + +#if 1 + c = getnb(); + if (ctype[c] == ILL) + { + return 0; /* ignore it */ + } + + /* + * Copy Path from .LBR file + */ + idx = startp->f_idx; + strncpy(fid, startp->f_idp, idx); + /* + * Concatenate the output file spec + */ + getfid(fid + idx, c); + /* + * If output file spec has a path + * use it + * else + * use path of .LBR file + */ + if (fndidx(fid + idx) != 0) { + p = fid + idx; + } else { + p = fid; + } + /* + * Save output file specification + */ + outfp->f_idp = strsto(p); + outfp->f_idx = fndidx(p); +#else + unget(getnb()); + outfp->f_idp = strsto(ip); + outfp->f_idx = fndidx(ip); +#endif + + /* don't process any more switches */ + return 0; + + case 'e': + case 'E': + return(1); + + case 'n': + case 'N': + pflag = 0; + break; + + case 'p': + case 'P': + pflag = 1; + break; + + default: + fprintf(stderr, + "Unkown option -%c ignored\n", c); + break; + } + } + } else + if (ctype[c] != ILL) { + if (linkp == NULL) { + linkp = (struct lfile *) + new(sizeof (struct lfile)); +#if 1 /* Nick */ + if (outfp == NULL) + { + outfp = linkp; + } +#endif + lfp = linkp; + } else { + lfp->f_flp = (struct lfile *) + new(sizeof (struct lfile)); + lfp = lfp->f_flp; + } + /* + * Copy Path from .LBR file + */ + idx = startp->f_idx; + strncpy(fid, startp->f_idp, idx); + /* + * Concatenate the .REL file spec + */ + getfid(fid + idx, c); + /* + * If .REL file spec has a path + * use it + * else + * use path of .LBR file + */ + if (fndidx(fid + idx) != 0) { + p = fid + idx; + } else { + p = fid; + } + /* + * Save .REL file specification + */ + lfp->f_idp = strsto(p); + lfp->f_idx = fndidx(p); + lfp->f_type = F_REL; + lfp->f_obj = objflg; + } else { + fprintf(stderr, "Invalid input"); + lbexit(ER_FATAL); + } + } + return(0); +} + +/*)Function VOID doparse() + * + * The function doparse() evaluates all interactive + * command line or file input linker directives and + * updates the appropriate variables. + * + * local variables: + * none + * + * global variables: + * FILE * stdin standard input + * FILE * stdout standard output + * lfile *cfp The pointer *cfp points to the + * current lfile structure + * FILE *sfp The file handle sfp points to the + * currently open file + * char ib[NINPUT] .rel file text line + * char *ip pointer into the .rel file + * lfile *filep The pointer *filep points to the + * beginning of a linked list of + * lfile structures. + * lfile *startp asmlnk startup file structure + * int pflag print linker command file flag + * + * Functions called: + * int fclose() c_library + * int fprintf() c_library + * VOID getfid() lblex.c + * int getline() lblex.c + * int parse() lbmain.c + * + * side effects: + * Various linker flags are updated and the linked + * structure lfile may be updated. + */ + +VOID +doparse() +{ + cfp = NULL; + sfp = NULL; + filep = startp; + while (1) { + ip = ib; + if (getline() == 0) + break; +#if 0 /* Nick */ + if (pflag && cfp->f_type != F_STD) + fprintf(stdout, "ASlink >> %s\n", ip); +#endif + if (*ip == 0 || parse()) + break; + } +#if 1 /* Nick */ + if (sfp != NULL && sfp != stdin) { +#else + if(sfp != stdin) { +#endif + fclose(sfp); + } + sfp = NULL; +#if 0 /* Nick */ + startp->f_idp = ""; +#endif + startp->f_idx = 0; + startp->f_type = 0; +} + +/*)Function FILE * afile(fn, ft, wf) + * + * char * fn file specification string + * char * ft file type string + * int wf read(0)/write(1) flag + * + * The function afile() opens a file for reading or writing. + * + * afile() returns a file handle for the opened file or aborts + * the assembler on an open error. + * + * local variables: + * FILE * fp file handle for opened file + * + * global variables: + * char afn[] afile() constructed filespec + * int afp afile() constructed path length + * char afntmp[] afilex() constructed filespec + * int afptmp afilex() constructed path length + * + * functions called: + * VOID afilex() asmain.c + * int fndidx() asmain.c + * FILE * fopen() c_library + * int fprintf() c_library + * char * strcpy() c_library + * + * side effects: + * File is opened for read or write. + */ + +FILE * +afile(fn, ft, wf) +char *fn; +char *ft; +int wf; +{ + FILE *fp; + + afilex(fn, ft); + + if ((fp = fopen(afntmp, wf ? "w" : "r")) == NULL) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "file \"%s\": can't %s: ", + afntmp, wf ? "create" : "open"); + perror(""); +#else + fprintf(stderr, "%s: cannot %s.\n", + afntmp, wf ? "create" : "open"); +#endif + lbexit(ER_FATAL); + } +#if 1 /* Nick */ + fflush(stderr); + printf("%s \"%s\"\n", wf ? "writing" : "reading", afntmp); +#endif + +#if 0 + strcpy(afn, afntmp); + afp = afptmp; +#endif + + return (fp); +} + +/*)Function VOID afilex(fn, ft) + * + * char * fn file specification string + * char * ft file type string + * + * The function afilex() processes the file specification string: + * (1) If the file type specification string ft + * is not NULL then a file specification is + * constructed with the file path\name in fn + * and the extension in ft. + * (2) If the file type specification string ft + * is NULL then the file specification is + * constructed from fn. If fn does not have + * a file type then the default source file + * type dsft is appended to the file specification. + * + * afilex() aborts the assembler on a file specification length error. + * + * local variables: + * int c character value + * char * p1 pointer into filespec string afntmp + * char * p2 pointer into filespec string fn + * char * p3 pointer to filetype string ft + * + * global variables: + * char afntmp[] afilex() constructed filespec + * int afptmp afilex() constructed path length + * char dsft[] default assembler file type string + * + * functions called: + * VOID lbexit() asmain.c + * int fndidx() asmain.c + * int fprintf() c_library + * char * strcpy() c_library + * + * side effects: + * File specification string may be modified. + */ + +VOID +afilex(fn, ft) +char *fn; +char *ft; +{ + register char *p1, *p2, *p3; + register int c; +#if 0 /* Nick */ + int l; +#endif + + if (strlen(fn) > (FILSPC-5)) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "file \"%s\": name too long\n", fn); +#else + fprintf(stderr, "File Specification %s is too long.", fn); +#endif + lbexit(ER_FATAL); + } + + /* + * Save the File Name Index + */ + strcpy(afntmp, fn); +#ifdef WIN32 /* Nick */ + for (p1 = afntmp; *p1; p1++) + { + if (*p1 == '/') + { + *p1 = SLASH; + } + } +#endif + afptmp = fndidx(afntmp); + p1 = &afntmp[afptmp]; + p2 = &fn[afptmp]; + + /* + * Skip to File Extension Seperator + */ +#if 0 /* Nick */ + l = strlen(p2); + for (c = l - 1; c >= 0; c--) + { + if (p2[c] == FSEPX) + { + l = c; + break; + } + if (p2[c] == SLASH) + { + break; + } + } + p1 += l; + p2 += l; + + c = *p2++; +#else + while (((c = *p2++) != 0) && (c != FSEPX)) { + p1++; + } +#endif + *p1++ = FSEPX; + + /* + * Copy File Extension + */ + p3 = ft; + if (*p3 == 0) { + if (c == FSEPX) { + p3 = p2; + } else { + p3 = "rel"; /* dsft; */ + } + } + while ((c = *p3++) != 0) { + if (p1 < &afntmp[FILSPC-1]) + *p1++ = c; + } + *p1++ = 0; +} + +/*)Function int fndidx(str) + * + * char * str file specification string + * + * The function fndidx() scans the file specification string + * to find the index to the file name. If the file + * specification contains a 'path' then the index will + * be non zero. + * + * fndidx() returns the index value. + * + * local variables: + * char * p1 temporary pointer + * char * p2 temporary pointer + * + * global variables: + * none + * + * functions called: + * char * strrchr() c_library + * + * side effects: + * none + */ + +int +fndidx(str) +char *str; +{ + register char *p1, *p2; + + /* + * Skip Path Delimiters + */ + p1 = str; + if ((p2 = strrchr(p1, ':')) != NULL) { p1 = p2 + 1; } +#ifdef WIN32 /* Nick */ + if ((p2 = strrchr(p1, '/')) != NULL) { p1 = p2 + 1; } +#endif + if ((p2 = strrchr(p1, SLASH)) != NULL) { p1 = p2 + 1; } + + return(p1 - str); +} + +char *usetxt[] = { + "Usage: [-Options] [-Option with arg] file [file ...]", +#if 0 + " -p Echo commands to stdout (default)", + " -n No echo of commands to stdout", +#endif + "Alternates to Command Line Input:", + " -c ASlib >> prompt input", + " -f file[.lbr] Command File input", + "Output:", + " -o Output filename (default is first source filename)", + "End:", + " -e or null line terminates input", + "", + 0 +}; + +/*)Function VOID usage(n) + * + * int n exit code + * + * The function usage() outputs to the stderr device the + * linker name and version and a list of valid linker options. + * + * local variables: + * char ** dp pointer to an array of + * text string pointers. + * + * global variables: + * FILE * stderr c_library + * + * functions called: + * int fprintf() c_library + * + * side effects: + * none + */ + +VOID +usage(n) +int n; +{ + register char **dp; + +#if 1 /* Nick */ + fflush(stderr); + printf("\nASxxxx Librarian %s\n\n", VERSION); + for (dp = usetxt; *dp; dp++) + printf("%s\n", *dp); +#else + fprintf(stderr, "\nASxxxx Librarian %s\n\n", VERSION); + for (dp = usetxt; *dp; dp++) + fprintf(stderr, "%s\n", *dp); +#endif + lbexit(n); +} diff --git a/src/mkutil/lib-z80/lbmain.obj b/src/mkutil/lib-z80/lbmain.obj new file mode 100644 index 0000000000000000000000000000000000000000..e8026786c65a436cc86d373af1d7369b32392661 GIT binary patch literal 16470 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 E01^*mPyhe` literal 0 HcmV?d00001 diff --git a/src/mkutil/lib-z80/lbsym.c b/src/mkutil/lib-z80/lbsym.c new file mode 100644 index 00000000..79aa6e67 --- /dev/null +++ b/src/mkutil/lib-z80/lbsym.c @@ -0,0 +1,317 @@ +/* lbmain.c */ + +/* + * (C) Copyright 1989-2003 + * All Rights Reserved + * + * Nick Downing + * nick.downing@hytech-international.com + * + * Alan R. Baldwin + * 721 Berkeley St. + * Kent, Ohio 44240 + * + * With enhancements from + * John L. Hartman (JLH) + * jhartman@compuserve.com + * + */ + +#include +#include + +#ifdef WIN32 +#include +#else +#include +#endif + +#include "aslib.h" + +/*)Module lbsym.c + * + * The module lbsym.c contains the functions that operate + * on the symbol structures. + * + * lbsym.c contains the following functions: + * char * new() + * char * strsto() + * + * lbsym.c contains the static variables: + * char * pnext + * int bytes + * used by the string store function. + */ + +#if decus + +/*)Function char * strsto(str) + * + * char * str pointer to string to save + * + * Allocate space for "str", copy str into new space. + * Return a pointer to the allocated string. + * + * This function based on code by + * John L. Hartman + * jhartman@compuserve.com + * + * local variables: + * int l string length + 1 + * char * p string location + * + * global variables: + * none + * + * functions called: + * char * new() assym.c + * char * strncpy() c_library + * + * side effects: + * Space allocated for string, string copied + * to space. Out of Space terminates linker. + */ + +char * +strsto(str) +char *str; +{ + int l; + char *p; + + /* + * What we need, including a null. + */ + l = strlen(str) + 1; + p = (char *) new (l); + + /* + * Copy the name and terminating null. + */ + strncpy(p, str, l); + return(p); +} + +/* + * This code is optimized for the PDP-11 (decus) + * which has a limited program space of 56K Bytes ! + * Short strings and small structures are allocated + * from a memory hunk in new() to reduce the overhead + * from allocations directly by malloc(). Longer + * allocations are made directly by malloc. + * PDP-11 addressing requires that variables + * are allocated on a word boundary, (strings donot + * have this restriction,) all allocations will have + * at most 1 extra byte to maintain the word boundary + * requirement. + */ + +/*)Function char * new(n) + * + * unsigned int n allocation size in bytes + * + * The function new() allocates n bytes of space and returns + * a pointer to this memory. If no space is available the + * linker is terminated. + * + * Allocate space for "str", copy str into new space. + * Return a pointer to the allocated string. + * + * This function based on code by + * John L. Hartman + * jhartman@compuserve.com + * + * local variables: + * int bytes bytes remaining in buffer area + * int i loop counter + * char * p pointer to head of copied string + * char * pnext next location in buffer area + * char * q a general pointer + * + * global variables: + * none + * + * functions called: + * int fprintf() c_library + * VOID * malloc() c_library + * + * side effects: + * Memory is allocated, if allocation fails + * the linker is terminated. + */ + +/* + * To avoid wasting memory headers on small allocations, we + * allocate a big chunk and parcel it out as required. + * These static variables remember our hunk. + */ + +#define STR_SPC 1024 +#define STR_MIN 16 +static char * pnext = NULL; +static int bytes = 0; + +char * +new(n) +unsigned int n; +{ + register char *p,*q; + register unsigned int i; + + /* + * Always an even byte count + */ + n = (n+1) & 0xFFFE; + + if (n > STR_MIN) { + /* + * For allocations larger than + * most structures and short strings + * allocate the space directly. + */ + p = (char *) malloc(n); + } else { + /* + * For smaller structures and + * strings allocate from the hunk. + */ + if (n > bytes) { + /* + * No space. Allocate a new hunk. + * We lose the pointer to any old hunk. + * We don't care, as the pieces are never deleted. + */ + pnext = (char *) malloc (STR_SPC); + bytes = STR_SPC; + } + p = pnext; + pnext += n; + bytes -= n; + } + if (p == NULL) { + fprintf(stderr, "Out of space!\n"); + lbexit(ER_FATAL); + } + for (i=0,q=p; i bytes) { + /* + * No space. Allocate a new hunk. + * We lose the pointer to any old hunk. + * We don't care, as the strings are never deleted. + */ + pnext = (char *) new (STR_SPC); + bytes = STR_SPC; + } + + /* + * Copy the name and terminating null. + */ + p = pnext; + strncpy(p, str, l); + + pnext += l; + bytes -= l; + + return(p); +} + +/*)Function char * new(n) + * + * unsigned int n allocation size in bytes + * + * The function new() allocates n bytes of space and returns + * a pointer to this memory. If no space is available the + * linker is terminated. + * + * local variables: + * char * p a general pointer + * char * q a general pointer + * + * global variables: + * none + * + * functions called: + * int fprintf() c_library + * VOID * malloc() c_library + * + * side effects: + * Memory is allocated, if allocation fails + * the linker is terminated. + */ + +char * +new(n) +unsigned int n; +{ + register char *p,*q; + register unsigned int i; + + if ((p = (char *) malloc(n)) == NULL) { + fprintf(stderr, "Out of space!\n"); + lbexit(ER_FATAL); + } + for (i=0,q=p; ivgj2#%sLm zq)CAyMI6jZoH)S+R3U_f#Eo+Wi2efv7dTZ^v_hf^k`IRP&D*uTDF>ePW@o;cH#6_; zym^aKlrClF=6~%cdY1g5mg|P@ZWw_m@QBorf^R%YYS}0?R!^;THGM?mup5_sB#zHZ zl)Rvp9H(moCKeU~{yj?HQC;JP8`Av&{zLeBJ3=&y{F0O+g_hq`%SE>svO5I+Bk03p zf&KaUUFqO2g1P;e9p^V$HY&x29Ip)A#0bKTrFtE)=JUay&!QCD6!>W*nwm8mmoI<3x3P0y(5=P8jC@dI)T z-zery%wks~MIE>9xb{JcCi$pqI6fKB5aib0-X0&ZWUp!tq=G4Kqx!HME>4m}G$OG6fQ!>IxT6BQ5^!=T%7XW!<~mQFB@CF4-M^nAKAGhHM1=**P7$l^zP^yA*YU(bE3O` zNdxwtWVxAdd)d~qmy5mT<=dA7+o8``Cudt?jVHWK%pLx-`)9EYUX#n?CxAP<_shIA0+bfEdjS4 z{1SvqU=bHWijINuS#S~hCz`@t^Uo|wFLbr%yI39^-}@9@?P5lk2uH{m?`=i^l8C~qY+nNKp=zk4DdsA4m3&gpd;vSL{Cux^az=t zN9hLWsJN2HL~Rhg4^wR{^cV9v)N)$kFHClImfu%KcIh=#_=yl=x9vN!IsZy-Z|XjX|E zTOf%HE44bBS&)=KxSMqr;M<4))q4=xl`Qeq;BkEI5qCU{Q!AII&YqhQys#l{y=Yl> rrxMt6XYc!WaeCh_I(z3!wSVvYPkMWw+rKLG6h~nvOZ*t`AH4QoDEeHr literal 0 HcmV?d00001 diff --git a/src/mkutil/lib-z80/lib-z80.exe b/src/mkutil/lib-z80/lib-z80.exe new file mode 100644 index 0000000000000000000000000000000000000000..25a6c002fc4df2cd5edd9b1355410ae3e38c6bec GIT binary patch literal 77885 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/lib-z80/lib-z80.lnk b/src/mkutil/lib-z80/lib-z80.lnk new file mode 100644 index 00000000..24879eeb --- /dev/null +++ b/src/mkutil/lib-z80/lib-z80.lnk @@ -0,0 +1,9 @@ +/debug +/subsystem:console +"/libpath:c:\Program Files\Microsoft Visual Studio\VC98\lib" +/map:lib-z80.map +/out:lib-z80.exe +lbdata.obj +lblex.obj +lbmain.obj +lbsym.obj diff --git a/src/mkutil/lib-z80/lib-z80.map b/src/mkutil/lib-z80/lib-z80.map new file mode 100644 index 00000000..e4dc34ec --- /dev/null +++ b/src/mkutil/lib-z80/lib-z80.map @@ -0,0 +1,583 @@ + lib-z80 + + Timestamp is 3f3b4347 (Thu Aug 14 18:07:35 2003) + + Preferred load address is 00400000 + + Start Length Name Class + 0001:00000000 0000c773H .text CODE + 0002:00000000 00000a56H .rdata DATA + 0002:00000a56 00000000H .edata DATA + 0003:00000000 00000104H .CRT$XCA DATA + 0003:00000104 00000104H .CRT$XCZ DATA + 0003:00000208 00000104H .CRT$XIA DATA + 0003:0000030c 00000109H .CRT$XIC DATA + 0003:00000418 00000104H .CRT$XIZ DATA + 0003:0000051c 00000104H .CRT$XPA DATA + 0003:00000620 00000104H .CRT$XPX DATA + 0003:00000724 00000104H .CRT$XPZ DATA + 0003:00000828 00000104H .CRT$XTA DATA + 0003:0000092c 00000104H .CRT$XTZ DATA + 0003:00000a30 00001223H .data DATA + 0003:00001c58 000020ccH .bss DATA + 0004:00000000 00000014H .idata$2 DATA + 0004:00000014 00000014H .idata$3 DATA + 0004:00000028 0000013cH .idata$4 DATA + 0004:00000164 0000013cH .idata$5 DATA + 0004:000002a0 0000056fH .idata$6 DATA + + Address Publics by Value Rva+Base Lib:Object + + 0001:000000e0 _getid 004010e0 f lblex.obj + 0001:0000014c _getfid 0040114c f lblex.obj + 0001:0000019f _getnb 0040119f f lblex.obj + 0001:000001c0 _skip 004011c0 f lblex.obj + 0001:000001fa _get 004011fa f lblex.obj + 0001:00000228 _unget 00401228 f lblex.obj + 0001:00000240 _getmap 00401240 f lblex.obj + 0001:00000390 _getline 00401390 f lblex.obj + 0001:0000068b _more 0040168b f lblex.obj + 0001:000006c8 _endline 004016c8 f lblex.obj + 0001:00000860 _main 00401860 f lbmain.obj + 0001:00000b8d _lbexit 00401b8d f lbmain.obj + 0001:00000c1d _link 00401c1d f lbmain.obj + 0001:00000e9c _parse 00401e9c f lbmain.obj + 0001:0000130a _doparse 0040230a f lbmain.obj + 0001:000013ac _afile 004023ac f lbmain.obj + 0001:00001487 _afilex 00402487 f lbmain.obj + 0001:000015dc _fndidx 004025dc f lbmain.obj + 0001:00001652 _usage 00402652 f lbmain.obj + 0001:00001a50 _strsto 00402a50 f lbsym.obj + 0001:00001acf _new 00402acf f lbsym.obj + 0001:00001b79 _free 00402b79 f LIBC:free.obj + 0001:00001bb0 _strcpy 00402bb0 f LIBC:strcat.obj + 0001:00001bc0 _strcat 00402bc0 f LIBC:strcat.obj + 0001:00001ca0 _malloc 00402ca0 f LIBC:malloc.obj + 0001:00001cb2 __nh_malloc 00402cb2 f LIBC:malloc.obj + 0001:00001cde __heap_alloc 00402cde f LIBC:malloc.obj + 0001:00001d20 _strlen 00402d20 f LIBC:strlen.obj + 0001:00001d9b _fclose 00402d9b f LIBC:fclose.obj + 0001:00001df1 _fgets 00402df1 f LIBC:fgets.obj + 0001:00001e48 _fprintf 00402e48 f LIBC:fprintf.obj + 0001:00001e7a ___initstdio 00402e7a f LIBC:_file.obj + 0001:00001f1f ___endstdio 00402f1f f LIBC:_file.obj + 0001:00001f33 _sprintf 00402f33 f LIBC:sprintf.obj + 0001:00001f85 __cinit 00402f85 f LIBC:crt0dat.obj + 0001:00001fb2 _exit 00402fb2 f LIBC:crt0dat.obj + 0001:00001fc3 __exit 00402fc3 f LIBC:crt0dat.obj + 0001:00001fd4 __cexit 00402fd4 f LIBC:crt0dat.obj + 0001:00001fe3 __c_exit 00402fe3 f LIBC:crt0dat.obj + 0001:000020b0 _strcmp 004030b0 f LIBC:strcmp.obj + 0001:00002134 _sscanf 00403134 f LIBC:sscanf.obj + 0001:00002170 _strncpy 00403170 f LIBC:strncpy.obj + 0001:0000226e _printf 0040326e f LIBC:printf.obj + 0001:0000229f _perror 0040329f f LIBC:perror.obj + 0001:0000230b _fflush 0040330b f LIBC:fflush.obj + 0001:00002346 __flush 00403346 f LIBC:fflush.obj + 0001:000023a2 __flushall 004033a2 f LIBC:fflush.obj + 0001:00002418 __fsopen 00403418 f LIBC:fopen.obj + 0001:00002438 _fopen 00403438 f LIBC:fopen.obj + 0001:00002450 _strrchr 00403450 f LIBC:strrchr.obj + 0001:00002477 _mainCRTStartup 00403477 f LIBC:crt0.obj + 0001:00002556 __amsg_exit 00403556 f LIBC:crt0.obj + 0001:0000259f __heap_init 0040359f f LIBC:heapinit.obj + 0001:000025db __heap_term 004035db f LIBC:heapinit.obj + 0001:00002650 __get_sbh_threshold 00403650 f LIBC:sbheap.obj + 0001:00002656 __set_sbh_threshold 00403656 f LIBC:sbheap.obj + 0001:0000266d ___sbh_heap_init 0040366d f LIBC:sbheap.obj + 0001:000026ab ___sbh_find_block 004036ab f LIBC:sbheap.obj + 0001:000026d6 ___sbh_free_block 004036d6 f LIBC:sbheap.obj + 0001:00002a01 ___sbh_alloc_block 00403a01 f LIBC:sbheap.obj + 0001:00002d0a ___sbh_alloc_new_region 00403d0a f LIBC:sbheap.obj + 0001:00002dbb ___sbh_alloc_new_group 00403dbb f LIBC:sbheap.obj + 0001:00002eb6 ___sbh_resize_block 00403eb6 f LIBC:sbheap.obj + 0001:000031ac ___sbh_heapmin 004041ac f LIBC:sbheap.obj + 0001:0000327d ___sbh_heap_check 0040427d f LIBC:sbheap.obj + 0001:000035ac ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z 004045ac f LIBC:handler.obj + 0001:000035bc ?_query_new_handler@@YAP6AHI@ZXZ 004045bc f LIBC:handler.obj + 0001:000035c2 __callnewh 004045c2 f LIBC:handler.obj + 0001:000035dd __close 004045dd f LIBC:close.obj + 0001:00003690 __freebuf 00404690 f LIBC:_freebuf.obj + 0001:000036bb __filbuf 004046bb f LIBC:_filbuf.obj + 0001:00003794 __stbuf 00404794 f LIBC:_sftbuf.obj + 0001:00003821 __ftbuf 00404821 f LIBC:_sftbuf.obj + 0001:0000385e __output 0040485e f LIBC:output.obj + 0001:00004068 __ioinit 00405068 f LIBC:ioinit.obj + 0001:00004213 __ioterm 00405213 f LIBC:ioinit.obj + 0001:00004236 _calloc 00405236 f LIBC:calloc.obj + 0001:000042b3 __fcloseall 004052b3 f LIBC:closeall.obj + 0001:0000430b __flsbuf 0040530b f LIBC:_flsbuf.obj + 0001:00004420 __input 00405420 f LIBC:input.obj + 0001:00004ed1 __write 00405ed1 f LIBC:write.obj + 0001:0000507e __commit 0040607e f LIBC:commit.obj + 0001:000050d5 __openfile 004060d5 f LIBC:_open.obj + 0001:00005245 __getstream 00406245 f LIBC:stream.obj + 0001:000052bd __XcptFilter 004062bd f LIBC:winxfltr.obj + 0001:00005441 __setenvp 00406441 f LIBC:stdenvp.obj + 0001:000054fa __setargv 004064fa f LIBC:stdargv.obj + 0001:00005747 ___crtGetEnvironmentStringsA 00406747 f LIBC:a_env.obj + 0001:0000587c __global_unwind2 0040687c f LIBC:exsup.obj + 0001:000058be __local_unwind2 004068be f LIBC:exsup.obj + 0001:00005916 __NLG_Return2 00406916 f LIBC:exsup.obj + 0001:00005926 __abnormal_termination 00406926 f LIBC:exsup.obj + 0001:00005949 __NLG_Notify1 00406949 f LIBC:exsup.obj + 0001:00005952 __NLG_Notify 00406952 f LIBC:exsup.obj + 0001:00005965 __NLG_Dispatch 00406965 f LIBC:exsup.obj + 0001:00005974 __except_handler3 00406974 f LIBC:exsup3.obj + 0001:00005a31 __seh_longjmp_unwind@4 00406a31 f LIBC:exsup3.obj + 0001:00005a4c __FF_MSGBANNER 00406a4c f LIBC:crt0msg.obj + 0001:00005a85 __NMSG_WRITE 00406a85 f LIBC:crt0msg.obj + 0001:00005bd8 __GET_RTERRMSG 00406bd8 f LIBC:crt0msg.obj + 0001:00005c10 _memmove 00406c10 f LIBC:memmove.obj + 0001:00005f45 __dosmaperr 00406f45 f LIBC:dosmap.obj + 0001:00005fac __alloc_osfhnd 00406fac f LIBC:osfinfo.obj + 0001:00006041 __set_osfhnd 00407041 f LIBC:osfinfo.obj + 0001:000060b8 __free_osfhnd 004070b8 f LIBC:osfinfo.obj + 0001:00006132 __get_osfhandle 00407132 f LIBC:osfinfo.obj + 0001:0000616f __open_osfhandle 0040716f f LIBC:osfinfo.obj + 0001:0000620c __read 0040720c f LIBC:read.obj + 0001:00006402 __getbuf 00407402 f LIBC:_getbuf.obj + 0001:00006446 __isatty 00407446 f LIBC:isatty.obj + 0001:0000646c _wctomb 0040746c f LIBC:wctomb.obj + 0001:000064e0 __aulldiv 004074e0 f LIBC:ulldiv.obj + 0001:00006550 __aullrem 00407550 f LIBC:ullrem.obj + 0001:000065d0 _memset 004075d0 f LIBC:memset.obj + 0001:00006628 __lseek 00407628 f LIBC:lseek.obj + 0001:000066c2 _mbtowc 004076c2 f LIBC:mbtowc.obj + 0001:0000678a _isalpha 0040778a f LIBC:_ctype.obj + 0001:000067b8 _isupper 004077b8 f LIBC:_ctype.obj + 0001:000067e0 _islower 004077e0 f LIBC:_ctype.obj + 0001:00006808 _isdigit 00407808 f LIBC:_ctype.obj + 0001:00006830 _isxdigit 00407830 f LIBC:_ctype.obj + 0001:0000685d _isspace 0040785d f LIBC:_ctype.obj + 0001:00006885 _ispunct 00407885 f LIBC:_ctype.obj + 0001:000068ad _isalnum 004078ad f LIBC:_ctype.obj + 0001:000068db _isprint 004078db f LIBC:_ctype.obj + 0001:00006909 _isgraph 00407909 f LIBC:_ctype.obj + 0001:00006937 _iscntrl 00407937 f LIBC:_ctype.obj + 0001:0000695f ___isascii 0040795f f LIBC:_ctype.obj + 0001:0000696c ___toascii 0040796c f LIBC:_ctype.obj + 0001:00006974 ___iscsymf 00407974 f LIBC:_ctype.obj + 0001:000069b1 ___iscsym 004079b1 f LIBC:_ctype.obj + 0001:000069ee __isctype 004079ee f LIBC:isctype.obj + 0001:00006a70 __allmul 00407a70 f LIBC:llmul.obj + 0001:00006ab0 __allshl 00407ab0 f LIBC:llshl.obj + 0001:00006acf _ungetc 00407acf f LIBC:ungetc.obj + 0001:00006b3d __open 00407b3d f LIBC:open.obj + 0001:00006b54 __sopen 00407b54 f LIBC:open.obj + 0001:00006e0d __setmbcp 00407e0d f LIBC:mbctype.obj + 0001:000071d1 __getmbcp 004081d1 f LIBC:mbctype.obj + 0001:000071e1 ___initmbctable 004081e1 f LIBC:mbctype.obj + 0001:00007200 _memcpy 00408200 f LIBC:memcpy.obj + 0001:00007535 ___crtMessageBoxA 00408535 f LIBC:crtmbox.obj + 0001:000075be __fptrap 004085be f LIBC:crt0fp.obj + 0001:000075c7 ___crtGetStringTypeA 004085c7 f LIBC:a_str.obj + 0001:00007710 __chsize 00408710 f LIBC:chsize.obj + 0001:00007856 ___crtLCMapStringA 00408856 f LIBC:a_map.obj + 0001:00007ab0 __chkstk 00408ab0 f LIBC:chkstk.obj + 0001:00007ab0 __alloca_probe 00408ab0 f LIBC:chkstk.obj + 0001:00007adf __setmode 00408adf f LIBC:setmode.obj + 0001:00007b60 _HeapFree@12 00408b60 f kernel32:KERNEL32.dll + 0001:00007b66 _HeapAlloc@12 00408b66 f kernel32:KERNEL32.dll + 0001:00007b6c _ExitProcess@4 00408b6c f kernel32:KERNEL32.dll + 0001:00007b72 _TerminateProcess@8 00408b72 f kernel32:KERNEL32.dll + 0001:00007b78 _GetCurrentProcess@0 00408b78 f kernel32:KERNEL32.dll + 0001:00007b7e _GetCommandLineA@0 00408b7e f kernel32:KERNEL32.dll + 0001:00007b84 _GetVersion@0 00408b84 f kernel32:KERNEL32.dll + 0001:00007b8a _HeapDestroy@4 00408b8a f kernel32:KERNEL32.dll + 0001:00007b90 _HeapCreate@12 00408b90 f kernel32:KERNEL32.dll + 0001:00007b96 _VirtualFree@12 00408b96 f kernel32:KERNEL32.dll + 0001:00007b9c _VirtualAlloc@16 00408b9c f kernel32:KERNEL32.dll + 0001:00007ba2 _HeapReAlloc@16 00408ba2 f kernel32:KERNEL32.dll + 0001:00007ba8 _IsBadWritePtr@8 00408ba8 f kernel32:KERNEL32.dll + 0001:00007bae _GetLastError@0 00408bae f kernel32:KERNEL32.dll + 0001:00007bb4 _CloseHandle@4 00408bb4 f kernel32:KERNEL32.dll + 0001:00007bba _SetHandleCount@4 00408bba f kernel32:KERNEL32.dll + 0001:00007bc0 _GetStdHandle@4 00408bc0 f kernel32:KERNEL32.dll + 0001:00007bc6 _GetFileType@4 00408bc6 f kernel32:KERNEL32.dll + 0001:00007bcc _GetStartupInfoA@4 00408bcc f kernel32:KERNEL32.dll + 0001:00007bd2 _WriteFile@20 00408bd2 f kernel32:KERNEL32.dll + 0001:00007bd8 _FlushFileBuffers@4 00408bd8 f kernel32:KERNEL32.dll + 0001:00007bde _UnhandledExceptionFilter@4 00408bde f kernel32:KERNEL32.dll + 0001:00007be4 _GetModuleFileNameA@12 00408be4 f kernel32:KERNEL32.dll + 0001:00007bea _FreeEnvironmentStringsA@4 00408bea f kernel32:KERNEL32.dll + 0001:00007bf0 _FreeEnvironmentStringsW@4 00408bf0 f kernel32:KERNEL32.dll + 0001:00007bf6 _WideCharToMultiByte@32 00408bf6 f kernel32:KERNEL32.dll + 0001:00007bfc _GetEnvironmentStrings@0 00408bfc f kernel32:KERNEL32.dll + 0001:00007c02 _GetEnvironmentStringsW@0 00408c02 f kernel32:KERNEL32.dll + 0001:00007c08 _RtlUnwind@16 00408c08 f kernel32:KERNEL32.dll + 0001:00007c0e _SetStdHandle@8 00408c0e f kernel32:KERNEL32.dll + 0001:00007c14 _ReadFile@20 00408c14 f kernel32:KERNEL32.dll + 0001:00007c1a _SetFilePointer@16 00408c1a f kernel32:KERNEL32.dll + 0001:00007c20 _MultiByteToWideChar@24 00408c20 f kernel32:KERNEL32.dll + 0001:00007c26 _CreateFileA@28 00408c26 f kernel32:KERNEL32.dll + 0001:00007c2c _GetCPInfo@8 00408c2c f kernel32:KERNEL32.dll + 0001:00007c32 _GetACP@0 00408c32 f kernel32:KERNEL32.dll + 0001:00007c38 _GetOEMCP@0 00408c38 f kernel32:KERNEL32.dll + 0001:00007c3e _GetProcAddress@8 00408c3e f kernel32:KERNEL32.dll + 0001:00007c44 _LoadLibraryA@4 00408c44 f kernel32:KERNEL32.dll + 0001:00007c4a _GetStringTypeA@20 00408c4a f kernel32:KERNEL32.dll + 0001:00007c50 _GetStringTypeW@16 00408c50 f kernel32:KERNEL32.dll + 0001:00007c56 _SetEndOfFile@4 00408c56 f kernel32:KERNEL32.dll + 0001:00007c5c _LCMapStringA@24 00408c5c f kernel32:KERNEL32.dll + 0001:00007c62 _LCMapStringW@24 00408c62 f kernel32:KERNEL32.dll + 0001:00007c68 _mkdir 00408c68 f LIBC:mkdir.obj + 0001:00007c68 __mkdir 00408c68 f LIBC:mkdir.obj + 0001:00007c94 ___dtoxmode 00408c94 f LIBC:stat.obj + 0001:00007d4c _stat 00408d4c f LIBC:stat.obj + 0001:00007d4c __stat 00408d4c f LIBC:stat.obj + 0001:0000806f __mbsicmp 0040906f f LIBC:mbsicmp.obj + 0001:000081dd __mbsrchr 004091dd f LIBC:mbsrchr.obj + 0001:0000823d ___loctotime_t 0040923d f LIBC:dtoxtime.obj + 0001:000082ff __fullpath 004092ff f LIBC:fullpath.obj + 0001:000083a2 __getdrive 004093a2 f LIBC:drive.obj + 0001:000083e5 __chdrive 004093e5 f LIBC:drive.obj + 0001:0000843c __mbctolower 0040943c f LIBC:mbtolwr.obj + 0001:000084b7 __mbspbrk 004094b7 f LIBC:mbspbrk.obj + 0001:00008540 __stricmp 00409540 f LIBC:stricmp.obj + 0001:00008540 __strcmpi 00409540 f LIBC:stricmp.obj + 0001:000085cc ___tzset 004095cc f LIBC:tzset.obj + 0001:000085e1 __tzset 004095e1 f LIBC:tzset.obj + 0001:0000883f __isindst 0040983f f LIBC:tzset.obj + 0001:00008b2b __getcwd 00409b2b f LIBC:getcwd.obj + 0001:00008b3e __getdcwd 00409b3e f LIBC:getcwd.obj + 0001:00008c0f __validdrive 00409c0f f LIBC:getcwd.obj + 0001:00008c46 __toupper 00409c46 f LIBC:toupper.obj + 0001:00008c4e _toupper 00409c4e f LIBC:toupper.obj + 0001:00008d20 _strpbrk 00409d20 f LIBC:strpbrk.obj + 0001:00008d5a __tolower 00409d5a f LIBC:tolower.obj + 0001:00008d62 _tolower 00409d62 f LIBC:tolower.obj + 0001:00008e2d _atol 00409e2d f LIBC:atox.obj + 0001:00008eb8 _atoi 00409eb8 f LIBC:atox.obj + 0001:00008ec3 __atoi64 00409ec3 f LIBC:atox.obj + 0001:00008f7d _getenv 00409f7d f LIBC:getenv.obj + 0001:00008ffa __mbsnbicoll 00409ffa f LIBC:mbsnbico.obj + 0001:00009039 ___wtomb_environ 0040a039 f LIBC:wtombenv.obj + 0001:000090a7 ___crtCompareStringA 0040a0a7 f LIBC:a_cmp.obj + 0001:0000934f ___crtsetenv 0040a34f f LIBC:setenv.obj + 0001:00009595 _realloc 0040a595 f LIBC:realloc.obj + 0001:000096b5 __mbschr 0040a6b5 f LIBC:mbschr.obj + 0001:00009728 __strdup 0040a728 f LIBC:strdup.obj + 0001:00009770 _strchr 0040a770 f LIBC:strchr.obj + 0001:00009776 ___from_strstr_to_strchr 0040a776 f LIBC:strchr.obj + 0001:0000982c _CreateDirectoryA@8 0040a82c f kernel32:KERNEL32.dll + 0001:00009832 _FindClose@4 0040a832 f kernel32:KERNEL32.dll + 0001:00009838 _FileTimeToSystemTime@8 0040a838 f kernel32:KERNEL32.dll + 0001:0000983e _FileTimeToLocalFileTime@8 0040a83e f kernel32:KERNEL32.dll + 0001:00009844 _GetDriveTypeA@4 0040a844 f kernel32:KERNEL32.dll + 0001:0000984a _FindFirstFileA@8 0040a84a f kernel32:KERNEL32.dll + 0001:00009850 _GetFullPathNameA@16 0040a850 f kernel32:KERNEL32.dll + 0001:00009856 _GetCurrentDirectoryA@8 0040a856 f kernel32:KERNEL32.dll + 0001:0000985c _SetCurrentDirectoryA@4 0040a85c f kernel32:KERNEL32.dll + 0001:00009862 _GetTimeZoneInformation@4 0040a862 f kernel32:KERNEL32.dll + 0001:00009868 _CompareStringA@24 0040a868 f kernel32:KERNEL32.dll + 0001:0000986e _CompareStringW@24 0040a86e f kernel32:KERNEL32.dll + 0001:00009874 _SetEnvironmentVariableA@8 0040a874 f kernel32:KERNEL32.dll + 0002:0000001c ??_C@_01BJG@?6?$AA@ 0040e01c LIBC:perror.obj + 0002:00000020 ??_C@_02HFBK@?3?5?$AA@ 0040e020 LIBC:perror.obj + 0002:00000034 ___lookuptable 0040e034 LIBC:output.obj + 0002:00000090 ??_C@_1O@POHA@?$AA?$CI?$AAn?$AAu?$AAl?$AAl?$AA?$CJ?$AA?$AA@ 0040e090 LIBC:output.obj + 0002:000000a0 ??_C@_06ONKE@?$CInull?$CJ?$AA@ 0040e0a0 LIBC:output.obj + 0002:000000a8 ??_C@_0BG@JPLP@Illegal?5byte?5sequence?$AA@ 0040e0a8 LIBC:syserr.obj + 0002:000000c0 ??_C@_0BE@FLBN@Directory?5not?5empty?$AA@ 0040e0c0 LIBC:syserr.obj + 0002:000000d4 ??_C@_0BJ@KAFL@Function?5not?5implemented?$AA@ 0040e0d4 LIBC:syserr.obj + 0002:000000f0 ??_C@_0BD@CEML@No?5locks?5available?$AA@ 0040e0f0 LIBC:syserr.obj + 0002:00000104 ??_C@_0BC@GADJ@Filename?5too?5long?$AA@ 0040e104 LIBC:syserr.obj + 0002:00000118 ??_C@_0BK@FNFN@Resource?5deadlock?5avoided?$AA@ 0040e118 LIBC:syserr.obj + 0002:00000134 ??_C@_0BB@EALI@Result?5too?5large?$AA@ 0040e134 LIBC:syserr.obj + 0002:00000148 ??_C@_0N@FIAN@Domain?5error?$AA@ 0040e148 LIBC:syserr.obj + 0002:00000158 ??_C@_0M@CLKF@Broken?5pipe?$AA@ 0040e158 LIBC:syserr.obj + 0002:00000164 ??_C@_0P@OFDM@Too?5many?5links?$AA@ 0040e164 LIBC:syserr.obj + 0002:00000174 ??_C@_0BG@OHDM@Read?9only?5file?5system?$AA@ 0040e174 LIBC:syserr.obj + 0002:0000018c ??_C@_0N@NGPA@Invalid?5seek?$AA@ 0040e18c LIBC:syserr.obj + 0002:0000019c ??_C@_0BI@DMFE@No?5space?5left?5on?5device?$AA@ 0040e19c LIBC:syserr.obj + 0002:000001b4 ??_C@_0P@OPNK@File?5too?5large?$AA@ 0040e1b4 LIBC:syserr.obj + 0002:000001c4 ??_C@_0CE@BADJ@Inappropriate?5I?1O?5control?5operat@ 0040e1c4 LIBC:syserr.obj + 0002:000001e8 ??_C@_0BE@COOK@Too?5many?5open?5files?$AA@ 0040e1e8 LIBC:syserr.obj + 0002:000001fc ??_C@_0BO@ELHF@Too?5many?5open?5files?5in?5system?$AA@ 0040e1fc LIBC:syserr.obj + 0002:0000021c ??_C@_0BB@IHAB@Invalid?5argument?$AA@ 0040e21c LIBC:syserr.obj + 0002:00000230 ??_C@_0P@NDNC@Is?5a?5directory?$AA@ 0040e230 LIBC:syserr.obj + 0002:00000240 ??_C@_0BA@JMMO@Not?5a?5directory?$AA@ 0040e240 LIBC:syserr.obj + 0002:00000250 ??_C@_0P@GFAI@No?5such?5device?$AA@ 0040e250 LIBC:syserr.obj + 0002:00000260 ??_C@_0O@KHHM@Improper?5link?$AA@ 0040e260 LIBC:syserr.obj + 0002:00000270 ??_C@_0M@EPHJ@File?5exists?$AA@ 0040e270 LIBC:syserr.obj + 0002:0000027c ??_C@_0BA@LPOH@Resource?5device?$AA@ 0040e27c LIBC:syserr.obj + 0002:0000028c ??_C@_0O@NOFB@Unknown?5error?$AA@ 0040e28c LIBC:syserr.obj + 0002:0000029c ??_C@_0M@MLJM@Bad?5address?$AA@ 0040e29c LIBC:syserr.obj + 0002:000002a8 ??_C@_0BC@DJON@Permission?5denied?$AA@ 0040e2a8 LIBC:syserr.obj + 0002:000002bc ??_C@_0BB@KDDC@Not?5enough?5space?$AA@ 0040e2bc LIBC:syserr.obj + 0002:000002d0 ??_C@_0CB@BBBH@Resource?5temporarily?5unavailable@ 0040e2d0 LIBC:syserr.obj + 0002:000002f4 ??_C@_0BD@ODIH@No?5child?5processes?$AA@ 0040e2f4 LIBC:syserr.obj + 0002:00000308 ??_C@_0BE@CDDH@Bad?5file?5descriptor?$AA@ 0040e308 LIBC:syserr.obj + 0002:0000031c ??_C@_0BC@BICL@Exec?5format?5error?$AA@ 0040e31c LIBC:syserr.obj + 0002:00000330 ??_C@_0BC@IGMC@Arg?5list?5too?5long?$AA@ 0040e330 LIBC:syserr.obj + 0002:00000344 ??_C@_0BK@HLB@No?5such?5device?5or?5address?$AA@ 0040e344 LIBC:syserr.obj + 0002:00000360 ??_C@_0BD@MPKK@Input?1output?5error?$AA@ 0040e360 LIBC:syserr.obj + 0002:00000374 ??_C@_0BK@ODCM@Interrupted?5function?5call?$AA@ 0040e374 LIBC:syserr.obj + 0002:00000390 ??_C@_0BA@BPKN@No?5such?5process?$AA@ 0040e390 LIBC:syserr.obj + 0002:000003a0 ??_C@_0BK@IEMO@No?5such?5file?5or?5directory?$AA@ 0040e3a0 LIBC:syserr.obj + 0002:000003bc ??_C@_0BI@IIAE@Operation?5not?5permitted?$AA@ 0040e3bc LIBC:syserr.obj + 0002:000003d4 ??_C@_08KKBH@No?5error?$AA@ 0040e3d4 LIBC:syserr.obj + 0002:000003e0 ??_C@_0P@GGKG@runtime?5error?5?$AA@ 0040e3e0 LIBC:crt0msg.obj + 0002:000003f0 ??_C@_02PIMC@?$AN?6?$AA@ 0040e3f0 LIBC:crt0msg.obj + 0002:000003f4 ??_C@_0O@DELO@TLOSS?5error?$AN?6?$AA@ 0040e3f4 LIBC:crt0msg.obj + 0002:00000404 ??_C@_0N@OMLL@SING?5error?$AN?6?$AA@ 0040e404 LIBC:crt0msg.obj + 0002:00000414 ??_C@_0P@OJAK@DOMAIN?5error?$AN?6?$AA@ 0040e414 LIBC:crt0msg.obj + 0002:00000424 ??_C@_0CF@EANP@R6028?$AN?6?9?5unable?5to?5initialize?5he@ 0040e424 LIBC:crt0msg.obj + 0002:0000044c ??_C@_0DF@ECGN@R6027?$AN?6?9?5not?5enough?5space?5for?5lo@ 0040e44c LIBC:crt0msg.obj + 0002:00000484 ??_C@_0DF@FKAC@R6026?$AN?6?9?5not?5enough?5space?5for?5st@ 0040e484 LIBC:crt0msg.obj + 0002:000004bc ??_C@_0CG@DPMN@R6025?$AN?6?9?5pure?5virtual?5function?5c@ 0040e4bc LIBC:crt0msg.obj + 0002:000004e4 ??_C@_0DF@CKIP@R6024?$AN?6?9?5not?5enough?5space?5for?5_o@ 0040e4e4 LIBC:crt0msg.obj + 0002:0000051c ??_C@_0CJ@GGOE@R6019?$AN?6?9?5unable?5to?5open?5console?5@ 0040e51c LIBC:crt0msg.obj + 0002:00000548 ??_C@_0CB@LBOB@R6018?$AN?6?9?5unexpected?5heap?5error?$AN?6@ 0040e548 LIBC:crt0msg.obj + 0002:0000056c ??_C@_0CN@FPEG@R6017?$AN?6?9?5unexpected?5multithread?5@ 0040e56c LIBC:crt0msg.obj + 0002:0000059c ??_C@_0CM@OBIC@R6016?$AN?6?9?5not?5enough?5space?5for?5th@ 0040e59c LIBC:crt0msg.obj + 0002:000005c8 ??_C@_0CB@HPAL@?$AN?6abnormal?5program?5termination?$AN?6@ 0040e5c8 LIBC:crt0msg.obj + 0002:000005ec ??_C@_0CM@JOOB@R6009?$AN?6?9?5not?5enough?5space?5for?5en@ 0040e5ec LIBC:crt0msg.obj + 0002:00000618 ??_C@_0CK@OIBL@R6008?$AN?6?9?5not?5enough?5space?5for?5ar@ 0040e618 LIBC:crt0msg.obj + 0002:00000644 ??_C@_0CF@LKPB@R6002?$AN?6?9?5floating?5point?5not?5load@ 0040e644 LIBC:crt0msg.obj + 0002:0000066c ??_C@_0CF@JPDF@Microsoft?5Visual?5C?$CL?$CL?5Runtime?5Lib@ 0040e66c LIBC:crt0msg.obj + 0002:00000694 ??_C@_02JJJH@?6?6?$AA@ 0040e694 LIBC:crt0msg.obj + 0002:00000698 ??_C@_0BK@DEOK@Runtime?5Error?$CB?6?6Program?3?5?$AA@ 0040e698 LIBC:crt0msg.obj + 0002:000006b4 ??_C@_03NAME@?4?4?4?$AA@ 0040e6b4 LIBC:crt0msg.obj + 0002:000006b8 ??_C@_0BH@NNCD@?$DMprogram?5name?5unknown?$DO?$AA@ 0040e6b8 LIBC:crt0msg.obj + 0002:000006d0 ??_C@_0BD@NJFP@GetLastActivePopup?$AA@ 0040e6d0 LIBC:crtmbox.obj + 0002:000006e4 ??_C@_0BA@GILI@GetActiveWindow?$AA@ 0040e6e4 LIBC:crtmbox.obj + 0002:000006f4 ??_C@_0M@PKCK@MessageBoxA?$AA@ 0040e6f4 LIBC:crtmbox.obj + 0002:00000700 ??_C@_0L@HKL@user32?4dll?$AA@ 0040e700 LIBC:crtmbox.obj + 0002:0000070c ??_C@_01A@?$AA?$AA@ 0040e70c LIBC:a_str.obj + 0002:00000710 ??_C@_13A@?$AA?$AA?$AA?$AA@ 0040e710 LIBC:a_str.obj + 0002:00000740 ??_C@_04GGNP@?4com?$AA@ 0040e740 LIBC:stat.obj + 0002:00000748 ??_C@_04KBDN@?4bat?$AA@ 0040e748 LIBC:stat.obj + 0002:00000750 ??_C@_04LFKF@?4cmd?$AA@ 0040e750 LIBC:stat.obj + 0002:00000758 ??_C@_04NFOM@?4exe?$AA@ 0040e758 LIBC:stat.obj + 0002:00000760 ??_C@_03MNBA@?4?1?2?$AA@ 0040e760 LIBC:stat.obj + 0002:00000764 ??_C@_02DIIM@?$DP?$CK?$AA@ 0040e764 LIBC:stat.obj + 0002:00000768 ___dnames 0040e768 LIBC:timeset.obj + 0002:00000780 ___mnames 0040e780 LIBC:timeset.obj + 0002:000007a8 ??_C@_02JHIA@TZ?$AA@ 0040e7a8 LIBC:tzset.obj + 0003:00000000 ___xc_a 0040f000 LIBC:crt0init.obj + 0003:00000104 ___xc_z 0040f104 LIBC:crt0init.obj + 0003:00000208 ___xi_a 0040f208 LIBC:crt0init.obj + 0003:00000418 ___xi_z 0040f418 LIBC:crt0init.obj + 0003:0000051c ___xp_a 0040f51c LIBC:crt0init.obj + 0003:00000724 ___xp_z 0040f724 LIBC:crt0init.obj + 0003:00000828 ___xt_a 0040f828 LIBC:crt0init.obj + 0003:0000092c ___xt_z 0040f92c LIBC:crt0init.obj + 0003:00000a30 __abs_ 0040fa30 lbdata.obj + 0003:00000a34 _rtaflg 0040fa34 lbdata.obj + 0003:00000a38 _ctype 0040fa38 lbdata.obj + 0003:00000ab8 _ccase 0040fab8 lbdata.obj + 0003:00000bf4 _usetxt 0040fbf4 lbmain.obj + 0003:00000ef0 __iob 0040fef0 LIBC:_file.obj + 0003:00001170 __aexit_rtn 00410170 LIBC:crt0.obj + 0003:00001174 ___app_type 00410174 LIBC:crt0.obj + 0003:00001178 __amblksiz 00410178 LIBC:heapinit.obj + 0003:0000117c ___sbh_threshold 0041017c LIBC:sbheap.obj + 0003:00001180 ___nullstring 00410180 LIBC:output.obj + 0003:00001184 ___wnullstring 00410184 LIBC:output.obj + 0003:00001188 ___badioinfo 00410188 LIBC:ioinit.obj + 0003:0000119c __sys_errlist 0041019c LIBC:syserr.obj + 0003:0000124c __sys_nerr 0041024c LIBC:syserr.obj + 0003:00001250 __XcptActTab 00410250 LIBC:winxfltr.obj + 0003:000012c8 __First_FPE_Indx 004102c8 LIBC:winxfltr.obj + 0003:000012cc __Num_FPE 004102cc LIBC:winxfltr.obj + 0003:000012d0 __XcptActTabCount 004102d0 LIBC:winxfltr.obj + 0003:000012d4 __fpecode 004102d4 LIBC:winxfltr.obj + 0003:000012d8 __NLG_Destination 004102d8 LIBC:exsup.obj + 0003:000014e8 __cfltcvt_tab 004104e8 LIBC:cmiscdat.obj + 0003:00001500 __pctype 00410500 LIBC:ctype.obj + 0003:00001504 __pwctype 00410504 LIBC:ctype.obj + 0003:00001508 __ctype 00410508 LIBC:ctype.obj + 0003:00001710 ___mb_cur_max 00410710 LIBC:nlsdata1.obj + 0003:00001714 ___decimal_point 00410714 LIBC:nlsdata1.obj + 0003:00001718 ___decimal_point_length 00410718 LIBC:nlsdata1.obj + 0003:00001820 __timezone 00410820 LIBC:timeset.obj + 0003:00001824 __daylight 00410824 LIBC:timeset.obj + 0003:00001828 __dstbias 00410828 LIBC:timeset.obj + 0003:000018ac __tzname 004108ac LIBC:timeset.obj + 0003:000018d4 __lpdays 004108d4 LIBC:days.obj + 0003:00001908 __days 00410908 LIBC:days.obj + 0003:00001c58 _rtadr0 00410c58 lbdata.obj + 0003:00001c5c _rtadr1 00410c5c lbdata.obj + 0003:00001c60 _rtadr2 00410c60 lbdata.obj + 0003:00001c64 _obj_flag 00410c64 lbdata.obj + 0003:00001c68 _uflag 00410c68 + 0003:00001c84 _hilo 00410c84 + 0003:00001c88 __cflush 00410c88 LIBC:_file.obj + 0003:00001c8c _errno 00410c8c LIBC:crt0dat.obj + 0003:00001c90 __doserrno 00410c90 LIBC:crt0dat.obj + 0003:00001c94 __umaskval 00410c94 LIBC:crt0dat.obj + 0003:00001c98 __osver 00410c98 LIBC:crt0dat.obj + 0003:00001c9c __winver 00410c9c LIBC:crt0dat.obj + 0003:00001ca0 __winmajor 00410ca0 LIBC:crt0dat.obj + 0003:00001ca4 __winminor 00410ca4 LIBC:crt0dat.obj + 0003:00001ca8 ___argc 00410ca8 LIBC:crt0dat.obj + 0003:00001cac ___argv 00410cac LIBC:crt0dat.obj + 0003:00001cb0 ___wargv 00410cb0 LIBC:crt0dat.obj + 0003:00001cb4 __environ 00410cb4 LIBC:crt0dat.obj + 0003:00001cb8 ___initenv 00410cb8 LIBC:crt0dat.obj + 0003:00001cbc __wenviron 00410cbc LIBC:crt0dat.obj + 0003:00001cc0 ___winitenv 00410cc0 LIBC:crt0dat.obj + 0003:00001cc4 __pgmptr 00410cc4 LIBC:crt0dat.obj + 0003:00001cc8 __wpgmptr 00410cc8 LIBC:crt0dat.obj + 0003:00001ccc __exitflag 00410ccc LIBC:crt0dat.obj + 0003:00001cd0 __C_Termination_Done 00410cd0 LIBC:crt0dat.obj + 0003:00001cd4 __C_Exit_Done 00410cd4 LIBC:crt0dat.obj + 0003:00001cd8 __aenvptr 00410cd8 LIBC:crt0.obj + 0003:00001cdc __wenvptr 00410cdc LIBC:crt0.obj + 0003:00001ce0 ___error_mode 00410ce0 LIBC:crt0.obj + 0003:00001ce4 __newmode 00410ce4 LIBC:_newmode.obj + 0003:00001ce8 ?_pnhHeap@@3P6AHI@ZA 00410ce8 LIBC:handler.obj + 0003:00001cec __stdbuf 00410cec LIBC:_sftbuf.obj + 0003:00001cf4 __pxcptinfoptrs 00410cf4 LIBC:winxfltr.obj + 0003:00001e00 __adbgmsg 00410e00 LIBC:crt0msg.obj + 0003:00001e04 __commode 00410e04 LIBC:ncommode.obj + 0003:00001e18 ___lc_handle 00410e18 LIBC:nlsdata2.obj + 0003:00001e30 ___lc_codepage 00410e30 LIBC:nlsdata2.obj + 0003:00001e34 ___lc_collate_cp 00410e34 LIBC:nlsdata2.obj + 0003:00001e3c __fmode 00410e3c LIBC:txtmode.obj + 0003:00001e44 _rtcnt 00410e44 + 0003:00001f08 _afp 00410f08 + 0003:00001f0c _lbfhead 00410f0c + 0003:00001f10 _cfp 00410f10 + 0003:00001f14 _bsp 00410f14 + 0003:00001f18 _axp 00410f18 + 0003:00001f1c _lbnhead 00410f1c + 0003:00001f20 _rtbuf 00410f20 + 0003:00001f70 _gcntr 00410f70 + 0003:00001f74 _filep 00410f74 + 0003:00001f78 _gsp 00410f78 + 0003:00001f7c _globlp 00410f7c + 0003:00001f80 _afn 00410f80 + 0003:00001fd0 _lfp 00410fd0 + 0003:00001fd4 _mfp 00410fd4 + 0003:00001fd8 _a_mask 00410fd8 + 0003:00001fdc _lberr 00410fdc + 0003:00001fe0 _rtflg 00410fe0 + 0003:00002020 _symhash 00411020 + 0003:00002120 _line 00411120 + 0003:00002124 _lop 00411124 + 0003:00002128 _ofp 00411128 + 0003:0000212c _headp 0041112c + 0003:00002130 _zflag 00411130 + 0003:00002134 _rfp 00411134 + 0003:00002138 _oflag 00411138 + 0003:0000213c _sfp 0041113c + 0003:00002140 _rtval 00411140 + 0003:00002180 _sdp 00411180 + 0003:0000218c _areap 0041118c + 0003:00002190 _tfp 00411190 + 0003:00002194 _page 00411194 + 0003:00002198 _pass 00411198 + 0003:0000219c _ap 0041119c + 0003:000021a0 _outfp 004111a0 + 0003:000021a4 _wflag 004111a4 + 0003:000021a8 _hp 004111a8 + 0003:000021ac _ip 004111ac + 0003:000021b0 _rp 004111b0 + 0003:000021b4 _a_bytes 004111b4 + 0003:000021b8 _gline 004111b8 + 0003:000021bc _afptmp 004111bc + 0003:000021c0 _ib 004111c0 + 0003:00002288 _pflag 00411288 + 0003:0000228c _s_mask 0041128c + 0003:00002290 _basep 00411290 + 0003:00002294 _lbphead 00411294 + 0003:00002298 _xflag 00411298 + 0003:0000229c _startp 0041129c + 0003:000022a0 _afntmp 004112a0 + 0003:000022f0 _radix 004112f0 + 0003:000022f4 _mflag 004112f4 + 0003:000022f8 _linkp 004112f8 + 0003:000022fc _objflg 004112fc + 0003:00002300 _rb 00411300 + 0003:000023c8 _v_mask 004113c8 + 0003:000023e0 _rerr 004113e0 + 0003:00002584 ___mbcodepage 00411584 + 0003:00002600 ___mbulinfo 00411600 + 0003:0000260c ___ismbcodepage 0041160c + 0003:00002620 __mbcasemap 00411620 + 0003:00002720 __mbctype 00411720 + 0003:00002824 ___mblcid 00411824 + 0003:00002840 ___pioinfo 00411840 + 0003:0000297c __nhandle 0041197c + 0003:00002980 ___sbh_sizeHeaderList 00411980 + 0003:00002990 ___sbh_indGroupDefer 00411990 + 0003:00002994 ___sbh_pHeaderScan 00411994 + 0003:00002998 ___sbh_pHeaderDefer 00411998 + 0003:0000299c ___sbh_cntHeaderList 0041199c + 0003:000029a0 ___sbh_pHeaderList 004119a0 + 0003:000029a4 __crtheap 004119a4 + 0003:000029b0 __acmdln 004119b0 + 0003:000029bc ___env_initialized 004119bc + 0003:000029cc ___mbctype_initialized 004119cc + 0003:000029d0 ___onexitend 004119d0 + 0003:000029d4 ___onexitbegin 004119d4 + 0003:000029d8 __FPinit 004119d8 + 0003:000029dc ___piob 004119dc + 0003:00002d20 __bufin 00411d20 + 0003:00003d20 __nstream 00412d20 + 0004:00000000 __IMPORT_DESCRIPTOR_KERNEL32 00413000 kernel32:KERNEL32.dll + 0004:00000014 __NULL_IMPORT_DESCRIPTOR 00413014 kernel32:KERNEL32.dll + 0004:00000164 __imp__HeapFree@12 00413164 kernel32:KERNEL32.dll + 0004:00000168 __imp__HeapAlloc@12 00413168 kernel32:KERNEL32.dll + 0004:0000016c __imp__ExitProcess@4 0041316c kernel32:KERNEL32.dll + 0004:00000170 __imp__TerminateProcess@8 00413170 kernel32:KERNEL32.dll + 0004:00000174 __imp__GetCurrentProcess@0 00413174 kernel32:KERNEL32.dll + 0004:00000178 __imp__GetCommandLineA@0 00413178 kernel32:KERNEL32.dll + 0004:0000017c __imp__GetVersion@0 0041317c kernel32:KERNEL32.dll + 0004:00000180 __imp__HeapDestroy@4 00413180 kernel32:KERNEL32.dll + 0004:00000184 __imp__HeapCreate@12 00413184 kernel32:KERNEL32.dll + 0004:00000188 __imp__VirtualFree@12 00413188 kernel32:KERNEL32.dll + 0004:0000018c __imp__VirtualAlloc@16 0041318c kernel32:KERNEL32.dll + 0004:00000190 __imp__HeapReAlloc@16 00413190 kernel32:KERNEL32.dll + 0004:00000194 __imp__IsBadWritePtr@8 00413194 kernel32:KERNEL32.dll + 0004:00000198 __imp__GetLastError@0 00413198 kernel32:KERNEL32.dll + 0004:0000019c __imp__CloseHandle@4 0041319c kernel32:KERNEL32.dll + 0004:000001a0 __imp__SetHandleCount@4 004131a0 kernel32:KERNEL32.dll + 0004:000001a4 __imp__GetStdHandle@4 004131a4 kernel32:KERNEL32.dll + 0004:000001a8 __imp__GetFileType@4 004131a8 kernel32:KERNEL32.dll + 0004:000001ac __imp__GetStartupInfoA@4 004131ac kernel32:KERNEL32.dll + 0004:000001b0 __imp__WriteFile@20 004131b0 kernel32:KERNEL32.dll + 0004:000001b4 __imp__FlushFileBuffers@4 004131b4 kernel32:KERNEL32.dll + 0004:000001b8 __imp__UnhandledExceptionFilter@4 004131b8 kernel32:KERNEL32.dll + 0004:000001bc __imp__GetModuleFileNameA@12 004131bc kernel32:KERNEL32.dll + 0004:000001c0 __imp__FreeEnvironmentStringsA@4 004131c0 kernel32:KERNEL32.dll + 0004:000001c4 __imp__FreeEnvironmentStringsW@4 004131c4 kernel32:KERNEL32.dll + 0004:000001c8 __imp__WideCharToMultiByte@32 004131c8 kernel32:KERNEL32.dll + 0004:000001cc __imp__GetEnvironmentStrings@0 004131cc kernel32:KERNEL32.dll + 0004:000001d0 __imp__GetEnvironmentStringsW@0 004131d0 kernel32:KERNEL32.dll + 0004:000001d4 __imp__RtlUnwind@16 004131d4 kernel32:KERNEL32.dll + 0004:000001d8 __imp__SetStdHandle@8 004131d8 kernel32:KERNEL32.dll + 0004:000001dc __imp__ReadFile@20 004131dc kernel32:KERNEL32.dll + 0004:000001e0 __imp__SetFilePointer@16 004131e0 kernel32:KERNEL32.dll + 0004:000001e4 __imp__MultiByteToWideChar@24 004131e4 kernel32:KERNEL32.dll + 0004:000001e8 __imp__CreateFileA@28 004131e8 kernel32:KERNEL32.dll + 0004:000001ec __imp__GetCPInfo@8 004131ec kernel32:KERNEL32.dll + 0004:000001f0 __imp__GetACP@0 004131f0 kernel32:KERNEL32.dll + 0004:000001f4 __imp__GetOEMCP@0 004131f4 kernel32:KERNEL32.dll + 0004:000001f8 __imp__GetProcAddress@8 004131f8 kernel32:KERNEL32.dll + 0004:000001fc __imp__LoadLibraryA@4 004131fc kernel32:KERNEL32.dll + 0004:00000200 __imp__GetStringTypeA@20 00413200 kernel32:KERNEL32.dll + 0004:00000204 __imp__GetStringTypeW@16 00413204 kernel32:KERNEL32.dll + 0004:00000208 __imp__SetEndOfFile@4 00413208 kernel32:KERNEL32.dll + 0004:0000020c __imp__LCMapStringA@24 0041320c kernel32:KERNEL32.dll + 0004:00000210 __imp__LCMapStringW@24 00413210 kernel32:KERNEL32.dll + 0004:00000214 __imp__CreateDirectoryA@8 00413214 kernel32:KERNEL32.dll + 0004:00000218 __imp__FindClose@4 00413218 kernel32:KERNEL32.dll + 0004:0000021c __imp__FileTimeToSystemTime@8 0041321c kernel32:KERNEL32.dll + 0004:00000220 __imp__FileTimeToLocalFileTime@8 00413220 kernel32:KERNEL32.dll + 0004:00000224 __imp__GetDriveTypeA@4 00413224 kernel32:KERNEL32.dll + 0004:00000228 __imp__FindFirstFileA@8 00413228 kernel32:KERNEL32.dll + 0004:0000022c __imp__GetFullPathNameA@16 0041322c kernel32:KERNEL32.dll + 0004:00000230 __imp__GetCurrentDirectoryA@8 00413230 kernel32:KERNEL32.dll + 0004:00000234 __imp__SetCurrentDirectoryA@4 00413234 kernel32:KERNEL32.dll + 0004:00000238 __imp__GetTimeZoneInformation@4 00413238 kernel32:KERNEL32.dll + 0004:0000023c __imp__CompareStringA@24 0041323c kernel32:KERNEL32.dll + 0004:00000240 __imp__CompareStringW@24 00413240 kernel32:KERNEL32.dll + 0004:00000244 __imp__SetEnvironmentVariableA@8 00413244 kernel32:KERNEL32.dll + 0004:00000248 \177KERNEL32_NULL_THUNK_DATA 00413248 kernel32:KERNEL32.dll + + entry point at 0001:00002477 + diff --git a/src/mkutil/lib-z80/n.bat b/src/mkutil/lib-z80/n.bat new file mode 100644 index 00000000..8896bbdd --- /dev/null +++ b/src/mkutil/lib-z80/n.bat @@ -0,0 +1,18 @@ +cl -Zi -I. -DWIN32 -DINDEXLIB -c lbdata.c +@if errorlevel 1 goto failure +cl -Zi -I. -DWIN32 -DINDEXLIB -c lblex.c +@if errorlevel 1 goto failure +cl -Zi -I. -DWIN32 -DINDEXLIB -c lbmain.c +@if errorlevel 1 goto failure +cl -Zi -I. -DWIN32 -DINDEXLIB -c lbsym.c +@if errorlevel 1 goto failure +link @lib-z80.lnk +@if errorlevel 1 goto failure +copy lib-z80.exe ..\..\bin + +@echo SUCCESS +@goto done +:failure +@echo FAILURE +:done + diff --git a/src/mkutil/lib-z80/out/a.lib b/src/mkutil/lib-z80/out/a.lib new file mode 100644 index 00000000..7fa080cf --- /dev/null +++ b/src/mkutil/lib-z80/out/a.lib @@ -0,0 +1,6 @@ +a_lib/a.rel + .__.ABS. + __fopen +a_lib/b.rel + .__.ABS. + fwrite diff --git a/src/mkutil/lib-z80/out/a_lib/a.rel b/src/mkutil/lib-z80/out/a_lib/a.rel new file mode 100644 index 00000000..2dd3a2b3 --- /dev/null +++ b/src/mkutil/lib-z80/out/a_lib/a.rel @@ -0,0 +1,255 @@ +XL4 +H 2 areas E global symbols +M _fopen +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S isatty Ref00000000 +S free Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S calloc Ref00000000 +S __IO_list Ref00000000 +S open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S fclose Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2B9 flags 0 +S __fopen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FB AF DD 77 FC DD 77 FD AF +R 00 00 01 00 +T 14 00 00 00 DD 77 FE DD 77 FF DD 7E 0A DD B6 +R 00 00 01 00 +T 1F 00 00 00 0B 28 35 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T 2D 00 00 00 E6 0F 5F 23 7E E6 00 57 21 02 00 +R 00 00 01 00 +T 38 00 00 00 39 7E B3 77 23 7E B2 77 21 0C 00 +R 00 00 01 00 +T 43 00 00 00 09 7E E6 F3 77 23 7E E6 FF 77 59 +R 00 00 01 00 +T 4E 00 00 00 50 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 54 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 6E 0C DD 66 0D AF B6 28 70 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 6E 0C DD 66 0D 23 DD 75 0C DD +R 00 00 01 00 +T 6C 00 00 00 74 0D 2B 5E CD 00 00 00 00 04 00 +R 00 00 01 00 02 09 01 00 +T 75 00 00 00 2B 61 72 77 CF 00 00 00 +R 00 00 01 00 00 08 01 00 +T 7B 00 00 00 92 00 00 00 83 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7F 00 00 00 A9 00 00 00 C0 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 21 02 00 39 7E F6 10 77 23 7E F6 +R 00 00 01 00 +T 8E 00 00 00 00 77 18 3D +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T 9D 00 00 00 00 77 DD 36 FA 00 DD 36 FB 03 18 +R 00 00 01 00 +T A8 00 00 00 26 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T B4 00 00 00 00 77 DD 36 FA 00 DD 36 FB 21 18 +R 00 00 01 00 +T BF 00 00 00 0F +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 21 02 00 39 7E F6 30 77 23 7E F6 +R 00 00 01 00 +T CB 00 00 00 00 77 18 00 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 18 86 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 7E FC E6 30 4F DD 7E FD E6 00 +R 00 00 01 00 +T DC 00 00 00 47 79 B0 20 06 +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 3E 10 A9 B0 20 02 18 24 +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 3E 20 A9 B0 20 0F 21 00 00 39 7E +R 00 00 01 00 +T FA 00 00 00 F6 01 77 23 7E F6 00 77 18 0F +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 21 00 00 39 7E F6 02 77 23 7E F6 +R 00 00 01 00 +T 0F 01 00 00 00 77 18 00 +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 7E 0A DD B6 0B 20 1E 01 18 00 +R 00 00 01 00 +T 1E 01 00 00 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 24 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 04 00 +T 2B 01 00 00 FE DD 74 FF 7D B4 20 06 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 7E 02 DD B6 03 28 23 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 21 B6 01 E5 DD 6E FA DD 66 FB E5 +R 00 00 01 00 +T 4C 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 54 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 59 01 00 00 00 00 00 00 F1 F1 F1 DD 75 04 DD +R 00 00 01 00 02 04 04 00 +T 62 01 00 00 74 05 +R 00 00 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 DD CB 05 7E 28 2E +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 2A 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 05 00 +T 73 01 00 00 DD 7E FE DD B6 FF 28 0E +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 83 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 04 00 +T 89 01 00 00 +R 00 00 01 00 +T 89 01 00 00 DD 6E FA DD 66 FB 22 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 92 01 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 DD 7E 0A DD B6 0B C2 6A 02 00 00 +R 00 00 01 00 00 0B 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 DD 6E FE DD 66 FF DD 75 0A DD 74 +R 00 00 01 00 +T AC 01 00 00 0B 01 16 00 09 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T B5 01 00 00 71 23 70 DD 6E 0A DD 66 0B 22 +R 00 00 01 00 +T BF 01 00 00 00 00 00 00 21 0C 00 DD 4E 0A DD +R 00 00 01 00 02 04 08 00 +T C8 01 00 00 46 0B 09 36 08 23 36 00 DD 5E 04 +R 00 00 01 00 +T D3 01 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T D9 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 02 00 02 09 04 00 +T E0 01 00 00 28 13 +R 00 00 01 00 +T E2 01 00 00 +R 00 00 01 00 +T E2 01 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T ED 01 00 00 F6 01 77 23 7E F6 00 77 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 21 06 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 00 02 00 00 01 00 01 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 08 02 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 07 00 02 0A 04 00 +T 0F 02 00 00 44 E1 71 23 70 79 B0 20 29 +R 00 00 01 00 +T 18 02 00 00 +R 00 00 01 00 +T 18 02 00 00 21 06 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 23 02 00 00 21 0E 00 09 EB E1 73 23 72 21 +R 00 00 01 00 +T 2D 02 00 00 08 00 09 E5 21 0E 00 09 01 08 00 +R 00 00 01 00 +T 38 02 00 00 09 4D 44 E1 71 23 70 18 29 +R 00 00 01 00 +T 41 02 00 00 +R 00 00 01 00 +T 41 02 00 00 21 08 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 4C 02 00 00 21 06 00 09 56 23 66 6A 3E 01 84 +R 00 00 01 00 +T 57 02 00 00 67 EB E1 73 23 72 21 0C 00 09 7E +R 00 00 01 00 +T 62 02 00 00 F6 04 77 23 7E F6 00 77 +R 00 00 01 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 DD 6E 0A DD 66 0B 23 23 E5 21 +R 00 00 01 00 +T 74 02 00 00 04 00 DD 4E 0A DD 46 0B 09 E5 21 +R 00 00 01 00 +T 7F 02 00 00 06 00 09 5E 23 56 E1 73 23 72 E1 +R 00 00 01 00 +T 8A 02 00 00 73 23 72 69 60 73 23 72 21 0C 00 +R 00 00 01 00 +T 95 02 00 00 DD 4E 0A DD 46 0B 09 7E DD B6 FC +R 00 00 01 00 +T A0 02 00 00 77 23 7E DD B6 FD 77 21 0A 00 09 +R 00 00 01 00 +T AB 02 00 00 DD 5E 04 DD 56 05 73 23 72 69 60 +R 00 00 01 00 +T B6 02 00 00 +R 00 00 01 00 +T B6 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/mkutil/lib-z80/out/a_lib/b.rel b/src/mkutil/lib-z80/out/a_lib/b.rel new file mode 100644 index 00000000..5ae7d8fb --- /dev/null +++ b/src/mkutil/lib-z80/out/a_lib/b.rel @@ -0,0 +1,199 @@ +XL4 +H 2 areas E global symbols +M _fwrite +S fflush Ref00000000 +S _write Ref00000000 +S memcpy Ref00000000 +S ?S_MUL_L02 Ref00000000 +S __stdio_init_vars Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21C flags 0 +S fwrite Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 3E +R 00 00 01 00 02 05 08 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 0B 00 00 00 00 00 00 00 DD 7E 02 DD B6 03 28 +R 00 00 01 00 02 04 06 00 +T 14 00 00 00 18 DD 7E 04 DD B6 05 28 10 DD 7E +R 00 00 01 00 +T 1F 00 00 00 0A DD B6 0B 28 08 DD 7E 0C DD B6 +R 00 00 01 00 +T 2A 00 00 00 0D 20 06 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 46 +R 00 00 01 00 +T 3E 00 00 00 23 66 68 DD 75 FA DD 74 FB 7D E6 +R 00 00 01 00 +T 49 00 00 00 40 28 18 DD 5E 0C DD 56 0D 3E +R 00 00 01 00 +T 53 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 58 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 06 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 7E FA E6 20 6F DD 7E FB E6 03 +R 00 00 01 00 +T 6F 00 00 00 67 3E 20 AD B4 28 06 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 4E 0A DD 46 0B DD 5E 04 DD 56 +R 00 00 01 00 +T 87 00 00 00 05 CD 00 00 00 00 DD 73 FC DD 72 +R 00 00 01 00 02 06 03 00 +T 90 00 00 00 FD DD 6E 0C DD 66 0D 4E 23 46 21 +R 00 00 01 00 +T 9B 00 00 00 08 00 DD 5E 0C DD 56 0D 19 56 23 +R 00 00 01 00 +T A6 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T B1 00 00 00 DD 4E FC DD 46 FD A7 ED 42 30 18 +R 00 00 01 00 +T BC 00 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T C4 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 00 00 02 0A 06 00 +T CB 00 00 00 B4 28 06 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 DD 6E 0C DD 66 0D 4E 23 46 21 +R 00 00 01 00 +T DE 00 00 00 08 00 DD 5E 0C DD 56 0D 19 56 23 +R 00 00 01 00 +T E9 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T F4 00 00 00 DD 4E FC DD 46 FD A7 ED 42 38 61 +R 00 00 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 0A 01 00 00 F6 80 77 23 7E F6 00 77 DD 6E FC +R 00 00 01 00 +T 15 01 00 00 DD 66 FD E5 DD 4E 02 DD 46 03 DD +R 00 00 01 00 +T 20 01 00 00 6E 0C DD 66 0D 5E 23 56 3E +R 00 00 01 00 +T 29 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 2E 01 00 00 00 00 00 00 F1 DD 6E 0C DD 66 0D +R 00 00 01 00 02 04 06 00 +T 37 01 00 00 7E DD 86 FC 77 23 7E DD 8E FD 77 +R 00 00 01 00 +T 42 01 00 00 DD 7E FA E6 03 28 0E +R 00 00 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 51 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 02 0A 06 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 DD 6E 0A DD 66 0B C3 19 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 6B 01 00 00 FF +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 6E FC DD 66 FD E5 DD 4E 02 DD +R 00 00 01 00 +T 77 01 00 00 46 03 21 0A 00 DD 5E 0C DD 56 0D +R 00 00 01 00 +T 82 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 89 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 01 00 02 09 06 00 +T 90 01 00 00 75 F8 DD 74 F9 4D 44 21 00 00 CD +R 00 00 01 00 +T 9B 01 00 00 00 00 00 00 30 22 +R 00 00 01 00 02 04 09 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 DD 6E F8 DD 66 F9 DD 4E 02 DD 46 +R 00 00 01 00 +T AA 01 00 00 03 09 DD 75 02 DD 74 03 21 04 00 +R 00 00 01 00 +T B5 01 00 00 39 7E DD 96 F8 77 23 7E DD 9E F9 +R 00 00 01 00 +T C0 01 00 00 77 +R 00 00 01 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 DD 4E F8 DD 46 F9 21 00 00 CD +R 00 00 01 00 +T CB 01 00 00 00 00 00 00 38 9D DD 7E F8 DD A6 +R 00 00 01 00 02 04 09 00 +T D4 01 00 00 F9 3C 20 09 2A 00 00 00 00 3E 04 +R 00 00 01 00 02 09 07 00 +T DD 01 00 00 AD B4 28 8B +R 00 00 01 00 +T E1 01 00 00 +R 00 00 01 00 +T E1 01 00 00 DD CB F9 7E 28 13 +R 00 00 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T F2 01 00 00 F6 00 77 23 7E F6 02 77 +R 00 00 01 00 +T FA 01 00 00 +R 00 00 01 00 +T FA 01 00 00 21 06 00 39 7E DD 96 FC 77 23 7E +R 00 00 01 00 +T 05 02 00 00 DD 9E FD 77 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T 10 02 00 00 5E FE DD 56 FF CD 00 00 00 00 EB +R 00 00 01 00 02 0A 0A 00 +T 19 02 00 00 +R 00 00 01 00 +T 19 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/mkutil/lib-z80/out/a_lib/c.rel b/src/mkutil/lib-z80/out/a_lib/c.rel new file mode 100644 index 00000000..e69de29b diff --git a/src/mkutil/lib-z80/rel/a.rel b/src/mkutil/lib-z80/rel/a.rel new file mode 100644 index 00000000..2dd3a2b3 --- /dev/null +++ b/src/mkutil/lib-z80/rel/a.rel @@ -0,0 +1,255 @@ +XL4 +H 2 areas E global symbols +M _fopen +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S isatty Ref00000000 +S free Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S calloc Ref00000000 +S __IO_list Ref00000000 +S open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S fclose Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2B9 flags 0 +S __fopen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FB AF DD 77 FC DD 77 FD AF +R 00 00 01 00 +T 14 00 00 00 DD 77 FE DD 77 FF DD 7E 0A DD B6 +R 00 00 01 00 +T 1F 00 00 00 0B 28 35 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T 2D 00 00 00 E6 0F 5F 23 7E E6 00 57 21 02 00 +R 00 00 01 00 +T 38 00 00 00 39 7E B3 77 23 7E B2 77 21 0C 00 +R 00 00 01 00 +T 43 00 00 00 09 7E E6 F3 77 23 7E E6 FF 77 59 +R 00 00 01 00 +T 4E 00 00 00 50 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 54 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 6E 0C DD 66 0D AF B6 28 70 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 6E 0C DD 66 0D 23 DD 75 0C DD +R 00 00 01 00 +T 6C 00 00 00 74 0D 2B 5E CD 00 00 00 00 04 00 +R 00 00 01 00 02 09 01 00 +T 75 00 00 00 2B 61 72 77 CF 00 00 00 +R 00 00 01 00 00 08 01 00 +T 7B 00 00 00 92 00 00 00 83 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7F 00 00 00 A9 00 00 00 C0 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 21 02 00 39 7E F6 10 77 23 7E F6 +R 00 00 01 00 +T 8E 00 00 00 00 77 18 3D +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T 9D 00 00 00 00 77 DD 36 FA 00 DD 36 FB 03 18 +R 00 00 01 00 +T A8 00 00 00 26 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T B4 00 00 00 00 77 DD 36 FA 00 DD 36 FB 21 18 +R 00 00 01 00 +T BF 00 00 00 0F +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 21 02 00 39 7E F6 30 77 23 7E F6 +R 00 00 01 00 +T CB 00 00 00 00 77 18 00 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 18 86 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 7E FC E6 30 4F DD 7E FD E6 00 +R 00 00 01 00 +T DC 00 00 00 47 79 B0 20 06 +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 3E 10 A9 B0 20 02 18 24 +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 3E 20 A9 B0 20 0F 21 00 00 39 7E +R 00 00 01 00 +T FA 00 00 00 F6 01 77 23 7E F6 00 77 18 0F +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 21 00 00 39 7E F6 02 77 23 7E F6 +R 00 00 01 00 +T 0F 01 00 00 00 77 18 00 +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 7E 0A DD B6 0B 20 1E 01 18 00 +R 00 00 01 00 +T 1E 01 00 00 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 24 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 04 00 +T 2B 01 00 00 FE DD 74 FF 7D B4 20 06 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 7E 02 DD B6 03 28 23 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 21 B6 01 E5 DD 6E FA DD 66 FB E5 +R 00 00 01 00 +T 4C 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 54 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 59 01 00 00 00 00 00 00 F1 F1 F1 DD 75 04 DD +R 00 00 01 00 02 04 04 00 +T 62 01 00 00 74 05 +R 00 00 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 DD CB 05 7E 28 2E +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 2A 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 05 00 +T 73 01 00 00 DD 7E FE DD B6 FF 28 0E +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 83 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 04 00 +T 89 01 00 00 +R 00 00 01 00 +T 89 01 00 00 DD 6E FA DD 66 FB 22 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 92 01 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 DD 7E 0A DD B6 0B C2 6A 02 00 00 +R 00 00 01 00 00 0B 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 DD 6E FE DD 66 FF DD 75 0A DD 74 +R 00 00 01 00 +T AC 01 00 00 0B 01 16 00 09 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T B5 01 00 00 71 23 70 DD 6E 0A DD 66 0B 22 +R 00 00 01 00 +T BF 01 00 00 00 00 00 00 21 0C 00 DD 4E 0A DD +R 00 00 01 00 02 04 08 00 +T C8 01 00 00 46 0B 09 36 08 23 36 00 DD 5E 04 +R 00 00 01 00 +T D3 01 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T D9 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 02 00 02 09 04 00 +T E0 01 00 00 28 13 +R 00 00 01 00 +T E2 01 00 00 +R 00 00 01 00 +T E2 01 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T ED 01 00 00 F6 01 77 23 7E F6 00 77 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 21 06 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 00 02 00 00 01 00 01 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 08 02 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 07 00 02 0A 04 00 +T 0F 02 00 00 44 E1 71 23 70 79 B0 20 29 +R 00 00 01 00 +T 18 02 00 00 +R 00 00 01 00 +T 18 02 00 00 21 06 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 23 02 00 00 21 0E 00 09 EB E1 73 23 72 21 +R 00 00 01 00 +T 2D 02 00 00 08 00 09 E5 21 0E 00 09 01 08 00 +R 00 00 01 00 +T 38 02 00 00 09 4D 44 E1 71 23 70 18 29 +R 00 00 01 00 +T 41 02 00 00 +R 00 00 01 00 +T 41 02 00 00 21 08 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 4C 02 00 00 21 06 00 09 56 23 66 6A 3E 01 84 +R 00 00 01 00 +T 57 02 00 00 67 EB E1 73 23 72 21 0C 00 09 7E +R 00 00 01 00 +T 62 02 00 00 F6 04 77 23 7E F6 00 77 +R 00 00 01 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 DD 6E 0A DD 66 0B 23 23 E5 21 +R 00 00 01 00 +T 74 02 00 00 04 00 DD 4E 0A DD 46 0B 09 E5 21 +R 00 00 01 00 +T 7F 02 00 00 06 00 09 5E 23 56 E1 73 23 72 E1 +R 00 00 01 00 +T 8A 02 00 00 73 23 72 69 60 73 23 72 21 0C 00 +R 00 00 01 00 +T 95 02 00 00 DD 4E 0A DD 46 0B 09 7E DD B6 FC +R 00 00 01 00 +T A0 02 00 00 77 23 7E DD B6 FD 77 21 0A 00 09 +R 00 00 01 00 +T AB 02 00 00 DD 5E 04 DD 56 05 73 23 72 69 60 +R 00 00 01 00 +T B6 02 00 00 +R 00 00 01 00 +T B6 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/mkutil/lib-z80/rel/a.rxx b/src/mkutil/lib-z80/rel/a.rxx new file mode 100644 index 00000000..2dd3a2b3 --- /dev/null +++ b/src/mkutil/lib-z80/rel/a.rxx @@ -0,0 +1,255 @@ +XL4 +H 2 areas E global symbols +M _fopen +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S isatty Ref00000000 +S free Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S calloc Ref00000000 +S __IO_list Ref00000000 +S open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S fclose Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2B9 flags 0 +S __fopen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FB AF DD 77 FC DD 77 FD AF +R 00 00 01 00 +T 14 00 00 00 DD 77 FE DD 77 FF DD 7E 0A DD B6 +R 00 00 01 00 +T 1F 00 00 00 0B 28 35 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T 2D 00 00 00 E6 0F 5F 23 7E E6 00 57 21 02 00 +R 00 00 01 00 +T 38 00 00 00 39 7E B3 77 23 7E B2 77 21 0C 00 +R 00 00 01 00 +T 43 00 00 00 09 7E E6 F3 77 23 7E E6 FF 77 59 +R 00 00 01 00 +T 4E 00 00 00 50 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 54 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 6E 0C DD 66 0D AF B6 28 70 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 6E 0C DD 66 0D 23 DD 75 0C DD +R 00 00 01 00 +T 6C 00 00 00 74 0D 2B 5E CD 00 00 00 00 04 00 +R 00 00 01 00 02 09 01 00 +T 75 00 00 00 2B 61 72 77 CF 00 00 00 +R 00 00 01 00 00 08 01 00 +T 7B 00 00 00 92 00 00 00 83 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7F 00 00 00 A9 00 00 00 C0 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 21 02 00 39 7E F6 10 77 23 7E F6 +R 00 00 01 00 +T 8E 00 00 00 00 77 18 3D +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T 9D 00 00 00 00 77 DD 36 FA 00 DD 36 FB 03 18 +R 00 00 01 00 +T A8 00 00 00 26 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T B4 00 00 00 00 77 DD 36 FA 00 DD 36 FB 21 18 +R 00 00 01 00 +T BF 00 00 00 0F +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 21 02 00 39 7E F6 30 77 23 7E F6 +R 00 00 01 00 +T CB 00 00 00 00 77 18 00 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 18 86 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 7E FC E6 30 4F DD 7E FD E6 00 +R 00 00 01 00 +T DC 00 00 00 47 79 B0 20 06 +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 3E 10 A9 B0 20 02 18 24 +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 3E 20 A9 B0 20 0F 21 00 00 39 7E +R 00 00 01 00 +T FA 00 00 00 F6 01 77 23 7E F6 00 77 18 0F +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 21 00 00 39 7E F6 02 77 23 7E F6 +R 00 00 01 00 +T 0F 01 00 00 00 77 18 00 +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 7E 0A DD B6 0B 20 1E 01 18 00 +R 00 00 01 00 +T 1E 01 00 00 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 24 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 04 00 +T 2B 01 00 00 FE DD 74 FF 7D B4 20 06 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 7E 02 DD B6 03 28 23 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 21 B6 01 E5 DD 6E FA DD 66 FB E5 +R 00 00 01 00 +T 4C 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 54 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 59 01 00 00 00 00 00 00 F1 F1 F1 DD 75 04 DD +R 00 00 01 00 02 04 04 00 +T 62 01 00 00 74 05 +R 00 00 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 DD CB 05 7E 28 2E +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 2A 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 05 00 +T 73 01 00 00 DD 7E FE DD B6 FF 28 0E +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 83 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 04 00 +T 89 01 00 00 +R 00 00 01 00 +T 89 01 00 00 DD 6E FA DD 66 FB 22 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 92 01 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 DD 7E 0A DD B6 0B C2 6A 02 00 00 +R 00 00 01 00 00 0B 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 DD 6E FE DD 66 FF DD 75 0A DD 74 +R 00 00 01 00 +T AC 01 00 00 0B 01 16 00 09 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T B5 01 00 00 71 23 70 DD 6E 0A DD 66 0B 22 +R 00 00 01 00 +T BF 01 00 00 00 00 00 00 21 0C 00 DD 4E 0A DD +R 00 00 01 00 02 04 08 00 +T C8 01 00 00 46 0B 09 36 08 23 36 00 DD 5E 04 +R 00 00 01 00 +T D3 01 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T D9 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 02 00 02 09 04 00 +T E0 01 00 00 28 13 +R 00 00 01 00 +T E2 01 00 00 +R 00 00 01 00 +T E2 01 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T ED 01 00 00 F6 01 77 23 7E F6 00 77 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 21 06 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 00 02 00 00 01 00 01 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 08 02 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 07 00 02 0A 04 00 +T 0F 02 00 00 44 E1 71 23 70 79 B0 20 29 +R 00 00 01 00 +T 18 02 00 00 +R 00 00 01 00 +T 18 02 00 00 21 06 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 23 02 00 00 21 0E 00 09 EB E1 73 23 72 21 +R 00 00 01 00 +T 2D 02 00 00 08 00 09 E5 21 0E 00 09 01 08 00 +R 00 00 01 00 +T 38 02 00 00 09 4D 44 E1 71 23 70 18 29 +R 00 00 01 00 +T 41 02 00 00 +R 00 00 01 00 +T 41 02 00 00 21 08 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 4C 02 00 00 21 06 00 09 56 23 66 6A 3E 01 84 +R 00 00 01 00 +T 57 02 00 00 67 EB E1 73 23 72 21 0C 00 09 7E +R 00 00 01 00 +T 62 02 00 00 F6 04 77 23 7E F6 00 77 +R 00 00 01 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 DD 6E 0A DD 66 0B 23 23 E5 21 +R 00 00 01 00 +T 74 02 00 00 04 00 DD 4E 0A DD 46 0B 09 E5 21 +R 00 00 01 00 +T 7F 02 00 00 06 00 09 5E 23 56 E1 73 23 72 E1 +R 00 00 01 00 +T 8A 02 00 00 73 23 72 69 60 73 23 72 21 0C 00 +R 00 00 01 00 +T 95 02 00 00 DD 4E 0A DD 46 0B 09 7E DD B6 FC +R 00 00 01 00 +T A0 02 00 00 77 23 7E DD B6 FD 77 21 0A 00 09 +R 00 00 01 00 +T AB 02 00 00 DD 5E 04 DD 56 05 73 23 72 69 60 +R 00 00 01 00 +T B6 02 00 00 +R 00 00 01 00 +T B6 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/mkutil/lib-z80/rel/b.rel b/src/mkutil/lib-z80/rel/b.rel new file mode 100644 index 00000000..5ae7d8fb --- /dev/null +++ b/src/mkutil/lib-z80/rel/b.rel @@ -0,0 +1,199 @@ +XL4 +H 2 areas E global symbols +M _fwrite +S fflush Ref00000000 +S _write Ref00000000 +S memcpy Ref00000000 +S ?S_MUL_L02 Ref00000000 +S __stdio_init_vars Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21C flags 0 +S fwrite Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 3E +R 00 00 01 00 02 05 08 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 0B 00 00 00 00 00 00 00 DD 7E 02 DD B6 03 28 +R 00 00 01 00 02 04 06 00 +T 14 00 00 00 18 DD 7E 04 DD B6 05 28 10 DD 7E +R 00 00 01 00 +T 1F 00 00 00 0A DD B6 0B 28 08 DD 7E 0C DD B6 +R 00 00 01 00 +T 2A 00 00 00 0D 20 06 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 46 +R 00 00 01 00 +T 3E 00 00 00 23 66 68 DD 75 FA DD 74 FB 7D E6 +R 00 00 01 00 +T 49 00 00 00 40 28 18 DD 5E 0C DD 56 0D 3E +R 00 00 01 00 +T 53 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 58 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 06 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 7E FA E6 20 6F DD 7E FB E6 03 +R 00 00 01 00 +T 6F 00 00 00 67 3E 20 AD B4 28 06 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 4E 0A DD 46 0B DD 5E 04 DD 56 +R 00 00 01 00 +T 87 00 00 00 05 CD 00 00 00 00 DD 73 FC DD 72 +R 00 00 01 00 02 06 03 00 +T 90 00 00 00 FD DD 6E 0C DD 66 0D 4E 23 46 21 +R 00 00 01 00 +T 9B 00 00 00 08 00 DD 5E 0C DD 56 0D 19 56 23 +R 00 00 01 00 +T A6 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T B1 00 00 00 DD 4E FC DD 46 FD A7 ED 42 30 18 +R 00 00 01 00 +T BC 00 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T C4 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 00 00 02 0A 06 00 +T CB 00 00 00 B4 28 06 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 DD 6E 0C DD 66 0D 4E 23 46 21 +R 00 00 01 00 +T DE 00 00 00 08 00 DD 5E 0C DD 56 0D 19 56 23 +R 00 00 01 00 +T E9 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T F4 00 00 00 DD 4E FC DD 46 FD A7 ED 42 38 61 +R 00 00 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 0A 01 00 00 F6 80 77 23 7E F6 00 77 DD 6E FC +R 00 00 01 00 +T 15 01 00 00 DD 66 FD E5 DD 4E 02 DD 46 03 DD +R 00 00 01 00 +T 20 01 00 00 6E 0C DD 66 0D 5E 23 56 3E +R 00 00 01 00 +T 29 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 2E 01 00 00 00 00 00 00 F1 DD 6E 0C DD 66 0D +R 00 00 01 00 02 04 06 00 +T 37 01 00 00 7E DD 86 FC 77 23 7E DD 8E FD 77 +R 00 00 01 00 +T 42 01 00 00 DD 7E FA E6 03 28 0E +R 00 00 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 51 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 02 0A 06 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 DD 6E 0A DD 66 0B C3 19 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 6B 01 00 00 FF +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 6E FC DD 66 FD E5 DD 4E 02 DD +R 00 00 01 00 +T 77 01 00 00 46 03 21 0A 00 DD 5E 0C DD 56 0D +R 00 00 01 00 +T 82 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 89 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 01 00 02 09 06 00 +T 90 01 00 00 75 F8 DD 74 F9 4D 44 21 00 00 CD +R 00 00 01 00 +T 9B 01 00 00 00 00 00 00 30 22 +R 00 00 01 00 02 04 09 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 DD 6E F8 DD 66 F9 DD 4E 02 DD 46 +R 00 00 01 00 +T AA 01 00 00 03 09 DD 75 02 DD 74 03 21 04 00 +R 00 00 01 00 +T B5 01 00 00 39 7E DD 96 F8 77 23 7E DD 9E F9 +R 00 00 01 00 +T C0 01 00 00 77 +R 00 00 01 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 DD 4E F8 DD 46 F9 21 00 00 CD +R 00 00 01 00 +T CB 01 00 00 00 00 00 00 38 9D DD 7E F8 DD A6 +R 00 00 01 00 02 04 09 00 +T D4 01 00 00 F9 3C 20 09 2A 00 00 00 00 3E 04 +R 00 00 01 00 02 09 07 00 +T DD 01 00 00 AD B4 28 8B +R 00 00 01 00 +T E1 01 00 00 +R 00 00 01 00 +T E1 01 00 00 DD CB F9 7E 28 13 +R 00 00 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T F2 01 00 00 F6 00 77 23 7E F6 02 77 +R 00 00 01 00 +T FA 01 00 00 +R 00 00 01 00 +T FA 01 00 00 21 06 00 39 7E DD 96 FC 77 23 7E +R 00 00 01 00 +T 05 02 00 00 DD 9E FD 77 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T 10 02 00 00 5E FE DD 56 FF CD 00 00 00 00 EB +R 00 00 01 00 02 0A 0A 00 +T 19 02 00 00 +R 00 00 01 00 +T 19 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/mkutil/lib-z80/rel/b.rxx b/src/mkutil/lib-z80/rel/b.rxx new file mode 100644 index 00000000..5ae7d8fb --- /dev/null +++ b/src/mkutil/lib-z80/rel/b.rxx @@ -0,0 +1,199 @@ +XL4 +H 2 areas E global symbols +M _fwrite +S fflush Ref00000000 +S _write Ref00000000 +S memcpy Ref00000000 +S ?S_MUL_L02 Ref00000000 +S __stdio_init_vars Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21C flags 0 +S fwrite Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 3E +R 00 00 01 00 02 05 08 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 0B 00 00 00 00 00 00 00 DD 7E 02 DD B6 03 28 +R 00 00 01 00 02 04 06 00 +T 14 00 00 00 18 DD 7E 04 DD B6 05 28 10 DD 7E +R 00 00 01 00 +T 1F 00 00 00 0A DD B6 0B 28 08 DD 7E 0C DD B6 +R 00 00 01 00 +T 2A 00 00 00 0D 20 06 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 46 +R 00 00 01 00 +T 3E 00 00 00 23 66 68 DD 75 FA DD 74 FB 7D E6 +R 00 00 01 00 +T 49 00 00 00 40 28 18 DD 5E 0C DD 56 0D 3E +R 00 00 01 00 +T 53 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 58 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 06 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 7E FA E6 20 6F DD 7E FB E6 03 +R 00 00 01 00 +T 6F 00 00 00 67 3E 20 AD B4 28 06 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 4E 0A DD 46 0B DD 5E 04 DD 56 +R 00 00 01 00 +T 87 00 00 00 05 CD 00 00 00 00 DD 73 FC DD 72 +R 00 00 01 00 02 06 03 00 +T 90 00 00 00 FD DD 6E 0C DD 66 0D 4E 23 46 21 +R 00 00 01 00 +T 9B 00 00 00 08 00 DD 5E 0C DD 56 0D 19 56 23 +R 00 00 01 00 +T A6 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T B1 00 00 00 DD 4E FC DD 46 FD A7 ED 42 30 18 +R 00 00 01 00 +T BC 00 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T C4 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 00 00 02 0A 06 00 +T CB 00 00 00 B4 28 06 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 DD 6E 0C DD 66 0D 4E 23 46 21 +R 00 00 01 00 +T DE 00 00 00 08 00 DD 5E 0C DD 56 0D 19 56 23 +R 00 00 01 00 +T E9 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T F4 00 00 00 DD 4E FC DD 46 FD A7 ED 42 38 61 +R 00 00 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 0A 01 00 00 F6 80 77 23 7E F6 00 77 DD 6E FC +R 00 00 01 00 +T 15 01 00 00 DD 66 FD E5 DD 4E 02 DD 46 03 DD +R 00 00 01 00 +T 20 01 00 00 6E 0C DD 66 0D 5E 23 56 3E +R 00 00 01 00 +T 29 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 2E 01 00 00 00 00 00 00 F1 DD 6E 0C DD 66 0D +R 00 00 01 00 02 04 06 00 +T 37 01 00 00 7E DD 86 FC 77 23 7E DD 8E FD 77 +R 00 00 01 00 +T 42 01 00 00 DD 7E FA E6 03 28 0E +R 00 00 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 51 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 02 0A 06 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 DD 6E 0A DD 66 0B C3 19 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 6B 01 00 00 FF +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 6E FC DD 66 FD E5 DD 4E 02 DD +R 00 00 01 00 +T 77 01 00 00 46 03 21 0A 00 DD 5E 0C DD 56 0D +R 00 00 01 00 +T 82 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 89 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 01 00 02 09 06 00 +T 90 01 00 00 75 F8 DD 74 F9 4D 44 21 00 00 CD +R 00 00 01 00 +T 9B 01 00 00 00 00 00 00 30 22 +R 00 00 01 00 02 04 09 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 DD 6E F8 DD 66 F9 DD 4E 02 DD 46 +R 00 00 01 00 +T AA 01 00 00 03 09 DD 75 02 DD 74 03 21 04 00 +R 00 00 01 00 +T B5 01 00 00 39 7E DD 96 F8 77 23 7E DD 9E F9 +R 00 00 01 00 +T C0 01 00 00 77 +R 00 00 01 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 DD 4E F8 DD 46 F9 21 00 00 CD +R 00 00 01 00 +T CB 01 00 00 00 00 00 00 38 9D DD 7E F8 DD A6 +R 00 00 01 00 02 04 09 00 +T D4 01 00 00 F9 3C 20 09 2A 00 00 00 00 3E 04 +R 00 00 01 00 02 09 07 00 +T DD 01 00 00 AD B4 28 8B +R 00 00 01 00 +T E1 01 00 00 +R 00 00 01 00 +T E1 01 00 00 DD CB F9 7E 28 13 +R 00 00 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T F2 01 00 00 F6 00 77 23 7E F6 02 77 +R 00 00 01 00 +T FA 01 00 00 +R 00 00 01 00 +T FA 01 00 00 21 06 00 39 7E DD 96 FC 77 23 7E +R 00 00 01 00 +T 05 02 00 00 DD 9E FD 77 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T 10 02 00 00 5E FE DD 56 FF CD 00 00 00 00 EB +R 00 00 01 00 02 0A 0A 00 +T 19 02 00 00 +R 00 00 01 00 +T 19 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/mkutil/lib-z80/t.bat b/src/mkutil/lib-z80/t.bat new file mode 100644 index 00000000..6e3fa5e4 --- /dev/null +++ b/src/mkutil/lib-z80/t.bat @@ -0,0 +1,3 @@ +lib-z80 a b +lib-z80 -f a +lib-z80 -f x diff --git a/src/mkutil/lib-z80/x.lbr b/src/mkutil/lib-z80/x.lbr new file mode 100644 index 00000000..dfc5ce81 --- /dev/null +++ b/src/mkutil/lib-z80/x.lbr @@ -0,0 +1,3 @@ +-o out/a +rel/a.rxx +rel/b.rxx diff --git a/src/mkutil/lib-z80/x.lib b/src/mkutil/lib-z80/x.lib new file mode 100644 index 00000000..76ad895d --- /dev/null +++ b/src/mkutil/lib-z80/x.lib @@ -0,0 +1,6 @@ +x_lib/a.rel + .__.ABS. + __fopen +x_lib/b.rel + .__.ABS. + fwrite diff --git a/src/mkutil/lib-z80/x_lib/a.rel b/src/mkutil/lib-z80/x_lib/a.rel new file mode 100644 index 00000000..2dd3a2b3 --- /dev/null +++ b/src/mkutil/lib-z80/x_lib/a.rel @@ -0,0 +1,255 @@ +XL4 +H 2 areas E global symbols +M _fopen +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S isatty Ref00000000 +S free Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S calloc Ref00000000 +S __IO_list Ref00000000 +S open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S fclose Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2B9 flags 0 +S __fopen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FB AF DD 77 FC DD 77 FD AF +R 00 00 01 00 +T 14 00 00 00 DD 77 FE DD 77 FF DD 7E 0A DD B6 +R 00 00 01 00 +T 1F 00 00 00 0B 28 35 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T 2D 00 00 00 E6 0F 5F 23 7E E6 00 57 21 02 00 +R 00 00 01 00 +T 38 00 00 00 39 7E B3 77 23 7E B2 77 21 0C 00 +R 00 00 01 00 +T 43 00 00 00 09 7E E6 F3 77 23 7E E6 FF 77 59 +R 00 00 01 00 +T 4E 00 00 00 50 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 54 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 6E 0C DD 66 0D AF B6 28 70 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 6E 0C DD 66 0D 23 DD 75 0C DD +R 00 00 01 00 +T 6C 00 00 00 74 0D 2B 5E CD 00 00 00 00 04 00 +R 00 00 01 00 02 09 01 00 +T 75 00 00 00 2B 61 72 77 CF 00 00 00 +R 00 00 01 00 00 08 01 00 +T 7B 00 00 00 92 00 00 00 83 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7F 00 00 00 A9 00 00 00 C0 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 21 02 00 39 7E F6 10 77 23 7E F6 +R 00 00 01 00 +T 8E 00 00 00 00 77 18 3D +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T 9D 00 00 00 00 77 DD 36 FA 00 DD 36 FB 03 18 +R 00 00 01 00 +T A8 00 00 00 26 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T B4 00 00 00 00 77 DD 36 FA 00 DD 36 FB 21 18 +R 00 00 01 00 +T BF 00 00 00 0F +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 21 02 00 39 7E F6 30 77 23 7E F6 +R 00 00 01 00 +T CB 00 00 00 00 77 18 00 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 18 86 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 7E FC E6 30 4F DD 7E FD E6 00 +R 00 00 01 00 +T DC 00 00 00 47 79 B0 20 06 +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 3E 10 A9 B0 20 02 18 24 +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 3E 20 A9 B0 20 0F 21 00 00 39 7E +R 00 00 01 00 +T FA 00 00 00 F6 01 77 23 7E F6 00 77 18 0F +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 21 00 00 39 7E F6 02 77 23 7E F6 +R 00 00 01 00 +T 0F 01 00 00 00 77 18 00 +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 7E 0A DD B6 0B 20 1E 01 18 00 +R 00 00 01 00 +T 1E 01 00 00 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 24 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 04 00 +T 2B 01 00 00 FE DD 74 FF 7D B4 20 06 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 7E 02 DD B6 03 28 23 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 21 B6 01 E5 DD 6E FA DD 66 FB E5 +R 00 00 01 00 +T 4C 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 54 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 59 01 00 00 00 00 00 00 F1 F1 F1 DD 75 04 DD +R 00 00 01 00 02 04 04 00 +T 62 01 00 00 74 05 +R 00 00 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 DD CB 05 7E 28 2E +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 2A 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 05 00 +T 73 01 00 00 DD 7E FE DD B6 FF 28 0E +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 83 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 04 00 +T 89 01 00 00 +R 00 00 01 00 +T 89 01 00 00 DD 6E FA DD 66 FB 22 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 92 01 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 DD 7E 0A DD B6 0B C2 6A 02 00 00 +R 00 00 01 00 00 0B 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 DD 6E FE DD 66 FF DD 75 0A DD 74 +R 00 00 01 00 +T AC 01 00 00 0B 01 16 00 09 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T B5 01 00 00 71 23 70 DD 6E 0A DD 66 0B 22 +R 00 00 01 00 +T BF 01 00 00 00 00 00 00 21 0C 00 DD 4E 0A DD +R 00 00 01 00 02 04 08 00 +T C8 01 00 00 46 0B 09 36 08 23 36 00 DD 5E 04 +R 00 00 01 00 +T D3 01 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T D9 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 02 00 02 09 04 00 +T E0 01 00 00 28 13 +R 00 00 01 00 +T E2 01 00 00 +R 00 00 01 00 +T E2 01 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T ED 01 00 00 F6 01 77 23 7E F6 00 77 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 21 06 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 00 02 00 00 01 00 01 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 08 02 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 07 00 02 0A 04 00 +T 0F 02 00 00 44 E1 71 23 70 79 B0 20 29 +R 00 00 01 00 +T 18 02 00 00 +R 00 00 01 00 +T 18 02 00 00 21 06 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 23 02 00 00 21 0E 00 09 EB E1 73 23 72 21 +R 00 00 01 00 +T 2D 02 00 00 08 00 09 E5 21 0E 00 09 01 08 00 +R 00 00 01 00 +T 38 02 00 00 09 4D 44 E1 71 23 70 18 29 +R 00 00 01 00 +T 41 02 00 00 +R 00 00 01 00 +T 41 02 00 00 21 08 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 4C 02 00 00 21 06 00 09 56 23 66 6A 3E 01 84 +R 00 00 01 00 +T 57 02 00 00 67 EB E1 73 23 72 21 0C 00 09 7E +R 00 00 01 00 +T 62 02 00 00 F6 04 77 23 7E F6 00 77 +R 00 00 01 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 DD 6E 0A DD 66 0B 23 23 E5 21 +R 00 00 01 00 +T 74 02 00 00 04 00 DD 4E 0A DD 46 0B 09 E5 21 +R 00 00 01 00 +T 7F 02 00 00 06 00 09 5E 23 56 E1 73 23 72 E1 +R 00 00 01 00 +T 8A 02 00 00 73 23 72 69 60 73 23 72 21 0C 00 +R 00 00 01 00 +T 95 02 00 00 DD 4E 0A DD 46 0B 09 7E DD B6 FC +R 00 00 01 00 +T A0 02 00 00 77 23 7E DD B6 FD 77 21 0A 00 09 +R 00 00 01 00 +T AB 02 00 00 DD 5E 04 DD 56 05 73 23 72 69 60 +R 00 00 01 00 +T B6 02 00 00 +R 00 00 01 00 +T B6 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/mkutil/lib-z80/x_lib/b.rel b/src/mkutil/lib-z80/x_lib/b.rel new file mode 100644 index 00000000..5ae7d8fb --- /dev/null +++ b/src/mkutil/lib-z80/x_lib/b.rel @@ -0,0 +1,199 @@ +XL4 +H 2 areas E global symbols +M _fwrite +S fflush Ref00000000 +S _write Ref00000000 +S memcpy Ref00000000 +S ?S_MUL_L02 Ref00000000 +S __stdio_init_vars Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21C flags 0 +S fwrite Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 3E +R 00 00 01 00 02 05 08 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 0B 00 00 00 00 00 00 00 DD 7E 02 DD B6 03 28 +R 00 00 01 00 02 04 06 00 +T 14 00 00 00 18 DD 7E 04 DD B6 05 28 10 DD 7E +R 00 00 01 00 +T 1F 00 00 00 0A DD B6 0B 28 08 DD 7E 0C DD B6 +R 00 00 01 00 +T 2A 00 00 00 0D 20 06 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 46 +R 00 00 01 00 +T 3E 00 00 00 23 66 68 DD 75 FA DD 74 FB 7D E6 +R 00 00 01 00 +T 49 00 00 00 40 28 18 DD 5E 0C DD 56 0D 3E +R 00 00 01 00 +T 53 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 58 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 06 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 7E FA E6 20 6F DD 7E FB E6 03 +R 00 00 01 00 +T 6F 00 00 00 67 3E 20 AD B4 28 06 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 4E 0A DD 46 0B DD 5E 04 DD 56 +R 00 00 01 00 +T 87 00 00 00 05 CD 00 00 00 00 DD 73 FC DD 72 +R 00 00 01 00 02 06 03 00 +T 90 00 00 00 FD DD 6E 0C DD 66 0D 4E 23 46 21 +R 00 00 01 00 +T 9B 00 00 00 08 00 DD 5E 0C DD 56 0D 19 56 23 +R 00 00 01 00 +T A6 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T B1 00 00 00 DD 4E FC DD 46 FD A7 ED 42 30 18 +R 00 00 01 00 +T BC 00 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T C4 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 00 00 02 0A 06 00 +T CB 00 00 00 B4 28 06 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 DD 6E 0C DD 66 0D 4E 23 46 21 +R 00 00 01 00 +T DE 00 00 00 08 00 DD 5E 0C DD 56 0D 19 56 23 +R 00 00 01 00 +T E9 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T F4 00 00 00 DD 4E FC DD 46 FD A7 ED 42 38 61 +R 00 00 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 0A 01 00 00 F6 80 77 23 7E F6 00 77 DD 6E FC +R 00 00 01 00 +T 15 01 00 00 DD 66 FD E5 DD 4E 02 DD 46 03 DD +R 00 00 01 00 +T 20 01 00 00 6E 0C DD 66 0D 5E 23 56 3E +R 00 00 01 00 +T 29 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 2E 01 00 00 00 00 00 00 F1 DD 6E 0C DD 66 0D +R 00 00 01 00 02 04 06 00 +T 37 01 00 00 7E DD 86 FC 77 23 7E DD 8E FD 77 +R 00 00 01 00 +T 42 01 00 00 DD 7E FA E6 03 28 0E +R 00 00 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 51 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 02 0A 06 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 DD 6E 0A DD 66 0B C3 19 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 6B 01 00 00 FF +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 6E FC DD 66 FD E5 DD 4E 02 DD +R 00 00 01 00 +T 77 01 00 00 46 03 21 0A 00 DD 5E 0C DD 56 0D +R 00 00 01 00 +T 82 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 89 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 01 00 02 09 06 00 +T 90 01 00 00 75 F8 DD 74 F9 4D 44 21 00 00 CD +R 00 00 01 00 +T 9B 01 00 00 00 00 00 00 30 22 +R 00 00 01 00 02 04 09 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 DD 6E F8 DD 66 F9 DD 4E 02 DD 46 +R 00 00 01 00 +T AA 01 00 00 03 09 DD 75 02 DD 74 03 21 04 00 +R 00 00 01 00 +T B5 01 00 00 39 7E DD 96 F8 77 23 7E DD 9E F9 +R 00 00 01 00 +T C0 01 00 00 77 +R 00 00 01 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 DD 4E F8 DD 46 F9 21 00 00 CD +R 00 00 01 00 +T CB 01 00 00 00 00 00 00 38 9D DD 7E F8 DD A6 +R 00 00 01 00 02 04 09 00 +T D4 01 00 00 F9 3C 20 09 2A 00 00 00 00 3E 04 +R 00 00 01 00 02 09 07 00 +T DD 01 00 00 AD B4 28 8B +R 00 00 01 00 +T E1 01 00 00 +R 00 00 01 00 +T E1 01 00 00 DD CB F9 7E 28 13 +R 00 00 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T F2 01 00 00 F6 00 77 23 7E F6 02 77 +R 00 00 01 00 +T FA 01 00 00 +R 00 00 01 00 +T FA 01 00 00 21 06 00 39 7E DD 96 FC 77 23 7E +R 00 00 01 00 +T 05 02 00 00 DD 9E FD 77 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T 10 02 00 00 5E FE DD 56 FF CD 00 00 00 00 EB +R 00 00 01 00 02 0A 0A 00 +T 19 02 00 00 +R 00 00 01 00 +T 19 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/mkutil/link-z80/ASLINK.H b/src/mkutil/link-z80/ASLINK.H new file mode 100644 index 00000000..44bd752f --- /dev/null +++ b/src/mkutil/link-z80/ASLINK.H @@ -0,0 +1,932 @@ +/* aslink.h */ + +/* + * (C) Copyright 1989-2002 + * All Rights Reserved + * + * Alan R. Baldwin + * 721 Berkeley St. + * Kent, Ohio 44240 + * + * With enhancements from + * John L. Hartman (JLH) + * jhartman@compuserve.com + * + * Bill McKinnon + * w_mckinnon@conknet.com + */ + +#define VERSION "V03.11" + +/*)Module aslink.h + * + * The module aslink.h contains the definitions for constants, + * structures, global variables, and LKxxxx functions + * contained in the LKxxxx.c files. + */ + +/*)BUILD + $(PROGRAM) = ASLINK + $(INCLUDE) = ASLINK.H + $(FILES) = { + LKMAIN.C + LKLEX.C + LKAREA.C + LKHEAD.C + LKSYM.C + LKEVAL.C + LKDATA.C + LKLIST.C + LKRLOC.C + LKLIBR.C + LKS19.C + LKIHX.C + } + $(STACK) = 2000 +*/ + +/* DECUS C void definition */ +/* File/extension seperator */ + +#ifdef decus +#define VOID char +#define FSEPX '.' +#endif + +/* PDOS C void definition */ +/* File/extension seperator */ + +#ifdef PDOS +#define VOID char +#define FSEPX ':' +#endif + +/* Default void definition */ +/* File/extension seperator */ + +#ifndef VOID +#define VOID void +#define FSEPX '.' +#define OTHERSYSTEM +#endif + +/* Path separator added by Nick */ +#ifdef WIN32 +#define SLASH '\\' +#else +#define SLASH '/' +#endif + +/* + * Error definitions + */ +#define ER_NONE 0 /* No error */ +#define ER_WARNING 1 /* Warning */ +#define ER_ERROR 2 /* Assembly error */ +#define ER_FATAL 3 /* Fatal error */ + +/* + * This file defines the format of the + * relocatable binary file. + */ + +#define NCPS 80 /* characters per symbol */ +#define NDATA 16 /* actual data */ +#define NINPUT 200 /* Input buffer size */ +#define NHASH 64 /* Buckets in hash table */ +#define HMASK 077 /* Hash mask */ +#define NLPP 60 /* Lines per page */ +#define NTXT 16 /* T values */ +#define NMAX 78 /* Maximum S19/IHX line length */ +#define FILSPC 80 /* File spec length */ + +/* + * The "R_" relocation constants define values used in + * generating the assembler relocation output data for + * areas, symbols, and code. + * + * + * Relocation types. + * + * 7 6 5 4 3 2 1 0 + * +-----+-----+-----+-----+-----+-----+-----+-----+ + * | MSB | PAGn| PAG0| USGN| BYT2| PCR | SYM | BYT | + * +-----+-----+-----+-----+-----+-----+-----+-----+ + */ + +#define R_WORD 0000 /* 16 bit */ +#define R_BYTE 0001 /* 8 bit */ + +#define R_AREA 0000 /* Base type */ +#define R_SYM 0002 + +#define R_NORM 0000 /* PC adjust */ +#define R_PCR 0004 + +#define R_BYT1 0000 /* Byte count for R_BYTE = 1 */ +#define R_BYTX 0010 /* Byte count for R_BYTE = X */ + +#define R_SGND 0000 /* Signed value */ +#define R_USGN 0020 /* Unsigned value */ + +#if 1 /* Nick has reassigned the R_PAG0 and R_PAG bits! */ +#define R_BYTE3 0040 /* byte after 'high' byte */ +#define R_BYTE4 0100 /* byte after 'byte3' byte */ +#else +#define R_NOPAG 0000 /* Page Mode */ +#define R_PAG0 0040 /* Page '0' */ +#define R_PAG 0100 /* Page 'nnn' */ +#endif + +#define R_LSB 0000 /* output low byte */ +#define R_MSB 0200 /* output high byte */ + +/* + * Additional "R_" functionality is required to support + * some microprocesssor architectures. The 'illegal' + * "R_" mode of R_WORD | R_BYTX is used as a designator + * of the extended R_ modes. The extended modes replace + * the PAGING modes and are being added in an adhoc manner + * as follows: + * + * Extended Mode relocation flags + * + * 7 6 5 4 3 2 1 0 + * +-----+-----+-----+-----+-----+-----+-----+-----+ + * | MSB | x | x | USGN| 1 | PCR | SYM | 0 | + * +-----+-----+-----+-----+-----+-----+-----+-----+ + */ + +#define R_ECHEK 0011 /* Extended Mode Check Bits */ +#define R_EXTND 0010 /* Extended Mode Code */ +#define R_EMASK 0151 /* Extended Mode Mask */ + +/* #define R_AREA 0000 */ /* Base type */ +/* #define R_SYM 0002 */ + +/* #define R_NORM 0000 */ /* PC adjust */ +/* #define R_PCR 0004 */ + +/* #define R_SGND 0000 */ /* Signed value */ +/* #define R_USGN 0020 */ /* Unsigned value */ + +/* #define R_LSB 0000 */ /* output low byte */ +/* #define R_MSB 0200 */ /* output high byte */ + +#define R_J11 0010 /* JLH: 11 bit JMP and CALL (8051) */ +#define R_J19 0050 /* BM: 19 bit JMP and CALL (DS80C390) */ +#define R_3BYTE 0110 /* 24 bit */ +#define R_4BYTE 0150 /* 32 bit */ + +/* + * Global symbol types. + */ +#define S_REF 1 /* referenced */ +#define S_DEF 2 /* defined */ + +/* + * Area types + */ +#define A_NUL 001 /* Nick, means segment only defines symbols */ +#define A_CON 000 /* concatenate */ +#define A_OVR 004 /* overlay */ +#define A_REL 000 /* relocatable */ +#define A_ABS 010 /* absolute */ +#define A_NOPAG 000 /* non-paged */ +#define A_PAG 020 /* paged */ + +/* + * File types + */ +#define F_STD 1 /* stdin */ +#define F_LNK 2 /* File.lnk */ +#define F_REL 3 /* File.rel */ + +/* + * General assembler address type + */ +typedef unsigned int a_uint; + +/* + * The structures of head, area, areax, and sym are created + * as the REL files are read during the first pass of the + * linker. The struct head is created upon encountering a + * H directive in the REL file. The structure contains a + * link to a link file structure (struct lfile) which describes + * the file containing the H directive, the number of data/code + * areas contained in this header segment, the number of + * symbols referenced/defined in this header segment, a pointer + * to an array of pointers to areax structures (struct areax) + * created as each A directive is read, and a pointer to an + * array of pointers to symbol structures (struct sym) for + * all referenced/defined symbols. As H directives are read + * from the REL files a linked list of head structures is + * created by placing a link to the new head structure + * in the previous head structure. + */ +struct head +{ + struct head *h_hp; /* Header link */ + struct lfile *h_lfile;/* Associated file */ + int h_narea; /* # of areas */ + struct areax **a_list; /* Area list */ + int h_nglob; /* # of global symbols */ + struct sym **s_list; /* Globle symbol list */ + char * m_id; /* Module name */ +}; + +/* + * A structure area is created for each 'unique' data/code + * area definition found as the REL files are read. The + * struct area contains the name of the area, a flag byte + * which contains the area attributes (REL/CON/OVR/ABS), + * the area base address set flag byte (-b option), and the + * area base address and total size which will be filled + * in at the end of the first pass through the REL files. + * As A directives are read from the REL files a linked + * list of unique area structures is created by placing a + * link to the new area structure in the previous area structure. + */ +struct area +{ + struct area *a_ap; /* Area link */ + struct areax *a_axp; /* Area extension link */ +#if 1 /* Nick */ + a_uint a_addr; /* logical beginning address of area */ + a_uint a_size; /* logical size of the area */ + a_uint a_incr; /* logical banksize increment */ + a_uint a_paddr; /* physical beginning address of area */ + a_uint a_psize; /* physical size of the area */ + a_uint a_pincr; /* physical banksize increment */ + a_uint a_baddr; /* banksize threshold for advancing the bank */ + a_uint a_bsize; /* banksize counter for advancing the bank */ + a_uint a_bincr; /* banksize increment allows overlaid banks */ + char a_bset; /* logical base address set */ + char a_iset; /* logical banksize increment set */ + char a_pbset; /* physical base address set */ + char a_piset; /* physical banksize increment set */ + char a_baset; /* banksize threshold set */ + char a_biset; /* banksize increment set */ + char a_bcflg; /* bank concatenation flag for area */ +#else + a_uint a_addr; /* Beginning address of area */ + a_uint a_size; /* Total size of the area */ + char a_bset; /* Area base address set */ +#endif + char a_flag; /* Flag byte */ + char * a_id; /* Name */ +}; + +/* + * An areax structure is created for every A directive found + * while reading the REL files. The struct areax contains a + * link to the 'unique' area structure referenced by the A + * directive and to the head structure this area segment is + * a part of. The size of this area segment as read from the + * A directive is placed in the areax structure. The beginning + * address of this segment will be filled in at the end of the + * first pass through the REL files. As A directives are read + * from the REL files a linked list of areax structures is + * created for each unique area. The final areax linked + * list has at its head the 'unique' area structure linked + * to the linked areax structures (one areax structure for + * each A directive for this area). + */ +struct areax +{ + struct areax *a_axp; /* Area extension link */ + struct area *a_bap; /* Base area link */ + struct head *a_bhp; /* Base header link */ + a_uint a_addr; /* Beginning address of section */ +#if 1 /* Nick */ + a_uint a_paddr; /* Beginning physical address of section */ +#endif + a_uint a_size; /* Size of the area in section */ +#if 1 /* Nick */ + char * m_id; /* Module name */ +#endif +}; + +/* + * A sym structure is created for every unique symbol + * referenced/defined while reading the REL files. The + * struct sym contains the symbol's name, a flag value + * (not used in this linker), a symbol type denoting + * referenced/defined, and an address which is loaded + * with the relative address within the area in which + * the symbol was defined. The sym structure also + * contains a link to the area where the symbol was defined. + * The sym structures are linked into linked lists using + * the symbol link element. + */ +struct sym +{ + struct sym *s_sp; /* Symbol link */ + struct areax *s_axp; /* Symbol area link */ + char s_type; /* Symbol subtype */ + char s_flag; /* Flag byte */ + a_uint s_addr; /* Address */ + char *s_id; /* Name (JLH) */ + char *m_id; /* Module symbol define in */ +}; + +/* + * The structure lfile contains a pointer to a + * file specification string, an index which points + * to the file name (past the 'path'), the file type, + * an object output flag, and a link to the next + * lfile structure. + */ +struct lfile +{ + struct lfile *f_flp; /* lfile link */ + int f_type; /* File type */ + char *f_idp; /* Pointer to file spec */ + int f_idx; /* Index to file name */ + int f_obj; /* Object output flag */ +}; + +/* + * The struct base contains a pointer to a + * base definition string and a link to the next + * base structure. + */ +struct base +{ + struct base *b_base; /* Base link */ + char *b_strp; /* String pointer */ +}; + +/* + * The struct globl contains a pointer to a + * global definition string and a link to the next + * global structure. + */ +struct globl +{ + struct globl *g_globl; /* Global link */ + char *g_strp; /* String pointer */ +}; + +/* + * A structure sdp is created for each 'unique' paged + * area definition found as the REL files are read. + * As P directives are read from the REL files a linked + * list of unique sdp structures is created by placing a + * link to the new sdp structure in the previous area structure. + */ +struct sdp +{ + struct area *s_area; /* Paged Area link */ + struct areax *s_areax; /* Paged Area Extension Link */ + a_uint s_addr; /* Page address offset */ +}; + +/* + * The structure rerr is loaded with the information + * required to report an error during the linking + * process. The structure contains an index value + * which selects the areax structure from the header + * areax structure list, a mode value which selects + * symbol or area relocation, the base address in the + * area section, an area/symbol list index value, and + * an area/symbol offset value. + */ +struct rerr +{ + int aindex; /* Linking area */ + int mode; /* Relocation mode */ + a_uint rtbase; /* Base address in section */ + int rindex; /* Area/Symbol reloaction index */ + a_uint rval; /* Area/Symbol offset value */ +}; + +/* + * The structure lbpath is created for each library + * path specification input by the -k option. The + * lbpath structures are linked into a list using + * the next link element. + */ +struct lbpath { + struct lbpath *next; + char *path; +}; + +/* + * The structure lbname is created for all combinations of the + * library path specifications (input by the -k option) and the + * library file specifications (input by the -l option) that + * lead to an existing file. The element path points to + * the path string, element libfil points to the library + * file string, and the element libspc is the concatenation + * of the valid path and libfil strings. + * + * The lbpath structures are linked into a list + * using the next link element. + * + * Each library file contains a list of object files + * that are contained in the particular library. e.g.: + * + * \iolib\termio + * \inilib\termio + * + * Only one specification per line is allowed. + */ +struct lbname { + struct lbname *next; + char *path; + char *libfil; + char *libspc; + int f_obj; +}; + +/* + * The function fndsym() searches through all combinations of the + * library path specifications (input by the -k option) and the + * library file specifications (input by the -l option) that + * lead to an existing file for a symbol definition. + * + * The structure lbfile is created for the first library + * object file which contains the definition for the + * specified undefined symbol. + * + * The element libspc points to the library file path specification + * and element relfil points to the object file specification string. + * The element filspc is the complete path/file specification for + * the library file to be imported into the linker. The f_obj + * flag specifies if the object code from this file is + * to be output by the linker. The file specification + * may be formed in one of two ways: + * + * (1) If the library file contained an absolute + * path/file specification then this becomes filspc. + * (i.e. C:\...) + * + * (2) If the library file contains a relative path/file + * specification then the concatenation of the path + * and this file specification becomes filspc. + * (i.e. \...) + * + * The lbpath structures are linked into a list + * using the next link element. + */ +struct lbfile { + struct lbfile *next; + char *libspc; + char *relfil; + char *filspc; + int f_obj; +}; + +/* + * External Definitions for all Global Variables + */ + +extern char *_abs_; /* = { ". .ABS." }; + */ +extern int lkerr; /* ASLink error flag + */ +extern char *ip; /* pointer into the REL file + * text line in ib[] + */ +extern char ib[NINPUT]; /* REL file text line + */ +extern char *rp; /* pointer into the LST file + * text line in rb[] + */ +extern char rb[NINPUT]; /* LST file text line being + * address relocated + */ +extern char ctype[]; /* array of character types, one per + * ASCII character + */ + +/* + * Character Type Definitions + */ +#define SPACE '\000' +#define ETC '\000' +#define LETTER '\001' +#define DIGIT '\002' +#define BINOP '\004' +#define RAD2 '\010' +#define RAD8 '\020' +#define RAD10 '\040' +#define RAD16 '\100' +#define ILL '\200' + +#define DGT2 DIGIT|RAD16|RAD10|RAD8|RAD2 +#define DGT8 DIGIT|RAD16|RAD10|RAD8 +#define DGT10 DIGIT|RAD16|RAD10 +#define LTR16 LETTER|RAD16 + +extern char ccase[]; /* an array of characters which + * perform the case translation function + */ + +extern struct lfile *filep; /* The pointers (lfile *) filep, + * (lfile *) cfp, and (FILE *) sfp + * are used in conjunction with + * the routine getline() to read + * asmlnk commands from + * (1) the standard input or + * (2) or a command file + * and to read the REL files + * sequentially as defined by the + * asmlnk input commands. + * + * The pointer *filep points to the + * beginning of a linked list of + * lfile structures. + */ +extern struct lfile *cfp; /* The pointer *cfp points to the + * current lfile structure + */ +extern struct lfile *startp;/* asmlnk startup file structure + */ +#if 1 /* Nick */ +extern struct lfile *outfp; /* pointer to an lfile structure + * containing an input REL file + * specification, or -o specification + */ +#endif +extern struct lfile *linkp; /* pointer to first lfile structure + * containing an input REL file + * specification + */ +extern struct lfile *lfp; /* pointer to current lfile structure + * being processed by parse() + */ +extern struct head *headp; /* The pointer to the first + * head structure of a linked list + */ +extern struct head *hp; /* Pointer to the current + * head structure + */ +extern struct area *areap; /* The pointer to the first + * area structure of a linked list + */ +extern struct area *ap; /* Pointer to the current + * area structure + */ +extern struct areax *axp; /* Pointer to the current + * areax structure + */ +extern struct sym *symhash[NHASH]; /* array of pointers to NHASH + * linked symbol lists + */ +extern struct base *basep; /* The pointer to the first + * base structure + */ +extern struct base *bsp; /* Pointer to the current + * base structure + */ +extern struct globl *globlp;/* The pointer to the first + * globl structure + */ +extern struct globl *gsp; /* Pointer to the current + * globl structure + */ +extern struct sdp sdp; /* Base Paged structure + */ +extern struct rerr rerr; /* Structure containing the + * linker error information + */ +extern FILE *ofp; /* Linker Output file handle + */ +extern FILE *mfp; /* Map output file handle + */ +extern FILE *rfp; /* File handle for output + * address relocated ASxxxx + * listing file + */ +extern FILE *sfp; /* The file handle sfp points to the + * currently open file + */ +extern FILE *tfp; /* File handle for input + * ASxxxx listing file + */ +extern char afn[FILSPC]; /* current input file specification + */ +extern int afp; /* current input file path length + */ +extern char afntmp[FILSPC]; /* temporary input file specification + */ +extern int afptmp; /* temporary input file path length + */ +extern int oflag; /* Output file type flag + */ +extern int objflg; /* Linked file/library object output flag + */ +extern int mflag; /* Map output flag + */ +extern int xflag; /* Map file radix type flag + */ +extern int pflag; /* print linker command file flag + */ +extern int uflag; /* Listing relocation flag + */ +extern int wflag; /* Enable wide format listing + */ +extern int zflag; /* Enable symbol case sensitivity + */ +extern int radix; /* current number conversion radix: + * 2 (binary), 8 (octal), 10 (decimal), + * 16 (hexadecimal) + */ +extern int line; /* current line number + */ +extern int page; /* current page number + */ +extern int lop; /* current line number on page + */ +extern int pass; /* linker pass number + */ +extern int rtcnt; /* count of elements in the + * rtval[] and rtflg[] arrays + */ +extern a_uint rtval[]; /* data associated with relocation + */ +extern int rtflg[]; /* indicates if rtval[] value is + * to be sent to the output file. + */ +extern char rtbuf[]; /* S19/IHX output buffer + */ +extern int rtaflg; /* rtbuf[] processing + */ +extern a_uint rtadr0; /* + */ +extern a_uint rtadr1; /* + */ +extern a_uint rtadr2; /* + */ +extern a_uint rtadr3; /* Nick, only for Intel format, makes sure we + output a new extended linear address record + after rtadr1 wraps from 0000ffff -> 00010000 + */ +extern int obj_flag; /* Linked file/library object output flag + */ +extern int a_bytes; /* REL file T Line address length + */ +extern int hilo; /* REL file byte ordering + */ +extern a_uint a_mask; /* Address Mask + */ +extern a_uint s_mask; /* Sign Mask + */ +extern a_uint v_mask; /* Value Mask + */ +extern int gline; /* LST file relocation active + * for current line + */ +extern int gcntr; /* LST file relocation active + * counter + */ +extern struct lbpath *lbphead; /* pointer to the first + * library path structure + */ +extern struct lbname *lbnhead; /* pointer to the first + * library name structure + */ +extern struct lbfile *lbfhead; /* pointer to the first + * library file structure + */ + +/* C Library function definitions */ +/* for reference only +extern VOID exit(); +extern int fclose(); +extern char * fgets(); +extern FILE * fopen(); +extern int fprintf(); +extern VOID free(); +extern VOID * malloc(); +extern char putc(); +extern char * strcpy(); +extern int strlen(); +extern char * strncpy(); +extern char * strrchr(); +*/ + +/* Program function definitions */ + +#ifdef OTHERSYSTEM + +/* lkmain.c */ +extern FILE * afile(char *fn, char *ft, int wf); +extern VOID afilex(char *fn, char *ft); +extern VOID bassav(void); +extern int fndidx(char *str); +extern VOID gblsav(void); +extern VOID link(void); +extern VOID lkexit(int i); +extern int main(int argc, char *argv[]); +extern VOID map(void); +extern int parse(void); +extern VOID doparse(void); +extern VOID setbas(void); +extern VOID setgbl(void); +extern VOID usage(int n); + +/* lklex.c */ +extern char endline(void); +extern int get(void); +extern VOID getfid(char *str, int c); +extern VOID getid(char *id, int c); +extern int getline(void); +extern int getmap(int d); +extern int getnb(void); +extern int more(void); +extern VOID skip(int c); +extern VOID unget(int c); + +/* lkarea.c */ +extern VOID lkparea(char *id); +extern VOID lnkarea(void); +extern VOID lnksect(struct area *tap); +extern VOID newarea(void); + +/* lkhead.c */ +extern VOID module(void); +extern VOID newhead(void); + +/* lksym.c */ +extern int hash(char *p, int cflag); +extern struct sym * lkpsym(char *id, int f); +extern char * new(unsigned int n); +extern struct sym * newsym(void); +extern char * strsto(char *str); +extern VOID symdef(FILE *fp); +extern int symeq(char *p1, char *p2, int cflag); +extern VOID syminit(void); +extern VOID symmod(FILE *fp, struct sym *tsp); +extern a_uint symval(struct sym *tsp); + +/* lkeval.c */ +extern int digit(int c, int r); +extern a_uint eval(void); +extern a_uint expr(int n); +extern int oprio(int c); +extern a_uint term(void); + +/* lklist.c */ +extern int dgt(int rdx, char *str, int n); +extern VOID newpag(FILE *fp); +extern VOID slew(struct area *xp); +extern VOID lstarea(struct area *xp); +extern VOID lkulist(int i); +extern VOID lkalist(a_uint pc); +extern VOID lkglist(a_uint pc, int v); + +/* lkrloc.c */ +extern a_uint adb_1b(a_uint v, int i); +extern a_uint adb_2b(a_uint v, int i); +extern a_uint adb_3b(a_uint v, int i); +extern a_uint adb_4b(a_uint v, int i); +extern a_uint adb_xb(a_uint v, int i); +#ifdef R_BYTE4 /* Nick has reassigned the R_PAG0 and R_PAG bits! */ +extern a_uint adb_byte4(a_uint v, int i); +#endif +#ifdef R_BYTE3 /* Nick has reassigned the R_PAG0 and R_PAG bits! */ +extern a_uint adb_byte3(a_uint v, int i); +#endif +extern a_uint adb_hi(a_uint v, int i); +extern a_uint adb_lo(a_uint v, int i); +extern a_uint adw_xb(int x, a_uint v, int i); +extern a_uint evword(void); +extern VOID rele(void); +extern VOID reloc(int c); +extern VOID relt(void); +extern VOID relr(void); +extern VOID relp(void); +extern VOID relerr(char *str); +extern char * errmsg[]; +extern VOID errdmp(FILE *fptr, char *str); +extern VOID relerp(char *str); +extern VOID erpdmp(FILE *fptr, char *str); +extern VOID prntval(FILE *fptr, a_uint v); + +/* lklibr.c */ +extern VOID addfile(char *path, char *libfil); +extern VOID addlib(void); +extern VOID addpath(void); +extern int fndsym(char *name); +extern VOID library(void); +extern VOID loadfile(char *filspc); +extern VOID search(void); + +/* lkout.c */ +extern VOID lkout(int i); +extern VOID ixx(int i); +extern VOID iflush(void); +extern VOID sxx(int i); +extern VOID sflush(void); + +#else + +/* lkmain.c */ +extern FILE * afile(); +extern VOID afilex(); +extern VOID bassav(); +extern int fndidx(); +extern VOID gblsav(); +extern VOID link(); +extern VOID lkexit(); +extern int main(); +extern VOID map(); +extern int parse(); +extern VOID doparse(); +extern VOID setbas(); +extern VOID setgbl(); +extern VOID usage(); + +/* lklex.c */ +extern char endline(); +extern int get(); +extern VOID getfid(); +extern VOID getid(); +extern int getline(); +extern int getmap(); +extern int getnb(); +extern int more(); +extern VOID skip(); +extern VOID unget(); + +/* lkarea.c */ +extern VOID lkparea(); +extern VOID lnkarea(); +extern VOID lnksect(); +extern VOID newarea(); + +/* lkhead.c */ +extern VOID module(); +extern VOID newhead(); + +/* lksym.c */ +extern int hash(); +extern struct sym * lkpsym(); +extern VOID * new(); +extern struct sym * newsym(); +extern char * strsto(); +extern VOID symdef(); +extern int symeq(); +extern VOID syminit(); +extern VOID symmod(); +extern a_uint symval(); + +/* lkeval.c */ +extern int digit(); +extern a_uint eval(); +extern a_uint expr(); +extern int oprio(); +extern a_uint term(); + +/* lklist.c */ +extern int dgt(); +extern VOID newpag(); +extern VOID slew(); +extern VOID lstarea(); +extern VOID lkulist(); +extern VOID lkalist(); +extern VOID lkglist(); + +/* lkrloc.c */ +extern a_uint adb_1b(); +extern a_uint adb_2b(); +extern a_uint adb_3b(); +extern a_uint adb_4b(); +extern a_uint adb_xb(); +extern a_uint adb_hi(); +extern a_uint adb_lo(); +extern a_uint adw_xb(); +extern a_uint evword(); +extern VOID rele(); +extern VOID reloc(); +extern VOID relt(); +extern VOID relr(); +extern VOID relp(); +extern VOID relerr(); +extern char * errmsg[]; +extern VOID errdmp(); +extern VOID relerp(); +extern VOID erpdmp(); +extern VOID prntval(); + +/* lklibr.c */ +extern VOID addfile(); +extern VOID addlib(); +extern VOID addpath(); +extern int fndsym(); +extern VOID library(); +extern VOID loadfile(); +extern VOID search(); + +/* lkout.c */ +extern VOID lkout(); +extern VOID ixx(); +extern VOID iflush(); +extern VOID sxx(); +extern VOID sflush(); + +#endif + diff --git a/src/mkutil/link-z80/intelhex.pdf b/src/mkutil/link-z80/intelhex.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bc67eafd4bc10bd2e46db7fbe9633b9a3fba0e61 GIT binary patch literal 29218 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 brbCGoJcB6a83GMQ1vwEdEbQGKw8#Djqw1Dy literal 0 HcmV?d00001 diff --git a/src/mkutil/link-z80/link-z80.exe b/src/mkutil/link-z80/link-z80.exe index 1462ae12c38edc6d3309792451e92e195b3cdba4..45dd95134b46e7f9d5ed55fc52f3960cc2d7fd18 100644 GIT binary patch delta 42752 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 diff --git a/src/mkutil/link-z80/link-z80.map b/src/mkutil/link-z80/link-z80.map index 5d352670..6bd9350d 100644 --- a/src/mkutil/link-z80/link-z80.map +++ b/src/mkutil/link-z80/link-z80.map @@ -1,11 +1,11 @@ link-z80 - Timestamp is 3ebb8be9 (Fri May 09 21:07:21 2003) + Timestamp is 3f45bedb (Fri Aug 22 16:57:31 2003) Preferred load address is 00400000 Start Length Name Class - 0001:00000000 0001260dH .text CODE + 0001:00000000 000130c8H .text CODE 0002:00000000 00000606H .rdata DATA 0002:00000606 00000000H .edata DATA 0003:00000000 00000104H .CRT$XCA DATA @@ -18,8 +18,8 @@ 0003:00000724 00000104H .CRT$XPZ DATA 0003:00000828 00000104H .CRT$XTA DATA 0003:0000092c 00000104H .CRT$XTZ DATA - 0003:00000a30 00004a7dH .data DATA - 0003:000054b0 00001f54H .bss DATA + 0003:00000a30 00004cecH .data DATA + 0003:0000571c 00002128H .bss DATA 0004:00000000 00000014H .idata$2 DATA 0004:00000014 00000014H .idata$3 DATA 0004:00000028 0000010cH .idata$4 DATA @@ -28,523 +28,533 @@ Address Publics by Value Rva+Base Lib:Object - 0001:00000350 _newarea 00401350 f lkarea.obj - 0001:00000466 _lkparea 00401466 f lkarea.obj - 0001:00000593 _lnkarea 00401593 f lkarea.obj - 0001:000007b5 _lnksect 004017b5 f lkarea.obj - 0001:00000ce0 _eval 00401ce0 f lkeval.obj - 0001:00000d68 _expr 00401d68 f lkeval.obj - 0001:00000faa _term 00401faa f lkeval.obj - 0001:0000131a _digit 0040231a f lkeval.obj - 0001:000013cf _oprio 004023cf f lkeval.obj - 0001:00001620 _newhead 00402620 f lkhead.obj - 0001:00001720 _module 00402720 f lkhead.obj - 0001:000017d0 _getid 004027d0 f lklex.obj - 0001:0000183c _getfid 0040283c f lklex.obj - 0001:0000188f _getnb 0040288f f lklex.obj - 0001:000018b0 _skip 004028b0 f lklex.obj - 0001:000018ea _get 004028ea f lklex.obj - 0001:00001918 _unget 00402918 f lklex.obj - 0001:00001930 _getmap 00402930 f lklex.obj - 0001:00001a80 _getline 00402a80 f lklex.obj - 0001:00001cc0 _more 00402cc0 f lklex.obj - 0001:00001cfd _endline 00402cfd f lklex.obj - 0001:00001e90 _addpath 00402e90 f lklibr.obj - 0001:00001f21 _addlib 00402f21 f lklibr.obj - 0001:00001f83 _addfile 00402f83 f lklibr.obj - 0001:000021a7 _search 004031a7 f lklibr.obj - 0001:00002228 _fndsym 00403228 f lklibr.obj - 0001:000026df _library 004036df f lklibr.obj - 0001:0000271c _loadfile 0040371c f lklibr.obj - 0001:00002a20 _newpag 00403a20 f lklist.obj - 0001:00002a62 _dgt 00403a62 f lklist.obj - 0001:00002aaf _slew 00403aaf f lklist.obj - 0001:000030cb _lstarea 004040cb f lklist.obj - 0001:0000361a _lkulist 0040461a f lklist.obj - 0001:0000374f _lkalist 0040474f f lklist.obj - 0001:00003a53 _lkglist 00404a53 f lklist.obj - 0001:00004430 _main 00405430 f lkmain.obj - 0001:000047a1 _lkexit 004057a1 f lkmain.obj - 0001:00004831 _link 00405831 f lkmain.obj - 0001:00004aea _map 00405aea f lkmain.obj - 0001:00004df3 _parse 00405df3 f lkmain.obj - 0001:000053bc _doparse 004063bc f lkmain.obj - 0001:0000546b _bassav 0040646b f lkmain.obj - 0001:000054fd _setbas 004064fd f lkmain.obj - 0001:00005828 _gblsav 00406828 f lkmain.obj - 0001:000058ba _setgbl 004068ba f lkmain.obj - 0001:000059d8 _afile 004069d8 f lkmain.obj - 0001:00005bbc _fndidx 00406bbc f lkmain.obj - 0001:00005c32 _usage 00406c32 f lkmain.obj - 0001:000062b0 _lkout 004072b0 f lkout.obj - 0001:000062f2 _ixx 004072f2 f lkout.obj - 0001:000064a2 _iflush 004074a2 f lkout.obj - 0001:00006617 _sxx 00407617 f lkout.obj - 0001:000067e1 _sflush 004077e1 f lkout.obj - 0001:00006ac0 _reloc 00407ac0 f lkrloc.obj - 0001:00006b50 _relt 00407b50 f lkrloc.obj - 0001:00006ba3 _relr 00407ba3 f lkrloc.obj - 0001:000071d1 _relp 004081d1 f lkrloc.obj - 0001:000073d5 _rele 004083d5 f lkrloc.obj - 0001:00007400 _evword 00408400 f lkrloc.obj - 0001:00007446 _adb_1b 00408446 f lkrloc.obj - 0001:0000746c _adb_2b 0040846c f lkrloc.obj - 0001:00007522 _adb_3b 00408522 f lkrloc.obj - 0001:00007632 _adb_4b 00408632 f lkrloc.obj - 0001:0000779b _adb_xb 0040879b f lkrloc.obj - 0001:000078d2 _adb_lo 004088d2 f lkrloc.obj - 0001:0000794e _adb_hi 0040894e f lkrloc.obj - 0001:000079ca _adb_byte3 004089ca f lkrloc.obj - 0001:00007a46 _adb_byte4 00408a46 f lkrloc.obj - 0001:00007ac2 _adw_xb 00408ac2 f lkrloc.obj - 0001:00007b31 _relerr 00408b31 f lkrloc.obj - 0001:00007b63 _errdmp 00408b63 f lkrloc.obj - 0001:00007ce8 _prntval 00408ce8 f lkrloc.obj - 0001:00007da7 _relerp 00408da7 f lkrloc.obj - 0001:00007dd9 _erpdmp 00408dd9 f lkrloc.obj - 0001:00008360 _syminit 00409360 f lksym.obj - 0001:0000838c _newsym 0040938c f lksym.obj - 0001:0000855a _lkpsym 0040955a f lksym.obj - 0001:00008601 _symval 00409601 f lksym.obj - 0001:0000862d _symdef 0040962d f lksym.obj - 0001:000086a4 _symmod 004096a4 f lksym.obj - 0001:00008760 _symeq 00409760 f lksym.obj - 0001:00008805 _hash 00409805 f lksym.obj - 0001:00008866 _strsto 00409866 f lksym.obj - 0001:000088e5 _new 004098e5 f lksym.obj - 0001:00008ad1 _fprintf 00409ad1 f LIBC:fprintf.obj - 0001:00008b03 ___initstdio 00409b03 f LIBC:_file.obj - 0001:00008ba8 ___endstdio 00409ba8 f LIBC:_file.obj - 0001:00008bc0 _strcpy 00409bc0 f LIBC:strcat.obj - 0001:00008bd0 _strcat 00409bd0 f LIBC:strcat.obj - 0001:00008cb0 _strlen 00409cb0 f LIBC:strlen.obj - 0001:00008d2b _fclose 00409d2b f LIBC:fclose.obj - 0001:00008d81 _fgets 00409d81 f LIBC:fgets.obj - 0001:00008dd8 _free 00409dd8 f LIBC:free.obj - 0001:00008e41 __fsopen 00409e41 f LIBC:fopen.obj - 0001:00008e61 _fopen 00409e61 f LIBC:fopen.obj - 0001:00008e74 _sprintf 00409e74 f LIBC:sprintf.obj - 0001:00008ec6 _malloc 00409ec6 f LIBC:malloc.obj - 0001:00008ed8 __nh_malloc 00409ed8 f LIBC:malloc.obj - 0001:00008f04 __heap_alloc 00409f04 f LIBC:malloc.obj - 0001:00008f90 _strchr 00409f90 f LIBC:strchr.obj - 0001:00008f96 ___from_strstr_to_strchr 00409f96 f LIBC:strchr.obj - 0001:00009050 _strncmp 0040a050 f LIBC:strncmp.obj - 0001:00009088 _sscanf 0040a088 f LIBC:sscanf.obj - 0001:000090c0 _strcmp 0040a0c0 f LIBC:strcmp.obj - 0001:00009144 __flsbuf 0040a144 f LIBC:_flsbuf.obj - 0001:00009260 _strncpy 0040a260 f LIBC:strncpy.obj - 0001:0000935e __cinit 0040a35e f LIBC:crt0dat.obj - 0001:0000938b _exit 0040a38b f LIBC:crt0dat.obj - 0001:0000939c __exit 0040a39c f LIBC:crt0dat.obj - 0001:000093ad __cexit 0040a3ad f LIBC:crt0dat.obj - 0001:000093bc __c_exit 0040a3bc f LIBC:crt0dat.obj - 0001:00009480 _strrchr 0040a480 f LIBC:strrchr.obj - 0001:000094a7 _mainCRTStartup 0040a4a7 f LIBC:crt0.obj - 0001:00009586 __amsg_exit 0040a586 f LIBC:crt0.obj - 0001:000095cf __stbuf 0040a5cf f LIBC:_sftbuf.obj - 0001:0000965c __ftbuf 0040a65c f LIBC:_sftbuf.obj - 0001:00009699 __output 0040a699 f LIBC:output.obj - 0001:00009ea3 __ioinit 0040aea3 f LIBC:ioinit.obj - 0001:0000a04e __ioterm 0040b04e f LIBC:ioinit.obj - 0001:0000a071 _calloc 0040b071 f LIBC:calloc.obj - 0001:0000a122 __fcloseall 0040b122 f LIBC:closeall.obj - 0001:0000a17a _fflush 0040b17a f LIBC:fflush.obj - 0001:0000a1b5 __flush 0040b1b5 f LIBC:fflush.obj - 0001:0000a211 __flushall 0040b211 f LIBC:fflush.obj - 0001:0000a287 __close 0040b287 f LIBC:close.obj - 0001:0000a33a __freebuf 0040b33a f LIBC:_freebuf.obj - 0001:0000a365 __filbuf 0040b365 f LIBC:_filbuf.obj - 0001:0000a43e __GetLinkerVersion 0040b43e f LIBC:heapinit.obj - 0001:0000a46b ___heap_select 0040b46b f LIBC:heapinit.obj - 0001:0000a5b3 __heap_init 0040b5b3 f LIBC:heapinit.obj - 0001:0000a610 __heap_term 0040b610 f LIBC:heapinit.obj - 0001:0000a6b8 __get_sbh_threshold 0040b6b8 f LIBC:sbheap.obj - 0001:0000a6d7 __set_sbh_threshold 0040b6d7 f LIBC:sbheap.obj - 0001:0000a78a ___sbh_heap_init 0040b78a f LIBC:sbheap.obj - 0001:0000a7d2 ___sbh_find_block 0040b7d2 f LIBC:sbheap.obj - 0001:0000a7fd ___sbh_free_block 0040b7fd f LIBC:sbheap.obj - 0001:0000ab26 ___sbh_alloc_block 0040bb26 f LIBC:sbheap.obj - 0001:0000ae2f ___sbh_alloc_new_region 0040be2f f LIBC:sbheap.obj - 0001:0000aee0 ___sbh_alloc_new_group 0040bee0 f LIBC:sbheap.obj - 0001:0000afdb ___sbh_resize_block 0040bfdb f LIBC:sbheap.obj - 0001:0000b2d1 ___sbh_heapmin 0040c2d1 f LIBC:sbheap.obj - 0001:0000b3a2 ___sbh_heap_check 0040c3a2 f LIBC:sbheap.obj - 0001:0000b6d1 __get_old_sbh_threshold 0040c6d1 f LIBC:sbheap.obj - 0001:0000b6d7 __set_old_sbh_threshold 0040c6d7 f LIBC:sbheap.obj - 0001:0000b6f3 ___old_sbh_new_region 0040c6f3 f LIBC:sbheap.obj - 0001:0000b837 ___old_sbh_release_region 0040c837 f LIBC:sbheap.obj - 0001:0000b88d ___old_sbh_decommit_pages 0040c88d f LIBC:sbheap.obj - 0001:0000b94f ___old_sbh_find_block 0040c94f f LIBC:sbheap.obj - 0001:0000b9a6 ___old_sbh_free_block 0040c9a6 f LIBC:sbheap.obj - 0001:0000b9eb ___old_sbh_alloc_block 0040c9eb f LIBC:sbheap.obj - 0001:0000bbf3 ___old_sbh_alloc_block_from_page 0040cbf3 f LIBC:sbheap.obj - 0001:0000bd17 ___old_sbh_resize_block 0040cd17 f LIBC:sbheap.obj - 0001:0000bdc0 ___old_sbh_heap_check 0040cdc0 f LIBC:sbheap.obj - 0001:0000bf1e __openfile 0040cf1e f LIBC:_open.obj - 0001:0000c08e __getstream 0040d08e f LIBC:stream.obj - 0001:0000c106 ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z 0040d106 f LIBC:handler.obj - 0001:0000c116 ?_query_new_handler@@YAP6AHI@ZXZ 0040d116 f LIBC:handler.obj - 0001:0000c11c __callnewh 0040d11c f LIBC:handler.obj - 0001:0000c137 __input 0040d137 f LIBC:input.obj - 0001:0000cbe8 __lseek 0040dbe8 f LIBC:lseek.obj - 0001:0000cc82 __write 0040dc82 f LIBC:write.obj - 0001:0000ce2f __getbuf 0040de2f f LIBC:_getbuf.obj - 0001:0000ce73 __isatty 0040de73 f LIBC:isatty.obj - 0001:0000ce99 __XcptFilter 0040de99 f LIBC:winxfltr.obj - 0001:0000d01d __setenvp 0040e01d f LIBC:stdenvp.obj - 0001:0000d0d6 __setargv 0040e0d6 f LIBC:stdargv.obj - 0001:0000d323 ___crtGetEnvironmentStringsA 0040e323 f LIBC:a_env.obj - 0001:0000d458 __global_unwind2 0040e458 f LIBC:exsup.obj - 0001:0000d49a __local_unwind2 0040e49a f LIBC:exsup.obj - 0001:0000d4f2 __NLG_Return2 0040e4f2 f LIBC:exsup.obj - 0001:0000d502 __abnormal_termination 0040e502 f LIBC:exsup.obj - 0001:0000d525 __NLG_Notify1 0040e525 f LIBC:exsup.obj - 0001:0000d52e __NLG_Notify 0040e52e f LIBC:exsup.obj - 0001:0000d541 __NLG_Dispatch 0040e541 f LIBC:exsup.obj - 0001:0000d550 __except_handler3 0040e550 f LIBC:exsup3.obj - 0001:0000d60d __seh_longjmp_unwind@4 0040e60d f LIBC:exsup3.obj - 0001:0000d628 __FF_MSGBANNER 0040e628 f LIBC:crt0msg.obj - 0001:0000d661 __NMSG_WRITE 0040e661 f LIBC:crt0msg.obj - 0001:0000d7b4 __GET_RTERRMSG 0040e7b4 f LIBC:crt0msg.obj - 0001:0000d7e5 _wctomb 0040e7e5 f LIBC:wctomb.obj - 0001:0000d850 __aulldiv 0040e850 f LIBC:ulldiv.obj - 0001:0000d8c0 __aullrem 0040e8c0 f LIBC:ullrem.obj - 0001:0000d940 _memset 0040e940 f LIBC:memset.obj - 0001:0000d998 __commit 0040e998 f LIBC:commit.obj - 0001:0000d9ef __dosmaperr 0040e9ef f LIBC:dosmap.obj - 0001:0000da56 __alloc_osfhnd 0040ea56 f LIBC:osfinfo.obj - 0001:0000daeb __set_osfhnd 0040eaeb f LIBC:osfinfo.obj - 0001:0000db62 __free_osfhnd 0040eb62 f LIBC:osfinfo.obj - 0001:0000dbdc __get_osfhandle 0040ebdc f LIBC:osfinfo.obj - 0001:0000dc19 __open_osfhandle 0040ec19 f LIBC:osfinfo.obj - 0001:0000dcb6 __read 0040ecb6 f LIBC:read.obj - 0001:0000deac _strtol 0040eeac f LIBC:strtol.obj - 0001:0000e0cb _strtoul 0040f0cb f LIBC:strtol.obj - 0001:0000e0f0 _strstr 0040f0f0 f LIBC:strstr.obj - 0001:0000e170 __chkstk 0040f170 f LIBC:chkstk.obj - 0001:0000e170 __alloca_probe 0040f170 f LIBC:chkstk.obj - 0001:0000e1a0 _memmove 0040f1a0 f LIBC:memmove.obj - 0001:0000e4d5 __open 0040f4d5 f LIBC:open.obj - 0001:0000e4ec __sopen 0040f4ec f LIBC:open.obj - 0001:0000e7a5 _mbtowc 0040f7a5 f LIBC:mbtowc.obj - 0001:0000e86d _isalpha 0040f86d f LIBC:_ctype.obj - 0001:0000e89b _isupper 0040f89b f LIBC:_ctype.obj - 0001:0000e8c3 _islower 0040f8c3 f LIBC:_ctype.obj - 0001:0000e8eb _isdigit 0040f8eb f LIBC:_ctype.obj - 0001:0000e913 _isxdigit 0040f913 f LIBC:_ctype.obj - 0001:0000e940 _isspace 0040f940 f LIBC:_ctype.obj - 0001:0000e968 _ispunct 0040f968 f LIBC:_ctype.obj - 0001:0000e990 _isalnum 0040f990 f LIBC:_ctype.obj - 0001:0000e9be _isprint 0040f9be f LIBC:_ctype.obj - 0001:0000e9ec _isgraph 0040f9ec f LIBC:_ctype.obj - 0001:0000ea1a _iscntrl 0040fa1a f LIBC:_ctype.obj - 0001:0000ea42 ___isascii 0040fa42 f LIBC:_ctype.obj - 0001:0000ea4f ___toascii 0040fa4f f LIBC:_ctype.obj - 0001:0000ea57 ___iscsymf 0040fa57 f LIBC:_ctype.obj - 0001:0000ea94 ___iscsym 0040fa94 f LIBC:_ctype.obj - 0001:0000ead1 __isctype 0040fad1 f LIBC:isctype.obj - 0001:0000eb50 __allmul 0040fb50 f LIBC:llmul.obj - 0001:0000eb90 __allshl 0040fb90 f LIBC:llshl.obj - 0001:0000ebaf _ungetc 0040fbaf f LIBC:ungetc.obj - 0001:0000ec1d __setmbcp 0040fc1d f LIBC:mbctype.obj - 0001:0000efe1 __getmbcp 0040ffe1 f LIBC:mbctype.obj - 0001:0000eff1 ___initmbctable 0040fff1 f LIBC:mbctype.obj - 0001:0000f010 _memcpy 00410010 f LIBC:memcpy.obj - 0001:0000f345 ___crtMessageBoxA 00410345 f LIBC:crtmbox.obj - 0001:0000f3ce __fptrap 004103ce f LIBC:crt0fp.obj - 0001:0000f3d7 __toupper 004103d7 f LIBC:toupper.obj - 0001:0000f3df _toupper 004103df f LIBC:toupper.obj - 0001:0000f4ab __chsize 004104ab f LIBC:chsize.obj - 0001:0000f5f1 ___crtGetStringTypeA 004105f1 f LIBC:a_str.obj - 0001:0000f73a ___crtLCMapStringA 0041073a f LIBC:a_map.obj - 0001:0000f989 __setmode 00410989 f LIBC:setmode.obj - 0001:0000fa00 _HeapFree@12 00410a00 f kernel32:KERNEL32.dll - 0001:0000fa06 _HeapAlloc@12 00410a06 f kernel32:KERNEL32.dll - 0001:0000fa0c _ExitProcess@4 00410a0c f kernel32:KERNEL32.dll - 0001:0000fa12 _TerminateProcess@8 00410a12 f kernel32:KERNEL32.dll - 0001:0000fa18 _GetCurrentProcess@0 00410a18 f kernel32:KERNEL32.dll - 0001:0000fa1e _GetCommandLineA@0 00410a1e f kernel32:KERNEL32.dll - 0001:0000fa24 _GetVersion@0 00410a24 f kernel32:KERNEL32.dll - 0001:0000fa2a _SetHandleCount@4 00410a2a f kernel32:KERNEL32.dll - 0001:0000fa30 _GetStdHandle@4 00410a30 f kernel32:KERNEL32.dll - 0001:0000fa36 _GetFileType@4 00410a36 f kernel32:KERNEL32.dll - 0001:0000fa3c _GetStartupInfoA@4 00410a3c f kernel32:KERNEL32.dll - 0001:0000fa42 _GetLastError@0 00410a42 f kernel32:KERNEL32.dll - 0001:0000fa48 _CloseHandle@4 00410a48 f kernel32:KERNEL32.dll - 0001:0000fa4e _GetModuleHandleA@4 00410a4e f kernel32:KERNEL32.dll - 0001:0000fa54 _GetModuleFileNameA@12 00410a54 f kernel32:KERNEL32.dll - 0001:0000fa5a _GetEnvironmentVariableA@12 00410a5a f kernel32:KERNEL32.dll - 0001:0000fa60 _GetVersionExA@4 00410a60 f kernel32:KERNEL32.dll - 0001:0000fa66 _HeapDestroy@4 00410a66 f kernel32:KERNEL32.dll - 0001:0000fa6c _HeapCreate@12 00410a6c f kernel32:KERNEL32.dll - 0001:0000fa72 _VirtualFree@12 00410a72 f kernel32:KERNEL32.dll - 0001:0000fa78 _VirtualAlloc@16 00410a78 f kernel32:KERNEL32.dll - 0001:0000fa7e _HeapReAlloc@16 00410a7e f kernel32:KERNEL32.dll - 0001:0000fa84 _IsBadWritePtr@8 00410a84 f kernel32:KERNEL32.dll - 0001:0000fa8a _SetFilePointer@16 00410a8a f kernel32:KERNEL32.dll - 0001:0000fa90 _WriteFile@20 00410a90 f kernel32:KERNEL32.dll - 0001:0000fa96 _UnhandledExceptionFilter@4 00410a96 f kernel32:KERNEL32.dll - 0001:0000fa9c _FreeEnvironmentStringsA@4 00410a9c f kernel32:KERNEL32.dll - 0001:0000faa2 _FreeEnvironmentStringsW@4 00410aa2 f kernel32:KERNEL32.dll - 0001:0000faa8 _WideCharToMultiByte@32 00410aa8 f kernel32:KERNEL32.dll - 0001:0000faae _GetEnvironmentStrings@0 00410aae f kernel32:KERNEL32.dll - 0001:0000fab4 _GetEnvironmentStringsW@0 00410ab4 f kernel32:KERNEL32.dll - 0001:0000faba _RtlUnwind@16 00410aba f kernel32:KERNEL32.dll - 0001:0000fac0 _FlushFileBuffers@4 00410ac0 f kernel32:KERNEL32.dll - 0001:0000fac6 _SetStdHandle@8 00410ac6 f kernel32:KERNEL32.dll - 0001:0000facc _ReadFile@20 00410acc f kernel32:KERNEL32.dll - 0001:0000fad2 _CreateFileA@28 00410ad2 f kernel32:KERNEL32.dll - 0001:0000fad8 _MultiByteToWideChar@24 00410ad8 f kernel32:KERNEL32.dll - 0001:0000fade _GetCPInfo@8 00410ade f kernel32:KERNEL32.dll - 0001:0000fae4 _GetACP@0 00410ae4 f kernel32:KERNEL32.dll - 0001:0000faea _GetOEMCP@0 00410aea f kernel32:KERNEL32.dll - 0001:0000faf0 _GetProcAddress@8 00410af0 f kernel32:KERNEL32.dll - 0001:0000faf6 _LoadLibraryA@4 00410af6 f kernel32:KERNEL32.dll - 0001:0000fafc _SetEndOfFile@4 00410afc f kernel32:KERNEL32.dll - 0001:0000fb02 _GetStringTypeA@20 00410b02 f kernel32:KERNEL32.dll - 0001:0000fb08 _GetStringTypeW@16 00410b08 f kernel32:KERNEL32.dll - 0001:0000fb0e _LCMapStringA@24 00410b0e f kernel32:KERNEL32.dll - 0001:0000fb14 _LCMapStringW@24 00410b14 f kernel32:KERNEL32.dll - 0002:0000002c ___lookuptable 0041402c LIBC:output.obj - 0002:00000088 ??_C@_1O@POHA@?$AA?$CI?$AAn?$AAu?$AAl?$AAl?$AA?$CJ?$AA?$AA@ 00414088 LIBC:output.obj - 0002:00000098 ??_C@_06ONKE@?$CInull?$CJ?$AA@ 00414098 LIBC:output.obj - 0002:000000a0 ??_C@_0BH@PHHF@__GLOBAL_HEAP_SELECTED?$AA@ 004140a0 LIBC:heapinit.obj - 0002:000000b8 ??_C@_0BF@BBGL@__MSVCRT_HEAP_SELECT?$AA@ 004140b8 LIBC:heapinit.obj - 0002:000000d0 ??_C@_0P@GGKG@runtime?5error?5?$AA@ 004140d0 LIBC:crt0msg.obj - 0002:000000e0 ??_C@_02PIMC@?$AN?6?$AA@ 004140e0 LIBC:crt0msg.obj - 0002:000000e4 ??_C@_0O@DELO@TLOSS?5error?$AN?6?$AA@ 004140e4 LIBC:crt0msg.obj - 0002:000000f4 ??_C@_0N@OMLL@SING?5error?$AN?6?$AA@ 004140f4 LIBC:crt0msg.obj - 0002:00000104 ??_C@_0P@OJAK@DOMAIN?5error?$AN?6?$AA@ 00414104 LIBC:crt0msg.obj - 0002:00000114 ??_C@_0CF@EANP@R6028?$AN?6?9?5unable?5to?5initialize?5he@ 00414114 LIBC:crt0msg.obj - 0002:0000013c ??_C@_0DF@ECGN@R6027?$AN?6?9?5not?5enough?5space?5for?5lo@ 0041413c LIBC:crt0msg.obj - 0002:00000174 ??_C@_0DF@FKAC@R6026?$AN?6?9?5not?5enough?5space?5for?5st@ 00414174 LIBC:crt0msg.obj - 0002:000001ac ??_C@_0CG@DPMN@R6025?$AN?6?9?5pure?5virtual?5function?5c@ 004141ac LIBC:crt0msg.obj - 0002:000001d4 ??_C@_0DF@CKIP@R6024?$AN?6?9?5not?5enough?5space?5for?5_o@ 004141d4 LIBC:crt0msg.obj - 0002:0000020c ??_C@_0CJ@GGOE@R6019?$AN?6?9?5unable?5to?5open?5console?5@ 0041420c LIBC:crt0msg.obj - 0002:00000238 ??_C@_0CB@LBOB@R6018?$AN?6?9?5unexpected?5heap?5error?$AN?6@ 00414238 LIBC:crt0msg.obj - 0002:0000025c ??_C@_0CN@FPEG@R6017?$AN?6?9?5unexpected?5multithread?5@ 0041425c LIBC:crt0msg.obj - 0002:0000028c ??_C@_0CM@OBIC@R6016?$AN?6?9?5not?5enough?5space?5for?5th@ 0041428c LIBC:crt0msg.obj - 0002:000002b8 ??_C@_0CB@HPAL@?$AN?6abnormal?5program?5termination?$AN?6@ 004142b8 LIBC:crt0msg.obj - 0002:000002dc ??_C@_0CM@JOOB@R6009?$AN?6?9?5not?5enough?5space?5for?5en@ 004142dc LIBC:crt0msg.obj - 0002:00000308 ??_C@_0CK@OIBL@R6008?$AN?6?9?5not?5enough?5space?5for?5ar@ 00414308 LIBC:crt0msg.obj - 0002:00000334 ??_C@_0CF@LKPB@R6002?$AN?6?9?5floating?5point?5not?5load@ 00414334 LIBC:crt0msg.obj - 0002:0000035c ??_C@_0CF@JPDF@Microsoft?5Visual?5C?$CL?$CL?5Runtime?5Lib@ 0041435c LIBC:crt0msg.obj - 0002:00000384 ??_C@_02JJJH@?6?6?$AA@ 00414384 LIBC:crt0msg.obj - 0002:00000388 ??_C@_0BK@DEOK@Runtime?5Error?$CB?6?6Program?3?5?$AA@ 00414388 LIBC:crt0msg.obj - 0002:000003a4 ??_C@_03NAME@?4?4?4?$AA@ 004143a4 LIBC:crt0msg.obj - 0002:000003a8 ??_C@_0BH@NNCD@?$DMprogram?5name?5unknown?$DO?$AA@ 004143a8 LIBC:crt0msg.obj - 0002:000003c0 ??_C@_0BD@NJFP@GetLastActivePopup?$AA@ 004143c0 LIBC:crtmbox.obj - 0002:000003d4 ??_C@_0BA@GILI@GetActiveWindow?$AA@ 004143d4 LIBC:crtmbox.obj - 0002:000003e4 ??_C@_0M@PKCK@MessageBoxA?$AA@ 004143e4 LIBC:crtmbox.obj - 0002:000003f0 ??_C@_0L@HKL@user32?4dll?$AA@ 004143f0 LIBC:crtmbox.obj - 0002:000003fc ??_C@_01A@?$AA?$AA@ 004143fc LIBC:a_str.obj - 0002:00000400 ??_C@_13A@?$AA?$AA?$AA?$AA@ 00414400 LIBC:a_str.obj - 0003:00000000 ___xc_a 00415000 LIBC:crt0init.obj - 0003:00000104 ___xc_z 00415104 LIBC:crt0init.obj - 0003:00000208 ___xi_a 00415208 LIBC:crt0init.obj - 0003:00000418 ___xi_z 00415418 LIBC:crt0init.obj - 0003:0000051c ___xp_a 0041551c LIBC:crt0init.obj - 0003:00000724 ___xp_z 00415724 LIBC:crt0init.obj - 0003:00000828 ___xt_a 00415828 LIBC:crt0init.obj - 0003:0000092c ___xt_z 0041592c LIBC:crt0init.obj - 0003:00000b14 __abs_ 00415b14 lkdata.obj - 0003:00000b18 _rtaflg 00415b18 lkdata.obj - 0003:00000b1c _ctype 00415b1c lkdata.obj - 0003:00000b9c _ccase 00415b9c lkdata.obj - 0003:00001370 _usetxt 00416370 lkmain.obj - 0003:00001d7c _errmsg 00416d7c lkrloc.obj - 0003:000022d0 __iob 004172d0 LIBC:_file.obj - 0003:00002550 __aexit_rtn 00417550 LIBC:crt0.obj - 0003:00002554 ___app_type 00417554 LIBC:crt0.obj - 0003:00002558 ___nullstring 00417558 LIBC:output.obj - 0003:0000255c ___wnullstring 0041755c LIBC:output.obj - 0003:00002560 ___badioinfo 00417560 LIBC:ioinit.obj - 0003:00002568 __amblksiz 00417568 LIBC:heapinit.obj - 0003:00002570 ___old_small_block_heap 00417570 LIBC:sbheap.obj - 0003:00004594 ___old_sbh_threshold 00419594 LIBC:sbheap.obj - 0003:000045a8 __XcptActTab 004195a8 LIBC:winxfltr.obj - 0003:00004620 __First_FPE_Indx 00419620 LIBC:winxfltr.obj - 0003:00004624 __Num_FPE 00419624 LIBC:winxfltr.obj - 0003:00004628 __XcptActTabCount 00419628 LIBC:winxfltr.obj - 0003:0000462c __fpecode 0041962c LIBC:winxfltr.obj - 0003:00004630 __NLG_Destination 00419630 LIBC:exsup.obj - 0003:000046d0 __cfltcvt_tab 004196d0 LIBC:cmiscdat.obj - 0003:000046e8 __pctype 004196e8 LIBC:ctype.obj - 0003:000046ec __pwctype 004196ec LIBC:ctype.obj - 0003:000046f0 __ctype 004196f0 LIBC:ctype.obj - 0003:00004a70 ___mb_cur_max 00419a70 LIBC:nlsdata1.obj - 0003:00004a74 ___decimal_point 00419a74 LIBC:nlsdata1.obj - 0003:00004a78 ___decimal_point_length 00419a78 LIBC:nlsdata1.obj - 0003:000054b0 _rtadr0 0041a4b0 lkdata.obj - 0003:000054b4 _rtadr1 0041a4b4 lkdata.obj - 0003:000054b8 _rtadr2 0041a4b8 lkdata.obj - 0003:000054bc _obj_flag 0041a4bc lkdata.obj - 0003:000054e8 __cflush 0041a4e8 LIBC:_file.obj - 0003:000054ec _errno 0041a4ec LIBC:crt0dat.obj - 0003:000054f0 __doserrno 0041a4f0 LIBC:crt0dat.obj - 0003:000054f4 __umaskval 0041a4f4 LIBC:crt0dat.obj - 0003:000054f8 __osver 0041a4f8 LIBC:crt0dat.obj - 0003:000054fc __winver 0041a4fc LIBC:crt0dat.obj - 0003:00005500 __winmajor 0041a500 LIBC:crt0dat.obj - 0003:00005504 __winminor 0041a504 LIBC:crt0dat.obj - 0003:00005508 ___argc 0041a508 LIBC:crt0dat.obj - 0003:0000550c ___argv 0041a50c LIBC:crt0dat.obj - 0003:00005510 ___wargv 0041a510 LIBC:crt0dat.obj - 0003:00005514 __environ 0041a514 LIBC:crt0dat.obj - 0003:00005518 ___initenv 0041a518 LIBC:crt0dat.obj - 0003:0000551c __wenviron 0041a51c LIBC:crt0dat.obj - 0003:00005520 ___winitenv 0041a520 LIBC:crt0dat.obj - 0003:00005524 __pgmptr 0041a524 LIBC:crt0dat.obj - 0003:00005528 __wpgmptr 0041a528 LIBC:crt0dat.obj - 0003:0000552c __exitflag 0041a52c LIBC:crt0dat.obj - 0003:00005530 __C_Termination_Done 0041a530 LIBC:crt0dat.obj - 0003:00005534 __C_Exit_Done 0041a534 LIBC:crt0dat.obj - 0003:00005538 __aenvptr 0041a538 LIBC:crt0.obj - 0003:0000553c __wenvptr 0041a53c LIBC:crt0.obj - 0003:00005540 ___error_mode 0041a540 LIBC:crt0.obj - 0003:00005544 __stdbuf 0041a544 LIBC:_sftbuf.obj - 0003:00005550 __newmode 0041a550 LIBC:_newmode.obj - 0003:00005554 ?_pnhHeap@@3P6AHI@ZA 0041a554 LIBC:handler.obj - 0003:00005558 __pxcptinfoptrs 0041a558 LIBC:winxfltr.obj - 0003:00005664 __adbgmsg 0041a664 LIBC:crt0msg.obj - 0003:00005668 __commode 0041a668 LIBC:ncommode.obj - 0003:0000567c ___lc_handle 0041a67c LIBC:nlsdata2.obj - 0003:00005694 ___lc_codepage 0041a694 LIBC:nlsdata2.obj - 0003:00005698 ___lc_collate_cp 0041a698 LIBC:nlsdata2.obj - 0003:0000569c __fmode 0041a69c LIBC:txtmode.obj - 0003:000056a8 _uflag 0041a6a8 - 0003:0000578c _hilo 0041a78c - 0003:000057a0 _rtbuf 0041a7a0 - 0003:000057f0 _rtcnt 0041a7f0 - 0003:00005800 _rtflg 0041a800 - 0003:00005840 _lbfhead 0041a840 - 0003:00005860 _symhash 0041a860 - 0003:00005960 _cfp 0041a960 - 0003:00005964 _bsp 0041a964 - 0003:00005968 _axp 0041a968 - 0003:0000596c _lbnhead 0041a96c - 0003:00005970 _gcntr 0041a970 - 0003:00005974 _filep 0041a974 - 0003:00005978 _gsp 0041a978 - 0003:0000597c _globlp 0041a97c - 0003:00005980 _lfp 0041a980 - 0003:00005984 _mfp 0041a984 - 0003:00005988 _a_mask 0041a988 - 0003:0000598c _line 0041a98c - 0003:00005990 _lop 0041a990 - 0003:000059a0 _rtval 0041a9a0 - 0003:000059e0 _ofp 0041a9e0 - 0003:000059e4 _headp 0041a9e4 - 0003:000059e8 _zflag 0041a9e8 - 0003:000059ec _rfp 0041a9ec - 0003:000059f0 _oflag 0041a9f0 - 0003:00005a00 _sdp 0041aa00 - 0003:00005a0c _sfp 0041aa0c - 0003:00005a10 _areap 0041aa10 - 0003:00005a14 _tfp 0041aa14 - 0003:00005a18 _page 0041aa18 - 0003:00005a1c _pass 0041aa1c - 0003:00005a20 _ap 0041aa20 - 0003:00005a24 _outfp 0041aa24 - 0003:00005a40 _ib 0041aa40 - 0003:00005b08 _wflag 0041ab08 - 0003:00005b0c _hp 0041ab0c - 0003:00005b10 _ip 0041ab10 - 0003:00005b20 _rb 0041ab20 - 0003:00005be8 _rp 0041abe8 - 0003:00005bec _a_bytes 0041abec - 0003:00005bf0 _gline 0041abf0 - 0003:00005c00 _rerr 0041ac00 - 0003:00005c14 _pflag 0041ac14 - 0003:00005c18 _s_mask 0041ac18 - 0003:00005c1c _basep 0041ac1c - 0003:00005c20 _lbphead 0041ac20 - 0003:00005c24 _xflag 0041ac24 - 0003:00005c28 _startp 0041ac28 - 0003:00005c2c _radix 0041ac2c - 0003:00005c30 _mflag 0041ac30 - 0003:00005c34 _linkp 0041ac34 - 0003:00005c38 _objflg 0041ac38 - 0003:00005c3c _lkerr 0041ac3c - 0003:00005c40 _v_mask 0041ac40 - 0003:00005c44 ___mbcodepage 0041ac44 - 0003:00005cc0 ___mbulinfo 0041acc0 - 0003:00005ccc ___ismbcodepage 0041accc - 0003:00005ce0 __mbcasemap 0041ace0 - 0003:00005de0 __mbctype 0041ade0 - 0003:00005ee4 ___mblcid 0041aee4 - 0003:00005ee8 ___sbh_sizeHeaderList 0041aee8 - 0003:00005efc ___sbh_indGroupDefer 0041aefc - 0003:00005f00 ___sbh_pHeaderScan 0041af00 - 0003:00005f04 ___sbh_initialized 0041af04 - 0003:00005f08 ___sbh_pHeaderDefer 0041af08 - 0003:00005f0c ___sbh_cntHeaderList 0041af0c - 0003:00005f10 ___sbh_pHeaderList 0041af10 - 0003:00005f14 ___sbh_threshold 0041af14 - 0003:00005f18 __crtheap 0041af18 - 0003:00005f28 ___active_heap 0041af28 - 0003:00005f40 ___pioinfo 0041af40 - 0003:0000607c __nhandle 0041b07c - 0003:00006080 __acmdln 0041b080 - 0003:0000608c ___env_initialized 0041b08c - 0003:0000609c ___mbctype_initialized 0041b09c - 0003:000060a0 ___onexitend 0041b0a0 - 0003:000060a4 ___onexitbegin 0041b0a4 - 0003:000060a8 __FPinit 0041b0a8 - 0003:000060ac ___piob 0041b0ac - 0003:00006400 __bufin 0041b400 - 0003:00007400 __nstream 0041c400 - 0004:00000000 __IMPORT_DESCRIPTOR_KERNEL32 0041d000 kernel32:KERNEL32.dll - 0004:00000014 __NULL_IMPORT_DESCRIPTOR 0041d014 kernel32:KERNEL32.dll - 0004:00000134 __imp__WriteFile@20 0041d134 kernel32:KERNEL32.dll - 0004:00000138 __imp__HeapAlloc@12 0041d138 kernel32:KERNEL32.dll - 0004:0000013c __imp__ExitProcess@4 0041d13c kernel32:KERNEL32.dll - 0004:00000140 __imp__TerminateProcess@8 0041d140 kernel32:KERNEL32.dll - 0004:00000144 __imp__GetCurrentProcess@0 0041d144 kernel32:KERNEL32.dll - 0004:00000148 __imp__GetCommandLineA@0 0041d148 kernel32:KERNEL32.dll - 0004:0000014c __imp__GetVersion@0 0041d14c kernel32:KERNEL32.dll - 0004:00000150 __imp__SetHandleCount@4 0041d150 kernel32:KERNEL32.dll - 0004:00000154 __imp__GetStdHandle@4 0041d154 kernel32:KERNEL32.dll - 0004:00000158 __imp__GetFileType@4 0041d158 kernel32:KERNEL32.dll - 0004:0000015c __imp__GetStartupInfoA@4 0041d15c kernel32:KERNEL32.dll - 0004:00000160 __imp__GetLastError@0 0041d160 kernel32:KERNEL32.dll - 0004:00000164 __imp__CloseHandle@4 0041d164 kernel32:KERNEL32.dll - 0004:00000168 __imp__GetModuleHandleA@4 0041d168 kernel32:KERNEL32.dll - 0004:0000016c __imp__GetModuleFileNameA@12 0041d16c kernel32:KERNEL32.dll - 0004:00000170 __imp__GetEnvironmentVariableA@12 0041d170 kernel32:KERNEL32.dll - 0004:00000174 __imp__GetVersionExA@4 0041d174 kernel32:KERNEL32.dll - 0004:00000178 __imp__HeapDestroy@4 0041d178 kernel32:KERNEL32.dll - 0004:0000017c __imp__HeapCreate@12 0041d17c kernel32:KERNEL32.dll - 0004:00000180 __imp__VirtualFree@12 0041d180 kernel32:KERNEL32.dll - 0004:00000184 __imp__VirtualAlloc@16 0041d184 kernel32:KERNEL32.dll - 0004:00000188 __imp__HeapReAlloc@16 0041d188 kernel32:KERNEL32.dll - 0004:0000018c __imp__IsBadWritePtr@8 0041d18c kernel32:KERNEL32.dll - 0004:00000190 __imp__SetFilePointer@16 0041d190 kernel32:KERNEL32.dll - 0004:00000194 __imp__HeapFree@12 0041d194 kernel32:KERNEL32.dll - 0004:00000198 __imp__UnhandledExceptionFilter@4 0041d198 kernel32:KERNEL32.dll - 0004:0000019c __imp__FreeEnvironmentStringsA@4 0041d19c kernel32:KERNEL32.dll - 0004:000001a0 __imp__FreeEnvironmentStringsW@4 0041d1a0 kernel32:KERNEL32.dll - 0004:000001a4 __imp__WideCharToMultiByte@32 0041d1a4 kernel32:KERNEL32.dll - 0004:000001a8 __imp__GetEnvironmentStrings@0 0041d1a8 kernel32:KERNEL32.dll - 0004:000001ac __imp__GetEnvironmentStringsW@0 0041d1ac kernel32:KERNEL32.dll - 0004:000001b0 __imp__RtlUnwind@16 0041d1b0 kernel32:KERNEL32.dll - 0004:000001b4 __imp__FlushFileBuffers@4 0041d1b4 kernel32:KERNEL32.dll - 0004:000001b8 __imp__SetStdHandle@8 0041d1b8 kernel32:KERNEL32.dll - 0004:000001bc __imp__ReadFile@20 0041d1bc kernel32:KERNEL32.dll - 0004:000001c0 __imp__CreateFileA@28 0041d1c0 kernel32:KERNEL32.dll - 0004:000001c4 __imp__MultiByteToWideChar@24 0041d1c4 kernel32:KERNEL32.dll - 0004:000001c8 __imp__GetCPInfo@8 0041d1c8 kernel32:KERNEL32.dll - 0004:000001cc __imp__GetACP@0 0041d1cc kernel32:KERNEL32.dll - 0004:000001d0 __imp__GetOEMCP@0 0041d1d0 kernel32:KERNEL32.dll - 0004:000001d4 __imp__GetProcAddress@8 0041d1d4 kernel32:KERNEL32.dll - 0004:000001d8 __imp__LoadLibraryA@4 0041d1d8 kernel32:KERNEL32.dll - 0004:000001dc __imp__SetEndOfFile@4 0041d1dc kernel32:KERNEL32.dll - 0004:000001e0 __imp__GetStringTypeA@20 0041d1e0 kernel32:KERNEL32.dll - 0004:000001e4 __imp__GetStringTypeW@16 0041d1e4 kernel32:KERNEL32.dll - 0004:000001e8 __imp__LCMapStringA@24 0041d1e8 kernel32:KERNEL32.dll - 0004:000001ec __imp__LCMapStringW@24 0041d1ec kernel32:KERNEL32.dll - 0004:000001f0 \177KERNEL32_NULL_THUNK_DATA 0041d1f0 kernel32:KERNEL32.dll + 0001:00000370 _newarea 00401370 f lkarea.obj + 0001:00000497 _lkparea 00401497 f lkarea.obj + 0001:000005c4 _lnkarea 004015c4 f lkarea.obj + 0001:000007a8 _lnksect 004017a8 f lkarea.obj + 0001:00000ee0 _eval 00401ee0 f lkeval.obj + 0001:00000f68 _expr 00401f68 f lkeval.obj + 0001:000011aa _term 004021aa f lkeval.obj + 0001:0000151a _digit 0040251a f lkeval.obj + 0001:000015cf _oprio 004025cf f lkeval.obj + 0001:00001820 _newhead 00402820 f lkhead.obj + 0001:00001929 _module 00402929 f lkhead.obj + 0001:00001a20 _getid 00402a20 f lklex.obj + 0001:00001a8c _getfid 00402a8c f lklex.obj + 0001:00001adf _getnb 00402adf f lklex.obj + 0001:00001b00 _skip 00402b00 f lklex.obj + 0001:00001b3a _get 00402b3a f lklex.obj + 0001:00001b68 _unget 00402b68 f lklex.obj + 0001:00001b80 _getmap 00402b80 f lklex.obj + 0001:00001cd0 _getline 00402cd0 f lklex.obj + 0001:00001f62 _more 00402f62 f lklex.obj + 0001:00001f9f _endline 00402f9f f lklex.obj + 0001:00002140 _addpath 00403140 f lklibr.obj + 0001:00002223 _addlib 00403223 f lklibr.obj + 0001:00002285 _addfile 00403285 f lklibr.obj + 0001:0000258a _search 0040358a f lklibr.obj + 0001:0000260b _fndsym 0040360b f lklibr.obj + 0001:0000274c _buildlibraryindex 0040374c f lklibr.obj + 0001:00002c59 _buildlibraryindexfile 00403c59 f lklibr.obj + 0001:00002e2c _library 00403e2c f lklibr.obj + 0001:00002e69 _loadfile 00403e69 f lklibr.obj + 0001:000032e0 _newpag 004042e0 f lklist.obj + 0001:00003322 _dgt 00404322 f lklist.obj + 0001:0000336f _slew 0040436f f lklist.obj + 0001:0000397b _lstarea 0040497b f lklist.obj + 0001:00003ee7 _lkulist 00404ee7 f lklist.obj + 0001:0000401c _lkalist 0040501c f lklist.obj + 0001:00004320 _lkglist 00405320 f lklist.obj + 0001:00004d00 _main 00405d00 f lkmain.obj + 0001:0000505f _lkexit 0040605f f lkmain.obj + 0001:000050ef _link 004060ef f lkmain.obj + 0001:000053a8 _map 004063a8 f lkmain.obj + 0001:000056b1 _parse 004066b1 f lkmain.obj + 0001:00005cb6 _doparse 00406cb6 f lkmain.obj + 0001:00005d58 _bassav 00406d58 f lkmain.obj + 0001:00005dea _setbas 00406dea f lkmain.obj + 0001:00006133 _gblsav 00407133 f lkmain.obj + 0001:000061c5 _setgbl 004071c5 f lkmain.obj + 0001:0000632a _afile 0040732a f lkmain.obj + 0001:000063ff _afilex 004073ff f lkmain.obj + 0001:00006554 _fndidx 00407554 f lkmain.obj + 0001:000065ca _usage 004075ca f lkmain.obj + 0001:00006c80 _lkout 00407c80 f lkout.obj + 0001:00006cc2 _ixx 00407cc2 f lkout.obj + 0001:00006e72 _iflush 00407e72 f lkout.obj + 0001:00006ff0 _sxx 00407ff0 f lkout.obj + 0001:000071ba _sflush 004081ba f lkout.obj + 0001:00007490 _reloc 00408490 f lkrloc.obj + 0001:00007520 _relt 00408520 f lkrloc.obj + 0001:00007573 _relr 00408573 f lkrloc.obj + 0001:00007ba1 _relp 00408ba1 f lkrloc.obj + 0001:00007da5 _rele 00408da5 f lkrloc.obj + 0001:00007dd0 _evword 00408dd0 f lkrloc.obj + 0001:00007e16 _adb_1b 00408e16 f lkrloc.obj + 0001:00007e3c _adb_2b 00408e3c f lkrloc.obj + 0001:00007ef2 _adb_3b 00408ef2 f lkrloc.obj + 0001:00008002 _adb_4b 00409002 f lkrloc.obj + 0001:0000816b _adb_xb 0040916b f lkrloc.obj + 0001:000082a2 _adb_lo 004092a2 f lkrloc.obj + 0001:0000831e _adb_hi 0040931e f lkrloc.obj + 0001:0000839a _adb_byte3 0040939a f lkrloc.obj + 0001:00008416 _adb_byte4 00409416 f lkrloc.obj + 0001:00008492 _adw_xb 00409492 f lkrloc.obj + 0001:00008501 _relerr 00409501 f lkrloc.obj + 0001:00008533 _errdmp 00409533 f lkrloc.obj + 0001:000086b8 _prntval 004096b8 f lkrloc.obj + 0001:00008777 _relerp 00409777 f lkrloc.obj + 0001:000087a9 _erpdmp 004097a9 f lkrloc.obj + 0001:00008d30 _syminit 00409d30 f lksym.obj + 0001:00008d5c _newsym 00409d5c f lksym.obj + 0001:00008fbf _lkpsym 00409fbf f lksym.obj + 0001:00009066 _symval 0040a066 f lksym.obj + 0001:00009092 _symdef 0040a092 f lksym.obj + 0001:00009109 _symmod 0040a109 f lksym.obj + 0001:000091bf _symeq 0040a1bf f lksym.obj + 0001:00009264 _hash 0040a264 f lksym.obj + 0001:000092c5 _strsto 0040a2c5 f lksym.obj + 0001:00009344 _new 0040a344 f lksym.obj + 0001:00009564 _fprintf 0040a564 f LIBC:fprintf.obj + 0001:00009596 ___initstdio 0040a596 f LIBC:_file.obj + 0001:0000963b ___endstdio 0040a63b f LIBC:_file.obj + 0001:00009650 _strcpy 0040a650 f LIBC:strcat.obj + 0001:00009660 _strcat 0040a660 f LIBC:strcat.obj + 0001:00009740 _strlen 0040a740 f LIBC:strlen.obj + 0001:000097bb _fclose 0040a7bb f LIBC:fclose.obj + 0001:00009811 _fgets 0040a811 f LIBC:fgets.obj + 0001:00009868 _printf 0040a868 f LIBC:printf.obj + 0001:00009899 _fflush 0040a899 f LIBC:fflush.obj + 0001:000098d4 __flush 0040a8d4 f LIBC:fflush.obj + 0001:00009930 __flushall 0040a930 f LIBC:fflush.obj + 0001:000099a6 _free 0040a9a6 f LIBC:free.obj + 0001:00009a0f __fsopen 0040aa0f f LIBC:fopen.obj + 0001:00009a2f _fopen 0040aa2f f LIBC:fopen.obj + 0001:00009a42 _sprintf 0040aa42 f LIBC:sprintf.obj + 0001:00009a94 _malloc 0040aa94 f LIBC:malloc.obj + 0001:00009aa6 __nh_malloc 0040aaa6 f LIBC:malloc.obj + 0001:00009ad2 __heap_alloc 0040aad2 f LIBC:malloc.obj + 0001:00009b60 _strchr 0040ab60 f LIBC:strchr.obj + 0001:00009b66 ___from_strstr_to_strchr 0040ab66 f LIBC:strchr.obj + 0001:00009c20 _strcmp 0040ac20 f LIBC:strcmp.obj + 0001:00009ca4 _sscanf 0040aca4 f LIBC:sscanf.obj + 0001:00009cd8 __flsbuf 0040acd8 f LIBC:_flsbuf.obj + 0001:00009df0 _strncpy 0040adf0 f LIBC:strncpy.obj + 0001:00009eee __cinit 0040aeee f LIBC:crt0dat.obj + 0001:00009f1b _exit 0040af1b f LIBC:crt0dat.obj + 0001:00009f2c __exit 0040af2c f LIBC:crt0dat.obj + 0001:00009f3d __cexit 0040af3d f LIBC:crt0dat.obj + 0001:00009f4c __c_exit 0040af4c f LIBC:crt0dat.obj + 0001:0000a010 _strrchr 0040b010 f LIBC:strrchr.obj + 0001:0000a037 _mainCRTStartup 0040b037 f LIBC:crt0.obj + 0001:0000a116 __amsg_exit 0040b116 f LIBC:crt0.obj + 0001:0000a15f __stbuf 0040b15f f LIBC:_sftbuf.obj + 0001:0000a1ec __ftbuf 0040b1ec f LIBC:_sftbuf.obj + 0001:0000a229 __output 0040b229 f LIBC:output.obj + 0001:0000aa33 __ioinit 0040ba33 f LIBC:ioinit.obj + 0001:0000abde __ioterm 0040bbde f LIBC:ioinit.obj + 0001:0000ac01 _calloc 0040bc01 f LIBC:calloc.obj + 0001:0000acb2 __fcloseall 0040bcb2 f LIBC:closeall.obj + 0001:0000ad0a __close 0040bd0a f LIBC:close.obj + 0001:0000adbd __freebuf 0040bdbd f LIBC:_freebuf.obj + 0001:0000ade8 __filbuf 0040bde8 f LIBC:_filbuf.obj + 0001:0000aec1 __commit 0040bec1 f LIBC:commit.obj + 0001:0000af18 __write 0040bf18 f LIBC:write.obj + 0001:0000b0c5 __GetLinkerVersion 0040c0c5 f LIBC:heapinit.obj + 0001:0000b0f2 ___heap_select 0040c0f2 f LIBC:heapinit.obj + 0001:0000b23a __heap_init 0040c23a f LIBC:heapinit.obj + 0001:0000b297 __heap_term 0040c297 f LIBC:heapinit.obj + 0001:0000b33f __get_sbh_threshold 0040c33f f LIBC:sbheap.obj + 0001:0000b35e __set_sbh_threshold 0040c35e f LIBC:sbheap.obj + 0001:0000b411 ___sbh_heap_init 0040c411 f LIBC:sbheap.obj + 0001:0000b459 ___sbh_find_block 0040c459 f LIBC:sbheap.obj + 0001:0000b484 ___sbh_free_block 0040c484 f LIBC:sbheap.obj + 0001:0000b7ad ___sbh_alloc_block 0040c7ad f LIBC:sbheap.obj + 0001:0000bab6 ___sbh_alloc_new_region 0040cab6 f LIBC:sbheap.obj + 0001:0000bb67 ___sbh_alloc_new_group 0040cb67 f LIBC:sbheap.obj + 0001:0000bc62 ___sbh_resize_block 0040cc62 f LIBC:sbheap.obj + 0001:0000bf58 ___sbh_heapmin 0040cf58 f LIBC:sbheap.obj + 0001:0000c029 ___sbh_heap_check 0040d029 f LIBC:sbheap.obj + 0001:0000c358 __get_old_sbh_threshold 0040d358 f LIBC:sbheap.obj + 0001:0000c35e __set_old_sbh_threshold 0040d35e f LIBC:sbheap.obj + 0001:0000c37a ___old_sbh_new_region 0040d37a f LIBC:sbheap.obj + 0001:0000c4be ___old_sbh_release_region 0040d4be f LIBC:sbheap.obj + 0001:0000c514 ___old_sbh_decommit_pages 0040d514 f LIBC:sbheap.obj + 0001:0000c5d6 ___old_sbh_find_block 0040d5d6 f LIBC:sbheap.obj + 0001:0000c62d ___old_sbh_free_block 0040d62d f LIBC:sbheap.obj + 0001:0000c672 ___old_sbh_alloc_block 0040d672 f LIBC:sbheap.obj + 0001:0000c87a ___old_sbh_alloc_block_from_page 0040d87a f LIBC:sbheap.obj + 0001:0000c99e ___old_sbh_resize_block 0040d99e f LIBC:sbheap.obj + 0001:0000ca47 ___old_sbh_heap_check 0040da47 f LIBC:sbheap.obj + 0001:0000cba5 __openfile 0040dba5 f LIBC:_open.obj + 0001:0000cd15 __getstream 0040dd15 f LIBC:stream.obj + 0001:0000cd8d ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z 0040dd8d f LIBC:handler.obj + 0001:0000cd9d ?_query_new_handler@@YAP6AHI@ZXZ 0040dd9d f LIBC:handler.obj + 0001:0000cda3 __callnewh 0040dda3 f LIBC:handler.obj + 0001:0000cdbe __input 0040ddbe f LIBC:input.obj + 0001:0000d86f __lseek 0040e86f f LIBC:lseek.obj + 0001:0000d909 __getbuf 0040e909 f LIBC:_getbuf.obj + 0001:0000d94d __isatty 0040e94d f LIBC:isatty.obj + 0001:0000d973 __XcptFilter 0040e973 f LIBC:winxfltr.obj + 0001:0000daf7 __setenvp 0040eaf7 f LIBC:stdenvp.obj + 0001:0000dbb0 __setargv 0040ebb0 f LIBC:stdargv.obj + 0001:0000ddfd ___crtGetEnvironmentStringsA 0040edfd f LIBC:a_env.obj + 0001:0000df30 __global_unwind2 0040ef30 f LIBC:exsup.obj + 0001:0000df72 __local_unwind2 0040ef72 f LIBC:exsup.obj + 0001:0000dfca __NLG_Return2 0040efca f LIBC:exsup.obj + 0001:0000dfda __abnormal_termination 0040efda f LIBC:exsup.obj + 0001:0000dffd __NLG_Notify1 0040effd f LIBC:exsup.obj + 0001:0000e006 __NLG_Notify 0040f006 f LIBC:exsup.obj + 0001:0000e019 __NLG_Dispatch 0040f019 f LIBC:exsup.obj + 0001:0000e028 __except_handler3 0040f028 f LIBC:exsup3.obj + 0001:0000e0e5 __seh_longjmp_unwind@4 0040f0e5 f LIBC:exsup3.obj + 0001:0000e100 __FF_MSGBANNER 0040f100 f LIBC:crt0msg.obj + 0001:0000e139 __NMSG_WRITE 0040f139 f LIBC:crt0msg.obj + 0001:0000e28c __GET_RTERRMSG 0040f28c f LIBC:crt0msg.obj + 0001:0000e2bd _wctomb 0040f2bd f LIBC:wctomb.obj + 0001:0000e330 __aulldiv 0040f330 f LIBC:ulldiv.obj + 0001:0000e3a0 __aullrem 0040f3a0 f LIBC:ullrem.obj + 0001:0000e420 _memset 0040f420 f LIBC:memset.obj + 0001:0000e478 __dosmaperr 0040f478 f LIBC:dosmap.obj + 0001:0000e4df __alloc_osfhnd 0040f4df f LIBC:osfinfo.obj + 0001:0000e574 __set_osfhnd 0040f574 f LIBC:osfinfo.obj + 0001:0000e5eb __free_osfhnd 0040f5eb f LIBC:osfinfo.obj + 0001:0000e665 __get_osfhandle 0040f665 f LIBC:osfinfo.obj + 0001:0000e6a2 __open_osfhandle 0040f6a2 f LIBC:osfinfo.obj + 0001:0000e73f __read 0040f73f f LIBC:read.obj + 0001:0000e935 _strtol 0040f935 f LIBC:strtol.obj + 0001:0000eb54 _strtoul 0040fb54 f LIBC:strtol.obj + 0001:0000eb70 _strstr 0040fb70 f LIBC:strstr.obj + 0001:0000ebf0 _strncmp 0040fbf0 f LIBC:strncmp.obj + 0001:0000ec30 __alloca_probe 0040fc30 f LIBC:chkstk.obj + 0001:0000ec30 __chkstk 0040fc30 f LIBC:chkstk.obj + 0001:0000ec60 _memmove 0040fc60 f LIBC:memmove.obj + 0001:0000ef95 __open 0040ff95 f LIBC:open.obj + 0001:0000efac __sopen 0040ffac f LIBC:open.obj + 0001:0000f265 _mbtowc 00410265 f LIBC:mbtowc.obj + 0001:0000f32d _isalpha 0041032d f LIBC:_ctype.obj + 0001:0000f35b _isupper 0041035b f LIBC:_ctype.obj + 0001:0000f383 _islower 00410383 f LIBC:_ctype.obj + 0001:0000f3ab _isdigit 004103ab f LIBC:_ctype.obj + 0001:0000f3d3 _isxdigit 004103d3 f LIBC:_ctype.obj + 0001:0000f400 _isspace 00410400 f LIBC:_ctype.obj + 0001:0000f428 _ispunct 00410428 f LIBC:_ctype.obj + 0001:0000f450 _isalnum 00410450 f LIBC:_ctype.obj + 0001:0000f47e _isprint 0041047e f LIBC:_ctype.obj + 0001:0000f4ac _isgraph 004104ac f LIBC:_ctype.obj + 0001:0000f4da _iscntrl 004104da f LIBC:_ctype.obj + 0001:0000f502 ___isascii 00410502 f LIBC:_ctype.obj + 0001:0000f50f ___toascii 0041050f f LIBC:_ctype.obj + 0001:0000f517 ___iscsymf 00410517 f LIBC:_ctype.obj + 0001:0000f554 ___iscsym 00410554 f LIBC:_ctype.obj + 0001:0000f591 __isctype 00410591 f LIBC:isctype.obj + 0001:0000f610 __allmul 00410610 f LIBC:llmul.obj + 0001:0000f650 __allshl 00410650 f LIBC:llshl.obj + 0001:0000f66f _ungetc 0041066f f LIBC:ungetc.obj + 0001:0000f6dd __setmbcp 004106dd f LIBC:mbctype.obj + 0001:0000faa1 __getmbcp 00410aa1 f LIBC:mbctype.obj + 0001:0000fab1 ___initmbctable 00410ab1 f LIBC:mbctype.obj + 0001:0000fad0 _memcpy 00410ad0 f LIBC:memcpy.obj + 0001:0000fe05 ___crtMessageBoxA 00410e05 f LIBC:crtmbox.obj + 0001:0000fe8e __fptrap 00410e8e f LIBC:crt0fp.obj + 0001:0000fe97 __toupper 00410e97 f LIBC:toupper.obj + 0001:0000fe9f _toupper 00410e9f f LIBC:toupper.obj + 0001:0000ff6b __chsize 00410f6b f LIBC:chsize.obj + 0001:000100b1 ___crtGetStringTypeA 004110b1 f LIBC:a_str.obj + 0001:000101fa ___crtLCMapStringA 004111fa f LIBC:a_map.obj + 0001:00010449 __setmode 00411449 f LIBC:setmode.obj + 0001:000104c0 _HeapFree@12 004114c0 f kernel32:KERNEL32.dll + 0001:000104c6 _HeapAlloc@12 004114c6 f kernel32:KERNEL32.dll + 0001:000104cc _ExitProcess@4 004114cc f kernel32:KERNEL32.dll + 0001:000104d2 _TerminateProcess@8 004114d2 f kernel32:KERNEL32.dll + 0001:000104d8 _GetCurrentProcess@0 004114d8 f kernel32:KERNEL32.dll + 0001:000104de _GetCommandLineA@0 004114de f kernel32:KERNEL32.dll + 0001:000104e4 _GetVersion@0 004114e4 f kernel32:KERNEL32.dll + 0001:000104ea _SetHandleCount@4 004114ea f kernel32:KERNEL32.dll + 0001:000104f0 _GetStdHandle@4 004114f0 f kernel32:KERNEL32.dll + 0001:000104f6 _GetFileType@4 004114f6 f kernel32:KERNEL32.dll + 0001:000104fc _GetStartupInfoA@4 004114fc f kernel32:KERNEL32.dll + 0001:00010502 _GetLastError@0 00411502 f kernel32:KERNEL32.dll + 0001:00010508 _CloseHandle@4 00411508 f kernel32:KERNEL32.dll + 0001:0001050e _FlushFileBuffers@4 0041150e f kernel32:KERNEL32.dll + 0001:00010514 _WriteFile@20 00411514 f kernel32:KERNEL32.dll + 0001:0001051a _GetModuleHandleA@4 0041151a f kernel32:KERNEL32.dll + 0001:00010520 _GetModuleFileNameA@12 00411520 f kernel32:KERNEL32.dll + 0001:00010526 _GetEnvironmentVariableA@12 00411526 f kernel32:KERNEL32.dll + 0001:0001052c _GetVersionExA@4 0041152c f kernel32:KERNEL32.dll + 0001:00010532 _HeapDestroy@4 00411532 f kernel32:KERNEL32.dll + 0001:00010538 _HeapCreate@12 00411538 f kernel32:KERNEL32.dll + 0001:0001053e _VirtualFree@12 0041153e f kernel32:KERNEL32.dll + 0001:00010544 _VirtualAlloc@16 00411544 f kernel32:KERNEL32.dll + 0001:0001054a _HeapReAlloc@16 0041154a f kernel32:KERNEL32.dll + 0001:00010550 _IsBadWritePtr@8 00411550 f kernel32:KERNEL32.dll + 0001:00010556 _SetFilePointer@16 00411556 f kernel32:KERNEL32.dll + 0001:0001055c _UnhandledExceptionFilter@4 0041155c f kernel32:KERNEL32.dll + 0001:00010562 _FreeEnvironmentStringsA@4 00411562 f kernel32:KERNEL32.dll + 0001:00010568 _FreeEnvironmentStringsW@4 00411568 f kernel32:KERNEL32.dll + 0001:0001056e _WideCharToMultiByte@32 0041156e f kernel32:KERNEL32.dll + 0001:00010574 _GetEnvironmentStrings@0 00411574 f kernel32:KERNEL32.dll + 0001:0001057a _GetEnvironmentStringsW@0 0041157a f kernel32:KERNEL32.dll + 0001:00010580 _RtlUnwind@16 00411580 f kernel32:KERNEL32.dll + 0001:00010586 _SetStdHandle@8 00411586 f kernel32:KERNEL32.dll + 0001:0001058c _ReadFile@20 0041158c f kernel32:KERNEL32.dll + 0001:00010592 _CreateFileA@28 00411592 f kernel32:KERNEL32.dll + 0001:00010598 _MultiByteToWideChar@24 00411598 f kernel32:KERNEL32.dll + 0001:0001059e _GetCPInfo@8 0041159e f kernel32:KERNEL32.dll + 0001:000105a4 _GetACP@0 004115a4 f kernel32:KERNEL32.dll + 0001:000105aa _GetOEMCP@0 004115aa f kernel32:KERNEL32.dll + 0001:000105b0 _GetProcAddress@8 004115b0 f kernel32:KERNEL32.dll + 0001:000105b6 _LoadLibraryA@4 004115b6 f kernel32:KERNEL32.dll + 0001:000105bc _SetEndOfFile@4 004115bc f kernel32:KERNEL32.dll + 0001:000105c2 _GetStringTypeA@20 004115c2 f kernel32:KERNEL32.dll + 0001:000105c8 _GetStringTypeW@16 004115c8 f kernel32:KERNEL32.dll + 0001:000105ce _LCMapStringA@24 004115ce f kernel32:KERNEL32.dll + 0001:000105d4 _LCMapStringW@24 004115d4 f kernel32:KERNEL32.dll + 0002:0000002c ___lookuptable 0041502c LIBC:output.obj + 0002:00000088 ??_C@_1O@POHA@?$AA?$CI?$AAn?$AAu?$AAl?$AAl?$AA?$CJ?$AA?$AA@ 00415088 LIBC:output.obj + 0002:00000098 ??_C@_06ONKE@?$CInull?$CJ?$AA@ 00415098 LIBC:output.obj + 0002:000000a0 ??_C@_0BH@PHHF@__GLOBAL_HEAP_SELECTED?$AA@ 004150a0 LIBC:heapinit.obj + 0002:000000b8 ??_C@_0BF@BBGL@__MSVCRT_HEAP_SELECT?$AA@ 004150b8 LIBC:heapinit.obj + 0002:000000d0 ??_C@_0P@GGKG@runtime?5error?5?$AA@ 004150d0 LIBC:crt0msg.obj + 0002:000000e0 ??_C@_02PIMC@?$AN?6?$AA@ 004150e0 LIBC:crt0msg.obj + 0002:000000e4 ??_C@_0O@DELO@TLOSS?5error?$AN?6?$AA@ 004150e4 LIBC:crt0msg.obj + 0002:000000f4 ??_C@_0N@OMLL@SING?5error?$AN?6?$AA@ 004150f4 LIBC:crt0msg.obj + 0002:00000104 ??_C@_0P@OJAK@DOMAIN?5error?$AN?6?$AA@ 00415104 LIBC:crt0msg.obj + 0002:00000114 ??_C@_0CF@EANP@R6028?$AN?6?9?5unable?5to?5initialize?5he@ 00415114 LIBC:crt0msg.obj + 0002:0000013c ??_C@_0DF@ECGN@R6027?$AN?6?9?5not?5enough?5space?5for?5lo@ 0041513c LIBC:crt0msg.obj + 0002:00000174 ??_C@_0DF@FKAC@R6026?$AN?6?9?5not?5enough?5space?5for?5st@ 00415174 LIBC:crt0msg.obj + 0002:000001ac ??_C@_0CG@DPMN@R6025?$AN?6?9?5pure?5virtual?5function?5c@ 004151ac LIBC:crt0msg.obj + 0002:000001d4 ??_C@_0DF@CKIP@R6024?$AN?6?9?5not?5enough?5space?5for?5_o@ 004151d4 LIBC:crt0msg.obj + 0002:0000020c ??_C@_0CJ@GGOE@R6019?$AN?6?9?5unable?5to?5open?5console?5@ 0041520c LIBC:crt0msg.obj + 0002:00000238 ??_C@_0CB@LBOB@R6018?$AN?6?9?5unexpected?5heap?5error?$AN?6@ 00415238 LIBC:crt0msg.obj + 0002:0000025c ??_C@_0CN@FPEG@R6017?$AN?6?9?5unexpected?5multithread?5@ 0041525c LIBC:crt0msg.obj + 0002:0000028c ??_C@_0CM@OBIC@R6016?$AN?6?9?5not?5enough?5space?5for?5th@ 0041528c LIBC:crt0msg.obj + 0002:000002b8 ??_C@_0CB@HPAL@?$AN?6abnormal?5program?5termination?$AN?6@ 004152b8 LIBC:crt0msg.obj + 0002:000002dc ??_C@_0CM@JOOB@R6009?$AN?6?9?5not?5enough?5space?5for?5en@ 004152dc LIBC:crt0msg.obj + 0002:00000308 ??_C@_0CK@OIBL@R6008?$AN?6?9?5not?5enough?5space?5for?5ar@ 00415308 LIBC:crt0msg.obj + 0002:00000334 ??_C@_0CF@LKPB@R6002?$AN?6?9?5floating?5point?5not?5load@ 00415334 LIBC:crt0msg.obj + 0002:0000035c ??_C@_0CF@JPDF@Microsoft?5Visual?5C?$CL?$CL?5Runtime?5Lib@ 0041535c LIBC:crt0msg.obj + 0002:00000384 ??_C@_02JJJH@?6?6?$AA@ 00415384 LIBC:crt0msg.obj + 0002:00000388 ??_C@_0BK@DEOK@Runtime?5Error?$CB?6?6Program?3?5?$AA@ 00415388 LIBC:crt0msg.obj + 0002:000003a4 ??_C@_03NAME@?4?4?4?$AA@ 004153a4 LIBC:crt0msg.obj + 0002:000003a8 ??_C@_0BH@NNCD@?$DMprogram?5name?5unknown?$DO?$AA@ 004153a8 LIBC:crt0msg.obj + 0002:000003c0 ??_C@_0BD@NJFP@GetLastActivePopup?$AA@ 004153c0 LIBC:crtmbox.obj + 0002:000003d4 ??_C@_0BA@GILI@GetActiveWindow?$AA@ 004153d4 LIBC:crtmbox.obj + 0002:000003e4 ??_C@_0M@PKCK@MessageBoxA?$AA@ 004153e4 LIBC:crtmbox.obj + 0002:000003f0 ??_C@_0L@HKL@user32?4dll?$AA@ 004153f0 LIBC:crtmbox.obj + 0002:000003fc ??_C@_01A@?$AA?$AA@ 004153fc LIBC:a_str.obj + 0002:00000400 ??_C@_13A@?$AA?$AA?$AA?$AA@ 00415400 LIBC:a_str.obj + 0003:00000000 ___xc_a 00416000 LIBC:crt0init.obj + 0003:00000104 ___xc_z 00416104 LIBC:crt0init.obj + 0003:00000208 ___xi_a 00416208 LIBC:crt0init.obj + 0003:00000418 ___xi_z 00416418 LIBC:crt0init.obj + 0003:0000051c ___xp_a 0041651c LIBC:crt0init.obj + 0003:00000724 ___xp_z 00416724 LIBC:crt0init.obj + 0003:00000828 ___xt_a 00416828 LIBC:crt0init.obj + 0003:0000092c ___xt_z 0041692c LIBC:crt0init.obj + 0003:00000af4 __abs_ 00416af4 lkdata.obj + 0003:00000af8 _rtaflg 00416af8 lkdata.obj + 0003:00000afc _ctype 00416afc lkdata.obj + 0003:00000b7c _ccase 00416b7c lkdata.obj + 0003:000013fc _usetxt 004173fc lkmain.obj + 0003:00001f0c _errmsg 00417f0c lkrloc.obj + 0003:00002538 __iob 00418538 LIBC:_file.obj + 0003:000027c0 __aexit_rtn 004187c0 LIBC:crt0.obj + 0003:000027c4 ___app_type 004187c4 LIBC:crt0.obj + 0003:000027c8 ___nullstring 004187c8 LIBC:output.obj + 0003:000027cc ___wnullstring 004187cc LIBC:output.obj + 0003:000027d0 ___badioinfo 004187d0 LIBC:ioinit.obj + 0003:000027d8 __amblksiz 004187d8 LIBC:heapinit.obj + 0003:000027e0 ___old_small_block_heap 004187e0 LIBC:sbheap.obj + 0003:00004804 ___old_sbh_threshold 0041a804 LIBC:sbheap.obj + 0003:00004818 __XcptActTab 0041a818 LIBC:winxfltr.obj + 0003:00004890 __First_FPE_Indx 0041a890 LIBC:winxfltr.obj + 0003:00004894 __Num_FPE 0041a894 LIBC:winxfltr.obj + 0003:00004898 __XcptActTabCount 0041a898 LIBC:winxfltr.obj + 0003:0000489c __fpecode 0041a89c LIBC:winxfltr.obj + 0003:000048a0 __NLG_Destination 0041a8a0 LIBC:exsup.obj + 0003:00004940 __cfltcvt_tab 0041a940 LIBC:cmiscdat.obj + 0003:00004958 __pctype 0041a958 LIBC:ctype.obj + 0003:0000495c __pwctype 0041a95c LIBC:ctype.obj + 0003:00004960 __ctype 0041a960 LIBC:ctype.obj + 0003:00004ce0 ___mb_cur_max 0041ace0 LIBC:nlsdata1.obj + 0003:00004ce4 ___decimal_point 0041ace4 LIBC:nlsdata1.obj + 0003:00004ce8 ___decimal_point_length 0041ace8 LIBC:nlsdata1.obj + 0003:0000571c _rtadr0 0041b71c lkdata.obj + 0003:00005720 _rtadr1 0041b720 lkdata.obj + 0003:00005724 _rtadr2 0041b724 lkdata.obj + 0003:00005728 _rtadr3 0041b728 lkdata.obj + 0003:0000572c _obj_flag 0041b72c lkdata.obj + 0003:0000574c _uflag 0041b74c + 0003:00005750 __cflush 0041b750 LIBC:_file.obj + 0003:00005754 _errno 0041b754 LIBC:crt0dat.obj + 0003:00005758 __doserrno 0041b758 LIBC:crt0dat.obj + 0003:0000575c __umaskval 0041b75c LIBC:crt0dat.obj + 0003:00005760 __osver 0041b760 LIBC:crt0dat.obj + 0003:00005764 __winver 0041b764 LIBC:crt0dat.obj + 0003:00005768 __winmajor 0041b768 LIBC:crt0dat.obj + 0003:0000576c __winminor 0041b76c LIBC:crt0dat.obj + 0003:00005770 ___argc 0041b770 LIBC:crt0dat.obj + 0003:00005774 ___argv 0041b774 LIBC:crt0dat.obj + 0003:00005778 ___wargv 0041b778 LIBC:crt0dat.obj + 0003:0000577c __environ 0041b77c LIBC:crt0dat.obj + 0003:00005780 ___initenv 0041b780 LIBC:crt0dat.obj + 0003:00005784 __wenviron 0041b784 LIBC:crt0dat.obj + 0003:00005788 ___winitenv 0041b788 LIBC:crt0dat.obj + 0003:0000578c __pgmptr 0041b78c LIBC:crt0dat.obj + 0003:00005790 __wpgmptr 0041b790 LIBC:crt0dat.obj + 0003:00005794 __exitflag 0041b794 LIBC:crt0dat.obj + 0003:00005798 __C_Termination_Done 0041b798 LIBC:crt0dat.obj + 0003:0000579c __C_Exit_Done 0041b79c LIBC:crt0dat.obj + 0003:000057a0 __aenvptr 0041b7a0 LIBC:crt0.obj + 0003:000057a4 __wenvptr 0041b7a4 LIBC:crt0.obj + 0003:000057a8 ___error_mode 0041b7a8 LIBC:crt0.obj + 0003:000057ac __stdbuf 0041b7ac LIBC:_sftbuf.obj + 0003:000057b8 __newmode 0041b7b8 LIBC:_newmode.obj + 0003:000057bc ?_pnhHeap@@3P6AHI@ZA 0041b7bc LIBC:handler.obj + 0003:000057c0 __pxcptinfoptrs 0041b7c0 LIBC:winxfltr.obj + 0003:000058cc __adbgmsg 0041b8cc LIBC:crt0msg.obj + 0003:000058d0 __commode 0041b8d0 LIBC:ncommode.obj + 0003:000058e4 ___lc_handle 0041b8e4 LIBC:nlsdata2.obj + 0003:000058fc ___lc_codepage 0041b8fc LIBC:nlsdata2.obj + 0003:00005900 ___lc_collate_cp 0041b900 LIBC:nlsdata2.obj + 0003:00005904 __fmode 0041b904 LIBC:txtmode.obj + 0003:00005910 _hilo 0041b910 + 0003:00005914 _rtcnt 0041b914 + 0003:00005918 _afp 0041b918 + 0003:0000591c _lbfhead 0041b91c + 0003:00005920 _libr 0041b920 + 0003:000059d4 _cfp 0041b9d4 + 0003:000059d8 _bsp 0041b9d8 + 0003:000059dc _axp 0041b9dc + 0003:000059e0 _rtbuf 0041b9e0 + 0003:00005a30 _lbnhead 0041ba30 + 0003:00005a34 _gcntr 0041ba34 + 0003:00005a38 _filep 0041ba38 + 0003:00005a3c _gsp 0041ba3c + 0003:00005a40 _afn 0041ba40 + 0003:00005a90 _globlp 0041ba90 + 0003:00005a94 _lfp 0041ba94 + 0003:00005a98 _mfp 0041ba98 + 0003:00005a9c _a_mask 0041ba9c + 0003:00005aa0 _rtflg 0041baa0 + 0003:00005ae0 _symhash 0041bae0 + 0003:00005be0 _line 0041bbe0 + 0003:00005be4 _lop 0041bbe4 + 0003:00005be8 _ofp 0041bbe8 + 0003:00005bec _headp 0041bbec + 0003:00005bf0 _zflag 0041bbf0 + 0003:00005bf4 _rfp 0041bbf4 + 0003:00005bf8 _oflag 0041bbf8 + 0003:00005bfc _sfp 0041bbfc + 0003:00005c00 _rtval 0041bc00 + 0003:00005c40 _sdp 0041bc40 + 0003:00005c4c _areap 0041bc4c + 0003:00005c50 _tfp 0041bc50 + 0003:00005c54 _page 0041bc54 + 0003:00005c58 _pass 0041bc58 + 0003:00005c5c _ap 0041bc5c + 0003:00005c60 _outfp 0041bc60 + 0003:00005c64 _wflag 0041bc64 + 0003:00005c68 _hp 0041bc68 + 0003:00005c6c _ip 0041bc6c + 0003:00005c70 _rp 0041bc70 + 0003:00005c74 _a_bytes 0041bc74 + 0003:00005c78 _gline 0041bc78 + 0003:00005c7c _afptmp 0041bc7c + 0003:00005c80 _ib 0041bc80 + 0003:00005d48 _pflag 0041bd48 + 0003:00005d4c _s_mask 0041bd4c + 0003:00005d50 _basep 0041bd50 + 0003:00005d54 _lbphead 0041bd54 + 0003:00005d58 _xflag 0041bd58 + 0003:00005d5c _startp 0041bd5c + 0003:00005d60 _afntmp 0041bd60 + 0003:00005db0 _radix 0041bdb0 + 0003:00005db4 _mflag 0041bdb4 + 0003:00005db8 _linkp 0041bdb8 + 0003:00005dbc _objflg 0041bdbc + 0003:00005dc0 _rb 0041bdc0 + 0003:00005e88 _lkerr 0041be88 + 0003:00005e8c _v_mask 0041be8c + 0003:00005ea0 _rerr 0041bea0 + 0003:00006088 ___mbcodepage 0041c088 + 0003:00006100 ___mbulinfo 0041c100 + 0003:0000610c ___ismbcodepage 0041c10c + 0003:00006120 __mbcasemap 0041c120 + 0003:00006220 __mbctype 0041c220 + 0003:00006324 ___mblcid 0041c324 + 0003:00006328 ___sbh_sizeHeaderList 0041c328 + 0003:0000633c ___sbh_indGroupDefer 0041c33c + 0003:00006340 ___sbh_pHeaderScan 0041c340 + 0003:00006344 ___sbh_initialized 0041c344 + 0003:00006348 ___sbh_pHeaderDefer 0041c348 + 0003:0000634c ___sbh_cntHeaderList 0041c34c + 0003:00006350 ___sbh_pHeaderList 0041c350 + 0003:00006354 ___sbh_threshold 0041c354 + 0003:00006358 __crtheap 0041c358 + 0003:00006368 ___active_heap 0041c368 + 0003:00006380 ___pioinfo 0041c380 + 0003:000064bc __nhandle 0041c4bc + 0003:000064c0 __acmdln 0041c4c0 + 0003:000064cc ___env_initialized 0041c4cc + 0003:000064dc ___mbctype_initialized 0041c4dc + 0003:000064e0 ___onexitend 0041c4e0 + 0003:000064e4 ___onexitbegin 0041c4e4 + 0003:000064e8 __FPinit 0041c4e8 + 0003:000064ec ___piob 0041c4ec + 0003:00006840 __bufin 0041c840 + 0003:00007840 __nstream 0041d840 + 0004:00000000 __IMPORT_DESCRIPTOR_KERNEL32 0041e000 kernel32:KERNEL32.dll + 0004:00000014 __NULL_IMPORT_DESCRIPTOR 0041e014 kernel32:KERNEL32.dll + 0004:00000134 __imp__HeapFree@12 0041e134 kernel32:KERNEL32.dll + 0004:00000138 __imp__HeapAlloc@12 0041e138 kernel32:KERNEL32.dll + 0004:0000013c __imp__ExitProcess@4 0041e13c kernel32:KERNEL32.dll + 0004:00000140 __imp__TerminateProcess@8 0041e140 kernel32:KERNEL32.dll + 0004:00000144 __imp__GetCurrentProcess@0 0041e144 kernel32:KERNEL32.dll + 0004:00000148 __imp__GetCommandLineA@0 0041e148 kernel32:KERNEL32.dll + 0004:0000014c __imp__GetVersion@0 0041e14c kernel32:KERNEL32.dll + 0004:00000150 __imp__SetHandleCount@4 0041e150 kernel32:KERNEL32.dll + 0004:00000154 __imp__GetStdHandle@4 0041e154 kernel32:KERNEL32.dll + 0004:00000158 __imp__GetFileType@4 0041e158 kernel32:KERNEL32.dll + 0004:0000015c __imp__GetStartupInfoA@4 0041e15c kernel32:KERNEL32.dll + 0004:00000160 __imp__GetLastError@0 0041e160 kernel32:KERNEL32.dll + 0004:00000164 __imp__CloseHandle@4 0041e164 kernel32:KERNEL32.dll + 0004:00000168 __imp__FlushFileBuffers@4 0041e168 kernel32:KERNEL32.dll + 0004:0000016c __imp__WriteFile@20 0041e16c kernel32:KERNEL32.dll + 0004:00000170 __imp__GetModuleHandleA@4 0041e170 kernel32:KERNEL32.dll + 0004:00000174 __imp__GetModuleFileNameA@12 0041e174 kernel32:KERNEL32.dll + 0004:00000178 __imp__GetEnvironmentVariableA@12 0041e178 kernel32:KERNEL32.dll + 0004:0000017c __imp__GetVersionExA@4 0041e17c kernel32:KERNEL32.dll + 0004:00000180 __imp__HeapDestroy@4 0041e180 kernel32:KERNEL32.dll + 0004:00000184 __imp__HeapCreate@12 0041e184 kernel32:KERNEL32.dll + 0004:00000188 __imp__VirtualFree@12 0041e188 kernel32:KERNEL32.dll + 0004:0000018c __imp__VirtualAlloc@16 0041e18c kernel32:KERNEL32.dll + 0004:00000190 __imp__HeapReAlloc@16 0041e190 kernel32:KERNEL32.dll + 0004:00000194 __imp__IsBadWritePtr@8 0041e194 kernel32:KERNEL32.dll + 0004:00000198 __imp__SetFilePointer@16 0041e198 kernel32:KERNEL32.dll + 0004:0000019c __imp__UnhandledExceptionFilter@4 0041e19c kernel32:KERNEL32.dll + 0004:000001a0 __imp__FreeEnvironmentStringsA@4 0041e1a0 kernel32:KERNEL32.dll + 0004:000001a4 __imp__FreeEnvironmentStringsW@4 0041e1a4 kernel32:KERNEL32.dll + 0004:000001a8 __imp__WideCharToMultiByte@32 0041e1a8 kernel32:KERNEL32.dll + 0004:000001ac __imp__GetEnvironmentStrings@0 0041e1ac kernel32:KERNEL32.dll + 0004:000001b0 __imp__GetEnvironmentStringsW@0 0041e1b0 kernel32:KERNEL32.dll + 0004:000001b4 __imp__RtlUnwind@16 0041e1b4 kernel32:KERNEL32.dll + 0004:000001b8 __imp__SetStdHandle@8 0041e1b8 kernel32:KERNEL32.dll + 0004:000001bc __imp__ReadFile@20 0041e1bc kernel32:KERNEL32.dll + 0004:000001c0 __imp__CreateFileA@28 0041e1c0 kernel32:KERNEL32.dll + 0004:000001c4 __imp__MultiByteToWideChar@24 0041e1c4 kernel32:KERNEL32.dll + 0004:000001c8 __imp__GetCPInfo@8 0041e1c8 kernel32:KERNEL32.dll + 0004:000001cc __imp__GetACP@0 0041e1cc kernel32:KERNEL32.dll + 0004:000001d0 __imp__GetOEMCP@0 0041e1d0 kernel32:KERNEL32.dll + 0004:000001d4 __imp__GetProcAddress@8 0041e1d4 kernel32:KERNEL32.dll + 0004:000001d8 __imp__LoadLibraryA@4 0041e1d8 kernel32:KERNEL32.dll + 0004:000001dc __imp__SetEndOfFile@4 0041e1dc kernel32:KERNEL32.dll + 0004:000001e0 __imp__GetStringTypeA@20 0041e1e0 kernel32:KERNEL32.dll + 0004:000001e4 __imp__GetStringTypeW@16 0041e1e4 kernel32:KERNEL32.dll + 0004:000001e8 __imp__LCMapStringA@24 0041e1e8 kernel32:KERNEL32.dll + 0004:000001ec __imp__LCMapStringW@24 0041e1ec kernel32:KERNEL32.dll + 0004:000001f0 \177KERNEL32_NULL_THUNK_DATA 0041e1f0 kernel32:KERNEL32.dll - entry point at 0001:000094a7 + entry point at 0001:0000a037 diff --git a/src/mkutil/link-z80/lkarea.c b/src/mkutil/link-z80/lkarea.c index 723d7c36..72b838ac 100644 --- a/src/mkutil/link-z80/lkarea.c +++ b/src/mkutil/link-z80/lkarea.c @@ -116,6 +116,9 @@ newarea() */ getid(id, -1); lkparea(id); +#if 1 /* Nick */ + axp->m_id = hp->m_id; +#endif /* * Evaluate area size */ @@ -400,13 +403,13 @@ lnkarea() sp->s_addr = ap->a_addr + ap->a_size; sp->s_axp = NULL; sp->s_type |= S_DEF; -#endif - +#else *temp = 'l'; sp = lkpsym(temp, 1); sp->s_addr = ap->a_size; sp->s_axp = NULL; sp->s_type |= S_DEF; +#endif } ap = ap->a_ap; } @@ -448,6 +451,14 @@ register struct area *tap; register a_uint bsize, baddr, bbump; #endif register struct areax *taxp; +#if 1 /* Nick banked area packing */ + register a_uint saddr, spaddr; + register a_uint tsize, taddr; + register a_uint tpsize, tpaddr; + register a_uint tbsize; + register struct areax *ttaxp; + register struct areax **ptaxp, **pttaxp; +#endif size = 0; addr = tap->a_addr; @@ -458,12 +469,21 @@ register struct area *tap; baddr = tap->a_baddr; /* really the threshold for advancing banks */ #endif if ((tap->a_flag&A_PAG) && (addr & 0xFF)) { +#if 1 /* Nick */ + fprintf(stderr, "paged area \"%s\": boundary error\n", tap->a_id); +#else fprintf(stderr, "\n?ASlink-Warning-Paged Area %s Boundary Error\n", tap->a_id); +#endif lkerr++; } +#if 1 /* Nick banked area packing */ + ptaxp = &tap->a_axp; + taxp = *ptaxp; +#else taxp = tap->a_axp; +#endif if (tap->a_flag&A_OVR) { /* * Overlayed sections @@ -504,6 +524,11 @@ register struct area *tap; paddr += bsize; } +#if 1 /* Nick banked area packing */ + saddr = addr; + spaddr = paddr; +#endif + /* if this is the first areax section, we may need to skip */ /* banks which are full of code from an earlier non-banked */ /* area. if this is a subsequent areax section, or the */ @@ -513,19 +538,112 @@ register struct area *tap; while (taxp) { #if 0 - printf("%08x + %08x = %08x, baddr = %08x\n", - bsize, taxp->a_size, bsize + taxp->a_size, baddr); fflush(stdout); + fprintf(stderr, "%08x + %08x = %08x, baddr = %08x %s\n", + bsize, taxp->a_size, bsize + taxp->a_size, baddr, taxp->m_id); +#endif +#if 1 /* Nick banked area packing */ + tsize = 0; + tpsize = 0; + tbsize = tap->a_bsize; /* really the counter for advancing banks */ + + taddr = saddr; + tpaddr = spaddr; + + pttaxp = &tap->a_axp; + ttaxp = *pttaxp; + while (ttaxp != taxp) + { + while ((tbsize + ttaxp->a_size) > baddr) + { + if ((tbsize + taxp->a_size) <= baddr) + { + /* found a spot (first fit) */ + taxp->a_addr = taddr; + taxp->a_paddr = tpaddr; + + *ptaxp = taxp->a_axp; + /* taxp areax does not exist */ + /* anymore (now unlinked it) */ + /* note: *ptaxp may be NULL */ + + taxp->a_axp = ttaxp; + /* prepared taxp areax to be */ + /* linked in before ttaxp ax */ + + *pttaxp = taxp; + /* can now see taxp ax again */ + /* keep going from *ptaxp ax */ + + goto packed_it_in; + } + + bbump = min(tbsize, baddr); + tbsize -= bbump; + + taddr -= bbump; /* go back to start of page */ + tsize -= bbump; /* forget how much we used */ + if (tap->a_iset) /* logical increment set? */ + { + taddr += tap->a_incr; + tsize += tap->a_incr; + } + else + { + taddr += baddr; + tsize += baddr; + } + + tpaddr -= bbump; /* go back to start of page */ + tpsize -= bbump; /* forget how much we used */ + if (tap->a_piset) /* physical increment set? */ + { + tpaddr += tap->a_pincr; + tpsize += tap->a_pincr; + } + else + { + tpaddr += baddr; + tpsize += baddr; + } + } + + /* check we are really mimicking the original address calculations below */ + if (ttaxp->a_addr != taddr) + { + fflush(stdout); + fprintf(stderr, "ttaxp->a_addr = %08x taddr = %08x\n", ttaxp->a_addr, taddr); + } + if (ttaxp->a_paddr != tpaddr) + { + fflush(stdout); + fprintf(stderr, "ttaxp->a_paddr = %08x tpaddr = %08x\n", ttaxp->a_paddr, tpaddr); + } + taddr += ttaxp->a_size; + tpaddr += ttaxp->a_size; + tbsize += ttaxp->a_size; + pttaxp = &ttaxp->a_axp; + ttaxp = *pttaxp; + } #endif + while ((bsize + taxp->a_size) > baddr) { if (bsize == 0) /* already at start of bank? */ { +#if 1 /* Nick */ + fprintf(stderr, "module \"%s\": " + "banked area \"%s\": " + "length error\n", + taxp->m_id, tap->a_id); + lkexit(ER_FATAL); /* should proceed! */ +#else fprintf(stderr, "\n?ASlink-Warning-" "Banked Area %s " "Length Error\n", tap->a_id); +#endif #if 0 fflush(stderr); #endif @@ -568,7 +686,13 @@ register struct area *tap; addr += taxp->a_size; paddr += taxp->a_size; bsize += taxp->a_size; +#if 1 /* Nick banked area packing */ + ptaxp = &taxp->a_axp; + packed_it_in: + taxp = *ptaxp; +#else taxp = taxp->a_axp; +#endif } } #endif @@ -599,9 +723,13 @@ register struct area *tap; tap->a_bsize = bsize; #endif if ((tap->a_flag&A_PAG) && (size > 256)) { +#if 1 /* Nick */ + fprintf(stderr, "paged area \"%s\": length error\n", tap->a_id); +#else fprintf(stderr, "\n?ASlink-Warning-Paged Area %s Length Error\n", tap->a_id); +#endif lkerr++; } } diff --git a/src/mkutil/link-z80/lkarea.obj b/src/mkutil/link-z80/lkarea.obj new file mode 100644 index 0000000000000000000000000000000000000000..9e3bd8201b40a68a03f056435549b1896ffd229c GIT binary patch literal 8220 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 g(fAPgOkL?8%d^ 00010000 + */ int obj_flag = 0; /* Linked file/library object output flag */ int a_bytes; /* REL file T Line address length @@ -179,6 +183,15 @@ FILE *tfp; /* File handle for input * ASxxxx listing file */ +char afn[FILSPC]; /* current input file specification + */ +int afp; /* current input file path length + */ +char afntmp[FILSPC]; /* temporaryr input file specification + */ +int afptmp; /* temporary input file path length + */ + /* * The structures of head, area, areax, and sym are created * as the REL files are read during the first pass of the diff --git a/src/mkutil/link-z80/lkdata.obj b/src/mkutil/link-z80/lkdata.obj new file mode 100644 index 0000000000000000000000000000000000000000..67e7df3844cdd5269a42e44ec0eccc620118df2b GIT binary patch literal 5207 zcmai&TWlOx8OOi%de_de6Wh5pZPI3)IQMw7wiDZNE_Un$H}|RmB*0`lvo}vXdtqkQ zH=smZiwXi>5Q2)E#0wGy3VlG80D;t^zVHANl~NTR5JD9~f`uU4JDTrv zoPXYTHx8c%T-CW6j?X)qFBFZs?b((&bK~m#LMkY3-?)71(#P7S$ax#JLe%99 zSKOXfToD&v8${cdi|2~99U+r+J;U*8oURp?sMft=)bW5u)7gGhqIJ^cf{~XVv|QJ+ zq>8tK45wg7P|I~0k~`K6iW}>-ow%ywP1ECUl$Q;6nXmO^(QH|8%TA@feAlN{?L$2-Z1U7<1P#ZAicaPjls>SB+PH8;G1 z8yTHt%dSR}8ribpu0*8UNv?{Fj9ZECLDXR=9loCV<{0(ZW{syi+f2|_8um!g7TIp4 z_~2#OB-$F@@*s8(Vs}fnS}CksUe@CP9^Isoty>k@9p+uU;c>JNNB1JWyOC?$&s8zX zg?=2H#BM^SI_KHX2eVcccaj_SaYKIf@D9&#ncLiKn48)BzT`t`KE!Vo&as0}UaVE! ztf#O$fMapIhxpJjF#5sGI7tsD;q>bq$nO+>n>735TAPKew+)B5KRs)?WyA6J`D>(S z)yUeG>wO-__>_J0B~6OH1==m{JDL=|2s$e6Cz=$!3_2n1RZWV12RbC~fhI+N2Js4^ zkN%=b(LX^-+}oNIZN=9-f6MmC_dk=OVYo};4rx+!2J|j*XEiBW1nm`fU6Z0E&`EJm zX;M@J?Gfi`QuImCMRCt)QuJlel(?^IQuJNWF>%jpQuGpNOx({jDf%^NRNQYgDf$EG zvbaBLQuKGwqPVv-DeA>y<1umlniTB=T@lAi5hg`x(5$#|O^OykbK({?DS8iRLfrc_ zDJp>uh+EO5XcIIo?rBYmJ_ouW?u(ifeI0a0+_yC;`T=NM+>bRW`UNN>?qyAieha!T z?lnz{{sg)v?oCaK{sB57?q8blY{ZF%#SLjvbO3Z(++j_MCP5F0o6)4`I_P0>w>2rs zg7%5aX;S2ZQsUM$Df$fPwzy|CDf$}dxVUdkJ zMQ?&miTkT2MQ?*<#KkaMnG_9x(&Bb#!We*Vh&!waV*olUZbp-$YoM#*ZfR0<7j#pc zsY#Io+AeNY6UG2EB<@*Fik<`Ejf1)RO-+h^2pSOgq9(i}K)mqoqgOR4dH}-W9`5&= zFc&~0;@;APxsV{bC9YqSqP-wq&G*rMO^Pz0{o+n*Qgj8hOWajWirx=8DDJK%MHSGz zI7gGBkAof+_i0Uvz5-eh_nan0&x0Np_kt#Vqxsd!{l-T3@8kcrP2#%IRl-Mitb23Q zkA_E8d+*_VjL1ef?Xv4Ga!#-?4Mo?uYg~{K(#Yk3P0P zHGJUU$f3hWjvhOH;^b)hRAy{^;`Euxsp+#b=gwcaI6G&UITS~wW$WIGU9MDXA97r; zzPh%)vH5|e58ll__1}+w_#+>E`eW%-Dt&4G4nM9$JMk|`n9Gi_V0IyN-%2d2zDIVjm zq3{+gQTYnvF)mWMFny!%;urkbV0nspi5M+7^#^<1_fm#2J1~W z{ABWm5t9-y)Cz?u9}8rb$}D7fb&aS%3`*WeD=DOi=2&Cn=dc=$;W`4x0(tz(Bxq1N zbNfIHepHAUzjzPEpmLAI$gdrtJS8q!LdG_wGzpvwKQct};HQI#!EYuJqko8yR}Kzw z-%TlR0+}6;CwFjs@PtS5;5lUT1b<*d9w}Kv*X(#GU;Hm#9m545FmNuZ!Gk9FgIfZz R@fd$ehc{jZWE+(x{RfZ6nQs69 literal 0 HcmV?d00001 diff --git a/src/mkutil/link-z80/lkeval.obj b/src/mkutil/link-z80/lkeval.obj new file mode 100644 index 0000000000000000000000000000000000000000..00002e26a6f0b410046763d3f67d282b51a29fa9 GIT binary patch literal 7537 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 = strsto(afn); /* no, use relative path as module name */ +#else hp->m_id = ""; +#endif /* * Set file pointer */ @@ -152,11 +156,32 @@ newhead() VOID module() { +#if 1 /* Nick */ + char fid[FILSPC]; +#else char id[NCPS]; +#endif +#ifdef WIN32 /* Nick */ + char *str; +#endif if (headp) { +#if 1 /* Nick */ + getfid(fid, getnb()); + hp->m_id = strsto(fid); +#else getid(id, -1); hp->m_id = strsto(id); +#endif +#ifdef WIN32 /* Nick */ + for (str = hp->m_id; *str; str++) + { + if (*str == '/') + { + *str = SLASH; + } + } +#endif } else { fprintf(stderr, "No header defined\n"); lkerr++; diff --git a/src/mkutil/link-z80/lkhead.obj b/src/mkutil/link-z80/lkhead.obj new file mode 100644 index 0000000000000000000000000000000000000000..acb52065a89f3a42cc01b944a49af7852e41998d GIT binary patch literal 2946 zcmai0Z){Ul6hCd(x9)AQjtv-rLB}=%gOvhinW$lGRKRR795a5XK406{^=)0-w66me z#KcD9Qi&Mi2Q@Jo@q=+O#6&(R5&w|*iBEpeXw(>u$&kdvm_?`ackX@fwZjkGr04$5 z@1Aqsx#!;Adq+He`uckGP%1#Qhhz&U3r514HEfl30DS8xPOk zC-!$wJN$zHy?5F1cl(k?N-t%sj2S;Ta(rkwR7;#3IdbCgXmmV;r0D=Ph+un;9*iZ< zO`b8cvC^CwD;5&5ndy>cW?~sLJKZ-o5Q$}`(}tc5=i*b3kcTh>8Xh$hg{{C>J zj~as_16wqpL<+DU{W^EVQ=c`?@aNZ(5?oqYS@C1YXQlH^(3hcel|7~xu6ynZcnKpM z@J0M;0xC1PWGQ2Cyao8@u`0fzRbc%p^ahTfGLsx}9R-3sE}LJ|<3)|R>dN{v(?+2X z1lR7S>`SEbY{i+{o;-nk^D54p7KG0=^6Ghx!{3+9r>C+lU^-l;PBU}yAo+q_pc=GX z);McgnzaT@2|kLhmCUSAJ6Xk=Vzd#Xn_*waNwDcQC<;d^rFe{2p-wLtdJ~jRDE>?e zi^i6`8 zy@N5{d5!e0ja2#*XtUt{vXM#=Y=bp|yU#`{9RcbP+%X%e^f(Z5LA;oaRGI?f+#4xt zBb6=ywF&N78>#dXP@~{3+eoE1fz}D`ij7qI0BD=wuGvVXiOTKr?ZDKQU%^xP^SZZ1 z{}4+mHNC~1pcZ>7JPn#3U8+nhl@F4oR-#Ll0QAK>V1(toH_bLqEZgI7du2V-(qyPk z3_D{1IaV18%tx2YPcM_zUKw4!@uT;Y8$~$J4>e7#IMk{LK_^1+UJ=?v24hYXnZnJ( z2bwBBKk=C;#Obn}xfK&eV;7@W9rM7&(X0Qp(KA zD=zmw&|0BggOt7>xuajW=sO_k`-{un0pfk7&>xUZg8v7Sx3fYm9%n|IfOw{D)CJTf z&|V-pqX8f}-$56ZfVPV$b3nZ96?z6}tMGjRs6%isyND~!RyapQo_=Ag&`vP*)C(EF zb;E!A2Ow37LN?M#$QCjn+o=e-g)TyN&}GQ2^d97P`Vg{(aPDRu)z&@myNhds~o)2tHN*`%&Tg_al-MGOK>#|%#mo^=6XaQ z&PW^nqX`=d8ttwN&;I~SeYM&E literal 0 HcmV?d00001 diff --git a/src/mkutil/link-z80/lklex.c b/src/mkutil/link-z80/lklex.c index 228ec57f..f33b5be7 100644 --- a/src/mkutil/link-z80/lklex.c +++ b/src/mkutil/link-z80/lklex.c @@ -416,7 +416,14 @@ getline() register char *fid; loop: if (cfp && cfp->f_type == F_STD) + { +#if 1 /* Nick */ + fflush(stderr); + printf("ASlink >> "); +#else fprintf(stdout, "ASlink >> "); +#endif + } if (sfp == NULL || fgets(ib, sizeof(ib)-2, sfp) == NULL) { obj_flag = 0; @@ -444,6 +451,10 @@ loop: if (cfp && cfp->f_type == F_STD) if (ftype == F_REL) { obj_flag = cfp->f_obj; sfp = afile(fid, "", 0); +#if 1 /* Nick */ + strcpy(afn, afntmp); + afp = afptmp; +#endif if (uflag && (obj_flag == 0) && pass != 0) { if ((tfp = afile(fid, "lst", 0)) != NULL) { if ((rfp = afile(fid, "rst", 1)) == NULL) { @@ -454,10 +465,19 @@ loop: if (cfp && cfp->f_type == F_STD) } gline = 1; } else { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "fatal: invalid file type\n"); +#else fprintf(stderr, "Invalid file type\n"); +#endif lkexit(ER_FATAL); } if (sfp == NULL) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "fatal: no input files\n"); +#endif lkexit(ER_FATAL); } goto loop; diff --git a/src/mkutil/link-z80/lklex.obj b/src/mkutil/link-z80/lklex.obj new file mode 100644 index 0000000000000000000000000000000000000000..9fcb908cf18428c481aa8145c0d6c12289b7eefb GIT binary patch literal 8278 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 ZpX!BW0v^NGpFA|3|GS%B*SMgL{ts32r}Y2; literal 0 HcmV?d00001 diff --git a/src/mkutil/link-z80/lklibr.c b/src/mkutil/link-z80/lklibr.c index a68dad8d..25bcc8a9 100644 --- a/src/mkutil/link-z80/lklibr.c +++ b/src/mkutil/link-z80/lklibr.c @@ -45,6 +45,42 @@ * */ +#ifdef INDEXLIB +typedef struct slibrarysymbol mlibrarysymbol; +typedef struct slibrarysymbol *pmlibrarysymbol; + +struct slibrarysymbol { + char name[40]; + pmlibrarysymbol next; +}; + +typedef struct slibraryfile mlibraryfile; +typedef struct slibraryfile *pmlibraryfile; + +struct slibraryfile { + int loaded; + char *libspc; + char *str; + char relfil[FILSPC]; + char filename[FILSPC]; + pmlibrarysymbol symbols; + pmlibraryfile next; +}; + +#ifdef OTHERSYSTEM + +VOID buildlibraryindex(void); +pmlibraryfile buildlibraryindexfile(pmlibraryfile This, struct lbname *lbnh, + char *str, char *path, char *relfil); + +#else + +VOID buildlibraryindex(); +pmlibraryfile buildlibraryindexfile(); + +#endif +#endif /* INDEXLIB */ + /*)Function VOID addpath() * * The function addpath() creates a linked structure containing @@ -73,8 +109,11 @@ VOID addpath() { struct lbpath *lbph, *lbp; +#ifdef WIN32 /* Nick */ + char *str; +#endif - lbph = (struct lbpath *) new (sizeof(struct lbpath)); + lbph = (struct lbpath *) new(sizeof(struct lbpath)); if (lbphead == NULL) { lbphead = lbph; } else { @@ -84,8 +123,21 @@ addpath() lbp->next = lbph; } unget(getnb()); - lbph->path = (char *) new (strlen(ip)+1); + lbph->path = (char *) new(strlen(ip)+1); strcpy(lbph->path, ip); +#ifdef WIN32 /* Nick */ + for (str = lbph->path; *str; str++) + { + if (*str == '/') + { + *str = SLASH; + } + } +#endif +#if 1 /* Nick */ + fflush(stderr); + printf("addpath \"%s\"\n", lbph->path); +#endif } /*)Function VOID addlib() @@ -166,82 +218,121 @@ addlib() */ VOID -addfile(path,libfil) +addfile(path, libfil) char *path; char *libfil; -{ + { FILE *fp; char *str, *strend; struct lbname *lbnh, *lbn; + int c, l; - if ((path != NULL) && (strchr(libfil,':') == NULL)){ -#if 1 /* Nick */ - str = (char *) malloc (strlen(path) + strlen(libfil) + 6); +#ifdef OTHERSYSTEM + if (path && *libfil != SLASH && strchr(libfil,':') == NULL) +#else + if (path) +#endif + { + str = (char *) malloc(strlen(path) + strlen(libfil) + 6); + if (str == NULL) { + fflush(stdout); + fprintf(stderr, "fatal: can't allocate memory\n"); + lkexit(ER_FATAL); + } strcpy(str, path); - if (*str) + strend = str + strlen(str); +#ifdef OTHERSYSTEM + if (*str && *(strend - 1) != SLASH) { - strend = str + strlen(str) - 1; -#ifdef WIN32 - if (*strend != '\\') - { - strcpy(++strend, "\\"); - } - if (*libfil == '\\') -#else - if (*strend != '/') - { - strcpy(++strend, "/"); - } - if (*libfil == '/') + *strend++ = SLASH; + *strend = '\0'; + } #endif - { - strcpy(strend + 1, libfil + 1); - } - else - { - strcpy(strend + 1, libfil); - } + } + else + { + str = (char *) malloc(strlen(libfil) + 5); + if (str == NULL) { + fflush(stdout); + fprintf(stderr, "fatal: can't allocate memory\n"); + lkexit(ER_FATAL); + } + strend = str; + } + strcpy(strend, libfil); +#ifdef WIN32 /* Nick */ + for (; *strend; strend++) + { + if (*strend == '/') + { + *strend = SLASH; } -#else - str = (char *) malloc (strlen(path) + strlen(libfil) + 5); - strcpy(str,path); - strend = str + strlen(str) - 1; - if ((*libfil == '\\' && *strend == '\\') || - (*libfil == '/' && *strend == '/')) { - *strend = '\0'; } - strcat(str,libfil); #endif - } else { - str = (char *) malloc (strlen(libfil) + 5); - strcpy(str,libfil); - } - if(strchr(str,FSEPX) == NULL) { +#if 1 /* Nick */ + l = strlen(str); + for (c = l - 1; c >= 0; c--) + { + if (str[c] == FSEPX) + { + l = c; + break; + } + if (str[c] == SLASH || str[c] == ':') + { + break; + } + } + if (str[l] == '\0') + { sprintf(&str[strlen(str)], "%clib", FSEPX); - } -/* printf("trying \"%s\"\n", str); */ - if ((fp = fopen(str, "r")) != NULL) { + } +#else + if (strchr(str, FSEPX) == NULL) + { + sprintf(&str[strlen(str)], "%clib", FSEPX); + } +#endif + + if ((fp = fopen(str, "r")) != NULL) + { +#if 1 /* Nick */ + fflush(stderr); + printf("addfile \"%s\"\n", str); +#endif fclose(fp); - lbnh = (struct lbname *) new (sizeof(struct lbname)); - if (lbnhead == NULL) { + lbnh = (struct lbname *) new(sizeof(struct lbname)); + if (lbnhead == NULL) + { lbnhead = lbnh; - } else { + } + else + { lbn = lbnhead; while (lbn->next) + { lbn = lbn->next; + } lbn->next = lbnh; - } - if ((path != NULL) && (strchr(libfil,':') == NULL)){ + } +#ifdef OTHERSYSTEM + if (path && *libfil != SLASH && strchr(libfil,':') == NULL) +#else + if (path) +#endif + { lbnh->path = path; - } - lbnh->libfil = (char *) new (strlen(libfil) + 1); + } + lbnh->libfil = (char *) new(strlen(libfil) + 1); strcpy(lbnh->libfil,libfil); lbnh->libspc = str; lbnh->f_obj = objflg; - } else { + } + else + { free(str); + } } -} /*)Function VOID search() * @@ -385,6 +476,320 @@ search() * is linked. */ +#ifdef INDEXLIB + +/* First entry in the library object symbol cache */ +mlibraryfile libr; + +int +fndsym(name) +char *name; +{ + struct lbfile *lbfh, *lbf; + pmlibraryfile ThisLibr; + pmlibrarysymbol ThisSym = NULL; + + /* Build the index if this is the first call to fndsym */ + if (libr.next==NULL) + buildlibraryindex(); + +#if 0 /* Nick */ + fflush(stderr); + printf("finding \"%s\"\n", name); +#endif + /* Iterate through all library object files */ + ThisLibr = libr.next; + while (ThisLibr) { + + /* Iterate through all symbols in an object file */ + ThisSym = ThisLibr->symbols->next; + + while (ThisSym) { + if (!strcmp(ThisSym->name, name)) { + if (!ThisLibr->loaded) { + /* Object file is not loaded - add it to the list */ + lbfh = (struct lbfile *) new(sizeof(struct lbfile)); + if (lbfhead == NULL) { + lbfhead = lbfh; + } else { + lbf = lbfhead; + while (lbf->next) + lbf = lbf->next; + lbf->next = lbfh; + } + lbfh->libspc = ThisLibr->libspc; + lbfh->filspc = ThisLibr->str; + lbfh->relfil = (char *) new(strlen(ThisLibr->relfil) + 1); + strcpy(lbfh->relfil,ThisLibr->relfil); + loadfile(lbfh->filspc); + ThisLibr->loaded=1; + } + return (1); /* Found the symbol, return */ + } + ThisSym=ThisSym->next; /* Next sym in library */ + } + ThisLibr=ThisLibr->next; /* Next library in list */ + } + return 0; /* Failure - symbol not found in any library */ +}; + +/* buildlibraryindex - build an in-memory cache of the symbols contained in + * the libraries + */ + +VOID +buildlibraryindex() + { + FILE *fp; + struct lbname *lbnh; + char buf[NINPUT+2], *ptr; + char relfil[NINPUT+2], *str, *strend, *path; + pmlibraryfile This; + pmlibrarysymbol ThisSym; + int c, l; + + This=&libr; + + /* Iterate through all library files */ +/*1*/ for (lbnh=lbnhead; lbnh; lbnh=lbnh->next) + { + fp = fopen( lbnh->libspc, "r" ); + if (fp) + { + path=lbnh->path; + + /* + * Read in a line from the library file. + * This is the relative file specification + * for a .REL file in this library. + */ + + ptr = fgets(buf, NINPUT, fp); +/*2*/ while (ptr) + { + ptr[NINPUT+1] = '\0'; + ptr[strlen(ptr) - 1] = '\0'; + strcpy(relfil, ptr); + +#ifdef OTHERSYSTEM + if (path && *relfil != SLASH && + strchr(relfil, ':') == NULL) +#else + if (path) +#endif + { + str = (char *) malloc(strlen(path) + + strlen(relfil) + 6); + if (str == NULL) { + fflush(stdout); + fprintf(stderr, "fatal: " + "can't allocate memory\n"); + lkexit(ER_FATAL); + } + strcpy(str, path); + strend = str + strlen(str); +#ifdef OTHERSYSTEM + if (*str && *(strend - 1) != SLASH) + { + *strend++ = SLASH; + *strend = '\0'; + } +#endif + } + else + { + str = (char *) malloc(strlen(relfil) + + 5); + if (str == NULL) + { + fflush(stdout); + fprintf(stderr, "fatal: " + "can't allocate memory\n"); + lkexit(ER_FATAL); + } + strend = str; + } + strcpy(strend, relfil); +#ifdef WIN32 /* Nick */ + for (; *strend; strend++) + { + if (*strend == '/') + { + *strend = SLASH; + } + } +#endif +#if 1 /* Nick */ + l = strlen(str); + for (c = l - 1; c >= 0; c--) + { + if (str[c] == FSEPX) + { + l = c; + break; + } + if (str[c] == SLASH || str[c] == ':') + { + break; + } + } + if (str[l] == '\0') + { + sprintf(&str[strlen(str)], "%crel", + FSEPX); + } +#else + if (strchr(str, FSEPX) == NULL) + { + sprintf(&str[strlen(str)], "%crel", + FSEPX); + } +#endif + + ptr = fgets(buf, NINPUT, fp); + if (ptr && *ptr == ' ') + { + /* str will now never be freed */ + + This->next = (pmlibraryfile) + new(sizeof(mlibraryfile)); + This=This->next; + This->next = NULL; + This->loaded=-1; + + strcpy(This->filename, str); + ThisSym = This->symbols = + (pmlibrarysymbol) + new(sizeof(mlibrarysymbol)); + ThisSym->next = NULL; + + do + { + ptr[NINPUT+1] = '\0'; + ptr[strlen(ptr) - 1] = '\0'; + + ThisSym->next = + (pmlibrarysymbol) + new(sizeof( + mlibrarysymbol)); + ThisSym=ThisSym->next; + This->loaded=0; + ThisSym->next=NULL; + This->str = str; + strcpy(This->relfil,relfil); + strcpy(ThisSym->name, ptr + 1); + This->libspc = lbnh->libspc; + + ptr = fgets(buf, NINPUT, fp); + } while (ptr && *ptr == ' '); + } + else + { + This = buildlibraryindexfile(This, + lbnh, str, path, relfil); + } + } /* Ends while - processing all in libr */ + fclose(fp); + } /* Closes if library file opened OK */ + } /* Ends good open of libr file */ + } + +pmlibraryfile +buildlibraryindexfile(This, lbnh, str, path, relfil) +pmlibraryfile This; +struct lbname *lbnh; +char *str; +char *path; +char *relfil; +{ + FILE *fp; + char buf[NINPUT+2]; + char symname[NINPUT+2]; + pmlibrarysymbol ThisSym; + char d; + + fp = fopen(str, "r"); + if (fp == NULL) + { + free(str); + return This; + } + /* str will now never be freed, in case we find a symbol below */ + + /* Opened OK - create a new libraryfile object for it */ + This->next = (pmlibraryfile) new(sizeof(mlibraryfile)); +#if 0 /* Nick */ + if (This->next == NULL) { + fflush(stdout); + fprintf(stderr, "fatal: can't allocate memory\n"); + lkexit(ER_FATAL); + } +#endif + + This=This->next; + This->next = NULL; + This->loaded=-1; + + strcpy(This->filename, str); + + ThisSym = This->symbols = (pmlibrarysymbol)new(sizeof(mlibrarysymbol)); + ThisSym->next = NULL; + + /* + * Read in the object file. Look for lines that + * begin with "S" and end with "D". These are + * symbol table definitions. If we find one, see + * if it is our symbol. Make sure we only read in + * our object file and don't go into the next one. + */ + + while (fgets(buf, NINPUT, fp) != NULL) { + + buf[NINPUT+1] = '\0'; + buf[strlen(buf) - 1] = '\0'; + + /* + * Skip everything that's not a symbol record. + */ + if (*buf != 'S') + continue; + + /* + * When a 'T line' is found terminate file scan. + * All 'S line's preceed 'T line's in .REL files. + */ + if (*buf == 'T') + break; + + sscanf(buf, "S %s %c", symname, &d); + + /* If it's an actual symbol, record it */ + if (d == 'D') { + ThisSym->next = (pmlibrarysymbol) + new(sizeof(mlibrarysymbol)); + ThisSym=ThisSym->next; +#if 0 /* Nick */ + if (ThisSym == NULL) { + fflush(stdout); + fprintf(stderr, "fatal: " + "can't allocate memory\n"); + lkexit(ER_FATAL); + } +#endif + This->loaded=0; + ThisSym->next=NULL; + This->str = str; + strcpy(This->relfil,relfil); + strcpy(ThisSym->name, symname); + This->libspc = lbnh->libspc; + } + } /* Closes while - read object file */ + fclose(fp); + return This; +} + +#else /* INDEXLIB */ + int fndsym(name) char *name; @@ -396,17 +801,24 @@ char *name; char buf[NINPUT+2]; char symname[NINPUT]; char *path,*str,*strend; - char c; + int c, l; + char d; int lbscan; /* * Search through every library in the linked list "lbnhead". */ -/*1*/ for (lbnh=lbnhead; lbnh; lbnh=lbnh->next) { + for (lbnh=lbnhead; lbnh; lbnh=lbnh->next) { if ((libfp = fopen(lbnh->libspc, "r")) == NULL) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "fatal: library \"%s\": can't open\n", + lbnh->libspc); +#else fprintf(stderr, "Cannot open library file %s\n", lbnh->libspc); +#endif lkexit(ER_FATAL); } path = lbnh->path; @@ -417,138 +829,167 @@ char *name; * for a .REL file in this library. */ -/*2*/ while (fgets(relfil, NINPUT, libfp) != NULL) { - relfil[NINPUT+1] = '\0'; - relfil[strlen(relfil) - 1] = '\0'; -#if 1 /* Nick */ - if ((path != NULL) && (strchr(relfil,':') == NULL)) { + while (fgets(relfil, NINPUT, libfp) != NULL) { + relfil[NINPUT+1] = '\0'; + relfil[strlen(relfil) - 1] = '\0'; +#ifdef OTHERSYSTEM + if (path && *relfil != SLASH && + strchr(relfil,':') == NULL) #else - if (path != NULL) { + if (path) #endif -#if 1 /* Nick */ - str = (char *) malloc(strlen(path) + - strlen(relfil) + 6); - strcpy(str, path); - if (*str) { - strend = str + strlen(str) - 1; -#ifdef WIN32 - if (*strend != '\\') + str = (char *) malloc(strlen(path) + + strlen(relfil) + 6); + if (str == NULL) { + fflush(stdout); + fprintf(stderr, "fatal: " + "can't allocate memory\n"); + lkexit(ER_FATAL); + } + strcpy(str, path); + strend = str + strlen(str); +#ifdef OTHERSYSTEM + if (*str && *(strend - 1) != SLASH) { - strcpy(++strend, "\\"); + *strend++ = SLASH; + *strend = '\0'; } - if (*relfil == '\\') -#else - if (*strend != '/') +#endif + } + else + { + str = (char *) malloc(strlen(relfil) + 5); + if (str == NULL) { + fflush(stdout); + fprintf(stderr, "fatal: " + "can't allocate memory\n"); + lkexit(ER_FATAL); + } + strend = str; + } + strcpy(strend, relfil); +#ifdef WIN32 /* Nick */ + for (; *strend; strend++) + { + if (*strend == '/') { - strcpy(++strend, "/"); + *strend = SLASH; } - if (*relfil == '/') + } #endif +#if 1 /* Nick */ + l = strlen(str); + for (c = l - 1; c >= 0; c--) + { + if (str[c] == FSEPX) { - strcpy(strend + 1, relfil + 1); + l = c; + break; } - else + if (str[c] == SLASH || str[c] == ':') { - strcpy(strend + 1, relfil); + break; } } + if (str[l] == '\0') + { + sprintf(&str[strlen(str)], "%crel", FSEPX); + } #else - str = (char *) malloc (strlen(path)+strlen(relfil)+5); - strcpy(str,path); - strend = str + strlen(str) - 1; - if ((*relfil == '\\' && *strend == '\\') || - (*relfil == '/' && *strend == '/')) { - *strend = '\0'; - } - strcat(str,relfil); + if (strchr(str, FSEPX) == NULL) + { + sprintf(&str[strlen(str)], "%crel", FSEPX); + } #endif - } else { - str = (char *) malloc (strlen(relfil) + 5); - strcpy(str,relfil); - } - if(strchr(str,FSEPX) == NULL) { - sprintf(&str[strlen(str)], "%crel", FSEPX); - } -/* printf("scanning \"%s\"\n", str); */ - /* - * Scan only files not yet loaded - */ - for (lbf=lbfhead, lbscan=1; lbf&&lbscan; lbf=lbf->next) { - if (strcmp(lbf->filspc,str) == 0) { - lbscan = 0; - } - } -/*3*/ if (lbscan && (fp = fopen(str, "r")) != NULL) { +#if 1 /* Nick */ + fflush(stderr); + printf("scanning \"%s\"\n", str); +#endif /* - * Read in the object file. Look for lines that - * begin with "S" and end with "D". These are - * symbol table definitions. If we find one, see - * if it is our symbol. Make sure we only read in - * our object file and don't go into the next one. + * Scan only files not yet loaded */ - -/*4*/ while (fgets(buf, NINPUT, fp) != NULL) { + for (lbf=lbfhead, lbscan=1; lbf&&lbscan; lbf=lbf->next) + { + if (strcmp(lbf->filspc,str) == 0) + { + lbscan = 0; + } + } + if (lbscan && (fp = fopen(str, "r")) != NULL) + { - buf[NINPUT+1] = '\0'; - buf[strlen(buf) - 1] = '\0'; + /* + * Read in the object file. Look for lines that + * begin with "S" and end with "D". These are + * symbol table definitions. If we find one, see + * if it is our symbol. Make sure we only read in + * our object file and don't go into the next one. + */ - /* - * When a 'T line' is found terminate file scan. - * All 'S lines' preceed 'T lines' in .REL files. - */ - if (buf[0] == 'T') - break; + while (fgets(buf, NINPUT, fp) != NULL) + { + buf[NINPUT+1] = '\0'; + buf[strlen(buf) - 1] = '\0'; - /* - * Skip everything that's not a symbol record. - */ - if (buf[0] != 'S') - continue; + /* + * When a 'T line' is found terminate file scan. + * All 'S lines' preceed 'T lines' in .REL files. + */ + if (*buf == 'T') + break; - sscanf(buf, "S %s %c", symname, &c); + /* + * Skip everything that's not a symbol record. + */ + if (*buf != 'S') + continue; - /* - * If we find a symbol definition for the - * symbol we're looking for, load in the - * file and add it to lbfhead so it gets - * loaded on pass number 2. - */ -/*5*/ if (strncmp(symname, name, NCPS) == 0 && c == 'D') { - - lbfh = (struct lbfile *) new (sizeof(struct lbfile)); - if (lbfhead == NULL) { - lbfhead = lbfh; - } else { - lbf = lbfhead; - while (lbf->next) - lbf = lbf->next; - lbf->next = lbfh; - } - lbfh->libspc = lbnh->libspc; - lbfh->filspc = str; - lbfh->relfil = (char *) new (strlen(relfil) + 1); - strcpy(lbfh->relfil,relfil); - lbfh->f_obj = lbnh->f_obj; - fclose(fp); - fclose(libfp); - obj_flag = lbfh->f_obj; - loadfile(str); - return (1); - -/*5*/ } - -/*4*/ } - fclose(fp); -/*3*/ } - free(str); -/*2*/ } + sscanf(buf, "S %s %c", symname, &d); + + /* + * If we find a symbol definition for the + * symbol we're looking for, load in the + * file and add it to lbfhead so it gets + * loaded on pass number 2. + */ + if (strncmp(symname, name, NCPS) == 0 && d == 'D') { + + lbfh = (struct lbfile *) new(sizeof(struct lbfile)); + if (lbfhead == NULL) { + lbfhead = lbfh; + } else { + lbf = lbfhead; + while (lbf->next) + lbf = lbf->next; + lbf->next = lbfh; + } + lbfh->libspc = lbnh->libspc; + lbfh->filspc = str; + lbfh->relfil = (char *) new(strlen(relfil) + 1); + strcpy(lbfh->relfil,relfil); + lbfh->f_obj = lbnh->f_obj; + fclose(fp); + fclose(libfp); + obj_flag = lbfh->f_obj; + loadfile(str); + return (1); + } + fclose(fp); + } + else + { + free(str); + } + } fclose(libfp); -/*1*/ } + } return(0); } +#endif /* INDEXLIB */ + /*)Function VOID library() * * The function library() links all the library object files @@ -612,6 +1053,14 @@ char *filspc; char str[NINPUT+2]; int i; +#if 1 /* Nick */ + fflush(stderr); + printf("loading \"%s\"\n", filspc); +#endif +#if 1 /* Nick */ + strcpy(afn, filspc); + afp = fndidx(afn); +#endif if ((fp = fopen(filspc,"r")) != NULL) { while (fgets(str, NINPUT, fp) != NULL) { str[NINPUT+1] = '\0'; diff --git a/src/mkutil/link-z80/lklibr.c% b/src/mkutil/link-z80/lklibr.c% new file mode 100644 index 00000000..a68dad8d --- /dev/null +++ b/src/mkutil/link-z80/lklibr.c% @@ -0,0 +1,626 @@ +/* lklibr.c */ + +/* + * (C) Copyright 1989-2002 + * All Rights Reserved + * + * Alan R. Baldwin + * 721 Berkeley St. + * Kent, Ohio 44240 + * + * With contributions for the + * object libraries from + * Ken Hornstein + * kenh@cmf.nrl.navy.mil + * + */ + +#include +#include + +#ifdef WIN32 +#include +#else +#include +#endif + +#include "aslink.h" + +/*)Module lklibr.c + * + * The module lklibr.c contains the functions which + * (1) specify the path(s) to library files [.LIB] + * (2) specify the library file(s) [.LIB] to search + * (3) search the library files for specific symbols + * and link the module containing this symbol + * + * lklibr.c contains the following functions: + * VOID addpath() + * VOID addlib() + * VOID addfile() + * VOID search() + * VOID fndsym() + * VOID library() + * VOID loadfile() + * + */ + +/*)Function VOID addpath() + * + * The function addpath() creates a linked structure containing + * the paths to various object module library files. + * + * local variables: + * lbpath *lbph pointer to new path structure + * lbpath *lbp temporary pointer + * + * global variables: + * lbpath *lbphead The pointer to the first + * path structure + * + * functions called: + * int getnb() lklex.c + * VOID * new() lksym.c + * int strlen() c_library + * char * strcpy() c_library + * VOID unget() lklex.c + * + * side effects: + * An lbpath structure may be created. + */ + +VOID +addpath() +{ + struct lbpath *lbph, *lbp; + + lbph = (struct lbpath *) new (sizeof(struct lbpath)); + if (lbphead == NULL) { + lbphead = lbph; + } else { + lbp = lbphead; + while (lbp->next) + lbp = lbp->next; + lbp->next = lbph; + } + unget(getnb()); + lbph->path = (char *) new (strlen(ip)+1); + strcpy(lbph->path, ip); +} + +/*)Function VOID addlib() + * + * The function addlib() tests for the existance of a + * library path structure to determine the method of + * adding this library file to the library search structure. + * + * This function calls the function addfile() to actually + * add the library file to the search list. + * + * local variables: + * lbpath *lbph pointer to path structure + * + * global variables: + * lbpath *lbphead The pointer to the first + * path structure + * + * functions called: + * VOID addfile() lklibr.c + * int getnb() lklex.c + * VOID unget() lklex.c + * + * side effects: + * The function addfile() may add the file to + * the library search list. + */ + +VOID +addlib() +{ + struct lbpath *lbph; + + unget(getnb()); + + if (lbphead == NULL) { + addfile(NULL,ip); + return; + } + for (lbph=lbphead; lbph; lbph=lbph->next) { + addfile(lbph->path,ip); + } +} + +/*)Function VOID addfile(path,libfil) + * + * char *path library path specification + * char *libfil library file specification + * + * The function addfile() searches for the library file + * by concatenating the path and libfil specifications. + * if the library is found, an lbname structure is created + * and linked to any previously defined structures. This + * linked list is used by the function fndsym() to attempt + * to find any undefined symbols. + * + * The function does not report an error on invalid + * path / file specifications or if the file is not found. + * + * local variables: + * lbname *lbnh pointer to new name structure + * lbname *lbn temporary pointer + * char * str path / file string + * char * strend end of path pointer + * + * global variables: + * lbname *lbnhead The pointer to the first + * path structure + * int objflg linked file/library object output flag + * + * functions called: + * VOID * malloc() c_library + * int strlen() c_library + * char * strcpy() c_library + * + * side effects: + * An lbname structure may be created. + */ + +VOID +addfile(path,libfil) +char *path; +char *libfil; +{ + FILE *fp; + char *str, *strend; + struct lbname *lbnh, *lbn; + + if ((path != NULL) && (strchr(libfil,':') == NULL)){ +#if 1 /* Nick */ + str = (char *) malloc (strlen(path) + strlen(libfil) + 6); + strcpy(str, path); + if (*str) + { + strend = str + strlen(str) - 1; +#ifdef WIN32 + if (*strend != '\\') + { + strcpy(++strend, "\\"); + } + if (*libfil == '\\') +#else + if (*strend != '/') + { + strcpy(++strend, "/"); + } + if (*libfil == '/') +#endif + { + strcpy(strend + 1, libfil + 1); + } + else + { + strcpy(strend + 1, libfil); + } + } +#else + str = (char *) malloc (strlen(path) + strlen(libfil) + 5); + strcpy(str,path); + strend = str + strlen(str) - 1; + if ((*libfil == '\\' && *strend == '\\') || + (*libfil == '/' && *strend == '/')) { + *strend = '\0'; + } + strcat(str,libfil); +#endif + } else { + str = (char *) malloc (strlen(libfil) + 5); + strcpy(str,libfil); + } + if(strchr(str,FSEPX) == NULL) { + sprintf(&str[strlen(str)], "%clib", FSEPX); + } +/* printf("trying \"%s\"\n", str); */ + if ((fp = fopen(str, "r")) != NULL) { + fclose(fp); + lbnh = (struct lbname *) new (sizeof(struct lbname)); + if (lbnhead == NULL) { + lbnhead = lbnh; + } else { + lbn = lbnhead; + while (lbn->next) + lbn = lbn->next; + lbn->next = lbnh; + } + if ((path != NULL) && (strchr(libfil,':') == NULL)){ + lbnh->path = path; + } + lbnh->libfil = (char *) new (strlen(libfil) + 1); + strcpy(lbnh->libfil,libfil); + lbnh->libspc = str; + lbnh->f_obj = objflg; + } else { + free(str); + } +} + +/*)Function VOID search() + * + * The function search() looks through all the symbol tables + * at the end of pass 1. If any undefined symbols are found + * then the function fndsym() is called. Function fndsym() + * searches any specified library files to automagically + * import the object modules containing the needed symbol. + * + * After a symbol is found and imported by the function + * fndsym() the symbol tables are again searched. The + * symbol tables are search until no more symbols can be + * resolved within the library files. This ensures that + * back references from one library module to another are + * also resolved. + * + * local variables: + * int i temporary counter + * sym *sp pointer to a symbol structure + * int symfnd found a symbol flag + * + * global variables: + * sym *symhash[] array of pointers to symbol tables + * + * functions called: + * int fndsym() lklibr.c + * + * side effects: + * If a symbol is found then the library object module + * containing the symbol will be imported and linked. + */ + +VOID +search() +{ + register struct sym *sp; + register int i,symfnd; + + /* + * Look for undefined symbols. Keep + * searching until no more symbols are resolved. + */ + symfnd = 1; + while (symfnd) { + symfnd = 0; + /* + * Look through all the symbols + */ + for (i=0; is_type & S_DEF) == 0) { + if (fndsym(sp->s_id)) { + symfnd++; + } + } + sp = sp->s_sp; + } + } + } +} + +/*)Function VOID fndsym(name) + * + * char *name symbol name to find + * + * The function fndsym() searches through all combinations of the + * library path specifications (input by the -k option) and the + * library file specifications (input by the -l option) that + * lead to an existing file. + * + * The file specification may be formed in one of two ways: + * + * (1) If the library file contained an absolute + * path/file specification then this becomes filspc. + * (i.e. C:\...) + * + * (2) If the library file contains a relative path/file + * specification then the concatenation of the path + * and this file specification becomes filspc. + * (i.e. \...) + * + * The structure lbfile is created for the first library + * object file which contains the definition for the + * specified undefined symbol. + * + * If the library file [.LIB] contains file specifications for + * non existant files, no errors are returned. + * + * local variables: + * char buf[] [.REL] file input line + * char c [.REL] file input character + * FILE *fp file handle for object file + * lbfile *lbf temporary pointer + * lbfile *lbfh pointer to lbfile structure + * int lbscan scan library file flag + * FILE *libfp file handle for library file + * lbname *lbnh pointer to lbname structure + * char *path file specification path + * char relfil[] [.REL] file specification + * char *str combined path and file specification + * char *strend end of path pointer + * char symname[] [.REL] file symbol string + * + * global variables: + * lbname *lbnhead The pointer to the first + * name structure + * lbfile *lbfhead The pointer to the first + * file structure + * int obj_flag linked file/library object output flag + * + * functions called: + * int fclose() c_library + * int fgets() c_library + * FILE *fopen() c_library + * VOID free() c_library + * VOID lkexit() lkmain.c + * VOID loadfile() lklibr.c + * VOID * malloc() c_library + * char * sprintf() c_library + * int sscanf() c_library + * char * strcat() c_library + * char * strchr() c_library + * char * strcpy() c_library + * int strlen() c_library + * int strncmp() c_library + * VOID unget() lklex.c + * + * side effects: + * If the symbol is found then a new lbfile structure + * is created and added to the linked list of lbfile + * structures. The file containing the found symbol + * is linked. + */ + +int +fndsym(name) +char *name; +{ + FILE *libfp, *fp; + struct lbname *lbnh; + struct lbfile *lbfh, *lbf; + char relfil[NINPUT+2]; + char buf[NINPUT+2]; + char symname[NINPUT]; + char *path,*str,*strend; + char c; + int lbscan; + + /* + * Search through every library in the linked list "lbnhead". + */ + +/*1*/ for (lbnh=lbnhead; lbnh; lbnh=lbnh->next) { + if ((libfp = fopen(lbnh->libspc, "r")) == NULL) { + fprintf(stderr, "Cannot open library file %s\n", + lbnh->libspc); + lkexit(ER_FATAL); + } + path = lbnh->path; + + /* + * Read in a line from the library file. + * This is the relative file specification + * for a .REL file in this library. + */ + +/*2*/ while (fgets(relfil, NINPUT, libfp) != NULL) { + relfil[NINPUT+1] = '\0'; + relfil[strlen(relfil) - 1] = '\0'; +#if 1 /* Nick */ + if ((path != NULL) && (strchr(relfil,':') == NULL)) { +#else + if (path != NULL) { +#endif +#if 1 /* Nick */ + str = (char *) malloc(strlen(path) + + strlen(relfil) + 6); + strcpy(str, path); + if (*str) + { + strend = str + strlen(str) - 1; +#ifdef WIN32 + if (*strend != '\\') + { + strcpy(++strend, "\\"); + } + if (*relfil == '\\') +#else + if (*strend != '/') + { + strcpy(++strend, "/"); + } + if (*relfil == '/') +#endif + { + strcpy(strend + 1, relfil + 1); + } + else + { + strcpy(strend + 1, relfil); + } + } +#else + str = (char *) malloc (strlen(path)+strlen(relfil)+5); + strcpy(str,path); + strend = str + strlen(str) - 1; + if ((*relfil == '\\' && *strend == '\\') || + (*relfil == '/' && *strend == '/')) { + *strend = '\0'; + } + strcat(str,relfil); +#endif + } else { + str = (char *) malloc (strlen(relfil) + 5); + strcpy(str,relfil); + } + if(strchr(str,FSEPX) == NULL) { + sprintf(&str[strlen(str)], "%crel", FSEPX); + } +/* printf("scanning \"%s\"\n", str); */ + /* + * Scan only files not yet loaded + */ + for (lbf=lbfhead, lbscan=1; lbf&&lbscan; lbf=lbf->next) { + if (strcmp(lbf->filspc,str) == 0) { + lbscan = 0; + } + } +/*3*/ if (lbscan && (fp = fopen(str, "r")) != NULL) { + + /* + * Read in the object file. Look for lines that + * begin with "S" and end with "D". These are + * symbol table definitions. If we find one, see + * if it is our symbol. Make sure we only read in + * our object file and don't go into the next one. + */ + +/*4*/ while (fgets(buf, NINPUT, fp) != NULL) { + + buf[NINPUT+1] = '\0'; + buf[strlen(buf) - 1] = '\0'; + + /* + * When a 'T line' is found terminate file scan. + * All 'S lines' preceed 'T lines' in .REL files. + */ + if (buf[0] == 'T') + break; + + /* + * Skip everything that's not a symbol record. + */ + if (buf[0] != 'S') + continue; + + sscanf(buf, "S %s %c", symname, &c); + + /* + * If we find a symbol definition for the + * symbol we're looking for, load in the + * file and add it to lbfhead so it gets + * loaded on pass number 2. + */ +/*5*/ if (strncmp(symname, name, NCPS) == 0 && c == 'D') { + + lbfh = (struct lbfile *) new (sizeof(struct lbfile)); + if (lbfhead == NULL) { + lbfhead = lbfh; + } else { + lbf = lbfhead; + while (lbf->next) + lbf = lbf->next; + lbf->next = lbfh; + } + lbfh->libspc = lbnh->libspc; + lbfh->filspc = str; + lbfh->relfil = (char *) new (strlen(relfil) + 1); + strcpy(lbfh->relfil,relfil); + lbfh->f_obj = lbnh->f_obj; + fclose(fp); + fclose(libfp); + obj_flag = lbfh->f_obj; + loadfile(str); + return (1); + +/*5*/ } + +/*4*/ } + fclose(fp); +/*3*/ } + free(str); +/*2*/ } + fclose(libfp); +/*1*/ } + return(0); +} + +/*)Function VOID library() + * + * The function library() links all the library object files + * contained in the lbfile structures. + * + * local variables: + * lbfile *lbfh pointer to lbfile structure + * + * global variables: + * lbfile *lbfhead pointer to first lbfile structure + * int obj_flag linked file/library object output flag + * + * functions called: + * VOID loadfile lklibr.c + * + * side effects: + * Links all files contained in the lbfile structures. + */ + +VOID +library() +{ + struct lbfile *lbfh; + + for (lbfh=lbfhead; lbfh; lbfh=lbfh->next) { + obj_flag = lbfh->f_obj; + loadfile(lbfh->filspc); + } +} + +/*)Function VOID loadfile(filspc) + * + * char *filspc library object file specification + * + * The function loadfile() links the library object module. + * + * local variables: + * FILE *fp file handle + * int i input line length + * char str[] file input line + * + * global variables: + * char *ip pointer to linker input string + * + * functions called: + * int fclose() c_library + * int fgets() c_library + * FILE * fopen() c_library + * VOID link() lkmain.c + * int strlen() c_library + * + * side effects: + * If file exists it is linked. + */ + +VOID +loadfile(filspc) +char *filspc; +{ + FILE *fp; + char str[NINPUT+2]; + int i; + + if ((fp = fopen(filspc,"r")) != NULL) { + while (fgets(str, NINPUT, fp) != NULL) { + str[NINPUT+1] = '\0'; + i = strlen(str) - 1; + if (str[i] == '\n') + str[i] = '\0'; + ip = str; + link(); + } + fclose(fp); + } +} diff --git a/src/mkutil/link-z80/lklibr.obj b/src/mkutil/link-z80/lklibr.obj new file mode 100644 index 0000000000000000000000000000000000000000..1dc8dbbf2b58aa979e1f777caf968b4634800689 GIT binary patch literal 11821 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/link-z80/lklist.c b/src/mkutil/link-z80/lklist.c index 0c0c821b..66ed4ca5 100644 --- a/src/mkutil/link-z80/lklist.c +++ b/src/mkutil/link-z80/lklist.c @@ -147,7 +147,11 @@ register struct area *xp; register char *frmta, *frmtb, *ptr; a_uint ai, aj; +#if 1 /* Nick don't paginate the map file after all (make this a switch!!) */ + if (lop >= NLPP) { +#else if (lop++ >= NLPP) { +#endif newpag(mfp); switch(xflag) { default: @@ -238,6 +242,16 @@ register struct area *xp; if (wflag) { putc('\n', mfp); +#if 1 /* Nick */ + fprintf(mfp, + "Physical Logical Global "); + fprintf(mfp, + " Defined In Module\n"); + fprintf(mfp, + "-------- -------- --------------------------------"); + fprintf(mfp, + " -----------------\n"); +#else fprintf(mfp, " Value Global "); fprintf(mfp, @@ -246,6 +260,7 @@ register struct area *xp; " ----- --------------------------------"); fprintf(mfp, " ------------------------\n"); +#endif } else { switch(a_bytes) { default: @@ -381,10 +396,18 @@ struct area *xp; while (j) { j = 0; sp = p[0]; +#if 1 /* Nick */ + a0 = sp->s_addr + sp->s_axp->a_paddr; +#else a0 = sp->s_addr + sp->s_axp->a_addr; +#endif for (i=1; is_addr + sp->s_axp->a_paddr; +#else ai = sp->s_addr + sp->s_axp->a_addr; +#endif if (a0 > ai) { j = 1; p[i] = p[i-1]; @@ -413,9 +436,15 @@ struct area *xp; slew(xp); switch(a_bytes) { default: +#if 1 /* Nick */ + case 2: frmt = " "; break; + case 3: + case 4: frmt = ""; break; +#else case 2: frmt = " "; break; case 3: case 4: frmt = " "; break; +#endif } fprintf(mfp, frmt); } else @@ -431,6 +460,9 @@ struct area *xp; } sp = p[i]; +#if 1 /* Nick */ + a0 = (sp->s_addr + sp->s_axp->a_paddr) & a_mask; +#endif aj = (sp->s_addr + sp->s_axp->a_addr) & a_mask; switch(a_bytes) { default: @@ -453,13 +485,21 @@ struct area *xp; case 4: switch(xflag) { default: +#if 1 /* Nick please fix the other cases too! */ + case 0: frmt = "%08X %08X "; break; +#else case 0: frmt = " %08X "; break; +#endif case 1: frmt = "%011o "; break; case 2: frmt = " %010u "; break; } break; } +#if 1 /* Nick please fix the other cases too! */ + fprintf(mfp, frmt, a0, aj); +#else fprintf(mfp, frmt, aj); +#endif ptr = &sp->s_id[0]; if (wflag) { diff --git a/src/mkutil/link-z80/lklist.obj b/src/mkutil/link-z80/lklist.obj new file mode 100644 index 0000000000000000000000000000000000000000..c238a1ccb35f580718b7f0c72c11e7fbd46f1a2b GIT binary patch literal 18570 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/link-z80/lkmain.c b/src/mkutil/link-z80/lkmain.c index 436220f1..d5c2be18 100644 --- a/src/mkutil/link-z80/lkmain.c +++ b/src/mkutil/link-z80/lkmain.c @@ -143,7 +143,9 @@ char *argv[]; register int c, i, j, k; register char *frmt; +#if 0 /* Nick */ fprintf(stdout, "\n"); +#endif startp = (struct lfile *) new (sizeof (struct lfile)); startp->f_idp = ""; @@ -723,9 +725,15 @@ parse() if (*ip == 0) usage(ER_FATAL); sv_type = startp->f_type; +#if 1 /* Nick */ + startp->f_idp = strsto(ip); + outfp = startp; /* Nick */ +#else startp->f_idp = ip; +#endif startp->f_idx = fndidx(ip); startp->f_type = F_LNK; + outfp = startp; /* Nick */ doparse(); if (sv_type == F_STD) { cfp = NULL; @@ -874,8 +882,14 @@ parse() break; default: +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "-%c: unknown option: " + "ignored\n", c); +#else fprintf(stderr, "Unkown option -%c ignored\n", c); +#endif break; } } @@ -924,7 +938,12 @@ parse() lfp->f_type = F_REL; lfp->f_obj = objflg; } else { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "fatal: invalid input character\n"); +#else fprintf(stderr, "Invalid input"); +#endif lkexit(ER_FATAL); } } @@ -992,7 +1011,9 @@ doparse() fclose(sfp); } sfp = NULL; +#if 0 /* Nick */ startp->f_idp = ""; +#endif startp->f_idx = 0; startp->f_type = 0; } @@ -1138,8 +1159,14 @@ setbas() break; } if (ap == NULL) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "area \"%s\": " + "does not exist\n", id); +#else fprintf(stderr, "No definition of area %s\n", id); +#endif lkerr++; } else { #if 1 /* Nick */ @@ -1183,7 +1210,13 @@ setbas() #endif } } else { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "area \"%s\": " + "no '=' in base expression\n", id); +#else fprintf(stderr, "No '=' in base expression"); +#endif lkerr++; } bsp = bsp->b_base; @@ -1282,13 +1315,30 @@ setgbl() v = expr(0); sp = lkpsym(id, 0); if (sp == NULL) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "symbol \"%s\": " + "does not exist\n", id); +#else fprintf(stderr, "No definition of symbol %s\n", id); +#endif lkerr++; } else { if (sp->s_type & S_DEF) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "symbol \"%s\": " + "conflicting definition\n", + id); + fprintf(stderr, "module \"%s\": " + "symbol \"%s\": " + "see previous definition\n", + sp->m_id, id); +#else fprintf(stderr, "Redefinition of symbol %s\n", id); +#endif lkerr++; sp->s_axp = NULL; } @@ -1296,13 +1346,211 @@ setgbl() sp->s_type |= S_DEF; } } else { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "symbol \"%s\": " + "no '=' in global expression\n", id); +#else fprintf(stderr, "No '=' in global expression"); +#endif lkerr++; } gsp = gsp->g_globl; } } +#if 1 /* Nick */ +/*)Function FILE * afile(fn, ft, wf) + * + * char * fn file specification string + * char * ft file type string + * int wf read(0)/write(1) flag + * + * The function afile() opens a file for reading or writing. + * + * afile() returns a file handle for the opened file or aborts + * the assembler on an open error. + * + * local variables: + * FILE * fp file handle for opened file + * + * global variables: + * char afn[] afile() constructed filespec + * int afp afile() constructed path length + * char afntmp[] afilex() constructed filespec + * int afptmp afilex() constructed path length + * + * functions called: + * VOID afilex() asmain.c + * int fndidx() asmain.c + * FILE * fopen() c_library + * int fprintf() c_library + * char * strcpy() c_library + * + * side effects: + * File is opened for read or write. + */ + +FILE * +afile(fn, ft, wf) +char *fn; +char *ft; +int wf; +{ + FILE *fp; + + afilex(fn, ft); + + if ((fp = fopen(afntmp, wf ? "w" : "r")) == NULL) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "file \"%s\": can't %s\n", + afntmp, wf ? "create" : "open"); +#else + fprintf(stderr, "%s: cannot %s.\n", + afntmp, wf ? "create" : "open"); +#endif + lkerr++; /* lkexit(ER_FATAL); */ + } +#if 1 /* Nick */ + else + { + fflush(stderr); + printf("%s \"%s\"\n", wf ? "writing" : "reading", afntmp); + } +#endif + +#if 0 /* Nick */ + strcpy(afn, afntmp); + afp = afptmp; +#endif + + return (fp); +} + +/*)Function VOID afilex(fn, ft) + * + * char * fn file specification string + * char * ft file type string + * + * The function afilex() processes the file specification string: + * (1) If the file type specification string ft + * is not NULL then a file specification is + * constructed with the file path\name in fn + * and the extension in ft. + * (2) If the file type specification string ft + * is NULL then the file specification is + * constructed from fn. If fn does not have + * a file type then the default source file + * type dsft is appended to the file specification. + * + * afilex() aborts the assembler on a file specification length error. + * + * local variables: + * int c character value + * char * p1 pointer into filespec string afntmp + * char * p2 pointer into filespec string fn + * char * p3 pointer to filetype string ft + * + * global variables: + * char afntmp[] afilex() constructed filespec + * int afptmp afilex() constructed path length + * char dsft[] default assembler file type string + * + * functions called: + * VOID lkexit() asmain.c + * int fndidx() asmain.c + * int fprintf() c_library + * char * strcpy() c_library + * + * side effects: + * File specification string may be modified. + */ + +VOID +afilex(fn, ft) +char *fn; +char *ft; +{ + register char *p1, *p2, *p3; + register int c; +#if 0 /* Nick */ + int l; +#endif + + if (strlen(fn) > (FILSPC-5)) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "file \"%s\": name too long\n", fn); +#else + fprintf(stderr, "File Specification %s is too long.", fn); +#endif + lkexit(ER_FATAL); + } + + /* + * Save the File Name Index + */ + strcpy(afntmp, fn); +#ifdef WIN32 /* Nick */ + for (p1 = afntmp; *p1; p1++) + { + if (*p1 == '/') + { + *p1 = SLASH; + } + } +#endif + afptmp = fndidx(afntmp); + p1 = &afntmp[afptmp]; + p2 = &fn[afptmp]; + + /* + * Skip to File Extension Seperator + */ +#if 0 /* Nick */ + l = strlen(p2); + for (c = l - 1; c >= 0; c--) + { + if (p2[c] == FSEPX) + { + l = c; + break; + } + if (p2[c] == SLASH) + { + break; + } + } + p1 += l; + p2 += l; + + c = *p2++; +#else + while (((c = *p2++) != 0) && (c != FSEPX)) { + p1++; + } +#endif + *p1++ = FSEPX; + + /* + * Copy File Extension + */ + p3 = ft; + if (*p3 == 0) { + if (c == FSEPX) { + p3 = p2; + } else { + p3 = "rel"; /* dsft; */ + } + } + while ((c = *p3++) != 0) { + if (p1 < &afntmp[FILSPC-1]) + *p1++ = c; + } + *p1++ = 0; +} +#else /*)Function FILE * afile(fn, ft, wf) * * char * fn file specification string @@ -1351,14 +1599,19 @@ int wf; { register char *p1, *p2, *p3; register int c; -#if 1 /* Nick */ +#if 0 /* Nick */ int l; #endif FILE *fp; char fb[FILSPC]; if (strlen(fn) > (FILSPC-5)) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "file \"%s\": name too long\n", fn); +#else fprintf(stderr, "File Specification %s is too long.", fn); +#endif lkerr++; return(NULL); } @@ -1367,6 +1620,15 @@ int wf; * Skip The Path */ strcpy(fb, fn); +#ifdef WIN32 /* Nick */ + for (p1 = fb; *p1; p1++) + { + if (*p1 == '/') + { + *p1 = SLASH; + } + } +#endif c = fndidx(fb); p1 = &fb[c]; p2 = &fn[c]; @@ -1374,7 +1636,7 @@ int wf; /* * Skip to File Extension Seperator */ -#if 1 /* Nick */ +#if 0 /* Nick */ l = strlen(p2); for (c = l - 1; c >= 0; c--) { @@ -1383,11 +1645,7 @@ int wf; l = c; break; } -#ifdef WIN32 - if (p2[c] == '\\' || p2[c] == ':') -#else - if (p2[c] == '/' || p2[c] == ':') -#endif + if (p2[c] == SLASH || p2[c] == ':') { break; } @@ -1419,12 +1677,28 @@ int wf; *p1++ = c; } *p1++ = 0; - if ((fp = fopen(fb, wf?"w":"r")) == NULL) { - fprintf(stderr, "%s: cannot %s.\n", fb, wf?"create":"open"); + + if ((fp = fopen(fb, wf ? "w" : "r")) == NULL) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "file \"%s\": can't %s\n", + fb, wf ? "create" : "open"); +#else + fprintf(stderr, "%s: cannot %s.\n", + fb, wf ? "create" : "open"); +#endif lkerr++; } +#if 1 /* Nick */ + else + { + fflush(stderr); + printf("%s \"%s\"\n", wf ? "writing" : "reading", fb); + } +#endif return (fp); } +#endif /*)Function int fndidx(str) * @@ -1461,9 +1735,11 @@ char *str; * Skip Path Delimiters */ p1 = str; - if ((p2 = strrchr(p1, ':')) != NULL) { p1 = p2 + 1; } - if ((p2 = strrchr(p1, '/')) != NULL) { p1 = p2 + 1; } - if ((p2 = strrchr(p1, '\\')) != NULL) { p1 = p2 + 1; } + if ((p2 = strrchr(p1, ':')) != NULL) { p1 = p2 + 1; } +#ifdef WIN32 /* Nick */ + if ((p2 = strrchr(p1, '/')) != NULL) { p1 = p2 + 1; } +#endif + if ((p2 = strrchr(p1, SLASH)) != NULL) { p1 = p2 + 1; } return(p1 - str); } @@ -1483,6 +1759,7 @@ char *usetxt[] = { "Relocation:", #if 1 /* Nick */ " -b area base address=expression (no logical/physical mapping)", + " -bc area base concatenate (calculates logical from physical addr)", " -bl area base address=expression (only sets the logical address)", " -bp area base address=expression (only sets the physical address)", #else @@ -1556,8 +1833,15 @@ int n; { register char **dp; +#if 1 /* Nick */ + fflush(stderr); + printf("\nASxxxx Linker %s\n\n", VERSION); + for (dp = usetxt; *dp; dp++) + printf("%s\n", *dp); +#else fprintf(stderr, "\nASxxxx Linker %s\n\n", VERSION); for (dp = usetxt; *dp; dp++) fprintf(stderr, "%s\n", *dp); +#endif lkexit(n); } diff --git a/src/mkutil/link-z80/lkmain.obj b/src/mkutil/link-z80/lkmain.obj new file mode 100644 index 0000000000000000000000000000000000000000..3d34b564aa69045cbd8aa60429581abb0db03fab GIT binary patch literal 30058 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 OBqdBU9&O-7Oh literal 0 HcmV?d00001 diff --git a/src/mkutil/link-z80/lkout.c b/src/mkutil/link-z80/lkout.c index 05368a84..92d8bea8 100644 --- a/src/mkutil/link-z80/lkout.c +++ b/src/mkutil/link-z80/lkout.c @@ -242,6 +242,10 @@ int i; } for (k=a_bytes; k 2) { hi_addr = rtadr2 >> 16; +#if 1 /* Nick, make sure we execute after rtadr1 wraps 0000ffff -> 00010000 */ + if ((hi_addr != rtadr3) || rtaflg) { + rtadr3 = hi_addr; +#else if ((hi_addr != (rtadr1 >> 16)) || rtaflg) { +#endif chksum = 0x02; chksum += 0x00; chksum += 0x00; chksum += 0x04; chksum += hi_addr; chksum += hi_addr >> 8; +#if 0 + fflush(stderr); + printf("hi_addr %04x\n", hi_addr); +#endif fprintf(ofp, ":02000004%04X%02X\n", hi_addr, (~chksum + 1) & 0x00ff); } } diff --git a/src/mkutil/link-z80/lkout.obj b/src/mkutil/link-z80/lkout.obj new file mode 100644 index 0000000000000000000000000000000000000000..2471e275859a17ab1140484fee42479146e5fefc GIT binary patch literal 7258 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 Fe*^7}dK&-$ literal 0 HcmV?d00001 diff --git a/src/mkutil/link-z80/lkrloc.obj b/src/mkutil/link-z80/lkrloc.obj new file mode 100644 index 0000000000000000000000000000000000000000..f7649629d5379499bd0d6836e1cc648a688aa80c GIT binary patch literal 20078 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/link-z80/lksym.c b/src/mkutil/link-z80/lksym.c index 46fe1a4f..d23840cd 100644 --- a/src/mkutil/link-z80/lksym.c +++ b/src/mkutil/link-z80/lksym.c @@ -144,11 +144,19 @@ newsym() getid(id, -1); tsp = lkpsym(id, 1); - c = getnb();get();get(); + c = getnb(); + get(); + get(); if (c == 'R') { tsp->s_type |= S_REF; if (eval()) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "module \"%s\": symbol \"%s\": " + "nonzero S_REF\n", hp->m_id, id); +#else fprintf(stderr, "Non zero S_REF\n"); +#endif lkerr++; } } else @@ -158,11 +166,20 @@ newsym() #if 1 /* Nick */ if ((ap->a_flag & A_ABS) == 0 || tsp->s_addr != (a_uint)i) { + fflush(stdout); + fprintf(stderr, + "module \"%s\": symbol \"%s\": " + "conflicting definition\n", + hp->m_id, id); + fprintf(stderr, + "module \"%s\": symbol \"%s\": " + "see previous definition\n", + tsp->m_id, id); #else if (tsp->s_addr != (a_uint) i) { -#endif fprintf(stderr, "Multiple definition of %s\n", id); +#endif lkerr++; } } else { @@ -175,14 +192,26 @@ newsym() tsp->m_id = hp->m_id; } } else { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "fatal: module \"%s\": symbol \"%s\": " + "invalid type '%c'", hp->m_id, id, c); +#else fprintf(stderr, "Invalid symbol type %c for %s\n", c, id); +#endif lkexit(ER_FATAL); } /* * Place pointer in header symbol list */ if (headp == NULL) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "module \"%s\": symbol \"%s\": " + "no header defined\n", hp->m_id, id); +#else fprintf(stderr, "No header defined\n"); +#endif lkexit(ER_FATAL); } nglob = hp->h_nglob; @@ -193,7 +222,13 @@ newsym() return(tsp); } } +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "fatal: module \"%s\": symbol \"%s\": " + "header symbol list overflow\n", hp->m_id, id); +#else fprintf(stderr, "Header symbol list overflow\n"); +#endif lkexit(ER_FATAL); return(NULL); } @@ -371,17 +406,25 @@ struct sym *tsp; register int i; struct sym **p; +#if 1 /* Nick */ + fflush(stdout); +#endif if ((hp = headp) != NULL) { while(hp) { p = hp->s_list; for (i=0; ih_nglob; ++i) { if (p[i] == tsp) { +#if 1 /* Nick */ + fprintf(fp, "module \"%s\": symbol \"%s\": " + "unresolved external\n", hp->m_id, tsp->s_id); +#else fprintf(fp, "\n?ASlink-Warning-Undefined Global %s ", tsp->s_id); fprintf(fp, "referenced by module %s\n", hp->m_id); +#endif lkerr++; } } @@ -640,7 +683,12 @@ unsigned int n; bytes -= n; } if (p == NULL) { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "fatal: can't allocate memory\n"); +#else fprintf(stderr, "Out of space!\n"); +#endif lkexit(ER_FATAL); } for (i=0,q=p; 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 +#ifdef _MSC_VER +#include +#else +#include +#endif +#include + +#define COMMAND_MAX 0x800 /* cope with very long command lines */ + +int main(int argc, char **argv) + { + int i, j, k, quote_flag; + int command_length, exitcode; + char command[COMMAND_MAX]; +#if 1 /* customisation for loginsh.c */ + int exefile_length; + char exefile[COMMAND_MAX]; +#endif + char *shell; +#ifdef _MSC_VER + STARTUPINFO si; + PROCESS_INFORMATION pi; + DWORD dwExitCode; +#endif + + command_length = 0; +#if 1 /* customisation for loginsh.c */ + exefile_length = 0; + + shell = getenv("SHELL"); + if (shell == NULL) + { + shell = "/bin/sh"; + } + j = strlen(shell); + + quote_flag = 0; + for (k = 0; k < j; k++) + { + if (shell[k] == ' ') + { + quote_flag = 1; + break; + } + } + + if (exefile_length + quote_flag + j + quote_flag + 1 > + sizeof(exefile)) + { + fprintf(stderr, "%s: exefile line too long\n", + argv[0]); + exit(1); + } + + if (quote_flag) + { + exefile[exefile_length++] = '"'; + } +#ifdef _MSC_VER /* temporary escaping of quotes, but no length check!! fix!! */ + k = 0; + if (shell[0] == '/') /* UNIX style path specifier? if so, put under cygwin */ + { + k = 7; /*9;*/ + memcpy(&exefile[exefile_length], "\\cygwin", k); /*"c:\\cygwin", k);*/ + } + for (j = 0; shell[j]; j++) + { + if (shell[j] == '/') /* munge the pathname from the SHELL environment var */ + { + exefile[exefile_length + k++] = '\\'; + } + else + { + if (shell[j] == '"') + { + exefile[exefile_length + k++] = '\\'; + } + exefile[exefile_length + k++] = shell[j]; + } + } + j = k; +#else + memcpy(&exefile[exefile_length], shell, j); +#endif + exefile_length += j; +#ifdef _MSC_VER + exefile[exefile_length++] = '.'; + exefile[exefile_length++] = 'e'; + exefile[exefile_length++] = 'x'; + exefile[exefile_length++] = 'e'; +#endif + if (quote_flag) + { + exefile[exefile_length++] = '"'; + } + exefile[exefile_length] = 0; + + command[command_length++] = '-'; /* pass as first argument to sh.exe */ + command[command_length++] = ' '; +#endif + for (i = 1; i < argc; i++) + { + j = strlen(argv[i]); + + quote_flag = 0; + for (k = 0; k < j; k++) + { + if (argv[i][k] == ' ') + { + quote_flag = 1; + break; + } + } + + if (command_length + quote_flag + j + quote_flag + 1 > + sizeof(command)) + { + fprintf(stderr, "%s: command line too long\n", + argv[0]); + exit(1); + } + + if (quote_flag) + { + command[command_length++] = '"'; + } +#ifdef _MSC_VER /* temporary escaping of quotes, but no length check!! fix!! */ + k = 0; + for (j = 0; argv[i][j]; j++) + { + if (argv[i][j] == '"') + { + command[command_length + k++] = '\\'; + } + command[command_length + k++] = argv[i][j]; + } + j = k; +#else + memcpy(&command[command_length], argv[i], j); +#endif + command_length += j; + if (quote_flag) + { + command[command_length++] = '"'; + } + command[command_length++] = ' '; + } + +#if 0 /* not used after all */ + if (command_length < 1) + { +#if 1 /* customisation for loginsh.c */ + fprintf(stderr, "usage: %s [arguments]\n", argv[0]); + fprintf(stderr, "references the SHELL environment variable\n"); + fprintf(stderr, "if SHELL is not set, uses value " + "\"/bin/sh\"\n"); +#ifdef _MSC_VER + fprintf(stderr, "prefix \"c:\\cygwin\" and suffix \".exe\" " + "are added\n"); +#endif +#else + fprintf(stderr, "usage: %s program [arguments]\n", argv[0]); +#endif + exit(1); + } +#endif + command[command_length - 1] = 0; + +#if 1 /* customisation for loginsh.c */ + fprintf(stderr, "%s: executing: %s\n", argv[0], exefile); + fprintf(stderr, "%s: arguments: %s\n", argv[0], command); +#else + fprintf(stderr, "%s: executing: %s\n", argv[0], command); +#endif + fflush(stderr); + +#ifdef _MSC_VER + memset(&si, 0, sizeof(STARTUPINFO)); + si.cb = sizeof(STARTUPINFO); + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_SHOWMINNOACTIVE; + + memset(&pi, 0, sizeof(PROCESS_INFORMATION)); + + if (CreateProcess( +#if 1 /* customisation for loginsh.c */ + exefile, // name of executable module +#else + NULL, // name of executable module +#endif + command, // command line string + NULL, //LPSECURITY_ATTRIBUTES lpProcessAttributes, + NULL, //LPSECURITY_ATTRIBUTES lpThreadAttributes, + FALSE, // handle inheritance option + HIGH_PRIORITY_CLASS, // creation flags + NULL, //LPVOID lpEnvironment, // new environment block + NULL, // current directory name + &si, // startup information + &pi // process information + ) == 0) + { + fprintf(stderr, "CreateProcess() failed\n"); + exit(1); + } + + if (WaitForSingleObject(pi.hProcess, INFINITE) != WAIT_OBJECT_0) + { + fprintf(stderr, "WaitForSingleObject() failed\n"); + exit(1); + } + + if (GetExitCodeProcess(pi.hProcess, &dwExitCode) == 0) + { + fprintf(stderr, "GetExitCodeProcess() failed\n"); + exit(1); + } + + exitcode = dwExitCode; +#else + exitcode = system(command); +#endif + + fprintf(stderr, "%s: exitcode: %d\n", argv[0], exitcode); + exit(exitcode); + + return 0; /* can't happen, but keep the compiler happy */ + } + diff --git a/src/mkutil/loginsh.exe b/src/mkutil/loginsh.exe new file mode 100644 index 0000000000000000000000000000000000000000..88073f0718f251fbab1cfb7add6d005e259c4627 GIT binary patch literal 73781 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 + + +Development starting with GNU make 3.76 by: + Paul D. Smith + + +GNU Make User's Manual + Written by: + Richard M. Stallman + + Edited by: + Roland McGrath + Bob Chassell + Melissa Weisshaus + Paul D. Smith + +----------------------------------- +GNU make porting efforts: + + Port to VMS by: + Klaus Kaempf + Archive support/Bug fixes by: + John W. Eaton + Martin Zinser + + Port to Amiga by: + Aaron Digulla + + + Port to MS-DOS (DJGPP) and MS-Windows 95/NT by: + DJ Delorie + Rob Tulloh + Eli Zaretskii + +----------------------------------- +Other contributors: + + Janet Carson + Howard Chu + Paul Eggert + Klaus Heinz + Michael Joosten + Jim Kelton + David Lubbren + Tim Magill + Greg McGary + Han-Wen Nienhuys + Andreas Schwab + Carl Staelin (Princeton University) + Ian Stewartson (Data Logic Limited) + +With suggestions/comments/bug reports from a cast of ... well ... +hundreds, anyway :) diff --git a/src/mkutil/make/COPYING b/src/mkutil/make/COPYING new file mode 100644 index 00000000..a3f6b12e --- /dev/null +++ b/src/mkutil/make/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/src/mkutil/make/CVS/Entries b/src/mkutil/make/CVS/Entries new file mode 100644 index 00000000..48d51a65 --- /dev/null +++ b/src/mkutil/make/CVS/Entries @@ -0,0 +1,83 @@ +/.cvsignore/2.9/Wed Sep 11 16:55:44 2002// +/.purify/2.2/Tue Jul 20 22:34:41 1999// +/AUTHORS/2.6/Tue Jul 9 06:35:56 2002// +/COPYING/1.2/Wed Dec 11 00:49:47 1996// +/ChangeLog/2.219/Fri May 2 01:44:59 2003// +/ChangeLog.1/2.1/Thu Apr 27 16:45:51 1995// +/ChangeLog.2/2.1/Mon Jul 8 02:26:47 2002// +/INSTALL/1.4/Thu Jul 30 20:55:07 1998// +/Makefile.DOS.template/2.12/Tue Nov 19 04:39:15 2002// +/Makefile.am/2.40/Fri May 2 01:44:59 2003// +/Makefile.ami/2.6/Tue Nov 19 04:39:15 2002// +/NEWS/2.62/Fri May 2 01:44:59 2003// +/NMakefile.template/2.10/Tue Nov 19 04:39:15 2002// +/README.Amiga/2.3/Wed Aug 27 20:31:01 1997// +/README.DOS.template/1.9/Mon Jun 19 21:22:44 2000// +/README.OS2.template/2.1/Fri May 2 01:44:59 2003// +/README.W32.template/2.1/Tue Aug 31 17:02:37 1999// +/README.customs/2.2/Fri Oct 15 07:01:01 1999// +/README.cvs/2.10/Fri May 2 01:44:59 2003// +/README.template/1.22/Tue Sep 3 21:43:04 2002// +/SCOPTIONS/2.1/Thu May 9 18:02:18 1996// +/SMakefile.template/2.6/Tue Nov 19 04:39:15 2002// +/TODO.private/2.4/Fri Jul 7 17:34:56 2000// +/acinclude.m4/2.19/Fri May 10 03:15:08 2002// +/alloca.c/1.17/Mon Oct 14 21:54:04 2002// +/amiga.c/2.5/Mon Oct 14 21:54:04 2002// +/amiga.h/2.2/Fri Mar 5 05:55:17 1999// +/ar.c/1.15/Mon Oct 14 21:54:04 2002// +/arscan.c/1.41/Thu Jan 30 05:22:52 2003// +/build.template/1.13/Fri May 2 01:44:59 2003// +/build_w32.bat/2.7/Tue Nov 19 04:39:15 2002// +/commands.c/1.54/Thu Jan 30 05:22:52 2003// +/commands.h/1.6/Fri Mar 5 05:55:20 1999// +/config.ami.template/2.8/Tue Jun 20 05:48:40 2000// +/config.h-vms.template/2.13/Thu Aug 8 00:11:19 2002// +/config.h.W32.template/2.13/Sat Aug 10 01:27:17 2002// +/configh.dos.template/1.13/Sat Aug 10 01:27:17 2002// +/configure.bat/1.4/Wed Aug 27 20:31:07 1997// +/configure.in/1.119/Fri May 2 01:44:59 2003// +/debug.h/1.2/Sat Nov 27 08:09:42 1999// +/default.c/1.43/Fri May 2 01:44:59 2003// +/dep.h/1.15/Mon Jul 8 13:05:02 2002// +/dir.c/1.51/Fri May 2 01:44:59 2003// +/dosbuild.bat/1.4/Mon Jul 8 13:05:02 2002/-kb/ +/expand.c/1.35/Thu Jan 30 06:21:36 2003// +/file.c/1.69/Fri Mar 28 06:31:45 2003// +/filedef.h/2.19/Thu Aug 1 13:16:57 2002// +/function.c/1.77/Fri May 2 01:44:59 2003// +/getloadavg.c/1.47/Mon Oct 14 21:54:04 2002// +/getopt.c/1.18/Mon Oct 14 21:54:04 2002/-ko/ +/getopt.h/1.9/Sat Jun 21 04:31:18 1997/-ko/ +/getopt1.c/1.6/Mon Oct 14 21:54:04 2002/-ko/ +/gettext.h/2.4/Sun Apr 21 23:57:24 2002// +/hash.c/2.4/Mon Oct 14 21:54:04 2002// +/hash.h/2.3/Wed Sep 11 16:55:44 2002// +/implicit.c/1.38/Fri May 2 01:44:59 2003// +/job.c/1.149/Fri May 2 01:44:59 2003// +/job.h/1.16/Mon Mar 24 23:14:15 2003// +/main.c/1.181/Mon Mar 24 23:14:15 2003// +/maintMakefile/2.21/Fri May 2 01:44:59 2003// +/make.1/1.8/Tue Jul 6 21:09:34 1999// +/make.h/1.100/Tue Mar 25 02:46:42 2003// +/make.lnk/2.1/Thu May 9 18:02:36 1996// +/makefile.com/2.8/Tue Oct 1 15:32:14 2002// +/makefile.vms/2.8/Tue Oct 1 15:32:14 2002// +/misc.c/1.56/Thu Jan 30 05:22:52 2003// +/read.c/1.129/Fri May 2 01:44:59 2003// +/readme.vms/2.7/Sat Jan 22 05:59:28 2000// +/remake.c/1.110/Tue Mar 25 00:15:25 2003// +/remote-cstms.c/1.13/Mon Oct 14 21:54:04 2002// +/remote-stub.c/1.9/Mon Oct 14 21:54:04 2002// +/rule.c/1.34/Fri May 2 01:45:00 2003// +/rule.h/1.11/Fri May 2 01:45:00 2003// +/signame.c/1.18/Mon Oct 14 21:54:04 2002// +/subproc.bat/2.3/Thu Jul 30 20:57:27 1998// +/variable.c/1.72/Fri May 2 01:45:00 2003// +/variable.h/1.27/Fri May 2 01:45:00 2003// +/version.c/2.20/Wed Sep 1 08:04:38 1999// +/vmsdir.h/2.3/Sat Jan 22 05:43:03 2000// +/vmsfunctions.c/2.9/Mon Oct 14 21:54:04 2002// +/vmsify.c/2.8/Mon Oct 14 21:54:04 2002// +/vpath.c/1.38/Mon Mar 24 23:14:15 2003// +D diff --git a/src/mkutil/make/CVS/Entries.Log b/src/mkutil/make/CVS/Entries.Log new file mode 100644 index 00000000..a730f72d --- /dev/null +++ b/src/mkutil/make/CVS/Entries.Log @@ -0,0 +1,7 @@ +A D/config//// +A D/doc//// +A D/glob//// +A D/i18n//// +A D/po//// +A D/tests//// +A D/w32//// diff --git a/src/mkutil/make/CVS/Repository b/src/mkutil/make/CVS/Repository new file mode 100644 index 00000000..8f58e6df --- /dev/null +++ b/src/mkutil/make/CVS/Repository @@ -0,0 +1 @@ +make diff --git a/src/mkutil/make/CVS/Root b/src/mkutil/make/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/ChangeLog b/src/mkutil/make/ChangeLog new file mode 100644 index 00000000..b5db5715 --- /dev/null +++ b/src/mkutil/make/ChangeLog @@ -0,0 +1,1130 @@ +2003-04-30 Paul D. Smith + + * build.template: Make some changes to maybe allow this script to + work on DOS/Windows/OS2 systems. Suggested by Andreas Buening. + + * README.OS2.template: New file for OS/2 support. Original + contributed by Andreas Buening. + * configure.in: Invoke new pds_AC_DOS_PATHS macro to test for + DOS-style paths. + +2003-04-19 Paul D. Smith + + Fix bug #1405: allow a target to match multiple pattern-specific + variables. + + * rule.c (create_pattern_var, lookup_pattern_var): Move these to + variable.c, where they've always belonged. + * rule.h: Move the prototypes and struct pattern_var as well. + * variable.c (initialize_file_variables): Invoke + lookup_pattern_var() in a loop, until no more matches are found. + If a match is found, create a new variable set for the target's + pattern variables. Then merge the contents of each matching + pattern variable set into the target's pattern variable set. + (lookup_pattern_var): Change this function to be usable + in a loop. It takes a starting position: if NULL, start at the + beginning; if non-NULL, start with the pattern variable after that + position, and return the next matching pattern. + (create_pattern_var): Create a unique instance of + pattern-specific variables for every definition in the makefile. + Don't combine the same pattern together. This allows us to + process the variable handling properly even when the same pattern + is used multiple times. + (parse_variable_definition): New function: break out the parsing + of a variable definition line from try_variable_definition. + (try_variable_definition): Call parse_variable_definition to + parse. + (print_variable_data_base): Print out pattern-specific variables. + * variable.h (struct variable): Remember when a variable is + conditional. Also remember its flavor. + (struct pattern_var): Instead of keeping a variable set, we just + keep a single variable for each pattern. + * read.c (record_target_var): Each pattern variable contains only a + single variable, not a set, so create it properly. + * doc/make.texi (Pattern-specific): Document the new behavior. + +2003-04-17 Paul D. Smith + + * dir.c (file_exists_p) [VMS]: Patch provided with Bug #3018 by + Jean-Pierre Portier . I don't understand the + file/directory naming rules for VMS so I can't tell whether this + is correct or not. + +2003-04-09 Paul D. Smith + + * configure.in (HAVE_DOS_PATHS): Define this on systems that need + DOS-style pathnames: backslash separators and drive specifiers. + +2003-03-28 Paul D. Smith + + * file.c (snap_deps): If .SECONDARY with no targets is given, set + the intermediate flag on all targets. Fixes bug #2515. + +2003-03-24 Paul D. Smith + + * configure.in, Makefile.am, glob/Makefile.am, doc/Makefile.am: + Upgrade to autoconf 2.57 and automake 1.7.3. + + * job.c: More OS/2 changes from Andreas Buening. + + * file.c (print_file): Fix variable initialization. + Fixes bug #2892. + + * remake.c (notice_finished_file): + + * make.h (ENULLLOOP): Set errno = 0 before invoking the command; + some calls (like readdir()) return NULL in valid situations + without resetting errno. Fixes bug #2846. + +2003-02-25 Paul D. Smith + + Port to OS/2 (__EMX__) by Andreas Buening . + + * job.c (_is_unixy_shell) [OS/2]: New function. + Set default shell to /bin/sh. + (reap_children): Close the job_rfd pipe here since we don't use a + SIGCHLD handler. + (set_child_handler_action_flags): define this to empty on OS/2. + (start_job_command): Close the jobserver pipe and use + child_execute_job() instead of fork/exec. + (child_execute_job): Rewrite to handle stdin/stdout FDs and spawn + rather than exec'ing, then reconfigure stdin/stdout. + (exec_command): Rewrite to use spawn instead of exec. Return the + PID of the child. + + * main.c (main) [OS/2]: Call initialize_main(). Handle argv[0] as + in DOS. Handle the TEMP environment variable as in DOS. Don't + use a SIGCHLD handler on OS/2. Choose a shell as in DOS. Don't + use -j in DOS mode. Use child_execute_job() instead of + exec_command(). + + * function.c (func_shell) [OS/2]: Can't use fork/exec on OS/2: use + spawn() instead. + + * job.h [OS/2]: Move CLOSE_ON_EXEC here from job.c. Add + prototypes that return values. + + * remake.c (f_mtime) [OS/2]: Handle FAT timestamp offsets for OS/2. + + * read.c (readline) [OS/2]: Don't handle CRLF specially on OS/2. + * default.c (default_suffixes) [OS/2]: Set proper default suffixes + for OS/2. + * vpath.c (construct_vpath_list) [OS/2]: Handle OS/2 paths like + DOS paths. + +2003-02-24 Paul D. Smith + + * default.c [VMS]: New default rules for .cxx -> .obj compiles. + * job.c (child_execute_job) [VMS]: New code for handling spawn(). + (child_execute_job) [VMS]: Handle error status properly. + Patches provided by Hartmut Becker . + + * function.c (func_shell): Use EINTRLOOP() while reading from the + subshell pipe (Fixes bug #2502). + * job.c (free_child): Use EINTRLOOP() while writing tokens to the + jobserver pipe. + * main.c (main): Ditto. + +2003-01-30 Paul D. Smith + + * read.c (eval): eval() was not fully reentrant, because the + collapsed buffer was static. Change it to be an automatic + variable so that eval() can be invoked recursively. + Fixes bug # 2238. + (eval): Apply patch # 1022: fix memory reference error on long + target-specific variable lines. + Patch provided by Steve Brown . + + * function.c (check_numeric): Combine the is_numeric() function + into this function, since it's only called from one place. + Constify this function. Have it print the incorrect string in the + error message. Fixes bug #2407. + (strip_whitespace): Constify. + (func_if): Constify. + * expand.c (expand_argument): Constify. + +2003-01-29 Paul D. Smith + + Fix bug # 2169, also reported by other people on various systems. + + * make.h: Some systems, such as Solaris and PTX, do not fully + implement POSIX-compliant SA_RESTART functionality; important + system calls like stat() and readdir() can still fail with EINTR + even if SA_RESTART has been set on the signal handler. So, + introduce macros EINTRLOOP() and ENULLLOOP() which can loop on + EINTR for system calls which return -1 or 0 (NULL), respectively, + on error. + Also, remove the old atomic_stat()/atomic_readdir() and + HAVE_BROKEN_RESTART handling. + + * configure.in: Remove setting of HAVE_BROKEN_RESTART. + + * arscan.c (ar_member_touch): Use EINTRLOOP() to wrap fstat(). + * remake.c (touch_file): Ditto. + + * commands.c (delete_target): Use EINTRLOOP() to wrap stat(). + * read.c (construct_include_path): Ditto. + * remake.c (name_mtime): Ditto. + * vpath.c (selective_vpath_search): Ditto. + * dir.c (find_directory): Ditto. + (local_stat): Ditto. + (find_directory): Use ENULLLOOP() to wrap opendir(). + (dir_contents_file_exists_p): Use ENULLLOOP() to wrap readdir(). + + * misc.c: Remove HAVE_BROKEN_RESTART, atomic_stat(), and + atomic_readdir() handling. + +2003-01-22 Paul D. Smith + + * function.c (func_call): Fix Bug #1744. If we're inside a + recursive invocation of $(call ...), mask any of the outer + invocation's arguments that aren't used by this one, so that this + invocation doesn't "inherit" them accidentally. + +2002-12-05 Paul D. Smith + + * function.c (subst_expand): Valery Khamenia reported a + pathological performance hit when doing substitutions on very + large values with lots of words: turns out we were invoking + strlen() a ridiculous number of times. Instead of having each + call to sindex() call strlen() again, keep track of how much of + the text we've seen and pass the length to sindex(). + +2002-11-19 Paul D. Smith + + * README.cvs, configure.in: Upgrade to require autoconf 2.56. + + +2002-11-16 Paul D. Smith + + * NMakefile.template (OBJS): Add hash.c object file. + * SMakefile.template (srcs): Ditto. + * Makefile.ami (objs): Ditto. + * build_w32.bat: Ditto. + + * Makefile.DOS.template: Remove extra dependencies. + +2002-10-25 Paul D. Smith + + * expand.c (install_variable_buffer): New function. Install a new + variable_buffer context and return the previous one. + (restore_variable_buffer): New function. Free the current + variable_buffer context and put a previously saved one back. + * variable.h: Prototypes for {install,restore}_variable_buffer. + * function.c (func_eval): Push a new variable_buffer context + before we eval, then restore the old one when we're done. + Fixes Bug #1517. + + * read.c (install_conditionals): New function. Install a new + conditional context and return the previous one. + (restore_conditionals): New function. Free the current + conditional context and put a previously saved one back. + (eval): Use the {install,restore}_conditionals for "include" + handling. + (eval_buffer): Use {install,restore}_conditionals to preserve the + present conditional state before we evaluate the buffer. + Fixes Bug #1516. + + * doc/make.texi (Quick Reference): Add references to $(eval ...) + and $(value ...). + (Recursion): Add a variable index entry for CURDIR. + + * README.cvs: Update to appropriate versions. + * Makefile.am (nodist_loadavg_SOURCES): automake gurus point out I + don't need to copy loadavg.c: automake is smart enough to create + it for me. Still have a bug in automake related to ansi2knr tho. + +2002-10-14 Paul D. Smith + + * remake.c (notice_finished_file): Only touch targets if they have + at least one command (as per POSIX). Resolve Bug #1418. + + * *.c: Convert to using ANSI C-style function definitions. + * Makefile.am: Enable the ansi2knr feature of automake. + * configure.in: ditto. + +2002-10-13 Paul D. Smith + + * commands.c (set_file_variables): Bug #1379: Don't use alloca() + for automatic variable values like $^, etc. In the case of very + large lists of prerequisites this causes problems. Instead reuse + a static buffer (resizeable) for each variable. + + * read.c (eval): Fix Bug #1391: allow "export" keyword in + target-specific variable definitions. Check for it and set an + "exported" flag. + (record_target_var): Set the export field to v_export if the + "exported" flag is set. + * doc/make.texi (Target-specific): Document the ability to use + "export". + + * doc/make.texi: Change the name of the section on automatic + variables from "Automatic" to "Automatic Variables". Added text + clarifying the scope of automatic variables. + +2002-10-04 Paul D. Smith + + * read.c (eval): Allow SysV $$@ variables to use {} braces as well + as () braces. + (record_files): Ditto. + + * expand.c (variable_expand_string): In $(A:x=y) expansion limit + the search for the '=' to only within the enclosing parens. + +2002-10-03 Paul D. Smith + + Version 3.80 released. + + * dir.c: Change hash functions to use K&R function definition style. + * function.c: Ditto. + * read.c: Ditto. + * variable.c: Ditto. + + Update to automake 1.7. + + * Makefile.am (AUTOMAKE_OPTIONS): Update to require 1.7. + (pdf): Remove this target as automake now provides one. + + * configure.in: Change AM_CONFIG_HEADER to AC_CONFIG_HEADERS. + +2002-09-30 Martin P.J. Zinser + + * makefile.com: Updates for GNU make 3.80. + * makefile.vms: Ditto. + +2002-09-23 Paul D. Smith + + * read.c (enum make_word_type): Remove w_comment. + (get_next_mword): Don't treat comment characters as special; where + this function is used we will never see a comment (it's stripped + before we get here) and treating comments specially means that + targets like "foo\#bar" aren't handled properly. + +2002-09-18 Paul D. Smith + + * doc/make.texi (Bugs): Update with some info on Savannah, etc. + + * read.c (eval): Expansion of arguments to export/unexport was + ignoring all arguments after the first one. Change the algorithm + to expand the whole line once, then parse the results. + +2002-09-17 Paul D. Smith + + Fix Bug #940 (plus another bug I found while looking at this): + + * read.c (record_target_var): enter_file() will add a new entry if + it's a double-colon target: we don't want to do that in this + situation. Invoke lookup_file() and only enter_file() if it does + not already exist. If the file we get back is a double-colon then + add this variable to the "root" double-colon target. + + * variable.c (initialize_file_variables): If this file is a + double-colon target but is not the "root" target, then initialize + the root and make the root's variable list the parent of our + variable list. + +2002-09-13 Paul D. Smith + + * doc/make.texi (MAKE Variable): Add some indexing for "+". + + * hash.c (round_up_2): Get rid of a warning. + +2002-09-12 Paul D. Smith + + * Makefile.am (loadavg_SOURCES, loadavg.c): Tiptoe around automake + so it doesn't complain about getloadavg.c. + + * commands.c (set_file_variables): Make sure we always alloca() at + least 1 character for the value of $? (for '\0'). + +2002-09-11 Paul D. Smith + + * hash.h (STRING_COMPARE, ISTRING_COMPARE, STRING_N_COMPARE): Fix + macro to use RESULT instead of the incorrect _RESULT_. + + * make.h (HAVE_BROKEN_RESTART): Add prototypes for atomic_stat() + and atomic_readdir(). We need to #include dirent.h to get this to + work. + * misc.c (atomic_readdir): Fix typos. + +2002-09-10 Paul D. Smith + + * read.c (eval): Expand variable lists given to export and + unexport, so that "export $(LIST_OF_VARIABLES)" (etc.) works. + (conditional_line): Ditto for "ifdef". Fixes bug #103. + + * doc/make.texi (Variables/Recursion): Document this. + (Conditional Syntax): And here. + +2002-09-09 Paul D. Smith + + * configure.in: Check for memmove(). + +2002-09-07 Paul D. Smith + + * configure.in (HAVE_BROKEN_RESTART): Define this on PTX systems; + Michael Sterrett reports that while it has + SA_RESTART, it does not work properly. + + * misc.c (atomic_stat): If HAVE_BROKEN_RESTART, create a function + that invokes stat() and loops to do it again if it returns EINTR. + (atomic_readdir): Ditto, with readdir(). + + * make.h (stat, readdir): If HAVE_BROKEN_RESTART, alias stat() + and readdir() to atomic_stat() and atomic_readdir(). + +2002-09-04 Paul D. Smith + + * implicit.c (pattern_search): Daniel + reports that GNU make sometimes doesn't recognize that targets can + be made, when directories can be created as prerequisites. He + reports that changing the order of predicates in the DEP->changed + flag test so that lookup_file() is always performed, solves this + problem. + +2002-08-08 Paul D. Smith + + * configure.in: Require a newer version of gettext. + + * misc.c (perror_with_name): Translate the format string (for + right-to-left language support). + (pfatal_with_name): Ditto. + + * main.c: Create a static array of strings to store the usage + text. This is done to facilitate translations. + (struct command_switch): Remove argdesc and description fields. + (switches): Remove values for obsolete fields. + (print_usage): Print each element of the usage array. + + * hash.c: Change function definitions to be K&R style. + +2002-08-02 Paul D. Smith + + * NEWS: Remove the mention of .TARGETS; we aren't going to publish + this one because it's too hard to get right. We'll look at it for + a future release. + * main.c (main): Don't create the .TARGETS variable. + * variable.c (handle_special_var): Don't handle .TARGETS. + +2002-08-01 Paul D. Smith + + * main.c (switches): Add a new option, -B (--always-make). If + specified, make will rebuild all targets that it encounters even + if they don't appear to be out of date. + (always_make_flag): New flag. + * make.h: Extern always_make_flag. + * remake.c (update_file_1): Check always_make_flag; if it's set we + will always rebuild any target we can, even if none of its + prerequisites are newer. + * NEWS: Mention it. + + * doc/make.texi (Shell Function): Make it clear that make + variables marked as "export" are not passed to instances of the + shell function. + + Add new introspection variable .VARIABLES and .TARGETS. + + * variable.c (handle_special_var): New function. If the variable + reference passed in is "special" (.VARIABLES or .TARGETS), + calculate the new value if necessary. .VARIABLES is handled here: + walk through the hash of defined variables and construct a value + which is a list of the names. .TARGETS is handled by + build_target_list(). + (lookup_variable): Invoke handle_special_var(). + * file.c (build_target_list): Walk through the hask of known files + and construct a list of the names of all the ones marked as + targets. + * main.c (main): Initialize them to empty (and as simple variables). + * doc/make.texi (Special Variables): Document them. + * NEWS: Mention them. + + * variable.h (struct variable): Add a new flag "exportable" which + is true if the variable name is valid for export. + * variable.c (define_variable_in_set): Set "exportable" when a new + variable is defined. + (target_environment): Use the "exportable" flag instead of + re-checking the name here... an efficiency improvement. + +2002-07-31 Paul D. Smith + + * config.h-vms.template: Updates to build on VMS. Thanks to + Brian_Benning@aksteel.com for helping verify the build. + * makefile.com: Build the new hash.c file. + * hash.h: Use strcpmi(), not stricmp(), in the + HAVE_CASE_INSENSITIVE_FS case. + +2002-07-30 Paul D. Smith + + * hash.h (ISTRING_COMPARE, return_ISTRING_COMPARE): Add missing + backslashes to the HAVE_CASE_INSENSITIVE_FS case. + Reported by . + +2002-07-10 Paul D. Smith + + * variable.c (pop_variable_scope): Remove variable made unused by + new hash infrastructure. + * read.c (dep_hash_cmp): Rewrite this to handle ignore_mtime + comparisons as well as name comparisons. + * variable.h: Add a prototype for new hash_init_function_table(). + * file.c (lookup_file): Remove variables made unused by new hash + infrastructure. + * dir.c (directory_contents_hash_2): Missing return of hash value. + (dir_contents_file_exists_p): Remove variables made unused by new + hash infrastructure. + + + Installed Greg McGary's integration of the hash functions from the + GNU id-utils package: + +2002-07-10 Greg McGary + + * scripts/functions/filter-out: Add literals to to the + pattern space in order to add complexity, and trigger + use of an internal hash table. Fix documentation strings. + * scripts/targets/INTERMEDIATE: Reverse order of files + passed to expected `rm' command. + +2002-07-10 Greg McGary + + * Makefile.am (SRCS): Add hash.c (noinst_HEADERS): Add hash.h + * hash.c: New file, taken from id-utils. + * hash.h: New file, taken from id-utils. + + * make.h (HASH, HASHI): Remove macros. + (find_char_unquote): Change arglist in decl. + (hash_init_directories): New function decl. + * variable.h (hash.h): New #include. + (MAKELEVEL_NAME, MAKELEVEL_LENGTH): New constants. + * filedef.h (hash.h): New #include. + (struct file) [next]: Remove member. + (file_hash_enter): Remove function decl. + (init_hash_files): New function decl. + + * ar.c (ar_name): Delay call to strlen until needed. + * main.c (initialize_global_hash_tables): New function. + (main): Call it. Use MAKELEVEL_NAME & MAKELEVEL_LENGTH. + * misc.c (remove_comments): Pass char constants to find_char_unquote. + * remake.c (notice_finished_file): Update last_mtime on `prev' chain. + + * dir.c (hash.h): New #include. + (struct directory_contents) [next, files]: Remove members. + [ctime]: Add member for VMS. [dirfiles]: Add hash-table member. + (directory_contents_hash_1, directory_contents_hash_2, + directory_contents_hash_cmp): New functions. + (directories_contents): Change type to `struct hash_table'. + (struct directory) [next]: Remove member. + (directory_hash_1, directory_hash_2, directory_hash_cmp): New funcs. + (directory): Change type to `struct hash_table'. + (struct dirfile) [next]: Remove member. + [length]: Add member. [impossible]: widen type to fill alignment gap. + (dirfile_hash_1, dirfile_hash_2, dirfile_hash_cmp): New functions. + (find_directory): Use new hash table package. + (dir_contents_file_exists_p): Likewise. + (file_impossible): Likewise. + (file_impossible_p): Likewise. + (print_dir_data_base): Likewise. + (open_dirstream): Likewise. + (read_dirstream): Likewise. + (hash_init_directories): New function. + + * file.c (hash.h): New #include. + (file_hash_1, file_hash_2, file_hash_cmp): New functions. + (files): Change type to `struct hash_table'. + (lookup_file): Use new hash table package. + (enter_file): Likewise. + (remove_intermediates): Likewise. + (snap_deps): Likewise. + (print_file_data_base): Likewise. + + * function.c + (function_table_entry_hash_1, function_table_entry_hash_2, + function_table_entry_hash_cmp): New functions. + (lookup_function): Remove `table' argument. + Use new hash table package. + (struct a_word) [chain, length]: New members. + (a_word_hash_1, a_word_hash_2, a_word_hash_cmp): New functions. + (struct a_pattern): New struct. + (func_filter_filterout): Pass through patterns noting boundaries + and '%', if present. Note a_word length. Use a hash table if + arglists are large enough to justify cost. + (function_table_init): Renamed from function_table. + (function_table): Declare as `struct hash_table'. + (FUNCTION_TABLE_ENTRIES): New constant. + (hash_init_function_table): New function. + + * read.c (hash.h): New #include. + (read_makefile): Pass char constants to find_char_unquote. + (dep_hash_1, dep_hash_2, dep_hash_cmp): New functions. + (uniquize_deps): Use hash table to efficiently identify duplicates. + (find_char_unquote): Accept two char-constant stop chars, rather + than a string constant, avoiding zillions of calls to strchr. + Tighten inner search loops to test only for desired delimiters. + + * variable.c (variable_hash_1, variable_hash_2, + variable_hash_cmp): New functions. + (variable_table): Declare as `struct hash_table'. + (global_variable_set): Remove initialization. + (init_hash_global_variable_set): New function. + (define_variable_in_set): Use new hash table package. + (lookup_variable): Likewise. + (lookup_variable_in_set): Likewise. + (initialize_file_variables): Likewise. + (pop_variable_scope): Likewise. + (create_new_variable_set): Likewise. + (merge_variable_sets): Likewise. + (define_automatic_variables): Likewise. + (target_environment): Likewise. + (print_variable_set): Likewise. + +2002-07-10 Paul D. Smith + + Implement the SysV make syntax $$@, $$(@D), and $$(@F) in the + prerequisite list. A real SysV make will expand the entire + prerequisites list _twice_: we don't do that as it's a big + backward-compatibility problem. We only replace those specific + variables. + + * read.c (record_files): Replace any $@, $(@D), and $(@F) variable + references left in the list of prerequisites. Check for .POSIX as + we record targets, so we can disable non-POSIX behavior while + reading makefiles as well as running them. + (eval): Check the prerequisite list to see if we have anything + that looks like a SysV prerequisite variable reference. + +2002-07-09 Paul D. Smith + + * doc/make.texi (Prerequisite Types): Add a new section describing + order-only prerequisites. + + * read.c (uniquize_deps): If we have the same file as both a + normal and order-only prereq, get rid of the order-only prereq, + since the normal one supersedes it. + +2002-07-08 Paul D. Smith + + * AUTHORS: Added Greg McGary to the AUTHORS file. + * NEWS: Blurbed order-only prerequisites. + * file.c (print_file): Show order-only deps properly when printing + the database. + + * maintMakefile: Add "update" targets for wget'ing the latest + versions of various external files. Taken from Makefile.maint in + autoconf, etc. + + * dosbuild.bat: Somehow we got _double_ ^M's. Remove them. + Reported by Eli Zaretskii . + +2002-07-07 Paul D. Smith + + * po/*.po: Remove. We'll use wget to retrieve them at release + time. + + * variable.c (do_variable_definition) [W32]: On W32 using cmd + rather than a shell you get an exception. Make sure we look up + the variable. Patch provided by Eli Zaretskii . + + * remake.c (notice_finished_file): Fix handling of -t flag. + Patch provided by Henning Makholm . + + * implicit.c (pattern_search): Some systems apparently run short + of stack space, and using alloca() in this function caused an + overrun. I modified it to use xmalloc() on the two variables + which seemed like they might get large. Fixes Bug #476. + + * main.c (print_version): Update copyright notice to conform with + GNU standards. + (print_usage): Update help output. + + * function.c (func_eval): Create a new make function, $(eval + ...). Expand the arguments, put them into a buffer, then invoke + eval_buffer() on the resulting string. + (func_quote): Create a new function, $(quote VARNAME). Inserts + the value of the variable VARNAME without expanding it any + further. + + * read.c (struct ebuffer): Change the linebuffer structure to an + "eval buffer", which can be either a file or a buffer. + (eval_makefile): Move the code in the old read_makefile() which + located a makefile into here: create a struct ebuffer with that + information. Have it invoke the new function eval() with that + ebuffer. + (eval_buffer): Create a new function that creates a struct ebuffer + that holds a string buffer instead of a file. Have it invoke + eval() with that ebuffer. + (eval): New function that contains the guts of the old + read_makefile() function: this function parses makefiles. Obtains + data to parse from the provided ebuffer. Some modifications to + make the flow of the function cleaner and clearer. Still could + use some work here... + (do_define): Takes a struct ebuffer instead of a FILE*. Read the + contents of the define/endef variable from the ebuffer. + (readstring): Read the next line from a string-style ebuffer. + (readline): Read the next line from an ebuffer. If it's a string + ebuffer, invoke readstring(). If it's a FILE* ebuffer, read it + from the file. + + * dep.h (eval_buffer): Prototype eval_buffer(); + + * variable.c (do_variable_definition): Make sure that all + non-target-specific variables are registered in the global set. + If we're invoked from an $(eval ...) we might be inside a $(call + ...) or other function which has pushed a variable scope; we still + want to define our variables from evaluated makefile code in the + global scope. + +2002-07-03 Greg McGary + + * dep.h (struct dep) [ignore_mtime]: New member. + [changed]: convert to a bitfield. + * implicit.c (pattern_search): Zero ignore_mtime. + * main.c (main, handle_non_switch_argument): Likewise. + * rule.c (convert_suffix_rule): Likewise. + * read.c (read_all_makefiles, read_makefile, multi_glob): Likewise. + (read_makefile): Parse '|' in prerequisite list. + (uniquize_deps): Consider ignore_mtime when comparing deps. + * remake.c (update_file_1, check_dep): Don't force remake for + dependencies that have d->ignore_mtime. + * commands.c (FILE_LIST_SEPARATOR): New constant. + (set_file_variables): Don't include a + prerequisite in $+, $^ or $? if d->ignore_mtime. + Define $|. + +2002-06-18 Paul D. Smith + + * make.texinfo: Updates for next revision. New date/rev/etc. + Recreate all Info menus. Change license on the manual to the GNU + Free Documentation License. A number of typos. + (Variables Simplify): Don't use "-" before it's defined. + (Automatic Prerequisites): Rewrite the target example to work + properly if the compile fails. Remove incorrect comments about + how "set -e" behaves. + (Text Functions): Move the "word", "wordlist", "words", and + "firstword" functions here, from "File Name Functions". + * make-stds.texi: Update from latest GNU version. + * fdl.texi: (created) Import the latest GNU version. + +2002-06-06 Paul D. Smith + + * variable.c (do_variable_definition): New function: extract the + part of try_variable_definition() that actually sets the value + into a separate function. + (try_variable_definition): Call do_variable_definition() after + parsing the variable definition string. + (define_variable_in_set): Make the name argument const. + + * variable.h (enum variable_flavor): Make public. + (do_variable_definition): Create prototype. + + * read.c (read_all_makefiles): Create a new built-in variable, + MAKEFILE_LIST. + (read_makefile): Add each makefile read in to this variable value. + +2002-05-18 Eli Zaretskii + + * Makefile.DOS.template: Tweak according to changes in the + distribution. Add back the dependencies of *.o files. + + * configh.dos.template: Synchronize with config.h.in. + +2002-05-09 Paul D. Smith + + * file.c (file_timestamp_now): Use K&R function declaration. + + * getloadavg.c (getloadavg): Merge setlocale() fix from sh-utils + getloadavg.c. Autoconf thinks QNX is SVR4-like, but it isn't, so + #undef it. Remove predefined setup of NLIST_STRUCT. Decide + whether to include nlist.h based on HAVE_NLIST_H. Change obsolete + NLIST_NAME_UNION to new HAVE_STRUCT_NLIST_N_UN_N_NAME. + * configure.in (NLIST_STRUCT): Define this if we have nlist.h and + nlist.n_name is a pointer rather than an array. + + * acinclude.m4 (make_FUNC_SETVBUF_REVERSED): Grab the latest + version of AC_FUNC_SETVBUF_REVERSED from autoconf CVS. + * configure.in: Use it instead of the old version. + + * main.c (main): Prefer setvbuf() to setlinebuf(). + +2002-05-08 Paul D. Smith + + * Makefile.am (make_LDADD): Add GETLOADAVG_LIBS. + (loadavg_LDADD): Ditto. + +2002-04-29 Paul D. Smith + + * expand.c (recursively_expand_for_file): Rename + recursively_expand() to recursively_expand_for_file() and provide + an extra argument, struct file. If the argument is provided, set + the variable scope to that of the file before expanding. + * variable.h (recursively_expand): Make this a macro that invokes + recursively_expand_for_file() with a NULL file pointer. + * variable.c (target_environment): Call the renamed function and + provide the current file context. + Fixes Debian bug #144306. + +2002-04-28 Paul D. Smith + + Allow $(call ...) user-defined variables to be self-referencing + without throwing an error. Allows implementation of transitive + closures, among other possibly useful things. + Requested by: Philip Guenther + + * variable.h (struct variable): Add a new field: exp_count, and + new macros to hold its size and maximum value. + (warn_undefined): Make this a macro. + * variable.c (define_variable_in_set): Initialize it. + * expand.c (recursively_expand): If we detect recursive expansion + of a variable, check the exp_count field. If it's greater than 0 + allow the recursion and decrement the count. + (warn_undefined): Remove this (now a macro in variable.h). + * function.c (func_call): Before we expand the user-defined + function, modify its exp_count field to contain the maximum + number of recursive calls we'll allow. After the call, reset it + to 0. + +2002-04-21 Paul D. Smith + + Modified to use latest autoconf (2.53), automake (1.6.1), and + gettext (0.11.1). We're using gettext's new "external" support, + to avoid including libintl source with GNU make. + + * README.cvs: New file. Explain how to build GNU make from CVS. + + * configure.in: Modify checking for the system glob library. + Use AC_EGREP_CPP instead of AC_TRY_CPP. Remove the setting of + GLOBDIR (we will always put "glob" in SUBDIRS, so automake + etc. will manage it correctly). Set an automake conditional + USE_LOCAL_GLOB to decide whether to compile the glob library. + + * getloadavg.c (main): Include make.h in the "TEST" program to + avoid warnings. + + * Makefile.am: Remove special rules for loadavg. Replace them + with Automake capabilities for building extra programs. + + * signame.c: This file does nothing if the system provide + strsignal(). If not, it implements strsignal(). If the system + doesn't define sys_siglist, then we make our own; otherwise we use + the system version. + * signame.h: Removed. + + * main.c (main): No need to invoke signame_init(). Update copyright. + + * ABOUT-NLS: Removed. + * gettext.c: Removed. + * gettext.h: Get a simplified copy from the gettext package. + * po/*: Created. + * i18n/*.po: Moved to po/. + * i18n/: Removed. + + * config/*: Created. Contains package configuration helper files. + * config.guess, config.sub: Moved to config directory. + + * configure.in (AC_CONFIG_FILES): Add po/Makefile.in, config/Makefile. + Rework to use new-style autoconf features. Use the "external" + mode for gettext. Make the build.sh config file conditional on + whether build.sh.in exists, to avoid autoconf errors. + * acinclude.m4: Removed almost all macros as being obsolete. + Rewrote remaining macros to use AC_DEFINE. + * acconfig.h: Removed. + + * Makefile.am (EXTRA_DIST): Add config/config.rpath. Use a + conditional to handle customs support. Remove special handling + for i18n features. + +2002-04-20 Paul D. Smith + + * function.c (func_call): Don't mark the argument variables $1, + etc. as recursive. They've already been fully expanded so + there's no need to do it again, and doing so strips escaped $'s. + Reported by Sebastian Glita . + + * remake.c (notice_finished_file): Walk through double-colon + entries via the prev field, not the next field! + Reported by Greg McGary . + + * main.c (main): If the user specifies -q and asks for a specific + target which is a makefile, we got an assert. In that case it + turns out we should continue normally instead. + + * i18n/de.po, i18n/fr.po: Installed an updated translation. + + * i18n/he.po: Installed a new translation. + +2002-01-07 Paul D. Smith + + * i18n/es.po, i18n/ru.po: Installed an updated translation. + +2001-12-04 Paul D. Smith + + * i18n/ja.po: Installed an updated translation. + +2001-09-04 Paul D. Smith + + * i18n/da.po: Installed an updated translation. + +2001-08-03 Paul D. Smith + + * i18n/fr.po: Installed an updated translation. + Resolves Debian bug #106720. + +2001-06-13 Paul D. Smith + + * i18n/da.po, configure.in (ALL_LINGUAS): Installed a new + translation. + +2001-06-11 Paul D. Smith + + * i18n/ko.po: Installed a new translation. + +2001-05-06 Paul D. Smith + + Modify the EINTR handling. + + * job.c (new_job): Reorganize the jobserver algorithm. Reorder + the way in which we manage the file descriptor/signal handler race + trap to be more efficient. + +2001-05-06 Paul Eggert + + Restart almost all system calls that are interrupted, instead + of worrying about EINTR. The lone exception is the read() for + job tokens. + + * configure.in (HAVE_SA_RESTART): New macro. + (MAKE_JOBSERVER): Define to 1 only if HAVE_SA_RESTART. + * main.c (main): Use SA_RESTART instead of the old, + nonstandard SA_INTERRUPT. + + * configure.in (AC_CHECK_FUNCS): Add bsd_signal. + * main.c (bsd_signal): New function or macro, + if the implementation doesn't supply it. + (The bsd_signal function will be in POSIX 1003.1-200x.) + (HANDLESIG): Remove. + (main, FATAL_SIG): Use bsd_signal instead of signal or HANDLESIG. + + * make.h (EINTR_SET): Remove. + (SA_RESTART): New macro. + + * arscan.c (ar_member_touch): Don't worry about EINTR. + * function.c (func_shell): Likewise. + * job.c (reap_children, free_child, new_job): Likewise. + * main.c (main): Likewise. + * remake.c (touch_file, name_mtime): Likewise. + + * arscan.c (ar_member_touch): Fix bug uncovered by EINTR removal; + if fstat failed with errno!=EINTR, the error was ignored. + + * job.c (set_child_handler_action_flags): New function. + (new_job): Use it to temporarily clear the SIGCHLD action flags + while reading the token. + +2001-05-02 Paul D. Smith + + * job.c (start_job_command): Don't add define/endef per-line flags + to the top-level flags setting. + +2001-04-03 Paul D. Smith + + * arscan.c (VMS_get_member_info,ar_scan) [VMS]: VMS sets the low + bit on error, so check for odd return values, not non-0 return + values. + (VMS_get_member_info): Calculate the timezone differences correctly. + Reported by John Fowler . + + +2001-03-14 Paul D. Smith + + * variable.c (lookup_variable) [VMS]: Null-terminate the variable + value before invoking define_variable(). + Reported by John Fowler . + +2001-02-07 Paul D. Smith + + * read.c (record_target_var): If we reset the variable due to a + command-line variable setting overriding it, turn off the "append" + flag. + +2001-01-17 Paul D. Smith + + * variable.c (lookup_variable) [VMS]: When getting values from the + environment, allocate enough space for the _value_ plus escapes, + not enough space for the name plus escapes :-/. + Reported by John Fowler . + + * remake.c (f_mtime): Removed the "***" prefix from the mod time + warnings that make generates, so it doesn't look like an error. + Reported by Karl Berry . + + + Fix for PR/2020: Rework appended target-specific variables. I'm + fairly confident this algorithm is finally correct. + + * expand.c (allocated_variable_append): Rewrite. Instead of + expanding each appended variable then adding all the expanded + strings together, we append all the unexpanded values going up + through the variable set contexts, then expand the final result. + This behaves just like non-target-specific appended variable + values, while the old way didn't in various corner cases. + (variable_append): New function: recursively append the unexpanded + value of a variable, walking from the outermost variable scope to + the innermost. + * variable.c (lookup_variable): Remove the code that looked up the + variable set list if the found variable was "append". We don't + need this anymore. + (lookup_variable_in_set): Make this non-static so we can use it + elsewhere. + (try_variable_definition): Use lookup_variable_in_set() rather + than faking out current_variable_set_list by hand (cleanup). + * variable.h: Add a prototype for the now non-static + lookup_variable_in_set(). + +2000-11-17 Paul D. Smith + + * remake.c (f_mtime) [WINDOWS32]: On various advice, I changed the + WINDOWS32 port to assume timestamps can be up to 3 seconds away + before throwing a fit. + +2000-11-17 Paul D. Smith + + * read.c (readline): CRLF calculations had a hole, if you hit the + buffer grow scenario just right. Reworked the algorithm to avoid + the need for len or lastlen at all. Problem description with + sample code chages provided by Chris Faylor . + +2000-10-24 Paul D. Smith + + * gettext.c (SWAP): Declare this with the prototype, otherwise + some systems don't work (non-32-bit? Reported for Cray T3E). + Reported by Thorstein Thorsteinsson . + +2000-10-05 Paul D. Smith + + * acinclude.m4 (AM_LC_MESSAGES): Remove undefined macro + AM_LC_MESSAGES; it doesn't seem to do anything anyway?? + + * i18n/gl.po, configure.in (ALL_LINGUAS): New Galician translation. + +2000-09-22 Paul D. Smith + + * gettext.c: Don't #define _GETTEXT_H here; we only include some + parts of the real gettext.h here, and we expect to really include + the real gettext.h later. If we keep this #define, it's ignored. + +2000-09-21 Paul D. Smith + + * main.c (log_working_directory): Rework the text to use complete + sentences, to make life simpler for the translators. + +2000-08-29 Paul D. Smith + + * file.c (remove_intermediates): Print a debug message before we + remove intermediate files, so the user (if she uses -d) knows + what's going on. + +2000-08-21 Paul D. Smith + + * variable.c (try_variable_definition): Change how we handle + target-specific append variable defns: instead of just setting the + value, expand it as an append _but_ only within the current + target's context. Otherwise we lose all but the last value if the + variable is appended more than once within the current target + context. Fixes PR/1831. + +2000-08-16 Paul D. Smith + + * function.c (func_shell): Nul-terminate the buffer before + printing an exec error message (just in case it's not!). + Fixes PR/1860, reported by Joey Hess . + +2000-07-25 Paul D. Smith + + * job.c (construct_command_argv_internal): Add "~" to the list of + sh_chars[] which disallow optimizing out the shell call. + +2000-07-23 Paul Eggert + + * NEWS, make.texinfo: Document .LOW_RESOLUTION_TIME, which + supersedes --disable-nsec-timestamps. + * make.texinfo: Consistently use "time stamp" instead of "timestamp". + * README: Remove --disable-nsec-timestamps. + + * filedef.h (struct file.low_resolution_time): New member. + * file.c (snap_deps): Add support for .LOW_RESOLUTION_TIME. + * remake.c (update_file_1): + Avoid spurious rebuilds due to low resolution time stamps, + generalizing the earlier code that applied only to archive members. + (f_mtime): Archive members always have low resolution time stamps. + + * configure.in: Remove --disable-nsec-timestamps, as this has + been superseded by .LOW_RESOLUTION_TIME. + +2000-07-23 Paul Eggert + + * configure.in (enable_nsec_timestamps): Renamed from + make_cv_nsec_timestamps, since enable/disable options + shouldn't be cached. + +2000-07-23 Bruno Haible + and Paul Eggert + + * file.c (file_timestamp_now): + Use preprocessor-time check for FILE_TIMESTAMP_HI_RES + so that clock_gettime is not linked unless needed. + + * filedef.h (FILE_TIMESTAMP_HI_RES): + Remove definition; "configure" now does this. + + * configure.in (jm_AC_TYPE_UINTMAX_T): Move up, + to before high resolution file timestamp check, + since that check now uses uintmax_t. + (FILE_TIMESTAMP_HI_RES): Define to nonzero if the code should use + high resolution file timestamps. + (HAVE_CLOCK_GETTIME): Do not define if !FILE_TIMESTAMP_HI_RES, + so that we don't link in clock_gettime unnecessarily. + +2000-07-17 Paul D. Smith + + * i18n/ja.po: New version of the translation file. + +2000-07-07 Paul D. Smith + + * remake.c (f_mtime): If NO_FLOAT is defined, don't bother with + the offset calculation. + (name_mtime): Replace EINTR test with EINTR_SET macro. + +2000-07-07 Paul Eggert + + Fix for PR/1811: + + * remake.c (update_file_1): + Avoid spurious rebuilds of archive members due to their + timestamp resolution being only one second. + (f_mtime): Avoid spurious warnings of timestamps in the future due to + the clock's resolution being lower than file timestamps'. + When warning about future timestamps, report only the discrepancy, + not the absolute value of the timestamp and the current time. + + * file.c (file_timestamp_now): New arg RESOLUTION. + * filedef.h (file_timestamp_now): Likewise. + (FILE_TIMESTAMP_NS): Now returns int. All uses changed. + +2000-07-05 Paul D. Smith + + * variable.c (lookup_variable) [VMS]: Remove vestigial references + to listp. Fixes PR/1793. + +2000-06-26 Paul Eggert + + * Makefile.am (MAINTAINERCLEANFILES): New macro, with stamp-pot in it. + + * dir.c (vms_hash): Ensure ctype macro args are nonnegative. + + * remake.c (f_mtime): Remove unused var memtime. + +2000-06-25 Martin Buchholz + + * make.texinfo, NEWS, TODO.private: Minor spelling corrections. + Ran spell-check on make.texinfo. + + +See ChangeLog.2 for earlier changes. diff --git a/src/mkutil/make/ChangeLog.1 b/src/mkutil/make/ChangeLog.1 new file mode 100644 index 00000000..8f866e7c --- /dev/null +++ b/src/mkutil/make/ChangeLog.1 @@ -0,0 +1,4980 @@ +Tue Oct 29 20:57:36 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62. + + * remake.c (update_file_1): Check for deps still running before + giving up if any dep has failed. + +Sat Oct 26 16:20:00 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.h [uts]: #undef S_ISREG and S_ISDIR if defined. + +Fri Oct 25 19:50:39 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.60.17. + +Thu Oct 24 16:58:36 1991 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * job.c (start_job): Don't check for empty cmds before tweaking the + command_ptr. Just let construct_command_argv do it. + +Tue Oct 22 20:21:03 1991 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * remake.c, arscan.c [POSIX]: instead of . + + * make.h [POSIX]: Declare vfork as pid_t. + +Mon Oct 21 15:37:30 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.60.16. + + * job.c (construct_command_argv, construct_command_argv_internal): + Take new 2nd arg RESTP. If non-NULL, stop parsing at newline, and + store addr of the NL in *RESTP. + (start_job): Don't chop expanded cmd lines up; use above code to do it. + * function.c (expand_function: `shell'): Pass RESTP==NULL. + +Sat Oct 19 15:36:34 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.60.15. + +Fri Oct 18 15:26:55 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (start_job): If on the same cmds->command_lines elt, look + at cmds->lines_recurse[CHILD->command_line - 1] instead of + [CHILD->command_line]. + + * dir.c [sgi]: , not ndir or anything else. + +Thu Oct 17 16:28:55 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * file.c (print_file_data_base): Remove unused var. + + * make.h [NeXT]: No #define ANSI_STRING. + +Tue Oct 15 20:08:41 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.60.14. + +Fri Oct 11 16:23:52 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * make.h: Use PATH_MAX for getwd defn. + + * make.h: Move getcwd/getwd outside of #ifndef POSIX, and make it + #if USG||POSIX. + +Thu Oct 10 11:53:31 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.60.13. + + * read.c (read_all_makefiles): When processing MAKEFILES, save the + malloc'd ptr to be freed, instead of freeing part-way thru it. + + * remake.c (update_file_1): Don't tweak FILE->also_make. + (update_file): Do it here. After calling update_file_1, set the + command_state, update_status, and updated members of each also_make + elt to FILE's values. + +Tue Oct 8 14:56:04 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * Version 3.60.12. + + * remake.c (notice_finished_file): Set command_state of FILE and + its also_make chain to cs_finished here. + * commands.c (execute_file_commands), job.c (child_handler), + remake.c (remake_file): Don't set it before calling + notice_finished_file. + + * file.h (struct file): Changed `also_make' to struct dep *. + * job.c (delete_child_targets), file.c (print_file_data_base), + remake.c (notice_finished_file), implicit.c (pattern_search): + Use dep chain instead of array of file names. + +Mon Oct 7 17:04:33 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.60.11. + + * arscan.c: Declare open. + * misc.c: Declare {get,set}{re,}[ug]id. + * variable.c (target_environment): Declare getenv. + +Sat Oct 5 15:13:03 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * make.h [NeXT]: instead of . + +Fri Oct 4 16:05:41 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * default.c (default_suffixes, defualt_suffix_rules): Add .texi + just like .texinfo. + + * Version 3.60.10. + + * job.c: Move vfork decl into make.h. + +Fri Sep 27 18:45:30 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * compatMakefile (glob/libglob.a): Pass CC value to submake. + +Thu Sep 26 00:08:15 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * load.c (load_average): Made not static. + + * load.c [ultrix && vax]: Define LDAV_TYPE and LDAV_CVT for Ultrix 4.2. + +Tue Sep 24 00:17:20 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.60.9. + + * read.c (record_files): Warn about extra cmds even if the target's + name begins with a dot. I think the lusers can handle this. + +Mon Sep 23 22:33:26 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.h, arscan.c: Don't declare bcmp, bzero, or bcopy if they're + #define'd. + * make.h: Declare write and open. + + * default.c (default_suffixes, default_suffix_rules, + default_variables): Add .C just like .cc. + * make.texinfo (Catalogue of Rules): Document .C. + + * make.man (-w): Fix gramo. + +Fri Sep 20 17:18:16 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.h: No text after #endif. + +Sun Sep 15 16:20:46 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * Version 3.60.8. + + * implicit.c (pattern_search): In the second pass, recurse on rule + deps that don't have a %. Why did I make it not do this? + +Fri Sep 14 18:29:39 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * read.c (record_files): For extra cmds, use the last ones given. + If the target's name doesn't begin with a dot (bletch!!), emit a + two-line warning, one line giving the old cmds' location and the + other the new cmds' location. + + * misc.c (makefile_error, makefile_fatal): New fns. + * make.h: Declare them. + * Use them instead of error/fatal for all msgs including a file + name and line number. + +Thu Sep 13 16:35:54 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * make.h: Declare define_default_variables. + Declare ar_parse_name, instead of ar_name_parse (M-t). + +Mon Sep 10 18:35:40 1991 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * Version 3.60.7. + + * make.texinfo (Variables: Setting): Say whitespace is removed if + "immediately after =", rather than simply "after =". + + * job.c: Don't declare wait #ifdef POSIX. + + * make.h [__GNUC__]: #undef alloca and then #define it. + + * main.c (main): When pruning makefiles which might loop from the + read_makefiles chain, look at all `prev' entries of double-colon rules. + +Fri Sep 7 00:41:53 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * main.c (main): Only remove makefiles with cmds but no deps from + the list of makefiles to be rebuilt if they are :: targets. + : targets with cmds and no deps are not dangerous. + +Wed Sep 5 17:35:51 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (defines): Add comment that some compilers take + ENUM_BITFIELDS but produce bogus code. + (LOAD_AVG): Fix examples to \ "s. + (LOADLIBES): Add comment that SGI Irix needs -lmld for nlist. + +Tue Sep 4 20:26:26 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.60.6. + +Fri Aug 30 19:34:04 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * remake.c (update_file_1): When checking the command_state of + deps, check through the prev chain. + (update_goal_chain): When a target is finished, start checking its + prev (if it has one) instead. + +Wed Aug 7 17:32:03 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * rule.c (convert_to_pattern): Allow files with deps to define + suffix rules (really this time). + +Mon Aug 5 17:09:21 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * misc.c (user_access, make_access): Do saved-IDs (USG) flavor + #ifdef POSIX. + + * file.c (enter_file): Strip ./s here. + * read.c (parse_file_seq): Not here. + +Tue Jul 23 23:34:30 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile: Added comment that -lPW alloca is broken on HPUX. + +Thu Jul 18 03:10:41 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.60.5. + + * read.c (read_makefile): Ignore lines containing chars that are + all isspace, not just all isblank. + + * make.texinfo (Copying): @include gpl.texinfo, rather than copying + the text. + * gpl.texinfo: New file (symlink to /gd/gnu/doc/gpl.texinfo). + * GNUmakefile: Put gpl.texinfo in distribution. + +Tue Jul 16 12:50:35 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * make.h: #define _GNU_SOURCE before including headers. + Include and define isblank if doesn't. + * commands.c: Don't include here. + * *.c: Use isblank instead of explicit ' ' || '\t'. + +Mon Jul 15 17:43:38 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * function.c (expand_function: `filter'/`filter-out'): Fixed to not + loop infinitely. + +Fri Jul 12 12:18:12 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * function.c (expand_function: `filter'/`filter-out'): Rewritten to + handle filter-out of multiple patterns properly. Also no longer + mallocs and reallocs for temp array; uses alloca and a linked-list + instead. + +Wed Jul 10 22:34:54 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.60.4. + + * make.texinfo: Moved some @groups that were outside @examples to + be inside them. + + * load.c [apollo] (load_average): Define using special syscall for + Apollo DOMAIN/OS SR10.n. + +Thu Jul 4 12:32:53 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * make.texinfo (Missing): Added Unix excessive implicit rule + search; mention that POSIX.2 doesn't require any of the missing + features. + (Top): Updated printed manual price to $15. + +Wed Jul 3 18:17:50 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * file.c (rename_file): Carry over last_mtime when merging files. + * remake.c (f_mtime): Tail-recurse after renaming VPATH file, to + check for saved date in existing renamed-to file. + + * remote-cstms.c (start_remote_job): Use PATH_VAR. + + * commands.c [POSIX || __GNU_LIBRARY__]: Don't declare getpid. + + * compatMakefile (glob-{clean,realclean}): Run clean/realclean in glob. + (clean, realclean): Require those. + + * make.h: Always declare environ. + Don't declare old glob functions. + + * GNUmakefile: Make no-lib deps for load.c and remote.c. + +Tue Jul 2 18:35:20 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.60.3. + +Mon Jul 1 16:58:30 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (multi_glob): Don't pass GLOB_QUOTE flag to glob. + + * make.h [POSIX]: Include , and don't declare things that + should be there. + + * main.c (main) [USG && sgi]: malloc a buffer for broken sgi stdio. + +Sat Jun 29 11:22:21 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * function.c (expand_function: `shell'): Use alloca for the error + msg buffer, instead of assuming an arbitrary max size. + +Fri Jun 28 18:15:08 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c [POSIX] (search_path): Do real 1003.1 goop to get NGROUPS_MAX. + +Wed Jun 26 11:04:44 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * default.c (define_default_variables): New fn. + (install_default_implicit_rules): Code for above fn moved there. + * main.c (main): Do define_default_variables before reading the + makefile. + +Tue Jun 25 17:30:46 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * main.c (main): Quote ; in MAKEOVERRIDES. + +Tue Jun 18 13:56:30 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * compatMakefile: Fixed typo in comment. + +Tue Jun 11 00:14:59 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * Version 3.60.2. + +Mon Jun 10 14:46:37 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.h: Always include . + [POSIX]: Include and #define MAXPATHLEN to be PATH_MAX. + + * default.c (default_suffix_rules: .texinfo.dvi): Use $(TEXI2DVI). + (default_variables): Define TEXI2DVI. + +Thu Jun 6 16:49:19 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.60.1. + + * make.h (SIGNAL): Cast handler arg to SIGHANDLER type. + +Wed Jun 5 06:00:43 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * read.c (multi_glob): Use POSIX.2 `glob' function. + If a glob pattern matches nothing, leave it as is (a la sh, bash). + Also, if can't find USER for ~USER, leave it as is (a la bash). + +Mon Jun 3 16:36:00 1991 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * compatMakefile: Rewrote comments about -Ds to be easier to use. + + * make.h, arscan.c, remake.c, main.c, dir.c, job.c: Changed tests + of _POSIX_SOURCE to POSIX. + + * job.c: Take getdtablesize out of #ifdef __GNU_LIBRARY__. + Put separately #ifdef USG. + + * COPYING: Replaced with version 2. + * Changed copyright notices to refer to GPL v2. + +Thu May 30 00:31:11 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.h: Don't declare sigblock for POSIX. + + * main.c (main, log_working_directory) [USG]: Get getcwd failure + mode from errno, not passed buffer like BSD getwd. + + * misc.c (child_access): New fn to set access for a child process; + like user_access, but you can't change back. + * make.h: Declare it. + * job.c (exec_command): Use it in place of user_access. + +Wed May 29 23:28:48 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * default.c (default_variables) [pyr]: PC = pascal. + +Tue May 28 20:24:56 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * variable.c (print_variable): Put a newline before `endef'. + +Sat May 25 02:39:52 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.60. + +Wed May 22 19:41:37 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.59.5. + +Thu May 16 13:59:24 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * main.c (main): Do USGr3 setvbuf behavior #ifdef APOLLO. + Don't handle SIGCHLD #ifdef USG (Apollo is USG but defines SIGCHLD). + +Fri May 10 14:59:33 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * remake.c [sgi]: Don't include . + +Wed May 8 01:54:08 1991 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * make.h (SIGHANDLER): #define as (void *) #if __STDC__, + else (int (*)()). + (SIGNAL): Use it to cast return value. + * main.c (main): Cast SIG_IGN to SIGHANDLER when comparing. + * job.c (block_signals, unblock_signals): Use SIGNAL instead of signal. + + * main.c: Declare mktemp to return char*, not int. + + * job.c (new_job): Don't increment files_remade. + * remake.c (notice_finished_file): Do it here. + + * read.c (do_define): Don't clobber DEFINITION[-1] on empty defns. + Free storage that is no longer needed. + +Wed Apr 24 20:49:48 1991 Roland McGrath (roland at churchy.gnu.ai.mit.edu) + + * misc.c (message): New fn to print informational msgs with + leading "make: " or "make[N]: ". + * make.h: Declare it. + * remake.c (update_file): Use it instead of printf. + +Fri Apr 19 05:52:45 1991 Roland McGrath (roland at churchy.gnu.ai.mit.edu) + + * main.c (main): When there are no targets, if there were no + makefiles, print a different error message, which mentions makefiles. + +Tue Apr 16 03:22:45 1991 Roland McGrath (roland at geech.gnu.ai.mit.edu) + + * remake.c (update_file): Print "nothing to be done" instead of "is + up to date" if FILE->cmds == 0. + + * job.c [!WIFEXITED]: Define if not already defined. + +Thu Apr 11 18:00:50 1991 Roland McGrath (roland at wookumz.gnu.ai.mit.edu) + + * arscan.c (ar_name_equal): Fixed truncation comparison. + +Tue Apr 2 16:17:35 1991 Roland McGrath (roland at churchy.gnu.ai.mit.edu) + + * glob.c: Use common version from djm. + * dir.c: Snarfed #ifdef mess for or whatever from glob.c. + (dir_file_exists_p): Ignore directory entries with d_ino==0. + +Mon Apr 1 20:49:45 1991 Roland McGrath (roland at albert.gnu.ai.mit.edu) + + * Version 3.59.4. + +Fri Mar 29 19:16:18 1991 Roland McGrath (roland at albert.gnu.ai.mit.edu) + + * job.c (free_child): Free CHILD->environment and its elts. + +Sat Mar 23 14:08:09 1991 Roland McGrath (roland at albert.gnu.ai.mit.edu) + + * read.c (read_makefile): Don't ignore lines containing only + comments if they start with a tab. Such lines should be passed to + the shell for it to decide about the comments. + + * job.c (free_child): Free CHILD->command_lines and its elts, not + CHILD->commands (which is obsolete). + * job.h, job.c: Remove obsolete `commands' member of `struct child'. + +Sun Mar 17 18:40:53 1991 Roland McGrath (roland at albert.ai.mit.edu) + + * remake.c (update_file): Print a msg for a top-level up-to-date + phony target (a different one than for a real file). + + * read.c (conditional_line): Boundary check so we don't check the + value of the -1th elt of the stack (which is bogus). + +Sat Mar 16 16:58:47 1991 Roland McGrath (roland at albert.ai.mit.edu) + + * read.c (conditional_line): Don't evaluate an if* when we're + already ignoring. Instead, just push a new level, with a value of + 1, to keep ignoring. + +Tue Mar 12 00:16:52 1991 Roland McGrath (roland at geech.ai.mit.edu) + + * Version 3.59.3. + +Mon Mar 11 23:56:57 1991 Roland McGrath (roland at geech.ai.mit.edu) + + * job.c (construct_command_argv_internal): Quote backslashes + when building the shell -c line. + +Fri Mar 8 01:40:18 1991 Roland McGrath (roland at geech.ai.mit.edu) + + * job.c (exec_command): Call user_access rather than setgid(getgid()). + + * misc.c (remove_comments): Renamed from collapse_line; took out + collapse_continuations call. + * make.h: Change decl. + * read.c (read_makefile): Collapse continuations on the line buffer + immediately after reading it. Call remove_comments rather than + collapse_line (which is now defunct). + +Thu Feb 21 18:06:51 1991 Roland McGrath (mcgrath at cygint.cygnus.com) + + * misc.c (user_access, make_access): New fns to toggle btwn permissions + for user data (files and spawning children), and permissions for make + (for taking the load average, mostly). + * make.h: Declare them. + * job.c (start_job): Call make_access before wait_to_start_job, and + user_access after. + * main.c (main): Call user_access before doing much. + +Mon Feb 3 15:02:03 1991 Roland McGrath (roland at albert.ai.mit.edu) + + * Version 3.59.2. + +Tue Jan 29 20:30:50 1991 Roland McGrath (roland at cygint.cygnus.com) + + * read.c (read_all_makefiles): Use allocated_variable_expand to expand + `$(MAKEFILES)', since the results are used across calls to + read_makefile, which could clobber them. + +Wed Jan 23 00:24:10 1991 Roland McGrath (roland at cygint.cygnus.com) + + * main.c (main): Call install_default_implicit_rules after reading + makefiles, not before. + * default.c (install_default_implicit_rules): If a suffix-rule file + entry has cmds, don't give it any from default_suffix_rules. + +Fri Jan 17 17:39:49 1991 Roland McGrath (roland at albert.ai.mit.edu) + + * arscan.c: Added support for AIX archives. + + * remake.c: Don't include ar.h. + * main.c: Removed unused atol decl. + * arscan.c (ar_scan): Declare arg FUNCTION to return long int. + * ar.c (ar_touch): Don't perror for an invalid archive. + * make.h: Declare lseek as long int. + + * job.c [hpux]: Define getdtablesize a la USG. + +Sun Jan 12 21:08:34 1991 Roland McGrath (roland at albert.ai.mit.edu) + + * Version 3.59.1. + +Fri Jan 10 03:48:08 1991 Roland McGrath (roland at albert.ai.mit.edu) + + * job.c (search_path): Take new arg, place to put full pathname (rather + than mallocing it). + (exec_command): Pass it, using auto storage. + + * main.c (print_version): Updated copyright years. + +Wed Jan 8 19:46:19 1991 Roland McGrath (roland at albert.ai.mit.edu) + + * job.c [_POSIX_SOURCE]: Just #include , and define macro + WAIT_NOHANG in terms of waitpid. + [!_POSIX_SOURCE && (HAVE_SYS_WAIT || !USG)]: Don't #include + (make.h does). + Define macro WAIT_NOHANG in terms of wait3. + (child_handler): #ifdef on WAIT_NOHANG, not HAVE_SYS_WAIT || !USG. + Use WAIT_NOHANG macro instead of wait3. + + * file.h (struct file.command_state): Remove unused elt. + +Wed Dec 26 18:10:26 1990 Roland McGrath (roland at albert.ai.mit.edu) + + * commands.c (set_file_variables): If FILE got its commands from + .DEFAULT, make $< == $@ (4.3 BSD/POSIX.2d11 compat). + +Mon Dec 24 17:36:27 1990 Roland McGrath (roland at albert.ai.mit.edu) + + * default.c (default_variables): Rename 2nd LINK.s defn to LINK.S. + +Fri Dec 14 15:05:25 1990 Roland McGrath (roland at albert.ai.mit.edu) + + * vpath.c (selective_vpath_search): Check for makefile-mentioned before + checking for actual existence. The old order loses if the containing + directory doesn't exist (but a rule might make it). + + * make.h [__GNUC__]: Don't #define alloca if already #define'd. + + * rule.c (convert_to_pattern): Don't look at the target constructed for + the empty rule when making the null-suffix rule. Construct it over + again, since the former may have been freed already. + +Thu Dec 13 17:21:03 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * make.h [__GNU_LIBRARY__]: Include to get random fn decls. + +Wed Dec 12 17:12:59 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * make.h, arscan.c, glob.c: Only include #ifdef USG. + + * variable.c (define_variable_in_set): Replace env_overrides check that + wasn't really redundant (undoing Sep 28 change). Add comment saying + why this check is necessary. + + * job.c, main.c [DGUX]: Needs siglist like USG. + +Mon Dec 11 01:19:29 1990 Roland McGrath (roland at albert.ai.mit.edu) + + * default.c [M_XENIX]: For rules that are different for Xenix, use the + generic Unix version #ifdef __GNUC__. + + * main.c [M_XENIX]: Use USGr3-style setvbuf call. + + * read.c (find_percent): Do backslash folding correctly, not leaving + extra crud on the end of the string. + +Sun Dec 10 21:48:36 1990 Roland McGrath (roland at albert.ai.mit.edu) + + * job.c: Don't declare wait3 if it's #defined. + + * GNUmakefile, compatMakefile, make.texinfo: Change make-info + to make.info. + +Thu Dec 7 21:20:01 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * make.h [STDC_HEADERS || __GNU_LIBRARY__ || _POSIX_SOURCE]: Use + ANSI and names for str/mem functions. + Use to declare misc fns rather than explicit decls. + [_POSIX_SOURCE]: Don't declare kill ( will). + Include before because some braindead + nonconformant 1003.1 implementation needs it. + * misc.c: Don't declare malloc, realloc. Do it in make.h. + * arscan.c, glob.c: Use sequence for string fns from make.h verbatim. + * make.h (S_ISDIR, S_ISREG): Declare if necessary. + * commands.c (delete_child_targets), job.c (search_path), read.c + (construct_include_path): Use S_ISfoo(m) instead of + (m & S_IFMT) == S_IFfoo. + * dir.c, glob.c [_POSIX_SOURCE]: Use dirent. + +Wed Nov 29 22:53:32 1990 Roland McGrath (roland at geech.ai.mit.edu) + + * Version 3.59. + +Tue Nov 28 16:00:04 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * arscan.c (ar_name_equal) [APOLLO]: Don't do `.o' hacking. On Apollos + the full file name is elsewhere, and there is no length restriction (or + so I'm told). + +Thu Nov 23 17:33:11 1990 Roland McGrath (roland at albert.ai.mit.edu) + + * load.c [hp300 && BSD] (LDAV_CVT): Define for this system. + +Tue Nov 21 07:58:40 1990 Roland McGrath (roland at albert.ai.mit.edu) + + * read.c (record_files): Fix trivial bug with deciding to free storage + for a file name. + +Thu Nov 16 06:21:38 1990 Roland McGrath (roland at geech.ai.mit.edu) + + * compatMakefile ($(bindir)/make): Install it setgid kmem. + +Thu Nov 1 16:12:55 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * GNUmakefile (make-*.tar.Z): Use `h' option to tar (dereference + symlinks), to grab texinfo.tex from wherever it lives. + +Tue Oct 30 16:15:20 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * Version 3.58.13. + +Fri Oct 26 14:33:34 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * GNUmakefile: make-*.tar.Z: Include texinfo.tex. + +Tue Oct 23 19:34:33 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * main.c (define_makeflags): When there are no flags to write, make + sure the array has two leading nulls, since `MAKEFLAGS' is defined from + &flags[1]. + + * main.c (default_keep_going_flag): New variable (constant one). + (command_switches: -k, -S): Use above for default value. + (define_makeflags): Only write flag/flag_off switches if they are on, + and either there is no default value, or they are not the default. + +Mon Oct 22 16:14:44 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * main.c (struct command_switch): New member `no_makefile'. + (command_switches: -n, -q, -t): Set no_makefile == 1. + (define_makeflags): Take new arg MAKEFILE: if nonzero, don't use + options whose `no_makefile' flags are set. + (main): Call define_makeflags with MAKEFILE==1 before remaking + makefiles, and again with MAKEFILE==0 before remaking goals. + +Tue Oct 2 17:16:45 1990 Roland McGrath (roland at geech.ai.mit.edu) + + * Version 3.58.12. + +Mon Oct 1 15:43:23 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * arscan.c [HPUX]: Use PORTAR==1 format. + +Sat Sep 29 16:38:05 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * make.h, remake.c, arscan.c: Don't declare `open'. + +Fri Sep 28 04:46:23 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * variable.c (define_variable_in_set): Remove redundant -e check. + +Wed Sep 26 00:28:59 1990 Roland McGrath (roland at geech.ai.mit.edu) + + * job.c (start_job): Set RECURSIVE from the right elt of + CHILD->file->cmds->lines_recurse. + + * commands.c (chop_commands): Don't botch the line count for allocating + CMDS->lines_recurse. + + * Version 3.58.11. + + * job.c (start_job): Don't always increment CHILD->command_line! Only + do it when CHILD->command_ptr has run out! (Dumb bug. Sigh.) + +Thu Sep 20 02:18:51 1990 Roland McGrath (roland at geech.ai.mit.edu) + + * GNUmakefile [ARCH]: Give explicit rule for remote.{c,dep} to use + variable `REMOTE' for more flags. + ($(prog)): Link in $(LOADLIBES). + +Wed Sep 19 02:30:36 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * commands.h (struct commands): New member `ncommand_lines', the number + of elts in `command_lines' et al. + * commands.c (chop_commands): Set `ncommand_lines' elt of CMDS, and + don't put a nil pointer at the end of `command_lines'. + * job.h (struct child): New member `command_lines' to hold + variable-expanded command lines. + * job.c (new_job): Store expanded command lines in `command_lines' + member of new child. Don't clobber FILE->cmds. + (start_job): Use CHILD->command_lines in place of + CHILD->file->cmds->command_lines. + + * variable.h, variable.c, job.c, expand.c: Undo yesterday's change, + which is no longer necessary since we have cleverly avoided the issue. + + * job.c (start_job): Don't variable-expand each command line. + (new_job): Do them all here, storing the expansions in the array. + +Tue Sep 18 01:23:13 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * variable.h (struct variable): Remove `expanding' member. + * variable.c (define_variable_in_set): Don't initialize it. + * expand.c (struct variable_expanding): New type, a linked list + containing `struct variable' pointers. + (variables_expanding): New variable, the chain of variables currently + being expanded. + (recursively_expand): Don't test and set `expanding' member. + Instead, run through the `variables_expanding' chain looking for a link + referring to V to find self-reference. Add a new link to the chain, + describing V, before recursive expansion, and pop it off afterward. + * job.c (child_handler): Save `variables_expanding' and clear it before + calling start_job, and restore it afterward. This avoids major lossage + when the SIGCHLD comes in the middle of variable expansion. + +Mon Sep 17 14:46:26 1990 Roland McGrath (roland at geech.ai.mit.edu) + + * job.c, commands.c: Don't define sigmask. + * make.h: Put it here instead. + + * variable.c (target_environment): If `.NOEXPORT' was specified as a + target, only export command-line and environment variables, and + file-origin variables that were in the original environment. + + * make.man: Add missing ?roff control for `-I' option description. + +Thu Sep 13 14:10:02 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * load.c [UMAX]: Move #include to [not UMAX_43]. + +Wed Sep 12 15:10:15 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * expand.c (recursively_expand): Don't use `reading_filename' and + `reading_lineno_ptr' if they're nil. + +Thu Aug 30 17:32:50 1990 Roland McGrath (roland at geech) + + * Version 3.58.10. + +Tue Aug 28 04:06:29 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * job.c [USG] (unknown_children_possible): New variable, set nonzero + when it's possible for children not in the `children' chain to die. + (block_signals) [USG]: Set it. + (unblock_signals) [USG]: Clear it. + (child_handler) [USG]: Don't complain about unknown children if + `unknown_children_possible' is set. + + * read.c (do_define): Make sure there's enough space for the newline, + so we don't write off the end of allocated space. + + * arscan.c (ar_name_equal): Fixed to work when MEM is AR_NAMELEN-1 but + NAME is not the same length. + +Sat Aug 25 16:17:14 1990 Roland McGrath (roland at geech) + + * job.c (construct_command_argv_internal): Use a static char array for + a constant, since old C has no auto aggregate initializers. + +Thu Aug 23 16:11:03 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * job.c (search_path): If PATH is nil or "" use a default path. + +Wed Aug 22 01:05:32 1990 Roland McGrath (roland at churchy.ai.mit.edu) + + * Version 3.58.9. + + * job.c (exec_command): Don't take PATH and SHELL args. Get them from + ENVP. + (child_execute_job): Don't take FILE arg, and don't pass path and shell + to exec_command. + (start_job): Don't pass FILE arg to child_execute_job. + * function.c (expand_function: `shell'): Ditto. + * main.c (main): Don't pass path and shell to exec_command. + +Fri Aug 17 23:17:27 1990 Roland McGrath (roland at geech) + + * job.c (construct_command_argv_internal): New fn broken out of + construct_command_argv. Takes strings SHELL and IFS instead of doing + variable expansion for them. Recurse to make an argv for SHELL, + passing SHELL==0. When SHELL==0, don't recurse for shell argv; make a + simple one using /bin/sh. + (construct_command_argv): Do the variable expansions and call above. + +Thu Aug 16 19:03:14 1990 Roland McGrath (roland at geech) + + * read.c (multi_glob): For ~USER/FILE, if USER isn't found, don't + change the file name at all. + +Tue Aug 7 18:33:28 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * function.c (expand_function: `suffix'/`notdir'): Don't kill the last + space if we never wrote one. + + * function.c (expand_function: `suffix'): Retain the dot, like the + documentation says. + +Mon Aug 6 14:35:06 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.58.8. + + * main.c (decode_switches): For positive_int and floating cases, move + SW past the arg (and don't set it to ""), so another switch can follow. + +Fri Aug 3 00:43:15 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * job.c (child_execute_job): Use unblock_signals instead of + push_signals_blocked_p (0). + + * main.c (fatal_signal_mask): New variable, mask of signals caught with + fatal_error_signal. + (main): Set it. + * job.c ({block,unblock}_children): Renamed to {block,unblock}_signals. + Block/unblock both child signal and signals in fatal_signal_mask. + (children_blocked_p_{stack,max,depth}, {push,pop}_children_blocked_p): + Renamed from children to signals. Use {block,unblock}_signals instead + of {block,unblock}_children. + * commands.c (fatal_error_signal), job.c (wait_for_children, new_job, + child_execute_job, main, log_working_directory), function.c + (expand_function: `shell'), job.h: Rename {push,pop}_children_blocked_p + to {push,pop}_signals_blocked_p. + * job.c (child_handler): Call {block,unblock}_signals instead of just + {block,unblock}_remote_children. We need to block the fatal signals. + +Thu Aug 2 22:41:06 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * main.c, function.c: Fixed typos in comments. + + * file.c (print_file_data_base): Fix computation of avg files/bucket. + +Tue Jul 31 22:11:14 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.58.7. + +Wed Jul 25 16:32:38 1990 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * arscan.c (ar_name_equal): Fixed to really do it right. + (ar_member_pos): Fixed order of args. + * ar.c (ar_member_date_1): Ditto. + +Fri Jul 20 15:30:26 1990 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * arscan.c (ar_name_equal): Rewritten. Accounts for a possible + trailing slash in MEM. + + * remake.c (f_mtime): Keep track of whether ARNAME is used and free it + if not. Also free MEMNAME. + * ar.c (ar_member_date, ar_touch): Ditto. + + * arscan.c (arscan) [HPUX or hpux]: Treat same as USGr3 PORTAR==1. + + * make.h: If NSIG is not defined, but _NSIG is, #define NSIG _NSIG. + + * compatMakefile: Don't use $* in explicit rules. + + * default.c (default_variables: "PREPROCESS.S"): Include $(CPPFLAGS). + + * remake.c (f_mtime): If FILE is an ar ref, get the member modtime. + + * function.c (string_glob): Terminate the string properly when it's + empty. + +Wed Jul 18 11:26:56 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.58.6. + + * commands.c (set_file_variables): Fixed computation for ^F/?F elt len. + +Sat Jul 14 13:41:24 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * job.c (construct_command_argv): Always use + allocated_variable_expand_for_file instead of variable_expand_for_file + because we might be called from inside a variable expansion (for the + `shell' function). + + * function.c (expand_function: `shell'): Free the arglist's storage + correctly. construct_command_argv only allocates ARGV and ARGV[0]. + + * job.c (children_blocked_p_idx): Renamed to children_blocked_p_depth. + (push_children_blocked_p, pop_children_blocked_p): Use ..._depth + instead of ..._idx, and do it right! + +Wed Jul 11 15:35:43 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * make.h (SIGNAL): New macro to replace `signal' calls. Does arg and + ret value casts to (void *) #ifdef __STDC__ to avoid conflicts btwn + ANSI and BSD `signal' and handler types. + * main.c (main), job.c (child_handler): Use it. + +Fri Jul 6 00:00:38 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * ar.c (ar_member_date, ar_touch): Pass 2nd arg to f_mtime. + + * read.c (read_makefile): Search the include path for MAKEFILES + variable makefiles (TYPE == 1), like it says in the manual. + + * file.h (struct file), main.c (struct command_switch): Remove trailing + commas from enums. + + * commands.c (execute_file_commands): Remove unused variables. + * commands.h: Declare chop_commands. + * make.h: Declare uniquize_deps. + * main.c (main): Remove unused variable. + (decode_switches): Remove unused label. + * remake.c: Include "ar.h" for ar_parse_name decl. + * implicit.c (try_implicit_rule): Remove unused variable. + * function.c (expand_function: `shell'): Declare fork, pipe. + * ar.c: Declare ar_name_equal. + + * GNUmakefile: If using gcc, add warning flags to CFLAGS. + + * remake.c: Remove decl of ar_member_date, since it's done in make.h. + + * remake.c (f_mtime): For ar refs, allow the archive to be found via + VPATH search if we're searching, and change the ar ref accordingly. + + * ar.c (ar_parse_name): New global fn to parse archive-member + references into the archive and member names. + (ar_member_date, ar_touch): Use it. + * make.h: Declare it. + + * remake.c (f_mtime): After doing rename_file, do check_renamed instead + of assuming rename_file will always set FILE->renamed (which it won't). + + * vpath.c (selective_vpath_search): Only accept prospective files that + don't actually exist yet are mentioned in a makefile if the file we are + searching for isn't a target. + +Wed Jul 4 04:11:55 1990 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * remake.c (update_goal_chain): Do check_renamed after calling + file_mtime. + (check_dep): Ditto after update_file. + + * file.c (rename_file): Prettied up long message for merging cmds. + + * remake.c (update_file_1): Get each dep file's modtime, and allow for + it being renamed, before checking for a circular dep, since a renaming + may have introduced one. + +Tue Jul 3 18:15:01 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * ar.c (ar_touch): Don't free ARNAME since enter_file holds onto the + storage. + + * function.c (string_glob): Don't leave a trailing space. + + * read.c (do_define): Allow leading whitespace before `endef'. + +Mon Jul 2 14:10:16 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * implicit.c (pattern_search): No longer take NAME arg. Instead take + ARCHIVE flag. If ARCHIVE is nonzero, FILE->name is of the form + "LIB(MEMBER)"; rule for "(MEMBER)" is searched for, and LASTSLASH is + set to nil. Since NAME was only non-nil when it was the archive member + name passed by try_implicit_rule, this change easily allows turning off + LASTSLASH checking for archive members without excessive kludgery. + (try_implicit_rule): Pass ARCHIVE flag instead of file name. + + * Version 3.58.5. + + * commands./c (set_file_variables): Don't kill last char of $(^D) elts. + +Sat Jun 30 00:53:38 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * ar.c (ar_member_date): Don't free ARNAME since enter_file holds onto + the storage. + + * arscan.c (ar_scan) [sun386 && PORTAR == 1]: Treat like USGr3. + +Wed Jun 27 14:38:49 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * main.c (main): Put a newline on the debugging message when deciding + not to remake a makefile to avoid a possible loop. + Only decide not to remake makefiles that have commands (as well as + being targets and having no deps). + +Fri Jun 22 12:35:37 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * default.c (default_variables): Define `LINK.s' and `LINK.S'. + (default_suffix_rules): Define .S.o rule. + + * job.c (construct_command_argv): If we decide to go the slow route, + free all storage for the chopped args. + (start_job): Free the argument list's storage correctly. + construct_command_argv only allocates ARGV and ARGV[0]. + +Tue Jun 19 18:27:43 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.58.4. + +Fri Jun 15 21:12:10 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * glob.c: New version from ai-lab which doesn't do [^abc]. + +Thu Jun 7 00:30:46 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * dir.c: Copied dirent vs direct et al mess from glob.c. + + * glob.c: Replaced with updated version from djm. + * glob.c: Check macro DIRENT instead of _POSIX_SOURCE for . + __GNU_LIBRARY__ implies DIRENT and STDC_HEADERS. + +Thu May 31 22:19:49 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * vpath.c (vpath_search): Don't stop the loop if a pattern matches but + the search fails. All matching patterns have their paths searched + (like it says in the manual). + + * make.texinfo (Rules: Directory Search: Selective Search): Say that + multiple `vpath' directives with the same pattern DO accumulate, not + supersede earlier ones. + + * vpath.c (print_vpath_data_base): Increment the count of vpaths on + each loop iteration, rather than letting it stay zero. + + * Version 3.58.3. + + * job.c (block_children, unblock_children): Made static. + (push_children_blocked_p, pop_children_blocked_p): New functions to + push and pop whether children are blocked or not. + * job.h: Declare push_children_blocked_p, pop_children_blocked_p and + not block_children, unblock_children. + * commands.c (fatal_error_signal), job.c (wait_for_children, new_job, + child_execute_job), main.c (main, log_working_directory): Use sequences + of push_children_blocked_p (1) and pop_children_blocked_p () instead of + explicitly blocking and unblocking children. + * function.c (expand_function: `shell'): Don't unblock children. The + push-pop sequence in wait_for_children makes it unnecessary. + +Tue May 29 21:30:00 1990 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * read.c (do_define): Don't include the last newline in the definition. + + * function.c (expand_function: `shell'): Call construct_command_argv + before forking and don't fork if it returns nil. Free the argument + list's storage before finishing. + + * job.c (start_job): Free the storage for the child's argument list + in the parent side of the fork after the child has been spawned. + + * job.c (start_job): If construct_command_argv returns nil, go to the + next command line. + + * job.c (construct_command_argv): Use the shell if the command contains + an unterminated quote. + +Wed May 23 19:54:10 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.58.2. + + * read.c (read_makefile): Parse "override define" correctly. + +Thu May 17 15:25:58 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * arscan.c [USG]: Don't declare memcpy and memcmp. should + do this anyway (and lack of declarations is harmless). + + * remote-customs.c: Renamed to remote-cstms.c for System V. + * remote.c [CUSTOMS]: Changed accordingly. + +Sun May 13 14:38:39 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * GNUmakefile: Use same cmds for doc tar.Z as for dist tar.Z (so the + contents go in make-N.NN). + +Thu Apr 26 19:33:25 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Version 3.58.1. + +Wed Apr 25 20:27:52 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * job.c (init_siglist): Don't do SIGUSR1 and SIGUSR2 if they are the + same as SIGIO and SIGURG (true on Cray). + +Tue Apr 24 20:26:41 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * arscan.c (ar_scan): Do behavior for PORTAR == 1 and USGr3 also + #ifdef APOLLO. + +Wed Apr 11 10:00:39 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * job.c (exec_command): Set the effective GID to the real GID. Somehow + this code got lost. + + * implicit.c (pattern_search): Use the right index variable when + seeing if we need to expand FILE->also_make. + +Sun Mar 4 09:18:58 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Version 3.58.0. + + * remake.c (remake_file): Treat non-targets without commands under -t + the same as anything else without commands. + +Sat Feb 24 17:46:04 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * default.c (default_variables: PREPROCESS.S): Removed $< from defn. + + * main.c (main): Ignore arguments that are the empty string, rather + than feeding them to enter_file and barfing therein. + +Wed Feb 14 16:28:37 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * main.c (main): Call construct_include_path after doing chdirs. + +Thu Feb 8 13:43:44 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Version 3.58. + +Sat Feb 3 22:06:55 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Version 3.57.7. + + * make.texinfo (Implicit: Catalogue of Rules): For RCS, noted that + working files are never overwritten by the default rule. + +Thu Feb 1 17:27:54 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * rule.c (count_implicit_rule_limits): Redid loop control to not run + twice on freed rules. + + * GNUmakefile: Made `.dep' files be architecture-specific too. + + * main.c (main, log_working_directory) [USG]: Block children around + calls to `getwd' (actually `getcwd' on USG), because that function + sometimes spawns a child running /bin/pwd on USG. + +Tue Jan 30 14:02:50 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * function.c (subst_expand): Pay attention to SUFFIX_ONLY, putz. + +Wed Jan 24 21:03:29 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * make.man: Fixed repeated word. + + * make.texinfo (Missing): Reworded a buggy sentence. + +Mon Jan 22 12:39:22 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * main.c (print_version): Added 1990 to copyright notice. + + * Version 3.57.6. + +Sat Jan 20 11:52:01 1990 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * file.c (rename_file): Don't free the storage for the old name, since + it might not have been malloc'd. + + * job.c (construct_command_argv): Call + allocated_variable_expand_for_file instead of variable_expand_for_file + to expand `$(SHELL)'. + + * make.texinfo (Bugs): Change address from roland@wheaties.ai.mit.edu + to roland@prep.ai.mit.edu. + +Tue Jan 16 19:22:33 1990 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * Version 3.57.5. + +Sun Jan 14 16:48:01 1990 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * job.c (start_job): Only call wait_to_start_job for the first command + line in each sequence. + +Thu Jan 4 14:27:20 1990 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * load.c [LDAV_BASED] (wait_to_start_job): Loop while job_slots_used > + 0, not > 1. + + * job.c (search_path): Don't return a pointer to local storage. + Allocate data space for the pathname instead. + + * function.c (expand_function: `shell'): Don't write garbage if the + child wrote no output. + +Wed Jan 3 15:28:30 1990 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.57.4. + + * file.h (struct file): New member `renamed', a `struct file *' that is + the place this file has been renamed to (or nil). + (check_renamed): Macro to check for a file having been renamed. + Dereferences the renaming and sets the given variable. + * file.c (rename_file): Completely rewritten. Renames in place if + possible, or moves FILE to a different hash bucket if there is no + existing file with the new name. If there is an existing file with the + new name, FILE is merged into it and FILE->renamed is set to point to + it. + * variable.c (merge_variable_sets): New fn to merge two variable sets. + (merge_variable_set_lists): New fn to merge two variable set lists. + * variable.h: Declare merge_variable_set_lists. + * remake.c (update_file_1, check_dep): Run `check_renamed' after + calling file_mtime, check_dep. + (update_file): Same after update_file_1. + (update_goal_chain, update_file_1, check_dep): Same after update_file. + + * read.c (uniquize_deps): New fn, broken out of record_files, to remove + duplicate deps from a chain. + (record_files): Use it. + * implicit.c (pattern_search): Use uniquize_deps. + + * file.h (file_mtime_1): New macro, like file_mtime, but take second + arg, passed to f_mtime. + (file_mtime): Implement as file_mtime_1 (file, 1). + (file_mtime_no_search): New macro: file_mtime (file, 0). + * remake.c (f_mtime): Take new arg SEARCH. Only do VPATH and `-lNAME' + searching if it is nonzero. + * main.c (main): Use file_mtime_no_search for makefiles. + * remake.c (update_goal_chain): Use file_mtime_no_search if MAKEFILES. + + * main.c (printed_version): New variable, init'd to zero. + (print_version): Set it to nonzero before returning. + (die): If -v and !printed_version, call print_version before clean up + and death. + + * main.c (log_working_directory): Keep track of whether or not the + "Entering" message has been printed, and return without printing the + "Leaving" message if not. + + * main.c (decode_switches): Don't complain about missing args before + checking for a noarg_value elt in the command_switch structure. + +Tue Jan 2 15:41:08 1990 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * make.texinfo (Commands: Recursion: Options/Recursion): Document + special case of -j. + + * make.texinfo, main.c, job.c: Changed copyright notices to include + 1990. + + * make.texinfo (Top): Fixed introductory paragraph, which said that + `make' itself (instead of the manual) has various chapters. + (Variables: Advanced: Substitution Refs): When pxref'ing about + `patsubst', use node `Text Functions', not `Functions'. + Add an xref about `patsubst' after description of $(var:a%b=c%d). + (Functions: Syntax of Functions): Explain why mixing delimiters in + function/var refs is unwise. Clarify fn arg evaluation order. + (Options): Reworded sentence about `-e'. + (Implicit: Implicit Variables): Don't say `RM' is unused. + Say the dflt values for the flag vars is empty unless otherwise noted, + since some have defaults. + (Implicit: Pattern Rules: Pattern Examples): Clarified use of $< and $@ + in first example. + (Implicit: Last Resort): Don't say the .DEFAULT example creates files + "silently". It's automatic, but not silent. + (Implicit: Search Algorithm): Fixed confusing ungrammatical sentence + for item 5.1. + (Archives: Archive Update): Added missing `next' pointer. + (Archives: Archive Symbols): Note that GNU `ar' deals with this + automatically. + + * job.c (search_path): New fn, to search for an executable file in a + search path (broken out of exec_command). + (exec_command): Take fourth arg, the shell program to use (if + necessary). Use search_path for the program, and the shell program. + Pass args "file args ..." to shell program (with no -c), where FILE is + the full pathname of the program (script) to be run. + (child_execute_job): Pass shell program to exec_command. + * main.c (main): Ditto. + + * main.c (main): Don't write a message if exec_command returns, because + it will never return. + +Fri Dec 22 16:19:58 1989 Roland McGrath (mcgrath at hecuba.Berkeley.EDU) + + * default.c (default_variables: "LINK.cc"): Use $(C++FLAGS) instead of + $(CFLAGS). + +Wed Dec 20 09:58:48 1989 Roland McGrath (mcgrath at hecuba.Berkeley.EDU) + + * job.c (new_job): If start_job set the child's `command_state' to + `cs_finished', call notice_finished_file. + +Sun Dec 17 19:45:41 1989 Roland McGrath (mcgrath at hecuba.Berkeley.EDU) + + * Version 3.57.3. + +Wed Dec 13 17:57:12 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * rule.c (convert_to_pattern): Accept files with dependencies as + suffix rules. + +Thu Nov 30 15:47:13 1989 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Version 3.57.2. + + * function.c (expand_function: `shell'): Don't clobber BUFFER and then + try to free it. + + * remake.c (update_file_1): Took code to force remake of nonexistent + deps out of #if 0, and changed the test to nonexistent non-intermediate + deps. In version 4, I think removing this test completely will + implement the new feature that if a: b and b: c and c is newer than a, + b need not be remade. + +Sun Nov 26 16:12:41 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * compatMakefile (load.o, remote.o): Use $*.c instead of explicit file + names so that using VPATH works. + +Tue Nov 21 14:57:18 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.57.1. + +Fri Nov 10 03:28:40 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * remake.c (check_dep): Set *MUST_MAKE_PTR if FILE does not exist after + being updated. (The exact opposite test was here before; why???) + (update_file_1): Set a dep's `changed' member after updating it if it + is phony and has commands (because they will then always be executed). + +Thu Nov 9 13:47:12 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * load.c [UMAX]: #ifdef UMAX_43 include different headers for the + `inq_stats' call. + * compatMakefile (LOAD_AVG): Document UMAX_43. + + * Version 3.57.0. + + * commands.c (chop_commands): New function to chop commands into lines. + * job.c (new_job): Break that code out, and call chop_commands. + * remake.c (remake_file): Call chop_commands before looking at + FILE->cmds->any_recurse. + + * make.texinfo (Running: Goals): Don't say that the default target + won't be taken from an included makefile. + + * remake.c (update_file_1): #if 0 out setting MUST_MAKE if a dep + doesn't exist. + +Fri Nov 3 15:53:03 1989 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * Version 3.57. + + * variable.c (try_variable_definition): Don't calculate useless value. + + * main.c (define_makeflags): Fixed -j propagation. + + * commands.c (execute_file_commands): Removed unused variable. + +Sun Oct 29 11:11:15 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * commands.c (execute_file_commands): If the commands are empty, call + notice_finished_file before returning. + +Sat Oct 28 23:06:32 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * remake.c (update_file_1): Don't always update a target that has no + deps. Only do this for double-colon targets. + +Wed Oct 25 16:36:16 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * main.c (main) [hpux]: hpux == HPUX. + * compatMakefile (defines): Document that HPUX should be defined. + +Tue Oct 24 19:19:48 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.56.8. + + * job.c (exec_command): Fixed what mode bits are checked. + + * remake.c (update_file_1): "No cmds and no deps actually changed" + loses if ! FILE->is_target. + + * make.texinfo (Variables: Setting): Don't say that spaces after a + variable definition are ignored (since they aren't). + +Mon Oct 23 14:34:23 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.56.7. + + * remake.c (update_file_1): If, after being updated, any dependency + does not exist, remake the target. + + * remake.c (update_file_1): Always update if FILE has commands but no + deps. + + * commands.c (execute_file_commands): If we return early because there + are no commands, set FILE->updated. + +Thu Oct 19 18:47:37 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * arscan.c (ar_scan) [M_XENIX]: Don't run atoi or atol on the + `struct ar_hdr' members that are int or long int on Xenix. + +Sat Oct 14 10:43:03 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * arscan.c (ar_scan): Cosmetic clean ups. + (ar_name_equal): New function to compare names, handling truncated + member names and special `.o' truncation. + (ar_member_pos): Use ar_name_equal. + * ar.c (ar_member_date_1): Use ar_name_equal. + + * Version 3.56.6. + + * file.h (struct file): Made `update_status' a `short int', and moved + it before `command_state' so the bitfields can be packed better. + + * remake.c (files_remade): Made global. + (notice_finished_file): Don't increment files_remade. + * job.c (new_job): Do. + + * job.c (start_job): Don't return a value. Always set + CHILD->file->command_state to either cs_running or cs_finished. + (new_job, child_handler): Don't expect start_job to return a value. + Instead, look at the file's command_state. + + * commands.c (chop_commands): Merged into job.c (new_job). + * commands.h: Don't declare chop_commands. + + * job.c (start_job): Made static. + (new_job): New function to create a `struct child' and call start_job. + (free_child): New function to free a `struct child'. + (child_handler, new_job): Call it. + * job.h: Don't declare start_job. Do declare new_job. + * commands.c (execute_file_commands): Call new_job. + + * commands.c (execute_file_commands): Don't set FILE->update_status if + start_job fails. + + * function.c (expand_function): Don't use `reading_filename' and + `reading_lineno_ptr' if they're nil. + +Fri Oct 13 18:16:00 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * read.c (find_semicolon): New function to look for an unquoted ; not + preceded by an unquoted # in a string. + (read_makefile): Call it before expanding the line. If it finds a ;, + cut the line short there before expanding it. If not, call it again + after expanding. + + * commands.c (execute_file_commands): Don't check FILE->command_state. + We won't get called unless it's cs_not_started. + + * read.c (read_makefile): Call collapse_line on the variable-expanded + rule line after checking for ; and #. + + * job.c (start_job): When there are no more commands, always return 0. + * commands.c (execute_file_commands): Don't put the new child in the + `children' chain unless FILE->command_state is cs_running. + + * read.c (read_makefile): Rewrote ;-handling to only do it once (why + did I do it twice??) and to check for a # before the ;. + + * job.c (start_job): Set CHILD->file->update_status to 0 when we run + out of commands. Set it to 1 before returning failure. + (child_handler): Don't set C->file->update_status to 0 when start_job + returns success and commands are not running. + + * read.c (read_makefile): If there is a # before the ; for commands, + forget the ; and commands. + +Thu Oct 12 15:48:16 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * job.c (child_execute_job): Pass -c to the shell. + +Wed Oct 11 18:41:10 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.56.5. + + * main.c (define_makeflags): Cleaned up to keep better track of dashes + written, etc. + + * function.c (expand_function: `shell'): When converting newlines to + spaces in output, search with `index' calls rather than a simple loop. + + * main.c (main): Make sure stdout is line-buffered. + + * main.c (decode_switches): Always check for missing switch arg. + +Mon Oct 9 17:17:23 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.56.4. + +Sat Oct 7 00:32:25 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * commands.c (set_file_variables): #ifdef NO_ARCHIVES, still set $@ and + $%. + + * commands.c (set_file_variables): Include a trailing slash in the + directory variables (@D, etc.). + + * job.c (child_handler): Call notice_finished_file after changing a + child's state to `cs_finished'. + * remake.c (update_file_1): Don't call notice_finished_file if + FILE->command_state == cs_finished. + +Wed Oct 4 16:09:33 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.56.3. + +Tue Oct 3 21:09:51 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * read.c (read_all_makefiles): When setting elements of MAKEFILES from + the contents of read_makefiles, make sure we're using the right + element. + + * dir.c, glob.c [USGr3 || DIRENT]: Don't define d_ino as d_fileno. + + * Version 3.56.2. + + * remake.c (update_file_1): Return zero after calling remake_file if + FILE->command_state != cs_finished. Test update_status thoroughly. + + * commands.c (execute_file_commands): Don't call notice_finished_file. + + * remake.c (remake_file): Return immediately after calling + execute_file_commands. + +Sat Sep 30 14:57:05 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.56.1 (alpha). + + * file.h (struct file): Made `update_status' not be a bitfield, since + some broken compilers don't handle it right. + + * function.c (expand_function: `join'): Don't clobber the pointers and + then try to free them. + + * job.c (exec_command): Fixed & vs = precedence problem. + +Thu Sep 28 17:29:56 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * remake.c (update_file_1): Fixed typo in debugging output. + + * remake.c (library_file_mtime): Search for /usr/local/lib/libLIB.a + after /usr/lib/libLIB.a. + +Tue Sep 26 16:07:58 1989 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * read.c (conditional_line): For `ifeq (a, b)', swallow space after the + comma. + +Sun Sep 24 13:25:32 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * function.c (patsubst_function): If BY_WORD and the match is not a + full word, update the text pointer correctly. + + * function.c (expand_function: `word'): Don't lose track of the second + arg's expansion and free something else instead. + +Fri Sep 22 16:15:29 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.56. + +Thu Sep 21 14:28:42 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * main.c (main): Make an array of the mtimes of the makefiles before + updating them, and compare their file_mtimes against this later. Don't + re-exec if a makefile was successfully updated but didn't change. If a + makefile failed to be remade and no longer exists, die. If a makefile + failed to be remade, but changed anyway, re-exec. If a makefile failed + to be remade, but is unchanged, continue on. + +Wed Sep 20 18:02:07 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.55.6. + + * implicit.c (pattern_search): Maintain an array CHECK_LASTSLASH of the + CHECK_LASTSLASH flag values used to match each member of TRYRULES. + When making FILE->stem, if CHECKED_LASTSLASH[FOUNDRULE], prepend the + part of FILENAME before LASTSLASH. + +Tue Sep 19 17:44:08 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * dir.c (dir_file_exists_p): Check for FILENAME being nil before + checking for it being "". + + * main.c (define_makeflags): Fixed test for whether a flag/flag_off + option was non-default. Also changed to generate a string that Unix + Make will grok (except for FP/int values and new flags). + + * job.c (child_execute_job): Don't use the shell's -c option. + Also fixed an off-by-one bug in the ARGV -> shell arg list copying. + +Mon Sep 18 15:17:31 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.55.5. + + * read.c (parse_file_seq): Check the beginning of the file name for a + `./', not the two chars after the end of the name (Q rather than P). + + * job.c (child_execute_job): Include all of ARGV in the arg list for + the shell. + + * main.c (define_makeflags): Don't include floating and positive_int + options in !PF. + + * job.c (exec_command): Set the effective gid to the real gid before + execing. + + * job.c (child_execute_job): Don't clobber the arg list when execing + the shell. + +Sun Sep 17 15:27:19 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * main.c (define_makeflags): Moved all the checking inside the switch. + + * load.c [LDAV_BASED] (load_average): When we can't get the load + average, return zero instead of running off the end. + + * file.c: Include variables.h. + * job.c: Declare dup2 and {block,unblock}_remote_children. + * file.h: Declare f_mtime. + * job.c: Don't declare construct_command_argv, since job.h does. + * function.c, main.c, load.c, remake.c: Include job.h. + * load.c [LDAV_BASED] (load_average): Declare nlist. + * variable.h: Declare print_file_variables. + * job.c [!USG]: Don't declare sigsetmask. + [!USG]: Declare getdtablesize. + Don't declare load_average. Do declare wait_to_start_job. + Declare vfork, gete[gu]id, execve. + * commands.c: Declare remote_kill, getpid. + * make.h: Declare kill, exit, sigblock, pipe, close, ctime, open, + lseek, read. + * make.h [not USG]: Declare sigsetmask. + * job.h: Declare wait_for_children and {block,unblock}_children. + + * dir.c (dir_file_exists_p): If FILENAME is nil, read in the whole + directory. + (find_directory): When we want to read in the whole directory, call + dir_file_exists_p with nil instead of "". + + * file.h (struct file), job.h (struct child), + variable.h (struct variable): Use bitfields for flags. + * make.h (ENUM_BITFIELD): If GCC or #ifdef ENUM_BITFIELDS, define as + :BITS, else empty. + * compatMakefile (defines): Document ENUM_BITFIELDS. + +Sat Sep 16 12:38:58 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.55.4 (alpha). + + * GNUmakefile (dist): Depend on default and doc. + + * load.c [LDAV_BASED]: Include rather than ; #ifdef + NLIST_NAME_UNION, use n_un.n_name instead of n_name. + * compatMakefile (LOAD_AVG): Document NLIST_NAME_UNION. + + * job.c [USG-ish]: Don't redefine WIF{SIGNALED,EXITED} if they're + already defined. + +Fri Sep 15 13:59:42 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * glob.c, dir.c [USGr3 or DIRENT]: If neither d_ino, nor d_fileno is + defined, define d_ino as d_fileno. + +Thu Sep 14 18:29:38 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * job.c: Don't declare exec_command static. + + * make.texinfo (Name Index): Changed title to include directives. + + * Version 3.55.3 (alpha). + + * make.texinfo (Running: Options): Document -e. + + * main.c (main): Always give imported environment variables origin + `o_env'. + * variable.c (define_variable_in_set): Under -e, if ORIGIN, or an + existing variable's origin, is `o_env', make it `o_env_override'. + + * load.c: Use the symbol KERNEL_FILE_NAME instead of KERNEL_FILE. + * compatMakefile: Changed the comment for `LOAD_AVG' accordinly. + +Thu Sep 7 16:46:26 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.55.2 (alpha). + + * variable.c (print_variable_set), rule.c (print_rule_data_base), + file.c (print_file_data_base): If NO_FLOAT is defined, don't use + floating-point for printing statistics. + * compatMakefile (defines): Document NO_FLOAT. + + * make.h (HASH): New macro to add the hashing value of one char to a + variable.c. + * file.c (lookup_file, enter_file, rename_file): Use it. + * dir.c (find_directory, dir_file_exists_p, file_impossible_p): Ditto. + * variable.c (define_variable_in_set, lookup_variable): Same here. + + * variable.c, file.c, dir.c: Don't define *_BUCKETS if they are already + defined. + + * compatMakefile (defines): Added comment about defining NO_ARCHIVES. + (ARCHIVES, ARCHIVES_SRC): New variables for {ar,arscan}.[oc]. + (objs, srcs): Use $(ARCHIVES) and $(ARCHIVES_SRC). + * commands.c (set_file_variables), dir.c (file_exists_p), + remake.c (touch_file, name_mtime), implicit.c (try_implicit_rule, + pattern_search), make.h: If NO_ARCHIVES is #defined, don't do any + archive stuff. + + * commands.c (set_file_variables): Don't kill the last char of + directory names in $([@*<%?^]D). + +Wed Sep 6 15:23:11 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * default.c (default_terminal_rules {%:: %,v}, {%:: RCS/%,v}): Don't + run co if the target exists. + + * glob.c (glob_match): [!xyz], rather than [^xyz], means none of [xyz]. + + * glob.c: Misc minor cosmetic changes. + +Tue Sep 5 14:49:56 1989 Roland McGrath (mcgrath at saffron.Berkeley.EDU) + + * load.c [LDAV_BASED] (load_average): Check for == -1, rather than < 0 + to see if lseek fails. On some systems, `avenrun' is at an offset > + (2**31)-1, and lseek succeeds, returning a negative value. + +Mon Sep 4 11:07:58 1989 Roland McGrath (mcgrath at saffron.Berkeley.EDU) + + * rule.c (new_pattern_rule): Return `int' instead of `void': nonzero if + the passed rule was used, zero if not. + (install_pattern_rule): Pay attention to the return from + new_pattern_rule, and don't set the rule's `terminal' flag or give it + commands unless it's used. + (create_pattern_rule): Same idea. + + * dir.c (find_directory): Removed unused variable. + + * commands.c (execute_file_commands): Removed unused variable. + + * read.c (record_files): Don't use NAME after freeing it. + +Sat Sep 2 00:33:19 1989 Roland McGrath (mcgrath at saffron.Berkeley.EDU) + + * Version 3.55.1 (alpha). + + * function.c (string_glob): Don't add spaces after file names that + aren't added. (Also means don't add spaces without checking the size + of the buffer.) + + * remake.c (update_goal_chain): Don't remove makefiles with cmds and no + deps from the chain. + * main.c (main): Do it here, before calling update_goal_chain. + + * remake.c (update_goal_chain): When updating fails, change STATUS even + if MAKEFILES is set. Also stop remaking when updating fails if not + under -k and MAKEFILES is not set. + + * remake.c (remake_file, update_file_1, notice_finished_file), + commands.c (execute_file_commands), make.h, commands.h: The functions + remake_file, notice_finished_file, and execute_file_commands no longer + return values, and their callers no longer expect values returned. + + * remake.c (notice_finished_file): Don't set FILE's modtime to now if + it is a non-target with no commands. + +Fri Sep 1 00:04:39 1989 Roland McGrath (mcgrath at saffron.Berkeley.EDU) + + * read.c (read_all_makefiles): After freeing each element on MAKEFILES, + replace it with the name stored in read_makefiles by read_makefile. + + * remake.c (update_file_1): Don't decide not to remake if FILE has no + cmds and no deps actually changed if FILE doesn't have any deps. + + * file.c (remove_intermediate): Remove precious files that also have + the `dontcare' flag set. + + * remake.c (update_file_1): Don't always remake if FILE has cmds but no + deps; only if FILE is double-colon. (I don't know why this should be + done for double-colon targets, but that's what Unix make does.) + + * load.c [LDAV_BASED] (load_average): Write error messages if the + various system calls fail. Keep track of if we've failed before. + The first time we fail, write a message saying -l won't be enforced. + The first time we succeed after having failed, write a message saying + -l will be enforced again. + + * remake.c [USG]: Don't #include + + * load.c [generic Unix LDAV_BASED]: #include #ifdef USG, + else instead. + + * job.c [USG && !USGr3 && !HAVE_DUP2]: Remove redundant + #include and declaration of `errno'. + [...] (dup2): Fixed so it won't always lose. + + * default.c (default_suffix_rules: .texinfo.dvi): Copy, rather than + move, the aux and index files, so the TeX run can use them. + + * compatMakefile: Remove redundant comment. + + * load.c [generic Unix LDAV_BASED]: Include instead of + , since the `struct nlist' declaration in varies + more than the one in . + (load_average): Use the `n_un.n_name' field of the `struct nlist', + since the declaration uses the union. + + * main.c (main): For the temporary files made for stdin makefiles, set + the `intermediate' and `dontcare' flags. + * file.c (remove_intermediates): Don't print any messages for files + whose `dontcare' flag is set. (The only files that will be + intermediate and `dontcare' will be the temporary files made for stdin + makefiles.) + + * job.c (exec_command): Made global. + * job.h: Declare it. + * main.c (main): Use exec_command when re-execing. + + * make.h: Declare environ. + * make.c: Don't. + + * job.c (child_execute_job): New function to perform everything done in + the child side of a fork (for a job or `shell' function). + (start_job): Call it. + * job.h: Declare construct_command_argv and child_execute_job. + * function.c (expand_function: `shell'): Use child_execute_job. + +Thu Aug 31 18:42:51 1989 Roland McGrath (mcgrath at saffron.Berkeley.EDU) + + * function.c (expand_function: `shell'): Remove a trailing newline + instead of turning it into a space. + + * main.c (main): Do init_siglist #ifdef HAVE_SIGLIST. + + * job.c [WTERMSIG || (USG && !HAVE_SYS_WAIT)]: Test each W* macro + separately and define all those that aren't defined. + +Sat Aug 26 15:13:21 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * ar.c (ar_name): Return zero for `(foo)'. + + * Version 3.55. + + * make.texinfo (Rules: Multiple Targets): Make this node's `next' + pointer point to `Static Pattern'. + * make.texinfo (Makefiles: MAKEFILES Variable): Make this node's `prev' + pointer point to `Makefile Names'. + + * make.1: Renamed to make.man. + * compatMakefile: Define `mandir' and `manext'. + (install): Depend on $(mandir)/make.$(manext). + ($(mandir)/make.$(manext)): Depend on make.man and copy it to $@. + ($(bindir)/make): Use `make' rather than $<; so Unix make can grok it. + +Thu Aug 24 03:35:48 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * variable.c (target_environment): Allow variables that start with + underscores. + +Wed Aug 23 22:50:32 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * variable.c (target_environment): Reject variables that don't start + with letters. + +Tue Aug 22 04:14:29 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * GNUmakefile (make-$(version).tar.Z): Put make.1 (the Unix manual + page) in the tar file. + + * variable.c (target_environment): Don't write variables with origin + o_default (i.e., ones from default.c). + * make.texinfo (Commands: Recursion: Variables/Recursion): Document + that default variables are not put in the environment. + + * remake.c (update_file_1): Remake all targets with commands but no + deps. + +Sat Aug 19 06:03:16 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * remake.c (update_file_1): In the final loop, set the deps' + `changed' members if they are newer than FILE. + + * remake.c (update_goal_chain): Under -d, print a message if we decide + not to remake a makefile so as to avoid a possible infinite loop. + +Fri Aug 18 20:30:14 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * remake.c (remake_file): Cleaned up. + + * commands.c (execute_file_commands): If the commands are empty, set + FILE->update_status to zero before returning. + + * remake.c (notice_finished_file): Set `last_mtime' fields to zero + instead of calling name_mtime; file_mtime will do that later if anybody + cares. + +Thu Aug 17 10:01:11 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * make.texinfo (Rules: Wildcards: Wildcard Examples): Give this node a + `prev' pointer. + + * Version 3.54.9 (alpha). + + * make.texinfo: Fixed some @nodes. + + * remake.c (check_dep): Don't set *MUST_MAKE_PTR if FILE doesn't exist + after running update_file. + + * remake.c (notice_finished_file): If FILE has no commands, pretend its + modtime is now. + + * remake.c (update_file_1): In the loops that call update_file on the + deps, compare modtimes before and after (unless deps are still being + made) and set the deps' `changed' members. Do not set the `changed' + members in the loop that prints the newer/older debugging messages. + * remake.c (update_file_1): If no deps changed and FILE has no + commands, decide it doesn't need remaking. + + * remake.c (update_file_1): Print a debugging message if we take + commands from default_file. + + * make.texinfo (Rules: Directory Search: Selective Search): Removed + note about warning for `vpath' with a constant pathname, since it isn't + warned about anymore. + + * remake.c (update_goal_chain): If MAKEFILES, remove makefiles which + are targets and have no deps. + * make.texinfo (Makefiles: Remaking Makefiles): Document that makefiles + will not be remade if they are targets but have no dependencies. + +Tue Aug 15 00:00:08 1989 Roland McGrath (roland at apple-gunkies.ai.mit.edu) + + * remake.c (notice_finished_file): Increment files_remade for non-phony + files if they didn't exist before (even if they still don't). + + * job.c: Include and declare errno. + + * job.c (exec_command): If the execve fails with ENOEXEC (Exec format + error), return instead of exiting the child process. + + * job.c (start_job): In the child side, if exec_command fails, try + using the shell. + + * job.c (start_job): In the child side, call unblock_children instead + of sigsetmask. + + * remake.c (notice_finished_file): Under -n or -q, always increment + files_remade for non-phony files. + + * rule.c (intall_pattern_rule): Use find_percent. + + * vpath.c (vpath_search): Pass the `percent' members to + pattern_matches. + +Mon Aug 14 23:30:24 1989 Roland McGrath (roland at apple-gunkies.ai.mit.edu) + + * vpath.c (struct vpath): New member `percent', to hold a pointer into + the pattern where the % is. + (construct_vpath_list): Call find_percent on the pattern and set the + new `percent' member. + * read.c (read_makefile): Don't run find_percent on `vpath' directive + patterns. + + * function.c (pattern_matches): Take new arg PERCENT, a pointer into + PATTERN where the % is. If PERCENT is nil, copy PATTERN into local + space and run find_percent on it. + (expand_function: `filter', `filter-out'): Pass new arg to + pattern_matches. + * read.c (record_files): Pass PATTERN_PERCENT to pattern_matches for + static pattern rules. Save the percent pointer into implicit rule + targets, and pass them to create_pattern_rule. + * rule.c (convert_to_pattern): Pass new arg to create_pattern_rule. + (create_pattern_rule): Take new arg TARGET_PERCENTS, nil or an array of + pointers into the corresponding elements of TARGETS, where the %s are. + +Sun Aug 13 00:29:19 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * Version 3.54.8. + + * README.templatate, README-doc.template: New files, turned into README + and README-doc to go into the two distribution tar files. + * GNUmakefile: Added a rule to edit the version number in + README.template and README-doc.template, producing README and + README-doc. + + * remake.c (update_goal_chain): If -n or -q is in effect for a + makefile, and it got updated, don't change STATUS, so we can still + return -1 (meaning nothing was done). This avoids an infinite loop on + "make -n Makefile". + +Sat Aug 12 23:14:24 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * remake.c (notice_finished_file): Treat -q the same as -n. + + * remake.c (update_goal_chain): Fixed handling of return from + update_file. If -n or -q is in effect, ignore it. + + * job.c (start_job): Don't test for -t. We should never get called in + that case. + +Fri Aug 11 04:09:14 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * function.c (expand_function): Removed unused variables. + (handle_function): Removed unused variable. + + * main.c (main): Removed unused variable. + +Wed Aug 9 09:37:10 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * Version 3.54.7. + + * remake.c (notice_finished_file): If FILE's modtime actually changed, + increment files_remade. + (remake_file): Don't increment files_remade. + + * remake.c (update_file): Don't print "up to date" messages for + phony files. + + * job.c (child_handler): Don't set C->file->update_status to 1 if + start_job returns nonzero under -n or -t. + + * expand.c (variable_expand): Count parens in $(foo:a=b) refs. + + * main.c: Removed old declaration of `glob_tilde' (which hasn't existed + for a few months). + +Tue Aug 8 23:53:43 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * job.c (exec_command): Fixed to not ignore the last path component and + to do the right thing with an empty path. + +Fri Aug 4 15:58:19 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * remake.c (library_file_mtime): Look for libLIB.a, not /libLIB.a. + Do VPATH search on libLIB.a, not /usr/lib/libLIB.a + +Thu Aug 3 20:42:00 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * job.c [HAVE_SYS_WAIT or not USG]: If WIFSIGNALED is not defined by + , define it as (WTERMSIG != 0). + +Tue Aug 1 19:25:34 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * remake.c (remake_file): If FILE has no commands and is a target, + don't set its time to now. The time gets reset by notice_finished_file + anyway, and it isn't needed since check_dep checks for nonexistence. + + * Version 3.54.6. + + * read.c (read_makefile): Don't read off the end of the string after an + `include'. + + * job.c (exec_command): New function to search the path for a file and + execute it. + (start_job): Use exec_command rather than execvp. + + * read.c (read_makefile): Expand `include' directive args before + parsing them. Allow trailing whitespace after filename. + + * variable.c (target_environment): Put makelevel + 1, rather than + makelevel, in the `MAKELEVEL' envariable. + +Sat Jul 29 10:27:04 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * remake.c (notice_finished_file): Don't get the new modtime of phony + files. + + * remake.c (remake_file): Run commands instead of touching under -t if + FILE->cmds->any_recurse is set. + + * commands.h (struct commands): Add new member `any_recurse', to be set + nonzero if any `lines_recurse' element is nonzero. + * commands.c (chop_commands): Set the `any_recurse' member. + + * commands.c (execute_file_commands): Split chopping of commands into + lines into new function chop_commands. + * commands.h: Declare chop_commands. + + * read.c (read_makefile): Test for a line beginning with a tab after + checking for conditional lines, but before all other checks. + +Fri Jul 28 18:10:29 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * read.c (read_makefile): Match directives against collapsed line + and use that for their args. + + * read.c (read_makefile): Warn about extra text after `include'. + +Tue Jul 25 14:34:25 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * make.texinfo (Rules: Directory Search: Selective Search): Fixed + example to use correct `vpath' syntax. + +Mon Jul 24 12:10:58 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * Version 3.54.5. + + * job.c (start_job): In the child side, unblock SIGCHLD. + +Fri Jul 21 18:25:59 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * make.h: Don't include #ifdef sun. + +Mon Jul 17 14:29:10 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * implicit.c (pattern_search): If ar_name (FILENAME), don't check for + directory names. + + * job.c (wait_for_children): Changed "waiting for children" message to + "waiting for unfinished jobs". + +Fri Jul 14 13:17:13 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * load.c (load_average): Use an unsigned offset into kmem. + +Thu Jul 13 18:44:49 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * variable.c (pop_variable_scope): Don't free the head of the chain of + variables in each bucket twice. + +Tue Jul 11 06:45:24 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * GNUmakefile: Include COPYING in the doc tar file. + + * variable.c, read.c, misc.c, job.c, function.c: Replace some identical + "for" loops with next_token or end_of_token calls. + +Mon Jul 10 16:55:08 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * Version 3.54.4. + + * compatMakefile: Documented new conditionals. + + * job.c: Don't define sys_siglist if HAVE_SIGLIST is defined. + Don't define dup2 if HAVE_DUP2 is defined. + + * job.c (child_handler): Interpret the return from start_job correctly. + + * remake.c (update_file_1): Don't write "target not remade because of + errors" message under -n or -q. + + * read.c: Declare getpwnam. + + * glob.c: Use if DIRENT is defined. + [USG]: Don't declare memcpy, since does. + +Fri Jul 7 20:53:13 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * misc.c (collapse_line): Copy the line over in the right place. + +Fri Jul 7 18:33:24 1989 Roland McGrath (fsf at void.ai.mit.edu) + + * remake.c: Conditionalize inclusion of on not + USG, since HP-UX defines a `struct file' there. + +Fri Jul 7 12:11:30 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * job.c: If WTERMSIG is defined by , define WAIT_T as int, + and don't define other macros; this covers HP-UX. + If WTERMSIG is not defined, use int or union wait based on USG and + HAVE_SYS_WAIT; this covers BSD and SysV. + + * Version 3.54.3 (alpha). + + * job.c [USG and not USGr3]: Include and declare errno. + + * job.c (unblock_children [USG]): Declare child_handler. + + * job.c: Renamed WRETCODE to WEXITSTATUS. + [HAVE_SYS_WAIT or not USG]: Undefine WTERMSIG, WCOREDUMP, and + WEXITSTATUS before defining them. The HP-UX defines them. + + * main.c (main): If there are no goals, fatal AFTER printing the data + base under -p. + +Thu Jul 6 22:43:33 1989 Roland McGrath (roland at apple-gunkies.ai.mit.edu) + + * glob.c [USG]: #define rindex as strrchr. + + * job.c [USG]: Include and #define getdtablesize() as + NOFILE. + +Wed Jul 5 09:36:00 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * Version 3.54.2 (alpha). + + * expand.c (variable_expand): When expanding recursive variable + references (${${a}}), use the correct delimiters in the constructed + variable reference. + +Mon Jul 3 18:29:26 1989 Roland McGrath (roland at apple-gunkies.ai.mit.edu) + + * compatMakefile: Clear out and redefine the .SUFFIXES list because + silly Sun 4 make defines .cps.h. + + * compatMakefile: Fix comment about -DNO_MINUS_C_MINUS_O. + + * remake.c: Include for O_* on 4.2. + + * commands.c: Define sigmask if it's not defined. + +Fri Jun 30 07:33:08 1989 Roland McGrath (roland at apple-gunkies.ai.mit.edu) + + * remake.c (remake_file): Don't always increment files_remade. + + * variable.c (push_new_variable_scope): Zero the new variable hash + table. + +Thu Jun 29 17:14:32 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * expand.c (variable_expand): When terminating the variable expansion + buffer, use variable_buffer_output instead of a simply zero store, + because the buffer may need to be enlarged. + +Wed Jun 28 16:53:47 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * Version 3.54. + + * default.c (default_suffixes): Added `.ln'. + (default_suffix_rules): Changed lint rules to use -C. + +Thu Jun 22 20:49:35 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * job.c (start_job): Set `environ' to CHILD->environment before execing + in the child process! + +Tue Jun 20 17:23:13 1989 Roland McGrath (roland at spiff.ai.mit.edu) + + * compatMakefile: Put job.h and rule.h in `srcs'. + + * Version 3.53. + +Mon Jun 19 16:25:18 1989 Roland McGrath (roland at spiff.ai.mit.edu) + + * job.c (start_job): If there are no more commands, return nonzero + under -n or -t. + + * compatMakefile (make): Pass `-f' to mv. + + * GNUmakefile: If `ARCH' or `machine' is defined, make $(ARCH)/*.o and + $(ARCH)/make instead of *.o and make. + + * function.c (string_glob): Don't try to use freed storage! + + * read.c (readline): If there is only one byte of space in the buffer, + enlarge the buffer before reading more. + + * arscan.c [M_XENIX]: Miscellaneous minor changes for Xenix. + +Sun Jun 18 13:07:45 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * GNUmakefile (depend): Split commands into two lines so they won't be + so long when variable-expanded. + + * compatMakefile: Documented MINUS_C_MINUS_O meaning. The line + describing it got removed when the USG/wait stuff was documented. + +Sat Jun 17 22:56:54 1989 Roland McGrath (roland at hobbes.ai.mit.edu) + + * Version 3.52. + +Mon Jun 12 17:45:11 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * remake.c (check_dep): Drop circular dependencies instead of fataling. + (update_file_1 already does this.) + + * default.c (default_suffix_rules): For .s -> .o, put the -o flag to + the assembler before the source file name. + +Sun Jun 11 12:00:52 1989 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Version 3.51. + + * make.texinfo (Features): Noted 1003.2 requirement of `+' meaning. + + * file.c (remove_intermediates): If !SIG, write a single "rm" command + line, listing all files. + + * read.c (read_makefile): Don't free the storage for the passed + filename, since it might not be malloc'd. When doing an included + makefile, free the name's storage. + (read_all_makefiles): Use variable_expand to find the value of + `MAKEFILES'. Free the storage for the names of -f makefiles. + (read_makefile): Allocate storage for the makefile name in the + `struct file' in read_makefiles. + + * make.texinfo (Running: Instead of Execution): Document the effect of + + and $(MAKE)/${MAKE}. + + * make.texinfo (Functions: Foreach Function): Document that if the + iteration variable was undefined before the `foreach' call, it will be + undefined after the call. + + * commands.c: Split into commands.c, job.h, and job.c. + + * rule.c (try_implicit_rule, pattern_search): Moved to new file + implicit.c. + + * rule.c: Split into rule.h, rule.c, and default.c. + * default.c (install_default_pattern_rules): Renamed to + install_default_implicit_rules. + * make.h, main.c (main): Renamed uses. + + * make.c: Renamed to misc.c. + + * make.c (main, log_working_directory, decode_switches, + decode_env_switches, define_makeflags, die, print_version, + print_data_base): Moved to new file main.c. + + * commands.c (execute_file_commands): Don't collapse backslash-newlines + here. When chopping the commands up into lines, don't chop at + backslash-newlines. + (start_job): Collapse backslash-newlines after printing the line. + + * commands.c (start_job): Don't collapse backslash-newlines here. + (execute_file_commands): Collapse backslash-newlines before chopping + the commands up into lines. + + * commands.c (set_file_variables): Initialize the length counters for + $^ and $? to zero! + + * commands.c (start_job): Use vfork instead of fork. Someone else says + the child and parent DO have separate file descriptors. + + * variable.c: Split internals into variable.c, function expansion into + function.c, and variable expansion into expand.c. + * function.c (handle_function): New function to check for a function + invocation and expand it. + * expand.c (variable_expand): Use handle_function. + * variable.c (push_new_variable_scope): New function to push a new + empty variable set onto the current setlist. + (pop_variable_scope): New function to pop the topmost set from the + current setlist and free its storage. + * function.c (expand_function: `foreach'): Push a new variable scope + for the iteration variable and pop the scope when finished. + * variable.h: Declare new functions. + * variable.c (initialize_variable_output): New function to return a + pointer to the beginning of the output buffer. + (save_variable_output): New function to save the variable output state. + (restore_variable_output): New function to restore it. + * expand.c (variable_expand): Use initialize_variable_output. + (allocated_variable_expand): Use {save,restore}_variable_output. + * variable.c (current_setlist): Renamed to current_variable_set_list + and made global. + +Sat Jun 10 00:11:25 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * remake.c (library_file_mtime): Check for libNAME.a in the current + directory before doing VPATH search. + + * variable.c (print_variable_set): Don't write "# Variables", and write + fewer blank lines. + (print_variable_data_base): Precede the variables with "# Variables". + + * make.c (main): Print the data base under -p after doing everything + else, just before exitting. This way it gets info determined in + updating the goal targets. + + * variable.c (print_variable_data_base): Split into print_variable, + which prints one variable, and print_variable_set, which prints a set. + Replaced with a call to print_variable_set for the global set. + (print_file_variables): New function to print a given file's local + variables. + + * file.c (print_file_data_base): Call print_file_variables to print + each file's local variables. + + * commands.c (set_file_variables): Actually define the values for + the $^ and $? variables!!! + + * make.texinfo (Implicit: Pattern Rules: Automatic): Document new D and + F versions of $^ and $?. + + * commands.c (start_job): In the child fork, use getdtablesize and a + loop to close all file descriptors other than 0, 1, and 2. We need to + do this since not only the bad stdin pipe, but also some directories, + may be open. + + * commands.c (start_job): Use fork instead of vfork, because a vfork + parent and child share file descriptors, and our child needs to diddle + with stdin. + + * variable.c (initialize_file_variables): When created a new variable + set, zero out the hash table. + + * variable.c (target_environment): Don't use variables whose names are + not made up of alphanumerics and underscores. + + * remake.c (update_file_1): Set the `parent' member of each dependency + to FILE before updating it. + + * file.h (struct file): Add `parent' member. + + * variable.c (initialize_file_variables): Don't take second arg PARENT. + Use FILE->parent instead. If FILE->parent->variables is nil, recurse + to initialize it. + + * variable.h: Declare {allocated_}variable_expand_for_file. + + * variable.c (allocated_variable_expand): Now + allocated_variable_expand_for_file, calling variable_expand_for_file, + and taking second arg FILE. + (allocated_variable_expand): New function, a wrapper around + allocated_variable_expand_for_file, passing a nil second arg. + +Fri Jun 9 12:11:45 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * commands.c (start_job): On the child side of the fork, always close + the bad stdin file descriptor. + + * commands.c (struct child): New member `environment', to hold the + environment for the child. + (execute_file_commands): Set the new childs `environment' member to nil + before calling start_job. + (start_job): Set up CHILD->environment before running the commands if + it is nil. + + * make.c (main): Don't call new_environ. `shell' functions will now be + run with the environment make was called with. + + * commands.c (child_handler): Don't check C->command_ptr before calling + start_job since we now have to check C->file->cmds->command_lines and + it's easier to let start_job handle all that. + + * commands.c (struct child): New member `command_line', to hold an + index into file->cmds->command_lines. + (execute_file_commands): Set the new child's `command_line' to 0 and + its `commands' and `commands_ptr' to nil. + (start_job): When CHILD->command_ptr runs out, increment + CHILD->command_line and run the corresponding line from + CHILD->file->cmds->command_lines. Run it even under -t, -q, or -n if + the CHILD->file->cmds->lines_recurse element for that line is set. + + * commands.c (execute_file_commands): Chop CMDS up into lines, setting + its `command_lines' and `lines_recurse' members, if it wasn't already + chopped. + + * commands.h (struct commands): New members `command_lines' and + `lines_recurse'. The first is an array of chopped-up lines; the second + is an array of flags, each nonzero if the corresponding line is + recursive. + + * variable.c (variable_expand_for_file): If FILE is nil, just do a + vanilla variable_expand. + (expand_function: `shell'): Pass second arg (as nil) to + construct_command_argv. + + * commands.c (construct_command_argv): Use variable_expand_for_file on + `$(SHELL)' and `$(IFS)' instead of lookup_variable to check those + variables. This handles file-local and recursive values correctly. + To support this, take an additional argument FILE. + + * variable.c (initialize_file_variables): New function to initialize + FILE's variable set list from PARENT's setlist. PARENT is the + immediate dependent that caused FILE to be remade, or nil if FILE is a + goal. (When user-level per-file variables are implemented, PARENT + should be passed as nil when defining per-file variables.) + + * variable.c (variable_expand_for_file): New function to expand a line + using the variable set of a given file, and reporting error messages + for the file and line number of that file's commands. + + * variable.h: Don't declare lookup_variable_for_file. + + * variable.c (lookup_variable_*): Turned back into lookup_variable. It + now uses current_setlist. + (global_setlist): New static `struct variable_set_list', a setlist + containing global_variable_set. + (current_setlist): New static `struct variable_set_list *', a pointer + to the current variable set list. + (define_variable): Define in the current top-level set, not the global + set. + + * commands.c (set_file_variables): New function to set up the automatic + variables for a file in its own variable set. + (execute_file_commands): Use set_file_variables. + + * variable.c (new_environ): Replaced with target_environment, taking an + argument FILE, and returning an environment for FILE's commands. + + * variable.c, variable.h: Remove all global special variable pointers. + + * variable.c (define_variable_for_file): New function like + define_variable, but takes additional arg FILE, and defines the + variable in the variable set at the top of FILE's chain. + (lookup_variable_for_file): New function like lookup_variable, but + takes additional arg FILE, and looks the variable up in all of FILE's + variable sets. + + * file.h (struct file): New member `variables', a `struct + variable_set_list' containing the list of variable sets used in the + expansion of the file's commands. + + * variable.c (variables): Replaced with static `struct variable_set' + global_variable_set. + (define_variable): Now define_variable_in_set, taking additional + argument SET, the `struct variable_set' to define it in. + (define_variable): Use define_variable_in_set with global_variable_set. + (lookup_variable): Now lookup_variable_in_set, taking additional + argument SET, the `struct variable_set' to look it up in. + (lookup_variable): Use lookup_variable_in_set with global_variable_set. + (lookup_variable_in_setlist): New function to look up a variable in a + `struct variable_set_list' using lookup_variable_in_set. + + * variable.h (struct variable_set): New structure, containing a hash + table and the number of hash buckets. + (struct variable_set_list): New structure, containing a link for a + linked-list, and a `struct variable_set'. + + * commands.c (start_job): Under -n, return what the recursive start_job + call returns, since it might actually start a child. + + * make.texinfo (Rules: Wildcards): Document ~ and ~USER expansion. + + * commands.c (execute_file_commands): If start_job returns + failure, but -t is set, set FILE->update_status to success. + (start_job): If -t is set, and the commands are not recursive, return + failure (is is done for -q). + + * remake.c (touch_file): New function to touch FILE. + (remake_file): Use touch_file. When touching a file, still do + execute_file_commands. + + * remake.c (remake_file): Don't check question_flag (-q), since we + can't know here if the commands are recursive. + + * commands.c (start_job): Don't use the `recursive' member of + CHILD->file->cmds. Instead, check for leading +s and $(MAKE) or + ${MAKE} in the command line here. + + * commands.h (struct commands): Remove `recursive' member. + + * rule.c (install_default_pattern_rules): Remove use of `recursive' + member. + + * read.c (record_files): Don't check commands from $(MAKE) and set + their `recursive' member. + + * commands.c (fatal_error_signal): Treat SIGQUIT like SIGINT, SIGHUP, + and SIGTERM, but don't send it to ourselves because it will cause a + core dump. + +Thu Jun 8 20:30:04 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.50. + + * variable.c (variable_expand): Use allocated_variable_expand instead + of expand_argument in a few places. + + * variable.c (allocated_variable_expand): Do static variable shuffling + here instead of using expand_argument. + (expand_argument): Use allocated_variable_expand. + + * variable.c (recursively_expand): New function to recursively expand + its argument (a `struct variable'), returning the malloc'd value. + (variable_expand): Use recursively_expand. + +Sun May 28 12:49:27 1989 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * make.c (main): Fixed buggy fix in deciding to increase space for + command-line variable definitions. (First it never did it, then it + always did it; now it does it when necessary.) + +Sat May 27 14:01:54 1989 Roland McGrath (mcgrath at hecuba.Berkeley.EDU) + + * make.c (main): Fixed bug in deciding to increase space for + command-line variable definitions. + +Fri May 26 15:48:01 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * read.c (multi_glob): Use allocated_expand_variable for checking + `HOME' variable for ~ expansion, since this may be called from inside a + `wildcard' function expansion. + + * variable.h: Declare allocated_expand_variable. + + * variable.c (allocated_expand_variable): New function to do variable + expansion in an allocated buffer, rather than the static one. + + * make.c (main): Don't set glob_tilde (it no longer exists). + + * variable.c (string_glob): Use multi_glob and parse_file_seq. + + * read.c (multi_glob): Do ~ expansion here. + + * glob.c (glob_tilde, glob_filename): Removed ~ expansion. + + * variable.c (define_variable, lookup_variable): Use a smarter hashing + algorithm (the same one used for files and directories). + (VARIABLE_BUCKETS): Increased to 523. + + * file.c (enter_file, lookup_file, rename_file): Use a smarter hashing + algorithm, spreading the bits about somewhat. + + * make.c (log_working_directory): Under `-p', precede the directory + message with a `#'. + + * make.c (print_version): Under `-p', precede each line with a `#'. + (print_data_base): Precede the header line with a `#' and include the + date and time on it. + + * vpath.c (print_vpath_data_base): Precede non-directive + lines with `#'s. + + * commands.c (print_commands): Precede the non-command line with a `#'. + + * rule.c (print_rule_data_base), file.c (print_file_data_base): Precede + non-rule lines with `#'s. + + * dir.c (print_dir_data_base): Precede all lines with `#'s. + + * variable.c (print_variable_data_base): Changed format so that it can + be makefile input. Lines that are not variable definitions are + preceded with `#'. Nonrecursive variable definitions are made with all + dollar signs doubled to reproduce the initial value. Recursive + variable definitions containing newlines are done with `define' + directives. Nonrecursive variable definitions containing newlines, and + variable names containing :, =, or newlines, will come out garbled. + +Wed May 24 00:20:04 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.49. + +Tue May 23 19:18:00 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * variable.c (expand_function: `filter'/`filter-out'): Use + find_percent instead of pattern_p. + + * variable.c (expand_function: `patsubst'): Pass new args (both nil) + to patsubst_expand. + (variable_expand): For $(var:pat%=rep%) references, pass new args to + patsubst_expand so as to avoid find_percent and thus disallow + quoting the %s. + + * read.c (record_files): Pass new args to patsubst_expand. + + * variable.c (patsubst_expand): Take two new args: PATTERN_PERCENT + and REPLACE_PERCENT. Each of these, if non-nil, means that PATTERN + (or REPLACE) has already been run through find_percent, and + PATTERN_PERCENT (or REPLACE_PERCENT) is the result. + + * make.h: Declare find_percent instead of pattern_p. + + * read.c (pattern_p): Changed to find_percent, returning a pointer + to the %, or nil if there is none. + (record_files): Take another arg, PATTERN_PERCENT, a pointer to the + % in PATTERN. + (read_makefile): Pass PATTERN_PERCENT to record_files. + + * make.texinfo (Rules: Static Pattern: Static Usage, + Rules: Directory Search: Selective Search, + Functions: Text Functions): Documented that `%' can be quoted. + + * variable.c (expand_function: `filter'/`filter-out'): Use pattern_p + to allow quoted %s in patterns. + + * variable.c (patsubst_expand): Use pattern_p on PATTERN and REPLACE + to allow quoted %s. Quoting backslashes are removed from REPLACE + even if PATTERN contains no unquoted %. + + * read.c (pattern_p): Made global. + * make.h: Declare pattern_p. + + * read.c (pattern_p): New function to search for an unquoted % in a + string. Backslashes quote %s and backslashes. Quoting backslashes + are removed from the string by compacting it into itself. Returns + nonzero if an unquoted % was found, zero if not. + (record_files): Use pattern_p to check for implicit rules. + (read_makefile): Use pattern_p to check for static pattern rules. + Also use it to allow quoted %s in `vpath' patterns; warn about + `vpath' patterns with no %s. + +Mon May 22 16:31:52 1989 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * glob.c (glob_filename): Replace a `1' with the `l' that should + have been there. This incidentally stops it from dumping core. + + * glob.c (glob_filename): If the path is just a directory, with no + file name pattern, return the directory alone. + + * glob.c (glob_tilde): New global variable (int), defaults to zero. + (glob_filename): If glob_tilde is nonzero, expand ~ or ~USER. + + * variable.c (string_glob): Keep a static allocated buffer for file + names taken from the list, instead of allocating and freeing one + every time. + +Fri May 19 18:06:26 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * make.c (decode_switches): Get floating numbers from the right string. + +Sun May 14 13:48:04 1989 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * commands.c (delete_child_targets): When deleting `also_make' + files, include the target's name in the message: + make: *** [foo] Deleting file `bar' + +Sat May 13 17:34:26 1989 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * make.c (max_load_average, default_load_average): Default to -1. + + * load.c (wait_to_start_job): Return if max_load_average is < 0.0, + not equal. + +Fri May 12 16:08:05 1989 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * variable.c (variable_buffer_output): Don't try to do pointer + arithmetic between objects not in the same array. + +Wed May 10 15:55:29 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * rule.c [M_XENIX] (default_suffix_rules, default_variables): Minor + changes to allow for strange compiler syntax. + + * rule.c (default_variables): Don't include "> $@" in + $(PREPROCESS.S), since it's already in the .S.s rule. + + * file.c (enter_file): Make a new double-colon file the `prev' + member of the bottom `prev' file (the one whose `prev' is nil). + + * read.c (do_define): Append newlines after copying the lines into + the value buffer, so we end up with a trailing newline. + + * make.c (print_version): If the global variable + `remote_description' is not nil or "", append "-%s" (its value) to + the version number. + * remote-*.c: Define remote_description appropriately. + +Sun May 7 15:15:53 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * commands.c (error_status): Converted to new function child_error, + taking new arguments TARGET_NAME and IGNORED, and writing an error + message: "*** [target] Error 1" (or signal #, etc.), appending + " (ignored)" if IGNORED is nonzero. + (child_handler): Use child_error instead of error_status. + + * compatMakefile (all): Don't depend on `doc'. + + * compatMakefile (clean): Don't remove make-info*. + (realclean): New rule, depends on `clean', removes tags, TAGS, + and all Info and TeX files. + +Thu May 4 17:00:46 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * variable.c (print_variable_data_base), file.c + (print_file_data_base), rule.c (print_rule_data_base), + Use floating-point for averages and percentages. + + * make.c (print_data_base): Print messages before and after the data + base information. + + * commands.c (print_commands): Changed output format to separate + lines in commands and prefix them with tabs. + + * dir.c (print_dir_data_base): Changed output format slightly. + + * vpath.c (struct vpath, construct_vpath_list, + selective_vpath_search): Remove the `exists' member and its uses. + + * vpath.c (print_vpath_data_base): New function to print all + selective and general VPATH search paths (for -p). + + * make.c (print_data_base): Call print_vpath_data_base. + + * file.c (print_file_data_base): Changed format to look more like a + makefile rule. Now reports all information in the `struct file'. + + * rule.c (print_rule_data_base): Changed format of display from: + %: (terminal) + depends on: RCS/%,v + to: + %: RCS/%,v + is terminal. + references nonexistent subdirectory. + Also include number and percent that refer to nonexistent + subdirectories. + +Thu Apr 27 15:45:40 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * make.c (main): Figure out the level of recursion before writing + the `Entering directory' message. + * variable.c (define_automatic_variables): Don't figure out the + level of recursion from `MAKELEVEL'. It's now done in main. + + * Version 3.48. + +Wed Apr 26 16:39:17 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * commands.c (child_handler): Set `update_status' to zero when there + are no more commands. + + * make.c (log_working_directory): If MAKELEVEL > 0, indicate the + recurson in the message (make[1]: ...). + + * commands.c (child_handler): Change status to `cs_finished' when + commands fail. + + * commands.c (start_job): Return 0 (success) if there were no more + commands for the child. + (child_handler): Change the status to `cs_finished' when start_job + fails to start the commands. + + * make.c (main): Don't handle SIGEMT if it's not defined. + Do handle SIGDANGER if it is defined. + + * commands.c (child_handler): Reorganized inner loop so that it + doesn't try to inspect the child before finding it. + +Tue Apr 25 16:28:24 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * make.c (end_of_token): Fixed bug wherein backslashes caused + immediate return. + + * Version 3.47. + + * make.texinfo (Implicit: Pattern Rules: Automatic): Document + setting of `$*' for explicit rules. Add note clarifying that + automatic variables, though referred to in the documentation as + `$<', etc. are no different than `$(<)', etc. + +Fri Apr 21 18:00:12 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * file.c (enter_file): Don't strip leading `./'s. + + * read.c (parse_file_seq): Strip leading `./'s. + +Thu Apr 13 17:26:41 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * make.texinfo (Commands: Parallel, Running: Options): Document that + -l with no argument removes a previous load limit. + + * make.c (struct command_switch): New member `default_value'. + (default_job_slots): Default value (of 1) for -j. + (default_load_average): Default value (of 0, unlimited) for -l. + (command_switches): Use default values for -j and -l. + Also, -l without an arg now means no load limit. + (define_makeflags): Don't write positive_int or floating options + whose values are their defaults. + + * make.c (main): Under -w, write a `Leaving directory' message + before re-execing. + +Tue Apr 11 16:46:29 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.46. + + * Makefile: Provide an easy place for system-specific definitions + (-DUSG, etc.) and extra object files (for whatever). + + * make.texinfo: Miscellaneous fixes from RMS. + +Mon Apr 10 19:31:34 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * rule.c (pattern_search): Put rules with `subdir' flags set in + TRYRULES, since these might be valid with VPATHs. In the TRYRULES + loop, don't do lookup_file or file_exists_p calls for dependencies + of rules with `subdir' flags set, but still do vpath_search calls + and intermediate-file searches. + +Thu Apr 6 16:33:00 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * make.texinfo (Implicit: Pattern Rules: Automatic): Document the + new definition of $* for explicit rules. + + * commands.c (execute_file_commands): If FILE->stem is nil, figure + out if FILE->name ends in a suffix in the .SUFFIXES list; if so, + store the name sans suffix in FILE->stem (and $*). + +Wed Apr 5 15:24:48 1989 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * file.c (remove_intermediates): Don't use `file_exists_p' to check + for the existence of intermediate files, because the hashed + directories will probably be out of date. + + * commands.c (child_handler): Free the good stdin before running the + next command line. + + * commands.c [USG] (init_siglist): Don't case SIGEMT if it's not + defined. Do case SIGDANGER (for IBM RT) if it is defined. + + * commands.c: Changed `SYS_WAIT' to `HAVE_SYS_WAIT'. + (child_handler): Use `wait3' if HAVE_SYS_WAIT is #defined. + + * file.c (enter_file): If any `./'s are stripped off, allocate a new + copy of the shortened name. + + * rule.c (pattern_search): Allocate the right length strings for + `also_make' members. + +Sat Apr 1 13:28:38 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.45. + + * GNUmakefile: Make a separate tarfile of the DVI and info files. + + * make.c (define_makeflags): If a switch that takes an argument has + its default value, put the switch in MAKEFLAGS with no arguments. + + * make.c (command_switches): Pass `-l' in MAKEFLAGS. + +Wed Mar 29 17:50:05 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * GNUmakefile: Don't include the DVI and info files in the dist. + + * commands.c (child_handler): Don't call + check_changed_{directories,vpaths}. + + * make.h: Don't declare check_changed_{directories,vpaths}. + + * vpath.c (check_changed_vpaths): Removed this function. + + * dir.c (struct directory): Remove `modtime' member. + (find_directory): Don't set `modtime' member. + (check_changed_directories): Removed this function. + + * remake.c (update_file_1): Set FILE->command_state to cs_finished + if it didn't need to be remade. + + * remake.c (update_file): Only write the "up to date" message if the + target went from `not_started' state to `finished' state without + incrementing the count of files remade. + + * commands.c [USG] (init_siglist): If both SIGCHLD and SIGCLD are + defined, don't put them both in the `switch'. + +Tue Mar 28 15:37:02 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * file.c (rename_file): Change FILE's name!!! + + * rule.c (create_pattern_rule): Set the `terminal' member of the new + rule after calling new_pattern_rule, which zeros it. + + * rule.c (default_variables): Use $(C++) in $(COMPILE.cc)! + +Sun Mar 26 15:52:30 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Makefile: Added a `clean' target. + +Fri Mar 24 15:08:46 1989 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * Version 3.44. + + * file.c (rename_file): If a `struct file' for the renamed-to name + exists, and it is a target or has deps or commands, barf. + If not just remove the old one for put in the new one. + + * remake.c (update_file_1, check_dep): Changed it back so that equal + modtimes to NOT make dependencies be considered newer. RCS checks + out files with equal modtimes as the RCS files, so this screws it. + + * make.h, glob.c: If __GNUC__ is defined, use __builtin_alloca. + + * Makefile: Use variables `ALLOCA' and `ALLOCASRC' so systems + without a good standard alloca can get it from the Emacs + distribution (or somewhere). + + * dir.c: Don't include , since make.h does. + + * make.c: Removed debugging version of getwd. + +Thu Mar 23 16:16:27 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.43. + + * remake.c (update_file_1): If a dependency loop is found, don't + fatal. Emit an error message and remove the dependency. + + * remake.c (library_file_mtime): Fixed to use the right names. + (update_file_1, check_dep): Consider a dependency "newer" than its + dependent if they have the same modification time. + +Wed Mar 22 19:31:35 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * file.c (remove_intermediates): Don't try to remove nonexistent files. + +Mon Mar 20 10:21:22 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.42. + + * rule.c (default_variables): Set F77 to $(FC) and F77FLAGS to + $(FFLAGS) so explicit rules expecting these (which are in System V) + will work. However, there is no way to make setting these affect + the implicit rules, unless we trash FC and FFLAGS (which BSD uses). + [USG]: Set GET to `get' rather than `/usr/sccs/get'. + +Sun Mar 19 20:00:27 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * vpath.c (construct_vpath_list): Don't replace VPATH[ELEM] with + dir_name (V), because the latter may get freed. + +Sat Mar 18 15:01:39 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.41. + + * make.texinfo: Cleaned-up edition 0.1 Beta from RMS and Bob Chassell. + + * file.c (rename_file): If a file with the new name already existed, + use the same storage space, after freeing the old file's name, deps, + and `also_make' member, preserving the link in the chain. + Also write an error message telling the user to report the incident; + I don't think this should be able to happen, but I'm not sure. + + * file.c (rename_file): Don't add the hash values of the old and new + names together! Reset HASHVAL before computing the second value. + + * dir.c (check_changed_directories): Zero the new file hash table + after allocating it. + + * dir.c (dir_file_exists_p): If FILENAME is "", return 1 if the + directory exists. + + * vpath.c (check_changed_vpaths): New function to run through the + search paths of all VPATHs, making the `exists' members correspond + to reality. + + * commands.c (child_handler): Call check_changed_vpaths. + + * make.h: Declare check_changed_vpaths. + + * vpath.c (struct vpath): New element `exists', an array of char + flags; exists[N] is nonzero if searchpath[N] exists. + (construct_vpath_list): Set the `exists' member. + (selective_vpath_search): Don't search directories whose `exists' + elements are zero. + + * read.c (read_makefile): Set the `dontcare' flag of makefiles + from the MAKEFILES variable if they were not mentioned anywhere but + in the MAKEFILES variable. + + * read.c (read_makefile): Don't write an error message if fopen + fails for a makefile from the MAKEFILES variable. + + * dir.c (struct directory): Add `modtime' member to record the + modification time of the directory when it was opened. + (check_changed_directories): New function to check all known + directories; if their modtimes have changed since they were opened, + their file tables are cleared and they are reset to be read in. + + * commands.c (child_handler): Call check_changed_directories before + returning. + make.h: Declare check_changed_directories. + +Tue Mar 14 20:07:13 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.40. + + * make.c (print_version): Made the copyright say 1988, 1989. + + * read.c (read_all_makefiles): Don't set *MAKEFILES to the name of + the end of the read_makefiles chain, since the latter may be from an + included makefile. (Why did I do this before?) + + * make.c (main): Set argv[0] to "" if it was nil. Don't put the + command-line variable definitions into argv[0], only into the MAKE + variable! + +Sun Mar 5 20:44:08 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * ar.c (ar_member_date, ar_touch): Remove the trailing ) from the + member name. + +Fri Mar 3 18:15:15 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * commands.c (construct_command_argv): Initialize NEW_ARGV to 0. At + `slow' label, if NEW_ARGV is not 0, free it; then allocate 4 strings. + +Tue Feb 28 14:29:39 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.39. + + * COPYING, make.texinfo: New GNU General Public License, version 1. + + * *.c, *.h, Makefile: New copyright notices for the new GNU General + Public License, version 1. + + * commands.c [USG]: Define WRETCODE correctly (again). + + * variable.c (expand_function: `shell'): Don't capture the standard + error output of the shell command. + + * ar.c (ar_touch, ar_member_date): Allocate MEMNAME with the right + length. + + * load.c [not UMAX] (load_average): Don't clobber the first nlist + member when trying to set the second! + +Thu Feb 23 13:13:53 1989 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * commands.c (child_handler): Really ignore errors under -i and for + - lines, don't just print a different message. + + * make.c (decode_switches): Fixed handling of arguments (or lack + thereof) to switches. + +Wed Feb 22 16:25:39 1989 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * commands.c (construct_command_argv): Don't clobber LINE when + checking the IFS variable. + +Sun Feb 19 11:17:07 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * load.c [UMAX, not NO_LDAV] (load_average): Return 0.0 rather than + randomness when calls fail. + + * Version 3.38. + + * commands.c (fatal_error_signal): If handling a user kill signal + (TERM, INT, HUP), wait for the children without printing the + "Waiting for children" message, since they will die quickly. + + * Version 3.37. + + * remote-stub.c (remote_status): Take another arg, BLOCK. If this + is nonzero block waiting for remote children. If not, return 0 if + we would have to block. + + * commands.c (child_handler) [not USG]: If called as a signal + handler, use wait3 and don't block. + [USG]: If called as a signal handler, return after handling one child. + +Sat Feb 18 13:37:04 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * file.c (snap_deps): Process all double-colon entries of each file, + not just the first one. + + * Version 3.36. + + * remote-stub.c: remote.c renamed. + remote.c: Just include remote-stub.c + + * commands.c (child_handler): If we were called as a signal handler, + return after handling one child. + + * commands.c [not USG]: Include and define `sigmask' if + doesn't. + (block_children, unblock_children): Use sigmask rather than + bitshifting explicitly (and incorrectly). + + * remote.c (remote_kill): New function to send a signal to a + remote child. + + * commands.c (fatal_error_signal): If we get a SIGTERM, send one to + each living child. If we get a SIGTERM, SIGINT, or SIGHUP, delete + all pending targets before waiting for children. + (struct child): Add new member `deleted'. + (start_job): Initialize `deleted' member to 0. + (delete_child_targets): New function to delete a given child's + targets, unless the `deleted' flag in the `struct child' says they + have already been deleted. Sets this flag before returning. + +Thu Feb 16 18:32:07 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * commands.c [USG]: Define `WRETCODE' correctly (X & 0xff00). + +Tue Feb 14 16:05:00 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * commands.c (construct_command_argv): Don't make the 0th element of + the argument list be "sh" when executing /bin/sh, because start_job + uses the 0th element as the program name. + +Sun Feb 12 17:42:05 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.35. + + * read.c (readline): Put a null in the beginning of the buffer + before starting the reading loop. + + * read.c (read_makefile): Made main reading loop while + !feof (infile), and removed EOF check after calling readline. + +Sun Feb 5 19:52:38 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * remote.c (block_remote_children, unblock_remote_children): New + (stub) functions to block and restore asynchronous notification of + remote child death. + + * commands.c (block_children): Call block_remote_children. + (unblock_children): Call unblock_remote_children. + (child_handler): If called as a signal handler, block remote + children on entry and unblock them before returning. + + * commands.c (child_handler): For unknown children, if they are + remote, give their remote ID; if local, give their PID and make's. + + * commands.c (execute_file_command): Don't put a new child in the + chain unless start_job succeeds. Block children before calling + start_job, and unblock them after putting the child in the chain and + incrementing `job_slots_used' (if start_job succeeded). + + * commands.c (block_children, unblock_children): Make these globally + visible (not `static'). + commands.h: Declare block_children and unblock_children. + + * variable.c (expand_function: `shell'): Use + `shell_function_completed'. Block children before forking and + unblock after `shell_function_pid' is set properly and + `shell_functon_completed' is reset to 0. + + * commands.c (child_handler): When the child of the `shell' function + completes, set `shell_function_completed' to 1 if it actually ran, + or -1 if it didn't (due to fork or exec failure). + + * commands.c (block_children, unblock_children): New functions to + block and unblock the child termination signal. + (wait_for_children): Use block_children and unblock_children. + (execute_file_commands): Block children around the critical section + wherein a new child is put on the chain. + + * make.c (main): Change the environment to contain the correct + MAKELEVEL before re-execing. + +Sat Feb 4 18:28:48 1989 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.34. + +Fri Feb 3 16:36:49 1989 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * rule.c (default_variables): Fixed $(LINK.c). + +Wed Feb 1 18:05:07 1989 Roland McGrath (mcgrath at pepper.Berkeley.EDU) + + * Version 3.33. + + * version.c: Removed copyright notice, since this is a one-line file. + + * commands.c (error_status): Made it return BUF, rather than running + off the end (this apparently worked on Sun 3s for some reason). + + * ar.c, commands.c, dep.h, load.c, make.c, make.h, read.c, remake.c, + rule.c, variable.c, Makefile: Changed copyrght notices to cover 1989. + +Mon Jan 30 15:51:28 1989 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Version 3.32. + +Fri Jan 27 20:09:24 1989 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * remake.c (remake_file): Don't touch phony targets. + + * rule.c (convert_to_pattern): Fixed an incorrect length passed to + savestring. + + * variable.c (expand_function: `shell'): Close the read side of the + pipe on the parent side of the fork. + + * commands.c (start_job): On the child of the fork, close the + BAD_STDIN fd if we're not using it. + + * read.c (record_files): A file beginning with a dot can be a + default target if it also contains a slash (as in `../foo'). + + * commands.c (wait_for_children): For BSD, block SIGCHLD rather than + ignoring it to avoid a race condition when child_handler is returning. + + * commands.c (child_handler): Do blocking waits. + (error_status): Return a string describing exit status. (Split out + of child_handler). + + * read.c (multi_glob): Change VECTOR to VEC for Alliant. + +Thu Jan 5 00:06:51 1989 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Version 3.31. + + * make.texinfo (Features): Noted $(foo:PAT=SUB) from SunOS 4.0. + + * make.texinfo (Options/Recursion): -d and -p go in the environment. + + * load.c: Include "commands.h". + +Wed Jan 4 17:49:25 1989 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * make.c (switches): -d and -p can come from the environment and are + put into it. + + * read.c (record_files): Fixed the checking for duplicate deps so it + doesn't clobber the first one. + + * make.texinfo: Documented default implicit rule changes. + + * rule.c: Revamped default suffix rules. They now use Sun's style + of using variables `COMPILE.c', `LINK.c', etc. for each suffix, and + use `TARGET_ARCH' and `TARGET_MACH' variable where appropriate. + Also support Modula-2 compilation (suffixes .sym, .def, and .mod). + Ratfor Yacc support is gone, since nobody has yacc -r. + All EFL support is gone, since nobody uses EFL. + + * ar.c, arscan.c: Don't assume `long int' and `int' are the same. + + * commands.c [USG]: Fixed wait status bit encoding. + [USG and not USGr3] (dup2): Define this for SysVr2. + + * make.h, dep.h, make.c [iAPX286]: Make allowances for this + brain-damaged compiler. + + * make.texinfo (Variables: Flavors): Fixed a typo. + +Tue Jan 3 18:09:31 1989 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * ar.c (ar_member_date, ar_touch): Truncate member names to 15 chars. + + * Version 3.30. + + * commands.c [SYS_WAIT]: If this is defined, use BSD + and wait3 even if USG. + + * read.c (record_files): Defining .DEFAULT with no deps or commands + clears its commands. + + * rule.c (default_suffixes): Added `.sh'. + (default_suffix_rules): Added single-suffix .sh rule, copies source + to target and makes target executable. + make.texinfo (Catalogue of Rules): Documented .sh rule and its use + in conjunction with SCCS. + + * rule.c (set_default_suffixes): Define variable `SUFFIXES' to the + default list ("" under -r). + make.texinfo (Suffix Rules): Document `SUFFIXES' variable. + + * rule.c (default_variables), make.texinfo (Implicit Variables): + Variable AR defaults to `ar', ARFLAGS to `rv', and RM to `rm -f'. + + * rule.c (install_default_pattern_rules): Default variables are made + recursive. + (default_variables): Added "CPP", defined to "$(CC) -E". + (default_suffixes): Added `.S', before `.s'. + (default_suffix_rules): New rule for .S to .s, runs CPP. + All rules that use CPP now include "$(CPPFLAGS)". + make.texinfo (Catalogue of Implicit Rules, Implicit Variables): + Documented above changes. + + * commands.c [USG] (sys_siglist): Don't define. + [USG] (init_siglist): New function to initialize sys_siglist. + + * make.texinfo (Variables: Reference): Documented `$(foo:PAT=SUB)' + references. + + * variable.c (variable_expand): A reference `$(foo:PAT=SUB)' is + equivalent to `$(patsubst PAT,SUB,$(foo))'. + + * variable.c (variable_expand): Free the storage for the expansion + of a recursive variable when it is nod longer needed. + + * variable.c (variable_expand): When checking for `$($(foo))', use + lindex so as not to search for the second `$' outside the parens. + + * make.c (struct stringlist, main, decode_switches): Changed `index' + member to `idx'. + +Sat Dec 24 16:02:32 1988 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * commands.c (wait_for_children [USG]): Handle SIGCLD with SIG_DFL, + rather than SIG_IGN. Ignoring SIGCLD reportedly makes wait return -1. + + * arscan.c [USGr3]: Define PORTAR to 1 (as with sun386). + (ar_scan [USGr3]): Remove trailing slashes from member names. + +Thu Dec 22 17:54:05 1988 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * make.texinfo (Makefiles: Overriding Makefiles): New node + documenting use of .DEFAULT to have one makefile defer unmakeable + targets to another. + + * make.texinfo (Implicit: Using Implicit, Implicit: Last Resort): + Mention empty commands and xref node `Empty Commands'. + +Wed Dec 21 20:12:40 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * Version 3.29. + + * make.c (struct command_switch, command_switches, et al): New + member `noarg_value', if not nil, ptr to value to use if no arg is + given to a switch that would otherwise require one. The -j option + can now be given w/o an arg, to mean infinite jobs. + * commands.c: If job_slots is zero, infinite jobs. + + * read.c (read_all_makefiles, read_makefile): Make makefiles precious. + + * make.c (decode_switches): For a positive_int or floating option, + if we moved to the next argument word, but found no argument for the + option, move back to the correct word. + + * make.c (decode_switches): If we got any unknown options, die after + processing all arguments. + + * GNUmakefile: Moved `include depend' to the end, so the default + goal will be set before then. + + * load.c (wait_to_start_job [Unix, UMAX]): Merged into one version + under #ifdef LDAV_BASED. Only loop while we have jobs running. + Sleep for increasing amounts (increase one second per iteration) + before checking the load average (after the first check). + Get the load average from function load_average. + (wait_to_start_job [not LDAV_BASED]): Always return. + (load_average [UMAX]): Fetch load average for Encore UMAX. + (load_average [not NO_LDAV]): Fetch load average from /dev/kmem. + [not NO_LDAV]: Define LDAV_BASED. + +Tue Dec 20 18:54:50 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * Version 3.28. + + * commands.c (wait_for_children): Take second arg, ERROR. If + nonzero, and there are children, print a message on stderr. + (execute_file_commands, fatal_error_signal): Pass second arg. + * make.c (die), remake.c (update_goal_chain), variable.c + (expand_function: `shell'): Ditto. + +Sat Dec 17 01:05:38 1988 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * commands.c (start_job): Call wait_to_start_job before forking. + + * load.c (load_average): Converted to wait_to_start_job. + + * remote.c: New file for remote execution functions. + (start_remote_job_p): Return nonzero if the next job should be run + remotely. + (start_remote_job): Start a remote job and return an ID for it. + (remote_status): Get status of dead remote children. + +Fri Dec 16 16:51:07 1988 Roland McGrath (mcgrath at hecuba.Berkeley.EDU) + + * commands.c (start_job): If start_remote_job_p () returns nonzero, + call start_remote_job to start the job rather than fork and exec. + (child_handler): + + * commands.c (execute_file_commands): Moved load average checking to + start_job. + + * commands.c (child_handler: USG): Record the pid wait returns. + + * load.c (UMAX): Added some #include's needed for UMAX. + + * read.c (multi_glob), variable.c (string_glob): Ignore a (char **) + -1 return from glob_filename. + + * variable.c (variable_expand): Make sure we don't increment past + the end of the string we were passed. + + * variable.c (variable_expand): Terminate the expansion. + + * file.c (rename_file): If there is already a file under the new + name, set its contents equal to FILE's (ick). + + * variable.c (define_automatic_variables): Pass all the args to + define_variable when defining MAKELEVEL! + + * commands.c (execute_file_commands): If max_load_average > 0, and + we have children running, don't start up another child until the + load average goes below max_load_average. + + * make.c: New variable `max_load_average'. + (struct command_switch, decode_switches, decode_env_switches): + Handle floating-point (double) args. + (command_switches): Added `-l' switch to set `max_load_average'. + + * load.c (load_average): New file and function to return a double + that is the current load average (1.00 scale). + * GNUmakefile, oldMakefile: Pass flags in $(LOAD_AVG) for load.c. + +Thu Dec 15 15:22:08 1988 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Makefile: Renamed to oldMakefile. + * GNUmakefile: Make Makefile from oldMakefile and depend. + + * read.c (read_all_makefiles): When putting the default makefiles in + the read_makefiles chain so they will be remade, put them in the + right order. + + * remake.c (update_goal_chain): If MAKEFILES is nonzero, always make + in serial, and return as soon as one goal whose `changed' member is + nonzero is successfully remade. + + * commands.c: Don't include . + + * commands.c (construct_command_argv): Added ` to sh_chars. + + * make.h: Don't declare construct_makeflags. + + * make.c (main): Set up MAKEFLAGS and MFLAGS and make an environment + both before and after reading the makefiles, so the makefiles can + use them and possible change them, and later children will get the + right information. + (construct_makeflags): Replaced with define_makeflags (static void), + which defines the two variables. + * variable.c (define_automatic_variables): Don't define MAKEFLAGS + and MFLAGS. + +Mon Dec 12 14:40:31 1988 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * Version 3.27. + + * commands.c (child_handler): Reset the handler to ourselves when + called for USG, since it has no safe signals. + + * commands.c: For USG, use an int rather than a `union wait' for + wait calls, and dissect it with bitmasks. + (child_handler): No wait3 system call in USG. Since we can't + protect from hanging, always return immediately if we have no + children we know about and we're not running a `shell' function. + (There is still the danger of hanging waiting for a child that died + without our being notified.) + + * remake.c: Include instead of . What we need + is really in , and while BSD includes + , USG doesn't. + + * make.c (main): Figure out the program name before doing anything + which might need it (in a call to error or fatal). + + * dir.c, glob.c: Use `struct dirent' and for USGr3. + + * arscan.c (ar_scan): Added missing & before buf (which is an int) + if SARMAG is not defined (SysV). + +Fri Dec 9 18:44:13 1988 Roland McGrath (mcgrath at pepper.Berkeley.EDU) + + * Version 3.26. + + * dir.c (find_directory, dir_file_exists_p): Keep track of how many + directories we have open and don't let it be more than + MAX_OPEN_DIRECTORIES (currently 10). + + * variable.c (expand_function: `foreach'): Use expand_argument + rather than variable_expand so each repetition doesn't clobber the + last!!! + +Mon Dec 5 15:58:46 1988 Roland McGrath (mcgrath at hecuba.Berkeley.EDU) + + * Version 3.25. + + * Makefile: Define `install' target. + + * GNUmakefile: Don't include GNUmakefile or depend in the + distribution file. + +Wed Nov 30 15:53:42 1988 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * commands.c (execute_file_commands): Don't clobber a null into + random storage if there were no $^ and/or $? words. + + * remake.c (check_dep): Set *MUST_MAKE_PTR nonzero if a dependency + doesn't exist. + + * ar.c (ar_member_date, ar_touch): Make sure the modtime of the + archive file itself is known before we fetch or change the modtime + of one of its members. + + * read.c (read_makefile): Expand variable and function references + before parsing rules so variable can contain special characters + (colons and semicolons). + +Sat Nov 26 11:36:31 1988 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * variable.c (expand_function: `filter', `filter-out'): Fixed so + that filter-out works right. + + * variable.c (expand_function: `filter', `filter-out'): Made these + functions use each word of their first argument as a pattern. + +Fri Nov 25 10:51:47 1988 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.24. + + * read.c (record_files): If a target is listed more than once in a + single rule (that defines commands), give a warning message rather + than the counter-intuitive message saying commands were already + defined (in the same place). + + * make.c (fatal, error): Made them both take 6 args since there is + at least one error message that need that many. Too bad vfprintf is + not universal! + + * Version 3.23. + + * read.c (read_makefile): Moved the construction of the `struct + commands' into record_files. Call record_files before recursing for an + included makefile so the higher-up will determine the default goal. + (record_files): Take arguments COMMANDS, COMMANDS_IDX and + COMMANDS_STARTED and construct a `struct commands. + +Thu Nov 24 14:36:33 1988 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.22. + + * make.c (main): Made it a fatal error if we can't move back to the + directory we started in before re-execing. + + * make.c (main): Get the current directory before doing anything + else, so we know it even if we don't need it for the value of + `MAKE', since we might want it when re-execing. + +Wed Nov 23 13:34:44 1988 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Version 3.21. + + * read.c (record_files): Eliminate duplicate deps in a chain. + + * variable.c (expand_function: `sort'): Pass the right number to + qsort, not one less. + + * remake.c (remake_file): Always call notice_finished_file if + FILE->command_state == cs_finished. + + * commands.c (execute_file_commands): Call notice_finished_file to + set FILE's status correctly when start_job fails (because it's out + of commands or running under -n). + +Fri Nov 18 15:31:12 1988 Roland McGrath (mcgrath at saffron.Berkeley.EDU) + + * Version 3.20. + + * remake.c (update_file_1): Set the `update_status' of FILE to + nonzero and set FILE's `updated' bit if we have decided to give up + on remaking FILE because of errors in the dependencies. + + * rule.c (pattern_search): Debugging messages use `dependency' (vs. + `dependent') properly. + + * make.texinfo (Conditionals: Conditional Syntax): Function index + entries for `ifndef' and `ifneq'. + + * variable.c (define_automatic_variables): Define `MAKELEVEL' to the + decimal number of the makelevel, since it may be malformed or blank. + + * remake.c (remake_file): Call notice_finished_file after touching. + +Sat Nov 12 19:29:34 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * Version 3.19. + + * GNUmakefile (dist): Pass the `-f' flag to compress. + + * vpath.c (build_vpath_lists): Check for VPATHS being nil after + constructing the general VPATH list from the `VPATH' variable. + +Fri Nov 11 08:02:26 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * make.c (fatal, error): Made error messages for recursive runs be + shorter. + +Thu Nov 10 16:51:36 1988 Roland McGrath (mcgrath at basil.Berkeley.EDU) + + * Version 3.18. + + * read.c (read_makefile): Made it eat leading spaces and formfeeds + (but not tabs), like it's documented to. + + * read.c (read_makefile): Let included makefiles determine the + default goal, as is done by System V Make. + +Tue Nov 1 19:03:08 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * variable.c (new_environ): Don't increment VCNT when a variable is + rejected. + +Fri Oct 28 16:54:15 1988 Roland McGrath (mcgrath at basil.Berkeley.EDU) + + * Version 3.17. + + * rule.c (convert_to_pattern): Don't use the same storage for a name + in two rules since new_pattern_rule may free this storage when a + rule is discarded. + + * rule.c (new_pattern_rule): Undid useless change I made Oct 25. + +Thu Oct 27 19:17:53 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * Version 3.16. + + * GNUmakefile, Makefile: Fixed a typo in a comment. + * Makefile: Removed malloc.o from object file list. + + * variable.c: Removed old debugging #define's for xmalloc and + xrealloc so non-ANSI cpp's won't barf. + + * make.c (main): Made local array for temp file name static so + compilers that don't do auto aggregate initialization won't barf. + + * read.c: Removed static declaration of copy_dep_chain since it is + no longer static. + +Tue Oct 25 16:59:30 1988 Roland McGrath (mcgrath at pepper.Berkeley.EDU) + + * rule.c (new_pattern_rule): If we threw out the new rule because it + matched an old one and OVERRIDE was zero, don't put the freed + pointer in the chain! + +Wed Oct 19 15:07:43 1988 Roland McGrath (mcgrath at pepper.Berkeley.EDU) + + * Version 3.15. + + * variable.c (expand_function: `sort'): Don't do the sorting and + writing out if there were no words in the first place. + + * remake.c (remake_file): Only fail with a "no way to make" message + for a dependency (non-target) file. If we don't know how to remake + a target file, pretend it was successfully remade and is very new. + + * remake.c (remake_file): Don't increment `files_remade' for a + non-target file we don't know how to remake. + + * read.c (record_files): Don't die with "both : and :: entries" for + a file whose `is_target' flag is not set. + +Tue Oct 18 17:24:11 1988 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * variable.c (expand_function: `patsubst', `subst'): Free the right + things! + + * variable.c (expand_function: `subst'): Don't clobber the + pointer to the end of the second arg and then try to use it!!! + +Mon Oct 17 16:44:45 1988 Roland McGrath (mcgrath at catnip.Berkeley.EDU) + + * variable.c (expand_function: `patsubst'): Don't clobber the + pointer to the end of the second arg and then try to use it!!! + + * variable.c (expand_function: `word' function): Made it parse its + second argument correctly. + + * ar.c (ar_touch): Return 1 rather than -1 for on errors. + +Sat Oct 15 15:12:16 1988 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Version 3.14. + + * GNUmakefile: Removed explicit rule for make.dvi since the built-in + implicit rule now works. + + * rule.c (default_suffix_rules): Fixed .texinfo.dvi rule yet again + so that it really works, now that parens are counted. + + * remake.c (update_file_1): Set FILE's `updated' flag after calling + remake_file if it failed or finished immediately. + + * remake.c (update_file): Use the `updated' flag rather than the + command state to decide if a file was fully considered, and + therefore might give an "up to date" message. + + * variable.c (expand_function): Made all functions that take more + than one argument count parens of the appropriate flavor in their + args and ignore commands nested in parens. + +Fri Oct 14 18:35:00 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * read.c (read_all_makefiles): Pass second arg to read_makefile for + default makefiles. + +Thu Oct 13 16:40:08 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * Version 3.13. + + * GNUmakefile: Added an explicit rule for make.dvi since the + built-in .texinfo.dvi implicit rule is screwed up. + + * rule.c (default_suffix_rules): Added a comment that the + .texinfo.dvi rule does not work because of an ahem, feature of Make + that at some point will be fixed--er, enhanced to alleviate this + difficulty. + + * rule.c (default_suffix_rules): Fixed Texinfo -> DVI rule (again). + + * make.texinfo (Commands: Execution): Documented new competing for + standard input among children. + + * commands.c (struct child): Added `good_stdin' flag to tell if this + child has the stdin that doesn't point into nirvana. + (good_stdin_used): New variable to tell if any child has the good + standard input. + (child_handler): Reset `good_stdin_used' if a dead child's + `good_stdin' flag is set. + (start_job): Give the new child the good standard input if + `good_stdin_used' is no set, and set the child's `good_stdin' flag + appropriately. + + * rule.c (default_suffix_rules): Changed Texinfo -> DVI rule to work + better (I hope). + + * read.c (read_all_makefiles): Stop reading default makefiles after + one is found. + + * read.c (read_makefile): Reset `reading_filename' and + `reading_lineno_ptr' after recursing for an included makefile. + + * GNUmakefile: New GNU Make-specific makefile that does everything + Makefile does plus distribution stuff, and doesn't contain any hacks + to try to work with Unix make. + + * Makefile: Removed distribution stuff. + + * make.c (main): Use mktemp to construct the names of temporary + files used for standard input makefiles. + + * make.c (main): Don't turn standard input into a broken pipe. + + * commands.c (start_job): Keep two extra file descriptors around: a + good standard input, and a bad one that reads from a broken pipe. + On the child side of the fork, if there are other children, give + this one the broken pipe so they won't compete; if this is the only + one, give it the good standard input. + + * make.h: Declare notice_finished_file. + + * commands.c (execute_file_commands): Use noticed_finished_file + after waiting for the child when there is only one job slot. + + * remake.c (notice_finished_file): New function to re-check mtime's + and such things to be done when commands finish. + (update_file_1): Use notice_finished_file. + + * commands.c (child_handler, execute_file_commands): Use new + variable `job_slots_used' to record the number of jobs currently + running, rather than diddling with `job_slots'. + (execute_file_commands): Increment `job_slots_used' before calling + start_job and decrement it on failure to avoid race condition. + If there is only one job slot, wait for the child to finish and + return its status so commands are run in linear order, as if there + were no parallelism. + +Wed Oct 12 15:59:03 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * remake.c (remake_file): Don't print a "No way to make" message for + targets whose `dontcare' flags are set. + + * read.c (read_all_makefiles): Set the `dontcare' flag of the + `struct file' each default makefile added to the chain. + + * file.h (struct file): Add `dontcare' member. + + * read.c (read_all_makefiles): When no default makefiles are found, + put the names of all those tried in the `read_makefiles' chain so + they will be updated if possible, giving their `struct dep's' + `changed' members the value of 0 so we won't care if they cannot be + found or remade. + + * make.texinfo (Makefiles: Remaking Makefiles): Documented that + default makefiles will be remade if not found. + + * read.c (read_all_makefiles): If no default makefiles can be found, + go through the list of default names, trying to make one, stopping + if one is made. + + * remake.c (remake_file): Set STATUS to 0 after successfully touching. + + * dir.c (file_impossible, file_impossible_p): Don't clobber FILENAME + to "" and then try to to a strcmp on it!!! + +Mon Oct 10 16:09:18 1988 Roland McGrath (mcgrath at cinnamon.Berkeley.EDU) + + * make.c (main): Don't do `dir_load (".")'. + + * rule.c (count_implicit_rule_limits), vpath.c + (construct_vpath_list): Test the existence of a given directory by + `dir_file_exists_p (DIR, ".")' and assume that if this returns zero, + it means the directory really does not exist. + + * dir.c (struct dirdata): Replaced with `struct directory' for + directories, each containing a chain of `struct dirfiles', one for + each file (real or impossible). + (dir_load): Removed. + (find_directory): New function to find the `struct directory' for a + named directory and return it (possibly creating a new one). + (dir_file_exists_p): Read the directory on the fly if its stream is + still valid (and ever was) if the file we're looking for is not + already in the hash tables. + (file_impossible, file_impossible_p, dir_name, print_dir_data_base): + Use the new directory/file scheme. + + * make.texinfo: Miscellaneous editorial changes and clarifiactions. + + * commands.c (struct child): Remove `environ' member. + (child_handler, start_job, execute_file_commands): Remove use of + `environ' member and new_environ. + + * make.c (main): Call new_environ after reading makefiles. + + * variable.h: Declare `new_environ' to return void. + + * variable.c (new_environ): Put the environment in `environ' and + return void. + +Fri Oct 7 15:48:39 1988 Roland McGrath (mcgrath at pepper.Berkeley.EDU) + + * Version 3.12. + + * Makefile: Don't make the uncompressed tar file. + + * variable.c (expand_function: `shell' function): Made it not expect + read to null-terminate the buffer. + + * Makefile: Made it use a temporary symlink to . rather than a + temporary directory to make the distribution tar file. + +Thu Oct 6 17:52:35 1988 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.11. + + * make.texinfo: Fixed a line that got garbaged somehow. + +Mon Oct 3 16:14:39 1988 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * make.c (main): Try to move back to the directory we started in + before re-exec ourself. + + * remake.c (update_file_1): A double-colon target with no deps + always needs to be remade. + + * remake.c (remake_file): Changed "No way to make" message to say + `target' rather than `file'. + +Sun Oct 2 12:50:47 1988 Roland McGrath (mcgrath at catnip.Berkeley.EDU) + + * remake.c (update_file_1): Set FILE->update_status to the return + value of remake_file. + + * rule.c (convert_to_pattern): Fixed swapped lengths passed to + xmalloc for source/target suffixes. + + * make.texinfo: Documented that MAKEFLAGS and MFLAGS are read in + from makefiles. Updated the `Features' section a bit. + + * make.c (main): Read switches from MAKEFLAGS and MFLAGS variables + after reading in makefiles. + + * make.c (main): Put a line "/tmp/foo:;" rather than ".PHONY: + /tmp/foo" in front of temp files made for stdin makefiles. + + * remake.c (update_file): Test the state of the right `struct file' + for double-colon files. + + * make.c (main): Put a ".PHONY: /tmp/foo" line in front of temp + files made for stdin makefiles so they won't be remade when we + re-exec. Kludge-o-matic!! + + * remake.c (update_goal_chain): Judge files as being finished based + on their `updated' flag, not their state. + + * read.c (read_makefile): Don't check for FILENAME being "-". + (read_all_makefiles): Set each element of MAKEFILES to the name put + in READ_MAKEFILES by read_makefile, since read_makefile may free the + storage for the name it is passed, and someone might want to look at + the elements of MAKEFILES again. + + * make.c (main): For each `-f' flag with arg `-' (standard input), + read standard input into a temp file and pass the temp file's name + to read_all_makefiles, after making sure it will not be remade. + + * make.c (construct_makeflags): Always put out `-j1'. + +Sat Oct 1 00:19:59 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * commands.c (execute_file_commands): If commands are nothing but + whitespace, set the state to `cs_finished' before returning 0. + + * make.c (decode_switches): Allocate space for args in stringlists + so they can be freed later. + + * make.h: Declare `makelevel'. + + * variable.c (makelevel): Moved to make.c (and made global). + + * make.c (fatal, error): Print the makelevel if it's > 0. + (perror_with_name): Use error rather than calling fprintf directly. + (pfatal_with_name): Use fatal rather than fprintf and die. + + * variable.c (new_environ): Don't put default variables (origin + `o_default') into the environment; they just take up space. + + * read.c (read_makefile): Don't add FILENAME to the chain of read + makefiles if it's "-" (standard input). + + * remake.c (update_goal_chain): Set STATUS correctly when nothing + happens (as well as in all other situations). + + * make.c (construct_makeflags): Put a `-' before each switch and + spaces between them. + + * Version 3.10. + + * commands.c (wait_for_children): Don't check if `children' is nil. + This is the case when waiting for the child of a `shell' function. + + * dir.c (dir_load): Don't add a hash-table entry for directory + DIRNAME and filename "" if DIRNAME doesn't exist. + + * commands.c (execute_file_commands): Return 0 after start_job + returns 1 (failure) under the -n flag. + + * remake.c (remake_file): Set the state to `cs_finished' when not + calling execute_file_commands. + + * remake.c (update_goal_chain): Second arg is now MAKEFILES, nonzero + meaning to disable -t, -q, and -n for each target unless the target + was also given on the command-line. + + * read.c (read_makefile): Enter the `struct file's for the makefiles + added to the `read_makefiles' `struct dep' chain. + + * remake.c (update_goal_chain): Made it not enter the files for the + goals in the chain. It will already have been done. + + * rule.c (convert_to_pattern): Null-terminate the names of targets + and deps of the pattern rules properly. + +Fri Sep 30 18:56:20 1988 Roland McGrath (mcgrath at nutmeg.Berkeley.EDU) + + * make.c (main): Call install_default_pattern_rules. + + * make.h: Declare copy_dep_chain. + + * read.c (copy_dep_chain): Moved to make.c (and made global). + + * make.c (main): Call update_goal_chain to update goals. + Update read makefiles and re-exec self if they change. + + * remake.c (update_file): Make this function static. + (update_goal_chain): New function to update a `struct dep' chain of + goals, waiting until they are all finished before returning. + + * make.h: Don't declare update_file. Declare update_goal_chain. + + * make.c (main): Call snap_deps, etc. that were in read_all_makefiles. + + * read.c (find_makefile): Removed this function. + (read_all_makefiles): Don't update makefiles, don't diddle with + pattern rules, don't call snap_deps, etc. Return a `struct dep' + chain of all makefiles read. + (read_makefile): Now takes two args: FILENAME and TYPE, which is 0 + for a normal makefile, 1 for MAKEFILES variable or 2 for an included + makefile. Add a `struct dep' containing the name of the makefile + (as it was found in the search path for type 2s), and TYPE in the + `changed' member to the global `read_makefiles' chain. + + * make.h, rule.c (displace_pattern_rules, + add_displaced_pattern_rules): Removed these functions. + + * read.c (read_makefile): Variable-expand the name of an `include'd + makefile before calling find_makefile on it. + + * file.c (snap_deps): If the `struct file' for a `struct dep' + already exists, free the `struct dep's `name' member before setting + it to nil (since this info is in the `struct file'). + + * read.c (copy_dep_chain): Made it copy each name rather than + leaving multiple `struct dep's with the same pointers. + +Thu Sep 29 19:08:13 1988 Roland McGrath (mcgrath at catnip.Berkeley.EDU) + + * make.c (decode_switches): Fixed second decode_env_switches call to + use correct length of "MFLAGS" (6, not 5). + + * read.c (read_makefile): Don't stop reading when readline returns + zero lines read. Only stop when the stream reaches EOF. This makes + it recognize the last line of a makefile without a newline. + + * remake.c (remake_file): If we don't know how to make FILE, set its + command state to `cs_finished'. + + * remake.c (update_file): Don't write the "up to date" message if + update_file_1 returned a nonzero status. + +Wed Sep 28 16:30:07 1988 Roland McGrath (mcgrath at catnip.Berkeley.EDU) + + * commands.c (child_handler): Set the `update_status' member + properly for ignored errors. + + * rule.c (convert_to_pattern): Made it not care about if the target + suffix comes before the source suffix in the .SUFFIXES list. + + * make.texinfo: Misc editorial changes. + + * commands.c (wait_for_children): Return immediately if `children' + is nil (there are no children). + +Tue Sep 27 15:33:14 1988 Roland McGrath (mcgrath at pepper.Berkeley.EDU) + + * Version 3.09. + + * commands.c (struct child): New member `command_ptr' to hold the + current position in the commands. The `commands' member is never + changed. + (start_job, child_handler, execute_file_commands): Use new method + for `commands' and `command_ptr' members. + + * make.c (decode_env_switches): Skip past an invalid letter (instead + of looping forever). + + * commands.c (struct child): Add `environ' member to hold the + environment for this child. + (execute_file_commands): Get a new environment from new_environ and + put in the the new `struct child's `environ' member. + (child_handler): When freeing a child, free its `commands' member, the + elements of its `environ' array and its `environ' member itself. + (start_job): Set `environ' to the child's `environ' member before + exec'ing the command. + + * variable.h, variable.c (new_environ): Made it return the new + environment, not putting it in `environ'. + + * remake.c (update_file): Don't give a "is up to date" message + unless no files were remade and the state went from `cs_not_started' + to `cs_finished', so repeat calls to finish jobs won't get the message. + +Mon Sep 26 16:26:08 1988 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * Version 3.08. + + * make.texinfo (Commands: Execution): Documented that children will + be waited for rather than killed. + + * commands.c (fatal_error_signal): Wait for children. + (kill_children): Removed this function. + + * make.c (main, die): Wait for children to die, don't kill them. + + * variable.c (expand_function): Use wait_for_children. + + * make.c (main): Use wait_for_children rather than child_handler. + + * commands.c (wait_for_children): New function to block waiting for + children, insuring that child_handler is not called recursively. + (execute_file_commands, kill_children): Use wait_for_children. + + * commands.c (child_handler): Start up additional commands in a + sequence after an ignored error. + + * remake.c (update_file): Don't print "`foo' is up to date" messages + when update_file_1 returns while commands are executing. + + * remake.c (update_file_1): Pass the file name to name_mtime, not + the bloody `struct file', dammit!! + + * commands.c (child_handler): Print out the "*** ..." error message + when not under -i. (I somehow forgot this.) + + * remake.c (update_file_1): Use name_mtime rather than file_mtime to + re-get the mtime of a file whose commands have finished. + + * make.c (command_switches, decode_switches, decode_env_switches): + Make all switches that take string args allow them right after the + switch letter. + + * commands.c (child_handler): Check for a child being the `shell' + function's command returning and set the global variable for + expand_function to check. + + * variable.c (expand_function): For the `shell' function, instead of + waiting for the child shell ourselves, let child_handler do it and + loop around waiting for something to happen. + + * make.c (print_version): Made the copyright year static, not dynamic. + + * make.h, make.c: Remove construct_argv function. + + * make.c (main): Say "no goal target" instead of "no target". + + * make.texinfo (Commands: Parallel): Don't send SIGKILL. + + * commands.c (kill_children): Don't send SIGKILL to children that + aren't killed by the first signal. + + * make.c (main), commands.c (kill_children): Decide between SIGCHLD + and SIGCLD based on whether or not SIGCHLD is defined, not on USG. + + * Makefile: Link make with $(LOADLIBES). + + * read.c (construct_include_path): Fixed another bad xrealloc call. + + * make.c (decode_switches): Fixed an xrealloc call with no first arg. + +Sat Sep 24 01:16:21 1988 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * Version 3.07. + + * remake.c (update_file_1): If deps are running, set state to + `cs_deps_running' and return 0. If deps are done, run commands. + + * commands.c (child_handler): Made it delete non-precious targets + killed by fatal signals. + + * make.texinfo: Documented parallelism. + +Fri Sep 23 16:52:27 1988 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * remake.c (update_file_1): Don't return if FILE's state is + `cs_deps_running'. In that case, we need to run through and check + the states of all our dependencies. + + * commands.c (execute_file_commands): Decrement `job_slots' after + starting a new job to run file commands. + + * commands.c (start_job): Made it set the state to `cs_running'. + + * make.c (main): Fixed usage of `g', `lastgoal', and `goals' in the + goal-making loop. + + * commands.c (child_handler): When commands finish, set the + corresponding file's `update_status' and `updated' flags as + appropriate, and reset the modtimes of the file and any `also_make' + files it has. + + * remake.c (remake_file): Don't re-set `last_mtime' and set `updated'. + + * commands.c (fatal_error_signal): Don't swallow all the children + with a loop around `wait ((union wait *) 0)'!!! + + * make.c (struct command_switch): Added `positive_int' type. + (switches): Added -j (job_slots). + (construct_makeflags, decode_switches, decode_env_switches): + Handle`positive_int'-type switches. + + * glob.c (glob_vector): Rename local variable `vector' to `VeCtOr'. + This is said to avoid a conflict with some system's global `vector' + variable. + + * variable.c (expand_function): Made the `shell' function use + construct_command_argv and do its own child control and piping. + + * make.c (main): Turn standard input into a broken pipe after + reading in all makefiles (the last time it will be needed). + + * commands.c (struct child): Remove `pipe_fd' member. We don't use + pipes any more. + (start_job): Return 0 for success, 1 or failure (rather than void). + Don't use pipes. Don't turn the child's stdin into a broken pipe. + (child_handler): Print "*** Error" messages when necessary. + Die on failed commands when -k was not given. + (execute_file_commands): Check the return of start_job and remove + the child from the chain and return failure if it is nonzero. + + * make.c (die): New function to clean up and exit. + (fatal, pfatal_with_name): Use die. + +Thu Sep 22 14:27:11 1988 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * commands.c (struct child): Added `commands', `pipe_fd', and + `noerror' members to keep track of info about a command thread. + (start_job): New function to start a job and update the argument + `struct child' to reflect its status. + (execute_file_commands): Merged run_file_commands back in. + Made it use new start_job function. + + * rule.c (freerule): Don't free the `struct commands' of the + discarded rule. It may be used in more than one place. + + * commands.c (execute_command_line): Made it not try to delete the + possibly partly-made file. The child_handler function will do this. + (fatal_error_signal): Ditto + call kill_children. + + * make.h: Declare job_slots. + + * make.c (main): Collect goals in a dep chain and run through this + chain waiting for a child, eliminating finished goals, updating all + remaining goals, and quitting if they fail and not -k. + + * commands.c (child_handler): If called with SIG < 0, - SIG is the + max number of children to bury. + + * commands.c (child_handler): If called with SIG as zero, + block waiting for running children. + (kill_children): Call child_handler with zero rather than SIGCHLD. + + * remake.c (update_file_1): Use the `command_state' member of FILE + and its dependencies to determine what commands are running, what to + do, etc. If commands or dep commands are running when we are + called, return success (0). If commands finished since the last + time we were called, return their status. + + * commands.h: Declare kill_children. + + * commands.c: Define `struct child' to keep track of child + processes, with the chain in `children'. + (child_handler): New function to catch child-termination signals + (SIGCHLD, or SIGCLD for USG), store the returned status in the + appropriate structure, take the now-obsolete `struct child' out of + the chain, and free its storage. + (execute_file_commands): Put all of the stuff invloving running the + commands into new function run_file_commands. Execute_file_commands + now does process management for the commands, while + run_file_commands (which is run in a subprocess) runs the commands. + (kill_children): New function to kill all running children by + sending them signal SIG. If there are any children still living + after they are all sent SIG, they are all sent SIGKILL. + + * make.c (main): Catch SIGCHLD (SIGCLD for USG) with child_handler. + + * commands.h: Declare child_handler function. + + * commands.c (execute_file_commands): Check the `command_state' + member of FILE and return 0 if it is `cs_running' or + `cs_deps_running' and return the stored status if it is `cs_finished'. + + * file.h (struct file): Added `command_state' member. + + * commands.c (execute_command_line): Add `$' to the list of + characters special to the shell. + +Wed Sep 21 15:57:41 1988 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * read.c (read_all_makefiles): Call convert_to_pattern before + recomputing the limits after adding the displaced rules. + + * make.c (main): Move calls to snap_deps, convert_to_pattern, and + build_vpath_lists to read_all_makefiles. + + * read.c (read_all_makefiles): Install the default pattern rules + before checking to remake the makefiles, displace these rules before + reading in the makefiles, and then add the displaced rules to the + chain after reading in all the makefiles. + + * make.c (main): Don't call install_default_pattern_rules or + count_implicit_rule_limits. + + * make.h: Declare displace_pattern_rules and + add_displaced_pattern_rules. + + * rule.c (displace_pattern_rules, add_displaced_pattern_rules): New + functions to stow the chain and add the stowed chain on the end of + the current chain. + + * make.texinfo (Implicit: Search Algorithm): Fixed PREV reference. + + * make.c (main): Call construct_include_path right after decoding + the switches. + + * read.c (find_makefile): Use rename_file. + + * file.h: Declare rename_file. + + * file.c (rename_file): New function to rename a `struct file' and + put it in the correct hash bucket. + + * read.c (find_makefile): New function to find and update a makefile. + (read_all_makefilese): Use find_makefile. + (read_makefile): Don't do updating. Removed UPDATEIT arg. + + * remake.c (update_file_1): Took out setting the `updated' member to + -1 rather than 1 sometimes. + + * make.c (main): Made it print version info before doing anything else. + + * remake.c (library_file_mtime, f_mtime): Removed use of last two + arguments to vpath_search. + + * rule.c (pattern_search): Removed use of last two arguments + to vpath_search. + + * vpath.c (vpath_search, selective_vpath_search): Removed unused + DIRPREFIX and DPLEN args. + + * read.c (read_makefile): Also turn off -n when updating makefiles. + +Tue Sep 20 17:01:10 1988 Roland McGrath (mcgrath at pepper.Berkeley.EDU) + + * Makefile: Put tags files in the tarfile. + + * read.c (read_makefile): Get the modtime of the makefile via a stat + call so that a later file_mtime call won't do VPATH search for it. + + * read.c (read_makefile): Don't turn off -t and -q if the makefile + was a command-line target. + + * make.c (main): Enter command-line targets as files and set their + `cmd_target' members. + + * file.h (struct file): Added `cmd_target' member. + + * read.c (read_makefile): Temporarily turn off -t and -q while + updating makefiles. + + * make.c (main): Don't use arg 0 from other_args (which is now + argv[0]; i.e., the program's name). + + * read.c (read_makefile): Only return nonzero if commands were + actually run to remake the makefile. + + * remake.c (update_file_1): Set FILE->updated to -1 if no commands + were actually run (because no update was done or -t was given). + + * make.c (decode_switches): Fixed bug wherein xrealloc was passed + bad args if it tried to expand other_args->list. + + * read.c (read_all_makefiles): Made it not look at the `MAKE' + variable, just use argv[0]. + +Sun Sep 18 17:34:11 1988 Roland McGrath (mcgrath at paris.Berkeley.EDU) + + * read.c (rerun_make): New function to re-exec make. + + * make.c (construct_makeflags, construct_argv): New functions to + construct the `MAKEFLAGS' variable and to construct an arg list from + parsed info. + + * read.c (read_makefile): New arg UPDATEIT, if nonzero, says to + update the makefile as a target before reading it in. When reading + included makefiles, pass this as zero. Now returns nonzero if the + makefile was updated, zero if not. + (read_all_makefiles): Pass a nonzero UPDATEIT arg to read_makefile + for all default and -f makefiles and all makefiles from the + `MAKEFILES' variable. If any of the makefiles has changed, re-exec + self to re-read them. + + * remake.c (update_file): Print a "File `foo' up to date'" message + under -p. + + * commands.c (execute_file_commands): Allocate one byte for each of + $^ and $< rather than zero if they are to be empty. + +Fri Sep 16 13:59:59 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * Version 3.06. + + * make.c (command_switches): Fixed entry for `-o' switch. + + * make.texinfo: Renamed -c switch to -C. + + * make.c: Renamed -c switch to -C. + + * Miscellaneous de-linting. + + * read.c (record_files): Made it not free the storage for the name + if it started with `./' and was therefore not quite the same as in + the `struct file'. + + * read.c (record_files): If commands were specified twice, the error + message specifies in what files and at what line numbers. + + * make.c (main): If any of the signals we usually fatal on were + ignored by the parent (probably a shell), ignore them. + + * make.c (main): Print version info for -v, -p, or -d. + (print_data_base): Don't print version info. It will be done in main. + + * variable.c: Increased number of hash buckets to 257. + + * file.c: Increased number of hash buckets to 1007. + + * rule.c (count_implicit_rule_limits): Moved comptation of + `maxsuffix' to convert_to_pattern, since that function uses + `maxsuffix', and must be called before count_implicit_rule_limits. + + * rule.c (pattern_search): If an existent (non-intermediate) + dependendency was found via a terminal rule, set its + `tried_implicit' flag, so it will never have implicit rule search done. + + * glob.c: Bug fix to avoid alloca(0). + + * arscan.c: USG and Sun386i fixes. + +Thu Sep 15 19:40:26 1988 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * make.texinfo: Fixed some typos and spelling errors. + +Wed Sep 7 14:20:39 1988 Roland McGrath (mcgrath at helen.Berkeley.EDU) + + * make.c (decode_switches): Fixed bug wherein a bad option would + give a useless error message and loop forever. + +Tue Sep 6 14:36:02 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * make.texinfo: Documented `shell' function. + + * variable.c (expand_function): New function `shell', does + backquote-style command expansion of its arg. + + * commands.c (execute_command_line): Second arg OUTBUF, if not nil, + gets filled in with a malloc'd buffer containing the piped stdout of + the command. + (execute_file_commands): Use above (pass nil). + +Mon Sep 5 17:03:49 1988 Roland McGrath (mcgrath at hecuba.Berkeley.EDU) + + * Makefile: Added copyright notice. + Added a comment about defining `NO_MINUS_C_MINUS_O' if necessary. + + * Version 3.05. + + * rule.c (default_suffix_rules): Don't pass `-o' switches with `-c' + switches if `NO_MINUS_C_MINUS_O' is #define'd. + + * make.texinfo: Documented `GNUmakefile'. + + * read.c (read_all_makefiles): Made it try default makefile + `GNUmakefile' before others. + + * make.texinfo: Added new-style Texinfo header thingies. + +Sat Sep 3 18:09:39 1988 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * Version 3.04. + + * make.texinfo (Chained Rules): Added a @cindex about using + .PRECIOUS to preserve intermediate files. + + * remake.c (update_file_1): Made it not just return before executing + commands under -p. + + * rule.c (default_pattern_rules, default_variables): Made it use + `$(AR)' for `ar r' (to put files in archives). + + * vpath.c (build_vpath_lists): Made it recursively expand the + `VPATH' variable (by using variable_expand instead of lookup_variable). + + * read.c (conditional_line): Made it not swallow whitespace after + the comma in an `ifeq' using the `(a,b)' syntax. + + * rule.c (count_implicit_rule_limits): Made it not crash if a + pattern rule dep begins with `/'. + +Sun Aug 28 15:51:12 1988 Roland McGrath (mcgrath at homer.Berkeley.EDU) + + * make.texinfo: Clarified that the arg to the `origin' function is a + variable *name*, not a reference. + + * make.texinfo: Clarified that both -Idir and -I dir are allowed. + +Sat Aug 27 13:49:28 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * remake.c (remake_file): Made touching phonies work right. + +Wed Aug 24 20:40:48 1988 Roland McGrath (mcgrath at nutmeg.Berkeley.EDU) + + * make.texinfo: Removed reference to `RANLIB' variable. + + * Version 3.03. + + * variables.c (expand_function): Added `origin' function. + * make.texinfo: Documented same. + + * read.c (record_files): Made double-colon entries work. + +Sat Aug 20 21:09:39 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * make.c (collapse_continuations): Bug fix from RMS. + + * rule.c (install_default_pattern_rules): Made it set the + `in_use' flag of the created rules to zero, rather than letting + it be random garbage. + + * rule.c (pattern_search): Fixed putting `also make' targets into + file strucutres. + + * read.c (record_files): Fixed bug which made double-colon entries + make it read off into space. + + * make.c (decode_switches): Made it understand `ignored' switches + rather than dumping core. + +Sun Aug 14 16:49:00 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * read.c (read_makefile): Made `include' filenames be + variable-expanded. + + * read.c (read_makefile): Fixed an error message. + + * read.c (read_makefile): Made it accept ^L's as whitespace. + * make.c (next_token, end_of_token): Ditto. + + * vpath.c (vpath_search): Fixed it so that the general VPATH (from + the variable) is always checked, even if a selective VPATH (from a + directive) matched the filename. + +Sat Aug 13 14:20:46 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * make.c (decode_switches, main): Made the command switches be + processed from a table of switches, variables, and types. No + functions are passed argc and argv any more. They are passed arrays + of strings they need to process. + * read.c (read_all_makefiles): Made it take an array rather than + argc and argv. + (construct_include_path): Ditto. + + * make.c (collapse_continuations): Made it work right (I hope). + + * make.texinfo: Minor editorial changes. + + * read.c (read_makefile): Minor speed improvement by freeing and + then mallocing something rather than reallocing it to avoid the + unnecessary bcopy. + +Thu Aug 11 00:10:43 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * make.texinfo: Fixed some unquoted @'s. + + * make.texinfo: Documented multiple-target pattern rules. + Miscellaneous minor editorial changes and corrections. + + * make.texinfo (Implicit: Catalogue of Rules): Removed the list of + variables. That's what the next section is for. + (Implicit: Implicit Variables): Made it agree with reality. + +Wed Aug 10 00:55:39 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * variable.c (print_variable_data_base): Fixed bug which made -p + dump core. (This was a really idiotic bug.) + + * rule.c (pattern_search): Fixed a bug which made it make the + `also_make' member of the file in question nil if the first of + the successful rule's targets was the matching one. + Made it use only as much storage as necessary in the `also_make' + member. + (create_pattern): Made it use only as much storage as necessary in + the `lens' and `suffixes' members of the created rule. + + * remake.c (library_file_mtime): Made it `static'. + + * file.c: Added a declaration for `errno', which is declared in some + 's, but not all. + + * file.h (struct file): Added `also_make' member for multiple-target + implicit rules. + * rule.c (pattern_search): Made it put the names of files updated by + the given file's commands in its `also_make' member. + * remake.c (update_file_1): Made it mark the files in a file's + `also_make' member as updated when the file is updated. + + * variable.c (try_variable_definition): Fixed a bug which made it + define a variable with the name of the whole definition when there + was no space before the = or :=. + + * make.texinfo (Features): Made the changes which were made in RCS + revision 2.7 but somehow lost since then. Added -W. + +Tue Aug 9 10:04:50 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * variable.h: Added `o_default' to `enum variable_origin'. + * variable.c (print_variable_data_base): Made it print the origins of + the variables. + * rule.c (install_default_pattern_rules): Made it define the default + variables with origin `o_default'. + + * make.texinfo: Documented -W. + + * make.c (decode_switches, main): Added the -W flag to give files a + time-stamp of now, for a `what if' effect when used with -n. + + * commands.c (print_commands): Made it say `(built-in)' for commands + that are built into the default ruleset. + + * read.c (record_file): Made .SUFFIXES get its deps frontwards (again). + * rule.c (set_default_suffixes, convert_to_pattern): Made it read + .SUFFIXES's deps frontwards, so the converted rules will not be in + reverse order. + + * rule.c (new_pattern_rule): Fixed a bug wherein it would keep + searching after it had removed a matching rule and ended up diddling + with freed storage. + + * rule.c (freerule): Made it take the given rule off the chain. + (new_pattern_rule, count_implicit_rule_limits): Use freerule to + remove rules from the chain. + + * vpath.c (construct_vpath_list): Made it return after cleaning out + all previous searchpaths when given a nil DIRPATH arg, so it won't + go into the construction code and dump core dereferencing a nil + pointer. + + * variable.c (patsubst_expand): Fixed a bug which made it not match + correctly and sometimes dump core. + +Mon Aug 8 16:35:48 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * rule.c (default_suffix_rules): Made the .texinfo.dvi rule remove + the files used in the comparison to determine whether or not a + second TeX run is necessary. + + * make.texinfo: Fixed some overfull TeX hboxes. + + * make.texinfo (Implicit: Catalogue of Rules): Fixed a Texinfo error. + + * rule.c (create_pattern_rule): Fixed bug wherein index was not + being passed its second arg. + + * read.c (getline): Merged back into readline. + + * rule.c (default_suffixes, default_suffix_rules, + default_variables): Added .texinfo.info rule. + * make.texinfo (Implicit: Catalogue of Rules): Documented + .texinfo.dvi and .texinfo.info rules. + + * make.texinfo (Top): Changed `last updated' date to be correct (for + the last time it was updated, not today). Changed `for version + 3.00' since it's not going to be called that. + +Sat Aug 6 19:51:10 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * commands.c (print_commands): Added this function to print the + contents of a `struct commands' for -p. + * rule.c (print_rule_data_base): Use above. + * file.c (print_file_data_base): Ditto. + + * rule.c (count_implicit_rule_limits, new_pattern_rule, + install_pattern_rule, print_rule_data_base): Made it understand the + changed `struct rule' and act accordingly. + (freerule): Added this function to free all the storage used by a rule. + + * rule.c (pattern_search): Made it grok multiple targets of pattern + rules. The matching is done properly, but at present, only the + matching pattern's target is used to give deps and commands. + +Fri Aug 5 18:00:29 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * rule.c (struct rule): Changed name, namelen, and patsuffix members + to targets, lens, and suffixes, which are arrays, for multiple targets. + (create_pattern_rule): Now takes first arg TARGETS, a nil-terminated + array of targets, rather than a single target and patsuffix pointer. + + * read.c (record_files): If it finds an implicit pattern rule, it + collects all the targets into an array and passes the whole thing to + create_pattern_rule. If there are non-pattern targets, it is a + fatal error. + +Tue Aug 2 15:06:38 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * make.c (readline): Split backslash-newline checking from reading + and buffer-expanding. + (getline): Created to do the reading and buffer-expanding formerly + done in readline. + + * rule.c (pattern_search): Made it reject nonterminal match-anything + rules when a specific rule has matched, rather than rejecting + terminal match-anything rules in this case. + + * rule.c (convert_to_pattern): Fixed a bug caused when the change to + make it only recognize two-suffix rules whose target suffixes + precede their dependency suffixes which made it work in the opposite + direction (even worse than it started out). + + * rule.c (pattern_search): Made it reject nonterminal match-anything + rules as intermediate targets when searching for both real and + intermediate dependencies, rather than only when searching for + intermediate ones. + +Sun Jul 31 00:33:56 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * rule.c (convert_to_pattern): Made it only recognize two-suffix + rules whose target suffix comes before the dependency suffix in the + .SUFFIXES list. + + * variable.c (define_automatic_variables): Made all automatic + variables be defined with origin `o_automatic'. + + * variable.h: Added `o_automatic' to `enum variable_origin' + + * file.c (remove_intermediates): Made it not print an error message + if the error was that the file does not exist. + + * rule.c: Removed `recursive' member from `struct rule'. + + * remake.c (library_file_mtime): Made it not use the directory hash + functions, as reading in and hashing /usr/lib and /lib is slow and + most likely unnecessary. + + * remake.c (remake_file): Changed message from ``No specification + for making'' to ``No way to make'' so it will be short enough that + most filenames will fit on a line. + Made it look at the `recursive' member of the `struct commands', + rather than of the `struct file' (which no longer has one). + + * commands.c (execute_file_commands): Made it look at the + `recursive' member of the `struct commands', rather than of the + `struct file' (which no longer has one). + + * file.h: Removed `recursive' member from `struct file'. + + * commands.h: Added `recursive' member to `struct commands'. + + * dep.h: Removed unused `quotedparen' member from `struct nameseq' + and `struct dep'. + + * read.c (dequote): Removed this function. + (multi_glob): Removed reference to `quotedparen' member of + a `struct nameseq' and calls to dequote. + + * read.c (record_files): Made it set the stem for $* for all static + pattern rules, not just those with commands given at that time. + Removed check for recursive commands. + Made it check for pairs of .SUFFIXES dependencies to reject as + default goals as well as single ones (that don't start with dots). + (read_makefile): Added checks for recursive commands to set + the `recursive' flag in the `struct commands'. + +Sat Jul 30 15:47:23 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * make.c (find_next_token): Made the LENGTHPTR arg optionally nil. + + * make.c: Removed `files_made' variable which is defined static in + remake.c and used only there. + (main): Cleaned up somewhat. + (decode_switches): Cleaned up a bit. Made an unknown option be a + non-fatal error. + (decode_env_switches): Made LEN arg unsigned. Cleaned up. + (print_version): Made it say ``see the source'' rather than ``see + the source file'', since there is more than one. + + * file.h: Made `num_intermediates' declared unsigned. + + * file.c: Made `num_intermediates' variable unsigned. + (remove_intermediates): Removed unused FORMAT arg. + (enter_file): Made it handle double-colon files properly, adding the + new entry as the old entry's prev pointer. + + * dir.c: Re-indented the `struct dir' definition to be right. + (dir_load): Cleaned up slighty. + (file_exists_p): Removed comment saying we could use `access', since + that is a bad idea (except for setuid programs). Cleaned up slightly. + + * commands.c: Changed some comments slightly. + (execute_file_commands): Cleaned up a bit. Changed some comments, + added others. Moved freeing of storage for $^ and $? to the same + place as for the other automatic variables. + (execute_command_line): Made `#' trigger a shell. + Added some comments. Cleaned up a bit. Put all the special chars + that trigger shells into an array easily changeable at the top. + + * ar.c: Added comments explaining each function. + (ar_scan_1): Merged into ar_member_date. + (ar_member_date): Changed call to ar_scan_1 to the body of that + function. + (ar_member_date_1): Simplified to a ?: expression rather than an + if-else statement. + (ar_member_touch): Changed error handling around a bit. + None of these errors are fatal now. + + * variable.c (subst_expand): Added a new arg BY_WORD, to do substs + only on full words. + (patsubst_expand): Fixed bug which made calls whose patterns + contained no `%' to not work correctly, by using above. + (variable_expand): Pass extra arg to `subst_expand'. + + * variable.c (expand_function): Fixed bug which made `foreach' calls + with one-word lists run off into never-never land. + +Fri Jul 29 20:12:36 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * variable.c (expand_function): Made a very minor speed improvement + by avoiding an unnecessary strlen call. + +Wed Jul 27 16:01:47 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * rule.c (default_suffixes): Rearranged the list somewhat; added + `.el' and `.elc' to speed things up (especially when building + Emacs), for the same reason `.h' is there. + + * read.c (record_files): Changed `lineno' from `long' to + `unsigned int'. + +Sun Jul 24 02:15:30 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * variable.c (expand_function): Eliminated use of `wstok' + because it is non-reentrant and unreliable. + Fixed a minor bug which would cause something not to be freed. + * make.c (wstok): Removed `wstok' because it is no longer used. + + * variable.c (expand_function): Made `foreach' function put + spaces between output texts like it's supposed to. + +Sat Jul 23 17:32:55 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * rule.c (default_suffixes, default_suffix_rules): Added rule + to make %.dvi from %.texinfo. + + * dir.c (print_dir_data_base): Made it say a bit more. + +Fri Jul 22 23:13:16 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * make.c (print_data_base): Split this function up into one + for each thing. + * variable.c (print_variable_data_base): One of the above. + * rule.c (print_rule_data_base): Ditto. + * file.c (print_file_data_base): Ditto. + * dir.c (print_dir_data_base): Ditto. + + * rule.c (install_pattern_rule): Fixed a bug which caused the + terminal and recursive flags to always be zero for rules + entered by this function. + + * make.texinfo (Rules: Double-colon): Added a paragraph + explaining the purpose of double-colon rules. + + * make.texinfo (Implicit: Catalogue of Rules): Updated to + reflect new C++, TeX, Web, and Texinfo rules. Other slight + editorial changes. + + * commands.c (execute_file_commands): Fixed a bug wherein + random memory could get written for files with no deps. + +Wed Jul 20 19:30:31 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * read.c (readline): Fix bug wherein it would not recognize a + backslash-newline if the buffer filled up and was enlarged + right before reading the newline. + +Tue Jul 19 19:55:02 1988 Roland McGrath (mcgrath at chilli.Berkeley.EDU) + + * read.c: Added default suffix rules for .cc (using $(C++), + which defaults to `g++', and $(C++FLAGS)), .tex, .dvi, .web + and .cweb (using $(TEX), $(WEAVE), $(TANGLE), $(CWEAVE) and + $(CTANGLE)). + +Sat Jul 16 21:24:28 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * Made error formats use %u rather than %ld for line numbers, + which are now unsigned int's rather than long's. + + * read.c (conditional_line): Fixed some bugs caused by use of + unsigned int rather than int in one place. + + * read.c (conditional_line): Put the info about active + conditionals in a struct. + (read_makefile): Make a new struct of info about conditionals + for included makefiles and restore the old one after the + included makefile has been read. + + * read.c (read_makefile): Don't try to read a makefile with + name "" after giving an error message because an `include' + directive gave no filename. + + * read.c (read_makefile): Give an error message for + non-whitespace text after the filename in an `include' directive. + + * make.c (error): Take five args, like `fatal'. It managed to + lose with only two. Is there a better way to do this without vfprintf? + + * read.c (read_makefile): Commands consisting of only + whitespace are not the same as no commands. I thought I'd + fixed this bug months ago; it seems to have come back. + + * make.c (collapse_continuations): All whitespace around a + backslash-newline combination is turned into a single space. + + * Added COPYING file and copyright notices to all files. + + * make.texinfo (Running: Goals): Fix a typo. + + * read.c (do_define): Take an arg for the origin of the + variable being defined. + (read_makefile): Grok `override define'. + + * make.texinfo (Variables: Override Directive, Defining): + Document the `override define' combination directive. + + * ar.c (ar_member_date): Make a 0 return from `ar_scan' return + (time_t) -1 (nonexistent file), rather than (time_t) 0, which, + when put in the `struct file', makes `file_mtime' try to get + the mtime over and over again. + + * variable.c (pattern_matches): Fix a bug that made patterns + not beginning with `%' never match. + +Fri Jul 15 21:01:44 1988 Roland McGrath (mcgrath at tully.Berkeley.EDU) + + * Took Make out of RCS. + + * Split the monolithic `make.c' into several smaller files. diff --git a/src/mkutil/make/ChangeLog.2 b/src/mkutil/make/ChangeLog.2 new file mode 100644 index 00000000..d30cfa42 --- /dev/null +++ b/src/mkutil/make/ChangeLog.2 @@ -0,0 +1,6648 @@ +2000-06-23 Paul D. Smith + + * main.c (main): Replace EXIT_SUCCESS, EXIT_FAILURE, and + EXIT_TROUBLE with MAKE_SUCCESS, MAKE_FAILURE, and MAKE_TROUBLE. + * make.h: Define these macros. + + * Version 3.79.1 released. + + * configure.in: Add a new option, --disable-nsec-timestamps, to + avoid using sub-second timestamps on systems that support it. It + can lead to problems, e.g. if your makefile relies on "cp -p". + * README.template: Document the issue with "cp -p". + + * config.guess, config.sub: Updated. + +2000-06-22 Paul D. Smith + + * job.c (start_job_command): Increment commands_started before the + special check for ":" (empty command) to avoid spurious "is up to + date" messages. Also move the test for question_flag after we + expand arguments, and only stop if the expansion provided an + actual command to run, not just whitespace. This fixes PR/1780. + +2000-06-21 Paul D. Smith + + * read.c (read_makefile): If we find a semicolon in the target + definition, remember where it was. If the line turns out to be a + target-specific variable, add back the semicolon and everything + after it. Fixes PR/1709. + +2000-06-19 Paul D. Smith + + * config.h-vms.template: #define uintmax_t for this system. + * config.ami.template: Ditto. + * config.h.W32.template: Ditto. + + * configure.in: We don't use select(2) anymore, so don't bother + checking for it. + * acconfig.h: Ditto. + * acinclude.m4: Ditto. + + * file.c (all_secondary): New static global; if 1 it means + .SECONDARY with no prerequisites was seen in the makefile. + (snap_deps): Set it appropriately. + (remove_intermediates): Check it. + (num_intermediates): Remove this global, it's not used anywhere. + (considered): Move this to remake.c and make it static. + + * NEWS: Document the change to .SECONDARY. + * make.texinfo (Special Targets): Document the change to .SECONDARY. + + * implicit.c (pattern_search): Remove the increment of + num_intermediates; it's not used. + * filedef.h: Remove num_intermediates and considered. + + * function.c (handle_function): If the last argument was empty, we + were pretending it didn't exist rather than providing an empty + value. Keep looking until we're past the end, not just at the end. + + * implicit.c (pattern_search): Multi-target implicit rules weren't + expanding the "also made" targets correctly if the pattern didn't + contain a slash but the target did; in that case the directory + part wasn't being added back to the stem on the "also made" + targets. Reported by Seth M LaForge , with + a patch. + +2000-06-17 Eli Zaretskii + + * Makefile.DOS.template (DESTDIR, bindir, datadir, libdir) + (infodir, mandir, includedir): Support installation under a + non-default DESTDIR. + + * remake.c (f_mtime): Fix the spelling of __MSDOS__. + + * configh.DOS.template (HAVE_FDOPEN, HAVE_MKSTEMP): Define. + +2000-06-14 Paul D. Smith + + * acinclude.m4 (pds_WITH_GETTEXT): rewrite fp_WITH_GETTEXT and + rename it to avoid confusion. This version is very specific: it + won't accept any gettext that isn't GNU. If the user doesn't + explicitly ask for the included gettext, we look to see if the + system gettext is GNU (testing both the actual libintl library, + and the libintl.h header file). Only if the system gettext is + really GNU gettext will we allow it to be used. + (pds_CHECK_SYSTEM_GETTEXT): A helper function. + +2000-06-13 Paul D. Smith + + * gettext.h: If we have libintl.h, use that instead of any of the + contents of gettext.h. We won't check for libintl.h unless we're + using the system gettext. + + * function.c (func_word): Clarify error message. + +2000-06-10 Paul Eggert + + Support nanosecond resolution on hosts with 64-bit time_t and + uintmax_t (e.g. 64-bit Sparc Solaris), by splitting + FILE_TIMESTAMP into a 30-bit part for nanoseconds, with the + rest for seconds, if FILE_TIMESTAMP is at least 64 bits wide. + + * make.h: Always define FILE_TIMESTAMP to be uintmax_t, for + simplicity. + + * filedef.h (FILE_TIMESTAMP_HI_RES, FILE_TIMESTAMP_LO_BITS) + (UNKNOWN_MTIME, NONEXISTENT_MTIME, OLD_MTIME) + (ORDINARY_MTIME_MIN, ORDINARY_MTIME_MAX): New macros. + (FILE_TIMESTAMP_STAT_MODTIME): Now takes fname arg. All uses changed. + (FILE_TIMESTAMP_DIV, FILE_TIMESTAMP_MOD) + (FILE_TIMESTAMP_FROM_S_AND_NS): Remove. + (FILE_TIMESTAMP_S, FILE_TIMESTAMP_NS): Use shifts instead of + multiplication and division. Offset the timestamps by + ORDINARY_MTIME_MIN. + (file_timestamp_cons): New decl. + (NEW_MTIME): Now just the maximal timestamp value, as we no longer use + -1 to refer to nonexistent files. + + * file.c (snap_deps, print_file): Use NONEXISTENT_MTIME, + UNKNOWN_MTIME, and OLD_MTIME instead of magic constants. + * filedef.h (file_mtime_1): Likewise. + * main.c (main): Likewise. + * remake.c (update_file_1, notice_finished_file, check_dep) + (f_mtime, name_mtime, library_search): Likewise. + * vpath.c (selective_vpath_search): Likewise. + + * remake.c (f_mtime): Do not assume that (time_t) -1 equals + NONEXISTENT_MTIME. When futzing with time stamps, adjust by + multiples of 2**30, not 10**9. Do not calculate timestamp + adjustments on DOS unless they are needed. + + * commands.c (delete_target): Do not assume that + FILE_TIMESTAMP_S yields -1 for a nonexistent file, as that is + no longer true with the new representation. + + * file.c (file_timestamp_cons): New function, replacing + FILE_TIMESTAMP_FROM_S_AND_NS. All uses changed. + (file_timestamp_now): Use FILE_TIMESTAMP_HI_RES instead of 1 < + FILE_TIMESTAMPS_PER_S to determine whether we're using hi-res + timestamps. + (print_file): Print OLD_MTIME values as "very old" instead of + as a timestamp. + +2000-05-31 Paul Eggert + + * remake.c (name_mtime): Check for stat failures. Retry if EINTR. + +2000-05-24 Paul D. Smith + + * main.c (decode_switches): The "positive_int" switch uses atoi() + which succeeds for any input, and doesn't notice if extra, + non-digit text is after the number. This causes make to mis-parse + command lines like "make -j 5foo" as "make -j5" (ignoring "foo" + completely) instead of "make -j0 5foo" (where "5foo" is a + target). Fix this by checking the value by hand. We could use + strtol() if we were sure of having it; this is the only + questionable use of atoi() I found so we'll just stick with that. + Fixes PR/1716. + + * i18n/ja.po, i18n/nl.po, i18n/pt_BR.po: New translation files. + * configure.in (ALL_LINGUAS): Added pt_BR. + +2000-05-22 Paul Eggert + + * remake.c (f_mtime): Fix bug when handling future odd + timestamps in the WINDOWS32 case. Do not bother initializing + static var to zero. Simplify code that works around WINDOWS32 + and __MSDOS__ time skew brain damage. + +2000-05-22 Paul Eggert + + * job.c: Don't include time.h, as make.h already does this. + +2000-05-22 Paul Eggert + + * configure.in (AC_CHECK_HEADERS): Add sys/time.h. + (AC_HEADER_TIME): Add. + (clock_gettime): Prefer -lrt to -lposix4, for Solaris 7. + (gettimeofday): Add check for standard version of gettimeofday. + This merges changes written by Paul D. Smith. + + * file.c (file_timestamp_now): Use gettimeofday if available + and if clock_gettime does not work. Don't bother with + high-resolution clocks if file timestamps have only one-second + resolution. + + * make.h : Include, conditionally on the usual + TIME_WITH_SYS_TIME and HAVE_SYS_TIME_H macros. This is needed + for gettimeofday. + +2000-05-20 Paul D. Smith + + * read.c (read_makefile): We weren't keeping makefile names around + unless there was a rule defined in them; but now we need to keep + them for variables as well. Forget trying to be fancy: just keep + every makefile name we successfully open. + + * remote-cstms.c (start_remote_job_p): Change DB_EXTRA (?) to DB_JOBS. + +2000-05-17 Paul Eggert + + * commands.c (chop_commands): Ensure ctype macro args are nonnegative. + * expand.c (variable_expand_string): Likewise. + * function.c (subst_expand, lookup_function, msdos_openpipe): + Likewise. + * job.c (vms_redirect, start_job_command, new_job, child_execute_job, + construct_command_argv_internal, construct_command_argv): Likewise. + * main.c (decode_env_switches, quote_for_env): Likewise. + * misc.c (collapse_continuations, end_of_token, end_of_token_w32, + next_token): Likewise. + * read.c (read_makefile, do_define, conditional_line, + find_char_unquote,get_next_mword): Likewise. + * variable.c (try_variable_definition): Likewise. + * vpath.c (construct_vpath_list): Likewise. + * w32/pathstuff.c (convert_vpath_to_windows32): Likewise. + +2000-05-10 Eli Zaretskii + + * main.c (main) [__MSDOS__]: Add SIGFPE to signals we block when + running child programs, to prevent Make from dying on Windows 9X + when the child triggers an FP exception. + +2000-05-08 Paul D. Smith + + * dir.c (find_directory) [WINDOWS32]: If we strip a trailing "\" + from the directory name, remember to add it back. The argument + might really be inside a longer string (e.g. %Path%) and if you + don't restore the "\" it'll be truncated permanently. Fixes PR/1722. + Reported by + +2000-05-02 Paul D. Smith + + * job.c (construct_command_argv_internal) [WINDOWS32]: Added "rd" + and "rmdir" to the list of command.com commands. + Reported by Elod Horvath + +2000-04-24 Paul D. Smith + + * i18n/ja.po: New translation file from the Japanese language team. + +2000-04-18 Paul D. Smith + + * remake.c (f_mtime): If ar_member_date() returns -1 (the member + doesn't exist), then return (FILE_TIMESTAMP)-1 rather than + returning the timestamp calculated from the value -1. Fixes PR/1696. + Reported by Gilles Bourhis . + +2000-04-17 Paul D. Smith + + * config.h.W32.template: Add LOCALEDIR macro resolving to "". + * w32/subproc/sub_proc.c (process_begin): Remove reference to + debug_flag; change it to a DB() call. Fixes PR/1700. + Reported by Jim Smith + +2000-04-17 Bruno Haible + + * arscan.c [BeOS]: Add replacement for nonexistent from GNU + binutils. + +2000-04-11 Paul D. Smith + + * function.c (expand_builtin_function): If no arguments were + provided, just quit early rather than changing each function to + test for this. + (function_table[]): Change the min # of arguments to 0 for all + those functions for which it makes sense (currently everything + that used to take a minimum of 1 argument, except $(call ...)). + Fixes PR/1689. + +2000-04-09 Eli Zaretskii + + * README.DOS: Add instructions to install a binary distro. + Mention latest versions of Windows. + +2000-04-07 Eli Zaretskii + + * main.c (main): Rename TMP_TEMPLATE into DEFAULT_TMPDIR, and use + it for the directory of the temporary file. If P_tmpdir is + defined, use it in preference to "/tmp/". Try $TMPDIR, $TEMP, and + $TMP in the environment before defaulting to DEFAULT_TMPDIR. + (print_version): Add year 2000 to the Copyright line. + +2000-04-04 Paul D. Smith + + * Version 3.79 released. + + * make.texinfo: Update documentation with new features for 3.79. + + * function.c (func_wordlist): Don't re-order arguments to + wordlist. + +2000-04-03 Paul D. Smith + + * remake.c (f_mtime): Archive member timestamps are stored as + time_t, without nanoseconds. But, f_mtime() wants to return + nanosecond info on those systems that support it. So, convert the + return value of ar_member_date() into a FILE_TIMESTAMP, using 0 as + the nanoseconds. + +2000-03-28 Paul D. Smith + + * Version 3.78.92 released. + + * build.template: Updates for gettext support; some bugs fixed. + +2000-03-27 Paul D. Smith + + * config.guess, config.sub: Updated from config CVS archive at + :pserver:anoncvs@subversions.gnu.org:/home/cvs as of today. + + * read.c (record_files): Check if expanding a static pattern + rule's prerequisite pattern leaves an empty string as the + prerequisite, and issue an error if so. Fixes PR/1670. + (read_makefile): Store the starting linenumber for a rule in + TGTS_STARTED. + (record_waiting_files): Use the TGTS_STARTED value for the file + location passed to record_file() instead of the current + linenumber, so error messages list the line where the target was + defined instead of the line after the end of the rule definition. + + * remake.c (start_updating, finish_updating, is_updating): Fix + PR/1671; circular dependencies in double-colon rules are not + diagnosed. These macros set the updating flag in the root + double-colon file instead of the current one, if it's part of a + double-colon list. This solution provided by Tim Magill + ; I just changed the macro names :). + (update_file_1): Call them. + (check_dep): Call them. + + The change to not automatically evaluate the $(call ...) + function's arguments breaks recursive use of call. Although using + $(if ...) and $(foreach ...) in $(call ...) macros is important, + the error conditions generated are simply to obscure for me to + feel comfortable with. If a method is devised to get both + working, we'll revisit. For now, remove this change. + + * function.c (function_table): Turn on the expand bit for func_call. + (func_call): Don't expand arguments for builtin functions; that + will have already been done. + +2000-03-26 Paul D. Smith + + * file.c (remove_intermediates): Never remove targets explicitly + requested on the command-line by checking the cmd_target flag. + Fixed PR/1669. + +2000-03-23 Paul Eggert + + * filedef.h (FILE_TIMESTAMP_STAT_MODTIME): Use st_mtime instead of + st_mtim.tv_sec; the latter doesn't work on Unixware. + +2000-03-18 Paul D. Smith + + * file.c (file_hash_enter): If we're trying to change a file into + itself, just return. We used to assert this wasn't true, but + someone came up with a weird case involving archives. After + playing with it for a while I decided it was OK to ignore it. + + * default.c: Define COFLAGS to empty to avoid spurious warnings. + + * filedef.h: Change #if ST_MTIM_NSEC to #ifdef; this is a macro + containing the name of the nsec field, not true/false. + * make.h: Ditto. + Reported by Marco Franzen . + +2000-03-08 Tim Magill + + * remake.c (update_file): Return the exit status of the pruned + file when pruning, not just 0. Fixes PR/1634. + +2000-02-24 Paul D. Smith + + * configure.in: Close a minor potential security hole; if you're + reading makefiles from stdin (who does that?) you could run into a + race condition with the temp file using mktemp() or tmpnam(). Add + a check for mkstemp() and fdopen(). + * main.c (open_tmpfile): New function to open a temporary file. + If we have mkstemp() (and fdopen()), use that. If not use + mktemp() or tmpnam(). If we have fdopen(), use open() to open the + file O_CREAT|O_EXCL. If not, fall back to normal fopen() (insecure). + (main): Call it. + * job.c (child_execute_job) [VMS]: Call it. + + * variable.c (lookup_variable): If we find a variable which is + being expanded, then note it but keep looking through the rest of + the set list to see if we can find one that isn't. If we do, + return that. If we don't, return the original. Fix for PR/1610. + + While implementing this I realized that it also solves PR/1380 in + a much more elegant way. I don't know what I was smoking before. + So, remove the hackage surrounding the original fix for that (see + below). Change this function back to lookup_variable and remove + the extra setlist argument. + * variable.h (recursively_expand_setlist): Remove the macro, + rename the prototype, and remove the extra setlist argument. + (lookup_variable): Ditto. + * expand.c (recursively_expand): Rename and remove the extra + setlist argument. + (reference_variable): Use lookup_variable() again. + (allocated_variable_append): Remove the extra setlist argument. + +2000-02-21 Paul D. Smith + + * README.template: A few updates. + + * i18n/de.po: New version from the German translation team. + +2000-02-09 Paul D. Smith + + * Version 3.78.91 released. + +2000-02-07 Paul D. Smith + + * read.c (read_makefile): Reset *p2 to ':', not *colonp. If any + filenames contained backslashes the resulting output (without + backslashes) will be shorter, so setting *colonp doesn't change + the right character. Fix for PR/1586. + + For += target-specific variables we need to remember which + variable set we found the variable in, so we can start looking + from there in the next iteration (otherwise we might see it again + in recursively_expand and fail!). This is turning into a hack; if + it gets any worse we'll have to rethink this entire algorithm... + implementing expansion of these references separately from the + "normal" expansion, say, instead of using the same codepath. + Actually, it's already "worse enough" :-/. + Fix for PR/1380. + + * variable.h (recursively_expand_setlist): Rename + recursively_expand to add a struct variable_set_list argument, and + make a macro for recursively_expand. + (lookup_variable_setlist): Rename lookup_variable to add a struct + variable_set_list argument, and make a macro for lookup_variable. + + * expand.c (recursively_expand_setlist): Take an extra struct + variable_set_list argument and pass it to allocated_variable_append(). + (reference_variable): Use lookup_variable_setlist() and pass the + returned variable_set_list to recursively_expand_setlist. + (allocated_variable_append): Take an extra setlist argument and + use this as the starting place when searching for the appended + expansion. If it's null, use current_variable_set_list as before. + + * variable.c (lookup_variable_setlist): If the LISTP argument is + not nil, set it to the list containing the variable we found. + +2000-02-04 Paul D. Smith + + * variable.c (print_variable): Write out filename/linenumber + information for the variable definition if present. + (define_variable_in_set): Store filename information if provided. + (define_variable, define_variable_for_file): Removed. + (try_variable_definition): Use define_variable_loc() to keep + variable definition location information. + * read.c (read_makefile): Keep variable definition location info. + (do_define): Ditto. + (record_target_var): Ditto. + * variable.h (define_variable_in_set): New fileinfo argument. + (define_variable, define_variable_loc, define_variable_for_file): + Declare new macros. + + Fix PR/1407: + + * filedef.h (struct file): Rename patvar to pat_variables and make + it just a variable_set_list; we need our own copy of the pattern + variable's variable set list here to avoid overwriting the global + one. + * variable.c (initialize_file_variables): Move the instantiation + of the pat_variables pointer here. Only do the search after we're + done reading the makefiles so we don't search too early. If + there's a pat_variables value, set up the variables next ptr. + * expand.c (variable_expand_for_file): Remove the setup of the + pat_variables info; it's done earlier now to ensure the parent's + pattern variables are set up correctly as well. + +2000-02-03 Paul D. Smith + + * job.c (sh_chars_dos) [WINDOWS32]: Add "&" as a shell + metacharacter for the W32 DOS shell. + Reported by Warren Jones . + +2000-02-02 Paul D. Smith + + Fixes for the OpenVMS port from Hartmut Becker + + * config.h-vms [VMS]: Define LOCALEDIR to something; needed for + the expansion of bindtextdomain() even though it's a no-op. + * vmsfunctions.c (strcmpi): Remove duplicate definition of strcmpi(). + (readdir): Use DB() instead of testing debug_flag. + * dir.c (file_impossible) [VMS]: Search "p" not "name". + * job.c [VMS]: Switch from debug_flag to the new DB macro. Add + some i18n _() macros (even though VMS doesn't yet support it). + + * function.c (patsubst_expand): Change "len" to not be unsigned to + avoid type mismatches. + + * main.c (main): Declare signame_init() if we're going to call it. + +2000-01-29 Eli Zaretskii + + * Makefile.DOS.template: Track changes in Makefile.in + (install-recursive, uninstall-recursive): Add missing targets. + (DESTDIR): Define. + (install-binPROGRAMS, uninstall-binPROGRAMS): Use $(DESTDIR). + + * default.c (default_variables) [__MSDOS__]: Define CXX to gpp. + +2000-01-27 Paul D. Smith + + * gettext.c: Some warning cleanups, and a fix for systems which + don't define HAVE_ALLOCA (the workaround code was included + twice). + +2000-01-26 Paul D. Smith + + * Version 3.78.90 released. + +2000-01-25 Paul D. Smith + + Change gettext support to use the simplified version in libit 0.7. + + * getopt.c, make.h: Use gettext.h instead of libintl.h. + * ABOUT-NLS, gettext.h, gettext.c: New files from libit 0.7. + Modified to remove some static declarations which aren't defined. + * acconfig.h: Use new gettext #defines. + * acinclude.m4: Add fp_WITH_GETTEXT; remove AM_GNU_GETTEXT. + * configure.in: Call fp_WITH_GETTEXT instead. + * Makefile.am: New gettext stuff. Also force inclusion of glob + files for systems which have LIBC glob. + + * i18n/Makefile.am, i18n/.cvsignore: New dir for translation files. + * i18n/de.po, i18n/es.po, i18n/fr.po, i18n/ko.po, i18n/nl.po: + * i18n/pl.po, i18n/ru.po: Import translations already done for + earlier versions of GNU make. Thanks for that work!! + + * po/Makefile.in.in, po/POTFILES.in: Removed. + +2000-01-23 Paul D. Smith + + * main.c (decode_debug_flags): If debug_flag is set, enable all + debugging levels. + (debug_flag): Resurrect this flag variable. + (switches): Make -d give the old behavior of turning on all + debugging. Change --debug alone to emit basic debugging and take + optional arguments to expand debugging. + * NEWS: Document the new debugging options. + + * remake.c (no_rule_error): Remove this function. This tries to + fix a real problem--see the description with the introduction of + this function below. However, the cure is worse than the disease + and this approach won't work. + (remake_file): Put the code from no_rule_error back here. + (update_file_1): Remove call to no_rule_error. + + * filedef.h (struct file): Remove mfile_status field. + +2000-01-22 Paul D. Smith + + Integrate GNU gettext support. + + * configure.in: Add AM_GNU_GETTEXT. + * Makefile.am: Add options for setting LOCALEDIR, -Iintl, etc. + * acinclude.m4: Add gettext autoconf macros. + * acconfig.h: Add new gettext #defines. + * make.h: Include libintl.h. Make sure _() and N_() macros are + declared. Make gettext() an empty macro is NLS is disabled. + * main.c (struct command_switch switches[]): Can't initialize + static data with _() (gettext calls), so use N_() there then use + gettext() directly when printing the strings. + * remake.c (no_rule_error): The string constants can't be static + when initializing _() macros. + * file.c (print_file): Reformat a few strings to work better for + translation. + * po/POTFILES.in, po/Makefile.in.in: New files. Take + Makefile.in.in from the latest GNU tar distribution, as that + version works better than the one that comes with gettext. + * NEWS: Mention i18n ability. + +2000-01-21 Paul D. Smith + + Installed patches for the VMS port. + Patches provided by: Hartmut Becker + + * readme.vms, arscan.c, config.h-vms, default.c, dir.c, file.c: + * implicit.c, job.c, make.h, makefile.com, makefile.vms, rule.c: + * variable.c, vmsdir.h, vmsfunctions.c, vmsify.c, glob/glob.c: + * glob/glob.h: Installed patches. See readme.vms for details. + +2000-01-14 Andreas Schwab + + * dir.c (read_dirstream): Initialize d_type if it exists. + +2000-01-11 Paul D. Smith + + Resolve PR/xxxx: don't automatically evaluate the $(call ...) + function's arguments. While we're here, clean up argument passing + protocol to always use simple nul-terminated strings, instead of + sometimes using offset pointers to mark the end of arguments. + This change also fixes PR/1517. + Reported by Damien GIBOU . + + * function.c (struct function_table_entry): Remove the negative + required_args hack; put in explicit min and max # of arguments. + (function_table): Add in the max value. Turn off the expand bit + for func_call. + (expand_builtin_function): Test against minimum_args instead of + the obsolete required_args. + (handle_function): Rewrite this. We don't try to be fancy and + pass one style of arguments to expanded functions and another + style to non-expanded functions: pass pointers to nul-terminated + strings to all functions. + (func_call): Rewrite this. If we are invoking a builtin function + and it's supposed to have its arguments expanded, do that (since + it's not done by handle_function for $(call ...) anymore). For + non-builtins, just add the variables as before but mark them as + recursive so they'll be expanded later, as needed. + (func_if): All arguments are vanilla nul-terminated strings: + remove trickery with "argv[1]-1". + (func_foreach): Ditto. + + * expand.c (expand_argument): If the second arg is NULL, expand + the entire first argument. + + * job.c (new_job): Zero the child struct. This change was just + made to keep some heap checking software happy, not because there + was an actual bug (the important memory was being cleared properly). + +1999-12-15 Paul D. Smith + + * variable.c (print_variable): Print the variable with += if the + append flag is set. + + * implicit.c (pattern_search): Remove the extra check of the + implicit flag added on 8/24/1998. This causes problems and the + reason for the change was better resolved by the change made to + check_deps() on 1998-08-26. This fixes PR/1423. + +1999-12-08 Paul D. Smith + + * dir.c (dir_setup_glob): On 64 bit ReliantUNIX (5.44 and above) + in LFS mode, stat() is actually a macro for stat64(). Assignment + doesn't work in that case. So, stat is a macro, make a local + wrapper function to invoke it. + (local_stat): Wrapper function, if needed. + Reported by Andrej Borsenkow . + +1999-12-02 Paul D. Smith + + * remake.c (update_file): Move the considered test outside the + double-colon loop, _but_ make sure we test the double_colon target + not the "current" target. If we stop early because one + double-colon target is running, mark all the rest considered and + try to start their prerequisites (so they're marked considered). + Fix for PR/1476 suggested by Tim Magill . + +1999-11-22 Rob Tulloh + + * function.c (windows32_openpipe, func_shell): Correct Windows32 + problem where $(shell nosuchfile) would incorrectly exit make. The + fix is to print the error and let make continue. + Reported by David Masterson . + + * w32/subproc/misc.c (arr2envblk): Memory leak fix. + +1999-11-21 Paul D. Smith + + Rework GNU make debugging to provide different levels of output. + + * NEWS: mention it. + * debug.h: New file. Define various debugging levels and macros. + * function.c, implicit.c, job.c, main.c, misc.c, read.c, remake.c + * remote-cstms.c, vmsfunctions.c: Replace all code depending on + debug_flag with invocations of debugging macros. + * make.h: Remove debug_flag and DEBUGPR, add db_level. + +1999-11-18 Paul Eggert + + * acinclude.m4 (AC_SYS_LARGEFILE_FLAGS): Work around a problem + with the QNX 4.25 shell, which doesn't propagate exit status of + failed commands inside shell assignments. + +1999-11-17 Paul D. Smith + + * function.c (func_if): Find the end of the arg list by testing + the next item for NULL; any other test is not correct. + Reported by Graham Reed (PR/1429). + + Fix += when used in a target-specific variable context. + + * variable.h: New bitfield APPEND set if we have a += + target-specific variable. + + * variable.c (try_variable_definition): Add an argument to specify + if we're trying a target-specific variable. If we are and it's an + append style, don't append it, record it as normal recursive, but + set the APPEND flag so it'll be expanded later. + * main.c (handle_non_switch_argument): Use new + try_variable_definition() signature. + * read.c (read_makefile,record_target_var): Ditto. + + * expand.c (allocated_variable_append): New function: like + allocated_variable_expand(), but we expand the same variable name + in the context of the ``next'' variable set, then we append this + expanded value. + (recursively_expand): Invoke it, if the APPEND bit is set. + +1999-11-10 Paul D. Smith + + * file.c (snap_deps): If the .NOTPARALLEL target is defined, turn + off parallel builds for this make only (still allow submakes to be + run in parallel). + * main.c: New variable, ``not_parallel''. + * make.h: Add an extern for it. + * job.c (new_job): Test NOT_PARALLEL as well as JOB_SLOTS. + * NEWS: Add info on .NOTPARALLEL. + * make.texinfo (Special Targets): Document it. + + * configure.in (GLOBDIR): Set to "glob" if we need to build the + glob library. + * Makefile.am (SUBDIRS): Use the GLOBDIR variable instead of + "glob" so we don't try to build glob if we don't need to (if we + have GLIBC glob). Reported by Lars Hecking . + + * main.c (main): Don't put "***" in the clock skew warning + message. Reported by karl@gnu.org. + + * make.h: Remove unneeded signal setup. + + * signame.c: Remove extraneous #includes; some versions of Ultrix + don't protect against multiple inclusions and it causes compile + errors. Reported by Simon Burge . + +1999-10-15 Paul D. Smith + + * main.c (quote_for_env): Rename from quote_as_word(). + + * make.h, *.c: Prefer strchr() and strrchr() in the code + rather than index() and rindex(). Define strchr/strrchr in terms + of index/rindex if the former aren't supported. + + * default.c (CHECKOUT,v): Replace the fancy, complicated + patsubst/filter expression with a simple $(if ...) expression. + + * main.c (print_usage): Add the bug reporting mailing address to + the --help output, as per the GNU coding standards. + Reported by Paul Eggert . + + * README.customs: Installed information on running Customs-ized + GNU make and setuid root, collected by Ted Stern . + + * read.c (read_all_makefiles): PR/1394: Mark the end of the next + token in the MAKEFILES value string _before_ we dup it. + +1999-10-13 Paul D. Smith + + * configure.in (make_cv_sys_gnu_glob): We used to add the -Iglob + flag to CPPFLAGS, but that loses if the user specifies his own + CPPFLAGS; this one gets added _after_ his and if he happens to + have an old or broken glob.h--boom. Instead, put it in GLOBINC + and SUBST it. + + * Makefile.am (INCLUDES): Add @GLOBINC@ to the INCLUDES macro; + these things get on the compile line well before the user's + CPPFLAGS. + +1999-10-12 Paul D. Smith + + * remake.c (notice_finished_file): If we get here and -n is set, + see if all the command lines are marked recursive. If so, then we + ran every command there is, so check the mtime on this file just + like we would normally. If not, we assume the command we didn't + run would updates the target and set mtime of the target to "very new". + + * job.c (start_job_command): Update lines_flags in the file's cmds + structure with any per-line tokens we found (`@', `-', `+'). + +1999-10-08 Paul D. Smith + + * variable.c (initialize_file_variables): Always recurse to + initialize the parent's file variables: the parent might not have + any rules to run so it might not have been initialized before + this--we need this to set up the chain properly for + target-specific variables. + +1999-09-29 Paul Eggert + + * main.c (quote_as_word): Always quote for decode_env_switches + instead of for the shell, so that arguments with strange + characters are are passed to submakes correctly. Remove + double_dollars arg; we always double dollars now. All callers + changed. + (decode_env_switches): Don't run off the end of an environment + variable whose contents ends in a unescaped backslash. + +1999-09-23 Paul D. Smith + + * commands.c, function.c, job.c, read.c: Cast arguments to + ctype.h functions/macros to _unsigned_ char for portability. + + * remake.c, function.c: Compiler warning fixes: the second + argument to find_next_token() should be an _unsigned_ int*. + Reported by Han-Wen Nienhuys . + +1999-09-23 Paul D. Smith + + * Version 3.78.1 released. + + * make.texinfo: Update version/date stamp. + + * main.c (main): Argh. For some reason we were closing _all_ the + jobserver pipes before we re-exec'd due to changed makefiles. + This means that any re-exec got a "jobserver unavailable" error :-/. + I can't believe we didn't notice this before. + +1999-09-22 Paul D. Smith + + * Version 3.78 released. + + * main.c (main): Only fail on multiple --jobserver-fds options if + they aren't all the same. Some makefiles use things like + $(MAKE) $(MFLAGS) which will cause multiple, identical copies of + --jobserver-fds to show up. + +1999-09-16 Paul D. Smith + + * main.c (define_makeflags): Zero out FLAGSTRING to avoid + uninitialized memory reads when checking *p != '-' in the loop. + +1999-09-15 Paul D. Smith + + * Version 3.77.97 released. + + * configure.in (MAKE_HOST): AC_SUBST this so it will go into the + makefile. + * Makefile.am (check-local): Print a success banner if the check + succeeds. + (check-regression): A bit of fine-tuning. + +1999-09-15 Eli Zaretskii + + * README.DOS.template: Document requirements for the test suite. + * Makefile.DOS.template: Updates to allow the test suite to run + from "make check". + + * main.c (main): Handle it if argv[0] isn't an absolute path. + +1999-09-13 Paul D. Smith + + * Version 3.77.96 released. + + * Makefile.am (loadavg): Use CPPFLAGS, etc. to make sure we get + all the right #defines to compile. + (check-regression): Look for the regression test suite in the make + package itself. If we're building remotely, use symlinks to make + a local copy. + (dist-hook): Put the test suite into the tar file. + + * configure.in: Look for perl for the test suite. + +1999-09-10 Paul Eggert + + * acinclude.m4 (AC_SYS_LARGEFILE_FLAGS): If on HP-UX 10.20 or + later, and using GCC, define __STDC_EXT__; this works around a + bug in GCC 2.95.1. + +1999-09-08 Paul D. Smith + + * main.c (print_version): Ugh. GLIBC's configure tries to check + make version strings and is too aggressive with their matching + expressions. I've struck a deal with them to leave the version + output as-is for 3.78, and they'll change their configure checks + so that I can change this back in the future. + +1999-09-07 Eli Zaretskii + + * job.c (construct_command_argv_internal) [__MSDOS__]: Add "echo" + and "unset" to the list of builtin shell commands. + + * configh.DOS.template (MAKE_HOST): Define to "i386-pc-msdosdjgpp" + which is the canonical name of the DJGPP host. + +1999-09-05 Paul D. Smith + + * Version 3.77.95 released. + + * make.texinfo (Make Errors): Document some new jobserver error + messages. + +1999-09-04 Eli Zaretskii + + * make.texinfo (Make Errors): Document the hint about 8 spaces + instead of a TAB. + (Call Function, Quick Reference): Use @code{$(1)}, not @var. + + * main.c (main) [__MSDOS__]: Say "on this platform" instead of "on + MS-DOS", since the MSDOS version could run on Windows. + +1999-09-03 Paul D. Smith + + * remake.c (notice_finished_file): Always set mtime_before_update + if it's not been set, not just if we ran some rules. Otherwise we + may have a situation where a target's prerequisite was rebuilt but + not changed, so this target's rules weren't run, then + update_goal_chain() sees mtime_before_update != last_mtime and + thinks that the top-level target changed when it really didn't. + This can cause an infinite loop when remaking makefiles. + (update_goal_chain): If we get back to the top and we don't know + what the goal's last_mtime was, find it now. We need to know so + we can compare it to mtime_before_update later (this is only + crucial when remaking makefiles--should we only do it then?) + +1999-09-02 Paul D. Smith + + * read.c (read_makefile): If "override" appears as the first + prerequisite, look further to ensure this is really a + target-specific variable definition, and not just some + prerequisite named "override". + +1999-09-01 Paul D. Smith + + * function.c (IS_PATHSEP) [WINDOWS32]: Allow backslash separators + for W32 platforms. + * read.c (record_files) [WINDOWS32]: Allow backslash separators + for W32 platforms. + * implicit.c (pattern_search) [WINDOWS32]: Allow backslash + separators for W32 platforms. + + * configure.in (MAKE_HOST): Define it to be the canonical build + host info, now that we need AC_CANONICAL_HOST anyway (for large + file support). + * version.c (make_host): Define a variable to MAKE_HOST so we're + sure to get it from the local config.h. + * main.c (print_version): Use it in the version information. + * config.ami.template: Add MAKE_HOST. + * configh.dos.template: Ditto. + * config.h.W32.template: Ditto. + * config.h-vms.template: Ditto. + + * main.c (main): Close the jobserver file descriptors if we need + to re-exec ourselves. + Also print more reasonable error if users force -jN for submakes. + This may be common for a while until people use the jobserver + feature. If it happens, we ignore the existing jobserver stuff + and use whatever they specified on the commandline. + (define_makeflags): Fixed a long-standing bug: if a long name + only option comes immediately after a single letter option with no + argument, then the option string is constructed incorrectly. For + example, with -w and --jobserver-fds you get "-w-jobserver-fds..." + instead of "-w --jobserver-fds..."; add in an extra " -". + + * make.texinfo (Phony Targets): Add another example of using + .PHONY with subdirectories/recursive make. + +1999-08-30 Paul D. Smith + + * README.W32.template: Renamed from README.W32 so it's + autogenerated during the dist. A few minor modifications. + + * configure.in: Check for kstat_open before AC_FUNC_GETLOADAVG + since the latter needs to know whether the former exists to give + an accurate result. + +1999-08-26 Rob Tulloh + + * NMakefile [WINDOWS32]: Now more robust. If you change a file + under w32/subproc, the make.exe will be relinked. Also added some + tests to make sure erase commands won't fail when executed in a + pristine build environment. + + * w32/subproc/sub_proc.c [WINDOWS32]: Added support for + HAVE_CYGWIN_SHELL. If you are using the Cygwin B20.1 release, it + is now possible to have have native support for this shell without + having to rely on klutzy BATCH_MODE_ONLY_SHELL. + + * config.h.W32 [WINDOWS32]: Added HAVE_CYGWIN_SHELL macro which + users can define if they want to build make to use this shell. + + * README.W32 [WINDOWS32]: Added informaton about + HAVE_CYGWIN_SHELL. Cleaned up text a bit to make it more current. + +1999-08-26 Paul Eggert + + Support large files in AIX, HP-UX, and IRIX. + + * acinclude.m4 (AC_LFS): Remove. Superseded by AC_SYS_LARGEFILE. + (AC_SYS_LARGEFILE_FLAGS, AC_SYS_LARGEFILE_SPACE_APPEND, + AC_SYS_LARGEFILE_MACRO_VALUE, AC_SYS_LARGEFILE): New macros. + (jm_AC_TYPE_UINTMAX_T): Check for busted compilers that can't + shift or divide unsigned long long. + (AM_PROG_CC_STDC): New macro; a temporary workaround of a bug in + automake 1.4. + + * configure.in (AC_CANONICAL_HOST): Add; required by new + AC_SYS_LARGEFILE. + (AC_SYS_LARGEFILE): Renamed from AC_LFS. + (AM_PROG_CC_STDC): Add. + + * config.guess, config.sub: New files, needed for AC_CANONICAL_HOST. + +1999-08-25 Paul Eggert + + * make.h (CHAR_MAX): New macro. + * main.c (struct command_switch): c is now int, + so that it can store values greater than CHAR_MAX. + (switches): Replace small numbers N with CHAR_MAX+N-1, + to avoid problems with non-ASCII character sets. + (short_option): New macro. + (init_switches, print_usage, define_makeflags): Use it instead of + isalnum. + +1999-08-25 Paul D. Smith + + * Version 3.77.94 released. + + * main.c (main) [__MSDOS__]: If the user uses -j, warn that it's + not supported and reset it. + + * make.h (ISDIGIT): Obtained this from the textutils distribution. + * main.c (decode_switches): Use it. + * function.c (is_numeric): Use it. + + * main.c (struct command_switch): Store the switch char in an + unsigned char to shut up GCC about using it with ctype.h macros. + Besides, it _is_ always unsigned. + +1999-08-24 Paul D. Smith + + * make.texinfo: Change "dependency" to "prerequisite" and + "dependencies" to "prerequisites". Various other cleanups related + to the terminology change. + * file.c: Change debugging and error messages to use + "prerequisite" instead of "dependency". + * implicit.c: Ditto. + * remake.c: Ditto. + * NEWS: Document it. + +1999-08-23 Paul D. Smith + + * remake.c (update_file): Move the considered check into the + double-colon rule loop, so we consider double-colon rules + individually (otherwise after the first is pruned, the rest won't + get run). + + * README.template: Minor changes. + + Remove the debugging features of the jobserver, so it no longer + writes distinct tokens to the pipe. Thus, we don't need to store + the token we get. A side effect of this is to remove a potential + "unavailable token" situation: make-1 invokes make-2 with its + special token and make-3 with a normal token; make-2 completes. + Now we're waiting for make-3 but using 2 tokens; our special token + is idle. In the new version we don't have special tokens per se, + we merely decide if we already have a child or not. If we don't, + we don't need a token. If we do, we have to get one to run the + next child. Similar for putting tokens back: if we're cleaning up + the last child, we don't put a token back. Otherwise, we do. + + * main.c: Add a new, internal flag --jobserver-fds instead of + overloading the meaning of -j. Remove job_slots_str and add the + stringlist jobserver_fds. + (struct command_switch): We don't need the int_string type. + (switches[]): Add a new option for --jobserver-fds and remove + conditions around -j. Make the description for the former 0 so it + doesn't print during "make --help". + (main): Rework jobserver parsing. If we got --jobserver-fds + make sure it's valid. We only get one and job_slots must be 0. + If we're the toplevel make (-jN without --jobserver-fds) create + the pipe and write generic tokens. + Create the stringlist struct for the submakes. + Clean up the stringlist where necessary. + (init_switches): Remove int_string handling. + (print_usage): Don't print internal flags (description ptr is 0). + (decode_switches): Remove int_string handling. + (define_makeflags): Remove int_string handling. + + * job.c: Remove my_job_token flag and all references to the + child->job_token field. + (free_job_token): Remove this and merge it into free_child(). + (reap_children): Rework the "reaped a child" logic slightly. + Don't call defunct free_job_token anymore. Always call + free_child, even if we're dying. + (free_child): If we're not freeing the only child, put a token + back in the pipe. Then, if we're dying, don't bother to free. + (new_job): If we are using the jobserver, loop checking to see if + a) there are no children or b) we get a token from the pipe. + + * job.h (struct child): Remove the job_token field. + +1999-08-20 Paul D. Smith + + * variable.c (try_variable_definition): Allocate for variable + expansion in f_append with a simple variable: if we're looking at + target-specific variables we don't want to trash the buffer. + Noticed by Reiner Beninga . + +1999-08-16 Eli Zaretskii + + * main.c (main) [__MSDOS__]: Mirror any backslashes in argv[0], to + avoid problems in shell commands that use backslashes as escape + characters. + +1999-08-16 Paul D. Smith + + * Version 3.77.93 released. + +1999-08-13 Paul D. Smith + + Another jobserver algorithm change. We conveniently forgot that + the blocking bit is shared by all users of the pipe, it's not a + per-process setting. Since we have many make processes all + sharing the pipe we can't use the blocking bit as a signal handler + flag. Instead, we'll dup the pipe's read FD and have the SIGCHLD + handler close the dup'd FD. This will cause the read() to fail + with EBADF the next time we invoke it, so we know we need to reap + children. We then re-dup and reap. + + * main.c (main): Define the job_rfd variable to hold the dup'd FD. + Actually dup the read side of the pipe. Don't bother setting the + blocking bit on the file descriptor. + * make.h: Declare the job_rfd variable. + * job.c (child_handler): If the dup'd jobserver pipe is open, + close it and assign -1 to job_rfd to notify the main program that + we got a SIGCHLD. + (start_job_command): Close the dup'd FD before exec'ing children. + Since we open and close this thing so often it doesn't seem + worth it to use the close-on-exec bit. + (new_job): Remove code for testing/setting the blocking bit. + Instead of EAGAIN, test for EBADF. If the dup'd FD has been + closed, re-dup it before we reap children. + + * function.c (func_shell): Be a little more accurate about the + length of the error string to allocate. + + * expand.c (variable_expand_for_file): If there's no filenm info + (say, from a builtin command) then reset reading_file to 0. + +1999-08-09 Paul D. Smith + + * maintMakefile: Use g in sed (s///g) to replace >1 variable per + line. + + * Makefile.DOS.template [__MSDOS__]: Fix mostlyclean-aminfo to + remove the right files. + +1999-08-01 Eli Zaretskii + + * function.c (msdos_openpipe) [__MSDOS__]: *Really* return a FILE + ptr. + +1999-08-01 Paul D. Smith + + New jobserver algorithm to avoid a possible hole where we could + miss SIGCHLDs and get into a deadlock. The original algorithm was + suggested by Roland McGrath with a nice refinement by Paul Eggert. + Many thanks as well to Tim Magill and Howard Chu, who also + provided many viable ideas and critiques. We all had a fun week + dreaming up interesting ways to use and abuse UNIX syscalls :). + + Previously we could miss a SIGCHLD if it happened after we reaped + the children but before we re-entered the blocking read. If this + happened to all makes and/or all children, make would never wake + up. + + We avoid this by having the SIGCHLD handler reset the blocking bit + on the jobserver pipe read FD (normally read does block in this + algorithm). Now if the handler is called between the time we reap + and the time we read(), and there are no tokens available, the + read will merely return with EAGAIN instead of blocking. + + * main.c (main): Set the blocking bit explicitly here. + * job.c (child_handler): If we have a jobserver pipe, set the + non-blocking bit for it. + (start_waiting_job): Move the token stuff back to new_job; if we + do it here then we're not controlling the number of remote jobs + started! + (new_job): Move the check for job slots to _after_ we've created a + child structure. If the read returns without getting a token, set + the blocking bit then try to reap_children. + + * make.h (EINTR_SET): Define to test errno if EINTR is available, + or 0 otherwise. Just some code cleanup. + * arscan.c (ar_member_touch): Use it. + * function.c (func_shell): Use it. + * job.c (reap_children): Use it. + * remake.c (touch_file): Use it. + +1999-07-28 Paul D. Smith + + * make.h: Define _() and N_() macros as passthrough to initiate + NLS support. + * : Add _()/N_() around translatable strings. + +1999-07-27 Paul D. Smith + + * read.c: Make sure make.h comes before other headers. + +1999-07-26 Paul D. Smith + + * make.texinfo (Quick Reference): Update with the new features. + +1999-07-25 Eli Zaretskii + + * remake.c [__MSDOS__]: Don't include variables.h, it's already + included. + + * function.c (msdos_openpipe) [__MSDOS__]: Return FILE ptr. + (func_shell) [__MSDOS__]: Fix the argument list. + + * Makefile.DOS.template: Update from Makefile.in. + + * README.DOS.template: Configure command fixed. + + * configh.dos.template: Update to provide definitions for + uintmax_t, fd_set_size_t, and HAVE_SELECT. + +1999-07-24 Paul D. Smith + + * Version 3.77.91 released. + + * configure.in: Changes to the boostrapping code: if build.sh.in + doesn't exist configure spits an error and generates an empty + build.sh file which causes make to be confused. + * maintMakefile: Don't build README early. + +1999-07-23 Paul D. Smith + + * job.c (my_job_token): This variable controls whether we've + handed our personal token to a subprocess or not. Note we could + probably infer this from the value of job_slots_used, but it's + clearer to just keep it separately. Job_slots_used isn't really + relevant when running the job server. + (free_job_token): New function: free a job token. If we don't + have one, no-op. If we have the personal token, reclaim it. If + we have another token, write it back to the pipe. + (reap_children): Call free_job_token. + (free_child): Call free_job_token. + (start_job_command): Remove duplicate test for '+' in the command. + If we don't appear to be running a recursive make, close the + jobserver filedescriptors. + (start_waiting_job): If our personal token is available, use that + instead of going to the server pipe. + (*): Add the token value to many debugging statements, and print + the child target name in addition to the ptr hex value. + Change the default "no token" value from '\0' to '-' so it looks + better in the output. + + * main.c (main): Install the child_handler with sigaction() + instead of signal() if we have it. On SysV systems, signal() uses + SysV semantics which are a pain. But sigaction() always does what + we want. + (main): If we got job server FDs from the environment, test them + to see if they're open. If not, the parent make closed them + because it didn't think we were a submake. Print a warning and + suggestion to use "+" on the submake invocation, and hard-set to + -j1 for this instance of make. + (main): Change the algorithm for assigning slots to be more + robust. Previously make checked to see if it thought a subprocess + was a submake and if so, didn't give it a token. Since make's + don't consume tokens we could spawn many of makes fighting for a + small number of tokens. Plus this is unreliable because submakes + might not be recognized by the parent (see above) then all the + tokens could be used up by unrecognized makes, and no one could + run. Now every make consumes a token from its parent. However, + the make can also use this token to spawn a child. If the make + wants more than one, it goes to the jobserver pipe. Thus there + will never be more than N makes running for -jN, and N*2 processes + (N makes and their N children). Every make can always run at + least one job, and we'll never deadlock. (Note the closing of the + pipe for non-submakes also solves this, but this is still a better + algorithm.) So! Only put N-1 tokens into the pipe, since the + topmost make keeps one for itself. + + * configure.in: Find sigaction. Disable job server support unless + the system provides it, in addition to either waitpid() or + wait3(). + +1999-07-22 Rob Tulloh + + * arscan.c (ar_member_touch) [WINDOWS32]: The ar_date field is a + string on Windows, not a timestamp. + +1999-07-21 Paul D. Smith + + * Version 3.77.90 released. + + * Makefile.am (AUTOMAKE_OPTIONS): Require automake 1.4. + + * function.c: Rearrange so we don't need to predeclare the + function_table array; K&R C compilers don't like that. + + * acinclude.m4 (AC_FUNC_SELECT): Ouch; this requires an ANSI C + compiler! Change to work with K&R compilers as well. + + * configure.in (AC_OUTPUT): Put build.sh back. I don't know how I + thought it would work this way :-/. We'll have to think of + something else. + * Makefile.am: Remove rule to create build.sh. + + * default.c (default_suffix_rules): Rearrange the default command + lines to conform to POSIX rules (put the filename argument $< + _after_ the OUTPUT_OPTION, not before it). + + * various: Changed !strncmp() calls to strneq() macros. + + * misc.c (sindex): Make slightly more efficient. + + * dir.c (file_impossible): Change savestring(X,strlen(X)) to xstrdup(). + * implicit.c (pattern_search): Ditto. + * main.c (enter_command_line_file): Ditto. + (main): Ditto. + * misc.c (copy_dep_chain): Ditto. + * read.c (read_makefile): Ditto. + (parse_file_seq): Ditto. + (tilde_expand): Ditto. + (multi_glob): Ditto. + * rule.c (install_pattern_rule): Ditto. + * variable.c (define_variable_in_set): Ditto. + (define_automatic_variables): Ditto. + * vpath.c (construct_vpath_list): Ditto. + + * misc.c (xrealloc): Some reallocs are non-standard: work around + them in xrealloc by calling malloc if PTR is NULL. + * main.c (main): Call xrealloc() directly instead of testing for + NULL. + + * function.c (func_sort): Don't try to free NULL; some older, + non-standard versions of free() don't like it. + + * configure.in (--enable-dmalloc): Install some support for using + dmalloc (http://www.dmalloc.com/) with make. Use --enable-dmalloc + with configure to enable it. + + * function.c (function_table_entry): Whoops! The function.c + rewrite breaks backward compatibility: all text to a function is + broken into arguments, and extras are ignored. So $(sort a,b,c) + returns "a"! Etc. Ouch. Fix it by making a positive value in + the REQUIRED_ARGS field mean exactly that many arguments to the + function; any "extras" are considered part of the last argument as + before. A negative value means at least that many, but may be + more: in this case all text is broken on commas. + (handle_function): Stop when we've seen REQUIRED_ARGS args, if >0. + (expand_builtin_function): Compare number of args to the absolute + value of REQUIRED_ARGS. + +1999-07-20 Paul D. Smith + + * job.c (start_job_command): Ensure that the state of the target + is cs_running. It might not be if we skipped all the lines due to + -n (for example). + + * commands.c (execute_file_commands): If we discover that the + command script is empty and succeed early, set cs_running so the + modtime of the target is still rechecked. + + * rule.c (freerule): Free the dependency list for the rule. + + * implicit.c (pattern_search): When turning an intermediate file + into a real target, keep the also_make list. + Free the dep->name if we didn't use it during enter_file(). + +1999-07-16 Paul D. Smith + + * read.c (read_makefile): Don't allocate the commands buffer until + we're sure we found a makefile and won't return early (mem leak). + + * job.c (start_job_command): Broken #ifdef test: look for F_SETFD, + not FD_SETFD. Close-on-exec isn't getting set on the bad_stdin + file descriptor and it's leaking :-/. + * getloadavg.c (getloadavg): Ditto. + +1999-07-15 Paul D. Smith + + * read.c (read_makefile): Fix some potential memory stomps parsing + `define' directives where no variable name is given. + + * function.c (func_call): Rename from func_apply. Various code + cleanup and tightening. + (function_table): Add "call" as a valid builtin function. + + * make.texinfo (Call Function): Document it. + + * NEWS: Announce it. + +1999-07-09 Eli Zaretskii + + * variable.c (try_variable_definition) [__MSDOS__, WINDOWS32]: + Treat "override SHELL=" the same as just "SHELL=". + +1999-07-09 Paul D. Smith + + * job.c (start_waiting_job): Don't get a second job token if we + already have one; if we're waiting on the load to go down + start_waiting_job() might get called twice on the same file. + + * filedef.h (struct file): Add new field, mtime_before_update. + When notice_finished_file runs it assigns the cached last_mtime to + this field. + * remake.c (update_goal_chain): Notice that a file wasn't updated + by asking if it changed (g->changed) and comparing the current + cached time (last_mtime) with the previous one, stored in + mtime_before_update. The previous check ("did last_mtime changed + during the run of update_file?") fails for parallel builds because + last_mtime is set during reap_children, before update_file is run. + This causes update_goal_chain to always return -1 (nothing + rebuilt) when running parallel (-jN). This is OK during "normal" + builds since our caller (main) treats these cases identically in + that case, but if when rebuilding makefiles the difference is very + important, as it controls whether we re-exec or not. + * file.c (file_hash_enter): Copy the mtime_before_update field. + (snap_deps): Initialize mtime_before_update to -1. + * main.c (main): Initialize mtime_before_update on old (-o) and + new (-W) files. + +1999-07-08 Paul D. Smith + + * main.c (switches): Define a new switch -R (or + --no-builtin-variables). This option disables the defining of all + the GNU make builtin variables. + (main): If -R was given, force -r as well. + * default.c (define_default_variables): Test the new flag. + * make.h: Declare global flag. + * make.texinfo (Options Summary): Document the new option. + (Implicit Variables): Ditto. + +1999-07-06 Paul D. Smith + + * make.texinfo (Options Summary): Correct examples in + --print-data-base option summary (problem reported by David Morse + ). + + * arscan.c: Add support for archives in Windows (VC++). Frank + Libbrecht provided info on how to do + this. + * NMakefile.template (CFLAGS_any): Remove NO_ARCHIVES from the + compile line. + * build_w32.bat: Ditto. + + * remake.c (no_rule_error): Fix -include/sinclude so it doesn't + give errors if you try to -include the same file twice. + (updating_makefiles): New variable: we need to know this info in + no_rule_error() so we know whether to print an error or not. + (update_file_1): Unconditionally call no_rule_error(), don't try + to play games with the dontcare flag. + +1999-06-14 Paul D. Smith + + * make.texinfo (Remaking Makefiles): Add a description of how to + prevent implicit rule searches for makefiles. + + * make.1: Remove statement that make continues processing when -v + is given. + +1999-06-14 Paul D. Smith + + * read.c (read_makefile): Cast -1 arguments to + variable_expand_string() to long. Alexandre Sauve + reports that without casts, this breaks + on a NEC SUPER-UX SX-4 system (and it's wrong without a cast + anyway). Of course, (a) I'd really love to start using function + prototypes, and (b) there's a whole slew of issues related to int + vs. long and signed vs. unsigned in the length handling of + variable buffers, etc. Gross. Needs a complete mucking-out. + * expand.c (variable_expand): Ditto. + + * acinclude.m4 (AC_FUNC_SELECT): Slight enhancement for AIX 3.2 by + Lars Hecking . + + * read.c (get_next_mword): Allow colons to be escaped in target + names: fix for regression failure. + +1999-04-26 Paul D. Smith + + * main.c (main): Reset read_makefiles to empty after processing so + we get the right error message. + +1999-04-25 Paul D. Smith + + * make.texinfo: Updates to @dircategory and @direntry suggested by + Karl Berry . + +1999-04-23 Eli Zaretskii + + * job.c (start_job_command) [__MSDOS__]: Call unblock_sigs before + turning off dos_command_running, so child's signals produce the + right effect. + + * commands.c (fatal_error_signal) [__MSDOS__]: Use EXIT_FAILURE + instead of 1. + +1999-04-18 Eli Zaretskii + + * configh.dos.template: Update to recognize that version 2.02 of + DJGPP contains sys_siglist stuff. + +1999-04-14 Paul D. Smith + + * make.texinfo (Options/Recursion): Document the job server. + (Parallel): Tweaks. + +1999-04-13 Paul D. Smith + + Implement a new "job server" feature; the implementation was + suggested by Howard Chu . + + * configure.in (job-server): New disable option for job server + support--it's enabled by default. If it works well this will go + away. + + * NEWS: Summarize the new feature. + + * acconfig.h: New definition MAKE_JOBSERVER if job server support + is enabled. + * config.h-vms.template: Undef MAKE_JOBSERVER for this port. + * config.h.W32.template: Ditto. + * config.ami.template: Ditto. + + * main.c (struct command_switch): Add a new type: int_string. + (switches[]) Use int_string for -j if MAKE_JOBSERVER. + (init_switches): Initialize the new int_string switch type. + (print_usage): New function, extracted from decode_switches(). + (decode_switches): Call it. Decode the new int_string switch type. + (define_makeflags): Add new int_string switch data to MAKEFLAGS. + (job_fds[]) Array to contain the pipe file descriptors. + (main): Parse the job_slots_str option results. If necessary, + create the pipe and seed it with tokens. Set the non-blocking bit + for the read fd. Enable the signal handler for SIGCHLD even if we + have a non-hanging wait; it's needed to interrupt the select() in + job.c:start_waiting_job(). + + * make.h: Declare job_fds[]. + + * job.h (struct child): Add job_token field to store the token for + this job (if any). + + * job.c (reap_children): When a child is fully reaped, release the + token back into the pipe. + (free_child): If the child to be freed still has a token, put it + back. + (new_job): Initialize the job_token member. + (start_waiting_job): For local jobs, if we're using the pipe, get + a token before we check the load, etc. We do this by performing a + non-blocking read in a loop. If the read fails, no token is + available. Do a select on the fd to wait for a token. We need to + re-enable the signal handler for SIGCHLD even if we have a + non-hanging waitpid() or wait3(), so that the signal will + interrupt the select() and we can wake up to reap children. + (child_handler): Re-enable the signal handler. The count is still + kept although it's not needed or used unless you don't have + waitpid() or wait3(). + +1999-04-10 Paul D. Smith + + * main.c (main): Reset the considered bit on all the makefiles if + something failed to update; we need to examine them again if they + appear as normal targets in order to get the proper error message. + +1999-04-09 Paul D. Smith + + Performance enhancement from Tim Magill . + + * remake.c (update_file): If you have large numbers of + dependencies and you run in parallel, make can spend considerable + time each pass through the graph looking at branches it has + already seen. Since we only reap_children() when starting a pass, + not in the middle, if a branch has been seen already in that pass + nothing interesting can happen until the next pass. So, we toggle + a bit saying whether we've seen this target in this pass or not. + (update_goal_chain): Initially set the global considered toggle to + 1, since all targets initialize their boolean to 0. At the end of + each pass, toggle the global considered variable. + * filedef.h (struct file): Per-file considered toggle bit. + * file.c: New global toggle variable considered. + +1999-04-05 Paul D. Smith + + * arscan.c (ar_scan): Added support for ARFZMAG (compressed + archives?) for Digital UNIX C++. Information provided by + Patrick E. Krogel . + (ar_member_touch): Ditto. + +1999-04-03 Paul D. Smith + + * remake.c (f_mtime): If: a) we found a file and b) we didn't + create it and c) it's not marked as an implicit target and d) it + is marked as an intermediate target, then it was so marked due to + an .INTERMEDIATE special target, but it already existed in the + directory. In this case, unset the intermediate flag so we won't + delete it when make is done. It feels like it would be cleaner to + put this check in update_file_1() but I worry it'll get missed... + +1999-04-01 Paul D. Smith + + * job.c (construct_command_argv_internal): Use bcopy() to copy + overlapping strings, rather than strcpy(). ISO C says the latter + is undefined. Found this in a bug report from 1996! Ouch! + +1999-03-31 Paul D. Smith + + * read.c (readline): Ignore carriage returns at the end of the + line, to allow Windows-y CRLF line terminators. + +1999-03-30 Paul D. Smith + + * configure.in: Don't put build.sh here, since build.sh.in doesn't + exist initially. This cause autoreconf and automake to fail when + run on a clean CVS checkout. Instead, we create build.sh in the + Makefile (see below). + + * Makefile.am: Remove BUILT_SOURCES; this is no longer relevant. + Put those files directly into EXTRA_DIST so they're distributed. + Create a local build rule to create build.sh. + Create a local maintainer-clean rule to delete all the funky + maintainers files. + + * maintMakefile: Makefile.in depends on README, since automake + fails if it doesn't exist. Also don't remove glob/Makefile.in + here, as it causes problems. + +1999-03-26 Paul D. Smith + + * configure.in: Substitute GLOBLIB if we need the link the + glob/libglob.a library. + * Makefile.am (make_LDADD): Use the subst variable GLOBLIB so we + don't link the local libglob.a at all if we don't need it. + * build.template: Don't compile glob/*.o unless we want globlib. + * maintMakefile (build.sh.in): Substitute the glob/*.o files + separately. + +1999-03-25 Paul D. Smith + + * make.texinfo: Various typos and additions, pointed out by James + G. Sack . + +1999-03-22 Paul D. Smith + + * make.texinfo (Functions): Add a new section documenting the new + $(error ...) and $(warning ...) functions. Also updated copyright + dates. + * NEWS: Updated for the new functions. + * function.c (func_error): Implement the new $(error ...) and + $(warning ...) functions. + (function_table): Insert new functions into the table. + (func_firstword): Don't call find_next_token() with argv[0] + itself, since that function modifies the pointer. + * function.c: Cleanups and slight changes to the new method of + calling functions. + +1999-03-20 Han-Wen Nienhuys + + * function.c: Rewrite to use one C function per make function, + instead of a huge switch statement. Also allows some cleanup of + multi-architecture issues, and a cleaner API which makes things + like func_apply() simple. + + * function.c (func_apply): Initial implementation. Expand either + a builtin function or a make variable in the context of some + arguments, provided as $1, $2, ... $N. + +1999-03-19 Eli Zaretskii +1999-03-19 Rob Tulloh + + * job.c (construct_command_argv_internal): Don't treat _all_ + backslashes as escapes, only those which really escape a special + character. This allows most normal "\" directory separators to be + treated normally. + +1999-03-05 Paul D. Smith + + * configure.in: Check for a system strdup(). + * misc.c (xstrdup): Created. Suggestion by Han-Wen Nienhuys + . + * make.h: Prototype xstrdup(). + * remake.c (library_search): Use it. + * main.c (main): Use it. + (find_and_set_default_shell): Use it. + * job.c (construct_command_argv_internal): Use it. + * dir.c (find_directory): Use it. + + * Makefile.am, configure.in: Use AC_SUBST_FILE to insert the + maintMakefile instead of "include", to avoid automake 1.4 + incompatibility. + +1999-03-04 Paul D. Smith + + * amiga.c, amiga.h, ar.c, arscan.c, commands.c, commands.h, + * default.c, dep.h, dir.c, expand.c, file.c, filedef.h, function.c, + * implicit.c, job.c, job.h, main.c, make.h, misc.c, read.c, remake.c + * remote-cstms.c, remote-stub.c, rule.h, variable.c, variable.h, + * vpath.c, Makefile.ami, NMakefile.template, build.template, + * makefile.vms: Updated FSF address in the copyright notice. + + * variable.c (try_variable_definition): If we see a conditional + variable and we decide to set it, re-type it as recursive so it + will be expanded properly later. + +1999-02-22 Paul D. Smith + + * NEWS: Mention new .LIBPATTERNS feature. + + * make.texinfo (Libraries/Search): Describe the use and + ramifications of the new .LIBPATTERNS variable. + + * remake.c (library_search): Instead of searching only for the + hardcoded expansion "libX.a" for a library reference "-lX", we + obtain a list of patterns from the .LIBPATTERNS variable and + search those in order. + + * default.c: Added a new default variable .LIBPATTERNS. The + default for UNIX is "lib%.so lib%.a". Amiga and DOS values are + also provided. + + * read.c: Remove bogus HAVE_GLOB_H references; always include + vanilla glob.h. + +1999-02-21 Paul D. Smith + + * function.c (expand_function): Set value to 0 to avoid freeing it. + * variable.c (pop_variable_scope): Free the value of the variable. + (try_variable_definition): For simple variables, use + allocated_variable_expand() to avoid stomping on the variable + buffer when we still need it for other things. + + * arscan.c: Modified to support AIX 4.3 big archives. The changes + are based on information provided by Phil Adams + . + +1999-02-19 Paul D. Smith + + * configure.in: Check to see if the GNU glob library is already + installed on the system. If so, _don't_ add -I./glob to the + compile line. Using the system glob code with the local headers + is very bad mojo! + Rewrite SCCS macros to use more autoconf facilities. + + * Makefile.am: Move -Iglob out of INCLUDES; it'll get added to + CPPFLAGS by configure now. + Automake 1.4 introduced its own "include" feature which conflicts + with the maintMakefile stuff. A hack that seems to work is add a + space before the include :-/. + + * build.template: Move -Iglob out of the compile line; it'll get + added to CPPFLAGS by configure now. + +1999-02-16 Glenn D. Wolf + + * arscan.c (ar_scan) [VMS]: Initialized VMS_member_date before + calling lbr$get_index since if the archive is empty, + VMS_get_member_info won't get called at all, and any leftover date + will be used. This bug shows up if any member of any archive is + made, followed by a dependency check on a different, empty + archive. + +1998-12-13 Martin Zinser + + * config.h-vms [VMS]: Set _POSIX_C_SOURCE. Redefine the getopt + functions so we don't use the broken VMS versions. + * makefile.com [VMS]: Allow debugging. + * dir.c (dir_setup_glob) [VMS]: Don't extern stat() on VMS. + +1998-11-30 Paul D. Smith + + * signame.c (init_sig): Check the sizes of signals being set up to + avoid array overwrites (if the system headers have problems). + +1998-11-17 Paul D. Smith + + * read.c (record_files): Clean up some indentation. + +1998-11-08 Han-Wen Nienhuys + + * rule.c (print_rule_data_base): Fix arguments to fatal() call. + +1998-10-13 Paul D. Smith + + * job.c (start_job_command): If the command list resolves to no + chars at all (e.g.: "foo:;$(empty)") then command_ptr is NULL; + quit early. + +1998-10-12 Andreas Schwab + + * rule.c (print_rule_data_base): Ignore num_pattern_rules if it is + zero. + +1998-10-09 Paul D. Smith + + * read.c (read_makefile): Allow non-empty lines to expand to the + empty string after variable, etc., expansion, and be ignored. + +1998-09-21 Paul D. Smith + + * job.c (construct_command_argv_internal): Only add COMMAND.COM + "@echo off" line for non-UNIXy shells. + +1998-09-09 Paul D. Smith + + * w32/subproc/sub_proc.c: Add in missing HAVE_MKS_SHELL tests. + +1998-09-04 Paul D. Smith + + * read.c (read_makefile): If we hit the "missing separator" error, + check for the common case of 8 spaces instead of a TAB and give an + extra comment to help people out. + +1998-08-29 Paul Eggert + + * configure.in (AC_STRUCT_ST_MTIM_NSEC): + Renamed from AC_STRUCT_ST_MTIM. + + * acinclude.m4 (AC_STRUCT_ST_MTIM_NSEC): Likewise. + Port to UnixWare 2.1.2 and pedantic Solaris 2.6. + + * acconfig.h (ST_MTIM_NSEC): + Renamed from HAVE_ST_MTIM, with a new meaning. + + * filedef.h (FILE_TIMESTAMP_FROM_S_AND_NS): + Use new ST_MTIM_NSEC macro. + +1998-08-26 Paul D. Smith + + * remake.c (check_dep): For any intermediate file, not just + secondary ones, try implicit and default rules if no explicit + rules are given. I'm not sure why this was restricted to + secondary rules in the first place. + +1998-08-24 Paul D. Smith + + * make.texinfo (Special Targets): Update documentation for + .INTERMEDIATE: if used with no dependencies, then it does nothing; + old docs said it marked all targets as intermediate, which it + didn't... and which would be silly :). + + * implicit.c (pattern_search): If we find a dependency in our + internal tables, make sure it's not marked intermediate before + accepting it as a found_file[]. + +1998-08-20 Paul D. Smith + + * ar.c (ar_glob): Use existing alpha_compare() with qsort. + (ar_glob_alphacompare): Remove it. + + Modify Paul Eggert's patch so we don't abandon older systems: + + * configure.in: Warn the user if neither waitpid() nor wait3() is + available. + + * job.c (WAIT_NOHANG): Don't syntax error on ancient hosts. + (child_handler, dead_children): Define these if WAIT_NOHANG is not + available. + (reap_children): Only track the dead_children count if no + WAIT_NOHANG. Otherwise, it's a boolean. + + * main.c (main): Add back signal handler if no WAIT_NOHANG is + available; only use default signal handler if it is. + +1998-08-20 Paul Eggert + + Install a more robust signal handling mechanism for systems which + support it. + + * job.c (WAIT_NOHANG): Define to a syntax error if our host + is truly ancient; this should never happen. + (child_handler, dead_children): Remove. + (reap_children): Don't try to keep separate track of how many + dead children we have, as this is too bug-prone. + Just ask the OS instead. + (vmsHandleChildTerm): Fix typo in error message; don't mention + child_handler. + + * main.c (main): Make sure we're not ignoring SIGCHLD/SIGCLD; + do this early, before we could possibly create a subprocess. + Just use the default behavior; don't have our own handler. + +1998-08-18 Eli Zaretskii + + * read.c (read_makefile) [__MSDOS__, WINDOWS32]: Add code to + recognize library archive members when dealing with drive spec + mess. Discovery and initial fix by George Racz . + +1998-08-18 Paul D. Smith + + * configure.in: Check for stdlib.h explicitly (some hosts have it + but don't have STDC_HEADERS). + * make.h: Use HAVE_STDLIB_H. Clean up some #defines. + * config.ami: Re-compute based on new config.h.in contents. + * config.h-vms: Ditto. + * config.h.W32: Ditto. + * configh.dos: Ditto. + + * dir.c (find_directory) [WINDOWS32]: Windows stat() fails if + directory names end with `\' so strip it. + +1998-08-17 Paul D. Smith + + * make.texinfo: Added copyright year to the printed copy. Removed + the price from the manual. Change the top-level reference to + running make to be "Invoking make" instead of "make Invocation", + to comply with GNU doc standards. + + * make.h (__format__, __printf__): Added support for these in + __attribute__ macro. + (message, error, fatal): Use ... prototype form under __STDC__. + Add __format__ attributes for printf-style functions. + + * configure.in (AC_FUNC_VPRINTF): Check for vprintf()/_doprnt(). + + * misc.c (message, error, fatal): Add preprocessor stuff to enable + creation of variable-argument functions with appropriate + prototypes, that works with ANSI, pre-ANSI, varargs.h, stdarg.h, + v*printf(), _doprnt(), or none of the above. Culled from GNU + fileutils and slightly modified. + (makefile_error, makefile_error): Removed (merged into error() and + fatal(), respectively). + * amiga.c: Use them. + * ar.c: Use them. + * arscan.c: Use them. + * commands.c: Use them. + * expand.c: Use them. + * file.c: Use them. + * function.c: Use them. + * job.c: Use them. + * main.c: Use them. + * misc.c: Use them. + * read.c: Use them. + * remake.c: Use them. + * remote-cstms.c: Use them. + * rule.c: Use them. + * variable.c: Use them. + + * make.h (struct floc): New structure to store file location + information. + * commands.h (struct commands): Use it. + * variable.c (try_variable_definition): Use it. + * commands.c: Use it. + * default.c: Use it. + * file.c: Use it. + * function.c: Use it. + * misc.c: Use it. + * read.c: Use it. + * rule.c: Use it. + +1998-08-16 Paul Eggert + + * filedef.h (FILE_TIMESTAMP_PRINT_LEN_BOUND): Add 10, for nanoseconds. + +1998-08-16 Paul Eggert + + * filedef.h (FLOOR_LOG2_SECONDS_PER_YEAR): New macro. + (FILE_TIMESTAMP_PRINT_LEN_BOUND): Tighten bound, and try to + make it easier to understand. + +1998-08-14 Paul D. Smith + + * read.c (read_makefile): We've already unquoted any colon chars + by the time we're done reading the targets, so arrange for + parse_file_seq() on the target list to not do so again. + +1998-08-05 Paul D. Smith + + * configure.in: Added glob/configure.in data. We'll have the glob + code include the regular make config.h, rather than creating its + own. + + * getloadavg.c (main): Change return type to int. + +1998-08-01 Paul Eggert + + * job.c (reap_children): Ignore unknown children. + +1998-07-31 Paul D. Smith + + * make.h, filedef.h, dep.h, rule.h, commands.h, remake.c: + Add prototypes for functions. Some prototypes needed to be moved + in order to get #include order reasonable. + +1998-07-30 Paul D. Smith + + * make.h: Added MIN/MAX. + * filedef.h: Use them; remove FILE_TIMESTAMP_MIN. + +1998-07-30 Paul Eggert + + Add support for sub-second timestamp resolution on hosts that + support it (just Solaris 2.6, so far). + + * acconfig.h (HAVE_ST_MTIM, uintmax_t): New undefs. + * acinclude.m4 (jm_AC_HEADER_INTTYPES_H, AC_STRUCT_ST_MTIM, + jm_AC_TYPE_UINTMAX_T): New defuns. + * commands.c (delete_target): Convert file timestamp to + seconds before comparing to archive timestamp. Extract mod + time from struct stat using FILE_TIMESTAMP_STAT_MODTIME. + * configure.in (C_STRUCT_ST_MTIM, jm_AC_TYPE_UINTMAX_T): Add. + (AC_CHECK_LIB, AC_CHECK_FUNCS): Add clock_gettime. + * file.c (snap_deps): Use FILE_TIMESTAMP, not time_t. + (file_timestamp_now, file_timestamp_sprintf): New functions. + (print_file): Print file timestamps as FILE_TIMESTAMP, not + time_t. + * filedef.h: Include if available and if HAVE_ST_MTIM. + (FILE_TIMESTAMP, FILE_TIMESTAMP_STAT_MODTIME, FILE_TIMESTAMP_MIN, + FILE_TIMESTAMPS_PER_S, FILE_TIMESTAMP_FROM_S_AND_NS, + FILE_TIMESTAMP_DIV, FILE_TIMESTAMP_MOD, FILE_TIMESTAMP_S, + FILE_TIMESTAMP_NS, FILE_TIMESTAMP_PRINT_LEN_BOUND): New macros. + (file_timestamp_now, file_timestamp_sprintf): New decls. + (struct file.last_mtime, f_mtime, file_mtime_1, NEW_MTIME): + time_t -> FILE_TIMESTAMP. + * implicit.c (pattern_search): Likewise. + * vpath.c (vpath_search, selective_vpath_search): Likewise. + * main.c (main): Likewise. + * remake.c (check_dep, name_mtime, library_search, f_mtime): Likewise. + (f_mtime): Use file_timestamp_now instead of `time'. + Print file timestamp with file_timestamp_sprintf. + * vpath.c (selective_vpath_search): Extract file time stamp from + struct stat with FILE_TIMESTAMP_STAT_MODTIME. + +1998-07-28 Paul D. Smith + + * Version 3.77 released. + + * dosbuild.bat: Change to DOS CRLF line terminators. + + * make-stds.texi: Update from latest version. + + * make.texinfo (Options Summary): Clarify that the -r option + affects only rules, not builtin variables. + +1998-07-27 Paul D. Smith + + * make.h: Make __attribute__ resolve to empty for non-GCC _and_ + for GCC pre-2.5.x. + + * misc.c (log_access): Print UID/GID's as unsigned long int for + maximum portability. + + * job.c (reap_children): Print PIDs as long int for maximum + portability. + +1998-07-24 Eli Zaretskii + + * Makefile.DOS (*_INSTALL, *_UNINSTALL): Replace `true' with `:'. + +1998-07-25 Paul D. Smith + + * Version 3.76.94 released. + +1998-07-23 Paul D. Smith + + * config.h.W32.template: Make sure all the #defines of macros here + have a value (e.g., use ``#define HAVE_STRING_H 1'' instead of + just ``#define HAVE_STRING_H''. Keeps the preprocessor happy in + some contexts. + + * make.h: Remove __attribute__((format...)) stuff; using it with + un-prototyped functions causes older GCC's to fail. + + * Version 3.76.93 released. + +1998-07-22 Paul D. Smith + + * file.c (print_file_data_base): Fix average calculation. + +1998-07-20 Paul D. Smith + + * main.c (die): Postpone the chdir() until after + remove_intermediates() so that intermediate targets with relative + pathnames are removed properly. + +1998-07-17 Paul D. Smith + + * filedef.h (struct file): New flag: did we print an error or not? + + * remake.c (no_rule_error): New function to print error messages, + extraced from remake_file(). + + * remake.c (remake_file): Invoke the new error print function. + (update_file_1): Invoke the error print function if we see that we + already tried this target and it failed, but that an error wasn't + printed for it. This can happen if a file is included with + -include or sinclude and couldn't be built, then later is also + the dependency of another target. Without this change, make just + silently stops :-/. + +1998-07-16 Paul D. Smith + + * make.texinfo: Removed "beta" version designator. + Updated ISBN for the next printing. + +1998-07-13 Paul Eggert + + * acinclude.m4: New AC_LFS macro to determine if special compiler + flags are needed to allow access to large files (e.g., Solaris 2.6). + * configure.in: Invoke it. + +1998-07-08 Eli Zaretskii + + * Makefile.DOS: track changes in Makefile.in. + +1998-07-07 Paul D. Smith + + * remote-cstms.c (start_remote_job): Move gethostbyaddr() to the + top so host is initialized early enough. + + * acinclude.m4: New file. Need some special autoconf macros to + check for network libraries (-lsocket, -lnsl, etc.) when + configuring Customs. + + * configure.in (make_try_customs): Invoke new network libs macro. + +1998-07-06 Paul D. Smith + + * Version 3.76.92 released. + + * README.customs: Added to the distribution. + + * configure.in (make_try_customs): Rewrite to require an installed + Customs library, rather than looking at the build directory. + + * Makefile.am (man_MANS): Install make.1. + * make.1: Renamed from make.man. + + * make.texinfo (Bugs): New mailing list address for GNU make bug + reports. + +1998-07-02 Paul D. Smith + + * Version 3.76.91 released. + + * default.c: Added default rule for new-style RCS master file + storage; ``% :: RCS/%''. + Added default rules for DOS-style C++ files with suffix ".cpp". + They use the new LINK.cpp and COMPILE.cpp macros, which are set by + default to be equal to LINK.cc and COMPILE.cc. + +1998-06-19 Eli Zaretskii + + * job.c (start_job_command): Reset execute_by_shell after an empty + command was skipped. + +1998-06-09 Paul D. Smith + + * main.c (main): Keep track of the temporary filename created when + reading a makefile from stdin (-f-) and attempt to remove it + as soon as we know we're not going to re-exec. If we are, add it + to the exec'd make's cmd line with "-o" so the exec'd make doesn't + try to rebuild it. We still have a hole: if make re-execs then + the temporary file will never be removed. To fix this we'd need + a brand new option that meant "really delete this". + * AUTHORS, getopt.c, getopt1.c, getopt.h, main.c (print_version): + Updated mailing addresses. + +1998-06-08 Paul D. Smith + + * main.c (main): Andreas Luik points out that the + check for makefile :: rules with commands but no dependencies + causing a loop terminates incorrectly. + + * maintMakefile: Make a template for README.DOS to update version + numbers. + +1998-05-30 Andreas Schwab + + * remake.c (update_file_1): Don't free the memory for the + dependency structure when dropping a circular dependency. + +1998-05-30 Eli Zaretskii + + * dir.c (file_exists_p, file_impossible_p, file_impossible) + [__MSDOS__, WINDOWS32]: Retain trailing slash in "d:/", and make + dirname of "d:foo" be "d:". + +1998-05-26 Andreas Schwab + + * read.c (read_makefile): Avoid running past EOS when scanning + file name after `include'. + +1998-05-26 Andreas Schwab + + * make.texinfo (Flavors): Correct description of conditional + assignment, which is not equivalent to ifndef. + (Setting): Likewise. + +1998-05-24 Paul D. Smith + + * arscan.c (ar_name_equal): strncmp() might be implemented as a + macro, so don't put preprocessor conditions inside the arguments + list. + +1998-05-23 Eli Zaretskii + + * read.c (read_makefile) [__MSDOS__, WINDOWS32]: Skip colons in + drive specs when parsing targets, target-specific variables and + static pattern rules. A colon can only be part of drive spec if + it is after the first letter in a token. + +1998-05-22 Eli Zaretskii + + * remake.c (f_mtime) [__MSDOS__]: Allow up to 3 sec of skew before + yelling bloody murder. + + * dosbuild.bat: Use -DINCLUDEDIR= and -DLIBDIR= where appropriate. + + * read.c (parse_file_seq): Combine the special file-handling code + for WINDOWS32 and __MSDOS__ into a single snippet. + (get_next_mword) [__MSDOS__, WINDOWS32]: Allow a word to include a + colon as part of a drive spec. + + * job.c (batch_mode_shell) [__MSDOS__]: Declare. + +1998-05-20 Paul D. Smith + + * Version 3.76.90 released. + +1998-05-19 Paul D. Smith + + * make.texinfo (Make Errors): Added a new appendix describing + common errors make might generate and how to resolve them (or at + least more information on what they mean). + + * maintMakefile (NMAKEFILES): Use the new automake 1.3 feature + to create a dependency file to construct Makefile.DOS, SMakefile, + and NMakefile. + (.dep_segment): Generate the dependency fragment file. + +1998-05-14 Paul D. Smith + + * make.man: Minor changes. + +1998-05-13 Paul D. Smith + + * function.c (pattern_matches,expand_function): Change variables + and types named "word" to something else, to avoid compilation + problems on Cray C90 Unicos. + * variable.h: Modify the function prototype. + +1998-05-11 Rob Tulloh + + * job.c (construct_command_argv_internal) [WINDOWS32]: Turn off + echo when using a batch file, and make sure the command ends in a + newline. + +1998-05-03 Paul D. Smith + + * configure.in (make_try_customs): Add some customs flags if the + user configures custom support. + + * job.c, remote-cstms.c: Merge in changes for custom library. + + * remote-stub.c: Add option to stub start_remote_job_p(). + +1998-05-01 Paul D. Smith + + * remake.c (f_mtime): Install VPATH+ handling for archives; use + the hname field instead of the name field, and rehash when + appropriate. + +1998-04-30 Paul D. Smith + + * rule.c (print_rule_data_base): Print out any pattern-specific + variable values into the rules database. + + * variable.c (print_variable_set): Make this variable extern, to + be called by print_rule_data_base() for pattern-specific variables. + + * make.texinfo (Pattern-specific): Document pattern-specific + variables. + +1998-04-29 Paul D. Smith + + * expand.c (variable_expand_for_file): Make static; its only + called internally. Look up this target in the list of + pattern-specific variables and insert the variable set into the + queue to be searched. + + * filedef.h (struct file): Add a new field to hold the + previously-found pattern-specific variable reference. Add a new + flag to remember whether we already searched for this file. + + * rule.h (struct pattern_var): New structure for storing + pattern-specific variable values. Define new function prototypes. + + * rule.c: New variables pattern_vars and last_pattern_var for + storage and handling of pattern-specific variable values. + (create_pattern_var): Create a new pattern-specific variable value + structure. + (lookup_pattern_var): Try to match a target to one of the + pattern-specific variable values. + +1998-04-22 Paul D. Smith + + * make.texinfo (Target-specific): Document target-specific + variables. + +1998-04-21 Paul D. Smith + + * variable.c (define_variable_in_set): Made globally visible. + (lookup_variable_in_set): New function: like lookup_variable but + look only in a specific variable set. + (target_environment): Use lookup_variable_in_set() to get the + correct export rules for a target-specific variable. + (create_new_variable_set): Create a new variable set, and just + return it without installing it anywhere. + (push_new_variable_scope): Reimplement in terms of + create_new_variable_set. + + * read.c (record_target_var): Like record_files, but instead of + files create a target-specific variable value for each of the + listed targets. Invoked from read_makefile() when the target line + turns out to be a target-specific variable assignment. + +1998-04-19 Paul D. Smith + + * read.c (read_makefile): Rewrite the entire target parsing + section to implement target-specific variables. In particular, we + cannot expand the entire line as soon as it's read in, since we + may want to evaluate parts of it with different variable contexts + active. Instead, start expanding from the beginning until we find + the `:' (or `::'), then determine what kind of line this is and + continue appropriately. + + * read.c (get_next_mword): New function to parse a makefile line + by "words", considering an entire variable or function as one + word. Return the type read in, along with its starting position + and length. + (enum make_word_type): The types of words that are recognized by + get_next_mword(). + + * variable.h (struct variable): Add a flag to specify a per-target + variable. + + * expand.c: Make variable_buffer global. We need this during the + new parsing of the makefile. + (variable_expand_string): New function. Like variable_expand(), + but start at a specific point in the buffer, not the beginning. + (variable_expand): Rewrite to simply call variable_expand_string(). + +1998-04-13 Paul D. Smith + + * remake.c (update_goal_chain): Allow the rebuilding makefiles + step to use parallel jobs. Not sure why this was disabled: + hopefully we won't find out :-/. + +1998-04-11 Paul D. Smith + + * main.c (main): Set the CURDIR makefile variable. + * make.texinfo (Recursion): Document it. + +1998-03-17 Paul D. Smith + + * misc.c (makefile_fatal): If FILE is nil, invoke plain fatal(). + * variable.c (try_variable_definition): Use new feature. + +1998-03-10 Paul D. Smith + + * main.c (main): Don't pass included, rebuilt makefiles to + re-exec'd makes with -o. Reopens a possible loop, but it caused + too many problems. + +1998-03-02 Paul D. Smith + + * variable.c (try_variable_definition): Implement ?=. + * make.texinfo (Setting): Document it. + +1998-02-28 Eli Zaretskii + + * job.c (start_job_command): Reset execute_by_shell after an empty + command, like ":", has been seen. + +Tue Oct 07 15:00:00 1997 Phil Brooks + + * make.h [WINDOWS32]: make case sensitivity configurable + * dir.c [WINDOWS32]: make case sensitivity configurable + * README.W32: Document case sensitivity + * config.ami: Share case warping code with Windows + +Mon Oct 6 18:48:45 CDT 1997 Rob Tulloh + + * w32/subproc/sub_proc.c: Added support for MKS toolkit shell + (turn on HAVE_MKS_SHELL). + * read.c [WINDOWS32]: Fixed a problem with multiple target rules + reported by Gilbert Catipon (gcatipon@tibco.com). If multiple + path tokens in a rule did not have drive letters, make would + incorrectly concatenate the 2 tokens together. + * main.c/variable.c [WINDOWS32]: changed SHELL detection code to + follow what MSDOS did. In addition to watching for SHELL variable + updates, make's main will attempt to default the value of SHELL + before and after makefiles are parsed. + * job.c/job.h [WINDOWS32]: The latest changes made to enable use + of the GNUWIN32 shell from make could cause make to fail due to a + concurrency condition between parent and child processes. Make + now creates a batch file per job instead of trying to reuse the + same singleton batch file. + * job.c/job.h/function.c/config.h.W32 [WINDOWS32]: Renamed macro + from HAVE_CYGNUS_GNUWIN32_TOOLS to BATCH_MODE_ONLY_SHELL. Reworked + logic to reduce complexity. WINDOWS32 now uses the unixy_shell + variable to detect Bourne-shell compatible environments. There is + also a batch_mode_shell variable that determines whether not + command lines should be executed via script files. A WINDOWS32 + system with no sh.exe installed would have unixy_shell set to + FALSE and batch_mode_shell set to TRUE. If you have a unixy shell + that does not behave well when invoking things via 'sh -c xxx', + you may want to turn on BATCH_MODE_ONLY_SHELL and see if things + improve. + * NMakefile: Added /D DEBUG to debug build flags so that unhandled + exceptions could be debugged. + +Mon Oct 6 00:04:25 1997 Rob Tulloh + + * main.c [WINDOWS32]: The function define_variable() does not + handle NULL. Test before calling it to set Path. + * main.c [WINDOWS32]: Search Path again after makefiles have been + parsed to detect sh.exe. + * job.c [WINDOWS32]: Added support for Cygnus GNU WIN32 tools. + To use, turn on HAVE_CYGNUS_GNUWIN32_TOOLS in config.h.W32. + * config.h.W32: Added HAVE_CYGNUS_GNUWIN32_TOOLS macro. + +Sun Oct 5 22:43:59 1997 John W. Eaton + + * glob/glob.c (glob_in_dir) [VMS]: Globbing shouldn't be + case-sensitive. + * job.c (child_execute_job) [VMS]: Use a VMS .com file if the + command contains a newline (e.g. from a define/enddef block). + * vmsify.c (vmsify): Return relative pathnames wherever possible. + * vmsify.c (vmsify): An input string like "../.." returns "[--]". + +Wed Oct 1 15:45:09 1997 Rob Tulloh + + * NMakefile: Changed nmake to $(MAKE). + * subproc.bat: Take the make command name from the command + line. If no command name was given, default to nmake. + * job.c [MSDOS, WINDOWS32]: Fix memory stomp: temporary file names + are now always created in heap memory. + * w32/subproc/sub_proc.c: New implementation of make_command_line() + which is more compatible with different Bourne shell implementations. + Deleted the now obsolete fix_command_line() function. + * main.c [WINDOWS32]: Any arbitrary spelling of Path can be + detected. Make will ensure that the special spelling `Path' is + inserted into the environment when the path variable is propagated + within itself and to make's children. + * main.c [WINDOWS32]: Detection of sh.exe was occurring too + soon. The 2nd check for the existence of sh.exe must come after + the call to read_all_makefiles(). + +Fri Sep 26 01:14:18 1997 + + * makefile.com [VMS]: Fixed definition of sys. + * readme.vms: Comments on what's changed lately. + +Fri Sep 26 01:14:18 1997 John W. Eaton + + * read.c (read_all_makefiles): Allow make to find files named + "MAKEFILE" with no extension on VMS. + * file.c (lookup_file): Lowercase filenames on VMS. + +1997-09-29 Paul D. Smith + + * read.c (read_makefile): Reworked target detection again; the old + version had an obscure quirk. + +Fri Sep 19 09:20:49 1997 Paul D. Smith + + * Version 3.76.1 released. + + * Makefile.am: Add loadavg files to clean rules. + + * configure.in (AC_OUTPUT): Remove stamp-config; no longer needed. + * Makefile.ami (distclean): Ditto. + * SMakefile (distclean): Ditto. + + * main.c (main): Arg count should be int, not char! Major braino. + +Tue Sep 16 10:18:22 1997 Paul D. Smith + + * Version 3.76 released. + +Tue Sep 2 10:07:39 1997 Paul D. Smith + + * function.c (expand_function): When processing $(shell...) + translate a CRLF (\r\n) sequence as well as a newline (\n) to a + space. Also remove an ending \r\n sequence. + * make.texinfo (Shell Function): Document it. + +Fri Aug 29 12:59:06 1997 Rob Tulloh + + * w32/pathstuff.c (convert_Path_to_windows32): Fix problem where + paths which contain single character entries like `.' are not + handled correctly. + + * README.W32: Document path handling issues on Windows systems. + +Fri Aug 29 02:01:27 1997 Paul D. Smith + + * Version 3.75.93. + +Thu Aug 28 19:39:06 1997 Rob Tulloh + + * job.c (exec_command) [WINDOWS32]: If exec_command() is invoked + from main() to re-exec make, the call to execvp() would + incorrectly return control to parent shell before the exec'ed + command could run to completion. I believe this is a feature of + the way that execvp() is implemented on top of WINDOWS32 APIs. To + alleviate the problem, use the supplied process launch function in + the sub_proc library and suspend the parent process until the + child process has run. When the child exits, exit the parent make + with the exit code of the child make. + +Thu Aug 28 17:04:47 1997 Paul D. Smith + + * Makefile.DOS.template (distdir): Fix a line that got wrapped in + email. + + * Makefile.am (loadavg): Give the necessary cmdline options when + linking loadavg. + + * configure.in: Check for pstat_getdynamic for getloadvg on HP. + + * job.c (start_job_command) [VMS, _AMIGA]: Don't perform empty + command optimization on these systems; it doesn't make sense. + +Wed Aug 27 17:09:32 1997 Paul D. Smith + + * Version 3.75.92 + +Tue Aug 26 11:59:15 1997 Paul D. Smith + + * main.c (print_version): Add '97 to copyright years. + + * read.c (do_define): Check the length of the array before looking + at a particular offset. + + * job.c (construct_command_argv_internal): Examine the last byte + of the previous arg, not the byte after that. + +Sat Aug 23 1997 Eli Zaretskii + + * Makefile.DOS.template: New file (converted to Makefile.DOS in + the distribution). + + * configure.bat: Rewrite to use Makefile.DOS instead of editing + Makefile.in. Add support for building from outside of the source + directory. Fail if the environment block is too small. + + * configh.dos: Use . + + * README.DOS: Update instructions. + +Fri Aug 22 1997 Eli Zaretskii + + * job.c (start_job_command) [__MSDOS__]: Don't test for "/bin/sh" + literally, use value of unixy_shell instead. + + * filedef.h (NEW_MTIME): Use 1 less than maximum possible value if + time_t is unsigned. + +Sat Aug 16 00:56:15 1997 John W. Eaton + + * vmsify.c (vmsify, case 11): After translating `..' elements, set + nstate to N_OPEN if there are still more elements to process. + (vmsify, case 2): After translating `foo/bar' up to the slash, + set nstate to N_OPEN, not N_DOT. + +Fri Aug 8 15:18:09 1997 John W. Eaton + + * dir.c (vmsstat_dir): Leave name unmodified on exit. + * make.h (PATH_SEPARATOR_CHAR): Set to comma for VMS. + * vpath.c: Fix comments to refer to path separator, not colon. + (selective_vpath_search): Avoid Unixy slash handling for VMS. + +Thu Aug 7 22:24:03 1997 John W. Eaton + + * ar.c [VMS]: Don't declare ar_member_touch. + Delete VMS version of ar_member_date. + Enable non-VMS versions of ar_member_date and ar_member_date_1 for + VMS too. + * arscan.c (VMS_get_member_info): New function. + (ar_scan): Provide version for VMS systems. + (ar_name_equal): Simply compare name and mem on VMS systems. + Don't define ar_member_pos or ar_member_touch on VMS systems. + + * config.h-vms (pid_t, uid_t): Don't define. + + * remake.c: Delete declaration of vms_stat. + (name_mtime): Don't call vms_stat. + (f_mtime) [VMS]: Funky time value manipulation no longer necessary. + + * file.c (print_file): [VMS] Use ctime, not cvt_time. + + * make.h [VMS]: Don't define POSIX. + + * makefile.com (filelist): Include ar and arscan. + Also include them in the link commands. + Don't define NO_ARCHIVES in cc command. + + * makefile.vms (ARCHIVES, ARCHIVES_SRC): Uncomment. + (defines): Delete NO_ARCHIVES from list. + + * remake.c (f_mtime): Only check to see if intermediate file is + out of date if it also exists (i.e., mtime != (time_t) -1). + + * vmsdir.h (u_long, u_short): Skip typedefs if using DEC C. + +Fri Jun 20 23:02:07 1997 Rob Tulloh + + * w32/subproc/sub_proc.c: Get W32 sub_proc to handle shebang + (#!/bin/sh) in script files correctly. + Fixed a couple of memory leaks. + Fixed search order in find_file() (w32/subproc/sub_proc.c) so that + files with extensions are preferred over files without extensions. + Added search for files with .cmd extension too. + * w32/subproc/misc.c (arr2envblk): Fixed memory leak. + +Mon Aug 18 09:41:08 1997 Paul D. Smith + + * Version 3.75.91 + +Fri Aug 15 13:50:54 1997 Paul D. Smith + + * read.c (do_define): Remember to count the newline after the endef. + +Thu Aug 14 23:14:37 1997 Paul D. Smith + + * many: Rewrote builds to use Automake 1.2. + + * AUTHORS: New file. + * maintMakefile: Contains maintainer-only make snippets. + * GNUmakefile: This now only runs the initial auto* tools. + * COPYING,texinfo.tex,mkinstalldirs,install-sh: Removed (obtained + automatically by automake). + * compatMakefile: Removed (not needed anymore). + * README,build.sh.in: Removed (built from templates). + * config.h.in,Makefile.in: Removed (built by tools). + +Wed Aug 13 02:22:08 1997 Paul D. Smith + + * make.texinfo: Updates for DOS/Windows information (Eli Zaretskii) + * README,README.DOS: Ditto. + + * remake.c (update_file_1,f_mtime): Fix GPATH handling. + * vpath.c (gpath_search): Ditto. + + * file.c (rename_file): New function: rehash, but also rename to + the hashname. + * filedef.h: Declare it. + + * variable.c (merge_variable_set_lists): Remove free() of variable + set; since various files can share variable sets we don't want to + free them here. + +Tue Aug 12 10:51:54 1997 Paul D. Smith + + * configure.in: Require autoconf 2.12 + + * make.texinfo: Replace all "cd subdir; $(MAKE)" examples with a + more stylistically correct "cd subdir && $(MAKE)". + + * main.c: Global variable `clock_skew_detected' defined. + (main): Print final warning if it's set. + * make.h: Declare it. + * remake.c (f_mtime): Test and set it. + + * job.c (start_job_command): Add special optimizations for + "do-nothing" rules, containing just the shell no-op ":". This is + useful for timestamp files and can make a real difference if you + have a lot of them (requested by Fergus Henderson ). + + * configure.in,Makefile.in: Rewrote to use the new autoconf + program_transform_name macro. + + * function.c (function_strip): Strip newlines as well as spaces + and TABs. + +Fri Jun 6 23:41:04 1997 Rob Tulloh + + * remake.c (f_mtime): Datestamps on FAT-based files are rounded to + even seconds when stored, so if the date check fails on WINDOWS32 + systems, see if this "off-by-one" error is the problem. + + * General: If your TZ environment variable is not set correctly + then all your timestamps will be off by hours. So, set it! + +Mon Apr 7 02:06:22 1997 Paul D. Smith + + * Version 3.75.1 + + * compatMakefile (objs): Define & use the $(GLOB) variable so + that it's removed correctly from build.sh.in when it's built. + + * configure.in: On Solaris we can use the kstat_*() functions to + get load averages without needing special permissions. Add a + check for -lkstat to see if we have it. + + * getloadavg.c (getloadavg): Use HAVE_LIBKSTAT instead of SUN5 as + the test to enable kstat_open(), etc. processing. + +Fri Apr 4 20:21:18 1997 Eli Zaretskii + + * : Fixes to work in the DJGPP DOS environment. + +Mon Mar 31 02:42:52 1997 Paul D. Smith + + * function.c (expand_function): Added new function $(wordlist). + + * make.texinfo (Filename Functions): Document $(wordlist) function. + + * vpath.c (build_vpath_lists): Construct the GPATH variable + information in the same manner we used to construct VPATH. + (gpath_search): New function to search GPATH. + + * make.h: Declare the new function. + + * remake.c (update_file_1): Call it, and keep VPATH if it's found. + + * make.texinfo (Search Algorithm): Document GPATH variable. + +Sun Mar 30 20:57:16 1997 Paul D. Smith + + * main.c (handle_non_switch_argument): Defined the MAKECMDGOALS + variable to contain the user options passed in on the cmd line. + + * make.texinfo (Goals): Document MAKECMDGOALS variable. + + * remake.c (f_mtime): Print a warning if we detect a clock skew + error, rather than failing. + + * main.c (main): If we rebuild any makefiles and need to re-exec, + add "-o" options for each makefile rebuilt to avoid + infinite looping. + +Fri Mar 28 15:26:05 1997 Paul D. Smith + + * job.c (construct_command_argv_internal): Track whether the last + arg in the cmd string was empty or not (Roland). + (construct_command_argv_internal): If the shell line is empty, + don't do anything (Roland). + + * glob/glob.h,glob/glob.c,glob/fnmatch.c,glob/fnmatch.h: Install + the latest changes from the GLIBC version of glob (Ulrich Drepper). + + * getloadavg.c,make-stds.texi: New version (Roland). + + * (ALL): Changed WIN32 to W32 or WINDOWS32 (RMS). + +Mon Mar 24 15:33:34 1997 Rob Tulloh + + * README.W32: Describe preliminary FAT support. + + * build_w32.bat: Use a variable for the final exe name. + + * dir.c (find_directory): W32: Find the filesystem type. + (dir_contents_file_exists_p): W32: for FAT filesystems, always + rehash since FAT doesn't change directory mtime on change. + + * main.c (handle_runtime_exceptions): W32: Add an + UnhandledExceptionFilter so that when make bombs due to ^C or a + bug, it won't cause a GUI requestor to pop up unless debug is + turned on. + (main): Call it. + +Mon Mar 24 00:57:34 1997 Paul D. Smith + + * configure.in, config.h.in, config.ami, config.h-vms, config.h.w32: + Check for memmove() function. + + * make.h (bcopy): If memmove() available, define bcopy() to use it. + Otherwise just use bcopy(). Don't use memcpy(); it's not guaranteed + to handle overlapping moves. + + * read.c (read_makefile): Fix some uninitialized memory reads + (reported by Purify). + + * job.c (construct_command_argv_internal): Use bcopy() not + strcpy(); strcpy() isn't guaranteed to handle overlapping moves. + + * Makefile.in: Change install-info option ``--infodir'' to + ``--info-dir'' for use with new texinfo. + + * function.c (expand_function): $(basename) and $(suffix) should + only search for suffixes as far back as the last directory (e.g., + only the final filename in the path). + +Sun Mar 23 00:13:05 1997 Paul D. Smith + + * make.texinfo: Add @dircategory/@direntry information. + (Top): Remove previous reference to (dir) (from RMS). + (Static Usage): Add "all:" rule to example. + (Automatic Dependencies): fix .d file creation example. + + * Install VPATH+ patch: + + * filedef.h (struct file): Add in hname field to store the hashed + filename, and a flag to remember if we're using the vpath filename + or not. Renamed a few functions for more clarity. + + * file.c (lookup_file,enter_file,file_hash_enter): Store filenames + in the hash table based on their "hash name". We can change this + while keeping the original target in "name". + (rehash_file): Renamed from "rename_file" to be more accurate. + Changes the hash name, but not the target name. + + * remake.c (update_file_1): Modify -d output for more detailed + VPATH info. If we don't need to rebuild, use the VPATH name. + (f_mtime): Don't search for vpath if we're ignoring it. Call + renamed function rehash_file. Call name_mtime instead of + file_mtime, to avoid infinite recursion since the file wasn't + actually renamed. + + * implicit.c (pattern_search): if we find an implicit file in + VPATH, save the original name not the VPATH name. + + * make.texinfo (Directory Search): Add a section on the new VPATH + functionality. + +Sun Dec 1 18:36:04 1996 Andreas Schwab + + * dir.c (file_exists_p, file_impossible, file_impossible_p): If + dirname is empty replace it by the name of the root directory. + Note that this doesn't work (yet) for W32, Amiga, or VMS. + +Tue Oct 08 13:57:03 1996 Rob Tulloh + + * main.c (main): W32 bug fix for PATH vars. + +Tue Sep 17 1996 Paul Eggert + + * filedef.h (NEW_MTIME): Don't assume that time_t is a signed + 32-bit quantity. + + * make.h: (CHAR_BIT, INTEGER_TYPE_SIGNED, INTEGER_TYPE_MAXIMUM, + INTEGER_TYPE_MINIMUM): New macros. + +Tue Aug 27 01:06:34 1996 Roland McGrath + + * Version 3.75 released. + + * main.c (print_version): Print out bug-reporting address. + +Mon Aug 26 19:55:47 1996 Roland McGrath + + * main.c (print_data_base): Don't declare ctime; headers do it for us + already. + +Sun Jul 28 15:37:09 1996 Rob Tulloh (tulloh@tivoli.com) + + * w32/pathstuff.c: Turned convert_vpath_to_w32() into a + real function. This was done so that VPATH could contain + white space separated pathnames. Please note that directory + paths (in VPATH/vpath context) containing white space are not + supported (just as they are not under Unix). See README.W32 + for suggestions. + + * w32/include/pathstuff.h: Added prototype for the new + function convert_vpath_to_w32. Deleted macro for same. + + * README.W32: Added some notes about why I chose not to try + and support pathnames which contain white space and some + workaround suggestions. + +Thu Jul 25 19:53:31 1996 Roland McGrath + + * GNUmakefile (mkdep-nolib): Use -MM option unconditionally. + + * Version 3.74.7. + + * main.c (define_makeflags): Back up P to point at null terminator + when killing final space and dash before setting MFLAGS. + + From Robert Hoehne : + * dir.c [__MSDOS__ && DJGPP > 1]: Include and defin + `__opendir_flags' initialized to 0. + (dosify) [__MSDOS__ && DJGPP > 1]: Return name unchanged if _USE_LFN. + (find_directory) [__MSDOS__ && DJGPP > 1]: If _USE_LGN, set + __opendir_flags to __OPENDIR_PRESERVE_CASE. + + * vmsfunctions.c (vms_stat): `sys$dassgn (DevChan);' added by kkaempf. + + * GNUmakefile (w32files): Add NMakefile. + + * NMakefile (LDFLAGS_debug): Value fixed by tulloh. + +Sat Jul 20 12:32:10 1996 Klaus Kämpf (kkaempf@progis.de) + + * remake.c (f_mtime) [VMS]: Add missing `if' conditional for future + modtime check. + * config.h-vms, makefile.vms, readme.vms, vmsify.c: Update address. + +Sat Jul 20 05:29:43 1996 Roland McGrath + + * configure.in: Require autoconf 2.10 or later. + +Fri Jul 19 16:57:27 1996 Roland McGrath + + * Version 3.74.6. + + * GNUmakefile (w32files): New variable. + (distfiles): Add it. + * w32: Updated by Rob Tulloh. + + * makefile.vms (LOADLIBES): Fix typo. + +Sun Jul 14 12:59:27 1996 Roland McGrath + + * job.c (construct_command_argv_internal): Fix up #else, #endifs. + + * configh.dos: Define HAVE_DIRENT_H instead of DIRENT. + + * remake.c (f_mtime): Don't compare MTIME to NOW if MTIME == -1. + + * Version 3.74.5. + + * main.c (main): Exit with status 2 when update_goal_chain returns 2. + +Sat Jun 22 14:56:05 1996 Roland McGrath + + * configure.in: Don't check for _sys_siglist. + * make.h [HAVE__SYS_SIGLIST]: Don't test this; just punt if there is + no strsignal or sys_siglist. + + * read.c (conditional_line): Strip ws in `ifeq (a , b)' so it is the + same as `ifeq (a, b)'. + + * job.c (reap_children): Don't call die if handling_fatal_signal. + + * file.c (file_hash_enter): Allow renaming :: to : when latter is + non-target, or : to :: when former is non-target. + + * job.c (start_job_command): Call block_sigs. + (block_sigs): New function, broken out of start_job_command. + (reap_children): Block fatal signals around removing dead child from + chain and adjusting job_slots_used. + * job.h: Declare block_sigs. + + * remote-stub.c (remote_setup, remote_cleanup): New (empty) functions. + * main.c (main): Call remote_setup. + (die): Call remote_cleanup. + + * job.c (reap_children): Quiescent value of shell_function_pid is + zero, not -1. + + * main.c (print_version): Add 96 to copyright years. + +Sat Jun 15 20:30:01 1996 Andreas Schwab + + * read.c (find_char_unquote): Avoid calling strlen on every call + just to throw away the value most of the time. + +Sun Jun 2 12:24:01 1996 Roland McGrath + + * main.c (decode_env_switches): Prepend '-' to ARGV[1] if it contains + no '=', regardless of ARGC. + (define_makeflags): Elide leading '-' from MAKEFLAGS value if first + word is short option, regardless of WORDS. + +Wed May 22 17:24:51 1996 Roland McGrath + + * makefile.vms: Set LOADLIBES. + * makefile.com (link_using_library): Fix typo. + +Wed May 15 17:37:26 1996 Roland McGrath + + * dir.c (print_dir_data_base): Use %ld dev and ino and cast them to + long. + +Wed May 15 10:14:14 CDT 1996 Rob Tulloh + + * dir.c: W32 does not support inode. For now, fully qualified + pathname along with st_mtime will be keys for files. + Fixed problem where vpath can be confused when files + are added to a directory after the directory has already been + read in. The code now attempts to reread the directory if it + discovers that the datestamp on the directory has changed since + it was cached by make. This problem only seems to occur on W32 + right now so it is lumped under port #ifdef WINDOWS32. + + * function.c: W32: call subproc library (CreateProcess()) instead of + fork/exec. + + * job.c: W32: Added the code to do fork/exec/waitpid style processing + on W32 systems via calls to subproc library. + + * main.c: W32: Several things added here. First, there is code + for dealing with PATH and SHELL defaults. Make tries to figure + out if the user has %PATH% set in the environment and sets it to + %Path% if it is not set already. Make also looks to see if sh.exe + is anywhere to be found. Code path through job.c will change + based on existence of a working Bourne shell. The checking for + default shell is done twice: once before makefiles are read in + and again after. Fall back to MSDOS style execution mode if no sh.exe + is found. Also added some debug support that allows user to pause make + with -D switch and attach a debugger. This is especially useful for + debugging recursive calls to make where problems appear only in the + sub-make. + + * make.h: W32: A few macros and header files for W32 support. + + * misc.c: W32: Added a function end_of_token_w32() to assist + in parsing code in read.c. + + * read.c: W32: Fixes similar to MSDOS which allow colon to + appear in filenames. Use of colon in filenames would otherwise + confuse make. + + * remake.c: W32: Added include of io.h to eliminate compiler + warnings. Added some code to default LIBDIR if it is not set + on W32. + + * variable.c: W32: Added support for detecting Path/PATH + and converting them to semicolon separated lists for make's + internal use. New function sync_Path_environment() + which is called in job.c and function.c before creating a new + process. Caller must set Path in environment since we don't + have fork() to do this for us. + + * vpath.c: W32: Added detection for filenames containing + forward or backward slashes. + + * NMakefile: W32: Visual C compatible makefile for use with nmake. + Use this to build GNU make the first time on Windows NT or Windows 95. + + * README.W32: W32: Contains some helpful notes. + + * build_w32.bat: W32: If you don't like nmake, use this the first + time you build GNU make on Windows NT or Windows 95. + + * config.h.W32: W32 version of config.h + + * subproc.bat: W32: A bat file used to build the + subproc library from the top-level NMakefile. Needed because + WIndows 95 (nmake) doesn't allow you to cd in a make rule. + + * w32/include/dirent.h + * w32/compat/dirent.c: W32: opendir, readdir, closedir, etc. + + * w32/include/pathstuff.h: W32: used by files needed functions + defined in pathstuff.c (prototypes). + + * w32/include/sub_proc.h: W32: prototypes for subproc.lib functions. + + * w32/include/w32err.h: W32: prototypes for w32err.c. + + * w32/pathstuff.c: W32: File and Path/Path conversion functions. + + * w32/subproc/build.bat: W32: build script for subproc library + if you don't wish to use nmake. + + * w32/subproc/NMakefile: W32: Visual C compatible makefile for use + with nmake. Used to build subproc library. + + * w32/subproc/misc.c: W32: subproc library support code + * w32/subproc/proc.h: W32: subproc library support code + * w32/subproc/sub_proc.c: W32: subproc library source code + * w32/subproc/w32err.c: W32: subproc library support code + +Mon May 13 14:37:42 1996 Roland McGrath + + * Version 3.74.4. + + * GNUmakefile (vmsfiles): Fix typo. + + * GNUmakefile (amigafiles): Add amiga.h. + +Sun May 12 19:19:43 1996 Aaron Digulla + + * dir.c: New function: amigafy() to fold filenames + Changes HASH() to HASHI() to fold filenames on Amiga. + Stringcompares use strieq() instead of streq() + The current directory on Amiga is "" instead of "." + * file.c: Likewise. + + * amiga.c: New function wildcard_expansion(). Allows to use + Amiga wildcards with $(wildcard ) + + * amiga.h: New file. Prototypes for amiga.c + + * function.c: Use special function wildcard_expansion() for + $(wildcard ) to allow Amiga wildcards + The current directory on Amiga is "" instead of "." + + * job.c: No Pipes on Amiga, too + (load_too_high) Neither on Amiga + ENV variable on Amiga are in a special directory and are not + passed as third argument to main(). + + * job.h: No envp on Amiga + + * make.h: Added HASHI(). This is the same as HASH() but converts + it's second parameter to lowercase on Amiga to fold filenames. + + * main.c: (main), variable.c Changed handling of ENV-vars. Make + stores now the names of the variables only and reads their contents + when they are accessed to reflect that these variables are really + global (ie. they CAN change WHILE make runs !) This handling is + made in lookup_variable() + + * Makefile.ami: renamed file.h to filedep.h + Updated dependencies + + * read.c: "find_semicolon" is declared as static but never defined. + No difference between Makefile and makefile on Amiga; added + SMakefile to *default_makefiles[]. + (read_makefile) SAS/C want's two_colon and pattern_percent be set + before use. + The current directory on Amiga is "" instead of "." + Strange #endif moved. + + * README.Amiga: updated feature list + + * SMakefile: Updated dependencies + + * variable.c: Handling of ENV variable happens inside lookup_variable() + +Sat May 11 17:58:32 1996 Roland McGrath + + * variable.c (try_variable_definition): Count parens in lhs variable + refs to avoid seeing =/:=/+= inside a ref. + +Thu May 9 13:54:49 1996 Roland McGrath + + * commands.c (fatal_error_signal) [SIGQUIT]: Make SIGQUIT check + conditional. + + * main.c (main): Use unsigned for fread return. + + * read.c (parse_file_seq): Use `int' for char arg to avoid widening + conflict issues. + * dep.h: Fix prototype. + + * function.c (expand_function) [_AMIGA]: Fix some typos. + (patsubst_expand): Make len vars unsigned. + + * GNUmakefile (globfiles): Add AmigaDOS support files. + (distfiles): Add $(amigafiles). + (amigafiles): New variable. + +Thu Nov 7 10:18:16 1995 Aaron Digulla + + * Added Amiga support in commands.c, dir.c, function.c, + job.c, main.c, make.h, read.c, remake.c + * commands.c: Amiga has neither SIGHUP nor SIGQUIT + * dir.c: Amiga has filenames with Upper- and Lowercase, + but "FileName" is the same as "filename". Added strieq() + which is use to compare filenames. This is like streq() + on all other systems. Also there is no such thing as + "." under AmigaDOS. + * function.c: On Amiga, the environment is not passed as envp, + there are no pipes and Amiga can't fork. Use my own function + to create a new child. + * job.c: default_shell is "" (The system automatically chooses + a shell for me). Have to use the same workaround as MSDOS for + running batch commands. Added HAVE_SYS_PARAM_H. NOFILE isn't + known on Amiga. Cloned code to run children from MSDOS. Own + version of sh_chars[] and sh_cmds[]. No dup2() or dup() on Amiga. + * main.c: Force stack to 20000 bytes. Read environment from ENV: + device. On Amiga, exec_command() does return, so I exit() + afterwards. + * make.h: Added strieq() to compare filenames. + * read.c: Amiga needs special extension to have passwd. Only + one include-dir. "Makefile" and "makefile" are the same. + Added "SMakefile". Added special code to handle device names (xxx:) + and "./" in rules. + * remake.c: Only one lib-dir. Amiga link-libs are named "%s.lib" + instead of "lib%s.a". + * main.c, rule.c, variable.c: Avoid floats at all costs. + * vpath.c: Get rid of as many alloca()s as possible. + +Thu May 9 13:20:43 1996 Roland McGrath + + * read.c (read_makefile): Grok `sinclude' as alias for `-include'. + +Wed Mar 20 09:52:27 1996 Roland McGrath + + * GNUmakefile (vmsfiles): New variable. + (distfiles): Include $(vmsfiles). + +Tue Mar 19 20:21:34 1996 Roland McGrath + + Merged VMS port from Klaus Kaempf . + * make.h (PARAMS): New macro. + * config.h-vms: New file. + * makefile.com: New file. + * makefile.vms: New file. + * readme.vms: New file. + * vmsdir.h: New file. + * vmsfunctions.c: New file. + * vmsify.c: New file. + * file.h: Renamed to filedef.h to avoid conflict with VMS system hdr. + * ar.c: Added prototypes and changes for VMS. + * commands.c: Likewise. + * commands.h: Likewise. + * default.c: Likewise. + * dep.h: Likewise. + * dir.c: Likewise. + * expand.c: Likewise. + * file.c: Likewise. + * function.c: Likewise. + * implicit.c: Likewise. + * job.c: Likewise. + * job.h: Likewise. + * main.c: Likewise. + * make.h: Likewise. + * misc.c: Likewise. + * read.c: Likewise. + * remake.c: Likewise. + * remote-stub.c: Likewise. + * rule.c: Likewise. + * rule.h: Likewise. + * variable.c: Likewise. + * variable.h: Likewise. + * vpath.c: Likewise. + * compatMakefile (srcs): Rename file.h to filedef.h. + +Sat Aug 19 23:11:00 1995 Richard Stallman + + * remake.c (check_dep): For a secondary file, try implicit and + default rules if appropriate. + +Wed Aug 2 04:29:42 1995 Richard Stallman + + * remake.c (check_dep): If an intermediate file exists, + do consider its actual date. + +Sun Jul 30 00:49:53 1995 Richard Stallman + + * file.h (struct file): New field `secondary'. + * file.c (snap_deps): Check for .INTERMEDIATE and .SECONDARY. + (remove_intermediates): Don't delete .SECONDARY files. + +Sat Mar 2 16:26:52 1996 Roland McGrath + + * compatMakefile (srcs): Add getopt.h; prepend $(srcdir)/ to getopt*. + +Fri Mar 1 12:04:47 1996 Roland McGrath + + * Version 3.74.3. + + * remake.c (f_mtime): Move future modtime check before FILE is + clobbered by :: loop. + + * dir.c: Use canonical code from autoconf manual for dirent include. + [_D_NAMLEN]: Redefine NAMLEN using this. + (dir_contents_file_exists_p): Use NAMLEN macro. + (read_dirstream) [_DIRENT_HAVE_D_NAMLEN]: Only set d_namlen #if this. + + * compatMakefile (objs): Add missing backslash. + +Wed Feb 28 03:56:20 1996 Roland McGrath + + * default.c (default_terminal_rules): Remove + prefix from RCS cmds. + (default_variables): Put + prefix in $(CHECKOUT,v) value instead. + + * remake.c (f_mtime): Check for future timestamps; give error and mark + file as "failed to update". + +Fri Jan 12 18:09:36 1996 Roland McGrath + + * job.c: Don't declare unblock_sigs; job.h already does. + +Sat Jan 6 16:24:44 1996 Roland McGrath + + * acconfig.h (HAVE_SYSCONF_OPEN_MAX): #undef removed. + + * job.c (NGROUPS_MAX): Don't try to define this macro. + +Fri Dec 22 18:44:44 1995 Roland McGrath + + * compatMakefile (GETOPT, GETOPT_SRC, GLOB): Variables removed. + (objs, srcs): Include their values here instead of references. + +Thu Dec 14 06:21:29 1995 Roland McGrath + + * Version 3.74.2. + + * job.c (reap_children): Call unblock_sigs after start_job_command. + +Thu Dec 14 07:22:03 1995 Roland McGrath + + * dir.c (dir_setup_glob): Don't use lstat; glob never calls it anyway. + Avoid & before function names to silence bogus sunos4 compiler. + + * configure.in: Remove check for `sysconf (_SC_OPEN_MAX)'. + +Tue Dec 12 00:48:42 1995 Roland McGrath + + * Version 3.74.1. + + * dir.c (read_dirstream): Fix braino: fill in the buffer when not + reallocating it! + +Mon Dec 11 22:26:15 1995 Roland McGrath + + * misc.c (collapse_continuations): Fix skipping of trailing \s so + it can never dereference before the beginning of the array. + + * read.c (find_semicolon): Function removed. + (read_makefile): Don't use find_semicolon or remove_comments for + rule lines. Use find_char_unquote directly and handle quoted comments + properly. + + * default.c: Remove all [M_XENIX] code. + + * dir.c [HAVE_D_NAMLEN]: Define this for __GNU_LIBRARY__ > 1. + (D_NAMLEN): Macro removed. + (FAKE_DIR_ENTRY): New macro. + (dir_contents_file_exists_p): Test HAVE_D_NAMLEN instead of using + D_NAMLEN. + (read_dirstream): Return a struct dirent * for new glob interface. + (init_dir): Function removed. + (dir_setup_glob): New function. + * main.c (main): Don't call init_dir. + * read.c (multi_glob): Call dir_setup_glob on our glob_t and use + GLOB_ALTDIRFUNC flag. + + * misc.c (safe_stat): Function removed. + * read.c, commands.c, remake.c, vpath.c: Use plain stat instead of + safe_stat. + +Sat Nov 25 20:35:18 1995 Roland McGrath + + * job.c [HAVE_UNION_WAIT]: Include sys/wait.h. + + * main.c (log_working_directory): Made global. + Print entering msg only once. + * make.h (log_working_directory): Declare it. + * misc.c (message): Take new arg PREFIX. Print "make: " only if + nonzero. Call log_working_directory. + * remake.c: Pass new arg in `message' calls. + * job.c (start_job_command): Pass new arg to `message'; fix + inverted test in that call. + +Tue Nov 21 19:01:12 1995 Roland McGrath + + * job.c (start_job_command): Use `message' to print the command, + and call it with null if the command is silent. + * remake.c (touch_file): Use message instead of printf. + +Tue Oct 10 14:59:30 1995 Roland McGrath + + * main.c (enter_command_line_file): Barf if NAME is "". + +Sat Sep 9 06:33:20 1995 Roland McGrath + + * commands.c (delete_target): Ignore unlink failure if it is ENOENT. + +Thu Aug 17 15:08:57 1995 Roland McGrath + + * configure.in: Don't check for getdtablesize. + * job.c (getdtablesize): Remove decls and macros. + +Thu Aug 10 19:10:03 1995 Roland McGrath + + * main.c (define_makeflags): Omit command line variable + definitions from MFLAGS value. + + * arscan.c (ar_scan) [AIAMAG]: Check for zero MEMBER_OFFSET, + indicating a valid, but empty, archive. + +Mon Aug 7 15:40:03 1995 Roland McGrath + + * dir.c (file_impossible_p): Correctly reset FILENAME to name + within directory before hash search. + + * job.c (child_error): Do nothing if IGNORED under -s. + + * job.c (exec_command): Correctly use ARGV[0] for script name when + running shell directly. + +Tue Aug 1 14:39:14 1995 Roland McGrath + + * job.c (child_execute_job): Close STDIN_FD and STDOUT_FD after + dup'ing from them. Don't try to close all excess descriptors; + getdtablesize might return a huge value. Any open descriptors in + the parent should have FD_CLOEXEC set. + (start_job_command): Set FD_CLOEXEC flag on BAD_STDIN descriptor. + +Tue Jun 20 03:47:15 1995 Roland McGrath + + * read.c (read_all_makefiles): Properly append default makefiles + to the end of the `read_makefiles' chain. + +Fri May 19 16:36:32 1995 Roland McGrath + + * Version 3.74 released. + +Wed May 10 17:43:34 1995 Roland McGrath + + * Version 3.73.3. + +Tue May 9 17:15:23 1995 Roland McGrath + + * compatMakefile ($(infodir)/make.info): Make sure $$dir is set in + install-info cmd. + +Wed May 3 15:56:06 1995 Roland McGrath + + * file.c (print_file): Grok update_status of 1 for -q. + +Thu Apr 27 12:39:35 1995 Roland McGrath + + * Version 3.73.2. + +Wed Apr 26 17:15:57 1995 Roland McGrath + + * file.c (remove_intermediates): Fix inverted test to bail under + -n for signal case. Bail under -q or -t. + Skip files with update_status==-1. + + * job.c (job_next_command): Skip empty lines. + (new_job): Don't test the return of job_next_command. + Just let start_waiting_job handle the case of empty commands. + +Wed Apr 19 03:25:54 1995 Roland McGrath + + * function.c [__MSDOS__]: Include . From DJ Delorie. + + * Version 3.73.1. + +Sat Apr 8 14:53:24 1995 Roland McGrath + + * remake.c (notice_finished_file): Set FILE->update_status to zero + if it's -1. + +Wed Apr 5 00:20:24 1995 Roland McGrath + + * Version 3.73 released. + +Tue Mar 28 13:25:46 1995 Roland McGrath + + * main.c (main): Fixed braino in assert. + + * Version 3.72.13. + +Mon Mar 27 05:29:12 1995 Roland McGrath + + * main.c: Avoid string in assert expression. Some systems are broken. + +Fri Mar 24 00:32:32 1995 Roland McGrath + + * main.c (main): Handle 1 and 2 returns from update_goal_chain + makefile run properly. + + * Version 3.72.12. + + * main.c (handle_non_switch_argument): New function, broken out of + decode_switches. + (decode_switches): Set optind to 0 to reinitialize getopt, not to 1. + When getopt_long returns EOF, break the loop and handle remaining args + with a simple second loop. + + * remake.c (remake_file): Set update_status to 2 instead of 1 for + no rule to make. Mention parent (dependent) in error message. + (update_file_1): Handle FILE->update_status == 2 in -d printout. + * job.c (start_job_command, reap_children): Set update_status to 2 + instead of 1 for failed commands. + +Tue Mar 21 16:23:38 1995 Roland McGrath + + * job.c (search_path): Function removed (was already #if 0'd out). + * configure.in: Remove AC_TYPE_GETGROUPS; nothing needs it any more. + +Fri Mar 17 15:57:40 1995 Roland McGrath + + * configure.bat: Write @CPPFLAGS@ translation. + +Mon Mar 13 00:45:59 1995 Roland McGrath + + * read.c (parse_file_seq): Rearranged `l(a b)' -> `l(a) l(b)' loop + to not skip the elt immediately preceding `l(...'. + +Fri Mar 10 13:56:49 1995 Roland McGrath + + * Version 3.72.11. + + * read.c (find_char_unquote): Make second arg a string of stop + chars instead of a single stop char. Stop when any char in the + string is hit. All callers changed. + (find_semicolon): Pass stop chars "#;" to one find_char_unquote call, + instead of using two calls. If the match is not a ; but a #, + return zero. + * misc.c: Changed find_char_unquote callers here too. + + * Version 3.72.10. + + * read.c (read_makefile, parse_file_seq): Fix typo __MS_DOS__ -> + __MSDOS__. + + * GNUmakefile (globfiles): Add glob/configure.bat. + (distfiles): Add configh.dos, configure.bat. + +Wed Mar 8 13:10:57 1995 Roland McGrath + + Fixes for MS-DOS from DJ Delorie. + * read.c (read_makefile, parse_file_seq) [__MS_DOS__]: Don't see : + as separator in "C:\...". + * configh.dos (STDC_HEADERS): Define only if undefined. + (HAVE_SYS_PARAM_H): Don't define this. + (HAVE_STRERROR): Define this. + * job.c (construct_command_argv_internal) [__MSDOS__]: Fix typos. + + * Version 3.72.9. + + * main.c (decode_switches): Reset optind to 1 instead of 0. + +Tue Mar 7 17:31:06 1995 Roland McGrath + + * main.c (decode_switches): If non-option arg is "-", ignore it. + +Mon Mar 6 23:57:38 1995 Roland McGrath + + * Version 3.72.8. + +Wed Feb 22 21:26:36 1995 Roland McGrath + + * Version 3.72.7. + +Tue Feb 21 22:10:43 1995 Roland McGrath + + * main.c (main): Pass missing arg to tmpnam. + + * configure.in: Check for strsignal. + * job.c (child_error): Use strsignal. + * main.c (main): Don't call signame_init #ifdef HAVE_STRSIGNAL. + + * misc.c (strerror): Fix swapped args in sprintf. + +Mon Feb 13 11:50:08 1995 Roland McGrath + + * configure.in (CFLAGS, LDFLAGS): Don't set these variables. + +Fri Feb 10 18:44:12 1995 Roland McGrath + + * main.c (print_version): Add 95 to copyright years. + + * Version 3.72.6. + + * job.c (start_job_command): Remember to call notice_finished_file + under -n when not recursing. To do this, consolidate that code + under the empty command case and goto there for the -n case. + +Tue Feb 7 13:36:03 1995 Roland McGrath + + * make.h [! STDC_HEADERS]: Don't declare qsort. Sun headers + declare it int. + +Mon Feb 6 17:37:01 1995 Roland McGrath + + * read.c (read_makefile): For bogus line starting with tab, ignore + it if blank after removing comments. + + * main.c: Cast results of `alloca' to `char *'. + * expand.c: Likewise. + +Sun Feb 5 18:35:46 1995 Roland McGrath + + * Version 3.72.5. + + * configure.in: Check for mktemp. + * main.c (main) [! HAVE_MKTEMP]: Use tmpnam instead of mktemp. + + * configure.in (make_cv_sysconf_open_max): New check for `sysconf + (_SC_OPEN_MAX)'. + * acconfig.h: Added #undef HAVE_SYSCONF_OPEN_MAX. + * job.c [HAVE_SYSCONF_OPEN_MAX] (getdtablesize): Define as macro + using sysconf. + +Fri Jan 27 04:42:09 1995 Roland McGrath + + * remake.c (update_file_1): When !MUST_MAKE, don't set + FILE->update_status to zero before calling notice_finished_file. + (notice_finished_file): Touch only when FILE->update_status is zero. + (remake_file): Set FILE->update_status to zero after not calling + execute_file_command and deciding to touch instead. + +Thu Jan 26 01:29:32 1995 Roland McGrath + + * main.c (debug_signal_handler): New function; toggles debug_flag. + (main): Handle SIGUSR1 with that. + +Mon Jan 16 15:46:56 1995 Roland McGrath + + * compatMakefile (realclean): Remove Info files. + +Sun Jan 15 08:23:09 1995 Roland McGrath + + * Version 3.72.4. + + * job.c (start_job_command): Save and restore environ around vfork + call. + (search_path): Function #if 0'd out. + (exec_command): Use execvp instead of search_path. + + * expand.c (variable_expand): Rewrote computed variable name and + substitution reference handling to be simpler. First expand the + entire text between the parens if it contains any $s, then examine + the result of that for subtitution references and do no further + expansion while parsing them. + + * job.c (construct_command_argv_internal): Handle " quoting too, + when no backslash, $ or ` characters appear inside the quotes. + + * configure.in (union wait check): If WEXITSTATUS and WTERMSIG are + defined, just use int. + +Tue Jan 10 06:27:27 1995 Roland McGrath + + * default.c (default_variables) [__hpux]: Remove special + definition of ARFLAGS. Existence of the `f' flag is not + consistent across HPUX versions; and one might be using GNU ar + anyway. + + * compatMakefile (clean): Don't remove Info files. + + * compatMakefile (check): Remove gratuitous target declaration. + +Sat Jan 7 11:38:23 1995 Roland McGrath + + * compatMakefile (ETAGS, CTAGS): Don't use -t. + + * arscan.c (ar_name_equal) [cray]: Subtract 1 like [__hpux]. + + * main.c (decode_switches): For --help, print usage to stdout. + +Mon Dec 5 12:42:18 1994 Roland McGrath + + * Version 3.72.3. + + * remake.c (update_file_1): Do set_command_state (FILE, + cs_not_started) only if old state was deps_running. + +Mon Nov 28 14:24:03 1994 Roland McGrath + + * job.c (start_waiting_job): Use set_command_state. + + * build.template (CPPFLAGS): New variable. + (prefix, exec_prefix): Set from @...@. + (compilation loop): Pass $CPPFLAGS to compiler. + + * GNUmakefile (build.sh.in): Make it executable. + + * GNUmakefile (globfiles): Add configure.in, configure. + + * Version 3.72.2. + + * configure.in (AC_OUTPUT): Don't write glob/Makefile. + + * configure.in (AC_CHECK_SYMBOL): Use AC_DEFINE_UNQUOTED. + + * configure.in: Don't check for ranlib. + +Tue Nov 22 22:42:40 1994 Roland McGrath + + * remake.c (notice_finished_file): Only mark also_make's as + updated if really ran cmds. + +Tue Nov 15 06:32:46 1994 Roland McGrath + + * configure.in: Put dnls before random whitespace. + +Sun Nov 13 05:02:25 1994 Roland McGrath + + * compatMakefile (CPPFLAGS): New variable, set from @CPPFLAGS@. + (RANLIB): Variable removed. + (prefix, exec_prefix): Set these from @...@. + (.c.o): Use $(CPPFLAGS). + (glob/libglob.a): Don't pass down variables to sub-make. + glob/Makefile should be configured properly by configure. + (distclean): Remove config.log and config.cache (autoconf stuff). + +Mon Nov 7 13:58:06 1994 Roland McGrath + + * acconfig.h: Add #undef HAVE_UNION_WAIT. + * configure.in: Converted to Autoconf v2. + * dir.c: Test HAVE_DIRENT_H, HAVE_SYS_DIR_H, HAVE_NDIR_H instead + of DIRENT, SYSDIR, NDIR. + * build.sh.in (prefix, exec_prefix): Set these from @...@. + (CPPFLAGS): New variable, set from @CPPFLAGS@. + (compiling loop): Pass $CPPFLAGS before $CFLAGS. + * install.sh: File renamed to install-sh. + + * main.c (define_makeflags): When no flags, set WORDS to zero. + +Sun Nov 6 18:34:01 1994 Roland McGrath + + * Version 3.72.1. + + * main.c (define_makeflags): Terminate properly when FLAGSTRING is + empty. + +Fri Nov 4 16:02:51 1994 Roland McGrath + + * Version 3.72. + +Tue Nov 1 01:18:10 1994 Roland McGrath + + * Version 3.71.5. + + * job.c (start_job_command): When ARGV is nil, only set + update_state and call notice_finished_file if job_next_command + returns zero. + + * job.c (start_job_command): Call notice_finished_file for empty + command line. + +Thu Oct 27 02:02:45 1994 Roland McGrath + + * file.c (snap_deps): Set COMMANDS_SILENT for .SILENT, not + COMMANDS_NOERROR. + +Wed Oct 26 02:14:10 1994 Roland McGrath + + * Version 3.71.4. + +Tue Oct 25 22:49:24 1994 Roland McGrath + + * file.c (snap_deps): Set command_flags bits in all :: entries. + +Mon Oct 24 18:47:50 1994 Roland McGrath + + * make.h (posix_pedantic): Declare it. + * main.c (main): Move checks .IGNORE, .SILENT, .POSIX to + snap_deps. + * file.c (snap_deps): Check .IGNORE, .SILENT, .POSIX here instead + of in main. If .IGNORE has deps, OR COMMANDS_NOERROR into their + command_flags and don't set -i. Likewise .SILENT. + * job.c (start_job_command): In FLAGS initialization, OR in + CHILD->file->command_flags. + * file.h (struct file): New member `command_flags'. + +Sun Oct 16 01:01:51 1994 Roland McGrath + + * main.c (switches): Bump flag values for --no-print-directory and + --warn-undefined-variables, so neither is 1 (which indicates a + nonoption argument). + +Sat Oct 15 23:39:48 1994 Roland McGrath + + * main.c (main): Add missing code in .IGNORE test. + +Mon Oct 10 04:09:03 1994 Roland McGrath + + * variable.c (define_automatic_variables): Define +D and +F. + +Sat Oct 1 04:07:48 1994 Roland McGrath + + * main.c (main): Define hidden automatic variable with command + vars, and MAKEOVERRIDES to a reference to that. + (define_makeflags): If posix_pedantic, write a reference to that + instead. + +Thu Sep 29 00:14:26 1994 Roland McGrath + + * main.c (posix_pedantic): New variable. + (main): Set posix_pedantic if .POSIX is a target. + Fix .IGNORE and .SILENT checks to require is_target. + + * commands.c (set_file_variables): Define new automatic variable + $+, like $^ but before calling uniquize_deps. + + * job.c (reap_children): Call delete_child_targets for non-signal + error if .DELETE_ON_ERROR is a target. + +Tue Sep 27 01:57:14 1994 Roland McGrath + + * Version 3.71.3. + +Mon Sep 26 18:16:55 1994 Roland McGrath + + * job.c (reap_children): Don't change C->file->command_state when + dying. Test it only after calling start_job_command for a new + command line. When no more cmds, just set C->file->update_status. + (start_job_command): When the last line is empty or under -n, set + C->file->update_status. + (start_waiting_job): Grok cs_not_started after start_job_command + as success. + (new_job): Set C->file->update_status when there are no cmds. + (job_next_command): When out of lines, don't set + CHILD->file->update_status or CHILD->file->command_state. + + * main.c (quote_as_word): Renamed from shell_quote. Take new arg; + if nonzero, also double $s. + (main): Define MAKEOVERRIDES from command_variables here. + (define_makeflags): Don't use command_variables here; instead write a + reference $(MAKEOVERRIDES) in MAKEFLAGS. Make vars recursive. + + * dir.c [__MSDOS__]: Fixed typo. + + * vpath.c (selective_vpath_search): Reset EXISTS when stat fails. + +Sat Sep 10 03:01:35 1994 Roland McGrath + + * remake.c: Include and use assert instead of printfs + and abort. + + * main.c (decode_switches): Loop until optind hits ARGC, not just + until getopt_long returns EOF. Initialize C to zero before loop; + in loop if C is EOF, set optarg from ARGV[optind++], else call + getopt_long. + (decode_env_switches): Use variable_expand instead of + allocated_variable_expand. Allocate a fresh buffer to copy split + words into; scan characters by hand to break words and + debackslashify. + (shell_quote): New function. + (define_makeflags): Allocate doubled space for switch args, and command + variable names and values; use shell_quote to quote those things. + +Fri Sep 9 01:37:47 1994 Roland McGrath + + * Version 3.71.2. + + * acconfig.h: Add HAVE_SYS_SIGLIST and HAVE__SYS_SIGLIST. + + * main.c (decode_switches): The non-option return from getopt is + 1, not 0. + (command_variables): New type and variable. + (decode_switches, decode_env_switches): After making a variable + definition, record the struct variable pointer in the + command_variables chain. + (define_makeflags): If ALL, write variable definitions for + command_variables. + + * main.c (other_args): Variable removed. + (goals, lastgoal): New static variables (moved from auto in main). + (main): Don't process OTHER_ARGS at all. + Don't set variable MAKEOVERRIDES at all; define MAKE to just + $(MAKE_COMMAND). + (init_switches): Prepend a - {return in order} instead of a + + {require order}. + (decode_switches): Don't set OTHER_ARGS at all. + Grok '\0' return from getopt_long as non-option argument; try + variable definition and (if !ENV) enter goal targets here. + (decode_env_switches): Use allocated_variable_expand to store value. + Use find_next_token to simplify word-splitting loop. Don't + prepend a dash to uninterpreted value. Instead, if split into + only one word, try variable definition and failing that prepend a + dash to the word and pass it to decode_switches as a single arg. + +Wed Sep 7 03:02:46 1994 Roland McGrath + + * remake.c (notice_finished_file): Only recheck modtimes if + FILE->command_state was cs_running on entry (meaning the commands + actually just ran). + (update_file_1): Whenever we set FILE->update_status, call + notice_finished_file instead of just set_command_state. + * job.c (start_job_command): Whenever we set + CHILD->file->update_status, call notice_finished_file instead of + just set_command_state. + +Tue Sep 6 19:13:54 1994 Roland McGrath + + * default.c: Add missing ". + + * job.c: Changed all assignments of command_state members to calls + to set_command_state. + * remake.c: Likewise. + * file.c (set_command_state): New function. + * file.h: Declare set_command_state. + + * main.c (init_switches): Put a + first in options. + +Mon Jul 25 18:07:46 1994 Roland McGrath + + Merge MSDOS/GO32 port from DJ Delorie . + * vpath.c: Changed all uses of ':' to PATH_SEPARATOR_CHAR. + * main.c (directory_before_chdir): New variable, moved out of main + (was local). + (main) [__MSDOS__]: Look for \ or : to delimit last component of + PROGRAM. Don't frob ARGV[0] before setting MAKE_COMMAND variable. + (die): Change back to `directory_before_chdir' before dying. + * make.h (PATH_SEPARATOR_CHAR): New macro; differing defns for + [__MSDOS__] and not. + * job.c [__MSDOS__]: Include . + [__MSDOS__] (dos_pid, dos_status, dos_bname, dos_bename, + dos_batch_file): New variables. + (reap_children) [__MSDOS__]: Don't call wait; just examine those vars. + (unblock_sigs) [__MSDOS__]: Do nothing. + (start_job_command) [__MSDOS__]: Use spawnvpe instead of vfork & exec. + (load_too_high) [__MSDOS__]: Always return true. + (search_path) [__MSDOS__]: Check for : or / in FILE to punt. + Use PATH_SEPARATOR_CHAR instead of ':'. + (construct_command_argv_internal) [__MSDOS__]: Wholly different + values for sh_chars and sh_cmds. Wholly new code to handle shell + scripts. + * function.c (expand_function: `shell') [__MSDOS__]: Wholly new + implementation. + * dir.c [__MSDOS__] (dosify): New function. + (dir_contents_file_exists_p) [__MSDOS__]: Call it on FILENAME and + process the result instead of FILENAME itself. + (file_impossible_p) [__MSDOS__]: Likewise. + * default.c [__MSDOS__]: Define GCC_IS_NATIVE. + (default_suffix_rules) [__MSDOS__]: Use `y_tab.c' instead of `y.tab.c'. + (default_variables) [GCC_IS_NATIVE]: Set CC and CXX to `gcc', YACC to + `bison -y', and LEX to `flex'. + * configure.bat, configh.dos: New files. + * commands.c (fatal_error_signal) [__MSDOS__]: Just remove + intermediates and exit. + + * commands.c (set_file_variables): Add parens in length + computation in .SUFFIXES dep loop to quiet compiler warning. From + Jim Meyering. + + * read.c (read_makefile): Free FILENAME if we allocated it. From + Jim Meyering. + +Mon Jul 4 17:47:08 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * misc.c (safe_stat): New function, EINTR-safe wrapper around stat. + * vpath.c (selective_vpath_search): Use safe_stat in place of stat. + * read.c (construct_include_path): Use safe_stat in place of stat. + * job.c (search_path): Use safe_stat in place of stat. + * dir.c (find_directory): Use safe_stat in place of stat. + * commands.c (delete_target): Use safe_stat in place of stat. + * arscan.c (ar_member_touch) [EINTR]: Do EINTR looping around fstat. + * remake.c (name_mtime): Use safe_stat in place of stat. + (touch_file) [EINTR]: Do EINTR looping around fstat. + +Fri Jun 24 05:40:24 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (read_makefile): Check for a shell command first, and + then strip leading tabs before further checking if it's not a + shell command line. + + * make.h [__arm]: Undefine POSIX. + [!__GNU_LIBRARY__ && !POSIX && !_POSIX_VERSION]: Don't declare system + functions that return int. + + * job.c (construct_command_argv_internal): After swallowing a + backslash-newline combination, if INSTRING is set goto string_char + (new label) for normal INSTRING handling code. + +Sat Jun 4 01:11:20 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * configure.in: Don't check for sys_siglist and _sys_siglist with + AC_HAVE_FUNCS. Instead use two AC_COMPILE_CHECKs. + +Mon May 23 18:20:38 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.71.1 released. + + * make.h [!__GNU_LIBRARY__ && !POSIX]: Also test #ifndef + _POSIX_VERSION for these declarations. + + * misc.c [GETLOADAVG_PRIVILEGED] [POSIX]: Remove bogus #ifndefs + around #undefs of HAVE_SETREUID and HAVE_SETREGID. + +Sat May 21 16:26:38 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.71 released. + + * misc.c [GETLOADAVG_PRIVILEGED] [POSIX]: Don't test [HAVE_SETUID] + and [HAVE_SETGID]. Every system has those, and configure doesn't + check for them. + + * make.h [_POSIX_VERSION]: Don't #define POSIX #ifdef ultrix. + + * compatMakefile (loadavg): Depend on and use loadavg.c instead of + getloadavg.c. + (loadavg.c): Link or copy it from getloadavg.c. + (distclean): Remove loadavg.c. + +Mon May 16 22:59:04 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.70.4. + + * misc.c [GETLOADAVG_PRIVILEGED] [! POSIX]: Undefine HAVE_SETEUID + and HAVE_SETEGID. + + * default.c (default_terminal_rules): In SCCS rules, put + $(SCCS_OUTPUT_OPTION) before $<. On some systems -G is grokked + only before the file name. + * configure.in (SCCS_GET_MINUS_G check): Put -G flag before file name. + +Tue May 10 16:27:38 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (construct_command_argv_internal): Swallow + backslash-newline combinations inside '' strings too. + +Thu May 5 04:15:10 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (do_define): Call collapse_continuations on each line + before all else. + +Mon Apr 25 19:32:02 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (construct_command_argv_internal): Notice newline inside + '' string when RESTP is non-null. + +Fri Apr 22 17:33:30 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.70.3. + + * remake.c (update_goal_chain): Reset FILE to G->file after the + double-colon loop so it is never null for following code. + + * read.c (read_makefile): Fix `override define' parsing to skip + whitespace after `define' properly. + + * compatMakefile (srcdir): Define as @srcdir@; don't reference + $(VPATH). + (glob/Makefile): New target. + +Thu Apr 21 16:16:55 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.70.2. + + * misc.c (remove_comments): Use find_char_unquote. + * make.h (find_char_unquote): Declare it. + * read.c (find_char_unquote): New function, generalized from + find_percent. + (find_percent, find_semicolon, parse_file_seq): Use that. + +Wed Apr 20 18:42:39 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * implicit.c (pattern_search): Always allocate new storage for + FILE->stem. It is not safe to store STEM's address because it + might be auto storage. + + * configure.in: Check for seteuid and setegid. + * misc.c [HAVE_SETEUID]: Declare seteuid. + [HAVE_SETEGID]: Declare setegid. + (make_access, user_access) [HAVE_SETEUID]: Use seteuid. + [HAVE_SETEGID]: Use setegid. + + * remake.c (update_goal_chain): Set STATUS to FILE->update_status, + to preserve whether it's 2 for error or 1 for -q trigger. When + STATUS gets nonzero and -q is set, always stop immediately. + * main.c (main, decode_switches): Die with 2 for errors. + (main): Accept 2 return from update_goal_chain and die with that. + * misc.c (fatal, makefile_fatal): Die with 2; 1 is reserved for -q + answer. + * job.c (reap_children): Die with 2 for error. + (start_job_command): Set update_status to 2 for error. Set it to + 1 when we would run a command and question_flag is set. + + * read.c (read_makefile): Don't mark makefiles as precious. Just + like other targets, they can be left inconsistent and in need of + remaking by aborted commands. + + * read.c (read_makefile): Write no error msg for -include file. + +Tue Apr 5 05:22:19 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * commands.c (fatal_error_signal): Don't unblock signals. + + * file.h (struct file): Change member `double_colon' from flag to + `struct file *'. + * read.c (record_files): Set double_colon pointer instead of flag. + * main.c (main): When disqualifying makefiles for updating, use + double_colon pointer to find all entries for a file. + * file.c (enter_file): If there is already a double-colon entry + for the file, set NEW->double_colon to that pointer. + (file_hash_enter): Use FILE->double_colon to find all entries to + set name. + * remake.c (update_goal_chain): Do inner loop on double-colon entries. + (update_file): Use FILE->double_colon pointer to find all entries. + (f_mtime): Likewise. + (notice_finished_file): Propagate mtime change to all entries. + + * variable.c (try_variable_definition): Return after abort. + +Fri Apr 1 18:44:15 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (read_makefile): Remove unused variable. + (parse_file_seq): When removing an elt that is just `)', properly + fix up the previous elt's next pointer. + +Mon Mar 28 18:31:49 1994 Roland McGrath (roland@mole.gnu.ai.mit.edu) + + * configure.in: Do AC_SET_MAKE. + * GNUmakefile (Makefile.in): Edit MAKE assignment into @SET_MAKE@. + +Fri Mar 4 00:02:32 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * function.c (subst_expand): If BY_WORD or SUFFIX_ONLY is set and + the search string is the empty string, find a match at the end of + each word (using end_of_token in place of sindex). + + * misc.c (end_of_token): Don't treat backslashes specially; you + can no longer escape blanks with backslashes in export, unexport, + and vpath. This was never documented anyway. + +Thu Mar 3 23:53:46 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (read_makefile): Variable name for `define' is not just + first token; use whole rest of line and strip trailing blanks. + +Wed Feb 16 16:03:45 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.70.1. + + * read.c (read_makefile): Add -d msg stating args. + + * read.c (read_makefile): Use isspace to skip over leading + whitespace, and explicitly avoid skipping over tabs. Don't want + to skip just spaces though; formfeeds et al should be skipped. + + * default.c (default_variables) [__hpux]: Add f in ARFLAGS. + + * arscan.c (ar_name_equal) [__hpux]: Subtract 2 instead of 1 from + sizeof ar_name for max length to compare. + + * misc.c [GETLOADAVG_PRIVILEGED] [POSIX]: Undefine HAVE_SETREUID + #ifdef HAVE_SETUID; likewise HAVE_SETREGID and HAVE_SETGID. + + * main.c (main): Call user_access after setting `program', in case + it needs to use it in an error message. + + * read.c (read_makefile): Ignore an empty line starting with a tab. + +Thu Feb 10 21:45:31 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in (AC_SYS_SIGLIST_DECLARED): Use this instead of + AC_COMPILE_CHECK that is now its contents. + +Fri Feb 4 16:28:54 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.h: #undef strerror after #include . + [! ANSI_STRING]: Declare strerror. + +Thu Feb 3 02:21:22 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * misc.c (strerror): #undef any macro before function definition. + +Mon Jan 31 19:07:23 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * variable.c (try_variable_definition): Calculate BEG before loop + to strip blanks by decrementing END. Don't decr END to before BEG. + + * read.c (read_makefile): Skip over leading space characters, but + not tabs, after removing continuations and comments (it used to + use isspace). + +Tue Jan 25 16:45:05 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * variable.c (define_automatic_variables): In $(@D) et al, use + patsubst to remove trailing slash. + + * commands.c (delete_target): New function, broken out of + delete_child_targets. Check for archive members and give special msg. + (delete_child_targets): Use delete_target. + +Mon Jan 17 17:03:22 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * default.c (default_suffix_rules): Use $(TEXI2DVI_FLAGS) in + texi2dvi rules. Use $(MAKEINFO_FLAGS) in makeinfo rules. + +Tue Jan 11 19:29:55 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * GNUmakefile (tarfiles): Omit make-doc. + (make-$(version).tar): Include make.info*. + +Fri Jan 7 16:27:00 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (configure, config.h.in): Comment out rules. + +Thu Jan 6 18:08:08 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (binprefix, manprefix): New variables. + (instname): Variable removed. + (install): Use $({bin,man}prefix)make in place of $(instname). + File targets likewised renamed. + +Mon Jan 3 17:50:25 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.70 released. + +Thu Dec 23 14:46:54 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.69.3. + + * read.c (parse_file_seq): Inside multi-word archive ref + translation loop, check NEW1==0 at end and break out of the loop. + + * GNUmakefile (make-$(version).tar): Distribute install.sh. + * install.sh: New file. + + * configure.in (SCCS_GET_MINUS_G check): Put redirection for admin + cmds outside subshell parens, to avoid "command not found" msgs + from the shell. + +Wed Dec 22 17:00:43 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in (SCCS_GET_MINUS_G check): Put -G flag last in get cmd. + Redirect output & error from get to /dev/null. + Fix reversed sense of test. + +Fri Dec 17 15:31:36 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in (SCCS_GET_MINUS_G check): Use parens instead of + braces inside if condition command; some shells lose. + +Thu Dec 16 15:10:23 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.69.2. + + * arscan.c [M_UNIX]: Move #undef M_XENIX for PORTAR stuff. + (PORTAR) [M_XENIX]: Define to 0 instead of 1. + + * main.c (define_makeflags): Only export MAKEFLAGS if !ALL. + +Wed Dec 15 17:47:48 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * main.c (main): Cast result of pointer arith to unsigned int + before passing to define_variable for envars. Matters when + sizeof(unsigned)!=sizeof(ptrdiff_t). + +Tue Dec 14 14:21:16 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in: Add new check for SCCS_GET_MINUS_G. + * config.h.in: Add #undef SCCS_GET_MINUS_G. + * default.c (default_terminal_rules): Use `$(SCCS_OUTPUT_OPTION)' in + place of `-G $@' in SCCS commands. + (default_variables) [SCCS_GET_MINUS_G]: Define SCCS_OUTPUT_OPTION + to "-G$@". + + * configure.in (AC_OUTPUT): Put touch stamp-config in second arg + (so it goes in config.status), rather than afterward. + + * ar.c (ar_member_date): Don't call enter_file on the archive file + if it doesn't exist (by file_exists_p). + + * compatMakefile ($(infodir)/make.info): Replace `$$d/foo.info' + with `$$dir/make.info' in install-info invocation (oops). + + * vpath.c (construct_vpath_list): Only set LASTPATH set PATH when + we do not unlink and free PATH. + + * file.c (print_file_data_base): Fix inverted calculation for + average files per hash bucket. + + * read.c (readline): When we see a NUL, give only a warning and + synthesize a newline to terminate the building line (used to + fatal). Move fgets call into the loop condition, and after the + loop test ferror (used to test !feof in the loop). + +Fri Dec 3 16:40:31 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in: Check for strerror in AC_HAVE_FUNCS. + +Thu Dec 2 15:37:50 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + Differentiate different flavors of missing makefile error msgs, + removing gratuitous `fopen: ' and giving caller for included makefiles. + * misc.c [! HAVE_STRERROR]: Define our own strerror here. + (perror_with_name, pfatal_with_name): Use strerror instead of + replicating its functionality. + * read.c (read_makefile): Return int instead of void. + (read_all_makefiles, read_makefile): Change callers to notice zero + return and give error msg. + +Thu Nov 11 11:47:36 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.69.1. + + * default.c: Put `-G $@' before $< in SCCS cmds. + +Wed Nov 10 06:06:14 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (read_makefile): After trying a variable defn, notice if + the line begins with a tab, and diagnose an error. + +Sun Nov 7 08:07:37 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.69. + +Wed Nov 3 06:54:33 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.68.10. + + * implicit.c (try_implicit_rule): Look for a normal rule before an + archive rule. + +Fri Oct 29 16:45:28 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * function.c (expand_function: `sort'): Double NWORDS when it + overflows, instead of adding five. + + * compatMakefile (clean): Remove loadavg. + +Wed Oct 27 17:58:33 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.68.9. + + * file.h (NEW_MTIME): Define new macro. + * main.c (main): Set time of NEW_FILES to NEW_MTIME, not to + current time returned from system. Removed variable NOW. + * remake.c (notice_finished_file): Use NEW_MTIME in place of + current time here too. + +Tue Oct 26 19:45:35 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.68.8. + + * remake.c (update_file_1): Don't clear MUST_MAKE when FILE has no + cmds and !DEPS_CHANGED unless also !NOEXIST. + +Mon Oct 25 15:25:21 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (parse_file_seq): When converting multi-word archive + refs, ignore a word beginning with a '('. + +Fri Oct 22 02:53:38 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in: Check for sys/timeb.h. + * make.h [HAVE_SYS_TIMEB_H]: Test this before including it. + +Thu Oct 21 16:48:17 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.68.7. + + * rule.c (convert_suffix_rule): New local TARGPERCENT. Set it to + TARGNAME+1 for "(%.o)", to TARGNAME for "%.?". Use it in place of + TARGNAME to initialize PERCENTS[0]. + +Mon Oct 18 06:49:35 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in: Use AC_HAVE_HEADERS(unistd.h) instead of AC_UNISTD_H. + Remove AC_USG; it is no longer used. + + * file.c (print_file): New function, broken out of + print_file_data_base. + (print_file_data_base): Call it. + * rule.c (print_rule): New function, broken out of + print_rule_data_base. + (print_rule_data_base): Call it. + +Thu Oct 14 14:54:03 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * default.c (install_default_suffix_rules): New function, broken + out of install_default_implicit_rules. + (install_default_implicit_rules): Move suffix rule code there. + * make.h: Declare install_default_suffix_rules. + * main.c (main): Call install_default_suffix_rules before reading + makefiles. Move convert_to_pattern call before + install_default_implicit_rules. + + * job.h (struct child): Make `pid' member type `pid_t' instead of + `int'. + + * compatMakefile (RANLIB): New variable, set by configure. + (glob/libglob.a): Pass RANLIB value down to submake. + + Fixes for SCO 3.2 "devsys 4.2" from pss@tfn.com (Peter Salvitti). + * make.h: Include before for SCO lossage. + * job.c [! getdtablesize] [! HAVE_GETDTABLESIZE]: If NOFILE is not + defined but NOFILES_MAX is, define it to be that. + +Mon Oct 11 19:47:33 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * GNUmakefile (make-$(version).tar): Depend on acconfig.h, so it + is distributed. + +Sun Oct 3 15:15:33 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * default.c (default_terminal_rules): Add `-G $@' to SCCS get cmds. + +Tue Sep 28 14:18:20 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (construct_command_argv_internal): Add ^ to SH_CHARS; it + is another symbol for | in some shells. + * main.c (main): Add it to CMD_DEFS quoting list as well. + +Mon Sep 20 18:05:24 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (construct_command_argv_internal): Remove '=' from + SH_CHARS. Only punt on '=' if it is unquoted in a word before the + first word without an unquoted '='. + + * main.c (define_makeflags): Set v_export for MAKEFLAGS. + +Fri Sep 17 00:37:18 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * remake.c (update_file_1): Use .DEFAULT cmds for phony targets. + + * make.h [_AIX && _POSIX_SOURCE]: Define POSIX. + + * commands.c (delete_child_targets): Don't delete phony files. + + * job.c (start_job_command): Set COMMANDS_RECURSE in FLAGS if we + see a `+' at the beginning of the command line. + +Thu Sep 9 17:57:14 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.68.6. + +Wed Sep 8 20:14:21 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * main.c (define_makeflags): Define MAKEFLAGS with o_file, not o_env. + +Mon Aug 30 12:31:58 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * expand.c (variable_expand): Fatal on an unterminated reference. + +Thu Aug 19 16:27:53 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.68.5. + + * variable.c (define_automatic_variables): Define new o_default + variable `MAKE_VERSION' from version_string and remote_description. + + * make.h (version_string, remote_description): Declare these here. + * main.c: Don't declare version_string. + (print_version): Don't declare remote_description. + +Wed Aug 18 15:01:24 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (read_makefile): Free space pointed to by CONDITIONALS + before restoring the old pointer. + +Mon Aug 16 17:33:36 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile ($(objs)): Depend on config.h. + + * GNUmakefile (build.sh.in): Depend on compatMakefile. + + * configure.in: Touch stamp-config after AC_OUTPUT. + +Fri Aug 13 16:04:22 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.68.4. + +Thu Aug 12 17:18:57 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.h: Include instead of "config.h". + +Wed Aug 11 02:35:25 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * main.c (main): Make all variables interned from ENVP be v_export. + * variable.c (try_variable_definition): In v_default case, don't + check for an o_file variable that `getenv' finds. + + * job.c (reap_children): New local variable ANY_LOCAL; set it + while setting ANY_REMOTE. If !ANY_LOCAL, don't wait for local kids. + + * main.c (main): Don't call decode_env_switches on MFLAGS. DOC THIS. + + * function.c (expand_function): #if 0 out freeing of ENVP since it + is environ. + +Mon Aug 9 17:37:20 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.68.3. + + * remote-stub.c (remote_status): Set errno to ECHILD before return. + * job.c (reap_children): Scan the chain for remote children and + never call remote_status if there are none. + + * function.c (expand_function: `shell'): #if 0 out calling + target_environment; just set ENVP to environ instead. + + * job.c (reap_children): Check for negative return from + remote_status and fatal for it. + When blocking local child wait returns 0, then try a blocking call + to remote_status. + +Tue Aug 3 00:19:00 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (clean): Delete make.info* and make.dvi here. + (distclean): Not here. + + * dep.h (RM_*): Use #defines instead of enum to avoid lossage from + compilers that don't like enum values used as ints. + +Mon Aug 2 16:46:34 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (loadavg): Add $(LOADLIBES). + +Sun Aug 1 16:01:15 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.68.2. + + * compatMakefile (loadavg, check-loadavg): New targets. + (check): Depend on check-loadavg. + + * compatMakefile (glob/libglob.a): Depend on config.h. + + * misc.c (log_access): Write to stderr instead of stdout. + +Fri Jul 30 00:07:02 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.68.1. + +Thu Jul 29 23:26:40 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in (SYS_SIGLIST_DECLARED): In test program include + #ifdef HAVE_UNISTD_H. + + * compatMakefile (.PHONY): Put after `all' et al. + + * configure.in: Add AC_IRIX_SUN. + +Wed Jul 28 17:41:12 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.68. + +Mon Jul 26 14:36:49 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.67.8. + +Sun Jul 25 22:09:08 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.67.7. + + * compatMakefile ($(infodir)/make.info): Don't use $(instname). + Run install-info script if present. + +Fri Jul 23 16:03:50 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.h [STAT_MACROS_BROKEN]: Test this instead of [uts]. + + * configure.in: Add AC_STAT_MACROS_BROKEN. + +Wed Jul 14 18:48:11 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.67.6. + + * read.c (read_makefile): Recognize directive `-include', like + `include' but sets RM_DONTCARE flag. + + * variable.c (target_environment): If FILE is nil, use + current_variable_set_list in place of FILE->variables. + * function.c (expand_function: `shell'): Get an environment for + the child from target_environment instead of using environ. + + * dep.h: Declare read_all_makefiles here. + (RM_*): Define new enum constants. + * read.c (read_makefile): Second arg is FLAGS instead of TYPE. + Treat it as a bit mask containing RM_*. + (read_all_makefiles): For default makefiles, set D->changed to + RM_DONTCARE instead of 1. + * main.c: Don't declare read_all_makefiles here. + (main): Check `changed' member of read_makefiles elts for RM_* + flags instead of specific integer values. + +Mon Jul 12 22:42:17 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.h [sequent && i386]: #undef POSIX. From trost@cse.ogi.edu. + +Thu Jul 8 19:51:23 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * vpath.c (construct_vpath_list): If ELEM is zero 0, free PATTERN + as well as VPATH. + (build_vpath_lists): Empty `vpaths' around construct_vpath_list + call for $(VPATH). Expand $(strip $(VPATH)), not just $(VPATH). + + * rule.c (convert_suffix_rule): Use alloca instead of xmalloc for + PERCENTS, whose storage is not consumed by create_pattern_rule. + + * make.h [__mips && _SYSTYPE_SVR3]: #undef POSIX. + +Wed Jun 30 18:11:40 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.67.5. + + * rule.c (max_pattern_targets): New variable. + (count_implicit_rule_limits): Compute its value. + * rule.h: Declare it. + * implicit.c (pattern_search): Make TRYRULES max_target_patterns + times bigger. Move adding new TRYRULES elt inside the inner + targets loop, so each matching target gets its own elt in MATCHES + and CHECKED_LASTSLASH. + + * file.c (remove_intermediates): If SIG!=0 say `intermediate file' + instead of just `file' in error msg. + +Fri Jun 25 14:55:15 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (construct_command_argv): Turn off + --warn-undefined-variables around expansion of SHELL and IFS. + * read.c (tilde_expand): Likewise for HOME. + (read_all_makefiles): Likewise for MAKEFILES. + * vpath.c (build_vpath_lists): Likewise for VPATH. + + * main.c (warn_undefined_variables_flag): New flag variable. + (switches): Add --warn-undefined-variables. + * make.h (warn_undefined_variables_flag): Declare it. + * expand.c (warn_undefined): New function. + (reference_variable): Call it if the variable is undefined. + (variable_expand): In substitution ref, call warn_undefined if the + variable is undefined. + + * default.c (default_pattern_rules): Add `%.c: %.w %.ch' and + `%.tex: %.w %.ch' rules. + (default_suffix_rules: .w.c, .w.tex): Pass three args: $< - $@. + (default_suffixes): Add `.ch'. + +Mon Jun 21 17:55:39 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * default.c (default_suffixes): Replace `.cweb' with `.w'. + (default_suffix_rules): Rename `.cweb.c' and `.cweb.tex' to `.w.c' + and `.w.tex'. + +Fri Jun 11 14:42:09 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile ($(bindir)/$(instname)): Add missing backslash. + +Thu Jun 10 18:14:08 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.67.4. + + * read.c (multi_glob): Don't free OLD and OLD->name in the + FOUND!=0 fork. Use new block-local variable F instead of + clobbering OLD. + + * ar.c (glob_pattern_p): New function, snarfed from glob/glob.c. + (ar_glob): Call it; return nil immediately if MEMBER_PATTERN + contains no metacharacters. + +Wed Jun 9 16:25:35 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * ar.c (ar_glob{_match,_alphacompare}): New function. + + * dep.h [! NO_ARCHIVES]: Declare it. + * read.c (multi_glob) [! NO_ARCHIVES]: Use it on archive member elts. + + * read.c (read_makefile): Pass flag (1) to parse_file_seq, not to + multi_glob (which doesn't take a 3rd arg). + * rule.c (install_pattern_rule): Likewise. + * default.c (set_default_suffixes): Here too. + * function.c (string_glob): Don't pass gratuitous arg to multi_glob. + + * read.c (parse_file_seq) [! NO_ARCHIVES]: Add post-processing + loop to translate archive refs "lib(a b)" into "lib(a) lib(b)". + +Mon Jun 7 19:26:51 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (installdirs): Actually pass directory names. + ($(bindir)/$(instname)): Test chgrp&&chmod exit status with `if'; + if it fails, echo a warning msg, but don't make the rule fail. + + * read.c (tilde_expand): New function, broken out of tilde_expand. + (multi_glob): Call it. + (construct_include_path): Expand ~ in directory names. + * dep.h: Declare tilde_expand. + * main.c (enter_command_line_file): Expand ~ at the start of NAME. + (main): Expand ~ in -C args. + * read.c (read_makefile): Expand ~ in FILENAME unless TYPE==2. + +Fri Jun 4 13:34:47 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * main.c (decode_env_switches): Use xmalloc instead of alloca for ARGS. + + * main.c (main): Put result of alloca in temporary variable with + simple assignment, to make SGI compiler happy. + +Thu Jun 3 20:15:46 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.67.3. + + * main.c (main): Before re-execing, remove intermediate files, and + print the data base under -p. Sexier debugging message. + + * implicit.c (pattern_search): Allocate an extra copy of the name + of a winning intermediate file when putting it in FOUND_FILES. + +Wed Jun 2 16:38:08 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (read_makefile): Pass flag (1) to parse_file_seq, not to + multi_glob (which doesn't take a 3rd arg). + + * dir.c (dir_contents_file_exists_p): When reading dirents, ignore + chars within D_NAMLEN that are NULs. + + * main.c (decode_switches): Don't savestring ARGV[0] to put it + into `other_args'. + For string switch, don't savestring `optarg'. + (main): Don't free elts of makefiles->list that are "-". + Use alloca'd rather than savestring'd storage for elts of + makefiles->list that are temporary file names. + * read.c (read_all_makefiles): Don't free *MAKEFILES. + * file.c (enter_file): Don't strip `./'s. + * main.c (enter_command_line_file): New function. + (main): Use it in place of enter_file for command-line goals from + other_files, and for old_files and new_files. + +Mon May 31 18:41:40 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.67.2. + + * compatMakefile (.SUFFIXES): Add .info. + ($(infodir)/$(instname).info): Find make.info* in cwd if there, + else in $srcdir. Use basename to remove dir name from installed name. + +Thu May 27 17:35:02 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * implicit.c (pattern_search): When interning FOUND_FILES, try + lookup_file first; if found, free the storage for our copy of the name. + +Wed May 26 14:31:20 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.67.1. + + * main.c (decode_switches): In usage msg, write `--switch=ARG' or + `--switch[=OPTARG]' rather than `--switch ARG' or `--switch [ARG]'. + +Mon May 24 16:17:31 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * rule.c (convert_suffix_rule): New function. + (convert_to_pattern): Use it instead of doing all the work here + several times. + For target suffix `.a', generate both the archive magic rule and + the normal rule. + + * compatMakefile (distclean): Remove stamp-config. + +Sat May 22 16:15:18 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.67. + + * file.c (remove_intermediates): Don't write extra space after `rm'. + + * main.c (struct command_switch.type): Remove `usage_and_exit'. + (print_usage_flag): New variable. + (switches: --help): Make type `flag', to set print_usage_flag. + (init_switches): Remove `usage_and_exit' case. + (decode_switches): Likewise. + (decode_switches): Print usage if print_usage_flag is set. + When printing usage, die with status of BAD. + (main): Die with 0 if print_version_flag. + +Fri May 21 16:09:28 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.66. + +Wed May 19 21:30:44 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (installdirs): New target. + (install): Depend on it. + +Sun May 16 20:15:07 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.65.2. + +Fri May 14 16:40:09 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * vpath.c (construct_vpath_list): In removal loop for DIRPATH==0, + set LASTPATH to PATH, not NEXT. + + * dir.c (read_dirstream): Break out of loop after incrementing + DS->buckets such that it reaches DIRFILE_BUCKETS; avoid trying to + dereference DS->contents->files[DIRFILE_BUCKETS]. + + * read.c (read_makefile): Clear no_targets after reading a + targetful rule line. + + * main.c (main): If print_version_flag is set, exit after printing + the version. + (switches): Change --version docstring to say it exits. + + * make.h [butterfly]: #undef POSIX. + +Wed May 12 15:20:21 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.65.1. + + * arscan.c (ar_scan) [! AIAMAG]: Don't declare LONG_NAME. + [AIAMAG]: Pass TRUNCATE flag arg to (*FUNCTION), always zero. + + * function.c (handle_function): Use fatal instead of + makefile_fatal when reading_filename is nil. + + * configure.in: Add AC_GETGROUPS_T. + * job.c (search_path): Use GETGROUPS_T in place of gid_t. + +Sun May 9 15:41:25 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.65. + +Fri May 7 18:34:56 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * function.c (handle_function): Fatal for unmatched paren. + +Thu May 6 16:13:41 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.64.3. + + * commands.c (handling_fatal_signal): New variable. + (fatal_error_signal): Set it. + * job.c (reap_children): Avoid nonreentrant operations if that is set. + * make.h: Declare handling_fatal_signal. + + * expand.c (reference_variable): New function, snippet of code + broken out of simple-reference case of variable_expand. + (variable_expand): Use it for simple refs. + (variable_expand): When checking for a computed variable name, + notice a colon that comes before the final CLOSEPAREN. Expand + only up to the colon, and then replace the pending text with a + copy containing the expanded name and fall through to subst ref + handling. + (variable_expand): Don't bother expanding the name if a colon + appears before the first $. + (expand_argument): Use alloca instead of savestring. + (variable_expand): For subst ref, expand both sides of = before + passing to [pat]subst_expand. Use find_percent instead of lindex + to check the lhs for a %. + +Wed May 5 14:45:52 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.64.2. + +Mon May 3 17:00:32 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * arscan.c (ar_name_equal) [AIAMAG]: Abort if TRUNCATED is nonzero. + + * read.c (read_makefile): Pass extra arg of 1 to parse_file_seq, + not to multi_glob. + +Thu Apr 29 19:47:33 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.64.1. + + * arscan.c (ar_scan): New local flag var LONG_NAME. Set it when + we read the member name in any of the fashions that allow it to be + arbitrarily long. Pass its negation to FUNCTION. + (describe_member): Take TRUNCATED from ar_scan and print it. + (ar_name_equal): Take new arg TRUNCATED; if nonzero, compare only + the first sizeof (struct ar_hdr.ar_name) chars. + (ar_member_pos): Take TRUNCATED from ar_scan, pass to ar_name_equal. + * ar.c (ar_member_date_1): Likewise. + +Wed Apr 28 21:18:22 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (reap_children): Before calling start_job_command to start + the next command line, reset C->remote by calling start_remote_job_p. + +Mon Apr 26 15:56:15 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * arscan.c (ar_scan): New local var NAMEMAP. + In loop, rename NAME to NAMEBUF; new var NAME is a pointer; new + flag IS_NAMEMAP. When extracting the member name, always put a + null at its end first. If the name is "//" or "/ARFILENAMES", set + IS_NAMEMAP. If we have already read in NAMEMAP, and NAME looks + like " /N", get full name from NAMEMAP+N. + Else if NAME looks like "#1/N", read N chars from the + elt data to be the full name. At end of loop, if IS_NAMEMAP, read + the elt's data into alloca'd NAMEMAP. + (ar_name_equal): #if 0 truncating code. + + * make.h: Don't declare vfork at all. It returns int anyway, + unless declared it; and we conflicted with some systems. + + * main.c (define_makeflags): If FLAGSTRING[1] is '-', define + MAKEFLAGS to all of FLAGSTRING, not &FLAGSTRING[1]. Don't want to + define it to something like "-no-print-directory". + Use %g format instead of %f for floating-valued things. + +Thu Apr 22 18:40:58 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * GNUmakefile (Makefile.in): Use a substitution ref on nolib-deps + to change remote-%.dep to remote-stub.dep. + +Wed Apr 21 15:17:54 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.64. + +Fri Apr 16 14:22:22 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (install): Remove - prefix from chgrp+chmod. + + * Version 3.63.8. + +Thu Apr 15 18:24:07 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * acconfig.h: New file; contains "#undef SCCS_GET" for autoheader. + * configure.in: If /usr/sccs/get exists, define SCCS_GET to that, + else to "get". + * default.c (default_variables): Set GET to macro SCCS_GET. + + * read.c (parse_file_seq): Take extra arg STRIP; strip `./' only + if nonzero. I hope this is the last time this argument is added + or removed. + (read_makefile): Pass it 1 when parsing include file names. + Pass it 1 when parsing target file names. + Pass it 1 when parsing static pattern target pattern names. + * rule.c (install_pattern_rule): Pass it 1 when parsing rule deps. + * default.c (set_default_suffixes): Pass it 1 when parsing + default_suffixes. + * function.c (string_glob): Pass it 0 here. + +Wed Apr 14 11:32:05 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * misc.c (log_access): New function. + ({init,user,make,child}_access): Call it. + (child_access): Abort if !access_inited. + + * main.c (switches: --no-print-directory): Use 1 instead of -1 for + single-letter option. + (init_switches, decode_switches, define_makeflags): An option with + no single-letter version is no longer indicated by a value of -1; + instead a value that is !isalnum. + (init_switches): Don't put such switches into the string, only + into the long_option table. + + * make.h [!NSIG] [!_NSIG]: #define NSIG 32. + + * job.c [HAVE_WAITPID]: Remove #undef HAVE_UNION_WAIT. AIX's + bsdcc defined WIF* to use union wait. + + * main.c (struct command_switch): Change member `c' to type int. + (switches): Make const. + (decode_switches): Use `const struct command_switch *'. + (define_makeflags): Likewise. + + * default.c (default_suffix_rules): Add `-o $@' to makeinfo rules. + +Mon Apr 12 12:30:04 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.63.7. + + * configure.in (AC_HAVE_HEADERS): Check for string.h and memory.h. + Removed AC_MEMORY_H. + * make.h [USG, NeXT]: Don't test these. + [HAVE_STRING_H]: Test this to include string.h and define ANSI_STRING. + [HAVE_MEMORY_H]: Test this instead of NEED_MEMORY_H. + [! ANSI_STRING]: Put decls of bcopy et al here. + [sparc]: Don't test this for alloca.h; HAVE_ALLOCA_H is sufficient. + [HAVE_SIGSETMASK]: Test this rather than USG. + [__GNU_LIBRARY__ || POSIX]: Don't #include again. + * main.c (main): Handle SIGCHLD if defined, and SIGCLD if defined. + It doesn't hurt to do both if they are both defined, and testing + USG is useless. + * dir.c: Rationalize directory header conditionals. + * arscan.c [HAVE_FCNTL_H]: Test this rather than USG || POSIX. + + * default.c (default_suffixes): Add `.txinfo'. + (default_suffix_rules): Add `.txinfo.info' and `.txinfo.dvi' rules. + + * variable.c (try_variable_definition): Replace RECURSIVE flag + with enum FLAVOR, which can be simple, recursive, or append. + Recognize += as append flavor. Set new variable VALUE in a switch + on FLAVOR. For append flavor, prepend the variable's old value. + If the variable was previously defined recursive, set FLAVOR to + recursive; if it was defined simple, expand the new value before + appending it to the old value. Pass RECURSIVE flag to + define_variable iff FLAVOR == recursive. + + * variable.c (try_variable_definition): Use alloca and bcopy for + NAME, instead of savestring. Might as well use stack storage + since we free it immediately anyway. + +Thu Apr 8 18:04:43 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (start_waiting_jobs): Move decl of JOB outside of loop. + + * main.c (define_makeflags): Rename `struct flag' member `switch' + to `cs', which is not a reserved word. + +Wed Apr 7 15:30:51 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (new_job): Call start_waiting_jobs first thing. + (start_waiting_job): Changed return type from void to int. + Return 0 when putting the child on the waiting_jobs chain. + (start_waiting_jobs): Don't check load and job_slots here. + Always take a job off the chain and call start_waiting_job on it; + give up and return when start_waiting_job returns zero. + + * main.c (define_makeflags: struct flag): Change member `char c' to + `struct command_switch *switch'. + (ADD_FLAG): Set that to CS instead of CS->c. + If CS->c is -1, increment FLAGSLEN for the long name. + When writing out FLAGS, handle FLAGS->switch->c == -1 and write + the long name instead. + + * compatMakefile (stamp-config): New target of old config.h rule. + Touch stamp-config after running config.status. + (config.h): Just depend on stamp-config, and have empty commands. + +Mon Apr 5 20:14:02 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c [HAVE_WAITPID]: #undef HAVE_UNION_WAIT. + + * configure.in (AC_HAVE_FUNCS): Check for psignal. + +Fri Apr 2 17:15:46 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * main.c (long_option_aliases): Remove "new"; it is already an + unambiguous prefix of "new-file". + +Sun Mar 28 16:57:17 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.63.6. + +Wed Mar 24 14:26:19 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * vpath.c (selective_vpath_search): When adding the + name-within-directory at the end of NAME, and we don't add a + slash, don't copy FILENAME in one char too far into NAME. + + * variable.c (define_automatic_variables): Find default_shell's + length with strlen, not numerology. + +Wed Mar 17 20:02:27 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * main.c (define_makeflags): Add the elts of a string option in + reverse order, so they come out right when reversed again. + +Fri Mar 12 15:38:45 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * compatMakefile (make.info): Use `-o make.info'. + +Thu Mar 11 14:13:00 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * compatMakefile (REMOTE): Set to @REMOTE@; change comments to + reflect new use. + (objs): Replace remote.o with remote-$(REMOTE).o. + (srcs): Replace remote.c with remote-$(REMOTE).c. + (remote.o): Rule removed. + + * configure.in (REMOTE): Subst this in Makefile et al; default "stub". + Use AC_WITH to grok --with-customs arg to set REMOTE=cstms. + * GNUmakefile (build.sh.in): Filter out remote-% from objs list. + * build.template (REMOTE): New var; set to @REMOTE@. + (objs): Add remote-${REMOTE}.o. + +Wed Mar 10 15:12:24 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.63.5. + + * implicit.c (pattern_search): Fix "dependent"->"dependency" in + "Rejecting impossible" -d msg. + + * file.c (file_hash_enter): New local vars {OLD,NEW}BUCKET. Store + mod'd values there; never mod {OLD,NEW}HASH. + +Mon Mar 8 13:32:48 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * remake.c [eta10]: Include instead of . + + * compatMakefile (VPATH): Set this to @srcdir@. + (srcdir): Set this to $(VPATH). + + * main.c (main): New local var DIRECTORY_BEFORE_CHDIR. Save in it + a copy of CURRENT_DIRECTORY after the first getcwd. Use it + instead of CURRENT_DIRECTORY when chdir'ing back before re-execing. + + * remake.c (notice_finished_file): Pass missing SEARCH arg to f_mtime. + + * read.c (read_makefile): Remove extraneous arg to parse_file_seq. + +Mon Feb 22 14:19:38 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile ($(infodir)/$(instname).info): Use , instead of / + as the sed delimiter char. + +Sun Feb 21 14:11:04 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.63.4. + + * rule.h (struct rule): Removed `subdir' member. + * rule.c (new_pattern_rule): No need to clear it. + (count_implicit_rule_limits): Set the `changed' flag in each dep + that refers to a nonexistent directory. No longer set rule-global + `subdir' flag with that information. + (print_rule_data_base): Don't record info on `subdir' flags. + + * implicit.c (pattern_search): Check the DEP->changed flag rather + than the (now gone) RULE->subdir flag. Also test CHECK_LASTSLASH; + if it is set, the file might exist even though the DEP->changed + flag is set. + + * rule.c (count_implicit_rule_limits): Pass "", not ".", as file + name arg to dir_file_exists_p to check for existence of directory. + + * implicit.c (pattern_search): Inside dep-finding loop, set + CHECK_LASTSLASH from the value recorded in CHECKED_LASTSLASH[I], + rather than computing it anew. + + * commands.c (set_file_variables): Must alloca space for PERCENT + and copy it, to avoid leaving the trailing `)' in the value. + + * misc.c (remove_comments): Fixed backslash-checking loop + condition to allow it to look at the first char on the line. + P2 >= LINE, not P2 > LINE. + + * compatMakefile ($(bindir)/$(instname)): Before moving $@.new to + $@, rm $@.old and mv $@ to $@.old. + + * variable.c (try_variable_definition): Take new args FILENAME and + LINENO. Fatal if the variable name is empty. + * read.c (read_makefile): Change callers. + * main.c (main): Likewise. + + * compatMakefile (group): Define to @KMEM_GROUP@, autoconf magic + that configure will replace with the group owning /dev/kmem. + +Mon Feb 8 14:26:43 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * vpath.c (vpath_search): Take second arg MTIME_PTR, pass thru to + selective_vpath_search. + (selective_vpath_search): Take second arg MTIME_PTR. + If the dir cache thinks a file exists, stat it to make sure, and + put the modtime in *MTIME_PTR. + * remake.c (library_search): Take second arg MTIME_PTR. + When we find a match, record its mtime there. + Pass MTIME_PTR through to vpath_search to do same. + (f_mtime): Pass &MTIME as new 2nd arg to {vpath,library}_search; + store it in FILE->last_mtime if set nonzero. + * implicit.c (pattern_search): Pass nil 2nd arg to vpath_search. + + * compatMakefile (remote.o): Prepend `$(srcdir)/' to `remote-*.c', + so globbing looks somewhere it will find things. + + * compatMakefile ($(infodir)/$(instname).info): Install `make.info*' + not `$(srcdir)/make.info*'; no need to use basename. + +Fri Feb 5 12:52:43 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.63.3. + + * compatMakefile (install): Add missing ;\s. + + Make -, @, and + prefixes on a pre-expanded command line affect + all lines in the expansion, not just the first. + * commands.h (struct commands): Replace `lines_recurse' member + with `lines_flags'. + (COMMANDS_{RECURSE,SILENT,NOERROR}): New macros, bits to set in + that flag byte. + * commands.c (chop_commands): Set `lines_flags' instead of + `lines_recurse'. Record not only + but also @ and - prefixes. + * remake.c (notice_finished_file): Check the COMMANDS_RECURSE bit + in FILE->cmds->lines_flags, rather than FILE->cmds->lines_recurse. + * job.c (start_job_command): Replaced RECURSIVE and NOPRINT local + var with FLAGS; initialize it to the appropriate `lines_flags' byte. + Set CHILD->noerror if the COMMANDS_NOERROR bit is set in FLAGS. + Set the COMMANDS_SILENT bit in FLAGS for a @ prefix. + + * remake.c (update_goal_chain): Set G->file to its prev after + checking for G being finished, since that check needs to examine + G->file. + + * configure.in (union wait check) [HAVE_WAITPID]: Try using + waitpid with a `union wait' STATUS arg. If waitpid and union wait + don't work together, we should not use union wait. + + * Version 3.63.2. + + * remake.c (update_goal_chain): When G->file->updated, move + G->file to its prev. We aren't finished until G->file is nil. + +Thu Feb 4 12:53:04 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * main.c (starting_directory): New global variable. + (main): Set it to cwd after doing -Cs. + (log_working_directory): Use it, rather than computing each time. + * make.h: Declare it. + + * compatMakefile (SHELL): Define to /bin/sh for losing Unix makes. + + * main.c (decode_env_switches): Allocate (1 + LEN + 1) words for + ARGV, rather than LEN words plus one byte. + +Wed Feb 3 18:13:52 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * compatMakefile ($(bindir)/$(instname)): Put - before + install_setgid command line, so its failure won't be an error. + (infodir): New variable. + (install): Depend on $(infodir)/$(instname).info. + ($(infodir)/$(instname).info): New target. + + * read.c (read_makefile): If FILENAMES is nil when we see a line + starting with a tab, don't treat it as a command. Just fall + through, rather than giving an error. + + * read.c (read_makefile): If the NO_TARGETS flag is set when we see a + command line, don't clear it before continuing. We want + subsequent command lines to be ignored as well. + + * job.c (new_job): Before expanding each command line, collapse + backslash-newline combinations that are inside var or fn references. + +Mon Feb 1 16:00:13 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * compatMakefile (exec_prefix): Default to $(prefix), not /usr/local. + + * compatMakefile (make.info): Pass -I$(srcdir) to makeinfo. + + * job.c [POSIX] (unblock_sigs): Made global. + [!POSIX] (unblock_sigs): Move defns to job.h. + * job.h [POSIX] (unblock_sigs): Declare. + +Sun Jan 31 19:11:05 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * read.c (read_makefile): In vpath parsing, after finding the + pattern token, take entire rest of line as the search path, not + just the next token. + + * compatMakefile (remote.o): Depend on remote-*.c. + +Thu Jan 28 16:40:29 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * commands.c (set_file_variables): Don't define any F or D versions. + * variable.c (define_automatic_variables): Define them here as + recursively-expanded variables that use the dir and notdir funcs. + + * variable.c (target_environment): In v_default case, don't export + o_default or o_automatic variables. + + * configure.in (union wait check): Remove ` and ' inside C code; + they confuse the shell script. + +Mon Jan 25 13:10:42 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.63.1. + + * vpath.c (construct_vpath_list): When skipping further processing + of an elt that is ".", don't also skip the code that pushes P past + the next separator. + + * compatMakefile (distclean): Don't remove make-*. + + * configure.in (HAVE_UNION_WAIT): Try to use WEXITSTATUS if it's + defined. If one cannot use WEXITSTATUS with a `union wait' + argument, we don't want to believe the system has `union wait' at all. + + * remake.c (update_file): Do nothing to print "up to date" msgs. + (update_goal_chain): Do it here instead. + Use the `changed' flag of each goal's `struct dep' to keep track + of whether files_remade (now commands_started) changed around a + call to update_file for that goal. + When a goal is finished, and its file's update_status is zero (i.e., + success or nothing done), test the `changed' flag and give an "up + to date" msg iff it is clear. + * make.h (files_remade): Renamed to commands_started. + * remake.c: Changed defn. + (update_goal_chain): Changed uses. + * job.c (start_job_command): Increment commands_started here. + (reap_children): Not here. + + * remake.c (update_goal_chain): Don't do anything with files' + `prev' members. update_file now completely handles this. + + * variable.c (target_environment): Don't expand recursive + variables if they came from the environment. + + * main.c (define_makeflags): For flags with omitted optional args, + store {"", 0} with ADD_FLAG. When constructing FLAGSTRING, a flag + so stored cannot have more flags appended to the same word. + +Fri Jan 22 14:46:16 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * variable.c (print_variable_set): In vars/bucket calculation, + don't spuriously multiply by 100. + + * Version 3.63. + + * job.c [!HAVE_UNION_WAIT] (WTERMSIG, WCOREDUMP, WEXITSTATUS): + Don't define if already defined. + + * remake.c (update_file): Don't keep track of the command_state before + calling update_file_1. Remove local variable COMMANDS_FINISHED, + and don't test it to decide to print the "is up to date" msg. + Testing for files_remade having changed should always be sufficient. + The old method lost when we are called in the goal chain run on a + makefile, because the makefile's command_state is already + `cs_finished' from the makefile chain run. + + * misc.c [HAVE_SETRE[GU]ID]: Test these to decl setre[gu]id. + + * configure.in: Rewrote wait checking. + Use AC_HAVE_HEADERS to check for . + Use AC_HAVE_FUNCS to check for waitpid and wait3. + Use a compile check to test just for `union wait'. + * job.c: Rewrote conditionals accordingly. + [HAVE_WAITPID]: Test this only to define WAIT_NOHANG. + [HAVE_WAIT3]: Likewise. + [HAVE_UNION_WAIT]: Test this to define WAIT_T and W*. + + * configure.in: Set CFLAGS and LDFLAGS before all checks. + + * dir.c: Add static forward decls of {open,read}_dirstream. + +Thu Jan 21 17:18:00 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.31. + + * job.c [NGROUPS_MAX && NGROUPS_MAX==0]: #undef NGROUPS_MAX. + + * compatMakefile (CFLAGS, LDFLAGS): Set to @CFLAGS@/@LDFLAGS@. + * build.template (CFLAGS, LDFLAGS): Same here. + * configure.in: AC_SUBST(CFLAGS) and LDFLAGS. + Set them to -g if not defined in the environment. + + * remake.c (library_search): Use LIBNAME consistently, setting it + only once, to be the passed name sans `-l'. + Pass new var FILE to be modified by vpath_search. + +Mon Jan 18 14:53:54 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.30. + + * job.c (start_waiting_jobs): Return when job_slots_used is equal to + job_slots. + + * configure.in: Add AC_CONST for the sake of getopt. + + * read.c (read_makefile): Continue after parsing `override' + directive, rather than falling through to lossage. + Check for EOL or blank after "override define". + + * compatMakefile (.c.o, remote.o): Put $(CFLAGS) after other switches. + +Fri Jan 15 12:52:52 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.29. + + * main.c (define_makeflags): After writing everything into + FLAGSTRING, only back up two chars if [-1] is a dash, meaning we + just wrote " -". Always terminate the string at *P. + + * remake.c (library_search): When constructing names in std dirs, + use &(*LIB)[2] for the stem, not LIBNAME (which points at the + buffer we are writing into!). + +Thu Jan 14 13:50:06 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (read_makefile): Set IN_IGNORED_DEFINE for "override + define" when IGNORING is true. + + * compatMakefile (distclean): Remove config.status and build.sh. + +Wed Jan 13 16:01:12 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.28. + + * misc.c (xmalloc, xrealloc): Cast result of malloc/realloc to + (char *). + + * arscan.c (ar_scan) [AIAMAG]: Cast read arg to (char *). + + * variable.c (define_automatic_variables): Override SHELL value for + origin o_env_override as well as o_env. + + * GNUmakefile (build.sh.in): Don't replace %globobjs%. Instead, + add the names of the glob objects (w/subdir) to %objs%. + * build.template (globobjs): Removed. + Take basename of $objs before linking. + +Tue Jan 12 12:31:06 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.27. + + * configure.in (AC_OUTPUT): Also edit build.sh. + * build.template: New file. + * GNUmakefile (build.sh.in): New rule to create it from build.template. + (make-$(version).tar.Z): Depend on build.sh.in. + + * main.c (die): Call print_data_base if -p. + (main): Don't call it here. + + * compatMakefile (defines): Add @DEFS@. configure should turn this + into -DHAVE_CONFIG_H. + +Mon Jan 11 14:39:23 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.26. + + * misc.c (init_access): Surround with #ifdef GETLOADAVG_PRIVILEGED. + ({make,user,child}_access) [! GETLOADAVG_PRIVILEGED]: Make no-op. + * compatMakefile (install_setgid): New var, set by configure. + (install): Install setgid $(group) only if $(install_setgid) is true. + +Fri Jan 8 15:31:55 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (load_too_high): If getloadavg fails with errno==0, give a + message saying that load limits are not supported. + + * vpath.c (construct_vpath_list): Rewrote path deletion code to + not try to use PATH's next link after freeing PATH. + + * main.c (define_makeflags): Rewritten; now handles string-valued + option, and has no arbitrary limits. + (switches): Set `toenv' flag for -I and -v. + + * main.c (decode_env_switches): Cast return value of alloca to char *. + + * misc.c (child_access) [HAVE_SETREUID, HAVE_SETREGID]: Use + setre[gu]id in place of set[gu]id. + +Wed Jan 6 15:06:12 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * main.c (main): Define MAKEOVERRIDES, MAKE, and MAKE_COMMAND with + origin o_default. + + * make.h [POSIX]: Don't test this to use ANSI_STRING. + Testing STDC_HEADERS should be sufficient. + + * job.h: Declare start_waiting_jobs. + + * read.c (read_makefile): Add missing parens in if stmt that find + conditional directives. + + * main.c (main): Declare init_dir. + * implicit.c (pattern_search): Always use two % specs in a + DEBUGP2, and always pass two non-nil args. + Cast field width args to int. + Add missing parens in !RULE->subdir if stmt. + * function.c (expand_function, patsubst_expand): Add parens around + assignments inside `while' stmts. + * commands.c (print_commands): Cast field width args to int. + + * read.c (do_define): Cast return value of alloca to (char *). + + * main.c (init_switches): New function, broken out of decode_switches. + (decode_switches): Take new arg ENV. If set, ignore non-option + args; print no error msgs; ignore options with clear `env' flags. + (decode_env_switches): Rewritten to chop envar value into words + and pass them to decode_switches. + (switches): Set `env' flag for -I and -v. + + * dir.c (init_dir): Cast free to __glob_closedir_hook's type. + +Tue Jan 5 14:52:15 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.25. + + * job.c [HAVE_SYS_WAIT || !USG]: Don't #include and + . interacts badly with , and + we don't need these anyway. + + * configure.in (AC_HAVE_FUNCS): Check for setre[gu]id. + * misc.c ({user,make}_access): Test #ifndef HAVE_SETRE[GU]ID, not + #ifdef POSIX || USG. SunOS 4.1 is supposedly POSIX.1 compliant, + but its set[gu]id functions aren't; its setre[gu]id functions work. + + * misc.c ({user,make,child}_access): Give name of caller in error msgs. + + * job.c (load_too_high): Say "cannot enforce load limit" in error msg. + + * configure.in: Call AC_PROG_CC. + * compatMakefile (CC): Define to @CC@ (autoconf magic). + + * compatMakefile: Add .NOEXPORT magic target. + +Mon Jan 4 17:00:03 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * main.c (print_version): Updated copyright to include 93. + +Thu Dec 31 12:26:15 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * make.h [_AIX]: Don't declare alloca. + +Tue Dec 29 13:45:13 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.24. + + * compatMakefile (objs): Add signame.o. + (srcs): Add signame.[ch]. + + * compatMakefile (srcs): Add config.h.in. + (remote.o): Add -I. before -I$(srcdir). + +Mon Dec 28 15:51:26 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.23. + + * read.c (readline): Fatal when LEN==0, indicating a line starting + with a NUL. + (readline): Take new arg LINENO, for use in error msg. + (read_makefile, do_define): Pass it. + + * compatMakefile (glob/libglob.a): Pass -DHAVE_CONFIG_H in CPPFLAGS. + (.c.o): Add -I. before -I$(srcdir). + +Wed Dec 23 12:12:04 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (read_makefile): Accept and ignore a rule with no targets. + + * compatMakefile (ALLOCA_SRC): New variable. + (srcs): Include its value. + + * read.c (struct conditional): Renamed member `max_ignoring' to + `allocated'; added new member `seen_else'. + (conditional_line): Initialize seen_else flag when starting an `if...'; + set it when we see an `else'; fatal if set when we see `else'. + (read_makefile): Fatal "missing `endif'" if there are any pending + conditionals, not just if we are still ignoring. + +Tue Dec 22 15:36:28 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (manext): Set to 1, not l. + ($(mandir)/$(instname).$(manext)): Use $(srcdir) for make.man in cmds. + + * file.c (file_hash_enter): Don't call uniquize_deps here. + * read.c (record_files): Likewise. + * implicit.c (pattern_search): Likewise. + * commands.c (set_file_variables): Call it only here. + + * default.c (default_variables) [__convex__]: FC=fc. + + * variable.c (target_environment): Expand the values of recursively + expanded variables when putting them into the environment. + * expand.c (recursively_expand): Made global. + * make.h (recursively_expand): Declare it. + + * remake.c (check_dep): Set FILE->command_state to cs_deps_running + when a dep's command_state is cs_running or cs_deps_running. + + * read.c (read_makefile): Changed error msg for spurious cmds to + not say "first target". + +Sun Dec 20 17:56:09 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * configure.in: Do AC_CONFIG_HEADER right after AC_INIT. + * make.h (HAVE_CONFIG_H): #include "config.h", then #define this. + * compatMakefile (config.h, configure, config.h.in): New rules. + (defines): Removed @DEFS@. + +Thu Dec 17 16:11:40 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (realclean): Just depend on distclean; no cmds. + (distclean): Do what realclean did before; also remove Makefile and + config.h; don't remove configure. + (info, dvi): New targets; depend on make.{info,dvi}. + (doc): Removed target. + (MAKEINFO, TEXI2DVI): New vars. + (make.info, make.dvi): Use them instead of explicit cmds. + +Wed Dec 16 16:25:24 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * configure.in: Added fcntl.h to AC_HAVE_HEADERS. getloadavg cares. + +Wed Dec 9 15:21:01 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * main.c (long_option_aliases): Add --new-file alias for -W. + + * default.c (default_variables): Change all C++ to CXX and C++FLAGS + to CXXFLAGS. + + * read.c (do_define): Expand the variable name before using it. + + * main.c (main): Define variable "MAKE_COMMAND" to argv[0]; + define "MAKE=$(MAKE_COMMAND) $(MAKEOVERRIDES)" always. + + * remake.c (library_search): Search for libNAME.a in cwd; look in + vpath before looking in standard dirs, not after. + Changed order of std dirs to: /lib, /usr/lib, ${prefix}/lib. + +Mon Nov 23 14:57:34 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * default.c (default_pattern_rules, default_terminal_rules): Added + brackets around initializers. + + * variable.c (try_variable_definition): Don't check for LINE[0]=='\t'. + (try_variable_definition): Expand the name before defining the var. + + * job.c (init_siglist): Removed function. + Removed decl of `sys_siglist'. + * make.h [! HAVE_SYS_SIGLIST]: #include "signame.h". + [HAVE_SYS_SIGLIST && !SYS_SIGLIST_DECLARED]: Declare sys_siglist + only under these conditions. + * main.c (main): Don't declare init_siglist. + (main) [! HAVE_SYS_SIGLIST]: Call signame_init instead of init_siglist. + +Wed Nov 18 14:52:51 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (record_files): Don't try to append to FIRSTDEPS if it's + nil; instead just set it to MOREDEPS. + +Mon Nov 16 17:49:17 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * vpath.c (construct_vpath_list): Initialize P to DIRPATH before + loop that sets MAXELEM. + +Fri Nov 13 18:23:18 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.22. + +Thu Nov 12 15:45:31 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (start_job_command): Under -n, increment files_remade after + processing (i.e., printing) all command lines. + +Tue Nov 10 15:33:53 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * read.c (record_files): Append new deps if this rule has no + commands; prepend them to existing deps if this rule has no commands. + + * dir.c (open_dirstream): Return nil if DIR->contents->files is nil. + + * read.c (parse_file_seq): Removed last arg STRIP. Always strip `./'s. + (read_makefile): Changed callers. + * function.c (string_glob): Likewise. + * rule.c (install_pattern_rule): Likewise. + +Mon Nov 9 17:50:16 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * remake.c (files_remade): Made global. + (notice_finished_file): Don't increment files_remade here; this + function gets called in many situations where no remaking was in + fact done. + * job.c (reap_children): Do it here instead, when we know that + actual commands have been run for the file. + * make.h (files_remade): Declare it. + +Thu Nov 5 18:26:10 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * vpath.c (construct_vpath_list): Allow blanks as well as colons to + separate elts in the search path. + + * read.c (read_makefile): Don't fatal on extra tokens in `vpath'. + The search path can contain spaces now. + +Tue Nov 3 20:44:32 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * compatMakefile (check): New target; no-op. + + * file.c (file_hash_enter): Mod OLDHASH by FILE_BUCKETS after + testing for OLDHASH==0 but before using the value. + (rename_file): Don't mod OLDHASH by FILE_BUCKETS before passing it + to file_hash_enter. + + * file.c (rename_file): Notice when OLDFILE->cmds came from + default.c, and don't try to print ->filename in that case. + +Sun Oct 25 01:48:23 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * remake.c (update_file): Don't process F->also_make here. + (notice_finished_file): Don't process FILE->also_make if no attempt + to update FILE was actually made. + Fixed to call f_mtime directly to refresh their modtimes. + +Sat Oct 24 22:08:59 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (find_percent): Don't increment P again after skipping + an escaped %. + + * expand.c (variable_expand): In call to patsubst_expand, don't + find `%'s ourselves; let that function do it. + + * read.c (read_makefile: record_waiting_files): Don't call + record_files if FILENAMES is nil. + (read_makefile): All alternatives in the parsing, except for rule + lines, fall through to the end of the loop. At the end of the + loop, do record_waiting_files so we notice later spurious cmds. + +Fri Oct 23 15:57:37 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * variable.c (define_automatic_variables): Free old value of SHELL + before replacing it. + +Thu Oct 15 18:57:56 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * compatMakefile (.c.o): Add -I$(srcdir)/glob to flags. + + * dir.c (open_dirstream): Cast return value to __ptr_t. + + * default.c (default_variables: "GET") [_IBMR2]: Use USG defn. + + * make.h (MAXPATHLEN): Moved out of #ifndef POSIX. + (GET_PATH_MAX): Moved from #ifdef POSIX to #ifdef PATH_MAX #else. + Define as (get_path_max ()). + [! PATH_MAX] (NEED_GET_PATH_MAX): Define. + [! PATH_MAX] (get_path_max): Declare fn. + * misc.c [NEED_GET_PATH_MAX] (get_path_max): New function. + +Mon Oct 12 13:34:45 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.21. + + * job.c (sys_siglist): Only declare #ifndef SYS_SIGLIST_DECLARED. + * make.h [! HAVE_SYS_SIGLIST && HAVE__SYS_SIGLIST]: #define + SYS_SIGLIST_DECLARED. + + * dir.c (file_impossible): When initializing DIR->contents, set + DIR->contents->dirstream to nil. + + * compatMakefile (GLOB): Define new variable. + (objs): Use it, rather than glob/libglob.a explicitly. + + * read.c (parse_file_seq): When stripping "./", handle cases like + ".///foo" and "./////". + * file.c (lookup_file, enter_file): Likewise. + +Sun Oct 11 17:00:35 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * dir.c (struct dirstream, {open,read}_dirstream): New + data type and functions to read a directory sequentially. + (init_dir): New function to hook it into glob. + * main.c (main): Call init_dir. + + * compatMakefile (objs): Added glob/libglob.a. + * configure.in: Remove code to test for glob. + +Fri Oct 9 12:08:30 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (record_files): Generalized test for NAME pointing + somewhere into F->name. + + * variable.c (define_variable_in_set): Free old value when replacing. + + * read.c (do_define): Free the linebuffer before returning. + (record_files): When clearing .SUFFIXES deps, free their data. + (multi_glob): Free OLD and its data when replacing it with results + of glob run. + + * commands.c (set_file_variables): Use alloca in place of xmalloc + for temp space for $^, $?, et al. + + * dir.c (struct directory): New member `contents' replaces `files' + and `dirstream'. + (struct directory_contents): New type. + (directories_contents): New hash table. + (dir_struct_file_exists_p): Take a struct directory_contents. + (dir_file_exists_p): Pass it the `contents' member of the dir found. + (dir_struct_file_exists_p): Renamed to dir_contents_file_exists_p; + made static. Return 0 if DIR is nil (meaning it couldn't be stat'd). + (dir_file_exists_p, find_directory): Change all callers. + (file_impossible): Use DIR->contents, initializing it if nil. + (print_dir_data_base): Use DIR->contents, and print out device and + inode numbers with each directory. + + * Changes for performance win from John Gilmore : + * dir.c (DIRECTORY_BUCKETS): Increase to 199. + (DIRFILE_BUCKETS): Decrease to 107. + (find_directory): Allocate and zero a multiple of + sizeof (struct dirfile *), not of sizeof (struct dirfile). + (dir_struct_file_exists_p): New function, nearly all code from + dir_file_exists_p. + (dir_file_exists_p): Just call find_directory+dir_struct_file_exists_p. + * vpath.c (selective_vpath_search): Remove redundant + dir_file_exists_p call. + + * configure.in: Comment out glob check; always use our code. + +Fri Oct 2 19:41:20 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * make.h [! HAVE_SYS_SIGLIST && HAVE__SYS_SIGLIST]: #define + HAVE_SYS_SIGLIST; after doing #define sys_siglist _sys_siglist, we + do have it. + +Wed Sep 30 19:21:01 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * main.c (main): Don't do -w automatically if -s. + +Tue Sep 29 21:07:55 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * main.c (printed_version): Move variable inside print_version. + (print_version): Return immediately if printed_version is set. + (die): Don't test printed_version here. + (decode_switches): Under -v, do print_version before giving usage. + (DESCRIPTION_COLUMN): New macro. + (decode_switches): Use it when printing the usage message. + Leave at least two spaces between options and their descriptions. + +Fri Sep 25 13:12:42 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.20. + +Wed Sep 16 16:15:22 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * read.c (read_makefile): Save errno value from trying to open + FILENAME, and restore it before erring; otherwise we get the errno + value from the last elt of the search path. + +Tue Sep 15 15:12:47 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * main.c (long_option_aliases): Add --stop for -S. + + * read.c (word1eq): Do strncmp before dereferencing someplace that + may be out in space. + +Wed Sep 9 15:50:41 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * remake.c (notice_finished_file): If all the command lines were + recursive, don't do the touching. + + * job.c (start_job_command): Don't check for + here. + * commands.c (chop_commands): Do it here instead. + + * default.c (default_terminal_rules): Prepend + to cmds for RCS. + +Wed Sep 2 17:53:08 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * compatMakefile (objs): Include $(ALLOCA). + + * make.h [CRAY]: Move #define signal bsdsignal to before #includes. + +Thu Aug 27 17:45:43 1992 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * read.c (default_include_directories): Add INCLUDEDIR first. + * compatMakefile (includedir): Define. + (defines): Add -D for INCLUDEDIR="$(includedir)". + + * read.c (read_makefile): Grok multiple files in `include'; + globbing too. + + * remake.c (library_search): New function. + (library_file_mtime): Remove function. + (f_mtime): Use library_search instead of library_file_mtime. + * compatMakefile (libdir): Define. + (defines): Add -D for LIBDIR="$(libdir)". + * make.texinfo (Libraries/Search): Document change. + + * file.c (rename_file): Fix file_hash_enter call with missing arg. + +Wed Aug 26 17:10:46 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.19. + + * main.c (main): Set command_state to cs_finished for temp files + made for stdin makefiles. + + * main.c (decode_switches): Don't tell getopt to return non-option + args in order. + Ignore an argument of `-'. + +Thu Aug 20 13:36:04 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * job.c (start_job_command): If (touch_flag && !RECURSIVE), ignore + the command line and go to the next. + (notice_finished_file): Under -t, touch FILE. + * remake.c (remake_file): Don't touch it here. + +Wed Aug 19 16:06:09 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * function.c (pattern_matches): Use temporary for strlen (WORD) + instead of two function calls. + + * compatMakefile (LOAD_AVG): Remove variable and comments. + +Tue Aug 18 14:58:58 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * make.texinfo (Running): Node renamed to `make Invocation'. + +Fri Aug 14 12:27:10 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * arscan.c (ar_name_equal): Don't compare [MAX-3..MAX] if + NAMELEN != MEMLEN. + +Thu Aug 13 17:50:09 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.18. + + * main.c: Don't #include ; make.h already does. + +Mon Aug 10 17:03:01 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * implicit.c (pattern_search): Fixed copying of suffix when building + also_make elts. + + * function.c (expand_function: `shell'): Make sure BUFFER is + null-terminated before replacing newlines. + + * compatMakefile (mandir): Use man$(manext), not always manl. + +Sun Aug 2 01:42:50 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * rule.c (new_pattern_rule): Not static. + * rule.h: Declare it. + + * file.c (file_hash_enter): New function, most code from rename_file. + (rename_file): Call it. + * file.h (file_hash_enter): Declare it. + + * dep.h: Doc fix. + +Thu Jul 30 15:40:48 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * main.c (decode_switches): Handle usage_and_exit when building + long options vector. + + * default.c (default_terminal_rules): Make RCS rules use $(CHECKOUT,v). + (default_variables): Define CHECKOUT,v (hairy). + + * make.h [!HAVE_SYS_SIGLIST && HAVE__SYS_SIGLIST]: #define + sys_siglist to _sys_siglist. + +Sun Jul 26 16:56:32 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * NEWS: Add header and tail copyright info like Emacs NEWS. + + * make.h [ANSI_STRING]: Don't #define index, rindex, bcmp, bzero, + bcopy if already #define'd. + [STDC_HEADERS] (qsort, abort, exit): Declare here. + [! __GNU_LIBRARY__ && !POSIX]: Not here. + + * make.h [_AIX]: #pragma alloca first thing. + + * job.c (start_waiting_job): Set the command_state to cs_running + when we queue a job on waiting_jobs. + +Fri Jul 24 02:16:28 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * variable.c (define_automatic_variables): Use "" instead of nil + for empty value. + +Thu Jul 23 22:31:18 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.17. + + * main.c (struct command_switch.type): Add alternative usage_and_exit. + (command_switches): Add -h/--help. + +Thu Jul 16 14:27:50 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * GNUmakefile (make-$(version).tar.Z): Include NEWS, not CHANGES. + * README.template: Mention NEWS. + * CHANGES: Renamed to NEWS. + + * main.c [! STDC_HEADERS] [sun]: Don't declare exit. + +Tue Jul 14 18:48:41 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * main.c (main): Set -o files' command_states to cs_finished. + + * rule.c (count_implicit_rule_limits): Decrement num_pattern_rules + when tossing a rule. + + * main.c (main): Use alloca only in simple local var assignment, + for braindead SGI compiler. + + * rule.c (print_rule_data_base): Barf if num_pattern_rules is + inconsistent with the number computed when listing them. + +Mon Jul 13 17:51:53 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * commands.c (set_file_variables): For $? and $^ elts that are archive + member refs, use member name only. + +Fri Jul 10 00:05:04 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * variable.h (struct variable.export): Add new alternative v_ifset. + * variable.c (target_environment): Check for it. + (define_automatic_variables): Set it for MAKEFILES. + +Thu Jul 9 21:24:28 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (objs): Remove getloadavg.o; $(extras) gets it. + (remote.o): Use $(srcdir)/remote.c, not $remote.c<. + (distclean, mostlyclean): New targets. + +Tue Jul 7 19:12:49 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.16. + + * compatMakefile (config.status): Remove rule. + + * job.c (start_waiting_job): Free C after using C->file, not before. + +Sat Jul 4 20:51:49 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * commands.c, job.c, main.c, make.h, remote-cstms.c: Use #ifdef + HAVE_* instead of #ifndef *_MISSING. + * configure.in: Use AC_HAVE_FUNCS instead of AC_MISSING_FUNCS (gone). + +Thu Jul 2 18:47:52 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * main.c (main): makelevel>0 or -C implies -w. + +Tue Jun 30 20:50:17 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * file.c, job.c, function.c: Don't #include . + make.h: Do it here instead. + * arscan.c (ar_member_touch): Don't declare errno. + +Thu Jun 25 17:06:55 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * GNUmakefile (make-$(version).tar.Z): Depend on INSTALL, configure.in. + + * remake.c (update_file): If commands or deps are running after + update_file_1 returns, break out of the :: rule (->prev) loop and + just return. + + * job.c (job_next_command): New function; code from start_job. + (start_job_command): Renamed from start_job. Call job_next_command + and recurse for empty command lines and -n. + (start_waiting_job): Call start_job_command, not start_job. + (new_job): Call job_next_command to prime the child structure, and + then call start_waiting_job. + (reap_children): Use job_next_command and start_job_command. + (start_waiting_job): Call start_remote_job_p here, and store its + result in C->remote. If zero, check the load average and + maybe put C on waiting_jobs. + (start_job_command): Test CHILD->remote rather than calling + start_remote_job_p. Don't do load avg checking at all here. + + * main.c (main): Don't handle SIGILL, SIGIOT, SIGEMT, SIGBUS, + SIGSEGV, SIGFPE or SIGTRAP. + + * compatMakefile (glob/libglob.a): Don't pass srcdir to sub-make. + configure will set it in glob/Makefile. + +Wed Jun 24 19:40:34 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * dir.c [DIRENT] (direct): Don't define to dirent. + [! DIRENT] (direct): Define to dirent. + (dir_file_exists_p): Use struct dirent instead of struct direct. + + * make.h (getcwd): No space between macro and ( for args! + + * job.c (start_job): Don't put the job on waiting_jobs if + job_slots_used==0. + + * make.texinfo (Missing): Shortened title. + +Tue Jun 23 18:42:21 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * file.c (remove_intermediates): Print "rm" commands under -n. + +Mon Jun 22 16:20:02 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.15. + +Fri Jun 19 16:20:26 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * arscan.c [M_UNIX]: #undef M_XENIX. + +Wed Jun 17 17:59:28 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * default.c (default_terminal_rules): Put @ prefix on RCS cmds. + +Tue Jun 16 19:24:17 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile (getloadavg.o): Removed special rule. + (CFLAGS): Don't include $(defines). + (.c.o): Define suffix rule. + (glob/libglob.a): Pass CPPFLAGS=$(defines) to submake. + (GETOPT_SRC, srcs, tagsrcs): Prefix files with $(srcdir)/. + + * arscan.c (ar_name_equal): Moved local vars inside #if'd block. + + * make.h (max): Removed. + * expand.c (variable_buffer_output): Don't use it. + + * compatMakefile (INSTALL): Define. + (Makefile): New rule to make from Makefile.in. + (srcdir): Define. + (VPATH): Define. + (getloadavg.o, remote.o): Use autoconf $foo< hack. + + * commands.c (fatal_error_signal): Removed return. + +Mon Jun 15 17:42:51 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.14. + + * make.texinfo (Summary): New node. + (Special Targets): Mention .EXPORT_ALL_VARIABLES here. + + * variable.c (max): Moved to make.h. + + * compatMakefile (objs, srcs): Added ar & arscan. + + * job.c (start_waiting_job): New function, 2nd half of new_job. + (new_job): Call it. + (start_waiting_jobs): New function. + * remake.c (update_goal_chain): Call start_waiting_jobs at the top + of the main loop. + * compatMakefile (objs, srcs): Removed load, added getloadavg. + +Fri Jun 12 19:33:16 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * job.c (load_too_high): New function. Uses getloadavg. + (waiting_jobs): New variable. + (start_job): Don't call wait_to_start_job. Instead, if + load_too_high returns nonzero, add the child to the + `waiting_jobs' chain and return without starting the job. + +Thu Jun 11 00:05:28 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * expand.c (variable_buffer_output): Made global again. + * variable.h: And declare it. + + * arscan.c (PORTAR): Define for all systems if PORT5AR is not defined. + (AR_NAMELEN, AR_TRAILING_SLASH): Removed. + (ar_scan): Don't use it. Don't #ifdef AR_TRAILING_SLASH; just look + for a slash in the archive at run time. + (ar_name_equal): Rewrote .o hacking to not use AR_NAMELEN, and to + cope with trailing-slash and non-trailing-slash archives. + + * main.c (main) [! SETVBUF_REVERSED]: Test this instead of USGr3 et al. + [SETVBUF_REVERSED]: Always allocate a buffer ourselves. + + * load.c (load_average) [sgi]: Use sysmp call. + + * compatMakefile (INSTALL_DATA, INSTALL_PROGRAM): Define. + ($(bindir)/$(instname), $(mandir)/make.$(manext)): Use them. + + * make.h [HAVE_VFORK_H]: #include . + (vfork, VFORK_NAME): Don't define. + * job.c (start_job): Use "vfork" in place of VFORK_NAME. + + * make.h [HAVE_LIMITS_H, HAVE_SYS_PARAM_H]: If #define'd, #include + the each file. Rearranged PATH_MAX hacking. + * job.c: Rearranged NGROUPS_MAX hacking. + + * remake.c (fstat, time): Don't declare. + + * compatMakefile (defines): Value is @DEFS@. + (LOADLIBES): Value is @LIBS@. + (extras): Value is @LIBOBJS@. + (ARCHIVES, ARCHIVES_SRC, ALLOCASRC): Removed. + * arscan.c, ar.c: Surround body with #ifndef NO_ARCHIVES. + + * misc.c [! HAVE_UNISTD_H]: Test instead of !POSIX to decl get*id. + + * make.h [GETCWD_MISSING]: Test instead of !USG && !POSIX et al. + (getcwd): Just declare if present. If not, declare as a macro + using getwd, and declare getwd. + [PATH_MAX] (GET_PATH_MAX): #define to PATH_MAX. + * main.c (main, log_working_directory): Use getcwd instead of getwd. + + * main.c (main) [SETLINEBUF_MISSING]: Test this instead of USG. + + * make.h (SIGHANDLER, SIGNAL): Removed. + (RETSIGTYPE): Define if not #define'd. + * main.c (main): Use signal in place of SIGNAL. + + * main.c [SYS_SIGLIST_MISSING]: Test instead of USG. + + * job.c (search_path) [GETGROUPS_MISSING]: Test instead of USG. + [HAVE_UNISTD_H]: Test instead of POSIX to not decl getgroups. + + * main.c [! HAVE_UNISTD_H]: Test instead of !POSIX to decl chdir. + [! STDC_HEADERS]: Test instead of !POSIX to decl exit & atof. + + * job.c (child_handler), commands.c (fatal_error_signal): Return + RETSIGTYPE instead of int. + * main.c (main): Declare fatal_error_signal and child_handler here + to return RETSIGTYPE; removed top-level decl of former. + + * commands.c (fatal_error_signal), job.c (unblock_sigs, start_job), + main.c [SIGSETMASK_MISSING]: Test this instead of USG. + +Wed Jun 10 22:06:13 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * job.c [HAVE_WAITPID]: Test this instead of USG. + [! HAVE_UNISTD_H]: Test this instead of !POSIX to declare misc fns. + (GID_T): Don't #define. + (search_path): Use gid_t instead of GID_T. + [GETDTABLESIZE_MISSING, SYS_SIGLIST_MISSING, DUP2_MISSING]: Test + these individually instead of USG for all. + * make.h (ctime): Don't declare. #include time.h instead. + [HAVE_UNISTD_H]: #include and #define POSIX #ifdef + _POSIX_VERSION. + * dir.c [__GNU_LIBRARY__] (D_NAMLEN): Define to use d_namlen member. + * make.h [NEED_MEMORY_H]: Only include memory.h #ifdef this. + + * arscan.c: Removed #ifdef mess about string.h et al. + Just #include make.h instead. + * make.h (fstat, atol): Declare. + + * commands.c (fatal_error_signal): Don't use sigmask to check for + propagated signals; use ||s instead. + (PROPAGATED_SIGNAL_MASK): Removed. + (fatal_error_signal) [POSIX]: Use sigprocmask in place of sigsetmask. + + * variable.c (variable_buffer, variable_buffer_length, + initialize_variable_output, variable_output): Moved to expand.c; + made all static. + (struct output_state, save_variable_output, + restore_variable_output): Removed. + * expand.c (initialize_variable_output): Put a NUL at the beginning + of the new buffer after allocating it. + (allocated_variable_expand_for_file): Don't use + {save,restore}_variable_output. Do it by hand instead, keeping + state on the stack instead of malloc'ing it. + (allocated_variable_expand): Removed. + * variable.h (allocated_variable_expand): Define here as macro. + (variable_buffer_output, initialize_variable_output, + save_variable_output, restore_variable_output): Removed decls. + + * read.c (conditional_line): For an if cmd, if any elt of the + conditionals stack is ignoring, just push a new level that ignores + and return 1; don't evaluate the condition. + +Thu Jun 4 21:01:20 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * main.c (main): Put #ifdef's around frobbing SIGSYS and SIGBUS. + + * job.c (getdtablesize): Don't declare or #define if already #define'd. + +Wed Jun 3 23:42:36 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * file.c (snap_deps): If `.EXPORT_ALL_VARIABLES' is a target, set + export_all_variables. + * make.texinfo (Variables/Recursion): Document .EXPORT_ALL_VARIABLES. + +Tue Jun 2 21:08:35 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.13. + + * commands.c (set_file_variables): Calculate length for ^D and ?D + individually, making sure to give them at least enough space for "./". + + * make.h [CRAY]: #define signal to bsdsignal. + + * default.c (default_variables) [CRAY]: Define PC, SEGLDR, + CF77PPFLAGS, CF77PP, CFT, CF, and FC. + + * arscan.c (AR_HDR_SIZE): Define to sizeof (struct ar_hdr), if it + wasn't defined by . + +Thu May 28 00:56:53 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.12. + +Tue May 26 01:26:30 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * rule.c (new_pattern_rule): Initialize LASTRULE to nil, not + pattern_rules. + +Mon May 25 19:02:15 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * main.c (decode_switches): Initialize all the long_option elt members. + +Thu May 21 16:34:24 1992 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * make.texinfo (Text Functions): Correct filter-out description. + +Tue May 19 20:50:01 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * compatMakefile (realclean): Don't remove backup files. + + * main.c (decode_switches): Allocate ARGC+1 elts in `other_args'. + +Sun May 17 16:38:48 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * Version 3.62.11. + +Thu May 14 16:42:33 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * job.c (reap_children): Don't die if wait returns EINTR. + +Wed May 13 18:28:25 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * job.c (reap_children): Always run the next command for a + successful target. If we are going to die, we don't want to leave + the target partially made. + +Tue May 12 00:39:19 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * job.c (construct_command_argv_internal): After loop, if we only + have one word, check it for being a shell command. + + * main.c (decode_switches): Allocate ARGC slots in other_args to + begin with, so we never need to worry about growing it. + If we get a non-option arg and POSIXLY_CORRECT is in the + environment, break out of the loop. After the loop, add all remaining + args to other_args list. + + * main.c (decode_switches): For positive_int and floating switches + when optarg is nil, use next arg if it looks right (start with a + digit, or maybe decimal point for floating). + + * variable.c (define_automatic_variables): Always set SHELL to + default if it comes from the environment. Set its export bit. + * make.texinfo (Environment): Document change. + +Mon May 11 00:32:46 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * Version 3.62.10. + + * compatMakefile (tags, TAGS): Use vars for cmds. + (ETAGS, CTAGS): Define. + + * main.c (decode_switches): If a switches elt has a nil long_name, + make the long option name elt be "". + Fixed loop to not ignore all the options. + + * make.texinfo (Option Summary): Added long options. + + * main.c (switches): Changed -m's description to "-b". + (decode_switches): When printing the usage message, don't print + switches whose descriptions start with -. + When constructing the list of names for switch -C, search the + switches vector for switches whose descriptions are "-C". + + * main.c (switches): Call -S --no-keep-going, not --dont-keep-going. + Call -I --include-dir, not --include-path. + (long_option_aliases): Added --new == -W, --assume-new == -W, + --assume-old == -o, --max-load == -l, --dry-run == -n, --recon == -n, + --makefile == -f. + + * main.c (switches): Removed bogus "silent" elt. + (long_option_aliases): Define new var. + (decode_switches): Add long_option_aliases onto the end of the long + options vector created for getopt_long. + Look through long_option_aliases for extra names to list + in usage message. + +Sat May 9 00:21:05 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * main.c (log_working_directory): Fixed to properly not print the + leaving message when we haven't printed the entering message. + +Fri May 8 21:55:35 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * main.c (struct command_switch): Added elts `long_name', + `description', and `argdesc'. + (switches): Added initializers for new members. + (decode_switches): Rewritten to use getopt_long. + * compatMakefile (GETOPT, GETOPT_SRC): Define. + (objs, srcs): Include them. + + * job.c (child_died): Renamed to dead_children; made static. + (child_handler): Increment dead_children instead of setting child_died. + (reap_children): Decrement dead_children instead of clearing + child_died. The point of all this is to avoid printing "waiting + for unfinished jobs" when we don't actually need to block. + This happened when multiple SIGCHLDs before reap_children was called. + + * job.c (reap_children): If ERR is set, so we don't call start_job + on the child being reaped, instead set its command_state to + cs_finished. + (reap_children, child_handler, new_job): I added several + debugging printf's while fixing this. I left them in if (debug_flag) + because they may be useful for debugging this stuff again. + +Wed May 6 22:02:37 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * read.c (read_makefile): v_export is not 1. + +Mon May 4 17:27:37 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.9. + + * variable.c (export_all_variables): New variable. + (target_environment): Export variables whose `export' member is + v_default if export_all_variables is set and their names are benign. + * variable.h: Declare export_all_variables. + * read.c (read_makefile): If export or unexport is given with no + args, set or clear export_all_variables, respectively. + + * variable.c (target_environment): Exclude MAKELEVEL in the loop, + so it isn't duplicated when we add it at the end. + +Sun May 3 17:44:48 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.8. + + * variable.h (struct variable): Added new member `export'. + * variable.c (define_variable_in_set): Initialize it to v_default. + (target_environment): Don't check for .NOEXPORT. + Export variables whose `export' member is v_default and that would + have been exported under .NOEXPORT, and variables whose `export' + member is v_export. + (try_variable_definition): Return the variable defined. + * variable.h (try_variable_definition): Changed decl. + * read.c (read_makefile): Recognize `export' and `unexport' directives. + +Fri May 1 11:39:38 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * main.c (main) [POSIX]: Reversed args to sigaddset. + +Thu Apr 30 17:33:32 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * job.c [POSIX || !USG] (unblock_sigs): New fn. + (start_job): Block signals before forking. + (new_job): Unblock signals after putting the new child on the chain. + * main.c (main) [POSIX]: Use sigset_t fatal_signal_set instead of + int fatal_signal_mask. + + * load.c [sgi] (LDAV_CVT): Define. + +Wed Apr 29 17:15:59 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * Version 3.62.7. + + * load.c (load_average) [sgi]: Clear the high bit of the address + from the symbol table before looking it up in kmem. + + * misc.c (fatal, makefile_fatal): Put *** in fatal error messages. + (remake_file): No longer needed in message here. + + * main.c (die): Call reap_children with BLOCK==1. + +Tue Apr 28 20:44:35 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * rule.c (freerule): Don't set LASTRULE->next if LASTRULE is nil. + +Sun Apr 26 15:09:51 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * rule.c (count_implicit_rule_limits): Initialize LASTRULE to nil, + not to head of chain. Extract next ptr before we might do + freerule, and use that for next iteration. + (freerule): Still do next ptr frobbing if LASTRULE is nil. + +Tue Apr 21 03:16:29 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * job.c (child_error): Removed extra %s from error msg format. + + * Version 3.62.6. + + * job.c (reap_children): Don't start later commands in a sequence + if ERR is nonzero. + + * job.c (new_job): Always call reap_children with BLOCK==0 first thing. + + * job.c (reap_children): New function; work that used to be done in + child_handler. + (child_died): New global var. + (child_handler): Now just sets child_died. + (wait_for_children): Removed. + (unknown_children_possible, block_signals, unblock_signals, + push_signals_blocked_p, pop_signals_blocked_p): Removed. + (child_execute_job): Removed call to unblock_signals. + (new_job): Removed calls to push_signals_blocked_p and + pop_signals_blocked_p. + * job.h: Declare reap_children, not wait_for_children. + * commands.c (fatal_error_signal), job.c (new_job), + load.c [LDAV_BASED] (wait_to_start_job), main.c (die), + remake.c (update_goal_chain), function.c (expand_function: `shell'): + Changed wait_for_children calls to reap_children. + Some needed to be loops to wait for all children to die. + * commands.c (fatal_error_signal), main.c (main, + log_working_directory), function.c (expand_function): Removed calls + to push_signals_blocked_p and pop_signals_blocked_p. + * job.h: Removed decls. + + * job.h: Added copyright notice. + +Wed Apr 15 02:02:40 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (child_error): No *** for ignored error. + +Tue Apr 14 18:31:21 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * implicit.c (DEBUGP2): Use do ... while (0) instead of if ... else to + avoid compiler warnings. + + * read.c (parse_file_seq): Don't remove ./ when it is followed by a + blank. + +Mon Apr 13 21:56:15 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.h (DEBUGPR): Use do ... while (0) instead of if ... else to + avoid compiler warnings. + + * remake.c (notice_finished_file): Run file_mtime on the also_make + files, so vpath_search can happen. + + * GNUmakefile (tests): Use perl test suite from csa@sw.stratus.com. + (alpha-files): Include test suite tar file. + +Fri Apr 3 00:50:13 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * Version 3.62.5. + +Wed Apr 1 05:31:18 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * remake.c (update_file, update_file_1): Do check_renamed on elts + of dep chains when traversing them. Something unrelated might have + renamed one of the files the dep chain points to. + + * file.c (rename_file): If FILE has been renamed, follow its + `renamed' ptr, so we get to the final real FILE. Using the renamed + ones loses because they are not in the hash table, so the removal + code loops infinitely. + + * read.c (read_all_makefiles): Clobber null terminator into + MAKEFILES expansion, so string passed to read_makefile is properly + terminated. + +Mon Mar 30 20:18:02 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * commands.c (set_file_variables): $* for archive member with + explicit cmds is stem of member, not of whole `lib(member)'. + +Thu Mar 26 15:24:38 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * Version 3.62.4. + +Tue Mar 24 05:20:51 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * rule.c (new_pattern_rule): Rules are identical only if all their + targets match (regardless of order). + +Wed Mar 11 13:49:54 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * remake.c (remake_file): Changed error "no way to make" to "no + rule to make". Fiat Hugh. + + * make.texinfo (Last Resort): Describe %:: rules and new .DEFAULT + behavior. + + * remake.c (update_file_1): Only use .DEFAULT cmds if FILE is not a + target. + +Tue Mar 10 18:13:13 1992 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * remote-stub.c, remote-cstms.c (start_remote_job): Take new arg, + environment to pass to child. + * job.c (start_job): Pass it. + +Mon Mar 9 19:00:11 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * file.c (enter_file): Also strip ./s here, to get command-line + target names. + + * remote-cstms.c: Add comment telling people to leave me alone. + + * compatMakefile (manpage install): Remove target before copying. + +Tue Mar 3 18:43:21 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.texinfo (Missing): Renamed to "Incompatibilities and ...". + Added paragraph describing $? incompatibility with Unix and POSIX.2. + +Sun Mar 1 15:50:54 1992 Roland McGrath (roland@nutrimat.gnu.ai.mit.edu) + + * function.c (expand_function: `shell'): Don't declare fork or pipe. + Use vfork instead of fork. + +Tue Feb 25 22:05:32 1992 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * make.texinfo (Chained Rules): Clarify .PRECIOUS to save + intermediate files. + + * load.c [sun] (LDAV_CVT): Define to divide by FSCALE. + +Sun Feb 16 02:05:16 1992 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * Version 3.62.3. + +Sat Feb 15 17:12:20 1992 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * compatMakefile (makeinfo): Use emacs batch-texinfo-format fn. + +Fri Feb 14 00:11:55 1992 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * read.c (read_makefile): Correctly handle define & endef in ifdefs. + + * read.c (record_files): Pass arg for %s in error msg. + + * main.c (main) [__IBMR2, POSIX]: Use correct (a la USGr3) setvbuf + call. + +Wed Feb 12 12:07:39 1992 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * make.texinfo (Libraries/Search): Say it does /usr/local/lib too. + +Sun Feb 9 23:06:24 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * read.c (read_makefile): Check for extraneous `endef' when ignoring. + +Thu Feb 6 16:15:48 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * Version 3.62.2. + +Tue Feb 4 20:04:46 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (construct_command_argv_internal): Correctly ignore + whitespace after backslash-NL. + +Fri Jan 31 18:30:05 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * compatMakefile: Ignore errors from chgrp and chmod when installing. + +Wed Jan 29 18:13:30 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * main.c (main): When setting MAKELEVEL in the env to re-exec, + allocate space so as not to clobber past the end of the old string. + + * make.h [HAVE_ALLOCA_H]: Include + * compatMakefile (defines): Document HAVE_ALLOCA_H. + +Mon Jan 20 13:40:05 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * make.h [VFORK_MISSING]: Use fork instead. + * compatMakefile (defines): Document same. + + * job.c (construct_command_argv_internal): Don't create an empty + arg if backslash-NL is at beginning of word. + +Sun Jan 19 16:26:53 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * main.c [DGUX]: Call setvbuf as for USGr3. + + * job.c (construct_command_argv_internal): Notice correctly that + backslash-NL is the end of the arg (because it is replaced with a + space). + +Thu Jan 16 18:42:38 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * job.c (construct_command_argv_internal): If SHELL is nil, set it + to default_shell before proceeding. + + * make.h [sgi]: No alloca.h, after all. + +Wed Jan 15 12:30:04 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * read.c (multi_glob): Cons up the chain of the results of glob + from back to front, so it comes out in forward order. + + * job.c (construct_command_argv_internal): Don't eat char following + backslash-NL. + +Mon Jan 13 19:16:56 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * Version 3.62.1. + + * default.c (default_variables) [ultrix]: GET=get, like USG. + + * job.c (construct_command_argv_internal): Remove tabs following + backslash-NL combos in the input line, so they don't show up when + that line is printed. + + * read.c (read_makefile): Don't collapse_continuations the line on + input; do it on the copy we do remove_comments on. + For rule lines, collapse_continuations the line after chopping + ";cmds" off the end, so we don't eat conts in the cmds. + Give error for ";cmds" with no rule. + * job.c (construct_command_argv_internal): Eat backslash-NL combos + when constructing the line to recurse on for slow, too. + +Sat Jan 11 02:20:27 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu) + + * file.c (enter_file): Don't strip leading `./'s. + * read.c (parse_file_seq): Take new arg STRIP; if nonzero, do it here. + * default.c (set_default_suffixes), function.c (string_glob), + read.c (read_makefile), rule.c (install_pattern_rule): Change callers. + + * default.c (default_variables) [_IBMR2]: FC=xlf + + * job.c (construct_command_argv_internal): Turn backslash-NL and + following whitespace into a single space, rather than just eating + the backslash. + + * make.texinfo (Copying): @include gpl.texinfo, rather than + duplicating its contents. + +Fri Nov 8 20:06:03 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * job.c (construct_command_argv_internal): Make sure not to bother + processing an empty line. + + * Version 3.62.0. + + * job.c (construct_command_argv_internal): Always recurse for slow; + simple case didn't handle finding newlines. + +Tue Nov 5 18:51:10 1991 Roland McGrath (roland@wookumz.gnu.ai.mit.edu) + + * job.c (construct_command_argv_internal): Set RESTP properly when + slow; don't \ify past a newline. + +Fri Nov 1 19:34:28 1991 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * make.h [sgi]: #include . + + + +See ChangeLog.1 for earlier changes. diff --git a/src/mkutil/make/INSTALL b/src/mkutil/make/INSTALL new file mode 100644 index 00000000..bca44d04 --- /dev/null +++ b/src/mkutil/make/INSTALL @@ -0,0 +1,187 @@ +Basic Installation +================== + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + If you're building GNU make on a system which does not already have + a `make', you can use the build.sh shell script to compile. Run + `sh ./build.sh'. This should compile the program in the current + directory. Then you will have a Make program that you can use for + `make install', or whatever else. + + 3. Optionally, type `./make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. + diff --git a/src/mkutil/make/Makefile.DOS.template b/src/mkutil/make/Makefile.DOS.template new file mode 100644 index 00000000..a5a86477 --- /dev/null +++ b/src/mkutil/make/Makefile.DOS.template @@ -0,0 +1,533 @@ +# -*-Makefile-*- template for DJGPP +# Makefile.in generated automatically by automake 1.2 from Makefile.am + +# Copyright (C) 1994, 1995-1998, 1999, 2002 Free Software Foundation, Inc. +# This Makefile.DOS is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + + +SHELL = /bin/sh + +srcdir = . +VPATH = $(srcdir) +# $DJDIR is defined automatically by DJGPP to point +# to the root of the DJGPP installation tree. +prefix = /dev/env/DJDIR +exec_prefix = ${prefix} + +bindir = /bin +datadir = /share +libdir = /lib +infodir = /info +mandir = /man +includedir = /include +oldincludedir = c:/djgpp/include + +DESTDIR = /dev/env/DJDIR + +pkgdatadir = $(datadir)/make +pkglibdir = $(libdir)/make +pkgincludedir = $(includedir)/make +localedir = $(datadir)/locale + +INSTALL = ${exec_prefix}/bin/ginstall -c +INSTALL_PROGRAM = ${exec_prefix}/bin/ginstall -c +INSTALL_DATA = ${exec_prefix}/bin/ginstall -c -m 644 +INSTALL_SCRIPT = ${exec_prefix}/bin/ginstall -c +transform = s,x,x, + +# This will fail even if they don't have a Unix-like shell (stock DOS +# shell doesn't know about `false'). The only difference is that they +# get "Error -1" instead of "Error 1". +EXIT_FAIL = false + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +EXEEXT = .exe +OBJEXT = o + +AR = ar +AWK = gawk +CC = gcc +CPP = gcc -E +LIBOBJS = +MAKEINFO = ${exec_prefix}/bin/makeinfo +PACKAGE = make +PERL = perl +RANLIB = ranlib +REMOTE = stub +VERSION = %VERSION% + +AUTOMAKE_OPTIONS = 1.2 + +bin_PROGRAMS = %PROGRAMS%$(EXEEXT) + +make_SOURCES = %SOURCES% +# This should include the glob/ prefix +libglob_a_SOURCES = %GLOB_SOURCES% +make_LDADD = glob/libglob.a + +info_TEXINFOS = make.texinfo +man_MANS = make.1 + +INCLUDES = -I$(srcdir)/glob -DLIBDIR=\"c:/djgpp/lib\" -DINCLUDEDIR=\"c:/djgpp/include\" -DLOCALEDIR=\"$(localedir)\" + +BUILT_SOURCES = README build.sh-in + +EXTRA_DIST = $(BUILT_SOURCES) $(man_MANS) README.customs remote-cstms.c make-stds.texi texinfo.tex SCOPTIONS SMakefile Makefile.ami README.Amiga config.ami amiga.c amiga.h NMakefile README.DOS configh.dos configure.bat makefile.com README.W32 build_w32.bat config.h-W32 subproc.bat make.lnk config.h-vms makefile.vms readme.vms vmsdir.h vmsfunctions.c vmsify.c + +SUBDIRS = glob +mkinstalldirs = ${exec_prefix}/bin/gmkdir -p +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = build.sh +PROGRAMS = $(bin_PROGRAMS) + +MAKE_HOST = i386-pc-msdosdjgpp + + +DEFS = -I. -I$(srcdir) -I. +CPPFLAGS = -DHAVE_CONFIG_H +LDFLAGS = +LIBS = +make_OBJECTS = %OBJECTS% +make_DEPENDENCIES = glob/libglob.a +make_LDFLAGS = +libglob_a_LIBADD = +libglob_a_OBJECTS = %GLOB_OBJECTS% +noinst_LIBRARIES = glob/libglob.a +CFLAGS = -O2 -g +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +TEXI2DVI = texi2dvi +TEXINFO_TEX = $(srcdir)/config/texinfo.tex +INFO_DEPS = make.info +DVIS = make.dvi +TEXINFOS = make.texinfo +man1dir = $(mandir)/man1 +MANS = $(man_MANS) + +NROFF = nroff +DIST_COMMON = README ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL Makefile.am Makefile.in NEWS acconfig.h aclocal.m4 alloca.c build.sh-in config.h-in configure configure.in getloadavg.c + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP = --best +SOURCES = $(make_SOURCES) +OBJECTS = $(make_OBJECTS) +HEADERS = $(wildcard $(srcdir)/*.h) + +default: all + +.SUFFIXES: +.SUFFIXES: .c .dvi .info .o .obj .ps .texinfo .tex + +mostlyclean-hdr: + +clean-hdr: + +distclean-hdr: + -rm -f config.h + +maintainer-clean-hdr: + +mostlyclean-binPROGRAMS: + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +distclean-binPROGRAMS: + +maintainer-clean-binPROGRAMS: + +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do if test -f $$p; then echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`"; $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`; else :; fi; done + +uninstall-binPROGRAMS: + $(NORMAL_UNINSTALL) + list='$(bin_PROGRAMS)'; for p in $$list; do rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`.exe; done + +.c.o: + $(COMPILE) -c $< + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) *$(EXEEXT) make.new core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c *_tab.c + +maintainer-clean-compile: + +make$(EXEEXT): $(make_OBJECTS) $(make_DEPENDENCIES) + @command.com /c if exist make del make + @command.com /c if exist make.exe del make.exe + $(LINK) $(make_LDFLAGS) $(make_OBJECTS) $(make_LDADD) $(LIBS) + +make.info: make.texinfo +make.dvi: make.texinfo + + +DVIPS = dvips + +.texinfo.info: + @command.com /c if exist make.info* del make.info* + @command.com /c if exist make.i* del make.i* + $(MAKEINFO) -I$(srcdir) $< -o ./$@ + +.texinfo: + @command.com /c if exist make.info* del make.info* + @command.com /c if exist make.i* del make.i* + $(MAKEINFO) -I$(srcdir) $< -o ./$@ + +.texinfo.dvi: + TEXINPUTS="$(srcdir);$$TEXINPUTS" MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + + +.dvi.ps: + $(DVIPS) $< -o $@ + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(infodir) + @for file in $(INFO_DEPS) make.i; do d=$(srcdir); for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9] $$file[0-9] $$file[0-9][0-9]`; do if test -f $$d/$$ifile; then echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; else : ; fi; done; done + @$(POST_INSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then for file in $(INFO_DEPS); do echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file"; install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :; done; else : ; fi + +uninstall-info: + $(PRE_UNINSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then ii=yes; else ii=; fi; for file in $(INFO_DEPS); do test -z $ii || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; done + $(NORMAL_UNINSTALL) + for file in $(INFO_DEPS) make.i; do (cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9] $$file[0-9] $$file[0-9][0-9]); done + +dist-info: $(INFO_DEPS) + for base in $(INFO_DEPS); do d=$(srcdir); for file in `cd $$d && eval echo $$base*`; do test -f $(distdir)/$$file || ln $$d/$$file $(distdir)/$$file 2> /dev/null || cp -p $$d/$$file $(distdir)/$$file; done; done + +mostlyclean-aminfo: + -rm -f make.aux make.cp make.cps make.dvi make.fn make.fns make.ky \ + make.kys make.ps make.log make.pg make.toc make.tp make.tps \ + make.vr make.vrs make.op make.tr make.cv make.cn + +clean-aminfo: + +distclean-aminfo: + +maintainer-clean-aminfo: + for i in $(INFO_DEPS) make.i; do rm -f `eval echo $$i*`; done + +install-man1: + $(mkinstalldirs) $(DESTDIR)$(man1dir) + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ + done + +uninstall-man1: + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ + rm -f $(DESTDIR)$(man1dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) install-man1 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) uninstall-man1 + +# Assume that the only thing to do in glob is to build libglob.a, +# but do a sanity check: if $SUBDIRS will ever have more than +# a single directory, yell bloody murder. +all-recursive: +ifeq ($(words $(SUBDIRS)), 1) + @command.com /c if not exist glob\\nul md glob + @echo Making all in $(SUBDIRS) + $(MAKE) -C $(SUBDIRS) -f ../Makefile INCLUDES='-I$(srcdir) -I$(srcdir)/glob' DEFS='-I.. -I$(srcdir)' VPATH=$(srcdir)/glob libglob.a +else + @echo FATAL: There is more than one directory in "($(SUBDIRS))" + @$(EXIT_FAIL) +endif + +$(SUBDIRS): + command.com /c md $@ + +libglob.a: $(libglob_a_OBJECTS) + command.com /c if exist libglob.a del libglob.a + $(AR) cru libglob.a $(libglob_a_OBJECTS) $(libglob_a_LIBADD) + $(RANLIB) libglob.a + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive check-recursive: +ifeq ($(words $(SUBDIRS)), 1) + @echo Making $(shell echo $@ | sed s/-recursive//) in $(SUBDIRS) + $(MAKE) -C $(SUBDIRS) -f ../Makefile $(shell echo $@ | sed s/-recursive//)-am +else + @echo FATAL: There is more than one directory in "($(SUBDIRS))" + @$(EXIT_FAIL) +endif + +tags-in-glob: $(libglob_a_SOURCES) + etags $(addprefix $(srcdir)/,$^) -o ./glob/TAGS + +tags-recursive: +ifeq ($(words $(SUBDIRS)), 1) + $(MAKE) tags-in-glob +else + @echo FATAL: There is more than one directory in "($(SUBDIRS))" + @$(EXIT_FAIL) +endif + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) + mkid $(srcdir)/$(SOURCES) $(srcdir)/$(libglob_a_SOURCES) ./config.h $(HEADERS) + +TAGS: tags-recursive $(HEADERS) $(srcdir)/$(SOURCES) config.h $(TAGS_DEPENDENCIES) + etags -i ./glob/TAGS $(ETAGS_ARGS) $(srcdir)/$(SOURCES) ./config.h $(HEADERS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + rm -rf $(distdir) + GZIP=$(GZIP) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; cd $(distdir)/=build && ../configure --srcdir=.. --prefix=$$dc_install_base && $(MAKE) && $(MAKE) dvi && $(MAKE) check && $(MAKE) install && $(MAKE) installcheck && $(MAKE) dist + rm -rf $(distdir) + @echo "========================"; echo "$(distdir).tar.gz is ready for distribution"; echo "========================" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir) + rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir) + rm -rf $(distdir) +distdir: $(DISTFILES) + rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + @for file in $(DISTFILES); do d=$(srcdir); test -f $(distdir)/$$file || ln $$d/$$file $(distdir)/$$file 2> /dev/null || cp -p $$d/$$file $(distdir)/$$file; done; for subdir in $(SUBDIRS); do test -d $(distdir)/$$subdir || mkdir $(distdir)/$$subdir || exit 1; chmod 777 $(distdir)/$$subdir; (cd $$subdir && $(MAKE) top_distdir=../$(top_distdir)/$$subdir distdir=../$(distdir)/$$subdir distdir) || exit 1; done + $(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info + $(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook + +info: $(INFO_DEPS) info-recursive +dvi: $(DVIS) dvi-recursive +check: all-am check-recursive check-local + @: +installcheck: installcheck-recursive +all-recursive-am: config.h + $(MAKE) all-recursive + +all-am: Makefile $(INFO_DEPS) $(PROGRAMS) config.h + +install-exec-am: install-binPROGRAMS + +install-data-am: install-info-am + +uninstall-am: uninstall-binPROGRAMS uninstall-info + +install-exec: install-exec-recursive install-exec-am + @$(NORMAL_INSTALL) + +install-data: install-data-recursive install-data-am + @$(NORMAL_INSTALL) + +install-recursive uninstall-recursive: + @: + +install: install-recursive install-exec-am install-data-am + @: + +uninstall: uninstall-recursive uninstall-am + +all: all-recursive-am all-am + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: installdirs-recursive + $(mkinstalldirs) $(bindir) $(infodir) + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS mostlyclean-compile mostlyclean-aminfo mostlyclean-tags mostlyclean-generic + +clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-aminfo clean-tags clean-generic mostlyclean-am + +distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile distclean-aminfo distclean-tags distclean-generic clean-am + +maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS maintainer-clean-compile maintainer-clean-aminfo maintainer-clean-tags maintainer-clean-generic distclean-am + +mostlyclean: mostlyclean-recursive mostlyclean-am + +clean: clean-noinstLIBRARIES clean-recursive clean-am + +distclean: distclean-recursive distclean-am + rm -f config.status + +maintainer-clean: maintainer-clean-recursive maintainer-clean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f config.status + +.PHONY: default mostlyclean-hdr distclean-hdr clean-hdr \ +maintainer-clean-hdr mostlyclean-binPROGRAMS distclean-binPROGRAMS \ +clean-binPROGRAMS maintainer-clean-binPROGRAMS uninstall-binPROGRAMS \ +install-binPROGRAMS mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile install-info-am uninstall-info \ +mostlyclean-aminfo distclean-aminfo clean-aminfo \ +maintainer-clean-aminfo install-data-recursive uninstall-data-recursive \ +install-exec-recursive uninstall-exec-recursive installdirs-recursive \ +uninstalldirs-recursive all-recursive check-recursive check-am \ +installcheck-recursive info-recursive dvi-recursive \ +mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info dvi check-local installcheck \ +all-recursive-am all-am install-exec-am install-data-am uninstall-am \ +install-exec install-data install uninstall all installdirs \ +mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# --------------- Local DIST Section + +# Install the w32 subdirectory +# +dist-hook: + (cd $(srcdir); \ + w32=`find w32 -follow \( -name CVS -prune \) -o -type f -print`; \ + tar chf - $$w32) \ + | (cd $(distdir); tar xfBp -) + +# --------------- Local CHECK Section + +# Note: check-loadavg is NOT a prerequisite of check-local, since +# there's no uptime utility, and the test it does doesn't make sense +# on MSDOS anyway. +check-local: check-shell check-regression + @banner=" Regression PASSED: GNU Make $(VERSION) ($(MAKE_HOST)) built with $(CC) "; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes"; \ + echo + +.PHONY: check-loadavg check-shell check-regression + +# > check-shell +# +# check-shell is designed to fail if they don't have a Unixy shell +# installed. The test suite requires such a shell. +check-shell: + @echo If Make says Error -1, you do not have Unix-style shell installed + @foo=bar.exe : + +# > check-loadavg +# +loadavg: loadavg.c config.h + @rm -f loadavg + $(LINK) -DTEST $(make_LDFLAGS) loadavg.c $(LIBS) +# We copy getloadavg.c into a different file rather than compiling it +# directly because some compilers clobber getloadavg.o in the process. +loadavg.c: getloadavg.c + ln $(srcdir)/getloadavg.c loadavg.c || \ + cp $(srcdir)/getloadavg.c loadavg.c +check-loadavg: loadavg + @echo The system uptime program believes the load average to be: + -uptime + @echo The GNU load average checking code believes: + -./loadavg + +# > check-regression +# +# Look for the make test suite, and run it if found. Look in MAKE_TEST if +# specified, or else in the srcdir or the distdir, their parents, and _their_ +# parents. +# +check-regression: + @if test -f "$(srcdir)/tests/run_make_tests"; then \ + if $(PERL) -v >/dev/null 2>&1; then \ + case `cd $(srcdir); pwd` in `pwd`) : ;; \ + *) test -d tests || mkdir tests; \ + for f in run_make_tests run_make_tests.pl test_driver.pl scripts; do \ + rm -rf tests/$$f; cp -pr $(srcdir)/tests/$$f tests; \ + done ;; \ + esac; \ + echo "cd tests && $(PERL) ./run_make_tests.pl -make ../make.exe $(MAKETESTFLAGS)"; \ + cd tests && $(PERL) ./run_make_tests.pl -make ../make.exe $(MAKETESTFLAGS); \ + else \ + echo "Can't find a working Perl ($(PERL)); the test suite requires Perl."; \ + fi; \ + else \ + echo "Can't find the GNU Make test suite ($(srcdir)/tests)."; \ + fi + +# --------------- Maintainer's Section + +# Note this requires GNU make. Not to worry, since it will only be included +# in the Makefile if we're in the maintainer's environment. +#include $(srcdir)/maintMakefile + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +# --------------- DEPENDENCIES diff --git a/src/mkutil/make/Makefile.am b/src/mkutil/make/Makefile.am new file mode 100644 index 00000000..06d2df17 --- /dev/null +++ b/src/mkutil/make/Makefile.am @@ -0,0 +1,160 @@ +# This is a -*-Makefile-*-, or close enough + +AUTOMAKE_OPTIONS = 1.7.3 dist-bzip2 check-news ansi2knr +ACLOCAL_AMFLAGS = -I config + +SUBDIRS = glob config po doc + +bin_PROGRAMS = make + +if USE_CUSTOMS + remote = remote-cstms.c +else + remote = remote-stub.c +endif + + +make_SOURCES = ar.c arscan.c commands.c default.c dir.c expand.c file.c \ + function.c getopt.c getopt1.c implicit.c job.c main.c \ + misc.c read.c remake.c $(remote) rule.c signame.c \ + variable.c version.c vpath.c hash.c + +EXTRA_make_SOURCES = remote-stub.c remote-cstms.c + +noinst_HEADERS = commands.h dep.h filedef.h job.h make.h rule.h variable.h \ + debug.h getopt.h gettext.h hash.h + +make_LDADD = @LIBOBJS@ @ALLOCA@ $(GLOBLIB) @GETLOADAVG_LIBS@ @LIBINTL@ + +man_MANS = make.1 + +DEFS = -DLOCALEDIR=\"$(localedir)\" -DLIBDIR=\"$(libdir)\" -DINCLUDEDIR=\"$(includedir)\" @DEFS@ + +AM_CPPFLAGS = $(GLOBINC) + + +# Extra stuff to include in the distribution. +# Note we need all the glob stuff here, rather than in glob/Makefile.am, +# because often that directory isn't built on the systems used by the +# maintainers. + +EXTRA_DIST = README build.sh.in $(man_MANS) \ + README.customs README.OS2 \ + SCOPTIONS SMakefile \ + README.Amiga Makefile.ami config.ami make.lnk amiga.c amiga.h \ + README.DOS Makefile.DOS configure.bat dosbuild.bat configh.dos\ + README.W32 NMakefile config.h.W32 build_w32.bat subproc.bat \ + readme.vms makefile.vms makefile.com config.h-vms \ + vmsdir.h vmsfunctions.c vmsify.c + +MAKE_HOST = @MAKE_HOST@ + + +# Forward targets + +html: + cd doc && $(MAKE) $(AM_MAKEFLAGS) $@ + +.PHONY: html + +# --------------- Internationalization Section + +localedir = $(datadir)/locale + +# --------------- Local INSTALL Section + +# If necessary, change the gid of the app and turn on the setgid flag. +# + +# Whether or not make needs to be installed setgid. +# The value should be either `true' or `false'. +# On many systems, the getloadavg function (used to implement the `-l' +# switch) will not work unless make is installed setgid kmem. +# +inst_setgid = @NEED_SETGID@ + +# Install make setgid to this group so it can get the load average. +# +inst_group = @KMEM_GROUP@ + +install-exec-local: + @if $(inst_setgid); then \ + app=$(DESTDIR)$(bindir)/`echo $(bin_PROGRAMS)|sed '$(transform)'`; \ + if chgrp $(inst_group) $$app && chmod g+s $$app; then \ + echo "chgrp $(inst_group) $$app && chmod g+s $$app"; \ + else \ + echo "$$app needs to be owned by group $(inst_group) and setgid;"; \ + echo "otherwise the \`-l' option will probably not work."; \ + echo "You may need special privileges to complete the installation"; \ + echo "of $$app."; \ + fi; \ + else true; fi + +# --------------- Local DIST Section + +# Install the w32 and tests subdirectories +# +dist-hook: + (cd $(srcdir); \ + sub=`find w32 tests -follow \( -name CVS -prune -o -name .cvsignore -o -name work -prune \) -o \( -name \*.orig -o -name \*.rej -o -name \*~ -prune \) -o -type f -print`; \ + tar chf - $$sub) \ + | (cd $(distdir); tar xfBp -) + + +# --------------- Local CHECK Section + +check-local: check-regression check-loadavg + @banner=" Regression PASSED: GNU Make $(VERSION) ($(MAKE_HOST)) built with $(CC) "; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes"; \ + echo + +.PHONY: check-loadavg check-regression + +check-loadavg: loadavg + @echo The system uptime program believes the load average to be: + -uptime + @echo The GNU load average checking code thinks: + -./loadavg + +# The loadavg function is invoked during "make check" to test getloadavg. +noinst_PROGRAMS = loadavg +nodist_loadavg_SOURCES = getloadavg.c +loadavg_CPPFLAGS = -DTEST +loadavg_LDADD = @GETLOADAVG_LIBS@ + +# > check-regression +# +# Look for the make test suite, and run it if found and we can find perl. +# If we're building outside the tree, we use symlinks to make a local copy of +# the test suite. Unfortunately the test suite itself isn't localizable yet. +# +MAKETESTFLAGS = + +check-regression: + @if test -f "$(srcdir)/tests/run_make_tests"; then \ + if $(PERL) -v >/dev/null 2>&1; then \ + case `cd $(srcdir); pwd` in `pwd`) : ;; \ + *) test -d tests || mkdir tests; \ + rm -f srctests; \ + if ln -s "$(srcdir)/tests" srctests; then \ + for f in run_make_tests run_make_tests.pl test_driver.pl scripts; do \ + rm -f tests/$$f; ln -s ../srctests/$$f tests; \ + done; fi ;; \ + esac; \ + echo "cd tests && $(PERL) ./run_make_tests.pl -make ../make $(MAKETESTFLAGS)"; \ + cd tests && $(PERL) ./run_make_tests.pl -make ../make $(MAKETESTFLAGS); \ + else \ + echo "Can't find a working Perl ($(PERL)); the test suite requires Perl."; \ + fi; \ + else \ + echo "Can't find the GNU Make test suite ($(srcdir)/tests)."; \ + fi + + +# --------------- Maintainer's Section + +@MAINT_MAKEFILE@ diff --git a/src/mkutil/make/Makefile.ami b/src/mkutil/make/Makefile.ami new file mode 100644 index 00000000..6a2a2bc1 --- /dev/null +++ b/src/mkutil/make/Makefile.ami @@ -0,0 +1,305 @@ +# NOTE: If you have no `make' program at all to process this makefile, run +# `build.sh' instead. +# +# Copyright (C) 1988, 89, 91, 92, 93, 94, 1995 Free Software Foundation, Inc. +# This file is part of GNU Make. +# +# GNU Make 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, or (at your option) +# any later version. +# +# GNU Make 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 GNU Make; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# +# Makefile for GNU Make +# + +CC = sc +RM = delete + +CFLAGS = +CPPFLAGS = +LDFLAGS = + +# Define these for your system as follows: +# -DNO_ARCHIVES To disable `ar' archive support. +# -DNO_FLOAT To avoid using floating-point numbers. +# -DENUM_BITFIELDS If the compiler isn't GCC but groks enum foo:2. +# Some compilers apparently accept this +# without complaint but produce losing code, +# so beware. +# NeXT 1.0a uses an old version of GCC, which required -D__inline=inline. +# See also `config.h'. +defines = + +# Which flavor of remote job execution support to use. +# The code is found in `remote-$(REMOTE).c'. +REMOTE = stub + +# If you are using the GNU C library, or have the GNU getopt functions in +# your C library, you can comment these out. +GETOPT = getopt.o getopt1.o +GETOPT_SRC = $(srcdir)getopt.c $(srcdir)getopt1.c $(srcdir)getopt.h + +# If you are using the GNU C library, or have the GNU glob functions in +# your C library, you can comment this out. GNU make uses special hooks +# into the glob functions to be more efficient (by using make's directory +# cache for globbing), so you must use the GNU functions even if your +# system's C library has the 1003.2 glob functions already. Also, the glob +# functions in the AIX and HPUX C libraries are said to be buggy. +GLOB = glob/glob.lib + +# If your system doesn't have alloca, or the one provided is bad, define this. +ALLOCA = alloca.o +ALLOCA_SRC = $(srcdir)alloca.c + +# If your system needs extra libraries loaded in, define them here. +# System V probably need -lPW for alloca. HP-UX 7.0's alloca in +# libPW.a is broken on HP9000s300 and HP9000s400 machines. Use +# alloca.c instead on those machines. +LOADLIBES = + +# Any extra object files your system needs. +extras = amiga.o + +# Common prefix for machine-independent installed files. +prefix = +# Common prefix for machine-dependent installed files. +exec_prefix = + +# Directory to install `make' in. +bindir = sc:c +# Directory to find libraries in for `-lXXX'. +libdir = lib: +# Directory to search by default for included makefiles. +includedir = include: +# Directory to install the Info files in. +infodir = doc: +# Directory to install the man page in. +mandir = t: +# Number to put on the man page filename. +manext = 1 +# Prefix to put on installed `make' binary file name. +binprefix = +# Prefix to put on installed `make' man page file name. +manprefix = $(binprefix) + +# Whether or not make needs to be installed setgid. +# The value should be either `true' or `false'. +# On many systems, the getloadavg function (used to implement the `-l' +# switch) will not work unless make is installed setgid kmem. +install_setgid = false +# Install make setgid to this group so it can read /dev/kmem. +group = sys + +# Program to install `make'. +INSTALL_PROGRAM = copy +# Program to install the man page. +INSTALL_DATA = copy +# Generic install program. +INSTALL = copy + +# Program to format Texinfo source into Info files. +MAKEINFO = makeinfo +# Program to format Texinfo source into DVI files. +TEXI2DVI = texi2dvi + +# Programs to make tags files. +ETAGS = etags -w +CTAGS = ctags -w + +objs = commands.o job.o dir.o file.o misc.o main.o read.o remake.o \ + rule.o implicit.o default.o variable.o expand.o function.o \ + vpath.o version.o ar.o arscan.o signame.o hash.o \ + remote-$(REMOTE).o $(GETOPT) $(ALLOCA) $(extras) +srcs = $(srcdir)commands.c $(srcdir)job.c $(srcdir)dir.c \ + $(srcdir)file.c $(srcdir)getloadavg.c $(srcdir)misc.c \ + $(srcdir)main.c $(srcdir)read.c $(srcdir)remake.c \ + $(srcdir)rule.c $(srcdir)implicit.c $(srcdir)default.c \ + $(srcdir)variable.c $(srcdir)expand.c $(srcdir)function.c \ + $(srcdir)vpath.c $(srcdir)version.c $(srcdir)hash.c \ + $(srcdir)remote-$(REMOTE).c \ + $(srcdir)ar.c $(srcdir)arscan.c \ + $(srcdir)signame.c $(srcdir)signame.h $(GETOPT_SRC) \ + $(srcdir)commands.h $(srcdir)dep.h $(srcdir)filedep.h \ + $(srcdir)job.h $(srcdir)make.h $(srcdir)rule.h \ + $(srcdir)variable.h $(ALLOCA_SRC) $(srcdir)config.h.in + + +.SUFFIXES: +.SUFFIXES: .o .c .h .ps .dvi .info .texinfo + +all: make +info: make.info +dvi: make.dvi +# Some makes apparently use .PHONY as the default goal if it is before `all'. +.PHONY: all check info dvi + +make.info: make.texinfo + $(MAKEINFO) -I$(srcdir) $(srcdir)make.texinfo -o make.info + +make.dvi: make.texinfo + $(TEXI2DVI) $(srcdir)make.texinfo + +make.ps: make.dvi + dvi2ps make.dvi > make.ps + +make: $(objs) $(GLOB) + $(CC) Link $(LDFLAGS) $(objs) Lib $(GLOB) $(LOADLIBES) To make.new + -delete make + rename make.new make + +TMPFILE = t:Make$$ + +$(GLOB): + cd glob @@\ + $(MAKE) -$(MAKEFLAGS) -f Makefile + +# -I. is needed to find config.h in the build directory. +OUTPUT_OPTION = +.c.o: + $(CC) $(defines) IDir "" IDir glob \ + $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION) + +# For some losing Unix makes. +SHELL = /bin/sh +#@SET_MAKE@ + +glob/libglob.a: FORCE config.h + cd glob; $(MAKE) libglob.a +FORCE: + +tagsrcs = $(srcs) $(srcdir)remote-*.c + +.PHONY: install installdirs +install: installdirs \ + $(bindir)$(binprefix)make $(infodir)make.info \ + $(mandir)$(manprefix)make.$(manext) + +installdirs: + $(SHELL) ${srcdir}/mkinstalldirs $(bindir) $(infodir) $(mandir) + +$(bindir)$(binprefix)make: make + $(INSTALL_PROGRAM) make $@.new + @if $(install_setgid); then \ + if chgrp $(group) $@.new && chmod g+s $@.new; then \ + echo "chgrp $(group) $@.new && chmod g+s $@.new"; \ + else \ + echo "$@ needs to be owned by group $(group) and setgid;"; \ + echo "otherwise the \`-l' option will probably not work."; \ + echo "You may need special privileges to install $@."; \ + fi; \ + else true; fi +# Some systems can't deal with renaming onto a running binary. + -$(RM) $@.old + -mv $@ $@.old + mv $@.new $@ + +$(infodir)make.info: make.info + if [ -r ./make.info ]; then dir=.; else dir=$(srcdir); fi; \ + for file in $${dir}/make.info*; do \ + name="`basename $$file`"; \ + $(INSTALL_DATA) $$file \ + `echo $@ | sed "s,make.info\$$,$$name,"`; \ + done +# Run install-info only if it exists. +# Use `if' instead of just prepending `-' to the +# line so we notice real errors from install-info. +# We use `$(SHELL) -c' because some shells do not +# fail gracefully when there is an unknown command. + if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ + if [ -r ./make.info ]; then dir=.; else dir=$(srcdir); fi; \ + install-info --infodir=$(infodir) $$dir/make.info; \ + else true; fi + +$(mandir)$(manprefix)make.$(manext): make.man + $(INSTALL_DATA) $(srcdir)make.man $@ + + +loadavg: loadavg.c config.h + $(CC) $(defines) -DTEST -I. -I$(srcdir) $(CFLAGS) $(LDFLAGS) \ + loadavg.c $(LOADLIBES) -o $@ +# We copy getloadavg.c into a different file rather than compiling it +# directly because some compilers clobber getloadavg.o in the process. +loadavg.c: getloadavg.c + ln $(srcdir)getloadavg.c loadavg.c || \ + cp $(srcdir)getloadavg.c loadavg.c +check-loadavg: loadavg + @echo The system uptime program believes the load average to be: + -uptime + @echo The GNU load average checking code believes: + ./loadavg +check: check-loadavg + + +.PHONY: clean realclean distclean mostlyclean +clean: glob-clean + -$(RM) make loadavg "#?.o" core make.dvi + +distclean: clean glob-realclean + -$(RM) Makefile config.h config.status build.sh + -$(RM) config.log config.cache + -$(RM) TAGS tags + -$(RM) make.?? make.??s make.log make.toc make.*aux + -$(RM) loadavg.c + +realclean: distclean + -$(RM) make.info* +mostlyclean: clean + +.PHONY: glob-clean glob-realclean +glob-clean glob-realclean: + cd glob @@\ + $(MAKE) $@ + +# This tells versions [3.59,3.63) of GNU make not to export all variables. +.NOEXPORT: + +# The automatically generated dependencies below may omit config.h +# because it is included with ``#include '' rather than +# ``#include "config.h"''. So we add the explicit dependency to make sure. +$(objs): config.h + +# Automatically generated dependencies will be put at the end of the file. + +# Automatically generated dependencies. +commands.o: commands.c make.h dep.h filedef.h variable.h job.h \ + commands.h +job.o: job.c make.h job.h filedef.h commands.h variable.h +dir.o: dir.c make.h +file.o: file.c make.h dep.h filedef.h job.h commands.h variable.h +misc.o: misc.c make.h dep.h +main.o: main.c make.h dep.h filedef.h variable.h job.h commands.h \ + getopt.h +read.o: read.c make.h dep.h filedef.h job.h commands.h variable.h \ + glob/glob.h +remake.o: remake.c make.h filedef.h job.h commands.h dep.h +rule.o: rule.c make.h dep.h filedef.h job.h commands.h variable.h \ + rule.h +implicit.o: implicit.c make.h rule.h dep.h filedef.h +default.o: default.c make.h rule.h dep.h filedef.h job.h commands.h \ + variable.h +variable.o: variable.c make.h dep.h filedef.h job.h commands.h \ + variable.h +expand.o: expand.c make.h filedef.h job.h commands.h variable.h +function.o: function.c make.h filedef.h variable.h dep.h job.h \ + commands.h amiga.h +vpath.o: vpath.c make.h filedef.h variable.h +version.o: version.c +ar.o: ar.c make.h filedef.h dep.h +arscan.o: arscan.c make.h +signame.o: signame.c signame.h +remote-stub.o: remote-stub.c make.h filedef.h job.h commands.h +getopt.o: getopt.c +getopt1.o : getopt1.c getopt.h +getloadavg.o: getloadavg.c +amiga.o: amiga.c make.h variable.h amiga.h diff --git a/src/mkutil/make/NEWS b/src/mkutil/make/NEWS new file mode 100644 index 00000000..a93fc4e1 --- /dev/null +++ b/src/mkutil/make/NEWS @@ -0,0 +1,877 @@ +GNU make NEWS -*-indented-text-*- + History of user-visible changes. + 17 April 2003 + +Copyright (C) 2002,2003 Free Software Foundation, Inc. +See the end for copying conditions. + +All changes mentioned here are more fully described in the GNU make +manual, which is contained in this distribution as the file doc/make.texi. + +Please send GNU make bug reports to . +See the README file and the GNU make manual for details on sending bug +reports. + +Version 3.81a2 + +* GNU make is ported to OS/2. + Port provided by Andreas Buening . + +* All pattern-specific variables that match a given target are now used + (previously only the first match was used). + +* Target-specific variables can be marked as exportable using the + "export" keyword. + +* In a recursive $(call ...) context, any extra arguments from the outer + call are now masked in the context of the inner call. + +* Enhancements for POSIX compatibility: + - Only touch targets (under -t) if they have at least one command. + + +Version 3.80 + +* A new feature exists: order-only prerequisites. These prerequisites + affect the order in which targets are built, but they do not impact + the rebuild/no-rebuild decision of their dependents. That is to say, + they allow you to require target B be built before target A, without + requiring that target A will always be rebuilt if target B is updated. + Patch for this feature provided by Greg McGary . + +* For compatibility with SysV make, GNU make now supports the peculiar + syntax $$@, $$(@D), and $$(@F) in the prerequisites list of a rule. + This syntax is only valid within explicit and static pattern rules: it + cannot be used in implicit (suffix or pattern) rules. Edouard G. Parmelan + provided a patch implementing this feature; however, I + decided to implement it in a different way. + +* The argument to the "ifdef" conditional is now expanded before it's + tested, so it can be a constructed variable name. + + Similarly, the arguments to "export" (when not used in a variable + definition context) and "unexport" are also now expanded. + +* A new function is defined: $(value ...). The argument to this + function is the _name_ of a variable. The result of the function is + the value of the variable, without having been expanded. + +* A new function is defined: $(eval ...). The arguments to this + function should expand to makefile commands, which will then be + evaluated as if they had appeared in the makefile. In combination + with define/endef multiline variable definitions this is an extremely + powerful capability. The $(value ...) function is also sometimes + useful here. + +* A new built-in variable is defined, $(MAKEFILE_LIST). It contains a + list of each makefile GNU make has read, or started to read, in the + order in which they were encountered. So, the last filename in the + list when a makefile is just being read (before any includes) is the + name of the current makefile. + +* A new built-in variable is defined: $(.VARIABLES). When it is + expanded it returns a complete list of variable names defined by all + makefiles at that moment. + +* A new command-line option is defined, -B or --always-make. If + specified GNU make will consider all targets out-of-date even if they + would otherwise not be. + +* The arguments to $(call ...) functions were being stored in $1, $2, + etc. as recursive variables, even though they are fully expanded + before assignment. This means that escaped dollar signs ($$ etc.) + were not behaving properly. Now the arguments are stored as simple + variables. This may mean that if you added extra escaping to your + $(call ...) function arguments you will need to undo it now. + +* The variable invoked by $(call ...) can now be recursive: unlike other + variables it can reference itself and this will not produce an error + when it is used as the first argument to $(call ...) (but only then). + +* New pseudo-target .LOW_RESOLUTION_TIME, superseding the configure + option --disable-nsec-timestamps. You might need this if your build + process depends on tools like "cp -p" preserving time stamps, since + "cp -p" (right now) doesn't preserve the subsecond portion of a time + stamp. + +* Updated translations for French, Galician, German, Japanese, Korean, + and Russian. New translations for Croatian, Danish, Hebrew, and + Turkish. + +* Updated internationalization support to Gettext 0.11.5. + GNU make now uses Gettext's "external" feature, and does not include + any internationalization code itself. Configure will search your + system for an existing implementation of GNU Gettext (only GNU Gettext + is acceptable) and use it if it exists. If not, NLS will be disabled. + See ABOUT-NLS for more information. + +* Updated to autoconf 2.54 and automake 1.7. Users should not be impacted. + +Version 3.79.1 + +* .SECONDARY with no prerequisites now prevents any target from being + removed because make thinks it's an intermediate file, not just those + listed in the makefile. + +* New configure option --disable-nsec-timestamps, but this was + superseded in later versions by the .LOW_RESOLUTION_TIME pseudo-target. + +Version 3.79 + +* GNU make optionally supports internationalization and locales via the + GNU gettext (or local gettext if suitable) package. See the ABOUT-NLS + file for more information on configuring GNU make for NLS. + +* Previously, GNU make quoted variables such as MAKEFLAGS and + MAKEOVERRIDES for proper parsing by the shell. This allowed them to + be used within make build scripts. However, using them there is not + proper behavior: they are meant to be passed to subshells via the + environment. Unfortunately the values were not quoted properly to be + passed through the environment. This meant that make didn't properly + pass some types of command line values to submakes. + + With this version we change that behavior: now these variables are + quoted properly for passing through the environment, which is the + correct way to do it. If you previously used these variables + explicitly within a make rule you may need to re-examine your use for + correctness given this change. + +* A new pseudo-target .NOTPARALLEL is available. If defined, the + current makefile is run serially regardless of the value of -j. + However, submakes are still eligible for parallel execution. + +* The --debug option has changed: it now allows optional flags + controlling the amount and type of debugging output. By default only + a minimal amount information is generated, displaying the names of + "normal" targets (not makefiles) that were deemed out of date and in + need of being rebuilt. + + Note that the -d option behaves as before: it takes no arguments and + all debugging information is generated. + +* The `-p' (print database) output now includes filename and linenumber + information for variable definitions, to aid debugging. + +* The wordlist function no longer reverses its arguments if the "start" + value is greater than the "end" value. If that's true, nothing is + returned. + +* Hartmut Becker provided many updates for the VMS port of GNU make. + See the readme.vms file for more details. + +Version 3.78 + +* Two new functions, $(error ...) and $(warning ...) are available. The + former will cause make to fail and exit immediately upon expansion of + the function, with the text provided as the error message. The latter + causes the text provided to be printed as a warning message, but make + proceeds normally. + +* A new function $(call ...) is available. This allows users to create + their own parameterized macros and invoke them later. Original + implementation of this function was provided by Han-Wen Nienhuys + . + +* A new function $(if ...) is available. It provides if-then-else + capabilities in a builtin function. Original implementation of this + function was provided by Han-Wen Nienhuys . + +* Make defines a new variable, .LIBPATTERNS. This variable controls how + library dependency expansion (dependencies like ``-lfoo'') is performed. + +* Make accepts CRLF sequences as well as traditional LF, for + compatibility with makefiles created on other operating systems. + +* Make accepts a new option: -R, or --no-builtin-variables. This option + disables the definition of the rule-specific builtin variables (CC, + LD, AR, etc.). Specifying this option forces -r (--no-builtin-rules) + as well. + +* A "job server" feature, suggested by Howard Chu . + + On systems that support POSIX pipe(2) semantics, GNU make can now pass + -jN options to submakes rather than forcing them all to use -j1. The + top make and all its sub-make processes use a pipe to communicate with + each other to ensure that no more than N jobs are started across all + makes. To get the old behavior of -j back, you can configure make + with the --disable-job-server option. + +* The confusing term "dependency" has been replaced by the more accurate + and standard term "prerequisite", both in the manual and in all GNU make + output. + +* GNU make supports the "big archive" library format introduced in AIX 4.3. + +* GNU make supports large files on AIX, HP-UX, and IRIX. These changes + were provided by Paul Eggert . (Large file + support for Solaris and Linux was introduced in 3.77, but the + configuration had issues: these have also been resolved). + +* The Windows 95/98/NT (W32) version of GNU make now has native support + for the Cygnus Cygwin release B20.1 shell (bash). + +* The GNU make regression test suite, long available separately "under + the table", has been integrated into the release. You can invoke it + by running "make check" in the distribution. Note that it requires + Perl (either Perl 4 or Perl 5) to run. + +Version 3.77 + +* Implement BSD make's "?=" variable assignment operator. The variable + is assigned the specified value only if that variable is not already + defined. + +* Make defines a new variable, "CURDIR", to contain the current working + directory (after the -C option, if any, has been processed). + Modifying this variable has no effect on the operation of make. + +* Make defines a new default RCS rule, for new-style master file + storage: ``% :: RCS/%'' (note no ``,v'' suffix). + + Make defines new default rules for DOS-style C++ file naming + conventions, with ``.cpp'' suffixes. All the same rules as for + ``.cc'' and ``.C'' suffixes are provided, along with LINK.cpp and + COMPILE.cpp macros (which default to the same value as LINK.cc and + COMPILE.cc). Note CPPFLAGS is still C preprocessor flags! You should + use CXXFLAGS to change C++ compiler flags. + +* A new feature, "target-specific variable values", has been added. + This is a large change so please see the appropriate sections of the + manual for full details. Briefly, syntax like this: + + TARGET: VARIABLE = VALUE + + defines VARIABLE as VALUE within the context of TARGET. This is + similar to SunOS make's "TARGET := VARIABLE = VALUE" feature. Note + that the assignment may be of any type, not just recursive, and that + the override keyword is available. + + COMPATIBILITY: This new syntax means that if you have any rules where + the first or second dependency has an equal sign (=) in its name, + you'll have to escape them with a backslash: "foo : bar\=baz". + Further, if you have any dependencies which already contain "\=", + you'll have to escape both of them: "foo : bar\\\=baz". + +* A new appendix listing the most common error and warning messages + generated by GNU make, with some explanation, has been added to the + GNU make User's Manual. + +* Updates to the GNU make Customs library support (see README.customs). + +* Updates to the Windows 95/NT port from Rob Tulloh (see README.W32), + and to the DOS port from Eli Zaretski (see README.DOS). + +Version 3.76.1 + +* Small (but serious) bug fix. Quick rollout to get into the GNU source CD. + +Version 3.76 + +* GNU make now uses automake to control Makefile.in generation. This + should make it more consistent with the GNU standards. + +* VPATH functionality has been changed to incorporate the VPATH+ patch, + previously maintained by Paul Smith . See the + manual. + +* Make defines a new variable, `MAKECMDGOALS', to contain the goals that + were specified on the command line, if any. Modifying this variable + has no effect on the operation of make. + +* A new function, `$(wordlist S,E,TEXT)', is available: it returns a + list of words from number S to number E (inclusive) of TEXT. + +* Instead of an error, detection of future modification times gives a + warning and continues. The warning is repeated just before GNU make + exits, so it is less likely to be lost. + +* Fix the $(basename) and $(suffix) functions so they only operate on + the last filename, not the entire string: + + Command Old Result New Result + ------- ---------- ---------- + $(basename a.b) a a + $(basename a.b/c) a a.b/c + $(suffix a.b) b b + $(suffix a.b/c) b/c + +* The $(strip) function now removes newlines as well as TABs and spaces. + +* The $(shell) function now changes CRLF (\r\n) pairs to a space as well + as newlines (\n). + +* Updates to the Windows 95/NT port from Rob Tulloh (see README.W32). + +* Eli Zaretskii has updated the port to 32-bit protected mode on MSDOS + and MS-Windows, building with the DJGPP v2 port of GNU C/C++ compiler + and utilities. See README.DOS for details, and direct all questions + concerning this port to Eli Zaretskii or DJ + Delorie . + +* John W. Eaton has updated the VMS port to support libraries and VPATH. + +Version 3.75 + +* The directory messages printed by `-w' and implicitly in sub-makes, + are now omitted if Make runs no commands and has no other messages to print. + +* Make now detects files that for whatever reason have modification times + in the future and gives an error. Files with such impossible timestamps + can result from unsynchronized clocks, or archived distributions + containing bogus timestamps; they confuse Make's dependency engine + thoroughly. + +* The new directive `sinclude' is now recognized as another name for + `-include', for compatibility with some other Makes. + +* Aaron Digulla has contributed a port to AmigaDOS. See README.Amiga for + details, and direct all Amiga-related questions to . + +* Rob Tulloh of Tivoli Systems has contributed a port to Windows NT or 95. + See README.W32 for details, and direct all Windows-related questions to + . + +Version 3.73 + +* Converted to use Autoconf version 2, so `configure' has some new options. + See INSTALL for details. + +* You can now send a SIGUSR1 signal to Make to toggle printing of debugging + output enabled by -d, at any time during the run. + +Version 3.72 + +* DJ Delorie has ported Make to MS-DOS using the GO32 extender. + He is maintaining the DOS port, not the GNU Make maintainer; + please direct bugs and questions for DOS to . + MS-DOS binaries are available for FTP from ftp.simtel.net in + /pub/simtelnet/gnu/djgpp/. + +* The `MAKEFLAGS' variable (in the environment or in a makefile) can now + contain variable definitions itself; these are treated just like + command-line variable definitions. Make will automatically insert any + variable definitions from the environment value of `MAKEFLAGS' or from + the command line, into the `MAKEFLAGS' value exported to children. The + `MAKEOVERRIDES' variable previously included in the value of `$(MAKE)' + for sub-makes is now included in `MAKEFLAGS' instead. As before, you can + reset `MAKEOVERRIDES' in your makefile to avoid putting all the variables + in the environment when its size is limited. + +* If `.DELETE_ON_ERROR' appears as a target, Make will delete the target of + a rule if it has changed when its commands exit with a nonzero status, + just as when the commands get a signal. + +* The automatic variable `$+' is new. It lists all the dependencies like + `$^', but preserves duplicates listed in the makefile. This is useful + for linking rules, where library files sometimes need to be listed twice + in the link order. + +* You can now specify the `.IGNORE' and `.SILENT' special targets with + dependencies to limit their effects to those files. If a file appears as + a dependency of `.IGNORE', then errors will be ignored while running the + commands to update that file. Likewise if a file appears as a dependency + of `.SILENT', then the commands to update that file will not be printed + before they are run. (This change was made to conform to POSIX.2.) + +Version 3.71 + +* The automatic variables `$(@D)', `$(%D)', `$(*D)', `$(). + + When the $SHELL variable points to a Unix-style shell, Make + works just like you'd expect on Unix, calling the shell for any + command that involves characters special to the shell or + internal shell commands. The only difference is that, since + there is no standard way to pass command lines longer than the + infamous DOS 126-character limit, this port of Make writes the + command line to a temporary disk file and then invokes the shell + on that file. + + If $SHELL points to a DOS-style shell, however, Make will not + call it automatically, as it does with Unix shells. Stock + COMMAND.COM is too dumb and would unnecessarily limit the + functionality of Make. For example, you would not be able to + use long command lines in commands that use redirection or + pipes. Therefore, when presented with a DOS shell, this port of + Make will emulate most of the shell functionality, like + redirection and pipes, and shall only call the shell when a + batch file or a command internal to the shell is invoked. (Even + when a command is an internal shell command, Make will first + search the $PATH for it, so that if a Makefile calls `mkdir', + you can install, say, a port of GNU `mkdir' and have it called + in that case.) + + The key to all this is the extended functionality of `spawn' and + `system' functions from the DJGPP library; this port just calls + `system' where it would invoke the shell on Unix. The most + important aspect of these functions is that they use a special + mechanism to pass long (up to 16KB) command lines to DJGPP + programs. In addition, `system' emulates some internal + commands, like `cd' (so that you can now use forward slashes + with it, and can also change the drive if the directory is on + another drive). Another aspect worth mentioning is that you can + call Unix shell scripts directly, provided that the shell whose + name is mentioned on the first line of the script is installed + anywhere along the $PATH. It is impossible to tell here + everything about these functions; refer to the DJGPP library + reference for more details. + + The $(shell) built-in is implemented in this port by calling + `popen'. Since `popen' calls `system', the above considerations + are valid for $(shell) as well. In particular, you can put + arbitrary complex commands, including pipes and redirection, + inside $(shell), which is in many cases a valid substitute for + the Unix-style command substitution (`command`) feature. + + + 2. "SHELL=/bin/sh" -- or is it? + + Many Unix Makefiles include a line which sets the SHELL, for + those versions of Make which don't have this as the default. + Since many DOS systems don't have `sh' installed (in fact, most + of them don't even have a `/bin' directory), this port takes + such directives with a grain of salt. It will only honor such a + directive if the basename of the shell name (like `sh' in the + above example) can indeed be found in the directory that is + mentioned in the SHELL= line (`/bin' in the above example), or + in the current working directory, or anywhere on the $PATH (in + that order). If the basename doesn't include a filename + extension, Make will look for any known extension that indicates + an executable file (.exe, .com, .bat, .btm, .sh, and even .sed + and .pl). If any such file is found, then $SHELL will be + defined to the exact pathname of that file, and that shell will + hence be used for the rest of processing. But if the named + shell is *not* found, the line which sets it will be effectively + ignored, leaving the value of $SHELL as it was before. Since a + lot of decisions that this port makes depend on the gender of + the shell, I feel it doesn't make any sense to tailor Make's + behavior to a shell which is nowhere to be found. + + Note that the above special handling of "SHELL=" only happens + for Makefiles; if you set $SHELL in the environment or on the + Make command line, you are expected to give the complete + pathname of the shell, including the filename extension. + + The default value of $SHELL is computed as on Unix (see the Make + manual for details), except that if $SHELL is not defined in the + environment, $COMSPEC is used. Also, if an environment variable + named $MAKESHELL is defined, it takes precedence over both + $COMSPEC and $SHELL. Note that, unlike Unix, $SHELL in the + environment *is* used to set the shell (since on MSDOS, it's + unlikely that the interactive shell will not be suitable for + Makefile processing). + + The bottom line is that you can now write Makefiles where some + of the targets require a real (i.e. Unix-like) shell, which will + nevertheless work when such shell is not available (provided, of + course, that the commands which should always work, don't + require such a shell). More important, you can convert Unix + Makefiles to MSDOS and leave the line which sets the shell + intact, so that people who do have Unixy shell could use it for + targets which aren't converted to DOS (like `install' and + `uninstall', for example). + + + 3. Default directories. + + GNU Make knows about standard directories where it searches for + library and include files mentioned in the Makefile. Since + MSDOS machines don't have standard places for these, this port + will search ${DJDIR}/lib and ${DJDIR}/include respectively. + $DJDIR is defined automatically by the DJGPP startup code as the + root of the DJGPP installation tree (unless you've tampered with + the DJGPP.ENV file). This should provide reasonable default + values, unless you moved parts of DJGPP to other directories. + + + 4. Letter-case in filenames. + + If you run Make on Windows 9x, you should be aware of the + letter-case issue. Make is internally case-sensitive, but all + file operations are case-insensitive on Windows 9x, so + e.g. files `FAQ', `faq' and `Faq' all refer to the same file, as + far as Windows is concerned. The underlying DJGPP C library + functions honor the letter-case of the filenames they get from + the OS, except that by default, they down-case 8+3 DOS filenames + which are stored in upper case in the directory and would break + many Makefiles otherwise. (The details of which filenames are + converted to lower case are explained in the DJGPP libc docs, + under the `_preserve_fncase' and `_lfn_gen_short_fname' + functions, but as a thumb rule, any filename that is stored in + upper case in the directory, is a valid DOS 8+3 filename and + doesn't include characters invalid on MSDOS FAT filesystems, + will be automatically down-cased.) User reports that I have + indicate that this default behavior is generally what you'd + expect; however, your input is most welcome. + + In any case, if you hit a situation where you must force Make to + get the 8+3 DOS filenames in upper case, set FNCASE=y in the + environment or in the Makefile. + + + 5. DOS-style pathnames. + + There are a lot of places throughout the program sources which + make implicit assumptions about the pathname syntax. In + particular, the directories are assumed to be separated by `/', + and any pathname which doesn't begin with a `/' is assumed to be + relative to the current directory. This port attempts to + support DOS-style pathnames which might include the drive letter + and use backslashes instead of forward slashes. However, this + support is not complete; I feel that pursuing this support too + far might break some more important features, particularly if + you use a Unix-style shell (where a backslash is a quote + character). I only consider support of backslashes desirable + because some Makefiles invoke non-DJGPP programs which don't + understand forward slashes. A notable example of such programs + is the standard programs which come with MSDOS. Otherwise, you + are advised to stay away from backslashes whenever possible. In + particular, filename globbing won't work on pathnames with + backslashes, because the GNU `glob' library doesn't support them + (backslash is special in filename wildcards, and I didn't want + to break that). + + One feature which *does* work with backslashes is the filename- + related built-in functions such as $(dir), $(notdir), etc. + Drive letters in pathnames are also fully supported. + + + +Bug reports: +----------- + + Bugs that are clearly related to the MSDOS/DJGPP port should be + reported first on the comp.os.msdos.djgpp news group (if you cannot + post to Usenet groups, write to the DJGPP mailing list, + , which is an email gateway into the above news + group). For other bugs, please follow the procedure explained in + the "Bugs" chapter of the Info docs. If you don't have an Info + reader, look up that chapter in the `make.i1' file with any text + browser/editor. + + + Enjoy, + Eli Zaretskii diff --git a/src/mkutil/make/README.OS2.template b/src/mkutil/make/README.OS2.template new file mode 100644 index 00000000..eff2c0bc --- /dev/null +++ b/src/mkutil/make/README.OS2.template @@ -0,0 +1,159 @@ +Port of GNU make to OS/2. + +Features of GNU make that do not work under OS/2: + - remote job execution + - dynamic load balancing + + +Special features of the OS/2 version: + +Due to the fact that some people might want to use sh syntax in +Makefiles while others might want to use OS/2's native shell cmd.exe, +GNU make supports both shell types. The following list defines the order +that is used to determine the shell: + + 1. The shell specified by the environment variable MAKESHELL. + 2. The shell specified by the SHELL variable within a Makefile. As on + Unix, SHELL is NOT taken from the environment. + 3. The shell specified by the COMSPEC environment variable. + 4. The shell specified by the OS2_SHELL environment variable. + 5. If none of the above is defined /bin/sh is used as default. This + happens e.g. in the make testsuite. + +Note: - Points 3 and 4 can be turned off at compile time by adding + -DNO_CMD_DEFAULT to the CPPFLAGS. + - DOS support is not tested for EMX and therefore might not work. + - The UNIXROOT environment variable is supported to find /bin/sh + if it is not on the current drive. + + +COMPILATION OF GNU MAKE FOR OS/2: + +I. ***** SPECIAL OPTIONS ***** + + - At compile time you can turn off that cmd is used as default shell + (but only /bin/sh). Simply set CPPFLAGS="-DNO_CMD_DEFAULT" and make + will not use cmd unless you cause it to do so by setting MAKESHELL to + cmd or by specifying SHELL=cmd in your Makefile. + + - At compile time you can set CPPFLAGS="-DNO_CHDIR2" to turn off that + GNU make prints drive letters. This is necessary if you want to run + the testsuite. + + +II. ***** REQUIREMENTS FOR THE COMPILATION ***** + +A standard Unix like build environment: + + - sh compatible shell (ksh, bash, ash, but tested only with pdksh 5.2.14 + (release 2) + If you use pdksh it is recommended to update to 5.2.14 release 2. Older + versions may not work! You can get this version at + http://www.math.ohio-state.edu/~ilya/software/os2/pdksh-5.2.14-bin-2.zip + - GNU file utilities (make sure that install.exe from the file utilities + is in front of your PATH before X:\OS2\INSTALL\INSTALL.EXE. I recommend + also to change the filename to ginstall.exe instead of install.exe + to avoid confusion with X:\OS2\INSTALL\INSTALL.EXE) + - GNU shell utilities + - GNU text utilities + - gawk + - grep + - sed + - GNU make 3.79.1 (special OS/2 patched version) + - perl 5.005 or higher + - GNU texinfo (you can use 3.1 (gnuinfo.zip), but I recommend 4.0) + +If you want to recreate the configuration files (developers only!) +you need also: GNU m4 1.4, autoconf 2.57, automake 1.7.2 (or compatible) + + +III. ***** COMPILATION AND INSTALLATION ***** + + a) ** Developers only - Everyone else should skip this section ** + To recreate the configuration files use: + + export EMXSHELL=ksh + aclocal -I config + automake + autoconf + autoheader + + +b) Installation into x:/usr + + Note: Although it is possible to compile make using "./configure", + "make", "make install" this is not recommended. In particular, + you must ALWAYS use LDFLAGS="-Zstack 0x8000" because the default + stack size is far to small and make will not work properly! + +Recommended environment variables and installation options: + + export ac_executable_extensions=".exe" + export CPPFLAGS="-D__ST_MT_ERRNO__" + export CFLAGS="-O2 -Zomf -Zmt" + export LDFLAGS="-Zcrtdll -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x8000" + export RANLIB="echo" + ./configure --prefix=x:/usr --infodir=x:/usr/share/info --mandir=x:/usr/share/man --without-included-gettext + make AR=emxomfar + make install + +Note: If you use gcc 2.9.x or higher I recommend to set also LIBS="-lgcc" + +Note: You can add -DNO_CMD_DEFAULT and -DNO_CHDIR2 to CPPFLAGS. + See section I. for details. + + +IV. ***** NLS support ***** + +GNU make has NLS (National Language Support), with the following +caveats: + + a) It will only work with GNU gettext, and + b) GNU gettext support is not included in the GNU make package. + +Therefore, if you wish to enable the internationalization features of +GNU make you must install GNU gettext on your system before configuring +GNU make. + +You can choose the languages to be installed. To install support for +English, German and French only enter: + + export LINGUAS="en de fr" + +If you don't specify LINGUAS all languages are installed. + +If you don't want NLS support (English only) use the option +--disable-nls for the configure script. Note if GNU gettext is not +installed then NLS will not be enabled regardless of this flag. + + +V. ***** Running the make test suite ***** + +To run the included make test suite you have to set + + CPPFLAGS="-D__ST_MT_ERRNO__ -DNO_CMD_DEFAULT -DNO_CHDIR2" + +before you compile make. This is due to some restrictions of the +testsuite itself. -DNO_CMD_DEFAULT causes make to use /bin/sh as default +shell in every case. Normally you could simply set MAKESHELL="/bin/sh" +to do this but the testsuite ignores the environment. -DNO_CHDIR2 causes +make not to use drive letters for directory names (i.e. _chdir2() and +_getcwd2() are NOT used). The testsuite interpretes the whole output of +make, especially statements like make[1]: Entering directory +`C:/somewhere/make-3.79.1/tests' where the testsuite does not expect the +drive letter. This would be interpreted as an error even if there is +none. + +To run the testsuite do the following: + + export CPPFLAGS="-D__ST_MT_ERRNO__ -DNO_CMD_DEFAULT -DNO_CHDIR2" + export CFLAGS="-Zomf -O2 -s -Zmt" + export LDFLAGS="-Zcrtdll -Zmt -s -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x8000" + export RANLIB="echo" + ./configure --prefix=x:/usr --disable-nls + make AR=emxomfar + make checks + +All tests should work fine with the exception of "default_names" which +is because OS/2 file systems are not case sensitive ("makefile" and +"Makefile" specify the same file). diff --git a/src/mkutil/make/README.W32.template b/src/mkutil/make/README.W32.template new file mode 100644 index 00000000..2b15584f --- /dev/null +++ b/src/mkutil/make/README.W32.template @@ -0,0 +1,241 @@ +Port of GNU make to Windows NT and Windows 95 +Builds natively with MSVC 2.x or MSVC 4.x compilers. +Should also build fine with MSVC 5.x and 6.x (though not confirmed). + +This Windows 32-bit port of GNU make is maintained primarily by Rob +Tulloh, who is also the author of this README. + +To build with nmake on Windows NT, Windows 95, or Windows 98: + + 1. Make sure cl.exe is in your %Path%. Example: + + set Path=%Path%;c:/msdev/bin + + 2. Make sure %include% is set to msvc include directory. Example: + + set include=c:/msdev/include + + 3. Make sure %lib% is set to msvc lib directory. Example: + + set lib=c:/msdev/lib + + 4. nmake /f NMakefile + + + A short cut to steps 1, 2, and 3 is to run VCVARS32.bat before + invoking namke. For example: + + c: + cd \msdev\bin + VCVARS32.bat + cd \path\to\make-%VERSION% + nmake /f NMakefile + +There is a bat file (build_w32.bat) for folks who have fear of nmake. + +Outputs: + + WinDebug/make.exe + WinRel/make.exe + + +-- Notes/Caveats -- + +GNU make on Windows 32-bit platforms: + + This version of make is ported natively to Windows32 platforms + (Windows NT 3.51, Windows NT 4.0, Windows 95, and Windows 98). It + does not rely on any 3rd party software or add-on packages for + building. The only thing needed is a version of Visual C++, + which is the predominant compiler used on Windows32 platforms. + + Do not confuse this port of GNU make with other Windows32 projects + which provide a GNU make binary. These are separate projects + and are not connected to this port effort. + +GNU make and sh.exe: + + This port prefers you have a working sh.exe somewhere on your + system. If you don't have sh.exe, the port falls back to + MSDOS mode for launching programs (via a batch file). + The MSDOS mode style execution has not been tested that + carefully though (The author uses GNU bash as sh.exe). + + There are very few true ports of Bourne shell for NT right now. + There is a version of GNU bash available from Cygnus "Cygwin" + porting effort (http://sourceware.cygnus.com/cygwin). + Other possibilities are the MKS version of sh.exe, or building + your own with a package like NutCracker (DataFocus) or Portage + (Consensys). + +GNU make and brain-dead shells (BATCH_MODE_ONLY_SHELL): + + Some versions of Bourne shell does not behave well when invoked + as 'sh -c' from CreateProcess(). The main problem is they seem + to have a hard time handling quoted strings correctly. This can + be circumvented by writing commands to be executed to a batch + file and then executing the command by calling 'sh file'. + + To work around this difficulty, this version of make supports + a batch mode. When BATCH_MODE_ONLY_SHELL is defined at compile + time, make forces all command lines to be executed via script + files instead of by command line. + + A native Windows32 system with no Bourne shell will also run + in batch mode. All command lines will be put into batch files + and executed via $(COMSPEC) (%COMSPEC%). + +GNU make and Cygnus GNU Windows32 tools: + + Good news! Make now has native support for Cygwin sh. To enable, + define the HAVE_CYGWIN_SHELL in config.h and rebuild make + from scratch. This version of make tested with B20.1 of Cygwin. + Do not define BATCH_MODE_ONLY_SHELL if you use HAVE_CYGWIN_SHELL. + +GNU make and the MKS shell: + + There is now semi-official support for the MKS shell. To turn this + support on, define HAVE_MKS_SHELL in the config.h.W32 before you + build make. Do not define BATCH_MODE_ONLY_SHELL if you turn + on HAVE_MKS_SHELL. + +GNU make handling of drive letters in pathnames (PATH, vpath, VPATH): + + There is a caveat that should be noted with respect to handling + single character pathnames on Windows systems. When colon is + used in PATH variables, make tries to be smart about knowing when + you are using colon as a separator versus colon as a drive + letter. Unfortunately, something as simple as the string 'x:/' + could be interpreted 2 ways: (x and /) or (x:/). + + Make chooses to interpret a letter plus colon (e.g. x:/) as a + drive letter pathname. If it is necessary to use single + character directories in paths (VPATH, vpath, Path, PATH), the + user must do one of two things: + + a. Use semicolon as the separator to disambiguate colon. For + example use 'x;/' if you want to say 'x' and '/' are + separate components. + + b. Qualify the directory name so that there is more than + one character in the path(s) used. For example, none + of these settings are ambiguous: + + ./x:./y + /some/path/x:/some/path/y + x:/some/path/x:x:/some/path/y + + Please note that you are free to mix colon and semi-colon in the + specification of paths. Make is able to figure out the intended + result and convert the paths internally to the format needed + when interacting with the operating system. + + You are encouraged to use colon as the separator character. + This should ease the pain of deciding how to handle various path + problems which exist between platforms. If colon is used on + both Unix and Windows systems, then no ifdef'ing will be + necessary in the makefile source. + +GNU make test suite: + + I verified all functionality with a slightly modified version + of make-test-%VERSION% (modifications to get test suite to run + on Windows NT). All tests pass in an environment that includes + sh.exe. Tests were performed on both Windows NT and Windows 95. + +Building GNU make on Windows NT and Windows 95/98 with Microsoft Visual C: + + I did not provide a Visual C project file with this port as + the project file would not be considered freely distributable + (or so I think). It is easy enough to create one, though, if + you know how to use Visual C. + + I build the program statically to avoid problems locating DLL's + on machines that may not have MSVC runtime installed. If you + prefer, you can change make to build with shared libraries by + changing /MT to /MD in the NMakefile (or in build_w32.bat). + + The program has not been built for non-Intel architectures (yet). + + I have not tried to build with any other compilers than MSVC. I + have heard that this is possible though so don't be afraid to + notify me of your successes! + +Pathnames and white space: + + Unlike Unix, Windows 95/NT systems encourage pathnames which + contain white space (e.g. C:\Program Files\). These sorts of pathnames + are legal under Unix too, but are never encouraged. There is + at least one place in make (VPATH/vpath handling) where paths + containing white space will simply not work. There may be others + too. I chose to not try and port make in such a way so that + these sorts of paths could be handled. I offer these suggestions + as workarounds: + + 1. Use 8.3 notation + 2. Rename the directory so it does not contain white space. + + If you are unhappy with this choice, this is free software + and you are free to take a crack at making this work. The code + in w32/pathstuff.c and vpath.c would be the places to start. + +Pathnames and Case insensitivity: + + Unlike Unix, Windows 95/NT systems are case insensitive but case + preserving. For example if you tell the file system to create a + file named "Target", it will preserve the case. Subsequent access to + the file with other case permutations will succeed (i.e. opening a + file named "target" or "TARGET" will open the file "Target"). + + By default, GNU make retains its case sensitivity when comparing + target names and existing files or directories. It can be + configured, however, into a case preserving and case insensitive + mode by adding a define for HAVE_CASE_INSENSITIVE_FS to + config.h.W32. + + For example, the following makefile will create a file named + Target in the directory subdir which will subsequently be used + to satisfy the dependency of SUBDIR/DepTarget on SubDir/TARGET. + Without HAVE_CASE_INSENSITIVE_FS configured, the dependency link + will not be made: + + subdir/Target: + touch $@ + + SUBDIR/DepTarget: SubDir/TARGET + cp $^ $@ + + Reliance on this behavior also eliminates the ability of GNU make + to use case in comparison of matching rules. For example, it is + not possible to set up a C++ rule using %.C that is different + than a C rule using %.c. GNU make will consider these to be the + same rule and will issue a warning. + +SAMBA/NTFS/VFAT: + + I have not had any success building the debug version of this + package using SAMBA as my file server. The reason seems to be + related to the way VC++ 4.0 changes the case name of the pdb + filename it is passed on the command line. It seems to change + the name always to to lower case. I contend that + the VC++ compiler should not change the casename of files that + are passed as arguments on the command line. I don't think this + was a problem in MSVC 2.x, but I know it is a problem in MSVC 4.x. + + The package builds fine on VFAT and NTFS filesystems. + + Most all of the development I have done to date has been using + NTFS and long file names. I have not done any considerable work + under VFAT. VFAT users may wish to be aware that this port + of make does respect case sensitivity. + +FAT: + + Version 3.76 added support for FAT filesystems. Make + works around some difficulties with stat'ing of + files and caching of filenames and directories internally. + +Bug reports: + + Please submit bugs via the normal bug reporting mechanism which + is described in the GNU make manual and the base README. diff --git a/src/mkutil/make/README.customs b/src/mkutil/make/README.customs new file mode 100644 index 00000000..1976943e --- /dev/null +++ b/src/mkutil/make/README.customs @@ -0,0 +1,95 @@ + -*-indented-text-*- + +GNU make can utilize the Customs library, distributed with Pmake, to +provide builds distributed across multiple hosts. + +In order to utilize this capability, you must first download and build +the Customs library. It is contained in the Pmake distribution, which +can be obtained at: + + ftp://ftp.icsi.berkeley.edu/pub/ai/stolcke/software/ + +This integration was tested (superficially) with Pmake 2.1.33. + + +BUILDING CUSTOMS +---------------- + +First, build pmake and Customs. You need to build pmake first, because +Customs require pmake to build. Unfortunately, this is not trivial; +please see the pmake and Customs documentation for details. The best +place to look for instructions is in the pmake-2.1.33/INSTALL file. + +Note that the 2.1.33 Pmake distribution comes with a set of patches to +GNU make, distributed in the pmake-2.1.33/etc/gnumake/ directory. These +patches are based on GNU make 3.75 (there are patches for earlier +versions of GNU make, also). The parts of this patchfile which relate +directly to Customs support have already been incorporated into this +version of GNU make, so you should _NOT_ apply the patch file. + +However, there are a few non-Customs specific (as far as I could tell) +changes here which are not incorporated (for example, the modification +to try expanding -lfoo to libfoo.so). If you rely on these changes +you'll need to re-apply them by hand. + +Install the Customs library and header files according to the +documentation. You should also install the man pages (contrary to +comments in the documentation, they weren't installed automatically for +me; I had to cd to the ``pmake-2.1.33/doc'' directory and run ``pmake +install'' there directly). + + +BUILDING GNU MAKE +----------------- + +Once you've installed Customs, you can build GNU make to use it. When +configuring GNU make, merely use the ``--with-customs=DIR'' option. +Provide the directory containing the ``lib'' and ``include/customs'' +subdirectories as DIR. For example, if you installed the customs +library in /usr/local/lib and the headers in /usr/local/include/customs, +then you'd pass ``--with-customs=/usr/local'' as an option to configure. + +Run make (or use build.sh) normally to build GNU make as described in +the INSTALL file. + +See the documentation for Customs for information on starting and +configuring Customs. + + +INVOKING CUSTOMS-IZED GNU MAKE +----------------------------- + +One thing you should be aware of is that the default build environment +for Customs requires root permissions. Practically, this means that GNU +make must be installed setuid root to use Customs. + +If you don't want to do this, you can build Customs such that root +permissions are not necessary. Andreas Stolcke +writes: + + > pmake, gnumake or any other customs client program is not required to + > be suid root if customs was compiled WITHOUT the USE_RESERVED_PORTS + > option in customs/config.h. Make sure the "customs" service in + > /etc/services is defined accordingly (port 8231 instead of 1001). + + > Not using USE_RESERVED_PORTS means that a user with programming + > skills could impersonate another user by writing a fake customs + > client that pretends to be someone other than himself. See the + > discussion in etc/SECURITY. + + +PROBLEMS +-------- + +SunOS 4.1.x: + The customs/sprite.h header file #includes the header + files; this conflicts with GNU make's configuration so you'll get a + compile error if you use GCC (or any other ANSI-capable C compiler). + + I commented out the #include in sprite.h:107: + + #if defined(sun) || defined(ultrix) || defined(hpux) || defined(sgi) + /* #include */ + #else + + YMMV. diff --git a/src/mkutil/make/README.cvs b/src/mkutil/make/README.cvs new file mode 100644 index 00000000..8fa4feb7 --- /dev/null +++ b/src/mkutil/make/README.cvs @@ -0,0 +1,110 @@ + -*-text-*- + +Obtaining CVS Code +------------------ + +This seems redundant, since if you're reading this you most likely have +already performed this step; however, for completeness, you can obtain +the GNU make source code via anonymous CVS from the FSF's Savannah +project : + + $ cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/make co make + +You might want to use the "-z3" option to get compression, and you most +certainly will want the -P option to avoid unneeded directories +cluttering up your source. Personally I add these (as well as -dP for +update) to my ~/.cvsrc file. + + +If you have an older version of CVS, you might have to login first. +There is no password; just hit the ENTER key if you are asked for one. + + +Building From CVS +----------------- + +To build GNU make from CVS, you will need Autoconf 2.57 (or better), +Automake 1.7.3 (or better), and Gettext 0.11.5 (or better), and any +tools that those utilities require (GNU m4, Perl, etc.). You will also +need a copy of wget. + +After checking out the code, you will need to perform these steps to get +to the point where you can run "make". + + + 1) $ autoreconf -i -s + + This rebuilds all the things that need rebuilding, installing + missing files as symbolic links. + + + 2) $ ./configure + + Generate a Makefile + + + 3) $ make update + + Use wget to retrieve various other files that GNU make relies on, + but does not keep in its own source tree. + + NB: You may need GNU make to correctly perform this step; if you use + a platform-local make you may get problems with missing files in doc/. + + +At this point you have successfully brought your CVS copy of the GNU +make source directory up to the point where it can be treated +more-or-less like the official package you would get from ftp.gnu.org. +That is, you can just run: + + $ make && make check && make install + +to build and install GNU make. + + +Creating a Package +------------------ + +Once you have performed the above steps (including the configuration and +build) you can create a GNU make package. This is very simple, just +run: + + $ make dist-gzip + +and, if you like: + + $ make dist-bzip2 + +Even better, you should run this: + + $ make distcheck + +Which will build both .gz and .bz2 package files, then unpack them into +a temporary location, try to build them, and repack them, verifying that +everything works, you get the same results, _and_ no extraneous files +are left over after the "distclean" rule--whew!! Now, _that_ is why +converting to Automake is worth the trouble! A big "huzzah!" to Tom +T. and the AutoToolers! + + +That's it, you're done! + + +Appendix A - For The Brave +-------------------------- + +For those of you who trust me implicitly, or are just brave (or +foolhardy), here is a canned sequence of commands to build a GNU make +distribution package from a virgin CVS source checkout (assuming all the +prerequisites are available of course). + +This list is eminently suitable for a quick swipe o' the mouse and a +swift click o' mouse-2 into an xterm. Go for it! + + +autoreconf -i -s +./configure +make update +make +make check +make distcheck diff --git a/src/mkutil/make/README.template b/src/mkutil/make/README.template new file mode 100644 index 00000000..969f2084 --- /dev/null +++ b/src/mkutil/make/README.template @@ -0,0 +1,164 @@ +This directory contains the %VERSION% release of GNU Make. + +See the file NEWS for the user-visible changes from previous releases. +In addition, there have been bugs fixed. + +Please check the system-specific notes below for any caveats related to +your operating system. + +For general building and installation instructions, see the file INSTALL. + +If you need to build GNU Make and have no other `make' program to use, +you can use the shell script `build.sh' instead. To do this, first run +`configure' as described in INSTALL. Then, instead of typing `make' to +build the program, type `sh build.sh'. This should compile the program +in the current directory. Then you will have a Make program that you can +use for `./make install', or whatever else. + +Some systems' Make programs are broken and cannot process the Makefile for +GNU Make. If you get errors from your system's Make when building GNU +Make, try using `build.sh' instead. + + +GNU Make is free software. See the file COPYING for copying conditions. + + +Downloading +----------- + +GNU Make can be obtained in many different ways. See a description here: + + http://www.gnu.org/software/software.html + + +Documentation +------------- + +GNU make is fully documented in the GNU Make manual, which is contained +in this distribution as the file make.texinfo. You can also find +on-line and preformatted (PostScript and DVI) versions at the FSF's web +site. There is information there about ordering hardcopy documentation. + + http://www.gnu.org/ + http://www.gnu.org/doc/doc.html + http://www.gnu.org/manual/manual.html + + +Development +----------- + +GNU Make development is hosted by Savannah, the FSF's online development +management tool. Savannah is here: + + http://savannah.gnu.org + +And the GNU Make development page is here: + + http://savannah.gnu.org/projects/make/ + +You can find most information concerning the development of GNU Make at +this site. + + +Bug Reporting +------------- + +You can send GNU make bug reports to . Please see the +section of the GNU make manual entitled `Problems and Bugs' for +information on submitting useful and complete bug reports. + +You can also use the online bug tracking system in the Savannah GNU Make +project to submit new problem reports or search for existing ones: + + http://savannah.gnu.org/bugs/?group_id=71 + +If you need help using GNU make, try these forums: + + help-make@gnu.org + help-utils@gnu.org + news:gnu.utils.help + news:gnu.utils.bug + + http://savannah.gnu.org/support/?group_id=71 + +You may also find interesting patches to GNU Make available here: + + http://savannah.gnu.org/patch/?group_id=71 + +Note these patches are provided by our users as a service and we make no +statements regarding their correctness. Please contact the authors +directly if you have a problem or suggestion for a patch available on +this page. + + +CVS Access +---------- + +The GNU make source repository is available via anonymous CVS from the +GNU Subversions CVS server; look here for details: + + http://savannah.gnu.org/cvs/?group_id=71 + +Please note: you won't be able to build GNU make from CVS without +installing appropriate maintainer's tools, such as GNU m4, automake, +autoconf, Perl, GNU make, and GCC. See the README.cvs file for hints on +how to build GNU make once these tools are available. We make no +guarantees about the contents or quality of the latest code in the CVS +repository: it is not unheard of for code that is known to be broken to +be checked in. Use at your own risk. + + +System-specific Notes +--------------------- + +It has been reported that the XLC 1.2 compiler on AIX 3.2 is buggy such +that if you compile make with `cc -O' on AIX 3.2, it will not work correctly. +It is said that using `cc' without `-O' does work. + +One area that is often a problem in configuration and porting is the code +to check the system's current load average. To make it easier to test and +debug this code, you can do `make check-loadavg' to see if it works +properly on your system. (You must run `configure' beforehand, but you +need not build Make itself to run this test.) + +Another potential source of porting problems is the support for large +files (LFS) in configure for those operating systems that provide it. +Please report any bugs that you find in this area. If you run into +difficulties, then as a workaround you should be able to disable LFS by +adding the `--disable-largefile' option to the `configure' script. + +On systems that support micro- and nano-second timestamp values and +where stat(2) provides this information, GNU make will use it when +comparing timestamps to get the most accurate possible result. However, +note that many current implementations of tools that *set* timestamps do +not preserve micro- or nano-second granularity. This means that "cp -p" +and other similar tools (tar, etc.) may not exactly duplicate timestamps +with micro- and nano-second granularity on some systems. If your build +system contains rules that depend on proper behavior of tools like "cp +-p", you should consider using the .LOW_RESOLUTION_TIME pseudo-target to +force make to treat them properly. See the manual for details. + + +Ports +----- + + - See README.customs for details on integrating GNU make with the + Customs distributed build environment from the Pmake distribution. + + - See readme.vms for details about GNU Make on OpenVMS. + + - See README.Amiga for details about GNU Make on AmigaDOS. + + - See README.W32 for details about GNU Make on Windows NT, 95, or 98. + + - See README.DOS for compilation instructions on MS-DOS and MS-Windows + using DJGPP tools. + + A precompiled binary of the MSDOS port of GNU Make is available as part + of DJGPP; see the WWW page http://www.delorie.com/djgpp/ for more + information. + +Please note there are two _separate_ ports of GNU make for Microsoft +systems: a native Windows tool built with (for example) MSVC or Cygwin, +and a DOS-based tool built with DJGPP. Please be sure you are looking +at the right README! diff --git a/src/mkutil/make/SCOPTIONS b/src/mkutil/make/SCOPTIONS new file mode 100644 index 00000000..f89daae1 --- /dev/null +++ b/src/mkutil/make/SCOPTIONS @@ -0,0 +1,13 @@ +ERRORREXX +OPTIMIZE +NOVERSION +OPTIMIZERTIME +OPTIMIZERALIAS +DEFINE INCLUDEDIR="include:" +DEFINE LIBDIR="lib:" +DEFINE NO_ALLOCA +DEFINE NO_FLOAT +DEFINE NO_ARCHIVES +IGNORE=161 +IGNORE=100 +STARTUP=cres diff --git a/src/mkutil/make/SMakefile.template b/src/mkutil/make/SMakefile.template new file mode 100644 index 00000000..64c06853 --- /dev/null +++ b/src/mkutil/make/SMakefile.template @@ -0,0 +1,213 @@ +# NOTE: If you have no `make' program at all to process this makefile, run +# `build.sh' instead. +# +# Copyright (C) 1988, 89, 91, 92, 93, 94, 1995 Free Software Foundation, Inc. +# This file is part of GNU Make. +# +# GNU Make 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, or (at your option) +# any later version. +# +# GNU Make 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 GNU Make; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# +# Makefile for GNU Make +# + +# Ultrix 2.2 make doesn't expand the value of VPATH. +VPATH = /make-%VERSION%/ +# This must repeat the value, because configure will remove `VPATH = .'. +srcdir = /make-%VERSION%/ + +CC = sc +RM = delete +MAKE = smake + +CFLAGS = +CPPFLAGS = +LDFLAGS = + +# Define these for your system as follows: +# -DNO_ARCHIVES To disable `ar' archive support. +# -DNO_FLOAT To avoid using floating-point numbers. +# -DENUM_BITFIELDS If the compiler isn't GCC but groks enum foo:2. +# Some compilers apparently accept this +# without complaint but produce losing code, +# so beware. +# NeXT 1.0a uses an old version of GCC, which required -D__inline=inline. +# See also `config.h'. +defines = + +# Which flavor of remote job execution support to use. +# The code is found in `remote-$(REMOTE).c'. +REMOTE = stub + +# If you are using the GNU C library, or have the GNU getopt functions in +# your C library, you can comment these out. +GETOPT = getopt.o getopt1.o +GETOPT_SRC = $(srcdir)getopt.c $(srcdir)getopt1.c $(srcdir)getopt.h + +# If you are using the GNU C library, or have the GNU glob functions in +# your C library, you can comment this out. GNU make uses special hooks +# into the glob functions to be more efficient (by using make's directory +# cache for globbing), so you must use the GNU functions even if your +# system's C library has the 1003.2 glob functions already. Also, the glob +# functions in the AIX and HPUX C libraries are said to be buggy. +GLOB = Lib glob/glob.lib + +# If your system doesn't have alloca, or the one provided is bad, define this. +ALLOCA = alloca.o +ALLOCA_SRC = $(srcdir)alloca.c + +# If your system needs extra libraries loaded in, define them here. +# System V probably need -lPW for alloca. HP-UX 7.0's alloca in +# libPW.a is broken on HP9000s300 and HP9000s400 machines. Use +# alloca.c instead on those machines. +LOADLIBES = + +# Any extra object files your system needs. +extras = amiga.o + +# Common prefix for machine-independent installed files. +prefix = +# Common prefix for machine-dependent installed files. +exec_prefix = + +# Directory to install `make' in. +bindir = sc:c +# Directory to find libraries in for `-lXXX'. +libdir = lib: +# Directory to search by default for included makefiles. +includedir = include: +# Directory to install the Info files in. +infodir = doc: +# Directory to install the man page in. +mandir = t: +# Number to put on the man page filename. +manext = 1 +# Prefix to put on installed `make' binary file name. +binprefix = +# Prefix to put on installed `make' man page file name. +manprefix = $(binprefix) + +# Whether or not make needs to be installed setgid. +# The value should be either `true' or `false'. +# On many systems, the getloadavg function (used to implement the `-l' +# switch) will not work unless make is installed setgid kmem. +install_setgid = false +# Install make setgid to this group so it can read /dev/kmem. +group = sys + +# Program to install `make'. +INSTALL_PROGRAM = copy +# Program to install the man page. +INSTALL_DATA = copy +# Generic install program. +INSTALL = copy + +# Program to format Texinfo source into Info files. +MAKEINFO = makeinfo +# Program to format Texinfo source into DVI files. +TEXI2DVI = texi2dvi + +# Programs to make tags files. +ETAGS = etags -w +CTAGS = ctags -w + +objs = commands.o job.o dir.o file.o misc.o main.o read.o remake.o \ + rule.o implicit.o default.o variable.o expand.o function.o \ + vpath.o version.o ar.o arscan.o signame.o hash.o \ + remote-$(REMOTE).o $(GLOB) $(GETOPT) $(ALLOCA) $(extras) +srcs = $(srcdir)commands.c $(srcdir)job.c $(srcdir)dir.c \ + $(srcdir)file.c $(srcdir)getloadavg.c $(srcdir)misc.c \ + $(srcdir)main.c $(srcdir)read.c $(srcdir)remake.c \ + $(srcdir)rule.c $(srcdir)implicit.c $(srcdir)default.c \ + $(srcdir)variable.c $(srcdir)expand.c $(srcdir)function.c \ + $(srcdir)vpath.c $(srcdir)version.c $(srcdir)hash.c \ + $(srcdir)remote-$(REMOTE).c \ + $(srcdir)ar.c $(srcdir)arscan.c \ + $(srcdir)signame.c $(srcdir)signame.h $(GETOPT_SRC) \ + $(srcdir)commands.h $(srcdir)dep.h $(srcdir)file.h \ + $(srcdir)job.h $(srcdir)make.h $(srcdir)rule.h \ + $(srcdir)variable.h $(ALLOCA_SRC) $(srcdir)config.h.in + + +.SUFFIXES: +.SUFFIXES: .o .c .h .ps .dvi .info .texinfo + +all: make +info: make.info +dvi: make.dvi +# Some makes apparently use .PHONY as the default goal if it is before `all'. +.PHONY: all check info dvi + +make.info: make.texinfo + $(MAKEINFO) -I$(srcdir) $(srcdir)make.texinfo -o make.info + +make.dvi: make.texinfo + $(TEXI2DVI) $(srcdir)make.texinfo + +make.ps: make.dvi + dvi2ps make.dvi > make.ps + +make: $(objs) glob/glob.lib + $(CC) Link $(LDFLAGS) $(objs) $(LOADLIBES) To make.new + -delete quiet make + rename make.new make + +# -I. is needed to find config.h in the build directory. +.c.o: + $(CC) $(defines) IDir "" IDir $(srcdir)glob \ + $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION) + +glob/glob.lib: + execute << + cd glob + smake +< + +tagsrcs = $(srcs) $(srcdir)remote-*.c +TAGS: $(tagsrcs) + $(ETAGS) $(tagsrcs) +tags: $(tagsrcs) + $(CTAGS) $(tagsrcs) + +.PHONY: install installdirs +install: + copy make sc:c + +loadavg: loadavg.c config.h + $(CC) $(defines) -DTEST -I. -I$(srcdir) $(CFLAGS) $(LDFLAGS) \ + loadavg.c $(LOADLIBES) -o $@ + +clean: glob-clean + -$(RM) -f make loadavg *.o core make.dvi + +distclean: clean glob-realclean + -$(RM) -f Makefile config.h config.status build.sh + -$(RM) -f config.log config.cache + -$(RM) -f TAGS tags + -$(RM) -f make.?? make.??s make.log make.toc make.*aux + -$(RM) -f loadavg.c + +realclean: distclean + -$(RM) -f make.info* + +mostlyclean: clean + +.PHONY: glob-clean glob-realclean + +glob-clean glob-realclean: + execute << + cd glob + smake $@ +< diff --git a/src/mkutil/make/TODO.private b/src/mkutil/make/TODO.private new file mode 100644 index 00000000..693b7bb5 --- /dev/null +++ b/src/mkutil/make/TODO.private @@ -0,0 +1,140 @@ + -*-Indented-Text-*- +GNU Make TODO List +------------------ + +This list comes both from the authors and from users of GNU make. + +They are listed in no particular order! + +Also, I don't gaurantee that all of them will be ultimately deemed "good +ideas" and implemented. These are just the ones that, at first blush, +seem to have some merit (and that I can remember). + +However, if you see something here you really, really want, speak up. +All other things being equal, I will tend to implement things that seem +to maximize user satisfaction. + +If you want to implement some of them yourself, barring the ones I've +marked below, have at it! Please contact me first to let me know you're +working on it, and give me some info about the design--and, critically, +information about any user-visible syntax change, etc. + + +The Top Item +------------ + +If you know perl (or want to learn DejaGNU or similar), the number one +priority on my list of things I don't have time to do right now is +fixing up the GNU make test suite. Most importantly it needs to be made +"parallelizable", so more than one regression can run at the same time +(essentially, make the "work" directory local). Also, the CWD during +the test should be in the work directory or, better, a test-specific +temporary directory so each test gets a new directory; right now +sometimes tests leak files into the main directory which causes +subsequent tests to fail (some tests may need to be tweaked). Beyond +that, any cleanup done to make writing, reading, or handling tests +simpler would be great! Please feel free to make whatever changes you +like to the current tests, given some high-level goals, and that you'll +port the current tests to whatever you do :). + + +The Rest of the List +-------------------- + + 1) Allow variables/functions to expand to other make rules which are + then interpreted, with newlines handled correctly. This is a + biggee, and is on my plate. I already have partially-working code. + + 2) Option to check more than timestamps to determine if targets have + changed. This is also a very big one. It's _close_ to my plate :), + and I have very definite ideas about how I would like it done. + Please pick something else unless you must have this feature. If + you try it, please work _extremely_ closely with me on it. + + 2a) Possibly a special case of this is the .KEEP_STATE feature of Sun's + make. Some great folks at W U. in Canada did an implementation of + this for a class project. Their approach is reasonable and + workable, but doesn't really fit into my ideas for #2. Maybe + that's OK. I have paperwork for their work so if you want to do + this one talk to me to get what they've already done. + + [K R Praveen ] + + 3) Currently you can use "%.foo %.bar : %.baz" to mean that one + invocation of the rule builds both targets. GNU make needs a way to + do that for explicit rules, too. I heard a rumor that some versions + of make all you to say "a.foo + a.bar : a.baz" to do this (i.e., a + "+" means one invocation builds both). Don't know if this is the + best syntax or not... what if you say "a.foo + a.bar a.bam : a.baz"; + what does that mean? + + 4) Multi-token pattern rule matching (allow %1/%2.c : %1/obj/%2.o, + etc., or something like that). I have an implementation of this + already, it just needs some refinement... maybe. Additionally I + think it only works for static pattern rules; it might need to be + fixed up to work with normal pattern rules, too. + + 5) More robust clock skew detection algorithm: less false hits. I have + some notes on this from various discussions. + + 6) Provide MAKETARGETS and MAKEVARIABLES variables, containing the + names of the targets and variables defined in the makefile. + + Actually, I now think a $(targets ...) function, at least, would be + better than a MAKETARGETS variable. The argument would be types of + targets to list: "phony" is the most useful one. I suppose + "default" might also be useful. Maybe some others; check the + bitfields to see what might be handy. This one is pretty easy. + + 7) Some sort of operating-system independent way of handling paths + would be outstanding, so makefiles can be written for UNIX, VMS, + DOS, MS-Windows, Amiga, etc. with a minimum of specialization. + + Or, perhaps related/instead of, some sort of meta-quoting syntax so + make can deal with filenames containing spaces, colons, etc. I + dunno, maybe something like $[...]? This may well not be worth + doing until #1 is done. + + 9) Right now the .PRECIOUS, .INTERMEDIATE, and .SECONDARY + pseudo-targets have different capabilities. For example, .PRECIOUS + can take a "%", the others can't. Etc. These should all work the + same, insofar as that makes sense. + +10) A syntax that specifies a build order _without_ implying a + dependency relationship. That is, a way to say "A must be built + before B" that doesn't force B to be built when A changes. This is + very important for parallel builds: sometimes you need some stuff + done first but you don't want to rebuild everything because of it. + +11) Improved debugging/logging/etc. capabilities. Part of this is done: + I introduced a number of debugging enhancements. Tim Magill is (I + think) looking into options to control output more selectively. + One thing I want to do in debugging is add a flag to allow debugging + of variables as they're expanded (!). This would be incredibly + verbose, but could be invaluable when nothing else seems to work and + you just can't figure it out. The way variables are expanded now + means this isn't 100% trivial, but it probably won't be hard. + +12) Integration of Guile as an embedded scripting language. This means: + allowing Guile functions to be declared in makefiles somehow, then + providing a syntax for invoking them. At least one formulation of + that would have the function resolve to a string which would be + substituted in the makefile, kind of like $(shell ...) does now, but + using the embedded interpreter so there's no process forked of + course. Obviously this is an optional add-on feature. + + It could be more advanced than that, even, who knows? Maybe make + could provide Guile functions that allow Guile scripts more direct + access to internal make structures, somehow. This kind of thing + needs a lot of thought. + + Also there's always the flip side: in some very fundamental ways + make isn't the best choice right now for a complex build tool. It's + great for simple-to-medium tasks, but there are already other tools + available for the really tough situations. Ask yourself, + realistically, how much work is worthwhile to add to make, given the + fundamentals you can't really overcome without significantly + affecting backward compatibility--and then why not use another tool + in the first place? + + Something to think about. diff --git a/src/mkutil/make/a b/src/mkutil/make/a new file mode 100644 index 00000000..26866ba2 --- /dev/null +++ b/src/mkutil/make/a @@ -0,0 +1,2140 @@ +/* Builtin function expansion for GNU Make. +Copyright (C) 1988, 1989, 1991-1997, 1999, 2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "filedef.h" +#include "variable.h" +#include "dep.h" +#include "job.h" +#include "commands.h" +#include "debug.h" + +#ifdef _AMIGA +#include "amiga.h" +#endif + + +struct function_table_entry + { + const char *name; + unsigned char len; + unsigned char minimum_args; + unsigned char maximum_args; + char expand_args; + char *(*func_ptr) PARAMS ((char *output, char **argv, const char *fname)); + }; + +static unsigned long +function_table_entry_hash_1 (keyv) + const void *keyv; +{ + struct function_table_entry const *key = (struct function_table_entry const *) keyv; + return_STRING_N_HASH_1 (key->name, key->len); +} + +static unsigned long +function_table_entry_hash_2 (keyv) + const void *keyv; +{ + struct function_table_entry const *key = (struct function_table_entry const *) keyv; + return_STRING_N_HASH_2 (key->name, key->len); +} + +static int +function_table_entry_hash_cmp (xv, yv) + const void *xv; + const void *yv; +{ + struct function_table_entry const *x = (struct function_table_entry const *) xv; + struct function_table_entry const *y = (struct function_table_entry const *) yv; + int result = x->len - y->len; + if (result) + return result; + return_STRING_N_COMPARE (x->name, y->name, x->len); +} + +static struct hash_table function_table; + + +/* Store into VARIABLE_BUFFER at O the result of scanning TEXT and replacing + each occurrence of SUBST with REPLACE. TEXT is null-terminated. SLEN is + the length of SUBST and RLEN is the length of REPLACE. If BY_WORD is + nonzero, substitutions are done only on matches which are complete + whitespace-delimited words. If SUFFIX_ONLY is nonzero, substitutions are + done only at the ends of whitespace-delimited words. */ + +char * +subst_expand (o, text, subst, replace, slen, rlen, by_word, suffix_only) + char *o; + char *text; + char *subst, *replace; + unsigned int slen, rlen; + int by_word, suffix_only; +{ + register char *t = text; + register char *p; + + if (slen == 0 && !by_word && !suffix_only) + { + /* The first occurrence of "" in any string is its end. */ + o = variable_buffer_output (o, t, strlen (t)); + if (rlen > 0) + o = variable_buffer_output (o, replace, rlen); + return o; + } + + do + { + if ((by_word | suffix_only) && slen == 0) + /* When matching by words, the empty string should match + the end of each word, rather than the end of the whole text. */ + p = end_of_token (next_token (t)); + else + { + p = sindex (t, 0, subst, slen); + if (p == 0) + { + /* No more matches. Output everything left on the end. */ + o = variable_buffer_output (o, t, strlen (t)); + return o; + } + } + + /* Output everything before this occurrence of the string to replace. */ + if (p > t) + o = variable_buffer_output (o, t, p - t); + + /* If we're substituting only by fully matched words, + or only at the ends of words, check that this case qualifies. */ + if ((by_word + && ((p > t && !isblank ((unsigned char)p[-1])) + || (p[slen] != '\0' && !isblank ((unsigned char)p[slen])))) + || (suffix_only + && (p[slen] != '\0' && !isblank ((unsigned char)p[slen])))) + /* Struck out. Output the rest of the string that is + no longer to be replaced. */ + o = variable_buffer_output (o, subst, slen); + else if (rlen > 0) + /* Output the replacement string. */ + o = variable_buffer_output (o, replace, rlen); + + /* Advance T past the string to be replaced. */ + t = p + slen; + } while (*t != '\0'); + + return o; +} + + +/* Store into VARIABLE_BUFFER at O the result of scanning TEXT + and replacing strings matching PATTERN with REPLACE. + If PATTERN_PERCENT is not nil, PATTERN has already been + run through find_percent, and PATTERN_PERCENT is the result. + If REPLACE_PERCENT is not nil, REPLACE has already been + run through find_percent, and REPLACE_PERCENT is the result. */ + +char * +patsubst_expand (o, text, pattern, replace, pattern_percent, replace_percent) + char *o; + char *text; + register char *pattern, *replace; + register char *pattern_percent, *replace_percent; +{ + unsigned int pattern_prepercent_len, pattern_postpercent_len; + unsigned int replace_prepercent_len, replace_postpercent_len = 0; + char *t; + unsigned int len; + int doneany = 0; + + /* We call find_percent on REPLACE before checking PATTERN so that REPLACE + will be collapsed before we call subst_expand if PATTERN has no %. */ + if (replace_percent == 0) + replace_percent = find_percent (replace); + if (replace_percent != 0) + { + /* Record the length of REPLACE before and after the % so + we don't have to compute these lengths more than once. */ + replace_prepercent_len = replace_percent - replace; + replace_postpercent_len = strlen (replace_percent + 1); + } + else + /* We store the length of the replacement + so we only need to compute it once. */ + replace_prepercent_len = strlen (replace); + + if (pattern_percent == 0) + pattern_percent = find_percent (pattern); + if (pattern_percent == 0) + /* With no % in the pattern, this is just a simple substitution. */ + return subst_expand (o, text, pattern, replace, + strlen (pattern), strlen (replace), 1, 0); + + /* Record the length of PATTERN before and after the % + so we don't have to compute it more than once. */ + pattern_prepercent_len = pattern_percent - pattern; + pattern_postpercent_len = strlen (pattern_percent + 1); + + while ((t = find_next_token (&text, &len)) != 0) + { + int fail = 0; + + /* Is it big enough to match? */ + if (len < pattern_prepercent_len + pattern_postpercent_len) + fail = 1; + + /* Does the prefix match? */ + if (!fail && pattern_prepercent_len > 0 + && (*t != *pattern + || t[pattern_prepercent_len - 1] != pattern_percent[-1] + || !strneq (t + 1, pattern + 1, pattern_prepercent_len - 1))) + fail = 1; + + /* Does the suffix match? */ + if (!fail && pattern_postpercent_len > 0 + && (t[len - 1] != pattern_percent[pattern_postpercent_len] + || t[len - pattern_postpercent_len] != pattern_percent[1] + || !strneq (&t[len - pattern_postpercent_len], + &pattern_percent[1], pattern_postpercent_len - 1))) + fail = 1; + + if (fail) + /* It didn't match. Output the string. */ + o = variable_buffer_output (o, t, len); + else + { + /* It matched. Output the replacement. */ + + /* Output the part of the replacement before the %. */ + o = variable_buffer_output (o, replace, replace_prepercent_len); + + if (replace_percent != 0) + { + /* Output the part of the matched string that + matched the % in the pattern. */ + o = variable_buffer_output (o, t + pattern_prepercent_len, + len - (pattern_prepercent_len + + pattern_postpercent_len)); + /* Output the part of the replacement after the %. */ + o = variable_buffer_output (o, replace_percent + 1, + replace_postpercent_len); + } + } + + /* Output a space, but not if the replacement is "". */ + if (fail || replace_prepercent_len > 0 + || (replace_percent != 0 && len + replace_postpercent_len > 0)) + { + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + } + if (doneany) + /* Kill the last space. */ + --o; + + return o; +} + + +/* Look up a function by name. */ + +static const struct function_table_entry * +lookup_function (s) + const char *s; +{ + const char *e = s; + + while (*e && ( (*e >= 'a' && *e <= 'z') || *e == '-')) + e++; + if (*e == '\0' || isblank ((unsigned char) *e)) + { + struct function_table_entry function_table_entry_key; + function_table_entry_key.name = s; + function_table_entry_key.len = e - s; + + return hash_find_item (&function_table, &function_table_entry_key); + } + return 0; +} + + +/* Return 1 if PATTERN matches STR, 0 if not. */ + +int +pattern_matches (pattern, percent, str) + register char *pattern, *percent, *str; +{ + unsigned int sfxlen, strlength; + + if (percent == 0) + { + unsigned int len = strlen (pattern) + 1; + char *new_chars = (char *) alloca (len); + bcopy (pattern, new_chars, len); + pattern = new_chars; + percent = find_percent (pattern); + if (percent == 0) + return streq (pattern, str); + } + + sfxlen = strlen (percent + 1); + strlength = strlen (str); + + if (strlength < (percent - pattern) + sfxlen + || !strneq (pattern, str, percent - pattern)) + return 0; + + return !strcmp (percent + 1, str + (strlength - sfxlen)); +} + + +/* Find the next comma or ENDPAREN (counting nested STARTPAREN and + ENDPARENtheses), starting at PTR before END. Return a pointer to + next character. + + If no next argument is found, return NULL. +*/ + +static char * +find_next_argument (startparen, endparen, ptr, end) + char startparen; + char endparen; + const char *ptr; + const char *end; +{ + int count = 0; + + for (; ptr < end; ++ptr) + if (*ptr == startparen) + ++count; + + else if (*ptr == endparen) + { + --count; + if (count < 0) + return NULL; + } + + else if (*ptr == ',' && !count) + return (char *)ptr; + + /* We didn't find anything. */ + return NULL; +} + + +/* Glob-expand LINE. The returned pointer is + only good until the next call to string_glob. */ + +static char * +string_glob (line) + char *line; +{ + static char *result = 0; + static unsigned int length; + register struct nameseq *chain; + register unsigned int idx; + + chain = multi_glob (parse_file_seq + (&line, '\0', sizeof (struct nameseq), + /* We do not want parse_file_seq to strip `./'s. + That would break examples like: + $(patsubst ./%.c,obj/%.o,$(wildcard ./?*.c)). */ + 0), + sizeof (struct nameseq)); + + if (result == 0) + { + length = 100; + result = (char *) xmalloc (100); + } + + idx = 0; + while (chain != 0) + { + register char *name = chain->name; + unsigned int len = strlen (name); + + struct nameseq *next = chain->next; + free ((char *) chain); + chain = next; + + /* multi_glob will pass names without globbing metacharacters + through as is, but we want only files that actually exist. */ + if (file_exists_p (name)) + { + if (idx + len + 1 > length) + { + length += (len + 1) * 2; +/* printf("a\n"); */ /* Nick */ + result = (char *) xrealloc (result, length); +/* printf("b\n"); */ /* Nick */ + } + bcopy (name, &result[idx], len); + idx += len; + result[idx++] = ' '; + } + + free (name); + } + + /* Kill the last space and terminate the string. */ + if (idx == 0) + result[0] = '\0'; + else + result[idx - 1] = '\0'; + + return result; +} + +/* + Builtin functions + */ + +static char * +func_patsubst (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + o = patsubst_expand (o, argv[2], argv[0], argv[1], (char *) 0, (char *) 0); + return o; +} + + +static char * +func_join (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + int doneany = 0; + + /* Write each word of the first argument directly followed + by the corresponding word of the second argument. + If the two arguments have a different number of words, + the excess words are just output separated by blanks. */ + register char *tp; + register char *pp; + char *list1_iterator = argv[0]; + char *list2_iterator = argv[1]; + do + { + unsigned int len1, len2; + + tp = find_next_token (&list1_iterator, &len1); + if (tp != 0) + o = variable_buffer_output (o, tp, len1); + + pp = find_next_token (&list2_iterator, &len2); + if (pp != 0) + o = variable_buffer_output (o, pp, len2); + + if (tp != 0 || pp != 0) + { + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + } + while (tp != 0 || pp != 0); + if (doneany) + /* Kill the last blank. */ + --o; + + return o; +} + + +static char * +func_origin (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + /* Expand the argument. */ + register struct variable *v = lookup_variable (argv[0], strlen (argv[0])); + if (v == 0) + o = variable_buffer_output (o, "undefined", 9); + else + switch (v->origin) + { + default: + case o_invalid: + abort (); + break; + case o_default: + o = variable_buffer_output (o, "default", 7); + break; + case o_env: + o = variable_buffer_output (o, "environment", 11); + break; + case o_file: + o = variable_buffer_output (o, "file", 4); + break; + case o_env_override: + o = variable_buffer_output (o, "environment override", 20); + break; + case o_command: + o = variable_buffer_output (o, "command line", 12); + break; + case o_override: + o = variable_buffer_output (o, "override", 8); + break; + case o_automatic: + o = variable_buffer_output (o, "automatic", 9); + break; + } + + return o; +} + +#ifdef VMS +# define IS_PATHSEP(c) ((c) == ']') +#else +# ifdef HAVE_DOS_PATHS +# define IS_PATHSEP(c) ((c) == '/' || (c) == '\\') +# else +# define IS_PATHSEP(c) ((c) == '/') +# endif +#endif + + +static char * +func_notdir_suffix (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + /* Expand the argument. */ + char *list_iterator = argv[0]; + char *p2 =0; + int doneany =0; + unsigned int len=0; + + int is_suffix = streq (funcname, "suffix"); + int is_notdir = !is_suffix; + while ((p2 = find_next_token (&list_iterator, &len)) != 0) + { + char *p = p2 + len; + + + while (p >= p2 && (!is_suffix || *p != '.')) + { + if (IS_PATHSEP (*p)) + break; + --p; + } + + if (p >= p2) + { + if (is_notdir) + ++p; + else if (*p != '.') + continue; + o = variable_buffer_output (o, p, len - (p - p2)); + } +#ifdef HAVE_DOS_PATHS + /* Handle the case of "d:foo/bar". */ + else if (streq (funcname, "notdir") && p2[0] && p2[1] == ':') + { + p = p2 + 2; + o = variable_buffer_output (o, p, len - (p - p2)); + } +#endif + else if (is_notdir) + o = variable_buffer_output (o, p2, len); + + if (is_notdir || p >= p2) + { + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + } + if (doneany) + /* Kill last space. */ + --o; + + + return o; + +} + + +static char * +func_basename_dir (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + /* Expand the argument. */ + char *p3 = argv[0]; + char *p2=0; + int doneany=0; + unsigned int len=0; + char *p=0; + int is_basename= streq (funcname, "basename"); + int is_dir= !is_basename; + + while ((p2 = find_next_token (&p3, &len)) != 0) + { + p = p2 + len; + while (p >= p2 && (!is_basename || *p != '.')) + { + if (IS_PATHSEP (*p)) + break; + --p; + } + + if (p >= p2 && (is_dir)) + o = variable_buffer_output (o, p2, ++p - p2); + else if (p >= p2 && (*p == '.')) + o = variable_buffer_output (o, p2, p - p2); +#ifdef HAVE_DOS_PATHS + /* Handle the "d:foobar" case */ + else if (p2[0] && p2[1] == ':' && is_dir) + o = variable_buffer_output (o, p2, 2); +#endif + else if (is_dir) +#ifdef VMS + o = variable_buffer_output (o, "[]", 2); +#else +#ifndef _AMIGA + o = variable_buffer_output (o, "./", 2); +#else + ; /* Just a nop... */ +#endif /* AMIGA */ +#endif /* !VMS */ + else + /* The entire name is the basename. */ + o = variable_buffer_output (o, p2, len); + + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + if (doneany) + /* Kill last space. */ + --o; + + + return o; +} + +static char * +func_addsuffix_addprefix (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + int fixlen = strlen (argv[0]); + char *list_iterator = argv[1]; + int is_addprefix = streq (funcname, "addprefix"); + int is_addsuffix = !is_addprefix; + + int doneany = 0; + char *p; + unsigned int len; + + while ((p = find_next_token (&list_iterator, &len)) != 0) + { + if (is_addprefix) + o = variable_buffer_output (o, argv[0], fixlen); + o = variable_buffer_output (o, p, len); + if (is_addsuffix) + o = variable_buffer_output (o, argv[0], fixlen); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + + if (doneany) + /* Kill last space. */ + --o; + + return o; +} + +static char * +func_subst (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + o = subst_expand (o, argv[2], argv[0], argv[1], strlen (argv[0]), + strlen (argv[1]), 0, 0); + + return o; +} + + +static char * +func_firstword (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + unsigned int i; + char *words = argv[0]; /* Use a temp variable for find_next_token */ + char *p = find_next_token (&words, &i); + + if (p != 0) + o = variable_buffer_output (o, p, i); + + return o; +} + + +static char * +func_words (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + int i = 0; + char *word_iterator = argv[0]; + char buf[20]; + + while (find_next_token (&word_iterator, (unsigned int *) 0) != 0) + ++i; + + sprintf (buf, "%d", i); + o = variable_buffer_output (o, buf, strlen (buf)); + + + return o; +} + +char * +strip_whitespace (begpp, endpp) + char **begpp; + char **endpp; +{ + while (isspace ((unsigned char)**begpp) && *begpp <= *endpp) + (*begpp) ++; + while (isspace ((unsigned char)**endpp) && *endpp >= *begpp) + (*endpp) --; + return *begpp; +} + +int +is_numeric (p) + char *p; +{ + char *end = p + strlen (p) - 1; + char *beg = p; + strip_whitespace (&p, &end); + + while (p <= end) + if (!ISDIGIT (*(p++))) /* ISDIGIT only evals its arg once: see make.h. */ + return 0; + + return (end - beg >= 0); +} + +void +check_numeric (s, message) + char *s; + char *message; +{ + if (!is_numeric (s)) + fatal (reading_file, message); +} + + + +static char * +func_word (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + char *end_p=0; + int i=0; + char *p=0; + + /* Check the first argument. */ + check_numeric (argv[0], _("non-numeric first argument to `word' function")); + i = atoi (argv[0]); + + if (i == 0) + fatal (reading_file, _("first argument to `word' function must be greater than 0")); + + + end_p = argv[1]; + while ((p = find_next_token (&end_p, 0)) != 0) + if (--i == 0) + break; + + if (i == 0) + o = variable_buffer_output (o, p, end_p - p); + + return o; +} + +static char * +func_wordlist (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + int start, count; + + /* Check the arguments. */ + check_numeric (argv[0], + _("non-numeric first argument to `wordlist' function")); + check_numeric (argv[1], + _("non-numeric second argument to `wordlist' function")); + + start = atoi (argv[0]); + count = atoi (argv[1]) - start + 1; + + if (count > 0) + { + char *p; + char *end_p = argv[2]; + + /* Find the beginning of the "start"th word. */ + while (((p = find_next_token (&end_p, 0)) != 0) && --start) + ; + + if (p) + { + /* Find the end of the "count"th word from start. */ + while (--count && (find_next_token (&end_p, 0) != 0)) + ; + + /* Return the stuff in the middle. */ + o = variable_buffer_output (o, p, end_p - p); + } + } + + return o; +} + +static char* +func_findstring (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + /* Find the first occurrence of the first string in the second. */ + int i = strlen (argv[0]); + if (sindex (argv[1], 0, argv[0], i) != 0) + o = variable_buffer_output (o, argv[0], i); + + return o; +} + +static char * +func_foreach (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + /* expand only the first two. */ + char *varname = expand_argument (argv[0], NULL); + char *list = expand_argument (argv[1], NULL); + char *body = argv[2]; + + int doneany = 0; + char *list_iterator = list; + char *p; + unsigned int len; + register struct variable *var; + + push_new_variable_scope (); + var = define_variable (varname, strlen (varname), "", o_automatic, 0); + + /* loop through LIST, put the value in VAR and expand BODY */ + while ((p = find_next_token (&list_iterator, &len)) != 0) + { + char *result = 0; + + { + char save = p[len]; + + p[len] = '\0'; + free (var->value); + var->value = (char *) xstrdup ((char*) p); + p[len] = save; + } + + result = allocated_variable_expand (body); + + o = variable_buffer_output (o, result, strlen (result)); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + free (result); + } + + if (doneany) + /* Kill the last space. */ + --o; + + pop_variable_scope (); + free (varname); + free (list); + + return o; +} + +struct a_word +{ + struct a_word *next; + struct a_word *chain; + char *str; + int length; + int matched; +}; + +static unsigned long +a_word_hash_1 (key) + const void *key; +{ + return_STRING_HASH_1 (((struct a_word const *) key)->str); +} + +static unsigned long +a_word_hash_2 (key) + const void *key; +{ + return_STRING_HASH_2 (((struct a_word const *) key)->str); +} + +static int +a_word_hash_cmp (x, y) + const void *x; + const void *y; +{ + int result = ((struct a_word const *) x)->length - ((struct a_word const *) y)->length; + if (result) + return result; + return_STRING_COMPARE (((struct a_word const *) x)->str, + ((struct a_word const *) y)->str); +} + +struct a_pattern +{ + struct a_pattern *next; + char *str; + char *percent; + int length; + int save_c; +}; + +static char * +func_filter_filterout (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + struct a_word *wordhead; + struct a_word **wordtail; + struct a_word *wp; + struct a_pattern *pathead; + struct a_pattern **pattail; + struct a_pattern *pp; + + struct hash_table a_word_table; + int is_filter = streq (funcname, "filter"); + char *pat_iterator = argv[0]; + char *word_iterator = argv[1]; + int literals = 0; + int words = 0; + int hashing = 0; + char *p; + unsigned int len; + + /* Chop ARGV[0] up into patterns to match against the words. */ + + pattail = &pathead; + while ((p = find_next_token (&pat_iterator, &len)) != 0) + { + struct a_pattern *pat = (struct a_pattern *) alloca (sizeof (struct a_pattern)); + + *pattail = pat; + pattail = &pat->next; + + if (*pat_iterator != '\0') + ++pat_iterator; + + pat->str = p; + pat->length = len; + pat->save_c = p[len]; + p[len] = '\0'; + pat->percent = find_percent (p); + if (pat->percent == 0) + literals++; + } + *pattail = 0; + + /* Chop ARGV[1] up into words to match against the patterns. */ + + wordtail = &wordhead; + while ((p = find_next_token (&word_iterator, &len)) != 0) + { + struct a_word *word = (struct a_word *) alloca (sizeof (struct a_word)); + + *wordtail = word; + wordtail = &word->next; + + if (*word_iterator != '\0') + ++word_iterator; + + p[len] = '\0'; + word->str = p; + word->length = len; + word->matched = 0; + word->chain = 0; + words++; + } + *wordtail = 0; + + /* Only use a hash table if arg list lengths justifies the cost. */ + hashing = (literals >= 2 && (literals * words) >= 10); + if (hashing) + { + hash_init (&a_word_table, words, a_word_hash_1, a_word_hash_2, a_word_hash_cmp); + for (wp = wordhead; wp != 0; wp = wp->next) + { + struct a_word *owp = hash_insert (&a_word_table, wp); + if (owp) + wp->chain = owp; + } + } + + if (words) + { + int doneany = 0; + + /* Run each pattern through the words, killing words. */ + for (pp = pathead; pp != 0; pp = pp->next) + { + if (pp->percent) + for (wp = wordhead; wp != 0; wp = wp->next) + wp->matched |= pattern_matches (pp->str, pp->percent, wp->str); + else if (hashing) + { + struct a_word a_word_key; + a_word_key.str = pp->str; + a_word_key.length = pp->length; + wp = (struct a_word *) hash_find_item (&a_word_table, &a_word_key); + while (wp) + { + wp->matched |= 1; + wp = wp->chain; + } + } + else + for (wp = wordhead; wp != 0; wp = wp->next) + wp->matched |= (wp->length == pp->length + && strneq (pp->str, wp->str, wp->length)); + } + + /* Output the words that matched (or didn't, for filter-out). */ + for (wp = wordhead; wp != 0; wp = wp->next) + if (is_filter ? wp->matched : !wp->matched) + { + o = variable_buffer_output (o, wp->str, strlen (wp->str)); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + + if (doneany) + /* Kill the last space. */ + --o; + } + + for (pp = pathead; pp != 0; pp = pp->next) + pp->str[pp->length] = pp->save_c; + + if (hashing) + hash_free (&a_word_table, 0); + + return o; +} + + +static char * +func_strip (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + char *p = argv[0]; + int doneany =0; + + while (*p != '\0') + { + int i=0; + char *word_start=0; + + while (isspace ((unsigned char)*p)) + ++p; + word_start = p; + for (i=0; *p != '\0' && !isspace ((unsigned char)*p); ++p, ++i) + {} + if (!i) + break; + o = variable_buffer_output (o, word_start, i); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + + if (doneany) + /* Kill the last space. */ + --o; + return o; +} + +/* + Print a warning or fatal message. +*/ +static char * +func_error (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + char **argvp; + char *msg, *p; + int len; + + /* The arguments will be broken on commas. Rather than create yet + another special case where function arguments aren't broken up, + just create a format string that puts them back together. */ + for (len=0, argvp=argv; *argvp != 0; ++argvp) + len += strlen (*argvp) + 2; + + p = msg = (char *) alloca (len + 1); + + for (argvp=argv; argvp[1] != 0; ++argvp) + { + strcpy (p, *argvp); + p += strlen (*argvp); + *(p++) = ','; + *(p++) = ' '; + } + strcpy (p, *argvp); + + if (*funcname == 'e') + fatal (reading_file, "%s", msg); + + /* The warning function expands to the empty string. */ + error (reading_file, "%s", msg); + + return o; +} + + +/* + chop argv[0] into words, and sort them. + */ +static char * +func_sort (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + char **words = 0; + int nwords = 0; + register int wordi = 0; + + /* Chop ARGV[0] into words and put them in WORDS. */ + char *t = argv[0]; + char *p; + unsigned int len; + int i; + + while ((p = find_next_token (&t, &len)) != 0) + { + if (wordi >= nwords - 1) + { + nwords = (2 * nwords) + 5; +/* printf("c\n"); */ /* Nick */ + words = (char **) xrealloc ((char *) words, + nwords * sizeof (char *)); +/* printf("d\n"); */ /* Nick */ + } + words[wordi++] = savestring (p, len); + } + + if (!wordi) + return o; + + /* Now sort the list of words. */ + qsort ((char *) words, wordi, sizeof (char *), alpha_compare); + + /* Now write the sorted list. */ + for (i = 0; i < wordi; ++i) + { + len = strlen (words[i]); + if (i == wordi - 1 || strlen (words[i + 1]) != len + || strcmp (words[i], words[i + 1])) + { + o = variable_buffer_output (o, words[i], len); + o = variable_buffer_output (o, " ", 1); + } + free (words[i]); + } + /* Kill the last space. */ + --o; + + free (words); + + return o; +} + +/* + $(if condition,true-part[,false-part]) + + CONDITION is false iff it evaluates to an empty string. White + space before and after condition are stripped before evaluation. + + If CONDITION is true, then TRUE-PART is evaluated, otherwise FALSE-PART is + evaluated (if it exists). Because only one of the two PARTs is evaluated, + you can use $(if ...) to create side-effects (with $(shell ...), for + example). +*/ + +static char * +func_if (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + char *begp = argv[0]; + char *endp = begp + strlen (argv[0]); + int result = 0; + + /* Find the result of the condition: if we have a value, and it's not + empty, the condition is true. If we don't have a value, or it's the + empty string, then it's false. */ + + strip_whitespace (&begp, &endp); + + if (begp < endp) + { + char *expansion = expand_argument (begp, NULL); + + result = strlen (expansion); + free (expansion); + } + + /* If the result is true (1) we want to eval the first argument, and if + it's false (0) we want to eval the second. If the argument doesn't + exist we do nothing, otherwise expand it and add to the buffer. */ + + argv += 1 + !result; + + if (argv[0]) + { + char *expansion; + + expansion = expand_argument (argv[0], NULL); + + o = variable_buffer_output (o, expansion, strlen (expansion)); + + free (expansion); + } + + return o; +} + +static char * +func_wildcard (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + +#ifdef _AMIGA + o = wildcard_expansion (argv[0], o); +#else + char *p = string_glob (argv[0]); + o = variable_buffer_output (o, p, strlen (p)); +#endif + return o; +} + +/* + $(eval ) + + Always resolves to the empty string. + + Treat the arguments as a segment of makefile, and parse them. +*/ + +static char * +func_eval (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ +#if 1 /* Nick */ + unsigned int offset = o - variable_buffer; +#endif + + eval_buffer (argv[0]); + +#if 1 /* Nick */ + return variable_buffer + offset; +#else + return o; +#endif +} + + +static char * +func_value (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + /* Look up the variable. */ + struct variable *v = lookup_variable (argv[0], strlen (argv[0])); + + /* Copy its value into the output buffer without expanding it. */ + if (v) + o = variable_buffer_output (o, v->value, strlen(v->value)); + + return o; +} + +/* + \r is replaced on UNIX as well. Is this desirable? + */ +void +fold_newlines (buffer, length) + char *buffer; + int *length; +{ + char *dst = buffer; + char *src = buffer; + char *last_nonnl = buffer -1; + src[*length] = 0; + for (; *src != '\0'; ++src) + { + if (src[0] == '\r' && src[1] == '\n') + continue; + if (*src == '\n') + { + *dst++ = ' '; + } + else + { + last_nonnl = dst; + *dst++ = *src; + } + } + *(++last_nonnl) = '\0'; + *length = last_nonnl - buffer; +} + + + +int shell_function_pid = 0, shell_function_completed; + + +#ifdef WINDOWS32 +/*untested*/ + +#include +#include +#include "sub_proc.h" + + +void +windows32_openpipe (int *pipedes, int *pid_p, char **command_argv, char **envp) +{ + SECURITY_ATTRIBUTES saAttr; + HANDLE hIn; + HANDLE hErr; + HANDLE hChildOutRd; + HANDLE hChildOutWr; + HANDLE hProcess; + + + saAttr.nLength = sizeof (SECURITY_ATTRIBUTES); + saAttr.bInheritHandle = TRUE; + saAttr.lpSecurityDescriptor = NULL; + + if (DuplicateHandle (GetCurrentProcess(), + GetStdHandle(STD_INPUT_HANDLE), + GetCurrentProcess(), + &hIn, + 0, + TRUE, + DUPLICATE_SAME_ACCESS) == FALSE) { + fatal (NILF, _("create_child_process: DuplicateHandle(In) failed (e=%d)\n"), + GetLastError()); + + } + if (DuplicateHandle(GetCurrentProcess(), + GetStdHandle(STD_ERROR_HANDLE), + GetCurrentProcess(), + &hErr, + 0, + TRUE, + DUPLICATE_SAME_ACCESS) == FALSE) { + fatal (NILF, _("create_child_process: DuplicateHandle(Err) failed (e=%d)\n"), + GetLastError()); + } + + if (!CreatePipe(&hChildOutRd, &hChildOutWr, &saAttr, 0)) + fatal (NILF, _("CreatePipe() failed (e=%d)\n"), GetLastError()); + + hProcess = process_init_fd(hIn, hChildOutWr, hErr); + + if (!hProcess) + fatal (NILF, _("windows32_openpipe (): process_init_fd() failed\n")); + + /* make sure that CreateProcess() has Path it needs */ + sync_Path_environment(); + + if (!process_begin(hProcess, command_argv, envp, command_argv[0], NULL)) { + /* register process for wait */ + process_register(hProcess); + + /* set the pid for returning to caller */ + *pid_p = (int) hProcess; + + /* set up to read data from child */ + pipedes[0] = _open_osfhandle((long) hChildOutRd, O_RDONLY); + + /* this will be closed almost right away */ + pipedes[1] = _open_osfhandle((long) hChildOutWr, O_APPEND); + } else { + /* reap/cleanup the failed process */ + process_cleanup(hProcess); + + /* close handles which were duplicated, they weren't used */ + CloseHandle(hIn); + CloseHandle(hErr); + + /* close pipe handles, they won't be used */ + CloseHandle(hChildOutRd); + CloseHandle(hChildOutWr); + + /* set status for return */ + pipedes[0] = pipedes[1] = -1; + *pid_p = -1; + } +} +#endif + + +#ifdef __MSDOS__ +FILE * +msdos_openpipe (int* pipedes, int *pidp, char *text) +{ + FILE *fpipe=0; + /* MSDOS can't fork, but it has `popen'. */ + struct variable *sh = lookup_variable ("SHELL", 5); + int e; + extern int dos_command_running, dos_status; + + /* Make sure not to bother processing an empty line. */ + while (isblank ((unsigned char)*text)) + ++text; + if (*text == '\0') + return 0; + + if (sh) + { + char buf[PATH_MAX + 7]; + /* This makes sure $SHELL value is used by $(shell), even + though the target environment is not passed to it. */ + sprintf (buf, "SHELL=%s", sh->value); + putenv (buf); + } + + e = errno; + errno = 0; + dos_command_running = 1; + dos_status = 0; + /* If dos_status becomes non-zero, it means the child process + was interrupted by a signal, like SIGINT or SIGQUIT. See + fatal_error_signal in commands.c. */ + fpipe = popen (text, "rt"); + dos_command_running = 0; + if (!fpipe || dos_status) + { + pipedes[0] = -1; + *pidp = -1; + if (dos_status) + errno = EINTR; + else if (errno == 0) + errno = ENOMEM; + shell_function_completed = -1; + } + else + { + pipedes[0] = fileno (fpipe); + *pidp = 42; /* Yes, the Meaning of Life, the Universe, and Everything! */ + errno = e; + shell_function_completed = 1; + } + return fpipe; +} +#endif + +/* + Do shell spawning, with the naughty bits for different OSes. + */ + +#ifdef VMS + +/* VMS can't do $(shell ...) */ +#define func_shell 0 + +#else +#ifndef _AMIGA +static char * +func_shell (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + char* batch_filename = NULL; + int i; + +#ifdef __MSDOS__ + FILE *fpipe; +#endif + char **command_argv; + char *error_prefix; + char **envp; + int pipedes[2]; + int pid; + +#ifndef __MSDOS__ + /* Construct the argument list. */ + command_argv = construct_command_argv (argv[0], + (char **) NULL, (struct file *) 0, + &batch_filename); + if (command_argv == 0) + return o; +#endif + + /* Using a target environment for `shell' loses in cases like: + export var = $(shell echo foobie) + because target_environment hits a loop trying to expand $(var) + to put it in the environment. This is even more confusing when + var was not explicitly exported, but just appeared in the + calling environment. */ + + envp = environ; + + /* For error messages. */ + if (reading_file != 0) + { + error_prefix = (char *) alloca (strlen (reading_file->filenm)+11+4); + sprintf (error_prefix, + "%s:%lu: ", reading_file->filenm, reading_file->lineno); + } + else + error_prefix = ""; + +#ifdef WINDOWS32 + windows32_openpipe (pipedes, &pid, command_argv, envp); + + if (pipedes[0] < 0) { + /* open of the pipe failed, mark as failed execution */ + shell_function_completed = -1; + + return o; + } else +#else /* WINDOWS32 */ + +# ifdef __MSDOS__ + fpipe = msdos_openpipe (pipedes, &pid, argv[0]); + if (pipedes[0] < 0) + { + perror_with_name (error_prefix, "pipe"); + return o; + } +# else + if (pipe (pipedes) < 0) + { + perror_with_name (error_prefix, "pipe"); + return o; + } + + pid = vfork (); + if (pid < 0) + perror_with_name (error_prefix, "fork"); + else if (pid == 0) + child_execute_job (0, pipedes[1], command_argv, envp); + else +# endif /* ! __MSDOS__ */ + +#endif /* WINDOWS32 */ + { + /* We are the parent. */ + + char *buffer; + unsigned int maxlen; + int cc; + + /* Record the PID for reap_children. */ + shell_function_pid = pid; +#ifndef __MSDOS__ + shell_function_completed = 0; + + /* Free the storage only the child needed. */ + free (command_argv[0]); + free ((char *) command_argv); + + /* Close the write side of the pipe. */ + (void) close (pipedes[1]); +#endif + + /* Set up and read from the pipe. */ + + maxlen = 200; + buffer = (char *) xmalloc (maxlen + 1); + + /* Read from the pipe until it gets EOF. */ + for (i = 0; ; i += cc) + { + if (i == maxlen) + { + maxlen += 512; +/* printf("e\n"); */ /* Nick */ + buffer = (char *) xrealloc (buffer, maxlen + 1); +/* printf("f\n"); */ /* Nick */ + } + + cc = read (pipedes[0], &buffer[i], maxlen - i); + if (cc <= 0) + break; + } + buffer[i] = '\0'; + + /* Close the read side of the pipe. */ +#ifdef __MSDOS__ + if (fpipe) + (void) pclose (fpipe); +#else + (void) close (pipedes[0]); +#endif + + /* Loop until child_handler sets shell_function_completed + to the status of our child shell. */ + while (shell_function_completed == 0) + reap_children (1, 0); + + if (batch_filename) { + DB (DB_VERBOSE, (_("Cleaning up temporary batch file %s\n"), + batch_filename)); + remove (batch_filename); + free (batch_filename); + } + shell_function_pid = 0; + + /* The child_handler function will set shell_function_completed + to 1 when the child dies normally, or to -1 if it + dies with status 127, which is most likely an exec fail. */ + + if (shell_function_completed == -1) + { + /* This most likely means that the execvp failed, + so we should just write out the error message + that came in over the pipe from the child. */ + fputs (buffer, stderr); + fflush (stderr); + } + else + { + /* The child finished normally. Replace all + newlines in its output with spaces, and put + that in the variable output buffer. */ + fold_newlines (buffer, &i); + o = variable_buffer_output (o, buffer, i); + } + + free (buffer); + } + + return o; +} + +#else /* _AMIGA */ + +/* Do the Amiga version of func_shell. */ + +static char * +func_shell (char *o, char **argv, const char *funcname) +{ + /* Amiga can't fork nor spawn, but I can start a program with + redirection of my choice. However, this means that we + don't have an opportunity to reopen stdout to trap it. Thus, + we save our own stdout onto a new descriptor and dup a temp + file's descriptor onto our stdout temporarily. After we + spawn the shell program, we dup our own stdout back to the + stdout descriptor. The buffer reading is the same as above, + except that we're now reading from a file. */ + +#include +#include + + BPTR child_stdout; + char tmp_output[FILENAME_MAX]; + unsigned int maxlen = 200; + int cc, i; + char * buffer, * ptr; + char ** aptr; + int len = 0; + char* batch_filename = NULL; + + /* Construct the argument list. */ + command_argv = construct_command_argv (argv[0], (char **) NULL, + (struct file *) 0, &batch_filename); + if (command_argv == 0) + return o; + + /* Note the mktemp() is a security hole, but this only runs on Amiga. + Ideally we would use main.c:open_tmpfile(), but this uses a special + Open(), not fopen(), and I'm not familiar enough with the code to mess + with it. */ + strcpy (tmp_output, "t:MakeshXXXXXXXX"); + mktemp (tmp_output); + child_stdout = Open (tmp_output, MODE_NEWFILE); + + for (aptr=command_argv; *aptr; aptr++) + len += strlen (*aptr) + 1; + + buffer = xmalloc (len + 1); + ptr = buffer; + + for (aptr=command_argv; *aptr; aptr++) + { + strcpy (ptr, *aptr); + ptr += strlen (ptr) + 1; + *ptr ++ = ' '; + *ptr = 0; + } + + ptr[-1] = '\n'; + + Execute (buffer, NULL, child_stdout); + free (buffer); + + Close (child_stdout); + + child_stdout = Open (tmp_output, MODE_OLDFILE); + + buffer = xmalloc (maxlen); + i = 0; + do + { + if (i == maxlen) + { + maxlen += 512; +/* printf("g\n"); */ /* Nick */ + buffer = (char *) xrealloc (buffer, maxlen + 1); +/* printf("h\n"); */ /* Nick */ + } + + cc = Read (child_stdout, &buffer[i], maxlen - i); + if (cc > 0) + i += cc; + } while (cc > 0); + + Close (child_stdout); + + fold_newlines (buffer, &i); + o = variable_buffer_output (o, buffer, i); + free (buffer); + return o; +} +#endif /* _AMIGA */ +#endif /* !VMS */ + +#ifdef EXPERIMENTAL + +/* + equality. Return is string-boolean, ie, the empty string is false. + */ +static char * +func_eq (char* o, char **argv, char *funcname) +{ + int result = ! strcmp (argv[0], argv[1]); + o = variable_buffer_output (o, result ? "1" : "", result); + return o; +} + + +/* + string-boolean not operator. + */ +static char * +func_not (char* o, char **argv, char *funcname) +{ + char * s = argv[0]; + int result = 0; + while (isspace ((unsigned char)*s)) + s++; + result = ! (*s); + o = variable_buffer_output (o, result ? "1" : "", result); + return o; +} +#endif + + +/* Lookup table for builtin functions. + + This doesn't have to be sorted; we use a straight lookup. We might gain + some efficiency by moving most often used functions to the start of the + table. + + If MAXIMUM_ARGS is 0, that means there is no maximum and all + comma-separated values are treated as arguments. + + EXPAND_ARGS means that all arguments should be expanded before invocation. + Functions that do namespace tricks (foreach) don't automatically expand. */ + +static char *func_call PARAMS ((char *o, char **argv, const char *funcname)); + + +static struct function_table_entry function_table_init[] = +{ + /* Name/size */ /* MIN MAX EXP? Function */ + { STRING_SIZE_TUPLE("addprefix"), 2, 2, 1, func_addsuffix_addprefix}, + { STRING_SIZE_TUPLE("addsuffix"), 2, 2, 1, func_addsuffix_addprefix}, + { STRING_SIZE_TUPLE("basename"), 0, 1, 1, func_basename_dir}, + { STRING_SIZE_TUPLE("dir"), 0, 1, 1, func_basename_dir}, + { STRING_SIZE_TUPLE("notdir"), 0, 1, 1, func_notdir_suffix}, + { STRING_SIZE_TUPLE("subst"), 3, 3, 1, func_subst}, + { STRING_SIZE_TUPLE("suffix"), 0, 1, 1, func_notdir_suffix}, + { STRING_SIZE_TUPLE("filter"), 2, 2, 1, func_filter_filterout}, + { STRING_SIZE_TUPLE("filter-out"), 2, 2, 1, func_filter_filterout}, + { STRING_SIZE_TUPLE("findstring"), 2, 2, 1, func_findstring}, + { STRING_SIZE_TUPLE("firstword"), 0, 1, 1, func_firstword}, + { STRING_SIZE_TUPLE("join"), 2, 2, 1, func_join}, + { STRING_SIZE_TUPLE("patsubst"), 3, 3, 1, func_patsubst}, + { STRING_SIZE_TUPLE("shell"), 0, 1, 1, func_shell}, + { STRING_SIZE_TUPLE("sort"), 0, 1, 1, func_sort}, + { STRING_SIZE_TUPLE("strip"), 0, 1, 1, func_strip}, + { STRING_SIZE_TUPLE("wildcard"), 0, 1, 1, func_wildcard}, + { STRING_SIZE_TUPLE("word"), 2, 2, 1, func_word}, + { STRING_SIZE_TUPLE("wordlist"), 3, 3, 1, func_wordlist}, + { STRING_SIZE_TUPLE("words"), 0, 1, 1, func_words}, + { STRING_SIZE_TUPLE("origin"), 0, 1, 1, func_origin}, + { STRING_SIZE_TUPLE("foreach"), 3, 3, 0, func_foreach}, + { STRING_SIZE_TUPLE("call"), 1, 0, 1, func_call}, + { STRING_SIZE_TUPLE("error"), 0, 1, 1, func_error}, + { STRING_SIZE_TUPLE("warning"), 0, 1, 1, func_error}, + { STRING_SIZE_TUPLE("if"), 2, 3, 0, func_if}, + { STRING_SIZE_TUPLE("value"), 0, 1, 1, func_value}, + { STRING_SIZE_TUPLE("eval"), 0, 1, 1, func_eval}, +#ifdef EXPERIMENTAL + { STRING_SIZE_TUPLE("eq"), 2, 2, 1, func_eq}, + { STRING_SIZE_TUPLE("not"), 0, 1, 1, func_not}, +#endif +}; + +#define FUNCTION_TABLE_ENTRIES (sizeof (function_table_init) / sizeof (struct function_table_entry)) + + +/* These must come after the definition of function_table. */ + +static char * +expand_builtin_function (o, argc, argv, entry_p) + char *o; + int argc; + char **argv; + struct function_table_entry *entry_p; +{ +#if 0 /* Nick */ + char *result; + + printf("expand_builtin_function(%08x, %08x, %08x, %08x)\n", + (int)o, argc, (int)argv, (int)entry_p); + printf("function is '%s'\n", entry_p->name); + printf("variable_buffer = %08x\n", variable_buffer); +#endif + + if (argc < (int)entry_p->minimum_args) + fatal (reading_file, + _("Insufficient number of arguments (%d) to function `%s'"), + argc, entry_p->name); + + /* I suppose technically some function could do something with no + arguments, but so far none do, so just test it for all functions here + rather than in each one. We can change it later if necessary. */ + + if (!argc) + return o; + + if (!entry_p->func_ptr) + fatal (reading_file, _("Unimplemented on this platform: function `%s'"), + entry_p->name); + +#if 0 /* Nick */ + result = entry_p->func_ptr (o, argv, entry_p->name); + printf("function was '%s'\n", entry_p->name); + printf("variable_buffer = %08x\n", variable_buffer); + printf("expand_builtin_function() returning %08x\n", (int)result); + return result; +#else + return entry_p->func_ptr (o, argv, entry_p->name); +#endif +} + +/* Check for a function invocation in *STRINGP. *STRINGP points at the + opening ( or { and is not null-terminated. If a function invocation + is found, expand it into the buffer at *OP, updating *OP, incrementing + *STRINGP past the reference and returning nonzero. If not, return zero. */ + +int +handle_function (op, stringp) + char **op; + char **stringp; +{ + const struct function_table_entry *entry_p; + char openparen = (*stringp)[0]; + char closeparen = openparen == '(' ? ')' : '}'; + char *beg; + char *end; + int count = 0; + register char *p; + char **argv, **argvp; + int nargs; +#if 1 /* Nick */ + unsigned int offset; +#endif +#if 0 /* Nick */ + printf("handle_function(%08x, %08x)\n", (int)op, (int)stringp); +#endif + + beg = *stringp + 1; + + entry_p = lookup_function (beg); + + if (!entry_p) + { +#if 0 /* Nick */ + printf("handle_function() returning 1\n"); +#endif + return 0; + } + + /* We found a builtin function. Find the beginning of its arguments (skip + whitespace after the name). */ + + beg = next_token (beg + entry_p->len); + + /* Find the end of the function invocation, counting nested use of + whichever kind of parens we use. Since we're looking, count commas + to get a rough estimate of how many arguments we might have. The + count might be high, but it'll never be low. */ + + for (nargs=1, end=beg; *end != '\0'; ++end) + if (*end == ',') + ++nargs; + else if (*end == openparen) + ++count; + else if (*end == closeparen && --count < 0) + break; + + if (count >= 0) + fatal (reading_file, + _("unterminated call to function `%s': missing `%c'"), + entry_p->name, closeparen); + + *stringp = end; + + /* Get some memory to store the arg pointers. */ + argvp = argv = (char **) alloca (sizeof (char *) * (nargs + 2)); + + /* Chop the string into arguments, then a nul. As soon as we hit + MAXIMUM_ARGS (if it's >0) assume the rest of the string is part of the + last argument. + + If we're expanding, store pointers to the expansion of each one. If + not, make a duplicate of the string and point into that, nul-terminating + each argument. */ + + if (!entry_p->expand_args) + { + int len = end - beg; + + p = xmalloc (len+1); + memcpy (p, beg, len); + p[len] = '\0'; + beg = p; + end = beg + len; + } + + for (p=beg, nargs=0; p <= end; ++argvp) + { + char *next; + + ++nargs; + + if (nargs == entry_p->maximum_args + || (! (next = find_next_argument (openparen, closeparen, p, end)))) + next = end; + + if (entry_p->expand_args) + *argvp = expand_argument (p, next); + else + { + *argvp = p; + *next = '\0'; + } +#if 1 /* Nick */ + printf("%s argument %d = \"%s\"\n", entry_p->name, nargs - 1, *argvp); +#endif +#if 0 /* Nick */ + if (entry_p == &function_table_init[27]) + { + printf("%s argument %d = \"%s\"\n", entry_p->name, nargs - 1, *argvp); + } +#endif + + p = next + 1; + } + *argvp = NULL; + + /* Finally! Run the function... */ +#if 1 /* Nick */ + offset = *op - variable_buffer; +#endif + *op = expand_builtin_function (*op, nargs, argv, entry_p); +#if 1 /* Nick */ + printf("%s result = \"", entry_p->name); + fwrite(variable_buffer + offset, 1, (*op - variable_buffer) - offset, stdout); + printf("\"\n"); +#endif + + /* Free memory. */ + if (entry_p->expand_args) + for (argvp=argv; *argvp != 0; ++argvp) + free (*argvp); + else + free (beg); + +#if 0 /* Nick */ + printf("handle_function() returning 1\n"); +#endif + return 1; +} + + +/* User-defined functions. Expand the first argument as either a builtin + function or a make variable, in the context of the rest of the arguments + assigned to $1, $2, ... $N. $0 is the name of the function. */ + +static char * +func_call (o, argv, funcname) + char *o; + char **argv; + const char *funcname; +{ + char *fname; + char *cp; + char *body; + int flen; + int i; + const struct function_table_entry *entry_p; + struct variable *v; + + /* There is no way to define a variable with a space in the name, so strip + leading and trailing whitespace as a favor to the user. */ + fname = argv[0]; + while (*fname != '\0' && isspace ((unsigned char)*fname)) + ++fname; + + cp = fname + strlen (fname) - 1; + while (cp > fname && isspace ((unsigned char)*cp)) + --cp; + cp[1] = '\0'; + + /* Calling nothing is a no-op */ + if (*fname == '\0') + return o; + + /* Are we invoking a builtin function? */ + + entry_p = lookup_function (fname); + + if (entry_p) + { + /* How many arguments do we have? */ + for (i=0; argv[i+1]; ++i) + ; + + return expand_builtin_function (o, i, argv+1, entry_p); + } + + /* Not a builtin, so the first argument is the name of a variable to be + expanded and interpreted as a function. Find it. */ + flen = strlen (fname); + + v = lookup_variable (fname, flen); + + if (v == 0) + warn_undefined (fname, flen); + + if (v == 0 || *v->value == '\0') + return o; + + body = (char *) alloca (flen + 4); + body[0] = '$'; + body[1] = '('; + memcpy (body + 2, fname, flen); + body[flen+2] = ')'; + body[flen+3] = '\0'; + + /* Set up arguments $(1) .. $(N). $(0) is the function name. */ + + push_new_variable_scope (); + + for (i=0; *argv; ++i, ++argv) + { + char num[11]; + + sprintf (num, "%d", i); + define_variable (num, strlen (num), *argv, o_automatic, 0); + } + + /* Expand the body in the context of the arguments, adding the result to + the variable buffer. */ + + v->exp_count = EXP_COUNT_MAX; + + o = variable_expand_string (o, body, flen+3); + + v->exp_count = 0; + + pop_variable_scope (); + + return o + strlen (o); +} + +void +hash_init_function_table () +{ + hash_init (&function_table, FUNCTION_TABLE_ENTRIES * 2, + function_table_entry_hash_1, function_table_entry_hash_2, + function_table_entry_hash_cmp); + hash_load (&function_table, function_table_init, + FUNCTION_TABLE_ENTRIES, sizeof (struct function_table_entry)); +} diff --git a/src/mkutil/make/acinclude.m4 b/src/mkutil/make/acinclude.m4 new file mode 100644 index 00000000..cd2b9037 --- /dev/null +++ b/src/mkutil/make/acinclude.m4 @@ -0,0 +1,164 @@ +dnl acinclude.m4 -- Extra macros needed for GNU make. +dnl +dnl Automake will incorporate this into its generated aclocal.m4. + +dnl --------------------------------------------------------------------------- +dnl Got this from the lynx 2.8 distribution. +dnl by T.E.Dickey +dnl and Jim Spath +dnl and Philippe De Muyter +dnl +dnl Created: 1997/1/28 +dnl Updated: 1997/12/23 +dnl --------------------------------------------------------------------------- +dnl After checking for functions in the default $LIBS, make a further check +dnl for the functions that are netlib-related (these aren't always in the +dnl libc, etc., and have to be handled specially because there are conflicting +dnl and broken implementations. +dnl Common library requirements (in order): +dnl -lresolv -lsocket -lnsl +dnl -lnsl -lsocket +dnl -lsocket +dnl -lbsd +AC_DEFUN([CF_NETLIBS],[ +cf_test_netlibs=no +AC_MSG_CHECKING(for network libraries) +AC_CACHE_VAL(cf_cv_netlibs,[ +AC_MSG_RESULT(working...) +cf_cv_netlibs="" +cf_test_netlibs=yes +AC_CHECK_FUNCS(gethostname,,[ + CF_RECHECK_FUNC(gethostname,nsl,cf_cv_netlibs,[ + CF_RECHECK_FUNC(gethostname,socket,cf_cv_netlibs)])]) +# +# FIXME: sequent needs this library (i.e., -lsocket -linet -lnsl), but +# I don't know the entrypoints - 97/7/22 TD +AC_CHECK_LIB(inet,main,cf_cv_netlibs="-linet $cf_cv_netlibs") +# +if test "$ac_cv_func_lsocket" != no ; then +AC_CHECK_FUNCS(socket,,[ + CF_RECHECK_FUNC(socket,socket,cf_cv_netlibs,[ + CF_RECHECK_FUNC(socket,bsd,cf_cv_netlibs)])]) +fi +# +AC_CHECK_FUNCS(gethostbyname,,[ + CF_RECHECK_FUNC(gethostbyname,nsl,cf_cv_netlibs)]) +# +AC_CHECK_FUNCS(strcasecmp,,[ + CF_RECHECK_FUNC(strcasecmp,resolv,cf_cv_netlibs)]) +]) +LIBS="$LIBS $cf_cv_netlibs" +test $cf_test_netlibs = no && echo "$cf_cv_netlibs" >&AC_FD_MSG +])dnl +dnl --------------------------------------------------------------------------- +dnl Re-check on a function to see if we can pick it up by adding a library. +dnl $1 = function to check +dnl $2 = library to check in +dnl $3 = environment to update (e.g., $LIBS) +dnl $4 = what to do if this fails +dnl +dnl This uses 'unset' if the shell happens to support it, but leaves the +dnl configuration variable set to 'unknown' if not. This is a little better +dnl than the normal autoconf test, which gives misleading results if a test +dnl for the function is made (e.g., with AC_CHECK_FUNC) after this macro is +dnl used (autoconf does not distinguish between a null token and one that is +dnl set to 'no'). +AC_DEFUN([CF_RECHECK_FUNC],[ +AC_CHECK_LIB($2,$1,[ + CF_UPPER(cf_tr_func,$1) + AC_DEFINE_UNQUOTED(HAVE_$cf_tr_func,1,[Define if you have function $1]) + ac_cv_func_$1=yes + $3="-l$2 [$]$3"],[ + ac_cv_func_$1=unknown + unset ac_cv_func_$1 2>/dev/null + $4], + [[$]$3]) +])dnl +dnl --------------------------------------------------------------------------- +dnl Make an uppercase version of a variable +dnl $1=uppercase($2) +AC_DEFUN([CF_UPPER], +[ +changequote(,)dnl +$1=`echo $2 | tr '[a-z]' '[A-Z]'` +changequote([,])dnl +])dnl + + +dnl --------------------------------------------------------------------------- +dnl From Paul Eggert + +AC_DEFUN(AC_STRUCT_ST_MTIM_NSEC, + [AC_CACHE_CHECK([for nanoseconds field of struct stat.st_mtim], + ac_cv_struct_st_mtim_nsec, + [ac_save_CPPFLAGS="$CPPFLAGS" + ac_cv_struct_st_mtim_nsec=no + # tv_nsec -- the usual case + # _tv_nsec -- Solaris 2.6, if + # (defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1 + # && !defined __EXTENSIONS__) + # st__tim.tv_nsec -- UnixWare 2.1.2 + for ac_val in tv_nsec _tv_nsec st__tim.tv_nsec; do + CPPFLAGS="$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val" + AC_TRY_COMPILE([#include +#include ], [struct stat s; s.st_mtim.ST_MTIM_NSEC;], + [ac_cv_struct_st_mtim_nsec=$ac_val; break]) + done + CPPFLAGS="$ac_save_CPPFLAGS"]) + + if test $ac_cv_struct_st_mtim_nsec != no; then + AC_DEFINE_UNQUOTED(ST_MTIM_NSEC, $ac_cv_struct_st_mtim_nsec, [Define if 'struct stat' contains a nanoseconds field]) + fi + ] +) + + +dnl --------------------------------------------------------------------------- +dnl This will be in the next version of autoconf; take this out then! + +# make_FUNC_SETVBUF_REVERSED +# ------------------------ +AC_DEFUN([make_FUNC_SETVBUF_REVERSED], +[AC_REQUIRE([AC_C_PROTOTYPES])dnl +AC_CACHE_CHECK(whether setvbuf arguments are reversed, + ac_cv_func_setvbuf_reversed, + [ac_cv_func_setvbuf_reversed=no + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include +# if PROTOTYPES + int (setvbuf) (FILE *, int, char *, size_t); +# endif]], + [[char buf; return setvbuf (stdout, _IOLBF, &buf, 1);]])], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include +# if PROTOTYPES + int (setvbuf) (FILE *, int, char *, size_t); +# endif]], + [[char buf; return setvbuf (stdout, &buf, _IOLBF, 1);]])], + [# It compiles and links either way, so it must not be declared + # with a prototype and most likely this is a K&R C compiler. + # Try running it. + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[/* This call has the arguments reversed. + A reversed system may check and see that the address of buf + is not _IOLBF, _IONBF, or _IOFBF, and return nonzero. */ + char buf; + if (setvbuf (stdout, _IOLBF, &buf, 1) != 0) + exit (1); + putchar ('\r'); + exit (0); /* Non-reversed systems SEGV here. */]])], + ac_cv_func_setvbuf_reversed=yes, + rm -f core core.* *.core, + [[: # Assume setvbuf is not reversed when cross-compiling.]])] + ac_cv_func_setvbuf_reversed=yes)])]) +if test $ac_cv_func_setvbuf_reversed = yes; then + AC_DEFINE(SETVBUF_REVERSED, 1, + [Define to 1 if the `setvbuf' function takes the buffering type as + its second argument and the buffer pointer as the third, as on + System V before release 3.]) +fi +])# make_FUNC_SETVBUF_REVERSED diff --git a/src/mkutil/make/alloca.c b/src/mkutil/make/alloca.c new file mode 100644 index 00000000..a9d8e381 --- /dev/null +++ b/src/mkutil/make/alloca.c @@ -0,0 +1,503 @@ +/* alloca.c -- allocate automatically reclaimed memory + (Mostly) portable public-domain implementation -- D A Gwyn + + This implementation of the PWB library alloca function, + which is used to allocate space off the run-time stack so + that it is automatically reclaimed upon procedure exit, + was inspired by discussions with J. Q. Johnson of Cornell. + J.Otto Tennant contributed the Cray support. + + There are some preprocessor constants that can + be defined when compiling for your specific system, for + improved efficiency; however, the defaults should be okay. + + The general concept of this implementation is to keep + track of all alloca-allocated blocks, and reclaim any + that are found to be deeper in the stack than the current + invocation. This heuristic does not reclaim storage as + soon as it becomes invalid, but it will do so eventually. + + As a special case, alloca(0) reclaims storage without + allocating any. It is a good idea to use alloca(0) in + your main control loop, etc. to force garbage collection. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef emacs +#include "blockinput.h" +#endif + +/* If compiling with GCC 2, this file's not needed. */ +#if !defined (__GNUC__) || __GNUC__ < 2 + +/* If someone has defined alloca as a macro, + there must be some other way alloca is supposed to work. */ +#ifndef alloca + +#ifdef emacs +#ifdef static +/* actually, only want this if static is defined as "" + -- this is for usg, in which emacs must undefine static + in order to make unexec workable + */ +#ifndef STACK_DIRECTION +you +lose +-- must know STACK_DIRECTION at compile-time +#endif /* STACK_DIRECTION undefined */ +#endif /* static */ +#endif /* emacs */ + +/* If your stack is a linked list of frames, you have to + provide an "address metric" ADDRESS_FUNCTION macro. */ + +#if defined (CRAY) && defined (CRAY_STACKSEG_END) +long i00afunc (); +#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) +#else +#define ADDRESS_FUNCTION(arg) &(arg) +#endif + +#if __STDC__ +typedef void *pointer; +#else +typedef char *pointer; +#endif + +#ifndef NULL +#define NULL 0 +#endif + +/* Different portions of Emacs need to call different versions of + malloc. The Emacs executable needs alloca to call xmalloc, because + ordinary malloc isn't protected from input signals. On the other + hand, the utilities in lib-src need alloca to call malloc; some of + them are very simple, and don't have an xmalloc routine. + + Non-Emacs programs expect this to call use xmalloc. + + Callers below should use malloc. */ + +#ifndef emacs +#define malloc xmalloc +#endif +extern pointer malloc (); + +/* Define STACK_DIRECTION if you know the direction of stack + growth for your system; otherwise it will be automatically + deduced at run-time. + + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ + +#ifndef STACK_DIRECTION +#define STACK_DIRECTION 0 /* Direction unknown. */ +#endif + +#if STACK_DIRECTION != 0 + +#define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ + +#else /* STACK_DIRECTION == 0; need run-time code. */ + +static int stack_dir; /* 1 or -1 once known. */ +#define STACK_DIR stack_dir + +static void +find_stack_direction (void) +{ + static char *addr = NULL; /* Address of first `dummy', once known. */ + auto char dummy; /* To get stack address. */ + + if (addr == NULL) + { /* Initial entry. */ + addr = ADDRESS_FUNCTION (dummy); + + find_stack_direction (); /* Recurse once. */ + } + else + { + /* Second entry. */ + if (ADDRESS_FUNCTION (dummy) > addr) + stack_dir = 1; /* Stack grew upward. */ + else + stack_dir = -1; /* Stack grew downward. */ + } +} + +#endif /* STACK_DIRECTION == 0 */ + +/* An "alloca header" is used to: + (a) chain together all alloca'ed blocks; + (b) keep track of stack depth. + + It is very important that sizeof(header) agree with malloc + alignment chunk size. The following default should work okay. */ + +#ifndef ALIGN_SIZE +#define ALIGN_SIZE sizeof(double) +#endif + +typedef union hdr +{ + char align[ALIGN_SIZE]; /* To force sizeof(header). */ + struct + { + union hdr *next; /* For chaining headers. */ + char *deep; /* For stack depth measure. */ + } h; +} header; + +static header *last_alloca_header = NULL; /* -> last alloca header. */ + +/* Return a pointer to at least SIZE bytes of storage, + which will be automatically reclaimed upon exit from + the procedure that called alloca. Originally, this space + was supposed to be taken from the current stack frame of the + caller, but that method cannot be made to work for some + implementations of C, for example under Gould's UTX/32. */ + +pointer +alloca (unsigned size) +{ + auto char probe; /* Probes stack depth: */ + register char *depth = ADDRESS_FUNCTION (probe); + +#if STACK_DIRECTION == 0 + if (STACK_DIR == 0) /* Unknown growth direction. */ + find_stack_direction (); +#endif + + /* Reclaim garbage, defined as all alloca'd storage that + was allocated from deeper in the stack than currently. */ + + { + register header *hp; /* Traverses linked list. */ + +#ifdef emacs + BLOCK_INPUT; +#endif + + for (hp = last_alloca_header; hp != NULL;) + if ((STACK_DIR > 0 && hp->h.deep > depth) + || (STACK_DIR < 0 && hp->h.deep < depth)) + { + register header *np = hp->h.next; + + free ((pointer) hp); /* Collect garbage. */ + + hp = np; /* -> next header. */ + } + else + break; /* Rest are not deeper. */ + + last_alloca_header = hp; /* -> last valid storage. */ + +#ifdef emacs + UNBLOCK_INPUT; +#endif + } + + if (size == 0) + return NULL; /* No allocation required. */ + + /* Allocate combined header + user data storage. */ + + { + register pointer new = malloc (sizeof (header) + size); + /* Address of header. */ + + if (new == 0) + abort(); + + ((header *) new)->h.next = last_alloca_header; + ((header *) new)->h.deep = depth; + + last_alloca_header = (header *) new; + + /* User storage begins just after header. */ + + return (pointer) ((char *) new + sizeof (header)); + } +} + +#if defined (CRAY) && defined (CRAY_STACKSEG_END) + +#ifdef DEBUG_I00AFUNC +#include +#endif + +#ifndef CRAY_STACK +#define CRAY_STACK +#ifndef CRAY2 +/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ +struct stack_control_header + { + long shgrow:32; /* Number of times stack has grown. */ + long shaseg:32; /* Size of increments to stack. */ + long shhwm:32; /* High water mark of stack. */ + long shsize:32; /* Current size of stack (all segments). */ + }; + +/* The stack segment linkage control information occurs at + the high-address end of a stack segment. (The stack + grows from low addresses to high addresses.) The initial + part of the stack segment linkage control information is + 0200 (octal) words. This provides for register storage + for the routine which overflows the stack. */ + +struct stack_segment_linkage + { + long ss[0200]; /* 0200 overflow words. */ + long sssize:32; /* Number of words in this segment. */ + long ssbase:32; /* Offset to stack base. */ + long:32; + long sspseg:32; /* Offset to linkage control of previous + segment of stack. */ + long:32; + long sstcpt:32; /* Pointer to task common address block. */ + long sscsnm; /* Private control structure number for + microtasking. */ + long ssusr1; /* Reserved for user. */ + long ssusr2; /* Reserved for user. */ + long sstpid; /* Process ID for pid based multi-tasking. */ + long ssgvup; /* Pointer to multitasking thread giveup. */ + long sscray[7]; /* Reserved for Cray Research. */ + long ssa0; + long ssa1; + long ssa2; + long ssa3; + long ssa4; + long ssa5; + long ssa6; + long ssa7; + long sss0; + long sss1; + long sss2; + long sss3; + long sss4; + long sss5; + long sss6; + long sss7; + }; + +#else /* CRAY2 */ +/* The following structure defines the vector of words + returned by the STKSTAT library routine. */ +struct stk_stat + { + long now; /* Current total stack size. */ + long maxc; /* Amount of contiguous space which would + be required to satisfy the maximum + stack demand to date. */ + long high_water; /* Stack high-water mark. */ + long overflows; /* Number of stack overflow ($STKOFEN) calls. */ + long hits; /* Number of internal buffer hits. */ + long extends; /* Number of block extensions. */ + long stko_mallocs; /* Block allocations by $STKOFEN. */ + long underflows; /* Number of stack underflow calls ($STKRETN). */ + long stko_free; /* Number of deallocations by $STKRETN. */ + long stkm_free; /* Number of deallocations by $STKMRET. */ + long segments; /* Current number of stack segments. */ + long maxs; /* Maximum number of stack segments so far. */ + long pad_size; /* Stack pad size. */ + long current_address; /* Current stack segment address. */ + long current_size; /* Current stack segment size. This + number is actually corrupted by STKSTAT to + include the fifteen word trailer area. */ + long initial_address; /* Address of initial segment. */ + long initial_size; /* Size of initial segment. */ + }; + +/* The following structure describes the data structure which trails + any stack segment. I think that the description in 'asdef' is + out of date. I only describe the parts that I am sure about. */ + +struct stk_trailer + { + long this_address; /* Address of this block. */ + long this_size; /* Size of this block (does not include + this trailer). */ + long unknown2; + long unknown3; + long link; /* Address of trailer block of previous + segment. */ + long unknown5; + long unknown6; + long unknown7; + long unknown8; + long unknown9; + long unknown10; + long unknown11; + long unknown12; + long unknown13; + long unknown14; + }; + +#endif /* CRAY2 */ +#endif /* not CRAY_STACK */ + +#ifdef CRAY2 +/* Determine a "stack measure" for an arbitrary ADDRESS. + I doubt that "lint" will like this much. */ + +static long +i00afunc (long *address) +{ + struct stk_stat status; + struct stk_trailer *trailer; + long *block, size; + long result = 0; + + /* We want to iterate through all of the segments. The first + step is to get the stack status structure. We could do this + more quickly and more directly, perhaps, by referencing the + $LM00 common block, but I know that this works. */ + + STKSTAT (&status); + + /* Set up the iteration. */ + + trailer = (struct stk_trailer *) (status.current_address + + status.current_size + - 15); + + /* There must be at least one stack segment. Therefore it is + a fatal error if "trailer" is null. */ + + if (trailer == 0) + abort (); + + /* Discard segments that do not contain our argument address. */ + + while (trailer != 0) + { + block = (long *) trailer->this_address; + size = trailer->this_size; + if (block == 0 || size == 0) + abort (); + trailer = (struct stk_trailer *) trailer->link; + if ((block <= address) && (address < (block + size))) + break; + } + + /* Set the result to the offset in this segment and add the sizes + of all predecessor segments. */ + + result = address - block; + + if (trailer == 0) + { + return result; + } + + do + { + if (trailer->this_size <= 0) + abort (); + result += trailer->this_size; + trailer = (struct stk_trailer *) trailer->link; + } + while (trailer != 0); + + /* We are done. Note that if you present a bogus address (one + not in any segment), you will get a different number back, formed + from subtracting the address of the first block. This is probably + not what you want. */ + + return (result); +} + +#else /* not CRAY2 */ +/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. + Determine the number of the cell within the stack, + given the address of the cell. The purpose of this + routine is to linearize, in some sense, stack addresses + for alloca. */ + +static long +i00afunc (long address) +{ + long stkl = 0; + + long size, pseg, this_segment, stack; + long result = 0; + + struct stack_segment_linkage *ssptr; + + /* Register B67 contains the address of the end of the + current stack segment. If you (as a subprogram) store + your registers on the stack and find that you are past + the contents of B67, you have overflowed the segment. + + B67 also points to the stack segment linkage control + area, which is what we are really interested in. */ + + stkl = CRAY_STACKSEG_END (); + ssptr = (struct stack_segment_linkage *) stkl; + + /* If one subtracts 'size' from the end of the segment, + one has the address of the first word of the segment. + + If this is not the first segment, 'pseg' will be + nonzero. */ + + pseg = ssptr->sspseg; + size = ssptr->sssize; + + this_segment = stkl - size; + + /* It is possible that calling this routine itself caused + a stack overflow. Discard stack segments which do not + contain the target address. */ + + while (!(this_segment <= address && address <= stkl)) + { +#ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); +#endif + if (pseg == 0) + break; + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + this_segment = stkl - size; + } + + result = address - this_segment; + + /* If you subtract pseg from the current end of the stack, + you get the address of the previous stack segment's end. + This seems a little convoluted to me, but I'll bet you save + a cycle somewhere. */ + + while (pseg != 0) + { +#ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o\n", pseg, size); +#endif + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + result += size; + } + return (result); +} + +#endif /* not CRAY2 */ +#endif /* CRAY */ + +#endif /* no alloca */ +#endif /* not GCC version 2 */ diff --git a/src/mkutil/make/amiga.c b/src/mkutil/make/amiga.c new file mode 100644 index 00000000..f4049e1d --- /dev/null +++ b/src/mkutil/make/amiga.c @@ -0,0 +1,121 @@ +/* Running commands on Amiga +Copyright (C) 1995, 1996 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +MA 02111-1307, USA. */ + +#include "make.h" +#include "variable.h" +#include "amiga.h" +#include +#include +#include +#include +#include + +static const char Amiga_version[] = "$VER: Make 3.74.3 (12.05.96) \n" + "Amiga Port by A. Digulla (digulla@home.lake.de)"; + +int +MyExecute (char **argv) +{ + char * buffer, * ptr; + char ** aptr; + int len = 0; + int status; + + for (aptr=argv; *aptr; aptr++) + { + len += strlen (*aptr) + 4; + } + + buffer = AllocMem (len, MEMF_ANY); + + if (!buffer) + fatal (NILF, "MyExecute: Cannot allocate space for calling a command"); + + ptr = buffer; + + for (aptr=argv; *aptr; aptr++) + { + if (((*aptr)[0] == ';' && !(*aptr)[1])) + { + *ptr ++ = '"'; + strcpy (ptr, *aptr); + ptr += strlen (ptr); + *ptr ++ = '"'; + } + else if ((*aptr)[0] == '@' && (*aptr)[1] == '@' && !(*aptr)[2]) + { + *ptr ++ = '\n'; + continue; + } + else + { + strcpy (ptr, *aptr); + ptr += strlen (ptr); + } + *ptr ++ = ' '; + *ptr = 0; + } + + ptr[-1] = '\n'; + + status = SystemTags (buffer, + SYS_UserShell, TRUE, + TAG_END); + + FreeMem (buffer, len); + + if (SetSignal(0L,0L) & SIGBREAKF_CTRL_C) + status = 20; + + /* Warnings don't count */ + if (status == 5) + status = 0; + + return status; +} + +char * +wildcard_expansion (char *wc, char *o) +{ +# define PATH_SIZE 1024 + struct AnchorPath * apath; + + if ( (apath = AllocMem (sizeof (struct AnchorPath) + PATH_SIZE, + MEMF_CLEAR)) + ) + { + apath->ap_Strlen = PATH_SIZE; + + if (MatchFirst (wc, apath) == 0) + { + do + { + o = variable_buffer_output (o, apath->ap_Buf, + strlen (apath->ap_Buf)); + o = variable_buffer_output (o, " ",1); + } while (MatchNext (apath) == 0); + } + + MatchEnd (apath); + FreeMem (apath, sizeof (struct AnchorPath) + PATH_SIZE); + } + + return o; +} + diff --git a/src/mkutil/make/amiga.h b/src/mkutil/make/amiga.h new file mode 100644 index 00000000..99a1c598 --- /dev/null +++ b/src/mkutil/make/amiga.h @@ -0,0 +1,22 @@ +/* Definitions for amiga specific things +Copyright (C) 1995, 1996 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +MA 02111-1307, USA. */ + +extern int MyExecute PARAMS ((char ** argv)); +extern char * wildcard_expansion PARAMS ((char * wc, char * o)); + diff --git a/src/mkutil/make/ar.c b/src/mkutil/make/ar.c new file mode 100644 index 00000000..9779a75c --- /dev/null +++ b/src/mkutil/make/ar.c @@ -0,0 +1,310 @@ +/* Interface to `ar' archives for GNU Make. +Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1997, +2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" + +#ifndef NO_ARCHIVES + +#include "filedef.h" +#include "dep.h" +#include + +/* Defined in arscan.c. */ +extern long int ar_scan PARAMS ((char *archive, long int (*function) (), long int arg)); +extern int ar_name_equal PARAMS ((char *name, char *mem, int truncated)); +#ifndef VMS +extern int ar_member_touch PARAMS ((char *arname, char *memname)); +#endif + +/* Return nonzero if NAME is an archive-member reference, zero if not. + An archive-member reference is a name like `lib(member)'. + If a name like `lib((entry))' is used, a fatal error is signaled at + the attempt to use this unsupported feature. */ + +int +ar_name (char *name) +{ + char *p = strchr (name, '('); + char *end; + + if (p == 0 || p == name) + return 0; + + end = p + strlen (p) - 1; + if (*end != ')') + return 0; + + if (p[1] == '(' && end[-1] == ')') + fatal (NILF, _("attempt to use unsupported feature: `%s'"), name); + + return 1; +} + + +/* Parse the archive-member reference NAME into the archive and member names. + Put the malloc'd archive name in *ARNAME_P if ARNAME_P is non-nil; + put the malloc'd member name in *MEMNAME_P if MEMNAME_P is non-nil. */ + +void +ar_parse_name (char *name, char **arname_p, char **memname_p) +{ + char *p = strchr (name, '('), *end = name + strlen (name) - 1; + + if (arname_p != 0) + *arname_p = savestring (name, p - name); + + if (memname_p != 0) + *memname_p = savestring (p + 1, end - (p + 1)); +} + +static long int ar_member_date_1 PARAMS ((int desc, char *mem, int truncated, long int hdrpos, + long int datapos, long int size, long int date, int uid, int gid, int mode, char *name)); + +/* Return the modtime of NAME. */ + +time_t +ar_member_date (char *name) +{ + char *arname; + int arname_used = 0; + char *memname; + long int val; + + ar_parse_name (name, &arname, &memname); + + /* Make sure we know the modtime of the archive itself because we are + likely to be called just before commands to remake a member are run, + and they will change the archive itself. + + But we must be careful not to enter_file the archive itself if it does + not exist, because pattern_search assumes that files found in the data + base exist or can be made. */ + { + struct file *arfile; + arfile = lookup_file (arname); + if (arfile == 0 && file_exists_p (arname)) + { + arfile = enter_file (arname); + arname_used = 1; + } + + if (arfile != 0) + (void) f_mtime (arfile, 0); + } + + val = ar_scan (arname, ar_member_date_1, (long int) memname); + + if (!arname_used) + free (arname); + free (memname); + + return (val <= 0 ? (time_t) -1 : (time_t) val); +} + +/* This function is called by `ar_scan' to find which member to look at. */ + +/* ARGSUSED */ +static long int +ar_member_date_1 (int desc, char *mem, int truncated, + long int hdrpos, long int datapos, long int size, + long int date, int uid, int gid, int mode, char *name) +{ + return ar_name_equal (name, mem, truncated) ? date : 0; +} + +/* Set the archive-member NAME's modtime to now. */ + +#ifdef VMS +int +ar_touch (char *name) +{ + error (NILF, _("touch archive member is not available on VMS")); + return -1; +} +#else +int +ar_touch (char *name) +{ + char *arname, *memname; + int arname_used = 0; + register int val; + + ar_parse_name (name, &arname, &memname); + + /* Make sure we know the modtime of the archive itself before we + touch the member, since this will change the archive itself. */ + { + struct file *arfile; + arfile = lookup_file (arname); + if (arfile == 0) + { + arfile = enter_file (arname); + arname_used = 1; + } + + (void) f_mtime (arfile, 0); + } + + val = 1; + switch (ar_member_touch (arname, memname)) + { + case -1: + error (NILF, _("touch: Archive `%s' does not exist"), arname); + break; + case -2: + error (NILF, _("touch: `%s' is not a valid archive"), arname); + break; + case -3: + perror_with_name ("touch: ", arname); + break; + case 1: + error (NILF, + _("touch: Member `%s' does not exist in `%s'"), memname, arname); + break; + case 0: + val = 0; + break; + default: + error (NILF, + _("touch: Bad return code from ar_member_touch on `%s'"), name); + } + + if (!arname_used) + free (arname); + free (memname); + + return val; +} +#endif /* !VMS */ + +/* State of an `ar_glob' run, passed to `ar_glob_match'. */ + +struct ar_glob_state + { + char *arname; + char *pattern; + unsigned int size; + struct nameseq *chain; + unsigned int n; + }; + +/* This function is called by `ar_scan' to match one archive + element against the pattern in STATE. */ + +static long int +ar_glob_match (int desc, char *mem, int truncated, + long int hdrpos, long int datapos, long int size, + long int date, int uid, int gid, int mode, + struct ar_glob_state *state) +{ + if (fnmatch (state->pattern, mem, FNM_PATHNAME|FNM_PERIOD) == 0) + { + /* We have a match. Add it to the chain. */ + struct nameseq *new = (struct nameseq *) xmalloc (state->size); + new->name = concat (state->arname, mem, ")"); + new->next = state->chain; + state->chain = new; + ++state->n; + } + + return 0L; +} + +/* Return nonzero if PATTERN contains any metacharacters. + Metacharacters can be quoted with backslashes if QUOTE is nonzero. */ +static int +glob_pattern_p (const char *pattern, int quote) +{ + const char *p; + int open = 0; + + for (p = pattern; *p != '\0'; ++p) + switch (*p) + { + case '?': + case '*': + return 1; + + case '\\': + if (quote) + ++p; + break; + + case '[': + open = 1; + break; + + case ']': + if (open) + return 1; + break; + } + + return 0; +} + +/* Glob for MEMBER_PATTERN in archive ARNAME. + Return a malloc'd chain of matching elements (or nil if none). */ + +struct nameseq * +ar_glob (char *arname, char *member_pattern, unsigned int size) +{ + struct ar_glob_state state; + char **names; + struct nameseq *n; + unsigned int i; + + if (! glob_pattern_p (member_pattern, 1)) + return 0; + + /* Scan the archive for matches. + ar_glob_match will accumulate them in STATE.chain. */ + i = strlen (arname); + state.arname = (char *) alloca (i + 2); + bcopy (arname, state.arname, i); + state.arname[i] = '('; + state.arname[i + 1] = '\0'; + state.pattern = member_pattern; + state.size = size; + state.chain = 0; + state.n = 0; + (void) ar_scan (arname, ar_glob_match, (long int) &state); + + if (state.chain == 0) + return 0; + + /* Now put the names into a vector for sorting. */ + names = (char **) alloca (state.n * sizeof (char *)); + i = 0; + for (n = state.chain; n != 0; n = n->next) + names[i++] = n->name; + + /* Sort them alphabetically. */ + qsort ((char *) names, i, sizeof (*names), alpha_compare); + + /* Put them back into the chain in the sorted order. */ + i = 0; + for (n = state.chain; n != 0; n = n->next) + n->name = names[i++]; + + return state.chain; +} + +#endif /* Not NO_ARCHIVES. */ diff --git a/src/mkutil/make/arscan.c b/src/mkutil/make/arscan.c new file mode 100644 index 00000000..5b0d5c54 --- /dev/null +++ b/src/mkutil/make/arscan.c @@ -0,0 +1,840 @@ +/* Library function for scanning an archive file. +Copyright (C) 1987,89,91,92,93,94,95,97 Free Software Foundation, Inc. + +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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +USA. */ + +#include "make.h" + +#ifdef HAVE_FCNTL_H +#include +#else +#include +#endif + +#ifndef NO_ARCHIVES + +#ifdef VMS +#include +#include +#include +#include +#include +#if __DECC +#include +#include +#endif + +static void *VMS_lib_idx; + +static char *VMS_saved_memname; + +static time_t VMS_member_date; + +static long int (*VMS_function) (); + +static int +VMS_get_member_info (struct dsc$descriptor_s *module, unsigned long *rfa) +{ + int status, i; + long int fnval; + + time_t val; + + static struct dsc$descriptor_s bufdesc = + { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL }; + + struct mhddef *mhd; + char filename[128]; + + bufdesc.dsc$a_pointer = filename; + bufdesc.dsc$w_length = sizeof (filename); + + status = lbr$set_module (&VMS_lib_idx, rfa, &bufdesc, + &bufdesc.dsc$w_length, 0); + if (! (status & 1)) + { + error (NILF, _("lbr$set_module failed to extract module info, status = %d"), + status); + + lbr$close (&VMS_lib_idx); + + return 0; + } + + mhd = (struct mhddef *) filename; + +#ifdef __DECC + /* John Fowler writes this is needed in his environment, + * but that decc$fix_time() isn't documented to work this way. Let me + * know if this causes problems in other VMS environments. + */ + val = decc$fix_time (&mhd->mhd$l_datim) + timezone - daylight*3600; +#endif + + for (i = 0; i < module->dsc$w_length; i++) + filename[i] = _tolower ((unsigned char)module->dsc$a_pointer[i]); + + filename[i] = '\0'; + + VMS_member_date = (time_t) -1; + + fnval = + (*VMS_function) (-1, filename, 0, 0, 0, 0, val, 0, 0, 0, + VMS_saved_memname); + + if (fnval) + { + VMS_member_date = fnval; + return 0; + } + else + return 1; +} + +/* Takes three arguments ARCHIVE, FUNCTION and ARG. + + Open the archive named ARCHIVE, find its members one by one, + and for each one call FUNCTION with the following arguments: + archive file descriptor for reading the data, + member name, + member name might be truncated flag, + member header position in file, + member data position in file, + member data size, + member date, + member uid, + member gid, + member protection mode, + ARG. + + NOTE: on VMS systems, only name, date, and arg are meaningful! + + The descriptor is poised to read the data of the member + when FUNCTION is called. It does not matter how much + data FUNCTION reads. + + If FUNCTION returns nonzero, we immediately return + what FUNCTION returned. + + Returns -1 if archive does not exist, + Returns -2 if archive has invalid format. + Returns 0 if have scanned successfully. */ + +long int +ar_scan (char *archive, long int (*function) PARAMS ((void)), long int arg) +{ + char *p; + + static struct dsc$descriptor_s libdesc = + { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL }; + + unsigned long func = LBR$C_READ; + unsigned long type = LBR$C_TYP_UNK; + unsigned long index = 1; + + int status; + + status = lbr$ini_control (&VMS_lib_idx, &func, &type, 0); + + if (! (status & 1)) + { + error (NILF, _("lbr$ini_control failed with status = %d"),status); + return -2; + } + + libdesc.dsc$a_pointer = archive; + libdesc.dsc$w_length = strlen (archive); + + status = lbr$open (&VMS_lib_idx, &libdesc, 0, 0, 0, 0, 0); + + if (! (status & 1)) + { + error (NILF, _("unable to open library `%s' to lookup member `%s'"), + archive, (char *)arg); + return -1; + } + + VMS_saved_memname = (char *)arg; + + /* For comparison, delete .obj from arg name. */ + + p = strrchr (VMS_saved_memname, '.'); + if (p) + *p = '\0'; + + VMS_function = function; + + VMS_member_date = (time_t) -1; + lbr$get_index (&VMS_lib_idx, &index, VMS_get_member_info, 0); + + /* Undo the damage. */ + if (p) + *p = '.'; + + lbr$close (&VMS_lib_idx); + + return VMS_member_date > 0 ? VMS_member_date : 0; +} + +#else /* !VMS */ + +/* SCO Unix's compiler defines both of these. */ +#ifdef M_UNIX +#undef M_XENIX +#endif + +/* On the sun386i and in System V rel 3, ar.h defines two different archive + formats depending upon whether you have defined PORTAR (normal) or PORT5AR + (System V Release 1). There is no default, one or the other must be defined + to have a nonzero value. */ + +#if (!defined (PORTAR) || PORTAR == 0) && (!defined (PORT5AR) || PORT5AR == 0) +#undef PORTAR +#ifdef M_XENIX +/* According to Jim Sievert , for SCO XENIX defining + PORTAR to 1 gets the wrong archive format, and defining it to 0 gets the + right one. */ +#define PORTAR 0 +#else +#define PORTAR 1 +#endif +#endif + +/* On AIX, define these symbols to be sure to get both archive formats. + AIX 4.3 introduced the "big" archive format to support 64-bit object + files, so on AIX 4.3 systems we need to support both the "normal" and + "big" archive formats. An archive's format is indicated in the + "fl_magic" field of the "FL_HDR" structure. For a normal archive, + this field will be the string defined by the AIAMAG symbol. For a + "big" archive, it will be the string defined by the AIAMAGBIG symbol + (at least on AIX it works this way). + + Note: we'll define these symbols regardless of which AIX version + we're compiling on, but this is okay since we'll use the new symbols + only if they're present. */ +#ifdef _AIX +# define __AR_SMALL__ +# define __AR_BIG__ +#endif + +#ifndef WINDOWS32 +# ifndef __BEOS__ +# include +# else + /* BeOS 5 doesn't have but has archives in the same format + * as many other Unices. This was taken from GNU binutils for BeOS. + */ +# define ARMAG "!\n" /* String that begins an archive file. */ +# define SARMAG 8 /* Size of that string. */ +# define ARFMAG "`\n" /* String in ar_fmag at end of each header. */ +struct ar_hdr + { + char ar_name[16]; /* Member file name, sometimes / terminated. */ + char ar_date[12]; /* File date, decimal seconds since Epoch. */ + char ar_uid[6], ar_gid[6]; /* User and group IDs, in ASCII decimal. */ + char ar_mode[8]; /* File mode, in ASCII octal. */ + char ar_size[10]; /* File size, in ASCII decimal. */ + char ar_fmag[2]; /* Always contains ARFMAG. */ + }; +# endif +#else +/* These should allow us to read Windows (VC++) libraries (according to Frank + * Libbrecht ) + */ +# include +# include +# include +# define ARMAG IMAGE_ARCHIVE_START +# define SARMAG IMAGE_ARCHIVE_START_SIZE +# define ar_hdr _IMAGE_ARCHIVE_MEMBER_HEADER +# define ar_name Name +# define ar_mode Mode +# define ar_size Size +# define ar_date Date +# define ar_uid UserID +# define ar_gid GroupID +#endif + +/* Cray's apparently defines this. */ +#ifndef AR_HDR_SIZE +# define AR_HDR_SIZE (sizeof (struct ar_hdr)) +#endif + +/* Takes three arguments ARCHIVE, FUNCTION and ARG. + + Open the archive named ARCHIVE, find its members one by one, + and for each one call FUNCTION with the following arguments: + archive file descriptor for reading the data, + member name, + member name might be truncated flag, + member header position in file, + member data position in file, + member data size, + member date, + member uid, + member gid, + member protection mode, + ARG. + + The descriptor is poised to read the data of the member + when FUNCTION is called. It does not matter how much + data FUNCTION reads. + + If FUNCTION returns nonzero, we immediately return + what FUNCTION returned. + + Returns -1 if archive does not exist, + Returns -2 if archive has invalid format. + Returns 0 if have scanned successfully. */ + +long int +ar_scan (char *archive, long int (*function)(), long int arg) +{ +#ifdef AIAMAG + FL_HDR fl_header; +#ifdef AIAMAGBIG + int big_archive = 0; + FL_HDR_BIG fl_header_big; +#endif +#else + int long_name = 0; +#endif + char *namemap = 0; + register int desc = open (archive, O_RDONLY, 0); + if (desc < 0) + return -1; +#ifdef SARMAG + { + char buf[SARMAG]; + register int nread = read (desc, buf, SARMAG); + if (nread != SARMAG || bcmp (buf, ARMAG, SARMAG)) + { + (void) close (desc); + return -2; + } + } +#else +#ifdef AIAMAG + { + register int nread = read (desc, (char *) &fl_header, FL_HSZ); + + if (nread != FL_HSZ) + { + (void) close (desc); + return -2; + } +#ifdef AIAMAGBIG + /* If this is a "big" archive, then set the flag and + re-read the header into the "big" structure. */ + if (!bcmp (fl_header.fl_magic, AIAMAGBIG, SAIAMAG)) + { + big_archive = 1; + + /* seek back to beginning of archive */ + if (lseek (desc, 0, 0) < 0) + { + (void) close (desc); + return -2; + } + + /* re-read the header into the "big" structure */ + nread = read (desc, (char *) &fl_header_big, FL_HSZ_BIG); + if (nread != FL_HSZ_BIG) + { + (void) close (desc); + return -2; + } + } + else +#endif + /* Check to make sure this is a "normal" archive. */ + if (bcmp (fl_header.fl_magic, AIAMAG, SAIAMAG)) + { + (void) close (desc); + return -2; + } + } +#else + { +#ifndef M_XENIX + int buf; +#else + unsigned short int buf; +#endif + register int nread = read(desc, &buf, sizeof (buf)); + if (nread != sizeof (buf) || buf != ARMAG) + { + (void) close (desc); + return -2; + } + } +#endif +#endif + + /* Now find the members one by one. */ + { +#ifdef SARMAG + register long int member_offset = SARMAG; +#else +#ifdef AIAMAG + long int member_offset; + long int last_member_offset; + +#ifdef AIAMAGBIG + if ( big_archive ) + { + sscanf (fl_header_big.fl_fstmoff, "%20ld", &member_offset); + sscanf (fl_header_big.fl_lstmoff, "%20ld", &last_member_offset); + } + else +#endif + { + sscanf (fl_header.fl_fstmoff, "%12ld", &member_offset); + sscanf (fl_header.fl_lstmoff, "%12ld", &last_member_offset); + } + + if (member_offset == 0) + { + /* Empty archive. */ + close (desc); + return 0; + } +#else +#ifndef M_XENIX + register long int member_offset = sizeof (int); +#else /* Xenix. */ + register long int member_offset = sizeof (unsigned short int); +#endif /* Not Xenix. */ +#endif +#endif + + while (1) + { + register int nread; + struct ar_hdr member_header; +#ifdef AIAMAGBIG + struct ar_hdr_big member_header_big; +#endif +#ifdef AIAMAG + char name[256]; + int name_len; + long int dateval; + int uidval, gidval; + long int data_offset; +#else + char namebuf[sizeof member_header.ar_name + 1]; + char *name; + int is_namemap; /* Nonzero if this entry maps long names. */ +#endif + long int eltsize; + int eltmode; + long int fnval; + + if (lseek (desc, member_offset, 0) < 0) + { + (void) close (desc); + return -2; + } + +#ifdef AIAMAG +#define AR_MEMHDR_SZ(x) (sizeof(x) - sizeof (x._ar_name)) + +#ifdef AIAMAGBIG + if (big_archive) + { + nread = read (desc, (char *) &member_header_big, + AR_MEMHDR_SZ(member_header_big) ); + + if (nread != AR_MEMHDR_SZ(member_header_big)) + { + (void) close (desc); + return -2; + } + + sscanf (member_header_big.ar_namlen, "%4d", &name_len); + nread = read (desc, name, name_len); + + if (nread != name_len) + { + (void) close (desc); + return -2; + } + + name[name_len] = 0; + + sscanf (member_header_big.ar_date, "%12ld", &dateval); + sscanf (member_header_big.ar_uid, "%12d", &uidval); + sscanf (member_header_big.ar_gid, "%12d", &gidval); + sscanf (member_header_big.ar_mode, "%12o", &eltmode); + sscanf (member_header_big.ar_size, "%20ld", &eltsize); + + data_offset = (member_offset + AR_MEMHDR_SZ(member_header_big) + + name_len + 2); + } + else +#endif + { + nread = read (desc, (char *) &member_header, + AR_MEMHDR_SZ(member_header) ); + + if (nread != AR_MEMHDR_SZ(member_header)) + { + (void) close (desc); + return -2; + } + + sscanf (member_header.ar_namlen, "%4d", &name_len); + nread = read (desc, name, name_len); + + if (nread != name_len) + { + (void) close (desc); + return -2; + } + + name[name_len] = 0; + + sscanf (member_header.ar_date, "%12ld", &dateval); + sscanf (member_header.ar_uid, "%12d", &uidval); + sscanf (member_header.ar_gid, "%12d", &gidval); + sscanf (member_header.ar_mode, "%12o", &eltmode); + sscanf (member_header.ar_size, "%12ld", &eltsize); + + data_offset = (member_offset + AR_MEMHDR_SZ(member_header) + + name_len + 2); + } + data_offset += data_offset % 2; + + fnval = + (*function) (desc, name, 0, + member_offset, data_offset, eltsize, + dateval, uidval, gidval, + eltmode, arg); + +#else /* Not AIAMAG. */ + nread = read (desc, (char *) &member_header, AR_HDR_SIZE); + if (nread == 0) + /* No data left means end of file; that is OK. */ + break; + + if (nread != AR_HDR_SIZE +#if defined(ARFMAG) || defined(ARFZMAG) + || ( +# ifdef ARFMAG + bcmp (member_header.ar_fmag, ARFMAG, 2) +# else + 1 +# endif + && +# ifdef ARFZMAG + bcmp (member_header.ar_fmag, ARFZMAG, 2) +# else + 1 +# endif + ) +#endif + ) + { + (void) close (desc); + return -2; + } + + name = namebuf; + bcopy (member_header.ar_name, name, sizeof member_header.ar_name); + { + register char *p = name + sizeof member_header.ar_name; + do + *p = '\0'; + while (p > name && *--p == ' '); + +#ifndef AIAMAG + /* If the member name is "//" or "ARFILENAMES/" this may be + a list of file name mappings. The maximum file name + length supported by the standard archive format is 14 + characters. This member will actually always be the + first or second entry in the archive, but we don't check + that. */ + is_namemap = (!strcmp (name, "//") + || !strcmp (name, "ARFILENAMES/")); +#endif /* Not AIAMAG. */ + /* On some systems, there is a slash after each member name. */ + if (*p == '/') + *p = '\0'; + +#ifndef AIAMAG + /* If the member name starts with a space or a slash, this + is an index into the file name mappings (used by GNU ar). + Otherwise if the member name looks like #1/NUMBER the + real member name appears in the element data (used by + 4.4BSD). */ + if (! is_namemap + && (name[0] == ' ' || name[0] == '/') + && namemap != 0) + { + name = namemap + atoi (name + 1); + long_name = 1; + } + else if (name[0] == '#' + && name[1] == '1' + && name[2] == '/') + { + int namesize = atoi (name + 3); + + name = (char *) alloca (namesize + 1); + nread = read (desc, name, namesize); + if (nread != namesize) + { + close (desc); + return -2; + } + name[namesize] = '\0'; + + long_name = 1; + } +#endif /* Not AIAMAG. */ + } + +#ifndef M_XENIX + sscanf (member_header.ar_mode, "%o", &eltmode); + eltsize = atol (member_header.ar_size); +#else /* Xenix. */ + eltmode = (unsigned short int) member_header.ar_mode; + eltsize = member_header.ar_size; +#endif /* Not Xenix. */ + + fnval = + (*function) (desc, name, ! long_name, member_offset, + member_offset + AR_HDR_SIZE, eltsize, +#ifndef M_XENIX + atol (member_header.ar_date), + atoi (member_header.ar_uid), + atoi (member_header.ar_gid), +#else /* Xenix. */ + member_header.ar_date, + member_header.ar_uid, + member_header.ar_gid, +#endif /* Not Xenix. */ + eltmode, arg); + +#endif /* AIAMAG. */ + + if (fnval) + { + (void) close (desc); + return fnval; + } + +#ifdef AIAMAG + if (member_offset == last_member_offset) + /* End of the chain. */ + break; + +#ifdef AIAMAGBIG + if (big_archive) + sscanf (member_header_big.ar_nxtmem, "%20ld", &member_offset); + else +#endif + sscanf (member_header.ar_nxtmem, "%12ld", &member_offset); + + if (lseek (desc, member_offset, 0) != member_offset) + { + (void) close (desc); + return -2; + } +#else + + /* If this member maps archive names, we must read it in. The + name map will always precede any members whose names must + be mapped. */ + if (is_namemap) + { + char *clear; + char *limit; + + namemap = (char *) alloca (eltsize); + nread = read (desc, namemap, eltsize); + if (nread != eltsize) + { + (void) close (desc); + return -2; + } + + /* The names are separated by newlines. Some formats have + a trailing slash. Null terminate the strings for + convenience. */ + limit = namemap + eltsize; + for (clear = namemap; clear < limit; clear++) + { + if (*clear == '\n') + { + *clear = '\0'; + if (clear[-1] == '/') + clear[-1] = '\0'; + } + } + + is_namemap = 0; + } + + member_offset += AR_HDR_SIZE + eltsize; + if (member_offset % 2 != 0) + member_offset++; +#endif + } + } + + close (desc); + return 0; +} +#endif /* !VMS */ + +/* Return nonzero iff NAME matches MEM. + If TRUNCATED is nonzero, MEM may be truncated to + sizeof (struct ar_hdr.ar_name) - 1. */ + +int +ar_name_equal (char *name, char *mem, int truncated) +{ + char *p; + + p = strrchr (name, '/'); + if (p != 0) + name = p + 1; + +#ifndef VMS + if (truncated) + { +#ifdef AIAMAG + /* TRUNCATED should never be set on this system. */ + abort (); +#else + struct ar_hdr hdr; +#if !defined (__hpux) && !defined (cray) + return strneq (name, mem, sizeof(hdr.ar_name) - 1); +#else + return strneq (name, mem, sizeof(hdr.ar_name) - 2); +#endif /* !__hpux && !cray */ +#endif /* !AIAMAG */ + } +#endif /* !VMS */ + + return !strcmp (name, mem); +} + +#ifndef VMS +/* ARGSUSED */ +static long int +ar_member_pos (int desc, char *mem, int truncated, + long int hdrpos, long int datapos, long int size, + long int date, int uid, int gid, int mode, char *name) +{ + if (!ar_name_equal (name, mem, truncated)) + return 0; + return hdrpos; +} + +/* Set date of member MEMNAME in archive ARNAME to current time. + Returns 0 if successful, + -1 if file ARNAME does not exist, + -2 if not a valid archive, + -3 if other random system call error (including file read-only), + 1 if valid but member MEMNAME does not exist. */ + +int +ar_member_touch (char *arname, char *memname) +{ + register long int pos = ar_scan (arname, ar_member_pos, (long int) memname); + register int fd; + struct ar_hdr ar_hdr; + register int i; + struct stat statbuf; + + if (pos < 0) + return (int) pos; + if (!pos) + return 1; + + fd = open (arname, O_RDWR, 0666); + if (fd < 0) + return -3; + /* Read in this member's header */ + if (lseek (fd, pos, 0) < 0) + goto lose; + if (AR_HDR_SIZE != read (fd, (char *) &ar_hdr, AR_HDR_SIZE)) + goto lose; + /* Write back the header, thus touching the archive file. */ + if (lseek (fd, pos, 0) < 0) + goto lose; + if (AR_HDR_SIZE != write (fd, (char *) &ar_hdr, AR_HDR_SIZE)) + goto lose; + /* The file's mtime is the time we we want. */ + EINTRLOOP (i, fstat (fd, &statbuf)); + if (i < 0) + goto lose; +#if defined(ARFMAG) || defined(ARFZMAG) || defined(AIAMAG) || defined(WINDOWS32) + /* Advance member's time to that time */ + for (i = 0; i < sizeof ar_hdr.ar_date; i++) + ar_hdr.ar_date[i] = ' '; + sprintf (ar_hdr.ar_date, "%ld", (long int) statbuf.st_mtime); +#ifdef AIAMAG + ar_hdr.ar_date[strlen(ar_hdr.ar_date)] = ' '; +#endif +#else + ar_hdr.ar_date = statbuf.st_mtime; +#endif + /* Write back this member's header */ + if (lseek (fd, pos, 0) < 0) + goto lose; + if (AR_HDR_SIZE != write (fd, (char *) &ar_hdr, AR_HDR_SIZE)) + goto lose; + close (fd); + return 0; + + lose: + i = errno; + close (fd); + errno = i; + return -3; +} +#endif + +#ifdef TEST + +long int +describe_member (int desc, char *name, int truncated, + long int hdrpos, long int datapos, long int size, + long int date, int uid, int gid, int mode) +{ + extern char *ctime (); + + printf (_("Member `%s'%s: %ld bytes at %ld (%ld).\n"), + name, truncated ? _(" (name might be truncated)") : "", + size, hdrpos, datapos); + printf (_(" Date %s"), ctime (&date)); + printf (_(" uid = %d, gid = %d, mode = 0%o.\n"), uid, gid, mode); + + return 0; +} + +int +main (int argc, char **argv) +{ + ar_scan (argv[1], describe_member); + return 0; +} + +#endif /* TEST. */ +#endif /* NO_ARCHIVES. */ diff --git a/src/mkutil/make/build.template b/src/mkutil/make/build.template new file mode 100644 index 00000000..894140e2 --- /dev/null +++ b/src/mkutil/make/build.template @@ -0,0 +1,83 @@ +#!/bin/sh +# Shell script to build GNU Make in the absence of any `make' program. +# @configure_input@ + +# Copyright (C) 1993, 1994, 1997, 2003 Free Software Foundation, Inc. +# This file is part of GNU Make. +# +# GNU Make 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, or (at your option) +# any later version. +# +# GNU Make 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 GNU Make; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# See Makefile.in for comments describing these variables. + +srcdir='@srcdir@' +CC='@CC@' +CFLAGS='@CFLAGS@' +CPPFLAGS='@CPPFLAGS@' +LDFLAGS='@LDFLAGS@' +ALLOCA='@ALLOCA@' +LOADLIBES='@LIBS@' +eval extras=\'@LIBOBJS@\' +REMOTE='@REMOTE@' +GLOBLIB='@GLOBLIB@' +PATH_SEPARATOR='@PATH_SEPARATOR@' +OBJEXT='@OBJEXT@' +EXEEXT='@EXEEXT@' + +# Common prefix for machine-independent installed files. +prefix='@prefix@' +# Common prefix for machine-dependent installed files. +exec_prefix=`eval echo @exec_prefix@` +# Directory to find libraries in for `-lXXX'. +libdir=${exec_prefix}/lib +# Directory to search by default for included makefiles. +includedir=${prefix}/include + +localedir=${prefix}/share/locale +aliaspath=${localedir}${PATH_SEPARATOR}. + +defines="-DALIASPATH=\"${aliaspath}\" -DLOCALEDIR=\"${localedir}\" -DLIBDIR=\"${libdir}\" -DINCLUDEDIR=\"${includedir}\""' @DEFS@' + +# Exit as soon as any command fails. +set -e + +# These are all the objects we need to link together. +objs="%objs% remote-${REMOTE}.${OBJEXT} ${extras} ${ALLOCA}" + +if [ x"$GLOBLIB" != x ]; then + objs="$objs %globobjs%" + globinc=-I${srcdir}/glob +fi + +# Compile the source files into those objects. +for file in `echo ${objs} | sed 's/\.'${OBJEXT}'/.c/g'`; do + echo compiling ${file}... + $CC $defines $CPPFLAGS $CFLAGS \ + -c -I. -I${srcdir} ${globinc} ${srcdir}/$file +done + +# The object files were actually all put in the current directory. +# Remove the source directory names from the list. +srcobjs="$objs" +objs= +for obj in $srcobjs; do + objs="$objs `basename $obj`" +done + +# Link all the objects together. +echo linking make... +$CC $LDFLAGS $objs $LOADLIBES -o makenew${EXEEXT} +echo done +mv -f makenew${EXEEXT} make${EXEEXT} diff --git a/src/mkutil/make/build_w32.bat b/src/mkutil/make/build_w32.bat new file mode 100644 index 00000000..431bcef3 --- /dev/null +++ b/src/mkutil/make/build_w32.bat @@ -0,0 +1,142 @@ +set make=gnumake ++if not exist config.h copy config.h.W32 config.h +cd w32\subproc +echo "Creating the subproc library" +%ComSpec% /c build.bat +cd ..\.. +del link.dbg link.rel +del config.h +copy config.h.W32 config.h +echo off +echo "Creating GNU make for Windows 95/NT" +echo on +if not exist .\WinDebug\nul mkdir .\WinDebug +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D TIVOLI /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c variable.c +echo WinDebug\variable.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c rule.c +echo WinDebug\rule.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c remote-stub.c +echo WinDebug\remote-stub.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c commands.c +echo WinDebug\commands.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c file.c +echo WinDebug\file.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c getloadavg.c +echo WinDebug\getloadavg.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c default.c +echo WinDebug\default.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c signame.c +echo WinDebug\signame.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c expand.c +echo WinDebug\expand.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c dir.c +echo WinDebug\dir.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c main.c +echo WinDebug\main.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c getopt1.c +echo WinDebug\getopt1.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c job.c +echo WinDebug\job.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c read.c +echo WinDebug\read.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c version.c +echo WinDebug\version.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c getopt.c +echo WinDebug\getopt.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c arscan.c +echo WinDebug\arscan.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c hash.c +echo WinDebug\hash.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c remake.c +echo WinDebug\remake.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c misc.c +echo WinDebug\misc.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c ar.c +echo WinDebug\ar.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c function.c +echo WinDebug\function.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c vpath.c +echo WinDebug\vpath.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c implicit.c +echo WinDebug\implicit.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c .\w32\compat\dirent.c +echo WinDebug\dirent.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c .\glob\glob.c +echo WinDebug\glob.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c .\glob\fnmatch.c +echo WinDebug\fnmatch.obj >>link.dbg +cl.exe /nologo /MT /W3 /GX /Zi /YX /Od /I . /I glob /I w32/include /D _DEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinDebug/ /Fp.\WinDebug/%make%.pch /Fo.\WinDebug/ /Fd.\WinDebug/%make%.pdb /c .\w32\pathstuff.c +echo WinDebug\pathstuff.obj >>link.dbg +echo off +echo "Linking WinDebug/%make%.exe" +rem link.exe kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\windebug\subproc.lib /NOLOGO /SUBSYSTEM:console /INCREMENTAL:yes /PDB:.\WinDebug/%make%.pdb /DEBUG /MACHINE:I386 /OUT:.\WinDebug/%make%.exe .\WinDebug/variable.obj .\WinDebug/rule.obj .\WinDebug/remote-stub.obj .\WinDebug/commands.obj .\WinDebug/file.obj .\WinDebug/getloadavg.obj .\WinDebug/default.obj .\WinDebug/signame.obj .\WinDebug/expand.obj .\WinDebug/dir.obj .\WinDebug/main.obj .\WinDebug/getopt1.obj .\WinDebug/job.obj .\WinDebug/read.obj .\WinDebug/version.obj .\WinDebug/getopt.obj .\WinDebug/arscan.obj .\WinDebug/remake.obj .\WinDebug/hash.obj .\WinDebug/misc.obj .\WinDebug/ar.obj .\WinDebug/function.obj .\WinDebug/vpath.obj .\WinDebug/implicit.obj .\WinDebug/dirent.obj .\WinDebug/glob.obj .\WinDebug/fnmatch.obj .\WinDebug/pathstuff.obj +echo kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\windebug\subproc.lib >>link.dbg +link.exe /NOLOGO /SUBSYSTEM:console /INCREMENTAL:yes /PDB:.\WinDebug/%make%.pdb /DEBUG /MACHINE:I386 /OUT:.\WinDebug/%make%.exe @link.dbg +if not exist .\WinDebug/%make%.exe echo "WinDebug build failed" +if exist .\WinDebug/%make%.exe echo "WinDebug build succeeded!" +if not exist .\WinRel\nul mkdir .\WinRel +echo on +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /D TIVOLI /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c variable.c +echo WinRel\variable.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c rule.c +echo WinRel\rule.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c remote-stub.c +echo WinRel\remote-stub.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c commands.c +echo WinRel\commands.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c file.c +echo WinRel\file.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c getloadavg.c +echo WinRel\getloadavg.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c default.c +echo WinRel\default.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c signame.c +echo WinRel\signame.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c expand.c +echo WinRel\expand.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c dir.c +echo WinRel\dir.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c main.c +echo WinRel\main.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c getopt1.c +echo WinRel\getopt1.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c job.c +echo WinRel\job.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c read.c +echo WinRel\read.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c version.c +echo WinRel\version.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c getopt.c +echo WinRel\getopt.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c arscan.c +echo WinRel\arscan.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c remake.c +echo WinRel\remake.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c hash.c +echo WinRel\hash.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c misc.c +echo WinRel\misc.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c ar.c +echo WinRel\ar.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c function.c +echo WinRel\function.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c vpath.c +echo WinRel\vpath.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c implicit.c +echo WinRel\implicit.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c .\w32\compat\dirent.c +echo WinRel\dirent.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c .\glob\glob.c +echo WinRel\glob.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c .\glob\fnmatch.c +echo WinRel\fnmatch.obj >>link.rel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I . /I glob /I w32/include /D NDEBUG /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR.\WinRel/ /Fp.\WinRel/%make%.pch /Fo.\WinRel/ /c .\w32\pathstuff.c +echo WinRel\pathstuff.obj >>link.rel +echo off +echo "Linking WinRel/%make%.exe" +rem link.exe kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\winrel\subproc.lib /NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:.\WinRel/%make%.pdb /MACHINE:I386 /OUT:.\WinRel/%make%.exe .\WinRel/variable.obj .\WinRel/rule.obj .\WinRel/remote-stub.obj .\WinRel/commands.obj .\WinRel/file.obj .\WinRel/getloadavg.obj .\WinRel/default.obj .\WinRel/signame.obj .\WinRel/expand.obj .\WinRel/dir.obj .\WinRel/main.obj .\WinRel/getopt1.obj .\WinRel/job.obj .\WinRel/read.obj .\WinRel/version.obj .\WinRel/getopt.obj .\WinRel/arscan.obj .\WinRel/remake.obj .\WinRel/misc.obj .\WinRel/hash.obj .\WinRel/ar.obj .\WinRel/function.obj .\WinRel/vpath.obj .\WinRel/implicit.obj .\WinRel/dirent.obj .\WinRel/glob.obj .\WinRel/fnmatch.obj .\WinRel/pathstuff.obj +echo kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib w32\subproc\winrel\subproc.lib >>link.rel +link.exe /NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:.\WinRel/%make%.pdb /MACHINE:I386 /OUT:.\WinRel/%make%.exe @link.rel +if not exist .\WinRel/%make%.exe echo "WinRel build failed" +if exist .\WinRel/%make%.exe echo "WinRel build succeeded!" +echo on diff --git a/src/mkutil/make/commands.c b/src/mkutil/make/commands.c new file mode 100644 index 00000000..623b9b53 --- /dev/null +++ b/src/mkutil/make/commands.c @@ -0,0 +1,587 @@ +/* Command processing for GNU Make. +Copyright (C) 1988,89,91,92,93,94,95,96,97 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "dep.h" +#include "filedef.h" +#include "variable.h" +#include "job.h" +#include "commands.h" + +#if VMS +# define FILE_LIST_SEPARATOR ',' +#else +# define FILE_LIST_SEPARATOR ' ' +#endif + +extern int remote_kill PARAMS ((int id, int sig)); + +#ifndef HAVE_UNISTD_H +extern int getpid (); +#endif + +/* Set FILE's automatic variables up. */ + +static void +set_file_variables (struct file *file) +{ + char *at, *percent, *star, *less; + +#ifndef NO_ARCHIVES + /* If the target is an archive member `lib(member)', + then $@ is `lib' and $% is `member'. */ + + if (ar_name (file->name)) + { + unsigned int len; + char *p; + + p = strchr (file->name, '('); + at = (char *) alloca (p - file->name + 1); + bcopy (file->name, at, p - file->name); + at[p - file->name] = '\0'; + len = strlen (p + 1); + percent = (char *) alloca (len); + bcopy (p + 1, percent, len - 1); + percent[len - 1] = '\0'; + } + else +#endif /* NO_ARCHIVES. */ + { + at = file->name; + percent = ""; + } + + /* $* is the stem from an implicit or static pattern rule. */ + if (file->stem == 0) + { + /* In Unix make, $* is set to the target name with + any suffix in the .SUFFIXES list stripped off for + explicit rules. We store this in the `stem' member. */ + register struct dep *d; + char *name; + unsigned int len; + +#ifndef NO_ARCHIVES + if (ar_name (file->name)) + { + name = strchr (file->name, '(') + 1; + len = strlen (name) - 1; + } + else +#endif + { + name = file->name; + len = strlen (name); + } + + for (d = enter_file (".SUFFIXES")->deps; d != 0; d = d->next) + { + unsigned int slen = strlen (dep_name (d)); + if (len > slen && strneq (dep_name (d), name + (len - slen), slen)) + { + file->stem = savestring (name, len - slen); + break; + } + } + if (d == 0) + file->stem = ""; + } + star = file->stem; + + /* $< is the first dependency. */ + less = file->deps != 0 ? dep_name (file->deps) : ""; + + if (file->cmds == default_file->cmds) + /* This file got its commands from .DEFAULT. + In this case $< is the same as $@. */ + less = at; + +#define DEFINE_VARIABLE(name, len, value) \ + (void) define_variable_for_file (name,len,value,o_automatic,0,file) + + /* Define the variables. */ + + DEFINE_VARIABLE ("<", 1, less); + DEFINE_VARIABLE ("*", 1, star); + DEFINE_VARIABLE ("@", 1, at); + DEFINE_VARIABLE ("%", 1, percent); + + /* Compute the values for $^, $+, $?, and $|. */ + + { + static char *plus_value=0, *bar_value=0, *qmark_value=0; + static int qmark_max=0, plus_max=0, bar_max=0; + + unsigned int qmark_len, plus_len, bar_len; + char *cp; + char *caret_value; + char *qp; + char *bp; + struct dep *d; + unsigned int len; + + /* Compute first the value for $+, which is supposed to contain + duplicate dependencies as they were listed in the makefile. */ + + plus_len = 0; + for (d = file->deps; d != 0; d = d->next) + if (! d->ignore_mtime) + plus_len += strlen (dep_name (d)) + 1; + if (plus_len == 0) + plus_len++; + + if (plus_len > plus_max) + plus_value = (char *) xmalloc (plus_max = plus_len); + cp = plus_value; + + qmark_len = plus_len + 1; /* Will be this or less. */ + for (d = file->deps; d != 0; d = d->next) + if (! d->ignore_mtime) + { + char *c = dep_name (d); + +#ifndef NO_ARCHIVES + if (ar_name (c)) + { + c = strchr (c, '(') + 1; + len = strlen (c) - 1; + } + else +#endif + len = strlen (c); + + bcopy (c, cp, len); + cp += len; + *cp++ = FILE_LIST_SEPARATOR; + if (! d->changed) + qmark_len -= len + 1; /* Don't space in $? for this one. */ + } + + /* Kill the last space and define the variable. */ + + cp[cp > plus_value ? -1 : 0] = '\0'; + DEFINE_VARIABLE ("+", 1, plus_value); + + /* Make sure that no dependencies are repeated. This does not + really matter for the purpose of updating targets, but it + might make some names be listed twice for $^ and $?. */ + + uniquize_deps (file->deps); + + bar_len = 0; + for (d = file->deps; d != 0; d = d->next) + if (d->ignore_mtime) + bar_len += strlen (dep_name (d)) + 1; + if (bar_len == 0) + bar_len++; + + /* Compute the values for $^, $?, and $|. */ + + cp = caret_value = plus_value; /* Reuse the buffer; it's big enough. */ + + if (qmark_len > qmark_max) + qmark_value = (char *) xmalloc (qmark_max = qmark_len); + qp = qmark_value; + + if (bar_len > bar_max) + bar_value = (char *) xmalloc (bar_max = bar_len); + bp = bar_value; + + for (d = file->deps; d != 0; d = d->next) + { + char *c = dep_name (d); + +#ifndef NO_ARCHIVES + if (ar_name (c)) + { + c = strchr (c, '(') + 1; + len = strlen (c) - 1; + } + else +#endif + len = strlen (c); + + if (d->ignore_mtime) + { + bcopy (c, bp, len); + bp += len; + *bp++ = FILE_LIST_SEPARATOR; + } + else + { + bcopy (c, cp, len); + cp += len; + *cp++ = FILE_LIST_SEPARATOR; + if (d->changed) + { + bcopy (c, qp, len); + qp += len; + *qp++ = FILE_LIST_SEPARATOR; + } + } + } + + /* Kill the last spaces and define the variables. */ + + cp[cp > caret_value ? -1 : 0] = '\0'; + DEFINE_VARIABLE ("^", 1, caret_value); + + qp[qp > qmark_value ? -1 : 0] = '\0'; + DEFINE_VARIABLE ("?", 1, qmark_value); + + bp[bp > bar_value ? -1 : 0] = '\0'; + DEFINE_VARIABLE ("|", 1, bar_value); + } + +#undef DEFINE_VARIABLE +} + +/* Chop CMDS up into individual command lines if necessary. + Also set the `lines_flags' and `any_recurse' members. */ + +void +chop_commands (struct commands *cmds) +{ + register char *p; + unsigned int nlines, idx; + char **lines; + + /* If we don't have any commands, + or we already parsed them, never mind. */ + + if (!cmds || cmds->command_lines != 0) + return; + + /* Chop CMDS->commands up into lines in CMDS->command_lines. + Also set the corresponding CMDS->lines_flags elements, + and the CMDS->any_recurse flag. */ + + nlines = 5; + lines = (char **) xmalloc (5 * sizeof (char *)); + idx = 0; + p = cmds->commands; + while (*p != '\0') + { + char *end = p; + find_end:; + end = strchr (end, '\n'); + if (end == 0) + end = p + strlen (p); + else if (end > p && end[-1] == '\\') + { + int backslash = 1; + register char *b; + for (b = end - 2; b >= p && *b == '\\'; --b) + backslash = !backslash; + if (backslash) + { + ++end; + goto find_end; + } + } + + if (idx == nlines) + { + nlines += 2; + lines = (char **) xrealloc ((char *) lines, + nlines * sizeof (char *)); + } + lines[idx++] = savestring (p, end - p); + p = end; + if (*p != '\0') + ++p; + } + + if (idx != nlines) + { + nlines = idx; + lines = (char **) xrealloc ((char *) lines, + nlines * sizeof (char *)); + } + + cmds->ncommand_lines = nlines; + cmds->command_lines = lines; + + cmds->any_recurse = 0; + cmds->lines_flags = (char *) xmalloc (nlines); + for (idx = 0; idx < nlines; ++idx) + { + int flags = 0; + + for (p = lines[idx]; + isblank ((unsigned char)*p) || *p == '-' || *p == '@' || *p == '+'; + ++p) + switch (*p) + { + case '+': + flags |= COMMANDS_RECURSE; + break; + case '@': + flags |= COMMANDS_SILENT; + break; + case '-': + flags |= COMMANDS_NOERROR; + break; + } + if (!(flags & COMMANDS_RECURSE)) + { + unsigned int len = strlen (p); + if (sindex (p, len, "$(MAKE)", 7) != 0 + || sindex (p, len, "${MAKE}", 7) != 0) + flags |= COMMANDS_RECURSE; + } + + cmds->lines_flags[idx] = flags; + cmds->any_recurse |= flags & COMMANDS_RECURSE; + } +} + +/* Execute the commands to remake FILE. If they are currently executing, + return or have already finished executing, just return. Otherwise, + fork off a child process to run the first command line in the sequence. */ + +void +execute_file_commands (struct file *file) +{ + register char *p; + + /* Don't go through all the preparations if + the commands are nothing but whitespace. */ + + for (p = file->cmds->commands; *p != '\0'; ++p) + if (!isspace ((unsigned char)*p) && *p != '-' && *p != '@') + break; + if (*p == '\0') + { + /* If there are no commands, assume everything worked. */ + set_command_state (file, cs_running); + file->update_status = 0; + notice_finished_file (file); + return; + } + + /* First set the automatic variables according to this file. */ + + initialize_file_variables (file, 0); + + set_file_variables (file); + + /* Start the commands running. */ + new_job (file); +} + +/* This is set while we are inside fatal_error_signal, + so things can avoid nonreentrant operations. */ + +int handling_fatal_signal = 0; + +/* Handle fatal signals. */ + +RETSIGTYPE +fatal_error_signal (int sig) +{ +#ifdef __MSDOS__ + extern int dos_status, dos_command_running; + + if (dos_command_running) + { + /* That was the child who got the signal, not us. */ + dos_status |= (sig << 8); + return; + } + remove_intermediates (1); + exit (EXIT_FAILURE); +#else /* not __MSDOS__ */ +#ifdef _AMIGA + remove_intermediates (1); + if (sig == SIGINT) + fputs (_("*** Break.\n"), stderr); + + exit (10); +#else /* not Amiga */ + handling_fatal_signal = 1; + + /* Set the handling for this signal to the default. + It is blocked now while we run this handler. */ + signal (sig, SIG_DFL); + + /* A termination signal won't be sent to the entire + process group, but it means we want to kill the children. */ + + if (sig == SIGTERM) + { + register struct child *c; + for (c = children; c != 0; c = c->next) + if (!c->remote) + (void) kill (c->pid, SIGTERM); + } + + /* If we got a signal that means the user + wanted to kill make, remove pending targets. */ + + if (sig == SIGTERM || sig == SIGINT +#ifdef SIGHUP + || sig == SIGHUP +#endif +#ifdef SIGQUIT + || sig == SIGQUIT +#endif + ) + { + register struct child *c; + + /* Remote children won't automatically get signals sent + to the process group, so we must send them. */ + for (c = children; c != 0; c = c->next) + if (c->remote) + (void) remote_kill (c->pid, sig); + + for (c = children; c != 0; c = c->next) + delete_child_targets (c); + + /* Clean up the children. We don't just use the call below because + we don't want to print the "Waiting for children" message. */ + while (job_slots_used > 0) + reap_children (1, 0); + } + else + /* Wait for our children to die. */ + while (job_slots_used > 0) + reap_children (1, 1); + + /* Delete any non-precious intermediate files that were made. */ + + remove_intermediates (1); + +#ifdef SIGQUIT + if (sig == SIGQUIT) + /* We don't want to send ourselves SIGQUIT, because it will + cause a core dump. Just exit instead. */ + exit (EXIT_FAILURE); +#endif + + /* Signal the same code; this time it will really be fatal. The signal + will be unblocked when we return and arrive then to kill us. */ + if (kill (getpid (), sig) < 0) + pfatal_with_name ("kill"); +#endif /* not Amiga */ +#endif /* not __MSDOS__ */ +} + +/* Delete FILE unless it's precious or not actually a file (phony), + and it has changed on disk since we last stat'd it. */ + +static void +delete_target (struct file *file, char *on_behalf_of) +{ + struct stat st; + int e; + + if (file->precious || file->phony) + return; + +#ifndef NO_ARCHIVES + if (ar_name (file->name)) + { + time_t file_date = (file->last_mtime == NONEXISTENT_MTIME + ? (time_t) -1 + : (time_t) FILE_TIMESTAMP_S (file->last_mtime)); + if (ar_member_date (file->name) != file_date) + { + if (on_behalf_of) + error (NILF, _("*** [%s] Archive member `%s' may be bogus; not deleted"), + on_behalf_of, file->name); + else + error (NILF, _("*** Archive member `%s' may be bogus; not deleted"), + file->name); + } + return; + } +#endif + + EINTRLOOP (e, stat (file->name, &st)); + if (e == 0 + && S_ISREG (st.st_mode) + && FILE_TIMESTAMP_STAT_MODTIME (file->name, st) != file->last_mtime) + { + if (on_behalf_of) + error (NILF, _("*** [%s] Deleting file `%s'"), on_behalf_of, file->name); + else + error (NILF, _("*** Deleting file `%s'"), file->name); + if (unlink (file->name) < 0 + && errno != ENOENT) /* It disappeared; so what. */ + perror_with_name ("unlink: ", file->name); + } +} + + +/* Delete all non-precious targets of CHILD unless they were already deleted. + Set the flag in CHILD to say they've been deleted. */ + +void +delete_child_targets (struct child *child) +{ + struct dep *d; + + if (child->deleted) + return; + + /* Delete the target file if it changed. */ + delete_target (child->file, (char *) 0); + + /* Also remove any non-precious targets listed in the `also_make' member. */ + for (d = child->file->also_make; d != 0; d = d->next) + delete_target (d->file, child->file->name); + + child->deleted = 1; +} + +/* Print out the commands in CMDS. */ + +void +print_commands (struct commands *cmds) +{ + register char *s; + + fputs (_("# commands to execute"), stdout); + + if (cmds->fileinfo.filenm == 0) + puts (_(" (built-in):")); + else + printf (_(" (from `%s', line %lu):\n"), + cmds->fileinfo.filenm, cmds->fileinfo.lineno); + + s = cmds->commands; + while (*s != '\0') + { + char *end; + + while (isspace ((unsigned char)*s)) + ++s; + + end = strchr (s, '\n'); + if (end == 0) + end = s + strlen (s); + + printf ("\t%.*s\n", (int) (end - s), s); + + s = end; + } +} diff --git a/src/mkutil/make/commands.h b/src/mkutil/make/commands.h new file mode 100644 index 00000000..edec9103 --- /dev/null +++ b/src/mkutil/make/commands.h @@ -0,0 +1,42 @@ +/* Definition of data structures describing shell commands for GNU Make. +Copyright (C) 1988, 1989, 1991, 1993 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Structure that gives the commands to make a file + and information about where these commands came from. */ + +struct commands + { + struct floc fileinfo; /* Where commands were defined. */ + char *commands; /* Commands text. */ + unsigned int ncommand_lines;/* Number of command lines. */ + char **command_lines; /* Commands chopped up into lines. */ + char *lines_flags; /* One set of flag bits for each line. */ + int any_recurse; /* Nonzero if any `lines_recurse' elt has */ + /* the COMMANDS_RECURSE bit set. */ + }; + +/* Bits in `lines_flags'. */ +#define COMMANDS_RECURSE 1 /* Recurses: + or $(MAKE). */ +#define COMMANDS_SILENT 2 /* Silent: @. */ +#define COMMANDS_NOERROR 4 /* No errors: -. */ + +extern void execute_file_commands PARAMS ((struct file *file)); +extern void print_commands PARAMS ((struct commands *cmds)); +extern void delete_child_targets PARAMS ((struct child *child)); +extern void chop_commands PARAMS ((struct commands *cmds)); diff --git a/src/mkutil/make/config.ami.template b/src/mkutil/make/config.ami.template new file mode 100644 index 00000000..c0548b24 --- /dev/null +++ b/src/mkutil/make/config.ami.template @@ -0,0 +1,317 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif + +/* Define if using alloca.c. */ +#define C_ALLOCA + +/* Define if the closedir function returns void instead of int. */ +/* #undef CLOSEDIR_VOID */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define for DGUX with . */ +/* #undef DGUX */ + +/* Define if the `getloadavg' function needs to be run setuid or setgid. */ +/* #undef GETLOADAVG_PRIVILEGED */ + +/* Define to `unsigned long' or `unsigned long long' + if doesn't define. */ +#define uintmax_t unsigned long + +/* Define to `int' if doesn't define. */ +#define gid_t int + +/* Define if you have alloca, as a function or macro. */ +/* #undef HAVE_ALLOCA */ + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you don't have vprintf but do have _doprnt. */ +/* #undef HAVE_DOPRNT */ + +/* Define if your system has a working fnmatch function. */ +/* #undef HAVE_FNMATCH */ + +/* Define if your system has its own `getloadavg' function. */ +/* #undef HAVE_GETLOADAVG */ + +/* Define if you have the getmntent function. */ +/* #undef HAVE_GETMNTENT */ + +/* Define if the `long double' type works. */ +/* #undef HAVE_LONG_DOUBLE */ + +/* Define if you support file names longer than 14 characters. */ +#define HAVE_LONG_FILE_NAMES 1 + +/* Define if you have a working `mmap' system call. */ +/* #undef HAVE_MMAP */ + +/* Define if system calls automatically restart after interruption + by a signal. */ +/* #undef HAVE_RESTARTABLE_SYSCALLS */ + +/* Define if your struct stat has st_blksize. */ +/* #undef HAVE_ST_BLKSIZE */ + +/* Define if your struct stat has st_blocks. */ +/* #undef HAVE_ST_BLOCKS */ + +/* Define if you have the strcoll function and it is properly defined. */ +#define HAVE_STRCOLL 1 + +/* Define if your struct stat has st_rdev. */ +#define HAVE_ST_RDEV 1 + +/* Define if you have the strftime function. */ +#define HAVE_STRFTIME 1 + +/* Define if you have that is POSIX.1 compatible. */ +/* #undef HAVE_SYS_WAIT_H */ + +/* Define if your struct tm has tm_zone. */ +/* #undef HAVE_TM_ZONE */ + +/* Define if you don't have tm_zone but do have the external array + tzname. */ +#define HAVE_TZNAME 1 + +/* Define if you have . */ +#define HAVE_UNISTD_H 1 + +/* Define if utime(file, NULL) sets file's timestamp to the present. */ +/* #undef HAVE_UTIME_NULL */ + +/* Define if you have . */ +/* #undef HAVE_VFORK_H */ + +/* Define if you have the vprintf function. */ +#define HAVE_VPRINTF 1 + +/* Define if you have the wait3 system call. */ +/* #undef HAVE_WAIT3 */ + +/* Define if on MINIX. */ +/* #undef _MINIX */ + +/* Define if your struct nlist has an n_un member. */ +/* #undef NLIST_NAME_UNION */ + +/* Define if you have . */ +/* #undef NLIST_STRUCT */ + +/* Define if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Define to `int' if doesn't define. */ +#define pid_t int + +/* Define if the system does not provide POSIX.1 features except + with this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define if you need to in order for stat and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +/* Define if the setvbuf function takes the buffering type as its second + argument and the buffer pointer as the third, as on System V + before release 3. */ +/* #undef SETVBUF_REVERSED */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +#define STACK_DIRECTION -1 + +/* Define if the `S_IS*' macros in do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS + +/* Define on System V Release 4. */ +/* #undef SVR4 */ + +/* Define if `sys_siglist' is declared by . */ +/* #undef SYS_SIGLIST_DECLARED */ + +/* Define to `int' if doesn't define. */ +#define uid_t int + +/* Define for Encore UMAX. */ +/* #undef UMAX */ + +/* Define for Encore UMAX 4.3 that has + instead of . */ +/* #undef UMAX4_3 */ + +/* Define vfork as fork if vfork does not work. */ +/* #undef vfork */ + +/* Name of this package (needed by automake) */ +#define PACKAGE "%PACKAGE%" + +/* Version of this package (needed by automake) */ +#define VERSION "%VERSION%" + +/* Define to the name of the SCCS `get' command. */ +#define SCCS_GET "get" + +/* Define this if the SCCS `get' command understands the `-G' option. */ +/* #undef SCCS_GET_MINUS_G */ + +/* Define this to enable job server support in GNU make. */ +/* #undef MAKE_JOBSERVER */ + +/* Define to be the nanoseconds member of struct stat's st_mtim, + if it exists. */ +/* #undef ST_MTIM_NSEC */ + +/* Define this if the C library defines the variable `sys_siglist'. */ +/* #undef HAVE_SYS_SIGLIST */ + +/* Define this if the C library defines the variable `_sys_siglist'. */ +/* #undef HAVE__SYS_SIGLIST */ + +/* Define this if you have the `union wait' type in . */ +/* #undef HAVE_UNION_WAIT */ + +/* Define if you have the dup2 function. */ +/* #undef HAVE_DUP2 */ + +/* Define if you have the getcwd function. */ +#define HAVE_GETCWD 1 + +/* Define if you have the getgroups function. */ +/* #undef HAVE_GETGROUPS */ + +/* Define if you have the gethostbyname function. */ +/* #undef HAVE_GETHOSTBYNAME */ + +/* Define if you have the gethostname function. */ +/* #undef HAVE_GETHOSTNAME */ + +/* Define if you have the memmove function. */ +#define HAVE_MEMMOVE 1 + +/* Define if you have the mktemp function. */ +#define HAVE_MKTEMP 1 + +/* Define if you have the psignal function. */ +/* #undef HAVE_PSIGNAL */ + +/* Define if you have the pstat_getdynamic function. */ +/* #undef HAVE_PSTAT_GETDYNAMIC */ + +/* Define if you have the setegid function. */ +/* #undef HAVE_SETEGID */ + +/* Define if you have the seteuid function. */ +/* #undef HAVE_SETEUID */ + +/* Define if you have the setlinebuf function. */ +/* #undef HAVE_SETLINEBUF */ + +/* Define if you have the setregid function. */ +/* #undef HAVE_SETREGID */ + +/* Define if you have the setreuid function. */ +/* #undef HAVE_SETREUID */ + +/* Define if you have the sigsetmask function. */ +/* #undef HAVE_SIGSETMASK */ + +/* Define if you have the socket function. */ +/* #undef HAVE_SOCKET */ + +/* Define if you have the strcasecmp function. */ +/* #undef HAVE_STRCASECMP */ + +/* Define if you have the strerror function. */ +#define HAVE_STRERROR 1 + +/* Define if you have the strsignal function. */ +/* #undef HAVE_STRSIGNAL */ + +/* Define if you have the wait3 function. */ +/* #undef HAVE_WAIT3 */ + +/* Define if you have the waitpid function. */ +/* #undef HAVE_WAITPID */ + +/* Define if you have the header file. */ +#define HAVE_DIRENT_H 1 + +/* Define if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_MACH_MACH_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_MEMORY_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_NDIR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_STDLIB_H */ + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_DIR_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_PARAM_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_TIMEB_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_WAIT_H */ + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the dgc library (-ldgc). */ +/* #undef HAVE_LIBDGC */ + +/* Define if you have the kstat library (-lkstat). */ +/* #undef HAVE_LIBKSTAT */ + +/* Define if you have the sun library (-lsun). */ +/* #undef HAVE_LIBSUN */ + +/* Define for Case Insensitve behavior */ +#define HAVE_CASE_INSENSITIVE_FS + +/* Build host information. */ +#define MAKE_HOST "Amiga" diff --git a/src/mkutil/make/config.h b/src/mkutil/make/config.h new file mode 100644 index 00000000..ce8cb144 --- /dev/null +++ b/src/mkutil/make/config.h @@ -0,0 +1,399 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif + +/* Define if using alloca.c. */ +/* #undef C_ALLOCA */ + +/* Define if the closedir function returns void instead of int. */ +/* #undef CLOSEDIR_VOID */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define for DGUX with . */ +/* #undef DGUX */ + +/* Define if the `getloadavg' function needs to be run setuid or setgid. */ +/* #undef GETLOADAVG_PRIVILEGED */ + +/* Define to `unsigned long' or `unsigned long long' + if doesn't define. */ +#define uintmax_t unsigned long + +/* Define to `int' if doesn't define. */ +#undef gid_t +#define gid_t int + +/* Define if you have alloca, as a function or macro. */ +#undef HAVE_ALLOCA +#define HAVE_ALLOCA 1 + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you don't have vprintf but do have _doprnt. */ +/* #undef HAVE_DOPRNT */ + +/* Define if your system has a working fnmatch function. */ +/* #undef HAVE_FNMATCH */ + +/* Define if your system has its own `getloadavg' function. */ +/* #undef HAVE_GETLOADAVG */ + +/* Define if you have the getmntent function. */ +/* #undef HAVE_GETMNTENT */ + +/* Define if the `long double' type works. */ +/* #undef HAVE_LONG_DOUBLE */ + +/* Define if you support file names longer than 14 characters. */ +#undef HAVE_LONG_FILE_NAMES +#define HAVE_LONG_FILE_NAMES 1 + +/* Define if you have a working `mmap' system call. */ +/* #undef HAVE_MMAP */ + +/* Define if system calls automatically restart after interruption + by a signal. */ +/* #undef HAVE_RESTARTABLE_SYSCALLS */ + +/* Define if your struct stat has st_blksize. */ +/* #undef HAVE_ST_BLKSIZE */ + +/* Define if your struct stat has st_blocks. */ +/* #undef HAVE_ST_BLOCKS */ + +/* Define if you have the strcoll function and it is properly defined. */ +#undef HAVE_STRCOLL +#define HAVE_STRCOLL 1 + +/* Define if your struct stat has st_rdev. */ +#undef HAVE_ST_RDEV +#define HAVE_ST_RDEV 1 + +/* Define if you have the strftime function. */ +#undef HAVE_STRFTIME +#define HAVE_STRFTIME 1 + +/* Define if you have that is POSIX.1 compatible. */ +/* #undef HAVE_SYS_WAIT_H */ + +/* Define if your struct tm has tm_zone. */ +/* #undef HAVE_TM_ZONE */ + +/* Define if you don't have tm_zone but do have the external array + tzname. */ +#undef HAVE_TZNAME +#define HAVE_TZNAME 1 + +/* Define if you have . */ +/* #undef HAVE_UNISTD_H */ + +/* Define if utime(file, NULL) sets file's timestamp to the present. */ +#undef HAVE_UTIME_NULL +#define HAVE_UTIME_NULL 1 + +/* Define if you have . */ +/* #undef HAVE_VFORK_H */ + +/* Define if you have the vprintf function. */ +#undef HAVE_VPRINTF +#define HAVE_VPRINTF 1 + +/* Define if you have the wait3 system call. */ +/* #undef HAVE_WAIT3 */ + +/* Define if on MINIX. */ +/* #undef _MINIX */ + +/* Define if your struct nlist has an n_un member. */ +/* #undef NLIST_NAME_UNION */ + +/* Define if you have . */ +/* #undef NLIST_STRUCT */ + +/* Define if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Define to `int' if doesn't define. */ +#undef pid_t +#define pid_t int + +/* Define if the system does not provide POSIX.1 features except + with this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define if you need to in order for stat and other things to work. */ +#undef _POSIX_SOURCE +#define _POSIX_SOURCE 1 + +/* Define as the return type of signal handlers (int or void). */ +#undef RETSIGTYPE +#define RETSIGTYPE void + +/* Define if the setvbuf function takes the buffering type as its second + argument and the buffer pointer as the third, as on System V + before release 3. */ +/* #undef SETVBUF_REVERSED */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +/* #undef STACK_DIRECTION */ + +/* Define if the `S_IS*' macros in do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS +#define STDC_HEADERS 1 + +/* Define on System V Release 4. */ +/* #undef SVR4 */ + +/* Define if `sys_siglist' is declared by . */ +/* #undef SYS_SIGLIST_DECLARED */ + +/* Define to `int' if doesn't define. */ +#undef uid_t +#define uid_t int + +/* Define for Encore UMAX. */ +/* #undef UMAX */ + +/* Define for Encore UMAX 4.3 that has + instead of . */ +/* #undef UMAX4_3 */ + +/* Define vfork as fork if vfork does not work. */ +/* #undef vfork */ + +/* Name of this package (needed by automake) */ +#define PACKAGE "make" + +/* Version of this package (needed by automake) */ +#define VERSION "3.81a2" + +/* Define to the name of the SCCS `get' command. */ +#undef SCCS_GET +#define SCCS_GET "echo no sccs get" + +/* Define to 1 if NLS is requested. */ +/* #undef ENABLE_NLS */ + +/* Define as 1 if you have dcgettext. */ +/* #undef HAVE_DCGETTEXT */ + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +/* #undef HAVE_GETTEXT */ + +/* Define if your locale.h file contains LC_MESSAGES. */ +/* #undef HAVE_LC_MESSAGES */ + +/* Define to the installation directory for locales. */ +#define LOCALEDIR "" + +/* Define this if the SCCS `get' command understands the `-G' option. */ +/* #undef SCCS_GET_MINUS_G */ + +/* Define this to enable job server support in GNU make. */ +/* #undef MAKE_JOBSERVER */ + +/* Define to be the nanoseconds member of struct stat's st_mtim, + if it exists. */ +/* #undef ST_MTIM_NSEC */ + +/* Define this if the C library defines the variable `sys_siglist'. */ +/* #undef HAVE_SYS_SIGLIST */ + +/* Define this if the C library defines the variable `_sys_siglist'. */ +/* #undef HAVE__SYS_SIGLIST */ + +/* Define this if you have the `union wait' type in . */ +/* #undef HAVE_UNION_WAIT */ + +/* Define if you have the dup2 function. */ +#undef HAVE_DUP2 +#define HAVE_DUP2 1 + +/* Define if you have the getcwd function. */ +#undef HAVE_GETCWD +#define HAVE_GETCWD 1 + +/* Define if you have the getgroups function. */ +/* #undef HAVE_GETGROUPS */ + +/* Define if you have the gethostbyname function. */ +/* #undef HAVE_GETHOSTBYNAME */ + +/* Define if you have the gethostname function. */ +/* #undef HAVE_GETHOSTNAME */ + +/* Define if you have the getloadavg function. */ +/* #undef HAVE_GETLOADAVG */ + +/* Define if you have the memmove function. */ +#undef HAVE_MEMMOVE +#define HAVE_MEMMOVE 1 + +/* Define if you have the mktemp function. */ +#undef HAVE_MKTEMP +#define HAVE_MKTEMP 1 + +/* Define if you have the psignal function. */ +/* #undef HAVE_PSIGNAL */ + +/* Define if you have the pstat_getdynamic function. */ +/* #undef HAVE_PSTAT_GETDYNAMIC */ + +/* Define if you have the setegid function. */ +/* #undef HAVE_SETEGID */ + +/* Define if you have the seteuid function. */ +/* #undef HAVE_SETEUID */ + +/* Define if you have the setlinebuf function. */ +/* #undef HAVE_SETLINEBUF */ + +/* Define if you have the setregid function. */ +/* #undef HAVE_SETREGID */ + +/* Define if you have the setreuid function. */ +/* #undef HAVE_SETREUID */ + +/* Define if you have the sigsetmask function. */ +/* #undef HAVE_SIGSETMASK */ + +/* Define if you have the socket function. */ +/* #undef HAVE_SOCKET */ + +/* Define if you have the strcasecmp function. */ +/* #undef HAVE_STRCASECMP */ + +/* Define if you have the strerror function. */ +#undef HAVE_STRERROR +#define HAVE_STRERROR 1 + +/* Define if you have the strsignal function. */ +/* #undef HAVE_STRSIGNAL */ + +/* Define if you have the wait3 function. */ +/* #undef HAVE_WAIT3 */ + +/* Define if you have the waitpid function. */ +/* #undef HAVE_WAITPID */ + +/* Define if you have the header file. */ +#undef HAVE_DIRENT_H +#define HAVE_DIRENT_H 1 + +/* Define if you have the header file. */ +#undef HAVE_FCNTL_H +#define HAVE_FCNTL_H 1 + +/* Define if you have the header file. */ +#undef HAVE_LIMITS_H +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_MACH_MACH_H */ + +/* Define if you have the header file. */ +#undef HAVE_MEMORY_H +#define HAVE_MEMORY_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_NDIR_H */ + +/* Define if you have the header file. */ +#undef HAVE_STRING_H +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_DIR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_PARAM_H */ + +/* Define if you have the header file. */ +#undef HAVE_SYS_TIMEB_H +#define HAVE_SYS_TIMEB_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_WAIT_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_UNISTD_H */ + +/* Define if you have the dgc library (-ldgc). */ +/* #undef HAVE_LIBDGC */ + +/* Define if you have the kstat library (-lkstat). */ +/* #undef HAVE_LIBKSTAT */ + +/* Define if you have the sun library (-lsun). */ +/* #undef HAVE_LIBSUN */ + +/* Use high resolution file timestamps if nonzero. */ +#define FILE_TIMESTAMP_HI_RES 0 + +/* Build host information. */ +#define MAKE_HOST "Windows32" + +/* Grok DOS paths (drive specs and backslash path element separators) */ +#define HAVE_DOS_PATHS + +/* + * Refer to README.W32 for info on the following settings + */ + +/* + * If you have a shell that does not grok 'sh -c quoted-command-line' + * correctly, you need this setting. Please see below for specific + * shell support. + */ +#undef BATCH_MODE_ONLY_SHELL +#define BATCH_MODE_ONLY_SHELL 1 + +/* + * Define if you have the Cygnus "Cygwin" GNU Windows32 tool set. + * Do NOT define BATCH_MODE_ONLY_SHELL if you define HAVE_CYGWIN_SHELL + */ +#undef HAVE_CYGWIN_SHELL + +/* + * Define if you have the MKS tool set or shell. Do NOT define + * BATCH_MODE_ONLY_SHELL if you define HAVE_MKS_SHELL + */ +#undef HAVE_MKS_SHELL + +/* + * Enforce the mutual exclusivity restriction. + */ +#ifdef HAVE_MKS_SHELL +#undef BATCH_MODE_ONLY_SHELL +#endif + +#ifdef HAVE_CYGWIN_SHELL +#undef BATCH_MODE_ONLY_SHELL +#endif + +/* Define if you prefer Case Insensitive behavior */ +#undef HAVE_CASE_INSENSITIVE_FS diff --git a/src/mkutil/make/config.h-vms.template b/src/mkutil/make/config.h-vms.template new file mode 100644 index 00000000..7d7d9b0c --- /dev/null +++ b/src/mkutil/make/config.h-vms.template @@ -0,0 +1,403 @@ +/* config.h-vms. Generated by hand by Klaus Kämpf */ +/* config.h. Generated automatically by configure. */ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif + +/* Define to 1 if NLS is requested. */ +/* #undef ENABLE_NLS */ + +/* Define as 1 if you have dcgettext. */ +/* #undef HAVE_DCGETTEXT */ + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +/* #undef HAVE_GETTEXT */ + +/* Define if your locale.h file contains LC_MESSAGES. */ +/* #undef HAVE_LC_MESSAGES */ + +/* Define to the installation directory for locales. */ +#define LOCALEDIR "" + +/* Define as 1 if you have the stpcpy function. */ +/* #undef HAVE_STPCPY */ + +/* Define if the closedir function returns void instead of int. */ +/* #undef CLOSEDIR_VOID */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define for DGUX with . */ +/* #undef DGUX */ + +/* Define if the `getloadavg' function needs to be run setuid or setgid. */ +/* #undef GETLOADAVG_PRIVILEGED */ + +/* Define to `unsigned long' or `unsigned long long' + if doesn't define. */ +#define uintmax_t unsigned long + +/* Define to `int' if doesn't define. */ +/* #undef gid_t */ + +/* Define if you have alloca, as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you don't have vprintf but do have _doprnt. */ +/* #undef HAVE_DOPRNT */ + +/* Define if your system has a working fnmatch function. */ +/* #undef HAVE_FNMATCH */ + +/* Define if your system has its own `getloadavg' function. */ +/* #undef HAVE_GETLOADAVG */ + +/* Define if you have the getmntent function. */ +/* #undef HAVE_GETMNTENT */ + +/* Define if the `long double' type works. */ +/* #undef HAVE_LONG_DOUBLE */ + +/* Define if you support file names longer than 14 characters. */ +#define HAVE_LONG_FILE_NAMES 1 + +/* Define if you have a working `mmap' system call. */ +/* #undef HAVE_MMAP */ + +/* Define if system calls automatically restart after interruption + by a signal. */ +/* #undef HAVE_RESTARTABLE_SYSCALLS */ + +/* Define if your struct stat has st_blksize. */ +/* #undef HAVE_ST_BLKSIZE */ + +/* Define if your struct stat has st_blocks. */ +/* #undef HAVE_ST_BLOCKS */ + +/* Define if you have the strcoll function and it is properly defined. */ +/* #undef HAVE_STRCOLL */ + +/* Define if your struct stat has st_rdev. */ +/* #undef HAVE_ST_RDEV */ + +/* Define if you have the strftime function. */ +/* #undef HAVE_STRFTIME */ + +/* Define if you have that is POSIX.1 compatible. */ +/* #undef HAVE_SYS_WAIT_H */ + +/* Define if your struct tm has tm_zone. */ +/* #undef HAVE_TM_ZONE */ + +/* Define if you don't have tm_zone but do have the external array + tzname. */ +/* #undef HAVE_TZNAME */ + +/* Define if you have . */ +#ifdef __DECC +#define HAVE_UNISTD_H 1 +#endif + +/* Define if utime(file, NULL) sets file's timestamp to the present. */ +/* #undef HAVE_UTIME_NULL */ + +/* Define if you have . */ +/* #undef HAVE_VFORK_H */ + +/* Define if you have the vprintf function. */ +#define HAVE_VPRINTF 1 + +/* Define if you have the wait3 system call. */ +/* #undef HAVE_WAIT3 */ + +/* Define if on MINIX. */ +/* #undef _MINIX */ + +/* Define if your struct nlist has an n_un member. */ +/* #undef NLIST_NAME_UNION */ + +/* Define if you have . */ +/* #undef NLIST_STRUCT */ + +/* Define if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Define to `int' if doesn't define. */ +/* I assume types.h is available for all 5.0 cc/cxx compilers */ +#if __DECC_VER < 50090000 +#define pid_t int +#endif + +/* Define if the system does not provide POSIX.1 features except + with this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define if you need to in order for stat and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +/* Define if the setvbuf function takes the buffering type as its second + argument and the buffer pointer as the third, as on System V + before release 3. */ +/* #undef SETVBUF_REVERSED */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +/* #undef STACK_DIRECTION */ + +/* Define if the `S_IS*' macros in do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define if you have the ANSI C header files. */ +/* #undef STDC_HEADERS */ + +/* Define on System V Release 4. */ +/* #undef SVR4 */ + +/* Define if `sys_siglist' is declared by . */ +/* #undef SYS_SIGLIST_DECLARED */ + +/* Define to `int' if doesn't define. */ +#if __DECC_VER < 50090000 +#define uid_t int +#endif + +/* Define for Encore UMAX. */ +/* #undef UMAX */ + +/* Define for Encore UMAX 4.3 that has + instead of . */ +/* #undef UMAX4_3 */ + +/* Define vfork as fork if vfork does not work. */ +/* #undef vfork */ + +/* Name of this package (needed by automake) */ +#define PACKAGE "%PACKAGE%" + +/* Version of this package (needed by automake) */ +#define VERSION "%VERSION%" + +/* Define to the name of the SCCS `get' command. */ +/* #undef SCCS_GET */ + +/* Define this if the SCCS `get' command understands the `-G' option. */ +/* #undef SCCS_GET_MINUS_G */ + +/* Define this to enable job server support in GNU make. */ +/* #undef MAKE_JOBSERVER */ + +/* Define to be the nanoseconds member of struct stat's st_mtim, + if it exists. */ +/* #undef ST_MTIM_NSEC */ + +/* Define this if the C library defines the variable `sys_siglist'. */ +/* #undefine HAVE_SYS_SIGLIST */ + +/* Define this if the C library defines the variable `_sys_siglist'. */ +/* #undef HAVE__SYS_SIGLIST */ + +/* Define this if you have the `union wait' type in . */ +/* #undef HAVE_UNION_WAIT */ + +/* Define if you have the dup2 function. */ +#define HAVE_DUP2 1 + +/* Define if you have the getcwd function. */ +#define HAVE_GETCWD 1 + +/* Define if you have the getgroups function. */ +/* #undef HAVE_GETGROUPS */ + +/* Define if you have the gethostbyname function. */ +/* #undef HAVE_GETHOSTBYNAME */ + +/* Define if you have the gethostname function. */ +/* #undef HAVE_GETHOSTNAME */ + +/* Define if you have the getloadavg function. */ +/* #undef HAVE_GETLOADAVG */ + +/* Define if you have the memmove function. */ +#define HAVE_MEMMOVE 1 + +/* Define if you have the mktemp function. */ +#define HAVE_MKTEMP 1 + +/* Define if you have the psignal function. */ +/* #undef HAVE_PSIGNAL */ + +/* Define if you have the pstat_getdynamic function. */ +/* #undef HAVE_PSTAT_GETDYNAMIC */ + +/* Define if you have the setegid function. */ +/* #undef HAVE_SETEGID */ + +/* Define if you have the seteuid function. */ +/* #undef HAVE_SETEUID */ + +/* Define if you have the setlinebuf function. */ +/* #undef HAVE_SETLINEBUF */ + +/* Define if you have the setregid function. */ +/* #undefine HAVE_SETREGID */ + +/* Define if you have the setreuid function. */ +/* #define HAVE_SETREUID */ + +/* Define if you have the sigsetmask function. */ +#define HAVE_SIGSETMASK 1 + +/* Define if you have the socket function. */ +/* #undef HAVE_SOCKET */ + +/* Define if you have the strcasecmp function. */ +/* #undef HAVE_STRCASECMP */ + +/* Define if you have the strerror function. */ +#define HAVE_STRERROR 1 + +/* Define if you have the strsignal function. */ +/* #undef HAVE_STRSIGNAL */ + +/* Define if you have the wait3 function. */ +/* #undef HAVE_WAIT3 */ + +/* Define if you have the waitpid function. */ +/* #undef HAVE_WAITPID */ + +/* Define if you have the header file. */ +#define HAVE_DIRENT_H 1 + +/* Define if you have the header file. */ +#ifdef __DECC +#define HAVE_FCNTL_H 1 +#endif + +/* Define if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_MACH_MACH_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_MEMORY_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_NDIR_H */ + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_DIR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_PARAM_H */ + +/* Define if you have the header file. */ +#ifndef __GNUC__ +#define HAVE_SYS_TIMEB_H 1 +#endif + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_WAIT_H */ + +/* Define if you have the dgc library (-ldgc). */ +/* #undef HAVE_LIBDGC */ + +/* Define if you have the kstat library (-lkstat). */ +/* #undef HAVE_LIBKSTAT * + +/* Define if you have the sun library (-lsun). */ +/* #undef HAVE_LIBSUN */ + +/* Use high resolution file timestamps if nonzero. */ +#define FILE_TIMESTAMP_HI_RES 0 + +/* Define for case insensitve filenames */ +#define HAVE_CASE_INSENSITIVE_FS 1 + +/* VMS specific, define it if you want to use case sensitve targets */ +/* #undef WANT_CASE_SENSITIVE_TARGETS */ + +/* VMS specific, V7.0 has opendir() and friends, so it's undefined */ +/* If you want to use non-VMS code for opendir() etc. on V7.0 and greater + define the first or both macros AND change the compile command to get the + non-VMS versions linked: (prefix=(all,except=(opendir,... */ +/* #undef HAVE_VMSDIR_H */ +/* #undef _DIRENT_HAVE_D_NAMLEN */ + +/* On older systems without 7.0 backport of CRTL the first one is defined */ +#ifdef __CRTL_VER +# if __CRTL_VER < 70000000 +# define HAVE_VMSDIR_H 1 +# endif +#else +# if __VMS_VER < 70000000 +# define HAVE_VMSDIR_H 1 +# endif +#endif + +#if defined(HAVE_VMSDIR_H) && defined(HAVE_DIRENT_H) +#undef HAVE_DIRENT_H +#endif + +#define HAVE_STDLIB_H 1 +#define INCLUDEDIR "sys$sysroot:[syslib]" +#define LIBDIR "sys$sysroot:[syslib]" + +/* Don't use RTL functions of OpenVMS */ +#ifdef __DECC +#include +#include +#define getopt gnu_getopt +#define optarg gnu_optarg +#define optopt gnu_optopt +#define optind gnu_optind +#define opterr gnu_opterr +#endif + +#if defined (__cplusplus) || (defined (__STDC__) && __STDC__) +#undef PARAMS +#define PARAMS(protos) protos +#else /* Not C++ or ANSI C. */ +#undef PARAMS +#define PARAMS(protos) () +#endif /* C++ or ANSI C. */ + +/* Define if using alloca.c. */ +/* #undef C_ALLOCA */ +/* maybe this should be placed into make.h */ +#if defined(__VAX) && defined(__DECC) +#define alloca(n) __ALLOCA(n) +#endif + +/* Build host information. */ +#define MAKE_HOST "VMS" diff --git a/src/mkutil/make/config.h.W32 b/src/mkutil/make/config.h.W32 new file mode 100644 index 00000000..ce8cb144 --- /dev/null +++ b/src/mkutil/make/config.h.W32 @@ -0,0 +1,399 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif + +/* Define if using alloca.c. */ +/* #undef C_ALLOCA */ + +/* Define if the closedir function returns void instead of int. */ +/* #undef CLOSEDIR_VOID */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define for DGUX with . */ +/* #undef DGUX */ + +/* Define if the `getloadavg' function needs to be run setuid or setgid. */ +/* #undef GETLOADAVG_PRIVILEGED */ + +/* Define to `unsigned long' or `unsigned long long' + if doesn't define. */ +#define uintmax_t unsigned long + +/* Define to `int' if doesn't define. */ +#undef gid_t +#define gid_t int + +/* Define if you have alloca, as a function or macro. */ +#undef HAVE_ALLOCA +#define HAVE_ALLOCA 1 + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you don't have vprintf but do have _doprnt. */ +/* #undef HAVE_DOPRNT */ + +/* Define if your system has a working fnmatch function. */ +/* #undef HAVE_FNMATCH */ + +/* Define if your system has its own `getloadavg' function. */ +/* #undef HAVE_GETLOADAVG */ + +/* Define if you have the getmntent function. */ +/* #undef HAVE_GETMNTENT */ + +/* Define if the `long double' type works. */ +/* #undef HAVE_LONG_DOUBLE */ + +/* Define if you support file names longer than 14 characters. */ +#undef HAVE_LONG_FILE_NAMES +#define HAVE_LONG_FILE_NAMES 1 + +/* Define if you have a working `mmap' system call. */ +/* #undef HAVE_MMAP */ + +/* Define if system calls automatically restart after interruption + by a signal. */ +/* #undef HAVE_RESTARTABLE_SYSCALLS */ + +/* Define if your struct stat has st_blksize. */ +/* #undef HAVE_ST_BLKSIZE */ + +/* Define if your struct stat has st_blocks. */ +/* #undef HAVE_ST_BLOCKS */ + +/* Define if you have the strcoll function and it is properly defined. */ +#undef HAVE_STRCOLL +#define HAVE_STRCOLL 1 + +/* Define if your struct stat has st_rdev. */ +#undef HAVE_ST_RDEV +#define HAVE_ST_RDEV 1 + +/* Define if you have the strftime function. */ +#undef HAVE_STRFTIME +#define HAVE_STRFTIME 1 + +/* Define if you have that is POSIX.1 compatible. */ +/* #undef HAVE_SYS_WAIT_H */ + +/* Define if your struct tm has tm_zone. */ +/* #undef HAVE_TM_ZONE */ + +/* Define if you don't have tm_zone but do have the external array + tzname. */ +#undef HAVE_TZNAME +#define HAVE_TZNAME 1 + +/* Define if you have . */ +/* #undef HAVE_UNISTD_H */ + +/* Define if utime(file, NULL) sets file's timestamp to the present. */ +#undef HAVE_UTIME_NULL +#define HAVE_UTIME_NULL 1 + +/* Define if you have . */ +/* #undef HAVE_VFORK_H */ + +/* Define if you have the vprintf function. */ +#undef HAVE_VPRINTF +#define HAVE_VPRINTF 1 + +/* Define if you have the wait3 system call. */ +/* #undef HAVE_WAIT3 */ + +/* Define if on MINIX. */ +/* #undef _MINIX */ + +/* Define if your struct nlist has an n_un member. */ +/* #undef NLIST_NAME_UNION */ + +/* Define if you have . */ +/* #undef NLIST_STRUCT */ + +/* Define if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Define to `int' if doesn't define. */ +#undef pid_t +#define pid_t int + +/* Define if the system does not provide POSIX.1 features except + with this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define if you need to in order for stat and other things to work. */ +#undef _POSIX_SOURCE +#define _POSIX_SOURCE 1 + +/* Define as the return type of signal handlers (int or void). */ +#undef RETSIGTYPE +#define RETSIGTYPE void + +/* Define if the setvbuf function takes the buffering type as its second + argument and the buffer pointer as the third, as on System V + before release 3. */ +/* #undef SETVBUF_REVERSED */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +/* #undef STACK_DIRECTION */ + +/* Define if the `S_IS*' macros in do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS +#define STDC_HEADERS 1 + +/* Define on System V Release 4. */ +/* #undef SVR4 */ + +/* Define if `sys_siglist' is declared by . */ +/* #undef SYS_SIGLIST_DECLARED */ + +/* Define to `int' if doesn't define. */ +#undef uid_t +#define uid_t int + +/* Define for Encore UMAX. */ +/* #undef UMAX */ + +/* Define for Encore UMAX 4.3 that has + instead of . */ +/* #undef UMAX4_3 */ + +/* Define vfork as fork if vfork does not work. */ +/* #undef vfork */ + +/* Name of this package (needed by automake) */ +#define PACKAGE "make" + +/* Version of this package (needed by automake) */ +#define VERSION "3.81a2" + +/* Define to the name of the SCCS `get' command. */ +#undef SCCS_GET +#define SCCS_GET "echo no sccs get" + +/* Define to 1 if NLS is requested. */ +/* #undef ENABLE_NLS */ + +/* Define as 1 if you have dcgettext. */ +/* #undef HAVE_DCGETTEXT */ + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +/* #undef HAVE_GETTEXT */ + +/* Define if your locale.h file contains LC_MESSAGES. */ +/* #undef HAVE_LC_MESSAGES */ + +/* Define to the installation directory for locales. */ +#define LOCALEDIR "" + +/* Define this if the SCCS `get' command understands the `-G' option. */ +/* #undef SCCS_GET_MINUS_G */ + +/* Define this to enable job server support in GNU make. */ +/* #undef MAKE_JOBSERVER */ + +/* Define to be the nanoseconds member of struct stat's st_mtim, + if it exists. */ +/* #undef ST_MTIM_NSEC */ + +/* Define this if the C library defines the variable `sys_siglist'. */ +/* #undef HAVE_SYS_SIGLIST */ + +/* Define this if the C library defines the variable `_sys_siglist'. */ +/* #undef HAVE__SYS_SIGLIST */ + +/* Define this if you have the `union wait' type in . */ +/* #undef HAVE_UNION_WAIT */ + +/* Define if you have the dup2 function. */ +#undef HAVE_DUP2 +#define HAVE_DUP2 1 + +/* Define if you have the getcwd function. */ +#undef HAVE_GETCWD +#define HAVE_GETCWD 1 + +/* Define if you have the getgroups function. */ +/* #undef HAVE_GETGROUPS */ + +/* Define if you have the gethostbyname function. */ +/* #undef HAVE_GETHOSTBYNAME */ + +/* Define if you have the gethostname function. */ +/* #undef HAVE_GETHOSTNAME */ + +/* Define if you have the getloadavg function. */ +/* #undef HAVE_GETLOADAVG */ + +/* Define if you have the memmove function. */ +#undef HAVE_MEMMOVE +#define HAVE_MEMMOVE 1 + +/* Define if you have the mktemp function. */ +#undef HAVE_MKTEMP +#define HAVE_MKTEMP 1 + +/* Define if you have the psignal function. */ +/* #undef HAVE_PSIGNAL */ + +/* Define if you have the pstat_getdynamic function. */ +/* #undef HAVE_PSTAT_GETDYNAMIC */ + +/* Define if you have the setegid function. */ +/* #undef HAVE_SETEGID */ + +/* Define if you have the seteuid function. */ +/* #undef HAVE_SETEUID */ + +/* Define if you have the setlinebuf function. */ +/* #undef HAVE_SETLINEBUF */ + +/* Define if you have the setregid function. */ +/* #undef HAVE_SETREGID */ + +/* Define if you have the setreuid function. */ +/* #undef HAVE_SETREUID */ + +/* Define if you have the sigsetmask function. */ +/* #undef HAVE_SIGSETMASK */ + +/* Define if you have the socket function. */ +/* #undef HAVE_SOCKET */ + +/* Define if you have the strcasecmp function. */ +/* #undef HAVE_STRCASECMP */ + +/* Define if you have the strerror function. */ +#undef HAVE_STRERROR +#define HAVE_STRERROR 1 + +/* Define if you have the strsignal function. */ +/* #undef HAVE_STRSIGNAL */ + +/* Define if you have the wait3 function. */ +/* #undef HAVE_WAIT3 */ + +/* Define if you have the waitpid function. */ +/* #undef HAVE_WAITPID */ + +/* Define if you have the header file. */ +#undef HAVE_DIRENT_H +#define HAVE_DIRENT_H 1 + +/* Define if you have the header file. */ +#undef HAVE_FCNTL_H +#define HAVE_FCNTL_H 1 + +/* Define if you have the header file. */ +#undef HAVE_LIMITS_H +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_MACH_MACH_H */ + +/* Define if you have the header file. */ +#undef HAVE_MEMORY_H +#define HAVE_MEMORY_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_NDIR_H */ + +/* Define if you have the header file. */ +#undef HAVE_STRING_H +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_DIR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_PARAM_H */ + +/* Define if you have the header file. */ +#undef HAVE_SYS_TIMEB_H +#define HAVE_SYS_TIMEB_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_WAIT_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_UNISTD_H */ + +/* Define if you have the dgc library (-ldgc). */ +/* #undef HAVE_LIBDGC */ + +/* Define if you have the kstat library (-lkstat). */ +/* #undef HAVE_LIBKSTAT */ + +/* Define if you have the sun library (-lsun). */ +/* #undef HAVE_LIBSUN */ + +/* Use high resolution file timestamps if nonzero. */ +#define FILE_TIMESTAMP_HI_RES 0 + +/* Build host information. */ +#define MAKE_HOST "Windows32" + +/* Grok DOS paths (drive specs and backslash path element separators) */ +#define HAVE_DOS_PATHS + +/* + * Refer to README.W32 for info on the following settings + */ + +/* + * If you have a shell that does not grok 'sh -c quoted-command-line' + * correctly, you need this setting. Please see below for specific + * shell support. + */ +#undef BATCH_MODE_ONLY_SHELL +#define BATCH_MODE_ONLY_SHELL 1 + +/* + * Define if you have the Cygnus "Cygwin" GNU Windows32 tool set. + * Do NOT define BATCH_MODE_ONLY_SHELL if you define HAVE_CYGWIN_SHELL + */ +#undef HAVE_CYGWIN_SHELL + +/* + * Define if you have the MKS tool set or shell. Do NOT define + * BATCH_MODE_ONLY_SHELL if you define HAVE_MKS_SHELL + */ +#undef HAVE_MKS_SHELL + +/* + * Enforce the mutual exclusivity restriction. + */ +#ifdef HAVE_MKS_SHELL +#undef BATCH_MODE_ONLY_SHELL +#endif + +#ifdef HAVE_CYGWIN_SHELL +#undef BATCH_MODE_ONLY_SHELL +#endif + +/* Define if you prefer Case Insensitive behavior */ +#undef HAVE_CASE_INSENSITIVE_FS diff --git a/src/mkutil/make/config.h.W32.template b/src/mkutil/make/config.h.W32.template new file mode 100644 index 00000000..4e484679 --- /dev/null +++ b/src/mkutil/make/config.h.W32.template @@ -0,0 +1,399 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif + +/* Define if using alloca.c. */ +/* #undef C_ALLOCA */ + +/* Define if the closedir function returns void instead of int. */ +/* #undef CLOSEDIR_VOID */ + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ + +/* Define for DGUX with . */ +/* #undef DGUX */ + +/* Define if the `getloadavg' function needs to be run setuid or setgid. */ +/* #undef GETLOADAVG_PRIVILEGED */ + +/* Define to `unsigned long' or `unsigned long long' + if doesn't define. */ +#define uintmax_t unsigned long + +/* Define to `int' if doesn't define. */ +#undef gid_t +#define gid_t int + +/* Define if you have alloca, as a function or macro. */ +#undef HAVE_ALLOCA +#define HAVE_ALLOCA 1 + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you don't have vprintf but do have _doprnt. */ +/* #undef HAVE_DOPRNT */ + +/* Define if your system has a working fnmatch function. */ +/* #undef HAVE_FNMATCH */ + +/* Define if your system has its own `getloadavg' function. */ +/* #undef HAVE_GETLOADAVG */ + +/* Define if you have the getmntent function. */ +/* #undef HAVE_GETMNTENT */ + +/* Define if the `long double' type works. */ +/* #undef HAVE_LONG_DOUBLE */ + +/* Define if you support file names longer than 14 characters. */ +#undef HAVE_LONG_FILE_NAMES +#define HAVE_LONG_FILE_NAMES 1 + +/* Define if you have a working `mmap' system call. */ +/* #undef HAVE_MMAP */ + +/* Define if system calls automatically restart after interruption + by a signal. */ +/* #undef HAVE_RESTARTABLE_SYSCALLS */ + +/* Define if your struct stat has st_blksize. */ +/* #undef HAVE_ST_BLKSIZE */ + +/* Define if your struct stat has st_blocks. */ +/* #undef HAVE_ST_BLOCKS */ + +/* Define if you have the strcoll function and it is properly defined. */ +#undef HAVE_STRCOLL +#define HAVE_STRCOLL 1 + +/* Define if your struct stat has st_rdev. */ +#undef HAVE_ST_RDEV +#define HAVE_ST_RDEV 1 + +/* Define if you have the strftime function. */ +#undef HAVE_STRFTIME +#define HAVE_STRFTIME 1 + +/* Define if you have that is POSIX.1 compatible. */ +/* #undef HAVE_SYS_WAIT_H */ + +/* Define if your struct tm has tm_zone. */ +/* #undef HAVE_TM_ZONE */ + +/* Define if you don't have tm_zone but do have the external array + tzname. */ +#undef HAVE_TZNAME +#define HAVE_TZNAME 1 + +/* Define if you have . */ +/* #undef HAVE_UNISTD_H */ + +/* Define if utime(file, NULL) sets file's timestamp to the present. */ +#undef HAVE_UTIME_NULL +#define HAVE_UTIME_NULL 1 + +/* Define if you have . */ +/* #undef HAVE_VFORK_H */ + +/* Define if you have the vprintf function. */ +#undef HAVE_VPRINTF +#define HAVE_VPRINTF 1 + +/* Define if you have the wait3 system call. */ +/* #undef HAVE_WAIT3 */ + +/* Define if on MINIX. */ +/* #undef _MINIX */ + +/* Define if your struct nlist has an n_un member. */ +/* #undef NLIST_NAME_UNION */ + +/* Define if you have . */ +/* #undef NLIST_STRUCT */ + +/* Define if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Define to `int' if doesn't define. */ +#undef pid_t +#define pid_t int + +/* Define if the system does not provide POSIX.1 features except + with this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define if you need to in order for stat and other things to work. */ +#undef _POSIX_SOURCE +#define _POSIX_SOURCE 1 + +/* Define as the return type of signal handlers (int or void). */ +#undef RETSIGTYPE +#define RETSIGTYPE void + +/* Define if the setvbuf function takes the buffering type as its second + argument and the buffer pointer as the third, as on System V + before release 3. */ +/* #undef SETVBUF_REVERSED */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +/* #undef STACK_DIRECTION */ + +/* Define if the `S_IS*' macros in do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS +#define STDC_HEADERS 1 + +/* Define on System V Release 4. */ +/* #undef SVR4 */ + +/* Define if `sys_siglist' is declared by . */ +/* #undef SYS_SIGLIST_DECLARED */ + +/* Define to `int' if doesn't define. */ +#undef uid_t +#define uid_t int + +/* Define for Encore UMAX. */ +/* #undef UMAX */ + +/* Define for Encore UMAX 4.3 that has + instead of . */ +/* #undef UMAX4_3 */ + +/* Define vfork as fork if vfork does not work. */ +/* #undef vfork */ + +/* Name of this package (needed by automake) */ +#define PACKAGE "%PACKAGE%" + +/* Version of this package (needed by automake) */ +#define VERSION "%VERSION%" + +/* Define to the name of the SCCS `get' command. */ +#undef SCCS_GET +#define SCCS_GET "echo no sccs get" + +/* Define to 1 if NLS is requested. */ +/* #undef ENABLE_NLS */ + +/* Define as 1 if you have dcgettext. */ +/* #undef HAVE_DCGETTEXT */ + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +/* #undef HAVE_GETTEXT */ + +/* Define if your locale.h file contains LC_MESSAGES. */ +/* #undef HAVE_LC_MESSAGES */ + +/* Define to the installation directory for locales. */ +#define LOCALEDIR "" + +/* Define this if the SCCS `get' command understands the `-G' option. */ +/* #undef SCCS_GET_MINUS_G */ + +/* Define this to enable job server support in GNU make. */ +/* #undef MAKE_JOBSERVER */ + +/* Define to be the nanoseconds member of struct stat's st_mtim, + if it exists. */ +/* #undef ST_MTIM_NSEC */ + +/* Define this if the C library defines the variable `sys_siglist'. */ +/* #undef HAVE_SYS_SIGLIST */ + +/* Define this if the C library defines the variable `_sys_siglist'. */ +/* #undef HAVE__SYS_SIGLIST */ + +/* Define this if you have the `union wait' type in . */ +/* #undef HAVE_UNION_WAIT */ + +/* Define if you have the dup2 function. */ +#undef HAVE_DUP2 +#define HAVE_DUP2 1 + +/* Define if you have the getcwd function. */ +#undef HAVE_GETCWD +#define HAVE_GETCWD 1 + +/* Define if you have the getgroups function. */ +/* #undef HAVE_GETGROUPS */ + +/* Define if you have the gethostbyname function. */ +/* #undef HAVE_GETHOSTBYNAME */ + +/* Define if you have the gethostname function. */ +/* #undef HAVE_GETHOSTNAME */ + +/* Define if you have the getloadavg function. */ +/* #undef HAVE_GETLOADAVG */ + +/* Define if you have the memmove function. */ +#undef HAVE_MEMMOVE +#define HAVE_MEMMOVE 1 + +/* Define if you have the mktemp function. */ +#undef HAVE_MKTEMP +#define HAVE_MKTEMP 1 + +/* Define if you have the psignal function. */ +/* #undef HAVE_PSIGNAL */ + +/* Define if you have the pstat_getdynamic function. */ +/* #undef HAVE_PSTAT_GETDYNAMIC */ + +/* Define if you have the setegid function. */ +/* #undef HAVE_SETEGID */ + +/* Define if you have the seteuid function. */ +/* #undef HAVE_SETEUID */ + +/* Define if you have the setlinebuf function. */ +/* #undef HAVE_SETLINEBUF */ + +/* Define if you have the setregid function. */ +/* #undef HAVE_SETREGID */ + +/* Define if you have the setreuid function. */ +/* #undef HAVE_SETREUID */ + +/* Define if you have the sigsetmask function. */ +/* #undef HAVE_SIGSETMASK */ + +/* Define if you have the socket function. */ +/* #undef HAVE_SOCKET */ + +/* Define if you have the strcasecmp function. */ +/* #undef HAVE_STRCASECMP */ + +/* Define if you have the strerror function. */ +#undef HAVE_STRERROR +#define HAVE_STRERROR 1 + +/* Define if you have the strsignal function. */ +/* #undef HAVE_STRSIGNAL */ + +/* Define if you have the wait3 function. */ +/* #undef HAVE_WAIT3 */ + +/* Define if you have the waitpid function. */ +/* #undef HAVE_WAITPID */ + +/* Define if you have the header file. */ +#undef HAVE_DIRENT_H +#define HAVE_DIRENT_H 1 + +/* Define if you have the header file. */ +#undef HAVE_FCNTL_H +#define HAVE_FCNTL_H 1 + +/* Define if you have the header file. */ +#undef HAVE_LIMITS_H +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_MACH_MACH_H */ + +/* Define if you have the header file. */ +#undef HAVE_MEMORY_H +#define HAVE_MEMORY_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_NDIR_H */ + +/* Define if you have the header file. */ +#undef HAVE_STRING_H +#define HAVE_STRING_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_DIR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_PARAM_H */ + +/* Define if you have the header file. */ +#undef HAVE_SYS_TIMEB_H +#define HAVE_SYS_TIMEB_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_WAIT_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_UNISTD_H */ + +/* Define if you have the dgc library (-ldgc). */ +/* #undef HAVE_LIBDGC */ + +/* Define if you have the kstat library (-lkstat). */ +/* #undef HAVE_LIBKSTAT */ + +/* Define if you have the sun library (-lsun). */ +/* #undef HAVE_LIBSUN */ + +/* Use high resolution file timestamps if nonzero. */ +#define FILE_TIMESTAMP_HI_RES 0 + +/* Build host information. */ +#define MAKE_HOST "Windows32" + +/* Grok DOS paths (drive specs and backslash path element separators) */ +#define HAVE_DOS_PATHS + +/* + * Refer to README.W32 for info on the following settings + */ + +/* + * If you have a shell that does not grok 'sh -c quoted-command-line' + * correctly, you need this setting. Please see below for specific + * shell support. + */ +#undef BATCH_MODE_ONLY_SHELL +#define BATCH_MODE_ONLY_SHELL 1 + +/* + * Define if you have the Cygnus "Cygwin" GNU Windows32 tool set. + * Do NOT define BATCH_MODE_ONLY_SHELL if you define HAVE_CYGWIN_SHELL + */ +#undef HAVE_CYGWIN_SHELL + +/* + * Define if you have the MKS tool set or shell. Do NOT define + * BATCH_MODE_ONLY_SHELL if you define HAVE_MKS_SHELL + */ +#undef HAVE_MKS_SHELL + +/* + * Enforce the mutual exclusivity restriction. + */ +#ifdef HAVE_MKS_SHELL +#undef BATCH_MODE_ONLY_SHELL +#endif + +#ifdef HAVE_CYGWIN_SHELL +#undef BATCH_MODE_ONLY_SHELL +#endif + +/* Define if you prefer Case Insensitive behavior */ +#undef HAVE_CASE_INSENSITIVE_FS diff --git a/src/mkutil/make/config/.cvsignore b/src/mkutil/make/config/.cvsignore new file mode 100644 index 00000000..3fa7c2f2 --- /dev/null +++ b/src/mkutil/make/config/.cvsignore @@ -0,0 +1,4 @@ +*.m4 +config.* + +Makefile Makefile.in diff --git a/src/mkutil/make/config/CVS/Entries b/src/mkutil/make/config/CVS/Entries new file mode 100644 index 00000000..b4f589e7 --- /dev/null +++ b/src/mkutil/make/config/CVS/Entries @@ -0,0 +1,5 @@ +/.cvsignore/1.1/Wed Sep 11 16:55:45 2002// +/ChangeLog/1.2/Fri May 2 01:45:00 2003// +/Makefile.am/1.3/Tue Mar 25 03:21:43 2003// +/dospaths.m4/1.1/Fri May 2 01:45:00 2003// +D diff --git a/src/mkutil/make/config/CVS/Repository b/src/mkutil/make/config/CVS/Repository new file mode 100644 index 00000000..e9360311 --- /dev/null +++ b/src/mkutil/make/config/CVS/Repository @@ -0,0 +1 @@ +make/config diff --git a/src/mkutil/make/config/CVS/Root b/src/mkutil/make/config/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/config/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/config/ChangeLog b/src/mkutil/make/config/ChangeLog new file mode 100644 index 00000000..31921775 --- /dev/null +++ b/src/mkutil/make/config/ChangeLog @@ -0,0 +1,19 @@ +2003-04-30 Paul D. Smith + + * dospaths.m4: New macro to test for DOS-style pathnames, based on + coreutils 5.0 "dos.m4" by Jim Meyering. + +2002-04-21 gettextize + + * codeset.m4: New file, from gettext-0.11.1. + * gettext.m4: New file, from gettext-0.11.1. + * glibc21.m4: New file, from gettext-0.11.1. + * iconv.m4: New file, from gettext-0.11.1. + * isc-posix.m4: New file, from gettext-0.11.1. + * lcmessage.m4: New file, from gettext-0.11.1. + * lib-ld.m4: New file, from gettext-0.11.1. + * lib-link.m4: New file, from gettext-0.11.1. + * lib-prefix.m4: New file, from gettext-0.11.1. + * progtest.m4: New file, from gettext-0.11.1. + * Makefile.am: New file. + diff --git a/src/mkutil/make/config/Makefile.am b/src/mkutil/make/config/Makefile.am new file mode 100644 index 00000000..0a4e3c7e --- /dev/null +++ b/src/mkutil/make/config/Makefile.am @@ -0,0 +1,8 @@ +# -*-Makefile-*-, or close enough + +AUTOMAKE_OPTIONS = 1.7.3 + +EXTRA_DIST = codeset.m4 gettext.m4 glibc21.m4 iconv.m4 isc-posix.m4 \ + intdiv0.m4 inttypes-pri.m4 inttypes.m4 inttypes_h.m4 \ + isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 \ + progtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 diff --git a/src/mkutil/make/config/dospaths.m4 b/src/mkutil/make/config/dospaths.m4 new file mode 100644 index 00000000..3cadbbfc --- /dev/null +++ b/src/mkutil/make/config/dospaths.m4 @@ -0,0 +1,21 @@ +# Test if the system uses DOS-style pathnames (drive specs and backslashes) +# By Paul Smith . Based on dos.m4 by Jim Meyering. + +AC_DEFUN([pds_AC_DOS_PATHS], + [ + AC_CACHE_CHECK([whether system uses MSDOS-style paths], [ac_cv_dos_paths], + [ + AC_COMPILE_IFELSE([ +#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __EMX__ +neither MSDOS nor Windows nor OS2 +#endif +], + [ac_cv_dos_paths=yes], + [ac_cv_dos_paths=no]) + ]) + + if test x"$ac_cv_dos_paths" = xyes; then + AC_DEFINE_UNQUOTED([HAVE_DOS_PATHS], 1, + [Define if the system uses DOS-style pathnames.]) + fi + ]) diff --git a/src/mkutil/make/configh.dos.template b/src/mkutil/make/configh.dos.template new file mode 100644 index 00000000..40ef7705 --- /dev/null +++ b/src/mkutil/make/configh.dos.template @@ -0,0 +1,94 @@ + +/* Many things are defined already by a system header. */ +#include + +#if __DJGPP__ > 2 || __DJGPP_MINOR__ > 1 + +/* Define if `sys_siglist' is declared by . */ +# define SYS_SIGLIST_DECLARED 1 + +/* Define this if the C library defines the variable `_sys_siglist'. */ +# define HAVE_SYS_SIGLIST 1 + +#else + +/* Define NSIG. */ +# define NSIG SIGMAX + +#endif + +/* Use high resolution file timestamps if nonzero. */ +#define FILE_TIMESTAMP_HI_RES 0 + +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define if you have the fdopen function. */ +#define HAVE_FDOPEN 1 + +/* Define to 1 if you have the `getgroups' function. */ +#define HAVE_GETGROUPS 1 + +/* Define if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define if you have the mkstemp function. */ +#define HAVE_MKSTEMP 1 + +/* Define to 1 if you have the `mktemp' function. */ +#define HAVE_MKTEMP 1 + +/* Define to 1 if you have the `setlinebuf' function. */ +#define HAVE_SETLINEBUF 1 + +/* Define to 1 if you have the `setvbuf' function. */ +#define HAVE_SETVBUF 1 + +#define SCCS_GET "get" + +/* Define to `unsigned long' or `unsigned long long' + if doesn't define. */ +#define uintmax_t unsigned long long + +/* Define the type of the first arg to select(). */ +#define fd_set_size_t int + +/* Define if you have the select function. */ +#define HAVE_SELECT 1 + +/* Define if you have the vprintf library function. */ +#undef HAVE_VPRINTF +#define HAVE_VPRINTF 1 + +/* Name of the package */ +#define PACKAGE "%PACKAGE%" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "bug-%PACKAGE%@gnu.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "GNU %PACKAGE%" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "GNU %PACKAGE% %VERSION%" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "%PACKAGE%" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "%VERSION%" + +/* Define to 1 if the C compiler supports function prototypes. */ +#define PROTOTYPES 1 + +/* Define to 1 if `sys_siglist' is declared by or . */ +#define SYS_SIGLIST_DECLARED 1 + +/* Version number of package */ +#define VERSION "%VERSION%" + +/* Build host information. */ +#define MAKE_HOST "i386-pc-msdosdjgpp" + +/* Grok DOS paths (drive specs and backslash path element separators) */ +#define HAVE_DOS_PATHS diff --git a/src/mkutil/make/configure.bat b/src/mkutil/make/configure.bat new file mode 100644 index 00000000..a3579239 --- /dev/null +++ b/src/mkutil/make/configure.bat @@ -0,0 +1,44 @@ +@echo off +echo Configuring MAKE for DJGPP + +rem The SmallEnv trick protects against too small environment block, +rem in which case the values will be truncated and the whole thing +rem goes awry. COMMAND.COM will say "Out of environment space", but +rem many people don't care, so we force them to care by refusing to go. + +rem Where is the srcdir? +set XSRC=. +if not "%XSRC%"=="." goto SmallEnv +if "%1%"=="" goto SrcDone +set XSRC=%1 +if not "%XSRC%"=="%1" goto SmallEnv + +:SrcDone + +update %XSRC%/configh.dos ./config.h + +rem Do they have Make? +redir -o junk.$$$ -eo make -n -f NUL +rem REDIR will return 1 if it cannot run Make. +rem If it can run Make, it will usually return 2, +rem but 0 is also OK with us. +if errorlevel 2 goto MakeOk +if not errorlevel 1 goto MakeOk +if exist junk.$$$ del junk.$$$ +echo No Make program found--use DOSBUILD.BAT to build Make. +goto End + +rem They do have Make. Generate the Makefile. + +:MakeOk +del junk.$$$ +update %XSRC%/Makefile.DOS ./Makefile +echo Done. +if not "%XSRC%"=="." echo Invoke Make thus: "make srcdir=%XSRC%" +goto End + +:SmallEnv +echo Your environment is too small. Please enlarge it and run me again. + +:End +set XRSC= diff --git a/src/mkutil/make/configure.in b/src/mkutil/make/configure.in new file mode 100644 index 00000000..9d8d07b8 --- /dev/null +++ b/src/mkutil/make/configure.in @@ -0,0 +1,395 @@ +# Process this file with autoconf to produce a configure script. + +AC_INIT([GNU make],[3.81a2],[bug-make@gnu.org]) + +AC_PREREQ(2.57) + +AC_REVISION([[$Id: configure.in,v 1.119 2003/05/02 01:44:59 psmith Exp $]]) + +# Autoconf setup +AC_CONFIG_AUX_DIR(config) +AC_CONFIG_SRCDIR(vpath.c) +AC_CONFIG_HEADERS(config.h) + +# Automake setup +AM_INIT_AUTOMAKE +AC_PROG_MAKE_SET + +# Checks for programs. +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_RANLIB +AC_PROG_CPP +AC_CHECK_PROG(AR, ar, ar, ar) +# Perl is needed for the test suite (only) +AC_CHECK_PROG(PERL, perl, perl, perl) + +# Specialized system macros +AC_CANONICAL_HOST +AC_AIX +AC_ISC_POSIX +AC_MINIX + +# Needed for ansi2knr +AM_C_PROTOTYPES + +# Enable gettext, in "external" mode. + +AM_GNU_GETTEXT_VERSION(0.11.5) +AM_GNU_GETTEXT([external]) + +# This test must come as early as possible after the compiler configuration +# tests, because the choice of the file model can (in principle) affect +# whether functions and headers are available, whether they work, etc. +AC_SYS_LARGEFILE + +# Checks for libraries. +AC_SEARCH_LIBS(getpwnam, [sun]) + +# Checks for header files. +AC_HEADER_STDC +AC_HEADER_DIRENT +AC_HEADER_STAT +AC_HEADER_TIME +AC_CHECK_HEADERS(stdlib.h locale.h unistd.h limits.h fcntl.h string.h \ + memory.h sys/param.h sys/time.h sys/timeb.h) + +AM_PROG_CC_C_O +AM_PROG_CC_STDC +AC_C_CONST +AC_TYPE_SIGNAL +AC_TYPE_UID_T +AC_TYPE_PID_T + +# Find some definition for uintmax_t + +AC_CHECK_TYPE(uintmax_t,,[ + uintmax_t="unsigned long" + AC_CHECK_TYPE(unsigned long long,[uintmax_t="unsigned long long"]) + AC_DEFINE_UNQUOTED(uintmax_t,$uintmax_t, + [Define uintmax_t if not defined in or .])]) + +# Find out whether our struct stat returns nanosecond resolution timestamps. + +AC_STRUCT_ST_MTIM_NSEC +AC_MSG_CHECKING([whether to use high resolution file timestamps]) +AC_CACHE_VAL(make_cv_file_timestamp_hi_res, [ + make_cv_file_timestamp_hi_res=no + if test "$ac_cv_struct_st_mtim_nsec" != no; then + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +# if HAVE_INTTYPES_H +# include +# endif]], + [[char a[0x7fffffff < (uintmax_t)-1 >> 30 ? 1 : -1];]])], + [make_cv_file_timestamp_hi_res=yes], + []) + fi]) +AC_MSG_RESULT($make_cv_file_timestamp_hi_res) +if test "$make_cv_file_timestamp_hi_res" = yes; then + val=1 +else + val=0 +fi +AC_DEFINE_UNQUOTED(FILE_TIMESTAMP_HI_RES, $val, + [Use high resolution file timestamps if nonzero.]) + +if test "$make_cv_file_timestamp_hi_res" = yes; then + # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function. + # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. + AC_SEARCH_LIBS(clock_gettime, [rt posix4]) + if test "$ac_cv_search_clock_gettime" != no; then + AC_DEFINE(HAVE_CLOCK_GETTIME, 1, + [Define if you have the clock_gettime function.]) + fi +fi + +# Check for DOS-style pathnames. +pds_AC_DOS_PATHS + +# See if we have a standard version of gettimeofday(). Since actual +# implementations can differ, just make sure we have the most common +# one. +AC_CACHE_CHECK([for standard gettimeofday], ac_cv_func_gettimeofday, + [ac_cv_func_gettimeofday=no + AC_RUN_IFELSE([AC_LANG_SOURCE([[#include + int main () + { + struct timeval t; t.tv_sec = -1; t.tv_usec = -1; + exit (gettimeofday (&t, 0) != 0 + || t.tv_sec < 0 || t.tv_usec < 0); + }]])], + [ac_cv_func_gettimeofday=yes], + [ac_cv_func_gettimeofday=no], + [ac_cv_func_gettimeofday="no (cross-compiling)"])]) +if test "$ac_cv_func_gettimeofday" = yes; then + AC_DEFINE(HAVE_GETTIMEOFDAY, 1, + [Define if you have a standard gettimeofday function]) +fi + +AC_CHECK_FUNCS( memcpy memmove strchr strdup mkstemp mktemp fdopen \ + bsd_signal dup2 getcwd sigsetmask sigaction getgroups \ + seteuid setegid setlinebuf setreuid setregid setvbuf pipe \ + strerror strsignal) + +make_FUNC_SETVBUF_REVERSED + +# strcoll() is used by the GNU glob library +AC_FUNC_STRCOLL + +AC_FUNC_ALLOCA +AC_FUNC_FORK([]) +AC_FUNC_VPRINTF +AC_FUNC_CLOSEDIR_VOID + +AC_FUNC_GETLOADAVG + +# AC_FUNC_GETLOADAVG is documented to set the NLIST_STRUCT value, but it +# doesn't. So, we will. + +if test "$ac_cv_header_nlist_h" = yes; then + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[struct nlist nl; + nl.n_name = "string"; + return 0;]])], + [make_cv_nlist_struct=yes], + [make_cv_nlist_struct=no]) + if test "$make_cv_nlist_struct" = yes; then + AC_DEFINE(NLIST_STRUCT, 1, + [Define if struct nlist.n_name is a pointer rather than an array.]) + fi +fi + +AC_CHECK_DECLS([sys_siglist]) + + +# Check out the wait reality. +AC_CHECK_HEADERS(sys/wait.h) +AC_CHECK_FUNCS(waitpid wait3) +AC_MSG_CHECKING(for union wait) +AC_CACHE_VAL(make_cv_union_wait, [dnl + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include +#include ]], + [[union wait status; int pid; pid = wait (&status); +#ifdef WEXITSTATUS +/* Some POSIXoid systems have both the new-style macros and the old + union wait type, and they do not work together. If union wait + conflicts with WEXITSTATUS et al, we don't want to use it at all. */ + if (WEXITSTATUS (status) != 0) pid = -1; +#ifdef WTERMSIG + /* If we have WEXITSTATUS and WTERMSIG, just use them on ints. */ + -- blow chunks here -- +#endif +#endif +#ifdef HAVE_WAITPID + /* Make sure union wait works with waitpid. */ + pid = waitpid (-1, &status, 0); +#endif + ]])], + [make_cv_union_wait=yes], + [make_cv_union_wait=no])]) +if test "$make_cv_union_wait" = yes; then + AC_DEFINE(HAVE_UNION_WAIT, 1, + [Define this if you have the \`union wait' type in .]) +fi +AC_MSG_RESULT($make_cv_union_wait) + + +# If we're building on Windows/DOS/OS/2, add some support for DOS drive specs. +if test "$PATH_SEPARATOR" = ';'; then + AC_DEFINE(HAVE_DOS_PATHS, 1, + [Define this if your system requires backslashes or drive specs in pathnames.]) +fi + + +# See if the user wants to use pmake's "customs" distributed build capability + +AC_SUBST(REMOTE) REMOTE=stub +use_customs=false +AC_ARG_WITH(customs, + AC_HELP_STRING([--with-customs=DIR], + [enable remote jobs via Customs--see README.customs]), + [case $withval in + n|no) : ;; + *) make_cppflags="$CPPFLAGS" + case $withval in + y|ye|yes) : ;; + *) CPPFLAGS="$CPPFLAGS -I$with_customs/include/customs" + make_ldflags="$LDFLAGS -L$with_customs/lib" ;; + esac + CF_NETLIBS + AC_CHECK_HEADER(customs.h, + [use_customs=true + REMOTE=cstms + LIBS="$LIBS -lcustoms" LDFLAGS="$make_ldflags"], + [with_customs=no + CPPFLAGS="$make_cppflags" make_badcust=yes]) + ;; + esac]) +# Tell automake about this, so it can include the right .c files. +AM_CONDITIONAL(USE_CUSTOMS, test "$use_customs" = true) + +# See if we can handle the job server feature, and if the user wants it. + +AC_ARG_ENABLE(job-server, + AC_HELP_STRING([--disable-job-server], + [disallow recursive make communication during -jN]), + [make_cv_job_server="$enableval" user_job_server="$enableval"], + [make_cv_job_server="yes"]) + +has_wait_nohang=yes +case "$ac_cv_func_waitpid/$ac_cv_func_wait3" in + no/no) has_wait_nohang=no ;; +esac + +AC_CACHE_CHECK(for SA_RESTART, make_cv_sa_restart, [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[return SA_RESTART;]])], + [make_cv_sa_restart=yes], + [make_cv_sa_restart=no])]) +if test "$make_cv_sa_restart" != no; then + AC_DEFINE(HAVE_SA_RESTART, 1, + [Define if defines the SA_RESTART constant.]) +fi + +case "$ac_cv_func_pipe/$ac_cv_func_sigaction/$make_cv_sa_restart/$has_wait_nohang/$make_cv_job_server" in + yes/yes/yes/yes/yes) + AC_DEFINE(MAKE_JOBSERVER, 1, + [Define this to enable job server support in GNU make.]);; +esac + +# Find the SCCS commands, so we can include them in our default rules. + +AC_CACHE_CHECK(for location of SCCS get command, make_cv_path_sccs_get, [ +if test -f /usr/sccs/get; then + make_cv_path_sccs_get=/usr/sccs/get +else + make_cv_path_sccs_get=get +fi]) +AC_DEFINE_UNQUOTED(SCCS_GET, ["$make_cv_path_sccs_get"], + [Define to the name of the SCCS 'get' command.]) + +ac_clean_files="$ac_clean_files s.conftest conftoast" # Remove these later. +if ( /usr/sccs/admin -n s.conftest || admin -n s.conftest ) >/dev/null 2>&1 && + test -f s.conftest; then + # We successfully created an SCCS file. + AC_CACHE_CHECK(if SCCS get command understands -G, make_cv_sys_get_minus_G, [ + if $make_cv_path_sccs_get -Gconftoast s.conftest >/dev/null 2>&1 && + test -f conftoast; then + make_cv_sys_get_minus_G=yes + else + make_cv_sys_get_minus_G=no + fi]) + case "$make_cv_sys_get_minus_G" in + yes) AC_DEFINE(SCCS_GET_MINUS_G, 1, + [Define this if the SCCS 'get' command understands the '-G' option.]);; + esac +fi +rm -f s.conftest conftoast + +# Check the system to see if it provides GNU glob. If not, use our +# local version. + +AC_MSG_CHECKING(if system libc has GNU glob) +AC_CACHE_VAL(make_cv_sys_gnu_glob, [ + AC_EGREP_CPP(gnu glob,[ +#include +#include +#include + +#define GLOB_INTERFACE_VERSION 1 +#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 +# include +# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION + gnu glob +# endif +#endif + ], [AC_MSG_RESULT(yes) +make_cv_sys_gnu_glob=yes], [AC_MSG_RESULT([no; using local copy]) +AC_SUBST(GLOBINC) GLOBINC='-I$(srcdir)/glob' +AC_SUBST(GLOBLIB) GLOBLIB=glob/libglob.a +make_cv_sys_gnu_glob=no])]) +# Tell automake about this, so it can build the right .c files. +AM_CONDITIONAL(USE_LOCAL_GLOB, test "$make_cv_sys_gnu_glob" = no) + +# Let the makefile know what our build host is + +AC_DEFINE_UNQUOTED(MAKE_HOST,"$host",[Build host information.]) +MAKE_HOST="$host" +AC_SUBST(MAKE_HOST) + +# Include the Maintainer's Makefile section, if it's here. + +MAINT_MAKEFILE=/dev/null +if test -r "$srcdir/maintMakefile"; then + MAINT_MAKEFILE="$srcdir/maintMakefile" +fi +AC_SUBST_FILE(MAINT_MAKEFILE) + +# Allow building with dmalloc +AM_WITH_DMALLOC + + +# Sanity check and inform the user of what we found + +case "$make_badcust" in + yes) echo + echo "WARNING: --with-customs specified but no customs.h could be found;" + echo " disabling Customs support." + echo ;; +esac + +case "$with_customs" in + ""|n|no|y|ye|yes) ;; + *) if test -f "$with_customs/lib/libcustoms.a"; then + : + else + echo + echo "WARNING: '$with_customs/lib' does not appear to contain the" + echo " Customs library. You must build and install Customs" + echo " before compiling GNU make." + echo + fi ;; +esac + +case "$has_wait_nohang" in + no) echo + echo "WARNING: Your system has neither waitpid() nor wait3()." + echo " Without one of these, signal handling is unreliable." + echo " You should be aware that running GNU make with -j" + echo " could result in erratic behavior." + echo ;; +esac + +case "$make_cv_job_server/$user_job_server" in + no/yes) echo + echo "WARNING: Make job server requires a POSIX-ish system that" + echo " supports the pipe(), sigaction(), and either" + echo " waitpid() or wait3() functions. Your system doesn't" + echo " appear to provide one or more of those." + echo " Disabling job server support." + echo ;; +esac + + +# Specify what files are to be created. +# We only generate the build.sh if we have a build.sh.in; we won't have +# one before we've created a distribution. + +AC_CONFIG_FILES(Makefile glob/Makefile po/Makefile.in config/Makefile doc/Makefile) + +if test -f $srcdir/build.sh.in; then + AC_CONFIG_FILES(build.sh) +fi + + +# OK, do it! + +AC_OUTPUT + + +dnl Local Variables: +dnl comment-start: "dnl " +dnl comment-end: "" +dnl comment-start-skip: "\\bdnl\\b\\s *" +dnl compile-command: "make configure config.h.in" +dnl End: diff --git a/src/mkutil/make/debug.h b/src/mkutil/make/debug.h new file mode 100644 index 00000000..30c2d627 --- /dev/null +++ b/src/mkutil/make/debug.h @@ -0,0 +1,41 @@ +/* Debugging macros and interface. +Copyright (C) 1999 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + + +#define DB_NONE (0x000) +#define DB_BASIC (0x001) +#define DB_VERBOSE (0x002) +#define DB_JOBS (0x004) +#define DB_IMPLICIT (0x008) +#define DB_MAKEFILES (0x100) + +#define DB_ALL (0xfff) + +extern int db_level; + +#define ISDB(_l) ((_l)&db_level) + +#define DBS(_l,_x) do{ if(ISDB(_l)) {print_spaces (depth); \ + printf _x; fflush (stdout);} }while(0) + +#define DBF(_l,_x) do{ if(ISDB(_l)) {print_spaces (depth); \ + printf (_x, file->name); \ + fflush (stdout);} }while(0) + +#define DB(_l,_x) do{ if(ISDB(_l)) {printf _x; fflush (stdout);} }while(0) diff --git a/src/mkutil/make/default.c b/src/mkutil/make/default.c new file mode 100644 index 00000000..dabe18ae --- /dev/null +++ b/src/mkutil/make/default.c @@ -0,0 +1,591 @@ +/* Data base of default implicit rules for GNU Make. +Copyright (C) 1988,89,90,91,92,93,94,95,96 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "filedef.h" +#include "variable.h" +#include "rule.h" +#include "dep.h" +#include "job.h" +#include "commands.h" + +/* Define GCC_IS_NATIVE if gcc is the native development environment on + your system (gcc/bison/flex vs cc/yacc/lex). */ +#if defined(__MSDOS__) || defined(__EMX__) +# define GCC_IS_NATIVE +#endif + + +/* This is the default list of suffixes for suffix rules. + `.s' must come last, so that a `.o' file will be made from + a `.c' or `.p' or ... file rather than from a .s file. */ + +static char default_suffixes[] +#ifdef VMS + = ".exe .olb .ln .obj .c .cxx .cc .pas .p .for .f .r .y .l .mar \ +.s .ss .i .ii .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo \ +.w .ch .cweb .web .com .sh .elc .el"; +#elif defined(__EMX__) + = ".out .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l .s .S \ +.mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo \ +.w .ch .web .sh .elc .el .obj .exe .dll .lib"; +#else + = ".out .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l .s .S \ +.mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo \ +.w .ch .web .sh .elc .el"; +#endif + +static struct pspec default_pattern_rules[] = + { + { "(%)", "%", + "$(AR) $(ARFLAGS) $@ $<" }, + + /* The X.out rules are only in BSD's default set because + BSD Make has no null-suffix rules, so `foo.out' and + `foo' are the same thing. */ +#ifdef VMS + { "%.exe", "%", + "copy $< $@" }, +#else + { "%.out", "%", + "@rm -f $@ \n cp $< $@" }, +#endif + /* Syntax is "ctangle foo.w foo.ch foo.c". */ + { "%.c", "%.w %.ch", + "$(CTANGLE) $^ $@" }, + { "%.tex", "%.w %.ch", + "$(CWEAVE) $^ $@" }, + + { 0, 0, 0 } + }; + +static struct pspec default_terminal_rules[] = + { +#ifdef VMS + /* RCS. */ + { "%", "%$$5lv", /* Multinet style */ + "if f$$search($@) .nes. \"\" then +$(CHECKOUT,v)" }, + { "%", "[.$$rcs]%$$5lv", /* Multinet style */ + "if f$$search($@) .nes. \"\" then +$(CHECKOUT,v)" }, + { "%", "%_v", /* Normal style */ + "if f$$search($@) .nes. \"\" then +$(CHECKOUT,v)" }, + { "%", "[.rcs]%_v", /* Normal style */ + "if f$$search($@) .nes. \"\" then +$(CHECKOUT,v)" }, + + /* SCCS. */ + /* ain't no SCCS on vms */ +#else + /* RCS. */ + { "%", "%,v", + "$(CHECKOUT,v)" }, + { "%", "RCS/%,v", + "$(CHECKOUT,v)" }, + { "%", "RCS/%", + "$(CHECKOUT,v)" }, + + /* SCCS. */ + { "%", "s.%", + "$(GET) $(GFLAGS) $(SCCS_OUTPUT_OPTION) $<" }, + { "%", "SCCS/s.%", + "$(GET) $(GFLAGS) $(SCCS_OUTPUT_OPTION) $<" }, +#endif /* !VMS */ + { 0, 0, 0 } + }; + +static char *default_suffix_rules[] = + { +#ifdef VMS + ".obj.exe", + "$(LINK.obj) $^ $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@", + ".mar.exe", + "$(COMPILE.mar) $^ \n $(LINK.obj) $(subst .mar,.obj,$^) $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@", + ".s.exe", + "$(COMPILE.s) $^ \n $(LINK.obj) $(subst .s,.obj,$^) $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@", + ".c.exe", + "$(COMPILE.c) $^ \n $(LINK.obj) $(subst .c,.obj,$^) $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@", + ".cc.exe", +#ifdef GCC_IS_NATIVE + "$(COMPILE.cc) $^ \n $(LINK.obj) $(CXXSTARTUP),sys$$disk:[]$(subst .cc,.obj,$^) $(LOADLIBES) $(LXLIBS) $(LDLIBS) $(CXXRT0) /exe=$@", +#else + "$(COMPILE.cc) $^ \n $(CXXLINK.obj) $(subst .cc,.obj,$^) $(LOADLIBES) $(LXLIBS) $(LDLIBS) $(CXXRT0) /exe=$@", + ".cxx.exe", + "$(COMPILE.cxx) $^ \n $(CXXLINK.obj) $(subst .cxx,.obj,$^) $(LOADLIBES) $(LXLIBS) $(LDLIBS) $(CXXRT0) /exe=$@", +#endif + ".for.exe", + "$(COMPILE.for) $^ \n $(LINK.obj) $(subst .for,.obj,$^) $(LOADLIBES) $(LDLIBS) /exe=$@", + ".pas.exe", + "$(COMPILE.pas) $^ \n $(LINK.obj) $(subst .pas,.obj,$^) $(LOADLIBES) $(LDLIBS) /exe=$@", + + ".com", + "copy $< >$@", + + ".mar.obj", + "$(COMPILE.mar) /obj=$@ $<", + ".s.obj", + "$(COMPILE.s) /obj=$@ $<", + ".ss.obj", + "$(COMPILE.s) /obj=$@ $<", + ".c.i", + "$(COMPILE.c)/prep /list=$@ $<", + ".c.s", + "$(COMPILE.c)/noobj/machine /list=$@ $<", + ".i.s", + "$(COMPILE.c)/noprep/noobj/machine /list=$@ $<", + ".c.obj", + "$(COMPILE.c) /obj=$@ $<", + ".cc.ii", + "$(COMPILE.cc)/prep /list=$@ $<", + ".cc.ss", + "$(COMPILE.cc)/noobj/machine /list=$@ $<", + ".ii.ss", + "$(COMPILE.cc)/noprep/noobj/machine /list=$@ $<", + ".cc.obj", + "$(COMPILE.cc) /obj=$@ $<", + ".cxx.obj", + "$(COMPILE.cxx) /obj=$@ $<", + ".for.obj", + "$(COMPILE.for) /obj=$@ $<", + ".pas.obj", + "$(COMPILE.pas) /obj=$@ $<", + + ".y.c", + "$(YACC.y) $< \n rename y_tab.c $@", + ".l.c", + "$(LEX.l) $< \n rename lexyy.c $@", + + ".texinfo.info", + "$(MAKEINFO) $<", + + ".tex.dvi", + "$(TEX) $<", + +#else /* ! VMS */ + + ".o", + "$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@", + ".s", + "$(LINK.s) $^ $(LOADLIBES) $(LDLIBS) -o $@", + ".S", + "$(LINK.S) $^ $(LOADLIBES) $(LDLIBS) -o $@", + ".c", + "$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@", + ".cc", + "$(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@", + ".C", + "$(LINK.C) $^ $(LOADLIBES) $(LDLIBS) -o $@", + ".cpp", + "$(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@", + ".f", + "$(LINK.f) $^ $(LOADLIBES) $(LDLIBS) -o $@", + ".p", + "$(LINK.p) $^ $(LOADLIBES) $(LDLIBS) -o $@", + ".F", + "$(LINK.F) $^ $(LOADLIBES) $(LDLIBS) -o $@", + ".r", + "$(LINK.r) $^ $(LOADLIBES) $(LDLIBS) -o $@", + ".mod", + "$(COMPILE.mod) -o $@ -e $@ $^", + + ".def.sym", + "$(COMPILE.def) -o $@ $<", + + ".sh", + "cat $< >$@ \n chmod a+x $@", + + ".s.o", + "$(COMPILE.s) -o $@ $<", + ".S.o", + "$(COMPILE.S) -o $@ $<", + ".c.o", + "$(COMPILE.c) $(OUTPUT_OPTION) $<", + ".cc.o", + "$(COMPILE.cc) $(OUTPUT_OPTION) $<", + ".C.o", + "$(COMPILE.C) $(OUTPUT_OPTION) $<", + ".cpp.o", + "$(COMPILE.cpp) $(OUTPUT_OPTION) $<", + ".f.o", + "$(COMPILE.f) $(OUTPUT_OPTION) $<", + ".p.o", + "$(COMPILE.p) $(OUTPUT_OPTION) $<", + ".F.o", + "$(COMPILE.F) $(OUTPUT_OPTION) $<", + ".r.o", + "$(COMPILE.r) $(OUTPUT_OPTION) $<", + ".mod.o", + "$(COMPILE.mod) -o $@ $<", + + ".c.ln", + "$(LINT.c) -C$* $<", + ".y.ln", +#ifndef __MSDOS__ + "$(YACC.y) $< \n $(LINT.c) -C$* y.tab.c \n $(RM) y.tab.c", +#else + "$(YACC.y) $< \n $(LINT.c) -C$* y_tab.c \n $(RM) y_tab.c", +#endif + ".l.ln", + "@$(RM) $*.c\n $(LEX.l) $< > $*.c\n$(LINT.c) -i $*.c -o $@\n $(RM) $*.c", + + ".y.c", +#ifndef __MSDOS__ + "$(YACC.y) $< \n mv -f y.tab.c $@", +#else + "$(YACC.y) $< \n mv -f y_tab.c $@", +#endif + ".l.c", + "@$(RM) $@ \n $(LEX.l) $< > $@", + + ".F.f", + "$(PREPROCESS.F) $(OUTPUT_OPTION) $<", + ".r.f", + "$(PREPROCESS.r) $(OUTPUT_OPTION) $<", + + /* This might actually make lex.yy.c if there's no %R% + directive in $*.l, but in that case why were you + trying to make $*.r anyway? */ + ".l.r", + "$(LEX.l) $< > $@ \n mv -f lex.yy.r $@", + + ".S.s", + "$(PREPROCESS.S) $< > $@", + + ".texinfo.info", + "$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@", + + ".texi.info", + "$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@", + + ".txinfo.info", + "$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@", + + ".tex.dvi", + "$(TEX) $<", + + ".texinfo.dvi", + "$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<", + + ".texi.dvi", + "$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<", + + ".txinfo.dvi", + "$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<", + + ".w.c", + "$(CTANGLE) $< - $@", /* The `-' says there is no `.ch' file. */ + + ".web.p", + "$(TANGLE) $<", + + ".w.tex", + "$(CWEAVE) $< - $@", /* The `-' says there is no `.ch' file. */ + + ".web.tex", + "$(WEAVE) $<", + +#endif /* !VMS */ + + 0, 0, + }; + +static char *default_variables[] = + { +#ifdef VMS +#ifdef __ALPHA + "ARCH", "ALPHA", +#else + "ARCH", "VAX", +#endif + "AR", "library/obj", + "ARFLAGS", "/replace", + "AS", "macro", + "MACRO", "macro", +#ifdef GCC_IS_NATIVE + "CC", "gcc", +#else + "CC", "cc", +#endif + "CD", "builtin_cd", + "MAKE", "make", + "ECHO", "write sys$$output \"", +#ifdef GCC_IS_NATIVE + "C++", "gcc/plus", + "CXX", "gcc/plus", +#else + "C++", "cxx", + "CXX", "cxx", + "CXXLD", "cxxlink", +#endif + "CO", "co", + "CPP", "$(CC) /preprocess_only", + "FC", "fortran", + /* System V uses these, so explicit rules using them should work. + However, there is no way to make implicit rules use them and FC. */ + "F77", "$(FC)", + "F77FLAGS", "$(FFLAGS)", + "LD", "link", + "LEX", "lex", + "PC", "pascal", + "YACC", "bison/yacc", + "YFLAGS", "/Define/Verbose", + "BISON", "bison", + "MAKEINFO", "makeinfo", + "TEX", "tex", + "TEXINDEX", "texindex", + + "RM", "delete/nolog", + + "CSTARTUP", "", +#ifdef GCC_IS_NATIVE + "CRT0", ",sys$$library:vaxcrtl.olb/lib,gnu_cc_library:crt0.obj", + "CXXSTARTUP", "gnu_cc_library:crtbegin.obj", + "CXXRT0", ",sys$$library:vaxcrtl.olb/lib,gnu_cc_library:crtend.obj,gnu_cc_library:gxx_main.obj", + "LXLIBS", ",gnu_cc_library:libstdcxx.olb/lib,gnu_cc_library:libgccplus.olb/lib", + "LDLIBS", ",gnu_cc_library:libgcc.olb/lib", +#else + "CRT0", "", + "CXXSTARTUP", "", + "CXXRT0", "", + "LXLIBS", "", + "LDLIBS", "", +#endif + + "LINK.obj", "$(LD) $(LDFLAGS)", +#ifndef GCC_IS_NATIVE + "CXXLINK.obj", "$(CXXLD) $(LDFLAGS)", + "COMPILE.cxx", "$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH)", +#endif + "COMPILE.c", "$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)", + "COMPILE.cc", "$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH)", + "YACC.y", "$(YACC) $(YFLAGS)", + "LEX.l", "$(LEX) $(LFLAGS)", + "COMPILE.for", "$(FC) $(FFLAGS) $(TARGET_ARCH)", + "COMPILE.pas", "$(PC) $(PFLAGS) $(CPPFLAGS) $(TARGET_ARCH)", + "COMPILE.mar", "$(MACRO) $(MACROFLAGS)", + "COMPILE.s", "$(AS) $(ASFLAGS) $(TARGET_MACH)", + "LINT.c", "$(LINT) $(LINTFLAGS) $(CPPFLAGS) $(TARGET_ARCH)", + + "MV", "rename/new_version", + "CP", "copy", + +#else /* !VMS */ + + "AR", "ar", + "ARFLAGS", "rv", + "AS", "as", +#ifdef GCC_IS_NATIVE + "CC", "gcc", +# ifdef __MSDOS__ + "CXX", "gpp", /* g++ is an invalid name on MSDOS */ +# else + "CXX", "gcc", +# endif /* __MSDOS__ */ +#else + "CC", "cc", + "CXX", "g++", +#endif + + /* This expands to $(CO) $(COFLAGS) $< $@ if $@ does not exist, + and to the empty string if $@ does exist. */ + "CHECKOUT,v", "+$(if $(wildcard $@),,$(CO) $(COFLAGS) $< $@)", + "CO", "co", + "COFLAGS", "", + + "CPP", "$(CC) -E", +#ifdef CRAY + "CF77PPFLAGS", "-P", + "CF77PP", "/lib/cpp", + "CFT", "cft77", + "CF", "cf77", + "FC", "$(CF)", +#else /* Not CRAY. */ +#ifdef _IBMR2 + "FC", "xlf", +#else +#ifdef __convex__ + "FC", "fc", +#else + "FC", "f77", +#endif /* __convex__ */ +#endif /* _IBMR2 */ + /* System V uses these, so explicit rules using them should work. + However, there is no way to make implicit rules use them and FC. */ + "F77", "$(FC)", + "F77FLAGS", "$(FFLAGS)", +#endif /* Cray. */ + "GET", SCCS_GET, + "LD", "ld", +#ifdef GCC_IS_NATIVE + "LEX", "flex", +#else + "LEX", "lex", +#endif + "LINT", "lint", + "M2C", "m2c", +#ifdef pyr + "PC", "pascal", +#else +#ifdef CRAY + "PC", "PASCAL", + "SEGLDR", "segldr", +#else + "PC", "pc", +#endif /* CRAY. */ +#endif /* pyr. */ +#ifdef GCC_IS_NATIVE + "YACC", "bison -y", +#else + "YACC", "yacc", /* Or "bison -y" */ +#endif + "MAKEINFO", "makeinfo", + "TEX", "tex", + "TEXI2DVI", "texi2dvi", + "WEAVE", "weave", + "CWEAVE", "cweave", + "TANGLE", "tangle", + "CTANGLE", "ctangle", + + "RM", "rm -f", + + "LINK.o", "$(CC) $(LDFLAGS) $(TARGET_ARCH)", + "COMPILE.c", "$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c", + "LINK.c", "$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)", + "COMPILE.cc", "$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c", + "COMPILE.C", "$(COMPILE.cc)", + "COMPILE.cpp", "$(COMPILE.cc)", + "LINK.cc", "$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)", + "LINK.C", "$(LINK.cc)", + "LINK.cpp", "$(LINK.cc)", + "YACC.y", "$(YACC) $(YFLAGS)", + "LEX.l", "$(LEX) $(LFLAGS) -t", + "COMPILE.f", "$(FC) $(FFLAGS) $(TARGET_ARCH) -c", + "LINK.f", "$(FC) $(FFLAGS) $(LDFLAGS) $(TARGET_ARCH)", + "COMPILE.F", "$(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c", + "LINK.F", "$(FC) $(FFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)", + "COMPILE.r", "$(FC) $(FFLAGS) $(RFLAGS) $(TARGET_ARCH) -c", + "LINK.r", "$(FC) $(FFLAGS) $(RFLAGS) $(LDFLAGS) $(TARGET_ARCH)", + "COMPILE.def", "$(M2C) $(M2FLAGS) $(DEFFLAGS) $(TARGET_ARCH)", + "COMPILE.mod", "$(M2C) $(M2FLAGS) $(MODFLAGS) $(TARGET_ARCH)", + "COMPILE.p", "$(PC) $(PFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c", + "LINK.p", "$(PC) $(PFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)", + "LINK.s", "$(CC) $(ASFLAGS) $(LDFLAGS) $(TARGET_MACH)", + "COMPILE.s", "$(AS) $(ASFLAGS) $(TARGET_MACH)", + "LINK.S", "$(CC) $(ASFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_MACH)", + "COMPILE.S", "$(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_MACH) -c", + "PREPROCESS.S", "$(CC) -E $(CPPFLAGS)", + "PREPROCESS.F", "$(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -F", + "PREPROCESS.r", "$(FC) $(FFLAGS) $(RFLAGS) $(TARGET_ARCH) -F", + "LINT.c", "$(LINT) $(LINTFLAGS) $(CPPFLAGS) $(TARGET_ARCH)", + +#ifndef NO_MINUS_C_MINUS_O + "OUTPUT_OPTION", "-o $@", +#endif + +#ifdef SCCS_GET_MINUS_G + "SCCS_OUTPUT_OPTION", "-G$@", +#endif + +#ifdef _AMIGA + ".LIBPATTERNS", "%.lib", +#else +#ifdef __MSDOS__ + ".LIBPATTERNS", "lib%.a $(DJDIR)/lib/lib%.a", +#else + ".LIBPATTERNS", "lib%.so lib%.a", +#endif +#endif + +#endif /* !VMS */ + 0, 0 + }; + +/* Set up the default .SUFFIXES list. */ + +void +set_default_suffixes (void) +{ + suffix_file = enter_file (".SUFFIXES"); + + if (no_builtin_rules_flag) + (void) define_variable ("SUFFIXES", 8, "", o_default, 0); + else + { + char *p = default_suffixes; + suffix_file->deps = (struct dep *) + multi_glob (parse_file_seq (&p, '\0', sizeof (struct dep), 1), + sizeof (struct dep)); + (void) define_variable ("SUFFIXES", 8, default_suffixes, o_default, 0); + } +} + +/* Enter the default suffix rules as file rules. This used to be done in + install_default_implicit_rules, but that loses because we want the + suffix rules installed before reading makefiles, and thee pattern rules + installed after. */ + +void +install_default_suffix_rules (void) +{ + register char **s; + + if (no_builtin_rules_flag) + return; + + for (s = default_suffix_rules; *s != 0; s += 2) + { + register struct file *f = enter_file (s[0]); + /* Don't clobber cmds given in a makefile if there were any. */ + if (f->cmds == 0) + { + f->cmds = (struct commands *) xmalloc (sizeof (struct commands)); + f->cmds->fileinfo.filenm = 0; + f->cmds->commands = s[1]; + f->cmds->command_lines = 0; + } + } +} + + +/* Install the default pattern rules. */ + +void +install_default_implicit_rules (void) +{ + register struct pspec *p; + + if (no_builtin_rules_flag) + return; + + for (p = default_pattern_rules; p->target != 0; ++p) + install_pattern_rule (p, 0); + + for (p = default_terminal_rules; p->target != 0; ++p) + install_pattern_rule (p, 1); +} + +void +define_default_variables (void) +{ + register char **s; + + if (no_builtin_variables_flag) + return; + + for (s = default_variables; *s != 0; s += 2) + (void) define_variable (s[0], strlen (s[0]), s[1], o_default, 1); +} diff --git a/src/mkutil/make/dep.h b/src/mkutil/make/dep.h new file mode 100644 index 00000000..7f4380b7 --- /dev/null +++ b/src/mkutil/make/dep.h @@ -0,0 +1,78 @@ +/* Definitions of dependency data structures for GNU Make. +Copyright (C) 1988, 1989, 1991, 1992, 1993, 1996 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Flag bits for the second argument to `read_makefile'. + These flags are saved in the `changed' field of each + `struct dep' in the chain returned by `read_all_makefiles'. */ + +#define RM_NO_DEFAULT_GOAL (1 << 0) /* Do not set default goal. */ +#define RM_INCLUDED (1 << 1) /* Search makefile search path. */ +#define RM_DONTCARE (1 << 2) /* No error if it doesn't exist. */ +#define RM_NO_TILDE (1 << 3) /* Don't expand ~ in file name. */ +#define RM_NOFLAG 0 + +/* Structure representing one dependency of a file. + Each struct file's `deps' points to a chain of these, + chained through the `next'. + + Note that the first two words of this match a struct nameseq. */ + +struct dep + { + struct dep *next; + char *name; + struct file *file; + unsigned int changed : 8; + unsigned int ignore_mtime : 1; + }; + + +/* Structure used in chains of names, for parsing and globbing. */ + +struct nameseq + { + struct nameseq *next; + char *name; + }; + + +extern struct nameseq *multi_glob PARAMS ((struct nameseq *chain, unsigned int size)); +#ifdef VMS +extern struct nameseq *parse_file_seq (); +#else +extern struct nameseq *parse_file_seq PARAMS ((char **stringp, int stopchar, unsigned int size, int strip)); +#endif +extern char *tilde_expand PARAMS ((char *name)); + +#ifndef NO_ARCHIVES +extern struct nameseq *ar_glob PARAMS ((char *arname, char *member_pattern, unsigned int size)); +#endif + +#ifndef iAPX286 +#define dep_name(d) ((d)->name == 0 ? (d)->file->name : (d)->name) +#else +/* Buggy compiler can't hack this. */ +extern char *dep_name (); +#endif + +extern struct dep *copy_dep_chain PARAMS ((struct dep *d)); +extern struct dep *read_all_makefiles PARAMS ((char **makefiles)); +extern int eval_buffer PARAMS ((char *buffer)); +extern int update_goal_chain PARAMS ((struct dep *goals, int makefiles)); +extern void uniquize_deps PARAMS ((struct dep *)); diff --git a/src/mkutil/make/dir.c b/src/mkutil/make/dir.c new file mode 100644 index 00000000..2e8f9432 --- /dev/null +++ b/src/mkutil/make/dir.c @@ -0,0 +1,1192 @@ +/* Directory hashing for GNU Make. +Copyright (C) 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, +2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "hash.h" + +#ifdef HAVE_DIRENT_H +# include +# define NAMLEN(dirent) strlen((dirent)->d_name) +# ifdef VMS +extern char *vmsify PARAMS ((char *name, int type)); +# endif +#else +# define dirent direct +# define NAMLEN(dirent) (dirent)->d_namlen +# ifdef HAVE_SYS_NDIR_H +# include +# endif +# ifdef HAVE_SYS_DIR_H +# include +# endif +# ifdef HAVE_NDIR_H +# include +# endif +# ifdef HAVE_VMSDIR_H +# include "vmsdir.h" +# endif /* HAVE_VMSDIR_H */ +#endif + +/* In GNU systems, defines this macro for us. */ +#ifdef _D_NAMLEN +# undef NAMLEN +# define NAMLEN(d) _D_NAMLEN(d) +#endif + +#if (defined (POSIX) || defined (VMS) || defined (WINDOWS32)) && !defined (__GNU_LIBRARY__) +/* Posix does not require that the d_ino field be present, and some + systems do not provide it. */ +# define REAL_DIR_ENTRY(dp) 1 +# define FAKE_DIR_ENTRY(dp) +#else +# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) +# define FAKE_DIR_ENTRY(dp) (dp->d_ino = 1) +#endif /* POSIX */ + +#ifdef __MSDOS__ +#include +#include + +/* If it's MSDOS that doesn't have _USE_LFN, disable LFN support. */ +#ifndef _USE_LFN +#define _USE_LFN 0 +#endif + +static char * +dosify (char *filename) +{ + static char dos_filename[14]; + char *df; + int i; + + if (filename == 0 || _USE_LFN) + return filename; + + /* FIXME: what about filenames which violate + 8+3 constraints, like "config.h.in", or ".emacs"? */ + if (strpbrk (filename, "\"*+,;<=>?[\\]|") != 0) + return filename; + + df = dos_filename; + + /* First, transform the name part. */ + for (i = 0; *filename != '\0' && i < 8 && *filename != '.'; ++i) + *df++ = tolower ((unsigned char)*filename++); + + /* Now skip to the next dot. */ + while (*filename != '\0' && *filename != '.') + ++filename; + if (*filename != '\0') + { + *df++ = *filename++; + for (i = 0; *filename != '\0' && i < 3 && *filename != '.'; ++i) + *df++ = tolower ((unsigned char)*filename++); + } + + /* Look for more dots. */ + while (*filename != '\0' && *filename != '.') + ++filename; + if (*filename == '.') + return filename; + *df = 0; + return dos_filename; +} +#endif /* __MSDOS__ */ + +#ifdef WINDOWS32 +#include "pathstuff.h" +#endif + +#ifdef _AMIGA +#include +#endif + +#ifdef HAVE_CASE_INSENSITIVE_FS +static char * +downcase (char *filename) +{ +#ifdef _AMIGA + static char new_filename[136]; +#else + static char new_filename[PATH_MAX]; +#endif + char *df; + int i; + + if (filename == 0) + return 0; + + df = new_filename; + + /* First, transform the name part. */ + for (i = 0; *filename != '\0'; ++i) + { + *df++ = tolower ((unsigned char)*filename); + ++filename; + } + + *df = 0; + + return new_filename; +} +#endif /* HAVE_CASE_INSENSITIVE_FS */ + +#ifdef VMS + +static int +vms_hash (char *name) +{ + int h = 0; + int g; + + while (*name) + { + unsigned char uc = *name; + h = (h << 4) + (isupper (uc) ? tolower (uc) : uc); + name++; + g = h & 0xf0000000; + if (g) + { + h = h ^ (g >> 24); + h = h ^ g; + } + } + return h; +} + +/* fake stat entry for a directory */ +static int +vmsstat_dir (char *name, struct stat *st) +{ + char *s; + int h; + DIR *dir; + + dir = opendir (name); + if (dir == 0) + return -1; + closedir (dir); + s = strchr (name, ':'); /* find device */ + if (s) + { + *s++ = 0; + st->st_dev = (char *)vms_hash (name); + h = vms_hash (s); + *(s-1) = ':'; + } + else + { + st->st_dev = 0; + s = name; + h = vms_hash (s); + } + + st->st_ino[0] = h & 0xff; + st->st_ino[1] = h & 0xff00; + st->st_ino[2] = h >> 16; + + return 0; +} +#endif /* VMS */ + +/* Hash table of directories. */ + +#ifndef DIRECTORY_BUCKETS +#define DIRECTORY_BUCKETS 199 +#endif + +struct directory_contents + { + dev_t dev; /* Device and inode numbers of this dir. */ +#ifdef WINDOWS32 + /* + * Inode means nothing on WINDOWS32. Even file key information is + * unreliable because it is random per file open and undefined + * for remote filesystems. The most unique attribute I can + * come up with is the fully qualified name of the directory. Beware + * though, this is also unreliable. I'm open to suggestion on a better + * way to emulate inode. + */ + char *path_key; + int ctime; + int mtime; /* controls check for stale directory cache */ + int fs_flags; /* FS_FAT, FS_NTFS, ... */ +#define FS_FAT 0x1 +#define FS_NTFS 0x2 +#define FS_UNKNOWN 0x4 +#else +#ifdef VMS + ino_t ino[3]; +#else + ino_t ino; +#endif +#endif /* WINDOWS32 */ + struct hash_table dirfiles; /* Files in this directory. */ + DIR *dirstream; /* Stream reading this directory. */ + }; + +static unsigned long +directory_contents_hash_1 (const void *key_0) +{ + struct directory_contents const *key = (struct directory_contents const *) key_0; + unsigned long hash; + +#ifdef WINDOWS32 + ISTRING_HASH_1 (key->path_key, hash); + hash ^= ((unsigned int) key->dev << 4) ^ (unsigned int) key->ctime; +#else +# ifdef VMS + hash = (((unsigned int) key->dev << 4) + ^ ((unsigned int) key->ino[0] + + (unsigned int) key->ino[1] + + (unsigned int) key->ino[2])); +# else + hash = ((unsigned int) key->dev << 4) ^ (unsigned int) key->ino; +# endif +#endif /* WINDOWS32 */ + return hash; +} + +static unsigned long +directory_contents_hash_2 (const void *key_0) +{ + struct directory_contents const *key = (struct directory_contents const *) key_0; + unsigned long hash; + +#ifdef WINDOWS32 + ISTRING_HASH_2 (key->path_key, hash); + hash ^= ((unsigned int) key->dev << 4) ^ (unsigned int) ~key->ctime; +#else +# ifdef VMS + hash = (((unsigned int) key->dev << 4) + ^ ~((unsigned int) key->ino[0] + + (unsigned int) key->ino[1] + + (unsigned int) key->ino[2])); +# else + hash = ((unsigned int) key->dev << 4) ^ (unsigned int) ~key->ino; +# endif +#endif /* WINDOWS32 */ + + return hash; +} + +static int +directory_contents_hash_cmp (const void *xv, const void *yv) +{ + struct directory_contents const *x = (struct directory_contents const *) xv; + struct directory_contents const *y = (struct directory_contents const *) yv; + int result; + +#ifdef WINDOWS32 + ISTRING_COMPARE (x->path_key, y->path_key, result); + if (result) + return result; + result = x->ctime - y->ctime; + if (result) + return result; +#else +# ifdef VMS + result = x->ino[0] - y->ino[0]; + if (result) + return result; + result = x->ino[1] - y->ino[1]; + if (result) + return result; + result = x->ino[2] - y->ino[2]; + if (result) + return result; +# else + result = x->ino - y->ino; + if (result) + return result; +# endif +#endif /* WINDOWS32 */ + + return x->dev - y->dev; +} + +/* Table of directory contents hashed by device and inode number. */ +static struct hash_table directory_contents; + +struct directory + { + char *name; /* Name of the directory. */ + + /* The directory's contents. This data may be shared by several + entries in the hash table, which refer to the same directory + (identified uniquely by `dev' and `ino') under different names. */ + struct directory_contents *contents; + }; + +static unsigned long +directory_hash_1 (const void *key) +{ + return_ISTRING_HASH_1 (((struct directory const *) key)->name); +} + +static unsigned long +directory_hash_2 (const void *key) +{ + return_ISTRING_HASH_2 (((struct directory const *) key)->name); +} + +static int +directory_hash_cmp (const void *x, const void *y) +{ + return_ISTRING_COMPARE (((struct directory const *) x)->name, + ((struct directory const *) y)->name); +} + +/* Table of directories hashed by name. */ +static struct hash_table directories; + +/* Never have more than this many directories open at once. */ + +#define MAX_OPEN_DIRECTORIES 10 + +static unsigned int open_directories = 0; + + +/* Hash table of files in each directory. */ + +struct dirfile + { + char *name; /* Name of the file. */ + short length; + short impossible; /* This file is impossible. */ + }; + +static unsigned long +dirfile_hash_1 (const void *key) +{ + return_ISTRING_HASH_1 (((struct dirfile const *) key)->name); +} + +static unsigned long +dirfile_hash_2 (const void *key) +{ + return_ISTRING_HASH_2 (((struct dirfile const *) key)->name); +} + +static int +dirfile_hash_cmp (const void *xv, const void *yv) +{ + struct dirfile const *x = ((struct dirfile const *) xv); + struct dirfile const *y = ((struct dirfile const *) yv); + int result = x->length - y->length; + if (result) + return result; + return_ISTRING_COMPARE (x->name, y->name); +} + +#ifndef DIRFILE_BUCKETS +#define DIRFILE_BUCKETS 107 +#endif + +static int dir_contents_file_exists_p PARAMS ((struct directory_contents *dir, char *filename)); +static struct directory *find_directory PARAMS ((char *name)); + +/* Find the directory named NAME and return its `struct directory'. */ + +static struct directory * +find_directory (char *name) +{ + register char *p; + register struct directory *dir; + register struct directory **dir_slot; + struct directory dir_key; + int r; +#ifdef WINDOWS32 + char* w32_path; + char fs_label[BUFSIZ]; + char fs_type[BUFSIZ]; + long fs_serno; + long fs_flags; + long fs_len; +#endif +#ifdef VMS + if ((*name == '.') && (*(name+1) == 0)) + name = "[]"; + else + name = vmsify (name,1); +#endif + + dir_key.name = name; + dir_slot = (struct directory **) hash_find_slot (&directories, &dir_key); + dir = *dir_slot; + + if (HASH_VACANT (dir)) + { + struct stat st; + + /* The directory was not found. Create a new entry for it. */ + + p = name + strlen (name); + dir = (struct directory *) xmalloc (sizeof (struct directory)); + dir->name = savestring (name, p - name); + hash_insert_at (&directories, dir, dir_slot); + /* The directory is not in the name hash table. + Find its device and inode numbers, and look it up by them. */ + +#ifdef WINDOWS32 + /* Remove any trailing '\'. Windows32 stat fails even on valid + directories if they end in '\'. */ + if (p[-1] == '\\') + p[-1] = '\0'; +#endif + +#ifdef VMS + r = vmsstat_dir (name, &st); +#else + EINTRLOOP (r, stat (name, &st)); +#endif + +#ifdef WINDOWS32 + /* Put back the trailing '\'. If we don't, we're permanently + truncating the value! */ + if (p[-1] == '\0') + p[-1] = '\\'; +#endif + + if (r < 0) + { + /* Couldn't stat the directory. Mark this by + setting the `contents' member to a nil pointer. */ + dir->contents = 0; + } + else + { + /* Search the contents hash table; device and inode are the key. */ + + struct directory_contents *dc; + struct directory_contents **dc_slot; + struct directory_contents dc_key; + + dc_key.dev = st.st_dev; +#ifdef WINDOWS32 + dc_key.path_key = w32_path = w32ify (name, 1); + dc_key.ctime = st.st_ctime; +#else +# ifdef VMS + dc_key.ino[0] = st.st_ino[0]; + dc_key.ino[1] = st.st_ino[1]; + dc_key.ino[2] = st.st_ino[2]; +# else + dc_key.ino = st.st_ino; +# endif +#endif + dc_slot = (struct directory_contents **) hash_find_slot (&directory_contents, &dc_key); + dc = *dc_slot; + + if (HASH_VACANT (dc)) + { + /* Nope; this really is a directory we haven't seen before. */ + + dc = (struct directory_contents *) + xmalloc (sizeof (struct directory_contents)); + + /* Enter it in the contents hash table. */ + dc->dev = st.st_dev; +#ifdef WINDOWS32 + dc->path_key = xstrdup (w32_path); + dc->ctime = st.st_ctime; + dc->mtime = st.st_mtime; + + /* + * NTFS is the only WINDOWS32 filesystem that bumps mtime + * on a directory when files are added/deleted from + * a directory. + */ + w32_path[3] = '\0'; + if (GetVolumeInformation(w32_path, + fs_label, sizeof (fs_label), + &fs_serno, &fs_len, + &fs_flags, fs_type, sizeof (fs_type)) == FALSE) + dc->fs_flags = FS_UNKNOWN; + else if (!strcmp(fs_type, "FAT")) + dc->fs_flags = FS_FAT; + else if (!strcmp(fs_type, "NTFS")) + dc->fs_flags = FS_NTFS; + else + dc->fs_flags = FS_UNKNOWN; +#else +# ifdef VMS + dc->ino[0] = st.st_ino[0]; + dc->ino[1] = st.st_ino[1]; + dc->ino[2] = st.st_ino[2]; +# else + dc->ino = st.st_ino; +# endif +#endif /* WINDOWS32 */ + hash_insert_at (&directory_contents, dc, dc_slot); + ENULLLOOP (dc->dirstream, opendir (name)); + if (dc->dirstream == 0) + /* Couldn't open the directory. Mark this by + setting the `files' member to a nil pointer. */ + dc->dirfiles.ht_vec = 0; + else + { + hash_init (&dc->dirfiles, DIRFILE_BUCKETS, + dirfile_hash_1, dirfile_hash_2, dirfile_hash_cmp); + /* Keep track of how many directories are open. */ + ++open_directories; + if (open_directories == MAX_OPEN_DIRECTORIES) + /* We have too many directories open already. + Read the entire directory and then close it. */ + (void) dir_contents_file_exists_p (dc, (char *) 0); + } + } + + /* Point the name-hashed entry for DIR at its contents data. */ + dir->contents = dc; + } + } + + return dir; +} + +/* Return 1 if the name FILENAME is entered in DIR's hash table. + FILENAME must contain no slashes. */ + +static int +dir_contents_file_exists_p (struct directory_contents *dir, char *filename) +{ + unsigned int hash; + struct dirfile *df; + struct dirent *d; +#ifdef WINDOWS32 + struct stat st; + int rehash = 0; +#endif + + if (dir == 0 || dir->dirfiles.ht_vec == 0) + { + /* The directory could not be stat'd or opened. */ + return 0; + } +#ifdef __MSDOS__ + filename = dosify (filename); +#endif + +#ifdef HAVE_CASE_INSENSITIVE_FS + filename = downcase (filename); +#endif + +#ifdef __EMX__ + if (filename != 0) + _fnlwr (filename); /* lower case for FAT drives */ +#endif + +#ifdef VMS + filename = vmsify (filename,0); +#endif + + hash = 0; + if (filename != 0) + { + struct dirfile dirfile_key; + + if (*filename == '\0') + { + /* Checking if the directory exists. */ + return 1; + } + dirfile_key.name = filename; + dirfile_key.length = strlen (filename); + df = (struct dirfile *) hash_find_item (&dir->dirfiles, &dirfile_key); + if (df) + { + return !df->impossible; + } + } + + /* The file was not found in the hashed list. + Try to read the directory further. */ + + if (dir->dirstream == 0) + { +#ifdef WINDOWS32 + /* + * Check to see if directory has changed since last read. FAT + * filesystems force a rehash always as mtime does not change + * on directories (ugh!). + */ + if (dir->path_key + && (dir->fs_flags & FS_FAT + || (stat(dir->path_key, &st) == 0 + && st.st_mtime > dir->mtime))) + { + /* reset date stamp to show most recent re-process */ + dir->mtime = st.st_mtime; + + /* make sure directory can still be opened */ + dir->dirstream = opendir(dir->path_key); + + if (dir->dirstream) + rehash = 1; + else + return 0; /* couldn't re-read - fail */ + } + else +#endif + /* The directory has been all read in. */ + return 0; + } + + while (1) + { + /* Enter the file in the hash table. */ + unsigned int len; + struct dirfile dirfile_key; + struct dirfile **dirfile_slot; + + ENULLLOOP (d, readdir (dir->dirstream)); + if (d == 0) + break; + +#if defined(VMS) && defined(HAVE_DIRENT_H) + /* In VMS we get file versions too, which have to be stripped off */ + { + char *p = strrchr (d->d_name, ';'); + if (p) + *p = '\0'; + } +#endif + if (!REAL_DIR_ENTRY (d)) + continue; + + len = NAMLEN (d); + dirfile_key.name = d->d_name; + dirfile_key.length = len; + dirfile_slot = (struct dirfile **) hash_find_slot (&dir->dirfiles, &dirfile_key); +#ifdef WINDOWS32 + /* + * If re-reading a directory, don't cache files that have + * already been discovered. + */ + if (! rehash || HASH_VACANT (*dirfile_slot)) +#endif + { + df = (struct dirfile *) xmalloc (sizeof (struct dirfile)); + df->name = savestring (d->d_name, len); + df->length = len; + df->impossible = 0; + hash_insert_at (&dir->dirfiles, df, dirfile_slot); + } + /* Check if the name matches the one we're searching for. */ + if (filename != 0 && strieq (d->d_name, filename)) + { + return 1; + } + } + + /* If the directory has been completely read in, + close the stream and reset the pointer to nil. */ + if (d == 0) + { + --open_directories; + closedir (dir->dirstream); + dir->dirstream = 0; + } + return 0; +} + +/* Return 1 if the name FILENAME in directory DIRNAME + is entered in the dir hash table. + FILENAME must contain no slashes. */ + +int +dir_file_exists_p (char *dirname, char *filename) +{ + return dir_contents_file_exists_p (find_directory (dirname)->contents, + filename); +} + +/* Return 1 if the file named NAME exists. */ + +int +file_exists_p (char *name) +{ + char *dirend; + char *dirname; + char *slash; + +#ifndef NO_ARCHIVES + if (ar_name (name)) + return ar_member_date (name) != (time_t) -1; +#endif + +#ifdef VMS + dirend = strrchr (name, ']'); + if (dirend == 0) + dirend = strrchr (name, ':'); + if (dirend == (char *)0) + return dir_file_exists_p ("[]", name); +#else /* !VMS */ + dirend = strrchr (name, '/'); +#ifdef HAVE_DOS_PATHS + /* Forward and backslashes might be mixed. We need the rightmost one. */ + { + char *bslash = strrchr(name, '\\'); + if (!dirend || bslash > dirend) + dirend = bslash; + /* The case of "d:file". */ + if (!dirend && name[0] && name[1] == ':') + dirend = name + 1; + } +#endif /* HAVE_DOS_PATHS */ + if (dirend == 0) +#ifndef _AMIGA + return dir_file_exists_p (".", name); +#else /* !VMS && !AMIGA */ + return dir_file_exists_p ("", name); +#endif /* AMIGA */ +#endif /* VMS */ + + slash = dirend; + if (dirend == name) + dirname = "/"; + else + { +#ifdef HAVE_DOS_PATHS + /* d:/ and d: are *very* different... */ + if (dirend < name + 3 && name[1] == ':' && + (*dirend == '/' || *dirend == '\\' || *dirend == ':')) + dirend++; +#endif + dirname = (char *) alloca (dirend - name + 1); + bcopy (name, dirname, dirend - name); + dirname[dirend - name] = '\0'; + } + return dir_file_exists_p (dirname, slash + 1); +} + +/* Mark FILENAME as `impossible' for `file_impossible_p'. + This means an attempt has been made to search for FILENAME + as an intermediate file, and it has failed. */ + +void +file_impossible (char *filename) +{ + char *dirend; + register char *p = filename; + register struct directory *dir; + register struct dirfile *new; + +#ifdef VMS + dirend = strrchr (p, ']'); + if (dirend == 0) + dirend = strrchr (p, ':'); + dirend++; + if (dirend == (char *)1) + dir = find_directory ("[]"); +#else + dirend = strrchr (p, '/'); +# ifdef HAVE_DOS_PATHS + /* Forward and backslashes might be mixed. We need the rightmost one. */ + { + char *bslash = strrchr(p, '\\'); + if (!dirend || bslash > dirend) + dirend = bslash; + /* The case of "d:file". */ + if (!dirend && p[0] && p[1] == ':') + dirend = p + 1; + } +# endif /* HAVE_DOS_PATHS */ + if (dirend == 0) +# ifdef _AMIGA + dir = find_directory (""); +# else /* !VMS && !AMIGA */ + dir = find_directory ("."); +# endif /* AMIGA */ +#endif /* VMS */ + else + { + char *dirname; + char *slash = dirend; + if (dirend == p) + dirname = "/"; + else + { +#ifdef HAVE_DOS_PATHS + /* d:/ and d: are *very* different... */ + if (dirend < p + 3 && p[1] == ':' && + (*dirend == '/' || *dirend == '\\' || *dirend == ':')) + dirend++; +#endif + dirname = (char *) alloca (dirend - p + 1); + bcopy (p, dirname, dirend - p); + dirname[dirend - p] = '\0'; + } + dir = find_directory (dirname); + filename = p = slash + 1; + } + + if (dir->contents == 0) + { + /* The directory could not be stat'd. We allocate a contents + structure for it, but leave it out of the contents hash table. */ + dir->contents = (struct directory_contents *) + xmalloc (sizeof (struct directory_contents)); + bzero ((char *) dir->contents, sizeof (struct directory_contents)); + } + + if (dir->contents->dirfiles.ht_vec == 0) + { + hash_init (&dir->contents->dirfiles, DIRFILE_BUCKETS, + dirfile_hash_1, dirfile_hash_2, dirfile_hash_cmp); + } + + /* Make a new entry and put it in the table. */ + + new = (struct dirfile *) xmalloc (sizeof (struct dirfile)); + new->name = xstrdup (filename); + new->length = strlen (filename); + new->impossible = 1; + hash_insert (&dir->contents->dirfiles, new); +} + +/* Return nonzero if FILENAME has been marked impossible. */ + +int +file_impossible_p (char *filename) +{ + char *dirend; + register char *p = filename; + register struct directory_contents *dir; + register struct dirfile *dirfile; + struct dirfile dirfile_key; + +#ifdef VMS + dirend = strrchr (filename, ']'); + if (dirend == 0) + dir = find_directory ("[]")->contents; +#else + dirend = strrchr (filename, '/'); +#ifdef HAVE_DOS_PATHS + /* Forward and backslashes might be mixed. We need the rightmost one. */ + { + char *bslash = strrchr(filename, '\\'); + if (!dirend || bslash > dirend) + dirend = bslash; + /* The case of "d:file". */ + if (!dirend && filename[0] && filename[1] == ':') + dirend = filename + 1; + } +#endif /* HAVE_DOS_PATHS */ + if (dirend == 0) +#ifdef _AMIGA + dir = find_directory ("")->contents; +#else /* !VMS && !AMIGA */ + dir = find_directory (".")->contents; +#endif /* AMIGA */ +#endif /* VMS */ + else + { + char *dirname; + char *slash = dirend; + if (dirend == filename) + dirname = "/"; + else + { +#ifdef HAVE_DOS_PATHS + /* d:/ and d: are *very* different... */ + if (dirend < filename + 3 && filename[1] == ':' && + (*dirend == '/' || *dirend == '\\' || *dirend == ':')) + dirend++; +#endif + dirname = (char *) alloca (dirend - filename + 1); + bcopy (p, dirname, dirend - p); + dirname[dirend - p] = '\0'; + } + dir = find_directory (dirname)->contents; + p = filename = slash + 1; + } + + if (dir == 0 || dir->dirfiles.ht_vec == 0) + /* There are no files entered for this directory. */ + return 0; + +#ifdef __MSDOS__ + filename = dosify (p); +#endif +#ifdef HAVE_CASE_INSENSITIVE_FS + filename = downcase (p); +#endif +#ifdef VMS + filename = vmsify (p, 1); +#endif + + dirfile_key.name = filename; + dirfile_key.length = strlen (filename); + dirfile = (struct dirfile *) hash_find_item (&dir->dirfiles, &dirfile_key); + if (dirfile) + return dirfile->impossible; + + return 0; +} + +/* Return the already allocated name in the + directory hash table that matches DIR. */ + +char * +dir_name (char *dir) +{ + return find_directory (dir)->name; +} + +/* Print the data base of directories. */ + +void +print_dir_data_base (void) +{ + register unsigned int files; + register unsigned int impossible; + register struct directory **dir_slot; + register struct directory **dir_end; + + puts (_("\n# Directories\n")); + + files = impossible = 0; + + dir_slot = (struct directory **) directories.ht_vec; + dir_end = dir_slot + directories.ht_size; + for ( ; dir_slot < dir_end; dir_slot++) + { + register struct directory *dir = *dir_slot; + if (! HASH_VACANT (dir)) + { + if (dir->contents == 0) + printf (_("# %s: could not be stat'd.\n"), dir->name); + else if (dir->contents->dirfiles.ht_vec == 0) + { +#ifdef WINDOWS32 + printf (_("# %s (key %s, mtime %d): could not be opened.\n"), + dir->name, dir->contents->path_key,dir->contents->mtime); +#else /* WINDOWS32 */ +#ifdef VMS + printf (_("# %s (device %d, inode [%d,%d,%d]): could not be opened.\n"), + dir->name, dir->contents->dev, + dir->contents->ino[0], dir->contents->ino[1], + dir->contents->ino[2]); +#else + printf (_("# %s (device %ld, inode %ld): could not be opened.\n"), + dir->name, (long int) dir->contents->dev, + (long int) dir->contents->ino); +#endif +#endif /* WINDOWS32 */ + } + else + { + register unsigned int f = 0; + register unsigned int im = 0; + register struct dirfile **files_slot; + register struct dirfile **files_end; + + files_slot = (struct dirfile **) dir->contents->dirfiles.ht_vec; + files_end = files_slot + dir->contents->dirfiles.ht_size; + for ( ; files_slot < files_end; files_slot++) + { + register struct dirfile *df = *files_slot; + if (! HASH_VACANT (df)) + { + if (df->impossible) + ++im; + else + ++f; + } + } +#ifdef WINDOWS32 + printf (_("# %s (key %s, mtime %d): "), + dir->name, dir->contents->path_key, dir->contents->mtime); +#else /* WINDOWS32 */ +#ifdef VMS + printf (_("# %s (device %d, inode [%d,%d,%d]): "), + dir->name, dir->contents->dev, + dir->contents->ino[0], dir->contents->ino[1], + dir->contents->ino[2]); +#else + printf (_("# %s (device %ld, inode %ld): "), + dir->name, + (long)dir->contents->dev, (long)dir->contents->ino); +#endif +#endif /* WINDOWS32 */ + if (f == 0) + fputs (_("No"), stdout); + else + printf ("%u", f); + fputs (_(" files, "), stdout); + if (im == 0) + fputs (_("no"), stdout); + else + printf ("%u", im); + fputs (_(" impossibilities"), stdout); + if (dir->contents->dirstream == 0) + puts ("."); + else + puts (_(" so far.")); + files += f; + impossible += im; + } + } + } + + fputs ("\n# ", stdout); + if (files == 0) + fputs (_("No"), stdout); + else + printf ("%u", files); + fputs (_(" files, "), stdout); + if (impossible == 0) + fputs (_("no"), stdout); + else + printf ("%u", impossible); + printf (_(" impossibilities in %lu directories.\n"), directories.ht_fill); +} + +/* Hooks for globbing. */ + +#include + +/* Structure describing state of iterating through a directory hash table. */ + +struct dirstream + { + struct directory_contents *contents; /* The directory being read. */ + struct dirfile **dirfile_slot; /* Current slot in table. */ + }; + +/* Forward declarations. */ +static __ptr_t open_dirstream PARAMS ((const char *)); +static struct dirent *read_dirstream PARAMS ((__ptr_t)); + +static __ptr_t +open_dirstream (const char *directory) +{ + struct dirstream *new; + struct directory *dir = find_directory ((char *)directory); + + if (dir->contents == 0 || dir->contents->dirfiles.ht_vec == 0) + /* DIR->contents is nil if the directory could not be stat'd. + DIR->contents->dirfiles is nil if it could not be opened. */ + return 0; + + /* Read all the contents of the directory now. There is no benefit + in being lazy, since glob will want to see every file anyway. */ + + (void) dir_contents_file_exists_p (dir->contents, (char *) 0); + + new = (struct dirstream *) xmalloc (sizeof (struct dirstream)); + new->contents = dir->contents; + new->dirfile_slot = (struct dirfile **) new->contents->dirfiles.ht_vec; + + return (__ptr_t) new; +} + +static struct dirent * +read_dirstream (__ptr_t stream) +{ + struct dirstream *const ds = (struct dirstream *) stream; + struct directory_contents *dc = ds->contents; + struct dirfile **dirfile_end = (struct dirfile **) dc->dirfiles.ht_vec + dc->dirfiles.ht_size; + static char *buf; + static unsigned int bufsz; + + while (ds->dirfile_slot < dirfile_end) + { + register struct dirfile *df = *ds->dirfile_slot++; + if (! HASH_VACANT (df) && !df->impossible) + { + /* The glob interface wants a `struct dirent', + so mock one up. */ + struct dirent *d; + unsigned int len = df->length + 1; + if (sizeof *d - sizeof d->d_name + len > bufsz) + { + if (buf != 0) + free (buf); + bufsz *= 2; + if (sizeof *d - sizeof d->d_name + len > bufsz) + bufsz = sizeof *d - sizeof d->d_name + len; + buf = xmalloc (bufsz); + } + d = (struct dirent *) buf; + FAKE_DIR_ENTRY (d); +#ifdef _DIRENT_HAVE_D_NAMLEN + d->d_namlen = len - 1; +#endif +#ifdef _DIRENT_HAVE_D_TYPE + d->d_type = DT_UNKNOWN; +#endif + memcpy (d->d_name, df->name, len); + return d; + } + } + + return 0; +} + +static void +ansi_free(void *p) +{ + if (p) + free(p); +} + +/* On 64 bit ReliantUNIX (5.44 and above) in LFS mode, stat() is actually a + * macro for stat64(). If stat is a macro, make a local wrapper function to + * invoke it. + */ +#ifndef stat +# ifndef VMS +extern int stat PARAMS ((const char *path, struct stat *sbuf)); +# endif +# define local_stat stat +#else +static int +local_stat (const char *path, struct stat *buf) +{ + int e; + + EINTRLOOP (e, stat (path, buf)); + return e; +} +#endif + +void +dir_setup_glob (glob_t *gl) +{ + /* Bogus sunos4 compiler complains (!) about & before functions. */ + gl->gl_opendir = open_dirstream; + gl->gl_readdir = read_dirstream; + gl->gl_closedir = ansi_free; + gl->gl_stat = local_stat; + /* We don't bother setting gl_lstat, since glob never calls it. + The slot is only there for compatibility with 4.4 BSD. */ +} + +void +hash_init_directories (void) +{ + hash_init (&directories, DIRECTORY_BUCKETS, + directory_hash_1, directory_hash_2, directory_hash_cmp); + hash_init (&directory_contents, DIRECTORY_BUCKETS, + directory_contents_hash_1, directory_contents_hash_2, directory_contents_hash_cmp); +} diff --git a/src/mkutil/make/doc/.cvsignore b/src/mkutil/make/doc/.cvsignore new file mode 100644 index 00000000..94240d64 --- /dev/null +++ b/src/mkutil/make/doc/.cvsignore @@ -0,0 +1,7 @@ +Makefile Makefile.in +fdl.texi make-stds.texi texinfo.tex +make.info* +make*.html +make.aux make.cp make.cps make.fn make.fns make.ky +make.pg make.toc make.tp make.vr make.log +make.dvi make.ps make.pdf diff --git a/src/mkutil/make/doc/CVS/Entries b/src/mkutil/make/doc/CVS/Entries new file mode 100644 index 00000000..a9aeb7bb --- /dev/null +++ b/src/mkutil/make/doc/CVS/Entries @@ -0,0 +1,4 @@ +/.cvsignore/1.1/Wed Sep 11 16:55:45 2002// +/Makefile.am/1.3/Tue Mar 25 03:21:43 2003// +/make.texi/1.12/Fri May 2 01:45:00 2003// +D diff --git a/src/mkutil/make/doc/CVS/Repository b/src/mkutil/make/doc/CVS/Repository new file mode 100644 index 00000000..2df21c0b --- /dev/null +++ b/src/mkutil/make/doc/CVS/Repository @@ -0,0 +1 @@ +make/doc diff --git a/src/mkutil/make/doc/CVS/Root b/src/mkutil/make/doc/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/doc/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/doc/Makefile.am b/src/mkutil/make/doc/Makefile.am new file mode 100644 index 00000000..0c130b2d --- /dev/null +++ b/src/mkutil/make/doc/Makefile.am @@ -0,0 +1,22 @@ +# -*-Makefile-*-, or close enough + +AUTOMAKE_OPTIONS = 1.7.3 + +TEXI2HTML = texi2html +TEXI2HTML_FLAGS = -split_chapter + +info_TEXINFOS = make.texi +make_TEXINFOS = fdl.texi make-stds.texi + +CLEANFILES = make*.html + +## ----------------------------- ## +## Other documentation formats. ## +## ----------------------------- ## + +html: make_1.html + +make_1.html: $(info_TEXINFOS) $(make_TEXINFOS) + $(TEXI2HTML) $(TEXI2HTML_FLAGS) $(srcdir)/make.texi + +.PHONY: html diff --git a/src/mkutil/make/doc/make.texi b/src/mkutil/make/doc/make.texi new file mode 100644 index 00000000..948e6608 --- /dev/null +++ b/src/mkutil/make/doc/make.texi @@ -0,0 +1,10321 @@ +\input texinfo @c -*- Texinfo -*- +@c %**start of header +@setfilename make.info +@settitle GNU @code{make} +@setchapternewpage odd +@c %**end of header + +@c FSF publishers: format makebook.texi instead of using this file directly. + +@set RCSID $Id: make.texi,v 1.12 2003/05/02 01:45:00 psmith Exp $ +@set EDITION 0.60 +@set VERSION 3.80 +@set UPDATED 08 July 2002 +@set UPDATE-MONTH July 2002 +@comment The ISBN number might need to change on next publication. +@set ISBN 1-882114-81-7 @c From Brian Youmans <3diff@gnu.org>, 25 Apr 2000 + +@c finalout + +@c ISPELL CHECK: done, 10 June 1993 --roland +@c ISPELL CHECK: done, 2000-06-25 --Martin Buchholz + +@c Combine the variable and function indices: +@syncodeindex vr fn +@c Combine the program and concept indices: +@syncodeindex pg cp + +@dircategory GNU Packages +@direntry +* Make: (make). Remake files automatically. +@end direntry + +@ifinfo +This file documents the GNU Make utility, which determines +automatically which pieces of a large program need to be recompiled, +and issues the commands to recompile them. + +This is Edition @value{EDITION}, last updated @value{UPDATED}, +of @cite{The GNU Make Manual}, for @code{make}, Version @value{VERSION}. + +Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002 +Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the section entitled +``GNU Free Documentation License''. +@end ifinfo + +@iftex +@shorttitlepage GNU Make +@end iftex +@titlepage +@title GNU Make +@subtitle A Program for Directing Recompilation +@subtitle GNU @code{make} Version @value{VERSION} +@subtitle @value{UPDATE-MONTH} +@author Richard M. Stallman, Roland McGrath, Paul Smith +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, +1996, 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. +@sp 2 +Published by the Free Software Foundation @* +59 Temple Place -- Suite 330, @* +Boston, MA 02111-1307 USA @* +ISBN @value{ISBN} @* + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``GNU General Public License'', the Front-Cover +Texts being ``A GNU Manual'', and with the Back-Cover Texts being as in +(a) below. A copy of the license is included in the section entitled +``GNU Free Documentation License''. + +(a) The FSF's Back-Cover Text is: + +@quotation + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. +@end quotation +@sp 2 +Cover art by Etienne Suvasa. +@end titlepage +@page + +@ifinfo +@node Top, Overview, (dir), (dir) +@top Make + +The GNU @code{make} utility automatically determines which pieces of a +large program need to be recompiled, and issues the commands to +recompile them.@refill + +This edition of the @cite{GNU Make Manual}, +last updated @value{UPDATED}, +documents GNU @code{make} Version @value{VERSION}.@refill + +This manual describes @code{make} and contains the following chapters:@refill +@end ifinfo + +@menu +* Overview:: Overview of @code{make}. +* Introduction:: An introduction to @code{make}. +* Makefiles:: Makefiles tell @code{make} what to do. +* Rules:: Rules describe when a file must be remade. +* Commands:: Commands say how to remake a file. +* Using Variables:: You can use variables to avoid repetition. +* Conditionals:: Use or ignore parts of the makefile based + on the values of variables. +* Functions:: Many powerful ways to manipulate text. +* Invoking make: Running. How to invoke @code{make} on the command line. +* Implicit Rules:: Use implicit rules to treat many files alike, + based on their file names. +* Archives:: How @code{make} can update library archives. +* Features:: Features GNU @code{make} has over other @code{make}s. +* Missing:: What GNU @code{make} lacks from other @code{make}s. +* Makefile Conventions:: Conventions for writing makefiles for + GNU programs. +* Quick Reference:: A quick reference for experienced users. +* Error Messages:: A list of common errors generated by @code{make}. +* Complex Makefile:: A real example of a straightforward, + but nontrivial, makefile. + +* GNU Free Documentation License:: License for copying this manual +* Concept Index:: Index of Concepts +* Name Index:: Index of Functions, Variables, & Directives + +@detailmenu + --- The Detailed Node Listing --- + +Overview of @code{make} + +* Preparing:: Preparing and Running Make +* Reading:: On Reading this Text +* Bugs:: Problems and Bugs + +An Introduction to Makefiles + +* Rule Introduction:: What a rule looks like. +* Simple Makefile:: A Simple Makefile +* How Make Works:: How @code{make} Processes This Makefile +* Variables Simplify:: Variables Make Makefiles Simpler +* make Deduces:: Letting @code{make} Deduce the Commands +* Combine By Prerequisite:: Another Style of Makefile +* Cleanup:: Rules for Cleaning the Directory + +Writing Makefiles + +* Makefile Contents:: What makefiles contain. +* Makefile Names:: How to name your makefile. +* Include:: How one makefile can use another makefile. +* MAKEFILES Variable:: The environment can specify extra makefiles. +* MAKEFILE_LIST Variable:: Discover which makefiles have been read. +* Special Variables:: Other special variables. +* Remaking Makefiles:: How makefiles get remade. +* Overriding Makefiles:: How to override part of one makefile + with another makefile. +* Reading Makefiles:: How makefiles are parsed. + +Writing Rules + +* Rule Example:: An example explained. +* Rule Syntax:: General syntax explained. +* Prerequisite Types:: There are two types of prerequisites. +* Wildcards:: Using wildcard characters such as `*'. +* Directory Search:: Searching other directories for source files. +* Phony Targets:: Using a target that is not a real file's name. +* Force Targets:: You can use a target without commands + or prerequisites to mark other + targets as phony. +* Empty Targets:: When only the date matters and the + files are empty. +* Special Targets:: Targets with special built-in meanings. +* Multiple Targets:: When to make use of several targets in a rule. +* Multiple Rules:: How to use several rules with the same target. +* Static Pattern:: Static pattern rules apply to multiple targets + and can vary the prerequisites according to + the target name. +* Double-Colon:: How to use a special kind of rule to allow + several independent rules for one target. +* Automatic Prerequisites:: How to automatically generate rules giving + prerequisites from source files themselves. + +Using Wildcard Characters in File Names + +* Wildcard Examples:: Several examples +* Wildcard Pitfall:: Problems to avoid. +* Wildcard Function:: How to cause wildcard expansion where + it does not normally take place. + +Searching Directories for Prerequisites + +* General Search:: Specifying a search path that applies + to every prerequisite. +* Selective Search:: Specifying a search path + for a specified class of names. +* Search Algorithm:: When and how search paths are applied. +* Commands/Search:: How to write shell commands that work together + with search paths. +* Implicit/Search:: How search paths affect implicit rules. +* Libraries/Search:: Directory search for link libraries. + +Static Pattern Rules + +* Static Usage:: The syntax of static pattern rules. +* Static versus Implicit:: When are they better than implicit rules? + +Writing the Commands in Rules + +* Echoing:: How to control when commands are echoed. +* Execution:: How commands are executed. +* Parallel:: How commands can be executed in parallel. +* Errors:: What happens after a command execution error. +* Interrupts:: What happens when a command is interrupted. +* Recursion:: Invoking @code{make} from makefiles. +* Sequences:: Defining canned sequences of commands. +* Empty Commands:: Defining useful, do-nothing commands. + +Recursive Use of @code{make} + +* MAKE Variable:: The special effects of using @samp{$(MAKE)}. +* Variables/Recursion:: How to communicate variables to a sub-@code{make}. +* Options/Recursion:: How to communicate options to a sub-@code{make}. +* -w Option:: How the @samp{-w} or @samp{--print-directory} option + helps debug use of recursive @code{make} commands. + +How to Use Variables + +* Reference:: How to use the value of a variable. +* Flavors:: Variables come in two flavors. +* Advanced:: Advanced features for referencing a variable. +* Values:: All the ways variables get their values. +* Setting:: How to set a variable in the makefile. +* Appending:: How to append more text to the old value + of a variable. +* Override Directive:: How to set a variable in the makefile even if + the user has set it with a command argument. +* Defining:: An alternate way to set a variable + to a verbatim string. +* Environment:: Variable values can come from the environment. +* Target-specific:: Variable values can be defined on a per-target + basis. +* Pattern-specific:: Target-specific variable values can be applied + to a group of targets that match a pattern. + +Advanced Features for Reference to Variables + +* Substitution Refs:: Referencing a variable with + substitutions on the value. +* Computed Names:: Computing the name of the variable to refer to. + +Conditional Parts of Makefiles + +* Conditional Example:: Example of a conditional +* Conditional Syntax:: The syntax of conditionals. +* Testing Flags:: Conditionals that test flags. + +Functions for Transforming Text + +* Syntax of Functions:: How to write a function call. +* Text Functions:: General-purpose text manipulation functions. +* File Name Functions:: Functions for manipulating file names. +* Foreach Function:: Repeat some text with controlled variation. +* If Function:: Conditionally expand a value. +* Call Function:: Expand a user-defined function. +* Value Function:: Return the un-expanded value of a variable. +* Eval Function:: Evaluate the arguments as makefile syntax. +* Origin Function:: Find where a variable got its value. +* Shell Function:: Substitute the output of a shell command. +* Make Control Functions:: Functions that control how make runs. + +How to Run @code{make} + +* Makefile Arguments:: How to specify which makefile to use. +* Goals:: How to use goal arguments to specify which + parts of the makefile to use. +* Instead of Execution:: How to use mode flags to specify what + kind of thing to do with the commands + in the makefile other than simply + execute them. +* Avoiding Compilation:: How to avoid recompiling certain files. +* Overriding:: How to override a variable to specify + an alternate compiler and other things. +* Testing:: How to proceed past some errors, to + test compilation. +* Options Summary:: Summary of Options + +Using Implicit Rules + +* Using Implicit:: How to use an existing implicit rule + to get the commands for updating a file. +* Catalogue of Rules:: A list of built-in implicit rules. +* Implicit Variables:: How to change what predefined rules do. +* Chained Rules:: How to use a chain of implicit rules. +* Pattern Rules:: How to define new implicit rules. +* Last Resort:: How to defining commands for rules + which cannot find any. +* Suffix Rules:: The old-fashioned style of implicit rule. +* Implicit Rule Search:: The precise algorithm for applying + implicit rules. + +Defining and Redefining Pattern Rules + +* Pattern Intro:: An introduction to pattern rules. +* Pattern Examples:: Examples of pattern rules. +* Automatic Variables:: How to use automatic variables in the + commands of implicit rules. +* Pattern Match:: How patterns match. +* Match-Anything Rules:: Precautions you should take prior to + defining rules that can match any + target file whatever. +* Canceling Rules:: How to override or cancel built-in rules. + +Using @code{make} to Update Archive Files + +* Archive Members:: Archive members as targets. +* Archive Update:: The implicit rule for archive member targets. +* Archive Pitfalls:: Dangers to watch out for when using archives. +* Archive Suffix Rules:: You can write a special kind of suffix rule + for updating archives. + +Implicit Rule for Archive Member Targets + +* Archive Symbols:: How to update archive symbol directories. + +Makefile Conventions + +* Makefile Basics:: General Conventions for Makefiles +* Utilities in Makefiles:: Utilities in Makefiles +* Command Variables:: Variables for Specifying Commands +* Directory Variables:: Variables for Installation Directories +* Standard Targets:: Standard Targets for Users +* Install Command Categories:: Three categories of commands in the `install' + +Copying This Manual + +@end detailmenu +@end menu + +@node Overview, Introduction, Top, Top +@comment node-name, next, previous, up +@chapter Overview of @code{make} + +The @code{make} utility automatically determines which pieces of a large +program need to be recompiled, and issues commands to recompile them. +This manual describes GNU @code{make}, which was implemented by Richard +Stallman and Roland McGrath. Development since Version 3.76 has been +handled by Paul Smith. + +GNU @code{make} conforms to section 6.2 of @cite{IEEE Standard +1003.2-1992} (POSIX.2). +@cindex POSIX +@cindex IEEE Standard 1003.2 +@cindex standards conformance + +Our examples show C programs, since they are most common, but you can use +@code{make} with any programming language whose compiler can be run with a +shell command. Indeed, @code{make} is not limited to programs. You can +use it to describe any task where some files must be updated automatically +from others whenever the others change. + +@menu +* Preparing:: Preparing and Running Make +* Reading:: On Reading this Text +* Bugs:: Problems and Bugs +@end menu + +@node Preparing, Reading, Overview, Overview +@ifinfo +@heading Preparing and Running Make +@end ifinfo + +To prepare to use @code{make}, you must write a file called +the @dfn{makefile} that describes the relationships among files +in your program and provides commands for updating each file. +In a program, typically, the executable file is updated from object +files, which are in turn made by compiling source files.@refill + +Once a suitable makefile exists, each time you change some source files, +this simple shell command: + +@example +make +@end example + +@noindent +suffices to perform all necessary recompilations. The @code{make} program +uses the makefile data base and the last-modification times of the files to +decide which of the files need to be updated. For each of those files, it +issues the commands recorded in the data base. + +You can provide command line arguments to @code{make} to control which +files should be recompiled, or how. @xref{Running, ,How to Run +@code{make}}. + +@node Reading, Bugs, Preparing, Overview +@section How to Read This Manual + +If you are new to @code{make}, or are looking for a general +introduction, read the first few sections of each chapter, skipping the +later sections. In each chapter, the first few sections contain +introductory or general information and the later sections contain +specialized or technical information. +@ifinfo +The exception is the second chapter, @ref{Introduction, ,An +Introduction to Makefiles}, all of which is introductory. +@end ifinfo +@iftex +The exception is @ref{Introduction, ,An Introduction to Makefiles}, +all of which is introductory. +@end iftex + +If you are familiar with other @code{make} programs, see @ref{Features, +,Features of GNU @code{make}}, which lists the enhancements GNU +@code{make} has, and @ref{Missing, ,Incompatibilities and Missing +Features}, which explains the few things GNU @code{make} lacks that +others have. + +For a quick summary, see @ref{Options Summary}, @ref{Quick Reference}, +and @ref{Special Targets}. + +@node Bugs, , Reading, Overview +@section Problems and Bugs +@cindex reporting bugs +@cindex bugs, reporting +@cindex problems and bugs, reporting + +If you have problems with GNU @code{make} or think you've found a bug, +please report it to the developers; we cannot promise to do anything but +we might well want to fix it. + +Before reporting a bug, make sure you've actually found a real bug. +Carefully reread the documentation and see if it really says you can do +what you're trying to do. If it's not clear whether you should be able +to do something or not, report that too; it's a bug in the +documentation! + +Before reporting a bug or trying to fix it yourself, try to isolate it +to the smallest possible makefile that reproduces the problem. Then +send us the makefile and the exact results @code{make} gave you, +including any error or warning messages. Please don't paraphrase +these messages: it's best to cut and paste them into your report. +When generating this small makefile, be sure to not use any non-free +or unusual tools in your commands: you can almost always emulate what +such a tool would do with simple shell commands. Finally, be sure to +explain what you expected to occur; this will help us decide whether +the problem was really in the documentation. + +Once you have a precise problem you can report it in one of two ways. +Either send electronic mail to: + +@example + bug-make@@gnu.org +@end example + +@noindent +or use our Web-based project management tool, at: + +@example + http://savannah.gnu.org/projects/make/ +@end example + +@noindent +In addition to the information above, please be careful to include the +version number of @code{make} you are using. You can get this +information with the command @samp{make --version}. Be sure also to +include the type of machine and operating system you are using. One +way to obtain this information is by looking at the final lines of +output from the command @samp{make --help}. + +@node Introduction, Makefiles, Overview, Top +@comment node-name, next, previous, up +@chapter An Introduction to Makefiles + +You need a file called a @dfn{makefile} to tell @code{make} what to do. +Most often, the makefile tells @code{make} how to compile and link a +program. +@cindex makefile + +In this chapter, we will discuss a simple makefile that describes how to +compile and link a text editor which consists of eight C source files +and three header files. The makefile can also tell @code{make} how to +run miscellaneous commands when explicitly asked (for example, to remove +certain files as a clean-up operation). To see a more complex example +of a makefile, see @ref{Complex Makefile}. + +When @code{make} recompiles the editor, each changed C source file +must be recompiled. If a header file has changed, each C source file +that includes the header file must be recompiled to be safe. Each +compilation produces an object file corresponding to the source file. +Finally, if any source file has been recompiled, all the object files, +whether newly made or saved from previous compilations, must be linked +together to produce the new executable editor. +@cindex recompilation +@cindex editor + +@menu +* Rule Introduction:: What a rule looks like. +* Simple Makefile:: A Simple Makefile +* How Make Works:: How @code{make} Processes This Makefile +* Variables Simplify:: Variables Make Makefiles Simpler +* make Deduces:: Letting @code{make} Deduce the Commands +* Combine By Prerequisite:: Another Style of Makefile +* Cleanup:: Rules for Cleaning the Directory +@end menu + +@node Rule Introduction, Simple Makefile, Introduction, Introduction +@comment node-name, next, previous, up +@section What a Rule Looks Like +@cindex rule, introduction to +@cindex makefile rule parts +@cindex parts of makefile rule + +A simple makefile consists of ``rules'' with the following shape: + +@cindex targets, introduction to +@cindex prerequisites, introduction to +@cindex commands, introduction to +@example +@group +@var{target} @dots{} : @var{prerequisites} @dots{} + @var{command} + @dots{} + @dots{} +@end group +@end example + +A @dfn{target} is usually the name of a file that is generated by a +program; examples of targets are executable or object files. A target +can also be the name of an action to carry out, such as @samp{clean} +(@pxref{Phony Targets}). + +A @dfn{prerequisite} is a file that is used as input to create the +target. A target often depends on several files. + +@cindex tabs in rules +A @dfn{command} is an action that @code{make} carries out. +A rule may have more than one command, each on its own line. +@strong{Please note:} you need to put a tab character at the beginning of +every command line! This is an obscurity that catches the unwary. + +Usually a command is in a rule with prerequisites and serves to create a +target file if any of the prerequisites change. However, the rule that +specifies commands for the target need not have prerequisites. For +example, the rule containing the delete command associated with the +target @samp{clean} does not have prerequisites. + +A @dfn{rule}, then, explains how and when to remake certain files +which are the targets of the particular rule. @code{make} carries out +the commands on the prerequisites to create or update the target. A +rule can also explain how and when to carry out an action. +@xref{Rules, , Writing Rules}. + +A makefile may contain other text besides rules, but a simple makefile +need only contain rules. Rules may look somewhat more complicated +than shown in this template, but all fit the pattern more or less. + +@node Simple Makefile, How Make Works, Rule Introduction, Introduction +@section A Simple Makefile +@cindex simple makefile +@cindex makefile, simple + +Here is a straightforward makefile that describes the way an +executable file called @code{edit} depends on eight object files +which, in turn, depend on eight C source and three header files. + +In this example, all the C files include @file{defs.h}, but only those +defining editing commands include @file{command.h}, and only low +level files that change the editor buffer include @file{buffer.h}. + +@example +@group +edit : main.o kbd.o command.o display.o \ + insert.o search.o files.o utils.o + cc -o edit main.o kbd.o command.o display.o \ + insert.o search.o files.o utils.o + +main.o : main.c defs.h + cc -c main.c +kbd.o : kbd.c defs.h command.h + cc -c kbd.c +command.o : command.c defs.h command.h + cc -c command.c +display.o : display.c defs.h buffer.h + cc -c display.c +insert.o : insert.c defs.h buffer.h + cc -c insert.c +search.o : search.c defs.h buffer.h + cc -c search.c +files.o : files.c defs.h buffer.h command.h + cc -c files.c +utils.o : utils.c defs.h + cc -c utils.c +clean : + rm edit main.o kbd.o command.o display.o \ + insert.o search.o files.o utils.o +@end group +@end example + +@noindent +We split each long line into two lines using backslash-newline; this is +like using one long line, but is easier to read. +@cindex continuation lines +@cindex @code{\} (backslash), for continuation lines +@cindex backslash (@code{\}), for continuation lines +@cindex quoting newline, in makefile +@cindex newline, quoting, in makefile + +To use this makefile to create the executable file called @file{edit}, +type: + +@example +make +@end example + +To use this makefile to delete the executable file and all the object +files from the directory, type: + +@example +make clean +@end example + +In the example makefile, the targets include the executable file +@samp{edit}, and the object files @samp{main.o} and @samp{kbd.o}. The +prerequisites are files such as @samp{main.c} and @samp{defs.h}. +In fact, each @samp{.o} file is both a target and a prerequisite. +Commands include @w{@samp{cc -c main.c}} and @w{@samp{cc -c kbd.c}}. + +When a target is a file, it needs to be recompiled or relinked if any +of its prerequisites change. In addition, any prerequisites that are +themselves automatically generated should be updated first. In this +example, @file{edit} depends on each of the eight object files; the +object file @file{main.o} depends on the source file @file{main.c} and +on the header file @file{defs.h}. + +A shell command follows each line that contains a target and +prerequisites. These shell commands say how to update the target file. +A tab character must come at the beginning of every command line to +distinguish commands lines from other lines in the makefile. (Bear in +mind that @code{make} does not know anything about how the commands +work. It is up to you to supply commands that will update the target +file properly. All @code{make} does is execute the commands in the rule +you have specified when the target file needs to be updated.) +@cindex shell command + +The target @samp{clean} is not a file, but merely the name of an +action. Since you +normally +do not want to carry out the actions in this rule, @samp{clean} is not a prerequisite of any other rule. +Consequently, @code{make} never does anything with it unless you tell +it specifically. Note that this rule not only is not a prerequisite, it +also does not have any prerequisites, so the only purpose of the rule +is to run the specified commands. Targets that do not refer to files +but are just actions are called @dfn{phony targets}. @xref{Phony +Targets}, for information about this kind of target. @xref{Errors, , +Errors in Commands}, to see how to cause @code{make} to ignore errors +from @code{rm} or any other command. +@cindex @code{clean} target +@cindex @code{rm} (shell command) + +@node How Make Works, Variables Simplify, Simple Makefile, Introduction +@comment node-name, next, previous, up +@section How @code{make} Processes a Makefile +@cindex processing a makefile +@cindex makefile, how @code{make} processes + +By default, @code{make} starts with the first target (not targets whose +names start with @samp{.}). This is called the @dfn{default goal}. +(@dfn{Goals} are the targets that @code{make} strives ultimately to +update. @xref{Goals, , Arguments to Specify the Goals}.) +@cindex default goal +@cindex goal, default +@cindex goal + +In the simple example of the previous section, the default goal is to +update the executable program @file{edit}; therefore, we put that rule +first. + +Thus, when you give the command: + +@example +make +@end example + +@noindent +@code{make} reads the makefile in the current directory and begins by +processing the first rule. In the example, this rule is for relinking +@file{edit}; but before @code{make} can fully process this rule, it +must process the rules for the files that @file{edit} depends on, +which in this case are the object files. Each of these files is +processed according to its own rule. These rules say to update each +@samp{.o} file by compiling its source file. The recompilation must +be done if the source file, or any of the header files named as +prerequisites, is more recent than the object file, or if the object +file does not exist. + +The other rules are processed because their targets appear as +prerequisites of the goal. If some other rule is not depended on by the +goal (or anything it depends on, etc.), that rule is not processed, +unless you tell @code{make} to do so (with a command such as +@w{@code{make clean}}). + +Before recompiling an object file, @code{make} considers updating its +prerequisites, the source file and header files. This makefile does not +specify anything to be done for them---the @samp{.c} and @samp{.h} files +are not the targets of any rules---so @code{make} does nothing for these +files. But @code{make} would update automatically generated C programs, +such as those made by Bison or Yacc, by their own rules at this time. + +After recompiling whichever object files need it, @code{make} decides +whether to relink @file{edit}. This must be done if the file +@file{edit} does not exist, or if any of the object files are newer than +it. If an object file was just recompiled, it is now newer than +@file{edit}, so @file{edit} is relinked. +@cindex relinking + +Thus, if we change the file @file{insert.c} and run @code{make}, +@code{make} will compile that file to update @file{insert.o}, and then +link @file{edit}. If we change the file @file{command.h} and run +@code{make}, @code{make} will recompile the object files @file{kbd.o}, +@file{command.o} and @file{files.o} and then link the file @file{edit}. + +@node Variables Simplify, make Deduces, How Make Works, Introduction +@section Variables Make Makefiles Simpler +@cindex variables +@cindex simplifying with variables + +In our example, we had to list all the object files twice in the rule for +@file{edit} (repeated here): + +@example +@group +edit : main.o kbd.o command.o display.o \ + insert.o search.o files.o utils.o + cc -o edit main.o kbd.o command.o display.o \ + insert.o search.o files.o utils.o +@end group +@end example + +@cindex @code{objects} +Such duplication is error-prone; if a new object file is added to the +system, we might add it to one list and forget the other. We can eliminate +the risk and simplify the makefile by using a variable. @dfn{Variables} +allow a text string to be defined once and substituted in multiple places +later (@pxref{Using Variables, ,How to Use Variables}). + +@cindex @code{OBJECTS} +@cindex @code{objs} +@cindex @code{OBJS} +@cindex @code{obj} +@cindex @code{OBJ} +It is standard practice for every makefile to have a variable named +@code{objects}, @code{OBJECTS}, @code{objs}, @code{OBJS}, @code{obj}, +or @code{OBJ} which is a list of all object file names. We would +define such a variable @code{objects} with a line like this in the +makefile:@refill + +@example +@group +objects = main.o kbd.o command.o display.o \ + insert.o search.o files.o utils.o +@end group +@end example + +@noindent +Then, each place we want to put a list of the object file names, we can +substitute the variable's value by writing @samp{$(objects)} +(@pxref{Using Variables, ,How to Use Variables}). + +Here is how the complete simple makefile looks when you use a variable +for the object files: + +@example +@group +objects = main.o kbd.o command.o display.o \ + insert.o search.o files.o utils.o + +edit : $(objects) + cc -o edit $(objects) +main.o : main.c defs.h + cc -c main.c +kbd.o : kbd.c defs.h command.h + cc -c kbd.c +command.o : command.c defs.h command.h + cc -c command.c +display.o : display.c defs.h buffer.h + cc -c display.c +insert.o : insert.c defs.h buffer.h + cc -c insert.c +search.o : search.c defs.h buffer.h + cc -c search.c +files.o : files.c defs.h buffer.h command.h + cc -c files.c +utils.o : utils.c defs.h + cc -c utils.c +clean : + rm edit $(objects) +@end group +@end example + +@node make Deduces, Combine By Prerequisite, Variables Simplify, Introduction +@section Letting @code{make} Deduce the Commands +@cindex deducing commands (implicit rules) +@cindex implicit rule, introduction to +@cindex rule, implicit, introduction to + +It is not necessary to spell out the commands for compiling the individual +C source files, because @code{make} can figure them out: it has an +@dfn{implicit rule} for updating a @samp{.o} file from a correspondingly +named @samp{.c} file using a @samp{cc -c} command. For example, it will +use the command @samp{cc -c main.c -o main.o} to compile @file{main.c} into +@file{main.o}. We can therefore omit the commands from the rules for the +object files. @xref{Implicit Rules, ,Using Implicit Rules}.@refill + +When a @samp{.c} file is used automatically in this way, it is also +automatically added to the list of prerequisites. We can therefore omit +the @samp{.c} files from the prerequisites, provided we omit the commands. + +Here is the entire example, with both of these changes, and a variable +@code{objects} as suggested above: + +@example +@group +objects = main.o kbd.o command.o display.o \ + insert.o search.o files.o utils.o + +edit : $(objects) + cc -o edit $(objects) + +main.o : defs.h +kbd.o : defs.h command.h +command.o : defs.h command.h +display.o : defs.h buffer.h +insert.o : defs.h buffer.h +search.o : defs.h buffer.h +files.o : defs.h buffer.h command.h +utils.o : defs.h + +.PHONY : clean +clean : + rm edit $(objects) +@end group +@end example + +@noindent +This is how we would write the makefile in actual practice. (The +complications associated with @samp{clean} are described elsewhere. +See @ref{Phony Targets}, and @ref{Errors, ,Errors in Commands}.) + +Because implicit rules are so convenient, they are important. You +will see them used frequently.@refill + +@node Combine By Prerequisite, Cleanup, make Deduces, Introduction +@section Another Style of Makefile +@cindex combining rules by prerequisite + +When the objects of a makefile are created only by implicit rules, an +alternative style of makefile is possible. In this style of makefile, +you group entries by their prerequisites instead of by their targets. +Here is what one looks like: + +@example +@group +objects = main.o kbd.o command.o display.o \ + insert.o search.o files.o utils.o + +edit : $(objects) + cc -o edit $(objects) + +$(objects) : defs.h +kbd.o command.o files.o : command.h +display.o insert.o search.o files.o : buffer.h +@end group +@end example + +@noindent +Here @file{defs.h} is given as a prerequisite of all the object files; +@file{command.h} and @file{buffer.h} are prerequisites of the specific +object files listed for them. + +Whether this is better is a matter of taste: it is more compact, but some +people dislike it because they find it clearer to put all the information +about each target in one place. + +@node Cleanup, , Combine By Prerequisite, Introduction +@section Rules for Cleaning the Directory +@cindex cleaning up +@cindex removing, to clean up + +Compiling a program is not the only thing you might want to write rules +for. Makefiles commonly tell how to do a few other things besides +compiling a program: for example, how to delete all the object files +and executables so that the directory is @samp{clean}. + +@cindex @code{clean} target +Here is how we +could write a @code{make} rule for cleaning our example editor: + +@example +@group +clean: + rm edit $(objects) +@end group +@end example + +In practice, we might want to write the rule in a somewhat more +complicated manner to handle unanticipated situations. We would do this: + +@example +@group +.PHONY : clean +clean : + -rm edit $(objects) +@end group +@end example + +@noindent +This prevents @code{make} from getting confused by an actual file +called @file{clean} and causes it to continue in spite of errors from +@code{rm}. (See @ref{Phony Targets}, and @ref{Errors, ,Errors in +Commands}.) + +@noindent +A rule such as this should not be placed at the beginning of the +makefile, because we do not want it to run by default! Thus, in the +example makefile, we want the rule for @code{edit}, which recompiles +the editor, to remain the default goal. + +Since @code{clean} is not a prerequisite of @code{edit}, this rule will not +run at all if we give the command @samp{make} with no arguments. In +order to make the rule run, we have to type @samp{make clean}. +@xref{Running, ,How to Run @code{make}}. + +@node Makefiles, Rules, Introduction, Top +@chapter Writing Makefiles + +@cindex makefile, how to write +The information that tells @code{make} how to recompile a system comes from +reading a data base called the @dfn{makefile}. + +@menu +* Makefile Contents:: What makefiles contain. +* Makefile Names:: How to name your makefile. +* Include:: How one makefile can use another makefile. +* MAKEFILES Variable:: The environment can specify extra makefiles. +* MAKEFILE_LIST Variable:: Discover which makefiles have been read. +* Special Variables:: Other special variables. +* Remaking Makefiles:: How makefiles get remade. +* Overriding Makefiles:: How to override part of one makefile + with another makefile. +* Reading Makefiles:: How makefiles are parsed. +@end menu + +@node Makefile Contents, Makefile Names, Makefiles, Makefiles +@section What Makefiles Contain + +Makefiles contain five kinds of things: @dfn{explicit rules}, +@dfn{implicit rules}, @dfn{variable definitions}, @dfn{directives}, +and @dfn{comments}. Rules, variables, and directives are described at +length in later chapters.@refill + +@itemize @bullet +@cindex rule, explicit, definition of +@cindex explicit rule, definition of +@item +An @dfn{explicit rule} says when and how to remake one or more files, +called the rule's targets. It lists the other files that the targets +depend on, call the @dfn{prerequisites} of the target, and may also give +commands to use to create or update the targets. @xref{Rules, ,Writing +Rules}. + +@cindex rule, implicit, definition of +@cindex implicit rule, definition of +@item +An @dfn{implicit rule} says when and how to remake a class of files +based on their names. It describes how a target may depend on a file +with a name similar to the target and gives commands to create or +update such a target. @xref{Implicit Rules, ,Using Implicit Rules}. + +@cindex variable definition +@item +A @dfn{variable definition} is a line that specifies a text string +value for a variable that can be substituted into the text later. The +simple makefile example shows a variable definition for @code{objects} +as a list of all object files (@pxref{Variables Simplify, , Variables +Make Makefiles Simpler}). + +@cindex directive +@item +A @dfn{directive} is a command for @code{make} to do something special while +reading the makefile. These include: + +@itemize @bullet +@item +Reading another makefile (@pxref{Include, ,Including Other Makefiles}). + +@item +Deciding (based on the values of variables) whether to use or +ignore a part of the makefile (@pxref{Conditionals, ,Conditional Parts of Makefiles}). + +@item +Defining a variable from a verbatim string containing multiple lines +(@pxref{Defining, ,Defining Variables Verbatim}). +@end itemize + +@cindex comments, in makefile +@cindex @code{#} (comments), in makefile +@item +@samp{#} in a line of a makefile starts a @dfn{comment}. It and the +rest of the line are ignored, except that a trailing backslash not +escaped by another backslash will continue the comment across multiple +lines. A line containing just a comment (with perhaps spaces before +it) is effectively blank, and is ignored. If you want a literal +@code{#}, escape it with a backslash (e.g., @code{\#}). Comments may +appear on any line in the makefile, although they are treated +specially in certain situations. + +Within a command script (if the line begins with a TAB character) the +entire line is passed to the shell, just as with any other line that +begins with a TAB. The shell decides how to interpret the text: +whether or not this is a comment is up to the shell. + +Within a @code{define} directive, comments are not ignored during the +definition of the variable, but rather kept intact in the value of the +variable. When the variable is expanded they will either be treated +as @code{make} comments or as command script text, depending on the +context in which the variable is evaluated. +@end itemize + +@node Makefile Names, Include, Makefile Contents, Makefiles +@section What Name to Give Your Makefile +@cindex makefile name +@cindex name of makefile +@cindex default makefile name +@cindex file name of makefile + +@c following paragraph rewritten to avoid overfull hbox +By default, when @code{make} looks for the makefile, it tries the +following names, in order: @file{GNUmakefile}, @file{makefile} +and @file{Makefile}.@refill +@findex Makefile +@findex GNUmakefile +@findex makefile + +@cindex @code{README} +Normally you should call your makefile either @file{makefile} or +@file{Makefile}. (We recommend @file{Makefile} because it appears +prominently near the beginning of a directory listing, right near other +important files such as @file{README}.) The first name checked, +@file{GNUmakefile}, is not recommended for most makefiles. You should +use this name if you have a makefile that is specific to GNU +@code{make}, and will not be understood by other versions of +@code{make}. Other @code{make} programs look for @file{makefile} and +@file{Makefile}, but not @file{GNUmakefile}. + +If @code{make} finds none of these names, it does not use any makefile. +Then you must specify a goal with a command argument, and @code{make} +will attempt to figure out how to remake it using only its built-in +implicit rules. @xref{Implicit Rules, ,Using Implicit Rules}. + +@cindex @code{-f} +@cindex @code{--file} +@cindex @code{--makefile} +If you want to use a nonstandard name for your makefile, you can specify +the makefile name with the @samp{-f} or @samp{--file} option. The +arguments @w{@samp{-f @var{name}}} or @w{@samp{--file=@var{name}}} tell +@code{make} to read the file @var{name} as the makefile. If you use +more than one @samp{-f} or @samp{--file} option, you can specify several +makefiles. All the makefiles are effectively concatenated in the order +specified. The default makefile names @file{GNUmakefile}, +@file{makefile} and @file{Makefile} are not checked automatically if you +specify @samp{-f} or @samp{--file}.@refill +@cindex specifying makefile name +@cindex makefile name, how to specify +@cindex name of makefile, how to specify +@cindex file name of makefile, how to specify + +@node Include, MAKEFILES Variable, Makefile Names, Makefiles +@section Including Other Makefiles +@cindex including other makefiles +@cindex makefile, including + +@findex include +The @code{include} directive tells @code{make} to suspend reading the +current makefile and read one or more other makefiles before continuing. +The directive is a line in the makefile that looks like this: + +@example +include @var{filenames}@dots{} +@end example + +@noindent +@var{filenames} can contain shell file name patterns. +@cindex shell file name pattern (in @code{include}) +@cindex shell wildcards (in @code{include}) +@cindex wildcard, in @code{include} + +Extra spaces are allowed and ignored at the beginning of the line, but +a tab is not allowed. (If the line begins with a tab, it will be +considered a command line.) Whitespace is required between +@code{include} and the file names, and between file names; extra +whitespace is ignored there and at the end of the directive. A +comment starting with @samp{#} is allowed at the end of the line. If +the file names contain any variable or function references, they are +expanded. @xref{Using Variables, ,How to Use Variables}. + +For example, if you have three @file{.mk} files, @file{a.mk}, +@file{b.mk}, and @file{c.mk}, and @code{$(bar)} expands to +@code{bish bash}, then the following expression + +@example +include foo *.mk $(bar) +@end example + +is equivalent to + +@example +include foo a.mk b.mk c.mk bish bash +@end example + +When @code{make} processes an @code{include} directive, it suspends +reading of the containing makefile and reads from each listed file in +turn. When that is finished, @code{make} resumes reading the +makefile in which the directive appears. + +One occasion for using @code{include} directives is when several programs, +handled by individual makefiles in various directories, need to use a +common set of variable definitions +(@pxref{Setting, ,Setting Variables}) or pattern rules +(@pxref{Pattern Rules, ,Defining and Redefining Pattern Rules}). + +Another such occasion is when you want to generate prerequisites from +source files automatically; the prerequisites can be put in a file that +is included by the main makefile. This practice is generally cleaner +than that of somehow appending the prerequisites to the end of the main +makefile as has been traditionally done with other versions of +@code{make}. @xref{Automatic Prerequisites}. +@cindex prerequisites, automatic generation +@cindex automatic generation of prerequisites +@cindex generating prerequisites automatically + +@cindex @code{-I} +@cindex @code{--include-dir} +@cindex included makefiles, default directories +@cindex default directories for included makefiles +@findex /usr/gnu/include +@findex /usr/local/include +@findex /usr/include +If the specified name does not start with a slash, and the file is not +found in the current directory, several other directories are searched. +First, any directories you have specified with the @samp{-I} or +@samp{--include-dir} option are searched +(@pxref{Options Summary, ,Summary of Options}). +Then the following directories (if they exist) +are searched, in this order: +@file{@var{prefix}/include} (normally @file{/usr/local/include} +@footnote{GNU Make compiled for MS-DOS and MS-Windows behaves as if +@var{prefix} has been defined to be the root of the DJGPP tree +hierarchy.}) +@file{/usr/gnu/include}, +@file{/usr/local/include}, @file{/usr/include}. + +If an included makefile cannot be found in any of these directories, a +warning message is generated, but it is not an immediately fatal error; +processing of the makefile containing the @code{include} continues. +Once it has finished reading makefiles, @code{make} will try to remake +any that are out of date or don't exist. +@xref{Remaking Makefiles, ,How Makefiles Are Remade}. +Only after it has tried to find a way to remake a makefile and failed, +will @code{make} diagnose the missing makefile as a fatal error. + +If you want @code{make} to simply ignore a makefile which does not exist +and cannot be remade, with no error message, use the @w{@code{-include}} +directive instead of @code{include}, like this: + +@example +-include @var{filenames}@dots{} +@end example + +This acts like @code{include} in every way except that there is no +error (not even a warning) if any of the @var{filenames} do not exist. +For compatibility with some other @code{make} implementations, +@code{sinclude} is another name for @w{@code{-include}}. + +@node MAKEFILES Variable, MAKEFILE_LIST Variable, Include, Makefiles +@section The Variable @code{MAKEFILES} +@cindex makefile, and @code{MAKEFILES} variable +@cindex including (@code{MAKEFILES} variable) + +@vindex MAKEFILES +If the environment variable @code{MAKEFILES} is defined, @code{make} +considers its value as a list of names (separated by whitespace) of +additional makefiles to be read before the others. This works much like +the @code{include} directive: various directories are searched for those +files (@pxref{Include, ,Including Other Makefiles}). In addition, the +default goal is never taken from one of these makefiles and it is not an +error if the files listed in @code{MAKEFILES} are not found.@refill + +@cindex recursion, and @code{MAKEFILES} variable +The main use of @code{MAKEFILES} is in communication between recursive +invocations of @code{make} (@pxref{Recursion, ,Recursive Use of +@code{make}}). It usually is not desirable to set the environment +variable before a top-level invocation of @code{make}, because it is +usually better not to mess with a makefile from outside. However, if +you are running @code{make} without a specific makefile, a makefile in +@code{MAKEFILES} can do useful things to help the built-in implicit +rules work better, such as defining search paths (@pxref{Directory Search}). + +Some users are tempted to set @code{MAKEFILES} in the environment +automatically on login, and program makefiles to expect this to be done. +This is a very bad idea, because such makefiles will fail to work if run by +anyone else. It is much better to write explicit @code{include} directives +in the makefiles. @xref{Include, , Including Other Makefiles}. + +@node MAKEFILE_LIST Variable, Special Variables, MAKEFILES Variable, Makefiles +@comment node-name, next, previous, up +@section The Variable @code{MAKEFILE_LIST} +@cindex makefiles, and @code{MAKEFILE_LIST} variable +@cindex including (@code{MAKEFILE_LIST} variable) + +As @code{make} reads various makefiles, including any obtained from the +@code{MAKEFILES} variable, the command line, the default files, or +from @code{include} directives, their names will be automatically +appended to the @code{MAKEFILE_LIST} variable. They are added right +before @code{make} begins to parse them. + +This means that if the first thing a makefile does is examine the last +word in this variable, it will be the name of the current makefile. +Once the current makefile has used @code{include}, however, the last +word will be the just-included makefile. + +If a makefile named @code{Makefile} has this content: + +@example +@group +name1 := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) + +include inc.mk + +name2 := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) + +all: + @@echo name1 = $(name1) + @@echo name2 = $(name2) +@end group +@end example + +@noindent +then you would expect to see this output: + +@example +@group +name1 = Makefile +name2 = inc.mk +@end group +@end example + +@xref{Text Functions}, for more information on the @code{word} and +@code{words} functions used above. @xref{Flavors, The Two Flavors of +Variables}, for more information on simply-expanded (@code{:=}) +variable definitions. + +@node Special Variables, Remaking Makefiles, MAKEFILE_LIST Variable, Makefiles +@comment node-name, next, previous, up +@section Other Special Variables +@cindex makefiles, and special variables +@cindex special variables + +GNU @code{make} also supports a special variable. Note that any value +you assign to this variable will be ignored; it will always return its +special value. + +@vindex $(.VARIABLES) +@vindex .VARIABLES @r{(list of variables)} +The first special variable is @code{.VARIABLES}. When expanded, the +value consists of a list of the @emph{names} of all global variables +defined in all makefiles read up until that point. This includes +variables which have empty values, as well as built-in variables +(@pxref{Implicit Variables, , Variables Used by Implicit Rules}), but +does not include any variables which are only defined in a +target-specific context. + +@c @vindex $(.TARGETS) +@c @vindex .TARGETS @r{(list of targets)} +@c The second special variable is @code{.TARGETS}. When expanded, the +@c value consists of a list of all targets defined in all makefiles read +@c up until that point. Note it's not enough for a file to be simply +@c mentioned in the makefile to be listed in this variable, even if it +@c would match an implicit rule and become an ``implicit target''. The +@c file must appear as a target, on the left-hand side of a ``:'', to be +@c considered a target for the purposes of this variable. + +@node Remaking Makefiles, Overriding Makefiles, Special Variables, Makefiles +@section How Makefiles Are Remade + +@cindex updating makefiles +@cindex remaking makefiles +@cindex makefile, remaking of +Sometimes makefiles can be remade from other files, such as RCS or SCCS +files. If a makefile can be remade from other files, you probably want +@code{make} to get an up-to-date version of the makefile to read in. + +To this end, after reading in all makefiles, @code{make} will consider +each as a goal target and attempt to update it. If a makefile has a +rule which says how to update it (found either in that very makefile or +in another one) or if an implicit rule applies to it (@pxref{Implicit +Rules, ,Using Implicit Rules}), it will be updated if necessary. After +all makefiles have been checked, if any have actually been changed, +@code{make} starts with a clean slate and reads all the makefiles over +again. (It will also attempt to update each of them over again, but +normally this will not change them again, since they are already up to +date.)@refill + +If you know that one or more of your makefiles cannot be remade and you +want to keep @code{make} from performing an implicit rule search on +them, perhaps for efficiency reasons, you can use any normal method of +preventing implicit rule lookup to do so. For example, you can write an +explicit rule with the makefile as the target, and an empty command +string (@pxref{Empty Commands, ,Using Empty Commands}). + +If the makefiles specify a double-colon rule to remake a file with +commands but no prerequisites, that file will always be remade +(@pxref{Double-Colon}). In the case of makefiles, a makefile that has a +double-colon rule with commands but no prerequisites will be remade every +time @code{make} is run, and then again after @code{make} starts over +and reads the makefiles in again. This would cause an infinite loop: +@code{make} would constantly remake the makefile, and never do anything +else. So, to avoid this, @code{make} will @strong{not} attempt to +remake makefiles which are specified as targets of a double-colon rule +with commands but no prerequisites.@refill + +If you do not specify any makefiles to be read with @samp{-f} or +@samp{--file} options, @code{make} will try the default makefile names; +@pxref{Makefile Names, ,What Name to Give Your Makefile}. Unlike +makefiles explicitly requested with @samp{-f} or @samp{--file} options, +@code{make} is not certain that these makefiles should exist. However, +if a default makefile does not exist but can be created by running +@code{make} rules, you probably want the rules to be run so that the +makefile can be used. + +Therefore, if none of the default makefiles exists, @code{make} will try +to make each of them in the same order in which they are searched for +(@pxref{Makefile Names, ,What Name to Give Your Makefile}) +until it succeeds in making one, or it runs out of names to try. Note +that it is not an error if @code{make} cannot find or make any makefile; +a makefile is not always necessary.@refill + +When you use the @samp{-t} or @samp{--touch} option +(@pxref{Instead of Execution, ,Instead of Executing the Commands}), +you would not want to use an out-of-date makefile to decide which +targets to touch. So the @samp{-t} option has no effect on updating +makefiles; they are really updated even if @samp{-t} is specified. +Likewise, @samp{-q} (or @samp{--question}) and @samp{-n} (or +@samp{--just-print}) do not prevent updating of makefiles, because an +out-of-date makefile would result in the wrong output for other targets. +Thus, @samp{make -f mfile -n foo} will update @file{mfile}, read it in, +and then print the commands to update @file{foo} and its prerequisites +without running them. The commands printed for @file{foo} will be those +specified in the updated contents of @file{mfile}. + +However, on occasion you might actually wish to prevent updating of even +the makefiles. You can do this by specifying the makefiles as goals in +the command line as well as specifying them as makefiles. When the +makefile name is specified explicitly as a goal, the options @samp{-t} +and so on do apply to them. + +Thus, @samp{make -f mfile -n mfile foo} would read the makefile +@file{mfile}, print the commands needed to update it without actually +running them, and then print the commands needed to update @file{foo} +without running them. The commands for @file{foo} will be those +specified by the existing contents of @file{mfile}. + +@node Overriding Makefiles, Reading Makefiles, Remaking Makefiles, Makefiles +@section Overriding Part of Another Makefile + +@cindex overriding makefiles +@cindex makefile, overriding +Sometimes it is useful to have a makefile that is mostly just like +another makefile. You can often use the @samp{include} directive to +include one in the other, and add more targets or variable definitions. +However, if the two makefiles give different commands for the same +target, @code{make} will not let you just do this. But there is another way. + +@cindex match-anything rule, used to override +In the containing makefile (the one that wants to include the other), +you can use a match-anything pattern rule to say that to remake any +target that cannot be made from the information in the containing +makefile, @code{make} should look in another makefile. +@xref{Pattern Rules}, for more information on pattern rules. + +For example, if you have a makefile called @file{Makefile} that says how +to make the target @samp{foo} (and other targets), you can write a +makefile called @file{GNUmakefile} that contains: + +@example +foo: + frobnicate > foo + +%: force + @@$(MAKE) -f Makefile $@@ +force: ; +@end example + +If you say @samp{make foo}, @code{make} will find @file{GNUmakefile}, +read it, and see that to make @file{foo}, it needs to run the command +@samp{frobnicate > foo}. If you say @samp{make bar}, @code{make} will +find no way to make @file{bar} in @file{GNUmakefile}, so it will use the +commands from the pattern rule: @samp{make -f Makefile bar}. If +@file{Makefile} provides a rule for updating @file{bar}, @code{make} +will apply the rule. And likewise for any other target that +@file{GNUmakefile} does not say how to make. + +The way this works is that the pattern rule has a pattern of just +@samp{%}, so it matches any target whatever. The rule specifies a +prerequisite @file{force}, to guarantee that the commands will be run even +if the target file already exists. We give @file{force} target empty +commands to prevent @code{make} from searching for an implicit rule to +build it---otherwise it would apply the same match-anything rule to +@file{force} itself and create a prerequisite loop! + +@node Reading Makefiles, , Overriding Makefiles, Makefiles +@section How @code{make} Reads a Makefile +@cindex reading makefiles +@cindex makefile, parsing + +GNU @code{make} does its work in two distinct phases. During the first +phase it reads all the makefiles, included makefiles, etc. and +internalizes all the variables and their values, implicit and explicit +rules, and constructs a dependency graph of all the targets and their +prerequisites. During the second phase, @code{make} uses these internal +structures to determine what targets will need to be rebuilt and to +invoke the rules necessary to do so. + +It's important to understand this two-phase approach because it has a +direct impact on how variable and function expansion happens; this is +often a source of some confusion when writing makefiles. Here we will +present a summary of the phases in which expansion happens for different +constructs within the makefile. We say that expansion is +@dfn{immediate} if it happens during the first phase: in this case +@code{make} will expand any variables or functions in that section of a +construct as the makefile is parsed. We say that expansion is +@dfn{deferred} if expansion is not performed immediately. Expansion of +deferred construct is not performed until either the construct appears +later in an immediate context, or until the second phase. + +You may not be familiar with some of these constructs yet. You can +reference this section as you become familiar with them, in later +chapters. + +@subheading Variable Assignment +@cindex +=, expansion +@cindex =, expansion +@cindex ?=, expansion +@cindex +=, expansion +@cindex define, expansion + +Variable definitions are parsed as follows: + +@example +@var{immediate} = @var{deferred} +@var{immediate} ?= @var{deferred} +@var{immediate} := @var{immediate} +@var{immediate} += @var{deferred} or @var{immediate} + +define @var{immediate} + @var{deferred} +endef +@end example + +For the append operator, @samp{+=}, the right-hand side is considered +immediate if the variable was previously set as a simple variable +(@samp{:=}), and deferred otherwise. + +@subheading Conditional Statements +@cindex ifdef, expansion +@cindex ifeq, expansion +@cindex ifndef, expansion +@cindex ifneq, expansion + +All instances of conditional syntax are parsed immediately, in their +entirety; this includes the @code{ifdef}, @code{ifeq}, @code{ifndef}, +and @code{ifneq} forms. + +@subheading Rule Definition +@cindex target, expansion +@cindex prerequisite, expansion +@cindex implicit rule, expansion +@cindex pattern rule, expansion +@cindex explicit rule, expansion + +A rule is always expanded the same way, regardless of the form: + +@example +@var{immediate} : @var{immediate} ; @var{deferred} + @var{deferred} +@end example + +That is, the target and prerequisite sections are expanded immediately, +and the commands used to construct the target are always deferred. This +general rule is true for explicit rules, pattern rules, suffix rules, +static pattern rules, and simple prerequisite definitions. + +@node Rules, Commands, Makefiles, Top +@chapter Writing Rules +@cindex writing rules +@cindex rule, how to write +@cindex target +@cindex prerequisite + +A @dfn{rule} appears in the makefile and says when and how to remake +certain files, called the rule's @dfn{targets} (most often only one per rule). +It lists the other files that are the @dfn{prerequisites} of the target, and +@dfn{commands} to use to create or update the target. + +@cindex default goal +@cindex goal, default +The order of rules is not significant, except for determining the +@dfn{default goal}: the target for @code{make} to consider, if you do +not otherwise specify one. The default goal is the target of the first +rule in the first makefile. If the first rule has multiple targets, +only the first target is taken as the default. There are two +exceptions: a target starting with a period is not a default unless it +contains one or more slashes, @samp{/}, as well; and, a target that +defines a pattern rule has no effect on the default goal. +(@xref{Pattern Rules, ,Defining and Redefining Pattern Rules}.) + +Therefore, we usually write the makefile so that the first rule is the +one for compiling the entire program or all the programs described by +the makefile (often with a target called @samp{all}). +@xref{Goals, ,Arguments to Specify the Goals}. + +@menu +* Rule Example:: An example explained. +* Rule Syntax:: General syntax explained. +* Prerequisite Types:: There are two types of prerequisites. +* Wildcards:: Using wildcard characters such as `*'. +* Directory Search:: Searching other directories for source files. +* Phony Targets:: Using a target that is not a real file's name. +* Force Targets:: You can use a target without commands + or prerequisites to mark other + targets as phony. +* Empty Targets:: When only the date matters and the + files are empty. +* Special Targets:: Targets with special built-in meanings. +* Multiple Targets:: When to make use of several targets in a rule. +* Multiple Rules:: How to use several rules with the same target. +* Static Pattern:: Static pattern rules apply to multiple targets + and can vary the prerequisites according to + the target name. +* Double-Colon:: How to use a special kind of rule to allow + several independent rules for one target. +* Automatic Prerequisites:: How to automatically generate rules giving + prerequisites from source files themselves. +@end menu + +@ifinfo +@node Rule Example, Rule Syntax, Rules, Rules +@section Rule Example + +Here is an example of a rule: + +@example +foo.o : foo.c defs.h # module for twiddling the frobs + cc -c -g foo.c +@end example + +Its target is @file{foo.o} and its prerequisites are @file{foo.c} and +@file{defs.h}. It has one command, which is @samp{cc -c -g foo.c}. +The command line starts with a tab to identify it as a command. + +This rule says two things: + +@itemize @bullet +@item +How to decide whether @file{foo.o} is out of date: it is out of date +if it does not exist, or if either @file{foo.c} or @file{defs.h} is +more recent than it. + +@item +How to update the file @file{foo.o}: by running @code{cc} as stated. +The command does not explicitly mention @file{defs.h}, but we presume +that @file{foo.c} includes it, and that that is why @file{defs.h} was +added to the prerequisites. +@end itemize +@end ifinfo + +@node Rule Syntax, Prerequisite Types, Rule Example, Rules +@section Rule Syntax + +@cindex rule syntax +@cindex syntax of rules +In general, a rule looks like this: + +@example +@var{targets} : @var{prerequisites} + @var{command} + @dots{} +@end example + +@noindent +or like this: + +@example +@var{targets} : @var{prerequisites} ; @var{command} + @var{command} + @dots{} +@end example + +@cindex targets +@cindex rule targets +The @var{targets} are file names, separated by spaces. Wildcard +characters may be used (@pxref{Wildcards, ,Using Wildcard Characters +in File Names}) and a name of the form @file{@var{a}(@var{m})} +represents member @var{m} in archive file @var{a} +(@pxref{Archive Members, ,Archive Members as Targets}). +Usually there is only one +target per rule, but occasionally there is a reason to have more +(@pxref{Multiple Targets, , Multiple Targets in a Rule}).@refill + +@cindex commands +@cindex tab character (in commands) +The @var{command} lines start with a tab character. The first command may +appear on the line after the prerequisites, with a tab character, or may +appear on the same line, with a semicolon. Either way, the effect is the +same. @xref{Commands, ,Writing the Commands in Rules}. + +@cindex dollar sign (@code{$}), in rules +@cindex @code{$}, in rules +@cindex rule, and @code{$} +Because dollar signs are used to start variable references, if you really +want a dollar sign in a rule you must write two of them, @samp{$$} +(@pxref{Using Variables, ,How to Use Variables}). +You may split a long line by inserting a backslash +followed by a newline, but this is not required, as @code{make} places no +limit on the length of a line in a makefile. + +A rule tells @code{make} two things: when the targets are out of date, +and how to update them when necessary. + +@cindex prerequisites +@cindex rule prerequisites +The criterion for being out of date is specified in terms of the +@var{prerequisites}, which consist of file names separated by spaces. +(Wildcards and archive members (@pxref{Archives}) are allowed here too.) +A target is out of date if it does not exist or if it is older than any +of the prerequisites (by comparison of last-modification times). The +idea is that the contents of the target file are computed based on +information in the prerequisites, so if any of the prerequisites changes, +the contents of the existing target file are no longer necessarily +valid. + +How to update is specified by @var{commands}. These are lines to be +executed by the shell (normally @samp{sh}), but with some extra features +(@pxref{Commands, ,Writing the Commands in Rules}). + +@node Prerequisite Types, Wildcards, Rule Syntax, Rules +@comment node-name, next, previous, up +@section Types of Prerequisites +@cindex prerequisite types +@cindex types of prerequisites + +@cindex prerequisites, normal +@cindex normal prerequisites +@cindex prerequisites, order-only +@cindex order-only prerequisites +There are actually two different types of prerequisites understood by +GNU @code{make}: normal prerequisites such as described in the +previous section, and @dfn{order-only} prerequisites. A normal +prerequisite actually makes two statements: first, it imposes an order +of execution of build commands: any commands necessary to build any of +a target's prerequisites will be fully executed before any commands +necessary to build the target. Second, it imposes a dependency +relationship: if any prerequisite is newer than the target, then the +target is considered out-of-date and must be rebuilt. + +Normally, this is exactly what you want: if a target's prerequisite is +updated, then the target should also be updated. + +Occasionally, however, you have a situation where you want to impose a +specific ordering on the rules to be invoked @emph{without} forcing +the target to be updated if one of those rules is executed. In that +case, you want to define @dfn{order-only} prerequisites. Order-only +prerequisites can be specified by placing a pipe symbol (@code{|}) +in the prerequisites list: any prerequisites to the left of the pipe +symbol are normal; any prerequisites to the right are order-only: + +@example +@var{targets} : @var{normal-prerequisites} | @var{order-only-prerequisites} +@end example + +The normal prerequisites section may of course be empty. Also, you +may still declare multiple lines of prerequisites for the same target: +they are appended appropriately. Note that if you declare the same +file to be both a normal and an order-only prerequisite, the normal +prerequisite takes precedence (since they are a strict superset of the +behavior of an order-only prerequisite). + +@node Wildcards, Directory Search, Prerequisite Types, Rules +@section Using Wildcard Characters in File Names +@cindex wildcard +@cindex file name with wildcards +@cindex globbing (wildcards) + +@cindex @code{*} (wildcard character) +@cindex @code{?} (wildcard character) +@cindex @code{[@dots{}]} (wildcard characters) +A single file name can specify many files using @dfn{wildcard characters}. +The wildcard characters in @code{make} are @samp{*}, @samp{?} and +@samp{[@dots{}]}, the same as in the Bourne shell. For example, @file{*.c} +specifies a list of all the files (in the working directory) whose names +end in @samp{.c}.@refill + +@cindex @code{~} (tilde) +@cindex tilde (@code{~}) +@cindex home directory +The character @samp{~} at the beginning of a file name also has special +significance. If alone, or followed by a slash, it represents your home +directory. For example @file{~/bin} expands to @file{/home/you/bin}. +If the @samp{~} is followed by a word, the string represents the home +directory of the user named by that word. For example @file{~john/bin} +expands to @file{/home/john/bin}. On systems which don't have a home +directory for each user (such as MS-DOS or MS-Windows), this +functionality can be simulated by setting the environment variable +@var{HOME}.@refill + +Wildcard expansion happens automatically in targets, in prerequisites, +and in commands (where the shell does the expansion). In other +contexts, wildcard expansion happens only if you request it explicitly +with the @code{wildcard} function. + +The special significance of a wildcard character can be turned off by +preceding it with a backslash. Thus, @file{foo\*bar} would refer to a +specific file whose name consists of @samp{foo}, an asterisk, and +@samp{bar}.@refill + +@menu +* Wildcard Examples:: Several examples +* Wildcard Pitfall:: Problems to avoid. +* Wildcard Function:: How to cause wildcard expansion where + it does not normally take place. +@end menu + +@node Wildcard Examples, Wildcard Pitfall, Wildcards, Wildcards +@subsection Wildcard Examples + +Wildcards can be used in the commands of a rule, where they are expanded +by the shell. For example, here is a rule to delete all the object files: + +@example +@group +clean: + rm -f *.o +@end group +@end example +@cindex @code{rm} (shell command) + +Wildcards are also useful in the prerequisites of a rule. With the +following rule in the makefile, @samp{make print} will print all the +@samp{.c} files that have changed since the last time you printed them: + +@example +print: *.c + lpr -p $? + touch print +@end example + +@cindex @code{print} target +@cindex @code{lpr} (shell command) +@cindex @code{touch} (shell command) +@noindent +This rule uses @file{print} as an empty target file; see @ref{Empty +Targets, ,Empty Target Files to Record Events}. (The automatic variable +@samp{$?} is used to print only those files that have changed; see +@ref{Automatic Variables}.)@refill + +Wildcard expansion does not happen when you define a variable. Thus, if +you write this: + +@example +objects = *.o +@end example + +@noindent +then the value of the variable @code{objects} is the actual string +@samp{*.o}. However, if you use the value of @code{objects} in a target, +prerequisite or command, wildcard expansion will take place at that time. +To set @code{objects} to the expansion, instead use: + +@example +objects := $(wildcard *.o) +@end example + +@noindent +@xref{Wildcard Function}. + +@node Wildcard Pitfall, Wildcard Function, Wildcard Examples, Wildcards +@subsection Pitfalls of Using Wildcards +@cindex wildcard pitfalls +@cindex pitfalls of wildcards +@cindex mistakes with wildcards +@cindex errors with wildcards +@cindex problems with wildcards + +Now here is an example of a naive way of using wildcard expansion, that +does not do what you would intend. Suppose you would like to say that the +executable file @file{foo} is made from all the object files in the +directory, and you write this: + +@example +objects = *.o + +foo : $(objects) + cc -o foo $(CFLAGS) $(objects) +@end example + +@noindent +The value of @code{objects} is the actual string @samp{*.o}. Wildcard +expansion happens in the rule for @file{foo}, so that each @emph{existing} +@samp{.o} file becomes a prerequisite of @file{foo} and will be recompiled if +necessary. + +But what if you delete all the @samp{.o} files? When a wildcard matches +no files, it is left as it is, so then @file{foo} will depend on the +oddly-named file @file{*.o}. Since no such file is likely to exist, +@code{make} will give you an error saying it cannot figure out how to +make @file{*.o}. This is not what you want! + +Actually it is possible to obtain the desired result with wildcard +expansion, but you need more sophisticated techniques, including the +@code{wildcard} function and string substitution. +@ifinfo +@xref{Wildcard Function, ,The Function @code{wildcard}}. +@end ifinfo +@iftex +These are described in the following section. +@end iftex + +@cindex wildcards and MS-DOS/MS-Windows backslashes +@cindex backslashes in pathnames and wildcard expansion + +Microsoft operating systems (MS-DOS and MS-Windows) use backslashes to +separate directories in pathnames, like so: + +@example + c:\foo\bar\baz.c +@end example + +This is equivalent to the Unix-style @file{c:/foo/bar/baz.c} (the +@file{c:} part is the so-called drive letter). When @code{make} runs on +these systems, it supports backslashes as well as the Unix-style forward +slashes in pathnames. However, this support does @emph{not} include the +wildcard expansion, where backslash is a quote character. Therefore, +you @emph{must} use Unix-style slashes in these cases. + + +@node Wildcard Function, , Wildcard Pitfall, Wildcards +@subsection The Function @code{wildcard} +@findex wildcard + +Wildcard expansion happens automatically in rules. But wildcard expansion +does not normally take place when a variable is set, or inside the +arguments of a function. If you want to do wildcard expansion in such +places, you need to use the @code{wildcard} function, like this: + +@example +$(wildcard @var{pattern}@dots{}) +@end example + +@noindent +This string, used anywhere in a makefile, is replaced by a +space-separated list of names of existing files that match one of the +given file name patterns. If no existing file name matches a pattern, +then that pattern is omitted from the output of the @code{wildcard} +function. Note that this is different from how unmatched wildcards +behave in rules, where they are used verbatim rather than ignored +(@pxref{Wildcard Pitfall}). + +One use of the @code{wildcard} function is to get a list of all the C source +files in a directory, like this: + +@example +$(wildcard *.c) +@end example + +We can change the list of C source files into a list of object files by +replacing the @samp{.c} suffix with @samp{.o} in the result, like this: + +@example +$(patsubst %.c,%.o,$(wildcard *.c)) +@end example + +@noindent +(Here we have used another function, @code{patsubst}. +@xref{Text Functions, ,Functions for String Substitution and Analysis}.)@refill + +Thus, a makefile to compile all C source files in the directory and then +link them together could be written as follows: + +@example +objects := $(patsubst %.c,%.o,$(wildcard *.c)) + +foo : $(objects) + cc -o foo $(objects) +@end example + +@noindent +(This takes advantage of the implicit rule for compiling C programs, so +there is no need to write explicit rules for compiling the files. +@xref{Flavors, ,The Two Flavors of Variables}, for an explanation of +@samp{:=}, which is a variant of @samp{=}.) + +@node Directory Search, Phony Targets, Wildcards, Rules +@section Searching Directories for Prerequisites +@vindex VPATH +@findex vpath +@cindex vpath +@cindex search path for prerequisites (@code{VPATH}) +@cindex directory search (@code{VPATH}) + +For large systems, it is often desirable to put sources in a separate +directory from the binaries. The @dfn{directory search} features of +@code{make} facilitate this by searching several directories +automatically to find a prerequisite. When you redistribute the files +among directories, you do not need to change the individual rules, +just the search paths. + +@menu +* General Search:: Specifying a search path that applies + to every prerequisite. +* Selective Search:: Specifying a search path + for a specified class of names. +* Search Algorithm:: When and how search paths are applied. +* Commands/Search:: How to write shell commands that work together + with search paths. +* Implicit/Search:: How search paths affect implicit rules. +* Libraries/Search:: Directory search for link libraries. +@end menu + +@node General Search, Selective Search, Directory Search, Directory Search +@subsection @code{VPATH}: Search Path for All Prerequisites +@vindex VPATH + +The value of the @code{make} variable @code{VPATH} specifies a list of +directories that @code{make} should search. Most often, the +directories are expected to contain prerequisite files that are not in the +current directory; however, @code{VPATH} specifies a search list that +@code{make} applies for all files, including files which are targets of +rules. + +Thus, if a file that is listed as a target or prerequisite does not exist +in the current directory, @code{make} searches the directories listed in +@code{VPATH} for a file with that name. If a file is found in one of +them, that file may become the prerequisite (see below). Rules may then +specify the names of files in the prerequisite list as if they all +existed in the current directory. @xref{Commands/Search, ,Writing Shell +Commands with Directory Search}. + +In the @code{VPATH} variable, directory names are separated by colons or +blanks. The order in which directories are listed is the order followed +by @code{make} in its search. (On MS-DOS and MS-Windows, semi-colons +are used as separators of directory names in @code{VPATH}, since the +colon can be used in the pathname itself, after the drive letter.) + +For example, + +@example +VPATH = src:../headers +@end example + +@noindent +specifies a path containing two directories, @file{src} and +@file{../headers}, which @code{make} searches in that order. + +With this value of @code{VPATH}, the following rule, + +@example +foo.o : foo.c +@end example + +@noindent +is interpreted as if it were written like this: + +@example +foo.o : src/foo.c +@end example + +@noindent +assuming the file @file{foo.c} does not exist in the current directory but +is found in the directory @file{src}. + +@node Selective Search, Search Algorithm, General Search, Directory Search +@subsection The @code{vpath} Directive +@findex vpath + +Similar to the @code{VPATH} variable, but more selective, is the +@code{vpath} directive (note lower case), which allows you to specify a +search path for a particular class of file names: those that match a +particular pattern. Thus you can supply certain search directories for +one class of file names and other directories (or none) for other file +names. + +There are three forms of the @code{vpath} directive: + +@table @code +@item vpath @var{pattern} @var{directories} +Specify the search path @var{directories} for file names that match +@var{pattern}. + +The search path, @var{directories}, is a list of directories to be +searched, separated by colons (semi-colons on MS-DOS and MS-Windows) or +blanks, just like the search path used in the @code{VPATH} variable. + +@item vpath @var{pattern} +Clear out the search path associated with @var{pattern}. + +@c Extra blank line makes sure this gets two lines. +@item vpath + +Clear all search paths previously specified with @code{vpath} directives. +@end table + +A @code{vpath} pattern is a string containing a @samp{%} character. The +string must match the file name of a prerequisite that is being searched +for, the @samp{%} character matching any sequence of zero or more +characters (as in pattern rules; @pxref{Pattern Rules, ,Defining and +Redefining Pattern Rules}). For example, @code{%.h} matches files that +end in @code{.h}. (If there is no @samp{%}, the pattern must match the +prerequisite exactly, which is not useful very often.) + +@cindex @code{%}, quoting in @code{vpath} +@cindex @code{%}, quoting with @code{\} (backslash) +@cindex @code{\} (backslash), to quote @code{%} +@cindex backslash (@code{\}), to quote @code{%} +@cindex quoting @code{%}, in @code{vpath} +@samp{%} characters in a @code{vpath} directive's pattern can be quoted +with preceding backslashes (@samp{\}). Backslashes that would otherwise +quote @samp{%} characters can be quoted with more backslashes. +Backslashes that quote @samp{%} characters or other backslashes are +removed from the pattern before it is compared to file names. Backslashes +that are not in danger of quoting @samp{%} characters go unmolested.@refill + +When a prerequisite fails to exist in the current directory, if the +@var{pattern} in a @code{vpath} directive matches the name of the +prerequisite file, then the @var{directories} in that directive are searched +just like (and before) the directories in the @code{VPATH} variable. + +For example, + +@example +vpath %.h ../headers +@end example + +@noindent +tells @code{make} to look for any prerequisite whose name ends in @file{.h} +in the directory @file{../headers} if the file is not found in the current +directory. + +If several @code{vpath} patterns match the prerequisite file's name, then +@code{make} processes each matching @code{vpath} directive one by one, +searching all the directories mentioned in each directive. @code{make} +handles multiple @code{vpath} directives in the order in which they +appear in the makefile; multiple directives with the same pattern are +independent of each other. + +@need 750 +Thus, + +@example +@group +vpath %.c foo +vpath % blish +vpath %.c bar +@end group +@end example + +@noindent +will look for a file ending in @samp{.c} in @file{foo}, then +@file{blish}, then @file{bar}, while + +@example +@group +vpath %.c foo:bar +vpath % blish +@end group +@end example + +@noindent +will look for a file ending in @samp{.c} in @file{foo}, then +@file{bar}, then @file{blish}. + +@node Search Algorithm, Commands/Search, Selective Search, Directory Search +@subsection How Directory Searches are Performed +@cindex algorithm for directory search +@cindex directory search algorithm + +When a prerequisite is found through directory search, regardless of type +(general or selective), the pathname located may not be the one that +@code{make} actually provides you in the prerequisite list. Sometimes +the path discovered through directory search is thrown away. + +The algorithm @code{make} uses to decide whether to keep or abandon a +path found via directory search is as follows: + +@enumerate +@item +If a target file does not exist at the path specified in the makefile, +directory search is performed. + +@item +If the directory search is successful, that path is kept and this file +is tentatively stored as the target. + +@item +All prerequisites of this target are examined using this same method. + +@item +After processing the prerequisites, the target may or may not need to be +rebuilt: + +@enumerate a +@item +If the target does @emph{not} need to be rebuilt, the path to the file +found during directory search is used for any prerequisite lists which +contain this target. In short, if @code{make} doesn't need to rebuild +the target then you use the path found via directory search. + +@item +If the target @emph{does} need to be rebuilt (is out-of-date), the +pathname found during directory search is @emph{thrown away}, and the +target is rebuilt using the file name specified in the makefile. In +short, if @code{make} must rebuild, then the target is rebuilt locally, +not in the directory found via directory search. +@end enumerate +@end enumerate + +This algorithm may seem complex, but in practice it is quite often +exactly what you want. + +@cindex traditional directory search (GPATH) +@cindex directory search, traditional (GPATH) +Other versions of @code{make} use a simpler algorithm: if the file does +not exist, and it is found via directory search, then that pathname is +always used whether or not the target needs to be built. Thus, if the +target is rebuilt it is created at the pathname discovered during +directory search. + +@vindex GPATH +If, in fact, this is the behavior you want for some or all of your +directories, you can use the @code{GPATH} variable to indicate this to +@code{make}. + +@code{GPATH} has the same syntax and format as @code{VPATH} (that is, a +space- or colon-delimited list of pathnames). If an out-of-date target +is found by directory search in a directory that also appears in +@code{GPATH}, then that pathname is not thrown away. The target is +rebuilt using the expanded path. + +@node Commands/Search, Implicit/Search, Search Algorithm, Directory Search +@subsection Writing Shell Commands with Directory Search +@cindex shell command, and directory search +@cindex directory search (@code{VPATH}), and shell commands + +When a prerequisite is found in another directory through directory search, +this cannot change the commands of the rule; they will execute as written. +Therefore, you must write the commands with care so that they will look for +the prerequisite in the directory where @code{make} finds it. + +This is done with the @dfn{automatic variables} such as @samp{$^} +(@pxref{Automatic Variables}). +For instance, the value of @samp{$^} is a +list of all the prerequisites of the rule, including the names of +the directories in which they were found, and the value of +@samp{$@@} is the target. Thus:@refill + +@example +foo.o : foo.c + cc -c $(CFLAGS) $^ -o $@@ +@end example + +@noindent +(The variable @code{CFLAGS} exists so you can specify flags for C +compilation by implicit rules; we use it here for consistency so it will +affect all C compilations uniformly; +@pxref{Implicit Variables, ,Variables Used by Implicit Rules}.) + +Often the prerequisites include header files as well, which you do not +want to mention in the commands. The automatic variable @samp{$<} is +just the first prerequisite: + +@example +VPATH = src:../headers +foo.o : foo.c defs.h hack.h + cc -c $(CFLAGS) $< -o $@@ +@end example + +@node Implicit/Search, Libraries/Search, Commands/Search, Directory Search +@subsection Directory Search and Implicit Rules +@cindex @code{VPATH}, and implicit rules +@cindex directory search (@code{VPATH}), and implicit rules +@cindex search path for prerequisites (@code{VPATH}), and implicit rules +@cindex implicit rule, and directory search +@cindex implicit rule, and @code{VPATH} +@cindex rule, implicit, and directory search +@cindex rule, implicit, and @code{VPATH} + +The search through the directories specified in @code{VPATH} or with +@code{vpath} also happens during consideration of implicit rules +(@pxref{Implicit Rules, ,Using Implicit Rules}). + +For example, when a file @file{foo.o} has no explicit rule, @code{make} +considers implicit rules, such as the built-in rule to compile +@file{foo.c} if that file exists. If such a file is lacking in the +current directory, the appropriate directories are searched for it. If +@file{foo.c} exists (or is mentioned in the makefile) in any of the +directories, the implicit rule for C compilation is applied. + +The commands of implicit rules normally use automatic variables as a +matter of necessity; consequently they will use the file names found by +directory search with no extra effort. + +@node Libraries/Search, , Implicit/Search, Directory Search +@subsection Directory Search for Link Libraries +@cindex link libraries, and directory search +@cindex libraries for linking, directory search +@cindex directory search (@code{VPATH}), and link libraries +@cindex @code{VPATH}, and link libraries +@cindex search path for prerequisites (@code{VPATH}), and link libraries +@cindex @code{-l} (library search) +@cindex link libraries, patterns matching +@cindex @code{.LIBPATTERNS}, and link libraries +@vindex .LIBPATTERNS + +Directory search applies in a special way to libraries used with the +linker. This special feature comes into play when you write a prerequisite +whose name is of the form @samp{-l@var{name}}. (You can tell something +strange is going on here because the prerequisite is normally the name of a +file, and the @emph{file name} of a library generally looks like +@file{lib@var{name}.a}, not like @samp{-l@var{name}}.)@refill + +When a prerequisite's name has the form @samp{-l@var{name}}, @code{make} +handles it specially by searching for the file @file{lib@var{name}.so} in +the current directory, in directories specified by matching @code{vpath} +search paths and the @code{VPATH} search path, and then in the +directories @file{/lib}, @file{/usr/lib}, and @file{@var{prefix}/lib} +(normally @file{/usr/local/lib}, but MS-DOS/MS-Windows versions of +@code{make} behave as if @var{prefix} is defined to be the root of the +DJGPP installation tree). + +If that file is not found, then the file @file{lib@var{name}.a} is +searched for, in the same directories as above. + +For example, if there is a @file{/usr/lib/libcurses.a} library on your +system (and no @file{/usr/lib/libcurses.so} file), then + +@example +@group +foo : foo.c -lcurses + cc $^ -o $@@ +@end group +@end example + +@noindent +would cause the command @samp{cc foo.c /usr/lib/libcurses.a -o foo} to +be executed when @file{foo} is older than @file{foo.c} or than +@file{/usr/lib/libcurses.a}.@refill + +Although the default set of files to be searched for is +@file{lib@var{name}.so} and @file{lib@var{name}.a}, this is customizable +via the @code{.LIBPATTERNS} variable. Each word in the value of this +variable is a pattern string. When a prerequisite like +@samp{-l@var{name}} is seen, @code{make} will replace the percent in +each pattern in the list with @var{name} and perform the above directory +searches using that library filename. If no library is found, the next +word in the list will be used. + +The default value for @code{.LIBPATTERNS} is ``@samp{lib%.so lib%.a}'', +which provides the default behavior described above. + +You can turn off link library expansion completely by setting this +variable to an empty value. + +@node Phony Targets, Force Targets, Directory Search, Rules +@section Phony Targets +@cindex phony targets +@cindex targets, phony +@cindex targets without a file + +A phony target is one that is not really the name of a file. It is just a +name for some commands to be executed when you make an explicit request. +There are two reasons to use a phony target: to avoid a conflict with +a file of the same name, and to improve performance. + +If you write a rule whose commands will not create the target file, the +commands will be executed every time the target comes up for remaking. +Here is an example: + +@example +@group +clean: + rm *.o temp +@end group +@end example + +@noindent +Because the @code{rm} command does not create a file named @file{clean}, +probably no such file will ever exist. Therefore, the @code{rm} command +will be executed every time you say @samp{make clean}. +@cindex @code{rm} (shell command) + +@findex .PHONY +The phony target will cease to work if anything ever does create a file +named @file{clean} in this directory. Since it has no prerequisites, the +file @file{clean} would inevitably be considered up to date, and its +commands would not be executed. To avoid this problem, you can explicitly +declare the target to be phony, using the special target @code{.PHONY} +(@pxref{Special Targets, ,Special Built-in Target Names}) as follows: + +@example +.PHONY : clean +@end example + +@noindent +Once this is done, @samp{make clean} will run the commands regardless of +whether there is a file named @file{clean}. + +Since it knows that phony targets do not name actual files that could be +remade from other files, @code{make} skips the implicit rule search for +phony targets (@pxref{Implicit Rules}). This is why declaring a target +phony is good for performance, even if you are not worried about the +actual file existing. + +Thus, you first write the line that states that @code{clean} is a +phony target, then you write the rule, like this: + +@example +@group +.PHONY: clean +clean: + rm *.o temp +@end group +@end example + +Another example of the usefulness of phony targets is in conjunction +with recursive invocations of @code{make} (for more information, see +@ref{Recursion, ,Recursive Use of @code{make}}). In this case the +makefile will often contain a variable which lists a number of +subdirectories to be built. One way to handle this is with one rule +whose command is a shell loop over the subdirectories, like this: + +@example +@group +SUBDIRS = foo bar baz + +subdirs: + for dir in $(SUBDIRS); do \ + $(MAKE) -C $$dir; \ + done +@end group +@end example + +There are a few problems with this method, however. First, any error +detected in a submake is not noted by this rule, so it will continue to +build the rest of the directories even when one fails. This can be +overcome by adding shell commands to note the error and exit, but then +it will do so even if @code{make} is invoked with the @code{-k} option, +which is unfortunate. Second, and perhaps more importantly, you cannot +take advantage of the parallel build capabilities of make using this +method, since there is only one rule. + +By declaring the subdirectories as phony targets (you must do this as +the subdirectory obviously always exists; otherwise it won't be built) +you can remove these problems: + +@example +@group +SUBDIRS = foo bar baz + +.PHONY: subdirs $(SUBDIRS) + +subdirs: $(SUBDIRS) + +$(SUBDIRS): + $(MAKE) -C $@@ + +foo: baz +@end group +@end example + +Here we've also declared that the @file{foo} subdirectory cannot be +built until after the @file{baz} subdirectory is complete; this kind of +relationship declaration is particularly important when attempting +parallel builds. + +A phony target should not be a prerequisite of a real target file; if it +is, its commands are run every time @code{make} goes to update that +file. As long as a phony target is never a prerequisite of a real +target, the phony target commands will be executed only when the phony +target is a specified goal (@pxref{Goals, ,Arguments to Specify the +Goals}). + +Phony targets can have prerequisites. When one directory contains multiple +programs, it is most convenient to describe all of the programs in one +makefile @file{./Makefile}. Since the target remade by default will be the +first one in the makefile, it is common to make this a phony target named +@samp{all} and give it, as prerequisites, all the individual programs. For +example: + +@example +all : prog1 prog2 prog3 +.PHONY : all + +prog1 : prog1.o utils.o + cc -o prog1 prog1.o utils.o + +prog2 : prog2.o + cc -o prog2 prog2.o + +prog3 : prog3.o sort.o utils.o + cc -o prog3 prog3.o sort.o utils.o +@end example + +@noindent +Now you can say just @samp{make} to remake all three programs, or specify +as arguments the ones to remake (as in @samp{make prog1 prog3}). + +When one phony target is a prerequisite of another, it serves as a subroutine +of the other. For example, here @samp{make cleanall} will delete the +object files, the difference files, and the file @file{program}: + +@example +.PHONY: cleanall cleanobj cleandiff + +cleanall : cleanobj cleandiff + rm program + +cleanobj : + rm *.o + +cleandiff : + rm *.diff +@end example + +@node Force Targets, Empty Targets, Phony Targets, Rules +@section Rules without Commands or Prerequisites +@cindex force targets +@cindex targets, force +@cindex @code{FORCE} +@cindex rule, no commands or prerequisites + +If a rule has no prerequisites or commands, and the target of the rule +is a nonexistent file, then @code{make} imagines this target to have +been updated whenever its rule is run. This implies that all targets +depending on this one will always have their commands run. + +An example will illustrate this: + +@example +@group +clean: FORCE + rm $(objects) +FORCE: +@end group +@end example + +Here the target @samp{FORCE} satisfies the special conditions, so the +target @file{clean} that depends on it is forced to run its commands. +There is nothing special about the name @samp{FORCE}, but that is one name +commonly used this way. + +As you can see, using @samp{FORCE} this way has the same results as using +@samp{.PHONY: clean}. + +Using @samp{.PHONY} is more explicit and more efficient. However, +other versions of @code{make} do not support @samp{.PHONY}; thus +@samp{FORCE} appears in many makefiles. @xref{Phony Targets}. + +@node Empty Targets, Special Targets, Force Targets, Rules +@section Empty Target Files to Record Events +@cindex empty targets +@cindex targets, empty +@cindex recording events with empty targets + +The @dfn{empty target} is a variant of the phony target; it is used to hold +commands for an action that you request explicitly from time to time. +Unlike a phony target, this target file can really exist; but the file's +contents do not matter, and usually are empty. + +The purpose of the empty target file is to record, with its +last-modification time, when the rule's commands were last executed. It +does so because one of the commands is a @code{touch} command to update the +target file. + +The empty target file should have some prerequisites (otherwise it +doesn't make sense). When you ask to remake the empty target, the +commands are executed if any prerequisite is more recent than the target; +in other words, if a prerequisite has changed since the last time you +remade the target. Here is an example: + +@example +print: foo.c bar.c + lpr -p $? + touch print +@end example +@cindex @code{print} target +@cindex @code{lpr} (shell command) +@cindex @code{touch} (shell command) + +@noindent +With this rule, @samp{make print} will execute the @code{lpr} command if +either source file has changed since the last @samp{make print}. The +automatic variable @samp{$?} is used to print only those files that have +changed (@pxref{Automatic Variables}). + +@node Special Targets, Multiple Targets, Empty Targets, Rules +@section Special Built-in Target Names +@cindex special targets +@cindex built-in special targets +@cindex targets, built-in special + +Certain names have special meanings if they appear as targets. + +@table @code +@findex .PHONY +@item .PHONY + +The prerequisites of the special target @code{.PHONY} are considered to +be phony targets. When it is time to consider such a target, +@code{make} will run its commands unconditionally, regardless of +whether a file with that name exists or what its last-modification +time is. @xref{Phony Targets, ,Phony Targets}. + +@findex .SUFFIXES +@item .SUFFIXES + +The prerequisites of the special target @code{.SUFFIXES} are the list +of suffixes to be used in checking for suffix rules. +@xref{Suffix Rules, , Old-Fashioned Suffix Rules}. + +@findex .DEFAULT +@item .DEFAULT + +The commands specified for @code{.DEFAULT} are used for any target for +which no rules are found (either explicit rules or implicit rules). +@xref{Last Resort}. If @code{.DEFAULT} commands are specified, every +file mentioned as a prerequisite, but not as a target in a rule, will have +these commands executed on its behalf. @xref{Implicit Rule Search, +,Implicit Rule Search Algorithm}. + +@findex .PRECIOUS +@item .PRECIOUS +@cindex precious targets +@cindex preserving with @code{.PRECIOUS} + +The targets which @code{.PRECIOUS} depends on are given the following +special treatment: if @code{make} is killed or interrupted during the +execution of their commands, the target is not deleted. +@xref{Interrupts, ,Interrupting or Killing @code{make}}. Also, if the +target is an intermediate file, it will not be deleted after it is no +longer needed, as is normally done. @xref{Chained Rules, ,Chains of +Implicit Rules}. In this latter respect it overlaps with the +@code{.SECONDARY} special target. + +You can also list the target pattern of an implicit rule (such as +@samp{%.o}) as a prerequisite file of the special target @code{.PRECIOUS} +to preserve intermediate files created by rules whose target patterns +match that file's name. + +@findex .INTERMEDIATE +@item .INTERMEDIATE +@cindex intermediate targets, explicit + +The targets which @code{.INTERMEDIATE} depends on are treated as +intermediate files. @xref{Chained Rules, ,Chains of Implicit Rules}. +@code{.INTERMEDIATE} with no prerequisites has no effect. + +@findex .SECONDARY +@item .SECONDARY +@cindex secondary targets +@cindex preserving with @code{.SECONDARY} + +The targets which @code{.SECONDARY} depends on are treated as +intermediate files, except that they are never automatically deleted. +@xref{Chained Rules, ,Chains of Implicit Rules}. + +@code{.SECONDARY} with no prerequisites causes all targets to be treated +as secondary (i.e., no target is removed because it is considered +intermediate). + +@findex .DELETE_ON_ERROR +@item .DELETE_ON_ERROR +@cindex removing targets on failure + +If @code{.DELETE_ON_ERROR} is mentioned as a target anywhere in the +makefile, then @code{make} will delete the target of a rule if it has +changed and its commands exit with a nonzero exit status, just as it +does when it receives a signal. @xref{Errors, ,Errors in Commands}. + +@findex .IGNORE +@item .IGNORE + +If you specify prerequisites for @code{.IGNORE}, then @code{make} will +ignore errors in execution of the commands run for those particular +files. The commands for @code{.IGNORE} are not meaningful. + +If mentioned as a target with no prerequisites, @code{.IGNORE} says to +ignore errors in execution of commands for all files. This usage of +@samp{.IGNORE} is supported only for historical compatibility. Since +this affects every command in the makefile, it is not very useful; we +recommend you use the more selective ways to ignore errors in specific +commands. @xref{Errors, ,Errors in Commands}. + +@findex .LOW_RESOLUTION_TIME +@item .LOW_RESOLUTION_TIME + +If you specify prerequisites for @code{.LOW_RESOLUTION_TIME}, +@command{make} assumes that these files are created by commands that +generate low resolution time stamps. The commands for +@code{.LOW_RESOLUTION_TIME} are not meaningful. + +The high resolution file time stamps of many modern hosts lessen the +chance of @command{make} incorrectly concluding that a file is up to +date. Unfortunately, these hosts provide no way to set a high +resolution file time stamp, so commands like @samp{cp -p} that +explicitly set a file's time stamp must discard its subsecond part. If +a file is created by such a command, you should list it as a +prerequisite of @code{.LOW_RESOLUTION_TIME} so that @command{make} does +not mistakenly conclude that the file is out of date. For example: + +@example +@group +.LOW_RESOLUTION_TIME: dst +dst: src + cp -p src dst +@end group +@end example + +Since @samp{cp -p} discards the subsecond part of @file{src}'s time +stamp, @file{dst} is typically slightly older than @file{src} even when +it is up to date. The @code{.LOW_RESOLUTION_TIME} line causes +@command{make} to consider @file{dst} to be up to date if its time stamp +is at the start of the same second that @file{src}'s time stamp is in. + +Due to a limitation of the archive format, archive member time stamps +are always low resolution. You need not list archive members as +prerequisites of @code{.LOW_RESOLUTION_TIME}, as @command{make} does this +automatically. + +@findex .SILENT +@item .SILENT + +If you specify prerequisites for @code{.SILENT}, then @code{make} will +not print the commands to remake those particular files before executing +them. The commands for @code{.SILENT} are not meaningful. + +If mentioned as a target with no prerequisites, @code{.SILENT} says not +to print any commands before executing them. This usage of +@samp{.SILENT} is supported only for historical compatibility. We +recommend you use the more selective ways to silence specific commands. +@xref{Echoing, ,Command Echoing}. If you want to silence all commands +for a particular run of @code{make}, use the @samp{-s} or +@w{@samp{--silent}} option (@pxref{Options Summary}). + +@findex .EXPORT_ALL_VARIABLES +@item .EXPORT_ALL_VARIABLES + +Simply by being mentioned as a target, this tells @code{make} to +export all variables to child processes by default. +@xref{Variables/Recursion, ,Communicating Variables to a +Sub-@code{make}}. + +@findex .NOTPARALLEL +@item .NOTPARALLEL +@cindex parallel execution, overriding + +If @code{.NOTPARALLEL} is mentioned as a target, then this invocation of +@code{make} will be run serially, even if the @samp{-j} option is +given. Any recursively invoked @code{make} command will still be run in +parallel (unless its makefile contains this target). Any prerequisites +on this target are ignored. +@end table + +Any defined implicit rule suffix also counts as a special target if it +appears as a target, and so does the concatenation of two suffixes, such +as @samp{.c.o}. These targets are suffix rules, an obsolete way of +defining implicit rules (but a way still widely used). In principle, any +target name could be special in this way if you break it in two and add +both pieces to the suffix list. In practice, suffixes normally begin with +@samp{.}, so these special target names also begin with @samp{.}. +@xref{Suffix Rules, ,Old-Fashioned Suffix Rules}. + +@node Multiple Targets, Multiple Rules, Special Targets, Rules +@section Multiple Targets in a Rule +@cindex multiple targets +@cindex several targets in a rule +@cindex targets, multiple +@cindex rule, with multiple targets + +A rule with multiple targets is equivalent to writing many rules, each with +one target, and all identical aside from that. The same commands apply to +all the targets, but their effects may vary because you can substitute the +actual target name into the command using @samp{$@@}. The rule contributes +the same prerequisites to all the targets also. + +This is useful in two cases. + +@itemize @bullet +@item +You want just prerequisites, no commands. For example: + +@example +kbd.o command.o files.o: command.h +@end example + +@noindent +gives an additional prerequisite to each of the three object files +mentioned. + +@item +Similar commands work for all the targets. The commands do not need +to be absolutely identical, since the automatic variable @samp{$@@} +can be used to substitute the particular target to be remade into the +commands (@pxref{Automatic Variables}). For example: + +@example +@group +bigoutput littleoutput : text.g + generate text.g -$(subst output,,$@@) > $@@ +@end group +@end example +@findex subst + +@noindent +is equivalent to + +@example +bigoutput : text.g + generate text.g -big > bigoutput +littleoutput : text.g + generate text.g -little > littleoutput +@end example + +@noindent +Here we assume the hypothetical program @code{generate} makes two +types of output, one if given @samp{-big} and one if given +@samp{-little}. +@xref{Text Functions, ,Functions for String Substitution and Analysis}, +for an explanation of the @code{subst} function. +@end itemize + +Suppose you would like to vary the prerequisites according to the target, +much as the variable @samp{$@@} allows you to vary the commands. +You cannot do this with multiple targets in an ordinary rule, but you can +do it with a @dfn{static pattern rule}. +@xref{Static Pattern, ,Static Pattern Rules}. + +@node Multiple Rules, Static Pattern, Multiple Targets, Rules +@section Multiple Rules for One Target +@cindex multiple rules for one target +@cindex several rules for one target +@cindex rule, multiple for one target +@cindex target, multiple rules for one + +One file can be the target of several rules. All the prerequisites +mentioned in all the rules are merged into one list of prerequisites for +the target. If the target is older than any prerequisite from any rule, +the commands are executed. + +There can only be one set of commands to be executed for a file. If +more than one rule gives commands for the same file, @code{make} uses +the last set given and prints an error message. (As a special case, +if the file's name begins with a dot, no error message is printed. +This odd behavior is only for compatibility with other implementations +of @code{make}... you should avoid using it). Occasionally it is +useful to have the same target invoke multiple commands which are +defined in different parts of your makefile; you can use +@dfn{double-colon rules} (@pxref{Double-Colon}) for this. + +An extra rule with just prerequisites can be used to give a few extra +prerequisites to many files at once. For example, makefiles often +have a variable, such as @code{objects}, containing a list of all the +compiler output files in the system being made. An easy way to say +that all of them must be recompiled if @file{config.h} changes is to +write the following: + +@example +objects = foo.o bar.o +foo.o : defs.h +bar.o : defs.h test.h +$(objects) : config.h +@end example + +This could be inserted or taken out without changing the rules that really +specify how to make the object files, making it a convenient form to use if +you wish to add the additional prerequisite intermittently. + +Another wrinkle is that the additional prerequisites could be specified with +a variable that you set with a command argument to @code{make} +(@pxref{Overriding, ,Overriding Variables}). For example, + +@example +@group +extradeps= +$(objects) : $(extradeps) +@end group +@end example + +@noindent +means that the command @samp{make extradeps=foo.h} will consider +@file{foo.h} as a prerequisite of each object file, but plain @samp{make} +will not. + +If none of the explicit rules for a target has commands, then @code{make} +searches for an applicable implicit rule to find some commands +@pxref{Implicit Rules, ,Using Implicit Rules}). + +@node Static Pattern, Double-Colon, Multiple Rules, Rules +@section Static Pattern Rules +@cindex static pattern rule +@cindex rule, static pattern +@cindex pattern rules, static (not implicit) +@cindex varying prerequisites +@cindex prerequisites, varying (static pattern) + +@dfn{Static pattern rules} are rules which specify multiple targets and +construct the prerequisite names for each target based on the target name. +They are more general than ordinary rules with multiple targets because the +targets do not have to have identical prerequisites. Their prerequisites must +be @emph{analogous}, but not necessarily @emph{identical}. + +@menu +* Static Usage:: The syntax of static pattern rules. +* Static versus Implicit:: When are they better than implicit rules? +@end menu + +@node Static Usage, Static versus Implicit, Static Pattern, Static Pattern +@subsection Syntax of Static Pattern Rules +@cindex static pattern rule, syntax of +@cindex pattern rules, static, syntax of + +Here is the syntax of a static pattern rule: + +@example +@var{targets} @dots{}: @var{target-pattern}: @var{prereq-patterns} @dots{} + @var{commands} + @dots{} +@end example + +@noindent +The @var{targets} list specifies the targets that the rule applies to. +The targets can contain wildcard characters, just like the targets of +ordinary rules (@pxref{Wildcards, ,Using Wildcard Characters in File +Names}). + +@cindex target pattern, static (not implicit) +@cindex stem +The @var{target-pattern} and @var{prereq-patterns} say how to compute the +prerequisites of each target. Each target is matched against the +@var{target-pattern} to extract a part of the target name, called the +@dfn{stem}. This stem is substituted into each of the @var{prereq-patterns} +to make the prerequisite names (one from each @var{prereq-pattern}). + +Each pattern normally contains the character @samp{%} just once. When the +@var{target-pattern} matches a target, the @samp{%} can match any part of +the target name; this part is called the @dfn{stem}. The rest of the +pattern must match exactly. For example, the target @file{foo.o} matches +the pattern @samp{%.o}, with @samp{foo} as the stem. The targets +@file{foo.c} and @file{foo.out} do not match that pattern.@refill + +@cindex prerequisite pattern, static (not implicit) +The prerequisite names for each target are made by substituting the stem +for the @samp{%} in each prerequisite pattern. For example, if one +prerequisite pattern is @file{%.c}, then substitution of the stem +@samp{foo} gives the prerequisite name @file{foo.c}. It is legitimate +to write a prerequisite pattern that does not contain @samp{%}; then this +prerequisite is the same for all targets. + +@cindex @code{%}, quoting in static pattern +@cindex @code{%}, quoting with @code{\} (backslash) +@cindex @code{\} (backslash), to quote @code{%} +@cindex backslash (@code{\}), to quote @code{%} +@cindex quoting @code{%}, in static pattern +@samp{%} characters in pattern rules can be quoted with preceding +backslashes (@samp{\}). Backslashes that would otherwise quote @samp{%} +characters can be quoted with more backslashes. Backslashes that quote +@samp{%} characters or other backslashes are removed from the pattern +before it is compared to file names or has a stem substituted into it. +Backslashes that are not in danger of quoting @samp{%} characters go +unmolested. For example, the pattern @file{the\%weird\\%pattern\\} has +@samp{the%weird\} preceding the operative @samp{%} character, and +@samp{pattern\\} following it. The final two backslashes are left alone +because they cannot affect any @samp{%} character.@refill + +Here is an example, which compiles each of @file{foo.o} and @file{bar.o} +from the corresponding @file{.c} file: + +@example +@group +objects = foo.o bar.o + +all: $(objects) + +$(objects): %.o: %.c + $(CC) -c $(CFLAGS) $< -o $@@ +@end group +@end example + +@noindent +Here @samp{$<} is the automatic variable that holds the name of the +prerequisite and @samp{$@@} is the automatic variable that holds the name +of the target; see @ref{Automatic Variables}. + +Each target specified must match the target pattern; a warning is issued +for each target that does not. If you have a list of files, only some of +which will match the pattern, you can use the @code{filter} function to +remove nonmatching file names (@pxref{Text Functions, ,Functions for String Substitution and Analysis}): + +@example +files = foo.elc bar.o lose.o + +$(filter %.o,$(files)): %.o: %.c + $(CC) -c $(CFLAGS) $< -o $@@ +$(filter %.elc,$(files)): %.elc: %.el + emacs -f batch-byte-compile $< +@end example + +@noindent +In this example the result of @samp{$(filter %.o,$(files))} is +@file{bar.o lose.o}, and the first static pattern rule causes each of +these object files to be updated by compiling the corresponding C source +file. The result of @w{@samp{$(filter %.elc,$(files))}} is +@file{foo.elc}, so that file is made from @file{foo.el}.@refill + +Another example shows how to use @code{$*} in static pattern rules: +@vindex $*@r{, and static pattern} + +@example +@group +bigoutput littleoutput : %output : text.g + generate text.g -$* > $@@ +@end group +@end example + +@noindent +When the @code{generate} command is run, @code{$*} will expand to the +stem, either @samp{big} or @samp{little}. + +@node Static versus Implicit, , Static Usage, Static Pattern +@subsection Static Pattern Rules versus Implicit Rules +@cindex rule, static pattern versus implicit +@cindex static pattern rule, versus implicit + +A static pattern rule has much in common with an implicit rule defined as a +pattern rule (@pxref{Pattern Rules, ,Defining and Redefining Pattern Rules}). +Both have a pattern for the target and patterns for constructing the +names of prerequisites. The difference is in how @code{make} decides +@emph{when} the rule applies. + +An implicit rule @emph{can} apply to any target that matches its pattern, +but it @emph{does} apply only when the target has no commands otherwise +specified, and only when the prerequisites can be found. If more than one +implicit rule appears applicable, only one applies; the choice depends on +the order of rules. + +By contrast, a static pattern rule applies to the precise list of targets +that you specify in the rule. It cannot apply to any other target and it +invariably does apply to each of the targets specified. If two conflicting +rules apply, and both have commands, that's an error. + +The static pattern rule can be better than an implicit rule for these +reasons: + +@itemize @bullet +@item +You may wish to override the usual implicit rule for a few +files whose names cannot be categorized syntactically but +can be given in an explicit list. + +@item +If you cannot be sure of the precise contents of the directories +you are using, you may not be sure which other irrelevant files +might lead @code{make} to use the wrong implicit rule. The choice +might depend on the order in which the implicit rule search is done. +With static pattern rules, there is no uncertainty: each rule applies +to precisely the targets specified. +@end itemize + +@node Double-Colon, Automatic Prerequisites, Static Pattern, Rules +@section Double-Colon Rules +@cindex double-colon rules +@cindex rule, double-colon (@code{::}) +@cindex multiple rules for one target (@code{::}) +@cindex @code{::} rules (double-colon) + +@dfn{Double-colon} rules are rules written with @samp{::} instead of +@samp{:} after the target names. They are handled differently from +ordinary rules when the same target appears in more than one rule. + +When a target appears in multiple rules, all the rules must be the same +type: all ordinary, or all double-colon. If they are double-colon, each +of them is independent of the others. Each double-colon rule's commands +are executed if the target is older than any prerequisites of that rule. +If there are no prerequisites for that rule, its commands are always +executed (even if the target already exists). This can result in +executing none, any, or all of the double-colon rules. + +Double-colon rules with the same target are in fact completely separate +from one another. Each double-colon rule is processed individually, just +as rules with different targets are processed. + +The double-colon rules for a target are executed in the order they appear +in the makefile. However, the cases where double-colon rules really make +sense are those where the order of executing the commands would not matter. + +Double-colon rules are somewhat obscure and not often very useful; they +provide a mechanism for cases in which the method used to update a target +differs depending on which prerequisite files caused the update, and such +cases are rare. + +Each double-colon rule should specify commands; if it does not, an +implicit rule will be used if one applies. +@xref{Implicit Rules, ,Using Implicit Rules}. + +@node Automatic Prerequisites, , Double-Colon, Rules +@section Generating Prerequisites Automatically +@cindex prerequisites, automatic generation +@cindex automatic generation of prerequisites +@cindex generating prerequisites automatically + +In the makefile for a program, many of the rules you need to write often +say only that some object file depends on some header +file. For example, if @file{main.c} uses @file{defs.h} via an +@code{#include}, you would write: + +@example +main.o: defs.h +@end example + +@noindent +You need this rule so that @code{make} knows that it must remake +@file{main.o} whenever @file{defs.h} changes. You can see that for a +large program you would have to write dozens of such rules in your +makefile. And, you must always be very careful to update the makefile +every time you add or remove an @code{#include}. +@cindex @code{#include} + +@cindex @code{-M} (to compiler) +To avoid this hassle, most modern C compilers can write these rules for +you, by looking at the @code{#include} lines in the source files. +Usually this is done with the @samp{-M} option to the compiler. +For example, the command: + +@example +cc -M main.c +@end example + +@noindent +generates the output: + +@example +main.o : main.c defs.h +@end example + +@noindent +Thus you no longer have to write all those rules yourself. +The compiler will do it for you. + +Note that such a prerequisite constitutes mentioning @file{main.o} in a +makefile, so it can never be considered an intermediate file by implicit +rule search. This means that @code{make} won't ever remove the file +after using it; @pxref{Chained Rules, ,Chains of Implicit Rules}. + +@cindex @code{make depend} +With old @code{make} programs, it was traditional practice to use this +compiler feature to generate prerequisites on demand with a command like +@samp{make depend}. That command would create a file @file{depend} +containing all the automatically-generated prerequisites; then the +makefile could use @code{include} to read them in (@pxref{Include}). + +In GNU @code{make}, the feature of remaking makefiles makes this +practice obsolete---you need never tell @code{make} explicitly to +regenerate the prerequisites, because it always regenerates any makefile +that is out of date. @xref{Remaking Makefiles}. + +The practice we recommend for automatic prerequisite generation is to have +one makefile corresponding to each source file. For each source file +@file{@var{name}.c} there is a makefile @file{@var{name}.d} which lists +what files the object file @file{@var{name}.o} depends on. That way +only the source files that have changed need to be rescanned to produce +the new prerequisites. + +Here is the pattern rule to generate a file of prerequisites (i.e., a makefile) +called @file{@var{name}.d} from a C source file called @file{@var{name}.c}: + +@smallexample +@group +%.d: %.c + @set -e; rm -f $@@; \ + $(CC) -M $(CPPFLAGS) $< > $@@.$$$$; \ + sed 's,\($*\)\.o[ :]*,\1.o $@@ : ,g' < $@@.$$$$ > $@@; \ + rm -f $@@.$$$$ +@end group +@end smallexample + +@noindent +@xref{Pattern Rules}, for information on defining pattern rules. The +@samp{-e} flag to the shell causes it to exit immediately if the +@code{$(CC)} command (or any other command) fails (exits with a +nonzero status). +@cindex @code{-e} (shell flag) + +@cindex @code{-MM} (to GNU compiler) +With the GNU C compiler, you may wish to use the @samp{-MM} flag instead +of @samp{-M}. This omits prerequisites on system header files. +@xref{Preprocessor Options, , Options Controlling the Preprocessor, +gcc.info, Using GNU CC}, for details. + +@cindex @code{sed} (shell command) +The purpose of the @code{sed} command is to translate (for example): + +@example +main.o : main.c defs.h +@end example + +@noindent +into: + +@example +main.o main.d : main.c defs.h +@end example + +@noindent +@cindex @code{.d} +This makes each @samp{.d} file depend on all the source and header files +that the corresponding @samp{.o} file depends on. @code{make} then +knows it must regenerate the prerequisites whenever any of the source or +header files changes. + +Once you've defined the rule to remake the @samp{.d} files, +you then use the @code{include} directive to read them all in. +@xref{Include}. For example: + +@example +@group +sources = foo.c bar.c + +include $(sources:.c=.d) +@end group +@end example + +@noindent +(This example uses a substitution variable reference to translate the +list of source files @samp{foo.c bar.c} into a list of prerequisite +makefiles, @samp{foo.d bar.d}. @xref{Substitution Refs}, for full +information on substitution references.) Since the @samp{.d} files are +makefiles like any others, @code{make} will remake them as necessary +with no further work from you. @xref{Remaking Makefiles}. + +Note that the @samp{.d} files contain target definitions; you should +be sure to place the @code{include} directive @emph{after} the first, +default target in your makefiles or run the risk of having a random +object file become the default target. +@xref{How Make Works}. + +@node Commands, Using Variables, Rules, Top +@chapter Writing the Commands in Rules +@cindex commands, how to write +@cindex rule commands +@cindex writing rule commands + +The commands of a rule consist of shell command lines to be executed one +by one. Each command line must start with a tab, except that the first +command line may be attached to the target-and-prerequisites line with a +semicolon in between. Blank lines and lines of just comments may appear +among the command lines; they are ignored. (But beware, an apparently +``blank'' line that begins with a tab is @emph{not} blank! It is an +empty command; @pxref{Empty Commands}.) + +Users use many different shell programs, but commands in makefiles are +always interpreted by @file{/bin/sh} unless the makefile specifies +otherwise. @xref{Execution, ,Command Execution}. + +@cindex comments, in commands +@cindex commands, comments in +@cindex @code{#} (comments), in commands +The shell that is in use determines whether comments can be written on +command lines, and what syntax they use. When the shell is +@file{/bin/sh}, a @samp{#} starts a comment that extends to the end of +the line. The @samp{#} does not have to be at the beginning of a line. +Text on a line before a @samp{#} is not part of the comment. + +@menu +* Echoing:: How to control when commands are echoed. +* Execution:: How commands are executed. +* Parallel:: How commands can be executed in parallel. +* Errors:: What happens after a command execution error. +* Interrupts:: What happens when a command is interrupted. +* Recursion:: Invoking @code{make} from makefiles. +* Sequences:: Defining canned sequences of commands. +* Empty Commands:: Defining useful, do-nothing commands. +@end menu + +@node Echoing, Execution, Commands, Commands +@section Command Echoing +@cindex echoing of commands +@cindex silent operation +@cindex @code{@@} (in commands) +@cindex commands, echoing +@cindex printing of commands + +Normally @code{make} prints each command line before it is executed. +We call this @dfn{echoing} because it gives the appearance that you +are typing the commands yourself. + +When a line starts with @samp{@@}, the echoing of that line is suppressed. +The @samp{@@} is discarded before the command is passed to the shell. +Typically you would use this for a command whose only effect is to print +something, such as an @code{echo} command to indicate progress through +the makefile: + +@example +@@echo About to make distribution files +@end example + +@cindex @code{-n} +@cindex @code{--just-print} +@cindex @code{--dry-run} +@cindex @code{--recon} +When @code{make} is given the flag @samp{-n} or @samp{--just-print} +it only echoes commands, it won't execute them. @xref{Options Summary, +,Summary of Options}. In this case and only this case, even the +commands starting with @samp{@@} are printed. This flag is useful for +finding out which commands @code{make} thinks are necessary without +actually doing them. + +@cindex @code{-s} +@cindex @code{--silent} +@cindex @code{--quiet} +@findex .SILENT +The @samp{-s} or @samp{--silent} +flag to @code{make} prevents all echoing, as if all commands +started with @samp{@@}. A rule in the makefile for the special target +@code{.SILENT} without prerequisites has the same effect +(@pxref{Special Targets, ,Special Built-in Target Names}). +@code{.SILENT} is essentially obsolete since @samp{@@} is more flexible.@refill + +@node Execution, Parallel, Echoing, Commands +@section Command Execution +@cindex commands, execution +@cindex execution, of commands +@cindex shell command, execution +@vindex SHELL @r{(command execution)} + +When it is time to execute commands to update a target, they are executed +by making a new subshell for each line. (In practice, @code{make} may +take shortcuts that do not affect the results.) + +@cindex @code{cd} (shell command) +@strong{Please note:} this implies that shell commands such as @code{cd} +that set variables local to each process will not affect the following +command lines. @footnote{On MS-DOS, the value of current working +directory is @strong{global}, so changing it @emph{will} affect the +following command lines on those systems.} If you want to use @code{cd} +to affect the next command, put the two on a single line with a +semicolon between them. Then @code{make} will consider them a single +command and pass them, together, to a shell which will execute them in +sequence. For example: + +@example +foo : bar/lose + cd bar; gobble lose > ../foo +@end example + +@cindex commands, backslash (@code{\}) in +@cindex commands, quoting newlines in +@cindex backslash (@code{\}), in commands +@cindex @code{\} (backslash), in commands +@cindex quoting newline, in commands +@cindex newline, quoting, in commands +If you would like to split a single shell command into multiple lines of +text, you must use a backslash at the end of all but the last subline. +Such a sequence of lines is combined into a single line, by deleting the +backslash-newline sequences, before passing it to the shell. Thus, the +following is equivalent to the preceding example: + +@example +@group +foo : bar/lose + cd bar; \ + gobble lose > ../foo +@end group +@end example + +@vindex SHELL +The program used as the shell is taken from the variable @code{SHELL}. +By default, the program @file{/bin/sh} is used. + +@vindex COMSPEC +On MS-DOS, if @code{SHELL} is not set, the value of the variable +@code{COMSPEC} (which is always set) is used instead. + +@cindex @code{SHELL}, MS-DOS specifics +The processing of lines that set the variable @code{SHELL} in Makefiles +is different on MS-DOS. The stock shell, @file{command.com}, is +ridiculously limited in its functionality and many users of @code{make} +tend to install a replacement shell. Therefore, on MS-DOS, @code{make} +examines the value of @code{SHELL}, and changes its behavior based on +whether it points to a Unix-style or DOS-style shell. This allows +reasonable functionality even if @code{SHELL} points to +@file{command.com}. + +If @code{SHELL} points to a Unix-style shell, @code{make} on MS-DOS +additionally checks whether that shell can indeed be found; if not, it +ignores the line that sets @code{SHELL}. In MS-DOS, GNU @code{make} +searches for the shell in the following places: + +@enumerate +@item +In the precise place pointed to by the value of @code{SHELL}. For +example, if the makefile specifies @samp{SHELL = /bin/sh}, @code{make} +will look in the directory @file{/bin} on the current drive. + +@item +In the current directory. + +@item +In each of the directories in the @code{PATH} variable, in order. + +@end enumerate + +In every directory it examines, @code{make} will first look for the +specific file (@file{sh} in the example above). If this is not found, +it will also look in that directory for that file with one of the known +extensions which identify executable files. For example @file{.exe}, +@file{.com}, @file{.bat}, @file{.btm}, @file{.sh}, and some others. + +If any of these attempts is successful, the value of @code{SHELL} will +be set to the full pathname of the shell as found. However, if none of +these is found, the value of @code{SHELL} will not be changed, and thus +the line that sets it will be effectively ignored. This is so +@code{make} will only support features specific to a Unix-style shell if +such a shell is actually installed on the system where @code{make} runs. + +Note that this extended search for the shell is limited to the cases +where @code{SHELL} is set from the Makefile; if it is set in the +environment or command line, you are expected to set it to the full +pathname of the shell, exactly as things are on Unix. + +The effect of the above DOS-specific processing is that a Makefile that +says @samp{SHELL = /bin/sh} (as many Unix makefiles do), will work +on MS-DOS unaltered if you have e.g. @file{sh.exe} installed in some +directory along your @code{PATH}. + +@cindex environment, @code{SHELL} in +Unlike most variables, the variable @code{SHELL} is never set from the +environment. This is because the @code{SHELL} environment variable is +used to specify your personal choice of shell program for interactive +use. It would be very bad for personal choices like this to affect the +functioning of makefiles. @xref{Environment, ,Variables from the +Environment}. However, on MS-DOS and MS-Windows the value of +@code{SHELL} in the environment @strong{is} used, since on those systems +most users do not set this variable, and therefore it is most likely set +specifically to be used by @code{make}. On MS-DOS, if the setting of +@code{SHELL} is not suitable for @code{make}, you can set the variable +@code{MAKESHELL} to the shell that @code{make} should use; this will +override the value of @code{SHELL}. + +@node Parallel, Errors, Execution, Commands +@section Parallel Execution +@cindex commands, execution in parallel +@cindex parallel execution +@cindex execution, in parallel +@cindex job slots +@cindex @code{-j} +@cindex @code{--jobs} + +GNU @code{make} knows how to execute several commands at once. +Normally, @code{make} will execute only one command at a time, waiting +for it to finish before executing the next. However, the @samp{-j} or +@samp{--jobs} option tells @code{make} to execute many commands +simultaneously.@refill + +On MS-DOS, the @samp{-j} option has no effect, since that system doesn't +support multi-processing. + +If the @samp{-j} option is followed by an integer, this is the number of +commands to execute at once; this is called the number of @dfn{job slots}. +If there is nothing looking like an integer after the @samp{-j} option, +there is no limit on the number of job slots. The default number of job +slots is one, which means serial execution (one thing at a time). + +One unpleasant consequence of running several commands simultaneously is +that output generated by the commands appears whenever each command +sends it, so messages from different commands may be interspersed. + +Another problem is that two processes cannot both take input from the +same device; so to make sure that only one command tries to take input +from the terminal at once, @code{make} will invalidate the standard +input streams of all but one running command. This means that +attempting to read from standard input will usually be a fatal error (a +@samp{Broken pipe} signal) for most child processes if there are +several. +@cindex broken pipe +@cindex standard input + +It is unpredictable which command will have a valid standard input stream +(which will come from the terminal, or wherever you redirect the standard +input of @code{make}). The first command run will always get it first, and +the first command started after that one finishes will get it next, and so +on. + +We will change how this aspect of @code{make} works if we find a better +alternative. In the mean time, you should not rely on any command using +standard input at all if you are using the parallel execution feature; but +if you are not using this feature, then standard input works normally in +all commands. + +Finally, handling recursive @code{make} invocations raises issues. For +more information on this, see +@ref{Options/Recursion, ,Communicating Options to a Sub-@code{make}}. + +If a command fails (is killed by a signal or exits with a nonzero +status), and errors are not ignored for that command +(@pxref{Errors, ,Errors in Commands}), +the remaining command lines to remake the same target will not be run. +If a command fails and the @samp{-k} or @samp{--keep-going} +option was not given +(@pxref{Options Summary, ,Summary of Options}), +@code{make} aborts execution. If make +terminates for any reason (including a signal) with child processes +running, it waits for them to finish before actually exiting.@refill + +@cindex load average +@cindex limiting jobs based on load +@cindex jobs, limiting based on load +@cindex @code{-l} (load average) +@cindex @code{--max-load} +@cindex @code{--load-average} +When the system is heavily loaded, you will probably want to run fewer jobs +than when it is lightly loaded. You can use the @samp{-l} option to tell +@code{make} to limit the number of jobs to run at once, based on the load +average. The @samp{-l} or @samp{--max-load} +option is followed by a floating-point number. For +example, + +@example +-l 2.5 +@end example + +@noindent +will not let @code{make} start more than one job if the load average is +above 2.5. The @samp{-l} option with no following number removes the +load limit, if one was given with a previous @samp{-l} option.@refill + +More precisely, when @code{make} goes to start up a job, and it already has +at least one job running, it checks the current load average; if it is not +lower than the limit given with @samp{-l}, @code{make} waits until the load +average goes below that limit, or until all the other jobs finish. + +By default, there is no load limit. + +@node Errors, Interrupts, Parallel, Commands +@section Errors in Commands +@cindex errors (in commands) +@cindex commands, errors in +@cindex exit status (errors) + +After each shell command returns, @code{make} looks at its exit status. +If the command completed successfully, the next command line is executed +in a new shell; after the last command line is finished, the rule is +finished. + +If there is an error (the exit status is nonzero), @code{make} gives up on +the current rule, and perhaps on all rules. + +Sometimes the failure of a certain command does not indicate a problem. +For example, you may use the @code{mkdir} command to ensure that a +directory exists. If the directory already exists, @code{mkdir} will +report an error, but you probably want @code{make} to continue regardless. + +@cindex @code{-} (in commands) +To ignore errors in a command line, write a @samp{-} at the beginning of +the line's text (after the initial tab). The @samp{-} is discarded before +the command is passed to the shell for execution. + +For example, + +@example +@group +clean: + -rm -f *.o +@end group +@end example +@cindex @code{rm} (shell command) + +@noindent +This causes @code{rm} to continue even if it is unable to remove a file. + +@cindex @code{-i} +@cindex @code{--ignore-errors} +@findex .IGNORE +When you run @code{make} with the @samp{-i} or @samp{--ignore-errors} +flag, errors are ignored in all commands of all rules. A rule in the +makefile for the special target @code{.IGNORE} has the same effect, if +there are no prerequisites. These ways of ignoring errors are obsolete +because @samp{-} is more flexible. + +When errors are to be ignored, because of either a @samp{-} or the +@samp{-i} flag, @code{make} treats an error return just like success, +except that it prints out a message that tells you the status code +the command exited with, and says that the error has been ignored. + +When an error happens that @code{make} has not been told to ignore, +it implies that the current target cannot be correctly remade, and neither +can any other that depends on it either directly or indirectly. No further +commands will be executed for these targets, since their preconditions +have not been achieved. + + +@cindex @code{-k} +@cindex @code{--keep-going} +Normally @code{make} gives up immediately in this circumstance, returning a +nonzero status. However, if the @samp{-k} or @samp{--keep-going} +flag is specified, @code{make} +continues to consider the other prerequisites of the pending targets, +remaking them if necessary, before it gives up and returns nonzero status. +For example, after an error in compiling one object file, @samp{make -k} +will continue compiling other object files even though it already knows +that linking them will be impossible. @xref{Options Summary, ,Summary of Options}. + +The usual behavior assumes that your purpose is to get the specified +targets up to date; once @code{make} learns that this is impossible, it +might as well report the failure immediately. The @samp{-k} option says +that the real purpose is to test as many of the changes made in the +program as possible, perhaps to find several independent problems so +that you can correct them all before the next attempt to compile. This +is why Emacs' @code{compile} command passes the @samp{-k} flag by +default. +@cindex Emacs (@code{M-x compile}) + +@findex .DELETE_ON_ERROR +@cindex deletion of target files +@cindex removal of target files +@cindex target, deleting on error +Usually when a command fails, if it has changed the target file at all, +the file is corrupted and cannot be used---or at least it is not +completely updated. Yet the file's time stamp says that it is now up to +date, so the next time @code{make} runs, it will not try to update that +file. The situation is just the same as when the command is killed by a +signal; @pxref{Interrupts}. So generally the right thing to do is to +delete the target file if the command fails after beginning to change +the file. @code{make} will do this if @code{.DELETE_ON_ERROR} appears +as a target. This is almost always what you want @code{make} to do, but +it is not historical practice; so for compatibility, you must explicitly +request it. + +@node Interrupts, Recursion, Errors, Commands +@section Interrupting or Killing @code{make} +@cindex interrupt +@cindex signal +@cindex deletion of target files +@cindex removal of target files +@cindex target, deleting on interrupt +@cindex killing (interruption) + +If @code{make} gets a fatal signal while a command is executing, it may +delete the target file that the command was supposed to update. This is +done if the target file's last-modification time has changed since +@code{make} first checked it. + +The purpose of deleting the target is to make sure that it is remade from +scratch when @code{make} is next run. Why is this? Suppose you type +@kbd{Ctrl-c} while a compiler is running, and it has begun to write an +object file @file{foo.o}. The @kbd{Ctrl-c} kills the compiler, resulting +in an incomplete file whose last-modification time is newer than the source +file @file{foo.c}. But @code{make} also receives the @kbd{Ctrl-c} signal +and deletes this incomplete file. If @code{make} did not do this, the next +invocation of @code{make} would think that @file{foo.o} did not require +updating---resulting in a strange error message from the linker when it +tries to link an object file half of which is missing. + +@findex .PRECIOUS +You can prevent the deletion of a target file in this way by making the +special target @code{.PRECIOUS} depend on it. Before remaking a target, +@code{make} checks to see whether it appears on the prerequisites of +@code{.PRECIOUS}, and thereby decides whether the target should be deleted +if a signal happens. Some reasons why you might do this are that the +target is updated in some atomic fashion, or exists only to record a +modification-time (its contents do not matter), or must exist at all +times to prevent other sorts of trouble. + +@node Recursion, Sequences, Interrupts, Commands +@section Recursive Use of @code{make} +@cindex recursion +@cindex subdirectories, recursion for + +Recursive use of @code{make} means using @code{make} as a command in a +makefile. This technique is useful when you want separate makefiles for +various subsystems that compose a larger system. For example, suppose you +have a subdirectory @file{subdir} which has its own makefile, and you would +like the containing directory's makefile to run @code{make} on the +subdirectory. You can do it by writing this: + +@example +subsystem: + cd subdir && $(MAKE) +@end example + +@noindent +or, equivalently, this (@pxref{Options Summary, ,Summary of Options}): + +@example +subsystem: + $(MAKE) -C subdir +@end example +@cindex @code{-C} +@cindex @code{--directory} + +You can write recursive @code{make} commands just by copying this example, +but there are many things to know about how they work and why, and about +how the sub-@code{make} relates to the top-level @code{make}. You may +also find it useful to declare targets that invoke recursive +@code{make} commands as @samp{.PHONY} (for more discussion on when +this is useful, see @ref{Phony Targets}). + +@vindex @code{CURDIR} +For your convenience, when GNU @code{make} starts (after it has +processed any @code{-C} options) it sets the variable @code{CURDIR} to +the pathname of the current working directory. This value is never +touched by @code{make} again: in particular note that if you include +files from other directories the value of @code{CURDIR} does not +change. The value has the same precedence it would have if it were +set in the makefile (by default, an environment variable @code{CURDIR} +will not override this value). Note that setting this variable has no +impact on the operation of @code{make} (it does not cause @code{make} +to change its working directory, for example). + +@menu +* MAKE Variable:: The special effects of using @samp{$(MAKE)}. +* Variables/Recursion:: How to communicate variables to a sub-@code{make}. +* Options/Recursion:: How to communicate options to a sub-@code{make}. +* -w Option:: How the @samp{-w} or @samp{--print-directory} option + helps debug use of recursive @code{make} commands. +@end menu + +@node MAKE Variable, Variables/Recursion, Recursion, Recursion +@subsection How the @code{MAKE} Variable Works +@vindex MAKE +@cindex recursion, and @code{MAKE} variable + +Recursive @code{make} commands should always use the variable @code{MAKE}, +not the explicit command name @samp{make}, as shown here: + +@example +@group +subsystem: + cd subdir && $(MAKE) +@end group +@end example + +The value of this variable is the file name with which @code{make} was +invoked. If this file name was @file{/bin/make}, then the command executed +is @samp{cd subdir && /bin/make}. If you use a special version of +@code{make} to run the top-level makefile, the same special version will be +executed for recursive invocations. +@cindex @code{cd} (shell command) + +@cindex +, and commands +As a special feature, using the variable @code{MAKE} in the commands of +a rule alters the effects of the @samp{-t} (@samp{--touch}), @samp{-n} +(@samp{--just-print}), or @samp{-q} (@w{@samp{--question}}) option. +Using the @code{MAKE} variable has the same effect as using a @samp{+} +character at the beginning of the command line. @xref{Instead of +Execution, ,Instead of Executing the Commands}.@refill + +Consider the command @samp{make -t} in the above example. (The +@samp{-t} option marks targets as up to date without actually running +any commands; see @ref{Instead of Execution}.) Following the usual +definition of @samp{-t}, a @samp{make -t} command in the example would +create a file named @file{subsystem} and do nothing else. What you +really want it to do is run @samp{@w{cd subdir &&} @w{make -t}}; but that would +require executing the command, and @samp{-t} says not to execute +commands.@refill +@cindex @code{-t}, and recursion +@cindex recursion, and @code{-t} +@cindex @code{--touch}, and recursion + +The special feature makes this do what you want: whenever a command +line of a rule contains the variable @code{MAKE}, the flags @samp{-t}, +@samp{-n} and @samp{-q} do not apply to that line. Command lines +containing @code{MAKE} are executed normally despite the presence of a +flag that causes most commands not to be run. The usual +@code{MAKEFLAGS} mechanism passes the flags to the sub-@code{make} +(@pxref{Options/Recursion, ,Communicating Options to a +Sub-@code{make}}), so your request to touch the files, or print the +commands, is propagated to the subsystem.@refill + +@node Variables/Recursion, Options/Recursion, MAKE Variable, Recursion +@subsection Communicating Variables to a Sub-@code{make} +@cindex sub-@code{make} +@cindex environment, and recursion +@cindex exporting variables +@cindex variables, environment +@cindex variables, exporting +@cindex recursion, and environment +@cindex recursion, and variables + +Variable values of the top-level @code{make} can be passed to the +sub-@code{make} through the environment by explicit request. These +variables are defined in the sub-@code{make} as defaults, but do not +override what is specified in the makefile used by the sub-@code{make} +makefile unless you use the @samp{-e} switch (@pxref{Options Summary, +,Summary of Options}).@refill + +To pass down, or @dfn{export}, a variable, @code{make} adds the variable +and its value to the environment for running each command. The +sub-@code{make}, in turn, uses the environment to initialize its table +of variable values. @xref{Environment, ,Variables from the +Environment}. + +Except by explicit request, @code{make} exports a variable only if it +is either defined in the environment initially or set on the command +line, and if its name consists only of letters, numbers, and underscores. +Some shells cannot cope with environment variable names consisting of +characters other than letters, numbers, and underscores. + +The special variables @code{SHELL} and @code{MAKEFLAGS} are always +exported (unless you unexport them). +@code{MAKEFILES} is exported if you set it to anything. + +@code{make} automatically passes down variable values that were defined +on the command line, by putting them in the @code{MAKEFLAGS} variable. +@iftex +See the next section. +@end iftex +@ifinfo +@xref{Options/Recursion}. +@end ifinfo + +Variables are @emph{not} normally passed down if they were created by +default by @code{make} (@pxref{Implicit Variables, ,Variables Used by +Implicit Rules}). The sub-@code{make} will define these for +itself.@refill + +@findex export +If you want to export specific variables to a sub-@code{make}, use the +@code{export} directive, like this: + +@example +export @var{variable} @dots{} +@end example + +@noindent +@findex unexport +If you want to @emph{prevent} a variable from being exported, use the +@code{unexport} directive, like this: + +@example +unexport @var{variable} @dots{} +@end example + +@noindent +In both of these forms, the arguments to @code{export} and +@code{unexport} are expanded, and so could be variables or functions +which expand to a (list of) variable names to be (un)exported. + +As a convenience, you can define a variable and export it at the same +time by doing: + +@example +export @var{variable} = value +@end example + +@noindent +has the same result as: + +@example +@var{variable} = value +export @var{variable} +@end example + +@noindent +and + +@example +export @var{variable} := value +@end example + +@noindent +has the same result as: + +@example +@var{variable} := value +export @var{variable} +@end example + +Likewise, + +@example +export @var{variable} += value +@end example + +@noindent +is just like: + +@example +@var{variable} += value +export @var{variable} +@end example + +@noindent +@xref{Appending, ,Appending More Text to Variables}. + +You may notice that the @code{export} and @code{unexport} directives +work in @code{make} in the same way they work in the shell, @code{sh}. + +If you want all variables to be exported by default, you can use +@code{export} by itself: + +@example +export +@end example + +@noindent +This tells @code{make} that variables which are not explicitly mentioned +in an @code{export} or @code{unexport} directive should be exported. +Any variable given in an @code{unexport} directive will still @emph{not} +be exported. If you use @code{export} by itself to export variables by +default, variables whose names contain characters other than +alphanumerics and underscores will not be exported unless specifically +mentioned in an @code{export} directive.@refill + +@findex .EXPORT_ALL_VARIABLES +The behavior elicited by an @code{export} directive by itself was the +default in older versions of GNU @code{make}. If your makefiles depend +on this behavior and you want to be compatible with old versions of +@code{make}, you can write a rule for the special target +@code{.EXPORT_ALL_VARIABLES} instead of using the @code{export} directive. +This will be ignored by old @code{make}s, while the @code{export} +directive will cause a syntax error.@refill +@cindex compatibility in exporting + +Likewise, you can use @code{unexport} by itself to tell @code{make} +@emph{not} to export variables by default. Since this is the default +behavior, you would only need to do this if @code{export} had been used +by itself earlier (in an included makefile, perhaps). You +@strong{cannot} use @code{export} and @code{unexport} by themselves to +have variables exported for some commands and not for others. The last +@code{export} or @code{unexport} directive that appears by itself +determines the behavior for the entire run of @code{make}.@refill + +@vindex MAKELEVEL +@cindex recursion, level of +As a special feature, the variable @code{MAKELEVEL} is changed when it +is passed down from level to level. This variable's value is a string +which is the depth of the level as a decimal number. The value is +@samp{0} for the top-level @code{make}; @samp{1} for a sub-@code{make}, +@samp{2} for a sub-sub-@code{make}, and so on. The incrementation +happens when @code{make} sets up the environment for a command.@refill + +The main use of @code{MAKELEVEL} is to test it in a conditional +directive (@pxref{Conditionals, ,Conditional Parts of Makefiles}); this +way you can write a makefile that behaves one way if run recursively and +another way if run directly by you.@refill + +@vindex MAKEFILES +You can use the variable @code{MAKEFILES} to cause all sub-@code{make} +commands to use additional makefiles. The value of @code{MAKEFILES} is +a whitespace-separated list of file names. This variable, if defined in +the outer-level makefile, is passed down through the environment; then +it serves as a list of extra makefiles for the sub-@code{make} to read +before the usual or specified ones. @xref{MAKEFILES Variable, ,The +Variable @code{MAKEFILES}}.@refill + +@node Options/Recursion, -w Option, Variables/Recursion, Recursion +@subsection Communicating Options to a Sub-@code{make} +@cindex options, and recursion +@cindex recursion, and options + +@vindex MAKEFLAGS +Flags such as @samp{-s} and @samp{-k} are passed automatically to the +sub-@code{make} through the variable @code{MAKEFLAGS}. This variable is +set up automatically by @code{make} to contain the flag letters that +@code{make} received. Thus, if you do @w{@samp{make -ks}} then +@code{MAKEFLAGS} gets the value @samp{ks}.@refill + +As a consequence, every sub-@code{make} gets a value for @code{MAKEFLAGS} +in its environment. In response, it takes the flags from that value and +processes them as if they had been given as arguments. +@xref{Options Summary, ,Summary of Options}. + +@cindex command line variable definitions, and recursion +@cindex variables, command line, and recursion +@cindex recursion, and command line variable definitions +Likewise variables defined on the command line are passed to the +sub-@code{make} through @code{MAKEFLAGS}. Words in the value of +@code{MAKEFLAGS} that contain @samp{=}, @code{make} treats as variable +definitions just as if they appeared on the command line. +@xref{Overriding, ,Overriding Variables}. + +@cindex @code{-C}, and recursion +@cindex @code{-f}, and recursion +@cindex @code{-o}, and recursion +@cindex @code{-W}, and recursion +@cindex @code{--directory}, and recursion +@cindex @code{--file}, and recursion +@cindex @code{--old-file}, and recursion +@cindex @code{--assume-old}, and recursion +@cindex @code{--assume-new}, and recursion +@cindex @code{--new-file}, and recursion +@cindex recursion, and @code{-C} +@cindex recursion, and @code{-f} +@cindex recursion, and @code{-o} +@cindex recursion, and @code{-W} +The options @samp{-C}, @samp{-f}, @samp{-o}, and @samp{-W} are not put +into @code{MAKEFLAGS}; these options are not passed down.@refill + +@cindex @code{-j}, and recursion +@cindex @code{--jobs}, and recursion +@cindex recursion, and @code{-j} +@cindex job slots, and recursion +The @samp{-j} option is a special case (@pxref{Parallel, ,Parallel Execution}). +If you set it to some numeric value @samp{N} and your operating system +supports it (most any UNIX system will; others typically won't), the +parent @code{make} and all the sub-@code{make}s will communicate to +ensure that there are only @samp{N} jobs running at the same time +between them all. Note that any job that is marked recursive +(@pxref{Instead of Execution, ,Instead of Executing the Commands}) +doesn't count against the total jobs (otherwise we could get @samp{N} +sub-@code{make}s running and have no slots left over for any real work!) + +If your operating system doesn't support the above communication, then +@samp{-j 1} is always put into @code{MAKEFLAGS} instead of the value you +specified. This is because if the @w{@samp{-j}} option were passed down +to sub-@code{make}s, you would get many more jobs running in parallel +than you asked for. If you give @samp{-j} with no numeric argument, +meaning to run as many jobs as possible in parallel, this is passed +down, since multiple infinities are no more than one.@refill + +If you do not want to pass the other flags down, you must change the +value of @code{MAKEFLAGS}, like this: + +@example +subsystem: + cd subdir && $(MAKE) MAKEFLAGS= +@end example + +@vindex MAKEOVERRIDES +The command line variable definitions really appear in the variable +@code{MAKEOVERRIDES}, and @code{MAKEFLAGS} contains a reference to this +variable. If you do want to pass flags down normally, but don't want to +pass down the command line variable definitions, you can reset +@code{MAKEOVERRIDES} to empty, like this: + +@example +MAKEOVERRIDES = +@end example + +@noindent +@cindex Arg list too long +@cindex E2BIG +This is not usually useful to do. However, some systems have a small +fixed limit on the size of the environment, and putting so much +information into the value of @code{MAKEFLAGS} can exceed it. If you +see the error message @samp{Arg list too long}, this may be the problem. +@findex .POSIX +@cindex POSIX.2 +(For strict compliance with POSIX.2, changing @code{MAKEOVERRIDES} does +not affect @code{MAKEFLAGS} if the special target @samp{.POSIX} appears +in the makefile. You probably do not care about this.) + +@vindex MFLAGS +A similar variable @code{MFLAGS} exists also, for historical +compatibility. It has the same value as @code{MAKEFLAGS} except that it +does not contain the command line variable definitions, and it always +begins with a hyphen unless it is empty (@code{MAKEFLAGS} begins with a +hyphen only when it begins with an option that has no single-letter +version, such as @samp{--warn-undefined-variables}). @code{MFLAGS} was +traditionally used explicitly in the recursive @code{make} command, like +this: + +@example +subsystem: + cd subdir && $(MAKE) $(MFLAGS) +@end example + +@noindent +but now @code{MAKEFLAGS} makes this usage redundant. If you want your +makefiles to be compatible with old @code{make} programs, use this +technique; it will work fine with more modern @code{make} versions too. + +@cindex setting options from environment +@cindex options, setting from environment +@cindex setting options in makefiles +@cindex options, setting in makefiles +The @code{MAKEFLAGS} variable can also be useful if you want to have +certain options, such as @samp{-k} (@pxref{Options Summary, ,Summary of +Options}), set each time you run @code{make}. You simply put a value for +@code{MAKEFLAGS} in your environment. You can also set @code{MAKEFLAGS} in +a makefile, to specify additional flags that should also be in effect for +that makefile. (Note that you cannot use @code{MFLAGS} this way. That +variable is set only for compatibility; @code{make} does not interpret a +value you set for it in any way.) + +When @code{make} interprets the value of @code{MAKEFLAGS} (either from the +environment or from a makefile), it first prepends a hyphen if the value +does not already begin with one. Then it chops the value into words +separated by blanks, and parses these words as if they were options given +on the command line (except that @samp{-C}, @samp{-f}, @samp{-h}, +@samp{-o}, @samp{-W}, and their long-named versions are ignored; and there +is no error for an invalid option). + +If you do put @code{MAKEFLAGS} in your environment, you should be sure not +to include any options that will drastically affect the actions of +@code{make} and undermine the purpose of makefiles and of @code{make} +itself. For instance, the @samp{-t}, @samp{-n}, and @samp{-q} options, if +put in one of these variables, could have disastrous consequences and would +certainly have at least surprising and probably annoying effects.@refill + +@node -w Option, , Options/Recursion, Recursion +@subsection The @samp{--print-directory} Option +@cindex directories, printing them +@cindex printing directories +@cindex recursion, and printing directories + +If you use several levels of recursive @code{make} invocations, the +@samp{-w} or @w{@samp{--print-directory}} option can make the output a +lot easier to understand by showing each directory as @code{make} +starts processing it and as @code{make} finishes processing it. For +example, if @samp{make -w} is run in the directory @file{/u/gnu/make}, +@code{make} will print a line of the form:@refill + +@example +make: Entering directory `/u/gnu/make'. +@end example + +@noindent +before doing anything else, and a line of the form: + +@example +make: Leaving directory `/u/gnu/make'. +@end example + +@noindent +when processing is completed. + +@cindex @code{-C}, and @code{-w} +@cindex @code{--directory}, and @code{--print-directory} +@cindex recursion, and @code{-w} +@cindex @code{-w}, and @code{-C} +@cindex @code{-w}, and recursion +@cindex @code{--print-directory}, and @code{--directory} +@cindex @code{--print-directory}, and recursion +@cindex @code{--no-print-directory} +@cindex @code{--print-directory}, disabling +@cindex @code{-w}, disabling +Normally, you do not need to specify this option because @samp{make} +does it for you: @samp{-w} is turned on automatically when you use the +@samp{-C} option, and in sub-@code{make}s. @code{make} will not +automatically turn on @samp{-w} if you also use @samp{-s}, which says to +be silent, or if you use @samp{--no-print-directory} to explicitly +disable it. + +@node Sequences, Empty Commands, Recursion, Commands +@section Defining Canned Command Sequences +@cindex sequences of commands +@cindex commands, sequences of + +When the same sequence of commands is useful in making various targets, you +can define it as a canned sequence with the @code{define} directive, and +refer to the canned sequence from the rules for those targets. The canned +sequence is actually a variable, so the name must not conflict with other +variable names. + +Here is an example of defining a canned sequence of commands: + +@example +define run-yacc +yacc $(firstword $^) +mv y.tab.c $@@ +endef +@end example +@cindex @code{yacc} + +@noindent +Here @code{run-yacc} is the name of the variable being defined; +@code{endef} marks the end of the definition; the lines in between are the +commands. The @code{define} directive does not expand variable references +and function calls in the canned sequence; the @samp{$} characters, +parentheses, variable names, and so on, all become part of the value of the +variable you are defining. +@xref{Defining, ,Defining Variables Verbatim}, +for a complete explanation of @code{define}. + +The first command in this example runs Yacc on the first prerequisite of +whichever rule uses the canned sequence. The output file from Yacc is +always named @file{y.tab.c}. The second command moves the output to the +rule's target file name. + +To use the canned sequence, substitute the variable into the commands of a +rule. You can substitute it like any other variable +(@pxref{Reference, ,Basics of Variable References}). +Because variables defined by @code{define} are recursively expanded +variables, all the variable references you wrote inside the @code{define} +are expanded now. For example: + +@example +foo.c : foo.y + $(run-yacc) +@end example + +@noindent +@samp{foo.y} will be substituted for the variable @samp{$^} when it occurs in +@code{run-yacc}'s value, and @samp{foo.c} for @samp{$@@}.@refill + +This is a realistic example, but this particular one is not needed in +practice because @code{make} has an implicit rule to figure out these +commands based on the file names involved +(@pxref{Implicit Rules, ,Using Implicit Rules}). + +@cindex @@, and @code{define} +@cindex -, and @code{define} +@cindex +, and @code{define} +In command execution, each line of a canned sequence is treated just as +if the line appeared on its own in the rule, preceded by a tab. In +particular, @code{make} invokes a separate subshell for each line. You +can use the special prefix characters that affect command lines +(@samp{@@}, @samp{-}, and @samp{+}) on each line of a canned sequence. +@xref{Commands, ,Writing the Commands in Rules}. +For example, using this canned sequence: + +@example +define frobnicate +@@echo "frobnicating target $@@" +frob-step-1 $< -o $@@-step-1 +frob-step-2 $@@-step-1 -o $@@ +endef +@end example + +@noindent +@code{make} will not echo the first line, the @code{echo} command. +But it @emph{will} echo the following two command lines. + +On the other hand, prefix characters on the command line that refers to +a canned sequence apply to every line in the sequence. So the rule: + +@example +frob.out: frob.in + @@$(frobnicate) +@end example + +@noindent +does not echo @emph{any} commands. +(@xref{Echoing, ,Command Echoing}, for a full explanation of @samp{@@}.) + +@node Empty Commands, , Sequences, Commands +@section Using Empty Commands +@cindex empty commands +@cindex commands, empty + +It is sometimes useful to define commands which do nothing. This is done +simply by giving a command that consists of nothing but whitespace. For +example: + +@example +target: ; +@end example + +@noindent +defines an empty command string for @file{target}. You could also use a +line beginning with a tab character to define an empty command string, +but this would be confusing because such a line looks empty. + +@findex .DEFAULT@r{, and empty commands} +You may be wondering why you would want to define a command string that +does nothing. The only reason this is useful is to prevent a target +from getting implicit commands (from implicit rules or the +@code{.DEFAULT} special target; @pxref{Implicit Rules} and +@pxref{Last Resort, ,Defining Last-Resort Default Rules}).@refill + +@c !!! another reason is for canonical stamp files: +@ignore +foo: stamp-foo ; +stamp-foo: foo.in + create foo frm foo.in + touch $@ +@end ignore + +You may be inclined to define empty command strings for targets that are +not actual files, but only exist so that their prerequisites can be +remade. However, this is not the best way to do that, because the +prerequisites may not be remade properly if the target file actually does exist. +@xref{Phony Targets, ,Phony Targets}, for a better way to do this. + +@node Using Variables, Conditionals, Commands, Top +@chapter How to Use Variables +@cindex variable +@cindex value +@cindex recursive variable expansion +@cindex simple variable expansion + +A @dfn{variable} is a name defined in a makefile to represent a string +of text, called the variable's @dfn{value}. These values are +substituted by explicit request into targets, prerequisites, commands, +and other parts of the makefile. (In some other versions of @code{make}, +variables are called @dfn{macros}.) +@cindex macro + +Variables and functions in all parts of a makefile are expanded when +read, except for the shell commands in rules, the right-hand sides of +variable definitions using @samp{=}, and the bodies of variable +definitions using the @code{define} directive.@refill + +Variables can represent lists of file names, options to pass to compilers, +programs to run, directories to look in for source files, directories to +write output in, or anything else you can imagine. + +A variable name may be any sequence of characters not containing @samp{:}, +@samp{#}, @samp{=}, or leading or trailing whitespace. However, +variable names containing characters other than letters, numbers, and +underscores should be avoided, as they may be given special meanings in the +future, and with some shells they cannot be passed through the environment to a +sub-@code{make} +(@pxref{Variables/Recursion, ,Communicating Variables to a Sub-@code{make}}). + +Variable names are case-sensitive. The names @samp{foo}, @samp{FOO}, +and @samp{Foo} all refer to different variables. + +It is traditional to use upper case letters in variable names, but we +recommend using lower case letters for variable names that serve internal +purposes in the makefile, and reserving upper case for parameters that +control implicit rules or for parameters that the user should override with +command options (@pxref{Overriding, ,Overriding Variables}). + +A few variables have names that are a single punctuation character or +just a few characters. These are the @dfn{automatic variables}, and +they have particular specialized uses. @xref{Automatic Variables}. + +@menu +* Reference:: How to use the value of a variable. +* Flavors:: Variables come in two flavors. +* Advanced:: Advanced features for referencing a variable. +* Values:: All the ways variables get their values. +* Setting:: How to set a variable in the makefile. +* Appending:: How to append more text to the old value + of a variable. +* Override Directive:: How to set a variable in the makefile even if + the user has set it with a command argument. +* Defining:: An alternate way to set a variable + to a verbatim string. +* Environment:: Variable values can come from the environment. +* Target-specific:: Variable values can be defined on a per-target + basis. +* Pattern-specific:: Target-specific variable values can be applied + to a group of targets that match a pattern. +@end menu + +@node Reference, Flavors, Using Variables, Using Variables +@section Basics of Variable References +@cindex variables, how to reference +@cindex reference to variables +@cindex @code{$}, in variable reference +@cindex dollar sign (@code{$}), in variable reference + +To substitute a variable's value, write a dollar sign followed by the name +of the variable in parentheses or braces: either @samp{$(foo)} or +@samp{$@{foo@}} is a valid reference to the variable @code{foo}. This +special significance of @samp{$} is why you must write @samp{$$} to have +the effect of a single dollar sign in a file name or command. + +Variable references can be used in any context: targets, prerequisites, +commands, most directives, and new variable values. Here is an +example of a common case, where a variable holds the names of all the +object files in a program: + +@example +@group +objects = program.o foo.o utils.o +program : $(objects) + cc -o program $(objects) + +$(objects) : defs.h +@end group +@end example + +Variable references work by strict textual substitution. Thus, the rule + +@example +@group +foo = c +prog.o : prog.$(foo) + $(foo)$(foo) -$(foo) prog.$(foo) +@end group +@end example + +@noindent +could be used to compile a C program @file{prog.c}. Since spaces before +the variable value are ignored in variable assignments, the value of +@code{foo} is precisely @samp{c}. (Don't actually write your makefiles +this way!) + +A dollar sign followed by a character other than a dollar sign, +open-parenthesis or open-brace treats that single character as the +variable name. Thus, you could reference the variable @code{x} with +@samp{$x}. However, this practice is strongly discouraged, except in +the case of the automatic variables (@pxref{Automatic Variables}). + +@node Flavors, Advanced, Reference, Using Variables +@section The Two Flavors of Variables +@cindex flavors of variables +@cindex recursive variable expansion +@cindex variables, flavors +@cindex recursively expanded variables +@cindex variables, recursively expanded + +There are two ways that a variable in GNU @code{make} can have a value; +we call them the two @dfn{flavors} of variables. The two flavors are +distinguished in how they are defined and in what they do when expanded. + +@cindex = +The first flavor of variable is a @dfn{recursively expanded} variable. +Variables of this sort are defined by lines using @samp{=} +(@pxref{Setting, ,Setting Variables}) or by the @code{define} directive +(@pxref{Defining, ,Defining Variables Verbatim}). The value you specify +is installed verbatim; if it contains references to other variables, +these references are expanded whenever this variable is substituted (in +the course of expanding some other string). When this happens, it is +called @dfn{recursive expansion}.@refill + +For example, + +@example +foo = $(bar) +bar = $(ugh) +ugh = Huh? + +all:;echo $(foo) +@end example + +@noindent +will echo @samp{Huh?}: @samp{$(foo)} expands to @samp{$(bar)} which +expands to @samp{$(ugh)} which finally expands to @samp{Huh?}.@refill + +This flavor of variable is the only sort supported by other versions of +@code{make}. It has its advantages and its disadvantages. An advantage +(most would say) is that: + +@example +CFLAGS = $(include_dirs) -O +include_dirs = -Ifoo -Ibar +@end example + +@noindent +will do what was intended: when @samp{CFLAGS} is expanded in a command, +it will expand to @samp{-Ifoo -Ibar -O}. A major disadvantage is that you +cannot append something on the end of a variable, as in + +@example +CFLAGS = $(CFLAGS) -O +@end example + +@noindent +because it will cause an infinite loop in the variable expansion. +(Actually @code{make} detects the infinite loop and reports an error.) +@cindex loops in variable expansion +@cindex variables, loops in expansion + +Another disadvantage is that any functions +(@pxref{Functions, ,Functions for Transforming Text}) +referenced in the definition will be executed every time the variable is +expanded. This makes @code{make} run slower; worse, it causes the +@code{wildcard} and @code{shell} functions to give unpredictable results +because you cannot easily control when they are called, or even how many +times. + +To avoid all the problems and inconveniences of recursively expanded +variables, there is another flavor: simply expanded variables. + +@cindex simply expanded variables +@cindex variables, simply expanded +@cindex := +@dfn{Simply expanded variables} are defined by lines using @samp{:=} +(@pxref{Setting, ,Setting Variables}). +The value of a simply expanded variable is scanned +once and for all, expanding any references to other variables and +functions, when the variable is defined. The actual value of the simply +expanded variable is the result of expanding the text that you write. +It does not contain any references to other variables; it contains their +values @emph{as of the time this variable was defined}. Therefore, + +@example +x := foo +y := $(x) bar +x := later +@end example + +@noindent +is equivalent to + +@example +y := foo bar +x := later +@end example + +When a simply expanded variable is referenced, its value is substituted +verbatim. + +Here is a somewhat more complicated example, illustrating the use of +@samp{:=} in conjunction with the @code{shell} function. +(@xref{Shell Function, , The @code{shell} Function}.) This example +also shows use of the variable @code{MAKELEVEL}, which is changed +when it is passed down from level to level. +(@xref{Variables/Recursion, , Communicating Variables to a +Sub-@code{make}}, for information about @code{MAKELEVEL}.) + +@vindex MAKELEVEL +@vindex MAKE +@example +@group +ifeq (0,$@{MAKELEVEL@}) +cur-dir := $(shell pwd) +whoami := $(shell whoami) +host-type := $(shell arch) +MAKE := $@{MAKE@} host-type=$@{host-type@} whoami=$@{whoami@} +endif +@end group +@end example + +@noindent +An advantage of this use of @samp{:=} is that a typical +`descend into a directory' command then looks like this: + +@example +@group +$@{subdirs@}: + $@{MAKE@} cur-dir=$@{cur-dir@}/$@@ -C $@@ all +@end group +@end example + +Simply expanded variables generally make complicated makefile programming +more predictable because they work like variables in most programming +languages. They allow you to redefine a variable using its own value (or +its value processed in some way by one of the expansion functions) and to +use the expansion functions much more efficiently +(@pxref{Functions, ,Functions for Transforming Text}). + +@cindex spaces, in variable values +@cindex whitespace, in variable values +@cindex variables, spaces in values +You can also use them to introduce controlled leading whitespace into +variable values. Leading whitespace characters are discarded from your +input before substitution of variable references and function calls; +this means you can include leading spaces in a variable value by +protecting them with variable references, like this: + +@example +nullstring := +space := $(nullstring) # end of the line +@end example + +@noindent +Here the value of the variable @code{space} is precisely one space. The +comment @w{@samp{# end of the line}} is included here just for clarity. +Since trailing space characters are @emph{not} stripped from variable +values, just a space at the end of the line would have the same effect +(but be rather hard to read). If you put whitespace at the end of a +variable value, it is a good idea to put a comment like that at the end +of the line to make your intent clear. Conversely, if you do @emph{not} +want any whitespace characters at the end of your variable value, you +must remember not to put a random comment on the end of the line after +some whitespace, such as this: + +@example +dir := /foo/bar # directory to put the frobs in +@end example + +@noindent +Here the value of the variable @code{dir} is @w{@samp{/foo/bar }} +(with four trailing spaces), which was probably not the intention. +(Imagine something like @w{@samp{$(dir)/file}} with this definition!) + +@cindex conditional variable assignment +@cindex variables, conditional assignment +@cindex ?= +There is another assignment operator for variables, @samp{?=}. This +is called a conditional variable assignment operator, because it only +has an effect if the variable is not yet defined. This statement: + +@example +FOO ?= bar +@end example + +@noindent +is exactly equivalent to this +(@pxref{Origin Function, ,The @code{origin} Function}): + +@example +ifeq ($(origin FOO), undefined) + FOO = bar +endif +@end example + +Note that a variable set to an empty value is still defined, so +@samp{?=} will not set that variable. + +@node Advanced, Values, Flavors, Using Variables +@section Advanced Features for Reference to Variables +@cindex reference to variables + +This section describes some advanced features you can use to reference +variables in more flexible ways. + +@menu +* Substitution Refs:: Referencing a variable with + substitutions on the value. +* Computed Names:: Computing the name of the variable to refer to. +@end menu + +@node Substitution Refs, Computed Names, Advanced, Advanced +@subsection Substitution References +@cindex modified variable reference +@cindex substitution variable reference +@cindex variables, modified reference +@cindex variables, substitution reference + +@cindex variables, substituting suffix in +@cindex suffix, substituting in variables +A @dfn{substitution reference} substitutes the value of a variable with +alterations that you specify. It has the form +@samp{$(@var{var}:@var{a}=@var{b})} (or +@samp{$@{@var{var}:@var{a}=@var{b}@}}) and its meaning is to take the value +of the variable @var{var}, replace every @var{a} at the end of a word with +@var{b} in that value, and substitute the resulting string. + +When we say ``at the end of a word'', we mean that @var{a} must appear +either followed by whitespace or at the end of the value in order to be +replaced; other occurrences of @var{a} in the value are unaltered. For +example:@refill + +@example +foo := a.o b.o c.o +bar := $(foo:.o=.c) +@end example + +@noindent +sets @samp{bar} to @samp{a.c b.c c.c}. @xref{Setting, ,Setting Variables}. + +A substitution reference is actually an abbreviation for use of the +@code{patsubst} expansion function (@pxref{Text Functions, ,Functions for String Substitution and Analysis}). We provide +substitution references as well as @code{patsubst} for compatibility with +other implementations of @code{make}. + +@findex patsubst +Another type of substitution reference lets you use the full power of +the @code{patsubst} function. It has the same form +@samp{$(@var{var}:@var{a}=@var{b})} described above, except that now +@var{a} must contain a single @samp{%} character. This case is +equivalent to @samp{$(patsubst @var{a},@var{b},$(@var{var}))}. +@xref{Text Functions, ,Functions for String Substitution and Analysis}, +for a description of the @code{patsubst} function.@refill + +@example +@group +@exdent For example: + +foo := a.o b.o c.o +bar := $(foo:%.o=%.c) +@end group +@end example + +@noindent +sets @samp{bar} to @samp{a.c b.c c.c}. + +@node Computed Names, , Substitution Refs, Advanced +@subsection Computed Variable Names +@cindex nested variable reference +@cindex computed variable name +@cindex variables, computed names +@cindex variables, nested references +@cindex variables, @samp{$} in name +@cindex @code{$}, in variable name +@cindex dollar sign (@code{$}), in variable name + +Computed variable names are a complicated concept needed only for +sophisticated makefile programming. For most purposes you need not +consider them, except to know that making a variable with a dollar sign +in its name might have strange results. However, if you are the type +that wants to understand everything, or you are actually interested in +what they do, read on. + +Variables may be referenced inside the name of a variable. This is +called a @dfn{computed variable name} or a @dfn{nested variable +reference}. For example, + +@example +x = y +y = z +a := $($(x)) +@end example + +@noindent +defines @code{a} as @samp{z}: the @samp{$(x)} inside @samp{$($(x))} expands +to @samp{y}, so @samp{$($(x))} expands to @samp{$(y)} which in turn expands +to @samp{z}. Here the name of the variable to reference is not stated +explicitly; it is computed by expansion of @samp{$(x)}. The reference +@samp{$(x)} here is nested within the outer variable reference. + +The previous example shows two levels of nesting, but any number of levels +is possible. For example, here are three levels: + +@example +x = y +y = z +z = u +a := $($($(x))) +@end example + +@noindent +Here the innermost @samp{$(x)} expands to @samp{y}, so @samp{$($(x))} +expands to @samp{$(y)} which in turn expands to @samp{z}; now we have +@samp{$(z)}, which becomes @samp{u}. + +References to recursively-expanded variables within a variable name are +reexpanded in the usual fashion. For example: + +@example +x = $(y) +y = z +z = Hello +a := $($(x)) +@end example + +@noindent +defines @code{a} as @samp{Hello}: @samp{$($(x))} becomes @samp{$($(y))} +which becomes @samp{$(z)} which becomes @samp{Hello}. + +Nested variable references can also contain modified references and +function invocations (@pxref{Functions, ,Functions for Transforming Text}), +just like any other reference. +For example, using the @code{subst} function +(@pxref{Text Functions, ,Functions for String Substitution and Analysis}): + +@example +@group +x = variable1 +variable2 := Hello +y = $(subst 1,2,$(x)) +z = y +a := $($($(z))) +@end group +@end example + +@noindent +eventually defines @code{a} as @samp{Hello}. It is doubtful that anyone +would ever want to write a nested reference as convoluted as this one, but +it works: @samp{$($($(z)))} expands to @samp{$($(y))} which becomes +@samp{$($(subst 1,2,$(x)))}. This gets the value @samp{variable1} from +@code{x} and changes it by substitution to @samp{variable2}, so that the +entire string becomes @samp{$(variable2)}, a simple variable reference +whose value is @samp{Hello}.@refill + +A computed variable name need not consist entirely of a single variable +reference. It can contain several variable references, as well as some +invariant text. For example, + +@example +@group +a_dirs := dira dirb +1_dirs := dir1 dir2 +@end group + +@group +a_files := filea fileb +1_files := file1 file2 +@end group + +@group +ifeq "$(use_a)" "yes" +a1 := a +else +a1 := 1 +endif +@end group + +@group +ifeq "$(use_dirs)" "yes" +df := dirs +else +df := files +endif + +dirs := $($(a1)_$(df)) +@end group +@end example + +@noindent +will give @code{dirs} the same value as @code{a_dirs}, @code{1_dirs}, +@code{a_files} or @code{1_files} depending on the settings of @code{use_a} +and @code{use_dirs}.@refill + +Computed variable names can also be used in substitution references: + +@example +@group +a_objects := a.o b.o c.o +1_objects := 1.o 2.o 3.o + +sources := $($(a1)_objects:.o=.c) +@end group +@end example + +@noindent +defines @code{sources} as either @samp{a.c b.c c.c} or @samp{1.c 2.c 3.c}, +depending on the value of @code{a1}. + +The only restriction on this sort of use of nested variable references +is that they cannot specify part of the name of a function to be called. +This is because the test for a recognized function name is done before +the expansion of nested references. For example, + +@example +@group +ifdef do_sort +func := sort +else +func := strip +endif +@end group + +@group +bar := a d b g q c +@end group + +@group +foo := $($(func) $(bar)) +@end group +@end example + +@noindent +attempts to give @samp{foo} the value of the variable @samp{sort a d b g +q c} or @samp{strip a d b g q c}, rather than giving @samp{a d b g q c} +as the argument to either the @code{sort} or the @code{strip} function. +This restriction could be removed in the future if that change is shown +to be a good idea. + +You can also use computed variable names in the left-hand side of a +variable assignment, or in a @code{define} directive, as in: + +@example +dir = foo +$(dir)_sources := $(wildcard $(dir)/*.c) +define $(dir)_print +lpr $($(dir)_sources) +endef +@end example + +@noindent +This example defines the variables @samp{dir}, @samp{foo_sources}, and +@samp{foo_print}. + +Note that @dfn{nested variable references} are quite different from +@dfn{recursively expanded variables} +(@pxref{Flavors, ,The Two Flavors of Variables}), though both are +used together in complex ways when doing makefile programming.@refill + +@node Values, Setting, Advanced, Using Variables +@section How Variables Get Their Values +@cindex variables, how they get their values +@cindex value, how a variable gets it + +Variables can get values in several different ways: + +@itemize @bullet +@item +You can specify an overriding value when you run @code{make}. +@xref{Overriding, ,Overriding Variables}. + +@item +You can specify a value in the makefile, either +with an assignment (@pxref{Setting, ,Setting Variables}) or with a +verbatim definition (@pxref{Defining, ,Defining Variables Verbatim}).@refill + +@item +Variables in the environment become @code{make} variables. +@xref{Environment, ,Variables from the Environment}. + +@item +Several @dfn{automatic} variables are given new values for each rule. +Each of these has a single conventional use. +@xref{Automatic Variables}. + +@item +Several variables have constant initial values. +@xref{Implicit Variables, ,Variables Used by Implicit Rules}. +@end itemize + +@node Setting, Appending, Values, Using Variables +@section Setting Variables +@cindex setting variables +@cindex variables, setting +@cindex = +@cindex := +@cindex ?= + +To set a variable from the makefile, write a line starting with the +variable name followed by @samp{=} or @samp{:=}. Whatever follows the +@samp{=} or @samp{:=} on the line becomes the value. For example, + +@example +objects = main.o foo.o bar.o utils.o +@end example + +@noindent +defines a variable named @code{objects}. Whitespace around the variable +name and immediately after the @samp{=} is ignored. + +Variables defined with @samp{=} are @dfn{recursively expanded} variables. +Variables defined with @samp{:=} are @dfn{simply expanded} variables; these +definitions can contain variable references which will be expanded before +the definition is made. @xref{Flavors, ,The Two Flavors of Variables}. + +The variable name may contain function and variable references, which +are expanded when the line is read to find the actual variable name to use. + +There is no limit on the length of the value of a variable except the +amount of swapping space on the computer. When a variable definition is +long, it is a good idea to break it into several lines by inserting +backslash-newline at convenient places in the definition. This will not +affect the functioning of @code{make}, but it will make the makefile easier +to read. + +Most variable names are considered to have the empty string as a value if +you have never set them. Several variables have built-in initial values +that are not empty, but you can set them in the usual ways +(@pxref{Implicit Variables, ,Variables Used by Implicit Rules}). +Several special variables are set +automatically to a new value for each rule; these are called the +@dfn{automatic} variables (@pxref{Automatic Variables}). + +If you'd like a variable to be set to a value only if it's not already +set, then you can use the shorthand operator @samp{?=} instead of +@samp{=}. These two settings of the variable @samp{FOO} are identical +(@pxref{Origin Function, ,The @code{origin} Function}): + +@example +FOO ?= bar +@end example + +@noindent +and + +@example +ifeq ($(origin FOO), undefined) +FOO = bar +endif +@end example + +@node Appending, Override Directive, Setting, Using Variables +@section Appending More Text to Variables +@cindex += +@cindex appending to variables +@cindex variables, appending to + +Often it is useful to add more text to the value of a variable already defined. +You do this with a line containing @samp{+=}, like this: + +@example +objects += another.o +@end example + +@noindent +This takes the value of the variable @code{objects}, and adds the text +@samp{another.o} to it (preceded by a single space). Thus: + +@example +objects = main.o foo.o bar.o utils.o +objects += another.o +@end example + +@noindent +sets @code{objects} to @samp{main.o foo.o bar.o utils.o another.o}. + +Using @samp{+=} is similar to: + +@example +objects = main.o foo.o bar.o utils.o +objects := $(objects) another.o +@end example + +@noindent +but differs in ways that become important when you use more complex values. + +When the variable in question has not been defined before, @samp{+=} +acts just like normal @samp{=}: it defines a recursively-expanded +variable. However, when there @emph{is} a previous definition, exactly +what @samp{+=} does depends on what flavor of variable you defined +originally. @xref{Flavors, ,The Two Flavors of Variables}, for an +explanation of the two flavors of variables. + +When you add to a variable's value with @samp{+=}, @code{make} acts +essentially as if you had included the extra text in the initial +definition of the variable. If you defined it first with @samp{:=}, +making it a simply-expanded variable, @samp{+=} adds to that +simply-expanded definition, and expands the new text before appending it +to the old value just as @samp{:=} does +(@pxref{Setting, ,Setting Variables}, for a full explanation of @samp{:=}). +In fact, + +@example +variable := value +variable += more +@end example + +@noindent +is exactly equivalent to: + +@noindent +@example +variable := value +variable := $(variable) more +@end example + +On the other hand, when you use @samp{+=} with a variable that you defined +first to be recursively-expanded using plain @samp{=}, @code{make} does +something a bit different. Recall that when you define a +recursively-expanded variable, @code{make} does not expand the value you set +for variable and function references immediately. Instead it stores the text +verbatim, and saves these variable and function references to be expanded +later, when you refer to the new variable (@pxref{Flavors, ,The Two Flavors +of Variables}). When you use @samp{+=} on a recursively-expanded variable, +it is this unexpanded text to which @code{make} appends the new text you +specify. + +@example +@group +variable = value +variable += more +@end group +@end example + +@noindent +is roughly equivalent to: + +@example +@group +temp = value +variable = $(temp) more +@end group +@end example + +@noindent +except that of course it never defines a variable called @code{temp}. +The importance of this comes when the variable's old value contains +variable references. Take this common example: + +@example +CFLAGS = $(includes) -O +@dots{} +CFLAGS += -pg # enable profiling +@end example + +@noindent +The first line defines the @code{CFLAGS} variable with a reference to another +variable, @code{includes}. (@code{CFLAGS} is used by the rules for C +compilation; @pxref{Catalogue of Rules, ,Catalogue of Implicit Rules}.) +Using @samp{=} for the definition makes @code{CFLAGS} a recursively-expanded +variable, meaning @w{@samp{$(includes) -O}} is @emph{not} expanded when +@code{make} processes the definition of @code{CFLAGS}. Thus, @code{includes} +need not be defined yet for its value to take effect. It only has to be +defined before any reference to @code{CFLAGS}. If we tried to append to the +value of @code{CFLAGS} without using @samp{+=}, we might do it like this: + +@example +CFLAGS := $(CFLAGS) -pg # enable profiling +@end example + +@noindent +This is pretty close, but not quite what we want. Using @samp{:=} +redefines @code{CFLAGS} as a simply-expanded variable; this means +@code{make} expands the text @w{@samp{$(CFLAGS) -pg}} before setting the +variable. If @code{includes} is not yet defined, we get @w{@samp{ -O +-pg}}, and a later definition of @code{includes} will have no effect. +Conversely, by using @samp{+=} we set @code{CFLAGS} to the +@emph{unexpanded} value @w{@samp{$(includes) -O -pg}}. Thus we preserve +the reference to @code{includes}, so if that variable gets defined at +any later point, a reference like @samp{$(CFLAGS)} still uses its +value. + +@node Override Directive, Defining, Appending, Using Variables +@section The @code{override} Directive +@findex override +@cindex overriding with @code{override} +@cindex variables, overriding + +If a variable has been set with a command argument +(@pxref{Overriding, ,Overriding Variables}), +then ordinary assignments in the makefile are ignored. If you want to set +the variable in the makefile even though it was set with a command +argument, you can use an @code{override} directive, which is a line that +looks like this:@refill + +@example +override @var{variable} = @var{value} +@end example + +@noindent +or + +@example +override @var{variable} := @var{value} +@end example + +To append more text to a variable defined on the command line, use: + +@example +override @var{variable} += @var{more text} +@end example + +@noindent +@xref{Appending, ,Appending More Text to Variables}. + +The @code{override} directive was not invented for escalation in the war +between makefiles and command arguments. It was invented so you can alter +and add to values that the user specifies with command arguments. + +For example, suppose you always want the @samp{-g} switch when you run the +C compiler, but you would like to allow the user to specify the other +switches with a command argument just as usual. You could use this +@code{override} directive: + +@example +override CFLAGS += -g +@end example + +You can also use @code{override} directives with @code{define} directives. +This is done as you might expect: + +@example +override define foo +bar +endef +@end example + +@noindent +@iftex +See the next section for information about @code{define}. +@end iftex +@ifinfo +@xref{Defining, ,Defining Variables Verbatim}. +@end ifinfo + +@node Defining, Environment, Override Directive, Using Variables +@section Defining Variables Verbatim +@findex define +@findex endef +@cindex verbatim variable definition +@cindex defining variables verbatim +@cindex variables, defining verbatim + +Another way to set the value of a variable is to use the @code{define} +directive. This directive has an unusual syntax which allows newline +characters to be included in the value, which is convenient for defining +both canned sequences of commands +(@pxref{Sequences, ,Defining Canned Command Sequences}), and also +sections of makefile syntax to use with @code{eval} (@pxref{Eval Function}). + +The @code{define} directive is followed on the same line by the name of the +variable and nothing more. The value to give the variable appears on the +following lines. The end of the value is marked by a line containing just +the word @code{endef}. Aside from this difference in syntax, @code{define} +works just like @samp{=}: it creates a recursively-expanded variable +(@pxref{Flavors, ,The Two Flavors of Variables}). +The variable name may contain function and variable references, which +are expanded when the directive is read to find the actual variable name +to use. + +You may nest @code{define} directives: @code{make} will keep track of +nested directives and report an error if they are not all properly +closed with @code{endef}. Note that lines beginning with tab +characters are considered part of a command script, so any +@code{define} or @code{endef} strings appearing on such a line will +not be considered @code{make} operators. + +@example +define two-lines +echo foo +echo $(bar) +endef +@end example + +The value in an ordinary assignment cannot contain a newline; but the +newlines that separate the lines of the value in a @code{define} become +part of the variable's value (except for the final newline which precedes +the @code{endef} and is not considered part of the value).@refill + +@need 800 +When used in a command script, the previous example is functionally +equivalent to this: + +@example +two-lines = echo foo; echo $(bar) +@end example + +@noindent +since two commands separated by semicolon behave much like two separate +shell commands. However, note that using two separate lines means +@code{make} will invoke the shell twice, running an independent subshell +for each line. @xref{Execution, ,Command Execution}. + +If you want variable definitions made with @code{define} to take +precedence over command-line variable definitions, you can use the +@code{override} directive together with @code{define}: + +@example +override define two-lines +foo +$(bar) +endef +@end example + +@noindent +@xref{Override Directive, ,The @code{override} Directive}. + +@node Environment, Target-specific, Defining, Using Variables +@section Variables from the Environment + +@cindex variables, environment +@cindex environment +Variables in @code{make} can come from the environment in which +@code{make} is run. Every environment variable that @code{make} sees when +it starts up is transformed into a @code{make} variable with the same name +and value. But an explicit assignment in the makefile, or with a command +argument, overrides the environment. (If the @samp{-e} flag is specified, +then values from the environment override assignments in the makefile. +@xref{Options Summary, ,Summary of Options}. +But this is not recommended practice.) + +Thus, by setting the variable @code{CFLAGS} in your environment, you can +cause all C compilations in most makefiles to use the compiler switches you +prefer. This is safe for variables with standard or conventional meanings +because you know that no makefile will use them for other things. (But +this is not totally reliable; some makefiles set @code{CFLAGS} explicitly +and therefore are not affected by the value in the environment.) + +When @code{make} is invoked recursively, variables defined in the +outer invocation can be passed to inner invocations through the +environment (@pxref{Recursion, ,Recursive Use of @code{make}}). By +default, only variables that came from the environment or the command +line are passed to recursive invocations. You can use the +@code{export} directive to pass other variables. +@xref{Variables/Recursion, , Communicating Variables to a +Sub-@code{make}}, for full details. + +Other use of variables from the environment is not recommended. It is not +wise for makefiles to depend for their functioning on environment variables +set up outside their control, since this would cause different users to get +different results from the same makefile. This is against the whole +purpose of most makefiles. + +Such problems would be especially likely with the variable @code{SHELL}, +which is normally present in the environment to specify the user's choice +of interactive shell. It would be very undesirable for this choice to +affect @code{make}. So @code{make} ignores the environment value of +@code{SHELL} (except on MS-DOS and MS-Windows, where @code{SHELL} is +usually not set. @xref{Execution, ,Special handling of SHELL on +MS-DOS}.)@refill + +@node Target-specific, Pattern-specific, Environment, Using Variables +@section Target-specific Variable Values +@cindex target-specific variables +@cindex variables, target-specific + +Variable values in @code{make} are usually global; that is, they are the +same regardless of where they are evaluated (unless they're reset, of +course). One exception to that is automatic variables +(@pxref{Automatic Variables}). + +The other exception is @dfn{target-specific variable values}. This +feature allows you to define different values for the same variable, +based on the target that @code{make} is currently building. As with +automatic variables, these values are only available within the context +of a target's command script (and in other target-specific assignments). + +Set a target-specific variable value like this: + +@example +@var{target} @dots{} : @var{variable-assignment} +@end example + +@noindent +or like this: + +@example +@var{target} @dots{} : override @var{variable-assignment} +@end example + +@noindent +or like this: + +@example +@var{target} @dots{} : export @var{variable-assignment} +@end example + +Multiple @var{target} values create a target-specific variable value for +each member of the target list individually. + +The @var{variable-assignment} can be any valid form of assignment; +recursive (@samp{=}), static (@samp{:=}), appending (@samp{+=}), or +conditional (@samp{?=}). All variables that appear within the +@var{variable-assignment} are evaluated within the context of the +target: thus, any previously-defined target-specific variable values +will be in effect. Note that this variable is actually distinct from +any ``global'' value: the two variables do not have to have the same +flavor (recursive vs. static). + +Target-specific variables have the same priority as any other makefile +variable. Variables provided on the command-line (and in the +environment if the @samp{-e} option is in force) will take precedence. +Specifying the @code{override} directive will allow the target-specific +variable value to be preferred. + +There is one more special feature of target-specific variables: when you +define a target-specific variable, that variable value is also in effect +for all prerequisites of this target (unless those prerequisites override +it with their own target-specific variable value). So, for example, a +statement like this: + +@example +prog : CFLAGS = -g +prog : prog.o foo.o bar.o +@end example + +@noindent +will set @code{CFLAGS} to @samp{-g} in the command script for +@file{prog}, but it will also set @code{CFLAGS} to @samp{-g} in the +command scripts that create @file{prog.o}, @file{foo.o}, and +@file{bar.o}, and any command scripts which create their prerequisites. + +@node Pattern-specific, , Target-specific, Using Variables +@section Pattern-specific Variable Values +@cindex pattern-specific variables +@cindex variables, pattern-specific + +In addition to target-specific variable values +(@pxref{Target-specific, ,Target-specific Variable Values}), GNU +@code{make} supports pattern-specific variable values. In this form, +the variable is defined for any target that matches the pattern +specified. If a target matches more than one pattern, all the +matching pattern-specific variables are interpreted in the order in +which they were defined in the makefile, and collected together into +one set. Variables defined in this way are searched after any +target-specific variables defined explicitly for that target, and +before target-specific variables defined for the parent target. + +Set a pattern-specific variable value like this: + +@example +@var{pattern} @dots{} : @var{variable-assignment} +@end example + +@noindent +or like this: + +@example +@var{pattern} @dots{} : override @var{variable-assignment} +@end example + +@noindent +where @var{pattern} is a %-pattern. As with target-specific variable +values, multiple @var{pattern} values create a pattern-specific variable +value for each pattern individually. The @var{variable-assignment} can +be any valid form of assignment. Any command-line variable setting will +take precedence, unless @code{override} is specified. + +For example: + +@example +%.o : CFLAGS = -O +@end example + +@noindent +will assign @code{CFLAGS} the value of @samp{-O} for all targets +matching the pattern @code{%.o}. + +@node Conditionals, Functions, Using Variables, Top +@chapter Conditional Parts of Makefiles + +@cindex conditionals +A @dfn{conditional} causes part of a makefile to be obeyed or ignored +depending on the values of variables. Conditionals can compare the +value of one variable to another, or the value of a variable to +a constant string. Conditionals control what @code{make} actually +``sees'' in the makefile, so they @emph{cannot} be used to control shell +commands at the time of execution.@refill + +@menu +* Conditional Example:: Example of a conditional +* Conditional Syntax:: The syntax of conditionals. +* Testing Flags:: Conditionals that test flags. +@end menu + +@node Conditional Example, Conditional Syntax, Conditionals, Conditionals +@section Example of a Conditional + +The following example of a conditional tells @code{make} to use one set +of libraries if the @code{CC} variable is @samp{gcc}, and a different +set of libraries otherwise. It works by controlling which of two +command lines will be used as the command for a rule. The result is +that @samp{CC=gcc} as an argument to @code{make} changes not only which +compiler is used but also which libraries are linked. + +@example +libs_for_gcc = -lgnu +normal_libs = + +foo: $(objects) +ifeq ($(CC),gcc) + $(CC) -o foo $(objects) $(libs_for_gcc) +else + $(CC) -o foo $(objects) $(normal_libs) +endif +@end example + +This conditional uses three directives: one @code{ifeq}, one @code{else} +and one @code{endif}. + +The @code{ifeq} directive begins the conditional, and specifies the +condition. It contains two arguments, separated by a comma and surrounded +by parentheses. Variable substitution is performed on both arguments and +then they are compared. The lines of the makefile following the +@code{ifeq} are obeyed if the two arguments match; otherwise they are +ignored. + +The @code{else} directive causes the following lines to be obeyed if the +previous conditional failed. In the example above, this means that the +second alternative linking command is used whenever the first alternative +is not used. It is optional to have an @code{else} in a conditional. + +The @code{endif} directive ends the conditional. Every conditional must +end with an @code{endif}. Unconditional makefile text follows. + +As this example illustrates, conditionals work at the textual level: +the lines of the conditional are treated as part of the makefile, or +ignored, according to the condition. This is why the larger syntactic +units of the makefile, such as rules, may cross the beginning or the +end of the conditional. + +When the variable @code{CC} has the value @samp{gcc}, the above example has +this effect: + +@example +foo: $(objects) + $(CC) -o foo $(objects) $(libs_for_gcc) +@end example + +@noindent +When the variable @code{CC} has any other value, the effect is this: + +@example +foo: $(objects) + $(CC) -o foo $(objects) $(normal_libs) +@end example + +Equivalent results can be obtained in another way by conditionalizing a +variable assignment and then using the variable unconditionally: + +@example +libs_for_gcc = -lgnu +normal_libs = + +ifeq ($(CC),gcc) + libs=$(libs_for_gcc) +else + libs=$(normal_libs) +endif + +foo: $(objects) + $(CC) -o foo $(objects) $(libs) +@end example + +@node Conditional Syntax, Testing Flags, Conditional Example, Conditionals +@section Syntax of Conditionals +@findex ifdef +@findex ifeq +@findex ifndef +@findex ifneq +@findex else +@findex endif + +The syntax of a simple conditional with no @code{else} is as follows: + +@example +@var{conditional-directive} +@var{text-if-true} +endif +@end example + +@noindent +The @var{text-if-true} may be any lines of text, to be considered as part +of the makefile if the condition is true. If the condition is false, no +text is used instead. + +The syntax of a complex conditional is as follows: + +@example +@var{conditional-directive} +@var{text-if-true} +else +@var{text-if-false} +endif +@end example + +@noindent +If the condition is true, @var{text-if-true} is used; otherwise, +@var{text-if-false} is used instead. The @var{text-if-false} can be any +number of lines of text. + +The syntax of the @var{conditional-directive} is the same whether the +conditional is simple or complex. There are four different directives that +test different conditions. Here is a table of them: + +@table @code +@item ifeq (@var{arg1}, @var{arg2}) +@itemx ifeq '@var{arg1}' '@var{arg2}' +@itemx ifeq "@var{arg1}" "@var{arg2}" +@itemx ifeq "@var{arg1}" '@var{arg2}' +@itemx ifeq '@var{arg1}' "@var{arg2}" +Expand all variable references in @var{arg1} and @var{arg2} and +compare them. If they are identical, the @var{text-if-true} is +effective; otherwise, the @var{text-if-false}, if any, is effective. + +Often you want to test if a variable has a non-empty value. When the +value results from complex expansions of variables and functions, +expansions you would consider empty may actually contain whitespace +characters and thus are not seen as empty. However, you can use the +@code{strip} function (@pxref{Text Functions}) to avoid interpreting +whitespace as a non-empty value. For example: + +@example +@group +ifeq ($(strip $(foo)),) +@var{text-if-empty} +endif +@end group +@end example + +@noindent +will evaluate @var{text-if-empty} even if the expansion of +@code{$(foo)} contains whitespace characters. + +@item ifneq (@var{arg1}, @var{arg2}) +@itemx ifneq '@var{arg1}' '@var{arg2}' +@itemx ifneq "@var{arg1}" "@var{arg2}" +@itemx ifneq "@var{arg1}" '@var{arg2}' +@itemx ifneq '@var{arg1}' "@var{arg2}" +Expand all variable references in @var{arg1} and @var{arg2} and +compare them. If they are different, the @var{text-if-true} is +effective; otherwise, the @var{text-if-false}, if any, is effective. + +@item ifdef @var{variable-name} +If the variable @var{variable-name} has a non-empty value, the +@var{text-if-true} is effective; otherwise, the @var{text-if-false}, +if any, is effective. Variables that have never been defined have an +empty value. The variable @var{variable-name} is itself expanded, so +it could be a variable or function that expands to the name of a +variable. + +Note that @code{ifdef} only tests whether a variable has a value. It +does not expand the variable to see if that value is nonempty. +Consequently, tests using @code{ifdef} return true for all definitions +except those like @code{foo =}. To test for an empty value, use +@w{@code{ifeq ($(foo),)}}. For example, + +@example +bar = +foo = $(bar) +ifdef foo +frobozz = yes +else +frobozz = no +endif +@end example + +@noindent +sets @samp{frobozz} to @samp{yes}, while: + +@example +foo = +ifdef foo +frobozz = yes +else +frobozz = no +endif +@end example + +@noindent +sets @samp{frobozz} to @samp{no}. + +@item ifndef @var{variable-name} +If the variable @var{variable-name} has an empty value, the +@var{text-if-true} is effective; otherwise, the @var{text-if-false}, +if any, is effective. +@end table + +Extra spaces are allowed and ignored at the beginning of the conditional +directive line, but a tab is not allowed. (If the line begins with a tab, +it will be considered a command for a rule.) Aside from this, extra spaces +or tabs may be inserted with no effect anywhere except within the directive +name or within an argument. A comment starting with @samp{#} may appear at +the end of the line. + +The other two directives that play a part in a conditional are @code{else} +and @code{endif}. Each of these directives is written as one word, with no +arguments. Extra spaces are allowed and ignored at the beginning of the +line, and spaces or tabs at the end. A comment starting with @samp{#} may +appear at the end of the line. + +Conditionals affect which lines of the makefile @code{make} uses. If +the condition is true, @code{make} reads the lines of the +@var{text-if-true} as part of the makefile; if the condition is false, +@code{make} ignores those lines completely. It follows that syntactic +units of the makefile, such as rules, may safely be split across the +beginning or the end of the conditional.@refill + +@code{make} evaluates conditionals when it reads a makefile. +Consequently, you cannot use automatic variables in the tests of +conditionals because they are not defined until commands are run +(@pxref{Automatic Variables}). + +To prevent intolerable confusion, it is not permitted to start a +conditional in one makefile and end it in another. However, you may +write an @code{include} directive within a conditional, provided you do +not attempt to terminate the conditional inside the included file. + +@node Testing Flags, , Conditional Syntax, Conditionals +@section Conditionals that Test Flags + +You can write a conditional that tests @code{make} command flags such as +@samp{-t} by using the variable @code{MAKEFLAGS} together with the +@code{findstring} function +(@pxref{Text Functions, , Functions for String Substitution and Analysis}). +This is useful when @code{touch} is not enough to make a file appear up +to date. + +The @code{findstring} function determines whether one string appears as a +substring of another. If you want to test for the @samp{-t} flag, +use @samp{t} as the first string and the value of @code{MAKEFLAGS} as +the other. + +For example, here is how to arrange to use @samp{ranlib -t} to finish +marking an archive file up to date: + +@example +archive.a: @dots{} +ifneq (,$(findstring t,$(MAKEFLAGS))) + +touch archive.a + +ranlib -t archive.a +else + ranlib archive.a +endif +@end example + +@noindent +The @samp{+} prefix marks those command lines as ``recursive'' so +that they will be executed despite use of the @samp{-t} flag. +@xref{Recursion, ,Recursive Use of @code{make}}. + +@node Functions, Running, Conditionals, Top +@chapter Functions for Transforming Text +@cindex functions + +@dfn{Functions} allow you to do text processing in the makefile to compute +the files to operate on or the commands to use. You use a function in a +@dfn{function call}, where you give the name of the function and some text +(the @dfn{arguments}) for the function to operate on. The result of the +function's processing is substituted into the makefile at the point of the +call, just as a variable might be substituted. + +@menu +* Syntax of Functions:: How to write a function call. +* Text Functions:: General-purpose text manipulation functions. +* File Name Functions:: Functions for manipulating file names. +* Foreach Function:: Repeat some text with controlled variation. +* If Function:: Conditionally expand a value. +* Call Function:: Expand a user-defined function. +* Value Function:: Return the un-expanded value of a variable. +* Eval Function:: Evaluate the arguments as makefile syntax. +* Origin Function:: Find where a variable got its value. +* Shell Function:: Substitute the output of a shell command. +* Make Control Functions:: Functions that control how make runs. +@end menu + +@node Syntax of Functions, Text Functions, Functions, Functions +@section Function Call Syntax +@cindex @code{$}, in function call +@cindex dollar sign (@code{$}), in function call +@cindex arguments of functions +@cindex functions, syntax of + +A function call resembles a variable reference. It looks like this: + +@example +$(@var{function} @var{arguments}) +@end example + +@noindent +or like this: + +@example +$@{@var{function} @var{arguments}@} +@end example + +Here @var{function} is a function name; one of a short list of names +that are part of @code{make}. You can also essentially create your own +functions by using the @code{call} builtin function. + +The @var{arguments} are the arguments of the function. They are +separated from the function name by one or more spaces or tabs, and if +there is more than one argument, then they are separated by commas. +Such whitespace and commas are not part of an argument's value. The +delimiters which you use to surround the function call, whether +parentheses or braces, can appear in an argument only in matching pairs; +the other kind of delimiters may appear singly. If the arguments +themselves contain other function calls or variable references, it is +wisest to use the same kind of delimiters for all the references; write +@w{@samp{$(subst a,b,$(x))}}, not @w{@samp{$(subst a,b,$@{x@})}}. This +is because it is clearer, and because only one type of delimiter is +matched to find the end of the reference. + +The text written for each argument is processed by substitution of +variables and function calls to produce the argument value, which +is the text on which the function acts. The substitution is done in the +order in which the arguments appear. + +Commas and unmatched parentheses or braces cannot appear in the text of an +argument as written; leading spaces cannot appear in the text of the first +argument as written. These characters can be put into the argument value +by variable substitution. First define variables @code{comma} and +@code{space} whose values are isolated comma and space characters, then +substitute these variables where such characters are wanted, like this: + +@example +@group +comma:= , +empty:= +space:= $(empty) $(empty) +foo:= a b c +bar:= $(subst $(space),$(comma),$(foo)) +# @r{bar is now `a,b,c'.} +@end group +@end example + +@noindent +Here the @code{subst} function replaces each space with a comma, through +the value of @code{foo}, and substitutes the result. + +@node Text Functions, File Name Functions, Syntax of Functions, Functions +@section Functions for String Substitution and Analysis +@cindex functions, for text + +Here are some functions that operate on strings: + +@table @code +@item $(subst @var{from},@var{to},@var{text}) +@findex subst +Performs a textual replacement on the text @var{text}: each occurrence +of @var{from} is replaced by @var{to}. The result is substituted for +the function call. For example, + +@example +$(subst ee,EE,feet on the street) +@end example + +substitutes the string @samp{fEEt on the strEEt}. + +@item $(patsubst @var{pattern},@var{replacement},@var{text}) +@findex patsubst +Finds whitespace-separated words in @var{text} that match +@var{pattern} and replaces them with @var{replacement}. Here +@var{pattern} may contain a @samp{%} which acts as a wildcard, +matching any number of any characters within a word. If +@var{replacement} also contains a @samp{%}, the @samp{%} is replaced +by the text that matched the @samp{%} in @var{pattern}. Only the first +@samp{%} in the @var{pattern} and @var{replacement} is treated this +way; any subsequent @samp{%} is unchanged.@refill + +@cindex @code{%}, quoting in @code{patsubst} +@cindex @code{%}, quoting with @code{\} (backslash) +@cindex @code{\} (backslash), to quote @code{%} +@cindex backslash (@code{\}), to quote @code{%} +@cindex quoting @code{%}, in @code{patsubst} +@samp{%} characters in @code{patsubst} function invocations can be +quoted with preceding backslashes (@samp{\}). Backslashes that would +otherwise quote @samp{%} characters can be quoted with more backslashes. +Backslashes that quote @samp{%} characters or other backslashes are +removed from the pattern before it is compared file names or has a stem +substituted into it. Backslashes that are not in danger of quoting +@samp{%} characters go unmolested. For example, the pattern +@file{the\%weird\\%pattern\\} has @samp{the%weird\} preceding the +operative @samp{%} character, and @samp{pattern\\} following it. The +final two backslashes are left alone because they cannot affect any +@samp{%} character.@refill + +Whitespace between words is folded into single space characters; +leading and trailing whitespace is discarded. + +For example, + +@example +$(patsubst %.c,%.o,x.c.c bar.c) +@end example + +@noindent +produces the value @samp{x.c.o bar.o}. + +Substitution references (@pxref{Substitution Refs, ,Substitution +References}) are a simpler way to get the effect of the @code{patsubst} +function: + +@example +$(@var{var}:@var{pattern}=@var{replacement}) +@end example + +@noindent +is equivalent to + +@example +$(patsubst @var{pattern},@var{replacement},$(@var{var})) +@end example + +The second shorthand simplifies one of the most common uses of +@code{patsubst}: replacing the suffix at the end of file names. + +@example +$(@var{var}:@var{suffix}=@var{replacement}) +@end example + +@noindent +is equivalent to + +@example +$(patsubst %@var{suffix},%@var{replacement},$(@var{var})) +@end example + +@noindent +For example, you might have a list of object files: + +@example +objects = foo.o bar.o baz.o +@end example + +@noindent +To get the list of corresponding source files, you could simply write: + +@example +$(objects:.o=.c) +@end example + +@noindent +instead of using the general form: + +@example +$(patsubst %.o,%.c,$(objects)) +@end example + +@item $(strip @var{string}) +@cindex stripping whitespace +@cindex whitespace, stripping +@cindex spaces, stripping +@findex strip +Removes leading and trailing whitespace from @var{string} and replaces +each internal sequence of one or more whitespace characters with a +single space. Thus, @samp{$(strip a b c )} results in @w{@samp{a b c}}. + +The function @code{strip} can be very useful when used in conjunction +with conditionals. When comparing something with the empty string +@samp{} using @code{ifeq} or @code{ifneq}, you usually want a string of +just whitespace to match the empty string (@pxref{Conditionals}). + +Thus, the following may fail to have the desired results: + +@example +.PHONY: all +ifneq "$(needs_made)" "" +all: $(needs_made) +else +all:;@@echo 'Nothing to make!' +endif +@end example + +@noindent +Replacing the variable reference @w{@samp{$(needs_made)}} with the +function call @w{@samp{$(strip $(needs_made))}} in the @code{ifneq} +directive would make it more robust.@refill + +@item $(findstring @var{find},@var{in}) +@findex findstring +@cindex searching for strings +@cindex finding strings +@cindex strings, searching for +Searches @var{in} for an occurrence of @var{find}. If it occurs, the +value is @var{find}; otherwise, the value is empty. You can use this +function in a conditional to test for the presence of a specific +substring in a given string. Thus, the two examples, + +@example +$(findstring a,a b c) +$(findstring a,b c) +@end example + +@noindent +produce the values @samp{a} and @samp{} (the empty string), +respectively. @xref{Testing Flags}, for a practical application of +@code{findstring}.@refill + +@need 750 +@findex filter +@cindex filtering words +@cindex words, filtering +@item $(filter @var{pattern}@dots{},@var{text}) +Returns all whitespace-separated words in @var{text} that @emph{do} match +any of the @var{pattern} words, removing any words that @emph{do not} +match. The patterns are written using @samp{%}, just like the patterns +used in the @code{patsubst} function above.@refill + +The @code{filter} function can be used to separate out different types +of strings (such as file names) in a variable. For example: + +@example +sources := foo.c bar.c baz.s ugh.h +foo: $(sources) + cc $(filter %.c %.s,$(sources)) -o foo +@end example + +@noindent +says that @file{foo} depends of @file{foo.c}, @file{bar.c}, +@file{baz.s} and @file{ugh.h} but only @file{foo.c}, @file{bar.c} and +@file{baz.s} should be specified in the command to the +compiler.@refill + +@item $(filter-out @var{pattern}@dots{},@var{text}) +@findex filter-out +@cindex filtering out words +@cindex words, filtering out +Returns all whitespace-separated words in @var{text} that @emph{do not} +match any of the @var{pattern} words, removing the words that @emph{do} +match one or more. This is the exact opposite of the @code{filter} +function.@refill + +For example, given: + +@example +@group +objects=main1.o foo.o main2.o bar.o +mains=main1.o main2.o +@end group +@end example + +@noindent +the following generates a list which contains all the object files not +in @samp{mains}: + +@example +$(filter-out $(mains),$(objects)) +@end example + +@need 1500 +@findex sort +@cindex sorting words +@item $(sort @var{list}) +Sorts the words of @var{list} in lexical order, removing duplicate +words. The output is a list of words separated by single spaces. +Thus, + +@example +$(sort foo bar lose) +@end example + +@noindent +returns the value @samp{bar foo lose}. + +@cindex removing duplicate words +@cindex duplicate words, removing +@cindex words, removing duplicates +Incidentally, since @code{sort} removes duplicate words, you can use +it for this purpose even if you don't care about the sort order. + +@item $(word @var{n},@var{text}) +@findex word +@cindex word, selecting a +@cindex selecting a word +Returns the @var{n}th word of @var{text}. The legitimate values of +@var{n} start from 1. If @var{n} is bigger than the number of words +in @var{text}, the value is empty. For example, + +@example +$(word 2, foo bar baz) +@end example + +@noindent +returns @samp{bar}. + +@item $(wordlist @var{s},@var{e},@var{text}) +@findex wordlist +@cindex words, selecting lists of +@cindex selecting word lists +Returns the list of words in @var{text} starting with word @var{s} and +ending with word @var{e} (inclusive). The legitimate values of @var{s} +and @var{e} start from 1. If @var{s} is bigger than the number of words +in @var{text}, the value is empty. If @var{e} is bigger than the number +of words in @var{text}, words up to the end of @var{text} are returned. +If @var{s} is greater than @var{e}, nothing is returned. For example, + +@example +$(wordlist 2, 3, foo bar baz) +@end example + +@noindent +returns @samp{bar baz}. + +@c Following item phrased to prevent overfull hbox. --RJC 17 Jul 92 +@item $(words @var{text}) +@findex words +@cindex words, finding number +Returns the number of words in @var{text}. +Thus, the last word of @var{text} is +@w{@code{$(word $(words @var{text}),@var{text})}}.@refill + +@item $(firstword @var{names}@dots{}) +@findex firstword +@cindex words, extracting first +The argument @var{names} is regarded as a series of names, separated +by whitespace. The value is the first name in the series. The rest +of the names are ignored. + +For example, + +@example +$(firstword foo bar) +@end example + +@noindent +produces the result @samp{foo}. Although @code{$(firstword +@var{text})} is the same as @code{$(word 1,@var{text})}, the +@code{firstword} function is retained for its simplicity.@refill +@end table + +Here is a realistic example of the use of @code{subst} and +@code{patsubst}. Suppose that a makefile uses the @code{VPATH} variable +to specify a list of directories that @code{make} should search for +prerequisite files +(@pxref{General Search, , @code{VPATH} Search Path for All Prerequisites}). +This example shows how to +tell the C compiler to search for header files in the same list of +directories.@refill + +The value of @code{VPATH} is a list of directories separated by colons, +such as @samp{src:../headers}. First, the @code{subst} function is used to +change the colons to spaces: + +@example +$(subst :, ,$(VPATH)) +@end example + +@noindent +This produces @samp{src ../headers}. Then @code{patsubst} is used to turn +each directory name into a @samp{-I} flag. These can be added to the +value of the variable @code{CFLAGS}, which is passed automatically to the C +compiler, like this: + +@example +override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH))) +@end example + +@noindent +The effect is to append the text @samp{-Isrc -I../headers} to the +previously given value of @code{CFLAGS}. The @code{override} directive is +used so that the new value is assigned even if the previous value of +@code{CFLAGS} was specified with a command argument (@pxref{Override +Directive, , The @code{override} Directive}). + +@node File Name Functions, Foreach Function, Text Functions, Functions +@section Functions for File Names +@cindex functions, for file names +@cindex file name functions + +Several of the built-in expansion functions relate specifically to +taking apart file names or lists of file names. + +Each of the following functions performs a specific transformation on a +file name. The argument of the function is regarded as a series of file +names, separated by whitespace. (Leading and trailing whitespace is +ignored.) Each file name in the series is transformed in the same way and +the results are concatenated with single spaces between them. + +@table @code +@item $(dir @var{names}@dots{}) +@findex dir +@cindex directory part +@cindex file name, directory part +Extracts the directory-part of each file name in @var{names}. The +directory-part of the file name is everything up through (and +including) the last slash in it. If the file name contains no slash, +the directory part is the string @samp{./}. For example, + +@example +$(dir src/foo.c hacks) +@end example + +@noindent +produces the result @samp{src/ ./}. + +@item $(notdir @var{names}@dots{}) +@findex notdir +@cindex file name, nondirectory part +@cindex nondirectory part +Extracts all but the directory-part of each file name in @var{names}. +If the file name contains no slash, it is left unchanged. Otherwise, +everything through the last slash is removed from it. + +A file name that ends with a slash becomes an empty string. This is +unfortunate, because it means that the result does not always have the +same number of whitespace-separated file names as the argument had; +but we do not see any other valid alternative. + +For example, + +@example +$(notdir src/foo.c hacks) +@end example + +@noindent +produces the result @samp{foo.c hacks}. + +@item $(suffix @var{names}@dots{}) +@findex suffix +@cindex suffix, function to find +@cindex file name suffix +Extracts the suffix of each file name in @var{names}. If the file name +contains a period, the suffix is everything starting with the last +period. Otherwise, the suffix is the empty string. This frequently +means that the result will be empty when @var{names} is not, and if +@var{names} contains multiple file names, the result may contain fewer +file names. + +For example, + +@example +$(suffix src/foo.c src-1.0/bar.c hacks) +@end example + +@noindent +produces the result @samp{.c .c}. + +@item $(basename @var{names}@dots{}) +@findex basename +@cindex basename +@cindex file name, basename of +Extracts all but the suffix of each file name in @var{names}. If the +file name contains a period, the basename is everything starting up to +(and not including) the last period. Periods in the directory part are +ignored. If there is no period, the basename is the entire file name. +For example, + +@example +$(basename src/foo.c src-1.0/bar hacks) +@end example + +@noindent +produces the result @samp{src/foo src-1.0/bar hacks}. + +@c plural convention with dots (be consistent) +@item $(addsuffix @var{suffix},@var{names}@dots{}) +@findex addsuffix +@cindex suffix, adding +@cindex file name suffix, adding +The argument @var{names} is regarded as a series of names, separated +by whitespace; @var{suffix} is used as a unit. The value of +@var{suffix} is appended to the end of each individual name and the +resulting larger names are concatenated with single spaces between +them. For example, + +@example +$(addsuffix .c,foo bar) +@end example + +@noindent +produces the result @samp{foo.c bar.c}. + +@item $(addprefix @var{prefix},@var{names}@dots{}) +@findex addprefix +@cindex prefix, adding +@cindex file name prefix, adding +The argument @var{names} is regarded as a series of names, separated +by whitespace; @var{prefix} is used as a unit. The value of +@var{prefix} is prepended to the front of each individual name and the +resulting larger names are concatenated with single spaces between +them. For example, + +@example +$(addprefix src/,foo bar) +@end example + +@noindent +produces the result @samp{src/foo src/bar}. + +@item $(join @var{list1},@var{list2}) +@findex join +@cindex joining lists of words +@cindex words, joining lists +Concatenates the two arguments word by word: the two first words (one +from each argument) concatenated form the first word of the result, the +two second words form the second word of the result, and so on. So the +@var{n}th word of the result comes from the @var{n}th word of each +argument. If one argument has more words that the other, the extra +words are copied unchanged into the result. + +For example, @samp{$(join a b,.c .o)} produces @samp{a.c b.o}. + +Whitespace between the words in the lists is not preserved; it is +replaced with a single space. + +This function can merge the results of the @code{dir} and +@code{notdir} functions, to produce the original list of files which +was given to those two functions.@refill + +@item $(wildcard @var{pattern}) +@findex wildcard +@cindex wildcard, function +The argument @var{pattern} is a file name pattern, typically containing +wildcard characters (as in shell file name patterns). The result of +@code{wildcard} is a space-separated list of the names of existing files +that match the pattern. +@xref{Wildcards, ,Using Wildcard Characters in File Names}. +@end table + +@node Foreach Function, If Function, File Name Functions, Functions +@section The @code{foreach} Function +@findex foreach +@cindex words, iterating over + +The @code{foreach} function is very different from other functions. It +causes one piece of text to be used repeatedly, each time with a different +substitution performed on it. It resembles the @code{for} command in the +shell @code{sh} and the @code{foreach} command in the C-shell @code{csh}. + +The syntax of the @code{foreach} function is: + +@example +$(foreach @var{var},@var{list},@var{text}) +@end example + +@noindent +The first two arguments, @var{var} and @var{list}, are expanded before +anything else is done; note that the last argument, @var{text}, is +@strong{not} expanded at the same time. Then for each word of the expanded +value of @var{list}, the variable named by the expanded value of @var{var} +is set to that word, and @var{text} is expanded. Presumably @var{text} +contains references to that variable, so its expansion will be different +each time. + +The result is that @var{text} is expanded as many times as there are +whitespace-separated words in @var{list}. The multiple expansions of +@var{text} are concatenated, with spaces between them, to make the result +of @code{foreach}. + +This simple example sets the variable @samp{files} to the list of all files +in the directories in the list @samp{dirs}: + +@example +dirs := a b c d +files := $(foreach dir,$(dirs),$(wildcard $(dir)/*)) +@end example + +Here @var{text} is @samp{$(wildcard $(dir)/*)}. The first repetition +finds the value @samp{a} for @code{dir}, so it produces the same result +as @samp{$(wildcard a/*)}; the second repetition produces the result +of @samp{$(wildcard b/*)}; and the third, that of @samp{$(wildcard c/*)}. + +This example has the same result (except for setting @samp{dirs}) as +the following example: + +@example +files := $(wildcard a/* b/* c/* d/*) +@end example + +When @var{text} is complicated, you can improve readability by giving it +a name, with an additional variable: + +@example +find_files = $(wildcard $(dir)/*) +dirs := a b c d +files := $(foreach dir,$(dirs),$(find_files)) +@end example + +@noindent +Here we use the variable @code{find_files} this way. We use plain @samp{=} +to define a recursively-expanding variable, so that its value contains an +actual function call to be reexpanded under the control of @code{foreach}; +a simply-expanded variable would not do, since @code{wildcard} would be +called only once at the time of defining @code{find_files}. + +The @code{foreach} function has no permanent effect on the variable +@var{var}; its value and flavor after the @code{foreach} function call are +the same as they were beforehand. The other values which are taken from +@var{list} are in effect only temporarily, during the execution of +@code{foreach}. The variable @var{var} is a simply-expanded variable +during the execution of @code{foreach}. If @var{var} was undefined +before the @code{foreach} function call, it is undefined after the call. +@xref{Flavors, ,The Two Flavors of Variables}.@refill + +You must take care when using complex variable expressions that result in +variable names because many strange things are valid variable names, but +are probably not what you intended. For example, + +@smallexample +files := $(foreach Esta escrito en espanol!,b c ch,$(find_files)) +@end smallexample + +@noindent +might be useful if the value of @code{find_files} references the variable +whose name is @samp{Esta escrito en espanol!} (es un nombre bastante largo, +no?), but it is more likely to be a mistake. + +@node If Function, Call Function, Foreach Function, Functions +@section The @code{if} Function +@findex if +@cindex conditional expansion + +The @code{if} function provides support for conditional expansion in a +functional context (as opposed to the GNU @code{make} makefile +conditionals such as @code{ifeq} (@pxref{Conditional Syntax, ,Syntax of +Conditionals}). + +An @code{if} function call can contain either two or three arguments: + +@example +$(if @var{condition},@var{then-part}[,@var{else-part}]) +@end example + +The first argument, @var{condition}, first has all preceding and +trailing whitespace stripped, then is expanded. If it expands to any +non-empty string, then the condition is considered to be true. If it +expands to an empty string, the condition is considered to be false. + +If the condition is true then the second argument, @var{then-part}, is +evaluated and this is used as the result of the evaluation of the entire +@code{if} function. + +If the condition is false then the third argument, @var{else-part}, is +evaluated and this is the result of the @code{if} function. If there is +no third argument, the @code{if} function evaluates to nothing (the +empty string). + +Note that only one of the @var{then-part} or the @var{else-part} will be +evaluated, never both. Thus, either can contain side-effects (such as +@code{shell} function calls, etc.) + +@node Call Function, Value Function, If Function, Functions +@section The @code{call} Function +@findex call +@cindex functions, user defined +@cindex user defined functions + +The @code{call} function is unique in that it can be used to create new +parameterized functions. You can write a complex expression as the +value of a variable, then use @code{call} to expand it with different +values. + +The syntax of the @code{call} function is: + +@example +$(call @var{variable},@var{param},@var{param},@dots{}) +@end example + +When @code{make} expands this function, it assigns each @var{param} to +temporary variables @code{$(1)}, @code{$(2)}, etc. The variable +@code{$(0)} will contain @var{variable}. There is no maximum number of +parameter arguments. There is no minimum, either, but it doesn't make +sense to use @code{call} with no parameters. + +Then @var{variable} is expanded as a @code{make} variable in the context +of these temporary assignments. Thus, any reference to @code{$(1)} in +the value of @var{variable} will resolve to the first @var{param} in the +invocation of @code{call}. + +Note that @var{variable} is the @emph{name} of a variable, not a +@emph{reference} to that variable. Therefore you would not normally use +a @samp{$} or parentheses when writing it. (You can, however, use a +variable reference in the name if you want the name not to be a +constant.) + +If @var{variable} is the name of a builtin function, the builtin function +is always invoked (even if a @code{make} variable by that name also +exists). + +The @code{call} function expands the @var{param} arguments before +assigning them to temporary variables. This means that @var{variable} +values containing references to builtin functions that have special +expansion rules, like @code{foreach} or @code{if}, may not work as you +expect. + +Some examples may make this clearer. + +This macro simply reverses its arguments: + +@smallexample +reverse = $(2) $(1) + +foo = $(call reverse,a,b) +@end smallexample + +@noindent +Here @var{foo} will contain @samp{b a}. + +This one is slightly more interesting: it defines a macro to search for +the first instance of a program in @code{PATH}: + +@smallexample +pathsearch = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH))))) + +LS := $(call pathsearch,ls) +@end smallexample + +@noindent +Now the variable LS contains @code{/bin/ls} or similar. + +The @code{call} function can be nested. Each recursive invocation gets +its own local values for @code{$(1)}, etc. that mask the values of +higher-level @code{call}. For example, here is an implementation of a +@dfn{map} function: + +@smallexample +map = $(foreach a,$(2),$(call $(1),$(a))) +@end smallexample + +Now you can @var{map} a function that normally takes only one argument, +such as @code{origin}, to multiple values in one step: + +@smallexample +o = $(call map,origin,o map MAKE) +@end smallexample + +and end up with @var{o} containing something like @samp{file file default}. + +A final caution: be careful when adding whitespace to the arguments to +@code{call}. As with other functions, any whitespace contained in the +second and subsequent arguments is kept; this can cause strange +effects. It's generally safest to remove all extraneous whitespace when +providing parameters to @code{call}. + +@node Value Function, Eval Function, Call Function, Functions +@comment node-name, next, previous, up +@section The @code{value} Function +@findex value +@cindex variables, unexpanded value + +The @code{value} function provides a way for you to use the value of a +variable @emph{without} having it expanded. Please note that this +does not undo expansions which have already occurred; for example if +you create a simply expanded variable its value is expanded during the +definition; in that case the @code{value} function will return the +same result as using the variable directly. + +The syntax of the @code{value} function is: + +@example +$(value @var{variable}) +@end example + +Note that @var{variable} is the @emph{name} of a variable; not a +@emph{reference} to that variable. Therefore you would not normally +use a @samp{$} or parentheses when writing it. (You can, however, use +a variable reference in the name if you want the name not to be a +constant.) + +The result of this function is a string containing the value of +@var{variable}, without any expansion occurring. For example, in this +makefile: + +@example +@group +FOO = $PATH + +all: + @@echo $(FOO) + @@echo $(value FOO) +@end group +@end example + +@noindent +The first output line would be @code{ATH}, since the ``$P'' would be +expanded as a @code{make} variable, while the second output line would +be the current value of your @code{$PATH} environment variable, since +the @code{value} function avoided the expansion. + +The @code{value} function is most often used in conjunction with the +@code{eval} function (@pxref{Eval Function}). + +@node Eval Function, Origin Function, Value Function, Functions +@comment node-name, next, previous, up +@section The @code{eval} Function +@findex eval +@cindex evaluating makefile syntax +@cindex makefile syntax, evaluating + +The @code{eval} function is very special: it allows you to define new +makefile constructs that are not constant; which are the result of +evaluating other variables and functions. The argument to the +@code{eval} function is expanded, then the results of that expansion +are parsed as makefile syntax. The expanded results can define new +@code{make} variables, targets, implicit or explicit rules, etc. + +The result of the @code{eval} function is always the empty string; +thus, it can be placed virtually anywhere in a makefile without +causing syntax errors. + +It's important to realize that the @code{eval} argument is expanded +@emph{twice}; first by the @code{eval} function, then the results of +that expansion are expanded again when they are parsed as makefile +syntax. This means you may need to provide extra levels of escaping +for ``$'' characters when using @code{eval}. The @code{value} +function (@pxref{Value Function}) can sometimes be useful in these +situations, to circumvent unwanted expansions. + +Here is an example of how @code{eval} can be used; this example +combines a number of concepts and other functions. Although it might +seem overly complex to use @code{eval} in this example, rather than +just writing out the rules, consider two things: first, the template +definition (in @code{PROGRAM_template}) could need to be much more +complex than it is here; and second, you might put the complex, +``generic'' part of this example into another makefile, then include +it in all the individual makefiles. Now your individual makefiles are +quite straightforward. + +@example +@group +PROGRAMS = server client + +server_OBJS = server.o server_priv.o server_access.o +server_LIBS = priv protocol + +client_OBJS = client.o client_api.o client_mem.o +client_LIBS = protocol + +# Everything after this is generic + +.PHONY: all +all: $(PROGRAMS) + +define PROGRAM_template + $(1): $$($(1)_OBJ) $$($(1)_LIBS:%=-l%) + ALL_OBJS += $$($(1)_OBJS) +endef + +$(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog)))) + +$(PROGRAMS): + $(LINK.o) $^ $(LDLIBS) -o $@@ + +clean: + rm -f $(ALL_OBJS) $(PROGRAMS) +@end group +@end example + +@node Origin Function, Shell Function, Eval Function, Functions +@section The @code{origin} Function +@findex origin +@cindex variables, origin of +@cindex origin of variable + +The @code{origin} function is unlike most other functions in that it does +not operate on the values of variables; it tells you something @emph{about} +a variable. Specifically, it tells you where it came from. + +The syntax of the @code{origin} function is: + +@example +$(origin @var{variable}) +@end example + +Note that @var{variable} is the @emph{name} of a variable to inquire about; +not a @emph{reference} to that variable. Therefore you would not normally +use a @samp{$} or parentheses when writing it. (You can, however, use a +variable reference in the name if you want the name not to be a constant.) + +The result of this function is a string telling you how the variable +@var{variable} was defined: + +@table @samp +@item undefined + +if @var{variable} was never defined. + +@item default + +if @var{variable} has a default definition, as is usual with @code{CC} +and so on. @xref{Implicit Variables, ,Variables Used by Implicit Rules}. +Note that if you have redefined a default variable, the @code{origin} +function will return the origin of the later definition. + +@item environment + +if @var{variable} was defined as an environment variable and the +@samp{-e} option is @emph{not} turned on (@pxref{Options Summary, ,Summary of Options}). + +@item environment override + +if @var{variable} was defined as an environment variable and the +@w{@samp{-e}} option @emph{is} turned on (@pxref{Options Summary, +,Summary of Options}).@refill + +@item file + +if @var{variable} was defined in a makefile. + +@item command line + +if @var{variable} was defined on the command line. + +@item override + +if @var{variable} was defined with an @code{override} directive in a +makefile (@pxref{Override Directive, ,The @code{override} Directive}). + +@item automatic + +if @var{variable} is an automatic variable defined for the +execution of the commands for each rule +(@pxref{Automatic Variables}). +@end table + +This information is primarily useful (other than for your curiosity) to +determine if you want to believe the value of a variable. For example, +suppose you have a makefile @file{foo} that includes another makefile +@file{bar}. You want a variable @code{bletch} to be defined in @file{bar} +if you run the command @w{@samp{make -f bar}}, even if the environment contains +a definition of @code{bletch}. However, if @file{foo} defined +@code{bletch} before including @file{bar}, you do not want to override that +definition. This could be done by using an @code{override} directive in +@file{foo}, giving that definition precedence over the later definition in +@file{bar}; unfortunately, the @code{override} directive would also +override any command line definitions. So, @file{bar} could +include:@refill + +@example +@group +ifdef bletch +ifeq "$(origin bletch)" "environment" +bletch = barf, gag, etc. +endif +endif +@end group +@end example + +@noindent +If @code{bletch} has been defined from the environment, this will redefine +it. + +If you want to override a previous definition of @code{bletch} if it came +from the environment, even under @samp{-e}, you could instead write: + +@example +@group +ifneq "$(findstring environment,$(origin bletch))" "" +bletch = barf, gag, etc. +endif +@end group +@end example + +Here the redefinition takes place if @samp{$(origin bletch)} returns either +@samp{environment} or @samp{environment override}. +@xref{Text Functions, , Functions for String Substitution and Analysis}. + +@node Shell Function, Make Control Functions, Origin Function, Functions +@section The @code{shell} Function +@findex shell +@cindex commands, expansion +@cindex backquotes +@cindex shell command, function for + +The @code{shell} function is unlike any other function except the +@code{wildcard} function +(@pxref{Wildcard Function, ,The Function @code{wildcard}}) in that it +communicates with the world outside of @code{make}. + +The @code{shell} function performs the same function that backquotes +(@samp{`}) perform in most shells: it does @dfn{command expansion}. This +means that it takes an argument that is a shell command and returns the +output of the command. The only processing @code{make} does on the result, +before substituting it into the surrounding text, is to convert each +newline or carriage-return / newline pair to a single space. It also +removes the trailing (carriage-return and) newline, if it's the last +thing in the result.@refill + +The commands run by calls to the @code{shell} function are run when the +function calls are expanded (@pxref{Reading Makefiles, , How +@code{make} Reads a Makefile}). Because this function involves +spawning a new shell, you should carefully consider the performance +implications of using the @code{shell} function within recursively +expanded variables vs. simply expanded variables (@pxref{Flavors, ,The +Two Flavors of Variables}). + +Here are some examples of the use of the @code{shell} function: + +@example +contents := $(shell cat foo) +@end example + +@noindent +sets @code{contents} to the contents of the file @file{foo}, with a space +(rather than a newline) separating each line. + +@example +files := $(shell echo *.c) +@end example + +@noindent +sets @code{files} to the expansion of @samp{*.c}. Unless @code{make} is +using a very strange shell, this has the same result as +@w{@samp{$(wildcard *.c)}}.@refill + +@node Make Control Functions, , Shell Function, Functions +@section Functions That Control Make +@cindex functions, for controlling make +@cindex controlling make + +These functions control the way make runs. Generally, they are used to +provide information to the user of the makefile or to cause make to stop +if some sort of environmental error is detected. + +@table @code +@item $(error @var{text}@dots{}) +@findex error +@cindex error, stopping on +@cindex stopping make +Generates a fatal error where the message is @var{text}. Note that the +error is generated whenever this function is evaluated. So, if you put +it inside a command script or on the right side of a recursive variable +assignment, it won't be evaluated until later. The @var{text} will be +expanded before the error is generated. + +For example, + +@example +ifdef ERROR1 +$(error error is $(ERROR1)) +endif +@end example + +@noindent +will generate a fatal error during the read of the makefile if the +@code{make} variable @code{ERROR1} is defined. Or, + +@example +ERR = $(error found an error!) + +.PHONY: err +err: ; $(ERR) +@end example + +@noindent +will generate a fatal error while @code{make} is running, if the +@code{err} target is invoked. + +@item $(warning @var{text}@dots{}) +@findex warning +@cindex warnings, printing +@cindex printing user warnings +This function works similarly to the @code{error} function, above, +except that @code{make} doesn't exit. Instead, @var{text} is expanded +and the resulting message is displayed, but processing of the makefile +continues. + +The result of the expansion of this function is the empty string. +@end table + +@node Running, Implicit Rules, Functions, Top +@chapter How to Run @code{make} + +A makefile that says how to recompile a program can be used in more +than one way. The simplest use is to recompile every file that is out +of date. Usually, makefiles are written so that if you run +@code{make} with no arguments, it does just that. + +But you might want to update only some of the files; you might want to use +a different compiler or different compiler options; you might want just to +find out which files are out of date without changing them. + +By giving arguments when you run @code{make}, you can do any of these +things and many others. + +The exit status of @code{make} is always one of three values: +@table @code +@item 0 +The exit status is zero if @code{make} is successful. +@item 2 +The exit status is two if @code{make} encounters any errors. +It will print messages describing the particular errors. +@item 1 +The exit status is one if you use the @samp{-q} flag and @code{make} +determines that some target is not already up to date. +@xref{Instead of Execution, ,Instead of Executing the Commands}. +@end table + +@menu +* Makefile Arguments:: How to specify which makefile to use. +* Goals:: How to use goal arguments to specify which + parts of the makefile to use. +* Instead of Execution:: How to use mode flags to specify what + kind of thing to do with the commands + in the makefile other than simply + execute them. +* Avoiding Compilation:: How to avoid recompiling certain files. +* Overriding:: How to override a variable to specify + an alternate compiler and other things. +* Testing:: How to proceed past some errors, to + test compilation. +* Options Summary:: Summary of Options +@end menu + +@node Makefile Arguments, Goals, Running, Running +@section Arguments to Specify the Makefile +@cindex @code{--file} +@cindex @code{--makefile} +@cindex @code{-f} + +The way to specify the name of the makefile is with the @samp{-f} or +@samp{--file} option (@samp{--makefile} also works). For example, +@samp{-f altmake} says to use the file @file{altmake} as the makefile. + +If you use the @samp{-f} flag several times and follow each @samp{-f} +with an argument, all the specified files are used jointly as +makefiles. + +If you do not use the @samp{-f} or @samp{--file} flag, the default is +to try @file{GNUmakefile}, @file{makefile}, and @file{Makefile}, in +that order, and use the first of these three which exists or can be made +(@pxref{Makefiles, ,Writing Makefiles}).@refill + +@node Goals, Instead of Execution, Makefile Arguments, Running +@section Arguments to Specify the Goals +@cindex goal, how to specify + +The @dfn{goals} are the targets that @code{make} should strive ultimately +to update. Other targets are updated as well if they appear as +prerequisites of goals, or prerequisites of prerequisites of goals, etc. + +By default, the goal is the first target in the makefile (not counting +targets that start with a period). Therefore, makefiles are usually +written so that the first target is for compiling the entire program or +programs they describe. If the first rule in the makefile has several +targets, only the first target in the rule becomes the default goal, not +the whole list. + +You can specify a different goal or goals with arguments to @code{make}. +Use the name of the goal as an argument. If you specify several goals, +@code{make} processes each of them in turn, in the order you name them. + +Any target in the makefile may be specified as a goal (unless it +starts with @samp{-} or contains an @samp{=}, in which case it will be +parsed as a switch or variable definition, respectively). Even +targets not in the makefile may be specified, if @code{make} can find +implicit rules that say how to make them. + +@cindex @code{MAKECMDGOALS} +@vindex MAKECMDGOALS +@code{Make} will set the special variable @code{MAKECMDGOALS} to the +list of goals you specified on the command line. If no goals were given +on the command line, this variable is empty. Note that this variable +should be used only in special circumstances. + +An example of appropriate use is to avoid including @file{.d} files +during @code{clean} rules (@pxref{Automatic Prerequisites}), so +@code{make} won't create them only to immediately remove them +again:@refill + +@example +@group +sources = foo.c bar.c + +ifneq ($(MAKECMDGOALS),clean) +include $(sources:.c=.d) +endif +@end group +@end example + +One use of specifying a goal is if you want to compile only a part of +the program, or only one of several programs. Specify as a goal each +file that you wish to remake. For example, consider a directory containing +several programs, with a makefile that starts like this: + +@example +.PHONY: all +all: size nm ld ar as +@end example + +If you are working on the program @code{size}, you might want to say +@w{@samp{make size}} so that only the files of that program are recompiled. + +Another use of specifying a goal is to make files that are not normally +made. For example, there may be a file of debugging output, or a +version of the program that is compiled specially for testing, which has +a rule in the makefile but is not a prerequisite of the default goal. + +Another use of specifying a goal is to run the commands associated with +a phony target (@pxref{Phony Targets}) or empty target (@pxref{Empty +Targets, ,Empty Target Files to Record Events}). Many makefiles contain +a phony target named @file{clean} which deletes everything except source +files. Naturally, this is done only if you request it explicitly with +@w{@samp{make clean}}. Following is a list of typical phony and empty +target names. @xref{Standard Targets}, for a detailed list of all the +standard target names which GNU software packages use. + +@table @file +@item all +@cindex @code{all} @r{(standard target)} +Make all the top-level targets the makefile knows about. + +@item clean +@cindex @code{clean} @r{(standard target)} +Delete all files that are normally created by running @code{make}. + +@item mostlyclean +@cindex @code{mostlyclean} @r{(standard target)} +Like @samp{clean}, but may refrain from deleting a few files that people +normally don't want to recompile. For example, the @samp{mostlyclean} +target for GCC does not delete @file{libgcc.a}, because recompiling it +is rarely necessary and takes a lot of time. + +@item distclean +@cindex @code{distclean} @r{(standard target)} +@itemx realclean +@cindex @code{realclean} @r{(standard target)} +@itemx clobber +@cindex @code{clobber} @r{(standard target)} +Any of these targets might be defined to delete @emph{more} files than +@samp{clean} does. For example, this would delete configuration files +or links that you would normally create as preparation for compilation, +even if the makefile itself cannot create these files. + +@item install +@cindex @code{install} @r{(standard target)} +Copy the executable file into a directory that users typically search +for commands; copy any auxiliary files that the executable uses into +the directories where it will look for them. + +@item print +@cindex @code{print} @r{(standard target)} +Print listings of the source files that have changed. + +@item tar +@cindex @code{tar} @r{(standard target)} +Create a tar file of the source files. + +@item shar +@cindex @code{shar} @r{(standard target)} +Create a shell archive (shar file) of the source files. + +@item dist +@cindex @code{dist} @r{(standard target)} +Create a distribution file of the source files. This might +be a tar file, or a shar file, or a compressed version of one of the +above, or even more than one of the above. + +@item TAGS +@cindex @code{TAGS} @r{(standard target)} +Update a tags table for this program. + +@item check +@cindex @code{check} @r{(standard target)} +@itemx test +@cindex @code{test} @r{(standard target)} +Perform self tests on the program this makefile builds. +@end table + +@node Instead of Execution, Avoiding Compilation, Goals, Running +@section Instead of Executing the Commands +@cindex execution, instead of +@cindex commands, instead of executing + +The makefile tells @code{make} how to tell whether a target is up to date, +and how to update each target. But updating the targets is not always +what you want. Certain options specify other activities for @code{make}. + +@comment Extra blank lines make it print better. +@table @samp +@item -n +@itemx --just-print +@itemx --dry-run +@itemx --recon +@cindex @code{--just-print} +@cindex @code{--dry-run} +@cindex @code{--recon} +@cindex @code{-n} + +``No-op''. The activity is to print what commands would be used to make +the targets up to date, but not actually execute them. + +@item -t +@itemx --touch +@cindex @code{--touch} +@cindex touching files +@cindex target, touching +@cindex @code{-t} + +``Touch''. The activity is to mark the targets as up to date without +actually changing them. In other words, @code{make} pretends to compile +the targets but does not really change their contents. + +@item -q +@itemx --question +@cindex @code{--question} +@cindex @code{-q} +@cindex question mode + +``Question''. The activity is to find out silently whether the targets +are up to date already; but execute no commands in either case. In other +words, neither compilation nor output will occur. + +@item -W @var{file} +@itemx --what-if=@var{file} +@itemx --assume-new=@var{file} +@itemx --new-file=@var{file} +@cindex @code{--what-if} +@cindex @code{-W} +@cindex @code{--assume-new} +@cindex @code{--new-file} +@cindex what if +@cindex files, assuming new + +``What if''. Each @samp{-W} flag is followed by a file name. The given +files' modification times are recorded by @code{make} as being the present +time, although the actual modification times remain the same. +You can use the @samp{-W} flag in conjunction with the @samp{-n} flag +to see what would happen if you were to modify specific files.@refill +@end table + +With the @samp{-n} flag, @code{make} prints the commands that it would +normally execute but does not execute them. + +With the @samp{-t} flag, @code{make} ignores the commands in the rules +and uses (in effect) the command @code{touch} for each target that needs to +be remade. The @code{touch} command is also printed, unless @samp{-s} or +@code{.SILENT} is used. For speed, @code{make} does not actually invoke +the program @code{touch}. It does the work directly. + +With the @samp{-q} flag, @code{make} prints nothing and executes no +commands, but the exit status code it returns is zero if and only if the +targets to be considered are already up to date. If the exit status is +one, then some updating needs to be done. If @code{make} encounters an +error, the exit status is two, so you can distinguish an error from a +target that is not up to date. + +It is an error to use more than one of these three flags in the same +invocation of @code{make}. + +@cindex +, and command execution +The @samp{-n}, @samp{-t}, and @samp{-q} options do not affect command +lines that begin with @samp{+} characters or contain the strings +@samp{$(MAKE)} or @samp{$@{MAKE@}}. Note that only the line containing +the @samp{+} character or the strings @samp{$(MAKE)} or @samp{$@{MAKE@}} +is run regardless of these options. Other lines in the same rule are +not run unless they too begin with @samp{+} or contain @samp{$(MAKE)} or +@samp{$@{MAKE@}} (@xref{MAKE Variable, ,How the @code{MAKE} Variable Works}.) + +The @samp{-W} flag provides two features: + +@itemize @bullet +@item +If you also use the @samp{-n} or @samp{-q} flag, you can see what +@code{make} would do if you were to modify some files. + +@item +Without the @samp{-n} or @samp{-q} flag, when @code{make} is actually +executing commands, the @samp{-W} flag can direct @code{make} to act +as if some files had been modified, without actually modifying the +files.@refill +@end itemize + +Note that the options @samp{-p} and @samp{-v} allow you to obtain other +information about @code{make} or about the makefiles in use +(@pxref{Options Summary, ,Summary of Options}).@refill + +@node Avoiding Compilation, Overriding, Instead of Execution, Running +@section Avoiding Recompilation of Some Files +@cindex @code{-o} +@cindex @code{--old-file} +@cindex @code{--assume-old} +@cindex files, assuming old +@cindex files, avoiding recompilation of +@cindex recompilation, avoiding + +Sometimes you may have changed a source file but you do not want to +recompile all the files that depend on it. For example, suppose you add +a macro or a declaration to a header file that many other files depend +on. Being conservative, @code{make} assumes that any change in the +header file requires recompilation of all dependent files, but you know +that they do not need to be recompiled and you would rather not waste +the time waiting for them to compile. + +If you anticipate the problem before changing the header file, you can +use the @samp{-t} flag. This flag tells @code{make} not to run the +commands in the rules, but rather to mark the target up to date by +changing its last-modification date. You would follow this procedure: + +@enumerate +@item +Use the command @samp{make} to recompile the source files that really +need recompilation, ensuring that the object files are up-to-date +before you begin. + +@item +Make the changes in the header files. + +@item +Use the command @samp{make -t} to mark all the object files as +up to date. The next time you run @code{make}, the changes in the +header files will not cause any recompilation. +@end enumerate + +If you have already changed the header file at a time when some files +do need recompilation, it is too late to do this. Instead, you can +use the @w{@samp{-o @var{file}}} flag, which marks a specified file as +``old'' (@pxref{Options Summary, ,Summary of Options}). This means +that the file itself will not be remade, and nothing else will be +remade on its account. Follow this procedure: + +@enumerate +@item +Recompile the source files that need compilation for reasons independent +of the particular header file, with @samp{make -o @var{headerfile}}. +If several header files are involved, use a separate @samp{-o} option +for each header file. + +@item +Touch all the object files with @samp{make -t}. +@end enumerate + +@node Overriding, Testing, Avoiding Compilation, Running +@section Overriding Variables +@cindex overriding variables with arguments +@cindex variables, overriding with arguments +@cindex command line variables +@cindex variables, command line + +An argument that contains @samp{=} specifies the value of a variable: +@samp{@var{v}=@var{x}} sets the value of the variable @var{v} to @var{x}. +If you specify a value in this way, all ordinary assignments of the same +variable in the makefile are ignored; we say they have been +@dfn{overridden} by the command line argument. + +The most common way to use this facility is to pass extra flags to +compilers. For example, in a properly written makefile, the variable +@code{CFLAGS} is included in each command that runs the C compiler, so a +file @file{foo.c} would be compiled something like this: + +@example +cc -c $(CFLAGS) foo.c +@end example + +Thus, whatever value you set for @code{CFLAGS} affects each compilation +that occurs. The makefile probably specifies the usual value for +@code{CFLAGS}, like this: + +@example +CFLAGS=-g +@end example + +Each time you run @code{make}, you can override this value if you +wish. For example, if you say @samp{make CFLAGS='-g -O'}, each C +compilation will be done with @samp{cc -c -g -O}. (This also +illustrates how you can use quoting in the shell to enclose spaces and +other special characters in the value of a variable when you override +it.) + +The variable @code{CFLAGS} is only one of many standard variables that +exist just so that you can change them this way. @xref{Implicit +Variables, , Variables Used by Implicit Rules}, for a complete list. + +You can also program the makefile to look at additional variables of your +own, giving the user the ability to control other aspects of how the +makefile works by changing the variables. + +When you override a variable with a command argument, you can define either +a recursively-expanded variable or a simply-expanded variable. The +examples shown above make a recursively-expanded variable; to make a +simply-expanded variable, write @samp{:=} instead of @samp{=}. But, unless +you want to include a variable reference or function call in the +@emph{value} that you specify, it makes no difference which kind of +variable you create. + +There is one way that the makefile can change a variable that you have +overridden. This is to use the @code{override} directive, which is a line +that looks like this: @samp{override @var{variable} = @var{value}} +(@pxref{Override Directive, ,The @code{override} Directive}). + +@node Testing, Options Summary, Overriding, Running +@section Testing the Compilation of a Program +@cindex testing compilation +@cindex compilation, testing + +Normally, when an error happens in executing a shell command, @code{make} +gives up immediately, returning a nonzero status. No further commands are +executed for any target. The error implies that the goal cannot be +correctly remade, and @code{make} reports this as soon as it knows. + +When you are compiling a program that you have just changed, this is not +what you want. Instead, you would rather that @code{make} try compiling +every file that can be tried, to show you as many compilation errors +as possible. + +@cindex @code{-k} +@cindex @code{--keep-going} +On these occasions, you should use the @samp{-k} or +@samp{--keep-going} flag. This tells @code{make} to continue to +consider the other prerequisites of the pending targets, remaking them +if necessary, before it gives up and returns nonzero status. For +example, after an error in compiling one object file, @samp{make -k} +will continue compiling other object files even though it already +knows that linking them will be impossible. In addition to continuing +after failed shell commands, @samp{make -k} will continue as much as +possible after discovering that it does not know how to make a target +or prerequisite file. This will always cause an error message, but +without @samp{-k}, it is a fatal error (@pxref{Options Summary, +,Summary of Options}).@refill + +The usual behavior of @code{make} assumes that your purpose is to get the +goals up to date; once @code{make} learns that this is impossible, it might +as well report the failure immediately. The @samp{-k} flag says that the +real purpose is to test as much as possible of the changes made in the +program, perhaps to find several independent problems so that you can +correct them all before the next attempt to compile. This is why Emacs' +@kbd{M-x compile} command passes the @samp{-k} flag by default. + +@node Options Summary, , Testing, Running +@section Summary of Options +@cindex options +@cindex flags +@cindex switches + +Here is a table of all the options @code{make} understands: + +@table @samp +@item -b +@cindex @code{-b} +@itemx -m +@cindex @code{-m} +These options are ignored for compatibility with other versions of @code{make}. + +@item -B +@cindex @code{-B} +@itemx --always-make +@cindex @code{--always-make} +Consider all targets out-of-date. GNU @code{make} proceeds to +consider targets and their prerequisites using the normal algorithms; +however, all these targets are remade, regardless of the status of +their prerequisites. + +@item -C @var{dir} +@cindex @code{-C} +@itemx --directory=@var{dir} +@cindex @code{--directory} +Change to directory @var{dir} before reading the makefiles. If multiple +@samp{-C} options are specified, each is interpreted relative to the +previous one: @samp{-C / -C etc} is equivalent to @samp{-C /etc}. +This is typically used with recursive invocations of @code{make} +(@pxref{Recursion, ,Recursive Use of @code{make}}). + +@item -d +@cindex @code{-d} +@c Extra blank line here makes the table look better. + +Print debugging information in addition to normal processing. The +debugging information says which files are being considered for +remaking, which file-times are being compared and with what results, +which files actually need to be remade, which implicit rules are +considered and which are applied---everything interesting about how +@code{make} decides what to do. The @code{-d} option is equivalent to +@samp{--debug=a} (see below). + +@item --debug[=@var{options}] +@cindex @code{--debug} +@c Extra blank line here makes the table look better. + +Print debugging information in addition to normal processing. Various +levels and types of output can be chosen. With no arguments, print the +``basic'' level of debugging. Possible arguments are below; only the +first character is considered, and values must be comma- or +space-separated. + +@table @code +@item a (@i{all}) +All types of debugging output are enabled. This is equivalent to using +@samp{-d}. + +@item b (@i{basic}) +Basic debugging prints each target that was found to be out-of-date, and +whether the build was successful or not. + +@item v (@i{verbose}) +A level above @samp{basic}; includes messages about which makefiles were +parsed, prerequisites that did not need to be rebuilt, etc. This option +also enables @samp{basic} messages. + +@item i (@i{implicit}) +Prints messages describing the implicit rule searches for each target. +This option also enables @samp{basic} messages. + +@item j (@i{jobs}) +Prints messages giving details on the invocation of specific subcommands. + +@item m (@i{makefile}) +By default, the above messages are not enabled while trying to remake +the makefiles. This option enables messages while rebuilding makefiles, +too. Note that the @samp{all} option does enable this option. This +option also enables @samp{basic} messages. +@end table + +@item -e +@cindex @code{-e} +@itemx --environment-overrides +@cindex @code{--environment-overrides} +Give variables taken from the environment precedence +over variables from makefiles. +@xref{Environment, ,Variables from the Environment}. + +@item -f @var{file} +@cindex @code{-f} +@itemx --file=@var{file} +@cindex @code{--file} +@itemx --makefile=@var{file} +@cindex @code{--makefile} +Read the file named @var{file} as a makefile. +@xref{Makefiles, ,Writing Makefiles}. + +@item -h +@cindex @code{-h} +@itemx --help +@cindex @code{--help} +@c Extra blank line here makes the table look better. + +Remind you of the options that @code{make} understands and then exit. + +@item -i +@cindex @code{-i} +@itemx --ignore-errors +@cindex @code{--ignore-errors} +Ignore all errors in commands executed to remake files. +@xref{Errors, ,Errors in Commands}. + +@item -I @var{dir} +@cindex @code{-I} +@itemx --include-dir=@var{dir} +@cindex @code{--include-dir} +Specifies a directory @var{dir} to search for included makefiles. +@xref{Include, ,Including Other Makefiles}. If several @samp{-I} +options are used to specify several directories, the directories are +searched in the order specified. + +@item -j [@var{jobs}] +@cindex @code{-j} +@itemx --jobs[=@var{jobs}] +@cindex @code{--jobs} +Specifies the number of jobs (commands) to run simultaneously. With no +argument, @code{make} runs as many jobs simultaneously as possible. If +there is more than one @samp{-j} option, the last one is effective. +@xref{Parallel, ,Parallel Execution}, +for more information on how commands are run. +Note that this option is ignored on MS-DOS. + +@item -k +@cindex @code{-k} +@itemx --keep-going +@cindex @code{--keep-going} +Continue as much as possible after an error. While the target that +failed, and those that depend on it, cannot be remade, the other +prerequisites of these targets can be processed all the same. +@xref{Testing, ,Testing the Compilation of a Program}. + +@item -l [@var{load}] +@cindex @code{-l} +@itemx --load-average[=@var{load}] +@cindex @code{--load-average} +@itemx --max-load[=@var{load}] +@cindex @code{--max-load} +Specifies that no new jobs (commands) should be started if there are +other jobs running and the load average is at least @var{load} (a +floating-point number). With no argument, removes a previous load +limit. @xref{Parallel, ,Parallel Execution}. + +@item -n +@cindex @code{-n} +@itemx --just-print +@cindex @code{--just-print} +@itemx --dry-run +@cindex @code{--dry-run} +@itemx --recon +@cindex @code{--recon} +@c Extra blank line here makes the table look better. + +Print the commands that would be executed, but do not execute them. +@xref{Instead of Execution, ,Instead of Executing the Commands}. + +@item -o @var{file} +@cindex @code{-o} +@itemx --old-file=@var{file} +@cindex @code{--old-file} +@itemx --assume-old=@var{file} +@cindex @code{--assume-old} +Do not remake the file @var{file} even if it is older than its +prerequisites, and do not remake anything on account of changes in +@var{file}. Essentially the file is treated as very old and its rules +are ignored. @xref{Avoiding Compilation, ,Avoiding Recompilation of +Some Files}.@refill + +@item -p +@cindex @code{-p} +@itemx --print-data-base +@cindex @code{--print-data-base} +@cindex data base of @code{make} rules +@cindex predefined rules and variables, printing +Print the data base (rules and variable values) that results from +reading the makefiles; then execute as usual or as otherwise specified. +This also prints the version information given by the @samp{-v} switch +(see below). To print the data base without trying to remake any files, +use @w{@samp{make -qp}}. To print the data base of predefined rules and +variables, use @w{@samp{make -p -f /dev/null}}. The data base output +contains filename and linenumber information for command and variable +definitions, so it can be a useful debugging tool in complex environments. + +@item -q +@cindex @code{-q} +@itemx --question +@cindex @code{--question} +``Question mode''. Do not run any commands, or print anything; just +return an exit status that is zero if the specified targets are already +up to date, one if any remaking is required, or two if an error is +encountered. @xref{Instead of Execution, ,Instead of Executing the +Commands}.@refill + +@item -r +@cindex @code{-r} +@itemx --no-builtin-rules +@cindex @code{--no-builtin-rules} +Eliminate use of the built-in implicit rules (@pxref{Implicit Rules, +,Using Implicit Rules}). You can still define your own by writing +pattern rules (@pxref{Pattern Rules, ,Defining and Redefining Pattern +Rules}). The @samp{-r} option also clears out the default list of +suffixes for suffix rules (@pxref{Suffix Rules, ,Old-Fashioned Suffix +Rules}). But you can still define your own suffixes with a rule for +@code{.SUFFIXES}, and then define your own suffix rules. Note that only +@emph{rules} are affected by the @code{-r} option; default variables +remain in effect (@pxref{Implicit Variables, ,Variables Used by Implicit +Rules}); see the @samp{-R} option below. + +@item -R +@cindex @code{-R} +@itemx --no-builtin-variables +@cindex @code{--no-builtin-variables} +Eliminate use of the built-in rule-specific variables (@pxref{Implicit +Variables, ,Variables Used by Implicit Rules}). You can still define +your own, of course. The @samp{-R} option also automatically enables +the @samp{-r} option (see above), since it doesn't make sense to have +implicit rules without any definitions for the variables that they use. + +@item -s +@cindex @code{-s} +@itemx --silent +@cindex @code{--silent} +@itemx --quiet +@cindex @code{--quiet} +@c Extra blank line here makes the table look better. + +Silent operation; do not print the commands as they are executed. +@xref{Echoing, ,Command Echoing}. + +@item -S +@cindex @code{-S} +@itemx --no-keep-going +@cindex @code{--no-keep-going} +@itemx --stop +@cindex @code{--stop} +@c Extra blank line here makes the table look better. + +Cancel the effect of the @samp{-k} option. This is never necessary +except in a recursive @code{make} where @samp{-k} might be inherited +from the top-level @code{make} via @code{MAKEFLAGS} +(@pxref{Recursion, ,Recursive Use of @code{make}}) +or if you set @samp{-k} in @code{MAKEFLAGS} in your environment.@refill + +@item -t +@cindex @code{-t} +@itemx --touch +@cindex @code{--touch} +@c Extra blank line here makes the table look better. + +Touch files (mark them up to date without really changing them) +instead of running their commands. This is used to pretend that the +commands were done, in order to fool future invocations of +@code{make}. @xref{Instead of Execution, ,Instead of Executing the Commands}. + +@item -v +@cindex @code{-v} +@itemx --version +@cindex @code{--version} +Print the version of the @code{make} program plus a copyright, a list +of authors, and a notice that there is no warranty; then exit. + +@item -w +@cindex @code{-w} +@itemx --print-directory +@cindex @code{--print-directory} +Print a message containing the working directory both before and after +executing the makefile. This may be useful for tracking down errors +from complicated nests of recursive @code{make} commands. +@xref{Recursion, ,Recursive Use of @code{make}}. (In practice, you +rarely need to specify this option since @samp{make} does it for you; +see @ref{-w Option, ,The @samp{--print-directory} Option}.) + +@itemx --no-print-directory +@cindex @code{--no-print-directory} +Disable printing of the working directory under @code{-w}. +This option is useful when @code{-w} is turned on automatically, +but you do not want to see the extra messages. +@xref{-w Option, ,The @samp{--print-directory} Option}. + +@item -W @var{file} +@cindex @code{-W} +@itemx --what-if=@var{file} +@cindex @code{--what-if} +@itemx --new-file=@var{file} +@cindex @code{--new-file} +@itemx --assume-new=@var{file} +@cindex @code{--assume-new} +Pretend that the target @var{file} has just been modified. When used +with the @samp{-n} flag, this shows you what would happen if you were +to modify that file. Without @samp{-n}, it is almost the same as +running a @code{touch} command on the given file before running +@code{make}, except that the modification time is changed only in the +imagination of @code{make}. +@xref{Instead of Execution, ,Instead of Executing the Commands}. + +@item --warn-undefined-variables +@cindex @code{--warn-undefined-variables} +@cindex variables, warning for undefined +@cindex undefined variables, warning message +Issue a warning message whenever @code{make} sees a reference to an +undefined variable. This can be helpful when you are trying to debug +makefiles which use variables in complex ways. +@end table + +@node Implicit Rules, Archives, Running, Top +@chapter Using Implicit Rules +@cindex implicit rule +@cindex rule, implicit + +Certain standard ways of remaking target files are used very often. For +example, one customary way to make an object file is from a C source file +using the C compiler, @code{cc}. + +@dfn{Implicit rules} tell @code{make} how to use customary techniques so +that you do not have to specify them in detail when you want to use +them. For example, there is an implicit rule for C compilation. File +names determine which implicit rules are run. For example, C +compilation typically takes a @file{.c} file and makes a @file{.o} file. +So @code{make} applies the implicit rule for C compilation when it sees +this combination of file name endings.@refill + +A chain of implicit rules can apply in sequence; for example, @code{make} +will remake a @file{.o} file from a @file{.y} file by way of a @file{.c} file. +@iftex +@xref{Chained Rules, ,Chains of Implicit Rules}. +@end iftex + +The built-in implicit rules use several variables in their commands so +that, by changing the values of the variables, you can change the way the +implicit rule works. For example, the variable @code{CFLAGS} controls the +flags given to the C compiler by the implicit rule for C compilation. +@iftex +@xref{Implicit Variables, ,Variables Used by Implicit Rules}. +@end iftex + +You can define your own implicit rules by writing @dfn{pattern rules}. +@iftex +@xref{Pattern Rules, ,Defining and Redefining Pattern Rules}. +@end iftex + +@dfn{Suffix rules} are a more limited way to define implicit rules. +Pattern rules are more general and clearer, but suffix rules are +retained for compatibility. +@iftex +@xref{Suffix Rules, ,Old-Fashioned Suffix Rules}. +@end iftex + +@menu +* Using Implicit:: How to use an existing implicit rule + to get the commands for updating a file. +* Catalogue of Rules:: A list of built-in implicit rules. +* Implicit Variables:: How to change what predefined rules do. +* Chained Rules:: How to use a chain of implicit rules. +* Pattern Rules:: How to define new implicit rules. +* Last Resort:: How to defining commands for rules + which cannot find any. +* Suffix Rules:: The old-fashioned style of implicit rule. +* Implicit Rule Search:: The precise algorithm for applying + implicit rules. +@end menu + +@node Using Implicit, Catalogue of Rules, Implicit Rules, Implicit Rules +@section Using Implicit Rules +@cindex implicit rule, how to use +@cindex rule, implicit, how to use + +To allow @code{make} to find a customary method for updating a target file, +all you have to do is refrain from specifying commands yourself. Either +write a rule with no command lines, or don't write a rule at all. Then +@code{make} will figure out which implicit rule to use based on which +kind of source file exists or can be made. + +For example, suppose the makefile looks like this: + +@example +foo : foo.o bar.o + cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS) +@end example + +@noindent +Because you mention @file{foo.o} but do not give a rule for it, @code{make} +will automatically look for an implicit rule that tells how to update it. +This happens whether or not the file @file{foo.o} currently exists. + +If an implicit rule is found, it can supply both commands and one or +more prerequisites (the source files). You would want to write a rule +for @file{foo.o} with no command lines if you need to specify additional +prerequisites, such as header files, that the implicit rule cannot +supply. + +Each implicit rule has a target pattern and prerequisite patterns. There may +be many implicit rules with the same target pattern. For example, numerous +rules make @samp{.o} files: one, from a @samp{.c} file with the C compiler; +another, from a @samp{.p} file with the Pascal compiler; and so on. The rule +that actually applies is the one whose prerequisites exist or can be made. +So, if you have a file @file{foo.c}, @code{make} will run the C compiler; +otherwise, if you have a file @file{foo.p}, @code{make} will run the Pascal +compiler; and so on. + +Of course, when you write the makefile, you know which implicit rule you +want @code{make} to use, and you know it will choose that one because you +know which possible prerequisite files are supposed to exist. +@xref{Catalogue of Rules, ,Catalogue of Implicit Rules}, +for a catalogue of all the predefined implicit rules. + +Above, we said an implicit rule applies if the required prerequisites ``exist +or can be made''. A file ``can be made'' if it is mentioned explicitly in +the makefile as a target or a prerequisite, or if an implicit rule can be +recursively found for how to make it. When an implicit prerequisite is the +result of another implicit rule, we say that @dfn{chaining} is occurring. +@xref{Chained Rules, ,Chains of Implicit Rules}. + +In general, @code{make} searches for an implicit rule for each target, and +for each double-colon rule, that has no commands. A file that is mentioned +only as a prerequisite is considered a target whose rule specifies nothing, +so implicit rule search happens for it. @xref{Implicit Rule Search, ,Implicit Rule Search Algorithm}, for the +details of how the search is done. + +Note that explicit prerequisites do not influence implicit rule search. +For example, consider this explicit rule: + +@example +foo.o: foo.p +@end example + +@noindent +The prerequisite on @file{foo.p} does not necessarily mean that +@code{make} will remake @file{foo.o} according to the implicit rule to +make an object file, a @file{.o} file, from a Pascal source file, a +@file{.p} file. For example, if @file{foo.c} also exists, the implicit +rule to make an object file from a C source file is used instead, +because it appears before the Pascal rule in the list of predefined +implicit rules (@pxref{Catalogue of Rules, , Catalogue of Implicit +Rules}). + +If you do not want an implicit rule to be used for a target that has no +commands, you can give that target empty commands by writing a semicolon +(@pxref{Empty Commands, ,Defining Empty Commands}). + +@node Catalogue of Rules, Implicit Variables, Using Implicit, Implicit Rules +@section Catalogue of Implicit Rules +@cindex implicit rule, predefined +@cindex rule, implicit, predefined + +Here is a catalogue of predefined implicit rules which are always +available unless the makefile explicitly overrides or cancels them. +@xref{Canceling Rules, ,Canceling Implicit Rules}, for information on +canceling or overriding an implicit rule. The @samp{-r} or +@samp{--no-builtin-rules} option cancels all predefined rules. + +Not all of these rules will always be defined, even when the @samp{-r} +option is not given. Many of the predefined implicit rules are +implemented in @code{make} as suffix rules, so which ones will be +defined depends on the @dfn{suffix list} (the list of prerequisites of +the special target @code{.SUFFIXES}). The default suffix list is: +@code{.out}, @code{.a}, @code{.ln}, @code{.o}, @code{.c}, @code{.cc}, +@code{.C}, @code{.p}, @code{.f}, @code{.F}, @code{.r}, @code{.y}, +@code{.l}, @code{.s}, @code{.S}, @code{.mod}, @code{.sym}, @code{.def}, +@code{.h}, @code{.info}, @code{.dvi}, @code{.tex}, @code{.texinfo}, +@code{.texi}, @code{.txinfo}, @code{.w}, @code{.ch} @code{.web}, +@code{.sh}, @code{.elc}, @code{.el}. All of the implicit rules +described below whose prerequisites have one of these suffixes are +actually suffix rules. If you modify the suffix list, the only +predefined suffix rules in effect will be those named by one or two of +the suffixes that are on the list you specify; rules whose suffixes fail +to be on the list are disabled. @xref{Suffix Rules, ,Old-Fashioned +Suffix Rules}, for full details on suffix rules. + +@table @asis +@item Compiling C programs +@cindex C, rule to compile +@pindex cc +@pindex gcc +@pindex .o +@pindex .c +@file{@var{n}.o} is made automatically from @file{@var{n}.c} with +a command of the form @samp{$(CC) -c $(CPPFLAGS) $(CFLAGS)}.@refill + +@item Compiling C++ programs +@cindex C++, rule to compile +@pindex g++ +@pindex .C +@pindex .cc +@file{@var{n}.o} is made automatically from @file{@var{n}.cc} or +@file{@var{n}.C} with a command of the form @samp{$(CXX) -c $(CPPFLAGS) +$(CXXFLAGS)}. We encourage you to use the suffix @samp{.cc} for C++ +source files instead of @samp{.C}.@refill + +@item Compiling Pascal programs +@cindex Pascal, rule to compile +@pindex pc +@pindex .p +@file{@var{n}.o} is made automatically from @file{@var{n}.p} +with the command @samp{$(PC) -c $(PFLAGS)}.@refill + +@item Compiling Fortran and Ratfor programs +@cindex Fortran, rule to compile +@cindex Ratfor, rule to compile +@pindex f77 +@pindex .f +@pindex .r +@pindex .F +@file{@var{n}.o} is made automatically from @file{@var{n}.r}, +@file{@var{n}.F} or @file{@var{n}.f} by running the +Fortran compiler. The precise command used is as follows:@refill + +@table @samp +@item .f +@samp{$(FC) -c $(FFLAGS)}. +@item .F +@samp{$(FC) -c $(FFLAGS) $(CPPFLAGS)}. +@item .r +@samp{$(FC) -c $(FFLAGS) $(RFLAGS)}. +@end table + +@item Preprocessing Fortran and Ratfor programs +@file{@var{n}.f} is made automatically from @file{@var{n}.r} or +@file{@var{n}.F}. This rule runs just the preprocessor to convert a +Ratfor or preprocessable Fortran program into a strict Fortran +program. The precise command used is as follows:@refill + +@table @samp +@item .F +@samp{$(FC) -F $(CPPFLAGS) $(FFLAGS)}. +@item .r +@samp{$(FC) -F $(FFLAGS) $(RFLAGS)}. +@end table + +@item Compiling Modula-2 programs +@cindex Modula-2, rule to compile +@pindex m2c +@pindex .sym +@pindex .def +@pindex .mod +@file{@var{n}.sym} is made from @file{@var{n}.def} with a command +of the form @samp{$(M2C) $(M2FLAGS) $(DEFFLAGS)}. @file{@var{n}.o} +is made from @file{@var{n}.mod}; the form is: +@w{@samp{$(M2C) $(M2FLAGS) $(MODFLAGS)}}.@refill + +@need 1200 +@item Assembling and preprocessing assembler programs +@cindex assembly, rule to compile +@pindex as +@pindex .s +@file{@var{n}.o} is made automatically from @file{@var{n}.s} by +running the assembler, @code{as}. The precise command is +@samp{$(AS) $(ASFLAGS)}.@refill + +@pindex .S +@file{@var{n}.s} is made automatically from @file{@var{n}.S} by +running the C preprocessor, @code{cpp}. The precise command is +@w{@samp{$(CPP) $(CPPFLAGS)}}. + +@item Linking a single object file +@cindex linking, predefined rule for +@pindex ld +@pindex .o +@file{@var{n}} is made automatically from @file{@var{n}.o} by running +the linker (usually called @code{ld}) via the C compiler. The precise +command used is @w{@samp{$(CC) $(LDFLAGS) @var{n}.o $(LOADLIBES) $(LDLIBS)}}. + +This rule does the right thing for a simple program with only one +source file. It will also do the right thing if there are multiple +object files (presumably coming from various other source files), one +of which has a name matching that of the executable file. Thus, + +@example +x: y.o z.o +@end example + +@noindent +when @file{x.c}, @file{y.c} and @file{z.c} all exist will execute: + +@example +@group +cc -c x.c -o x.o +cc -c y.c -o y.o +cc -c z.c -o z.o +cc x.o y.o z.o -o x +rm -f x.o +rm -f y.o +rm -f z.o +@end group +@end example + +@noindent +In more complicated cases, such as when there is no object file whose +name derives from the executable file name, you must write an explicit +command for linking. + +Each kind of file automatically made into @samp{.o} object files will +be automatically linked by using the compiler (@samp{$(CC)}, +@samp{$(FC)} or @samp{$(PC)}; the C compiler @samp{$(CC)} is used to +assemble @samp{.s} files) without the @samp{-c} option. This could be +done by using the @samp{.o} object files as intermediates, but it is +faster to do the compiling and linking in one step, so that's how it's +done.@refill + +@item Yacc for C programs +@pindex yacc +@cindex Yacc, rule to run +@pindex .y +@file{@var{n}.c} is made automatically from @file{@var{n}.y} by +running Yacc with the command @samp{$(YACC) $(YFLAGS)}. + +@item Lex for C programs +@pindex lex +@cindex Lex, rule to run +@pindex .l +@file{@var{n}.c} is made automatically from @file{@var{n}.l} by +running Lex. The actual command is @samp{$(LEX) $(LFLAGS)}. + +@item Lex for Ratfor programs +@file{@var{n}.r} is made automatically from @file{@var{n}.l} by +running Lex. The actual command is @samp{$(LEX) $(LFLAGS)}. + +The convention of using the same suffix @samp{.l} for all Lex files +regardless of whether they produce C code or Ratfor code makes it +impossible for @code{make} to determine automatically which of the two +languages you are using in any particular case. If @code{make} is +called upon to remake an object file from a @samp{.l} file, it must +guess which compiler to use. It will guess the C compiler, because +that is more common. If you are using Ratfor, make sure @code{make} +knows this by mentioning @file{@var{n}.r} in the makefile. Or, if you +are using Ratfor exclusively, with no C files, remove @samp{.c} from +the list of implicit rule suffixes with:@refill + +@example +@group +.SUFFIXES: +.SUFFIXES: .o .r .f .l @dots{} +@end group +@end example + +@item Making Lint Libraries from C, Yacc, or Lex programs +@pindex lint +@cindex @code{lint}, rule to run +@pindex .ln +@file{@var{n}.ln} is made from @file{@var{n}.c} by running @code{lint}. +The precise command is @w{@samp{$(LINT) $(LINTFLAGS) $(CPPFLAGS) -i}}. +The same command is used on the C code produced from +@file{@var{n}.y} or @file{@var{n}.l}.@refill + +@item @TeX{} and Web +@cindex @TeX{}, rule to run +@cindex Web, rule to run +@pindex tex +@pindex cweave +@pindex weave +@pindex tangle +@pindex ctangle +@pindex .dvi +@pindex .tex +@pindex .web +@pindex .w +@pindex .ch +@file{@var{n}.dvi} is made from @file{@var{n}.tex} with the command +@samp{$(TEX)}. @file{@var{n}.tex} is made from @file{@var{n}.web} with +@samp{$(WEAVE)}, or from @file{@var{n}.w} (and from @file{@var{n}.ch} if +it exists or can be made) with @samp{$(CWEAVE)}. @file{@var{n}.p} is +made from @file{@var{n}.web} with @samp{$(TANGLE)} and @file{@var{n}.c} +is made from @file{@var{n}.w} (and from @file{@var{n}.ch} if it exists +or can be made) with @samp{$(CTANGLE)}.@refill + +@item Texinfo and Info +@cindex Texinfo, rule to format +@cindex Info, rule to format +@pindex texi2dvi +@pindex makeinfo +@pindex .texinfo +@pindex .info +@pindex .texi +@pindex .txinfo +@file{@var{n}.dvi} is made from @file{@var{n}.texinfo}, +@file{@var{n}.texi}, or @file{@var{n}.txinfo}, with the command +@w{@samp{$(TEXI2DVI) $(TEXI2DVI_FLAGS)}}. @file{@var{n}.info} is made from +@file{@var{n}.texinfo}, @file{@var{n}.texi}, or @file{@var{n}.txinfo}, with +the command @w{@samp{$(MAKEINFO) $(MAKEINFO_FLAGS)}}. + +@item RCS +@cindex RCS, rule to extract from +@pindex co +@pindex ,v @r{(RCS file extension)} +Any file @file{@var{n}} is extracted if necessary from an RCS file +named either @file{@var{n},v} or @file{RCS/@var{n},v}. The precise +command used is @w{@samp{$(CO) $(COFLAGS)}}. @file{@var{n}} will not be +extracted from RCS if it already exists, even if the RCS file is +newer. The rules for RCS are terminal +(@pxref{Match-Anything Rules, ,Match-Anything Pattern Rules}), +so RCS files cannot be generated from another source; they must +actually exist.@refill + +@item SCCS +@cindex SCCS, rule to extract from +@pindex get +@pindex s. @r{(SCCS file prefix)} +Any file @file{@var{n}} is extracted if necessary from an SCCS file +named either @file{s.@var{n}} or @file{SCCS/s.@var{n}}. The precise +command used is @w{@samp{$(GET) $(GFLAGS)}}. The rules for SCCS are +terminal (@pxref{Match-Anything Rules, ,Match-Anything Pattern Rules}), +so SCCS files cannot be generated from another source; they must +actually exist.@refill + +@pindex .sh +For the benefit of SCCS, a file @file{@var{n}} is copied from +@file{@var{n}.sh} and made executable (by everyone). This is for +shell scripts that are checked into SCCS. Since RCS preserves the +execution permission of a file, you do not need to use this feature +with RCS.@refill + +We recommend that you avoid using of SCCS. RCS is widely held to be +superior, and is also free. By choosing free software in place of +comparable (or inferior) proprietary software, you support the free +software movement. +@end table + +Usually, you want to change only the variables listed in the table +above, which are documented in the following section. + +However, the commands in built-in implicit rules actually use +variables such as @code{COMPILE.c}, @code{LINK.p}, and +@code{PREPROCESS.S}, whose values contain the commands listed above. + +@code{make} follows the convention that the rule to compile a +@file{.@var{x}} source file uses the variable @code{COMPILE.@var{x}}. +Similarly, the rule to produce an executable from a @file{.@var{x}} +file uses @code{LINK.@var{x}}; and the rule to preprocess a +@file{.@var{x}} file uses @code{PREPROCESS.@var{x}}. + +@vindex OUTPUT_OPTION +Every rule that produces an object file uses the variable +@code{OUTPUT_OPTION}. @code{make} defines this variable either to +contain @samp{-o $@@}, or to be empty, depending on a compile-time +option. You need the @samp{-o} option to ensure that the output goes +into the right file when the source file is in a different directory, +as when using @code{VPATH} (@pxref{Directory Search}). However, +compilers on some systems do not accept a @samp{-o} switch for object +files. If you use such a system, and use @code{VPATH}, some +compilations will put their output in the wrong place. +A possible workaround for this problem is to give @code{OUTPUT_OPTION} +the value @w{@samp{; mv $*.o $@@}}. + +@node Implicit Variables, Chained Rules, Catalogue of Rules, Implicit Rules +@section Variables Used by Implicit Rules +@cindex flags for compilers + +The commands in built-in implicit rules make liberal use of certain +predefined variables. You can alter these variables in the makefile, +with arguments to @code{make}, or in the environment to alter how the +implicit rules work without redefining the rules themselves. You can +cancel all variables used by implicit rules with the @samp{-R} or +@samp{--no-builtin-variables} option. + +For example, the command used to compile a C source file actually says +@samp{$(CC) -c $(CFLAGS) $(CPPFLAGS)}. The default values of the variables +used are @samp{cc} and nothing, resulting in the command @samp{cc -c}. By +redefining @samp{CC} to @samp{ncc}, you could cause @samp{ncc} to be +used for all C compilations performed by the implicit rule. By redefining +@samp{CFLAGS} to be @samp{-g}, you could pass the @samp{-g} option to +each compilation. @emph{All} implicit rules that do C compilation use +@samp{$(CC)} to get the program name for the compiler and @emph{all} +include @samp{$(CFLAGS)} among the arguments given to the compiler.@refill + +The variables used in implicit rules fall into two classes: those that are +names of programs (like @code{CC}) and those that contain arguments for the +programs (like @code{CFLAGS}). (The ``name of a program'' may also contain +some command arguments, but it must start with an actual executable program +name.) If a variable value contains more than one argument, separate them +with spaces. + +Here is a table of variables used as names of programs in built-in rules: + +@table @code +@item AR +@vindex AR +Archive-maintaining program; default @samp{ar}. +@pindex ar + +@item AS +@vindex AS +Program for doing assembly; default @samp{as}. +@pindex as + +@item CC +@vindex CC +Program for compiling C programs; default @samp{cc}. +@pindex cc + +@item CXX +@vindex CXX +Program for compiling C++ programs; default @samp{g++}. +@pindex g++ + +@item CO +@vindex CO +Program for extracting a file from RCS; default @samp{co}. +@pindex co + +@item CPP +@vindex CPP +Program for running the C preprocessor, with results to standard output; +default @samp{$(CC) -E}. + +@item FC +@vindex FC +Program for compiling or preprocessing Fortran and Ratfor programs; +default @samp{f77}. +@pindex f77 + +@item GET +@vindex GET +Program for extracting a file from SCCS; default @samp{get}. +@pindex get + +@item LEX +@vindex LEX +Program to use to turn Lex grammars into C programs or Ratfor programs; +default @samp{lex}. +@pindex lex + +@item PC +@vindex PC +Program for compiling Pascal programs; default @samp{pc}. +@pindex pc + +@item YACC +@vindex YACC +Program to use to turn Yacc grammars into C programs; default @samp{yacc}. +@pindex yacc + +@item YACCR +@vindex YACCR +Program to use to turn Yacc grammars into Ratfor +programs; default @samp{yacc -r}. + +@item MAKEINFO +@vindex MAKEINFO +Program to convert a Texinfo source file into an Info file; default +@samp{makeinfo}. +@pindex makeinfo + +@item TEX +@vindex TEX +Program to make @TeX{} @sc{dvi} files from @TeX{} source; +default @samp{tex}. +@pindex tex + +@item TEXI2DVI +@vindex TEXI2DVI +Program to make @TeX{} @sc{dvi} files from Texinfo source; +default @samp{texi2dvi}. +@pindex texi2dvi + +@item WEAVE +@vindex WEAVE +Program to translate Web into @TeX{}; default @samp{weave}. +@pindex weave + +@item CWEAVE +@vindex CWEAVE +Program to translate C Web into @TeX{}; default @samp{cweave}. +@pindex cweave + +@item TANGLE +@vindex TANGLE +Program to translate Web into Pascal; default @samp{tangle}. +@pindex tangle + +@item CTANGLE +@vindex CTANGLE +Program to translate C Web into C; default @samp{ctangle}. +@pindex ctangle + +@item RM +@vindex RM +Command to remove a file; default @samp{rm -f}. +@pindex rm +@end table + +Here is a table of variables whose values are additional arguments for the +programs above. The default values for all of these is the empty +string, unless otherwise noted. + +@table @code +@item ARFLAGS +@vindex ARFLAGS +Flags to give the archive-maintaining program; default @samp{rv}. + +@item ASFLAGS +@vindex ASFLAGS +Extra flags to give to the assembler (when explicitly +invoked on a @samp{.s} or @samp{.S} file). + +@item CFLAGS +@vindex CFLAGS +Extra flags to give to the C compiler. + +@item CXXFLAGS +@vindex CXXFLAGS +Extra flags to give to the C++ compiler. + +@item COFLAGS +@vindex COFLAGS +Extra flags to give to the RCS @code{co} program. + +@item CPPFLAGS +@vindex CPPFLAGS +Extra flags to give to the C preprocessor and programs +that use it (the C and Fortran compilers). + +@item FFLAGS +@vindex FFLAGS +Extra flags to give to the Fortran compiler. + +@item GFLAGS +@vindex GFLAGS +Extra flags to give to the SCCS @code{get} program. + +@item LDFLAGS +@vindex LDFLAGS +Extra flags to give to compilers when they are +supposed to invoke the linker, @samp{ld}. + +@item LFLAGS +@vindex LFLAGS +Extra flags to give to Lex. + +@item PFLAGS +@vindex PFLAGS +Extra flags to give to the Pascal compiler. + +@item RFLAGS +@vindex RFLAGS +Extra flags to give to the Fortran compiler for Ratfor programs. + +@item YFLAGS +@vindex YFLAGS +Extra flags to give to Yacc. +@end table + +@node Chained Rules, Pattern Rules, Implicit Variables, Implicit Rules +@section Chains of Implicit Rules + +@cindex chains of rules +@cindex rule, implicit, chains of +Sometimes a file can be made by a sequence of implicit rules. For example, +a file @file{@var{n}.o} could be made from @file{@var{n}.y} by running +first Yacc and then @code{cc}. Such a sequence is called a @dfn{chain}. + +If the file @file{@var{n}.c} exists, or is mentioned in the makefile, no +special searching is required: @code{make} finds that the object file can +be made by C compilation from @file{@var{n}.c}; later on, when considering +how to make @file{@var{n}.c}, the rule for running Yacc is +used. Ultimately both @file{@var{n}.c} and @file{@var{n}.o} are +updated.@refill + +@cindex intermediate files +@cindex files, intermediate +However, even if @file{@var{n}.c} does not exist and is not mentioned, +@code{make} knows how to envision it as the missing link between +@file{@var{n}.o} and @file{@var{n}.y}! In this case, @file{@var{n}.c} is +called an @dfn{intermediate file}. Once @code{make} has decided to use the +intermediate file, it is entered in the data base as if it had been +mentioned in the makefile, along with the implicit rule that says how to +create it.@refill + +Intermediate files are remade using their rules just like all other +files. But intermediate files are treated differently in two ways. + +The first difference is what happens if the intermediate file does not +exist. If an ordinary file @var{b} does not exist, and @code{make} +considers a target that depends on @var{b}, it invariably creates +@var{b} and then updates the target from @var{b}. But if @var{b} is an +intermediate file, then @code{make} can leave well enough alone. It +won't bother updating @var{b}, or the ultimate target, unless some +prerequisite of @var{b} is newer than that target or there is some other +reason to update that target. + +The second difference is that if @code{make} @emph{does} create @var{b} +in order to update something else, it deletes @var{b} later on after it +is no longer needed. Therefore, an intermediate file which did not +exist before @code{make} also does not exist after @code{make}. +@code{make} reports the deletion to you by printing a @samp{rm -f} +command showing which file it is deleting. + +Ordinarily, a file cannot be intermediate if it is mentioned in the +makefile as a target or prerequisite. However, you can explicitly mark a +file as intermediate by listing it as a prerequisite of the special target +@code{.INTERMEDIATE}. This takes effect even if the file is mentioned +explicitly in some other way. + +@cindex intermediate files, preserving +@cindex preserving intermediate files +@cindex secondary files +You can prevent automatic deletion of an intermediate file by marking it +as a @dfn{secondary} file. To do this, list it as a prerequisite of the +special target @code{.SECONDARY}. When a file is secondary, @code{make} +will not create the file merely because it does not already exist, but +@code{make} does not automatically delete the file. Marking a file as +secondary also marks it as intermediate. + +You can list the target pattern of an implicit rule (such as @samp{%.o}) +as a prerequisite of the special target @code{.PRECIOUS} to preserve +intermediate files made by implicit rules whose target patterns match +that file's name; see @ref{Interrupts}.@refill +@cindex preserving with @code{.PRECIOUS} +@cindex @code{.PRECIOUS} intermediate files + +A chain can involve more than two implicit rules. For example, it is +possible to make a file @file{foo} from @file{RCS/foo.y,v} by running RCS, +Yacc and @code{cc}. Then both @file{foo.y} and @file{foo.c} are +intermediate files that are deleted at the end.@refill + +No single implicit rule can appear more than once in a chain. This means +that @code{make} will not even consider such a ridiculous thing as making +@file{foo} from @file{foo.o.o} by running the linker twice. This +constraint has the added benefit of preventing any infinite loop in the +search for an implicit rule chain. + +There are some special implicit rules to optimize certain cases that would +otherwise be handled by rule chains. For example, making @file{foo} from +@file{foo.c} could be handled by compiling and linking with separate +chained rules, using @file{foo.o} as an intermediate file. But what +actually happens is that a special rule for this case does the compilation +and linking with a single @code{cc} command. The optimized rule is used in +preference to the step-by-step chain because it comes earlier in the +ordering of rules. + +@node Pattern Rules, Last Resort, Chained Rules, Implicit Rules +@section Defining and Redefining Pattern Rules + +You define an implicit rule by writing a @dfn{pattern rule}. A pattern +rule looks like an ordinary rule, except that its target contains the +character @samp{%} (exactly one of them). The target is considered a +pattern for matching file names; the @samp{%} can match any nonempty +substring, while other characters match only themselves. The prerequisites +likewise use @samp{%} to show how their names relate to the target name. + +Thus, a pattern rule @samp{%.o : %.c} says how to make any file +@file{@var{stem}.o} from another file @file{@var{stem}.c}.@refill + +Note that expansion using @samp{%} in pattern rules occurs +@strong{after} any variable or function expansions, which take place +when the makefile is read. @xref{Using Variables, , How to Use +Variables}, and @ref{Functions, ,Functions for Transforming Text}. + +@menu +* Pattern Intro:: An introduction to pattern rules. +* Pattern Examples:: Examples of pattern rules. +* Automatic Variables:: How to use automatic variables in the + commands of implicit rules. +* Pattern Match:: How patterns match. +* Match-Anything Rules:: Precautions you should take prior to + defining rules that can match any + target file whatever. +* Canceling Rules:: How to override or cancel built-in rules. +@end menu + +@node Pattern Intro, Pattern Examples, Pattern Rules, Pattern Rules +@subsection Introduction to Pattern Rules +@cindex pattern rule +@cindex rule, pattern + +A pattern rule contains the character @samp{%} (exactly one of them) +in the target; otherwise, it looks exactly like an ordinary rule. The +target is a pattern for matching file names; the @samp{%} matches any +nonempty substring, while other characters match only themselves. +@cindex target pattern, implicit +@cindex @code{%}, in pattern rules + +For example, @samp{%.c} as a pattern matches any file name that ends in +@samp{.c}. @samp{s.%.c} as a pattern matches any file name that starts +with @samp{s.}, ends in @samp{.c} and is at least five characters long. +(There must be at least one character to match the @samp{%}.) The substring +that the @samp{%} matches is called the @dfn{stem}.@refill + +@samp{%} in a prerequisite of a pattern rule stands for the same stem +that was matched by the @samp{%} in the target. In order for +the pattern rule to apply, its target pattern must match the file name +under consideration, and its prerequisite patterns must name files that +exist or can be made. These files become prerequisites of the target. +@cindex prerequisite pattern, implicit + +Thus, a rule of the form + +@example +%.o : %.c ; @var{command}@dots{} +@end example + +@noindent +specifies how to make a file @file{@var{n}.o}, with another file +@file{@var{n}.c} as its prerequisite, provided that @file{@var{n}.c} +exists or can be made. + +There may also be prerequisites that do not use @samp{%}; such a prerequisite +attaches to every file made by this pattern rule. These unvarying +prerequisites are useful occasionally. + +A pattern rule need not have any prerequisites that contain @samp{%}, or +in fact any prerequisites at all. Such a rule is effectively a general +wildcard. It provides a way to make any file that matches the target +pattern. @xref{Last Resort}. + +@c !!! The end of of this paragraph should be rewritten. --bob +Pattern rules may have more than one target. Unlike normal rules, this +does not act as many different rules with the same prerequisites and +commands. If a pattern rule has multiple targets, @code{make} knows that +the rule's commands are responsible for making all of the targets. The +commands are executed only once to make all the targets. When searching +for a pattern rule to match a target, the target patterns of a rule other +than the one that matches the target in need of a rule are incidental: +@code{make} worries only about giving commands and prerequisites to the file +presently in question. However, when this file's commands are run, the +other targets are marked as having been updated themselves. +@cindex multiple targets, in pattern rule +@cindex target, multiple in pattern rule + +The order in which pattern rules appear in the makefile is important +since this is the order in which they are considered. +Of equally applicable +rules, only the first one found is used. The rules you write take precedence +over those that are built in. Note however, that a rule whose +prerequisites actually exist or are mentioned always takes priority over a +rule with prerequisites that must be made by chaining other implicit rules. +@cindex pattern rules, order of +@cindex order of pattern rules + +@node Pattern Examples, Automatic Variables, Pattern Intro, Pattern Rules +@subsection Pattern Rule Examples + +Here are some examples of pattern rules actually predefined in +@code{make}. First, the rule that compiles @samp{.c} files into @samp{.o} +files:@refill + +@example +%.o : %.c + $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@@ +@end example + +@noindent +defines a rule that can make any file @file{@var{x}.o} from +@file{@var{x}.c}. The command uses the automatic variables @samp{$@@} and +@samp{$<} to substitute the names of the target file and the source file +in each case where the rule applies (@pxref{Automatic Variables}).@refill + +Here is a second built-in rule: + +@example +% :: RCS/%,v + $(CO) $(COFLAGS) $< +@end example + +@noindent +defines a rule that can make any file @file{@var{x}} whatsoever from a +corresponding file @file{@var{x},v} in the subdirectory @file{RCS}. Since +the target is @samp{%}, this rule will apply to any file whatever, provided +the appropriate prerequisite file exists. The double colon makes the rule +@dfn{terminal}, which means that its prerequisite may not be an intermediate +file (@pxref{Match-Anything Rules, ,Match-Anything Pattern Rules}).@refill + +@need 500 +This pattern rule has two targets: + +@example +@group +%.tab.c %.tab.h: %.y + bison -d $< +@end group +@end example + +@noindent +@c The following paragraph is rewritten to avoid overfull hboxes +This tells @code{make} that the command @samp{bison -d @var{x}.y} will +make both @file{@var{x}.tab.c} and @file{@var{x}.tab.h}. If the file +@file{foo} depends on the files @file{parse.tab.o} and @file{scan.o} +and the file @file{scan.o} depends on the file @file{parse.tab.h}, +when @file{parse.y} is changed, the command @samp{bison -d parse.y} +will be executed only once, and the prerequisites of both +@file{parse.tab.o} and @file{scan.o} will be satisfied. (Presumably +the file @file{parse.tab.o} will be recompiled from @file{parse.tab.c} +and the file @file{scan.o} from @file{scan.c}, while @file{foo} is +linked from @file{parse.tab.o}, @file{scan.o}, and its other +prerequisites, and it will execute happily ever after.)@refill + +@node Automatic Variables, Pattern Match, Pattern Examples, Pattern Rules +@subsection Automatic Variables +@cindex automatic variables +@cindex variables, automatic +@cindex variables, and implicit rule + +Suppose you are writing a pattern rule to compile a @samp{.c} file into a +@samp{.o} file: how do you write the @samp{cc} command so that it operates +on the right source file name? You cannot write the name in the command, +because the name is different each time the implicit rule is applied. + +What you do is use a special feature of @code{make}, the @dfn{automatic +variables}. These variables have values computed afresh for each rule that +is executed, based on the target and prerequisites of the rule. In this +example, you would use @samp{$@@} for the object file name and @samp{$<} +for the source file name. + +@cindex automatic variables in prerequisites +@cindex prerequisites, and automatic variables +It's very important that you recognize the limited scope in which +automatic variable values are available: they only have values within +the command script. In particular, you cannot use them anywhere +within the target or prerequisite lists of a rule; they have no value +there and will expand to the empty string. A common mistake is +attempting to use @code{$@@} within the prerequisites list in a rule; +this will not work. However, see below for information on the +SysV-style @code{$$@@} variables. + +Here is a table of automatic variables: + +@table @code +@vindex $@@ +@vindex @@ @r{(automatic variable)} +@item $@@ +The file name of the target of the rule. If the target is an archive +member, then @samp{$@@} is the name of the archive file. In a pattern +rule that has multiple targets (@pxref{Pattern Intro, ,Introduction to +Pattern Rules}), @samp{$@@} is the name of whichever target caused the +rule's commands to be run. + +@vindex $% +@vindex % @r{(automatic variable)} +@item $% +The target member name, when the target is an archive member. +@xref{Archives}. For example, if the target is @file{foo.a(bar.o)} then +@samp{$%} is @file{bar.o} and @samp{$@@} is @file{foo.a}. @samp{$%} is +empty when the target is not an archive member. + +@vindex $< +@vindex < @r{(automatic variable)} +@item $< +The name of the first prerequisite. If the target got its commands from +an implicit rule, this will be the first prerequisite added by the +implicit rule (@pxref{Implicit Rules}). + +@vindex $? +@vindex ? @r{(automatic variable)} +@item $? +The names of all the prerequisites that are newer than the target, with +spaces between them. For prerequisites which are archive members, only +the member named is used (@pxref{Archives}). +@cindex prerequisites, list of changed +@cindex list of changed prerequisites + +@vindex $^ +@vindex ^ @r{(automatic variable)} +@item $^ +The names of all the prerequisites, with spaces between them. For +prerequisites which are archive members, only the member named is used +(@pxref{Archives}). A target has only one prerequisite on each other file +it depends on, no matter how many times each file is listed as a +prerequisite. So if you list a prerequisite more than once for a target, +the value of @code{$^} contains just one copy of the name. +@cindex prerequisites, list of all +@cindex list of all prerequisites + +@vindex $+ +@vindex + @r{(automatic variable)} +@item $+ +This is like @samp{$^}, but prerequisites listed more than once are +duplicated in the order they were listed in the makefile. This is +primarily useful for use in linking commands where it is meaningful to +repeat library file names in a particular order. + +@vindex $* +@vindex * @r{(automatic variable)} +@item $* +The stem with which an implicit rule matches (@pxref{Pattern Match, ,How +Patterns Match}). If the target is @file{dir/a.foo.b} and the target +pattern is @file{a.%.b} then the stem is @file{dir/foo}. The stem is +useful for constructing names of related files.@refill +@cindex stem, variable for + +In a static pattern rule, the stem is part of the file name that matched +the @samp{%} in the target pattern. + +In an explicit rule, there is no stem; so @samp{$*} cannot be determined +in that way. Instead, if the target name ends with a recognized suffix +(@pxref{Suffix Rules, ,Old-Fashioned Suffix Rules}), @samp{$*} is set to +the target name minus the suffix. For example, if the target name is +@samp{foo.c}, then @samp{$*} is set to @samp{foo}, since @samp{.c} is a +suffix. GNU @code{make} does this bizarre thing only for compatibility +with other implementations of @code{make}. You should generally avoid +using @samp{$*} except in implicit rules or static pattern rules.@refill + +If the target name in an explicit rule does not end with a recognized +suffix, @samp{$*} is set to the empty string for that rule. +@end table + +@samp{$?} is useful even in explicit rules when you wish to operate on only +the prerequisites that have changed. For example, suppose that an archive +named @file{lib} is supposed to contain copies of several object files. +This rule copies just the changed object files into the archive: + +@example +@group +lib: foo.o bar.o lose.o win.o + ar r lib $? +@end group +@end example + +Of the variables listed above, four have values that are single file +names, and three have values that are lists of file names. These seven +have variants that get just the file's directory name or just the file +name within the directory. The variant variables' names are formed by +appending @samp{D} or @samp{F}, respectively. These variants are +semi-obsolete in GNU @code{make} since the functions @code{dir} and +@code{notdir} can be used to get a similar effect (@pxref{File Name +Functions, , Functions for File Names}). Note, however, that the +@samp{D} variants all omit the trailing slash which always appears in +the output of the @code{dir} function. Here is a table of the variants: + +@table @samp +@vindex $(@@D) +@vindex @@D @r{(automatic variable)} +@item $(@@D) +The directory part of the file name of the target, with the trailing +slash removed. If the value of @samp{$@@} is @file{dir/foo.o} then +@samp{$(@@D)} is @file{dir}. This value is @file{.} if @samp{$@@} does +not contain a slash. + +@vindex $(@@F) +@vindex @@F @r{(automatic variable)} +@item $(@@F) +The file-within-directory part of the file name of the target. If the +value of @samp{$@@} is @file{dir/foo.o} then @samp{$(@@F)} is +@file{foo.o}. @samp{$(@@F)} is equivalent to @samp{$(notdir $@@)}. + +@vindex $(*D) +@vindex *D @r{(automatic variable)} +@item $(*D) +@vindex $(*F) +@vindex *F @r{(automatic variable)} +@itemx $(*F) +The directory part and the file-within-directory +part of the stem; @file{dir} and @file{foo} in this example. + +@vindex $(%D) +@vindex %D @r{(automatic variable)} +@item $(%D) +@vindex $(%F) +@vindex %F @r{(automatic variable)} +@itemx $(%F) +The directory part and the file-within-directory part of the target +archive member name. This makes sense only for archive member targets +of the form @file{@var{archive}(@var{member})} and is useful only when +@var{member} may contain a directory name. (@xref{Archive Members, +,Archive Members as Targets}.) + +@vindex $( tar-`sed -e '/version_string/!d' \ + -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \ + -e q + version.c`.shar.Z +@end group + +@group +dist: $(SRCS) $(AUX) + echo tar-`sed \ + -e '/version_string/!d' \ + -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \ + -e q + version.c` > .fname + -rm -rf `cat .fname` + mkdir `cat .fname` + ln $(SRCS) $(AUX) `cat .fname` + tar chZf `cat .fname`.tar.Z `cat .fname` + -rm -rf `cat .fname` .fname +@end group + +@group +tar.zoo: $(SRCS) $(AUX) + -rm -rf tmp.dir + -mkdir tmp.dir + -rm tar.zoo + for X in $(SRCS) $(AUX) ; do \ + echo $$X ; \ + sed 's/$$/^M/' $$X \ + > tmp.dir/$$X ; done + cd tmp.dir ; zoo aM ../tar.zoo * + -rm -rf tmp.dir +@end group +@end example + +@raisesections +@include fdl.texi +@lowersections + +@node Concept Index, Name Index, GNU Free Documentation License, Top +@unnumbered Index of Concepts + +@printindex cp + +@node Name Index, , Concept Index, Top +@unnumbered Index of Functions, Variables, & Directives + +@printindex fn + +@summarycontents +@contents +@bye diff --git a/src/mkutil/make/dosbuild.bat b/src/mkutil/make/dosbuild.bat new file mode 100644 index 00000000..ac1e6cd6 --- /dev/null +++ b/src/mkutil/make/dosbuild.bat @@ -0,0 +1,42 @@ +@echo Building Make for MSDOS +@rem Echo ON so they will see what is going on. +@echo on +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g commands.c -o commands.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g job.c -o job.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g dir.c -o dir.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g file.c -o file.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g misc.c -o misc.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g main.c -o main.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -DINCLUDEDIR=\"c:/djgpp/include\" -O2 -g read.c -o read.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -DLIBDIR=\"c:/djgpp/lib\" -O2 -g remake.c -o remake.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g rule.c -o rule.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g implicit.c -o implicit.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g default.c -o default.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g variable.c -o variable.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g expand.c -o expand.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g function.c -o function.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g vpath.c -o vpath.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g version.c -o version.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g ar.c -o ar.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g arscan.c -o arscan.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g signame.c -o signame.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g remote-stub.c -o remote-stub.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g getopt.c -o getopt.o +gcc -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g getopt1.c -o getopt1.o +@cd glob +@if exist libglob.a del libglob.a +gcc -I. -c -DHAVE_CONFIG_H -I.. -O2 -g glob.c -o glob.o +gcc -I. -c -DHAVE_CONFIG_H -I.. -O2 -g fnmatch.c -o fnmatch.o +ar rv libglob.a glob.o fnmatch.o +@echo off +cd .. +echo commands.o > respf.$$$ +for %%f in (job dir file misc main read remake rule implicit default variable) do echo %%f.o >> respf.$$$ +for %%f in (expand function vpath version ar arscan signame remote-stub getopt getopt1) do echo %%f.o >> respf.$$$ +echo glob/libglob.a >> respf.$$$ +@echo Linking... +@echo on +gcc -o make.new @respf.$$$ +@if exist make.exe echo Make.exe is now built! +@if not exist make.exe echo Make.exe build failed... +@if exist make.exe del respf.$$$ diff --git a/src/mkutil/make/expand.c b/src/mkutil/make/expand.c new file mode 100644 index 00000000..b2161156 --- /dev/null +++ b/src/mkutil/make/expand.c @@ -0,0 +1,570 @@ +/* Variable expansion functions for GNU Make. +Copyright (C) 1988, 89, 91, 92, 93, 95 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" + +#include + +#include "filedef.h" +#include "job.h" +#include "commands.h" +#include "variable.h" +#include "rule.h" + +/* The next two describe the variable output buffer. + This buffer is used to hold the variable-expansion of a line of the + makefile. It is made bigger with realloc whenever it is too small. + variable_buffer_length is the size currently allocated. + variable_buffer is the address of the buffer. + + For efficiency, it's guaranteed that the buffer will always have + VARIABLE_BUFFER_ZONE extra bytes allocated. This allows you to add a few + extra chars without having to call a function. Note you should never use + these bytes unless you're _sure_ you have room (you know when the buffer + length was last checked. */ + +#define VARIABLE_BUFFER_ZONE 5 + +static unsigned int variable_buffer_length; +char *variable_buffer; + +/* Subroutine of variable_expand and friends: + The text to add is LENGTH chars starting at STRING to the variable_buffer. + The text is added to the buffer at PTR, and the updated pointer into + the buffer is returned as the value. Thus, the value returned by + each call to variable_buffer_output should be the first argument to + the following call. */ + +char * +variable_buffer_output (char *ptr, char *string, unsigned int length) +{ + register unsigned int newlen = length + (ptr - variable_buffer); + + if ((newlen + VARIABLE_BUFFER_ZONE) > variable_buffer_length) + { + unsigned int offset = ptr - variable_buffer; + variable_buffer_length = (newlen + 100 > 2 * variable_buffer_length + ? newlen + 100 + : 2 * variable_buffer_length); + variable_buffer = (char *) xrealloc (variable_buffer, + variable_buffer_length); + ptr = variable_buffer + offset; + } + + bcopy (string, ptr, length); + return ptr + length; +} + +/* Return a pointer to the beginning of the variable buffer. */ + +static char * +initialize_variable_output (void) +{ + /* If we don't have a variable output buffer yet, get one. */ + + if (variable_buffer == 0) + { + variable_buffer_length = 200; + variable_buffer = (char *) xmalloc (variable_buffer_length); + variable_buffer[0] = '\0'; + } + + return variable_buffer; +} + +/* Recursively expand V. The returned string is malloc'd. */ + +static char *allocated_variable_append PARAMS ((const struct variable *v)); + +char * +recursively_expand_for_file (struct variable *v, struct file *file) +{ + char *value; + struct variable_set_list *save = 0; + + if (v->expanding) + { + if (!v->exp_count) + /* Expanding V causes infinite recursion. Lose. */ + fatal (reading_file, + _("Recursive variable `%s' references itself (eventually)"), + v->name); + --v->exp_count; + } + + if (file) + { + save = current_variable_set_list; + current_variable_set_list = file->variables; + } + + v->expanding = 1; + if (v->append) + value = allocated_variable_append (v); + else + value = allocated_variable_expand (v->value); + v->expanding = 0; + + if (file) + current_variable_set_list = save; + + return value; +} + +/* Expand a simple reference to variable NAME, which is LENGTH chars long. */ + +#ifdef __GNUC__ +__inline +#endif +static char * +reference_variable (char *o, char *name, unsigned int length) +{ + register struct variable *v; + char *value; + + v = lookup_variable (name, length); + + if (v == 0) + warn_undefined (name, length); + + if (v == 0 || *v->value == '\0') + return o; + + value = (v->recursive ? recursively_expand (v) : v->value); + + o = variable_buffer_output (o, value, strlen (value)); + + if (v->recursive) + free (value); + + return o; +} + +/* Scan STRING for variable references and expansion-function calls. Only + LENGTH bytes of STRING are actually scanned. If LENGTH is -1, scan until + a null byte is found. + + Write the results to LINE, which must point into `variable_buffer'. If + LINE is NULL, start at the beginning of the buffer. + Return a pointer to LINE, or to the beginning of the buffer if LINE is + NULL. */ + +char * +variable_expand_string (char *line, char *string, long length) +{ + register struct variable *v; + register char *p, *o, *p1; + char save_char = '\0'; + unsigned int line_offset; + + if (!line) + line = initialize_variable_output(); + + p = string; + o = line; + line_offset = line - variable_buffer; + + if (length >= 0) + { + save_char = string[length]; + string[length] = '\0'; + } + + while (1) + { + /* Copy all following uninteresting chars all at once to the + variable output buffer, and skip them. Uninteresting chars end + at the next $ or the end of the input. */ + + p1 = strchr (p, '$'); + + o = variable_buffer_output (o, p, p1 != 0 ? p1 - p : strlen (p) + 1); + + if (p1 == 0) + break; + p = p1 + 1; + + /* Dispatch on the char that follows the $. */ + + switch (*p) + { + case '$': + /* $$ seen means output one $ to the variable output buffer. */ + o = variable_buffer_output (o, p, 1); + break; + + case '(': + case '{': + /* $(...) or ${...} is the general case of substitution. */ + { + char openparen = *p; + char closeparen = (openparen == '(') ? ')' : '}'; + register char *beg = p + 1; + int free_beg = 0; + char *op, *begp; + char *end, *colon; + + op = o; + begp = p; + if (handle_function (&op, &begp)) + { + o = op; + p = begp; + break; + } + + /* Is there a variable reference inside the parens or braces? + If so, expand it before expanding the entire reference. */ + + end = strchr (beg, closeparen); + if (end == 0) + /* Unterminated variable reference. */ + fatal (reading_file, _("unterminated variable reference")); + p1 = lindex (beg, end, '$'); + if (p1 != 0) + { + /* BEG now points past the opening paren or brace. + Count parens or braces until it is matched. */ + int count = 0; + for (p = beg; *p != '\0'; ++p) + { + if (*p == openparen) + ++count; + else if (*p == closeparen && --count < 0) + break; + } + /* If COUNT is >= 0, there were unmatched opening parens + or braces, so we go to the simple case of a variable name + such as `$($(a)'. */ + if (count < 0) + { + beg = expand_argument (beg, p); /* Expand the name. */ + free_beg = 1; /* Remember to free BEG when finished. */ + end = strchr (beg, '\0'); + } + } + else + /* Advance P to the end of this reference. After we are + finished expanding this one, P will be incremented to + continue the scan. */ + p = end; + + /* This is not a reference to a built-in function and + any variable references inside are now expanded. + Is the resultant text a substitution reference? */ + + colon = lindex (beg, end, ':'); + if (colon) + { + /* This looks like a substitution reference: $(FOO:A=B). */ + char *subst_beg, *subst_end, *replace_beg, *replace_end; + + subst_beg = colon + 1; + subst_end = lindex (subst_beg, end, '='); + if (subst_end == 0) + /* There is no = in sight. Punt on the substitution + reference and treat this as a variable name containing + a colon, in the code below. */ + colon = 0; + else + { + replace_beg = subst_end + 1; + replace_end = end; + + /* Extract the variable name before the colon + and look up that variable. */ + v = lookup_variable (beg, colon - beg); + if (v == 0) + warn_undefined (beg, colon - beg); + + if (v != 0 && *v->value != '\0') + { + char *value = (v->recursive ? recursively_expand (v) + : v->value); + char *pattern, *percent; + if (free_beg) + { + *subst_end = '\0'; + pattern = subst_beg; + } + else + { + pattern = (char *) alloca (subst_end - subst_beg + + 1); + bcopy (subst_beg, pattern, subst_end - subst_beg); + pattern[subst_end - subst_beg] = '\0'; + } + percent = find_percent (pattern); + if (percent != 0) + { + char *replace; + if (free_beg) + { + *replace_end = '\0'; + replace = replace_beg; + } + else + { + replace = (char *) alloca (replace_end + - replace_beg + + 1); + bcopy (replace_beg, replace, + replace_end - replace_beg); + replace[replace_end - replace_beg] = '\0'; + } + + o = patsubst_expand (o, value, pattern, replace, + percent, (char *) 0); + } + else + o = subst_expand (o, value, + pattern, replace_beg, + strlen (pattern), + end - replace_beg, + 0, 1); + if (v->recursive) + free (value); + } + } + } + + if (colon == 0) + /* This is an ordinary variable reference. + Look up the value of the variable. */ + o = reference_variable (o, beg, end - beg); + + if (free_beg) + free (beg); + } + break; + + case '\0': + break; + + default: + if (isblank ((unsigned char)p[-1])) + break; + + /* A $ followed by a random char is a variable reference: + $a is equivalent to $(a). */ + { + /* We could do the expanding here, but this way + avoids code repetition at a small performance cost. */ + char name[5]; + name[0] = '$'; + name[1] = '('; + name[2] = *p; + name[3] = ')'; + name[4] = '\0'; + p1 = allocated_variable_expand (name); + o = variable_buffer_output (o, p1, strlen (p1)); + free (p1); + } + + break; + } + + if (*p == '\0') + break; + else + ++p; + } + + if (save_char) + string[length] = save_char; + + (void)variable_buffer_output (o, "", 1); + return (variable_buffer + line_offset); +} + +/* Scan LINE for variable references and expansion-function calls. + Build in `variable_buffer' the result of expanding the references and calls. + Return the address of the resulting string, which is null-terminated + and is valid only until the next time this function is called. */ + +char * +variable_expand (char *line) +{ + return variable_expand_string(NULL, line, (long)-1); +} + +/* Expand an argument for an expansion function. + The text starting at STR and ending at END is variable-expanded + into a null-terminated string that is returned as the value. + This is done without clobbering `variable_buffer' or the current + variable-expansion that is in progress. */ + +char * +expand_argument (const char *str, const char *end) +{ + char *tmp; + + if (str == end) + return xstrdup(""); + + if (!end || *end == '\0') + return allocated_variable_expand ((char *)str); + + tmp = (char *) alloca (end - str + 1); + bcopy (str, tmp, end - str); + tmp[end - str] = '\0'; + + return allocated_variable_expand (tmp); +} + +/* Expand LINE for FILE. Error messages refer to the file and line where + FILE's commands were found. Expansion uses FILE's variable set list. */ + +static char * +variable_expand_for_file (char *line, struct file *file) +{ + char *result; + struct variable_set_list *save; + + if (file == 0) + return variable_expand (line); + + save = current_variable_set_list; + current_variable_set_list = file->variables; + if (file->cmds && file->cmds->fileinfo.filenm) + reading_file = &file->cmds->fileinfo; + else + reading_file = 0; + result = variable_expand (line); + current_variable_set_list = save; + reading_file = 0; + + return result; +} + +/* Like allocated_variable_expand, but for += target-specific variables. + First recursively construct the variable value from its appended parts in + any upper variable sets. Then expand the resulting value. */ + +static char * +variable_append (const char *name, unsigned int length, + const struct variable_set_list *set) +{ + const struct variable *v; + char *buf = 0; + + /* If there's nothing left to check, return the empty buffer. */ + if (!set) + return initialize_variable_output (); + + /* Try to find the variable in this variable set. */ + v = lookup_variable_in_set (name, length, set->set); + + /* If there isn't one, look to see if there's one in a set above us. */ + if (!v) + return variable_append (name, length, set->next); + + /* If this variable type is append, first get any upper values. + If not, initialize the buffer. */ + if (v->append) + buf = variable_append (name, length, set->next); + else + buf = initialize_variable_output (); + + /* Append this value to the buffer, and return it. + If we already have a value, first add a space. */ + if (buf > variable_buffer) + buf = variable_buffer_output (buf, " ", 1); + + return variable_buffer_output (buf, v->value, strlen (v->value)); +} + + +static char * +allocated_variable_append (const struct variable *v) +{ + char *val, *retval; + + /* Construct the appended variable value. */ + + char *obuf = variable_buffer; + unsigned int olen = variable_buffer_length; + + variable_buffer = 0; + + val = variable_append (v->name, strlen (v->name), current_variable_set_list); + variable_buffer_output (val, "", 1); + val = variable_buffer; + + variable_buffer = obuf; + variable_buffer_length = olen; + + /* Now expand it and return that. */ + + retval = allocated_variable_expand (val); + + free (val); + return retval; +} + +/* Like variable_expand_for_file, but the returned string is malloc'd. + This function is called a lot. It wants to be efficient. */ + +char * +allocated_variable_expand_for_file (char *line, struct file *file) +{ + char *value; + + char *obuf = variable_buffer; + unsigned int olen = variable_buffer_length; + + variable_buffer = 0; + + value = variable_expand_for_file (line, file); + +#if 0 + /* Waste a little memory and save time. */ + value = xrealloc (value, strlen (value)) +#endif + + variable_buffer = obuf; + variable_buffer_length = olen; + + return value; +} + +/* Install a new variable_buffer context, returning the current one for + safe-keeping. */ + +void +install_variable_buffer (char **bufp, unsigned int *lenp) +{ + *bufp = variable_buffer; + *lenp = variable_buffer_length; + + variable_buffer = 0; + initialize_variable_output (); +} + +/* Restore a previously-saved variable_buffer setting (free the current one). + */ + +void +restore_variable_buffer (char *buf, unsigned int len) +{ + free (variable_buffer); + + variable_buffer = buf; + variable_buffer_length = len; +} diff --git a/src/mkutil/make/file.c b/src/mkutil/make/file.c new file mode 100644 index 00000000..3de56d70 --- /dev/null +++ b/src/mkutil/make/file.c @@ -0,0 +1,821 @@ +/* Target file hash table management for GNU Make. +Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, +2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" + +#include + +#include "dep.h" +#include "filedef.h" +#include "job.h" +#include "commands.h" +#include "variable.h" +#include "debug.h" +#include "hash.h" + + +/* Hash table of files the makefile knows how to make. */ + +static unsigned long +file_hash_1 (const void *key) +{ + return_ISTRING_HASH_1 (((struct file const *) key)->hname); +} + +static unsigned long +file_hash_2 (const void *key) +{ + return_ISTRING_HASH_2 (((struct file const *) key)->hname); +} + +static int +file_hash_cmp (const void *x, const void *y) +{ + return_ISTRING_COMPARE (((struct file const *) x)->hname, + ((struct file const *) y)->hname); +} + +#ifndef FILE_BUCKETS +#define FILE_BUCKETS 1007 +#endif +static struct hash_table files; + +/* Whether or not .SECONDARY with no prerequisites was given. */ +static int all_secondary = 0; + +/* Access the hash table of all file records. + lookup_file given a name, return the struct file * for that name, + or nil if there is none. + enter_file similar, but create one if there is none. */ + +struct file * +lookup_file (char *name) +{ + register struct file *f; + struct file file_key; +#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS) + register char *lname, *ln; +#endif + + assert (*name != '\0'); + + /* This is also done in parse_file_seq, so this is redundant + for names read from makefiles. It is here for names passed + on the command line. */ +#ifdef VMS +# ifndef WANT_CASE_SENSITIVE_TARGETS + { + register char *n; + lname = (char *) malloc (strlen (name) + 1); + for (n = name, ln = lname; *n != '\0'; ++n, ++ln) + *ln = isupper ((unsigned char)*n) ? tolower ((unsigned char)*n) : *n; + *ln = '\0'; + name = lname; + } +# endif + + while (name[0] == '[' && name[1] == ']' && name[2] != '\0') + name += 2; +#endif + while (name[0] == '.' && name[1] == '/' && name[2] != '\0') + { + name += 2; + while (*name == '/') + /* Skip following slashes: ".//foo" is "foo", not "/foo". */ + ++name; + } + + if (*name == '\0') + /* It was all slashes after a dot. */ +#ifdef VMS + name = "[]"; +#else +#ifdef _AMIGA + name = ""; +#else + name = "./"; +#endif /* AMIGA */ +#endif /* VMS */ + + file_key.hname = name; + f = (struct file *) hash_find_item (&files, &file_key); +#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS) + free (lname); +#endif + return f; +} + +struct file * +enter_file (char *name) +{ + register struct file *f; + register struct file *new; + register struct file **file_slot; + struct file file_key; +#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS) + char *lname, *ln; +#endif + + assert (*name != '\0'); + +#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS) + { + register char *n; + lname = (char *) malloc (strlen (name) + 1); + for (n = name, ln = lname; *n != '\0'; ++n, ++ln) + { + if (isupper ((unsigned char)*n)) + *ln = tolower ((unsigned char)*n); + else + *ln = *n; + } + + *ln = 0; + /* Creates a possible leak, old value of name is unreachable, but I + currently don't know how to fix it. */ + name = lname; + } +#endif + + file_key.hname = name; + file_slot = (struct file **) hash_find_slot (&files, &file_key); + f = *file_slot; + if (! HASH_VACANT (f) && !f->double_colon) + { +#if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS) + free(lname); +#endif + return f; + } + + new = (struct file *) xmalloc (sizeof (struct file)); + bzero ((char *) new, sizeof (struct file)); + new->name = new->hname = name; + new->update_status = -1; + + if (HASH_VACANT (f)) + hash_insert_at (&files, new, file_slot); + else + { + /* There is already a double-colon entry for this file. */ + new->double_colon = f; + while (f->prev != 0) + f = f->prev; + f->prev = new; + } + + return new; +} + +/* Rename FILE to NAME. This is not as simple as resetting + the `name' member, since it must be put in a new hash bucket, + and possibly merged with an existing file called NAME. */ + +void +rename_file (struct file *from_file, char *to_hname) +{ + rehash_file (from_file, to_hname); + while (from_file) + { + from_file->name = from_file->hname; + from_file = from_file->prev; + } +} + +/* Rehash FILE to NAME. This is not as simple as resetting + the `hname' member, since it must be put in a new hash bucket, + and possibly merged with an existing file called NAME. */ + +void +rehash_file (struct file *from_file, char *to_hname) +{ + struct file file_key; + struct file **file_slot; + struct file *to_file; + struct file *deleted_file; + struct file *f; + + file_key.hname = to_hname; + if (0 == file_hash_cmp (from_file, &file_key)) + return; + + file_key.hname = from_file->hname; + while (from_file->renamed != 0) + from_file = from_file->renamed; + if (file_hash_cmp (from_file, &file_key)) + /* hname changed unexpectedly */ + abort (); + + deleted_file = hash_delete (&files, from_file); + if (deleted_file != from_file) + /* from_file isn't the one stored in files */ + abort (); + + file_key.hname = to_hname; + file_slot = (struct file **) hash_find_slot (&files, &file_key); + to_file = *file_slot; + + from_file->hname = to_hname; + for (f = from_file->double_colon; f != 0; f = f->prev) + f->hname = to_hname; + + if (HASH_VACANT (to_file)) + hash_insert_at (&files, from_file, file_slot); + else + { + /* TO_FILE already exists under TO_HNAME. + We must retain TO_FILE and merge FROM_FILE into it. */ + + if (from_file->cmds != 0) + { + if (to_file->cmds == 0) + to_file->cmds = from_file->cmds; + else if (from_file->cmds != to_file->cmds) + { + /* We have two sets of commands. We will go with the + one given in the rule explicitly mentioning this name, + but give a message to let the user know what's going on. */ + if (to_file->cmds->fileinfo.filenm != 0) + error (&from_file->cmds->fileinfo, + _("Commands were specified for file `%s' at %s:%lu,"), + from_file->name, to_file->cmds->fileinfo.filenm, + to_file->cmds->fileinfo.lineno); + else + error (&from_file->cmds->fileinfo, + _("Commands for file `%s' were found by implicit rule search,"), + from_file->name); + error (&from_file->cmds->fileinfo, + _("but `%s' is now considered the same file as `%s'."), + from_file->name, to_hname); + error (&from_file->cmds->fileinfo, + _("Commands for `%s' will be ignored in favor of those for `%s'."), + to_hname, from_file->name); + } + } + + /* Merge the dependencies of the two files. */ + + if (to_file->deps == 0) + to_file->deps = from_file->deps; + else + { + register struct dep *deps = to_file->deps; + while (deps->next != 0) + deps = deps->next; + deps->next = from_file->deps; + } + + merge_variable_set_lists (&to_file->variables, from_file->variables); + + if (to_file->double_colon && from_file->is_target && !from_file->double_colon) + fatal (NILF, _("can't rename single-colon `%s' to double-colon `%s'"), + from_file->name, to_hname); + if (!to_file->double_colon && from_file->double_colon) + { + if (to_file->is_target) + fatal (NILF, _("can't rename double-colon `%s' to single-colon `%s'"), + from_file->name, to_hname); + else + to_file->double_colon = from_file->double_colon; + } + + if (from_file->last_mtime > to_file->last_mtime) + /* %%% Kludge so -W wins on a file that gets vpathized. */ + to_file->last_mtime = from_file->last_mtime; + + to_file->mtime_before_update = from_file->mtime_before_update; + +#define MERGE(field) to_file->field |= from_file->field + MERGE (precious); + MERGE (tried_implicit); + MERGE (updating); + MERGE (updated); + MERGE (is_target); + MERGE (cmd_target); + MERGE (phony); + MERGE (ignore_vpath); +#undef MERGE + + from_file->renamed = to_file; + } +} + +/* Remove all nonprecious intermediate files. + If SIG is nonzero, this was caused by a fatal signal, + meaning that a different message will be printed, and + the message will go to stderr rather than stdout. */ + +void +remove_intermediates (int sig) +{ + register struct file **file_slot; + register struct file **file_end; + int doneany = 0; + + /* If there's no way we will ever remove anything anyway, punt early. */ + if (question_flag || touch_flag || all_secondary) + return; + + if (sig && just_print_flag) + return; + + file_slot = (struct file **) files.ht_vec; + file_end = file_slot + files.ht_size; + for ( ; file_slot < file_end; file_slot++) + if (! HASH_VACANT (*file_slot)) + { + register struct file *f = *file_slot; + if (f->intermediate && (f->dontcare || !f->precious) + && !f->secondary && !f->cmd_target) + { + int status; + if (f->update_status == -1) + /* If nothing would have created this file yet, + don't print an "rm" command for it. */ + continue; + if (just_print_flag) + status = 0; + else + { + status = unlink (f->name); + if (status < 0 && errno == ENOENT) + continue; + } + if (!f->dontcare) + { + if (sig) + error (NILF, _("*** Deleting intermediate file `%s'"), f->name); + else + { + if (! doneany) + DB (DB_BASIC, (_("Removing intermediate files...\n"))); + if (!silent_flag) + { + if (! doneany) + { + fputs ("rm ", stdout); + doneany = 1; + } + else + putchar (' '); + fputs (f->name, stdout); + fflush (stdout); + } + } + if (status < 0) + perror_with_name ("unlink: ", f->name); + } + } + } + + if (doneany && !sig) + { + putchar ('\n'); + fflush (stdout); + } +} + +/* Set the intermediate flag. */ + +static void +set_intermediate (const void *item) +{ + struct file *f = (struct file *) item; + f->intermediate = 1; +} + +/* For each dependency of each file, make the `struct dep' point + at the appropriate `struct file' (which may have to be created). + + Also mark the files depended on by .PRECIOUS, .PHONY, .SILENT, + and various other special targets. */ + +void +snap_deps (void) +{ + register struct file *f; + register struct file *f2; + register struct dep *d; + register struct file **file_slot_0; + register struct file **file_slot; + register struct file **file_end; + + /* Enter each dependency name as a file. */ + /* We must use hash_dump (), because within this loop + we might add new files to the table, possibly causing + an in-situ table expansion. */ + file_slot_0 = (struct file **) hash_dump (&files, 0, 0); + file_end = file_slot_0 + files.ht_fill; + for (file_slot = file_slot_0; file_slot < file_end; file_slot++) + for (f2 = *file_slot; f2 != 0; f2 = f2->prev) + for (d = f2->deps; d != 0; d = d->next) + if (d->name != 0) + { + d->file = lookup_file (d->name); + if (d->file == 0) + d->file = enter_file (d->name); + else + free (d->name); + d->name = 0; + } + free (file_slot_0); + + for (f = lookup_file (".PRECIOUS"); f != 0; f = f->prev) + for (d = f->deps; d != 0; d = d->next) + for (f2 = d->file; f2 != 0; f2 = f2->prev) + f2->precious = 1; + + for (f = lookup_file (".LOW_RESOLUTION_TIME"); f != 0; f = f->prev) + for (d = f->deps; d != 0; d = d->next) + for (f2 = d->file; f2 != 0; f2 = f2->prev) + f2->low_resolution_time = 1; + + for (f = lookup_file (".PHONY"); f != 0; f = f->prev) + for (d = f->deps; d != 0; d = d->next) + for (f2 = d->file; f2 != 0; f2 = f2->prev) + { + /* Mark this file as phony and nonexistent. */ + f2->phony = 1; + f2->last_mtime = NONEXISTENT_MTIME; + f2->mtime_before_update = NONEXISTENT_MTIME; + } + + for (f = lookup_file (".INTERMEDIATE"); f != 0; f = f->prev) + { + /* .INTERMEDIATE with deps listed + marks those deps as intermediate files. */ + for (d = f->deps; d != 0; d = d->next) + for (f2 = d->file; f2 != 0; f2 = f2->prev) + f2->intermediate = 1; + /* .INTERMEDIATE with no deps does nothing. + Marking all files as intermediates is useless + since the goal targets would be deleted after they are built. */ + } + + for (f = lookup_file (".SECONDARY"); f != 0; f = f->prev) + { + /* .SECONDARY with deps listed + marks those deps as intermediate files + in that they don't get rebuilt if not actually needed; + but unlike real intermediate files, + these are not deleted after make finishes. */ + if (f->deps) + for (d = f->deps; d != 0; d = d->next) + for (f2 = d->file; f2 != 0; f2 = f2->prev) + f2->intermediate = f2->secondary = 1; + /* .SECONDARY with no deps listed marks *all* files that way. */ + else + { + all_secondary = 1; + hash_map (&files, set_intermediate); + } + } + + f = lookup_file (".EXPORT_ALL_VARIABLES"); + if (f != 0 && f->is_target) + export_all_variables = 1; + + f = lookup_file (".IGNORE"); + if (f != 0 && f->is_target) + { + if (f->deps == 0) + ignore_errors_flag = 1; + else + for (d = f->deps; d != 0; d = d->next) + for (f2 = d->file; f2 != 0; f2 = f2->prev) + f2->command_flags |= COMMANDS_NOERROR; + } + + f = lookup_file (".SILENT"); + if (f != 0 && f->is_target) + { + if (f->deps == 0) + silent_flag = 1; + else + for (d = f->deps; d != 0; d = d->next) + for (f2 = d->file; f2 != 0; f2 = f2->prev) + f2->command_flags |= COMMANDS_SILENT; + } + + f = lookup_file (".POSIX"); + if (f != 0 && f->is_target) + posix_pedantic = 1; + + f = lookup_file (".NOTPARALLEL"); + if (f != 0 && f->is_target) + not_parallel = 1; +} + +/* Set the `command_state' member of FILE and all its `also_make's. */ + +void +set_command_state (struct file *file, int state) +{ + struct dep *d; + + file->command_state = state; + + for (d = file->also_make; d != 0; d = d->next) + d->file->command_state = state; +} + +/* Convert an external file timestamp to internal form. */ + +FILE_TIMESTAMP +file_timestamp_cons (const char *fname, time_t s, int ns) +{ + int offset = ORDINARY_MTIME_MIN + (FILE_TIMESTAMP_HI_RES ? ns : 0); + FILE_TIMESTAMP product = (FILE_TIMESTAMP) s << FILE_TIMESTAMP_LO_BITS; + FILE_TIMESTAMP ts = product + offset; + + if (! (s <= FILE_TIMESTAMP_S (ORDINARY_MTIME_MAX) + && product <= ts && ts <= ORDINARY_MTIME_MAX)) + { + char buf[FILE_TIMESTAMP_PRINT_LEN_BOUND + 1]; + ts = s <= OLD_MTIME ? ORDINARY_MTIME_MIN : ORDINARY_MTIME_MAX; + file_timestamp_sprintf (buf, ts); + error (NILF, _("%s: Timestamp out of range; substituting %s"), + fname ? fname : _("Current time"), buf); + } + + return ts; +} + +/* Return the current time as a file timestamp, setting *RESOLUTION to + its resolution. */ +FILE_TIMESTAMP +file_timestamp_now (int *resolution) +{ + int r; + time_t s; + int ns; + + /* Don't bother with high-resolution clocks if file timestamps have + only one-second resolution. The code below should work, but it's + not worth the hassle of debugging it on hosts where it fails. */ +#if FILE_TIMESTAMP_HI_RES +# if HAVE_CLOCK_GETTIME && defined CLOCK_REALTIME + { + struct timespec timespec; + if (clock_gettime (CLOCK_REALTIME, ×pec) == 0) + { + r = 1; + s = timespec.tv_sec; + ns = timespec.tv_nsec; + goto got_time; + } + } +# endif +# if HAVE_GETTIMEOFDAY + { + struct timeval timeval; + if (gettimeofday (&timeval, 0) == 0) + { + r = 1000; + s = timeval.tv_sec; + ns = timeval.tv_usec * 1000; + goto got_time; + } + } +# endif +#endif + + r = 1000000000; + s = time ((time_t *) 0); + ns = 0; + +#if FILE_TIMESTAMP_HI_RES + got_time: +#endif + *resolution = r; + return file_timestamp_cons (0, s, ns); +} + +/* Place into the buffer P a printable representation of the file + timestamp TS. */ +void +file_timestamp_sprintf (char *p, FILE_TIMESTAMP ts) +{ + time_t t = FILE_TIMESTAMP_S (ts); + struct tm *tm = localtime (&t); + + if (tm) + sprintf (p, "%04d-%02d-%02d %02d:%02d:%02d", + tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec); + else if (t < 0) + sprintf (p, "%ld", (long) t); + else + sprintf (p, "%lu", (unsigned long) t); + p += strlen (p); + + /* Append nanoseconds as a fraction, but remove trailing zeros. + We don't know the actual timestamp resolution, since clock_getres + applies only to local times, whereas this timestamp might come + from a remote filesystem. So removing trailing zeros is the + best guess that we can do. */ + sprintf (p, ".%09d", FILE_TIMESTAMP_NS (ts)); + p += strlen (p) - 1; + while (*p == '0') + p--; + p += *p != '.'; + + *p = '\0'; +} + +/* Print the data base of files. */ + +static void +print_file (const void *item) +{ + struct file *f = (struct file *) item; + struct dep *d; + struct dep *ood = 0; + + putchar ('\n'); + if (!f->is_target) + puts (_("# Not a target:")); + printf ("%s:%s", f->name, f->double_colon ? ":" : ""); + + /* Print all normal dependencies; note any order-only deps. */ + for (d = f->deps; d != 0; d = d->next) + if (! d->ignore_mtime) + printf (" %s", dep_name (d)); + else if (! ood) + ood = d; + + /* Print order-only deps, if we have any. */ + if (ood) + { + printf (" | %s", dep_name (ood)); + for (d = ood->next; d != 0; d = d->next) + if (d->ignore_mtime) + printf (" %s", dep_name (d)); + } + + putchar ('\n'); + + if (f->precious) + puts (_("# Precious file (prerequisite of .PRECIOUS).")); + if (f->phony) + puts (_("# Phony target (prerequisite of .PHONY).")); + if (f->cmd_target) + puts (_("# Command-line target.")); + if (f->dontcare) + puts (_("# A default or MAKEFILES makefile.")); + puts (f->tried_implicit + ? _("# Implicit rule search has been done.") + : _("# Implicit rule search has not been done.")); + if (f->stem != 0) + printf (_("# Implicit/static pattern stem: `%s'\n"), f->stem); + if (f->intermediate) + puts (_("# File is an intermediate prerequisite.")); + if (f->also_make != 0) + { + fputs (_("# Also makes:"), stdout); + for (d = f->also_make; d != 0; d = d->next) + printf (" %s", dep_name (d)); + putchar ('\n'); + } + if (f->last_mtime == UNKNOWN_MTIME) + puts (_("# Modification time never checked.")); + else if (f->last_mtime == NONEXISTENT_MTIME) + puts (_("# File does not exist.")); + else if (f->last_mtime == OLD_MTIME) + puts (_("# File is very old.")); + else + { + char buf[FILE_TIMESTAMP_PRINT_LEN_BOUND + 1]; + file_timestamp_sprintf (buf, f->last_mtime); + printf (_("# Last modified %s\n"), buf); + } + puts (f->updated + ? _("# File has been updated.") : _("# File has not been updated.")); + switch (f->command_state) + { + case cs_running: + puts (_("# Commands currently running (THIS IS A BUG).")); + break; + case cs_deps_running: + puts (_("# Dependencies commands running (THIS IS A BUG).")); + break; + case cs_not_started: + case cs_finished: + switch (f->update_status) + { + case -1: + break; + case 0: + puts (_("# Successfully updated.")); + break; + case 1: + assert (question_flag); + puts (_("# Needs to be updated (-q is set).")); + break; + case 2: + puts (_("# Failed to be updated.")); + break; + default: + puts (_("# Invalid value in `update_status' member!")); + fflush (stdout); + fflush (stderr); + abort (); + } + break; + default: + puts (_("# Invalid value in `command_state' member!")); + fflush (stdout); + fflush (stderr); + abort (); + } + + if (f->variables != 0) + print_file_variables (f); + + if (f->cmds != 0) + print_commands (f->cmds); +} + +void +print_file_data_base (void) +{ + puts (_("\n# Files")); + + hash_map (&files, print_file); + + fputs (_("\n# files hash-table stats:\n# "), stdout); + hash_print_stats (&files, stdout); +} + +#define EXPANSION_INCREMENT(_l) ((((_l) / 500) + 1) * 500) + +char * +build_target_list (char *value) +{ + static unsigned long last_targ_count = 0; + + if (files.ht_fill != last_targ_count) + { + unsigned long max = EXPANSION_INCREMENT (strlen (value)); + unsigned long len; + char *p; + struct file **fp = (struct file **) files.ht_vec; + struct file **end = &fp[files.ht_size]; + + /* Make sure we have at least MAX bytes in the allocated buffer. */ + value = xrealloc (value, max); + + p = value; + len = 0; + for (; fp < end; ++fp) + if (!HASH_VACANT (*fp) && (*fp)->is_target) + { + struct file *f = *fp; + int l = strlen (f->name); + + len += l + 1; + if (len > max) + { + unsigned long off = p - value; + + max += EXPANSION_INCREMENT (l + 1); + value = xrealloc (value, max); + p = &value[off]; + } + + bcopy (f->name, p, l); + p += l; + *(p++) = ' '; + } + *(p-1) = '\0'; + + last_targ_count = files.ht_fill; + } + + return value; +} + +void +init_hash_files (void) +{ + hash_init (&files, 1000, file_hash_1, file_hash_2, file_hash_cmp); +} + +/* EOF */ diff --git a/src/mkutil/make/filedef.h b/src/mkutil/make/filedef.h new file mode 100644 index 00000000..b7d6e676 --- /dev/null +++ b/src/mkutil/make/filedef.h @@ -0,0 +1,199 @@ +/* Definition of target file data structures for GNU Make. +Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1997, +2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + + +/* Structure that represents the info on one file + that the makefile says how to make. + All of these are chained together through `next'. */ + +#include "hash.h" + +struct file + { + char *name; + char *hname; /* Hashed filename */ + char *vpath; /* VPATH/vpath pathname */ + struct dep *deps; /* all dependencies, including duplicates */ + struct commands *cmds; /* Commands to execute for this target. */ + int command_flags; /* Flags OR'd in for cmds; see commands.h. */ + char *stem; /* Implicit stem, if an implicit + rule has been used */ + struct dep *also_make; /* Targets that are made by making this. */ + FILE_TIMESTAMP last_mtime; /* File's modtime, if already known. */ + FILE_TIMESTAMP mtime_before_update; /* File's modtime before any updating + has been performed. */ + struct file *prev; /* Previous entry for same file name; + used when there are multiple double-colon + entries for the same file. */ + + /* File that this file was renamed to. After any time that a + file could be renamed, call `check_renamed' (below). */ + struct file *renamed; + + /* List of variable sets used for this file. */ + struct variable_set_list *variables; + + /* Pattern-specific variable reference for this target, or null if there + isn't one. Also see the pat_searched flag, below. */ + struct variable_set_list *pat_variables; + + /* Immediate dependent that caused this target to be remade, + or nil if there isn't one. */ + struct file *parent; + + /* For a double-colon entry, this is the first double-colon entry for + the same file. Otherwise this is null. */ + struct file *double_colon; + + short int update_status; /* Status of the last attempt to update, + or -1 if none has been made. */ + + enum /* State of the commands. */ + { /* Note: It is important that cs_not_started be zero. */ + cs_not_started, /* Not yet started. */ + cs_deps_running, /* Dep commands running. */ + cs_running, /* Commands running. */ + cs_finished /* Commands finished. */ + } command_state ENUM_BITFIELD (2); + + unsigned int precious:1; /* Non-0 means don't delete file on quit */ + unsigned int low_resolution_time:1; /* Nonzero if this file's time stamp + has only one-second resolution. */ + unsigned int tried_implicit:1; /* Nonzero if have searched + for implicit rule for making + this file; don't search again. */ + unsigned int updating:1; /* Nonzero while updating deps of this file */ + unsigned int updated:1; /* Nonzero if this file has been remade. */ + unsigned int is_target:1; /* Nonzero if file is described as target. */ + unsigned int cmd_target:1; /* Nonzero if file was given on cmd line. */ + unsigned int phony:1; /* Nonzero if this is a phony file + i.e., a dependency of .PHONY. */ + unsigned int intermediate:1;/* Nonzero if this is an intermediate file. */ + /* Nonzero, for an intermediate file, + means remove_intermediates should not delete it. */ + unsigned int secondary:1; + unsigned int dontcare:1; /* Nonzero if no complaint is to be made if + this target cannot be remade. */ + unsigned int ignore_vpath:1;/* Nonzero if we threw out VPATH name. */ + unsigned int pat_searched:1;/* Nonzero if we already searched for + pattern-specific variables. */ + unsigned int considered:1; /* equal to `considered' if file has been + considered on current scan of goal chain */ + }; + + +extern struct file *default_goal_file, *suffix_file, *default_file; + + +extern struct file *lookup_file PARAMS ((char *name)); +extern struct file *enter_file PARAMS ((char *name)); +extern void remove_intermediates PARAMS ((int sig)); +extern void snap_deps PARAMS ((void)); +extern void rename_file PARAMS ((struct file *file, char *name)); +extern void rehash_file PARAMS ((struct file *file, char *name)); +extern void set_command_state PARAMS ((struct file *file, int state)); +extern void notice_finished_file PARAMS ((struct file *file)); +extern void init_hash_files PARAMS ((void)); +extern char *build_target_list PARAMS ((char *old_list)); + +#if FILE_TIMESTAMP_HI_RES +# define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \ + file_timestamp_cons (fname, (st).st_mtime, (st).st_mtim.ST_MTIM_NSEC) +#else +# define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \ + file_timestamp_cons (fname, (st).st_mtime, 0) +#endif + +/* If FILE_TIMESTAMP is 64 bits (or more), use nanosecond resolution. + (Multiply by 2**30 instead of by 10**9 to save time at the cost of + slightly decreasing the number of available timestamps.) With + 64-bit FILE_TIMESTAMP, this stops working on 2514-05-30 01:53:04 + UTC, but by then uintmax_t should be larger than 64 bits. */ +#define FILE_TIMESTAMPS_PER_S (FILE_TIMESTAMP_HI_RES ? 1000000000 : 1) +#define FILE_TIMESTAMP_LO_BITS (FILE_TIMESTAMP_HI_RES ? 30 : 0) + +#define FILE_TIMESTAMP_S(ts) (((ts) - ORDINARY_MTIME_MIN) \ + >> FILE_TIMESTAMP_LO_BITS) +#define FILE_TIMESTAMP_NS(ts) ((int) (((ts) - ORDINARY_MTIME_MIN) \ + & ((1 << FILE_TIMESTAMP_LO_BITS) - 1))) + +/* Upper bound on length of string "YYYY-MM-DD HH:MM:SS.NNNNNNNNN" + representing a file timestamp. The upper bound is not necessarily 19, + since the year might be less than -999 or greater than 9999. + + Subtract one for the sign bit if in case file timestamps can be negative; + subtract FLOOR_LOG2_SECONDS_PER_YEAR to yield an upper bound on how many + file timestamp bits might affect the year; + 302 / 1000 is log10 (2) rounded up; + add one for integer division truncation; + add one more for a minus sign if file timestamps can be negative; + add 4 to allow for any 4-digit epoch year (e.g. 1970); + add 25 to allow for "-MM-DD HH:MM:SS.NNNNNNNNN". */ +#define FLOOR_LOG2_SECONDS_PER_YEAR 24 +#define FILE_TIMESTAMP_PRINT_LEN_BOUND \ + (((sizeof (FILE_TIMESTAMP) * CHAR_BIT - 1 - FLOOR_LOG2_SECONDS_PER_YEAR) \ + * 302 / 1000) \ + + 1 + 1 + 4 + 25) + +extern FILE_TIMESTAMP file_timestamp_cons PARAMS ((char const *, + time_t, int)); +extern FILE_TIMESTAMP file_timestamp_now PARAMS ((int *)); +extern void file_timestamp_sprintf PARAMS ((char *p, FILE_TIMESTAMP ts)); + +/* Return the mtime of file F (a struct file *), caching it. + The value is NONEXISTENT_MTIME if the file does not exist. */ +#define file_mtime(f) file_mtime_1 ((f), 1) +/* Return the mtime of file F (a struct file *), caching it. + Don't search using vpath for the file--if it doesn't actually exist, + we don't find it. + The value is NONEXISTENT_MTIME if the file does not exist. */ +#define file_mtime_no_search(f) file_mtime_1 ((f), 0) +extern FILE_TIMESTAMP f_mtime PARAMS ((struct file *file, int search)); +#define file_mtime_1(f, v) \ + ((f)->last_mtime == UNKNOWN_MTIME ? f_mtime ((f), v) : (f)->last_mtime) + +/* Special timestamp values. */ + +/* The file's timestamp is not yet known. */ +#define UNKNOWN_MTIME 0 + +/* The file does not exist. */ +#define NONEXISTENT_MTIME 1 + +/* The file does not exist, and we assume that it is older than any + actual file. */ +#define OLD_MTIME 2 + +/* The smallest and largest ordinary timestamps. */ +#define ORDINARY_MTIME_MIN (OLD_MTIME + 1) +#define ORDINARY_MTIME_MAX ((FILE_TIMESTAMP_S (NEW_MTIME) \ + << FILE_TIMESTAMP_LO_BITS) \ + + ORDINARY_MTIME_MIN + FILE_TIMESTAMPS_PER_S - 1) + +/* Modtime value to use for `infinitely new'. We used to get the current time + from the system and use that whenever we wanted `new'. But that causes + trouble when the machine running make and the machine holding a file have + different ideas about what time it is; and can also lose for `force' + targets, which need to be considered newer than anything that depends on + them, even if said dependents' modtimes are in the future. */ +#define NEW_MTIME INTEGER_TYPE_MAXIMUM (FILE_TIMESTAMP) + +#define check_renamed(file) \ + while ((file)->renamed != 0) (file) = (file)->renamed /* No ; here. */ diff --git a/src/mkutil/make/function.c b/src/mkutil/make/function.c new file mode 100644 index 00000000..7eab4a70 --- /dev/null +++ b/src/mkutil/make/function.c @@ -0,0 +1,2041 @@ +#if 0 /* Nick */ +#define DUMP_ALL +#define DUMP_EVAL +#endif + +/* Builtin function expansion for GNU Make. +Copyright (C) 1988, 1989, 1991-1997, 1999, 2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "filedef.h" +#include "variable.h" +#include "dep.h" +#include "job.h" +#include "commands.h" +#include "debug.h" + +#ifdef _AMIGA +#include "amiga.h" +#endif + + +struct function_table_entry + { + const char *name; + unsigned char len; + unsigned char minimum_args; + unsigned char maximum_args; + char expand_args; + char *(*func_ptr) PARAMS ((char *output, char **argv, const char *fname)); + }; + +static unsigned long +function_table_entry_hash_1 (const void *keyv) +{ + struct function_table_entry const *key = (struct function_table_entry const *) keyv; + return_STRING_N_HASH_1 (key->name, key->len); +} + +static unsigned long +function_table_entry_hash_2 (const void *keyv) +{ + struct function_table_entry const *key = (struct function_table_entry const *) keyv; + return_STRING_N_HASH_2 (key->name, key->len); +} + +static int +function_table_entry_hash_cmp (const void *xv, const void *yv) +{ + struct function_table_entry const *x = (struct function_table_entry const *) xv; + struct function_table_entry const *y = (struct function_table_entry const *) yv; + int result = x->len - y->len; + if (result) + return result; + return_STRING_N_COMPARE (x->name, y->name, x->len); +} + +static struct hash_table function_table; + + +/* Store into VARIABLE_BUFFER at O the result of scanning TEXT and replacing + each occurrence of SUBST with REPLACE. TEXT is null-terminated. SLEN is + the length of SUBST and RLEN is the length of REPLACE. If BY_WORD is + nonzero, substitutions are done only on matches which are complete + whitespace-delimited words. If SUFFIX_ONLY is nonzero, substitutions are + done only at the ends of whitespace-delimited words. */ + +char * +subst_expand (char *o, char *text, char *subst, char *replace, + unsigned int slen, unsigned int rlen, + int by_word, int suffix_only) +{ + char *t = text; + unsigned int tlen = strlen (text); + char *p; + + if (slen == 0 && !by_word && !suffix_only) + { + /* The first occurrence of "" in any string is its end. */ + o = variable_buffer_output (o, t, tlen); + if (rlen > 0) + o = variable_buffer_output (o, replace, rlen); + return o; + } + + do + { + if ((by_word | suffix_only) && slen == 0) + /* When matching by words, the empty string should match + the end of each word, rather than the end of the whole text. */ + p = end_of_token (next_token (t)); + else + { + p = sindex (t, tlen, subst, slen); + if (p == 0) + { + /* No more matches. Output everything left on the end. */ + o = variable_buffer_output (o, t, tlen); + return o; + } + } + + /* Output everything before this occurrence of the string to replace. */ + if (p > t) + o = variable_buffer_output (o, t, p - t); + + /* If we're substituting only by fully matched words, + or only at the ends of words, check that this case qualifies. */ + if ((by_word + && ((p > t && !isblank ((unsigned char)p[-1])) + || (p[slen] != '\0' && !isblank ((unsigned char)p[slen])))) + || (suffix_only + && (p[slen] != '\0' && !isblank ((unsigned char)p[slen])))) + /* Struck out. Output the rest of the string that is + no longer to be replaced. */ + o = variable_buffer_output (o, subst, slen); + else if (rlen > 0) + /* Output the replacement string. */ + o = variable_buffer_output (o, replace, rlen); + + /* Advance T past the string to be replaced; adjust tlen. */ + { + char *nt = p + slen; + tlen -= nt - t; + t = nt; + } + } while (*t != '\0'); + + return o; +} + + +/* Store into VARIABLE_BUFFER at O the result of scanning TEXT + and replacing strings matching PATTERN with REPLACE. + If PATTERN_PERCENT is not nil, PATTERN has already been + run through find_percent, and PATTERN_PERCENT is the result. + If REPLACE_PERCENT is not nil, REPLACE has already been + run through find_percent, and REPLACE_PERCENT is the result. */ + +char * +patsubst_expand (char *o, char *text, char *pattern, char *replace, + char *pattern_percent, char *replace_percent) +{ + unsigned int pattern_prepercent_len, pattern_postpercent_len; + unsigned int replace_prepercent_len, replace_postpercent_len = 0; + char *t; + unsigned int len; + int doneany = 0; + + /* We call find_percent on REPLACE before checking PATTERN so that REPLACE + will be collapsed before we call subst_expand if PATTERN has no %. */ + if (replace_percent == 0) + replace_percent = find_percent (replace); + if (replace_percent != 0) + { + /* Record the length of REPLACE before and after the % so + we don't have to compute these lengths more than once. */ + replace_prepercent_len = replace_percent - replace; + replace_postpercent_len = strlen (replace_percent + 1); + } + else + /* We store the length of the replacement + so we only need to compute it once. */ + replace_prepercent_len = strlen (replace); + + if (pattern_percent == 0) + pattern_percent = find_percent (pattern); + if (pattern_percent == 0) + /* With no % in the pattern, this is just a simple substitution. */ + return subst_expand (o, text, pattern, replace, + strlen (pattern), strlen (replace), 1, 0); + + /* Record the length of PATTERN before and after the % + so we don't have to compute it more than once. */ + pattern_prepercent_len = pattern_percent - pattern; + pattern_postpercent_len = strlen (pattern_percent + 1); + + while ((t = find_next_token (&text, &len)) != 0) + { + int fail = 0; + + /* Is it big enough to match? */ + if (len < pattern_prepercent_len + pattern_postpercent_len) + fail = 1; + + /* Does the prefix match? */ + if (!fail && pattern_prepercent_len > 0 + && (*t != *pattern + || t[pattern_prepercent_len - 1] != pattern_percent[-1] + || !strneq (t + 1, pattern + 1, pattern_prepercent_len - 1))) + fail = 1; + + /* Does the suffix match? */ + if (!fail && pattern_postpercent_len > 0 + && (t[len - 1] != pattern_percent[pattern_postpercent_len] + || t[len - pattern_postpercent_len] != pattern_percent[1] + || !strneq (&t[len - pattern_postpercent_len], + &pattern_percent[1], pattern_postpercent_len - 1))) + fail = 1; + + if (fail) + /* It didn't match. Output the string. */ + o = variable_buffer_output (o, t, len); + else + { + /* It matched. Output the replacement. */ + + /* Output the part of the replacement before the %. */ + o = variable_buffer_output (o, replace, replace_prepercent_len); + + if (replace_percent != 0) + { + /* Output the part of the matched string that + matched the % in the pattern. */ + o = variable_buffer_output (o, t + pattern_prepercent_len, + len - (pattern_prepercent_len + + pattern_postpercent_len)); + /* Output the part of the replacement after the %. */ + o = variable_buffer_output (o, replace_percent + 1, + replace_postpercent_len); + } + } + + /* Output a space, but not if the replacement is "". */ + if (fail || replace_prepercent_len > 0 + || (replace_percent != 0 && len + replace_postpercent_len > 0)) + { + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + } + if (doneany) + /* Kill the last space. */ + --o; + + return o; +} + + +/* Look up a function by name. */ + +static const struct function_table_entry * +lookup_function (const char *s) +{ + const char *e = s; + + while (*e && ( (*e >= 'a' && *e <= 'z') || *e == '-')) + e++; + if (*e == '\0' || isblank ((unsigned char) *e)) + { + struct function_table_entry function_table_entry_key; + function_table_entry_key.name = s; + function_table_entry_key.len = e - s; + + return hash_find_item (&function_table, &function_table_entry_key); + } + return 0; +} + + +/* Return 1 if PATTERN matches STR, 0 if not. */ + +int +pattern_matches (char *pattern, char *percent, char *str) +{ + unsigned int sfxlen, strlength; + + if (percent == 0) + { + unsigned int len = strlen (pattern) + 1; + char *new_chars = (char *) alloca (len); + bcopy (pattern, new_chars, len); + pattern = new_chars; + percent = find_percent (pattern); + if (percent == 0) + return streq (pattern, str); + } + + sfxlen = strlen (percent + 1); + strlength = strlen (str); + + if (strlength < (percent - pattern) + sfxlen + || !strneq (pattern, str, percent - pattern)) + return 0; + + return !strcmp (percent + 1, str + (strlength - sfxlen)); +} + + +/* Find the next comma or ENDPAREN (counting nested STARTPAREN and + ENDPARENtheses), starting at PTR before END. Return a pointer to + next character. + + If no next argument is found, return NULL. +*/ + +static char * +find_next_argument (char startparen, char endparen, + const char *ptr, const char *end) +{ + int count = 0; + + for (; ptr < end; ++ptr) + if (*ptr == startparen) + ++count; + + else if (*ptr == endparen) + { + --count; + if (count < 0) + return NULL; + } + + else if (*ptr == ',' && !count) + return (char *)ptr; + + /* We didn't find anything. */ + return NULL; +} + + +/* Glob-expand LINE. The returned pointer is + only good until the next call to string_glob. */ + +static char * +string_glob (char *line) +{ + static char *result = 0; + static unsigned int length; + register struct nameseq *chain; + register unsigned int idx; + + chain = multi_glob (parse_file_seq + (&line, '\0', sizeof (struct nameseq), + /* We do not want parse_file_seq to strip `./'s. + That would break examples like: + $(patsubst ./%.c,obj/%.o,$(wildcard ./?*.c)). */ + 0), + sizeof (struct nameseq)); + + if (result == 0) + { + length = 100; + result = (char *) xmalloc (100); + } + + idx = 0; + while (chain != 0) + { + register char *name = chain->name; + unsigned int len = strlen (name); + + struct nameseq *next = chain->next; + free ((char *) chain); + chain = next; + + /* multi_glob will pass names without globbing metacharacters + through as is, but we want only files that actually exist. */ + if (file_exists_p (name)) + { + if (idx + len + 1 > length) + { + length += (len + 1) * 2; + result = (char *) xrealloc (result, length); + } + bcopy (name, &result[idx], len); + idx += len; + result[idx++] = ' '; + } + + free (name); + } + + /* Kill the last space and terminate the string. */ + if (idx == 0) + result[0] = '\0'; + else + result[idx - 1] = '\0'; + + return result; +} + +/* + Builtin functions + */ + +static char * +func_patsubst (char *o, char **argv, const char *funcname) +{ + o = patsubst_expand (o, argv[2], argv[0], argv[1], (char *) 0, (char *) 0); + return o; +} + + +static char * +func_join (char *o, char **argv, const char *funcname) +{ + int doneany = 0; + + /* Write each word of the first argument directly followed + by the corresponding word of the second argument. + If the two arguments have a different number of words, + the excess words are just output separated by blanks. */ + register char *tp; + register char *pp; + char *list1_iterator = argv[0]; + char *list2_iterator = argv[1]; + do + { + unsigned int len1, len2; + + tp = find_next_token (&list1_iterator, &len1); + if (tp != 0) + o = variable_buffer_output (o, tp, len1); + + pp = find_next_token (&list2_iterator, &len2); + if (pp != 0) + o = variable_buffer_output (o, pp, len2); + + if (tp != 0 || pp != 0) + { + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + } + while (tp != 0 || pp != 0); + if (doneany) + /* Kill the last blank. */ + --o; + + return o; +} + + +static char * +func_origin (char *o, char **argv, const char *funcname) +{ + /* Expand the argument. */ + register struct variable *v = lookup_variable (argv[0], strlen (argv[0])); + if (v == 0) + o = variable_buffer_output (o, "undefined", 9); + else + switch (v->origin) + { + default: + case o_invalid: + abort (); + break; + case o_default: + o = variable_buffer_output (o, "default", 7); + break; + case o_env: + o = variable_buffer_output (o, "environment", 11); + break; + case o_file: + o = variable_buffer_output (o, "file", 4); + break; + case o_env_override: + o = variable_buffer_output (o, "environment override", 20); + break; + case o_command: + o = variable_buffer_output (o, "command line", 12); + break; + case o_override: + o = variable_buffer_output (o, "override", 8); + break; + case o_automatic: + o = variable_buffer_output (o, "automatic", 9); + break; + } + + return o; +} + +#ifdef VMS +# define IS_PATHSEP(c) ((c) == ']') +#else +# ifdef HAVE_DOS_PATHS +# define IS_PATHSEP(c) ((c) == '/' || (c) == '\\') +# else +# define IS_PATHSEP(c) ((c) == '/') +# endif +#endif + + +static char * +func_notdir_suffix (char *o, char **argv, const char *funcname) +{ + /* Expand the argument. */ + char *list_iterator = argv[0]; + char *p2 =0; + int doneany =0; + unsigned int len=0; + + int is_suffix = streq (funcname, "suffix"); + int is_notdir = !is_suffix; + while ((p2 = find_next_token (&list_iterator, &len)) != 0) + { + char *p = p2 + len; + + + while (p >= p2 && (!is_suffix || *p != '.')) + { + if (IS_PATHSEP (*p)) + break; + --p; + } + + if (p >= p2) + { + if (is_notdir) + ++p; + else if (*p != '.') + continue; + o = variable_buffer_output (o, p, len - (p - p2)); + } +#ifdef HAVE_DOS_PATHS + /* Handle the case of "d:foo/bar". */ + else if (streq (funcname, "notdir") && p2[0] && p2[1] == ':') + { + p = p2 + 2; + o = variable_buffer_output (o, p, len - (p - p2)); + } +#endif + else if (is_notdir) + o = variable_buffer_output (o, p2, len); + + if (is_notdir || p >= p2) + { + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + } + if (doneany) + /* Kill last space. */ + --o; + + + return o; + +} + + +static char * +func_basename_dir (char *o, char **argv, const char *funcname) +{ + /* Expand the argument. */ + char *p3 = argv[0]; + char *p2=0; + int doneany=0; + unsigned int len=0; + char *p=0; + int is_basename= streq (funcname, "basename"); + int is_dir= !is_basename; + + while ((p2 = find_next_token (&p3, &len)) != 0) + { + p = p2 + len; + while (p >= p2 && (!is_basename || *p != '.')) + { + if (IS_PATHSEP (*p)) + break; + --p; + } + + if (p >= p2 && (is_dir)) + o = variable_buffer_output (o, p2, ++p - p2); + else if (p >= p2 && (*p == '.')) + o = variable_buffer_output (o, p2, p - p2); +#ifdef HAVE_DOS_PATHS + /* Handle the "d:foobar" case */ + else if (p2[0] && p2[1] == ':' && is_dir) + o = variable_buffer_output (o, p2, 2); +#endif + else if (is_dir) +#ifdef VMS + o = variable_buffer_output (o, "[]", 2); +#else +#ifndef _AMIGA + o = variable_buffer_output (o, "./", 2); +#else + ; /* Just a nop... */ +#endif /* AMIGA */ +#endif /* !VMS */ + else + /* The entire name is the basename. */ + o = variable_buffer_output (o, p2, len); + + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + if (doneany) + /* Kill last space. */ + --o; + + + return o; +} + +static char * +func_addsuffix_addprefix (char *o, char **argv, const char *funcname) +{ + int fixlen = strlen (argv[0]); + char *list_iterator = argv[1]; + int is_addprefix = streq (funcname, "addprefix"); + int is_addsuffix = !is_addprefix; + + int doneany = 0; + char *p; + unsigned int len; + + while ((p = find_next_token (&list_iterator, &len)) != 0) + { + if (is_addprefix) + o = variable_buffer_output (o, argv[0], fixlen); + o = variable_buffer_output (o, p, len); + if (is_addsuffix) + o = variable_buffer_output (o, argv[0], fixlen); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + + if (doneany) + /* Kill last space. */ + --o; + + return o; +} + +static char * +func_subst (char *o, char **argv, const char *funcname) +{ + o = subst_expand (o, argv[2], argv[0], argv[1], strlen (argv[0]), + strlen (argv[1]), 0, 0); + + return o; +} + + +static char * +func_firstword (char *o, char **argv, const char *funcname) +{ + unsigned int i; + char *words = argv[0]; /* Use a temp variable for find_next_token */ + char *p = find_next_token (&words, &i); + + if (p != 0) + o = variable_buffer_output (o, p, i); + + return o; +} + + +static char * +func_words (char *o, char **argv, const char *funcname) +{ + int i = 0; + char *word_iterator = argv[0]; + char buf[20]; + + while (find_next_token (&word_iterator, (unsigned int *) 0) != 0) + ++i; + + sprintf (buf, "%d", i); + o = variable_buffer_output (o, buf, strlen (buf)); + + + return o; +} + +static char * +strip_whitespace (const char **begpp, const char **endpp) +{ + while (*begpp <= *endpp && isspace ((unsigned char)**begpp)) + (*begpp) ++; + while (*endpp >= *begpp && isspace ((unsigned char)**endpp)) + (*endpp) --; + return (char *)*begpp; +} + +static void +check_numeric (const char *s, const char *message) +{ + const char *end = s + strlen (s) - 1; + const char *beg = s; + strip_whitespace (&s, &end); + + for (; s <= end; ++s) + if (!ISDIGIT (*s)) /* ISDIGIT only evals its arg once: see make.h. */ + break; + + if (s <= end || end - beg < 0) + fatal (reading_file, "%s: '%s'", message, beg); +} + + + +static char * +func_word (char *o, char **argv, const char *funcname) +{ + char *end_p=0; + int i=0; + char *p=0; + + /* Check the first argument. */ + check_numeric (argv[0], _("non-numeric first argument to `word' function")); + i = atoi (argv[0]); + + if (i == 0) + fatal (reading_file, _("first argument to `word' function must be greater than 0")); + + + end_p = argv[1]; + while ((p = find_next_token (&end_p, 0)) != 0) + if (--i == 0) + break; + + if (i == 0) + o = variable_buffer_output (o, p, end_p - p); + + return o; +} + +static char * +func_wordlist (char *o, char **argv, const char *funcname) +{ + int start, count; + + /* Check the arguments. */ + check_numeric (argv[0], + _("non-numeric first argument to `wordlist' function")); + check_numeric (argv[1], + _("non-numeric second argument to `wordlist' function")); + + start = atoi (argv[0]); + count = atoi (argv[1]) - start + 1; + + if (count > 0) + { + char *p; + char *end_p = argv[2]; + + /* Find the beginning of the "start"th word. */ + while (((p = find_next_token (&end_p, 0)) != 0) && --start) + ; + + if (p) + { + /* Find the end of the "count"th word from start. */ + while (--count && (find_next_token (&end_p, 0) != 0)) + ; + + /* Return the stuff in the middle. */ + o = variable_buffer_output (o, p, end_p - p); + } + } + + return o; +} + +static char* +func_findstring (char *o, char **argv, const char *funcname) +{ + /* Find the first occurrence of the first string in the second. */ + int i = strlen (argv[0]); + if (sindex (argv[1], 0, argv[0], i) != 0) + o = variable_buffer_output (o, argv[0], i); + + return o; +} + +static char * +func_foreach (char *o, char **argv, const char *funcname) +{ + /* expand only the first two. */ + char *varname = expand_argument (argv[0], NULL); + char *list = expand_argument (argv[1], NULL); + char *body = argv[2]; + + int doneany = 0; + char *list_iterator = list; + char *p; + unsigned int len; + register struct variable *var; + + push_new_variable_scope (); + var = define_variable (varname, strlen (varname), "", o_automatic, 0); + + /* loop through LIST, put the value in VAR and expand BODY */ + while ((p = find_next_token (&list_iterator, &len)) != 0) + { + char *result = 0; + + { + char save = p[len]; + + p[len] = '\0'; + free (var->value); + var->value = (char *) xstrdup ((char*) p); + p[len] = save; + } + + result = allocated_variable_expand (body); + + o = variable_buffer_output (o, result, strlen (result)); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + free (result); + } + + if (doneany) + /* Kill the last space. */ + --o; + + pop_variable_scope (); + free (varname); + free (list); + + return o; +} + +struct a_word +{ + struct a_word *next; + struct a_word *chain; + char *str; + int length; + int matched; +}; + +static unsigned long +a_word_hash_1 (const void *key) +{ + return_STRING_HASH_1 (((struct a_word const *) key)->str); +} + +static unsigned long +a_word_hash_2 (const void *key) +{ + return_STRING_HASH_2 (((struct a_word const *) key)->str); +} + +static int +a_word_hash_cmp (const void *x, const void *y) +{ + int result = ((struct a_word const *) x)->length - ((struct a_word const *) y)->length; + if (result) + return result; + return_STRING_COMPARE (((struct a_word const *) x)->str, + ((struct a_word const *) y)->str); +} + +struct a_pattern +{ + struct a_pattern *next; + char *str; + char *percent; + int length; + int save_c; +}; + +static char * +func_filter_filterout (char *o, char **argv, const char *funcname) +{ + struct a_word *wordhead; + struct a_word **wordtail; + struct a_word *wp; + struct a_pattern *pathead; + struct a_pattern **pattail; + struct a_pattern *pp; + + struct hash_table a_word_table; + int is_filter = streq (funcname, "filter"); + char *pat_iterator = argv[0]; + char *word_iterator = argv[1]; + int literals = 0; + int words = 0; + int hashing = 0; + char *p; + unsigned int len; + + /* Chop ARGV[0] up into patterns to match against the words. */ + + pattail = &pathead; + while ((p = find_next_token (&pat_iterator, &len)) != 0) + { + struct a_pattern *pat = (struct a_pattern *) alloca (sizeof (struct a_pattern)); + + *pattail = pat; + pattail = &pat->next; + + if (*pat_iterator != '\0') + ++pat_iterator; + + pat->str = p; + pat->length = len; + pat->save_c = p[len]; + p[len] = '\0'; + pat->percent = find_percent (p); + if (pat->percent == 0) + literals++; + } + *pattail = 0; + + /* Chop ARGV[1] up into words to match against the patterns. */ + + wordtail = &wordhead; + while ((p = find_next_token (&word_iterator, &len)) != 0) + { + struct a_word *word = (struct a_word *) alloca (sizeof (struct a_word)); + + *wordtail = word; + wordtail = &word->next; + + if (*word_iterator != '\0') + ++word_iterator; + + p[len] = '\0'; + word->str = p; + word->length = len; + word->matched = 0; + word->chain = 0; + words++; + } + *wordtail = 0; + + /* Only use a hash table if arg list lengths justifies the cost. */ + hashing = (literals >= 2 && (literals * words) >= 10); + if (hashing) + { + hash_init (&a_word_table, words, a_word_hash_1, a_word_hash_2, a_word_hash_cmp); + for (wp = wordhead; wp != 0; wp = wp->next) + { + struct a_word *owp = hash_insert (&a_word_table, wp); + if (owp) + wp->chain = owp; + } + } + + if (words) + { + int doneany = 0; + + /* Run each pattern through the words, killing words. */ + for (pp = pathead; pp != 0; pp = pp->next) + { + if (pp->percent) + for (wp = wordhead; wp != 0; wp = wp->next) + wp->matched |= pattern_matches (pp->str, pp->percent, wp->str); + else if (hashing) + { + struct a_word a_word_key; + a_word_key.str = pp->str; + a_word_key.length = pp->length; + wp = (struct a_word *) hash_find_item (&a_word_table, &a_word_key); + while (wp) + { + wp->matched |= 1; + wp = wp->chain; + } + } + else + for (wp = wordhead; wp != 0; wp = wp->next) + wp->matched |= (wp->length == pp->length + && strneq (pp->str, wp->str, wp->length)); + } + + /* Output the words that matched (or didn't, for filter-out). */ + for (wp = wordhead; wp != 0; wp = wp->next) + if (is_filter ? wp->matched : !wp->matched) + { + o = variable_buffer_output (o, wp->str, strlen (wp->str)); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + + if (doneany) + /* Kill the last space. */ + --o; + } + + for (pp = pathead; pp != 0; pp = pp->next) + pp->str[pp->length] = pp->save_c; + + if (hashing) + hash_free (&a_word_table, 0); + + return o; +} + + +static char * +func_strip (char *o, char **argv, const char *funcname) +{ + char *p = argv[0]; + int doneany =0; + + while (*p != '\0') + { + int i=0; + char *word_start=0; + + while (isspace ((unsigned char)*p)) + ++p; + word_start = p; + for (i=0; *p != '\0' && !isspace ((unsigned char)*p); ++p, ++i) + {} + if (!i) + break; + o = variable_buffer_output (o, word_start, i); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + + if (doneany) + /* Kill the last space. */ + --o; + return o; +} + +/* + Print a warning or fatal message. +*/ +static char * +func_error (char *o, char **argv, const char *funcname) +{ + char **argvp; + char *msg, *p; + int len; + + /* The arguments will be broken on commas. Rather than create yet + another special case where function arguments aren't broken up, + just create a format string that puts them back together. */ + for (len=0, argvp=argv; *argvp != 0; ++argvp) + len += strlen (*argvp) + 2; + + p = msg = (char *) alloca (len + 1); + + for (argvp=argv; argvp[1] != 0; ++argvp) + { + strcpy (p, *argvp); + p += strlen (*argvp); + *(p++) = ','; + *(p++) = ' '; + } + strcpy (p, *argvp); + + if (*funcname == 'e') + fatal (reading_file, "%s", msg); + + /* The warning function expands to the empty string. */ + error (reading_file, "%s", msg); + + return o; +} + + +/* + chop argv[0] into words, and sort them. + */ +static char * +func_sort (char *o, char **argv, const char *funcname) +{ + char **words = 0; + int nwords = 0; + register int wordi = 0; + + /* Chop ARGV[0] into words and put them in WORDS. */ + char *t = argv[0]; + char *p; + unsigned int len; + int i; + + while ((p = find_next_token (&t, &len)) != 0) + { + if (wordi >= nwords - 1) + { + nwords = (2 * nwords) + 5; + words = (char **) xrealloc ((char *) words, + nwords * sizeof (char *)); + } + words[wordi++] = savestring (p, len); + } + + if (!wordi) + return o; + + /* Now sort the list of words. */ + qsort ((char *) words, wordi, sizeof (char *), alpha_compare); + + /* Now write the sorted list. */ + for (i = 0; i < wordi; ++i) + { + len = strlen (words[i]); + if (i == wordi - 1 || strlen (words[i + 1]) != len + || strcmp (words[i], words[i + 1])) + { + o = variable_buffer_output (o, words[i], len); + o = variable_buffer_output (o, " ", 1); + } + free (words[i]); + } + /* Kill the last space. */ + --o; + + free (words); + + return o; +} + +/* + $(if condition,true-part[,false-part]) + + CONDITION is false iff it evaluates to an empty string. White + space before and after condition are stripped before evaluation. + + If CONDITION is true, then TRUE-PART is evaluated, otherwise FALSE-PART is + evaluated (if it exists). Because only one of the two PARTs is evaluated, + you can use $(if ...) to create side-effects (with $(shell ...), for + example). +*/ + +static char * +func_if (char *o, char **argv, const char *funcname) +{ + const char *begp = argv[0]; + const char *endp = begp + strlen (argv[0]); + int result = 0; + + /* Find the result of the condition: if we have a value, and it's not + empty, the condition is true. If we don't have a value, or it's the + empty string, then it's false. */ + + strip_whitespace (&begp, &endp); + + if (begp < endp) + { + char *expansion = expand_argument (begp, NULL); + + result = strlen (expansion); + free (expansion); + } + + /* If the result is true (1) we want to eval the first argument, and if + it's false (0) we want to eval the second. If the argument doesn't + exist we do nothing, otherwise expand it and add to the buffer. */ + + argv += 1 + !result; + + if (argv[0]) + { + char *expansion; + + expansion = expand_argument (argv[0], NULL); + + o = variable_buffer_output (o, expansion, strlen (expansion)); + + free (expansion); + } + + return o; +} + +static char * +func_wildcard (char *o, char **argv, const char *funcname) +{ + +#ifdef _AMIGA + o = wildcard_expansion (argv[0], o); +#else + char *p = string_glob (argv[0]); + o = variable_buffer_output (o, p, strlen (p)); +#endif + return o; +} + +/* + $(eval ) + + Always resolves to the empty string. + + Treat the arguments as a segment of makefile, and parse them. +*/ + +static char * +func_eval (char *o, char **argv, const char *funcname) +{ + char *buf; + unsigned int len; + + /* Eval the buffer. Pop the current variable buffer setting so that the + eval'd code can use its own without conflicting. */ + + install_variable_buffer (&buf, &len); + +#ifdef DUMP_EVAL /* Nick */ + fflush(stderr); + printf("%s\n", argv[0]); +#endif + eval_buffer (argv[0]); + + restore_variable_buffer (buf, len); + + return o; +} + + +static char * +func_value (char *o, char **argv, const char *funcname) +{ + /* Look up the variable. */ + struct variable *v = lookup_variable (argv[0], strlen (argv[0])); + + /* Copy its value into the output buffer without expanding it. */ + if (v) + o = variable_buffer_output (o, v->value, strlen(v->value)); + + return o; +} + +/* + \r is replaced on UNIX as well. Is this desirable? + */ +void +fold_newlines (char *buffer, int *length) +{ + char *dst = buffer; + char *src = buffer; + char *last_nonnl = buffer -1; + src[*length] = 0; + for (; *src != '\0'; ++src) + { + if (src[0] == '\r' && src[1] == '\n') + continue; + if (*src == '\n') + { + *dst++ = ' '; + } + else + { + last_nonnl = dst; + *dst++ = *src; + } + } + *(++last_nonnl) = '\0'; + *length = last_nonnl - buffer; +} + + + +int shell_function_pid = 0, shell_function_completed; + + +#ifdef WINDOWS32 +/*untested*/ + +#include +#include +#include "sub_proc.h" + + +void +windows32_openpipe (int *pipedes, int *pid_p, char **command_argv, char **envp) +{ + SECURITY_ATTRIBUTES saAttr; + HANDLE hIn; + HANDLE hErr; + HANDLE hChildOutRd; + HANDLE hChildOutWr; + HANDLE hProcess; + + + saAttr.nLength = sizeof (SECURITY_ATTRIBUTES); + saAttr.bInheritHandle = TRUE; + saAttr.lpSecurityDescriptor = NULL; + + if (DuplicateHandle (GetCurrentProcess(), + GetStdHandle(STD_INPUT_HANDLE), + GetCurrentProcess(), + &hIn, + 0, + TRUE, + DUPLICATE_SAME_ACCESS) == FALSE) { + fatal (NILF, _("create_child_process: DuplicateHandle(In) failed (e=%d)\n"), + GetLastError()); + + } + if (DuplicateHandle(GetCurrentProcess(), + GetStdHandle(STD_ERROR_HANDLE), + GetCurrentProcess(), + &hErr, + 0, + TRUE, + DUPLICATE_SAME_ACCESS) == FALSE) { + fatal (NILF, _("create_child_process: DuplicateHandle(Err) failed (e=%d)\n"), + GetLastError()); + } + + if (!CreatePipe(&hChildOutRd, &hChildOutWr, &saAttr, 0)) + fatal (NILF, _("CreatePipe() failed (e=%d)\n"), GetLastError()); + + hProcess = process_init_fd(hIn, hChildOutWr, hErr); + + if (!hProcess) + fatal (NILF, _("windows32_openpipe (): process_init_fd() failed\n")); + + /* make sure that CreateProcess() has Path it needs */ + sync_Path_environment(); + + if (!process_begin(hProcess, command_argv, envp, command_argv[0], NULL)) { + /* register process for wait */ + process_register(hProcess); + + /* set the pid for returning to caller */ + *pid_p = (int) hProcess; + + /* set up to read data from child */ + pipedes[0] = _open_osfhandle((long) hChildOutRd, O_RDONLY); + + /* this will be closed almost right away */ + pipedes[1] = _open_osfhandle((long) hChildOutWr, O_APPEND); + } else { + /* reap/cleanup the failed process */ + process_cleanup(hProcess); + + /* close handles which were duplicated, they weren't used */ + CloseHandle(hIn); + CloseHandle(hErr); + + /* close pipe handles, they won't be used */ + CloseHandle(hChildOutRd); + CloseHandle(hChildOutWr); + + /* set status for return */ + pipedes[0] = pipedes[1] = -1; + *pid_p = -1; + } +} +#endif + + +#ifdef __MSDOS__ +FILE * +msdos_openpipe (int* pipedes, int *pidp, char *text) +{ + FILE *fpipe=0; + /* MSDOS can't fork, but it has `popen'. */ + struct variable *sh = lookup_variable ("SHELL", 5); + int e; + extern int dos_command_running, dos_status; + + /* Make sure not to bother processing an empty line. */ + while (isblank ((unsigned char)*text)) + ++text; + if (*text == '\0') + return 0; + + if (sh) + { + char buf[PATH_MAX + 7]; + /* This makes sure $SHELL value is used by $(shell), even + though the target environment is not passed to it. */ + sprintf (buf, "SHELL=%s", sh->value); + putenv (buf); + } + + e = errno; + errno = 0; + dos_command_running = 1; + dos_status = 0; + /* If dos_status becomes non-zero, it means the child process + was interrupted by a signal, like SIGINT or SIGQUIT. See + fatal_error_signal in commands.c. */ + fpipe = popen (text, "rt"); + dos_command_running = 0; + if (!fpipe || dos_status) + { + pipedes[0] = -1; + *pidp = -1; + if (dos_status) + errno = EINTR; + else if (errno == 0) + errno = ENOMEM; + shell_function_completed = -1; + } + else + { + pipedes[0] = fileno (fpipe); + *pidp = 42; /* Yes, the Meaning of Life, the Universe, and Everything! */ + errno = e; + shell_function_completed = 1; + } + return fpipe; +} +#endif + +/* + Do shell spawning, with the naughty bits for different OSes. + */ + +#ifdef VMS + +/* VMS can't do $(shell ...) */ +#define func_shell 0 + +#else +#ifndef _AMIGA +static char * +func_shell (char *o, char **argv, const char *funcname) +{ + char* batch_filename = NULL; + int i; + +#ifdef __MSDOS__ + FILE *fpipe; +#endif + char **command_argv; + char *error_prefix; + char **envp; + int pipedes[2]; + int pid; + +#ifndef __MSDOS__ + /* Construct the argument list. */ + command_argv = construct_command_argv (argv[0], + (char **) NULL, (struct file *) 0, + &batch_filename); + if (command_argv == 0) + return o; +#endif + + /* Using a target environment for `shell' loses in cases like: + export var = $(shell echo foobie) + because target_environment hits a loop trying to expand $(var) + to put it in the environment. This is even more confusing when + var was not explicitly exported, but just appeared in the + calling environment. */ + + envp = environ; + + /* For error messages. */ + if (reading_file != 0) + { + error_prefix = (char *) alloca (strlen (reading_file->filenm)+11+4); + sprintf (error_prefix, + "%s:%lu: ", reading_file->filenm, reading_file->lineno); + } + else + error_prefix = ""; + +#ifdef WINDOWS32 + + windows32_openpipe (pipedes, &pid, command_argv, envp); + + if (pipedes[0] < 0) { + /* open of the pipe failed, mark as failed execution */ + shell_function_completed = -1; + + return o; + } else + +#elif defined(__MSDOS__) + + fpipe = msdos_openpipe (pipedes, &pid, argv[0]); + if (pipedes[0] < 0) + { + perror_with_name (error_prefix, "pipe"); + return o; + } + +#else + + if (pipe (pipedes) < 0) + { + perror_with_name (error_prefix, "pipe"); + return o; + } + +# ifdef __EMX__ + + /* close some handles that are unnecessary for the child process */ + CLOSE_ON_EXEC(pipedes[1]); + CLOSE_ON_EXEC(pipedes[0]); + /* Never use fork()/exec() here! Use spawn() instead in exec_command() */ + pid = child_execute_job (0, pipedes[1], command_argv, envp); + if (pid < 0) + perror_with_name (error_prefix, "spawn"); + +# else /* ! __EMX__ */ + + pid = vfork (); + if (pid < 0) + perror_with_name (error_prefix, "fork"); + else if (pid == 0) + child_execute_job (0, pipedes[1], command_argv, envp); + else + +# endif + +#endif + { + /* We are the parent. */ + + char *buffer; + unsigned int maxlen; + int cc; + + /* Record the PID for reap_children. */ + shell_function_pid = pid; +#ifndef __MSDOS__ + shell_function_completed = 0; + + /* Free the storage only the child needed. */ + free (command_argv[0]); + free ((char *) command_argv); + + /* Close the write side of the pipe. */ + (void) close (pipedes[1]); +#endif + + /* Set up and read from the pipe. */ + + maxlen = 200; + buffer = (char *) xmalloc (maxlen + 1); + + /* Read from the pipe until it gets EOF. */ + for (i = 0; ; i += cc) + { + if (i == maxlen) + { + maxlen += 512; + buffer = (char *) xrealloc (buffer, maxlen + 1); + } + + EINTRLOOP (cc, read (pipedes[0], &buffer[i], maxlen - i)); + if (cc <= 0) + break; + } + buffer[i] = '\0'; + + /* Close the read side of the pipe. */ +#ifdef __MSDOS__ + if (fpipe) + (void) pclose (fpipe); +#else + (void) close (pipedes[0]); +#endif + + /* Loop until child_handler or reap_children() sets + shell_function_completed to the status of our child shell. */ + while (shell_function_completed == 0) + reap_children (1, 0); + + if (batch_filename) { + DB (DB_VERBOSE, (_("Cleaning up temporary batch file %s\n"), + batch_filename)); + remove (batch_filename); + free (batch_filename); + } + shell_function_pid = 0; + + /* The child_handler function will set shell_function_completed + to 1 when the child dies normally, or to -1 if it + dies with status 127, which is most likely an exec fail. */ + + if (shell_function_completed == -1) + { + /* This most likely means that the execvp failed, + so we should just write out the error message + that came in over the pipe from the child. */ + fputs (buffer, stderr); + fflush (stderr); + } + else + { + /* The child finished normally. Replace all + newlines in its output with spaces, and put + that in the variable output buffer. */ + fold_newlines (buffer, &i); + o = variable_buffer_output (o, buffer, i); + } + + free (buffer); + } + + return o; +} + +#else /* _AMIGA */ + +/* Do the Amiga version of func_shell. */ + +static char * +func_shell (char *o, char **argv, const char *funcname) +{ + /* Amiga can't fork nor spawn, but I can start a program with + redirection of my choice. However, this means that we + don't have an opportunity to reopen stdout to trap it. Thus, + we save our own stdout onto a new descriptor and dup a temp + file's descriptor onto our stdout temporarily. After we + spawn the shell program, we dup our own stdout back to the + stdout descriptor. The buffer reading is the same as above, + except that we're now reading from a file. */ + +#include +#include + + BPTR child_stdout; + char tmp_output[FILENAME_MAX]; + unsigned int maxlen = 200; + int cc, i; + char * buffer, * ptr; + char ** aptr; + int len = 0; + char* batch_filename = NULL; + + /* Construct the argument list. */ + command_argv = construct_command_argv (argv[0], (char **) NULL, + (struct file *) 0, &batch_filename); + if (command_argv == 0) + return o; + + /* Note the mktemp() is a security hole, but this only runs on Amiga. + Ideally we would use main.c:open_tmpfile(), but this uses a special + Open(), not fopen(), and I'm not familiar enough with the code to mess + with it. */ + strcpy (tmp_output, "t:MakeshXXXXXXXX"); + mktemp (tmp_output); + child_stdout = Open (tmp_output, MODE_NEWFILE); + + for (aptr=command_argv; *aptr; aptr++) + len += strlen (*aptr) + 1; + + buffer = xmalloc (len + 1); + ptr = buffer; + + for (aptr=command_argv; *aptr; aptr++) + { + strcpy (ptr, *aptr); + ptr += strlen (ptr) + 1; + *ptr ++ = ' '; + *ptr = 0; + } + + ptr[-1] = '\n'; + + Execute (buffer, NULL, child_stdout); + free (buffer); + + Close (child_stdout); + + child_stdout = Open (tmp_output, MODE_OLDFILE); + + buffer = xmalloc (maxlen); + i = 0; + do + { + if (i == maxlen) + { + maxlen += 512; + buffer = (char *) xrealloc (buffer, maxlen + 1); + } + + cc = Read (child_stdout, &buffer[i], maxlen - i); + if (cc > 0) + i += cc; + } while (cc > 0); + + Close (child_stdout); + + fold_newlines (buffer, &i); + o = variable_buffer_output (o, buffer, i); + free (buffer); + return o; +} +#endif /* _AMIGA */ +#endif /* !VMS */ + +#ifdef EXPERIMENTAL + +/* + equality. Return is string-boolean, ie, the empty string is false. + */ +static char * +func_eq (char* o, char **argv, char *funcname) +{ + int result = ! strcmp (argv[0], argv[1]); + o = variable_buffer_output (o, result ? "1" : "", result); + return o; +} + + +/* + string-boolean not operator. + */ +static char * +func_not (char* o, char **argv, char *funcname) +{ + char * s = argv[0]; + int result = 0; + while (isspace ((unsigned char)*s)) + s++; + result = ! (*s); + o = variable_buffer_output (o, result ? "1" : "", result); + return o; +} +#endif + + +/* Lookup table for builtin functions. + + This doesn't have to be sorted; we use a straight lookup. We might gain + some efficiency by moving most often used functions to the start of the + table. + + If MAXIMUM_ARGS is 0, that means there is no maximum and all + comma-separated values are treated as arguments. + + EXPAND_ARGS means that all arguments should be expanded before invocation. + Functions that do namespace tricks (foreach) don't automatically expand. */ + +static char *func_call PARAMS ((char *o, char **argv, const char *funcname)); + + +static struct function_table_entry function_table_init[] = +{ + /* Name/size */ /* MIN MAX EXP? Function */ + { STRING_SIZE_TUPLE("addprefix"), 2, 2, 1, func_addsuffix_addprefix}, + { STRING_SIZE_TUPLE("addsuffix"), 2, 2, 1, func_addsuffix_addprefix}, + { STRING_SIZE_TUPLE("basename"), 0, 1, 1, func_basename_dir}, + { STRING_SIZE_TUPLE("dir"), 0, 1, 1, func_basename_dir}, + { STRING_SIZE_TUPLE("notdir"), 0, 1, 1, func_notdir_suffix}, + { STRING_SIZE_TUPLE("subst"), 3, 3, 1, func_subst}, + { STRING_SIZE_TUPLE("suffix"), 0, 1, 1, func_notdir_suffix}, + { STRING_SIZE_TUPLE("filter"), 2, 2, 1, func_filter_filterout}, + { STRING_SIZE_TUPLE("filter-out"), 2, 2, 1, func_filter_filterout}, + { STRING_SIZE_TUPLE("findstring"), 2, 2, 1, func_findstring}, + { STRING_SIZE_TUPLE("firstword"), 0, 1, 1, func_firstword}, + { STRING_SIZE_TUPLE("join"), 2, 2, 1, func_join}, + { STRING_SIZE_TUPLE("patsubst"), 3, 3, 1, func_patsubst}, + { STRING_SIZE_TUPLE("shell"), 0, 1, 1, func_shell}, + { STRING_SIZE_TUPLE("sort"), 0, 1, 1, func_sort}, + { STRING_SIZE_TUPLE("strip"), 0, 1, 1, func_strip}, + { STRING_SIZE_TUPLE("wildcard"), 0, 1, 1, func_wildcard}, + { STRING_SIZE_TUPLE("word"), 2, 2, 1, func_word}, + { STRING_SIZE_TUPLE("wordlist"), 3, 3, 1, func_wordlist}, + { STRING_SIZE_TUPLE("words"), 0, 1, 1, func_words}, + { STRING_SIZE_TUPLE("origin"), 0, 1, 1, func_origin}, + { STRING_SIZE_TUPLE("foreach"), 3, 3, 0, func_foreach}, + { STRING_SIZE_TUPLE("call"), 1, 0, 1, func_call}, + { STRING_SIZE_TUPLE("error"), 0, 1, 1, func_error}, + { STRING_SIZE_TUPLE("warning"), 0, 1, 1, func_error}, + { STRING_SIZE_TUPLE("if"), 2, 3, 0, func_if}, + { STRING_SIZE_TUPLE("value"), 0, 1, 1, func_value}, + { STRING_SIZE_TUPLE("eval"), 0, 1, 1, func_eval}, +#ifdef EXPERIMENTAL + { STRING_SIZE_TUPLE("eq"), 2, 2, 1, func_eq}, + { STRING_SIZE_TUPLE("not"), 0, 1, 1, func_not}, +#endif +}; + +#define FUNCTION_TABLE_ENTRIES (sizeof (function_table_init) / sizeof (struct function_table_entry)) + + +/* These must come after the definition of function_table. */ + +static char * +expand_builtin_function (char *o, int argc, char **argv, + const struct function_table_entry *entry_p) +{ + if (argc < (int)entry_p->minimum_args) + fatal (reading_file, + _("Insufficient number of arguments (%d) to function `%s'"), + argc, entry_p->name); + + /* I suppose technically some function could do something with no + arguments, but so far none do, so just test it for all functions here + rather than in each one. We can change it later if necessary. */ + + if (!argc) + return o; + + if (!entry_p->func_ptr) + fatal (reading_file, _("Unimplemented on this platform: function `%s'"), + entry_p->name); + + return entry_p->func_ptr (o, argv, entry_p->name); +} + +/* Check for a function invocation in *STRINGP. *STRINGP points at the + opening ( or { and is not null-terminated. If a function invocation + is found, expand it into the buffer at *OP, updating *OP, incrementing + *STRINGP past the reference and returning nonzero. If not, return zero. */ + +int +handle_function (char **op, char **stringp) +{ + const struct function_table_entry *entry_p; + char openparen = (*stringp)[0]; + char closeparen = openparen == '(' ? ')' : '}'; + char *beg; + char *end; + int count = 0; + register char *p; + char **argv, **argvp; + int nargs; +#ifdef DUMP_ALL /* Nick */ + unsigned int offset; +#endif + + beg = *stringp + 1; + + entry_p = lookup_function (beg); + + if (!entry_p) + return 0; + + /* We found a builtin function. Find the beginning of its arguments (skip + whitespace after the name). */ + + beg = next_token (beg + entry_p->len); + + /* Find the end of the function invocation, counting nested use of + whichever kind of parens we use. Since we're looking, count commas + to get a rough estimate of how many arguments we might have. The + count might be high, but it'll never be low. */ + + for (nargs=1, end=beg; *end != '\0'; ++end) + if (*end == ',') + ++nargs; + else if (*end == openparen) + ++count; + else if (*end == closeparen && --count < 0) + break; + + if (count >= 0) + fatal (reading_file, + _("unterminated call to function `%s': missing `%c'"), + entry_p->name, closeparen); + + *stringp = end; + + /* Get some memory to store the arg pointers. */ + argvp = argv = (char **) alloca (sizeof (char *) * (nargs + 2)); + + /* Chop the string into arguments, then a nul. As soon as we hit + MAXIMUM_ARGS (if it's >0) assume the rest of the string is part of the + last argument. + + If we're expanding, store pointers to the expansion of each one. If + not, make a duplicate of the string and point into that, nul-terminating + each argument. */ + + if (!entry_p->expand_args) + { + int len = end - beg; + + p = xmalloc (len+1); + memcpy (p, beg, len); + p[len] = '\0'; + beg = p; + end = beg + len; + } + + for (p=beg, nargs=0; p <= end; ++argvp) + { + char *next; + + ++nargs; + + if (nargs == entry_p->maximum_args + || (! (next = find_next_argument (openparen, closeparen, p, end)))) + next = end; + + if (entry_p->expand_args) + *argvp = expand_argument (p, next); + else + { + *argvp = p; + *next = '\0'; + } +#ifdef DUMP_ALL /* Nick */ + printf("%s argument %d = \"%s\"\n", entry_p->name, nargs - 1, *argvp); +#endif + + p = next + 1; + } + *argvp = NULL; + + /* Finally! Run the function... */ +#ifdef DUMP_ALL /* Nick */ + offset = *op - variable_buffer; +#endif + *op = expand_builtin_function (*op, nargs, argv, entry_p); +#ifdef DUMP_ALL /* Nick */ + printf("%s result = \"", entry_p->name); + fwrite(variable_buffer + offset, 1, (*op - variable_buffer) - offset, stdout); + printf("\"\n"); +#endif + + /* Free memory. */ + if (entry_p->expand_args) + for (argvp=argv; *argvp != 0; ++argvp) + free (*argvp); + else + free (beg); + + return 1; +} + + +/* User-defined functions. Expand the first argument as either a builtin + function or a make variable, in the context of the rest of the arguments + assigned to $1, $2, ... $N. $0 is the name of the function. */ + +static char * +func_call (char *o, char **argv, const char *funcname) +{ + static int max_args = 0; + char *fname; + char *cp; + char *body; + int flen; + int i; + int saved_args; + const struct function_table_entry *entry_p; + struct variable *v; + + /* There is no way to define a variable with a space in the name, so strip + leading and trailing whitespace as a favor to the user. */ + fname = argv[0]; + while (*fname != '\0' && isspace ((unsigned char)*fname)) + ++fname; + + cp = fname + strlen (fname) - 1; + while (cp > fname && isspace ((unsigned char)*cp)) + --cp; + cp[1] = '\0'; + + /* Calling nothing is a no-op */ + if (*fname == '\0') + return o; + + /* Are we invoking a builtin function? */ + + entry_p = lookup_function (fname); + + if (entry_p) + { + /* How many arguments do we have? */ + for (i=0; argv[i+1]; ++i) + ; + + return expand_builtin_function (o, i, argv+1, entry_p); + } + + /* Not a builtin, so the first argument is the name of a variable to be + expanded and interpreted as a function. Find it. */ + flen = strlen (fname); + + v = lookup_variable (fname, flen); + + if (v == 0) + warn_undefined (fname, flen); + + if (v == 0 || *v->value == '\0') + return o; + + body = (char *) alloca (flen + 4); + body[0] = '$'; + body[1] = '('; + memcpy (body + 2, fname, flen); + body[flen+2] = ')'; + body[flen+3] = '\0'; + + /* Set up arguments $(1) .. $(N). $(0) is the function name. */ + + push_new_variable_scope (); + + for (i=0; *argv; ++i, ++argv) + { + char num[11]; + + sprintf (num, "%d", i); + define_variable (num, strlen (num), *argv, o_automatic, 0); + } + + /* If the number of arguments we have is < max_args, it means we're inside + a recursive invocation of $(call ...). Fill in the remaining arguments + in the new scope with the empty value, to hide them from this + invocation. */ + + for (; i < max_args; ++i) + { + char num[11]; + + sprintf (num, "%d", i); + define_variable (num, strlen (num), "", o_automatic, 0); + } + + /* Expand the body in the context of the arguments, adding the result to + the variable buffer. */ + + v->exp_count = EXP_COUNT_MAX; + + saved_args = max_args; + max_args = i; + o = variable_expand_string (o, body, flen+3); + max_args = saved_args; + + v->exp_count = 0; + + pop_variable_scope (); + + return o + strlen (o); +} + +void +hash_init_function_table (void) +{ + hash_init (&function_table, FUNCTION_TABLE_ENTRIES * 2, + function_table_entry_hash_1, function_table_entry_hash_2, + function_table_entry_hash_cmp); + hash_load (&function_table, function_table_init, + FUNCTION_TABLE_ENTRIES, sizeof (struct function_table_entry)); +} diff --git a/src/mkutil/make/function.c% b/src/mkutil/make/function.c% new file mode 100644 index 00000000..d05a5bb6 --- /dev/null +++ b/src/mkutil/make/function.c% @@ -0,0 +1,2018 @@ +/* Builtin function expansion for GNU Make. +Copyright (C) 1988, 1989, 1991-1997, 1999, 2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "filedef.h" +#include "variable.h" +#include "dep.h" +#include "job.h" +#include "commands.h" +#include "debug.h" + +#ifdef _AMIGA +#include "amiga.h" +#endif + + +struct function_table_entry + { + const char *name; + unsigned char len; + unsigned char minimum_args; + unsigned char maximum_args; + char expand_args; + char *(*func_ptr) PARAMS ((char *output, char **argv, const char *fname)); + }; + +static unsigned long +function_table_entry_hash_1 (const void *keyv) +{ + struct function_table_entry const *key = (struct function_table_entry const *) keyv; + return_STRING_N_HASH_1 (key->name, key->len); +} + +static unsigned long +function_table_entry_hash_2 (const void *keyv) +{ + struct function_table_entry const *key = (struct function_table_entry const *) keyv; + return_STRING_N_HASH_2 (key->name, key->len); +} + +static int +function_table_entry_hash_cmp (const void *xv, const void *yv) +{ + struct function_table_entry const *x = (struct function_table_entry const *) xv; + struct function_table_entry const *y = (struct function_table_entry const *) yv; + int result = x->len - y->len; + if (result) + return result; + return_STRING_N_COMPARE (x->name, y->name, x->len); +} + +static struct hash_table function_table; + + +/* Store into VARIABLE_BUFFER at O the result of scanning TEXT and replacing + each occurrence of SUBST with REPLACE. TEXT is null-terminated. SLEN is + the length of SUBST and RLEN is the length of REPLACE. If BY_WORD is + nonzero, substitutions are done only on matches which are complete + whitespace-delimited words. If SUFFIX_ONLY is nonzero, substitutions are + done only at the ends of whitespace-delimited words. */ + +char * +subst_expand (char *o, char *text, char *subst, char *replace, + unsigned int slen, unsigned int rlen, + int by_word, int suffix_only) +{ + char *t = text; + unsigned int tlen = strlen (text); + char *p; + + if (slen == 0 && !by_word && !suffix_only) + { + /* The first occurrence of "" in any string is its end. */ + o = variable_buffer_output (o, t, tlen); + if (rlen > 0) + o = variable_buffer_output (o, replace, rlen); + return o; + } + + do + { + if ((by_word | suffix_only) && slen == 0) + /* When matching by words, the empty string should match + the end of each word, rather than the end of the whole text. */ + p = end_of_token (next_token (t)); + else + { + p = sindex (t, tlen, subst, slen); + if (p == 0) + { + /* No more matches. Output everything left on the end. */ + o = variable_buffer_output (o, t, tlen); + return o; + } + } + + /* Output everything before this occurrence of the string to replace. */ + if (p > t) + o = variable_buffer_output (o, t, p - t); + + /* If we're substituting only by fully matched words, + or only at the ends of words, check that this case qualifies. */ + if ((by_word + && ((p > t && !isblank ((unsigned char)p[-1])) + || (p[slen] != '\0' && !isblank ((unsigned char)p[slen])))) + || (suffix_only + && (p[slen] != '\0' && !isblank ((unsigned char)p[slen])))) + /* Struck out. Output the rest of the string that is + no longer to be replaced. */ + o = variable_buffer_output (o, subst, slen); + else if (rlen > 0) + /* Output the replacement string. */ + o = variable_buffer_output (o, replace, rlen); + + /* Advance T past the string to be replaced; adjust tlen. */ + { + char *nt = p + slen; + tlen -= nt - t; + t = nt; + } + } while (*t != '\0'); + + return o; +} + + +/* Store into VARIABLE_BUFFER at O the result of scanning TEXT + and replacing strings matching PATTERN with REPLACE. + If PATTERN_PERCENT is not nil, PATTERN has already been + run through find_percent, and PATTERN_PERCENT is the result. + If REPLACE_PERCENT is not nil, REPLACE has already been + run through find_percent, and REPLACE_PERCENT is the result. */ + +char * +patsubst_expand (char *o, char *text, char *pattern, char *replace, + char *pattern_percent, char *replace_percent) +{ + unsigned int pattern_prepercent_len, pattern_postpercent_len; + unsigned int replace_prepercent_len, replace_postpercent_len = 0; + char *t; + unsigned int len; + int doneany = 0; + + /* We call find_percent on REPLACE before checking PATTERN so that REPLACE + will be collapsed before we call subst_expand if PATTERN has no %. */ + if (replace_percent == 0) + replace_percent = find_percent (replace); + if (replace_percent != 0) + { + /* Record the length of REPLACE before and after the % so + we don't have to compute these lengths more than once. */ + replace_prepercent_len = replace_percent - replace; + replace_postpercent_len = strlen (replace_percent + 1); + } + else + /* We store the length of the replacement + so we only need to compute it once. */ + replace_prepercent_len = strlen (replace); + + if (pattern_percent == 0) + pattern_percent = find_percent (pattern); + if (pattern_percent == 0) + /* With no % in the pattern, this is just a simple substitution. */ + return subst_expand (o, text, pattern, replace, + strlen (pattern), strlen (replace), 1, 0); + + /* Record the length of PATTERN before and after the % + so we don't have to compute it more than once. */ + pattern_prepercent_len = pattern_percent - pattern; + pattern_postpercent_len = strlen (pattern_percent + 1); + + while ((t = find_next_token (&text, &len)) != 0) + { + int fail = 0; + + /* Is it big enough to match? */ + if (len < pattern_prepercent_len + pattern_postpercent_len) + fail = 1; + + /* Does the prefix match? */ + if (!fail && pattern_prepercent_len > 0 + && (*t != *pattern + || t[pattern_prepercent_len - 1] != pattern_percent[-1] + || !strneq (t + 1, pattern + 1, pattern_prepercent_len - 1))) + fail = 1; + + /* Does the suffix match? */ + if (!fail && pattern_postpercent_len > 0 + && (t[len - 1] != pattern_percent[pattern_postpercent_len] + || t[len - pattern_postpercent_len] != pattern_percent[1] + || !strneq (&t[len - pattern_postpercent_len], + &pattern_percent[1], pattern_postpercent_len - 1))) + fail = 1; + + if (fail) + /* It didn't match. Output the string. */ + o = variable_buffer_output (o, t, len); + else + { + /* It matched. Output the replacement. */ + + /* Output the part of the replacement before the %. */ + o = variable_buffer_output (o, replace, replace_prepercent_len); + + if (replace_percent != 0) + { + /* Output the part of the matched string that + matched the % in the pattern. */ + o = variable_buffer_output (o, t + pattern_prepercent_len, + len - (pattern_prepercent_len + + pattern_postpercent_len)); + /* Output the part of the replacement after the %. */ + o = variable_buffer_output (o, replace_percent + 1, + replace_postpercent_len); + } + } + + /* Output a space, but not if the replacement is "". */ + if (fail || replace_prepercent_len > 0 + || (replace_percent != 0 && len + replace_postpercent_len > 0)) + { + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + } + if (doneany) + /* Kill the last space. */ + --o; + + return o; +} + + +/* Look up a function by name. */ + +static const struct function_table_entry * +lookup_function (const char *s) +{ + const char *e = s; + + while (*e && ( (*e >= 'a' && *e <= 'z') || *e == '-')) + e++; + if (*e == '\0' || isblank ((unsigned char) *e)) + { + struct function_table_entry function_table_entry_key; + function_table_entry_key.name = s; + function_table_entry_key.len = e - s; + + return hash_find_item (&function_table, &function_table_entry_key); + } + return 0; +} + + +/* Return 1 if PATTERN matches STR, 0 if not. */ + +int +pattern_matches (char *pattern, char *percent, char *str) +{ + unsigned int sfxlen, strlength; + + if (percent == 0) + { + unsigned int len = strlen (pattern) + 1; + char *new_chars = (char *) alloca (len); + bcopy (pattern, new_chars, len); + pattern = new_chars; + percent = find_percent (pattern); + if (percent == 0) + return streq (pattern, str); + } + + sfxlen = strlen (percent + 1); + strlength = strlen (str); + + if (strlength < (percent - pattern) + sfxlen + || !strneq (pattern, str, percent - pattern)) + return 0; + + return !strcmp (percent + 1, str + (strlength - sfxlen)); +} + + +/* Find the next comma or ENDPAREN (counting nested STARTPAREN and + ENDPARENtheses), starting at PTR before END. Return a pointer to + next character. + + If no next argument is found, return NULL. +*/ + +static char * +find_next_argument (char startparen, char endparen, + const char *ptr, const char *end) +{ + int count = 0; + + for (; ptr < end; ++ptr) + if (*ptr == startparen) + ++count; + + else if (*ptr == endparen) + { + --count; + if (count < 0) + return NULL; + } + + else if (*ptr == ',' && !count) + return (char *)ptr; + + /* We didn't find anything. */ + return NULL; +} + + +/* Glob-expand LINE. The returned pointer is + only good until the next call to string_glob. */ + +static char * +string_glob (char *line) +{ + static char *result = 0; + static unsigned int length; + register struct nameseq *chain; + register unsigned int idx; + + chain = multi_glob (parse_file_seq + (&line, '\0', sizeof (struct nameseq), + /* We do not want parse_file_seq to strip `./'s. + That would break examples like: + $(patsubst ./%.c,obj/%.o,$(wildcard ./?*.c)). */ + 0), + sizeof (struct nameseq)); + + if (result == 0) + { + length = 100; + result = (char *) xmalloc (100); + } + + idx = 0; + while (chain != 0) + { + register char *name = chain->name; + unsigned int len = strlen (name); + + struct nameseq *next = chain->next; + free ((char *) chain); + chain = next; + + /* multi_glob will pass names without globbing metacharacters + through as is, but we want only files that actually exist. */ + if (file_exists_p (name)) + { + if (idx + len + 1 > length) + { + length += (len + 1) * 2; + result = (char *) xrealloc (result, length); + } + bcopy (name, &result[idx], len); + idx += len; + result[idx++] = ' '; + } + + free (name); + } + + /* Kill the last space and terminate the string. */ + if (idx == 0) + result[0] = '\0'; + else + result[idx - 1] = '\0'; + + return result; +} + +/* + Builtin functions + */ + +static char * +func_patsubst (char *o, char **argv, const char *funcname) +{ + o = patsubst_expand (o, argv[2], argv[0], argv[1], (char *) 0, (char *) 0); + return o; +} + + +static char * +func_join (char *o, char **argv, const char *funcname) +{ + int doneany = 0; + + /* Write each word of the first argument directly followed + by the corresponding word of the second argument. + If the two arguments have a different number of words, + the excess words are just output separated by blanks. */ + register char *tp; + register char *pp; + char *list1_iterator = argv[0]; + char *list2_iterator = argv[1]; + do + { + unsigned int len1, len2; + + tp = find_next_token (&list1_iterator, &len1); + if (tp != 0) + o = variable_buffer_output (o, tp, len1); + + pp = find_next_token (&list2_iterator, &len2); + if (pp != 0) + o = variable_buffer_output (o, pp, len2); + + if (tp != 0 || pp != 0) + { + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + } + while (tp != 0 || pp != 0); + if (doneany) + /* Kill the last blank. */ + --o; + + return o; +} + + +static char * +func_origin (char *o, char **argv, const char *funcname) +{ + /* Expand the argument. */ + register struct variable *v = lookup_variable (argv[0], strlen (argv[0])); + if (v == 0) + o = variable_buffer_output (o, "undefined", 9); + else + switch (v->origin) + { + default: + case o_invalid: + abort (); + break; + case o_default: + o = variable_buffer_output (o, "default", 7); + break; + case o_env: + o = variable_buffer_output (o, "environment", 11); + break; + case o_file: + o = variable_buffer_output (o, "file", 4); + break; + case o_env_override: + o = variable_buffer_output (o, "environment override", 20); + break; + case o_command: + o = variable_buffer_output (o, "command line", 12); + break; + case o_override: + o = variable_buffer_output (o, "override", 8); + break; + case o_automatic: + o = variable_buffer_output (o, "automatic", 9); + break; + } + + return o; +} + +#ifdef VMS +# define IS_PATHSEP(c) ((c) == ']') +#else +# ifdef HAVE_DOS_PATHS +# define IS_PATHSEP(c) ((c) == '/' || (c) == '\\') +# else +# define IS_PATHSEP(c) ((c) == '/') +# endif +#endif + + +static char * +func_notdir_suffix (char *o, char **argv, const char *funcname) +{ + /* Expand the argument. */ + char *list_iterator = argv[0]; + char *p2 =0; + int doneany =0; + unsigned int len=0; + + int is_suffix = streq (funcname, "suffix"); + int is_notdir = !is_suffix; + while ((p2 = find_next_token (&list_iterator, &len)) != 0) + { + char *p = p2 + len; + + + while (p >= p2 && (!is_suffix || *p != '.')) + { + if (IS_PATHSEP (*p)) + break; + --p; + } + + if (p >= p2) + { + if (is_notdir) + ++p; + else if (*p != '.') + continue; + o = variable_buffer_output (o, p, len - (p - p2)); + } +#ifdef HAVE_DOS_PATHS + /* Handle the case of "d:foo/bar". */ + else if (streq (funcname, "notdir") && p2[0] && p2[1] == ':') + { + p = p2 + 2; + o = variable_buffer_output (o, p, len - (p - p2)); + } +#endif + else if (is_notdir) + o = variable_buffer_output (o, p2, len); + + if (is_notdir || p >= p2) + { + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + } + if (doneany) + /* Kill last space. */ + --o; + + + return o; + +} + + +static char * +func_basename_dir (char *o, char **argv, const char *funcname) +{ + /* Expand the argument. */ + char *p3 = argv[0]; + char *p2=0; + int doneany=0; + unsigned int len=0; + char *p=0; + int is_basename= streq (funcname, "basename"); + int is_dir= !is_basename; + + while ((p2 = find_next_token (&p3, &len)) != 0) + { + p = p2 + len; + while (p >= p2 && (!is_basename || *p != '.')) + { + if (IS_PATHSEP (*p)) + break; + --p; + } + + if (p >= p2 && (is_dir)) + o = variable_buffer_output (o, p2, ++p - p2); + else if (p >= p2 && (*p == '.')) + o = variable_buffer_output (o, p2, p - p2); +#ifdef HAVE_DOS_PATHS + /* Handle the "d:foobar" case */ + else if (p2[0] && p2[1] == ':' && is_dir) + o = variable_buffer_output (o, p2, 2); +#endif + else if (is_dir) +#ifdef VMS + o = variable_buffer_output (o, "[]", 2); +#else +#ifndef _AMIGA + o = variable_buffer_output (o, "./", 2); +#else + ; /* Just a nop... */ +#endif /* AMIGA */ +#endif /* !VMS */ + else + /* The entire name is the basename. */ + o = variable_buffer_output (o, p2, len); + + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + if (doneany) + /* Kill last space. */ + --o; + + + return o; +} + +static char * +func_addsuffix_addprefix (char *o, char **argv, const char *funcname) +{ + int fixlen = strlen (argv[0]); + char *list_iterator = argv[1]; + int is_addprefix = streq (funcname, "addprefix"); + int is_addsuffix = !is_addprefix; + + int doneany = 0; + char *p; + unsigned int len; + + while ((p = find_next_token (&list_iterator, &len)) != 0) + { + if (is_addprefix) + o = variable_buffer_output (o, argv[0], fixlen); + o = variable_buffer_output (o, p, len); + if (is_addsuffix) + o = variable_buffer_output (o, argv[0], fixlen); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + + if (doneany) + /* Kill last space. */ + --o; + + return o; +} + +static char * +func_subst (char *o, char **argv, const char *funcname) +{ + o = subst_expand (o, argv[2], argv[0], argv[1], strlen (argv[0]), + strlen (argv[1]), 0, 0); + + return o; +} + + +static char * +func_firstword (char *o, char **argv, const char *funcname) +{ + unsigned int i; + char *words = argv[0]; /* Use a temp variable for find_next_token */ + char *p = find_next_token (&words, &i); + + if (p != 0) + o = variable_buffer_output (o, p, i); + + return o; +} + + +static char * +func_words (char *o, char **argv, const char *funcname) +{ + int i = 0; + char *word_iterator = argv[0]; + char buf[20]; + + while (find_next_token (&word_iterator, (unsigned int *) 0) != 0) + ++i; + + sprintf (buf, "%d", i); + o = variable_buffer_output (o, buf, strlen (buf)); + + + return o; +} + +static char * +strip_whitespace (const char **begpp, const char **endpp) +{ + while (*begpp <= *endpp && isspace ((unsigned char)**begpp)) + (*begpp) ++; + while (*endpp >= *begpp && isspace ((unsigned char)**endpp)) + (*endpp) --; + return (char *)*begpp; +} + +static void +check_numeric (const char *s, const char *message) +{ + const char *end = s + strlen (s) - 1; + const char *beg = s; + strip_whitespace (&s, &end); + + for (; s <= end; ++s) + if (!ISDIGIT (*s)) /* ISDIGIT only evals its arg once: see make.h. */ + break; + + if (s <= end || end - beg < 0) + fatal (reading_file, "%s: '%s'", message, beg); +} + + + +static char * +func_word (char *o, char **argv, const char *funcname) +{ + char *end_p=0; + int i=0; + char *p=0; + + /* Check the first argument. */ + check_numeric (argv[0], _("non-numeric first argument to `word' function")); + i = atoi (argv[0]); + + if (i == 0) + fatal (reading_file, _("first argument to `word' function must be greater than 0")); + + + end_p = argv[1]; + while ((p = find_next_token (&end_p, 0)) != 0) + if (--i == 0) + break; + + if (i == 0) + o = variable_buffer_output (o, p, end_p - p); + + return o; +} + +static char * +func_wordlist (char *o, char **argv, const char *funcname) +{ + int start, count; + + /* Check the arguments. */ + check_numeric (argv[0], + _("non-numeric first argument to `wordlist' function")); + check_numeric (argv[1], + _("non-numeric second argument to `wordlist' function")); + + start = atoi (argv[0]); + count = atoi (argv[1]) - start + 1; + + if (count > 0) + { + char *p; + char *end_p = argv[2]; + + /* Find the beginning of the "start"th word. */ + while (((p = find_next_token (&end_p, 0)) != 0) && --start) + ; + + if (p) + { + /* Find the end of the "count"th word from start. */ + while (--count && (find_next_token (&end_p, 0) != 0)) + ; + + /* Return the stuff in the middle. */ + o = variable_buffer_output (o, p, end_p - p); + } + } + + return o; +} + +static char* +func_findstring (char *o, char **argv, const char *funcname) +{ + /* Find the first occurrence of the first string in the second. */ + int i = strlen (argv[0]); + if (sindex (argv[1], 0, argv[0], i) != 0) + o = variable_buffer_output (o, argv[0], i); + + return o; +} + +static char * +func_foreach (char *o, char **argv, const char *funcname) +{ + /* expand only the first two. */ + char *varname = expand_argument (argv[0], NULL); + char *list = expand_argument (argv[1], NULL); + char *body = argv[2]; + + int doneany = 0; + char *list_iterator = list; + char *p; + unsigned int len; + register struct variable *var; + + push_new_variable_scope (); + var = define_variable (varname, strlen (varname), "", o_automatic, 0); + + /* loop through LIST, put the value in VAR and expand BODY */ + while ((p = find_next_token (&list_iterator, &len)) != 0) + { + char *result = 0; + + { + char save = p[len]; + + p[len] = '\0'; + free (var->value); + var->value = (char *) xstrdup ((char*) p); + p[len] = save; + } + + result = allocated_variable_expand (body); + + o = variable_buffer_output (o, result, strlen (result)); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + free (result); + } + + if (doneany) + /* Kill the last space. */ + --o; + + pop_variable_scope (); + free (varname); + free (list); + + return o; +} + +struct a_word +{ + struct a_word *next; + struct a_word *chain; + char *str; + int length; + int matched; +}; + +static unsigned long +a_word_hash_1 (const void *key) +{ + return_STRING_HASH_1 (((struct a_word const *) key)->str); +} + +static unsigned long +a_word_hash_2 (const void *key) +{ + return_STRING_HASH_2 (((struct a_word const *) key)->str); +} + +static int +a_word_hash_cmp (const void *x, const void *y) +{ + int result = ((struct a_word const *) x)->length - ((struct a_word const *) y)->length; + if (result) + return result; + return_STRING_COMPARE (((struct a_word const *) x)->str, + ((struct a_word const *) y)->str); +} + +struct a_pattern +{ + struct a_pattern *next; + char *str; + char *percent; + int length; + int save_c; +}; + +static char * +func_filter_filterout (char *o, char **argv, const char *funcname) +{ + struct a_word *wordhead; + struct a_word **wordtail; + struct a_word *wp; + struct a_pattern *pathead; + struct a_pattern **pattail; + struct a_pattern *pp; + + struct hash_table a_word_table; + int is_filter = streq (funcname, "filter"); + char *pat_iterator = argv[0]; + char *word_iterator = argv[1]; + int literals = 0; + int words = 0; + int hashing = 0; + char *p; + unsigned int len; + + /* Chop ARGV[0] up into patterns to match against the words. */ + + pattail = &pathead; + while ((p = find_next_token (&pat_iterator, &len)) != 0) + { + struct a_pattern *pat = (struct a_pattern *) alloca (sizeof (struct a_pattern)); + + *pattail = pat; + pattail = &pat->next; + + if (*pat_iterator != '\0') + ++pat_iterator; + + pat->str = p; + pat->length = len; + pat->save_c = p[len]; + p[len] = '\0'; + pat->percent = find_percent (p); + if (pat->percent == 0) + literals++; + } + *pattail = 0; + + /* Chop ARGV[1] up into words to match against the patterns. */ + + wordtail = &wordhead; + while ((p = find_next_token (&word_iterator, &len)) != 0) + { + struct a_word *word = (struct a_word *) alloca (sizeof (struct a_word)); + + *wordtail = word; + wordtail = &word->next; + + if (*word_iterator != '\0') + ++word_iterator; + + p[len] = '\0'; + word->str = p; + word->length = len; + word->matched = 0; + word->chain = 0; + words++; + } + *wordtail = 0; + + /* Only use a hash table if arg list lengths justifies the cost. */ + hashing = (literals >= 2 && (literals * words) >= 10); + if (hashing) + { + hash_init (&a_word_table, words, a_word_hash_1, a_word_hash_2, a_word_hash_cmp); + for (wp = wordhead; wp != 0; wp = wp->next) + { + struct a_word *owp = hash_insert (&a_word_table, wp); + if (owp) + wp->chain = owp; + } + } + + if (words) + { + int doneany = 0; + + /* Run each pattern through the words, killing words. */ + for (pp = pathead; pp != 0; pp = pp->next) + { + if (pp->percent) + for (wp = wordhead; wp != 0; wp = wp->next) + wp->matched |= pattern_matches (pp->str, pp->percent, wp->str); + else if (hashing) + { + struct a_word a_word_key; + a_word_key.str = pp->str; + a_word_key.length = pp->length; + wp = (struct a_word *) hash_find_item (&a_word_table, &a_word_key); + while (wp) + { + wp->matched |= 1; + wp = wp->chain; + } + } + else + for (wp = wordhead; wp != 0; wp = wp->next) + wp->matched |= (wp->length == pp->length + && strneq (pp->str, wp->str, wp->length)); + } + + /* Output the words that matched (or didn't, for filter-out). */ + for (wp = wordhead; wp != 0; wp = wp->next) + if (is_filter ? wp->matched : !wp->matched) + { + o = variable_buffer_output (o, wp->str, strlen (wp->str)); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + + if (doneany) + /* Kill the last space. */ + --o; + } + + for (pp = pathead; pp != 0; pp = pp->next) + pp->str[pp->length] = pp->save_c; + + if (hashing) + hash_free (&a_word_table, 0); + + return o; +} + + +static char * +func_strip (char *o, char **argv, const char *funcname) +{ + char *p = argv[0]; + int doneany =0; + + while (*p != '\0') + { + int i=0; + char *word_start=0; + + while (isspace ((unsigned char)*p)) + ++p; + word_start = p; + for (i=0; *p != '\0' && !isspace ((unsigned char)*p); ++p, ++i) + {} + if (!i) + break; + o = variable_buffer_output (o, word_start, i); + o = variable_buffer_output (o, " ", 1); + doneany = 1; + } + + if (doneany) + /* Kill the last space. */ + --o; + return o; +} + +/* + Print a warning or fatal message. +*/ +static char * +func_error (char *o, char **argv, const char *funcname) +{ + char **argvp; + char *msg, *p; + int len; + + /* The arguments will be broken on commas. Rather than create yet + another special case where function arguments aren't broken up, + just create a format string that puts them back together. */ + for (len=0, argvp=argv; *argvp != 0; ++argvp) + len += strlen (*argvp) + 2; + + p = msg = (char *) alloca (len + 1); + + for (argvp=argv; argvp[1] != 0; ++argvp) + { + strcpy (p, *argvp); + p += strlen (*argvp); + *(p++) = ','; + *(p++) = ' '; + } + strcpy (p, *argvp); + + if (*funcname == 'e') + fatal (reading_file, "%s", msg); + + /* The warning function expands to the empty string. */ + error (reading_file, "%s", msg); + + return o; +} + + +/* + chop argv[0] into words, and sort them. + */ +static char * +func_sort (char *o, char **argv, const char *funcname) +{ + char **words = 0; + int nwords = 0; + register int wordi = 0; + + /* Chop ARGV[0] into words and put them in WORDS. */ + char *t = argv[0]; + char *p; + unsigned int len; + int i; + + while ((p = find_next_token (&t, &len)) != 0) + { + if (wordi >= nwords - 1) + { + nwords = (2 * nwords) + 5; + words = (char **) xrealloc ((char *) words, + nwords * sizeof (char *)); + } + words[wordi++] = savestring (p, len); + } + + if (!wordi) + return o; + + /* Now sort the list of words. */ + qsort ((char *) words, wordi, sizeof (char *), alpha_compare); + + /* Now write the sorted list. */ + for (i = 0; i < wordi; ++i) + { + len = strlen (words[i]); + if (i == wordi - 1 || strlen (words[i + 1]) != len + || strcmp (words[i], words[i + 1])) + { + o = variable_buffer_output (o, words[i], len); + o = variable_buffer_output (o, " ", 1); + } + free (words[i]); + } + /* Kill the last space. */ + --o; + + free (words); + + return o; +} + +/* + $(if condition,true-part[,false-part]) + + CONDITION is false iff it evaluates to an empty string. White + space before and after condition are stripped before evaluation. + + If CONDITION is true, then TRUE-PART is evaluated, otherwise FALSE-PART is + evaluated (if it exists). Because only one of the two PARTs is evaluated, + you can use $(if ...) to create side-effects (with $(shell ...), for + example). +*/ + +static char * +func_if (char *o, char **argv, const char *funcname) +{ + const char *begp = argv[0]; + const char *endp = begp + strlen (argv[0]); + int result = 0; + + /* Find the result of the condition: if we have a value, and it's not + empty, the condition is true. If we don't have a value, or it's the + empty string, then it's false. */ + + strip_whitespace (&begp, &endp); + + if (begp < endp) + { + char *expansion = expand_argument (begp, NULL); + + result = strlen (expansion); + free (expansion); + } + + /* If the result is true (1) we want to eval the first argument, and if + it's false (0) we want to eval the second. If the argument doesn't + exist we do nothing, otherwise expand it and add to the buffer. */ + + argv += 1 + !result; + + if (argv[0]) + { + char *expansion; + + expansion = expand_argument (argv[0], NULL); + + o = variable_buffer_output (o, expansion, strlen (expansion)); + + free (expansion); + } + + return o; +} + +static char * +func_wildcard (char *o, char **argv, const char *funcname) +{ + +#ifdef _AMIGA + o = wildcard_expansion (argv[0], o); +#else + char *p = string_glob (argv[0]); + o = variable_buffer_output (o, p, strlen (p)); +#endif + return o; +} + +/* + $(eval ) + + Always resolves to the empty string. + + Treat the arguments as a segment of makefile, and parse them. +*/ + +static char * +func_eval (char *o, char **argv, const char *funcname) +{ + char *buf; + unsigned int len; + + /* Eval the buffer. Pop the current variable buffer setting so that the + eval'd code can use its own without conflicting. */ + + install_variable_buffer (&buf, &len); + + eval_buffer (argv[0]); + + restore_variable_buffer (buf, len); + + return o; +} + + +static char * +func_value (char *o, char **argv, const char *funcname) +{ + /* Look up the variable. */ + struct variable *v = lookup_variable (argv[0], strlen (argv[0])); + + /* Copy its value into the output buffer without expanding it. */ + if (v) + o = variable_buffer_output (o, v->value, strlen(v->value)); + + return o; +} + +/* + \r is replaced on UNIX as well. Is this desirable? + */ +void +fold_newlines (char *buffer, int *length) +{ + char *dst = buffer; + char *src = buffer; + char *last_nonnl = buffer -1; + src[*length] = 0; + for (; *src != '\0'; ++src) + { + if (src[0] == '\r' && src[1] == '\n') + continue; + if (*src == '\n') + { + *dst++ = ' '; + } + else + { + last_nonnl = dst; + *dst++ = *src; + } + } + *(++last_nonnl) = '\0'; + *length = last_nonnl - buffer; +} + + + +int shell_function_pid = 0, shell_function_completed; + + +#ifdef WINDOWS32 +/*untested*/ + +#include +#include +#include "sub_proc.h" + + +void +windows32_openpipe (int *pipedes, int *pid_p, char **command_argv, char **envp) +{ + SECURITY_ATTRIBUTES saAttr; + HANDLE hIn; + HANDLE hErr; + HANDLE hChildOutRd; + HANDLE hChildOutWr; + HANDLE hProcess; + + + saAttr.nLength = sizeof (SECURITY_ATTRIBUTES); + saAttr.bInheritHandle = TRUE; + saAttr.lpSecurityDescriptor = NULL; + + if (DuplicateHandle (GetCurrentProcess(), + GetStdHandle(STD_INPUT_HANDLE), + GetCurrentProcess(), + &hIn, + 0, + TRUE, + DUPLICATE_SAME_ACCESS) == FALSE) { + fatal (NILF, _("create_child_process: DuplicateHandle(In) failed (e=%d)\n"), + GetLastError()); + + } + if (DuplicateHandle(GetCurrentProcess(), + GetStdHandle(STD_ERROR_HANDLE), + GetCurrentProcess(), + &hErr, + 0, + TRUE, + DUPLICATE_SAME_ACCESS) == FALSE) { + fatal (NILF, _("create_child_process: DuplicateHandle(Err) failed (e=%d)\n"), + GetLastError()); + } + + if (!CreatePipe(&hChildOutRd, &hChildOutWr, &saAttr, 0)) + fatal (NILF, _("CreatePipe() failed (e=%d)\n"), GetLastError()); + + hProcess = process_init_fd(hIn, hChildOutWr, hErr); + + if (!hProcess) + fatal (NILF, _("windows32_openpipe (): process_init_fd() failed\n")); + + /* make sure that CreateProcess() has Path it needs */ + sync_Path_environment(); + + if (!process_begin(hProcess, command_argv, envp, command_argv[0], NULL)) { + /* register process for wait */ + process_register(hProcess); + + /* set the pid for returning to caller */ + *pid_p = (int) hProcess; + + /* set up to read data from child */ + pipedes[0] = _open_osfhandle((long) hChildOutRd, O_RDONLY); + + /* this will be closed almost right away */ + pipedes[1] = _open_osfhandle((long) hChildOutWr, O_APPEND); + } else { + /* reap/cleanup the failed process */ + process_cleanup(hProcess); + + /* close handles which were duplicated, they weren't used */ + CloseHandle(hIn); + CloseHandle(hErr); + + /* close pipe handles, they won't be used */ + CloseHandle(hChildOutRd); + CloseHandle(hChildOutWr); + + /* set status for return */ + pipedes[0] = pipedes[1] = -1; + *pid_p = -1; + } +} +#endif + + +#ifdef __MSDOS__ +FILE * +msdos_openpipe (int* pipedes, int *pidp, char *text) +{ + FILE *fpipe=0; + /* MSDOS can't fork, but it has `popen'. */ + struct variable *sh = lookup_variable ("SHELL", 5); + int e; + extern int dos_command_running, dos_status; + + /* Make sure not to bother processing an empty line. */ + while (isblank ((unsigned char)*text)) + ++text; + if (*text == '\0') + return 0; + + if (sh) + { + char buf[PATH_MAX + 7]; + /* This makes sure $SHELL value is used by $(shell), even + though the target environment is not passed to it. */ + sprintf (buf, "SHELL=%s", sh->value); + putenv (buf); + } + + e = errno; + errno = 0; + dos_command_running = 1; + dos_status = 0; + /* If dos_status becomes non-zero, it means the child process + was interrupted by a signal, like SIGINT or SIGQUIT. See + fatal_error_signal in commands.c. */ + fpipe = popen (text, "rt"); + dos_command_running = 0; + if (!fpipe || dos_status) + { + pipedes[0] = -1; + *pidp = -1; + if (dos_status) + errno = EINTR; + else if (errno == 0) + errno = ENOMEM; + shell_function_completed = -1; + } + else + { + pipedes[0] = fileno (fpipe); + *pidp = 42; /* Yes, the Meaning of Life, the Universe, and Everything! */ + errno = e; + shell_function_completed = 1; + } + return fpipe; +} +#endif + +/* + Do shell spawning, with the naughty bits for different OSes. + */ + +#ifdef VMS + +/* VMS can't do $(shell ...) */ +#define func_shell 0 + +#else +#ifndef _AMIGA +static char * +func_shell (char *o, char **argv, const char *funcname) +{ + char* batch_filename = NULL; + int i; + +#ifdef __MSDOS__ + FILE *fpipe; +#endif + char **command_argv; + char *error_prefix; + char **envp; + int pipedes[2]; + int pid; + +#ifndef __MSDOS__ + /* Construct the argument list. */ + command_argv = construct_command_argv (argv[0], + (char **) NULL, (struct file *) 0, + &batch_filename); + if (command_argv == 0) + return o; +#endif + + /* Using a target environment for `shell' loses in cases like: + export var = $(shell echo foobie) + because target_environment hits a loop trying to expand $(var) + to put it in the environment. This is even more confusing when + var was not explicitly exported, but just appeared in the + calling environment. */ + + envp = environ; + + /* For error messages. */ + if (reading_file != 0) + { + error_prefix = (char *) alloca (strlen (reading_file->filenm)+11+4); + sprintf (error_prefix, + "%s:%lu: ", reading_file->filenm, reading_file->lineno); + } + else + error_prefix = ""; + +#ifdef WINDOWS32 + + windows32_openpipe (pipedes, &pid, command_argv, envp); + + if (pipedes[0] < 0) { + /* open of the pipe failed, mark as failed execution */ + shell_function_completed = -1; + + return o; + } else + +#elif defined(__MSDOS__) + + fpipe = msdos_openpipe (pipedes, &pid, argv[0]); + if (pipedes[0] < 0) + { + perror_with_name (error_prefix, "pipe"); + return o; + } + +#else + + if (pipe (pipedes) < 0) + { + perror_with_name (error_prefix, "pipe"); + return o; + } + +# ifdef __EMX__ + + /* close some handles that are unnecessary for the child process */ + CLOSE_ON_EXEC(pipedes[1]); + CLOSE_ON_EXEC(pipedes[0]); + /* Never use fork()/exec() here! Use spawn() instead in exec_command() */ + pid = child_execute_job (0, pipedes[1], command_argv, envp); + if (pid < 0) + perror_with_name (error_prefix, "spawn"); + +# else /* ! __EMX__ */ + + pid = vfork (); + if (pid < 0) + perror_with_name (error_prefix, "fork"); + else if (pid == 0) + child_execute_job (0, pipedes[1], command_argv, envp); + else + +# endif + +#endif + { + /* We are the parent. */ + + char *buffer; + unsigned int maxlen; + int cc; + + /* Record the PID for reap_children. */ + shell_function_pid = pid; +#ifndef __MSDOS__ + shell_function_completed = 0; + + /* Free the storage only the child needed. */ + free (command_argv[0]); + free ((char *) command_argv); + + /* Close the write side of the pipe. */ + (void) close (pipedes[1]); +#endif + + /* Set up and read from the pipe. */ + + maxlen = 200; + buffer = (char *) xmalloc (maxlen + 1); + + /* Read from the pipe until it gets EOF. */ + for (i = 0; ; i += cc) + { + if (i == maxlen) + { + maxlen += 512; + buffer = (char *) xrealloc (buffer, maxlen + 1); + } + + EINTRLOOP (cc, read (pipedes[0], &buffer[i], maxlen - i)); + if (cc <= 0) + break; + } + buffer[i] = '\0'; + + /* Close the read side of the pipe. */ +#ifdef __MSDOS__ + if (fpipe) + (void) pclose (fpipe); +#else + (void) close (pipedes[0]); +#endif + + /* Loop until child_handler or reap_children() sets + shell_function_completed to the status of our child shell. */ + while (shell_function_completed == 0) + reap_children (1, 0); + + if (batch_filename) { + DB (DB_VERBOSE, (_("Cleaning up temporary batch file %s\n"), + batch_filename)); + remove (batch_filename); + free (batch_filename); + } + shell_function_pid = 0; + + /* The child_handler function will set shell_function_completed + to 1 when the child dies normally, or to -1 if it + dies with status 127, which is most likely an exec fail. */ + + if (shell_function_completed == -1) + { + /* This most likely means that the execvp failed, + so we should just write out the error message + that came in over the pipe from the child. */ + fputs (buffer, stderr); + fflush (stderr); + } + else + { + /* The child finished normally. Replace all + newlines in its output with spaces, and put + that in the variable output buffer. */ + fold_newlines (buffer, &i); + o = variable_buffer_output (o, buffer, i); + } + + free (buffer); + } + + return o; +} + +#else /* _AMIGA */ + +/* Do the Amiga version of func_shell. */ + +static char * +func_shell (char *o, char **argv, const char *funcname) +{ + /* Amiga can't fork nor spawn, but I can start a program with + redirection of my choice. However, this means that we + don't have an opportunity to reopen stdout to trap it. Thus, + we save our own stdout onto a new descriptor and dup a temp + file's descriptor onto our stdout temporarily. After we + spawn the shell program, we dup our own stdout back to the + stdout descriptor. The buffer reading is the same as above, + except that we're now reading from a file. */ + +#include +#include + + BPTR child_stdout; + char tmp_output[FILENAME_MAX]; + unsigned int maxlen = 200; + int cc, i; + char * buffer, * ptr; + char ** aptr; + int len = 0; + char* batch_filename = NULL; + + /* Construct the argument list. */ + command_argv = construct_command_argv (argv[0], (char **) NULL, + (struct file *) 0, &batch_filename); + if (command_argv == 0) + return o; + + /* Note the mktemp() is a security hole, but this only runs on Amiga. + Ideally we would use main.c:open_tmpfile(), but this uses a special + Open(), not fopen(), and I'm not familiar enough with the code to mess + with it. */ + strcpy (tmp_output, "t:MakeshXXXXXXXX"); + mktemp (tmp_output); + child_stdout = Open (tmp_output, MODE_NEWFILE); + + for (aptr=command_argv; *aptr; aptr++) + len += strlen (*aptr) + 1; + + buffer = xmalloc (len + 1); + ptr = buffer; + + for (aptr=command_argv; *aptr; aptr++) + { + strcpy (ptr, *aptr); + ptr += strlen (ptr) + 1; + *ptr ++ = ' '; + *ptr = 0; + } + + ptr[-1] = '\n'; + + Execute (buffer, NULL, child_stdout); + free (buffer); + + Close (child_stdout); + + child_stdout = Open (tmp_output, MODE_OLDFILE); + + buffer = xmalloc (maxlen); + i = 0; + do + { + if (i == maxlen) + { + maxlen += 512; + buffer = (char *) xrealloc (buffer, maxlen + 1); + } + + cc = Read (child_stdout, &buffer[i], maxlen - i); + if (cc > 0) + i += cc; + } while (cc > 0); + + Close (child_stdout); + + fold_newlines (buffer, &i); + o = variable_buffer_output (o, buffer, i); + free (buffer); + return o; +} +#endif /* _AMIGA */ +#endif /* !VMS */ + +#ifdef EXPERIMENTAL + +/* + equality. Return is string-boolean, ie, the empty string is false. + */ +static char * +func_eq (char* o, char **argv, char *funcname) +{ + int result = ! strcmp (argv[0], argv[1]); + o = variable_buffer_output (o, result ? "1" : "", result); + return o; +} + + +/* + string-boolean not operator. + */ +static char * +func_not (char* o, char **argv, char *funcname) +{ + char * s = argv[0]; + int result = 0; + while (isspace ((unsigned char)*s)) + s++; + result = ! (*s); + o = variable_buffer_output (o, result ? "1" : "", result); + return o; +} +#endif + + +/* Lookup table for builtin functions. + + This doesn't have to be sorted; we use a straight lookup. We might gain + some efficiency by moving most often used functions to the start of the + table. + + If MAXIMUM_ARGS is 0, that means there is no maximum and all + comma-separated values are treated as arguments. + + EXPAND_ARGS means that all arguments should be expanded before invocation. + Functions that do namespace tricks (foreach) don't automatically expand. */ + +static char *func_call PARAMS ((char *o, char **argv, const char *funcname)); + + +static struct function_table_entry function_table_init[] = +{ + /* Name/size */ /* MIN MAX EXP? Function */ + { STRING_SIZE_TUPLE("addprefix"), 2, 2, 1, func_addsuffix_addprefix}, + { STRING_SIZE_TUPLE("addsuffix"), 2, 2, 1, func_addsuffix_addprefix}, + { STRING_SIZE_TUPLE("basename"), 0, 1, 1, func_basename_dir}, + { STRING_SIZE_TUPLE("dir"), 0, 1, 1, func_basename_dir}, + { STRING_SIZE_TUPLE("notdir"), 0, 1, 1, func_notdir_suffix}, + { STRING_SIZE_TUPLE("subst"), 3, 3, 1, func_subst}, + { STRING_SIZE_TUPLE("suffix"), 0, 1, 1, func_notdir_suffix}, + { STRING_SIZE_TUPLE("filter"), 2, 2, 1, func_filter_filterout}, + { STRING_SIZE_TUPLE("filter-out"), 2, 2, 1, func_filter_filterout}, + { STRING_SIZE_TUPLE("findstring"), 2, 2, 1, func_findstring}, + { STRING_SIZE_TUPLE("firstword"), 0, 1, 1, func_firstword}, + { STRING_SIZE_TUPLE("join"), 2, 2, 1, func_join}, + { STRING_SIZE_TUPLE("patsubst"), 3, 3, 1, func_patsubst}, + { STRING_SIZE_TUPLE("shell"), 0, 1, 1, func_shell}, + { STRING_SIZE_TUPLE("sort"), 0, 1, 1, func_sort}, + { STRING_SIZE_TUPLE("strip"), 0, 1, 1, func_strip}, + { STRING_SIZE_TUPLE("wildcard"), 0, 1, 1, func_wildcard}, + { STRING_SIZE_TUPLE("word"), 2, 2, 1, func_word}, + { STRING_SIZE_TUPLE("wordlist"), 3, 3, 1, func_wordlist}, + { STRING_SIZE_TUPLE("words"), 0, 1, 1, func_words}, + { STRING_SIZE_TUPLE("origin"), 0, 1, 1, func_origin}, + { STRING_SIZE_TUPLE("foreach"), 3, 3, 0, func_foreach}, + { STRING_SIZE_TUPLE("call"), 1, 0, 1, func_call}, + { STRING_SIZE_TUPLE("error"), 0, 1, 1, func_error}, + { STRING_SIZE_TUPLE("warning"), 0, 1, 1, func_error}, + { STRING_SIZE_TUPLE("if"), 2, 3, 0, func_if}, + { STRING_SIZE_TUPLE("value"), 0, 1, 1, func_value}, + { STRING_SIZE_TUPLE("eval"), 0, 1, 1, func_eval}, +#ifdef EXPERIMENTAL + { STRING_SIZE_TUPLE("eq"), 2, 2, 1, func_eq}, + { STRING_SIZE_TUPLE("not"), 0, 1, 1, func_not}, +#endif +}; + +#define FUNCTION_TABLE_ENTRIES (sizeof (function_table_init) / sizeof (struct function_table_entry)) + + +/* These must come after the definition of function_table. */ + +static char * +expand_builtin_function (char *o, int argc, char **argv, + const struct function_table_entry *entry_p) +{ + if (argc < (int)entry_p->minimum_args) + fatal (reading_file, + _("Insufficient number of arguments (%d) to function `%s'"), + argc, entry_p->name); + + /* I suppose technically some function could do something with no + arguments, but so far none do, so just test it for all functions here + rather than in each one. We can change it later if necessary. */ + + if (!argc) + return o; + + if (!entry_p->func_ptr) + fatal (reading_file, _("Unimplemented on this platform: function `%s'"), + entry_p->name); + + return entry_p->func_ptr (o, argv, entry_p->name); +} + +/* Check for a function invocation in *STRINGP. *STRINGP points at the + opening ( or { and is not null-terminated. If a function invocation + is found, expand it into the buffer at *OP, updating *OP, incrementing + *STRINGP past the reference and returning nonzero. If not, return zero. */ + +int +handle_function (char **op, char **stringp) +{ + const struct function_table_entry *entry_p; + char openparen = (*stringp)[0]; + char closeparen = openparen == '(' ? ')' : '}'; + char *beg; + char *end; + int count = 0; + register char *p; + char **argv, **argvp; + int nargs; + + beg = *stringp + 1; + + entry_p = lookup_function (beg); + + if (!entry_p) + return 0; + + /* We found a builtin function. Find the beginning of its arguments (skip + whitespace after the name). */ + + beg = next_token (beg + entry_p->len); + + /* Find the end of the function invocation, counting nested use of + whichever kind of parens we use. Since we're looking, count commas + to get a rough estimate of how many arguments we might have. The + count might be high, but it'll never be low. */ + + for (nargs=1, end=beg; *end != '\0'; ++end) + if (*end == ',') + ++nargs; + else if (*end == openparen) + ++count; + else if (*end == closeparen && --count < 0) + break; + + if (count >= 0) + fatal (reading_file, + _("unterminated call to function `%s': missing `%c'"), + entry_p->name, closeparen); + + *stringp = end; + + /* Get some memory to store the arg pointers. */ + argvp = argv = (char **) alloca (sizeof (char *) * (nargs + 2)); + + /* Chop the string into arguments, then a nul. As soon as we hit + MAXIMUM_ARGS (if it's >0) assume the rest of the string is part of the + last argument. + + If we're expanding, store pointers to the expansion of each one. If + not, make a duplicate of the string and point into that, nul-terminating + each argument. */ + + if (!entry_p->expand_args) + { + int len = end - beg; + + p = xmalloc (len+1); + memcpy (p, beg, len); + p[len] = '\0'; + beg = p; + end = beg + len; + } + + for (p=beg, nargs=0; p <= end; ++argvp) + { + char *next; + + ++nargs; + + if (nargs == entry_p->maximum_args + || (! (next = find_next_argument (openparen, closeparen, p, end)))) + next = end; + + if (entry_p->expand_args) + *argvp = expand_argument (p, next); + else + { + *argvp = p; + *next = '\0'; + } + + p = next + 1; + } + *argvp = NULL; + + /* Finally! Run the function... */ + *op = expand_builtin_function (*op, nargs, argv, entry_p); + + /* Free memory. */ + if (entry_p->expand_args) + for (argvp=argv; *argvp != 0; ++argvp) + free (*argvp); + else + free (beg); + + return 1; +} + + +/* User-defined functions. Expand the first argument as either a builtin + function or a make variable, in the context of the rest of the arguments + assigned to $1, $2, ... $N. $0 is the name of the function. */ + +static char * +func_call (char *o, char **argv, const char *funcname) +{ + static int max_args = 0; + char *fname; + char *cp; + char *body; + int flen; + int i; + int saved_args; + const struct function_table_entry *entry_p; + struct variable *v; + + /* There is no way to define a variable with a space in the name, so strip + leading and trailing whitespace as a favor to the user. */ + fname = argv[0]; + while (*fname != '\0' && isspace ((unsigned char)*fname)) + ++fname; + + cp = fname + strlen (fname) - 1; + while (cp > fname && isspace ((unsigned char)*cp)) + --cp; + cp[1] = '\0'; + + /* Calling nothing is a no-op */ + if (*fname == '\0') + return o; + + /* Are we invoking a builtin function? */ + + entry_p = lookup_function (fname); + + if (entry_p) + { + /* How many arguments do we have? */ + for (i=0; argv[i+1]; ++i) + ; + + return expand_builtin_function (o, i, argv+1, entry_p); + } + + /* Not a builtin, so the first argument is the name of a variable to be + expanded and interpreted as a function. Find it. */ + flen = strlen (fname); + + v = lookup_variable (fname, flen); + + if (v == 0) + warn_undefined (fname, flen); + + if (v == 0 || *v->value == '\0') + return o; + + body = (char *) alloca (flen + 4); + body[0] = '$'; + body[1] = '('; + memcpy (body + 2, fname, flen); + body[flen+2] = ')'; + body[flen+3] = '\0'; + + /* Set up arguments $(1) .. $(N). $(0) is the function name. */ + + push_new_variable_scope (); + + for (i=0; *argv; ++i, ++argv) + { + char num[11]; + + sprintf (num, "%d", i); + define_variable (num, strlen (num), *argv, o_automatic, 0); + } + + /* If the number of arguments we have is < max_args, it means we're inside + a recursive invocation of $(call ...). Fill in the remaining arguments + in the new scope with the empty value, to hide them from this + invocation. */ + + for (; i < max_args; ++i) + { + char num[11]; + + sprintf (num, "%d", i); + define_variable (num, strlen (num), "", o_automatic, 0); + } + + /* Expand the body in the context of the arguments, adding the result to + the variable buffer. */ + + v->exp_count = EXP_COUNT_MAX; + + saved_args = max_args; + max_args = i; + o = variable_expand_string (o, body, flen+3); + max_args = saved_args; + + v->exp_count = 0; + + pop_variable_scope (); + + return o + strlen (o); +} + +void +hash_init_function_table (void) +{ + hash_init (&function_table, FUNCTION_TABLE_ENTRIES * 2, + function_table_entry_hash_1, function_table_entry_hash_2, + function_table_entry_hash_cmp); + hash_load (&function_table, function_table_init, + FUNCTION_TABLE_ENTRIES, sizeof (struct function_table_entry)); +} diff --git a/src/mkutil/make/getloadavg.c b/src/mkutil/make/getloadavg.c new file mode 100644 index 00000000..73244ed4 --- /dev/null +++ b/src/mkutil/make/getloadavg.c @@ -0,0 +1,1030 @@ +/* Get the system load averages. + Copyright (C) 1985, 86, 87, 88, 89, 91, 92, 93, 1994, 1995, 1997 + Free Software Foundation, Inc. + + 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* Compile-time symbols that this file uses: + + HAVE_PSTAT_GETDYNAMIC Define this if your system has the + pstat_getdynamic function. I think it + is unique to HPUX9. The best way to get the + definition is through the AC_FUNC_GETLOADAVG + macro that comes with autoconf 2.13 or newer. + If that isn't an option, then just put + AC_CHECK_FUNCS(pstat_getdynamic) in your + configure.in file. + FIXUP_KERNEL_SYMBOL_ADDR() Adjust address in returned struct nlist. + KERNEL_FILE Pathname of the kernel to nlist. + LDAV_CVT() Scale the load average from the kernel. + Returns a double. + LDAV_SYMBOL Name of kernel symbol giving load average. + LOAD_AVE_TYPE Type of the load average array in the kernel. + Must be defined unless one of + apollo, DGUX, NeXT, or UMAX is defined; + or we have libkstat; + otherwise, no load average is available. + NLIST_STRUCT Include nlist.h, not a.out.h, and + the nlist n_name element is a pointer, + not an array. + HAVE_STRUCT_NLIST_N_UN_N_NAME struct nlist has an n_un member, not n_name. + LINUX_LDAV_FILE [__linux__]: File containing load averages. + + Specific system predefines this file uses, aside from setting + default values if not emacs: + + apollo + BSD Real BSD, not just BSD-like. + convex + DGUX + eunice UNIX emulator under VMS. + hpux + __MSDOS__ No-op for MSDOS. + NeXT + sgi + sequent Sequent Dynix 3.x.x (BSD) + _SEQUENT_ Sequent DYNIX/ptx 1.x.x (SYSV) + sony_news NEWS-OS (works at least for 4.1C) + UMAX + UMAX4_3 + VMS + WINDOWS32 No-op for Windows95/NT. + __linux__ Linux: assumes /proc filesystem mounted. + Support from Michael K. Johnson. + __NetBSD__ NetBSD: assumes /kern filesystem mounted. + + In addition, to avoid nesting many #ifdefs, we internally set + LDAV_DONE to indicate that the load average has been computed. + + We also #define LDAV_PRIVILEGED if a program will require + special installation to be able to call getloadavg. */ + +/* This should always be first. */ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +/* Both the Emacs and non-Emacs sections want this. Some + configuration files' definitions for the LOAD_AVE_CVT macro (like + sparc.h's) use macros like FSCALE, defined here. */ +#if defined (unix) || defined (__unix) +# include +#endif + + +/* Exclude all the code except the test program at the end + if the system has its own `getloadavg' function. + + The declaration of `errno' is needed by the test program + as well as the function itself, so it comes first. */ + +#include + +#ifndef errno +extern int errno; +#endif + +#if HAVE_LOCALE_H +# include +#endif +#if !HAVE_SETLOCALE +# define setlocale(Category, Locale) /* empty */ +#endif + +#ifndef HAVE_GETLOADAVG + + +/* The existing Emacs configuration files define a macro called + LOAD_AVE_CVT, which accepts a value of type LOAD_AVE_TYPE, and + returns the load average multiplied by 100. What we actually want + is a macro called LDAV_CVT, which returns the load average as an + unmultiplied double. + + For backwards compatibility, we'll define LDAV_CVT in terms of + LOAD_AVE_CVT, but future machine config files should just define + LDAV_CVT directly. */ + +# if !defined(LDAV_CVT) && defined(LOAD_AVE_CVT) +# define LDAV_CVT(n) (LOAD_AVE_CVT (n) / 100.0) +# endif + +# if !defined (BSD) && defined (ultrix) +/* Ultrix behaves like BSD on Vaxen. */ +# define BSD +# endif + +# ifdef NeXT +/* NeXT in the 2.{0,1,2} releases defines BSD in , which + conflicts with the definition understood in this file, that this + really is BSD. */ +# undef BSD + +/* NeXT defines FSCALE in . However, we take FSCALE being + defined to mean that the nlist method should be used, which is not true. */ +# undef FSCALE +# endif + +/* Same issues as for NeXT apply to the HURD-based GNU system. */ +# ifdef __GNU__ +# undef BSD +# undef FSCALE +# endif /* __GNU__ */ + +/* Set values that are different from the defaults, which are + set a little farther down with #ifndef. */ + + +/* Some shorthands. */ + +# if defined (HPUX) && !defined (hpux) +# define hpux +# endif + +# if defined (__hpux) && !defined (hpux) +# define hpux +# endif + +# if defined (__sun) && !defined (sun) +# define sun +# endif + +# if defined(hp300) && !defined(hpux) +# define MORE_BSD +# endif + +# if defined(ultrix) && defined(mips) +# define decstation +# endif + +# if defined (__SVR4) && !defined (SVR4) +# define SVR4 +# endif + +# if (defined(sun) && defined(SVR4)) || defined (SOLARIS2) +# define SUNOS_5 +# endif + +# if defined (__osf__) && (defined (__alpha) || defined (__alpha__)) +# define OSF_ALPHA +# include +# include +# include +# include +# endif + +# if defined (__osf__) && (defined (mips) || defined (__mips__)) +# define OSF_MIPS +# include +# endif + +/* UTek's /bin/cc on the 4300 has no architecture specific cpp define by + default, but _MACH_IND_SYS_TYPES is defined in . Combine + that with a couple of other things and we'll have a unique match. */ +# if !defined (tek4300) && defined (unix) && defined (m68k) && defined (mc68000) && defined (mc68020) && defined (_MACH_IND_SYS_TYPES) +# define tek4300 /* Define by emacs, but not by other users. */ +# endif + +/* AC_FUNC_GETLOADAVG thinks QNX is SVR4, but it isn't. */ +# if defined(__QNX__) +# undef SVR4 +# endif + +/* VAX C can't handle multi-line #ifs, or lines longer than 256 chars. */ +# ifndef LOAD_AVE_TYPE + +# ifdef MORE_BSD +# define LOAD_AVE_TYPE long +# endif + +# ifdef sun +# define LOAD_AVE_TYPE long +# endif + +# ifdef decstation +# define LOAD_AVE_TYPE long +# endif + +# ifdef _SEQUENT_ +# define LOAD_AVE_TYPE long +# endif + +# ifdef sgi +# define LOAD_AVE_TYPE long +# endif + +# ifdef SVR4 +# define LOAD_AVE_TYPE long +# endif + +# ifdef sony_news +# define LOAD_AVE_TYPE long +# endif + +# ifdef sequent +# define LOAD_AVE_TYPE long +# endif + +# ifdef OSF_ALPHA +# define LOAD_AVE_TYPE long +# endif + +# if defined (ardent) && defined (titan) +# define LOAD_AVE_TYPE long +# endif + +# ifdef tek4300 +# define LOAD_AVE_TYPE long +# endif + +# if defined(alliant) && defined(i860) /* Alliant FX/2800 */ +# define LOAD_AVE_TYPE long +# endif + +# ifdef _AIX +# define LOAD_AVE_TYPE long +# endif + +# ifdef convex +# define LOAD_AVE_TYPE double +# ifndef LDAV_CVT +# define LDAV_CVT(n) (n) +# endif +# endif + +# endif /* No LOAD_AVE_TYPE. */ + +# ifdef OSF_ALPHA +/* defines an incorrect value for FSCALE on Alpha OSF/1, + according to ghazi@noc.rutgers.edu. */ +# undef FSCALE +# define FSCALE 1024.0 +# endif + +# if defined(alliant) && defined(i860) /* Alliant FX/2800 */ +/* defines an incorrect value for FSCALE on an + Alliant FX/2800 Concentrix 2.2, according to ghazi@noc.rutgers.edu. */ +# undef FSCALE +# define FSCALE 100.0 +# endif + + +# ifndef FSCALE + +/* SunOS and some others define FSCALE in sys/param.h. */ + +# ifdef MORE_BSD +# define FSCALE 2048.0 +# endif + +# if defined(MIPS) || defined(SVR4) || defined(decstation) +# define FSCALE 256 +# endif + +# if defined (sgi) || defined (sequent) +/* Sometimes both MIPS and sgi are defined, so FSCALE was just defined + above under #ifdef MIPS. But we want the sgi value. */ +# undef FSCALE +# define FSCALE 1000.0 +# endif + +# if defined (ardent) && defined (titan) +# define FSCALE 65536.0 +# endif + +# ifdef tek4300 +# define FSCALE 100.0 +# endif + +# ifdef _AIX +# define FSCALE 65536.0 +# endif + +# endif /* Not FSCALE. */ + +# if !defined (LDAV_CVT) && defined (FSCALE) +# define LDAV_CVT(n) (((double) (n)) / FSCALE) +# endif + + +# if defined(sgi) || (defined(mips) && !defined(BSD)) +# define FIXUP_KERNEL_SYMBOL_ADDR(nl) ((nl)[0].n_value &= ~(1 << 31)) +# endif + + +# if !defined (KERNEL_FILE) && defined (sequent) +# define KERNEL_FILE "/dynix" +# endif + +# if !defined (KERNEL_FILE) && defined (hpux) +# define KERNEL_FILE "/hp-ux" +# endif + +# if !defined(KERNEL_FILE) && (defined(_SEQUENT_) || defined(MIPS) || defined(SVR4) || defined(ISC) || defined (sgi) || (defined (ardent) && defined (titan))) +# define KERNEL_FILE "/unix" +# endif + + +# if !defined (LDAV_SYMBOL) && defined (alliant) +# define LDAV_SYMBOL "_Loadavg" +# endif + +# if !defined(LDAV_SYMBOL) && ((defined(hpux) && !defined(hp9000s300)) || defined(_SEQUENT_) || defined(SVR4) || defined(ISC) || defined(sgi) || (defined (ardent) && defined (titan)) || defined (_AIX)) +# define LDAV_SYMBOL "avenrun" +# endif + +# ifdef HAVE_UNISTD_H +# include +# endif + +# include + +/* LOAD_AVE_TYPE should only get defined if we're going to use the + nlist method. */ +# if !defined(LOAD_AVE_TYPE) && (defined(BSD) || defined(LDAV_CVT) || defined(KERNEL_FILE) || defined(LDAV_SYMBOL)) +# define LOAD_AVE_TYPE double +# endif + +# ifdef LOAD_AVE_TYPE + +# ifndef VMS +# ifndef __linux__ +# ifdef HAVE_NLIST_H +# include +# else +# include +# endif + +# ifdef SUNOS_5 +# include +# include +# include +# endif + +# if defined (hpux) && defined (HAVE_PSTAT_GETDYNAMIC) +# include +# endif + +# ifndef KERNEL_FILE +# define KERNEL_FILE "/vmunix" +# endif /* KERNEL_FILE */ + +# ifndef LDAV_SYMBOL +# define LDAV_SYMBOL "_avenrun" +# endif /* LDAV_SYMBOL */ +# endif /* __linux__ */ + +# else /* VMS */ + +# ifndef eunice +# include +# include +# else /* eunice */ +# include +# endif /* eunice */ +# endif /* VMS */ + +# ifndef LDAV_CVT +# define LDAV_CVT(n) ((double) (n)) +# endif /* !LDAV_CVT */ + +# endif /* LOAD_AVE_TYPE */ + +# if defined(__GNU__) && !defined (NeXT) +/* Note that NeXT Openstep defines __GNU__ even though it should not. */ +/* GNU system acts much like NeXT, for load average purposes, + but not exactly. */ +# define NeXT +# define host_self mach_host_self +# endif + +# ifdef NeXT +# ifdef HAVE_MACH_MACH_H +# include +# else +# include +# endif +# endif /* NeXT */ + +# ifdef sgi +# include +# endif /* sgi */ + +# ifdef UMAX +# include +# include +# include +# include +# include + +# ifdef UMAX_43 +# include +# include +# include +# include +# include +# else /* Not UMAX_43. */ +# include +# include +# include +# include +# include +# include +# endif /* Not UMAX_43. */ +# endif /* UMAX */ + +# ifdef DGUX +# include +# endif + +# if defined(HAVE_FCNTL_H) || defined(_POSIX_VERSION) +# include +# else +# include +# endif + + +/* Avoid static vars inside a function since in HPUX they dump as pure. */ + +# ifdef NeXT +static processor_set_t default_set; +static int getloadavg_initialized; +# endif /* NeXT */ + +# ifdef UMAX +static unsigned int cpus = 0; +static unsigned int samples; +# endif /* UMAX */ + +# ifdef DGUX +static struct dg_sys_info_load_info load_info; /* what-a-mouthful! */ +# endif /* DGUX */ + +#if !defined(HAVE_LIBKSTAT) && defined(LOAD_AVE_TYPE) +/* File descriptor open to /dev/kmem or VMS load ave driver. */ +static int channel; +/* Nonzero iff channel is valid. */ +static int getloadavg_initialized; +/* Offset in kmem to seek to read load average, or 0 means invalid. */ +static long offset; + +#if !defined(VMS) && !defined(sgi) && !defined(__linux__) +static struct nlist nl[2]; +#endif /* Not VMS or sgi */ + +#ifdef SUNOS_5 +static kvm_t *kd; +#endif /* SUNOS_5 */ + +#endif /* LOAD_AVE_TYPE && !HAVE_LIBKSTAT */ + +/* Put the 1 minute, 5 minute and 15 minute load averages + into the first NELEM elements of LOADAVG. + Return the number written (never more than 3, but may be less than NELEM), + or -1 if an error occurred. */ + +int +getloadavg (double loadavg[], int nelem) +{ + int elem = 0; /* Return value. */ + +# ifdef NO_GET_LOAD_AVG +# define LDAV_DONE + /* Set errno to zero to indicate that there was no particular error; + this function just can't work at all on this system. */ + errno = 0; + elem = -1; +# endif + +# if !defined (LDAV_DONE) && defined (HAVE_LIBKSTAT) +/* Use libkstat because we don't have to be root. */ +# define LDAV_DONE + kstat_ctl_t *kc; + kstat_t *ksp; + kstat_named_t *kn; + + kc = kstat_open (); + if (kc == 0) + return -1; + ksp = kstat_lookup (kc, "unix", 0, "system_misc"); + if (ksp == 0 ) + return -1; + if (kstat_read (kc, ksp, 0) == -1) + return -1; + + + kn = kstat_data_lookup (ksp, "avenrun_1min"); + if (kn == 0) + { + /* Return -1 if no load average information is available. */ + nelem = 0; + elem = -1; + } + + if (nelem >= 1) + loadavg[elem++] = (double) kn->value.ul/FSCALE; + + if (nelem >= 2) + { + kn = kstat_data_lookup (ksp, "avenrun_5min"); + if (kn != 0) + { + loadavg[elem++] = (double) kn->value.ul/FSCALE; + + if (nelem >= 3) + { + kn = kstat_data_lookup (ksp, "avenrun_15min"); + if (kn != 0) + loadavg[elem++] = (double) kn->value.ul/FSCALE; + } + } + } + + kstat_close (kc); +# endif /* HAVE_LIBKSTAT */ + +# if !defined (LDAV_DONE) && defined (hpux) && defined (HAVE_PSTAT_GETDYNAMIC) +/* Use pstat_getdynamic() because we don't have to be root. */ +# define LDAV_DONE +# undef LOAD_AVE_TYPE + + struct pst_dynamic dyn_info; + if (pstat_getdynamic (&dyn_info, sizeof (dyn_info), 0, 0) < 0) + return -1; + if (nelem > 0) + loadavg[elem++] = dyn_info.psd_avg_1_min; + if (nelem > 1) + loadavg[elem++] = dyn_info.psd_avg_5_min; + if (nelem > 2) + loadavg[elem++] = dyn_info.psd_avg_15_min; + +# endif /* hpux && HAVE_PSTAT_GETDYNAMIC */ + +# if !defined (LDAV_DONE) && defined (__linux__) +# define LDAV_DONE +# undef LOAD_AVE_TYPE + +# ifndef LINUX_LDAV_FILE +# define LINUX_LDAV_FILE "/proc/loadavg" +# endif + + char ldavgbuf[40]; + double load_ave[3]; + int fd, count; + + fd = open (LINUX_LDAV_FILE, O_RDONLY); + if (fd == -1) + return -1; + count = read (fd, ldavgbuf, 40); + (void) close (fd); + if (count <= 0) + return -1; + + /* The following sscanf must use the C locale. */ + setlocale (LC_NUMERIC, "C"); + count = sscanf (ldavgbuf, "%lf %lf %lf", + &load_ave[0], &load_ave[1], &load_ave[2]); + setlocale (LC_NUMERIC, ""); + if (count < 1) + return -1; + + for (elem = 0; elem < nelem && elem < count; elem++) + loadavg[elem] = load_ave[elem]; + + return elem; + +# endif /* __linux__ */ + +# if !defined (LDAV_DONE) && defined (__NetBSD__) +# define LDAV_DONE +# undef LOAD_AVE_TYPE + +# ifndef NETBSD_LDAV_FILE +# define NETBSD_LDAV_FILE "/kern/loadavg" +# endif + + unsigned long int load_ave[3], scale; + int count; + FILE *fp; + + fp = fopen (NETBSD_LDAV_FILE, "r"); + if (fp == NULL) + return -1; + count = fscanf (fp, "%lu %lu %lu %lu\n", + &load_ave[0], &load_ave[1], &load_ave[2], + &scale); + (void) fclose (fp); + if (count != 4) + return -1; + + for (elem = 0; elem < nelem; elem++) + loadavg[elem] = (double) load_ave[elem] / (double) scale; + + return elem; + +# endif /* __NetBSD__ */ + +# if !defined (LDAV_DONE) && defined (NeXT) +# define LDAV_DONE + /* The NeXT code was adapted from iscreen 3.2. */ + + host_t host; + struct processor_set_basic_info info; + unsigned info_count; + + /* We only know how to get the 1-minute average for this system, + so even if the caller asks for more than 1, we only return 1. */ + + if (!getloadavg_initialized) + { + if (processor_set_default (host_self (), &default_set) == KERN_SUCCESS) + getloadavg_initialized = 1; + } + + if (getloadavg_initialized) + { + info_count = PROCESSOR_SET_BASIC_INFO_COUNT; + if (processor_set_info (default_set, PROCESSOR_SET_BASIC_INFO, &host, + (processor_set_info_t) &info, &info_count) + != KERN_SUCCESS) + getloadavg_initialized = 0; + else + { + if (nelem > 0) + loadavg[elem++] = (double) info.load_average / LOAD_SCALE; + } + } + + if (!getloadavg_initialized) + return -1; +# endif /* NeXT */ + +# if !defined (LDAV_DONE) && defined (UMAX) +# define LDAV_DONE +/* UMAX 4.2, which runs on the Encore Multimax multiprocessor, does not + have a /dev/kmem. Information about the workings of the running kernel + can be gathered with inq_stats system calls. + We only know how to get the 1-minute average for this system. */ + + struct proc_summary proc_sum_data; + struct stat_descr proc_info; + double load; + register unsigned int i, j; + + if (cpus == 0) + { + register unsigned int c, i; + struct cpu_config conf; + struct stat_descr desc; + + desc.sd_next = 0; + desc.sd_subsys = SUBSYS_CPU; + desc.sd_type = CPUTYPE_CONFIG; + desc.sd_addr = (char *) &conf; + desc.sd_size = sizeof conf; + + if (inq_stats (1, &desc)) + return -1; + + c = 0; + for (i = 0; i < conf.config_maxclass; ++i) + { + struct class_stats stats; + bzero ((char *) &stats, sizeof stats); + + desc.sd_type = CPUTYPE_CLASS; + desc.sd_objid = i; + desc.sd_addr = (char *) &stats; + desc.sd_size = sizeof stats; + + if (inq_stats (1, &desc)) + return -1; + + c += stats.class_numcpus; + } + cpus = c; + samples = cpus < 2 ? 3 : (2 * cpus / 3); + } + + proc_info.sd_next = 0; + proc_info.sd_subsys = SUBSYS_PROC; + proc_info.sd_type = PROCTYPE_SUMMARY; + proc_info.sd_addr = (char *) &proc_sum_data; + proc_info.sd_size = sizeof (struct proc_summary); + proc_info.sd_sizeused = 0; + + if (inq_stats (1, &proc_info) != 0) + return -1; + + load = proc_sum_data.ps_nrunnable; + j = 0; + for (i = samples - 1; i > 0; --i) + { + load += proc_sum_data.ps_nrun[j]; + if (j++ == PS_NRUNSIZE) + j = 0; + } + + if (nelem > 0) + loadavg[elem++] = load / samples / cpus; +# endif /* UMAX */ + +# if !defined (LDAV_DONE) && defined (DGUX) +# define LDAV_DONE + /* This call can return -1 for an error, but with good args + it's not supposed to fail. The first argument is for no + apparent reason of type `long int *'. */ + dg_sys_info ((long int *) &load_info, + DG_SYS_INFO_LOAD_INFO_TYPE, + DG_SYS_INFO_LOAD_VERSION_0); + + if (nelem > 0) + loadavg[elem++] = load_info.one_minute; + if (nelem > 1) + loadavg[elem++] = load_info.five_minute; + if (nelem > 2) + loadavg[elem++] = load_info.fifteen_minute; +# endif /* DGUX */ + +# if !defined (LDAV_DONE) && defined (apollo) +# define LDAV_DONE +/* Apollo code from lisch@mentorg.com (Ray Lischner). + + This system call is not documented. The load average is obtained as + three long integers, for the load average over the past minute, + five minutes, and fifteen minutes. Each value is a scaled integer, + with 16 bits of integer part and 16 bits of fraction part. + + I'm not sure which operating system first supported this system call, + but I know that SR10.2 supports it. */ + + extern void proc1_$get_loadav (); + unsigned long load_ave[3]; + + proc1_$get_loadav (load_ave); + + if (nelem > 0) + loadavg[elem++] = load_ave[0] / 65536.0; + if (nelem > 1) + loadavg[elem++] = load_ave[1] / 65536.0; + if (nelem > 2) + loadavg[elem++] = load_ave[2] / 65536.0; +# endif /* apollo */ + +# if !defined (LDAV_DONE) && defined (OSF_MIPS) +# define LDAV_DONE + + struct tbl_loadavg load_ave; + table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave)); + loadavg[elem++] + = (load_ave.tl_lscale == 0 + ? load_ave.tl_avenrun.d[0] + : (load_ave.tl_avenrun.l[0] / (double) load_ave.tl_lscale)); +# endif /* OSF_MIPS */ + +# if !defined (LDAV_DONE) && (defined (__MSDOS__) || defined (WINDOWS32)) +# define LDAV_DONE + + /* A faithful emulation is going to have to be saved for a rainy day. */ + for ( ; elem < nelem; elem++) + { + loadavg[elem] = 0.0; + } +# endif /* __MSDOS__ || WINDOWS32 */ + +# if !defined (LDAV_DONE) && defined (OSF_ALPHA) +# define LDAV_DONE + + struct tbl_loadavg load_ave; + table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave)); + for (elem = 0; elem < nelem; elem++) + loadavg[elem] + = (load_ave.tl_lscale == 0 + ? load_ave.tl_avenrun.d[elem] + : (load_ave.tl_avenrun.l[elem] / (double) load_ave.tl_lscale)); +# endif /* OSF_ALPHA */ + +# if !defined (LDAV_DONE) && defined (VMS) + /* VMS specific code -- read from the Load Ave driver. */ + + LOAD_AVE_TYPE load_ave[3]; + static int getloadavg_initialized = 0; +# ifdef eunice + struct + { + int dsc$w_length; + char *dsc$a_pointer; + } descriptor; +# endif + + /* Ensure that there is a channel open to the load ave device. */ + if (!getloadavg_initialized) + { + /* Attempt to open the channel. */ +# ifdef eunice + descriptor.dsc$w_length = 18; + descriptor.dsc$a_pointer = "$$VMS_LOAD_AVERAGE"; +# else + $DESCRIPTOR (descriptor, "LAV0:"); +# endif + if (sys$assign (&descriptor, &channel, 0, 0) & 1) + getloadavg_initialized = 1; + } + + /* Read the load average vector. */ + if (getloadavg_initialized + && !(sys$qiow (0, channel, IO$_READVBLK, 0, 0, 0, + load_ave, 12, 0, 0, 0, 0) & 1)) + { + sys$dassgn (channel); + getloadavg_initialized = 0; + } + + if (!getloadavg_initialized) + return -1; +# endif /* VMS */ + +# if !defined (LDAV_DONE) && defined(LOAD_AVE_TYPE) && !defined(VMS) + + /* UNIX-specific code -- read the average from /dev/kmem. */ + +# define LDAV_PRIVILEGED /* This code requires special installation. */ + + LOAD_AVE_TYPE load_ave[3]; + + /* Get the address of LDAV_SYMBOL. */ + if (offset == 0) + { +# ifndef sgi +# ifndef NLIST_STRUCT + strcpy (nl[0].n_name, LDAV_SYMBOL); + strcpy (nl[1].n_name, ""); +# else /* NLIST_STRUCT */ +# ifdef HAVE_STRUCT_NLIST_N_UN_N_NAME + nl[0].n_un.n_name = LDAV_SYMBOL; + nl[1].n_un.n_name = 0; +# else /* not HAVE_STRUCT_NLIST_N_UN_N_NAME */ + nl[0].n_name = LDAV_SYMBOL; + nl[1].n_name = 0; +# endif /* not HAVE_STRUCT_NLIST_N_UN_N_NAME */ +# endif /* NLIST_STRUCT */ + +# ifndef SUNOS_5 + if ( +# if !(defined (_AIX) && !defined (ps2)) + nlist (KERNEL_FILE, nl) +# else /* _AIX */ + knlist (nl, 1, sizeof (nl[0])) +# endif + >= 0) + /* Omit "&& nl[0].n_type != 0 " -- it breaks on Sun386i. */ + { +# ifdef FIXUP_KERNEL_SYMBOL_ADDR + FIXUP_KERNEL_SYMBOL_ADDR (nl); +# endif + offset = nl[0].n_value; + } +# endif /* !SUNOS_5 */ +# else /* sgi */ + int ldav_off; + + ldav_off = sysmp (MP_KERNADDR, MPKA_AVENRUN); + if (ldav_off != -1) + offset = (long) ldav_off & 0x7fffffff; +# endif /* sgi */ + } + + /* Make sure we have /dev/kmem open. */ + if (!getloadavg_initialized) + { +# ifndef SUNOS_5 + channel = open ("/dev/kmem", 0); + if (channel >= 0) + { + /* Set the channel to close on exec, so it does not + litter any child's descriptor table. */ +# ifdef F_SETFD +# ifndef FD_CLOEXEC +# define FD_CLOEXEC 1 +# endif + (void) fcntl (channel, F_SETFD, FD_CLOEXEC); +# endif + getloadavg_initialized = 1; + } +# else /* SUNOS_5 */ + /* We pass 0 for the kernel, corefile, and swapfile names + to use the currently running kernel. */ + kd = kvm_open (0, 0, 0, O_RDONLY, 0); + if (kd != 0) + { + /* nlist the currently running kernel. */ + kvm_nlist (kd, nl); + offset = nl[0].n_value; + getloadavg_initialized = 1; + } +# endif /* SUNOS_5 */ + } + + /* If we can, get the load average values. */ + if (offset && getloadavg_initialized) + { + /* Try to read the load. */ +# ifndef SUNOS_5 + if (lseek (channel, offset, 0) == -1L + || read (channel, (char *) load_ave, sizeof (load_ave)) + != sizeof (load_ave)) + { + close (channel); + getloadavg_initialized = 0; + } +# else /* SUNOS_5 */ + if (kvm_read (kd, offset, (char *) load_ave, sizeof (load_ave)) + != sizeof (load_ave)) + { + kvm_close (kd); + getloadavg_initialized = 0; + } +# endif /* SUNOS_5 */ + } + + if (offset == 0 || !getloadavg_initialized) + return -1; +# endif /* LOAD_AVE_TYPE and not VMS */ + +# if !defined (LDAV_DONE) && defined (LOAD_AVE_TYPE) /* Including VMS. */ + if (nelem > 0) + loadavg[elem++] = LDAV_CVT (load_ave[0]); + if (nelem > 1) + loadavg[elem++] = LDAV_CVT (load_ave[1]); + if (nelem > 2) + loadavg[elem++] = LDAV_CVT (load_ave[2]); + +# define LDAV_DONE +# endif /* !LDAV_DONE && LOAD_AVE_TYPE */ + +# ifdef LDAV_DONE + return elem; +# else + /* Set errno to zero to indicate that there was no particular error; + this function just can't work at all on this system. */ + errno = 0; + return -1; +# endif +} + +#endif /* ! HAVE_GETLOADAVG */ + +#ifdef TEST +#include "make.h" + +int +main (int argc, char **argv) +{ + int naptime = 0; + + if (argc > 1) + naptime = atoi (argv[1]); + + while (1) + { + double avg[3]; + int loads; + + errno = 0; /* Don't be misled if it doesn't set errno. */ + loads = getloadavg (avg, 3); + if (loads == -1) + { + perror ("Error getting load average"); + exit (1); + } + if (loads > 0) + printf ("1-minute: %f ", avg[0]); + if (loads > 1) + printf ("5-minute: %f ", avg[1]); + if (loads > 2) + printf ("15-minute: %f ", avg[2]); + if (loads > 0) + putchar ('\n'); + + if (naptime == 0) + break; + sleep (naptime); + } + + exit (0); +} +#endif /* TEST */ diff --git a/src/mkutil/make/getopt.c b/src/mkutil/make/getopt.c new file mode 100644 index 00000000..91534676 --- /dev/null +++ b/src/mkutil/make/getopt.c @@ -0,0 +1,1030 @@ +/* Getopt for GNU. + NOTE: getopt is now part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to drepper@gnu.org + before changing it! + + Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98 + Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to bug-glibc@gnu.org. + + 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* This tells Alpha OSF/1 not to define a getopt prototype in . + Ditto for AIX 3.2 and . */ +#ifndef _NO_PROTO +# define _NO_PROTO +#endif + +#ifdef HAVE_CONFIG_H +# include +#endif + +#if !defined __STDC__ || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +# ifndef const +# define const +# endif +#endif + +#include + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#define GETOPT_INTERFACE_VERSION 2 +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 +# include +# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION +# define ELIDE_CODE +# endif +#endif + +#ifndef ELIDE_CODE + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +/* Don't include stdlib.h for non-GNU C libraries because some of them + contain conflicting prototypes for getopt. */ +# include +# include +#endif /* GNU C library. */ + +#ifdef VMS +# include +# if HAVE_STRING_H - 0 +# include +# endif +#endif + +/* This is for other GNU distributions with internationalized messages. + When compiling libc, the _ macro is predefined. */ +#include "gettext.h" +#define _(msgid) gettext (msgid) + + +/* This version of `getopt' appears to the caller like standard Unix `getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As `getopt' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Setting the environment variable POSIXLY_CORRECT disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt.h" + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg = NULL; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* 1003.2 says this must be 1 before any call. */ +int optind = 1; + +/* Formerly, initialization of getopt depended on optind==0, which + causes problems with re-calling getopt as programs generally don't + know that. */ + +int __getopt_initialized = 0; + +/* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + +static char *nextchar; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters. + + PERMUTE is the default. We permute the contents of ARGV as we scan, + so that eventually all the non-options are at the end. This allows options + to be given in any order, even with programs that were not written to + expect this. + + RETURN_IN_ORDER is an option available to programs that were written + to expect options and other ARGV-elements in any order and that care about + the ordering of the two. We describe each non-option ARGV-element + as if it were the argument of an option with character code 1. + Using `-' as the first character of the list of option characters + selects this mode of operation. + + The special argument `--' forces an end of option-scanning regardless + of the value of `ordering'. In the case of RETURN_IN_ORDER, only + `--' can cause `getopt' to return -1 with `optind' != ARGC. */ + +static enum +{ + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER +} ordering; + +/* Value of POSIXLY_CORRECT environment variable. */ +static char *posixly_correct; + +#ifdef __GNU_LIBRARY__ +/* We want to avoid inclusion of string.h with non-GNU libraries + because there are many ways it can cause trouble. + On some systems, it contains special magic macros that don't work + in GCC. */ +# include +# define my_index strchr +#else + +# if HAVE_STRING_H +# include +# else +# include +# endif + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +#ifndef getenv +extern char *getenv (); +#endif + +static char * +my_index (const char *str, int chr) +{ + while (*str) + { + if (*str == chr) + return (char *) str; + str++; + } + return 0; +} + +/* If using GCC, we can safely declare strlen this way. + If not using GCC, it is ok not to declare it. */ +#ifdef __GNUC__ +/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. + That was relevant to code that was here before. */ +# if (!defined __STDC__ || !__STDC__) && !defined strlen +/* gcc with -traditional declares the built-in strlen to return int, + and has done so at least since version 2.4.5. -- rms. */ +extern int strlen (const char *); +# endif /* not __STDC__ */ +#endif /* __GNUC__ */ + +#endif /* not __GNU_LIBRARY__ */ + +/* Handle permutation of arguments. */ + +/* Describe the part of ARGV that contains non-options that have + been skipped. `first_nonopt' is the index in ARGV of the first of them; + `last_nonopt' is the index after the last of them. */ + +static int first_nonopt; +static int last_nonopt; + +#ifdef _LIBC +/* Bash 2.0 gives us an environment variable containing flags + indicating ARGV elements that should not be considered arguments. */ + +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; + +static int nonoption_flags_max_len; +static int nonoption_flags_len; + +static int original_argc; +static char *const *original_argv; + +/* Make sure the environment variable bash 2.0 puts in the environment + is valid for the getopt call we must make sure that the ARGV passed + to getopt is that one passed to the process. */ +static void __attribute__ ((unused)) +store_args_and_env (int argc, char *const *argv) +{ + /* XXX This is no good solution. We should rather copy the args so + that we can compare them later. But we must not use malloc(3). */ + original_argc = argc; + original_argv = argv; +} +# ifdef text_set_element +text_set_element (__libc_subinit, store_args_and_env); +# endif /* text_set_element */ + +# define SWAP_FLAGS(ch1, ch2) \ + if (nonoption_flags_len > 0) \ + { \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ + } +#else /* !_LIBC */ +# define SWAP_FLAGS(ch1, ch2) +#endif /* _LIBC */ + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + `first_nonopt' and `last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +#if defined __STDC__ && __STDC__ +static void exchange (char **); +#endif + +static void +exchange (char **argv) +{ + int bottom = first_nonopt; + int middle = last_nonopt; + int top = optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + +#ifdef _LIBC + /* First make sure the handling of the `__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) + { + /* We must extend the array. The user plays games with us and + presents new arguments. */ + char *new_str = malloc (top + 1); + if (new_str == NULL) + nonoption_flags_len = nonoption_flags_max_len = 0; + else + { + memset (__mempcpy (new_str, __getopt_nonoption_flags, + nonoption_flags_max_len), + '\0', top + 1 - nonoption_flags_max_len); + nonoption_flags_max_len = top + 1; + __getopt_nonoption_flags = new_str; + } + } +#endif + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + SWAP_FLAGS (bottom + i, middle + i); + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + first_nonopt += (optind - last_nonopt); + last_nonopt = optind; +} + +/* Initialize the internal data when the first call is made. */ + +#if defined __STDC__ && __STDC__ +static const char *_getopt_initialize (int, char *const *, const char *); +#endif +static const char * +_getopt_initialize (int argc, char *const *argv, const char *optstring) +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + first_nonopt = last_nonopt = optind; + + nextchar = NULL; + + posixly_correct = getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + ordering = REQUIRE_ORDER; + ++optstring; + } + else if (posixly_correct != NULL) + ordering = REQUIRE_ORDER; + else + ordering = PERMUTE; + +#ifdef _LIBC + if (posixly_correct == NULL + && argc == original_argc && argv == original_argv) + { + if (nonoption_flags_max_len == 0) + { + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') + nonoption_flags_max_len = -1; + else + { + const char *orig_str = __getopt_nonoption_flags; + int len = nonoption_flags_max_len = strlen (orig_str); + if (nonoption_flags_max_len < argc) + nonoption_flags_max_len = argc; + __getopt_nonoption_flags = + (char *) malloc (nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) + nonoption_flags_max_len = -1; + else + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', nonoption_flags_max_len - len); + } + } + nonoption_flags_len = nonoption_flags_max_len; + } + else + nonoption_flags_len = 0; +#endif + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If `getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If `getopt' finds another option character, it returns that character, + updating `optind' and `nextchar' so that the next call to `getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, `getopt' returns -1. + Then `optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set `opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in `optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in `optarg', otherwise `optarg' is set to zero. + + If OPTSTRING starts with `-' or `+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with `--' instead of `-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a `=', or else the in next ARGV-element. + When `getopt' finds a long-named option, it returns 0 if that option's + `flag' field is nonzero, the value of the option's `val' field + if the `flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of `struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal (int argc, char *const *argv, const char *optstring, + const struct option *longopts, int *longind, int long_only) +{ + optarg = NULL; + + if (optind == 0 || !__getopt_initialized) + { + if (optind == 0) + optind = 1; /* Don't scan ARGV[0], the program name. */ + optstring = _getopt_initialize (argc, argv, optstring); + __getopt_initialized = 1; + } + + /* Test whether ARGV[optind] points to a non-option argument. + Either it does not have option syntax, or there is an environment flag + from the shell indicating it is not an option. The later information + is only used when the used in the GNU libc. */ +#ifdef _LIBC +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ + || (optind < nonoption_flags_len \ + && __getopt_nonoption_flags[optind] == '1')) +#else +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') +#endif + + if (nextchar == NULL || *nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been + moved back by the user (who may also have changed the arguments). */ + if (last_nonopt > optind) + last_nonopt = optind; + if (first_nonopt > optind) + first_nonopt = optind; + + if (ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (last_nonopt != optind) + first_nonopt = optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (optind < argc && NONOPTION_P) + optind++; + last_nonopt = optind; + } + + /* The special ARGV-element `--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (optind != argc && !strcmp (argv[optind], "--")) + { + optind++; + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (first_nonopt == last_nonopt) + first_nonopt = optind; + last_nonopt = argc; + + optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (first_nonopt != last_nonopt) + optind = first_nonopt; + return -1; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if (NONOPTION_P) + { + if (ordering == REQUIRE_ORDER) + return -1; + optarg = argv[optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + nextchar = (argv[optind] + 1 + + (longopts != NULL && argv[optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[optind][1] == '-' + || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = -1; + int option_index; + + for (nameend = nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) + == (unsigned int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (opterr) + fprintf (stderr, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[optind]); + nextchar += strlen (nextchar); + optind++; + optopt = 0; + return '?'; + } + + if (pfound != NULL) + { + option_index = indfound; + optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (opterr) + if (argv[optind - 1][1] == '-') + /* --option */ + fprintf (stderr, + _("%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); + else + /* +option or -option */ + fprintf (stderr, + _("%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[optind - 1][0], pfound->name); + + nextchar += strlen (nextchar); + + optopt = pfound->val; + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (opterr) + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + nextchar += strlen (nextchar); + optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[optind][1] == '-' + || my_index (optstring, *nextchar) == NULL) + { + if (opterr) + { + if (argv[optind][1] == '-') + /* --option */ + fprintf (stderr, _("%s: unrecognized option `--%s'\n"), + argv[0], nextchar); + else + /* +option or -option */ + fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[optind][0], nextchar); + } + nextchar = (char *) ""; + optind++; + optopt = 0; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *nextchar++; + char *temp = my_index (optstring, c); + + /* Increment `optind' when we start to process its last character. */ + if (*nextchar == '\0') + ++optind; + + if (temp == NULL || c == ':') + { + if (opterr) + { + if (posixly_correct) + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, _("%s: illegal option -- %c\n"), + argv[0], c); + else + fprintf (stderr, _("%s: invalid option -- %c\n"), + argv[0], c); + } + optopt = c; + return '?'; + } + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';') + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (opterr) + { + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, _("%s: option requires an argument -- %c\n"), + argv[0], c); + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + + /* optarg is now the argument, see if it's in the + table of longopts. */ + + for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + if (ambig && !exact) + { + if (opterr) + fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[optind]); + nextchar += strlen (nextchar); + optind++; + return '?'; + } + if (pfound != NULL) + { + option_index = indfound; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (opterr) + fprintf (stderr, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); + + nextchar += strlen (nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (opterr) + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + nextchar += strlen (nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + nextchar = NULL; + return 'W'; /* Let the application handle it. */ + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*nextchar != '\0') + { + optarg = nextchar; + optind++; + } + else + optarg = NULL; + nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (opterr) + { + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, + _("%s: option requires an argument -- %c\n"), + argv[0], c); + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + nextchar = NULL; + } + } + return c; + } +} + +int +getopt (int argc, char *const *argv, const char *optstring) +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0); +} + +#endif /* Not ELIDE_CODE. */ + +#ifdef TEST + +/* Compile with -DTEST to make an executable for use in testing + the above definition of `getopt'. */ + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == -1) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/src/mkutil/make/getopt.h b/src/mkutil/make/getopt.h new file mode 100644 index 00000000..fb30719a --- /dev/null +++ b/src/mkutil/make/getopt.h @@ -0,0 +1,133 @@ +/* Declarations for getopt. + Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to bug-glibc@gnu.org. + + 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifndef _GETOPT_H +#define _GETOPT_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + +struct option +{ +#if defined (__STDC__) && __STDC__ + const char *name; +#else + char *name; +#endif + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the `has_arg' field of `struct option'. */ + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +#if defined (__STDC__) && __STDC__ +#ifdef __GNU_LIBRARY__ +/* Many other libraries have conflicting prototypes for getopt, with + differences in the consts, in stdlib.h. To avoid compilation + errors, only prototype getopt for the GNU C library. */ +extern int getopt (int argc, char *const *argv, const char *shortopts); +#else /* not __GNU_LIBRARY__ */ +extern int getopt (); +#endif /* __GNU_LIBRARY__ */ +extern int getopt_long (int argc, char *const *argv, const char *shortopts, + const struct option *longopts, int *longind); +extern int getopt_long_only (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind); + +/* Internal only. Users should not call this directly. */ +extern int _getopt_internal (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind, + int long_only); +#else /* not __STDC__ */ +extern int getopt (); +extern int getopt_long (); +extern int getopt_long_only (); + +extern int _getopt_internal (); +#endif /* __STDC__ */ + +#ifdef __cplusplus +} +#endif + +#endif /* getopt.h */ diff --git a/src/mkutil/make/getopt1.c b/src/mkutil/make/getopt1.c new file mode 100644 index 00000000..ecdf0f5c --- /dev/null +++ b/src/mkutil/make/getopt1.c @@ -0,0 +1,180 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98 + Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to bug-glibc@gnu.org. + + 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "getopt.h" + +#if !defined __STDC__ || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +#ifndef const +#define const +#endif +#endif + +#include + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#define GETOPT_INTERFACE_VERSION 2 +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 +#include +#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION +#define ELIDE_CODE +#endif +#endif + +#ifndef ELIDE_CODE + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +#include +#endif + +#ifndef NULL +#define NULL 0 +#endif + +int +getopt_long (int argc, char *const *argv, const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, argv, options, long_options, opt_index, 0); +} + +/* Like getopt_long, but '-' as well as '--' can indicate a long option. + If an option that starts with '-' (not '--') doesn't match a long option, + but does match a short option, it is parsed as a short option + instead. */ + +int +getopt_long_only (int argc, char *const *argv, const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, argv, options, long_options, opt_index, 1); +} + + +#endif /* Not ELIDE_CODE. */ + +#ifdef TEST + +#include + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = + { + {"add", 1, 0, 0}, + {"append", 0, 0, 0}, + {"delete", 1, 0, 0}, + {"verbose", 0, 0, 0}, + {"create", 0, 0, 0}, + {"file", 1, 0, 0}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "abc:d:0123456789", + long_options, &option_index); + if (c == -1) + break; + + switch (c) + { + case 0: + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case 'd': + printf ("option d with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/src/mkutil/make/gettext.h b/src/mkutil/make/gettext.h new file mode 100644 index 00000000..ea67f308 --- /dev/null +++ b/src/mkutil/make/gettext.h @@ -0,0 +1,59 @@ +/* Convenience header for conditional use of GNU . + Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifndef _LIBGETTEXT_H +#define _LIBGETTEXT_H 1 + +/* NLS can be disabled through the configure --disable-nls option. */ +#if ENABLE_NLS + +/* Get declarations of GNU message catalog functions. */ +# include + +#else + +/* Disabled NLS. + The casts to 'const char *' serve the purpose of producing warnings + for invalid uses of the value returned from these functions. + On pre-ANSI systems without 'const', the config.h file is supposed to + contain "#define const". */ +# define gettext(Msgid) ((const char *) (Msgid)) +# define dgettext(Domainname, Msgid) ((const char *) (Msgid)) +# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid)) +# define ngettext(Msgid1, Msgid2, N) \ + ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) +# define dngettext(Domainname, Msgid1, Msgid2, N) \ + ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) +# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ + ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) +# define textdomain(Domainname) ((const char *) (Domainname)) +# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname)) +# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset)) + +#endif + +/* A pseudo function call that serves as a marker for the automated + extraction of messages, but does not call gettext(). The run-time + translation is done at a different place in the code. + The argument, String, should be a literal string. Concatenated strings + and other string expressions won't work. + The macro's expansion is not parenthesized, so that it is suitable as + initializer for static 'char[]' or 'const char[]' variables. */ +#define gettext_noop(String) String + +#endif /* _LIBGETTEXT_H */ diff --git a/src/mkutil/make/glob/.cvsignore b/src/mkutil/make/glob/.cvsignore new file mode 100644 index 00000000..efc8094e --- /dev/null +++ b/src/mkutil/make/glob/.cvsignore @@ -0,0 +1,2 @@ +Makefile Makefile.in +.deps diff --git a/src/mkutil/make/glob/COPYING.LIB b/src/mkutil/make/glob/COPYING.LIB new file mode 100644 index 00000000..bbe3fe19 --- /dev/null +++ b/src/mkutil/make/glob/COPYING.LIB @@ -0,0 +1,481 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/src/mkutil/make/glob/CVS/Entries b/src/mkutil/make/glob/CVS/Entries new file mode 100644 index 00000000..5ff7176f --- /dev/null +++ b/src/mkutil/make/glob/CVS/Entries @@ -0,0 +1,13 @@ +/.cvsignore/1.2/Wed Sep 11 16:55:45 2002// +/COPYING.LIB/1.1/Fri Oct 8 00:11:55 1993// +/ChangeLog/1.27/Thu Jan 30 05:22:52 2003// +/Makefile.am/1.7/Tue Mar 25 03:21:43 2003// +/Makefile.ami/1.2/Thu Jul 30 20:59:59 1998// +/SCOPTIONS/1.1/Thu May 9 18:29:32 1996// +/SMakefile/1.2/Thu Jul 30 21:00:00 1998// +/configure.bat/1.3/Mon Apr 7 07:24:12 1997// +/fnmatch.c/1.9/Tue Sep 14 00:18:14 1999// +/fnmatch.h/1.6/Thu Jul 22 04:20:28 1999// +/glob.c/1.22/Sat Jan 22 05:43:03 2000// +/glob.h/1.15/Thu Jan 30 05:22:52 2003// +D diff --git a/src/mkutil/make/glob/CVS/Repository b/src/mkutil/make/glob/CVS/Repository new file mode 100644 index 00000000..b6b6af54 --- /dev/null +++ b/src/mkutil/make/glob/CVS/Repository @@ -0,0 +1 @@ +make/glob diff --git a/src/mkutil/make/glob/CVS/Root b/src/mkutil/make/glob/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/glob/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/glob/ChangeLog b/src/mkutil/make/glob/ChangeLog new file mode 100644 index 00000000..75c68881 --- /dev/null +++ b/src/mkutil/make/glob/ChangeLog @@ -0,0 +1,142 @@ +2003-01-30 Paul D. Smith + + * glob.h: Patch for FreeBSD by Mike Barcroft + Reported by Gerald Pfeifer . On + FreeBSD, declare __size_t to simply size_t. + +2002-04-22 Paul D. Smith + + * Makefile.am: Use automake 1.6. + Use new automake condition USE_LOCAL_GLOB to decide whether or not + to build the local GNU glob library or use the system one. + +1999-09-12 Paul D. Smith + + * fnmatch.c: Last GLIBC version wouldn't compile outside of GLIBC + (undefined reference to internal_function). Update to the latest + version + +1999-09-11 Paul Eggert + + * glob.h (glob): If #defining to glob64, do this before + declaring it, so that all declarations and uses match, and + do not declare glob64, to avoid a declaration clash. + (globfree): Likewise with globfree64. + +1999-09-08 Eli Zaretskii + + * glob.c (prefix_array) [__MSDOS__,WINDOWS32]: Keep the trailing + slash unless DIRNAME is just "x:/". + +1999-09-06 Paul D. Smith + + * fnmatch.c: Update to latest version from GLIBC. + +1999-07-21 Paul D. Smith + + * glob.c, glob.h, fnmatch.c, fnmatch.h: Update to latest version + from GLIBC. + + * fnmatch.c (internal_fnmatch): Use K&R definition syntax, not ANSI. + (__strchrnul): This won't exist outside GLIBC, so create one. + + * glob.c: Move getlogin{,_r} prototypes below glob.h to get __P() + macro. + +1998-08-05 Paul D. Smith + + * configure.in: Remove; configuration for glob is handled by the + make configure.in. + +1998-07-29 Paul D. Smith + + * glob.c, fnmatch.c: New versions from the GLIBC folks (Ulrich + Drepper). Fixes a bug reported by Eli Zaretski. Integrates + DOS/Windows32 support. + +1998-07-27 Kaveh R. Ghazi + + * glob.c (glob): Cast away const on assignment of pattern to dirname. + Cast the return type of __alloca() for traditional C compilers. + +1998-07-23 Paul D. Smith + + * glob.c, fnmatch.c: New versions of these files from the GLIBC + folks (Ulrich Drepper). Had to re-integrate some DOS/Windows + code. + +1998-07-10 Paul D. Smith + + * glob.c (glob_in_dir): If no meta chars exist in PATTERN and + GLOB_NOCHECK is present, don't look for the file--whether it's + found or not, we'll always return it, so why bother searching? + + Also, if we are searching and there are no meta chars, don't + bother trying fnmatch() if the strcmp() fails. + +1998-05-30 Eli Zaretskii + + * glob.c (glob) [__MSDOS__, WINDOWS32]: Compute the directory and + filename parts of the pattern correctly when it includes a drive + spec. Disallow wildcards in the drive spec. Prevent recursion + when dirname is of the form "d:/" or "d:". + (prefix_array) [__MSDOS__, WINDOWS32]: Don't append a slash to + "d:/" and "d:". + +1998-05-13 Paul D. Smith + + * SMakefile, Makefile.ami, glob.c, glob.h, fnmatch.c: Updated from + the latest glibc version. + +1998-04-17 Paul D. Smith + + * configure.in: Create a config.h file instead of setting things + on the compile line. This is because when build.sh runs it merely + passes -DHAVE_CONFIG_H to the glob files, just as it does to the + make files. + * config.h.in: Created by autoheader. + +Tue Aug 12 10:52:34 1997 Paul D. Smith + + * configure.in: Require autoconf 2.12. + + * glob: Updates from latest GNU libc glob code. + + * glob.c,glob.h,fnmatch.h: Change all WIN32 references to WINDOWS32. + + * glob.h: OSF4 defines macros in such a way that GLOB_ALTDIRFUNC + is not defined. Added a test to the #if which defines it if + _GNU_SOURCE is defined; that's set by both glob.c and GNU make. + + * glob.c: SunOS4 w/ cc needs #include , since assert.h + requires stderr but doesn't include stdio.h :-/. + (next_brace_sub): De-protoize function definition. + (glob): Cast __alloca(); on SunOS4 it uses the default return type + of int. + (glob): Irix defines getlogin_r() to return a char*; move the + extern for that into the _LIBC area since it isn't used except in + LIBC anyway. Likewise, move extern getlogin() into the "else". + +Sat Jul 20 21:55:31 1996 Roland McGrath + + Win32 hacks from . + * posix/glob.c [WIN32]: Don't include ; don't use d_ino; + use void * for my_realloc; include for alloca. + (glob) [WIN32]: Use "c:/users/default" for ~ if no HOME variable. + * posix/fnmatch.h [WIN32]: Use prototypes even if [!__STDC__]. + * posix/glob.h: Likewise. + +Fri Jul 19 16:56:41 1996 Roland McGrath + + * posix/glob.h [!_AMIGA && !VMS]: Check this instead of just [!_AMIGA] + for `struct stat;' forward decl. + +Sat Jun 22 10:44:09 1996 Roland McGrath + + * posix/glob.c: Include only [HAVE_ALLOCA_H], not [sparc]. + +Fri Jun 21 00:27:51 1996 Roland McGrath + + * posix/fnmatch.c (fnmatch): Fix \*[*?]+ case to increment name ptr + only for ?s, not for *s. Fix from Chet Ramey. + diff --git a/src/mkutil/make/glob/Makefile.am b/src/mkutil/make/glob/Makefile.am new file mode 100644 index 00000000..b777015a --- /dev/null +++ b/src/mkutil/make/glob/Makefile.am @@ -0,0 +1,14 @@ +# -*-Makefile-*-, or close enough + +AUTOMAKE_OPTIONS = 1.7.3 foreign + +# Only build the library when the system doesn't already have GNU glob. +if USE_LOCAL_GLOB + noinst_LIBRARIES = libglob.a +endif + +libglob_a_SOURCES = glob.c glob.h fnmatch.c fnmatch.h + + +EXTRA_DIST = COPYING.LIB Makefile.ami SCOPTIONS SMakefile \ + configure.bat diff --git a/src/mkutil/make/glob/Makefile.ami b/src/mkutil/make/glob/Makefile.ami new file mode 100644 index 00000000..d3e3d40c --- /dev/null +++ b/src/mkutil/make/glob/Makefile.ami @@ -0,0 +1,69 @@ +# Makefile for standalone distribution of libglob.a (fnmatch, glob). + +# Copyright (C) 1991, 92, 93, 94, 95, 97, 98 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public License +# as published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. + +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. + +# You should have received a copy of the GNU Library General Public +# License along with this library; see the file COPYING.LIB. If +# not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Ultrix 2.2 make doesn't expand the value of VPATH. +VPATH = /glob/ +# This must repeat the value, because configure will remove `VPATH = .'. +srcdir = /glob/ + +CC = sc +RM = delete +CPPFLAGS = +CFLAGS = + +# Information determined by configure. +DEFS = Define HAVE_HEADER_STDC Define HAVE_UNISTD_H Define HAVE_STRING_H \ + Define HAVE_DIRENT_H + +# How to invoke ar. +AR = join +ARFLAGS = as + +# How to invoke ranlib. +RANLIB = ; + +.PHONY: all +all: glob.lib + +glob.lib : glob.o fnmatch.o + $(AR) $(ARFLAGS) $@ glob.o fnmatch.o + $(RANLIB) $@ + +# For some reason, Unix make wants the dependencies on the source files. +# Otherwise it refuses to use an implicit rule! +# And, get this: it doesn't work to use $(srcdir)foo.c!! +glob.o: $(srcdir)glob.h $(srcdir)fnmatch.h glob.c +fnmatch.o: $(srcdir)fnmatch.h fnmatch.c + +OUTPUT_OPTION = +.c.o: + $(CC) IDir "" \ + $(DEFS) $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION) + +.PHONY: clean realclean glob-clean glob-realclean distclean +clean glob-clean: + -$(RM) glob.lib "#?.o" core +distclean glob-realclean: clean + -$(RM) TAGS tags Makefile config.status config.h config.log +realcean: distclean + +# For inside the C library. +glob.tar glob.tar.Z: + $(MAKE) -C .. $@ diff --git a/src/mkutil/make/glob/SCOPTIONS b/src/mkutil/make/glob/SCOPTIONS new file mode 100644 index 00000000..f89daae1 --- /dev/null +++ b/src/mkutil/make/glob/SCOPTIONS @@ -0,0 +1,13 @@ +ERRORREXX +OPTIMIZE +NOVERSION +OPTIMIZERTIME +OPTIMIZERALIAS +DEFINE INCLUDEDIR="include:" +DEFINE LIBDIR="lib:" +DEFINE NO_ALLOCA +DEFINE NO_FLOAT +DEFINE NO_ARCHIVES +IGNORE=161 +IGNORE=100 +STARTUP=cres diff --git a/src/mkutil/make/glob/SMakefile b/src/mkutil/make/glob/SMakefile new file mode 100644 index 00000000..9dcb90b3 --- /dev/null +++ b/src/mkutil/make/glob/SMakefile @@ -0,0 +1,69 @@ +# Makefile for standalone distribution of libglob.a (fnmatch, glob). + +# Copyright (C) 1991, 92, 93, 94, 95, 97, 98 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public License +# as published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. + +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. + +# You should have received a copy of the GNU Library General Public +# License along with this library; see the file COPYING.LIB. If +# not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Ultrix 2.2 make doesn't expand the value of VPATH. +VPATH = /glob/ +# This must repeat the value, because configure will remove `VPATH = .'. +srcdir = /glob/ + +CC = sc +CPPFLAGS = +CFLAGS = +MAKE = smake +RM = delete + +# Information determined by configure. +DEFS = Define HAVE_HEADER_STDC Define HAVE_UNISTD_H Define HAVE_STRING_H \ + Define HAVE_DIRENT_H + +# How to invoke ar. +AR = join +ARFLAGS = as + +# How to invoke ranlib. +RANLIB = ; + +.PHONY: all +all: glob.lib + +glob.lib : glob.o fnmatch.o + $(AR) $(ARFLAGS) $@ glob.o fnmatch.o + $(RANLIB) $@ + +# For some reason, Unix make wants the dependencies on the source files. +# Otherwise it refuses to use an implicit rule! +# And, get this: it doesn't work to use $(srcdir)foo.c!! +glob.o: $(srcdir)glob.h $(srcdir)fnmatch.h glob.c +fnmatch.o: $(srcdir)fnmatch.h fnmatch.c + +.c.o: + $(CC) IDir "" \ + $(DEFS) $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION) + +.PHONY: clean realclean glob-clean glob-realclean distclean +clean glob-clean: + -$(RM) -f glob.lib *.o core +distclean glob-realclean: clean + -$(RM) -f TAGS tags Makefile config.status config.h config.log +realcean: distclean + +# For inside the C library. +glob.tar glob.tar.Z: + $(MAKE) -C .. $@ diff --git a/src/mkutil/make/glob/configure.bat b/src/mkutil/make/glob/configure.bat new file mode 100644 index 00000000..b6104e13 --- /dev/null +++ b/src/mkutil/make/glob/configure.bat @@ -0,0 +1,26 @@ +@echo off +echo Configuring glob for DJGPP +rem This batch file assumes a unix-type "sed" program + +echo # Makefile generated by "configure.bat"> Makefile + +if exist config.sed del config.sed + +echo "s/@srcdir@/./ ">> config.sed +echo "s/@CC@/gcc/ ">> config.sed +echo "s/@CFLAGS@/-O2 -g/ ">> config.sed +echo "s/@CPPFLAGS@/-DHAVE_CONFIG_H -I../ ">> config.sed +echo "s/@AR@/ar/ ">> config.sed +echo "s/@RANLIB@/ranlib/ ">> config.sed +echo "s/@LDFLAGS@// ">> config.sed +echo "s/@DEFS@// ">> config.sed +echo "s/@ALLOCA@// ">> config.sed +echo "s/@LIBS@// ">> config.sed +echo "s/@LIBOBJS@// ">> config.sed +echo "s/^Makefile *:/_Makefile:/ ">> config.sed +echo "s/^config.h *:/_config.h:/ ">> config.sed + +sed -e "s/^\"//" -e "s/\"$//" -e "s/[ ]*$//" config.sed > config2.sed +sed -f config2.sed Makefile.in >> Makefile +del config.sed +del config2.sed diff --git a/src/mkutil/make/glob/fnmatch.c b/src/mkutil/make/glob/fnmatch.c new file mode 100644 index 00000000..1f4ead5f --- /dev/null +++ b/src/mkutil/make/glob/fnmatch.c @@ -0,0 +1,488 @@ +/* Copyright (C) 1991, 92, 93, 96, 97, 98, 99 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#if HAVE_CONFIG_H +# include +#endif + +/* Enable GNU extensions in fnmatch.h. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include +#include +#include + +#if HAVE_STRING_H || defined _LIBC +# include +#else +# include +#endif + +#if defined STDC_HEADERS || defined _LIBC +# include +#endif + +/* For platform which support the ISO C amendement 1 functionality we + support user defined character classes. */ +#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) +/* Solaris 2.5 has a bug: must be included before . */ +# include +# include +#endif + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#if defined _LIBC || !defined __GNU_LIBRARY__ + + +# if defined STDC_HEADERS || !defined isascii +# define ISASCII(c) 1 +# else +# define ISASCII(c) isascii(c) +# endif + +# ifdef isblank +# define ISBLANK(c) (ISASCII (c) && isblank (c)) +# else +# define ISBLANK(c) ((c) == ' ' || (c) == '\t') +# endif +# ifdef isgraph +# define ISGRAPH(c) (ISASCII (c) && isgraph (c)) +# else +# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) +# endif + +# define ISPRINT(c) (ISASCII (c) && isprint (c)) +# define ISDIGIT(c) (ISASCII (c) && isdigit (c)) +# define ISALNUM(c) (ISASCII (c) && isalnum (c)) +# define ISALPHA(c) (ISASCII (c) && isalpha (c)) +# define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) +# define ISLOWER(c) (ISASCII (c) && islower (c)) +# define ISPUNCT(c) (ISASCII (c) && ispunct (c)) +# define ISSPACE(c) (ISASCII (c) && isspace (c)) +# define ISUPPER(c) (ISASCII (c) && isupper (c)) +# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) + +# define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) + +# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) +/* The GNU C library provides support for user-defined character classes + and the functions from ISO C amendement 1. */ +# ifdef CHARCLASS_NAME_MAX +# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX +# else +/* This shouldn't happen but some implementation might still have this + problem. Use a reasonable default value. */ +# define CHAR_CLASS_MAX_LENGTH 256 +# endif + +# ifdef _LIBC +# define IS_CHAR_CLASS(string) __wctype (string) +# else +# define IS_CHAR_CLASS(string) wctype (string) +# endif +# else +# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ + +# define IS_CHAR_CLASS(string) \ + (STREQ (string, "alpha") || STREQ (string, "upper") \ + || STREQ (string, "lower") || STREQ (string, "digit") \ + || STREQ (string, "alnum") || STREQ (string, "xdigit") \ + || STREQ (string, "space") || STREQ (string, "print") \ + || STREQ (string, "punct") || STREQ (string, "graph") \ + || STREQ (string, "cntrl") || STREQ (string, "blank")) +# endif + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +# if !defined _LIBC && !defined getenv +extern char *getenv (); +# endif + +# ifndef errno +extern int errno; +# endif + +/* This function doesn't exist on most systems. */ + +# if !defined HAVE___STRCHRNUL && !defined _LIBC +static char * +__strchrnul (s, c) + const char *s; + int c; +{ + char *result = strchr (s, c); + if (result == NULL) + result = strchr (s, '\0'); + return result; +} +# endif + +# ifndef internal_function +/* Inside GNU libc we mark some function in a special way. In other + environments simply ignore the marking. */ +# define internal_function +# endif + +/* Match STRING against the filename pattern PATTERN, returning zero if + it matches, nonzero if not. */ +static int internal_fnmatch __P ((const char *pattern, const char *string, + int no_leading_period, int flags)) + internal_function; +static int +internal_function +internal_fnmatch (pattern, string, no_leading_period, flags) + const char *pattern; + const char *string; + int no_leading_period; + int flags; +{ + register const char *p = pattern, *n = string; + register unsigned char c; + +/* Note that this evaluates C many times. */ +# ifdef _LIBC +# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c)) +# else +# define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c)) +# endif + + while ((c = *p++) != '\0') + { + c = FOLD (c); + + switch (c) + { + case '?': + if (*n == '\0') + return FNM_NOMATCH; + else if (*n == '/' && (flags & FNM_FILE_NAME)) + return FNM_NOMATCH; + else if (*n == '.' && no_leading_period + && (n == string + || (n[-1] == '/' && (flags & FNM_FILE_NAME)))) + return FNM_NOMATCH; + break; + + case '\\': + if (!(flags & FNM_NOESCAPE)) + { + c = *p++; + if (c == '\0') + /* Trailing \ loses. */ + return FNM_NOMATCH; + c = FOLD (c); + } + if (FOLD ((unsigned char) *n) != c) + return FNM_NOMATCH; + break; + + case '*': + if (*n == '.' && no_leading_period + && (n == string + || (n[-1] == '/' && (flags & FNM_FILE_NAME)))) + return FNM_NOMATCH; + + for (c = *p++; c == '?' || c == '*'; c = *p++) + { + if (*n == '/' && (flags & FNM_FILE_NAME)) + /* A slash does not match a wildcard under FNM_FILE_NAME. */ + return FNM_NOMATCH; + else if (c == '?') + { + /* A ? needs to match one character. */ + if (*n == '\0') + /* There isn't another character; no match. */ + return FNM_NOMATCH; + else + /* One character of the string is consumed in matching + this ? wildcard, so *??? won't match if there are + less than three characters. */ + ++n; + } + } + + if (c == '\0') + /* The wildcard(s) is/are the last element of the pattern. + If the name is a file name and contains another slash + this does mean it cannot match. */ + return ((flags & FNM_FILE_NAME) && strchr (n, '/') != NULL + ? FNM_NOMATCH : 0); + else + { + const char *endp; + + endp = __strchrnul (n, (flags & FNM_FILE_NAME) ? '/' : '\0'); + + if (c == '[') + { + int flags2 = ((flags & FNM_FILE_NAME) + ? flags : (flags & ~FNM_PERIOD)); + + for (--p; n < endp; ++n) + if (internal_fnmatch (p, n, + (no_leading_period + && (n == string + || (n[-1] == '/' + && (flags + & FNM_FILE_NAME)))), + flags2) + == 0) + return 0; + } + else if (c == '/' && (flags & FNM_FILE_NAME)) + { + while (*n != '\0' && *n != '/') + ++n; + if (*n == '/' + && (internal_fnmatch (p, n + 1, flags & FNM_PERIOD, + flags) == 0)) + return 0; + } + else + { + int flags2 = ((flags & FNM_FILE_NAME) + ? flags : (flags & ~FNM_PERIOD)); + + if (c == '\\' && !(flags & FNM_NOESCAPE)) + c = *p; + c = FOLD (c); + for (--p; n < endp; ++n) + if (FOLD ((unsigned char) *n) == c + && (internal_fnmatch (p, n, + (no_leading_period + && (n == string + || (n[-1] == '/' + && (flags + & FNM_FILE_NAME)))), + flags2) == 0)) + return 0; + } + } + + /* If we come here no match is possible with the wildcard. */ + return FNM_NOMATCH; + + case '[': + { + /* Nonzero if the sense of the character class is inverted. */ + static int posixly_correct; + register int not; + char cold; + + if (posixly_correct == 0) + posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; + + if (*n == '\0') + return FNM_NOMATCH; + + if (*n == '.' && no_leading_period && (n == string + || (n[-1] == '/' + && (flags + & FNM_FILE_NAME)))) + return FNM_NOMATCH; + + if (*n == '/' && (flags & FNM_FILE_NAME)) + /* `/' cannot be matched. */ + return FNM_NOMATCH; + + not = (*p == '!' || (posixly_correct < 0 && *p == '^')); + if (not) + ++p; + + c = *p++; + for (;;) + { + unsigned char fn = FOLD ((unsigned char) *n); + + if (!(flags & FNM_NOESCAPE) && c == '\\') + { + if (*p == '\0') + return FNM_NOMATCH; + c = FOLD ((unsigned char) *p); + ++p; + + if (c == fn) + goto matched; + } + else if (c == '[' && *p == ':') + { + /* Leave room for the null. */ + char str[CHAR_CLASS_MAX_LENGTH + 1]; + size_t c1 = 0; +# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) + wctype_t wt; +# endif + const char *startp = p; + + for (;;) + { + if (c1 == CHAR_CLASS_MAX_LENGTH) + /* The name is too long and therefore the pattern + is ill-formed. */ + return FNM_NOMATCH; + + c = *++p; + if (c == ':' && p[1] == ']') + { + p += 2; + break; + } + if (c < 'a' || c >= 'z') + { + /* This cannot possibly be a character class name. + Match it as a normal range. */ + p = startp; + c = '['; + goto normal_bracket; + } + str[c1++] = c; + } + str[c1] = '\0'; + +# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) + wt = IS_CHAR_CLASS (str); + if (wt == 0) + /* Invalid character class name. */ + return FNM_NOMATCH; + + if (__iswctype (__btowc ((unsigned char) *n), wt)) + goto matched; +# else + if ((STREQ (str, "alnum") && ISALNUM ((unsigned char) *n)) + || (STREQ (str, "alpha") && ISALPHA ((unsigned char) *n)) + || (STREQ (str, "blank") && ISBLANK ((unsigned char) *n)) + || (STREQ (str, "cntrl") && ISCNTRL ((unsigned char) *n)) + || (STREQ (str, "digit") && ISDIGIT ((unsigned char) *n)) + || (STREQ (str, "graph") && ISGRAPH ((unsigned char) *n)) + || (STREQ (str, "lower") && ISLOWER ((unsigned char) *n)) + || (STREQ (str, "print") && ISPRINT ((unsigned char) *n)) + || (STREQ (str, "punct") && ISPUNCT ((unsigned char) *n)) + || (STREQ (str, "space") && ISSPACE ((unsigned char) *n)) + || (STREQ (str, "upper") && ISUPPER ((unsigned char) *n)) + || (STREQ (str, "xdigit") && ISXDIGIT ((unsigned char) *n))) + goto matched; +# endif + } + else if (c == '\0') + /* [ (unterminated) loses. */ + return FNM_NOMATCH; + else + { + normal_bracket: + if (FOLD (c) == fn) + goto matched; + + cold = c; + c = *p++; + + if (c == '-' && *p != ']') + { + /* It is a range. */ + unsigned char cend = *p++; + if (!(flags & FNM_NOESCAPE) && cend == '\\') + cend = *p++; + if (cend == '\0') + return FNM_NOMATCH; + + if (cold <= fn && fn <= FOLD (cend)) + goto matched; + + c = *p++; + } + } + + if (c == ']') + break; + } + + if (!not) + return FNM_NOMATCH; + break; + + matched: + /* Skip the rest of the [...] that already matched. */ + while (c != ']') + { + if (c == '\0') + /* [... (unterminated) loses. */ + return FNM_NOMATCH; + + c = *p++; + if (!(flags & FNM_NOESCAPE) && c == '\\') + { + if (*p == '\0') + return FNM_NOMATCH; + /* XXX 1003.2d11 is unclear if this is right. */ + ++p; + } + else if (c == '[' && *p == ':') + { + do + if (*++p == '\0') + return FNM_NOMATCH; + while (*p != ':' || p[1] == ']'); + p += 2; + c = *p; + } + } + if (not) + return FNM_NOMATCH; + } + break; + + default: + if (c != FOLD ((unsigned char) *n)) + return FNM_NOMATCH; + } + + ++n; + } + + if (*n == '\0') + return 0; + + if ((flags & FNM_LEADING_DIR) && *n == '/') + /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ + return 0; + + return FNM_NOMATCH; + +# undef FOLD +} + + +int +fnmatch (pattern, string, flags) + const char *pattern; + const char *string; + int flags; +{ + return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags); +} + +#endif /* _LIBC or not __GNU_LIBRARY__. */ diff --git a/src/mkutil/make/glob/fnmatch.h b/src/mkutil/make/glob/fnmatch.h new file mode 100644 index 00000000..cc3ec379 --- /dev/null +++ b/src/mkutil/make/glob/fnmatch.h @@ -0,0 +1,84 @@ +/* Copyright (C) 1991, 92, 93, 96, 97, 98, 99 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _FNMATCH_H +#define _FNMATCH_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32 +# if !defined __GLIBC__ || !defined __P +# undef __P +# define __P(protos) protos +# endif +#else /* Not C++ or ANSI C. */ +# undef __P +# define __P(protos) () +/* We can get away without defining `const' here only because in this file + it is used only inside the prototype for `fnmatch', which is elided in + non-ANSI C where `const' is problematical. */ +#endif /* C++ or ANSI C. */ + +#ifndef const +# if (defined __STDC__ && __STDC__) || defined __cplusplus +# define __const const +# else +# define __const +# endif +#endif + +/* We #undef these before defining them because some losing systems + (HP-UX A.08.07 for example) define these in . */ +#undef FNM_PATHNAME +#undef FNM_NOESCAPE +#undef FNM_PERIOD + +/* Bits set in the FLAGS argument to `fnmatch'. */ +#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */ +#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */ +#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */ + +#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE +# define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ +# define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ +# define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ +#endif + +/* Value returned by `fnmatch' if STRING does not match PATTERN. */ +#define FNM_NOMATCH 1 + +/* This value is returned if the implementation does not support + `fnmatch'. Since this is not the case here it will never be + returned but the conformance test suites still require the symbol + to be defined. */ +#ifdef _XOPEN_SOURCE +# define FNM_NOSYS (-1) +#endif + +/* Match NAME against the filename pattern PATTERN, + returning zero if it matches, FNM_NOMATCH if not. */ +extern int fnmatch __P ((__const char *__pattern, __const char *__name, + int __flags)); + +#ifdef __cplusplus +} +#endif + +#endif /* fnmatch.h */ diff --git a/src/mkutil/make/glob/glob.c b/src/mkutil/make/glob/glob.c new file mode 100644 index 00000000..4bbf7bb0 --- /dev/null +++ b/src/mkutil/make/glob/glob.c @@ -0,0 +1,1428 @@ +/* Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* AIX requires this to be the first thing in the file. */ +#if defined _AIX && !defined __GNUC__ + #pragma alloca +#endif + +#ifdef HAVE_CONFIG_H +# include +#endif + +/* Enable GNU extensions in glob.h. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include +#include +#include + +/* Outcomment the following line for production quality code. */ +/* #define NDEBUG 1 */ +#include + +#include /* Needed on stupid SunOS for assert. */ + + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#define GLOB_INTERFACE_VERSION 1 +#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 +# include +# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION +# define ELIDE_CODE +# endif +#endif + +#ifndef ELIDE_CODE + +#if defined STDC_HEADERS || defined __GNU_LIBRARY__ +# include +#endif + +#if defined HAVE_UNISTD_H || defined _LIBC +# include +# ifndef POSIX +# ifdef _POSIX_VERSION +# define POSIX +# endif +# endif +#endif + +#if !defined _AMIGA && !defined VMS && !defined WINDOWS32 +# include +#endif + +#if !defined __GNU_LIBRARY__ && !defined STDC_HEADERS +extern int errno; +#endif +#ifndef __set_errno +# define __set_errno(val) errno = (val) +#endif + +#ifndef NULL +# define NULL 0 +#endif + + +#if defined HAVE_DIRENT_H || defined __GNU_LIBRARY__ +# include +# define NAMLEN(dirent) strlen((dirent)->d_name) +#else +# define dirent direct +# define NAMLEN(dirent) (dirent)->d_namlen +# ifdef HAVE_SYS_NDIR_H +# include +# endif +# ifdef HAVE_SYS_DIR_H +# include +# endif +# ifdef HAVE_NDIR_H +# include +# endif +# ifdef HAVE_VMSDIR_H +# include "vmsdir.h" +# endif /* HAVE_VMSDIR_H */ +#endif + + +/* In GNU systems, defines this macro for us. */ +#ifdef _D_NAMLEN +# undef NAMLEN +# define NAMLEN(d) _D_NAMLEN(d) +#endif + +/* When used in the GNU libc the symbol _DIRENT_HAVE_D_TYPE is available + if the `d_type' member for `struct dirent' is available. */ +#ifdef _DIRENT_HAVE_D_TYPE +# define HAVE_D_TYPE 1 +#endif + + +#if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__ +/* Posix does not require that the d_ino field be present, and some + systems do not provide it. */ +# define REAL_DIR_ENTRY(dp) 1 +#else +# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) +#endif /* POSIX */ + +#if defined STDC_HEADERS || defined __GNU_LIBRARY__ +# include +# include +# define ANSI_STRING +#else /* No standard headers. */ + +extern char *getenv (); + +# ifdef HAVE_STRING_H +# include +# define ANSI_STRING +# else +# include +# endif +# ifdef HAVE_MEMORY_H +# include +# endif + +extern char *malloc (), *realloc (); +extern void free (); + +extern void qsort (); +extern void abort (), exit (); + +#endif /* Standard headers. */ + +#ifndef ANSI_STRING + +# ifndef bzero +extern void bzero (); +# endif +# ifndef bcopy +extern void bcopy (); +# endif + +# define memcpy(d, s, n) bcopy ((s), (d), (n)) +# define strrchr rindex +/* memset is only used for zero here, but let's be paranoid. */ +# define memset(s, better_be_zero, n) \ + ((void) ((better_be_zero) == 0 ? (bzero((s), (n)), 0) : (abort(), 0))) +#endif /* Not ANSI_STRING. */ + +#if !defined HAVE_STRCOLL && !defined _LIBC +# define strcoll strcmp +#endif + +#if !defined HAVE_MEMPCPY && __GLIBC__ - 0 == 2 && __GLIBC_MINOR__ >= 1 +# define HAVE_MEMPCPY 1 +# undef mempcpy +# define mempcpy(Dest, Src, Len) __mempcpy (Dest, Src, Len) +#endif + +#ifndef __GNU_LIBRARY__ +# ifdef __GNUC__ +__inline +# endif +# ifndef __SASC +# ifdef WINDOWS32 +static void * +# else +static char * +# endif +my_realloc (p, n) + char *p; + unsigned int n; +{ + /* These casts are the for sake of the broken Ultrix compiler, + which warns of illegal pointer combinations otherwise. */ + if (p == NULL) + return (char *) malloc (n); + return (char *) realloc (p, n); +} +# define realloc my_realloc +# endif /* __SASC */ +#endif /* __GNU_LIBRARY__ */ + + +#if !defined __alloca && !defined __GNU_LIBRARY__ + +# ifdef __GNUC__ +# undef alloca +# define alloca(n) __builtin_alloca (n) +# else /* Not GCC. */ +# ifdef HAVE_ALLOCA_H +# include +# else /* Not HAVE_ALLOCA_H. */ +# ifndef _AIX +# ifdef WINDOWS32 +# include +# else +extern char *alloca (); +# endif /* WINDOWS32 */ +# endif /* Not _AIX. */ +# endif /* sparc or HAVE_ALLOCA_H. */ +# endif /* GCC. */ + +# define __alloca alloca + +#endif + +#ifndef __GNU_LIBRARY__ +# define __stat stat +# ifdef STAT_MACROS_BROKEN +# undef S_ISDIR +# endif +# ifndef S_ISDIR +# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +# endif +#endif + +#ifdef _LIBC +# undef strdup +# define strdup(str) __strdup (str) +# define sysconf(id) __sysconf (id) +# define closedir(dir) __closedir (dir) +# define opendir(name) __opendir (name) +# define readdir(str) __readdir (str) +# define getpwnam_r(name, bufp, buf, len, res) \ + __getpwnam_r (name, bufp, buf, len, res) +# ifndef __stat +# define __stat(fname, buf) __xstat (_STAT_VER, fname, buf) +# endif +#endif + +#if !(defined STDC_HEADERS || defined __GNU_LIBRARY__) +# undef size_t +# define size_t unsigned int +#endif + +/* Some system header files erroneously define these. + We want our own definitions from to take precedence. */ +#ifndef __GNU_LIBRARY__ +# undef FNM_PATHNAME +# undef FNM_NOESCAPE +# undef FNM_PERIOD +#endif +#include + +/* Some system header files erroneously define these. + We want our own definitions from to take precedence. */ +#ifndef __GNU_LIBRARY__ +# undef GLOB_ERR +# undef GLOB_MARK +# undef GLOB_NOSORT +# undef GLOB_DOOFFS +# undef GLOB_NOCHECK +# undef GLOB_APPEND +# undef GLOB_NOESCAPE +# undef GLOB_PERIOD +#endif +#include + +#ifdef HAVE_GETLOGIN_R +extern int getlogin_r __P ((char *, size_t)); +#else +extern char *getlogin __P ((void)); +#endif + +static +#if __GNUC__ - 0 >= 2 +inline +#endif +const char *next_brace_sub __P ((const char *begin)); +static int glob_in_dir __P ((const char *pattern, const char *directory, + int flags, + int (*errfunc) (const char *, int), + glob_t *pglob)); +static int prefix_array __P ((const char *prefix, char **array, size_t n)); +static int collated_compare __P ((const __ptr_t, const __ptr_t)); + +#ifdef VMS +/* these compilers like prototypes */ +#if !defined _LIBC || !defined NO_GLOB_PATTERN_P +int __glob_pattern_p (const char *pattern, int quote); +#endif +#endif + +/* Find the end of the sub-pattern in a brace expression. We define + this as an inline function if the compiler permits. */ +static +#if __GNUC__ - 0 >= 2 +inline +#endif +const char * +next_brace_sub (begin) + const char *begin; +{ + unsigned int depth = 0; + const char *cp = begin; + + while (1) + { + if (depth == 0) + { + if (*cp != ',' && *cp != '}' && *cp != '\0') + { + if (*cp == '{') + ++depth; + ++cp; + continue; + } + } + else + { + while (*cp != '\0' && (*cp != '}' || depth > 0)) + { + if (*cp == '}') + --depth; + ++cp; + } + if (*cp == '\0') + /* An incorrectly terminated brace expression. */ + return NULL; + + continue; + } + break; + } + + return cp; +} + +/* Do glob searching for PATTERN, placing results in PGLOB. + The bits defined above may be set in FLAGS. + If a directory cannot be opened or read and ERRFUNC is not nil, + it is called with the pathname that caused the error, and the + `errno' value from the failing call; if it returns non-zero + `glob' returns GLOB_ABORTED; if it returns zero, the error is ignored. + If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. + Otherwise, `glob' returns zero. */ +int +glob (pattern, flags, errfunc, pglob) + const char *pattern; + int flags; + int (*errfunc) __P ((const char *, int)); + glob_t *pglob; +{ + const char *filename; + const char *dirname; + size_t dirlen; + int status; + int oldcount; + + if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0) + { + __set_errno (EINVAL); + return -1; + } + + if (flags & GLOB_BRACE) + { + const char *begin = strchr (pattern, '{'); + if (begin != NULL) + { + /* Allocate working buffer large enough for our work. Note that + we have at least an opening and closing brace. */ + int firstc; + char *alt_start; + const char *p; + const char *next; + const char *rest; + size_t rest_len; +#ifdef __GNUC__ + char onealt[strlen (pattern) - 1]; +#else + char *onealt = (char *) malloc (strlen (pattern) - 1); + if (onealt == NULL) + { + if (!(flags & GLOB_APPEND)) + globfree (pglob); + return GLOB_NOSPACE; + } +#endif + + /* We know the prefix for all sub-patterns. */ +#ifdef HAVE_MEMPCPY + alt_start = mempcpy (onealt, pattern, begin - pattern); +#else + memcpy (onealt, pattern, begin - pattern); + alt_start = &onealt[begin - pattern]; +#endif + + /* Find the first sub-pattern and at the same time find the + rest after the closing brace. */ + next = next_brace_sub (begin + 1); + if (next == NULL) + { + /* It is an illegal expression. */ +#ifndef __GNUC__ + free (onealt); +#endif + return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob); + } + + /* Now find the end of the whole brace expression. */ + rest = next; + while (*rest != '}') + { + rest = next_brace_sub (rest + 1); + if (rest == NULL) + { + /* It is an illegal expression. */ +#ifndef __GNUC__ + free (onealt); +#endif + return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob); + } + } + /* Please note that we now can be sure the brace expression + is well-formed. */ + rest_len = strlen (++rest) + 1; + + /* We have a brace expression. BEGIN points to the opening {, + NEXT points past the terminator of the first element, and END + points past the final }. We will accumulate result names from + recursive runs for each brace alternative in the buffer using + GLOB_APPEND. */ + + if (!(flags & GLOB_APPEND)) + { + /* This call is to set a new vector, so clear out the + vector so we can append to it. */ + pglob->gl_pathc = 0; + pglob->gl_pathv = NULL; + } + firstc = pglob->gl_pathc; + + p = begin + 1; + while (1) + { + int result; + + /* Construct the new glob expression. */ +#ifdef HAVE_MEMPCPY + mempcpy (mempcpy (alt_start, p, next - p), rest, rest_len); +#else + memcpy (alt_start, p, next - p); + memcpy (&alt_start[next - p], rest, rest_len); +#endif + + result = glob (onealt, + ((flags & ~(GLOB_NOCHECK|GLOB_NOMAGIC)) + | GLOB_APPEND), errfunc, pglob); + + /* If we got an error, return it. */ + if (result && result != GLOB_NOMATCH) + { +#ifndef __GNUC__ + free (onealt); +#endif + if (!(flags & GLOB_APPEND)) + globfree (pglob); + return result; + } + + if (*next == '}') + /* We saw the last entry. */ + break; + + p = next + 1; + next = next_brace_sub (p); + assert (next != NULL); + } + +#ifndef __GNUC__ + free (onealt); +#endif + + if (pglob->gl_pathc != firstc) + /* We found some entries. */ + return 0; + else if (!(flags & (GLOB_NOCHECK|GLOB_NOMAGIC))) + return GLOB_NOMATCH; + } + } + + /* Find the filename. */ + filename = strrchr (pattern, '/'); +#if defined __MSDOS__ || defined WINDOWS32 + /* The case of "d:pattern". Since `:' is not allowed in + file names, we can safely assume that wherever it + happens in pattern, it signals the filename part. This + is so we could some day support patterns like "[a-z]:foo". */ + if (filename == NULL) + filename = strchr (pattern, ':'); +#endif /* __MSDOS__ || WINDOWS32 */ + if (filename == NULL) + { + /* This can mean two things: a simple name or "~name". The later + case is nothing but a notation for a directory. */ + if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && pattern[0] == '~') + { + dirname = pattern; + dirlen = strlen (pattern); + + /* Set FILENAME to NULL as a special flag. This is ugly but + other solutions would require much more code. We test for + this special case below. */ + filename = NULL; + } + else + { + filename = pattern; +#ifdef _AMIGA + dirname = ""; +#else + dirname = "."; +#endif + dirlen = 0; + } + } + else if (filename == pattern) + { + /* "/pattern". */ + dirname = "/"; + dirlen = 1; + ++filename; + } + else + { + char *newp; + dirlen = filename - pattern; +#if defined __MSDOS__ || defined WINDOWS32 + if (*filename == ':' + || (filename > pattern + 1 && filename[-1] == ':')) + { + char *drive_spec; + + ++dirlen; + drive_spec = (char *) __alloca (dirlen + 1); +#ifdef HAVE_MEMPCPY + *((char *) mempcpy (drive_spec, pattern, dirlen)) = '\0'; +#else + memcpy (drive_spec, pattern, dirlen); + drive_spec[dirlen] = '\0'; +#endif + /* For now, disallow wildcards in the drive spec, to + prevent infinite recursion in glob. */ + if (__glob_pattern_p (drive_spec, !(flags & GLOB_NOESCAPE))) + return GLOB_NOMATCH; + /* If this is "d:pattern", we need to copy `:' to DIRNAME + as well. If it's "d:/pattern", don't remove the slash + from "d:/", since "d:" and "d:/" are not the same.*/ + } +#endif + newp = (char *) __alloca (dirlen + 1); +#ifdef HAVE_MEMPCPY + *((char *) mempcpy (newp, pattern, dirlen)) = '\0'; +#else + memcpy (newp, pattern, dirlen); + newp[dirlen] = '\0'; +#endif + dirname = newp; + ++filename; + + if (filename[0] == '\0' +#if defined __MSDOS__ || defined WINDOWS32 + && dirname[dirlen - 1] != ':' + && (dirlen < 3 || dirname[dirlen - 2] != ':' + || dirname[dirlen - 1] != '/') +#endif + && dirlen > 1) + /* "pattern/". Expand "pattern", appending slashes. */ + { + int val = glob (dirname, flags | GLOB_MARK, errfunc, pglob); + if (val == 0) + pglob->gl_flags = ((pglob->gl_flags & ~GLOB_MARK) + | (flags & GLOB_MARK)); + return val; + } + } + + if (!(flags & GLOB_APPEND)) + { + pglob->gl_pathc = 0; + pglob->gl_pathv = NULL; + } + + oldcount = pglob->gl_pathc; + +#ifndef VMS + if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && dirname[0] == '~') + { + if (dirname[1] == '\0' || dirname[1] == '/') + { + /* Look up home directory. */ +#ifdef VMS +/* This isn't obvious, RTLs of DECC and VAXC know about "HOME" */ + const char *home_dir = getenv ("SYS$LOGIN"); +#else + const char *home_dir = getenv ("HOME"); +#endif +# ifdef _AMIGA + if (home_dir == NULL || home_dir[0] == '\0') + home_dir = "SYS:"; +# else +# ifdef WINDOWS32 + if (home_dir == NULL || home_dir[0] == '\0') + home_dir = "c:/users/default"; /* poor default */ +# else +# ifdef VMS +/* Again, this isn't obvious, if "HOME" isn't known "SYS$LOGIN" should be set */ + if (home_dir == NULL || home_dir[0] == '\0') + home_dir = "SYS$DISK:[]"; +# else + if (home_dir == NULL || home_dir[0] == '\0') + { + int success; + char *name; +# if defined HAVE_GETLOGIN_R || defined _LIBC + size_t buflen = sysconf (_SC_LOGIN_NAME_MAX) + 1; + + if (buflen == 0) + /* `sysconf' does not support _SC_LOGIN_NAME_MAX. Try + a moderate value. */ + buflen = 20; + name = (char *) __alloca (buflen); + + success = getlogin_r (name, buflen) >= 0; +# else + success = (name = getlogin ()) != NULL; +# endif + if (success) + { + struct passwd *p; +# if defined HAVE_GETPWNAM_R || defined _LIBC + size_t pwbuflen = sysconf (_SC_GETPW_R_SIZE_MAX); + char *pwtmpbuf; + struct passwd pwbuf; + int save = errno; + + if (pwbuflen == -1) + /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX. + Try a moderate value. */ + pwbuflen = 1024; + pwtmpbuf = (char *) __alloca (pwbuflen); + + while (getpwnam_r (name, &pwbuf, pwtmpbuf, pwbuflen, &p) + != 0) + { + if (errno != ERANGE) + { + p = NULL; + break; + } + pwbuflen *= 2; + pwtmpbuf = (char *) __alloca (pwbuflen); + __set_errno (save); + } +# else + p = getpwnam (name); +# endif + if (p != NULL) + home_dir = p->pw_dir; + } + } + if (home_dir == NULL || home_dir[0] == '\0') + { + if (flags & GLOB_TILDE_CHECK) + return GLOB_NOMATCH; + else + home_dir = "~"; /* No luck. */ + } +# endif /* VMS */ +# endif /* WINDOWS32 */ +# endif + /* Now construct the full directory. */ + if (dirname[1] == '\0') + dirname = home_dir; + else + { + char *newp; + size_t home_len = strlen (home_dir); + newp = (char *) __alloca (home_len + dirlen); +# ifdef HAVE_MEMPCPY + mempcpy (mempcpy (newp, home_dir, home_len), + &dirname[1], dirlen); +# else + memcpy (newp, home_dir, home_len); + memcpy (&newp[home_len], &dirname[1], dirlen); +# endif + dirname = newp; + } + } +# if !defined _AMIGA && !defined WINDOWS32 && !defined VMS + else + { + char *end_name = strchr (dirname, '/'); + const char *user_name; + const char *home_dir; + + if (end_name == NULL) + user_name = dirname + 1; + else + { + char *newp; + newp = (char *) __alloca (end_name - dirname); +# ifdef HAVE_MEMPCPY + *((char *) mempcpy (newp, dirname + 1, end_name - dirname)) + = '\0'; +# else + memcpy (newp, dirname + 1, end_name - dirname); + newp[end_name - dirname - 1] = '\0'; +# endif + user_name = newp; + } + + /* Look up specific user's home directory. */ + { + struct passwd *p; +# if defined HAVE_GETPWNAM_R || defined _LIBC + size_t buflen = sysconf (_SC_GETPW_R_SIZE_MAX); + char *pwtmpbuf; + struct passwd pwbuf; + int save = errno; + + if (buflen == -1) + /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX. Try a + moderate value. */ + buflen = 1024; + pwtmpbuf = (char *) __alloca (buflen); + + while (getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) != 0) + { + if (errno != ERANGE) + { + p = NULL; + break; + } + buflen *= 2; + pwtmpbuf = __alloca (buflen); + __set_errno (save); + } +# else + p = getpwnam (user_name); +# endif + if (p != NULL) + home_dir = p->pw_dir; + else + home_dir = NULL; + } + /* If we found a home directory use this. */ + if (home_dir != NULL) + { + char *newp; + size_t home_len = strlen (home_dir); + size_t rest_len = end_name == NULL ? 0 : strlen (end_name); + newp = (char *) __alloca (home_len + rest_len + 1); +# ifdef HAVE_MEMPCPY + *((char *) mempcpy (mempcpy (newp, home_dir, home_len), + end_name, rest_len)) = '\0'; +# else + memcpy (newp, home_dir, home_len); + memcpy (&newp[home_len], end_name, rest_len); + newp[home_len + rest_len] = '\0'; +# endif + dirname = newp; + } + else + if (flags & GLOB_TILDE_CHECK) + /* We have to regard it as an error if we cannot find the + home directory. */ + return GLOB_NOMATCH; + } +# endif /* Not Amiga && not WINDOWS32 && not VMS. */ + } +#endif /* Not VMS. */ + + /* Now test whether we looked for "~" or "~NAME". In this case we + can give the answer now. */ + if (filename == NULL) + { + struct stat st; + + /* Return the directory if we don't check for error or if it exists. */ + if ((flags & GLOB_NOCHECK) + || (((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_stat) (dirname, &st) + : __stat (dirname, &st)) == 0 + && S_ISDIR (st.st_mode))) + { + pglob->gl_pathv + = (char **) realloc (pglob->gl_pathv, + (pglob->gl_pathc + + ((flags & GLOB_DOOFFS) ? + pglob->gl_offs : 0) + + 1 + 1) * + sizeof (char *)); + if (pglob->gl_pathv == NULL) + return GLOB_NOSPACE; + + if (flags & GLOB_DOOFFS) + while (pglob->gl_pathc < pglob->gl_offs) + pglob->gl_pathv[pglob->gl_pathc++] = NULL; + +#if defined HAVE_STRDUP || defined _LIBC + pglob->gl_pathv[pglob->gl_pathc] = strdup (dirname); +#else + { + size_t len = strlen (dirname) + 1; + char *dircopy = malloc (len); + if (dircopy != NULL) + pglob->gl_pathv[pglob->gl_pathc] = memcpy (dircopy, dirname, + len); + } +#endif + if (pglob->gl_pathv[pglob->gl_pathc] == NULL) + { + free (pglob->gl_pathv); + return GLOB_NOSPACE; + } + pglob->gl_pathv[++pglob->gl_pathc] = NULL; + pglob->gl_flags = flags; + + return 0; + } + + /* Not found. */ + return GLOB_NOMATCH; + } + + if (__glob_pattern_p (dirname, !(flags & GLOB_NOESCAPE))) + { + /* The directory name contains metacharacters, so we + have to glob for the directory, and then glob for + the pattern in each directory found. */ + glob_t dirs; + register int i; + + status = glob (dirname, + ((flags & (GLOB_ERR | GLOB_NOCHECK | GLOB_NOESCAPE)) + | GLOB_NOSORT | GLOB_ONLYDIR), + errfunc, &dirs); + if (status != 0) + return status; + + /* We have successfully globbed the preceding directory name. + For each name we found, call glob_in_dir on it and FILENAME, + appending the results to PGLOB. */ + for (i = 0; i < dirs.gl_pathc; ++i) + { + int old_pathc; + +#ifdef SHELL + { + /* Make globbing interruptible in the bash shell. */ + extern int interrupt_state; + + if (interrupt_state) + { + globfree (&dirs); + globfree (&files); + return GLOB_ABORTED; + } + } +#endif /* SHELL. */ + + old_pathc = pglob->gl_pathc; + status = glob_in_dir (filename, dirs.gl_pathv[i], + ((flags | GLOB_APPEND) + & ~(GLOB_NOCHECK | GLOB_ERR)), + errfunc, pglob); + if (status == GLOB_NOMATCH) + /* No matches in this directory. Try the next. */ + continue; + + if (status != 0) + { + globfree (&dirs); + globfree (pglob); + return status; + } + + /* Stick the directory on the front of each name. */ + if (prefix_array (dirs.gl_pathv[i], + &pglob->gl_pathv[old_pathc], + pglob->gl_pathc - old_pathc)) + { + globfree (&dirs); + globfree (pglob); + return GLOB_NOSPACE; + } + } + + flags |= GLOB_MAGCHAR; + + /* We have ignored the GLOB_NOCHECK flag in the `glob_in_dir' calls. + But if we have not found any matching entry and thie GLOB_NOCHECK + flag was set we must return the list consisting of the disrectory + names followed by the filename. */ + if (pglob->gl_pathc == oldcount) + { + /* No matches. */ + if (flags & GLOB_NOCHECK) + { + size_t filename_len = strlen (filename) + 1; + char **new_pathv; + struct stat st; + + /* This is an pessimistic guess about the size. */ + pglob->gl_pathv + = (char **) realloc (pglob->gl_pathv, + (pglob->gl_pathc + + ((flags & GLOB_DOOFFS) ? + pglob->gl_offs : 0) + + dirs.gl_pathc + 1) * + sizeof (char *)); + if (pglob->gl_pathv == NULL) + { + globfree (&dirs); + return GLOB_NOSPACE; + } + + if (flags & GLOB_DOOFFS) + while (pglob->gl_pathc < pglob->gl_offs) + pglob->gl_pathv[pglob->gl_pathc++] = NULL; + + for (i = 0; i < dirs.gl_pathc; ++i) + { + const char *dir = dirs.gl_pathv[i]; + size_t dir_len = strlen (dir); + + /* First check whether this really is a directory. */ + if (((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_stat) (dir, &st) : __stat (dir, &st)) != 0 + || !S_ISDIR (st.st_mode)) + /* No directory, ignore this entry. */ + continue; + + pglob->gl_pathv[pglob->gl_pathc] = malloc (dir_len + 1 + + filename_len); + if (pglob->gl_pathv[pglob->gl_pathc] == NULL) + { + globfree (&dirs); + globfree (pglob); + return GLOB_NOSPACE; + } + +#ifdef HAVE_MEMPCPY + mempcpy (mempcpy (mempcpy (pglob->gl_pathv[pglob->gl_pathc], + dir, dir_len), + "/", 1), + filename, filename_len); +#else + memcpy (pglob->gl_pathv[pglob->gl_pathc], dir, dir_len); + pglob->gl_pathv[pglob->gl_pathc][dir_len] = '/'; + memcpy (&pglob->gl_pathv[pglob->gl_pathc][dir_len + 1], + filename, filename_len); +#endif + ++pglob->gl_pathc; + } + + pglob->gl_pathv[pglob->gl_pathc] = NULL; + pglob->gl_flags = flags; + + /* Now we know how large the gl_pathv vector must be. */ + new_pathv = (char **) realloc (pglob->gl_pathv, + ((pglob->gl_pathc + 1) + * sizeof (char *))); + if (new_pathv != NULL) + pglob->gl_pathv = new_pathv; + } + else + return GLOB_NOMATCH; + } + + globfree (&dirs); + } + else + { + status = glob_in_dir (filename, dirname, flags, errfunc, pglob); + if (status != 0) + return status; + + if (dirlen > 0) + { + /* Stick the directory on the front of each name. */ + int ignore = oldcount; + + if ((flags & GLOB_DOOFFS) && ignore < pglob->gl_offs) + ignore = pglob->gl_offs; + + if (prefix_array (dirname, + &pglob->gl_pathv[ignore], + pglob->gl_pathc - ignore)) + { + globfree (pglob); + return GLOB_NOSPACE; + } + } + } + + if (flags & GLOB_MARK) + { + /* Append slashes to directory names. */ + int i; + struct stat st; + for (i = oldcount; i < pglob->gl_pathc; ++i) + if (((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_stat) (pglob->gl_pathv[i], &st) + : __stat (pglob->gl_pathv[i], &st)) == 0 + && S_ISDIR (st.st_mode)) + { + size_t len = strlen (pglob->gl_pathv[i]) + 2; + char *new = realloc (pglob->gl_pathv[i], len); + if (new == NULL) + { + globfree (pglob); + return GLOB_NOSPACE; + } + strcpy (&new[len - 2], "/"); + pglob->gl_pathv[i] = new; + } + } + + if (!(flags & GLOB_NOSORT)) + { + /* Sort the vector. */ + int non_sort = oldcount; + + if ((flags & GLOB_DOOFFS) && pglob->gl_offs > oldcount) + non_sort = pglob->gl_offs; + + qsort ((__ptr_t) &pglob->gl_pathv[non_sort], + pglob->gl_pathc - non_sort, + sizeof (char *), collated_compare); + } + + return 0; +} + + +/* Free storage allocated in PGLOB by a previous `glob' call. */ +void +globfree (pglob) + register glob_t *pglob; +{ + if (pglob->gl_pathv != NULL) + { + register int i; + for (i = 0; i < pglob->gl_pathc; ++i) + if (pglob->gl_pathv[i] != NULL) + free ((__ptr_t) pglob->gl_pathv[i]); + free ((__ptr_t) pglob->gl_pathv); + } +} + + +/* Do a collated comparison of A and B. */ +static int +collated_compare (a, b) + const __ptr_t a; + const __ptr_t b; +{ + const char *const s1 = *(const char *const * const) a; + const char *const s2 = *(const char *const * const) b; + + if (s1 == s2) + return 0; + if (s1 == NULL) + return 1; + if (s2 == NULL) + return -1; + return strcoll (s1, s2); +} + + +/* Prepend DIRNAME to each of N members of ARRAY, replacing ARRAY's + elements in place. Return nonzero if out of memory, zero if successful. + A slash is inserted between DIRNAME and each elt of ARRAY, + unless DIRNAME is just "/". Each old element of ARRAY is freed. */ +static int +prefix_array (dirname, array, n) + const char *dirname; + char **array; + size_t n; +{ + register size_t i; + size_t dirlen = strlen (dirname); +#if defined __MSDOS__ || defined WINDOWS32 + int sep_char = '/'; +# define DIRSEP_CHAR sep_char +#else +# define DIRSEP_CHAR '/' +#endif + + if (dirlen == 1 && dirname[0] == '/') + /* DIRNAME is just "/", so normal prepending would get us "//foo". + We want "/foo" instead, so don't prepend any chars from DIRNAME. */ + dirlen = 0; +#if defined __MSDOS__ || defined WINDOWS32 + else if (dirlen > 1) + { + if (dirname[dirlen - 1] == '/' && dirname[dirlen - 2] == ':') + /* DIRNAME is "d:/". Don't prepend the slash from DIRNAME. */ + --dirlen; + else if (dirname[dirlen - 1] == ':') + { + /* DIRNAME is "d:". Use `:' instead of `/'. */ + --dirlen; + sep_char = ':'; + } + } +#endif + + for (i = 0; i < n; ++i) + { + size_t eltlen = strlen (array[i]) + 1; + char *new = (char *) malloc (dirlen + 1 + eltlen); + if (new == NULL) + { + while (i > 0) + free ((__ptr_t) array[--i]); + return 1; + } + +#ifdef HAVE_MEMPCPY + { + char *endp = (char *) mempcpy (new, dirname, dirlen); + *endp++ = DIRSEP_CHAR; + mempcpy (endp, array[i], eltlen); + } +#else + memcpy (new, dirname, dirlen); + new[dirlen] = DIRSEP_CHAR; + memcpy (&new[dirlen + 1], array[i], eltlen); +#endif + free ((__ptr_t) array[i]); + array[i] = new; + } + + return 0; +} + + +/* We must not compile this function twice. */ +#if !defined _LIBC || !defined NO_GLOB_PATTERN_P +/* Return nonzero if PATTERN contains any metacharacters. + Metacharacters can be quoted with backslashes if QUOTE is nonzero. */ +int +__glob_pattern_p (pattern, quote) + const char *pattern; + int quote; +{ + register const char *p; + int open = 0; + + for (p = pattern; *p != '\0'; ++p) + switch (*p) + { + case '?': + case '*': + return 1; + + case '\\': + if (quote && p[1] != '\0') + ++p; + break; + + case '[': + open = 1; + break; + + case ']': + if (open) + return 1; + break; + } + + return 0; +} +# ifdef _LIBC +weak_alias (__glob_pattern_p, glob_pattern_p) +# endif +#endif + + +/* Like `glob', but PATTERN is a final pathname component, + and matches are searched for in DIRECTORY. + The GLOB_NOSORT bit in FLAGS is ignored. No sorting is ever done. + The GLOB_APPEND flag is assumed to be set (always appends). */ +static int +glob_in_dir (pattern, directory, flags, errfunc, pglob) + const char *pattern; + const char *directory; + int flags; + int (*errfunc) __P ((const char *, int)); + glob_t *pglob; +{ + __ptr_t stream = NULL; + + struct globlink + { + struct globlink *next; + char *name; + }; + struct globlink *names = NULL; + size_t nfound; + int meta; + int save; + +#ifdef VMS + if (*directory == 0) + directory = "[]"; +#endif + meta = __glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE)); + if (meta == 0) + { + if (flags & (GLOB_NOCHECK|GLOB_NOMAGIC)) + /* We need not do any tests. The PATTERN contains no meta + characters and we must not return an error therefore the + result will always contain exactly one name. */ + flags |= GLOB_NOCHECK; + else + { + /* Since we use the normal file functions we can also use stat() + to verify the file is there. */ + struct stat st; + size_t patlen = strlen (pattern); + size_t dirlen = strlen (directory); + char *fullname = (char *) __alloca (dirlen + 1 + patlen + 1); + +# ifdef HAVE_MEMPCPY + mempcpy (mempcpy (mempcpy (fullname, directory, dirlen), + "/", 1), + pattern, patlen + 1); +# else + memcpy (fullname, directory, dirlen); + fullname[dirlen] = '/'; + memcpy (&fullname[dirlen + 1], pattern, patlen + 1); +# endif + if (((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_stat) (fullname, &st) + : __stat (fullname, &st)) == 0) + /* We found this file to be existing. Now tell the rest + of the function to copy this name into the result. */ + flags |= GLOB_NOCHECK; + } + + nfound = 0; + } + else + { + if (pattern[0] == '\0') + { + /* This is a special case for matching directories like in + "*a/". */ + names = (struct globlink *) __alloca (sizeof (struct globlink)); + names->name = (char *) malloc (1); + if (names->name == NULL) + goto memory_error; + names->name[0] = '\0'; + names->next = NULL; + nfound = 1; + meta = 0; + } + else + { + stream = ((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_opendir) (directory) + : (__ptr_t) opendir (directory)); + if (stream == NULL) + { + if (errno != ENOTDIR + && ((errfunc != NULL && (*errfunc) (directory, errno)) + || (flags & GLOB_ERR))) + return GLOB_ABORTED; + nfound = 0; + meta = 0; + } + else + { + int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0) + | ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0) +#if defined _AMIGA || defined VMS + | FNM_CASEFOLD +#endif + ); + nfound = 0; + flags |= GLOB_MAGCHAR; + + while (1) + { + const char *name; + size_t len; + struct dirent *d = ((flags & GLOB_ALTDIRFUNC) + ? (*pglob->gl_readdir) (stream) + : readdir ((DIR *) stream)); + if (d == NULL) + break; + if (! REAL_DIR_ENTRY (d)) + continue; + +#ifdef HAVE_D_TYPE + /* If we shall match only directories use the information + provided by the dirent call if possible. */ + if ((flags & GLOB_ONLYDIR) + && d->d_type != DT_UNKNOWN && d->d_type != DT_DIR) + continue; +#endif + + name = d->d_name; + + if (fnmatch (pattern, name, fnm_flags) == 0) + { + struct globlink *new = (struct globlink *) + __alloca (sizeof (struct globlink)); + len = NAMLEN (d); + new->name = (char *) malloc (len + 1); + if (new->name == NULL) + goto memory_error; +#ifdef HAVE_MEMPCPY + *((char *) mempcpy ((__ptr_t) new->name, name, len)) + = '\0'; +#else + memcpy ((__ptr_t) new->name, name, len); + new->name[len] = '\0'; +#endif + new->next = names; + names = new; + ++nfound; + } + } + } + } + } + + if (nfound == 0 && (flags & GLOB_NOCHECK)) + { + size_t len = strlen (pattern); + nfound = 1; + names = (struct globlink *) __alloca (sizeof (struct globlink)); + names->next = NULL; + names->name = (char *) malloc (len + 1); + if (names->name == NULL) + goto memory_error; +#ifdef HAVE_MEMPCPY + *((char *) mempcpy (names->name, pattern, len)) = '\0'; +#else + memcpy (names->name, pattern, len); + names->name[len] = '\0'; +#endif + } + + if (nfound != 0) + { + pglob->gl_pathv + = (char **) realloc (pglob->gl_pathv, + (pglob->gl_pathc + + ((flags & GLOB_DOOFFS) ? pglob->gl_offs : 0) + + nfound + 1) * + sizeof (char *)); + if (pglob->gl_pathv == NULL) + goto memory_error; + + if (flags & GLOB_DOOFFS) + while (pglob->gl_pathc < pglob->gl_offs) + pglob->gl_pathv[pglob->gl_pathc++] = NULL; + + for (; names != NULL; names = names->next) + pglob->gl_pathv[pglob->gl_pathc++] = names->name; + pglob->gl_pathv[pglob->gl_pathc] = NULL; + + pglob->gl_flags = flags; + } + + save = errno; + if (stream != NULL) + { + if (flags & GLOB_ALTDIRFUNC) + (*pglob->gl_closedir) (stream); + else + closedir ((DIR *) stream); + } + __set_errno (save); + + return nfound == 0 ? GLOB_NOMATCH : 0; + + memory_error: + { + int save = errno; + if (flags & GLOB_ALTDIRFUNC) + (*pglob->gl_closedir) (stream); + else + closedir ((DIR *) stream); + __set_errno (save); + } + while (names != NULL) + { + if (names->name != NULL) + free ((__ptr_t) names->name); + names = names->next; + } + return GLOB_NOSPACE; +} + +#endif /* Not ELIDE_CODE. */ diff --git a/src/mkutil/make/glob/glob.h b/src/mkutil/make/glob/glob.h new file mode 100644 index 00000000..ca523f7a --- /dev/null +++ b/src/mkutil/make/glob/glob.h @@ -0,0 +1,209 @@ +/* Copyright (C) 1991, 92, 95, 96, 97, 98 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _GLOB_H +#define _GLOB_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +#undef __ptr_t +#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32 +# if !defined __GLIBC__ || !defined __P +# undef __P +# undef __PMT +# define __P(protos) protos +# define __PMT(protos) protos +# if !defined __GNUC__ || __GNUC__ < 2 +# undef __const +# define __const const +# endif +# endif +# define __ptr_t void * +#else /* Not C++ or ANSI C. */ +# undef __P +# undef __PMT +# define __P(protos) () +# define __PMT(protos) () +# undef __const +# define __const +# define __ptr_t char * +#endif /* C++ or ANSI C. */ + +/* We need `size_t' for the following definitions. */ +#ifndef __size_t +# if defined __FreeBSD__ +# define __size_t size_t +# else +# if defined __GNUC__ && __GNUC__ >= 2 +typedef __SIZE_TYPE__ __size_t; +# else +/* This is a guess. */ +/*hb + * Conflicts with DECCs aready defined type __size_t. + * Defining an own type with a name beginning with '__' is no good. + * Anyway if DECC is used and __SIZE_T is defined then __size_t is + * already defined (and I hope it's exactly the one we need here). + */ +# if !(defined __DECC && defined __SIZE_T) +typedef unsigned long int __size_t; +# endif +# endif +# endif +#else +/* The GNU CC stddef.h version defines __size_t as empty. We need a real + definition. */ +# undef __size_t +# define __size_t size_t +#endif + +/* Bits set in the FLAGS argument to `glob'. */ +#define GLOB_ERR (1 << 0)/* Return on read errors. */ +#define GLOB_MARK (1 << 1)/* Append a slash to each name. */ +#define GLOB_NOSORT (1 << 2)/* Don't sort the names. */ +#define GLOB_DOOFFS (1 << 3)/* Insert PGLOB->gl_offs NULLs. */ +#define GLOB_NOCHECK (1 << 4)/* If nothing matches, return the pattern. */ +#define GLOB_APPEND (1 << 5)/* Append to results of a previous call. */ +#define GLOB_NOESCAPE (1 << 6)/* Backslashes don't quote metacharacters. */ +#define GLOB_PERIOD (1 << 7)/* Leading `.' can be matched by metachars. */ + +#if (!defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _BSD_SOURCE \ + || defined _GNU_SOURCE) +# define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */ +# define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */ +# define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */ +# define GLOB_NOMAGIC (1 << 11)/* If no magic chars, return the pattern. */ +# define GLOB_TILDE (1 << 12)/* Expand ~user and ~ to home directories. */ +# define GLOB_ONLYDIR (1 << 13)/* Match only directories. */ +# define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error + if the user name is not available. */ +# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ + GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ + GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE| \ + GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK) +#else +# define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ + GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ + GLOB_PERIOD) +#endif + +/* Error returns from `glob'. */ +#define GLOB_NOSPACE 1 /* Ran out of memory. */ +#define GLOB_ABORTED 2 /* Read error. */ +#define GLOB_NOMATCH 3 /* No matches found. */ +#define GLOB_NOSYS 4 /* Not implemented. */ +#ifdef _GNU_SOURCE +/* Previous versions of this file defined GLOB_ABEND instead of + GLOB_ABORTED. Provide a compatibility definition here. */ +# define GLOB_ABEND GLOB_ABORTED +#endif + +/* Structure describing a globbing run. */ +#if !defined _AMIGA && !defined VMS /* Buggy compiler. */ +struct stat; +#endif +typedef struct + { + __size_t gl_pathc; /* Count of paths matched by the pattern. */ + char **gl_pathv; /* List of matched pathnames. */ + __size_t gl_offs; /* Slots to reserve in `gl_pathv'. */ + int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ + + /* If the GLOB_ALTDIRFUNC flag is set, the following functions + are used instead of the normal file access functions. */ + void (*gl_closedir) __PMT ((void *)); + struct dirent *(*gl_readdir) __PMT ((void *)); + __ptr_t (*gl_opendir) __PMT ((__const char *)); + int (*gl_lstat) __PMT ((__const char *, struct stat *)); +#if defined(VMS) && defined(__DECC) && !defined(_POSIX_C_SOURCE) + int (*gl_stat) __PMT ((__const char *, struct stat *, ...)); +#else + int (*gl_stat) __PMT ((__const char *, struct stat *)); +#endif + } glob_t; + +#ifdef _LARGEFILE64_SOURCE +struct stat64; +typedef struct + { + __size_t gl_pathc; + char **gl_pathv; + __size_t gl_offs; + int gl_flags; + + /* If the GLOB_ALTDIRFUNC flag is set, the following functions + are used instead of the normal file access functions. */ + void (*gl_closedir) __PMT ((void *)); + struct dirent64 *(*gl_readdir) __PMT ((void *)); + __ptr_t (*gl_opendir) __PMT ((__const char *)); + int (*gl_lstat) __PMT ((__const char *, struct stat64 *)); + int (*gl_stat) __PMT ((__const char *, struct stat64 *)); + } glob64_t; +#endif + +#if _FILE_OFFSET_BITS == 64 && __GNUC__ < 2 +# define glob glob64 +# define globfree globfree64 +#else +# ifdef _LARGEFILE64_SOURCE +extern int glob64 __P ((__const char *__pattern, int __flags, + int (*__errfunc) (__const char *, int), + glob64_t *__pglob)); + +extern void globfree64 __P ((glob64_t *__pglob)); +# endif +#endif + +/* Do glob searching for PATTERN, placing results in PGLOB. + The bits defined above may be set in FLAGS. + If a directory cannot be opened or read and ERRFUNC is not nil, + it is called with the pathname that caused the error, and the + `errno' value from the failing call; if it returns non-zero + `glob' returns GLOB_ABEND; if it returns zero, the error is ignored. + If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. + Otherwise, `glob' returns zero. */ +#if _FILE_OFFSET_BITS != 64 || __GNUC__ < 2 +extern int glob __P ((__const char *__pattern, int __flags, + int (*__errfunc) (__const char *, int), + glob_t *__pglob)); + +/* Free storage allocated in PGLOB by a previous `glob' call. */ +extern void globfree __P ((glob_t *__pglob)); +#else +extern int glob __P ((__const char *__pattern, int __flags, + int (*__errfunc) (__const char *, int), + glob_t *__pglob)) __asm__ ("glob64"); + +extern void globfree __P ((glob_t *__pglob)) __asm__ ("globfree64"); +#endif + + +#ifdef _GNU_SOURCE +/* Return nonzero if PATTERN contains any metacharacters. + Metacharacters can be quoted with backslashes if QUOTE is nonzero. + + This function is not part of the interface specified by POSIX.2 + but several programs want to use it. */ +extern int glob_pattern_p __P ((__const char *__pattern, int __quote)); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* glob.h */ diff --git a/src/mkutil/make/hash.c b/src/mkutil/make/hash.c new file mode 100644 index 00000000..004d4988 --- /dev/null +++ b/src/mkutil/make/hash.c @@ -0,0 +1,333 @@ +/* hash.c -- hash table maintenance + Copyright (C) 1995, 1999, 2002 Free Software Foundation, Inc. + Written by Greg McGary + + 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "make.h" +#include "hash.h" + +#define CALLOC(t, n) ((t *) calloc (sizeof (t), (n))) +#define MALLOC(t, n) ((t *) xmalloc (sizeof (t) * (n))) +#define REALLOC(o, t, n) ((t *) xrealloc ((o), sizeof (t) * (n))) +#define CLONE(o, t, n) ((t *) memcpy (MALLOC (t, (n)), (o), sizeof (t) * (n))) + +static void hash_rehash __P((struct hash_table* ht)); +static unsigned long round_up_2 __P((unsigned long rough)); + +/* Implement double hashing with open addressing. The table size is + always a power of two. The secondary (`increment') hash function + is forced to return an odd-value, in order to be relatively prime + to the table size. This guarantees that the increment can + potentially hit every slot in the table during collision + resolution. */ + +void *hash_deleted_item = &hash_deleted_item; + +/* Force the table size to be a power of two, possibly rounding up the + given size. */ + +void +hash_init (struct hash_table *ht, unsigned long size, + hash_func_t hash_1, hash_func_t hash_2, hash_cmp_func_t hash_cmp) +{ + ht->ht_size = round_up_2 (size); + ht->ht_empty_slots = ht->ht_size; + ht->ht_vec = (void**) CALLOC (struct token *, ht->ht_size); + if (ht->ht_vec == 0) + { + fprintf (stderr, _("can't allocate %ld bytes for hash table: memory exhausted"), + ht->ht_size * sizeof(struct token *)); + exit (1); + } + + ht->ht_capacity = ht->ht_size - (ht->ht_size / 16); /* 93.75% loading factor */ + ht->ht_fill = 0; + ht->ht_collisions = 0; + ht->ht_lookups = 0; + ht->ht_rehashes = 0; + ht->ht_hash_1 = hash_1; + ht->ht_hash_2 = hash_2; + ht->ht_compare = hash_cmp; +} + +/* Load an array of items into `ht'. */ + +void +hash_load (struct hash_table *ht, void *item_table, + unsigned long cardinality, unsigned long size) +{ + char *items = (char *) item_table; + while (cardinality--) + { + hash_insert (ht, items); + items += size; + } +} + +/* Returns the address of the table slot matching `key'. If `key' is + not found, return the address of an empty slot suitable for + inserting `key'. The caller is responsible for incrementing + ht_fill on insertion. */ + +void ** +hash_find_slot (struct hash_table *ht, const void *key) +{ + void **slot; + void **deleted_slot = 0; + unsigned int hash_2 = 0; + unsigned int hash_1 = (*ht->ht_hash_1) (key); + + ht->ht_lookups++; + for (;;) + { + hash_1 &= (ht->ht_size - 1); + slot = &ht->ht_vec[hash_1]; + + if (*slot == 0) + return (deleted_slot ? deleted_slot : slot); + if (*slot == hash_deleted_item) + { + if (deleted_slot == 0) + deleted_slot = slot; + } + else + { + if (key == *slot) + return slot; + if ((*ht->ht_compare) (key, *slot) == 0) + return slot; + ht->ht_collisions++; + } + if (!hash_2) + hash_2 = (*ht->ht_hash_2) (key) | 1; + hash_1 += hash_2; + } +} + +void * +hash_find_item (struct hash_table *ht, const void *key) +{ + void **slot = hash_find_slot (ht, key); + return ((HASH_VACANT (*slot)) ? 0 : *slot); +} + +void * +hash_insert (struct hash_table *ht, void *item) +{ + void **slot = hash_find_slot (ht, item); + void *old_item = slot ? *slot : 0; + hash_insert_at (ht, item, slot); + return ((HASH_VACANT (old_item)) ? 0 : old_item); +} + +void * +hash_insert_at (struct hash_table *ht, void *item, const void *slot) +{ + void *old_item = *(void **) slot; + if (HASH_VACANT (old_item)) + { + ht->ht_fill++; + if (old_item == 0) + ht->ht_empty_slots--; + old_item = item; + } + *(void const **) slot = item; + if (ht->ht_empty_slots < ht->ht_size - ht->ht_capacity) + { + hash_rehash (ht); + return (void *) hash_find_slot (ht, item); + } + else + return (void *) slot; +} + +void * +hash_delete (struct hash_table *ht, const void *item) +{ + void **slot = hash_find_slot (ht, item); + return hash_delete_at (ht, slot); +} + +void * +hash_delete_at (struct hash_table *ht, const void *slot) +{ + void *item = *(void **) slot; + if (!HASH_VACANT (item)) + { + *(void const **) slot = hash_deleted_item; + ht->ht_fill--; + return item; + } + else + return 0; +} + +void +hash_free_items (struct hash_table *ht) +{ + void **vec = ht->ht_vec; + void **end = &vec[ht->ht_size]; + for (; vec < end; vec++) + { + void *item = *vec; + if (!HASH_VACANT (item)) + free (item); + *vec = 0; + } + ht->ht_fill = 0; + ht->ht_empty_slots = ht->ht_size; +} + +void +hash_delete_items (struct hash_table *ht) +{ + void **vec = ht->ht_vec; + void **end = &vec[ht->ht_size]; + for (; vec < end; vec++) + *vec = 0; + ht->ht_fill = 0; + ht->ht_collisions = 0; + ht->ht_lookups = 0; + ht->ht_rehashes = 0; + ht->ht_empty_slots = ht->ht_size; +} + +void +hash_free (struct hash_table *ht, int free_items) +{ + if (free_items) + hash_free_items (ht); + else + { + ht->ht_fill = 0; + ht->ht_empty_slots = ht->ht_size; + } + free (ht->ht_vec); + ht->ht_vec = 0; + ht->ht_capacity = 0; +} + +void +hash_map (struct hash_table *ht, hash_map_func_t map) +{ + void **slot; + void **end = &ht->ht_vec[ht->ht_size]; + + for (slot = ht->ht_vec; slot < end; slot++) + { + if (!HASH_VACANT (*slot)) + (*map) (*slot); + } +} + +void +hash_map_arg (struct hash_table *ht, hash_map_arg_func_t map, void *arg) +{ + void **slot; + void **end = &ht->ht_vec[ht->ht_size]; + + for (slot = ht->ht_vec; slot < end; slot++) + { + if (!HASH_VACANT (*slot)) + (*map) (*slot, arg); + } +} + +/* Double the size of the hash table in the event of overflow... */ + +static void +hash_rehash (struct hash_table *ht) +{ + unsigned long old_ht_size = ht->ht_size; + void **old_vec = ht->ht_vec; + void **ovp; + + if (ht->ht_fill >= ht->ht_capacity) + { + ht->ht_size *= 2; + ht->ht_capacity = ht->ht_size - (ht->ht_size >> 4); + } + ht->ht_rehashes++; + ht->ht_vec = (void **) CALLOC (struct token *, ht->ht_size); + + for (ovp = old_vec; ovp < &old_vec[old_ht_size]; ovp++) + { + if (! HASH_VACANT (*ovp)) + { + void **slot = hash_find_slot (ht, *ovp); + *slot = *ovp; + } + } + ht->ht_empty_slots = ht->ht_size - ht->ht_fill; + free (old_vec); +} + +void +hash_print_stats (struct hash_table *ht, FILE *out_FILE) +{ + /* GKM FIXME: honor NO_FLOAT */ + fprintf (out_FILE, _("Load=%ld/%ld=%.0f%%, "), ht->ht_fill, ht->ht_size, + 100.0 * (double) ht->ht_fill / (double) ht->ht_size); + fprintf (out_FILE, _("Rehash=%d, "), ht->ht_rehashes); + fprintf (out_FILE, _("Collisions=%ld/%ld=%.0f%%"), ht->ht_collisions, ht->ht_lookups, + (ht->ht_lookups + ? (100.0 * (double) ht->ht_collisions / (double) ht->ht_lookups) + : 0)); +} + +/* Dump all items into a NULL-terminated vector. Use the + user-supplied vector, or malloc one. */ + +void ** +hash_dump (struct hash_table *ht, void **vector_0, qsort_cmp_t compare) +{ + void **vector; + void **slot; + void **end = &ht->ht_vec[ht->ht_size]; + + if (vector_0 == 0) + vector_0 = MALLOC (void *, ht->ht_fill + 1); + vector = vector_0; + + for (slot = ht->ht_vec; slot < end; slot++) + if (!HASH_VACANT (*slot)) + *vector++ = *slot; + *vector = 0; + + if (compare) + qsort (vector_0, ht->ht_fill, sizeof (void *), compare); + return vector_0; +} + +/* Round a given number up to the nearest power of 2. */ + +static unsigned long +round_up_2 (unsigned long n) +{ + n |= (n >> 1); + n |= (n >> 2); + n |= (n >> 4); + n |= (n >> 8); + n |= (n >> 16); + +#if !defined(HAVE_LIMITS_H) || ULONG_MAX > 4294967295 + /* We only need this on systems where unsigned long is >32 bits. */ + n |= (n >> 32); +#endif + + return n + 1; +} diff --git a/src/mkutil/make/hash.h b/src/mkutil/make/hash.h new file mode 100644 index 00000000..405f1dab --- /dev/null +++ b/src/mkutil/make/hash.h @@ -0,0 +1,233 @@ +/* hash.h -- decls for hash table + Copyright (C) 1995, 1999, 2002 Free Software Foundation, Inc. + Written by Greg McGary + + 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef _hash_h_ +#define _hash_h_ + +#include +#include + +#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32 +# if !defined __GLIBC__ || !defined __P +# undef __P +# define __P(protos) protos +# endif +#else /* Not C++ or ANSI C. */ +# undef __P +# define __P(protos) () +/* We can get away without defining `const' here only because in this file + it is used only inside the prototype for `fnmatch', which is elided in + non-ANSI C where `const' is problematical. */ +#endif /* C++ or ANSI C. */ + +typedef unsigned long (*hash_func_t) __P((void const *key)); +typedef int (*hash_cmp_func_t) __P((void const *x, void const *y)); +typedef void (*hash_map_func_t) __P((void const *item)); +typedef void (*hash_map_arg_func_t) __P((void const *item, void *arg)); + +struct hash_table +{ + void **ht_vec; + unsigned long ht_size; /* total number of slots (power of 2) */ + unsigned long ht_capacity; /* usable slots, limited by loading-factor */ + unsigned long ht_fill; /* items in table */ + unsigned long ht_empty_slots; /* empty slots not including deleted slots */ + unsigned long ht_collisions; /* # of failed calls to comparison function */ + unsigned long ht_lookups; /* # of queries */ + unsigned int ht_rehashes; /* # of times we've expanded table */ + hash_func_t ht_hash_1; /* primary hash function */ + hash_func_t ht_hash_2; /* secondary hash function */ + hash_cmp_func_t ht_compare; /* comparison function */ +}; + +typedef int (*qsort_cmp_t) __P((void const *, void const *)); + +void hash_init __P((struct hash_table *ht, unsigned long size, + hash_func_t hash_1, hash_func_t hash_2, hash_cmp_func_t hash_cmp)); +void hash_load __P((struct hash_table *ht, void *item_table, + unsigned long cardinality, unsigned long size)); +void **hash_find_slot __P((struct hash_table *ht, void const *key)); +void *hash_find_item __P((struct hash_table *ht, void const *key)); +void *hash_insert __P((struct hash_table *ht, void *item)); +void *hash_insert_at __P((struct hash_table *ht, void *item, void const *slot)); +void *hash_delete __P((struct hash_table *ht, void const *item)); +void *hash_delete_at __P((struct hash_table *ht, void const *slot)); +void hash_delete_items __P((struct hash_table *ht)); +void hash_free_items __P((struct hash_table *ht)); +void hash_free __P((struct hash_table *ht, int free_items)); +void hash_map __P((struct hash_table *ht, hash_map_func_t map)); +void hash_map_arg __P((struct hash_table *ht, hash_map_arg_func_t map, void *arg)); +void hash_print_stats __P((struct hash_table *ht, FILE *out_FILE)); +void **hash_dump __P((struct hash_table *ht, void **vector_0, qsort_cmp_t compare)); + +extern void *hash_deleted_item; +#define HASH_VACANT(item) ((item) == 0 || (void *) (item) == hash_deleted_item) + + +/* hash and comparison macros for case-sensitive string keys. */ + +#define STRING_HASH_1(KEY, RESULT) do { \ + unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \ + while (*++_key_) \ + (RESULT) += (*_key_ << (_key_[1] & 0xf)); \ +} while (0) +#define return_STRING_HASH_1(KEY) do { \ + unsigned long _result_ = 0; \ + STRING_HASH_1 ((KEY), _result_); \ + return _result_; \ +} while (0) + +#define STRING_HASH_2(KEY, RESULT) do { \ + unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \ + while (*++_key_) \ + (RESULT) += (*_key_ << (_key_[1] & 0x7)); \ +} while (0) +#define return_STRING_HASH_2(KEY) do { \ + unsigned long _result_ = 0; \ + STRING_HASH_2 ((KEY), _result_); \ + return _result_; \ +} while (0) + +#define STRING_COMPARE(X, Y, RESULT) do { \ + RESULT = strcmp ((X), (Y)); \ +} while (0) +#define return_STRING_COMPARE(X, Y) do { \ + return strcmp ((X), (Y)); \ +} while (0) + + +#define STRING_N_HASH_1(KEY, N, RESULT) do { \ + unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \ + int _n_ = (N); \ + if (_n_) \ + while (--_n_ && *++_key_) \ + (RESULT) += (*_key_ << (_key_[1] & 0xf)); \ + (RESULT) += *++_key_; \ +} while (0) +#define return_STRING_N_HASH_1(KEY, N) do { \ + unsigned long _result_ = 0; \ + STRING_N_HASH_1 ((KEY), (N), _result_); \ + return _result_; \ +} while (0) + +#define STRING_N_HASH_2(KEY, N, RESULT) do { \ + unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \ + int _n_ = (N); \ + if (_n_) \ + while (--_n_ && *++_key_) \ + (RESULT) += (*_key_ << (_key_[1] & 0x7)); \ + (RESULT) += *++_key_; \ +} while (0) +#define return_STRING_N_HASH_2(KEY, N) do { \ + unsigned long _result_ = 0; \ + STRING_N_HASH_2 ((KEY), (N), _result_); \ + return _result_; \ +} while (0) + +#define STRING_N_COMPARE(X, Y, N, RESULT) do { \ + RESULT = strncmp ((X), (Y), (N)); \ +} while (0) +#define return_STRING_N_COMPARE(X, Y, N) do { \ + return strncmp ((X), (Y), (N)); \ +} while (0) + +#ifdef HAVE_CASE_INSENSITIVE_FS + +/* hash and comparison macros for case-insensitive string _key_s. */ + +#define ISTRING_HASH_1(KEY, RESULT) do { \ + unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \ + while (*++_key_) \ + (RESULT) += ((isupper (*_key_) ? tolower (*_key_) : *_key_) << (_key_[1] & 0xf)); \ +} while (0) +#define return_ISTRING_HASH_1(KEY) do { \ + unsigned long _result_ = 0; \ + ISTRING_HASH_1 ((KEY), _result_); \ + return _result_; \ +} while (0) + +#define ISTRING_HASH_2(KEY, RESULT) do { \ + unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \ + while (*++_key_) \ + (RESULT) += ((isupper (*_key_) ? tolower (*_key_) : *_key_) << (_key_[1] & 0x7)); \ +} while (0) +#define return_ISTRING_HASH_2(KEY) do { \ + unsigned long _result_ = 0; \ + ISTRING_HASH_2 ((KEY), _result_); \ + return _result_; \ +} while (0) + +#define ISTRING_COMPARE(X, Y, RESULT) do { \ + RESULT = strcmpi ((X), (Y)); \ +} while (0) +#define return_ISTRING_COMPARE(X, Y) do { \ + return strcmpi ((X), (Y)); \ +} while (0) + +#else + +#define ISTRING_HASH_1(KEY, RESULT) STRING_HASH_1 ((KEY), (RESULT)) +#define return_ISTRING_HASH_1(KEY) return_STRING_HASH_1 (KEY) + +#define ISTRING_HASH_2(KEY, RESULT) STRING_HASH_2 ((KEY), (RESULT)) +#define return_ISTRING_HASH_2(KEY) return_STRING_HASH_2 (KEY) + +#define ISTRING_COMPARE(X, Y, RESULT) STRING_COMPARE ((X), (Y), (RESULT)) +#define return_ISTRING_COMPARE(X, Y) return_STRING_COMPARE ((X), (Y)) + +#endif + +/* hash and comparison macros for integer _key_s. */ + +#define INTEGER_HASH_1(KEY, RESULT) do { \ + (RESULT) += ((unsigned long)(KEY)); \ +} while (0) +#define return_INTEGER_HASH_1(KEY) do { \ + unsigned long _result_ = 0; \ + INTEGER_HASH_1 ((KEY), _result_); \ + return _result_; \ +} while (0) + +#define INTEGER_HASH_2(KEY, RESULT) do { \ + (RESULT) += ~((unsigned long)(KEY)); \ +} while (0) +#define return_INTEGER_HASH_2(KEY) do { \ + unsigned long _result_ = 0; \ + INTEGER_HASH_2 ((KEY), _result_); \ + return _result_; \ +} while (0) + +#define INTEGER_COMPARE(X, Y, RESULT) do { \ + (RESULT) = X - Y; \ +} while (0) +#define return_INTEGER_COMPARE(X, Y) do { \ + int _result_; \ + INTEGER_COMPARE (X, Y, _result_); \ + return _result_; \ +} while (0) + +/* hash and comparison macros for address keys. */ + +#define ADDRESS_HASH_1(KEY, RESULT) INTEGER_HASH_1 (((unsigned long)(KEY)) >> 3, (RESULT)) +#define ADDRESS_HASH_2(KEY, RESULT) INTEGER_HASH_2 (((unsigned long)(KEY)) >> 3, (RESULT)) +#define ADDRESS_COMPARE(X, Y, RESULT) INTEGER_COMPARE ((X), (Y), (RESULT)) +#define return_ADDRESS_HASH_1(KEY) return_INTEGER_HASH_1 (((unsigned long)(KEY)) >> 3) +#define return_ADDRESS_HASH_2(KEY) return_INTEGER_HASH_2 (((unsigned long)(KEY)) >> 3) +#define return_ADDRESS_COMPARE(X, Y) return_INTEGER_COMPARE ((X), (Y)) + +#endif /* not _hash_h_ */ diff --git a/src/mkutil/make/i18n/CVS/Entries b/src/mkutil/make/i18n/CVS/Entries new file mode 100644 index 00000000..17848105 --- /dev/null +++ b/src/mkutil/make/i18n/CVS/Entries @@ -0,0 +1 @@ +D diff --git a/src/mkutil/make/i18n/CVS/Repository b/src/mkutil/make/i18n/CVS/Repository new file mode 100644 index 00000000..c90e7f12 --- /dev/null +++ b/src/mkutil/make/i18n/CVS/Repository @@ -0,0 +1 @@ +make/i18n diff --git a/src/mkutil/make/i18n/CVS/Root b/src/mkutil/make/i18n/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/i18n/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/implicit.c b/src/mkutil/make/implicit.c new file mode 100644 index 00000000..523dbb3d --- /dev/null +++ b/src/mkutil/make/implicit.c @@ -0,0 +1,630 @@ +/* Implicit rule searching for GNU Make. +Copyright (C) 1988,89,90,91,92,93,94,97,2000 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "filedef.h" +#include "rule.h" +#include "dep.h" +#include "debug.h" + +static int pattern_search PARAMS ((struct file *file, int archive, unsigned int depth, + unsigned int recursions)); + +/* For a FILE which has no commands specified, try to figure out some + from the implicit pattern rules. + Returns 1 if a suitable implicit rule was found, + after modifying FILE to contain the appropriate commands and deps, + or returns 0 if no implicit rule was found. */ + +int +try_implicit_rule (struct file *file, unsigned int depth) +{ + DBF (DB_IMPLICIT, _("Looking for an implicit rule for `%s'.\n")); + + /* The order of these searches was previously reversed. My logic now is + that since the non-archive search uses more information in the target + (the archive search omits the archive name), it is more specific and + should come first. */ + + if (pattern_search (file, 0, depth, 0)) + return 1; + +#ifndef NO_ARCHIVES + /* If this is an archive member reference, use just the + archive member name to search for implicit rules. */ + if (ar_name (file->name)) + { + DBF (DB_IMPLICIT, + _("Looking for archive-member implicit rule for `%s'.\n")); + if (pattern_search (file, 1, depth, 0)) + return 1; + } +#endif + + return 0; +} + + +/* Search the pattern rules for a rule with an existing dependency to make + FILE. If a rule is found, the appropriate commands and deps are put in FILE + and 1 is returned. If not, 0 is returned. + + If ARCHIVE is nonzero, FILE->name is of the form "LIB(MEMBER)". A rule for + "(MEMBER)" will be searched for, and "(MEMBER)" will not be chopped up into + directory and filename parts. + + If an intermediate file is found by pattern search, the intermediate file + is set up as a target by the recursive call and is also made a dependency + of FILE. + + DEPTH is used for debugging messages. */ + +static int +pattern_search (struct file *file, int archive, + unsigned int depth, unsigned int recursions) +{ + /* Filename we are searching for a rule for. */ + char *filename = archive ? strchr (file->name, '(') : file->name; + + /* Length of FILENAME. */ + unsigned int namelen = strlen (filename); + + /* The last slash in FILENAME (or nil if there is none). */ + char *lastslash; + + /* This is a file-object used as an argument in + recursive calls. It never contains any data + except during a recursive call. */ + struct file *intermediate_file = 0; + + /* List of dependencies found recursively. */ + struct file **intermediate_files + = (struct file **) xmalloc (max_pattern_deps * sizeof (struct file *)); + + /* List of the patterns used to find intermediate files. */ + char **intermediate_patterns + = (char **) alloca (max_pattern_deps * sizeof (char *)); + + /* This buffer records all the dependencies actually found for a rule. */ + char **found_files = (char **) alloca (max_pattern_deps * sizeof (char *)); + /* Number of dep names now in FOUND_FILES. */ + unsigned int deps_found = 0; + + /* Names of possible dependencies are constructed in this buffer. */ + register char *depname = (char *) alloca (namelen + max_pattern_dep_length); + + /* The start and length of the stem of FILENAME for the current rule. */ + register char *stem = 0; + register unsigned int stemlen = 0; + register unsigned int fullstemlen = 0; + + /* Buffer in which we store all the rules that are possibly applicable. */ + struct rule **tryrules + = (struct rule **) xmalloc (num_pattern_rules * max_pattern_targets + * sizeof (struct rule *)); + + /* Number of valid elements in TRYRULES. */ + unsigned int nrules; + + /* The numbers of the rule targets of each rule + in TRYRULES that matched the target file. */ + unsigned int *matches + = (unsigned int *) alloca (num_pattern_rules * sizeof (unsigned int)); + + /* Each element is nonzero if LASTSLASH was used in + matching the corresponding element of TRYRULES. */ + char *checked_lastslash + = (char *) alloca (num_pattern_rules * sizeof (char)); + + /* The index in TRYRULES of the rule we found. */ + unsigned int foundrule; + + /* Nonzero if should consider intermediate files as dependencies. */ + int intermed_ok; + + /* Nonzero if we have matched a pattern-rule target + that is not just `%'. */ + int specific_rule_matched = 0; + + register unsigned int i = 0; /* uninit checks OK */ + register struct rule *rule; + register struct dep *dep; + + char *p, *vp; + +#ifndef NO_ARCHIVES + if (archive || ar_name (filename)) + lastslash = 0; + else +#endif + { + /* Set LASTSLASH to point at the last slash in FILENAME + but not counting any slash at the end. (foo/bar/ counts as + bar/ in directory foo/, not empty in directory foo/bar/.) */ +#ifdef VMS + lastslash = strrchr (filename, ']'); + if (lastslash == 0) + lastslash = strrchr (filename, ':'); +#else + lastslash = strrchr (filename, '/'); +#ifdef HAVE_DOS_PATHS + /* Handle backslashes (possibly mixed with forward slashes) + and the case of "d:file". */ + { + char *bslash = strrchr (filename, '\\'); + if (lastslash == 0 || bslash > lastslash) + lastslash = bslash; + if (lastslash == 0 && filename[0] && filename[1] == ':') + lastslash = filename + 1; + } +#endif +#endif + if (lastslash != 0 && lastslash[1] == '\0') + lastslash = 0; + } + + /* First see which pattern rules match this target + and may be considered. Put them in TRYRULES. */ + + nrules = 0; + for (rule = pattern_rules; rule != 0; rule = rule->next) + { + /* If the pattern rule has deps but no commands, ignore it. + Users cancel built-in rules by redefining them without commands. */ + if (rule->deps != 0 && rule->cmds == 0) + continue; + + /* If this rule is in use by a parent pattern_search, + don't use it here. */ + if (rule->in_use) + { + DBS (DB_IMPLICIT, (_("Avoiding implicit rule recursion.\n"))); + continue; + } + + for (i = 0; rule->targets[i] != 0; ++i) + { + char *target = rule->targets[i]; + char *suffix = rule->suffixes[i]; + int check_lastslash; + + /* Rules that can match any filename and are not terminal + are ignored if we're recursing, so that they cannot be + intermediate files. */ + if (recursions > 0 && target[1] == '\0' && !rule->terminal) + continue; + + if (rule->lens[i] > namelen) + /* It can't possibly match. */ + continue; + + /* From the lengths of the filename and the pattern parts, + find the stem: the part of the filename that matches the %. */ + stem = filename + (suffix - target - 1); + stemlen = namelen - rule->lens[i] + 1; + + /* Set CHECK_LASTSLASH if FILENAME contains a directory + prefix and the target pattern does not contain a slash. */ + +#ifdef VMS + check_lastslash = lastslash != 0 + && ((strchr (target, ']') == 0) + && (strchr (target, ':') == 0)); +#else + check_lastslash = lastslash != 0 && strchr (target, '/') == 0; +#endif + if (check_lastslash) + { + /* In that case, don't include the + directory prefix in STEM here. */ + unsigned int difference = lastslash - filename + 1; + if (difference > stemlen) + continue; + stemlen -= difference; + stem += difference; + } + + /* Check that the rule pattern matches the text before the stem. */ + if (check_lastslash) + { + if (stem > (lastslash + 1) + && !strneq (target, lastslash + 1, stem - lastslash - 1)) + continue; + } + else if (stem > filename + && !strneq (target, filename, stem - filename)) + continue; + + /* Check that the rule pattern matches the text after the stem. + We could test simply use streq, but this way we compare the + first two characters immediately. This saves time in the very + common case where the first character matches because it is a + period. */ + if (*suffix != stem[stemlen] + || (*suffix != '\0' && !streq (&suffix[1], &stem[stemlen + 1]))) + continue; + + /* Record if we match a rule that not all filenames will match. */ + if (target[1] != '\0') + specific_rule_matched = 1; + + /* A rule with no dependencies and no commands exists solely to set + specific_rule_matched when it matches. Don't try to use it. */ + if (rule->deps == 0 && rule->cmds == 0) + continue; + + /* Record this rule in TRYRULES and the index of the matching + target in MATCHES. If several targets of the same rule match, + that rule will be in TRYRULES more than once. */ + tryrules[nrules] = rule; + matches[nrules] = i; + checked_lastslash[nrules] = check_lastslash; + ++nrules; + } + } + + /* If we have found a matching rule that won't match all filenames, + retroactively reject any non-"terminal" rules that do always match. */ + if (specific_rule_matched) + for (i = 0; i < nrules; ++i) + if (!tryrules[i]->terminal) + { + register unsigned int j; + for (j = 0; tryrules[i]->targets[j] != 0; ++j) + if (tryrules[i]->targets[j][1] == '\0') + break; + if (tryrules[i]->targets[j] != 0) + tryrules[i] = 0; + } + + /* Try each rule once without intermediate files, then once with them. */ + for (intermed_ok = 0; intermed_ok == !!intermed_ok; ++intermed_ok) + { + /* Try each pattern rule till we find one that applies. + If it does, copy the names of its dependencies (as substituted) + and store them in FOUND_FILES. DEPS_FOUND is the number of them. */ + + for (i = 0; i < nrules; i++) + { + int check_lastslash; + + rule = tryrules[i]; + + /* RULE is nil when we discover that a rule, + already placed in TRYRULES, should not be applied. */ + if (rule == 0) + continue; + + /* Reject any terminal rules if we're + looking to make intermediate files. */ + if (intermed_ok && rule->terminal) + continue; + + /* Mark this rule as in use so a recursive + pattern_search won't try to use it. */ + rule->in_use = 1; + + /* From the lengths of the filename and the matching pattern parts, + find the stem: the part of the filename that matches the %. */ + stem = filename + + (rule->suffixes[matches[i]] - rule->targets[matches[i]]) - 1; + stemlen = namelen - rule->lens[matches[i]] + 1; + check_lastslash = checked_lastslash[i]; + if (check_lastslash) + { + stem += lastslash - filename + 1; + stemlen -= (lastslash - filename) + 1; + } + + DBS (DB_IMPLICIT, (_("Trying pattern rule with stem `%.*s'.\n"), + (int) stemlen, stem)); + + /* Try each dependency; see if it "exists". */ + + deps_found = 0; + for (dep = rule->deps; dep != 0; dep = dep->next) + { + /* If the dependency name has a %, substitute the stem. */ + p = strchr (dep_name (dep), '%'); + if (p != 0) + { + register unsigned int i; + if (check_lastslash) + { + /* Copy directory name from the original FILENAME. */ + i = lastslash - filename + 1; + bcopy (filename, depname, i); + } + else + i = 0; + bcopy (dep_name (dep), depname + i, p - dep_name (dep)); + i += p - dep_name (dep); + bcopy (stem, depname + i, stemlen); + i += stemlen; + strcpy (depname + i, p + 1); + p = depname; + } + else + p = dep_name (dep); + + /* P is now the actual dependency name as substituted. */ + + if (file_impossible_p (p)) + { + /* If this dependency has already been ruled + "impossible", then the rule fails and don't + bother trying it on the second pass either + since we know that will fail too. */ + DBS (DB_IMPLICIT, + (p == depname + ? _("Rejecting impossible implicit prerequisite `%s'.\n") + : _("Rejecting impossible rule prerequisite `%s'.\n"), + p)); + tryrules[i] = 0; + break; + } + + intermediate_files[deps_found] = 0; + + DBS (DB_IMPLICIT, + (p == depname + ? _("Trying implicit prerequisite `%s'.\n") + : _("Trying rule prerequisite `%s'.\n"), p)); + + /* The DEP->changed flag says that this dependency resides in a + nonexistent directory. So we normally can skip looking for + the file. However, if CHECK_LASTSLASH is set, then the + dependency file we are actually looking for is in a different + directory (the one gotten by prepending FILENAME's directory), + so it might actually exist. */ + + if (lookup_file (p) != 0 + || ((!dep->changed || check_lastslash) && file_exists_p (p))) + { + found_files[deps_found++] = xstrdup (p); + continue; + } + /* This code, given FILENAME = "lib/foo.o", dependency name + "lib/foo.c", and VPATH=src, searches for "src/lib/foo.c". */ + vp = p; + if (vpath_search (&vp, (FILE_TIMESTAMP *) 0)) + { + DBS (DB_IMPLICIT, + (_("Found prerequisite `%s' as VPATH `%s'\n"), p, vp)); + strcpy (vp, p); + found_files[deps_found++] = vp; + continue; + } + + /* We could not find the file in any place we should look. + Try to make this dependency as an intermediate file, + but only on the second pass. */ + + if (intermed_ok) + { + if (intermediate_file == 0) + intermediate_file + = (struct file *) alloca (sizeof (struct file)); + + DBS (DB_IMPLICIT, + (_("Looking for a rule with intermediate file `%s'.\n"), + p)); + + bzero ((char *) intermediate_file, sizeof (struct file)); + intermediate_file->name = p; + if (pattern_search (intermediate_file, 0, depth + 1, + recursions + 1)) + { + p = xstrdup (p); + intermediate_patterns[deps_found] + = intermediate_file->name; + intermediate_file->name = p; + intermediate_files[deps_found] = intermediate_file; + intermediate_file = 0; + /* Allocate an extra copy to go in FOUND_FILES, + because every elt of FOUND_FILES is consumed + or freed later. */ + found_files[deps_found] = xstrdup (p); + ++deps_found; + continue; + } + + /* If we have tried to find P as an intermediate + file and failed, mark that name as impossible + so we won't go through the search again later. */ + file_impossible (p); + } + + /* A dependency of this rule does not exist. + Therefore, this rule fails. */ + break; + } + + /* This rule is no longer `in use' for recursive searches. */ + rule->in_use = 0; + + if (dep != 0) + { + /* This pattern rule does not apply. + If some of its dependencies succeeded, + free the data structure describing them. */ + while (deps_found-- > 0) + { + register struct file *f = intermediate_files[deps_found]; + free (found_files[deps_found]); + if (f != 0 + && (f->stem < f->name + || f->stem > f->name + strlen (f->name))) + free (f->stem); + } + } + else + /* This pattern rule does apply. Stop looking for one. */ + break; + } + + /* If we found an applicable rule without + intermediate files, don't try with them. */ + if (i < nrules) + break; + + rule = 0; + } + + /* RULE is nil if the loop went all the way + through the list and everything failed. */ + if (rule == 0) + goto done; + + foundrule = i; + + /* If we are recursing, store the pattern that matched + FILENAME in FILE->name for use in upper levels. */ + + if (recursions > 0) + /* Kludge-o-matic */ + file->name = rule->targets[matches[foundrule]]; + + /* FOUND_FILES lists the dependencies for the rule we found. + This includes the intermediate files, if any. + Convert them into entries on the deps-chain of FILE. */ + + while (deps_found-- > 0) + { + register char *s; + + if (intermediate_files[deps_found] != 0) + { + /* If we need to use an intermediate file, + make sure it is entered as a target, with the info that was + found for it in the recursive pattern_search call. + We know that the intermediate file did not already exist as + a target; therefore we can assume that the deps and cmds + of F below are null before we change them. */ + + struct file *imf = intermediate_files[deps_found]; + register struct file *f = enter_file (imf->name); + f->deps = imf->deps; + f->cmds = imf->cmds; + f->stem = imf->stem; + f->also_make = imf->also_make; + imf = lookup_file (intermediate_patterns[deps_found]); + if (imf != 0 && imf->precious) + f->precious = 1; + f->intermediate = 1; + f->tried_implicit = 1; + for (dep = f->deps; dep != 0; dep = dep->next) + { + dep->file = enter_file (dep->name); + /* enter_file uses dep->name _if_ we created a new file. */ + if (dep->name != dep->file->name) + free (dep->name); + dep->name = 0; + dep->file->tried_implicit |= dep->changed; + } + } + + dep = (struct dep *) xmalloc (sizeof (struct dep)); + dep->ignore_mtime = 0; + s = found_files[deps_found]; + if (recursions == 0) + { + dep->name = 0; + dep->file = lookup_file (s); + if (dep->file == 0) + /* enter_file consumes S's storage. */ + dep->file = enter_file (s); + else + /* A copy of S is already allocated in DEP->file->name. + So we can free S. */ + free (s); + } + else + { + dep->name = s; + dep->file = 0; + dep->changed = 0; + } + if (intermediate_files[deps_found] == 0 && tryrules[foundrule]->terminal) + { + /* If the file actually existed (was not an intermediate file), + and the rule that found it was a terminal one, then we want + to mark the found file so that it will not have implicit rule + search done for it. If we are not entering a `struct file' for + it now, we indicate this with the `changed' flag. */ + if (dep->file == 0) + dep->changed = 1; + else + dep->file->tried_implicit = 1; + } + dep->next = file->deps; + file->deps = dep; + } + + if (!checked_lastslash[foundrule]) + { + /* Always allocate new storage, since STEM might be + on the stack for an intermediate file. */ + file->stem = savestring (stem, stemlen); + fullstemlen = stemlen; + } + else + { + int dirlen = (lastslash + 1) - filename; + + /* We want to prepend the directory from + the original FILENAME onto the stem. */ + fullstemlen = dirlen + stemlen; + file->stem = (char *) xmalloc (fullstemlen + 1); + bcopy (filename, file->stem, dirlen); + bcopy (stem, file->stem + dirlen, stemlen); + file->stem[fullstemlen] = '\0'; + } + + file->cmds = rule->cmds; + + /* If this rule builds other targets, too, put the others into FILE's + `also_make' member. */ + + if (rule->targets[1] != 0) + for (i = 0; rule->targets[i] != 0; ++i) + if (i != matches[foundrule]) + { + struct dep *new = (struct dep *) xmalloc (sizeof (struct dep)); + /* GKM FIMXE: handle '|' here too */ + new->ignore_mtime = 0; + new->name = p = (char *) xmalloc (rule->lens[i] + fullstemlen + 1); + bcopy (rule->targets[i], p, + rule->suffixes[i] - rule->targets[i] - 1); + p += rule->suffixes[i] - rule->targets[i] - 1; + bcopy (file->stem, p, fullstemlen); + p += fullstemlen; + bcopy (rule->suffixes[i], p, + rule->lens[i] - (rule->suffixes[i] - rule->targets[i]) + 1); + new->file = enter_file (new->name); + new->next = file->also_make; + file->also_make = new; + } + + done: + free (intermediate_files); + free (tryrules); + + return rule != 0; +} diff --git a/src/mkutil/make/job.c b/src/mkutil/make/job.c new file mode 100644 index 00000000..1a468073 --- /dev/null +++ b/src/mkutil/make/job.c @@ -0,0 +1,3479 @@ +/* Job execution and handling for GNU Make. +Copyright (C) 1988,89,90,91,92,93,94,95,96,97,99 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" + +#include + +#include "job.h" +#include "debug.h" +#include "filedef.h" +#include "commands.h" +#include "variable.h" +#include "debug.h" + +#include + +/* Default shell to use. */ +#ifdef WINDOWS32 + +char *default_shell = "sh.exe"; +int no_default_sh_exe = 1; +int batch_mode_shell = 1; + +#elif defined (_AMIGA) + +char default_shell[] = ""; +extern int MyExecute (char **); +int batch_mode_shell = 0; + +#elif defined (__MSDOS__) + +/* The default shell is a pointer so we can change it if Makefile + says so. It is without an explicit path so we get a chance + to search the $PATH for it (since MSDOS doesn't have standard + directories we could trust). */ +char *default_shell = "command.com"; +int batch_mode_shell = 0; + +#elif defined (__EMX__) + +const char *default_shell = "/bin/sh"; +int batch_mode_shell = 0; + +#elif defined (VMS) + +# include +char default_shell[] = ""; +int batch_mode_shell = 0; + +#else + +char default_shell[] = "/bin/sh"; +int batch_mode_shell = 0; + +#endif + +#ifdef __MSDOS__ +# include +static int execute_by_shell; +static int dos_pid = 123; +int dos_status; +int dos_command_running; +#endif /* __MSDOS__ */ + +#ifdef _AMIGA +# include +static int amiga_pid = 123; +static int amiga_status; +static char amiga_bname[32]; +static int amiga_batch_file; +#endif /* Amiga. */ + +#ifdef VMS +# ifndef __GNUC__ +# include +# endif +# include +# include +#endif + +#ifdef WINDOWS32 +# include +# include +# include +# include "sub_proc.h" +# include "w32err.h" +# include "pathstuff.h" +#endif /* WINDOWS32 */ + +#ifdef __EMX__ +# include +#endif + +#if defined (HAVE_SYS_WAIT_H) || defined (HAVE_UNION_WAIT) +# include +#endif + +#ifdef HAVE_WAITPID +# define WAIT_NOHANG(status) waitpid (-1, (status), WNOHANG) +#else /* Don't have waitpid. */ +# ifdef HAVE_WAIT3 +# ifndef wait3 +extern int wait3 (); +# endif +# define WAIT_NOHANG(status) wait3 ((status), WNOHANG, (struct rusage *) 0) +# endif /* Have wait3. */ +#endif /* Have waitpid. */ + +#if !defined (wait) && !defined (POSIX) +extern int wait (); +#endif + +#ifndef HAVE_UNION_WAIT + +# define WAIT_T int + +# ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +# endif +# ifndef WCOREDUMP +# define WCOREDUMP(x) ((x) & 0x80) +# endif +# ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +# endif +# ifndef WIFSIGNALED +# define WIFSIGNALED(x) (WTERMSIG (x) != 0) +# endif +# ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +# endif + +#else /* Have `union wait'. */ + +# define WAIT_T union wait +# ifndef WTERMSIG +# define WTERMSIG(x) ((x).w_termsig) +# endif +# ifndef WCOREDUMP +# define WCOREDUMP(x) ((x).w_coredump) +# endif +# ifndef WEXITSTATUS +# define WEXITSTATUS(x) ((x).w_retcode) +# endif +# ifndef WIFSIGNALED +# define WIFSIGNALED(x) (WTERMSIG(x) != 0) +# endif +# ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG(x) == 0) +# endif + +#endif /* Don't have `union wait'. */ + +#ifdef VMS +static int vms_jobsefnmask = 0; +#endif /* !VMS */ + +#ifndef HAVE_UNISTD_H +extern int dup2 (); +extern int execve (); +extern void _exit (); +# ifndef VMS +extern int geteuid (); +extern int getegid (); +extern int setgid (); +extern int getgid (); +# endif +#endif + +extern char *allocated_variable_expand_for_file PARAMS ((char *line, struct file *file)); + +extern int getloadavg PARAMS ((double loadavg[], int nelem)); +extern int start_remote_job PARAMS ((char **argv, char **envp, int stdin_fd, + int *is_remote, int *id_ptr, int *used_stdin)); +extern int start_remote_job_p PARAMS ((int)); +extern int remote_status PARAMS ((int *exit_code_ptr, int *signal_ptr, + int *coredump_ptr, int block)); + +RETSIGTYPE child_handler PARAMS ((int)); +static void free_child PARAMS ((struct child *)); +static void start_job_command PARAMS ((struct child *child)); +static int load_too_high PARAMS ((void)); +static int job_next_command PARAMS ((struct child *)); +static int start_waiting_job PARAMS ((struct child *)); +#ifdef VMS +static void vmsWaitForChildren PARAMS ((int *)); +#endif + +/* Chain of all live (or recently deceased) children. */ + +struct child *children = 0; + +/* Number of children currently running. */ + +unsigned int job_slots_used = 0; + +/* Nonzero if the `good' standard input is in use. */ + +static int good_stdin_used = 0; + +/* Chain of children waiting to run until the load average goes down. */ + +static struct child *waiting_jobs = 0; + +/* Non-zero if we use a *real* shell (always so on Unix). */ + +int unixy_shell = 1; + + +#ifdef WINDOWS32 +/* + * The macro which references this function is defined in make.h. + */ +int +w32_kill(int pid, int sig) +{ + return ((process_kill(pid, sig) == TRUE) ? 0 : -1); +} +#endif /* WINDOWS32 */ + +#ifdef __EMX__ +/* returns whether path is assumed to be a unix like shell. */ +int +_is_unixy_shell (const char *path) +{ + /* list of non unix shells */ + const char *known_os2shells[] = { + "cmd.exe", + "cmd", + "4os2.exe", + "4os2", + "4dos.exe", + "4dos", + "command.com", + "command", + NULL + }; + + /* find the rightmost '/' or '\\' */ + const char *name = strrchr (path, '/'); + const char *p = strrchr (path, '\\'); + unsigned i; + + if (name && p) /* take the max */ + name = (name > p) ? name : p; + else if (p) /* name must be 0 */ + name = p; + else if (!name) /* name and p must be 0 */ + name = path; + + if (*name == '/' || *name == '\\') name++; + + i = 0; + while (known_os2shells[i] != NULL) { + if (stricmp (name, known_os2shells[i]) == 0) /* strcasecmp() */ + return 0; /* not a unix shell */ + i++; + } + + /* in doubt assume a unix like shell */ + return 1; +} +#endif /* __EMX__ */ + + +/* Write an error message describing the exit status given in + EXIT_CODE, EXIT_SIG, and COREDUMP, for the target TARGET_NAME. + Append "(ignored)" if IGNORED is nonzero. */ + +static void +child_error (char *target_name, int exit_code, int exit_sig, int coredump, + int ignored) +{ + if (ignored && silent_flag) + return; + +#ifdef VMS + if (!(exit_code & 1)) + error (NILF, + (ignored ? _("*** [%s] Error 0x%x (ignored)") + : _("*** [%s] Error 0x%x")), + target_name, exit_code); +#else + if (exit_sig == 0) + error (NILF, ignored ? _("[%s] Error %d (ignored)") : + _("*** [%s] Error %d"), + target_name, exit_code); + else + error (NILF, "*** [%s] %s%s", + target_name, strsignal (exit_sig), + coredump ? _(" (core dumped)") : ""); +#endif /* VMS */ +} + +#ifdef VMS +/* Wait for nchildren children to terminate */ +static void +vmsWaitForChildren(int *status) +{ + while (1) + { + if (!vms_jobsefnmask) + { + *status = 0; + return; + } + + *status = sys$wflor (32, vms_jobsefnmask); + } + return; +} + +/* Set up IO redirection. */ + +char * +vms_redirect (struct dsc$descriptor_s *desc, char *fname, char *ibuf) +{ + char *fptr; + extern char *vmsify (); + + ibuf++; + while (isspace ((unsigned char)*ibuf)) + ibuf++; + fptr = ibuf; + while (*ibuf && !isspace ((unsigned char)*ibuf)) + ibuf++; + *ibuf = 0; + if (strcmp (fptr, "/dev/null") != 0) + { + strcpy (fname, vmsify (fptr, 0)); + if (strchr (fname, '.') == 0) + strcat (fname, "."); + } + desc->dsc$w_length = strlen(fname); + desc->dsc$a_pointer = fname; + desc->dsc$b_dtype = DSC$K_DTYPE_T; + desc->dsc$b_class = DSC$K_CLASS_S; + + if (*fname == 0) + printf (_("Warning: Empty redirection\n")); + return ibuf; +} + + +/* + found apostrophe at (p-1) + + inc p until after closing apostrophe. */ + +static char * +handle_apos (char *p) +{ + int alast; + int inside; + +#define SEPCHARS ",/()= " + + inside = 0; + + while (*p != 0) + { + if (*p == '"') + { + if (inside) + { + while ((alast > 0) + && (*p == '"')) + { + p++; + alast--; + } + if (alast == 0) + inside = 0; + else + { + fprintf (stderr, _("Syntax error, still inside '\"'\n")); + exit (3); + } + } + else + { + p++; + if (strchr (SEPCHARS, *p)) + break; + inside = 1; + alast = 1; + while (*p == '"') + { + alast++; + p++; + } + } + } + else + p++; + } + + return p; +} + +#endif + + +/* Handle a dead child. This handler may or may not ever be installed. + + If we're using the jobserver feature, we need it. First, installing it + ensures the read will interrupt on SIGCHLD. Second, we close the dup'd + read FD to ensure we don't enter another blocking read without reaping all + the dead children. In this case we don't need the dead_children count. + + If we don't have either waitpid or wait3, then make is unreliable, but we + use the dead_children count to reap children as best we can. */ + +static unsigned int dead_children = 0; + +#ifndef __EMX__ /* Don't use SIGCHLD handler on OS/2. */ +RETSIGTYPE +child_handler (int sig) +{ + ++dead_children; + + if (job_rfd >= 0) + { + close (job_rfd); + job_rfd = -1; + } + + DB (DB_JOBS, (_("Got a SIGCHLD; %u unreaped children.\n"), dead_children)); +} +#endif /* !__EMX__ */ + +extern int shell_function_pid, shell_function_completed; + +/* Reap all dead children, storing the returned status and the new command + state (`cs_finished') in the `file' member of the `struct child' for the + dead child, and removing the child from the chain. In addition, if BLOCK + nonzero, we block in this function until we've reaped at least one + complete child, waiting for it to die if necessary. If ERR is nonzero, + print an error message first. */ + +void +reap_children (int block, int err) +{ + WAIT_T status; + /* Initially, assume we have some. */ + int reap_more = 1; + +#ifdef WAIT_NOHANG +# define REAP_MORE reap_more +#else +# define REAP_MORE dead_children +#endif + + /* As long as: + + We have at least one child outstanding OR a shell function in progress, + AND + We're blocking for a complete child OR there are more children to reap + + we'll keep reaping children. */ + + while ((children != 0 || shell_function_pid != 0) + && (block || REAP_MORE)) + { + int remote = 0; + register int pid; + int exit_code, exit_sig, coredump; + register struct child *lastc, *c; + int child_failed; + int any_remote, any_local; + + if (err && block) + { + /* We might block for a while, so let the user know why. */ + fflush (stdout); + error (NILF, _("*** Waiting for unfinished jobs....")); + } + + /* We have one less dead child to reap. As noted in + child_handler() above, this count is completely unimportant for + all modern, POSIX-y systems that support wait3() or waitpid(). + The rest of this comment below applies only to early, broken + pre-POSIX systems. We keep the count only because... it's there... + + The test and decrement are not atomic; if it is compiled into: + register = dead_children - 1; + dead_children = register; + a SIGCHLD could come between the two instructions. + child_handler increments dead_children. + The second instruction here would lose that increment. But the + only effect of dead_children being wrong is that we might wait + longer than necessary to reap a child, and lose some parallelism; + and we might print the "Waiting for unfinished jobs" message above + when not necessary. */ + + if (dead_children > 0) + --dead_children; + + any_remote = 0; + any_local = shell_function_pid != 0; + for (c = children; c != 0; c = c->next) + { + any_remote |= c->remote; + any_local |= ! c->remote; + DB (DB_JOBS, (_("Live child 0x%08lx (%s) PID %ld %s\n"), + (unsigned long int) c, c->file->name, + (long) c->pid, c->remote ? _(" (remote)") : "")); +#ifdef VMS + break; +#endif + } + + /* First, check for remote children. */ + if (any_remote) + pid = remote_status (&exit_code, &exit_sig, &coredump, 0); + else + pid = 0; + + if (pid > 0) + /* We got a remote child. */ + remote = 1; + else if (pid < 0) + { + /* A remote status command failed miserably. Punt. */ + remote_status_lose: + pfatal_with_name ("remote_status"); + } + else + { + /* No remote children. Check for local children. */ +#if !defined(__MSDOS__) && !defined(_AMIGA) && !defined(WINDOWS32) + if (any_local) + { +#ifdef VMS + vmsWaitForChildren (&status); + pid = c->pid; +#else +#ifdef WAIT_NOHANG + if (!block) + pid = WAIT_NOHANG (&status); + else +#endif + pid = wait (&status); +#endif /* !VMS */ + } + else + pid = 0; + + if (pid < 0) + { + /* The wait*() failed miserably. Punt. */ + pfatal_with_name ("wait"); + } + else if (pid > 0) + { + /* We got a child exit; chop the status word up. */ + exit_code = WEXITSTATUS (status); + exit_sig = WIFSIGNALED (status) ? WTERMSIG (status) : 0; + coredump = WCOREDUMP (status); + +#ifdef __EMX__ + /* the SIGCHLD handler must not be used on OS/2 because, unlike + on UNIX systems, it had to call wait() itself. Therefore + job_rfd has to be closed here. */ + if (job_rfd >= 0) + { + close (job_rfd); + job_rfd = -1; + } +#endif + + } + else + { + /* No local children are dead. */ + reap_more = 0; + + if (!block || !any_remote) + break; + + /* Now try a blocking wait for a remote child. */ + pid = remote_status (&exit_code, &exit_sig, &coredump, 1); + if (pid < 0) + goto remote_status_lose; + else if (pid == 0) + /* No remote children either. Finally give up. */ + break; + + /* We got a remote child. */ + remote = 1; + } +#endif /* !__MSDOS__, !Amiga, !WINDOWS32. */ + +#ifdef __MSDOS__ + /* Life is very different on MSDOS. */ + pid = dos_pid - 1; + status = dos_status; + exit_code = WEXITSTATUS (status); + if (exit_code == 0xff) + exit_code = -1; + exit_sig = WIFSIGNALED (status) ? WTERMSIG (status) : 0; + coredump = 0; +#endif /* __MSDOS__ */ +#ifdef _AMIGA + /* Same on Amiga */ + pid = amiga_pid - 1; + status = amiga_status; + exit_code = amiga_status; + exit_sig = 0; + coredump = 0; +#endif /* _AMIGA */ +#ifdef WINDOWS32 + { + HANDLE hPID; + int err; + + /* wait for anything to finish */ + if (hPID = process_wait_for_any()) { + + /* was an error found on this process? */ + err = process_last_err(hPID); + + /* get exit data */ + exit_code = process_exit_code(hPID); + + if (err) + fprintf(stderr, "make (e=%d): %s", + exit_code, map_windows32_error_to_string(exit_code)); + + /* signal */ + exit_sig = process_signal(hPID); + + /* cleanup process */ + process_cleanup(hPID); + + coredump = 0; + } + pid = (int) hPID; + } +#endif /* WINDOWS32 */ + } + + /* Check if this is the child of the `shell' function. */ + if (!remote && pid == shell_function_pid) + { + /* It is. Leave an indicator for the `shell' function. */ + if (exit_sig == 0 && exit_code == 127) + shell_function_completed = -1; + else + shell_function_completed = 1; + break; + } + + child_failed = exit_sig != 0 || exit_code != 0; + + /* Search for a child matching the deceased one. */ + lastc = 0; + for (c = children; c != 0; lastc = c, c = c->next) + if (c->remote == remote && c->pid == pid) + break; + + if (c == 0) + /* An unknown child died. + Ignore it; it was inherited from our invoker. */ + continue; + + DB (DB_JOBS, (child_failed + ? _("Reaping losing child 0x%08lx PID %ld %s\n") + : _("Reaping winning child 0x%08lx PID %ld %s\n"), + (unsigned long int) c, (long) c->pid, + c->remote ? _(" (remote)") : "")); + + if (c->sh_batch_file) { + DB (DB_JOBS, (_("Cleaning up temp batch file %s\n"), + c->sh_batch_file)); + + /* just try and remove, don't care if this fails */ + remove (c->sh_batch_file); + + /* all done with memory */ + free (c->sh_batch_file); + c->sh_batch_file = NULL; + } + + /* If this child had the good stdin, say it is now free. */ + if (c->good_stdin) + good_stdin_used = 0; + + if (child_failed && !c->noerror && !ignore_errors_flag) + { + /* The commands failed. Write an error message, + delete non-precious targets, and abort. */ + static int delete_on_error = -1; + child_error (c->file->name, exit_code, exit_sig, coredump, 0); + c->file->update_status = 2; + if (delete_on_error == -1) + { + struct file *f = lookup_file (".DELETE_ON_ERROR"); + delete_on_error = f != 0 && f->is_target; + } + if (exit_sig != 0 || delete_on_error) + delete_child_targets (c); + } + else + { + if (child_failed) + { + /* The commands failed, but we don't care. */ + child_error (c->file->name, + exit_code, exit_sig, coredump, 1); + child_failed = 0; + } + + /* If there are more commands to run, try to start them. */ + if (job_next_command (c)) + { + if (handling_fatal_signal) + { + /* Never start new commands while we are dying. + Since there are more commands that wanted to be run, + the target was not completely remade. So we treat + this as if a command had failed. */ + c->file->update_status = 2; + } + else + { + /* Check again whether to start remotely. + Whether or not we want to changes over time. + Also, start_remote_job may need state set up + by start_remote_job_p. */ + c->remote = start_remote_job_p (0); + start_job_command (c); + /* Fatal signals are left blocked in case we were + about to put that child on the chain. But it is + already there, so it is safe for a fatal signal to + arrive now; it will clean up this child's targets. */ + unblock_sigs (); + if (c->file->command_state == cs_running) + /* We successfully started the new command. + Loop to reap more children. */ + continue; + } + + if (c->file->update_status != 0) + /* We failed to start the commands. */ + delete_child_targets (c); + } + else + /* There are no more commands. We got through them all + without an unignored error. Now the target has been + successfully updated. */ + c->file->update_status = 0; + } + + /* When we get here, all the commands for C->file are finished + (or aborted) and C->file->update_status contains 0 or 2. But + C->file->command_state is still cs_running if all the commands + ran; notice_finish_file looks for cs_running to tell it that + it's interesting to check the file's modtime again now. */ + + if (! handling_fatal_signal) + /* Notice if the target of the commands has been changed. + This also propagates its values for command_state and + update_status to its also_make files. */ + notice_finished_file (c->file); + + DB (DB_JOBS, (_("Removing child 0x%08lx PID %ld%s from chain.\n"), + (unsigned long int) c, (long) c->pid, + c->remote ? _(" (remote)") : "")); + + /* Block fatal signals while frobnicating the list, so that + children and job_slots_used are always consistent. Otherwise + a fatal signal arriving after the child is off the chain and + before job_slots_used is decremented would believe a child was + live and call reap_children again. */ + block_sigs (); + + /* There is now another slot open. */ + if (job_slots_used > 0) + --job_slots_used; + + /* Remove the child from the chain and free it. */ + if (lastc == 0) + children = c->next; + else + lastc->next = c->next; + + free_child (c); + + unblock_sigs (); + + /* If the job failed, and the -k flag was not given, die, + unless we are already in the process of dying. */ + if (!err && child_failed && !keep_going_flag && + /* fatal_error_signal will die with the right signal. */ + !handling_fatal_signal) + die (2); + + /* Only block for one child. */ + block = 0; + } + + return; +} + +/* Free the storage allocated for CHILD. */ + +static void +free_child (struct child *child) +{ + /* If this child is the only one it was our "free" job, so don't put a + token back for it. This child has already been removed from the list, + so if there any left this wasn't the last one. */ + + if (job_fds[1] >= 0 && children) + { + char token = '+'; + int r; + + /* Write a job token back to the pipe. */ + + EINTRLOOP (r, write (job_fds[1], &token, 1)); + if (r != 1) + pfatal_with_name (_("write jobserver")); + + DB (DB_JOBS, (_("Released token for child 0x%08lx (%s).\n"), + (unsigned long int) child, child->file->name)); + } + + if (handling_fatal_signal) /* Don't bother free'ing if about to die. */ + return; + + if (child->command_lines != 0) + { + register unsigned int i; + for (i = 0; i < child->file->cmds->ncommand_lines; ++i) + free (child->command_lines[i]); + free ((char *) child->command_lines); + } + + if (child->environment != 0) + { + register char **ep = child->environment; + while (*ep != 0) + free (*ep++); + free ((char *) child->environment); + } + + free ((char *) child); +} + +#ifdef POSIX +extern sigset_t fatal_signal_set; +#endif + +void +block_sigs (void) +{ +#ifdef POSIX + (void) sigprocmask (SIG_BLOCK, &fatal_signal_set, (sigset_t *) 0); +#else +# ifdef HAVE_SIGSETMASK + (void) sigblock (fatal_signal_mask); +# endif +#endif +} + +#ifdef POSIX +void +unblock_sigs (void) +{ + sigset_t empty; + sigemptyset (&empty); + sigprocmask (SIG_SETMASK, &empty, (sigset_t *) 0); +} +#endif + +#ifdef MAKE_JOBSERVER +# ifdef __EMX__ +/* Never install the SIGCHLD handler for EMX!!! */ +# define set_child_handler_action_flags(x) +# else +/* Set the child handler action flags to FLAGS. */ +static void +set_child_handler_action_flags (int flags) +{ + struct sigaction sa; + bzero ((char *) &sa, sizeof sa); + sa.sa_handler = child_handler; + sa.sa_flags = flags; +#if defined SIGCHLD + sigaction (SIGCHLD, &sa, NULL); +#endif +#if defined SIGCLD && SIGCLD != SIGCHLD + sigaction (SIGCLD, &sa, NULL); +#endif +} +#endif /* !__EMX__ */ +#endif + + +/* Start a job to run the commands specified in CHILD. + CHILD is updated to reflect the commands and ID of the child process. + + NOTE: On return fatal signals are blocked! The caller is responsible + for calling `unblock_sigs', once the new child is safely on the chain so + it can be cleaned up in the event of a fatal signal. */ + +static void +start_job_command (struct child *child) +{ +#ifndef _AMIGA + static int bad_stdin = -1; +#endif + register char *p; + int flags; +#ifdef VMS + char *argv; +#else + char **argv; +#endif + + /* If we have a completely empty commandset, stop now. */ + if (!child->command_ptr) + goto next_command; + + /* Combine the flags parsed for the line itself with + the flags specified globally for this target. */ + flags = (child->file->command_flags + | child->file->cmds->lines_flags[child->command_line - 1]); + + p = child->command_ptr; + child->noerror = flags & COMMANDS_NOERROR; + + while (*p != '\0') + { + if (*p == '@') + flags |= COMMANDS_SILENT; + else if (*p == '+') + flags |= COMMANDS_RECURSE; + else if (*p == '-') + child->noerror = 1; + else if (!isblank ((unsigned char)*p)) + break; + ++p; + } + + /* Update the file's command flags with any new ones we found. We only + keep the COMMANDS_RECURSE setting. Even this isn't 100% correct; we are + now marking more commands recursive than should be in the case of + multiline define/endef scripts where only one line is marked "+". In + order to really fix this, we'll have to keep a lines_flags for every + actual line, after expansion. */ + child->file->cmds->lines_flags[child->command_line - 1] + |= flags & COMMANDS_RECURSE; + + /* Figure out an argument list from this command line. */ + + { + char *end = 0; +#ifdef VMS + argv = p; +#else + argv = construct_command_argv (p, &end, child->file, &child->sh_batch_file); +#endif + if (end == NULL) + child->command_ptr = NULL; + else + { + *end++ = '\0'; + child->command_ptr = end; + } + } + + /* If -q was given, say that updating `failed' if there was any text on the + command line, or `succeeded' otherwise. The exit status of 1 tells the + user that -q is saying `something to do'; the exit status for a random + error is 2. */ + if (argv != 0 && question_flag && !(flags & COMMANDS_RECURSE)) + { +#ifndef VMS + free (argv[0]); + free ((char *) argv); +#endif + child->file->update_status = 1; + notice_finished_file (child->file); + return; + } + + if (touch_flag && !(flags & COMMANDS_RECURSE)) + { + /* Go on to the next command. It might be the recursive one. + We construct ARGV only to find the end of the command line. */ +#ifndef VMS + if (argv) + { + free (argv[0]); + free ((char *) argv); + } +#endif + argv = 0; + } + + if (argv == 0) + { + next_command: +#ifdef __MSDOS__ + execute_by_shell = 0; /* in case construct_command_argv sets it */ +#endif + /* This line has no commands. Go to the next. */ + if (job_next_command (child)) + start_job_command (child); + else + { + /* No more commands. Make sure we're "running"; we might not be if + (e.g.) all commands were skipped due to -n. */ + set_command_state (child->file, cs_running); + child->file->update_status = 0; + notice_finished_file (child->file); + } + return; + } + + /* Print out the command. If silent, we call `message' with null so it + can log the working directory before the command's own error messages + appear. */ + + message (0, (just_print_flag || (!(flags & COMMANDS_SILENT) && !silent_flag)) + ? "%s" : (char *) 0, p); + + /* Tell update_goal_chain that a command has been started on behalf of + this target. It is important that this happens here and not in + reap_children (where we used to do it), because reap_children might be + reaping children from a different target. We want this increment to + guaranteedly indicate that a command was started for the dependency + chain (i.e., update_file recursion chain) we are processing. */ + + ++commands_started; + + /* Optimize an empty command. People use this for timestamp rules, + so avoid forking a useless shell. Do this after we increment + commands_started so make still treats this special case as if it + performed some action (makes a difference as to what messages are + printed, etc. */ + +#if !defined(VMS) && !defined(_AMIGA) + if ( +#if defined __MSDOS__ || defined (__EMX__) + unixy_shell /* the test is complicated and we already did it */ +#else + (argv[0] && !strcmp (argv[0], "/bin/sh")) +#endif + && (argv[1] + && argv[1][0] == '-' && argv[1][1] == 'c' && argv[1][2] == '\0') + && (argv[2] && argv[2][0] == ':' && argv[2][1] == '\0') + && argv[3] == NULL) + { + free (argv[0]); + free ((char *) argv); + goto next_command; + } +#endif /* !VMS && !_AMIGA */ + + /* If -n was given, recurse to get the next line in the sequence. */ + + if (just_print_flag && !(flags & COMMANDS_RECURSE)) + { +#ifndef VMS + free (argv[0]); + free ((char *) argv); +#endif + goto next_command; + } + + /* Flush the output streams so they won't have things written twice. */ + + fflush (stdout); + fflush (stderr); + +#ifndef VMS +#if !defined(WINDOWS32) && !defined(_AMIGA) && !defined(__MSDOS__) + + /* Set up a bad standard input that reads from a broken pipe. */ + + if (bad_stdin == -1) + { + /* Make a file descriptor that is the read end of a broken pipe. + This will be used for some children's standard inputs. */ + int pd[2]; + if (pipe (pd) == 0) + { + /* Close the write side. */ + (void) close (pd[1]); + /* Save the read side. */ + bad_stdin = pd[0]; + + /* Set the descriptor to close on exec, so it does not litter any + child's descriptor table. When it is dup2'd onto descriptor 0, + that descriptor will not close on exec. */ + CLOSE_ON_EXEC (bad_stdin); + } + } + +#endif /* !WINDOWS32 && !_AMIGA && !__MSDOS__ */ + + /* Decide whether to give this child the `good' standard input + (one that points to the terminal or whatever), or the `bad' one + that points to the read side of a broken pipe. */ + + child->good_stdin = !good_stdin_used; + if (child->good_stdin) + good_stdin_used = 1; + +#endif /* !VMS */ + + child->deleted = 0; + +#ifndef _AMIGA + /* Set up the environment for the child. */ + if (child->environment == 0) + child->environment = target_environment (child->file); +#endif + +#if !defined(__MSDOS__) && !defined(_AMIGA) && !defined(WINDOWS32) + +#ifndef VMS + /* start_waiting_job has set CHILD->remote if we can start a remote job. */ + if (child->remote) + { + int is_remote, id, used_stdin; + if (start_remote_job (argv, child->environment, + child->good_stdin ? 0 : bad_stdin, + &is_remote, &id, &used_stdin)) + /* Don't give up; remote execution may fail for various reasons. If + so, simply run the job locally. */ + goto run_local; + else + { + if (child->good_stdin && !used_stdin) + { + child->good_stdin = 0; + good_stdin_used = 0; + } + child->remote = is_remote; + child->pid = id; + } + } + else +#endif /* !VMS */ + { + /* Fork the child process. */ + + char **parent_environ; + + run_local: + block_sigs (); + + child->remote = 0; + +#ifdef VMS + + if (!child_execute_job (argv, child)) { + /* Fork failed! */ + perror_with_name ("vfork", ""); + goto error; + } + +#else + + parent_environ = environ; + +# ifdef __EMX__ + /* If we aren't running a recursive command and we have a jobserver + pipe, close it before exec'ing. */ + if (!(flags & COMMANDS_RECURSE) && job_fds[0] >= 0) + { + CLOSE_ON_EXEC (job_fds[0]); + CLOSE_ON_EXEC (job_fds[1]); + } + if (job_rfd >= 0) + CLOSE_ON_EXEC (job_rfd); + + /* Never use fork()/exec() here! Use spawn() instead in exec_command() */ + child->pid = child_execute_job (child->good_stdin ? 0 : bad_stdin, 1, + argv, child->environment); + if (child->pid < 0) + { + /* spawn failed! */ + unblock_sigs (); + perror_with_name ("spawn", ""); + goto error; + } + + /* undo CLOSE_ON_EXEC() after the child process has been started */ + if (!(flags & COMMANDS_RECURSE) && job_fds[0] >= 0) + { + fcntl (job_fds[0], F_SETFD, 0); + fcntl (job_fds[1], F_SETFD, 0); + } + if (job_rfd >= 0) + fcntl (job_rfd, F_SETFD, 0); + +#else /* !__EMX__ */ + + child->pid = vfork (); + environ = parent_environ; /* Restore value child may have clobbered. */ + if (child->pid == 0) + { + /* We are the child side. */ + unblock_sigs (); + + /* If we aren't running a recursive command and we have a jobserver + pipe, close it before exec'ing. */ + if (!(flags & COMMANDS_RECURSE) && job_fds[0] >= 0) + { + close (job_fds[0]); + close (job_fds[1]); + } + if (job_rfd >= 0) + close (job_rfd); + + child_execute_job (child->good_stdin ? 0 : bad_stdin, 1, + argv, child->environment); + } + else if (child->pid < 0) + { + /* Fork failed! */ + unblock_sigs (); + perror_with_name ("vfork", ""); + goto error; + } +# endif /* !__EMX__ */ +#endif /* !VMS */ + } + +#else /* __MSDOS__ or Amiga or WINDOWS32 */ +#ifdef __MSDOS__ + { + int proc_return; + + block_sigs (); + dos_status = 0; + + /* We call `system' to do the job of the SHELL, since stock DOS + shell is too dumb. Our `system' knows how to handle long + command lines even if pipes/redirection is needed; it will only + call COMMAND.COM when its internal commands are used. */ + if (execute_by_shell) + { + char *cmdline = argv[0]; + /* We don't have a way to pass environment to `system', + so we need to save and restore ours, sigh... */ + char **parent_environ = environ; + + environ = child->environment; + + /* If we have a *real* shell, tell `system' to call + it to do everything for us. */ + if (unixy_shell) + { + /* A *real* shell on MSDOS may not support long + command lines the DJGPP way, so we must use `system'. */ + cmdline = argv[2]; /* get past "shell -c" */ + } + + dos_command_running = 1; + proc_return = system (cmdline); + environ = parent_environ; + execute_by_shell = 0; /* for the next time */ + } + else + { + dos_command_running = 1; + proc_return = spawnvpe (P_WAIT, argv[0], argv, child->environment); + } + + /* Need to unblock signals before turning off + dos_command_running, so that child's signals + will be treated as such (see fatal_error_signal). */ + unblock_sigs (); + dos_command_running = 0; + + /* If the child got a signal, dos_status has its + high 8 bits set, so be careful not to alter them. */ + if (proc_return == -1) + dos_status |= 0xff; + else + dos_status |= (proc_return & 0xff); + ++dead_children; + child->pid = dos_pid++; + } +#endif /* __MSDOS__ */ +#ifdef _AMIGA + amiga_status = MyExecute (argv); + + ++dead_children; + child->pid = amiga_pid++; + if (amiga_batch_file) + { + amiga_batch_file = 0; + DeleteFile (amiga_bname); /* Ignore errors. */ + } +#endif /* Amiga */ +#ifdef WINDOWS32 + { + HANDLE hPID; + char* arg0; + + /* make UNC paths safe for CreateProcess -- backslash format */ + arg0 = argv[0]; + if (arg0 && arg0[0] == '/' && arg0[1] == '/') + for ( ; arg0 && *arg0; arg0++) + if (*arg0 == '/') + *arg0 = '\\'; + + /* make sure CreateProcess() has Path it needs */ + sync_Path_environment(); + + hPID = process_easy(argv, child->environment); + + if (hPID != INVALID_HANDLE_VALUE) + child->pid = (int) hPID; + else { + int i; + unblock_sigs(); + fprintf(stderr, + _("process_easy() failed failed to launch process (e=%d)\n"), + process_last_err(hPID)); + for (i = 0; argv[i]; i++) + fprintf(stderr, "%s ", argv[i]); + fprintf(stderr, _("\nCounted %d args in failed launch\n"), i); + } + } +#endif /* WINDOWS32 */ +#endif /* __MSDOS__ or Amiga or WINDOWS32 */ + + /* We are the parent side. Set the state to + say the commands are running and return. */ + + set_command_state (child->file, cs_running); + + /* Free the storage used by the child's argument list. */ +#ifndef VMS + free (argv[0]); + free ((char *) argv); +#endif + + return; + + error: + child->file->update_status = 2; + notice_finished_file (child->file); + return; +} + +/* Try to start a child running. + Returns nonzero if the child was started (and maybe finished), or zero if + the load was too high and the child was put on the `waiting_jobs' chain. */ + +static int +start_waiting_job (struct child *c) +{ + struct file *f = c->file; + + /* If we can start a job remotely, we always want to, and don't care about + the local load average. We record that the job should be started + remotely in C->remote for start_job_command to test. */ + + c->remote = start_remote_job_p (1); + + /* If we are running at least one job already and the load average + is too high, make this one wait. */ + if (!c->remote && job_slots_used > 0 && load_too_high ()) + { + /* Put this child on the chain of children waiting for the load average + to go down. */ + set_command_state (f, cs_running); + c->next = waiting_jobs; + waiting_jobs = c; + return 0; + } + + /* Start the first command; reap_children will run later command lines. */ + start_job_command (c); + + switch (f->command_state) + { + case cs_running: + c->next = children; + DB (DB_JOBS, (_("Putting child 0x%08lx (%s) PID %ld%s on the chain.\n"), + (unsigned long int) c, c->file->name, + (long) c->pid, c->remote ? _(" (remote)") : "")); + children = c; + /* One more job slot is in use. */ + ++job_slots_used; + unblock_sigs (); + break; + + case cs_not_started: + /* All the command lines turned out to be empty. */ + f->update_status = 0; + /* FALLTHROUGH */ + + case cs_finished: + notice_finished_file (f); + free_child (c); + break; + + default: + assert (f->command_state == cs_finished); + break; + } + + return 1; +} + +/* Create a `struct child' for FILE and start its commands running. */ + +void +new_job (struct file *file) +{ + register struct commands *cmds = file->cmds; + register struct child *c; + char **lines; + register unsigned int i; + + /* Let any previously decided-upon jobs that are waiting + for the load to go down start before this new one. */ + start_waiting_jobs (); + + /* Reap any children that might have finished recently. */ + reap_children (0, 0); + + /* Chop the commands up into lines if they aren't already. */ + chop_commands (cmds); + + /* Expand the command lines and store the results in LINES. */ + lines = (char **) xmalloc (cmds->ncommand_lines * sizeof (char *)); + for (i = 0; i < cmds->ncommand_lines; ++i) + { + /* Collapse backslash-newline combinations that are inside variable + or function references. These are left alone by the parser so + that they will appear in the echoing of commands (where they look + nice); and collapsed by construct_command_argv when it tokenizes. + But letting them survive inside function invocations loses because + we don't want the functions to see them as part of the text. */ + + char *in, *out, *ref; + + /* IN points to where in the line we are scanning. + OUT points to where in the line we are writing. + When we collapse a backslash-newline combination, + IN gets ahead of OUT. */ + + in = out = cmds->command_lines[i]; + while ((ref = strchr (in, '$')) != 0) + { + ++ref; /* Move past the $. */ + + if (out != in) + /* Copy the text between the end of the last chunk + we processed (where IN points) and the new chunk + we are about to process (where REF points). */ + bcopy (in, out, ref - in); + + /* Move both pointers past the boring stuff. */ + out += ref - in; + in = ref; + + if (*ref == '(' || *ref == '{') + { + char openparen = *ref; + char closeparen = openparen == '(' ? ')' : '}'; + int count; + char *p; + + *out++ = *in++; /* Copy OPENPAREN. */ + /* IN now points past the opening paren or brace. + Count parens or braces until it is matched. */ + count = 0; + while (*in != '\0') + { + if (*in == closeparen && --count < 0) + break; + else if (*in == '\\' && in[1] == '\n') + { + /* We have found a backslash-newline inside a + variable or function reference. Eat it and + any following whitespace. */ + + int quoted = 0; + for (p = in - 1; p > ref && *p == '\\'; --p) + quoted = !quoted; + + if (quoted) + /* There were two or more backslashes, so this is + not really a continuation line. We don't collapse + the quoting backslashes here as is done in + collapse_continuations, because the line will + be collapsed again after expansion. */ + *out++ = *in++; + else + { + /* Skip the backslash, newline and + any following whitespace. */ + in = next_token (in + 2); + + /* Discard any preceding whitespace that has + already been written to the output. */ + while (out > ref + && isblank ((unsigned char)out[-1])) + --out; + + /* Replace it all with a single space. */ + *out++ = ' '; + } + } + else + { + if (*in == openparen) + ++count; + + *out++ = *in++; + } + } + } + } + + /* There are no more references in this line to worry about. + Copy the remaining uninteresting text to the output. */ + if (out != in) + strcpy (out, in); + + /* Finally, expand the line. */ + lines[i] = allocated_variable_expand_for_file (cmds->command_lines[i], + file); + } + + /* Start the command sequence, record it in a new + `struct child', and add that to the chain. */ + + c = (struct child *) xmalloc (sizeof (struct child)); + bzero ((char *)c, sizeof (struct child)); + c->file = file; + c->command_lines = lines; + c->sh_batch_file = NULL; + + /* Fetch the first command line to be run. */ + job_next_command (c); + + /* Wait for a job slot to be freed up. If we allow an infinite number + don't bother; also job_slots will == 0 if we're using the jobserver. */ + + if (job_slots != 0) + while (job_slots_used == job_slots) + reap_children (1, 0); + +#ifdef MAKE_JOBSERVER + /* If we are controlling multiple jobs make sure we have a token before + starting the child. */ + + /* This can be inefficient. There's a decent chance that this job won't + actually have to run any subprocesses: the command script may be empty + or otherwise optimized away. It would be nice if we could defer + obtaining a token until just before we need it, in start_job_command. + To do that we'd need to keep track of whether we'd already obtained a + token (since start_job_command is called for each line of the job, not + just once). Also more thought needs to go into the entire algorithm; + this is where the old parallel job code waits, so... */ + + else if (job_fds[0] >= 0) + while (1) + { + char token; + int got_token; + int saved_errno; + + DB (DB_JOBS, ("Need a job token; we %shave children\n", + children ? "" : "don't ")); + + /* If we don't already have a job started, use our "free" token. */ + if (!children) + break; + + /* Read a token. As long as there's no token available we'll block. + We enable interruptible system calls before the read(2) so that if + we get a SIGCHLD while we're waiting, we'll return with EINTR and + we can process the death(s) and return tokens to the free pool. + + Once we return from the read, we immediately reinstate restartable + system calls. This allows us to not worry about checking for + EINTR on all the other system calls in the program. + + There is one other twist: there is a span between the time + reap_children() does its last check for dead children and the time + the read(2) call is entered, below, where if a child dies we won't + notice. This is extremely serious as it could cause us to + deadlock, given the right set of events. + + To avoid this, we do the following: before we reap_children(), we + dup(2) the read FD on the jobserver pipe. The read(2) call below + uses that new FD. In the signal handler, we close that FD. That + way, if a child dies during the section mentioned above, the + read(2) will be invoked with an invalid FD and will return + immediately with EBADF. */ + + /* Make sure we have a dup'd FD. */ + if (job_rfd < 0) + { + DB (DB_JOBS, ("Duplicate the job FD\n")); + job_rfd = dup (job_fds[0]); + } + + /* Reap anything that's currently waiting. */ + reap_children (0, 0); + + /* If our "free" token has become available, use it. */ + if (!children) + break; + + /* Set interruptible system calls, and read() for a job token. */ + set_child_handler_action_flags (0); + got_token = read (job_rfd, &token, 1); + saved_errno = errno; + set_child_handler_action_flags (SA_RESTART); + + /* If we got one, we're done here. */ + if (got_token == 1) + { + DB (DB_JOBS, (_("Obtained token for child 0x%08lx (%s).\n"), + (unsigned long int) c, c->file->name)); + break; + } + + /* If the error _wasn't_ expected (EINTR or EBADF), punt. Otherwise, + go back and reap_children(), and try again. */ + errno = saved_errno; + if (errno != EINTR && errno != EBADF) + pfatal_with_name (_("read jobs pipe")); + if (errno == EBADF) + DB (DB_JOBS, ("Read returned EBADF.\n")); + } +#endif + + /* The job is now primed. Start it running. + (This will notice if there are in fact no commands.) */ + (void) start_waiting_job (c); + + if (job_slots == 1 || not_parallel) + /* Since there is only one job slot, make things run linearly. + Wait for the child to die, setting the state to `cs_finished'. */ + while (file->command_state == cs_running) + reap_children (1, 0); + + return; +} + +/* Move CHILD's pointers to the next command for it to execute. + Returns nonzero if there is another command. */ + +static int +job_next_command (struct child *child) +{ + while (child->command_ptr == 0 || *child->command_ptr == '\0') + { + /* There are no more lines in the expansion of this line. */ + if (child->command_line == child->file->cmds->ncommand_lines) + { + /* There are no more lines to be expanded. */ + child->command_ptr = 0; + return 0; + } + else + /* Get the next line to run. */ + child->command_ptr = child->command_lines[child->command_line++]; + } + return 1; +} + +static int +load_too_high (void) +{ +#if defined(__MSDOS__) || defined(VMS) || defined(_AMIGA) + return 1; +#else + double load; + + if (max_load_average < 0) + return 0; + + make_access (); + if (getloadavg (&load, 1) != 1) + { + static int lossage = -1; + /* Complain only once for the same error. */ + if (lossage == -1 || errno != lossage) + { + if (errno == 0) + /* An errno value of zero means getloadavg is just unsupported. */ + error (NILF, + _("cannot enforce load limits on this operating system")); + else + perror_with_name (_("cannot enforce load limit: "), "getloadavg"); + } + lossage = errno; + load = 0; + } + user_access (); + + DB (DB_JOBS, ("Current system load = %f (max requested = %f)\n", + load, max_load_average)); + return load >= max_load_average; +#endif +} + +/* Start jobs that are waiting for the load to be lower. */ + +void +start_waiting_jobs (void) +{ + struct child *job; + + if (waiting_jobs == 0) + return; + + do + { + /* Check for recently deceased descendants. */ + reap_children (0, 0); + + /* Take a job off the waiting list. */ + job = waiting_jobs; + waiting_jobs = job->next; + + /* Try to start that job. We break out of the loop as soon + as start_waiting_job puts one back on the waiting list. */ + } + while (start_waiting_job (job) && waiting_jobs != 0); + + return; +} + +#ifndef WINDOWS32 +#ifdef VMS +#include +#include + +/* This is called as an AST when a child process dies (it won't get + interrupted by anything except a higher level AST). +*/ +int vmsHandleChildTerm(struct child *child) +{ + int status; + register struct child *lastc, *c; + int child_failed; + + vms_jobsefnmask &= ~(1 << (child->efn - 32)); + + lib$free_ef(&child->efn); + + (void) sigblock (fatal_signal_mask); + + child_failed = !(child->cstatus & 1 || ((child->cstatus & 7) == 0)); + + /* Search for a child matching the deceased one. */ + lastc = 0; +#if defined(RECURSIVEJOBS) /* I've had problems with recursive stuff and process handling */ + for (c = children; c != 0 && c != child; lastc = c, c = c->next); +#else + c = child; +#endif + + if (child_failed && !c->noerror && !ignore_errors_flag) + { + /* The commands failed. Write an error message, + delete non-precious targets, and abort. */ + child_error (c->file->name, c->cstatus, 0, 0, 0); + c->file->update_status = 1; + delete_child_targets (c); + } + else + { + if (child_failed) + { + /* The commands failed, but we don't care. */ + child_error (c->file->name, c->cstatus, 0, 0, 1); + child_failed = 0; + } + +#if defined(RECURSIVEJOBS) /* I've had problems with recursive stuff and process handling */ + /* If there are more commands to run, try to start them. */ + start_job (c); + + switch (c->file->command_state) + { + case cs_running: + /* Successfully started. */ + break; + + case cs_finished: + if (c->file->update_status != 0) { + /* We failed to start the commands. */ + delete_child_targets (c); + } + break; + + default: + error (NILF, _("internal error: `%s' command_state"), + c->file->name); + abort (); + break; + } +#endif /* RECURSIVEJOBS */ + } + + /* Set the state flag to say the commands have finished. */ + c->file->command_state = cs_finished; + notice_finished_file (c->file); + +#if defined(RECURSIVEJOBS) /* I've had problems with recursive stuff and process handling */ + /* Remove the child from the chain and free it. */ + if (lastc == 0) + children = c->next; + else + lastc->next = c->next; + free_child (c); +#endif /* RECURSIVEJOBS */ + + /* There is now another slot open. */ + if (job_slots_used > 0) + --job_slots_used; + + /* If the job failed, and the -k flag was not given, die. */ + if (child_failed && !keep_going_flag) + die (EXIT_FAILURE); + + (void) sigsetmask (sigblock (0) & ~(fatal_signal_mask)); + + return 1; +} + +/* VMS: + Spawn a process executing the command in ARGV and return its pid. */ + +#define MAXCMDLEN 200 + +/* local helpers to make ctrl+c and ctrl+y working, see below */ +#include +#include +#include + +static int ctrlMask= LIB$M_CLI_CTRLY; +static int oldCtrlMask; +static int setupYAstTried= 0; +static int pidToAbort= 0; +static int chan= 0; + +static void reEnableAst(void) { + lib$enable_ctrl (&oldCtrlMask,0); +} + +static astHandler (void) { + if (pidToAbort) { + sys$forcex (&pidToAbort, 0, SS$_ABORT); + pidToAbort= 0; + } + kill (getpid(),SIGQUIT); +} + +static void tryToSetupYAst(void) { + $DESCRIPTOR(inputDsc,"SYS$COMMAND"); + int status; + struct { + short int status, count; + int dvi; + } iosb; + + setupYAstTried++; + + if (!chan) { + status= sys$assign(&inputDsc,&chan,0,0); + if (!(status&SS$_NORMAL)) { + lib$signal(status); + return; + } + } + status= sys$qiow (0, chan, IO$_SETMODE|IO$M_CTRLYAST,&iosb,0,0, + astHandler,0,0,0,0,0); + if (status==SS$_ILLIOFUNC) { + sys$dassgn(chan); +#ifdef CTRLY_ENABLED_ANYWAY + fprintf (stderr, + _("-warning, CTRL-Y will leave sub-process(es) around.\n")); +#else + return; +#endif + } + if (status==SS$_NORMAL) + status= iosb.status; + if (!(status&SS$_NORMAL)) { + lib$signal(status); + return; + } + + /* called from AST handler ? */ + if (setupYAstTried>1) + return; + if (atexit(reEnableAst)) + fprintf (stderr, + _("-warning, you may have to re-enable CTRL-Y handling from DCL.\n")); + status= lib$disable_ctrl (&ctrlMask, &oldCtrlMask); + if (!(status&SS$_NORMAL)) { + lib$signal(status); + return; + } +} +int +child_execute_job (char *argv, struct child *child) +{ + int i; + static struct dsc$descriptor_s cmddsc; + static struct dsc$descriptor_s pnamedsc; + static struct dsc$descriptor_s ifiledsc; + static struct dsc$descriptor_s ofiledsc; + static struct dsc$descriptor_s efiledsc; + int have_redirection = 0; + int have_newline = 0; + + int spflags = CLI$M_NOWAIT; + int status; + char *cmd = alloca (strlen (argv) + 512), *p, *q; + char ifile[256], ofile[256], efile[256]; + char *comname = 0; + char procname[100]; + + /* Parse IO redirection. */ + + ifile[0] = 0; + ofile[0] = 0; + efile[0] = 0; + + DB (DB_JOBS, ("child_execute_job (%s)\n", argv)); + + while (isspace ((unsigned char)*argv)) + argv++; + + if (*argv == 0) + return 0; + + sprintf (procname, "GMAKE_%05x", getpid () & 0xfffff); + pnamedsc.dsc$w_length = strlen(procname); + pnamedsc.dsc$a_pointer = procname; + pnamedsc.dsc$b_dtype = DSC$K_DTYPE_T; + pnamedsc.dsc$b_class = DSC$K_CLASS_S; + + /* Handle comments and redirection. */ + for (p = argv, q = cmd; *p; p++, q++) + { + switch (*p) + { + case '#': + *p-- = 0; + *q-- = 0; + break; + case '\\': + p++; + if (*p == '\n') + p++; + if (isspace ((unsigned char)*p)) + { + do { p++; } while (isspace ((unsigned char)*p)); + p--; + } + *q = *p; + break; + case '<': + p = vms_redirect (&ifiledsc, ifile, p); + *q = ' '; + have_redirection = 1; + break; + case '>': + have_redirection = 1; + if (*(p-1) == '2') + { + q--; + if (strncmp (p, ">&1", 3) == 0) + { + p += 3; + strcpy (efile, "sys$output"); + efiledsc.dsc$w_length = strlen(efile); + efiledsc.dsc$a_pointer = efile; + efiledsc.dsc$b_dtype = DSC$K_DTYPE_T; + efiledsc.dsc$b_class = DSC$K_CLASS_S; + } + else + { + p = vms_redirect (&efiledsc, efile, p); + } + } + else + { + p = vms_redirect (&ofiledsc, ofile, p); + } + *q = ' '; + break; + case '\n': + have_newline = 1; + default: + *q = *p; + break; + } + } + *q = *p; + + if (strncmp (cmd, "builtin_", 8) == 0) + { + child->pid = 270163; + child->efn = 0; + child->cstatus = 1; + + DB (DB_JOBS, (_("BUILTIN [%s][%s]\n"), cmd, cmd+8)); + + p = cmd + 8; + + if ((*(p) == 'c') + && (*(p+1) == 'd') + && ((*(p+2) == ' ') || (*(p+2) == '\t'))) + { + p += 3; + while ((*p == ' ') || (*p == '\t')) + p++; + DB (DB_JOBS, (_("BUILTIN CD %s\n"), p)); + if (chdir (p)) + return 0; + else + return 1; + } + else if ((*(p) == 'r') + && (*(p+1) == 'm') + && ((*(p+2) == ' ') || (*(p+2) == '\t'))) + { + int in_arg; + + /* rm */ + p += 3; + while ((*p == ' ') || (*p == '\t')) + p++; + in_arg = 1; + + DB (DB_JOBS, (_("BUILTIN RM %s\n"), p)); + while (*p) + { + switch (*p) + { + case ' ': + case '\t': + if (in_arg) + { + *p++ = ';'; + in_arg = 0; + } + break; + default: + break; + } + p++; + } + } + else + { + printf(_("Unknown builtin command '%s'\n"), cmd); + fflush(stdout); + return 0; + } + } + + /* Create a *.com file if either the command is too long for + lib$spawn, or the command contains a newline, or if redirection + is desired. Forcing commands with newlines into DCLs allows to + store search lists on user mode logicals. */ + + if (strlen (cmd) > MAXCMDLEN + || (have_redirection != 0) + || (have_newline != 0)) + { + FILE *outfile; + char c; + char *sep; + int alevel = 0; /* apostrophe level */ + + if (strlen (cmd) == 0) + { + printf (_("Error, empty command\n")); + fflush (stdout); + return 0; + } + + outfile = open_tmpfile (&comname, "sys$scratch:CMDXXXXXX.COM"); + if (outfile == 0) + pfatal_with_name (_("fopen (temporary file)")); + + if (ifile[0]) + { + fprintf (outfile, "$ assign/user %s sys$input\n", ifile); + DB (DB_JOBS, (_("Redirected input from %s\n"), ifile)); + ifiledsc.dsc$w_length = 0; + } + + if (efile[0]) + { + fprintf (outfile, "$ define sys$error %s\n", efile); + DB (DB_JOBS, (_("Redirected error to %s\n"), efile)); + efiledsc.dsc$w_length = 0; + } + + if (ofile[0]) + { + fprintf (outfile, "$ define sys$output %s\n", ofile); + DB (DB_JOBS, (_("Redirected output to %s\n"), ofile)); + ofiledsc.dsc$w_length = 0; + } + + p = sep = q = cmd; + for (c = '\n'; c; c = *q++) + { + switch (c) + { + case '\n': + /* At a newline, skip any whitespace around a leading $ + from the command and issue exactly one $ into the DCL. */ + while (isspace ((unsigned char)*p)) + p++; + if (*p == '$') + p++; + while (isspace ((unsigned char)*p)) + p++; + fwrite (p, 1, q - p, outfile); + fputc ('$', outfile); + fputc (' ', outfile); + /* Reset variables. */ + p = sep = q; + break; + + /* Nice places for line breaks are after strings, after + comma or space and before slash. */ + case '"': + q = handle_apos (q + 1); + sep = q; + break; + case ',': + case ' ': + sep = q; + break; + case '/': + case '\0': + sep = q - 1; + break; + default: + break; + } + if (sep - p > 78) + { + /* Enough stuff for a line. */ + fwrite (p, 1, sep - p, outfile); + p = sep; + if (*sep) + { + /* The command continues. */ + fputc ('-', outfile); + } + fputc ('\n', outfile); + } + } + + fwrite (p, 1, q - p, outfile); + fputc ('\n', outfile); + + fclose (outfile); + + sprintf (cmd, "$ @%s", comname); + + DB (DB_JOBS, (_("Executing %s instead\n"), cmd)); + } + + cmddsc.dsc$w_length = strlen(cmd); + cmddsc.dsc$a_pointer = cmd; + cmddsc.dsc$b_dtype = DSC$K_DTYPE_T; + cmddsc.dsc$b_class = DSC$K_CLASS_S; + + child->efn = 0; + while (child->efn < 32 || child->efn > 63) + { + status = lib$get_ef ((unsigned long *)&child->efn); + if (!(status & 1)) + return 0; + } + + sys$clref (child->efn); + + vms_jobsefnmask |= (1 << (child->efn - 32)); + +/* + LIB$SPAWN [command-string] + [,input-file] + [,output-file] + [,flags] + [,process-name] + [,process-id] [,completion-status-address] [,byte-integer-event-flag-num] + [,AST-address] [,varying-AST-argument] + [,prompt-string] [,cli] [,table] +*/ + +#ifndef DONTWAITFORCHILD +/* + * Code to make ctrl+c and ctrl+y working. + * The problem starts with the synchronous case where after lib$spawn is + * called any input will go to the child. But with input re-directed, + * both control characters won't make it to any of the programs, neither + * the spawning nor to the spawned one. Hence the caller needs to spawn + * with CLI$M_NOWAIT to NOT give up the input focus. A sys$waitfr + * has to follow to simulate the wanted synchronous behaviour. + * The next problem is ctrl+y which isn't caught by the crtl and + * therefore isn't converted to SIGQUIT (for a signal handler which is + * already established). The only way to catch ctrl+y, is an AST + * assigned to the input channel. But ctrl+y handling of DCL needs to be + * disabled, otherwise it will handle it. Not to mention the previous + * ctrl+y handling of DCL needs to be re-established before make exits. + * One more: At the time of LIB$SPAWN signals are blocked. SIGQUIT will + * make it to the signal handler after the child "normally" terminates. + * This isn't enough. It seems reasonable for simple command lines like + * a 'cc foobar.c' spawned in a subprocess but it is unacceptable for + * spawning make. Therefore we need to abort the process in the AST. + * + * Prior to the spawn it is checked if an AST is already set up for + * ctrl+y, if not one is set up for a channel to SYS$COMMAND. In general + * this will work except if make is run in a batch environment, but there + * nobody can press ctrl+y. During the setup the DCL handling of ctrl+y + * is disabled and an exit handler is established to re-enable it. + * If the user interrupts with ctrl+y, the assigned AST will fire, force + * an abort to the subprocess and signal SIGQUIT, which will be caught by + * the already established handler and will bring us back to common code. + * After the spawn (now /nowait) a sys$waitfr simulates the /wait and + * enables the ctrl+y be delivered to this code. And the ctrl+c too, + * which the crtl converts to SIGINT and which is caught by the common + * signal handler. Because signals were blocked before entering this code + * sys$waitfr will always complete and the SIGQUIT will be processed after + * it (after termination of the current block, somewhere in common code). + * And SIGINT too will be delayed. That is ctrl+c can only abort when the + * current command completes. Anyway it's better than nothing :-) + */ + + if (!setupYAstTried) + tryToSetupYAst(); + status = lib$spawn (&cmddsc, /* cmd-string */ + (ifiledsc.dsc$w_length == 0)?0:&ifiledsc, /* input-file */ + (ofiledsc.dsc$w_length == 0)?0:&ofiledsc, /* output-file */ + &spflags, /* flags */ + &pnamedsc, /* proc name */ + &child->pid, &child->cstatus, &child->efn, + 0, 0, + 0, 0, 0); + if (status & 1) + { + pidToAbort= child->pid; + status= sys$waitfr (child->efn); + pidToAbort= 0; + vmsHandleChildTerm(child); + } +#else + status = lib$spawn (&cmddsc, + (ifiledsc.dsc$w_length == 0)?0:&ifiledsc, + (ofiledsc.dsc$w_length == 0)?0:&ofiledsc, + &spflags, + &pnamedsc, + &child->pid, &child->cstatus, &child->efn, + vmsHandleChildTerm, child, + 0, 0, 0); +#endif + + if (!(status & 1)) + { + printf (_("Error spawning, %d\n") ,status); + fflush (stdout); + switch (status) + { + case 0x1c: + errno = EPROCLIM; + break; + default: + errno = EFAIL; + } + } + + if (comname && !ISDB (DB_JOBS)) + unlink (comname); + + return (status & 1); +} + +#else /* !VMS */ + +/* EMX: Start a child process. This function returns the new pid. */ +# if defined __MSDOS__ || defined __EMX__ +int +child_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp) +{ + int pid; + /* stdin_fd == 0 means: nothing to do for stdin; + stdout_fd == 1 means: nothing to do for stdout */ + int save_stdin = (stdin_fd != 0) ? dup (0) : 0; + int save_stdout = (stdout_fd != 1) ? dup (1): 1; + + /* < 0 only if dup() failed */ + if (save_stdin < 0) + fatal (NILF, _("no more file handles: could not duplicate stdin\n")); + if (save_stdout < 0) + fatal (NILF, _("no more file handles: could not duplicate stdout\n")); + + /* Close unnecessary file handles for the child. */ + if (save_stdin != 0) + CLOSE_ON_EXEC (save_stdin); + if (save_stdout != 1) + CLOSE_ON_EXEC (save_stdout); + + /* Connect the pipes to the child process. */ + if (stdin_fd != 0) + (void) dup2 (stdin_fd, 0); + if (stdout_fd != 1) + (void) dup2 (stdout_fd, 1); + + /* stdin_fd and stdout_fd must be closed on exit because we are + still in the parent process */ + if (stdin_fd != 0) + CLOSE_ON_EXEC (stdin_fd); + if (stdout_fd != 1) + CLOSE_ON_EXEC (stdout_fd); + + /* Run the command. */ + pid = exec_command (argv, envp); + + /* Restore stdout/stdin of the parent process. */ + if (stdin_fd != 0 && dup2 (save_stdin, 0) != 0) + fatal (NILF, _("restoring of stdin failed\n")); + if (stdout_fd != 1 && dup2 (save_stdout, 1) != 1) + fatal (NILF, _("restoring of stdout failed\n")); + + return pid; +} + +#elif !defined (_AMIGA) && !defined (__MSDOS__) + +/* UNIX: + Replace the current process with one executing the command in ARGV. + STDIN_FD and STDOUT_FD are used as the process's stdin and stdout; ENVP is + the environment of the new program. This function does not return. */ +void +child_execute_job (int stdin_fd, int stdout_fd, char **argv, char **envp) +{ + if (stdin_fd != 0) + (void) dup2 (stdin_fd, 0); + if (stdout_fd != 1) + (void) dup2 (stdout_fd, 1); + if (stdin_fd != 0) + (void) close (stdin_fd); + if (stdout_fd != 1) + (void) close (stdout_fd); + + /* Run the command. */ + exec_command (argv, envp); +} +#endif /* !AMIGA && !__MSDOS__ */ +#endif /* !VMS */ +#endif /* !WINDOWS32 */ + +#ifndef _AMIGA +/* Replace the current process with one running the command in ARGV, + with environment ENVP. This function does not return. */ + +/* EMX: This function returns the pid of the child process. */ +# ifdef __EMX__ +int +# else + void +# endif +exec_command (char **argv, char **envp) +{ +#ifdef VMS + /* to work around a problem with signals and execve: ignore them */ +#ifdef SIGCHLD + signal (SIGCHLD,SIG_IGN); +#endif + /* Run the program. */ + execve (argv[0], argv, envp); + perror_with_name ("execve: ", argv[0]); + _exit (EXIT_FAILURE); +#else +#ifdef WINDOWS32 + HANDLE hPID; + HANDLE hWaitPID; + int err = 0; + int exit_code = EXIT_FAILURE; + + /* make sure CreateProcess() has Path it needs */ + sync_Path_environment(); + + /* launch command */ + hPID = process_easy(argv, envp); + + /* make sure launch ok */ + if (hPID == INVALID_HANDLE_VALUE) + { + int i; + fprintf(stderr, + _("process_easy() failed failed to launch process (e=%d)\n"), + process_last_err(hPID)); + for (i = 0; argv[i]; i++) + fprintf(stderr, "%s ", argv[i]); + fprintf(stderr, _("\nCounted %d args in failed launch\n"), i); + exit(EXIT_FAILURE); + } + + /* wait and reap last child */ + while (hWaitPID = process_wait_for_any()) + { + /* was an error found on this process? */ + err = process_last_err(hWaitPID); + + /* get exit data */ + exit_code = process_exit_code(hWaitPID); + + if (err) + fprintf(stderr, "make (e=%d, rc=%d): %s", + err, exit_code, map_windows32_error_to_string(err)); + + /* cleanup process */ + process_cleanup(hWaitPID); + + /* expect to find only last pid, warn about other pids reaped */ + if (hWaitPID == hPID) + break; + else + fprintf(stderr, + _("make reaped child pid %d, still waiting for pid %d\n"), + hWaitPID, hPID); + } + + /* return child's exit code as our exit code */ + exit(exit_code); + +#else /* !WINDOWS32 */ + +# ifdef __EMX__ + int pid; +# endif + + /* Be the user, permanently. */ + child_access (); + +# ifdef __EMX__ + + /* Run the program. */ + pid = spawnvpe (P_NOWAIT, argv[0], argv, envp); + + if (pid >= 0) + return pid; + + /* the file might have a strange shell extension */ + if (errno == ENOENT) + errno = ENOEXEC; + +# else + + /* Run the program. */ + environ = envp; + execvp (argv[0], argv); + +# endif /* !__EMX__ */ + + switch (errno) + { + case ENOENT: + error (NILF, _("%s: Command not found"), argv[0]); + break; + case ENOEXEC: + { + /* The file is not executable. Try it as a shell script. */ + extern char *getenv (); + char *shell; + char **new_argv; + int argc; + +# ifdef __EMX__ + /* Do not use $SHELL from the environment */ + struct variable *p = lookup_variable ("SHELL", 5); + if (p) + shell = p->value; + else + shell = 0; +# else + shell = getenv ("SHELL"); +# endif + if (shell == 0) + shell = default_shell; + + argc = 1; + while (argv[argc] != 0) + ++argc; + + new_argv = (char **) alloca ((1 + argc + 1) * sizeof (char *)); + new_argv[0] = shell; + new_argv[1] = argv[0]; + while (argc > 0) + { + new_argv[1 + argc] = argv[argc]; + --argc; + } + +# ifdef __EMX__ + pid = spawnvpe (P_NOWAIT, shell, new_argv, envp); + if (pid >= 0) + break; +# else + execvp (shell, new_argv); +# endif + if (errno == ENOENT) + error (NILF, _("%s: Shell program not found"), shell); + else + perror_with_name ("execvp: ", shell); + break; + } + +# ifdef __EMX__ + case EINVAL: + /* this nasty error was driving me nuts :-( */ + error (NILF, _("spawnvpe: environment space might be exhausted")); + /* FALLTHROUGH */ +# endif + + default: + perror_with_name ("execvp: ", argv[0]); + break; + } + +# ifdef __EMX__ + return pid; +# else + _exit (127); +# endif +#endif /* !WINDOWS32 */ +#endif /* !VMS */ +} +#else /* On Amiga */ +void exec_command (char **argv) +{ + MyExecute (argv); +} + +void clean_tmp (void) +{ + DeleteFile (amiga_bname); +} + +#endif /* On Amiga */ + +#ifndef VMS +/* Figure out the argument list necessary to run LINE as a command. Try to + avoid using a shell. This routine handles only ' quoting, and " quoting + when no backslash, $ or ` characters are seen in the quotes. Starting + quotes may be escaped with a backslash. If any of the characters in + sh_chars[] is seen, or any of the builtin commands listed in sh_cmds[] + is the first word of a line, the shell is used. + + If RESTP is not NULL, *RESTP is set to point to the first newline in LINE. + If *RESTP is NULL, newlines will be ignored. + + SHELL is the shell to use, or nil to use the default shell. + IFS is the value of $IFS, or nil (meaning the default). */ + +static char ** +construct_command_argv_internal (char *line, char **restp, char *shell, + char *ifs, char **batch_filename_ptr) +{ +#ifdef __MSDOS__ + /* MSDOS supports both the stock DOS shell and ports of Unixy shells. + We call `system' for anything that requires ``slow'' processing, + because DOS shells are too dumb. When $SHELL points to a real + (unix-style) shell, `system' just calls it to do everything. When + $SHELL points to a DOS shell, `system' does most of the work + internally, calling the shell only for its internal commands. + However, it looks on the $PATH first, so you can e.g. have an + external command named `mkdir'. + + Since we call `system', certain characters and commands below are + actually not specific to COMMAND.COM, but to the DJGPP implementation + of `system'. In particular: + + The shell wildcard characters are in DOS_CHARS because they will + not be expanded if we call the child via `spawnXX'. + + The `;' is in DOS_CHARS, because our `system' knows how to run + multiple commands on a single line. + + DOS_CHARS also include characters special to 4DOS/NDOS, so we + won't have to tell one from another and have one more set of + commands and special characters. */ + static char sh_chars_dos[] = "*?[];|<>%^&()"; + static char *sh_cmds_dos[] = { "break", "call", "cd", "chcp", "chdir", "cls", + "copy", "ctty", "date", "del", "dir", "echo", + "erase", "exit", "for", "goto", "if", "md", + "mkdir", "path", "pause", "prompt", "rd", + "rmdir", "rem", "ren", "rename", "set", + "shift", "time", "type", "ver", "verify", + "vol", ":", 0 }; + + static char sh_chars_sh[] = "#;\"*?[]&|<>(){}$`^"; + static char *sh_cmds_sh[] = { "cd", "echo", "eval", "exec", "exit", "login", + "logout", "set", "umask", "wait", "while", + "for", "case", "if", ":", ".", "break", + "continue", "export", "read", "readonly", + "shift", "times", "trap", "switch", "unset", + 0 }; + + char *sh_chars; + char **sh_cmds; +#elif defined (__EMX__) + static char sh_chars_dos[] = "*?[];|<>%^&()"; + static char *sh_cmds_dos[] = { "break", "call", "cd", "chcp", "chdir", "cls", + "copy", "ctty", "date", "del", "dir", "echo", + "erase", "exit", "for", "goto", "if", "md", + "mkdir", "path", "pause", "prompt", "rd", + "rmdir", "rem", "ren", "rename", "set", + "shift", "time", "type", "ver", "verify", + "vol", ":", 0 }; + + static char sh_chars_os2[] = "*?[];|<>%^()\"'&"; + static char *sh_cmds_os2[] = { "call", "cd", "chcp", "chdir", "cls", "copy", + "date", "del", "detach", "dir", "echo", + "endlocal", "erase", "exit", "for", "goto", "if", + "keys", "md", "mkdir", "move", "path", "pause", + "prompt", "rd", "rem", "ren", "rename", "rmdir", + "set", "setlocal", "shift", "start", "time", + "type", "ver", "verify", "vol", ":", 0 }; + + static char sh_chars_sh[] = "#;\"*?[]&|<>(){}$`^~'"; + static char *sh_cmds_sh[] = { "echo", "cd", "eval", "exec", "exit", "login", + "logout", "set", "umask", "wait", "while", + "for", "case", "if", ":", ".", "break", + "continue", "export", "read", "readonly", + "shift", "times", "trap", "switch", "unset", + 0 }; + char *sh_chars; + char **sh_cmds; + +#elif defined (_AMIGA) + static char sh_chars[] = "#;\"|<>()?*$`"; + static char *sh_cmds[] = { "cd", "eval", "if", "delete", "echo", "copy", + "rename", "set", "setenv", "date", "makedir", + "skip", "else", "endif", "path", "prompt", + "unset", "unsetenv", "version", + 0 }; +#elif defined (WINDOWS32) + static char sh_chars_dos[] = "\"|&<>"; + static char *sh_cmds_dos[] = { "break", "call", "cd", "chcp", "chdir", "cls", + "copy", "ctty", "date", "del", "dir", "echo", + "erase", "exit", "for", "goto", "if", "if", "md", + "mkdir", "path", "pause", "prompt", "rd", "rem", + "ren", "rename", "rmdir", "set", "shift", "time", + "type", "ver", "verify", "vol", ":", 0 }; + static char sh_chars_sh[] = "#;\"*?[]&|<>(){}$`^"; + static char *sh_cmds_sh[] = { "cd", "eval", "exec", "exit", "login", + "logout", "set", "umask", "wait", "while", "for", + "case", "if", ":", ".", "break", "continue", + "export", "read", "readonly", "shift", "times", + "trap", "switch", "test", +#ifdef BATCH_MODE_ONLY_SHELL + "echo", +#endif + 0 }; + char* sh_chars; + char** sh_cmds; +#else /* must be UNIX-ish */ + static char sh_chars[] = "#;\"*?[]&|<>(){}$`^~"; + static char *sh_cmds[] = { "cd", "eval", "exec", "exit", "login", + "logout", "set", "umask", "wait", "while", "for", + "case", "if", ":", ".", "break", "continue", + "export", "read", "readonly", "shift", "times", + "trap", "switch", 0 }; +#endif /* __MSDOS__ */ + register int i; + register char *p; + register char *ap; + char *end; + int instring, word_has_equals, seen_nonequals, last_argument_was_empty; + char **new_argv = 0; +#ifdef WINDOWS32 + int slow_flag = 0; + + if (no_default_sh_exe) { + sh_cmds = sh_cmds_dos; + sh_chars = sh_chars_dos; + } else { + sh_cmds = sh_cmds_sh; + sh_chars = sh_chars_sh; + } +#endif /* WINDOWS32 */ + + if (restp != NULL) + *restp = NULL; + + /* Make sure not to bother processing an empty line. */ + while (isblank ((unsigned char)*line)) + ++line; + if (*line == '\0') + return 0; + + /* See if it is safe to parse commands internally. */ + if (shell == 0) + shell = default_shell; +#ifdef WINDOWS32 + else if (strcmp (shell, default_shell)) + { + char *s1 = _fullpath(NULL, shell, 0); + char *s2 = _fullpath(NULL, default_shell, 0); + + slow_flag = strcmp((s1 ? s1 : ""), (s2 ? s2 : "")); + + if (s1) + free (s1); + if (s2) + free (s2); + } + if (slow_flag) + goto slow; +#else /* not WINDOWS32 */ +#if defined (__MSDOS__) || defined (__EMX__) + else if (stricmp (shell, default_shell)) + { + extern int _is_unixy_shell (const char *_path); + + DB (DB_BASIC, (_("$SHELL changed (was `%s', now `%s')\n"), + default_shell, shell)); + unixy_shell = _is_unixy_shell (shell); + /* we must allocate a copy of shell: construct_command_argv() will free + * shell after this function returns. */ + default_shell = xstrdup (shell); + } + if (unixy_shell) + { + sh_chars = sh_chars_sh; + sh_cmds = sh_cmds_sh; + } + else + { + sh_chars = sh_chars_dos; + sh_cmds = sh_cmds_dos; +# ifdef __EMX__ + if (_osmode == OS2_MODE) + { + sh_chars = sh_chars_os2; + sh_cmds = sh_cmds_os2; + } +# endif + } +#else /* !__MSDOS__ */ + else if (strcmp (shell, default_shell)) + goto slow; +#endif /* !__MSDOS__ && !__EMX__ */ +#endif /* not WINDOWS32 */ + + if (ifs != 0) + for (ap = ifs; *ap != '\0'; ++ap) + if (*ap != ' ' && *ap != '\t' && *ap != '\n') + goto slow; + + i = strlen (line) + 1; + + /* More than 1 arg per character is impossible. */ + new_argv = (char **) xmalloc (i * sizeof (char *)); + + /* All the args can fit in a buffer as big as LINE is. */ + ap = new_argv[0] = (char *) xmalloc (i); + end = ap + i; + + /* I is how many complete arguments have been found. */ + i = 0; + instring = word_has_equals = seen_nonequals = last_argument_was_empty = 0; + for (p = line; *p != '\0'; ++p) + { + if (ap > end) + abort (); + + if (instring) + { + string_char: + /* Inside a string, just copy any char except a closing quote + or a backslash-newline combination. */ + if (*p == instring) + { + instring = 0; + if (ap == new_argv[0] || *(ap-1) == '\0') + last_argument_was_empty = 1; + } + else if (*p == '\\' && p[1] == '\n') + goto swallow_escaped_newline; + else if (*p == '\n' && restp != NULL) + { + /* End of the command line. */ + *restp = p; + goto end_of_line; + } + /* Backslash, $, and ` are special inside double quotes. + If we see any of those, punt. + But on MSDOS, if we use COMMAND.COM, double and single + quotes have the same effect. */ + else if (instring == '"' && strchr ("\\$`", *p) != 0 && unixy_shell) + goto slow; + else + *ap++ = *p; + } + else if (strchr (sh_chars, *p) != 0) + /* Not inside a string, but it's a special char. */ + goto slow; +#ifdef __MSDOS__ + else if (*p == '.' && p[1] == '.' && p[2] == '.' && p[3] != '.') + /* `...' is a wildcard in DJGPP. */ + goto slow; +#endif + else + /* Not a special char. */ + switch (*p) + { + case '=': + /* Equals is a special character in leading words before the + first word with no equals sign in it. This is not the case + with sh -k, but we never get here when using nonstandard + shell flags. */ + if (! seen_nonequals && unixy_shell) + goto slow; + word_has_equals = 1; + *ap++ = '='; + break; + + case '\\': + /* Backslash-newline combinations are eaten. */ + if (p[1] == '\n') + { + swallow_escaped_newline: + + /* Eat the backslash, the newline, and following whitespace, + replacing it all with a single space. */ + p += 2; + + /* If there is a tab after a backslash-newline, + remove it from the source line which will be echoed, + since it was most likely used to line + up the continued line with the previous one. */ + if (*p == '\t') + /* Note these overlap and strcpy() is undefined for + overlapping objects in ANSI C. The strlen() _IS_ right, + since we need to copy the nul byte too. */ + bcopy (p + 1, p, strlen (p)); + + if (instring) + goto string_char; + else + { + if (ap != new_argv[i]) + /* Treat this as a space, ending the arg. + But if it's at the beginning of the arg, it should + just get eaten, rather than becoming an empty arg. */ + goto end_of_arg; + else + p = next_token (p) - 1; + } + } + else if (p[1] != '\0') + { +#ifdef HAVE_DOS_PATHS + /* Only remove backslashes before characters special + to Unixy shells. All other backslashes are copied + verbatim, since they are probably DOS-style + directory separators. This still leaves a small + window for problems, but at least it should work + for the vast majority of naive users. */ + +#ifdef __MSDOS__ + /* A dot is only special as part of the "..." + wildcard. */ + if (strneq (p + 1, ".\\.\\.", 5)) + { + *ap++ = '.'; + *ap++ = '.'; + p += 4; + } + else +#endif + if (p[1] != '\\' && p[1] != '\'' + && !isspace ((unsigned char)p[1]) + && (strchr (sh_chars_sh, p[1]) == 0)) + /* back up one notch, to copy the backslash */ + --p; +#endif /* HAVE_DOS_PATHS */ + + /* Copy and skip the following char. */ + *ap++ = *++p; + } + break; + + case '\'': + case '"': + instring = *p; + break; + + case '\n': + if (restp != NULL) + { + /* End of the command line. */ + *restp = p; + goto end_of_line; + } + else + /* Newlines are not special. */ + *ap++ = '\n'; + break; + + case ' ': + case '\t': + end_of_arg: + /* We have the end of an argument. + Terminate the text of the argument. */ + *ap++ = '\0'; + new_argv[++i] = ap; + last_argument_was_empty = 0; + + /* Update SEEN_NONEQUALS, which tells us if every word + heretofore has contained an `='. */ + seen_nonequals |= ! word_has_equals; + if (word_has_equals && ! seen_nonequals) + /* An `=' in a word before the first + word without one is magical. */ + goto slow; + word_has_equals = 0; /* Prepare for the next word. */ + + /* If this argument is the command name, + see if it is a built-in shell command. + If so, have the shell handle it. */ + if (i == 1) + { + register int j; + for (j = 0; sh_cmds[j] != 0; ++j) + if (streq (sh_cmds[j], new_argv[0])) + goto slow; + } + + /* Ignore multiple whitespace chars. */ + p = next_token (p); + /* Next iteration should examine the first nonwhite char. */ + --p; + break; + + default: + *ap++ = *p; + break; + } + } + end_of_line: + + if (instring) + /* Let the shell deal with an unterminated quote. */ + goto slow; + + /* Terminate the last argument and the argument list. */ + + *ap = '\0'; + if (new_argv[i][0] != '\0' || last_argument_was_empty) + ++i; + new_argv[i] = 0; + + if (i == 1) + { + register int j; + for (j = 0; sh_cmds[j] != 0; ++j) + if (streq (sh_cmds[j], new_argv[0])) + goto slow; + } + + if (new_argv[0] == 0) + /* Line was empty. */ + return 0; + else + return new_argv; + + slow:; + /* We must use the shell. */ + + if (new_argv != 0) + { + /* Free the old argument list we were working on. */ + free (new_argv[0]); + free ((void *)new_argv); + } + +#ifdef __MSDOS__ + execute_by_shell = 1; /* actually, call `system' if shell isn't unixy */ +#endif + +#ifdef _AMIGA + { + char *ptr; + char *buffer; + char *dptr; + + buffer = (char *)xmalloc (strlen (line)+1); + + ptr = line; + for (dptr=buffer; *ptr; ) + { + if (*ptr == '\\' && ptr[1] == '\n') + ptr += 2; + else if (*ptr == '@') /* Kludge: multiline commands */ + { + ptr += 2; + *dptr++ = '\n'; + } + else + *dptr++ = *ptr++; + } + *dptr = 0; + + new_argv = (char **) xmalloc (2 * sizeof (char *)); + new_argv[0] = buffer; + new_argv[1] = 0; + } +#else /* Not Amiga */ +#ifdef WINDOWS32 + /* + * Not eating this whitespace caused things like + * + * sh -c "\n" + * + * which gave the shell fits. I think we have to eat + * whitespace here, but this code should be considered + * suspicious if things start failing.... + */ + + /* Make sure not to bother processing an empty line. */ + while (isspace ((unsigned char)*line)) + ++line; + if (*line == '\0') + return 0; +#endif /* WINDOWS32 */ + { + /* SHELL may be a multi-word command. Construct a command line + "SHELL -c LINE", with all special chars in LINE escaped. + Then recurse, expanding this command line to get the final + argument list. */ + + unsigned int shell_len = strlen (shell); +#ifndef VMS + static char minus_c[] = " -c "; +#else + static char minus_c[] = ""; +#endif + unsigned int line_len = strlen (line); + + char *new_line = (char *) alloca (shell_len + (sizeof (minus_c) - 1) + + (line_len * 2) + 1); + char *command_ptr = NULL; /* used for batch_mode_shell mode */ + +# ifdef __EMX__ /* is this necessary? */ + if (!unixy_shell) + minus_c[1] = '/'; /* " /c " */ +# endif + + ap = new_line; + bcopy (shell, ap, shell_len); + ap += shell_len; + bcopy (minus_c, ap, sizeof (minus_c) - 1); + ap += sizeof (minus_c) - 1; + command_ptr = ap; + for (p = line; *p != '\0'; ++p) + { + if (restp != NULL && *p == '\n') + { + *restp = p; + break; + } + else if (*p == '\\' && p[1] == '\n') + { + /* Eat the backslash, the newline, and following whitespace, + replacing it all with a single space (which is escaped + from the shell). */ + p += 2; + + /* If there is a tab after a backslash-newline, + remove it from the source line which will be echoed, + since it was most likely used to line + up the continued line with the previous one. */ + if (*p == '\t') + bcopy (p + 1, p, strlen (p)); + + p = next_token (p); + --p; + if (unixy_shell && !batch_mode_shell) + *ap++ = '\\'; + *ap++ = ' '; + continue; + } + + /* DOS shells don't know about backslash-escaping. */ + if (unixy_shell && !batch_mode_shell && + (*p == '\\' || *p == '\'' || *p == '"' + || isspace ((unsigned char)*p) + || strchr (sh_chars, *p) != 0)) + *ap++ = '\\'; +#ifdef __MSDOS__ + else if (unixy_shell && strneq (p, "...", 3)) + { + /* The case of `...' wildcard again. */ + strcpy (ap, "\\.\\.\\"); + ap += 5; + p += 2; + } +#endif + *ap++ = *p; + } + if (ap == new_line + shell_len + sizeof (minus_c) - 1) + /* Line was empty. */ + return 0; + *ap = '\0'; + +#ifdef WINDOWS32 + /* Some shells do not work well when invoked as 'sh -c xxx' to run a + command line (e.g. Cygnus GNUWIN32 sh.exe on WIN32 systems). In these + cases, run commands via a script file. */ + if ((no_default_sh_exe || batch_mode_shell) && batch_filename_ptr) { + FILE* batch = NULL; + int id = GetCurrentProcessId(); + PATH_VAR(fbuf); + char* fname = NULL; + + /* create a file name */ + sprintf(fbuf, "make%d", id); + fname = tempnam(".", fbuf); + + /* create batch file name */ + *batch_filename_ptr = xmalloc(strlen(fname) + 5); + strcpy(*batch_filename_ptr, fname); + + /* make sure path name is in DOS backslash format */ + if (!unixy_shell) { + fname = *batch_filename_ptr; + for (i = 0; fname[i] != '\0'; ++i) + if (fname[i] == '/') + fname[i] = '\\'; + strcat(*batch_filename_ptr, ".bat"); + } else { + strcat(*batch_filename_ptr, ".sh"); + } + + DB (DB_JOBS, (_("Creating temporary batch file %s\n"), + *batch_filename_ptr)); + + /* create batch file to execute command */ + batch = fopen (*batch_filename_ptr, "w"); + if (!unixy_shell) + fputs ("@echo off\n", batch); + fputs (command_ptr, batch); + fputc ('\n', batch); + fclose (batch); + + /* create argv */ + new_argv = (char **) xmalloc(3 * sizeof (char *)); + if (unixy_shell) { + new_argv[0] = xstrdup (shell); + new_argv[1] = *batch_filename_ptr; /* only argv[0] gets freed later */ + } else { + new_argv[0] = xstrdup (*batch_filename_ptr); + new_argv[1] = NULL; + } + new_argv[2] = NULL; + } else +#endif /* WINDOWS32 */ + if (unixy_shell) + new_argv = construct_command_argv_internal (new_line, (char **) NULL, + (char *) 0, (char *) 0, + (char **) 0); +# ifdef __EMX__ + else if (!unixy_shell) + { + /* new_line is local, must not be freed therefore */ + char *p, *q; + int quote; + size_t index; + size_t len; + + /* handle quotes + We have to remove all double quotes and to split the line + into distinct arguments because of the strange handling + of builtin commands by cmd: 'echo "bla"' prints "bla" + (with quotes) while 'c:\bin\echo.exe "bla"' prints bla + (without quotes). Some programs like autoconf rely + on the second behaviour. */ + + len = strlen (new_line) + 1; + + /* More than 1 arg per character is impossible. */ + new_argv = (char **) xmalloc (len * sizeof (char *)); + + /* All the args can fit in a buffer as big as new_line is. */ + new_argv[0] = (char *) xmalloc (len); + + index = 0; + quote = 0; + q = new_line; + p = new_argv[index]; + while(*q != '\0') + { + /* searching for closing quote */ + if (quote) + { + if (*q == quote) + { + /* remove the quote */ + q++; + quote = 0; + } + else /* normal character: copy it */ + *p++ = *q++; + } + + /* searching for opening quote */ + else if (*q == '\"' +# ifndef NO_CMD_DEFAULT + || *q == '\'' +# endif + ) + { + /* remove opening quote */ + quote = *q; + q++; + } + + /* spaces outside of a quoted string: remove them + and start a new argument */ + else if (*q == ' ' || *q == '\t') + { + *p++ = '\0'; /* trailing '\0' for last argument */ + + /* remove all successive spaces */ + do + { + q++; + } + while(*q == ' ' || *q == '\t'); + + /* start new argument */ + index++; + new_argv[index] = p; + } + + /* normal character (no space) outside a quoted string*/ + else + *p++ = *q++; + } /* end while() */ + + *p = '\0'; /* trailing '\0' for the last argument */ + new_argv[index + 1] = NULL; + +# ifndef NO_CMD_DEFAULT + /* special case: echo x="y" + (e.g. autoconf uses this to determine whether make works) + this is pure idioty but cmd works this way: + if 'echo' and 'x="y"' are two different arguments cmd + will print '"x="y""' but if they are only one argument + cmd will print 'bla="blurb"' as it should be + note: if we do not allow cmd to be the default shell + we do not need this kind of voodoo */ + if (index == 3 && strcasecmp(new_argv[2], "echo") == 0) + { + new_argv[2][4] = ' '; + new_argv[3] = NULL; + } +# endif + } +#elif defined(__MSDOS__) + else + { + /* With MSDOS shells, we must construct the command line here + instead of recursively calling ourselves, because we + cannot backslash-escape the special characters (see above). */ + new_argv = (char **) xmalloc (sizeof (char *)); + line_len = strlen (new_line) - shell_len - sizeof (minus_c) + 1; + new_argv[0] = xmalloc (line_len + 1); + strncpy (new_argv[0], + new_line + shell_len + sizeof (minus_c) - 1, line_len); + new_argv[0][line_len] = '\0'; + } +#else + else + fatal (NILF, _("%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"), + __FILE__, __LINE__); +#endif + } +#endif /* ! AMIGA */ + + return new_argv; +} +#endif /* !VMS */ + +/* Figure out the argument list necessary to run LINE as a command. Try to + avoid using a shell. This routine handles only ' quoting, and " quoting + when no backslash, $ or ` characters are seen in the quotes. Starting + quotes may be escaped with a backslash. If any of the characters in + sh_chars[] is seen, or any of the builtin commands listed in sh_cmds[] + is the first word of a line, the shell is used. + + If RESTP is not NULL, *RESTP is set to point to the first newline in LINE. + If *RESTP is NULL, newlines will be ignored. + + FILE is the target whose commands these are. It is used for + variable expansion for $(SHELL) and $(IFS). */ + +char ** +construct_command_argv (char *line, char **restp, struct file *file, + char **batch_filename_ptr) +{ + char *shell, *ifs; + char **argv; + +#ifdef VMS + char *cptr; + int argc; + + argc = 0; + cptr = line; + for (;;) + { + while ((*cptr != 0) + && (isspace ((unsigned char)*cptr))) + cptr++; + if (*cptr == 0) + break; + while ((*cptr != 0) + && (!isspace((unsigned char)*cptr))) + cptr++; + argc++; + } + + argv = (char **)malloc (argc * sizeof (char *)); + if (argv == 0) + abort (); + + cptr = line; + argc = 0; + for (;;) + { + while ((*cptr != 0) + && (isspace ((unsigned char)*cptr))) + cptr++; + if (*cptr == 0) + break; + DB (DB_JOBS, ("argv[%d] = [%s]\n", argc, cptr)); + argv[argc++] = cptr; + while ((*cptr != 0) + && (!isspace((unsigned char)*cptr))) + cptr++; + if (*cptr != 0) + *cptr++ = 0; + } +#else + { + /* Turn off --warn-undefined-variables while we expand SHELL and IFS. */ + int save = warn_undefined_variables_flag; + warn_undefined_variables_flag = 0; + + shell = allocated_variable_expand_for_file ("$(SHELL)", file); +#ifdef WINDOWS32 + /* + * Convert to forward slashes so that construct_command_argv_internal() + * is not confused. + */ + if (shell) { + char *p = w32ify (shell, 0); + strcpy (shell, p); + } +#endif +#ifdef __EMX__ + { + static const char *unixroot = NULL; + static const char *last_shell = ""; + static int init = 0; + if (init == 0) + { + unixroot = getenv ("UNIXROOT"); + /* unixroot must be NULL or not empty */ + if (unixroot && unixroot[0] == '\0') unixroot = NULL; + init = 1; + } + + /* if we have an unixroot drive and if shell is not default_shell + (which means it's either cmd.exe or the test has already been + performed) and if shell is an absolute path without drive letter, + try whether it exists e.g.: if "/bin/sh" does not exist use + "$UNIXROOT/bin/sh" instead. */ + if (unixroot && shell && strcmp (shell, last_shell) != 0 + && (shell[0] == '/' || shell[0] == '\\')) + { + /* trying a new shell, check whether it exists */ + size_t size = strlen (shell); + char *buf = xmalloc (size + 7); + memcpy (buf, shell, size); + memcpy (buf + size, ".exe", 5); /* including the trailing '\0' */ + if (access (shell, F_OK) != 0 && access (buf, F_OK) != 0) + { + /* try the same for the unixroot drive */ + memmove (buf + 2, buf, size + 5); + buf[0] = unixroot[0]; + buf[1] = unixroot[1]; + if (access (buf, F_OK) == 0) + /* we have found a shell! */ + /* free(shell); */ + shell = buf; + else + free (buf); + } + else + free (buf); + } + } +#endif __EMX__ + + ifs = allocated_variable_expand_for_file ("$(IFS)", file); + + warn_undefined_variables_flag = save; + } + + argv = construct_command_argv_internal (line, restp, shell, ifs, batch_filename_ptr); + + free (shell); + free (ifs); +#endif /* !VMS */ + return argv; +} + +#if !defined(HAVE_DUP2) && !defined(_AMIGA) +int +dup2 (int old, int new) +{ + int fd; + + (void) close (new); + fd = dup (old); + if (fd != new) + { + (void) close (fd); + errno = EMFILE; + return -1; + } + + return fd; +} +#endif /* !HAPE_DUP2 && !_AMIGA */ diff --git a/src/mkutil/make/job.h b/src/mkutil/make/job.h new file mode 100644 index 00000000..85176ea8 --- /dev/null +++ b/src/mkutil/make/job.h @@ -0,0 +1,104 @@ +/* Definitions for managing subprocesses in GNU Make. +Copyright (C) 1992, 1993, 1996, 1999 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#ifndef SEEN_JOB_H +#define SEEN_JOB_H + +#ifdef HAVE_FCNTL_H +# include +#else +# include +#endif + +/* How to set close-on-exec for a file descriptor. */ + +#if !defined F_SETFD +# define CLOSE_ON_EXEC(_d) +#else +# ifndef FD_CLOEXEC +# define FD_CLOEXEC 1 +# endif +# define CLOSE_ON_EXEC(_d) (void) fcntl ((_d), F_SETFD, FD_CLOEXEC) +#endif + +/* Structure describing a running or dead child process. */ + +struct child + { + struct child *next; /* Link in the chain. */ + + struct file *file; /* File being remade. */ + + char **environment; /* Environment for commands. */ + + char **command_lines; /* Array of variable-expanded cmd lines. */ + unsigned int command_line; /* Index into above. */ + char *command_ptr; /* Ptr into command_lines[command_line]. */ + + pid_t pid; /* Child process's ID number. */ +#ifdef VMS + int efn; /* Completion event flag number */ + int cstatus; /* Completion status */ +#endif + char *sh_batch_file; /* Script file for shell commands */ + unsigned int remote:1; /* Nonzero if executing remotely. */ + + unsigned int noerror:1; /* Nonzero if commands contained a `-'. */ + + unsigned int good_stdin:1; /* Nonzero if this child has a good stdin. */ + unsigned int deleted:1; /* Nonzero if targets have been deleted. */ + }; + +extern struct child *children; + +extern void new_job PARAMS ((struct file *file)); +extern void reap_children PARAMS ((int block, int err)); +extern void start_waiting_jobs PARAMS ((void)); + +extern char **construct_command_argv PARAMS ((char *line, char **restp, struct file *file, char** batch_file)); +#ifdef VMS +extern int child_execute_job PARAMS ((char *argv, struct child *child)); +#elif defined(__EMX__) +extern int child_execute_job PARAMS ((int stdin_fd, int stdout_fd, char **argv, char **envp)); +#else +extern void child_execute_job PARAMS ((int stdin_fd, int stdout_fd, char **argv, char **envp)); +#endif +#ifdef _AMIGA +extern void exec_command PARAMS ((char **argv)); +#elif defined(__EMX__) +extern int exec_command PARAMS ((char **argv, char **envp)); +#else +extern void exec_command PARAMS ((char **argv, char **envp)); +#endif + +extern unsigned int job_slots_used; + +extern void block_sigs PARAMS ((void)); +#ifdef POSIX +extern void unblock_sigs PARAMS ((void)); +#else +#ifdef HAVE_SIGSETMASK +extern int fatal_signal_mask; +#define unblock_sigs() sigsetmask (0) +#else +#define unblock_sigs() +#endif +#endif + +#endif /* SEEN_JOB_H */ diff --git a/src/mkutil/make/main.c b/src/mkutil/make/main.c new file mode 100644 index 00000000..cbeca0c1 --- /dev/null +++ b/src/mkutil/make/main.c @@ -0,0 +1,2830 @@ +/* Argument parsing and main program of GNU Make. +Copyright (C) 1988, 1989, 1990, 1991, 1994, 1995, 1996, 1997, 1998, 1999, +2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +MA 02111-1307, USA. */ + +#include "make.h" +#include "dep.h" +#include "filedef.h" +#include "variable.h" +#include "job.h" +#include "commands.h" +#include "rule.h" +#include "debug.h" +#include "getopt.h" + +#include +#ifdef _AMIGA +# include +# include +#endif +#ifdef WINDOWS32 +#include +#include "pathstuff.h" +#endif +#ifdef __EMX__ +# include +# include +#endif +#if defined(MAKE_JOBSERVER) && defined(HAVE_FCNTL_H) +# include +#endif + +#ifdef _AMIGA +int __stack = 20000; /* Make sure we have 20K of stack space */ +#endif + +extern void init_dir PARAMS ((void)); +extern void remote_setup PARAMS ((void)); +extern void remote_cleanup PARAMS ((void)); +extern RETSIGTYPE fatal_error_signal PARAMS ((int sig)); + +extern void print_variable_data_base PARAMS ((void)); +extern void print_dir_data_base PARAMS ((void)); +extern void print_rule_data_base PARAMS ((void)); +extern void print_file_data_base PARAMS ((void)); +extern void print_vpath_data_base PARAMS ((void)); + +#if defined HAVE_WAITPID || defined HAVE_WAIT3 +# define HAVE_WAIT_NOHANG +#endif + +#ifndef HAVE_UNISTD_H +extern int chdir (); +#endif +#ifndef STDC_HEADERS +# ifndef sun /* Sun has an incorrect decl in a header. */ +extern void exit PARAMS ((int)) __attribute__ ((noreturn)); +# endif +extern double atof (); +#endif + +static void print_data_base PARAMS ((void)); +static void print_version PARAMS ((void)); +static void decode_switches PARAMS ((int argc, char **argv, int env)); +static void decode_env_switches PARAMS ((char *envar, unsigned int len)); +static void define_makeflags PARAMS ((int all, int makefile)); +static char *quote_for_env PARAMS ((char *out, char *in)); +static void initialize_global_hash_tables PARAMS ((void)); + + +/* The structure that describes an accepted command switch. */ + +struct command_switch + { + int c; /* The switch character. */ + + enum /* Type of the value. */ + { + flag, /* Turn int flag on. */ + flag_off, /* Turn int flag off. */ + string, /* One string per switch. */ + positive_int, /* A positive integer. */ + floating, /* A floating-point number (double). */ + ignore /* Ignored. */ + } type; + + char *value_ptr; /* Pointer to the value-holding variable. */ + + unsigned int env:1; /* Can come from MAKEFLAGS. */ + unsigned int toenv:1; /* Should be put in MAKEFLAGS. */ + unsigned int no_makefile:1; /* Don't propagate when remaking makefiles. */ + + char *noarg_value; /* Pointer to value used if no argument is given. */ + char *default_value;/* Pointer to default value. */ + + char *long_name; /* Long option name. */ + }; + +/* True if C is a switch value that corresponds to a short option. */ + +#define short_option(c) ((c) <= CHAR_MAX) + +/* The structure used to hold the list of strings given + in command switches of a type that takes string arguments. */ + +struct stringlist + { + char **list; /* Nil-terminated list of strings. */ + unsigned int idx; /* Index into above. */ + unsigned int max; /* Number of pointers allocated. */ + }; + + +/* The recognized command switches. */ + +/* Nonzero means do not print commands to be executed (-s). */ + +int silent_flag; + +/* Nonzero means just touch the files + that would appear to need remaking (-t) */ + +int touch_flag; + +/* Nonzero means just print what commands would need to be executed, + don't actually execute them (-n). */ + +int just_print_flag; + +/* Print debugging info (--debug). */ + +static struct stringlist *db_flags; +static int debug_flag = 0; + +int db_level = 0; + +#ifdef WINDOWS32 +/* Suspend make in main for a short time to allow debugger to attach */ + +int suspend_flag = 0; +#endif + +/* Environment variables override makefile definitions. */ + +int env_overrides = 0; + +/* Nonzero means ignore status codes returned by commands + executed to remake files. Just treat them all as successful (-i). */ + +int ignore_errors_flag = 0; + +/* Nonzero means don't remake anything, just print the data base + that results from reading the makefile (-p). */ + +int print_data_base_flag = 0; + +/* Nonzero means don't remake anything; just return a nonzero status + if the specified targets are not up to date (-q). */ + +int question_flag = 0; + +/* Nonzero means do not use any of the builtin rules (-r) / variables (-R). */ + +int no_builtin_rules_flag = 0; +int no_builtin_variables_flag = 0; + +/* Nonzero means keep going even if remaking some file fails (-k). */ + +int keep_going_flag; +int default_keep_going_flag = 0; + +/* Nonzero means print directory before starting and when done (-w). */ + +int print_directory_flag = 0; + +/* Nonzero means ignore print_directory_flag and never print the directory. + This is necessary because print_directory_flag is set implicitly. */ + +int inhibit_print_directory_flag = 0; + +/* Nonzero means print version information. */ + +int print_version_flag = 0; + +/* List of makefiles given with -f switches. */ + +static struct stringlist *makefiles = 0; + +/* Number of job slots (commands that can be run at once). */ + +unsigned int job_slots = 1; +unsigned int default_job_slots = 1; + +/* Value of job_slots that means no limit. */ + +static unsigned int inf_jobs = 0; + +/* File descriptors for the jobs pipe. */ + +static struct stringlist *jobserver_fds = 0; + +int job_fds[2] = { -1, -1 }; +int job_rfd = -1; + +/* Maximum load average at which multiple jobs will be run. + Negative values mean unlimited, while zero means limit to + zero load (which could be useful to start infinite jobs remotely + but one at a time locally). */ +#ifndef NO_FLOAT +double max_load_average = -1.0; +double default_load_average = -1.0; +#else +int max_load_average = -1; +int default_load_average = -1; +#endif + +/* List of directories given with -C switches. */ + +static struct stringlist *directories = 0; + +/* List of include directories given with -I switches. */ + +static struct stringlist *include_directories = 0; + +/* List of files given with -o switches. */ + +static struct stringlist *old_files = 0; + +/* List of files given with -W switches. */ + +static struct stringlist *new_files = 0; + +/* If nonzero, we should just print usage and exit. */ + +static int print_usage_flag = 0; + +/* If nonzero, we should print a warning message + for each reference to an undefined variable. */ + +int warn_undefined_variables_flag; + +/* If nonzero, always build all targets, regardless of whether + they appear out of date or not. */ + +int always_make_flag = 0; + +/* The usage output. We write it this way to make life easier for the + translators, especially those trying to translate to right-to-left + languages like Hebrew. */ + +static const char *const usage[] = + { + N_("Options:\n"), + N_("\ + -b, -m Ignored for compatibility.\n"), + N_("\ + -B, --always-make Unconditionally make all targets.\n"), + N_("\ + -C DIRECTORY, --directory=DIRECTORY\n\ + Change to DIRECTORY before doing anything.\n"), + N_("\ + -d Print lots of debugging information.\n"), + N_("\ + --debug[=FLAGS] Print various types of debugging information.\n"), + N_("\ + -e, --environment-overrides\n\ + Environment variables override makefiles.\n"), + N_("\ + -f FILE, --file=FILE, --makefile=FILE\n\ + Read FILE as a makefile.\n"), + N_("\ + -h, --help Print this message and exit.\n"), + N_("\ + -i, --ignore-errors Ignore errors from commands.\n"), + N_("\ + -I DIRECTORY, --include-dir=DIRECTORY\n\ + Search DIRECTORY for included makefiles.\n"), + N_("\ + -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg.\n"), + N_("\ + -k, --keep-going Keep going when some targets can't be made.\n"), + N_("\ + -l [N], --load-average[=N], --max-load[=N]\n\ + Don't start multiple jobs unless load is below N.\n"), + N_("\ + -n, --just-print, --dry-run, --recon\n\ + Don't actually run any commands; just print them.\n"), + N_("\ + -o FILE, --old-file=FILE, --assume-old=FILE\n\ + Consider FILE to be very old and don't remake it.\n"), + N_("\ + -p, --print-data-base Print make's internal database.\n"), + N_("\ + -q, --question Run no commands; exit status says if up to date.\n"), + N_("\ + -r, --no-builtin-rules Disable the built-in implicit rules.\n"), + N_("\ + -R, --no-builtin-variables Disable the built-in variable settings.\n"), + N_("\ + -s, --silent, --quiet Don't echo commands.\n"), + N_("\ + -S, --no-keep-going, --stop\n\ + Turns off -k.\n"), + N_("\ + -t, --touch Touch targets instead of remaking them.\n"), + N_("\ + -v, --version Print the version number of make and exit.\n"), + N_("\ + -w, --print-directory Print the current directory.\n"), + N_("\ + --no-print-directory Turn off -w, even if it was turned on implicitly.\n"), + N_("\ + -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n\ + Consider FILE to be infinitely new.\n"), + N_("\ + --warn-undefined-variables Warn when an undefined variable is referenced.\n"), + NULL + }; + +/* The table of command switches. */ + +static const struct command_switch switches[] = + { + { 'b', ignore, 0, 0, 0, 0, 0, 0, 0 }, + { 'B', flag, (char *) &always_make_flag, 1, 1, 0, 0, 0, "always-make" }, + { 'C', string, (char *) &directories, 0, 0, 0, 0, 0, "directory" }, + { 'd', flag, (char *) &debug_flag, 1, 1, 0, 0, 0, 0 }, + { CHAR_MAX+1, string, (char *) &db_flags, 1, 1, 0, "basic", 0, "debug" }, +#ifdef WINDOWS32 + { 'D', flag, (char *) &suspend_flag, 1, 1, 0, 0, 0, "suspend-for-debug" }, +#endif + { 'e', flag, (char *) &env_overrides, 1, 1, 0, 0, 0, + "environment-overrides", }, + { 'f', string, (char *) &makefiles, 0, 0, 0, 0, 0, "file" }, + { 'h', flag, (char *) &print_usage_flag, 0, 0, 0, 0, 0, "help" }, + { 'i', flag, (char *) &ignore_errors_flag, 1, 1, 0, 0, 0, + "ignore-errors" }, + { 'I', string, (char *) &include_directories, 1, 1, 0, 0, 0, + "include-dir" }, + { 'j', positive_int, (char *) &job_slots, 1, 1, 0, (char *) &inf_jobs, + (char *) &default_job_slots, "jobs" }, + { CHAR_MAX+2, string, (char *) &jobserver_fds, 1, 1, 0, 0, 0, + "jobserver-fds" }, + { 'k', flag, (char *) &keep_going_flag, 1, 1, 0, 0, + (char *) &default_keep_going_flag, "keep-going" }, +#ifndef NO_FLOAT + { 'l', floating, (char *) &max_load_average, 1, 1, 0, + (char *) &default_load_average, (char *) &default_load_average, + "load-average" }, +#else + { 'l', positive_int, (char *) &max_load_average, 1, 1, 0, + (char *) &default_load_average, (char *) &default_load_average, + "load-average" }, +#endif + { 'm', ignore, 0, 0, 0, 0, 0, 0, 0 }, + { 'n', flag, (char *) &just_print_flag, 1, 1, 1, 0, 0, "just-print" }, + { 'o', string, (char *) &old_files, 0, 0, 0, 0, 0, "old-file" }, + { 'p', flag, (char *) &print_data_base_flag, 1, 1, 0, 0, 0, + "print-data-base" }, + { 'q', flag, (char *) &question_flag, 1, 1, 1, 0, 0, "question" }, + { 'r', flag, (char *) &no_builtin_rules_flag, 1, 1, 0, 0, 0, + "no-builtin-rules" }, + { 'R', flag, (char *) &no_builtin_variables_flag, 1, 1, 0, 0, 0, + "no-builtin-variables" }, + { 's', flag, (char *) &silent_flag, 1, 1, 0, 0, 0, "silent" }, + { 'S', flag_off, (char *) &keep_going_flag, 1, 1, 0, 0, + (char *) &default_keep_going_flag, "no-keep-going" }, + { 't', flag, (char *) &touch_flag, 1, 1, 1, 0, 0, "touch" }, + { 'v', flag, (char *) &print_version_flag, 1, 1, 0, 0, 0, "version" }, + { 'w', flag, (char *) &print_directory_flag, 1, 1, 0, 0, 0, + "print-directory" }, + { CHAR_MAX+3, flag, (char *) &inhibit_print_directory_flag, 1, 1, 0, 0, 0, + "no-print-directory" }, + { 'W', string, (char *) &new_files, 0, 0, 0, 0, 0, "what-if" }, + { CHAR_MAX+4, flag, (char *) &warn_undefined_variables_flag, 1, 1, 0, 0, 0, + "warn-undefined-variables" }, + { '\0', } + }; + +/* Secondary long names for options. */ + +static struct option long_option_aliases[] = + { + { "quiet", no_argument, 0, 's' }, + { "stop", no_argument, 0, 'S' }, + { "new-file", required_argument, 0, 'W' }, + { "assume-new", required_argument, 0, 'W' }, + { "assume-old", required_argument, 0, 'o' }, + { "max-load", optional_argument, 0, 'l' }, + { "dry-run", no_argument, 0, 'n' }, + { "recon", no_argument, 0, 'n' }, + { "makefile", required_argument, 0, 'f' }, + }; + +/* List of goal targets. */ + +static struct dep *goals, *lastgoal; + +/* List of variables which were defined on the command line + (or, equivalently, in MAKEFLAGS). */ + +struct command_variable + { + struct command_variable *next; + struct variable *variable; + }; +static struct command_variable *command_variables; + +/* The name we were invoked with. */ + +char *program; + +/* Our current directory before processing any -C options. */ + +char *directory_before_chdir; + +/* Our current directory after processing all -C options. */ + +char *starting_directory; + +/* Value of the MAKELEVEL variable at startup (or 0). */ + +unsigned int makelevel; + +/* First file defined in the makefile whose name does not + start with `.'. This is the default to remake if the + command line does not specify. */ + +struct file *default_goal_file; + +/* Pointer to structure for the file .DEFAULT + whose commands are used for any file that has none of its own. + This is zero if the makefiles do not define .DEFAULT. */ + +struct file *default_file; + +/* Nonzero if we have seen the magic `.POSIX' target. + This turns on pedantic compliance with POSIX.2. */ + +int posix_pedantic; + +/* Nonzero if we have seen the `.NOTPARALLEL' target. + This turns off parallel builds for this invocation of make. */ + +int not_parallel; + +/* Nonzero if some rule detected clock skew; we keep track so (a) we only + print one warning about it during the run, and (b) we can print a final + warning at the end of the run. */ + +int clock_skew_detected; + +/* Mask of signals that are being caught with fatal_error_signal. */ + +#ifdef POSIX +sigset_t fatal_signal_set; +#else +# ifdef HAVE_SIGSETMASK +int fatal_signal_mask; +# endif +#endif + +#if !defined HAVE_BSD_SIGNAL && !defined bsd_signal +# if !defined HAVE_SIGACTION +# define bsd_signal signal +# else +typedef RETSIGTYPE (*bsd_signal_ret_t) (); + +static bsd_signal_ret_t +bsd_signal (int sig, bsd_signal_ret_t func) +{ + struct sigaction act, oact; + act.sa_handler = func; + act.sa_flags = SA_RESTART; + sigemptyset (&act.sa_mask); + sigaddset (&act.sa_mask, sig); + if (sigaction (sig, &act, &oact) != 0) + return SIG_ERR; + return oact.sa_handler; +} +# endif +#endif + +static void +initialize_global_hash_tables (void) +{ + init_hash_global_variable_set (); + init_hash_files (); + hash_init_directories (); + hash_init_function_table (); +} + +static struct file * +enter_command_line_file (char *name) +{ + if (name[0] == '\0') + fatal (NILF, _("empty string invalid as file name")); + + if (name[0] == '~') + { + char *expanded = tilde_expand (name); + if (expanded != 0) + name = expanded; /* Memory leak; I don't care. */ + } + + /* This is also done in parse_file_seq, so this is redundant + for names read from makefiles. It is here for names passed + on the command line. */ + while (name[0] == '.' && name[1] == '/' && name[2] != '\0') + { + name += 2; + while (*name == '/') + /* Skip following slashes: ".//foo" is "foo", not "/foo". */ + ++name; + } + + if (*name == '\0') + { + /* It was all slashes! Move back to the dot and truncate + it after the first slash, so it becomes just "./". */ + do + --name; + while (name[0] != '.'); + name[2] = '\0'; + } + + return enter_file (xstrdup (name)); +} + +/* Toggle -d on receipt of SIGUSR1. */ + +static RETSIGTYPE +debug_signal_handler (int sig) +{ + db_level = db_level ? DB_NONE : DB_BASIC; +} + +static void +decode_debug_flags (void) +{ + char **pp; + + if (debug_flag) + db_level = DB_ALL; + + if (!db_flags) + return; + + for (pp=db_flags->list; *pp; ++pp) + { + const char *p = *pp; + + while (1) + { + switch (tolower (p[0])) + { + case 'a': + db_level |= DB_ALL; + break; + case 'b': + db_level |= DB_BASIC; + break; + case 'i': + db_level |= DB_BASIC | DB_IMPLICIT; + break; + case 'j': + db_level |= DB_JOBS; + break; + case 'm': + db_level |= DB_BASIC | DB_MAKEFILES; + break; + case 'v': + db_level |= DB_BASIC | DB_VERBOSE; + break; + default: + fatal (NILF, _("unknown debug level specification `%s'"), p); + } + + while (*(++p) != '\0') + if (*p == ',' || *p == ' ') + break; + + if (*p == '\0') + break; + + ++p; + } + } +} + +#ifdef WINDOWS32 +/* + * HANDLE runtime exceptions by avoiding a requestor on the GUI. Capture + * exception and print it to stderr instead. + * + * If ! DB_VERBOSE, just print a simple message and exit. + * If DB_VERBOSE, print a more verbose message. + * If compiled for DEBUG, let exception pass through to GUI so that + * debuggers can attach. + */ +LONG WINAPI +handle_runtime_exceptions( struct _EXCEPTION_POINTERS *exinfo ) +{ + PEXCEPTION_RECORD exrec = exinfo->ExceptionRecord; + LPSTR cmdline = GetCommandLine(); + LPSTR prg = strtok(cmdline, " "); + CHAR errmsg[1024]; +#ifdef USE_EVENT_LOG + HANDLE hEventSource; + LPTSTR lpszStrings[1]; +#endif + + if (! ISDB (DB_VERBOSE)) + { + sprintf(errmsg, + _("%s: Interrupt/Exception caught (code = 0x%x, addr = 0x%x)\n"), + prg, exrec->ExceptionCode, exrec->ExceptionAddress); + fprintf(stderr, errmsg); + exit(255); + } + + sprintf(errmsg, + _("\nUnhandled exception filter called from program %s\nExceptionCode = %x\nExceptionFlags = %x\nExceptionAddress = %x\n"), + prg, exrec->ExceptionCode, exrec->ExceptionFlags, + exrec->ExceptionAddress); + + if (exrec->ExceptionCode == EXCEPTION_ACCESS_VIOLATION + && exrec->NumberParameters >= 2) + sprintf(&errmsg[strlen(errmsg)], + (exrec->ExceptionInformation[0] + ? _("Access violation: write operation at address %x\n") + : _("Access violation: read operation at address %x\n")), + exrec->ExceptionInformation[1]); + + /* turn this on if we want to put stuff in the event log too */ +#ifdef USE_EVENT_LOG + hEventSource = RegisterEventSource(NULL, "GNU Make"); + lpszStrings[0] = errmsg; + + if (hEventSource != NULL) + { + ReportEvent(hEventSource, /* handle of event source */ + EVENTLOG_ERROR_TYPE, /* event type */ + 0, /* event category */ + 0, /* event ID */ + NULL, /* current user's SID */ + 1, /* strings in lpszStrings */ + 0, /* no bytes of raw data */ + lpszStrings, /* array of error strings */ + NULL); /* no raw data */ + + (VOID) DeregisterEventSource(hEventSource); + } +#endif + + /* Write the error to stderr too */ + fprintf(stderr, errmsg); + +#ifdef DEBUG + return EXCEPTION_CONTINUE_SEARCH; +#else + exit(255); + return (255); /* not reached */ +#endif +} + +/* + * On WIN32 systems we don't have the luxury of a /bin directory that + * is mapped globally to every drive mounted to the system. Since make could + * be invoked from any drive, and we don't want to propogate /bin/sh + * to every single drive. Allow ourselves a chance to search for + * a value for default shell here (if the default path does not exist). + */ + +int +find_and_set_default_shell (char *token) +{ + int sh_found = 0; + char* search_token; + PATH_VAR(sh_path); + extern char *default_shell; + + if (!token) + search_token = default_shell; + else + search_token = token; + + if (!no_default_sh_exe && + (token == NULL || !strcmp(search_token, default_shell))) { + /* no new information, path already set or known */ + sh_found = 1; + } else if (file_exists_p(search_token)) { + /* search token path was found */ + sprintf(sh_path, "%s", search_token); + default_shell = xstrdup(w32ify(sh_path,0)); + DB (DB_VERBOSE, + (_("find_and_set_shell setting default_shell = %s\n"), default_shell)); + sh_found = 1; + } else { + char *p; + struct variable *v = lookup_variable ("Path", 4); + + /* + * Search Path for shell + */ + if (v && v->value) { + char *ep; + + p = v->value; + ep = strchr(p, PATH_SEPARATOR_CHAR); + + while (ep && *ep) { + *ep = '\0'; + + if (dir_file_exists_p(p, search_token)) { + sprintf(sh_path, "%s/%s", p, search_token); + default_shell = xstrdup(w32ify(sh_path,0)); + sh_found = 1; + *ep = PATH_SEPARATOR_CHAR; + + /* terminate loop */ + p += strlen(p); + } else { + *ep = PATH_SEPARATOR_CHAR; + p = ++ep; + } + + ep = strchr(p, PATH_SEPARATOR_CHAR); + } + + /* be sure to check last element of Path */ + if (p && *p && dir_file_exists_p(p, search_token)) { + sprintf(sh_path, "%s/%s", p, search_token); + default_shell = xstrdup(w32ify(sh_path,0)); + sh_found = 1; + } + + if (sh_found) + DB (DB_VERBOSE, + (_("find_and_set_shell path search set default_shell = %s\n"), + default_shell)); + } + } + + /* naive test */ + if (!unixy_shell && sh_found && + (strstr(default_shell, "sh") || strstr(default_shell, "SH"))) { + unixy_shell = 1; + batch_mode_shell = 0; + } + +#ifdef BATCH_MODE_ONLY_SHELL + batch_mode_shell = 1; +#endif + + return (sh_found); +} +#endif /* WINDOWS32 */ + +#ifdef __MSDOS__ + +static void +msdos_return_to_initial_directory (void) +{ + if (directory_before_chdir) + chdir (directory_before_chdir); +} +#endif + +extern char *mktemp PARAMS ((char *template)); +extern int mkstemp PARAMS ((char *template)); + +FILE * +open_tmpfile(char **name, const char *template) +{ + int fd; + +#if defined HAVE_MKSTEMP || defined HAVE_MKTEMP +# define TEMPLATE_LEN strlen (template) +#else +# define TEMPLATE_LEN L_tmpnam +#endif + *name = xmalloc (TEMPLATE_LEN + 1); + strcpy (*name, template); + +#if defined HAVE_MKSTEMP && defined HAVE_FDOPEN + /* It's safest to use mkstemp(), if we can. */ + fd = mkstemp (*name); + if (fd == -1) + return 0; + return fdopen (fd, "w"); +#else +# ifdef HAVE_MKTEMP + (void) mktemp (*name); +# else + (void) tmpnam (*name); +# endif + +# ifdef HAVE_FDOPEN + /* Can't use mkstemp(), but guard against a race condition. */ + fd = open (*name, O_CREAT|O_EXCL|O_WRONLY, 0600); + if (fd == -1) + return 0; + return fdopen (fd, "w"); +# else + /* Not secure, but what can we do? */ + return fopen (*name, "w"); +# endif +#endif +} + + +#ifdef _AMIGA +int +main (int argc, char **argv) +#else +int +main (int argc, char **argv, char **envp) +#endif +{ + static char *stdin_nm = 0; + register struct file *f; + register unsigned int i; + char **p; + struct dep *read_makefiles; + PATH_VAR (current_directory); +#ifdef WINDOWS32 + char *unix_path = NULL; + char *windows32_path = NULL; + + SetUnhandledExceptionFilter(handle_runtime_exceptions); + + /* start off assuming we have no shell */ + unixy_shell = 0; + no_default_sh_exe = 1; +#endif + + /* Needed for OS/2 */ + initialize_main(&argc, &argv); + + default_goal_file = 0; + reading_file = 0; + +#if defined (__MSDOS__) && !defined (_POSIX_SOURCE) + /* Request the most powerful version of `system', to + make up for the dumb default shell. */ + __system_flags = (__system_redirect + | __system_use_shell + | __system_allow_multiple_cmds + | __system_allow_long_cmds + | __system_handle_null_commands + | __system_emulate_chdir); + +#endif + + /* Set up gettext/internationalization support. */ + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + +#ifdef POSIX + sigemptyset (&fatal_signal_set); +#define ADD_SIG(sig) sigaddset (&fatal_signal_set, sig) +#else +#ifdef HAVE_SIGSETMASK + fatal_signal_mask = 0; +#define ADD_SIG(sig) fatal_signal_mask |= sigmask (sig) +#else +#define ADD_SIG(sig) +#endif +#endif + +#define FATAL_SIG(sig) \ + if (bsd_signal (sig, fatal_error_signal) == SIG_IGN) \ + bsd_signal (sig, SIG_IGN); \ + else \ + ADD_SIG (sig); + +#ifdef SIGHUP + FATAL_SIG (SIGHUP); +#endif +#ifdef SIGQUIT + FATAL_SIG (SIGQUIT); +#endif + FATAL_SIG (SIGINT); + FATAL_SIG (SIGTERM); + +#ifdef __MSDOS__ + /* Windows 9X delivers FP exceptions in child programs to their + parent! We don't want Make to die when a child divides by zero, + so we work around that lossage by catching SIGFPE. */ + FATAL_SIG (SIGFPE); +#endif + +#ifdef SIGDANGER + FATAL_SIG (SIGDANGER); +#endif +#ifdef SIGXCPU + FATAL_SIG (SIGXCPU); +#endif +#ifdef SIGXFSZ + FATAL_SIG (SIGXFSZ); +#endif + +#undef FATAL_SIG + + /* Do not ignore the child-death signal. This must be done before + any children could possibly be created; otherwise, the wait + functions won't work on systems with the SVR4 ECHILD brain + damage, if our invoker is ignoring this signal. */ + +#ifdef HAVE_WAIT_NOHANG +# if defined SIGCHLD + (void) bsd_signal (SIGCHLD, SIG_DFL); +# endif +# if defined SIGCLD && SIGCLD != SIGCHLD + (void) bsd_signal (SIGCLD, SIG_DFL); +# endif +#endif + + /* Make sure stdout is line-buffered. */ + +#ifdef HAVE_SETVBUF +# ifdef SETVBUF_REVERSED + setvbuf (stdout, _IOLBF, xmalloc (BUFSIZ), BUFSIZ); +# else /* setvbuf not reversed. */ + /* Some buggy systems lose if we pass 0 instead of allocating ourselves. */ + setvbuf (stdout, (char *) 0, _IOLBF, BUFSIZ); +# endif /* setvbuf reversed. */ +#elif HAVE_SETLINEBUF + setlinebuf (stdout); +#endif /* setlinebuf missing. */ + + /* Figure out where this program lives. */ + + if (argv[0] == 0) + argv[0] = ""; + if (argv[0][0] == '\0') + program = "make"; + else + { +#ifdef VMS + program = strrchr (argv[0], ']'); +#else + program = strrchr (argv[0], '/'); +#endif +#if defined(__MSDOS__) || defined(__EMX__) + if (program == 0) + program = strrchr (argv[0], '\\'); + else + { + /* Some weird environments might pass us argv[0] with + both kinds of slashes; we must find the rightmost. */ + char *p = strrchr (argv[0], '\\'); + if (p && p > program) + program = p; + } + if (program == 0 && argv[0][1] == ':') + program = argv[0] + 1; +#endif + if (program == 0) + program = argv[0]; + else + ++program; + } + + /* Set up to access user data (files). */ + user_access (); + + initialize_global_hash_tables (); + + /* Figure out where we are. */ + +#ifdef WINDOWS32 + if (getcwd_fs (current_directory, GET_PATH_MAX) == 0) +#else + if (getcwd (current_directory, GET_PATH_MAX) == 0) +#endif + { +#ifdef HAVE_GETCWD + perror_with_name ("getcwd: ", ""); +#else + error (NILF, "getwd: %s", current_directory); +#endif + current_directory[0] = '\0'; + directory_before_chdir = 0; + } + else + directory_before_chdir = xstrdup (current_directory); +#ifdef __MSDOS__ + /* Make sure we will return to the initial directory, come what may. */ + atexit (msdos_return_to_initial_directory); +#endif + + /* Initialize the special variables. */ + define_variable (".VARIABLES", 10, "", o_default, 0)->special = 1; + /* define_variable (".TARGETS", 8, "", o_default, 0); */ + + /* Read in variables from the environment. It is important that this be + done before $(MAKE) is figured out so its definitions will not be + from the environment. */ + +#ifndef _AMIGA + for (i = 0; envp[i] != 0; ++i) + { + int do_not_define; + register char *ep = envp[i]; + + /* by default, everything gets defined and exported */ + do_not_define = 0; + + while (*ep != '=') + ++ep; +#ifdef WINDOWS32 + if (!unix_path && strneq(envp[i], "PATH=", 5)) + unix_path = ep+1; + else if (!windows32_path && !strnicmp(envp[i], "Path=", 5)) { + do_not_define = 1; /* it gets defined after loop exits */ + windows32_path = ep+1; + } +#endif + /* The result of pointer arithmetic is cast to unsigned int for + machines where ptrdiff_t is a different size that doesn't widen + the same. */ + if (!do_not_define) + define_variable (envp[i], (unsigned int) (ep - envp[i]), + ep + 1, o_env, 1) + /* Force exportation of every variable culled from the environment. + We used to rely on target_environment's v_default code to do this. + But that does not work for the case where an environment variable + is redefined in a makefile with `override'; it should then still + be exported, because it was originally in the environment. */ + ->export = v_export; + } +#ifdef WINDOWS32 + /* + * Make sure that this particular spelling of 'Path' is available + */ + if (windows32_path) + define_variable("Path", 4, windows32_path, o_env, 1)->export = v_export; + else if (unix_path) + define_variable("Path", 4, unix_path, o_env, 1)->export = v_export; + else + define_variable("Path", 4, "", o_env, 1)->export = v_export; + + /* + * PATH defaults to Path iff PATH not found and Path is found. + */ + if (!unix_path && windows32_path) + define_variable("PATH", 4, windows32_path, o_env, 1)->export = v_export; +#endif +#else /* For Amiga, read the ENV: device, ignoring all dirs */ + { + BPTR env, file, old; + char buffer[1024]; + int len; + __aligned struct FileInfoBlock fib; + + env = Lock ("ENV:", ACCESS_READ); + if (env) + { + old = CurrentDir (DupLock(env)); + Examine (env, &fib); + + while (ExNext (env, &fib)) + { + if (fib.fib_DirEntryType < 0) /* File */ + { + /* Define an empty variable. It will be filled in + variable_lookup(). Makes startup quite a bit + faster. */ + define_variable (fib.fib_FileName, + strlen (fib.fib_FileName), + "", o_env, 1)->export = v_export; + } + } + UnLock (env); + UnLock(CurrentDir(old)); + } + } +#endif + + /* Decode the switches. */ + + decode_env_switches ("MAKEFLAGS", 9); +#if 0 + /* People write things like: + MFLAGS="CC=gcc -pipe" "CFLAGS=-g" + and we set the -p, -i and -e switches. Doesn't seem quite right. */ + decode_env_switches ("MFLAGS", 6); +#endif + decode_switches (argc, argv, 0); +#ifdef WINDOWS32 + if (suspend_flag) { + fprintf(stderr, "%s (pid = %d)\n", argv[0], GetCurrentProcessId()); + fprintf(stderr, _("%s is suspending for 30 seconds..."), argv[0]); + Sleep(30 * 1000); + fprintf(stderr, _("done sleep(30). Continuing.\n")); + } +#endif + + decode_debug_flags (); + + /* Print version information. */ + + if (print_version_flag || print_data_base_flag || db_level) + print_version (); + + /* `make --version' is supposed to just print the version and exit. */ + if (print_version_flag) + die (0); + +#ifndef VMS + /* Set the "MAKE_COMMAND" variable to the name we were invoked with. + (If it is a relative pathname with a slash, prepend our directory name + so the result will run the same program regardless of the current dir. + If it is a name with no slash, we can only hope that PATH did not + find it in the current directory.) */ +#ifdef WINDOWS32 + /* + * Convert from backslashes to forward slashes for + * programs like sh which don't like them. Shouldn't + * matter if the path is one way or the other for + * CreateProcess(). + */ + if (strpbrk(argv[0], "/:\\") || + strstr(argv[0], "..") || + strneq(argv[0], "//", 2)) + argv[0] = xstrdup(w32ify(argv[0],1)); +#else /* WINDOWS32 */ +#if defined (__MSDOS__) || defined (__EMX__) + if (strchr (argv[0], '\\')) + { + char *p; + + argv[0] = xstrdup (argv[0]); + for (p = argv[0]; *p; p++) + if (*p == '\\') + *p = '/'; + } + /* If argv[0] is not in absolute form, prepend the current + directory. This can happen when Make is invoked by another DJGPP + program that uses a non-absolute name. */ + if (current_directory[0] != '\0' + && argv[0] != 0 + && (argv[0][0] != '/' && (argv[0][0] == '\0' || argv[0][1] != ':'))) + argv[0] = concat (current_directory, "/", argv[0]); +#else /* !__MSDOS__ */ + if (current_directory[0] != '\0' + && argv[0] != 0 && argv[0][0] != '/' && strchr (argv[0], '/') != 0) + argv[0] = concat (current_directory, "/", argv[0]); +#endif /* !__MSDOS__ */ +#endif /* WINDOWS32 */ +#endif + + /* The extra indirection through $(MAKE_COMMAND) is done + for hysterical raisins. */ + (void) define_variable ("MAKE_COMMAND", 12, argv[0], o_default, 0); + (void) define_variable ("MAKE", 4, "$(MAKE_COMMAND)", o_default, 1); + + if (command_variables != 0) + { + struct command_variable *cv; + struct variable *v; + unsigned int len = 0; + char *value, *p; + + /* Figure out how much space will be taken up by the command-line + variable definitions. */ + for (cv = command_variables; cv != 0; cv = cv->next) + { + v = cv->variable; + len += 2 * strlen (v->name); + if (! v->recursive) + ++len; + ++len; + len += 2 * strlen (v->value); + ++len; + } + + /* Now allocate a buffer big enough and fill it. */ + p = value = (char *) alloca (len); + for (cv = command_variables; cv != 0; cv = cv->next) + { + v = cv->variable; + p = quote_for_env (p, v->name); + if (! v->recursive) + *p++ = ':'; + *p++ = '='; + p = quote_for_env (p, v->value); + *p++ = ' '; + } + p[-1] = '\0'; /* Kill the final space and terminate. */ + + /* Define an unchangeable variable with a name that no POSIX.2 + makefile could validly use for its own variable. */ + (void) define_variable ("-*-command-variables-*-", 23, + value, o_automatic, 0); + + /* Define the variable; this will not override any user definition. + Normally a reference to this variable is written into the value of + MAKEFLAGS, allowing the user to override this value to affect the + exported value of MAKEFLAGS. In POSIX-pedantic mode, we cannot + allow the user's setting of MAKEOVERRIDES to affect MAKEFLAGS, so + a reference to this hidden variable is written instead. */ + (void) define_variable ("MAKEOVERRIDES", 13, + "${-*-command-variables-*-}", o_env, 1); + } + + /* If there were -C flags, move ourselves about. */ + if (directories != 0) + for (i = 0; directories->list[i] != 0; ++i) + { + char *dir = directories->list[i]; + if (dir[0] == '~') + { + char *expanded = tilde_expand (dir); + if (expanded != 0) + dir = expanded; + } + if (chdir (dir) < 0) + pfatal_with_name (dir); + if (dir != directories->list[i]) + free (dir); + } + +#ifdef WINDOWS32 + /* + * THIS BLOCK OF CODE MUST COME AFTER chdir() CALL ABOVE IN ORDER + * TO NOT CONFUSE THE DEPENDENCY CHECKING CODE IN implicit.c. + * + * The functions in dir.c can incorrectly cache information for "." + * before we have changed directory and this can cause file + * lookups to fail because the current directory (.) was pointing + * at the wrong place when it was first evaluated. + */ + no_default_sh_exe = !find_and_set_default_shell(NULL); + +#endif /* WINDOWS32 */ + /* Figure out the level of recursion. */ + { + struct variable *v = lookup_variable (MAKELEVEL_NAME, MAKELEVEL_LENGTH); + if (v != 0 && v->value[0] != '\0' && v->value[0] != '-') + makelevel = (unsigned int) atoi (v->value); + else + makelevel = 0; + } + + /* Except under -s, always do -w in sub-makes and under -C. */ + if (!silent_flag && (directories != 0 || makelevel > 0)) + print_directory_flag = 1; + + /* Let the user disable that with --no-print-directory. */ + if (inhibit_print_directory_flag) + print_directory_flag = 0; + + /* If -R was given, set -r too (doesn't make sense otherwise!) */ + if (no_builtin_variables_flag) + no_builtin_rules_flag = 1; + + /* Construct the list of include directories to search. */ + + construct_include_path (include_directories == 0 ? (char **) 0 + : include_directories->list); + + /* Figure out where we are now, after chdir'ing. */ + if (directories == 0) + /* We didn't move, so we're still in the same place. */ + starting_directory = current_directory; + else + { +#ifdef WINDOWS32 + if (getcwd_fs (current_directory, GET_PATH_MAX) == 0) +#else + if (getcwd (current_directory, GET_PATH_MAX) == 0) +#endif + { +#ifdef HAVE_GETCWD + perror_with_name ("getcwd: ", ""); +#else + error (NILF, "getwd: %s", current_directory); +#endif + starting_directory = 0; + } + else + starting_directory = current_directory; + } + + (void) define_variable ("CURDIR", 6, current_directory, o_default, 0); + + /* Read any stdin makefiles into temporary files. */ + + if (makefiles != 0) + { + register unsigned int i; + for (i = 0; i < makefiles->idx; ++i) + if (makefiles->list[i][0] == '-' && makefiles->list[i][1] == '\0') + { + /* This makefile is standard input. Since we may re-exec + and thus re-read the makefiles, we read standard input + into a temporary file and read from that. */ + FILE *outfile; + char *template, *tmpdir; + + if (stdin_nm) + fatal (NILF, _("Makefile from standard input specified twice.")); + +#ifdef VMS +# define DEFAULT_TMPDIR "sys$scratch:" +#else +# ifdef P_tmpdir +# define DEFAULT_TMPDIR P_tmpdir +# else +# define DEFAULT_TMPDIR "/tmp" +# endif +#endif +#define DEFAULT_TMPFILE "GmXXXXXX" + + if (((tmpdir = getenv ("TMPDIR")) == NULL || *tmpdir == '\0') +#if defined (__MSDOS__) || defined (WINDOWS32) || defined (__EMX__) + /* These are also used commonly on these platforms. */ + && ((tmpdir = getenv ("TEMP")) == NULL || *tmpdir == '\0') + && ((tmpdir = getenv ("TMP")) == NULL || *tmpdir == '\0') +#endif + ) + tmpdir = DEFAULT_TMPDIR; + + template = (char *) alloca (strlen (tmpdir) + + sizeof (DEFAULT_TMPFILE) + 1); + strcpy (template, tmpdir); + +#ifdef HAVE_DOS_PATHS + if (strchr ("/\\", template[strlen (template) - 1]) == NULL) + strcat (template, "/"); +#else +# ifndef VMS + if (template[strlen (template) - 1] != '/') + strcat (template, "/"); +# endif /* !VMS */ +#endif /* !HAVE_DOS_PATHS */ + + strcat (template, DEFAULT_TMPFILE); + outfile = open_tmpfile (&stdin_nm, template); + if (outfile == 0) + pfatal_with_name (_("fopen (temporary file)")); + while (!feof (stdin)) + { + char buf[2048]; + unsigned int n = fread (buf, 1, sizeof (buf), stdin); + if (n > 0 && fwrite (buf, 1, n, outfile) != n) + pfatal_with_name (_("fwrite (temporary file)")); + } + (void) fclose (outfile); + + /* Replace the name that read_all_makefiles will + see with the name of the temporary file. */ + makefiles->list[i] = xstrdup (stdin_nm); + + /* Make sure the temporary file will not be remade. */ + f = enter_file (stdin_nm); + f->updated = 1; + f->update_status = 0; + f->command_state = cs_finished; + /* Can't be intermediate, or it'll be removed too early for + make re-exec. */ + f->intermediate = 0; + f->dontcare = 0; + } + } + +#ifndef __EMX__ /* Don't use a SIGCHLD handler for OS/2 */ +#if defined(MAKE_JOBSERVER) || !defined(HAVE_WAIT_NOHANG) + /* Set up to handle children dying. This must be done before + reading in the makefiles so that `shell' function calls will work. + + If we don't have a hanging wait we have to fall back to old, broken + functionality here and rely on the signal handler and counting + children. + + If we're using the jobs pipe we need a signal handler so that + SIGCHLD is not ignored; we need it to interrupt the read(2) of the + jobserver pipe in job.c if we're waiting for a token. + + If none of these are true, we don't need a signal handler at all. */ + { + extern RETSIGTYPE child_handler PARAMS ((int sig)); +# if defined SIGCHLD + bsd_signal (SIGCHLD, child_handler); +# endif +# if defined SIGCLD && SIGCLD != SIGCHLD + bsd_signal (SIGCLD, child_handler); +# endif + } +#endif +#endif + + /* Let the user send us SIGUSR1 to toggle the -d flag during the run. */ +#ifdef SIGUSR1 + bsd_signal (SIGUSR1, debug_signal_handler); +#endif + + /* Define the initial list of suffixes for old-style rules. */ + + set_default_suffixes (); + + /* Define the file rules for the built-in suffix rules. These will later + be converted into pattern rules. We used to do this in + install_default_implicit_rules, but since that happens after reading + makefiles, it results in the built-in pattern rules taking precedence + over makefile-specified suffix rules, which is wrong. */ + + install_default_suffix_rules (); + + /* Define some internal and special variables. */ + + define_automatic_variables (); + + /* Set up the MAKEFLAGS and MFLAGS variables + so makefiles can look at them. */ + + define_makeflags (0, 0); + + /* Define the default variables. */ + define_default_variables (); + + /* Read all the makefiles. */ + + default_file = enter_file (".DEFAULT"); + + read_makefiles + = read_all_makefiles (makefiles == 0 ? (char **) 0 : makefiles->list); + +#ifdef WINDOWS32 + /* look one last time after reading all Makefiles */ + if (no_default_sh_exe) + no_default_sh_exe = !find_and_set_default_shell(NULL); + + if (no_default_sh_exe && job_slots != 1) { + error (NILF, _("Do not specify -j or --jobs if sh.exe is not available.")); + error (NILF, _("Resetting make for single job mode.")); + job_slots = 1; + } +#endif /* WINDOWS32 */ + +#if defined (__MSDOS__) || defined (__EMX__) + /* We need to know what kind of shell we will be using. */ + { + extern int _is_unixy_shell (const char *_path); + struct variable *shv = lookup_variable ("SHELL", 5); + extern int unixy_shell; + extern char *default_shell; + + if (shv && *shv->value) + { + char *shell_path = recursively_expand(shv); + + if (shell_path && _is_unixy_shell (shell_path)) + unixy_shell = 1; + else + unixy_shell = 0; + if (shell_path) + default_shell = shell_path; + } + } +#endif /* __MSDOS__ || __EMX__ */ + + /* Decode switches again, in case the variables were set by the makefile. */ + decode_env_switches ("MAKEFLAGS", 9); +#if 0 + decode_env_switches ("MFLAGS", 6); +#endif + +#if defined (__MSDOS__) || defined (__EMX__) + if (job_slots != 1 +# ifdef __EMX__ + && _osmode != OS2_MODE /* turn off -j if we are in DOS mode */ +# endif + ) + { + error (NILF, + _("Parallel jobs (-j) are not supported on this platform.")); + error (NILF, _("Resetting to single job (-j1) mode.")); + job_slots = 1; + } +#endif + +#ifdef MAKE_JOBSERVER + /* If the jobserver-fds option is seen, make sure that -j is reasonable. */ + + if (jobserver_fds) + { + char *cp; + + for (i=1; i < jobserver_fds->idx; ++i) + if (!streq (jobserver_fds->list[0], jobserver_fds->list[i])) + fatal (NILF, _("internal error: multiple --jobserver-fds options")); + + /* Now parse the fds string and make sure it has the proper format. */ + + cp = jobserver_fds->list[0]; + + if (sscanf (cp, "%d,%d", &job_fds[0], &job_fds[1]) != 2) + fatal (NILF, + _("internal error: invalid --jobserver-fds string `%s'"), cp); + + /* The combination of a pipe + !job_slots means we're using the + jobserver. If !job_slots and we don't have a pipe, we can start + infinite jobs. If we see both a pipe and job_slots >0 that means the + user set -j explicitly. This is broken; in this case obey the user + (ignore the jobserver pipe for this make) but print a message. */ + + if (job_slots > 0) + error (NILF, + _("warning: -jN forced in submake: disabling jobserver mode.")); + + /* Create a duplicate pipe, that will be closed in the SIGCHLD + handler. If this fails with EBADF, the parent has closed the pipe + on us because it didn't think we were a submake. If so, print a + warning then default to -j1. */ + + else if ((job_rfd = dup (job_fds[0])) < 0) + { + if (errno != EBADF) + pfatal_with_name (_("dup jobserver")); + + error (NILF, + _("warning: jobserver unavailable: using -j1. Add `+' to parent make rule.")); + job_slots = 1; + } + + if (job_slots > 0) + { + close (job_fds[0]); + close (job_fds[1]); + job_fds[0] = job_fds[1] = -1; + free (jobserver_fds->list); + free (jobserver_fds); + jobserver_fds = 0; + } + } + + /* If we have >1 slot but no jobserver-fds, then we're a top-level make. + Set up the pipe and install the fds option for our children. */ + + if (job_slots > 1) + { + char c = '+'; + + if (pipe (job_fds) < 0 || (job_rfd = dup (job_fds[0])) < 0) + pfatal_with_name (_("creating jobs pipe")); + + /* Every make assumes that it always has one job it can run. For the + submakes it's the token they were given by their parent. For the + top make, we just subtract one from the number the user wants. We + want job_slots to be 0 to indicate we're using the jobserver. */ + + while (--job_slots) + { + int r; + + EINTRLOOP (r, write (job_fds[1], &c, 1)); + if (r != 1) + pfatal_with_name (_("init jobserver pipe")); + } + + /* Fill in the jobserver_fds struct for our children. */ + + jobserver_fds = (struct stringlist *) + xmalloc (sizeof (struct stringlist)); + jobserver_fds->list = (char **) xmalloc (sizeof (char *)); + jobserver_fds->list[0] = xmalloc ((sizeof ("1024")*2)+1); + + sprintf (jobserver_fds->list[0], "%d,%d", job_fds[0], job_fds[1]); + jobserver_fds->idx = 1; + jobserver_fds->max = 1; + } +#endif + + /* Set up MAKEFLAGS and MFLAGS again, so they will be right. */ + + define_makeflags (1, 0); + + /* Make each `struct dep' point at the `struct file' for the file + depended on. Also do magic for special targets. */ + + snap_deps (); + + /* Convert old-style suffix rules to pattern rules. It is important to + do this before installing the built-in pattern rules below, so that + makefile-specified suffix rules take precedence over built-in pattern + rules. */ + + convert_to_pattern (); + + /* Install the default implicit pattern rules. + This used to be done before reading the makefiles. + But in that case, built-in pattern rules were in the chain + before user-defined ones, so they matched first. */ + + install_default_implicit_rules (); + + /* Compute implicit rule limits. */ + + count_implicit_rule_limits (); + + /* Construct the listings of directories in VPATH lists. */ + + build_vpath_lists (); + + /* Mark files given with -o flags as very old + and as having been updated already, and files given with -W flags as + brand new (time-stamp as far as possible into the future). */ + + if (old_files != 0) + for (p = old_files->list; *p != 0; ++p) + { + f = enter_command_line_file (*p); + f->last_mtime = f->mtime_before_update = OLD_MTIME; + f->updated = 1; + f->update_status = 0; + f->command_state = cs_finished; + } + + if (new_files != 0) + { + for (p = new_files->list; *p != 0; ++p) + { + f = enter_command_line_file (*p); + f->last_mtime = f->mtime_before_update = NEW_MTIME; + } + } + + /* Initialize the remote job module. */ + remote_setup (); + + if (read_makefiles != 0) + { + /* Update any makefiles if necessary. */ + + FILE_TIMESTAMP *makefile_mtimes = 0; + unsigned int mm_idx = 0; + char **nargv = argv; + int nargc = argc; + int orig_db_level = db_level; + + if (! ISDB (DB_MAKEFILES)) + db_level = DB_NONE; + + DB (DB_BASIC, (_("Updating makefiles....\n"))); + + /* Remove any makefiles we don't want to try to update. + Also record the current modtimes so we can compare them later. */ + { + register struct dep *d, *last; + last = 0; + d = read_makefiles; + while (d != 0) + { + register struct file *f = d->file; + if (f->double_colon) + for (f = f->double_colon; f != NULL; f = f->prev) + { + if (f->deps == 0 && f->cmds != 0) + { + /* This makefile is a :: target with commands, but + no dependencies. So, it will always be remade. + This might well cause an infinite loop, so don't + try to remake it. (This will only happen if + your makefiles are written exceptionally + stupidly; but if you work for Athena, that's how + you write your makefiles.) */ + + DB (DB_VERBOSE, + (_("Makefile `%s' might loop; not remaking it.\n"), + f->name)); + + if (last == 0) + read_makefiles = d->next; + else + last->next = d->next; + + /* Free the storage. */ + free ((char *) d); + + d = last == 0 ? read_makefiles : last->next; + + break; + } + } + if (f == NULL || !f->double_colon) + { + makefile_mtimes = (FILE_TIMESTAMP *) + xrealloc ((char *) makefile_mtimes, + (mm_idx + 1) * sizeof (FILE_TIMESTAMP)); + makefile_mtimes[mm_idx++] = file_mtime_no_search (d->file); + last = d; + d = d->next; + } + } + } + + /* Set up `MAKEFLAGS' specially while remaking makefiles. */ + define_makeflags (1, 1); + + switch (update_goal_chain (read_makefiles, 1)) + { + case 1: + /* The only way this can happen is if the user specified -q and asked + * for one of the makefiles to be remade as a target on the command + * line. Since we're not actually updating anything with -q we can + * treat this as "did nothing". + */ + + case -1: + /* Did nothing. */ + break; + + case 2: + /* Failed to update. Figure out if we care. */ + { + /* Nonzero if any makefile was successfully remade. */ + int any_remade = 0; + /* Nonzero if any makefile we care about failed + in updating or could not be found at all. */ + int any_failed = 0; + register unsigned int i; + struct dep *d; + + for (i = 0, d = read_makefiles; d != 0; ++i, d = d->next) + { + /* Reset the considered flag; we may need to look at the file + again to print an error. */ + d->file->considered = 0; + + if (d->file->updated) + { + /* This makefile was updated. */ + if (d->file->update_status == 0) + { + /* It was successfully updated. */ + any_remade |= (file_mtime_no_search (d->file) + != makefile_mtimes[i]); + } + else if (! (d->changed & RM_DONTCARE)) + { + FILE_TIMESTAMP mtime; + /* The update failed and this makefile was not + from the MAKEFILES variable, so we care. */ + error (NILF, _("Failed to remake makefile `%s'."), + d->file->name); + mtime = file_mtime_no_search (d->file); + any_remade |= (mtime != NONEXISTENT_MTIME + && mtime != makefile_mtimes[i]); + } + } + else + /* This makefile was not found at all. */ + if (! (d->changed & RM_DONTCARE)) + { + /* This is a makefile we care about. See how much. */ + if (d->changed & RM_INCLUDED) + /* An included makefile. We don't need + to die, but we do want to complain. */ + error (NILF, + _("Included makefile `%s' was not found."), + dep_name (d)); + else + { + /* A normal makefile. We must die later. */ + error (NILF, _("Makefile `%s' was not found"), + dep_name (d)); + any_failed = 1; + } + } + } + /* Reset this to empty so we get the right error message below. */ + read_makefiles = 0; + + if (any_remade) + goto re_exec; + if (any_failed) + die (2); + break; + } + + case 0: + re_exec: + /* Updated successfully. Re-exec ourselves. */ + + remove_intermediates (0); + + if (print_data_base_flag) + print_data_base (); + + log_working_directory (0); + + if (makefiles != 0) + { + /* These names might have changed. */ + register unsigned int i, j = 0; + for (i = 1; i < argc; ++i) + if (strneq (argv[i], "-f", 2)) /* XXX */ + { + char *p = &argv[i][2]; + if (*p == '\0') + argv[++i] = makefiles->list[j]; + else + argv[i] = concat ("-f", makefiles->list[j], ""); + ++j; + } + } + + /* Add -o option for the stdin temporary file, if necessary. */ + if (stdin_nm) + { + nargv = (char **) xmalloc ((nargc + 2) * sizeof (char *)); + bcopy ((char *) argv, (char *) nargv, argc * sizeof (char *)); + nargv[nargc++] = concat ("-o", stdin_nm, ""); + nargv[nargc] = 0; + } + + if (directories != 0 && directories->idx > 0) + { + char bad; + if (directory_before_chdir != 0) + { + if (chdir (directory_before_chdir) < 0) + { + perror_with_name ("chdir", ""); + bad = 1; + } + else + bad = 0; + } + else + bad = 1; + if (bad) + fatal (NILF, _("Couldn't change back to original directory.")); + } + +#ifndef _AMIGA + for (p = environ; *p != 0; ++p) + if ((*p)[MAKELEVEL_LENGTH] == '=' + && strneq (*p, MAKELEVEL_NAME, MAKELEVEL_LENGTH)) + { + /* The SGI compiler apparently can't understand + the concept of storing the result of a function + in something other than a local variable. */ + char *sgi_loses; + sgi_loses = (char *) alloca (40); + *p = sgi_loses; + sprintf (*p, "%s=%u", MAKELEVEL_NAME, makelevel); + break; + } +#else /* AMIGA */ + { + char buffer[256]; + int len; + + len = GetVar (MAKELEVEL_NAME, buffer, sizeof (buffer), GVF_GLOBAL_ONLY); + + if (len != -1) + { + sprintf (buffer, "%u", makelevel); + SetVar (MAKELEVEL_NAME, buffer, -1, GVF_GLOBAL_ONLY); + } + } +#endif + + if (ISDB (DB_BASIC)) + { + char **p; + fputs (_("Re-executing:"), stdout); + for (p = nargv; *p != 0; ++p) + printf (" %s", *p); + putchar ('\n'); + } + + fflush (stdout); + fflush (stderr); + + /* Close the dup'd jobserver pipe if we opened one. */ + if (job_rfd >= 0) + close (job_rfd); + +#ifdef _AMIGA + exec_command (nargv); + exit (0); +#elif defined (__EMX__) + { + /* It is not possible to use execve() here because this + would cause the parent process to be terminated with + exit code 0 before the child process has been terminated. + Therefore it may be the best solution simply to spawn the + child process including all file handles and to wait for its + termination. */ + int pid; + int status; + pid = child_execute_job(0, 1, nargv, environ); + + /* is this loop really necessary? */ + do { + pid = wait(&status); + } while(pid <= 0); + /* use the exit code of the child process */ + exit(WIFEXITED(status) ? WEXITSTATUS(status) : EXIT_FAILURE); + } +#else + exec_command (nargv, environ); +#endif + /* NOTREACHED */ + + default: +#define BOGUS_UPDATE_STATUS 0 + assert (BOGUS_UPDATE_STATUS); + break; + } + + db_level = orig_db_level; + } + + /* Set up `MAKEFLAGS' again for the normal targets. */ + define_makeflags (1, 0); + + /* If there is a temp file from reading a makefile from stdin, get rid of + it now. */ + if (stdin_nm && unlink (stdin_nm) < 0 && errno != ENOENT) + perror_with_name (_("unlink (temporary file): "), stdin_nm); + + { + int status; + + /* If there were no command-line goals, use the default. */ + if (goals == 0) + { + if (default_goal_file != 0) + { + goals = (struct dep *) xmalloc (sizeof (struct dep)); + goals->next = 0; + goals->name = 0; + goals->ignore_mtime = 0; + goals->file = default_goal_file; + } + } + else + lastgoal->next = 0; + + if (!goals) + { + if (read_makefiles == 0) + fatal (NILF, _("No targets specified and no makefile found")); + + fatal (NILF, _("No targets")); + } + + /* Update the goals. */ + + DB (DB_BASIC, (_("Updating goal targets....\n"))); + + switch (update_goal_chain (goals, 0)) + { + case -1: + /* Nothing happened. */ + case 0: + /* Updated successfully. */ + status = MAKE_SUCCESS; + break; + case 1: + /* We are under -q and would run some commands. */ + status = MAKE_TROUBLE; + break; + case 2: + /* Updating failed. POSIX.2 specifies exit status >1 for this; + but in VMS, there is only success and failure. */ + status = MAKE_FAILURE; + break; + default: + abort (); + } + + /* If we detected some clock skew, generate one last warning */ + if (clock_skew_detected) + error (NILF, + _("warning: Clock skew detected. Your build may be incomplete.")); + + /* Exit. */ + die (status); + } + + return 0; +} + +/* Parsing of arguments, decoding of switches. */ + +static char options[1 + sizeof (switches) / sizeof (switches[0]) * 3]; +static struct option long_options[(sizeof (switches) / sizeof (switches[0])) + + (sizeof (long_option_aliases) / + sizeof (long_option_aliases[0]))]; + +/* Fill in the string and vector for getopt. */ +static void +init_switches (void) +{ + register char *p; + register int c; + register unsigned int i; + + if (options[0] != '\0') + /* Already done. */ + return; + + p = options; + + /* Return switch and non-switch args in order, regardless of + POSIXLY_CORRECT. Non-switch args are returned as option 1. */ + *p++ = '-'; + + for (i = 0; switches[i].c != '\0'; ++i) + { + long_options[i].name = (switches[i].long_name == 0 ? "" : + switches[i].long_name); + long_options[i].flag = 0; + long_options[i].val = switches[i].c; + if (short_option (switches[i].c)) + *p++ = switches[i].c; + switch (switches[i].type) + { + case flag: + case flag_off: + case ignore: + long_options[i].has_arg = no_argument; + break; + + case string: + case positive_int: + case floating: + if (short_option (switches[i].c)) + *p++ = ':'; + if (switches[i].noarg_value != 0) + { + if (short_option (switches[i].c)) + *p++ = ':'; + long_options[i].has_arg = optional_argument; + } + else + long_options[i].has_arg = required_argument; + break; + } + } + *p = '\0'; + for (c = 0; c < (sizeof (long_option_aliases) / + sizeof (long_option_aliases[0])); + ++c) + long_options[i++] = long_option_aliases[c]; + long_options[i].name = 0; +} + +static void +handle_non_switch_argument (char *arg, int env) +{ + /* Non-option argument. It might be a variable definition. */ + struct variable *v; + if (arg[0] == '-' && arg[1] == '\0') + /* Ignore plain `-' for compatibility. */ + return; + v = try_variable_definition (0, arg, o_command, 0); + if (v != 0) + { + /* It is indeed a variable definition. Record a pointer to + the variable for later use in define_makeflags. */ + struct command_variable *cv + = (struct command_variable *) xmalloc (sizeof (*cv)); + cv->variable = v; + cv->next = command_variables; + command_variables = cv; + } + else if (! env) + { + /* Not an option or variable definition; it must be a goal + target! Enter it as a file and add it to the dep chain of + goals. */ + struct file *f = enter_command_line_file (arg); + f->cmd_target = 1; + + if (goals == 0) + { + goals = (struct dep *) xmalloc (sizeof (struct dep)); + lastgoal = goals; + } + else + { + lastgoal->next = (struct dep *) xmalloc (sizeof (struct dep)); + lastgoal = lastgoal->next; + } + lastgoal->name = 0; + lastgoal->file = f; + lastgoal->ignore_mtime = 0; + + { + /* Add this target name to the MAKECMDGOALS variable. */ + struct variable *v; + char *value; + + v = lookup_variable ("MAKECMDGOALS", 12); + if (v == 0) + value = f->name; + else + { + /* Paste the old and new values together */ + unsigned int oldlen, newlen; + + oldlen = strlen (v->value); + newlen = strlen (f->name); + value = (char *) alloca (oldlen + 1 + newlen + 1); + bcopy (v->value, value, oldlen); + value[oldlen] = ' '; + bcopy (f->name, &value[oldlen + 1], newlen + 1); + } + define_variable ("MAKECMDGOALS", 12, value, o_default, 0); + } + } +} + +/* Print a nice usage method. */ + +static void +print_usage (int bad) +{ + extern char *make_host; + const char *const *cpp; + FILE *usageto; + + if (print_version_flag) + print_version (); + + usageto = bad ? stderr : stdout; + + fprintf (usageto, _("Usage: %s [options] [target] ...\n"), program); + + for (cpp = usage; *cpp; ++cpp) + fputs (_(*cpp), usageto); + + if (!remote_description || *remote_description == '\0') + fprintf (usageto, _("\nThis program built for %s\n"), make_host); + else + fprintf (usageto, _("\nThis program built for %s (%s)\n"), + make_host, remote_description); + + fprintf (usageto, _("Report bugs to \n")); +} + +/* Decode switches from ARGC and ARGV. + They came from the environment if ENV is nonzero. */ + +static void +decode_switches (int argc, char **argv, int env) +{ + int bad = 0; + register const struct command_switch *cs; + register struct stringlist *sl; + register int c; + + /* getopt does most of the parsing for us. + First, get its vectors set up. */ + + init_switches (); + + /* Let getopt produce error messages for the command line, + but not for options from the environment. */ + opterr = !env; + /* Reset getopt's state. */ + optind = 0; + + while (optind < argc) + { + /* Parse the next argument. */ + c = getopt_long (argc, argv, options, long_options, (int *) 0); + if (c == EOF) + /* End of arguments, or "--" marker seen. */ + break; + else if (c == 1) + /* An argument not starting with a dash. */ + handle_non_switch_argument (optarg, env); + else if (c == '?') + /* Bad option. We will print a usage message and die later. + But continue to parse the other options so the user can + see all he did wrong. */ + bad = 1; + else + for (cs = switches; cs->c != '\0'; ++cs) + if (cs->c == c) + { + /* Whether or not we will actually do anything with + this switch. We test this individually inside the + switch below rather than just once outside it, so that + options which are to be ignored still consume args. */ + int doit = !env || cs->env; + + switch (cs->type) + { + default: + abort (); + + case ignore: + break; + + case flag: + case flag_off: + if (doit) + *(int *) cs->value_ptr = cs->type == flag; + break; + + case string: + if (!doit) + break; + + if (optarg == 0) + optarg = cs->noarg_value; + + sl = *(struct stringlist **) cs->value_ptr; + if (sl == 0) + { + sl = (struct stringlist *) + xmalloc (sizeof (struct stringlist)); + sl->max = 5; + sl->idx = 0; + sl->list = (char **) xmalloc (5 * sizeof (char *)); + *(struct stringlist **) cs->value_ptr = sl; + } + else if (sl->idx == sl->max - 1) + { + sl->max += 5; + sl->list = (char **) + xrealloc ((char *) sl->list, + sl->max * sizeof (char *)); + } + sl->list[sl->idx++] = optarg; + sl->list[sl->idx] = 0; + break; + + case positive_int: + /* See if we have an option argument; if we do require that + it's all digits, not something like "10foo". */ + if (optarg == 0 && argc > optind) + { + const char *cp; + for (cp=argv[optind]; ISDIGIT (cp[0]); ++cp) + ; + if (cp[0] == '\0') + optarg = argv[optind++]; + } + + if (!doit) + break; + + if (optarg != 0) + { + int i = atoi (optarg); + const char *cp; + + /* Yes, I realize we're repeating this in some cases. */ + for (cp = optarg; ISDIGIT (cp[0]); ++cp) + ; + + if (i < 1 || cp[0] != '\0') + { + error (NILF, _("the `-%c' option requires a positive integral argument"), + cs->c); + bad = 1; + } + else + *(unsigned int *) cs->value_ptr = i; + } + else + *(unsigned int *) cs->value_ptr + = *(unsigned int *) cs->noarg_value; + break; + +#ifndef NO_FLOAT + case floating: + if (optarg == 0 && optind < argc + && (ISDIGIT (argv[optind][0]) || argv[optind][0] == '.')) + optarg = argv[optind++]; + + if (doit) + *(double *) cs->value_ptr + = (optarg != 0 ? atof (optarg) + : *(double *) cs->noarg_value); + + break; +#endif + } + + /* We've found the switch. Stop looking. */ + break; + } + } + + /* There are no more options according to getting getopt, but there may + be some arguments left. Since we have asked for non-option arguments + to be returned in order, this only happens when there is a "--" + argument to prevent later arguments from being options. */ + while (optind < argc) + handle_non_switch_argument (argv[optind++], env); + + + if (!env && (bad || print_usage_flag)) + { + print_usage (bad); + die (bad ? 2 : 0); + } +} + +/* Decode switches from environment variable ENVAR (which is LEN chars long). + We do this by chopping the value into a vector of words, prepending a + dash to the first word if it lacks one, and passing the vector to + decode_switches. */ + +static void +decode_env_switches (char *envar, unsigned int len) +{ + char *varref = (char *) alloca (2 + len + 2); + char *value, *p; + int argc; + char **argv; + + /* Get the variable's value. */ + varref[0] = '$'; + varref[1] = '('; + bcopy (envar, &varref[2], len); + varref[2 + len] = ')'; + varref[2 + len + 1] = '\0'; + value = variable_expand (varref); + + /* Skip whitespace, and check for an empty value. */ + value = next_token (value); + len = strlen (value); + if (len == 0) + return; + + /* Allocate a vector that is definitely big enough. */ + argv = (char **) alloca ((1 + len + 1) * sizeof (char *)); + + /* Allocate a buffer to copy the value into while we split it into words + and unquote it. We must use permanent storage for this because + decode_switches may store pointers into the passed argument words. */ + p = (char *) xmalloc (2 * len); + + /* getopt will look at the arguments starting at ARGV[1]. + Prepend a spacer word. */ + argv[0] = 0; + argc = 1; + argv[argc] = p; + while (*value != '\0') + { + if (*value == '\\' && value[1] != '\0') + ++value; /* Skip the backslash. */ + else if (isblank ((unsigned char)*value)) + { + /* End of the word. */ + *p++ = '\0'; + argv[++argc] = p; + do + ++value; + while (isblank ((unsigned char)*value)); + continue; + } + *p++ = *value++; + } + *p = '\0'; + argv[++argc] = 0; + + if (argv[1][0] != '-' && strchr (argv[1], '=') == 0) + /* The first word doesn't start with a dash and isn't a variable + definition. Add a dash and pass it along to decode_switches. We + need permanent storage for this in case decode_switches saves + pointers into the value. */ + argv[1] = concat ("-", argv[1], ""); + + /* Parse those words. */ + decode_switches (argc, argv, 1); +} + +/* Quote the string IN so that it will be interpreted as a single word with + no magic by decode_env_switches; also double dollar signs to avoid + variable expansion in make itself. Write the result into OUT, returning + the address of the next character to be written. + Allocating space for OUT twice the length of IN is always sufficient. */ + +static char * +quote_for_env (char *out, char *in) +{ + while (*in != '\0') + { + if (*in == '$') + *out++ = '$'; + else if (isblank ((unsigned char)*in) || *in == '\\') + *out++ = '\\'; + *out++ = *in++; + } + + return out; +} + +/* Define the MAKEFLAGS and MFLAGS variables to reflect the settings of the + command switches. Include options with args if ALL is nonzero. + Don't include options with the `no_makefile' flag set if MAKEFILE. */ + +static void +define_makeflags (int all, int makefile) +{ + static const char ref[] = "$(MAKEOVERRIDES)"; + static const char posixref[] = "$(-*-command-variables-*-)"; + register const struct command_switch *cs; + char *flagstring; + register char *p; + unsigned int words; + struct variable *v; + + /* We will construct a linked list of `struct flag's describing + all the flags which need to go in MAKEFLAGS. Then, once we + know how many there are and their lengths, we can put them all + together in a string. */ + + struct flag + { + struct flag *next; + const struct command_switch *cs; + char *arg; + }; + struct flag *flags = 0; + unsigned int flagslen = 0; +#define ADD_FLAG(ARG, LEN) \ + do { \ + struct flag *new = (struct flag *) alloca (sizeof (struct flag)); \ + new->cs = cs; \ + new->arg = (ARG); \ + new->next = flags; \ + flags = new; \ + if (new->arg == 0) \ + ++flagslen; /* Just a single flag letter. */ \ + else \ + flagslen += 1 + 1 + 1 + 1 + 3 * (LEN); /* " -x foo" */ \ + if (!short_option (cs->c)) \ + /* This switch has no single-letter version, so we use the long. */ \ + flagslen += 2 + strlen (cs->long_name); \ + } while (0) + + for (cs = switches; cs->c != '\0'; ++cs) + if (cs->toenv && (!makefile || !cs->no_makefile)) + switch (cs->type) + { + default: + abort (); + + case ignore: + break; + + case flag: + case flag_off: + if (!*(int *) cs->value_ptr == (cs->type == flag_off) + && (cs->default_value == 0 + || *(int *) cs->value_ptr != *(int *) cs->default_value)) + ADD_FLAG (0, 0); + break; + + case positive_int: + if (all) + { + if ((cs->default_value != 0 + && (*(unsigned int *) cs->value_ptr + == *(unsigned int *) cs->default_value))) + break; + else if (cs->noarg_value != 0 + && (*(unsigned int *) cs->value_ptr == + *(unsigned int *) cs->noarg_value)) + ADD_FLAG ("", 0); /* Optional value omitted; see below. */ + else if (cs->c == 'j') + /* Special case for `-j'. */ + ADD_FLAG ("1", 1); + else + { + char *buf = (char *) alloca (30); + sprintf (buf, "%u", *(unsigned int *) cs->value_ptr); + ADD_FLAG (buf, strlen (buf)); + } + } + break; + +#ifndef NO_FLOAT + case floating: + if (all) + { + if (cs->default_value != 0 + && (*(double *) cs->value_ptr + == *(double *) cs->default_value)) + break; + else if (cs->noarg_value != 0 + && (*(double *) cs->value_ptr + == *(double *) cs->noarg_value)) + ADD_FLAG ("", 0); /* Optional value omitted; see below. */ + else + { + char *buf = (char *) alloca (100); + sprintf (buf, "%g", *(double *) cs->value_ptr); + ADD_FLAG (buf, strlen (buf)); + } + } + break; +#endif + + case string: + if (all) + { + struct stringlist *sl = *(struct stringlist **) cs->value_ptr; + if (sl != 0) + { + /* Add the elements in reverse order, because + all the flags get reversed below; and the order + matters for some switches (like -I). */ + register unsigned int i = sl->idx; + while (i-- > 0) + ADD_FLAG (sl->list[i], strlen (sl->list[i])); + } + } + break; + } + + flagslen += 4 + sizeof posixref; /* Four more for the possible " -- ". */ + +#undef ADD_FLAG + + /* Construct the value in FLAGSTRING. + We allocate enough space for a preceding dash and trailing null. */ + flagstring = (char *) alloca (1 + flagslen + 1); + bzero (flagstring, 1 + flagslen + 1); + p = flagstring; + words = 1; + *p++ = '-'; + while (flags != 0) + { + /* Add the flag letter or name to the string. */ + if (short_option (flags->cs->c)) + *p++ = flags->cs->c; + else + { + if (*p != '-') + { + *p++ = ' '; + *p++ = '-'; + } + *p++ = '-'; + strcpy (p, flags->cs->long_name); + p += strlen (p); + } + if (flags->arg != 0) + { + /* A flag that takes an optional argument which in this case is + omitted is specified by ARG being "". We must distinguish + because a following flag appended without an intervening " -" + is considered the arg for the first. */ + if (flags->arg[0] != '\0') + { + /* Add its argument too. */ + *p++ = !short_option (flags->cs->c) ? '=' : ' '; + p = quote_for_env (p, flags->arg); + } + ++words; + /* Write a following space and dash, for the next flag. */ + *p++ = ' '; + *p++ = '-'; + } + else if (!short_option (flags->cs->c)) + { + ++words; + /* Long options must each go in their own word, + so we write the following space and dash. */ + *p++ = ' '; + *p++ = '-'; + } + flags = flags->next; + } + + /* Define MFLAGS before appending variable definitions. */ + + if (p == &flagstring[1]) + /* No flags. */ + flagstring[0] = '\0'; + else if (p[-1] == '-') + { + /* Kill the final space and dash. */ + p -= 2; + *p = '\0'; + } + else + /* Terminate the string. */ + *p = '\0'; + + /* Since MFLAGS is not parsed for flags, there is no reason to + override any makefile redefinition. */ + (void) define_variable ("MFLAGS", 6, flagstring, o_env, 1); + + if (all && command_variables != 0) + { + /* Now write a reference to $(MAKEOVERRIDES), which contains all the + command-line variable definitions. */ + + if (p == &flagstring[1]) + /* No flags written, so elide the leading dash already written. */ + p = flagstring; + else + { + /* Separate the variables from the switches with a "--" arg. */ + if (p[-1] != '-') + { + /* We did not already write a trailing " -". */ + *p++ = ' '; + *p++ = '-'; + } + /* There is a trailing " -"; fill it out to " -- ". */ + *p++ = '-'; + *p++ = ' '; + } + + /* Copy in the string. */ + if (posix_pedantic) + { + bcopy (posixref, p, sizeof posixref - 1); + p += sizeof posixref - 1; + } + else + { + bcopy (ref, p, sizeof ref - 1); + p += sizeof ref - 1; + } + } + else if (p == &flagstring[1]) + { + words = 0; + --p; + } + else if (p[-1] == '-') + /* Kill the final space and dash. */ + p -= 2; + /* Terminate the string. */ + *p = '\0'; + + v = define_variable ("MAKEFLAGS", 9, + /* If there are switches, omit the leading dash + unless it is a single long option with two + leading dashes. */ + &flagstring[(flagstring[0] == '-' + && flagstring[1] != '-') + ? 1 : 0], + /* This used to use o_env, but that lost when a + makefile defined MAKEFLAGS. Makefiles set + MAKEFLAGS to add switches, but we still want + to redefine its value with the full set of + switches. Of course, an override or command + definition will still take precedence. */ + o_file, 1); + if (! all) + /* The first time we are called, set MAKEFLAGS to always be exported. + We should not do this again on the second call, because that is + after reading makefiles which might have done `unexport MAKEFLAGS'. */ + v->export = v_export; +} + +/* Print version information. */ + +static void +print_version (void) +{ + static int printed_version = 0; + + char *precede = print_data_base_flag ? "# " : ""; + + if (printed_version) + /* Do it only once. */ + return; + + /* Print this untranslated. The coding standards recommend translating the + (C) to the copyright symbol, but this string is going to change every + year, and none of the rest of it should be translated (including the + word "Copyright", so it hardly seems worth it. */ + + printf ("%sGNU Make %s\n\ +%sCopyright (C) 2002 Free Software Foundation, Inc.\n", + precede, version_string, precede); + + printf (_("%sThis is free software; see the source for copying conditions.\n\ +%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\ +%sPARTICULAR PURPOSE.\n"), + precede, precede, precede); + + printed_version = 1; + + /* Flush stdout so the user doesn't have to wait to see the + version information while things are thought about. */ + fflush (stdout); +} + +/* Print a bunch of information about this and that. */ + +static void +print_data_base (void) +{ + time_t when; + + when = time ((time_t *) 0); + printf (_("\n# Make data base, printed on %s"), ctime (&when)); + + print_variable_data_base (); + print_dir_data_base (); + print_rule_data_base (); + print_file_data_base (); + print_vpath_data_base (); + + when = time ((time_t *) 0); + printf (_("\n# Finished Make data base on %s\n"), ctime (&when)); +} + +/* Exit with STATUS, cleaning up as necessary. */ + +void +die (int status) +{ + static char dying = 0; + + if (!dying) + { + int err; + + dying = 1; + + if (print_version_flag) + print_version (); + + /* Wait for children to die. */ + for (err = (status != 0); job_slots_used > 0; err = 0) + reap_children (1, err); + + /* Let the remote job module clean up its state. */ + remote_cleanup (); + + /* Remove the intermediate files. */ + remove_intermediates (0); + + if (print_data_base_flag) + print_data_base (); + + /* Try to move back to the original directory. This is essential on + MS-DOS (where there is really only one process), and on Unix it + puts core files in the original directory instead of the -C + directory. Must wait until after remove_intermediates(), or unlinks + of relative pathnames fail. */ + if (directory_before_chdir != 0) + chdir (directory_before_chdir); + + log_working_directory (0); + } + + exit (status); +} + +/* Write a message indicating that we've just entered or + left (according to ENTERING) the current directory. */ + +void +log_working_directory (int entering) +{ + static int entered = 0; + + /* Print nothing without the flag. Don't print the entering message + again if we already have. Don't print the leaving message if we + haven't printed the entering message. */ + if (! print_directory_flag || entering == entered) + return; + + entered = entering; + + if (print_data_base_flag) + fputs ("# ", stdout); + + /* Use entire sentences to give the translators a fighting chance. */ + + if (makelevel == 0) + if (starting_directory == 0) + if (entering) + printf (_("%s: Entering an unknown directory"), program); + else + printf (_("%s: Leaving an unknown directory"), program); + else + if (entering) + printf (_("%s: Entering directory `%s'\n"), + program, starting_directory); + else + printf (_("%s: Leaving directory `%s'\n"), + program, starting_directory); + else + if (starting_directory == 0) + if (entering) + printf (_("%s[%u]: Entering an unknown directory"), + program, makelevel); + else + printf (_("%s[%u]: Leaving an unknown directory"), + program, makelevel); + else + if (entering) + printf (_("%s[%u]: Entering directory `%s'\n"), + program, makelevel, starting_directory); + else + printf (_("%s[%u]: Leaving directory `%s'\n"), + program, makelevel, starting_directory); +} diff --git a/src/mkutil/make/maintMakefile b/src/mkutil/make/maintMakefile new file mode 100644 index 00000000..1c934636 --- /dev/null +++ b/src/mkutil/make/maintMakefile @@ -0,0 +1,228 @@ +# Maintainer-only makefile segment. This contains things that are relevant +# only if you have the full copy of the GNU make sources from the CVS +# tree, not a dist copy. +# + +# Find the glob source files... this might be dangerous, but we're maintainers! +# +globsrc := $(wildcard glob/*.c) +globhdr := $(wildcard glob/*.h) + +TEMPLATES = README README.DOS README.W32 README.OS2 \ + config.ami configh.dos config.h.W32 config.h-vms +MTEMPLATES = Makefile.DOS SMakefile + +all-am: $(TEMPLATES) $(MTEMPLATES) build.sh.in + +# We need this to ensure that README and build.sh.in are created on time to +# avoid errors by automake. +# +#Makefile.in: README build.sh.in + +# General rule for turning a .template into a regular file. +# +$(TEMPLATES) : % : %.template Makefile + rm -f $@ + sed -e 's@%VERSION%@$(VERSION)@g' \ + -e 's@%PACKAGE%@$(PACKAGE)@g' \ + $< > $@ + chmod a-w $@ + +# Construct Makefiles by adding on dependencies, etc. +# +$(MTEMPLATES) : % : %.template .dep_segment Makefile + rm -f $@ + sed -e 's@%VERSION%@$(VERSION)@g' \ + -e 's@%PROGRAMS%@$(bin_PROGRAMS)@g' \ + -e 's@%SOURCES%@$(filter-out remote-%,$(make_SOURCES)) remote-$$(REMOTE).c@g' \ + -e 's@%OBJECTS%@$(filter-out remote-%,$(make_OBJECTS)) remote-$$(REMOTE).o@g' \ + -e 's@%GLOB_SOURCES%@$(globsrc) $(globhdr)@g' \ + -e 's@%GLOB_OBJECTS%@$(globsrc:glob/%.c=%.o)@g' \ + $< > $@ + echo >>$@; echo '# --------------- DEPENDENCIES' >>$@; echo '#' >>$@; \ + cat $(word 2,$^) >>$@ + chmod a-w $@ + +NMakefile: NMakefile.template .dep_segment Makefile + rm -f $@ + cp $< $@ + echo >>$@; echo '# --------------- DEPENDENCIES' >>$@; echo '#' >>$@; \ + sed 's/^\([^ ]*\)\.o:/$$(OUTDIR)\/\1.obj:/' $(word 2,$^) >>$@ + chmod a-w $@ + +# Construct build.sh.in +# +build.sh.in: build.template Makefile + rm -f $@ + sed -e 's@%objs%@$(patsubst %.o,%.$${OBJEXT},$(filter-out remote-%,$(make_OBJECTS)))@g' \ + -e 's@%globobjs%@$(patsubst %.c,%.$${OBJEXT},$(globsrc)))@g' \ + $< > $@ + chmod a-w+x $@ + + +# Use automake to build a dependency list file, for "foreign" makefiles like +# Makefile.DOS. +# +# Automake used to have a --generate-deps flag, but it's gone now, so we have +# to do it ourselves. +# +.dep_segment: Makefile.am maintMakefile $(DEP_FILES) + cat $(DEP_FILES) \ + | sed -e '/^[^:]*\.[ch] *:/d' \ + -e 's, /usr/[^ ]*,,g' \ + -e 's, $(srcdir)/, ,g' \ + -e '/^ \\$$/d' \ + > $@ + +# Get rid of everything "else". +# +maintFILES = configure aclocal.m4 config.h.in Makefile.in stamp-h.in + +CVS-CLEAN-FILES += $(maintFILES) $(TEMPLATES) $(MTEMPLATES) NMakefile \ + missing build.sh.in .dep_segment po-check-? + +# This rule tries to clean the tree right down to how it looks when you do a +# virgin CVS checkout. + +.PHONY: cvs-clean +cvs-clean: maintainer-clean + -rm -f *~ + -rm -f config/*~ config/Makefile.in config/[a-z]* + -rm -f po/*~ po/Makefile.in.in po/Rules-quot po/[a-z]* + -rm -f doc/*~ doc/Makefile.in doc/fdl.texi doc/make-stds.texi \ + doc/texinfo.tex + -rm -f glob/*~ glob/Makefile.in + -rm -f ABOUT-NLS $(CVS-CLEAN-FILES) + + +# ---------------------------------------------------------------------- +# +# The sections below were stolen from the Makefile.maint used by fileutils, +# sh-utils, textutils, CPPI, Bison, and Autoconf. + + +## ---------------- ## +## Updating files. ## +## ---------------- ## + +WGET = wget --passive-ftp --non-verbose +ftp-gnu = ftp://ftp.gnu.org/gnu + +move_if_change = if test -r $(target) && cmp -s $(target).t $(target); then \ + echo $(target) is unchanged; rm -f $(target).t; \ + else \ + mv $(target).t $(target); \ + fi + +# ------------------- # +# Updating PO files. # +# ------------------- # + +po_repo = http://www.iro.umontreal.ca/contrib/po/maint/$(PACKAGE) +.PHONY: do-po-update po-update +do-po-update: + tmppo=/tmp/$(PACKAGE)-$(VERSION)-po &&\ + rm -rf $$tmppo && \ + mkdir $$tmppo && \ + (cd $$tmppo && $(WGET) -r -l1 -nd --no-parent -A '*.po' $(po_repo)) &&\ + cp $$tmppo/*.po po + cd po && $(MAKE) update-po + $(MAKE) po-check + +po-update: + if test -d "po"; then \ + $(MAKE) do-po-update; \ + fi + +# -------------------------- # +# Updating GNU build tools. # +# -------------------------- # + +# The following pseudo table associates a local directory and a URL +# with each of the files that belongs to some other package and is +# regularly updated from the specified URL. +# $(srcdir)/src/ansi2knr.c + + +wget_files ?= $(srcdir)/config/config.guess $(srcdir)/config/config.sub \ + $(srcdir)/doc/texinfo.tex $(srcdir)/doc/make-stds.texi \ + $(srcdir)/doc/fdl.texi + +wget-targets = $(patsubst %, get-%, $(wget_files)) + +config.guess-url_prefix = $(ftp-gnu)/config/ +config.sub-url_prefix = $(ftp-gnu)/config/ + +ansi2knr.c-url_prefix = ftp://ftp.cs.wisc.edu/ghost/ + +texinfo.tex-url_prefix = $(ftp-gnu)/texinfo/ + +standards.texi-url_prefix = $(ftp-gnu)/GNUinfo/ +make-stds.texi-url_prefix = $(ftp-gnu)/GNUinfo/ +fdl.texi-url_prefix = $(ftp-gnu)/GNUinfo/ + +target = $(patsubst get-%,%,$@) +url = $($(notdir $(target))-url_prefix)$(notdir $(target)) + +.PHONY: $(wget-targets) +$(wget-targets): + @echo $(WGET) $(url) -O $(target) \ + && $(WGET) $(url) -O $(target).t \ + && $(move_if_change) + +.PHONY: wget-update +wget-update: $(wget-targets) + + +# Updating tools via CVS. +cvs_files ?= depcomp missing +cvs-targets = $(patsubst %, get-%, $(cvs_files)) + +automake_repo = :pserver:anoncvs@anoncvs.cygnus.com:/cvs/automake +.PHONY: $(cvs-targets) +$(cvs-targets): + $(CVS) -d $(automake_repo) co -p automake/lib/$(notdir $(target)) \ + >$(target).t \ + && $(move_if_change) + +.PHONY: cvs-update +cvs-update: $(cvs-targets) + + +# --------------------- # +# Updating everything. # +# --------------------- # + +.PHONY: update +update: wget-update po-update + +# cvs-update + + +## --------------- ## +## Sanity checks. ## +## --------------- ## + +# Checks that don't require cvs. Run `changelog-check' last as +# previous test may reveal problems requiring new ChangeLog entries. +local-check: po-check changelog-check + +# copyright-check writable-files + +changelog-check: + if head ChangeLog | grep 'Version $(VERSION)' >/dev/null; then \ + :; \ + else \ + echo "$(VERSION) not in ChangeLog" 1>&2; \ + exit 1; \ + fi + +# Verify that all source files using _() are listed in po/POTFILES.in. +# Ignore make.h; it defines _(). +po-check: + if test -f po/POTFILES.in; then \ + grep -E -v '^(#|$$)' po/POTFILES.in | sort > $@-1; \ + grep -E -l '\b_\(' *.c *.h | grep -v make.h | sort > $@-2; \ + diff -u $@-1 $@-2 || exit 1; \ + rm -f $@-1 $@-2; \ + fi diff --git a/src/mkutil/make/make.1 b/src/mkutil/make/make.1 new file mode 100644 index 00000000..5b096776 --- /dev/null +++ b/src/mkutil/make/make.1 @@ -0,0 +1,291 @@ +.TH MAKE 1L "22 August 1989" "GNU" "LOCAL USER COMMANDS" +.SH NAME +make \- GNU make utility to maintain groups of programs +.SH SYNOPSIS +.B "make " +[ +.B \-f +.I makefile +] [ option ] ... +target ... +.SH WARNING +This man page is an extract of the documentation of +.I GNU make . +It is updated only occasionally, because the GNU project does not use nroff. +For complete, current documentation, refer to the Info file +.B make.info +which is made from the Texinfo source file +.BR make.texinfo . +.SH DESCRIPTION +.LP +The purpose of the +.I make +utility is to determine automatically which +pieces of a large program need to be recompiled, and issue the commands to +recompile them. +The manual describes the GNU implementation of +.IR make , +which was written by Richard Stallman and Roland McGrath. +Our examples show C programs, since they are most common, but you can use +.I make +with any programming language whose compiler can be run with a +shell command. +In fact, +.I make +is not limited to programs. +You can use it to describe any task where some files must be +updated automatically from others whenever the others change. +.LP +To prepare to use +.IR make , +you must write a file called the +.I makefile +that describes the relationships among files in your program, and the +states the commands for updating each file. +In a program, typically the executable file is updated from object +files, which are in turn made by compiling source files. +.LP +Once a suitable makefile exists, each time you change some source files, +this simple shell command: +.sp 1 +.RS +.B make +.RE +.sp 1 +suffices to perform all necessary recompilations. +The +.I make +program uses the makefile data base and the last-modification times +of the files to decide which of the files need to be updated. +For each of those files, it issues the commands recorded in the data base. +.LP +.I make +executes commands in the +.I makefile +to update +one or more target +.IR names , +where +.I name +is typically a program. +If no +.B \-f +option is present, +.I make +will look for the makefiles +.IR GNUmakefile , +.IR makefile , +and +.IR Makefile , +in that order. +.LP +Normally you should call your makefile either +.I makefile +or +.IR Makefile . +(We recommend +.I Makefile +because it appears prominently near the beginning of a directory +listing, right near other important files such as +.IR README .) +The first name checked, +.IR GNUmakefile , +is not recommended for most makefiles. +You should use this name if you have a makefile that is specific to GNU +.IR make , +and will not be understood by other versions of +.IR make . +If +.I makefile +is `\-', the standard input is read. +.LP +.I make +updates a target if it depends on prerequisite files +that have been modified since the target was last modified, +or if the target does not exist. +.SH OPTIONS +.sp 1 +.TP 0.5i +.B \-b +.TP 0.5i +.B \-m +These options are ignored for compatibility with other versions of +.IR make . +.TP 0.5i +.BI "\-C " dir +Change to directory +.I dir +before reading the makefiles or doing anything else. +If multiple +.B \-C +options are specified, each is interpreted relative to the +previous one: +.BR "\-C " / +.BR "\-C " etc +is equivalent to +.BR "\-C " /etc. +This is typically used with recursive invocations of +.IR make . +.TP 0.5i +.B \-d +Print debugging information in addition to normal processing. +The debugging information says which files are being considered for +remaking, which file-times are being compared and with what results, +which files actually need to be remade, which implicit rules are +considered and which are applied---everything interesting about how +.I make +decides what to do. +.TP 0.5i +.B \-e +Give variables taken from the environment precedence +over variables from makefiles. +.TP 0.5i +.BI "\-f " file +Use +.I file +as a makefile. +.TP 0.5i +.B \-i +Ignore all errors in commands executed to remake files. +.TP 0.5i +.BI "\-I " dir +Specifies a directory +.I dir +to search for included makefiles. +If several +.B \-I +options are used to specify several directories, the directories are +searched in the order specified. +Unlike the arguments to other flags of +.IR make , +directories given with +.B \-I +flags may come directly after the flag: +.BI \-I dir +is allowed, as well as +.BI "\-I " dir. +This syntax is allowed for compatibility with the C +preprocessor's +.B \-I +flag. +.TP 0.5i +.BI "\-j " jobs +Specifies the number of jobs (commands) to run simultaneously. +If there is more than one +.B \-j +option, the last one is effective. +If the +.B \-j +option is given without an argument, +.IR make +will not limit the number of jobs that can run simultaneously. +.TP 0.5i +.B \-k +Continue as much as possible after an error. +While the target that failed, and those that depend on it, cannot +be remade, the other dependencies of these targets can be processed +all the same. +.TP 0.5i +.B \-l +.TP 0.5i +.BI "\-l " load +Specifies that no new jobs (commands) should be started if there are +others jobs running and the load average is at least +.I load +(a floating-point number). +With no argument, removes a previous load limit. +.TP 0.5i +.B \-n +Print the commands that would be executed, but do not execute them. +.TP 0.5i +.BI "\-o " file +Do not remake the file +.I file +even if it is older than its dependencies, and do not remake anything +on account of changes in +.IR file . +Essentially the file is treated as very old and its rules are ignored. +.TP 0.5i +.B \-p +Print the data base (rules and variable values) that results from +reading the makefiles; then execute as usual or as otherwise +specified. +This also prints the version information given by the +.B \-v +switch (see below). +To print the data base without trying to remake any files, use +.B make +.B \-p +.BI \-f /dev/null. +.TP 0.5i +.B \-q +``Question mode''. +Do not run any commands, or print anything; just return an exit status +that is zero if the specified targets are already up to date, nonzero +otherwise. +.TP 0.5i +.B \-r +Eliminate use of the built-in implicit rules. +Also clear out the default list of suffixes for suffix rules. +.TP 0.5i +.B \-s +Silent operation; do not print the commands as they are executed. +.TP 0.5i +.B \-S +Cancel the effect of the +.B \-k +option. +This is never necessary except in a recursive +.I make +where +.B \-k +might be inherited from the top-level +.I make +via MAKEFLAGS or if you set +.B \-k +in MAKEFLAGS in your environment. +.TP 0.5i +.B \-t +Touch files (mark them up to date without really changing them) +instead of running their commands. +This is used to pretend that the commands were done, in order to fool +future invocations of +.IR make . +.TP 0.5i +.B \-v +Print the version of the +.I make +program plus a copyright, a list of authors and a notice that there +is no warranty. +.TP 0.5i +.B \-w +Print a message containing the working directory +before and after other processing. +This may be useful for tracking down errors from complicated nests of +recursive +.I make +commands. +.TP 0.5i +.BI "\-W " file +Pretend that the target +.I file +has just been modified. +When used with the +.B \-n +flag, this shows you what would happen if you were to modify that file. +Without +.BR \-n , +it is almost the same as running a +.I touch +command on the given file before running +.IR make , +except that the modification time is changed only in the imagination of +.IR make . +.SH "SEE ALSO" +.I "The GNU Make Manual" +.SH BUGS +See the chapter `Problems and Bugs' in +.I "The GNU Make Manual" . +.SH AUTHOR +This manual page contributed by Dennis Morse of Stanford University. +It has been reworked by Roland McGrath. diff --git a/src/mkutil/make/make.h b/src/mkutil/make/make.h new file mode 100644 index 00000000..f7c2ad72 --- /dev/null +++ b/src/mkutil/make/make.h @@ -0,0 +1,593 @@ +/* Miscellaneous global declarations and portability cruft for GNU Make. +Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, +2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* We use instead of "config.h" so that a compilation + using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h + (which it would do because make.h was found in $srcdir). */ +#include +#undef HAVE_CONFIG_H +#define HAVE_CONFIG_H 1 + +/* AIX requires this to be the first thing in the file. */ +#ifndef __GNUC__ +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +#endif + + +/* Use prototypes if available. */ +#if defined (__cplusplus) || (defined (__STDC__) && __STDC__) +# undef PARAMS +# define PARAMS(protos) protos +#else /* Not C++ or ANSI C. */ +# undef PARAMS +# define PARAMS(protos) () +#endif /* C++ or ANSI C. */ + +/* Specify we want GNU source code. This must be defined before any + system headers are included. */ + +#define _GNU_SOURCE 1 + + +#ifdef CRAY +/* This must happen before #include so + that the declaration therein is changed. */ +# define signal bsdsignal +#endif + +/* If we're compiling for the dmalloc debugger, turn off string inlining. */ +#if defined(HAVE_DMALLOC_H) && defined(__GNUC__) +# define __NO_STRING_INLINES +#endif + +#include +#include +#include +#include +#include +#ifdef HAVE_SYS_TIMEB_H +/* SCO 3.2 "devsys 4.2" has a prototype for `ftime' in that bombs + unless has been included first. Does every system have a + ? If any does not, configure should check for it. */ +# include +#endif + +#if TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# include +# endif +#endif + +#include + +#ifndef errno +extern int errno; +#endif + +#ifndef isblank +# define isblank(c) ((c) == ' ' || (c) == '\t') +#endif + +#ifdef HAVE_UNISTD_H +# include +/* Ultrix's unistd.h always defines _POSIX_VERSION, but you only get + POSIX.1 behavior with `cc -YPOSIX', which predefines POSIX itself! */ +# if defined (_POSIX_VERSION) && !defined (ultrix) && !defined (VMS) +# define POSIX 1 +# endif +#endif + +/* Some systems define _POSIX_VERSION but are not really POSIX.1. */ +#if (defined (butterfly) || defined (__arm) || (defined (__mips) && defined (_SYSTYPE_SVR3)) || (defined (sequent) && defined (i386))) +# undef POSIX +#endif + +#if !defined (POSIX) && defined (_AIX) && defined (_POSIX_SOURCE) +# define POSIX 1 +#endif + +#ifndef RETSIGTYPE +# define RETSIGTYPE void +#endif + +#ifndef sigmask +# define sigmask(sig) (1 << ((sig) - 1)) +#endif + +#ifndef HAVE_SA_RESTART +# define SA_RESTART 0 +#endif + +#ifdef HAVE_LIMITS_H +# include +#endif +#ifdef HAVE_SYS_PARAM_H +# include +#endif + +#ifndef PATH_MAX +# ifndef POSIX +# define PATH_MAX MAXPATHLEN +# endif +#endif +#ifndef MAXPATHLEN +# define MAXPATHLEN 1024 +#endif + +#ifdef PATH_MAX +# define GET_PATH_MAX PATH_MAX +# define PATH_VAR(var) char var[PATH_MAX] +#else +# define NEED_GET_PATH_MAX 1 +# define GET_PATH_MAX (get_path_max ()) +# define PATH_VAR(var) char *var = (char *) alloca (GET_PATH_MAX) +extern unsigned int get_path_max PARAMS ((void)); +#endif + +#ifndef CHAR_BIT +# define CHAR_BIT 8 +#endif + +/* Nonzero if the integer type T is signed. */ +#define INTEGER_TYPE_SIGNED(t) ((t) -1 < 0) + +/* The minimum and maximum values for the integer type T. + Use ~ (t) 0, not -1, for portability to 1's complement hosts. */ +#define INTEGER_TYPE_MINIMUM(t) \ + (! INTEGER_TYPE_SIGNED (t) ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)) +#define INTEGER_TYPE_MAXIMUM(t) (~ (t) 0 - INTEGER_TYPE_MINIMUM (t)) + +#ifndef CHAR_MAX +# define CHAR_MAX INTEGER_TYPE_MAXIMUM (char) +#endif + +#ifdef STAT_MACROS_BROKEN +# ifdef S_ISREG +# undef S_ISREG +# endif +# ifdef S_ISDIR +# undef S_ISDIR +# endif +#endif /* STAT_MACROS_BROKEN. */ + +#ifndef S_ISREG +# define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) +#endif +#ifndef S_ISDIR +# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +#endif + +#ifdef VMS +# include +# include +# include +# include +/* Needed to use alloca on VMS. */ +# include +#endif + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ +# define __attribute__(x) +# endif +/* The __-protected variants of `format' and `printf' attributes + are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __format__ format +# define __printf__ printf +# endif +#endif + +#if defined (STDC_HEADERS) || defined (__GNU_LIBRARY__) +# include +# include +# define ANSI_STRING 1 +#else /* No standard headers. */ +# ifdef HAVE_STRING_H +# include +# define ANSI_STRING 1 +# else +# include +# endif +# ifdef HAVE_MEMORY_H +# include +# endif +# ifdef HAVE_STDLIB_H +# include +# else +extern char *malloc PARAMS ((int)); +extern char *realloc PARAMS ((char *, int)); +extern void free PARAMS ((char *)); + +extern void abort PARAMS ((void)) __attribute__ ((noreturn)); +extern void exit PARAMS ((int)) __attribute__ ((noreturn)); +# endif /* HAVE_STDLIB_H. */ + +#endif /* Standard headers. */ + +/* These should be in stdlib.h. Make sure we have them. */ +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 0 +#endif + +#ifdef ANSI_STRING + +# ifndef bcmp +# define bcmp(s1, s2, n) memcmp ((s1), (s2), (n)) +# endif +# ifndef bzero +# define bzero(s, n) memset ((s), 0, (n)) +# endif +# if defined(HAVE_MEMMOVE) && !defined(bcopy) +# define bcopy(s, d, n) memmove ((d), (s), (n)) +# endif + +#else /* Not ANSI_STRING. */ + +# ifndef HAVE_STRCHR +# define strchr(s, c) index((s), (c)) +# define strrchr(s, c) rindex((s), (c)) +# endif + +# ifndef bcmp +extern int bcmp PARAMS ((const char *, const char *, int)); +# endif +# ifndef bzero +extern void bzero PARAMS ((char *, int)); +#endif +# ifndef bcopy +extern void bcopy PARAMS ((const char *b1, char *b2, int)); +# endif + +#endif /* ANSI_STRING. */ +#undef ANSI_STRING + +/* SCO Xenix has a buggy macro definition in . */ +#undef strerror + +#if !defined(ANSI_STRING) && !defined(__DECC) +extern char *strerror PARAMS ((int errnum)); +#endif + +#if HAVE_INTTYPES_H +# include +#endif +#define FILE_TIMESTAMP uintmax_t + +#if !defined(HAVE_STRSIGNAL) +extern char *strsignal PARAMS ((int signum)); +#endif + +/* ISDIGIT offers the following features: + - Its arg may be any int or unsigned int; it need not be an unsigned char. + - It's guaranteed to evaluate its argument exactly once. + NOTE! Make relies on this behavior, don't change it! + - It's typically faster. + POSIX 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that + only '0' through '9' are digits. Prefer ISDIGIT to isdigit() unless + it's important to use the locale's definition of `digit' even when the + host does not conform to POSIX. */ +#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9) + +#ifndef iAPX286 +# define streq(a, b) \ + ((a) == (b) || \ + (*(a) == *(b) && (*(a) == '\0' || !strcmp ((a) + 1, (b) + 1)))) +# ifdef HAVE_CASE_INSENSITIVE_FS +/* This is only used on Windows/DOS platforms, so we assume strcmpi(). */ +# define strieq(a, b) \ + ((a) == (b) \ + || (tolower((unsigned char)*(a)) == tolower((unsigned char)*(b)) \ + && (*(a) == '\0' || !strcmpi ((a) + 1, (b) + 1)))) +# else +# define strieq(a, b) streq(a, b) +# endif +#else +/* Buggy compiler can't handle this. */ +# define streq(a, b) (strcmp ((a), (b)) == 0) +# define strieq(a, b) (strcmp ((a), (b)) == 0) +#endif +#define strneq(a, b, l) (strncmp ((a), (b), (l)) == 0) +#ifdef VMS +extern int strcmpi (const char *,const char *); +#endif + +#if defined(__GNUC__) || defined(ENUM_BITFIELDS) +# define ENUM_BITFIELD(bits) :bits +#else +# define ENUM_BITFIELD(bits) +#endif + +/* Handle gettext and locales. */ + +#if HAVE_LOCALE_H +# include +#else +# define setlocale(category, locale) +#endif + +#include + +#define _(msgid) gettext (msgid) +#define N_(msgid) gettext_noop (msgid) +#define S_(msg1,msg2,num) ngettext (msg1,msg2,num) + +/* Handle other OSs. */ +#if defined(HAVE_DOS_PATHS) +# define PATH_SEPARATOR_CHAR ';' +#elif defined(VMS) +# define PATH_SEPARATOR_CHAR ',' +#else +# define PATH_SEPARATOR_CHAR ':' +#endif + +#ifdef WINDOWS32 +# include +# include +# define pipe(p) _pipe(p, 512, O_BINARY) +# define kill(pid,sig) w32_kill(pid,sig) + +extern void sync_Path_environment(void); +extern int kill(int pid, int sig); +extern int safe_stat(char *file, struct stat *sb); +extern char *end_of_token_w32(char *s, char stopchar); +extern int find_and_set_default_shell(char *token); + +/* indicates whether or not we have Bourne shell */ +extern int no_default_sh_exe; + +/* is default_shell unixy? */ +extern int unixy_shell; +#endif /* WINDOWS32 */ + +struct floc + { + char *filenm; + unsigned long lineno; + }; +#define NILF ((struct floc *)0) + +#define STRING_SIZE_TUPLE(_s) (_s), (sizeof (_s)-1) + + +/* Fancy processing for variadic functions in both ANSI and pre-ANSI + compilers. */ +#if defined __STDC__ && __STDC__ +extern void message (int prefix, const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +extern void error (const struct floc *flocp, const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +extern void fatal (const struct floc *flocp, const char *fmt, ...) + __attribute__ ((noreturn, __format__ (__printf__, 2, 3))); +#else +extern void message (); +extern void error (); +extern void fatal (); +#endif + +extern void die PARAMS ((int)) __attribute__ ((noreturn)); +extern void log_working_directory PARAMS ((int)); +extern void pfatal_with_name PARAMS ((const char *)) __attribute__ ((noreturn)); +extern void perror_with_name PARAMS ((const char *, const char *)); +extern char *savestring PARAMS ((const char *, unsigned int)); +extern char *concat PARAMS ((const char *, const char *, const char *)); +extern char *xmalloc PARAMS ((unsigned int)); +extern char *xrealloc PARAMS ((char *, unsigned int)); +extern char *xstrdup PARAMS ((const char *)); +extern char *find_next_token PARAMS ((char **, unsigned int *)); +extern char *next_token PARAMS ((const char *)); +extern char *end_of_token PARAMS ((char *)); +extern void collapse_continuations PARAMS ((char *)); +extern void remove_comments PARAMS((char *)); +extern char *sindex PARAMS ((const char *, unsigned int, \ + const char *, unsigned int)); +extern char *lindex PARAMS ((const char *, const char *, int)); +extern int alpha_compare PARAMS ((const void *, const void *)); +extern void print_spaces PARAMS ((unsigned int)); +extern char *find_char_unquote PARAMS ((char *, int, int, int)); +extern char *find_percent PARAMS ((char *)); +extern FILE *open_tmpfile PARAMS ((char **, const char *)); + +#ifndef NO_ARCHIVES +extern int ar_name PARAMS ((char *)); +extern void ar_parse_name PARAMS ((char *, char **, char **)); +extern int ar_touch PARAMS ((char *)); +extern time_t ar_member_date PARAMS ((char *)); +#endif + +extern int dir_file_exists_p PARAMS ((char *, char *)); +extern int file_exists_p PARAMS ((char *)); +extern int file_impossible_p PARAMS ((char *)); +extern void file_impossible PARAMS ((char *)); +extern char *dir_name PARAMS ((char *)); +extern void hash_init_directories PARAMS ((void)); + +extern void define_default_variables PARAMS ((void)); +extern void set_default_suffixes PARAMS ((void)); +extern void install_default_suffix_rules PARAMS ((void)); +extern void install_default_implicit_rules PARAMS ((void)); + +extern void build_vpath_lists PARAMS ((void)); +extern void construct_vpath_list PARAMS ((char *pattern, char *dirpath)); +extern int vpath_search PARAMS ((char **file, FILE_TIMESTAMP *mtime_ptr)); +extern int gpath_search PARAMS ((char *file, int len)); + +extern void construct_include_path PARAMS ((char **arg_dirs)); + +extern void user_access PARAMS ((void)); +extern void make_access PARAMS ((void)); +extern void child_access PARAMS ((void)); + +#ifdef HAVE_VFORK_H +# include +#endif + +/* We omit these declarations on non-POSIX systems which define _POSIX_VERSION, + because such systems often declare them in header files anyway. */ + +#if !defined (__GNU_LIBRARY__) && !defined (POSIX) && !defined (_POSIX_VERSION) && !defined(WINDOWS32) + +extern long int atol (); +# ifndef VMS +extern long int lseek (); +# endif + +#endif /* Not GNU C library or POSIX. */ + +#ifdef HAVE_GETCWD +# if !defined(VMS) && !defined(__DECC) +extern char *getcwd (); +#endif +#else +extern char *getwd (); +# define getcwd(buf, len) getwd (buf) +#endif + +extern const struct floc *reading_file; + +extern char **environ; + +extern int just_print_flag, silent_flag, ignore_errors_flag, keep_going_flag; +extern int print_data_base_flag, question_flag, touch_flag, always_make_flag; +extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag; +extern int print_version_flag, print_directory_flag; +extern int warn_undefined_variables_flag, posix_pedantic, not_parallel; +extern int clock_skew_detected; + +/* can we run commands via 'sh -c xxx' or must we use batch files? */ +extern int batch_mode_shell; + +extern unsigned int job_slots; +extern int job_fds[2]; +extern int job_rfd; +#ifndef NO_FLOAT +extern double max_load_average; +#else +extern int max_load_average; +#endif + +extern char *program; +extern char *starting_directory; +extern unsigned int makelevel; +extern char *version_string, *remote_description; + +extern unsigned int commands_started; + +extern int handling_fatal_signal; + + +#ifndef MIN +#define MIN(_a,_b) ((_a)<(_b)?(_a):(_b)) +#endif +#ifndef MAX +#define MAX(_a,_b) ((_a)>(_b)?(_a):(_b)) +#endif + +#ifdef VMS +# define MAKE_SUCCESS 1 +# define MAKE_TROUBLE 2 +# define MAKE_FAILURE 3 +#else +# define MAKE_SUCCESS 0 +# define MAKE_TROUBLE 1 +# define MAKE_FAILURE 2 +#endif + +/* Set up heap debugging library dmalloc. */ + +#ifdef HAVE_DMALLOC_H +#include +#endif + +#ifndef initialize_main +# ifdef __EMX__ +# define initialize_main(pargc, pargv) \ + { _wildcard(pargc, pargv); _response(pargc, pargv); } +# else +# define initialize_main(pargc, pargv) +# endif +#endif + + +#ifdef __EMX__ +# if !HAVE_STRCASECMP +# define strcasecmp stricmp +# endif + +# if !defined chdir +# define chdir _chdir2 +# endif +# if !defined getcwd +# define getcwd _getcwd2 +# endif + +/* NO_CHDIR2 causes make not to use _chdir2() and _getcwd2() instead of + chdir() and getcwd(). This avoids some error messages for the + make testsuite but restricts the drive letter support. */ +# ifdef NO_CHDIR2 +# warning NO_CHDIR2: usage of drive letters restricted +# undef chdir +# undef getcwd +# endif +#endif + +#ifndef initialize_main +# define initialize_main(pargc, pargv) +#endif + + +/* Some systems (like Solaris, PTX, etc.) do not support the SA_RESTART flag + properly according to POSIX. So, we try to wrap common system calls with + checks for EINTR. Note that there are still plenty of system calls that + can fail with EINTR but this, reportedly, gets the vast majority of + failure cases. If you still experience failures you'll need to either get + a system where SA_RESTART works, or you need to avoid -j. */ + +#define EINTRLOOP(_v,_c) while (((_v)=_c)==-1 && errno==EINTR) + +/* While system calls that return integers are pretty consistent about + returning -1 on failure and setting errno in that case, functions that + return pointers are not always so well behaved. Sometimes they return + NULL for expected behavior: one good example is readdir() which returns + NULL at the end of the directory--and _doesn't_ reset errno. So, we have + to do it ourselves here. */ + +#define ENULLLOOP(_v,_c) do{ errno = 0; \ + while (((_v)=_c)==0 && errno==EINTR); }while(0) + diff --git a/src/mkutil/make/make.lnk b/src/mkutil/make/make.lnk new file mode 100644 index 00000000..8fbbeffd --- /dev/null +++ b/src/mkutil/make/make.lnk @@ -0,0 +1,5 @@ +FROM LIB:cres.o "commands.o"+"job.o"+"dir.o"+"file.o"+"misc.o"+"main.o"+"read.o"+"remake.o"+"rule.o"+"implicit.o"+"default.o"+"variable.o"+"expand.o"+"function.o"+"vpath.o"+"version.o"+"ar.o"+"arscan.o"+"signame.o"+"remote-stub.o"+"getopt.o"+"getopt1.o"+"alloca.o"+"amiga.o" +TO "make.new" +LIB glob/glob.lib LIB:sc.lib LIB:amiga.lib +QUIET + diff --git a/src/mkutil/make/makefile.com b/src/mkutil/make/makefile.com new file mode 100644 index 00000000..dd94bc32 --- /dev/null +++ b/src/mkutil/make/makefile.com @@ -0,0 +1,138 @@ +$! +$! Makefile.com - builds GNU Make for VMS +$! +$! P1 is non-empty if you want to link with the VAXCRTL library instead +$! of the shareable executable +$! P2 = DEBUG will build an image with debug information +$! P3 = WALL will enable all warning messages (some are suppressed since +$! one macro intentionally causes an error condition) +$! +$! In case of problems with the install you might contact me at +$! zinser@decus.de (preferred) or zinser@sysdev.deutsche-boerse.com +$ +$! hb +$! But don't ask Martin Zinser about the lines, I added/changed. +$! In case of an error do some cleanup +$ on error then $ goto cleanup +$! in case somebody set up her/his own symbol for cc +$ set symbol/scope=(nolocal,noglobal) +$! +$! Just some general constants... +$! +$ true = 1 +$ false = 0 +$ tmpnam = "temp_" + f$getjpi("","pid") +$ tt = tmpnam + ".txt" +$ tc = tmpnam + ".c" +$! +$! Look for the compiler used +$! +$ lval = "" +$ if f$search("SYS$SYSTEM:DECC$COMPILER.EXE").eqs."" +$ then +$ if f$trnlnm("SYS").eqs."" then def/nolog sys sys$library: +$ ccopt = "" +$ else +$ ccopt = "/decc/prefix=all" +$ if f$trnlnm("SYS").eqs."" +$ then +$ if f$trnlnm("DECC$LIBRARY_INCLUDE").nes."" +$ then +$ define sys decc$library_include: +$ else +$ if f$search("SYS$COMMON:[DECC$LIB.REFERENCE]DECC$RTLDEF.DIR").nes."" - + then lval = "SYS$COMMON:[DECC$LIB.REFERENCE.DECC$RTLDEF]," +$ if f$search("SYS$COMMON:[DECC$LIB.REFERENCE]SYS$STARLET_C.DIR").nes."" - + then lval = lval+"SYS$COMMON:[DECC$LIB.REFERENCE.SYS$STARLET_C]," +$ lval=lval+"SYS$LIBRARY:" +$ define sys 'lval +$ endif +$ endif +$ endif +$! +$! Should we build a debug image +$! +$ if (p2.eqs."DEBUG") +$ then +$ ccopt = ccopt + "/noopt/debug" +$ lopt = "/debug" +$ else +$ lopt = "" +$ endif +$! +$! Do we want to see all warnings +$! +$ if (p3.nes."WALL") +$ then +$ gosub check_cc_qual +$ endif +$ filelist = "alloca ar arscan commands default dir expand file function " + - + "hash implicit job main misc read remake remote-stub rule " + - + "signame variable version vmsfunctions vmsify vpath " + - + "[.glob]glob [.glob]fnmatch getopt1 getopt" +$ copy config.h-vms config.h +$ n=0 +$ open/write optf make.opt +$ loop: +$ cfile = f$elem(n," ",filelist) +$ if cfile .eqs. " " then goto linkit +$ write sys$output "Compiling ''cfile'..." +$ call compileit 'cfile' 'p1' +$ n = n + 1 +$ goto loop +$ linkit: +$ close optf +$ if p1 .nes. "" then goto link_using_library +$ link/exe=make make.opt/opt'lopt +$ goto cleanup +$ +$ link_using_library: +$ link/exe=make make.opt/opt,sys$library:vaxcrtl/lib'lopt +$ +$ cleanup: +$ if f$trnlnm("SYS").nes."" then $ deassign sys +$ if f$trnlnm("OPTF").nes."" then $ close optf +$ if f$search("make.opt").nes."" then $ del make.opt;* +$ exit +$! +$!------------------------------------------------------------------------------ +$! +$! Check if this is a define relating to the properties of the C/C++ +$! compiler +$! +$CHECK_CC_QUAL: +$ open/write tmpc 'tc +$ ccqual = "/warn=(disable=questcompare)" +$ write tmpc "#include " +$ write tmpc "unsigned int i = 1;" +$ write tmpc "int main(){" +$ write tmpc "if (i < 0){printf(""Mission impossible\n"");}}" +$ close tmpc +$ gosub cc_qual_check +$ return +$! +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler +$! +$CC_QUAL_CHECK: +$ cc_qual = false +$ set message/nofac/noident/nosever/notext +$ cc 'ccqual' 'tmpnam' +$ if $status then cc_qual = true +$ set message/fac/ident/sever/text +$ delete/nolog 'tmpnam'.*;* +$ if cc_qual then ccopt = ccopt + ccqual +$ return +$!------------------------------------------------------------------------------ +$! +$ compileit : subroutine +$ ploc = f$locate("]",p1) +$ filnam = p1 +$ if ploc .lt. f$length(p1) then filnam=f$extract(ploc+1,100,p1) +$ write optf "''filnam'" +$ cc'ccopt'/include=([],[.glob]) - + /define=("allocated_variable_expand_for_file=alloc_var_expand_for_file","unlink=remove","HAVE_CONFIG_H","VMS") - + 'p1' +$ exit +$ endsubroutine : compileit diff --git a/src/mkutil/make/makefile.vms b/src/mkutil/make/makefile.vms new file mode 100644 index 00000000..3ada8314 --- /dev/null +++ b/src/mkutil/make/makefile.vms @@ -0,0 +1,147 @@ +# Copyright (C) 1988, 1989, 1996, 1997 Free Software Foundation, Inc. +# This file is part of GNU Make. +# +# VMS extensions from GNU Make 3.60 imported by +# Klaus Kämpf (kkaempf@rmi.de) +# Modified for version 3.78.1 by Hartmut.Becker@compaq.com. +# Modified for version 3.80 by zinser@decus.de +# +# GNU Make 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, or (at your option) +# any later version. +# +# GNU Make 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 GNU Make; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +CC = cc +CP = copy + +%.obj: %.c + $(CC) $(CFLAGS)/obj=$@ $< +# +# Makefile for GNU Make +# + +ifeq ($(CC),cc) +CFLAGS = $(defines) /include=([],[.glob])/prefix=all/standard=relaxed +else +CFLAGS = $(defines) /include=([],[.glob]) +endif +#LDFLAGS = /deb +LDFLAGS = + +ifeq ($(CC),cc) +defines = /define=("unlink=remove","HAVE_CONFIG_H","VMS","allocated_variable_expand_for_file=alloc_var_expand_for_file") +else +ifeq ($(ARCH),VAX) +defines = /define=("HAVE_CONFIG_H","GCC_IS_NATIVE","VAX") +else +defines = /define=("HAVE_CONFIG_H","GCC_IS_NATIVE") +endif +endif + +LOAD_AVG = /define="NO_LDAV" + +# If you don't want archive support, comment these out. +ARCHIVES = ,ar.obj,arscan.obj +ARCHIVES_SRC = ar.c arscan.c + +# If your system needs extra libraries loaded in, define them here. +# System V probably need -lPW for alloca. +# if on vax, uncomment the following line +#LOADLIBES = ,c.opt/opt +ifeq ($(CC),cc) +#LOADLIBES =,sys$$library:vaxcrtl.olb/lib +CRT0 = +else +LOADLIBES =,gnu_cc_library:libgcc.olb/lib +endif + +# If your system doesn't have alloca, or the one provided is bad, +# get it from the Emacs distribution and define these. +#ALLOCA = ,alloca.obj +#ALLOCASRC = alloca.c + +# If there are remote execution facilities defined, +# enable them with switches here (see remote-*.c). +REMOTE = + +# Any extra object files your system needs. +extras = ,signame.obj,remote-stub.obj,vmsfunctions.obj,vmsify.obj +#,directory.obj +# as an alternative: +glob = ,[.glob]glob.obj,[.glob]fnmatch.obj +getopt = ,getopt.obj,getopt1.obj +# Directory to install `make' in. +bindir = [] +# Directory to install the man page in. +mandir = [] +# Number to put on the man page filename. +manext = 1 + +objs = commands.obj,job.obj,dir.obj,file.obj,misc.obj,hash.obj,\ + main.obj,read.obj,remake.obj,rule.obj,implicit.obj,\ + default.obj,variable.obj,expand.obj,function.obj,\ + vpath.obj,version.obj$(ARCHIVES)$(ALLOCA)$(extras)$(getopt)$(glob) +srcs = commands.c job.c dir.c file.c misc.c hash.c\ + main.c read.c remake.c rule.c implicit.c \ + default.c variable.c expand.c function.c \ + vpath.c version.c vmsfunctions.c vmsify.c $(ARCHIVES_SRC) $(ALLOCASRC) \ + commands.h dep.h filedef.h job.h make.h rule.h variable.h + + +.PHONY: all doc +all: config.h make.exe + +doc: make.info make.dvi + + +make.exe: $(objs) + $(LD)$(LDFLAGS)/exe=$@ $^$(LOADLIBES)$(CRT0) + +.PHONY: clean realclean +clean: + $$ purge [...] + -$(RM) make.exe;,*.obj; + -$(RM) *.opt; + -$(RM) [.glob]*.obj; + +# Automatically generated dependencies. +commands.obj: commands.c make.h dep.h commands.h filedef.h variable.h job.h +job.obj: job.c make.h commands.h job.h filedef.h variable.h +dir.obj: dir.c make.h +file.obj: file.c make.h commands.h dep.h filedef.h variable.h +misc.obj: misc.c make.h dep.h +hash.obj: hash.c make.h hash.h +main.obj: main.c make.h commands.h dep.h filedef.h variable.h job.h +read.obj: read.c make.h commands.h dep.h filedef.h variable.h +remake.obj: remake.c make.h commands.h job.h dep.h filedef.h +rule.obj: rule.c make.h commands.h dep.h filedef.h variable.h rule.h +implicit.obj: implicit.c make.h rule.h dep.h filedef.h +default.obj: default.c make.h rule.h dep.h filedef.h commands.h variable.h +variable.obj: variable.c make.h commands.h variable.h dep.h filedef.h +expand.obj: expand.c make.h commands.h filedef.h variable.h +function.obj: function.c make.h variable.h dep.h commands.h job.h +vpath.obj: vpath.c make.h filedef.h variable.h +version.obj: version.c config.h +arscan.obj: arscan.c +ar.obj: ar.c make.h filedef.h +signame.obj: signame.c +remote-stub.obj: remote-stub.c +[.glob]glob.obj: [.glob]glob.c +[.glob]fnmatch.obj: [.glob]fnmatch.c +getopt.obj: getopt.c +getopt1.obj: getopt1.c +vmsfunctions.obj: vmsfunctions.c make.h vmsdir.h +vmsify.obj: vmsify.c make.h + +config.h: config.h-vms + $(CP) $< $@ diff --git a/src/mkutil/make/misc.c b/src/mkutil/make/misc.c new file mode 100644 index 00000000..9a106aeb --- /dev/null +++ b/src/mkutil/make/misc.c @@ -0,0 +1,830 @@ +/* Miscellaneous generic support functions for GNU Make. +Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1997, +2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "dep.h" +#include "debug.h" + +/* Variadic functions. We go through contortions to allow proper function + prototypes for both ANSI and pre-ANSI C compilers, and also for those + which support stdarg.h vs. varargs.h, and finally those which have + vfprintf(), etc. and those who have _doprnt... or nothing. + + This fancy stuff all came from GNU fileutils, except for the VA_PRINTF and + VA_END macros used here since we have multiple print functions. */ + +#if HAVE_VPRINTF || HAVE_DOPRNT +# define HAVE_STDVARARGS 1 +# if __STDC__ +# include +# define VA_START(args, lastarg) va_start(args, lastarg) +# else +# include +# define VA_START(args, lastarg) va_start(args) +# endif +# if HAVE_VPRINTF +# define VA_PRINTF(fp, lastarg, args) vfprintf((fp), (lastarg), (args)) +# else +# define VA_PRINTF(fp, lastarg, args) _doprnt((lastarg), (args), (fp)) +# endif +# define VA_END(args) va_end(args) +#else +/* # undef HAVE_STDVARARGS */ +# define va_alist a1, a2, a3, a4, a5, a6, a7, a8 +# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8; +# define VA_START(args, lastarg) +# define VA_PRINTF(fp, lastarg, args) fprintf((fp), (lastarg), va_alist) +# define VA_END(args) +#endif + + +/* Compare strings *S1 and *S2. + Return negative if the first is less, positive if it is greater, + zero if they are equal. */ + +int +alpha_compare (const void *v1, const void *v2) +{ + const char *s1 = *((char **)v1); + const char *s2 = *((char **)v2); + + if (*s1 != *s2) + return *s1 - *s2; + return strcmp (s1, s2); +} + +/* Discard each backslash-newline combination from LINE. + Backslash-backslash-newline combinations become backslash-newlines. + This is done by copying the text at LINE into itself. */ + +void +collapse_continuations (char *line) +{ + register char *in, *out, *p; + register int backslash; + register unsigned int bs_write; + + in = strchr (line, '\n'); + if (in == 0) + return; + + out = in; + while (out > line && out[-1] == '\\') + --out; + + while (*in != '\0') + { + /* BS_WRITE gets the number of quoted backslashes at + the end just before IN, and BACKSLASH gets nonzero + if the next character is quoted. */ + backslash = 0; + bs_write = 0; + for (p = in - 1; p >= line && *p == '\\'; --p) + { + if (backslash) + ++bs_write; + backslash = !backslash; + + /* It should be impossible to go back this far without exiting, + but if we do, we can't get the right answer. */ + if (in == out - 1) + abort (); + } + + /* Output the appropriate number of backslashes. */ + while (bs_write-- > 0) + *out++ = '\\'; + + /* Skip the newline. */ + ++in; + + /* If the newline is quoted, discard following whitespace + and any preceding whitespace; leave just one space. */ + if (backslash) + { + in = next_token (in); + while (out > line && isblank ((unsigned char)out[-1])) + --out; + *out++ = ' '; + } + else + /* If the newline isn't quoted, put it in the output. */ + *out++ = '\n'; + + /* Now copy the following line to the output. + Stop when we find backslashes followed by a newline. */ + while (*in != '\0') + if (*in == '\\') + { + p = in + 1; + while (*p == '\\') + ++p; + if (*p == '\n') + { + in = p; + break; + } + while (in < p) + *out++ = *in++; + } + else + *out++ = *in++; + } + + *out = '\0'; +} + + +/* Remove comments from LINE. + This is done by copying the text at LINE onto itself. */ + +void +remove_comments (char *line) +{ + char *comment; + + comment = find_char_unquote (line, '#', 0, 0); + + if (comment != 0) + /* Cut off the line at the #. */ + *comment = '\0'; +} + +/* Print N spaces (used in debug for target-depth). */ + +void +print_spaces (unsigned int n) +{ + while (n-- > 0) + putchar (' '); +} + + +/* Return a newly-allocated string whose contents + concatenate those of s1, s2, s3. */ + +char * +concat (const char *s1, const char *s2, const char *s3) +{ + unsigned int len1, len2, len3; + char *result; + + len1 = *s1 != '\0' ? strlen (s1) : 0; + len2 = *s2 != '\0' ? strlen (s2) : 0; + len3 = *s3 != '\0' ? strlen (s3) : 0; + + result = (char *) xmalloc (len1 + len2 + len3 + 1); + + if (*s1 != '\0') + bcopy (s1, result, len1); + if (*s2 != '\0') + bcopy (s2, result + len1, len2); + if (*s3 != '\0') + bcopy (s3, result + len1 + len2, len3); + *(result + len1 + len2 + len3) = '\0'; + + return result; +} + +/* Print a message on stdout. */ + +void +#if __STDC__ && HAVE_STDVARARGS +message (int prefix, const char *fmt, ...) +#else +message (prefix, fmt, va_alist) + int prefix; + const char *fmt; + va_dcl +#endif +{ +#if HAVE_STDVARARGS + va_list args; +#endif + + log_working_directory (1); + + if (fmt != 0) + { + if (prefix) + { + if (makelevel == 0) + printf ("%s: ", program); + else + printf ("%s[%u]: ", program, makelevel); + } + VA_START (args, fmt); + VA_PRINTF (stdout, fmt, args); + VA_END (args); + putchar ('\n'); + } + + fflush (stdout); +} + +/* Print an error message. */ + +void +#if __STDC__ && HAVE_STDVARARGS +error (const struct floc *flocp, const char *fmt, ...) +#else +error (flocp, fmt, va_alist) + const struct floc *flocp; + const char *fmt; + va_dcl +#endif +{ +#if HAVE_STDVARARGS + va_list args; +#endif + + log_working_directory (1); + + if (flocp && flocp->filenm) + fprintf (stderr, "%s:%lu: ", flocp->filenm, flocp->lineno); + else if (makelevel == 0) + fprintf (stderr, "%s: ", program); + else + fprintf (stderr, "%s[%u]: ", program, makelevel); + + VA_START(args, fmt); + VA_PRINTF (stderr, fmt, args); + VA_END (args); + + putc ('\n', stderr); + fflush (stderr); +} + +/* Print an error message and exit. */ + +void +#if __STDC__ && HAVE_STDVARARGS +fatal (const struct floc *flocp, const char *fmt, ...) +#else +fatal (flocp, fmt, va_alist) + const struct floc *flocp; + const char *fmt; + va_dcl +#endif +{ +#if HAVE_STDVARARGS + va_list args; +#endif + + log_working_directory (1); + + if (flocp && flocp->filenm) + fprintf (stderr, "%s:%lu: *** ", flocp->filenm, flocp->lineno); + else if (makelevel == 0) + fprintf (stderr, "%s: *** ", program); + else + fprintf (stderr, "%s[%u]: *** ", program, makelevel); + + VA_START(args, fmt); + VA_PRINTF (stderr, fmt, args); + VA_END (args); + + fputs (_(". Stop.\n"), stderr); + + die (2); +} + +#ifndef HAVE_STRERROR + +#undef strerror + +char * +strerror (int errnum) +{ + extern int errno, sys_nerr; +#ifndef __DECC + extern char *sys_errlist[]; +#endif + static char buf[] = "Unknown error 12345678901234567890"; + + if (errno < sys_nerr) + return sys_errlist[errnum]; + + sprintf (buf, _("Unknown error %d"), errnum); + return buf; +} +#endif + +/* Print an error message from errno. */ + +void +perror_with_name (const char *str, const char *name) +{ + error (NILF, _("%s%s: %s"), str, name, strerror (errno)); +} + +/* Print an error message from errno and exit. */ + +void +pfatal_with_name (const char *name) +{ + fatal (NILF, _("%s: %s"), name, strerror (errno)); + + /* NOTREACHED */ +} + +/* Like malloc but get fatal error if memory is exhausted. */ +/* Don't bother if we're using dmalloc; it provides these for us. */ + +#ifndef HAVE_DMALLOC_H + +#undef xmalloc +#undef xrealloc +#undef xstrdup + +char * +xmalloc (unsigned int size) +{ + char *result = (char *) malloc (size); + if (result == 0) + fatal (NILF, _("virtual memory exhausted")); + return result; +} + + +char * +xrealloc (char *ptr, unsigned int size) +{ + char *result; + + /* Some older implementations of realloc() don't conform to ANSI. */ + result = ptr ? realloc (ptr, size) : malloc (size); + if (result == 0) + fatal (NILF, _("virtual memory exhausted")); + return result; +} + + +char * +xstrdup (const char *ptr) +{ + char *result; + +#ifdef HAVE_STRDUP + result = strdup (ptr); +#else + result = (char *) malloc (strlen (ptr) + 1); +#endif + + if (result == 0) + fatal (NILF, _("virtual memory exhausted")); + +#ifdef HAVE_STRDUP + return result; +#else + return strcpy(result, ptr); +#endif +} + +#endif /* HAVE_DMALLOC_H */ + +char * +savestring (const char *str, unsigned int length) +{ + register char *out = (char *) xmalloc (length + 1); + if (length > 0) + bcopy (str, out, length); + out[length] = '\0'; + return out; +} + +/* Search string BIG (length BLEN) for an occurrence of + string SMALL (length SLEN). Return a pointer to the + beginning of the first occurrence, or return nil if none found. */ + +char * +sindex (const char *big, unsigned int blen, + const char *small, unsigned int slen) +{ + if (!blen) + blen = strlen (big); + if (!slen) + slen = strlen (small); + + if (slen && blen >= slen) + { + register unsigned int b; + + /* Quit when there's not enough room left for the small string. */ + --slen; + blen -= slen; + + for (b = 0; b < blen; ++b, ++big) + if (*big == *small && strneq (big + 1, small + 1, slen)) + return (char *)big; + } + + return 0; +} + +/* Limited INDEX: + Search through the string STRING, which ends at LIMIT, for the character C. + Returns a pointer to the first occurrence, or nil if none is found. + Like INDEX except that the string searched ends where specified + instead of at the first null. */ + +char * +lindex (const char *s, const char *limit, int c) +{ + while (s < limit) + if (*s++ == c) + return (char *)(s - 1); + + return 0; +} + +/* Return the address of the first whitespace or null in the string S. */ + +char * +end_of_token (char *s) +{ + while (*s != '\0' && !isblank ((unsigned char)*s)) + ++s; + return s; +} + +#ifdef WINDOWS32 +/* + * Same as end_of_token, but take into account a stop character + */ +char * +end_of_token_w32 (char *s, char stopchar) +{ + register char *p = s; + register int backslash = 0; + + while (*p != '\0' && *p != stopchar + && (backslash || !isblank ((unsigned char)*p))) + { + if (*p++ == '\\') + { + backslash = !backslash; + while (*p == '\\') + { + backslash = !backslash; + ++p; + } + } + else + backslash = 0; + } + + return p; +} +#endif + +/* Return the address of the first nonwhitespace or null in the string S. */ + +char * +next_token (const char *s) +{ + while (isblank ((unsigned char)*s)) + ++s; + return (char *)s; +} + +/* Find the next token in PTR; return the address of it, and store the + length of the token into *LENGTHPTR if LENGTHPTR is not nil. */ + +char * +find_next_token (char **ptr, unsigned int *lengthptr) +{ + char *p = next_token (*ptr); + char *end; + + if (*p == '\0') + return 0; + + *ptr = end = end_of_token (p); + if (lengthptr != 0) + *lengthptr = end - p; + return p; +} + +/* Copy a chain of `struct dep', making a new chain + with the same contents as the old one. */ + +struct dep * +copy_dep_chain (struct dep *d) +{ + register struct dep *c; + struct dep *firstnew = 0; + struct dep *lastnew = 0; + + while (d != 0) + { + c = (struct dep *) xmalloc (sizeof (struct dep)); + bcopy ((char *) d, (char *) c, sizeof (struct dep)); + if (c->name != 0) + c->name = xstrdup (c->name); + c->next = 0; + if (firstnew == 0) + firstnew = lastnew = c; + else + lastnew = lastnew->next = c; + + d = d->next; + } + + return firstnew; +} + +#ifdef iAPX286 +/* The losing compiler on this machine can't handle this macro. */ + +char * +dep_name (struct dep *dep) +{ + return dep->name == 0 ? dep->file->name : dep->name; +} +#endif + +#ifdef GETLOADAVG_PRIVILEGED + +#ifdef POSIX + +/* Hopefully if a system says it's POSIX.1 and has the setuid and setgid + functions, they work as POSIX.1 says. Some systems (Alpha OSF/1 1.2, + for example) which claim to be POSIX.1 also have the BSD setreuid and + setregid functions, but they don't work as in BSD and only the POSIX.1 + way works. */ + +#undef HAVE_SETREUID +#undef HAVE_SETREGID + +#else /* Not POSIX. */ + +/* Some POSIX.1 systems have the seteuid and setegid functions. In a + POSIX-like system, they are the best thing to use. However, some + non-POSIX systems have them too but they do not work in the POSIX style + and we must use setreuid and setregid instead. */ + +#undef HAVE_SETEUID +#undef HAVE_SETEGID + +#endif /* POSIX. */ + +#ifndef HAVE_UNISTD_H +extern int getuid (), getgid (), geteuid (), getegid (); +extern int setuid (), setgid (); +#ifdef HAVE_SETEUID +extern int seteuid (); +#else +#ifdef HAVE_SETREUID +extern int setreuid (); +#endif /* Have setreuid. */ +#endif /* Have seteuid. */ +#ifdef HAVE_SETEGID +extern int setegid (); +#else +#ifdef HAVE_SETREGID +extern int setregid (); +#endif /* Have setregid. */ +#endif /* Have setegid. */ +#endif /* No . */ + +/* Keep track of the user and group IDs for user- and make- access. */ +static int user_uid = -1, user_gid = -1, make_uid = -1, make_gid = -1; +#define access_inited (user_uid != -1) +static enum { make, user } current_access; + + +/* Under -d, write a message describing the current IDs. */ + +static void +log_access (char *flavor) +{ + if (! ISDB (DB_JOBS)) + return; + + /* All the other debugging messages go to stdout, + but we write this one to stderr because it might be + run in a child fork whose stdout is piped. */ + + fprintf (stderr, _("%s: user %lu (real %lu), group %lu (real %lu)\n"), + flavor, (unsigned long) geteuid (), (unsigned long) getuid (), + (unsigned long) getegid (), (unsigned long) getgid ()); + fflush (stderr); +} + + +static void +init_access (void) +{ +#ifndef VMS + user_uid = getuid (); + user_gid = getgid (); + + make_uid = geteuid (); + make_gid = getegid (); + + /* Do these ever fail? */ + if (user_uid == -1 || user_gid == -1 || make_uid == -1 || make_gid == -1) + pfatal_with_name ("get{e}[gu]id"); + + log_access (_("Initialized access")); + + current_access = make; +#endif +} + +#endif /* GETLOADAVG_PRIVILEGED */ + +/* Give the process appropriate permissions for access to + user data (i.e., to stat files, or to spawn a child process). */ +void +user_access (void) +{ +#ifdef GETLOADAVG_PRIVILEGED + + if (!access_inited) + init_access (); + + if (current_access == user) + return; + + /* We are in "make access" mode. This means that the effective user and + group IDs are those of make (if it was installed setuid or setgid). + We now want to set the effective user and group IDs to the real IDs, + which are the IDs of the process that exec'd make. */ + +#ifdef HAVE_SETEUID + + /* Modern systems have the seteuid/setegid calls which set only the + effective IDs, which is ideal. */ + + if (seteuid (user_uid) < 0) + pfatal_with_name ("user_access: seteuid"); + +#else /* Not HAVE_SETEUID. */ + +#ifndef HAVE_SETREUID + + /* System V has only the setuid/setgid calls to set user/group IDs. + There is an effective ID, which can be set by setuid/setgid. + It can be set (unless you are root) only to either what it already is + (returned by geteuid/getegid, now in make_uid/make_gid), + the real ID (return by getuid/getgid, now in user_uid/user_gid), + or the saved set ID (what the effective ID was before this set-ID + executable (make) was exec'd). */ + + if (setuid (user_uid) < 0) + pfatal_with_name ("user_access: setuid"); + +#else /* HAVE_SETREUID. */ + + /* In 4BSD, the setreuid/setregid calls set both the real and effective IDs. + They may be set to themselves or each other. So you have two alternatives + at any one time. If you use setuid/setgid, the effective will be set to + the real, leaving only one alternative. Using setreuid/setregid, however, + you can toggle between your two alternatives by swapping the values in a + single setreuid or setregid call. */ + + if (setreuid (make_uid, user_uid) < 0) + pfatal_with_name ("user_access: setreuid"); + +#endif /* Not HAVE_SETREUID. */ +#endif /* HAVE_SETEUID. */ + +#ifdef HAVE_SETEGID + if (setegid (user_gid) < 0) + pfatal_with_name ("user_access: setegid"); +#else +#ifndef HAVE_SETREGID + if (setgid (user_gid) < 0) + pfatal_with_name ("user_access: setgid"); +#else + if (setregid (make_gid, user_gid) < 0) + pfatal_with_name ("user_access: setregid"); +#endif +#endif + + current_access = user; + + log_access (_("User access")); + +#endif /* GETLOADAVG_PRIVILEGED */ +} + +/* Give the process appropriate permissions for access to + make data (i.e., the load average). */ +void +make_access (void) +{ +#ifdef GETLOADAVG_PRIVILEGED + + if (!access_inited) + init_access (); + + if (current_access == make) + return; + + /* See comments in user_access, above. */ + +#ifdef HAVE_SETEUID + if (seteuid (make_uid) < 0) + pfatal_with_name ("make_access: seteuid"); +#else +#ifndef HAVE_SETREUID + if (setuid (make_uid) < 0) + pfatal_with_name ("make_access: setuid"); +#else + if (setreuid (user_uid, make_uid) < 0) + pfatal_with_name ("make_access: setreuid"); +#endif +#endif + +#ifdef HAVE_SETEGID + if (setegid (make_gid) < 0) + pfatal_with_name ("make_access: setegid"); +#else +#ifndef HAVE_SETREGID + if (setgid (make_gid) < 0) + pfatal_with_name ("make_access: setgid"); +#else + if (setregid (user_gid, make_gid) < 0) + pfatal_with_name ("make_access: setregid"); +#endif +#endif + + current_access = make; + + log_access (_("Make access")); + +#endif /* GETLOADAVG_PRIVILEGED */ +} + +/* Give the process appropriate permissions for a child process. + This is like user_access, but you can't get back to make_access. */ +void +child_access (void) +{ +#ifdef GETLOADAVG_PRIVILEGED + + if (!access_inited) + abort (); + + /* Set both the real and effective UID and GID to the user's. + They cannot be changed back to make's. */ + +#ifndef HAVE_SETREUID + if (setuid (user_uid) < 0) + pfatal_with_name ("child_access: setuid"); +#else + if (setreuid (user_uid, user_uid) < 0) + pfatal_with_name ("child_access: setreuid"); +#endif + +#ifndef HAVE_SETREGID + if (setgid (user_gid) < 0) + pfatal_with_name ("child_access: setgid"); +#else + if (setregid (user_gid, user_gid) < 0) + pfatal_with_name ("child_access: setregid"); +#endif + + log_access (_("Child access")); + +#endif /* GETLOADAVG_PRIVILEGED */ +} + +#ifdef NEED_GET_PATH_MAX +unsigned int +get_path_max (void) +{ + static unsigned int value; + + if (value == 0) + { + long int x = pathconf ("/", _PC_PATH_MAX); + if (x > 0) + value = x; + else + return MAXPATHLEN; + } + + return value; +} +#endif diff --git a/src/mkutil/make/n.bat b/src/mkutil/make/n.bat new file mode 100644 index 00000000..ccc128c0 --- /dev/null +++ b/src/mkutil/make/n.bat @@ -0,0 +1,16 @@ +rem del WinRel /s /q +rem del WinDebug /s /q +rem del w32\subproc\WinRel /s /q +rem del w32\subproc\WinDebug /s /q + +del config.h +nmake /f NMakefile +@if errorlevel 1 goto failure +copy WinDebug\make.exe ..\..\bin + +@echo SUCCESS +@goto done +:failure +@echo FAILURE +:done + diff --git a/src/mkutil/make/po/.cvsignore b/src/mkutil/make/po/.cvsignore new file mode 100644 index 00000000..d01e6b30 --- /dev/null +++ b/src/mkutil/make/po/.cvsignore @@ -0,0 +1,6 @@ +*.gmo *.mo *.pot *.po + +Makefile Makefile.in Makefile.in.in +Rules-quot +*.sed *.sin *.header +POTFILES diff --git a/src/mkutil/make/po/CVS/Entries b/src/mkutil/make/po/CVS/Entries new file mode 100644 index 00000000..f4ae012d --- /dev/null +++ b/src/mkutil/make/po/CVS/Entries @@ -0,0 +1,6 @@ +/.cvsignore/1.3/Wed Sep 11 16:55:45 2002// +/ChangeLog/1.6/Thu Dec 19 14:31:45 2002// +/LINGUAS/1.6/Thu Dec 19 14:31:45 2002// +/Makevars/1.1/Sun Apr 21 23:57:25 2002// +/POTFILES.in/1.5/Sat Oct 5 13:45:48 2002// +D diff --git a/src/mkutil/make/po/CVS/Repository b/src/mkutil/make/po/CVS/Repository new file mode 100644 index 00000000..969c5ad6 --- /dev/null +++ b/src/mkutil/make/po/CVS/Repository @@ -0,0 +1 @@ +make/po diff --git a/src/mkutil/make/po/CVS/Root b/src/mkutil/make/po/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/po/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/po/ChangeLog b/src/mkutil/make/po/ChangeLog new file mode 100644 index 00000000..265fa438 --- /dev/null +++ b/src/mkutil/make/po/ChangeLog @@ -0,0 +1,25 @@ +2002-12-19 Paul D. Smith + + * LINGUAS: Added a new translation for Ukrainian (uk). + +2002-10-05 Paul D. Smith + + * POTFILES.in: Add variable.h as it has a translatable string. + +2002-08-08 Paul D. Smith + + * LINGUAS: Add a new translation for Chinese (simplified) (zh_CN). + +2002-08-02 Paul D. Smith + + * LINGUAS: Add a new translation for Swedish (sv). + +2002-04-21 Paul D. Smith + + * LINGUAS, hr.po: Added new translation: Croatian. + + * da.po, de.po, es.po, fr.po, gl.po, he.po, ja.po, ko.po, nl.po, + pl.po, pt_BR.po, ru.po, tr.po: Moved from i18n to here. + * .cvsignore: Moved from i18n to here. + + * POTFILES.in, LINGUAS, Makevars: Created. diff --git a/src/mkutil/make/po/LINGUAS b/src/mkutil/make/po/LINGUAS new file mode 100644 index 00000000..f2217f3c --- /dev/null +++ b/src/mkutil/make/po/LINGUAS @@ -0,0 +1,5 @@ +# Set of available languages: 16 languages + +da de es fr gl he hr ja ko nl pl pt_BR sv ru tr uk zh_CN + +# Can't seem to get en@quot and en@boldquot to build properly? diff --git a/src/mkutil/make/po/Makevars b/src/mkutil/make/po/Makevars new file mode 100644 index 00000000..8b09f53b --- /dev/null +++ b/src/mkutil/make/po/Makevars @@ -0,0 +1,25 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Free Software Foundation, Inc. + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = diff --git a/src/mkutil/make/po/POTFILES.in b/src/mkutil/make/po/POTFILES.in new file mode 100644 index 00000000..30b7864b --- /dev/null +++ b/src/mkutil/make/po/POTFILES.in @@ -0,0 +1,25 @@ +# List of source files containing translatable strings. +# Copyright (C) 2002 Free Software Foundation, Inc. + +ar.c +arscan.c +commands.c +dir.c +expand.c +file.c +function.c +getopt.c +hash.c +implicit.c +job.c +main.c +misc.c +read.c +remake.c +remote-cstms.c +rule.c +signame.c +variable.c +variable.h +vmsfunctions.c +vpath.c diff --git a/src/mkutil/make/read.c b/src/mkutil/make/read.c new file mode 100644 index 00000000..d451dc38 --- /dev/null +++ b/src/mkutil/make/read.c @@ -0,0 +1,3147 @@ +#if 0 +#define DUMP_RULE +#endif + +/* Reading and parsing of makefiles for GNU Make. +Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, +2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" + +#include + +#include + +#include "dep.h" +#include "filedef.h" +#include "job.h" +#include "commands.h" +#include "variable.h" +#include "rule.h" +#include "debug.h" +#include "hash.h" + + +#ifndef WINDOWS32 +#ifndef _AMIGA +#ifndef VMS +#include +#else +struct passwd *getpwnam PARAMS ((char *name)); +#endif +#endif +#endif /* !WINDOWS32 */ + +/* A 'struct ebuffer' controls the origin of the makefile we are currently + eval'ing. +*/ + +struct ebuffer + { + char *buffer; /* Start of the current line in the buffer. */ + char *bufnext; /* Start of the next line in the buffer. */ + char *bufstart; /* Start of the entire buffer. */ + unsigned int size; /* Malloc'd size of buffer. */ + FILE *fp; /* File, or NULL if this is an internal buffer. */ + struct floc floc; /* Info on the file in fp (if any). */ + }; + +/* Types of "words" that can be read in a makefile. */ +enum make_word_type + { + w_bogus, w_eol, w_static, w_variable, w_colon, w_dcolon, w_semicolon, + w_varassign + }; + + +/* A `struct conditionals' contains the information describing + all the active conditionals in a makefile. + + The global variable `conditionals' contains the conditionals + information for the current makefile. It is initialized from + the static structure `toplevel_conditionals' and is later changed + to new structures for included makefiles. */ + +struct conditionals + { + unsigned int if_cmds; /* Depth of conditional nesting. */ + unsigned int allocated; /* Elts allocated in following arrays. */ + char *ignoring; /* Are we ignoring or interepreting? */ + char *seen_else; /* Have we already seen an `else'? */ + }; + +static struct conditionals toplevel_conditionals; +static struct conditionals *conditionals = &toplevel_conditionals; + + +/* Default directories to search for include files in */ + +static char *default_include_directories[] = + { +#if defined(WINDOWS32) && !defined(INCLUDEDIR) +/* + * This completely up to the user when they install MSVC or other packages. + * This is defined as a placeholder. + */ +#define INCLUDEDIR "." +#endif + INCLUDEDIR, +#ifndef _AMIGA + "/usr/gnu/include", + "/usr/local/include", + "/usr/include", +#endif + 0 + }; + +/* List of directories to search for include files in */ + +static char **include_directories; + +/* Maximum length of an element of the above. */ + +static unsigned int max_incl_len; + +/* The filename and pointer to line number of the + makefile currently being read in. */ + +const struct floc *reading_file = 0; + +/* The chain of makefiles read by read_makefile. */ + +static struct dep *read_makefiles = 0; + +static int eval_makefile PARAMS ((char *filename, int flags)); +static int eval PARAMS ((struct ebuffer *buffer, int flags)); + +static long readline PARAMS ((struct ebuffer *ebuf)); +static void do_define PARAMS ((char *name, unsigned int namelen, + enum variable_origin origin, + struct ebuffer *ebuf)); +static int conditional_line PARAMS ((char *line, const struct floc *flocp)); +static void record_files PARAMS ((struct nameseq *filenames, char *pattern, char *pattern_percent, + struct dep *deps, unsigned int cmds_started, char *commands, + unsigned int commands_idx, int two_colon, + int have_sysv_atvar, + const struct floc *flocp, int set_default)); +static void record_target_var PARAMS ((struct nameseq *filenames, char *defn, + int two_colon, + enum variable_origin origin, + int enabled, + const struct floc *flocp)); +static enum make_word_type get_next_mword PARAMS ((char *buffer, char *delim, + char **startp, unsigned int *length)); + +/* Read in all the makefiles and return the chain of their names. */ + +struct dep * +read_all_makefiles (char **makefiles) +{ + unsigned int num_makefiles = 0; + + /* Create *_LIST variables, to hold the makefiles, targets, and variables + we will be reading. */ + + define_variable ("MAKEFILE_LIST", sizeof ("MAKEFILE_LIST")-1, "", o_file, 0); + + DB (DB_BASIC, (_("Reading makefiles...\n"))); + + /* If there's a non-null variable MAKEFILES, its value is a list of + files to read first thing. But don't let it prevent reading the + default makefiles and don't let the default goal come from there. */ + + { + char *value; + char *name, *p; + unsigned int length; + + { + /* Turn off --warn-undefined-variables while we expand MAKEFILES. */ + int save = warn_undefined_variables_flag; + warn_undefined_variables_flag = 0; + + value = allocated_variable_expand ("$(MAKEFILES)"); + + warn_undefined_variables_flag = save; + } + + /* Set NAME to the start of next token and LENGTH to its length. + MAKEFILES is updated for finding remaining tokens. */ + p = value; + + while ((name = find_next_token (&p, &length)) != 0) + { + if (*p != '\0') + *p++ = '\0'; + name = xstrdup (name); + if (eval_makefile (name, + RM_NO_DEFAULT_GOAL|RM_INCLUDED|RM_DONTCARE) < 2) + free (name); + } + + free (value); + } + + /* Read makefiles specified with -f switches. */ + + if (makefiles != 0) + while (*makefiles != 0) + { + struct dep *tail = read_makefiles; + register struct dep *d; + + if (! eval_makefile (*makefiles, 0)) + perror_with_name ("", *makefiles); + + /* Find the right element of read_makefiles. */ + d = read_makefiles; + while (d->next != tail) + d = d->next; + + /* Use the storage read_makefile allocates. */ + *makefiles = dep_name (d); + ++num_makefiles; + ++makefiles; + } + + /* If there were no -f switches, try the default names. */ + + if (num_makefiles == 0) + { + static char *default_makefiles[] = +#ifdef VMS + /* all lower case since readdir() (the vms version) 'lowercasifies' */ + { "makefile.vms", "gnumakefile.", "makefile.", 0 }; +#else +#ifdef _AMIGA + { "GNUmakefile", "Makefile", "SMakefile", 0 }; +#else /* !Amiga && !VMS */ + { "GNUmakefile", "makefile", "Makefile", 0 }; +#endif /* AMIGA */ +#endif /* VMS */ + register char **p = default_makefiles; + while (*p != 0 && !file_exists_p (*p)) + ++p; + + if (*p != 0) + { + if (! eval_makefile (*p, 0)) + perror_with_name ("", *p); + } + else + { + /* No default makefile was found. Add the default makefiles to the + `read_makefiles' chain so they will be updated if possible. */ + struct dep *tail = read_makefiles; + /* Add them to the tail, after any MAKEFILES variable makefiles. */ + while (tail != 0 && tail->next != 0) + tail = tail->next; + for (p = default_makefiles; *p != 0; ++p) + { + struct dep *d = (struct dep *) xmalloc (sizeof (struct dep)); + d->name = 0; + d->file = enter_file (*p); + d->file->dontcare = 1; + d->ignore_mtime = 0; + /* Tell update_goal_chain to bail out as soon as this file is + made, and main not to die if we can't make this file. */ + d->changed = RM_DONTCARE; + if (tail == 0) + read_makefiles = d; + else + tail->next = d; + tail = d; + } + if (tail != 0) + tail->next = 0; + } + } + + return read_makefiles; +} + +/* Install a new conditional and return the previous one. */ + +static struct conditionals * +install_conditionals (struct conditionals *new) +{ + struct conditionals *save = conditionals; + + bzero ((char *) new, sizeof (*new)); + conditionals = new; + + return save; +} + +/* Free the current conditionals and reinstate a saved one. */ + +static void +restore_conditionals (struct conditionals *saved) +{ + /* Free any space allocated by conditional_line. */ + if (conditionals->ignoring) + free (conditionals->ignoring); + if (conditionals->seen_else) + free (conditionals->seen_else); + + /* Restore state. */ + conditionals = saved; +} + +static int +eval_makefile (char *filename, int flags) +{ + struct dep *deps; + struct ebuffer ebuf; + const struct floc *curfile; + int makefile_errno; + int r; + + ebuf.floc.filenm = filename; + ebuf.floc.lineno = 1; + + if (ISDB (DB_VERBOSE)) + { + printf (_("Reading makefile `%s'"), filename); + if (flags & RM_NO_DEFAULT_GOAL) + printf (_(" (no default goal)")); + if (flags & RM_INCLUDED) + printf (_(" (search path)")); + if (flags & RM_DONTCARE) + printf (_(" (don't care)")); + if (flags & RM_NO_TILDE) + printf (_(" (no ~ expansion)")); + puts ("..."); + } + + /* First, get a stream to read. */ + + /* Expand ~ in FILENAME unless it came from `include', + in which case it was already done. */ + if (!(flags & RM_NO_TILDE) && filename[0] == '~') + { + char *expanded = tilde_expand (filename); + if (expanded != 0) + filename = expanded; + } + + ebuf.fp = fopen (filename, "r"); + /* Save the error code so we print the right message later. */ + makefile_errno = errno; + + /* If the makefile wasn't found and it's either a makefile from + the `MAKEFILES' variable or an included makefile, + search the included makefile search path for this makefile. */ + if (ebuf.fp == 0 && (flags & RM_INCLUDED) && *filename != '/') + { + register unsigned int i; + for (i = 0; include_directories[i] != 0; ++i) + { + char *name = concat (include_directories[i], "/", filename); + ebuf.fp = fopen (name, "r"); + if (ebuf.fp == 0) + free (name); + else + { + filename = name; + break; + } + } + } + + /* Add FILENAME to the chain of read makefiles. */ + deps = (struct dep *) xmalloc (sizeof (struct dep)); + deps->next = read_makefiles; + read_makefiles = deps; + deps->name = 0; + deps->file = lookup_file (filename); + if (deps->file == 0) + { + deps->file = enter_file (xstrdup (filename)); + if (flags & RM_DONTCARE) + deps->file->dontcare = 1; + } + if (filename != ebuf.floc.filenm) + free (filename); + filename = deps->file->name; + deps->changed = flags; + deps->ignore_mtime = 0; + + /* If the makefile can't be found at all, give up entirely. */ + + if (ebuf.fp == 0) + { + /* If we did some searching, errno has the error from the last + attempt, rather from FILENAME itself. Restore it in case the + caller wants to use it in a message. */ + errno = makefile_errno; + return 0; + } + + /* Add this makefile to the list. */ + do_variable_definition (&ebuf.floc, "MAKEFILE_LIST", filename, o_file, + f_append, 0); + + /* Evaluate the makefile */ + + ebuf.size = 200; + ebuf.buffer = ebuf.bufnext = ebuf.bufstart = xmalloc (ebuf.size); + + curfile = reading_file; + reading_file = &ebuf.floc; + + r = eval (&ebuf, !(flags & RM_NO_DEFAULT_GOAL)); + + reading_file = curfile; + + fclose (ebuf.fp); + + free (ebuf.bufstart); + return r; +} + +int +eval_buffer (char *buffer) +{ + struct ebuffer ebuf; + struct conditionals *saved; + struct conditionals new; + const struct floc *curfile; + int r; + + /* Evaluate the buffer */ + + ebuf.size = strlen (buffer); + ebuf.buffer = ebuf.bufnext = ebuf.bufstart = buffer; + ebuf.fp = NULL; + + ebuf.floc = *reading_file; + + curfile = reading_file; + reading_file = &ebuf.floc; + + saved = install_conditionals (&new); + + r = eval (&ebuf, 1); + + restore_conditionals (saved); + + reading_file = curfile; + + return r; +} + + +/* Read file FILENAME as a makefile and add its contents to the data base. + + SET_DEFAULT is true if we are allowed to set the default goal. */ + + +static int +eval (struct ebuffer *ebuf, int set_default) +{ + char *collapsed = 0; + unsigned int collapsed_length = 0; + unsigned int commands_len = 200; + char *commands; + unsigned int commands_idx = 0; + unsigned int cmds_started, tgts_started; + int ignoring = 0, in_ignored_define = 0; + int no_targets = 0; /* Set when reading a rule without targets. */ + int have_sysv_atvar = 0; + struct nameseq *filenames = 0; + struct dep *deps = 0; + long nlines = 0; + int two_colon = 0; + char *pattern = 0, *pattern_percent; + struct floc *fstart; + struct floc fi; + +#define record_waiting_files() \ + do \ + { \ + if (filenames != 0) \ + { \ + fi.lineno = tgts_started; \ + record_files (filenames, pattern, pattern_percent, deps, \ + cmds_started, commands, commands_idx, two_colon, \ + have_sysv_atvar, &fi, set_default); \ + } \ + filenames = 0; \ + commands_idx = 0; \ + no_targets = 0; \ + if (pattern) { free(pattern); pattern = 0; } \ + } while (0) + + pattern_percent = 0; + cmds_started = tgts_started = 1; + + fstart = &ebuf->floc; + fi.filenm = ebuf->floc.filenm; + + /* Loop over lines in the file. + The strategy is to accumulate target names in FILENAMES, dependencies + in DEPS and commands in COMMANDS. These are used to define a rule + when the start of the next rule (or eof) is encountered. + + When you see a "continue" in the loop below, that means we are moving on + to the next line _without_ ending any rule that we happen to be working + with at the moment. If you see a "goto rule_complete", then the + statement we just parsed also finishes the previous rule. */ + + commands = xmalloc (200); + + while (1) + { + int linelen; + char *line; + int len; + char *p; + char *p2; + + /* Grab the next line to be evaluated */ + ebuf->floc.lineno += nlines; + nlines = readline (ebuf); + + /* If there is nothing left to eval, we're done. */ + if (nlines < 0) + break; + + /* If this line is empty, skip it. */ + line = ebuf->buffer; + if (line[0] == '\0') + continue; + + linelen = strlen (line); + + /* Check for a shell command line first. + If it is not one, we can stop treating tab specially. */ + if (line[0] == '\t') + { + if (no_targets) + /* Ignore the commands in a rule with no targets. */ + continue; + + /* If there is no preceding rule line, don't treat this line + as a command, even though it begins with a tab character. + SunOS 4 make appears to behave this way. */ + + if (filenames != 0) + { + if (ignoring) + /* Yep, this is a shell command, and we don't care. */ + continue; +#ifdef DUMP_RULE /* Nick */ + fflush(stderr); + printf("%s\n", line); +#endif + /* Append this command line to the line being accumulated. */ + if (commands_idx == 0) + cmds_started = ebuf->floc.lineno; + + if (linelen + 1 + commands_idx > commands_len) + { + commands_len = (linelen + 1 + commands_idx) * 2; + commands = xrealloc (commands, commands_len); + } + bcopy (line, &commands[commands_idx], linelen); + commands_idx += linelen; + commands[commands_idx++] = '\n'; + + continue; + } + } + + /* This line is not a shell command line. Don't worry about tabs. + Get more space if we need it; we don't need to preserve the current + contents of the buffer. */ + + if (collapsed_length < linelen+1) + { + collapsed_length = linelen+1; + if (collapsed) + free ((char *)collapsed); + collapsed = (char *) xmalloc (collapsed_length); + } + strcpy (collapsed, line); + /* Collapse continuation lines. */ + collapse_continuations (collapsed); + remove_comments (collapsed); + + /* Compare a word, both length and contents. */ +#define word1eq(s) (len == sizeof(s)-1 && strneq (s, p, sizeof(s)-1)) + p = collapsed; + while (isspace ((unsigned char)*p)) + ++p; + + if (*p == '\0') + /* This line is completely empty--ignore it. */ + continue; + + /* Find the end of the first token. Note we don't need to worry about + * ":" here since we compare tokens by length (so "export" will never + * be equal to "export:"). + */ + for (p2 = p+1; *p2 != '\0' && !isspace ((unsigned char)*p2); ++p2) + ; + len = p2 - p; + + /* Find the start of the second token. If it looks like a target or + variable definition it can't be a preprocessor token so skip + them--this allows variables/targets named `ifdef', `export', etc. */ + while (isspace ((unsigned char)*p2)) + ++p2; + + if ((p2[0] == ':' || p2[0] == '+' || p2[0] == '=') && p2[1] == '\0') + { + /* It can't be a preprocessor token so skip it if we're ignoring */ + if (ignoring) + continue; + + goto skip_conditionals; + } + + /* We must first check for conditional and `define' directives before + ignoring anything, since they control what we will do with + following lines. */ + + if (!in_ignored_define + && (word1eq ("ifdef") || word1eq ("ifndef") + || word1eq ("ifeq") || word1eq ("ifneq") + || word1eq ("else") || word1eq ("endif"))) + { + int i = conditional_line (p, fstart); + if (i < 0) + fatal (fstart, _("invalid syntax in conditional")); + + ignoring = i; + continue; + } + + if (word1eq ("endef")) + { + if (!in_ignored_define) + fatal (fstart, _("extraneous `endef'")); + in_ignored_define = 0; + continue; + } + + if (word1eq ("define")) + { + if (ignoring) + in_ignored_define = 1; + else + { + if (*p2 == '\0') + fatal (fstart, _("empty variable name")); + + /* Let the variable name be the whole rest of the line, + with trailing blanks stripped (comments have already been + removed), so it could be a complex variable/function + reference that might contain blanks. */ + p = strchr (p2, '\0'); + while (isblank ((unsigned char)p[-1])) + --p; + do_define (p2, p - p2, o_file, ebuf); + } + continue; + } + + if (word1eq ("override")) + { + if (*p2 == '\0') + error (fstart, _("empty `override' directive")); + + if (strneq (p2, "define", 6) + && (isblank ((unsigned char)p2[6]) || p2[6] == '\0')) + { + if (ignoring) + in_ignored_define = 1; + else + { + p2 = next_token (p2 + 6); + if (*p2 == '\0') + fatal (fstart, _("empty variable name")); + + /* Let the variable name be the whole rest of the line, + with trailing blanks stripped (comments have already been + removed), so it could be a complex variable/function + reference that might contain blanks. */ + p = strchr (p2, '\0'); + while (isblank ((unsigned char)p[-1])) + --p; + do_define (p2, p - p2, o_override, ebuf); + } + } + else if (!ignoring + && !try_variable_definition (fstart, p2, o_override, 0)) + error (fstart, _("invalid `override' directive")); + + continue; + } + + if (ignoring) + /* Ignore the line. We continue here so conditionals + can appear in the middle of a rule. */ + continue; + + if (word1eq ("export")) + { + /* 'export' by itself causes everything to be exported. */ + if (*p2 == '\0') + export_all_variables = 1; + else + { + struct variable *v; + + v = try_variable_definition (fstart, p2, o_file, 0); + if (v != 0) + v->export = v_export; + else + { + unsigned int len; + char *ap; + + /* Expand the line so we can use indirect and constructed + variable names in an export command. */ + p2 = ap = allocated_variable_expand (p2); + + for (p = find_next_token (&p2, &len); p != 0; + p = find_next_token (&p2, &len)) + { + v = lookup_variable (p, len); + if (v == 0) + v = define_variable_loc (p, len, "", o_file, 0, + fstart); + v->export = v_export; + } + + free (ap); + } + } + goto rule_complete; + } + + if (word1eq ("unexport")) + { + if (*p2 == '\0') + export_all_variables = 0; + else + { + unsigned int len; + struct variable *v; + char *ap; + + /* Expand the line so we can use indirect and constructed + variable names in an unexport command. */ + p2 = ap = allocated_variable_expand (p2); + + for (p = find_next_token (&p2, &len); p != 0; + p = find_next_token (&p2, &len)) + { + v = lookup_variable (p, len); + if (v == 0) + v = define_variable_loc (p, len, "", o_file, 0, fstart); + + v->export = v_noexport; + } + + free (ap); + } + goto rule_complete; + } + + skip_conditionals: + if (word1eq ("vpath")) + { + char *pattern; + unsigned int len; + p2 = variable_expand (p2); + p = find_next_token (&p2, &len); + if (p != 0) + { + pattern = savestring (p, len); + p = find_next_token (&p2, &len); + /* No searchpath means remove all previous + selective VPATH's with the same pattern. */ + } + else + /* No pattern means remove all previous selective VPATH's. */ + pattern = 0; + construct_vpath_list (pattern, p); + if (pattern != 0) + free (pattern); + + goto rule_complete; + } + + if (word1eq ("include") || word1eq ("-include") || word1eq ("sinclude")) + { + /* We have found an `include' line specifying a nested + makefile to be read at this point. */ + struct conditionals *save; + struct conditionals new_conditionals; + struct nameseq *files; + /* "-include" (vs "include") says no error if the file does not + exist. "sinclude" is an alias for this from SGI. */ + int noerror = (p[0] != 'i'); + + p = allocated_variable_expand (p2); + if (*p == '\0') + { + error (fstart, + _("no file name for `%sinclude'"), noerror ? "-" : ""); + continue; + } + + /* Parse the list of file names. */ + p2 = p; + files = multi_glob (parse_file_seq (&p2, '\0', + sizeof (struct nameseq), + 1), + sizeof (struct nameseq)); + free (p); + + /* Save the state of conditionals and start + the included makefile with a clean slate. */ + save = install_conditionals (&new_conditionals); + + /* Record the rules that are waiting so they will determine + the default goal before those in the included makefile. */ + record_waiting_files (); + + /* Read each included makefile. */ + while (files != 0) + { + struct nameseq *next = files->next; + char *name = files->name; + int r; + + free ((char *)files); + files = next; + + r = eval_makefile (name, (RM_INCLUDED | RM_NO_TILDE + | (noerror ? RM_DONTCARE : 0))); + if (!r) + { + if (!noerror) + error (fstart, "%s: %s", name, strerror (errno)); + free (name); + } + } + + /* Restore conditional state. */ + restore_conditionals (save); + + goto rule_complete; + } + + if (try_variable_definition (fstart, p, o_file, 0)) + /* This line has been dealt with. */ + goto rule_complete; + + if (line[0] == '\t') + { + p = collapsed; /* Ignore comments, etc. */ + while (isblank ((unsigned char)*p)) + ++p; + if (*p == '\0') + /* The line is completely blank; that is harmless. */ + continue; + + /* This line starts with a tab but was not caught above + because there was no preceding target, and the line + might have been usable as a variable definition. + But now we know it is definitely lossage. */ + fatal(fstart, _("commands commence before first target")); + } + + /* This line describes some target files. This is complicated by + the existence of target-specific variables, because we can't + expand the entire line until we know if we have one or not. So + we expand the line word by word until we find the first `:', + then check to see if it's a target-specific variable. + + In this algorithm, `lb_next' will point to the beginning of the + unexpanded parts of the input buffer, while `p2' points to the + parts of the expanded buffer we haven't searched yet. */ +#ifdef DUMP_RULE /* Nick */ + fflush(stderr); + printf("\n%s\n", line); +#endif + + { + enum make_word_type wtype; + enum variable_origin v_origin; + int exported; + char *cmdleft, *semip, *lb_next; + unsigned int len, plen = 0; + char *colonp; + + /* Record the previous rule. */ + + record_waiting_files (); + tgts_started = fstart->lineno; + + /* Search the line for an unquoted ; that is not after an + unquoted #. */ + cmdleft = find_char_unquote (line, ';', '#', 0); + if (cmdleft != 0 && *cmdleft == '#') + { + /* We found a comment before a semicolon. */ + *cmdleft = '\0'; + cmdleft = 0; + } + else if (cmdleft != 0) + /* Found one. Cut the line short there before expanding it. */ + *(cmdleft++) = '\0'; + semip = cmdleft; + + collapse_continuations (line); + + /* We can't expand the entire line, since if it's a per-target + variable we don't want to expand it. So, walk from the + beginning, expanding as we go, and looking for "interesting" + chars. The first word is always expandable. */ + wtype = get_next_mword(line, NULL, &lb_next, &len); + switch (wtype) + { + case w_eol: + if (cmdleft != 0) + fatal(fstart, _("missing rule before commands")); + /* This line contained something but turned out to be nothing + but whitespace (a comment?). */ + continue; + + case w_colon: + case w_dcolon: + /* We accept and ignore rules without targets for + compatibility with SunOS 4 make. */ + no_targets = 1; + continue; + + default: + break; + } + + p2 = variable_expand_string(NULL, lb_next, len); +#if 0 /* Nick */ + printf("text = \"%s\"\n", p2); +#endif + while (1) + { + lb_next += len; + if (cmdleft == 0) + { + /* Look for a semicolon in the expanded line. */ + cmdleft = find_char_unquote (p2, ';', 0, 0); + + if (cmdleft != 0) + { + unsigned long p2_off = p2 - variable_buffer; + unsigned long cmd_off = cmdleft - variable_buffer; + char *pend = p2 + strlen(p2); + + /* Append any remnants of lb, then cut the line short + at the semicolon. */ + *cmdleft = '\0'; + + /* One school of thought says that you shouldn't expand + here, but merely copy, since now you're beyond a ";" + and into a command script. However, the old parser + expanded the whole line, so we continue that for + backwards-compatiblity. Also, it wouldn't be + entirely consistent, since we do an unconditional + expand below once we know we don't have a + target-specific variable. */ + (void)variable_expand_string(pend, lb_next, (long)-1); + lb_next += strlen(lb_next); + p2 = variable_buffer + p2_off; + cmdleft = variable_buffer + cmd_off + 1; + } + } + + colonp = find_char_unquote(p2, ':', 0, 0); +#ifdef HAVE_DOS_PATHS + /* The drive spec brain-damage strikes again... */ + /* Note that the only separators of targets in this context + are whitespace and a left paren. If others are possible, + they should be added to the string in the call to index. */ + while (colonp && (colonp[1] == '/' || colonp[1] == '\\') && + colonp > p2 && isalpha ((unsigned char)colonp[-1]) && + (colonp == p2 + 1 || strchr (" \t(", colonp[-2]) != 0)) + colonp = find_char_unquote(colonp + 1, ':', 0, 0); +#endif + if (colonp != 0) + break; + + wtype = get_next_mword(lb_next, NULL, &lb_next, &len); + if (wtype == w_eol) + break; + + p2 += strlen(p2); + *(p2++) = ' '; + p2 = variable_expand_string(p2, lb_next, len); +#if 0 /* Nick */ + printf("more = \"%s\"\n", p2); +#endif + /* We don't need to worry about cmdleft here, because if it was + found in the variable_buffer the entire buffer has already + been expanded... we'll never get here. */ + } + + p2 = next_token (variable_buffer); + + /* If the word we're looking at is EOL, see if there's _anything_ + on the line. If not, a variable expanded to nothing, so ignore + it. If so, we can't parse this line so punt. */ + if (wtype == w_eol) + { + if (*p2 != '\0') + /* There's no need to be ivory-tower about this: check for + one of the most common bugs found in makefiles... */ + fatal (fstart, _("missing separator%s"), + !strneq(line, " ", 8) ? "" + : _(" (did you mean TAB instead of 8 spaces?)")); + continue; + } + + /* Make the colon the end-of-string so we know where to stop + looking for targets. */ + *colonp = '\0'; + filenames = multi_glob (parse_file_seq (&p2, '\0', + sizeof (struct nameseq), + 1), + sizeof (struct nameseq)); + *p2 = ':'; + + if (!filenames) + { + /* We accept and ignore rules without targets for + compatibility with SunOS 4 make. */ + no_targets = 1; + continue; + } + /* This should never be possible; we handled it above. */ + assert (*p2 != '\0'); + ++p2; + + /* Is this a one-colon or two-colon entry? */ + two_colon = *p2 == ':'; + if (two_colon) + p2++; + + /* Test to see if it's a target-specific variable. Copy the rest + of the buffer over, possibly temporarily (we'll expand it later + if it's not a target-specific variable). PLEN saves the length + of the unparsed section of p2, for later. */ + if (*lb_next != '\0') + { + unsigned int l = p - variable_buffer; + unsigned int l2 = p2 - variable_buffer; + plen = strlen (p2); + (void) variable_buffer_output (p2+plen, + lb_next, strlen (lb_next)+1); + p = variable_buffer + l; + p2 = variable_buffer + l2; + } + + /* See if it's an "override" or "export" keyword; if so see if what + comes after it looks like a variable definition. */ + + wtype = get_next_mword (p2, NULL, &p, &len); + + v_origin = o_file; + exported = 0; + if (wtype == w_static) + if (word1eq ("override")) + { + v_origin = o_override; + wtype = get_next_mword (p+len, NULL, &p, &len); + } + else if (word1eq ("export")) + { + exported = 1; + wtype = get_next_mword (p+len, NULL, &p, &len); + } + + if (wtype != w_eol) + wtype = get_next_mword (p+len, NULL, NULL, NULL); + + if (wtype == w_varassign) + { + /* If there was a semicolon found, add it back, plus anything + after it. */ + if (semip) + { + unsigned int l = p - variable_buffer; + *(--semip) = ';'; + variable_buffer_output (p2 + strlen (p2), + semip, strlen (semip)+1); + p = variable_buffer + l; + } + record_target_var (filenames, p, two_colon, v_origin, exported, + fstart); + filenames = 0; + continue; + } + + /* This is a normal target, _not_ a target-specific variable. + Unquote any = in the dependency list. */ + find_char_unquote (lb_next, '=', 0, 0); + + /* We have some targets, so don't ignore the following commands. */ + no_targets = 0; + + /* Expand the dependencies, etc. */ + if (*lb_next != '\0') + { + unsigned int l = p2 - variable_buffer; + (void) variable_expand_string (p2 + plen, lb_next, (long)-1); + p2 = variable_buffer + l; + + /* Look for a semicolon in the expanded line. */ + if (cmdleft == 0) + { + cmdleft = find_char_unquote (p2, ';', 0, 0); + if (cmdleft != 0) + *(cmdleft++) = '\0'; + } + } + + /* Do any of the prerequisites appear to have $@ etc.? */ + have_sysv_atvar = 0; + if (!posix_pedantic) + for (p = strchr (p2, '$'); p != 0; p = strchr (p+1, '$')) + if (p[1] == '@' || ((p[1] == '(' || p[1] == '{') && p[2] == '@')) + { + have_sysv_atvar = 1; + break; + } + + /* Is this a static pattern rule: `target: %targ: %dep; ...'? */ + p = strchr (p2, ':'); + while (p != 0 && p[-1] == '\\') + { + register char *q = &p[-1]; + register int backslash = 0; + while (*q-- == '\\') + backslash = !backslash; + if (backslash) + p = strchr (p + 1, ':'); + else + break; + } +#ifdef _AMIGA + /* Here, the situation is quite complicated. Let's have a look + at a couple of targets: + + install: dev:make + + dev:make: make + + dev:make:: xyz + + The rule is that it's only a target, if there are TWO :'s + OR a space around the :. + */ + if (p && !(isspace ((unsigned char)p[1]) || !p[1] + || isspace ((unsigned char)p[-1]))) + p = 0; +#endif +#ifdef HAVE_DOS_PATHS + { + int check_again; + + do { + check_again = 0; + /* For DOS-style paths, skip a "C:\..." or a "C:/..." */ + if (p != 0 && (p[1] == '\\' || p[1] == '/') && + isalpha ((unsigned char)p[-1]) && + (p == p2 + 1 || strchr (" \t:(", p[-2]) != 0)) { + p = strchr (p + 1, ':'); + check_again = 1; + } + } while (check_again); + } +#endif + if (p != 0) + { + struct nameseq *target; + target = parse_file_seq (&p2, ':', sizeof (struct nameseq), 1); + ++p2; + if (target == 0) + fatal (fstart, _("missing target pattern")); + else if (target->next != 0) + { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "target patterns:"); + while (target) + { + fprintf(stderr, " \"%s\"", target->name); + target = target->next; + } + fprintf(stderr, "\n"); +#endif + fatal (fstart, _("multiple target patterns")); + } + pattern = target->name; + pattern_percent = find_percent (pattern); + if (pattern_percent == 0) + { +#if 1 /* Nick */ + fflush(stdout); + fprintf(stderr, "target pattern: \"%s\"\n", pattern); +#endif + fatal (fstart, _("target pattern contains no `%%'")); + } + free((char *)target); + } + else + pattern = 0; + + /* Parse the dependencies. */ + deps = (struct dep *) + multi_glob (parse_file_seq (&p2, '|', sizeof (struct dep), 1), + sizeof (struct dep)); + if (*p2) + { + /* Files that follow '|' are special prerequisites that + need only exist in order to satisfy the dependency. + Their modification times are irrelevant. */ + struct dep **deps_ptr = &deps; + struct dep *d; + for (deps_ptr = &deps; *deps_ptr; deps_ptr = &(*deps_ptr)->next) + ; + ++p2; + *deps_ptr = (struct dep *) + multi_glob (parse_file_seq (&p2, '\0', sizeof (struct dep), 1), + sizeof (struct dep)); + for (d = *deps_ptr; d != 0; d = d->next) + d->ignore_mtime = 1; + } + + commands_idx = 0; + if (cmdleft != 0) + { + /* Semicolon means rest of line is a command. */ + unsigned int len = strlen (cmdleft); + + cmds_started = fstart->lineno; + + /* Add this command line to the buffer. */ + if (len + 2 > commands_len) + { + commands_len = (len + 2) * 2; + commands = (char *) xrealloc (commands, commands_len); + } + bcopy (cmdleft, commands, len); + commands_idx += len; + commands[commands_idx++] = '\n'; + } + + continue; + } + + /* We get here except in the case that we just read a rule line. + Record now the last rule we read, so following spurious + commands are properly diagnosed. */ + rule_complete: + record_waiting_files (); + } + +#undef word1eq + + if (conditionals->if_cmds) + fatal (fstart, _("missing `endif'")); + + /* At eof, record the last rule. */ + record_waiting_files (); + + if (collapsed) + free ((char *) collapsed); + free ((char *) commands); + + return 1; +} + + +/* Execute a `define' directive. + The first line has already been read, and NAME is the name of + the variable to be defined. The following lines remain to be read. */ + +static void +do_define (char *name, unsigned int namelen, + enum variable_origin origin, struct ebuffer *ebuf) +{ + struct floc defstart; + long nlines = 0; + int nlevels = 1; + unsigned int length = 100; + char *definition = (char *) xmalloc (length); + unsigned int idx = 0; + char *p; + + /* Expand the variable name. */ + char *var = (char *) alloca (namelen + 1); + bcopy (name, var, namelen); + var[namelen] = '\0'; + var = variable_expand (var); + + defstart = ebuf->floc; + + while (1) + { + unsigned int len; + char *line; + + ebuf->floc.lineno += nlines; + nlines = readline (ebuf); + + /* If there is nothing left to eval, we're done. */ + if (nlines < 0) + break; + + line = ebuf->buffer; + + collapse_continuations (line); + + /* If the line doesn't begin with a tab, test to see if it introduces + another define, or ends one. */ + + /* Stop if we find an 'endef' */ + if (line[0] != '\t') + { + p = next_token (line); + len = strlen (p); + + /* If this is another 'define', increment the level count. */ + if ((len == 6 || (len > 6 && isblank ((unsigned char)p[6]))) + && strneq (p, "define", 6)) + ++nlevels; + + /* If this is an 'endef', decrement the count. If it's now 0, + we've found the last one. */ + else if ((len == 5 || (len > 5 && isblank ((unsigned char)p[5]))) + && strneq (p, "endef", 5)) + { + p += 5; + remove_comments (p); + if (*next_token (p) != '\0') + error (&ebuf->floc, + _("Extraneous text after `endef' directive")); + + if (--nlevels == 0) + { + /* Define the variable. */ + if (idx == 0) + definition[0] = '\0'; + else + definition[idx - 1] = '\0'; + + /* Always define these variables in the global set. */ + define_variable_global (var, strlen (var), definition, + origin, 1, &defstart); + free (definition); + return; + } + } + } + + /* Otherwise add this line to the variable definition. */ + len = strlen (line); + if (idx + len + 1 > length) + { + length = (idx + len) * 2; + definition = (char *) xrealloc (definition, length + 1); + } + + bcopy (line, &definition[idx], len); + idx += len; + /* Separate lines with a newline. */ + definition[idx++] = '\n'; + } + + /* No `endef'!! */ + fatal (&defstart, _("missing `endef', unterminated `define'")); + + /* NOTREACHED */ + return; +} + +/* Interpret conditional commands "ifdef", "ifndef", "ifeq", + "ifneq", "else" and "endif". + LINE is the input line, with the command as its first word. + + FILENAME and LINENO are the filename and line number in the + current makefile. They are used for error messages. + + Value is -1 if the line is invalid, + 0 if following text should be interpreted, + 1 if following text should be ignored. */ + +static int +conditional_line (char *line, const struct floc *flocp) +{ + int notdef; + char *cmdname; + register unsigned int i; + + if (*line == 'i') + { + /* It's an "if..." command. */ + notdef = line[2] == 'n'; + if (notdef) + { + cmdname = line[3] == 'd' ? "ifndef" : "ifneq"; + line += cmdname[3] == 'd' ? 7 : 6; + } + else + { + cmdname = line[2] == 'd' ? "ifdef" : "ifeq"; + line += cmdname[2] == 'd' ? 6 : 5; + } + } + else + { + /* It's an "else" or "endif" command. */ + notdef = line[1] == 'n'; + cmdname = notdef ? "endif" : "else"; + line += notdef ? 5 : 4; + } + + line = next_token (line); + + if (*cmdname == 'e') + { + if (*line != '\0') + error (flocp, _("Extraneous text after `%s' directive"), cmdname); + /* "Else" or "endif". */ + if (conditionals->if_cmds == 0) + fatal (flocp, _("extraneous `%s'"), cmdname); + /* NOTDEF indicates an `endif' command. */ + if (notdef) + --conditionals->if_cmds; + else if (conditionals->seen_else[conditionals->if_cmds - 1]) + fatal (flocp, _("only one `else' per conditional")); + else + { + /* Toggle the state of ignorance. */ + conditionals->ignoring[conditionals->if_cmds - 1] + = !conditionals->ignoring[conditionals->if_cmds - 1]; + /* Record that we have seen an `else' in this conditional. + A second `else' will be erroneous. */ + conditionals->seen_else[conditionals->if_cmds - 1] = 1; + } + for (i = 0; i < conditionals->if_cmds; ++i) + if (conditionals->ignoring[i]) + return 1; + return 0; + } + + if (conditionals->allocated == 0) + { + conditionals->allocated = 5; + conditionals->ignoring = (char *) xmalloc (conditionals->allocated); + conditionals->seen_else = (char *) xmalloc (conditionals->allocated); + } + + ++conditionals->if_cmds; + if (conditionals->if_cmds > conditionals->allocated) + { + conditionals->allocated += 5; + conditionals->ignoring = (char *) + xrealloc (conditionals->ignoring, conditionals->allocated); + conditionals->seen_else = (char *) + xrealloc (conditionals->seen_else, conditionals->allocated); + } + + /* Record that we have seen an `if...' but no `else' so far. */ + conditionals->seen_else[conditionals->if_cmds - 1] = 0; + + /* Search through the stack to see if we're already ignoring. */ + for (i = 0; i < conditionals->if_cmds - 1; ++i) + if (conditionals->ignoring[i]) + { + /* We are already ignoring, so just push a level + to match the next "else" or "endif", and keep ignoring. + We don't want to expand variables in the condition. */ + conditionals->ignoring[conditionals->if_cmds - 1] = 1; + return 1; + } + + if (cmdname[notdef ? 3 : 2] == 'd') + { + /* "Ifdef" or "ifndef". */ + char *var; + struct variable *v; + register char *p = end_of_token (line); + i = p - line; + p = next_token (p); + if (*p != '\0') + return -1; + + /* Expand the thing we're looking up, so we can use indirect and + constructed variable names. */ + line[i] = '\0'; + var = allocated_variable_expand (line); + + v = lookup_variable (var, strlen (var)); + conditionals->ignoring[conditionals->if_cmds - 1] + = (v != 0 && *v->value != '\0') == notdef; + + free (var); + } + else + { + /* "Ifeq" or "ifneq". */ + char *s1, *s2; + unsigned int len; + char termin = *line == '(' ? ',' : *line; + + if (termin != ',' && termin != '"' && termin != '\'') + return -1; + + s1 = ++line; + /* Find the end of the first string. */ + if (termin == ',') + { + register int count = 0; + for (; *line != '\0'; ++line) + if (*line == '(') + ++count; + else if (*line == ')') + --count; + else if (*line == ',' && count <= 0) + break; + } + else + while (*line != '\0' && *line != termin) + ++line; + + if (*line == '\0') + return -1; + + if (termin == ',') + { + /* Strip blanks after the first string. */ + char *p = line++; + while (isblank ((unsigned char)p[-1])) + --p; + *p = '\0'; + } + else + *line++ = '\0'; + + s2 = variable_expand (s1); + /* We must allocate a new copy of the expanded string because + variable_expand re-uses the same buffer. */ + len = strlen (s2); + s1 = (char *) alloca (len + 1); + bcopy (s2, s1, len + 1); + + if (termin != ',') + /* Find the start of the second string. */ + line = next_token (line); + + termin = termin == ',' ? ')' : *line; + if (termin != ')' && termin != '"' && termin != '\'') + return -1; + + /* Find the end of the second string. */ + if (termin == ')') + { + register int count = 0; + s2 = next_token (line); + for (line = s2; *line != '\0'; ++line) + { + if (*line == '(') + ++count; + else if (*line == ')') + { + if (count <= 0) + break; + else + --count; + } + } + } + else + { + ++line; + s2 = line; + while (*line != '\0' && *line != termin) + ++line; + } + + if (*line == '\0') + return -1; + + *line = '\0'; + line = next_token (++line); + if (*line != '\0') + error (flocp, _("Extraneous text after `%s' directive"), cmdname); + + s2 = variable_expand (s2); + conditionals->ignoring[conditionals->if_cmds - 1] + = streq (s1, s2) == notdef; + } + + /* Search through the stack to see if we're ignoring. */ + for (i = 0; i < conditionals->if_cmds; ++i) + if (conditionals->ignoring[i]) + return 1; + return 0; +} + +/* Remove duplicate dependencies in CHAIN. */ + +static unsigned long +dep_hash_1 (const void *key) +{ + return_STRING_HASH_1 (dep_name ((struct dep const *) key)); +} + +static unsigned long +dep_hash_2 (const void *key) +{ + return_STRING_HASH_2 (dep_name ((struct dep const *) key)); +} + +static int +dep_hash_cmp (const void *x, const void *y) +{ + struct dep *dx = (struct dep *) x; + struct dep *dy = (struct dep *) y; + int cmp = strcmp (dep_name (dx), dep_name (dy)); + + /* If the names are the same but ignore_mtimes are not equal, one of these + is an order-only prerequisite and one isn't. That means that we should + remove the one that isn't and keep the one that is. */ + + if (!cmp && dx->ignore_mtime != dy->ignore_mtime) + dx->ignore_mtime = dy->ignore_mtime = 0; + + return cmp; +} + + +void +uniquize_deps (struct dep *chain) +{ + struct hash_table deps; + register struct dep **depp; + + hash_init (&deps, 500, dep_hash_1, dep_hash_2, dep_hash_cmp); + + /* Make sure that no dependencies are repeated. This does not + really matter for the purpose of updating targets, but it + might make some names be listed twice for $^ and $?. */ + + depp = &chain; + while (*depp) + { + struct dep *dep = *depp; + struct dep **dep_slot = (struct dep **) hash_find_slot (&deps, dep); + if (HASH_VACANT (*dep_slot)) + { + hash_insert_at (&deps, dep, dep_slot); + depp = &dep->next; + } + else + { + /* Don't bother freeing duplicates. + It's dangerous and little benefit accrues. */ + *depp = dep->next; + } + } + + hash_free (&deps, 0); +} + +/* Record target-specific variable values for files FILENAMES. + TWO_COLON is nonzero if a double colon was used. + + The links of FILENAMES are freed, and so are any names in it + that are not incorporated into other data structures. + + If the target is a pattern, add the variable to the pattern-specific + variable value list. */ + +static void +record_target_var (struct nameseq *filenames, char *defn, int two_colon, + enum variable_origin origin, int exported, + const struct floc *flocp) +{ + struct nameseq *nextf; + struct variable_set_list *global; + + global = current_variable_set_list; + + /* If the variable is an append version, store that but treat it as a + normal recursive variable. */ + + for (; filenames != 0; filenames = nextf) + { + struct variable *v; + register char *name = filenames->name; + char *fname; + char *percent; + struct pattern_var *p; + + nextf = filenames->next; + free ((char *) filenames); + + /* If it's a pattern target, then add it to the pattern-specific + variable list. */ + percent = find_percent (name); + if (percent) + { + /* Get a reference for this pattern-specific variable struct. */ + p = create_pattern_var (name, percent); + p->variable.fileinfo = *flocp; + v = parse_variable_definition (&p->variable, defn); + v->value = xstrdup (v->value); + if (!v) + error (flocp, _("Malformed pattern-specific variable definition")); + fname = p->target; + } + else + { + struct file *f; + + /* Get a file reference for this file, and initialize it. + We don't want to just call enter_file() because that allocates a + new entry if the file is a double-colon, which we don't want in + this situation. */ + f = lookup_file (name); + if (!f) + f = enter_file (name); + else if (f->double_colon) + f = f->double_colon; + + initialize_file_variables (f, 1); + fname = f->name; + + current_variable_set_list = f->variables; + v = try_variable_definition (flocp, defn, origin, 1); + if (!v) + error (flocp, _("Malformed target-specific variable definition")); + current_variable_set_list = global; + } + + /* Set up the variable to be *-specific. */ + v->origin = origin; + v->per_target = 1; + if (exported) + v->export = v_export; + + /* If it's not an override, check to see if there was a command-line + setting. If so, reset the value. */ + if (origin != o_override) + { + struct variable *gv; + int len = strlen(v->name); + + gv = lookup_variable (v->name, len); + if (gv && (gv->origin == o_env_override || gv->origin == o_command)) + { + if (v->value != 0) + free (v->value); + v->value = xstrdup (gv->value); + v->origin = gv->origin; + v->recursive = gv->recursive; + v->append = 0; + } + } + + /* Free name if not needed further. */ + if (name != fname && (name < fname || name > fname + strlen (fname))) + free (name); + } +} + +/* Record a description line for files FILENAMES, + with dependencies DEPS, commands to execute described + by COMMANDS and COMMANDS_IDX, coming from FILENAME:COMMANDS_STARTED. + TWO_COLON is nonzero if a double colon was used. + If not nil, PATTERN is the `%' pattern to make this + a static pattern rule, and PATTERN_PERCENT is a pointer + to the `%' within it. + + The links of FILENAMES are freed, and so are any names in it + that are not incorporated into other data structures. */ + +static void +record_files (struct nameseq *filenames, char *pattern, char *pattern_percent, + struct dep *deps, unsigned int cmds_started, char *commands, + unsigned int commands_idx, int two_colon, + int have_sysv_atvar, const struct floc *flocp, int set_default) +{ + struct nameseq *nextf; + int implicit = 0; + unsigned int max_targets = 0, target_idx = 0; + char **targets = 0, **target_percents = 0; + struct commands *cmds; + + if (commands_idx > 0) + { + cmds = (struct commands *) xmalloc (sizeof (struct commands)); + cmds->fileinfo.filenm = flocp->filenm; + cmds->fileinfo.lineno = cmds_started; + cmds->commands = savestring (commands, commands_idx); + cmds->command_lines = 0; + } + else + cmds = 0; + + for (; filenames != 0; filenames = nextf) + { + char *name = filenames->name; + struct file *f; + struct dep *d; + struct dep *this; + char *implicit_percent; + + nextf = filenames->next; + free (filenames); + + /* Check for .POSIX. We used to do this in snap_deps() but that's not + good enough: it doesn't happen until after the makefile is read, + which means we cannot use its value during parsing. */ + + if (streq (name, ".POSIX")) + posix_pedantic = 1; + + implicit_percent = find_percent (name); + implicit |= implicit_percent != 0; + + if (implicit && pattern != 0) + fatal (flocp, _("mixed implicit and static pattern rules")); + + if (implicit && implicit_percent == 0) + fatal (flocp, _("mixed implicit and normal rules")); + + if (implicit) + { + if (targets == 0) + { + max_targets = 5; + targets = (char **) xmalloc (5 * sizeof (char *)); + target_percents = (char **) xmalloc (5 * sizeof (char *)); + target_idx = 0; + } + else if (target_idx == max_targets - 1) + { + max_targets += 5; + targets = (char **) xrealloc ((char *) targets, + max_targets * sizeof (char *)); + target_percents + = (char **) xrealloc ((char *) target_percents, + max_targets * sizeof (char *)); + } + targets[target_idx] = name; + target_percents[target_idx] = implicit_percent; + ++target_idx; + continue; + } + + /* If there are multiple filenames, copy the chain DEPS + for all but the last one. It is not safe for the same deps + to go in more than one place in the data base. */ + this = nextf != 0 ? copy_dep_chain (deps) : deps; + + if (pattern != 0) + { + /* If this is an extended static rule: + `targets: target%pattern: dep%pattern; cmds', + translate each dependency pattern into a plain filename + using the target pattern and this target's name. */ + if (!pattern_matches (pattern, pattern_percent, name)) + { + /* Give a warning if the rule is meaningless. */ + error (flocp, + _("target `%s' doesn't match the target pattern"), name); + this = 0; + } + else + { + /* We use patsubst_expand to do the work of translating + the target pattern, the target's name and the dependencies' + patterns into plain dependency names. */ + char *buffer = variable_expand (""); + + for (d = this; d != 0; d = d->next) + { + char *o; + char *percent = find_percent (d->name); + if (percent == 0) + continue; + o = patsubst_expand (buffer, name, pattern, d->name, + pattern_percent, percent); + /* If the name expanded to the empty string, that's + illegal. */ + if (o == buffer) + fatal (flocp, + _("target `%s' leaves prerequisite pattern empty"), + name); + free (d->name); + d->name = savestring (buffer, o - buffer); + } + } + } + + /* If at least one of the dependencies uses $$@ etc. deal with that. + It would be very nice and very simple to just expand everything, but + it would break a lot of backward compatibility. Maybe that's OK + since we're just emulating a SysV function, and if we do that then + why not emulate it completely (that's what SysV make does: it + re-expands the entire prerequisite list, all the time, with $@ + etc. in scope). But, it would be a pain indeed to document this + ("iff you use $$@, your prerequisite lists is expanded twice...") + Ouch. Maybe better to make the code more complex. */ + + if (have_sysv_atvar) + { + char *p; + int tlen = strlen (name); + char *fnp = strrchr (name, '/'); + int dlen; + int flen; + + if (fnp) + { + dlen = fnp - name; + ++fnp; + flen = strlen (fnp); + } + else + { + dlen = 0; + fnp = name; + flen = tlen; + } + + + for (d = this; d != 0; d = d->next) + for (p = strchr (d->name, '$'); p != 0; p = strchr (p+1, '$')) + { + char *s = p; + char *at; + int atlen; + + /* If it's '$@', '$(@', or '${@', it's escaped */ + if ((++p)[0] == '$' + && (p[1] == '@' + || ((p[1] == '(' || p[1] == '{') && p[2] == '@'))) + { + bcopy (p, s, strlen (p)+1); + continue; + } + + /* Maybe found one. We like anything of any form matching @, + [({]@[}):], or [({]@[DF][}):]. */ + + if (! (p[0] == '@' + || ((p[0] == '(' || p[0] == '{') && (++p)[0] == '@' + && (((++p)[0] == ')' || p[0] == '}' || p[0] == ':') + || ((p[1] == ')' || p[1] == '}' || p[1] == ':') + && (p[0] == 'D' || p[0] == 'F')))))) + continue; + + /* Found one. Compute the length and string ptr. Move p + past the variable reference. */ + switch (p[0]) + { + case 'D': + atlen = dlen; + at = name; + p += 2; + break; + + case 'F': + atlen = flen; + at = fnp; + p += 2; + break; + + default: + atlen = tlen; + at = name; + ++p; + break; + } + + /* Get more space. */ + { + int soff = s - d->name; + int poff = p - d->name; + d->name = (char *) xrealloc (d->name, + strlen (d->name) + atlen + 1); + s = d->name + soff; + p = d->name + poff; + } + + /* Copy the string over. */ + bcopy(p, s+atlen, strlen (p)+1); + bcopy(at, s, atlen); + p = s + atlen - 1; + } + } + + if (!two_colon) + { + /* Single-colon. Combine these dependencies + with others in file's existing record, if any. */ + f = enter_file (name); + + if (f->double_colon) + fatal (flocp, + _("target file `%s' has both : and :: entries"), f->name); + + /* If CMDS == F->CMDS, this target was listed in this rule + more than once. Just give a warning since this is harmless. */ + if (cmds != 0 && cmds == f->cmds) + error (flocp, + _("target `%s' given more than once in the same rule."), + f->name); + + /* Check for two single-colon entries both with commands. + Check is_target so that we don't lose on files such as .c.o + whose commands were preinitialized. */ + else if (cmds != 0 && f->cmds != 0 && f->is_target) + { + error (&cmds->fileinfo, + _("warning: overriding commands for target `%s'"), + f->name); + error (&f->cmds->fileinfo, + _("warning: ignoring old commands for target `%s'"), + f->name); + } + + f->is_target = 1; + + /* Defining .DEFAULT with no deps or cmds clears it. */ + if (f == default_file && this == 0 && cmds == 0) + f->cmds = 0; + if (cmds != 0) + f->cmds = cmds; + /* Defining .SUFFIXES with no dependencies + clears out the list of suffixes. */ + if (f == suffix_file && this == 0) + { + d = f->deps; + while (d != 0) + { + struct dep *nextd = d->next; + free (d->name); + free ((char *)d); + d = nextd; + } + f->deps = 0; + } + else if (f->deps != 0) + { + /* Add the file's old deps and the new ones in THIS together. */ + + struct dep *firstdeps, *moredeps; + if (cmds != 0) + { + /* This is the rule with commands, so put its deps first. + The rationale behind this is that $< expands to the + first dep in the chain, and commands use $< expecting + to get the dep that rule specifies. */ + firstdeps = this; + moredeps = f->deps; + } + else + { + /* Append the new deps to the old ones. */ + firstdeps = f->deps; + moredeps = this; + } + + if (firstdeps == 0) + firstdeps = moredeps; + else + { + d = firstdeps; + while (d->next != 0) + d = d->next; + d->next = moredeps; + } + + f->deps = firstdeps; + } + else + f->deps = this; + + /* If this is a static pattern rule, set the file's stem to + the part of its name that matched the `%' in the pattern, + so you can use $* in the commands. */ + if (pattern != 0) + { + static char *percent = "%"; + char *buffer = variable_expand (""); + char *o = patsubst_expand (buffer, name, pattern, percent, + pattern_percent, percent); + f->stem = savestring (buffer, o - buffer); + } + } + else + { + /* Double-colon. Make a new record + even if the file already has one. */ + f = lookup_file (name); + /* Check for both : and :: rules. Check is_target so + we don't lose on default suffix rules or makefiles. */ + if (f != 0 && f->is_target && !f->double_colon) + fatal (flocp, + _("target file `%s' has both : and :: entries"), f->name); + f = enter_file (name); + /* If there was an existing entry and it was a double-colon + entry, enter_file will have returned a new one, making it the + prev pointer of the old one, and setting its double_colon + pointer to the first one. */ + if (f->double_colon == 0) + /* This is the first entry for this name, so we must + set its double_colon pointer to itself. */ + f->double_colon = f; + f->is_target = 1; + f->deps = this; + f->cmds = cmds; + } + + /* Free name if not needed further. */ + if (f != 0 && name != f->name + && (name < f->name || name > f->name + strlen (f->name))) + { + free (name); + name = f->name; + } + + /* See if this is first target seen whose name does + not start with a `.', unless it contains a slash. */ + if (default_goal_file == 0 && set_default + && (*name != '.' || strchr (name, '/') != 0 +#ifdef HAVE_DOS_PATHS + || strchr (name, '\\') != 0 +#endif + )) + { + int reject = 0; + + /* If this file is a suffix, don't + let it be the default goal file. */ + + for (d = suffix_file->deps; d != 0; d = d->next) + { + register struct dep *d2; + if (*dep_name (d) != '.' && streq (name, dep_name (d))) + { + reject = 1; + break; + } + for (d2 = suffix_file->deps; d2 != 0; d2 = d2->next) + { + register unsigned int len = strlen (dep_name (d2)); + if (!strneq (name, dep_name (d2), len)) + continue; + if (streq (name + len, dep_name (d))) + { + reject = 1; + break; + } + } + if (reject) + break; + } + + if (!reject) + default_goal_file = f; + } + } + + if (implicit) + { + targets[target_idx] = 0; + target_percents[target_idx] = 0; + create_pattern_rule (targets, target_percents, two_colon, deps, cmds, 1); + free ((char *) target_percents); + } +} + +/* Search STRING for an unquoted STOPCHAR or blank (if BLANK is nonzero). + Backslashes quote STOPCHAR, blanks if BLANK is nonzero, and backslash. + Quoting backslashes are removed from STRING by compacting it into + itself. Returns a pointer to the first unquoted STOPCHAR if there is + one, or nil if there are none. */ + +char * +find_char_unquote (char *string, int stop1, int stop2, int blank) +{ + unsigned int string_len = 0; + register char *p = string; + + while (1) + { + if (stop2 && blank) + while (*p != '\0' && *p != stop1 && *p != stop2 + && ! isblank ((unsigned char) *p)) + ++p; + else if (stop2) + while (*p != '\0' && *p != stop1 && *p != stop2) + ++p; + else if (blank) + while (*p != '\0' && *p != stop1 + && ! isblank ((unsigned char) *p)) + ++p; + else + while (*p != '\0' && *p != stop1) + ++p; + + if (*p == '\0') + break; + + if (p > string && p[-1] == '\\') + { + /* Search for more backslashes. */ + register int i = -2; + while (&p[i] >= string && p[i] == '\\') + --i; + ++i; + /* Only compute the length if really needed. */ + if (string_len == 0) + string_len = strlen (string); + /* The number of backslashes is now -I. + Copy P over itself to swallow half of them. */ + bcopy (&p[i / 2], &p[i], (string_len - (p - string)) - (i / 2) + 1); + p += i / 2; + if (i % 2 == 0) + /* All the backslashes quoted each other; the STOPCHAR was + unquoted. */ + return p; + + /* The STOPCHAR was quoted by a backslash. Look for another. */ + } + else + /* No backslash in sight. */ + return p; + } + + /* Never hit a STOPCHAR or blank (with BLANK nonzero). */ + return 0; +} + +/* Search PATTERN for an unquoted %. */ + +char * +find_percent (char *pattern) +{ + return find_char_unquote (pattern, '%', 0, 0); +} + +/* Parse a string into a sequence of filenames represented as a + chain of struct nameseq's in reverse order and return that chain. + + The string is passed as STRINGP, the address of a string pointer. + The string pointer is updated to point at the first character + not parsed, which either is a null char or equals STOPCHAR. + + SIZE is how big to construct chain elements. + This is useful if we want them actually to be other structures + that have room for additional info. + + If STRIP is nonzero, strip `./'s off the beginning. */ + +struct nameseq * +parse_file_seq (char **stringp, int stopchar, unsigned int size, int strip) +{ + register struct nameseq *new = 0; + register struct nameseq *new1, *lastnew1; + register char *p = *stringp; + char *q; + char *name; + +#ifdef VMS +# define VMS_COMMA ',' +#else +# define VMS_COMMA 0 +#endif + + while (1) + { + /* Skip whitespace; see if any more names are left. */ + p = next_token (p); + if (*p == '\0') + break; + if (*p == stopchar) + break; + + /* Yes, find end of next name. */ + q = p; + p = find_char_unquote (q, stopchar, VMS_COMMA, 1); +#ifdef VMS + /* convert comma separated list to space separated */ + if (p && *p == ',') + *p =' '; +#endif +#ifdef _AMIGA + if (stopchar == ':' && p && *p == ':' + && !(isspace ((unsigned char)p[1]) || !p[1] + || isspace ((unsigned char)p[-1]))) + { + p = find_char_unquote (p+1, stopchar, VMS_COMMA, 1); + } +#endif +#ifdef HAVE_DOS_PATHS + /* For DOS paths, skip a "C:\..." or a "C:/..." until we find the + first colon which isn't followed by a slash or a backslash. + Note that tokens separated by spaces should be treated as separate + tokens since make doesn't allow path names with spaces */ + if (stopchar == ':') + while (p != 0 && !isspace ((unsigned char)*p) && + (p[1] == '\\' || p[1] == '/') && isalpha ((unsigned char)p[-1])) + p = find_char_unquote (p + 1, stopchar, VMS_COMMA, 1); +#endif + if (p == 0) + p = q + strlen (q); + + if (strip) +#ifdef VMS + /* Skip leading `[]'s. */ + while (p - q > 2 && q[0] == '[' && q[1] == ']') +#else + /* Skip leading `./'s. */ + while (p - q > 2 && q[0] == '.' && q[1] == '/') +#endif + { + q += 2; /* Skip "./". */ + while (q < p && *q == '/') + /* Skip following slashes: ".//foo" is "foo", not "/foo". */ + ++q; + } + + /* Extract the filename just found, and skip it. */ + + if (q == p) + /* ".///" was stripped to "". */ +#ifdef VMS + continue; +#else +#ifdef _AMIGA + name = savestring ("", 0); +#else + name = savestring ("./", 2); +#endif +#endif + else +#ifdef VMS +/* VMS filenames can have a ':' in them but they have to be '\'ed but we need + * to remove this '\' before we can use the filename. + * Savestring called because q may be read-only string constant. + */ + { + char *qbase = xstrdup (q); + char *pbase = qbase + (p-q); + char *q1 = qbase; + char *q2 = q1; + char *p1 = pbase; + + while (q1 != pbase) + { + if (*q1 == '\\' && *(q1+1) == ':') + { + q1++; + p1--; + } + *q2++ = *q1++; + } + name = savestring (qbase, p1 - qbase); + free (qbase); + } +#else + name = savestring (q, p - q); +#endif + + /* Add it to the front of the chain. */ + new1 = (struct nameseq *) xmalloc (size); + new1->name = name; + new1->next = new; + new = new1; + } + +#ifndef NO_ARCHIVES + + /* Look for multi-word archive references. + They are indicated by a elt ending with an unmatched `)' and + an elt further down the chain (i.e., previous in the file list) + with an unmatched `(' (e.g., "lib(mem"). */ + + new1 = new; + lastnew1 = 0; + while (new1 != 0) + if (new1->name[0] != '(' /* Don't catch "(%)" and suchlike. */ + && new1->name[strlen (new1->name) - 1] == ')' + && strchr (new1->name, '(') == 0) + { + /* NEW1 ends with a `)' but does not contain a `('. + Look back for an elt with an opening `(' but no closing `)'. */ + + struct nameseq *n = new1->next, *lastn = new1; + char *paren = 0; + while (n != 0 && (paren = strchr (n->name, '(')) == 0) + { + lastn = n; + n = n->next; + } + if (n != 0 + /* Ignore something starting with `(', as that cannot actually + be an archive-member reference (and treating it as such + results in an empty file name, which causes much lossage). */ + && n->name[0] != '(') + { + /* N is the first element in the archive group. + Its name looks like "lib(mem" (with no closing `)'). */ + + char *libname; + + /* Copy "lib(" into LIBNAME. */ + ++paren; + libname = (char *) alloca (paren - n->name + 1); + bcopy (n->name, libname, paren - n->name); + libname[paren - n->name] = '\0'; + + if (*paren == '\0') + { + /* N was just "lib(", part of something like "lib( a b)". + Edit it out of the chain and free its storage. */ + lastn->next = n->next; + free (n->name); + free ((char *) n); + /* LASTN->next is the new stopping elt for the loop below. */ + n = lastn->next; + } + else + { + /* Replace N's name with the full archive reference. */ + name = concat (libname, paren, ")"); + free (n->name); + n->name = name; + } + + if (new1->name[1] == '\0') + { + /* NEW1 is just ")", part of something like "lib(a b )". + Omit it from the chain and free its storage. */ + if (lastnew1 == 0) + new = new1->next; + else + lastnew1->next = new1->next; + lastn = new1; + new1 = new1->next; + free (lastn->name); + free ((char *) lastn); + } + else + { + /* Replace also NEW1->name, which already has closing `)'. */ + name = concat (libname, new1->name, ""); + free (new1->name); + new1->name = name; + new1 = new1->next; + } + + /* Trace back from NEW1 (the end of the list) until N + (the beginning of the list), rewriting each name + with the full archive reference. */ + + while (new1 != n) + { + name = concat (libname, new1->name, ")"); + free (new1->name); + new1->name = name; + lastnew1 = new1; + new1 = new1->next; + } + } + else + { + /* No frobnication happening. Just step down the list. */ + lastnew1 = new1; + new1 = new1->next; + } + } + else + { + lastnew1 = new1; + new1 = new1->next; + } + +#endif + + *stringp = p; + return new; +} + +/* Find the next line of text in an eval buffer, combining continuation lines + into one line. + Return the number of actual lines read (> 1 if continuation lines). + Returns -1 if there's nothing left in the buffer. + + After this function, ebuf->buffer points to the first character of the + line we just found. + */ + +/* Read a line of text from a STRING. + Since we aren't really reading from a file, don't bother with linenumbers. + */ + +static unsigned long +readstring (struct ebuffer *ebuf) +{ + char *p; + + /* If there is nothing left in this buffer, return 0. */ + if (ebuf->bufnext > ebuf->bufstart + ebuf->size) + return -1; + + /* Set up a new starting point for the buffer, and find the end of the + next logical line (taking into account backslash/newline pairs). */ + + p = ebuf->buffer = ebuf->bufnext; + + while (1) + { + int backslash = 0; + + /* Find the next newline. Keep track of backslashes as we look. */ + for (; *p != '\n' && *p != '\0'; ++p) + if (*p == '\\') + backslash = !backslash; + + /* If we got to the end of the string or a newline with no backslash, + we're done. */ + if (*p == '\0' || !backslash) + break; + } + + /* Overwrite the newline char. */ + *p = '\0'; + ebuf->bufnext = p+1; + + return 0; +} + +static long +readline (struct ebuffer *ebuf) +{ + char *p; + char *end; + char *start; + long nlines = 0; + + /* The behaviors between string and stream buffers are different enough to + warrant different functions. Do the Right Thing. */ + + if (!ebuf->fp) + return readstring (ebuf); + + /* When reading from a file, we always start over at the beginning of the + buffer for each new line. */ + + p = start = ebuf->bufstart; + end = p + ebuf->size; + *p = '\0'; + + while (fgets (p, end - p, ebuf->fp) != 0) + { + char *p2; + unsigned long len; + int backslash; + + len = strlen (p); + if (len == 0) + { + /* This only happens when the first thing on the line is a '\0'. + It is a pretty hopeless case, but (wonder of wonders) Athena + lossage strikes again! (xmkmf puts NULs in its makefiles.) + There is nothing really to be done; we synthesize a newline so + the following line doesn't appear to be part of this line. */ + error (&ebuf->floc, + _("warning: NUL character seen; rest of line ignored")); + p[0] = '\n'; + len = 1; + } + + /* Jump past the text we just read. */ + p += len; + + /* If the last char isn't a newline, the whole line didn't fit into the + buffer. Get some more buffer and try again. */ + if (p[-1] != '\n') + goto more_buffer; + + /* We got a newline, so add one to the count of lines. */ + ++nlines; + +#if !defined(WINDOWS32) && !defined(__MSDOS__) && !defined(__EMX__) + /* Check to see if the line was really ended with CRLF; if so ignore + the CR. */ + if ((p - start) > 1 && p[-2] == '\r') + { + --p; + p[-1] = '\n'; + } +#endif + + backslash = 0; + for (p2 = p - 2; p2 >= start; --p2) + { + if (*p2 != '\\') + break; + backslash = !backslash; + } + + if (!backslash) + { + p[-1] = '\0'; + break; + } + + /* It was a backslash/newline combo. If we have more space, read + another line. */ + if (end - p >= 80) + continue; + + /* We need more space at the end of our buffer, so realloc it. + Make sure to preserve the current offset of p. */ + more_buffer: + { + unsigned long off = p - start; + ebuf->size *= 2; + start = ebuf->buffer = ebuf->bufstart = (char *) xrealloc (start, + ebuf->size); + p = start + off; + end = start + ebuf->size; + *p = '\0'; + } + } + + if (ferror (ebuf->fp)) + pfatal_with_name (ebuf->floc.filenm); + + /* If we found some lines, return how many. + If we didn't, but we did find _something_, that indicates we read the last + line of a file with no final newline; return 1. + If we read nothing, we're at EOF; return -1. */ + + return nlines ? nlines : p == ebuf->bufstart ? -1 : 1; +} + +/* Parse the next "makefile word" from the input buffer, and return info + about it. + + A "makefile word" is one of: + + w_bogus Should never happen + w_eol End of input + w_static A static word; cannot be expanded + w_variable A word containing one or more variables/functions + w_colon A colon + w_dcolon A double-colon + w_semicolon A semicolon + w_varassign A variable assignment operator (=, :=, +=, or ?=) + + Note that this function is only used when reading certain parts of the + makefile. Don't use it where special rules hold sway (RHS of a variable, + in a command list, etc.) */ + +static enum make_word_type +get_next_mword (char *buffer, char *delim, char **startp, unsigned int *length) +{ + enum make_word_type wtype = w_bogus; + char *p = buffer, *beg; + char c; + + /* Skip any leading whitespace. */ + while (isblank ((unsigned char)*p)) + ++p; + + beg = p; + c = *(p++); + switch (c) + { + case '\0': + wtype = w_eol; + break; + + case ';': + wtype = w_semicolon; + break; + + case '=': + wtype = w_varassign; + break; + + case ':': + wtype = w_colon; + switch (*p) + { + case ':': + ++p; + wtype = w_dcolon; + break; + + case '=': + ++p; + wtype = w_varassign; + break; + } + break; + + case '+': + case '?': + if (*p == '=') + { + ++p; + wtype = w_varassign; + break; + } + + default: + if (delim && strchr (delim, c)) + wtype = w_static; + break; + } + + /* Did we find something? If so, return now. */ + if (wtype != w_bogus) + goto done; + + /* This is some non-operator word. A word consists of the longest + string of characters that doesn't contain whitespace, one of [:=#], + or [?+]=, or one of the chars in the DELIM string. */ + + /* We start out assuming a static word; if we see a variable we'll + adjust our assumptions then. */ + wtype = w_static; + + /* We already found the first value of "c", above. */ + while (1) + { + char closeparen; + int count; + + switch (c) + { + case '\0': + case ' ': + case '\t': + case '=': + goto done_word; + + case ':': +#ifdef HAVE_DOS_PATHS + /* A word CAN include a colon in its drive spec. The drive + spec is allowed either at the beginning of a word, or as part + of the archive member name, like in "libfoo.a(d:/foo/bar.o)". */ + if (!(p - beg >= 2 + && (*p == '/' || *p == '\\') && isalpha ((unsigned char)p[-2]) + && (p - beg == 2 || p[-3] == '('))) +#endif + goto done_word; + + case '$': + c = *(p++); + if (c == '$') + break; + + /* This is a variable reference, so note that it's expandable. + Then read it to the matching close paren. */ + wtype = w_variable; + + if (c == '(') + closeparen = ')'; + else if (c == '{') + closeparen = '}'; + else + /* This is a single-letter variable reference. */ + break; + + for (count=0; *p != '\0'; ++p) + { + if (*p == c) + ++count; + else if (*p == closeparen && --count < 0) + { + ++p; + break; + } + } + break; + + case '?': + case '+': + if (*p == '=') + goto done_word; + break; + + case '\\': + switch (*p) + { + case ':': + case ';': + case '=': + case '\\': + ++p; + break; + } + break; + + default: + if (delim && strchr (delim, c)) + goto done_word; + break; + } + + c = *(p++); + } + done_word: + --p; + + done: + if (startp) + *startp = beg; + if (length) + *length = p - beg; + return wtype; +} + +/* Construct the list of include directories + from the arguments and the default list. */ + +void +construct_include_path (char **arg_dirs) +{ + register unsigned int i; +#ifdef VAXC /* just don't ask ... */ + stat_t stbuf; +#else + struct stat stbuf; +#endif + /* Table to hold the dirs. */ + + register unsigned int defsize = (sizeof (default_include_directories) + / sizeof (default_include_directories[0])); + register unsigned int max = 5; + register char **dirs = (char **) xmalloc ((5 + defsize) * sizeof (char *)); + register unsigned int idx = 0; + +#ifdef __MSDOS__ + defsize++; +#endif + + /* First consider any dirs specified with -I switches. + Ignore dirs that don't exist. */ + + if (arg_dirs != 0) + while (*arg_dirs != 0) + { + char *dir = *arg_dirs++; + int e; + + if (dir[0] == '~') + { + char *expanded = tilde_expand (dir); + if (expanded != 0) + dir = expanded; + } + + EINTRLOOP (e, stat (dir, &stbuf)); + if (e == 0 && S_ISDIR (stbuf.st_mode)) + { + if (idx == max - 1) + { + max += 5; + dirs = (char **) + xrealloc ((char *) dirs, (max + defsize) * sizeof (char *)); + } + dirs[idx++] = dir; + } + else if (dir != arg_dirs[-1]) + free (dir); + } + + /* Now add at the end the standard default dirs. */ + +#ifdef __MSDOS__ + { + /* The environment variable $DJDIR holds the root of the + DJGPP directory tree; add ${DJDIR}/include. */ + struct variable *djdir = lookup_variable ("DJDIR", 5); + + if (djdir) + { + char *defdir = (char *) xmalloc (strlen (djdir->value) + 8 + 1); + + strcat (strcpy (defdir, djdir->value), "/include"); + dirs[idx++] = defdir; + } + } +#endif + + for (i = 0; default_include_directories[i] != 0; ++i) + { + int e; + + EINTRLOOP (e, stat (default_include_directories[i], &stbuf)); + if (e == 0 && S_ISDIR (stbuf.st_mode)) + dirs[idx++] = default_include_directories[i]; + } + + dirs[idx] = 0; + + /* Now compute the maximum length of any name in it. */ + + max_incl_len = 0; + for (i = 0; i < idx; ++i) + { + unsigned int len = strlen (dirs[i]); + /* If dir name is written with a trailing slash, discard it. */ + if (dirs[i][len - 1] == '/') + /* We can't just clobber a null in because it may have come from + a literal string and literal strings may not be writable. */ + dirs[i] = savestring (dirs[i], len - 1); + if (len > max_incl_len) + max_incl_len = len; + } + + include_directories = dirs; +} + +/* Expand ~ or ~USER at the beginning of NAME. + Return a newly malloc'd string or 0. */ + +char * +tilde_expand (char *name) +{ +#ifndef VMS + if (name[1] == '/' || name[1] == '\0') + { + extern char *getenv (); + char *home_dir; + int is_variable; + + { + /* Turn off --warn-undefined-variables while we expand HOME. */ + int save = warn_undefined_variables_flag; + warn_undefined_variables_flag = 0; + + home_dir = allocated_variable_expand ("$(HOME)"); + + warn_undefined_variables_flag = save; + } + + is_variable = home_dir[0] != '\0'; + if (!is_variable) + { + free (home_dir); + home_dir = getenv ("HOME"); + } +#if !defined(_AMIGA) && !defined(WINDOWS32) + if (home_dir == 0 || home_dir[0] == '\0') + { + extern char *getlogin (); + char *logname = getlogin (); + home_dir = 0; + if (logname != 0) + { + struct passwd *p = getpwnam (logname); + if (p != 0) + home_dir = p->pw_dir; + } + } +#endif /* !AMIGA && !WINDOWS32 */ + if (home_dir != 0) + { + char *new = concat (home_dir, "", name + 1); + if (is_variable) + free (home_dir); + return new; + } + } +#if !defined(_AMIGA) && !defined(WINDOWS32) + else + { + struct passwd *pwent; + char *userend = strchr (name + 1, '/'); + if (userend != 0) + *userend = '\0'; + pwent = getpwnam (name + 1); + if (pwent != 0) + { + if (userend == 0) + return xstrdup (pwent->pw_dir); + else + return concat (pwent->pw_dir, "/", userend + 1); + } + else if (userend != 0) + *userend = '/'; + } +#endif /* !AMIGA && !WINDOWS32 */ +#endif /* !VMS */ + return 0; +} + +/* Given a chain of struct nameseq's describing a sequence of filenames, + in reverse of the intended order, return a new chain describing the + result of globbing the filenames. The new chain is in forward order. + The links of the old chain are freed or used in the new chain. + Likewise for the names in the old chain. + + SIZE is how big to construct chain elements. + This is useful if we want them actually to be other structures + that have room for additional info. */ + +struct nameseq * +multi_glob (struct nameseq *chain, unsigned int size) +{ + extern void dir_setup_glob (); + register struct nameseq *new = 0; + register struct nameseq *old; + struct nameseq *nexto; + glob_t gl; + + dir_setup_glob (&gl); + + for (old = chain; old != 0; old = nexto) + { +#ifndef NO_ARCHIVES + char *memname; +#endif + + nexto = old->next; + + if (old->name[0] == '~') + { + char *newname = tilde_expand (old->name); + if (newname != 0) + { + free (old->name); + old->name = newname; + } + } + +#ifndef NO_ARCHIVES + if (ar_name (old->name)) + { + /* OLD->name is an archive member reference. + Replace it with the archive file name, + and save the member name in MEMNAME. + We will glob on the archive name and then + reattach MEMNAME later. */ + char *arname; + ar_parse_name (old->name, &arname, &memname); + free (old->name); + old->name = arname; + } + else + memname = 0; +#endif /* !NO_ARCHIVES */ + + switch (glob (old->name, GLOB_NOCHECK|GLOB_ALTDIRFUNC, NULL, &gl)) + { + case 0: /* Success. */ + { + register int i = gl.gl_pathc; + while (i-- > 0) + { +#ifndef NO_ARCHIVES + if (memname != 0) + { + /* Try to glob on MEMNAME within the archive. */ + struct nameseq *found + = ar_glob (gl.gl_pathv[i], memname, size); + if (found == 0) + { + /* No matches. Use MEMNAME as-is. */ + unsigned int alen = strlen (gl.gl_pathv[i]); + unsigned int mlen = strlen (memname); + struct nameseq *elt + = (struct nameseq *) xmalloc (size); + if (size > sizeof (struct nameseq)) + bzero (((char *) elt) + sizeof (struct nameseq), + size - sizeof (struct nameseq)); + elt->name = (char *) xmalloc (alen + 1 + mlen + 2); + bcopy (gl.gl_pathv[i], elt->name, alen); + elt->name[alen] = '('; + bcopy (memname, &elt->name[alen + 1], mlen); + elt->name[alen + 1 + mlen] = ')'; + elt->name[alen + 1 + mlen + 1] = '\0'; + elt->next = new; + new = elt; + } + else + { + /* Find the end of the FOUND chain. */ + struct nameseq *f = found; + while (f->next != 0) + f = f->next; + + /* Attach the chain being built to the end of the FOUND + chain, and make FOUND the new NEW chain. */ + f->next = new; + new = found; + } + + free (memname); + } + else +#endif /* !NO_ARCHIVES */ + { + struct nameseq *elt = (struct nameseq *) xmalloc (size); + if (size > sizeof (struct nameseq)) + bzero (((char *) elt) + sizeof (struct nameseq), + size - sizeof (struct nameseq)); + elt->name = xstrdup (gl.gl_pathv[i]); + elt->next = new; + new = elt; + } + } + globfree (&gl); + free (old->name); + free ((char *)old); + break; + } + + case GLOB_NOSPACE: + fatal (NILF, _("virtual memory exhausted")); + break; + + default: + old->next = new; + new = old; + break; + } + } + + return new; +} diff --git a/src/mkutil/make/readme.vms b/src/mkutil/make/readme.vms new file mode 100644 index 00000000..d4a9667c --- /dev/null +++ b/src/mkutil/make/readme.vms @@ -0,0 +1,183 @@ +This is the VMS port of GNU Make done by Hartmut.Becker@compaq.com. + +It is based on the specific version 3.77k and on 3.78.1. 3.77k was done +by Klaus Kämpf , the code was based on the VMS port of +GNU Make 3.60 by Mike Moretti. + +It was ported on OpenVMS/Alpha V7.1, DECC V5.7-006. It was re-build and +tested on OpenVMS/Alpha V7.2, OpenVMS/VAX 7.1 and 5.5-2. Different +versions of DECC were used. VAXC was tried: it fails; but it doesn't +seem worth to get it working. There are still some PTRMISMATCH warnings +during the compile. Although perl is working on VMS the test scripts +don't work. The function $shell is still missing. + +There is a known bug in some of the VMS CRTLs. It is in the shipped +versions of VMS V7.2 and V7.2-1 and in the currently (October 1999) +available ECOs for VMS V7.1 and newer versions. It is fixed in versions +shipped with newer VMS versions and all ECO kits after October 1999. It +only shows up during the daylight saving time period (DST): stat() +returns a modification time 1 hour ahead. This results in GNU make +warning messages. For a just created source you will see: + + $ gmake x.exe + gmake.exe;1: *** Warning: File `x.c' has modification time in the future (940582863 > 940579269) + cc /obj=x.obj x.c + link x.obj /exe=x.exe + gmake.exe;1: *** Warning: Clock skew detected. Your build may be incomplete. + + +New in 3.78.1: + +Fix a problem with automatically remaking makefiles. GNU make uses an +execve to restart itself after a successful remake of the makefile. On +UNIX systems execve replaces the running program with a new one and +resets all signal handling to the default. On VMS execve creates a child +process, signal and exit handlers of the parent are still active, and, +unfortunately, corrupt the exit code from the child. Fix in job.c: +ignore SIGCHLD. + +Added some switches to reflect latest features of DECC. Modifications in +makefile.vms. + +Set some definitions to reflect latest features of DECC. Modifications in +config.h-vms (which is copied to config.h). + +Added extern strcmpi declaration to avoid 'implicitly declared' messages. +Modification in make.h. + +Default rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/ +Compaq c/c++ compilers. Modifications in default.c. + +Usage of opendir() and friends, suppress file version. Modifications in dir.c. + +Added VMS specific code to handle ctrl+c and ctrl+y to abort make. +Modifications in job.c. + +Added support to have case sensitive targets and dependencies but to +still use case blind file names. This is especially useful for Java +makefiles on VMS: + + .SUFFIXES : + .SUFFIXES : .class .java + .java.class : + javac "$< + HelloWorld.class : HelloWorld.java + +A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced. +It needs to be enabled to get this feature; default is disabled. The +macro HAVE_CASE_INSENSITIVE_FS must not be touched: it is still enabled. +Modifications in file.c and config.h-vms. + +Bootstrap make to start building make is still makefile.com, but make +needs to be re-made with a make to make a correct version: ignore all +possible warnings, delete all objects, rename make.exe to a different +name and run it. + +Made some minor modifications to the bootstrap build makefile.com. + +This is the VMS port of GNU Make. + +It is based on the VMS port of GNU Make 3.60 by Mike Moretti. + +This port was done by Klaus Kämpf + +There is first-level support available from proGIS Software, Germany. +Visit their web-site at http://www.progis.de to get information +about other vms software and forthcoming updates to gnu make. + +New for 3.77: + +/bin/sh style I/O redirection is supported. You can now write lines like + mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt + +Makefile variables are looked up in the current environment. You can set +symbols or logicals in DCL and evaluate them in the Makefile via +$(). Variables defined in the Makefile +override VMS symbols/logicals ! + +Functions for file names are working now. See the GNU Make manual for +$(dir ...) and $(wildcard ...). Unix-style and VMS-style names are +supported as arguments. + +The default rules are set up for GNU C. Building an executable from a +single source file is as easy as 'make file.exe'. + +The variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for +different VMS systems can now be written by checking $(ARCH) as in + ifeq ($(ARCH),ALPHA) + $(ECHO) "On the Alpha" + else + $(ECHO) "On the VAX" + endif + +Command lines of excessive length are correctly broken and written to a +batch file in sys$scratch for later execution. There's no limit to the +lengths of commands (and no need for .opt files :-) any more. + +Empty commands are handled correctly and don't end in a new DCL process. + + +New for 3.76: + +John W. Eaton has updated the VMS port to support libraries and VPATH. + + +To build Make, simply type @makefile. This should compile all the +necessary files and link Make. There is also a file called +makefile.vms. If you already have GNU Make built you can just use +Make with this makefile to rebuild. + +Here are some notes about GNU Make for VMS: + +The cd command is supported if it's called as $(CD). This invokes +the 'builtin_cd' command which changes the directory. +Calling 'set def' doesn't do the trick, since a sub-shell is +spawned for this command, the directory is changed *in this sub-shell* +and the sub-shell ends. + +Libraries are not supported. They were in GNU Make 3.60 but somehow I +didn't care porting the code. If there is enough interest, I'll do it at +some later time. + +The variable $^ separates files with commas instead of spaces (It's the +natural thing to do for VMS). + +See defaults.c for VMS default suffixes and my definitions for default +rules and variables. + +The shell function is not implemented yet. + +Load average routines haven't been implemented for VMS yet. + +The default include directory for including other makefiles is +SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use +SYS$LIBRARY: instead; maybe it wouldn't work that way). + +The default makefiles make looks for are: makefile.vms, gnumakefile, +makefile., and gnumakefile. . + +The stat() function and handling of time stamps in VMS is broken, so I +replaced it with a hack in vmsfunctions.c. I will provide a full rewrite +somewhere in the future. Be warned, the time resolution inside make is +less than what vms provides. This might be a problem on the faster Alphas. + +You can use a : in a filename only if you preceed it with a backslash ('\'). +E.g.- hobbes\:[bogas.files] + +Make ignores success, informational, or warning errors (-S-, -I-, or +-W-). But it will stop on -E- and -F- errors. (unless you do something +to override this in your makefile, or whatever). + +Remote stuff isn't implemented yet. + +Multiple line DCL commands, such as "if" statements, must be put inside +command files. You can run a command file by using \@. + + +VMS changes made for 3.74.3 + +Lots of default settings are adapted for VMS. See default.c. + +Long command lines are now converted to command files. + +Comma (',') as a separator is now allowed. See makefile.vms for an example. diff --git a/src/mkutil/make/remake.c b/src/mkutil/make/remake.c new file mode 100644 index 00000000..48413100 --- /dev/null +++ b/src/mkutil/make/remake.c @@ -0,0 +1,1416 @@ +/* Basic dependency engine for GNU Make. +Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, +2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "filedef.h" +#include "job.h" +#include "commands.h" +#include "dep.h" +#include "variable.h" +#include "debug.h" + +#include + +#ifdef HAVE_FCNTL_H +#include +#else +#include +#endif + +#ifdef VMS +#include +#endif +#ifdef WINDOWS32 +#include +#endif + +extern int try_implicit_rule PARAMS ((struct file *file, unsigned int depth)); + + +/* The test for circular dependencies is based on the 'updating' bit in + `struct file'. However, double colon targets have seperate `struct + file's; make sure we always use the base of the double colon chain. */ + +#define start_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\ + ->updating = 1) +#define finish_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\ + ->updating = 0) +#define is_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\ + ->updating) + + +/* Incremented when a command is started (under -n, when one would be). */ +unsigned int commands_started = 0; + +/* Current value for pruning the scan of the goal chain (toggle 0/1). */ +static unsigned int considered; + +static int update_file PARAMS ((struct file *file, unsigned int depth)); +static int update_file_1 PARAMS ((struct file *file, unsigned int depth)); +static int check_dep PARAMS ((struct file *file, unsigned int depth, FILE_TIMESTAMP this_mtime, int *must_make_ptr)); +static int touch_file PARAMS ((struct file *file)); +static void remake_file PARAMS ((struct file *file)); +static FILE_TIMESTAMP name_mtime PARAMS ((char *name)); +static int library_search PARAMS ((char **lib, FILE_TIMESTAMP *mtime_ptr)); + + +/* Remake all the goals in the `struct dep' chain GOALS. Return -1 if nothing + was done, 0 if all goals were updated successfully, or 1 if a goal failed. + If MAKEFILES is nonzero, these goals are makefiles, so -t, -q, and -n should + be disabled for them unless they were also command-line targets, and we + should only make one goal at a time and return as soon as one goal whose + `changed' member is nonzero is successfully made. */ + +int +update_goal_chain (struct dep *goals, int makefiles) +{ + int t = touch_flag, q = question_flag, n = just_print_flag; + unsigned int j = job_slots; + int status = -1; + +#define MTIME(file) (makefiles ? file_mtime_no_search (file) \ + : file_mtime (file)) + + /* Duplicate the chain so we can remove things from it. */ + + goals = copy_dep_chain (goals); + + { + /* Clear the `changed' flag of each goal in the chain. + We will use the flag below to notice when any commands + have actually been run for a target. When no commands + have been run, we give an "up to date" diagnostic. */ + + struct dep *g; + for (g = goals; g != 0; g = g->next) + g->changed = 0; + } + + /* All files start with the considered bit 0, so the global value is 1. */ + considered = 1; + + /* Update all the goals until they are all finished. */ + + while (goals != 0) + { + register struct dep *g, *lastgoal; + + /* Start jobs that are waiting for the load to go down. */ + + start_waiting_jobs (); + + /* Wait for a child to die. */ + + reap_children (1, 0); + + lastgoal = 0; + g = goals; + while (g != 0) + { + /* Iterate over all double-colon entries for this file. */ + struct file *file; + int stop = 0, any_not_updated = 0; + + for (file = g->file->double_colon ? g->file->double_colon : g->file; + file != NULL; + file = file->prev) + { + unsigned int ocommands_started; + int x; + check_renamed (file); + if (makefiles) + { + if (file->cmd_target) + { + touch_flag = t; + question_flag = q; + just_print_flag = n; + } + else + touch_flag = question_flag = just_print_flag = 0; + } + + /* Save the old value of `commands_started' so we can compare + later. It will be incremented when any commands are + actually run. */ + ocommands_started = commands_started; + + x = update_file (file, makefiles ? 1 : 0); + check_renamed (file); + + /* Set the goal's `changed' flag if any commands were started + by calling update_file above. We check this flag below to + decide when to give an "up to date" diagnostic. */ + g->changed += commands_started - ocommands_started; + + /* If we updated a file and STATUS was not already 1, set it to + 1 if updating failed, or to 0 if updating succeeded. Leave + STATUS as it is if no updating was done. */ + + stop = 0; + if ((x != 0 || file->updated) && status < 1) + { + if (file->update_status != 0) + { + /* Updating failed, or -q triggered. The STATUS value + tells our caller which. */ + status = file->update_status; + /* If -q just triggered, stop immediately. It doesn't + matter how much more we run, since we already know + the answer to return. */ + stop = (!keep_going_flag && !question_flag + && !makefiles); + } + else + { + FILE_TIMESTAMP mtime = MTIME (file); + check_renamed (file); + + if (file->updated && g->changed && + mtime != file->mtime_before_update) + { + /* Updating was done. If this is a makefile and + just_print_flag or question_flag is set (meaning + -n or -q was given and this file was specified + as a command-line target), don't change STATUS. + If STATUS is changed, we will get re-exec'd, and + enter an infinite loop. */ + if (!makefiles + || (!just_print_flag && !question_flag)) + status = 0; + if (makefiles && file->dontcare) + /* This is a default makefile; stop remaking. */ + stop = 1; + } + } + } + + /* Keep track if any double-colon entry is not finished. + When they are all finished, the goal is finished. */ + any_not_updated |= !file->updated; + + if (stop) + break; + } + + /* Reset FILE since it is null at the end of the loop. */ + file = g->file; + + if (stop || !any_not_updated) + { + /* If we have found nothing whatever to do for the goal, + print a message saying nothing needs doing. */ + + if (!makefiles + /* If the update_status is zero, we updated successfully + or not at all. G->changed will have been set above if + any commands were actually started for this goal. */ + && file->update_status == 0 && !g->changed + /* Never give a message under -s or -q. */ + && !silent_flag && !question_flag) + message (1, ((file->phony || file->cmds == 0) + ? _("Nothing to be done for `%s'.") + : _("`%s' is up to date.")), + file->name); + + /* This goal is finished. Remove it from the chain. */ + if (lastgoal == 0) + goals = g->next; + else + lastgoal->next = g->next; + + /* Free the storage. */ + free ((char *) g); + + g = lastgoal == 0 ? goals : lastgoal->next; + + if (stop) + break; + } + else + { + lastgoal = g; + g = g->next; + } + } + + /* If we reached the end of the dependency graph toggle the considered + flag for the next pass. */ + if (g == 0) + considered = !considered; + } + + if (makefiles) + { + touch_flag = t; + question_flag = q; + just_print_flag = n; + job_slots = j; + } + return status; +} + +/* If FILE is not up to date, execute the commands for it. + Return 0 if successful, 1 if unsuccessful; + but with some flag settings, just call `exit' if unsuccessful. + + DEPTH is the depth in recursions of this function. + We increment it during the consideration of our dependencies, + then decrement it again after finding out whether this file + is out of date. + + If there are multiple double-colon entries for FILE, + each is considered in turn. */ + +static int +update_file (struct file *file, unsigned int depth) +{ + register int status = 0; + register struct file *f; + + f = file->double_colon ? file->double_colon : file; + + /* Prune the dependency graph: if we've already been here on _this_ + pass through the dependency graph, we don't have to go any further. + We won't reap_children until we start the next pass, so no state + change is possible below here until then. */ + if (f->considered == considered) + { + DBF (DB_VERBOSE, _("Pruning file `%s'.\n")); + return f->command_state == cs_finished ? f->update_status : 0; + } + + /* This loop runs until we start commands for a double colon rule, or until + the chain is exhausted. */ + for (; f != 0; f = f->prev) + { + f->considered = considered; + + status |= update_file_1 (f, depth); + check_renamed (f); + + if (status != 0 && !keep_going_flag) + break; + + if (f->command_state == cs_running + || f->command_state == cs_deps_running) + { + /* Don't run the other :: rules for this + file until this rule is finished. */ + status = 0; + break; + } + } + + /* Process the remaining rules in the double colon chain so they're marked + considered. Start their prerequisites, too. */ + for (; f != 0 ; f = f->prev) + { + struct dep *d; + + f->considered = considered; + + for (d = f->deps; d != 0; d = d->next) + status |= update_file (d->file, depth + 1); + } + + return status; +} + +/* Consider a single `struct file' and update it as appropriate. */ + +static int +update_file_1 (struct file *file, unsigned int depth) +{ + register FILE_TIMESTAMP this_mtime; + int noexist, must_make, deps_changed; + int dep_status = 0; + register struct dep *d, *lastd; + int running = 0; + + DBF (DB_VERBOSE, _("Considering target file `%s'.\n")); + + if (file->updated) + { + if (file->update_status > 0) + { + DBF (DB_VERBOSE, + _("Recently tried and failed to update file `%s'.\n")); + return file->update_status; + } + + DBF (DB_VERBOSE, _("File `%s' was considered already.\n")); + return 0; + } + + switch (file->command_state) + { + case cs_not_started: + case cs_deps_running: + break; + case cs_running: + DBF (DB_VERBOSE, _("Still updating file `%s'.\n")); + return 0; + case cs_finished: + DBF (DB_VERBOSE, _("Finished updating file `%s'.\n")); + return file->update_status; + default: + abort (); + } + + ++depth; + + /* Notice recursive update of the same file. */ + start_updating (file); + + /* Looking at the file's modtime beforehand allows the possibility + that its name may be changed by a VPATH search, and thus it may + not need an implicit rule. If this were not done, the file + might get implicit commands that apply to its initial name, only + to have that name replaced with another found by VPATH search. */ + + this_mtime = file_mtime (file); + check_renamed (file); + noexist = this_mtime == NONEXISTENT_MTIME; + if (noexist) + DBF (DB_BASIC, _("File `%s' does not exist.\n")); + else if (ORDINARY_MTIME_MIN <= this_mtime && this_mtime <= ORDINARY_MTIME_MAX + && file->low_resolution_time) + { + /* Avoid spurious rebuilds due to low resolution time stamps. */ + int ns = FILE_TIMESTAMP_NS (this_mtime); + if (ns != 0) + error (NILF, _("*** Warning: .LOW_RESOLUTION_TIME file `%s' has a high resolution time stamp"), + file->name); + this_mtime += FILE_TIMESTAMPS_PER_S - 1 - ns; + } + + must_make = noexist; + + /* If file was specified as a target with no commands, + come up with some default commands. */ + + if (!file->phony && file->cmds == 0 && !file->tried_implicit) + { + if (try_implicit_rule (file, depth)) + DBF (DB_IMPLICIT, _("Found an implicit rule for `%s'.\n")); + else + DBF (DB_IMPLICIT, _("No implicit rule found for `%s'.\n")); + file->tried_implicit = 1; + } + if (file->cmds == 0 && !file->is_target + && default_file != 0 && default_file->cmds != 0) + { + DBF (DB_IMPLICIT, _("Using default commands for `%s'.\n")); + file->cmds = default_file->cmds; + } + + /* Update all non-intermediate files we depend on, if necessary, + and see whether any of them is more recent than this file. */ + + lastd = 0; + d = file->deps; + while (d != 0) + { + FILE_TIMESTAMP mtime; + int maybe_make; + + check_renamed (d->file); + + mtime = file_mtime (d->file); + check_renamed (d->file); + + if (is_updating (d->file)) + { + error (NILF, _("Circular %s <- %s dependency dropped."), + file->name, d->file->name); + /* We cannot free D here because our the caller will still have + a reference to it when we were called recursively via + check_dep below. */ + if (lastd == 0) + file->deps = d->next; + else + lastd->next = d->next; + d = d->next; + continue; + } + + d->file->parent = file; + maybe_make = must_make; + dep_status |= check_dep (d->file, depth, this_mtime, &maybe_make); + if (! d->ignore_mtime) + must_make = maybe_make; + + check_renamed (d->file); + + { + register struct file *f = d->file; + if (f->double_colon) + f = f->double_colon; + do + { + running |= (f->command_state == cs_running + || f->command_state == cs_deps_running); + f = f->prev; + } + while (f != 0); + } + + if (dep_status != 0 && !keep_going_flag) + break; + + if (!running) + d->changed = file_mtime (d->file) != mtime; + + lastd = d; + d = d->next; + } + + /* Now we know whether this target needs updating. + If it does, update all the intermediate files we depend on. */ + + if (must_make || always_make_flag) + { + for (d = file->deps; d != 0; d = d->next) + if (d->file->intermediate) + { + FILE_TIMESTAMP mtime = file_mtime (d->file); + check_renamed (d->file); + d->file->parent = file; + dep_status |= update_file (d->file, depth); + check_renamed (d->file); + + { + register struct file *f = d->file; + if (f->double_colon) + f = f->double_colon; + do + { + running |= (f->command_state == cs_running + || f->command_state == cs_deps_running); + f = f->prev; + } + while (f != 0); + } + + if (dep_status != 0 && !keep_going_flag) + break; + + if (!running) + d->changed = ((file->phony && file->cmds != 0) + || file_mtime (d->file) != mtime); + } + } + + finish_updating (file); + + DBF (DB_VERBOSE, _("Finished prerequisites of target file `%s'.\n")); + + if (running) + { + set_command_state (file, cs_deps_running); + --depth; + DBF (DB_VERBOSE, _("The prerequisites of `%s' are being made.\n")); + return 0; + } + + /* If any dependency failed, give up now. */ + + if (dep_status != 0) + { + file->update_status = dep_status; + notice_finished_file (file); + + --depth; + + DBF (DB_VERBOSE, _("Giving up on target file `%s'.\n")); + + if (depth == 0 && keep_going_flag + && !just_print_flag && !question_flag) + error (NILF, + _("Target `%s' not remade because of errors."), file->name); + + return dep_status; + } + + if (file->command_state == cs_deps_running) + /* The commands for some deps were running on the last iteration, but + they have finished now. Reset the command_state to not_started to + simplify later bookkeeping. It is important that we do this only + when the prior state was cs_deps_running, because that prior state + was definitely propagated to FILE's also_make's by set_command_state + (called above), but in another state an also_make may have + independently changed to finished state, and we would confuse that + file's bookkeeping (updated, but not_started is bogus state). */ + set_command_state (file, cs_not_started); + + /* Now record which prerequisites are more + recent than this file, so we can define $?. */ + + deps_changed = 0; + for (d = file->deps; d != 0; d = d->next) + { + FILE_TIMESTAMP d_mtime = file_mtime (d->file); + check_renamed (d->file); + + if (! d->ignore_mtime) + { +#if 1 + /* %%% In version 4, remove this code completely to + implement not remaking deps if their deps are newer + than their parents. */ + if (d_mtime == NONEXISTENT_MTIME && !d->file->intermediate) + /* We must remake if this dep does not + exist and is not intermediate. */ + must_make = 1; +#endif + + /* Set DEPS_CHANGED if this dep actually changed. */ + deps_changed |= d->changed; + } + + /* Set D->changed if either this dep actually changed, + or its dependent, FILE, is older or does not exist. */ + d->changed |= noexist || d_mtime > this_mtime; + + if (!noexist && ISDB (DB_BASIC|DB_VERBOSE)) + { + const char *fmt = 0; + + if (d->ignore_mtime) + { + if (ISDB (DB_VERBOSE)) + fmt = _("Prerequisite `%s' is order-only for target `%s'.\n"); + } + else if (d_mtime == NONEXISTENT_MTIME) + { + if (ISDB (DB_BASIC)) + fmt = _("Prerequisite `%s' of target `%s' does not exist.\n"); + } + else if (d->changed) + { + if (ISDB (DB_BASIC)) + fmt = _("Prerequisite `%s' is newer than target `%s'.\n"); + } + else if (ISDB (DB_VERBOSE)) + fmt = _("Prerequisite `%s' is older than target `%s'.\n"); + + if (fmt) + { + print_spaces (depth); + printf (fmt, dep_name (d), file->name); + fflush (stdout); + } + } + } + + /* Here depth returns to the value it had when we were called. */ + depth--; + + if (file->double_colon && file->deps == 0) + { + must_make = 1; + DBF (DB_BASIC, + _("Target `%s' is double-colon and has no prerequisites.\n")); + } + else if (!noexist && file->is_target && !deps_changed && file->cmds == 0 + && !always_make_flag) + { + must_make = 0; + DBF (DB_VERBOSE, + _("No commands for `%s' and no prerequisites actually changed.\n")); + } + else if (!must_make && file->cmds != 0 && always_make_flag) + { + must_make = 1; + DBF (DB_VERBOSE, _("Making `%s' due to always-make flag.\n")); + } + + if (!must_make) + { + if (ISDB (DB_VERBOSE)) + { + print_spaces (depth); + printf (_("No need to remake target `%s'"), file->name); + if (!streq (file->name, file->hname)) + printf (_("; using VPATH name `%s'"), file->hname); + puts ("."); + fflush (stdout); + } + + notice_finished_file (file); + + /* Since we don't need to remake the file, convert it to use the + VPATH filename if we found one. hfile will be either the + local name if no VPATH or the VPATH name if one was found. */ + + while (file) + { + file->name = file->hname; + file = file->prev; + } + + return 0; + } + + DBF (DB_BASIC, _("Must remake target `%s'.\n")); + + /* It needs to be remade. If it's VPATH and not reset via GPATH, toss the + VPATH. */ + if (!streq(file->name, file->hname)) + { + DB (DB_BASIC, (_(" Ignoring VPATH name `%s'.\n"), file->hname)); + file->ignore_vpath = 1; + } + + /* Now, take appropriate actions to remake the file. */ + remake_file (file); + + if (file->command_state != cs_finished) + { + DBF (DB_VERBOSE, _("Commands of `%s' are being run.\n")); + return 0; + } + + switch (file->update_status) + { + case 2: + DBF (DB_BASIC, _("Failed to remake target file `%s'.\n")); + break; + case 0: + DBF (DB_BASIC, _("Successfully remade target file `%s'.\n")); + break; + case 1: + DBF (DB_BASIC, _("Target file `%s' needs remade under -q.\n")); + break; + default: + assert (file->update_status >= 0 && file->update_status <= 2); + break; + } + + file->updated = 1; + return file->update_status; +} + +/* Set FILE's `updated' flag and re-check its mtime and the mtime's of all + files listed in its `also_make' member. Under -t, this function also + touches FILE. + + On return, FILE->update_status will no longer be -1 if it was. */ + +void +notice_finished_file (struct file *file) +{ + struct dep *d; + int ran = file->command_state == cs_running; + int touched = 0; + + file->command_state = cs_finished; + file->updated = 1; + + if (touch_flag + /* The update status will be: + -1 if this target was not remade; + 0 if 0 or more commands (+ or ${MAKE}) were run and won; + 1 if some commands were run and lost. + We touch the target if it has commands which either were not run + or won when they ran (i.e. status is 0). */ + && file->update_status == 0) + { + if (file->cmds != 0 && file->cmds->any_recurse) + { + /* If all the command lines were recursive, + we don't want to do the touching. */ + unsigned int i; + for (i = 0; i < file->cmds->ncommand_lines; ++i) + if (!(file->cmds->lines_flags[i] & COMMANDS_RECURSE)) + goto have_nonrecursing; + } + else + { + have_nonrecursing: + if (file->phony) + file->update_status = 0; + /* According to POSIX, -t doesn't affect targets with no cmds. */ + else if (file->cmds != 0) + { + /* Should set file's modification date and do nothing else. */ + file->update_status = touch_file (file); + + /* Pretend we ran a real touch command, to suppress the + "`foo' is up to date" message. */ + commands_started++; + + /* Request for the timestamp to be updated (and distributed + to the double-colon entries). Simply setting ran=1 would + almost have done the trick, but messes up with the also_make + updating logic below. */ + touched = 1; + } + } + } + + if (file->mtime_before_update == UNKNOWN_MTIME) + file->mtime_before_update = file->last_mtime; + + if ((ran && !file->phony) || touched) + { + struct file *f; + int i = 0; + + /* If -n, -t, or -q and all the commands are recursive, we ran them so + really check the target's mtime again. Otherwise, assume the target + would have been updated. */ + + if (question_flag || just_print_flag || touch_flag) + { + for (i = file->cmds->ncommand_lines; i > 0; --i) + if (! (file->cmds->lines_flags[i-1] & COMMANDS_RECURSE)) + break; + } + + /* If there were no commands at all, it's always new. */ + + else if (file->is_target && file->cmds == 0) + i = 1; + + file->last_mtime = i == 0 ? UNKNOWN_MTIME : NEW_MTIME; + + /* Propagate the change of modification time to all the double-colon + entries for this file. */ + for (f = file->double_colon; f != 0; f = f->prev) + f->last_mtime = file->last_mtime; + } + + if (ran && file->update_status != -1) + /* We actually tried to update FILE, which has + updated its also_make's as well (if it worked). + If it didn't work, it wouldn't work again for them. + So mark them as updated with the same status. */ + for (d = file->also_make; d != 0; d = d->next) + { + d->file->command_state = cs_finished; + d->file->updated = 1; + d->file->update_status = file->update_status; + + if (ran && !d->file->phony) + /* Fetch the new modification time. + We do this instead of just invalidating the cached time + so that a vpath_search can happen. Otherwise, it would + never be done because the target is already updated. */ + (void) f_mtime (d->file, 0); + } + else if (file->update_status == -1) + /* Nothing was done for FILE, but it needed nothing done. + So mark it now as "succeeded". */ + file->update_status = 0; +} + +/* Check whether another file (whose mtime is THIS_MTIME) + needs updating on account of a dependency which is file FILE. + If it does, store 1 in *MUST_MAKE_PTR. + In the process, update any non-intermediate files + that FILE depends on (including FILE itself). + Return nonzero if any updating failed. */ + +static int +check_dep (struct file *file, unsigned int depth, + FILE_TIMESTAMP this_mtime, int *must_make_ptr) +{ + struct dep *d; + int dep_status = 0; + + ++depth; + start_updating (file); + + if (!file->intermediate) + /* If this is a non-intermediate file, update it and record + whether it is newer than THIS_MTIME. */ + { + FILE_TIMESTAMP mtime; + dep_status = update_file (file, depth); + check_renamed (file); + mtime = file_mtime (file); + check_renamed (file); + if (mtime == NONEXISTENT_MTIME || mtime > this_mtime) + *must_make_ptr = 1; + } + else + { + /* FILE is an intermediate file. */ + FILE_TIMESTAMP mtime; + + if (!file->phony && file->cmds == 0 && !file->tried_implicit) + { + if (try_implicit_rule (file, depth)) + DBF (DB_IMPLICIT, _("Found an implicit rule for `%s'.\n")); + else + DBF (DB_IMPLICIT, _("No implicit rule found for `%s'.\n")); + file->tried_implicit = 1; + } + if (file->cmds == 0 && !file->is_target + && default_file != 0 && default_file->cmds != 0) + { + DBF (DB_IMPLICIT, _("Using default commands for `%s'.\n")); + file->cmds = default_file->cmds; + } + + /* If the intermediate file actually exists + and is newer, then we should remake from it. */ + check_renamed (file); + mtime = file_mtime (file); + check_renamed (file); + if (mtime != NONEXISTENT_MTIME && mtime > this_mtime) + *must_make_ptr = 1; + /* Otherwise, update all non-intermediate files we depend on, + if necessary, and see whether any of them is more + recent than the file on whose behalf we are checking. */ + else + { + struct dep *lastd; + + lastd = 0; + d = file->deps; + while (d != 0) + { + int maybe_make; + + if (is_updating (d->file)) + { + error (NILF, _("Circular %s <- %s dependency dropped."), + file->name, d->file->name); + if (lastd == 0) + { + file->deps = d->next; + free ((char *) d); + d = file->deps; + } + else + { + lastd->next = d->next; + free ((char *) d); + d = lastd->next; + } + continue; + } + + d->file->parent = file; + maybe_make = *must_make_ptr; + dep_status |= check_dep (d->file, depth, this_mtime, + &maybe_make); + if (! d->ignore_mtime) + *must_make_ptr = maybe_make; + check_renamed (d->file); + if (dep_status != 0 && !keep_going_flag) + break; + + if (d->file->command_state == cs_running + || d->file->command_state == cs_deps_running) + /* Record that some of FILE's deps are still being made. + This tells the upper levels to wait on processing it until + the commands are finished. */ + set_command_state (file, cs_deps_running); + + lastd = d; + d = d->next; + } + } + } + + finish_updating (file); + return dep_status; +} + +/* Touch FILE. Return zero if successful, one if not. */ + +#define TOUCH_ERROR(call) return (perror_with_name (call, file->name), 1) + +static int +touch_file (struct file *file) +{ + if (!silent_flag) + message (0, "touch %s", file->name); + +#ifndef NO_ARCHIVES + if (ar_name (file->name)) + return ar_touch (file->name); + else +#endif + { + int fd = open (file->name, O_RDWR | O_CREAT, 0666); + + if (fd < 0) + TOUCH_ERROR ("touch: open: "); + else + { + struct stat statbuf; + char buf; + int e; + + EINTRLOOP (e, fstat (fd, &statbuf)); + if (e < 0) + TOUCH_ERROR ("touch: fstat: "); + /* Rewrite character 0 same as it already is. */ + if (read (fd, &buf, 1) < 0) + TOUCH_ERROR ("touch: read: "); + if (lseek (fd, 0L, 0) < 0L) + TOUCH_ERROR ("touch: lseek: "); + if (write (fd, &buf, 1) < 0) + TOUCH_ERROR ("touch: write: "); + /* If file length was 0, we just + changed it, so change it back. */ + if (statbuf.st_size == 0) + { + (void) close (fd); + fd = open (file->name, O_RDWR | O_TRUNC, 0666); + if (fd < 0) + TOUCH_ERROR ("touch: open: "); + } + (void) close (fd); + } + } + + return 0; +} + +/* Having checked and updated the dependencies of FILE, + do whatever is appropriate to remake FILE itself. + Return the status from executing FILE's commands. */ + +static void +remake_file (struct file *file) +{ + if (file->cmds == 0) + { + if (file->phony) + /* Phony target. Pretend it succeeded. */ + file->update_status = 0; + else if (file->is_target) + /* This is a nonexistent target file we cannot make. + Pretend it was successfully remade. */ + file->update_status = 0; + else + { + const char *msg_noparent + = _("%sNo rule to make target `%s'%s"); + const char *msg_parent + = _("%sNo rule to make target `%s', needed by `%s'%s"); + + /* This is a dependency file we cannot remake. Fail. */ + if (!keep_going_flag && !file->dontcare) + { + if (file->parent == 0) + fatal (NILF, msg_noparent, "", file->name, ""); + + fatal (NILF, msg_parent, "", file->name, file->parent->name, ""); + } + + if (!file->dontcare) + { + if (file->parent == 0) + error (NILF, msg_noparent, "*** ", file->name, "."); + else + error (NILF, msg_parent, "*** ", + file->name, file->parent->name, "."); + } + file->update_status = 2; + } + } + else + { + chop_commands (file->cmds); + + /* The normal case: start some commands. */ + if (!touch_flag || file->cmds->any_recurse) + { + execute_file_commands (file); + return; + } + + /* This tells notice_finished_file it is ok to touch the file. */ + file->update_status = 0; + } + + /* This does the touching under -t. */ + notice_finished_file (file); +} + +/* Return the mtime of a file, given a `struct file'. + Caches the time in the struct file to avoid excess stat calls. + + If the file is not found, and SEARCH is nonzero, VPATH searching and + replacement is done. If that fails, a library (-lLIBNAME) is tried and + the library's actual name (/lib/libLIBNAME.a, etc.) is substituted into + FILE. */ + +FILE_TIMESTAMP +f_mtime (struct file *file, int search) +{ + FILE_TIMESTAMP mtime; + + /* File's mtime is not known; must get it from the system. */ + +#ifndef NO_ARCHIVES + if (ar_name (file->name)) + { + /* This file is an archive-member reference. */ + + char *arname, *memname; + struct file *arfile; + int arname_used = 0; + time_t member_date; + + /* Find the archive's name. */ + ar_parse_name (file->name, &arname, &memname); + + /* Find the modification time of the archive itself. + Also allow for its name to be changed via VPATH search. */ + arfile = lookup_file (arname); + if (arfile == 0) + { + arfile = enter_file (arname); + arname_used = 1; + } + mtime = f_mtime (arfile, search); + check_renamed (arfile); + if (search && strcmp (arfile->hname, arname)) + { + /* The archive's name has changed. + Change the archive-member reference accordingly. */ + + char *name; + unsigned int arlen, memlen; + + if (!arname_used) + { + free (arname); + arname_used = 1; + } + + arname = arfile->hname; + arlen = strlen (arname); + memlen = strlen (memname); + + /* free (file->name); */ + + name = (char *) xmalloc (arlen + 1 + memlen + 2); + bcopy (arname, name, arlen); + name[arlen] = '('; + bcopy (memname, name + arlen + 1, memlen); + name[arlen + 1 + memlen] = ')'; + name[arlen + 1 + memlen + 1] = '\0'; + + /* If the archive was found with GPATH, make the change permanent; + otherwise defer it until later. */ + if (arfile->name == arfile->hname) + rename_file (file, name); + else + rehash_file (file, name); + check_renamed (file); + } + + if (!arname_used) + free (arname); + free (memname); + + file->low_resolution_time = 1; + + if (mtime == NONEXISTENT_MTIME) + /* The archive doesn't exist, so its members don't exist either. */ + return NONEXISTENT_MTIME; + + member_date = ar_member_date (file->hname); + mtime = (member_date == (time_t) -1 + ? NONEXISTENT_MTIME + : file_timestamp_cons (file->hname, member_date, 0)); + } + else +#endif + { + mtime = name_mtime (file->name); + + if (mtime == NONEXISTENT_MTIME && search && !file->ignore_vpath) + { + /* If name_mtime failed, search VPATH. */ + char *name = file->name; + if (vpath_search (&name, &mtime) + /* Last resort, is it a library (-lxxx)? */ + || (name[0] == '-' && name[1] == 'l' + && library_search (&name, &mtime))) + { + if (mtime != UNKNOWN_MTIME) + /* vpath_search and library_search store UNKNOWN_MTIME + if they didn't need to do a stat call for their work. */ + file->last_mtime = mtime; + + /* If we found it in VPATH, see if it's in GPATH too; if so, + change the name right now; if not, defer until after the + dependencies are updated. */ + if (gpath_search (name, strlen(name) - strlen(file->name) - 1)) + { + rename_file (file, name); + check_renamed (file); + return file_mtime (file); + } + + rehash_file (file, name); + check_renamed (file); + mtime = name_mtime (name); + } + } + } + + { + /* Files can have bogus timestamps that nothing newly made will be + "newer" than. Updating their dependents could just result in loops. + So notify the user of the anomaly with a warning. + + We only need to do this once, for now. */ + + if (!clock_skew_detected + && mtime != NONEXISTENT_MTIME + && !file->updated) + { + static FILE_TIMESTAMP adjusted_now; + + FILE_TIMESTAMP adjusted_mtime = mtime; + +#if defined(WINDOWS32) || defined(__MSDOS__) + /* Experimentation has shown that FAT filesystems can set file times + up to 3 seconds into the future! Play it safe. */ + +#define FAT_ADJ_OFFSET (FILE_TIMESTAMP) 3 + + FILE_TIMESTAMP adjustment = FAT_ADJ_OFFSET << FILE_TIMESTAMP_LO_BITS; + if (ORDINARY_MTIME_MIN + adjustment <= adjusted_mtime) + adjusted_mtime -= adjustment; +#elif defined(__EMX__) + /* FAT filesystems round time to the nearest even second! + Allow for any file (NTFS or FAT) to perhaps suffer from this + brain damage. */ + FILE_TIMESTAMP adjustment = (((FILE_TIMESTAMP_S (adjusted_mtime) & 1) == 0 + && FILE_TIMESTAMP_NS (adjusted_mtime) == 0) + ? (FILE_TIMESTAMP) 1 << FILE_TIMESTAMP_LO_BITS + : 0); +#endif + + /* If the file's time appears to be in the future, update our + concept of the present and try once more. */ + if (adjusted_now < adjusted_mtime) + { + int resolution; + FILE_TIMESTAMP now = file_timestamp_now (&resolution); + adjusted_now = now + (resolution - 1); + if (adjusted_now < adjusted_mtime) + { +#ifdef NO_FLOAT + error (NILF, _("Warning: File `%s' has modification time in the future"), + file->name); +#else + double from_now = + (FILE_TIMESTAMP_S (mtime) - FILE_TIMESTAMP_S (now) + + ((FILE_TIMESTAMP_NS (mtime) - FILE_TIMESTAMP_NS (now)) + / 1e9)); + error (NILF, _("Warning: File `%s' has modification time %.2g s in the future"), + file->name, from_now); +#endif + clock_skew_detected = 1; + } + } + } + } + + /* Store the mtime into all the entries for this file. */ + if (file->double_colon) + file = file->double_colon; + + do + { + /* If this file is not implicit but it is intermediate then it was + made so by the .INTERMEDIATE target. If this file has never + been built by us but was found now, it existed before make + started. So, turn off the intermediate bit so make doesn't + delete it, since it didn't create it. */ + if (mtime != NONEXISTENT_MTIME && file->command_state == cs_not_started + && file->command_state == cs_not_started + && !file->tried_implicit && file->intermediate) + file->intermediate = 0; + + file->last_mtime = mtime; + file = file->prev; + } + while (file != 0); + + return mtime; +} + + +/* Return the mtime of the file or archive-member reference NAME. */ + +static FILE_TIMESTAMP +name_mtime (char *name) +{ + struct stat st; + int e; + + EINTRLOOP (e, stat (name, &st)); + if (e != 0) + { + if (errno != ENOENT && errno != ENOTDIR) + perror_with_name ("stat:", name); + return NONEXISTENT_MTIME; + } + + return FILE_TIMESTAMP_STAT_MODTIME (name, st); +} + + +/* Search for a library file specified as -lLIBNAME, searching for a + suitable library file in the system library directories and the VPATH + directories. */ + +static int +library_search (char **lib, FILE_TIMESTAMP *mtime_ptr) +{ + static char *dirs[] = + { +#ifndef _AMIGA + "/lib", + "/usr/lib", +#endif +#if defined(WINDOWS32) && !defined(LIBDIR) +/* + * This is completely up to the user at product install time. Just define + * a placeholder. + */ +#define LIBDIR "." +#endif + LIBDIR, /* Defined by configuration. */ + 0 + }; + + static char *libpatterns = NULL; + + char *libname = &(*lib)[2]; /* Name without the `-l'. */ + FILE_TIMESTAMP mtime; + + /* Loop variables for the libpatterns value. */ + char *p, *p2; + unsigned int len; + + char *file, **dp; + + /* If we don't have libpatterns, get it. */ + if (!libpatterns) + { + int save = warn_undefined_variables_flag; + warn_undefined_variables_flag = 0; + + libpatterns = xstrdup (variable_expand ("$(strip $(.LIBPATTERNS))")); + + warn_undefined_variables_flag = save; + } + + /* Loop through all the patterns in .LIBPATTERNS, and search on each one. */ + p2 = libpatterns; + while ((p = find_next_token (&p2, &len)) != 0) + { + static char *buf = NULL; + static int buflen = 0; + static int libdir_maxlen = -1; + char *libbuf = variable_expand (""); + + /* Expand the pattern using LIBNAME as a replacement. */ + { + char c = p[len]; + char *p3, *p4; + + p[len] = '\0'; + p3 = find_percent (p); + if (!p3) + { + /* Give a warning if there is no pattern, then remove the + pattern so it's ignored next time. */ + error (NILF, _(".LIBPATTERNS element `%s' is not a pattern"), p); + for (; len; --len, ++p) + *p = ' '; + *p = c; + continue; + } + p4 = variable_buffer_output (libbuf, p, p3-p); + p4 = variable_buffer_output (p4, libname, strlen (libname)); + p4 = variable_buffer_output (p4, p3+1, len - (p3-p)); + p[len] = c; + } + + /* Look first for `libNAME.a' in the current directory. */ + mtime = name_mtime (libbuf); + if (mtime != NONEXISTENT_MTIME) + { + *lib = xstrdup (libbuf); + if (mtime_ptr != 0) + *mtime_ptr = mtime; + return 1; + } + + /* Now try VPATH search on that. */ + + file = libbuf; + if (vpath_search (&file, mtime_ptr)) + { + *lib = file; + return 1; + } + + /* Now try the standard set of directories. */ + + if (!buflen) + { + for (dp = dirs; *dp != 0; ++dp) + { + int l = strlen (*dp); + if (l > libdir_maxlen) + libdir_maxlen = l; + } + buflen = strlen (libbuf); + buf = xmalloc(libdir_maxlen + buflen + 2); + } + else if (buflen < strlen (libbuf)) + { + buflen = strlen (libbuf); + buf = xrealloc (buf, libdir_maxlen + buflen + 2); + } + + for (dp = dirs; *dp != 0; ++dp) + { + sprintf (buf, "%s/%s", *dp, libbuf); + mtime = name_mtime (buf); + if (mtime != NONEXISTENT_MTIME) + { + *lib = xstrdup (buf); + if (mtime_ptr != 0) + *mtime_ptr = mtime; + return 1; + } + } + } + + return 0; +} diff --git a/src/mkutil/make/remote-cstms.c b/src/mkutil/make/remote-cstms.c new file mode 100644 index 00000000..1a55fa40 --- /dev/null +++ b/src/mkutil/make/remote-cstms.c @@ -0,0 +1,302 @@ +/* GNU Make remote job exportation interface to the Customs daemon. + THIS CODE IS NOT SUPPORTED BY THE GNU PROJECT. + Please do not send bug reports or questions about it to + the Make maintainers. + +Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "job.h" +#include "filedef.h" +#include "commands.h" +#include "job.h" +#include "debug.h" + +#include +#include + +#include "customs.h" + +char *remote_description = "Customs"; + +/* File name of the Customs `export' client command. + A full path name can be used to avoid some path-searching overhead. */ +#define EXPORT_COMMAND "/usr/local/bin/export" + +/* ExportPermit gotten by start_remote_job_p, and used by start_remote_job. */ +static ExportPermit permit; + +/* Normalized path name of the current directory. */ +static char *normalized_cwd; + +/* Call once at startup even if no commands are run. */ + +void +remote_setup (void) +{ +} + +/* Called before exit. */ + +void +remote_cleanup (void) +{ +} + +/* Return nonzero if the next job should be done remotely. */ + +int +start_remote_job_p (int first_p) +{ + static int inited = 0; + int status; + int njobs; + + if (!inited) + { + /* Allow the user to turn off job exportation (useful while he is + debugging Customs, for example). */ + if (getenv ("GNU_MAKE_NO_CUSTOMS") != 0) + { + inited = -1; + return 0; + } + + /* For secure Customs, make is installed setuid root and + Customs requires a privileged source port be used. */ + make_access (); + + if (ISDB (DB_JOBS)) + Rpc_Debug(1); + + /* Ping the daemon once to see if it is there. */ + inited = Customs_Ping () == RPC_SUCCESS ? 1 : -1; + + /* Return to normal user access. */ + user_access (); + + if (starting_directory == 0) + /* main couldn't figure it out. */ + inited = -1; + else + { + /* Normalize the current directory path name to something + that should work on all machines exported to. */ + + normalized_cwd = (char *) xmalloc (GET_PATH_MAX); + strcpy (normalized_cwd, starting_directory); + if (Customs_NormPath (normalized_cwd, GET_PATH_MAX) < 0) + /* Path normalization failure means using Customs + won't work, but it's not really an error. */ + inited = -1; + } + } + + if (inited < 0) + return 0; + + njobs = job_slots_used; + if (!first_p) + njobs -= 1; /* correction for being called from reap_children() */ + + /* the first job should run locally, or, if the -l flag is given, we use + that as clue as to how many local jobs should be scheduled locally */ + if (max_load_average < 0 && njobs == 0 || njobs < max_load_average) + return 0; + + status = Customs_Host (EXPORT_SAME, &permit); + if (status != RPC_SUCCESS) + { + DB (DB_JOBS, (_("Customs won't export: %s\n"), + Rpc_ErrorMessage (status))); + return 0; + } + + return !CUSTOMS_FAIL (&permit.addr); +} + +/* Start a remote job running the command in ARGV, with environment from + ENVP. It gets standard input from STDIN_FD. On failure, return + nonzero. On success, return zero, and set *USED_STDIN to nonzero if it + will actually use STDIN_FD, zero if not, set *ID_PTR to a unique + identification, and set *IS_REMOTE to nonzero if the job is remote, zero + if it is local (meaning *ID_PTR is a process ID). */ + +int +start_remote_job (char **argv, char **envp, int stdin_fd, + int *is_remote, int *id_ptr, int *used_stdin) +{ + char waybill[MAX_DATA_SIZE], msg[128]; + struct hostent *host; + struct timeval timeout; + struct sockaddr_in sin; + int len; + int retsock, retport, sock; + Rpc_Stat status; + int pid; + + /* Create the return socket. */ + retsock = Rpc_UdpCreate (True, 0); + if (retsock < 0) + { + error (NILF, "exporting: Couldn't create return socket."); + return 1; + } + + /* Get the return socket's port number. */ + len = sizeof (sin); + if (getsockname (retsock, (struct sockaddr *) &sin, &len) < 0) + { + (void) close (retsock); + perror_with_name ("exporting: ", "getsockname"); + return 1; + } + retport = sin.sin_port; + + /* Create the TCP socket for talking to the remote child. */ + sock = Rpc_TcpCreate (False, 0); + + /* Create a WayBill to give to the server. */ + len = Customs_MakeWayBill (&permit, normalized_cwd, argv[0], argv, + envp, retport, waybill); + + /* Modify the waybill as if the remote child had done `child_access ()'. */ + { + WayBill *wb = (WayBill *) waybill; + wb->ruid = wb->euid; + wb->rgid = wb->egid; + } + + /* Send the request to the server, timing out in 20 seconds. */ + timeout.tv_usec = 0; + timeout.tv_sec = 20; + sin.sin_family = AF_INET; + sin.sin_port = htons (Customs_Port ()); + sin.sin_addr = permit.addr; + status = Rpc_Call (sock, &sin, (Rpc_Proc) CUSTOMS_IMPORT, + len, (Rpc_Opaque) waybill, + sizeof(msg), (Rpc_Opaque) msg, + 1, &timeout); + + host = gethostbyaddr((char *)&permit.addr, sizeof(permit.addr), AF_INET); + + if (status != RPC_SUCCESS) + { + (void) close (retsock); + (void) close (sock); + error (NILF, "exporting to %s: %s", + host ? host->h_name : inet_ntoa (permit.addr), + Rpc_ErrorMessage (status)); + return 1; + } + else if (msg[0] != 'O' || msg[1] != 'k' || msg[2] != '\0') + { + (void) close (retsock); + (void) close (sock); + error (NILF, "exporting to %s: %s", + host ? host->h_name : inet_ntoa (permit.addr), + msg); + return 1; + } + else + { + error (NILF, "*** exported to %s (id %u)", + host ? host->h_name : inet_ntoa (permit.addr), + permit.id); + } + + fflush (stdout); + fflush (stderr); + + pid = vfork (); + if (pid < 0) + { + /* The fork failed! */ + perror_with_name ("vfork", ""); + return 1; + } + else if (pid == 0) + { + /* Child side. Run `export' to handle the connection. */ + static char sock_buf[20], retsock_buf[20], id_buf[20]; + static char *new_argv[6] = + { EXPORT_COMMAND, "-id", sock_buf, retsock_buf, id_buf, 0 }; + + /* Set up the arguments. */ + (void) sprintf (sock_buf, "%d", sock); + (void) sprintf (retsock_buf, "%d", retsock); + (void) sprintf (id_buf, "%x", permit.id); + + /* Get the right stdin. */ + if (stdin_fd != 0) + (void) dup2 (stdin_fd, 0); + + /* Unblock signals in the child. */ + unblock_sigs (); + + /* Run the command. */ + exec_command (new_argv, envp); + } + + /* Parent side. Return the `export' process's ID. */ + (void) close (retsock); + (void) close (sock); + *is_remote = 0; + *id_ptr = pid; + *used_stdin = 1; + return 0; +} + +/* Get the status of a dead remote child. Block waiting for one to die + if BLOCK is nonzero. Set *EXIT_CODE_PTR to the exit status, *SIGNAL_PTR + to the termination signal or zero if it exited normally, and *COREDUMP_PTR + nonzero if it dumped core. Return the ID of the child that died, + 0 if we would have to block and !BLOCK, or < 0 if there were none. */ + +int +remote_status (int *exit_code_ptr, int *signal_ptr, int *coredump_ptr, + int block) +{ + return -1; +} + +/* Block asynchronous notification of remote child death. + If this notification is done by raising the child termination + signal, do not block that signal. */ +void +block_remote_children (void) +{ + return; +} + +/* Restore asynchronous notification of remote child death. + If this is done by raising the child termination signal, + do not unblock that signal. */ +void +unblock_remote_children (void) +{ + return; +} + +/* Send signal SIG to child ID. Return 0 if successful, -1 if not. */ +int +remote_kill (int id, int sig) +{ + return -1; +} diff --git a/src/mkutil/make/remote-stub.c b/src/mkutil/make/remote-stub.c new file mode 100644 index 00000000..77fb1330 --- /dev/null +++ b/src/mkutil/make/remote-stub.c @@ -0,0 +1,101 @@ +/* Template for the remote job exportation interface to GNU Make. +Copyright (C) 1988, 1989, 1992, 1993, 1996 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "filedef.h" +#include "job.h" +#include "commands.h" + + +char *remote_description = 0; + +/* Call once at startup even if no commands are run. */ + +void +remote_setup (void) +{ +} + +/* Called before exit. */ + +void +remote_cleanup (void) +{ +} + +/* Return nonzero if the next job should be done remotely. */ + +int +start_remote_job_p (int first_p) +{ + return 0; +} + +/* Start a remote job running the command in ARGV, + with environment from ENVP. It gets standard input from STDIN_FD. On + failure, return nonzero. On success, return zero, and set *USED_STDIN + to nonzero if it will actually use STDIN_FD, zero if not, set *ID_PTR to + a unique identification, and set *IS_REMOTE to zero if the job is local, + nonzero if it is remote (meaning *ID_PTR is a process ID). */ + +int +start_remote_job (char **argv, char **envp, int stdin_fd, + int *is_remote, int *id_ptr, int *used_stdin) +{ + return -1; +} + +/* Get the status of a dead remote child. Block waiting for one to die + if BLOCK is nonzero. Set *EXIT_CODE_PTR to the exit status, *SIGNAL_PTR + to the termination signal or zero if it exited normally, and *COREDUMP_PTR + nonzero if it dumped core. Return the ID of the child that died, + 0 if we would have to block and !BLOCK, or < 0 if there were none. */ + +int +remote_status (int *exit_code_ptr, int *signal_ptr, int *coredump_ptr, + int block) +{ + errno = ECHILD; + return -1; +} + +/* Block asynchronous notification of remote child death. + If this notification is done by raising the child termination + signal, do not block that signal. */ +void +block_remote_children (void) +{ + return; +} + +/* Restore asynchronous notification of remote child death. + If this is done by raising the child termination signal, + do not unblock that signal. */ +void +unblock_remote_children (void) +{ + return; +} + +/* Send signal SIG to child ID. Return 0 if successful, -1 if not. */ +int +remote_kill (int id, int sig) +{ + return -1; +} diff --git a/src/mkutil/make/rule.c b/src/mkutil/make/rule.c new file mode 100644 index 00000000..e28cebfa --- /dev/null +++ b/src/mkutil/make/rule.c @@ -0,0 +1,603 @@ +/* Pattern and suffix rule internals for GNU Make. +Copyright (C) 1988,89,90,91,92,93, 1998 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "dep.h" +#include "filedef.h" +#include "job.h" +#include "commands.h" +#include "variable.h" +#include "rule.h" + +static void freerule PARAMS ((struct rule *rule, struct rule *lastrule)); + +/* Chain of all pattern rules. */ + +struct rule *pattern_rules; + +/* Pointer to last rule in the chain, so we can add onto the end. */ + +struct rule *last_pattern_rule; + +/* Number of rules in the chain. */ + +unsigned int num_pattern_rules; + +/* Maximum number of target patterns of any pattern rule. */ + +unsigned int max_pattern_targets; + +/* Maximum number of dependencies of any pattern rule. */ + +unsigned int max_pattern_deps; + +/* Maximum length of the name of a dependencies of any pattern rule. */ + +unsigned int max_pattern_dep_length; + +/* Pointer to structure for the file .SUFFIXES + whose dependencies are the suffixes to be searched. */ + +struct file *suffix_file; + +/* Maximum length of a suffix. */ + +unsigned int maxsuffix; + +/* Compute the maximum dependency length and maximum number of + dependencies of all implicit rules. Also sets the subdir + flag for a rule when appropriate, possibly removing the rule + completely when appropriate. */ + +void +count_implicit_rule_limits (void) +{ + char *name; + unsigned int namelen; + register struct rule *rule, *lastrule; + + num_pattern_rules = max_pattern_targets = max_pattern_deps = 0; + max_pattern_dep_length = 0; + + name = 0; + namelen = 0; + rule = pattern_rules; + lastrule = 0; + while (rule != 0) + { + unsigned int ndeps = 0; + register struct dep *dep; + struct rule *next = rule->next; + unsigned int ntargets; + + ++num_pattern_rules; + + ntargets = 0; + while (rule->targets[ntargets] != 0) + ++ntargets; + + if (ntargets > max_pattern_targets) + max_pattern_targets = ntargets; + + for (dep = rule->deps; dep != 0; dep = dep->next) + { + unsigned int len = strlen (dep->name); + +#ifdef VMS + char *p = strrchr (dep->name, ']'); + char *p2; + if (p == 0) + p = strrchr (dep->name, ':'); + p2 = p != 0 ? strchr (dep->name, '%') : 0; +#else + char *p = strrchr (dep->name, '/'); + char *p2 = p != 0 ? strchr (dep->name, '%') : 0; +#endif + ndeps++; + + if (len > max_pattern_dep_length) + max_pattern_dep_length = len; + + if (p != 0 && p2 > p) + { + /* There is a slash before the % in the dep name. + Extract the directory name. */ + if (p == dep->name) + ++p; + if (p - dep->name > namelen) + { + if (name != 0) + free (name); + namelen = p - dep->name; + name = (char *) xmalloc (namelen + 1); + } + bcopy (dep->name, name, p - dep->name); + name[p - dep->name] = '\0'; + + /* In the deps of an implicit rule the `changed' flag + actually indicates that the dependency is in a + nonexistent subdirectory. */ + + dep->changed = !dir_file_exists_p (name, ""); +#ifdef VMS + if (dep->changed && strchr (name, ':') != 0) +#else + if (dep->changed && *name == '/') +#endif + { + /* The name is absolute and the directory does not exist. + This rule can never possibly match, since this dependency + can never possibly exist. So just remove the rule from + the list. */ + freerule (rule, lastrule); + --num_pattern_rules; + goto end_main_loop; + } + } + else + /* This dependency does not reside in a subdirectory. */ + dep->changed = 0; + } + + if (ndeps > max_pattern_deps) + max_pattern_deps = ndeps; + + lastrule = rule; + end_main_loop: + rule = next; + } + + if (name != 0) + free (name); +} + +/* Create a pattern rule from a suffix rule. + TARGET is the target suffix; SOURCE is the source suffix. + CMDS are the commands. + If TARGET is nil, it means the target pattern should be `(%.o)'. + If SOURCE is nil, it means there should be no deps. */ + +static void +convert_suffix_rule (char *target, char *source, struct commands *cmds) +{ + char *targname, *targpercent, *depname; + char **names, **percents; + struct dep *deps; + unsigned int len; + + if (target == 0) + /* Special case: TARGET being nil means we are defining a + `.X.a' suffix rule; the target pattern is always `(%.o)'. */ + { +#ifdef VMS + targname = savestring ("(%.obj)", 7); +#else + targname = savestring ("(%.o)", 5); +#endif + targpercent = targname + 1; + } + else + { + /* Construct the target name. */ + len = strlen (target); + targname = xmalloc (1 + len + 1); + targname[0] = '%'; + bcopy (target, targname + 1, len + 1); + targpercent = targname; + } + + names = (char **) xmalloc (2 * sizeof (char *)); + percents = (char **) alloca (2 * sizeof (char *)); + names[0] = targname; + percents[0] = targpercent; + names[1] = percents[1] = 0; + + if (source == 0) + deps = 0; + else + { + /* Construct the dependency name. */ + len = strlen (source); + depname = xmalloc (1 + len + 1); + depname[0] = '%'; + bcopy (source, depname + 1, len + 1); + deps = (struct dep *) xmalloc (sizeof (struct dep)); + deps->next = 0; + deps->name = depname; + deps->ignore_mtime = 0; + } + + create_pattern_rule (names, percents, 0, deps, cmds, 0); +} + +/* Convert old-style suffix rules to pattern rules. + All rules for the suffixes on the .SUFFIXES list + are converted and added to the chain of pattern rules. */ + +void +convert_to_pattern (void) +{ + register struct dep *d, *d2; + register struct file *f; + register char *rulename; + register unsigned int slen, s2len; + + /* Compute maximum length of all the suffixes. */ + + maxsuffix = 0; + for (d = suffix_file->deps; d != 0; d = d->next) + { + register unsigned int namelen = strlen (dep_name (d)); + if (namelen > maxsuffix) + maxsuffix = namelen; + } + + rulename = (char *) alloca ((maxsuffix * 2) + 1); + + for (d = suffix_file->deps; d != 0; d = d->next) + { + /* Make a rule that is just the suffix, with no deps or commands. + This rule exists solely to disqualify match-anything rules. */ + convert_suffix_rule (dep_name (d), (char *) 0, (struct commands *) 0); + + f = d->file; + if (f->cmds != 0) + /* Record a pattern for this suffix's null-suffix rule. */ + convert_suffix_rule ("", dep_name (d), f->cmds); + + /* Record a pattern for each of this suffix's two-suffix rules. */ + slen = strlen (dep_name (d)); + bcopy (dep_name (d), rulename, slen); + for (d2 = suffix_file->deps; d2 != 0; d2 = d2->next) + { + s2len = strlen (dep_name (d2)); + + if (slen == s2len && streq (dep_name (d), dep_name (d2))) + continue; + + bcopy (dep_name (d2), rulename + slen, s2len + 1); + f = lookup_file (rulename); + if (f == 0 || f->cmds == 0) + continue; + + if (s2len == 2 && rulename[slen] == '.' && rulename[slen + 1] == 'a') + /* A suffix rule `.X.a:' generates the pattern rule `(%.o): %.X'. + It also generates a normal `%.a: %.X' rule below. */ + convert_suffix_rule ((char *) 0, /* Indicates `(%.o)'. */ + dep_name (d), + f->cmds); + + /* The suffix rule `.X.Y:' is converted + to the pattern rule `%.Y: %.X'. */ + convert_suffix_rule (dep_name (d2), dep_name (d), f->cmds); + } + } +} + + +/* Install the pattern rule RULE (whose fields have been filled in) + at the end of the list (so that any rules previously defined + will take precedence). If this rule duplicates a previous one + (identical target and dependencies), the old one is replaced + if OVERRIDE is nonzero, otherwise this new one is thrown out. + When an old rule is replaced, the new one is put at the end of the + list. Return nonzero if RULE is used; zero if not. */ + +int +new_pattern_rule (struct rule *rule, int override) +{ + register struct rule *r, *lastrule; + register unsigned int i, j; + + rule->in_use = 0; + rule->terminal = 0; + + rule->next = 0; + + /* Search for an identical rule. */ + lastrule = 0; + for (r = pattern_rules; r != 0; lastrule = r, r = r->next) + for (i = 0; rule->targets[i] != 0; ++i) + { + for (j = 0; r->targets[j] != 0; ++j) + if (!streq (rule->targets[i], r->targets[j])) + break; + if (r->targets[j] == 0) + /* All the targets matched. */ + { + register struct dep *d, *d2; + for (d = rule->deps, d2 = r->deps; + d != 0 && d2 != 0; d = d->next, d2 = d2->next) + if (!streq (dep_name (d), dep_name (d2))) + break; + if (d == 0 && d2 == 0) + { + /* All the dependencies matched. */ + if (override) + { + /* Remove the old rule. */ + freerule (r, lastrule); + /* Install the new one. */ + if (pattern_rules == 0) + pattern_rules = rule; + else + last_pattern_rule->next = rule; + last_pattern_rule = rule; + + /* We got one. Stop looking. */ + goto matched; + } + else + { + /* The old rule stays intact. Destroy the new one. */ + freerule (rule, (struct rule *) 0); + return 0; + } + } + } + } + + matched:; + + if (r == 0) + { + /* There was no rule to replace. */ + if (pattern_rules == 0) + pattern_rules = rule; + else + last_pattern_rule->next = rule; + last_pattern_rule = rule; + } + + return 1; +} + + +/* Install an implicit pattern rule based on the three text strings + in the structure P points to. These strings come from one of + the arrays of default implicit pattern rules. + TERMINAL specifies what the `terminal' field of the rule should be. */ + +void +install_pattern_rule (struct pspec *p, int terminal) +{ + register struct rule *r; + char *ptr; + + r = (struct rule *) xmalloc (sizeof (struct rule)); + + r->targets = (char **) xmalloc (2 * sizeof (char *)); + r->suffixes = (char **) xmalloc (2 * sizeof (char *)); + r->lens = (unsigned int *) xmalloc (2 * sizeof (unsigned int)); + + r->targets[1] = 0; + r->suffixes[1] = 0; + r->lens[1] = 0; + + r->lens[0] = strlen (p->target); + /* These will all be string literals, but we malloc space for + them anyway because somebody might want to free them later on. */ + r->targets[0] = savestring (p->target, r->lens[0]); + r->suffixes[0] = find_percent (r->targets[0]); + if (r->suffixes[0] == 0) + /* Programmer-out-to-lunch error. */ + abort (); + else + ++r->suffixes[0]; + + ptr = p->dep; + r->deps = (struct dep *) multi_glob (parse_file_seq (&ptr, '\0', + sizeof (struct dep), 1), + sizeof (struct dep)); + + if (new_pattern_rule (r, 0)) + { + r->terminal = terminal; + r->cmds = (struct commands *) xmalloc (sizeof (struct commands)); + r->cmds->fileinfo.filenm = 0; + r->cmds->fileinfo.lineno = 0; + /* These will all be string literals, but we malloc space for them + anyway because somebody might want to free them later. */ + r->cmds->commands = xstrdup (p->commands); + r->cmds->command_lines = 0; + } +} + + +/* Free all the storage used in RULE and take it out of the + pattern_rules chain. LASTRULE is the rule whose next pointer + points to RULE. */ + +static void +freerule (struct rule *rule, struct rule *lastrule) +{ + struct rule *next = rule->next; + register unsigned int i; + register struct dep *dep; + + for (i = 0; rule->targets[i] != 0; ++i) + free (rule->targets[i]); + + dep = rule->deps; + while (dep) + { + struct dep *t; + + t = dep->next; + /* We might leak dep->name here, but I'm not sure how to fix this: I + think that pointer might be shared (e.g., in the file hash?) */ + free ((char *) dep); + dep = t; + } + + free ((char *) rule->targets); + free ((char *) rule->suffixes); + free ((char *) rule->lens); + + /* We can't free the storage for the commands because there + are ways that they could be in more than one place: + * If the commands came from a suffix rule, they could also be in + the `struct file's for other suffix rules or plain targets given + on the same makefile line. + * If two suffixes that together make a two-suffix rule were each + given twice in the .SUFFIXES list, and in the proper order, two + identical pattern rules would be created and the second one would + be discarded here, but both would contain the same `struct commands' + pointer from the `struct file' for the suffix rule. */ + + free ((char *) rule); + + if (pattern_rules == rule) + if (lastrule != 0) + abort (); + else + pattern_rules = next; + else if (lastrule != 0) + lastrule->next = next; + if (last_pattern_rule == rule) + last_pattern_rule = lastrule; +} + +/* Create a new pattern rule with the targets in the nil-terminated + array TARGETS. If TARGET_PERCENTS is not nil, it is an array of + pointers into the elements of TARGETS, where the `%'s are. + The new rule has dependencies DEPS and commands from COMMANDS. + It is a terminal rule if TERMINAL is nonzero. This rule overrides + identical rules with different commands if OVERRIDE is nonzero. + + The storage for TARGETS and its elements is used and must not be freed + until the rule is destroyed. The storage for TARGET_PERCENTS is not used; + it may be freed. */ + +void +create_pattern_rule (char **targets, char **target_percents, + int terminal, struct dep *deps, + struct commands *commands, int override) +{ + register struct rule *r = (struct rule *) xmalloc (sizeof (struct rule)); + register unsigned int max_targets, i; + + r->cmds = commands; + r->deps = deps; + r->targets = targets; + + max_targets = 2; + r->lens = (unsigned int *) xmalloc (2 * sizeof (unsigned int)); + r->suffixes = (char **) xmalloc (2 * sizeof (char *)); + for (i = 0; targets[i] != 0; ++i) + { + if (i == max_targets - 1) + { + max_targets += 5; + r->lens = (unsigned int *) + xrealloc ((char *) r->lens, max_targets * sizeof (unsigned int)); + r->suffixes = (char **) + xrealloc ((char *) r->suffixes, max_targets * sizeof (char *)); + } + r->lens[i] = strlen (targets[i]); + r->suffixes[i] = (target_percents == 0 ? find_percent (targets[i]) + : target_percents[i]) + 1; + if (r->suffixes[i] == 0) + abort (); + } + + if (i < max_targets - 1) + { + r->lens = (unsigned int *) xrealloc ((char *) r->lens, + (i + 1) * sizeof (unsigned int)); + r->suffixes = (char **) xrealloc ((char *) r->suffixes, + (i + 1) * sizeof (char *)); + } + + if (new_pattern_rule (r, override)) + r->terminal = terminal; +} + +/* Print the data base of rules. */ + +static void /* Useful to call from gdb. */ +print_rule (struct rule *r) +{ + register unsigned int i; + register struct dep *d; + + for (i = 0; r->targets[i] != 0; ++i) + { + fputs (r->targets[i], stdout); + if (r->targets[i + 1] != 0) + putchar (' '); + else + putchar (':'); + } + if (r->terminal) + putchar (':'); + + for (d = r->deps; d != 0; d = d->next) + printf (" %s", dep_name (d)); + putchar ('\n'); + + if (r->cmds != 0) + print_commands (r->cmds); +} + +void +print_rule_data_base (void) +{ + register unsigned int rules, terminal; + register struct rule *r; + + puts (_("\n# Implicit Rules")); + + rules = terminal = 0; + for (r = pattern_rules; r != 0; r = r->next) + { + ++rules; + + putchar ('\n'); + print_rule (r); + + if (r->terminal) + ++terminal; + } + + if (rules == 0) + puts (_("\n# No implicit rules.")); + else + { + printf (_("\n# %u implicit rules, %u"), rules, terminal); +#ifndef NO_FLOAT + printf (" (%.1f%%)", (double) terminal / (double) rules * 100.0); +#else + { + int f = (terminal * 1000 + 5) / rules; + printf (" (%d.%d%%)", f/10, f%10); + } +#endif + puts (_(" terminal.")); + } + + if (num_pattern_rules != rules) + { + /* This can happen if a fatal error was detected while reading the + makefiles and thus count_implicit_rule_limits wasn't called yet. */ + if (num_pattern_rules != 0) + fatal (NILF, _("BUG: num_pattern_rules wrong! %u != %u"), + num_pattern_rules, rules); + } +} diff --git a/src/mkutil/make/rule.h b/src/mkutil/make/rule.h new file mode 100644 index 00000000..576be9e3 --- /dev/null +++ b/src/mkutil/make/rule.h @@ -0,0 +1,61 @@ +/* Definitions for using pattern rules in GNU Make. +Copyright (C) 1988, 1989, 1991, 1992, 1993 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Structure used for pattern rules. */ + +struct rule + { + struct rule *next; + char **targets; /* Targets of the rule. */ + unsigned int *lens; /* Lengths of each target. */ + char **suffixes; /* Suffixes (after `%') of each target. */ + struct dep *deps; /* Dependencies of the rule. */ + struct commands *cmds; /* Commands to execute. */ + char terminal; /* If terminal (double-colon). */ + char in_use; /* If in use by a parent pattern_search. */ + }; + +/* For calling install_pattern_rule. */ +struct pspec + { + char *target, *dep, *commands; + }; + + +extern struct rule *pattern_rules; +extern struct rule *last_pattern_rule; +extern unsigned int num_pattern_rules; + +extern unsigned int max_pattern_deps; +extern unsigned int max_pattern_targets; +extern unsigned int max_pattern_dep_length; + +extern struct file *suffix_file; +extern unsigned int maxsuffix; + + +extern void install_pattern_rule PARAMS ((struct pspec *p, int terminal)); +extern int new_pattern_rule PARAMS ((struct rule *rule, int override)); +extern void count_implicit_rule_limits PARAMS ((void)); +extern void convert_to_pattern PARAMS ((void)); +extern void create_pattern_rule PARAMS ((char **targets, + char **target_percents, int terminal, + struct dep *deps, + struct commands *commands, + int override)); diff --git a/src/mkutil/make/signame.c b/src/mkutil/make/signame.c new file mode 100644 index 00000000..4b12f243 --- /dev/null +++ b/src/mkutil/make/signame.c @@ -0,0 +1,251 @@ +/* Convert between signal names and numbers. +Copyright (C) 1990,92,93,95,96,99, 2002 Free Software Foundation, Inc. +This file was part of the GNU C Library, but is now part of GNU make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" + +/* If the system provides strsignal, we don't need it. */ + +#if !defined(HAVE_STRSIGNAL) + +/* If the system provides sys_siglist, we'll use that. + Otherwise create our own. + */ + +#if !defined(SYS_SIGLIST_DECLARED) + +/* Some systems do not define NSIG in . */ +#ifndef NSIG +#ifdef _NSIG +#define NSIG _NSIG +#else +#define NSIG 32 +#endif +#endif + +/* There is too much variation in Sys V signal numbers and names, so + we must initialize them at runtime. */ + +static const char *undoc; + +static const char *sys_siglist[NSIG]; + +/* Table of abbreviations for signals. Note: A given number can + appear more than once with different abbreviations. */ +#define SIG_TABLE_SIZE (NSIG*2) + +typedef struct + { + int number; + const char *abbrev; + } num_abbrev; + +static num_abbrev sig_table[SIG_TABLE_SIZE]; + +/* Number of elements of sig_table used. */ +static int sig_table_nelts = 0; + +/* Enter signal number NUMBER into the tables with ABBREV and NAME. */ + +static void +init_sig (int number, const char *abbrev, const char *name) +{ + /* If this value is ever greater than NSIG it seems like it'd be a bug in + the system headers, but... better safe than sorry. We know, for + example, that this isn't always true on VMS. */ + + if (number >= 0 && number < NSIG) + sys_siglist[number] = name; + + if (sig_table_nelts < SIG_TABLE_SIZE) + { + sig_table[sig_table_nelts].number = number; + sig_table[sig_table_nelts++].abbrev = abbrev; + } +} + +static int +signame_init (void) +{ + int i; + + undoc = xstrdup (_("unknown signal")); + + /* Initialize signal names. */ + for (i = 0; i < NSIG; i++) + sys_siglist[i] = undoc; + + /* Initialize signal names. */ +#if defined (SIGHUP) + init_sig (SIGHUP, "HUP", _("Hangup")); +#endif +#if defined (SIGINT) + init_sig (SIGINT, "INT", _("Interrupt")); +#endif +#if defined (SIGQUIT) + init_sig (SIGQUIT, "QUIT", _("Quit")); +#endif +#if defined (SIGILL) + init_sig (SIGILL, "ILL", _("Illegal Instruction")); +#endif +#if defined (SIGTRAP) + init_sig (SIGTRAP, "TRAP", _("Trace/breakpoint trap")); +#endif + /* If SIGIOT == SIGABRT, we want to print it as SIGABRT because + SIGABRT is in ANSI and POSIX.1 and SIGIOT isn't. */ +#if defined (SIGABRT) + init_sig (SIGABRT, "ABRT", _("Aborted")); +#endif +#if defined (SIGIOT) + init_sig (SIGIOT, "IOT", _("IOT trap")); +#endif +#if defined (SIGEMT) + init_sig (SIGEMT, "EMT", _("EMT trap")); +#endif +#if defined (SIGFPE) + init_sig (SIGFPE, "FPE", _("Floating point exception")); +#endif +#if defined (SIGKILL) + init_sig (SIGKILL, "KILL", _("Killed")); +#endif +#if defined (SIGBUS) + init_sig (SIGBUS, "BUS", _("Bus error")); +#endif +#if defined (SIGSEGV) + init_sig (SIGSEGV, "SEGV", _("Segmentation fault")); +#endif +#if defined (SIGSYS) + init_sig (SIGSYS, "SYS", _("Bad system call")); +#endif +#if defined (SIGPIPE) + init_sig (SIGPIPE, "PIPE", _("Broken pipe")); +#endif +#if defined (SIGALRM) + init_sig (SIGALRM, "ALRM", _("Alarm clock")); +#endif +#if defined (SIGTERM) + init_sig (SIGTERM, "TERM", _("Terminated")); +#endif +#if defined (SIGUSR1) + init_sig (SIGUSR1, "USR1", _("User defined signal 1")); +#endif +#if defined (SIGUSR2) + init_sig (SIGUSR2, "USR2", _("User defined signal 2")); +#endif + /* If SIGCLD == SIGCHLD, we want to print it as SIGCHLD because that + is what is in POSIX.1. */ +#if defined (SIGCHLD) + init_sig (SIGCHLD, "CHLD", _("Child exited")); +#endif +#if defined (SIGCLD) + init_sig (SIGCLD, "CLD", _("Child exited")); +#endif +#if defined (SIGPWR) + init_sig (SIGPWR, "PWR", _("Power failure")); +#endif +#if defined (SIGTSTP) + init_sig (SIGTSTP, "TSTP", _("Stopped")); +#endif +#if defined (SIGTTIN) + init_sig (SIGTTIN, "TTIN", _("Stopped (tty input)")); +#endif +#if defined (SIGTTOU) + init_sig (SIGTTOU, "TTOU", _("Stopped (tty output)")); +#endif +#if defined (SIGSTOP) + init_sig (SIGSTOP, "STOP", _("Stopped (signal)")); +#endif +#if defined (SIGXCPU) + init_sig (SIGXCPU, "XCPU", _("CPU time limit exceeded")); +#endif +#if defined (SIGXFSZ) + init_sig (SIGXFSZ, "XFSZ", _("File size limit exceeded")); +#endif +#if defined (SIGVTALRM) + init_sig (SIGVTALRM, "VTALRM", _("Virtual timer expired")); +#endif +#if defined (SIGPROF) + init_sig (SIGPROF, "PROF", _("Profiling timer expired")); +#endif +#if defined (SIGWINCH) + /* "Window size changed" might be more accurate, but even if that + is all that it means now, perhaps in the future it will be + extended to cover other kinds of window changes. */ + init_sig (SIGWINCH, "WINCH", _("Window changed")); +#endif +#if defined (SIGCONT) + init_sig (SIGCONT, "CONT", _("Continued")); +#endif +#if defined (SIGURG) + init_sig (SIGURG, "URG", _("Urgent I/O condition")); +#endif +#if defined (SIGIO) + /* "I/O pending" has also been suggested. A disadvantage is + that signal only happens when the process has + asked for it, not everytime I/O is pending. Another disadvantage + is the confusion from giving it a different name than under Unix. */ + init_sig (SIGIO, "IO", _("I/O possible")); +#endif +#if defined (SIGWIND) + init_sig (SIGWIND, "WIND", _("SIGWIND")); +#endif +#if defined (SIGPHONE) + init_sig (SIGPHONE, "PHONE", _("SIGPHONE")); +#endif +#if defined (SIGPOLL) + init_sig (SIGPOLL, "POLL", _("I/O possible")); +#endif +#if defined (SIGLOST) + init_sig (SIGLOST, "LOST", _("Resource lost")); +#endif +#if defined (SIGDANGER) + init_sig (SIGDANGER, "DANGER", _("Danger signal")); +#endif +#if defined (SIGINFO) + init_sig (SIGINFO, "INFO", _("Information request")); +#endif +#if defined (SIGNOFP) + init_sig (SIGNOFP, "NOFP", _("Floating point co-processor not available")); +#endif + + return 1; +} + +#endif /* SYS_SIGLIST_DECLARED */ + + +char * +strsignal (int signal) +{ + static char buf[] = "Signal 12345678901234567890"; + +#if !defined(SYS_SIGLIST_DECLARED) + static char sig_initted = 0; + + if (!sig_initted) + sig_initted = signame_init (); +#endif + + if (signal > 0 || signal < NSIG) + return (char *) sys_siglist[signal]; + + sprintf (buf, "Signal %d", signal); + return buf; +} + +#endif /* HAVE_STRSIGNAL */ diff --git a/src/mkutil/make/subproc.bat b/src/mkutil/make/subproc.bat new file mode 100644 index 00000000..d64eeec9 --- /dev/null +++ b/src/mkutil/make/subproc.bat @@ -0,0 +1,6 @@ +cd w32\subproc +set MAKE=%2 +set MAKEFILE=%1 +if x%2 == x set MAKE=nmake +%MAKE% /f %MAKEFILE% +cd ..\.. diff --git a/src/mkutil/make/tests/.cvsignore b/src/mkutil/make/tests/.cvsignore new file mode 100644 index 00000000..b8f99f5b --- /dev/null +++ b/src/mkutil/make/tests/.cvsignore @@ -0,0 +1 @@ +work diff --git a/src/mkutil/make/tests/COPYING b/src/mkutil/make/tests/COPYING new file mode 100644 index 00000000..a43ea212 --- /dev/null +++ b/src/mkutil/make/tests/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/src/mkutil/make/tests/CVS/Entries b/src/mkutil/make/tests/CVS/Entries new file mode 100644 index 00000000..ad7e162f --- /dev/null +++ b/src/mkutil/make/tests/CVS/Entries @@ -0,0 +1,10 @@ +/.cvsignore/1.1/Wed Sep 11 16:55:45 2002// +/COPYING/1.1/Tue Sep 14 02:03:29 1999// +/ChangeLog/1.50/Fri May 2 01:45:00 2003// +/NEWS/1.1/Tue Sep 14 02:03:29 1999// +/README/1.2/Wed Sep 15 22:23:49 1999// +/mkshadow/1.1/Tue Sep 14 02:03:30 1999// +/run_make_tests/1.1/Tue Sep 14 02:03:30 1999// +/run_make_tests.pl/1.7/Fri May 2 01:45:00 2003// +/test_driver.pl/1.10/Tue Sep 10 22:39:18 2002// +D diff --git a/src/mkutil/make/tests/CVS/Entries.Log b/src/mkutil/make/tests/CVS/Entries.Log new file mode 100644 index 00000000..d9111b0a --- /dev/null +++ b/src/mkutil/make/tests/CVS/Entries.Log @@ -0,0 +1 @@ +A D/scripts//// diff --git a/src/mkutil/make/tests/CVS/Repository b/src/mkutil/make/tests/CVS/Repository new file mode 100644 index 00000000..f94ccc8d --- /dev/null +++ b/src/mkutil/make/tests/CVS/Repository @@ -0,0 +1 @@ +make/tests diff --git a/src/mkutil/make/tests/CVS/Root b/src/mkutil/make/tests/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/tests/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/tests/ChangeLog b/src/mkutil/make/tests/ChangeLog new file mode 100644 index 00000000..3880e8a9 --- /dev/null +++ b/src/mkutil/make/tests/ChangeLog @@ -0,0 +1,400 @@ +2003-04-19 Paul D. Smith + + * scripts/features/patspecific_vars: Test multiple patterns + matching the same target--Bug #1405. + +2003-04-09 Paul D. Smith + + * run_make_tests.pl (set_more_defaults): A new $port_type of + 'OS/2' for (surprise!) OS/2. Also choose a wait time of 2 seconds + for OS/2. + +2003-03-28 Paul D. Smith + + * scripts/targets/SECONDARY: Test the "global" .SECONDARY (with + not prerequisites)--Bug #2515. + +2003-01-30 Paul D. Smith + + * scripts/features/targetvars: Test very long target-specific + variable definition lines (longer than the default make buffer + length). Tests patch # 1022. + + * scripts/functions/eval: Test very recursive $(eval ...) calls + with simple variable expansion (bug #2238). + + * scripts/functions/word: Test error handling for word and + wordlist functions (bug #2407). + +2003-01-22 Paul D. Smith + + * scripts/functions/call: Test recursive argument masking (bug + #1744). + +2002-10-25 Paul D. Smith + + * scripts/functions/eval: Test using $(eval ...) inside + conditionals (Bug #1516). + +2002-10-14 Paul D. Smith + + * scripts/options/dash-t: Add a test for handling -t on targets + with no commands (Bug #1418). + +2002-10-13 Paul D. Smith + + * scripts/features/targetvars: Add a test for exporting + target-specific vars (Bug #1391). + +2002-10-05 Paul D. Smith + + * scripts/variables/automatic: Add tests for $$(@), $${@}, $${@D}, + and $${@F}. + +2002-09-23 Paul D. Smith + + * scripts/features/escape: Test handling of escaped comment + characters in targets and prerequisites. + +2002-09-18 Paul D. Smith + + * scripts/features/export: Test export/unexport of multiple + variables in a single command. + +2002-09-17 Paul D. Smith + + * scripts/features/targetvars: Tests for Bug #940: test + target-specific and pattern-specific variables in conjunction with + double-colon targets. + +2002-09-10 Paul D. Smith + + * test_driver.pl (compare_output): Match the new format for time + skew error messages. + + * scripts/features/export: Created. Add tests for export/unexport + capabilities, including exporting/unexporting expanded variables. + + * scripts/features/conditionals: Add a test for expanded variables + in ifdef conditionals. + +2002-09-04 Paul D. Smith + + * scripts/features/reinvoke: Change touch/sleep combos to utouch + invocations. + * scripts/features/vpathgpath: Ditto. + * scripts/features/vpathplus: Ditto. + * scripts/options/dash-n: Ditto. + * scripts/targets/INTERMEDIATE: Ditto. + * scripts/targets/SECONDARY: Ditto. + + * scripts/options/dash-t: Added a test for the -t bug fixed by + Henning Makholm. This test was also contributed by Henning. + + * scripts/misc/general4: Add a test suite for obscure algorithmic + features of make. First test: make sure creation subdirectories + as prerequisites of targets works properly. + + * scripts/misc/version: Remove this bogus test. + +2002-08-07 Paul D. Smith + + * scripts/misc/general3: Add a test for makefiles that don't end + in newlines. + + * scripts/variables/special: Create tests for the special + variables (.VARIABLES and .TARGETS). Comment out .TARGETS test + for now as it's not yet supported. + +2002-08-01 Paul D. Smith + + * scripts/options/dash-B: Add a test for the new -B option. + +2002-07-11 Paul D. Smith + + * run_make_tests.pl (valid_option): Add support for Valgrind + . Use -valgrind option to the + test suite. + (set_more_defaults): Set up the file descriptor to capture + Valgrind output. We have to unset its close-on-exec flag; we + hardcode the value for F_SETFD (2) rather than load it; hopefully + this will help us avoid breaking the Windows/DOS test suite. + +2002-07-10 Paul D. Smith + + * scripts/variables/automatic: Add some tests for $$@, $$(@D), and + $$(@F). + + * test_driver.pl (utouch): Create a new function that creates a + file with a specific timestamp offset. Use of this function will + let us avoid lots of annoying sleep() invocations in the tests + just to get proper timestamping, which will make the tests run a + lot faster. So far it's only used in the automatic test suite. + +2002-07-09 Paul D. Smith + + * scripts/variables/automatic: Create a test for automatic variables. + +2002-07-08 Paul D. Smith + + * scripts/features/order_only: Test new order-only prerequisites. + +2002-07-07 Paul D. Smith + + * scripts/functions/eval: Test new function. + * scripts/functions/value: Test new function. + * scripts/variables/MAKEFILE_LIST: Test new variable. + +2002-04-28 Paul D. Smith + + * scripts/functions/call: New test: transitive closure + implementation using $(call ...) to test variable recursion. + +2002-04-21 Paul D. Smith + + * test_driver.pl (compare_dir_tree): Ignore CVS and RCS + directories in the script directories. + +2001-05-02 Paul D. Smith + + * scripts/variables/flavors: Test define/endef scripts where only + one of the command lines is quiet. + +2000-06-22 Paul D. Smith + + * scripts/options/dash-q: New file; test the -q option. Includes + a test for PR/1780. + +2000-06-21 Paul D. Smith + + * scripts/features/targetvars: Added a test for PR/1709: allowing + semicolons in target-specific variable values. + +2000-06-19 Paul D. Smith + + * scripts/functions/addsuffix: Test for an empty final argument. + Actually this bug might have happened for any function, but this + one was handy. + +2000-06-17 Eli Zaretskii + + * scripts/options/general: If parallel jobs are not supported, + expect a warning message from Make. + +2000-06-15 Eli Zaretskii + + * scripts/options/general: Don't try -jN with N != 1 if parallel + jobs are not supported. + +2000-05-24 Paul D. Smith + + * scripts/options/general: Test general option processing (PR/1716). + +2000-04-11 Paul D. Smith + + * scripts/functions/strip: Test empty value to strip (PR/1689). + +2000-04-08 Eli Zaretskii + + * scripts/features/reinvoke: Sleep before updating the target + files in the first test, to ensure its time stamp really gets + newer; otherwise Make might re-exec more than once. + +2000-04-07 Eli Zaretskii + + * scripts/features/double_colon: Don't run the parallel tests if + parallel jobs aren't supported. + +2000-04-04 Paul D. Smith + + * scripts/functions/word: wordlist doesn't swap arguments anymore. + +2000-03-27 Paul D. Smith + + * scripts/features/statipattrules: Test that static pattern rules + whose prerequisite patterns resolve to empty strings throw an + error (instead of dumping core). Fixes PR/1670. + + * scripts/features/reinvoke: Make more robust by touching "b" + first, to ensure it's not newer than "a". + Reported by Marco Franzen . + * scripts/options/dash-n: Ditto. + + * scripts/functions/call: Whoops. The fix to PR/1527 caused + recursive invocations of $(call ...) to break. I can't come up + with any way to get both working at the same time, so I backed out + the fix to 1527 and added a test case for recursive calls. This + also tests the fix for PR/1610. + + * scripts/features/double_colon: Test that circular dependencies + in double-colon rule sets are detected correctly (PR/1671). + +2000-03-26 Paul D. Smith + + * scripts/targets/INTERMEDIATE: Test that make doesn't remove + .INTERMEDIATE files when given on the command line (PR/1669). + +2000-03-08 Paul D. Smith + + * scripts/options/dash-k: Add a test for error detection by + multiple targets depending on the same prerequisite with -k. + For PR/1634. + +2000-02-07 Paul D. Smith + + * scripts/features/escape: Add a test for backslash-escaped spaces + in a target name (PR/1586). + +2000-02-04 Paul D. Smith + + * scripts/features/patspecific_vars: Add a test for pattern-specific + target variables inherited from the parent target (PR/1407). + +2000-02-02 Paul D. Smith + + * run_make_tests.pl (set_more_defaults): Hard-code the LANG to C + to make sure sorting order, etc. is predictable. + Reported by Andreas Jaeger . + + * run_make_tests.pl (set_more_defaults): Set the $wtime variable + depending on the OS. Eli Zaretskii reports + this seems to need to be *4* on DOS/Windows, not just 2. Keep it + 1 for other systems. + * scripts/features/vpathplus (touchfiles): Use the $wtime value + instead of hardcoding 2. + * scripts/targets/SECONDARY: Ditto. + * scripts/targets/INTERMEDIATE: Ditto. + +2000-01-27 Paul D. Smith + + * test_driver.pl (toplevel): Don't try to run test scripts which + are really directories. + +2000-01-23 Paul D. Smith + + * scripts/features/include: Remove a check; the fix caused more + problems than the error, so I removed it and removed the test for + it. + +2000-01-11 Paul D. Smith + + * scripts/functions/call: Add a test for PR/1517 and PR/1527: make + sure $(call ...) doesn't eval its arguments and that you can + invoke foreach from it without looping forever. + +1999-12-15 Paul D. Smith + + * scripts/targets/INTERMEDIATE: Add a test for PR/1423: make sure + .INTERMEDIATE settings on files don't disable them as implicit + intermediate possibilities. + +1999-12-01 Paul D. Smith + + * scripts/features/double_colon: Add a test for PR/1476: Try + double-colon rules as non-goal targets and during parallel builds + to make sure they're handled serially. + +1999-11-17 Paul D. Smith + + * scripts/functions/if: Add a test for PR/1429: put some text + after an if-statement to make sure it works. + + * scripts/features/targetvars: Add a test for PR/1380: handling += + in target-specific variable definitions correctly. + +1999-10-15 Paul D. Smith + + * scripts/variables/MAKEFILES: This was really broken: it didn't + test anything at all, really. Rewrote it, plus added a test for + PR/1394. + +1999-10-13 Paul D. Smith + + * scripts/options/dash-n: Add a test for PR/1379: "-n doesn't + behave properly when used with recursive targets". + +1999-10-08 Paul D. Smith + + * scripts/features/targetvars: Add a check for PR/1378: + "Target-specific vars don't inherit correctly" + +1999-09-29 Paul D. Smith + + * test_driver.pl (get_osname): Change $fancy_file_names to + $short_filenames and reverse the logic. + (run_each_test): Change test of non-existent $port_host to use + $short_filenames--problem reported by Eli Zaretskii. + +1999-09-23 Paul D. Smith + + * scripts/features/parallelism: Add a check to ensure that the + jobserver works when we re-invoke. Also cleaned up the tests a + little, reducing the number of rules we use so the test won't need + as many "sleep" commands. + +1999-09-16 Paul D. Smith + + * scripts/features/reinvoke: Remove invocations of "touch" in + makefiles. See the comments on the touch function rewrite below. + Note that UNIX touch behaves the same way if the file already + exists: it sets the time to the _local_ time. We don't want + this. This is probably a good tip for makefile writers in + general, actually... where practical. + * scripts/options/dash-l: Ditto. + * scripts/options/dash-n: Ditto. + + * test_driver.pl (run_each_test): In retrospect, I don't like the + .lN/.bN/.dN postfix required by DOS. So, for non-DOS systems I + changed it back to use .log, .base, and .diff. + + * run_make_tests.pl (set_more_defaults): Move the check for the + make pathname to here from set_defaults (that's too early since it + happens before the command line processing). + Create a new variable $port_type, calculated from $osname, to + specify what kind of system we're running on. We should integrate + the VOS stuff here, too. + (valid_option): Comment out the workdir/-work stuff so people + won't be fooled into thinking it works... someone needs to fix + this, though! + + * scripts/functions/origin: Use $port_type instead of $osname. + * scripts/functions/foreach: Ditto. + * scripts/features/default_names: Ditto. + +1999-09-15 Paul D. Smith + + * test_driver.pl (touch): Rewrite this function. Previously it + used to use utime() to hard-set the time based on the current + local clock, or, if the file didn't exist, it merely created it. + This mirrors exactly what real UNIX touch does, but it fails badly + on networked filesystems where the FS server clock is skewed from + the local clock: normally modifying a file causes it to get a mod + time based on the _server's_ clock. Hard-setting it based on the + _local_ clock causes gratuitous errors and makes the tests + unreliable except on local filesystems. The new function will + simply modify the file, allowing the filesystem to set the mod + time as it sees fit. + + * scripts/features/parallelism: The second test output could + change depending on how fast some scripts completed; use "sleep" + to force the order we want. + + * test_driver.pl (toplevel): A bug in Perl 5.000 to Perl 5.004 + means that "%ENV = ();" doesn't do the right thing. This worked + in Perl 4 and was fixed in Perl 5.004_01, but use a loop to delete + the environment rather than require specific versions. + + * run_make_tests.pl (set_more_defaults): Don't use Perl 5 s/// + modifier "s", so the tests will run with Perl 4. + (set_more_defaults): Set $pure_log to empty if there's no -logfile + option in PURIFYOPTIONS. + (setup_for_test): Don't remove any logs unless $pure_log is set. + +1999-09-15 Eli Zaretskii + + * scripts/features/reinvoke: Put the SHELL definition in the right + test makefile. + +1999-09-15 Paul D. Smith + + ChangeLog file for the test suite created. diff --git a/src/mkutil/make/tests/NEWS b/src/mkutil/make/tests/NEWS new file mode 100644 index 00000000..a9fdaee8 --- /dev/null +++ b/src/mkutil/make/tests/NEWS @@ -0,0 +1,161 @@ +Changes from 0.4.9 to 3.78 (Sep 6, 1999): + + Lots of new tests. Renamed to follow the GNU make scheme. Also + added some support for using Purify with make. + + Rob Tulloh contributed some changes to get the test suite running on + NT; I tweaked them a bit (hopefully I didn't break anything!) Note + that NT doesn't grok the self-exec funkiness that Unix shells use, + so instead I broke that out into a separate shell script + "run_make_tests" that invokes perl with the (renamed) script + run_make_tests.pl. + + Eli Zaretski contributed changes to get the test suite running on + DOS with DJGPP. I also meddled in these somewhat. + + If you're on DOS or NT you should run "perl.exe run_make_tests.pl ..." + If you're on Unix, you can continue to run "./run_make_tests ..." as + before. + +Changes from 0.4.8 to 0.4.9 (May 14, 1998): + + Release by Paul D. Smith ; I'm the one to + blame for problems in this version :). + + Add some perl to test_driver.pl to strip out GNU make clock skew + warning messages from the output before comparing it to the + known-good output. + + A new test for escaped :'s in filenames (someone on VMS found this + didn't work anymore in 3.77): scripts/features/escape. + +Changes from 0.4.7 to 0.4.8 (May 14, 1998): + + Release by Paul D. Smith ; I'm the one to + blame for problems in this version :). + + New tests for features to be included in GNU make 3.77. + +Changes from 0.4.6 to 0.4.7 (August 18, 1997): + + Release by Paul D. Smith ; I'm the one to + blame for problems in this version :). + + Reworked some tests to make sure they all work with both perl4 and perl5. + + Work around a bug in perl 5.004 which doesn't clean the environment + correctly in all cases (fixed in at least 5.004_02). + + Updated functions/strip to test for newline stripping. + + Keep a $PURIFYOPTIONS env variable if present. + +Changes from 0.4.5 to 0.4.6 (April 07, 1997): + + Release by Paul D. Smith ; I'm the one to + blame for problems in this version :). + + Updated to work with GNU make 3.76 (and pretests). + + Added new tests and updated existing ones. Note that the new tests + weren't tested with perl 4, however I think they should work. + + Ignore any tests whose filenames end in "~", so that Emacs backup + files aren't run. + +Changes from 0.4.4 to 0.4.5 (April 29, 1995): + + Updated to be compatible with perl 5.001 as well as 4.036. + + Note: the test suite still won't work on 14-char filesystems + (sorry, Kaveh), but I will get to it. + + Also, some tests and stuff still haven't made it in because I + haven't had time to write the test scripts for them. But they, + too, will get in eventually. Contributions of scripts (ie, tests + that I can just drop in) are particularly welcome and will be + incorporated immediately. + +Changes from 0.4.3 to 0.4.4 (March 1995): + + Updated for changes in make 3.72.12, and to ignore CVS directories + (thanks go to Jim Meyering for the patches for this). + + Fixed uname call to not make a mess on BSD/OS 2.0 (whose uname -a + is very verbose). Let me know if this doesn't work correctly on + your system. + + Changed to display test name while it is running, not just when it + finishes. + + Note: the test suite still won't work on 14-char filesystems + (sorry, Kaveh), but I will get to it. + + Also, some tests and stuff still haven't made it in because I + haven't had time to write the test scripts for them. But they, + too, will get in eventually. + +Changes from 0.4 to 0.4.3 (October 1994): + + Fixed bugs (like dependencies on environment variables). + + Caught up with changes in make. + + The load_limit test should now silently ignore a failure due to + make not being able to read /dev/kmem. + + Reorganized tests into subdirs and renamed lots of things so that + those poor souls who still have to deal with 14-char filename + limits won't hate me any more. Thanks very much to Kaveh R. Ghazi + for helping me with the implementation and + testing of these changes, and for putting up with all my whining + about it... + + Added a $| = 1 so that systems that don't seem to automatically + flush their output for some reason will still print all the + output. I'd hate for someone to miss out on the smiley that + you're supposed to get when all the tests pass... :-) + +Changes from 0.3 to 0.4 (August 1993): + + Lost in the mists of time (and my hurry to get it out before I + left my job). + +Changes from 0.2 to 0.3 (9-30-92): + + Several tests fixed to match the fact that MAKELEVEL > 0 or -C now + imply -w. + + parallel_execution test fixed to not use double colon rules any + more since their behavior has changed. + + errors_in_commands test fixed to handle different error messages + and return codes from rm. + + Several tests fixed to handle -make_path with a relative path + and/or a name other than "make" for make. + + dash-e-option test fixed to use $PATH instead of $USER (since the + latter does not exist on some System V systems). This also + removes the dependency on getlogin (which fails under certain + weird conditions). + + test_driver_core changed so that you can give a test name like + scripts/errors_in_commands and it will be handled correctly (handy + if you have a shell with filename completion). + +Changes from 0.1 to 0.2 (5-4-92): + + README corrected to require perl 4.019, not 4.010. + + -make_path replaces -old. + + errors_in_commands test updated for change in format introduced in + make 3.62.6. + + test_driver_core now uses a better way of figuring what OS it is + running on (thanks to meyering@cs.utexas.edu (Jim Meyering) for + suggesting this, as well as discovering the hard way that the old + way (testing for /mnt) fails on his machine). + + Some new tests were added. diff --git a/src/mkutil/make/tests/README b/src/mkutil/make/tests/README new file mode 100644 index 00000000..12fa6983 --- /dev/null +++ b/src/mkutil/make/tests/README @@ -0,0 +1,79 @@ +This is release 3.78 (September 6, 1999) of the GNU make test +suite. See the file NEWS for some of the changes since the last +release. + +This release is made by psmith@gnu.org to correspond to GNU make 3.78. +It won't work correctly for versions before that. In addition to some +infrastructure changes I've added a number of new tests. + +Rob Tulloh has contributed changes to get the suite running on NT. + +Eli Zaretskii and Esa A E Peuha have contributed +changes to get the suite running on DJGPP/DOS. + +This package has a number of problems which preclude me from +distributing it with make as a default "make check" test suite. The +most serious of these is that it's not parallelizable: it scribbles all +over its installation directory and so can only test one make at a +time. I simply don't have time to do more with this than I am so far; +I'm very actively interested in finding someone willing to overhaul the +test suite infrastructure. If you're interested, contact me (see below)! + +The test suite thus far has been written by Steve McGee, Chris Arthur, +and Paul D. Smith. It is covered by the GNU General Public License +(Version 2), described in the file COPYING. + +The test suite requires Perl and is known to work with Perl 4.036 and +Perl 5.004 (available from ftp.gnu.org, and portable to many machines). +Earlier or later versions may work; I don't know. It assumes that the +first "diff" it finds is GNU diff, but that only matters if a test +fails. + +To run the test suite on a UNIX system, use "perl ./run_make_tests" +(or just "./run_make_tests" if you have a perl on your PATH). + +To run the test suite on Windows NT or DOS systems, use +"perl.exe ./run_make-tests.pl". + +By default, the test engine picks up the first executable called "make" +that it finds in your path. You may use the -make_path option (ie, +"perl run_make_tests -make_path /usr/local/src/make-3.78/make") if +you want to run a particular copy. This now works correctly with +relative paths and when make is called something other than "make" (like +"gmake"). + +Tests cannot end with a "~" character, as the test suite will ignore any +that do (I was tired of having it run my Emacs backup files as test :) + +If you want to run the tests in parallel, you should use the mkshadow +script included here to create temporary "copies" (via symbolic links) +of the test suite, one for each parallel job. This is a pain and one +day maybe the test suite will be rewritten so it's no longer +necessary--volunteers welcome! + +Also, sometimes the tests may behave strangely on networked +filesystems. You can use mkshadow to create a copy of the test suite in +/tmp or similar, and try again. If the error disappears, it's an issue +with your network or file server, not GNU make (I believe). + +The options/dash-l test will not really test anything if the copy of +make you are using can't obtain the system load. Some systems require +make to be setgid sys or kmem for this; if you don't want to install +make just to test it, make it setgid to kmem or whatever group /dev/kmem +is (ie, "chgrp kmem make;chmod g+s make" as root). In any case, the +options/dash-l test should no longer *fail* because make can't read +/dev/kmem. + +A directory named "work" will be created when the tests are run which +will contain any makefiles and "diff" files of tests that fail so that +you may look at them afterward to see the output of make and the +expected result. + +There is a -help option which will give you more information about the +other possible options for the test suite. + +Any complaints/suggestions/bugs/etc. for the test suite itself (as +opposed to problems in make that the suite finds) should be sent to +psmith@gnu.org. Enjoy! + Paul D. Smith + Chris Arthur diff --git a/src/mkutil/make/tests/mkshadow b/src/mkutil/make/tests/mkshadow new file mode 100644 index 00000000..baae8364 --- /dev/null +++ b/src/mkutil/make/tests/mkshadow @@ -0,0 +1,42 @@ +#!/bin/sh +# +# Simple script to make a "shadow" test directory, using symbolic links. +# Typically you'd put the shadow in /tmp or another local disk +# + +case "$1" in + "") echo 'Usage: mkshadow '; exit 1 ;; +esac + +dest="$1" + +if [ ! -d "$dest" ]; then + echo "Destination directory \`$dest' must exist!" + exit 1 +fi + +if [ ! -f run_make_tests ]; then + echo "The current directory doesn't appear to contain the test suite!" + exit 1 +fi + +suite=`pwd | sed 's%^/tmp_mnt%%'` +name=`basename "$suite"` + +files=`echo *` + +set -e + +mkdir "$dest/$name" +cd "$dest/$name" + +ln -s "$suite" .testdir + +for f in $files; do + ln -s .testdir/$f . +done + +rm -rf work + +echo "Shadow test suite created in \`$dest/$name'." +exit 0 diff --git a/src/mkutil/make/tests/run_make_tests b/src/mkutil/make/tests/run_make_tests new file mode 100644 index 00000000..b68b7849 --- /dev/null +++ b/src/mkutil/make/tests/run_make_tests @@ -0,0 +1,2 @@ +#!/bin/sh +exec perl $0.pl ${1+"$@"} diff --git a/src/mkutil/make/tests/run_make_tests.pl b/src/mkutil/make/tests/run_make_tests.pl new file mode 100644 index 00000000..4389d434 --- /dev/null +++ b/src/mkutil/make/tests/run_make_tests.pl @@ -0,0 +1,274 @@ +#!/usr/local/bin/perl +# -*-perl-*- + +# Test driver for the Make test suite + +# Usage: run_make_tests [testname] +# [-debug] +# [-help] +# [-verbose] +# [-keep] +# [-make ] +# (and others) + +$valgrind = 0; # invoke make with valgrind + +require "test_driver.pl"; + +#$SIG{INT} = sub { print STDERR "Caught a signal!\n"; die @_; }; + +sub valid_option +{ + local($option) = @_; + + if ($option =~ /^-make([-_]?path)?$/) + { + $make_path = shift @argv; + if (!-f $make_path) + { + print "$option $make_path: Not found.\n"; + exit 0; + } + return 1; + } + + if ($option =~ /^-valgrind$/i) { + $valgrind = 1; + return 1; + } + +# This doesn't work--it _should_! Someone needs to fix this badly. +# +# elsif ($option =~ /^-work([-_]?dir)?$/) +# { +# $workdir = shift @argv; +# return 1; +# } + + return 0; +} + +sub run_make_with_options +{ + local ($filename,$options,$logname,$expected_code) = @_; + local($code); + local($command) = $make_path; + + $expected_code = 0 unless defined($expected_code); + + if ($filename) + { + $command .= " -f $filename"; + } + + if ($options) + { + $command .= " $options"; + } + + if ($valgrind) { + print VALGRIND "\n\nExecuting: $command\n"; + } + + $code = &run_command_with_output($logname,$command); + + # Check to see if we have Purify errors. If so, keep the logfile. + # For this to work you need to build with the Purify flag -exit-status=yes + + if ($pure_log && -f $pure_log) { + if ($code & 0x7000) { + $code &= ~0x7000; + + # If we have a purify log, save it + $tn = $pure_testname . ($num_of_logfiles ? ".$num_of_logfiles" : ""); + print("Renaming purify log file to $tn\n") if $debug; + rename($pure_log, "$tn") + || die "Can't rename $log to $tn: $!\n"; + ++$purify_errors; + } + else { + unlink($pure_log); + } + } + + if ($code != $expected_code) + { + print "Error running $make_path ($code): $command\n"; + $test_passed = 0; + # If it's a SIGINT, stop here + if ($code & 127) { + print STDERR "\nCaught signal ".($code & 127)."!\n"; + exit($code); + } + return 0; + } + + if ($profile & $vos) + { + system "add_profile $make_path"; + } +1; +} + +sub print_usage +{ + &print_standard_usage ("run_make_tests", "[-make_path make_pathname]"); +} + +sub print_help +{ + &print_standard_help ("-make_path", + "\tYou may specify the pathname of the copy of make to run."); +} + +sub get_this_pwd { + if ($vos) { + $delete_command = "delete_file"; + $__pwd = `++(current_dir)`; + } + else { + $delete_command = "rm"; + chop ($__pwd = `pwd`); + } + + return $__pwd; +} + +sub set_defaults +{ + # $profile = 1; + $testee = "GNU make"; + $make_path = "make"; + $tmpfilesuffix = "mk"; + $pwd = &get_this_pwd; +} + +sub set_more_defaults +{ + local($string); + local($index); + + # Make sure we're in the C locale for those systems that support it, + # so sorting, etc. is predictable. + # + $ENV{LANG} = 'C'; + + # find the type of the port. We do this up front to have a single + # point of change if it needs to be tweaked. + # + # This is probably not specific enough. + # + if ($osname =~ /Windows/i) { + $port_type = 'W32'; + } + # Bleah, the osname is so variable on DOS. This kind of bites. + # Well, as far as I can tell if we check for some text at the + # beginning of the line with either no spaces or a single space, then + # a D, then either "OS", "os", or "ev" and a space. That should + # match and be pretty specific. + elsif ($osname =~ /^([^ ]*|[^ ]* [^ ]*)D(OS|os|ev) /) { + $port_type = 'DOS'; + } + # Check for OS/2 + elsif ($osname =~ m%OS/2%) { + $port_type = 'OS/2'; + } + # Everything else, right now, is UNIX. Note that we should integrate + # the VOS support into this as well and get rid of $vos; we'll do + # that next time. + else { + $port_type = 'UNIX'; + } + + # On DOS/Windows system the filesystem apparently can't track + # timestamps with second granularity (!!). Change the sleep time + # needed to force a file to be considered "old". + # + $wtime = $port_type eq 'UNIX' ? 1 : $port_type eq 'OS/2' ? 2 : 4; + + # Find the full pathname of Make. For DOS systems this is more + # complicated, so we ask make itself. + + $make_path = `sh -c 'echo "all:;\@echo \\\$(MAKE)" | $make_path -f-'`; + chop $make_path; + print "Make\t= `$make_path'\n" if $debug; + + $string = `$make_path -v -f /dev/null 2> /dev/null`; + + $string =~ /^(GNU Make [^,\n]*)/; + $testee_version = "$1\n"; + + $string = `sh -c "$make_path -f /dev/null 2>&1"`; + if ($string =~ /(.*): \*\*\* No targets\. Stop\./) { + $make_name = $1; + } + else { + if ($make_path =~ /$pathsep([^\n$pathsep]*)$/) { + $make_name = $1; + } + else { + $make_name = $make_path; + } + } + + # prepend pwd if this is a relative path (ie, does not + # start with a slash, but contains one). Thanks for the + # clue, Roland. + + if (index ($make_path, ":") != 1 && index ($make_path, "/") > 0) + { + $mkpath = "$pwd$pathsep$make_path"; + } + else + { + $mkpath = $make_path; + } + + # Get Purify log info--if any. + + $ENV{PURIFYOPTIONS} =~ /.*-logfile=([^ ]+)/; + $pure_log = $1 || ''; + $pure_log =~ s/%v/$make_name/; + $purify_errors = 0; + + $string = `sh -c "$make_path -j 2 -f /dev/null 2>&1"`; + if ($string =~ /not supported/) { + $parallel_jobs = 0; + } + else { + $parallel_jobs = 1; + } + + # Set up for valgrind, if requested. + + if ($valgrind) { +# use POSIX qw(:fcntl_h); +# require Fcntl; + open(VALGRIND, "> valgrind.out") + || die "Cannot open valgrind.out: $!\n"; + # -q --leak-check=yes + $make_path = "valgrind --num-callers=15 --logfile-fd=".fileno(VALGRIND)." $make_path"; + # F_SETFD is 2 + fcntl(VALGRIND, 2, 0) or die "fcntl(setfd) failed: $!\n"; + system("echo Starting on `date` 1>&".fileno(VALGRIND)); + print "Enabled valgrind support.\n"; + } +} + +sub setup_for_test +{ + $makefile = &get_tmpfile; + if (-f $makefile) { + unlink $makefile; + } + + # Get rid of any Purify logs. + if ($pure_log) { + ($pure_testname = $testname) =~ tr,/,_,; + $pure_testname = "$pure_log.$pure_testname"; + system("rm -f $pure_testname*"); + print("Purify testfiles are: $pure_testname*\n") if $debug; + } +} + +exit !&toplevel; diff --git a/src/mkutil/make/tests/scripts/CVS/Entries b/src/mkutil/make/tests/scripts/CVS/Entries new file mode 100644 index 00000000..38d73c2c --- /dev/null +++ b/src/mkutil/make/tests/scripts/CVS/Entries @@ -0,0 +1,2 @@ +/test_template/1.1/Tue Sep 14 02:03:32 1999// +D diff --git a/src/mkutil/make/tests/scripts/CVS/Entries.Log b/src/mkutil/make/tests/scripts/CVS/Entries.Log new file mode 100644 index 00000000..d051b1c4 --- /dev/null +++ b/src/mkutil/make/tests/scripts/CVS/Entries.Log @@ -0,0 +1,6 @@ +A D/features//// +A D/functions//// +A D/misc//// +A D/options//// +A D/targets//// +A D/variables//// diff --git a/src/mkutil/make/tests/scripts/CVS/Repository b/src/mkutil/make/tests/scripts/CVS/Repository new file mode 100644 index 00000000..b9a0539c --- /dev/null +++ b/src/mkutil/make/tests/scripts/CVS/Repository @@ -0,0 +1 @@ +make/tests/scripts diff --git a/src/mkutil/make/tests/scripts/CVS/Root b/src/mkutil/make/tests/scripts/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/tests/scripts/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/tests/scripts/features/CVS/Entries b/src/mkutil/make/tests/scripts/features/CVS/Entries new file mode 100644 index 00000000..89219ab0 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/CVS/Entries @@ -0,0 +1,26 @@ +/comments/1.1/Tue Sep 14 02:03:34 1999// +/conditionals/1.3/Tue Sep 10 22:23:20 2002// +/default_names/1.2/Fri Sep 17 03:16:03 1999// +/double_colon/1.6/Mon Sep 23 22:16:40 2002// +/echoing/1.1/Tue Sep 14 02:03:35 1999// +/errors/1.1/Tue Sep 14 02:03:35 1999// +/escape/1.3/Mon Sep 23 22:16:40 2002// +/export/1.3/Wed Sep 18 20:51:59 2002// +/include/1.2/Sun Jan 23 07:05:17 2000// +/mult_rules/1.1/Tue Sep 14 02:03:36 1999// +/mult_targets/1.1/Tue Sep 14 02:03:36 1999// +/order_only/1.2/Tue Jul 9 06:35:56 2002// +/override/1.1/Tue Sep 14 02:03:36 1999// +/parallelism/1.3/Thu Sep 23 18:23:53 1999// +/patspecific_vars/1.3/Fri May 2 01:45:00 2003// +/quoting/1.1/Tue Sep 14 02:03:37 1999// +/recursion/1.1/Tue Sep 14 02:03:37 1999// +/reinvoke/1.6/Wed Sep 4 07:26:20 2002// +/statipattrules/1.2/Mon Mar 27 20:53:50 2000// +/targetvars/1.9/Thu Jan 30 07:49:17 2003// +/varnesting/1.1/Tue Sep 14 02:03:38 1999// +/vpath/1.1/Tue Sep 14 02:03:38 1999// +/vpath2/1.1/Tue Sep 14 02:03:38 1999// +/vpathgpath/1.2/Wed Sep 4 07:26:20 2002// +/vpathplus/1.3/Wed Sep 4 07:26:20 2002// +D diff --git a/src/mkutil/make/tests/scripts/features/CVS/Repository b/src/mkutil/make/tests/scripts/features/CVS/Repository new file mode 100644 index 00000000..01f4082e --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/CVS/Repository @@ -0,0 +1 @@ +make/tests/scripts/features diff --git a/src/mkutil/make/tests/scripts/features/CVS/Root b/src/mkutil/make/tests/scripts/features/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/tests/scripts/features/comments b/src/mkutil/make/tests/scripts/features/comments new file mode 100644 index 00000000..9257955f --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/comments @@ -0,0 +1,35 @@ +$description = "The following test creates a makefile to test comments\n" + ."and comment continuation to the next line using a \n" + ."backslash within makefiles."; + +$details = "To test comments within a makefile, a semi-colon was placed \n" + ."after a comment was started. This should not be reported as\n" + ."an error since it is within a comment. We then continue the \n" + ."comment to the next line using a backslash. To test whether\n" + ."the comment really continued, we place an echo command with some\n" + ."text on the line which should never execute since it should be \n" + ."within a comment\n"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE <<\EOF; +# Test comment vs semicolon parsing and line continuation +target: # this ; is just a comment \ + @echo This is within a comment. + @echo There should be no errors for this makefile. +EOF + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "There should be no errors for this makefile.\n"; + +# COMPARE RESULTS + +&compare_output($answer,&get_logfile(1)) diff --git a/src/mkutil/make/tests/scripts/features/conditionals b/src/mkutil/make/tests/scripts/features/conditionals new file mode 100644 index 00000000..9aad1d19 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/conditionals @@ -0,0 +1,100 @@ +# -*-perl-*- +$description = "Check GNU make conditionals."; + +$details = "Attempt various different flavors of GNU make conditionals."; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE <<'EOMAKE'; +objects = foo.obj +arg1 = first +arg2 = second +arg3 = third +arg4 = cc +arg5 = second + +all: +ifeq ($(arg1),$(arg2)) + @echo arg1 equals arg2 +else + @echo arg1 NOT equal arg2 +endif + +ifeq '$(arg2)' "$(arg5)" + @echo arg2 equals arg5 +else + @echo arg2 NOT equal arg5 +endif + +ifneq '$(arg3)' '$(arg4)' + @echo arg3 NOT equal arg4 +else + @echo arg3 equal arg4 +endif + +ifndef undefined + @echo variable is undefined +else + @echo variable undefined is defined +endif +ifdef arg4 + @echo arg4 is defined +else + @echo arg4 is NOT defined +endif + +EOMAKE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile,0); + +$answer = "arg1 NOT equal arg2 +arg2 equals arg5 +arg3 NOT equal arg4 +variable is undefined +arg4 is defined +"; + +&compare_output($answer,&get_logfile(1)); + + +# Test expansion of variables inside ifdef. + +$makefile2 = &get_tmpfile; + +open(MAKEFILE, "> $makefile2"); + +print MAKEFILE <<'EOF'; + +foo = 1 + +FOO = foo +F = f + +DEF = no +DEF2 = no + +ifdef $(FOO) +DEF = yes +endif + +ifdef $(F)oo +DEF2 = yes +endif + +all:; @echo DEF=$(DEF) DEF2=$(DEF2) + +EOF + +close(MAKEFILE) + +&run_make_with_options($makefile2,"",&get_logfile,0); +$answer = "DEF=yes DEF2=yes\n"; +&compare_output($answer,&get_logfile(1)); + + +# This tells the test driver that the perl test script executed properly. +1; diff --git a/src/mkutil/make/tests/scripts/features/default_names b/src/mkutil/make/tests/scripts/features/default_names new file mode 100644 index 00000000..501f1fc9 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/default_names @@ -0,0 +1,65 @@ +# -*-perl-*- + +$description = "This script tests to make sure that Make looks for +default makefiles in the correct order (GNUmakefile,makefile,Makefile)"; + +# Create a makefile called "GNUmakefile" +$makefile = "GNUmakefile"; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE "FIRST: ; \@echo It chose GNUmakefile\n"; + +close(MAKEFILE); + +# DOS/WIN32 platforms preserve case, but Makefile is the same file as makefile. +# Just test what we can here (avoid Makefile versus makefile test). +# +if ($port_type eq 'UNIX') +{ + # Create another makefile called "makefile" + open(MAKEFILE,"> makefile"); + + print MAKEFILE "SECOND: ; \@echo It chose makefile\n"; + + close(MAKEFILE); +} + + +# Create another makefile called "Makefile" +open(MAKEFILE,"> Makefile"); + +print MAKEFILE "THIRD: ; \@echo It chose Makefile\n"; + +close(MAKEFILE); + + +&run_make_with_options("","",&get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "It chose GNUmakefile\n"; + +# COMPARE RESULTS + +&compare_output($answer,&get_logfile(1)) || &error("abort"); +unlink $makefile; + +# DOS/WIN32 platforms preserve case, but Makefile is the same file as makefile. +# Just test what we can here (avoid Makefile versus makefile test). +# +if ($port_type eq 'UNIX') +{ + $answer = "It chose makefile\n"; + + &run_make_with_options("","",&get_logfile); + + &compare_output($answer,&get_logfile(1)) || &error("abort"); + unlink "makefile"; +} + +$answer = "It chose Makefile\n"; + +&run_make_with_options("","",&get_logfile); + +&compare_output($answer,&get_logfile(1)) || &error("abort"); +unlink "Makefile"; diff --git a/src/mkutil/make/tests/scripts/features/double_colon b/src/mkutil/make/tests/scripts/features/double_colon new file mode 100644 index 00000000..082b815a --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/double_colon @@ -0,0 +1,127 @@ +# -*-perl-*- +$description = "Test handling of double-colon rules."; + +$details = "\ +We test these features: + + - Multiple commands for the same (double-colon) target + - Different prerequisites for targets: only out-of-date + ones are rebuilt. + - Double-colon targets that aren't the goal target. + +Then we do the same thing for parallel builds: double-colon +targets should always be built serially."; + +# The Contents of the MAKEFILE ... + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; + +all: baz + +foo:: f1.h ; @echo foo FIRST +foo:: f2.h ; @echo foo SECOND + +bar:: ; @echo aaa; sleep 1; echo aaa done +bar:: ; @echo bbb + +baz:: ; @echo aaa +baz:: ; @echo bbb + +biz:: ; @echo aaa +biz:: two ; @echo bbb + +two: ; @echo two + +f1.h f2.h: ; @echo $@ + +d :: ; @echo ok +d :: d ; @echo oops + +EOF + +close(MAKEFILE); + +# TEST 0: A simple double-colon rule that isn't the goal target. + +&run_make_with_options($makefile, "all", &get_logfile, 0); +$answer = "aaa\nbbb\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST 1: As above, in parallel + +if ($parallel_jobs) { + &run_make_with_options($makefile, "-j10 all", &get_logfile, 0); + $answer = "aaa\nbbb\n"; + &compare_output($answer, &get_logfile(1)); +} + +# TEST 2: A simple double-colon rule that is the goal target + +&run_make_with_options($makefile, "bar", &get_logfile, 0); +$answer = "aaa\naaa done\nbbb\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST 3: As above, in parallel + +if ($parallel_jobs) { + &run_make_with_options($makefile, "-j10 bar", &get_logfile, 0); + $answer = "aaa\naaa done\nbbb\n"; + &compare_output($answer, &get_logfile(1)); +} + +# TEST 4: Each double-colon rule is supposed to be run individually + +&utouch(-5, 'f2.h'); +&touch('foo'); + +&run_make_with_options($makefile, "foo", &get_logfile, 0); +$answer = "f1.h\nfoo FIRST\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST 5: Again, in parallel. + +if ($parallel_jobs) { + &run_make_with_options($makefile, "-j10 foo", &get_logfile, 0); + $answer = "f1.h\nfoo FIRST\n"; + &compare_output($answer, &get_logfile(1)); +} + +# TEST 6: Each double-colon rule is supposed to be run individually + +&utouch(-5, 'f1.h'); +unlink('f2.h'); +&touch('foo'); + +&run_make_with_options($makefile, "foo", &get_logfile, 0); +$answer = "f2.h\nfoo SECOND\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST 7: Again, in parallel. + +if ($parallel_jobs) { + &run_make_with_options($makefile, "-j10 foo", &get_logfile, 0); + $answer = "f2.h\nfoo SECOND\n"; + &compare_output($answer, &get_logfile(1)); +} + +# TEST 8: Test circular dependency check; PR/1671 + +&run_make_with_options($makefile, "d", &get_logfile, 0); +$answer = "ok\n$make_name: Circular d <- d dependency dropped.\noops\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST 8: I don't grok why this is different than the above, but it is... +# +# Hmm... further testing indicates this might be timing-dependent? +# +#if ($parallel_jobs) { +# &run_make_with_options($makefile, "-j10 biz", &get_logfile, 0); +# $answer = "aaa\ntwo\nbbb\n"; +# &compare_output($answer, &get_logfile(1)); +#} + +unlink('foo','f1.h','f2.h'); + +1; diff --git a/src/mkutil/make/tests/scripts/features/echoing b/src/mkutil/make/tests/scripts/features/echoing new file mode 100644 index 00000000..ed1e8622 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/echoing @@ -0,0 +1,90 @@ +$description = "The following test creates a makefile to test command \n" + ."echoing. It tests that when a command line starts with \n" + ."a '\@', the echoing of that line is suppressed. It also \n" + ."tests the -n option which tells make to ONLY echo the \n" + ."commands and no execution happens. In this case, even \n" + ."the commands with '\@' are printed. Lastly, it tests the \n" + ."-s flag which tells make to prevent all echoing, as if \n" + ."all commands started with a '\@'."; + +$details = "This test is similar to the 'clean' test except that a '\@' has\n" + ."been placed in front of the delete command line. Four tests \n" + ."are run here. First, make is run normally and the first echo\n" + ."command should be executed. In this case there is no '\@' so \n" + ."we should expect make to display the command AND display the \n" + ."echoed message. Secondly, make is run with the clean target, \n" + ."but since there is a '\@' at the beginning of the command, we\n" + ."expect no output; just the deletion of a file which we check \n" + ."for. Third, we give the clean target again except this time\n" + ."we give make the -n option. We now expect the command to be \n" + ."displayed but not to be executed. In this case we need only \n" + ."to check the output since an error message would be displayed\n" + ."if it actually tried to run the delete command again and the \n" + ."file didn't exist. Lastly, we run the first test again with \n" + ."the -s option and check that make did not echo the echo \n" + ."command before printing the message."; + +$example = "EXAMPLE_FILE"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "all: \n"; +print MAKEFILE "\techo This makefile did not clean the dir... good\n"; +print MAKEFILE "clean: \n"; +print MAKEFILE "\t\@$delete_command $example\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&touch($example); + +# TEST #1 +# ------- + +&run_make_with_options($makefile,"",&get_logfile,0); +$answer = "echo This makefile did not clean the dir... good\n" + ."This makefile did not clean the dir... good\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST #2 +# ------- + +&run_make_with_options($makefile,"clean",&get_logfile,0); +$answer = ""; +&compare_output($answer,&get_logfile(1)); + +if (-f $example) +{ + $test_passed = 0; +} + +# TEST #3 +# ------- + +&run_make_with_options($makefile,"-n clean",&get_logfile,0); +$answer = "$delete_command $example\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST #4 +# ------- + +&run_make_with_options($makefile,"-s",&get_logfile,0); +$answer = "This makefile did not clean the dir... good\n"; +&compare_output($answer,&get_logfile(1)); + + +1; + + + + + + + + + diff --git a/src/mkutil/make/tests/scripts/features/errors b/src/mkutil/make/tests/scripts/features/errors new file mode 100644 index 00000000..a39064f6 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/errors @@ -0,0 +1,93 @@ +$description = "The following tests the -i option and the '-' in front of \n" + ."commands to test that make ignores errors in these commands\n" + ."and continues processing."; + +$details = "This test runs two makes. The first runs on a target with a \n" + ."command that has a '-' in front of it (and a command that is \n" + ."intended to fail) and then a delete command after that is \n" + ."intended to succeed. If make ignores the failure of the first\n" + ."command as it is supposed to, then the second command should \n" + ."delete a file and this is what we check for. The second make\n" + ."that is run in this test is identical except that the make \n" + ."command is given with the -i option instead of the '-' in \n" + ."front of the command. They should run the same. "; + +if ($vos) +{ + $delete_command = "delete_file"; +} +else +{ + $delete_command = "rm"; +} + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "clean:\n" + ."\t-$delete_command cleanit\n" + ."\t$delete_command foo\n" + ."clean2: \n" + ."\t$delete_command cleanit\n" + ."\t$delete_command foo\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&touch("foo"); + +unlink("cleanit"); +$cleanit_error = `sh -c "$delete_command cleanit 2>&1"`; +$delete_error_code = $? >> 8; + +# TEST #1 +# ------- + +$answer = "$delete_command cleanit\n" + . $cleanit_error + ."$make_name: [clean] Error $delete_error_code (ignored)\n" + ."$delete_command foo\n"; + +&run_make_with_options($makefile,"",&get_logfile); + +# The output for this on VOS is too hard to replicate, so we only check it +# on unix. +if (!$vos) +{ + &compare_output($answer,&get_logfile(1)); +} + +# If make acted as planned, it should ignore the error from the first +# command in the target and execute the second which deletes the file "foo" +# This file, therefore, should not exist if the test PASSES. +if (-f "foo") +{ + $test_passed = 0; +} + + +&touch("foo"); + +# TEST #2 +# ------- + +$answer = "$delete_command cleanit\n" + . $cleanit_error + ."$make_name: [clean2] Error $delete_error_code (ignored)\n" + ."$delete_command foo\n"; + +&run_make_with_options($makefile,"clean2 -i",&get_logfile); + +if (!$vos) +{ + &compare_output($answer,&get_logfile(1)); +} + +if (-f "foo") +{ + $test_passed = 0; +} + +1; diff --git a/src/mkutil/make/tests/scripts/features/escape b/src/mkutil/make/tests/scripts/features/escape new file mode 100644 index 00000000..88b372a0 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/escape @@ -0,0 +1,60 @@ +# -*-perl-*- +$description = "Test various types of escaping in makefiles."; + +$details = "\ +Make sure that escaping of `:' works in target names. +Make sure escaping of whitespace works in target names. +Make sure that escaping of '#' works."; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; +$(path)foo : ; @echo cp $^ $@ + +foo\ bar: ; @echo 'touch "$@"' + +sharp: foo\#bar.ext +foo\#bar.ext: ; @echo foo\#bar.ext = '$@' +EOF + +close(MAKEFILE); + + +# TEST 1 + +&run_make_with_options($makefile, "", &get_logfile); +$answer = "cp foo\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST 2: This one should fail, since the ":" is unquoted. + +&run_make_with_options($makefile, "path=p:", &get_logfile, 512); +$answer = "$makefile:1: *** target pattern contains no `%'. Stop.\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST 3: This one should work, since we escape the ":". + +&run_make_with_options($makefile, "'path=p\\:'", &get_logfile, 0); +$answer = "cp p:foo\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST 4: This one should fail, since the escape char is escaped. + +&run_make_with_options($makefile, "'path=p\\\\:'", &get_logfile, 512); +$answer = "$makefile:1: *** target pattern contains no `%'. Stop.\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST 5: This one should work + +&run_make_with_options($makefile, "'foo bar'", &get_logfile, 0); +$answer = "touch \"foo bar\"\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST 6: Test escaped comments + +&run_make_with_options($makefile, "sharp", &get_logfile, 0); +$answer = "foo#bar.ext = foo#bar.ext\n"; +&compare_output($answer,&get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; diff --git a/src/mkutil/make/tests/scripts/features/export b/src/mkutil/make/tests/scripts/features/export new file mode 100644 index 00000000..1690ee80 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/export @@ -0,0 +1,250 @@ +# -*-perl-*- +$description = "Check GNU make export/unexport commands."; + +$details = ""; + +# The test driver cleans out our environment for us so we don't have to worry +# about that here. + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE <<'EOMAKE'; + +FOO = foo +BAR = bar +BOZ = boz + +export BAZ = baz +export BOZ + +BITZ = bitz +BOTZ = botz + +export BITZ BOTZ +unexport BOTZ + +ifdef EXPORT_ALL +export +endif + +ifdef UNEXPORT_ALL +unexport +endif + +ifdef EXPORT_ALL_PSEUDO +.EXPORT_ALL_VARIABLES: +endif + +all: + @echo "FOO=$(FOO) BAR=$(BAR) BAZ=$(BAZ) BOZ=$(BOZ) BITZ=$(BITZ) BOTZ=$(BOTZ)" + @echo "FOO=$$FOO BAR=$$BAR BAZ=$$BAZ BOZ=$$BOZ BITZ=$$BITZ BOTZ=$$BOTZ" + +EOMAKE + +close(MAKEFILE); + +# TEST 0: basics + +&run_make_with_options($makefile,"",&get_logfile,0); + +$answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz +FOO= BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n"; + +&compare_output($answer,&get_logfile(1)); + +# TEST 1: make sure vars inherited from the parent are exported + +$ENV{FOO} = 1; + +&run_make_with_options($makefile,"",&get_logfile,0); + +$answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz +FOO=foo BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n"; + +&compare_output($answer,&get_logfile(1)); + +delete $ENV{FOO}; + +# TEST 2: global export. Explicit unexport takes precedence. + +&run_make_with_options($makefile,"EXPORT_ALL=1",&get_logfile,0); + +$answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz +FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n"; + +&compare_output($answer,&get_logfile(1)); + +# TEST 3: global unexport. Explicit export takes precedence. + +&run_make_with_options($makefile,"UNEXPORT_ALL=1",&get_logfile,0); + +$answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz +FOO= BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n"; + +&compare_output($answer,&get_logfile(1)); + +# TEST 4: both: in the above makefile the unexport comes last so that rules. + +&run_make_with_options($makefile,"EXPORT_ALL=1 UNEXPORT_ALL=1",&get_logfile,0); + +$answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz +FOO= BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n"; + +&compare_output($answer,&get_logfile(1)); + +# TEST 5: test the pseudo target. + +&run_make_with_options($makefile,"EXPORT_ALL_PSEUDO=1",&get_logfile,0); + +$answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz +FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n"; + +&compare_output($answer,&get_logfile(1)); + + +# TEST 6: Test the expansion of variables inside export + +$makefile2 = &get_tmpfile; + +open(MAKEFILE, "> $makefile2"); + +print MAKEFILE <<'EOF'; + +foo = f-ok +bar = b-ok + +FOO = foo +F = f + +BAR = bar +B = b + +export $(FOO) +export $(B)ar + +all: + @echo foo=$(foo) bar=$(bar) + @echo foo=$$foo bar=$$bar + +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile2,"",&get_logfile,0); +$answer = "foo=f-ok bar=b-ok\nfoo=f-ok bar=b-ok\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST 7: Test the expansion of variables inside unexport + +$makefile3 = &get_tmpfile; + +open(MAKEFILE, "> $makefile3"); + +print MAKEFILE <<'EOF'; + +foo = f-ok +bar = b-ok + +FOO = foo +F = f + +BAR = bar +B = b + +export foo bar + +unexport $(FOO) +unexport $(B)ar + +all: + @echo foo=$(foo) bar=$(bar) + @echo foo=$$foo bar=$$bar + +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile3,"",&get_logfile,0); +$answer = "foo=f-ok bar=b-ok\nfoo= bar=\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST 7: Test exporting multiple variables on the same line + +$makefile4 = &get_tmpfile; + +open(MAKEFILE, "> $makefile4"); + +print MAKEFILE <<'EOF'; + +A = a +B = b +C = c +D = d +E = e +F = f +G = g +H = h +I = i +J = j + +SOME = A B C + +export F G H I J + +export D E $(SOME) + +all: ; @echo A=$$A B=$$B C=$$C D=$$D E=$$E F=$$F G=$$G H=$$H I=$$I J=$$J +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile4,"",&get_logfile,0); +$answer = "A=a B=b C=c D=d E=e F=f G=g H=h I=i J=j\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST 8: Test unexporting multiple variables on the same line + +$makefile5 = &get_tmpfile; + +open(MAKEFILE, "> $makefile5"); + +print MAKEFILE <<'EOF'; + +A = a +B = b +C = c +D = d +E = e +F = f +G = g +H = h +I = i +J = j + +SOME = A B C + +unexport F G H I J + +unexport D E $(SOME) + +all: ; @echo A=$$A B=$$B C=$$C D=$$D E=$$E F=$$F G=$$G H=$$H I=$$I J=$$J +EOF + +close(MAKEFILE); + +@ENV{qw(A B C D E F G H I J)} = qw(1 2 3 4 5 6 7 8 9 10); + +&run_make_with_options($makefile5,"",&get_logfile,0); +$answer = "A= B= C= D= E= F= G= H= I= J=\n"; +&compare_output($answer,&get_logfile(1)); + +delete @ENV{qw(A B C D E F G H I J)}; + + +# This tells the test driver that the perl test script executed properly. +1; diff --git a/src/mkutil/make/tests/scripts/features/include b/src/mkutil/make/tests/scripts/features/include new file mode 100644 index 00000000..60f4482d --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/include @@ -0,0 +1,61 @@ +# -*-mode: perl; rm-trailing-spaces: nil-*- + +$description = "Test various forms of the GNU make `include' command."; + +$details = "Test include, -include, sinclude and various regressions involving them. +Test extra whitespace at the end of the include, multiple -includes and +sincludes (should not give an error) and make sure that errors are reported +for targets that were also -included."; + +$makefile2 = &get_tmpfile; + +open(MAKEFILE,"> $makefile"); + +# The contents of the Makefile ... + +print MAKEFILE < $makefile2"); + +print MAKEFILE "ANOTHER: ; \@echo This is another included makefile\n"; + +close(MAKEFILE); + +# Create the answer to what should be produced by this Makefile +&run_make_with_options($makefile, "all", &get_logfile); +$answer = "There should be no errors for this makefile.\n"; +&compare_output($answer, &get_logfile(1)); + +&run_make_with_options($makefile, "ANOTHER", &get_logfile); +$answer = "This is another included makefile\n"; +&compare_output($answer, &get_logfile(1)); + +# Try to build the "error" target; this will fail since we don't know +# how to create makeit.mk, but we should also get a message (even though +# the -include suppressed it during the makefile read phase, we should +# see one during the makefile run phase). + +# The fix to this caused more problems than the error, so I removed it. +# pds -- 22 Jan 2000 + +#&run_make_with_options($makefile, "error", &get_logfile, 512); +#$answer = "$make_name: *** No rule to make target `makeit.mk', needed by `error'.\n"; +#&compare_output($answer, &get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/features/mult_rules b/src/mkutil/make/tests/scripts/features/mult_rules new file mode 100644 index 00000000..6f120f10 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/mult_rules @@ -0,0 +1,78 @@ +$description = "\ +The following test creates a makefile to test the presence +of multiple rules for one target. One file can be the +target of several rules if at most one rule has commands; +the other rules can only have dependencies."; + +$details = "\ +The makefile created in this test contains two hardcoded rules +for foo.o and bar.o. It then gives another multiple target rule +with the same names as above but adding more dependencies. +Additionally, another variable extradeps is listed as a +dependency but is defined to be null. It can however be defined +on the make command line as extradeps=extra.h which adds yet +another dependency to the targets."; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE < $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "bigoutput littleoutput: test.h\n"; +print MAKEFILE "\t\@echo I am \$(subst output,,\$@)\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&touch("test.h"); + +&run_make_with_options($makefile,"bigoutput",&get_logfile); + + +# Create the answer to what should be produced by this Makefile +$answer = "I am big\n"; + +&compare_output($answer,&get_logfile(1)); + +&run_make_with_options($makefile,"littleoutput",&get_logfile); +$answer = "I am little\n"; +&compare_output($answer,&get_logfile(1)); + +unlink "test.h"; + +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/features/order_only b/src/mkutil/make/tests/scripts/features/order_only new file mode 100644 index 00000000..e324d681 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/order_only @@ -0,0 +1,112 @@ +# -*-perl-*- +$description = "Test order-only prerequisites."; + +$details = "\ +Create makefiles with various combinations of normal and order-only +prerequisites and ensure they behave properly. Test the \$| variable."; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; +foo: bar | baz + @echo '$$^ = $^' + @echo '$$| = $|' + touch $@ + +.PHONY: baz + +bar baz: + touch $@ +EOF + +close(MAKEFILE); + + +# TEST #1 -- just the syntax + +&run_make_with_options($makefile, "", &get_logfile); +$answer = "touch bar\ntouch baz\n\$^ = bar\n\$| = baz\ntouch foo\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST #2 -- now we do it again: baz is PHONY but foo should _NOT_ be updated + +&run_make_with_options($makefile, "", &get_logfile); +$answer = "touch baz\n"; +&compare_output($answer,&get_logfile(1)); + +unlink(qw(foo bar baz)); + +# Test prereqs that are both order and non-order + +$makefile2 = &get_tmpfile; + +open(MAKEFILE,"> $makefile2"); + +print MAKEFILE <<'EOF'; +foo: bar | baz + @echo '$$^ = $^' + @echo '$$| = $|' + touch $@ + +foo: baz + +.PHONY: baz + +bar baz: + touch $@ +EOF + +close(MAKEFILE); + +# TEST #3 -- Make sure the order-only prereq was promoted to normal. + +&run_make_with_options($makefile2, "", &get_logfile); +$answer = "touch bar\ntouch baz\n\$^ = bar baz\n\$| = \ntouch foo\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST #4 -- now we do it again + +&run_make_with_options($makefile2, "", &get_logfile); +$answer = "touch baz\n\$^ = bar baz\n\$| = \ntouch foo\n"; +&compare_output($answer,&get_logfile(1)); + +unlink(qw(foo bar baz)); + +# Test empty normal prereqs + +$makefile3 = &get_tmpfile; + +open(MAKEFILE,"> $makefile3"); + +print MAKEFILE <<'EOF'; +foo:| baz + @echo '$$^ = $^' + @echo '$$| = $|' + touch $@ + +.PHONY: baz + +baz: + touch $@ +EOF + +close(MAKEFILE); + +# TEST #5 -- make sure the parser was correct. + +&run_make_with_options($makefile3, "", &get_logfile); +$answer = "touch baz\n\$^ = \n\$| = baz\ntouch foo\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST #6 -- now we do it again: this time foo won't be built + +&run_make_with_options($makefile3, "", &get_logfile); +$answer = "touch baz\n"; +&compare_output($answer,&get_logfile(1)); + +unlink(qw(foo baz)); + +1; diff --git a/src/mkutil/make/tests/scripts/features/override b/src/mkutil/make/tests/scripts/features/override new file mode 100644 index 00000000..23e4f2b4 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/override @@ -0,0 +1,34 @@ +$description = "The following test creates a makefile to ..."; + +$details = ""; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "override define foo\n" + ."\@echo First comes the definition.\n" + ."\@echo Then comes the override.\n" + ."endef\n" + ."all: \n" + ."\t\$(foo)\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"foo=Hello",&get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "First comes the definition.\n" + ."Then comes the override.\n"; + +&compare_output($answer,&get_logfile(1)); + +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/features/parallelism b/src/mkutil/make/tests/scripts/features/parallelism new file mode 100644 index 00000000..cd753928 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/parallelism @@ -0,0 +1,100 @@ +# -*-perl-*- + +$description = "Test parallelism (-j) option."; + + +$details = "This test creates a makefile with two double-colon default +rules. The first rule has a series of sleep and echo commands +intended to run in series. The second and third have just an +echo statement. When make is called in this test, it is given +the -j option with a value of 4. This tells make that it may +start up to four jobs simultaneously. In this case, since the +first command is a sleep command, the output of the second +and third commands will appear before the first if indeed +make is running all of these commands in parallel."; + +if (!$parallel_jobs) { + return -1; +} + +if ($vos) { + $delete_command = "delete_file -no_ask"; + $sleep_command = "sleep -seconds"; +} +else { + $delete_command = "rm -f"; + $sleep_command = "sleep"; +} + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<"EOF"; +all : def_1 def_2 def_3 +def_1 : ; \@echo ONE; $sleep_command 3 ; echo TWO +def_2 : ; \@$sleep_command 2 ; echo THREE +def_3 : ; \@$sleep_command 1 ; echo FOUR +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile, "-j 4", &get_logfile); +$answer = "ONE\nFOUR\nTHREE\nTWO\n"; +&compare_output($answer, &get_logfile(1)); + + +# Test parallelism with included files. Here we sleep/echo while +# building the included files, to test that they are being built in +# parallel. + +$makefile2 = &get_tmpfile; + +open(MAKEFILE,"> $makefile2"); + +print MAKEFILE <<"EOF"; +all: 1 2; \@echo success + +-include 1.inc 2.inc + +1.inc: ; \@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo "1: ; \@echo ONE; $sleep_command 2; echo TWO" > \$\@ +2.inc: ; \@$sleep_command 1; echo THREE.inc; echo "2: ; \@$sleep_command 1; echo THREE" > \$\@ +EOF + +close(MAKEFILE); + +&run_make_with_options("$makefile2", "-j 4", &get_logfile); +$answer = "ONE.inc\nTHREE.inc\nTWO.inc\nONE\nTHREE\nTWO\nsuccess\n"; +&compare_output($answer, &get_logfile(1)); + +unlink('1.inc', '2.inc'); + + +# Test parallelism with included files--this time recurse first and make +# sure the jobserver works. + +$makefile3 = &get_tmpfile; + +open(MAKEFILE,"> $makefile3"); + +print MAKEFILE <<"EOF"; +recurse: ; \@\$(MAKE) --no-print-directory -f $makefile3 INC=yes all + +all: 1 2; \@echo success + +INC = no +ifeq (\$(INC),yes) +-include 1.inc 2.inc +endif + +1.inc: ; \@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo "1: ; \@echo ONE; $sleep_command 2; echo TWO" > \$\@ +2.inc: ; \@$sleep_command 1; echo THREE.inc; echo "2: ; \@$sleep_command 1; echo THREE" > \$\@ +EOF + +close(MAKEFILE); + +&run_make_with_options("$makefile3", "-j 4", &get_logfile); +$answer = "ONE.inc\nTHREE.inc\nTWO.inc\nONE\nTHREE\nTWO\nsuccess\n"; +&compare_output($answer, &get_logfile(1)); + +unlink('1.inc', '2.inc'); + +1; diff --git a/src/mkutil/make/tests/scripts/features/patspecific_vars b/src/mkutil/make/tests/scripts/features/patspecific_vars new file mode 100644 index 00000000..9ace5c41 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/patspecific_vars @@ -0,0 +1,64 @@ +# -*-perl-*- +$description = "Test pattern-specific variable settings."; + +$details = "\ +Create a makefile containing various flavors of pattern-specific variable +settings, override and non-override, and using various variable expansion +rules, semicolon interference, etc."; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; +all: one.x two.x three.x +FOO = foo +BAR = bar +BAZ = baz +one.x: override FOO = one +%.x: BAR = two +t%.x: BAR = four +thr% : override BAZ = three +one.x two.x three.x: ; @echo $@: $(FOO) $(BAR) $(BAZ) +four.x: baz ; @echo $@: $(FOO) $(BAR) $(BAZ) +baz: ; @echo $@: $(FOO) $(BAR) $(BAZ) + +# test matching multiple patterns +a%: AAA = aaa +%b: BBB = ccc +a%: BBB += ddd +%b: AAA ?= xxx +%b: AAA += bbb +.PHONY: ab +ab: ; @echo $(AAA); echo $(BBB) +EOF + +close(MAKEFILE); + + +# TEST #1 -- basics + +&run_make_with_options($makefile, "", &get_logfile); +$answer = "one.x: one two baz\ntwo.x: foo four baz\nthree.x: foo four three\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST #2 -- try the override feature + +&run_make_with_options($makefile, "BAZ=five", &get_logfile); +$answer = "one.x: one two five\ntwo.x: foo four five\nthree.x: foo four three\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST #3 -- make sure patterns are inherited properly + +&run_make_with_options($makefile, "four.x", &get_logfile); +$answer = "baz: foo two baz\nfour.x: foo two baz\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST #4 -- test multiple patterns matching the same target + +&run_make_with_options($makefile, "ab", &get_logfile); +$answer = "aaa bbb\nccc ddd\n"; +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/features/quoting b/src/mkutil/make/tests/scripts/features/quoting new file mode 100644 index 00000000..916681c9 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/quoting @@ -0,0 +1,32 @@ +# -*-perl-*- + +$description = "The following test creates a makefile to test using \n" . + "quotes within makefiles."; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE <<'EOM'; +SHELL = /bin/sh +TEXFONTS = NICEFONT +DEFINES = -DDEFAULT_TFM_PATH=\".:$(TEXFONTS)\" +test: ; @"echo" 'DEFINES = $(DEFINES)' +EOM + +# END of Contents of MAKEFILE + +close(MAKEFILE); + + +&run_make_with_options($makefile,"",&get_logfile); + + +# Create the answer to what should be produced by this Makefile +$answer = 'DEFINES = -DDEFAULT_TFM_PATH=\".:NICEFONT\"' . "\n"; + +# COMPARE RESULTS + +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/features/recursion b/src/mkutil/make/tests/scripts/features/recursion new file mode 100644 index 00000000..444f7ce9 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/recursion @@ -0,0 +1,61 @@ +# -*-perl-*- +$description = "The following test creates a makefile to ...\n"; + +$details = "DETAILS"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "all: \n" + ."\t\$(MAKE) -f $makefile foo \n" + ."foo: \n" + ."\t\@echo \$(MAKE) \n" + ."\t\@echo MAKELEVEL = \$(MAKELEVEL)\n" + ."\t\$(MAKE) -f $makefile last \n" + ."last: \n" + ."\t\@echo \$(MAKE) \n" + ."\t\@echo MAKELEVEL = \$(MAKELEVEL) \n" + ."\t\@echo THE END\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +if ($vos) +{ + $answer = "$make_name: Entering directory \`$pwd\'\n" + ."make 'CFLAGS=-O' -f $makefile foo \n" + ."make CFLAGS=-O\n" + ."MAKELEVEL = 0\n" + ."make 'CFLAGS=-O' -f $makefile last \n" + ."make CFLAGS=-O\n" + ."MAKELEVEL = 0\n" + ."THE END\n" + ."$make_name: Leaving directory `$pwd'\n"; +} +else +{ + $answer = "$make_name: Entering directory `$pwd'\n" + ."$mkpath -f $makefile foo \n" + ."${make_name}[1]: Entering directory `$pwd'\n" + ."$mkpath\n" + ."MAKELEVEL = 1\n" + ."$mkpath -f $makefile last \n" + ."${make_name}[2]: Entering directory `$pwd'\n" + ."$mkpath\n" + ."MAKELEVEL = 2\n" + ."THE END\n" + ."${make_name}[2]: Leaving directory `$pwd'\n" + ."${make_name}[1]: Leaving directory `$pwd'\n" + ."$make_name: Leaving directory `$pwd'\n"; +} + +$mkoptions = "CFLAGS=-O -w"; +$mkoptions .= " -j 2" if ($parallel_jobs); + +&run_make_with_options($makefile,$mkoptions,&get_logfile,0); + +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/features/reinvoke b/src/mkutil/make/tests/scripts/features/reinvoke new file mode 100644 index 00000000..a5a475cb --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/reinvoke @@ -0,0 +1,86 @@ +# -*-mode: perl-*- + +$description = "Test GNU make's auto-reinvocation feature."; + +$details = "\ +If the makefile or one it includes can be rebuilt then it is, and make +is reinvoked. We create a rule to rebuild the makefile from a temp +file, then touch the temp file to make it newer than the makefile."; + +$makefile2 = &get_tmpfile; +$makefile_orig = &get_tmpfile; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <> \$\@ + +include $makefile2 + +EOM + +close(MAKEFILE); + +&utouch(-10, $makefile, $makefile2); +&touch($makefile_orig); + +&run_make_with_options($makefile, "", &get_logfile, 0); + +# Create the answer to what should be produced by this Makefile + +$answer = "rebuilding $makefile2.\nrebuilding $makefile.\nrunning rules.\n"; + +&compare_output($answer,&get_logfile(1)) + && unlink "$makefile_orig"; + +# In this test we create an included file that's out-of-date, but then +# the rule doesn't update it. Make shouldn't re-exec. + +$makefile3 = &get_tmpfile; + +open(MAKEFILE, "> $makefile3"); +print MAKEFILE <<'EOM'; +SHELL = /bin/sh + +all: ; @echo hello + +a : b ; echo >> $@ + +b : c ; [ -f $@ ] || echo >> $@ + +c: ; echo >> $@ + +include $(F) +EOM + +close(MAKEFILE); + +&utouch(-20, 'b','a'); +#&utouch(-10, 'a'); +&touch('c'); + +# First try with the file that's not updated "once removed" from the +# file we're including. + +&run_make_with_options($makefile3, "F=a", &get_logfile, 0); + +$answer = "[ -f b ] || echo >> b\nhello\n"; +&compare_output($answer,&get_logfile(1)); + +# Now try with the file we're not updating being the actual file we're +# including: this and the previous one test different parts of the code. + +&run_make_with_options($makefile3, "F=b", &get_logfile, 0); + +$answer = "[ -f b ] || echo >> b\nhello\n"; +&compare_output($answer,&get_logfile(1)); + +unlink('a','b','c'); + +# This tells the test driver that the perl test script executed properly. +1; diff --git a/src/mkutil/make/tests/scripts/features/statipattrules b/src/mkutil/make/tests/scripts/features/statipattrules new file mode 100644 index 00000000..29a7c08c --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/statipattrules @@ -0,0 +1,72 @@ +# -*-perl-*- +$description = "Test handling of static pattern rules."; + +$details = "\ +The makefile created in this test has three targets. The +filter command is used to get those target names ending in +.o and statically creates a compile command with the target +name and the target name with .c. It also does the same thing +for another target filtered with .elc and creates a command +to emacs a .el file"; + +open(MAKEFILE,"> $makefile"); +print MAKEFILE <<'EOF'; +files = foo.elc bar.o lose.o + +$(filter %.o,$(files)): %.o: %.c ; @echo CC -c $(CFLAGS) $< -o $@ + +$(filter %.elc,$(files)): %.elc: %.el ; @echo emacs $< +EOF +close(MAKEFILE); + + +&touch('bar.c', 'lose.c'); + +# TEST #1 +# ------- + +&run_make_with_options($makefile, '', &get_logfile); +$answer = "CC -c bar.c -o bar.o\n"; +&compare_output($answer, &get_logfile(1)); + + +# TEST #2 +# ------- + +&run_make_with_options($makefile, 'lose.o', &get_logfile); +$answer = "CC -c lose.c -o lose.o\n"; +&compare_output($answer, &get_logfile(1)); + + +# TEST #3 +# ------- +&touch("foo.el"); + +&run_make_with_options($makefile, 'foo.elc', &get_logfile); +$answer = "emacs foo.el\n"; +&compare_output($answer, &get_logfile(1)); + + +unlink('foo.el', 'bar.c', 'lose.c'); + + +# TEST #4 -- PR/1670: don't core dump on invalid static pattern rules +# ------- + +$makefile2 = &get_tmpfile; +open(MAKEFILE, "> $makefile2"); +print MAKEFILE "foo: foo%: % ; \@echo $@\n"; +close(MAKEFILE); + +&run_make_with_options($makefile2, '', &get_logfile, 512); +$answer = "$makefile2:1: *** target `foo' leaves prerequisite pattern empty. Stop.\n"; +&compare_output($answer, &get_logfile(1)); + + +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/features/targetvars b/src/mkutil/make/tests/scripts/features/targetvars new file mode 100644 index 00000000..3989340c --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/targetvars @@ -0,0 +1,270 @@ +# -*-perl-*- +$description = "Test target-specific variable settings."; + +$details = "\ +Create a makefile containing various flavors of target-specific variable +values, override and non-override, and using various variable expansion +rules, semicolon interference, etc."; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; +SHELL = /bin/sh +export FOO = foo +export BAR = bar +one: override FOO = one +one two: ; @echo $(FOO) $(BAR) +two: BAR = two +three: ; BAR=1000 + @echo $(FOO) $(BAR) +# Some things that shouldn't be target vars +funk : override +funk : override adelic +adelic override : ; echo $@ +# Test per-target recursive variables +four:FOO=x +four:VAR$(FOO)=ok +four: ; @echo '$(FOO) $(VAR$(FOO)) $(VAR) $(VARx)' +five:FOO=x +five six : VAR$(FOO)=good +five six: ;@echo '$(FOO) $(VAR$(FOO)) $(VAR) $(VARx) $(VARfoo)' +# Test per-target variable inheritance +seven: eight +seven eight: ; @echo $@: $(FOO) $(BAR) +seven: BAR = seven +seven: FOO = seven +eight: BAR = eight +# Test the export keyword with per-target variables +nine: ; @echo $(FOO) $(BAR) $$FOO $$BAR +nine: FOO = wallace +nine-a: export BAZ = baz +nine-a: ; @echo $$BAZ +# Test = escaping +EQ = = +ten: one\=two +ten: one \= two +ten one$(EQ)two $(EQ):;@echo $@ +.PHONY: one two three four five six seven eight nine ten $(EQ) one$(EQ)two +# Test target-specific vars with pattern/suffix rules +QVAR = qvar +RVAR = = +%.q : ; @echo $(QVAR) $(RVAR) +foo.q : RVAR += rvar +# Target-specific vars with multiple LHS pattern rules +%.r %.s %.t: ; @echo $(QVAR) $(RVAR) $(SVAR) $(TVAR) +foo.r : RVAR += rvar +foo.t : TVAR := $(QVAR) +EOF + +close(MAKEFILE); + +# TEST #1 + +&run_make_with_options($makefile, "one two three", &get_logfile); +$answer = "one bar\nfoo two\nBAR=1000\nfoo bar\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST #2 + +&run_make_with_options($makefile, "one two FOO=1 BAR=2", &get_logfile); +$answer = "one 2\n1 2\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST #3 + +&run_make_with_options($makefile, "four", &get_logfile); +$answer = "x ok ok\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST #4 + +&run_make_with_options($makefile, "seven", &get_logfile); +$answer = "eight: seven eight\nseven: seven seven\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST #5 + +&run_make_with_options($makefile, "nine", &get_logfile); +$answer = "wallace bar wallace bar\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST #5-a + +&run_make_with_options($makefile, "nine-a", &get_logfile); +$answer = "baz\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST #6 + +&run_make_with_options($makefile, "ten", &get_logfile); +$answer = "one=two\none bar\n=\nfoo two\nten\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST #6 + +&run_make_with_options($makefile, "foo.q bar.q", &get_logfile); +$answer = "qvar = rvar\nqvar =\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST #7 + +&run_make_with_options($makefile, "foo.t bar.s", &get_logfile); +$answer = "qvar = qvar\nqvar =\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST #8 +# For PR/1378: Target-specific vars don't inherit correctly + +$makefile2 = &get_tmpfile; + +open(MAKEFILE,"> $makefile2"); +print MAKEFILE <<'EOF'; +foo: FOO = foo +bar: BAR = bar +foo: bar +bar: baz +baz: ; @echo $(FOO) $(BAR) +EOF +close(MAKEFILE); + +&run_make_with_options("$makefile2", "", &get_logfile); +$answer = "foo bar\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #9 +# For PR/1380: Using += assignment in target-specific variables sometimes fails +# Also PR/1831 + +$makefile3 = &get_tmpfile; + +open(MAKEFILE,"> $makefile3"); +print MAKEFILE <<'EOF'; +.PHONY: all one +all: FOO += baz +all: one; @echo $(FOO) + +FOO = bar + +one: FOO += biz +one: FOO += boz +one: ; @echo $(FOO) +EOF +close(MAKEFILE); + +&run_make_with_options("$makefile3", "", &get_logfile); +$answer = "bar baz biz boz\nbar baz\n"; +&compare_output($answer, &get_logfile(1)); + +# Test #10 + +&run_make_with_options("$makefile3", "one", &get_logfile); +$answer = "bar biz boz\n"; +&compare_output($answer, &get_logfile(1)); + +# Test #11 +# PR/1709: Test semicolons in target-specific variable values + +$makefile4 = &get_tmpfile; + +open(MAKEFILE, "> $makefile4"); +print MAKEFILE <<'EOF'; +foo : FOO = ; ok +foo : ; @echo '$(FOO)' +EOF +close(MAKEFILE); + +&run_make_with_options("$makefile4", "", &get_logfile); +$answer = "; ok\n"; +&compare_output($answer, &get_logfile(1)); + +# Test #12 +# PR/2020: More hassles with += target-specific vars. I _really_ think +# I nailed it this time :-/. + +$makefile5 = &get_tmpfile; + +open(MAKEFILE, "> $makefile5"); +print MAKEFILE <<'EOF'; +.PHONY: a + +BLAH := foo +COMMAND = echo $(BLAH) + +a: ; @$(COMMAND) + +a: BLAH := bar +a: COMMAND += snafu $(BLAH) +EOF +close(MAKEFILE); + +&run_make_with_options("$makefile5", "", &get_logfile); +$answer = "bar snafu bar\n"; +&compare_output($answer, &get_logfile(1)); + +# Test #13 +# Test double-colon rules with target-specific variable values + +$makefile6 = &get_tmpfile; + +open(MAKEFILE, "> $makefile6"); +print MAKEFILE <<'EOF'; +W = bad +X = bad +foo: W = ok +foo:: ; @echo $(W) $(X) $(Y) $(Z) +foo:: ; @echo $(W) $(X) $(Y) $(Z) +foo: X = ok + +Y = foo +bar: foo +bar: Y = bar + +Z = nopat +ifdef PATTERN + fo% : Z = pat +endif + +EOF +close(MAKEFILE); + +&run_make_with_options("$makefile6", "foo", &get_logfile); +$answer = "ok ok foo nopat\nok ok foo nopat\n"; +&compare_output($answer, &get_logfile(1)); + +# Test #14 +# Test double-colon rules with target-specific variable values and +# inheritance + +&run_make_with_options("$makefile6", "bar", &get_logfile); +$answer = "ok ok bar nopat\nok ok bar nopat\n"; +&compare_output($answer, &get_logfile(1)); + +# Test #15 +# Test double-colon rules with pattern-specific variable values + +&run_make_with_options("$makefile6", "foo PATTERN=yes", &get_logfile); +$answer = "ok ok foo pat\nok ok foo pat\n"; +&compare_output($answer, &get_logfile(1)); + + +# Test #16 +# Test target-specific variables with very long command line +# (> make default buffer length) + +$makefile7 = &get_tmpfile; + +open(MAKEFILE, "> $makefile7"); +print MAKEFILE <<'EOF'; +base_metals_fmd_reports.sun5 base_metals_fmd_reports CreateRealPositions CreateMarginFunds deals_changed_since : BUILD_OBJ=$(shell if [ -f "build_information.generate" ]; then echo "$(OBJ_DIR)/build_information.o"; else echo "no build information"; fi ) + +deals_changed_since: ; @echo $(BUILD_OBJ) + +EOF +close(MAKEFILE); + +&run_make_with_options("$makefile7", '', &get_logfile); +$answer = "no build information\n"; +&compare_output($answer, &get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/features/varnesting b/src/mkutil/make/tests/scripts/features/varnesting new file mode 100644 index 00000000..15d50711 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/varnesting @@ -0,0 +1,34 @@ +$description = "The following test creates a makefile to ..."; + +$details = ""; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "x = variable1\n" + ."variable2 := Hello\n" + ."y = \$(subst 1,2,\$(x))\n" + ."z = y\n" + ."a := \$(\$(\$(z)))\n" + ."all: \n" + ."\t\@echo \$(a)\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "Hello\n"; + +&compare_output($answer,&get_logfile(1)); + +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/features/vpath b/src/mkutil/make/tests/scripts/features/vpath new file mode 100644 index 00000000..101a25da --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/vpath @@ -0,0 +1,62 @@ +$description = "The following test creates a makefile to test the \n" + ."vpath directive which allows you to specify a search \n" + ."path for a particular class of filenames, those that\n" + ."match a particular pattern."; + +$details = "This tests the vpath directive by specifying search directories\n" + ."for one class of filenames with the form: vpath pattern directories" + ."\nIn this test, we specify the working directory for all files\n" + ."that end in c or h. We also test the variables $@ (which gives\n" + ."target name) and $^ (which is a list of all dependencies \n" + ."including the directories in which they were found). It also\n" + ."uses the function firstword used to extract just the first\n" + ."dependency from the entire list."; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "vpath %.c foo\n"; +print MAKEFILE "vpath %.c $workdir\n"; +print MAKEFILE "vpath %.h $workdir\n"; +print MAKEFILE "objects = main.o kbd.o commands.o display.o insert.o\n"; +print MAKEFILE "edit: \$(objects)\n"; +print MAKEFILE "\t\@echo cc -o \$@ \$^\n"; +print MAKEFILE "main.o : main.c defs.h\n"; +print MAKEFILE "\t\@echo cc -c \$(firstword \$^)\n"; +print MAKEFILE "kbd.o : kbd.c defs.h command.h\n"; +print MAKEFILE "\t\@echo cc -c kbd.c\n"; +print MAKEFILE "commands.o : command.c defs.h command.h\n"; +print MAKEFILE "\t\@echo cc -c commands.c\n"; +print MAKEFILE "display.o : display.c defs.h buffer.h\n"; +print MAKEFILE "\t\@echo cc -c display.c\n"; +print MAKEFILE "insert.o : insert.c defs.h buffer.h\n"; +print MAKEFILE "\t\@echo cc -c insert.c\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + + +@files_to_touch = ("$workdir${pathsep}main.c","$workdir${pathsep}defs.h", + "$workdir${pathsep}kbd.c","$workdir${pathsep}command.h", + "$workdir${pathsep}commands.c","$workdir${pathsep}display.c", + "$workdir${pathsep}buffer.h","$workdir${pathsep}insert.c", + "$workdir${pathsep}command.c"); + +&touch(@files_to_touch); + +&run_make_with_options($makefile,"",&get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "cc -c $workdir${pathsep}main.c\ncc -c kbd.c\ncc -c commands.c\n" + ."cc -c display.c\n" + ."cc -c insert.c\ncc -o edit main.o kbd.o commands.o display.o " + ."insert.o\n"; + +if (&compare_output($answer,&get_logfile(1))) +{ + unlink @files_to_touch; +} + +1; diff --git a/src/mkutil/make/tests/scripts/features/vpath2 b/src/mkutil/make/tests/scripts/features/vpath2 new file mode 100644 index 00000000..7e970a71 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/vpath2 @@ -0,0 +1,45 @@ +$description = "This is part 2 in a series to test the vpath directive\n" + ."It tests the three forms of the directive:\n" + ." vpath pattern directive\n" + ." vpath pattern (clears path associated with pattern)\n" + ." vpath (clears all paths specified with vpath)\n"; + +$details = "This test simply adds many search paths using various vpath\n" + ."directive forms and clears them afterwards. It has a simple\n" + ."rule to print a message at the end to confirm that the makefile\n" + ."ran with no errors.\n"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "VPATH = $workdir:$sourcedir\n"; +print MAKEFILE "vpath %.c foo\n"; +print MAKEFILE "vpath %.c $workdir\n"; +print MAKEFILE "vpath %.c $sourcedir\n"; +print MAKEFILE "vpath %.h $workdir\n"; +print MAKEFILE "vpath %.c\n"; +print MAKEFILE "vpath\n"; +print MAKEFILE "all:\n"; +print MAKEFILE "\t\@echo ALL IS WELL\n"; +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "ALL IS WELL\n"; + +&compare_output($answer,&get_logfile(1)); + +1; + + + + + + + + + diff --git a/src/mkutil/make/tests/scripts/features/vpathgpath b/src/mkutil/make/tests/scripts/features/vpathgpath new file mode 100644 index 00000000..f7683f52 --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/vpathgpath @@ -0,0 +1,66 @@ +# -*-perl-*- +$description = "Tests VPATH+/GPATH functionality."; + +$details = ""; + +$VP = "$workdir$pathsep"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "VPATH = $VP\n"; + +print MAKEFILE <<'EOMAKE'; + +GPATH = $(VPATH) + +.SUFFIXES: .a .b .c .d +.PHONY: general rename notarget intermediate + +%.a: +%.b: +%.c: +%.d: + +%.a : %.b ; cat $^ > $@ +%.b : %.c ; cat $^ > $@ +%.c :: %.d ; cat $^ > $@ + +# General testing info: + +general: foo.b +foo.b: foo.c bar.c + +EOMAKE + +close(MAKEFILE); + +@touchedfiles = (); + +$off = -500; + +sub touchfiles { + foreach (@_) { + ($f = $_) =~ s,VP/,$VP,g; + &utouch($off, $f); + $off += 10; + push(@touchedfiles, $f); + } +} + +# Run the general-case test + +&touchfiles("VP/foo.d", "VP/bar.d", "VP/foo.c", "VP/bar.c", "foo.b", "bar.d"); + +&run_make_with_options($makefile,"general",&get_logfile()); + +push(@touchedfiles, "bar.c"); + +$answer = "$make_name: Nothing to be done for `general'.\n"; + +&compare_output($answer,&get_logfile(1)); + +unlink(@touchedfiles) unless $keep; + +1; diff --git a/src/mkutil/make/tests/scripts/features/vpathplus b/src/mkutil/make/tests/scripts/features/vpathplus new file mode 100644 index 00000000..a37fbedd --- /dev/null +++ b/src/mkutil/make/tests/scripts/features/vpathplus @@ -0,0 +1,128 @@ +# -*-perl-*- +$description = "Tests the new VPATH+ functionality added in 3.76."; + +$details = ""; + +$VP = "$workdir$pathsep"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "VPATH = $VP\n"; + +print MAKEFILE <<'EOMAKE'; + +SHELL = /bin/sh + +.SUFFIXES: .a .b .c .d +.PHONY: general rename notarget intermediate + +%.a: +%.b: +%.c: +%.d: + +%.a : %.b + cat $^ > $@ +%.b : %.c + cat $^ > $@ 2>/dev/null || exit 1 +%.c :: %.d + cat $^ > $@ + +# General testing info: + +general: foo.b +foo.b: foo.c bar.c + +# Rename testing info: + +rename: $(VPATH)/foo.c foo.d + +# Target not made testing info: + +notarget: notarget.b +notarget.c: notarget.d + -@echo "not creating $@ from $^" + +# Intermediate files: + +intermediate: inter.a + +EOMAKE + +close(MAKEFILE); + +@touchedfiles = (); + +$off = -500; + +sub touchfiles { + foreach (@_) { + &utouch($off, $_); + $off += 10; + push(@touchedfiles, $_); + } +} + +# Run the general-case test + +&touchfiles("$VP/foo.d", "$VP/bar.d", "$VP/foo.c", "$VP/bar.c", "foo.b", "bar.d"); + +&run_make_with_options($makefile,"general",&get_logfile); + +push(@touchedfiles, "bar.c"); + +$answer = "cat bar.d > bar.c +cat ${VP}foo.c bar.c > foo.b 2>/dev/null || exit 1 +"; +&compare_output($answer,&get_logfile(1)); + +# Test rules that don't make the target correctly + +&touchfiles("$VP/notarget.c", "notarget.b", "notarget.d"); + +&run_make_with_options($makefile,"notarget",&get_logfile,512); + +$answer = "not creating notarget.c from notarget.d +cat notarget.c > notarget.b 2>/dev/null || exit 1 +$make_name: *** [notarget.b] Error 1 +"; + +&compare_output($answer,&get_logfile(1)); + +# Test intermediate file handling (part 1) + +&touchfiles("$VP/inter.d"); + +&run_make_with_options($makefile,"intermediate",&get_logfile); + +push(@touchedfiles, "inter.a", "inter.b"); + +$answer = "cat ${VP}inter.d > inter.c +cat inter.c > inter.b 2>/dev/null || exit 1 +cat inter.b > inter.a +rm inter.b inter.c +"; +&compare_output($answer,&get_logfile(1)); + +# Test intermediate file handling (part 2) + +&utouch(-20, "inter.a"); +&utouch(-10, "$VP/inter.b"); +&touch("$VP/inter.d"); + +push(@touchedfiles, "$VP/inter.b", "$VP/inter.d"); + +&run_make_with_options($makefile,"intermediate",&get_logfile); + +$answer = "cat ${VP}inter.d > inter.c +cat inter.c > inter.b 2>/dev/null || exit 1 +cat inter.b > inter.a +rm inter.c +"; +&compare_output($answer,&get_logfile(1)); + +unlink @touchedfiles unless $keep; + +1; diff --git a/src/mkutil/make/tests/scripts/functions/CVS/Entries b/src/mkutil/make/tests/scripts/functions/CVS/Entries new file mode 100644 index 00000000..ac8620e6 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/CVS/Entries @@ -0,0 +1,23 @@ +/addprefix/1.1/Tue Sep 14 02:03:41 1999// +/addsuffix/1.2/Mon Jun 19 21:22:44 2000// +/basename/1.1/Tue Sep 14 02:03:41 1999// +/call/1.6/Thu Jan 30 07:49:17 2003// +/dir/1.1/Tue Sep 14 02:03:42 1999// +/error/1.1/Tue Sep 14 02:03:42 1999// +/eval/1.3/Thu Jan 30 07:49:17 2003// +/filter-out/1.2/Thu Jul 11 06:38:57 2002// +/findstring/1.1/Tue Sep 14 02:03:42 1999// +/foreach/1.2/Fri Sep 17 03:16:06 1999// +/if/1.2/Wed Nov 17 07:34:40 1999// +/join/1.1/Tue Sep 14 02:03:43 1999// +/notdir/1.1/Tue Sep 14 02:03:43 1999// +/origin/1.2/Fri Sep 17 03:16:07 1999// +/sort/1.1/Tue Sep 14 02:03:44 1999// +/strip/1.2/Sat Apr 22 02:11:18 2000// +/substitution/1.1/Tue Sep 14 02:03:44 1999// +/suffix/1.1/Tue Sep 14 02:03:44 1999// +/value/1.1/Mon Jul 8 02:26:48 2002// +/warning/1.1/Tue Sep 14 02:03:44 1999// +/wildcard/1.2/Thu Oct 3 05:46:12 2002// +/word/1.3/Thu Jan 30 06:21:36 2003// +D diff --git a/src/mkutil/make/tests/scripts/functions/CVS/Repository b/src/mkutil/make/tests/scripts/functions/CVS/Repository new file mode 100644 index 00000000..1d02918a --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/CVS/Repository @@ -0,0 +1 @@ +make/tests/scripts/functions diff --git a/src/mkutil/make/tests/scripts/functions/CVS/Root b/src/mkutil/make/tests/scripts/functions/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/tests/scripts/functions/addprefix b/src/mkutil/make/tests/scripts/functions/addprefix new file mode 100644 index 00000000..1845552f --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/addprefix @@ -0,0 +1,44 @@ +$description = "The following test creates a makefile to test the addprefix " + ."function."; + +$details = ""; + +# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET +# THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF +# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. +# EXAMPLE: $makefile2 = &get_tmpfile; + + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "string := \$(addprefix src${pathsep},a.b.z.foo hacks) \n" + ."all: \n" + ."\t\@echo \$(string) \n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile,0); + +# Create the answer to what should be produced by this Makefile +$answer = "src${pathsep}a.b.z.foo src${pathsep}hacks\n"; + +# COMPARE RESULTS + +# In this call to compare output, you should use the call &get_logfile(1) +# to send the name of the last logfile created. You may also use +# the special call &get_logfile(1) which returns the same as &get_logfile(1). + +&compare_output($answer,&get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/functions/addsuffix b/src/mkutil/make/tests/scripts/functions/addsuffix new file mode 100644 index 00000000..da4fbb71 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/addsuffix @@ -0,0 +1,36 @@ +# -*-perl-*- +$description = "Test the addsuffix function."; + +$details = ""; + + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE <1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET +# THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF +# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. +# EXAMPLE: $makefile2 = &get_tmpfile; + + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "string := \$(basename src${pathsep}a.b.z.foo.c src${pathsep}hacks src.bar${pathsep}a.b.z.foo.c src.bar${pathsep}hacks hacks) \n" + ."all: \n" + ."\t\@echo \$(string) \n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile,0); + +# Create the answer to what should be produced by this Makefile +$answer = "src${pathsep}a.b.z.foo src${pathsep}hacks src.bar${pathsep}a.b.z.foo src.bar${pathsep}hacks hacks\n"; + +# COMPARE RESULTS + +# In this call to compare output, you should use the call &get_logfile(1) +# to send the name of the last logfile created. You may also use +# the special call &get_logfile(1) which returns the same as &get_logfile(1). + +&compare_output($answer,&get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/functions/call b/src/mkutil/make/tests/scripts/functions/call new file mode 100644 index 00000000..f3c54708 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/call @@ -0,0 +1,99 @@ +# -*-perl-*- +$description = "Test the call function.\n"; + +$details = "Try various uses of call and ensure they all give the correct +results.\n"; + +open(MAKEFILE, "> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE <<'EOMAKE'; +# Simple, just reverse two things +# +reverse = $2 $1 + +# A complex `map' function, using recursive `call'. +# +map = $(foreach a,$2,$(call $1,$a)) + +# Test using a builtin; this is silly as it's simpler to do without call +# +my-notdir = $(call notdir,$(1)) + +# Test using non-expanded builtins +# +my-foreach = $(foreach $(1),$(2),$(3)) +my-if = $(if $(1),$(2),$(3)) + +# Test recursive invocations of call with different arguments +# +one = $(1) $(2) $(3) +two = $(call one,$(1),foo,$(2)) + +# Test recursion on the user-defined function. As a special case make +# won't error due to this. +# Implement transitive closure using $(call ...) +# +DEP_foo = bar baz quux +DEP_baz = quux blarp +rest = $(wordlist 2,$(words ${1}),${1}) +tclose = $(if $1,$(firstword $1) \ + $(call tclose,$(sort ${DEP_$(firstword $1)} $(call rest,$1)))) + +all: ; @echo '$(call reverse,bar,foo)'; \ + echo '$(call map,origin,MAKE reverse map)'; \ + echo '$(call my-notdir,a/b c/d e/f)'; \ + echo '$(call my-foreach)'; \ + echo '$(call my-foreach,a,,,)'; \ + echo '$(call my-if,a,b,c)'; \ + echo '$(call two,bar,baz)'; \ + echo '$(call tclose,foo)' + + + +EOMAKE + +# These won't work until/unless PR/1527 is resolved. +# echo '$(call my-foreach,a,x y z,$(a)$(a))'; \ +# echo '$(call my-if,,$(warning don't print this),ok)' +# +# $answer = "xx yy zz\nok\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile, "", &get_logfile); +$answer = "foo bar\ndefault file file\nb d f\n\n\nb\nbar foo baz\nfoo bar baz blarp quux \n"; +&compare_output($answer, &get_logfile(1)); + + +# TEST eclipsing of arguments when invoking sub-calls + +$makefile2 = &get_tmpfile; + +open(MAKEFILE,"> $makefile2"); + +print MAKEFILE <<'EOF'; + +all = $1 $2 $3 $4 $5 $6 $7 $8 $9 + +level1 = $(call all,$1,$2,$3,$4,$5) +level2 = $(call level1,$1,$2,$3) +level3 = $(call level2,$1,$2,$3,$4,$5) + +all: + @echo $(call all,1,2,3,4,5,6,7,8,9,10,11) + @echo $(call level1,1,2,3,4,5,6,7,8) + @echo $(call level2,1,2,3,4,5,6,7,8) + @echo $(call level3,1,2,3,4,5,6,7,8) +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile2, "", &get_logfile); +$answer = "1 2 3 4 5 6 7 8 9\n1 2 3 4 5\n1 2 3\n1 2 3\n"; +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/functions/dir b/src/mkutil/make/tests/scripts/functions/dir new file mode 100644 index 00000000..f48fb8c0 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/dir @@ -0,0 +1,44 @@ +$description = "The following test creates a makefile to test the dir " + ."function."; + +$details = ""; + +# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET +# THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF +# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. +# EXAMPLE: $makefile2 = &get_tmpfile; + + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "string := \$(dir src${pathsep}foo.c hacks) \n" + ."all: \n" + ."\t\@echo \$(string) \n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile,0); + +# Create the answer to what should be produced by this Makefile +$answer = "src${pathsep} .${pathsep}\n"; + +# COMPARE RESULTS + +# In this call to compare output, you should use the call &get_logfile(1) +# to send the name of the last logfile created. You may also use +# the special call &get_logfile(1) which returns the same as &get_logfile(1). + +&compare_output($answer,&get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/functions/error b/src/mkutil/make/tests/scripts/functions/error new file mode 100644 index 00000000..ca9b4e44 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/error @@ -0,0 +1,63 @@ +$description = "\ +The following test creates a makefile to test the error function."; + +$details = ""; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; +ifdef ERROR1 +$(error error is $(ERROR1)) +endif + +ifdef ERROR2 +$(error error is $(ERROR2)) +endif + +ifdef ERROR3 +all: some; @echo $(error error is $(ERROR3)) +endif + +ifdef ERROR4 +all: some; @echo error is $(ERROR4) + @echo $(error error is $(ERROR4)) +endif + +some: ; @echo Some stuff + +EOF + +close(MAKEFILE); + +# Test #1 + +&run_make_with_options($makefile, "ERROR1=yes", &get_logfile, 512); +$answer = "$makefile:2: *** error is yes. Stop.\n"; +&compare_output($answer,&get_logfile(1)); + +# Test #2 + +&run_make_with_options($makefile, "ERROR2=no", &get_logfile, 512); +$answer = "$makefile:6: *** error is no. Stop.\n"; +&compare_output($answer,&get_logfile(1)); + +# Test #3 + +&run_make_with_options($makefile, "ERROR3=maybe", &get_logfile, 512); +$answer = "Some stuff\n$makefile:10: *** error is maybe. Stop.\n"; +&compare_output($answer,&get_logfile(1)); + +# Test #4 + +&run_make_with_options($makefile, "ERROR4=definitely", &get_logfile, 512); +$answer = "Some stuff\n$makefile:14: *** error is definitely. Stop.\n"; +&compare_output($answer,&get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/functions/eval b/src/mkutil/make/tests/scripts/functions/eval new file mode 100644 index 00000000..cfb27b22 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/eval @@ -0,0 +1,112 @@ +# -*-perl-*- + +$description = "Test the eval function."; + +$details = "This is a test of the eval function in GNU make. +This function will evaluate inline makefile syntax and incorporate the +results into its internal database.\n"; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; +define Y + all:: ; @echo $AA + A = B +endef + +X = $(eval $(value Y)) + +$(eval $(shell echo A = A)) +$(eval $(Y)) +$(eval A = C) +$(eval $(X)) +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile, "", &get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "AA\nBA\n"; + +&compare_output($answer,&get_logfile(1)); + +# Test to make sure defining variables when we have extra scope pushed works +# as expected. + +$makefile2 = &get_tmpfile; + +open(MAKEFILE,"> $makefile2"); + +print MAKEFILE <<'EOF'; +VARS = A B + +VARSET = $(1) = $(2) + +$(foreach v,$(VARS),$(eval $(call VARSET,$v,$v))) + +all: ; @echo A = $(A) B = $(B) +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile2, "", &get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "A = A B = B\n"; + +&compare_output($answer,&get_logfile(1)); + +# Test to make sure eval'ing inside conditionals works properly + +$makefile3 = &get_tmpfile; + +open(MAKEFILE,"> $makefile3"); + +print MAKEFILE <<'EOF'; +FOO = foo + +all:: ; @echo it + +define Y + all:: ; @echo worked +endef + +ifdef BAR +$(eval $(Y)) +endif + +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile3, "", &get_logfile); +$answer = "it\n"; +&compare_output($answer,&get_logfile(1)); + +&run_make_with_options($makefile3, "BAR=1", &get_logfile); +$answer = "it\nworked\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST very recursive invocation of eval + +$makefile3 = &get_tmpfile; + +open(MAKEFILE,"> $makefile3"); + +print MAKEFILE <<'EOF'; +..9 := 0 1 2 3 4 5 6 7 8 9 +rev=$(eval res:=)$(foreach word,$1,$(eval res:=${word} ${res}))${res} +a:=$(call rev,${..9}) +all: ; @echo '[$(a)]' + +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile3, "", &get_logfile); +$answer = "[ 9 8 7 6 5 4 3 2 1 0 ]\n"; +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/functions/filter-out b/src/mkutil/make/tests/scripts/functions/filter-out new file mode 100644 index 00000000..6c8b27a8 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/filter-out @@ -0,0 +1,28 @@ +# -*-perl-*- + +$description = "Test the filter-out function."; + +$details = "The makefile created in this test has two variables. The +filter-out function is first used to discard names ending in +.o with a single simple pattern. The second filter-out function +augments the simple pattern with three literal names, which are +also added to the text argument. This tests an internal hash table +which is only used if there are multiple literals present in both +the pattern and text arguments. The result of both filter-out +functions is the same single .elc name.\n"; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; +files1 := $(filter-out %.o, foo.elc bar.o lose.o) +files2 := $(filter-out foo.i bar.i lose.i %.o, foo.i bar.i lose.i foo.elc bar.o lose.o) +all: ; @echo $(files1) $(files2) +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile, "", &get_logfile, 0); +$answer = "foo.elc foo.elc\n"; +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/functions/findstring b/src/mkutil/make/tests/scripts/functions/findstring new file mode 100644 index 00000000..48abede6 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/findstring @@ -0,0 +1,47 @@ +$description = "The following test creates a makefile to test the findstring " + ."function."; + +$details = ""; + +# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET +# THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF +# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. +# EXAMPLE: $makefile2 = &get_tmpfile; + + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "string := \$(findstring port, reporter)\n" + ."all: \n" + ."\t\@echo \$(string) \n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile, + "", + &get_logfile, + 0); + +# Create the answer to what should be produced by this Makefile +$answer = "port\n"; + +# COMPARE RESULTS + +# In this call to compare output, you should use the call &get_logfile(1) +# to send the name of the last logfile created. You may also use +# the special call &get_logfile(1) which returns the same as &get_logfile(1). + +&compare_output($answer,&get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/functions/foreach b/src/mkutil/make/tests/scripts/functions/foreach new file mode 100644 index 00000000..b80751b2 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/foreach @@ -0,0 +1,53 @@ +# -*-perl-*- + +# Updated 6.16.93 variable "MAKE" is default was environment override +# For make 3.63 and above + +$description = "The following test creates a makefile to verify +test the foreach function."; + +$details = "This is a test of the foreach function in gnu make. +This function starts with a space separated list of +names and a variable. Each name in the list is subsituted +into the variable and the given text evaluated. The general +form of the command is $(foreach var,$list,$text). Several +types of foreach loops are tested\n"; + + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +# On WIN32 systems, the user's path is found in %Path% ($Path) +# +$pathvar = (($port_type eq 'Windows') ? "Path" : "PATH"); + +print MAKEFILE < $makefile"); + +print MAKEFILE <1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET +# THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF +# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. +# EXAMPLE: $makefile2 = &get_tmpfile; + + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "string := \$(join a b c,foo hacks .pl1) \n" + ."all: \n" + ."\t\@echo \$(string) \n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile,0); + +# Create the answer to what should be produced by this Makefile +$answer = "afoo bhacks c.pl1\n"; + +# COMPARE RESULTS + +# In this call to compare output, you should use the call &get_logfile(1) +# to send the name of the last logfile created. You may also use +# the special call &get_logfile(1) which returns the same as &get_logfile(1). + +&compare_output($answer,&get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/functions/notdir b/src/mkutil/make/tests/scripts/functions/notdir new file mode 100644 index 00000000..4ed8f9c7 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/notdir @@ -0,0 +1,44 @@ +$description = "The following test creates a makefile to test the notdir " + ."function."; + +$details = ""; + +# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET +# THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF +# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. +# EXAMPLE: $makefile2 = &get_tmpfile; + + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "string := \$(notdir ${pathsep}src${pathsep}foo.c hacks) \n" + ."all: \n" + ."\t\@echo \$(string) \n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile,0); + +# Create the answer to what should be produced by this Makefile +$answer = "foo.c hacks\n"; + +# COMPARE RESULTS + +# In this call to compare output, you should use the call &get_logfile(1) +# to send the name of the last logfile created. You may also use +# the special call &get_logfile(1) which returns the same as &get_logfile(1). + +&compare_output($answer,&get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/functions/origin b/src/mkutil/make/tests/scripts/functions/origin new file mode 100644 index 00000000..eab2d787 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/origin @@ -0,0 +1,66 @@ +# -*-perl-*- + +$description = "Test the origin function."; + +$details = "This is a test of the origin function in gnu make. +This function will report on where a variable was +defined per the following list: + +'undefined' never defined +'default' default definition +'environment' environment var without -e +'environment override' environment var with -e +'file' defined in makefile +'command line' defined on the command line +'override' defined by override in makefile +'automatic' Automatic variable\n"; + +# On WIN32 systems, HOME is meaningless. SystemRoot should be defined +# though. With DJGPP, HOME is not guaranteed to be defined. Use DJDIR +# instead. +# +$homevar = (($port_type eq 'Windows') ? "SystemRoot" + : (($port_type eq 'DOS') ? "DJDIR" + : "HOME")); + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE < $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "foo := moon_light days \n" + ."foo1:= jazz\n" + ."bar := captured \n" + ."bar2 = boy end, has rise A midnight \n" + ."bar3:= \$(foo)\n" + ."s1 := _by\n" + ."s2 := _and_a\n" + ."t1 := \$(addsuffix \$(s1), \$(bar) )\n" + ."t2 := \$(addsuffix \$(s2), \$(foo1) )\n" + ."t3 := \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \$(t2) \n" + ."t4 := \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \$(t3) \n" + ."t5 := \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \$(t4) \n" + ."t6 := \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \$(t5) \n" + ."t7 := \$(t6) \$(t6) \$(t6) \n" + ."p1 := \$(addprefix \$(foo1), \$(s2) )\n" + ."blank:= \n" + ."all:\n" + ."\t\@echo \$(sort \$(bar2) \$(foo) \$(addsuffix \$(s1), \$(bar) ) \$(t2) \$(bar2) \$(bar3))\n" + ."\t\@echo \$(sort \$(blank) \$(foo) \$(bar2) \$(t1) \$(p1) )\n" + ."\t\@echo \$(sort \$(foo) \$(bar2) \$(t1) \$(t4) \$(t5) \$(t7) \$(t6) )\n"; + + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "A boy captured_by days end, has jazz_and_a midnight moon_light rise\n" + ."A boy captured_by days end, has jazz_and_a midnight moon_light rise\n" + ."A boy captured_by days end, has jazz_and_a midnight moon_light rise\n"; + +&compare_output($answer,&get_logfile(1)); + +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/functions/strip b/src/mkutil/make/tests/scripts/functions/strip new file mode 100644 index 00000000..8222433f --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/strip @@ -0,0 +1,57 @@ +# -*-perl-*- +$description = "The following test creates a makefile to verify +the ability of make to strip white space from lists of object.\n"; + + +$details = "The make file is built with a list of objects that contain white space +These are then run through the strip command to remove it. This is then +verified by echoing the result.\n"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE <<'EOMAKE'; +TEST1 := "Is this TERMINAL fun? What makes you believe is this terminal fun? JAPAN is a WONDERFUL planet -- I wonder if we will ever reach their level of COMPARATIVE SHOPPING..." +E := +TEST2 := $E try this and this $E + +define TEST3 + +and these test out + + +some +blank lines + + + +endef + +.PHONY: all +all: + @echo '$(strip $(TEST1) )' + @echo '$(strip $(TEST2) )' + @echo '$(strip $(TEST3) )' + +space: ; @echo '$(strip ) $(strip )' + +EOMAKE + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile); +$answer = "\"Is this TERMINAL fun? What makes you believe is this terminal fun? JAPAN is a WONDERFUL planet -- I wonder if we will ever reach their level of COMPARATIVE SHOPPING...\" +try this and this +and these test out some blank lines +"; +&compare_output($answer,&get_logfile(1)); + + +&run_make_with_options($makefile,"space",&get_logfile); +$answer = " \n"; +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/functions/substitution b/src/mkutil/make/tests/scripts/functions/substitution new file mode 100644 index 00000000..9280dbba --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/substitution @@ -0,0 +1,37 @@ +$description = "The following test creates a makefile to ..."; + +$details = ""; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "foo := a.o b.o c.o\n" + ."bar := \$(foo:.o=.c)\n" + ."bar2:= \$(foo:%.o=%.c)\n" + ."bar3:= \$(patsubst %.c,%.o,x.c.c bar.c)\n" + ."all:\n" + ."\t\@echo \$(bar)\n" + ."\t\@echo \$(bar2)\n" + ."\t\@echo \$(bar3)\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "a.c b.c c.c\n" + ."a.c b.c c.c\n" + ."x.c.o bar.o\n"; + +&compare_output($answer,&get_logfile(1)); + +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/functions/suffix b/src/mkutil/make/tests/scripts/functions/suffix new file mode 100644 index 00000000..0c4f919e --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/suffix @@ -0,0 +1,57 @@ +$description = "The following test creates a makefile to test the suffix\n" + ."function. \n"; + +$details = "The suffix function will return the string following the last _._\n" + ."the list provided. It will provide all of the unique suffixes found\n" + ."in the list. The long strings are sorted to remove duplicates.\n"; + +# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET +# THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF +# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. +# EXAMPLE: $makefile2 = &get_tmpfile; + + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "string := word.pl general_test2.pl1 FORCE.pl word.pl3 generic_test.perl /tmp.c/bar foo.baz/bar.c MAKEFILES_variable.c\n" + ."string2 := \$(string) \$(string) \$(string) \$(string) \$(string) \$(string) \$(string)\n" + ."string3 := \$(string2) \$(string2) \$(string2) \$(string2) \$(string2) \$(string2) \$(string2)\n" + ."string4 := \$(string3) \$(string3) \$(string3) \$(string3) \$(string3) \$(string3) \$(string3)\n" + ."all: \n" + ."\t\@echo \$(suffix \$(string)) \n" + ."\t\@echo \$(sort \$(suffix \$(string4))) \n" + ."\t\@echo \$(suffix \$(string) a.out) \n" + ."\t\@echo \$(sort \$(suffix \$(string3))) \n"; + + + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile,0); + +# Create the answer to what should be produced by this Makefile + +# COMPARE RESULTS +$answer = ".pl .pl1 .pl .pl3 .perl .c .c\n" + .".c .perl .pl .pl1 .pl3\n" + .".pl .pl1 .pl .pl3 .perl .c .c .out\n" + .".c .perl .pl .pl1 .pl3\n"; + +# In this call to compare output, you should use the call &get_logfile(1) +# to send the name of the last logfile created. You may also use +# the special call &get_logfile(1) which returns the same as &get_logfile(1). + +&compare_output($answer,&get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/functions/value b/src/mkutil/make/tests/scripts/functions/value new file mode 100644 index 00000000..8e1a6f04 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/value @@ -0,0 +1,30 @@ +# -*-perl-*- + +$description = "Test the value function."; + +$details = "This is a test of the value function in GNU make. +This function will evaluate to the value of the named variable with no +further expansion performed on it.\n"; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; +export FOO = foo + +recurse = FOO = $FOO +static := FOO = $(value FOO) + +all: ; @echo $(recurse) $(value recurse) $(static) $(value static) +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile, "", &get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "FOO = OO FOO = foo FOO = foo FOO = foo\n"; + + +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/functions/warning b/src/mkutil/make/tests/scripts/functions/warning new file mode 100644 index 00000000..ac0ad643 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/warning @@ -0,0 +1,63 @@ +$description = "\ +The following test creates a makefile to test the warning function."; + +$details = ""; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; +ifdef WARNING1 +$(warning warning is $(WARNING1)) +endif + +ifdef WARNING2 +$(warning warning is $(WARNING2)) +endif + +ifdef WARNING3 +all: some; @echo hi $(warning warning is $(WARNING3)) +endif + +ifdef WARNING4 +all: some; @echo hi + @echo there $(warning warning is $(WARNING4)) +endif + +some: ; @echo Some stuff + +EOF + +close(MAKEFILE); + +# Test #1 + +&run_make_with_options($makefile, "WARNING1=yes", &get_logfile, 0); +$answer = "$makefile:2: warning is yes\nSome stuff\n"; +&compare_output($answer,&get_logfile(1)); + +# Test #2 + +&run_make_with_options($makefile, "WARNING2=no", &get_logfile, 0); +$answer = "$makefile:6: warning is no\nSome stuff\n"; +&compare_output($answer,&get_logfile(1)); + +# Test #3 + +&run_make_with_options($makefile, "WARNING3=maybe", &get_logfile, 0); +$answer = "Some stuff\n$makefile:10: warning is maybe\nhi\n"; +&compare_output($answer,&get_logfile(1)); + +# Test #4 + +&run_make_with_options($makefile, "WARNING4=definitely", &get_logfile, 0); +$answer = "Some stuff\n$makefile:14: warning is definitely\nhi\nthere\n"; +&compare_output($answer,&get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/functions/wildcard b/src/mkutil/make/tests/scripts/functions/wildcard new file mode 100644 index 00000000..0f79acc4 --- /dev/null +++ b/src/mkutil/make/tests/scripts/functions/wildcard @@ -0,0 +1,105 @@ +# -*-perl-*- + +$description = "The following test creates a makefile to test wildcard +expansions and the ability to put a command on the same +line as the target name separated by a semi-colon."; + +$details = "\ +This test creates 4 files by the names of 1.example, +two.example and 3.example. We execute three tests. The first +executes the print1 target which tests the '*' wildcard by +echoing all filenames by the name of '*.example'. The second +test echo's all files which match '?.example' and +[a-z0-9].example. Lastly we clean up all of the files using +the '*' wildcard as in the first test"; + +if ($vos) +{ + $delete_command = "delete_file -no_ask"; +} +else +{ + $delete_command = "rm"; +} + + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE < $makefile"); +print MAKEFILE <<'EOF'; +string := word.pl general_test2.pl FORCE.pl word.pl generic_test.perl MAKEFILES_variable.pl +string2 := $(string) $(string) $(string) $(string) $(string) $(string) $(string) +string3 := $(string2) $(string2) $(string2) $(string2) $(string2) $(string2) $(string2) +string4 := $(string3) $(string3) $(string3) $(string3) $(string3) $(string3) $(string3) +all: + @echo $(words $(string)) + @echo $(words $(string4)) + @echo $(word 1, $(string)) + @echo $(word 100, $(string)) + @echo $(word 1, $(string)) + @echo $(word 1000, $(string3)) + @echo $(wordlist 3, 4, $(string)) + @echo $(wordlist 4, 3, $(string)) + @echo $(wordlist 1, 6, $(string)) + @echo $(wordlist 5, 7, $(string)) + @echo $(wordlist 100, 110, $(string)) + @echo $(wordlist 7, 10, $(string2)) +EOF +close(MAKEFILE); + +&run_make_with_options($makefile, "", &get_logfile); +$answer = "6\n" + ."2058\n" + ."word.pl\n" + ."\n" + ."word.pl\n" + ."\n" + ."FORCE.pl word.pl\n" + ."\n" + ."word.pl general_test2.pl FORCE.pl word.pl generic_test.perl MAKEFILES_variable.pl\n" + ."generic_test.perl MAKEFILES_variable.pl\n" + ."\n" + ."word.pl general_test2.pl FORCE.pl word.pl\n"; +&compare_output($answer, &get_logfile(1)); + + +# Test error conditions + +$makefile2 = &get_tmpfile; + +open(MAKEFILE, "> $makefile2"); +print MAKEFILE <<'EOF'; +FOO = foo bar biz baz + +word-e1: ; @echo $(word ,$(FOO)) +word-e2: ; @echo $(word abc ,$(FOO)) +word-e3: ; @echo $(word 1a,$(FOO)) + +wordlist-e1: ; @echo $(wordlist ,,$(FOO)) +wordlist-e2: ; @echo $(wordlist abc ,,$(FOO)) +wordlist-e3: ; @echo $(wordlist 1, 12a ,$(FOO)) + +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile2, 'word-e1', &get_logfile, 512); +$answer = "$makefile2:3: *** non-numeric first argument to `word' function: ''. Stop.\n"; +&compare_output($answer, &get_logfile(1)); + +&run_make_with_options($makefile2, 'word-e2', &get_logfile, 512); +$answer = "$makefile2:4: *** non-numeric first argument to `word' function: 'abc '. Stop.\n"; +&compare_output($answer, &get_logfile(1)); + +&run_make_with_options($makefile2, 'word-e3', &get_logfile, 512); +$answer = "$makefile2:5: *** non-numeric first argument to `word' function: '1a'. Stop.\n"; +&compare_output($answer, &get_logfile(1)); + +&run_make_with_options($makefile2, 'wordlist-e1', &get_logfile, 512); +$answer = "$makefile2:7: *** non-numeric first argument to `wordlist' function: ''. Stop.\n"; +&compare_output($answer, &get_logfile(1)); + +&run_make_with_options($makefile2, 'wordlist-e2', &get_logfile, 512); +$answer = "$makefile2:8: *** non-numeric first argument to `wordlist' function: 'abc '. Stop.\n"; +&compare_output($answer, &get_logfile(1)); + +&run_make_with_options($makefile2, 'wordlist-e3', &get_logfile, 512); +$answer = "$makefile2:9: *** non-numeric second argument to `wordlist' function: ' 12a '. Stop.\n"; +&compare_output($answer, &get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; diff --git a/src/mkutil/make/tests/scripts/misc/CVS/Entries b/src/mkutil/make/tests/scripts/misc/CVS/Entries new file mode 100644 index 00000000..95ccf1b4 --- /dev/null +++ b/src/mkutil/make/tests/scripts/misc/CVS/Entries @@ -0,0 +1,5 @@ +/general1/1.1/Tue Sep 14 02:03:46 1999// +/general2/1.1/Tue Sep 14 02:03:46 1999// +/general3/1.2/Thu Aug 8 00:11:19 2002// +/general4/1.1/Wed Sep 4 07:26:20 2002// +D diff --git a/src/mkutil/make/tests/scripts/misc/CVS/Repository b/src/mkutil/make/tests/scripts/misc/CVS/Repository new file mode 100644 index 00000000..b964f0e3 --- /dev/null +++ b/src/mkutil/make/tests/scripts/misc/CVS/Repository @@ -0,0 +1 @@ +make/tests/scripts/misc diff --git a/src/mkutil/make/tests/scripts/misc/CVS/Root b/src/mkutil/make/tests/scripts/misc/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/tests/scripts/misc/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/tests/scripts/misc/general1 b/src/mkutil/make/tests/scripts/misc/general1 new file mode 100644 index 00000000..352fc6ad --- /dev/null +++ b/src/mkutil/make/tests/scripts/misc/general1 @@ -0,0 +1,51 @@ +# -*-perl-*- + +$description = "The following test creates a makefile to test the +simple functionality of make. It mimics the +rebuilding of a product with dependencies. +It also tests the simple definition of VPATH."; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE < $makefile"); + +# The contents of the Makefile ... + +print MAKEFILE < $makefile"); + +# The contents of the Makefile ... + +print MAKEFILE < $makefile2"); +print MAKEFILE "all:;\@echo FOO = \$(FOO)\nFOO = foo"; +close(MAKEFILE); + +&run_make_with_options($makefile2,"",&get_logfile); +$answer = "FOO = foo\n"; +&compare_output($answer,&get_logfile(1)); + + +1; diff --git a/src/mkutil/make/tests/scripts/misc/general4 b/src/mkutil/make/tests/scripts/misc/general4 new file mode 100644 index 00000000..dd77f539 --- /dev/null +++ b/src/mkutil/make/tests/scripts/misc/general4 @@ -0,0 +1,31 @@ +# -*-perl-*- + +$description = "\ +This tests random features of make's algorithms, often somewhat obscure, +which have either broken at some point in the past or seem likely to +break."; + +open(MAKEFILE,"> $makefile"); + +# The contents of the Makefile ... + +print MAKEFILE <<'EOF'; +# Make sure that subdirectories built as prerequisites are actually handled +# properly. + +all: dir/subdir/file.a + +dir/subdir: ; @echo mkdir -p dir/subdir + +dir/subdir/file.b: dir/subdir ; @echo touch dir/subdir/file.b + +dir/subdir/%.a: dir/subdir/%.b ; @echo cp $< $@ +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile,"",&get_logfile); +$answer = "mkdir -p dir/subdir\ntouch dir/subdir/file.b\ncp dir/subdir/file.b dir/subdir/file.a\n"; +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/options/CVS/Entries b/src/mkutil/make/tests/scripts/options/CVS/Entries new file mode 100644 index 00000000..efe48ed0 --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/CVS/Entries @@ -0,0 +1,12 @@ +/dash-B/1.2/Tue Sep 10 22:23:20 2002// +/dash-C/1.1/Tue Sep 14 02:03:48 1999// +/dash-I/1.1/Tue Sep 14 02:03:48 1999// +/dash-e/1.1/Tue Sep 14 02:03:48 1999// +/dash-f/1.1/Tue Sep 14 02:03:49 1999// +/dash-k/1.2/Mon Mar 27 06:54:37 2000// +/dash-l/1.2/Fri Sep 17 03:16:09 1999// +/dash-n/1.7/Wed Sep 4 07:26:20 2002// +/dash-q/1.1/Fri Jun 23 15:55:46 2000// +/dash-t/1.2/Tue Mar 25 00:15:25 2003// +/general/1.2/Mon Jun 19 21:22:44 2000// +D diff --git a/src/mkutil/make/tests/scripts/options/CVS/Repository b/src/mkutil/make/tests/scripts/options/CVS/Repository new file mode 100644 index 00000000..4eb04f87 --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/CVS/Repository @@ -0,0 +1 @@ +make/tests/scripts/options diff --git a/src/mkutil/make/tests/scripts/options/CVS/Root b/src/mkutil/make/tests/scripts/options/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/tests/scripts/options/dash-B b/src/mkutil/make/tests/scripts/options/dash-B new file mode 100644 index 00000000..32992b3c --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/dash-B @@ -0,0 +1,43 @@ +# -*-perl-*- + +$description = "Test make -B (always remake) option.\n"; + +$details = "\ +Construct a simple makefile that builds a target. +Invoke make once, so it builds everything. Invoke it again and verify +that nothing is built. Then invoke it with -B and verify that everything +is built again."; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; +.SUFFIXES: + +.PHONY: all +all: foo + +foo: bar.x + @echo cp $< $@ + @echo "" > $@ +EOF + +close(MAKEFILE); + + +&touch('bar.x'); + +&run_make_with_options($makefile, '', &get_logfile); +$answer = "cp bar.x foo\n"; +&compare_output($answer, &get_logfile(1)); + +&run_make_with_options($makefile, '', &get_logfile); +$answer = "$make_name: Nothing to be done for `all'.\n"; +&compare_output($answer, &get_logfile(1)); + +&run_make_with_options($makefile, '-B', &get_logfile); +$answer = "cp bar.x foo\n"; +&compare_output($answer, &get_logfile(1)); + +unlink('bar.x', 'foo') unless $keep; + +1; diff --git a/src/mkutil/make/tests/scripts/options/dash-C b/src/mkutil/make/tests/scripts/options/dash-C new file mode 100644 index 00000000..3f2b3a13 --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/dash-C @@ -0,0 +1,48 @@ +$description = "The following test creates a makefile to test the -C dir \n" + ."option in make. This option tells make to change to \n" + ."directory dir before reading the makefile."; + +$details = "This test is similar to the clean test except that this test\n" + ."creates the file to delete in the work directory instead of\n" + ."the current directory. Make is called from another directory\n" + ."using the -C workdir option so that it can both find the \n" + ."makefile and the file to delete in the work directory. "; + +$example = $workdir . $pathsep . "EXAMPLE_FILE"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "all: \n"; +print MAKEFILE "\t\@echo This makefile did not clean the dir ... good\n"; +print MAKEFILE "clean: \n"; +print MAKEFILE "\t$delete_command EXAMPLE_FILE\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&touch($example); + +&run_make_with_options("${testname}.mk", + "-C $workdir clean", + &get_logfile); + +chdir $workdir; +$wpath = &get_this_pwd; +chdir $pwd; + +# Create the answer to what should be produced by this Makefile +$answer = "$make_name: Entering directory `$wpath'\n" + . "$delete_command EXAMPLE_FILE\n" + . "$make_name: Leaving directory `$wpath'\n"; + +&compare_output($answer,&get_logfile(1)); + +if (-f $example) +{ + $test_passed = 0; +} + +1; diff --git a/src/mkutil/make/tests/scripts/options/dash-I b/src/mkutil/make/tests/scripts/options/dash-I new file mode 100644 index 00000000..0be0bd7f --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/dash-I @@ -0,0 +1,57 @@ +$description ="The following test creates a makefile to test the -I option."; + +$details = "\ +This test tests the -I option by including a filename in +another directory and giving make that directory name +under -I in the command line. Without this option, the make +would fail to find the included file. It also checks to make +sure that the -I option gets passed to recursive makes."; + +$makefile2 = &get_tmpfile; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +$mf2 = substr ($makefile2, index ($makefile2, $pathsep) + 1); +print MAKEFILE < $makefile2"); + +print MAKEFILE < $makefile"); + +print MAKEFILE <<'EOF'; +GOOGLE = bazzle +all:; @echo "$(GOOGLE)" +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile, '-e' ,&get_logfile); + +$answer = "boggle\n"; + +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/options/dash-f b/src/mkutil/make/tests/scripts/options/dash-f new file mode 100644 index 00000000..3aa47460 --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/dash-f @@ -0,0 +1,85 @@ +$description = "The following test tests that if you specify greater \n" + ."than one '-f makefilename' on the command line, \n" + ."that make concatenates them. This test creates three \n" + ."makefiles and specifies all of them with the -f option \n" + ."on the command line. To make sure they were concatenated, \n" + ."we then call make with the rules from the concatenated \n" + ."makefiles one at a time. Finally, it calls all three \n" + ."rules in one call to make and checks that the output\n" + ."is in the correct order."; + +$makefile2 = &get_tmpfile; +$makefile3 = &get_tmpfile; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "all: \n"; +print MAKEFILE "\t\@echo This is the output from the original makefile\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +# Create a second makefile +open(MAKEFILE,"> $makefile2"); +print MAKEFILE "TWO: \n"; +print MAKEFILE "\t\@echo This is the output from makefile 2\n"; +close(MAKEFILE); + +# Create a third makefile +open(MAKEFILE,"> $makefile3"); +print MAKEFILE "THREE: \n"; +print MAKEFILE "\t\@echo This is the output from makefile 3\n"; +close(MAKEFILE); + + +# Create the answer to what should be produced by this Makefile +$answer = "This is the output from the original makefile\n"; + +# Run make to catch the default rule +&run_make_with_options($makefile,"-f $makefile2 -f $makefile3",&get_logfile,0); + +&compare_output($answer,&get_logfile(1)); + + +# Run Make again with the rule from the second makefile: TWO +$answer = "This is the output from makefile 2\n"; + +&run_make_with_options($makefile,"-f $makefile2 -f $makefile3 TWO",&get_logfile,0); + +&compare_output($answer,&get_logfile(1)); + + +# Run Make again with the rule from the third makefile: THREE + +$answer = "This is the output from makefile 3\n"; +&run_make_with_options($makefile, + "-f $makefile2 -f $makefile3 THREE", + &get_logfile, + 0); +&compare_output($answer,&get_logfile(1)); + + +# Run Make again with ALL three rules in the order 2 1 3 to make sure +# that all rules are executed in the proper order + +$answer = "This is the output from makefile 2\n"; +$answer .= "This is the output from the original makefile\n"; +$answer .= "This is the output from makefile 3\n"; +&run_make_with_options($makefile, + "-f $makefile2 -f $makefile3 TWO all THREE", + &get_logfile, + 0); +&compare_output($answer,&get_logfile(1)); + + + + + + + + + + diff --git a/src/mkutil/make/tests/scripts/options/dash-k b/src/mkutil/make/tests/scripts/options/dash-k new file mode 100644 index 00000000..fe5689e3 --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/dash-k @@ -0,0 +1,100 @@ +# -*-perl-*- + +$description = "Test the make -k (don't stop on error) option.\n"; + +$details = "\ +The makefile created in this test is a simulation of building +a small product. However, the trick to this one is that one +of the dependencies of the main target does not exist. +Without the -k option, make would fail immediately and not +build any part of the target. What we are looking for here, +is that make builds the rest of the dependencies even though +it knows that at the end it will fail to rebuild the main target."; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE < $makefile2"); +print MAKEFILE <<'EOF'; +.SUFFIXES: + +all: exe1 exe2; @echo making $@ + +exe1 exe2: lib; @echo cp $^ $@ + +lib: foo.o; @echo cp $^ $@ + +foo.o: ; exit 1 +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile2, "-k", &get_logfile, $error_code); + +$answer = "exit 1 +$make_name: *** [foo.o] Error 1 +$make_name: Target `all' not remade because of errors.\n"; + +&compare_output($answer, &get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/options/dash-l b/src/mkutil/make/tests/scripts/options/dash-l new file mode 100644 index 00000000..58216f9f --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/dash-l @@ -0,0 +1,55 @@ +# -*-perl-*- +# Date: Tue, 11 Aug 1992 09:34:26 -0400 +# From: pds@lemming.webo.dg.com (Paul D. Smith) + +$description = "Test load balancing (-l) option."; + +$details = "\ +This test creates a makefile where all depends on three rules +which contain the same body. Each rule checks for the existence +of a temporary file; if it exists an error is generated. If it +doesn't exist then it is created, the rule sleeps, then deletes +the temp file again. Thus if any of the rules are run in +parallel the test will fail. When make is called in this test, +it is given the -l option with a value of 0.0001. This ensures +that the load will be above this number and make will therefore +decide that it cannot run more than one job even though -j 4 was +also specified on the command line."; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE <<'EOF'; +SHELL = /bin/sh + +define test +if [ ! -f test-file ]; then \ + echo >> test-file; sleep 2; rm -f test-file; \ +else \ + echo $@ FAILED; \ +fi +endef + +all : ONE TWO THREE +ONE : ; @$(test) +TWO : ; @$(test) +THREE : ; @$(test) +EOF + + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +$mkoptions = "-l 0.0001"; +$mkoptions .= " -j 4" if ($parallel_jobs); + +&run_make_with_options($makefile, $mkoptions, &get_logfile); + +$slurp = &read_file_into_string (&get_logfile(1)); +if ($slurp !~ /cannot enforce load limit/) { + &compare_output("", &get_logfile(1)); +} + +1; diff --git a/src/mkutil/make/tests/scripts/options/dash-n b/src/mkutil/make/tests/scripts/options/dash-n new file mode 100644 index 00000000..de19f42c --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/dash-n @@ -0,0 +1,70 @@ +# -*-perl-*- +$description = "Test the -n option.\n"; + +$details = "Try various uses of -n and ensure they all give the correct results.\n"; + +open(MAKEFILE, "> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE <<'EOMAKE'; + +final: intermediate ; echo >> $@ +intermediate: orig ; echo >> $@ + +EOMAKE + +close(MAKEFILE); + +&touch('orig'); + +# TEST 0 + +&run_make_with_options($makefile, "", &get_logfile); +$answer = "echo >> intermediate\necho >> final\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST 1 + +&run_make_with_options($makefile, "-Worig -n", &get_logfile); +$answer = "echo >> intermediate\necho >> final\n"; +&compare_output($answer, &get_logfile(1)); + +unlink('orig', 'intermediate', 'final'); + +# We consider the actual updated timestamp of targets with all +# recursive commands, even with -n. + +$makefile2 = &get_tmpfile; + +open(MAKEFILE, "> $makefile2"); + +print MAKEFILE <<'EOF'; +.SUFFIXES: +BAR = # nothing +FOO = +$(BAR) +a: b; echo > $@ +b: c; $(FOO) +EOF + +close(MAKEFILE); + +&utouch(-20, 'b'); +&utouch(-10, 'a'); +&touch('c'); + +# TEST 2 + +&run_make_with_options($makefile2, "", &get_logfile); +$answer = "$make_name: `a' is up to date.\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST 3 + +&run_make_with_options($makefile2, "-n", &get_logfile); +$answer = "$make_name: `a' is up to date.\n"; +&compare_output($answer, &get_logfile(1)); + +unlink('a', 'b', 'c'); + +1; diff --git a/src/mkutil/make/tests/scripts/options/dash-q b/src/mkutil/make/tests/scripts/options/dash-q new file mode 100644 index 00000000..923e4c4b --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/dash-q @@ -0,0 +1,70 @@ +# -*-perl-*- +$description = "Test the -q option.\n"; + +$details = "Try various uses of -q and ensure they all give the correct results.\n"; + +open(MAKEFILE, "> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE <<'EOMAKE'; +one: +two: ; +three: ; : +four: ; $(.XY) +five: ; \ + $(.XY) +six: ; \ + $(.XY) + $(.XY) +seven: ; \ + $(.XY) + : foo + $(.XY) +EOMAKE + +close(MAKEFILE); + +# TEST 0 + +&run_make_with_options($makefile, "-q one", &get_logfile); +$answer = ""; +&compare_output($answer, &get_logfile(1)); + +# TEST 1 + +&run_make_with_options($makefile, "-q two", &get_logfile); +$answer = ""; +&compare_output($answer, &get_logfile(1)); + +# TEST 2 + +&run_make_with_options($makefile, "-q three", &get_logfile, 256); +$answer = ""; +&compare_output($answer, &get_logfile(1)); + +# TEST 3 + +&run_make_with_options($makefile, "-q four", &get_logfile); +$answer = ""; +&compare_output($answer, &get_logfile(1)); + +# TEST 4 + +&run_make_with_options($makefile, "-q five", &get_logfile); +$answer = ""; +&compare_output($answer, &get_logfile(1)); + +# TEST 5 + +&run_make_with_options($makefile, "-q six", &get_logfile); +$answer = ""; +&compare_output($answer, &get_logfile(1)); + +# TEST 6 + +&run_make_with_options($makefile, "-q seven", &get_logfile, 256); +$answer = ""; +&compare_output($answer, &get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/options/dash-t b/src/mkutil/make/tests/scripts/options/dash-t new file mode 100644 index 00000000..ec27d7af --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/dash-t @@ -0,0 +1,58 @@ +# -*-perl-*- + +$description = "Test the -t option.\n"; + +$details = "Look out for regressions of prior bugs related to -t.\n"; +# That means, nobody has even tried to make the tests below comprehensive + +# TEST 0 +# bug reported by Henning Makholm on 2001-11-03: +# make 3.79.1 touches only interm-[ab] but reports final-[a] as +# 'up to date' without touching them. +# The 'obvious' fix didn't work for double-colon rules, so pay special +# attention to them. + +open(MAKEFILE, "> $makefile"); +print MAKEFILE <<'EOMAKE'; +final-a: interm-a ; echo >> $@ +final-b: interm-b ; echo >> $@ +interm-a:: orig1-a ; echo >> $@ +interm-a:: orig2-a ; echo >> $@ +interm-b:: orig1-b ; echo >> $@ +interm-b:: orig2-b ; echo >> $@ +EOMAKE +close(MAKEFILE); + +&utouch(-30, 'orig1-a','orig2-b'); +&utouch(-20, 'interm-a','interm-b'); +&utouch(-10, 'final-a','final-b'); +&touch('orig2-a','orig1-b'); + +&run_make_with_options($makefile, "-t final-a final-b", &get_logfile); +$answer = "touch interm-a\ntouch final-a\ntouch interm-b\ntouch final-b\n"; +&compare_output($answer, &get_logfile(1)); + +unlink('orig1-a', 'orig2-a', 'interm-a', 'final-a'); +unlink('orig1-b', 'orig2-b', 'interm-b', 'final-b'); + +# TEST 1 +# -t should not touch files with no commands. + +$makefile2 = &get_tmpfile; + +open(MAKEFILE, "> $makefile2"); +print MAKEFILE <<'EOMAKE'; + +PHOOEY: xxx +xxx: ; @: + +EOMAKE +close(MAKEFILE); + +&run_make_with_options($makefile2, "-t", &get_logfile); +$answer = "touch xxx\n"; +&compare_output($answer, &get_logfile(1)); + +unlink('xxx'); + +1; diff --git a/src/mkutil/make/tests/scripts/options/general b/src/mkutil/make/tests/scripts/options/general new file mode 100644 index 00000000..d35bb358 --- /dev/null +++ b/src/mkutil/make/tests/scripts/options/general @@ -0,0 +1,35 @@ +# -*-perl-*- +$description = "Test generic option processing.\n"; + +open(MAKEFILE, "> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "foo 1foo: ; \@echo \$\@\n"; + +close(MAKEFILE); + +# TEST 0 + +&run_make_with_options($makefile, "-j 1foo", &get_logfile); +if (!$parallel_jobs) { + $answer = "$make_name: Parallel jobs (-j) are not supported on this platform.\n$make_name: Resetting to single job (-j1) mode.\n1foo\n"; +} +else { + $answer = "1foo\n"; +} + +# TEST 1 + +# This test prints the usage string; I don't really know a good way to +# test it. I guess I could invoke make with a known-bad option to see +# what the usage looks like, then compare it to what I get here... :( + +# If I were always on UNIX, I could invoke it with 2>/dev/null, then +# just check the error code. + +&run_make_with_options($makefile, "-j1foo 2>/dev/null", &get_logfile, 512); +$answer = ""; +&compare_output($answer, &get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/targets/CVS/Entries b/src/mkutil/make/tests/scripts/targets/CVS/Entries new file mode 100644 index 00000000..7e1deed3 --- /dev/null +++ b/src/mkutil/make/tests/scripts/targets/CVS/Entries @@ -0,0 +1,8 @@ +/DEFAULT/1.1/Tue Sep 14 02:03:50 1999// +/FORCE/1.1/Tue Sep 14 02:03:51 1999// +/INTERMEDIATE/1.6/Wed Sep 4 07:26:20 2002// +/PHONY/1.1/Tue Sep 14 02:03:51 1999// +/SECONDARY/1.4/Fri Mar 28 06:31:45 2003// +/SILENT/1.1/Tue Sep 14 02:03:52 1999// +/clean/1.1/Tue Sep 14 02:03:52 1999// +D diff --git a/src/mkutil/make/tests/scripts/targets/CVS/Repository b/src/mkutil/make/tests/scripts/targets/CVS/Repository new file mode 100644 index 00000000..2abe0d69 --- /dev/null +++ b/src/mkutil/make/tests/scripts/targets/CVS/Repository @@ -0,0 +1 @@ +make/tests/scripts/targets diff --git a/src/mkutil/make/tests/scripts/targets/CVS/Root b/src/mkutil/make/tests/scripts/targets/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/tests/scripts/targets/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/tests/scripts/targets/DEFAULT b/src/mkutil/make/tests/scripts/targets/DEFAULT new file mode 100644 index 00000000..0cabde94 --- /dev/null +++ b/src/mkutil/make/tests/scripts/targets/DEFAULT @@ -0,0 +1,53 @@ +$description = "The following test creates a makefile to override part\n" + ."of one Makefile with Another Makefile with the .DEFAULT\n" + ."rule."; + +$details = "This tests the use of the .DEFAULT special target to say that \n" + ."to remake any target that cannot be made fram the information\n" + ."in the containing makefile, make should look in another makefile\n" + ."This test gives this makefile the target bar which is not \n" + ."defined here but passes the target bar on to another makefile\n" + ."which does have the target bar defined.\n"; + +$makefile2 = &get_tmpfile; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "foo:\n"; +print MAKEFILE "\t\@echo Executing rule FOO\n\n"; +print MAKEFILE ".DEFAULT:\n"; +print MAKEFILE "\t\@\$(MAKE) -f $makefile2 \$\@ \n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + + +open(MAKEFILE,"> $makefile2"); + +print MAKEFILE "bar:\n"; +print MAKEFILE "\t\@echo Executing rule BAR\n\n"; + +close(MAKEFILE); + +&run_make_with_options($makefile,'bar',&get_logfile); + +# Create the answer to what should be produced by this Makefile +$answer = "${make_name}[1]: Entering directory `$pwd'\n" + . "Executing rule BAR\n" + . "${make_name}[1]: Leaving directory `$pwd'\n"; + +# COMPARE RESULTS + +&compare_output($answer,&get_logfile(1)); + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/targets/FORCE b/src/mkutil/make/tests/scripts/targets/FORCE new file mode 100644 index 00000000..90ee48d6 --- /dev/null +++ b/src/mkutil/make/tests/scripts/targets/FORCE @@ -0,0 +1,52 @@ +$description = "The following tests rules without Commands or Dependencies."; + +$details = "If the rule ...\n"; + +if ($vos) +{ + $delete_command = "delete_file"; +} +else +{ + $delete_command = "rm"; +} + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE ".IGNORE :\n"; +print MAKEFILE "clean: FORCE\n"; +print MAKEFILE "\t$delete_command clean\n"; +print MAKEFILE "FORCE:\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + + +# Create a file named "clean". This is the same name as the target clean +# and tricks the target into thinking that it is up to date. (Unless you +# use the .PHONY target. +&touch("clean"); + +$answer = "$delete_command clean\n"; +&run_make_with_options($makefile,"clean",&get_logfile); + +&compare_output($answer,&get_logfile(1)); + +if (-f $example) +{ + $test_passed = 0; +} + +1; + + + + + + + + + diff --git a/src/mkutil/make/tests/scripts/targets/INTERMEDIATE b/src/mkutil/make/tests/scripts/targets/INTERMEDIATE new file mode 100644 index 00000000..4fdd7a2a --- /dev/null +++ b/src/mkutil/make/tests/scripts/targets/INTERMEDIATE @@ -0,0 +1,108 @@ +# -*-perl-*- + +$description = "Test the behaviour of the .INTERMEDIATE target."; + +$details = "\ +Test the behavior of the .INTERMEDIATE special target. +Create a makefile where a file would not normally be considered +intermediate, then specify it as .INTERMEDIATE. Build and ensure it's +deleted properly. Rebuild to ensure that it's not created if it doesn't +exist but doesn't need to be built. Change the original and ensure +that the intermediate file and the ultimate target are both rebuilt, and +that the intermediate file is again deleted. + +Try this with implicit rules and explicit rules: both should work.\n"; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; + +.INTERMEDIATE: foo.e bar.e + +# Implicit rule test +%.d : %.e ; cp $< $@ +%.e : %.f ; cp $< $@ + +foo.d: foo.e + +# Explicit rule test +foo.c: foo.e bar.e; cat $^ > $@ +EOF + +close(MAKEFILE); + +# TEST #0 + +&utouch(-20, 'foo.f', 'bar.f'); + +&run_make_with_options($makefile,'foo.d',&get_logfile); +$answer = "cp foo.f foo.e\ncp foo.e foo.d\nrm foo.e\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #1 + +&run_make_with_options($makefile,'foo.d',&get_logfile); +$answer = "$make_name: `foo.d' is up to date.\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #2 + +&utouch(-10, 'foo.d'); +&touch('foo.f'); + +&run_make_with_options($makefile,'foo.d',&get_logfile); +$answer = "cp foo.f foo.e\ncp foo.e foo.d\nrm foo.e\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #3 + +&run_make_with_options($makefile,'foo.c',&get_logfile); +$answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm bar.e foo.e\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #4 + +&run_make_with_options($makefile,'foo.c',&get_logfile); +$answer = "$make_name: `foo.c' is up to date.\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #5 + +&utouch(-10, 'foo.c'); +&touch('foo.f'); + +&run_make_with_options($makefile,'foo.c',&get_logfile); +$answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm bar.e foo.e\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #6 -- added for PR/1669: don't remove files mentioned on the cmd line. + +&run_make_with_options($makefile,'foo.e',&get_logfile); +$answer = "cp foo.f foo.e\n"; +&compare_output($answer, &get_logfile(1)); + +unlink('foo.f', 'foo.e', 'foo.d', 'foo.c', 'bar.f', 'bar.e', 'bar.d', 'bar.c'); + +# TEST #7 -- added for PR/1423 + +$makefile2 = &get_tmpfile; + +open(MAKEFILE, "> $makefile2"); + +print MAKEFILE <<'EOF'; +all: foo +foo.a: ; touch $@ +%: %.a ; touch $@ +.INTERMEDIATE: foo.a +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile2, '-R', &get_logfile); +$answer = "touch foo.a\ntouch foo\nrm foo.a\n"; +&compare_output($answer, &get_logfile(1)); + +unlink('foo'); + +# This tells the test driver that the perl test script executed properly. +1; diff --git a/src/mkutil/make/tests/scripts/targets/PHONY b/src/mkutil/make/tests/scripts/targets/PHONY new file mode 100644 index 00000000..14d5ae1c --- /dev/null +++ b/src/mkutil/make/tests/scripts/targets/PHONY @@ -0,0 +1,62 @@ +$description = "The following tests the use of a PHONY target. It makes\n" + ."sure that the rules under a target get executed even if\n" + ."a filename of the same name of the target exists in the\n" + ."directory.\n"; + +$details = "This makefile in this test declares the target clean to be a \n" + ."PHONY target. We then create a file named \"clean\" in the \n" + ."directory. Although this file exists, the rule under the target\n" + ."clean should still execute because of it's phony status."; + +if ($vos) +{ + $delete_command = "delete_file"; +} +else +{ + $delete_command = "rm"; +} + +$example = "EXAMPLE_FILE"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE ".PHONY : clean \n"; +print MAKEFILE "all: \n"; +print MAKEFILE "\t\@echo This makefile did not clean the dir ... good\n"; +print MAKEFILE "clean: \n"; +print MAKEFILE "\t$delete_command $example clean\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&touch($example); + +# Create a file named "clean". This is the same name as the target clean +# and tricks the target into thinking that it is up to date. (Unless you +# use the .PHONY target. +&touch("clean"); + +$answer = "$delete_command $example clean\n"; +&run_make_with_options($makefile,"clean",&get_logfile); + +&compare_output($answer,&get_logfile(1)); + +if (-f $example) +{ + $test_passed = 0; +} + +1; + + + + + + + + + diff --git a/src/mkutil/make/tests/scripts/targets/SECONDARY b/src/mkutil/make/tests/scripts/targets/SECONDARY new file mode 100644 index 00000000..a6c5dab6 --- /dev/null +++ b/src/mkutil/make/tests/scripts/targets/SECONDARY @@ -0,0 +1,112 @@ +#! -*-perl-*- + +$description = "Test the behaviour of the .SECONDARY target."; + +$details = "\ +Test the behavior of the .SECONDARY special target. +Create a makefile where a file would not normally be considered +intermediate, then specify it as .SECONDARY. Build and note that it's +not automatically deleted. Delete the file. Rebuild to ensure that +it's not created if it doesn't exist but doesn't need to be built. +Change the original and ensure that the secondary file and the ultimate +target are both rebuilt, and that the secondary file is not deleted. + +Try this with implicit rules and explicit rules: both should work.\n"; + +open(MAKEFILE,"> $makefile"); + +print MAKEFILE <<'EOF'; + +.SECONDARY: foo.e + +# Implicit rule test +%.d : %.e ; cp $< $@ +%.e : %.f ; cp $< $@ + +foo.d: foo.e + +# Explicit rule test +foo.c: foo.e ; cp $< $@ +EOF + +close(MAKEFILE); + +# TEST #1 + +&utouch(-20, 'foo.f'); + +&run_make_with_options($makefile,'foo.d',&get_logfile); +$answer = "cp foo.f foo.e\ncp foo.e foo.d\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #2 + +unlink('foo.e'); + +&run_make_with_options($makefile,'foo.d',&get_logfile); +$answer = "$make_name: `foo.d' is up to date.\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #3 + +&utouch(-10, 'foo.d'); +&touch('foo.f'); + +&run_make_with_options($makefile,'foo.d',&get_logfile); +$answer = "cp foo.f foo.e\ncp foo.e foo.d\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #4 + +&run_make_with_options($makefile,'foo.c',&get_logfile); +$answer = "cp foo.e foo.c\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #5 + +unlink('foo.e'); + +&run_make_with_options($makefile,'foo.c',&get_logfile); +$answer = "$make_name: `foo.c' is up to date.\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #6 + +&utouch(-10, 'foo.c'); +&touch('foo.f'); + +&run_make_with_options($makefile,'foo.c',&get_logfile); +$answer = "cp foo.f foo.e\ncp foo.e foo.c\n"; +&compare_output($answer, &get_logfile(1)); + +unlink('foo.f', 'foo.e', 'foo.d', 'foo.c'); + +# TEST #7 -- test the "global" .SECONDARY, with no targets. + +$makefile2 = &get_tmpfile; + +open(MAKEFILE, "> $makefile2"); + +print MAKEFILE <<'EOF'; +.SECONDARY: + +final: intermediate +intermediate: source + +final intermediate source: + echo $< > $@ +EOF + +close(MAKEFILE); + +&utouch(-10, 'source'); +touch('final'); + +&run_make_with_options($makefile2, '', &get_logfile); +$answer = "$make_name: `final' is up to date.\n"; +&compare_output($answer, &get_logfile(1)); + +unlink('source', 'final', 'intermediate'); + +# This tells the test driver that the perl test script executed properly. +1; diff --git a/src/mkutil/make/tests/scripts/targets/SILENT b/src/mkutil/make/tests/scripts/targets/SILENT new file mode 100644 index 00000000..375cad49 --- /dev/null +++ b/src/mkutil/make/tests/scripts/targets/SILENT @@ -0,0 +1,51 @@ +$description = "The following tests the special target .SILENT. By simply\n" + ."mentioning this as a target, it tells make not to print\n" + ."commands before executing them."; + +$details = "This test is the same as the clean test except that it should\n" + ."not echo its command before deleting the specified file.\n"; + +if ($vos) +{ + $delete_command = "delete_file"; +} +else +{ + $delete_command = "rm"; +} + +$example = "EXAMPLE_FILE"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE ".SILENT : clean\n"; +print MAKEFILE "clean: \n"; +print MAKEFILE "\t$delete_command EXAMPLE_FILE\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&touch($example); + +$answer = ""; +&run_make_with_options($makefile,"clean",&get_logfile,0); + +&compare_output($answer,&get_logfile(1)); +if (-f $example) +{ + $test_passed = 0; +} + +1; + + + + + + + + + diff --git a/src/mkutil/make/tests/scripts/targets/clean b/src/mkutil/make/tests/scripts/targets/clean new file mode 100644 index 00000000..69f4fd1b --- /dev/null +++ b/src/mkutil/make/tests/scripts/targets/clean @@ -0,0 +1,51 @@ +# -*-perl-*- + +$description = "The following test creates a makefile to delete a \n" + ."file in the directory. It tests to see if make will \n" + ."NOT execute the command unless the rule is given in \n" + ."the make command line."; + +$example = "EXAMPLE_FILE"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "all: \n"; +print MAKEFILE "\t\@echo This makefile did not clean the dir... good\n"; +print MAKEFILE "clean: \n"; +print MAKEFILE "\t$delete_command EXAMPLE_FILE\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +&touch($example); + + +&run_make_with_options($makefile,"",&get_logfile,0); + +# Create the answer to what should be produced by this Makefile +$answer = "This makefile did not clean the dir... good\n"; + +&compare_output($answer,&get_logfile(1)) || &error ("abort"); + + +$answer = "$delete_command $example\n"; +&run_make_with_options($makefile,"clean",&get_logfile,0); + +&compare_output($answer,&get_logfile(1)) || &error ("abort"); +if (-f $example) { + $test_passed = 0; +} + +1; + + + + + + + + + diff --git a/src/mkutil/make/tests/scripts/test_template b/src/mkutil/make/tests/scripts/test_template new file mode 100644 index 00000000..773ced3d --- /dev/null +++ b/src/mkutil/make/tests/scripts/test_template @@ -0,0 +1,70 @@ +$description = "The following test creates a makefile to ... + "; + +$details = ""; + +# IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET +# THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF +# HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. +# EXAMPLE: $makefile2 = &get_tmpfile; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE " \n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + + +# Run make. You may specify a makefile, but if you don't want to, just +# insert "" where $make_filename is now. You may also specify specific +# options to run make with, but you also don't have to. (Insert "" where it +# says ), The last field in this subroutine call +# is the code which is returned from make. If you think that make should +# execute with no errors, you may OPTIONALLY put 0; Otherwise put the +# error code that you expect back from make for this test. + +# Every time you run make, you just need to say &get_logfile and that +# subroutine will get a new logfile name for you in incrementing order +# according to how many times you call it within ONE test. It is +# reset to 0 at the beginning of every new test script. + +&run_make_with_options($makefile, + "", + &get_logfile, + 0); + + +# THE REST OF THIS FILE DEPENDS HIGHLY ON WHAT KIND OF TEST YOU ARE +# CREATING, SO IT WILL VARY. BASICALLY, YOU MAY INSERT ANYTHING YOU +# WISH AT THIS POINT TO SEE IF THE TEST WORKED OK. IF THERE ARE +# ADDITIONAL TESTS BESIDES &compare_output, AND IT FAILES, YOU +# MUST *** SET $test_passed = 0 !!! *** + +# Create the answer to what should be produced by this Makefile +$answer = ""; + +# COMPARE RESULTS + +# In this call to compare output, you should use the call &get_logfile(1) +# to send the name of the last logfile created. You may also use +# the special call &get_logfile(1) which returns the same as &get_logfile(1). + +&compare_output($answer,&get_logfile(1)); + +# If you wish to &error ("abort +") if the compare fails, then add a "|| &error ("abort +")" to the +# end of the previous line. + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/variables/CURDIR b/src/mkutil/make/tests/scripts/variables/CURDIR new file mode 100644 index 00000000..ee7cacb1 --- /dev/null +++ b/src/mkutil/make/tests/scripts/variables/CURDIR @@ -0,0 +1,20 @@ +# -*-perl-*- + +$description = "This tests the CURDIR varaible."; + +$details = "Echo CURDIR both with and without -C. Also ensure overrides work."; + +open(MAKEFILE,"> $makefile"); +print MAKEFILE "all: ; \@echo \$(CURDIR)\n"; +close(MAKEFILE); + + +# TEST #1 +# ------- + +&run_make_with_options($makefile,"",&get_logfile); +$answer = "$pwd\n"; +&compare_output($answer,&get_logfile(1)); + + +1; diff --git a/src/mkutil/make/tests/scripts/variables/CVS/Entries b/src/mkutil/make/tests/scripts/variables/CVS/Entries new file mode 100644 index 00000000..d4fb14b8 --- /dev/null +++ b/src/mkutil/make/tests/scripts/variables/CVS/Entries @@ -0,0 +1,10 @@ +/CURDIR/1.2/Fri Oct 15 07:01:17 1999// +/MAKE/1.1/Tue Sep 14 02:03:54 1999// +/MAKECMDGOALS/1.2/Fri Sep 17 03:16:12 1999// +/MAKEFILES/1.2/Fri Oct 15 07:01:18 1999// +/MAKEFILE_LIST/1.1/Mon Jul 8 02:26:48 2002// +/MAKELEVEL/1.1/Tue Sep 14 02:03:54 1999// +/automatic/1.4/Sat Oct 5 13:45:48 2002// +/flavors/1.3/Mon Jul 8 02:26:48 2002// +/special/1.1/Thu Aug 8 00:11:20 2002// +D diff --git a/src/mkutil/make/tests/scripts/variables/CVS/Repository b/src/mkutil/make/tests/scripts/variables/CVS/Repository new file mode 100644 index 00000000..3a5cfca2 --- /dev/null +++ b/src/mkutil/make/tests/scripts/variables/CVS/Repository @@ -0,0 +1 @@ +make/tests/scripts/variables diff --git a/src/mkutil/make/tests/scripts/variables/CVS/Root b/src/mkutil/make/tests/scripts/variables/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/tests/scripts/variables/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/tests/scripts/variables/MAKE b/src/mkutil/make/tests/scripts/variables/MAKE new file mode 100644 index 00000000..7c4cf0a5 --- /dev/null +++ b/src/mkutil/make/tests/scripts/variables/MAKE @@ -0,0 +1,33 @@ +$description = "The following test creates a makefile to test MAKE \n" + ."(very generic)"; + +$details = "DETAILS"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE "TMP := \$(MAKE)\n"; +print MAKEFILE "MAKE := \$(subst X=\$(X),,\$(MAKE))\n\n"; +print MAKEFILE "all:\n"; +print MAKEFILE "\t\@echo \$(TMP)\n"; +print MAKEFILE "\t\$(MAKE) -f $makefile foo\n\n"; +print MAKEFILE "foo:\n"; +print MAKEFILE "\t\@echo \$(MAKE)\n"; + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +# Create the answer to what should be produced by this Makefile +$answer = "$mkpath\n$mkpath -f $makefile foo\n" + . "${make_name}[1]: Entering directory `$pwd'\n" + . "$mkpath\n${make_name}[1]: Leaving directory `$pwd'\n"; + +&run_make_with_options($makefile,"",&get_logfile,0); + +&delete("foo"); +# COMPARE RESULTS +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/variables/MAKECMDGOALS b/src/mkutil/make/tests/scripts/variables/MAKECMDGOALS new file mode 100644 index 00000000..879283b0 --- /dev/null +++ b/src/mkutil/make/tests/scripts/variables/MAKECMDGOALS @@ -0,0 +1,52 @@ +# -*-perl-*- + +$description = "Test the MAKECMDGOALS variable."; + +$details = "\ +We construct a makefile with various targets, all of which print out +\$(MAKECMDGOALS), then call it different ways."; + +open(MAKEFILE,"> $makefile"); +print MAKEFILE "\ +.DEFAULT all: + \@echo \$(MAKECMDGOALS) +"; +close(MAKEFILE); + +# TEST #1 + +&run_make_with_options($makefile, + "", + &get_logfile, + 0); +$answer = "\n"; +&compare_output($answer,&get_logfile(1)); + +# TEST #2 + +&run_make_with_options($makefile, + "all", + &get_logfile, + 0); +$answer = "all\n"; +&compare_output($answer,&get_logfile(1)); + + +# TEST #3 + +&run_make_with_options($makefile, + "foo bar baz yaz", + &get_logfile, + 0); +$answer = "foo bar baz yaz\nfoo bar baz yaz\nfoo bar baz yaz\nfoo bar baz yaz\n"; +&compare_output($answer,&get_logfile(1)); + + +# This tells the test driver that the perl test script executed properly. +1; + + + + + + diff --git a/src/mkutil/make/tests/scripts/variables/MAKEFILES b/src/mkutil/make/tests/scripts/variables/MAKEFILES new file mode 100644 index 00000000..3be284b3 --- /dev/null +++ b/src/mkutil/make/tests/scripts/variables/MAKEFILES @@ -0,0 +1,34 @@ +# -*-perl-*- + +$description = "Test the MAKEFILES variable."; + +$makefile2 = &get_tmpfile; +$makefile3 = &get_tmpfile; + +open(MAKEFILE,"> $makefile"); +print MAKEFILE 'all: ; @echo DEFAULT RULE: M2=$(M2) M3=$(M3)', "\n"; +close(MAKEFILE); + + +open(MAKEFILE,"> $makefile2"); +print MAKEFILE < $makefile3"); +print MAKEFILE < $makefile"); +print MAKEFILE < $makefile2"); +print MAKEFILE "m2 := \$(MAKEFILE_LIST)\n"; +close(MAKEFILE); + + +&run_make_with_options($makefile, "", &get_logfile); +$answer = "$makefile\n$makefile $makefile2\n$makefile $makefile2\n"; +&compare_output($answer,&get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/variables/MAKELEVEL b/src/mkutil/make/tests/scripts/variables/MAKELEVEL new file mode 100644 index 00000000..79a184e4 --- /dev/null +++ b/src/mkutil/make/tests/scripts/variables/MAKELEVEL @@ -0,0 +1,34 @@ +# -*-perl-mode-*- + +$description = "The following test creates a makefile to test +makelevels in Make. It prints \$(MAKELEVEL) and then +prints the environment variable MAKELEVEL"; + +open(MAKEFILE,"> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE < $makefile"); +print MAKEFILE "dir = $dir\n"; +print MAKEFILE <<'EOF'; +.SUFFIXES: +.SUFFIXES: .x .y .z +$(dir)/foo.x : baz.z $(dir)/bar.y baz.z + @echo '$$@ = $@, $$(@D) = $(@D), $$(@F) = $(@F)' + @echo '$$* = $*, $$(*D) = $(*D), $$(*F) = $(*F)' + @echo '$$< = $<, $$( $makefile2"); +print MAKEFILE "dir = $dir\n"; +print MAKEFILE <<'EOF'; +.SUFFIXES: +.DEFAULT: ; @echo '$@' + +$(dir)/foo $(dir)/bar: $@.x $$@.x $$$@.x $$$$@.x $$(@D).x $$(@F).x + +$(dir)/x.z $(dir)/y.z: $(dir)/%.z : $@.% $$@.% $$$@.% $$$$@.% $$(@D).% $$(@F).% + +$(dir)/biz: $$(@).x $${@}.x $${@D}.x $${@F}.x +EOF + +close(MAKEFILE); + +&run_make_with_options($makefile2, "$dir/foo $dir/bar", &get_logfile); +$answer = ".x\n$dir/foo.x\n\$.x\n\$@.x\n$dir.x\nfoo.x\n$dir/bar.x\nbar.x\n"; +&compare_output($answer, &get_logfile(1)); + +&run_make_with_options($makefile2, "$dir/x.z $dir/y.z", &get_logfile); +$answer = ".x\n$dir/x.z.x\n\$.x\n\$@.x\n$dir.x\nx.z.x\n.y\n$dir/y.z.y\n\$.y\n\$@.y\n$dir.y\ny.z.y\n"; +&compare_output($answer, &get_logfile(1)); + +&run_make_with_options($makefile2, "$dir/biz", &get_logfile); +$answer = "$dir/biz.x\n$dir.x\nbiz.x\n"; +&compare_output($answer, &get_logfile(1)); + +1; diff --git a/src/mkutil/make/tests/scripts/variables/flavors b/src/mkutil/make/tests/scripts/variables/flavors new file mode 100644 index 00000000..7c98afd2 --- /dev/null +++ b/src/mkutil/make/tests/scripts/variables/flavors @@ -0,0 +1,85 @@ +# -*-perl-*- + +$description = "Test various flavors of make variable setting."; + +$details = ""; + +open(MAKEFILE, "> $makefile"); + +# The Contents of the MAKEFILE ... + +print MAKEFILE <<'EOF'; +foo = $(bar) +bar = ${ugh} +ugh = Hello + +all: multi ; @echo $(foo) + +multi: ; $(multi) + +x := foo +y := $(x) bar +x := later + +nullstring := +space := $(nullstring) $(nullstring) + +next: ; @echo $x$(space)$y + +define multi +@echo hi +echo there +endef + +ifdef BOGUS +define +@echo error +endef +endif + +define outer + define inner + A = B + endef +endef + +$(eval $(outer)) + +outer: ; @echo $(inner) + +EOF + +# END of Contents of MAKEFILE + +close(MAKEFILE); + +# TEST #1 +# ------- + +&run_make_with_options($makefile, "", &get_logfile); +$answer = "hi\necho there\nthere\nHello\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #2 +# ------- + +&run_make_with_options($makefile, "next", &get_logfile); +$answer = "later foo bar\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #3 +# ------- + +&run_make_with_options($makefile, "BOGUS=true", &get_logfile, 512); +$answer = "$makefile:23: *** empty variable name. Stop.\n"; +&compare_output($answer, &get_logfile(1)); + +# TEST #4 +# ------- + +&run_make_with_options($makefile, "outer", &get_logfile); +$answer = "A = B\n"; +&compare_output($answer, &get_logfile(1)); + + +1; diff --git a/src/mkutil/make/tests/scripts/variables/special b/src/mkutil/make/tests/scripts/variables/special new file mode 100644 index 00000000..58c86552 --- /dev/null +++ b/src/mkutil/make/tests/scripts/variables/special @@ -0,0 +1,68 @@ +# -*-perl-*- + +$description = "Test special GNU make variables."; + +$details = ""; + +$makefile2 = &get_tmpfile; + + +open(MAKEFILE, "> $makefile"); + +print MAKEFILE <<'EOF'; + +X1 := $(sort $(filter FOO BAR,$(.VARIABLES))) + +FOO := foo + +X2 := $(sort $(filter FOO BAR,$(.VARIABLES))) + +BAR := bar + +all: + @echo X1 = $(X1) + @echo X2 = $(X2) + @echo LAST = $(sort $(filter FOO BAR,$(.VARIABLES))) + +EOF + +close(MAKEFILE); + +# TEST #1 +# ------- + +&run_make_with_options($makefile, "", &get_logfile); +$answer = "X1 =\nX2 = FOO\nLAST = BAR FOO\n"; +&compare_output($answer, &get_logfile(1)); + + + + +# open(MAKEFILE, "> $makefile2"); + +# print MAKEFILE <<'EOF'; + +# X1 := $(sort $(.TARGETS)) + +# all: foo +# @echo X1 = $(X1) +# @echo X2 = $(X2) +# @echo LAST = $(sort $(.TARGETS)) + +# X2 := $(sort $(.TARGETS)) + +# foo: + +# EOF + +# close(MAKEFILE); + +# # TEST #2 +# # ------- + +# &run_make_with_options($makefile2, "", &get_logfile); +# $answer = "X1 =\nX2 = all\nLAST = all foo\n"; +# &compare_output($answer, &get_logfile(1)); + + +1; diff --git a/src/mkutil/make/tests/test_driver.pl b/src/mkutil/make/tests/test_driver.pl new file mode 100644 index 00000000..0130605a --- /dev/null +++ b/src/mkutil/make/tests/test_driver.pl @@ -0,0 +1,1113 @@ +#!/usr/local/bin/perl +# -*-perl-*- + +# Modification history: +# Written 91-12-02 through 92-01-01 by Stephen McGee. +# Modified 92-02-11 through 92-02-22 by Chris Arthur to further generalize. +# End of modification history + +# Test driver routines used by a number of test suites, including +# those for SCS, make, roll_dir, and scan_deps (?). + +# this routine controls the whole mess; each test suite sets up a few +# variables and then calls &toplevel, which does all the real work. + +sub toplevel +{ + # Get a clean environment + + %makeENV = (); + + # Pull in benign variables from the user's environment + # + foreach (# UNIX-specific things + 'TZ', 'LANG', 'TMPDIR', 'HOME', 'USER', 'LOGNAME', 'PATH', + # Purify things + 'PURIFYOPTIONS', + # Windows NT-specific stuff + 'Path', 'SystemRoot', + # DJGPP-specific stuff + 'DJDIR', 'DJGPP', 'SHELL', 'COMSPEC', 'HOSTNAME', 'LFN', + 'FNCASE', '387', 'EMU387', 'GROUP' + ) { + $makeENV{$_} = $ENV{$_} if $ENV{$_}; + } + + # Replace the environment with the new one + # + %origENV = %ENV; + + # We used to say "%ENV = ();" but this doesn't work in Perl 5.000 + # through Perl 5.004. It was fixed in Perl 5.004_01, but we don't + # want to require that here, so just delete each one individually. + + foreach $v (keys %ENV) { + delete $ENV{$v}; + } + + %ENV = %makeENV; + + $| = 1; # unbuffered output + + $debug = 0; # debug flag + $profile = 0; # profiling flag + $verbose = 0; # verbose mode flag + $detail = 0; # detailed verbosity + $keep = 0; # keep temp files around + $workdir = "work"; # The directory where the test will start running + $scriptdir = "scripts"; # The directory where we find the test scripts + $tmpfilesuffix = "t"; # the suffix used on tmpfiles + $default_output_stack_level = 0; # used by attach_default_output, etc. + $default_input_stack_level = 0; # used by attach_default_input, etc. + $cwd = "."; # don't we wish we knew + $cwdslash = ""; # $cwd . $pathsep, but "" rather than "./" + + &get_osname; # sets $osname, $vos, $pathsep, and $short_filenames + + &set_defaults; # suite-defined + + &parse_command_line (@ARGV); + + print "OS name = `$osname'\n" if $debug; + + $workpath = "$cwdslash$workdir"; + $scriptpath = "$cwdslash$scriptdir"; + + &set_more_defaults; # suite-defined + + &print_banner; + + if (-d $workpath) + { + print "Clearing $workpath...\n"; + &remove_directory_tree("$workpath/") + || &error ("Couldn't wipe out $workpath\n"); + } + else + { + mkdir ($workpath, 0777) || &error ("Couldn't mkdir $workpath: $!\n"); + } + + if (!-d $scriptpath) + { + &error ("Failed to find $scriptpath containing perl test scripts.\n"); + } + + if (@TESTS) + { + print "Making work dirs...\n"; + foreach $test (@TESTS) + { + if ($test =~ /^([^\/]+)\//) + { + $dir = $1; + push (@rmdirs, $dir); + -d "$workpath/$dir" + || mkdir ("$workpath/$dir", 0777) + || &error ("Couldn't mkdir $workpath/$dir: $!\n"); + } + } + } + else + { + print "Finding tests...\n"; + opendir (SCRIPTDIR, $scriptpath) + || &error ("Couldn't opendir $scriptpath: $!\n"); + @dirs = grep (!/^(\.\.?|CVS|RCS)$/, readdir (SCRIPTDIR) ); + closedir (SCRIPTDIR); + foreach $dir (@dirs) + { + next if ($dir =~ /^\.\.?$/ || $dir eq 'CVS' || $dir eq 'RCS' + || ! -d "$scriptpath/$dir"); + push (@rmdirs, $dir); + mkdir ("$workpath/$dir", 0777) + || &error ("Couldn't mkdir $workpath/$dir: $!\n"); + opendir (SCRIPTDIR, "$scriptpath/$dir") + || &error ("Couldn't opendir $scriptpath/$dir: $!\n"); + @files = grep (!/^(\.\.?|CVS|RCS)$/, readdir (SCRIPTDIR) ); + closedir (SCRIPTDIR); + foreach $test (@files) + { + next if $test =~ /~$/ || -d $test; + push (@TESTS, "$dir/$test"); + } + } + } + + if (@TESTS == 0) + { + &error ("\nNo tests in $scriptpath, and none were specified.\n"); + } + + print "\n"; + + &run_each_test; + + foreach $dir (@rmdirs) + { + rmdir ("$workpath/$dir"); + } + + $| = 1; + + if ($num_failed) + { + print "\n$num_failed Test"; + print "s" unless $num_failed == 1; + print " Failed (See .$diffext files in $workdir dir for details) :-(\n\n"; + return 0; + } + else + { + print "\n$counter Test"; + print "s" unless $counter == 1; + print " Complete ... No Failures :-)\n\n"; + return 1; + } +} + +sub get_osname +{ + # Set up an initial value. In perl5 we can do it the easy way. + # + $osname = defined($^O) ? $^O : ''; + + # See if the filesystem supports long file names with multiple + # dots. DOS doesn't. + $short_filenames = 0; + (open (TOUCHFD, "> fancy.file.name") && close (TOUCHFD)) + || ($short_filenames = 1); + unlink ("fancy.file.name") || ($short_filenames = 1); + + if (! $short_filenames) { + # Thanks go to meyering@cs.utexas.edu (Jim Meyering) for suggesting a + # better way of doing this. (We used to test for existence of a /mnt + # dir, but that apparently fails on an SGI Indigo (whatever that is).) + # Because perl on VOS translates /'s to >'s, we need to test for + # VOSness rather than testing for Unixness (ie, try > instead of /). + + mkdir (".ostest", 0777) || &error ("Couldn't create .ostest: $!\n", 1); + open (TOUCHFD, "> .ostest>ick") && close (TOUCHFD); + chdir (".ostest") || &error ("Couldn't chdir to .ostest: $!\n", 1); + } + + if (! $short_filenames && -f "ick") + { + $osname = "vos"; + $vos = 1; + $pathsep = ">"; + } + else + { + # the following is regrettably knarly, but it seems to be the only way + # to not get ugly error messages if uname can't be found. + # Hmmm, BSD/OS 2.0's uname -a is excessively verbose. Let's try it + # with switches first. + eval "chop (\$osname = `sh -c 'uname -nmsr 2>&1'`)"; + if ($osname =~ /not found/i) + { + $osname = "(something unixy with no uname)"; + } + elsif ($@ ne "" || $?) + { + eval "chop (\$osname = `sh -c 'uname -a 2>&1'`)"; + if ($@ ne "" || $?) + { + $osname = "(something unixy)"; + } + } + $vos = 0; + $pathsep = "/"; + } + + if (! $short_filenames) { + chdir ("..") || &error ("Couldn't chdir to ..: $!\n", 1); + unlink (".ostest>ick"); + rmdir (".ostest") || &error ("Couldn't rmdir .ostest: $!\n", 1); + } +} + +sub parse_command_line +{ + @argv = @_; + + # use @ARGV if no args were passed in + + if (@argv == 0) + { + @argv = @ARGV; + } + + # look at each option; if we don't recognize it, maybe the suite-specific + # command line parsing code will... + + while (@argv) + { + $option = shift @argv; + if ($option =~ /^-debug$/i) + { + print "\nDEBUG ON\n"; + $debug = 1; + } + elsif ($option =~ /^-usage$/i) + { + &print_usage; + exit 0; + } + elsif ($option =~ /^-(h|help)$/i) + { + &print_help; + exit 0; + } + elsif ($option =~ /^-profile$/i) + { + $profile = 1; + } + elsif ($option =~ /^-verbose$/i) + { + $verbose = 1; + } + elsif ($option =~ /^-detail$/i) + { + $detail = 1; + $verbose = 1; + } + elsif ($option =~ /^-keep$/i) + { + $keep = 1; + } + elsif (&valid_option($option)) + { + # The suite-defined subroutine takes care of the option + } + elsif ($option =~ /^-/) + { + print "Invalid option: $option\n"; + &print_usage; + exit 0; + } + else # must be the name of a test + { + $option =~ s/\.pl$//; + push(@TESTS,$option); + } + } +} + +sub max +{ + local($num) = shift @_; + local($newnum); + + while (@_) + { + $newnum = shift @_; + if ($newnum > $num) + { + $num = $newnum; + } + } + + return $num; +} + +sub print_centered +{ + local($width, $string) = @_; + local($pad); + + if (length ($string)) + { + $pad = " " x ( ($width - length ($string) + 1) / 2); + print "$pad$string"; + } +} + +sub print_banner +{ + local($info); + local($line); + local($len); + + $info = "Running tests for $testee on $osname\n"; # $testee is suite-defined + $len = &max (length ($line), length ($testee_version), + length ($banner_info), 73) + 5; + $line = ("-" x $len) . "\n"; + if ($len < 78) + { + $len = 78; + } + + &print_centered ($len, $line); + &print_centered ($len, $info); + &print_centered ($len, $testee_version); # suite-defined + &print_centered ($len, $banner_info); # suite-defined + &print_centered ($len, $line); + print "\n"; +} + +sub run_each_test +{ + $counter = 0; + + foreach $testname (sort @TESTS) + { + $counter++; + $test_passed = 1; # reset by test on failure + $num_of_logfiles = 0; + $num_of_tmpfiles = 0; + $description = ""; + $details = ""; + $testname =~ s/^$scriptpath$pathsep//; + $perl_testname = "$scriptpath$pathsep$testname"; + $testname =~ s/(\.pl|\.perl)$//; + $testpath = "$workpath$pathsep$testname"; + # Leave enough space in the extensions to append a number, even + # though it needs to fit into 8+3 limits. + if ($short_filenames) { + $logext = 'l'; + $diffext = 'd'; + $baseext = 'b'; + $extext = ''; + } + else { + $logext = 'log'; + $diffext = 'diff'; + $baseext = 'base'; + $extext = '.'; + } + $log_filename = "$testpath.$logext"; + $diff_filename = "$testpath.$diffext"; + $base_filename = "$testpath.$baseext"; + $tmp_filename = "$testpath.$tmpfilesuffix"; + + &setup_for_test; # suite-defined + + $output = "........................................................ "; + + substr($output,0,length($testname)) = "$testname "; + + print $output; + + # Run the actual test! + # + $code = do $perl_testname; + if (!defined($code)) + { + $test_passed = 0; + if (length ($@)) + { + warn "\n*** Test died ($testname): $@\n"; + } + else + { + warn "\n*** Couldn't run $perl_testname\n"; + } + } + elsif ($code == -1) { + $test_passed = 0; + } + elsif ($code != 1 && $code != -1) { + $test_passed = 0; + warn "\n*** Test returned $code\n"; + } + + if ($test_passed) { + $status = "ok"; + for ($i = $num_of_tmpfiles; $i; $i--) + { + &delete ($tmp_filename . &num_suffix ($i) ); + } + + for ($i = $num_of_logfiles ? $num_of_logfiles : 1; $i; $i--) + { + &delete ($log_filename . &num_suffix ($i) ); + &delete ($base_filename . &num_suffix ($i) ); + } + } + elsif ($code > 0) { + $status = "FAILED"; + $num_failed++; + } + elsif ($code < 0) { + $status = "N/A"; + --$counter; + } + + # If the verbose option has been specified, then a short description + # of each test is printed before displaying the results of each test + # describing WHAT is being tested. + + if ($verbose) + { + if ($detail) + { + print "\nWHAT IS BEING TESTED\n"; + print "--------------------"; + } + print "\n\n$description\n\n"; + } + + # If the detail option has been specified, then the details of HOW + # the test is testing what it says it is testing in the verbose output + # will be displayed here before the results of the test are displayed. + + if ($detail) + { + print "\nHOW IT IS TESTED\n"; + print "----------------"; + print "\n\n$details\n\n"; + } + + print "$status\n"; + } +} + +# If the keep flag is not set, this subroutine deletes all filenames that +# are sent to it. + +sub delete +{ + local(@files) = @_; + + if (!$keep) + { + return (unlink @files); + } + + return 1; +} + +sub print_standard_usage +{ + local($plname,@moreusage) = @_; + local($line); + + print "Usage: perl $plname [testname] [-verbose] [-detail] [-keep]\n"; + print " [-profile] [-usage] [-help] " + . "[-debug]\n"; + foreach $line (@moreusage) + { + print " $line\n"; + } +} + +sub print_standard_help +{ + local(@morehelp) = @_; + local($line); + local($tline); + local($t) = " "; + + $line = "Test Driver For $testee"; + print "$line\n"; + $line = "=" x length ($line); + print "$line\n"; + + &print_usage; + + print "\ntestname\n" + . "${t}You may, if you wish, run only ONE test if you know the name\n" + . "${t}of that test and specify this name anywhere on the command\n" + . "${t}line. Otherwise ALL existing tests in the scripts directory\n" + . "${t}will be run.\n" + . "-verbose\n" + . "${t}If this option is given, a description of every test is\n" + . "${t}displayed before the test is run. (Not all tests may have\n" + . "${t}descriptions at this time)\n" + . "-detail\n" + . "${t}If this option is given, a detailed description of every\n" + . "${t}test is displayed before the test is run. (Not all tests\n" + . "${t}have descriptions at this time)\n" + . "-profile\n" + . "${t}If this option is given, then the profile file\n" + . "${t}is added to other profiles every time $testee is run.\n" + . "${t}This option only works on VOS at this time.\n" + . "-keep\n" + . "${t}You may give this option if you DO NOT want ANY\n" + . "${t}of the files generated by the tests to be deleted. \n" + . "${t}Without this option, all files generated by the test will\n" + . "${t}be deleted IF THE TEST PASSES.\n" + . "-debug\n" + . "${t}Use this option if you would like to see all of the system\n" + . "${t}calls issued and their return status while running the tests\n" + . "${t}This can be helpful if you're having a problem adding a test\n" + . "${t}to the suite, or if the test fails!\n"; + + foreach $line (@morehelp) + { + $tline = $line; + if (substr ($tline, 0, 1) eq "\t") + { + substr ($tline, 0, 1) = $t; + } + print "$tline\n"; + } +} + +####################################################################### +########### Generic Test Driver Subroutines ########### +####################################################################### + +sub get_caller +{ + local($depth); + local($package); + local($filename); + local($linenum); + + $depth = defined ($_[0]) ? $_[0] : 1; + ($package, $filename, $linenum) = caller ($depth + 1); + return "$filename: $linenum"; +} + +sub error +{ + local($message) = $_[0]; + local($caller) = &get_caller (1); + + if (defined ($_[1])) + { + $caller = &get_caller ($_[1] + 1) . " -> $caller"; + } + + die "$caller: $message"; +} + +sub compare_output +{ + local($answer,$logfile) = @_; + local($slurp); + + if ($debug) + { + print "Comparing Output ........ "; + } + + $slurp = &read_file_into_string ($logfile); + + # For make, get rid of any time skew error before comparing--too bad this + # has to go into the "generic" driver code :-/ + $slurp =~ s/^.*modification time .*in the future.*\n//gm; + $slurp =~ s/^.*Clock skew detected.*\n//gm; + + if ($slurp eq $answer) + { + if ($debug) + { + print "ok\n"; + } + return 1; + } + else + { + if ($debug) + { + print "DIFFERENT OUTPUT\n"; + } + $test_passed = 0; + &create_file (&get_basefile, $answer); + + if ($debug) + { + print "\nCreating Difference File ...\n"; + } + # Create the difference file + local($command) = "diff -c " . &get_basefile . " " . $logfile; + &run_command_with_output(&get_difffile,$command); + + return 0; + } +} + +sub read_file_into_string +{ + local($filename) = @_; + local($oldslash) = $/; + + undef $/; + + open (RFISFILE, $filename) || return ""; + local ($slurp) = ; + close (RFISFILE); + + $/ = $oldslash; + + return $slurp; +} + +sub attach_default_output +{ + local ($filename) = @_; + local ($code); + + if ($vos) + { + $code = system "++attach_default_output_hack $filename"; + $code == -2 || &error ("adoh death\n", 1); + return 1; + } + + open ("SAVEDOS" . $default_output_stack_level . "out", ">&STDOUT") + || &error ("ado: $! duping STDOUT\n", 1); + open ("SAVEDOS" . $default_output_stack_level . "err", ">&STDERR") + || &error ("ado: $! duping STDERR\n", 1); + + open (STDOUT, "> " . $filename) + || &error ("ado: $filename: $!\n", 1); + open (STDERR, ">&STDOUT") + || &error ("ado: $filename: $!\n", 1); + + $default_output_stack_level++; +} + +# close the current stdout/stderr, and restore the previous ones from +# the "stack." + +sub detach_default_output +{ + local ($code); + + if ($vos) + { + $code = system "++detach_default_output_hack"; + $code == -2 || &error ("ddoh death\n", 1); + return 1; + } + + if (--$default_output_stack_level < 0) + { + &error ("default output stack has flown under!\n", 1); + } + + close (STDOUT); + close (STDERR); + + open (STDOUT, ">&SAVEDOS" . $default_output_stack_level . "out") + || &error ("ddo: $! duping STDOUT\n", 1); + open (STDERR, ">&SAVEDOS" . $default_output_stack_level . "err") + || &error ("ddo: $! duping STDERR\n", 1); + + close ("SAVEDOS" . $default_output_stack_level . "out") + || &error ("ddo: $! closing SCSDOSout\n", 1); + close ("SAVEDOS" . $default_output_stack_level . "err") + || &error ("ddo: $! closing SAVEDOSerr\n", 1); +} + +# run one command (passed as a list of arg 0 - n), returning 0 on success +# and nonzero on failure. + +sub run_command +{ + local ($code); + + if ($debug) + { + print "\nrun_command: @_\n"; + $code = system @_; + print "run_command: \"@_\" returned $code.\n"; + return $code; + } + + return system @_; +} + +# run one command (passed as a list of arg 0 - n, with arg 0 being the +# second arg to this routine), returning 0 on success and non-zero on failure. +# The first arg to this routine is a filename to connect to the stdout +# & stderr of the child process. + +sub run_command_with_output +{ + local ($filename) = shift; + local ($code); + + &attach_default_output ($filename); + $code = system @_; + &detach_default_output; + if ($debug) + { + print "run_command_with_output: \"@_\" returned $code.\n"; + } + + return $code; +} + +# performs the equivalent of an "rm -rf" on the first argument. Like +# rm, if the path ends in /, leaves the (now empty) directory; otherwise +# deletes it, too. + +sub remove_directory_tree +{ + local ($targetdir) = @_; + local ($nuketop) = 1; + local ($ch); + + $ch = substr ($targetdir, length ($targetdir) - 1); + if ($ch eq "/" || $ch eq $pathsep) + { + $targetdir = substr ($targetdir, 0, length ($targetdir) - 1); + $nuketop = 0; + } + + if (! -e $targetdir) + { + return 1; + } + + &remove_directory_tree_inner ("RDT00", $targetdir) || return 0; + if ($nuketop) + { + rmdir $targetdir || return 0; + } + + return 1; +} + +sub remove_directory_tree_inner +{ + local ($dirhandle, $targetdir) = @_; + local ($object); + local ($subdirhandle); + + opendir ($dirhandle, $targetdir) || return 0; + $subdirhandle = $dirhandle; + $subdirhandle++; + while ($object = readdir ($dirhandle)) + { + if ($object =~ /^(\.\.?|CVS|RCS)$/) + { + next; + } + + $object = "$targetdir$pathsep$object"; + lstat ($object); + + if (-d _ && &remove_directory_tree_inner ($subdirhandle, $object)) + { + rmdir $object || return 0; + } + else + { + unlink $object || return 0; + } + } + closedir ($dirhandle); + return 1; +} + +# We used to use this behavior for this function: +# +#sub touch +#{ +# local (@filenames) = @_; +# local ($now) = time; +# local ($file); +# +# foreach $file (@filenames) +# { +# utime ($now, $now, $file) +# || (open (TOUCHFD, ">> $file") && close (TOUCHFD)) +# || &error ("Couldn't touch $file: $!\n", 1); +# } +# return 1; +#} +# +# But this behaves badly on networked filesystems where the time is +# skewed, because it sets the time of the file based on the _local_ +# host. Normally when you modify a file, it's the _remote_ host that +# determines the modtime, based on _its_ clock. So, instead, now we open +# the file and write something into it to force the remote host to set +# the modtime correctly according to its clock. +# + +sub touch +{ + local ($file); + + foreach $file (@_) { + (open(T, ">> $file") && print(T "\n") && close(T)) + || &error("Couldn't touch $file: $!\n", 1); + } +} + +# Touch with a time offset. To DTRT, call touch() then use stat() to get the +# access/mod time for each file and apply the offset. + +sub utouch +{ + local ($off) = shift; + local ($file); + + &touch(@_); + + local (@s) = stat($_[0]); + + utime($s[8]+$off, $s[9]+$off, @_); +} + +# open a file, write some stuff to it, and close it. + +sub create_file +{ + local ($filename, @lines) = @_; + + open (CF, "> $filename") || &error ("Couldn't open $filename: $!\n", 1); + foreach $line (@lines) + { + print CF $line; + } + close (CF); +} + +# create a directory tree described by an associative array, wherein each +# key is a relative pathname (using slashes) and its associated value is +# one of: +# DIR indicates a directory +# FILE:contents indicates a file, which should contain contents +\n +# LINK:target indicates a symlink, pointing to $basedir/target +# The first argument is the dir under which the structure will be created +# (the dir will be made and/or cleaned if necessary); the second argument +# is the associative array. + +sub create_dir_tree +{ + local ($basedir, %dirtree) = @_; + local ($path); + + &remove_directory_tree ("$basedir"); + mkdir ($basedir, 0777) || &error ("Couldn't mkdir $basedir: $!\n", 1); + + foreach $path (sort keys (%dirtree)) + { + if ($dirtree {$path} =~ /^DIR$/) + { + mkdir ("$basedir/$path", 0777) + || &error ("Couldn't mkdir $basedir/$path: $!\n", 1); + } + elsif ($dirtree {$path} =~ /^FILE:(.*)$/) + { + &create_file ("$basedir/$path", $1 . "\n"); + } + elsif ($dirtree {$path} =~ /^LINK:(.*)$/) + { + symlink ("$basedir/$1", "$basedir/$path") + || &error ("Couldn't symlink $basedir/$path -> $basedir/$1: $!\n", 1); + } + else + { + &error ("Bogus dirtree type: \"$dirtree{$path}\"\n", 1); + } + } + if ($just_setup_tree) + { + die "Tree is setup...\n"; + } +} + +# compare a directory tree with an associative array in the format used +# by create_dir_tree, above. +# The first argument is the dir under which the structure should be found; +# the second argument is the associative array. + +sub compare_dir_tree +{ + local ($basedir, %dirtree) = @_; + local ($path); + local ($i); + local ($bogus) = 0; + local ($contents); + local ($target); + local ($fulltarget); + local ($found); + local (@files); + local (@allfiles); + + opendir (DIR, $basedir) || &error ("Couldn't open $basedir: $!\n", 1); + @allfiles = grep (!/^(\.\.?|CVS|RCS)$/, readdir (DIR) ); + closedir (DIR); + if ($debug) + { + print "dirtree: (%dirtree)\n$basedir: (@allfiles)\n"; + } + + foreach $path (sort keys (%dirtree)) + { + if ($debug) + { + print "Checking $path ($dirtree{$path}).\n"; + } + + $found = 0; + foreach $i (0 .. $#allfiles) + { + if ($allfiles[$i] eq $path) + { + splice (@allfiles, $i, 1); # delete it + if ($debug) + { + print " Zapped $path; files now (@allfiles).\n"; + } + lstat ("$basedir/$path"); + $found = 1; + last; + } + } + + if (!$found) + { + print "compare_dir_tree: $path does not exist.\n"; + $bogus = 1; + next; + } + + if ($dirtree {$path} =~ /^DIR$/) + { + if (-d _ && opendir (DIR, "$basedir/$path") ) + { + @files = readdir (DIR); + closedir (DIR); + @files = grep (!/^(\.\.?|CVS|RCS)$/ && ($_ = "$path/$_"), @files); + push (@allfiles, @files); + if ($debug) + { + print " Read in $path; new files (@files).\n"; + } + } + else + { + print "compare_dir_tree: $path is not a dir.\n"; + $bogus = 1; + } + } + elsif ($dirtree {$path} =~ /^FILE:(.*)$/) + { + if (-l _ || !-f _) + { + print "compare_dir_tree: $path is not a file.\n"; + $bogus = 1; + next; + } + + if ($1 ne "*") + { + $contents = &read_file_into_string ("$basedir/$path"); + if ($contents ne "$1\n") + { + print "compare_dir_tree: $path contains wrong stuff." + . " Is:\n$contentsShould be:\n$1\n"; + $bogus = 1; + } + } + } + elsif ($dirtree {$path} =~ /^LINK:(.*)$/) + { + $target = $1; + if (!-l _) + { + print "compare_dir_tree: $path is not a link.\n"; + $bogus = 1; + next; + } + + $contents = readlink ("$basedir/$path"); + $contents =~ tr/>/\//; + $fulltarget = "$basedir/$target"; + $fulltarget =~ tr/>/\//; + if (!($contents =~ /$fulltarget$/)) + { + if ($debug) + { + $target = $fulltarget; + } + print "compare_dir_tree: $path should be link to $target, " + . "not $contents.\n"; + $bogus = 1; + } + } + else + { + &error ("Bogus dirtree type: \"$dirtree{$path}\"\n", 1); + } + } + + if ($debug) + { + print "leftovers: (@allfiles).\n"; + } + + foreach $file (@allfiles) + { + print "compare_dir_tree: $file should not exist.\n"; + $bogus = 1; + } + + return !$bogus; +} + +# this subroutine generates the numeric suffix used to keep tmp filenames, +# log filenames, etc., unique. If the number passed in is 1, then a null +# string is returned; otherwise, we return ".n", where n + 1 is the number +# we were given. + +sub num_suffix +{ + local($num) = @_; + + if (--$num > 0) { + return "$extext$num"; + } + + return ""; +} + +# This subroutine returns a log filename with a number appended to +# the end corresponding to how many logfiles have been created in the +# current running test. An optional parameter may be passed (0 or 1). +# If a 1 is passed, then it does NOT increment the logfile counter +# and returns the name of the latest logfile. If either no parameter +# is passed at all or a 0 is passed, then the logfile counter is +# incremented and the new name is returned. + +sub get_logfile +{ + local($no_increment) = @_; + + $num_of_logfiles += !$no_increment; + + return ($log_filename . &num_suffix ($num_of_logfiles)); +} + +# This subroutine returns a base (answer) filename with a number +# appended to the end corresponding to how many logfiles (and thus +# base files) have been created in the current running test. +# NO PARAMETERS ARE PASSED TO THIS SUBROUTINE. + +sub get_basefile +{ + return ($base_filename . &num_suffix ($num_of_logfiles)); +} + +# This subroutine returns a difference filename with a number appended +# to the end corresponding to how many logfiles (and thus diff files) +# have been created in the current running test. + +sub get_difffile +{ + return ($diff_filename . &num_suffix ($num_of_logfiles)); +} + +# just like logfile, only a generic tmp filename for use by the test. +# they are automatically cleaned up unless -keep was used, or the test fails. +# Pass an argument of 1 to return the same filename as the previous call. + +sub get_tmpfile +{ + local($no_increment) = @_; + + $num_of_tmpfiles += !$no_increment; + + return ($tmp_filename . &num_suffix ($num_of_tmpfiles)); +} + +1; diff --git a/src/mkutil/make/variable.c b/src/mkutil/make/variable.c new file mode 100644 index 00000000..34ab562a --- /dev/null +++ b/src/mkutil/make/variable.c @@ -0,0 +1,1421 @@ +/* Internals of variables for GNU Make. +Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, +2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "dep.h" +#include "filedef.h" +#include "job.h" +#include "commands.h" +#include "variable.h" +#include "rule.h" +#ifdef WINDOWS32 +#include "pathstuff.h" +#endif +#include "hash.h" + +/* Chain of all pattern-specific variables. */ + +static struct pattern_var *pattern_vars; + +/* Pointer to last struct in the chain, so we can add onto the end. */ + +static struct pattern_var *last_pattern_var; + +/* Create a new pattern-specific variable struct. */ + +struct pattern_var * +create_pattern_var (char *target, char *suffix) +{ + register struct pattern_var *p + = (struct pattern_var *) xmalloc (sizeof (struct pattern_var)); + + if (last_pattern_var != 0) + last_pattern_var->next = p; + else + pattern_vars = p; + last_pattern_var = p; + p->next = 0; + + p->target = target; + p->len = strlen (target); + p->suffix = suffix + 1; + + return p; +} + +/* Look up a target in the pattern-specific variable list. */ + +static struct pattern_var * +lookup_pattern_var (struct pattern_var *start, char *target) +{ + struct pattern_var *p; + unsigned int targlen = strlen(target); + + for (p = start ? start->next : pattern_vars; p != 0; p = p->next) + { + char *stem; + unsigned int stemlen; + + if (p->len > targlen) + /* It can't possibly match. */ + continue; + + /* From the lengths of the filename and the pattern parts, + find the stem: the part of the filename that matches the %. */ + stem = target + (p->suffix - p->target - 1); + stemlen = targlen - p->len + 1; + + /* Compare the text in the pattern before the stem, if any. */ + if (stem > target && !strneq (p->target, target, stem - target)) + continue; + + /* Compare the text in the pattern after the stem, if any. + We could test simply using streq, but this way we compare the + first two characters immediately. This saves time in the very + common case where the first character matches because it is a + period. */ + if (*p->suffix == stem[stemlen] + && (*p->suffix == '\0' || streq (&p->suffix[1], &stem[stemlen+1]))) + break; + } + + return p; +} + +/* Hash table of all global variable definitions. */ + +static unsigned long +variable_hash_1 (const void *keyv) +{ + struct variable const *key = (struct variable const *) keyv; + return_STRING_N_HASH_1 (key->name, key->length); +} + +static unsigned long +variable_hash_2 (const void *keyv) +{ + struct variable const *key = (struct variable const *) keyv; + return_STRING_N_HASH_2 (key->name, key->length); +} + +static int +variable_hash_cmp (const void *xv, const void *yv) +{ + struct variable const *x = (struct variable const *) xv; + struct variable const *y = (struct variable const *) yv; + int result = x->length - y->length; + if (result) + return result; + return_STRING_N_COMPARE (x->name, y->name, x->length); +} + +#ifndef VARIABLE_BUCKETS +#define VARIABLE_BUCKETS 523 +#endif +#ifndef PERFILE_VARIABLE_BUCKETS +#define PERFILE_VARIABLE_BUCKETS 23 +#endif +#ifndef SMALL_SCOPE_VARIABLE_BUCKETS +#define SMALL_SCOPE_VARIABLE_BUCKETS 13 +#endif + +static struct variable_set global_variable_set; +static struct variable_set_list global_setlist + = { 0, &global_variable_set }; +struct variable_set_list *current_variable_set_list = &global_setlist; + +/* Implement variables. */ + +void +init_hash_global_variable_set (void) +{ + hash_init (&global_variable_set.table, VARIABLE_BUCKETS, + variable_hash_1, variable_hash_2, variable_hash_cmp); +} + +/* Define variable named NAME with value VALUE in SET. VALUE is copied. + LENGTH is the length of NAME, which does not need to be null-terminated. + ORIGIN specifies the origin of the variable (makefile, command line + or environment). + If RECURSIVE is nonzero a flag is set in the variable saying + that it should be recursively re-expanded. */ + +struct variable * +define_variable_in_set (const char *name, unsigned int length, + char *value, enum variable_origin origin, + int recursive, struct variable_set *set, + const struct floc *flocp) +{ + struct variable *v; + struct variable **var_slot; + struct variable var_key; + + if (set == NULL) + set = &global_variable_set; + + var_key.name = (char *) name; + var_key.length = length; + var_slot = (struct variable **) hash_find_slot (&set->table, &var_key); + + if (env_overrides && origin == o_env) + origin = o_env_override; + + v = *var_slot; + if (! HASH_VACANT (v)) + { + if (env_overrides && v->origin == o_env) + /* V came from in the environment. Since it was defined + before the switches were parsed, it wasn't affected by -e. */ + v->origin = o_env_override; + + /* A variable of this name is already defined. + If the old definition is from a stronger source + than this one, don't redefine it. */ + if ((int) origin >= (int) v->origin) + { + if (v->value != 0) + free (v->value); + v->value = xstrdup (value); + if (flocp != 0) + v->fileinfo = *flocp; + else + v->fileinfo.filenm = 0; + v->origin = origin; + v->recursive = recursive; + } + return v; + } + + /* Create a new variable definition and add it to the hash table. */ + + v = (struct variable *) xmalloc (sizeof (struct variable)); + v->name = savestring (name, length); + v->length = length; + hash_insert_at (&set->table, v, var_slot); + v->value = xstrdup (value); + if (flocp != 0) + v->fileinfo = *flocp; + else + v->fileinfo.filenm = 0; + v->origin = origin; + v->recursive = recursive; + v->special = 0; + v->expanding = 0; + v->exp_count = 0; + v->per_target = 0; + v->append = 0; + v->export = v_default; + + v->exportable = 1; + if (*name != '_' && (*name < 'A' || *name > 'Z') + && (*name < 'a' || *name > 'z')) + v->exportable = 0; + else + { + for (++name; *name != '\0'; ++name) + if (*name != '_' && (*name < 'a' || *name > 'z') + && (*name < 'A' || *name > 'Z') && !ISDIGIT(*name)) + break; + + if (*name != '\0') + v->exportable = 0; + } + + return v; +} + +/* If the variable passed in is "special", handle its special nature. + Currently there are two such variables, both used for introspection: + .VARIABLES expands to a list of all the variables defined in this instance + of make. + .TARGETS expands to a list of all the targets defined in this + instance of make. + Returns the variable reference passed in. */ + +#define EXPANSION_INCREMENT(_l) ((((_l) / 500) + 1) * 500) + +static struct variable * +handle_special_var (struct variable *var) +{ + static unsigned long last_var_count = 0; + + + /* This one actually turns out to be very hard, due to the way the parser + records targets. The way it works is that target information is collected + internally until make knows the target is completely specified. It unitl + it sees that some new construct (a new target or variable) is defined that + it knows the previous one is done. In short, this means that if you do + this: + + all: + + TARGS := $(.TARGETS) + + then $(TARGS) won't contain "all", because it's not until after the + variable is created that the previous target is completed. + + Changing this would be a major pain. I think a less complex way to do it + would be to pre-define the target files as soon as the first line is + parsed, then come back and do the rest of the definition as now. That + would allow $(.TARGETS) to be correct without a major change to the way + the parser works. + + if (streq (var->name, ".TARGETS")) + var->value = build_target_list (var->value); + else + */ + + if (streq (var->name, ".VARIABLES") + && global_variable_set.table.ht_fill != last_var_count) + { + unsigned long max = EXPANSION_INCREMENT (strlen (var->value)); + unsigned long len; + char *p; + struct variable **vp = (struct variable **) global_variable_set.table.ht_vec; + struct variable **end = &vp[global_variable_set.table.ht_size]; + + /* Make sure we have at least MAX bytes in the allocated buffer. */ + var->value = xrealloc (var->value, max); + + /* Walk through the hash of variables, constructing a list of names. */ + p = var->value; + len = 0; + for (; vp < end; ++vp) + if (!HASH_VACANT (*vp)) + { + struct variable *v = *vp; + int l = v->length; + + len += l + 1; + if (len > max) + { + unsigned long off = p - var->value; + + max += EXPANSION_INCREMENT (l + 1); + var->value = xrealloc (var->value, max); + p = &var->value[off]; + } + + bcopy (v->name, p, l); + p += l; + *(p++) = ' '; + } + *(p-1) = '\0'; + + /* Remember how many variables are in our current count. Since we never + remove variables from the list, this is a reliable way to know whether + the list is up to date or needs to be recomputed. */ + + last_var_count = global_variable_set.table.ht_fill; + } + + return var; +} + + +/* Lookup a variable whose name is a string starting at NAME + and with LENGTH chars. NAME need not be null-terminated. + Returns address of the `struct variable' containing all info + on the variable, or nil if no such variable is defined. */ + +struct variable * +lookup_variable (const char *name, unsigned int length) +{ + const struct variable_set_list *setlist; + struct variable var_key; + + var_key.name = (char *) name; + var_key.length = length; + + for (setlist = current_variable_set_list; + setlist != 0; setlist = setlist->next) + { + const struct variable_set *set = setlist->set; + struct variable *v; + + v = (struct variable *) hash_find_item ((struct hash_table *) &set->table, &var_key); + if (v) + return v->special ? handle_special_var (v) : v; + } + +#ifdef VMS + /* since we don't read envp[] on startup, try to get the + variable via getenv() here. */ + { + char *vname = alloca (length + 1); + char *value; + strncpy (vname, name, length); + vname[length] = 0; + value = getenv (vname); + if (value != 0) + { + char *sptr; + int scnt; + + sptr = value; + scnt = 0; + + while ((sptr = strchr (sptr, '$'))) + { + scnt++; + sptr++; + } + + if (scnt > 0) + { + char *nvalue; + char *nptr; + + nvalue = alloca (strlen (value) + scnt + 1); + sptr = value; + nptr = nvalue; + + while (*sptr) + { + if (*sptr == '$') + { + *nptr++ = '$'; + *nptr++ = '$'; + } + else + { + *nptr++ = *sptr; + } + sptr++; + } + + *nptr = '\0'; + return define_variable (vname, length, nvalue, o_env, 1); + + } + + return define_variable (vname, length, value, o_env, 1); + } + } +#endif /* VMS */ + + return 0; +} + +/* Lookup a variable whose name is a string starting at NAME + and with LENGTH chars in set SET. NAME need not be null-terminated. + Returns address of the `struct variable' containing all info + on the variable, or nil if no such variable is defined. */ + +struct variable * +lookup_variable_in_set (const char *name, unsigned int length, + const struct variable_set *set) +{ + struct variable var_key; + + var_key.name = (char *) name; + var_key.length = length; + + return (struct variable *) hash_find_item ((struct hash_table *) &set->table, &var_key); +} + +/* Initialize FILE's variable set list. If FILE already has a variable set + list, the topmost variable set is left intact, but the the rest of the + chain is replaced with FILE->parent's setlist. If FILE is a double-colon + rule, then we will use the "root" double-colon target's variable set as the + parent of FILE's variable set. + + If we're READing a makefile, don't do the pattern variable search now, + since the pattern variable might not have been defined yet. */ + +void +initialize_file_variables (struct file *file, int reading) +{ + register struct variable_set_list *l = file->variables; + + if (l == 0) + { + l = (struct variable_set_list *) + xmalloc (sizeof (struct variable_set_list)); + l->set = (struct variable_set *) xmalloc (sizeof (struct variable_set)); + hash_init (&l->set->table, PERFILE_VARIABLE_BUCKETS, + variable_hash_1, variable_hash_2, variable_hash_cmp); + file->variables = l; + } + + /* If this is a double-colon, then our "parent" is the "root" target for + this double-colon rule. Since that rule has the same name, parent, + etc. we can just use its variables as the "next" for ours. */ + + if (file->double_colon && file->double_colon != file) + { + initialize_file_variables (file->double_colon, reading); + l->next = file->double_colon->variables; + return; + } + + if (file->parent == 0) + l->next = &global_setlist; + else + { + initialize_file_variables (file->parent, reading); + l->next = file->parent->variables; + } + + /* If we're not reading makefiles and we haven't looked yet, see if + we can find pattern variables for this target. */ + + if (!reading && !file->pat_searched) + { + struct pattern_var *p; + + p = lookup_pattern_var (0, file->name); + if (p != 0) + { + struct variable_set_list *global = current_variable_set_list; + + /* We found at least one. Set up a new variable set to accumulate + all the pattern variables that match this target. */ + + file->pat_variables = create_new_variable_set (); + current_variable_set_list = file->pat_variables; + + do + /* We found one, so insert it into the set. */ + do_variable_definition (&p->variable.fileinfo, p->variable.name, + p->variable.value, p->variable.origin, + p->variable.flavor, 1); + while ((p = lookup_pattern_var (p, file->name)) != 0); + + current_variable_set_list = global; + } + file->pat_searched = 1; + } + + /* If we have a pattern variable match, set it up. */ + + if (file->pat_variables != 0) + { + file->pat_variables->next = l->next; + l->next = file->pat_variables; + } +} + +/* Pop the top set off the current variable set list, + and free all its storage. */ + +static void +free_variable_name_and_value (const void *item) +{ + struct variable *v = (struct variable *) item; + free (v->name); + free (v->value); +} + +void +pop_variable_scope (void) +{ + struct variable_set_list *setlist = current_variable_set_list; + struct variable_set *set = setlist->set; + + current_variable_set_list = setlist->next; + free ((char *) setlist); + + hash_map (&set->table, free_variable_name_and_value); + hash_free (&set->table, 1); + + free ((char *) set); +} + +struct variable_set_list * +create_new_variable_set (void) +{ + register struct variable_set_list *setlist; + register struct variable_set *set; + + set = (struct variable_set *) xmalloc (sizeof (struct variable_set)); + hash_init (&set->table, SMALL_SCOPE_VARIABLE_BUCKETS, + variable_hash_1, variable_hash_2, variable_hash_cmp); + + setlist = (struct variable_set_list *) + xmalloc (sizeof (struct variable_set_list)); + setlist->set = set; + setlist->next = current_variable_set_list; + + return setlist; +} + +/* Create a new variable set and push it on the current setlist. */ + +struct variable_set_list * +push_new_variable_scope (void) +{ + return (current_variable_set_list = create_new_variable_set()); +} + +/* Merge FROM_SET into TO_SET, freeing unused storage in FROM_SET. */ + +static void +merge_variable_sets (struct variable_set *to_set, + struct variable_set *from_set) +{ + struct variable **from_var_slot = (struct variable **) from_set->table.ht_vec; + struct variable **from_var_end = from_var_slot + from_set->table.ht_size; + + for ( ; from_var_slot < from_var_end; from_var_slot++) + if (! HASH_VACANT (*from_var_slot)) + { + struct variable *from_var = *from_var_slot; + struct variable **to_var_slot + = (struct variable **) hash_find_slot (&to_set->table, *from_var_slot); + if (HASH_VACANT (*to_var_slot)) + hash_insert_at (&to_set->table, from_var, to_var_slot); + else + { + /* GKM FIXME: delete in from_set->table */ + free (from_var->value); + free (from_var); + } + } +} + +/* Merge SETLIST1 into SETLIST0, freeing unused storage in SETLIST1. */ + +void +merge_variable_set_lists (struct variable_set_list **setlist0, + struct variable_set_list *setlist1) +{ + register struct variable_set_list *list0 = *setlist0; + struct variable_set_list *last0 = 0; + + while (setlist1 != 0 && list0 != 0) + { + struct variable_set_list *next = setlist1; + setlist1 = setlist1->next; + + merge_variable_sets (list0->set, next->set); + + last0 = list0; + list0 = list0->next; + } + + if (setlist1 != 0) + { + if (last0 == 0) + *setlist0 = setlist1; + else + last0->next = setlist1; + } +} + +/* Define the automatic variables, and record the addresses + of their structures so we can change their values quickly. */ + +void +define_automatic_variables (void) +{ +#if defined(WINDOWS32) || defined(__EMX__) + extern char* default_shell; +#else + extern char default_shell[]; +#endif + register struct variable *v; + char buf[200]; + + sprintf (buf, "%u", makelevel); + (void) define_variable (MAKELEVEL_NAME, MAKELEVEL_LENGTH, buf, o_env, 0); + + sprintf (buf, "%s%s%s", + version_string, + (remote_description == 0 || remote_description[0] == '\0') + ? "" : "-", + (remote_description == 0 || remote_description[0] == '\0') + ? "" : remote_description); + (void) define_variable ("MAKE_VERSION", 12, buf, o_default, 0); + +#ifdef __MSDOS__ + /* Allow to specify a special shell just for Make, + and use $COMSPEC as the default $SHELL when appropriate. */ + { + static char shell_str[] = "SHELL"; + const int shlen = sizeof (shell_str) - 1; + struct variable *mshp = lookup_variable ("MAKESHELL", 9); + struct variable *comp = lookup_variable ("COMSPEC", 7); + + /* Make $MAKESHELL override $SHELL even if -e is in effect. */ + if (mshp) + (void) define_variable (shell_str, shlen, + mshp->value, o_env_override, 0); + else if (comp) + { + /* $COMSPEC shouldn't override $SHELL. */ + struct variable *shp = lookup_variable (shell_str, shlen); + + if (!shp) + (void) define_variable (shell_str, shlen, comp->value, o_env, 0); + } + } +#elif defined(__EMX__) + { + static char shell_str[] = "SHELL"; + const int shlen = sizeof (shell_str) - 1; + struct variable *shell = lookup_variable (shell_str, shlen); + struct variable *replace = lookup_variable ("MAKESHELL", 9); + + /* if $MAKESHELL is defined in the environment assume o_env_override */ + if (replace && *replace->value && replace->origin == o_env) + replace->origin = o_env_override; + + /* if $MAKESHELL is not defined use $SHELL but only if the variable + did not come from the environment */ + if (!replace || !*replace->value) + if (shell && *shell->value && (shell->origin == o_env + || shell->origin == o_env_override)) + { + /* overwrite whatever we got from the environment */ + free(shell->value); + shell->value = xstrdup (default_shell); + shell->origin = o_default; + } + + /* Some people do not like cmd to be used as the default + if $SHELL is not defined in the Makefile. + With -DNO_CMD_DEFAULT you can turn off this behaviour */ +# ifndef NO_CMD_DEFAULT + /* otherwise use $COMSPEC */ + if (!replace || !*replace->value) + replace = lookup_variable ("COMSPEC", 7); + + /* otherwise use $OS2_SHELL */ + if (!replace || !*replace->value) + replace = lookup_variable ("OS2_SHELL", 9); +# else +# warning NO_CMD_DEFAULT: GNU make will not use CMD.EXE as default shell +# endif + + if (replace && *replace->value) + /* overwrite $SHELL */ + (void) define_variable (shell_str, shlen, replace->value, + replace->origin, 0); + else + /* provide a definition if there is none */ + (void) define_variable (shell_str, shlen, default_shell, + o_default, 0); + } + +#endif + + /* This won't override any definition, but it + will provide one if there isn't one there. */ + v = define_variable ("SHELL", 5, default_shell, o_default, 0); + v->export = v_export; /* Always export SHELL. */ + + /* On MSDOS we do use SHELL from environment, since + it isn't a standard environment variable on MSDOS, + so whoever sets it, does that on purpose. + On OS/2 we do not use SHELL from environment but + we have already handled that problem above. */ +#if !defined(__MSDOS__) && !defined(__EMX__) + /* Don't let SHELL come from the environment. */ + if (*v->value == '\0' || v->origin == o_env || v->origin == o_env_override) + { + free (v->value); + v->origin = o_file; + v->value = xstrdup (default_shell); + } +#endif + + /* Make sure MAKEFILES gets exported if it is set. */ + v = define_variable ("MAKEFILES", 9, "", o_default, 0); + v->export = v_ifset; + + /* Define the magic D and F variables in terms of + the automatic variables they are variations of. */ + +#ifdef VMS + define_variable ("@D", 2, "$(dir $@)", o_automatic, 1); + define_variable ("%D", 2, "$(dir $%)", o_automatic, 1); + define_variable ("*D", 2, "$(dir $*)", o_automatic, 1); + define_variable ("variables; + + hash_init (&table, VARIABLE_BUCKETS, + variable_hash_1, variable_hash_2, variable_hash_cmp); + + /* Run through all the variable sets in the list, + accumulating variables in TABLE. */ + for (s = set_list; s != 0; s = s->next) + { + struct variable_set *set = s->set; + v_slot = (struct variable **) set->table.ht_vec; + v_end = v_slot + set->table.ht_size; + for ( ; v_slot < v_end; v_slot++) + if (! HASH_VACANT (*v_slot)) + { + struct variable **new_slot; + struct variable *v = *v_slot; + + /* If this is a per-target variable and it hasn't been touched + already then look up the global version and take its export + value. */ + if (v->per_target && v->export == v_default) + { + struct variable *gv; + + gv = lookup_variable_in_set (v->name, strlen(v->name), + &global_variable_set); + if (gv) + v->export = gv->export; + } + + switch (v->export) + { + case v_default: + if (v->origin == o_default || v->origin == o_automatic) + /* Only export default variables by explicit request. */ + continue; + + /* The variable doesn't have a name that can be exported. */ + if (! v->exportable) + continue; + + if (! export_all_variables + && v->origin != o_command + && v->origin != o_env && v->origin != o_env_override) + continue; + break; + + case v_export: + break; + + case v_noexport: + continue; + + case v_ifset: + if (v->origin == o_default) + continue; + break; + } + + new_slot = (struct variable **) hash_find_slot (&table, v); + if (HASH_VACANT (*new_slot)) + hash_insert_at (&table, v, new_slot); + } + } + + makelevel_key.name = MAKELEVEL_NAME; + makelevel_key.length = MAKELEVEL_LENGTH; + hash_delete (&table, &makelevel_key); + + result = result_0 = (char **) xmalloc ((table.ht_fill + 2) * sizeof (char *)); + + v_slot = (struct variable **) table.ht_vec; + v_end = v_slot + table.ht_size; + for ( ; v_slot < v_end; v_slot++) + if (! HASH_VACANT (*v_slot)) + { + struct variable *v = *v_slot; + + /* If V is recursively expanded and didn't come from the environment, + expand its value. If it came from the environment, it should + go back into the environment unchanged. */ + if (v->recursive + && v->origin != o_env && v->origin != o_env_override) + { + char *value = recursively_expand_for_file (v, file); +#ifdef WINDOWS32 + if (strcmp(v->name, "Path") == 0 || + strcmp(v->name, "PATH") == 0) + convert_Path_to_windows32(value, ';'); +#endif + *result++ = concat (v->name, "=", value); + free (value); + } + else + { +#ifdef WINDOWS32 + if (strcmp(v->name, "Path") == 0 || + strcmp(v->name, "PATH") == 0) + convert_Path_to_windows32(v->value, ';'); +#endif + *result++ = concat (v->name, "=", v->value); + } + } + + *result = (char *) xmalloc (100); + (void) sprintf (*result, "%s=%u", MAKELEVEL_NAME, makelevel + 1); + *++result = 0; + + hash_free (&table, 0); + + return result_0; +} + +/* Given a variable, a value, and a flavor, define the variable. + See the try_variable_definition() function for details on the parameters. */ + +struct variable * +do_variable_definition (const struct floc *flocp, const char *varname, + char *value, enum variable_origin origin, + enum variable_flavor flavor, int target_var) +{ + char *p, *alloc_value = NULL; + struct variable *v; + int append = 0; + int conditional = 0; + + /* Calculate the variable's new value in VALUE. */ + + switch (flavor) + { + default: + case f_bogus: + /* Should not be possible. */ + abort (); + case f_simple: + /* A simple variable definition "var := value". Expand the value. + We have to allocate memory since otherwise it'll clobber the + variable buffer, and we may still need that if we're looking at a + target-specific variable. */ + p = alloc_value = allocated_variable_expand (value); + break; + case f_conditional: + /* A conditional variable definition "var ?= value". + The value is set IFF the variable is not defined yet. */ + v = lookup_variable (varname, strlen (varname)); + if (v) + return v; + + conditional = 1; + flavor = f_recursive; + /* FALLTHROUGH */ + case f_recursive: + /* A recursive variable definition "var = value". + The value is used verbatim. */ + p = value; + break; + case f_append: + { + /* If we have += but we're in a target variable context, we want to + append only with other variables in the context of this target. */ + if (target_var) + { + append = 1; + v = lookup_variable_in_set (varname, strlen (varname), + current_variable_set_list->set); + } + else + v = lookup_variable (varname, strlen (varname)); + + if (v == 0) + { + /* There was no old value. + This becomes a normal recursive definition. */ + p = value; + flavor = f_recursive; + } + else + { + /* Paste the old and new values together in VALUE. */ + + unsigned int oldlen, vallen; + char *val; + + val = value; + if (v->recursive) + /* The previous definition of the variable was recursive. + The new value is the unexpanded old and new values. */ + flavor = f_recursive; + else + /* The previous definition of the variable was simple. + The new value comes from the old value, which was expanded + when it was set; and from the expanded new value. Allocate + memory for the expansion as we may still need the rest of the + buffer if we're looking at a target-specific variable. */ + val = alloc_value = allocated_variable_expand (val); + + oldlen = strlen (v->value); + vallen = strlen (val); + p = (char *) alloca (oldlen + 1 + vallen + 1); + bcopy (v->value, p, oldlen); + p[oldlen] = ' '; + bcopy (val, &p[oldlen + 1], vallen + 1); + } + } + } + +#ifdef __MSDOS__ + /* Many Unix Makefiles include a line saying "SHELL=/bin/sh", but + non-Unix systems don't conform to this default configuration (in + fact, most of them don't even have `/bin'). On the other hand, + $SHELL in the environment, if set, points to the real pathname of + the shell. + Therefore, we generally won't let lines like "SHELL=/bin/sh" from + the Makefile override $SHELL from the environment. But first, we + look for the basename of the shell in the directory where SHELL= + points, and along the $PATH; if it is found in any of these places, + we define $SHELL to be the actual pathname of the shell. Thus, if + you have bash.exe installed as d:/unix/bash.exe, and d:/unix is on + your $PATH, then SHELL=/usr/local/bin/bash will have the effect of + defining SHELL to be "d:/unix/bash.exe". */ + if ((origin == o_file || origin == o_override) + && strcmp (varname, "SHELL") == 0) + { + char shellpath[PATH_MAX]; + extern char * __dosexec_find_on_path (const char *, char *[], char *); + + /* See if we can find "/bin/sh.exe", "/bin/sh.com", etc. */ + if (__dosexec_find_on_path (p, (char **)0, shellpath)) + { + char *p; + + for (p = shellpath; *p; p++) + { + if (*p == '\\') + *p = '/'; + } + v = define_variable_loc (varname, strlen (varname), + shellpath, origin, flavor == f_recursive, + flocp); + } + else + { + char *shellbase, *bslash; + struct variable *pathv = lookup_variable ("PATH", 4); + char *path_string; + char *fake_env[2]; + size_t pathlen = 0; + + shellbase = strrchr (p, '/'); + bslash = strrchr (p, '\\'); + if (!shellbase || bslash > shellbase) + shellbase = bslash; + if (!shellbase && p[1] == ':') + shellbase = p + 1; + if (shellbase) + shellbase++; + else + shellbase = p; + + /* Search for the basename of the shell (with standard + executable extensions) along the $PATH. */ + if (pathv) + pathlen = strlen (pathv->value); + path_string = (char *)xmalloc (5 + pathlen + 2 + 1); + /* On MSDOS, current directory is considered as part of $PATH. */ + sprintf (path_string, "PATH=.;%s", pathv ? pathv->value : ""); + fake_env[0] = path_string; + fake_env[1] = (char *)0; + if (__dosexec_find_on_path (shellbase, fake_env, shellpath)) + { + char *p; + + for (p = shellpath; *p; p++) + { + if (*p == '\\') + *p = '/'; + } + v = define_variable_loc (varname, strlen (varname), + shellpath, origin, + flavor == f_recursive, flocp); + } + else + v = lookup_variable (varname, strlen (varname)); + + free (path_string); + } + } + else +#endif /* __MSDOS__ */ +#ifdef WINDOWS32 + if ((origin == o_file || origin == o_override) && streq (varname, "SHELL")) + { + extern char *default_shell; + + /* Call shell locator function. If it returns TRUE, then + set no_default_sh_exe to indicate sh was found and + set new value for SHELL variable. */ + + if (find_and_set_default_shell (p)) + { + v = define_variable_in_set (varname, strlen (varname), default_shell, + origin, flavor == f_recursive, + (target_var + ? current_variable_set_list->set + : NULL), + flocp); + no_default_sh_exe = 0; + } + else + v = lookup_variable (varname, strlen (varname)); + } + else +#endif + + /* If we are defining variables inside an $(eval ...), we might have a + different variable context pushed, not the global context (maybe we're + inside a $(call ...) or something. Since this function is only ever + invoked in places where we want to define globally visible variables, + make sure we define this variable in the global set. */ + + v = define_variable_in_set (varname, strlen (varname), p, + origin, flavor == f_recursive, + (target_var + ? current_variable_set_list->set : NULL), + flocp); + v->append = append; + v->conditional = conditional; + + if (alloc_value) + free (alloc_value); + + return v; +} + +/* Try to interpret LINE (a null-terminated string) as a variable definition. + + ORIGIN may be o_file, o_override, o_env, o_env_override, + or o_command specifying that the variable definition comes + from a makefile, an override directive, the environment with + or without the -e switch, or the command line. + + See the comments for parse_variable_definition(). + + If LINE was recognized as a variable definition, a pointer to its `struct + variable' is returned. If LINE is not a variable definition, NULL is + returned. */ + +struct variable * +parse_variable_definition (struct variable *v, char *line) +{ + register int c; + register char *p = line; + register char *beg; + register char *end; + enum variable_flavor flavor = f_bogus; + char *name; + + while (1) + { + c = *p++; + if (c == '\0' || c == '#') + return 0; + if (c == '=') + { + end = p - 1; + flavor = f_recursive; + break; + } + else if (c == ':') + if (*p == '=') + { + end = p++ - 1; + flavor = f_simple; + break; + } + else + /* A colon other than := is a rule line, not a variable defn. */ + return 0; + else if (c == '+' && *p == '=') + { + end = p++ - 1; + flavor = f_append; + break; + } + else if (c == '?' && *p == '=') + { + end = p++ - 1; + flavor = f_conditional; + break; + } + else if (c == '$') + { + /* This might begin a variable expansion reference. Make sure we + don't misrecognize chars inside the reference as =, := or +=. */ + char closeparen; + int count; + c = *p++; + if (c == '(') + closeparen = ')'; + else if (c == '{') + closeparen = '}'; + else + continue; /* Nope. */ + + /* P now points past the opening paren or brace. + Count parens or braces until it is matched. */ + count = 0; + for (; *p != '\0'; ++p) + { + if (*p == c) + ++count; + else if (*p == closeparen && --count < 0) + { + ++p; + break; + } + } + } + } + v->flavor = flavor; + + beg = next_token (line); + while (end > beg && isblank ((unsigned char)end[-1])) + --end; + p = next_token (p); + v->value = p; + + /* Expand the name, so "$(foo)bar = baz" works. */ + name = (char *) alloca (end - beg + 1); + bcopy (beg, name, end - beg); + name[end - beg] = '\0'; + v->name = allocated_variable_expand (name); + + if (v->name[0] == '\0') + fatal (&v->fileinfo, _("empty variable name")); + + return v; +} + +/* Try to interpret LINE (a null-terminated string) as a variable definition. + + ORIGIN may be o_file, o_override, o_env, o_env_override, + or o_command specifying that the variable definition comes + from a makefile, an override directive, the environment with + or without the -e switch, or the command line. + + See the comments for parse_variable_definition(). + + If LINE was recognized as a variable definition, a pointer to its `struct + variable' is returned. If LINE is not a variable definition, NULL is + returned. */ + +struct variable * +try_variable_definition (const struct floc *flocp, char *line, + enum variable_origin origin, int target_var) +{ + struct variable v; + struct variable *vp; + + if (flocp != 0) + v.fileinfo = *flocp; + else + v.fileinfo.filenm = 0; + + if (!parse_variable_definition (&v, line)) + return 0; + + vp = do_variable_definition (flocp, v.name, v.value, + origin, v.flavor, target_var); + + free (v.name); + + return vp; +} + +/* Print information for variable V, prefixing it with PREFIX. */ + +static void +print_variable (const void *item, void *arg) +{ + const struct variable *v = (struct variable *) item; + const char *prefix = (char *) arg; + const char *origin; + + switch (v->origin) + { + case o_default: + origin = _("default"); + break; + case o_env: + origin = _("environment"); + break; + case o_file: + origin = _("makefile"); + break; + case o_env_override: + origin = _("environment under -e"); + break; + case o_command: + origin = _("command line"); + break; + case o_override: + origin = _("`override' directive"); + break; + case o_automatic: + origin = _("automatic"); + break; + case o_invalid: + default: + abort (); + } + fputs ("# ", stdout); + fputs (origin, stdout); + if (v->fileinfo.filenm) + printf (_(" (from `%s', line %lu)"), + v->fileinfo.filenm, v->fileinfo.lineno); + putchar ('\n'); + fputs (prefix, stdout); + + /* Is this a `define'? */ + if (v->recursive && strchr (v->value, '\n') != 0) + printf ("define %s\n%s\nendef\n", v->name, v->value); + else + { + register char *p; + + printf ("%s %s= ", v->name, v->recursive ? v->append ? "+" : "" : ":"); + + /* Check if the value is just whitespace. */ + p = next_token (v->value); + if (p != v->value && *p == '\0') + /* All whitespace. */ + printf ("$(subst ,,%s)", v->value); + else if (v->recursive) + fputs (v->value, stdout); + else + /* Double up dollar signs. */ + for (p = v->value; *p != '\0'; ++p) + { + if (*p == '$') + putchar ('$'); + putchar (*p); + } + putchar ('\n'); + } +} + + +/* Print all the variables in SET. PREFIX is printed before + the actual variable definitions (everything else is comments). */ + +void +print_variable_set (struct variable_set *set, char *prefix) +{ + hash_map_arg (&set->table, print_variable, prefix); + + fputs (_("# variable set hash-table stats:\n"), stdout); + fputs ("# ", stdout); + hash_print_stats (&set->table, stdout); + putc ('\n', stdout); +} + +/* Print the data base of variables. */ + +void +print_variable_data_base (void) +{ + puts (_("\n# Variables\n")); + + print_variable_set (&global_variable_set, ""); + + puts (_("\n# Pattern-specific Variable Values")); + + { + struct pattern_var *p; + int rules = 0; + + for (p = pattern_vars; p != 0; p = p->next) + { + ++rules; + printf ("\n%s :\n", p->target); + print_variable (&p->variable, "# "); + } + + if (rules == 0) + puts (_("\n# No pattern-specific variable values.")); + else + printf (_("\n# %u pattern-specific variable values"), rules); + } +} + + +/* Print all the local variables of FILE. */ + +void +print_file_variables (struct file *file) +{ + if (file->variables != 0) + print_variable_set (file->variables->set, "# "); +} + +#ifdef WINDOWS32 +void +sync_Path_environment (void) +{ + char *path = allocated_variable_expand ("$(Path)"); + static char *environ_path = NULL; + + if (!path) + return; + + /* + * If done this before, don't leak memory unnecessarily. + * Free the previous entry before allocating new one. + */ + if (environ_path) + free (environ_path); + + /* + * Create something WINDOWS32 world can grok + */ + convert_Path_to_windows32 (path, ';'); + environ_path = concat ("Path", "=", path); + putenv (environ_path); + free (path); +} +#endif diff --git a/src/mkutil/make/variable.h b/src/mkutil/make/variable.h new file mode 100644 index 00000000..613278a3 --- /dev/null +++ b/src/mkutil/make/variable.h @@ -0,0 +1,199 @@ +/* Definitions for using variables in GNU Make. +Copyright (C) 1988, 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "hash.h" + +/* Codes in a variable definition saying where the definition came from. + Increasing numeric values signify less-overridable definitions. */ +enum variable_origin + { + o_default, /* Variable from the default set. */ + o_env, /* Variable from environment. */ + o_file, /* Variable given in a makefile. */ + o_env_override, /* Variable from environment, if -e. */ + o_command, /* Variable given by user. */ + o_override, /* Variable from an `override' directive. */ + o_automatic, /* Automatic variable -- cannot be set. */ + o_invalid /* Core dump time. */ + }; + +enum variable_flavor + { + f_bogus, /* Bogus (error) */ + f_simple, /* Simple definition (:=) */ + f_recursive, /* Recursive definition (=) */ + f_append, /* Appending definition (+=) */ + f_conditional /* Conditional definition (?=) */ + }; + +/* Structure that represents one variable definition. + Each bucket of the hash table is a chain of these, + chained through `next'. */ + +#define EXP_COUNT_BITS 15 /* This gets all the bitfields into 32 bits */ +#define EXP_COUNT_MAX ((1<1, allow this many self-referential + expansions. */ + enum variable_flavor + flavor ENUM_BITFIELD (3); /* Variable flavor. */ + enum variable_origin + origin ENUM_BITFIELD (3); /* Variable origin. */ + enum variable_export + { + v_export, /* Export this variable. */ + v_noexport, /* Don't export this variable. */ + v_ifset, /* Export it if it has a non-default value. */ + v_default /* Decide in target_environment. */ + } export ENUM_BITFIELD (2); + }; + +/* Structure that represents a variable set. */ + +struct variable_set + { + struct hash_table table; /* Hash table of variables. */ + }; + +/* Structure that represents a list of variable sets. */ + +struct variable_set_list + { + struct variable_set_list *next; /* Link in the chain. */ + struct variable_set *set; /* Variable set. */ + }; + +/* Structure used for pattern-specific variables. */ + +struct pattern_var + { + struct pattern_var *next; + char *target; + unsigned int len; + char *suffix; + struct variable variable; + }; + +extern char *variable_buffer; +extern struct variable_set_list *current_variable_set_list; + +/* expand.c */ +extern char *variable_buffer_output PARAMS ((char *ptr, char *string, unsigned int length)); +extern char *variable_expand PARAMS ((char *line)); +extern char *allocated_variable_expand_for_file PARAMS ((char *line, struct file *file)); +#define allocated_variable_expand(line) \ + allocated_variable_expand_for_file (line, (struct file *) 0) +extern char *expand_argument PARAMS ((const char *str, const char *end)); +extern char *variable_expand_string PARAMS ((char *line, char *string, + long length)); +extern void install_variable_buffer PARAMS ((char **bufp, unsigned int *lenp)); +extern void restore_variable_buffer PARAMS ((char *buf, unsigned int len)); + +/* function.c */ +extern int handle_function PARAMS ((char **op, char **stringp)); +extern int pattern_matches PARAMS ((char *pattern, char *percent, char *str)); +extern char *subst_expand PARAMS ((char *o, char *text, char *subst, char *replace, + unsigned int slen, unsigned int rlen, int by_word, int suffix_only)); +extern char *patsubst_expand PARAMS ((char *o, char *text, char *pattern, char *replace, + char *pattern_percent, char *replace_percent)); + +/* expand.c */ +extern char *recursively_expand_for_file PARAMS ((struct variable *v, + struct file *file)); +#define recursively_expand(v) recursively_expand_for_file (v, NULL) + +/* variable.c */ +extern struct variable_set_list *create_new_variable_set PARAMS ((void)); +extern struct variable_set_list *push_new_variable_scope PARAMS ((void)); +extern void pop_variable_scope PARAMS ((void)); +extern void define_automatic_variables PARAMS ((void)); +extern void initialize_file_variables PARAMS ((struct file *file, int read)); +extern void print_file_variables PARAMS ((struct file *file)); +extern void print_variable_set PARAMS ((struct variable_set *set, char *prefix)); +extern void merge_variable_set_lists PARAMS ((struct variable_set_list **to_list, struct variable_set_list *from_list)); +extern struct variable *do_variable_definition PARAMS ((const struct floc *flocp, const char *name, char *value, enum variable_origin origin, enum variable_flavor flavor, int target_var)); +extern struct variable *parse_variable_definition PARAMS ((struct variable *v, char *line)); +extern struct variable *try_variable_definition PARAMS ((const struct floc *flocp, char *line, enum variable_origin origin, int target_var)); +extern void init_hash_global_variable_set PARAMS ((void)); +extern void hash_init_function_table PARAMS ((void)); +extern struct variable *lookup_variable PARAMS ((const char *name, unsigned int length)); +extern struct variable *lookup_variable_in_set PARAMS ((const char *name, + unsigned int length, + const struct variable_set *set)); + +extern struct variable *define_variable_in_set + PARAMS ((const char *name, unsigned int length, char *value, + enum variable_origin origin, int recursive, + struct variable_set *set, const struct floc *flocp)); + +/* Define a variable in the current variable set. */ + +#define define_variable(n,l,v,o,r) \ + define_variable_in_set((n),(l),(v),(o),(r),\ + current_variable_set_list->set,NILF) + +/* Define a variable with a location in the current variable set. */ + +#define define_variable_loc(n,l,v,o,r,f) \ + define_variable_in_set((n),(l),(v),(o),(r),\ + current_variable_set_list->set,(f)) + +/* Define a variable with a location in the global variable set. */ + +#define define_variable_global(n,l,v,o,r,f) \ + define_variable_in_set((n),(l),(v),(o),(r),NULL,(f)) + +/* Define a variable in FILE's variable set. */ + +#define define_variable_for_file(n,l,v,o,r,f) \ + define_variable_in_set((n),(l),(v),(o),(r),(f)->variables->set,NILF) + +/* Warn that NAME is an undefined variable. */ + +#define warn_undefined(n,l) do{\ + if (warn_undefined_variables_flag) \ + error (reading_file, \ + _("warning: undefined variable `%.*s'"), \ + (int)(l), (n)); \ + }while(0) + +extern char **target_environment PARAMS ((struct file *file)); + +extern struct pattern_var *create_pattern_var PARAMS ((char *target, char *suffix)); + +extern int export_all_variables; + +#define MAKELEVEL_NAME "MAKELEVEL" +#define MAKELEVEL_LENGTH (sizeof (MAKELEVEL_NAME) - 1) diff --git a/src/mkutil/make/version.c b/src/mkutil/make/version.c new file mode 100644 index 00000000..e400ef75 --- /dev/null +++ b/src/mkutil/make/version.c @@ -0,0 +1,17 @@ +/* We use instead of "config.h" so that a compilation + using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h + (which it would do because make.h was found in $srcdir). */ +#include + +#ifndef MAKE_HOST +# define MAKE_HOST "unknown" +#endif + +char *version_string = VERSION; +char *make_host = MAKE_HOST; + +/* + Local variables: + version-control: never + End: + */ diff --git a/src/mkutil/make/vmsdir.h b/src/mkutil/make/vmsdir.h new file mode 100644 index 00000000..59034759 --- /dev/null +++ b/src/mkutil/make/vmsdir.h @@ -0,0 +1,61 @@ +/* dirent.h for vms */ + +#ifndef VMSDIR_H +#define VMSDIR_H + +#include + +#define MAXNAMLEN 255 + +#ifndef __DECC +#if !defined (__GNUC__) && !defined (__ALPHA) +typedef unsigned long u_long; +typedef unsigned short u_short; +#endif +#endif + +struct direct +{ + off_t d_off; + u_long d_fileno; + u_short d_reclen; + u_short d_namlen; + char d_name[MAXNAMLEN + 1]; +}; + +#undef DIRSIZ +#define DIRSIZ(dp) \ + (((sizeof (struct direct) \ + - (MAXNAMLEN+1) \ + + ((dp)->d_namlen+1)) \ + + 3) & ~3) + +#define d_ino d_fileno /* compatability */ + + +/* + * Definitions for library routines operating on directories. + */ + +typedef struct DIR +{ + struct direct dir; + char d_result[MAXNAMLEN + 1]; +#if defined (__ALPHA) || defined (__DECC) + struct FAB fab; +#else + struct fabdef fab; +#endif +} DIR; + +#ifndef NULL +#define NULL 0 +#endif + +extern DIR *opendir PARAMS (()); +extern struct direct *readdir PARAMS ((DIR *dfd)); +#define rewinddir(dirp) seekdir((dirp), (long)0) +extern int closedir PARAMS ((DIR *dfd)); +extern char *vmsify PARAMS ((char *name, int type)); + +#endif /* VMSDIR_H */ diff --git a/src/mkutil/make/vmsfunctions.c b/src/mkutil/make/vmsfunctions.c new file mode 100644 index 00000000..7fdd4205 --- /dev/null +++ b/src/mkutil/make/vmsfunctions.c @@ -0,0 +1,252 @@ +/* vmsfunctions.c */ + +#include "make.h" +#include "debug.h" + +#ifdef __DECC +#include +#endif +#include +#include +#include +#include +#include +#include "vmsdir.h" + +#ifdef HAVE_VMSDIR_H + +DIR * +opendir (char *dspec) +{ + struct DIR *dir = (struct DIR *)xmalloc (sizeof (struct DIR)); + struct NAM *dnam = (struct NAM *)xmalloc (sizeof (struct NAM)); + struct FAB *dfab = &dir->fab; + char *searchspec = (char *)xmalloc (MAXNAMLEN + 1); + + memset (dir, 0, sizeof *dir); + + *dfab = cc$rms_fab; + *dnam = cc$rms_nam; + sprintf (searchspec, "%s*.*;", dspec); + + dfab->fab$l_fna = searchspec; + dfab->fab$b_fns = strlen (searchspec); + dfab->fab$l_nam = dnam; + + *dnam = cc$rms_nam; + dnam->nam$l_esa = searchspec; + dnam->nam$b_ess = MAXNAMLEN; + + if (! (sys$parse (dfab) & 1)) + { + free (dir); + free (dnam); + free (searchspec); + return (NULL); + } + + return dir; +} + +#define uppercasify(str) \ + do \ + { \ + char *tmp; \ + for (tmp = (str); *tmp != '\0'; tmp++) \ + if (islower ((unsigned char)*tmp)) \ + *tmp = toupper ((unsigned char)*tmp); \ + } \ + while (0) + +struct direct * +readdir (DIR *dir) +{ + struct FAB *dfab = &dir->fab; + struct NAM *dnam = (struct NAM *)(dfab->fab$l_nam); + struct direct *dentry = &dir->dir; + int i; + + memset (dentry, 0, sizeof *dentry); + + dnam->nam$l_rsa = dir->d_result; + dnam->nam$b_rss = MAXNAMLEN; + + DB (DB_VERBOSE, (".")); + + if (!((i = sys$search (dfab)) & 1)) + { + DB (DB_VERBOSE, (_("sys$search failed with %d\n"), i)); + return (NULL); + } + + dentry->d_off = 0; + if (dnam->nam$w_fid == 0) + dentry->d_fileno = 1; + else + dentry->d_fileno = dnam->nam$w_fid[0] + (dnam->nam$w_fid[1] << 16); + + dentry->d_reclen = sizeof (struct direct); + dentry->d_namlen = dnam->nam$b_name + dnam->nam$b_type; + strncpy (dentry->d_name, dnam->nam$l_name, dentry->d_namlen); + dentry->d_name[dentry->d_namlen] = '\0'; + uppercasify (dentry->d_name); + + return (dentry); +} + +int +closedir (DIR *dir) +{ + if (dir != NULL) + { + struct FAB *dfab = &dir->fab; + struct NAM *dnam = (struct NAM *)(dfab->fab$l_nam); + if (dnam != NULL) + free (dnam->nam$l_esa); + free (dnam); + free (dir); + } + + return 0; +} +#endif /* compiled for OpenVMS prior to V7.x */ + +char * +getwd (char *cwd) +{ + static char buf[512]; + + if (cwd) + return (getcwd (cwd, 512)); + else + return (getcwd (buf, 512)); +} + +int +vms_stat (char *name, struct stat *buf) +{ + int status; + int i; + + static struct FAB Fab; + static struct NAM Nam; + static struct fibdef Fib; /* short fib */ + static struct dsc$descriptor FibDesc = + { sizeof (Fib), DSC$K_DTYPE_Z, DSC$K_CLASS_S, (char *) &Fib }; + static struct dsc$descriptor_s DevDesc = + { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, &Nam.nam$t_dvi[1] }; + static char EName[NAM$C_MAXRSS]; + static char RName[NAM$C_MAXRSS]; + static struct dsc$descriptor_s FileName = + { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0 }; + static struct dsc$descriptor_s string = + { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0 }; + static unsigned long Rdate[2]; + static unsigned long Cdate[2]; + static struct atrdef Atr[] = + { +#if defined(VAX) + /* Revision date */ + { sizeof (Rdate), ATR$C_REVDATE, (unsigned int) &Rdate[0] }, + /* Creation date */ + { sizeof (Cdate), ATR$C_CREDATE, (unsigned int) &Cdate[0] }, +#else + /* Revision date */ + { sizeof (Rdate), ATR$C_REVDATE, &Rdate[0] }, + /* Creation date */ + { sizeof (Cdate), ATR$C_CREDATE, &Cdate[0]}, +#endif + { 0, 0, 0 } + }; + static short int DevChan; + static short int iosb[4]; + + name = vmsify (name, 0); + + /* initialize RMS structures, we need a NAM to retrieve the FID */ + Fab = cc$rms_fab; + Fab.fab$l_fna = name; /* name of file */ + Fab.fab$b_fns = strlen (name); + Fab.fab$l_nam = &Nam; /* FAB has an associated NAM */ + + Nam = cc$rms_nam; + Nam.nam$l_esa = EName; /* expanded filename */ + Nam.nam$b_ess = sizeof (EName); + Nam.nam$l_rsa = RName; /* resultant filename */ + Nam.nam$b_rss = sizeof (RName); + + /* do $PARSE and $SEARCH here */ + status = sys$parse (&Fab); + if (!(status & 1)) + return -1; + + DevDesc.dsc$w_length = Nam.nam$t_dvi[0]; + status = sys$assign (&DevDesc, &DevChan, 0, 0); + if (!(status & 1)) + return -1; + + FileName.dsc$a_pointer = Nam.nam$l_name; + FileName.dsc$w_length = Nam.nam$b_name + Nam.nam$b_type + Nam.nam$b_ver; + + /* Initialize the FIB */ + for (i = 0; i < 3; i++) + { +#ifndef __VAXC + Fib.fib$w_fid[i] = Nam.nam$w_fid[i]; + Fib.fib$w_did[i] = Nam.nam$w_did[i]; +#else + Fib.fib$r_fid_overlay.fib$w_fid[i] = Nam.nam$w_fid[i]; + Fib.fib$r_did_overlay.fib$w_did[i] = Nam.nam$w_did[i]; +#endif + } + + status = sys$qiow (0, DevChan, IO$_ACCESS, &iosb, 0, 0, + &FibDesc, &FileName, 0, 0, &Atr, 0); + sys$dassgn (DevChan); + if (!(status & 1)) + return -1; + status = iosb[0]; + if (!(status & 1)) + return -1; + + status = stat (name, buf); + if (status) + return -1; + + buf->st_mtime = ((Rdate[0] >> 24) & 0xff) + ((Rdate[1] << 8) & 0xffffff00); + buf->st_ctime = ((Cdate[0] >> 24) & 0xff) + ((Cdate[1] << 8) & 0xffffff00); + + return 0; +} + +char * +cvt_time (unsigned long tval) +{ + static long int date[2]; + static char str[27]; + static struct dsc$descriptor date_str = + { 26, DSC$K_DTYPE_T, DSC$K_CLASS_S, str }; + + date[0] = (tval & 0xff) << 24; + date[1] = ((tval >> 8) & 0xffffff); + + if ((date[0] == 0) && (date[1] == 0)) + return ("never"); + + sys$asctim (0, &date_str, date, 0); + str[26] = '\0'; + + return (str); +} + +int +strcmpi (const char *s1, const char *s2) +{ + while (*s1 != '\0' && toupper(*s1) == toupper(*s2)) + { + s1++; + s2++; + } + + return toupper(*(unsigned char *) s1) - toupper(*(unsigned char *) s2); +} diff --git a/src/mkutil/make/vmsify.c b/src/mkutil/make/vmsify.c new file mode 100644 index 00000000..a9076843 --- /dev/null +++ b/src/mkutil/make/vmsify.c @@ -0,0 +1,979 @@ +/* + vmsify.c + + Module for vms <-> unix file name conversion + + Written by Klaus Kämpf (kkaempf@progis.de) + of proGIS Software, Aachen, Germany + +*/ + +#include +#include +#include + +#if VMS +#include +#include +#include +#include +#include +#include +#include +#include +/* Initialize a string descriptor (struct dsc$descriptor_s) for an + arbitrary string. ADDR is a pointer to the first character + of the string, and LEN is the length of the string. */ + +#define INIT_DSC_S(dsc, addr, len) do { \ + (dsc).dsc$b_dtype = DSC$K_DTYPE_T; \ + (dsc).dsc$b_class = DSC$K_CLASS_S; \ + (dsc).dsc$w_length = (len); \ + (dsc).dsc$a_pointer = (addr); \ +} while (0) + +/* Initialize a string descriptor (struct dsc$descriptor_s) for a + NUL-terminated string. S is a pointer to the string; the length + is determined by calling strlen(). */ + +#define INIT_DSC_CSTRING(dsc, s) INIT_DSC_S(dsc, s, strlen(s)) +#endif + +/* + copy 'from' to 'to' up to but not including 'upto' + return 0 if eos on from + return 1 if upto found + + return 'to' at last char + 1 + return 'from' at match + 1 or eos if no match + + if as_dir == 1, change all '.' to '_' + else change all '.' but the last to '_' +*/ + +static int +copyto (char **to, char **from, char upto, int as_dir) +{ + char *s; + + s = strrchr (*from, '.'); + + while (**from) + { + if (**from == upto) + { + do + { + (*from)++; + } + while (**from == upto); + return 1; + } + if (**from == '.') + { + if ((as_dir == 1) + || (*from != s)) + **to = '_'; + else + **to = '.'; + } + else + { + if (isupper ((unsigned char)**from)) + **to = tolower ((unsigned char)**from); + else + **to = **from; + } + (*to)++; + (*from)++; + } + + return 0; +} + + +/* + get translation of logical name + +*/ + +static char * +trnlog (char *name) +{ + int stat; + static char reslt[1024]; + $DESCRIPTOR (reslt_dsc, reslt); + short resltlen; + struct dsc$descriptor_s name_dsc; + char *s; + + INIT_DSC_CSTRING (name_dsc, name); + + stat = lib$sys_trnlog (&name_dsc, &resltlen, &reslt_dsc); + + if ((stat&1) == 0) + { + return ""; + } + if (stat == SS$_NOTRAN) + { + return ""; + } + reslt[resltlen] = '\0'; + + s = (char *)malloc (resltlen+1); + if (s == 0) + return ""; + strcpy (s, reslt); + return s; +} + +static char * +showall (char *s) +{ + static char t[512]; + char *pt; + + pt = t; + if (strchr (s, '\\') == 0) + return s; + while (*s) + { + if (*s == '\\') + { + *pt++ = *s; + } + *pt++ = *s++; + } + return pt; +} + + +enum namestate { N_START, N_DEVICE, N_OPEN, N_DOT, N_CLOSED, N_DONE }; + +/* + convert unix style name to vms style + type = 0 -> name is a full name (directory and filename part) + type = 1 -> name is a directory + type = 2 -> name is a filename without directory + + The following conversions are applied + (0) (1) (2) + input full name dir name file name + +1 ./ [] .dir +2 ../ .dir + +3 // : :[000000] :000000.dir +4 //a a: a: a: +5 //a/ a: a: a:000000.dir + +9 / [000000] [000000] 000000.dir +10 /a [000000]a [a] [000000]a +11 /a/ [a] [a] [000000]a.dir +12 /a/b [a]b [a.b] [a]b +13 /a/b/ [a.b] [a.b] [a]b.dir +14 /a/b/c [a.b]c [a.b.c] [a.b]c +15 /a/b/c/ [a.b.c] [a.b.c] [a.b]c.dir + +16 a a [.a] a +17 a/ [.a] [.a] a.dir +18 a/b [.a]b [.a.b] [.a]b +19 a/b/ [.a.b] [.a.b] [.a]b.dir +20 a/b/c [.a.b]c [.a.b.c] [.a.b]c +21 a/b/c/ [.a.b.c] [.a.b.c] [.a.b]c.dir + +22 a.b.c a_b.c [.a_b_c] a_b_c.dir + +23 [x][y]z [x.y]z [x.y]z [x.y]z +24 [x][.y]z [x.y]z [x.y]z [x.y]z + +25 filenames with '$' are left unchanged if they contain no '/' +25 filenames with ':' are left unchanged +26 filenames with a single pair of '[' ']' are left unchanged + + the input string is not written to +*/ + +char * +vmsify (char *name, int type) +{ +/* max 255 device + max 39 directory + max 39 filename + max 39 filetype + max 5 version +*/ +#define MAXPATHLEN 512 + + enum namestate nstate; + static char vmsname[MAXPATHLEN+1]; + char *fptr; + char *vptr; + char *s,*s1; + int as_dir; + int count; + + if (name == 0) + return 0; + fptr = name; + vptr = vmsname; + nstate = N_START; + + /* case 25a */ + + s = strpbrk (name, "$:"); + if (s != 0) + { + char *s1; + char *s2; + + if (type == 1) + { + s1 = strchr (s+1, '['); + s2 = strchr (s+1, ']'); + } + + if (*s == '$') + { + if (strchr (name, '/') == 0) + { + if ((type == 1) && (s1 != 0) && (s2 == 0)) + { + strcpy (vmsname, name); + strcat (vmsname, "]"); + return vmsname; + } + else + return name; + } + } + else + { + if ((type == 1) && (s1 != 0) && (s2 == 0)) + { + strcpy (vmsname, name); + strcat (vmsname, "]"); + return vmsname; + } + else + return name; + } + } + + /* case 26 */ + + s = strchr (name, '['); + + if (s != 0) + { + s1 = strchr (s+1, '['); + if (s1 == 0) + { + if ((type == 1) + && (strchr (s+1, ']') == 0)) + { + strcpy (vmsname, name); + strcat (vmsname, "]"); + return vmsname; + } + else + return name; /* single [, keep unchanged */ + } + s1--; + if (*s1 != ']') + { + return name; /* not ][, keep unchanged */ + } + + /* we have ][ */ + + s = name; + + /* s -> starting char + s1 -> ending ']' */ + + do + { + strncpy (vptr, s, s1-s); /* copy up to but not including ']' */ + vptr += s1-s; + if (*s1 == 0) + break; + s = s1 + 1; /* s -> char behind ']' */ + if (*s != '[') /* was '][' ? */ + break; /* no, last ] found, exit */ + s++; + if (*s != '.') + *vptr++ = '.'; + s1 = strchr (s, ']'); + if (s1 == 0) /* no closing ] */ + s1 = s + strlen (s); + } + while (1); + + *vptr++ = ']'; + + fptr = s; + + } + + else /* no [ in name */ + + { + + int state; + int rooted = 1; /* flag if logical is rooted, else insert [000000] */ + + state = 0; + + do + { + + switch (state) + { + case 0: /* start of loop */ + if (*fptr == '/') + { + fptr++; + state = 1; + } + else if (*fptr == '.') + { + fptr++; + state = 10; + } + else + state = 2; + break; + + case 1: /* '/' at start */ + if (*fptr == '/') + { + fptr++; + state = 3; + } + else + state = 4; + break; + + case 2: /* no '/' at start */ + s = strchr (fptr, '/'); + if (s == 0) /* no '/' (16) */ + { + if (type == 1) + { + strcpy (vptr, "[."); + vptr += 2; + } + copyto (&vptr, &fptr, 0, (type==1)); + if (type == 1) + *vptr++ = ']'; + state = -1; + } + else /* found '/' (17..21) */ + { + if ((type == 2) + && (*(s+1) == 0)) /* 17(2) */ + { + copyto (&vptr, &fptr, '/', 1); + state = 7; + } + else + { + strcpy (vptr, "[."); + vptr += 2; + copyto (&vptr, &fptr, '/', 1); + nstate = N_OPEN; + state = 9; + } + } + break; + + case 3: /* '//' at start */ + while (*fptr == '/') /* collapse all '/' */ + fptr++; + if (*fptr == 0) /* just // */ + { + char cwdbuf[MAXPATHLEN+1]; + + s1 = getcwd(cwdbuf, MAXPATHLEN); + if (s1 == 0) + { + return ""; /* FIXME, err getcwd */ + } + s = strchr (s1, ':'); + if (s == 0) + { + return ""; /* FIXME, err no device */ + } + strncpy (vptr, s1, s-s1+1); + vptr += s-s1+1; + state = -1; + break; + } + + s = vptr; + + if (copyto (&vptr, &fptr, '/', 1) == 0) /* copy device part */ + { + *vptr++ = ':'; + state = -1; + break; + } + *vptr = ':'; + nstate = N_DEVICE; + if (*fptr == 0) /* just '//a/' */ + { + strcpy (vptr+1, "[000000]"); + vptr += 9; + state = -1; + break; + } + *vptr = 0; + /* check logical for [000000] insertion */ + s1 = trnlog (s); + if (*s1 != 0) + { /* found translation */ + char *s2; + for (;;) /* loop over all nested logicals */ + { + s2 = s1 + strlen (s1) - 1; + if (*s2 == ':') /* translation ends in ':' */ + { + s2 = trnlog (s1); + free (s1); + if (*s2 == 0) + { + rooted = 0; + break; + } + s1 = s2; + continue; /* next iteration */ + } + if (*s2 == ']') /* translation ends in ']' */ + { + if (*(s2-1) == '.') /* ends in '.]' */ + { + if (strncmp (fptr, "000000", 6) != 0) + rooted = 0; + } + else + { + strcpy (vmsname, s1); + s = strchr (vmsname, ']'); + *s = '.'; + nstate = N_DOT; + vptr = s; + } + } + break; + } + free (s1); + } + else + rooted = 0; + + if (*vptr == 0) + { + nstate = N_DEVICE; + *vptr++ = ':'; + } + else + vptr++; + + if (rooted == 0) + { + strcpy (vptr, "[000000."); + vptr += 8; + s1 = vptr-1; + nstate = N_DOT; + } + else + s1 = 0; + + /* s1-> '.' after 000000 or NULL */ + + s = strchr (fptr, '/'); + if (s == 0) + { /* no next '/' */ + if (*(vptr-1) == '.') + *(vptr-1) = ']'; + else if (rooted == 0) + *vptr++ = ']'; + copyto (&vptr, &fptr, 0, (type == 1)); + state = -1; + break; + } + else + { + while (*(s+1) == '/') /* skip multiple '/' */ + s++; + } + + if ((rooted != 0) + && (*(vptr-1) != '.')) + { + *vptr++ = '['; + nstate = N_DOT; + } + else + if ((nstate == N_DOT) + && (s1 != 0) + && (*(s+1) == 0)) + { + if (type == 2) + { + *s1 = ']'; + nstate = N_CLOSED; + } + } + state = 9; + break; + + case 4: /* single '/' at start (9..15) */ + if (*fptr == 0) + state = 5; + else + state = 6; + break; + + case 5: /* just '/' at start (9) */ + if (type != 2) + { + *vptr++ = '['; + nstate = N_OPEN; + } + strcpy (vptr, "000000"); + vptr += 6; + if (type == 2) + state = 7; + else + state = 8; + break; + + case 6: /* chars following '/' at start 10..15 */ + *vptr++ = '['; + nstate = N_OPEN; + s = strchr (fptr, '/'); + if (s == 0) /* 10 */ + { + if (type != 1) + { + strcpy (vptr, "000000]"); + vptr += 7; + } + copyto (&vptr, &fptr, 0, (type == 1)); + if (type == 1) + { + *vptr++ = ']'; + } + state = -1; + } + else /* 11..15 */ + { + if ( (type == 2) + && (*(s+1) == 0)) /* 11(2) */ + { + strcpy (vptr, "000000]"); + nstate = N_CLOSED; + vptr += 7; + } + copyto (&vptr, &fptr, '/', (*(vptr-1) != ']')); + state = 9; + } + break; + + case 7: /* add '.dir' and exit */ + if ((nstate == N_OPEN) + || (nstate == N_DOT)) + { + s = vptr-1; + while (s > vmsname) + { + if (*s == ']') + { + break; + } + if (*s == '.') + { + *s = ']'; + break; + } + s--; + } + } + strcpy (vptr, ".dir"); + vptr += 4; + state = -1; + break; + + case 8: /* add ']' and exit */ + *vptr++ = ']'; + state = -1; + break; + + case 9: /* 17..21, fptr -> 1st '/' + 1 */ + if (*fptr == 0) + { + if (type == 2) + { + state = 7; + } + else + state = 8; + break; + } + s = strchr (fptr, '/'); + if (s == 0) + { + if (type != 1) + { + if (nstate == N_OPEN) + { + *vptr++ = ']'; + nstate = N_CLOSED; + } + as_dir = 0; + } + else + { + if (nstate == N_OPEN) + { + *vptr++ = '.'; + nstate = N_DOT; + } + as_dir = 1; + } + } + else + { + while (*(s+1) == '/') + s++; + if ( (type == 2) + && (*(s+1) == 0)) /* 19(2), 21(2)*/ + { + if (nstate != N_CLOSED) + { + *vptr++ = ']'; + nstate = N_CLOSED; + } + as_dir = 1; + } + else + { + if (nstate == N_OPEN) + { + *vptr++ = '.'; + nstate = N_DOT; + } + as_dir = 1; + } + } + if ( (*fptr == '.') /* check for '..' or '../' */ + && (*(fptr+1) == '.') + && ((*(fptr+2) == '/') + || (*(fptr+2) == 0)) ) + { + fptr += 2; + if (*fptr == '/') + { + do + { + fptr++; + } + while (*fptr == '/'); + } + else if (*fptr == 0) + type = 1; + vptr--; /* vptr -> '.' or ']' */ + s1 = vptr; + for (;;) + { + s1--; + if (*s1 == '.') /* one back */ + { + vptr = s1; + nstate = N_OPEN; + break; + } + if (*s1 == '[') /* top level reached */ + { + if (*fptr == 0) + { + strcpy (s1, "[000000]"); + vptr = s1 + 8; + nstate = N_CLOSED; + s = 0; + break; + } + else + { + vptr = s1+1; + nstate = N_OPEN; + break; + } + } + } + } + else + { + copyto (&vptr, &fptr, '/', as_dir); + if (nstate == N_DOT) + nstate = N_OPEN; + } + if (s == 0) + { /* 18,20 */ + if (type == 1) + *vptr++ = ']'; + state = -1; + } + else + { + if (*(s+1) == 0) + { + if (type == 2) /* 19,21 */ + { + state = 7; + } + else + { + *vptr++ = ']'; + state = -1; + } + } + } + break; + + case 10: /* 1,2 first is '.' */ + if (*fptr == '.') + { + fptr++; + state = 11; + } + else + state = 12; + break; + + case 11: /* 2, '..' at start */ + count = 1; + if (*fptr != 0) + { + if (*fptr != '/') /* got ..xxx */ + { + return name; + } + do /* got ../ */ + { + fptr++; + while (*fptr == '/') fptr++; + if (*fptr != '.') + break; + if (*(fptr+1) != '.') + break; + fptr += 2; + if ((*fptr == 0) + || (*fptr == '/')) + count++; + } + while (*fptr == '/'); + } + { /* got '..' or '../' */ + char cwdbuf[MAXPATHLEN+1]; + + s1 = getcwd(cwdbuf, MAXPATHLEN); + if (s1 == 0) + { + return ""; /* FIXME, err getcwd */ + } + strcpy (vptr, s1); + s = strchr (vptr, ']'); + if (s != 0) + { + nstate = N_OPEN; + while (s > vptr) + { + s--; + if (*s == '[') + { + s++; + strcpy (s, "000000]"); + state = -1; + break; + } + else if (*s == '.') + { + if (--count == 0) + { + if (*fptr == 0) /* had '..' or '../' */ + { + *s++ = ']'; + state = -1; + } + else /* had '../xxx' */ + { + state = 9; + } + *s = 0; + break; + } + } + } + } + vptr += strlen (vptr); + } + break; + + case 12: /* 1, '.' at start */ + if (*fptr != 0) + { + if (*fptr != '/') + { + return name; + } + while (*fptr == '/') + fptr++; + } + + { + char cwdbuf[MAXPATHLEN+1]; + + s1 = getcwd(cwdbuf, MAXPATHLEN); + if (s1 == 0) + { + return ""; /*FIXME, err getcwd */ + } + strcpy (vptr, s1); + if (*fptr == 0) + { + state = -1; + break; + } + else + { + s = strchr (vptr, ']'); + if (s == 0) + { + state = -1; + break; + } + *s = 0; + nstate = N_OPEN; + vptr += strlen (vptr); + state = 9; + } + } + break; + } + + } + while (state > 0); + + + } + + + /* directory conversion done + fptr -> filename part of input string + vptr -> free space in vmsname + */ + + *vptr++ = 0; + + return vmsname; +} + + + +/* + convert from vms-style to unix-style + + dev:[dir1.dir2] //dev/dir1/dir2/ +*/ + +char * +unixify (char *name) +{ + static char piece[512]; + char *s, *p; + + if (strchr (name, '/') != 0) /* already in unix style */ + return name; + + p = piece; + *p = 0; + + /* device part */ + + s = strchr (name, ':'); + + if (s != 0) + { + *s = 0; + *p++ = '/'; + *p++ = '/'; + strcpy (p, name); + p += strlen (p); + *s = ':'; + } + + /* directory part */ + + *p++ = '/'; + s = strchr (name, '['); + + if (s != 0) + { + s++; + switch (*s) + { + case ']': /* [] */ + strcat (p, "./"); + break; + case '-': /* [- */ + strcat (p, "../"); + break; + case '.': + strcat (p, "./"); /* [. */ + break; + default: + s--; + break; + } + s++; + while (*s) + { + if (*s == '.') + *p++ = '/'; + else + *p++ = *s; + s++; + if (*s == ']') + { + s++; + break; + } + } + if (*s != 0) /* more after ']' ?? */ + { + if (*(p-1) != '/') + *p++ = '/'; + strcpy (p, s); /* copy it anyway */ + } + } + + else /* no '[' anywhere */ + + { + *p++ = 0; + } + + /* force end with '/' */ + + if (*(p-1) != '/') + *p++ = '/'; + *p = 0; + + return piece; +} + +/* EOF */ diff --git a/src/mkutil/make/vpath.c b/src/mkutil/make/vpath.c new file mode 100644 index 00000000..b29d7ab9 --- /dev/null +++ b/src/mkutil/make/vpath.c @@ -0,0 +1,586 @@ +/* Implementation of pattern-matching file search paths for GNU Make. +Copyright (C) 1988,89,91,92,93,94,95,96,97 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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, or (at your option) +any later version. + +GNU Make 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 GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "make.h" +#include "filedef.h" +#include "variable.h" +#ifdef WINDOWS32 +#include "pathstuff.h" +#endif + + +/* Structure used to represent a selective VPATH searchpath. */ + +struct vpath + { + struct vpath *next; /* Pointer to next struct in the linked list. */ + char *pattern; /* The pattern to match. */ + char *percent; /* Pointer into `pattern' where the `%' is. */ + unsigned int patlen;/* Length of the pattern. */ + char **searchpath; /* Null-terminated list of directories. */ + unsigned int maxlen;/* Maximum length of any entry in the list. */ + }; + +/* Linked-list of all selective VPATHs. */ + +static struct vpath *vpaths; + +/* Structure for the general VPATH given in the variable. */ + +static struct vpath *general_vpath; + +/* Structure for GPATH given in the variable. */ + +static struct vpath *gpaths; + +static int selective_vpath_search PARAMS ((struct vpath *path, char **file, FILE_TIMESTAMP *mtime_ptr)); + +/* Reverse the chain of selective VPATH lists so they + will be searched in the order given in the makefiles + and construct the list from the VPATH variable. */ + +void +build_vpath_lists () +{ + register struct vpath *new = 0; + register struct vpath *old, *nexto; + register char *p; + + /* Reverse the chain. */ + for (old = vpaths; old != 0; old = nexto) + { + nexto = old->next; + old->next = new; + new = old; + } + + vpaths = new; + + /* If there is a VPATH variable with a nonnull value, construct the + general VPATH list from it. We use variable_expand rather than just + calling lookup_variable so that it will be recursively expanded. */ + + { + /* Turn off --warn-undefined-variables while we expand SHELL and IFS. */ + int save = warn_undefined_variables_flag; + warn_undefined_variables_flag = 0; + + p = variable_expand ("$(strip $(VPATH))"); + + warn_undefined_variables_flag = save; + } + + if (*p != '\0') + { + /* Save the list of vpaths. */ + struct vpath *save_vpaths = vpaths; + + /* Empty `vpaths' so the new one will have no next, and `vpaths' + will still be nil if P contains no existing directories. */ + vpaths = 0; + + /* Parse P. */ + construct_vpath_list ("%", p); + + /* Store the created path as the general path, + and restore the old list of vpaths. */ + general_vpath = vpaths; + vpaths = save_vpaths; + } + + /* If there is a GPATH variable with a nonnull value, construct the + GPATH list from it. We use variable_expand rather than just + calling lookup_variable so that it will be recursively expanded. */ + + { + /* Turn off --warn-undefined-variables while we expand SHELL and IFS. */ + int save = warn_undefined_variables_flag; + warn_undefined_variables_flag = 0; + + p = variable_expand ("$(strip $(GPATH))"); + + warn_undefined_variables_flag = save; + } + + if (*p != '\0') + { + /* Save the list of vpaths. */ + struct vpath *save_vpaths = vpaths; + + /* Empty `vpaths' so the new one will have no next, and `vpaths' + will still be nil if P contains no existing directories. */ + vpaths = 0; + + /* Parse P. */ + construct_vpath_list ("%", p); + + /* Store the created path as the GPATH, + and restore the old list of vpaths. */ + gpaths = vpaths; + vpaths = save_vpaths; + } +} + +/* Construct the VPATH listing for the pattern and searchpath given. + + This function is called to generate selective VPATH lists and also for + the general VPATH list (which is in fact just a selective VPATH that + is applied to everything). The returned pointer is either put in the + linked list of all selective VPATH lists or in the GENERAL_VPATH + variable. + + If SEARCHPATH is nil, remove all previous listings with the same + pattern. If PATTERN is nil, remove all VPATH listings. Existing + and readable directories that are not "." given in the searchpath + separated by the path element separator (defined in make.h) are + loaded into the directory hash table if they are not there already + and put in the VPATH searchpath for the given pattern with trailing + slashes stripped off if present (and if the directory is not the + root, "/"). The length of the longest entry in the list is put in + the structure as well. The new entry will be at the head of the + VPATHS chain. */ + +void +construct_vpath_list (char *pattern, char *dirpath) +{ + register unsigned int elem; + register char *p; + register char **vpath; + register unsigned int maxvpath; + unsigned int maxelem; + char *percent = NULL; + + if (pattern != 0) + { + pattern = xstrdup (pattern); + percent = find_percent (pattern); + } + + if (dirpath == 0) + { + /* Remove matching listings. */ + register struct vpath *path, *lastpath; + + lastpath = 0; + path = vpaths; + while (path != 0) + { + struct vpath *next = path->next; + + if (pattern == 0 + || (((percent == 0 && path->percent == 0) + || (percent - pattern == path->percent - path->pattern)) + && streq (pattern, path->pattern))) + { + /* Remove it from the linked list. */ + if (lastpath == 0) + vpaths = path->next; + else + lastpath->next = next; + + /* Free its unused storage. */ + free (path->pattern); + free ((char *) path->searchpath); + free ((char *) path); + } + else + lastpath = path; + + path = next; + } + + if (pattern != 0) + free (pattern); + return; + } + +#ifdef WINDOWS32 + convert_vpath_to_windows32(dirpath, ';'); +#endif + + /* Figure out the maximum number of VPATH entries and put it in + MAXELEM. We start with 2, one before the first separator and one + nil (the list terminator) and increment our estimated number for + each separator or blank we find. */ + maxelem = 2; + p = dirpath; + while (*p != '\0') + if (*p++ == PATH_SEPARATOR_CHAR || isblank ((unsigned char)*p)) + ++maxelem; + + vpath = (char **) xmalloc (maxelem * sizeof (char *)); + maxvpath = 0; + + /* Skip over any initial separators and blanks. */ + p = dirpath; + while (*p == PATH_SEPARATOR_CHAR || isblank ((unsigned char)*p)) + ++p; + + elem = 0; + while (*p != '\0') + { + char *v; + unsigned int len; + + /* Find the end of this entry. */ + v = p; + while (*p != '\0' && *p != PATH_SEPARATOR_CHAR + && !isblank ((unsigned char)*p)) + ++p; + + len = p - v; + /* Make sure there's no trailing slash, + but still allow "/" as a directory. */ +#if defined(__MSDOS__) || defined(__EMX__) + /* We need also to leave alone a trailing slash in "d:/". */ + if (len > 3 || (len > 1 && v[1] != ':')) +#endif + if (len > 1 && p[-1] == '/') + --len; + + if (len > 1 || *v != '.') + { + v = savestring (v, len); + + /* Verify that the directory actually exists. */ + + if (dir_file_exists_p (v, "")) + { + /* It does. Put it in the list. */ + vpath[elem++] = dir_name (v); + free (v); + if (len > maxvpath) + maxvpath = len; + } + else + /* The directory does not exist. Omit from the list. */ + free (v); + } + + /* Skip over separators and blanks between entries. */ + while (*p == PATH_SEPARATOR_CHAR || isblank ((unsigned char)*p)) + ++p; + } + + if (elem > 0) + { + struct vpath *path; + /* ELEM is now incremented one element past the last + entry, to where the nil-pointer terminator goes. + Usually this is maxelem - 1. If not, shrink down. */ + if (elem < (maxelem - 1)) + vpath = (char **) xrealloc ((char *) vpath, + (elem + 1) * sizeof (char *)); + + /* Put the nil-pointer terminator on the end of the VPATH list. */ + vpath[elem] = 0; + + /* Construct the vpath structure and put it into the linked list. */ + path = (struct vpath *) xmalloc (sizeof (struct vpath)); + path->searchpath = vpath; + path->maxlen = maxvpath; + path->next = vpaths; + vpaths = path; + + /* Set up the members. */ + path->pattern = pattern; + path->percent = percent; + path->patlen = strlen (pattern); + } + else + { + /* There were no entries, so free whatever space we allocated. */ + free ((char *) vpath); + if (pattern != 0) + free (pattern); + } +} + +/* Search the GPATH list for a pathname string that matches the one passed + in. If it is found, return 1. Otherwise we return 0. */ + +int +gpath_search (char *file, int len) +{ + register char **gp; + + if (gpaths && (len <= gpaths->maxlen)) + for (gp = gpaths->searchpath; *gp != NULL; ++gp) + if (strneq (*gp, file, len) && (*gp)[len] == '\0') + return 1; + + return 0; +} + +/* Search the VPATH list whose pattern matches *FILE for a directory + where the name pointed to by FILE exists. If it is found, we set *FILE to + the newly malloc'd name of the existing file, *MTIME_PTR (if MTIME_PTR is + not NULL) to its modtime (or zero if no stat call was done), and return 1. + Otherwise we return 0. */ + +int +vpath_search (char **file, FILE_TIMESTAMP *mtime_ptr) +{ + register struct vpath *v; + + /* If there are no VPATH entries or FILENAME starts at the root, + there is nothing we can do. */ + + if (**file == '/' +#ifdef HAVE_DOS_PATHS + || **file == '\\' + || (*file)[1] == ':' +#endif + || (vpaths == 0 && general_vpath == 0)) + return 0; + + for (v = vpaths; v != 0; v = v->next) + if (pattern_matches (v->pattern, v->percent, *file)) + if (selective_vpath_search (v, file, mtime_ptr)) + return 1; + + if (general_vpath != 0 + && selective_vpath_search (general_vpath, file, mtime_ptr)) + return 1; + + return 0; +} + + +/* Search the given VPATH list for a directory where the name pointed + to by FILE exists. If it is found, we set *FILE to the newly malloc'd + name of the existing file, *MTIME_PTR (if MTIME_PTR is not NULL) to + its modtime (or zero if no stat call was done), and we return 1. + Otherwise we return 0. */ + +static int +selective_vpath_search (struct vpath *path, char **file, + FILE_TIMESTAMP *mtime_ptr) +{ + int not_target; + char *name, *n; + char *filename; + register char **vpath = path->searchpath; + unsigned int maxvpath = path->maxlen; + register unsigned int i; + unsigned int flen, vlen, name_dplen; + int exists = 0; + + /* Find out if *FILE is a target. + If and only if it is NOT a target, we will accept prospective + files that don't exist but are mentioned in a makefile. */ + { + struct file *f = lookup_file (*file); + not_target = f == 0 || !f->is_target; + } + + flen = strlen (*file); + + /* Split *FILE into a directory prefix and a name-within-directory. + NAME_DPLEN gets the length of the prefix; FILENAME gets the + pointer to the name-within-directory and FLEN is its length. */ + + n = strrchr (*file, '/'); +#ifdef HAVE_DOS_PATHS + /* We need the rightmost slash or backslash. */ + { + char *bslash = strrchr(*file, '\\'); + if (!n || bslash > n) + n = bslash; + } +#endif + name_dplen = n != 0 ? n - *file : 0; + filename = name_dplen > 0 ? n + 1 : *file; + if (name_dplen > 0) + flen -= name_dplen + 1; + + /* Allocate enough space for the biggest VPATH entry, + a slash, the directory prefix that came with *FILE, + another slash (although this one may not always be + necessary), the filename, and a null terminator. */ + name = (char *) xmalloc (maxvpath + 1 + name_dplen + 1 + flen + 1); + + /* Try each VPATH entry. */ + for (i = 0; vpath[i] != 0; ++i) + { + int exists_in_cache = 0; + + n = name; + + /* Put the next VPATH entry into NAME at N and increment N past it. */ + vlen = strlen (vpath[i]); + bcopy (vpath[i], n, vlen); + n += vlen; + + /* Add the directory prefix already in *FILE. */ + if (name_dplen > 0) + { +#ifndef VMS + *n++ = '/'; +#endif + bcopy (*file, n, name_dplen); + n += name_dplen; + } + +#ifdef HAVE_DOS_PATHS + /* Cause the next if to treat backslash and slash alike. */ + if (n != name && n[-1] == '\\' ) + n[-1] = '/'; +#endif + /* Now add the name-within-directory at the end of NAME. */ +#ifndef VMS + if (n != name && n[-1] != '/') + { + *n = '/'; + bcopy (filename, n + 1, flen + 1); + } + else +#endif + bcopy (filename, n, flen + 1); + + /* Check if the file is mentioned in a makefile. If *FILE is not + a target, that is enough for us to decide this file exists. + If *FILE is a target, then the file must be mentioned in the + makefile also as a target to be chosen. + + The restriction that *FILE must not be a target for a + makefile-mentioned file to be chosen was added by an + inadequately commented change in July 1990; I am not sure off + hand what problem it fixes. + + In December 1993 I loosened this restriction to allow a file + to be chosen if it is mentioned as a target in a makefile. This + seem logical. */ + { + struct file *f = lookup_file (name); + if (f != 0) + exists = not_target || f->is_target; + } + + if (!exists) + { + /* That file wasn't mentioned in the makefile. + See if it actually exists. */ + +#ifdef VMS + exists_in_cache = exists = dir_file_exists_p (vpath[i], filename); +#else + /* Clobber a null into the name at the last slash. + Now NAME is the name of the directory to look in. */ + *n = '\0'; + + /* We know the directory is in the hash table now because either + construct_vpath_list or the code just above put it there. + Does the file we seek exist in it? */ + exists_in_cache = exists = dir_file_exists_p (name, filename); +#endif + } + + if (exists) + { + /* The file is in the directory cache. + Now check that it actually exists in the filesystem. + The cache may be out of date. When vpath thinks a file + exists, but stat fails for it, confusion results in the + higher levels. */ + + struct stat st; + +#ifndef VMS + /* Put the slash back in NAME. */ + *n = '/'; +#endif + + if (exists_in_cache) /* Makefile-mentioned file need not exist. */ + { + int e; + + EINTRLOOP (e, stat (name, &st)); /* Does it really exist? */ + if (e != 0) + { + exists = 0; + continue; + } + } + + /* We have found a file. + Store the name we found into *FILE for the caller. */ + + *file = savestring (name, (n + 1 - name) + flen); + + if (mtime_ptr != 0) + /* Store the modtime into *MTIME_PTR for the caller. + If we have had no need to stat the file here, + we record UNKNOWN_MTIME to indicate this. */ + *mtime_ptr = (exists_in_cache + ? FILE_TIMESTAMP_STAT_MODTIME (name, st) + : UNKNOWN_MTIME); + + free (name); + return 1; + } + } + + free (name); + return 0; +} + +/* Print the data base of VPATH search paths. */ + +void +print_vpath_data_base (void) +{ + register unsigned int nvpaths; + register struct vpath *v; + + puts (_("\n# VPATH Search Paths\n")); + + nvpaths = 0; + for (v = vpaths; v != 0; v = v->next) + { + register unsigned int i; + + ++nvpaths; + + printf ("vpath %s ", v->pattern); + + for (i = 0; v->searchpath[i] != 0; ++i) + printf ("%s%c", v->searchpath[i], + v->searchpath[i + 1] == 0 ? '\n' : PATH_SEPARATOR_CHAR); + } + + if (vpaths == 0) + puts (_("# No `vpath' search paths.")); + else + printf (_("\n# %u `vpath' search paths.\n"), nvpaths); + + if (general_vpath == 0) + puts (_("\n# No general (`VPATH' variable) search path.")); + else + { + register char **path = general_vpath->searchpath; + register unsigned int i; + + fputs (_("\n# General (`VPATH' variable) search path:\n# "), stdout); + + for (i = 0; path[i] != 0; ++i) + printf ("%s%c", path[i], + path[i + 1] == 0 ? '\n' : PATH_SEPARATOR_CHAR); + } +} diff --git a/src/mkutil/make/w32/CVS/Entries b/src/mkutil/make/w32/CVS/Entries new file mode 100644 index 00000000..7f872be1 --- /dev/null +++ b/src/mkutil/make/w32/CVS/Entries @@ -0,0 +1,2 @@ +/pathstuff.c/1.6/Wed Jun 7 05:43:37 2000// +D diff --git a/src/mkutil/make/w32/CVS/Entries.Log b/src/mkutil/make/w32/CVS/Entries.Log new file mode 100644 index 00000000..53c16e95 --- /dev/null +++ b/src/mkutil/make/w32/CVS/Entries.Log @@ -0,0 +1,3 @@ +A D/compat//// +A D/include//// +A D/subproc//// diff --git a/src/mkutil/make/w32/CVS/Repository b/src/mkutil/make/w32/CVS/Repository new file mode 100644 index 00000000..49f79fe4 --- /dev/null +++ b/src/mkutil/make/w32/CVS/Repository @@ -0,0 +1 @@ +make/w32 diff --git a/src/mkutil/make/w32/CVS/Root b/src/mkutil/make/w32/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/w32/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/w32/compat/CVS/Entries b/src/mkutil/make/w32/compat/CVS/Entries new file mode 100644 index 00000000..85976cfc --- /dev/null +++ b/src/mkutil/make/w32/compat/CVS/Entries @@ -0,0 +1,2 @@ +/dirent.c/1.4/Wed Aug 27 20:34:12 1997// +D diff --git a/src/mkutil/make/w32/compat/CVS/Repository b/src/mkutil/make/w32/compat/CVS/Repository new file mode 100644 index 00000000..873bac44 --- /dev/null +++ b/src/mkutil/make/w32/compat/CVS/Repository @@ -0,0 +1 @@ +make/w32/compat diff --git a/src/mkutil/make/w32/compat/CVS/Root b/src/mkutil/make/w32/compat/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/w32/compat/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/w32/compat/dirent.c b/src/mkutil/make/w32/compat/dirent.c new file mode 100644 index 00000000..db871a90 --- /dev/null +++ b/src/mkutil/make/w32/compat/dirent.c @@ -0,0 +1,188 @@ +#include +#include +#include +#include +#include +#include "dirent.h" + + +DIR* +opendir(const char* pDirName) +{ + struct stat sb; + DIR* pDir; + char* pEndDirName; + int nBufferLen; + + /* sanity checks */ + if (!pDirName) { + errno = EINVAL; + return NULL; + } + if (stat(pDirName, &sb) != 0) { + errno = ENOENT; + return NULL; + } + if ((sb.st_mode & S_IFMT) != S_IFDIR) { + errno = ENOTDIR; + return NULL; + } + + /* allocate a DIR structure to return */ + pDir = (DIR *) malloc(sizeof (DIR)); + + if (!pDir) + return NULL; + + /* input directory name length */ + nBufferLen = strlen(pDirName); + + /* copy input directory name to DIR buffer */ + strcpy(pDir->dir_pDirectoryName, pDirName); + + /* point to end of the copied directory name */ + pEndDirName = &pDir->dir_pDirectoryName[nBufferLen - 1]; + + /* if directory name did not end in '/' or '\', add '/' */ + if ((*pEndDirName != '/') && (*pEndDirName != '\\')) { + pEndDirName++; + *pEndDirName = '/'; + } + + /* now append the wildcard character to the buffer */ + pEndDirName++; + *pEndDirName = '*'; + pEndDirName++; + *pEndDirName = '\0'; + + /* other values defaulted */ + pDir->dir_nNumFiles = 0; + pDir->dir_hDirHandle = INVALID_HANDLE_VALUE; + pDir->dir_ulCookie = __DIRENT_COOKIE; + + return pDir; +} + +void +closedir(DIR *pDir) +{ + /* got a valid pointer? */ + if (!pDir) { + errno = EINVAL; + return; + } + + /* sanity check that this is a DIR pointer */ + if (pDir->dir_ulCookie != __DIRENT_COOKIE) { + errno = EINVAL; + return; + } + + /* close the WINDOWS32 directory handle */ + if (pDir->dir_hDirHandle != INVALID_HANDLE_VALUE) + FindClose(pDir->dir_hDirHandle); + + free(pDir); + + return; +} + +struct dirent * +readdir(DIR* pDir) +{ + WIN32_FIND_DATA wfdFindData; + + if (!pDir) { + errno = EINVAL; + return NULL; + } + + /* sanity check that this is a DIR pointer */ + if (pDir->dir_ulCookie != __DIRENT_COOKIE) { + errno = EINVAL; + return NULL; + } + + if (pDir->dir_nNumFiles == 0) { + pDir->dir_hDirHandle = FindFirstFile(pDir->dir_pDirectoryName, &wfdFindData); + if (pDir->dir_hDirHandle == INVALID_HANDLE_VALUE) + return NULL; + } else if (!FindNextFile(pDir->dir_hDirHandle, &wfdFindData)) + return NULL; + + /* bump count for next call to readdir() or telldir() */ + pDir->dir_nNumFiles++; + + /* fill in struct dirent values */ + pDir->dir_sdReturn.d_ino = -1; + strcpy(pDir->dir_sdReturn.d_name, wfdFindData.cFileName); + + return &pDir->dir_sdReturn; +} + +void +rewinddir(DIR* pDir) +{ + if (!pDir) { + errno = EINVAL; + return; + } + + /* sanity check that this is a DIR pointer */ + if (pDir->dir_ulCookie != __DIRENT_COOKIE) { + errno = EINVAL; + return; + } + + /* close the WINDOWS32 directory handle */ + if (pDir->dir_hDirHandle != INVALID_HANDLE_VALUE) + if (!FindClose(pDir->dir_hDirHandle)) + errno = EBADF; + + /* reset members which control readdir() */ + pDir->dir_hDirHandle = INVALID_HANDLE_VALUE; + pDir->dir_nNumFiles = 0; + + return; +} + +int +telldir(DIR* pDir) +{ + if (!pDir) { + errno = EINVAL; + return -1; + } + + /* sanity check that this is a DIR pointer */ + if (pDir->dir_ulCookie != __DIRENT_COOKIE) { + errno = EINVAL; + return -1; + } + + /* return number of times readdir() called */ + return pDir->dir_nNumFiles; +} + +void +seekdir(DIR* pDir, long nPosition) +{ + if (!pDir) + return; + + /* sanity check that this is a DIR pointer */ + if (pDir->dir_ulCookie != __DIRENT_COOKIE) + return; + + /* go back to beginning of directory */ + rewinddir(pDir); + + /* loop until we have found position we care about */ + for (--nPosition; nPosition && readdir(pDir); nPosition--); + + /* flag invalid nPosition value */ + if (nPosition) + errno = EINVAL; + + return; +} diff --git a/src/mkutil/make/w32/include/CVS/Entries b/src/mkutil/make/w32/include/CVS/Entries new file mode 100644 index 00000000..e43122c2 --- /dev/null +++ b/src/mkutil/make/w32/include/CVS/Entries @@ -0,0 +1,5 @@ +/dirent.h/1.3/Mon Apr 7 07:24:42 1997// +/pathstuff.h/1.4/Mon Apr 7 07:24:45 1997// +/sub_proc.h/1.4/Wed Aug 27 20:34:23 1997// +/w32err.h/1.3/Mon Apr 7 07:24:50 1997// +D diff --git a/src/mkutil/make/w32/include/CVS/Repository b/src/mkutil/make/w32/include/CVS/Repository new file mode 100644 index 00000000..7ffd49d4 --- /dev/null +++ b/src/mkutil/make/w32/include/CVS/Repository @@ -0,0 +1 @@ +make/w32/include diff --git a/src/mkutil/make/w32/include/CVS/Root b/src/mkutil/make/w32/include/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/w32/include/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/w32/include/dirent.h b/src/mkutil/make/w32/include/dirent.h new file mode 100644 index 00000000..3437bd06 --- /dev/null +++ b/src/mkutil/make/w32/include/dirent.h @@ -0,0 +1,37 @@ +#ifndef _DIRENT_H +#define _DIRENT_H + +#include +#include +#include +#include + +#ifndef NAME_MAX +#define NAME_MAX 255 +#endif + +#define __DIRENT_COOKIE 0xfefeabab + + +struct dirent +{ + ino_t d_ino; /* unused - no equivalent on WINDOWS32 */ + char d_name[NAME_MAX+1]; +}; + +typedef struct dir_struct { + ULONG dir_ulCookie; + HANDLE dir_hDirHandle; + DWORD dir_nNumFiles; + char dir_pDirectoryName[NAME_MAX+1]; + struct dirent dir_sdReturn; +} DIR; + +DIR *opendir(const char *); +struct dirent *readdir(DIR *); +void rewinddir(DIR *); +void closedir(DIR *); +int telldir(DIR *); +void seekdir(DIR *, long); + +#endif diff --git a/src/mkutil/make/w32/include/pathstuff.h b/src/mkutil/make/w32/include/pathstuff.h new file mode 100644 index 00000000..a036f7b2 --- /dev/null +++ b/src/mkutil/make/w32/include/pathstuff.h @@ -0,0 +1,9 @@ +#ifndef _PATHSTUFF_H +#define _PATHSTUFF_H + +extern char * convert_Path_to_windows32(char *Path, char to_delim); +extern char * convert_vpath_to_windows32(char *Path, char to_delim); +extern char * w32ify(char *file, int resolve); +extern char * getcwd_fs(char *buf, int len); + +#endif diff --git a/src/mkutil/make/w32/include/sub_proc.h b/src/mkutil/make/w32/include/sub_proc.h new file mode 100644 index 00000000..9cc54a57 --- /dev/null +++ b/src/mkutil/make/w32/include/sub_proc.h @@ -0,0 +1,47 @@ +#ifndef SUB_PROC_H +#define SUB_PROC_H + +/* + * Component Name: + * + * $Date: 1997/08/27 20:34:23 $ + * + * $Source: /cvsroot/make/make/w32/include/sub_proc.h,v $ + * + * $Revision: 1.4 $ + */ + +/* $Id: sub_proc.h,v 1.4 1997/08/27 20:34:23 psmith Exp $ */ + +#ifdef WINDOWS32 + +#define EXTERN_DECL(entry, args) extern entry args +#define VOID_DECL void + +EXTERN_DECL(HANDLE process_init, (VOID_DECL)); +EXTERN_DECL(HANDLE process_init_fd, (HANDLE stdinh, HANDLE stdouth, + HANDLE stderrh)); +EXTERN_DECL(long process_begin, (HANDLE proc, char **argv, char **envp, + char *exec_path, char *as_user)); +EXTERN_DECL(long process_pipe_io, (HANDLE proc, char *stdin_data, + int stdin_data_len)); +EXTERN_DECL(long process_file_io, (HANDLE proc)); +EXTERN_DECL(void process_cleanup, (HANDLE proc)); +EXTERN_DECL(HANDLE process_wait_for_any, (VOID_DECL)); +EXTERN_DECL(void process_register, (HANDLE proc)); +EXTERN_DECL(HANDLE process_easy, (char** argv, char** env)); +EXTERN_DECL(BOOL process_kill, (HANDLE proc, int signal)); + +/* support routines */ +EXTERN_DECL(long process_errno, (HANDLE proc)); +EXTERN_DECL(long process_last_err, (HANDLE proc)); +EXTERN_DECL(long process_exit_code, (HANDLE proc)); +EXTERN_DECL(long process_signal, (HANDLE proc)); +EXTERN_DECL(char * process_outbuf, (HANDLE proc)); +EXTERN_DECL(char * process_errbuf, (HANDLE proc)); +EXTERN_DECL(int process_outcnt, (HANDLE proc)); +EXTERN_DECL(int process_errcnt, (HANDLE proc)); +EXTERN_DECL(void process_pipes, (HANDLE proc, int pipes[3])); + +#endif +#endif diff --git a/src/mkutil/make/w32/include/w32err.h b/src/mkutil/make/w32/include/w32err.h new file mode 100644 index 00000000..68a65906 --- /dev/null +++ b/src/mkutil/make/w32/include/w32err.h @@ -0,0 +1,10 @@ +#ifndef _W32ERR_H_ +#define _W32ERR_H_ + +#ifndef EXTERN_DECL +#define EXTERN_DECL(entry, args) entry args +#endif + +EXTERN_DECL(char * map_windows32_error_to_string, (DWORD error)); + +#endif /* !_W32ERR_H */ diff --git a/src/mkutil/make/w32/pathstuff.c b/src/mkutil/make/w32/pathstuff.c new file mode 100644 index 00000000..d8f38453 --- /dev/null +++ b/src/mkutil/make/w32/pathstuff.c @@ -0,0 +1,238 @@ +#include +#include +#include "make.h" +#include "pathstuff.h" + +/* + * Convert delimiter separated vpath to Canonical format. + */ +char * +convert_vpath_to_windows32(char *Path, char to_delim) +{ + char *etok; /* token separator for old Path */ + + /* + * Convert all spaces to delimiters. Note that pathnames which + * contain blanks get trounced here. Use 8.3 format as a workaround. + */ + for (etok = Path; etok && *etok; etok++) + if (isblank ((unsigned char) *etok)) + *etok = to_delim; + + return (convert_Path_to_windows32(Path, to_delim)); +} + +/* + * Convert delimiter separated path to Canonical format. + */ +char * +convert_Path_to_windows32(char *Path, char to_delim) +{ + char *etok; /* token separator for old Path */ + char *p; /* points to element of old Path */ + + /* is this a multi-element Path ? */ + for (p = Path, etok = strpbrk(p, ":;"); + etok; + etok = strpbrk(p, ":;")) + if ((etok - p) == 1) { + if (*(etok - 1) == ';' || + *(etok - 1) == ':') { + etok[-1] = to_delim; + etok[0] = to_delim; + p = ++etok; + continue; /* ignore empty bucket */ + } else if (!isalpha ((unsigned char) *p)) { + /* found one to count, handle things like '.' */ + *etok = to_delim; + p = ++etok; + } else if ((*etok == ':') && (etok = strpbrk(etok+1, ":;"))) { + /* found one to count, handle drive letter */ + *etok = to_delim; + p = ++etok; + } else + /* all finished, force abort */ + p += strlen(p); + } else { + /* found another one, no drive letter */ + *etok = to_delim; + p = ++etok; + } + + return Path; +} + +/* + * Convert to forward slashes. Resolve to full pathname optionally + */ +char * +w32ify(char *filename, int resolve) +{ + static char w32_path[FILENAME_MAX]; + char *p; + + if (resolve) + _fullpath(w32_path, filename, sizeof (w32_path)); + else + strncpy(w32_path, filename, sizeof (w32_path)); + + for (p = w32_path; p && *p; p++) + if (*p == '\\') + *p = '/'; + + return w32_path; +} + +char * +getcwd_fs(char* buf, int len) +{ + char *p; + + if (p = getcwd(buf, len)) { + char *q = w32ify(buf, 0); + strncpy(buf, q, len); + } + + return p; +} + +#ifdef unused +/* + * Convert delimiter separated pathnames (e.g. PATH) or single file pathname + * (e.g. c:/foo, c:\bar) to NutC format. If we are handed a string that + * _NutPathToNutc() fails to convert, just return the path we were handed + * and assume the caller will know what to do with it (It was probably + * a mistake to try and convert it anyway due to some of the bizarre things + * that might look like pathnames in makefiles). + */ +char * +convert_path_to_nutc(char *path) +{ + int count; /* count of path elements */ + char *nutc_path; /* new NutC path */ + int nutc_path_len; /* length of buffer to allocate for new path */ + char *pathp; /* pointer to nutc_path used to build it */ + char *etok; /* token separator for old path */ + char *p; /* points to element of old path */ + char sep; /* what flavor of separator used in old path */ + char *rval; + + /* is this a multi-element path ? */ + for (p = path, etok = strpbrk(p, ":;"), count = 0; + etok; + etok = strpbrk(p, ":;")) + if ((etok - p) == 1) { + if (*(etok - 1) == ';' || + *(etok - 1) == ':') { + p = ++etok; + continue; /* ignore empty bucket */ + } else if (etok = strpbrk(etok+1, ":;")) + /* found one to count, handle drive letter */ + p = ++etok, count++; + else + /* all finished, force abort */ + p += strlen(p); + } else + /* found another one, no drive letter */ + p = ++etok, count++; + + if (count) { + count++; /* x1;x2;x3 <- need to count x3 */ + + /* + * Hazard a guess on how big the buffer needs to be. + * We have to convert things like c:/foo to /c=/foo. + */ + nutc_path_len = strlen(path) + (count*2) + 1; + nutc_path = xmalloc(nutc_path_len); + pathp = nutc_path; + *pathp = '\0'; + + /* + * Loop through PATH and convert one elemnt of the path at at + * a time. Single file pathnames will fail this and fall + * to the logic below loop. + */ + for (p = path, etok = strpbrk(p, ":;"); + etok; + etok = strpbrk(p, ":;")) { + + /* don't trip up on device specifiers or empty path slots */ + if ((etok - p) == 1) + if (*(etok - 1) == ';' || + *(etok - 1) == ':') { + p = ++etok; + continue; + } else if ((etok = strpbrk(etok+1, ":;")) == NULL) + break; /* thing found was a WINDOWS32 pathname */ + + /* save separator */ + sep = *etok; + + /* terminate the current path element -- temporarily */ + *etok = '\0'; + +#ifdef __NUTC__ + /* convert to NutC format */ + if (_NutPathToNutc(p, pathp, 0) == FALSE) { + free(nutc_path); + rval = savestring(path, strlen(path)); + return rval; + } +#else + *pathp++ = '/'; + *pathp++ = p[0]; + *pathp++ = '='; + *pathp++ = '/'; + strcpy(pathp, &p[2]); +#endif + + pathp += strlen(pathp); + *pathp++ = ':'; /* use Unix style path separtor for new path */ + *pathp = '\0'; /* make sure we are null terminaed */ + + /* restore path separator */ + *etok = sep; + + /* point p to first char of next path element */ + p = ++etok; + + } + } else { + nutc_path_len = strlen(path) + 3; + nutc_path = xmalloc(nutc_path_len); + pathp = nutc_path; + *pathp = '\0'; + p = path; + } + + /* + * OK, here we handle the last element in PATH (e.g. c of a;b;c) + * or the path was a single filename and will be converted + * here. Note, testing p here assures that we don't trip up + * on paths like a;b; which have trailing delimiter followed by + * nothing. + */ + if (*p != '\0') { +#ifdef __NUTC__ + if (_NutPathToNutc(p, pathp, 0) == FALSE) { + free(nutc_path); + rval = savestring(path, strlen(path)); + return rval; + } +#else + *pathp++ = '/'; + *pathp++ = p[0]; + *pathp++ = '='; + *pathp++ = '/'; + strcpy(pathp, &p[2]); +#endif + } else + *(pathp-1) = '\0'; /* we're already done, don't leave trailing : */ + + rval = savestring(nutc_path, strlen(nutc_path)); + free(nutc_path); + return rval; +} + +#endif diff --git a/src/mkutil/make/w32/subproc/CVS/Entries b/src/mkutil/make/w32/subproc/CVS/Entries new file mode 100644 index 00000000..e3166f70 --- /dev/null +++ b/src/mkutil/make/w32/subproc/CVS/Entries @@ -0,0 +1,7 @@ +/NMakefile/1.6/Sat Oct 3 05:40:40 1998// +/build.bat/1.5/Thu Jul 30 21:00:14 1998// +/misc.c/1.4/Wed Dec 8 20:14:06 1999// +/proc.h/1.2/Fri Jul 19 21:41:30 1996// +/sub_proc.c/1.8/Sat Apr 22 02:11:18 2000// +/w32err.c/1.3/Mon Apr 7 07:25:06 1997// +D diff --git a/src/mkutil/make/w32/subproc/CVS/Repository b/src/mkutil/make/w32/subproc/CVS/Repository new file mode 100644 index 00000000..820c4098 --- /dev/null +++ b/src/mkutil/make/w32/subproc/CVS/Repository @@ -0,0 +1 @@ +make/w32/subproc diff --git a/src/mkutil/make/w32/subproc/CVS/Root b/src/mkutil/make/w32/subproc/CVS/Root new file mode 100644 index 00000000..132093b8 --- /dev/null +++ b/src/mkutil/make/w32/subproc/CVS/Root @@ -0,0 +1 @@ +:pserver:anoncvs@subversions.gnu.org:/cvsroot/make diff --git a/src/mkutil/make/w32/subproc/NMakefile b/src/mkutil/make/w32/subproc/NMakefile new file mode 100644 index 00000000..66afe650 --- /dev/null +++ b/src/mkutil/make/w32/subproc/NMakefile @@ -0,0 +1,60 @@ +# NOTE: If you have no `make' program at all to process this makefile, run +# `build.bat' instead. +# +# Copyright (C) 1988,89,91,92,93,94,95,96,97 Free Software Foundation, Inc +# This file is part of GNU Make. +# +# GNU Make 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, or (at your option) +# any later version. +# +# GNU Make 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 GNU Make; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +# +# NMakefile for GNU Make (subproc library) +# +LIB = lib +CC = cl + +OUTDIR=. +MAKEFILE=NMakefile + +CFLAGS_any = /nologo /MT /W3 /GX /Z7 /YX /D WIN32 /D WINDOWS32 /D _WINDOWS -I. -I../include -I../../ +CFLAGS_debug = $(CFLAGS_any) /Od /D _DEBUG /FR.\WinDebug\ /Fp.\WinDebug\subproc.pch /Fo.\WinDebug/ +CFLAGS_release = $(CFLAGS_any) /O2 /FR.\WinRel\ /Fp.\WinRel\subproc.pch /Fo.\WinRel/ + +all: Release Debug + +Release: + $(MAKE) /f $(MAKEFILE) OUTDIR=WinRel CFLAGS="$(CFLAGS_release)" WinRel/subproc.lib +Debug: + $(MAKE) /f $(MAKEFILE) OUTDIR=WinDebug CFLAGS="$(CFLAGS_debug)" WinDebug/subproc.lib + +clean: + rmdir /s /q WinRel WinDebug + erase *.pdb + +$(OUTDIR): + if not exist .\$@\nul mkdir .\$@ + +OBJS = $(OUTDIR)/misc.obj $(OUTDIR)/w32err.obj $(OUTDIR)/sub_proc.obj + +$(OUTDIR)/subproc.lib: $(OUTDIR) $(OBJS) + $(LIB) -out:$@ @<< + $(OBJS) +<< + +.c{$(OUTDIR)}.obj: + $(CC) $(CFLAGS) /c $< + +$(OUTDIR)/misc.obj: misc.c proc.h +$(OUTDIR)/sub_proc.obj: sub_proc.c ../include/sub_proc.h ../include/w32err.h proc.h +$(OUTDIR)/w32err.obj: w32err.c ../include/w32err.h diff --git a/src/mkutil/make/w32/subproc/build.bat b/src/mkutil/make/w32/subproc/build.bat new file mode 100644 index 00000000..26ab1cbe --- /dev/null +++ b/src/mkutil/make/w32/subproc/build.bat @@ -0,0 +1,10 @@ +if not exist .\WinDebug\nul mkdir .\WinDebug +cl.exe /nologo /MT /W3 /GX /Z7 /YX /Od /I .. /I . /I ../include /D WIN32 /D WINDOWS32 /D _DEBUG /D _WINDOWS /FR.\WinDebug/ /Fp.\WinDebug/subproc.pch /Fo.\WinDebug/ /c misc.c +cl.exe /nologo /MT /W3 /GX /Z7 /YX /Od /I .. /I . /I ../include /I ../.. /D WIN32 /D WINDOWS32 /D _DEBUG /D _WINDOWS /FR.\WinDebug/ /Fp.\WinDebug/subproc.pch /Fo.\WinDebug/ /c sub_proc.c +cl.exe /nologo /MT /W3 /GX /Z7 /YX /Od /I .. /I . /I ../include /D WIN32 /D WINDOWS32 /D _DEBUG /D _WINDOWS /FR.\WinDebug/ /Fp.\WinDebug/subproc.pch /Fo.\WinDebug/ /c w32err.c +lib.exe /NOLOGO /OUT:.\WinDebug\subproc.lib .\WinDebug/misc.obj .\WinDebug/sub_proc.obj .\WinDebug/w32err.obj +if not exist .\WinRel\nul mkdir .\WinRel +cl.exe /nologo /MT /W3 /GX /YX /O2 /I ../include /D WIN32 /D WINDOWS32 /D NDEBUG /D _WINDOWS /FR.\WinRel/ /Fp.\WinRel/subproc.pch /Fo.\WinRel/ /c misc.c +cl.exe /nologo /MT /W3 /GX /YX /O2 /I ../include /I ../.. /D WIN32 /D WINDOWS32 /D NDEBUG /D _WINDOWS /FR.\WinRel/ /Fp.\WinRel/subproc.pch /Fo.\WinRel/ /c sub_proc.c +cl.exe /nologo /MT /W3 /GX /YX /O2 /I ../include /D WIN32 /D WINDOWS32 /D NDEBUG /D _WINDOWS /FR.\WinRel/ /Fp.\WinRel/subproc.pch /Fo.\WinRel/ /c w32err.c +lib.exe /NOLOGO /OUT:.\WinRel\subproc.lib .\WinRel/misc.obj .\WinRel/sub_proc.obj .\WinRel/w32err.obj diff --git a/src/mkutil/make/w32/subproc/misc.c b/src/mkutil/make/w32/subproc/misc.c new file mode 100644 index 00000000..d0e9ad9b --- /dev/null +++ b/src/mkutil/make/w32/subproc/misc.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include +#include "proc.h" + + +/* + * Description: Convert a NULL string terminated UNIX environment block to + * an environment block suitable for a windows32 system call + * + * Returns: TRUE= success, FALSE=fail + * + * Notes/Dependencies: the environment block is sorted in case-insensitive + * order, is double-null terminated, and is a char *, not a char ** + */ +int _cdecl compare(const void *a1, const void *a2) +{ + return _stricoll(*((char**)a1),*((char**)a2)); +} +bool_t +arr2envblk(char **arr, char **envblk_out) +{ + char **tmp; + int size_needed; + int arrcnt; + char *ptr; + + arrcnt = 0; + while (arr[arrcnt]) { + arrcnt++; + } + + tmp = (char**) calloc(arrcnt + 1, sizeof(char *)); + if (!tmp) { + return FALSE; + } + + arrcnt = 0; + size_needed = 0; + while (arr[arrcnt]) { + tmp[arrcnt] = arr[arrcnt]; + size_needed += strlen(arr[arrcnt]) + 1; + arrcnt++; + } + size_needed++; + + qsort((void *) tmp, (size_t) arrcnt, sizeof (char*), compare); + + ptr = *envblk_out = calloc(size_needed, 1); + if (!ptr) { + free(tmp); + return FALSE; + } + + arrcnt = 0; + while (tmp[arrcnt]) { + strcpy(ptr, tmp[arrcnt]); + ptr += strlen(tmp[arrcnt]) + 1; + arrcnt++; + } + + free(tmp); + return TRUE; +} diff --git a/src/mkutil/make/w32/subproc/proc.h b/src/mkutil/make/w32/subproc/proc.h new file mode 100644 index 00000000..249ffd81 --- /dev/null +++ b/src/mkutil/make/w32/subproc/proc.h @@ -0,0 +1,13 @@ +#ifndef _PROC_H +#define _PROC_H + +typedef int bool_t; + +#define E_SCALL 101 +#define E_IO 102 +#define E_NO_MEM 103 +#define E_FORK 104 + +extern bool_t arr2envblk(char **arr, char **envblk_out); + +#endif diff --git a/src/mkutil/make/w32/subproc/sub_proc.c b/src/mkutil/make/w32/subproc/sub_proc.c new file mode 100644 index 00000000..52f2fa2c --- /dev/null +++ b/src/mkutil/make/w32/subproc/sub_proc.c @@ -0,0 +1,1207 @@ +#include +#include +#include /* for msvc _beginthreadex, _endthreadex */ +#include + +#include "sub_proc.h" +#include "proc.h" +#include "w32err.h" +#include "config.h" +#include "debug.h" + +static char *make_command_line(char *shell_name, char *exec_path, char **argv); + +typedef struct sub_process_t { + int sv_stdin[2]; + int sv_stdout[2]; + int sv_stderr[2]; + int using_pipes; + char *inp; + DWORD incnt; + char * volatile outp; + volatile DWORD outcnt; + char * volatile errp; + volatile DWORD errcnt; + int pid; + int exit_code; + int signal; + long last_err; + long lerrno; +} sub_process; + +/* keep track of children so we can implement a waitpid-like routine */ +static sub_process *proc_array[256]; +static int proc_index = 0; +static int fake_exits_pending = 0; + +/* + * When a process has been waited for, adjust the wait state + * array so that we don't wait for it again + */ +static void +process_adjust_wait_state(sub_process* pproc) +{ + int i; + + if (!proc_index) + return; + + for (i = 0; i < proc_index; i++) + if (proc_array[i]->pid == pproc->pid) + break; + + if (i < proc_index) { + proc_index--; + if (i != proc_index) + memmove(&proc_array[i], &proc_array[i+1], + (proc_index-i) * sizeof(sub_process*)); + proc_array[proc_index] = NULL; + } +} + +/* + * Waits for any of the registered child processes to finish. + */ +static sub_process * +process_wait_for_any_private(void) +{ + HANDLE handles[256]; + DWORD retval, which; + int i; + + if (!proc_index) + return NULL; + + /* build array of handles to wait for */ + for (i = 0; i < proc_index; i++) { + handles[i] = (HANDLE) proc_array[i]->pid; + + if (fake_exits_pending && proc_array[i]->exit_code) + break; + } + + /* wait for someone to exit */ + if (!fake_exits_pending) { + retval = WaitForMultipleObjects(proc_index, handles, FALSE, INFINITE); + which = retval - WAIT_OBJECT_0; + } else { + fake_exits_pending--; + retval = !WAIT_FAILED; + which = i; + } + + /* return pointer to process */ + if (retval != WAIT_FAILED) { + sub_process* pproc = proc_array[which]; + process_adjust_wait_state(pproc); + return pproc; + } else + return NULL; +} + +/* + * Terminate a process. + */ +BOOL +process_kill(HANDLE proc, int signal) +{ + sub_process* pproc = (sub_process*) proc; + pproc->signal = signal; + return (TerminateProcess((HANDLE) pproc->pid, signal)); +} + +/* + * Use this function to register processes you wish to wait for by + * calling process_file_io(NULL) or process_wait_any(). This must be done + * because it is possible for callers of this library to reuse the same + * handle for multiple processes launches :-( + */ +void +process_register(HANDLE proc) +{ + proc_array[proc_index++] = (sub_process *) proc; +} + +/* + * Public function which works kind of like waitpid(). Wait for any + * of the children to die and return results. To call this function, + * you must do 1 of things: + * + * x = process_easy(...); + * + * or + * + * x = process_init_fd(); + * process_register(x); + * + * or + * + * x = process_init(); + * process_register(x); + * + * You must NOT then call process_pipe_io() because this function is + * not capable of handling automatic notification of any child + * death. + */ + +HANDLE +process_wait_for_any(void) +{ + sub_process* pproc = process_wait_for_any_private(); + + if (!pproc) + return NULL; + else { + /* + * Ouch! can't tell caller if this fails directly. Caller + * will have to use process_last_err() + */ + (void) process_file_io(pproc); + return ((HANDLE) pproc); + } +} + +long +process_errno(HANDLE proc) +{ + return (((sub_process *)proc)->lerrno); +} + +long +process_signal(HANDLE proc) +{ + return (((sub_process *)proc)->signal); +} + + long +process_last_err(HANDLE proc) +{ + return (((sub_process *)proc)->last_err); +} + + long +process_exit_code(HANDLE proc) +{ + return (((sub_process *)proc)->exit_code); +} + + char * +process_outbuf(HANDLE proc) +{ + return (((sub_process *)proc)->outp); +} + + char * +process_errbuf(HANDLE proc) +{ + return (((sub_process *)proc)->errp); +} + + int +process_outcnt(HANDLE proc) +{ + return (((sub_process *)proc)->outcnt); +} + + int +process_errcnt(HANDLE proc) +{ + return (((sub_process *)proc)->errcnt); +} + + void +process_pipes(HANDLE proc, int pipes[3]) +{ + pipes[0] = ((sub_process *)proc)->sv_stdin[0]; + pipes[1] = ((sub_process *)proc)->sv_stdout[0]; + pipes[2] = ((sub_process *)proc)->sv_stderr[0]; + return; +} + + + HANDLE +process_init() +{ + sub_process *pproc; + /* + * open file descriptors for attaching stdin/stdout/sterr + */ + HANDLE stdin_pipes[2]; + HANDLE stdout_pipes[2]; + HANDLE stderr_pipes[2]; + SECURITY_ATTRIBUTES inherit; + BYTE sd[SECURITY_DESCRIPTOR_MIN_LENGTH]; + + pproc = malloc(sizeof(*pproc)); + memset(pproc, 0, sizeof(*pproc)); + + /* We can't use NULL for lpSecurityDescriptor because that + uses the default security descriptor of the calling process. + Instead we use a security descriptor with no DACL. This + allows nonrestricted access to the associated objects. */ + + if (!InitializeSecurityDescriptor((PSECURITY_DESCRIPTOR)(&sd), + SECURITY_DESCRIPTOR_REVISION)) { + pproc->last_err = GetLastError(); + pproc->lerrno = E_SCALL; + return((HANDLE)pproc); + } + + inherit.nLength = sizeof(inherit); + inherit.lpSecurityDescriptor = (PSECURITY_DESCRIPTOR)(&sd); + inherit.bInheritHandle = TRUE; + + // By convention, parent gets pipe[0], and child gets pipe[1] + // This means the READ side of stdin pipe goes into pipe[1] + // and the WRITE side of the stdout and stderr pipes go into pipe[1] + if (CreatePipe( &stdin_pipes[1], &stdin_pipes[0], &inherit, 0) == FALSE || + CreatePipe( &stdout_pipes[0], &stdout_pipes[1], &inherit, 0) == FALSE || + CreatePipe( &stderr_pipes[0], &stderr_pipes[1], &inherit, 0) == FALSE) { + + pproc->last_err = GetLastError(); + pproc->lerrno = E_SCALL; + return((HANDLE)pproc); + } + + // + // Mark the parent sides of the pipes as non-inheritable + // + if (SetHandleInformation(stdin_pipes[0], + HANDLE_FLAG_INHERIT, 0) == FALSE || + SetHandleInformation(stdout_pipes[0], + HANDLE_FLAG_INHERIT, 0) == FALSE || + SetHandleInformation(stderr_pipes[0], + HANDLE_FLAG_INHERIT, 0) == FALSE) { + + pproc->last_err = GetLastError(); + pproc->lerrno = E_SCALL; + return((HANDLE)pproc); + } + pproc->sv_stdin[0] = (int) stdin_pipes[0]; + pproc->sv_stdin[1] = (int) stdin_pipes[1]; + pproc->sv_stdout[0] = (int) stdout_pipes[0]; + pproc->sv_stdout[1] = (int) stdout_pipes[1]; + pproc->sv_stderr[0] = (int) stderr_pipes[0]; + pproc->sv_stderr[1] = (int) stderr_pipes[1]; + + pproc->using_pipes = 1; + + pproc->lerrno = 0; + + return((HANDLE)pproc); +} + + + HANDLE +process_init_fd(HANDLE stdinh, HANDLE stdouth, HANDLE stderrh) +{ + sub_process *pproc; + + pproc = malloc(sizeof(*pproc)); + memset(pproc, 0, sizeof(*pproc)); + + /* + * Just pass the provided file handles to the 'child side' of the + * pipe, bypassing pipes altogether. + */ + pproc->sv_stdin[1] = (int) stdinh; + pproc->sv_stdout[1] = (int) stdouth; + pproc->sv_stderr[1] = (int) stderrh; + + pproc->last_err = pproc->lerrno = 0; + + return((HANDLE)pproc); +} + + +static HANDLE +find_file(char *exec_path, LPOFSTRUCT file_info) +{ + HANDLE exec_handle; + char *fname; + char *ext; + + fname = malloc(strlen(exec_path) + 5); + strcpy(fname, exec_path); + ext = fname + strlen(fname); + + strcpy(ext, ".exe"); + if ((exec_handle = (HANDLE)OpenFile(fname, file_info, + OF_READ | OF_SHARE_COMPAT)) != (HANDLE)HFILE_ERROR) { + free(fname); + return(exec_handle); + } + + strcpy(ext, ".cmd"); + if ((exec_handle = (HANDLE)OpenFile(fname, file_info, + OF_READ | OF_SHARE_COMPAT)) != (HANDLE)HFILE_ERROR) { + free(fname); + return(exec_handle); + } + + strcpy(ext, ".bat"); + if ((exec_handle = (HANDLE)OpenFile(fname, file_info, + OF_READ | OF_SHARE_COMPAT)) != (HANDLE)HFILE_ERROR) { + free(fname); + return(exec_handle); + } + + /* should .com come before this case? */ + if ((exec_handle = (HANDLE)OpenFile(exec_path, file_info, + OF_READ | OF_SHARE_COMPAT)) != (HANDLE)HFILE_ERROR) { + free(fname); + return(exec_handle); + } + + strcpy(ext, ".com"); + if ((exec_handle = (HANDLE)OpenFile(fname, file_info, + OF_READ | OF_SHARE_COMPAT)) != (HANDLE)HFILE_ERROR) { + free(fname); + return(exec_handle); + } + + free(fname); + return(exec_handle); +} + + +/* + * Description: Create the child process to be helped + * + * Returns: + * + * Notes/Dependencies: + */ +long +process_begin( + HANDLE proc, + char **argv, + char **envp, + char *exec_path, + char *as_user) +{ + sub_process *pproc = (sub_process *)proc; + char *shell_name = 0; + int file_not_found=0; + HANDLE exec_handle; + char buf[256]; + DWORD bytes_returned; + DWORD flags; + char *command_line; + STARTUPINFO startInfo; + PROCESS_INFORMATION procInfo; + char *envblk=NULL; + OFSTRUCT file_info; + + + /* + * Shell script detection... if the exec_path starts with #! then + * we want to exec shell-script-name exec-path, not just exec-path + * NT doesn't recognize #!/bin/sh or #!/etc/Tivoli/bin/perl. We do not + * hard-code the path to the shell or perl or whatever: Instead, we + * assume it's in the path somewhere (generally, the NT tools + * bin directory) + * We use OpenFile here because it is capable of searching the Path. + */ + + exec_handle = find_file(exec_path, &file_info); + + /* + * If we couldn't open the file, just assume that Windows32 will be able + * to find and execute it. + */ + if (exec_handle == (HANDLE)HFILE_ERROR) { + file_not_found++; + } + else { + /* Attempt to read the first line of the file */ + if (ReadFile( exec_handle, + buf, sizeof(buf) - 1, /* leave room for trailing NULL */ + &bytes_returned, 0) == FALSE || bytes_returned < 2) { + + pproc->last_err = GetLastError(); + pproc->lerrno = E_IO; + CloseHandle(exec_handle); + return(-1); + } + if (buf[0] == '#' && buf[1] == '!') { + /* + * This is a shell script... Change the command line from + * exec_path args to shell_name exec_path args + */ + char *p; + + /* Make sure buf is NULL terminated */ + buf[bytes_returned] = 0; + /* + * Depending on the file system type, etc. the first line + * of the shell script may end with newline or newline-carriage-return + * Whatever it ends with, cut it off. + */ + p= strchr(buf, '\n'); + if (p) + *p = 0; + p = strchr(buf, '\r'); + if (p) + *p = 0; + + /* + * Find base name of shell + */ + shell_name = strrchr( buf, '/'); + if (shell_name) { + shell_name++; + } else { + shell_name = &buf[2];/* skipping "#!" */ + } + + } + CloseHandle(exec_handle); + } + + flags = 0; + + if (file_not_found) + command_line = make_command_line( shell_name, exec_path, argv); + else + command_line = make_command_line( shell_name, file_info.szPathName, + argv); + + if ( command_line == NULL ) { + pproc->last_err = 0; + pproc->lerrno = E_NO_MEM; + return(-1); + } + + if (envp) { + if (arr2envblk(envp, &envblk) ==FALSE) { + pproc->last_err = 0; + pproc->lerrno = E_NO_MEM; + free( command_line ); + return(-1); + } + } + + if ((shell_name) || (file_not_found)) { + exec_path = 0; /* Search for the program in %Path% */ + } else { + exec_path = file_info.szPathName; + } + + /* + * Set up inherited stdin, stdout, stderr for child + */ + GetStartupInfo(&startInfo); + startInfo.dwFlags = STARTF_USESTDHANDLES; + startInfo.lpReserved = 0; + startInfo.cbReserved2 = 0; + startInfo.lpReserved2 = 0; + startInfo.lpTitle = shell_name ? shell_name : exec_path; + startInfo.hStdInput = (HANDLE)pproc->sv_stdin[1]; + startInfo.hStdOutput = (HANDLE)pproc->sv_stdout[1]; + startInfo.hStdError = (HANDLE)pproc->sv_stderr[1]; + + if (as_user) { + if (envblk) free(envblk); + return -1; + } else { + DB (DB_JOBS, ("CreateProcess(%s,%s,...)\n", + exec_path ? exec_path : "NULL", + command_line ? command_line : "NULL")); + if (CreateProcess( + exec_path, + command_line, + NULL, + 0, /* default security attributes for thread */ + TRUE, /* inherit handles (e.g. helper pipes, oserv socket) */ + flags, + envblk, + 0, /* default starting directory */ + &startInfo, + &procInfo) == FALSE) { + + pproc->last_err = GetLastError(); + pproc->lerrno = E_FORK; + fprintf(stderr, "process_begin: CreateProcess(%s, %s, ...) failed.\n", exec_path, command_line); + if (envblk) free(envblk); + free( command_line ); + return(-1); + } + } + + pproc->pid = (int)procInfo.hProcess; + /* Close the thread handle -- we'll just watch the process */ + CloseHandle(procInfo.hThread); + + /* Close the halves of the pipes we don't need */ + if (pproc->sv_stdin) { + CloseHandle((HANDLE)pproc->sv_stdin[1]); + (HANDLE)pproc->sv_stdin[1] = 0; + } + if (pproc->sv_stdout) { + CloseHandle((HANDLE)pproc->sv_stdout[1]); + (HANDLE)pproc->sv_stdout[1] = 0; + } + if (pproc->sv_stderr) { + CloseHandle((HANDLE)pproc->sv_stderr[1]); + (HANDLE)pproc->sv_stderr[1] = 0; + } + + free( command_line ); + if (envblk) free(envblk); + pproc->lerrno=0; + return 0; +} + + + +static DWORD +proc_stdin_thread(sub_process *pproc) +{ + DWORD in_done; + for (;;) { + if (WriteFile( (HANDLE) pproc->sv_stdin[0], pproc->inp, pproc->incnt, + &in_done, NULL) == FALSE) + _endthreadex(0); + // This if should never be true for anonymous pipes, but gives + // us a chance to change I/O mechanisms later + if (in_done < pproc->incnt) { + pproc->incnt -= in_done; + pproc->inp += in_done; + } else { + _endthreadex(0); + } + } + return 0; // for compiler warnings only.. not reached +} + +static DWORD +proc_stdout_thread(sub_process *pproc) +{ + DWORD bufsize = 1024; + char c; + DWORD nread; + pproc->outp = malloc(bufsize); + if (pproc->outp == NULL) + _endthreadex(0); + pproc->outcnt = 0; + + for (;;) { + if (ReadFile( (HANDLE)pproc->sv_stdout[0], &c, 1, &nread, NULL) + == FALSE) { +/* map_windows32_error_to_string(GetLastError());*/ + _endthreadex(0); + } + if (nread == 0) + _endthreadex(0); + if (pproc->outcnt + nread > bufsize) { + bufsize += nread + 512; + pproc->outp = realloc(pproc->outp, bufsize); + if (pproc->outp == NULL) { + pproc->outcnt = 0; + _endthreadex(0); + } + } + pproc->outp[pproc->outcnt++] = c; + } + return 0; +} + +static DWORD +proc_stderr_thread(sub_process *pproc) +{ + DWORD bufsize = 1024; + char c; + DWORD nread; + pproc->errp = malloc(bufsize); + if (pproc->errp == NULL) + _endthreadex(0); + pproc->errcnt = 0; + + for (;;) { + if (ReadFile( (HANDLE)pproc->sv_stderr[0], &c, 1, &nread, NULL) == FALSE) { + map_windows32_error_to_string(GetLastError()); + _endthreadex(0); + } + if (nread == 0) + _endthreadex(0); + if (pproc->errcnt + nread > bufsize) { + bufsize += nread + 512; + pproc->errp = realloc(pproc->errp, bufsize); + if (pproc->errp == NULL) { + pproc->errcnt = 0; + _endthreadex(0); + } + } + pproc->errp[pproc->errcnt++] = c; + } + return 0; +} + + +/* + * Purpose: collects output from child process and returns results + * + * Description: + * + * Returns: + * + * Notes/Dependencies: + */ + long +process_pipe_io( + HANDLE proc, + char *stdin_data, + int stdin_data_len) +{ + sub_process *pproc = (sub_process *)proc; + bool_t stdin_eof = FALSE, stdout_eof = FALSE, stderr_eof = FALSE; + HANDLE childhand = (HANDLE) pproc->pid; + HANDLE tStdin, tStdout, tStderr; + DWORD dwStdin, dwStdout, dwStderr; + HANDLE wait_list[4]; + DWORD wait_count; + DWORD wait_return; + HANDLE ready_hand; + bool_t child_dead = FALSE; + + + /* + * Create stdin thread, if needed + */ + pproc->inp = stdin_data; + pproc->incnt = stdin_data_len; + if (!pproc->inp) { + stdin_eof = TRUE; + CloseHandle((HANDLE)pproc->sv_stdin[0]); + (HANDLE)pproc->sv_stdin[0] = 0; + } else { + tStdin = (HANDLE) _beginthreadex( 0, 1024, + (unsigned (__stdcall *) (void *))proc_stdin_thread, pproc, 0, + (unsigned int *) &dwStdin); + if (tStdin == 0) { + pproc->last_err = GetLastError(); + pproc->lerrno = E_SCALL; + goto done; + } + } + + /* + * Assume child will produce stdout and stderr + */ + tStdout = (HANDLE) _beginthreadex( 0, 1024, + (unsigned (__stdcall *) (void *))proc_stdout_thread, pproc, 0, + (unsigned int *) &dwStdout); + tStderr = (HANDLE) _beginthreadex( 0, 1024, + (unsigned (__stdcall *) (void *))proc_stderr_thread, pproc, 0, + (unsigned int *) &dwStderr); + + if (tStdout == 0 || tStderr == 0) { + + pproc->last_err = GetLastError(); + pproc->lerrno = E_SCALL; + goto done; + } + + + /* + * Wait for all I/O to finish and for the child process to exit + */ + + while (!stdin_eof || !stdout_eof || !stderr_eof || !child_dead) { + wait_count = 0; + if (!stdin_eof) { + wait_list[wait_count++] = tStdin; + } + if (!stdout_eof) { + wait_list[wait_count++] = tStdout; + } + if (!stderr_eof) { + wait_list[wait_count++] = tStderr; + } + if (!child_dead) { + wait_list[wait_count++] = childhand; + } + + wait_return = WaitForMultipleObjects(wait_count, wait_list, + FALSE, /* don't wait for all: one ready will do */ + child_dead? 1000 :INFINITE); /* after the child dies, subthreads have + one second to collect all remaining output */ + + if (wait_return == WAIT_FAILED) { +/* map_windows32_error_to_string(GetLastError());*/ + pproc->last_err = GetLastError(); + pproc->lerrno = E_SCALL; + goto done; + } + + ready_hand = wait_list[wait_return - WAIT_OBJECT_0]; + + if (ready_hand == tStdin) { + CloseHandle((HANDLE)pproc->sv_stdin[0]); + (HANDLE)pproc->sv_stdin[0] = 0; + CloseHandle(tStdin); + tStdin = 0; + stdin_eof = TRUE; + + } else if (ready_hand == tStdout) { + + CloseHandle((HANDLE)pproc->sv_stdout[0]); + (HANDLE)pproc->sv_stdout[0] = 0; + CloseHandle(tStdout); + tStdout = 0; + stdout_eof = TRUE; + + } else if (ready_hand == tStderr) { + + CloseHandle((HANDLE)pproc->sv_stderr[0]); + (HANDLE)pproc->sv_stderr[0] = 0; + CloseHandle(tStderr); + tStderr = 0; + stderr_eof = TRUE; + + } else if (ready_hand == childhand) { + + if (GetExitCodeProcess(childhand, &pproc->exit_code) == FALSE) { + pproc->last_err = GetLastError(); + pproc->lerrno = E_SCALL; + goto done; + } + child_dead = TRUE; + + } else { + + /* ?? Got back a handle we didn't query ?? */ + pproc->last_err = 0; + pproc->lerrno = E_FAIL; + goto done; + } + } + + done: + if (tStdin != 0) + CloseHandle(tStdin); + if (tStdout != 0) + CloseHandle(tStdout); + if (tStderr != 0) + CloseHandle(tStderr); + + if (pproc->lerrno) + return(-1); + else + return(0); + +} + +/* + * Purpose: collects output from child process and returns results + * + * Description: + * + * Returns: + * + * Notes/Dependencies: + */ + long +process_file_io( + HANDLE proc) +{ + sub_process *pproc; + HANDLE childhand; + DWORD wait_return; + + if (proc == NULL) + pproc = process_wait_for_any_private(); + else + pproc = (sub_process *)proc; + + /* some sort of internal error */ + if (!pproc) + return -1; + + childhand = (HANDLE) pproc->pid; + + /* + * This function is poorly named, and could also be used just to wait + * for child death if you're doing your own pipe I/O. If that is + * the case, close the pipe handles here. + */ + if (pproc->sv_stdin[0]) { + CloseHandle((HANDLE)pproc->sv_stdin[0]); + pproc->sv_stdin[0] = 0; + } + if (pproc->sv_stdout[0]) { + CloseHandle((HANDLE)pproc->sv_stdout[0]); + pproc->sv_stdout[0] = 0; + } + if (pproc->sv_stderr[0]) { + CloseHandle((HANDLE)pproc->sv_stderr[0]); + pproc->sv_stderr[0] = 0; + } + + /* + * Wait for the child process to exit + */ + + wait_return = WaitForSingleObject(childhand, INFINITE); + + if (wait_return != WAIT_OBJECT_0) { +/* map_windows32_error_to_string(GetLastError());*/ + pproc->last_err = GetLastError(); + pproc->lerrno = E_SCALL; + goto done2; + } + + if (GetExitCodeProcess(childhand, &pproc->exit_code) == FALSE) { + pproc->last_err = GetLastError(); + pproc->lerrno = E_SCALL; + } + +done2: + if (pproc->lerrno) + return(-1); + else + return(0); + +} + +/* + * Description: Clean up any leftover handles, etc. It is up to the + * caller to manage and free the input, ouput, and stderr buffers. + */ + void +process_cleanup( + HANDLE proc) +{ + sub_process *pproc = (sub_process *)proc; + int i; + + if (pproc->using_pipes) { + for (i= 0; i <= 1; i++) { + if ((HANDLE)pproc->sv_stdin[i]) + CloseHandle((HANDLE)pproc->sv_stdin[i]); + if ((HANDLE)pproc->sv_stdout[i]) + CloseHandle((HANDLE)pproc->sv_stdout[i]); + if ((HANDLE)pproc->sv_stderr[i]) + CloseHandle((HANDLE)pproc->sv_stderr[i]); + } + } + if ((HANDLE)pproc->pid) + CloseHandle((HANDLE)pproc->pid); + + free(pproc); +} + + +/* + * Description: + * Create a command line buffer to pass to CreateProcess + * + * Returns: the buffer or NULL for failure + * Shell case: sh_name a:/full/path/to/script argv[1] argv[2] ... + * Otherwise: argv[0] argv[1] argv[2] ... + * + * Notes/Dependencies: + * CreateProcess does not take an argv, so this command creates a + * command line for the executable. + */ + +static char * +make_command_line( char *shell_name, char *full_exec_path, char **argv) +{ + int argc = 0; + char** argvi; + int* enclose_in_quotes = NULL; + int* enclose_in_quotes_i; + unsigned int bytes_required = 0; + char* command_line; + char* command_line_i; + int cygwin_mode = 0; /* HAVE_CYGWIN_SHELL */ + int have_sh = 0; /* HAVE_CYGWIN_SHELL */ + +#ifdef HAVE_CYGWIN_SHELL + have_sh = (shell_name != NULL || strstr(full_exec_path, "sh.exe")); + cygwin_mode = 1; +#endif + + if (shell_name && full_exec_path) { + bytes_required + = strlen(shell_name) + 1 + strlen(full_exec_path); + /* + * Skip argv[0] if any, when shell_name is given. + */ + if (*argv) argv++; + /* + * Add one for the intervening space. + */ + if (*argv) bytes_required++; + } + + argvi = argv; + while (*(argvi++)) argc++; + + if (argc) { + enclose_in_quotes = (int*) calloc(1, argc * sizeof(int)); + + if (!enclose_in_quotes) { + return NULL; + } + } + + /* We have to make one pass through each argv[i] to see if we need + * to enclose it in ", so we might as well figure out how much + * memory we'll need on the same pass. + */ + + argvi = argv; + enclose_in_quotes_i = enclose_in_quotes; + while(*argvi) { + char* p = *argvi; + unsigned int backslash_count = 0; + + /* + * We have to enclose empty arguments in ". + */ + if (!(*p)) *enclose_in_quotes_i = 1; + + while(*p) { + switch (*p) { + case '\"': + /* + * We have to insert a backslash for each " + * and each \ that precedes the ". + */ + bytes_required += (backslash_count + 1); + backslash_count = 0; + break; + +#if !defined(HAVE_MKS_SHELL) && !defined(HAVE_CYGWIN_SHELL) + case '\\': + backslash_count++; + break; +#endif + /* + * At one time we set *enclose_in_quotes_i for '*' or '?' to suppress + * wildcard expansion in programs linked with MSVC's SETARGV.OBJ so + * that argv in always equals argv out. This was removed. Say you have + * such a program named glob.exe. You enter + * glob '*' + * at the sh command prompt. Obviously the intent is to make glob do the + * wildcarding instead of sh. If we set *enclose_in_quotes_i for '*' or '?', + * then the command line that glob would see would be + * glob "*" + * and the _setargv in SETARGV.OBJ would _not_ expand the *. + */ + case ' ': + case '\t': + *enclose_in_quotes_i = 1; + /* fall through */ + + default: + backslash_count = 0; + break; + } + + /* + * Add one for each character in argv[i]. + */ + bytes_required++; + + p++; + } + + if (*enclose_in_quotes_i) { + /* + * Add one for each enclosing ", + * and one for each \ that precedes the + * closing ". + */ + bytes_required += (backslash_count + 2); + } + + /* + * Add one for the intervening space. + */ + if (*(++argvi)) bytes_required++; + enclose_in_quotes_i++; + } + + /* + * Add one for the terminating NULL. + */ + bytes_required++; + + command_line = (char*) malloc(bytes_required); + + if (!command_line) { + if (enclose_in_quotes) free(enclose_in_quotes); + return NULL; + } + + command_line_i = command_line; + + if (shell_name && full_exec_path) { + while(*shell_name) { + *(command_line_i++) = *(shell_name++); + } + + *(command_line_i++) = ' '; + + while(*full_exec_path) { + *(command_line_i++) = *(full_exec_path++); + } + + if (*argv) { + *(command_line_i++) = ' '; + } + } + + argvi = argv; + enclose_in_quotes_i = enclose_in_quotes; + + while(*argvi) { + char* p = *argvi; + unsigned int backslash_count = 0; + + if (*enclose_in_quotes_i) { + *(command_line_i++) = '\"'; + } + + while(*p) { + if (*p == '\"') { + if (cygwin_mode && have_sh) { /* HAVE_CYGWIN_SHELL */ + /* instead of a \", cygwin likes "" */ + *(command_line_i++) = '\"'; + } else { + + /* + * We have to insert a backslash for the " + * and each \ that precedes the ". + */ + backslash_count++; + + while(backslash_count) { + *(command_line_i++) = '\\'; + backslash_count--; + }; + } +#if !defined(HAVE_MKS_SHELL) && !defined(HAVE_CYGWIN_SHELL) + } else if (*p == '\\') { + backslash_count++; + } else { + backslash_count = 0; +#endif + } + + /* + * Copy the character. + */ + *(command_line_i++) = *(p++); + } + + if (*enclose_in_quotes_i) { +#if !defined(HAVE_MKS_SHELL) && !defined(HAVE_CYGWIN_SHELL) + /* + * Add one \ for each \ that precedes the + * closing ". + */ + while(backslash_count--) { + *(command_line_i++) = '\\'; + }; +#endif + *(command_line_i++) = '\"'; + } + + /* + * Append an intervening space. + */ + if (*(++argvi)) { + *(command_line_i++) = ' '; + } + + enclose_in_quotes_i++; + } + + /* + * Append the terminating NULL. + */ + *command_line_i = '\0'; + + if (enclose_in_quotes) free(enclose_in_quotes); + return command_line; +} + +/* + * Description: Given an argv and optional envp, launch the process + * using the default stdin, stdout, and stderr handles. + * Also, register process so that process_wait_for_any_private() + * can be used via process_file_io(NULL) or + * process_wait_for_any(). + * + * Returns: + * + * Notes/Dependencies: + */ +HANDLE +process_easy( + char **argv, + char **envp) +{ + HANDLE hIn; + HANDLE hOut; + HANDLE hErr; + HANDLE hProcess; + + if (DuplicateHandle(GetCurrentProcess(), + GetStdHandle(STD_INPUT_HANDLE), + GetCurrentProcess(), + &hIn, + 0, + TRUE, + DUPLICATE_SAME_ACCESS) == FALSE) { + fprintf(stderr, + "process_easy: DuplicateHandle(In) failed (e=%d)\n", + GetLastError()); + return INVALID_HANDLE_VALUE; + } + if (DuplicateHandle(GetCurrentProcess(), + GetStdHandle(STD_OUTPUT_HANDLE), + GetCurrentProcess(), + &hOut, + 0, + TRUE, + DUPLICATE_SAME_ACCESS) == FALSE) { + fprintf(stderr, + "process_easy: DuplicateHandle(Out) failed (e=%d)\n", + GetLastError()); + return INVALID_HANDLE_VALUE; + } + if (DuplicateHandle(GetCurrentProcess(), + GetStdHandle(STD_ERROR_HANDLE), + GetCurrentProcess(), + &hErr, + 0, + TRUE, + DUPLICATE_SAME_ACCESS) == FALSE) { + fprintf(stderr, + "process_easy: DuplicateHandle(Err) failed (e=%d)\n", + GetLastError()); + return INVALID_HANDLE_VALUE; + } + + hProcess = process_init_fd(hIn, hOut, hErr); + + if (process_begin(hProcess, argv, envp, argv[0], NULL)) { + fake_exits_pending++; + ((sub_process*) hProcess)->exit_code = process_last_err(hProcess); + + /* close up unused handles */ + CloseHandle(hIn); + CloseHandle(hOut); + CloseHandle(hErr); + } + + process_register(hProcess); + + return hProcess; +} diff --git a/src/mkutil/make/w32/subproc/w32err.c b/src/mkutil/make/w32/subproc/w32err.c new file mode 100644 index 00000000..afe7668f --- /dev/null +++ b/src/mkutil/make/w32/subproc/w32err.c @@ -0,0 +1,51 @@ +#include +#include "w32err.h" + +/* + * Description: the windows32 version of perror() + * + * Returns: a pointer to a static error + * + * Notes/Dependencies: I got this from + * comp.os.ms-windows.programmer.win32 + */ +char * +map_windows32_error_to_string (DWORD ercode) { +/* __declspec (thread) necessary if you will use multiple threads */ +__declspec (thread) static char szMessageBuffer[128]; + + /* Fill message buffer with a default message in + * case FormatMessage fails + */ + wsprintf (szMessageBuffer, "Error %ld", ercode); + + /* + * Special code for winsock error handling. + */ + if (ercode > WSABASEERR) { + HMODULE hModule = GetModuleHandle("wsock32"); + if (hModule != NULL) { + FormatMessage(FORMAT_MESSAGE_FROM_HMODULE, + hModule, + ercode, + LANG_NEUTRAL, + szMessageBuffer, + sizeof(szMessageBuffer), + NULL); + FreeLibrary(hModule); + } + } else { + /* + * Default system message handling + */ + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + ercode, + LANG_NEUTRAL, + szMessageBuffer, + sizeof(szMessageBuffer), + NULL); + } + return szMessageBuffer; +} + diff --git a/src/mkutil/n.bat b/src/mkutil/n.bat index a3013c96..bbe0d42d 100644 --- a/src/mkutil/n.bat +++ b/src/mkutil/n.bat @@ -6,6 +6,22 @@ copy mklink-b.bat ..\bin copy mknbat-l.bat ..\bin copy mknbat-b.bat ..\bin +cl -Zi -I. false.c +@if errorlevel 1 goto failure +copy false.exe ..\bin + +cl -Zi -I. true.c +@if errorlevel 1 goto failure +copy true.exe ..\bin + +cl -Zi -I. foster.c +@if errorlevel 1 goto failure +copy foster.exe ..\bin + +cl -Zi -I. loginsh.c +@if errorlevel 1 goto failure +copy loginsh.exe ..\bin + cl -Zi -I. bin2c.c @if errorlevel 1 goto failure copy bin2c.exe ..\bin diff --git a/src/mkutil/touch.exe b/src/mkutil/touch.exe index 84db3811603fd4ae226377008bc68c8b7cf9aa8c..283fc3c364dce4937fd63627630968e0df96cfe4 100644 GIT binary patch delta 175 zcmZ2;fMxRmmI*Idf-_z0H@@)|W@-@JY%LNg2%@K{T1YW52u;3V-vy*L$2fds2hxlE zJy<~8K%a$@Kvk2!r0xT8x1*j~Ey>J@DakKQ&d@7JNn!v1$8I*q delta 168 zcmdmdfMv}AmI*Id_&avnZG7V^%)}tH*;*u05JXQ?wUA#0b>jY!y>ll^Ii9lpK?rU0RZv6H}63nw+6mkdnjz0Q7n_xc~qF diff --git a/src/mkutil/touch.obj b/src/mkutil/touch.obj new file mode 100644 index 0000000000000000000000000000000000000000..8d2e11aab37f1927aa48fc961232c0e34ae45ac0 GIT binary patch literal 3262 zcmZ`+Z){uD6+iFUab6vl{8^PV#86VtX2=ls3l1JQH0pA2)}dh zdyZXcSMu+j`@83yd+xdKzI%LHX`wNDU=(e#d`?JIF{| zlclL$V?OnsN~9`8?*}BK;qfqaJY+c5j~!nL&l27^vI(pV&<5R zV5pa*`OcF=Gx{lokA>1SpgJ8NIEb5r_oK09mASOxuuR-tI;b9(=NBN{axI6OFL zM0=>MqcLb59nRfd`2DLBAey4i7a|nu;7rUSZAww45Z!l+?F2?KNKfLY)V(U9Da)~Q zPLuuYc6f_GPlcX3+s}iw&CN~TBV~@A@4dzOm)KQo7H#0!;5?X3+PQWwG`0>V3sWg3 zeD6%mb%D6z`ESjo3RcpwSZNX5n^wFuWoxktg)T*ZSy8H{2IcmbIxGK+KD!%S`%7BozlVSF9XDRP z@J6^AuSpKwg^}>Hdm*tjNbTepJeuTJD}^ z(GT&!%FQJ#iG#QygNRiA7Oci1(53cY{06FSJmRV%oWAzURY7Q#kCbX$bIpjWRbw@1 zR9+5Np=Z{_T54{rhP7ON!+9Lk&$XY$UifMGg_NTKvrgN3*Q$91v(ozDs<|SBzNVHt4TEcXJ$X-Kx0;C&W2i6Z5XQv9%*e*NvE{RVKp@x0-1tU4!Uc25w+Jr8 zuAgn3$~Bj&=As*0s>c3YDX)+da^vq;H z{IZAWACT@5+}n`&EOyf;b?GZeI|SE;L!k@l0HnKxGy;jg;2}B%Nk$N_OB0a3D@G^l z9P7w0zalJEaWrKt3hl#~N_@)(XdD=%8DIaFy9$lK^D za67#SY^Rrj9rP-&lRgA?(I>!fu?g1LD^?Z-?xg*|U33_DFC78yp@)GzbPm`{N#I_Z z2JWNt!22iEgE5pYBUd0J0N$ z23K${nYDDoFv3_a#d8;M$K>=pZh(BQr`W3_YK#mgb9)@moQ*&;58qhS?R0&5oetd-rcLMsP*ZKyUdRju z6n7Z$9kttb^mY8WD&yOM z2s*aoFN1X`QFIE(rWj>ym5j-Z*W(osSqgXgm~!hDXv|0*5epcL3`;UPdRta}|7^8{ ztX@P+GD7yorOvMqq15$f*THW2;RDF6SD-&TA2gv;pS|oeBIf2?C%C-9xYXhNus5!S zUc>CNHP);_PyvOjR&GPjU42Igv}^2SfB)biI)|>%@t8q6US|?~_1~K3 contributed the Cray support. + + There are some preprocessor constants that can + be defined when compiling for your specific system, for + improved efficiency; however, the defaults should be okay. + + The general concept of this implementation is to keep + track of all alloca-allocated blocks, and reclaim any + that are found to be deeper in the stack than the current + invocation. This heuristic does not reclaim storage as + soon as it becomes invalid, but it will do so eventually. + + As a special case, alloca(0) reclaims storage without + allocating any. It is a good idea to use alloca(0) in + your main control loop, etc. to force garbage collection. */ + +/* + +@deftypefn Replacement void* alloca (size_t @var{size}) + +This function allocates memory which will be automatically reclaimed +after the procedure exits. The @libib{} implementation does not free +the memory immediately but will do so eventually during subsequent +calls to this function. Memory is allocated using @code{xmalloc} under +normal circumstances. + +The header file @file{alloca-conf.h} can be used in conjunction with the +GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make +available this function. The @code{AC_FUNC_ALLOCA} test requires that +client code use a block of preprocessor code to be safe (see the Autoconf +manual for more); this header incorporates that logic and more, including +the possibility of a GCC built-in function. + +@end deftypefn + +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif + +/* These variables are used by the ASTRDUP implementation that relies + on C_alloca. */ +const char *libiberty_optr; +char *libiberty_nptr; +unsigned long libiberty_len; + +/* If your stack is a linked list of frames, you have to + provide an "address metric" ADDRESS_FUNCTION macro. */ + +#if defined (CRAY) && defined (CRAY_STACKSEG_END) +static long i00afunc (); +#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) +#else +#define ADDRESS_FUNCTION(arg) &(arg) +#endif + +#ifndef NULL +#define NULL 0 +#endif + +/* Define STACK_DIRECTION if you know the direction of stack + growth for your system; otherwise it will be automatically + deduced at run-time. + + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ + +#ifndef STACK_DIRECTION +#define STACK_DIRECTION 0 /* Direction unknown. */ +#endif + +#if STACK_DIRECTION != 0 + +#define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ + +#else /* STACK_DIRECTION == 0; need run-time code. */ + +static int stack_dir; /* 1 or -1 once known. */ +#define STACK_DIR stack_dir + +static void +find_stack_direction () +{ + static char *addr = NULL; /* Address of first `dummy', once known. */ + auto char dummy; /* To get stack address. */ + + if (addr == NULL) + { /* Initial entry. */ + addr = ADDRESS_FUNCTION (dummy); + + find_stack_direction (); /* Recurse once. */ + } + else + { + /* Second entry. */ + if (ADDRESS_FUNCTION (dummy) > addr) + stack_dir = 1; /* Stack grew upward. */ + else + stack_dir = -1; /* Stack grew downward. */ + } +} + +#endif /* STACK_DIRECTION == 0 */ + +/* An "alloca header" is used to: + (a) chain together all alloca'ed blocks; + (b) keep track of stack depth. + + It is very important that sizeof(header) agree with malloc + alignment chunk size. The following default should work okay. */ + +#ifndef ALIGN_SIZE +#define ALIGN_SIZE sizeof(double) +#endif + +typedef union hdr +{ + char align[ALIGN_SIZE]; /* To force sizeof(header). */ + struct + { + union hdr *next; /* For chaining headers. */ + char *deep; /* For stack depth measure. */ + } h; +} header; + +static header *last_alloca_header = NULL; /* -> last alloca header. */ + +/* Return a pointer to at least SIZE bytes of storage, + which will be automatically reclaimed upon exit from + the procedure that called alloca. Originally, this space + was supposed to be taken from the current stack frame of the + caller, but that method cannot be made to work for some + implementations of C, for example under Gould's UTX/32. */ + +/* @undocumented C_alloca */ + +PTR +C_alloca (size) + size_t size; +{ + auto char probe; /* Probes stack depth: */ + register char *depth = ADDRESS_FUNCTION (probe); + +#if STACK_DIRECTION == 0 + if (STACK_DIR == 0) /* Unknown growth direction. */ + find_stack_direction (); +#endif + + /* Reclaim garbage, defined as all alloca'd storage that + was allocated from deeper in the stack than currently. */ + + { + register header *hp; /* Traverses linked list. */ + + for (hp = last_alloca_header; hp != NULL;) + if ((STACK_DIR > 0 && hp->h.deep > depth) + || (STACK_DIR < 0 && hp->h.deep < depth)) + { + register header *np = hp->h.next; + + free ((PTR) hp); /* Collect garbage. */ + + hp = np; /* -> next header. */ + } + else + break; /* Rest are not deeper. */ + + last_alloca_header = hp; /* -> last valid storage. */ + } + + if (size == 0) + return NULL; /* No allocation required. */ + + /* Allocate combined header + user data storage. */ + + { + register PTR new = xmalloc (sizeof (header) + size); + /* Address of header. */ + + if (new == 0) + abort(); + + ((header *) new)->h.next = last_alloca_header; + ((header *) new)->h.deep = depth; + + last_alloca_header = (header *) new; + + /* User storage begins just after header. */ + + return (PTR) ((char *) new + sizeof (header)); + } +} + +#if defined (CRAY) && defined (CRAY_STACKSEG_END) + +#ifdef DEBUG_I00AFUNC +#include +#endif + +#ifndef CRAY_STACK +#define CRAY_STACK +#ifndef CRAY2 +/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ +struct stack_control_header + { + long shgrow:32; /* Number of times stack has grown. */ + long shaseg:32; /* Size of increments to stack. */ + long shhwm:32; /* High water mark of stack. */ + long shsize:32; /* Current size of stack (all segments). */ + }; + +/* The stack segment linkage control information occurs at + the high-address end of a stack segment. (The stack + grows from low addresses to high addresses.) The initial + part of the stack segment linkage control information is + 0200 (octal) words. This provides for register storage + for the routine which overflows the stack. */ + +struct stack_segment_linkage + { + long ss[0200]; /* 0200 overflow words. */ + long sssize:32; /* Number of words in this segment. */ + long ssbase:32; /* Offset to stack base. */ + long:32; + long sspseg:32; /* Offset to linkage control of previous + segment of stack. */ + long:32; + long sstcpt:32; /* Pointer to task common address block. */ + long sscsnm; /* Private control structure number for + microtasking. */ + long ssusr1; /* Reserved for user. */ + long ssusr2; /* Reserved for user. */ + long sstpid; /* Process ID for pid based multi-tasking. */ + long ssgvup; /* Pointer to multitasking thread giveup. */ + long sscray[7]; /* Reserved for Cray Research. */ + long ssa0; + long ssa1; + long ssa2; + long ssa3; + long ssa4; + long ssa5; + long ssa6; + long ssa7; + long sss0; + long sss1; + long sss2; + long sss3; + long sss4; + long sss5; + long sss6; + long sss7; + }; + +#else /* CRAY2 */ +/* The following structure defines the vector of words + returned by the STKSTAT library routine. */ +struct stk_stat + { + long now; /* Current total stack size. */ + long maxc; /* Amount of contiguous space which would + be required to satisfy the maximum + stack demand to date. */ + long high_water; /* Stack high-water mark. */ + long overflows; /* Number of stack overflow ($STKOFEN) calls. */ + long hits; /* Number of internal buffer hits. */ + long extends; /* Number of block extensions. */ + long stko_mallocs; /* Block allocations by $STKOFEN. */ + long underflows; /* Number of stack underflow calls ($STKRETN). */ + long stko_free; /* Number of deallocations by $STKRETN. */ + long stkm_free; /* Number of deallocations by $STKMRET. */ + long segments; /* Current number of stack segments. */ + long maxs; /* Maximum number of stack segments so far. */ + long pad_size; /* Stack pad size. */ + long current_address; /* Current stack segment address. */ + long current_size; /* Current stack segment size. This + number is actually corrupted by STKSTAT to + include the fifteen word trailer area. */ + long initial_address; /* Address of initial segment. */ + long initial_size; /* Size of initial segment. */ + }; + +/* The following structure describes the data structure which trails + any stack segment. I think that the description in 'asdef' is + out of date. I only describe the parts that I am sure about. */ + +struct stk_trailer + { + long this_address; /* Address of this block. */ + long this_size; /* Size of this block (does not include + this trailer). */ + long unknown2; + long unknown3; + long link; /* Address of trailer block of previous + segment. */ + long unknown5; + long unknown6; + long unknown7; + long unknown8; + long unknown9; + long unknown10; + long unknown11; + long unknown12; + long unknown13; + long unknown14; + }; + +#endif /* CRAY2 */ +#endif /* not CRAY_STACK */ + +#ifdef CRAY2 +/* Determine a "stack measure" for an arbitrary ADDRESS. + I doubt that "lint" will like this much. */ + +static long +i00afunc (long *address) +{ + struct stk_stat status; + struct stk_trailer *trailer; + long *block, size; + long result = 0; + + /* We want to iterate through all of the segments. The first + step is to get the stack status structure. We could do this + more quickly and more directly, perhaps, by referencing the + $LM00 common block, but I know that this works. */ + + STKSTAT (&status); + + /* Set up the iteration. */ + + trailer = (struct stk_trailer *) (status.current_address + + status.current_size + - 15); + + /* There must be at least one stack segment. Therefore it is + a fatal error if "trailer" is null. */ + + if (trailer == 0) + abort (); + + /* Discard segments that do not contain our argument address. */ + + while (trailer != 0) + { + block = (long *) trailer->this_address; + size = trailer->this_size; + if (block == 0 || size == 0) + abort (); + trailer = (struct stk_trailer *) trailer->link; + if ((block <= address) && (address < (block + size))) + break; + } + + /* Set the result to the offset in this segment and add the sizes + of all predecessor segments. */ + + result = address - block; + + if (trailer == 0) + { + return result; + } + + do + { + if (trailer->this_size <= 0) + abort (); + result += trailer->this_size; + trailer = (struct stk_trailer *) trailer->link; + } + while (trailer != 0); + + /* We are done. Note that if you present a bogus address (one + not in any segment), you will get a different number back, formed + from subtracting the address of the first block. This is probably + not what you want. */ + + return (result); +} + +#else /* not CRAY2 */ +/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. + Determine the number of the cell within the stack, + given the address of the cell. The purpose of this + routine is to linearize, in some sense, stack addresses + for alloca. */ + +static long +i00afunc (long address) +{ + long stkl = 0; + + long size, pseg, this_segment, stack; + long result = 0; + + struct stack_segment_linkage *ssptr; + + /* Register B67 contains the address of the end of the + current stack segment. If you (as a subprogram) store + your registers on the stack and find that you are past + the contents of B67, you have overflowed the segment. + + B67 also points to the stack segment linkage control + area, which is what we are really interested in. */ + + stkl = CRAY_STACKSEG_END (); + ssptr = (struct stack_segment_linkage *) stkl; + + /* If one subtracts 'size' from the end of the segment, + one has the address of the first word of the segment. + + If this is not the first segment, 'pseg' will be + nonzero. */ + + pseg = ssptr->sspseg; + size = ssptr->sssize; + + this_segment = stkl - size; + + /* It is possible that calling this routine itself caused + a stack overflow. Discard stack segments which do not + contain the target address. */ + + while (!(this_segment <= address && address <= stkl)) + { +#ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); +#endif + if (pseg == 0) + break; + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + this_segment = stkl - size; + } + + result = address - this_segment; + + /* If you subtract pseg from the current end of the stack, + you get the address of the previous stack segment's end. + This seems a little convoluted to me, but I'll bet you save + a cycle somewhere. */ + + while (pseg != 0) + { +#ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o\n", pseg, size); +#endif + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + result += size; + } + return (result); +} + +#endif /* not CRAY2 */ +#endif /* CRAY */ diff --git a/src/mkutil/tradcpp/alloca.obj b/src/mkutil/tradcpp/alloca.obj new file mode 100644 index 0000000000000000000000000000000000000000..35503fbd4aa8a47cb26723e7556e721ecea838c8 GIT binary patch literal 2592 zcmZuzTZkKF6h4#Nrn8&fv`uSms~x5G;Z9eX(=6ysyiRdN2 zrCE!|A&QQx`DWAM@N>vJu<<;_FRF%i*6`R?V6Kw^qNyO!$`Cp!_&t5f_WO)OjRSlO zySK65okgvbYn6?%p5K4?iSY@=t2lD_v8N8EQ^yqqO|Z1AeZ8lejoTb0T=cC>-QQJ*{6FpgZ$YYpRE zwpKS9Z0yhCF;-z*599rg2a5FHENj)ZaNoa?E8O5VLC;%fwN>R@)36UIJFVr4S|dXK zD4$b^&nauj7?#2JPZt}*z#PoLOfFm2o5tIqao~gWu8m~+-PQf!>SFjBEZ#aB$u#cj z9(Q%;fi{TwUa^r(9|Flj_pyy+x&p*s;vikMkxYv~gF<)RMlywQeh5yC-E~I-0gv*(suQ@d!Ll7;>7RKkW#1jld#~T(RPKtayG1>^p8y2EbNXwdV z(Mh0~=rfQO?^U4HLdREy?_Z2Qg0!rkyXXoKA9skpchOHkmfzo8-Ay3N@82%6z9G&- zK5;#QHiOf`2yKU4DbmAgdQQB4S6?JAlK6ikQ-?haudx%Dk4EVKyLzXqjw;; z)BBL4^ayX2A8*+sHf{aoS z8@~!s6FrDs&fFeK>;S&^&MAGSuqUq8i}{;s2?-iJZvQNy*hqG^FIYO3$pZ4Ysu!{C%;88~Ytlbu#xq#0Y(E3A_#|GzWppmde4~i6 zxqPkR=1FiUd$uCBQJDEH%9a|Mv(J1dtO)sTbF)^V=1bNPlH<`N9=^u{?H(c3vc=&j z1cy}3(r`@ux2_7dSDeSd;wac>p6wv|8(4+a9Pi8L>Br10$2)&r%f0i?^}V05rnIH^ z4@(d_zZ73)=fPX(+5Z<3$|ktzB@<(b#GMLcGPy6g4==j)j!T+%%=OPZMpdJ%^Ou79 M^%e(ohx$wZ0%0Vp+W-In literal 0 HcmV?d00001 diff --git a/src/mkutil/tradcpp/ansidecl.h b/src/mkutil/tradcpp/ansidecl.h new file mode 100644 index 00000000..ca0bef36 --- /dev/null +++ b/src/mkutil/tradcpp/ansidecl.h @@ -0,0 +1,295 @@ +/* ANSI and traditional C compatability macros + Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + +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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* ANSI and traditional C compatibility macros + + ANSI C is assumed if __STDC__ is #defined. + + Macro ANSI C definition Traditional C definition + ----- ---- - ---------- ----------- - ---------- + ANSI_PROTOTYPES 1 not defined + PTR `void *' `char *' + PTRCONST `void *const' `char *' + LONG_DOUBLE `long double' `double' + const not defined `' + volatile not defined `' + signed not defined `' + VA_START(ap, var) va_start(ap, var) va_start(ap) + + Note that it is safe to write "void foo();" indicating a function + with no return value, in all K+R compilers we have been able to test. + + For declaring functions with prototypes, we also provide these: + + PARAMS ((prototype)) + -- for functions which take a fixed number of arguments. Use this + when declaring the function. When defining the function, write a + K+R style argument list. For example: + + char *strcpy PARAMS ((char *dest, char *source)); + ... + char * + strcpy (dest, source) + char *dest; + char *source; + { ... } + + + VPARAMS ((prototype, ...)) + -- for functions which take a variable number of arguments. Use + PARAMS to declare the function, VPARAMS to define it. For example: + + int printf PARAMS ((const char *format, ...)); + ... + int + printf VPARAMS ((const char *format, ...)) + { + ... + } + + For writing functions which take variable numbers of arguments, we + also provide the VA_OPEN, VA_CLOSE, and VA_FIXEDARG macros. These + hide the differences between K+R and C89 more + thoroughly than the simple VA_START() macro mentioned above. + + VA_OPEN and VA_CLOSE are used *instead of* va_start and va_end. + Immediately after VA_OPEN, put a sequence of VA_FIXEDARG calls + corresponding to the list of fixed arguments. Then use va_arg + normally to get the variable arguments, or pass your va_list object + around. You do not declare the va_list yourself; VA_OPEN does it + for you. + + Here is a complete example: + + int + printf VPARAMS ((const char *format, ...)) + { + int result; + + VA_OPEN (ap, format); + VA_FIXEDARG (ap, const char *, format); + + result = vfprintf (stdout, format, ap); + VA_CLOSE (ap); + + return result; + } + + + You can declare variables either before or after the VA_OPEN, + VA_FIXEDARG sequence. Also, VA_OPEN and VA_CLOSE are the beginning + and end of a block. They must appear at the same nesting level, + and any variables declared after VA_OPEN go out of scope at + VA_CLOSE. Unfortunately, with a K+R compiler, that includes the + argument list. You can have multiple instances of VA_OPEN/VA_CLOSE + pairs in a single function in case you need to traverse the + argument list more than once. + + For ease of writing code which uses GCC extensions but needs to be + portable to other compilers, we provide the GCC_VERSION macro that + simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various + wrappers around __attribute__. Also, __extension__ will be #defined + to nothing if it doesn't work. See below. + + This header also defines a lot of obsolete macros: + CONST, VOLATILE, SIGNED, PROTO, EXFUN, DEFUN, DEFUN_VOID, + AND, DOTS, NOARGS. Don't use them. */ + +#ifndef _ANSIDECL_H +#define _ANSIDECL_H 1 + +/* Every source file includes this file, + so they will all get the switch for lint. */ +/* LINTLIBRARY */ + +/* Using MACRO(x,y) in cpp #if conditionals does not work with some + older preprocessors. Thus we can't define something like this: + +#define HAVE_GCC_VERSION(MAJOR, MINOR) \ + (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR))) + +and then test "#if HAVE_GCC_VERSION(2,7)". + +So instead we use the macro below and test it against specific values. */ + +/* This macro simplifies testing whether we are using gcc, and if it + is of a particular minimum version. (Both major & minor numbers are + significant.) This macro will evaluate to 0 if we are not using + gcc at all. */ +#ifndef GCC_VERSION +#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) +#endif /* GCC_VERSION */ + +#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32) +/* All known AIX compilers implement these things (but don't always + define __STDC__). The RISC/OS MIPS compiler defines these things + in SVR4 mode, but does not define __STDC__. */ + +#define ANSI_PROTOTYPES 1 +#define PTR void * +#define PTRCONST void *const +#define LONG_DOUBLE long double + +#define PARAMS(ARGS) ARGS +#define VPARAMS(ARGS) ARGS +#define VA_START(VA_LIST, VAR) va_start(VA_LIST, VAR) + +/* variadic function helper macros */ +/* "struct Qdmy" swallows the semicolon after VA_OPEN/VA_FIXEDARG's + use without inhibiting further decls and without declaring an + actual variable. */ +#define VA_OPEN(AP, VAR) { va_list AP; va_start(AP, VAR); { struct Qdmy +#define VA_CLOSE(AP) } va_end(AP); } +#define VA_FIXEDARG(AP, T, N) struct Qdmy + +#undef const +#undef volatile +#undef signed + +/* inline requires special treatment; it's in C99, and GCC >=2.7 supports + it too, but it's not in C89. */ +#undef inline +#if __STDC_VERSION__ > 199901L +/* it's a keyword */ +#else +# if GCC_VERSION >= 2007 +# define inline __inline__ /* __inline__ prevents -pedantic warnings */ +# else +# define inline /* nothing */ +# endif +#endif + +/* These are obsolete. Do not use. */ +#ifndef IN_GCC +#define CONST const +#define VOLATILE volatile +#define SIGNED signed + +#define PROTO(type, name, arglist) type name arglist +#define EXFUN(name, proto) name proto +#define DEFUN(name, arglist, args) name(args) +#define DEFUN_VOID(name) name(void) +#define AND , +#define DOTS , ... +#define NOARGS void +#endif /* ! IN_GCC */ + +#else /* Not ANSI C. */ + +#undef ANSI_PROTOTYPES +#define PTR char * +#define PTRCONST PTR +#define LONG_DOUBLE double + +#define PARAMS(args) () +#define VPARAMS(args) (va_alist) va_dcl +#define VA_START(va_list, var) va_start(va_list) + +#define VA_OPEN(AP, VAR) { va_list AP; va_start(AP); { struct Qdmy +#define VA_CLOSE(AP) } va_end(AP); } +#define VA_FIXEDARG(AP, TYPE, NAME) TYPE NAME = va_arg(AP, TYPE) + +/* some systems define these in header files for non-ansi mode */ +#undef const +#undef volatile +#undef signed +#undef inline +#define const +#define volatile +#define signed +#define inline + +#ifndef IN_GCC +#define CONST +#define VOLATILE +#define SIGNED + +#define PROTO(type, name, arglist) type name () +#define EXFUN(name, proto) name() +#define DEFUN(name, arglist, args) name arglist args; +#define DEFUN_VOID(name) name() +#define AND ; +#define DOTS +#define NOARGS +#endif /* ! IN_GCC */ + +#endif /* ANSI C. */ + +/* Define macros for some gcc attributes. This permits us to use the + macros freely, and know that they will come into play for the + version of gcc in which they are supported. */ + +#if (GCC_VERSION < 2007) +# define __attribute__(x) +#endif + +/* Attribute __malloc__ on functions was valid as of gcc 2.96. */ +#ifndef ATTRIBUTE_MALLOC +# if (GCC_VERSION >= 2096) +# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define ATTRIBUTE_MALLOC +# endif /* GNUC >= 2.96 */ +#endif /* ATTRIBUTE_MALLOC */ + +/* Attributes on labels were valid as of gcc 2.93. */ +#ifndef ATTRIBUTE_UNUSED_LABEL +# if (GCC_VERSION >= 2093) +# define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED +# else +# define ATTRIBUTE_UNUSED_LABEL +# endif /* GNUC >= 2.93 */ +#endif /* ATTRIBUTE_UNUSED_LABEL */ + +#ifndef ATTRIBUTE_UNUSED +#define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +#endif /* ATTRIBUTE_UNUSED */ + +#ifndef ATTRIBUTE_NORETURN +#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +#endif /* ATTRIBUTE_NORETURN */ + +#ifndef ATTRIBUTE_PRINTF +#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) +#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2) +#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3) +#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4) +#define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5) +#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6) +#endif /* ATTRIBUTE_PRINTF */ + +/* We use __extension__ in some places to suppress -pedantic warnings + about GCC extensions. This feature didn't work properly before + gcc 2.8. */ +#if GCC_VERSION < 2008 +#define __extension__ +#endif + +/* Bootstrap support: Adjust certain macros defined by Autoconf, + which are only valid for the stage1 compiler. If we detect + a modern version of GCC, we are probably in stage2 or beyond, + so unconditionally reset the values. Note that const, inline, + etc. have been dealt with above. */ +#if (GCC_VERSION >= 2007) +# ifndef HAVE_LONG_DOUBLE +# define HAVE_LONG_DOUBLE 1 +# endif +#endif /* GCC >= 2.7 */ + +#endif /* ansidecl.h */ diff --git a/src/mkutil/tradcpp/config.h b/src/mkutil/tradcpp/config.h new file mode 100644 index 00000000..2fabf794 --- /dev/null +++ b/src/mkutil/tradcpp/config.h @@ -0,0 +1,23 @@ +/* config.h by Nick for GNU C preprocessor */ + +#define IN_GCC +#define BITS_PER_UNIT 8 + +#define HAVE_LOCALE_H 1 +#define HAVE_STDDEF_H 1 +#define HAVE_STRING_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_TIME_H 1 +#define HAVE_FCNTL_H 1 +#define HAVE_SYS_FILE_H 1 +#define HAVE_MALLOC_H 1 +#define HAVE_SYS_STAT_H 1 + +/* extra settings added by Nick */ +#define HAVE_WINDOWS_H 1 +#define HAVE_PARAM_H 1 + +#include + diff --git a/src/mkutil/tradcpp/cppdefault.c b/src/mkutil/tradcpp/cppdefault.c new file mode 100644 index 00000000..cad0096f --- /dev/null +++ b/src/mkutil/tradcpp/cppdefault.c @@ -0,0 +1,83 @@ +/* CPP Library. + Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000 Free Software Foundation, Inc. + Contributed by Per Bothner, 1994-95. + Based on CCCP program by Paul Rubin, June 1986 + Adapted to ANSI C, Richard Stallman, Jan 1987 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* This file contains data definitions shared between cpplib and + tradcpp. */ + +#include "config.h" +#include "system.h" +#include "cppdefault.h" + +const struct default_include cpp_include_defaults[] +#ifdef INCLUDE_DEFAULTS += INCLUDE_DEFAULTS; +#else += { +#ifdef GPLUSPLUS_INCLUDE_DIR + /* Pick up GNU C++ generic include files. */ + { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, +#endif +#ifdef GPLUSPLUS_TOOL_INCLUDE_DIR + /* Pick up GNU C++ target-dependent include files. */ + { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1 }, +#endif +#ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR + /* Pick up GNU C++ backward and deprecated include files. */ + { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1 }, +#endif +#ifdef LOCAL_INCLUDE_DIR + /* /usr/local/include comes before the fixincluded header files. */ + { LOCAL_INCLUDE_DIR, 0, 0, 1 }, +#endif +#ifdef PREFIX_INCLUDE_DIR + { PREFIX_INCLUDE_DIR, 0, 0, 1 }, +#endif +#ifdef GCC_INCLUDE_DIR + /* This is the dir for fixincludes and for gcc's private headers. */ + { GCC_INCLUDE_DIR, "GCC", 0, 0 }, +#endif +#ifdef CROSS_INCLUDE_DIR + /* One place the target system's headers might be. */ + { CROSS_INCLUDE_DIR, "GCC", 0, 0 }, +#endif +#ifdef TOOL_INCLUDE_DIR + /* Another place the target system's headers might be. */ + { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 }, +#endif +#ifdef SYSTEM_INCLUDE_DIR + /* Some systems have an extra dir of include files. */ + { SYSTEM_INCLUDE_DIR, 0, 0, 0 }, +#endif +#ifdef STANDARD_INCLUDE_DIR + /* /usr/include comes dead last. */ + { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 }, +#endif + { 0, 0, 0, 0 } + }; +#endif /* no INCLUDE_DEFAULTS */ + +#ifdef GCC_INCLUDE_DIR +const char cpp_GCC_INCLUDE_DIR[] = GCC_INCLUDE_DIR; +const size_t cpp_GCC_INCLUDE_DIR_len = sizeof GCC_INCLUDE_DIR - 8; +#else +const char cpp_GCC_INCLUDE_DIR[] = ""; +const size_t cpp_GCC_INCLUDE_DIR_len = 0; +#endif diff --git a/src/mkutil/tradcpp/cppdefault.h b/src/mkutil/tradcpp/cppdefault.h new file mode 100644 index 00000000..1f66b69b --- /dev/null +++ b/src/mkutil/tradcpp/cppdefault.h @@ -0,0 +1,112 @@ +/* CPP Library. + Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000 Free Software Foundation, Inc. + Contributed by Per Bothner, 1994-95. + Based on CCCP program by Paul Rubin, June 1986 + Adapted to ANSI C, Richard Stallman, Jan 1987 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef GCC_CPPDEFAULT_H +#define GCC_CPPDEFAULT_H + +/* This header contains declarations and/or #defines for all the + hard-wired defaults in cpp. Note it's used by both cpplib and + tradcpp. */ + +#ifndef STANDARD_INCLUDE_DIR +#define STANDARD_INCLUDE_DIR "/usr/include" +#endif + +#ifndef STANDARD_INCLUDE_COMPONENT +#define STANDARD_INCLUDE_COMPONENT 0 +#endif + +#ifdef CROSS_COMPILE +#undef LOCAL_INCLUDE_DIR +#undef SYSTEM_INCLUDE_DIR +#undef STANDARD_INCLUDE_DIR +#else +#undef CROSS_INCLUDE_DIR +#endif + +/* We let tm.h override the types used here, to handle trivial differences + such as the choice of unsigned int or long unsigned int for size_t. + When machines start needing nontrivial differences in the size type, + it would be best to do something here to figure out automatically + from other information what type to use. */ + +/* The string value for __SIZE_TYPE__. */ + +#ifndef SIZE_TYPE +#define SIZE_TYPE "long unsigned int" +#endif + +/* The string value for __PTRDIFF_TYPE__. */ + +#ifndef PTRDIFF_TYPE +#define PTRDIFF_TYPE "long int" +#endif + +/* The string value for __WCHAR_TYPE__. */ + +#ifndef WCHAR_TYPE +#define WCHAR_TYPE "int" +#endif + +/* The string value for __WINT_TYPE__. */ + +#ifndef WINT_TYPE +#define WINT_TYPE "unsigned int" +#endif + +/* The string value for __USER_LABEL_PREFIX__ */ + +#ifndef USER_LABEL_PREFIX +#define USER_LABEL_PREFIX "" +#endif + +/* The string value for __REGISTER_PREFIX__ */ + +#ifndef REGISTER_PREFIX +#define REGISTER_PREFIX "" +#endif + +/* This is the default list of directories to search for include files. + It may be overridden by the various -I and -ixxx options. + + #include "file" looks in the same directory as the current file, + then this list. + #include just looks in this list. + + All these directories are treated as `system' include directories + (they are not subject to pedantic warnings in some cases). */ + +struct default_include +{ + const char *const fname; /* The name of the directory. */ + const char *const component; /* The component containing the directory + (see update_path in prefix.c) */ + const int cplusplus; /* Only look here if we're compiling C++. */ + const int cxx_aware; /* Includes in this directory don't need to + be wrapped in extern "C" when compiling + C++. */ +}; + +extern const struct default_include cpp_include_defaults[]; +extern const char cpp_GCC_INCLUDE_DIR[]; +extern const size_t cpp_GCC_INCLUDE_DIR_len; + +#endif /* ! GCC_CPPDEFAULT_H */ diff --git a/src/mkutil/tradcpp/cppdefault.obj b/src/mkutil/tradcpp/cppdefault.obj new file mode 100644 index 0000000000000000000000000000000000000000..94549a960235a745a496819a06710d6a41859a1f GIT binary patch literal 8836 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 REq+6A;)7)J_|F!M{{neS?d|{o literal 0 HcmV?d00001 diff --git a/src/mkutil/tradcpp/defaults.h b/src/mkutil/tradcpp/defaults.h new file mode 100644 index 00000000..c6f8a43d --- /dev/null +++ b/src/mkutil/tradcpp/defaults.h @@ -0,0 +1,471 @@ +/* Definitions of various defaults for tm.h macros. + Copyright (C) 1992, 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Free Software Foundation, Inc. + Contributed by Ron Guilmette (rfg@monkeys.com) + +This file is part of GCC. + +GCC 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, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + +#ifndef GCC_DEFAULTS_H +#define GCC_DEFAULTS_H + +/* Define default standard character escape sequences. */ +#ifndef TARGET_BELL +# define TARGET_BELL 007 +# define TARGET_BS 010 +# define TARGET_TAB 011 +# define TARGET_NEWLINE 012 +# define TARGET_VT 013 +# define TARGET_FF 014 +# define TARGET_CR 015 +# define TARGET_ESC 033 +#endif + +/* Store in OUTPUT a string (made with alloca) containing + an assembler-name for a local static variable or function named NAME. + LABELNO is an integer which is different for each call. */ + +#ifndef ASM_FORMAT_PRIVATE_NAME +#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ + do { \ + int len = strlen (NAME); \ + char *temp = (char *) alloca (len + 3); \ + temp[0] = 'L'; \ + strcpy (&temp[1], (NAME)); \ + temp[len + 1] = '.'; \ + temp[len + 2] = 0; \ + (OUTPUT) = (char *) alloca (strlen (NAME) + 11); \ + ASM_GENERATE_INTERNAL_LABEL (OUTPUT, temp, LABELNO); \ + } while (0) +#endif + +#ifndef ASM_STABD_OP +#define ASM_STABD_OP "\t.stabd\t" +#endif + +/* This is how to output an element of a case-vector that is absolute. + Some targets don't use this, but we have to define it anyway. */ + +#ifndef ASM_OUTPUT_ADDR_VEC_ELT +#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ +do { fputs (integer_asm_op (POINTER_SIZE / UNITS_PER_WORD, TRUE), FILE); \ + ASM_OUTPUT_INTERNAL_LABEL (FILE, "L", (VALUE)); \ + fputc ('\n', FILE); \ + } while (0) +#endif + +/* Provide default for ASM_OUTPUT_ALTERNATE_LABEL_NAME. */ +#ifndef ASM_OUTPUT_ALTERNATE_LABEL_NAME +#define ASM_OUTPUT_ALTERNATE_LABEL_NAME(FILE,INSN) \ +do { ASM_OUTPUT_LABEL(FILE,LABEL_ALTERNATE_NAME (INSN)); } while (0) +#endif + +/* choose a reasonable default for ASM_OUTPUT_ASCII. */ + +#ifndef ASM_OUTPUT_ASCII +#define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \ + do { \ + FILE *_hide_asm_out_file = (MYFILE); \ + const unsigned char *_hide_p = (const unsigned char *) (MYSTRING); \ + int _hide_thissize = (MYLENGTH); \ + { \ + FILE *asm_out_file = _hide_asm_out_file; \ + const unsigned char *p = _hide_p; \ + int thissize = _hide_thissize; \ + int i; \ + fprintf (asm_out_file, "\t.ascii \""); \ + \ + for (i = 0; i < thissize; i++) \ + { \ + int c = p[i]; \ + if (c == '\"' || c == '\\') \ + putc ('\\', asm_out_file); \ + if (ISPRINT(c)) \ + putc (c, asm_out_file); \ + else \ + { \ + fprintf (asm_out_file, "\\%o", c); \ + /* After an octal-escape, if a digit follows, \ + terminate one string constant and start another. \ + The VAX assembler fails to stop reading the escape \ + after three digits, so this is the only way we \ + can get it to parse the data properly. */ \ + if (i < thissize - 1 && ISDIGIT(p[i + 1])) \ + fprintf (asm_out_file, "\"\n\t.ascii \""); \ + } \ + } \ + fprintf (asm_out_file, "\"\n"); \ + } \ + } \ + while (0) +#endif + +/* This is how we tell the assembler to equate two values. */ +#ifdef SET_ASM_OP +#ifndef ASM_OUTPUT_DEF +#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ + do { fprintf ((FILE), "%s", SET_ASM_OP); \ + assemble_name (FILE, LABEL1); \ + fprintf (FILE, ","); \ + assemble_name (FILE, LABEL2); \ + fprintf (FILE, "\n"); \ + } while (0) +#endif +#endif + +/* This is how to output a reference to a user-level label named NAME. */ + +#ifndef ASM_OUTPUT_LABELREF +#define ASM_OUTPUT_LABELREF(FILE,NAME) asm_fprintf ((FILE), "%U%s", (NAME)) +#endif + +/* Allow target to print debug info labels specially. This is useful for + VLIW targets, since debug info labels should go into the middle of + instruction bundles instead of breaking them. */ + +#ifndef ASM_OUTPUT_DEBUG_LABEL +#define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \ + ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM) +#endif + +/* This is how we tell the assembler that a symbol is weak. */ +#ifndef ASM_OUTPUT_WEAK_ALIAS +#if defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_DEF) +#define ASM_OUTPUT_WEAK_ALIAS(STREAM, NAME, VALUE) \ + do \ + { \ + ASM_WEAKEN_LABEL (STREAM, NAME); \ + if (VALUE) \ + ASM_OUTPUT_DEF (STREAM, NAME, VALUE); \ + } \ + while (0) +#endif +#endif + +/* This determines whether or not we support weak symbols. */ +#ifndef SUPPORTS_WEAK +#if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL) +#define SUPPORTS_WEAK 1 +#else +#define SUPPORTS_WEAK 0 +#endif +#endif + +/* This determines whether or not we support link-once semantics. */ +#ifndef SUPPORTS_ONE_ONLY +#ifdef MAKE_DECL_ONE_ONLY +#define SUPPORTS_ONE_ONLY 1 +#else +#define SUPPORTS_ONE_ONLY 0 +#endif +#endif + +/* If the target supports weak symbols, define TARGET_ATTRIBUTE_WEAK to + provide a weak attribute. Else define it to nothing. + + This would normally belong in ansidecl.h, but SUPPORTS_WEAK is + not available at that time. + + Note, this is only for use by target files which we know are to be + compiled by GCC. */ +#ifndef TARGET_ATTRIBUTE_WEAK +# if SUPPORTS_WEAK +# define TARGET_ATTRIBUTE_WEAK __attribute__ ((weak)) +# else +# define TARGET_ATTRIBUTE_WEAK +# endif +#endif + +/* If the target supports init_priority C++ attribute, give + SUPPORTS_INIT_PRIORITY a nonzero value. */ +#ifndef SUPPORTS_INIT_PRIORITY +#define SUPPORTS_INIT_PRIORITY 1 +#endif /* SUPPORTS_INIT_PRIORITY */ + +/* If duplicate library search directories can be removed from a + linker command without changing the linker's semantics, give this + symbol a nonzero. */ +#ifndef LINK_ELIMINATE_DUPLICATE_LDIRECTORIES +#define LINK_ELIMINATE_DUPLICATE_LDIRECTORIES 0 +#endif /* LINK_ELIMINATE_DUPLICATE_LDIRECTORIES */ + +/* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that + the rest of the DWARF 2 frame unwind support is also provided. */ +#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX) +#define DWARF2_UNWIND_INFO 1 +#endif + +/* If we have named sections, and we're using crtstuff to run ctors, + use them for registering eh frame information. */ +#if defined (TARGET_ASM_NAMED_SECTION) && !defined(EH_FRAME_IN_DATA_SECTION) +#ifndef EH_FRAME_SECTION_NAME +#define EH_FRAME_SECTION_NAME ".eh_frame" +#endif +#endif + +/* If we have named section and we support weak symbols, then use the + .jcr section for recording java classes which need to be registered + at program start-up time. */ +#if defined (TARGET_ASM_NAMED_SECTION) && SUPPORTS_WEAK +#ifndef JCR_SECTION_NAME +#define JCR_SECTION_NAME ".jcr" +#endif +#endif + +/* If we have no definition for UNIQUE_SECTION, but do have the + ability to generate arbitrary sections, construct something + reasonable. */ +#ifndef UNIQUE_SECTION +#define UNIQUE_SECTION(DECL,RELOC) \ +do { \ + int len; \ + const char *name; \ + char *string; \ + \ + name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \ + /* Strip off any encoding in name. */ \ + STRIP_NAME_ENCODING (name, name); \ + \ + len = strlen (name) + 1; \ + string = alloca (len + 1); \ + sprintf (string, ".%s", name); \ + \ + DECL_SECTION_NAME (DECL) = build_string (len, string); \ +} while (0) +#endif + +/* By default, we generate a label at the beginning and end of the + text section, and compute the size of the text section by + subtracting the two. However, on some platforms that doesn't + work, and we use the section itself, rather than a label at the + beginning of it, to indicate the start of the section. On such + platforms, define this to zero. */ +#ifndef DWARF2_GENERATE_TEXT_SECTION_LABEL +#define DWARF2_GENERATE_TEXT_SECTION_LABEL 1 +#endif + +/* Supply a default definition for PROMOTE_PROTOTYPES. */ +#ifndef PROMOTE_PROTOTYPES +#define PROMOTE_PROTOTYPES 0 +#endif + +/* Number of hardware registers that go into the DWARF-2 unwind info. + If not defined, equals FIRST_PSEUDO_REGISTER */ + +#ifndef DWARF_FRAME_REGISTERS +#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER +#endif + +/* How to renumber registers for dbx and gdb. If not defined, assume + no renumbering is necessary. */ + +#ifndef DBX_REGISTER_NUMBER +#define DBX_REGISTER_NUMBER(REGNO) (REGNO) +#endif + +/* Default sizes for base C types. If the sizes are different for + your target, you should override these values by defining the + appropriate symbols in your tm.h file. */ + +#ifndef CHAR_TYPE_SIZE +#define CHAR_TYPE_SIZE BITS_PER_UNIT +#endif + +#ifndef BOOL_TYPE_SIZE +/* `bool' has size and alignment `1', on almost all platforms. */ +#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE +#endif + +#ifndef SHORT_TYPE_SIZE +#define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2)) +#endif + +#ifndef INT_TYPE_SIZE +#define INT_TYPE_SIZE BITS_PER_WORD +#endif + +#ifndef LONG_TYPE_SIZE +#define LONG_TYPE_SIZE BITS_PER_WORD +#endif + +#ifndef LONG_LONG_TYPE_SIZE +#define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2) +#endif + +#ifndef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE INT_TYPE_SIZE +#endif + +#ifndef WCHAR_UNSIGNED +#define WCHAR_UNSIGNED 0 +#endif + +#ifndef FLOAT_TYPE_SIZE +#define FLOAT_TYPE_SIZE BITS_PER_WORD +#endif + +#ifndef DOUBLE_TYPE_SIZE +#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2) +#endif + +#ifndef LONG_DOUBLE_TYPE_SIZE +#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2) +#endif + +#ifndef BUILD_VA_LIST_TYPE +#define BUILD_VA_LIST_TYPE(X) ((X) = ptr_type_node) +#endif + +#ifndef PIC_OFFSET_TABLE_REGNUM +#define PIC_OFFSET_TABLE_REGNUM INVALID_REGNUM +#endif + +/* Type used by GCOV counters. Use 64bit data type if target supports + it. */ +#if LONG_TYPE_SIZE >= 64 +#define GCOV_TYPE_SIZE LONG_TYPE_SIZE +#else +#define GCOV_TYPE_SIZE LONG_LONG_TYPE_SIZE +#endif + + +/* By default, the preprocessor should be invoked the same way in C++ + as in C. */ +#ifndef CPLUSPLUS_CPP_SPEC +#ifdef CPP_SPEC +#define CPLUSPLUS_CPP_SPEC CPP_SPEC +#endif +#endif + +#ifndef ACCUMULATE_OUTGOING_ARGS +#define ACCUMULATE_OUTGOING_ARGS 0 +#endif + +/* Supply a default definition for PUSH_ARGS. */ +#ifndef PUSH_ARGS +#ifdef PUSH_ROUNDING +#define PUSH_ARGS !ACCUMULATE_OUTGOING_ARGS +#else +#define PUSH_ARGS 0 +#endif +#endif + +/* If PREFERRED_STACK_BOUNDARY is not defined, set it to STACK_BOUNDARY. + STACK_BOUNDARY is required. */ +#ifndef PREFERRED_STACK_BOUNDARY +#define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY +#endif + +/* By default, the C++ compiler will use function addresses in the + vtable entries. Setting this non-zero tells the compiler to use + function descriptors instead. The value of this macro says how + many words wide the descriptor is (normally 2). It is assumed + that the address of a function descriptor may be treated as a + pointer to a function. */ +#ifndef TARGET_VTABLE_USES_DESCRIPTORS +#define TARGET_VTABLE_USES_DESCRIPTORS 0 +#endif + +/* Select a format to encode pointers in exception handling data. We + prefer those that result in fewer dynamic relocations. Assume no + special support here and encode direct references. */ +#ifndef ASM_PREFERRED_EH_DATA_FORMAT +#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) DW_EH_PE_absptr +#endif + +/* By default, the C++ compiler will use the lowest bit of the pointer + to function to indicate a pointer-to-member-function points to a + virtual member function. However, if FUNCTION_BOUNDARY indicates + function addresses aren't always even, the lowest bit of the delta + field will be used. */ +#ifndef TARGET_PTRMEMFUNC_VBIT_LOCATION +#define TARGET_PTRMEMFUNC_VBIT_LOCATION \ + (FUNCTION_BOUNDARY >= 2 * BITS_PER_UNIT \ + ? ptrmemfunc_vbit_in_pfn : ptrmemfunc_vbit_in_delta) +#endif + +/* True if it is possible to profile code that does not have a frame + pointer. */ + +#ifndef TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER +#define TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER true +#endif + +#ifndef DEFAULT_GDB_EXTENSIONS +#define DEFAULT_GDB_EXTENSIONS 1 +#endif + +/* If more than one debugging type is supported, you must define + PREFERRED_DEBUGGING_TYPE to choose a format in a system-dependent way. + + This is one long line cause VAXC can't handle a \-newline. */ +#if 1 < (defined (DBX_DEBUGGING_INFO) + defined (SDB_DEBUGGING_INFO) + defined (DWARF_DEBUGGING_INFO) + defined (DWARF2_DEBUGGING_INFO) + defined (XCOFF_DEBUGGING_INFO) + defined (VMS_DEBUGGING_INFO)) +#ifndef PREFERRED_DEBUGGING_TYPE +You Lose! You must define PREFERRED_DEBUGGING_TYPE! +#endif /* no PREFERRED_DEBUGGING_TYPE */ +#else /* Only one debugging format supported. Define PREFERRED_DEBUGGING_TYPE + so other code needn't care. */ +#ifdef DBX_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG +#endif +#ifdef SDB_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE SDB_DEBUG +#endif +#ifdef DWARF_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG +#endif +#ifdef DWARF2_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG +#endif +#ifdef VMS_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE VMS_AND_DWARF2_DEBUG +#endif +#ifdef XCOFF_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE XCOFF_DEBUG +#endif +#endif /* More than one debugger format enabled. */ + +/* If still not defined, must have been because no debugging formats + are supported. */ +#ifndef PREFERRED_DEBUGGING_TYPE +#define PREFERRED_DEBUGGING_TYPE NO_DEBUG +#endif + +/* This is set to 1 if BYTES_BIG_ENDIAN is defined but the target uses a + little-endian method of passing and returning structures in registers. + On the HP-UX IA64 and PA64 platforms structures are aligned differently + then integral values and setting this value to 1 will allow for the + special handling of structure arguments and return values in regs. */ + +#ifndef FUNCTION_ARG_REG_LITTLE_ENDIAN +#define FUNCTION_ARG_REG_LITTLE_ENDIAN 0 +#endif + +/* Determine the register class for registers suitable to be the base + address register in a MEM. Allow the choice to be dependent upon + the mode of the memory access. */ +#ifndef MODE_BASE_REG_CLASS +#define MODE_BASE_REG_CLASS(MODE) BASE_REG_CLASS +#endif + +/* Determine whether __cxa_atexit, rather than atexit, is used to + register C++ destructors for local statics and global objects. */ +#ifndef DEFAULT_USE_CXA_ATEXIT +#define DEFAULT_USE_CXA_ATEXIT 0 +#endif + +#endif /* ! GCC_DEFAULTS_H */ diff --git a/src/mkutil/tradcpp/hex.c b/src/mkutil/tradcpp/hex.c new file mode 100644 index 00000000..3ba04ba8 --- /dev/null +++ b/src/mkutil/tradcpp/hex.c @@ -0,0 +1,111 @@ +/* Hex character manipulation support. + Copyright (C) 1995, 2001 Free Software Foundation, Inc. + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include /* for EOF */ +#include "libiberty.h" + +/* Provided for ABI compatibility. */ +void +hex_init () +{ +} + +/* Are we ASCII? */ +#if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \ + && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21 \ + && EOF == -1 + +const char _hex_value[_hex_array_size] = +{ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* NUL SOH STX ETX */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* EOT ENQ ACK BEL */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* BS HT LF VT */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FF CR SO SI */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DLE DC1 DC2 DC3 */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DC4 NAK SYN ETB */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* CAN EM SUB ESC */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FS GS RS US */ + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* SP ! " # */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* $ % & ' */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* ( ) * + */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* , - . / */ + 0, 1, 2, 3, /* 0 1 2 3 */ + 4, 5, 6, 7, /* 4 5 6 7 */ + 8, 9, _hex_bad, _hex_bad, /* 8 9 : ; */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* < = > ? */ + + _hex_bad, 10, 11, 12, /* @ A B C */ + 13, 14, 15, _hex_bad, /* D E F G */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* H I J K */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* L M N O */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* P Q R S */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* T U V W */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* X Y Z [ */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* \ ] ^ _ */ + + _hex_bad, 10, 11, 12, /* ` a b c */ + 13, 14, 15, _hex_bad, /* d e f g */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* h i j k */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* l m n o */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* p q r s */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* t u v w */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* x y z { */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* | } ~ DEL */ + + /* The high half of unsigned char, all values are _hex_bad. */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, +}; +#else + #error "Unsupported host character set" +#endif /* not ASCII */ diff --git a/src/mkutil/tradcpp/hex.obj b/src/mkutil/tradcpp/hex.obj new file mode 100644 index 0000000000000000000000000000000000000000..6187acbf83a23a5c7d41665b21bad79004c2f615 GIT binary patch literal 1295 zcmcgs&2G~`5FXq4YyKJ)0TKu>s6s&K;ucg@xg<0o@sm7%yJLI4Z74~&vRJ6T(Ev_ED9rL~Q;hA% zg{x?MiJe$yOTa9<8}yfV;!sHeP;o7(VI+a-0hBhGXLUp;MxjPbCBnqf8W=Su>;n-8 zP$zL!urHFT)GFxk^ksDJ^DqNopz%1u#W6Z}#j<;yz!47bRvHgC>-ub9yK(Qy-L3mO zIyJHk3$pNnS!o3m-ts-OHFzBe?zBwTZSC0yY}9@A2pgxK>Ra6OM*gTL^lQ(q>$lfd zx?Je>TlI2T-*yEb@ChIG_4;Vwa>w@cUEA~dXsEBQF~eXRtLq!gV2~@ty^^MV=@n=- ze`S;m9^K|cE>uXtS;&;$E+IflwoSQl#|i8LXr;>-OzrcbXbW;rk=t`ee&`0|`g~%y zMKJ=W_szYI7y2&#s`R+icDOIzBQ%dI2OlFV3x{aY7s|n>$jXBGj{=ISC6cLhW+5uf z=JJK&;>o-GEq`+5f5|l8eSPtnJ`~8GrT`7n4LAeM@A>K-v@ia7n8xP1!Cb5RjrDLk zs2t_TF+g9TIWxmR^sJdUM2uTUm$Gn-7!64`B`5L-G==CnFSEp?t~7 3000 +# define HOST_BITS_PER_LONGLONG LONG_LONG_TYPE_SIZE +# endif /* gcc */ +#endif +#endif /* no long long */ + +/* Find the largest host integer type and set its size and type. */ + +/* Use long long on the host if the target has a wider long type than + the host. */ + +#if ! defined HOST_BITS_PER_WIDE_INT \ + && defined HOST_BITS_PER_LONGLONG \ + && (HOST_BITS_PER_LONGLONG > HOST_BITS_PER_LONG) \ + && (defined (LONG_LONG_MAX) || defined (LONGLONG_MAX) \ + || defined (LLONG_MAX) || defined (__GNUC__)) + +# ifdef MAX_LONG_TYPE_SIZE +# if MAX_LONG_TYPE_SIZE > HOST_BITS_PER_LONG +# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONGLONG +# define HOST_WIDE_INT long long +# endif +# else +# if LONG_TYPE_SIZE > HOST_BITS_PER_LONG +# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONGLONG +# define HOST_WIDE_INT long long +# endif +# endif + +#endif + +#ifndef HOST_BITS_PER_WIDE_INT + +# if HOST_BITS_PER_LONG > HOST_BITS_PER_INT +# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG +# define HOST_WIDE_INT long +# else +# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT +# define HOST_WIDE_INT int +# endif + +#endif /* ! HOST_BITS_PER_WIDE_INT */ + +/* Provide defaults for the way to print a HOST_WIDE_INT + in various manners. */ + +#ifndef HOST_WIDE_INT_PRINT_DEC +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT +# define HOST_WIDE_INT_PRINT_DEC "%d" +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG +# define HOST_WIDE_INT_PRINT_DEC "%ld" +# else +# define HOST_WIDE_INT_PRINT_DEC "%lld" +# endif +# endif +#endif /* ! HOST_WIDE_INT_PRINT_DEC */ + +#ifndef HOST_WIDE_INT_PRINT_UNSIGNED +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT +# define HOST_WIDE_INT_PRINT_UNSIGNED "%u" +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG +# define HOST_WIDE_INT_PRINT_UNSIGNED "%lu" +# else +# define HOST_WIDE_INT_PRINT_UNSIGNED "%llu" +# endif +# endif +#endif /* ! HOST_WIDE_INT_PRINT_UNSIGNED */ + +#ifndef HOST_WIDE_INT_PRINT_HEX +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT +# define HOST_WIDE_INT_PRINT_HEX "0x%x" +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG +# define HOST_WIDE_INT_PRINT_HEX "0x%lx" +# else +# define HOST_WIDE_INT_PRINT_HEX "0x%llx" +# endif +# endif +#endif /* ! HOST_WIDE_INT_PRINT_HEX */ + +#ifndef HOST_WIDE_INT_PRINT_DOUBLE_HEX +# if HOST_BITS_PER_WIDE_INT == 64 +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%x%016x" +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%lx%016lx" +# else +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%llx%016llx" +# endif +# endif +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%x%08x" +# else +# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%lx%08lx" +# else +# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%llx%08llx" +# endif +# endif +# endif +#endif /* ! HOST_WIDE_INT_PRINT_DOUBLE_HEX */ + +/* Find HOST_WIDEST_INT and set its bit size, type and print macros. + It will be the largest integer mode supported by the host which may + (or may not) be larger than HOST_WIDE_INT. */ + +#ifndef HOST_WIDEST_INT +#if defined HOST_BITS_PER_LONGLONG \ + && HOST_BITS_PER_LONGLONG > HOST_BITS_PER_LONG +# define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONGLONG +# define HOST_WIDEST_INT long long +# define HOST_WIDEST_INT_PRINT_DEC "%lld" +# define HOST_WIDEST_INT_PRINT_UNSIGNED "%llu" +# define HOST_WIDEST_INT_PRINT_HEX "0x%llx" +# else +# define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONG +# define HOST_WIDEST_INT long +# define HOST_WIDEST_INT_PRINT_DEC "%ld" +# define HOST_WIDEST_INT_PRINT_UNSIGNED "%lu" +# define HOST_WIDEST_INT_PRINT_HEX "0x%lx" +# endif /* long long wider than long */ +#endif /* ! HOST_WIDEST_INT */ + +#endif /* ! GCC_HWINT_H */ diff --git a/src/mkutil/tradcpp/intl.h b/src/mkutil/tradcpp/intl.h new file mode 100644 index 00000000..064b027b --- /dev/null +++ b/src/mkutil/tradcpp/intl.h @@ -0,0 +1,61 @@ +/* intl.h - internationalization + Copyright 1998, 2001 Free Software Foundation, Inc. + + GCC 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, or (at your option) + any later version. + + GCC 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 GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#ifndef GCC_INTL_H +#define GCC_INTL_H + +#ifdef HAVE_LOCALE_H +# include +#endif + +#ifndef HAVE_SETLOCALE +# define setlocale(category, locale) (locale) +#endif + +#ifdef USE_INCLUDED_LIBINTL +# include +#else +# ifdef HAVE_LIBINTL_H +# include +# else +# undef ENABLE_NLS +# endif +#endif + +#ifdef ENABLE_NLS +extern void gcc_init_libintl PARAMS ((void)); +#else +/* Stubs. */ +# undef textdomain +# define textdomain(domain) (domain) +# undef bindtextdomain +# define bindtextdomain(domain, directory) (domain) +# undef gettext +# define gettext(msgid) (msgid) +# define gcc_init_libintl() /* nothing */ +#endif + +#ifndef _ +# define _(msgid) gettext (msgid) +#endif + +#ifndef N_ +# define N_(msgid) (msgid) +#endif + +#endif /* intl.h */ diff --git a/src/mkutil/tradcpp/lbasename.c b/src/mkutil/tradcpp/lbasename.c new file mode 100644 index 00000000..cea02538 --- /dev/null +++ b/src/mkutil/tradcpp/lbasename.c @@ -0,0 +1,88 @@ +/* Libiberty basename. Like basename, but is not overridden by the + system C library. + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* + +@deftypefn Replacement {const char*} lbasename (const char *@var{name}) + +Given a pointer to a string containing a typical pathname +(@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the +last component of the pathname (@samp{ls.c} in this case). The +returned pointer is guaranteed to lie within the original +string. This latter fact is not true of many vendor C +libraries, which return special strings or modify the passed +strings for particular input. + +In particular, the empty string returns the same empty string, +and a path ending in @code{/} returns the empty string after it. + +@end deftypefn + +*/ + +#include "ansidecl.h" +#include "libiberty.h" +#include "safe-ctype.h" + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) \ + || defined (__DJGPP__) || defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +#endif + +/* Define IS_DIR_SEPARATOR. VMS uses '::', ':', '[...]' and '<...>' to + separate the different components of a file specification. It's a + bit of a stretch to call ':', ']' and '>' directory separators, so + just define the test to find the file name component. */ +#ifdef VMS +# define IS_DIR_SEPARATOR(ch) ((ch) == ':' || (ch) == ']' || (ch) == '>') +#else +# ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +# else +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +# endif +#endif + +const char * +lbasename (name) + const char *name; +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over a possible disk name. */ + if (ISALPHA (name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + + return base; +} diff --git a/src/mkutil/tradcpp/lbasename.obj b/src/mkutil/tradcpp/lbasename.obj new file mode 100644 index 0000000000000000000000000000000000000000..330de8aa6f17f6a8b2f8ebc0aa58b71b37ea3023 GIT binary patch literal 1128 zcmZuw&1(};5TDJqag#LN)M~+lx}u0$`kJ;_YA)5Lfm#}?)`*8l%x*Sy>!u0Wmr{b4 z5(so~L*OkU)X!_uBbxbzGw;yhFQ}DBoC4&u1$pHw`tmbagJSc!A}m`D<5_i4}zc zFF?QvKCQ*lm8y}p%38Ycpu!C^t(8h?Q_WiXdbXgmqPn(-b@ZcmJZWgZ5mP_0y7*%6^Rf!i1CBxLq%5A-D8O3#FVvoeQzh4_P4ulM=*Z~kH6hCda!<=A@IW`}4*iJ!;%}}B-9|9Yh2gS>4Q58} z$H^eH&_~2^@2v$*xG2zK93<~bP*tKpOF@4!?BAPreZA`-IzBWWv;>nsAAfRvh*K1i zh|A#<22dhDT9_WmJrQ4lsrjx>nRO}?7P}Y;%yfNd+8iHXx{FZuUeq0O?vi&ksV-5V Rz8s|EsAjqk2^sHr!ari>&>8>$ literal 0 HcmV?d00001 diff --git a/src/mkutil/tradcpp/libiberty.h b/src/mkutil/tradcpp/libiberty.h new file mode 100644 index 00000000..349cde57 --- /dev/null +++ b/src/mkutil/tradcpp/libiberty.h @@ -0,0 +1,317 @@ +/* Function declarations for libiberty. + + Copyright 2001, 2002 Free Software Foundation, Inc. + + Note - certain prototypes declared in this header file are for + functions whoes implementation copyright does not belong to the + FSF. Those prototypes are present in this file for reference + purposes only and their presence in this file should not construed + as an indication of ownership by the FSF of the implementation of + those functions in any way or form whatsoever. + + 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, 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + Written by Cygnus Support, 1994. + + The libiberty library provides a number of functions which are + missing on some operating systems. We do not declare those here, + to avoid conflicts with the system header files on operating + systems that do support those functions. In this file we only + declare those functions which are specific to libiberty. */ + +#ifndef LIBIBERTY_H +#define LIBIBERTY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "ansidecl.h" + +#ifdef ANSI_PROTOTYPES +/* Get a definition for size_t. */ +#include +/* Get a definition for va_list. */ +#include +#endif + +/* Build an argument vector from a string. Allocates memory using + malloc. Use freeargv to free the vector. */ + +extern char **buildargv PARAMS ((const char *)) ATTRIBUTE_MALLOC; + +/* Free a vector returned by buildargv. */ + +extern void freeargv PARAMS ((char **)); + +/* Duplicate an argument vector. Allocates memory using malloc. Use + freeargv to free the vector. */ + +extern char **dupargv PARAMS ((char **)) ATTRIBUTE_MALLOC; + + +/* Return the last component of a path name. Note that we can't use a + prototype here because the parameter is declared inconsistently + across different systems, sometimes as "char *" and sometimes as + "const char *" */ + +/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is + undefined, we haven't run the autoconf check so provide the + declaration without arguments. If it is 0, we checked and failed + to find the declaration so provide a fully prototyped one. If it + is 1, we found it so don't provide any declaration at all. */ +#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || (defined (HAVE_DECL_BASENAME) && !HAVE_DECL_BASENAME) +extern char *basename PARAMS ((const char *)); +#else +# if !defined (HAVE_DECL_BASENAME) +extern char *basename (); +# endif +#endif + +/* A well-defined basename () that is always compiled in. */ + +extern const char *lbasename PARAMS ((const char *)); + +/* Concatenate an arbitrary number of strings. You must pass NULL as + the last argument of this function, to terminate the list of + strings. Allocates memory using xmalloc. */ + +extern char *concat PARAMS ((const char *, ...)) ATTRIBUTE_MALLOC; + +/* Concatenate an arbitrary number of strings. You must pass NULL as + the last argument of this function, to terminate the list of + strings. Allocates memory using xmalloc. The first argument is + not one of the strings to be concatenated, but if not NULL is a + pointer to be freed after the new string is created, similar to the + way xrealloc works. */ + +extern char *reconcat PARAMS ((char *, const char *, ...)) ATTRIBUTE_MALLOC; + +/* Determine the length of concatenating an arbitrary number of + strings. You must pass NULL as the last argument of this function, + to terminate the list of strings. */ + +extern unsigned long concat_length PARAMS ((const char *, ...)); + +/* Concatenate an arbitrary number of strings into a SUPPLIED area of + memory. You must pass NULL as the last argument of this function, + to terminate the list of strings. The supplied memory is assumed + to be large enough. */ + +extern char *concat_copy PARAMS ((char *, const char *, ...)); + +/* Concatenate an arbitrary number of strings into a GLOBAL area of + memory. You must pass NULL as the last argument of this function, + to terminate the list of strings. The supplied memory is assumed + to be large enough. */ + +extern char *concat_copy2 PARAMS ((const char *, ...)); + +/* This is the global area used by concat_copy2. */ + +extern char *libiberty_concat_ptr; + +/* Concatenate an arbitrary number of strings. You must pass NULL as + the last argument of this function, to terminate the list of + strings. Allocates memory using alloca. The arguments are + evaluated twice! */ +#define ACONCAT(ACONCAT_PARAMS) \ + (libiberty_concat_ptr = alloca (concat_length ACONCAT_PARAMS + 1), \ + concat_copy2 ACONCAT_PARAMS) + +/* Check whether two file descriptors refer to the same file. */ + +extern int fdmatch PARAMS ((int fd1, int fd2)); + +/* Get the working directory. The result is cached, so don't call + chdir() between calls to getpwd(). */ + +extern char * getpwd PARAMS ((void)); + +/* Get the amount of time the process has run, in microseconds. */ + +extern long get_run_time PARAMS ((void)); + +/* Choose a temporary directory to use for scratch files. */ + +extern char *choose_temp_base PARAMS ((void)) ATTRIBUTE_MALLOC; + +/* Return a temporary file name or NULL if unable to create one. */ + +extern char *make_temp_file PARAMS ((const char *)) ATTRIBUTE_MALLOC; + +/* Allocate memory filled with spaces. Allocates using malloc. */ + +extern const char *spaces PARAMS ((int count)); + +/* Return the maximum error number for which strerror will return a + string. */ + +extern int errno_max PARAMS ((void)); + +/* Return the name of an errno value (e.g., strerrno (EINVAL) returns + "EINVAL"). */ + +extern const char *strerrno PARAMS ((int)); + +/* Given the name of an errno value, return the value. */ + +extern int strtoerrno PARAMS ((const char *)); + +/* ANSI's strerror(), but more robust. */ + +extern char *xstrerror PARAMS ((int)); + +/* Return the maximum signal number for which strsignal will return a + string. */ + +extern int signo_max PARAMS ((void)); + +/* Return a signal message string for a signal number + (e.g., strsignal (SIGHUP) returns something like "Hangup"). */ +/* This is commented out as it can conflict with one in system headers. + We still document its existence though. */ + +/*extern const char *strsignal PARAMS ((int));*/ + +/* Return the name of a signal number (e.g., strsigno (SIGHUP) returns + "SIGHUP"). */ + +extern const char *strsigno PARAMS ((int)); + +/* Given the name of a signal, return its number. */ + +extern int strtosigno PARAMS ((const char *)); + +/* Register a function to be run by xexit. Returns 0 on success. */ + +extern int xatexit PARAMS ((void (*fn) (void))); + +/* Exit, calling all the functions registered with xatexit. */ + +extern void xexit PARAMS ((int status)) ATTRIBUTE_NORETURN; + +/* Set the program name used by xmalloc. */ + +extern void xmalloc_set_program_name PARAMS ((const char *)); + +/* Report an allocation failure. */ +extern void xmalloc_failed PARAMS ((size_t)) ATTRIBUTE_NORETURN; + +/* Allocate memory without fail. If malloc fails, this will print a + message to stderr (using the name set by xmalloc_set_program_name, + if any) and then call xexit. */ + +extern PTR xmalloc PARAMS ((size_t)) ATTRIBUTE_MALLOC; + +/* Reallocate memory without fail. This works like xmalloc. Note, + realloc type functions are not suitable for attribute malloc since + they may return the same address across multiple calls. */ + +extern PTR xrealloc PARAMS ((PTR, size_t)); + +/* Allocate memory without fail and set it to zero. This works like + xmalloc. */ + +extern PTR xcalloc PARAMS ((size_t, size_t)) ATTRIBUTE_MALLOC; + +/* Copy a string into a memory buffer without fail. */ + +extern char *xstrdup PARAMS ((const char *)) ATTRIBUTE_MALLOC; + +/* Copy an existing memory buffer to a new memory buffer without fail. */ + +extern PTR xmemdup PARAMS ((const PTR, size_t, size_t)) ATTRIBUTE_MALLOC; + +/* hex character manipulation routines */ + +#define _hex_array_size 256 +#define _hex_bad 99 +extern const char _hex_value[_hex_array_size]; +extern void hex_init PARAMS ((void)); +#define hex_p(c) (hex_value (c) != _hex_bad) +/* If you change this, note well: Some code relies on side effects in + the argument being performed exactly once. */ +#define hex_value(c) (_hex_value[(unsigned char) (c)]) + +/* Definitions used by the pexecute routine. */ + +#define PEXECUTE_FIRST 1 +#define PEXECUTE_LAST 2 +#define PEXECUTE_ONE (PEXECUTE_FIRST + PEXECUTE_LAST) +#define PEXECUTE_SEARCH 4 +#define PEXECUTE_VERBOSE 8 + +/* Execute a program. */ + +extern int pexecute PARAMS ((const char *, char * const *, const char *, + const char *, char **, char **, int)); + +/* Wait for pexecute to finish. */ + +extern int pwait PARAMS ((int, int *, int)); + +/* Like sprintf but provides a pointer to malloc'd storage, which must + be freed by the caller. */ + +extern int asprintf PARAMS ((char **, const char *, ...)) ATTRIBUTE_PRINTF_2; + +/* Like vsprintf but provides a pointer to malloc'd storage, which + must be freed by the caller. */ + +extern int vasprintf PARAMS ((char **, const char *, va_list)) + ATTRIBUTE_PRINTF(2,0); + +#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) + +/* Drastically simplified alloca configurator. If we're using GCC, + we use __builtin_alloca; otherwise we use the C alloca. The C + alloca is always available. You can override GCC by defining + USE_C_ALLOCA yourself. The canonical autoconf macro C_ALLOCA is + also set/unset as it is often used to indicate whether code needs + to call alloca(0). */ +extern PTR C_alloca PARAMS ((size_t)) ATTRIBUTE_MALLOC; +#undef alloca +#if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA +# define alloca(x) __builtin_alloca(x) +# undef C_ALLOCA +# define ASTRDUP(X) \ + (__extension__ ({ const char *const libiberty_optr = (X); \ + const unsigned long libiberty_len = strlen (libiberty_optr) + 1; \ + char *const libiberty_nptr = alloca (libiberty_len); \ + (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len); })) +#else +# define alloca(x) C_alloca(x) +# undef USE_C_ALLOCA +# define USE_C_ALLOCA 1 +# undef C_ALLOCA +# define C_ALLOCA 1 +extern const char *libiberty_optr; +extern char *libiberty_nptr; +extern unsigned long libiberty_len; +# define ASTRDUP(X) \ + (libiberty_optr = (X), \ + libiberty_len = strlen (libiberty_optr) + 1, \ + libiberty_nptr = alloca (libiberty_len), \ + (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len)) +#endif + +#ifdef __cplusplus +} +#endif + + +#endif /* ! defined (LIBIBERTY_H) */ diff --git a/src/mkutil/tradcpp/makefile b/src/mkutil/tradcpp/makefile new file mode 100644 index 00000000..b95f5b81 --- /dev/null +++ b/src/mkutil/tradcpp/makefile @@ -0,0 +1,55 @@ +# makefile by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +ARCH=w32/ + +SRCDIR=../../ +MAKEDIR=$(SRCDIR)makedir/ + +TARGETS=$(BINDIR)tradcpp.exe +SUBDIRS= + +include $(MAKEDIR)head.mk + +# ----------------------------------------------------------------------------- + +CPPFLAGS=-I. $(_CPPFLAGS) + +# ----------------------------------------------------------------------------- + +$(BINDIR)tradcpp.exe: tradcpp.exe + $(CP) $^ $@ + +tradcpp.exe: tradcpp.obj tradcif.obj cppdefault.obj \ + mkdeps.obj version.obj \ + alloca.obj hex.obj lbasename.obj safe-ctype.obj \ + xexit.obj xmalloc.obj xstrdup.obj + $(LD) -o $@ $^ + +tradcpp.obj: tradcpp.c + +tradcif.obj: tradcif.c + +cppdefault.obj: cppdefault.c + +mkdeps.obj: mkdeps.c + +version.obj: version.c + +alloca.obj: alloca.c + +hex.obj: hex.c + +lbasename.obj: lbasename.c + +safe-ctype.obj: safe-ctype.c + +xexit.obj: xexit.c + +xmalloc.obj: xmalloc.c + +xstrdup.obj: xstrdup.c + +# ----------------------------------------------------------------------------- + diff --git a/src/mkutil/tradcpp/mkdeps.c b/src/mkutil/tradcpp/mkdeps.c new file mode 100644 index 00000000..2c300631 --- /dev/null +++ b/src/mkutil/tradcpp/mkdeps.c @@ -0,0 +1,291 @@ +/* Dependency generator for Makefile fragments. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Zack Weinberg, Mar 2000 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + +#include "config.h" +#include "system.h" +#include "mkdeps.h" + +/* Keep this structure local to this file, so clients don't find it + easy to start making assumptions. */ +struct deps +{ + const char **targetv; + unsigned int ntargets; /* number of slots actually occupied */ + unsigned int targets_size; /* amt of allocated space - in words */ + + const char **depv; + unsigned int ndeps; + unsigned int deps_size; +}; + +static const char *munge PARAMS ((const char *)); + +/* Given a filename, quote characters in that filename which are + significant to Make. Note that it's not possible to quote all such + characters - e.g. \n, %, *, ?, [, \ (in some contexts), and ~ are + not properly handled. It isn't possible to get this right in any + current version of Make. (??? Still true? Old comment referred to + 3.76.1.) */ + +static const char * +munge (filename) + const char *filename; +{ + int len; + const char *p, *q; + char *dst, *buffer; + + for (p = filename, len = 0; *p; p++, len++) + { + switch (*p) + { + case ' ': + case '\t': + /* GNU make uses a weird quoting scheme for white space. + A space or tab preceded by 2N+1 backslashes represents + N backslashes followed by space; a space or tab + preceded by 2N backslashes represents N backslashes at + the end of a file name; and backslashes in other + contexts should not be doubled. */ + for (q = p - 1; filename <= q && *q == '\\'; q--) + len++; + len++; + break; + + case '$': + /* '$' is quoted by doubling it. */ + len++; + break; + } + } + + /* Now we know how big to make the buffer. */ + buffer = xmalloc (len + 1); + + for (p = filename, dst = buffer; *p; p++, dst++) + { + switch (*p) + { + case ' ': + case '\t': + for (q = p - 1; filename <= q && *q == '\\'; q--) + *dst++ = '\\'; + *dst++ = '\\'; + break; + + case '$': + *dst++ = '$'; + break; + + default: + /* nothing */; + } + *dst = *p; + } + + *dst = '\0'; + return buffer; +} + +/* Public routines. */ + +struct deps * +deps_init () +{ + struct deps *d = (struct deps *) xmalloc (sizeof (struct deps)); + + /* Allocate space for the vectors only if we need it. */ + + d->targetv = 0; + d->depv = 0; + + d->ntargets = 0; + d->targets_size = 0; + d->ndeps = 0; + d->deps_size = 0; + + return d; +} + +void +deps_free (d) + struct deps *d; +{ + unsigned int i; + + if (d->targetv) + { + for (i = 0; i < d->ntargets; i++) + free ((PTR) d->targetv[i]); + free (d->targetv); + } + + if (d->depv) + { + for (i = 0; i < d->ndeps; i++) + free ((PTR) d->depv[i]); + free (d->depv); + } + + free (d); +} + +/* Adds a target T. We make a copy, so it need not be a permanent + string. QUOTE is true if the string should be quoted. */ +void +deps_add_target (d, t, quote) + struct deps *d; + const char *t; + int quote; +{ + if (d->ntargets == d->targets_size) + { + d->targets_size = d->targets_size * 2 + 4; + d->targetv = (const char **) xrealloc (d->targetv, + d->targets_size * sizeof (const char *)); + } + + if (quote) + t = munge (t); /* Also makes permanent copy. */ + else + t = xstrdup (t); + + d->targetv[d->ntargets++] = t; +} + +/* Sets the default target if none has been given already. An empty + string as the default target in interpreted as stdin. The string + is quoted for MAKE. */ +void +deps_add_default_target (d, tgt) + struct deps *d; + const char *tgt; +{ + /* Only if we have no targets. */ + if (d->ntargets) + return; + + if (tgt[0] == '\0') + deps_add_target (d, "-", 1); + else + { +#ifndef TARGET_OBJECT_SUFFIX +# define TARGET_OBJECT_SUFFIX ".o" +#endif + const char *start = lbasename (tgt); + char *o = (char *) alloca (strlen (start) + strlen (TARGET_OBJECT_SUFFIX) + 1); + char *suffix; + + strcpy (o, start); + + suffix = strrchr (o, '.'); + if (!suffix) + suffix = o + strlen (o); + strcpy (suffix, TARGET_OBJECT_SUFFIX); + + deps_add_target (d, o, 1); + } +} + +void +deps_add_dep (d, t) + struct deps *d; + const char *t; +{ + t = munge (t); /* Also makes permanent copy. */ + + if (d->ndeps == d->deps_size) + { + d->deps_size = d->deps_size * 2 + 8; + d->depv = (const char **) + xrealloc (d->depv, d->deps_size * sizeof (const char *)); + } + d->depv[d->ndeps++] = t; +} + +void +deps_write (d, fp, colmax) + const struct deps *d; + FILE *fp; + unsigned int colmax; +{ + unsigned int size, i, column; + + column = 0; + if (colmax && colmax < 34) + colmax = 34; + + for (i = 0; i < d->ntargets; i++) + { + size = strlen (d->targetv[i]); + column += size; + if (colmax && column > colmax) + { + fputs (" \\\n ", fp); + column = 1 + size; + } + if (i) + { + putc (' ', fp); + column++; + } + fputs (d->targetv[i], fp); + } + + putc (':', fp); + putc (' ', fp); + column += 2; + + for (i = 0; i < d->ndeps; i++) + { + size = strlen (d->depv[i]); + column += size; + if (colmax && column > colmax) + { + fputs (" \\\n ", fp); + column = 1 + size; + } + if (i) + { + putc (' ', fp); + column++; + } + fputs (d->depv[i], fp); + } + putc ('\n', fp); +} + +void +deps_phony_targets (d, fp) + const struct deps *d; + FILE *fp; +{ + unsigned int i; + + for (i = 1; i < d->ndeps; i++) + { + putc ('\n', fp); + fputs (d->depv[i], fp); + putc (':', fp); + putc ('\n', fp); + } +} diff --git a/src/mkutil/tradcpp/mkdeps.h b/src/mkutil/tradcpp/mkdeps.h new file mode 100644 index 00000000..fa79b865 --- /dev/null +++ b/src/mkutil/tradcpp/mkdeps.h @@ -0,0 +1,62 @@ +/* Dependency generator for Makefile fragments. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Zack Weinberg, Mar 2000 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + +#ifndef GCC_MKDEPS_H +#define GCC_MKDEPS_H + +/* This is the data structure used by all the functions in mkdeps.c. + It's quite straightforward, but should be treated as opaque. */ + +struct deps; + +/* Create a deps buffer. */ +extern struct deps *deps_init PARAMS ((void)); + +/* Destroy a deps buffer. */ +extern void deps_free PARAMS ((struct deps *)); + +/* Add a target (appears on left side of the colon) to the deps list. Takes + a boolean indicating whether to quote the target for MAKE. */ +extern void deps_add_target PARAMS ((struct deps *, const char *, int)); + +/* Sets the default target if none has been given already. An empty + string as the default target in interpreted as stdin. */ +extern void deps_add_default_target PARAMS ((struct deps *, const char *)); + +/* Add a dependency (appears on the right side of the colon) to the + deps list. Dependencies will be printed in the order that they + were entered with this function. By convention, the first + dependency entered should be the primary source file. */ +extern void deps_add_dep PARAMS ((struct deps *, const char *)); + +/* Write out a deps buffer to a specified file. The third argument + is the number of columns to word-wrap at (0 means don't wrap). */ +extern void deps_write PARAMS ((const struct deps *, FILE *, + unsigned int)); + +/* For each dependency *except the first*, emit a dummy rule for that + file, causing it to depend on nothing. This is used to work around + the intermediate-file deletion misfeature in Make, in some + automatic dependency schemes. */ +extern void deps_phony_targets PARAMS ((const struct deps *, FILE *)); + +#endif /* ! GCC_MKDEPS_H */ diff --git a/src/mkutil/tradcpp/mkdeps.obj b/src/mkutil/tradcpp/mkdeps.obj new file mode 100644 index 0000000000000000000000000000000000000000..9053de7f893fd64031d956759ebe14f65caa922e GIT binary patch literal 14251 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/tradcpp/param.h b/src/mkutil/tradcpp/param.h new file mode 100644 index 00000000..4fe912d9 --- /dev/null +++ b/src/mkutil/tradcpp/param.h @@ -0,0 +1,51 @@ +/* sys/param.h + + Copyright 2001 Red Hat, Inc. + + This software is a copyrighted work licensed under the terms of the + Cygwin license. Please consult the file "CYGWIN_LICENSE" for + details. */ + +#ifndef _SYS_PARAM_H +#define _SYS_PARAM_H + +#include +/* Linux includes limits.h, but this is not universally done. */ +#include + +/* Max number of open files. The Posix version is OPEN_MAX. */ +/* Number of fds is virtually unlimited in cygwin, but we must provide + some reasonable value for Posix conformance */ +#define NOFILE 8192 + +/* Max number of groups; must keep in sync with NGROUPS_MAX in limits.h */ +#define NGROUPS 16 + +/* Ticks/second for system calls such as times() */ +/* FIXME: is this the appropriate value? */ +#define HZ 1000 + +/* Max hostname size that can be dealt with */ +/* FIXME: is this the appropriate value? */ +#define MAXHOSTNAMELEN 64 + +/* This is defined to be the same as MAX_PATH which is used internally. + The Posix version is PATH_MAX. */ +#define MAXPATHLEN (260 - 1 /*NUL*/) + +/* Some autoconf'd packages check for endianness. When cross-building we + can't run programs on the target. Fortunately, autoconf supports the + definition of byte order in sys/param.h (that's us!). + The values here are the same as used in gdb/defs.h (are the more + appropriate values?). */ +#define BIG_ENDIAN 4321 +#define LITTLE_ENDIAN 1234 + +/* All known win32 systems are little endian. */ +#define BYTE_ORDER LITTLE_ENDIAN + +#ifndef NULL +#define NULL 0L +#endif + +#endif diff --git a/src/mkutil/tradcpp/safe-ctype.c b/src/mkutil/tradcpp/safe-ctype.c new file mode 100644 index 00000000..b0eb0d1f --- /dev/null +++ b/src/mkutil/tradcpp/safe-ctype.c @@ -0,0 +1,163 @@ +/* replacement macros. + + Copyright (C) 2000 Free Software Foundation, Inc. + Contributed by Zack Weinberg . + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* This is a compatible replacement of the standard C library's + with the following properties: + + - Implements all isxxx() macros required by C99. + - Also implements some character classes useful when + parsing C-like languages. + - Does not change behavior depending on the current locale. + - Behaves properly for all values in the range of a signed or + unsigned char. */ + +#include "ansidecl.h" +#include +#include /* for EOF */ + +/* Shorthand */ +#define bl _sch_isblank +#define cn _sch_iscntrl +#define di _sch_isdigit +#define is _sch_isidst +#define lo _sch_islower +#define nv _sch_isnvsp +#define pn _sch_ispunct +#define pr _sch_isprint +#define sp _sch_isspace +#define up _sch_isupper +#define vs _sch_isvsp +#define xd _sch_isxdigit + +/* Masks. */ +#define L lo|is |pr /* lower case letter */ +#define XL lo|is|xd|pr /* lowercase hex digit */ +#define U up|is |pr /* upper case letter */ +#define XU up|is|xd|pr /* uppercase hex digit */ +#define D di |xd|pr /* decimal digit */ +#define P pn |pr /* punctuation */ +#define _ pn|is |pr /* underscore */ + +#define C cn /* control character */ +#define Z nv |cn /* NUL */ +#define M nv|sp |cn /* cursor movement: \f \v */ +#define V vs|sp |cn /* vertical space: \r \n */ +#define T nv|sp|bl|cn /* tab */ +#define S nv|sp|bl|pr /* space */ + +/* Are we ASCII? */ +#if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \ + && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21 \ + && EOF == -1 + +const unsigned short _sch_istable[256] = +{ + Z, C, C, C, C, C, C, C, /* NUL SOH STX ETX EOT ENQ ACK BEL */ + C, T, V, M, M, V, C, C, /* BS HT LF VT FF CR SO SI */ + C, C, C, C, C, C, C, C, /* DLE DC1 DC2 DC3 DC4 NAK SYN ETB */ + C, C, C, C, C, C, C, C, /* CAN EM SUB ESC FS GS RS US */ + S, P, P, P, P, P, P, P, /* SP ! " # $ % & ' */ + P, P, P, P, P, P, P, P, /* ( ) * + , - . / */ + D, D, D, D, D, D, D, D, /* 0 1 2 3 4 5 6 7 */ + D, D, P, P, P, P, P, P, /* 8 9 : ; < = > ? */ + P, XU, XU, XU, XU, XU, XU, U, /* @ A B C D E F G */ + U, U, U, U, U, U, U, U, /* H I J K L M N O */ + U, U, U, U, U, U, U, U, /* P Q R S T U V W */ + U, U, U, P, P, P, P, _, /* X Y Z [ \ ] ^ _ */ + P, XL, XL, XL, XL, XL, XL, L, /* ` a b c d e f g */ + L, L, L, L, L, L, L, L, /* h i j k l m n o */ + L, L, L, L, L, L, L, L, /* p q r s t u v w */ + L, L, L, P, P, P, P, C, /* x y z { | } ~ DEL */ + + /* high half of unsigned char is locale-specific, so all tests are + false in "C" locale */ + 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, 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, + 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, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +const unsigned char _sch_tolower[256] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, + + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + + 91, 92, 93, 94, 95, 96, + + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + + 123,124,125,126,127, + + 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143, + 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159, + 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175, + 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191, + + 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207, + 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223, + 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239, + 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255, +}; + +const unsigned char _sch_toupper[256] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, + + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + + 91, 92, 93, 94, 95, 96, + + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + + 123,124,125,126,127, + + 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143, + 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159, + 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175, + 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191, + + 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207, + 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223, + 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239, + 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255, +}; + +#else + #error "Unsupported host character set" +#endif /* not ASCII */ diff --git a/src/mkutil/tradcpp/safe-ctype.h b/src/mkutil/tradcpp/safe-ctype.h new file mode 100644 index 00000000..4b1ec810 --- /dev/null +++ b/src/mkutil/tradcpp/safe-ctype.h @@ -0,0 +1,103 @@ +/* replacement macros. + + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Contributed by Zack Weinberg . + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* This is a compatible replacement of the standard C library's + with the following properties: + + - Implements all isxxx() macros required by C99. + - Also implements some character classes useful when + parsing C-like languages. + - Does not change behavior depending on the current locale. + - Behaves properly for all values in the range of a signed or + unsigned char. + + To avoid conflicts, this header defines the isxxx functions in upper + case, e.g. ISALPHA not isalpha. */ + +#ifndef SAFE_CTYPE_H +#define SAFE_CTYPE_H + +#ifdef isalpha + #error "safe-ctype.h and ctype.h may not be used simultaneously" +#else + +/* Categories. */ + +enum { + /* In C99 */ + _sch_isblank = 0x0001, /* space \t */ + _sch_iscntrl = 0x0002, /* nonprinting characters */ + _sch_isdigit = 0x0004, /* 0-9 */ + _sch_islower = 0x0008, /* a-z */ + _sch_isprint = 0x0010, /* any printing character including ' ' */ + _sch_ispunct = 0x0020, /* all punctuation */ + _sch_isspace = 0x0040, /* space \t \n \r \f \v */ + _sch_isupper = 0x0080, /* A-Z */ + _sch_isxdigit = 0x0100, /* 0-9A-Fa-f */ + + /* Extra categories useful to cpplib. */ + _sch_isidst = 0x0200, /* A-Za-z_ */ + _sch_isvsp = 0x0400, /* \n \r */ + _sch_isnvsp = 0x0800, /* space \t \f \v \0 */ + + /* Combinations of the above. */ + _sch_isalpha = _sch_isupper|_sch_islower, /* A-Za-z */ + _sch_isalnum = _sch_isalpha|_sch_isdigit, /* A-Za-z0-9 */ + _sch_isidnum = _sch_isidst|_sch_isdigit, /* A-Za-z0-9_ */ + _sch_isgraph = _sch_isalnum|_sch_ispunct, /* isprint and not space */ + _sch_iscppsp = _sch_isvsp|_sch_isnvsp, /* isspace + \0 */ + _sch_isbasic = _sch_isprint|_sch_iscppsp /* basic charset of ISO C + (plus ` and @) */ +}; + +/* Character classification. */ +extern const unsigned short _sch_istable[256]; + +#define _sch_test(c, bit) (_sch_istable[(c) & 0xff] & (unsigned short)(bit)) + +#define ISALPHA(c) _sch_test(c, _sch_isalpha) +#define ISALNUM(c) _sch_test(c, _sch_isalnum) +#define ISBLANK(c) _sch_test(c, _sch_isblank) +#define ISCNTRL(c) _sch_test(c, _sch_iscntrl) +#define ISDIGIT(c) _sch_test(c, _sch_isdigit) +#define ISGRAPH(c) _sch_test(c, _sch_isgraph) +#define ISLOWER(c) _sch_test(c, _sch_islower) +#define ISPRINT(c) _sch_test(c, _sch_isprint) +#define ISPUNCT(c) _sch_test(c, _sch_ispunct) +#define ISSPACE(c) _sch_test(c, _sch_isspace) +#define ISUPPER(c) _sch_test(c, _sch_isupper) +#define ISXDIGIT(c) _sch_test(c, _sch_isxdigit) + +#define ISIDNUM(c) _sch_test(c, _sch_isidnum) +#define ISIDST(c) _sch_test(c, _sch_isidst) +#define IS_ISOBASIC(c) _sch_test(c, _sch_isbasic) +#define IS_VSPACE(c) _sch_test(c, _sch_isvsp) +#define IS_NVSPACE(c) _sch_test(c, _sch_isnvsp) +#define IS_SPACE_OR_NUL(c) _sch_test(c, _sch_iscppsp) + +/* Character transformation. */ +extern const unsigned char _sch_toupper[256]; +extern const unsigned char _sch_tolower[256]; +#define TOUPPER(c) _sch_toupper[(c) & 0xff] +#define TOLOWER(c) _sch_tolower[(c) & 0xff] + +#endif /* no ctype.h */ +#endif /* SAFE_CTYPE_H */ diff --git a/src/mkutil/tradcpp/safe-ctype.obj b/src/mkutil/tradcpp/safe-ctype.obj new file mode 100644 index 0000000000000000000000000000000000000000..04afc83214507d30e90a249951a8075019149b9e GIT binary patch literal 1931 zcmeZaWML@g<+V>_V_@K8fB?OeqSWM)vQ#LSK@G^*0^`7FE&&F;l+>isbd_M3kTfF$ z!!01^E06{Oppgt73<6GiMJb6TiC`fJ!NR~`$b`fPG94HU9H8cfz+?=73`3A1NC0G> zZc1ueVrfoEPG*vokEfHf0XlFEWqz5JvsF9t>iR-kfc-^}Eq{Nnty5(SMQO$B2k-K5MC1!sL{ zZEXerf|AVK%&N@1bOq=9+=9%U)FOqj)S}|d{5%CiBRvBHJqtrK3q1o#1`dJcf-raU z#1|)L#Ag%w@iH(AC;~OHm1pLa#Fv1$!XR#1 zL4GlWTMFV9XI7=gm+(OqvzI4lBo;yV1;9XOFH4Ni0Xm}YMsksy-wh=DQOv5 zIe7&|C1n*=HFXV5Eo~iLJ$(a1BV!X&Gjj_|D{C8DJ9~%3q-0?JP0z^8%FfBn%P%M_ zDlRE4E3c@mijIkmi%-BUUtLpMSKrXs)ZEhA*51+C)!ozE*FRz6q{&mJPMbbs=B(Ls z=FXeHVBw<0OO`HMzGCI7)oa$STfbrBrp;TnZri?N=dRs*_U_w%;NYRdM~)sle&Xb* z(`U|}JAdKgrOQ{YUb}wd=B?Xz?%uoq;NhdkPo6$|{^I4U*Kgjwd;j6%r_W!$e*6C8 z=da&?{{H*VK&k&7ot#}<-P}Dqy}W&V{rm$0gMvds!@?sXqagmrEk7vy56S^r3}OtS zKY8py1+*OYqO~m9%s{UoCF!GH8nBRrW)fiNF{CphmAc6g35R50S*n+r@IdX1W=2p21gbBrgP*>Js70=Nn89iofaM?v9M`GPg0Mg& zSP-ZHqz015!6h`1i4ai$DFgzD2y$fw(#^~W3Jp}C2js?s%YJA959fi)bSMv6FE9WA D7z@43 literal 0 HcmV?d00001 diff --git a/src/mkutil/tradcpp/symcat.h b/src/mkutil/tradcpp/symcat.h new file mode 100644 index 00000000..5bac3b43 --- /dev/null +++ b/src/mkutil/tradcpp/symcat.h @@ -0,0 +1,49 @@ +/* Symbol concatenation utilities. + + Copyright (C) 1998, 2000 Free Software Foundation, Inc. + + 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., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef SYM_CAT_H +#define SYM_CAT_H + +#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) +#define CONCAT2(a,b) a##b +#define CONCAT3(a,b,c) a##b##c +#define CONCAT4(a,b,c,d) a##b##c##d +#define STRINGX(s) #s +#else +/* Note one should never pass extra whitespace to the CONCATn macros, + e.g. CONCAT2(foo, bar) because traditonal C will keep the space between + the two labels instead of concatenating them. Instead, make sure to + write CONCAT2(foo,bar). */ +#define CONCAT2(a,b) a/**/b +#define CONCAT3(a,b,c) a/**/b/**/c +#define CONCAT4(a,b,c,d) a/**/b/**/c/**/d +#define STRINGX(s) "s" +#endif + +#define XCONCAT2(a,b) CONCAT2(a,b) +#define XCONCAT3(a,b,c) CONCAT3(a,b,c) +#define XCONCAT4(a,b,c,d) CONCAT4(a,b,c,d) + +/* Note the layer of indirection here is typically used to allow + stringification of the expansion of macros. I.e. "#define foo + bar", "XSTRING(foo)", to yield "bar". Be aware that this only + works for __STDC__, not for traditional C which will still resolve + to "foo". */ +#define XSTRING(s) STRINGX(s) + +#endif /* SYM_CAT_H */ diff --git a/src/mkutil/tradcpp/system.h b/src/mkutil/tradcpp/system.h new file mode 100644 index 00000000..a34449e7 --- /dev/null +++ b/src/mkutil/tradcpp/system.h @@ -0,0 +1,637 @@ +/* Get common system includes and various definitions and declarations based + on autoconf macros. + Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + + +#ifndef GCC_SYSTEM_H +#define GCC_SYSTEM_H + +/* This is the location of the online document giving information how + to report bugs. If you change this string, also check for strings + not under control of the preprocessor. */ +#define GCCBUGURL "" + +#include /* Nick */ + +/* We must include stdarg.h/varargs.h before stdio.h. */ +#ifdef ANSI_PROTOTYPES +#include +#else +#include +#endif + +#ifndef va_copy +# ifdef __va_copy +# define va_copy(d,s) __va_copy((d),(s)) +# else +# define va_copy(d,s) ((d) = (s)) +# endif +#endif + +#ifdef HAVE_STDDEF_H +# include +#endif + +#include + +/* Define a generic NULL if one hasn't already been defined. */ +#ifndef NULL +#define NULL 0 +#endif + +/* The compiler is not a multi-threaded application and therefore we + do not have to use the locking functions. In fact, using the locking + functions can cause the compiler to be significantly slower under + I/O bound conditions (such as -g -O0 on very large source files). + + HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio + code is multi-thread safe by default. If it is set to 0, then do + not worry about using the _unlocked functions. + + fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are + extensions and need to be prototyped by hand (since we do not + define _GNU_SOURCE). */ + +#if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED + +# ifdef HAVE_PUTC_UNLOCKED +# undef putc +# define putc(C, Stream) putc_unlocked (C, Stream) +# endif +# ifdef HAVE_FPUTC_UNLOCKED +# undef fputc +# define fputc(C, Stream) fputc_unlocked (C, Stream) +# endif + +# ifdef HAVE_FPUTS_UNLOCKED +# undef fputs +# define fputs(String, Stream) fputs_unlocked (String, Stream) +# if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED +extern int fputs_unlocked PARAMS ((const char *, FILE *)); +# endif +# endif +# ifdef HAVE_FWRITE_UNLOCKED +# undef fwrite +# define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream) +# if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED +extern int fwrite_unlocked PARAMS ((const PTR, size_t, size_t, FILE *)); +# endif +# endif +# ifdef HAVE_FPRINTF_UNLOCKED +# undef fprintf +/* We can't use a function-like macro here because we don't know if + we have varargs macros. */ +# define fprintf fprintf_unlocked +# if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED +extern int fprintf_unlocked PARAMS ((FILE *, const char *, ...)); +# endif +# endif + +#endif + +/* There are an extraordinary number of issues with . + The last straw is that it varies with the locale. Use libiberty's + replacement instead. */ +#include + +#include + +#include + +#if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO +extern int errno; +#endif + +#ifdef STRING_WITH_STRINGS +# include +# include +#else +# ifdef HAVE_STRING_H +# include +# else +# ifdef HAVE_STRINGS_H +# include +# endif +# endif +#endif + +#ifdef HAVE_STDLIB_H +# include +#endif + +/* If we don't have an overriding definition, set SUCCESS_EXIT_CODE and + FATAL_EXIT_CODE to EXIT_SUCCESS and EXIT_FAILURE respectively, + or 0 and 1 if those macros are not defined. */ +#ifndef SUCCESS_EXIT_CODE +# ifdef EXIT_SUCCESS +# define SUCCESS_EXIT_CODE EXIT_SUCCESS +# else +# define SUCCESS_EXIT_CODE 0 +# endif +#endif + +#ifndef FATAL_EXIT_CODE +# ifdef EXIT_FAILURE +# define FATAL_EXIT_CODE EXIT_FAILURE +# else +# define FATAL_EXIT_CODE 1 +# endif +#endif + +#ifdef HAVE_UNISTD_H +# include +#endif + +#ifdef HAVE_WINDOWS_H /* Nick */ +# include +#endif + +#ifdef HAVE_SYS_PARAM_H +# include +/* We use this identifier later and it appears in some vendor param.h's. */ +# undef PREFETCH +#endif + +#ifdef HAVE_PARAM_H /* Nick */ +# include +/* We use this identifier later and it appears in some vendor param.h's. */ +# undef PREFETCH +#endif + +#if HAVE_LIMITS_H +# include +#endif + +/* Get definitions of HOST_WIDE_INT and HOST_WIDEST_INT. */ +#include "hwint.h" + +/* A macro to determine whether a VALUE lies inclusively within a + certain range without evaluating the VALUE more than once. This + macro won't warn if the VALUE is unsigned and the LOWER bound is + zero, as it would e.g. with "VALUE >= 0 && ...". Note the LOWER + bound *is* evaluated twice, and LOWER must not be greater than + UPPER. However the bounds themselves can be either positive or + negative. */ +#define IN_RANGE(VALUE, LOWER, UPPER) \ + ((unsigned HOST_WIDE_INT) ((VALUE) - (LOWER)) <= ((UPPER) - (LOWER))) + +/* Infrastructure for defining missing _MAX and _MIN macros. Note that + macros defined with these cannot be used in #if. */ + +/* The extra casts work around common compiler bugs. */ +#define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1)) +/* The outer cast is needed to work around a bug in Cray C 5.0.3.0. + It is necessary at least when t == time_t. */ +#define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \ + ? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0)) +#define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t))) + +/* Use that infrastructure to provide a few constants. */ +#ifndef UCHAR_MAX +# define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char) +#endif + +#ifdef TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# ifdef HAVE_TIME_H +# include +# endif +# endif +#endif + +#ifdef HAVE_FCNTL_H +# include +#else +# ifdef HAVE_SYS_FILE_H +# include +# endif +#endif + +#ifndef SEEK_SET +# define SEEK_SET 0 +# define SEEK_CUR 1 +# define SEEK_END 2 +#endif +#ifndef F_OK +# define F_OK 0 +# define X_OK 1 +# define W_OK 2 +# define R_OK 4 +#endif +#ifndef O_RDONLY +# define O_RDONLY 0 +#endif +#ifndef O_WRONLY +# define O_WRONLY 1 +#endif + +/* Some systems define these in, e.g., param.h. We undefine these names + here to avoid the warnings. We prefer to use our definitions since we + know they are correct. */ + +#undef MIN +#undef MAX +#define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) +#define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) + +/* Returns the least number N such that N * Y >= X. */ +#define CEIL(x,y) (((x) + (y) - 1) / (y)) + +#ifdef HAVE_SYS_WAIT_H +#include +#endif + +#ifndef WIFSIGNALED +#define WIFSIGNALED(S) (((S) & 0xff) != 0 && ((S) & 0xff) != 0x7f) +#endif +#ifndef WTERMSIG +#define WTERMSIG(S) ((S) & 0x7f) +#endif +#ifndef WIFEXITED +#define WIFEXITED(S) (((S) & 0xff) == 0) +#endif +#ifndef WEXITSTATUS +#define WEXITSTATUS(S) (((S) & 0xff00) >> 8) +#endif +#ifndef WSTOPSIG +#define WSTOPSIG WEXITSTATUS +#endif + +/* The HAVE_DECL_* macros are three-state, undefined, 0 or 1. If they + are defined to 0 then we must provide the relevant declaration + here. These checks will be in the undefined state while configure + is running so be careful to test "defined (HAVE_DECL_*)". */ + +#if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF +extern double atof PARAMS ((const char *)); +#endif + +#if defined (HAVE_DECL_ATOL) && !HAVE_DECL_ATOL +extern long atol PARAMS ((const char *)); +#endif + +#if defined (HAVE_DECL_FREE) && !HAVE_DECL_FREE +extern void free PARAMS ((PTR)); +#endif + +#if defined (HAVE_DECL_GETCWD) && !HAVE_DECL_GETCWD +extern char *getcwd PARAMS ((char *, size_t)); +#endif + +#if defined (HAVE_DECL_GETENV) && !HAVE_DECL_GETENV +extern char *getenv PARAMS ((const char *)); +#endif + +#if defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT +extern int getopt PARAMS ((int, char * const *, const char *)); +#endif + +#if defined (HAVE_DECL_GETWD) && !HAVE_DECL_GETWD +extern char *getwd PARAMS ((char *)); +#endif + +#if defined (HAVE_DECL_SBRK) && !HAVE_DECL_SBRK +extern PTR sbrk PARAMS ((int)); +#endif + +#if defined (HAVE_DECL_STRSTR) && !HAVE_DECL_STRSTR +extern char *strstr PARAMS ((const char *, const char *)); +#endif + +#ifdef HAVE_MALLOC_H +#include +#endif + +#if defined (HAVE_DECL_MALLOC) && !HAVE_DECL_MALLOC +extern PTR malloc PARAMS ((size_t)); +#endif + +#if defined (HAVE_DECL_CALLOC) && !HAVE_DECL_CALLOC +extern PTR calloc PARAMS ((size_t, size_t)); +#endif + +#if defined (HAVE_DECL_REALLOC) && !HAVE_DECL_REALLOC +extern PTR realloc PARAMS ((PTR, size_t)); +#endif + +/* If the system doesn't provide strsignal, we get it defined in + libiberty but no declaration is supplied. */ +#ifndef HAVE_STRSIGNAL +# ifndef strsignal +extern const char *strsignal PARAMS ((int)); +# endif +#endif + +#ifdef HAVE_GETRLIMIT +# if defined (HAVE_DECL_GETRLIMIT) && !HAVE_DECL_GETRLIMIT +# ifndef getrlimit +# ifdef ANSI_PROTOTYPES +struct rlimit; +# endif +extern int getrlimit PARAMS ((int, struct rlimit *)); +# endif +# endif +#endif + +#ifdef HAVE_SETRLIMIT +# if defined (HAVE_DECL_SETRLIMIT) && !HAVE_DECL_SETRLIMIT +# ifndef setrlimit +# ifdef ANSI_PROTOTYPES +struct rlimit; +# endif +extern int setrlimit PARAMS ((int, const struct rlimit *)); +# endif +# endif +#endif + +/* HAVE_VOLATILE only refers to the stage1 compiler. We also check + __STDC__ and assume gcc sets it and has volatile in stage >=2. */ +#if !defined(HAVE_VOLATILE) && !defined(__STDC__) && !defined(volatile) +#define volatile +#endif + +#if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT +extern void abort PARAMS ((void)); +#endif + +/* 1 if we have C99 designated initializers. */ +#if !defined(HAVE_DESIGNATED_INITIALIZERS) +#define HAVE_DESIGNATED_INITIALIZERS \ + ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)) +#endif + +/* 1 if we have _Bool. */ +#ifndef HAVE__BOOL +# define HAVE__BOOL \ + ((GCC_VERSION >= 3000) || (__STDC_VERSION__ >= 199901L)) +#endif + + +#if HAVE_SYS_STAT_H +# include +#endif + +/* Test if something is a normal file. */ +#ifndef S_ISREG +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#endif + +/* Test if something is a directory. */ +#ifndef S_ISDIR +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#endif + +/* Test if something is a character special file. */ +#ifndef S_ISCHR +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#endif + +/* Test if something is a block special file. */ +#ifndef S_ISBLK +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#endif + +/* Test if something is a socket. */ +#ifndef S_ISSOCK +# ifdef S_IFSOCK +# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) +# else +# define S_ISSOCK(m) 0 +# endif +#endif + +/* Test if something is a FIFO. */ +#ifndef S_ISFIFO +# ifdef S_IFIFO +# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +# else +# define S_ISFIFO(m) 0 +# endif +#endif + +/* Approximate O_NONBLOCK. */ +#ifndef O_NONBLOCK +#define O_NONBLOCK O_NDELAY +#endif + +/* Approximate O_NOCTTY. */ +#ifndef O_NOCTTY +#define O_NOCTTY 0 +#endif + +/* Define well known filenos if the system does not define them. */ +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +/* Some systems have mkdir that takes a single argument. */ +#ifdef MKDIR_TAKES_ONE_ARG +# define mkdir(a,b) mkdir(a) +#endif + +/* Provide a way to print an address via printf. */ +#ifndef HOST_PTR_PRINTF +# ifdef HAVE_PRINTF_PTR +# define HOST_PTR_PRINTF "%p" +# else +# define HOST_PTR_PRINTF \ + (sizeof (int) == sizeof (char *) ? "%x" \ + : sizeof (long) == sizeof (char *) ? "%lx" : "%llx") +# endif +#endif /* ! HOST_PTR_PRINTF */ + +/* By default, colon separates directories in a path. */ +#ifndef PATH_SEPARATOR +#define PATH_SEPARATOR ':' +#endif + +#ifndef DIR_SEPARATOR +#define DIR_SEPARATOR '/' +#endif + +/* Define IS_DIR_SEPARATOR. */ +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(CH) ((CH) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(CH) \ + (((CH) == DIR_SEPARATOR) || ((CH) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +/* Say how to test for an absolute pathname. On Unix systems, this is if + it starts with a leading slash or a '$', the latter meaning the value of + an environment variable is to be used. On machien with DOS-based + file systems, it is also absolute if it starts with a drive identifier. */ +#ifdef HAVE_DOS_BASED_FILE_SYSTEM +#define IS_ABSOLUTE_PATHNAME(STR) \ + (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$' \ + || ((STR)[0] != '\0' && (STR)[1] == ':' && IS_DIR_SEPARATOR ((STR)[2]))) +#else +#define IS_ABSOLUTE_PATHNAME(STR) \ + (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$') +#endif + +/* Get libiberty declarations. */ +#include "libiberty.h" +#include "symcat.h" + +/* Provide a default for the HOST_BIT_BUCKET. + This suffices for POSIX-like hosts. */ + +#ifndef HOST_BIT_BUCKET +#define HOST_BIT_BUCKET "/dev/null" +#endif + +/* Be conservative and only use enum bitfields with GCC. + FIXME: provide a complete autoconf test for buggy enum bitfields. */ + +#if (GCC_VERSION > 2000) +#define ENUM_BITFIELD(TYPE) enum TYPE +#else +#define ENUM_BITFIELD(TYPE) unsigned int +#endif + +#ifndef offsetof +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER) +#endif + +/* Traditional C cannot initialize union members of structs. Provide + a macro which expands appropriately to handle it. This only works + if you intend to initialize the union member to zero since it relies + on default initialization to zero in the traditional C case. */ +#ifdef __STDC__ +#define UNION_INIT_ZERO , {0} +#else +#define UNION_INIT_ZERO +#endif + +/* Various error reporting routines want to use __FUNCTION__. */ +#if (GCC_VERSION < 2007) +#ifndef __FUNCTION__ +#define __FUNCTION__ "?" +#endif /* ! __FUNCTION__ */ +#endif + +/* __builtin_expect(A, B) evaluates to A, but notifies the compiler that + the most likely value of A is B. This feature was added at some point + between 2.95 and 3.0. Let's use 3.0 as the lower bound for now. */ +#if (GCC_VERSION < 3000) +#define __builtin_expect(a, b) (a) +#endif + +/* Provide some sort of boolean type. We use stdbool.h if it's + available. This must be after all inclusion of system headers, + as some of them will mess us up. */ +#undef bool +#undef true +#undef false +#undef TRUE +#undef FALSE + +#ifdef HAVE_STDBOOL_H +# include +#else +# if !HAVE__BOOL +typedef char _Bool; +# endif +# define bool _Bool +# define true 1 +# define false 0 +#endif + +#define TRUE true +#define FALSE false + +/* As the last action in this file, we poison the identifiers that + shouldn't be used. Note, luckily gcc-3.0's token-based integrated + preprocessor won't trip on poisoned identifiers that arrive from + the expansion of macros. E.g. #define strrchr rindex, won't error + if rindex is poisoned after this directive is issued and later on + strrchr is called. + + Note: We define bypass macros for the few cases where we really + want to use the libc memory allocation routines. Otherwise we + insist you use the "x" versions from libiberty. */ + +#define really_call_malloc malloc +#define really_call_calloc calloc +#define really_call_realloc realloc + +#if (GCC_VERSION >= 3000) + +/* Note autoconf checks for prototype declarations and includes + system.h while doing so. Only poison these tokens if actually + compiling gcc, so that the autoconf declaration tests for malloc + etc don't spuriously fail. */ +#ifdef IN_GCC +#undef malloc +#undef realloc +#undef calloc +#undef strdup + #pragma GCC poison malloc realloc calloc strdup + +/* Old target macros that have moved to the target hooks structure. */ + #pragma GCC poison ASM_OPEN_PAREN ASM_CLOSE_PAREN \ + FUNCTION_PROLOGUE FUNCTION_EPILOGUE \ + FUNCTION_END_PROLOGUE FUNCTION_BEGIN_EPILOGUE \ + DECL_MACHINE_ATTRIBUTES COMP_TYPE_ATTRIBUTES INSERT_ATTRIBUTES \ + VALID_MACHINE_DECL_ATTRIBUTE VALID_MACHINE_TYPE_ATTRIBUTE \ + SET_DEFAULT_TYPE_ATTRIBUTES SET_DEFAULT_DECL_ATTRIBUTES \ + MERGE_MACHINE_TYPE_ATTRIBUTES MERGE_MACHINE_DECL_ATTRIBUTES \ + MD_INIT_BUILTINS MD_EXPAND_BUILTIN ASM_OUTPUT_CONSTRUCTOR \ + ASM_OUTPUT_DESTRUCTOR SIGNED_CHAR_SPEC + +/* And other obsolete target macros, or macros that used to be in target + headers and were not used, and may be obsolete or may never have + been used. */ + #pragma GCC poison INT_ASM_OP ASM_OUTPUT_EH_REGION_BEG \ + ASM_OUTPUT_EH_REGION_END ASM_OUTPUT_LABELREF_AS_INT \ + DOESNT_NEED_UNWINDER EH_TABLE_LOOKUP OBJC_SELECTORS_WITHOUT_LABELS \ + OMIT_EH_TABLE EASY_DIV_EXPR IMPLICIT_FIX_EXPR \ + LONGJMP_RESTORE_FROM_STACK MAX_INT_TYPE_SIZE ASM_IDENTIFY_GCC \ + STDC_VALUE TRAMPOLINE_ALIGN ASM_IDENTIFY_GCC_AFTER_SOURCE \ + SLOW_ZERO_EXTEND SUBREG_REGNO_OFFSET DWARF_LINE_MIN_INSTR_LENGTH \ + BLOCK_PROFILER BLOCK_PROFILER_CODE FUNCTION_BLOCK_PROFILER \ + FUNCTION_BLOCK_PROFILER_EXIT MACHINE_STATE_SAVE \ + MACHINE_STATE_RESTORE + +#endif /* IN_GCC */ + +/* Note: not all uses of the `index' token (e.g. variable names and + structure members) have been eliminated. */ +#undef bcopy +#undef bzero +#undef bcmp +#undef rindex + #pragma GCC poison bcopy bzero bcmp rindex + +#endif /* GCC >= 3.0 */ + +#endif /* ! GCC_SYSTEM_H */ diff --git a/src/mkutil/tradcpp/tradcif.c b/src/mkutil/tradcpp/tradcif.c new file mode 100644 index 00000000..c5faadb1 --- /dev/null +++ b/src/mkutil/tradcpp/tradcif.c @@ -0,0 +1,1731 @@ +/* A Bison parser, made from tradcif.y + by GNU bison 1.35. */ + +#define YYBISON 1 /* Identify Bison output. */ + +# define TOKEN_INT 257 +# define TOKEN_CHAR 258 +# define TOKEN_NAME 259 +# define TOKEN_ERROR 260 +# define TOKEN_OR 261 +# define TOKEN_AND 262 +# define TOKEN_EQUAL 263 +# define TOKEN_NOTEQUAL 264 +# define TOKEN_LEQ 265 +# define TOKEN_GEQ 266 +# define TOKEN_LSH 267 +# define TOKEN_RSH 268 +# define TOKEN_UNARY 269 + +#line 24 "tradcif.y" + +#include "config.h" +#include "system.h" +#include "intl.h" +#include "tradcpp.h" +#include + + static int yylex PARAMS ((void)); + static void yyerror PARAMS ((const char *msgid)) ATTRIBUTE_NORETURN; + + static int parse_number PARAMS ((int)); + static int parse_escape PARAMS ((const char **)); + + static int expression_value; + static jmp_buf parse_return_error; + + /* During parsing of a C expression, the pointer to the next + character is in this variable. */ + + static const char *lexptr; + +#line 46 "tradcif.y" +#ifndef YYSTYPE +typedef union { + struct constant {long value; int unsignedp;} integer; + int voidval; + char *sval; +} yystype; +# define YYSTYPE yystype +# define YYSTYPE_IS_TRIVIAL 1 +#endif +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + + + +#define YYFINAL 62 +#define YYFLAG -32768 +#define YYNTBASE 34 + +/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ +#define YYTRANSLATE(x) ((unsigned)(x) <= 269 ? yytranslate[x] : 37) + +/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ +static const char yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 29, 2, 33, 2, 27, 14, 2, + 31, 32, 25, 23, 9, 24, 2, 26, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 8, 2, + 17, 2, 18, 7, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 12, 2, 30, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 3, 4, 5, + 6, 10, 11, 15, 16, 19, 20, 21, 22, 28 +}; + +#if YYDEBUG +static const short yyprhs[] = +{ + 0, 0, 2, 4, 8, 11, 14, 17, 20, 24, + 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, + 68, 72, 76, 80, 84, 88, 92, 96, 102, 104, + 106, 108 +}; +static const short yyrhs[] = +{ + 35, 0, 36, 0, 35, 9, 36, 0, 24, 36, + 0, 29, 36, 0, 23, 36, 0, 30, 36, 0, + 31, 35, 32, 0, 36, 25, 36, 0, 36, 26, + 36, 0, 36, 27, 36, 0, 36, 23, 36, 0, + 36, 24, 36, 0, 36, 21, 36, 0, 36, 22, + 36, 0, 36, 15, 36, 0, 36, 16, 36, 0, + 36, 19, 36, 0, 36, 20, 36, 0, 36, 17, + 36, 0, 36, 18, 36, 0, 36, 14, 36, 0, + 36, 13, 36, 0, 36, 12, 36, 0, 36, 11, + 36, 0, 36, 10, 36, 0, 36, 7, 36, 8, + 36, 0, 3, 0, 4, 0, 5, 0, 33, 0 +}; + +#endif + +#if YYDEBUG +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const short yyrline[] = +{ + 0, 75, 80, 81, 86, 89, 92, 94, 97, 102, + 108, 119, 130, 133, 136, 142, 148, 151, 154, 161, + 168, 175, 182, 185, 188, 191, 194, 197, 200, 202, + 204, 207 +}; +#endif + + +#if (YYDEBUG) || defined YYTOKEN_ERROR_VERBOSE + +/* YYTTOKEN_NAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */ +static const char *const yytname[] = +{ + "$", "error", "$undefined.", "TOKEN_INT", "TOKEN_CHAR", "TOKEN_NAME", "TOKEN_ERROR", "'?'", "':'", + "','", "TOKEN_OR", "TOKEN_AND", "'|'", "'^'", "'&'", "TOKEN_EQUAL", "TOKEN_NOTEQUAL", "'<'", + "'>'", "TOKEN_LEQ", "TOKEN_GEQ", "TOKEN_LSH", "TOKEN_RSH", "'+'", "'-'", "'*'", "'/'", "'%'", + "TOKEN_UNARY", "'!'", "'~'", "'('", "')'", "'#'", "start", "exp1", "exp", 0 +}; +#endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const short yyr1[] = +{ + 0, 34, 35, 35, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const short yyr2[] = +{ + 0, 1, 1, 3, 2, 2, 2, 2, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 5, 1, 1, + 1, 1 +}; + +/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE + doesn't specify something else to do. Zero means the default is an + error. */ +static const short yydefact[] = +{ + 0, 28, 29, 30, 0, 0, 0, 0, 0, 31, + 1, 2, 6, 4, 5, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, 3, 0, + 26, 25, 24, 23, 22, 16, 17, 20, 21, 18, + 19, 14, 15, 12, 13, 9, 10, 11, 0, 27, + 0, 0, 0 +}; + +static const short yydefgoto[] = +{ + 60, 10, 11 +}; + +static const short yypact[] = +{ + 32,-32768,-32768,-32768, 32, 32, 32, 32, 32,-32768, + 0, 80,-32768,-32768,-32768,-32768, 1, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32,-32768, 80, 59, + 97, 26, 112, 126, 139, 150, 150, 157, 157, 157, + 157, -19, -19, 33, 33,-32768,-32768,-32768, 32, 80, + 11, 12,-32768 +}; + +static const short yypgoto[] = +{ + -32768, 49, -4 +}; + + +#define YYLAST 184 + + +static const short yytable[] = +{ + 12, 13, 14, 15, 32, 33, 34, 35, 36, 17, + 17, 61, 62, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 37, 0, 1, 2, 3, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 59, 4, 5, 16, 34, 35, + 36, 6, 7, 8, 0, 9, 18, 58, 0, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 18, 0, 0, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 30, 31, + 32, 33, 34, 35, 36 +}; + +static const short yycheck[] = +{ + 4, 5, 6, 7, 23, 24, 25, 26, 27, 9, + 9, 0, 0, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 32, -1, 3, 4, 5, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 58, 23, 24, 8, 25, 26, + 27, 29, 30, 31, -1, 33, 7, 8, -1, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 7, -1, -1, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 21, 22, + 23, 24, 25, 26, 27 +}; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/usr/share/bison/bison.simple" + +/* Skeleton output parser for bison, + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software + Foundation, Inc. + + 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, 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 FTOKEN_OR 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* This is the parser code that is written into each bison parser when + the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER TOKEN_NAME SPACE" below. */ + +#if ! defined (yyoverflow) || defined (YYTOKEN_ERROR_VERBOSE) + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# if YYSTACK_USE_ALLOCA +# define YYSTACK_ALLOC alloca +# else +# ifndef YYSTACK_USE_ALLOCA +# if defined (alloca) || defined (_ALLOCA_H) +# define YYSTACK_ALLOC alloca +# else +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# else +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER TOKEN_NAME SPACE */ +# define YYSIZE_T size_t +# endif +# define YYSTACK_ALLOC malloc +# define YYSTACK_FREE free +# endif +#endif /* ! defined (yyoverflow) || defined (YYTOKEN_ERROR_VERBOSE) */ + + +#if (! defined (yyoverflow) \ + && (! defined (__cplusplus) \ + || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + short yyss; + YYSTYPE yyvs; +# if YYLSP_NEEDED + YYLTYPE yyls; +# endif +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# if YYLSP_NEEDED +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ + + 2 * YYSTACK_GAP_MAX) +# else +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAX) +# endif + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + register YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (0) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + + +#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) +# define YYSIZE_T __SIZE_TYPE__ +#endif +#if ! defined (YYSIZE_T) && defined (size_t) +# define YYSIZE_T size_t +#endif +#if ! defined (YYSIZE_T) +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER TOKEN_NAME SPACE */ +# define YYSIZE_T size_t +# endif +#endif +#if ! defined (YYSIZE_T) +# define YYSIZE_T unsigned int +#endif + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY -2 +#define YYEOF 0 +#define YYACCEPT goto yyacceptlab +#define YYABTOKEN_ORT goto yyabortlab +#define YYTOKEN_ERROR goto yyerrlab1 +/* Like YYTOKEN_ERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYTOKEN_ERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define YYFAIL goto yyerrlab +#define YYRECOVERING() (!!yyerrstatus) +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror ("syntax error: cannot back up"); \ + YYTOKEN_ERROR; \ + } \ +while (0) + +#define YYTTOKEN_ERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Compute the default location (before the actions + are run). + + When YYLLOC_DEFAULT is run, CURRENT is set the location of the + first token. By default, to implement support for ranges, extend + its range to the last symbol. */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + Current.last_line = Rhs[N].last_line; \ + Current.last_column = Rhs[N].last_column; +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#if YYPURE +# if YYLSP_NEEDED +# ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) +# else +# define YYLEX yylex (&yylval, &yylloc) +# endif +# else /* !YYLSP_NEEDED */ +# ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +# else +# define YYLEX yylex (&yylval) +# endif +# endif /* !YYLSP_NEEDED */ +#else /* !YYPURE */ +# define YYLEX yylex () +#endif /* !YYPURE */ + + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRTOKEN_INTF +# include /* INFRINGES ON USER TOKEN_NAME SPACE */ +# define YYFPRTOKEN_INTF fprintf +# endif + +# define YYDPRTOKEN_INTF(Args) \ +do { \ + if (yydebug) \ + YYFPRTOKEN_INTF Args; \ +} while (0) +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRTOKEN_INTF(Args) +#endif /* !YYDEBUG */ + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#if YYMAXDEPTH == 0 +# undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + +#ifdef YYTOKEN_ERROR_VERBOSE + +# ifndef yystrlen +# if defined (__GLIBC__) && defined (_STRING_H) +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +# if defined (__STDC__) || defined (__cplusplus) +yystrlen (const char *yystr) +# else +yystrlen (yystr) + const char *yystr; +# endif +{ + register const char *yys = yystr; + + while (*yys++ != '\0') + continue; + + return yys - yystr - 1; +} +# endif +# endif + +# ifndef yystpcpy +# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +# if defined (__STDC__) || defined (__cplusplus) +yystpcpy (char *yydest, const char *yysrc) +# else +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +# endif +{ + register char *yyd = yydest; + register const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif +#endif + +#line 315 "/usr/share/bison/bison.simple" + + +/* The user can define YYPARSE_PARAM as the name of an argument to be passed + into yyparse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM +# define YYPARSE_PARAM_DECL +# else +# define YYPARSE_PARAM_ARG YYPARSE_PARAM +# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +# endif +#else /* !YYPARSE_PARAM */ +# define YYPARSE_PARAM_ARG +# define YYPARSE_PARAM_DECL +#endif /* !YYPARSE_PARAM */ + +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ +# ifdef YYPARSE_PARAM +int yyparse (void *); +# else +int yyparse (void); +# endif +#endif + +/* YY_DECL_VARIABLES -- depending whether we use a pure parser, + variables are global, or local to YYPARSE. */ + +#define YY_DECL_NON_LSP_VARIABLES \ +/* The lookahead symbol. */ \ +int yychar; \ + \ +/* The semantic value of the lookahead symbol. */ \ +YYSTYPE yylval; \ + \ +/* Number of parse errors so far. */ \ +int yynerrs; + +#if YYLSP_NEEDED +# define YY_DECL_VARIABLES \ +YY_DECL_NON_LSP_VARIABLES \ + \ +/* Location data for the lookahead symbol. */ \ +YYLTYPE yylloc; +#else +# define YY_DECL_VARIABLES \ +YY_DECL_NON_LSP_VARIABLES +#endif + + +/* If nonreentrant, generate the variables here. */ + +#if !YYPURE +YY_DECL_VARIABLES +#endif /* !YYPURE */ + +int +yyparse (YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL +{ + /* If reentrant, generate the variables here. */ +#if YYPURE + YY_DECL_VARIABLES +#endif /* !YYPURE */ + + register int yystate; + register int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Lookahead token as an internal (translated) token number. */ + int yychar1 = 0; + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + short yyssa[YYINITDEPTH]; + short *yyss = yyssa; + register short *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + register YYSTYPE *yyvsp; + +#if YYLSP_NEEDED + /* The location stack. */ + YYLTYPE yylsa[YYINITDEPTH]; + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; +#endif + +#if YYLSP_NEEDED +# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) +#else +# define YYPOPSTACK (yyvsp--, yyssp--) +#endif + + YYSIZE_T yystacksize = YYINITDEPTH; + + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; +#if YYLSP_NEEDED + YYLTYPE yyloc; +#endif + + /* When reducing, the number of symbols on the RHS of the reduced + rule. */ + int yylen; + + YYDPRTOKEN_INTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; +#if YYLSP_NEEDED + yylsp = yyls; +#endif + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. + */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyssp >= yyss + yystacksize - 1) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. */ +# if YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; + /* This used to be a conditional around just the two extra args, + but that might be undefined if yyoverflow is a macro. */ + yyoverflow ("parser stack overflow", + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yyls1, yysize * sizeof (*yylsp), + &yystacksize); + yyls = yyls1; +# else + yyoverflow ("parser stack overflow", + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); +# endif + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyoverflowlab; +# else + /* Extend the stack our own way. */ + if (yystacksize >= YYMAXDEPTH) + goto yyoverflowlab; + yystacksize *= 2; + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; + + { + short *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyoverflowlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); +# if YYLSP_NEEDED + YYSTACK_RELOCATE (yyls); +# endif +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; +#if YYLSP_NEEDED + yylsp = yyls + yysize - 1; +#endif + + YYDPRTOKEN_INTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyssp >= yyss + yystacksize - 1) + YYABTOKEN_ORT; + } + + YYDPRTOKEN_INTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + + if (yychar == YYEMPTY) + { + YYDPRTOKEN_INTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ + { + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + + YYDPRTOKEN_INTF ((stderr, "Now at end of input.\n")); + } + else + { + yychar1 = YYTRANSLATE (yychar); + +#if YYDEBUG + /* We have to keep this `#if YYDEBUG', since we use variables + which are defined only if `YYDEBUG' is set. */ + if (yydebug) + { + YYFPRTOKEN_INTF (stderr, "Next token is %d (%s", + yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise + meaning of a token, for further debugging info. */ +# ifdef YYPRTOKEN_INT + YYPRTOKEN_INT (stderr, yychar, yylval); +# endif + YYFPRTOKEN_INTF (stderr, ")\n"); + } +#endif + } + + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + goto yydefault; + + yyn = yytable[yyn]; + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrlab; + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + YYDPRTOKEN_INTF ((stderr, "Shifting token %d (%s), ", + yychar, yytname[yychar1])); + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; +#if YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + yystate = yyn; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to the semantic value of + the lookahead token. This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + +#if YYLSP_NEEDED + /* Similarly for the default location. Let the user run additional + commands if for instance locations are ranges. */ + yyloc = yylsp[1-yylen]; + YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); +#endif + +#if YYDEBUG + /* We have to keep this `#if YYDEBUG', since we use variables which + are defined only if `YYDEBUG' is set. */ + if (yydebug) + { + int yyi; + + YYFPRTOKEN_INTF (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); + + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++) + YYFPRTOKEN_INTF (stderr, "%s ", yytname[yyrhs[yyi]]); + YYFPRTOKEN_INTF (stderr, " -> %s\n", yytname[yyr1[yyn]]); + } +#endif + + switch (yyn) { + +case 1: +#line 76 "tradcif.y" +{ expression_value = yyvsp[0].integer.value; ; + break;} +case 3: +#line 82 "tradcif.y" +{ yyval.integer = yyvsp[0].integer; ; + break;} +case 4: +#line 87 "tradcif.y" +{ yyval.integer.value = - yyvsp[0].integer.value; + yyval.integer.unsignedp = yyvsp[0].integer.unsignedp; ; + break;} +case 5: +#line 90 "tradcif.y" +{ yyval.integer.value = ! yyvsp[0].integer.value; + yyval.integer.unsignedp = 0; ; + break;} +case 6: +#line 93 "tradcif.y" +{ yyval.integer = yyvsp[0].integer; ; + break;} +case 7: +#line 95 "tradcif.y" +{ yyval.integer.value = ~ yyvsp[0].integer.value; + yyval.integer.unsignedp = yyvsp[0].integer.unsignedp; ; + break;} +case 8: +#line 98 "tradcif.y" +{ yyval.integer = yyvsp[-1].integer; ; + break;} +case 9: +#line 103 "tradcif.y" +{ yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; + if (yyval.integer.unsignedp) + yyval.integer.value = (unsigned) yyvsp[-2].integer.value * yyvsp[0].integer.value; + else + yyval.integer.value = yyvsp[-2].integer.value * yyvsp[0].integer.value; ; + break;} +case 10: +#line 109 "tradcif.y" +{ if (yyvsp[0].integer.value == 0) + { + error ("division by zero in #if"); + yyvsp[0].integer.value = 1; + } + yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; + if (yyval.integer.unsignedp) + yyval.integer.value = (unsigned) yyvsp[-2].integer.value / yyvsp[0].integer.value; + else + yyval.integer.value = yyvsp[-2].integer.value / yyvsp[0].integer.value; ; + break;} +case 11: +#line 120 "tradcif.y" +{ if (yyvsp[0].integer.value == 0) + { + error ("division by zero in #if"); + yyvsp[0].integer.value = 1; + } + yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; + if (yyval.integer.unsignedp) + yyval.integer.value = (unsigned) yyvsp[-2].integer.value % yyvsp[0].integer.value; + else + yyval.integer.value = yyvsp[-2].integer.value % yyvsp[0].integer.value; ; + break;} +case 12: +#line 131 "tradcif.y" +{ yyval.integer.value = yyvsp[-2].integer.value + yyvsp[0].integer.value; + yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; + break;} +case 13: +#line 134 "tradcif.y" +{ yyval.integer.value = yyvsp[-2].integer.value - yyvsp[0].integer.value; + yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; + break;} +case 14: +#line 137 "tradcif.y" +{ yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp; + if (yyval.integer.unsignedp) + yyval.integer.value = (unsigned) yyvsp[-2].integer.value << yyvsp[0].integer.value; + else + yyval.integer.value = yyvsp[-2].integer.value << yyvsp[0].integer.value; ; + break;} +case 15: +#line 143 "tradcif.y" +{ yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp; + if (yyval.integer.unsignedp) + yyval.integer.value = (unsigned) yyvsp[-2].integer.value >> yyvsp[0].integer.value; + else + yyval.integer.value = yyvsp[-2].integer.value >> yyvsp[0].integer.value; ; + break;} +case 16: +#line 149 "tradcif.y" +{ yyval.integer.value = (yyvsp[-2].integer.value == yyvsp[0].integer.value); + yyval.integer.unsignedp = 0; ; + break;} +case 17: +#line 152 "tradcif.y" +{ yyval.integer.value = (yyvsp[-2].integer.value != yyvsp[0].integer.value); + yyval.integer.unsignedp = 0; ; + break;} +case 18: +#line 155 "tradcif.y" +{ yyval.integer.unsignedp = 0; + if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) + yyval.integer.value = + (unsigned) yyvsp[-2].integer.value <= (unsigned) yyvsp[0].integer.value; + else + yyval.integer.value = yyvsp[-2].integer.value <= yyvsp[0].integer.value; ; + break;} +case 19: +#line 162 "tradcif.y" +{ yyval.integer.unsignedp = 0; + if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) + yyval.integer.value = + (unsigned) yyvsp[-2].integer.value >= (unsigned) yyvsp[0].integer.value; + else + yyval.integer.value = yyvsp[-2].integer.value >= yyvsp[0].integer.value; ; + break;} +case 20: +#line 169 "tradcif.y" +{ yyval.integer.unsignedp = 0; + if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) + yyval.integer.value = + (unsigned) yyvsp[-2].integer.value < (unsigned) yyvsp[0].integer.value; + else + yyval.integer.value = yyvsp[-2].integer.value < yyvsp[0].integer.value; ; + break;} +case 21: +#line 176 "tradcif.y" +{ yyval.integer.unsignedp = 0; + if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) + yyval.integer.value = + (unsigned) yyvsp[-2].integer.value > (unsigned) yyvsp[0].integer.value; + else + yyval.integer.value = yyvsp[-2].integer.value > yyvsp[0].integer.value; ; + break;} +case 22: +#line 183 "tradcif.y" +{ yyval.integer.value = yyvsp[-2].integer.value & yyvsp[0].integer.value; + yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; + break;} +case 23: +#line 186 "tradcif.y" +{ yyval.integer.value = yyvsp[-2].integer.value ^ yyvsp[0].integer.value; + yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; + break;} +case 24: +#line 189 "tradcif.y" +{ yyval.integer.value = yyvsp[-2].integer.value | yyvsp[0].integer.value; + yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; + break;} +case 25: +#line 192 "tradcif.y" +{ yyval.integer.value = (yyvsp[-2].integer.value && yyvsp[0].integer.value); + yyval.integer.unsignedp = 0; ; + break;} +case 26: +#line 195 "tradcif.y" +{ yyval.integer.value = (yyvsp[-2].integer.value || yyvsp[0].integer.value); + yyval.integer.unsignedp = 0; ; + break;} +case 27: +#line 198 "tradcif.y" +{ yyval.integer.value = yyvsp[-4].integer.value ? yyvsp[-2].integer.value : yyvsp[0].integer.value; + yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; + break;} +case 28: +#line 201 "tradcif.y" +{ yyval.integer = yylval.integer; ; + break;} +case 29: +#line 203 "tradcif.y" +{ yyval.integer = yylval.integer; ; + break;} +case 30: +#line 205 "tradcif.y" +{ yyval.integer.value = 0; + yyval.integer.unsignedp = 0; ; + break;} +case 31: +#line 207 "tradcif.y" +{ yyval.integer.value = + test_assertion ((unsigned char **) &lexptr); ; + break;} +} + +#line 705 "/usr/share/bison/bison.simple" + + + yyvsp -= yylen; + yyssp -= yylen; +#if YYLSP_NEEDED + yylsp -= yylen; +#endif + +#if YYDEBUG + if (yydebug) + { + short *yyssp1 = yyss - 1; + YYFPRTOKEN_INTF (stderr, "state stack now"); + while (yyssp1 != yyssp) + YYFPRTOKEN_INTF (stderr, " %d", *++yyssp1); + YYFPRTOKEN_INTF (stderr, "\n"); + } +#endif + + *++yyvsp = yyval; +#if YYLSP_NEEDED + *++yylsp = yyloc; +#endif + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTBASE] + *yyssp; + if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTBASE]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; + +#ifdef YYTOKEN_ERROR_VERBOSE + yyn = yypact[yystate]; + + if (yyn > YYFLAG && yyn < YYLAST) + { + YYSIZE_T yysize = 0; + char *yymsg; + int yyx, yycount; + + yycount = 0; + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) + if (yycheck[yyx + yyn] == yyx) + yysize += yystrlen (yytname[yyx]) + 15, yycount++; + yysize += yystrlen ("parse error, unexpected ") + 1; + yysize += yystrlen (yytname[YYTRANSLATE (yychar)]); + yymsg = (char *) YYSTACK_ALLOC (yysize); + if (yymsg != 0) + { + char *yyp = yystpcpy (yymsg, "parse error, unexpected "); + yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]); + + if (yycount < 5) + { + yycount = 0; + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); + yyx++) + if (yycheck[yyx + yyn] == yyx) + { + const char *yyq = ! yycount ? ", expecting " : " or "; + yyp = yystpcpy (yyp, yyq); + yyp = yystpcpy (yyp, yytname[yyx]); + yycount++; + } + } + yyerror (yymsg); + YYSTACK_FREE (yymsg); + } + else + yyerror ("parse error; also virtual memory exhausted"); + } + else +#endif /* defined (YYTOKEN_ERROR_VERBOSE) */ + yyerror ("parse error"); + } + goto yyerrlab1; + + +/*--------------------------------------------------. +| yyerrlab1 -- error raised explicitly by an action | +`--------------------------------------------------*/ +yyerrlab1: + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + /* return failure if at end of input */ + if (yychar == YYEOF) + YYABTOKEN_ORT; + YYDPRTOKEN_INTF ((stderr, "Discarding token %d (%s).\n", + yychar, yytname[yychar1])); + yychar = YYEMPTY; + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + + yyerrstatus = 3; /* Each real token shifted decrements this */ + + goto yyerrhandle; + + +/*-------------------------------------------------------------------. +| yyerrdefault -- current state does not do anything special for the | +| error token. | +`-------------------------------------------------------------------*/ +yyerrdefault: +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + + /* If its default is to accept any token, ok. Otherwise pop it. */ + yyn = yydefact[yystate]; + if (yyn) + goto yydefault; +#endif + + +/*---------------------------------------------------------------. +| yyerrpop -- pop the current state because it cannot handle the | +| error token | +`---------------------------------------------------------------*/ +yyerrpop: + if (yyssp == yyss) + YYABTOKEN_ORT; + yyvsp--; + yystate = *--yyssp; +#if YYLSP_NEEDED + yylsp--; +#endif + +#if YYDEBUG + if (yydebug) + { + short *yyssp1 = yyss - 1; + YYFPRTOKEN_INTF (stderr, "Error: state stack now"); + while (yyssp1 != yyssp) + YYFPRTOKEN_INTF (stderr, " %d", *++yyssp1); + YYFPRTOKEN_INTF (stderr, "\n"); + } +#endif + +/*--------------. +| yyerrhandle. | +`--------------*/ +yyerrhandle: + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yyerrdefault; + + yyn += YYTTOKEN_ERROR; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTTOKEN_ERROR) + goto yyerrdefault; + + yyn = yytable[yyn]; + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrpop; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrpop; + + if (yyn == YYFINAL) + YYACCEPT; + + YYDPRTOKEN_INTF ((stderr, "Shifting error token, ")); + + *++yyvsp = yylval; +#if YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABTOKEN_ORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +/*---------------------------------------------. +| yyoverflowab -- parser overflow comes here. | +`---------------------------------------------*/ +yyoverflowlab: + yyerror ("parser stack overflow"); + yyresult = 2; + /* Fall through. */ + +yyreturn: +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + return yyresult; +} +#line 210 "tradcif.y" + + +/* Take care of parsing a number (anything that starts with a digit). + Set yylval and return the token type; update lexptr. + LEN is the number of characters in it. */ + +/* maybe needs to actually deal with floating point numbers */ + +static int +parse_number (olen) + int olen; +{ + const char *p = lexptr; + long n = 0; + int c; + int base = 10; + int len = olen; + + for (c = 0; c < len; c++) + if (p[c] == '.') { + /* It's a float since it contains a point. */ + yyerror ("floating point numbers not allowed in #if expressions"); + return TOKEN_ERROR; + } + + /* Traditionally, all numbers are signed. However, we make it + unsigned if requested with a suffix. */ + yylval.integer.unsignedp = 0; + + if (len >= 3 && (!strncmp (p, "0x", 2) || !strncmp (p, "0X", 2))) { + p += 2; + base = 16; + len -= 2; + } + else if (*p == '0') + base = 8; + + while (len > 0) { + c = *p++; + len--; + if (ISUPPER (c)) + c = TOLOWER (c); + + if (ISDIGIT (c) + || (base == 16 && ISXDIGIT (c))) { + n = (n * base) + hex_value (c); + } else { + /* `l' means long, and `u' means unsigned. */ + while (1) { + if (c == 'l' || c == 'L') + ; + else if (c == 'u' || c == 'U') + yylval.integer.unsignedp = 1; + else + break; + + if (len == 0) + break; + c = *p++; + len--; + } + /* Don't look for any more digits after the suffixes. */ + break; + } + } + + if (len != 0) { + yyerror ("invalid number in #if expression"); + return TOKEN_ERROR; + } + + lexptr = p; + yylval.integer.value = n; + return TOKEN_INT; +} + +struct token { + const char *const operator; + const int token; +}; + +#ifndef NULL +#define NULL 0 +#endif + +static const struct token tokentab2[] = { + {"&&", TOKEN_AND}, + {"||", TOKEN_OR}, + {"<<", TOKEN_LSH}, + {">>", TOKEN_RSH}, + {"==", TOKEN_EQUAL}, + {"!=", TOKEN_NOTEQUAL}, + {"<=", TOKEN_LEQ}, + {">=", TOKEN_GEQ}, + {NULL, TOKEN_ERROR} +}; + +/* Read one token, getting characters through lexptr. */ + +static int +yylex () +{ + int c; + int namelen; + const char *tokstart; + const struct token *toktab; + + retry: + + tokstart = lexptr; + c = *tokstart; + /* See if it is a special token of length 2. */ + for (toktab = tokentab2; toktab->operator != NULL; toktab++) + if (c == *toktab->operator && tokstart[1] == toktab->operator[1]) { + lexptr += 2; + return toktab->token; + } + + switch (c) { + case 0: + return 0; + + case ' ': + case '\t': + case '\r': + case '\n': + lexptr++; + goto retry; + + case '\'': + lexptr++; + c = *lexptr++; + if (c == '\\') + c = parse_escape (&lexptr); + + /* Sign-extend the constant if chars are signed on target machine. */ + { + if (flag_signed_char == 0 + || ((c >> (CHAR_TYPE_SIZE - 1)) & 1) == 0) + yylval.integer.value = c & ((1 << CHAR_TYPE_SIZE) - 1); + else + yylval.integer.value = c | ~((1 << CHAR_TYPE_SIZE) - 1); + } + + yylval.integer.unsignedp = 0; + c = *lexptr++; + if (c != '\'') { + yyerror ("invalid character constant in #if"); + return TOKEN_ERROR; + } + + return TOKEN_CHAR; + + /* some of these chars are invalid in constant expressions; + maybe do something about them later */ + case '/': + case '+': + case '-': + case '*': + case '%': + case '|': + case '&': + case '^': + case '~': + case '!': + case '@': + case '<': + case '>': + case '(': + case ')': + case '[': + case ']': + case '.': + case '?': + case ':': + case '=': + case '{': + case '}': + case ',': + case '#': + lexptr++; + return c; + + case '"': + yyerror ("double quoted strings not allowed in #if expressions"); + return TOKEN_ERROR; + } + if (ISDIGIT (c)) { + /* It's a number */ + for (namelen = 0; + c = tokstart[namelen], is_idchar (c) || c == '.'; + namelen++) + ; + return parse_number (namelen); + } + + if (!is_idstart (c)) { + yyerror ("invalid token in expression"); + return TOKEN_ERROR; + } + + /* It is a name. See how long it is. */ + + for (namelen = 0; + is_idchar (tokstart[namelen]); + namelen++) + ; + + lexptr += namelen; + return TOKEN_NAME; +} + + +/* Parse a C escape sequence. STRING_PTR points to a variable + containing a pointer to the string to parse. That pointer + is updated past the characters we use. The value of the + escape sequence is returned. + + A negative value means the sequence \ newline was seen, + which is supposed to be equivalent to nothing at all. + + If \ is followed by a null character, we return a negative + value and leave the string pointer pointing at the null character. + + If \ is followed by 000, we return 0 and leave the string pointer + after the zeros. A value of 0 does not mean end of string. */ + +static int +parse_escape (string_ptr) + const char **string_ptr; +{ + int c = *(*string_ptr)++; + switch (c) + { + case 'a': + return TARGET_BELL; + case 'b': + return TARGET_BS; + case 'e': + return 033; + case 'f': + return TARGET_FF; + case 'n': + return TARGET_NEWLINE; + case 'r': + return TARGET_CR; + case 't': + return TARGET_TAB; + case 'v': + return TARGET_VT; + case '\n': + return -2; + case 0: + (*string_ptr)--; + return 0; + case '^': + c = *(*string_ptr)++; + if (c == '\\') + c = parse_escape (string_ptr); + if (c == '?') + return 0177; + return (c & 0200) | (c & 037); + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + { + int i = c - '0'; + int count = 0; + while (++count < 3) + { + c = *(*string_ptr)++; + if (c >= '0' && c <= '7') + i = (i << 3) + c - '0'; + else + { + (*string_ptr)--; + break; + } + } + if ((i & ~((1 << CHAR_TYPE_SIZE) - 1)) != 0) + { + i &= (1 << CHAR_TYPE_SIZE) - 1; + warning ("octal character constant does not fit in a byte"); + } + return i; + } + case 'x': + { + int i = 0; + for (;;) + { + c = *(*string_ptr)++; + if (hex_p (c)) + i = (i << 4) + hex_value (c); + else + { + (*string_ptr)--; + break; + } + } + if ((i & ~((1 << BITS_PER_UNIT) - 1)) != 0) + { + i &= (1 << BITS_PER_UNIT) - 1; + warning ("hex character constant does not fit in a byte"); + } + return i; + } + default: + return c; + } +} + +static void +yyerror (msgid) + const char *msgid; +{ + error ("%s", _(msgid)); + longjmp (parse_return_error, 1); +} + +/* This page contains the entry point to this file. */ + +/* Parse STRING as an expression, and complain if this fails + to use up all of the contents of STRING. */ +/* We do not support C comments. They should be removed before + this function is called. */ + +int +parse_c_expression (string) + const char *string; +{ + lexptr = string; + + if (lexptr == 0 || *lexptr == 0) { + error ("empty #if expression"); + return 0; /* don't include the #if group */ + } + + /* if there is some sort of scanning error, just return 0 and assume + the parsing routine has printed an error message somewhere. + there is surely a better thing to do than this. */ + if (setjmp (parse_return_error)) + return 0; + + if (yyparse ()) + return 0; /* actually this is never reached + the way things stand. */ + if (*lexptr) + error ("Junk after end of expression."); + + return expression_value; /* set by yyparse () */ +} diff --git a/src/mkutil/tradcpp/tradcif.obj b/src/mkutil/tradcpp/tradcif.obj new file mode 100644 index 0000000000000000000000000000000000000000..ee39e067a084e3bf15a7e6a55679352c3d08bba9 GIT binary patch literal 29547 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 + + static int yylex PARAMS ((void)); + static void yyerror PARAMS ((const char *msgid)) ATTRIBUTE_NORETURN; + + static int parse_number PARAMS ((int)); + static int parse_escape PARAMS ((const char **)); + + static int expression_value; + static jmp_buf parse_return_error; + + /* During parsing of a C expression, the pointer to the next + character is in this variable. */ + + static const char *lexptr; +%} + +%union { + struct constant {long value; int unsignedp;} integer; + int voidval; + char *sval; +} + +%type exp exp1 start +%token INT CHAR +%token NAME +%token ERROR + +%right '?' ':' +%left ',' +%left OR +%left AND +%left '|' +%left '^' +%left '&' +%left EQUAL NOTEQUAL +%left '<' '>' LEQ GEQ +%left LSH RSH +%left '+' '-' +%left '*' '/' '%' +%right UNARY + +/* %expect 40 */ + +%% + +start : exp1 + { expression_value = $1.value; } + ; + +/* Expressions, including the comma operator. */ +exp1 : exp + | exp1 ',' exp + { $$ = $3; } + ; + +/* Expressions, not including the comma operator. */ +exp : '-' exp %prec UNARY + { $$.value = - $2.value; + $$.unsignedp = $2.unsignedp; } + | '!' exp %prec UNARY + { $$.value = ! $2.value; + $$.unsignedp = 0; } + | '+' exp %prec UNARY + { $$ = $2; } + | '~' exp %prec UNARY + { $$.value = ~ $2.value; + $$.unsignedp = $2.unsignedp; } + | '(' exp1 ')' + { $$ = $2; } + ; + +/* Binary operators in order of decreasing precedence. */ +exp : exp '*' exp + { $$.unsignedp = $1.unsignedp || $3.unsignedp; + if ($$.unsignedp) + $$.value = (unsigned) $1.value * $3.value; + else + $$.value = $1.value * $3.value; } + | exp '/' exp + { if ($3.value == 0) + { + error ("division by zero in #if"); + $3.value = 1; + } + $$.unsignedp = $1.unsignedp || $3.unsignedp; + if ($$.unsignedp) + $$.value = (unsigned) $1.value / $3.value; + else + $$.value = $1.value / $3.value; } + | exp '%' exp + { if ($3.value == 0) + { + error ("division by zero in #if"); + $3.value = 1; + } + $$.unsignedp = $1.unsignedp || $3.unsignedp; + if ($$.unsignedp) + $$.value = (unsigned) $1.value % $3.value; + else + $$.value = $1.value % $3.value; } + | exp '+' exp + { $$.value = $1.value + $3.value; + $$.unsignedp = $1.unsignedp || $3.unsignedp; } + | exp '-' exp + { $$.value = $1.value - $3.value; + $$.unsignedp = $1.unsignedp || $3.unsignedp; } + | exp LSH exp + { $$.unsignedp = $1.unsignedp; + if ($$.unsignedp) + $$.value = (unsigned) $1.value << $3.value; + else + $$.value = $1.value << $3.value; } + | exp RSH exp + { $$.unsignedp = $1.unsignedp; + if ($$.unsignedp) + $$.value = (unsigned) $1.value >> $3.value; + else + $$.value = $1.value >> $3.value; } + | exp EQUAL exp + { $$.value = ($1.value == $3.value); + $$.unsignedp = 0; } + | exp NOTEQUAL exp + { $$.value = ($1.value != $3.value); + $$.unsignedp = 0; } + | exp LEQ exp + { $$.unsignedp = 0; + if ($1.unsignedp || $3.unsignedp) + $$.value = + (unsigned) $1.value <= (unsigned) $3.value; + else + $$.value = $1.value <= $3.value; } + | exp GEQ exp + { $$.unsignedp = 0; + if ($1.unsignedp || $3.unsignedp) + $$.value = + (unsigned) $1.value >= (unsigned) $3.value; + else + $$.value = $1.value >= $3.value; } + | exp '<' exp + { $$.unsignedp = 0; + if ($1.unsignedp || $3.unsignedp) + $$.value = + (unsigned) $1.value < (unsigned) $3.value; + else + $$.value = $1.value < $3.value; } + | exp '>' exp + { $$.unsignedp = 0; + if ($1.unsignedp || $3.unsignedp) + $$.value = + (unsigned) $1.value > (unsigned) $3.value; + else + $$.value = $1.value > $3.value; } + | exp '&' exp + { $$.value = $1.value & $3.value; + $$.unsignedp = $1.unsignedp || $3.unsignedp; } + | exp '^' exp + { $$.value = $1.value ^ $3.value; + $$.unsignedp = $1.unsignedp || $3.unsignedp; } + | exp '|' exp + { $$.value = $1.value | $3.value; + $$.unsignedp = $1.unsignedp || $3.unsignedp; } + | exp AND exp + { $$.value = ($1.value && $3.value); + $$.unsignedp = 0; } + | exp OR exp + { $$.value = ($1.value || $3.value); + $$.unsignedp = 0; } + | exp '?' exp ':' exp + { $$.value = $1.value ? $3.value : $5.value; + $$.unsignedp = $3.unsignedp || $5.unsignedp; } + | INT + { $$ = yylval.integer; } + | CHAR + { $$ = yylval.integer; } + | NAME + { $$.value = 0; + $$.unsignedp = 0; } + | '#' { $$.value = + test_assertion ((unsigned char **) &lexptr); } + ; +%% + +/* Take care of parsing a number (anything that starts with a digit). + Set yylval and return the token type; update lexptr. + LEN is the number of characters in it. */ + +/* maybe needs to actually deal with floating point numbers */ + +static int +parse_number (olen) + int olen; +{ + const char *p = lexptr; + long n = 0; + int c; + int base = 10; + int len = olen; + + for (c = 0; c < len; c++) + if (p[c] == '.') { + /* It's a float since it contains a point. */ + yyerror ("floating point numbers not allowed in #if expressions"); + return ERROR; + } + + /* Traditionally, all numbers are signed. However, we make it + unsigned if requested with a suffix. */ + yylval.integer.unsignedp = 0; + + if (len >= 3 && (!strncmp (p, "0x", 2) || !strncmp (p, "0X", 2))) { + p += 2; + base = 16; + len -= 2; + } + else if (*p == '0') + base = 8; + + while (len > 0) { + c = *p++; + len--; + if (ISUPPER (c)) + c = TOLOWER (c); + + if (ISDIGIT (c) + || (base == 16 && ISXDIGIT (c))) { + n = (n * base) + hex_value (c); + } else { + /* `l' means long, and `u' means unsigned. */ + while (1) { + if (c == 'l' || c == 'L') + ; + else if (c == 'u' || c == 'U') + yylval.integer.unsignedp = 1; + else + break; + + if (len == 0) + break; + c = *p++; + len--; + } + /* Don't look for any more digits after the suffixes. */ + break; + } + } + + if (len != 0) { + yyerror ("invalid number in #if expression"); + return ERROR; + } + + lexptr = p; + yylval.integer.value = n; + return INT; +} + +struct token { + const char *const operator; + const int token; +}; + +#ifndef NULL +#define NULL 0 +#endif + +static const struct token tokentab2[] = { + {"&&", AND}, + {"||", OR}, + {"<<", LSH}, + {">>", RSH}, + {"==", EQUAL}, + {"!=", NOTEQUAL}, + {"<=", LEQ}, + {">=", GEQ}, + {NULL, ERROR} +}; + +/* Read one token, getting characters through lexptr. */ + +static int +yylex () +{ + int c; + int namelen; + const char *tokstart; + const struct token *toktab; + + retry: + + tokstart = lexptr; + c = *tokstart; + /* See if it is a special token of length 2. */ + for (toktab = tokentab2; toktab->operator != NULL; toktab++) + if (c == *toktab->operator && tokstart[1] == toktab->operator[1]) { + lexptr += 2; + return toktab->token; + } + + switch (c) { + case 0: + return 0; + + case ' ': + case '\t': + case '\r': + case '\n': + lexptr++; + goto retry; + + case '\'': + lexptr++; + c = *lexptr++; + if (c == '\\') + c = parse_escape (&lexptr); + + /* Sign-extend the constant if chars are signed on target machine. */ + { + if (flag_signed_char == 0 + || ((c >> (CHAR_TYPE_SIZE - 1)) & 1) == 0) + yylval.integer.value = c & ((1 << CHAR_TYPE_SIZE) - 1); + else + yylval.integer.value = c | ~((1 << CHAR_TYPE_SIZE) - 1); + } + + yylval.integer.unsignedp = 0; + c = *lexptr++; + if (c != '\'') { + yyerror ("invalid character constant in #if"); + return ERROR; + } + + return CHAR; + + /* some of these chars are invalid in constant expressions; + maybe do something about them later */ + case '/': + case '+': + case '-': + case '*': + case '%': + case '|': + case '&': + case '^': + case '~': + case '!': + case '@': + case '<': + case '>': + case '(': + case ')': + case '[': + case ']': + case '.': + case '?': + case ':': + case '=': + case '{': + case '}': + case ',': + case '#': + lexptr++; + return c; + + case '"': + yyerror ("double quoted strings not allowed in #if expressions"); + return ERROR; + } + if (ISDIGIT (c)) { + /* It's a number */ + for (namelen = 0; + c = tokstart[namelen], is_idchar (c) || c == '.'; + namelen++) + ; + return parse_number (namelen); + } + + if (!is_idstart (c)) { + yyerror ("invalid token in expression"); + return ERROR; + } + + /* It is a name. See how long it is. */ + + for (namelen = 0; + is_idchar (tokstart[namelen]); + namelen++) + ; + + lexptr += namelen; + return NAME; +} + + +/* Parse a C escape sequence. STRING_PTR points to a variable + containing a pointer to the string to parse. That pointer + is updated past the characters we use. The value of the + escape sequence is returned. + + A negative value means the sequence \ newline was seen, + which is supposed to be equivalent to nothing at all. + + If \ is followed by a null character, we return a negative + value and leave the string pointer pointing at the null character. + + If \ is followed by 000, we return 0 and leave the string pointer + after the zeros. A value of 0 does not mean end of string. */ + +static int +parse_escape (string_ptr) + const char **string_ptr; +{ + int c = *(*string_ptr)++; + switch (c) + { + case 'a': + return TARGET_BELL; + case 'b': + return TARGET_BS; + case 'e': + return 033; + case 'f': + return TARGET_FF; + case 'n': + return TARGET_NEWLINE; + case 'r': + return TARGET_CR; + case 't': + return TARGET_TAB; + case 'v': + return TARGET_VT; + case '\n': + return -2; + case 0: + (*string_ptr)--; + return 0; + case '^': + c = *(*string_ptr)++; + if (c == '\\') + c = parse_escape (string_ptr); + if (c == '?') + return 0177; + return (c & 0200) | (c & 037); + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + { + int i = c - '0'; + int count = 0; + while (++count < 3) + { + c = *(*string_ptr)++; + if (c >= '0' && c <= '7') + i = (i << 3) + c - '0'; + else + { + (*string_ptr)--; + break; + } + } + if ((i & ~((1 << CHAR_TYPE_SIZE) - 1)) != 0) + { + i &= (1 << CHAR_TYPE_SIZE) - 1; + warning ("octal character constant does not fit in a byte"); + } + return i; + } + case 'x': + { + int i = 0; + for (;;) + { + c = *(*string_ptr)++; + if (hex_p (c)) + i = (i << 4) + hex_value (c); + else + { + (*string_ptr)--; + break; + } + } + if ((i & ~((1 << BITS_PER_UNIT) - 1)) != 0) + { + i &= (1 << BITS_PER_UNIT) - 1; + warning ("hex character constant does not fit in a byte"); + } + return i; + } + default: + return c; + } +} + +static void +yyerror (msgid) + const char *msgid; +{ + error ("%s", _(msgid)); + longjmp (parse_return_error, 1); +} + +/* This page contains the entry point to this file. */ + +/* Parse STRING as an expression, and complain if this fails + to use up all of the contents of STRING. */ +/* We do not support C comments. They should be removed before + this function is called. */ + +int +parse_c_expression (string) + const char *string; +{ + lexptr = string; + + if (lexptr == 0 || *lexptr == 0) { + error ("empty #if expression"); + return 0; /* don't include the #if group */ + } + + /* if there is some sort of scanning error, just return 0 and assume + the parsing routine has printed an error message somewhere. + there is surely a better thing to do than this. */ + if (setjmp (parse_return_error)) + return 0; + + if (yyparse ()) + return 0; /* actually this is never reached + the way things stand. */ + if (*lexptr) + error ("Junk after end of expression."); + + return expression_value; /* set by yyparse () */ +} diff --git a/src/mkutil/tradcpp/tradcpp.c b/src/mkutil/tradcpp/tradcpp.c new file mode 100644 index 00000000..bb63c50f --- /dev/null +++ b/src/mkutil/tradcpp/tradcpp.c @@ -0,0 +1,5363 @@ +/* C Compatible Compiler Preprocessor (CCCP) +Copyright (C) 1986, 1987, 1989, 2000, 2001 Free Software Foundation, Inc. + Written by Paul Rubin, June 1986 + Adapted to ANSI C, Richard Stallman, Jan 1987 + Dusted off, polished, and adapted for use as traditional + preprocessor only, Zack Weinberg, Jul 2000 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include "config.h" +#include "system.h" +#include "version.h" +#include "cppdefault.h" +#include "tradcpp.h" +#include "mkdeps.h" +#include "intl.h" + +typedef unsigned char U_CHAR; + +/* Name under which this program was invoked. */ + +static const char *progname; + +/* Current maximum length of directory names in the search path + for include files. (Altered as we get more of them.) */ + +size_t max_include_len; + +/* Nonzero means copy comments into the output file. */ + +int put_out_comments = 0; + +/* mkdeps.h opaque structure that encapsulates dependency information. */ +struct deps *deps; + +/* Nonzero means print the names of included files rather than + the preprocessed output. 1 means just the #include "...", + 2 means #include <...> as well. */ + +int print_deps = 0; + +/* Nonzero means print dummy targets for each header file. */ + +int print_deps_phony_targets = 0; + +/* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */ + +int deps_append = 0; + +/* File name which deps are being written to. This is 0 if deps are + being written to stdout. */ + +const char *deps_file = 0; + +/* Nonzero if missing .h files in -M output are assumed to be + generated files and not errors. */ + +int deps_missing_files = 0; + +/* Nonzero means don't output line number information. */ + +int no_line_commands; + +/* Nonzero means inhibit output of the preprocessed text + and instead output the definitions of all user-defined macros + in a form suitable for use as input to cccp. */ + +int dump_macros; + +/* Nonzero means don't print warning messages. -w. */ + +int inhibit_warnings = 0; + +/* Non-0 means don't output the preprocessed program. */ +int inhibit_output = 0; + +/* Nonzero means chars are signed. */ +#if DEFAULT_SIGNED_CHAR +int flag_signed_char = 1; +#else +int flag_signed_char = 0; +#endif + +/* Nonzero means warn if slash-star appears in a comment. */ + +int warn_comments; + +/* Nonzero causes output not to be done, + but directives such as #define that have side effects + are still obeyed. */ + +int no_output; + +/* Value of __USER_LABEL_PREFIX__. Target-dependent, also controlled + by -f(no-)leading-underscore. */ +static const char *user_label_prefix; + +/* I/O buffer structure. + The `fname' field is nonzero for source files and #include files + and for the dummy text used for -D and -U. + It is zero for rescanning results of macro expansion + and for expanding macro arguments. */ +#define INPUT_STACK_MAX 200 +struct file_name_list; +struct file_buf { + const char *fname; + int lineno; + int length; + U_CHAR *buf; + U_CHAR *bufp; + /* Macro that this level is the expansion of. + Included so that we can reenable the macro + at the end of this level. */ + struct hashnode *macro; + /* Value of if_stack at start of this file. + Used to prohibit unmatched #endif (etc) in an include file. */ + struct if_stack *if_stack; + /* Object to be freed at end of input at this level. */ + U_CHAR *free_ptr; + /* Position to start scanning for #include_next in this file. */ + struct file_name_list *next_header_dir; +} instack[INPUT_STACK_MAX]; + +typedef struct file_buf FILE_BUF; + +/* Current nesting level of input sources. + `instack[indepth]' is the level currently being read. */ +int indepth = -1; +#define CHECK_DEPTH(code) \ + if (indepth >= (INPUT_STACK_MAX - 1)) \ + { \ + error_with_line (line_for_error (instack[indepth].lineno), \ + "macro or #include recursion too deep"); \ + code; \ + } + +/* Current depth in #include directives that use <...>. */ +int system_include_depth = 0; + +/* The output buffer. Its LENGTH field is the amount of room allocated + for the buffer, not the number of chars actually present. To get + that, subtract outbuf.buf from outbuf.bufp. */ + +#define OUTBUF_SIZE 10 /* initial size of output buffer */ +FILE_BUF outbuf; + +/* Grow output buffer OBUF points at + so it can hold at least NEEDED more chars. */ + +#define check_expand(OBUF, NEEDED) do { \ + if ((OBUF)->length - ((OBUF)->bufp - (OBUF)->buf) <= (NEEDED)) \ + grow_outbuf ((OBUF), (NEEDED)); \ + } while (0) + +struct file_name_list + { + struct file_name_list *next; + const char *fname; + }; + +struct file_name_list *include = 0; /* First dir to search */ + /* First dir to search for */ +struct file_name_list *first_bracket_include = 0; +struct file_name_list *last_include = 0; /* Last in chain */ + +/* List of included files that contained #once. */ +struct file_name_list *dont_repeat_files = 0; + +/* List of other included files. */ +struct file_name_list *all_include_files = 0; + +/* Structure allocated for every #define. For a simple replacement + such as + #define foo bar , + nargs = -1, the `pattern' list is null, and the expansion is just + the replacement text. Nargs = 0 means a functionlike macro with no args, + e.g., + #define getchar() getc (stdin) . + When there are args, the expansion is the replacement text with the + args squashed out, and the reflist is a list describing how to + build the output from the input: e.g., "3 chars, then the 1st arg, + then 9 chars, then the 3rd arg, then 0 chars, then the 2nd arg". + The chars here come from the expansion. Whatever is left of the + expansion after the last arg-occurrence is copied after that arg. + Note that the reflist can be arbitrarily long--- + its length depends on the number of times the arguments appear in + the replacement text, not how many args there are. Example: + #define f(x) x+x+x+x+x+x+x would have replacement text "++++++" and + pattern list + { (0, 1), (1, 1), (1, 1), ..., (1, 1), NULL } + where (x, y) means (nchars, argno). */ + +typedef struct definition DEFINITION; +struct definition { + int nargs; + int length; /* length of expansion string */ + U_CHAR *expansion; + struct reflist { + struct reflist *next; + char stringify; /* nonzero if this arg was preceded by a + # operator. */ + char raw_before; /* Nonzero if a ## operator before arg. */ + char raw_after; /* Nonzero if a ## operator after arg. */ + int nchars; /* Number of literal chars to copy before + this arg occurrence. */ + int argno; /* Number of arg to substitute (origin-0) */ + } *pattern; + /* Names of macro args, concatenated in reverse order + with comma-space between them. + The only use of this is that we warn on redefinition + if this differs between the old and new definitions. */ + const U_CHAR *argnames; +}; + +/* Chained list of answers to an assertion. */ +struct answer +{ + struct answer *next; + const unsigned char *answer; + size_t len; +}; + +/* different kinds of things that can appear in the value field + of a hash node. Actually, this may be useless now. */ +union hashval { + const char *cpval; + DEFINITION *defn; + struct answer *answers; +}; + +/* The structure of a node in the hash table. The hash table + has entries for all tokens defined by #define commands (type T_MACRO), + plus some special tokens like __LINE__ (these each have their own + type, and the appropriate code is run when that type of node is seen. + It does not contain control words like "#define", which are recognized + by a separate piece of code. */ + +/* different flavors of hash nodes --- also used in keyword table */ +enum node_type { + T_DEFINE = 1, /* `#define' */ + T_INCLUDE, /* `#include' */ + T_INCLUDE_NEXT,/* `#include_next' */ + T_IFDEF, /* `#ifdef' */ + T_IFNDEF, /* `#ifndef' */ + T_IF, /* `#if' */ + T_ELSE, /* `#else' */ + T_ELIF, /* `#elif' */ + T_UNDEF, /* `#undef' */ + T_LINE, /* `#line' */ + T_ENDIF, /* `#endif' */ + T_ERROR, /* `#error' */ + T_WARNING, /* `#warning' */ + T_ASSERT, /* `#assert' */ + T_UNASSERT, /* `#unassert' */ + T_SPECLINE, /* special symbol `__LINE__' */ + T_DATE, /* `__DATE__' */ + T_FILE, /* `__FILE__' */ + T_BASE_FILE, /* `__BASE_FILE__' */ + T_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */ + T_VERSION, /* `__VERSION__' */ + T_TIME, /* `__TIME__' */ + T_CONST, /* Constant value, used by `__STDC__' */ + T_MACRO, /* macro defined by `#define' */ + T_SPEC_DEFINED, /* special `defined' macro for use in #if statements */ + T_UNUSED /* Used for something not defined. */ +}; + +struct hashnode { + struct hashnode *next; /* double links for easy deletion */ + struct hashnode *prev; + struct hashnode **bucket_hdr; /* also, a back pointer to this node's hash + chain is kept, in case the node is the head + of the chain and gets deleted. */ + enum node_type type; /* type of special token */ + int length; /* length of token, for quick comparison */ + U_CHAR *name; /* the actual name */ + union hashval value; /* pointer to expansion, or whatever */ +}; + +typedef struct hashnode HASHNODE; + +static HASHNODE *parse_assertion PARAMS ((const unsigned char *, + const unsigned char *, + struct answer **, int)); +static struct answer **find_answer PARAMS ((HASHNODE *, + const struct answer *)); +static int parse_answer PARAMS ((const unsigned char *, const unsigned char *, + struct answer **, int)); +static unsigned char *canonicalize_text PARAMS ((const unsigned char *, + const unsigned char *, + const unsigned char **)); + +/* Some definitions for the hash table. The hash function MUST be + computed as shown in hashf () below. That is because the rescan + loop computes the hash value `on the fly' for most tokens, + in order to avoid the overhead of a lot of procedure calls to + the hashf () function. Hashf () only exists for the sake of + politeness, for use when speed isn't so important. */ + +#define HASHSIZE 1403 +HASHNODE *hashtab[HASHSIZE]; +#define HASHSTEP(old, c) ((old << 2) + c) +#define MAKE_POS(v) (v & 0x7fffffff) /* make number positive */ + +/* `struct directive' defines one #-directive, including how to handle it. */ + +struct directive { + const int length; /* Length of name */ + void (*const func) PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); + /* Function to handle directive */ + const char *const name; /* Name of directive */ + const enum node_type type; /* Code which describes which directive. */ +}; + +/* Last arg to output_line_command. */ +enum file_change_code {same_file, enter_file, leave_file}; + +/* This structure represents one parsed argument in a macro call. + `raw' points to the argument text as written (`raw_length' is its length). + `expanded' points to the argument's macro-expansion + (its length is `expand_length'). + `stringified_length' is the length the argument would have + if stringified. + `free1' and `free2', if nonzero, point to blocks to be freed + when the macro argument data is no longer needed. */ + +struct argdata { + U_CHAR *raw, *expanded; + int raw_length, expand_length; + int stringified_length; + U_CHAR *free1, *free2; + char newlines; + char comments; +}; + +/* The arglist structure is built by do_define to tell + collect_definition where the argument names begin. That + is, for a define like "#define f(x,y,z) foo+x-bar*y", the arglist + would contain pointers to the strings x, y, and z. + Collect_definition would then build a DEFINITION node, + with reflist nodes pointing to the places x, y, and z had + appeared. So the arglist is just convenience data passed + between these two routines. It is not kept around after + the current #define has been processed and entered into the + hash table. */ + +struct arglist { + struct arglist *next; + U_CHAR *name; + int length; + int argno; +}; + +/* Function prototypes. */ + +static void do_define PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_error PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_warning PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_line PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_include PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_include_next PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_undef PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_if PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_ifdef PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_ifndef PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_else PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_elif PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_endif PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_assert PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_unassert PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); +static void do_xifdef PARAMS ((U_CHAR *, U_CHAR *, enum node_type)); + +static struct hashnode *install PARAMS ((const U_CHAR *, int, enum node_type, int)); +static int hashf PARAMS ((const U_CHAR *, int, int)); +static int compare_defs PARAMS ((DEFINITION *, DEFINITION *)); +static int comp_def_part PARAMS ((int, const U_CHAR *, int, + const U_CHAR *, int, int)); +static void delete_macro PARAMS ((HASHNODE *)); + +/* First arg to v_message. */ +enum msgtype { MT_WARNING = 0, MT_ERROR, MT_FATAL }; +static void v_message PARAMS ((enum msgtype mtype, int line, + const char *msgid, va_list ap)) + ATTRIBUTE_PRINTF (3, 0); + +static int line_for_error PARAMS ((int)); + +/* We know perfectly well which file this is, so we don't need to + use __FILE__. */ +#undef abort +#if (GCC_VERSION >= 2007) +#define abort() fancy_abort(__LINE__, __FUNCTION__) +#else +#define abort() fancy_abort(__LINE__, 0); +#endif + +static void macroexpand PARAMS ((HASHNODE *, FILE_BUF *)); +static void special_symbol PARAMS ((HASHNODE *, FILE_BUF *)); +static void dump_all_macros PARAMS ((void)); +static void dump_defn_1 PARAMS ((const U_CHAR *, int, int)); +static void dump_arg_n PARAMS ((DEFINITION *, int)); +static void conditional_skip PARAMS ((FILE_BUF *, int, enum node_type)); +static void skip_if_group PARAMS ((FILE_BUF *, int)); +static void output_line_command PARAMS ((FILE_BUF *, FILE_BUF *, + int, enum file_change_code)); + +static int eval_if_expression PARAMS ((const U_CHAR *, int)); + +static void output_deps PARAMS ((void)); +static void initialize_builtins PARAMS ((void)); +static void run_directive PARAMS ((const char *, size_t, + enum node_type)); +static void make_definition PARAMS ((const char *)); +static void make_undef PARAMS ((const char *)); +static void make_assertion PARAMS ((const char *)); + +static void grow_outbuf PARAMS ((FILE_BUF *, int)); +static int handle_directive PARAMS ((FILE_BUF *, FILE_BUF *)); +static void process_include PARAMS ((struct file_name_list *, + const U_CHAR *, int, int, FILE_BUF *)); +static void fixup_newlines PARAMS ((FILE_BUF *)); +static void finclude PARAMS ((int, const char *, + struct file_name_list *, FILE_BUF *)); +static void init_dependency_output PARAMS ((void)); +static void rescan PARAMS ((FILE_BUF *, int)); +static void newline_fix PARAMS ((U_CHAR *)); +static void name_newline_fix PARAMS ((U_CHAR *)); +static U_CHAR *macarg1 PARAMS ((U_CHAR *, const U_CHAR *, int *, + int *, int *)); +static const char *macarg PARAMS ((struct argdata *)); +static int discard_comments PARAMS ((U_CHAR *, int, int)); +static int file_size_and_mode PARAMS ((int, int *, long *)); + +static U_CHAR *skip_to_end_of_comment PARAMS ((FILE_BUF *, int *)); +static U_CHAR *skip_quoted_string PARAMS ((const U_CHAR *, const U_CHAR *, + int, int *, int *, int *)); + +int main PARAMS ((int, char **)); + +/* Convenience. Write U"string" to get an unsigned string constant. */ +#define U (const unsigned char *) + +/* Here is the actual list of #-directives, most-often-used first. */ + +static const struct directive directive_table[] = { + { 6, do_define, "define", T_DEFINE }, + { 7, do_include, "include", T_INCLUDE }, + { 5, do_endif, "endif", T_ENDIF }, + { 5, do_ifdef, "ifdef", T_IFDEF }, + { 2, do_if, "if", T_IF, }, + { 4, do_else, "else", T_ELSE }, + { 6, do_ifndef, "ifndef", T_IFNDEF }, + { 5, do_undef, "undef", T_UNDEF }, + { 4, do_line, "line", T_LINE }, + { 4, do_elif, "elif", T_ELIF }, + { 5, do_error, "error", T_ERROR }, + { 7, do_warning, "warning", T_WARNING }, + { 12, do_include_next, "include_next", T_INCLUDE_NEXT }, + { 6, do_assert, "assert", T_ASSERT }, + { 8, do_unassert,"unassert",T_UNASSERT}, + { -1, 0, "", T_UNUSED}, +}; + +#define SKIP_WHITE_SPACE(p) do { while (is_nvspace(*p)) p++; } while (0) +#define SKIP_ALL_WHITE_SPACE(p) do { while (is_space(*p)) p++; } while (0) + +int errors = 0; /* Error counter for exit code */ + +static FILE_BUF expand_to_temp_buffer PARAMS ((const U_CHAR *, const U_CHAR *, int)); +static DEFINITION *collect_expansion PARAMS ((U_CHAR *, U_CHAR *, int, + struct arglist *)); + +/* Stack of conditionals currently in progress + (including both successful and failing conditionals). */ + +struct if_stack { + struct if_stack *next; /* for chaining to the next stack frame */ + const char *fname; /* copied from input when frame is made */ + int lineno; /* similarly */ + int if_succeeded; /* true if a leg of this if-group + has been passed through rescan */ + enum node_type type; /* type of last directive seen in this group */ +}; +typedef struct if_stack IF_STACK_FRAME; +IF_STACK_FRAME *if_stack = NULL; + +/* Nonzero means -I- has been seen, + so don't look for #include "foo" the source-file directory. */ +int ignore_srcdir; + +/* Pending directives. */ +enum pending_dir_t {PD_NONE = 0, PD_DEFINE, PD_UNDEF, PD_ASSERTION, PD_FILE}; + +typedef struct pending_dir pending_dir; +struct pending_dir +{ + const char *arg; + enum pending_dir_t type; +}; + +int +main (argc, argv) + int argc; + char **argv; +{ + int st_mode; + long st_size; + const char *in_fname, *out_fname; + int f, i; + FILE_BUF *fp; + pending_dir *pend = (pending_dir *) xcalloc (argc, sizeof (pending_dir)); + int no_standard_includes = 0; + + hex_init (); + +#ifdef RLIMIT_STACK + /* Get rid of any avoidable limit on stack size. */ + { + struct rlimit rlim; + + /* Set the stack limit huge so that alloca (particularly stringtab + * in dbxread.c) does not fail. */ + getrlimit (RLIMIT_STACK, &rlim); + rlim.rlim_cur = rlim.rlim_max; + setrlimit (RLIMIT_STACK, &rlim); + } +#endif /* RLIMIT_STACK defined */ + + progname = argv[0]; + + in_fname = NULL; + out_fname = NULL; + + no_line_commands = 0; + dump_macros = 0; + no_output = 0; + + max_include_len = cpp_GCC_INCLUDE_DIR_len + 7; /* ??? */ + + gcc_init_libintl (); + + /* It's simplest to just create this struct whether or not it will + be needed. */ + deps = deps_init (); + + /* Process switches and find input file name. */ + + for (i = 1; i < argc; i++) { + if (argv[i][0] != '-') { + if (out_fname != NULL) + fatal ("usage: %s [switches] input output", argv[0]); + else if (in_fname != NULL) + out_fname = argv[i]; + else + in_fname = argv[i]; + } else { + int c = argv[i][1]; + + switch (c) { + case 'E': + case '$': + break; /* Ignore for compatibility with ISO/extended cpp. */ + + case 'l': + if (!strcmp (argv[i], "-lang-c++") + || !strcmp (argv[i], "-lang-objc++")) + fatal ("-traditional is not supported in C++"); + else if (!strcmp (argv[i], "-lang-c89")) + fatal ("-traditional and -ansi are mutually exclusive"); + else if (!strcmp (argv[i], "-lang-objc")) + pend[i].type = PD_DEFINE, pend[i].arg = "__OBJC__"; + else if (!strcmp (argv[i], "-lang-asm")) + pend[i].type = PD_DEFINE, pend[i].arg = "__ASSEMBLER__"; + else if (!strcmp (argv[i], "-lang-fortran")) + pend[i].type = PD_DEFINE, pend[i].arg = "_LANGUAGE_FORTRAN"; + /* All other possibilities ignored. */ + break; + + case 'i': + if (!strcmp (argv[i], "-include")) + { + if (i + 1 == argc) + fatal ("filename missing after -i option"); + else + pend[i].type = PD_FILE, pend[i].arg = argv[i + 1], i++; + } + else if (!strcmp (argv[i], "-iprefix")) + i++; /* Ignore for compatibility */ + else if (!strcmp (argv[i], "-isystem") + || !strcmp (argv[i], "-iwithprefix") + || !strcmp (argv[i], "-iwithprefixbefore") + || !strcmp (argv[i], "-idirafter")) + goto add_include; /* best we can do */ + + break; + + case 'o': + if (out_fname != NULL) + fatal ("output filename specified twice"); + if (i + 1 == argc) + fatal ("filename missing after -o option"); + out_fname = argv[++i]; + if (!strcmp (out_fname, "-")) + out_fname = ""; + break; + + case 'w': + inhibit_warnings = 1; + break; + + case 'W': + if (!strcmp (argv[i], "-Wcomments")) + warn_comments = 1; + else if (!strcmp (argv[i], "-Wcomment")) + warn_comments = 1; + else if (!strcmp (argv[i], "-Wall")) { + warn_comments = 1; + } + break; + + case 'f': + if (!strcmp (argv[i], "-fleading-underscore")) + user_label_prefix = "_"; + else if (!strcmp (argv[i], "-fno-leading-underscore")) + user_label_prefix = ""; + else if (!strcmp (argv[i], "-fsigned-char")) + flag_signed_char = 1; + else if (!strcmp (argv[i], "-funsigned-char")) + flag_signed_char = 0; + break; + + case 'M': + { + char *p = NULL; + + /* -MD and -MMD for tradcpp are deprecated and undocumented + (use -M or -MM with -MF instead), and probably should be + removed with the next major GCC version. For the moment + we allow these for the benefit of Automake 1.4, which + uses these when dependency tracking is enabled. Automake + 1.5 will fix this. */ + if (!strncmp (argv[i], "-MD", 3)) { + p = argv[i] + 3; + print_deps = 2; + } else if (!strncmp (argv[i], "-MMD", 4)) { + p = argv[i] + 4; + print_deps = 1; + } else if (!strcmp (argv[i], "-M")) { + print_deps = 2; + } else if (!strcmp (argv[i], "-MM")) { + print_deps = 1; + } else if (!strcmp (argv[i], "-MG")) { + deps_missing_files = 1; + } else if (!strcmp (argv[i], "-MF")) { + p = argv[i] + 3; + } else if (!strcmp (argv[i], "-MP")) { + print_deps_phony_targets = 1; + } else if (!strcmp (argv[i], "-MQ") || !strcmp (argv[i], "-MT")) { + /* Add a target. -MQ quotes for Make. */ + const char *tgt = argv[i] + 3; + int quoted = argv[i][2] == 'Q'; + + if (*tgt == '\0' && i + 1 == argc) + fatal ("target missing after %s option", argv[i]); + else + { + if (*tgt == '\0') + tgt = argv[++i]; + + deps_add_target (deps, tgt, quoted); + } + } + + if (p) { + if (*p) + deps_file = p; + else if (i + 1 == argc) + fatal ("filename missing after %s option", argv[i]); + else + deps_file = argv[++i]; + } + } + break; + + case 'd': + dump_macros = 1; + no_output = 1; + break; + + case 'v': + fprintf (stderr, "GNU traditional CPP version %s\n", version_string); + break; + + case 'D': + case 'U': + case 'A': + { + char *p; + + if (argv[i][2] != 0) + p = argv[i] + 2; + else if (i + 1 == argc) + fatal ("macro name missing after -%c option", c); + else + p = argv[++i]; + + if (c == 'D') + pend[i].type = PD_DEFINE; + else if (c == 'U') + pend[i].type = PD_UNDEF; + else + pend[i].type = PD_ASSERTION; + pend[i].arg = p; + } + break; + + case 'C': + put_out_comments = 1; + break; + + case 'p': + if (!strcmp (argv[i], "-pedantic")) + fatal ("-pedantic and -traditional are mutually exclusive"); + break; + + case 't': + if (!strcmp (argv[i], "-trigraphs")) + fatal ("-trigraphs and -traditional are mutually exclusive"); + break; + + case 'P': + no_line_commands = 1; + break; + + case 'I': /* Add directory to path for includes. */ + add_include: + { + struct file_name_list *dirtmp; + + if (! ignore_srcdir && !strcmp (argv[i] + 2, "-")) + ignore_srcdir = 1; + else { + dirtmp = (struct file_name_list *) + xmalloc (sizeof (struct file_name_list)); + dirtmp->next = 0; /* New one goes on the end */ + if (include == 0) + include = dirtmp; + else + last_include->next = dirtmp; + last_include = dirtmp; /* Tail follows the last one */ + if (argv[i][1] == 'I' && argv[i][2] != 0) + dirtmp->fname = argv[i] + 2; + else if (i + 1 == argc) + fatal ("directory name missing after -I option"); + else + dirtmp->fname = argv[++i]; + if (strlen (dirtmp->fname) > max_include_len) + max_include_len = strlen (dirtmp->fname); + if (ignore_srcdir && first_bracket_include == 0) + first_bracket_include = dirtmp; + } + } + break; + + case 'n': + /* -nostdinc causes no default include directories. + You must specify all include-file directories with -I. */ + no_standard_includes = 1; + break; + + case '\0': /* JF handle '-' as file name meaning stdin or stdout */ + if (in_fname == NULL) { + in_fname = ""; + break; + } else if (out_fname == NULL) { + out_fname = ""; + break; + } /* else fall through into error */ + + default: + fatal ("invalid option `%s'", argv[i]); + } + } + } + + init_dependency_output (); + + /* After checking the environment variables, check if -M or -MM has + not been specified, but other -M options have. */ + if (print_deps == 0 + && (deps_missing_files || deps_file || print_deps_phony_targets)) + fatal ("you must additionally specify either -M or -MM"); + + if (user_label_prefix == 0) + user_label_prefix = USER_LABEL_PREFIX; + + if (print_deps) + { + /* Set the default target (if there is none already), and + the dependency on the main file. */ + deps_add_default_target (deps, in_fname); + + deps_add_dep (deps, in_fname); + } + + /* Install __LINE__, etc. Must follow option processing. */ + initialize_builtins (); + + /* Do defines specified with -D and undefines specified with -U. */ + for (i = 1; i < argc; i++) + if (pend[i].type == PD_DEFINE) + make_definition (pend[i].arg); + else if (pend[i].type == PD_UNDEF) + make_undef (pend[i].arg); + else if (pend[i].type == PD_ASSERTION) + make_assertion (pend[i].arg); + + /* Unless -fnostdinc, + tack on the standard include file dirs to the specified list */ + if (!no_standard_includes) { + const struct default_include *di; + struct file_name_list *old_last_include = last_include; + struct file_name_list *dirtmp; + for (di = cpp_include_defaults; di->fname; di++) { + if (di->cplusplus) + continue; + dirtmp = (struct file_name_list *) + xmalloc (sizeof (struct file_name_list)); + dirtmp->next = 0; /* New one goes on the end */ + if (include == 0) + include = dirtmp; + else + last_include->next = dirtmp; + last_include = dirtmp; /* Tail follows the last one */ + dirtmp->fname = di->fname; + if (strlen (dirtmp->fname) > max_include_len) + max_include_len = strlen (dirtmp->fname); + } + + if (ignore_srcdir && first_bracket_include == 0) + first_bracket_include = old_last_include->next; + } + + /* Initialize output buffer */ + + outbuf.buf = (U_CHAR *) xmalloc (OUTBUF_SIZE); + outbuf.bufp = outbuf.buf; + outbuf.length = OUTBUF_SIZE; + + /* Scan the -i files before the main input. + Much like #including them, but with no_output set + so that only their macro definitions matter. */ + + no_output++; + indepth++; + for (i = 1; i < argc; i++) + if (pend[i].type == PD_FILE) + { + int fd = open (pend[i].arg, O_RDONLY, 0666); + if (fd < 0) + { + perror_with_name (pend[i].arg); + return FATAL_EXIT_CODE; + } + + /* For -M, add this file to the dependencies. */ + if (print_deps) + deps_add_dep (deps, pend[i].arg); + + finclude (fd, pend[i].arg, 0, &outbuf); + } + indepth--; + no_output--; + + /* Pending directives no longer needed. */ + free ((PTR) pend); + + /* Create an input stack level for the main input file + and copy the entire contents of the file into it. */ + + fp = &instack[++indepth]; + + /* JF check for stdin */ + if (in_fname == NULL || *in_fname == 0) { + in_fname = ""; + f = 0; + } else if ((f = open (in_fname, O_RDONLY, 0666)) < 0) + goto sys_error; + + if (file_size_and_mode (f, &st_mode, &st_size)) + goto sys_error; + fp->fname = in_fname; + fp->lineno = 1; + /* JF all this is mine about reading pipes and ttys */ + if (!S_ISREG (st_mode)) { + /* Read input from a file that is not a normal disk file. + We cannot preallocate a buffer with the correct size, + so we must read in the file a piece at the time and make it bigger. */ + int size; + int bsize; + int cnt; + U_CHAR *bufp; + + bsize = 2000; + size = 0; + fp->buf = (U_CHAR *) xmalloc (bsize + 2); + bufp = fp->buf; + for (;;) { + cnt = read (f, bufp, bsize - size); + if (cnt < 0) goto sys_error; /* error! */ + if (cnt == 0) break; /* End of file */ + size += cnt; + bufp += cnt; + if (bsize == size) { /* Buffer is full! */ + bsize *= 2; + fp->buf = (U_CHAR *) xrealloc (fp->buf, bsize + 2); + bufp = fp->buf + size; /* May have moved */ + } + } + fp->length = size; + } else { + /* Read a file whose size we can determine in advance. + For the sake of VMS, st_size is just an upper bound. */ + long i; + fp->length = 0; + fp->buf = (U_CHAR *) xmalloc (st_size + 2); + + while (st_size > 0) { + i = read (f, fp->buf + fp->length, st_size); + if (i <= 0) { + if (i == 0) break; + goto sys_error; + } + fp->length += i; + st_size -= i; + } + } + fp->bufp = fp->buf; + fp->if_stack = if_stack; + fixup_newlines (fp); + + /* Make sure data ends with a newline. And put a null after it. */ + + if (fp->length > 0 && fp->buf[fp->length-1] != '\n') + fp->buf[fp->length++] = '\n'; + fp->buf[fp->length] = '\0'; + + /* Now that we know the input file is valid, open the output. */ + + if (!out_fname || !strcmp (out_fname, "")) + out_fname = "stdout"; + else if (! freopen (out_fname, "w", stdout)) + pfatal_with_name (out_fname); + + output_line_command (fp, &outbuf, 0, same_file); + + /* Scan the input, processing macros and directives. */ + + rescan (&outbuf, 0); + + /* Now we have processed the entire input + Write whichever kind of output has been requested. */ + + + if (dump_macros) + dump_all_macros (); + else if (! inhibit_output) + if (write (fileno (stdout), outbuf.buf, outbuf.bufp - outbuf.buf) < 0) + fatal ("I/O error on output"); + + /* Don't write the deps file if preprocessing has failed. */ + if (print_deps && errors == 0) + output_deps (); + + /* Destruct the deps object. */ + deps_free (deps); + + if (ferror (stdout)) + fatal ("I/O error on output"); + + if (errors) + exit (FATAL_EXIT_CODE); + exit (SUCCESS_EXIT_CODE); + + sys_error: + pfatal_with_name (in_fname); +} + +/* Set up dependency-file output. */ +static void +init_dependency_output () +{ + char *spec, *s, *output_file; + + /* Either of two environment variables can specify output of deps. + Its value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET", + where OUTPUT_FILE is the file to write deps info to + and DEPS_TARGET is the target to mention in the deps. */ + + if (print_deps == 0) + { + spec = getenv ("DEPENDENCIES_OUTPUT"); + if (spec) + print_deps = 1; + else + { + spec = getenv ("SUNPRO_DEPENDENCIES"); + if (spec) + print_deps = 2; + else + return; + } + + /* Find the space before the DEPS_TARGET, if there is one. */ + s = strchr (spec, ' '); + if (s) + { + /* Let the caller perform MAKE quoting. */ + deps_add_target (deps, s + 1, 0); + output_file = (char *) xmalloc (s - spec + 1); + memcpy (output_file, spec, s - spec); + output_file[s - spec] = 0; + } + else + output_file = spec; + + /* Command line overrides environment variables. */ + if (deps_file == 0) + deps_file = output_file; + deps_append = 1; + } + + /* If dependencies go to standard output, or -MG is used, we should + suppress output. The user may be requesting other stuff to + stdout, with -dM, -v etc. We let them shoot themselves in the + foot. */ + if (deps_file == 0 || deps_missing_files) + inhibit_output = 1; +} + +/* Use mkdeps.c to output dependency information. */ +static void +output_deps () +{ + /* Stream on which to print the dependency information. */ + FILE *deps_stream = 0; + const char *const deps_mode = deps_append ? "a" : "w"; + + if (deps_file == 0) + deps_stream = stdout; + else + { + deps_stream = fopen (deps_file, deps_mode); + if (deps_stream == 0) + { + error_from_errno (deps_file); + return; + } + } + + deps_write (deps, deps_stream, 72); + + if (print_deps_phony_targets) + deps_phony_targets (deps, deps_stream); + + /* Don't close stdout. */ + if (deps_file) + { + if (ferror (deps_stream) || fclose (deps_stream) != 0) + fatal ("I/O error on output"); + } +} + +/* Move all backslash-newline pairs out of embarrassing places. + Exchange all such pairs following BP + with any potentially-embarrasing characters that follow them. + Potentially-embarrassing characters are / and * + (because a backslash-newline inside a comment delimiter + would cause it not to be recognized). */ +static void +newline_fix (bp) + U_CHAR *bp; +{ + U_CHAR *p = bp; + int count = 0; + + /* First count the backslash-newline pairs here. */ + + while (*p++ == '\\' && *p++ == '\n') + count++; + + p = bp + count * 2; + + /* Exit if what follows the backslash-newlines is not embarrassing. */ + + if (count == 0 || (*p != '/' && *p != '*')) + return; + + /* Copy all potentially embarrassing characters + that follow the backslash-newline pairs + down to where the pairs originally started. */ + + while (*p == '*' || *p == '/') + *bp++ = *p++; + + /* Now write the same number of pairs after the embarrassing chars. */ + while (count-- > 0) { + *bp++ = '\\'; + *bp++ = '\n'; + } +} + +/* Like newline_fix but for use within a directive-name. + Move any backslash-newlines up past any following symbol constituents. */ +static void +name_newline_fix (bp) + U_CHAR *bp; +{ + U_CHAR *p = bp; + int count = 0; + + /* First count the backslash-newline pairs here. */ + + while (*p++ == '\\' && *p++ == '\n') + count++; + + p = bp + count * 2; + + /* What follows the backslash-newlines is not embarrassing. */ + + if (count == 0 || !is_idchar (*p)) + return; + + /* Copy all potentially embarrassing characters + that follow the backslash-newline pairs + down to where the pairs originally started. */ + + while (is_idchar (*p)) + *bp++ = *p++; + + /* Now write the same number of pairs after the embarrassing chars. */ + while (count-- > 0) { + *bp++ = '\\'; + *bp++ = '\n'; + } +} + +/* + * The main loop of the program. + * + * Read characters from the input stack, transferring them to the + * output buffer OP. + * + * Macros are expanded and push levels on the input stack. + * At the end of such a level it is popped off and we keep reading. + * At the end of any other kind of level, we return. + * #-directives are handled, except within macros. + * + * If OUTPUT_MARKS is nonzero, keep Newline markers found in the input + * and insert them when appropriate. This is set while scanning macro + * arguments before substitution. It is zero when scanning for final output. + * There are three types of Newline markers: + * * Newline - follows a macro name that was not expanded + * because it appeared inside an expansion of the same macro. + * This marker prevents future expansion of that identifier. + * When the input is rescanned into the final output, these are deleted. + * These are also deleted by ## concatenation. + * * Newline Space (or Newline and any other whitespace character) + * stands for a place that tokens must be separated or whitespace + * is otherwise desirable, but where the ANSI standard specifies there + * is no whitespace. This marker turns into a Space (or whichever other + * whitespace char appears in the marker) in the final output, + * but it turns into nothing in an argument that is stringified with #. + * Such stringified arguments are the only place where the ANSI standard + * specifies with precision that whitespace may not appear. + * + * During this function, IP->bufp is kept cached in IBP for speed of access. + * Likewise, OP->bufp is kept in OBP. Before calling a subroutine + * IBP, IP and OBP must be copied back to memory. IP and IBP are + * copied back with the RECACHE macro. OBP must be copied back from OP->bufp + * explicitly, and before RECACHE, since RECACHE uses OBP. + */ + +static void +rescan (op, output_marks) + FILE_BUF *op; + int output_marks; +{ + /* Character being scanned in main loop. */ + U_CHAR c; + + /* Length of pending accumulated identifier. */ + int ident_length = 0; + + /* Hash code of pending accumulated identifier. */ + int hash = 0; + + /* Current input level (&instack[indepth]). */ + FILE_BUF *ip; + + /* Pointer for scanning input. */ + U_CHAR *ibp; + + /* Pointer to end of input. End of scan is controlled by LIMIT. */ + U_CHAR *limit; + + /* Pointer for storing output. */ + U_CHAR *obp; + + /* REDO_CHAR is nonzero if we are processing an identifier + after backing up over the terminating character. + Sometimes we process an identifier without backing up over + the terminating character, if the terminating character + is not special. Backing up is done so that the terminating character + will be dispatched on again once the identifier is dealt with. */ + int redo_char = 0; + + /* 1 if within an identifier inside of which a concatenation + marker (Newline -) has been seen. */ + int concatenated = 0; + + /* While scanning a comment or a string constant, + this records the line it started on, for error messages. */ + int start_line; + + /* Record position of last `real' newline. */ + U_CHAR *beg_of_line; + + /* This has to be a global bacause of RECACHE. */ + U_CHAR *obufp_before_macroname = NULL; + +/* Pop the innermost input stack level, assuming it is a macro expansion. */ + +#define POPMACRO \ +do { ip->macro->type = T_MACRO; \ + if (ip->free_ptr) free (ip->free_ptr); \ + --indepth; } while (0) + +/* Reload `rescan's local variables that describe the current + level of the input stack. */ + +#define RECACHE \ +do { ip = &instack[indepth]; \ + ibp = ip->bufp; \ + limit = ip->buf + ip->length; \ + op->bufp = obp; \ + check_expand (op, limit - ibp); \ + beg_of_line = 0; \ + obufp_before_macroname += op->bufp - obp; \ + obp = op->bufp; } while (0) + + if (no_output && instack[indepth].fname != 0) + skip_if_group (&instack[indepth], 1); + + obp = op->bufp; + RECACHE; + beg_of_line = ibp; + + /* Our caller must always put a null after the end of + the input at each input stack level. */ + if (*limit != 0) + abort (); + + while (1) { + c = *ibp++; + *obp++ = c; + + switch (c) { + case '\\': + if (ibp >= limit) + break; + if (*ibp == '\n') { + /* Always merge lines ending with backslash-newline, + even in middle of identifier. */ + ++ibp; + ++ip->lineno; + --obp; /* remove backslash from obuf */ +#if 1 /* Nick experimental */ + if (ip->macro != 0) + { + *obp++ = '\n'; + } +#endif + break; + } + /* Otherwise, backslash suppresses specialness of following char, + so copy it here to prevent the switch from seeing it. + But first get any pending identifier processed. */ + if (ident_length > 0) + goto specialchar; + *obp++ = *ibp++; + break; + + case '#': + /* If this is expanding a macro definition, don't recognize + preprocessor directives. */ + if (ip->macro != 0) + goto randomchar; + if (ident_length) + goto specialchar; + + /* # keyword: a # must be the first char on the line */ + if (beg_of_line == 0) + goto randomchar; + if (beg_of_line + 1 != ibp) + goto randomchar; + + /* This # can start a directive. */ + + --obp; /* Don't copy the '#' */ + + ip->bufp = ibp; + op->bufp = obp; + if (! handle_directive (ip, op)) { +#ifdef USE_C_ALLOCA + alloca (0); +#endif + /* Not a known directive: treat it as ordinary text. + IP, OP, IBP, etc. have not been changed. */ + if (no_output && instack[indepth].fname) { + /* If not generating expanded output, + what we do with ordinary text is skip it. + Discard everything until next # directive. */ + skip_if_group (&instack[indepth], 1); + RECACHE; + beg_of_line = ibp; + break; + } + ++obp; /* Copy the '#' after all */ + goto randomchar; + } +#ifdef USE_C_ALLOCA + alloca (0); +#endif + /* A # directive has been successfully processed. */ + /* If not generating expanded output, ignore everything until + next # directive. */ + if (no_output && instack[indepth].fname) + skip_if_group (&instack[indepth], 1); + obp = op->bufp; + RECACHE; + beg_of_line = ibp; + break; + + case '\"': /* skip quoted string */ + case '\'': + /* A single quoted string is treated like a double -- some + programs (e.g., troff) are perverse this way */ + + if (ident_length) + goto specialchar; + + start_line = ip->lineno; + + /* Skip ahead to a matching quote. */ + + while (1) { + if (ibp >= limit) { + if (ip->macro != 0) { + /* try harder: this string crosses a macro expansion boundary */ + POPMACRO; + RECACHE; + continue; + } + break; + } + *obp++ = *ibp; + switch (*ibp++) { + case '\n': + ++ip->lineno; + ++op->lineno; + /* Traditionally, end of line ends a string constant with no error. + So exit the loop and record the new line. */ + beg_of_line = ibp; + goto while2end; + + case '\\': + if (ibp >= limit) + break; + if (*ibp == '\n') { + /* Backslash newline is replaced by nothing at all, + but keep the line counts correct. */ + --obp; + ++ibp; + ++ip->lineno; + } else { + /* ANSI stupidly requires that in \\ the second \ + is *not* prevented from combining with a newline. */ + while (*ibp == '\\' && ibp[1] == '\n') { + ibp += 2; + ++ip->lineno; + } + *obp++ = *ibp++; + } + break; + + case '\"': + case '\'': + if (ibp[-1] == c) + goto while2end; + break; + } + } + while2end: + break; + + case '/': + if (*ibp == '\\' && ibp[1] == '\n') + newline_fix (ibp); + /* Don't look for comments inside a macro definition. */ + if (ip->macro != 0) + goto randomchar; + /* A comment constitutes white space, so it can terminate an identifier. + Process the identifier, if any. */ + if (ident_length) + goto specialchar; + + if (*ibp != '*') + goto randomchar; + + /* We have a comment. Skip it, optionally copying it to output. */ + + start_line = ip->lineno; + + ++ibp; /* Skip the star. */ + + /* In K+R C, a comment is equivalent to nothing. Note that we + already output the slash; we might not want it. */ + if (! put_out_comments) + obp--; + else + *obp++ = '*'; + + { + U_CHAR *before_bp = ibp; + + while (ibp < limit) { + switch (*ibp++) { + case '/': + if (warn_comments && ibp < limit && *ibp == '*') + warning("`/*' within comment"); + break; + case '*': + if (*ibp == '\\' && ibp[1] == '\n') + newline_fix (ibp); + if (ibp >= limit || *ibp == '/') + goto comment_end; + break; + case '\n': + ++ip->lineno; + /* Copy the newline into the output buffer, in order to + avoid the pain of a #line every time a multiline comment + is seen. */ + if (!put_out_comments) + *obp++ = '\n'; + ++op->lineno; + } + } + comment_end: + + if (ibp >= limit) + error_with_line (line_for_error (start_line), + "unterminated comment"); + else { + ibp++; + if (put_out_comments) { + memcpy (obp, before_bp, ibp - before_bp); + obp += ibp - before_bp; + } + } + } + break; + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + /* If digit is not part of identifier, it starts a number, + which means that following letters are not an identifier. + "0x5" does not refer to an identifier "x5". + So copy all alphanumerics that follow without accumulating + as an identifier. Periods also, for sake of "3.e7". */ + + if (ident_length == 0) { + while (ibp < limit) { + while (ibp < limit && ibp[0] == '\\' && ibp[1] == '\n') { + ++ip->lineno; + ibp += 2; + } + c = *ibp++; + if (! ISIDNUM (c) && c != '.') { + --ibp; + break; + } + *obp++ = c; + /* A sign can be part of a preprocessing number + if it follows an e. */ + if (c == 'e' || c == 'E') { + while (ibp < limit && ibp[0] == '\\' && ibp[1] == '\n') { + ++ip->lineno; + ibp += 2; + } + if (ibp < limit && (*ibp == '+' || *ibp == '-')) { + *obp++ = *ibp++; + /* Traditional C does not let the token go past the sign. */ + break; + } + } + } + break; + } + /* fall through */ + + case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + ident_length++; + /* Compute step of hash function, to avoid a proc call on every token */ + hash = HASHSTEP (hash, c); + break; + + case '\n': + /* If reprocessing a macro expansion, newline is a special marker. */ + if (ip->macro != 0) { + /* Newline White is a "funny space" to separate tokens that are + supposed to be separate but without space between. + Here White means any horizontal whitespace character. + Newline - marks a recursive macro use that is not + supposed to be expandable. */ + + if (*ibp == '-') { + /* Newline - inhibits expansion of preceding token. + If expanding a macro arg, we keep the newline -. + In final output, it is deleted. */ + if (! concatenated) { + ident_length = 0; + hash = 0; + } + ibp++; + if (!output_marks) { + obp--; + } else { + /* If expanding a macro arg, keep the newline -. */ + *obp++ = '-'; + } + } else if (is_space (*ibp)) { + /* Newline Space does not prevent expansion of preceding token + so expand the preceding token and then come back. */ + if (ident_length > 0) + goto specialchar; + + /* If generating final output, newline space makes a space. */ + if (!output_marks) { + obp[-1] = *ibp++; + /* And Newline Newline makes a newline, so count it. */ + if (obp[-1] == '\n') + op->lineno++; + } else { + /* If expanding a macro arg, keep the newline space. + If the arg gets stringified, newline space makes nothing. */ + *obp++ = *ibp++; + } + } else abort (); /* Newline followed by something random? */ + break; + } + + /* If there is a pending identifier, handle it and come back here. */ + if (ident_length > 0) + goto specialchar; + + beg_of_line = ibp; + + /* Update the line counts and output a #line if necessary. */ + ++ip->lineno; + ++op->lineno; + if (ip->lineno != op->lineno) { + op->bufp = obp; + output_line_command (ip, op, 1, same_file); + check_expand (op, ip->length - (ip->bufp - ip->buf)); + obp = op->bufp; + } + break; + + /* Come here either after (1) a null character that is part of the input + or (2) at the end of the input, because there is a null there. */ + case 0: + if (ibp <= limit) + /* Our input really contains a null character. */ + goto randomchar; + + /* At end of a macro-expansion level, pop it and read next level. */ + if (ip->macro != 0) { + obp--; + ibp--; + /* If we have an identifier that ends here, process it now, so + we get the right error for recursion. */ + if (ident_length && ! is_idchar (*instack[indepth - 1].bufp)) { + redo_char = 1; + goto randomchar; + } + POPMACRO; + RECACHE; + break; + } + + /* If we don't have a pending identifier, + return at end of input. */ + if (ident_length == 0) { + obp--; + ibp--; + op->bufp = obp; + ip->bufp = ibp; + goto ending; + } + + /* If we do have a pending identifier, just consider this null + a special character and arrange to dispatch on it again. + The second time, IDENT_LENGTH will be zero so we will return. */ + + /* Fall through */ + +specialchar: + + /* Handle the case of a character such as /, ', " or null + seen following an identifier. Back over it so that + after the identifier is processed the special char + will be dispatched on again. */ + + ibp--; + obp--; + redo_char = 1; + + default: + +randomchar: + + if (ident_length > 0) { + HASHNODE *hp; + + /* We have just seen an identifier end. If it's a macro, expand it. + + IDENT_LENGTH is the length of the identifier + and HASH is its hash code. + + The identifier has already been copied to the output, + so if it is a macro we must remove it. + + If REDO_CHAR is 0, the char that terminated the identifier + has been skipped in the output and the input. + OBP-IDENT_LENGTH-1 points to the identifier. + If the identifier is a macro, we must back over the terminator. + + If REDO_CHAR is 1, the terminating char has already been + backed over. OBP-IDENT_LENGTH points to the identifier. */ + + for (hp = hashtab[MAKE_POS (hash) % HASHSIZE]; hp != NULL; + hp = hp->next) { + + if (hp->length == ident_length) { + /* obufp_before_macroname is used only in this block, + but it has to be global because of RECACHE. */ + int op_lineno_before_macroname; + int i = ident_length; + U_CHAR *p = hp->name; + U_CHAR *q = obp - i; + + if (! redo_char) + q--; + + do { /* All this to avoid a strncmp () */ + if (*p++ != *q++) + goto hashcollision; + } while (--i); + + /* We found a use of a macro name. + see if the context shows it is a macro call. */ + + /* Back up over terminating character if not already done. */ + if (! redo_char) { + ibp--; + obp--; + } + + obufp_before_macroname = obp - ident_length; + op_lineno_before_macroname = op->lineno; + + /* If macro wants an arglist, verify that a '(' follows. + first skip all whitespace, copying it to the output + after the macro name. Then, if there is no '(', + decide this is not a macro call and leave things that way. */ + if (hp->type == T_MACRO && hp->value.defn->nargs >= 0) + { + while (1) { + /* Scan forward over whitespace, copying it to the output. */ + if (ibp == limit && ip->macro != 0) { + POPMACRO; + RECACHE; + } + /* A comment: copy it unchanged or discard it. */ + else if (*ibp == '/' && ibp+1 != limit && ibp[1] == '*') { + if (put_out_comments) { + *obp++ = '/'; + *obp++ = '*'; + } + ibp += 2; + while (ibp + 1 != limit + && !(ibp[0] == '*' && ibp[1] == '/')) { + /* We need not worry about newline-marks, + since they are never found in comments. */ + if (*ibp == '\n') { + /* Newline in a file. Count it. */ + ++ip->lineno; + ++op->lineno; + } + if (put_out_comments) + *obp++ = *ibp++; + else + ibp++; + } + ibp += 2; + if (put_out_comments) { + *obp++ = '*'; + *obp++ = '/'; + } + } + else if (is_space (*ibp)) { + *obp++ = *ibp++; + if (ibp[-1] == '\n') { + if (ip->macro == 0) { + /* Newline in a file. Count it. */ + ++ip->lineno; + ++op->lineno; + } else if (!output_marks) { + /* A newline mark, and we don't want marks + in the output. If it is newline-hyphen, + discard it entirely. Otherwise, it is + newline-whitechar, so keep the whitechar. */ + obp--; + if (*ibp == '-') + ibp++; + else { + if (*ibp == '\n') + ++op->lineno; + *obp++ = *ibp++; + } + } else { + /* A newline mark; copy both chars to the output. */ + *obp++ = *ibp++; + } + } + } + else break; + } + if (*ibp != '(') + break; + } + + /* This is now known to be a macro call. + Discard the macro name from the output, + along with any following whitespace just copied. */ + obp = obufp_before_macroname; + op->lineno = op_lineno_before_macroname; + + /* Expand the macro, reading arguments as needed, + and push the expansion on the input stack. */ + ip->bufp = ibp; + op->bufp = obp; + macroexpand (hp, op); + + /* Reexamine input stack, since macroexpand has pushed + a new level on it. */ + obp = op->bufp; + RECACHE; + break; + } +hashcollision: + ; + } /* End hash-table-search loop */ + ident_length = hash = 0; /* Stop collecting identifier */ + redo_char = 0; + concatenated = 0; + } /* End if (ident_length > 0) */ + } /* End switch */ + } /* End per-char loop */ + + /* Come here to return -- but first give an error message + if there was an unterminated successful conditional. */ + ending: + if (if_stack != ip->if_stack) { + const char *str; + switch (if_stack->type) { + case T_IF: + str = "if"; + break; + case T_IFDEF: + str = "ifdef"; + break; + case T_IFNDEF: + str = "ifndef"; + break; + case T_ELSE: + str = "else"; + break; + case T_ELIF: + str = "elif"; + break; + default: + abort (); + } + error_with_line (line_for_error (if_stack->lineno), + "unterminated #%s conditional", str); + } + if_stack = ip->if_stack; +} + +/* + * Rescan a string into a temporary buffer and return the result + * as a FILE_BUF. Note this function returns a struct, not a pointer. + * + * OUTPUT_MARKS nonzero means keep Newline markers found in the input + * and insert such markers when appropriate. See `rescan' for details. + * OUTPUT_MARKS is 1 for macroexpanding a macro argument separately + * before substitution; it is 0 for other uses. + */ +static FILE_BUF +expand_to_temp_buffer (buf, limit, output_marks) + const U_CHAR *buf, *limit; + int output_marks; +{ + FILE_BUF *ip; + FILE_BUF obuf; + int length = limit - buf; + U_CHAR *buf1; + int odepth = indepth; + + if (length < 0) + abort (); + + /* Set up the input on the input stack. */ + + buf1 = (U_CHAR *) alloca (length + 1); + { + const U_CHAR *p1 = buf; + U_CHAR *p2 = buf1; + + while (p1 != limit) + *p2++ = *p1++; + } + buf1[length] = 0; + + /* Set up to receive the output. */ + + obuf.length = length * 2 + 100; /* Usually enough. Why be stingy? */ + obuf.bufp = obuf.buf = (U_CHAR *) xmalloc (obuf.length); + obuf.fname = 0; + obuf.macro = 0; + obuf.free_ptr = 0; + + CHECK_DEPTH ({return obuf;}); + + ++indepth; + + ip = &instack[indepth]; + ip->fname = 0; + ip->macro = 0; + ip->free_ptr = 0; + ip->length = length; + ip->buf = ip->bufp = buf1; + ip->if_stack = if_stack; + + ip->lineno = obuf.lineno = 1; + + /* Scan the input, create the output. */ + + rescan (&obuf, output_marks); + + /* Pop input stack to original state. */ + --indepth; + + if (indepth != odepth) + abort (); + + /* Record the output. */ + obuf.length = obuf.bufp - obuf.buf; + + return obuf; +} + +/* + * Process a # directive. Expects IP->bufp to point to the '#', as in + * `#define foo bar'. Passes to the command handler + * (do_define, do_include, etc.): the addresses of the 1st and + * last chars of the command (starting immediately after the # + * keyword), plus op and the keyword table pointer. If the command + * contains comments it is copied into a temporary buffer sans comments + * and the temporary buffer is passed to the command handler instead. + * Likewise for backslash-newlines. + * + * Returns nonzero if this was a known # directive. + * Otherwise, returns zero, without advancing the input pointer. + */ + +static int +handle_directive (ip, op) + FILE_BUF *ip, *op; +{ + U_CHAR *bp, *cp; + const struct directive *kt; + int ident_length; + U_CHAR *resume_p; + + /* Nonzero means we must copy the entire command + to get rid of comments or backslash-newlines. */ + int copy_command = 0; + + U_CHAR *ident, *after_ident; + + bp = ip->bufp; + /* Skip whitespace and \-newline. */ + while (1) { + if (is_nvspace (*bp)) + bp++; + else if (*bp == '/' && (newline_fix (bp + 1), bp[1]) == '*') { + ip->bufp = bp; + skip_to_end_of_comment (ip, &ip->lineno); + bp = ip->bufp; + } else if (*bp == '\\' && bp[1] == '\n') { + bp += 2; ip->lineno++; + } else break; + } + + /* Now find end of directive name. + If we encounter a backslash-newline, exchange it with any following + symbol-constituents so that we end up with a contiguous name. */ + + cp = bp; + while (1) { + if (is_idchar (*cp)) + cp++; + else { + if (*cp == '\\' && cp[1] == '\n') + name_newline_fix (cp); + if (is_idchar (*cp)) + cp++; + else break; + } + } + ident_length = cp - bp; + ident = bp; + after_ident = cp; + + /* A line of just `#' becomes blank. */ + + if (ident_length == 0 && *after_ident == '\n') { + ip->bufp = after_ident; + return 1; + } + + /* + * Decode the keyword and call the appropriate expansion + * routine, after moving the input pointer up to the next line. + */ + for (kt = directive_table; kt->length > 0; kt++) { + if (kt->length == ident_length + && !strncmp (kt->name, (const char *)ident, ident_length)) { + U_CHAR *buf; + U_CHAR *limit = ip->buf + ip->length; + int unterminated = 0; + + /* Nonzero means do not delete comments within the directive. + #define needs this to detect traditional token paste. */ + int keep_comments = kt->type == T_DEFINE; + + /* Find the end of this command (first newline not backslashed + and not in a string or comment). + Set COPY_COMMAND if the command must be copied + (it contains a backslash-newline or a comment). */ + + buf = bp = after_ident; + while (bp < limit) { + U_CHAR c = *bp++; + switch (c) { + case '\\': + if (bp < limit) { + if (*bp == '\n') { + ip->lineno++; + copy_command = 1; + } + bp++; + } + break; + + case '\'': + case '\"': + bp = skip_quoted_string (bp - 1, limit, ip->lineno, &ip->lineno, ©_command, &unterminated); + if (unterminated) { + /* Traditional preprocessing permits unterminated strings. */ + ip->bufp = bp; + goto endloop1; + } + break; + + /* <...> is special for #include. */ + case '<': + if (kt->type != T_INCLUDE) + break; + while (*bp && *bp != '>') bp++; + break; + + case '/': + if (*bp == '\\' && bp[1] == '\n') + newline_fix (bp); + if (*bp == '*') { + U_CHAR *obp = bp - 1; + ip->bufp = bp + 1; + skip_to_end_of_comment (ip, &ip->lineno); + bp = ip->bufp; + /* No need to copy the command because of a comment at the end; + just don't include the comment in the directive. */ + if (bp == limit || *bp == '\n') { + bp = obp; + goto endloop1; + } + /* Don't remove the comments if this is #define. */ + if (! keep_comments) + copy_command++; + } + break; + + case '\n': + --bp; /* Point to the newline */ + ip->bufp = bp; + goto endloop1; + } + } + ip->bufp = bp; + + endloop1: + resume_p = ip->bufp; + /* BP is the end of the directive. + RESUME_P is the next interesting data after the directive. + A comment may come between. */ + + if (copy_command) { + U_CHAR *xp = buf; + /* Need to copy entire command into temp buffer before dispatching */ + + cp = (U_CHAR *) alloca (bp - buf + 5); /* room for cmd plus + some slop */ + buf = cp; + + /* Copy to the new buffer, deleting comments + and backslash-newlines (and whitespace surrounding the latter). */ + + while (xp < bp) { + U_CHAR c = *xp++; + *cp++ = c; + + switch (c) { + case '\n': + break; + + /* <...> is special for #include. */ + case '<': + if (kt->type != T_INCLUDE) + break; + while (xp < bp && c != '>') { + c = *xp++; + if (c == '\\' && xp < bp && *xp == '\n') + xp++, ip->lineno++; + else + *cp++ = c; + } + break; + + case '\\': + if (*xp == '\n') { + xp++; + cp--; + if (cp != buf && is_space (cp[-1])) { + while (cp != buf && is_space(cp[-1])) cp--; + cp++; +#if 1 /* Nick experimental */ + if (kt == directive_table) /* doing define */ + { + *cp++ = '\\'; + *cp++ = '\n'; + } +#endif + SKIP_WHITE_SPACE (xp); + } else if (is_nvspace (*xp)) { +#if 1 /* Nick experimental */ + if (kt == directive_table) /* doing define */ + { + *cp++ = '\\'; + *cp++ = '\n'; + } +#endif + *cp++ = *xp++; + SKIP_WHITE_SPACE (xp); + } + } else { + *cp++ = *xp++; + } + break; + + case '\'': + case '\"': + { + const U_CHAR *bp1 + = skip_quoted_string (xp - 1, limit, ip->lineno, 0, 0, 0); + while (xp != bp1) + *cp++ = *xp++; + } + break; + + case '/': + if (*xp == '*') { + ip->bufp = xp + 1; + skip_to_end_of_comment (ip, 0); + if (keep_comments) + while (xp != ip->bufp) + *cp++ = *xp++; + /* Delete the slash. */ + else + cp--; + xp = ip->bufp; + } + } + } + + /* Null-terminate the copy. */ + + *cp = 0; + } + else + cp = bp; + + ip->bufp = resume_p; + + /* Call the appropriate command handler. buf now points to + either the appropriate place in the input buffer, or to + the temp buffer if it was necessary to make one. cp + points to the first char after the contents of the (possibly + copied) command, in either case. */ + (*kt->func) (buf, cp, op); + check_expand (op, ip->length - (ip->bufp - ip->buf)); + + return 1; + } + } + + return 0; +} + +static const char *const +monthnames[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + +/* + * expand things like __FILE__. Place the expansion into the output + * buffer *without* rescanning. + */ +static void +special_symbol (hp, op) + HASHNODE *hp; + FILE_BUF *op; +{ + const char *buf; + time_t t; + int i, len; + int true_indepth; + FILE_BUF *ip = NULL; + static struct tm *timebuf = NULL; + + int paren = 0; /* For special `defined' keyword */ + + for (i = indepth; i >= 0; i--) + if (instack[i].fname != NULL) { + ip = &instack[i]; + break; + } + if (ip == NULL) + fatal ("not in any file?!"); + + switch (hp->type) { + case T_FILE: + case T_BASE_FILE: + { + const char *string; + if (hp->type == T_FILE) + string = ip->fname; + else + string = instack[0].fname; + + if (string) + { + char *tmp = (char *) alloca (3 + strlen (string)); + sprintf (tmp, "\"%s\"", string); + buf = tmp; + } + else + buf = ""; + + break; + } + + case T_INCLUDE_LEVEL: + { + char *tmp = (char *) alloca (8); /* Eigth bytes ought to be more than enough */ + true_indepth = 0; + for (i = indepth; i >= 0; i--) + if (instack[i].fname != NULL) + true_indepth++; + + sprintf (tmp, "%d", true_indepth - 1); + buf = tmp; + break; + } + + case T_VERSION: + { + char *tmp = (char *) alloca (3 + strlen (version_string)); + sprintf (tmp, "\"%s\"", version_string); + buf = tmp; + break; + } + + case T_CONST: + buf = hp->value.cpval; + break; + + case T_SPECLINE: + { + char *tmp = (char *) alloca (10); + sprintf (tmp, "%d", ip->lineno); + buf = tmp; + break; + } + + case T_DATE: + case T_TIME: + { + char *tmp = (char *) alloca (20); + + if (timebuf == NULL) { + t = time (0); + timebuf = localtime (&t); + } + if (hp->type == T_DATE) + sprintf (tmp, "\"%s %2d %4d\"", monthnames[timebuf->tm_mon], + timebuf->tm_mday, timebuf->tm_year + 1900); + else + sprintf (tmp, "\"%02d:%02d:%02d\"", timebuf->tm_hour, timebuf->tm_min, + timebuf->tm_sec); + buf = tmp; + break; + } + + case T_SPEC_DEFINED: + buf = " 0 "; /* Assume symbol is not defined */ + ip = &instack[indepth]; + SKIP_WHITE_SPACE (ip->bufp); + if (*ip->bufp == '(') { + paren++; + ip->bufp++; /* Skip over the paren */ + SKIP_WHITE_SPACE (ip->bufp); + } + + if (!is_idstart (*ip->bufp)) + goto oops; + { + HASHNODE *hp = lookup (ip->bufp, -1, -1); + + if (hp && hp->type != T_UNUSED && hp->type != T_SPEC_DEFINED) + buf = " 1 "; + } + while (is_idchar (*ip->bufp)) + ++ip->bufp; + SKIP_WHITE_SPACE (ip->bufp); + if (paren) { + if (*ip->bufp != ')') + goto oops; + ++ip->bufp; + } + break; + +oops: + + error ("`defined' must be followed by ident or (ident)"); + break; + + default: + error ("cccp error: invalid special hash type"); /* time for gdb */ + abort (); + } + len = strlen (buf); + check_expand (op, len); + memcpy (op->bufp, buf, len); + op->bufp += len; +} + + +/* Routines to handle #directives */ + +/* + * Process include file by reading it in and calling rescan. + * Expects to see "fname" or on the input. + */ +static void +do_include (buf, limit, op) + U_CHAR *buf, *limit; + FILE_BUF *op; +{ + U_CHAR *fbeg, *fend; /* Beginning and end of fname */ + + struct file_name_list *stackp = include; /* Chain of dirs to search */ + struct file_name_list dsp[1]; /* First in chain, if #include "..." */ + int flen; + + int retried = 0; /* Have already tried macro + expanding the include line*/ + FILE_BUF trybuf; /* It got expanded into here */ + int system_header_p = 0; /* 0 for "...", 1 for <...> */ + +get_filename: + + fbeg = buf; + SKIP_WHITE_SPACE (fbeg); + /* Discard trailing whitespace so we can easily see + if we have parsed all the significant chars we were given. */ + while (limit != fbeg && is_nvspace (limit[-1])) limit--; + + switch (*fbeg++) { + case '\"': + fend = fbeg; + while (fend != limit && *fend != '\"') + fend++; + if (*fend == '\"' && fend + 1 == limit) { + FILE_BUF *fp; + + /* We have "filename". Figure out directory this source + file is coming from and put it on the front of the list. */ + + /* If -I- was specified, don't search current dir, only spec'd ones. */ + if (ignore_srcdir) break; + + for (fp = &instack[indepth]; fp >= instack; fp--) + { + size_t n; + const char *ep, *nam; + + if ((nam = fp->fname) != NULL) { + /* Found a named file. Figure out dir of the file, + and put it in front of the search list. */ + dsp[0].next = stackp; + stackp = dsp; + ep = strrchr (nam, '/'); + if (ep != NULL) { + char *f; + n = ep - nam; + f = (char *) alloca (n + 1); + strncpy (f, nam, n); + f[n] = '\0'; + dsp[0].fname = f; + if (n > max_include_len) max_include_len = n; + } else { + dsp[0].fname = 0; /* Current directory */ + } + break; + } + } + break; + } + goto fail; + + case '<': + fend = fbeg; + while (fend != limit && *fend != '>') fend++; + if (*fend == '>' && fend + 1 == limit) { + system_header_p = 1; + /* If -I-, start with the first -I dir after the -I-. */ + if (first_bracket_include) + stackp = first_bracket_include; + break; + } + goto fail; + + default: + fail: + if (retried) { + error ("#include expects \"fname\" or "); + return; + } else { + trybuf = expand_to_temp_buffer (buf, limit, 0); + buf = (U_CHAR *) alloca (trybuf.bufp - trybuf.buf + 1); + memcpy (buf, trybuf.buf, trybuf.bufp - trybuf.buf); + limit = buf + (trybuf.bufp - trybuf.buf); + free (trybuf.buf); + retried++; + goto get_filename; + } + } + + flen = fend - fbeg; + process_include (stackp, fbeg, flen, system_header_p, op); +} + +static void +do_include_next (buf, limit, op) + U_CHAR *buf, *limit; + FILE_BUF *op; +{ + U_CHAR *fbeg, *fend; /* Beginning and end of fname */ + + struct file_name_list *stackp; /* Chain of dirs to search */ + int flen; + + int retried = 0; /* Have already tried macro + expanding the include line*/ + FILE_BUF trybuf; /* It got expanded into here */ + int system_header_p = 0; /* 0 for "...", 1 for <...> */ + + /* Treat as plain #include if we don't know where to start + looking. */ + stackp = instack[indepth].next_header_dir; + if (stackp == 0) + { + do_include (buf, limit, op); + return; + } + +get_filename: + + fbeg = buf; + SKIP_WHITE_SPACE (fbeg); + /* Discard trailing whitespace so we can easily see + if we have parsed all the significant chars we were given. */ + while (limit != fbeg && is_nvspace (limit[-1])) limit--; + + switch (*fbeg++) { + case '\"': + fend = fbeg; + while (fend != limit && *fend != '\"') + fend++; + if (*fend == '\"' && fend + 1 == limit) + break; + goto fail; + + case '<': + fend = fbeg; + while (fend != limit && *fend != '>') fend++; + if (*fend == '>' && fend + 1 == limit) { + system_header_p = 1; + break; + } + goto fail; + + default: + fail: + if (retried) { + error ("#include expects \"fname\" or "); + return; + } else { + trybuf = expand_to_temp_buffer (buf, limit, 0); + buf = (U_CHAR *) alloca (trybuf.bufp - trybuf.buf + 1); + memcpy (buf, trybuf.buf, trybuf.bufp - trybuf.buf); + limit = buf + (trybuf.bufp - trybuf.buf); + free (trybuf.buf); + retried++; + goto get_filename; + } + } + + flen = fend - fbeg; + process_include (stackp, fbeg, flen, system_header_p, op); +} + +static void +process_include (stackp, fbeg, flen, system_header_p, op) + struct file_name_list *stackp; + const U_CHAR *fbeg; + int flen; + int system_header_p; + FILE_BUF *op; +{ + char *fname; + int f = -1; /* file number */ + + fname = (char *) alloca (max_include_len + flen + 2); + /* + 2 above for slash and terminating null. */ + + /* If specified file name is absolute, just open it. */ + + if (IS_ABSOLUTE_PATHNAME (fbeg)) { + strncpy (fname, (const char *)fbeg, flen); + fname[flen] = 0; + f = open (fname, O_RDONLY, 0666); + } else { + /* Search directory path, trying to open the file. + Copy each filename tried into FNAME. */ + + for (; stackp; stackp = stackp->next) { + if (stackp->fname) { + strcpy (fname, stackp->fname); + strcat (fname, "/"); + fname[strlen (fname) + flen] = 0; + } else { + fname[0] = 0; + } + strncat (fname, (const char *)fbeg, flen); + if ((f = open (fname, O_RDONLY, 0666)) >= 0) + break; + } + } + + if (f < 0) { + strncpy (fname, (const char *)fbeg, flen); + fname[flen] = 0; + if (deps_missing_files + && print_deps > (system_header_p || (system_include_depth > 0))) { + + /* If requested as a system header, assume it belongs in + the first system header directory. */ + if (first_bracket_include) + stackp = first_bracket_include; + else + stackp = include; + + if (!system_header_p || IS_ABSOLUTE_PATHNAME (fbeg) || !stackp->fname) + deps_add_dep (deps, fname); + else { + char *p; + int len = strlen(stackp->fname); + + p = (char *) alloca (len + flen + 2); + memcpy (p, stackp->fname, len); + p[len++] = '/'; + memcpy (p + len, fbeg, flen); + len += flen; + p[len] = '\0'; + deps_add_dep (deps, p); + } + } else if (print_deps + && print_deps <= (system_header_p + || (system_include_depth > 0))) + warning ("no include path in which to find %.*s", flen, fbeg); + else + error_from_errno (fname); + + } else { + + /* Check to see if this include file is a once-only include file. + If so, give up. */ + + struct file_name_list* ptr; + + for (ptr = dont_repeat_files; ptr; ptr = ptr->next) { + if (!strcmp (ptr->fname, fname)) { + close (f); + return; /* This file was once'd. */ + } + } + + for (ptr = all_include_files; ptr; ptr = ptr->next) { + if (!strcmp (ptr->fname, fname)) + break; /* This file was included before. */ + } + + if (ptr == 0) { + /* This is the first time for this file. */ + /* Add it to list of files included. */ + + ptr = (struct file_name_list *) xmalloc (sizeof (struct file_name_list)); + ptr->next = all_include_files; + all_include_files = ptr; + ptr->fname = xstrdup (fname); + + /* For -M, add this file to the dependencies. */ + if (print_deps > (system_header_p || (system_include_depth > 0))) + deps_add_dep (deps, fname); + } + + if (system_header_p) + system_include_depth++; + + /* Actually process the file. */ + finclude (f, fname, stackp->next, op); + + if (system_header_p) + system_include_depth--; + + close (f); + } +} + +/* Replace all CR NL, NL CR and CR sequences with NL. */ + +static void +fixup_newlines (fp) + FILE_BUF *fp; +{ + U_CHAR *p, *q, *end; + + if (fp->length <= 0) + return; + + end = fp->buf + fp->length; + *end = '\r'; + p = (U_CHAR *) strchr ((const char *) fp->buf, '\r'); + *end = '\0'; + if (p == end) + return; + + if (p > fp->buf && p[-1] == '\n') + p--; + q = p; + while (p < end) + switch (*p) + { + default: + *q++ = *p++; + break; + case '\n': + case '\r': + p += 1 + (p[0] + p[1] == '\n' + '\r'); + *q++ = '\n'; + break; + } + + fp->length = q - fp->buf; +} + +/* Process the contents of include file FNAME, already open on descriptor F, + with output to OP. */ + +static void +finclude (f, fname, nhd, op) + int f; + const char *fname; + struct file_name_list *nhd; + FILE_BUF *op; +{ + int st_mode; + long st_size; + long i; + FILE_BUF *fp; /* For input stack frame */ + + CHECK_DEPTH (return;); + + if (file_size_and_mode (f, &st_mode, &st_size)) + goto nope; + + fp = &instack[indepth + 1]; + memset (fp, 0, sizeof (FILE_BUF)); + fp->fname = fname; + fp->length = 0; + fp->lineno = 1; + fp->if_stack = if_stack; + fp->next_header_dir = nhd; + + if (S_ISREG (st_mode)) { + fp->buf = (U_CHAR *) xmalloc (st_size + 2); + fp->bufp = fp->buf; + + /* Read the file contents, knowing that st_size is an upper bound + on the number of bytes we can read. */ + while (st_size > 0) { + i = read (f, fp->buf + fp->length, st_size); + if (i <= 0) { + if (i == 0) break; + goto nope; + } + fp->length += i; + st_size -= i; + } + } + else { + /* Cannot count its file size before reading. */ + + U_CHAR *bufp; + U_CHAR *basep; + int bsize = 2000; + + st_size = 0; + basep = (U_CHAR *) xmalloc (bsize + 2); + bufp = basep; + + for (;;) { + i = read (f, bufp, bsize - st_size); + if (i < 0) + goto nope; /* error! */ + if (i == 0) + break; /* End of file */ + st_size += i; + bufp += i; + if (bsize == st_size) { /* Buffer is full! */ + bsize *= 2; + basep = (U_CHAR *) xrealloc (basep, bsize + 2); + bufp = basep + st_size; /* May have moved */ + } + } + fp->buf = basep; + fp->bufp = fp->buf; + fp->length = st_size; + } + close (f); + fixup_newlines (fp); + + /* Make sure data ends with a newline. And put a null after it. */ + + if (fp->length > 0 && fp->buf[fp->length-1] != '\n') + fp->buf[fp->length++] = '\n'; + fp->buf[fp->length] = '\0'; + + indepth++; + output_line_command (fp, op, 0, enter_file); + rescan (op, 0); + indepth--; + instack[indepth].lineno++; + instack[indepth].bufp++; /* Skip the new line. */ + output_line_command (&instack[indepth], op, 0, leave_file); + free (fp->buf); + return; + +nope: + perror_with_name (fname); + close (f); +} + + +/* Process a #define command. +BUF points to the contents of the #define command, as a continguous string. +LIMIT points to the first character past the end of the definition. +KEYWORD is the keyword-table entry for #define. */ + +static void +do_define (buf, limit, op) + U_CHAR *buf, *limit; + FILE_BUF *op ATTRIBUTE_UNUSED; +{ + U_CHAR *bp; /* temp ptr into input buffer */ + U_CHAR *symname; /* remember where symbol name starts */ + int sym_length; /* and how long it is */ + + DEFINITION *defn; + int arglengths = 0; /* Accumulate lengths of arg names + plus number of args. */ + int hashcode; +#if 0 /* Nick */ + fflush(stdout); + fprintf(stderr, "defining \""); + fwrite(buf, limit - buf, 1, stderr); + fprintf(stderr, "\"\n"); + fflush(stderr); +#endif + + bp = buf; + + while (is_nvspace (*bp)) + bp++; +#if 1 /* Nick */ + while (bp[0] == '\\' && bp[1] == '\n') + { + bp += 2; + while (is_nvspace (*bp)) + { + bp++; + } + } +#endif + + symname = bp; /* remember where it starts */ + while (is_idchar (*bp) && bp < limit) { + bp++; + } + sym_length = bp - symname; + if (sym_length == 0) + { + error ("invalid macro name"); + return; + } + else if (!is_idstart (*symname)) { + U_CHAR *msg; /* what pain... */ + msg = (U_CHAR *) alloca (sym_length + 1); + memcpy (msg, symname, sym_length); + msg[sym_length] = 0; + error ("invalid macro name `%s'", msg); + return; + } else { + if (! strncmp ((const char *)symname, "defined", 7) && sym_length == 7) + { + error ("\"defined\" cannot be used as a macro name"); + return; + } + } + + /* lossage will occur if identifiers or control keywords are broken + across lines using backslash. This is not the right place to take + care of that. */ + + if (*bp == '(') { + struct arglist *arg_ptrs = NULL; + int argno = 0; + + bp++; /* skip '(' */ + SKIP_WHITE_SPACE (bp); +#if 1 /* Nick */ + while (bp[0] == '\\' && bp[1] == '\n') + { + bp += 2; + SKIP_WHITE_SPACE (bp); + } +#endif + + /* Loop over macro argument names. */ + while (*bp != ')') { + struct arglist *temp; + + temp = (struct arglist *) alloca (sizeof (struct arglist)); + temp->name = bp; + temp->next = arg_ptrs; + temp->argno = argno++; + arg_ptrs = temp; + + if (!is_idstart (*bp)) + warning ("parameter name starts with a digit in #define"); + + /* Find the end of the arg name. */ + while (is_idchar (*bp)) { + bp++; + } + temp->length = bp - temp->name; + arglengths += temp->length + 2; + SKIP_WHITE_SPACE (bp); +#if 1 /* Nick */ + while (bp[0] == '\\' && bp[1] == '\n') + { + bp += 2; + SKIP_WHITE_SPACE (bp); + } +#endif + if (temp->length == 0 || (*bp != ',' && *bp != ')')) { + error ("badly punctuated parameter list in #define"); + return; + } + if (*bp == ',') { + bp++; + SKIP_WHITE_SPACE (bp); +#if 1 /* Nick */ + while (bp[0] == '\\' && bp[1] == '\n') + { + bp += 2; + SKIP_WHITE_SPACE (bp); + } +#endif + } + if (bp >= limit) { + error ("unterminated parameter list in #define"); + return; + } + } + + ++bp; /* skip paren */ + while (is_nvspace (*bp) && bp < limit) /* and leading whitespace */ + ++bp; + /* now everything from bp before limit is the definition. */ + defn = collect_expansion (bp, limit, argno, arg_ptrs); + + /* Now set defn->argnames to the result of concatenating + the argument names in reverse order + with comma-space between them. */ + { + struct arglist *temp; + int i = 0; + U_CHAR *tmp = (U_CHAR *) xmalloc (arglengths + 1); + + for (temp = arg_ptrs; temp; temp = temp->next) { + memcpy (&tmp[i], temp->name, temp->length); + i += temp->length; + if (temp->next != 0) { + tmp[i++] = ','; + tmp[i++] = ' '; + } + } + tmp[i] = 0; + defn->argnames = tmp; + + } + } else { + /* simple expansion or empty definition; skip leading whitespace */ + while (is_nvspace (*bp) && bp < limit) + ++bp; + /* now everything from bp before limit is the definition. */ + defn = collect_expansion (bp, limit, -1, 0); + defn->argnames = (const U_CHAR *) ""; + } + + hashcode = hashf (symname, sym_length, HASHSIZE); + + { + HASHNODE *hp; + if ((hp = lookup (symname, sym_length, hashcode)) == NULL) + hp = install (symname, sym_length, T_MACRO, hashcode); + else { + if (hp->type != T_MACRO || compare_defs (defn, hp->value.defn)) + warning ("\"%.*s\" redefined", sym_length, symname); + + /* Replace the old definition. */ + hp->type = T_MACRO; + } + + hp->value.defn = defn; + } +} + +/* + * return zero if two DEFINITIONs are isomorphic + */ +static int +compare_defs (d1, d2) + DEFINITION *d1, *d2; +{ + struct reflist *a1, *a2; + U_CHAR *p1 = d1->expansion; + U_CHAR *p2 = d2->expansion; + int first = 1; + + if (d1->nargs != d2->nargs) + return 1; + if (strcmp ((const char *)d1->argnames, (const char *)d2->argnames)) + return 1; + for (a1 = d1->pattern, a2 = d2->pattern; a1 && a2; + a1 = a1->next, a2 = a2->next) { + if (!((a1->nchars == a2->nchars + && ! strncmp ((const char *)p1, (const char *)p2, a1->nchars)) + || ! comp_def_part (first, p1, a1->nchars, p2, a2->nchars, 0)) + || a1->argno != a2->argno + || a1->stringify != a2->stringify + || a1->raw_before != a2->raw_before + || a1->raw_after != a2->raw_after) + return 1; + first = 0; + p1 += a1->nchars; + p2 += a2->nchars; + } + if (a1 != a2) + return 1; + if (comp_def_part (first, p1, d1->length - (p1 - d1->expansion), + p2, d2->length - (p2 - d2->expansion), 1)) + return 1; + return 0; +} + +/* Return 1 if two parts of two macro definitions are effectively different. + One of the parts starts at BEG1 and has LEN1 chars; + the other has LEN2 chars at BEG2. + Any sequence of whitespace matches any other sequence of whitespace. + FIRST means these parts are the first of a macro definition; + so ignore leading whitespace entirely. + LAST means these parts are the last of a macro definition; + so ignore trailing whitespace entirely. */ +static int +comp_def_part (first, beg1, len1, beg2, len2, last) + int first; + const U_CHAR *beg1, *beg2; + int len1, len2; + int last; +{ + const U_CHAR *end1 = beg1 + len1; + const U_CHAR *end2 = beg2 + len2; + if (first) { + while (beg1 != end1 && is_space (*beg1)) beg1++; + while (beg2 != end2 && is_space (*beg2)) beg2++; + } + if (last) { + while (beg1 != end1 && is_space (end1[-1])) end1--; + while (beg2 != end2 && is_space (end2[-1])) end2--; + } + while (beg1 != end1 && beg2 != end2) { + if (is_space (*beg1) && is_space (*beg2)) { + while (beg1 != end1 && is_space (*beg1)) beg1++; + while (beg2 != end2 && is_space (*beg2)) beg2++; + } else if (*beg1 == *beg2) { + beg1++; beg2++; + } else break; + } + return (beg1 != end1) || (beg2 != end2); +} + +/* Read a replacement list for a macro with parameters. + Build the DEFINITION structure. + Reads characters of text starting at BUF until LIMIT. + ARGLIST specifies the formal parameters to look for + in the text of the definition; NARGS is the number of args + in that list, or -1 for a macro name that wants no argument list. + MACRONAME is the macro name itself (so we can avoid recursive expansion) + and NAMELEN is its length in characters. + +Note that comments and backslash-newlines have already been deleted +from the argument. */ + +/* Leading and trailing Space, Tab, etc. are converted to markers + Newline Space, Newline Tab, etc. + Newline Space makes a space in the final output + but is discarded if stringified. (Newline Tab is similar but + makes a Tab instead.) + + If there is no trailing whitespace, a Newline Space is added at the end + to prevent concatenation that would be contrary to the standard. */ + +static DEFINITION * +collect_expansion (buf, end, nargs, arglist) + U_CHAR *buf, *end; + int nargs; + struct arglist *arglist; +{ + DEFINITION *defn; + U_CHAR *p, *limit, *lastp, *exp_p; + struct reflist *endpat = NULL; + /* Pointer to first nonspace after last ## seen. */ + U_CHAR *concat = 0; + /* Pointer to first nonspace after last single-# seen. */ + U_CHAR *stringify = 0; + int maxsize; + int expected_delimiter = '\0'; + + /* Scan thru the replacement list, ignoring comments and quoted + strings, picking up on the macro calls. It does a linear search + thru the arg list on every potential symbol. Profiling might say + that something smarter should happen. */ + + if (end < buf) + abort (); + + /* Find the beginning of the trailing whitespace. */ + /* Find end of leading whitespace. */ + limit = end; + p = buf; + while (p < limit && is_space (limit[-1])) limit--; + while (p < limit && is_space (*p)) p++; +#if 0 /* Nick */ + fflush(stdout); + fprintf(stderr, "collecting \""); + fwrite(p, limit - p, 1, stderr); + fprintf(stderr, "\"\n"); + fflush(stderr); +#endif + + /* Allocate space for the text in the macro definition. + Leading and trailing whitespace chars need 2 bytes each. + Each other input char may or may not need 1 byte, + so this is an upper bound. + The extra 2 are for invented trailing newline-marker and final null. */ + maxsize = (sizeof (DEFINITION) + + 2 * (end - limit) + 2 * (p - buf) + + (limit - p) + 3); + defn = (DEFINITION *) xcalloc (1, maxsize); + + defn->nargs = nargs; + exp_p = defn->expansion = (U_CHAR *) defn + sizeof (DEFINITION); + lastp = exp_p; + + p = buf; + + /* Convert leading whitespace to Newline-markers. */ + while (p < limit && is_space (*p)) { + *exp_p++ = '\n'; + *exp_p++ = *p++; + } + + /* Process the main body of the definition. */ + while (p < limit) { + int skipped_arg = 0; + U_CHAR c = *p++; + + *exp_p++ = c; + + /* In -traditional mode, recognize arguments inside strings and + and character constants, and ignore special properties of #. + Arguments inside strings are considered "stringified", but no + extra quote marks are supplied. */ + switch (c) { + case '\'': + case '\"': + if (expected_delimiter != '\0') { + if (c == expected_delimiter) + expected_delimiter = '\0'; + } else + expected_delimiter = c; + break; + + case '\\': + /* Backslash quotes delimiters and itself, but not macro args. */ + if (expected_delimiter != 0 && p < limit + && (*p == expected_delimiter || *p == '\\')) { + *exp_p++ = *p++; + continue; + } + break; + + case '/': + if (expected_delimiter != '\0') /* No comments inside strings. */ + break; + if (*p == '*') { + /* If we find a comment that wasn't removed by handle_directive, + this must be -traditional. So replace the comment with + nothing at all. */ + exp_p--; + p += 1; + while (p < limit && !(p[-2] == '*' && p[-1] == '/')) + p++; + } + break; + } + + if (is_idchar (c) && nargs > 0) { + U_CHAR *id_beg = p - 1; + int id_len; + + --exp_p; + while (p != limit && is_idchar (*p)) p++; + id_len = p - id_beg; + + if (is_idstart (c)) { + struct arglist *arg; + + for (arg = arglist; arg != NULL; arg = arg->next) { + struct reflist *tpat; + + if (arg->name[0] == c + && arg->length == id_len + && strncmp ((const char *)arg->name, + (const char *)id_beg, id_len) == 0) { + /* make a pat node for this arg and append it to the end of + the pat list */ + tpat = (struct reflist *) xmalloc (sizeof (struct reflist)); + tpat->next = NULL; + tpat->raw_before = concat == id_beg; + tpat->raw_after = 0; + tpat->stringify = expected_delimiter != '\0'; + + if (endpat == NULL) + defn->pattern = tpat; + else + endpat->next = tpat; + endpat = tpat; + + tpat->argno = arg->argno; + tpat->nchars = exp_p - lastp; + { + U_CHAR *p1 = p; + SKIP_WHITE_SPACE (p1); + if (p1 + 2 <= limit && p1[0] == '#' && p1[1] == '#') + tpat->raw_after = 1; + } + lastp = exp_p; /* place to start copying from next time */ + skipped_arg = 1; + break; + } + } + } + + /* If this was not a macro arg, copy it into the expansion. */ + if (! skipped_arg) { + U_CHAR *lim1 = p; + p = id_beg; + while (p != lim1) + *exp_p++ = *p++; + if (stringify == id_beg) + error ("# operator should be followed by a macro argument name"); + } + } + } + + if (limit < end) { + /* Convert trailing whitespace to Newline-markers. */ + while (limit < end && is_space (*limit)) { + *exp_p++ = '\n'; + *exp_p++ = *limit++; + } + } + *exp_p = '\0'; + + defn->length = exp_p - defn->expansion; + + /* Crash now if we overrun the allocated size. */ + if (defn->length + 1 > maxsize) + abort (); + + return defn; +} + +/* + * interpret #line command. Remembers previously seen fnames + * in its very own hash table. + */ +#define FNAME_HASHSIZE 37 +static void +do_line (buf, limit, op) + U_CHAR *buf, *limit; + FILE_BUF *op; +{ + U_CHAR *bp; + FILE_BUF *ip = &instack[indepth]; + FILE_BUF tem; + int new_lineno; + enum file_change_code file_change = same_file; + + /* Expand any macros. */ + tem = expand_to_temp_buffer (buf, limit, 0); + + /* Point to macroexpanded line, which is null-terminated now. */ + bp = tem.buf; + SKIP_WHITE_SPACE (bp); + + if (!ISDIGIT (*bp)) { + error ("invalid format #line command"); + return; + } + + /* The Newline at the end of this line remains to be processed. + To put the next line at the specified line number, + we must store a line number now that is one less. */ + new_lineno = atoi ((const char *)bp); + + /* skip over the line number. */ + while (ISDIGIT (*bp)) + bp++; + + SKIP_WHITE_SPACE (bp); + + if (*bp == '\"') { + static HASHNODE *fname_table[FNAME_HASHSIZE]; + HASHNODE *hp, **hash_bucket; + U_CHAR *fname; + int fname_length; + + fname = ++bp; + + while (*bp && *bp != '\"') + bp++; + if (*bp != '\"') { + error ("invalid format #line command"); + return; + } + + fname_length = bp - fname; + + bp++; + SKIP_WHITE_SPACE (bp); + if (*bp) { + if (*bp == '1') + file_change = enter_file; + else if (*bp == '2') + file_change = leave_file; + else { + error ("invalid format #line command"); + return; + } + + bp++; + SKIP_WHITE_SPACE (bp); + if (*bp) { + error ("invalid format #line command"); + return; + } + } + + hash_bucket = + &fname_table[hashf (fname, fname_length, FNAME_HASHSIZE)]; + for (hp = *hash_bucket; hp != NULL; hp = hp->next) + if (hp->length == fname_length && + strncmp (hp->value.cpval, (const char *)fname, fname_length) == 0) { + ip->fname = hp->value.cpval; + break; + } + if (hp == 0) { + char *q; + /* Didn't find it; cons up a new one. */ + hp = (HASHNODE *) xcalloc (1, sizeof (HASHNODE) + fname_length + 1); + hp->next = *hash_bucket; + *hash_bucket = hp; + + hp->length = fname_length; + ip->fname = hp->value.cpval = q = ((char *) hp) + sizeof (HASHNODE); + memcpy (q, fname, fname_length); + } + } else if (*bp) { + error ("invalid format #line command"); + return; + } + + ip->lineno = new_lineno; + output_line_command (ip, op, 0, file_change); + ip->bufp++; /* Skip the new line. */ + check_expand (op, ip->length - (ip->bufp - ip->buf)); +} + +/* + * remove all definitions of symbol from symbol table. + * according to un*x /lib/cpp, it is not an error to undef + * something that has no definitions, so it isn't one here either. + */ +static void +do_undef (buf, limit, op) + U_CHAR *buf; + U_CHAR *limit ATTRIBUTE_UNUSED; + FILE_BUF *op ATTRIBUTE_UNUSED; +{ + HASHNODE *hp; + + SKIP_WHITE_SPACE (buf); + + if (! strncmp ((const char *)buf, "defined", 7) && ! is_idchar (buf[7])) + warning ("undefining `defined'"); + + while ((hp = lookup (buf, -1, -1)) != NULL) { + if (hp->type != T_MACRO) + warning ("undefining `%s'", hp->name); + delete_macro (hp); + } +} + +/* Read the tokens of the answer into the macro pool. Only commit the + memory if we intend it as permanent storage, i.e. the #assert case. + Returns 0 on success. */ + +static int +parse_answer (buf, limit, answerp, type) + const unsigned char *buf, *limit; + struct answer **answerp; + int type; +{ + const unsigned char *start; + + /* Skip leading whitespace. */ + if (buf < limit && *buf == ' ') + buf++; + + /* Parentheses are optional here. */ + if (buf == limit && type == T_UNASSERT) + return 0; + + if (buf == limit || *buf++ != '(') + { + if (type == T_IF) + return 0; + + error ("missing '(' after predicate"); + return 1; + } + + /* Drop whitespace at start. */ + while (buf < limit && *buf == ' ') + buf++; + + start = buf; + while (buf < limit && *buf != ')') + buf++; + + if (buf == limit) + { + error ("missing ')' to complete answer"); + return 1; + } + + if (buf == start) + { + error ("predicate's answer is empty"); + return 1; + } + + if ((type == T_ASSERT || type == T_UNASSERT) && buf + 1 != limit) + { + error ("extra text at end of directive"); + return 1; + } + + /* Lose trailing whitespace. */ + if (buf[-1] == ' ') + buf--; + + *answerp = (struct answer *) xmalloc (sizeof (struct answer)); + (*answerp)->answer = start; + (*answerp)->len = buf - start; + + return 0; +} + +/* Parses an assertion, returning a pointer to the hash node of the + predicate, or 0 on error. If an answer was supplied, it is placed + in ANSWERP, otherwise it is set to 0. */ +static HASHNODE * +parse_assertion (buf, limit, answerp, type) + const unsigned char *buf, *limit; + struct answer **answerp; + int type; +{ + HASHNODE *result = 0; + const unsigned char *climit; + unsigned char *bp, *symname = canonicalize_text (buf, limit, &climit); + unsigned int len; + + bp = symname; + if (bp < climit && is_idstart (*bp)) + { + do + bp++; + while (bp < climit && is_idchar (*bp)); + } + len = bp - symname; + + *answerp = 0; + if (len == 0) + { + if (symname == climit) + error ("assertion without predicate"); + else + error ("predicate must be an identifier"); + } + /* Unfortunately, because of the way we handle #if, we don't avoid + macro expansion in answers. This is not easy to fix. */ + else if (parse_answer (bp, climit, answerp, type) == 0) + { + unsigned char *sym = alloca (len + 1); + int hashcode; + + /* Prefix '#' to get it out of macro namespace. */ + sym[0] = '#'; + memcpy (sym + 1, symname, len); + + hashcode = hashf (sym, len + 1, HASHSIZE); + result = lookup (sym, len + 1, hashcode); + if (result == 0) + result = install (sym, len + 1, T_UNUSED, hashcode); + } + + return result; +} + +/* Test an assertion within a preprocessor conditional. Returns zero + on error or failure, one on success. */ +int +test_assertion (pbuf) + unsigned char **pbuf; /* NUL-terminated. */ +{ + unsigned char *buf = *pbuf; + unsigned char *limit = buf + strlen ((char *) buf); + struct answer *answer; + HASHNODE *node; + int result = 0; + + node = parse_assertion (buf, limit, &answer, T_IF); + if (node) + { + result = (node->type == T_ASSERT && + (answer == 0 || *find_answer (node, answer) != 0)); + + /* Yuk. We update pbuf to point after the assertion test. + First, move past the identifier. */ + if (is_space (*buf)) + buf++; + while (is_idchar (*buf)) + buf++; + /* If we have an answer, we need to move past the parentheses. */ + if (answer) + while (*buf++ != ')') + ; + *pbuf = buf; + } + + return result; +} + +/* Handle a #error directive. */ +static void +do_error (buf, limit, op) + U_CHAR *buf; + U_CHAR *limit; + FILE_BUF *op ATTRIBUTE_UNUSED; +{ + error ("#error%.*s", (int) (limit - buf), buf); +} + +/* Handle a #warning directive. */ +static void +do_warning (buf, limit, op) + U_CHAR *buf; + U_CHAR *limit; + FILE_BUF *op ATTRIBUTE_UNUSED; +{ + warning ("#warning%.*s", (int) (limit - buf), buf); +} + +/* Handle a #assert directive. */ +static void +do_assert (buf, limit, op) + U_CHAR *buf; + U_CHAR *limit; + FILE_BUF *op ATTRIBUTE_UNUSED; +{ + struct answer *new_answer; + HASHNODE *node; + + node = parse_assertion (buf, limit, &new_answer, T_ASSERT); + if (node) + { + /* Place the new answer in the answer list. First check there + is not a duplicate. */ + new_answer->next = 0; + if (node->type == T_ASSERT) + { + if (*find_answer (node, new_answer)) + { + free (new_answer); + warning ("\"%s\" re-asserted", node->name + 1); + return; + } + new_answer->next = node->value.answers; + } + node->type = T_ASSERT; + node->value.answers = new_answer; + } +} + +/* Function body to be provided later. */ +static void +do_unassert (buf, limit, op) + U_CHAR *buf; + U_CHAR *limit; + FILE_BUF *op ATTRIBUTE_UNUSED; +{ + HASHNODE *node; + struct answer *answer; + + node = parse_assertion (buf, limit, &answer, T_UNASSERT); + /* It isn't an error to #unassert something that isn't asserted. */ + if (node) + { + if (node->type == T_ASSERT) + { + if (answer) + { + struct answer **p = find_answer (node, answer), *temp; + + /* Remove the answer from the list. */ + temp = *p; + if (temp) + *p = temp->next; + + /* Did we free the last answer? */ + if (node->value.answers == 0) + delete_macro (node); + } + else + delete_macro (node); + } + + free (answer); + } +} + +/* Returns a pointer to the pointer to the answer in the answer chain, + or a pointer to NULL if the answer is not in the chain. */ +static struct answer ** +find_answer (node, candidate) + HASHNODE *node; + const struct answer *candidate; +{ + struct answer **result; + + for (result = &node->value.answers; *result; result = &(*result)->next) + { + struct answer *answer = *result; + + if (answer->len == candidate->len + && !memcmp (answer->answer, candidate->answer, answer->len)) + break; + } + + return result; +} + +/* Return a malloced buffer with leading and trailing whitespace + removed, and all instances of internal whitespace reduced to a + single space. */ +static unsigned char * +canonicalize_text (buf, limit, climit) + const unsigned char *buf, *limit, **climit; +{ + unsigned int len = limit - buf; + unsigned char *result = (unsigned char *) xmalloc (len), *dest; + + for (dest = result; buf < limit;) + { + if (! is_space (*buf)) + *dest++ = *buf++; + else + { + while (++buf < limit && is_space (*buf)) + ; + if (dest != result && buf != limit) + *dest++ = ' '; + } + } + + *climit = dest; + return result; +} + +/* + * handle #if command by + * 1) inserting special `defined' keyword into the hash table + * that gets turned into 0 or 1 by special_symbol (thus, + * if the luser has a symbol called `defined' already, it won't + * work inside the #if command) + * 2) rescan the input into a temporary output buffer + * 3) pass the output buffer to the yacc parser and collect a value + * 4) clean up the mess left from steps 1 and 2. + * 5) call conditional_skip to skip til the next #endif (etc.), + * or not, depending on the value from step 3. + */ +static void +do_if (buf, limit, op) + U_CHAR *buf, *limit; + FILE_BUF *op ATTRIBUTE_UNUSED; +{ + int value; + FILE_BUF *ip = &instack[indepth]; + + value = eval_if_expression (buf, limit - buf); + conditional_skip (ip, value == 0, T_IF); +} + +/* + * handle a #elif directive by not changing if_stack either. + * see the comment above do_else. + */ +static void +do_elif (buf, limit, op) + U_CHAR *buf, *limit; + FILE_BUF *op; +{ + int value; + FILE_BUF *ip = &instack[indepth]; + + if (if_stack == instack[indepth].if_stack) { + error ("#elif not within a conditional"); + return; + } else { + if (if_stack->type != T_IF && if_stack->type != T_ELIF) { + error ("#elif after #else"); + fprintf (stderr, " (matches line %d", if_stack->lineno); + if (if_stack->fname != NULL && ip->fname != NULL && + strcmp (if_stack->fname, ip->fname) != 0) + fprintf (stderr, ", file %s", if_stack->fname); + fprintf (stderr, ")\n"); + } + if_stack->type = T_ELIF; + } + + if (if_stack->if_succeeded) + skip_if_group (ip, 0); + else { + value = eval_if_expression (buf, limit - buf); + if (value == 0) + skip_if_group (ip, 0); + else { + ++if_stack->if_succeeded; /* continue processing input */ + output_line_command (ip, op, 1, same_file); + } + } +} + +/* + * evaluate a #if expression in BUF, of length LENGTH, + * then parse the result as a C expression and return the value as an int. + */ +static int +eval_if_expression (buf, length) + const U_CHAR *buf; + int length; +{ + FILE_BUF temp_obuf; + HASHNODE *save_defined; + int value; + + save_defined = install (U"defined", -1, T_SPEC_DEFINED, -1); + temp_obuf = expand_to_temp_buffer (buf, buf + length, 0); + delete_macro (save_defined); /* clean up special symbol */ + + value = parse_c_expression ((const char *)temp_obuf.buf); + + free (temp_obuf.buf); + + return value; +} + +/* + * routine to handle ifdef/ifndef. Try to look up the symbol, + * then do or don't skip to the #endif/#else/#elif depending + * on what directive is actually being processed. + */ +static void +do_xifdef (buf, limit, type) + U_CHAR *buf, *limit; + enum node_type type; +{ + int skip; + FILE_BUF *ip = &instack[indepth]; + U_CHAR *end; + + /* Discard leading and trailing whitespace. */ + SKIP_WHITE_SPACE (buf); + while (limit != buf && is_nvspace (limit[-1])) limit--; + + /* Find the end of the identifier at the beginning. */ + for (end = buf; is_idchar (*end); end++); + + if (end == buf) + skip = (type == T_IFDEF); + else + skip = (lookup (buf, end-buf, -1) == NULL) ^ (type == T_IFNDEF); + + conditional_skip (ip, skip, T_IF); +} + +static void +do_ifdef (buf, limit, op) + U_CHAR *buf, *limit; + FILE_BUF *op ATTRIBUTE_UNUSED; +{ + do_xifdef (buf, limit, T_IFDEF); +} + +static void +do_ifndef (buf, limit, op) + U_CHAR *buf, *limit; + FILE_BUF *op ATTRIBUTE_UNUSED; +{ + do_xifdef (buf, limit, T_IFNDEF); +} + +/* + * push TYPE on stack; then, if SKIP is nonzero, skip ahead. + */ +static void +conditional_skip (ip, skip, type) + FILE_BUF *ip; + int skip; + enum node_type type; +{ + IF_STACK_FRAME *temp; + + temp = (IF_STACK_FRAME *) xcalloc (1, sizeof (IF_STACK_FRAME)); + temp->fname = ip->fname; + temp->lineno = ip->lineno; + temp->next = if_stack; + if_stack = temp; + + if_stack->type = type; + + if (skip != 0) { + skip_if_group (ip, 0); + return; + } else { + ++if_stack->if_succeeded; + output_line_command (ip, &outbuf, 1, same_file); + } +} + +/* + * skip to #endif, #else, or #elif. adjust line numbers, etc. + * leaves input ptr at the sharp sign found. + * If ANY is nonzero, return at next directive of any sort. + */ +static void +skip_if_group (ip, any) + FILE_BUF *ip; + int any; +{ + U_CHAR *bp = ip->bufp, *cp; + U_CHAR *endb = ip->buf + ip->length; + const struct directive *kt; + IF_STACK_FRAME *save_if_stack = if_stack; /* don't pop past here */ + U_CHAR *beg_of_line = bp; + + while (bp < endb) { + switch (*bp++) { + case '/': /* possible comment */ + if (*bp == '\\' && bp[1] == '\n') + newline_fix (bp); + if (*bp == '*') { + ip->bufp = ++bp; + bp = skip_to_end_of_comment (ip, &ip->lineno); + } + break; + case '\"': + case '\'': + bp = skip_quoted_string (bp - 1, endb, ip->lineno, &ip->lineno, 0, 0); + break; + case '\\': + /* Char after backslash loses its special meaning. */ + if (bp < endb) { + if (*bp == '\n') + ++ip->lineno; /* But do update the line-count. */ + bp++; + } + break; + case '\n': + ++ip->lineno; + beg_of_line = bp; + break; + case '#': + ip->bufp = bp - 1; + + /* # keyword: a # must be first nonblank char on the line */ + if (beg_of_line == 0) + break; + /* Scan from start of line, skipping whitespace, comments + and backslash-newlines, and see if we reach this #. + If not, this # is not special. */ + bp = beg_of_line; + while (1) { + if (is_nvspace (*bp)) + bp++; + else if (*bp == '\\' && bp[1] == '\n') + bp += 2; + else if (*bp == '/' && bp[1] == '*') { + bp += 2; + while (!(*bp == '*' && bp[1] == '/')) { + if (*bp == '\n') + ip->lineno++; + bp++; + } + bp += 2; + } + else break; + } + if (bp != ip->bufp) { + bp = ip->bufp + 1; /* Reset bp to after the #. */ + break; + } + + bp = ip->bufp + 1; /* Point after '#'. */ + + /* Skip whitespace and \-newline. */ + while (1) { + if (is_nvspace (*bp)) + bp++; + else if (*bp == '\\' && bp[1] == '\n') + bp += 2; + else if (*bp == '/' && bp[1] == '*') { + bp += 2; + while (!(*bp == '*' && bp[1] == '/')) + bp++; + bp += 2; + } + else break; + } + + cp = bp; + + /* Now find end of directive name. + If we encounter a backslash-newline, exchange it with any following + symbol-constituents so that we end up with a contiguous name. */ + + while (1) { + if (is_idchar (*bp)) + bp++; + else { + if (*bp == '\\' && bp[1] == '\n') + name_newline_fix (bp); + if (is_idchar (*bp)) + bp++; + else break; + } + } + + for (kt = directive_table; kt->length >= 0; kt++) { + IF_STACK_FRAME *temp; + if (strncmp ((const char *)cp, kt->name, kt->length) == 0 + && !is_idchar (cp[kt->length])) { + + /* If we are asked to return on next directive, + do so now. */ + if (any) + return; + + switch (kt->type) { + case T_IF: + case T_IFDEF: + case T_IFNDEF: + temp = (IF_STACK_FRAME *) xcalloc (1, sizeof (IF_STACK_FRAME)); + temp->next = if_stack; + if_stack = temp; + temp->lineno = ip->lineno; + temp->fname = ip->fname; + temp->type = kt->type; + break; + case T_ELSE: + case T_ENDIF: + case T_ELIF: + if (if_stack == instack[indepth].if_stack) { + error ("#%s not within a conditional", kt->name); + break; + } + else if (if_stack == save_if_stack) + return; /* found what we came for */ + + if (kt->type != T_ENDIF) { + if (if_stack->type == T_ELSE) + error ("#else or #elif after #else"); + if_stack->type = kt->type; + break; + } + + temp = if_stack; + if_stack = if_stack->next; + free (temp); + break; + + default: + /* Anything else is ignored. */ + break; + } + break; + } + } + } + } + ip->bufp = bp; + /* after this returns, rescan will exit because ip->bufp + now points to the end of the buffer. + rescan is responsible for the error message also. */ +} + +/* + * handle a #else directive. Do this by just continuing processing + * without changing if_stack ; this is so that the error message + * for missing #endif's etc. will point to the original #if. It + * is possible that something different would be better. + */ +static void +do_else (buf, limit, op) + U_CHAR *buf ATTRIBUTE_UNUSED; + U_CHAR *limit ATTRIBUTE_UNUSED; + FILE_BUF *op; +{ + FILE_BUF *ip = &instack[indepth]; + + if (if_stack == instack[indepth].if_stack) { + error ("#else not within a conditional"); + return; + } else { + if (if_stack->type != T_IF && if_stack->type != T_ELIF) { + error ("#else after #else"); + fprintf (stderr, " (matches line %d", if_stack->lineno); + if (strcmp (if_stack->fname, ip->fname) != 0) + fprintf (stderr, ", file %s", if_stack->fname); + fprintf (stderr, ")\n"); + } + if_stack->type = T_ELSE; + } + + if (if_stack->if_succeeded) + skip_if_group (ip, 0); + else { + ++if_stack->if_succeeded; /* continue processing input */ + output_line_command (ip, op, 1, same_file); + } +} + +/* + * unstack after #endif command + */ +static void +do_endif (buf, limit, op) + U_CHAR *buf ATTRIBUTE_UNUSED; + U_CHAR *limit ATTRIBUTE_UNUSED; + FILE_BUF *op; +{ + if (if_stack == instack[indepth].if_stack) + error ("unbalanced #endif"); + else { + IF_STACK_FRAME *temp = if_stack; + if_stack = if_stack->next; + free (temp); + output_line_command (&instack[indepth], op, 1, same_file); + } +} + +/* + * Skip a comment, assuming the input ptr immediately follows the + * initial slash-star. Bump line counter as necessary. + * (The canonical line counter is &ip->lineno). + * Don't use this routine (or the next one) if bumping the line + * counter is not sufficient to deal with newlines in the string. + */ +static U_CHAR * +skip_to_end_of_comment (ip, line_counter) + FILE_BUF *ip; + int *line_counter; /* place to remember newlines, or NULL */ +{ + U_CHAR *limit = ip->buf + ip->length; + U_CHAR *bp = ip->bufp; + FILE_BUF *op = &outbuf; /* JF */ + int output = put_out_comments && !line_counter; + + /* JF this line_counter stuff is a crock to make sure the + comment is only put out once, no matter how many times + the comment is skipped. It almost works */ + if (output) { + *op->bufp++ = '/'; + *op->bufp++ = '*'; + } + while (bp < limit) { + if (output) + *op->bufp++ = *bp; + switch (*bp++) { + case '/': + if (warn_comments && bp < limit && *bp == '*') + warning("`/*' within comment"); + break; + case '\n': + if (line_counter != NULL) + ++*line_counter; + if (output) + ++op->lineno; + break; + case '*': + if (*bp == '\\' && bp[1] == '\n') + newline_fix (bp); + if (*bp == '/') { + if (output) + *op->bufp++ = '/'; + ip->bufp = ++bp; + return bp; + } + break; + } + } + ip->bufp = bp; + return bp; +} + +/* + * Skip over a quoted string. BP points to the opening quote. + * Returns a pointer after the closing quote. Don't go past LIMIT. + * START_LINE is the line number of the starting point (but it need + * not be valid if the starting point is inside a macro expansion). + * + * The input stack state is not changed. + * + * If COUNT_NEWLINES is nonzero, it points to an int to increment + * for each newline passed. + * + * If BACKSLASH_NEWLINES_P is nonzero, store 1 thru it + * if we pass a backslash-newline. + * + * If EOFP is nonzero, set *EOFP to 1 if the string is unterminated. + */ +static U_CHAR * +skip_quoted_string (bp, limit, start_line, count_newlines, backslash_newlines_p, eofp) + const U_CHAR *bp; + const U_CHAR *limit; + int start_line; + int *count_newlines; + int *backslash_newlines_p; + int *eofp; +{ + U_CHAR c, match; + + match = *bp++; + while (1) { + if (bp >= limit) { + error_with_line (line_for_error (start_line), + "unterminated string or character constant"); + if (eofp) + *eofp = 1; + break; + } + c = *bp++; + if (c == '\\') { + while (*bp == '\\' && bp[1] == '\n') { + if (backslash_newlines_p) + *backslash_newlines_p = 1; + if (count_newlines) + ++*count_newlines; + bp += 2; + } + if (*bp == '\n' && count_newlines) { + if (backslash_newlines_p) + *backslash_newlines_p = 1; + ++*count_newlines; + } + bp++; + } else if (c == '\n') { + /* Unterminated strings and character constants are 'legal'. */ + bp--; /* Don't consume the newline. */ + if (eofp) + *eofp = 1; + break; + } else if (c == match) + break; + } + return (U_CHAR *) bp; +} + +/* + * write out a #line command, for instance, after an #include file. + * If CONDITIONAL is nonzero, we can omit the #line if it would + * appear to be a no-op, and we can output a few newlines instead + * if we want to increase the line number by a small amount. + * FILE_CHANGE says whether we are entering a file, leaving, or neither. + */ + +static void +output_line_command (ip, op, conditional, file_change) + FILE_BUF *ip, *op; + int conditional; + enum file_change_code file_change; +{ + int len; + char line_cmd_buf[500]; + + if (no_line_commands + || ip->fname == NULL + || no_output) { + op->lineno = ip->lineno; + return; + } + + if (conditional) { + if (ip->lineno == op->lineno) + return; + + /* If the inherited line number is a little too small, + output some newlines instead of a #line command. */ + if (ip->lineno > op->lineno && ip->lineno < op->lineno + 8) { + check_expand (op, 10); + while (ip->lineno > op->lineno) { + *op->bufp++ = '\n'; + op->lineno++; + } + return; + } + } + +#if 1 /* Nick temporary */ + len = 0; +#else +#if 1 /* Nick temporary */ + sprintf (line_cmd_buf, "/* # %d \"%s\"", ip->lineno, ip->fname); +#else + sprintf (line_cmd_buf, "# %d \"%s\"", ip->lineno, ip->fname); +#endif + if (file_change != same_file) + strcat (line_cmd_buf, file_change == enter_file ? " 1" : " 2"); + if (system_include_depth > 0) + strcat (line_cmd_buf, " 3"); +#if 1 /* Nick temporary */ + strcat(line_cmd_buf, " */"); +#endif + len = strlen (line_cmd_buf); + line_cmd_buf[len++] = '\n'; +#endif + check_expand (op, len + 1); + if (op->bufp > op->buf && op->bufp[-1] != '\n') + *op->bufp++ = '\n'; + memcpy (op->bufp, line_cmd_buf, len); + op->bufp += len; + op->lineno = ip->lineno; +} + + +/* Expand a macro call. + HP points to the symbol that is the macro being called. + Put the result of expansion onto the input stack + so that subsequent input by our caller will use it. + + If macro wants arguments, caller has already verified that + an argument list follows; arguments come from the input stack. */ + +static void +macroexpand (hp, op) + HASHNODE *hp; + FILE_BUF *op; +{ + int nargs; + DEFINITION *defn = hp->value.defn; + U_CHAR *xbuf; + int xbuf_len; + int start_line = instack[indepth].lineno; + + CHECK_DEPTH (return;); + + /* it might not actually be a macro. */ + if (hp->type != T_MACRO) { + special_symbol (hp, op); + return; + } + + nargs = defn->nargs; + + if (nargs >= 0) { + int i; + struct argdata *args; + const char *parse_error = 0; + + args = (struct argdata *) alloca ((nargs + 1) * sizeof (struct argdata)); + + for (i = 0; i < nargs; i++) { + args[i].raw = args[i].expanded = (U_CHAR *) ""; + args[i].raw_length = args[i].expand_length + = args[i].stringified_length = 0; + args[i].free1 = args[i].free2 = 0; + } + + /* Parse all the macro args that are supplied. I counts them. + The first NARGS args are stored in ARGS. + The rest are discarded. */ + i = 0; + do { + /* Discard the open-parenthesis or comma before the next arg. */ + ++instack[indepth].bufp; + parse_error + = macarg ((i < nargs || (nargs == 0 && i == 0)) ? &args[i] : 0); + if (parse_error) + { + error_with_line (line_for_error (start_line), "%s", parse_error); + break; + } + i++; + } while (*instack[indepth].bufp != ')'); + + /* If we got one arg but it was just whitespace, call that 0 args. */ + if (i == 1) { + const U_CHAR *bp = args[0].raw; + const U_CHAR *lim = bp + args[0].raw_length; + while (bp != lim && is_space (*bp)) bp++; + if (bp == lim) + i = 0; + } + + if (nargs == 0 && i > 0) + error ("arguments given to macro `%s'", hp->name); + else if (i < nargs) { + /* traditional C allows foo() if foo wants one argument. */ + if (nargs == 1 && i == 0) + ; + else if (i == 0) + error ("no args to macro `%s'", hp->name); + else if (i == 1) + error ("only 1 arg to macro `%s'", hp->name); + else + error ("only %d args to macro `%s'", i, hp->name); + } else if (i > nargs) + error ("too many (%d) args to macro `%s'", i, hp->name); + + /* Swallow the closeparen. */ + ++instack[indepth].bufp; + + /* If macro wants zero args, we parsed the arglist for checking only. + Read directly from the macro definition. */ + if (nargs == 0) { + xbuf = defn->expansion; + xbuf_len = defn->length; + } else { + U_CHAR *exp = defn->expansion; + int offset; /* offset in expansion, + copied a piece at a time */ + int totlen; /* total amount of exp buffer filled so far */ + + struct reflist *ap; + + /* Macro really takes args. Compute the expansion of this call. */ + + /* Compute length in characters of the macro's expansion. */ + xbuf_len = defn->length; + for (ap = defn->pattern; ap != NULL; ap = ap->next) { + if (ap->stringify) + xbuf_len += args[ap->argno].stringified_length; + else + xbuf_len += args[ap->argno].raw_length; + } + + xbuf = (U_CHAR *) xmalloc (xbuf_len + 1); + + /* Generate in XBUF the complete expansion + with arguments substituted in. + TOTLEN is the total size generated so far. + OFFSET is the index in the definition + of where we are copying from. */ + offset = totlen = 0; + for (ap = defn->pattern; ap != NULL; ap = ap->next) { + struct argdata *arg = &args[ap->argno]; + + for (i = 0; i < ap->nchars; i++) + xbuf[totlen++] = exp[offset++]; + + if (ap->stringify != 0) { + int arglen = arg->raw_length; + int escaped = 0; + int in_string = 0; + int c; + i = 0; + while (i < arglen + && (c = arg->raw[i], is_space (c))) + i++; + while (i < arglen + && (c = arg->raw[arglen - 1], is_space (c))) + arglen--; + for (; i < arglen; i++) { + c = arg->raw[i]; + + /* Special markers Newline Space + generate nothing for a stringified argument. */ + if (c == '\n' && arg->raw[i+1] != '\n') { + i++; + continue; + } + + /* Internal sequences of whitespace are replaced by one space + except within an string or char token. */ + if (! in_string + && (c == '\n' ? arg->raw[i+1] == '\n' : is_space (c))) { + while (1) { + /* Note that Newline Space does occur within whitespace + sequences; consider it part of the sequence. */ + if (c == '\n' && is_space (arg->raw[i+1])) + i += 2; + else if (c != '\n' && is_space (c)) + i++; + else break; + c = arg->raw[i]; + } + i--; + c = ' '; + } + + if (escaped) + escaped = 0; + else { + if (c == '\\') + escaped = 1; + if (in_string) { + if (c == in_string) + in_string = 0; + } else if (c == '\"' || c == '\'') + in_string = c; + } + + /* Escape these chars */ + if (c == '\"' || (in_string && c == '\\')) + xbuf[totlen++] = '\\'; + if (ISPRINT (c)) + xbuf[totlen++] = c; + else { + sprintf ((char *) &xbuf[totlen], "\\%03o", (unsigned int) c); + totlen += 4; + } + } + } else { + const U_CHAR *p1 = arg->raw; + const U_CHAR *l1 = p1 + arg->raw_length; + + if (ap->raw_before) { + while (p1 != l1 && is_space (*p1)) p1++; + while (p1 != l1 && is_idchar (*p1)) + xbuf[totlen++] = *p1++; + /* Delete any no-reexpansion marker that follows + an identifier at the beginning of the argument + if the argument is concatenated with what precedes it. */ + if (p1[0] == '\n' && p1[1] == '-') + p1 += 2; + } + if (ap->raw_after) { + /* Arg is concatenated after: delete trailing whitespace, + whitespace markers, and no-reexpansion markers. */ + while (p1 != l1) { + if (is_space (l1[-1])) l1--; + else if (l1[-1] == '-') { + const U_CHAR *p2 = l1 - 1; + /* If a `-' is preceded by an odd number of newlines then it + and the last newline are a no-reexpansion marker. */ + while (p2 != p1 && p2[-1] == '\n') p2--; + if ((l1 - 1 - p2) & 1) { + l1 -= 2; + } + else break; + } + else break; + } + } + memmove (xbuf + totlen, p1, l1 - p1); + totlen += l1 - p1; + } + + if (totlen > xbuf_len) + abort (); + } + + /* if there is anything left of the definition + after handling the arg list, copy that in too. */ + + for (i = offset; i < defn->length; i++) + xbuf[totlen++] = exp[i]; + + xbuf[totlen] = 0; + xbuf_len = totlen; + + for (i = 0; i < nargs; i++) { + if (args[i].free1 != 0) + free (args[i].free1); + if (args[i].free2 != 0) + free (args[i].free2); + } + } + } else { + xbuf = defn->expansion; + xbuf_len = defn->length; + } + + /* Now put the expansion on the input stack + so our caller will commence reading from it. */ + { + FILE_BUF *ip2; +#if 0 /* Nick */ + fflush(stdout); + fprintf(stderr, "pushing \"%s\"\n", xbuf); + fflush(stderr); +#endif + + ip2 = &instack[++indepth]; + + ip2->fname = 0; + ip2->lineno = 0; + ip2->buf = xbuf; + ip2->length = xbuf_len; +#if 1 /* Nick experimental */ + ip2->bufp = (xbuf[0] == '\\' && xbuf[1] == '\n') ? xbuf + 2 : xbuf; +#else + ip2->bufp = xbuf; +#endif + ip2->free_ptr = (nargs > 0) ? xbuf : 0; + ip2->macro = hp; + ip2->if_stack = if_stack; + } +} + +/* + * Parse a macro argument and store the info on it into *ARGPTR. + * Return nonzero to indicate a syntax error. + */ + +static const char * +macarg (argptr) + struct argdata *argptr; +{ + FILE_BUF *ip = &instack[indepth]; + int paren = 0; + int newlines = 0; + int comments = 0; + + /* Try to parse as much of the argument as exists at this + input stack level. */ + U_CHAR *bp = macarg1 (ip->bufp, ip->buf + ip->length, + &paren, &newlines, &comments); + + /* If we find the end of the argument at this level, + set up *ARGPTR to point at it in the input stack. */ + if (!(ip->fname != 0 && (newlines != 0 || comments != 0)) + && bp != ip->buf + ip->length) { + if (argptr != 0) { + argptr->raw = ip->bufp; + argptr->raw_length = bp - ip->bufp; + } + ip->bufp = bp; + } else { + /* This input stack level ends before the macro argument does. + We must pop levels and keep parsing. + Therefore, we must allocate a temporary buffer and copy + the macro argument into it. */ + int bufsize = bp - ip->bufp; + int extra = newlines; + U_CHAR *buffer = (U_CHAR *) xmalloc (bufsize + extra + 1); + int final_start = 0; + + memcpy (buffer, ip->bufp, bufsize); + ip->bufp = bp; + ip->lineno += newlines; + + while (bp == ip->buf + ip->length) { + if (instack[indepth].macro == 0) { + free (buffer); + return "unterminated macro call"; + } + ip->macro->type = T_MACRO; + if (ip->free_ptr) + free (ip->free_ptr); + ip = &instack[--indepth]; + newlines = 0; + comments = 0; + bp = macarg1 (ip->bufp, ip->buf + ip->length, &paren, + &newlines, &comments); + final_start = bufsize; + bufsize += bp - ip->bufp; + extra += newlines; + buffer = (U_CHAR *) xrealloc (buffer, bufsize + extra + 1); + memcpy (buffer + bufsize - (bp - ip->bufp), ip->bufp, bp - ip->bufp); + ip->bufp = bp; + ip->lineno += newlines; + } + + /* Now, if arg is actually wanted, record its raw form, + discarding comments and duplicating newlines in whatever + part of it did not come from a macro expansion. + EXTRA space has been preallocated for duplicating the newlines. + FINAL_START is the index of the start of that part. */ + if (argptr != 0) { + argptr->raw = buffer; + argptr->raw_length = bufsize; + argptr->free1 = buffer; + argptr->newlines = newlines; + argptr->comments = comments; + if ((newlines || comments) && ip->fname != 0) + argptr->raw_length + = final_start + + discard_comments (argptr->raw + final_start, + argptr->raw_length - final_start, + newlines); + argptr->raw[argptr->raw_length] = 0; + if (argptr->raw_length > bufsize + extra) + abort (); + } + } + + /* If we are not discarding this argument, + macroexpand it and compute its length as stringified. + All this info goes into *ARGPTR. */ + + if (argptr != 0) { + FILE_BUF obuf; + const U_CHAR *buf, *lim; + int totlen; + + obuf = expand_to_temp_buffer (argptr->raw, + argptr->raw + argptr->raw_length, + 1); + + argptr->expanded = obuf.buf; + argptr->expand_length = obuf.length; + argptr->free2 = obuf.buf; + + buf = argptr->raw; + lim = buf + argptr->raw_length; + + totlen = 0; + while (buf != lim) { + U_CHAR c = *buf++; + totlen++; + /* Internal sequences of whitespace are replaced by one space + in most cases, but not always. So count all the whitespace + in case we need to keep it all. */ + if (c == '\"' || c == '\\') /* escape these chars */ + totlen++; + else if (!ISPRINT (c)) + totlen += 3; + } + argptr->stringified_length = totlen; + } + return 0; +} + +/* Scan text from START (inclusive) up to LIMIT (exclusive), + counting parens in *DEPTHPTR, + and return if reach LIMIT + or before a `)' that would make *DEPTHPTR negative + or before a comma when *DEPTHPTR is zero. + Single and double quotes are matched and termination + is inhibited within them. Comments also inhibit it. + Value returned is pointer to stopping place. + + Increment *NEWLINES each time a newline is passed. + Set *COMMENTS to 1 if a comment is seen. */ + +static U_CHAR * +macarg1 (start, limit, depthptr, newlines, comments) + U_CHAR *start; + const U_CHAR *limit; + int *depthptr, *newlines, *comments; +{ + U_CHAR *bp = start; + + while (bp < limit) { + switch (*bp) { + case '(': + (*depthptr)++; + break; + case ')': + if (--(*depthptr) < 0) + return bp; + break; + case '\\': + /* Traditionally, backslash makes following char not special. */ + if (bp + 1 < limit) + { + bp++; + /* But count source lines anyway. */ + if (*bp == '\n') + ++*newlines; + } + break; + case '\n': + ++*newlines; + break; + case '/': + if (bp[1] == '\\' && bp[2] == '\n') + newline_fix (bp + 1); + if (bp[1] != '*' || bp + 1 >= limit) + break; + *comments = 1; + bp += 2; + while (bp + 1 < limit) { + if (bp[0] == '*' + && bp[1] == '\\' && bp[2] == '\n') + newline_fix (bp + 1); + if (bp[0] == '*' && bp[1] == '/') + break; + if (*bp == '\n') ++*newlines; + bp++; + } + bp += 1; + break; + case '\'': + case '\"': + { + int quotec; + for (quotec = *bp++; bp + 1 < limit && *bp != quotec; bp++) { + if (*bp == '\\') { + bp++; + if (*bp == '\n') + ++*newlines; + while (*bp == '\\' && bp[1] == '\n') { + bp += 2; + } + } else if (*bp == '\n') { + ++*newlines; + if (quotec == '\'') + break; + } + } + } + break; + case ',': + if ((*depthptr) == 0) + return bp; + break; + } + bp++; + } + + return bp; +} + +/* Discard comments and duplicate newlines + in the string of length LENGTH at START, + except inside of string constants. + The string is copied into itself with its beginning staying fixed. + + NEWLINES is the number of newlines that must be duplicated. + We assume that that much extra space is available past the end + of the string. */ + +static int +discard_comments (start, length, newlines) + U_CHAR *start; + int length; + int newlines; +{ + U_CHAR *ibp; + U_CHAR *obp; + const U_CHAR *limit; + int c; + + /* If we have newlines to duplicate, copy everything + that many characters up. Then, in the second part, + we will have room to insert the newlines + while copying down. + NEWLINES may actually be too large, because it counts + newlines in string constants, and we don't duplicate those. + But that does no harm. */ + if (newlines > 0) { + ibp = start + length; + obp = ibp + newlines; + limit = start; + while (limit != ibp) + *--obp = *--ibp; + } + + ibp = start + newlines; + limit = start + length + newlines; + obp = start; + + while (ibp < limit) { + *obp++ = c = *ibp++; + switch (c) { + case '\n': + /* Duplicate the newline. */ + *obp++ = '\n'; + break; + + case '\\': + if (*ibp == '\n') { + obp--; + ibp++; + } + break; + + case '/': + if (*ibp == '\\' && ibp[1] == '\n') + newline_fix (ibp); + /* Delete any comment. */ + if (ibp[0] != '*' || ibp + 1 >= limit) + break; + obp--; + ibp++; + while (ibp + 1 < limit) { + if (ibp[0] == '*' + && ibp[1] == '\\' && ibp[2] == '\n') + newline_fix (ibp + 1); + if (ibp[0] == '*' && ibp[1] == '/') + break; + ibp++; + } + ibp += 2; + break; + + case '\'': + case '\"': + /* Notice and skip strings, so that we don't + think that comments start inside them, + and so we don't duplicate newlines in them. */ + { + int quotec = c; + while (ibp < limit) { + *obp++ = c = *ibp++; + if (c == quotec) + break; + if (c == '\n' && quotec == '\'') + break; + if (c == '\\' && ibp < limit) { + while (*ibp == '\\' && ibp[1] == '\n') + ibp += 2; + *obp++ = *ibp++; + } + } + } + break; + } + } + + return obp - start; +} + + +/* Core error handling routine. */ +static void +v_message (mtype, line, msgid, ap) + enum msgtype mtype; + int line; + const char *msgid; + va_list ap; +{ + const char *fname = 0; + int i; + + if (mtype == MT_WARNING && inhibit_warnings) + return; + + for (i = indepth; i >= 0; i--) + if (instack[i].fname != NULL) { + if (line == 0) + line = instack[i].lineno; + fname = instack[i].fname; + break; + } + + if (fname) + fprintf (stderr, "%s:%d: ", fname, line); + else + fprintf (stderr, "%s: ", progname); + + if (mtype == MT_WARNING) + fputs (_("warning: "), stderr); + + vfprintf (stderr, _(msgid), ap); + putc ('\n', stderr); + + if (mtype == MT_ERROR) + errors++; +} + +/* + * error - print error message and increment count of errors. + */ +void +error VPARAMS ((const char *msgid, ...)) +{ + VA_OPEN(ap, msgid); + VA_FIXEDARG (ap, const char *, msgid); + + v_message (MT_ERROR, 0, msgid, ap); + VA_CLOSE (ap); +} + +void +error_with_line VPARAMS ((int line, const char *msgid, ...)) +{ + VA_OPEN(ap, msgid); + VA_FIXEDARG (ap, int, line); + VA_FIXEDARG (ap, const char *, msgid); + + v_message (MT_ERROR, line, msgid, ap); + VA_CLOSE (ap); +} + +/* Error including a message from `errno'. */ +void +error_from_errno (name) + const char *name; +{ + error ("%s: %s", name, strerror (errno)); +} + +/* Print error message but don't count it. */ +void +warning VPARAMS ((const char *msgid, ...)) +{ + VA_OPEN(ap, msgid); + VA_FIXEDARG (ap, const char *, msgid); + + v_message (MT_WARNING, 0, msgid, ap); + VA_CLOSE (ap); +} + +void +fatal VPARAMS ((const char *msgid, ...)) +{ + VA_OPEN(ap, msgid); + VA_FIXEDARG (ap, const char *, msgid); + + v_message (MT_FATAL, 0, msgid, ap); + VA_CLOSE (ap); + exit (FATAL_EXIT_CODE); +} + +/* More 'friendly' abort that prints the location at which we died. */ +void +fancy_abort (line, func) + int line; + const char *func; +{ + fatal ("internal error in %s, at tradcpp.c:%d\n\ +Please submit a full bug report.\n\ +See %s for instructions.", func, line, GCCBUGURL); +} + +void +perror_with_name (name) + const char *name; +{ + fprintf (stderr, "%s: %s: %s\n", progname, name, strerror (errno)); + errors++; +} + +void +pfatal_with_name (name) + const char *name; +{ + perror_with_name (name); + exit (FATAL_EXIT_CODE); +} + +/* Return the line at which an error occurred. + The error is not necessarily associated with the current spot + in the input stack, so LINE says where. LINE will have been + copied from ip->lineno for the current input level. + If the current level is for a file, we return LINE. + But if the current level is not for a file, LINE is meaningless. + In that case, we return the lineno of the innermost file. */ +static int +line_for_error (line) + int line; +{ + int i; + int line1 = line; + + for (i = indepth; i >= 0; ) { + if (instack[i].fname != 0) + return line1; + i--; + if (i < 0) + return 0; + line1 = instack[i].lineno; + } + return 0; +} + +/* + * If OBUF doesn't have NEEDED bytes after OPTR, make it bigger. + * + * As things stand, nothing is ever placed in the output buffer to be + * removed again except when it's KNOWN to be part of an identifier, + * so flushing and moving down everything left, instead of expanding, + * should work ok. + */ + +static void +grow_outbuf (obuf, needed) + FILE_BUF *obuf; + int needed; +{ + U_CHAR *p; + int minsize; + + if (obuf->length - (obuf->bufp - obuf->buf) > needed) + return; + + /* Make it at least twice as big as it is now. */ + obuf->length *= 2; + /* Make it have at least 150% of the free space we will need. */ + minsize = (3 * needed) / 2 + (obuf->bufp - obuf->buf); + if (minsize > obuf->length) + obuf->length = minsize; + + p = (U_CHAR *) xrealloc (obuf->buf, obuf->length); + obuf->bufp = p + (obuf->bufp - obuf->buf); + obuf->buf = p; +} + +/* Symbol table for macro names and special symbols */ + +/* + * install a name in the main hash table, even if it is already there. + * name stops with first non alphanumeric, except leading '#'. + * caller must check against redefinition if that is desired. + * delete_macro () removes things installed by install () in fifo order. + * this is important because of the `defined' special symbol used + * in #if, and also if pushdef/popdef directives are ever implemented. + * + * If LEN is >= 0, it is the length of the name. + * Otherwise, compute the length by scanning the entire name. + * + * If HASH is >= 0, it is the precomputed hash code. + * Otherwise, compute the hash code. + * + * caller must set the value, if any is desired. + */ +static HASHNODE * +install (name, len, type, hash) + const U_CHAR *name; + int len; + enum node_type type; + int hash; + /* watch out here if sizeof (U_CHAR *) != sizeof (int) */ +{ + HASHNODE *hp; + int bucket; + const U_CHAR *p; + U_CHAR *q; + + if (len < 0) { + p = name; + while (is_idchar (*p)) + p++; + len = p - name; + } + + if (hash < 0) + hash = hashf (name, len, HASHSIZE); + + hp = (HASHNODE *) xmalloc (sizeof (HASHNODE) + len + 1); + bucket = hash; + hp->bucket_hdr = &hashtab[bucket]; + hp->next = hashtab[bucket]; + hashtab[bucket] = hp; + hp->prev = NULL; + if (hp->next != NULL) + hp->next->prev = hp; + hp->type = type; + hp->length = len; + hp->name = q = ((U_CHAR *) hp) + sizeof (HASHNODE); + memcpy (q, name, len); + q[len] = 0; + return hp; +} + +/* + * find the most recent hash node for name name (ending with first + * non-identifier char) installed by install + * + * If LEN is >= 0, it is the length of the name. + * Otherwise, compute the length by scanning the entire name. + * + * If HASH is >= 0, it is the precomputed hash code. + * Otherwise, compute the hash code. + */ +HASHNODE * +lookup (name, len, hash) + const U_CHAR *name; + int len; + int hash; +{ + const U_CHAR *bp; + HASHNODE *bucket; + + if (len < 0) { + for (bp = name; is_idchar (*bp); bp++) ; + len = bp - name; + } + + if (hash < 0) + hash = hashf (name, len, HASHSIZE); + + bucket = hashtab[hash]; + while (bucket) { + if (bucket->length == len + && strncmp ((const char *)bucket->name, (const char *)name, len) == 0) + return bucket; + bucket = bucket->next; + } + return NULL; +} + +/* + * Delete a hash node. Some weirdness to free junk from macros. + * More such weirdness will have to be added if you define more hash + * types that need it. + */ + +/* Note that the DEFINITION of a macro is removed from the hash table + but its storage is not freed. This would be a storage leak + except that it is not reasonable to keep undefining and redefining + large numbers of macros many times. + In any case, this is necessary, because a macro can be #undef'd + in the middle of reading the arguments to a call to it. + If #undef freed the DEFINITION, that would crash. */ +static void +delete_macro (hp) + HASHNODE *hp; +{ + + if (hp->prev != NULL) + hp->prev->next = hp->next; + if (hp->next != NULL) + hp->next->prev = hp->prev; + + /* make sure that the bucket chain header that + the deleted guy was on points to the right thing afterwards. */ + if (hp == *hp->bucket_hdr) + *hp->bucket_hdr = hp->next; + + free (hp); +} + +/* + * return hash function on name. must be compatible with the one + * computed a step at a time, elsewhere + */ +static int +hashf (name, len, hashsize) + const U_CHAR *name; + int len; + int hashsize; +{ + int r = 0; + + while (len--) + r = HASHSTEP (r, *name++); + + return MAKE_POS (r) % hashsize; +} + +/* Dump all macro definitions as #defines to stdout. */ + +static void +dump_all_macros () +{ + int bucket; + + for (bucket = 0; bucket < HASHSIZE; bucket++) { + HASHNODE *hp; + + for (hp = hashtab[bucket]; hp; hp= hp->next) { + if (hp->type == T_MACRO) { + DEFINITION *defn = hp->value.defn; + struct reflist *ap; + int offset; + int concat; + + + /* Print the definition of the macro HP. */ + + printf ("#define %s", hp->name); + if (defn->nargs >= 0) { + int i; + + printf ("("); + for (i = 0; i < defn->nargs; i++) { + dump_arg_n (defn, i); + if (i + 1 < defn->nargs) + printf (", "); + } + printf (")"); + } + + printf (" "); + + offset = 0; + concat = 0; + for (ap = defn->pattern; ap != NULL; ap = ap->next) { + dump_defn_1 (defn->expansion, offset, ap->nchars); + if (ap->nchars != 0) + concat = 0; + offset += ap->nchars; + if (ap->stringify) + printf (" #"); + if (ap->raw_before && !concat) + printf (" ## "); + concat = 0; + dump_arg_n (defn, ap->argno); + if (ap->raw_after) { + printf (" ## "); + concat = 1; + } + } + dump_defn_1 (defn->expansion, offset, defn->length - offset); + printf ("\n"); + } + } + } +} + +/* Output to stdout a substring of a macro definition. + BASE is the beginning of the definition. + Output characters START thru LENGTH. + Discard newlines outside of strings, thus + converting funny-space markers to ordinary spaces. */ +static void +dump_defn_1 (base, start, length) + const U_CHAR *base; + int start; + int length; +{ + const U_CHAR *p = base + start; + const U_CHAR *limit = base + start + length; + + while (p < limit) { + if (*p != '\n') + putchar (*p); + else if (*p == '\"' || *p =='\'') { + const U_CHAR *p1 = skip_quoted_string (p, limit, 0, 0, 0, 0); + fwrite (p, p1 - p, 1, stdout); + p = p1 - 1; + } + p++; + } +} + +/* Print the name of argument number ARGNUM of macro definition DEFN. + Recall that DEFN->argnames contains all the arg names + concatenated in reverse order with comma-space in between. */ +static void +dump_arg_n (defn, argnum) + DEFINITION *defn; + int argnum; +{ + const U_CHAR *p = defn->argnames; + while (argnum + 1 < defn->nargs) { + p = (const U_CHAR *) strchr ((const char *)p, ' ') + 1; + argnum++; + } + + while (*p && *p != ',') { + putchar (*p); + p++; + } +} + +/* Initialize the built-in macros. */ +#define DSC(x) U x, sizeof x - 1 +#define install_spec(name, type) \ + install(DSC(name), type, -1); +#define install_value(name, val) \ + hp = install(DSC(name), T_CONST, -1); hp->value.cpval = val; +static void +initialize_builtins () +{ + HASHNODE *hp; + + install_spec ("__BASE_FILE__", T_BASE_FILE); + install_spec ("__DATE__", T_DATE); + install_spec ("__FILE__", T_FILE); + install_spec ("__TIME__", T_TIME); + install_spec ("__VERSION__", T_VERSION); + install_spec ("__INCLUDE_LEVEL__", T_INCLUDE_LEVEL); + install_spec ("__LINE__", T_SPECLINE); + +#ifndef NO_BUILTIN_SIZE_TYPE + install_value ("__SIZE_TYPE__", SIZE_TYPE); +#endif +#ifndef NO_BUILTIN_PTRDIFF_TYPE + install_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE); +#endif +#ifndef NO_BUILTIN_WCHAR_TYPE + install_value ("__WCHAR_TYPE__", WCHAR_TYPE); +#endif +#ifndef NO_BUILTIN_WINT_TYPE + install_value ("__WINT_TYPE__", WINT_TYPE); +#endif + install_value ("__REGISTER_PREFIX__", REGISTER_PREFIX); + install_value ("__USER_LABEL_PREFIX__", user_label_prefix); + + if (flag_signed_char == 0) + install_value ("__CHAR_UNSIGNED__", "1"); +} +#undef DSC +#undef install_spec +#undef install_value + +/* Common handler of command line directives -U, -D and -A. */ +static void +run_directive (str, len, type) + const char *str; + size_t len; + enum node_type type; +{ + const struct directive *kt; + FILE_BUF *ip = &instack[++indepth]; + ip->fname = "*command line*"; + + ip->buf = ip->bufp = (U_CHAR *) str; + ip->length = len; + ip->lineno = 1; + ip->macro = 0; + ip->free_ptr = 0; + ip->if_stack = if_stack; + + for (kt = directive_table; kt->type != type; kt++) + ; + + (*kt->func) ((U_CHAR *) str, (U_CHAR *) str + len, NULL); + --indepth; +} + +/* Handle the -D option. If STR is just an identifier, define it with + * value 1. If STR has anything after the identifier, then it should + * be identifier-space-definition. */ +static void +make_definition (str) + const char *str; +{ + char *buf, *p; + size_t count; + + /* Copy the entire option so we can modify it. + Change the first "=" in the string to a space. If there is none, + tack " 1" on the end. */ + + /* Length including the null. */ + count = strlen (str); + buf = (char *) alloca (count + 2); + memcpy (buf, str, count); + + p = strchr (str, '='); + if (p) + buf[p - str] = ' '; + else + { + buf[count++] = ' '; + buf[count++] = '1'; + } + + run_directive (buf, count, T_DEFINE); +} + +/* Handle the -U option. */ +static void +make_undef (str) + const char *str; +{ + run_directive (str, strlen (str), T_UNDEF); +} + +/* Handles the #assert (-A) and #unassert (-A-) command line options. */ +static void +make_assertion (str) + const char *str; +{ + enum node_type type = T_ASSERT; + size_t count; + const char *p; + + if (*str == '-') + { + str++; + type = T_UNASSERT; + } + + count = strlen (str); + p = strchr (str, '='); + if (p) + { + /* Copy the entire option so we can modify it. Change the first + "=" in the string to a '(', and tack a ')' on the end. */ + char *buf = (char *) alloca (count + 1); + + memcpy (buf, str, count); + buf[p - str] = '('; + buf[count++] = ')'; + str = buf; + } + + run_directive (str, count, type); +} + +/* Get the file-mode and data size of the file open on FD + and store them in *MODE_POINTER and *SIZE_POINTER. */ + +static int +file_size_and_mode (fd, mode_pointer, size_pointer) + int fd; + int *mode_pointer; + long *size_pointer; +{ + struct stat sbuf; + + if (fstat (fd, &sbuf) < 0) return -1; + if (mode_pointer) *mode_pointer = sbuf.st_mode; + if (size_pointer) *size_pointer = sbuf.st_size; + return 0; +} diff --git a/src/mkutil/tradcpp/tradcpp.exe b/src/mkutil/tradcpp/tradcpp.exe new file mode 100644 index 0000000000000000000000000000000000000000..df5d6003811c3b4a4bd7442586bec055039b8d19 GIT binary patch literal 94208 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 KLg1?*@c#gbD+Lq) literal 0 HcmV?d00001 diff --git a/src/mkutil/tradcpp/tradcpp.h b/src/mkutil/tradcpp/tradcpp.h new file mode 100644 index 00000000..f7cdf033 --- /dev/null +++ b/src/mkutil/tradcpp/tradcpp.h @@ -0,0 +1,45 @@ +/* C Compatible Compiler Preprocessor (CCCP) +Copyright (C) 1986, 1987, 1989, 2000 Free Software Foundation, Inc. + Written by Paul Rubin, June 1986 + Adapted to ANSI C, Richard Stallman, Jan 1987 + Dusted off, polished, and adapted for use as traditional + preprocessor only, Zack Weinberg, Jul 2000 + +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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef GCC_TRADCPP_H +#define GCC_TRADCPP_H + +extern void error PARAMS ((const char *msgid, ...)) ATTRIBUTE_PRINTF_1; +extern void warning PARAMS ((const char *msgid, ...)) ATTRIBUTE_PRINTF_1; +extern void fatal PARAMS ((const char *msgid, ...)) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; +extern void error_with_line PARAMS ((int, const char *msgid, ...)) ATTRIBUTE_PRINTF_2; +extern void error_from_errno PARAMS ((const char *msgid)); + +extern void perror_with_name PARAMS ((const char *msgid)); +extern void pfatal_with_name PARAMS ((const char *msgid)) ATTRIBUTE_NORETURN; +extern void fancy_abort PARAMS ((int, const char *)) ATTRIBUTE_NORETURN; + +extern struct hashnode *lookup PARAMS ((const unsigned char *, int, int)); +extern int parse_c_expression PARAMS ((const char *)); /* in tradcif.y */ +extern int test_assertion PARAMS ((unsigned char **)); +extern int flag_signed_char; + +#define is_idchar(x) ISIDNUM(x) +#define is_idstart(x) ISIDST(x) +#define is_space(x) ISSPACE(x) +#define is_nvspace(x) (IS_NVSPACE(x) && x != '\0') + +#endif /* ! GCC_TRADCPP_H */ diff --git a/src/mkutil/tradcpp/tradcpp.obj b/src/mkutil/tradcpp/tradcpp.obj new file mode 100644 index 0000000000000000000000000000000000000000..df51afb3b9aedfbd19078cdba8dab21929d42fc6 GIT binary patch literal 64722 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 C#J{Bg literal 0 HcmV?d00001 diff --git a/src/mkutil/tradcpp/version.c b/src/mkutil/tradcpp/version.c new file mode 100644 index 00000000..bbf96700 --- /dev/null +++ b/src/mkutil/tradcpp/version.c @@ -0,0 +1,4 @@ +#include "ansidecl.h" +#include "version.h" + +const char *const version_string = "3.2 20020927 (prerelease)"; diff --git a/src/mkutil/tradcpp/version.h b/src/mkutil/tradcpp/version.h new file mode 100644 index 00000000..fc486018 --- /dev/null +++ b/src/mkutil/tradcpp/version.h @@ -0,0 +1,4 @@ +#ifndef GCC_VERSION_H +#define GCC_VERSION_H +extern const char *const version_string; +#endif /* ! GCC_VERSION_H */ diff --git a/src/mkutil/tradcpp/version.obj b/src/mkutil/tradcpp/version.obj new file mode 100644 index 0000000000000000000000000000000000000000..0128b5a52127f0bd2536de2c3e7d55ed51aa6864 GIT binary patch literal 807 zcmZ`%v2N5r5FMX61eXx5Kq-O*ixi;?Q8pW&6hfK{F^GUJMB;$TQgpWWP7A)+TKiI@ zq@bjY((nfq)HM7F7_(u7=xMvaDpEhri2}6ZgU;?i@t%(at+sS$oX!0KfD45>d5tXRix8A9TcqfW{I`El~5JT zU-g%l* zre@%?jT-1nn?-jW+T3HF5T1DAJ!Y*;ODz-G&*hSN_(w1g@BYqq+Q_~4pKC?yf@g8~ zhYzqvoBR9%VCYmgjx34;its92#lP=2-~u@=j{j07^!lztLYcNniO@s4ju8n)U)_$q z`lLKu!y$oOnI|HIk`bqd)h{(ge_V&;LN>GTg&qiPvG=0wm7zIJJsZgy>ChNmhr}~& LcW}EuJq-8<)~<*+ literal 0 HcmV?d00001 diff --git a/src/mkutil/tradcpp/xexit.c b/src/mkutil/tradcpp/xexit.c new file mode 100644 index 00000000..709e5b25 --- /dev/null +++ b/src/mkutil/tradcpp/xexit.c @@ -0,0 +1,53 @@ +/* xexit.c -- Run any exit handlers, then exit. + Copyright (C) 1994, 95, 1997 Free Software Foundation, Inc. + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If not, write +to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* + +@deftypefn Replacement void xexit (int @var{code}) + +Terminates the program. If any functions have been registered with +the @code{xatexit} replacement function, they will be called first. +Termination is handled via the system's normal @code{exit} call. + +@end deftypefn + +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include +#ifdef HAVE_STDLIB_H +#include +#endif +#include "libiberty.h" + + +/* This variable is set by xatexit if it is called. This way, xmalloc + doesn't drag xatexit into the link. */ +void (*_xexit_cleanup) PARAMS ((void)); + +void +xexit (code) + int code; +{ + if (_xexit_cleanup != NULL) + (*_xexit_cleanup) (); + exit (code); +} diff --git a/src/mkutil/tradcpp/xexit.obj b/src/mkutil/tradcpp/xexit.obj new file mode 100644 index 0000000000000000000000000000000000000000..b9e9a5cb06b4c5106574eb79a55cd4dbc015024a GIT binary patch literal 1070 zcmZuwO>fgc5FN*964Itb5a58+E>aZ%QMXAERaJxv4MBhsT2aa=$RzeAEI6?hZ_+5- z=&^r*1N;Gwh!aOZT=)n4f*!bV$N7*LX?EWmzg@3)p37Pkyi{uYQv@IbL2#=h zOw|)33Rwi7LlVx(G;mAQyUmsTu(YB9{6cbyGes2h0i<`h5`E=Yf`Q?b#rNIEv@ms; z0|t99M*BStrFjHz@%ePneyf&f)Vj8^WqqssaHq(o3%liekMCAW`-~Q5;f%j{+1#pj z2eRsQ%xdd(S4q2Sx^A^E`ciSH{^}8Ecm{xCMVcMQa~g_WeR7T6SYNG6#fodiT#oI! zO19)cwwtWzv|MS64tpj#o^;x*u+H;&zFFAV9TMkm#68nASNQ{Ltq7m!E}L zI)Meco~Y?qA_6hE42iTDD;Eu4X_&UCwYzQ#^z;=}#|~v%8H(t6q7B#a0@@|&$$>D` z;z%4nG+)*_0e7)2@m|farKjGZG>JJ6??)&JUlGOq+K&-R!ol(Hqua>vpt0cvnvY9~ zy%PdQ-=ojJ(cRIS7%Yy_B}5CD8UGEz9cX?f0`zgZeVJ3xuO4+2r$d0I7PQd}O8$7q#13(3oh&C|h#DQeI`K5wQ`gAVvoY;wI+d=G zqshe|KHe%#v{a#_h`_YFsn5E`Xhc6%zWjWH5F=<|fOYhGL`xxInB@N;3^HR#NCUjy x7<1ZL;AsE~;~D{O2O8>tuK_NC3JWX#s+-6rG5x2}m*^V(YqOC-YRq~M{sHmbr2_x} literal 0 HcmV?d00001 diff --git a/src/mkutil/tradcpp/xmalloc.c b/src/mkutil/tradcpp/xmalloc.c new file mode 100644 index 00000000..dae195c2 --- /dev/null +++ b/src/mkutil/tradcpp/xmalloc.c @@ -0,0 +1,183 @@ +/* memory allocation routines with error checking. + Copyright 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc. + +This file is part of the libiberty library. +Libiberty is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public +License as published by the Free Software Foundation; either +version 2 of the License, or (at your option) any later version. + +Libiberty 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* + +@deftypefn Replacement void* xmalloc (size_t) + +Allocate memory without fail. If @code{malloc} fails, this will print +a message to @code{stderr} (using the name set by +@code{xmalloc_set_program_name}, +if any) and then call @code{xexit}. Note that it is therefore safe for +a program to contain @code{#define malloc xmalloc} in its source. + +@end deftypefn + +@deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size}) +Reallocate memory without fail. This routine functions like @code{realloc}, +but will behave the same as @code{xmalloc} if memory cannot be found. + +@end deftypefn + +@deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize}) + +Allocate memory without fail, and set it to zero. This routine functions +like @code{calloc}, but will behave the same as @code{xmalloc} if memory +cannot be found. + +@end deftypefn + +@deftypefn Replacement void xmalloc_set_program_name (const char *@var{name}) + +You can use this to set the name of the program used by +@code{xmalloc_failed} when printing a failure message. + +@end deftypefn + +@deftypefn Replacement void xmalloc_failed (size_t) + +This function is not meant to be called by client code, and is listed +here for completeness only. If any of the allocation routines fail, this +function will be called to print an error message and terminate execution. + +@end deftypefn + +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include "ansidecl.h" +#include "libiberty.h" + +#include + +#ifdef __STDC__ +#include +#else +#define size_t unsigned long +#define ptrdiff_t long +#endif + +#if VMS +#include +#include +#else +/* For systems with larger pointers than ints, these must be declared. */ +PTR malloc PARAMS ((size_t)); +PTR realloc PARAMS ((PTR, size_t)); +PTR calloc PARAMS ((size_t, size_t)); +PTR sbrk PARAMS ((ptrdiff_t)); +#endif + +/* The program name if set. */ +static const char *name = ""; + +#ifdef HAVE_SBRK +/* The initial sbrk, set when the program name is set. Not used for win32 + ports other than cygwin32. */ +static char *first_break = NULL; +#endif /* HAVE_SBRK */ + +void +xmalloc_set_program_name (s) + const char *s; +{ + name = s; +#ifdef HAVE_SBRK + /* Win32 ports other than cygwin32 don't have brk() */ + if (first_break == NULL) + first_break = (char *) sbrk (0); +#endif /* HAVE_SBRK */ +} + +void +xmalloc_failed (size) + size_t size; +{ +#ifdef HAVE_SBRK + extern char **environ; + size_t allocated; + + if (first_break != NULL) + allocated = (char *) sbrk (0) - first_break; + else + allocated = (char *) sbrk (0) - (char *) &environ; + fprintf (stderr, + "\n%s%sCannot allocate %lu bytes after allocating %lu bytes\n", + name, *name ? ": " : "", + (unsigned long) size, (unsigned long) allocated); +#else /* HAVE_SBRK */ + fprintf (stderr, + "\n%s%sCannot allocate %lu bytes\n", + name, *name ? ": " : "", + (unsigned long) size); +#endif /* HAVE_SBRK */ + xexit (1); +} + +PTR +xmalloc (size) + size_t size; +{ + PTR newmem; + + if (size == 0) + size = 1; + newmem = malloc (size); + if (!newmem) + xmalloc_failed (size); + + return (newmem); +} + +PTR +xcalloc (nelem, elsize) + size_t nelem, elsize; +{ + PTR newmem; + + if (nelem == 0 || elsize == 0) + nelem = elsize = 1; + + newmem = calloc (nelem, elsize); + if (!newmem) + xmalloc_failed (nelem * elsize); + + return (newmem); +} + +PTR +xrealloc (oldmem, size) + PTR oldmem; + size_t size; +{ + PTR newmem; + + if (size == 0) + size = 1; + if (!oldmem) + newmem = malloc (size); + else + newmem = realloc (oldmem, size); + if (!newmem) + xmalloc_failed (size); + + return (newmem); +} diff --git a/src/mkutil/tradcpp/xmalloc.obj b/src/mkutil/tradcpp/xmalloc.obj new file mode 100644 index 0000000000000000000000000000000000000000..733a9255168fb24aad81f8a1a0cff2f035f61bfd GIT binary patch literal 3074 zcmZ`*U2GIp6h714&Q7P>c554hKj83FQXn15UqOt5)D5C7wEP$!mJItdTL$;fomr>^ z5@IC=HzCo8i9VPZ@x=#BjEN5>#zcgu55D+j!h=ym0uLB{A*s~w+mXVW zyE`$d=|%G*rS{l`Y>*9&&<>-Xi4$E$<-*jvY4kfg=lepTpflQ0@;SB(+}R*9HU@$# z;Q9j--qMLuw2Ca6I;Q+P9GZ?on8H4zh5Z{TxW#Ov6qLN&&WU|{#;vI0z{CstpPx)0 zvamUL-X$il%v*m25RL$Gf+=-X4EB1eU(#zMYezh1_ z!w1({TQ-m6yucdYIKE+nb)Xh_W$(0CnX$&J<(gM=>((o7-S?^$Ytv?XbkyFlX>5l* z`W$tqqCWSa!y)cQy|_4{EmO-oz8g5TdUd9rEjyKL*-et3GGN;QTg~qvownY`cmSjP zFkS!;SvXhdQ#`9M8uz`^E>n%%NA)xhqHaSy+M-G*ss}jwK{~&%un@x} zz2crKyXA+`PAb}cXq_l+UW7aqajmoBmfSM)CSlCZ>TZeMU1BNwz8&y+;T=q&W?M@c zvvpUj#WWmF;c>N8fXBS6a4`{?C6?+ZBek&~b47_eUNzTGi4=brrQ+|^L$TCK^z~C- zC2#`nE{BEA=8YnE2Y9qttNL=Z!Cl^=6ZERNiBtLG*}Cl4u$#omtW)y*;3Js!p?1^9 zN;2s-q(_DBj*?8;jyttl=$=uMNf#k)5W4r2WYS$oTZHaEC7CpVtMa(eO)1GF2NK_% zZptgkM2~2vMPv^7L;iTSQmF=(h;TM=t)WuG%DoY|zO>`$>U5-eyO}mV<%vhXM`!vI z7W=+6&i@#6T~E(*?^Z$y%_GLaW_o_A$@hh(k24k8BPhLnH&B^36JEG$lb<|}y-s|ZrDQ=`E_CaFPYP)}P>ymY zctYs*0Qp<$v={go>L5)6mkFs391_yoKt4l*^bK%CNWU)X?m?1v0|*U24TCfcNzUN& zC|@*9ylDxcC*q6JPy2xb^eS*roJgW$kYiK?#;FYKq%%OB-UKG-BCw0z1)Act5`73c zMxO!W^d(TIAAkw^8EDXNK$C6&yTwT+`U`SQ+=@8;1G$s#0(Ih3ksuRj&~jiGtp=L3 z5tyXSz#hWkruFdu$lc^Fj>3wEXNr^gu~EBL$o*{>@v_2>%e@7n87)jAd8q{M&Lcb6 zUg73bCN01whRoZ_&{&pY8t3Tt63x!+RZQdj%sIJLqM11cbxa!uGUHdj{PeH16DdTB zSXrzd$GM~Gp#Zk#(n%I|XnY3v z{&HUD(?VqD_{+<}JTALSVGLJ@0lOq^*k55owktKv)tXfj)=}X3(uP;(9_Pjnu=;9Y z=FGaYULZsOY{)6r>UgJ>Q$oWJb!dXNgE$&vh=zfljG@qMm9dfW5gI(DvM1yGFrQyn z%xgs(?v!V>?=%x?M10PxS+a4|A(J+|Q)c7TeMOgVJhH6(nNjn2Ut#3incq;T>& bzB{9BdT1(Ea}b_l3gh literal 0 HcmV?d00001 diff --git a/src/mkutil/tradcpp/xstrdup.c b/src/mkutil/tradcpp/xstrdup.c new file mode 100644 index 00000000..fb91ee0c --- /dev/null +++ b/src/mkutil/tradcpp/xstrdup.c @@ -0,0 +1,34 @@ +/* xstrdup.c -- Duplicate a string in memory, using xmalloc. + This trivial function is in the public domain. + Ian Lance Taylor, Cygnus Support, December 1995. */ + +/* + +@deftypefn Replacement char* xstrdup (const char *@var{s}) + +Duplicates a character string without fail, using @code{xmalloc} to +obtain memory. + +@end deftypefn + +*/ + +#include +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#ifdef HAVE_STRING_H +#include +#endif +#include "ansidecl.h" +#include "libiberty.h" + +char * +xstrdup (s) + const char *s; +{ + register size_t len = strlen (s) + 1; + register char *ret = xmalloc (len); + memcpy (ret, s, len); + return ret; +} diff --git a/src/mkutil/tradcpp/xstrdup.obj b/src/mkutil/tradcpp/xstrdup.obj new file mode 100644 index 0000000000000000000000000000000000000000..5c72a601d11ae54071058d457b53bdfe84ebf3ce GIT binary patch literal 1050 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 literal 0 HcmV?d00001 diff --git a/src/mkutil/true.obj b/src/mkutil/true.obj new file mode 100644 index 0000000000000000000000000000000000000000..4dbf66801aec5881af49824fc06a5abd8c22af1b GIT binary patch literal 813 zcmZ`%J8u&~5T5m!pxBK?LA?=Cl!vmI1X(0aNX{q^*#sp(bqI2I>tn;&XPx)*s_D{4 z5e4*gk@x{fR7m^+dO8|t(h+8M@32$wNxL)q?dn-{slyGf8ZB1x-qzz-Yn<&n6n-4}hz~RZO+~3o} z^gb#Vxn04Lzxhyh_Oe*V%3p46uDN`a*lsl+ueKlUa{7H5#?8Zt^<^(Ojt*7N%TAOx zNCU6?CeteRbec(#`1@PH;0D^dZ55=+An9m6y)(lX7v_DXxqH{0o8#Mkt-9(&^&;*j z-M)%t%Ad=0ppqWHw;<|u@nEUZ5cOH8){1yZQoar@^3VR=uyS`#^-3@X?~tcBtMES8 zD)8*|=i=uVUu^jF*oId!MHO%xzP)a)5I+(9FSUc9Q5XHt|NTpJFjllB{J8>%m`OXZ zjNKmwn37Q8*qsVop^by>9gYEY!C^EA*D*Q*RB(sU5Rf*+X!|K*hfzW3hp)$%XGVpW zR12#j&!NPscp^JHAao`C4haMDBh6@#HiU?+jrj*@2|`+?Xo7u3tr%i-@XAO#j7IM| Gi2n=8lYIyP literal 0 HcmV?d00001 diff --git a/src/mkutil/w32munge.c b/src/mkutil/w32munge.c new file mode 100644 index 00000000..16890813 --- /dev/null +++ b/src/mkutil/w32munge.c @@ -0,0 +1,309 @@ +/* w32munge.c by Nick for Hytech */ +/* note: under construction, it really needs a total rethink, see foster.c */ + +#include +#ifdef _MSC_VER +#include +#else +#include +#endif +#include +#include + +#define COMMAND_MAX 0x800 /* cope with very long command lines */ +#define PATHNAME_MAX 0x400 /* cope with very long path elements */ +#define BASENAME_MAX 0x200 /* copy with very long filename stems */ + +int main(int argc, char **argv) + { + int i, j, k, quote_flag; + int command_length, exitcode; + int element_length, path_length; + int basename_length, myself_length; + int filename_length, target_length; + char command[COMMAND_MAX]; + char element[PATHNAME_MAX], *path; + char basename[BASENAME_MAX], myself[PATHNAME_MAX]; + char filename[PATHNAME_MAX], target[PATHNAME_MAX]; + struct stat mystatbuf, statbuf; +#ifdef _MSC_VER + STARTUPINFO si; + PROCESS_INFORMATION pi; + DWORD dwExitCode; + + GetModuleFileName(NULL, myself, sizeof(myself)); + myself_length = strlen(myself); +#else + myself_length = strlen(argv[0]); + if (myself_length + 1> sizeof(myself)) + { + fprintf(stderr, "invocation name too long\n"); + exit(1); + } + strcpy(myself, argv[0]); +#endif + + if (stat(myself, &mystatbuf) < 0) + { + fprintf(stderr, "%s: can't stat myself\n", myself); + exit(1); + } +/* printf("i'm %s inode %ld\n", myself, (long)mystatbuf.st_ino); */ + + for (i = myself_length; i >= 0; i--) + { + if (myself[i] == ':' || +#ifdef _MSC_VER + myself[i] == '\\') +#else + myself[i] == '/') +#endif + { + break; + } + } + i++; /* skip separator, or restore i to 0 */ + + basename_length = myself_length - i; + if (basename_length < 1) + { + fprintf(stderr, "%s: null invocation name\n", myself); + exit(1); + } + if (basename_length + 1 > sizeof(basename)) + { + fprintf(stderr, "%s: invocation name too long\n", myself); + exit(1); + } + strcpy(basename, &myself[i]); + + path = getenv("PATH"); + if (path == NULL) + { + fprintf(stderr, "%s: no PATH in environment\n", myself); + exit(1); + } + path_length = strlen(path); + + target_length = 0; + for (i = 0; i < path_length; i++) + { + for (j = i; j < path_length; j++) + { +#ifdef _MSC_VER + if (path[j] == ';') +#else + if (path[j] == ':') +#endif + { + break; + } + } + + element_length = j - i; + if (element_length < 1) + { + continue; /* i++ skips possible separator */ + } + if (element_length + 1 > sizeof(element)) + { + fprintf(stderr, "%s: path element too long\n", myself); + exit(1); + } + + memcpy(element, &path[i], element_length); + i = j; /* don't need the starting position anymore */ + + while (element_length && +#ifdef _MSC_VER + element[element_length] == '\\') +#else + element[element_length] == '/') +#endif + { + element_length--; + } + element[element_length] = 0; + + if (element_length + 1 + basename_length + 1 > + sizeof(filename)) + { + fprintf(stderr, "%s: filename too long\n", myself); + exit(1); + } + + memcpy(filename, element, element_length); + filename_length = element_length; +#ifdef _MSC_VER + filename[filename_length++] = '\\'; +#else + filename[filename_length++] = '/'; +#endif + memcpy(&filename[filename_length], basename, basename_length); + filename_length += basename_length; + filename[filename_length] = 0; + + if (stat(filename, &statbuf) >= 0) + { +/* printf("found %s inode %ld\n", filename, (long)statbuf.st_ino); */ +#ifdef _MSC_VER + if (statbuf.st_size == mystatbuf.st_size && + statbuf.st_ctime == mystatbuf.st_ctime && + statbuf.st_mtime == mystatbuf.st_mtime) +#else + if (memcmp(&statbuf, &mystatbuf, sizeof(statbuf)) == 0) +#endif + { + /* found myself in path */ + target_length = 0; /* start searching here */ + } + else if (target_length == 0) + { + /* found target in path */ + strcpy(target, filename); + target_length = filename_length; + } + } + + /* i++ skips possible separator */ + } + + if (target_length < 1) + { + fprintf(stderr, "%s: can't find target in PATH\n", myself); + exit(1); + } + + quote_flag = 0; + for (i = 0; i < target_length; i++) + { + if (target[i] == ' ') + { + quote_flag = 1; + break; + } + } + + command_length = 0; + if (quote_flag) + { + command[command_length++] = '"'; + } + memcpy(&command[command_length], target, target_length); + command_length += target_length; + if (quote_flag) + { + command[command_length++] = '"'; + } + command[command_length++] = ' '; + + for (i = 1; i < argc; i++) + { + j = strlen(argv[i]); + + quote_flag = 0; + for (k = 0; k < j; k++) + { + if (argv[i][k] == ' ') + { + quote_flag = 1; + break; + } + } + + if (command_length + quote_flag + j + quote_flag + 1 > + sizeof(command)) + { + fprintf(stderr, "%s: command line too long\n", + argv[0]); + exit(1); + } + + if (quote_flag) + { + command[command_length++] = '"'; + } +#if 1 + k = 0; + for (j = 0; argv[i][j]; j++) + { + if (argv[i][j] == '"') + { + command[command_length + k++] = '\\'; + } + command[command_length + k++] = argv[i][j]; + } + j = k; +#else + memcpy(&command[command_length], argv[i], j); +#endif +#ifdef _MSC_VER /* finally! ready to munge something! */ + /* note k = 1, so we don't munge switchar */ + for (k = 1; k < j; k++) + { + if (command[command_length + k] == '/') + { + command[command_length + k] = '\\'; + } + } +#endif + command_length += j; + if (quote_flag) + { + command[command_length++] = '"'; + } + command[command_length++] = ' '; + } + command[command_length - 1] = 0; + + fprintf(stderr, "%s: executing: %s\n", myself, command); + fflush(stderr); + +#ifdef _MSC_VER + memset(&si, 0, sizeof(STARTUPINFO)); + si.cb = sizeof(STARTUPINFO); + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_SHOWMINNOACTIVE; + + memset(&pi, 0, sizeof(PROCESS_INFORMATION)); + + if (CreateProcess( + NULL, //argv[1], // name of executable module + command, // command line string + NULL, //LPSECURITY_ATTRIBUTES lpProcessAttributes, + NULL, //LPSECURITY_ATTRIBUTES lpThreadAttributes, + FALSE, // handle inheritance option + HIGH_PRIORITY_CLASS, // creation flags + NULL, //LPVOID lpEnvironment, // new environment block + NULL, // current directory name + &si, // startup information + &pi // process information + ) == 0) + { + fprintf(stderr, "CreateProcess() failed\n"); + exit(1); + } + + if (WaitForSingleObject(pi.hProcess, INFINITE) != WAIT_OBJECT_0) + { + fprintf(stderr, "WaitForSingleObject() failed\n"); + exit(1); + } + + if (GetExitCodeProcess(pi.hProcess, &dwExitCode) == 0) + { + fprintf(stderr, "GetExitCodeProcess() failed\n"); + exit(1); + } + + exitcode = dwExitCode; +#else + exitcode = system(command); +#endif + + fprintf(stderr, "%s: exitcode: %d\n", myself, exitcode); + exit(exitcode); + + return 0; /* can't happen, but keep the compiler happy */ + } + diff --git a/src/nos/auto.mk b/src/nos/auto.mk new file mode 100644 index 00000000..ea855f11 --- /dev/null +++ b/src/nos/auto.mk @@ -0,0 +1,36 @@ +# auto.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +SUBDIRS= po clients dump filesys internet net ppp servers \ + $(ARCH) iar intl main +#ax25 netrom + +OUTPUTS= + +dump_SOURCES= po + +clients_SOURCES= \ + po + +filesys_SOURCES= \ + po + +internet_SOURCES= \ + po + +net_SOURCES= po + +ppp_SOURCES= po + +servers_SOURCES= \ + po + +$(ARCH)_SOURCES= \ + po + +main_SOURCES= po dump internet net ppp filesys $(ARCH) iar intl +#ax25 clients netrom servers + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/ax25/auto.mk b/src/nos/ax25/auto.mk new file mode 100644 index 00000000..152083cd --- /dev/null +++ b/src/nos/ax25/auto.mk @@ -0,0 +1,14 @@ +# auto.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +SUBDIRS= + +OUTPUTS= ax25.$(LIBEXT) + +ax25_$(LIBEXT)_SOURCES= \ + ax25.c ax25cmd.c ax25hdr.c ax25mail.c ax25subr.c \ + ax25user.c axheard.c axsock.c kiss.c lapb.c lapbtime.c + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/ax25/ax25.c b/src/nos/ax25/ax25.c new file mode 100644 index 00000000..56c8cac2 --- /dev/null +++ b/src/nos/ax25/ax25.c @@ -0,0 +1,414 @@ +/* Low level AX.25 code: + * incoming frame processing (including digipeating) + * IP encapsulation + * digipeater routing + * + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "arp.h" +#include "slip.h" +#include "ax25.h" +#include "lapb.h" +#include "netrom.h" +#include "ip.h" +#include "devparam.h" +#include + +/* List of AX.25 multicast addresses in network format (shifted ascii). + * Only the first entry is used for transmission, but an incoming + * packet with any one of these destination addresses is recognized + * as a multicast. + */ +uint8 Ax25multi[][AXALEN] = { + 'Q'<<1, 'S'<<1, 'T'<<1, ' '<<1, ' '<<1, ' '<<1, '0'<<1, /* QST */ + 'M'<<1, 'A'<<1, 'I'<<1, 'L'<<1, ' '<<1, ' '<<1, '0'<<1, /* MAIL */ + 'N'<<1, 'O'<<1, 'D'<<1, 'E'<<1, 'S'<<1, ' '<<1, '0'<<1, /* NODES */ + 'I'<<1, 'D'<<1, ' '<<1, ' '<<1, ' '<<1, ' '<<1, '0'<<1, /* ID */ + 'O'<<1, 'P'<<1, 'E'<<1, 'N'<<1, ' '<<1, ' '<<1, '0'<<1, /* OPEN */ + 'C'<<1, 'Q'<<1, ' '<<1, ' '<<1, ' '<<1, ' '<<1, '0'<<1, /* CQ */ + 'B'<<1, 'E'<<1, 'A'<<1, 'C'<<1, 'O'<<1, 'N'<<1, '0'<<1, /* BEACON */ + 'R'<<1, 'M'<<1, 'N'<<1, 'C'<<1, ' '<<1, ' '<<1, '0'<<1, /* RMNC */ + 'A'<<1, 'L'<<1, 'L'<<1, ' '<<1, ' '<<1, ' '<<1, '0'<<1, /* ALL */ + '\0', +}; +uint8 Mycall[AXALEN]; +struct ax_route *Ax_routes; /* Routing table header */ +int Digipeat = 1; /* Controls digipeating */ + +int +axi_send( +struct mbuf **bpp, +struct iface *iface, +int32 gateway, +uint8 tos +){ + return axui_send(bpp,iface,gateway,tos); +} + +/* Send IP datagrams across an AX.25 link */ +int +axui_send( +struct mbuf **bpp, +struct iface *iface, +int32 gateway, +uint8 tos +){ + struct mbuf *tbp; + uint8 *hw_addr; + struct ax25_cb *axp; + + if((hw_addr = res_arp(iface,ARP_AX25,gateway,bpp)) == NULL) + return 0; /* Wait for address resolution */ + + /* UI frames are used for any one of the following three conditions: + * 1. The "low delay" bit is set in the type-of-service field. + * 2. The "reliability" TOS bit is NOT set and the interface is in + * datagram mode. + * 3. The destination is the broadcast address (this is helpful + * when broadcasting on an interface that's in connected mode). + */ + if((tos & IP_COS) == DELAY + || ((tos & IP_COS) != RELIABILITY && (iface->send == axui_send)) + || addreq(hw_addr,Ax25multi[0])){ + /* Use UI frame */ + return (*iface->output)(iface,hw_addr,iface->hwaddr,PID_IP,bpp); + } + /* Reliability is needed; use I-frames in AX.25 connection */ + if((axp = find_ax25(hw_addr)) == NULL){ + /* Open a new connection */ + axp = open_ax25(iface,iface->hwaddr,hw_addr, + AX_ACTIVE,Axwindow,s_arcall,s_atcall,s_ascall,-1); + if(axp == NULL){ + free_p(bpp); + return -1; + } + } + if(axp->state == LAPB_DISCONNECTED){ + est_link(axp); + lapbstate(axp,LAPB_SETUP); + } + /* Insert the PID */ + pushdown(bpp,NULL,1); + (*bpp)->data[0] = PID_IP; + if((tbp = segmenter(bpp,axp->paclen)) == NULL){ + free_p(bpp); + return -1; + } + return send_ax25(axp,&tbp,-1); +} +/* Add header and send connectionless (UI) AX.25 packet. + * Note that the calling order here must match enet_output + * since ARP also uses it. + */ +int +ax_output( +struct iface *iface, /* Interface to use; overrides routing table */ +uint8 *dest, /* Destination AX.25 address (7 bytes, shifted) */ +uint8 *source, /* Source AX.25 address (7 bytes, shifted) */ +uint16 pid, /* Protocol ID */ +struct mbuf **bpp /* Data field (follows PID) */ +){ + /* Prepend pid to data */ + pushdown(bpp,NULL,1); + (*bpp)->data[0] = (uint8)pid; + return axsend(iface,dest,source,LAPB_COMMAND,UI,bpp); +} +/* Common subroutine for sendframe() and ax_output() */ +int +axsend( +struct iface *iface, /* Interface to use; overrides routing table */ +uint8 *dest, /* Destination AX.25 address (7 bytes, shifted) */ +uint8 *source, /* Source AX.25 address (7 bytes, shifted) */ +int cmdrsp, /* Command/response indication */ +int ctl, /* Control field */ +struct mbuf **bpp /* Data field (includes PID) */ +){ + struct ax25 addr; + struct ax_route *axr; + uint8 *idest; + int rval; + + /* If the source addr is unspecified, use the interface address */ + if(source[0] == '\0') + source = iface->hwaddr; + + /* If there's a digipeater route, get it */ + axr = ax_lookup(dest); + + memcpy(addr.dest,dest,AXALEN); + memcpy(addr.source,source,AXALEN); + addr.cmdrsp = cmdrsp; + + if(axr != NULL){ + memcpy(addr.digis,axr->digis,axr->ndigis*AXALEN); + addr.ndigis = axr->ndigis; + idest = addr.digis[0]; + } else { + addr.ndigis = 0; + idest = dest; + } + addr.nextdigi = 0; + + /* Allocate mbuf for control field, and fill in */ + pushdown(bpp,NULL,1); + (*bpp)->data[0] = ctl; + + htonax25(&addr,bpp); + /* This shouldn't be necessary because redirection has already been + * done at the IP router layer, but just to be safe... + */ + if(iface->forw != NULL){ + logsrc(iface->forw,iface->forw->hwaddr); + logdest(iface->forw,idest); + rval = (*iface->forw->raw)(iface->forw,bpp); + } else { + logsrc(iface,iface->hwaddr); + logdest(iface,idest); + rval = (*iface->raw)(iface,bpp); + } + return rval; +} +/* Process incoming AX.25 packets. + * After optional tracing, the address field is examined. If it is + * directed to us as a digipeater, repeat it. If it is addressed to + * us or to QST-0, kick it upstairs depending on the protocol ID. + */ +void +ax_recv( +struct iface *iface, +struct mbuf **bpp +){ + uint8 control; + struct ax25 hdr; + struct ax25_cb *axp; + struct ax_route *axr; + uint8 (*mpp)[AXALEN]; + int mcast; + uint8 *isrc,*idest; /* "immediate" source and destination */ + + /* Pull header off packet and convert to host structure */ + if(ntohax25(&hdr,bpp) < 0){ + /* Something wrong with the header */ + free_p(bpp); + return; + } + /* If there were digis in this packet and at least one has + * been passed, then the last passed digi is the immediate source. + * Otherwise it is the original source. + */ + if(hdr.ndigis != 0 && hdr.nextdigi != 0) + isrc = hdr.digis[hdr.nextdigi-1]; + else + isrc = hdr.source; + + /* If there are digis in this packet and not all have been passed, + * then the immediate destination is the next digi. Otherwise it + * is the final destination. + */ + if(hdr.ndigis != 0 && hdr.nextdigi != hdr.ndigis) + idest = hdr.digis[hdr.nextdigi]; + else + idest = hdr.dest; + + /* Don't log our own packets if we overhear them, as they're + * already logged by axsend() and by the digipeater code. + */ + if(!addreq(isrc,iface->hwaddr)){ + logsrc(iface,isrc); + logdest(iface,idest); + } + /* Examine immediate destination for a multicast address */ + mcast = 0; + for(mpp = Ax25multi;(*mpp)[0] != '\0';mpp++){ + if(addreq(idest,*mpp)){ + mcast = 1; + break; + } + } + if(!mcast && !addreq(idest,iface->hwaddr)){ + /* Not a broadcast, and not addressed to us. Inhibit + * transmitter to avoid colliding with addressed station's + * response, and discard packet. + */ + if(iface->ioctl != NULL) + (*iface->ioctl)(iface,PARAM_MUTE,1,-1); + free_p(bpp); + return; + } + if(!mcast && iface->ioctl != NULL){ + /* Packet was sent to us; abort transmit inhibit */ + (*iface->ioctl)(iface,PARAM_MUTE,1,0); + } + /* At this point, packet is either addressed to us, or is + * a multicast. + */ + if(hdr.nextdigi < hdr.ndigis){ + /* Packet requests digipeating. See if we can repeat it. */ + if(Digipeat && !mcast){ + /* Yes, kick it back out. htonax25 will set the + * repeated bit. + */ + hdr.nextdigi++; + htonax25(&hdr,bpp); + if(iface->forw != NULL){ + logsrc(iface->forw,iface->forw->hwaddr); + logdest(iface->forw,hdr.digis[hdr.nextdigi]); + (*iface->forw->raw)(iface->forw,bpp); + } else { + logsrc(iface,iface->hwaddr); + logdest(iface,hdr.digis[hdr.nextdigi]); + (*iface->raw)(iface,bpp); + } + } + free_p(bpp); /* Dispose if not forwarded */ + return; + } + /* If we reach this point, then the packet has passed all digis, + * and is either addressed to us or is a multicast. + */ + if(*bpp == NULL) + return; /* Nothing left */ + + /* If there's no locally-set entry in the routing table and + * this packet has digipeaters, create or update it. Leave + * local routes alone. + */ + if(((axr = ax_lookup(hdr.source)) == NULL || axr->type == AX_AUTO) + && hdr.ndigis > 0){ + uint8 digis[MAXDIGIS][AXALEN]; + int i,j; + + /* Construct reverse digipeater path */ + for(i=hdr.ndigis-1,j=0;i >= 0;i--,j++){ + memcpy(digis[j],hdr.digis[i],AXALEN); + digis[j][ALEN] &= ~(E|REPEATED); + } + ax_add(hdr.source,AX_AUTO,digis,hdr.ndigis); + } + /* Sneak a peek at the control field. This kludge is necessary because + * AX.25 lacks a proper protocol ID field between the address and LAPB + * sublayers; a control value of UI indicates that LAPB is to be + * bypassed. + */ + control = *(*bpp)->data & ~PF; + + if(control == UI){ + int pid; + struct axlink *ipp; + + (void) PULLCHAR(bpp); + if((pid = PULLCHAR(bpp)) == -1) + return; /* No PID */ + /* Find network level protocol and hand it off */ + for(ipp = Axlink;ipp->funct != NULL;ipp++){ + if(ipp->pid == pid) + break; + } + if(ipp->funct != NULL) + (*ipp->funct)(iface,NULL,hdr.source,hdr.dest,bpp,mcast); + else + free_p(bpp); + return; + } + /* Everything from here down is connected-mode LAPB, so ignore + * multicasts + */ + if(mcast){ + free_p(bpp); + return; + } + /* Find the source address in hash table */ + if((axp = find_ax25(hdr.source)) == NULL){ + /* Create a new ax25 entry for this guy, + * insert into hash table keyed on his address, + * and initialize table entries + */ + if((axp = cr_ax25(hdr.source)) == NULL){ + free_p(bpp); + return; + } + /* Swap source and destination */ + memcpy(axp->remote,hdr.source,AXALEN); + memcpy(axp->local,hdr.dest,AXALEN); + axp->iface = iface; + } + if(hdr.cmdrsp == LAPB_UNKNOWN) + axp->proto = V1; /* Old protocol in use */ + + lapb_input(axp,hdr.cmdrsp,bpp); +} +/* Find a route for an AX.25 address */ +struct ax_route * +ax_lookup( +uint8 *target +){ + register struct ax_route *axr; + struct ax_route *axlast = NULL; + + for(axr = Ax_routes; axr != NULL; axlast=axr,axr = axr->next){ + if(addreq(axr->target,target)){ + if(axr != Ax_routes){ + /* Move entry to top of list to speed + * future searches + */ + axlast->next = axr->next; + axr->next = Ax_routes; + Ax_routes = axr; + + } + return axr; + } + } + return axr; +} +/* Add an entry to the AX.25 routing table */ +struct ax_route * +ax_add( +uint8 *target, +int type, +uint8 digis[][AXALEN], +int ndigis +){ + register struct ax_route *axr; + + if(ndigis < 0 || ndigis > MAXDIGIS) + return NULL; + + if((axr = ax_lookup(target)) == NULL){ + axr = (struct ax_route *)callocw(1,sizeof(struct ax_route)); + axr->next = Ax_routes; + Ax_routes = axr; + memcpy(axr->target,target,AXALEN); + axr->ndigis = ndigis; + } + axr->type = type; + if(axr->ndigis != ndigis) + axr->ndigis = ndigis; + + memcpy(axr->digis,digis[0],ndigis*AXALEN); + return axr; +} +int +ax_drop( +uint8 *target +){ + register struct ax_route *axr; + struct ax_route *axlast = NULL; + + for(axr = Ax_routes;axr != NULL;axlast=axr,axr=axr->next) + if(memcmp(axr->target,target,AXALEN) == 0) + break; + if(axr == NULL) + return -1; /* Not in table! */ + if(axlast != NULL) + axlast->next = axr->next; + else + Ax_routes = axr->next; + + free(axr); + return 0; +} diff --git a/src/nos/ax25/ax25cmd.c b/src/nos/ax25/ax25cmd.c new file mode 100644 index 00000000..d1d4bf2e --- /dev/null +++ b/src/nos/ax25/ax25cmd.c @@ -0,0 +1,584 @@ +/* AX25 control commands + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "timer.h" +#include "proc.h" +#include "iface.h" +#include "ax25.h" +#include "lapb.h" +#include "cmdparse.h" +#include "socket.h" +#include "mailbox.h" +#include "session.h" +#include "tty.h" +#include "nr4.h" +#include "commands.h" +#include +#include "po/messages.h" + +static int axdest(struct iface *ifp); +static int axheard(struct iface *ifp); +static void axflush(struct iface *ifp); +static int doaxflush(int argc,char *argv[],void *p); +static int doaxirtt(int argc,char *argv[],void *p); +static int doaxkick(int argc,char *argv[],void *p); +static int doaxreset(int argc,char *argv[],void *p); +static int doaxroute(int argc,char *argv[],void *p); +static int doaxstat(int argc,char *argv[],void *p); +static int doaxwindow(int argc,char *argv[],void *p); +static int doblimit(int argc,char *argv[],void *p); +static int dodigipeat(int argc,char *argv[],void *p); +static int domaxframe(int argc,char *argv[],void *p); +static int domycall(int argc,char *argv[],void *p); +static int don2(int argc,char *argv[],void *p); +static int dopaclen(int argc,char *argv[],void *p); +static int dopthresh(int argc,char *argv[],void *p); +static int dot3(int argc,char *argv[],void *p); +static int doversion(int argc,char *argv[],void *p); + +char *Ax25states[] = { + "", + "Disconn", + "Listening", + "Conn pend", + "Disc pend", + "Connected", + "Recovery", +}; + +/* Ascii explanations for the disconnect reasons listed in lapb.h under + * "reason" in ax25_cb + */ +char *Axreasons[] = { + "Normal", + "DM received", + "Timeout" +}; + +static struct cmds Axcmds[] = { + N_("blimit"), doblimit, 0, 0, NULL, + N_("destlist"), doaxdest, 0, 0, NULL, + N_("digipeat"), dodigipeat, 0, 0, NULL, + N_("flush"), doaxflush, 0, 0, NULL, + N_("heard"), doaxheard, 0, 0, NULL, + N_("irtt"), doaxirtt, 0, 0, NULL, + N_("kick"), doaxkick, 0, 2, N_("ax25 kick "), + N_("maxframe"), domaxframe, 0, 0, NULL, + N_("mycall"), domycall, 0, 0, NULL, + N_("paclen"), dopaclen, 0, 0, NULL, + N_("pthresh"), dopthresh, 0, 0, NULL, + N_("reset"), doaxreset, 0, 2, N_("ax25 reset "), + N_("retry"), don2, 0, 0, NULL, + N_("route"), doaxroute, 0, 0, NULL, + N_("status"), doaxstat, 0, 0, NULL, + N_("t3"), dot3, 0, 0, NULL, + N_("version"), doversion, 0, 0, NULL, + N_("window"), doaxwindow, 0, 0, NULL, + NULL, +}; +static int keychar(int c); + + +/* Multiplexer for top-level ax25 command */ +int +doax25(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Axcmds,argc,argv,p); +} + +int +doaxheard(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct iface *ifp; + + if(argc > 1){ + if((ifp = if_lookup(argv[1])) == NULL){ + _printf(_("Interface %s unknown\n"),argv[1]); + return 1; + } + if(ifp->output != ax_output){ + _printf(_("Interface %s not AX.25\n"),argv[1]); + return 1; + } + axheard(ifp); + return 0; + } + for(ifp = Ifaces;ifp != NULL;ifp = ifp->next){ + if(ifp->output != ax_output) + continue; /* Not an ax.25 interface */ + if(axheard(ifp) == EOF) + break; + } + return 0; +} +static int +axheard(ifp) +struct iface *ifp; +{ + struct lq *lp; + char tmp[AXBUF]; + + if(ifp->hwaddr == NULL) + return 0; + _printf(_("%s:\n"),ifp->name); + _printf(_("Station Last heard Pkts\n")); + for(lp = Lq;lp != NULL;lp = lp->next){ + if(lp->iface != ifp) + continue; + _printf(_("%-10s%-17s%8lu\n"),pax25(tmp,lp->addr), + tformat(secclock() - lp->time),lp->currxcnt); + } + return 0; +} +int +doaxdest(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct iface *ifp; + + if(argc > 1){ + if((ifp = if_lookup(argv[1])) == NULL){ + _printf(_("Interface %s unknown\n"),argv[1]); + return 1; + } + if(ifp->output != ax_output){ + _printf(_("Interface %s not AX.25\n"),argv[1]); + return 1; + } + axdest(ifp); + return 0; + } + for(ifp = Ifaces;ifp != NULL;ifp = ifp->next){ + if(ifp->output != ax_output) + continue; /* Not an ax.25 interface */ + if(axdest(ifp) == EOF) + break; + } + return 0; +} +static int +axdest(ifp) +struct iface *ifp; +{ + struct ld *lp; + struct lq *lq; + char tmp[AXBUF]; + + if(ifp->hwaddr == NULL) + return 0; + _printf(_("%s:\n"),ifp->name); + _printf(_("Station Last ref Last heard Pkts\n")); + for(lp = Ld;lp != NULL;lp = lp->next){ + if(lp->iface != ifp) + continue; + + _printf(_("%-10s%-17s"), + pax25(tmp,lp->addr),tformat(secclock() - lp->time)); + + if(addreq(lp->addr,ifp->hwaddr)){ + /* Special case; it's our address */ + _printf(_("%-17s"),tformat(secclock() - ifp->lastsent)); + } else if((lq = al_lookup(ifp,lp->addr,0)) == NULL){ + _printf(_("%-17s"),""); + } else { + _printf(_("%-17s"),tformat(secclock() - lq->time)); + } + _printf(_("%8lu\n"),lp->currxcnt); + } + return 0; +} +static int +doaxflush(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct iface *ifp; + + for(ifp = Ifaces;ifp != NULL;ifp = ifp->next){ + if(ifp->output != ax_output) + continue; /* Not an ax.25 interface */ + axflush(ifp); + } + return 0; +} +static void +axflush(ifp) +struct iface *ifp; +{ + struct lq *lp,*lp1; + struct ld *ld,*ld1; + + ifp->rawsndcnt = 0; + for(lp = Lq;lp != NULL;lp = lp1){ + lp1 = lp->next; + free(lp); + } + Lq = NULL; + for(ld = Ld;ld != NULL;ld = ld1){ + ld1 = ld->next; + free(ld); + } + Ld = NULL; +} + +static +doaxreset(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct ax25_cb *axp; + + axp = (struct ax25_cb *)ltop(htol(argv[1])); + if(!ax25val(axp)){ + printf(Notval); + return 1; + } + reset_ax25(axp); + return 0; +} + +/* Display AX.25 link level control blocks */ +static +doaxstat(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ax25_cb *axp; + char tmp[AXBUF]; + + if(argc < 2){ + _printf(_("&AXB Snd-Q Rcv-Q Remote State\n")); + for(axp = Ax25_cb;axp != NULL; axp = axp->next){ + _printf(_("%9p %-8d%-8d%-10s%s\n"), + axp, + len_q(axp->txq),len_p(axp->rxq), + pax25(tmp,axp->remote), + Ax25states[axp->state]); + } + return 0; + } + axp = (struct ax25_cb *)ltop(htol(argv[1])); + if(!ax25val(axp)){ + printf(Notval); + return 1; + } + st_ax25(axp); + return 0; +} +/* Dump one control block */ +void +st_ax25(axp) +register struct ax25_cb *axp; +{ + char tmp[AXBUF]; + + if(axp == NULL) + return; + _printf(_(" &AXB Remote RB V(S) V(R) Unack P Retry State\n")); + + _printf(_("%9p %-9s%c%c"),axp,pax25(tmp,axp->remote), + axp->flags.rejsent ? 'R' : ' ', + axp->flags.remotebusy ? 'B' : ' '); + _printf(_(" %4d %4d"),axp->vs,axp->vr); + _printf(_(" %02u/%02u %u"),axp->unack,axp->maxframe,axp->proto); + _printf(_(" %02u/%02u"),axp->retries,axp->n2); + _printf(_(" %s\n"),Ax25states[axp->state]); + + _printf(_("srtt = %lu mdev = %lu "),axp->srt,axp->mdev); + _printf(_("T1: ")); + if(run_timer(&axp->t1)) + _printf(_("%lu"),read_timer(&axp->t1)); + else + _printf(_("stop")); + _printf(_("/%lu ms; "),dur_timer(&axp->t1)); + + _printf(_("T3: ")); + if(run_timer(&axp->t3)) + _printf(_("%lu"),read_timer(&axp->t3)); + else + _printf(_("stop")); + _printf(_("/%lu ms\n"),dur_timer(&axp->t3)); + +} + +/* Display or change our AX.25 address */ +static +domycall(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + char tmp[AXBUF]; + + if(argc < 2){ + _printf(_("%s\n"),pax25(tmp,Mycall)); + return 0; + } + if(setcall(Mycall,argv[1]) == -1) + return -1; + return 0; +} + +/* Control AX.25 digipeating */ +static +dodigipeat(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Digipeat, _("Digipeat"), argc, argv); +} +/* Set limit on retransmission backoff */ +static +doblimit(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setlong(&Blimit, _("blimit"), argc, argv); +} +static +doversion(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&Axversion, _("AX25 version"), argc, argv); +} + +static +doaxirtt(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setlong(&Axirtt, _("Initial RTT (ms)"), argc, argv); +} + +/* Set idle timer */ +static +dot3(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setlong(&T3init, _("Idle poll timer (ms)"), argc, argv); +} + +/* Set retry limit count */ +static +don2(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&N2, _("Retry limit"), argc, argv); +} +/* Force a retransmission */ +static +doaxkick(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct ax25_cb *axp; + + axp = (struct ax25_cb *)ltop(htol(argv[1])); + if(!ax25val(axp)){ + printf(Notval); + return 1; + } + kick_ax25(axp); + return 0; +} +/* Set maximum number of frames that will be allowed in flight */ +static +domaxframe(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&Maxframe, _("Window size (frames)"), argc, argv); +} + +/* Set maximum length of I-frame data field */ +static +dopaclen(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&Paclen, _("Max frame length (bytes)"), argc, argv); +} +/* Set size of I-frame above which polls will be sent after a timeout */ +static +dopthresh(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&Pthresh, _("Poll threshold (bytes)"), argc, argv); +} + +/* Set high water mark on receive queue that triggers RNR */ +static +doaxwindow(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&Axwindow, _("AX25 receive window (bytes)"), + argc, argv); +} +/* End of ax25 subcommands */ + +/* Initiate interactive AX.25 connect to remote station */ +int +doconnect(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct sockaddr_ax fsocket; + struct session *sp; + int ndigis,i,s; + uint8 digis[MAXDIGIS][AXALEN]; + uint8 target[AXALEN]; + + /* If digipeaters are given, put them in the routing table */ + if(argc > 3){ + setcall(target,argv[2]); + ndigis = argc - 3; + if(ndigis > MAXDIGIS){ + _printf(_("Too many digipeaters\n")); + return 1; + } + for(i=0;iinproc = keychar; /* Intercept ^C */ + if((s = socket(AF_AX25,SOCK_STREAM,0)) == -1){ + _printf(_("Can't create socket\n")); + freesession(sp); + keywait(NULL,1); + return 1; + } + fsocket.sax_family = AF_AX25; + setcall(fsocket.ax25_addr,argv[2]); + strncpy(fsocket.iface,argv[1],ILEN); + sp->network = fdopen(s,"r+t"); + setvbuf(sp->network,NULL,_IOLBF,BUFSIZ); + if(SETSIG(EABORT)){ + keywait(NULL,1); + freesession(sp); + return 1; + } + return tel_connect(sp, (struct sockaddr *)&fsocket, sizeof(struct sockaddr_ax)); +} + +/* Display and modify AX.25 routing table */ +static int +doaxroute(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + char tmp[AXBUF]; + int i,ndigis; + register struct ax_route *axr; + uint8 target[AXALEN],digis[MAXDIGIS][AXALEN]; + + if(argc < 2){ + _printf(_("Target Type Digipeaters\n")); + for(axr = Ax_routes;axr != NULL;axr = axr->next){ + _printf(_("%-10s%-6s"),pax25(tmp,axr->target), + axr->type == AX_LOCAL ? "Local":"Auto"); + for(i=0;indigis;i++){ + _printf(_(" %s"),pax25(tmp,axr->digis[i])); + } + _printf(_("\n")); + } + return 0; + } + if(argc < 3){ + _printf(_("Usage: ax25 route add [digis...]\n")); + _printf(_(" ax25 route drop \n")); + return 1; + } + if(setcall(target,argv[2]) == -1){ + _printf(_("Bad target %s\n"),argv[2]); + return 1; + } + switch(argv[1][0]){ + case 'a': /* Add route */ + if(argc < 3){ + _printf(_("Usage: ax25 route add [digis...]\n")); + return 1; + } + ndigis = argc - 3; + if(ndigis > MAXDIGIS){ + _printf(_("Too many digipeaters\n")); + return 1; + } + for(i=0;ioutput, _("^C\n")); + alert(Current->proc,EABORT); + return 0; +} + diff --git a/src/nos/ax25/ax25hdr.c b/src/nos/ax25/ax25hdr.c new file mode 100644 index 00000000..fde33e93 --- /dev/null +++ b/src/nos/ax25/ax25hdr.c @@ -0,0 +1,106 @@ +/* AX25 header conversion routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "ax25.h" + +/* Convert a host-format AX.25 header into a mbuf ready for transmission */ +void +htonax25( +struct ax25 *hdr, +struct mbuf **bpp +){ + register uint8 *cp; + register uint16 i; + + if(hdr == (struct ax25 *)NULL || hdr->ndigis > MAXDIGIS || bpp == NULL) + return; + + /* Allocate space for return buffer */ + i = AXALEN * (2 + hdr->ndigis); + pushdown(bpp,NULL,i); + + /* Now convert */ + cp = (*bpp)->data; /* cp -> dest field */ + + /* Generate destination field */ + memcpy(cp,hdr->dest,AXALEN); + if(hdr->cmdrsp == LAPB_COMMAND) + cp[ALEN] |= C; /* Command frame sets C bit in dest */ + else + cp[ALEN] &= ~C; + cp[ALEN] &= ~E; /* Dest E-bit is always off */ + + cp += AXALEN; /* cp -> source field */ + + /* Generate source field */ + memcpy(cp,hdr->source,AXALEN); + if(hdr->cmdrsp == LAPB_RESPONSE) + cp[ALEN] |= C; + else + cp[ALEN] &= ~C; + /* Set E bit on source address if no digis */ + if(hdr->ndigis == 0){ + cp[ALEN] |= E; + return; + } + + cp += AXALEN; /* cp -> first digi field */ + + /* All but last digi get copied with E bit off */ + for(i=0; i < hdr->ndigis; i++){ + memcpy(cp,hdr->digis[i],AXALEN); + if(i < hdr->ndigis - 1) + cp[ALEN] &= ~E; + else + cp[ALEN] |= E; /* Last digipeater has E bit set */ + if(i < hdr->nextdigi) + cp[ALEN] |= REPEATED; + else + cp[ALEN] &= ~REPEATED; + cp += AXALEN; /* cp -> next digi field */ + } +} +/* Convert a network-format AX.25 header into a host format structure + * Return -1 if error, number of addresses if OK + */ +int +ntohax25( +/* Nick register */ struct ax25 *hdr, /* Output structure */ +struct mbuf **bpp +){ + register uint8 *axp; + + if(pullup(bpp,hdr->dest,AXALEN) < AXALEN) + return -1; + + if(pullup(bpp,hdr->source,AXALEN) < AXALEN) + return -1; + + /* Process C bits to get command/response indication */ + if((hdr->source[ALEN] & C) == (hdr->dest[ALEN] & C)) + hdr->cmdrsp = LAPB_UNKNOWN; + else if(hdr->source[ALEN] & C) + hdr->cmdrsp = LAPB_RESPONSE; + else + hdr->cmdrsp = LAPB_COMMAND; + + hdr->ndigis = 0; + hdr->nextdigi = 0; + if(hdr->source[ALEN] & E) + return 2; /* No digis */ + + /* Count and process the digipeaters */ + axp = hdr->digis[0]; + while(hdr->ndigis < MAXDIGIS && pullup(bpp,axp,AXALEN) == AXALEN){ + hdr->ndigis++; + if(axp[ALEN] & REPEATED) + hdr->nextdigi++; + if(axp[ALEN] & E) /* Last one */ + return hdr->ndigis + 2; + axp += AXALEN; + } + return -1; /* Too many digis */ +} + diff --git a/src/nos/ax25/ax25mail.c b/src/nos/ax25/ax25mail.c new file mode 100644 index 00000000..14ade3a0 --- /dev/null +++ b/src/nos/ax25/ax25mail.c @@ -0,0 +1,115 @@ +/* AX25 mailbox interface + * Copyright 1991 Phil Karn, KA9Q + * + * May '91 Bill Simpson + * move to separate file for compilation & linking + */ +#include "global.h" +#include "proc.h" +#include "ax25.h" +#include "socket.h" +#include "session.h" +#include "mailbox.h" +#include "ax25mail.h" +#include +#include "po/messages.h" + + +/* Axi_sock is kept in Socket.c, so that this module won't be called */ + +int +ax25start(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int s,type,c; + FILE *network; + + if (Axi_sock != -1) + return 0; + + ksignal(Curproc,0); /* Don't keep the parser waiting */ + chname(Curproc,"AX25 listener"); + Axi_sock = socket(AF_AX25,SOCK_STREAM,0); + /* bind() is done automatically */ + if(listen(Axi_sock,1) == -1){ + close_s(Axi_sock); + return -1; + } + for(;;){ + if((s = accept(Axi_sock,NULL,NULL)) == -1) + break; /* Service is shutting down */ + + type = AX25TNC; + /* Eat the line that triggered the connection + * and then start the mailbox + */ + network = fdopen(s,"r+t"); + while((c = getc(network)) != '\n' && c != EOF) + ; + newproc("mbox",2048,mbx_incom,s,(void *)type,(void *)network,0); + } + close_s(Axi_sock); + Axi_sock = -1; + return 0; +} +int +ax250(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + close_s(Axi_sock); + Axi_sock = -1; + return 0; +} + + +int +dogateway(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct mbx *m; + struct sockaddr_ax fsocket; + int ndigis,i,s; + uint8 digis[MAXDIGIS][AXALEN]; + uint8 target[AXALEN]; + + m = (struct mbx *)p; + if(!(m->privs & AX25_CMD)){ + printf(Noperm); + return 0; + } + /* If digipeaters are given, put them in the routing table */ + if(argc > 3){ + setcall(target,argv[2]); + ndigis = argc - 3; + if(ndigis > MAXDIGIS){ + _printf(_("Too many digipeaters\n")); + return 1; + } + for(i=0;istartmsg = mallocw(80); + sprintf(m->startmsg,"*** LINKED to %s\n",m->name); + return gw_connect(m,s,(struct sockaddr *)&fsocket, sizeof(struct sockaddr_ax)); +} diff --git a/src/nos/ax25/ax25subr.c b/src/nos/ax25/ax25subr.c new file mode 100644 index 00000000..fbd8f92b --- /dev/null +++ b/src/nos/ax25/ax25subr.c @@ -0,0 +1,243 @@ +/* Low level AX.25 routines: + * callsign conversion + * control block management + * + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "timer.h" +#include "ax25.h" +#include "lapb.h" +#include + +struct ax25_cb *Ax25_cb; + +/* Default AX.25 parameters */ +int32 T3init = 0; /* No keep-alive polling */ +uint16 Maxframe = 1; /* Stop and wait */ +uint16 N2 = 10; /* 10 retries */ +uint16 Axwindow = 2048; /* 2K incoming text before RNR'ing */ +uint16 Paclen = 256; /* 256-byte I fields */ +uint16 Pthresh = 128; /* Send polls for packets larger than this */ +int32 Axirtt = 5000; /* Initial round trip estimate, ms */ +uint16 Axversion = V1; /* Protocol version */ +int32 Blimit = 30; /* Retransmission backoff limit */ + +/* Look up entry in connection table */ +struct ax25_cb * +find_ax25(addr) +register uint8 *addr; +{ + register struct ax25_cb *axp; + struct ax25_cb *axlast = NULL; + + /* Search list */ + for(axp = Ax25_cb; axp != NULL; axlast=axp,axp = axp->next){ + if(addreq(axp->remote,addr)){ + if(axlast != NULL){ + /* Move entry to top of list to speed + * future searches + */ + axlast->next = axp->next; + axp->next = Ax25_cb; + Ax25_cb = axp; + } + return axp; + } + } + return NULL; +} + +/* Remove entry from connection table */ +void +del_ax25(conn) +struct ax25_cb *conn; +{ + register struct ax25_cb *axp; + struct ax25_cb *axlast = NULL; + + for(axp = Ax25_cb; axp != NULL; axlast=axp,axp = axp->next){ + if(axp == conn) + break; + } + if(axp == NULL) + return; /* Not found */ + + /* Remove from list */ + if(axlast != NULL) + axlast->next = axp->next; + else + Ax25_cb = axp->next; + + /* Timers should already be stopped, but just in case... */ + stop_timer(&axp->t1); + stop_timer(&axp->t3); + + /* Free allocated resources */ + free_q(&axp->txq); + free_q(&axp->rxasm); + free_q(&axp->rxq); + free(axp); +} + +/* Create an ax25 control block. Allocate a new structure, if necessary, + * and fill it with all the defaults. The caller + * is still responsible for filling in the reply address + */ +struct ax25_cb * +cr_ax25(addr) +uint8 *addr; +{ + register struct ax25_cb *axp; + + if(addr == NULL) + return NULL; + + if((axp = find_ax25(addr)) == NULL){ + /* Not already in table; create an entry + * and insert it at the head of the chain + */ + axp = (struct ax25_cb *)callocw(1,sizeof(struct ax25_cb)); + axp->next = Ax25_cb; + Ax25_cb = axp; + } + axp->user = -1; + axp->state = LAPB_DISCONNECTED; + axp->maxframe = Maxframe; + axp->window = Axwindow; + axp->paclen = Paclen; + axp->proto = Axversion; /* Default, can be changed by other end */ + axp->pthresh = Pthresh; + axp->n2 = N2; + axp->srt = Axirtt; + set_timer(&axp->t1,2*axp->srt); + axp->t1.func = recover; + axp->t1.arg = axp; + + set_timer(&axp->t3,T3init); + axp->t3.func = pollthem; + axp->t3.arg = axp; + + /* Always to a receive and state upcall as default */ + axp->r_upcall = s_arcall; + axp->s_upcall = s_ascall; + + return axp; +} + +/* + * setcall - convert callsign plus substation ID of the form + * "KA9Q-0" to AX.25 (shifted) address format + * Address extension bit is left clear + * Return -1 on error, 0 if OK + */ +int +setcall(out,call) +uint8 *out; +char *call; +{ + int csize; + unsigned ssid; + register int i; + register char *dp; + char c; + + if(out == NULL || call == NULL || *call == '\0') + return -1; + + /* Find dash, if any, separating callsign from ssid + * Then compute length of callsign field and make sure + * it isn't excessive + */ + dp = strchr(call,'-'); + if(dp == NULL) + csize = strlen(call); + else + csize = dp - call; + if(csize > ALEN) + return -1; + /* Now find and convert ssid, if any */ + if(dp != NULL){ + dp++; /* skip dash */ + ssid = atoi(dp); + if(ssid > 15) + return -1; + } else + ssid = 0; + /* Copy upper-case callsign, left shifted one bit */ + for(i=0;i> 1) & 0x7f; + if(c != ' ') + *cp++ = c; + } + if((*addr & SSID) != 0) + sprintf(cp,"-%d",(*addr >> 1) & 0xf); /* ssid */ + else + *cp = '\0'; + return e; +} + +/* Figure out the frame type from the control field + * This is done by masking out any sequence numbers and the + * poll/final bit after determining the general class (I/S/U) of the frame + */ +uint16 +ftype(control) +register int control; +{ + if((control & 1) == 0) /* An I-frame is an I-frame... */ + return I; + if(control & 2) /* U-frames use all except P/F bit for type */ + return (uint16)control & ~PF; + else /* S-frames use low order 4 bits for type */ + return (uint16)control & 0xf; +} + +void +lapb_garbage(red) +int red; +{ + register struct ax25_cb *axp; + + for(axp=Ax25_cb;axp != NULL;axp = axp->next){ + mbuf_crunch(&axp->rxq); + mbuf_crunch(&axp->rxasm); + } +} + diff --git a/src/nos/ax25/ax25user.c b/src/nos/ax25/ax25user.c new file mode 100644 index 00000000..31c0dc22 --- /dev/null +++ b/src/nos/ax25/ax25user.c @@ -0,0 +1,217 @@ +/* User interface subroutines for AX.25 + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "timer.h" +#include "iface.h" +#include "lapb.h" +#include "ax25.h" +#include "lapb.h" +#include + +/* Open an AX.25 connection */ +struct ax25_cb * +open_ax25(iface,local,remote,mode,window,r_upcall,t_upcall,s_upcall,user) +struct iface *iface; /* Interface */ +uint8 *local; /* Local address */ +uint8 *remote; /* Remote address */ +int mode; /* active/passive/server */ +uint16 window; /* Window size in bytes */ +void (*r_upcall)(); /* Receiver upcall handler */ +void (*t_upcall)(); /* Transmitter upcall handler */ +void (*s_upcall)(); /* State-change upcall handler */ +int user; /* User linkage area */ +{ + struct ax25_cb *axp; + uint8 remtmp[AXALEN]; + + if(remote == NULL){ + remote = remtmp; + setcall(remote," "); + } + if((axp = find_ax25(remote)) != NULL && axp->state != LAPB_DISCONNECTED) + return NULL; /* Only one to a customer */ + if(axp == NULL && (axp = cr_ax25(remote)) == NULL) + return NULL; + memcpy(axp->remote,remote,AXALEN); + memcpy(axp->local,local,AXALEN); + axp->iface = iface; + axp->window = window; + axp->r_upcall = r_upcall; + axp->t_upcall = t_upcall; + axp->s_upcall = s_upcall; + axp->user = user; + + switch(mode){ + case AX_SERVER: + axp->flags.clone = 1; + case AX_PASSIVE: /* Note fall-thru */ + axp->state = LAPB_LISTEN; + return axp; + case AX_ACTIVE: + break; + } + switch(axp->state){ + case LAPB_DISCONNECTED: + est_link(axp); + lapbstate(axp,LAPB_SETUP); + break; + case LAPB_SETUP: + free_q(&axp->txq); + break; + case LAPB_DISCPENDING: /* Ignore */ + break; + case LAPB_RECOVERY: + case LAPB_CONNECTED: + free_q(&axp->txq); + est_link(axp); + lapbstate(axp,LAPB_SETUP); + break; + } + return axp; +} + +/* Send data on an AX.25 connection. Caller provides optional PID. If + * a PID is provided, then operate in stream mode, i.e., a large packet + * is automatically packetized into a series of paclen-sized data fields. + * + * If pid == -1, it is assumed the packet (which may actually be a queue + * of distinct packets) already has a PID on the front and it is passed + * through directly even if it is very large. + */ +int +send_ax25( +struct ax25_cb *axp, +struct mbuf **bpp, +int pid +){ + struct mbuf *bp1; + uint16 offset,len,size; + + if(axp == NULL || bpp == NULL || *bpp == NULL){ + free_p(bpp); + return -1; + } + if(pid != -1){ + offset = 0; + len = len_p(*bpp); + /* It is important that all the pushdowns be done before + * any part of the original packet is freed. + * Otherwise the pushdown might erroneously overwrite + * a part of the packet that had been duped and freed. + */ + while(len != 0){ + size = min(len,axp->paclen); + dup_p(&bp1,*bpp,offset,size); + len -= size; + offset += size; + pushdown(&bp1,NULL,1); + bp1->data[0] = pid; + enqueue(&axp->txq,&bp1); + } + free_p(bpp); + } else { + enqueue(&axp->txq,bpp); + } + return lapb_output(axp); +} + +/* Receive incoming data on an AX.25 connection */ +struct mbuf * +recv_ax25(axp,cnt) +struct ax25_cb *axp; +uint16 cnt; +{ + struct mbuf *bp; + + if(axp->rxq == NULL) + return NULL; + + if(cnt == 0){ + /* This means we want it all */ + bp = axp->rxq; + axp->rxq = NULL; + } else { + bp = ambufw(cnt); + bp->cnt = pullup(&axp->rxq,bp->data,cnt); + } + /* If this has un-busied us, send a RR to reopen the window */ + if(len_p(axp->rxq) < axp->window + && (len_p(axp->rxq) + bp->cnt) >= axp->window) + sendctl(axp,LAPB_RESPONSE,RR); + + return bp; +} + +/* Close an AX.25 connection */ +int +disc_ax25(axp) +struct ax25_cb *axp; +{ + if(axp == NULL) + return -1; + switch(axp->state){ + case LAPB_DISCONNECTED: + break; /* Ignored */ + case LAPB_LISTEN: + del_ax25(axp); + break; + case LAPB_DISCPENDING: + lapbstate(axp,LAPB_DISCONNECTED); + break; + case LAPB_CONNECTED: + case LAPB_RECOVERY: + free_q(&axp->txq); + axp->retries = 0; + sendctl(axp,LAPB_COMMAND,DISC|PF); + stop_timer(&axp->t3); + start_timer(&axp->t1); + lapbstate(axp,LAPB_DISCPENDING); + break; + } + return 0; +} + +/* Verify that axp points to a valid ax25 control block */ +int +ax25val(axp) +struct ax25_cb *axp; +{ + register struct ax25_cb *axp1; + + if(axp == NULL) + return 0; /* Null pointer can't be valid */ + for(axp1 = Ax25_cb;axp1 != NULL; axp1 = axp1->next) + if(axp1 == axp) + return 1; + return 0; +} + +/* Force a retransmission */ +int +kick_ax25(axp) +struct ax25_cb *axp; +{ + if(!ax25val(axp)) + return -1; + recover(axp); + return 0; +} + +/* Abruptly terminate an AX.25 connection */ +int +reset_ax25(axp) +struct ax25_cb *axp; +{ + void (*upcall)(); + + if(axp == NULL) + return -1; + upcall = axp->s_upcall; + lapbstate(axp,LAPB_DISCONNECTED); + /* Clean up if the standard upcall isn't in use */ + if(upcall != s_ascall) + del_ax25(axp); + return 0; +} diff --git a/src/nos/ax25/axheard.c b/src/nos/ax25/axheard.c new file mode 100644 index 00000000..5139b5b1 --- /dev/null +++ b/src/nos/ax25/axheard.c @@ -0,0 +1,221 @@ +/* AX25 link callsign monitoring. Also contains beginnings of + * an automatic link quality monitoring scheme (incomplete) + * + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "ax25.h" +#include "ip.h" +#include "timer.h" + +static struct lq *al_create(struct iface *ifp,uint8 *addr); +static struct ld *ad_lookup(struct iface *ifp,uint8 *addr,int sort); +static struct ld *ad_create(struct iface *ifp,uint8 *addr); +struct lq *Lq; +struct ld *Ld; + +#ifdef notdef +/* Send link quality reports to interface */ +void +genrpt(ifp) +struct iface *ifp; +{ + struct mbuf *bp; + register uint8 *cp; + int i; + struct lq *lp; + int maxentries,nentries; + + maxentries = (Paclen - LQHDR) / LQENTRY; + if((bp = alloc_mbuf(Paclen)) == NULL) + return; + cp = bp->data; + nentries = 0; + + /* Build and emit header */ + cp = putlqhdr(cp,LINKVERS,Ip_addr); + + /* First entry is for ourselves. Since we're examining the Axsent + * variable before we've sent this frame, add one to it so it'll + * match the receiver's count after he gets this frame. + */ + cp = putlqentry(cp,ifp->hwaddr,Axsent+1); + nentries++; + + /* Now add entries from table */ + for(lp = lq;lp != NULL;lp = lp->next){ + cp = putlqentry(cp,&lp->addr,lp->currxcnt); + if(++nentries >= MAXENTRIES){ + /* Flush */ + bp->cnt = nentries*LQENTRY + LQHDR; + ax_output(ifp,Ax25multi[0],ifp->hwaddr,PID_LQ,bp); + if((bp = alloc_mbuf(Paclen)) == NULL) + return; + cp = bp->data; + } + } + if(nentries > 0){ + bp->cnt = nentries*LQENTRY + LQHDR; + ax_output(ifp,Ax25multi[0],ifp->hwaddr,LQPID,bp); + } else { + free_p(&bp); + } +} + +/* Pull the header off a link quality packet */ +void +getlqhdr(hp,bpp) +struct lqhdr *hp; +struct mbuf **bpp; +{ + hp->version = pull16(bpp); + hp->ip_addr = pull32(bpp); +} + +/* Put a header on a link quality packet. + * Return pointer to buffer immediately following header + */ +uint8 * +putlqhdr(cp,version,ip_addr) +register uint8 *cp; +uint16 version; +int32 ip_addr; +{ + cp = put16(cp,version); + return put32(cp,ip_addr); +} + +/* Pull an entry off a link quality packet */ +void +getlqentry(ep,bpp) +struct lqentry *ep; +struct mbuf **bpp; +{ + pullup(bpp,ep->addr,AXALEN); + ep->count = pull32(bpp); +} + +/* Put an entry on a link quality packet + * Return pointer to buffer immediately following header + */ +uint8 * +putlqentry(cp,addr,count) +uint8 *cp; +uint8 *addr; +int32 count; +{ + memcpy(cp,addr,AXALEN); + cp += AXALEN; + return put32(cp,count); +} +#endif + +/* Log the source address of an incoming packet */ +void +logsrc(ifp,addr) +struct iface *ifp; +uint8 *addr; +{ + register struct lq *lp; + + if((lp = al_lookup(ifp,addr,1)) == NULL + && (lp = al_create(ifp,addr)) == NULL) + return; + lp->currxcnt++; + lp->time = secclock(); +} +/* Log the destination address of an incoming packet */ +void +logdest(ifp,addr) +struct iface *ifp; +uint8 *addr; +{ + register struct ld *lp; + + if((lp = ad_lookup(ifp,addr,1)) == NULL + && (lp = ad_create(ifp,addr)) == NULL) + return; + lp->currxcnt++; + lp->time = secclock(); +} +/* Look up an entry in the source data base */ +struct lq * +al_lookup(ifp,addr,sort) +struct iface *ifp; +uint8 *addr; +int sort; +{ + register struct lq *lp; + struct lq *lplast = NULL; + + for(lp = Lq;lp != NULL;lplast = lp,lp = lp->next){ + if(addreq(lp->addr,addr) && lp->iface == ifp){ + if(sort && lplast != NULL){ + /* Move entry to top of list */ + lplast->next = lp->next; + lp->next = Lq; + Lq = lp; + } + return lp; + } + } + return NULL; +} +/* Create a new entry in the source database */ +static struct lq * +al_create(ifp,addr) +struct iface *ifp; +uint8 *addr; +{ + register struct lq *lp; + + lp = (struct lq *)callocw(1,sizeof(struct lq)); + memcpy(lp->addr,addr,AXALEN); + lp->next = Lq; + Lq = lp; + lp->iface = ifp; + + return lp; +} +/* Look up an entry in the destination database */ +static struct ld * +ad_lookup(ifp,addr,sort) +struct iface *ifp; +uint8 *addr; +int sort; +{ + register struct ld *lp; + struct ld *lplast = NULL; + + for(lp = Ld;lp != NULL;lplast = lp,lp = lp->next){ + if(lp->iface == ifp && addreq(lp->addr,addr)){ + if(sort && lplast != NULL){ + /* Move entry to top of list */ + lplast->next = lp->next; + lp->next = Ld; + Ld = lp; + } + return lp; + } + } + return NULL; +} +/* Create a new entry in the destination database */ +static struct ld * +ad_create(ifp,addr) +struct iface *ifp; +uint8 *addr; +{ + register struct ld *lp; + + lp = (struct ld *)callocw(1,sizeof(struct ld)); + memcpy(lp->addr,addr,AXALEN); + lp->next = Ld; + Ld = lp; + lp->iface = ifp; + + return lp; +} + diff --git a/src/nos/ax25/axsock.c b/src/nos/ax25/axsock.c new file mode 100644 index 00000000..94aa08e3 --- /dev/null +++ b/src/nos/ax25/axsock.c @@ -0,0 +1,519 @@ +#include +#include "global.h" +#include "mbuf.h" +#include "lapb.h" +#include "ax25.h" +#include "socket.h" +#include "usock.h" + +char Ax25_eol[] = "\r"; + +static void autobind(struct usock *up); + +/* The following two variables are needed because there can be only one + * socket listening on each of the AX.25 modes (I and UI) + */ +int Axi_sock = -1; /* Socket number listening for AX25 connections */ +static int Axui_sock = -1; /* Socket number listening for AX25 UI frames */ +static struct mbuf *Bcq; /* Queue of incoming UI frames */ + +/* Function that handles incoming UI frames from lapb.c */ +void +beac_input( +struct iface *iface, +uint8 *src, +struct mbuf **bpp +){ + struct mbuf *hdr; + struct sockaddr_ax *sax; + + if(Axui_sock == -1){ + /* Nobody there to read it */ + free_p(bpp); + } else { + pushdown(&hdr,NULL,sizeof(struct sockaddr_ax)); + sax = (struct sockaddr_ax *)hdr->data; + sax->sax_family = AF_AX25; + memcpy(sax->ax25_addr,src,AXALEN); + strncpy(sax->iface,iface->name,ILEN); + hdr->next = (*bpp); + *bpp = NULL; + enqueue(&Bcq,&hdr); + } +} +int +so_ax_sock( +struct usock *up, +int protocol +){ + return 0; +} +int +so_axui_sock( +struct usock *up, +int protocol +){ + return 0; +} + +int +so_axui_bind( +struct usock *up +){ + if(Axui_sock != -1){ + errno = EADDRINUSE; + return -1; + } + Axui_sock = up->index; + return 0; +} +int +so_ax_listen( +struct usock *up, +int backlog +){ + struct sockaddr_ax *local; + + if(up->name == NULL) + autobind(up); + if(up != itop(Axi_sock)){ + errno = EOPNOTSUPP; + return -1; + } + local = (struct sockaddr_ax *)up->name; + up->cb.ax25 = open_ax25(NULL,local->ax25_addr,NULL, + backlog ? AX_SERVER:AX_PASSIVE,0, + s_arcall,s_atcall,s_ascall,Axi_sock); + return 0; +} +int +so_ax_conn( +struct usock *up +){ + struct sockaddr_ax *local,*remote,localtmp; + struct ax25_cb *ax25; + struct iface *iface; + int s; + + s = up->index; + remote = (struct sockaddr_ax *)up->peername; + if((iface = if_lookup(remote->iface)) == NULL){ + errno = EINVAL; + return -1; + } + local = (struct sockaddr_ax *)up->name; + if(local == NULL){ + /* The local address was unspecified; set it from + * the interface we'll use + */ + localtmp.sax_family = AF_AX25; + memcpy(localtmp.ax25_addr,iface->hwaddr,AXALEN); + memcpy(localtmp.iface,remote->iface,ILEN); + bind(s,(struct sockaddr *)&localtmp,sizeof(localtmp)); + local = (struct sockaddr_ax *)up->name; + } + /* If we already have an AX25 link we can use it */ + if((up->cb.ax25 = find_ax25(remote->ax25_addr)) != NULL + && up->cb.ax25->state != LAPB_DISCONNECTED && + up->cb.ax25->user == -1) { + up->cb.ax25->user = s; + up->cb.ax25->r_upcall = s_arcall; + up->cb.ax25->t_upcall = s_atcall; + up->cb.ax25->s_upcall = s_ascall; + if(up->cb.ax25->state == LAPB_CONNECTED + || up->cb.ax25->state == LAPB_RECOVERY) + return 0; + } else { + up->cb.ax25 = open_ax25(iface,local->ax25_addr, + remote->ax25_addr,AX_ACTIVE, + Axwindow,s_arcall,s_atcall,s_ascall,s); + } + /* Wait for the connection to complete */ + while((ax25 = up->cb.ax25) != NULL && ax25->state != LAPB_CONNECTED){ + if(up->noblock){ + errno = EWOULDBLOCK; + return -1; + } else if((errno = kwait(up)) != 0){ + return -1; + } + } + if(ax25 == NULL){ + /* Connection probably already exists */ + free(up->peername); + up->peername = NULL; + errno = ECONNREFUSED; + return -1; + } + return 0; +} +int +so_axui_conn( +struct usock *up +){ + if(up->name == NULL) + autobind(up); + return 0; +} + +int +so_ax_recv( +struct usock *up, +struct mbuf **bpp, +struct sockaddr *from, +int *fromlen +){ + struct ax25_cb *ax25; + int cnt; + + while((ax25 = up->cb.ax25) != NULL + && (*bpp = recv_ax25(ax25,(uint16)0)) == NULL){ + if(up->noblock){ + errno = EWOULDBLOCK; + return -1; + } else if((errno = kwait(up)) != 0){ + return -1; + } + } + if(ax25 == NULL){ + /* Connection went away */ + errno = ENOTCONN; + return -1; + } + cnt = (*bpp)->cnt; + return cnt; +} +int +so_axui_recv( +struct usock *up, +struct mbuf **bpp, +struct sockaddr *from, +int *fromlen +){ + int s; + + s = up->index; + + while(s == Axui_sock && Bcq == NULL){ + if(up->noblock){ + errno = EWOULDBLOCK; + return -1; + } else if((errno = kwait(&Bcq)) != 0){ + return -1; + } + } + if(s != Axui_sock){ + errno = ENOTCONN; + return -1; + } + *bpp = dequeue(&Bcq); + + if(from != NULL && fromlen != NULL + && *fromlen >= sizeof(struct sockaddr_ax)){ + pullup(bpp,from,sizeof(struct sockaddr_ax)); + *fromlen = sizeof(struct sockaddr_ax); + } else { + pullup(bpp,NULL,sizeof(struct sockaddr_ax)); + } + return len_p(*bpp); +} +int +so_ax_send( +struct usock *up, +struct mbuf **bpp, +struct sockaddr *to +){ + struct ax25_cb *ax25; + + if((ax25 = up->cb.ax25) == NULL){ + free_p(bpp); + errno = ENOTCONN; + return -1; + } + send_ax25(ax25,bpp,PID_NO_L3); + + while((ax25 = up->cb.ax25) != NULL && + len_q(ax25->txq) * ax25->paclen > ax25->window){ + if(up->noblock){ + errno = EWOULDBLOCK; + return -1; + } else if((errno = kwait(up)) != 0){ + return -1; + } + } + if(ax25 == NULL){ + errno = EBADF; + return -1; + } + return 0; +} +int +so_axui_send( +struct usock *up, +struct mbuf **bpp, +struct sockaddr *to +){ + struct sockaddr_ax *local,*remote; + + local = (struct sockaddr_ax *)up->name; + if(to != NULL) + remote = (struct sockaddr_ax *)to; + else if(up->peername != NULL){ + remote = (struct sockaddr_ax *)up->peername; + } else { + free_p(bpp); + errno = ENOTCONN; + return -1; + } + ax_output(if_lookup(remote->iface),remote->ax25_addr, + local->ax25_addr,PID_NO_L3,bpp); + return 0; +} + +int +so_ax_qlen( +struct usock *up, +int rtx +){ + int len; + + if(up->cb.ax25 == NULL){ + errno = ENOTCONN; + return -1; + } + switch(rtx){ + case 0: + len = len_p(up->cb.ax25->rxq); + break; + case 1: /* Number of packets, not bytes */ + len = len_q(up->cb.ax25->txq); + } + return len; +} +int +so_axui_qlen( +struct usock *up, +int rtx +){ + int len; + + switch(rtx){ + case 0: + len = len_q(Bcq); + break; + case 1: + len = 0; + break; + } + return len; +} +int +so_ax_kick( +struct usock *up +){ + if(up->cb.ax25 != NULL) + kick_ax25(up->cb.ax25); + return 0; +} +int +so_ax_shut( +struct usock *up, +int how +){ + if(up->cb.ax25 == NULL) + return 0; + switch(how){ + case 0: + case 1: /* Attempt regular disconnect */ + disc_ax25(up->cb.ax25); + break; + case 2: /* Blow it away */ + reset_ax25(up->cb.ax25); + up->cb.ax25 = NULL; + break; + } + return 0; +} +int +so_ax_close( +struct usock *up +){ + if(up->cb.ax25 != NULL){ + /* Tell the CLOSED upcall there's no more socket */ + up->cb.ax25->user = -1; + disc_ax25(up->cb.ax25); + } + return 0; +} +int +so_axui_close( +struct usock *up +){ + Axui_sock = -1; + free_q(&Bcq); + ksignal(&Bcq,0); /* Unblock any reads */ + return 0; +} +/* AX.25 receive upcall */ +void +s_arcall( +struct ax25_cb *axp, +int cnt +){ + int ns; + struct usock *up,*nup,*oup; + union sp sp; + + up = itop(axp->user); + /* When AX.25 data arrives for the first time the AX.25 listener + is notified, if active. If the AX.25 listener is a server its + socket is duplicated in the same manner as in s_tscall(). + */ + if (Axi_sock != -1 && axp->user == -1) { + oup = up = itop(Axi_sock); + /* From now on, use the same upcalls as the listener */ + axp->t_upcall = up->cb.ax25->t_upcall; + axp->r_upcall = up->cb.ax25->r_upcall; + axp->s_upcall = up->cb.ax25->s_upcall; + if (up->cb.ax25->flags.clone) { + /* Clone the socket */ + ns = socket(AF_AX25,SOCK_STREAM,0); + nup = itop(ns); + ASSIGN(*nup,*up); + axp->user = ns; + nup->cb.ax25 = axp; + /* Allocate new memory for the name areas */ + nup->name = mallocw(sizeof(struct sockaddr_ax)); + nup->peername = mallocw(sizeof(struct sockaddr_ax)); + /* Store the new socket # in the old one */ + up->rdysock = ns; + up = nup; + } else { + axp->user = Axi_sock; + del_ax25(up->cb.ax25); + up->cb.ax25 = axp; + /* Allocate space for the peer's name */ + up->peername = mallocw(sizeof(struct sockaddr_ax)); + /* Store the old socket # in the old socket */ + up->rdysock = Axi_sock; + } + /* Load the addresses. Memory for the name has already + * been allocated, either above or in the original bind. + */ + sp.ax = (struct sockaddr_ax *)up->name; + sp.ax->sax_family = AF_AX25; + memcpy(sp.ax->ax25_addr,axp->local,AXALEN); + memcpy(sp.ax->iface,axp->iface->name,ILEN); + up->namelen = sizeof(struct sockaddr_ax); + + sp.ax = (struct sockaddr_ax *)up->peername; + sp.ax->sax_family = AF_AX25; + memcpy(sp.ax->ax25_addr,axp->remote,AXALEN); + memcpy(sp.ax->iface,axp->iface->name,ILEN); + up->peernamelen = sizeof(struct sockaddr_ax); + /* Wake up the guy accepting it, and let him run */ + ksignal(oup,1); + kwait(NULL); + return; + } + /* Wake up anyone waiting, and let them run */ + ksignal(up,1); + kwait(NULL); +} +/* AX.25 transmit upcall */ +void +s_atcall( +struct ax25_cb *axp, +int cnt +){ + /* Wake up anyone waiting, and let them run */ + ksignal(itop(axp->user),1); + kwait(NULL); +} +/* AX25 state change upcall routine */ +void +s_ascall( +/* Nick register */ struct ax25_cb *axp, +int old, +int new +){ + int s; + struct usock *up; + + s = axp->user; + up = itop(s); + + switch(new){ + case LAPB_DISCONNECTED: + /* Clean up. If the user has already closed the socket, + * then up will be null (s was set to -1 by the close routine). + * If not, then this is an abnormal close (e.g., a reset) + * and clearing out the pointer in the socket structure will + * prevent any further operations on what will be a freed + * control block. Also wake up anybody waiting on events + * related to this block so they will notice it disappearing. + */ + if(up != NULL){ + up->errcodes[0] = axp->reason; + up->cb.ax25 = NULL; + } + del_ax25(axp); + break; + default: /* Other transitions are ignored */ + break; + } + ksignal(up,0); /* In case anybody's waiting */ +} + +/* Issue an automatic bind of a local AX25 address */ +static void +autobind( +struct usock *up +){ + struct sockaddr_ax local; + int s; + + s = up->index; + local.sax_family = AF_AX25; + memcpy(local.ax25_addr,Mycall,AXALEN); + bind(s,(struct sockaddr *)&local,sizeof(struct sockaddr_ax)); +} +int +checkaxaddr( +struct sockaddr *name, +int namelen +){ + struct sockaddr_ax *sock; + + sock = (struct sockaddr_ax *)name; + if(sock->sax_family != AF_AX25 || namelen != sizeof(struct sockaddr_ax)) + return -1; + return 0; +} +char * +axpsocket( +struct sockaddr *p +){ + struct sockaddr_ax *axp; + static char buf[30]; + char tmp[11]; + + axp = (struct sockaddr_ax *)p; + pax25(tmp,axp->ax25_addr); + if(strlen(axp->iface) != 0) + sprintf(buf,"%s on %s",tmp,axp->iface); + else + strcpy(buf,tmp); + return buf; +} +char * +axstate( +struct usock *up +){ + return Ax25states[up->cb.ax25->state]; +} +so_ax_stat( +struct usock *up +){ + st_ax25(up->cb.ax25); + return 0; +} diff --git a/src/nos/ax25/kiss.c b/src/nos/ax25/kiss.c new file mode 100644 index 00000000..ddc5a65e --- /dev/null +++ b/src/nos/ax25/kiss.c @@ -0,0 +1,144 @@ +/* Routines for AX.25 encapsulation in KISS TNC + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "kiss.h" +#include "devparam.h" +#include "slip.h" +#include "asy.h" +#include "ax25.h" +#include "pktdrvr.h" +#include +#include "po/messages.h" + +/* Set up a SLIP link to use AX.25 */ +int +kiss_init( +struct iface *ifp +){ + int xdev; + struct slip *sp; + char *ifn; + + for(xdev = 0;xdev < SLIP_MAX;xdev++){ + sp = &Slip[xdev]; + if(sp->iface == NULL) + break; + } + if(xdev >= SLIP_MAX) { + _printf(_("Too many slip devices\n")); + return -1; + } + ifp->ioctl = kiss_ioctl; + ifp->raw = kiss_raw; + ifp->show = slip_status; + + if(ifp->hwaddr == NULL) + ifp->hwaddr = mallocw(AXALEN); + memcpy(ifp->hwaddr,Mycall,AXALEN); + ifp->xdev = xdev; + + sp->iface = ifp; + sp->send = asy_send; + sp->get = get_asy; + sp->type = CL_KISS; + ifp->rxproc = newproc( ifn = if_name( ifp, " rx" ), + 256,slip_rx,xdev,NULL,NULL,0); + free(ifn); + return 0; +} +int +kiss_free( +struct iface *ifp +){ + if(Slip[ifp->xdev].iface == ifp) + Slip[ifp->xdev].iface = NULL; + return 0; +} +/* Send raw data packet on KISS TNC */ +int +kiss_raw( +struct iface *iface, +struct mbuf **bpp +){ + /* Put type field for KISS TNC on front */ + pushdown(bpp,NULL,1); + (*bpp)->data[0] = PARAM_DATA; + /* slip_raw also increments sndrawcnt */ + slip_raw(iface,bpp); + return 0; +} + +/* Process incoming KISS TNC frame */ +void +kiss_recv( +struct iface *iface, +struct mbuf **bpp +){ + char kisstype; + + kisstype = PULLCHAR(bpp); + switch(kisstype & 0xf){ + case PARAM_DATA: + ax_recv(iface,bpp); + break; + default: + free_p(bpp); + break; + } +} +/* Perform device control on KISS TNC by sending control messages */ +int32 +kiss_ioctl( +struct iface *iface, +int cmd, +int set, +int32 val +){ + struct mbuf *hbp; + uint8 *cp; + int rval = 0; + + /* At present, only certain parameters are supported by + * stock KISS TNCs. As additional params are implemented, + * this will have to be edited + */ + switch(cmd){ + case PARAM_RETURN: + set = 1; /* Note fall-thru */ + case PARAM_TXDELAY: + case PARAM_PERSIST: + case PARAM_SLOTTIME: + case PARAM_TXTAIL: + case PARAM_FULLDUP: + case PARAM_HW: + if(!set){ + rval = -1; /* Can't read back */ + break; + } + /* Allocate space for cmd and arg */ + if((hbp = alloc_mbuf(2)) == NULL){ + free_p(&hbp); + rval = -1; + break; + } + cp = hbp->data; + *cp++ = cmd; + *cp = val; + hbp->cnt = 2; + slip_raw(iface,&hbp); /* Even more "raw" than kiss_raw */ + rval = val; /* per Jay Maynard -- mce */ + break; + case PARAM_SPEED: /* These go to the local asy driver */ + case PARAM_DTR: + case PARAM_RTS: + rval = asy_ioctl(iface,cmd,set,val); + break; + default: /* Not implemented */ + rval = -1; + break; + } + return rval; +} diff --git a/src/nos/ax25/lapb.c b/src/nos/ax25/lapb.c new file mode 100644 index 00000000..58a3c2ce --- /dev/null +++ b/src/nos/ax25/lapb.c @@ -0,0 +1,699 @@ +/* Link Access Procedures Balanced (LAPB), the upper sublayer of + * AX.25 Level 2. + * + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "timer.h" +#include "ax25.h" +#include "lapb.h" +#include "ip.h" +#include "netrom.h" + +static void handleit(struct ax25_cb *axp,int pid,struct mbuf **bp); +static void procdata(struct ax25_cb *axp,struct mbuf **bp); +static int ackours(struct ax25_cb *axp,uint16 n); +static void clr_ex(struct ax25_cb *axp); +static void enq_resp(struct ax25_cb *axp); +static void inv_rex(struct ax25_cb *axp); + +/* Process incoming frames */ +int +lapb_input( +struct ax25_cb *axp, /* Link control structure */ +int cmdrsp, /* Command/response flag */ +struct mbuf **bpp /* Rest of frame, starting with ctl */ +){ + int control; + int class; /* General class (I/S/U) of frame */ + uint16 type; /* Specific type (I/RR/RNR/etc) of frame */ + char pf; /* extracted poll/final bit */ + char poll = 0; + char final = 0; + uint16 nr; /* ACK number of incoming frame */ + uint16 ns; /* Seq number of incoming frame */ + uint16 tmp; + + if(bpp == NULL || *bpp == NULL || axp == NULL){ + free_p(bpp); + return -1; + } + + /* Extract the various parts of the control field for easy use */ + if((control = PULLCHAR(bpp)) == -1){ + free_p(bpp); /* Probably not necessary */ + return -1; + } + type = ftype(control); + class = type & 0x3; + pf = control & PF; + /* Check for polls and finals */ + if(pf){ + switch(cmdrsp){ + case LAPB_COMMAND: + poll = YES; + break; + case LAPB_RESPONSE: + final = YES; + break; + } + } + /* Extract sequence numbers, if present */ + switch(class){ + case I: + case I+2: + ns = (control >> 1) & MMASK; + case S: /* Note fall-thru */ + nr = (control >> 5) & MMASK; + break; + } + /* This section follows the SDL diagrams by K3NA fairly closely */ + switch(axp->state){ + case LAPB_DISCONNECTED: + switch(type){ + case SABM: /* Initialize or reset link */ + sendctl(axp,LAPB_RESPONSE,UA|pf); /* Always accept */ + clr_ex(axp); + axp->unack = axp->vr = axp->vs = 0; + lapbstate(axp,LAPB_CONNECTED);/* Resets state counters */ + axp->srt = Axirtt; + axp->mdev = 0; + set_timer(&axp->t1,2*axp->srt); + start_timer(&axp->t3); + break; + case DM: /* Ignore to avoid infinite loops */ + break; + default: /* All others get DM */ + if(poll) + sendctl(axp,LAPB_RESPONSE,DM|pf); + break; + } + break; + case LAPB_SETUP: + switch(type){ + case SABM: /* Simultaneous open */ + sendctl(axp,LAPB_RESPONSE,UA|pf); + break; + case DISC: + sendctl(axp,LAPB_RESPONSE,DM|pf); + break; + case UA: /* Connection accepted */ + /* Note: xmit queue not cleared */ + stop_timer(&axp->t1); + start_timer(&axp->t3); + axp->unack = axp->vr = axp->vs = 0; + lapbstate(axp,LAPB_CONNECTED); + break; + case DM: /* Connection refused */ + free_q(&axp->txq); + stop_timer(&axp->t1); + axp->reason = LB_DM; + lapbstate(axp,LAPB_DISCONNECTED); + break; + default: /* All other frames ignored */ + break; + } + break; + case LAPB_DISCPENDING: + switch(type){ + case SABM: + sendctl(axp,LAPB_RESPONSE,DM|pf); + break; + case DISC: + sendctl(axp,LAPB_RESPONSE,UA|pf); + break; + case UA: + case DM: + stop_timer(&axp->t1); + lapbstate(axp,LAPB_DISCONNECTED); + break; + default: /* Respond with DM only to command polls */ + if(poll) + sendctl(axp,LAPB_RESPONSE,DM|pf); + break; + } + break; + case LAPB_CONNECTED: + switch(type){ + case SABM: + sendctl(axp,LAPB_RESPONSE,UA|pf); + clr_ex(axp); + free_q(&axp->txq); + stop_timer(&axp->t1); + start_timer(&axp->t3); + axp->unack = axp->vr = axp->vs = 0; + lapbstate(axp,LAPB_CONNECTED); /* Purge queues */ + break; + case DISC: + free_q(&axp->txq); + sendctl(axp,LAPB_RESPONSE,UA|pf); + stop_timer(&axp->t1); + stop_timer(&axp->t3); + axp->reason = LB_NORMAL; + lapbstate(axp,LAPB_DISCONNECTED); + break; + case DM: + axp->reason = LB_DM; + lapbstate(axp,LAPB_DISCONNECTED); + break; + case UA: + est_link(axp); + lapbstate(axp,LAPB_SETUP); /* Re-establish */ + break; + case FRMR: + est_link(axp); + lapbstate(axp,LAPB_SETUP); /* Re-establish link */ + break; + case RR: + case RNR: + axp->flags.remotebusy = (control == RNR) ? YES : NO; + if(poll) + enq_resp(axp); + ackours(axp,nr); + break; + case REJ: + axp->flags.remotebusy = NO; + if(poll) + enq_resp(axp); + ackours(axp,nr); + stop_timer(&axp->t1); + start_timer(&axp->t3); + /* This may or may not actually invoke transmission, + * depending on whether this REJ was caused by + * our losing his prior ACK. + */ + inv_rex(axp); + break; + case I: + ackours(axp,nr); /** == -1) */ + if(len_p(axp->rxq) >= axp->window){ + /* Too bad he didn't listen to us; he'll + * have to resend the frame later. This + * drastic action is necessary to avoid + * deadlock. + */ + if(poll) + sendctl(axp,LAPB_RESPONSE,RNR|pf); + free_p(bpp); + break; + } + /* Reject or ignore I-frames with receive sequence number errors */ + if(ns != axp->vr){ + if(axp->proto == V1 || !axp->flags.rejsent){ + axp->flags.rejsent = YES; + sendctl(axp,LAPB_RESPONSE,REJ | pf); + } else if(poll) + enq_resp(axp); + axp->response = 0; + break; + } + axp->flags.rejsent = NO; + axp->vr = (axp->vr+1) & MMASK; + tmp = len_p(axp->rxq) >= axp->window ? RNR : RR; + if(poll){ + sendctl(axp,LAPB_RESPONSE,tmp|PF); + } else { + axp->response = tmp; + } + procdata(axp,bpp); + break; + default: /* All others ignored */ + break; + } + break; + case LAPB_RECOVERY: + switch(type){ + case SABM: + sendctl(axp,LAPB_RESPONSE,UA|pf); + clr_ex(axp); + stop_timer(&axp->t1); + start_timer(&axp->t3); + axp->unack = axp->vr = axp->vs = 0; + lapbstate(axp,LAPB_CONNECTED); /* Purge queues */ + break; + case DISC: + free_q(&axp->txq); + sendctl(axp,LAPB_RESPONSE,UA|pf); + stop_timer(&axp->t1); + stop_timer(&axp->t3); + axp->response = UA; + axp->reason = LB_NORMAL; + lapbstate(axp,LAPB_DISCONNECTED); + break; + case DM: + axp->reason = LB_DM; + lapbstate(axp,LAPB_DISCONNECTED); + break; + case UA: + est_link(axp); + lapbstate(axp,LAPB_SETUP); /* Re-establish */ + break; + case FRMR: + est_link(axp); + lapbstate(axp,LAPB_SETUP); /* Re-establish link */ + break; + case RR: + case RNR: + axp->flags.remotebusy = (control == RNR) ? YES : NO; + if(axp->proto == V1 || final){ + stop_timer(&axp->t1); + ackours(axp,nr); + if(axp->unack != 0){ + inv_rex(axp); + } else { + start_timer(&axp->t3); + lapbstate(axp,LAPB_CONNECTED); + } + } else { + if(poll) + enq_resp(axp); + ackours(axp,nr); + /* Keep timer running even if all frames + * were acked, since we must see a Final + */ + if(!run_timer(&axp->t1)) + start_timer(&axp->t1); + } + break; + case REJ: + axp->flags.remotebusy = NO; + /* Don't insist on a Final response from the old proto */ + if(axp->proto == V1 || final){ + stop_timer(&axp->t1); + ackours(axp,nr); + if(axp->unack != 0){ + inv_rex(axp); + } else { + start_timer(&axp->t3); + lapbstate(axp,LAPB_CONNECTED); + } + } else { + if(poll) + enq_resp(axp); + ackours(axp,nr); + if(axp->unack != 0){ + /* This is certain to trigger output */ + inv_rex(axp); + } + /* A REJ that acks everything but doesn't + * have the F bit set can cause a deadlock. + * So make sure the timer is running. + */ + if(!run_timer(&axp->t1)) + start_timer(&axp->t1); + } + break; + case I: + ackours(axp,nr); /** == -1) */ + /* Make sure timer is running, since an I frame + * cannot satisfy a poll + */ + if(!run_timer(&axp->t1)) + start_timer(&axp->t1); + if(len_p(axp->rxq) >= axp->window){ + /* Too bad he didn't listen to us; he'll + * have to resend the frame later. This + * drastic action is necessary to avoid + * memory deadlock. + */ + sendctl(axp,LAPB_RESPONSE,RNR | pf); + free_p(bpp); + break; + } + /* Reject or ignore I-frames with receive sequence number errors */ + if(ns != axp->vr){ + if(axp->proto == V1 || !axp->flags.rejsent){ + axp->flags.rejsent = YES; + sendctl(axp,LAPB_RESPONSE,REJ | pf); + } else if(poll) + enq_resp(axp); + + axp->response = 0; + break; + } + axp->flags.rejsent = NO; + axp->vr = (axp->vr+1) & MMASK; + tmp = len_p(axp->rxq) >= axp->window ? RNR : RR; + if(poll){ + sendctl(axp,LAPB_RESPONSE,tmp|PF); + } else { + axp->response = tmp; + } + procdata(axp,bpp); + break; + default: + break; /* Ignored */ + } + break; + } + free_p(bpp); /* In case anything's left */ + + /* See if we can send some data, perhaps piggybacking an ack. + * If successful, lapb_output will clear axp->response. + */ + lapb_output(axp); + if(axp->response != 0){ + sendctl(axp,LAPB_RESPONSE,axp->response); + axp->response = 0; + } + return 0; +} +/* Handle incoming acknowledgements for frames we've sent. + * Free frames being acknowledged. + * Return -1 to cause a frame reject if number is bad, 0 otherwise + */ +static int +ackours( +struct ax25_cb *axp, +uint16 n +){ + struct mbuf *bp; + int acked = 0; /* Count of frames acked by this ACK */ + uint16 oldest; /* Seq number of oldest unacked I-frame */ + int32 rtt,abserr; + + /* Free up acknowledged frames by purging frames from the I-frame + * transmit queue. Start at the remote end's last reported V(r) + * and keep going until we reach the new sequence number. + * If we try to free a null pointer, + * then we have a frame reject condition. + */ + oldest = (axp->vs - axp->unack) & MMASK; + while(axp->unack != 0 && oldest != n){ + if((bp = dequeue(&axp->txq)) == NULL){ + /* Acking unsent frame */ + return -1; + } + free_p(&bp); + axp->unack--; + acked++; + if(axp->flags.rtt_run && axp->rtt_seq == oldest){ + /* A frame being timed has been acked */ + axp->flags.rtt_run = 0; + /* Update only if frame wasn't retransmitted */ + if(!axp->flags.retrans){ + rtt = msclock() - axp->rtt_time; + abserr = (rtt > axp->srt) ? rtt - axp->srt : + axp->srt - rtt; + + /* Run SRT and mdev integrators */ + axp->srt = ((axp->srt * 7) + rtt + 4) >> 3; + axp->mdev = ((axp->mdev*3) + abserr + 2) >> 2; + /* Update timeout */ + set_timer(&axp->t1,4*axp->mdev+axp->srt); + } + } + axp->flags.retrans = 0; + axp->retries = 0; + oldest = (oldest + 1) & MMASK; + } + if(axp->unack == 0){ + /* All frames acked, stop timeout */ + stop_timer(&axp->t1); + start_timer(&axp->t3); + } else if(acked != 0) { + /* Partial ACK; restart timer */ + start_timer(&axp->t1); + } + if(acked != 0){ + /* If user has set a transmit upcall, indicate how many frames + * may be queued + */ + if(axp->t_upcall != NULL) + (*axp->t_upcall)(axp,axp->paclen * (axp->maxframe - axp->unack)); + } + return 0; +} + +/* Establish data link */ +void +est_link(axp) +struct ax25_cb *axp; +{ + clr_ex(axp); + axp->retries = 0; + sendctl(axp,LAPB_COMMAND,SABM|PF); + stop_timer(&axp->t3); + start_timer(&axp->t1); +} +/* Clear exception conditions */ +static void +clr_ex(axp) +struct ax25_cb *axp; +{ + axp->flags.remotebusy = NO; + axp->flags.rejsent = NO; + axp->response = 0; + stop_timer(&axp->t3); +} +/* Enquiry response */ +static void +enq_resp(axp) +struct ax25_cb *axp; +{ + char ctl; + + ctl = len_p(axp->rxq) >= axp->window ? RNR|PF : RR|PF; + sendctl(axp,LAPB_RESPONSE,ctl); + axp->response = 0; + stop_timer(&axp->t3); +} +/* Invoke retransmission */ +static void +inv_rex(axp) +struct ax25_cb *axp; +{ + axp->vs -= axp->unack; + axp->vs &= MMASK; + axp->unack = 0; +} +/* Send S or U frame to currently connected station */ +int +sendctl(axp,cmdrsp,cmd) +struct ax25_cb *axp; +int cmdrsp; +int cmd; +{ + if((ftype((char)cmd) & 0x3) == S) /* Insert V(R) if S frame */ + cmd |= (axp->vr << 5); + return sendframe(axp,cmdrsp,cmd,NULL); +} +/* Start data transmission on link, if possible + * Return number of frames sent + */ +int +lapb_output(axp) +register struct ax25_cb *axp; +{ + register struct mbuf *bp; + struct mbuf *tbp; + char control; + int sent = 0; + int i; + + if(axp == NULL + || (axp->state != LAPB_RECOVERY && axp->state != LAPB_CONNECTED) + || axp->flags.remotebusy) + return 0; + + /* Dig into the send queue for the first unsent frame */ + bp = axp->txq; + for(i = 0; i < axp->unack; i++){ + if(bp == NULL) + break; /* Nothing to do */ + bp = bp->anext; + } + /* Start at first unsent I-frame, stop when either the + * number of unacknowledged frames reaches the maxframe limit, + * or when there are no more frames to send + */ + while(bp != NULL && axp->unack < axp->maxframe){ + control = I | (axp->vs++ << 1) | (axp->vr << 5); + axp->vs &= MMASK; + dup_p(&tbp,bp,0,len_p(bp)); + if(tbp == NULL) + return sent; /* Probably out of memory */ + sendframe(axp,LAPB_COMMAND,control,&tbp); + axp->unack++; + /* We're implicitly acking any data he's sent, so stop any + * delayed ack + */ + axp->response = 0; + if(!run_timer(&axp->t1)){ + stop_timer(&axp->t3); + start_timer(&axp->t1); + } + sent++; + bp = bp->anext; + if(!axp->flags.rtt_run){ + /* Start round trip timer */ + axp->rtt_seq = (control >> 1) & MMASK; + axp->rtt_time = msclock(); + axp->flags.rtt_run = 1; + } + } + return sent; +} +/* General purpose AX.25 frame output */ +int +sendframe( +struct ax25_cb *axp, +int cmdrsp, +int ctl, +struct mbuf **data +){ + return axsend(axp->iface,axp->remote,axp->local,cmdrsp,ctl,data); +} +/* Set new link state */ +void +lapbstate( +struct ax25_cb *axp, +int s +){ + int oldstate; + + oldstate = axp->state; + axp->state = s; + if(s == LAPB_DISCONNECTED){ + stop_timer(&axp->t1); + stop_timer(&axp->t3); + free_q(&axp->txq); + } + /* Don't bother the client unless the state is really changing */ + if(oldstate != s && axp->s_upcall != NULL) + (*axp->s_upcall)(axp,oldstate,s); +} +/* Process a valid incoming I frame */ +static void +procdata( +struct ax25_cb *axp, +struct mbuf **bpp +){ + int pid; + int seq; + + /* Extract level 3 PID */ + if((pid = PULLCHAR(bpp)) == -1) + return; /* No PID */ + + if(axp->segremain != 0){ + /* Reassembly in progress; continue */ + seq = PULLCHAR(bpp); + if(pid == PID_SEGMENT + && (seq & SEG_REM) == axp->segremain - 1){ + /* Correct, in-order segment */ + append(&axp->rxasm,bpp); + if((axp->segremain = (seq & SEG_REM)) == 0){ + /* Done; kick it upstairs */ + *bpp = axp->rxasm; + axp->rxasm = NULL; + pid = PULLCHAR(bpp); + handleit(axp,pid,bpp); + } + } else { + /* Error! */ + free_p(&axp->rxasm); + axp->rxasm = NULL; + axp->segremain = 0; + free_p(bpp); + } + } else { + /* No reassembly in progress */ + if(pid == PID_SEGMENT){ + /* Start reassembly */ + seq = PULLCHAR(bpp); + if(!(seq & SEG_FIRST)){ + free_p(bpp); /* not first seg - error! */ + } else { + /* Put first segment on list */ + axp->segremain = seq & SEG_REM; + axp->rxasm = (*bpp); + *bpp = NULL; + } + } else { + /* Normal frame; send upstairs */ + handleit(axp,pid,bpp); + } + } +} +/* New-style frame segmenter. Returns queue of segmented fragments, or + * original packet if small enough + */ +struct mbuf * +segmenter( +struct mbuf **bpp, /* Complete packet */ +uint16 ssize /* Max size of frame segments */ +){ + struct mbuf *result = NULL; + struct mbuf *bptmp; + uint16 len,offset; + int segments; + + /* See if packet is too small to segment. Note 1-byte grace factor + * so the PID will not cause segmentation of a 256-byte IP datagram. + */ + len = len_p(*bpp); + if(len <= ssize+1){ + result = *bpp; + *bpp = NULL; + return result; /* Too small to segment */ + } + ssize -= 2; /* ssize now equal to data portion size */ + segments = 1 + (len - 1) / ssize; /* # segments */ + offset = 0; + + while(segments != 0){ + offset += dup_p(&bptmp,*bpp,offset,ssize); + if(bptmp == NULL){ + free_q(&result); + break; + } + /* Make room for segmentation header */ + pushdown(&bptmp,NULL,2); + bptmp->data[0] = PID_SEGMENT; + bptmp->data[1] = --segments; + if(offset == ssize) + bptmp->data[1] |= SEG_FIRST; + enqueue(&result,&bptmp); + } + free_p(bpp); + return result; +} + +static void +handleit( +struct ax25_cb *axp, +int pid, +struct mbuf **bpp +){ + struct axlink *ipp; + + for(ipp = Axlink;ipp->funct != NULL;ipp++){ + if(ipp->pid == pid) + break; + } + if(ipp->funct != NULL) + (*ipp->funct)(axp->iface,axp,NULL,NULL,bpp,0); + else + free_p(bpp); +} +/* Handle ordinary incoming data (no network protocol) */ +void +axnl3( +struct iface *iface, +struct ax25_cb *axp, +uint8 *src, +uint8 *dest, +struct mbuf **bpp, +int mcast +){ + if(axp == NULL){ + beac_input(iface,src,bpp); + } else { + append(&axp->rxq,bpp); + if(axp->r_upcall != NULL) + (*axp->r_upcall)(axp,len_p(axp->rxq)); + } +} + diff --git a/src/nos/ax25/lapbtime.c b/src/nos/ax25/lapbtime.c new file mode 100644 index 00000000..ce0d09c8 --- /dev/null +++ b/src/nos/ax25/lapbtime.c @@ -0,0 +1,109 @@ +/* LAPB (AX25) timer recovery routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "ax25.h" +#include "timer.h" +#include "lapb.h" + +static void tx_enq(struct ax25_cb *axp); + +/* Called whenever timer T1 expires */ +void +recover(p) +void *p; +{ + register struct ax25_cb *axp = (struct ax25_cb *)p; + + axp->flags.retrans = 1; + axp->retries++; + if((1L << axp->retries) < Blimit) + /* Back off retransmit timer */ + set_timer(&axp->t1,dur_timer(&axp->t1)*2); + + switch(axp->state){ + case LAPB_SETUP: + if(axp->n2 != 0 && axp->retries > axp->n2){ + free_q(&axp->txq); + axp->reason = LB_TIMEOUT; + lapbstate(axp,LAPB_DISCONNECTED); + } else { + sendctl(axp,LAPB_COMMAND,SABM|PF); + start_timer(&axp->t1); + } + break; + case LAPB_DISCPENDING: + if(axp->n2 != 0 && axp->retries > axp->n2){ + axp->reason = LB_TIMEOUT; + lapbstate(axp,LAPB_DISCONNECTED); + } else { + sendctl(axp,LAPB_COMMAND,DISC|PF); + start_timer(&axp->t1); + } + break; + case LAPB_CONNECTED: + case LAPB_RECOVERY: + if(axp->n2 != 0 && axp->retries > axp->n2){ + /* Give up */ + sendctl(axp,LAPB_RESPONSE,DM|PF); + free_q(&axp->txq); + axp->reason = LB_TIMEOUT; + lapbstate(axp,LAPB_DISCONNECTED); + } else { + /* Transmit poll */ + tx_enq(axp); + lapbstate(axp,LAPB_RECOVERY); + } + break; + } +} + + +/* Send a poll (S-frame command with the poll bit set) */ +void +pollthem(p) +void *p; +{ + register struct ax25_cb *axp; + + axp = (struct ax25_cb *)p; + if(axp->proto == V1) + return; /* Not supported in the old protocol */ + switch(axp->state){ + case LAPB_CONNECTED: + axp->retries = 0; + tx_enq(axp); + lapbstate(axp,LAPB_RECOVERY); + break; + } +} +/* Transmit query */ +static void +tx_enq(axp) +register struct ax25_cb *axp; +{ + char ctl; + struct mbuf *bp; + + /* I believe that retransmitting the oldest unacked + * I-frame tends to give better performance than polling, + * as long as the frame isn't too "large", because + * chances are that the I frame got lost anyway. + * This is an option in LAPB, but not in the official AX.25. + */ + if(axp->txq != NULL + && (len_p(axp->txq) < axp->pthresh || axp->proto == V1)){ + /* Retransmit oldest unacked I-frame */ + dup_p(&bp,axp->txq,0,len_p(axp->txq)); + ctl = PF | I | (((axp->vs - axp->unack) & MMASK) << 1) + | (axp->vr << 5); + sendframe(axp,LAPB_COMMAND,ctl,&bp); + } else { + ctl = len_p(axp->rxq) >= axp->window ? RNR|PF : RR|PF; + sendctl(axp,LAPB_COMMAND,ctl); + } + axp->response = 0; + stop_timer(&axp->t3); + start_timer(&axp->t1); +} diff --git a/src/nos/ax25/makefile b/src/nos/ax25/makefile new file mode 100644 index 00000000..89c3988f --- /dev/null +++ b/src/nos/ax25/makefile @@ -0,0 +1,10 @@ +# makefile by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +include ../make.d/host.mk +include auto.mk +$(GENERATE) + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/bin/boot.bin b/src/nos/bin/boot.bin new file mode 100644 index 0000000000000000000000000000000000000000..462c85bc3f5b70c210c904a5ca03db04dcf1e1c4 GIT binary patch literal 2048 zcmcgtYfKbZ6uz^Mx#BXzOxD_6T4iR|@)%zWitG@WAiiR(&}d_0wy9az6^XEG0jtDE zFzv6VR*kX55Nil&f0#64Yr?PAB3?4?x8?%vml5I}@iCU*&yLYSxAf4wKn<7arpA2F zGg84fF)N5NRKd$OL_XlmW3%$^Y9&4QlaWn5_B5GJa85L|kp*w>2(@*v__2MFwory@ z?`-dgv_cLR33Db?r_!8;63JWvH;u^eoQfv2u7d6iOA;8PD^GhWsa=xxOtOf}c4KeD z(lw~F{~GPLpc+4UQ(gsx**bEj_8>Or$K{)=mz=L^_F%PldtTY1h55CWxwI0 z!Lyhbefi%g_XdicZfP=qfCiI-1sU&dZiy(-SckGZwm%w%G>6>WEW0BXQ`+~$+E@jF zEpteH7Za~d`Cff5^M3`xsM7+s0700*HF6b^TPOpMJO*GAa2YUSv!#F}cR2MWQFDvr zikAERFdm^X^X=y>96pmb0^0PtfwMiix zw;%3^_DEp&cv7IjDSq^hW~i2OGK_=qcv)0?4=c>sZ@XyeI&7B#W-mFb8 z*z|!7!vr>ST$WQ`#-=Z;2&pCEymM6H1?*TT$4%gpBUw8&`$cc zcNFd{oDys8=4dP&fumLjsp1w;a$xZzUGnp@rBkomgn!1+;J8br=Y}j;`3@JFr2+Z{TQ!SQH@tSh1KIgX1pjj zfG&ptn}(YJ{Uh6RSqs4g$uto3&R9AjqujlXz#C)TGs=W_I2gs1$8i2U7sF zJbzBywhldWT>p;m950C1^N4)H=L*F#4fyZBK@ER8=jOM3&dsa*py?b5jCiY+DNlZ! zQxMH5{I8Dd;3ef(i;1`*kJIF+QJ738X^D@jOQ`p?1T9ghs!~}?m^NyZS_`aKt@uUI zqDGPFnDKw`Qn3(+(M9g_gUsQ>!A+gxdBsXS^%wr|DLfK=q!mAL$_7 dURUjB3$bSbJ%1z-m%RYl2R0WpYx4ik^*8gk$n5|C literal 0 HcmV?d00001 diff --git a/src/nos/bin/net.bin b/src/nos/bin/net.bin new file mode 100644 index 0000000000000000000000000000000000000000..cb7fc41ec331ba792d08b4062bd444f901ac96f2 GIT binary patch literal 333713 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 a8ey9YqXu0P>qfJ2&8r9hu>~q$=l=rgI$ZYv literal 0 HcmV?d00001 diff --git a/src/nos/c.sh b/src/nos/c.sh new file mode 100644 index 00000000..6d867d73 --- /dev/null +++ b/src/nos/c.sh @@ -0,0 +1,15 @@ +#!/bin/sh +grep "$1" ax25/*.c +grep "$1" clients/*.c +grep "$1" drivers/*.c +grep "$1" dump/*.c +grep "$1" filesys/*.c +grep "$1" internet/*.c +grep "$1" intl/*.c +grep "$1" main/*.c +grep "$1" net/*.c +grep "$1" netrom/*.c +grep "$1" po/*.c +grep "$1" ppp/*.c +grep "$1" servers/*.c +grep "$1" z80/*.c diff --git a/src/nos/clean.sh b/src/nos/clean.sh new file mode 100644 index 00000000..d5356641 --- /dev/null +++ b/src/nos/clean.sh @@ -0,0 +1,16 @@ +#!/bin/sh +rm -frv po/build lib/messages.lib lib/messages_lib +rm -frv ax25/build lib/ax25.lib lib/ax25_lib +rm -frv clients/build lib/clients.lib lib/clients_lib +rm -frv drivers/build lib/drivers.lib lib/drivers_lib +rm -frv dump/build lib/dump.lib lib/dump_lib +rm -frv filesys/build lib/filesys.lib lib/filesys_lib +rm -frv iar/build lib/iar.lib lib/iar_lib +rm -frv internet/build lib/internet.lib lib/internet_lib +rm -frv intl/build lib/intl.lib lib/intl_lib +rm -frv main/build bin/net.bin +rm -frv net/build lib/net.lib lib/net_lib +rm -frv netrom/build lib/netrom.lib lib/netrom_lib +rm -frv ppp/build lib/ppp.lib lib/ppp_lib +rm -frv servers/build lib/servers.lib lib/servers_lib +rm -frv z80/build lib/z80.lib lib/z80_lib diff --git a/src/nos/clients/auto.mk b/src/nos/clients/auto.mk new file mode 100644 index 00000000..30737576 --- /dev/null +++ b/src/nos/clients/auto.mk @@ -0,0 +1,20 @@ +# auto.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +SUBDIRS= + +OUTPUTS= clients.$(LIBEXT) + +clients_$(LIBEXT)_SOURCES= \ + bootp.c finger.c ftpcli.c lterm.c telnet.c +#nntpcli.c popcli.c smtpcli.c tip.c + +ftpcli_c_MODULES= \ + Notsess Ftpcmds doftp doverbose dobatch doupdate dohash \ + doquit doftpcd domkdir dormdir dobinary doascii dotype doget \ + doread domget dolist dols domd5 docompare domcompare compsub \ + getsub doput domput putsub sendport getresp getline keychar + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/clients/bootp.c b/src/nos/clients/bootp.c new file mode 100644 index 00000000..d3cef754 --- /dev/null +++ b/src/nos/clients/bootp.c @@ -0,0 +1,358 @@ +/* + * Center for Information Technology Integration + * The University of Michigan + * Ann Arbor + * + * Dedicated to the public domain. + * Send questions to info@citi.umich.edu + * + * BOOTP is documented in RFC 951 and RFC 1048 + * Delinted, ANSIfied and reformatted - 5/30/91 P. Karn + */ + + +#include +#include "global.h" +#include "mbuf.h" +#include "socket.h" +#include "netuser.h" +#include "udp.h" +#include "iface.h" +#include "ip.h" +#include "internet.h" +#include "domain.h" +#include "rip.h" +#include "cmdparse.h" +#include "bootp.h" +#include +#include "po/messages.h" + +static int bootp_rx(struct iface *ifp,struct mbuf *bp); +static void ntoh_bootp(struct mbuf **bpp,struct bootp *bootpp); +static int mask2width(int32 mask); + +#define BOOTP_TIMEOUT 30 /* Time limit for booting */ +#define BOOTP_RETRANS 5 /* The inteval between sendings */ + +int WantBootp = 0; +static int SilentStartup = 0; + +int +dobootp(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct iface *ifp = NULL; + struct socket lsock, fsock; + struct mbuf *bp; + struct udp_cb *bootp_cb; + register uint8 *cp; + time_t now, /* The current time (seconds) */ + starttime, /* The start time of sending BOOTP */ + lastsendtime; /* The last time of sending BOOTP */ + int i; + + if(argc < 2) /* default to the first interface */ + ifp = Ifaces; + else { + for(i = 1; i != argc; ++i){ + + if((ifp = if_lookup(argv[i])) != NULL) + continue; + else if(strncmp(argv[i], "silent", strlen(argv[i])) == 0) + SilentStartup = 1; + else if(strncmp(argv[i], "noisy", strlen(argv[i])) == 0) + SilentStartup = 0; + else { + _printf(_("bootp [net_name] [silent] [noisy]\n")); + return 1; + } + } + } + + if(ifp == NULL) + return 0; + + lsock.address = ifp->addr; + lsock.port = IPPORT_BOOTPC; + + bootp_cb = open_udp(&lsock,NULL); + + fsock.address = ifp->broadcast; + fsock.port = IPPORT_BOOTPS; + + /* Get boot starting time */ + time(&starttime); + lastsendtime = 0; + + /* Send the bootp request packet until a response is received or time + out */ + for(;;){ + + /* Allow bootp packets should be passed through iproute. */ + WantBootp = 1; + + /* Get the current time */ + time(&now); + + /* Stop, if time out */ + if(now - starttime >= BOOTP_TIMEOUT){ + _printf(_("bootp: timed out, values not set\n")); + break; + } + + /* Don't flood the network, send in intervals */ + if(now - lastsendtime > BOOTP_RETRANS){ + if(!SilentStartup) _printf(_("Requesting...\n")); + + /* Allocate BOOTP packet and fill it in */ + if((bp = alloc_mbuf(sizeof(struct bootp))) == NULL) + break; + + cp = bp->data; /* names per the RFC: */ + *cp++ = BOOTREQUEST; /* op */ + *cp++ = ifp->iftype->type; /* htype */ + *cp++ = ifp->iftype->hwalen; /* hlen */ + *cp++ = 0; /* hops */ + cp = put32(cp,(int32) now); /* xid */ + cp = put16(cp, now - starttime);/* secs */ + cp = put16(cp, 0); /* unused */ + cp = put32(cp, ifp->addr); /* ciaddr */ + cp = put32(cp, 0L); /* yiaddr */ + cp = put32(cp, 0L); /* siaddr */ + cp = put32(cp, 0L); /* giaddr */ + memcpy(cp, ifp->hwaddr, ifp->iftype->hwalen); + cp += 16; /* chaddr */ + memset(cp, 0, 64); /* sname */ + cp += 64; + memset(cp, 0, 128); /* file */ + cp += 128; + memset(cp, 0, 64); /* vend */ + cp += 64; + bp->cnt = cp - bp->data; + /* assert(bp->cnt == BOOTP_LEN) */ + + /* Send out one BOOTP Request packet as a broadcast */ + send_udp(&lsock, &fsock,0,0,&bp,bp->cnt,0,0); + + lastsendtime = now; + } + + /* Give other tasks a chance to run. */ + kwait(NULL); + + /* Test for and process any replies */ + if(recv_udp(bootp_cb, &fsock, &bp) > -1){ + if(bootp_rx(ifp,bp)) + break; + } else if(Net_error != WOULDBLK){ + _printf(_("bootp: Net_error %d, no values set\n"), + Net_error); + break; + } + } + + WantBootp = 0; + del_udp(bootp_cb); + return 0; +} + +/* Process BOOTP input received from 'interface'. */ +static int +bootp_rx(ifp,bp) +struct iface *ifp; +struct mbuf *bp; +{ + int ch; + int count; + int32 gateway = 0; + int32 nameserver = 0; + int32 broadcast, netmask; + struct route *rp; + struct bootp reply; + uint8 *cp; + + if(len_p(bp) != sizeof(struct bootp)){ + free_p(&bp); + return 0; + } + ntoh_bootp(&bp, &reply); + free_p(&bp); + + if(reply.op != BOOTREPLY) + return 0; + + if(!SilentStartup) + _printf(_("Network %s configured:\n"), ifp->name); + + if(ifp->addr == 0){ + Ip_addr = (int) reply.yiaddr.s_addr; /* yiaddr */ + ifp->addr = reply.yiaddr.s_addr; /* yiaddr */ + if(!SilentStartup) + _printf(_(" IP address: %s\n"), + inet_ntoa(ifp->addr)); + } + + + /* now process the vendor-specific block, check for cookie first. */ + cp = reply.vend; + if(get32(cp) != 0x63825363L){ + _printf(_("Invalid magic cookie.\n")); + return(0); + } + + cp += 4; + while(((ch = *cp) != BOOTP_END) && (++cp < (reply.vend + 64))) + switch(ch){ + case BOOTP_PAD: /* They're just padding */ + continue; + case BOOTP_SUBNET: /* fixed length, 4 octets */ + cp++; /* moved past length */ + + /* Set the netmask */ + /* Remove old entry if it exists */ + netmask = get32(cp); + cp += 4; + + rp = rt_blookup(ifp->addr & ifp->netmask,mask2width(ifp->netmask)); + if(rp != NULL) + rt_drop(rp->target,rp->bits); + ifp->netmask = netmask; + rt_add(ifp->addr,mask2width(ifp->netmask),0L,ifp,0L,0L,0); + + if(!SilentStartup) + _printf(_(" Subnet mask: %s\n"), inet_ntoa(netmask)); + + /* Set the broadcast */ + broadcast = ifp->addr | ~(ifp->netmask); + rp = rt_blookup(ifp->broadcast,32); + if(rp != NULL && rp->iface == ifp) + rt_drop(ifp->broadcast,32); + ifp->broadcast = broadcast; + rt_add(ifp->broadcast,32,0L,ifp,1L,0L,1); + + if(!SilentStartup) + _printf(_(" Broadcast: %s\n"), inet_ntoa(broadcast)); + + break; + case BOOTP_HOSTNAME: + count = (int) *cp; + cp++; + + if(Hostname != NULL) + free(Hostname); + Hostname = mallocw(count); + strncpy(Hostname, (char *)cp, count); + cp += count; + + if(!SilentStartup) + _printf(_(" Hostname: %s\n"), Hostname); + break; + case BOOTP_DNS: + count = (int) *cp; + cp++; + + while(count){ + nameserver = get32(cp); + add_nameserver(nameserver); + if(!SilentStartup) + _printf(_(" Nameserver: %s\n"), inet_ntoa(nameserver)); + cp += 4; + count -= 4; + } + break; + case BOOTP_GATEWAY: + count = (int) *cp; + cp++; + + gateway = get32(cp); + + /* Add the gateway as the default */ + rt_add(0,0,gateway,ifp,1,0,0); + + if(!SilentStartup) + _printf(_(" Default gateway: %s\n"), inet_ntoa(gateway)); + cp += count; + break; + default: /* variable field we don't know about */ + count = (int) *cp; + cp++; + + cp += count; + break; + } + + rt_add(ifp->addr,mask2width(ifp->netmask),0L,ifp,1,0,0); + + return(1); +} + + +static void +ntoh_bootp(bpp, bootpp) +struct mbuf **bpp; +struct bootp *bootpp; +{ + bootpp->op = pullchar(bpp); /* op */ + bootpp->htype = pullchar(bpp); /* htype */ + bootpp->hlen = pullchar(bpp); /* hlen */ + bootpp->hops = pullchar(bpp); /* hops */ + bootpp->xid = pull32(bpp); /* xid */ + bootpp->secs = pull16(bpp); /* secs */ + bootpp->unused = pull16(bpp); /* unused */ + bootpp->ciaddr.s_addr = pull32(bpp); /* ciaddr */ + bootpp->yiaddr.s_addr = pull32(bpp); /* ciaddr */ + bootpp->siaddr.s_addr = pull32(bpp); /* siaddr */ + bootpp->giaddr.s_addr = pull32(bpp); /* giaddr */ + pullup(bpp, bootpp->chaddr, 16); /* chaddr */ + pullup(bpp, bootpp->sname, 64); /* sname */ + pullup(bpp, bootpp->file, 128); /* file name */ + pullup(bpp, bootpp->vend, 64); /* vendor */ +} + + + + +int +bootp_validPacket( +struct ip *ip, +struct mbuf *bp +){ + struct udp udp; + struct mbuf *bp1; + + /* Must be a udp packet */ + if(ip->protocol != UDP_PTCL) + return 0; + + /* Invalid if packet is not the right size */ + if(len_p(bp) != (sizeof(struct udp) + sizeof(struct bootp))) + return 0; + + /* Invalid if not a udp bootp packet */ + dup_p(&bp1,bp,0,len_p(bp)); + ntohudp(&udp, &bp); + free_p(&bp); + + return (udp.dest == IPPORT_BOOTPC) ? 1 : 0; +} + +/* Given a network mask, return the number of contiguous 1-bits starting + * from the most significant bit. + */ +static int +mask2width(mask) +int32 mask; +{ + int width,i; + + width = 0; + for(i = 31;i >= 0;i--){ + if(!(mask & (1L << i))) + break; + width++; + } + return width; +} + diff --git a/src/nos/clients/finger.c b/src/nos/clients/finger.c new file mode 100644 index 00000000..3b97dc26 --- /dev/null +++ b/src/nos/clients/finger.c @@ -0,0 +1,92 @@ +/* Internet finger client + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include +#include "global.h" +#include "mbuf.h" +#include "socket.h" +#include "session.h" +#include "proc.h" +#include "netuser.h" +#include "commands.h" +#include "tty.h" +#include +#include "po/messages.h" + +static int keychar(int c); + +int +dofinger(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct sockaddr_in sock; + char *cp; + int s,i; + int c; + struct session *sp; + FILE *network; + + /* Allocate a session descriptor */ + if((sp = newsession(Cmdline,FINGER,1)) == NULL){ + _printf(_("Too many sessions\n")); + keywait(NULL,1); + return 1; + } + sp->inproc = keychar; /* Intercept ^C */ + sp->ttystate.echo = sp->ttystate.edit = 0; + sock.sin_family = AF_INET; + sock.sin_port = IPPORT_FINGER; + for(i=1;inetwork = network = fdopen(s,"r+t"); + _fprintf(network, _("%s\n"),argv[i]); + fflush(stdout); + while((c = getc(network)) != EOF) + putchar(c); + + fclose(network); + sp->network = NULL; + } + keywait(NULL,1); + freesession(sp); + return 0; +} +static int +keychar(c) +int c; +{ + if(c != CTLC) + return 1; /* Ignore all but ^C */ + + _fprintf(Current->output, _("^C\n")); + alert(Current->proc,EABORT); + return 0; +} + diff --git a/src/nos/clients/ftpcli.c b/src/nos/clients/ftpcli.c new file mode 100644 index 00000000..16968947 --- /dev/null +++ b/src/nos/clients/ftpcli.c @@ -0,0 +1,1427 @@ +/* Internet FTP client (interactive user) + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include /* Nick */ +#include "global.h" +#include "mbuf.h" +#include "session.h" +#include "cmdparse.h" +#include "proc.h" +#include "tty.h" +#include "socket.h" +#include "ftp.h" +#include "ftpcli.h" +#include "commands.h" +#include "netuser.h" +#include "dirutil.h" +#include "internet.h" +#include +#include "po/messages.h" + +#define POLLRATE 500 /* 500ms between more file polls */ +#define DIRBUF 256 + +#ifdef MODULE +#define STATIC +extern _char *Notsess; +extern struct cmds Ftpcmds[]; +#else +#define STATIC static +#define MODULE_Notsess +#define MODULE_Ftpcmds +#define MODULE_doftp +#define MODULE_doverbose +#define MODULE_dobatch +#define MODULE_doupdate +#define MODULE_dohash +#define MODULE_doquit +#define MODULE_doftpcd +#define MODULE_domkdir +#define MODULE_dormdir +#define MODULE_dobinary +#define MODULE_doascii +#define MODULE_dotype +#define MODULE_doget +#define MODULE_doread +#define MODULE_domget +#define MODULE_dolist +#define MODULE_dols +#define MODULE_domd5 +#define MODULE_docompare +#define MODULE_domcompare +#define MODULE_compsub +#define MODULE_getsub +#define MODULE_doput +#define MODULE_domput +#define MODULE_putsub +#define MODULE_sendport +#define MODULE_getresp +#define MODULE_getline +#define MODULE_keychar +#endif + +STATIC int doascii(int argc,char *argv[],void *p); +STATIC int dobatch(int argc,char *argv[],void *p); +STATIC int dobinary(int argc,char *argv[],void *p); +STATIC int docompare(int argc,char *argv[],void *p); +STATIC int doftpcd(int argc,char *argv[],void *p); +STATIC int doget(int argc,char *argv[],void *p); +STATIC int dohash(int argc,char *argv[],void *p); +STATIC int doverbose(int argc,char *argv[],void *p); +STATIC int dolist(int argc,char *argv[],void *p); +STATIC int dols(int argc,char *argv[],void *p); +STATIC int domd5(int argc,char *argv[],void *p); +STATIC int domkdir(int argc,char *argv[],void *p); +STATIC int domcompare(int argc,char *argv[],void *p); +STATIC int domget(int argc,char *argv[],void *p); +STATIC int domput(int argc,char *argv[],void *p); +STATIC int doput(int argc,char *argv[],void *p); +STATIC int doquit(int argc,char *argv[],void *p); +STATIC int doread(int argc,char *argv[],void *p); +STATIC int dormdir(int argc,char *argv[],void *p); +STATIC int dotype(int argc,char *argv[],void *p); +STATIC int doupdate(int argc,char *argv[],void *p); +STATIC int getline(struct session *sp,char *prompt,char *buf,int n); +STATIC int getresp(struct ftpcli *ftp,int mincode); +STATIC long getsub(struct ftpcli *ftp,char *command,char *remotename, + FILE *fp); +STATIC long putsub(struct ftpcli *ftp,char *remotename,char *localname); +STATIC int compsub(struct ftpcli *ftp,char *localname,char *remotename); +STATIC void sendport(FILE *fp,struct sockaddr_in *socket); +STATIC int keychar(int c); + +#ifdef MODULE_Notsess +STATIC _char *Notsess = N_("Not an FTP session!\n"); +#endif + +#ifdef MODULE_Ftpcmds +STATIC struct cmds Ftpcmds[] = { + N_(""), donothing, 0, 0, NULL, + N_("ascii"), doascii, 0, 0, NULL, + N_("batch"), dobatch, 0, 0, NULL, + N_("binary"), dobinary, 0, 0, NULL, + N_("cd"), doftpcd, 0, 2, N_("cd "), + N_("compare"), docompare, 0, 2, N_("compare []"), + N_("dir"), dolist, 0, 0, NULL, + N_("list"), dolist, 0, 0, NULL, + N_("get"), doget, 0, 2, N_("get "), + N_("hash"), dohash, 0, 0, NULL, + N_("ls"), dols, 0, 0, NULL, + N_("mcompare"), domcompare, 0, 2, N_("mcompare [ ...]"), + N_("md5"), domd5, 0, 2, N_("md5 "), + N_("mget"), domget, 0, 2, N_("mget [ ...]"), + N_("mkdir"), domkdir, 0, 2, N_("mkdir "), + N_("mput"), domput, 0, 2, N_("mput [ ...]"), + N_("nlst"), dols, 0, 0, NULL, + N_("quit"), doquit, 0, 0, NULL, + N_("read"), doread, 0, 2, N_("read "), + N_("rmdir"), dormdir, 0, 2, N_("rmdir "), + N_("put"), doput, 0, 2, N_("put "), + N_("type"), dotype, 0, 0, NULL, + N_("update"), doupdate, 0, 0, NULL, + N_("verbose"), doverbose, 0, 0, NULL, + NULL, NULL, 0, 0, NULL, +}; +#endif + +/* Handle top-level FTP command */ +#ifdef MODULE_doftp +int +doftp(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct session *sp; + struct ftpcli ftp; + struct sockaddr_in fsocket; + int resp,vsave; + char *bufsav,*cp; + FILE *control; + int s; + + /* Allocate a session control block */ + if((sp = newsession(Cmdline,FTP,1)) == NULL){ + _printf(_("Too many sessions\n")); + return 1; + } + sp->inproc = keychar; + memset(&ftp,0,sizeof(ftp)); + ftp.control = ftp.data = NULL; + ftp.verbose = V_NORMAL; + + sp->cb.ftp = &ftp; /* Downward link */ + ftp.session = sp; /* Upward link */ + + fsocket.sin_family = AF_INET; + if(argc < 3) + fsocket.sin_port = IPPORT_FTP; + else + fsocket.sin_port = atoi(argv[2]); + + if(SETSIG(EABORT)){ + keywait(NULL,1); + freesession(sp); + return 1; + } + _printf(_("Resolving %s...\n"),argv[1]); + if((fsocket.sin_addr.s_addr = resolve(argv[1])) == 0){ + printf(Badhost,argv[1]); + keywait(NULL,1); + freesession(sp); + return 1; + } + /* Open the control connection */ + if((s = socket(AF_INET,SOCK_STREAM,0)) == -1){ + _printf(_("Can't create socket\n")); + keywait(NULL,1); + freesession(sp); + return 1; + } + if(SETSIG(EABORT)){ + goto quit; + } + sp->network = control = ftp.control = fdopen(s,"r+t"); + settos(s,LOW_DELAY); + _printf(_("Trying %s...\n"),psocket(&fsocket)); + if(connect(s,(struct sockaddr *)&fsocket,sizeof(fsocket)) == -1){ + perror("Connect failed"); + goto quit; + } + _printf(_("Connected\n")); + + /* Wait for greeting from server */ + resp = getresp(&ftp,200); + + if(resp >= 400) + goto quit; + /* Now process responses and commands */ + + if(SETSIG(EABORT)){ + /* Come back here after a ^C in command state */ + resp = 200; + } + while(resp != -1){ + switch(resp){ + case 220: + /* Sign-on banner; prompt for and send USER command */ + getline(sp,"Enter user name: ",ftp.buf,LINELEN); + /* Send the command only if the user response + * was non-null + */ + if(ftp.buf[0] != '\n'){ + _fprintf(control, _("USER %s"),ftp.buf); + resp = getresp(&ftp,200); + } else + resp = 200; /* dummy */ + break; + case 331: + /* turn off echo */ + sp->ttystate.echo = 0; + getline(sp,"Password: ",ftp.buf,LINELEN); + _printf(_("\n")); + /* Turn echo back on */ + sp->ttystate.echo = 1; + /* Send the command only if the user response + * was non-null + */ + if(ftp.buf[0] != '\n'){ + _fprintf(control, _("PASS %s"),ftp.buf); + resp = getresp(&ftp,200); + } else + resp = 200; /* dummy */ + break; + case 230: /* Successful login */ + /* Find out what type of system we're talking to */ + _printf(_("ftp> syst\n")); + _fprintf(control, _("SYST\n")); + resp = getresp(&ftp,200); + break; + case 215: + /* Response to SYST command */ + cp = strchr(ftp.line,' '); + if(cp != NULL && strnicmp(cp+1,System,strlen(System)) == 0){ + ftp.type = IMAGE_TYPE; + _printf(_("Defaulting to binary mode\n")); + } + resp = 200; /* dummy */ + break; + default: + /* Test the control channel first */ + if(sockstate(fileno(control)) == NULL){ + resp = -1; + break; + } + getline(sp,"ftp> ",ftp.buf,LINELEN); + + /* Copy because cmdparse modifies the original */ + bufsav = strdupw(ftp.buf); + if((resp = cmdparse(Ftpcmds,ftp.buf,&ftp)) != -1){ + /* Valid command, free buffer and get another */ + FREE(bufsav); + } else { + /* Not a local cmd, send to remote server */ + fputs(bufsav,control); + FREE(bufsav); + + /* Enable display of server response */ + vsave = ftp.verbose; + ftp.verbose = V_NORMAL; + resp = getresp(&ftp,200); + ftp.verbose = vsave; + } + } + } +quit: cp = sockerr(fileno(control)); + _printf(_("Closed: %s\n"),cp != NULL ? cp : "EOF"); + + if(ftp.fp != NULL && ftp.fp != stdout) + fclose(ftp.fp); + if(ftp.data != NULL) + fclose(ftp.data); + if(ftp.control != NULL){ + fclose(ftp.control); + ftp.control = NULL; + sp->network = NULL; + } + keywait(NULL,1); + if(ftp.session != NULL) + freesession(ftp.session); + return 0; +} +#endif + +/* Control verbosity level */ + +#ifdef MODULE_doverbose +STATIC int +doverbose(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + + if((ftp = (struct ftpcli *)p) == NULL) + return -1; + return setshort(&ftp->verbose, _("Verbose"), argc, argv); +} +#endif + +/* Enable/disable command batching */ + +#ifdef MODULE_dobatch +STATIC int +dobatch(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + + if((ftp = (struct ftpcli *)p) == NULL) + return -1; + return setbool(&ftp->batch, _("Command batching"), argc, argv); +} +#endif +/* Enable/disable update flag */ + +#ifdef MODULE_doupdate +STATIC int +doupdate(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + + if((ftp = (struct ftpcli *)p) == NULL) + return -1; + return setbool(&ftp->update, _("Update with MD5"), argc, argv); +} +#endif +/* Set verbosity to high (convenience command) */ + +#ifdef MODULE_dohash +STATIC int +dohash(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + + if((ftp = (struct ftpcli *)p) == NULL) + return -1; + ftp->verbose = V_HASH; + return 0; +} +#endif + +/* Close session */ + +#ifdef MODULE_doquit +STATIC int +doquit(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + + ftp = (struct ftpcli *)p; + if(ftp == NULL) + return -1; + _fprintf(ftp->control, _("QUIT\n")); + getresp(ftp,200); /* Get the closing message */ + getresp(ftp,200); /* Wait for the server to close */ + return -1; +} +#endif + +/* Translate 'cd' to 'cwd' for convenience */ + +#ifdef MODULE_doftpcd +STATIC int +doftpcd(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + + ftp = (struct ftpcli *)p; + if(ftp == NULL) + return -1; + _fprintf(ftp->control, _("CWD %s\n"),argv[1]); + return getresp(ftp,200); +} +#endif +/* Translate 'mkdir' to 'xmkd' for convenience */ + +#ifdef MODULE_domkdir +STATIC int +domkdir(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + + ftp = (struct ftpcli *)p; + if(ftp == NULL) + return -1; + _fprintf(ftp->control, _("XMKD %s\n"),argv[1]); + return getresp(ftp,200); +} +#endif +/* Translate 'rmdir' to 'xrmd' for convenience */ + +#ifdef MODULE_dormdir +STATIC int +dormdir(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + + ftp = (struct ftpcli *)p; + if(ftp == NULL) + return -1; + _fprintf(ftp->control, _("XRMD %s\n"),argv[1]); + return getresp(ftp,200); +} +#endif + +#ifdef MODULE_dobinary +STATIC int +dobinary(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + char *args[2]; + + args[1] = "I"; + return dotype(2,args,p); +} +#endif + +#ifdef MODULE_doascii +STATIC int +doascii(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + char *args[2]; + + args[1] = "A"; + return dotype(2,args,p); +} +#endif + +/* Handle "type" command from user */ + +#ifdef MODULE_dotype +STATIC int +dotype(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + + ftp = (struct ftpcli *)p; + if(ftp == NULL) + return -1; + if(argc < 2){ + switch(ftp->type){ + case IMAGE_TYPE: + _printf(_("Image\n")); + break; + case ASCII_TYPE: + _printf(_("Ascii\n")); + break; + case LOGICAL_TYPE: + _printf(_("Logical bytesize %u\n"),ftp->logbsize); + break; + } + return 0; + } + switch(*argv[1]){ + case 'i': + case 'I': + case 'b': + case 'B': + ftp->type = IMAGE_TYPE; + break; + case 'a': + case 'A': + ftp->type = ASCII_TYPE; + break; + case 'L': + case 'l': + ftp->type = LOGICAL_TYPE; + ftp->logbsize = atoi(argv[2]); + break; + default: + _printf(_("Invalid type %s\n"),argv[1]); + return 1; + } + return 0; +} +#endif +/* Start receive transfer. Syntax: get [] */ + +#ifdef MODULE_doget +STATIC int +doget(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + char *remotename,*localname; + register struct ftpcli *ftp; + FILE *fp; + char *mode; + + ftp = (struct ftpcli *)p; + if(ftp == NULL){ + _printf(Notsess); + return 1; + } + remotename = argv[1]; + if(argc < 3) + localname = remotename; + else + localname = argv[2]; + + switch(ftp->type){ + case IMAGE_TYPE: + case LOGICAL_TYPE: + mode = WRITE_BINARY; + break; + case ASCII_TYPE: + mode = WRITE_TEXT; + break; + } + if((fp = fopen(localname,mode)) == NULL){ + _printf(_("Can't write %s"),localname); + perror(""); + return 1; + } + getsub(ftp,"RETR",remotename,fp); + fclose(fp); + return 0; +} +#endif +/* Read file direct to screen. Syntax: read */ + +#ifdef MODULE_doread +STATIC int +doread(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + + if((ftp = (struct ftpcli *)p) == NULL){ + _printf(Notsess); + return 1; + } + getsub(ftp,"RETR",argv[1],stdout); + return 0; +} +#endif +/* Get a collection of files */ + +#ifdef MODULE_domget +STATIC int +domget(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + FILE *files,*fp; + char *buf,*mode; + int i; + long r; + + if((ftp = (struct ftpcli *)p) == NULL){ + _printf(Notsess); + return 1; + } + switch(ftp->type){ + case IMAGE_TYPE: + case LOGICAL_TYPE: + mode = WRITE_BINARY; + break; + case ASCII_TYPE: + mode = WRITE_TEXT; + break; + } + buf = mallocw(DIRBUF); + ftp->state = RECEIVING_STATE; + for(i=1;iabort) + break; /* Aborted */ + if(r == -1){ + _printf(_("Can't NLST %s\n"),argv[i]); + continue; + } + /* The tmp file now contains a list of the remote files, so + * go get 'em. Break out if the user signals an abort. + */ + rewind(files); + while(fgets(buf,DIRBUF,files) != NULL){ + rip(buf); + if(!ftp->update || compsub(ftp,buf,buf) != 0){ + if((fp = fopen(buf,mode)) == NULL){ + _printf(_("Can't write %s"),buf); + perror(""); + continue; + } + getsub(ftp,"RETR",buf,fp); + fclose(fp); + } + if(ftp->abort){ + /* User abort */ + ftp->abort = 0; + fclose(files); + free(buf); + ftp->state = COMMAND_STATE; + return 1; + } + } + fclose(files); + } + free(buf); + ftp->state = COMMAND_STATE; + ftp->abort = 0; + return 0; +} +#endif +/* List remote directory. Syntax: dir [] */ + +#ifdef MODULE_dolist +STATIC int +dolist(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + FILE *fp; + + ftp = (struct ftpcli *)p; + if(ftp == NULL){ + _printf(Notsess); + return 1; + } + + if(argc > 2) + fp = fopen(argv[2],WRITE_TEXT); + + else + fp = stdout; + + if(fp == NULL){ + _printf(_("Can't write local file")); + perror(""); + return 1; + } + + getsub(ftp,"LIST",argv[1],fp); + return 0; +} +#endif +/* Remote directory list, short form. Syntax: ls [] */ + +#ifdef MODULE_dols +STATIC int +dols(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + FILE *fp; + + if((ftp = (struct ftpcli *)p) == NULL){ + _printf(Notsess); + return 1; + } + if(argc > 2) + fp = fopen(argv[2],WRITE_TEXT); + + else + fp = stdout; + + if(fp == NULL){ + _printf(_("Can't write local file")); + perror(""); + return 1; + } + getsub(ftp,"NLST",argv[1],fp); + return 0; +} +#endif + +#ifdef MODULE_domd5 +STATIC int +domd5(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + char *remotename; + register struct ftpcli *ftp; + FILE *control; + int resp; + int typewait = 0; + + ftp = (struct ftpcli *)p; + if(ftp == NULL){ + _printf(Notsess); + return 1; + } + control = ftp->control; + remotename = argv[1]; + if(ftp->typesent != ftp->type){ + switch(ftp->type){ + case ASCII_TYPE: + _fprintf(control, _("TYPE A\n")); + break; + case IMAGE_TYPE: + _fprintf(control, _("TYPE I\n")); + break; + case LOGICAL_TYPE: + _fprintf(control, _("TYPE L %d\n"),ftp->logbsize); + break; + } + ftp->typesent = ftp->type; + if(!ftp->batch){ + resp = getresp(ftp,200); + if(resp == -1 || resp > 299) + goto failure; + } else + typewait = 1; + + } + _fprintf(control, _("XMD5 %s\n"),remotename); + if(typewait) + (void)getresp(ftp,200); + (void)getresp(ftp,200); +failure:; + return 0; +} +#endif + +#ifdef MODULE_docompare +STATIC int +docompare(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + char *remotename,*localname; + register struct ftpcli *ftp; + + ftp = (struct ftpcli *)p; + if(ftp == NULL){ + _printf(Notsess); + return 1; + } + remotename = argv[1]; + if(argc > 2) + localname = argv[2]; + else + localname = remotename; + + if(compsub(ftp,localname,remotename) == 0) + _printf(_("Same\n")); + else + _printf(_("Different\n")); + return 0; +} +#endif +/* Compare a collection of files */ + +#ifdef MODULE_domcompare +STATIC int +domcompare(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + FILE *files; + char *buf; + int i; + long r; + + if((ftp = (struct ftpcli *)p) == NULL){ + _printf(Notsess); + return 1; + } + buf = mallocw(DIRBUF); + ftp->state = RECEIVING_STATE; + for(i=1;iabort) + break; /* Aborted */ + if(r == -1){ + _printf(_("Can't NLST %s\n"),argv[i]); + continue; + } + /* The tmp file now contains a list of the remote files, so + * go get 'em. Break out if the user signals an abort. + */ + rewind(files); + while(fgets(buf,DIRBUF,files) != NULL){ + rip(buf); + if(compsub(ftp,buf,buf) == 0) + _printf(_("%s - Same\n"),buf); + else + _printf(_("%s - Different\n"),buf); + + if(ftp->abort){ + /* User abort */ + ftp->abort = 0; + fclose(files); + free(buf); + ftp->state = COMMAND_STATE; + return 1; + } + } + fclose(files); + } + free(buf); + ftp->state = COMMAND_STATE; + ftp->abort = 0; + return 0; +} +#endif +/* Common subroutine to compare a local with a remote file + * Return 1 if files are different, 0 if they are the same + */ + +#ifdef MODULE_compsub +STATIC int +compsub(ftp,localname,remotename) +struct ftpcli *ftp; +char *localname; +char *remotename; +{ + char *mode,*cp; + FILE *control,*fp; + int resp,i; + int typewait = 0; + uint8 remhash[16]; + uint8 lochash[16]; + + control = ftp->control; + + switch(ftp->type){ + case IMAGE_TYPE: + case LOGICAL_TYPE: + mode = READ_BINARY; + break; + case ASCII_TYPE: + mode = READ_TEXT; + break; + } + if((fp = fopen(localname,mode)) == NULL){ + _printf(_("Can't read local file %s\n"),localname); + return 1; + } + if(ftp->typesent != ftp->type){ + switch(ftp->type){ + case ASCII_TYPE: + _fprintf(control, _("TYPE A\n")); + break; + case IMAGE_TYPE: + _fprintf(control, _("TYPE I\n")); + break; + case LOGICAL_TYPE: + _fprintf(control, _("TYPE L %d\n"),ftp->logbsize); + break; + } + ftp->typesent = ftp->type; + if(!ftp->batch){ + resp = getresp(ftp,200); + if(resp == -1 || resp > 299) + goto failure; + } else + typewait = 1; + } + _fprintf(control, _("XMD5 %s\n"),remotename); + /* Try to overlap the two MD5 operations */ + md5hash(fp,lochash,ftp->type == ASCII_TYPE); + fclose(fp); + if(typewait && (resp = getresp(ftp,200)) > 299) + goto failure; + if((resp = getresp(ftp,200)) > 299){ + if(resp == 500) + ftp->update = 0; /* XMD5 not supported */ + goto failure; + } + if((cp = strchr(ftp->line,' ')) == NULL){ + _printf(_("Error in response\n")); + goto failure; + } + /* Convert ascii/hex back to binary */ + readhex(remhash,cp,sizeof(remhash)); + if(ftp->verbose > 1){ + _printf(_("Loc ")); + for(i=0;itype; + control = ftp->control; + + /* Open the data connection */ + d = socket(AF_INET,SOCK_STREAM,0); + listen(d,0); /* Accept only one connection */ + + switch(ftp->type){ + case IMAGE_TYPE: + case LOGICAL_TYPE: + ftp->data = fdopen(d,"r+b"); + break; + case ASCII_TYPE: + ftp->data = fdopen(d,"r+t"); + break; + } + prevstate = ftp->state; + ftp->state = RECEIVING_STATE; + + /* Send TYPE message, if necessary */ + if(strcmp(command,"LIST") == 0 || strcmp(command,"NLST") == 0){ + /* Directory listings are always in ASCII */ + ftp->type = ASCII_TYPE; + } + if(ftp->typesent != ftp->type){ + switch(ftp->type){ + case ASCII_TYPE: + _fprintf(control, _("TYPE A\n")); + break; + case IMAGE_TYPE: + _fprintf(control, _("TYPE I\n")); + break; + case LOGICAL_TYPE: + _fprintf(control, _("TYPE L %d\n"),ftp->logbsize); + break; + } + ftp->typesent = ftp->type; + if(!ftp->batch){ + resp = getresp(ftp,200); + if(resp == -1 || resp > 299) + goto failure; + } else + typewait = 1; + } + /* Send the PORT message. Use the IP address + * on the local end of our control connection. + */ + i = SOCKSIZE; + getsockname(d,(struct sockaddr *)&lsocket,&i); /* Get port number */ + i = SOCKSIZE; + getsockname(fileno(ftp->control),(struct sockaddr *)&lcsocket,&i); + lsocket.sin_addr.s_addr = lcsocket.sin_addr.s_addr; + sendport(control,&lsocket); + if(!ftp->batch){ + /* Get response to PORT command */ + resp = getresp(ftp,200); + if(resp == -1 || resp > 299) + goto failure; + } + + /* Generate the command to start the transfer */ + if(remotename != NULL) + _fprintf(control, _("%s %s\n"),command,remotename); + else + _fprintf(control, _("%s\n"),command); + + if(ftp->batch){ + /* Get response to TYPE command, if sent */ + if(typewait){ + resp = getresp(ftp,200); + if(resp == -1 || resp > 299) + goto failure; + } + /* Get response to PORT command */ + resp = getresp(ftp,200); + if(resp == -1 || resp > 299) + goto failure; + } + /* Get the intermediate "150" response */ + resp = getresp(ftp,100); + if(resp == -1 || resp >= 400) + goto failure; + + /* Wait for the server to open the data connection */ + cnt = 0; + d = accept(d,NULL,&cnt); + startclk = msclock(); + + /* If output is to the screen, temporarily disable hash marking */ + vsave = ftp->verbose; + if(vsave >= V_HASH && fp == NULL) + ftp->verbose = V_NORMAL; + total = recvfile(fp,ftp->data,ftp->type,ftp->verbose); + /* Immediately close the data connection; some servers (e.g., TOPS-10) + * wait for the data connection to close completely before returning + * the completion message on the control channel + */ + fclose(ftp->data); + ftp->data = NULL; + +#ifdef CPM + if(fp != NULL && ftp->type == ASCII_TYPE) + putc(CTLZ,fp); +#endif + if(remotename == NULL) + remotename = ""; + if(total == -1){ + _printf(_("%s %s: Error/abort during data transfer\n"),command,remotename); + } else if(ftp->verbose >= V_SHORT){ + startclk = msclock() - startclk; + rate = 0; + if(startclk != 0){ /* Avoid divide-by-zero */ + if(total < 4294967L) { + rate = (total*1000)/startclk; + } else { /* Avoid overflow */ + rate = total/(startclk/1000); + } + } + _printf(_("%s %s: %lu bytes in %lu sec (%lu/sec)\n"), + command,remotename, total,startclk/1000,rate); + } + /* Get the "Sent" message */ + getresp(ftp,200); + + ftp->state = prevstate; + ftp->verbose = vsave; + ftp->type = savmode; + return total; + +failure: + /* Error, quit */ + if(fp != NULL && fp != stdout) + fclose(fp); + fclose(ftp->data); + ftp->data = NULL; + ftp->state = prevstate; + ftp->type = savmode; + return -1; +} +#endif +/* Send a file. Syntax: put [] */ + +#ifdef MODULE_doput +STATIC int +doput(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + char *remotename,*localname; + + if((ftp = (struct ftpcli *)p) == NULL){ + _printf(Notsess); + return 1; + } + localname = argv[1]; + if(argc < 3) + remotename = localname; + else + remotename = argv[2]; + + putsub(ftp,remotename,localname); + return 0; +} +#endif +/* Put a collection of files */ + +#ifdef MODULE_domput +STATIC int +domput(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct ftpcli *ftp; + FILE *files; + int i; + char *buf; + + if((ftp = (struct ftpcli *)p) == NULL){ + _printf(Notsess); + return 1; + } + if((files = tmpfile()) == NULL){ + _printf(_("Can't list local files\n")); + return 1; + } + for(i=1;istate = SENDING_STATE; + while(fgets(buf,DIRBUF,files) != NULL){ + rip(buf); + if(!ftp->update || compsub(ftp,buf,buf) != 0) + putsub(ftp,buf,buf); + if(ftp->abort) + break; /* User abort */ + } + fclose(files); + free(buf); + ftp->state = COMMAND_STATE; + ftp->abort = 0; + return 0; +} +#endif +/* Common code to put, mput. + * Returns number of bytes sent if successful + * Returns -1 on error + */ + +#ifdef MODULE_putsub +STATIC long +putsub(ftp,remotename,localname) +register struct ftpcli *ftp; +char *remotename,*localname; +{ + char *mode; + int i,resp,d; + unsigned long total; + FILE *fp,*control; + struct sockaddr_in lsocket,lcsocket; + int32 startclk,rate; + int typewait = 0; + int prevstate; + + control = ftp->control; + if(ftp->type == IMAGE_TYPE) + mode = READ_BINARY; + else + mode = READ_TEXT; + + /* Open the file */ + if((fp = fopen(localname,mode)) == NULL){ +#if 1 /* Nick */ + _printf(_("Can't read %s: %s\n"),localname,strerror(errno)); +#else + _printf(_("Can't read %s: %s\n"),localname,sys_errlist[errno]); +#endif + return -1; + } + if(ftp->type == ASCII_TYPE && isbinary(fp)){ + _printf(_("Warning: type is ASCII and %s appears to be binary\n"),localname); + } + /* Open the data connection */ + d = socket(AF_INET,SOCK_STREAM,0); + ftp->data = fdopen(d,"w+"); + listen(d,0); + prevstate = ftp->state; + ftp->state = SENDING_STATE; + + /* Send TYPE message, if necessary */ + if(ftp->typesent != ftp->type){ + switch(ftp->type){ + case ASCII_TYPE: + _fprintf(control, _("TYPE A\n")); + break; + case IMAGE_TYPE: + _fprintf(control, _("TYPE I\n")); + break; + case LOGICAL_TYPE: + _fprintf(control, _("TYPE L %d\n"),ftp->logbsize); + break; + } + ftp->typesent = ftp->type; + + /* Get response to TYPE command */ + if(!ftp->batch){ + resp = getresp(ftp,200); + if(resp == -1 || resp > 299){ + goto failure; + } + } else + typewait = 1; + } + /* Send the PORT message. Use the IP address + * on the local end of our control connection. + */ + i = SOCKSIZE; + getsockname(d,(struct sockaddr *)&lsocket,&i); + i = SOCKSIZE; + getsockname(fileno(ftp->control),(struct sockaddr *)&lcsocket,&i); + lsocket.sin_addr.s_addr = lcsocket.sin_addr.s_addr; + sendport(control,&lsocket); + if(!ftp->batch){ + /* Get response to PORT command */ + resp = getresp(ftp,200); + if(resp == -1 || resp > 299){ + goto failure; + } + } + /* Generate the command to start the transfer */ + _fprintf(control, _("STOR %s\n"),remotename); + + if(ftp->batch){ + /* Get response to TYPE command, if sent */ + if(typewait){ + resp = getresp(ftp,200); + if(resp == -1 || resp > 299){ + goto failure; + } + } + /* Get response to PORT command */ + resp = getresp(ftp,200); + if(resp == -1 || resp > 299){ + goto failure; + } + } + /* Get the intermediate "150" response */ + resp = getresp(ftp,100); + if(resp == -1 || resp >= 400){ + goto failure; + } + + /* Wait for the data connection to open. Otherwise the first + * block of data would go out with the SYN, and this may confuse + * some other TCPs + */ + accept(d,NULL,(int *)NULL); + + startclk = msclock(); + + total = sendfile(fp,ftp->data,ftp->type,ftp->verbose); + fflush(ftp->data); + shutdown(fileno(ftp->data),1); /* Send EOF (FIN) */ + fclose(fp); + + /* Wait for control channel ack before calculating transfer time; + * this accounts for transmitted data in the pipe + */ + getresp(ftp,200); + fclose(ftp->data); + ftp->data = NULL; + + if(total == -1){ + _printf(_("STOR %s: Error/abort during data transfer\n"),remotename); + } else if(ftp->verbose >= V_SHORT){ + startclk = msclock() - startclk; + rate = 0; + if(startclk != 0){ /* Avoid divide-by-zero */ + if(total < 4294967L) { + rate = (total*1000)/startclk; + } else { /* Avoid overflow */ + rate = total/(startclk/1000); + } + } + _printf(_("STOR %s: %lu bytes in %lu sec (%lu/sec)\n"), + remotename,total,startclk/1000,rate); + } + ftp->state = prevstate; + return total; + +failure: + /* Error, quit */ + fclose(fp); + fclose(ftp->data); + ftp->data = NULL; + ftp->state = prevstate; + return -1; +} +#endif +/* send PORT message */ + +#ifdef MODULE_sendport +STATIC void +sendport(fp,socket) +FILE *fp; +struct sockaddr_in *socket; +{ + /* Send PORT a,a,a,a,p,p message */ + _fprintf(fp, _("PORT %u,%u,%u,%u,%u,%u\n"), + hibyte(hiword(socket->sin_addr.s_addr)), + lobyte(hiword(socket->sin_addr.s_addr)), + hibyte(loword(socket->sin_addr.s_addr)), + lobyte(loword(socket->sin_addr.s_addr)), + hibyte(socket->sin_port), + lobyte(socket->sin_port)); +} +#endif + +/* Wait for, read and display response from FTP server. Return the result code. + */ + +#ifdef MODULE_getresp +STATIC int +getresp(ftp,mincode) +struct ftpcli *ftp; +int mincode; /* Keep reading until at least this code comes back */ +{ + int rval; + + fflush(ftp->control); + for(;;){ + /* Get line */ + if(fgets(ftp->line,LINELEN,ftp->control) == NULL){ + rval = -1; + break; + } + rip(ftp->line); /* Remove cr/lf */ + rval = atoi(ftp->line); + if(rval >= 400 || ftp->verbose >= V_NORMAL) + _printf(_("%s\n"),ftp->line); /* Display to user */ + + /* Messages with dashes are continued */ + if(ftp->line[3] != '-' && rval >= mincode) + break; + } + return rval; +} +#endif + +/* Issue a prompt and read a line from the user */ + +#ifdef MODULE_getline +STATIC int +getline(sp,prompt,buf,n) +struct session *sp; +char *prompt; +char *buf; +int n; +{ + printf(prompt); + fflush(stdout); + fgets(buf,n,stdin); + return strlen(buf); +} +#endif + +#ifdef MODULE_keychar +STATIC int +keychar(c) +int c; +{ + struct ftpcli *ftp; + + if(c != CTLC) + return 1; /* Ignore all but ^C */ + + _fprintf(Current->output, _("^C\n")); + ftp = Current->cb.ftp; + switch(ftp->state){ + case COMMAND_STATE: + alert(Current->proc,EABORT); + break; + case SENDING_STATE: + /* Send a premature EOF. + * Unfortunately we can't just reset the connection + * since the remote side might end up waiting forever + * for us to send something. + */ + shutdown(fileno(ftp->data),1); /* Note fall-thru */ + ftp->abort = 1; + break; + case RECEIVING_STATE: + /* Just blow away the receive socket */ + shutdown(fileno(ftp->data),2); /* Note fall-thru */ + ftp->abort = 1; + break; + } + return 0; +} +#endif diff --git a/src/nos/clients/lterm.c b/src/nos/clients/lterm.c new file mode 100644 index 00000000..bf8fc746 --- /dev/null +++ b/src/nos/clients/lterm.c @@ -0,0 +1,126 @@ +/* Support local term on com port */ +#include +#include "global.h" +#include "internet.h" +#include "netuser.h" +#include "socket.h" +#include "session.h" +#include "n8250.h" +#include "asy.h" +#include +#include "po/messages.h" + +static void lterm_rx(int,void *,void *); + +int +dolterm(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + FILE *network = NULL; + struct iface *ifp; + int (*rawsave)(struct iface *,struct mbuf **); + int s; /* Network socket */ + struct sockaddr_in fsocket; + struct session *sp; + int c; + int otrigchar; + + if((ifp = if_lookup(argv[1])) == NULL){ + _printf(_("Interface %s unknown\n"),argv[1]); + return 1; + } + if(ifp->dev >= ASY_MAX || Asy[ifp->dev].iface != ifp ){ + _printf(_("Interface %s not asy port\n"),argv[1]); + return 1; + } + if(ifp->raw == bitbucket){ + _printf(_("tip or dialer session already active on %s\n"),argv[1]); + return 1; + } + fsocket.sin_family = AF_INET; + if((fsocket.sin_addr.s_addr = resolve(argv[2])) == 0){ + printf(Badhost,argv[2]); + keywait(NULL,1); + freesession(sp); + return 1; + } + if(argc > 3) + fsocket.sin_port = atoi(argv[3]); + else + fsocket.sin_port = IPPORT_TELNET; + + /* Allocate a session descriptor */ + if((sp = newsession(Cmdline,TIP,1)) == NULL){ + _printf(_("Too many sessions\n")); + return 1; + } + /* Save output handler and temporarily redirect output to null */ + rawsave = ifp->raw; + ifp->raw = bitbucket; + + /* Suspend the packet input driver. Note that the transmit driver + * is left running since we use it to send buffers to the line. + */ + suspend(ifp->rxproc); + + /* Temporarily change the trigger character */ + otrigchar = Asy[ifp->dev].trigchar; + Asy[ifp->dev].trigchar = -1; + +#ifdef notdef + /* Wait for CD (wired to DTR from local terminal) to go high */ + get_rlsd_asy(ifp->dev,1); +#endif + if((s = socket(AF_INET,SOCK_STREAM,0)) == -1){ + _printf(_("Can't create socket\n")); + keywait(NULL,1); + freesession(sp); + goto cleanup; + } + settos(s,LOW_DELAY); + network = fdopen(s,"r+b"); + setvbuf(network,NULL,_IONBF,0); + if(connect(s,(struct sockaddr *)&fsocket,SOCKSIZE) == -1){ + perror("connect failed"); + keywait(NULL,1); + freesession(sp); + goto cleanup; + } + /* Spawn task to handle network -> serial port traffic */ + sp->proc1 = newproc("lterm",512,lterm_rx,ifp->dev,(void *)network,NULL,0); + + /* Loop sending from the serial port to the network */ + while((c = get_asy(ifp->dev)) != -1){ + putchar(c); + putc(c,network); + fflush(network); + } +cleanup: + killproc(sp->proc1); + sp->proc1 = NULL; + ifp->raw = rawsave; + resume(ifp->rxproc); + keywait(NULL,1); + freesession(sp); + return 0; +} +/* Task to handle network -> serial port traffic */ +static void +lterm_rx(dev,n1,n2) +int dev; +void *n1,*n2; +{ + int c; + char c1; + FILE *network = (FILE *)n1; + + while((c = fgetc(network)) != EOF){ + c1 = c; + putchar(c1); + asy_write(dev,(uint8 *)&c1,1); + Asy[dev].iface->lastsent = secclock(); + } +} + diff --git a/src/nos/clients/makefile b/src/nos/clients/makefile new file mode 100644 index 00000000..89c3988f --- /dev/null +++ b/src/nos/clients/makefile @@ -0,0 +1,10 @@ +# makefile by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +include ../make.d/host.mk +include auto.mk +$(GENERATE) + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/clients/nntpcli.c b/src/nos/clients/nntpcli.c new file mode 100644 index 00000000..7aa2634e --- /dev/null +++ b/src/nos/clients/nntpcli.c @@ -0,0 +1,739 @@ +/* + * Client routines for Network News Tranfer Protocol ala RFC977 + * + * Copyright 1990 Anders Klemets - SM0RGV, All Rights Reserved. + * Permission granted for non-commercial copying and use, provided + * this notice is retained. + * + * Changes copyright 1990 Bernie Roehl, All Rights Reserved. + * Permission granted for non-commercial copying and use, provided + * this notice is retained. + * + * Revision history: + * + * May 11, 1990 - br checked for invalid chars in news filenames + * + * May 10, 1990 - br changed date stamp in 'From ' lines to + * seconds since GMT (to make parsing and expiry easier) + * + * May 9, 1990 - br added locking of nntp.dat and history files, + * second parameter to NNTP DIR, fixed bug in updating of + * nntp.dat + * + * early May, 1990 -- br added NNTP TRACE, NNTP DIR, + * server-specific newsgroups and connection windows, + * locking of newsgroup files using mlock() and rmlock(), + * date stamping of 'From ' lines, increased stack space, + * updating of nntp.dat only on successful sessions. + * + * July 19, 1990 pa0gri Delinted and cleaned up. (calls and includes) + * + */ +#include +#include +#include +#include +#include +#include /* for strchr() */ +#ifdef __TURBOC__ +#include +#endif +#include "global.h" +#include "timer.h" +#include "cmdparse.h" +#include "commands.h" +#include "socket.h" +#include "usock.h" +#include "netuser.h" +#include "proc.h" +#include "smtp.h" +#include "files.h" +#include +#include "po/messages.h" +#include "nos/logmsg.h" + +#define NNTPMAXLEN 512 + +struct nntpservers { + struct timer nntpcli_t; + char *name; + char *groups; + int lowtime, hightime; /* for connect window */ + struct nntpservers *next; +}; + +#define MAXGROUPDIRS 10 + +static struct grouploc { + char *prefix; /* e.g. comp, rec, net, talk, alt ... */ + char *directory; /* directory where these groups should be */ + } groupdirs[MAXGROUPDIRS] = { NULL, NULL }; + +struct nntpservers *Nntpservers = NULL; +static char *Nntpgroups = NULL; +static unsigned short nntptrace = 1; + +static char *validchars = "abcdefghijklmnopqrstuvwxyz0123456789-_"; + +static void nntptick(void *tp); +static void nntp_job(int i1,void *tp,void *v1); +static int gettxt(FILE *network,FILE *fp); +static int getreply(FILE *network); +static int getarticle(FILE *network,char *msgid); +static int dogroups(int argc,char *argv[],void *p); +static int doadds(int argc,char *argv[],void *p); +static int dodrops(int argc,char *argv[],void *p); +static int dokicks(int argc,char *argv[],void *p); +static int dolists(int argc,char *argv[],void *p); +static int donntrace(int argc,char *argv[],void *p); +static int dondir(int argc,char *argv[],void *p); + +/* Tracing levels: + 0 - no tracing + 1 - serious errors reported + 2 - transient errors reported + 3 - session progress reported + 4 - actual received articles displayed + */ + +static struct cmds Nntpcmds[] = { + N_("addserver"), doadds, 0, 3, + N_("nntp addserver "), + N_("directory"), dondir, 0, 0, NULL, + N_("dropserver"), dodrops, 0, 2, + N_("nntp dropserver "), + N_("groups"), dogroups, 0, 0, NULL, + N_("kick"), dokicks, 0, 2, + N_("nntp kick "), + N_("listservers"), dolists, 0, 0, NULL, + N_("trace"), donntrace, 0, 0, NULL, + NULL, +}; + +int +donntp(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Nntpcmds,argc,argv,p); +} + +static int +doadds(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct nntpservers *np; + for(np = Nntpservers; np != NULL; np = np->next) + if(stricmp(np->name,argv[1]) == 0) + break; + if (np == NULL) { + np = (struct nntpservers *) callocw(1,sizeof(struct nntpservers)); + np->name = strdupw(argv[1]); + np->next = Nntpservers; + Nntpservers = np; + np->groups = NULL; + np->lowtime = np->hightime = -1; + np->nntpcli_t.func = nntptick; /* what to call on timeout */ + np->nntpcli_t.arg = (void *)np; + } + if (argc > 3) { + int i; + if (np->groups == NULL) { + np->groups = mallocw(NNTPMAXLEN); + *np->groups = '\0'; + } + for (i = 3; i < argc; ++i) { + if (isdigit(*argv[i])) { + int lh, ll, hh, hl; + sscanf(argv[i], "%d:%d-%d:%d", &lh, &ll, &hh, &hl); + np->lowtime = lh * 100 + ll; + np->hightime = hh * 100 + hl; + } else if ((strlen(np->groups)+strlen(argv[i])+2) >= NNTPMAXLEN) + _printf(_("Group list too long! Group '%s' ignored!\n"), argv[i]); + else { /* it's a group, and it fits... add it to list */ + if (*np->groups != '\0') + strcat(np->groups, ","); + strcat(np->groups, argv[i]); + } + } + if (*np->groups == '\0') { /* No groups specified? */ + free(np->groups); + np->groups = NULL; + } + } + /* set timer duration */ + set_timer(&np->nntpcli_t,atol(argv[2])*1000L); + start_timer(&np->nntpcli_t); /* and fire it up */ + return 0; +} + +static int +dodrops(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct nntpservers *np, *npprev = NULL; + for(np = Nntpservers; np != NULL; npprev = np, np = np->next) + if(stricmp(np->name,argv[1]) == 0) { + stop_timer(&np->nntpcli_t); + free(np->name); + if (np->groups) + free(np->groups); + if(npprev != NULL) + npprev->next = np->next; + else + Nntpservers = np->next; + free(np); + return 0; + } + _printf(_("No such server enabled.\n")); + return 0; +} + +static int +dolists(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct nntpservers *np; + for(np = Nntpservers; np != NULL; np = np->next) { + char tbuf[80]; + if (np->lowtime != -1 && np->hightime != -1) + sprintf(tbuf, " -- %02d:%02d-%02d:%02d", np->lowtime/100, np->lowtime%100, np->hightime/100, np->hightime%100); + else + tbuf[0] = '\0'; + _printf(_("%-32s (%lu/%lu%s) %s\n"), np->name, + read_timer(&np->nntpcli_t) /1000L, + dur_timer(&np->nntpcli_t) /1000L, + tbuf, np->groups ? np->groups : ""); + } + return 0; +} + +static int donntrace(argc, argv, p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&nntptrace, _("NNTP tracing"), argc, argv); +} + +static char *News_spool = NULL; +static int np_all = 0; /* non-zero if Newsdir is a malloc'ed space */ + +static int dondir(argc, argv, p) +int argc; +char *argv[]; +void *p; +{ + if (argc < 2) { + int i; + _printf(_("spool: %s\n"), News_spool ? News_spool : Mailspool); + _printf(_("control: %s\n"), Newsdir); + for (i = 0; i < MAXGROUPDIRS; ++i) + if (groupdirs[i].prefix) + _printf(_("%-10.10s %s\n"), groupdirs[i].prefix, groupdirs[i].directory); + } else { + char *p; + if ((p = strchr(argv[1], '=')) != NULL) { /* set a groupdir */ + int i; + *p++ = '\0'; + for (i = 0; i < MAXGROUPDIRS; ++i) + if (groupdirs[i].prefix) + if (!strnicmp(groupdirs[i].prefix, argv[1], strlen(argv[1]))) { + if (groupdirs[i].directory) { + free(groupdirs[i].directory); + groupdirs[i].directory = NULL; + } + if (*p == '\0') { + free(groupdirs[i].prefix); + groupdirs[i].prefix = NULL; + } else + groupdirs[i].directory = strdupw(p); + return 0; + } + if (*p == '\0') /* trashing a group that's not there */ + return 0; + for (i = 0; i < MAXGROUPDIRS; ++i){ + if (groupdirs[i].prefix == NULL) { + groupdirs[i].prefix = strdupw(argv[1]); + if (groupdirs[i].directory) { + free(groupdirs[i].directory); + groupdirs[i].directory = NULL; + } + groupdirs[i].directory = strdupw(p); + return 0; + } + } + _printf(_("Directory table full\n")); + } + else { /* no '=', so just set default */ + if (News_spool) + free(News_spool); + News_spool = strdupw(argv[1]); + } + if (argc > 2) { /* they specified a newsdir as well */ + if (np_all) + free(Newsdir); + Newsdir = strdupw(argv[2]); + np_all = 1; + } + } + return 0; +} + +static int +dokicks(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct nntpservers *np; + for(np = Nntpservers; np != NULL; np = np->next) + if(stricmp(np->name,argv[1]) == 0) { + /* If the timer is not running, the timeout function has + * already been called and we don't want to call it again. + */ + if(run_timer(&np->nntpcli_t)) { + stop_timer(&np->nntpcli_t); + nntptick((void *)np); + } + return 0; + } + _printf(_("No such server enabled.\n")); + return 0; +} + +static int +dogroups(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int i; + if(argc < 2) { + if(Nntpgroups == NULL || (Nntpgroups != NULL && strcmp(Nntpgroups,"*") == 0)) + _printf(_("All groups are currently enabled.\n")); + else + _printf(_("Currently enabled newsgroups:\n%s\n"),Nntpgroups); + return 0; + } + if(Nntpgroups == NULL) + Nntpgroups = mallocw(NNTPMAXLEN); + *Nntpgroups = '\0'; + for(i=1; i < argc; ++i) { + if(i > 1) + strcat(Nntpgroups,","); + strcat(Nntpgroups,argv[i]); + } + return 0; +} + +/* This is the routine that gets called every so often to connect to + * NNTP servers. + */ +static void +nntptick(tp) +void *tp; +{ + newproc("NNTP client", 3072, nntp_job, 0, tp, NULL,0); +} + +static void +nntp_job(i1,tp,v1) +int i1; +void *tp, *v1; +{ + FILE *fp, *tmpf; + int s = -1, i; + FILE *network; +/* long pos; */ + struct tm *ltm; + time_t t; + int now; + struct nntpservers *np = (struct nntpservers *) tp; + struct sockaddr_in fsocket; + char tbuf[NNTPMAXLEN], buf[NNTPMAXLEN], *cp, *lastdate = NULL; + if (nntptrace >= 3) + _printf(_("NNTP daemon entered, target = %s\n"),np->name); + if(availmem() != 0){ + if (nntptrace >= 2) + _printf(_("NNTP daemon quit -- low memory\n")); + /* Memory is tight, don't do anything */ + start_timer(&np->nntpcli_t); + return; + } + + time(&t); /* more portable than gettime() */ + ltm = localtime(&t); + now = ltm->tm_hour * 100 + ltm->tm_min; + if (np->lowtime < np->hightime) { /* doesn't cross midnight */ + if (now < np->lowtime || now >= np->hightime) { + if (nntptrace >= 3) + _printf(_("NNTP window to '%s' not open\n"), np->name); + start_timer(&np->nntpcli_t); + return; + } + } else { + if (now < np->lowtime && now >= np->hightime) { + if (nntptrace >= 3) + _printf(_("NNTP window to '%s' not open\n"), np->name); + start_timer(&np->nntpcli_t); + return; + } + } + + fsocket.sin_addr.s_addr = resolve(np->name); + if(fsocket.sin_addr.s_addr == 0) { /* No IP address found */ + if (nntptrace >= 2) + _printf(_("NNTP can't resolve host '%s'\n"), np->name); + /* Try again later */ + start_timer(&np->nntpcli_t); + return; + } + fsocket.sin_family = AF_INET; + fsocket.sin_port = IPPORT_NNTP; + + s = socket(AF_INET,SOCK_STREAM,0); + if(connect(s,(struct sockaddr *)&fsocket,SOCKSIZE) == -1){ + cp = sockerr(s); + logmsg(s, _("NNTP %s Connect failed: %s"),psocket(&fsocket), + cp != NULL ? cp : ""); + if (nntptrace >= 2) + _printf(_("NNTP %s Connect failed: %s\n"),psocket(&fsocket), + cp != NULL ? cp : ""); + goto quit; + } + network = fdopen(s,"r+t"); + + /* Eat the banner */ + i = getreply(network); + if(i == -1 || i >= 400) { + logmsg(fileno(network), _("NNTP %s bad reply on banner (response was %d)"), psocket(&fsocket),i); + if (nntptrace >= 1) + _printf(_("NNTP %s bad reply on banner (response was %d)\n"),psocket(&fsocket),i); + goto quit; + } + + if (mlock(Newsdir, "nntp")) { + if (nntptrace >= 2) + _printf(_("NNTP %s Connect failed: cannot lock nntp.dat\n"), psocket(&fsocket)); + goto quit; + } + sprintf(buf,"%s/nntp.dat",Newsdir); + if((fp = fopen(buf,APPEND_TEXT)) == NULL) { + logmsg(fileno(network), _("NNTP %s Connect failed: Cannot open %s"), psocket(&fsocket), + buf); + if (nntptrace >= 1) + _printf(_("NNTP %s Connect failed: Cannot open %s\n"),psocket(&fsocket), buf); + rmlock(Newsdir, "nntp"); + goto quit; + } + rewind(fp); +/* for(pos=0L; fgets(buf,NNTPMAXLEN,fp) != NULL;pos=ftell(fp)) { */ + for(; fgets(buf,NNTPMAXLEN,fp) != NULL;) { + if((cp = strchr(buf,' ')) == NULL) + continue; /* something wrong with this line, skip it */ + *cp = '\0'; + if(stricmp(buf,np->name) == 0) { + rip(cp+1); + lastdate = strdupw(cp+1); + break; + } + } + fclose(fp); + rmlock(Newsdir, "nntp"); + + if(lastdate == NULL) + lastdate = strdupw("700101 000000"); + /* snapshot the time for use later in re-writing nntp.dat */ + time(&t); + ltm = localtime(&t); + + /* Get a list of new message-id's */ + if (np->groups) { + if (nntptrace >= 3) + _printf(_("==>NEWNEWS %s %s\n"), np->groups, lastdate); + _fprintf(network, _("NEWNEWS %s %s\n"), np->groups, lastdate); + } else { + if (nntptrace >= 3) + _printf(_("==>NEWNEWS %s %s\n"), Nntpgroups != NULL ? Nntpgroups : "*", lastdate); + _fprintf(network, _("NEWNEWS %s %s\n"),Nntpgroups != NULL ? Nntpgroups : "*", lastdate); + } + free(lastdate); + /* Get the response */ + if((i = getreply(network)) != 230) { /* protocol error */ + logmsg(fileno(network), _("NNTP %s protocol error (response was %d)"), psocket(&fsocket),i); + if (nntptrace >= 1) + _printf(_("NNTP %s protocol error (response was %d)\n"),psocket(&fsocket),i); + goto quit; + } + if((tmpf = tmpfile()) == NULL) { + if (nntptrace >= 1) + _printf(_("NNTP %s Cannot open temp file\n"), psocket(&fsocket)); + goto quit; + } + if(gettxt(network,tmpf) == -1) { + logmsg(fileno(network), _("NNTP %s giving up: gettxt() failure"), psocket(&fsocket)); + if (nntptrace >= 1) + _printf(_("NNTP %s giving up: gettxt() failure\n"),psocket(&fsocket)); + fclose(tmpf); + goto quit; + } + + /* Open the history file */ + if (mlock(Newsdir, "history")) { + if (nntptrace >= 1) + _printf(_("NNTP %s giving up: couldn't lock history file\n"), psocket(&fsocket)); + fclose(tmpf); + goto quit; + } + sprintf(buf,"%s/history",Newsdir); + if((fp = fopen(buf,APPEND_TEXT)) == NULL) { + logmsg(fileno(network), _("NNTP %s Connect failed: Cannot open %s"), psocket(&fsocket), buf); + if (nntptrace >= 1) + _printf(_("NNTP %s Connect failed: Cannot open %s\n"),psocket(&fsocket), buf); + fclose(tmpf); + goto quit; + } + /* search through the history file for matching message id's */ + rewind(tmpf); + while(fgets(tbuf,NNTPMAXLEN,tmpf) != NULL) { + i = 0; + rewind(fp); + while(fgets(buf,NNTPMAXLEN,fp) != NULL) { + if(stricmp(buf,tbuf) == 0) { + i = 1; + break; + } + kwait(NULL); + } + if(i == 0) { /* not found, get the article */ + if(getarticle(network,tbuf) == -1) { + logmsg(fileno(network), _("NNTP %s Giving up: could not get article"), psocket(&fsocket)); + if (nntptrace >= 2) + _printf(_("NNTP %s Giving up: could not get article\n"),psocket(&fsocket)); + fclose(fp); + rmlock(Newsdir, "history"); + fclose(tmpf); + goto quit; + } + _fprintf(fp, _("%s"),tbuf); /* add the new message id */ + } + } + fclose(fp); + rmlock(Newsdir, "history"); + fclose(tmpf); + if (nntptrace >= 3) + _printf(_("==>QUIT\n")); + _fprintf(network, _("QUIT\n")); + /* Eat the response */ + getreply(network); + /* NOW, update the nntp.dat file */ + if (mlock(Newsdir, "nntp")) { + if (nntptrace >= 2) + _printf(_("NNTP %s Could not lock nntp.dat for update\n"), psocket(&fsocket)); + goto quit; + } + sprintf(buf,"%s/nntp.dat",Newsdir); + fp = fopen(buf,READ_TEXT); + sprintf(buf, "%s/nntp.tmp",Newsdir); + if ((tmpf = fopen(buf, WRITE_TEXT)) == NULL) + if (nntptrace >= 1) + _printf(_("NNTP %s Cannot create temp file '%s'\n"), psocket(&fsocket), buf); + if (fp == NULL || tmpf == NULL) { + logmsg(fileno(network), _("NNTP %s Could not update %s"), psocket(&fsocket), buf); + if (nntptrace >= 2) + _printf(_("NNTP %s Could not update %s\n"),psocket(&fsocket), buf); + if (fp) + fclose(fp); + if (tmpf) + fclose(tmpf); + rmlock(Newsdir, "nntp"); + goto quit; + } + while (fgets(tbuf, sizeof(tbuf), fp)) + if (strnicmp(tbuf, np->name, strlen(np->name))) + fputs(tbuf, tmpf); + _fprintf(tmpf, _("%s %02d%02d%02d %02d%02d%02d\n"),np->name,ltm->tm_year%100,ltm->tm_mon+1, + ltm->tm_mday,ltm->tm_hour,ltm->tm_min,ltm->tm_sec); + fclose(fp); + fclose(tmpf); + sprintf(buf, "%s/nntp.dat", Newsdir); + sprintf(tbuf, "%s/nntp.tmp", Newsdir); + unlink(buf); + rename(tbuf, buf); + rmlock(Newsdir, "nntp"); +quit: + if (nntptrace >= 3) + _printf(_("NNTP daemon exiting\n")); + fclose(network); + /* Restart timer */ + start_timer(&np->nntpcli_t); + return; +} + +static int +gettxt(network,fp) +FILE *network; +FILE *fp; +{ + char buf[NNTPMAXLEN]; + int nlines; + for (nlines = 0; fgets(buf,NNTPMAXLEN,network) != NULL; ++nlines) { + if (nntptrace >= 4) + _printf(_("<==%s"), buf); + if(strcmp(buf,".\n") == 0) { + if (nntptrace >= 3) + _printf(_("NNTP received %d lines\n"), nlines); + return 0; + } + /* check for escaped '.' characters */ + if(strcmp(buf,"..\n") == 0) + _fputs(_(".\n"),fp); + else + fputs(buf,fp); + } + if (nntptrace >= 1) + _printf(_("NNTP receive error after %d lines\n"), nlines); + return -1; +} + +static int +getreply(network) +FILE *network; +{ + char buf[NNTPMAXLEN]; + int response; + while(fgets(buf,NNTPMAXLEN,network) != NULL) { + /* skip informative messages and blank lines */ + if(buf[0] == '\0' || buf[0] == '1') + continue; + sscanf(buf,"%d",&response); + if (nntptrace >= 3) + _printf(_("<==%s\n"), buf); + return response; + } + if (nntptrace >= 3) + _printf(_("==No response\n")); + return -1; +} + +static int +getarticle(network,msgid) +FILE *network; +char *msgid; +{ + char buf[NNTPMAXLEN], froml[NNTPMAXLEN], newgl[NNTPMAXLEN]; + FILE *fp, *tmpf; + int r; + char *cp; + extern int Smtpquiet; + + if (nntptrace >= 3) + _printf(_("==>ARTICLE %s"), msgid); + _fprintf(network, _("ARTICLE %s"), msgid); + r = getreply(network); + if(r == -1 || r >= 500) + return -1; + if(r >= 400) + return 0; + if((tmpf = tmpfile()) == NULL) { + if (nntptrace >= 1) + _printf(_("NNTP Cannot open temp file for article\n")); + return -1; + } + if(gettxt(network,tmpf) == -1) { + fclose(tmpf); + return -1; + } + /* convert the article into mail format */ + rewind(tmpf); + froml[0] = '\0'; + newgl[0] = '\0'; + while(fgets(buf,NNTPMAXLEN,tmpf) != NULL) { + if(strncmp(buf,"From: ",6) == 0) { + struct timeb t; + ftime(&t); + rip(&buf[6]); + sprintf(froml,"From %s %ld\n",&buf[6], t.time); + if(newgl[0] != '\0') + break; + } + if(strncmp(buf,"Newsgroups: ",12) == 0) { + strcpy(newgl,&buf[12]); + if(froml[0] != '\0') + break; + } + /* invalid article - missing 'From:' line or 'Newsgroups:' line */ + if(strcmp(buf,"\n") == 0 && (froml[0] == '\0' || newgl[0] == '\0')) { +/* fclose(fp); */ + fclose(tmpf); + return 0; + } + } + sprintf(buf,"%s/",News_spool ? News_spool : Mailspool); + for(cp=newgl;;++cp) { + if(*cp == '.') { +#ifdef __TURBOC__ + mkdir(buf); /* create a subdirectory, if necessary */ +#else + mkdir(buf,0755); /* create a subdirectory, if necessary */ +#endif + strcat(buf,"/"); + continue; + } + if(*cp == ',' || *cp == '\n') { + char tempdir[80], prefix[20], *p; + strcpy(tempdir, buf); + if ((p = strrchr(tempdir, '/')) != NULL) { + *p++ = '\0'; + strcpy(prefix, p); + } + if (mlock(tempdir, prefix)) { + if (nntptrace >= 2) + _printf(_("NNTP group '%s' is locked\n"), buf); + return -1; + } + strcat(buf,".txt"); + /* open the mail file */ + if (nntptrace >= 3) + _printf(_("Writing article to '%s'\n"), buf); + if((fp = fopen(buf,APPEND_TEXT)) != NULL) { + fputs(froml,fp); + rewind(tmpf); + while(fgets(buf,NNTPMAXLEN,tmpf) != NULL) { + /* for UNIX mail compatiblity */ + if(strncmp(buf,"From ",5) == 0) + putc('>',fp); + fputs(buf,fp); + } + putc('\n',fp); + fclose(fp); + } + rmlock(tempdir, prefix); + if (*cp == '\n') + break; + else + sprintf(buf,"%s/",News_spool ? News_spool : Mailspool); + continue; + } + buf[strlen(buf)+1] = '\0'; + buf[strlen(buf)] = strchr(validchars, tolower(*cp)) ? *cp : '_'; + } + fclose(tmpf); + strcpy(buf,msgid); /* Get a copy we can munge */ + rip(buf); /* remove trailing new-line */ + rip(newgl); /* ditto */ +#ifdef notdef + _printf(_("New news arrived: %s, article %s%c\n"),newgl,buf,Smtpquiet?' ':'\007'); +#else + _printf(_("New news arrived: %s, article %s\n"),newgl,buf); +#endif + return 0; +} diff --git a/src/nos/clients/popcli.c b/src/nos/clients/popcli.c new file mode 100644 index 00000000..99e42675 --- /dev/null +++ b/src/nos/clients/popcli.c @@ -0,0 +1,478 @@ +/* + * POP2 Client routines. Originally authored by Mike Stockett + * (WA7DYX). + * Modified 12 May 1991 by Mark Edwards (WA6SMN) to use new timer + * facilities in NOS0423. Fixed type mismatches spotted by C++. + * Modified 27 May 1990 by Allen Gwinn (N5CKP) for compatibility + * with later releases (NOS0522). + * Added into NOS by PA0GRI (and linted into "standard" C) + * + * Some code culled from previous releases of SMTP. + * + * Client routines for Simple Mail Transfer Protocol ala RFC821 + * A.D. Barksdale Garbee II, aka Bdale, N3EUA + * Copyright 1986 Bdale Garbee, All Rights Reserved. + * Permission granted for non-commercial copying and use, provided + * this notice is retained. + * Modified 14 June 1987 by P. Karn for symbolic target addresses, + * also rebuilt locking mechanism + * Copyright 1987 1988 David Trulli, All Rights Reserved. + * Permission granted for non-commercial copying and use, provided + * this notice is retained. + */ +#include +#include +#include +#include +#ifdef UNIX +#include +#endif +#ifdef __TURBOC__ +#include +#include +#endif +#include "global.h" +#include +#include "mbuf.h" +#include "cmdparse.h" +#include "proc.h" +#include "socket.h" +#include "timer.h" +#include "netuser.h" +#include "dirutil.h" +#include "files.h" +#include +#include "po/messages.h" +#include "nos/logmsg.h" + +extern char Badhost[]; + +#define BUF_LEN 257 + +/* POP client control block */ + +struct pop_ccb { + FILE *network; /* Network stream for this connection */ + char state; /* client state */ +#define CALL 0 +#define NMBR 3 +#define SIZE 5 +#define XFER 8 +#define EXIT 10 + char buf[BUF_LEN], /* tcp input buffer */ + count; /* input buffer length */ + int folder_len; /* number of msgs in current folder */ + long msg_len; /* length of current msg */ + int msg_num; /* current message number */ +} *ccb; + +static int Popquiet = 0; + +static struct timer popcli_t; +static int32 mailhost; +static char mailbox_name[10], + mailbox_pathname[BUF_LEN], + username[20], + password[20], + Workfile_name[] ="mbox.pop"; + +static int domailbox(int argc,char *argv[],void *p); +static int domailhost(int argc,char *argv[],void *p); +static int douserdata(int argc,char *argv[],void *p); +static int doquiet(int argc,char *argv[],void *p); +static int dotimer(int argc,char *argv[],void *p); +static struct pop_ccb *new_ccb(void); +static void delete_ccb(void); +static void pop_send(int unused,void *cb1,void *p); +static int popkick(int argc,char *argv[],void *p); + +/* I don't know why this isn't static, it isn't called anywhere else {was} */ +int poptick(void); + +static struct cmds Popcmds[] = { + N_("mailbox"), domailbox, 0, 0, NULL, + N_("mailhost"), domailhost, 0, 0, NULL, + N_("kick"), popkick, 0, 0, NULL, + N_("quiet"), doquiet, 0, 0, NULL, + N_("timer"), dotimer, 0, 0, NULL, + N_("userdata"), douserdata, 0, 0, NULL, + NULL, +}; + + +/* Command string specifications */ + +static char ackd_cmd[] = "ACKD\n", +#ifdef POP_FOLDERS + fold_cmd[] = "FOLD %s\n", +#endif + login_cmd[] = "HELO %s %s\n", + /* nack_cmd[] = "NACK\n", */ /* Not implemented */ + quit_cmd[] = "QUIT\n", + read_cur_cmd[] = "READ\n", + retr_cmd[] = "RETR\n"; + +/* Response string keys */ + +static char *greeting_rsp = "+ POP2 "; + +FILE *fd; + +int +dopop(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Popcmds,argc,argv,p); +} + +static int +domailbox(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + if(argc < 2) { + if(mailbox_name[0] == '\0') + _printf(_("maibox name not set yet\n")); + else + _printf(_("%s\n"),mailbox_name); + } else { + strncpy(mailbox_name,argv[1],10); + } + + return 0; +} + +static int +domailhost(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int32 n; + + if(argc < 2) { + _printf(_("%s\n"),inet_ntoa(mailhost)); + } else + if((n = resolve(argv[1])) == 0) { + printf(Badhost,argv[1]); + return 1; + } else + mailhost = n; + + return 0; +} + +static int +doquiet(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Popquiet, _("POP quiet"), argc, argv); +} + +static int +douserdata(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + if (argc < 2) + _printf(_("%s\n"),username); + else if (argc != 3) { + _printf(_("Usage: pop userdata \n")); + return 1; + } else { + sscanf(argv[1],"%18s",username); + sscanf(argv[2],"%18s",password); + } + + return 0; +} + +/* Set scan interval */ + +static int +dotimer(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + if(argc < 2) { + _printf(_("%lu/%lu\n"), + read_timer(&popcli_t) /1000L, + dur_timer(&popcli_t)/ 1000L); + return 0; + } + + popcli_t.func = (void (*)())poptick; /* what to call on timeout */ + popcli_t.arg = NULL; /* dummy value */ + set_timer(&popcli_t, atol(argv[1])*1000L); /* set timer duration */ + start_timer(&popcli_t); /* and fire it up */ + return 0; +} + +static int +popkick(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + poptick(); + return 0; +} + +int +poptick() +{ + if (ccb == NULL) { + + /* Don't start if any of the required parameters have not been specified */ + + if (mailhost == 0) { + _printf(_("mailhost not defined yet.(pop mailhost )\n")); + return 0; + } + + if (mailbox_name[0] == '\0') { + _printf(_("mailbox name not defined yet.(pop mailbox )\n")); + return 0; + } + + if (username[0] == '\0') { + _printf(_("username not defined yet. (pop user )\n")); + return 0; + } + + if (password[0] == '\0') { + _printf(_(" Unknown password\n")); + return 0; + } + + if ((ccb = new_ccb()) == NULL) { + _fprintf(stderr, _("*** Unable to allocate CCB")); + return 0; + } + + newproc("Auto-POP Client",1024,pop_send,0,ccb,NULL,0); + } + + /* Restart timer */ + + start_timer(&popcli_t); + return 0; +} + +/* this is the master state machine that handles a single SMTP transaction */ +/* it is called with a queue of jobs for a particular host. */ + +static void +pop_send(unused,cb1,p) +int unused; +void *cb1; +void *p; +{ + char *cp; + struct sockaddr_in fsocket; + struct pop_ccb *ccb; + void pop_csm(struct pop_ccb *); + void quit_session(struct pop_ccb *); + int s; + + ccb = (struct pop_ccb *)cb1; + fsocket.sin_family = AF_INET; + fsocket.sin_addr.s_addr = mailhost; + fsocket.sin_port = IPPORT_POP; + + s = socket(AF_INET,SOCK_STREAM,0); + + ccb->state = CALL; + + if (connect(s,(struct sockaddr *)&fsocket,SOCKSIZE) == 0) { + logmsg(s, _("Connected to mailhost %s"), inet_ntoa(mailhost)); + ccb->network = fdopen(s,"r+t"); + } else { + cp = sockerr(s); + logmsg(s, _("Connect to mailhost %s failed: %s"), inet_ntoa(mailhost), + (cp != NULL)? cp: ""); + } + + while(1) { + if (fgets(ccb->buf,BUF_LEN,ccb->network) == NULL) + goto quit; + + rip(ccb->buf); + pop_csm(ccb); + if (ccb->state == EXIT) + goto quit; + } +quit: + logmsg(s, _("Connection closed to mailhost %s"), inet_ntoa(mailhost)); + fclose(ccb->network); + if (fd != NULL) + fclose(fd); + delete_ccb(); +} + +/* free the message struct and data */ + +static void +delete_ccb() +{ + if (ccb == NULL) + return; + + free(ccb); + ccb = NULL; +} + +/* create a new pop control block */ + +static struct +pop_ccb *new_ccb() +{ + register struct pop_ccb *ccb; + + if ((ccb = (struct pop_ccb *) callocw(1,sizeof(struct pop_ccb))) == NULL) + return(NULL); + return(ccb); +} + +/* ---------------------- pop client code starts here --------------------- */ + +void +pop_csm(ccb) +struct pop_ccb *ccb; +{ + FILE *mf; + + int mlock (char *,char *); + int rmlock (char * ,char *); + void quit_session(struct pop_ccb *); + /* int mlock(char *dir,char *id); */ + /* int rmlock(char *dir,char *id); */ + + + switch(ccb->state) { + case CALL: + if (strncmp(ccb->buf,greeting_rsp,strlen(greeting_rsp)) == 0) { + fprintf(ccb->network, login_cmd,username,password); + ccb->state = NMBR; + } else + (void) quit_session(ccb); + break; + + case NMBR: + + switch (ccb->buf[0]) { + case '#': + if ((fd = fopen(Workfile_name,"a+")) == NULL) { + perror("Unable to open work file"); + quit_session(ccb); + return; + } + + fseek(fd,0,SEEK_SET); + ccb->folder_len = atoi(&(ccb->buf[1])); + fprintf(ccb->network, read_cur_cmd); + ccb->state = SIZE; + break; + + case '+': + + /* If there is no mail (the only time we get a "+" + * response back at this stage of the game), + * then just close out the connection, because + * there is nothing more to do!! */ + + default: + quit_session(ccb); + break; + } + break; + + case SIZE: + if (ccb->buf[0] == '=') { + ccb->msg_len = atol(&(ccb->buf[1])); + if (ccb->msg_len > 0) { + fprintf(ccb->network, retr_cmd); + + ccb->state = XFER; + } else { + logmsg(fileno(ccb->network), _("POP client retrieved %d messages"), + ccb->folder_len); + + /* All done, so do local cleanup */ + + if (mlock(Mailspool,mailbox_name)) { + _printf(_("\n*** Local mailbox locked, new mail in file %s\n"), + Workfile_name); + quit_session(ccb); + return; + } + + sprintf(mailbox_pathname,"%s/%s.txt",Mailspool, + mailbox_name); + if ((mf = fopen(mailbox_pathname,"a+")) == NULL) { + _printf(_("\n*** Unable to open local mailbox, new mail in file %s\n"), + Workfile_name); + quit_session(ccb); + return; + } + + fseek(fd,0,SEEK_SET); + + while (!feof(fd)) { + if(fgets(ccb->buf,BUF_LEN,fd) != NULL) { + fputs(ccb->buf,mf); + } + } + fclose(mf); + fclose(fd); + fd = NULL; + _printf(_("New mail arrived for %s from mailhost <%s>%c\n"), + mailbox_name, inet_ntoa(mailhost), + Popquiet ? ' ' : '\007'); + rmlock(Mailspool,mailbox_name); + unlink(Workfile_name); + quit_session(ccb); + } + } else + quit_session(ccb); + break; + + case XFER: + _fprintf(fd, _("%s\n"),ccb->buf); + + ccb->msg_len -= (long)(strlen(ccb->buf)+2); /* Add CRLF */ + + if (ccb->msg_len > 0) + return; + + fprintf(ccb->network, ackd_cmd); + + ccb->msg_num++; + ccb->state = SIZE; + break; + + case EXIT: + if (fd != NULL) + fclose(fd); + break; + + default: + break; + } +} + +void +quit_session(ccb) +struct pop_ccb *ccb; +{ + fprintf(ccb->network, quit_cmd); + + ccb->state = EXIT; +} diff --git a/src/nos/clients/smtpcli.c b/src/nos/clients/smtpcli.c new file mode 100644 index 00000000..79c29791 --- /dev/null +++ b/src/nos/clients/smtpcli.c @@ -0,0 +1,952 @@ +/* + * CLIENT routines for Simple Mail Transfer Protocol ala RFC821 + * A.D. Barksdale Garbee II, aka Bdale, N3EUA + * Copyright 1986 Bdale Garbee, All Rights Reserved. + * Permission granted for non-commercial copying and use, provided + * this notice is retained. + * Modified 14 June 1987 by P. Karn for symbolic target addresses, + * also rebuilt locking mechanism + * Copyright 1987 1988 David Trulli, All Rights Reserved. + * Permission granted for non-commercial copying and use, provided + * this notice is retained. + */ +#include +#include /* Nick */ +#include +#include +#include +#ifdef UNIX +#include +#endif +#ifdef AMIGA +#include +#else +#include +#endif +#ifdef __TURBOC__ +#include +#include +#endif +#include "global.h" +#include +#include "mbuf.h" +#include "cmdparse.h" +#include "proc.h" +#include "socket.h" +#include "timer.h" +#include "netuser.h" +#include "smtp.h" +#include "dirutil.h" +#include "commands.h" +#include "session.h" +#include +#include "po/messages.h" +#include "nos/logmsg.h" + +static struct timer Smtpcli_t; +static int32 Gateway; + +#ifdef SMTPTRACE +static unsigned short Smtptrace = 0; /* used for trace level */ +static int dosmtptrace(int argc,char *argv[],void *p); +#endif + +static unsigned short Smtpmaxcli = MAXSESSIONS; /* the max client connections allowed */ +static int Smtpsessions = 0; /* number of client connections + * currently open */ +static int Smtpbatch; +int Smtpmode = 0; + +static struct smtpcli *cli_session[MAXSESSIONS]; /* queue of client sessions */ + +static void del_job(struct smtp_job *jp); +static void del_session(struct smtpcli *cb); +static int dogateway(int argc,char *argv[],void *p); +static int dosmtpmaxcli(int argc,char *argv[],void *p); +static int dotimer(int argc,char *argv[],void *p); +static int dosmtpkill(int argc,char *argv[],void *p); +static int dosmtplist(int argc,char *argv[],void *p); +static int dobatch(int argc,char *argv[],void *p); +static void execjobs(void); +static int getresp(struct smtpcli *ftp,int mincode); +static void logerr(struct smtpcli *cb,char *line); +static struct smtpcli *lookup(int32 destaddr); +static struct smtpcli *newcb(void); +static int next_job(struct smtpcli *cb); +static void retmail(struct smtpcli *cb); +static void sendcmd(struct smtpcli *cb,char *fmt,...); +static int smtpsendfile(struct smtpcli *cb); +static int setsmtpmode(int argc,char *argv[],void *p); +static struct smtp_job *setupjob(struct smtpcli *cb,char *id,char *from); +static void smtp_send(int unused,void *cb1,void *p); +static int smtpkick(int argc,char *argv[],void *p); + +static struct cmds Smtpcmds[] = { + N_("batch"), dobatch, 0, 0, NULL, + N_("gateway"), dogateway, 0, 0, NULL, + N_("mode"), setsmtpmode, 0, 0, NULL, + N_("kick"), smtpkick, 0, 0, NULL, + N_("kill"), dosmtpkill, 0, 2, N_("kill "), + N_("list"), dosmtplist, 0, 0, NULL, + N_("maxclients"), dosmtpmaxcli, 0, 0, NULL, + N_("timer"), dotimer, 0, 0, NULL, +#ifdef SMTPTRACE + N_("trace"), dosmtptrace, 0, 0, NULL, +#endif + NULL, +}; + +int +dosmtp(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Smtpcmds,argc,argv,p); +} + +static int +dobatch(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Smtpbatch, _("SMTP batching"), argc, argv); +} +static int +dosmtpmaxcli(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&Smtpmaxcli, _("Max clients"), argc, argv); +} + +static int +setsmtpmode(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + if (argc < 2) { + _printf(_("smtp mode: %s\n"), + (Smtpmode & QUEUE) ? "queue" : "route"); + } else { + switch(*argv[1]) { + case 'q': + Smtpmode |= QUEUE; + break; + case 'r': + Smtpmode &= ~QUEUE; + break; + default: + _printf(_("Usage: smtp mode [queue | route]\n")); + break; + } + } + return 0; +} +static int +dogateway(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int32 n; + + if(argc < 2){ + _printf(_("%s\n"),inet_ntoa(Gateway)); + } else if((n = resolve(argv[1])) == 0){ + printf(Badhost,argv[1]); + return 1; + } else + Gateway = n; + return 0; +} + +#ifdef SMTPTRACE +static int +dosmtptrace(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&Smtptrace, _("SMTP tracing"), argc, argv); +} +#endif + +/* list jobs wating to be sent in the mqueue */ +static int +dosmtplist(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + char tstring[80]; + char line[20]; + char host[LINELEN]; + char to[LINELEN]; + char from[LINELEN]; + char *cp; + char status; + struct stat stbuf; + struct tm *tminfo, *localtime(); + FILE *fp; + + _printf(_("S Job Size Date Time Host From\n")); + filedir(Mailqueue,0,line); + while(line[0] != '\0') { + sprintf(tstring,"%s/%s",Mailqdir,line); + if ((fp = fopen(tstring,READ_TEXT)) == NULL) { +#if 1 /* Nick */ + _printf(_("Can't open %s: %s\n"),tstring,strerror(errno)); +#else + _printf(_("Can't open %s: %s\n"),tstring,sys_errlist[errno]); +#endif + continue; + } + if ((cp = strrchr(line,'.')) != NULL) + *cp = '\0'; + sprintf(tstring,"%s/%s.lck",Mailqdir,line); + if (access(tstring,0)) + status = ' '; + else + status = 'L'; + sprintf(tstring,"%s/%s.txt",Mailqdir,line); + stat(tstring,&stbuf); + tminfo = localtime(&stbuf.st_ctime); + fgets(host,sizeof(host),fp); + rip(host); + fgets(from,sizeof(from),fp); + rip(from); + _printf(_("%c %7s %7ld %02d/%02d %02d:%02d %-20s %s\n "), + status, line, stbuf.st_size, + tminfo->tm_mon+1, + tminfo->tm_mday, + tminfo->tm_hour, + tminfo->tm_min, + host,from); + while (fgets(to,sizeof(to),fp) != NULL) { + rip(to); + _printf(_("%s "),to); + } + _printf(_("\n")); + (void) fclose(fp); + kwait(NULL); + filedir(Mailqueue,1,line); + } + return 0; +} + +/* kill a job in the mqueue */ +static int +dosmtpkill(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + char s[SLINELEN]; + char *cp,c; + sprintf(s,"%s/%s.lck",Mailqdir,argv[1]); + cp = strrchr(s,'.'); + if (!access(s,0)) { + Current->ttystate.echo = Current->ttystate.edit = 0; + c = keywait("Warning, the job is locked by SMTP. Remove (y/n)? ",0); + Current->ttystate.echo = Current->ttystate.edit = 1; + if (c != 'y') + return 0; + (void) unlink(s); + } + strcpy(cp,".wrk"); + if (unlink(s)) + _printf(_("Job id %s not found\n"),argv[1]); + strcpy(cp,".txt"); + (void) unlink(s); + return 0; +} + +/* Set outbound spool scan interval */ +static int +dotimer(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + if(argc < 2){ + _printf(_("%lu/%lu\n"), + read_timer(&Smtpcli_t) /1000L, + dur_timer(&Smtpcli_t)/ 1000L); + return 0; + } + Smtpcli_t.func = (void (*)())smtptick;/* what to call on timeout */ + Smtpcli_t.arg = NULL; /* dummy value */ + set_timer(&Smtpcli_t,atol(argv[1])*1000L); /* set timer duration */ + start_timer(&Smtpcli_t); /* and fire it up */ + return 0; +} + +static int +smtpkick(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int32 addr = 0; + if(argc > 1 && (addr = resolve(argv[1])) == 0){ + printf(Badhost,argv[1]); + return 1; + } + smtptick(addr); + return 0; +} + +/* This is the routine that gets called every so often to do outgoing + * mail processing. When called with a null argument, it runs the entire + * queue; if called with a specific non-zero IP address from the remote + * kick server, it only starts up sessions to that address. + */ +int +smtptick(target) +int32 target; +{ + register struct smtpcli *cb; + struct smtp_job *jp; + struct list *ap; + char tmpstring[LINELEN], wfilename[13], prefix[9]; + char from[LINELEN], to[LINELEN]; + char *cp, *cp1; + int32 destaddr; + FILE *wfile; + +#ifdef SMTPTRACE + if (Smtptrace > 5) + _printf(_("smtp daemon entered, target = %s\n"),inet_ntoa(target)); +#endif + if(availmem() != 0){ + /* Memory is tight, don't do anything */ + /* Restart timer */ + start_timer(&Smtpcli_t); + return 0; + } + for(filedir(Mailqueue,0,wfilename);wfilename[0] != '\0'; + filedir(Mailqueue,1,wfilename)){ + + /* save the prefix of the file name which it job id */ + cp = wfilename; + cp1 = prefix; + while (*cp && *cp != '.') + *cp1++ = *cp++; + *cp1 = '\0'; + + /* lock this file from the smtp daemon */ + if (mlock(Mailqdir,prefix)) + continue; + + sprintf(tmpstring,"%s/%s",Mailqdir,wfilename); + if ((wfile = fopen(tmpstring,READ_TEXT)) == NULL) { + /* probably too many open files */ + (void) rmlock(Mailqdir,prefix); + /* continue to next message. The failure + * may be temporary */ + continue; + } + + (void) fgets(tmpstring,LINELEN,wfile); /* read target host */ + rip(tmpstring); + + if ((destaddr = mailroute(tmpstring)) == 0) { + fclose(wfile); + _printf(_("** smtp: Unknown address %s\n"),tmpstring); + (void) rmlock(Mailqdir,prefix); + continue; + } + if(target != 0 && destaddr != target){ + fclose(wfile); + (void) rmlock(Mailqdir,prefix); + continue; /* Not the proper target of a kick */ + } + if ((cb = lookup(destaddr)) == NULL) { + /* there are enough processes running already */ + if (Smtpsessions >= Smtpmaxcli) { +#ifdef SMTPTRACE + if (Smtptrace) { + _printf(_("smtp daemon: too many processes\n")); + } +#endif + fclose(wfile); + (void) rmlock(Mailqdir,prefix); + break; + } + if ((cb = newcb()) == NULL) { + fclose(wfile); + (void) rmlock(Mailqdir,prefix); + break; + } + cb->ipdest = destaddr; + cb->destname = strdupw(tmpstring); + } else { + if(cb->lock){ + /* This system is already is sending mail lets not + * interfere with its send queue. + */ + fclose(wfile); + (void) rmlock(Mailqdir,prefix); + continue; + } + } + + (void) fgets(from,LINELEN,wfile); /* read from */ + rip(from); + if ((jp = setupjob(cb,prefix,from)) == NULL) { + fclose(wfile); + (void) rmlock(Mailqdir,prefix); + del_session(cb); + break; + } + while (fgets(to,LINELEN,wfile) != NULL) { + rip(to); + if (addlist(&jp->to,to,DOMAIN) == NULL) { + fclose(wfile); + del_session(cb); + } + } + fclose(wfile); +#ifdef SMTPTRACE + if (Smtptrace > 1) { + _printf(_("queue job %s From: %s To:"),prefix,from); + for (ap = jp->to; ap != NULL; ap = ap->next) + _printf(_(" %s"),ap->val); + _printf(_("\n")); + } +#endif + } + + /* start sending that mail */ + execjobs(); + + /* Restart timer */ + start_timer(&Smtpcli_t); + return 0; +} + +/* This is the master state machine that handles a single SMTP transaction. + * It is called with a queue of jobs for a particular host. + * The logic is complicated by the "Smtpbatch" variable, which controls + * the batching of SMTP commands. If Smtpbatch is true, then many of the + * SMTP commands are sent in one swell foop before waiting for any of + * the responses. Unfortunately, this breaks many brain-damaged SMTP servers + * out there, so provisions have to be made to operate SMTP in lock-step mode. + */ +static void +smtp_send(unused,cb1,p) +int unused; +void *cb1; +void *p; +{ + register struct smtpcli *cb; + register struct list *tp; + struct sockaddr_in fsocket; + char *cp; + int rcode; + int rcpts; + int goodrcpt; + int i,s; + int init = 1; + + cb = (struct smtpcli *)cb1; + cb->lock = 1; + fsocket.sin_family = AF_INET; + fsocket.sin_addr.s_addr = cb->ipdest; + fsocket.sin_port = IPPORT_SMTP; + + s = socket(AF_INET,SOCK_STREAM,0); +#ifdef SMTPTRACE + if (Smtptrace) + _printf(_("SMTP client Trying...\n")); +#endif + if(connect(s,(struct sockaddr *)&fsocket,SOCKSIZE) == 0){ + cb->network = fdopen(s,"r+t"); +#ifdef SMTPTRACE + if (Smtptrace) + _printf(_("Connected\n")); +#endif + } else { + cp = sockerr(s); +#ifdef SMTPTRACE + if (Smtptrace) + _printf(_("Connect failed: %s\n"),cp != NULL ? cp : ""); +#endif + logmsg(s, _("SMTP %s Connect failed: %s"), psocket(&fsocket), + cp != NULL ? cp : ""); + } + if(!Smtpbatch){ + rcode = getresp(cb,200); + if(rcode == -1 || rcode >= 400) + goto quit; + } + /* Say HELO */ + sendcmd(cb,"HELO %s\n",Hostname); + if(!Smtpbatch){ + rcode = getresp(cb,200); + if(rcode == -1 || rcode >= 400) + goto quit; + } + do { /* For each message... */ + + /* if this file open fails, skip it */ + if ((cb->tfile = fopen(cb->tname,READ_TEXT)) == NULL) + continue; + + /* Send MAIL and RCPT commands */ + sendcmd(cb,"MAIL FROM:<%s>\n",cb->jobq->from); + if(!Smtpbatch){ + rcode = getresp(cb,200); + if(rcode == -1 || rcode >= 400) + goto quit; + } + rcpts = 0; + goodrcpt = 0; + for (tp = cb->jobq->to; tp != NULL; tp = tp->next){ + sendcmd(cb,"RCPT TO:<%s>\n",tp->val); + if(!Smtpbatch){ + rcode = getresp(cb,200); + if(rcode == -1) + goto quit; + if(rcode < 400) + goodrcpt = 1; /* At least one good */ + } + rcpts++; + } + /* Send DATA command */ + sendcmd(cb,"DATA\n"); + if(!Smtpbatch){ + rcode = getresp(cb,200); + if(rcode == -1 || rcode >= 400) + goto quit; + } + if(Smtpbatch){ + /* Now wait for the responses to come back. The first time + * we do this, we wait first for the start banner and + * HELO response. In any case, we wait for the response to + * the MAIL command here. + */ + for(i= init ? 3 : 1;i > 0;i--){ + rcode = getresp(cb,200); + if(rcode == -1 || rcode >= 400) + goto quit; + } + init = 0; + + /* Now process the responses to the RCPT commands */ + for(i=rcpts;i!=0;i--){ + rcode = getresp(cb,200); + if(rcode == -1) + goto quit; + if(rcode < 400) + goodrcpt = 1; /* At least one good */ + } + /* And finally get the response to the DATA command. + * Some servers will return failure here if no recipients + * are valid, some won't. + */ + rcode = getresp(cb,200); + if(rcode == -1 || rcode >= 400) + goto quit; + + /* check for no good rcpt on the list */ + if (goodrcpt == 0){ + sendcmd(cb,".\n"); /* Get out of data mode */ + goto quit; + } + } + /* Send the file. This also closes it */ + smtpsendfile(cb); + + /* Wait for the OK response */ + rcode = getresp(cb,200); + if(rcode == -1) + goto quit; + if((rcode >= 200 && rcode < 300) || rcode >= 500){ + /* if a good transfer or permanent failure remove job */ + + if (cb->errlog != NULL) + retmail(cb); + /* Unlink the textfile */ + (void) unlink(cb->tname); + (void) unlink(cb->wname); /* unlink workfile */ + logmsg(s, _("SMTP sent job %s To: %s From: %s"), + cb->jobq->jobname,cb->jobq->to->val,cb->jobq->from); + } + } while(next_job(cb)); +quit: + sendcmd(cb,"QUIT\n"); + if (cb->errlog != NULL){ + retmail(cb); + (void) unlink(cb->wname); /* unlink workfile */ + (void) unlink(cb->tname); /* unlink text */ + } + (void) fclose(cb->network); + if(cb->tfile != NULL) + fclose(cb->tfile); + cb->lock = 0; + del_session(cb); +} + + +/* create mail lockfile */ +int +mlock(dir,id) +char *dir,*id; +{ + char lockname[LINELEN]; + int fd; + struct stat statbuf; + +#ifdef MSDOS + if(strlen(id) > 8) { /* truncate long filenames */ + id[8] = '\0'; + if(id[7] == '/') + id[7] = '\0'; + } +#endif + /* Try to create the lock file in an atomic operation */ + sprintf(lockname,"%s/%s.lck",dir,id); +#ifdef AMIGA + /* don't ask, really, just don't ask... I'd do file locking on + * an Amiga much more differently than this. + */ + if(access(lockname, 0) == 0) + return -1; +#endif + fd = open(lockname, O_WRONLY|O_EXCL|O_CREAT,0600); + if(fd != -1){ + /* Lock succeeded */ + close(fd); + return 0; + } + /* See if the dir doesn't exist */ + if(stat(dir,&statbuf) == -1 || (statbuf.st_mode & S_IFMT) != S_IFDIR){ + _printf(_("Lock directory %s missing\n"),dir); + fflush(stdout); + return 0; + } + return -1; /* lock failed */ +} + +/* remove mail lockfile */ +int +rmlock(dir,id) +char *dir,*id; +{ + char lockname[LINELEN]; +#ifdef MSDOS + if(strlen(id) > 8) { /* truncate long filenames */ + id[8] = '\0'; + if(id[7] == '/') + id[7] = '\0'; + } +#endif + sprintf(lockname,"%s/%s.lck",dir,id); + return(unlink(lockname)); +} + +/* free the message struct and data */ +static void +del_session(cb) +register struct smtpcli *cb; +{ + register struct smtp_job *jp,*tp; + register int i; + + if (cb == NULL) + return; + for(i=0; iwname); + free(cb->tname); + free(cb->destname); + for (jp = cb->jobq; jp != NULL;jp = tp) { + tp = jp->next; + del_job(jp); + } + del_list(cb->errlog); + free(cb); + Smtpsessions--; /* number of connections active */ +} + +static void +del_job(jp) +register struct smtp_job *jp; +{ + if ( *jp->jobname != '\0') + (void) rmlock(Mailqdir,jp->jobname); + free(jp->from); + del_list(jp->to); + free(jp); +} + +/* delete a list of list structs */ +void +del_list(lp) +struct list *lp; +{ + register struct list *tp, *tp1; + for (tp = lp; tp != NULL; tp = tp1) { + tp1 = tp->next; + free(tp->val); + free(tp); + } +} + +/* stub for calling mdaemon to return message to sender */ +static void +retmail(cb) +struct smtpcli *cb; +{ + FILE *infile; +#ifdef SMTPTRACE + if (Smtptrace > 5) { + _printf(_("smtp job %s returned to sender\n"),cb->wname); + } +#endif + if ((infile = fopen(cb->tname,READ_TEXT)) == NULL) + return; + mdaemon(infile,cb->jobq->from,cb->errlog,1); + fclose(infile); +} + +/* look to see if a smtp control block exists for this ipdest */ +static struct smtpcli * +lookup(destaddr) +int32 destaddr; +{ + register int i; + + for(i=0; iipdest == destaddr) + return cli_session[i]; + } + return NULL; +} + +/* create a new smtp control block */ +static struct smtpcli * +newcb() +{ + register int i; + register struct smtpcli *cb; + + for(i=0; iwname = mallocw((unsigned)strlen(Mailqdir)+JOBNAME); + cb->tname = mallocw((unsigned)strlen(Mailqdir)+JOBNAME); + cli_session[i] = cb; + Smtpsessions++; /* number of connections active */ + return(cb); + } + } + return NULL; +} + +static void +execjobs() +{ + register struct smtpcli *cb; + register int i; + + for(i=0; ilock) + continue; + + sprintf(cb->tname,"%s/%s.txt",Mailqdir,cb->jobq->jobname); + sprintf(cb->wname,"%s/%s.wrk",Mailqdir,cb->jobq->jobname); + + newproc("smtp_send", 1024, smtp_send, 0, cb,NULL,0); + +#ifdef SMTPTRACE + if (Smtptrace) + _printf(_("Trying Connection to %s\n"),inet_ntoa(cb->ipdest)); +#endif + + + } +} + +/* add this job to control block queue */ +static struct smtp_job * +setupjob(cb,id,from) +struct smtpcli *cb; +char *id,*from; +{ + register struct smtp_job *p1,*p2; + + p1 = (struct smtp_job *)callocw(1,sizeof(struct smtp_job)); + p1->from = strdupw(from); + strcpy(p1->jobname,id); + /* now add to end of jobq */ + if ((p2 = cb->jobq) == NULL) + cb->jobq = p1; + else { + while(p2->next != NULL) + p2 = p2->next; + p2->next = p1; + } + return p1; +} + +/* called to advance to the next job */ +static int +next_job(cb) +register struct smtpcli *cb; +{ + register struct smtp_job *jp; + + jp = cb->jobq->next; + del_job(cb->jobq); + /* remove the error log of previous message */ + del_list(cb->errlog); + cb->errlog = NULL; + cb->jobq = jp; + if (jp == NULL) + return 0; + sprintf(cb->tname,"%s/%s.txt",Mailqdir,jp->jobname); + sprintf(cb->wname,"%s/%s.wrk",Mailqdir,jp->jobname); +#ifdef SMTPTRACE + if (Smtptrace > 5) { + _printf(_("sending job %s\n"),jp->jobname); + } +#endif + return 1; + +} + + +/* Mail routing function. For now just use the hosts file */ +int32 +mailroute(dest) +char *dest; +{ + int32 destaddr; + + /* look up address or use the gateway */ + destaddr = resolve_mx(dest); + if (destaddr == 0 && (destaddr = resolve(dest)) == 0) + if (Gateway != 0) + destaddr = Gateway; /* Use the gateway */ + return destaddr; + +} + +/* save line in error list */ +static void +logerr(cb,line) +struct smtpcli *cb; +char *line; +{ + register struct list *lp,*tp; + tp = (struct list *)callocw(1,sizeof(struct list)); + tp->val = strdupw(line); + /* find end of list */ + if ((lp = cb->errlog) == NULL) + cb->errlog = tp; + else { + while(lp->next != NULL) + lp = lp->next; + lp->next = tp; + } +} + +static int +smtpsendfile(cb) +register struct smtpcli *cb; +{ + int error = 0; + + strcpy(cb->buf,"\n"); + while(fgets(cb->buf,sizeof(cb->buf),cb->tfile) != NULL) { + /* Escape a single '.' character at the beginning of a line */ + if(strcmp(cb->buf,".\n") == 0) + putc('.',cb->network); + fputs(cb->buf,cb->network); + } + fclose(cb->tfile); + cb->tfile = NULL; + /* Send the end-of-message command */ + if(cb->buf[strlen(cb->buf)-1] == '\n') + sendcmd(cb,".\n"); + else + sendcmd(cb,"\n.\n"); + return error; +} +/* do a printf() on the network stream with optional local tracing */ +static void +sendcmd(struct smtpcli *cb,char *fmt, ...) +{ + va_list args; + + va_start(args,fmt); +#ifdef SMTPTRACE + if(Smtptrace){ + _printf(_("smtp sent: ")); + vprintf(fmt,args); + } +#endif + vsprintf(cb->buf,fmt,args); + fputs(cb->buf,cb->network); + va_end(args); +} + +/* Wait for, read and display response from server. Return the result code. */ +static int +getresp(cb,mincode) +struct smtpcli *cb; +int mincode; /* Keep reading until at least this code comes back */ +{ + int rval; + char line[LINELEN]; + + fflush(cb->network); + for(;;){ + /* Get line */ + if(fgets(line,LINELEN,cb->network) == NULL){ + rval = -1; + break; + } + rip(line); /* Remove cr/lf */ + rval = atoi(line); +#ifdef SMTPTRACE + if(Smtptrace) + _printf(_("smtp recv: %s\n"),line);/* Display to user */ +#endif + if(rval >= 500) { /* Save permanent error replies */ + char tmp[LINELEN]; + if(cb->errlog == NULL) { + sprintf(tmp,"While talking to %s:", + cb->destname); + logerr(cb,tmp); + } + if(cb->buf[0] != '\0') { /* Save offending command */ + rip(cb->buf); + sprintf(tmp,">>> %s",cb->buf); + logerr(cb,tmp); + cb->buf[0] = '\0'; + } + sprintf(tmp,"<<< %s",line); + logerr(cb,tmp); /* save the error reply */ + } + /* Messages with dashes are continued */ + if(line[3] != '-' && rval >= mincode) + break; + } + return rval; +} diff --git a/src/nos/clients/telnet.c b/src/nos/clients/telnet.c new file mode 100644 index 00000000..7e689398 --- /dev/null +++ b/src/nos/clients/telnet.c @@ -0,0 +1,425 @@ +/* Internet Telnet client + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#ifdef __TURBOC__ +#include +#include +#endif +#include "global.h" +#include "mbuf.h" +#include "socket.h" +#include "telnet.h" +#include "session.h" +#include "proc.h" +#include "tty.h" +#include "commands.h" +#include "internet.h" +#include "netuser.h" +#include "cmdparse.h" +#include +#include "po/messages.h" + +int Refuse_echo = 0; +int Tn_cr_mode = 0; /* if true turn to */ +int Topt = 0; + +char *T_options[] = { + "Transmit Binary", + "Echo", + "", + "Suppress Go Ahead", + "", + "Status", + "Timing Mark" +}; + +static int keychar(int c); + +int +dotopt(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + setbool(&Topt, _("Telnet option tracing"), argc, argv); + return 0; +} +/* Execute user telnet command */ +int +dotelnet(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct session *sp; + struct sockaddr_in fsocket; + int s; + + /* Allocate a session descriptor */ + if((sp = newsession(Cmdline,TELNET,1)) == NULL){ + _printf(_("Too many sessions\n")); + return 1; + } + sp->inproc = keychar; /* Intercept ^C */ + fsocket.sin_family = AF_INET; + if(argc < 3) + fsocket.sin_port = IPPORT_TELNET; + else + fsocket.sin_port = atoi(argv[2]); + + if(SETSIG(EABORT)){ + keywait(NULL,1); + freesession(sp); + return 1; + } + _printf(_("Resolving %s...\n"),argv[1]); + if((fsocket.sin_addr.s_addr = resolve(argv[1])) == 0){ + printf(Badhost,argv[1]); + keywait(NULL,1); + freesession(sp); + return 1; + } + if((s = socket(AF_INET,SOCK_STREAM,0)) == -1){ + _printf(_("Can't create socket\n")); + keywait(NULL,1); + freesession(sp); + return 1; + } + settos(s,LOW_DELAY); + sp->network = fdopen(s,"r+t"); + setvbuf(sp->network,NULL,_IOLBF,BUFSIZ); + return tel_connect(sp,(struct sockaddr *)&fsocket,SOCKSIZE); +} +/* Generic interactive connect routine, used by Telnet, AX.25, NET/ROM */ +int +tel_connect(sp,fsocket,len) +struct session *sp; +struct sockaddr *fsocket; +int len; +{ + struct telnet tn; + + memset(&tn,0,sizeof(tn)); + tn.eolmode = Tn_cr_mode; + tn.session = sp; /* Upward pointer */ + sp->cb.telnet = &tn; /* Downward pointer */ + + _printf(_("Trying %s...\n"),psocket(fsocket)); + if(connect(fileno(sp->network),fsocket,len) == -1){ + perror("connect failed"); + keywait(NULL,1); + freesession(sp); + return 1; + } + _printf(_("Connected\n")); + sp->inproc = NULL; /* No longer respond to ^C */ + tnrecv(&tn); + return 0; +} + +/* Telnet input routine, common to both telnet and ttylink */ +void +tnrecv(tn) +struct telnet *tn; +{ + int c; + struct session *sp; + char *cp; + FILE *network; + + sp = tn->session; + network = sp->network; + + /* Fork off the transmit process */ + sp->proc1 = newproc("tel_out",1024,tel_output,0,tn,NULL,0); + + /* Process input on the connection */ + while((c = getc(network)) != EOF){ + if(c != IAC){ + /* Ordinary character */ + putchar((char)c); + if(sp->record != NULL) + putc(c,sp->record); + continue; + } + /* IAC received, get command sequence */ + c = getc(network); + switch(c){ + case WILL: + c = getc(network); + willopt(tn,c); + break; + case WONT: + c = getc(network); + wontopt(tn,c); + break; + case DO: + c = getc(network); + doopt(tn,c); + break; + case DONT: + c = getc(network); + dontopt(tn,c); + break; + case IAC: /* Escaped IAC */ + putchar(IAC); + if(sp->record != NULL) + putc(IAC,sp->record); + break; + } + } +quit: /* A close was received from the remote host. + * Notify the user, kill the output task and wait for a response + * from the user before freeing the session. + */ + fmode(sp->output,STREAM_ASCII); /* Restore newline translation */ + setvbuf(sp->output,NULL,_IOLBF,BUFSIZ); + cp = sockerr(fileno(network)); + _printf(_("Closed: %s\n"), cp != NULL ? cp : "EOF"); + killproc(sp->proc1); + sp->proc1 = NULL; + fclose(sp->network); + sp->network = NULL; + keywait(NULL,1); + freesession(sp); +} + +/* User telnet output task, started by user telnet command */ +void +tel_output(unused,tn1,p) +int unused; +void *tn1; +void *p; +{ + struct session *sp; + int c; + struct telnet *tn; + + tn = (struct telnet *)tn1; + sp = tn->session; + + /* Send whatever's typed on the terminal */ + while((c = getc(sp->input)) != EOF){ + putc(c,sp->network); + if(!tn->remote[TN_ECHO] && sp->record != NULL) + putc(c,sp->record); + + /* By default, output is transparent in remote echo mode. + * If eolmode is set, turn a cr into cr-null. + * This can only happen when in remote echo (raw) mode, since + * the tty driver normally maps \r to \n in cooked mode. + */ + if(c == '\r' && tn->eolmode) + putc('\0',sp->network); + + if(tn->remote[TN_ECHO]) + fflush(sp->network); + } + /* Make sure our parent doesn't try to kill us after we exit */ + sp->proc1 = NULL; +} +int +doecho(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + if(argc < 2){ + if(Refuse_echo) + _printf(_("Refuse\n")); + else + _printf(_("Accept\n")); + } else { + if(argv[1][0] == 'r') + Refuse_echo = 1; + else if(argv[1][0] == 'a') + Refuse_echo = 0; + else + return -1; + } + return 0; +} +/* set for unix end of line for remote echo mode telnet */ +int +doeol(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + if(argc < 2){ + if(Tn_cr_mode) + _printf(_("null\n")); + else + _printf(_("standard\n")); + } else { + if(argv[1][0] == 'n') + Tn_cr_mode = 1; + else if(argv[1][0] == 's') + Tn_cr_mode = 0; + else { + _printf(_("Usage: %s [standard|null]\n"),argv[0]); + return -1; + } + } + return 0; +} + +/* The guts of the actual Telnet protocol: negotiating options */ +void +willopt(tn,opt) +struct telnet *tn; +int opt; +{ + int ack; + + if(Topt){ + _printf(_("recv: will ")); + if(opt <= NOPTIONS) + _printf(_("%s\n"),T_options[opt]); + else + _printf(_("%u\n"),opt); + } + switch(opt){ + case TN_TRANSMIT_BINARY: + case TN_ECHO: + case TN_SUPPRESS_GA: + if(tn->remote[opt] == 1) + return; /* Already set, ignore to prevent loop */ + if(opt == TN_ECHO){ + if(Refuse_echo){ + /* User doesn't want to accept */ + ack = DONT; + break; + } else { + /* Put tty into raw mode */ + tn->session->ttystate.edit = 0; + tn->session->ttystate.echo = 0; + fmode(tn->session->network,STREAM_BINARY); + setvbuf(tn->session->network,NULL,_IONBF,0); + fmode(stdout,STREAM_BINARY); + setvbuf(stdout,NULL,_IONBF,0); + } + } + tn->remote[opt] = 1; + ack = DO; + break; + default: + ack = DONT; /* We don't know what he's offering; refuse */ + } + answer(tn,ack,opt); +} +void +wontopt(tn,opt) +struct telnet *tn; +int opt; +{ + if(Topt){ + _printf(_("recv: wont ")); + if(opt <= NOPTIONS) + _printf(_("%s\n"),T_options[opt]); + else + _printf(_("%u\n"),opt); + } + if(opt <= NOPTIONS){ + if(tn->remote[opt] == 0) + return; /* Already clear, ignore to prevent loop */ + tn->remote[opt] = 0; + if(opt == TN_ECHO){ + /* Put tty into cooked mode */ + tn->session->ttystate.edit = 1; + tn->session->ttystate.echo = 1; + fmode(tn->session->network,STREAM_ASCII); + setvbuf(tn->session->network,NULL,_IOLBF,BUFSIZ); + fmode(stdout,STREAM_ASCII); + setvbuf(stdout,NULL,_IOLBF,BUFSIZ); + } + } + answer(tn,DONT,opt); /* Must always accept */ +} +void +doopt(tn,opt) +struct telnet *tn; +int opt; +{ + int ack; + + if(Topt){ + _printf(_("recv: do ")); + if(opt <= NOPTIONS) + _printf(_("%s\n"),T_options[opt]); + else + _printf(_("%u\n"),opt); + } + switch(opt){ + case TN_SUPPRESS_GA: + if(tn->local[opt] == 1) + return; /* Already set, ignore to prevent loop */ + tn->local[opt] = 1; + ack = WILL; + break; + default: + ack = WONT; /* Don't know what it is */ + } + answer(tn,ack,opt); +} +void +dontopt(tn,opt) +struct telnet *tn; +int opt; +{ + if(Topt){ + _printf(_("recv: dont ")); + if(opt <= NOPTIONS) + _printf(_("%s\n"),T_options[opt]); + else + _printf(_("%u\n"),opt); + } + if(opt <= NOPTIONS){ + if(tn->local[opt] == 0){ + /* Already clear, ignore to prevent loop */ + return; + } + tn->local[opt] = 0; + } + answer(tn,WONT,opt); +} +void +answer(tn,r1,r2) +struct telnet *tn; +int r1,r2; +{ + if(Topt){ + switch(r1){ + case WILL: + _printf(_("sent: will ")); + break; + case WONT: + _printf(_("sent: wont ")); + break; + case DO: + _printf(_("sent: do ")); + break; + case DONT: + _printf(_("sent: dont ")); + break; + } + if(r2 <= NOPTIONS) + _printf(_("%s\n"),T_options[r2]); + else + _printf(_("%u\n"),r2); + } + _fprintf(tn->session->network, _("%c%c%c"),IAC,r1,r2); + fflush(tn->session->network); +} +static int +keychar(c) +int c; +{ + if(c != CTLC) + return 1; /* Ignore all but ^C */ + + _fprintf(Current->output, _("^C\n")); + alert(Current->proc,EABORT); + return 0; +} diff --git a/src/nos/clients/tip.c b/src/nos/clients/tip.c new file mode 100644 index 00000000..6b3efcc2 --- /dev/null +++ b/src/nos/clients/tip.c @@ -0,0 +1,96 @@ +/* "Dumb terminal" session command for serial lines + * Copyright 1991 Phil Karn, KA9Q + * + * Feb '91 Bill Simpson + * rlsd control and improved dialer + */ +#include "global.h" +#include "mbuf.h" +#include "proc.h" +#include "iface.h" +#ifndef UNIX +#include "n8250.h" +#endif +#include "asy.h" +#include "tty.h" +#include "session.h" +#include "socket.h" +#include "commands.h" +#include "devparam.h" +#include +#include "po/messages.h" + + +static void tip_out(int i,void *n1,void *n2); + + +/* Execute user telnet command */ +int +dotip(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct session *sp; + char *ifn; + int c; + FILE *asy; + + if((asy = asyopen(argv[1],"r+b")) == NULL){ + _printf(_("Can't open %s\n"),argv[1]); + return 1; + } + setvbuf(asy,NULL,_IONBF,0); + /* Allocate a session descriptor */ + if((sp = newsession(Cmdline,TIP,1)) == NULL){ + _printf(_("Too many sessions\n")); + return 1; + } + /* Put tty into raw mode */ + sp->ttystate.echo = 0; + sp->ttystate.edit = 0; + fmode(stdin,STREAM_BINARY); + fmode(stdout,STREAM_BINARY); + + /* Now fork into two paths, one rx, one tx */ + ifn = malloc(strlen(argv[1]) + 10); + sprintf(ifn,"%s tip out",argv[1]); + sp->proc1 = newproc(ifn,256,tip_out,0,asy,NULL,0); + free( ifn ); + + ifn = malloc(strlen(argv[1]) + 10); + sprintf(ifn,"%s tip in",argv[1]); + chname( Curproc, ifn ); + free( ifn ); + + while((c = fgetc(asy)) != EOF){ + putchar(c); + if(sp->record != NULL) + putc(c,sp->record); + } + fflush(stdout); + + killproc(sp->proc1); + sp->proc1 = NULL; + fclose(asy); + keywait(NULL,1); + freesession(sp); + return 0; +} + + +/* Output process, DTE version */ +static void +tip_out(i,n1,n2) +int i; +void *n1,*n2; +{ + int c; + FILE *asy = (FILE *)n1; + + while((c = getchar()) != EOF){ + fputc(c,asy); + } +} + + diff --git a/src/nos/crt/!readme! b/src/nos/crt/!readme! new file mode 100644 index 00000000..3bd82101 --- /dev/null +++ b/src/nos/crt/!readme! @@ -0,0 +1,410 @@ +UZIX standard library + +The assembly sources standard library of the CPM Hitech-C compiler and adapted +to the UZIX operating system. All library sources from CPM Hitech-C compiler +(and also the compiler itself) were released into public domain by Hitech +Software (see below). + +regexp.c and regsub.c have their own license (see below). + +All the other files are released under GNU GPL license (see below). + +--------------------------------------------------------------------------- + +The HI-TECH Z80 CP/M C compiler V3.09 is provided free of charge for any +use, private or commercial, strictly as-is. No warranty or product +support is offered or implied. + +You may use this software for whatever you like, providing you acknowledge +that the copyright to this software remains with HI-TECH Software. + +The software is distributed in three archive files: + +Z80V309.EXE is a self-extracting lharc'ed archive containing the +entire compiler except for the library source code. + +LIBSRC.EXE is a self-extracting lharc'ed archive containg the library +source code. + +Z80DOC.EXE is a self-extracting lharc'ed archive containing a manual +for the Z80 CP/M compiler. + +To de-archive these files you will need to either run them on a DOS +system, in which case they will self-extract, or use the LHARC program +to extract. LHARC is available for unix as well as DOS. + +HI-TECH Software supplies a range of C cross compilers, as commercial +products, for several embedded microprocessors, including the Z80. + +For more information on our cross compilers, contact: + +HI-TECH Software +PO Box 103 ALDERLEY QLD 4051 AUSTRALIA +Ph. +61 7 300 5011 Fax +61 7 300 5246 +E-Mail: hitech@hitech.com.au + +--------------------------------------------------------------------------- + + Copyright (c) 1986 by University of Toronto. + Written by Henry Spencer. Not derived from licensed software. + + Permission is granted to anyone to use this software for any + purpose on any computer system, and to redistribute it freely, + subject to the following restrictions: + + 1. The author is not responsible for the consequences of use of + this software, no matter how awful, even if they arise + from defects in it. + + 2. The origin of this software must not be misrepresented, either + by explicit claim or by omission. + + 3. Altered versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +------------------------------------------------------------------------------ + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +------------------------------------------------------------------------------ + + \ No newline at end of file diff --git a/src/nos/crt/N9.PMM b/src/nos/crt/N9.PMM new file mode 100644 index 00000000..996cc66a --- /dev/null +++ b/src/nos/crt/N9.PMM @@ -0,0 +1,9 @@ +; n9.pmm + +; converts n.bat files from tcc compilation to iar compilation + +ctcc -mt -O -Ziccz80 -S -w -mb -v1 -z -A -Ic:\iar\ew23\z80\inc\ +c-c  t l-m #bm bg i -l  bg -c.c -c.c l + +;ctlib libc +insert-modules libc.r01  c.obj.r01 + diff --git a/src/nos/crt/abort.c b/src/nos/crt/abort.c new file mode 100644 index 00000000..7a6c8ac1 --- /dev/null +++ b/src/nos/crt/abort.c @@ -0,0 +1,16 @@ +/* + */ +#include +#include +#include +#include + +void abort(void) { + signal(SIGABRT, SIG_DFL); + kill(SIGABRT, getpid()); /* Correct one */ + pause(); /* System may just schedule */ + signal(SIGKILL, SIG_DFL); + kill(SIGKILL, getpid()); /* Can't trap this! */ + _exit(255); /* WHAT!! */ +} + \ No newline at end of file diff --git a/src/nos/crt/alloca-l.h b/src/nos/crt/alloca-l.h new file mode 100644 index 00000000..88819565 --- /dev/null +++ b/src/nos/crt/alloca-l.h @@ -0,0 +1,55 @@ +/* Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + * + * This is a combined alloca/malloc package. It uses a classic algorithm + * and so may be seen to be quite slow compared to more modern routines + * with 'nasty' distributions. + */ +#include +#include +#include +#include +#include + +#define __MINI_MALLOC__ + +#define MCHUNK 512 /* Allocation unit in 'mem' elements */ +/*#define LAZY_FREE /* If set frees can be infinitly defered */ +/*#define MINALLOC 32 /* Smallest chunk to alloc in 'mem's */ +#define VERBOSE /* Lots of noise, debuging ? */ + +#ifdef MAKE_ALL +#define L_malloc +#define L_free +#define L_alloca +#define L_calloc +#define L_realloc +#endif + +#undef malloc +#define MAX_INT ((int)(((unsigned)-1)>>1)) + +#ifdef VERBOSE +#define noise __noise +#else +#define noise(y,x) +#endif + +typedef struct mem_cell { + struct mem_cell *next; /* A pointer to the next mem */ + unsigned int size; /* An int >= sizeof pointer */ + char *depth; /* For the alloca hack */ +} mem; + +#define m_size(p) ((p)[0].size) /* For malloc */ +#define m_next(p) ((p)[0].next) /* For malloc and alloca */ +#define m_deep(p) ((p)[0].depth) /* For alloca */ +#define m_add(x,y) (mem *)((uchar *)x + y) /* Sum mem* with y bytes */ + +#if 0 /* Nick */ +extern void *__mini_malloc __P((size_t)); +extern void *(*__alloca_alloc) __P((size_t)); +extern mem *__freed_list; +#endif + diff --git a/src/nos/crt/alloca.c b/src/nos/crt/alloca.c new file mode 100644 index 00000000..d0d20130 --- /dev/null +++ b/src/nos/crt/alloca.c @@ -0,0 +1,53 @@ +/* Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + * + * This is a combined alloca/malloc package. It uses a classic algorithm + * and so may be seen to be quite slow compared to more modern routines + * with 'nasty' distributions. + */ + +#if 1 /* Nick */ +#include "alloca-l.h" +#else +#include "malloc-l.h" +#endif + +#ifdef L_alloca +static mem *alloca_stack = 0; + +void *alloca(size) + size_t size; +{ + auto char probe; /* Probes stack depth: */ + register mem *hp, *np; + + /* Reclaim garbage, defined as all alloca'd storage that was allocated + * from deeper in the stack than currently. + */ + hp = alloca_stack; + while (hp != 0) { + if (m_deep(hp) < &probe) { + np = m_next(hp); + free(hp); /* Collect garbage */ + hp = np; /* -> next header */ + } + else break; /* Rest are not deeper */ + } + alloca_stack = hp; /* -> last valid storage */ + if (size == 0) + return 0; /* No allocation required */ +#if 1 /* Nick */ + if ((hp = (mem *) malloc(sizeof(mem) * 2 + size)) == 0) +#else + if ((hp = (mem *) (*__alloca_alloc) (sizeof(mem) * 2 + size)) == 0) +#endif + return hp; + m_next(hp) = alloca_stack; + m_deep(hp) = &probe; + alloca_stack = hp; + /* User storage begins just after header */ + return (void *) (hp + 2); +} +#endif /* L_alloca */ + diff --git a/src/nos/crt/asctime.c b/src/nos/crt/asctime.c new file mode 100644 index 00000000..941ad0e3 --- /dev/null +++ b/src/nos/crt/asctime.c @@ -0,0 +1,59 @@ +/*************************** ASCTIME ************************************/ +#include "time-l.h" + +#ifdef L_asctime +/* + * Internal ascii conversion routine, avoid use of printf, it's a bit big! + */ +static void hit __P((char *, int)); + +static void hit(buf, val) + char *buf; + int val; +{ + *buf = '0' + val % 10; +} + +void __asctime(buffer, ptm) + register char *buffer; + struct tm *ptm; +{ + static char days[] = "SunMonTueWedThuFriSat"; + static char mons[] = "JanFebMarAprMayJunJulAugSepOctNovDec"; + int year; + + strcpy(buffer, "Err Err .. ..:..:.. ....\n"); + if ((ptm->tm_wday >= 0) && (ptm->tm_wday <= 6)) + memcpy(buffer, days + 3 * (ptm->tm_wday), 3); + if ((ptm->tm_mon >= 0) && (ptm->tm_mon <= 11)) + memcpy(buffer + 4, mons + 3 * (ptm->tm_mon), 3); + year = ptm->tm_year + 1900; + hit(buffer + 8, ptm->tm_mday / 10); + hit(buffer + 9, ptm->tm_mday); + hit(buffer + 11, ptm->tm_hour / 10); + hit(buffer + 12, ptm->tm_hour); + hit(buffer + 14, ptm->tm_min / 10); + hit(buffer + 15, ptm->tm_min); + hit(buffer + 17, ptm->tm_sec / 10); + hit(buffer + 18, ptm->tm_sec); + hit(buffer + 20, year / 1000); + hit(buffer + 21, year / 100); + hit(buffer + 22, year / 10); + hit(buffer + 23, year); +} + +/* asctime - convert date and time to ascii. + * returns a pointer to the character string containing the date and time. + */ +char *asctime(timeptr) + struct tm *timeptr; +{ + static char timebuf[26]; + + if (timeptr == 0) + return 0; + __asctime(timebuf, timeptr); + return timebuf; +} +#endif + diff --git a/src/nos/crt/assert.c b/src/nos/crt/assert.c new file mode 100644 index 00000000..4d9b33a6 --- /dev/null +++ b/src/nos/crt/assert.c @@ -0,0 +1,30 @@ +/* Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ +#include +#include +#include +#include + +void __errput(str) + char * str; +{ + write(2, str, strlen(str)); +} + +void __assert(assertion, filename, linenumber) + char *assertion; + char *filename; + int linenumber; +{ + __errput("Failed '"); + __errput(assertion); + __errput("', file "); + __errput(filename); + __errput(", line "); + __errput(_itoa(linenumber)); + __errput(".\n"); + abort(); +} + \ No newline at end of file diff --git a/src/nos/crt/atexit.c b/src/nos/crt/atexit.c new file mode 100644 index 00000000..958c4548 --- /dev/null +++ b/src/nos/crt/atexit.c @@ -0,0 +1,71 @@ +/* Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ +/* + * This deals with both the atexit and on_exit function calls + * + * Note: calls installed with atexit are called with the same args as + * on_exit fuctions; the void* is given the NULL value. + */ +#include +#include + +/* ATEXIT.H */ +#define MAXONEXIT 10 /* AIUI Posix requires 10 */ + +typedef void (*vfuncp)(); + +extern struct exit_table { + onexit_t called; + void *argument; +} __on_exit_table[MAXONEXIT]; + +extern int __on_exit_count; + +/* End ATEXIT.H */ + +int __on_exit_count = 0; +struct exit_table __on_exit_table[MAXONEXIT]; + +static void __do_exit __P((int)); + +static void __do_exit(rv) + int rv; +{ + register int count = __on_exit_count - 1; + register vfuncp ptr; + + __on_exit_count = -1; /* ensure no more will be added */ + __cleanup = 0; /* Calling exit won't re-do this */ + /* In reverse order */ + while (count >= 0) { + ptr = (vfuncp)__on_exit_table[count].called; + (*ptr) (rv, __on_exit_table[count].argument); + --count; + } +} + +int on_exit(ptr, arg) + onexit_t ptr; + void *arg; +{ + if (__on_exit_count < 0 || __on_exit_count >= MAXONEXIT) { + errno = ENOMEM; + return -1; + } + __cleanup = (onexit_t)__do_exit; + if (ptr) { + __on_exit_table[__on_exit_count].called = ptr; + __on_exit_table[__on_exit_count].argument = arg; + __on_exit_count++; + } + return 0; +} + +int atexit(ptr) + atexit_t ptr; +{ + return on_exit((onexit_t)ptr,0); +} + diff --git a/src/nos/crt/atoi.c b/src/nos/crt/atoi.c new file mode 100644 index 00000000..2259e870 --- /dev/null +++ b/src/nos/crt/atoi.c @@ -0,0 +1,14 @@ +/* numeric/string conversions package + */ + +#include "cvt.h" + +/**************************** atoi.c ****************************/ +#ifdef L_atoi +int atoi(str) + char *str; +{ + return (int)strtol(str,NULL,10); +} +#endif + diff --git a/src/nos/crt/atol.c b/src/nos/crt/atol.c new file mode 100644 index 00000000..57ecb708 --- /dev/null +++ b/src/nos/crt/atol.c @@ -0,0 +1,14 @@ +/* numeric/string conversions package + */ + +#include "cvt.h" + +/**************************** atol.c ****************************/ +#ifdef L_atol +long atol(str) + char *str; +{ + return strtol(str,NULL,10); +} +#endif + diff --git a/src/nos/crt/bsearch.c b/src/nos/crt/bsearch.c new file mode 100644 index 00000000..b4d03a77 --- /dev/null +++ b/src/nos/crt/bsearch.c @@ -0,0 +1,37 @@ +/* This file lifted in toto from 'Dlibs' on the atari ST (RdeBath) + * + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + */ +#include + +int _bsearch; /* index of element found, or where to insert */ + +void *bsearch(key, base, num, size, cmp) + void *key; /* item to search for */ + void *base; /* base address */ + size_t num; /* number of elements */ + size_t size; /* element size in bytes */ + cmp_func_t cmp; /* comparison function */ +{ + register int a, b, c, dir; + + a = 0; + b = num - 1; + while (a <= b) { + c = (a + b) >> 1; /* == ((a + b) / 2) */ + if (0 != (dir = (*cmp) (((char *)base + (c * size)), key))) { + if (dir > 0) + b = c - 1; + else a = c + 1; /* (dir < 0) */ + } + else { + _bsearch = c; + return ((char *)base + (c * size)); + } + } + _bsearch = b; + return (NULL); +} + \ No newline at end of file diff --git a/src/nos/crt/build-b.ban b/src/nos/crt/build-b.ban new file mode 100644 index 00000000..9a602176 --- /dev/null +++ b/src/nos/crt/build-b.ban @@ -0,0 +1,876 @@ +tradcpp -I../../include ../crt0b.S crt0_banked.asm +as-z80 -l -o -z crt0_banked.asm +@if errorlevel 1 goto failure +copy crt0_banked.rel ..\..\lib +copy crt0_banked.lst ..\..\lib + +tradcpp -I../../include ../setjmpb.S setjmp.asm +as-z80 -l -o -z setjmp.asm +@if errorlevel 1 goto failure + +tradcpp -I../../include ../longjmpb.S longjmp.asm +as-z80 -l -o -z longjmp.asm +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_abort ..\abort +@if errorlevel 1 goto failure +del abort.r01 +as-z80 -l -o -u -z abort.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_alloca ..\alloca +@if errorlevel 1 goto failure +del alloca.r01 +as-z80 -l -o -u -z alloca.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_asctime ..\asctime +@if errorlevel 1 goto failure +del asctime.r01 +as-z80 -l -o -u -z asctime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_assert ..\assert +@if errorlevel 1 goto failure +del assert.r01 +as-z80 -l -o -u -z assert.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_atexit ..\atexit +@if errorlevel 1 goto failure +del atexit.r01 +as-z80 -l -o -u -z atexit.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_atoi ..\atoi +@if errorlevel 1 goto failure +del atoi.r01 +as-z80 -l -o -u -z atoi.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_atol ..\atol +@if errorlevel 1 goto failure +del atol.r01 +as-z80 -l -o -u -z atol.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_bsearch ..\bsearch +@if errorlevel 1 goto failure +del bsearch.r01 +as-z80 -l -o -u -z bsearch.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_calloc ..\calloc +@if errorlevel 1 goto failure +del calloc.r01 +as-z80 -l -o -u -z calloc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_clock ..\clock +@if errorlevel 1 goto failure +del clock.r01 +as-z80 -l -o -u -z clock.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_closedir ..\closedir +@if errorlevel 1 goto failure +del closedir.r01 +as-z80 -l -o -u -z closedir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_convtime ..\convtime +@if errorlevel 1 goto failure +del convtime.r01 +as-z80 -l -o -u -z convtime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_crypt ..\crypt +@if errorlevel 1 goto failure +del crypt.r01 +as-z80 -l -o -u -z crypt.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ctime ..\ctime +@if errorlevel 1 goto failure +del ctime.r01 +as-z80 -l -o -u -z ctime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ctype ..\ctype +@if errorlevel 1 goto failure +del ctype.r01 +as-z80 -l -o -u -z ctype.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_difftime ..\difftime +@if errorlevel 1 goto failure +del difftime.r01 +as-z80 -l -o -u -z difftime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_error ..\error +@if errorlevel 1 goto failure +del error.r01 +as-z80 -l -o -u -z error.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_etime ..\etime +@if errorlevel 1 goto failure +del etime.r01 +as-z80 -l -o -u -z etime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execl ..\execl +@if errorlevel 1 goto failure +del execl.r01 +as-z80 -l -o -u -z execl.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execle ..\execle +@if errorlevel 1 goto failure +del execle.r01 +as-z80 -l -o -u -z execle.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execlp ..\execlp +@if errorlevel 1 goto failure +del execlp.r01 +as-z80 -l -o -u -z execlp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execlpe ..\execlpe +@if errorlevel 1 goto failure +del execlpe.r01 +as-z80 -l -o -u -z execlpe.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_exect ..\exect +@if errorlevel 1 goto failure +del exect.r01 +as-z80 -l -o -u -z exect.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execv ..\execv +@if errorlevel 1 goto failure +del execv.r01 +as-z80 -l -o -u -z execv.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execvp ..\execvp +@if errorlevel 1 goto failure +del execvp.r01 +as-z80 -l -o -u -z execvp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execvpe ..\execvpe +@if errorlevel 1 goto failure +del execvpe.r01 +as-z80 -l -o -u -z execvpe.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_exit ..\exit +@if errorlevel 1 goto failure +del exit.r01 +as-z80 -l -o -u -z exit.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fclose ..\fclose +@if errorlevel 1 goto failure +del fclose.r01 +as-z80 -l -o -u -z fclose.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fflush ..\fflush +@if errorlevel 1 goto failure +del fflush.r01 +as-z80 -l -o -u -z fflush.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fgetc ..\fgetc +@if errorlevel 1 goto failure +del fgetc.r01 +as-z80 -l -o -u -z fgetc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fgetgren ..\fgetgren +@if errorlevel 1 goto failure +del fgetgren.r01 +as-z80 -l -o -u -z fgetgren.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fgetpwen ..\fgetpwen +@if errorlevel 1 goto failure +del fgetpwen.r01 +as-z80 -l -o -u -z fgetpwen.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fgets ..\fgets +@if errorlevel 1 goto failure +del fgets.r01 +as-z80 -l -o -u -z fgets.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fopen ..\fopen +@if errorlevel 1 goto failure +del fopen.r01 +as-z80 -l -o -u -z fopen.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fprintf ..\fprintf +@if errorlevel 1 goto failure +del fprintf.r01 +as-z80 -l -o -u -z fprintf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fputc ..\fputc +@if errorlevel 1 goto failure +del fputc.r01 +as-z80 -l -o -u -z fputc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fputs ..\fputs +@if errorlevel 1 goto failure +del fputs.r01 +as-z80 -l -o -u -z fputs.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fputter ..\fputter +@if errorlevel 1 goto failure +del fputter.r01 +as-z80 -l -o -u -z fputter.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fread ..\fread +@if errorlevel 1 goto failure +del fread.r01 +as-z80 -l -o -u -z fread.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_free ..\free +@if errorlevel 1 goto failure +del free.r01 +as-z80 -l -o -u -z free.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fscanf ..\fscanf +@if errorlevel 1 goto failure +del fscanf.r01 +as-z80 -l -o -u -z fscanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ftell ..\ftell +@if errorlevel 1 goto failure +del ftell.r01 +as-z80 -l -o -u -z ftell.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fwrite ..\fwrite +@if errorlevel 1 goto failure +del fwrite.r01 +as-z80 -l -o -u -z fwrite.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getcwd ..\getcwd +@if errorlevel 1 goto failure +del getcwd.r01 +as-z80 -l -o -u -z getcwd.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getenv ..\getenv +@if errorlevel 1 goto failure +del getenv.r01 +as-z80 -l -o -u -z getenv.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getgrent ..\getgrent +@if errorlevel 1 goto failure +del getgrent.r01 +as-z80 -l -o -u -z getgrent.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getgrgid ..\getgrgid +@if errorlevel 1 goto failure +del getgrgid.r01 +as-z80 -l -o -u -z getgrgid.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getgrnam ..\getgrnam +@if errorlevel 1 goto failure +del getgrnam.r01 +as-z80 -l -o -u -z getgrnam.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getopt ..\getopt +@if errorlevel 1 goto failure +del getopt.r01 +as-z80 -l -o -u -z getopt.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getpass ..\getpass +@if errorlevel 1 goto failure +del getpass.r01 +as-z80 -l -o -u -z getpass.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getpw ..\getpw +@if errorlevel 1 goto failure +del getpw.r01 +as-z80 -l -o -u -z getpw.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getpwent ..\getpwent +@if errorlevel 1 goto failure +del getpwent.r01 +as-z80 -l -o -u -z getpwent.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getpwnam ..\getpwnam +@if errorlevel 1 goto failure +del getpwnam.r01 +as-z80 -l -o -u -z getpwnam.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getpwuid ..\getpwuid +@if errorlevel 1 goto failure +del getpwuid.r01 +as-z80 -l -o -u -z getpwuid.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_gets ..\gets +@if errorlevel 1 goto failure +del gets.r01 +as-z80 -l -o -u -z gets.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_gmtime ..\gmtime +@if errorlevel 1 goto failure +del gmtime.r01 +as-z80 -l -o -u -z gmtime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_initgrup ..\initgrup +@if errorlevel 1 goto failure +del initgrup.r01 +as-z80 -l -o -u -z initgrup.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_isatty ..\isatty +@if errorlevel 1 goto failure +del isatty.r01 +as-z80 -l -o -u -z isatty.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_itoa ..\itoa +@if errorlevel 1 goto failure +del itoa.r01 +as-z80 -l -o -u -z itoa.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_localtim ..\localtim +@if errorlevel 1 goto failure +del localtim.r01 +as-z80 -l -o -u -z localtim.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_lsearch ..\lsearch +@if errorlevel 1 goto failure +del lsearch.r01 +as-z80 -l -o -u -z lsearch.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_lstat ..\lstat +@if errorlevel 1 goto failure +del lstat.r01 +as-z80 -l -o -u -z lstat.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ltoa ..\ltoa +@if errorlevel 1 goto failure +del ltoa.r01 +as-z80 -l -o -u -z ltoa.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ltostr ..\ltostr +@if errorlevel 1 goto failure +del ltostr.r01 +as-z80 -l -o -u -z ltostr.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_malloc ..\malloc +@if errorlevel 1 goto failure +del malloc.r01 +as-z80 -l -o -u -z malloc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memccpy ..\memccpy +@if errorlevel 1 goto failure +del memccpy.r01 +as-z80 -l -o -u -z memccpy.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memchr ..\memchr +@if errorlevel 1 goto failure +del memchr.r01 +as-z80 -l -o -u -z memchr.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memcmp ..\memcmp +@if errorlevel 1 goto failure +del memcmp.r01 +as-z80 -l -o -u -z memcmp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memcpy ..\memcpy +@if errorlevel 1 goto failure +del memcpy.r01 +as-z80 -l -o -u -z memcpy.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memmove ..\memmove +@if errorlevel 1 goto failure +del memmove.r01 +as-z80 -l -o -u -z memmove.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memset ..\memset +@if errorlevel 1 goto failure +del memset.r01 +as-z80 -l -o -u -z memset.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_mkdir ..\mkdir +@if errorlevel 1 goto failure +del mkdir.r01 +as-z80 -l -o -u -z mkdir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_mktime ..\mktime +@if errorlevel 1 goto failure +del mktime.r01 +as-z80 -l -o -u -z mktime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_opendir ..\opendir +@if errorlevel 1 goto failure +del opendir.r01 +as-z80 -l -o -u -z opendir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_perror ..\perror +@if errorlevel 1 goto failure +del perror.r01 +as-z80 -l -o -u -z perror.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_popen ..\popen +@if errorlevel 1 goto failure +del popen.r01 +as-z80 -l -o -u -z popen.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_printf ..\printf +@if errorlevel 1 goto failure +del printf.r01 +as-z80 -l -o -u -z printf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_putenv ..\putenv +@if errorlevel 1 goto failure +del putenv.r01 +as-z80 -l -o -u -z putenv.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_putgetch ..\putgetch +@if errorlevel 1 goto failure +del putgetch.r01 +as-z80 -l -o -u -z putgetch.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_putpwent ..\putpwent +@if errorlevel 1 goto failure +del putpwent.r01 +as-z80 -l -o -u -z putpwent.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_qsort ..\qsort +@if errorlevel 1 goto failure +del qsort.r01 +as-z80 -l -o -u -z qsort.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_rand ..\rand +@if errorlevel 1 goto failure +del rand.r01 +as-z80 -l -o -u -z rand.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_readdir ..\readdir +@if errorlevel 1 goto failure +del readdir.r01 +as-z80 -l -o -u -z readdir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_readlink ..\readlink +@if errorlevel 1 goto failure +del readlink.r01 +as-z80 -l -o -u -z readlink.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_realloc ..\realloc +@if errorlevel 1 goto failure +del realloc.r01 +as-z80 -l -o -u -z realloc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_regerror ..\regerror +@if errorlevel 1 goto failure +del regerror.r01 +as-z80 -l -o -u -z regerror.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_regexp ..\regexp +@if errorlevel 1 goto failure +del regexp.r01 +as-z80 -l -o -u -z regexp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_regsub ..\regsub +@if errorlevel 1 goto failure +del regsub.r01 +as-z80 -l -o -u -z regsub.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_rename ..\rename +@if errorlevel 1 goto failure +del rename.r01 +as-z80 -l -o -u -z rename.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_rewind ..\rewind +@if errorlevel 1 goto failure +del rewind.r01 +as-z80 -l -o -u -z rewind.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_rewindir ..\rewindir +@if errorlevel 1 goto failure +del rewindir.r01 +as-z80 -l -o -u -z rewindir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_rmdir ..\rmdir +@if errorlevel 1 goto failure +del rmdir.r01 +as-z80 -l -o -u -z rmdir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_scanf ..\scanf +@if errorlevel 1 goto failure +del scanf.r01 +as-z80 -l -o -u -z scanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_setbuff ..\setbuff +@if errorlevel 1 goto failure +del setbuff.r01 +as-z80 -l -o -u -z setbuff.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_setenv ..\setenv +@if errorlevel 1 goto failure +del setenv.r01 +as-z80 -l -o -u -z setenv.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_setgrent ..\setgrent +@if errorlevel 1 goto failure +del setgrent.r01 +as-z80 -l -o -u -z setgrent.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_setpwent ..\setpwent +@if errorlevel 1 goto failure +del setpwent.r01 +as-z80 -l -o -u -z setpwent.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_setvbuff ..\setvbuff +@if errorlevel 1 goto failure +del setvbuff.r01 +as-z80 -l -o -u -z setvbuff.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_sleep ..\sleep +@if errorlevel 1 goto failure +del sleep.r01 +as-z80 -l -o -u -z sleep.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_sprintf ..\sprintf +@if errorlevel 1 goto failure +del sprintf.r01 +as-z80 -l -o -u -z sprintf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_sputter ..\sputter +@if errorlevel 1 goto failure +del sputter.r01 +as-z80 -l -o -u -z sputter.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_sscanf ..\sscanf +@if errorlevel 1 goto failure +del sscanf.r01 +as-z80 -l -o -u -z sscanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_stdio0 ..\stdio0 +@if errorlevel 1 goto failure +del stdio0.r01 +as-z80 -l -o -u -z stdio0.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strcat ..\strcat +@if errorlevel 1 goto failure +del strcat.r01 +as-z80 -l -o -u -z strcat.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strchr ..\strchr +@if errorlevel 1 goto failure +del strchr.r01 +as-z80 -l -o -u -z strchr.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strcmp ..\strcmp +@if errorlevel 1 goto failure +del strcmp.r01 +as-z80 -l -o -u -z strcmp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strcpy ..\strcpy +@if errorlevel 1 goto failure +del strcpy.r01 +as-z80 -l -o -u -z strcpy.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strcspn ..\strcspn +@if errorlevel 1 goto failure +del strcspn.r01 +as-z80 -l -o -u -z strcspn.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strdup ..\strdup +@if errorlevel 1 goto failure +del strdup.r01 +as-z80 -l -o -u -z strdup.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_stricmp ..\stricmp +@if errorlevel 1 goto failure +del stricmp.r01 +as-z80 -l -o -u -z stricmp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strlen ..\strlen +@if errorlevel 1 goto failure +del strlen.r01 +as-z80 -l -o -u -z strlen.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strncat ..\strncat +@if errorlevel 1 goto failure +del strncat.r01 +as-z80 -l -o -u -z strncat.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strncmp ..\strncmp +@if errorlevel 1 goto failure +del strncmp.r01 +as-z80 -l -o -u -z strncmp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strncpy ..\strncpy +@if errorlevel 1 goto failure +del strncpy.r01 +as-z80 -l -o -u -z strncpy.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strnicmp ..\strnicmp +@if errorlevel 1 goto failure +del strnicmp.r01 +as-z80 -l -o -u -z strnicmp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strpbrk ..\strpbrk +@if errorlevel 1 goto failure +del strpbrk.r01 +as-z80 -l -o -u -z strpbrk.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strrchr ..\strrchr +@if errorlevel 1 goto failure +del strrchr.r01 +as-z80 -l -o -u -z strrchr.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strsep ..\strsep +@if errorlevel 1 goto failure +del strsep.r01 +as-z80 -l -o -u -z strsep.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strspn ..\strspn +@if errorlevel 1 goto failure +del strspn.r01 +as-z80 -l -o -u -z strspn.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strstr ..\strstr +@if errorlevel 1 goto failure +del strstr.r01 +as-z80 -l -o -u -z strstr.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strtod ..\strtod +@if errorlevel 1 goto failure +del strtod.r01 +as-z80 -l -o -u -z strtod.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strtok ..\strtok +@if errorlevel 1 goto failure +del strtok.r01 +as-z80 -l -o -u -z strtok.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strtol ..\strtol +@if errorlevel 1 goto failure +del strtol.r01 +as-z80 -l -o -u -z strtol.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strtoul ..\strtoul +@if errorlevel 1 goto failure +del strtoul.r01 +as-z80 -l -o -u -z strtoul.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_system ..\system +@if errorlevel 1 goto failure +del system.r01 +as-z80 -l -o -u -z system.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_termcap ..\termcap +@if errorlevel 1 goto failure +del termcap.r01 +as-z80 -l -o -u -z termcap.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_tmpnam ..\tmpnam +@if errorlevel 1 goto failure +del tmpnam.r01 +as-z80 -l -o -u -z tmpnam.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_tparam ..\tparam +@if errorlevel 1 goto failure +del tparam.r01 +as-z80 -l -o -u -z tparam.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ttyname ..\ttyname +@if errorlevel 1 goto failure +del ttyname.r01 +as-z80 -l -o -u -z ttyname.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_tzset ..\tzset +@if errorlevel 1 goto failure +del tzset.r01 +as-z80 -l -o -u -z tzset.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ultoa ..\ultoa +@if errorlevel 1 goto failure +del ultoa.r01 +as-z80 -l -o -u -z ultoa.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ungetc ..\ungetc +@if errorlevel 1 goto failure +del ungetc.r01 +as-z80 -l -o -u -z ungetc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_utsname ..\utsname +@if errorlevel 1 goto failure +del utsname.r01 +as-z80 -l -o -u -z utsname.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vfprintf ..\vfprintf +@if errorlevel 1 goto failure +del vfprintf.r01 +as-z80 -l -o -u -z vfprintf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vfscanf ..\vfscanf +@if errorlevel 1 goto failure +del vfscanf.r01 +as-z80 -l -o -u -z vfscanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vprinter ..\vprinter +@if errorlevel 1 goto failure +del vprinter.r01 +as-z80 -l -o -u -z vprinter.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vprintf ..\vprintf +@if errorlevel 1 goto failure +del vprintf.r01 +as-z80 -l -o -u -z vprintf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vscanf ..\vscanf +@if errorlevel 1 goto failure +del vscanf.r01 +as-z80 -l -o -u -z vscanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vsprintf ..\vsprintf +@if errorlevel 1 goto failure +del vsprintf.r01 +as-z80 -l -o -u -z vsprintf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vsscanf ..\vsscanf +@if errorlevel 1 goto failure +del vsscanf.r01 +as-z80 -l -o -u -z vsscanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_xitoa ..\xitoa +@if errorlevel 1 goto failure +del xitoa.r01 +as-z80 -l -o -u -z xitoa.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -mb -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_xltoa ..\xltoa +@if errorlevel 1 goto failure +del xltoa.r01 +as-z80 -l -o -u -z xltoa.s01 +@if errorlevel 1 goto failure + +copy ..\crt_banked.lbr +lib-z80 -f crt_banked +@if errorlevel 1 goto failure + +@echo SUCCESS +@goto done +:failure +@echo FAILURE +:done + diff --git a/src/nos/crt/build-l.ban b/src/nos/crt/build-l.ban new file mode 100644 index 00000000..e9bc860b --- /dev/null +++ b/src/nos/crt/build-l.ban @@ -0,0 +1,876 @@ +tradcpp -I../../include ../crt0l.S crt0_large.asm +as-z80 -l -o -z crt0_large.asm +@if errorlevel 1 goto failure +copy crt0_large.rel ..\..\lib +copy crt0_large.lst ..\..\lib + +tradcpp -I../../include ../setjmpl.S setjmp.asm +as-z80 -l -o -z setjmp.asm +@if errorlevel 1 goto failure + +tradcpp -I../../include ../longjmpl.S longjmp.asm +as-z80 -l -o -z longjmp.asm +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_abort ..\abort +@if errorlevel 1 goto failure +del abort.r01 +as-z80 -l -o -u -z abort.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_alloca ..\alloca +@if errorlevel 1 goto failure +del alloca.r01 +as-z80 -l -o -u -z alloca.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_asctime ..\asctime +@if errorlevel 1 goto failure +del asctime.r01 +as-z80 -l -o -u -z asctime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_assert ..\assert +@if errorlevel 1 goto failure +del assert.r01 +as-z80 -l -o -u -z assert.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_atexit ..\atexit +@if errorlevel 1 goto failure +del atexit.r01 +as-z80 -l -o -u -z atexit.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_atoi ..\atoi +@if errorlevel 1 goto failure +del atoi.r01 +as-z80 -l -o -u -z atoi.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_atol ..\atol +@if errorlevel 1 goto failure +del atol.r01 +as-z80 -l -o -u -z atol.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_bsearch ..\bsearch +@if errorlevel 1 goto failure +del bsearch.r01 +as-z80 -l -o -u -z bsearch.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_calloc ..\calloc +@if errorlevel 1 goto failure +del calloc.r01 +as-z80 -l -o -u -z calloc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_clock ..\clock +@if errorlevel 1 goto failure +del clock.r01 +as-z80 -l -o -u -z clock.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_closedir ..\closedir +@if errorlevel 1 goto failure +del closedir.r01 +as-z80 -l -o -u -z closedir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_convtime ..\convtime +@if errorlevel 1 goto failure +del convtime.r01 +as-z80 -l -o -u -z convtime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_crypt ..\crypt +@if errorlevel 1 goto failure +del crypt.r01 +as-z80 -l -o -u -z crypt.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ctime ..\ctime +@if errorlevel 1 goto failure +del ctime.r01 +as-z80 -l -o -u -z ctime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ctype ..\ctype +@if errorlevel 1 goto failure +del ctype.r01 +as-z80 -l -o -u -z ctype.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_difftime ..\difftime +@if errorlevel 1 goto failure +del difftime.r01 +as-z80 -l -o -u -z difftime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_error ..\error +@if errorlevel 1 goto failure +del error.r01 +as-z80 -l -o -u -z error.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_etime ..\etime +@if errorlevel 1 goto failure +del etime.r01 +as-z80 -l -o -u -z etime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execl ..\execl +@if errorlevel 1 goto failure +del execl.r01 +as-z80 -l -o -u -z execl.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execle ..\execle +@if errorlevel 1 goto failure +del execle.r01 +as-z80 -l -o -u -z execle.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execlp ..\execlp +@if errorlevel 1 goto failure +del execlp.r01 +as-z80 -l -o -u -z execlp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execlpe ..\execlpe +@if errorlevel 1 goto failure +del execlpe.r01 +as-z80 -l -o -u -z execlpe.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_exect ..\exect +@if errorlevel 1 goto failure +del exect.r01 +as-z80 -l -o -u -z exect.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execv ..\execv +@if errorlevel 1 goto failure +del execv.r01 +as-z80 -l -o -u -z execv.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execvp ..\execvp +@if errorlevel 1 goto failure +del execvp.r01 +as-z80 -l -o -u -z execvp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_execvpe ..\execvpe +@if errorlevel 1 goto failure +del execvpe.r01 +as-z80 -l -o -u -z execvpe.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_exit ..\exit +@if errorlevel 1 goto failure +del exit.r01 +as-z80 -l -o -u -z exit.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fclose ..\fclose +@if errorlevel 1 goto failure +del fclose.r01 +as-z80 -l -o -u -z fclose.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fflush ..\fflush +@if errorlevel 1 goto failure +del fflush.r01 +as-z80 -l -o -u -z fflush.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fgetc ..\fgetc +@if errorlevel 1 goto failure +del fgetc.r01 +as-z80 -l -o -u -z fgetc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fgetgren ..\fgetgren +@if errorlevel 1 goto failure +del fgetgren.r01 +as-z80 -l -o -u -z fgetgren.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fgetpwen ..\fgetpwen +@if errorlevel 1 goto failure +del fgetpwen.r01 +as-z80 -l -o -u -z fgetpwen.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fgets ..\fgets +@if errorlevel 1 goto failure +del fgets.r01 +as-z80 -l -o -u -z fgets.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fopen ..\fopen +@if errorlevel 1 goto failure +del fopen.r01 +as-z80 -l -o -u -z fopen.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fprintf ..\fprintf +@if errorlevel 1 goto failure +del fprintf.r01 +as-z80 -l -o -u -z fprintf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fputc ..\fputc +@if errorlevel 1 goto failure +del fputc.r01 +as-z80 -l -o -u -z fputc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fputs ..\fputs +@if errorlevel 1 goto failure +del fputs.r01 +as-z80 -l -o -u -z fputs.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fputter ..\fputter +@if errorlevel 1 goto failure +del fputter.r01 +as-z80 -l -o -u -z fputter.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fread ..\fread +@if errorlevel 1 goto failure +del fread.r01 +as-z80 -l -o -u -z fread.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_free ..\free +@if errorlevel 1 goto failure +del free.r01 +as-z80 -l -o -u -z free.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fscanf ..\fscanf +@if errorlevel 1 goto failure +del fscanf.r01 +as-z80 -l -o -u -z fscanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ftell ..\ftell +@if errorlevel 1 goto failure +del ftell.r01 +as-z80 -l -o -u -z ftell.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_fwrite ..\fwrite +@if errorlevel 1 goto failure +del fwrite.r01 +as-z80 -l -o -u -z fwrite.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getcwd ..\getcwd +@if errorlevel 1 goto failure +del getcwd.r01 +as-z80 -l -o -u -z getcwd.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getenv ..\getenv +@if errorlevel 1 goto failure +del getenv.r01 +as-z80 -l -o -u -z getenv.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getgrent ..\getgrent +@if errorlevel 1 goto failure +del getgrent.r01 +as-z80 -l -o -u -z getgrent.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getgrgid ..\getgrgid +@if errorlevel 1 goto failure +del getgrgid.r01 +as-z80 -l -o -u -z getgrgid.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getgrnam ..\getgrnam +@if errorlevel 1 goto failure +del getgrnam.r01 +as-z80 -l -o -u -z getgrnam.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getopt ..\getopt +@if errorlevel 1 goto failure +del getopt.r01 +as-z80 -l -o -u -z getopt.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getpass ..\getpass +@if errorlevel 1 goto failure +del getpass.r01 +as-z80 -l -o -u -z getpass.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getpw ..\getpw +@if errorlevel 1 goto failure +del getpw.r01 +as-z80 -l -o -u -z getpw.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getpwent ..\getpwent +@if errorlevel 1 goto failure +del getpwent.r01 +as-z80 -l -o -u -z getpwent.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getpwnam ..\getpwnam +@if errorlevel 1 goto failure +del getpwnam.r01 +as-z80 -l -o -u -z getpwnam.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_getpwuid ..\getpwuid +@if errorlevel 1 goto failure +del getpwuid.r01 +as-z80 -l -o -u -z getpwuid.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_gets ..\gets +@if errorlevel 1 goto failure +del gets.r01 +as-z80 -l -o -u -z gets.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_gmtime ..\gmtime +@if errorlevel 1 goto failure +del gmtime.r01 +as-z80 -l -o -u -z gmtime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_initgrup ..\initgrup +@if errorlevel 1 goto failure +del initgrup.r01 +as-z80 -l -o -u -z initgrup.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_isatty ..\isatty +@if errorlevel 1 goto failure +del isatty.r01 +as-z80 -l -o -u -z isatty.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_itoa ..\itoa +@if errorlevel 1 goto failure +del itoa.r01 +as-z80 -l -o -u -z itoa.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_localtim ..\localtim +@if errorlevel 1 goto failure +del localtim.r01 +as-z80 -l -o -u -z localtim.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_lsearch ..\lsearch +@if errorlevel 1 goto failure +del lsearch.r01 +as-z80 -l -o -u -z lsearch.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_lstat ..\lstat +@if errorlevel 1 goto failure +del lstat.r01 +as-z80 -l -o -u -z lstat.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ltoa ..\ltoa +@if errorlevel 1 goto failure +del ltoa.r01 +as-z80 -l -o -u -z ltoa.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ltostr ..\ltostr +@if errorlevel 1 goto failure +del ltostr.r01 +as-z80 -l -o -u -z ltostr.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_malloc ..\malloc +@if errorlevel 1 goto failure +del malloc.r01 +as-z80 -l -o -u -z malloc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memccpy ..\memccpy +@if errorlevel 1 goto failure +del memccpy.r01 +as-z80 -l -o -u -z memccpy.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memchr ..\memchr +@if errorlevel 1 goto failure +del memchr.r01 +as-z80 -l -o -u -z memchr.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memcmp ..\memcmp +@if errorlevel 1 goto failure +del memcmp.r01 +as-z80 -l -o -u -z memcmp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memcpy ..\memcpy +@if errorlevel 1 goto failure +del memcpy.r01 +as-z80 -l -o -u -z memcpy.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memmove ..\memmove +@if errorlevel 1 goto failure +del memmove.r01 +as-z80 -l -o -u -z memmove.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_memset ..\memset +@if errorlevel 1 goto failure +del memset.r01 +as-z80 -l -o -u -z memset.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_mkdir ..\mkdir +@if errorlevel 1 goto failure +del mkdir.r01 +as-z80 -l -o -u -z mkdir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_mktime ..\mktime +@if errorlevel 1 goto failure +del mktime.r01 +as-z80 -l -o -u -z mktime.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_opendir ..\opendir +@if errorlevel 1 goto failure +del opendir.r01 +as-z80 -l -o -u -z opendir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_perror ..\perror +@if errorlevel 1 goto failure +del perror.r01 +as-z80 -l -o -u -z perror.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_popen ..\popen +@if errorlevel 1 goto failure +del popen.r01 +as-z80 -l -o -u -z popen.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_printf ..\printf +@if errorlevel 1 goto failure +del printf.r01 +as-z80 -l -o -u -z printf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_putenv ..\putenv +@if errorlevel 1 goto failure +del putenv.r01 +as-z80 -l -o -u -z putenv.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_putgetch ..\putgetch +@if errorlevel 1 goto failure +del putgetch.r01 +as-z80 -l -o -u -z putgetch.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_putpwent ..\putpwent +@if errorlevel 1 goto failure +del putpwent.r01 +as-z80 -l -o -u -z putpwent.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_qsort ..\qsort +@if errorlevel 1 goto failure +del qsort.r01 +as-z80 -l -o -u -z qsort.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_rand ..\rand +@if errorlevel 1 goto failure +del rand.r01 +as-z80 -l -o -u -z rand.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_readdir ..\readdir +@if errorlevel 1 goto failure +del readdir.r01 +as-z80 -l -o -u -z readdir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_readlink ..\readlink +@if errorlevel 1 goto failure +del readlink.r01 +as-z80 -l -o -u -z readlink.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_realloc ..\realloc +@if errorlevel 1 goto failure +del realloc.r01 +as-z80 -l -o -u -z realloc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_regerror ..\regerror +@if errorlevel 1 goto failure +del regerror.r01 +as-z80 -l -o -u -z regerror.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_regexp ..\regexp +@if errorlevel 1 goto failure +del regexp.r01 +as-z80 -l -o -u -z regexp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_regsub ..\regsub +@if errorlevel 1 goto failure +del regsub.r01 +as-z80 -l -o -u -z regsub.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_rename ..\rename +@if errorlevel 1 goto failure +del rename.r01 +as-z80 -l -o -u -z rename.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_rewind ..\rewind +@if errorlevel 1 goto failure +del rewind.r01 +as-z80 -l -o -u -z rewind.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_rewindir ..\rewindir +@if errorlevel 1 goto failure +del rewindir.r01 +as-z80 -l -o -u -z rewindir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_rmdir ..\rmdir +@if errorlevel 1 goto failure +del rmdir.r01 +as-z80 -l -o -u -z rmdir.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_scanf ..\scanf +@if errorlevel 1 goto failure +del scanf.r01 +as-z80 -l -o -u -z scanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_setbuff ..\setbuff +@if errorlevel 1 goto failure +del setbuff.r01 +as-z80 -l -o -u -z setbuff.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_setenv ..\setenv +@if errorlevel 1 goto failure +del setenv.r01 +as-z80 -l -o -u -z setenv.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_setgrent ..\setgrent +@if errorlevel 1 goto failure +del setgrent.r01 +as-z80 -l -o -u -z setgrent.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_setpwent ..\setpwent +@if errorlevel 1 goto failure +del setpwent.r01 +as-z80 -l -o -u -z setpwent.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_setvbuff ..\setvbuff +@if errorlevel 1 goto failure +del setvbuff.r01 +as-z80 -l -o -u -z setvbuff.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_sleep ..\sleep +@if errorlevel 1 goto failure +del sleep.r01 +as-z80 -l -o -u -z sleep.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_sprintf ..\sprintf +@if errorlevel 1 goto failure +del sprintf.r01 +as-z80 -l -o -u -z sprintf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_sputter ..\sputter +@if errorlevel 1 goto failure +del sputter.r01 +as-z80 -l -o -u -z sputter.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_sscanf ..\sscanf +@if errorlevel 1 goto failure +del sscanf.r01 +as-z80 -l -o -u -z sscanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_stdio0 ..\stdio0 +@if errorlevel 1 goto failure +del stdio0.r01 +as-z80 -l -o -u -z stdio0.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strcat ..\strcat +@if errorlevel 1 goto failure +del strcat.r01 +as-z80 -l -o -u -z strcat.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strchr ..\strchr +@if errorlevel 1 goto failure +del strchr.r01 +as-z80 -l -o -u -z strchr.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strcmp ..\strcmp +@if errorlevel 1 goto failure +del strcmp.r01 +as-z80 -l -o -u -z strcmp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strcpy ..\strcpy +@if errorlevel 1 goto failure +del strcpy.r01 +as-z80 -l -o -u -z strcpy.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strcspn ..\strcspn +@if errorlevel 1 goto failure +del strcspn.r01 +as-z80 -l -o -u -z strcspn.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strdup ..\strdup +@if errorlevel 1 goto failure +del strdup.r01 +as-z80 -l -o -u -z strdup.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_stricmp ..\stricmp +@if errorlevel 1 goto failure +del stricmp.r01 +as-z80 -l -o -u -z stricmp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strlen ..\strlen +@if errorlevel 1 goto failure +del strlen.r01 +as-z80 -l -o -u -z strlen.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strncat ..\strncat +@if errorlevel 1 goto failure +del strncat.r01 +as-z80 -l -o -u -z strncat.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strncmp ..\strncmp +@if errorlevel 1 goto failure +del strncmp.r01 +as-z80 -l -o -u -z strncmp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strncpy ..\strncpy +@if errorlevel 1 goto failure +del strncpy.r01 +as-z80 -l -o -u -z strncpy.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strnicmp ..\strnicmp +@if errorlevel 1 goto failure +del strnicmp.r01 +as-z80 -l -o -u -z strnicmp.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strpbrk ..\strpbrk +@if errorlevel 1 goto failure +del strpbrk.r01 +as-z80 -l -o -u -z strpbrk.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strrchr ..\strrchr +@if errorlevel 1 goto failure +del strrchr.r01 +as-z80 -l -o -u -z strrchr.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strsep ..\strsep +@if errorlevel 1 goto failure +del strsep.r01 +as-z80 -l -o -u -z strsep.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strspn ..\strspn +@if errorlevel 1 goto failure +del strspn.r01 +as-z80 -l -o -u -z strspn.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strstr ..\strstr +@if errorlevel 1 goto failure +del strstr.r01 +as-z80 -l -o -u -z strstr.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strtod ..\strtod +@if errorlevel 1 goto failure +del strtod.r01 +as-z80 -l -o -u -z strtod.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strtok ..\strtok +@if errorlevel 1 goto failure +del strtok.r01 +as-z80 -l -o -u -z strtok.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strtol ..\strtol +@if errorlevel 1 goto failure +del strtol.r01 +as-z80 -l -o -u -z strtol.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_strtoul ..\strtoul +@if errorlevel 1 goto failure +del strtoul.r01 +as-z80 -l -o -u -z strtoul.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_system ..\system +@if errorlevel 1 goto failure +del system.r01 +as-z80 -l -o -u -z system.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_termcap ..\termcap +@if errorlevel 1 goto failure +del termcap.r01 +as-z80 -l -o -u -z termcap.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_tmpnam ..\tmpnam +@if errorlevel 1 goto failure +del tmpnam.r01 +as-z80 -l -o -u -z tmpnam.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_tparam ..\tparam +@if errorlevel 1 goto failure +del tparam.r01 +as-z80 -l -o -u -z tparam.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ttyname ..\ttyname +@if errorlevel 1 goto failure +del ttyname.r01 +as-z80 -l -o -u -z ttyname.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_tzset ..\tzset +@if errorlevel 1 goto failure +del tzset.r01 +as-z80 -l -o -u -z tzset.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ultoa ..\ultoa +@if errorlevel 1 goto failure +del ultoa.r01 +as-z80 -l -o -u -z ultoa.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_ungetc ..\ungetc +@if errorlevel 1 goto failure +del ungetc.r01 +as-z80 -l -o -u -z ungetc.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_utsname ..\utsname +@if errorlevel 1 goto failure +del utsname.r01 +as-z80 -l -o -u -z utsname.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vfprintf ..\vfprintf +@if errorlevel 1 goto failure +del vfprintf.r01 +as-z80 -l -o -u -z vfprintf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vfscanf ..\vfscanf +@if errorlevel 1 goto failure +del vfscanf.r01 +as-z80 -l -o -u -z vfscanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vprinter ..\vprinter +@if errorlevel 1 goto failure +del vprinter.r01 +as-z80 -l -o -u -z vprinter.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vprintf ..\vprintf +@if errorlevel 1 goto failure +del vprintf.r01 +as-z80 -l -o -u -z vprintf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vscanf ..\vscanf +@if errorlevel 1 goto failure +del vscanf.r01 +as-z80 -l -o -u -z vscanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vsprintf ..\vsprintf +@if errorlevel 1 goto failure +del vsprintf.r01 +as-z80 -l -o -u -z vsprintf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_vsscanf ..\vsscanf +@if errorlevel 1 goto failure +del vsscanf.r01 +as-z80 -l -o -u -z vsscanf.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_xitoa ..\xitoa +@if errorlevel 1 goto failure +del xitoa.r01 +as-z80 -l -o -u -z xitoa.s01 +@if errorlevel 1 goto failure + +iccz80 -S -w -ml -v1 -z -A -I..\..\include\ -I..\..\..\kernel\uzi\ -DMAKE_ALL -H_xltoa ..\xltoa +@if errorlevel 1 goto failure +del xltoa.r01 +as-z80 -l -o -u -z xltoa.s01 +@if errorlevel 1 goto failure + +copy ..\crt_large.lbr +lib-z80 -f crt_large +@if errorlevel 1 goto failure + +@echo SUCCESS +@goto done +:failure +@echo FAILURE +:done + diff --git a/src/nos/crt/calloc.c b/src/nos/crt/calloc.c new file mode 100644 index 00000000..0327131d --- /dev/null +++ b/src/nos/crt/calloc.c @@ -0,0 +1,28 @@ +/* Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + * + * This is a combined alloca/malloc package. It uses a classic algorithm + * and so may be seen to be quite slow compared to more modern routines + * with 'nasty' distributions. + */ + +#if 1 /* Nick */ +#include "alloca-l.h" +#else +#include "malloc-l.h" +#endif + +#ifdef L_calloc +void *calloc(elm, sz) + unsigned elm, sz; +{ + register unsigned v = elm*sz; + register void *ptr = malloc(v); + + if (ptr) + memset(ptr, 0, v); + return ptr; +} +#endif /* L_calloc */ + diff --git a/src/nos/crt/clock.c b/src/nos/crt/clock.c new file mode 100644 index 00000000..20740d31 --- /dev/null +++ b/src/nos/crt/clock.c @@ -0,0 +1,15 @@ +/*************************** CLOCK ************************************/ +#include "time-l.h" + +#ifdef L_clock +#include +#include + +long clock(VOID) { + struct tms __tms; + + times(&__tms); + return __tms.tms_utime; /* Nick (__tms.tms_utime.t_time+__tms.tms_utime.t_date*CLOCKS_PER_SEC*60); */ +} +#endif + diff --git a/src/nos/crt/closedir.c b/src/nos/crt/closedir.c new file mode 100644 index 00000000..d07507b9 --- /dev/null +++ b/src/nos/crt/closedir.c @@ -0,0 +1,26 @@ +/* close.c closedir implementation + * + */ +#include +#include +#include +#include +#include +#include +#include + +int closedir(dir) + register DIR *dir; +{ + if (dir == NULL || dir->dd_buf == NULL || dir->dd_fd == 0) { + errno = EFAULT; + return -1; + } + close(dir->dd_fd); + free(dir->dd_buf); + dir->dd_fd = 0; + dir->dd_buf = NULL; + free(dir); + return 0; +} + diff --git a/src/nos/crt/convtime.c b/src/nos/crt/convtime.c new file mode 100644 index 00000000..fd565601 --- /dev/null +++ b/src/nos/crt/convtime.c @@ -0,0 +1,64 @@ +/* UZIX time format (very simular to msdos) + * + * time_t.data: + * + * |7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0| + * | | | | | | | | | | | | | | | | | + * \ 7 bits /\4 bits/\ 5 bits / + * year+1980 month day + * + * time_t.time: + * + * |7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0| + * | | | | | | | | | | | | | | | | | + * \ 5 bits /\ 6 bits /\ 5 bits / + * hour minutes sec*2 + */ + +/* + * Convert a UZIX time & date to the Unix time() format. + * (adapted from mtools convdate) + * + * Adapted from UZI280 by Stefan Nitchske + */ + +#include "time-l.h" +#include + +unsigned long +convtime(time_field) +time_t *time_field; +{ + unsigned year, mon, mday, hour, min, sec, old_leaps; + unsigned long answer, sec_year, sec_mon, sec_mday, + sec_hour, sec_min, sec_leap; + static unsigned month[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, + 334}; + /* disect the parts */ + year = ( (((dostime_t *)time_field)->t_date&0xfe00) >> 9) + 1980; + if (year<1972) + year += 100; + mon = (((dostime_t *)time_field)->t_date&0x01e0) >> 5; + mday = ((dostime_t *)time_field)->t_date&0x1f; + hour = (((dostime_t *)time_field)->t_time&0xf800) >> 11; + min = (((dostime_t *)time_field)->t_time&0x07e0) >> 5; + sec = (((dostime_t *)time_field)->t_time&0x001f) * 2; + /* how many previous leap years */ + year = year - 1970; + old_leaps = year / 4; + sec_leap = old_leaps * 24L * 60L * 60L; + /* back off 1 day if before 29 Feb */ + if (!(year % 4) && mon < 3) + sec_leap -= 24L * 60L * 60L; + + sec_year = year * 365L * 24L * 60L * 60L; + mon = month[mon -1]; + sec_mon = mon * 24L * 60L * 60L; + sec_mday = mday * 24L * 60L * 60L; + sec_hour = hour * 60L * 60L; + sec_min = min * 60L; + + answer = sec_leap + sec_year + sec_mon + sec_mday + sec_hour + + sec_min + (long)sec + (long)timezone; + return(answer); +} diff --git a/src/nos/crt/crt0b.S b/src/nos/crt/crt0b.S new file mode 100644 index 00000000..a66baa8b --- /dev/null +++ b/src/nos/crt/crt0b.S @@ -0,0 +1,301 @@ +; crt0b.asm by Nick for UZI180 banked memory model + +; ----------------------------------------------------------------------------- + + .if 0 +$ io64180.s01 + .endif + + module _c0b + + public init + extern _main + extern _exit + + extern l__DEFAULT ; e_hsize + extern s_RCODE ; e_idata + extern s_UDATA0 ; e_udata + extern s_CSTACK ; e_stack + extern e_CSTACK ; e_break + + .if 1 + extern ?BANK_CALL_DIRECT_L08 + .endif + +E_MAGIC equ 0a6c9h +E_FORMAT_BANKED equ 2 +E_STACK_SIZE equ 1000h + +; ----------------------------------------------------------------------------- +; forward definitions of segments, to set the linkage order (c0l must be first) + + rseg RCODE +; rseg TEMP +; rseg DATA0 +; rseg WCSTR + rseg CONST + rseg CSTR + rseg IDATA0(NUL) + rseg CDATA0 + rseg ECSTR(NUL) + rseg CCSTR + rseg CODE(NUL) ; needs to be at end for banked model + rseg UDATA0 + rseg CSTACK + +; ----------------------------------------------------------------------------- + + .if 1 + rseg _DEFAULT ; means header is discarded at loading + .else + rseg RCODE ; means header is visible to loaded pgm + .endif + + .if 1 + defw E_MAGIC ; e_magic + defw E_FORMAT_BANKED ; e_format + defd 12345678h ; e_size + defw l__DEFAULT ; e_hsize + defw s_RCODE ; e_idata + defw init ; e_entry + defw s_UDATA0 ; e_udata + defw s_CSTACK ; e_stack + defw e_CSTACK ; e_break + .else + jp init + .endif + +; ----------------------------------------------------------------------------- + + rseg RCODE + +init:: + .if 0 + ld a,'A' + call abyte + .endif + + .if 0 + ld de,.sfb.CSTACK ; 1st argument to _brk() + + .if 0 + ld hl,LWRD _brk + ld a,BYTE3 _brk + call ?BANK_CALL_DIRECT_L08 + .else + call _brk + .endif + + call seg_init + .endif + +; now there are the next stack structure: +; +4 envp +; +2 argv +; sp-> +0 argc + .if 1 + pop de + ld (__argc),de ; 2nd argument to _main + pop bc + ld (__argv),bc ; 1st argument to _main + pop hl + ld (_environ),hl + .else + ld ix,0 + add ix,sp + ld l,(ix+4) + ld h,(ix+5) + ld (_environ),hl + ld c,(ix+2) + ld b,(ix+3) + ld (__argv),bc ; 1st argument to _main + ld e,(ix+0) + ld d,(ix+1) + ld (__argc),de ; 2nd argument to _main + .endif + + .if 1 + ld HL,LWRD _main ; banked call to main() + ld A,BYTE3 _main + call ?BANK_CALL_DIRECT_L08 + .else + call _main ; non-banked call to main() + .endif + + ex de,hl ; de = exitcode (1st argument to exit) + + .if 1 + ld HL,LWRD _exit ; banked call to exit() + ld A,BYTE3 _exit + jp ?BANK_CALL_DIRECT_L08 + .else + jp _exit ; non-banked call to exit() + .endif + +; ----------------------------------------------------------------------------- + + .if 0 +seg_init: + ld HL,.sfe.UDATA0 + ld DE,.sfb.UDATA0 + call zero_mem + + ld DE,.sfb.IDATA0 ; destination address + ld HL,.sfe.CDATA0 ;+4000h ; really 8:0000 + .sfe.CDATA0 + ld BC,.sfb.CDATA0 ;+4000h ; really 8:0000 + .sfb.CDATA0 + call copy_mem + + ld DE,.sfb.ECSTR ; destination address + ld HL,.sfe.CCSTR ;+4000h ; really 8:0000 + .sfe.CCSTR + ld BC,.sfb.CCSTR ;+4000h ; really 8:0000 + .sfb.CCSTR + + ; Just fall in to the copy_mem function + +copy_mem: + XOR A + SBC HL,BC + PUSH BC + LD C,L + LD B,H ; BC - that many bytes + POP HL ; source address + RET Z ; If block size = 0 return now + LDIR + RET + +zero_mem: + XOR A +again: PUSH HL + SBC HL,DE + POP HL + RET Z + LD (DE),A + INC DE + JR again + .endif + +; ----------------------------------------------------------------------------- + + .if 0 + public _abyte + +_abyte:: + .if 0 ; SDCC + ld hl,2 + add hl,sp + ld a,(hl) + .else ; IAR + ld a,e + .endif + + public abyte + +abyte:: + .if 0 + ret + .else + push af + .endif + +L1$: in0 a,(STAT1) + and 10b + jr z,L1$ + + pop af + out0 (TDR1),a + + .if 0 + di + .endif + .if 0 + ei + .endif + ret + + public _acrlf + +_acrlf:: + + public acrlf + +acrlf:: + ld a,0dh + call abyte + ld a,0ah + jr abyte + + public _ahexw + +_ahexw:: + .if 0 ; SDCC + ld hl,2 + add hl,sp + ld e,(hl) + inc hl + ld d,(hl) + .endif + ex de,hl + + public ahexw + +ahexw:: + ld a,h + call ahexb + ld a,l + + public ahexb + +ahexb:: + push af + rrca + rrca + rrca + rrca + call ahexn + pop af + + public ahexn + +ahexn:: + and 0fh + add a,90h + daa + adc a,40h + daa + jr abyte + + public amess + +amess:: + ex (sp),hl + push af + +L01$: ld a,(hl) + inc hl + or a + jr z,L02$ + + call abyte + jr L01$ + +L02$: pop af + ex (sp),hl + ret + .endif + +; ----------------------------------------------------------------------------- + + public __argc, __argv, _environ, _errno, ___cleanup + + rseg UDATA0 +__argc: defs 2 +__argv: defs 2 +_environ: defs 2 +_errno: defs 2 +___cleanup: defs 3 ; oopsy 2 + + rseg CSTACK + defs E_STACK_SIZE + +; ----------------------------------------------------------------------------- + + END diff --git a/src/nos/crt/crt0l.S b/src/nos/crt/crt0l.S new file mode 100644 index 00000000..c44f32f5 --- /dev/null +++ b/src/nos/crt/crt0l.S @@ -0,0 +1,305 @@ +; crt0l.asm by Nick for UZI180 large memory model + +; ----------------------------------------------------------------------------- + + .if 0 +$ io64180.s01 + .endif + + module _c0l + + public __init ; vendor _init + .if 0 + extern brk ; vendor _brk + .endif + extern main ; vendor _main + extern exit ; vendor _exit + + extern l__DEFAULT ; e_hsize + extern s_RCODE ; e_idata + extern s_UDATA0 ; e_udata + extern s_CSTACK ; e_stack + extern e_CSTACK ; e_break + + .if 0 + extern ?BANK_CALL_DIRECT_L08 + .endif + +E_MAGIC equ 0a6c9h +E_FORMAT_LARGE equ 1 +E_STACK_SIZE equ 1000h + +; ----------------------------------------------------------------------------- +; forward definitions of segments, to set the linkage order (c0l must be first) + + rseg RCODE + rseg CODE ; needs to be at start for large model +; rseg TEMP +; rseg DATA0 +; rseg WCSTR + rseg CONST + rseg CSTR + rseg IDATA0(NUL) + rseg CDATA0 + rseg ECSTR(NUL) + rseg CCSTR + rseg UDATA0 + rseg CSTACK + +; ----------------------------------------------------------------------------- + + .if 1 + rseg _DEFAULT ; means header is discarded at loading + .else + rseg RCODE ; means header is visible to loaded pgm + .endif + + .if 1 + defw E_MAGIC ; e_magic + defw E_FORMAT_LARGE ; e_format + defd 12345678h ; e_size + defw l__DEFAULT ; e_hsize + defw s_RCODE ; e_idata + defw __init ; e_entry + defw s_UDATA0 ; e_udata + defw s_CSTACK ; e_stack + defw e_CSTACK ; e_break + .else + jp __init + .endif + +; ----------------------------------------------------------------------------- + + rseg RCODE + +__init:: + .if 0 + ld a,'A' + call abyte + .endif + + .if 0 + ld de,.sfb.CSTACK ; 1st argument to brk() + + .if 0 + ld hl,LWRD brk + ld a,BYTE3 brk + call ?BANK_CALL_DIRECT_L08 + .else + call brk + .endif + + call seg_init + .endif + +; now there are the next stack structure: +; +4 envp +; +2 argv +; sp-> +0 argc + .if 1 + pop de + ld (_argc),de ; vendor __argc (2nd argument to main) + pop bc + ld (_argv),bc ; vendor __argv (1st argument to main) + pop hl + ld (environ),hl ; vendor _environ + .else + ld ix,0 + add ix,sp + ld l,(ix+4) + ld h,(ix+5) + ld (environ),hl ; vendor _environ + ld c,(ix+2) + ld b,(ix+3) + ld (_argv),bc ; vendor __argv (1st argument to main) + ld e,(ix+0) + ld d,(ix+1) + ld (_argc),de ; vendor __argc (2nd argument to main) + .endif + + .if 0 + ld HL,LWRD main ; banked call to _main() + ld A,BYTE3 main + call ?BANK_CALL_DIRECT_L08 + .else + call main ; vendor _main ; non-banked call to _main() + .endif + + ex de,hl ; de = exitcode (1st argument to exit) + + .if 0 + ld HL,LWRD exit ; banked call to _exit() + ld A,BYTE3 exit + jp ?BANK_CALL_DIRECT_L08 + .else + jp exit ; vendor _exit ; non-banked call to _exit() + .endif + +; ----------------------------------------------------------------------------- + + .if 0 +seg_init: + ld HL,.sfe.UDATA0 + ld DE,.sfb.UDATA0 + call zero_mem + + ld DE,.sfb.IDATA0 ; destination address + ld HL,.sfe.CDATA0 ;+4000h ; really 8:0000 + .sfe.CDATA0 + ld BC,.sfb.CDATA0 ;+4000h ; really 8:0000 + .sfb.CDATA0 + call copy_mem + + ld DE,.sfb.ECSTR ; destination address + ld HL,.sfe.CCSTR ;+4000h ; really 8:0000 + .sfe.CCSTR + ld BC,.sfb.CCSTR ;+4000h ; really 8:0000 + .sfb.CCSTR + + ; Just fall in to the copy_mem function + +copy_mem: + XOR A + SBC HL,BC + PUSH BC + LD C,L + LD B,H ; BC - that many bytes + POP HL ; source address + RET Z ; If block size = 0 return now + LDIR + RET + +zero_mem: + XOR A +again: PUSH HL + SBC HL,DE + POP HL + RET Z + LD (DE),A + INC DE + JR again + .endif + +; ----------------------------------------------------------------------------- + + .if 0 + public _abyte + +_abyte:: + .if 0 ; SDCC + ld hl,2 + add hl,sp + ld a,(hl) + .else ; IAR + ld a,e + .endif + + public abyte + +abyte:: + .if 0 + ret + .else + push af + .endif + +L1$: in0 a,(STAT1) + and 10b + jr z,L1$ + + pop af + out0 (TDR1),a + + .if 0 + di + .endif + .if 0 + ei + .endif + ret + + public _acrlf + +_acrlf:: + + public acrlf + +acrlf:: + ld a,0dh + call abyte + ld a,0ah + jr abyte + + public _ahexw + +_ahexw:: + .if 0 ; SDCC + ld hl,2 + add hl,sp + ld e,(hl) + inc hl + ld d,(hl) + .endif + ex de,hl + + public ahexw + +ahexw:: + ld a,h + call ahexb + ld a,l + + public ahexb + +ahexb:: + push af + rrca + rrca + rrca + rrca + call ahexn + pop af + + public ahexn + +ahexn:: + and 0fh + add a,90h + daa + adc a,40h + daa + jr abyte + + public amess + +amess:: + ex (sp),hl + push af + +L01$: ld a,(hl) + inc hl + or a + jr z,L02$ + + call abyte + jr L01$ + +L02$: pop af + ex (sp),hl + ret + .endif + +; ----------------------------------------------------------------------------- + + public _argc, _argv, environ, errno, __cleanup + ;public __argc, __argv, _environ, _errno, ___cleanup + + rseg UDATA0 +_argc: defs 2 ; vendor __argc +_argv: defs 2 ; vendor __argv +environ: defs 2 ; vendor _environ +errno: defs 2 ; vendor _errno +__cleanup: defs 2 ; vendor ___cleanup + + rseg CSTACK + defs E_STACK_SIZE + +; ----------------------------------------------------------------------------- + + END diff --git a/src/nos/crt/crt_banked.lbr b/src/nos/crt/crt_banked.lbr new file mode 100644 index 00000000..5dc9d118 --- /dev/null +++ b/src/nos/crt/crt_banked.lbr @@ -0,0 +1,144 @@ +-o ../../lib/crt_banked +abort +alloca +asctime +assert +atexit +atoi +atol +bsearch +calloc +clock +closedir +convtime +crypt +ctime +ctype +difftime +error +etime +execl +execle +execlp +execlpe +exect +execv +execvp +execvpe +exit +fclose +fflush +fgetc +fgetgren +fgetpwen +fgets +fopen +fprintf +fputc +fputs +fputter +fread +free +fscanf +ftell +fwrite +getcwd +getenv +getgrent +getgrgid +getgrnam +getopt +getpass +getpw +getpwent +getpwnam +getpwuid +gets +gmtime +initgrup +isatty +itoa +localtim +longjmp +lsearch +lstat +ltoa +ltostr +malloc +memccpy +memchr +memcmp +memcpy +memmove +memset +mkdir +mktime +opendir +perror +popen +printf +putenv +putgetch +putpwent +qsort +rand +readdir +readlink +realloc +regerror +regexp +regsub +rename +rewind +rewindir +rmdir +scanf +setbuff +setenv +setgrent +setjmp +setpwent +setvbuff +sleep +sprintf +sputter +sscanf +stdio0 +strcat +strchr +strcmp +strcpy +strcspn +strdup +stricmp +strlen +strncat +strncmp +strncpy +strnicmp +strpbrk +strrchr +strsep +strspn +strstr +strtok +strtol +strtoul +system +termcap +tmpnam +tparam +ttyname +tzset +ultoa +ungetc +utsname +vfprintf +vfscanf +vprinter +vprintf +vscanf +vsprintf +vsscanf +xitoa +xltoa diff --git a/src/nos/crt/crt_large.lbr b/src/nos/crt/crt_large.lbr new file mode 100644 index 00000000..94eada53 --- /dev/null +++ b/src/nos/crt/crt_large.lbr @@ -0,0 +1,144 @@ +-o ../../lib/crt_large +abort +alloca +asctime +assert +atexit +atoi +atol +bsearch +calloc +clock +closedir +convtime +crypt +ctime +ctype +difftime +error +etime +execl +execle +execlp +execlpe +exect +execv +execvp +execvpe +exit +fclose +fflush +fgetc +fgetgren +fgetpwen +fgets +fopen +fprintf +fputc +fputs +fputter +fread +free +fscanf +ftell +fwrite +getcwd +getenv +getgrent +getgrgid +getgrnam +getopt +getpass +getpw +getpwent +getpwnam +getpwuid +gets +gmtime +initgrup +isatty +itoa +localtim +longjmp +lsearch +lstat +ltoa +ltostr +malloc +memccpy +memchr +memcmp +memcpy +memmove +memset +mkdir +mktime +opendir +perror +popen +printf +putenv +putgetch +putpwent +qsort +rand +readdir +readlink +realloc +regerror +regexp +regsub +rename +rewind +rewindir +rmdir +scanf +setbuff +setenv +setgrent +setjmp +setpwent +setvbuff +sleep +sprintf +sputter +sscanf +stdio0 +strcat +strchr +strcmp +strcpy +strcspn +strdup +stricmp +strlen +strncat +strncmp +strncpy +strnicmp +strpbrk +strrchr +strsep +strspn +strstr +strtok +strtol +strtoul +system +termcap +tmpnam +tparam +ttyname +tzset +ultoa +ungetc +utsname +vfprintf +vfscanf +vprinter +vprintf +vscanf +vsprintf +vsscanf +xitoa +xltoa diff --git a/src/nos/crt/crypt.c b/src/nos/crt/crypt.c new file mode 100644 index 00000000..44f53356 --- /dev/null +++ b/src/nos/crt/crypt.c @@ -0,0 +1,64 @@ +/* TEA based crypt(), version 0.0 + * It looks like there are problems with key bits carrying through + * to the encrypted data, and I want to get rid of that libc call.. + */ +/* #include Nick */ +#include +#include +#include + +char *crypt(key, salt) + char *key, *salt; +{ + /* n is the number of rounds, + * delta is a golden # derivative, + * k is the key, + * v is the data to be encrypted. + */ + static char rkey[4*sizeof(long)]; + unsigned long v[2], k[4], sum, delta = 0x9e3779b9L, *p; + unsigned char i, n; + + /* Our constant string will be a string of zeros .. */ + memset(rkey,0,sizeof(rkey)); + memcpy(rkey, salt, 2); + i = 0; + while (i < sizeof(rkey)-2 && key[i]) { + rkey[i+2] = key[i]; + ++i; + } + while (key[i]) { + rkey[2] += key[i]; + ++i; + } + memcpy(k, rkey, sizeof(k)); + v[0] = v[1] = sum = 0; + for (i = 64; i != 0; --i) { + sum += delta; + v[0] += (v[1] << 4) + k[0] ^ v[1] + sum ^ (v[1] >> 5) + k[1]; + v[1] += (v[0] << 4) + k[2] ^ v[0] + sum ^ (v[0] >> 5) + k[3]; + } + /* Now we need to unpack the bits and map it to "A-Za-z0-9./" + * for printing in /etc/passwd + */ + p = v; + for (i = 2; i < 13; i++) { + /* This unpacks the 6 bit data, each cluster into its own byte */ + if (i == 8) { + v[0] |= v[1] >> 28; + ++p; + } + n = *p & 0x3F; + *p >>= 6; + /* Now we map to the proper chars */ + if (n < 12) n += '.'; + else if (n < 38) n += 'A'-12; + else n += 'a'-38; + rkey[i] = n; + } + rkey[13] = '\0'; +/* printf("crypt(\"%s\", 0x%x) yielded \"%s\"\n", key, salt, rkey); */ +/* fflush(stdout); */ + return rkey; +} + diff --git a/src/nos/crt/ctime.c b/src/nos/crt/ctime.c new file mode 100644 index 00000000..10451b17 --- /dev/null +++ b/src/nos/crt/ctime.c @@ -0,0 +1,11 @@ +/*************************** CTIME ************************************/ +#include "time-l.h" + +#ifdef L_ctime +char *ctime(timep) + time_t *timep; +{ + return asctime(localtime(timep)); +} +#endif + diff --git a/src/nos/crt/ctype.c b/src/nos/crt/ctype.c new file mode 100644 index 00000000..6ee8a8f2 --- /dev/null +++ b/src/nos/crt/ctype.c @@ -0,0 +1,67 @@ +/* + * CTYPE.C Character classification and conversion + */ +/* Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ +#include +#include + +#undef toupper +#undef tolower + +unsigned char __ctype[256] = { + __CT_c, __CT_c, __CT_c, __CT_c, /* 0x00..0x03 */ + __CT_c, __CT_c, __CT_c, __CT_c, /* 0x04..0x07 */ + __CT_c, __CT_c|__CT_s, __CT_c|__CT_s, __CT_c|__CT_s, /* 0x08..0x0B */ + __CT_c|__CT_s, __CT_c|__CT_s, __CT_c, __CT_c, /* 0x0C..0x0F */ + + __CT_c, __CT_c, __CT_c, __CT_c, /* 0x10..0x13 */ + __CT_c, __CT_c, __CT_c, __CT_c, /* 0x14..0x17 */ + __CT_c, __CT_c, __CT_c, __CT_c, /* 0x18..0x1B */ + __CT_c, __CT_c, __CT_c, __CT_c, /* 0x1C..0x1F */ + + __CT_s, __CT_p, __CT_p, __CT_p, /* 0x20..0x23 */ + __CT_p, __CT_p, __CT_p, __CT_p, /* 0x24..0x27 */ + __CT_p, __CT_p, __CT_p, __CT_p, /* 0x28..0x2B */ + __CT_p, __CT_p, __CT_p, __CT_p, /* 0x2C..0x2F */ + + __CT_d|__CT_x, __CT_d|__CT_x, __CT_d|__CT_x, __CT_d|__CT_x, /* 0x30..0x33 */ + __CT_d|__CT_x, __CT_d|__CT_x, __CT_d|__CT_x, __CT_d|__CT_x, /* 0x34..0x37 */ + __CT_d|__CT_x, __CT_d|__CT_x, __CT_p, __CT_p, /* 0x38..0x3B */ + __CT_p, __CT_p, __CT_p, __CT_p, /* 0x3C..0x3F */ + + __CT_p, __CT_u|__CT_x, __CT_u|__CT_x, __CT_u|__CT_x, /* 0x40..0x43 */ + __CT_u|__CT_x, __CT_u|__CT_x, __CT_u|__CT_x, __CT_u, /* 0x44..0x47 */ + __CT_u, __CT_u, __CT_u, __CT_u, /* 0x48..0x4B */ + __CT_u, __CT_u, __CT_u, __CT_u, /* 0x4C..0x4F */ + + __CT_u, __CT_u, __CT_u, __CT_u, /* 0x50..0x53 */ + __CT_u, __CT_u, __CT_u, __CT_u, /* 0x54..0x57 */ + __CT_u, __CT_u, __CT_u, __CT_p, /* 0x58..0x5B */ + __CT_p, __CT_p, __CT_p, __CT_p, /* 0x5C..0x5F */ + + __CT_p, __CT_l|__CT_x, __CT_l|__CT_x, __CT_l|__CT_x, /* 0x60..0x63 */ + __CT_l|__CT_x, __CT_l|__CT_x, __CT_l|__CT_x, __CT_l, /* 0x64..0x67 */ + __CT_l, __CT_l, __CT_l, __CT_l, /* 0x68..0x6B */ + __CT_l, __CT_l, __CT_l, __CT_l, /* 0x6C..0x6F */ + + __CT_l, __CT_l, __CT_l, __CT_l, /* 0x70..0x73 */ + __CT_l, __CT_l, __CT_l, __CT_l, /* 0x74..0x77 */ + __CT_l, __CT_l, __CT_l, __CT_p, /* 0x78..0x7B */ + __CT_p, __CT_p, __CT_p, __CT_c /* 0x7C..0x7F */ +}; + +int toupper(c) + register int c; +{ + return (islower(c) ? (c ^ 0x20) : (c)); +} + +int tolower(c) + register int c; +{ + return (isupper(c) ? (c ^ 0x20) : (c)); +} + diff --git a/src/nos/crt/cvt.h b/src/nos/crt/cvt.h new file mode 100644 index 00000000..c4951d4d --- /dev/null +++ b/src/nos/crt/cvt.h @@ -0,0 +1,21 @@ +/* numeric/string conversions package + */ +#include + +#ifdef MAKE_ALL +#define L_atoi +#define L_atol +#define L_itoa +#define L_ultoa +#define L_ltoa +#define L_ltostr +#define L_strtod +#define L_strtoul +#define L_strtol +#define L_xitoa +#define L_xltoa +#ifdef __TURBOC__ +#define FLOAT +#endif +#endif + diff --git a/src/nos/crt/difftime.c b/src/nos/crt/difftime.c new file mode 100644 index 00000000..37327f09 --- /dev/null +++ b/src/nos/crt/difftime.c @@ -0,0 +1,22 @@ +/*************************** DIFFTIME **********************************/ +#include "time-l.h" + +#ifdef L_difftime +long difftime (__time2,__time1) + time_t *__time2; + time_t *__time1; +{ + struct tm tma, tmb; + unsigned long tm1,tm2; + + __tm_conv(&tma, __time1, 0); + __tm_conv(&tmb, __time2, 0); + /* each year is 365 days plus 8 hours = 365.25 days */ + tm1 = tma.tm_year*32227200L+tma.tm_yday*86400L+tma.tm_hour*3600+ + tma.tm_min*60+tma.tm_sec; + tm2 = tmb.tm_year*32227200L+tmb.tm_yday*86400L+tmb.tm_hour*3600+ + tmb.tm_min*60+tmb.tm_sec; + return (tm2-tm1); +} +#endif + diff --git a/src/nos/crt/environ.h b/src/nos/crt/environ.h new file mode 100644 index 00000000..8aea5593 --- /dev/null +++ b/src/nos/crt/environ.h @@ -0,0 +1,12 @@ +/* Environment processing package + */ +#define const +#include +#include + +#ifdef MAKE_ALL +#define L_getenv +#define L_putenv +#define L_setenv +#endif + \ No newline at end of file diff --git a/src/nos/crt/error.c b/src/nos/crt/error.c new file mode 100644 index 00000000..52d83587 --- /dev/null +++ b/src/nos/crt/error.c @@ -0,0 +1,57 @@ +/* Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ +#include +#include +#include +#include +#include + +char **__sys_errlist =0; +int __sys_nerr = 0; + +char *strerror(err) + int err; +{ + static char retbuf[80]; + char *p, inbuf[128]; + int cc, fd; + uint i, bufoff = 0; + + if (__sys_nerr) { /* sys_errlist preloaded */ + if (err < 0 || err >= __sys_nerr) + goto UErr; + return __sys_errlist[err]; + } + if (err <= 0) + goto UErr; /* NB the <= allows comments in the file */ + if ((fd = open(_PATH_LIBERR, 0)) < 0) + goto UErr; + while ((cc = read(fd, inbuf, sizeof(inbuf))) > 0) { + i = 0; + while (i < cc) { + if (inbuf[i] == '\n') { + retbuf[bufoff] = '\0'; + if (err == atoi(retbuf)) { + if ((p = strchr(retbuf, ' ')) == NULL) { + close(fd); + goto UErr; + } + while (*p == ' ') + p++; + close(fd); + return p; + } + bufoff = 0; + } + else if (bufoff < sizeof(retbuf)-1) + retbuf[bufoff++] = inbuf[i]; + ++i; + } + } +UErr: strcpy(retbuf, "Unknown error "); + itoa(err,retbuf+strlen(retbuf),10); + return retbuf; +} + diff --git a/src/nos/crt/etime.c b/src/nos/crt/etime.c new file mode 100644 index 00000000..6290aad0 --- /dev/null +++ b/src/nos/crt/etime.c @@ -0,0 +1,83 @@ +/* etime.c added by Nick from UZI280 clib, since not included in UZIX1.0 */ + +#include /* also types.h */ +#include /* for the HZ definition */ +#define HZ TICKSPERSEC /* due to change in nomenclature */ + +/* Convert date to string */ + +static char *s; + +#if 0 /* Nick... see ctime.c, it is more advanced and has GMT conversion */ +char * +ctime(t) +register time_t *t; +{ + static char str[24]; + + s = str; + + dout((t->t_time&0xf800)>>11); + *s++ = ':'; + dout((t->t_time&0x07e0)>>5); + *s++ = ':'; + dout(t->t_time&0x001f * 2); + *s++ = ' '; + dout((t->t_date&0x01e0)>>5); + *s++ = '/'; + dout(t->t_date&0x001f); + *s++ = '/'; + dout((t->t_date&0xfe00)>>9); + *s = '\0'; + + return(str); +} +#endif + + +/* Convert elapsed time to string as: hh:mm:ss.t */ + +char * +etime(t) +register time_t *t; +{ + static char str[24]; + + s = str; + + dout(((dostime_t *)t)->t_date / 60); + *s++ = ':'; + dout(((dostime_t *)t)->t_date % 60); + *s++ = ':'; + dout(((dostime_t *)t)->t_time / HZ); + *s++ = '.'; + *s++ = (((((dostime_t *)t)->t_time % HZ) * 10) / HZ) + '0'; + *s = '\0'; + + return(str); +} + + +static dout(n) +register int n; +{ + n %= 100; + *s++ = n/10 + '0'; + *s++ = n%10 + '0'; +} + + +/* This decrements t1 by t2 */ + +ediff(t1, t2) +register time_t *t1, *t2; +{ + if (((dostime_t *)t1)->t_time < ((dostime_t *)t2)->t_time) + { + --((dostime_t *)t1)->t_date; + ((dostime_t *)t1)->t_time += (60 * HZ); + } + ((dostime_t *)t1)->t_date -= ((dostime_t *)t2)->t_date; + ((dostime_t *)t1)->t_time -= ((dostime_t *)t2)->t_time; +} + diff --git a/src/nos/crt/exec.h b/src/nos/crt/exec.h new file mode 100644 index 00000000..ae7899ad --- /dev/null +++ b/src/nos/crt/exec.h @@ -0,0 +1,112 @@ +/* exec.h + * + * function(s) + * execl - load and run a program + * execle - load and execute a program + * execlp - load and execute a program + * execlpe - load and execute a program + * execv - load and execute a program + * exect - load and execute a program + * execvp - load and execute a program + * execvpe - load and execute a program + */ +#include +#include + +#ifdef MAKE_ALL +#define L_execl +#define L_execle +#define L_execlp +#define L_execlpe +#define L_execv +#define L_exect +#define L_execvp +#define L_execvpe +#endif + +/*--------------------------------------------------------------------------* +Name exec... - functions that load and run other programs + +Usage int execl(char *pathname, char *arg0, char *arg1, ..., + char *argn, NULL); + int execle(char *pathname, char *arg0, char *arg1, ..., + char *argn, NULL, char *envp[]); + int execlp(char *pathname, char *arg0, char *arg1, ..., + char *argn, NULL); + int execlpe(char *pathname, char *arg0, char *arg1, ..., + char *argn, NULL, char *envp[]); + int execv(char *pathname, char *argv[]); + int exect(char *pathname, char *argv[], char *envp[]); + int execvp(char *pathname, char *argv[]); + int execvpe(char *pathname, char *argv[], char *envp[]); + +Prototype in unistd.h + +Description The functions in the exec... family load and run (execute) + other programs, known as child processes. When an exec... + call is successful, the child process running concurently + with the parent process. There must be sufficient memory + available for loading and executing the child process. + + The suffixes l, v, p and e added to exec... "family name" + specify that the named function will operate with certain + capabilities. + + p specifies that the function will search for the + child in those directories specified by the + PATH environment variable. If pathname does not + contain an explicit directory the function will + search first the current directory then in the + directory specified by the path. Without the p + suffix, the function only searches the current + working directory. + + l specifies that the argument pointers (arg0, arg1, + ..., argn) are passed as separate arguments. + Typically, the l suffix is used when you know in + advance the number of arguments to be passed. A + mandatory NULL following argn marks the end of + the list. + + v specifies that the argument pointers (argv[0], + argv[1], ..., argv[n]) are passed as an array of + pointers. Typically, the v suffix is used a + variable number of arguments is to be passed. + + e specifies that the argument envp maybe passed to + the child process, allowing you to alter the + environment for the child process. Without the e + suffix, child process inherits the environment of + the parent process. This environment argument is + an array of char *. Each element points to a + null-terminated character string of the form: + + envar=value + + where envar is the name of an environment + variable, and value is the string value to which + envar is set. The last element of envp[] is NULL. + When envp[0] is NULL, the child inherits the + parent's environment settings. + + The exec... functions must at least one argument to the + child process. This argument is, by convention, a copy of + pathname. Under MS-DOS 3.x, path name is available for the + child process; under earlier versions, the child cannot use + the passed value of arg0 (or argv[0]). + + When an exec... function call is made, any open files + remain open in the child process. + +Return value If successful, the exec... functions do not return. On + error, the exec... functions return -1, and errno is set to + one of the following: + E2BIG Argument list too long + EACCES Permission denied + EMFILE Too many open files + ENOENT Path or file name not found + ENOEXEC Exec format error + ENOMEM Not enough core + ESHELL File is shell script??? +*/ + diff --git a/src/nos/crt/execl.c b/src/nos/crt/execl.c new file mode 100644 index 00000000..99c8cc99 --- /dev/null +++ b/src/nos/crt/execl.c @@ -0,0 +1,65 @@ +/* execl.c + * + * function(s) + * execl - load and run a program + */ + +#include "exec.h" + +#ifdef L_execl +#include +#include + +/* Find file in pathes: + * 1. /name or ./name or ../name is already qualified names + * 2. else search in all pathes described in env var PATH (if this + * var is not exist, _PATH_DEFPATH is used) + * 3. else search in current directory + * 4. else return NULL (execve() interpretes NULL as non existent file!) + */ +char *_findPath(path) + char *path; +{ + char *p, *envp; + static char name[PATHLEN+1]; + + if (*path == '/' || /* qualified name */ + *path == '.') + return path; + /* search for pathes list */ + if ((envp = getenv("PATH")) == NULL) + envp = _PATH_DEFPATH; + /* lookup all pathes */ + while (*envp) { + p = name; + while (*envp && (*p = *envp++) != ':') { + if ((uint)(p - name) >= sizeof(name)) + break; + ++p; + } + if (*--p != '/') + *++p = '/'; + ++p; + if ((p - name) + strlen(path) >= sizeof(name)) + break; + strcpy(p, path); + if (access(name, 0) == 0) + return name; + } + if (access(path,0) == 0) /* file exist in current dir */ + return name; + return NULL; +} + +#if 1 /* Nick */ +int execl(char *pathP, char *arg0, ...) +#else +int execl(pathP, arg0, ...) + char *pathP; + char *arg0; +#endif +{ + return execve(pathP, &arg0, environ); +} +#endif + diff --git a/src/nos/crt/execle.c b/src/nos/crt/execle.c new file mode 100644 index 00000000..ae4f46ef --- /dev/null +++ b/src/nos/crt/execle.c @@ -0,0 +1,26 @@ +/* execle.c + * + * function(s) + * execle - load and execute a program + */ + +#include "exec.h" + +#ifdef L_execle +#if 1 /* Nick */ +int execle(char *pathP, char *arg0, ...) +#else +int execle(pathP, arg0) + char *pathP; + char *arg0; +#endif +{ + register char **p = &arg0; + + /* Find the end of the argument list */ + while (*p++) + ; + return execve(pathP, &arg0, (char **)*p); +} +#endif + diff --git a/src/nos/crt/execlp.c b/src/nos/crt/execlp.c new file mode 100644 index 00000000..5aa7ff5b --- /dev/null +++ b/src/nos/crt/execlp.c @@ -0,0 +1,21 @@ +/* execlp.c + * + * function(s) + * execlp - load and execute a program + */ + +#include "exec.h" + +#ifdef L_execlp +#if 1 /* Nick */ +int execlp(char *pathP, char *arg0, ...) +#else +int execlp(pathP, arg0) + char *pathP; + char *arg0; +#endif +{ + return execve(_findPath(pathP), &arg0, environ); +} +#endif + diff --git a/src/nos/crt/execlpe.c b/src/nos/crt/execlpe.c new file mode 100644 index 00000000..d48c4d65 --- /dev/null +++ b/src/nos/crt/execlpe.c @@ -0,0 +1,26 @@ +/* execlpe.c + * + * function(s) + * execlpe - load and execute a program + */ + +#include "exec.h" + +#ifdef L_execlpe +#if 1 /* Nick */ +int execlpe(char *pathP, char *arg0, ...) +#else +int execlpe(pathP, arg0) + char *pathP; + char *arg0; +#endif +{ + register char **p = &arg0; + + /* Find the end of the argument list */ + while (*p++) + ; + return execve(_findPath(pathP), &arg0, (char **)*p); +} +#endif + diff --git a/src/nos/crt/exect.c b/src/nos/crt/exect.c new file mode 100644 index 00000000..afc5ad33 --- /dev/null +++ b/src/nos/crt/exect.c @@ -0,0 +1,18 @@ +/* exect.c + * + * function(s) + * exect - load and execute a program + */ + +#include "exec.h" + +#ifdef L_exect +int exect(pathP, argv, envV) + char *pathP; + char *argv[]; + char *envV[]; +{ + return execve(pathP, argv, envV); +} +#endif + diff --git a/src/nos/crt/execv.c b/src/nos/crt/execv.c new file mode 100644 index 00000000..69cbde79 --- /dev/null +++ b/src/nos/crt/execv.c @@ -0,0 +1,17 @@ +/* execv.c + * + * function(s) + * execv - load and execute a program + */ + +#include "exec.h" + +#ifdef L_execv +int execv(pathP, argv) + char *pathP; + char *argv[]; +{ + return execve(pathP, argv, environ); +} +#endif + diff --git a/src/nos/crt/execvp.c b/src/nos/crt/execvp.c new file mode 100644 index 00000000..8779494d --- /dev/null +++ b/src/nos/crt/execvp.c @@ -0,0 +1,17 @@ +/* execvp.c + * + * function(s) + * execvp - load and execute a program + */ + +#include "exec.h" + +#ifdef L_execvp +int execvp(pathP, argv) + char *pathP; + char *argv[]; +{ + return execve(_findPath(pathP), argv, environ); +} +#endif + diff --git a/src/nos/crt/execvpe.c b/src/nos/crt/execvpe.c new file mode 100644 index 00000000..8d291fe4 --- /dev/null +++ b/src/nos/crt/execvpe.c @@ -0,0 +1,18 @@ +/* execvpe.c + * + * function(s) + * execvpe - load and execute a program + */ + +#include "exec.h" + +#ifdef L_execvpe +int execvpe(pathP, argv, envV) + char *pathP; + char *argv[]; + char *envV[]; +{ + return execve(_findPath(pathP), argv, envV); +} +#endif + diff --git a/src/nos/crt/exit.c b/src/nos/crt/exit.c new file mode 100644 index 00000000..9435599f --- /dev/null +++ b/src/nos/crt/exit.c @@ -0,0 +1,14 @@ +/* exit.c for UZI180 by Nick */ + +#include /* for exit() prototype */ +#include /* for _exit() prototype */ + +void exit(int val) + { + if (__cleanup != NULL) + { + (*__cleanup)(val, NULL); + } + _exit(val); + } + diff --git a/src/nos/crt/fclose.c b/src/nos/crt/fclose.c new file mode 100644 index 00000000..f16c5abf --- /dev/null +++ b/src/nos/crt/fclose.c @@ -0,0 +1,48 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_fclose +int fclose(fp) + FILE *fp; +{ + int rv = 0; + + if (fp == 0) { + errno = EINVAL; + return EOF; + } + if (fflush(fp)) + return EOF; + if (close(fp->fd)) + rv = EOF; + fp->fd = -1; + if (fp->mode & __MODE_FREEBUF) { + free(fp->bufstart); + fp->mode &= ~__MODE_FREEBUF; + fp->bufstart = fp->bufend = 0; + } + if (fp->mode & __MODE_FREEFIL) { + FILE *ptr = __IO_list, *prev = 0; + + fp->mode = 0; + while (ptr && ptr != fp) + ptr = ptr->next; + if (ptr == fp) { + if (prev == 0) + __IO_list = fp->next; + else prev->next = fp->next; + } + free(fp); + } + else fp->mode = 0; + return rv; +} +#endif + diff --git a/src/nos/crt/fflush.c b/src/nos/crt/fflush.c new file mode 100644 index 00000000..72572270 --- /dev/null +++ b/src/nos/crt/fflush.c @@ -0,0 +1,71 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_fflush +int fflush(fp) + FILE *fp; +{ + unsigned char *bstart; + int len, cc, rv = 0; + + if (fp == NULL) { /* On NULL flush the lot. */ + if (fflush(stdin) || fflush(stdout) || fflush(stderr)) + return EOF; + fp = __IO_list; + while (fp) { + if (fflush(fp)) + return EOF; + fp = fp->next; + } + return 0; + } + /* If there's output data pending */ + if (fp->mode & __MODE_WRITING) { + if ((len = fp->bufpos - fp->bufstart) != 0) { + bstart = fp->bufstart; + /* The loop is so we don't get upset by signals + * or partial writes. + */ + do { + if ((cc = write(fp->fd, bstart, len)) > 0) { + bstart += cc; + len -= cc; + } + } while (cc > 0 || (cc == -1 && errno == EINTR)); + /* If we get here with len != 0 there was an error, + * exactly what to do about it is another matter ... + * + * I'll just clear the buffer. */ + if (len) { + fp->mode |= __MODE_ERR; + rv = EOF; + } + } + } + /* If there's data in the buffer sychronise the file positions */ + else if (fp->mode & __MODE_READING) { + /* Humm, I think this means sync the file like fpurge() ... + * Anyway the user isn't supposed to call this function + * when reading + */ + len = fp->bufread - fp->bufpos; /* Bytes buffered but unread */ + /* If it's a file, make it good */ + if (len > 0 && lseek(fp->fd, (long) -len, SEEK_CUR) < 0) { + /* Hummm - Not certain here, I don't think this is reported */ + /* fp->mode |= __MODE_ERR; return EOF; */ + } + } + /* All done, no problem */ + fp->mode &= (~(__MODE_READING | __MODE_WRITING | __MODE_EOF | __MODE_UNGOT)); + fp->bufread = fp->bufwrite = fp->bufpos = fp->bufstart; + return rv; +} +#endif + diff --git a/src/nos/crt/fgetc.c b/src/nos/crt/fgetc.c new file mode 100644 index 00000000..bc8d825f --- /dev/null +++ b/src/nos/crt/fgetc.c @@ -0,0 +1,44 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_fgetc +int fgetc(fp) + FILE *fp; +{ + int ch; + + if (fp->mode & __MODE_WRITING) + fflush(fp); +#if __MODE_IOTRAN +try_again: +#endif + /* Can't read or there's been an EOF or error then return EOF */ + if ((fp->mode & (__MODE_READ | __MODE_EOF | __MODE_ERR)) != __MODE_READ) + return EOF; + /* Nothing in the buffer - fill it up */ + if (fp->bufpos >= fp->bufread) { + fp->bufpos = fp->bufread = fp->bufstart; + ch = fread(fp->bufpos, 1, fp->bufend - fp->bufstart, fp); + if (ch == 0) + return EOF; + fp->bufread += ch; + fp->mode |= __MODE_READING; + fp->mode &= ~__MODE_UNGOT; + } + ch = *(fp->bufpos++); +#if __MODE_IOTRAN + /* In MSDOS translation mode; WARN: Doesn't work with UNIX macro */ + if (ch == '\r' && (fp->mode & __MODE_IOTRAN)) + goto try_again; +#endif + return ch; +} +#endif + diff --git a/src/nos/crt/fgetgren.c b/src/nos/crt/fgetgren.c new file mode 100644 index 00000000..0bb6e195 --- /dev/null +++ b/src/nos/crt/fgetgren.c @@ -0,0 +1,17 @@ +/* fgetgren.c groups implementation + */ + +#include "grp-l.h" + +#ifdef L_fgetgren +struct group *fgetgrent(file) + FILE *file; +{ + if (file == NULL) { + errno = EINTR; + return NULL; + } + return __getgrent(fileno(file)); +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/fgetpwen.c b/src/nos/crt/fgetpwen.c new file mode 100644 index 00000000..447f8d51 --- /dev/null +++ b/src/nos/crt/fgetpwen.c @@ -0,0 +1,17 @@ +/* fgetpwen.c + */ + +#include "passwd.h" + +#ifdef L_fgetpwen +struct passwd *fgetpwent(file) + FILE *file; +{ + if (file == NULL) { + errno = EINTR; + return NULL; + } + return __getpwent(fileno(file)); +} +#endif + diff --git a/src/nos/crt/fgets.c b/src/nos/crt/fgets.c new file mode 100644 index 00000000..ef975a80 --- /dev/null +++ b/src/nos/crt/fgets.c @@ -0,0 +1,36 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_fgets +/* Nothing special here ... */ +char *fgets(s, count, f) + char *s; + size_t count; + FILE *f; +{ + register size_t i = count; + register int ch; + char *ret = s; + + while (i-- != 0) { + if ((ch = getc(f)) == EOF) { + if (s == ret) + return NULL; + break; + } + *s++ = (char) ch; + if (ch == '\n') + break; + } + *s = 0; + return ferror(f) ? NULL : ret; +} +#endif + diff --git a/src/nos/crt/fopen.c b/src/nos/crt/fopen.c new file mode 100644 index 00000000..b89f3081 --- /dev/null +++ b/src/nos/crt/fopen.c @@ -0,0 +1,131 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_fopen +/* + * This Fopen is all three of fopen, fdopen and freopen. The macros in + * stdio.h show the other names. + */ +FILE *__fopen(fname, fd, fp, mode) + char *fname; + int fd; + FILE *fp; + char *mode; +{ + uint open_mode = 0; +#if __MODE_IOTRAN + int do_iosense = 1; +#endif + int fopen_mode = 0; + FILE *nfp = 0; + + /* If we've got an fp close the old one (freopen) */ + if (fp) { + /* Careful, don't de-allocate it */ + fopen_mode |= (fp->mode & (__MODE_BUF | + __MODE_FREEFIL | + __MODE_FREEBUF)); + fp->mode &= ~(__MODE_FREEFIL | __MODE_FREEBUF); + fclose(fp); + } + /* decode the new open mode */ + while (*mode) { + switch (*mode++) { + case 'r': + fopen_mode |= __MODE_READ; + break; + case 'w': + fopen_mode |= __MODE_WRITE; + open_mode = (O_CREAT | O_TRUNC); + break; + case 'a': + fopen_mode |= __MODE_WRITE; + open_mode = (O_CREAT | O_APPEND); + break; + case '+': + fopen_mode |= __MODE_RDWR; + break; +#if __MODE_IOTRAN + case 'b': /* Binary */ + fopen_mode &= ~__MODE_IOTRAN; + do_iosense = 0; + break; + case 't': /* Text */ + fopen_mode |= __MODE_IOTRAN; + do_iosense = 0; + break; +#endif + } + } + /* Add in the read/write options to mode for open() */ + switch (fopen_mode & (__MODE_READ | __MODE_WRITE)) { + case 0: + return NULL; + case __MODE_READ: +#if O_RDONLY + open_mode |= O_RDONLY; +#endif + break; + case __MODE_WRITE: + open_mode |= O_WRONLY; + break; + default: + open_mode |= O_RDWR; + break; + } + /* Allocate the (FILE) before we do anything irreversable */ + if (fp == NULL && (nfp = calloc(1,sizeof(FILE))) == NULL) + return NULL; + /* Open the file itself */ + if (fname) + fd = open(fname, open_mode, 0666); + if (fd < 0) { /* Grrrr */ + open_mode = errno; /* Nick */ + if (nfp) + free(nfp); + errno = open_mode; /* Nick */ + return 0; + } + /* If this isn't freopen create a (FILE) and buffer for it */ + if (fp == NULL) { + fp = nfp; + fp->next = __IO_list; + __IO_list = fp; /* add to list */ + fp->mode = __MODE_FREEFIL; + if (isatty(fd)) { + fp->mode |= _IOLBF; +#if __MODE_IOTRAN + if (do_iosense) + fopen_mode |= __MODE_IOTRAN; +#endif + } +#if _IOFBF + else fp->mode |= _IOFBF; +#endif + if ((fp->bufstart = calloc(1,BUFSIZ)) == NULL) { + /* Oops, no mem + * Humm, full buffering with a eight(!) byte buffer. + */ + fp->bufstart = (uchar *)fp->unbuf; + fp->bufend = (uchar *)fp->unbuf + sizeof(fp->unbuf); + } + else { + fp->bufend = fp->bufstart + BUFSIZ; + fp->mode |= __MODE_FREEBUF; + } + } + /* Ok, file's ready clear the buffer and save important bits */ + fp->bufpos = fp->bufread = fp->bufwrite = fp->bufstart; + fp->mode |= fopen_mode; + fp->fd = fd; + return fp; +} +#endif + diff --git a/src/nos/crt/fprintf.c b/src/nos/crt/fprintf.c new file mode 100644 index 00000000..e97537be --- /dev/null +++ b/src/nos/crt/fprintf.c @@ -0,0 +1,40 @@ +/* printf.c + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + * + * Altered to use stdarg, made the core function vfprintf. + * Hooked into the stdio package using 'inside information' + * Altered sizeof() assumptions, now assumes all integers except chars + * will be either + * sizeof(xxx) == sizeof(long) or sizeof(xxx) == sizeof(short) + * + * -RDB + */ + +#include "printf.h" + +#ifdef L_fprintf +#if 1 +int fprintf(FILE * fp, char *fmt,...) +#else +int fprintf(fp, fmt, va_alist) + FILE *fp; + char *fmt; + va_dcl +#endif +{ + va_list ptr; + int rv; + + va_strt(ptr, fmt); +#if 1 /* Nick see vprinter.c */ + rv = __vprinter(__fputter, fp, fmt, ptr); +#else + rv = vfprintf(fp, fmt, ptr); +#endif + va_end(ptr); + return rv; +} +#endif + diff --git a/src/nos/crt/fputc.c b/src/nos/crt/fputc.c new file mode 100644 index 00000000..388abcd1 --- /dev/null +++ b/src/nos/crt/fputc.c @@ -0,0 +1,49 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_fputc +int fputc(ch, fp) + int ch; + FILE *fp; +{ + register int v; + + Inline_init; + v = fp->mode; + /* If last op was a read ... */ + if ((v & __MODE_READING) && fflush(fp)) + return EOF; + /* Can't write or there's been an EOF or error then return EOF */ + if ((v & (__MODE_WRITE | __MODE_EOF | __MODE_ERR)) != __MODE_WRITE) + return EOF; +#if __MODE_IOTRAN + /* In MSDOS translation mode */ + if (ch == '\n' && (v & __MODE_IOTRAN) && fputc('\r', fp) == EOF) + return EOF; +#endif + /* Buffer is full */ + if (fp->bufpos >= fp->bufend && fflush(fp)) + return EOF; + /* Right! Do it! */ + *(fp->bufpos++) = ch; + fp->mode |= __MODE_WRITING; + + /* Unbuffered or Line buffered and end of line */ + if (((ch == '\n' && (v & _IOLBF)) || (v & _IONBF)) && fflush(fp)) + return EOF; + /* Can the macro handle this by itself ? */ + if (v & (__MODE_IOTRAN | _IOLBF | _IONBF)) + fp->bufwrite = fp->bufstart; /* Nope */ + else fp->bufwrite = fp->bufend; /* Yup */ + /* Correct return val */ + return (unsigned char) ch; +} +#endif + diff --git a/src/nos/crt/fputs.c b/src/nos/crt/fputs.c new file mode 100644 index 00000000..c4e35022 --- /dev/null +++ b/src/nos/crt/fputs.c @@ -0,0 +1,27 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_fputs +int fputs(str, fp) + void *str; + FILE *fp; +{ + register int n = 0; + char *s = str; + + while (*s) { + if (putc(*s++, fp) == EOF) + return (EOF); + ++n; + } + return (n); +} +#endif + diff --git a/src/nos/crt/fputter.c b/src/nos/crt/fputter.c new file mode 100644 index 00000000..4d23c2bb --- /dev/null +++ b/src/nos/crt/fputter.c @@ -0,0 +1,51 @@ +/* fputter.c + * Nick Downing, Hytech + * + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + * + * Altered to use stdarg, made the core function vprinter (Nick). + * Hooked into the stdio package using 'inside information' + * Altered sizeof() assumptions, now assumes all integers except chars + * will be either + * sizeof(xxx) == sizeof(long) or sizeof(xxx) == sizeof(short) + * + * -RDB + */ + +#include "printf.h" + +#ifdef L_fputter +unsigned int __fputter(buffer, count, op) + void *buffer; + unsigned int count; + FILE *op; +{ + unsigned int cnt; + unsigned char ch; + int buffer_mode; + + /* This speeds things up a bit for unbuffered */ + buffer_mode = (op->mode & __MODE_BUF); + op->mode &= (~__MODE_BUF); + + for (cnt = 0; cnt < count; cnt++) + { + ch = *(unsigned char *)buffer; + putc(ch, op); /* normal char out */ + if (ch == '\n' && buffer_mode == _IOLBF) + fflush(op); + ((unsigned char *)buffer)++; + } + + op->mode |= buffer_mode; + if (buffer_mode == _IONBF) + fflush(op); + if (buffer_mode == _IOLBF) + op->bufwrite = op->bufstart; + + return cnt; +} +#endif + diff --git a/src/nos/crt/fread.c b/src/nos/crt/fread.c new file mode 100644 index 00000000..e41eec71 --- /dev/null +++ b/src/nos/crt/fread.c @@ -0,0 +1,62 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_fread +/* + * fread will often be used to read in large chunks of data calling read() + * directly can be a big win in this case. Beware also fgetc calls this + * function to fill the buffer. + * + * This ignores __MODE__IOTRAN; probably exactly what you want. + * (It _is_ what fgetc wants) + */ +int fread(buf, size, nelm, fp) + void *buf; + size_t size, nelm; + FILE *fp; +{ + register int len, v; + unsigned bytes, got = 0; + + Inline_init; + if (!buf || !size || !nelm || !fp) + return 0; + v = fp->mode; + /* Want to do this to bring the file pointer up to date */ + if (v & __MODE_WRITING) + fflush(fp); + /* Can't read or there's been an EOF or error then return zero */ + if ((v & (__MODE_READ | __MODE_EOF | __MODE_ERR)) != __MODE_READ) + return 0; + /* This could be long, doesn't seem much point tho */ + bytes = size * nelm; + len = fp->bufread - fp->bufpos; + if (len >= bytes) { /* Enough buffered */ + memcpy(buf, fp->bufpos, bytes); + fp->bufpos += bytes; + return bytes; + } + else if (len > 0) { /* Some buffered */ + memcpy(buf, fp->bufpos, len); + got = len; + } + /* Need more; do it with a direct read */ + len = read(fp->fd, (char *)buf + got, bytes - got); + /* Possibly for now _or_ later */ + if (len < 0) { + fp->mode |= __MODE_ERR; + len = 0; + } + else if (len == 0) + fp->mode |= __MODE_EOF; + return (got + len) / size; +} +#endif + diff --git a/src/nos/crt/free.c b/src/nos/crt/free.c new file mode 100644 index 00000000..634da56f --- /dev/null +++ b/src/nos/crt/free.c @@ -0,0 +1,45 @@ +/* free.c */ +/* Copyright (C) 1984 by Manx Software Systems */ + +#include "malloc-l.h" + +void free(void *area) + { + register FREE *tp, *hole; + +#ifdef MALLOC_DEBUG + amess("free(0x"); + ahexw((unsigned int)area); + amess(") starting"); + acrlf(); + /* printf("free(0x%x) starting\n"); */ + /* fflush(stdout); */ +#endif + + hole = (FREE *)area - 1; + if (hole->f_chain != NULL) + { +#ifdef MALLOC_DEBUG + amess("free() returning error"); + acrlf(); + /* printf("free() returning error\n"); */ + /* fflush(stdout); */ +#endif + return; /* Nick -1; */ + } + for (tp = last ; tp > hole || hole > tp->f_chain ; tp = tp->f_chain) + if (tp >= tp->f_chain && (hole > tp || hole < tp->f_chain)) + break; + + hole->f_chain = tp->f_chain; + tp->f_chain = hole; + last = tp; +#ifdef MALLOC_DEBUG + amess("free() returning ok"); + acrlf(); + /* printf("free() returning ok\n"); */ + /* fflush(stdout); */ +#endif + return; /* Nick 0; */ + } + diff --git a/src/nos/crt/free.c$ b/src/nos/crt/free.c$ new file mode 100644 index 00000000..44fb4e59 --- /dev/null +++ b/src/nos/crt/free.c$ @@ -0,0 +1,148 @@ +/* Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + * + * This is a combined alloca/malloc package. It uses a classic algorithm + * and so may be seen to be quite slow compared to more modern routines + * with 'nasty' distributions. + */ + +#include "malloc-l.h" + +#ifdef L_free +/* Start the alloca with just the dumb version of malloc */ +void *(*__alloca_alloc) __P((size_t)) = __mini_malloc; +/* the free list is a single list of free blocks. __freed_list points to + the highest block (highest address) and each block points to the lower + block (lower address). last block points to 0 (initial value of + _freed_list) +*/ +mem *__freed_list = 0; + +#ifdef VERBOSE +/* NB: Careful here, stdio may use malloc - so we can't */ +#include +#include +#include + +static void pstr __P((char *)); +static void phex __P((unsigned)); +static void noise __P((char *, mem *)); + +static void pstr(str) + char *str; +{ + write(2, str, strlen(str)); +} + +static void phex(val) + unsigned val; +{ + char buf[8]; + + strcpy(buf,"000"); + ltoa((long)val,buf+3,16); + pstr(buf+strlen(buf+4)); +} + +void __noise(y, x) + char *y; + mem *x; +{ + pstr("Malloc "); phex((unsigned)x); + pstr(" sz "); phex(x ? (unsigned)m_size(x) : 0); + pstr(" nxt "); phex(x ? (unsigned)m_next(x) : 0); + pstr(" is "); pstr(y); pstr("\n"); +} +#endif + +void free(ptr) + void *ptr; +{ + register mem *top, *chk = (mem *)ptr; + + if (chk == 0) + return; /* free(NULL) - be nice */ + chk--; +try_this:; + top = (mem *) sbrk(0); + if (m_add(chk, m_size(chk)) >= top) { + noise("FREE brk", chk); + brk((void *)((uchar *)top - m_size(chk))); + /* Adding this code allow free to release blocks in any order; + * they can still only be allocated from the top of the heap + * tho. + */ +#ifdef __MINI_MALLOC__ + if (__alloca_alloc == __mini_malloc && __freed_list) { + chk = __freed_list; + __freed_list = m_next(__freed_list); + goto try_this; + } +#endif + } + else { /* Nope, not sure where this goes, leave it for malloc to deal with */ +#ifdef __MINI_MALLOC__ + /* check if block is already on free list. + if it is, return without doing nothing */ + top = __freed_list; + while (top) { + if (top == chk) return; + top = m_next(top); + } + /* else add it to free list */ + if (!__freed_list || chk > __freed_list) { + /* null free list or block above free list */ + m_next(chk) = __freed_list; + __freed_list = chk; + } + else { + /* insert block in free list, ordered by address */ + register mem *prev = __freed_list; + + top = __freed_list; + while (top && top > chk) { + prev = top; + top = m_next(top); + } + m_next(chk) = top; + m_next(prev) = chk; + } +#else + m_next(chk) = __freed_list; + __freed_list = chk; +#endif + noise("ADD LIST", chk); + } +} + +void *__mini_malloc(size) + size_t size; +{ + register mem *ptr; + register unsigned int sz; + + /* First time round this _might_ be odd, But we won't do that! */ +#if 0 + sz = (unsigned int) sbrk(0); + if (sz & (sizeof(struct mem_cell) - 1)) { + if (sbrk(sizeof(struct mem_cell) - (sz & (sizeof(struct mem_cell) - 1))) < 0) goto nomem; + } +#endif + if (size == 0) + return 0; + /* Minor oops here, sbrk has a signed argument */ + if (size > (((unsigned) -1) >> 1) - sizeof(struct mem_cell) * 3) { +nomem: errno = ENOMEM; + return 0; + } + size += sizeof(struct mem_cell); /* Round up and leave space for size field */ + ptr = (mem *) sbrk(size); + if ((int) ptr == -1) + return 0; + m_size(ptr) = size; + noise("CREATE", ptr); + return ptr + 1; +} +#endif /* L_free */ + diff --git a/src/nos/crt/fscanf.c b/src/nos/crt/fscanf.c new file mode 100644 index 00000000..76340ba9 --- /dev/null +++ b/src/nos/crt/fscanf.c @@ -0,0 +1,25 @@ +/* scanf.c + */ + +#include "scanf.h" + +#ifdef L_fscanf +#if 1 +int fscanf(FILE * fp, char *fmt,...) +#else +int fscanf(fp, fmt, va_alist) + FILE *fp; + char *fmt; + va_dcl +#endif +{ + va_list ptr; + int rv; + + va_strt(ptr, fmt); + rv = vfscanf(fp, fmt, ptr); + va_end(ptr); + return rv; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/ftell.c b/src/nos/crt/ftell.c new file mode 100644 index 00000000..c4edb878 --- /dev/null +++ b/src/nos/crt/ftell.c @@ -0,0 +1,20 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_ftell +long ftell(fp) + FILE *fp; +{ + if (fflush(fp) == EOF) + return EOF; + return lseek(fp->fd, 0L, SEEK_CUR); +} +#endif + diff --git a/src/nos/crt/fwrite.c b/src/nos/crt/fwrite.c new file mode 100644 index 00000000..0c5c9be4 --- /dev/null +++ b/src/nos/crt/fwrite.c @@ -0,0 +1,70 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_fwrite +/* + * Like fread, fwrite will often be used to write out large chunks of + * data; calling write() directly can be a big win in this case. + * + * But first we check to see if there's space in the buffer. + * + * Again this ignores __MODE__IOTRAN. + */ +int fwrite(buf, size, nelm, fp) + void *buf; + size_t size, nelm; + FILE *fp; +{ + int len; + register int v; + unsigned int bytes, put; + + Inline_init; + if (!buf || !size || !nelm || !fp) + return 0; + v = fp->mode; + /* If last op was a read ... */ + if ((v & __MODE_READING) && fflush(fp)) + return 0; + /* Can't write or there's been an EOF or error then return 0 */ + if ((v & (__MODE_WRITE | __MODE_EOF | __MODE_ERR)) != __MODE_WRITE) + return 0; + /* This could be long, doesn't seem much point tho */ + bytes = size * nelm; + len = fp->bufend - fp->bufpos; + /* Flush the buffer if not enough room */ + if (bytes > len && fflush(fp)) + return 0; + len = fp->bufend - fp->bufpos; + if (bytes <= len) { /* It'll fit in the buffer ? */ + fp->mode |= __MODE_WRITING; + memcpy(fp->bufpos, buf, bytes); + fp->bufpos += bytes; + /* If we're not fully buffered */ + if (v & (_IOLBF | _IONBF)) + fflush(fp); + return nelm; + } + /* Too big for the buffer */ + /* ??? May be leave the rest of data in buffer ? */ + put = bytes; + do { + if ((len = write(fp->fd, buf, bytes)) > 0) { + buf = (char *)buf + len; + bytes -= len; + } + } while (len > 0 || (len == -1 && errno == EINTR)); + if (len < 0) + fp->mode |= __MODE_ERR; + put -= bytes; + return put / size; +} +#endif + diff --git a/src/nos/crt/getcwd.c b/src/nos/crt/getcwd.c new file mode 100644 index 00000000..1025f2fb --- /dev/null +++ b/src/nos/crt/getcwd.c @@ -0,0 +1,103 @@ +/* These functions find the absolute path to the current working directory. + * + * They don't use malloc or large amounts of stack space. + */ +#include +#include +#include +#include + +static char *search_dir __P((uint, uint)); /* Routine to find the step back down */ +static char *recurser __P((void)); /* Routine to go up tree */ +static char *path_buf; +static int path_size; + +static uint root_dev; +static uint root_ino; +static struct stat st; + +static char *search_dir(this_dev, this_ino) + uint this_dev; + uint this_ino; +{ + struct dirent *d; + char *ptr; + int slen; + DIR *dp; + unsigned char slow_search = 0; + + if (stat(path_buf, &st) < 0) + return NULL; + if (this_dev != st.st_dev) + ++slow_search; + slen = strlen(path_buf); + ptr = path_buf + slen - 1; + if (*ptr != '/') { + if (slen + 2 > path_size) { + errno = ERANGE; + return NULL; + } + strcpy(++ptr, "/"); + ++slen; + } + ++slen; + if ((dp = opendir(path_buf)) == 0) + return NULL; + while ((d = readdir(dp)) != 0) { + if (slow_search || this_ino == d->d_ino) { + if (slen + strlen(d->d_name) > path_size) { + errno = ERANGE; + return NULL; + } + strcpy(ptr + 1, d->d_name); + if (stat(path_buf, &st) < 0) + continue; + if (st.st_ino == this_ino && + st.st_dev == this_dev) { + closedir(dp); + return path_buf; + } + } + /* else ??? */ + } + closedir(dp); + errno = ENOENT; + return NULL; +} + +static char *recurser() { + uint this_dev; + uint this_ino; + + if (stat(path_buf, &st) < 0) + return NULL; + this_dev = st.st_dev; + this_ino = st.st_ino; + if (this_dev == root_dev && this_ino == root_ino) { + strcpy(path_buf, "/"); + return path_buf; + } + if (strlen(path_buf) + 4 > path_size) { + errno = ERANGE; + return NULL; + } + strcat(path_buf, "/.."); + return recurser() ? search_dir(this_dev, this_ino) : NULL; +} + +char *getcwd(buf, size) + char *buf; + int size; +{ + if ((path_size = size) < 3) { + errno = ERANGE; + return 0; + } + strcpy(path_buf = buf, "."); + if (stat("/", &st) < 0) + return NULL; /* no root */ + root_dev = st.st_dev; + root_ino = st.st_ino; + return recurser(); +} + \ No newline at end of file diff --git a/src/nos/crt/getenv.c b/src/nos/crt/getenv.c new file mode 100644 index 00000000..7b0279db --- /dev/null +++ b/src/nos/crt/getenv.c @@ -0,0 +1,27 @@ +/*********************** getenv.c *************************** +/* Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "environ.h" + +#ifdef L_getenv +char *getenv(name) + char *name; +{ + register char *p, **ep = environ; + register int l = strlen(name); + + if (ep == 0 || l == 0) + return 0; + while ((p = *ep++) != NULL) { + if (p[0] == name[0] && + p[l] == '=' && + memcmp(name, p, l) == 0) + return p + l + 1; + } + return NULL; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/getgrent.c b/src/nos/crt/getgrent.c new file mode 100644 index 00000000..bad15f1b --- /dev/null +++ b/src/nos/crt/getgrent.c @@ -0,0 +1,87 @@ +/* getgrent.c groups implementation + */ + +#include "grp-l.h" + +#ifdef L_getgrent +#define GR_MAX_LINE_LEN 200 +/* This is the core group-file read function. It behaves exactly like + * getgrent() except that it is passed a file descriptor. getgrent() + * is just a wrapper for this function. + */ +struct group *__getgrent(grp_fd) + int grp_fd; +{ + static char line_buff[GR_MAX_LINE_LEN]; + static char *members[GR_MAX_MEMBERS+1]; + static struct group group; + + char *field_begin, *endptr; + int member_num, line_len; + register char *ptr; + + /* We use the restart label to handle malformatted lines */ +restart: + /* Read the line into the static buffer */ + if ((line_len = read(grp_fd, line_buff, GR_MAX_LINE_LEN)) <= 0) + return NULL; + if ((field_begin = strchr(line_buff, '\n')) != NULL) { + *field_begin++ = '\0'; + lseek(grp_fd, (long) ((field_begin - line_buff) - line_len), SEEK_CUR); + if (field_begin[-2] == '\r') + field_begin[-2] = '\0'; + } + else { /* The line is too long - skip it :-\ */ + do { + if ((line_len = read(grp_fd, line_buff, GR_MAX_LINE_LEN)) <= 0) + return NULL; + } while (0 == (field_begin = strchr(line_buff, '\n'))); + lseek(grp_fd, (long) ((field_begin - line_buff) - line_len + 1), SEEK_CUR); + goto restart; + } + if (*line_buff == '#' || + *line_buff == ' ' || + *line_buff == '\n' || + *line_buff == '\t') + goto restart; + /* Now parse the line */ + group.gr_name = line_buff; + if ((ptr = strchr(line_buff, ':')) == NULL) + goto restart; + *ptr++ = '\0'; + + group.gr_passwd = ptr; + if ((ptr = strchr(ptr, ':')) == NULL) + goto restart; + *ptr++ = '\0'; + + field_begin = ptr; + if ((ptr = strchr(ptr, ':')) == NULL) + goto restart; + *ptr++ = '\0'; + + group.gr_gid = (int)strtol(field_begin, &endptr, 10); + if (*endptr != '\0') + goto restart; + + field_begin = ptr; + member_num = 0; + while ((ptr = strchr(ptr, ',')) != NULL) { + *ptr = '\0'; + ptr++; + members[member_num] = field_begin; + field_begin = ptr; + if (member_num < GR_MAX_MEMBERS) + member_num++; + } + if (*field_begin == '\0') + members[member_num] = NULL; + else { + members[member_num] = field_begin; + members[member_num + 1] = NULL; + } + group.gr_mem = members; + return &group; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/getgrgid.c b/src/nos/crt/getgrgid.c new file mode 100644 index 00000000..6f6764d6 --- /dev/null +++ b/src/nos/crt/getgrgid.c @@ -0,0 +1,21 @@ +/* getgrgid.c groups implementation + */ + +#include "grp-l.h" + +#ifdef L_getgrgid +struct group *getgrgid(gid) + int gid; +{ + struct group *group; + + setgrent(); + while ((group = getgrent()) != NULL) { + if (group->gr_gid == gid) + break; + } + endgrent(); + return group; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/getgrnam.c b/src/nos/crt/getgrnam.c new file mode 100644 index 00000000..a47a8608 --- /dev/null +++ b/src/nos/crt/getgrnam.c @@ -0,0 +1,25 @@ +/* getgrnam.c groups implementation + */ + +#include "grp-l.h" + +#ifdef L_getgrnam +struct group *getgrnam(name) + char *name; +{ + struct group *group; + + if (name == NULL) { + errno = EINVAL; + return NULL; + } + setgrent(); + while ((group = getgrent()) != NULL) { + if (!strcmp(group->gr_name, name)) + break; + } + endgrent(); + return group; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/getopt.c b/src/nos/crt/getopt.c new file mode 100644 index 00000000..f27fcfce --- /dev/null +++ b/src/nos/crt/getopt.c @@ -0,0 +1,66 @@ +/* + * getopt - parse command-line options + */ +/* $Header: getopt.c,v 1.1 89/12/18 14:39:31 eck Exp $ */ + +#include +#include +#include + +#define ERR(s, c) if(opterr){\ + fputs(argv[0], stderr);\ + fputs(s, stderr);\ + fputc(c, stderr);\ + fputc('\n', stderr);} + +int opterr = 1; +int optind = 1; +int optopt; +char *optarg; + +int +getopt(argc, argv, opts) +int argc; +char **argv; +char *opts; +{ + static int sp = 1; + register int c; + register char *cp; + + if (sp == 1) + if (optind >= argc || + argv[optind][0] != '-' || argv[optind][1] == '\0') + return EOF; + else if (!strcmp(argv[optind], "--")) { + optind++; + return EOF; + } + optopt = c = argv[optind][sp]; + if (c == ':' || (cp=strchr(opts, c)) == NULL) { + ERR (": illegal option -- ", c); + if (argv[optind][++sp] == '\0') { + optind++; + sp = 1; + } + return '?'; + } + if (*++cp == ':') { + if (argv[optind][sp+1] != '\0') + optarg = &argv[optind++][sp+1]; + else if (++optind >= argc) { + ERR (": option requires an argument -- ", c); + sp = 1; + return '?'; + } else + optarg = argv[optind++]; + sp = 1; + } else { + if (argv[optind][++sp] == '\0') { + sp = 1; + optind++; + } + optarg = NULL; + } + return c; +} diff --git a/src/nos/crt/getpass.c b/src/nos/crt/getpass.c new file mode 100644 index 00000000..c7692301 --- /dev/null +++ b/src/nos/crt/getpass.c @@ -0,0 +1,70 @@ +/* getpass.c + */ +#include +#include +#include +/* Nick #include */ +#include /* Nick */ + +static char *_gets(buf, len) + char *buf; + int len; +{ + int ch, i = 0; + + while (i < len) { + if ((ch = _getchar()) == EOF && i == 0) + return NULL; +#if 0 + if (ch >= ' ') + _putchar(ch); + else { + _putchar('^'); + _putchar(ch + '@'); + } +#endif + if ((ch == 'C' & 037) || (ch == 'Z' & 037)) + return NULL; + if (ch == '\n' || ch == '\r') + break; + buf[i++] = ch; + } + buf[i] = 0; + return buf; +} + +char *getpass(prompt) + char *prompt; +{ + static char result[128]; +#if 1 /* Nick */ + struct sgttyb state; +#endif + int raw; + + /* display the prompt */ + fputs(prompt, stdout); + fflush(stdout); +#if 1 /* Nick */ + gtty(STDIN_FILENO, &state); + raw = state.sg_flags; + state.sg_flags &= ~ECHO; + stty(STDIN_FILENO, &state); +#else + raw = ioctl(STDIN_FILENO, TTY_RAW); +#endif + /* read the input */ + if (_gets(result, sizeof(result) - 1) == NULL) + result[0] = 0; +#if 1 /* Nick */ + state.sg_flags = raw; + stty(STDIN_FILENO, &state); +#else + if (!raw) + ioctl(STDIN_FILENO, TTY_COOKED); +#endif +/* printf("getpass(\"%s\") yielded \"%s\"\n", prompt, result); */ +/* fflush(stdout); */ + return result; +} + \ No newline at end of file diff --git a/src/nos/crt/getpw.c b/src/nos/crt/getpw.c new file mode 100644 index 00000000..b98aa2a5 --- /dev/null +++ b/src/nos/crt/getpw.c @@ -0,0 +1,29 @@ +/* getpw.c + */ + +#include "passwd.h" + +#ifdef L_getpw +int getpw(uid, buf) + int uid; + char *buf; +{ + struct passwd *pwd; + + if (buf == NULL) { + errno = EINVAL; + return -1; + } + if ((pwd = getpwuid(uid)) == NULL) + return -1; + sprintf(buf, "%s:%s:%u:%u:%s:%s:%s", + pwd->pw_name, + pwd->pw_passwd, + pwd->pw_uid, pwd->pw_gid, + pwd->pw_gecos, + pwd->pw_dir, + pwd->pw_shell); + return 0; +} +#endif + diff --git a/src/nos/crt/getpwent.c b/src/nos/crt/getpwent.c new file mode 100644 index 00000000..9d4c177f --- /dev/null +++ b/src/nos/crt/getpwent.c @@ -0,0 +1,70 @@ +/* getpwent.c + */ + +#include "passwd.h" + +#ifdef L_getpwent +#define PWD_BUFFER_SIZE 256 + +struct passwd *__getpwent(pwd_fd) + int pwd_fd; +{ + static char line_buff[PWD_BUFFER_SIZE]; + static struct passwd passwd; + + char *field_begin, *endptr, *gid_ptr, *uid_ptr; + int i, line_len; + + /* We use the restart label to handle malformatted lines */ +restart: + /* Read the passwd line into the static buffer using a minimal of syscalls. */ + if ((line_len = read(pwd_fd, line_buff, PWD_BUFFER_SIZE)) <= 0) + return NULL; + if ((field_begin = strchr(line_buff, '\n')) != NULL) { + *field_begin++ = '\0'; + lseek(pwd_fd, (long) ((field_begin - line_buff) - line_len), SEEK_CUR); + if (field_begin[-2] == '\r') + field_begin[-2] = '\0'; + } + else { /* The line is too long - skip it. :-\ */ + do { + if ((line_len = read(pwd_fd, line_buff, PWD_BUFFER_SIZE)) <= 0) + return NULL; + } while (0 == (field_begin = strchr(line_buff, '\n'))); + lseek(pwd_fd, (long) (field_begin - line_buff) - line_len + 1, SEEK_CUR); + goto restart; + } + if (*line_buff == '#' || + *line_buff == ' ' || + *line_buff == '\n' || + *line_buff == '\t') + goto restart; + /* We've read the line; now parse it. */ + field_begin = line_buff; + for (i = 0; i < 7; i++) { + switch (i) { + case 0: passwd.pw_name = field_begin; break; + case 1: passwd.pw_passwd = field_begin; break; + case 2: uid_ptr = field_begin; break; + case 3: gid_ptr = field_begin; break; + case 4: passwd.pw_gecos = field_begin; break; + case 5: passwd.pw_dir = field_begin; break; + case 6: passwd.pw_shell = field_begin; break; + } + if (i < 6) { + field_begin = strchr(field_begin, ':'); + if (field_begin == NULL) + goto restart; + *field_begin++ = '\0'; + } + } + passwd.pw_gid = (int)strtoul(gid_ptr, &endptr, 10); + if (*endptr != '\0') + goto restart; + passwd.pw_uid = (int)strtoul(uid_ptr, &endptr, 10); + if (*endptr != '\0') + goto restart; + return &passwd; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/getpwnam.c b/src/nos/crt/getpwnam.c new file mode 100644 index 00000000..f9fc683c --- /dev/null +++ b/src/nos/crt/getpwnam.c @@ -0,0 +1,27 @@ +/* getpwnam.c + */ + +/* #include Nick */ +#include "passwd.h" + +#ifdef L_getpwnam +struct passwd *getpwnam(name) + char *name; +{ + struct passwd *pwd; + + if (name == NULL) { + errno = EINVAL; + return NULL; + } + setpwent(); + while ((pwd = getpwent()) != NULL) { +/* printf("getpwent() returned pw_name = \"%s\"\n", pwd->pw_name); */ + if (!strcmp(pwd->pw_name, name)) + break; + } + endpwent(); + return pwd; +} +#endif + diff --git a/src/nos/crt/getpwuid.c b/src/nos/crt/getpwuid.c new file mode 100644 index 00000000..0a83461b --- /dev/null +++ b/src/nos/crt/getpwuid.c @@ -0,0 +1,21 @@ +/* getpwuid.c + */ + +#include "passwd.h" + +#ifdef L_getpwuid +struct passwd *getpwuid(uid) + int uid; +{ + struct passwd *pwd; + + setpwent(); + while ((pwd = getpwent()) != NULL) { + if (pwd->pw_uid == uid) + break; + } + endpwent(); + return pwd; +} +#endif + diff --git a/src/nos/crt/gets.c b/src/nos/crt/gets.c new file mode 100644 index 00000000..a147959f --- /dev/null +++ b/src/nos/crt/gets.c @@ -0,0 +1,39 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_gets +char *gets(str) /* BAD function; DON'T use it! */ + char *str; +{ + /* Auwlright it will work but of course _your_ program will crash */ + /* if it's given a too long line */ + register int c; + register char *p = str; + + while (((c = getc(stdin)) != EOF) && (c != '\n')) + *p++ = c; + *p = '\0'; + return (((c == EOF) && (p == str)) ? NULL : str); /* NULL == EOF */ +} +#endif + +#ifdef L_puts +int puts(str) + void *str; +{ + register int n; + + if (((n = fputs(str, stdout)) == EOF) + || (putc('\n', stdout) == EOF)) + return (EOF); + return (++n); +} +#endif + diff --git a/src/nos/crt/gmtime.c b/src/nos/crt/gmtime.c new file mode 100644 index 00000000..f46500de --- /dev/null +++ b/src/nos/crt/gmtime.c @@ -0,0 +1,141 @@ +/*************************** GMTIME ************************************/ +#include "time-l.h" + +#ifdef L_gmtime + +static unsigned int __mon_days[12] = { + 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 +}; + +void __tm_conv(tmbuf, pt, offset) + struct tm *tmbuf; + time_t *pt; + int offset; +{ + register int y, i, wday, yday; + + tmbuf->tm_sec = (((dostime_t *)pt)->t_time & 31) * 2; + tmbuf->tm_min = ((((dostime_t *)pt)->t_time >> 5) & 63) + offset; + tmbuf->tm_hour = ((((dostime_t *)pt)->t_time >> 11) & 31); + + tmbuf->tm_mday = (((dostime_t *)pt)->t_date & 31); + tmbuf->tm_mon = ((((dostime_t *)pt)->t_date >> 5) & 15) - 1; + y = ((((dostime_t *)pt)->t_date >> 9) & 127) + 1980; + + while (tmbuf->tm_min < 0) { + tmbuf->tm_min += 60; + tmbuf->tm_hour--; + while (tmbuf->tm_hour < 0) { + tmbuf->tm_hour += 24; + i = __mon_days[tmbuf->tm_mon]; + if (tmbuf->tm_mon == 1 && __isleap(y)) + ++i; + tmbuf->tm_mday--; + while (tmbuf->tm_mday < 0) { + tmbuf->tm_mday += i; + tmbuf->tm_mon--; + while (tmbuf->tm_mon <= 0) { + tmbuf->tm_mon += 12; + --y; + } + } + } + } + while (tmbuf->tm_min >= 60) { + tmbuf->tm_min -= 60; + tmbuf->tm_hour++; + while (tmbuf->tm_hour >= 24) { + tmbuf->tm_hour -= 24; + i = __mon_days[tmbuf->tm_mon]; + if (tmbuf->tm_mon == 1 && __isleap(y)) + ++i; + tmbuf->tm_mday++; + while (tmbuf->tm_mday > i) { + tmbuf->tm_mday -= i; + tmbuf->tm_mon++; + while (tmbuf->tm_mon >= 12) { + tmbuf->tm_mon -= 12; + ++y; + } + } + } + } + tmbuf->tm_year = y - 1900; + if (y > 1996) { + /* Jan 1, 1997 was Wen */ + i = 1997; + wday = 2; + } + else { + /* Jan 1, 1970 was Thu */ + i = 1970; + wday = 3; + } + while (i < y) { + wday += __isleap(i) ? 2 : 1; + ++i; + } + i = 0; + yday = tmbuf->tm_mday; + while (i < tmbuf->tm_mon) { + yday += __mon_days[i]; + if (i == 1 && __isleap(i)) + ++yday; + ++i; + } + tmbuf->tm_wday = (wday + yday) % 7; + tmbuf->tm_yday = yday + 1; + tmbuf->tm_isdst = -1; +#if TIME_T_IS_JUST_A_LONG_NUMBER + long t = unixtime(pt); + + days = t / SECS_PER_DAY; + rem = t % SECS_PER_DAY; + rem += offset; + while (rem < 0) { + rem += SECS_PER_DAY; + --days; + } + while (rem >= SECS_PER_DAY) { + rem -= SECS_PER_DAY; + ++days; + } + tmbuf->tm_hour = rem / SECS_PER_HOUR; + rem %= SECS_PER_HOUR; + tmbuf->tm_min = rem / 60; + tmbuf->tm_sec = rem % 60; + /* January 1, 1970 was a Thursday. */ + tmbuf->tm_wday = (4 + days) % 7; + if (tmbuf->tm_wday < 0) + tmbuf->tm_wday += 7; + y = 1970; + while (days >= (rem = __isleap(y) ? 366 : 365)) { + ++y; + days -= rem; + } + while (days < 0) { + --y; + days += __isleap(y) ? 366 : 365; + } + tmbuf->tm_year = y - 1900; + tmbuf->tm_yday = days; + ip = __mon_lengths[__isleap(y)]; + y = 0; + while (days >= ip[y]) + days -= ip[y++]; + tmbuf->tm_mon = y; + tmbuf->tm_mday = days + 1; + tmbuf->tm_isdst = -1; +#endif +} + +struct tm *gmtime(timep) + time_t *timep; +{ + static struct tm tmb; + + __tm_conv(&tmb, timep, (int)(timezone/60)); + return &tmb; +} +#endif + diff --git a/src/nos/crt/grp-l.h b/src/nos/crt/grp-l.h new file mode 100644 index 00000000..d00d04f9 --- /dev/null +++ b/src/nos/crt/grp-l.h @@ -0,0 +1,21 @@ +/* grp-l.h groups implementation + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef MAKE_ALL +#define L_fgetgren +#define L_getgrgid +#define L_getgrnam +#define L_setgrent +#define L_initgroup +#define L_getgrent +#endif + diff --git a/src/nos/crt/initgrup.c b/src/nos/crt/initgrup.c new file mode 100644 index 00000000..cf24247f --- /dev/null +++ b/src/nos/crt/initgrup.c @@ -0,0 +1,35 @@ +/* initgrup.c groups implementation + */ + +#include "grp-l.h" + +#ifdef L_initgroup +int initgroups(user, gid) + char *user; + int gid; +{ + register struct group *group; + int group_list[GR_MAX_GROUPS]; + register char **tmp_mem; + int num_groups; + + num_groups = 0; + group_list[num_groups] = gid; + setgrent(); + while (num_groups < GR_MAX_GROUPS && (group = getgrent()) != NULL) { + if (group->gr_gid != gid) { + tmp_mem = group->gr_mem; + while (*tmp_mem != NULL) { + if (!strcmp(*tmp_mem, user)) { + num_groups++; + group_list[num_groups] = group->gr_gid; + } + tmp_mem++; + } + } + } + endgrent(); + return setgroups(num_groups, group_list); +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/io64180.inc b/src/nos/crt/io64180.inc new file mode 100644 index 00000000..01380ae1 --- /dev/null +++ b/src/nos/crt/io64180.inc @@ -0,0 +1,155 @@ +; /* - 64180.inc - +; +; This files defines the internal register addresses +; for HD64180 +; +; File version: $Revision: 1.4 $ +; +; */ +; +; /* ================================== */ +; /* */ +; /* ASCI Channel Control Registers */ +; /* */ +; /* ================================== */ + +CNTLA0 = 0x00; /* ASCI Ctrl Reg A, Ch 0 */ +CNTLA1 = 0x01; /* ASCI Ctrl Reg A, Ch 1 */ +CNTLB0 = 0x02; /* ASCI Ctrl Reg B, Ch 0 */ +CNTLB1 = 0x03; /* ASCI Ctrl Reg B, Ch 1 */ +; ----------------------------------------------------------------------------- +STAT0 = 0x04; /* ASCI Status Reg, Ch 0 */ +STAT1 = 0x05; /* ASCI Status Reg, Ch 1 */ +; ----------------------------------------------------------------------------- +TDR0 = 0x06; /* ASCI Transmit Data Reg, Ch 0 */ +TDR1 = 0x07; /* ASCI Transmit Data Reg, Ch 1 */ +RDR0 = 0x08; /* ASCI Receive Data Reg, Ch 0 */ +RDR1 = 0x09; /* ASCI Receive Data Reg, Ch 1 */ + +; /* ================================== */ +; /* */ +; /* CSI/O Registers */ +; /* */ +; /* ================================== */ + +CNTR = 0x0A; /* CSI/O Ctrl Reg */ +TRDR = 0x0B; /* CSI/O Trans/Rec Data Reg */ + +; /* ================================== */ +; /* */ +; /* Timer Registers */ +; /* */ +; /* ================================== */ + +TMDR0L = 0x0C; /* Timer 0 Data Reg L */ +TMDR0H = 0x0D; /* Timer 0 Data Reg H */ +TMDR1L = 0x14; /* Timer 1 Data Reg L */ +TMDR1H = 0x15; /* Timer 1 Data Reg H */ +; ----------------------------------------------------------------------------- +RLDR0L = 0x0E; /* Timer 0 Reload Reg L */ +RLDR0H = 0x0F; /* Timer 0 Reload Reg H */ +RLDR1L = 0x16; /* Timer 1 Reload Reg L */ +RLDR1H = 0x17; /* Timer 1 Reload Reg H */ +; ----------------------------------------------------------------------------- +TCR = 0x10; /* Timer Ctrl Reg */ + +; /* ================================== */ +; /* */ +; /* Free Running Counter */ +; /* */ +; /* ================================== */ + +FRC = 0x18; /* Free Running Counter */ + +; /* ================================== */ +; /* */ +; /* DMA Registers */ +; /* */ +; /* ================================== */ + +SAR0L = 0x20; /* DMA 0 Source Addr Reg */ +SAR0H = 0x21; /* DMA 0 Source Addr Reg */ +SAR0B = 0x22; /* DMA 0 Source Addr Reg */ +; ----------------------------------------------------------------------------- +DAR0L = 0x23; /* DMA 0 Destination Addr Reg */ +DAR0H = 0x24; /* DMA 0 Destination Addr Reg */ +DAR0B = 0x25; /* DMA 0 Destination Addr Reg */ +; ----------------------------------------------------------------------------- +BCR0L = 0x26; /* DMA 0 Counter Reg */ +BCR0H = 0x27; /* DMA 0 Counter Reg */ +; ----------------------------------------------------------------------------- +MAR1L = 0x28; /* DMA 1 Memory Addr Reg */ +MAR1H = 0x29; /* DMA 1 Memory Addr Reg */ +MAR1B = 0x2A; /* DMA 1 Memory Addr Reg */ +; ----------------------------------------------------------------------------- +IAR1L = 0x2B; /* DMA I/O Addr Reg */ +IAR1H = 0x2C; /* DMA I/O Addr Reg */ +; ----------------------------------------------------------------------------- +BCR1L = 0x2E; /* DMA 1 Byte Count Reg */ +BCR1H = 0x2F; /* DMA 1 Byte Count Reg */ +; ----------------------------------------------------------------------------- +DSTAT = 0x30; /* DMA Status Reg */ +DMODE = 0x31; /* DMA Mode Reg */ +DCNTL = 0x32; /* DMA/WAIT Ctrl Reg */ + +; /* ================================== */ +; /* */ +; /* MMU Registers */ +; /* */ +; /* ================================== */ + +CBR = 0x38; /* MMU Common Base Reg */ +BBR = 0x39; /* MMU Bank Base Reg */ +CBAR = 0x3A; /* MMU Bank/Common Area Reg */ +; CBR_location = 0x38; /* MMU Common Base Reg */ +; BBR_location = 0x39; /* MMU Bank Base Reg */ +; CBAR_location = 0x3A; /* MMU Bank/Common Area Reg */ +; #define CBR CBR_location +; #define BBR BBR_location +; #define CBAR CBAR_location + +; /* ================================== */ +; /* */ +; /* Interrupt Registers */ +; /* */ +; /* ================================== */ + +IL = 0x33; /* Int Vect Low Reg */ +ITC = 0x34; /* Int/Trap Ctrl Reg */ + +; /* ================================== */ +; /* */ +; /* Refresh Registers */ +; /* */ +; /* ================================== */ + +RCR = 0x36; /* Refresh Ctrl Reg */ + +; /* ================================== */ +; /* */ +; /* I/O Registers */ +; /* */ +; /* ================================== */ + +ICR = 0x3F; /* I/O Ctrl Reg */ + +; /* ================================== */ +; /* */ +; /* Bit Definitions */ +; /* */ +; /* ================================== */ + +INT0SW = 0x01; /* interrupt enable bits in ITC */ +INT1SW = 0x02; /* interrupt enable bits in ITC */ +INT2SW = 0x04; /* interrupt enable bits in ITC */ + +; ----------------------------------------------------------------------------- +; Hytech specific hardware: (For the WPO30-V5, Hytech 1000, Hytech 1500) + +BC8530 = 0x214; /* channel B control in 8530 */ +AC8530 = 0x215; /* channel A control in 8530 */ +BD8530 = 0x216; /* channel B data in 8530 */ +AD8530 = 0x217; /* channel A data in 8530 */ + +; ----------------------------------------------------------------------------- + diff --git a/src/nos/crt/isatty.c b/src/nos/crt/isatty.c new file mode 100644 index 00000000..b4b5fabb --- /dev/null +++ b/src/nos/crt/isatty.c @@ -0,0 +1,13 @@ +/* isatty.c + */ +#include +#include + +int isatty(int fd) { + struct stat stat; + + if (fstat(fd,&stat) == -1 || (stat.st_mode & S_IFMT) != S_IFCHR) + return 0; + return 1; +} + \ No newline at end of file diff --git a/src/nos/crt/itoa.c b/src/nos/crt/itoa.c new file mode 100644 index 00000000..18848aeb --- /dev/null +++ b/src/nos/crt/itoa.c @@ -0,0 +1,199 @@ +/* numeric/string conversions package + */ + +#include "cvt.h" + +/**************************** ltoa.c ****************************/ +#ifdef L_itoa +/* + * filename - ltoa.c + * + * function(s) + * itoa - converts an integer to a string + * ltoa - converts a long to a string + * ultoa - converts an unsigned long to a string + * __longtoa - converts a long to a character string + */ + +/* +Name __longtoa - converts a long to a character string +Usage char *__longtoa (unsigned long value, char *strP, int radix, + char maybeSigned, char hexStyle); +Prototype in stdlib.h + +Description converts a long to a character string. see itoa below. + +Return value pointer to the string +*/ +/*#pragma warn -use*/ +char *__longtoa(unsigned long value, char *strP, int radix, + char maybeSigned, char hexStyle) { + char buf[34]; + register char *di = strP, *si = buf; +#ifdef __TURBOC__ + int *p = (int *)&value; + + hexStyle -= 10; + /* If the request is invalid, generate an empty result */ + if (radix > 36 || radix < 2) + goto lta_end; + if (((int *)&value)[1] < 0 && maybeSigned) { + *di++ = '-'; + value = -value; + } + /* Now loop, taking each digit as modulo radix, and reducing the value + * by dividing by radix, until the value is zeroed. Note that + * at least one loop occurs even if the value begins as 0, + * since we want "0" to be generated rather than "". + */ + /* BX = radix, CX:AX = value */ + _CX = radix; + if (((int *)&value)[1] == 0) + goto lta_shortLoop; + +lta_longLoop: + do { + _AX = ((int *)&value)[1]; + __emit__(0x33,0xD2); /* xor dx,dx */ + __emit__(0xF7,0xF1); /* div cx */ + p[1] = _AX; + _AX = ((int *)&value)[0]; + __emit__(0xF7,0xF1); /* div cx */ + p[0] = _AX; + *si++ = _DL; + } while (p[1] != 0); /* value does not fit in 16 bits */ + goto lta_shortTest; + +lta_shortLoop: + do { + _AX = ((int *)&value)[0]; + __emit__(0x33,0xD2); /* xor dx,dx */ + __emit__(0xF7,0xF1); /* div cx */ + p[0] = _AX; + *si++ = _DL; +lta_shortTest: ; + } while (p[0] != 0); + /* The value has now been reduced to zero and the + * digits are in the buffer. + */ + _CX = si-buf; /* CX = length of numeral */ + /* The digits in the buffer must now be copied in reverse order into + * the target string, translating to ASCII as they are moved. + */ + while ((int)--_CX >= 0) { + _AL = *--si; + if (_AL < 10) + _AL += '0'; + else _AL += hexStyle; + *di++ = _AL; + } +#else + uint *p = (uint *)&value; + uchar al, cx; + + hexStyle -= 10; + /* If the request is invalid, generate an empty result */ + if (radix > 36 || radix < 2) + goto lta_end; + if (p[1] & 0x8000 && maybeSigned) { + *di++ = '-'; + value = -value; + } + /* Now loop, taking each digit as modulo radix, and reducing the value + * by dividing by radix, until the value is zeroed. Note that + * at least one loop occurs even if the value begins as 0, + * since we want "0" to be generated rather than "". + */ + if (p[1] == 0) + goto lta_shortLoop; + do { + *si++ = (uchar)(value % radix); + value /= radix; + } while (p[1] != 0); /* value does not fit in 16 bits */ + goto lta_shortTest; + +lta_shortLoop: + do { + *si++ = (uchar)((uint)value % radix); + p[0] = ((uint)value / radix); +lta_shortTest: ; + } while (p[0] != 0); + /* The value has now been reduced to zero and the + * digits are in the buffer. + */ + cx = (uchar)(si-buf); /* length of numeral */ + /* The digits in the buffer must now be copied in reverse order into + * the target string, translating to ASCII as they are moved. + */ + while (cx != 0) { + al = *--si; + if (al < 10) + al += '0'; + else al += hexStyle; + *di++ = al; + --cx; + } +#endif + /* terminate the output string with a zero. */ +lta_end: + *di = 0; + return strP; /* return a pointer to the string */ +} +/*#pragma warn .use*/ + +/* +Name itoa - converts an integer to a string + ltoa - converts a long to a string + ultoa - converts an unsigned long to a string + +Usage char *itoa(int value, char *strP, int radix); + char *ltoa(long value, char *strP, int radix); + char *ultoa(unsigned long value, char *strP, int radix); + +Prototype in stdlib.h + +Description These functions convert value to a null-terminated string + and store the result in string. With itoa, value is an + integer; with ltoa it is a long; with ultoa it is an + unsigned long. __longtoa is the internal routine used for + all these conversions to ASCII. + + radix specifies the base to be used in converting value. it + must be between 2 and 36 (inclusive). With itoa and ltoa, + if value is negative, and radix is 10, the first character + of string is the minus sign (-). This does not occur with + ultoa. Also, ultoa performs no overflow checking. + + maybeSigned is treated as a boolean. If false then value is + treated as unsigned long and no sign will be placed in + *strP. + + hexStyle may take the values 'a' or 'A' and determines + whether lower or upper case alphabetics are used when the + radix is 11 or greater. + + Note: The space allocated for string must be large enough + to hold the returned string including the terminating null + character (\0). itoa can return up to 17 bytes; ltoa and + ultoa, up to 33 bytes. + +Return value All these functions return a pointer to string. There is no + error return. +*/ +char *itoa(value, strP, radix) + int value; + char *strP; + int radix; +{ + char hex = 'A'; + + if (radix < 0) { + hex = 'a'; + radix = -radix; + } + return __longtoa ((radix == 10) ? (long) value : + (unsigned long)((unsigned)value), + strP, radix, 1, hex); +} +#endif + diff --git a/src/nos/crt/liberror.src b/src/nos/crt/liberror.src new file mode 100644 index 00000000..15f7460b --- /dev/null +++ b/src/nos/crt/liberror.src @@ -0,0 +1,42 @@ +1 Operation not permitted +2 No such file or directory +3 No such process +4 Interrupted system call +5 I/O error +6 No such device or address +7 Arg list too long +8 Exec format error +9 Bad file number +10 No child processes +11 Try again +12 Out of memory +13 Permission denied +14 Bad address +15 Block device required +16 Device or resource busy +17 File exists +18 Cross-device link +19 No such device +20 Not a directory +21 Is a directory +22 Invalid argument +23 File table overflow +24 Too many open files +25 Not a typewriter +26 Text file busy +27 File too large +28 No space left on device +29 Illegal seek +30 Read-only file system +31 Too many links +32 Broken pipe +33 Math argument out of domain of func +34 Math result not representable +35 Resource deadlock would occur +36 File name too long +37 No record locks available +38 Function not implemented +39 Directory not empty +40 Too many symbolic links encountered +41 It's a shell script + \ No newline at end of file diff --git a/src/nos/crt/localtim.c b/src/nos/crt/localtim.c new file mode 100644 index 00000000..10736c29 --- /dev/null +++ b/src/nos/crt/localtim.c @@ -0,0 +1,14 @@ +/*************************** LOCALTIME ************************************/ +#include "time-l.h" + +#ifdef L_localtim +struct tm *localtime(timep) + time_t *timep; +{ + static struct tm tmb; + + __tm_conv(&tmb, timep, 0); + return &tmb; +} +#endif + diff --git a/src/nos/crt/longjmpb.S b/src/nos/crt/longjmpb.S new file mode 100644 index 00000000..a5eac1c3 --- /dev/null +++ b/src/nos/crt/longjmpb.S @@ -0,0 +1,104 @@ +; longjmpb.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module _longjmpb + + .if 1 ; virtual memory + extrn leave_entry + .else + extrn ?BANK_FAST_LEAVE_L08 + .endif + +#include "z80/asm.h" + +; ----------------------------------------------------------------------------- + + rseg CODE + + public _longjmp +_longjmp: + .if 1 + ld a,b + or c + jr nz,ok_return + inc bc +ok_return: + ex de,hl + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ex de,hl + ; need to disable interrupts here for proper bank switching + ld sp,hl + ex de,hl + .if 1 ; virtual memory + ld e,(hl) + inc hl + ld d,(hl) ; de = BBR_REFERENCE at time of setjmp + inc hl + ex de,hl + ld a,(hl) + ; note: this won't work if the BBR value is actually being changed + out0 (BBR),a + inc hl + ld a,(hl) + ; note: this won't work if the CBAR value is actually being changed + out0 (CBAR),a + ex de,hl + .endif + push bc ; bc = integer value passed to longjmp + ld c,(hl) + inc hl + ld b,(hl) ; bc = bc value at time of setjmp + inc hl + ld e,(hl) + inc hl + ld d,(hl) + inc hl + push de + pop ix + ld e,(hl) + inc hl + ld d,(hl) + inc hl + push de + pop iy + ld e,(hl) + inc hl + ld d,(hl) ; de = return addr from call to setjmp + inc hl + .if 1 ; virtual memory + ex de,hl ; hl = return addr from call to setjmp + ex (sp),hl ; hl = integer value passed to longjmp + push hl ; stack them both in correct order + ex de,hl + ld e,(hl) + inc hl + ld d,(hl) + ex de,hl ; hl = CBR_REFERENCE at time of setjmp + jp leave_entry ; ?BANK_FAST_LEAVE_L08 ex (sp),hl skip + .else + ld a,(hl) + pop hl + push de + push af + jp ?BANK_FAST_LEAVE_L08 + .endif + .else + defb 078h,0B1h,020h,001h,003h,0EBh,05Eh + defb 023h,056h,023h,0EBh,0F9h,0EBh,0C5h + defb 04Eh,023h,046h,023h,05Eh,023h,056h + defb 023h,0D5h,0DDh,0E1h,05Eh,023h,056h + defb 023h,0D5h,0FDh,0E1h,05Eh,023h,056h + defb 023h,07Eh,0E1h,0D5h,0F5h,0C3h + defw LWRD ?BANK_FAST_LEAVE_L08 + .endif + + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/crt/longjmpl.S b/src/nos/crt/longjmpl.S new file mode 100644 index 00000000..e32d6e69 --- /dev/null +++ b/src/nos/crt/longjmpl.S @@ -0,0 +1,19 @@ +; longjmpl.asm +; Nick's reverse engineered subset of the IAR large 'C' library + +; ----------------------------------------------------------------------------- + + module _longjmpl + rseg CODE + public _longjmp +_longjmp: defb 078h,0B1h,020h,001h,003h,0EBh,05Eh + defb 023h,056h,023h,0EBh,0F9h,0EBh,0C5h + defb 04Eh,023h,046h,023h,05Eh,023h,056h + defb 023h,0D5h,0DDh,0E1h,05Eh,023h,056h + defb 023h,0D5h,0FDh,0E1h,05Eh,023h,056h + defb 0E1h,0D5h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + END diff --git a/src/nos/crt/lsearch.c b/src/nos/crt/lsearch.c new file mode 100644 index 00000000..520e399e --- /dev/null +++ b/src/nos/crt/lsearch.c @@ -0,0 +1,39 @@ +/* lsearch.c + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + */ +#include +#include + +void *lfind(key, base, num, size, cmp) + register void *key, *base; + size_t *num; + register size_t size; + register cmp_func_t cmp; +{ + register int n = *num; + + while (n--) { + if ((*cmp) (base, key) == 0) + return (base); + base = (char *)base + size; + } + return (NULL); +} + +void *lsearch(key, base, num, size, cmp) + void *key, *base; + register size_t *num; + register size_t size; + cmp_func_t cmp; +{ + register void *p; + + if ((p = lfind(key, base, num, size, cmp)) == NULL) { + p = memcpy(((char *)base + (size * (*num))), key, size); + ++(*num); + } + return (p); +} + diff --git a/src/nos/crt/lseek.c$ b/src/nos/crt/lseek.c$ new file mode 100644 index 00000000..1e1f4236 --- /dev/null +++ b/src/nos/crt/lseek.c$ @@ -0,0 +1,32 @@ +/* lseek.c added by Nick from UZI280 libc, as we only have seek() in UZI180 */ + +#include + +long +lseek(f, offset, mode) +FILE *f; +long offset; +int mode; +{ + unsigned pos1,pos2; + +/* the following test must be done because the kernel + can't handle negative offsets */ + if (offset < 0L) + return -1L; + +/** + pos2 = offset / 512L; + pos1 = offset % 512L; + we use a faster version +**/ + pos2 = offset >> 9L; + pos1 = offset & 511L; + +/* CAUTION the seek calls must be in this order */ + pos1 = seek(f , pos1 , mode); /* byte seek */ + pos2 = seek(f , pos2, mode + 3); /* block seek */ + + return( ((long)pos2 << 9L) + (long)pos1); +} + diff --git a/src/nos/crt/lstat.c b/src/nos/crt/lstat.c new file mode 100644 index 00000000..85be0528 --- /dev/null +++ b/src/nos/crt/lstat.c @@ -0,0 +1,21 @@ +/* lstat.c lstat implementation for UZIX + */ +#include +#include +#include + +int lstat(name, buf) + char *name; + void *buf; +{ + int sts, fd = open(name, O_SYMLINK); + + if (fd < 0) + sts = stat(name, buf); + else { + sts = fstat(fd, buf); + close(fd); + } + return sts; +} + \ No newline at end of file diff --git a/src/nos/crt/ltoa.c b/src/nos/crt/ltoa.c new file mode 100644 index 00000000..11c5527e --- /dev/null +++ b/src/nos/crt/ltoa.c @@ -0,0 +1,22 @@ +/* numeric/string conversions package + */ + +#include "cvt.h" + +/**************************** ltoa.c ****************************/ +#ifdef L_ltoa +char *ltoa(value, strP, radix) + long value; + char *strP; + int radix; +{ + char hex = 'A'; + + if (radix < 0) { + hex = 'a'; + radix = -radix; + } + return __longtoa (value, strP, radix, (radix == 10), hex); +} +#endif + diff --git a/src/nos/crt/ltostr.c b/src/nos/crt/ltostr.c new file mode 100644 index 00000000..db430c5c --- /dev/null +++ b/src/nos/crt/ltostr.c @@ -0,0 +1,24 @@ +/* numeric/string conversions package + */ + +#include "cvt.h" + +/**************************** ltostr.c ****************************/ +#ifdef L_ltostr +static char buf[34]; /* max len for radix == 2 */ + +char *ultostr(val, radix) + unsigned long val; + int radix; +{ + return ultoa(val,buf,radix); +} + +char *ltostr(val, radix) + long val; + int radix; +{ + return ltoa(val,buf,radix); +} +#endif + diff --git a/src/nos/crt/malloc-l.h b/src/nos/crt/malloc-l.h new file mode 100644 index 00000000..389cc7d5 --- /dev/null +++ b/src/nos/crt/malloc-l.h @@ -0,0 +1,33 @@ +/* malloc-l.h */ +/* Copyright (C) 1984 by Manx Software Systems */ + +/* #define MALLOC_DEBUG */ + +#ifdef MALLOC_DEBUG +#include +#include "global.h" +/*typedef unsigned int size_t;*/ +int sbrk(unsigned int incr); +#else +#include /* Nick, for size_t */ +#include /* Nick, for sbrk() */ +#endif + +typedef struct freelist { + size_t f_size; + struct freelist *f_chain; +} FREE; + +#define NULL (FREE *)0 +#define GRAIN 1024 + +void *realloc(void *area, size_t size); +void *malloc(size_t size); +void free(void *area); + +extern FREE __malloc_head, *__malloc_last; + +/* trick to get the effect of "static FREE head, *last" over multiple files */ +#define head __malloc_head +#define last __malloc_last + diff --git a/src/nos/crt/malloc-l.h$ b/src/nos/crt/malloc-l.h$ new file mode 100644 index 00000000..b4535d8a --- /dev/null +++ b/src/nos/crt/malloc-l.h$ @@ -0,0 +1,53 @@ +/* Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + * + * This is a combined alloca/malloc package. It uses a classic algorithm + * and so may be seen to be quite slow compared to more modern routines + * with 'nasty' distributions. + */ +#include +#include +#include +#include +#include + +#define __MINI_MALLOC__ + +#define MCHUNK 512 /* Allocation unit in 'mem' elements */ +/*#define LAZY_FREE /* If set frees can be infinitly defered */ +/*#define MINALLOC 32 /* Smallest chunk to alloc in 'mem's */ +#define VERBOSE /* Lots of noise, debuging ? */ + +#ifdef MAKE_ALL +#define L_malloc +#define L_free +#define L_alloca +#define L_calloc +#define L_realloc +#endif + +#undef malloc +#define MAX_INT ((int)(((unsigned)-1)>>1)) + +#ifdef VERBOSE +#define noise __noise +#else +#define noise(y,x) +#endif + +typedef struct mem_cell { + struct mem_cell *next; /* A pointer to the next mem */ + unsigned int size; /* An int >= sizeof pointer */ + char *depth; /* For the alloca hack */ +} mem; + +#define m_size(p) ((p)[0].size) /* For malloc */ +#define m_next(p) ((p)[0].next) /* For malloc and alloca */ +#define m_deep(p) ((p)[0].depth) /* For alloca */ +#define m_add(x,y) (mem *)((uchar *)x + y) /* Sum mem* with y bytes */ + +extern void *__mini_malloc __P((size_t)); +extern void *(*__alloca_alloc) __P((size_t)); +extern mem *__freed_list; + diff --git a/src/nos/crt/malloc.c b/src/nos/crt/malloc.c new file mode 100644 index 00000000..d4491d7f --- /dev/null +++ b/src/nos/crt/malloc.c @@ -0,0 +1,73 @@ +/* malloc.c */ +/* Copyright (C) 1984 by Manx Software Systems */ + +#include "malloc-l.h" + +/*static*/ FREE head, *last; /* see #defines in malloc-l.h */ + +void *malloc(size_t size) +{ + register FREE *tp, *prev; + size_t units; + +#ifdef MALLOC_DEBUG + amess("malloc(0x"); + ahexw(size); + amess(") starting"); + acrlf(); + /* printf("malloc(0x%x) starting\n", size); */ + /* fflush(stdout); */ +#endif + + units = (size+sizeof(FREE)-1)/sizeof(FREE) + 1; + if ((prev = last) == NULL) + last = head.f_chain = prev = &head; + + for (tp = prev->f_chain ; ; prev = tp, tp = tp->f_chain) { + while (tp != tp->f_chain && tp+tp->f_size == tp->f_chain) { + if (last == tp->f_chain) + last = tp->f_chain->f_chain; + tp->f_size += tp->f_chain->f_size; + tp->f_chain = tp->f_chain->f_chain; + } + + if (tp->f_size >= units) { + if (tp->f_size == units) + prev->f_chain = tp->f_chain; + else { + last = tp + units; + prev->f_chain = last; + last->f_chain = tp->f_chain; + last->f_size = tp->f_size - units; + tp->f_size = units; + } + last = prev; + tp->f_chain = NULL; +#ifdef MALLOC_DEBUG + amess("malloc() returning 0x"); + ahexw((unsigned int)(tp+1)); + acrlf(); + /* printf("malloc() returning 0x%x\n", tp+1); */ + /* fflush(stdout); */ +#endif + return (char *)(tp+1); + } + if (tp == last) { + if ((tp = (FREE *)sbrk(GRAIN)) == (FREE *)-1) + { +#ifdef MALLOC_DEBUG + amess("malloc() returning NULL"); + acrlf(); + /* printf("malloc() returning NULL\n"); */ + /* fflush(stdout); */ +#endif + return (char *)NULL; + } + tp->f_size = GRAIN/sizeof(FREE); + tp->f_chain = NULL; + free(tp+1); + tp = last; + } + } +} + diff --git a/src/nos/crt/malloc.c$ b/src/nos/crt/malloc.c$ new file mode 100644 index 00000000..9e4cf0b8 --- /dev/null +++ b/src/nos/crt/malloc.c$ @@ -0,0 +1,305 @@ +/* Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + * + * This is a combined alloca/malloc package. It uses a classic algorithm + * and so may be seen to be quite slow compared to more modern routines + * with 'nasty' distributions. + */ + +#include "malloc-l.h" + +#if 0 /* Nick, see free.c */ +#undef noise +#define noise __noise +#define VERBOSE /* Nick silly */ +#endif + +#ifdef VERBOSE /* Nick, see free.c */ +/* NB: Careful here, stdio may use malloc - so we can't */ +#include +#include +#include + +static void pstr __P((char *)); +static void phex __P((unsigned)); +static void noise __P((char *, mem *)); + +static void pstr(str) + char *str; +{ + write(2, str, strlen(str)); +} + +static void phex(val) + unsigned val; +{ + char buf[8]; + + strcpy(buf,"000"); + ltoa((long)val,buf+3,16); + pstr(buf+strlen(buf+4)); +} + +void __noise(y, x) + char *y; + mem *x; +{ + pstr("Malloc "); phex((unsigned)x); + pstr(" sz "); phex(x ? (unsigned)m_size(x) : 0); + pstr(" nxt "); phex(x ? (unsigned)m_next(x) : 0); + pstr(" is "); pstr(y); pstr("\n"); +} +#endif + +#ifdef L_malloc +/* The chunk_list pointer is either NULL or points to a chunk in a + * circular list of all the free blocks in memory + */ + +#define Static static + +static mem *chunk_list = 0; +Static mem *__search_chunk __P((unsigned)); +Static void __insert_chunk __P((mem *)); + +void *malloc(size) + size_t size; +{ + register unsigned sz; + register mem *ptr = 0; + + if (size == 0) + return 0; /* ANSI STD */ + sz = size + sizeof(struct mem_cell); +#ifdef MINALLOC + if (sz < MINALLOC) + sz = MINALLOC; +#endif +#ifdef VERBOSE + { + static mem arr[2]; + + m_size(arr) = sz; + noise("WANTED", arr); + } +#endif + __alloca_alloc = malloc;/* We'll be messing with the heap now TVM */ +#ifdef LAZY_FREE + ptr = __search_chunk(sz); + if (ptr == 0) { +#endif + /* First deal with the freed list */ + if (__freed_list) { + while (__freed_list) { + ptr = __freed_list; + __freed_list = m_next(__freed_list); + if (m_size(ptr) == sz) { + /* Oh! Well that's lucky ain't it :-) */ + noise("LUCKY MALLOC", ptr); + return ptr + 1; + } + __insert_chunk(ptr); + } + ptr = m_next(chunk_list); + if (ptr + m_size(ptr) >= (void *) sbrk(0)) { + /* Time to free for real */ + m_next(chunk_list) = m_next(ptr); + if (ptr == m_next(ptr)) + chunk_list = 0; + free(ptr + 1); + } +#ifdef LAZY_FREE + ptr = __search_chunk(sz); +#endif + } +#ifndef LAZY_FREE + ptr = __search_chunk(sz); +#endif + if (ptr == 0) { +#ifdef MCHUNK + unsigned int alloc = + (MCHUNK * ((sz + MCHUNK - 1) / MCHUNK) - 1); + + if ((ptr = __mini_malloc(alloc)) != NULL) + __insert_chunk(ptr - 1); + else { /* Oooo, near end of RAM */ + unsigned int needed = alloc; + alloc /= 2; + while (alloc > 256 && needed) { + ptr = __mini_malloc(alloc); + if (ptr) { + if (alloc > needed) + needed = 0; + else needed -= alloc; + __insert_chunk(ptr - 1); + } + else alloc /= 2; + } + } + ptr = __search_chunk(sz); + if (ptr == 0) +#endif + { +#ifndef MCHUNK + ptr = __mini_malloc(size); +#endif +#ifdef VERBOSE + if (ptr == 0) + noise("MALLOC FAIL", 0); + else noise("MALLOC NOW", ptr - 1); +#endif + return ptr; + } + } +#ifdef LAZY_FREE + } +#endif +#ifdef VERBOSE + ptr[1].size = 0x5555; +#endif + noise("MALLOC RET\n", ptr); + return ptr + 1; +} + +/* This function takes a pointer to a block of memory and inserts it into + * the chain of memory chunks + */ +Static void __insert_chunk(mem_chunk) + mem *mem_chunk; +{ + register mem *p1, *p2; + + if (chunk_list == 0) { /* Simple case first */ + m_next(mem_chunk) = chunk_list = mem_chunk; + noise("FIRST CHUNK", mem_chunk); + return; + } + p1 = mem_chunk; + p2 = chunk_list; + do { + if (p1 > p2) { + /* We're at the top of the chain, p1 is higher */ + if (m_next(p2) <= p2) { + if (m_add(p2, m_size(p2)) == p1) { + /* Good, stick 'em together */ + noise("INSERT CHUNK", mem_chunk); + m_size(p2) += m_size(p1); + noise("JOIN 1", p2); + } + else { + m_next(p1) = m_next(p2); + m_next(p2) = p1; + noise("INSERT CHUNK", mem_chunk); + noise("FROM", p2); + } + return; + } + if (m_next(p2) > p1) { + /* In chain, p1 between p2 and next */ + m_next(p1) = m_next(p2); + m_next(p2) = p1; + noise("INSERT CHUNK", mem_chunk); + noise("FROM", p2); + + /* Try to join above */ + if (m_add(p1, m_size(p1)) == m_next(p1)) { + m_size(p1) += m_size(m_next(p1)); + m_next(p1) = m_next(m_next(p1)); + noise("JOIN 2", p1); + } + /* Try to join below */ + if (m_add(p2, m_size(p2)) == p1) { + m_size(p2) += m_size(p1); + m_next(p2) = m_next(p1); + noise("JOIN 3", p2); + } + chunk_list = p2; /* Make sure it's valid */ + return; + } + } + else if (p1 < p2) { + if (m_next(p2) <= p2 && p1 < m_next(p2)) { + /* At top of chain, next is bottom of chain, + * p1 is below next + */ + m_next(p1) = m_next(p2); + m_next(p2) = p1; + noise("INSERT CHUNK", mem_chunk); + noise("FROM", p2); + chunk_list = p2; + if (m_add(p1, m_size(p1)) == m_next(p1)) { + if (p2 == m_next(p1)) + chunk_list = p1; + m_size(p1) += m_size(m_next(p1)); + m_next(p1) = m_next(m_next(p1)); + noise("JOIN 4", p1); + } + return; + } + } + chunk_list = p2; /* Save for search */ + p2 = m_next(p2); + } while (p2 != chunk_list); + /* If we get here we have a problem, ignore it, maybe it'll go away */ + noise("DROPPED CHUNK", mem_chunk); +} + +/* This function will search for a chunk in memory of at least 'mem_size' + * when found, if the chunk is too big it'll be split, and pointer to the + * chunk returned. If none is found NULL is returned. + */ +Static mem *__search_chunk(mem_size) + unsigned mem_size; +{ + register mem *p1, *p2; + + if (chunk_list == 0) /* Simple case first */ + return 0; + /* Search for a block >= the size we want */ + p1 = m_next(chunk_list); + p2 = chunk_list; + do { + noise("CHECKED", p1); + _abyte('a'); + if (m_size(p1) >= mem_size) + break; + _abyte('b'); + p2 = p1; + p1 = m_next(p1); + } while (p2 != chunk_list); + _abyte('c'); + /* None found, exit */ + if (m_size(p1) < mem_size) + return 0; + _abyte('d'); + /* If it's exactly right remove it */ + if (m_size(p1) < mem_size + 2) { + _abyte('e'); + noise("FOUND RIGHT", p1); + chunk_list = m_next(p2) = m_next(p1); + if (chunk_list == p1) + chunk_list = 0; + return p1; + } + _abyte('f'); + noise("SPLIT", p1); + /* Otherwise split it */ + m_next(p2) = m_add(p1, mem_size); + chunk_list = p2; + p2 = m_next(p2); + m_size(p2) = m_size(p1) - mem_size; + m_next(p2) = m_next(p1); + m_size(p1) = mem_size; + if (chunk_list == p1) + chunk_list = p2; +#ifdef VERBOSE + p1[1].size = 0xAAAA; +#endif + noise("INSERT CHUNK", p2); + noise("FOUND CHUNK", p1); + noise("LIST IS", chunk_list); + return p1; +} +#endif /* L_malloc */ + diff --git a/src/nos/crt/mem-l.h b/src/nos/crt/mem-l.h new file mode 100644 index 00000000..e895f133 --- /dev/null +++ b/src/nos/crt/mem-l.h @@ -0,0 +1,16 @@ +/* mem.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ +#include + +#ifdef MAKE_ALL +#define L_memcpy +#define L_memccpy +#define L_memchr +#define L_memset +#define L_memcmp +#define L_memmove +#endif + \ No newline at end of file diff --git a/src/nos/crt/memccpy.c b/src/nos/crt/memccpy.c new file mode 100644 index 00000000..72d55520 --- /dev/null +++ b/src/nos/crt/memccpy.c @@ -0,0 +1,27 @@ +/* memccpy.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "mem-l.h" + +/********************** Function memccpy ************************************/ +#ifdef L_memccpy +void *memccpy(d, s, c, l) /* Do we need a fast one ? */ + const void *s; /* Nick */ + void *d; + int c; + size_t l; +{ + register char *s1 = d; + register const char *s2 = s; /* Nick */ + + while (l-- != 0) { + if ((*s1++ = *s2++) == c) + return s1; + } + return NULL; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/memchr.c b/src/nos/crt/memchr.c new file mode 100644 index 00000000..b7644767 --- /dev/null +++ b/src/nos/crt/memchr.c @@ -0,0 +1,26 @@ +/* memchr.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "mem-l.h" + +/********************** Function memchr ************************************/ +#ifdef L_memchr +void *memchr(str, c, l) + const void *str; /* Nick */ + int c; + size_t l; +{ + register const char *p = (char *) str; /* Nick */ + + while (l-- != 0) { + if (*p == c) + return (void *)p; /* Nick */ + p++; + } + return NULL; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/memcmp.c b/src/nos/crt/memcmp.c new file mode 100644 index 00000000..9556a8fa --- /dev/null +++ b/src/nos/crt/memcmp.c @@ -0,0 +1,67 @@ +/* memcmp.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "mem-l.h" + +/********************** Function memcmp ************************************/ +#ifdef L_memcmp +int memcmp(s, d, l) + const void *s; /* Nick */ + const void *d; /* Nick */ + size_t l; +{ +#ifdef HI_TECH_C +_asm + ; d = BC, s=DE, l=(ix+4, ix+5) + ld ix,0 + add ix,sp + push iy + ld l,(ix+4) + ld h,(ix+5) + ex de,hl ; HL=s, DE=l + push bc + pop iy ; IY=d + ld bc,0 ; char1, char2 +1: ld a,(hl) + ld b,a + ld a,(iy) ; char1 != char 2 ? + ld c,a + cp b + jr nz,2f + inc hl ; s++ + inc iy ; d++ + dec de ; l-- + ld a,d + or e + jp nz,1b ; l != 0, continue +2: ld a,c ; char1 - char2 + ld e,a + rla + sbc a,a + ld d,a + ld a,b + ld l,b + rla + sbc a,a + ld h,a + or a + sbc hl,de + pop iy +_endasm +#else + register const char *s1 = d; /* Nick */ + register const char *s2 = s; /* Nick */ + register char c1 = 0, c2 = 0; + + while (l-- != 0) { + if ((c1 = *s1++) != (c2 = *s2++)) + break; + } + return c1 - c2; +#endif +} +#endif + diff --git a/src/nos/crt/memcpy.c b/src/nos/crt/memcpy.c new file mode 100644 index 00000000..f180bc8e --- /dev/null +++ b/src/nos/crt/memcpy.c @@ -0,0 +1,44 @@ +/* memcpy.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "mem-l.h" + +/********************** Function memcpy ************************************/ +#ifdef L_memcpy +void *memcpy(d, s, l) + void *d; + const void *s; /* Nick */ + size_t l; +{ +#ifndef HI_TECH_C + register char *s1 = d; + register const char *s2 = (char *) s; /* Nick */ + + while (l-- != 0) + *((unsigned char *) s1++) = *((unsigned char *) s2++); + return d; +#else +_asm + ; HTC puts a "push ix" here + ld ix,0 + add ix,sp + ld h,b + ld l,c + ld c,(ix+4) + ld b,(ix+5) + push de + ld a,b + or c + jr z,_skip + ldir +_skip: + pop hl + ; HTC puts a "pop ix" here +_endasm +#endif +} +#endif + diff --git a/src/nos/crt/memmove.c b/src/nos/crt/memmove.c new file mode 100644 index 00000000..65f6f975 --- /dev/null +++ b/src/nos/crt/memmove.c @@ -0,0 +1,78 @@ +/* memmove.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "mem-l.h" + +/********************** Function memmove ************************************/ +#ifdef L_memmove +void *memmove(d, s, l) + void *d; + const void *s; /* Nick */ + size_t l; +{ +#ifdef HI_TECH_C +_asm + global _memcpy +;_s stored from bc +;_d stored from de + ld ix,0 + add ix,sp + push de ; saves d + push bc + push de + push de + pop hl ; HL = d + or a + sbc hl,bc ; d = d - s + ld e,(ix+4) + ld d,(ix+5) + or a + sbc hl,de ; d = d -l + jr c, 2f + ; d-s >=l -> memcpy + pop de ; d + pop bc ; s + ld l,(ix+4) ; l + ld h,(ix+5) + push hl + call _memcpy + jr 1f +2: ; s=s+l, d=d+l, lddr + xor a + pop hl + dec hl + add hl,de ; d=d+l + pop bc + push hl + ld h,b ; HL=s + ld l,c + dec hl + add hl,de ; s=s+l + ld b,d + ld c,e ; BC=l + pop de ; DE=d + lddr +1: pop hl ; d +_endasm +#else + register char *s1 = d; + register const char *s2 = s; /* Nick */ + + /* This bit of sneakyness c/o Glibc, + * it assumes the test is unsigned + */ + if (s1 - s2 >= l) + return memcpy(d, s, l); + /* This reverse copy only used if we absolutly have to */ + s1 += l; + s2 += l; + while (l-- != 0) + *(--s1) = *(--s2); + return d; +#endif +} +#endif + diff --git a/src/nos/crt/memset.c b/src/nos/crt/memset.c new file mode 100644 index 00000000..536089a1 --- /dev/null +++ b/src/nos/crt/memset.c @@ -0,0 +1,51 @@ +/* memset.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "mem-l.h" + +/********************** Function memset ************************************/ +#ifdef L_memset +void *memset(str, c, l) + void *str; + int c; + size_t l; +{ +#ifndef HI_TECH_C + register char *s1 = str; + + while (l-- != 0) + *s1++ = c; + return str; +#else +_asm + ld ix,0 + add ix,sp + ld h,d + ld l,e ; HL=str + ld d,c ; D=c + ld c,(ix+4) + ld b,(ix+5); BC=l + ld a,b + or c ; l=0? so return + jr z,_retw + ld a,d + ld (hl),a ; fill first byte + ld d,h + ld e,l + inc de ; DE=str+1 + dec bc + ld a,b ; l=1? so return + or c + jr z,_retw + push hl + ldir + pop hl +_retw: +_endasm +#endif +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/mkdir.c b/src/nos/crt/mkdir.c new file mode 100644 index 00000000..12c6ac13 --- /dev/null +++ b/src/nos/crt/mkdir.c @@ -0,0 +1,12 @@ +/* mkdir.c + */ +#include +#include + +int mkdir(path, mode) + char *path; + mode_t mode; +{ + return mknod(path, S_IFDIR | (mode & S_UMASK), 0); +} + diff --git a/src/nos/crt/mktime.c b/src/nos/crt/mktime.c new file mode 100644 index 00000000..b5362082 --- /dev/null +++ b/src/nos/crt/mktime.c @@ -0,0 +1,18 @@ +/*************************** MKTIME ************************************/ +#include "time-l.h" + +#ifdef L_mktime +time_t mktime (__tp) + struct tm *__tp; +{ + dostime_t tt; + + tt.t_time = (((int)__tp->tm_hour << 8) << 3) | + ((int)__tp->tm_min << 5) | + ((int)__tp->tm_sec >> 1); + tt.t_date = (((int)(__tp->tm_year - 80) << 8) << 1) | + ((int)(__tp->tm_mon+1) << 5) | __tp->tm_mday; + return *(time_t *)&tt; +} +#endif + diff --git a/src/nos/crt/n.bat b/src/nos/crt/n.bat new file mode 100644 index 00000000..fda184d3 --- /dev/null +++ b/src/nos/crt/n.bat @@ -0,0 +1,12 @@ +md build-l +cd build-l +copy ..\build-l.ban n.bat +call n +cd .. + +md build-b +cd build-b +copy ..\build-b.ban n.bat +call n +cd .. + diff --git a/src/nos/crt/n.baty b/src/nos/crt/n.baty new file mode 100644 index 00000000..fda184d3 --- /dev/null +++ b/src/nos/crt/n.baty @@ -0,0 +1,12 @@ +md build-l +cd build-l +copy ..\build-l.ban n.bat +call n +cd .. + +md build-b +cd build-b +copy ..\build-b.ban n.bat +call n +cd .. + diff --git a/src/nos/crt/n.xlb b/src/nos/crt/n.xlb new file mode 100644 index 00000000..5c5c9cc4 --- /dev/null +++ b/src/nos/crt/n.xlb @@ -0,0 +1,142 @@ +on-error-exit +fetch-modules abort.r01 libc.r01 +fetch-modules alloca.r01 libc.r01 +fetch-modules asctime.r01 libc.r01 +fetch-modules assert.r01 libc.r01 +fetch-modules atexit.r01 libc.r01 +fetch-modules atoi.r01 libc.r01 +fetch-modules atol.r01 libc.r01 +fetch-modules bsearch.r01 libc.r01 +fetch-modules calloc.r01 libc.r01 +fetch-modules clock.r01 libc.r01 +fetch-modules closedir.r01 libc.r01 +fetch-modules convtime.r01 libc.r01 +fetch-modules crypt.r01 libc.r01 +fetch-modules ctime.r01 libc.r01 +fetch-modules ctype.r01 libc.r01 +fetch-modules difftime.r01 libc.r01 +fetch-modules error.r01 libc.r01 +fetch-modules etime.r01 libc.r01 +fetch-modules execl.r01 libc.r01 +fetch-modules execle.r01 libc.r01 +fetch-modules execlp.r01 libc.r01 +fetch-modules execlpe.r01 libc.r01 +fetch-modules exect.r01 libc.r01 +fetch-modules execv.r01 libc.r01 +fetch-modules execvp.r01 libc.r01 +fetch-modules execvpe.r01 libc.r01 +fetch-modules fclose.r01 libc.r01 +fetch-modules fflush.r01 libc.r01 +fetch-modules fgetc.r01 libc.r01 +fetch-modules fgetgren.r01 libc.r01 +fetch-modules fgetpwen.r01 libc.r01 +fetch-modules fgets.r01 libc.r01 +fetch-modules fopen.r01 libc.r01 +fetch-modules fprintf.r01 libc.r01 +fetch-modules fputc.r01 libc.r01 +fetch-modules fputs.r01 libc.r01 +fetch-modules fread.r01 libc.r01 +fetch-modules free.r01 libc.r01 +fetch-modules fscanf.r01 libc.r01 +fetch-modules ftell.r01 libc.r01 +fetch-modules fwrite.r01 libc.r01 +fetch-modules getcwd.r01 libc.r01 +fetch-modules getenv.r01 libc.r01 +fetch-modules getgrent.r01 libc.r01 +fetch-modules getgrgid.r01 libc.r01 +fetch-modules getgrnam.r01 libc.r01 +fetch-modules getopt.r01 libc.r01 +fetch-modules getpass.r01 libc.r01 +fetch-modules getpw.r01 libc.r01 +fetch-modules getpwent.r01 libc.r01 +fetch-modules getpwnam.r01 libc.r01 +fetch-modules getpwuid.r01 libc.r01 +fetch-modules gets.r01 libc.r01 +fetch-modules gmtime.r01 libc.r01 +fetch-modules initgrup.r01 libc.r01 +fetch-modules isatty.r01 libc.r01 +fetch-modules itoa.r01 libc.r01 +fetch-modules localtim.r01 libc.r01 +fetch-modules lsearch.r01 libc.r01 +fetch-modules lstat.r01 libc.r01 +fetch-modules ltoa.r01 libc.r01 +fetch-modules ltostr.r01 libc.r01 +fetch-modules malloc.r01 libc.r01 +fetch-modules memccpy.r01 libc.r01 +fetch-modules memchr.r01 libc.r01 +fetch-modules memcmp.r01 libc.r01 +fetch-modules memcpy.r01 libc.r01 +fetch-modules memmove.r01 libc.r01 +fetch-modules memset.r01 libc.r01 +fetch-modules mkdir.r01 libc.r01 +fetch-modules mktime.r01 libc.r01 +fetch-modules opendir.r01 libc.r01 +fetch-modules perror.r01 libc.r01 +fetch-modules popen.r01 libc.r01 +fetch-modules printf.r01 libc.r01 +fetch-modules putenv.r01 libc.r01 +fetch-modules putgetch.r01 libc.r01 +fetch-modules putpwent.r01 libc.r01 +fetch-modules qsort.r01 libc.r01 +fetch-modules rand.r01 libc.r01 +fetch-modules readdir.r01 libc.r01 +fetch-modules readlink.r01 libc.r01 +fetch-modules realloc.r01 libc.r01 +fetch-modules regerror.r01 libc.r01 +fetch-modules regexp.r01 libc.r01 +fetch-modules regsub.r01 libc.r01 +fetch-modules rename.r01 libc.r01 +fetch-modules rewind.r01 libc.r01 +fetch-modules rewindir.r01 libc.r01 +fetch-modules rmdir.r01 libc.r01 +fetch-modules scanf.r01 libc.r01 +fetch-modules setbuff.r01 libc.r01 +fetch-modules setenv.r01 libc.r01 +fetch-modules setgrent.r01 libc.r01 +fetch-modules setjmp.r01 libc.r01 +fetch-modules setpwent.r01 libc.r01 +fetch-modules setvbuff.r01 libc.r01 +fetch-modules sleep.r01 libc.r01 +fetch-modules sprintf.r01 libc.r01 +fetch-modules sscanf.r01 libc.r01 +fetch-modules stdio0.r01 libc.r01 +fetch-modules strcat.r01 libc.r01 +fetch-modules strchr.r01 libc.r01 +fetch-modules strcmp.r01 libc.r01 +fetch-modules strcpy.r01 libc.r01 +fetch-modules strcspn.r01 libc.r01 +fetch-modules strdup.r01 libc.r01 +fetch-modules stricmp.r01 libc.r01 +fetch-modules strlen.r01 libc.r01 +fetch-modules strncat.r01 libc.r01 +fetch-modules strncmp.r01 libc.r01 +fetch-modules strncpy.r01 libc.r01 +fetch-modules strnicmp.r01 libc.r01 +fetch-modules strpbrk.r01 libc.r01 +fetch-modules strrchr.r01 libc.r01 +fetch-modules strsep.r01 libc.r01 +fetch-modules strspn.r01 libc.r01 +fetch-modules strstr.r01 libc.r01 +fetch-modules strtod.r01 libc.r01 +fetch-modules strtok.r01 libc.r01 +fetch-modules strtol.r01 libc.r01 +fetch-modules strtoul.r01 libc.r01 +fetch-modules system.r01 libc.r01 +fetch-modules termcap.r01 libc.r01 +fetch-modules tmpnam.r01 libc.r01 +fetch-modules tparam.r01 libc.r01 +fetch-modules ttyname.r01 libc.r01 +fetch-modules tzset.r01 libc.r01 +fetch-modules ultoa.r01 libc.r01 +fetch-modules ungetc.r01 libc.r01 +fetch-modules utsname.r01 libc.r01 +fetch-modules vfprintf.r01 libc.r01 +fetch-modules vfscanf.r01 libc.r01 +fetch-modules vprintf.r01 libc.r01 +fetch-modules vscanf.r01 libc.r01 +fetch-modules vsprintf.r01 libc.r01 +fetch-modules vsscanf.r01 libc.r01 +fetch-modules xitoa.r01 libc.r01 +fetch-modules xltoa.r01 libc.r01 +make-library libc.r01 _abort _xltoa +exit diff --git a/src/nos/crt/opendir.c b/src/nos/crt/opendir.c new file mode 100644 index 00000000..12d482df --- /dev/null +++ b/src/nos/crt/opendir.c @@ -0,0 +1,40 @@ +/* opendir.c opendir implementation + * + */ +#include +#include +#include +#include +#include +#include +#include + +DIR *opendir(path) + char *path; +{ + struct stat statbuf; + register DIR *dir; + + if (stat(path, &statbuf) != 0) + goto Err; + if ((statbuf.st_mode & S_IFDIR) == 0) { + errno = ENOTDIR; + goto Err; + } + if ((dir = (DIR *)calloc(1,sizeof(DIR))) == NULL) { + errno = ENOMEM; + goto Err; + } + if ((dir->dd_buf = calloc(1,sizeof(struct dirent))) == NULL) { + free(dir); + errno = ENOMEM; + goto Err; + } + if ((dir->dd_fd = open(path, O_BINARY)) < 0) { + free(dir->dd_buf); + free(dir); +Err: return NULL; + } + return dir; +} + diff --git a/src/nos/crt/passwd.h b/src/nos/crt/passwd.h new file mode 100644 index 00000000..9b543e1b --- /dev/null +++ b/src/nos/crt/passwd.h @@ -0,0 +1,28 @@ +/* passwd.h + */ + +/* OBS.: getpwuid gets the first password entry that has the given UID. + it DOESN'T look for GID, so entries with different GIDs and + equal UID will be treated as equal +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef MAKE_ALL +#define L_fgetpwen +#define L_getpw +#define L_getpwnam +#define L_getpwuid +#define L_putpwent +#define L_setpwent +#define L_getpwent +#endif + diff --git a/src/nos/crt/perror.asm b/src/nos/crt/perror.asm new file mode 100644 index 00000000..a4460527 --- /dev/null +++ b/src/nos/crt/perror.asm @@ -0,0 +1,132 @@ + ifndef ??version +?debug macro + endm + endif + ?debug S "perror.c" +_TEXT segment byte public 'CODE' +DGROUP group _DATA,_BSS + assume cs:_TEXT,ds:DGROUP,ss:DGROUP +_TEXT ends +_DATA segment word public 'DATA' +d@ label byte +d@w label word +_DATA ends +_BSS segment word public 'BSS' +b@ label byte +b@w label word + ?debug C E9C0137E2D08706572726F722E63 + ?debug C E9CA367E2D122E2E5C696E636C7564655C737464696F2E68 + ?debug C E9CA367E2D122E2E5C696E636C7564655C74797065732E68 + ?debug C E9CA367E2D152E2E5C696E636C7564655C66656174757265732E68 + ?debug C E9E8367E2D162E2E5C696E636C7564655C7379732F63646566732E+ + ?debug C 68 + ?debug C E9CA367E2D132E2E5C696E636C7564655C7374646172672E68 + ?debug C E9CA367E2D132E2E5C696E636C7564655C756E697374642E68 + ?debug C E90832812D152E2E5C696E636C7564655C73797363616C6C732E68 + ?debug C E9CA367E2D132E2E5C696E636C7564655C7369676E616C2E68 + ?debug C E9CA367E2D132E2E5C696E636C7564655C737472696E672E68 + ?debug C E9CA367E2D132E2E5C696E636C7564655C7374646465662E68 + ?debug C E9CA367E2D122E2E5C696E636C7564655C6572726E6F2E68 +_BSS ends +_TEXT segment byte public 'CODE' +; ?debug L 8 +wr2 proc near + push bp + mov bp,sp + push si + push di + mov di,word ptr [bp+4] +; ?debug L 11 + mov si,di + jmp short @2 +@4: +; ?debug L 14 + inc si +@2: +; ?debug L 13 + cmp byte ptr [si],0 + jne @4 +; ?debug L 15 + mov ax,si + sub ax,di + push ax + push di + mov ax,2 + push ax + call near ptr _write + add sp,6 +; ?debug L 16 + pop di + pop si + pop bp + ret +wr2 endp +_TEXT ends +_DATA segment word public 'DATA' +_DATA ends +_TEXT segment byte public 'CODE' +; ?debug L 18 +_perror proc near + push bp + mov bp,sp + push si + mov si,word ptr [bp+4] +; ?debug L 21 + or si,si + jne @6 +; ?debug L 22 + mov si,offset DGROUP:s@ +@6: +; ?debug L 23 + push si + call near ptr wr2 + pop cx +; ?debug L 24 + mov ax,offset DGROUP:s@+6 + push ax + call near ptr wr2 + pop cx +; ?debug L 25 + push word ptr DGROUP:_errno + call near ptr _strerror + pop cx + mov si,ax +; ?debug L 26 + push si + call near ptr wr2 + pop cx +; ?debug L 27 + mov ax,offset DGROUP:s@+9 + push ax + call near ptr wr2 + pop cx +; ?debug L 28 + pop si + pop bp + ret +_perror endp +_TEXT ends + ?debug C E9 +_DATA segment word public 'DATA' +s@ label byte + db 101 + db 114 + db 114 + db 111 + db 114 + db 0 + db 58 + db 32 + db 0 + db 10 + db 0 +_DATA ends + extrn _errno:word +_TEXT segment byte public 'CODE' + extrn _strerror:near + extrn _write:near +_TEXT ends + public _perror +_wr2 equ wr2 + end + \ No newline at end of file diff --git a/src/nos/crt/perror.c b/src/nos/crt/perror.c new file mode 100644 index 00000000..a912374b --- /dev/null +++ b/src/nos/crt/perror.c @@ -0,0 +1,29 @@ +/* perror.c + */ +#include +#include +#include +#include + +static void wr2(str) + char *str; +{ + char *p = str; + + while (*p) + ++p; + write(2, str, (unsigned int)(p-str)); +} + +void perror(str) + register char *str; +{ + if (!str) + str = "error"; + wr2(str); + wr2(": "); + str = strerror(errno); + wr2(str); + wr2("\n"); +} + \ No newline at end of file diff --git a/src/nos/crt/popen.c b/src/nos/crt/popen.c new file mode 100644 index 00000000..55761cec --- /dev/null +++ b/src/nos/crt/popen.c @@ -0,0 +1,52 @@ +/* popen.c pipes implemetation + */ +#include +#include +#include +#include +#include + +FILE *popen(command, rw) + char *command; + char *rw; +{ + int pipe_fd[2]; /* 0=reading, 1=writing */ + int pid, reading, notreading; + static char *argv[4] = { "sh", "-c", 0, 0 }; + + if (pipe(pipe_fd) < 0) + return NULL; + reading = (rw[0] == 'r'); /* 0 or 1 only! */ + notreading = !reading; /* 1 or 0 */ + if ((pid = fork()) < 0) { + close(pipe_fd[0]); + close(pipe_fd[1]); + return NULL; + } + if (pid == 0) { /* child */ + close(pipe_fd[notreading]); + close(reading); /* 0/1 -- stdin/stdout */ + if (pipe_fd[reading] != reading) { + dup2(pipe_fd[reading], reading); + close(pipe_fd[reading]); + } + argv[2] = command; + execve(_PATH_BSHELL, argv, environ); + abort(); + } + /* parent */ + close(pipe_fd[reading]); + return fdopen(pipe_fd[notreading], rw); +} + +int pclose(fd) + FILE *fd; +{ + int waitstat; + + if (fclose(fd) != 0) + return EOF; + wait(&waitstat); + return waitstat; +} + diff --git a/src/nos/crt/printf.c b/src/nos/crt/printf.c new file mode 100644 index 00000000..caf94a12 --- /dev/null +++ b/src/nos/crt/printf.c @@ -0,0 +1,36 @@ +/* printf.c + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + * + * Altered to use stdarg, made the core function vfprintf. + * Hooked into the stdio package using 'inside information' + * Altered sizeof() assumptions, now assumes all integers except chars + * will be either + * sizeof(xxx) == sizeof(long) or sizeof(xxx) == sizeof(short) + * + * -RDB + */ + +#include "printf.h" + +#ifdef L_printf + +#if 1 +int printf(char *fmt,...) +#else +int printf(fmt, va_alist) + char *fmt; + va_dcl +#endif +{ + va_list ptr; + int rv; + + va_strt(ptr, fmt); + rv = vfprintf(stdout, fmt, ptr); + va_end(ptr); + return rv; +} +#endif + diff --git a/src/nos/crt/printf.h b/src/nos/crt/printf.h new file mode 100644 index 00000000..137db896 --- /dev/null +++ b/src/nos/crt/printf.h @@ -0,0 +1,42 @@ +/* printf.c + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + * + * Altered to use stdarg, made the core function vfprintf. + * Hooked into the stdio package using 'inside information' + * Altered sizeof() assumptions, now assumes all integers except chars + * will be either + * sizeof(xxx) == sizeof(long) or sizeof(xxx) == sizeof(short) + * + * -RDB + */ +#ifdef MAKE_ALL +#define L_fputter /* Nick */ +#define L_fprintf +#define L_printf +#define L_sprintf +#define L_sputter /* Nick */ +#define L_vprintf +#define L_vsprintf +#define L_vfprintf +#define L_vprinter /* Nick */ +#ifndef HI_TECH_C +/* #define FLOATS Nick */ +#endif +#endif + +#include +#include +#if 1 +#include +#define va_strt va_start +#else +#include +#define va_strt(p,i) va_start(p) +#endif + +#include +#include +#include + diff --git a/src/nos/crt/putenv.c b/src/nos/crt/putenv.c new file mode 100644 index 00000000..816f00f1 --- /dev/null +++ b/src/nos/crt/putenv.c @@ -0,0 +1,55 @@ +/************************** putenv.c ***************************/ +/* Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "environ.h" + +#ifdef L_putenv +#include + +#define ADD_NUM 4 + +int putenv(var) + register char *var; +{ + static char **mall_env = 0; + static int extras = 0; + char **p, **d, *r, *q; + register int len; + + if ((r = strchr(var, '=')) == 0) + len = strlen(var); + else len = (int)(r - var); + p = environ; + while ((q = *p) != NULL) { + if (q[0] == var[0] && + q[len] == '=' && + memcmp(var, q, len) == 0) { + while ((p[0] = p[1]) != NULL) + p++; + extras++; + break; + } + ++p; + } + if (r == 0) + return 0; /* want removing */ + if (extras <= 0) { /* Need more space */ + if ((d = malloc((p-environ+1+ADD_NUM)*sizeof(char *))) == 0) + return -1; + memcpy(d, environ, (p-environ+1)*sizeof(char *)); + p = d + (p - environ); + extras = ADD_NUM; + if (mall_env) + free(mall_env); + mall_env = environ = d; + } + *p++ = var; + *p = NULL; + extras--; + return 0; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/putgetch.c b/src/nos/crt/putgetch.c new file mode 100644 index 00000000..5fd60951 --- /dev/null +++ b/src/nos/crt/putgetch.c @@ -0,0 +1,28 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_putchar +int _putchar(ch) + int ch; +{ + return write(STDOUT_FILENO, &ch, 1); +} +#endif + +#ifdef L_getchar +int _getchar(void) { + unsigned char ch; + + if (read(STDIN_FILENO, &ch, 1) == 1) + return ch; + return EOF; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/putpwent.c b/src/nos/crt/putpwent.c new file mode 100644 index 00000000..ff629397 --- /dev/null +++ b/src/nos/crt/putpwent.c @@ -0,0 +1,23 @@ +/* putpwent.c + */ + +#include "passwd.h" + +#ifdef L_putpwent +int putpwent(pwd, f) + struct passwd *pwd; + FILE * f; +{ + if (pwd == NULL || f == NULL) { + errno = EINVAL; + return -1; + } + if (fprintf(f, "%s:%s:%u:%u:%s:%s:%s\n", + pwd->pw_name, pwd->pw_passwd, + pwd->pw_uid, pwd->pw_gid, pwd->pw_gecos, + pwd->pw_dir, pwd->pw_shell) < 0) + return -1; + return 0; +} +#endif + diff --git a/src/nos/crt/qsort.c b/src/nos/crt/qsort.c new file mode 100644 index 00000000..1ddff4d6 --- /dev/null +++ b/src/nos/crt/qsort.c @@ -0,0 +1,141 @@ +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +/* $Header: qsort.c,v 1.3 90/08/28 14:03:24 eck Exp $ */ + +#include + +static void qsort1(char *, char *, size_t); +/*static int (*qcompar)(const char *, const char *);*/ +static cmp_func_t qcompar; +static void qexchange(char *, char *, size_t); +static void q3exchange(char *, char *, char *, size_t); + +static void +qsort1(char *a1, char *a2, register size_t width) +{ + register char *left, *right; + register char *lefteq, *righteq; + int cmp; + + for (;;) { + if (a2 <= a1) return; + left = a1; + right = a2; + lefteq = righteq = a1 + width * (((a2-a1)+width)/(2*width)); + /* + Pick an element in the middle of the array. + We will collect the equals around it. + "lefteq" and "righteq" indicate the left and right + bounds of the equals respectively. + Smaller elements end up left of it, larger elements end + up right of it. + */ +again: + while (left < lefteq && (cmp = (*qcompar)(left, lefteq)) <= 0) { + if (cmp < 0) { + /* leave it where it is */ + left += width; + } + else { + /* equal, so exchange with the element to + the left of the "equal"-interval. + */ + lefteq -= width; + qexchange(left, lefteq, width); + } + } + while (right > righteq) { + if ((cmp = (*qcompar)(right, righteq)) < 0) { + /* smaller, should go to left part + */ + if (left < lefteq) { + /* yes, we had a larger one at the + left, so we can just exchange + */ + qexchange(left, right, width); + left += width; + right -= width; + goto again; + } + /* no more room at the left part, so we + move the "equal-interval" one place to the + right, and the smaller element to the + left of it. + This is best expressed as a three-way + exchange. + */ + righteq += width; + q3exchange(left, righteq, right, width); + lefteq += width; + left = lefteq; + } + else if (cmp == 0) { + /* equal, so exchange with the element to + the right of the "equal-interval" + */ + righteq += width; + qexchange(right, righteq, width); + } + else /* just leave it */ right -= width; + } + if (left < lefteq) { + /* larger element to the left, but no more room, + so move the "equal-interval" one place to the + left, and the larger element to the right + of it. + */ + lefteq -= width; + q3exchange(right, lefteq, left, width); + righteq -= width; + right = righteq; + goto again; + } + /* now sort the "smaller" part */ + qsort1(a1, lefteq - width, width); + /* and now the larger, saving a subroutine call + because of the for(;;) + */ + a1 = righteq + width; + } + /*NOTREACHED*/ +} + +static void +qexchange(register char *p, register char *q, + register size_t n) +{ + register int c; + + while (n-- > 0) { + c = *p; + *p++ = *q; + *q++ = c; + } +} + +static void +q3exchange(register char *p, register char *q, register char *r, + register size_t n) +{ + register int c; + + while (n-- > 0) { + c = *p; + *p++ = *r; + *r++ = *q; + *q++ = c; + } +} + +void +qsort(void *base, size_t nel, size_t width, + cmp_func_t compar) +{ + /* when nel is 0, the expression '(nel - 1) * width' is wrong */ + if (!nel) return; + qcompar = compar; + qsort1(base, (char *)base + (nel - 1) * width, width); +} + diff --git a/src/nos/crt/rand.c b/src/nos/crt/rand.c new file mode 100644 index 00000000..0757ac25 --- /dev/null +++ b/src/nos/crt/rand.c @@ -0,0 +1,70 @@ +/* rand.c + */ +#include + +#ifdef ZX81_RNG +/* This is my favorite tiny RNG, If you had a ZX81 you may recognise it :-) + * (RdeBath) + */ + +#define MAXINT (((unsigned)-1)>>1) + +static unsigned sseed = 0; + +int rand(void) { + sseed = (unsigned)(((sseed + 1L) * 75L) % 65537L) - 1; + return sseed; +} + +void srand(seed) + unsigned seed; +{ + sseed = seed; +} +#else +/* This generator is a combination of three linear congruential generators + * with periods or 2^15-405, 2^15-1041 and 2^15-1111. It has a period that + * is the product of these three numbers. + */ +static int seed1 = 1; +static int seed2 = 1; +static int seed3 = 1; +#define MAXINT (((unsigned)-1)>>1) + +#define CRANK(a,b,c,m,s) \ + q = s/a; \ + s = b*(s-a*q) - c*q; \ + if (s < 0) s += m; + +int rand(void) { + register int q; +#if 1 + q = seed1/206; + seed1 = 157*(seed1-206*q) - 31*q; + if (seed1 < 0) seed1 += 32363; + + q = seed2/217; + seed2 = 146*(seed2-217*q) - 45*q; + if (seed2 < 0) seed2 += 31727; + + q = seed3/222; + seed3 = 142*(seed3-222*q) - 133*q; + if (seed3 < 0) seed3 += 31657; +#else + CRANK(206, 157, 31, 32363, seed1); + CRANK(217, 146, 45, 31727, seed2); + CRANK(222, 142, 133, 31657, seed3); +#endif + return seed1 ^ seed2 ^ seed3; +} + +void srand(seed) + unsigned int seed; +{ + seed &= MAXINT; + seed1 = seed % 32362 + 1; + seed2 = seed % 31726 + 1; + seed3 = seed % 31656 + 1; +} +#endif + diff --git a/src/nos/crt/readdir.c b/src/nos/crt/readdir.c new file mode 100644 index 00000000..1fdc2008 --- /dev/null +++ b/src/nos/crt/readdir.c @@ -0,0 +1,34 @@ +/* readdir.c readdir implementation + * + */ +#include +#include +#include +#include +#include +#include +#include + +struct dirent *readdir(dir) + register DIR *dir; +{ + direct_t direntry; + register struct dirent *buf; + + if (dir == NULL || dir->dd_buf == NULL || dir->dd_fd == 0) { + errno = EFAULT; +Err: return NULL; + } + direntry.d_name[0] = 0; + while (direntry.d_name[0] == 0) + if (read(dir->dd_fd, &direntry, sizeof(direntry)) != sizeof(direntry)) + goto Err; + buf = dir->dd_buf; + buf->d_ino = direntry.d_ino; + buf->d_off = dir->dd_loc++; + strncpy(buf->d_name, (char *)direntry.d_name, DIRNAMELEN); + buf->d_name[DIRNAMELEN] = 0; + buf->d_reclen = strlen(buf->d_name); + return buf; +} + \ No newline at end of file diff --git a/src/nos/crt/readlink.c b/src/nos/crt/readlink.c new file mode 100644 index 00000000..40de52f7 --- /dev/null +++ b/src/nos/crt/readlink.c @@ -0,0 +1,20 @@ +/* readlink.c readlink implementation for UZIX + */ +#include +#include +#include + +int readlink(name, buf, size) + char *name; + char *buf; + int size; +{ + int sts, fd = open(name, O_SYMLINK); + + if (fd < 0) + return -1; + sts = read(fd, buf, size); + close(fd); + return sts; +} + \ No newline at end of file diff --git a/src/nos/crt/realloc.c b/src/nos/crt/realloc.c new file mode 100644 index 00000000..8260c781 --- /dev/null +++ b/src/nos/crt/realloc.c @@ -0,0 +1,39 @@ +/* realloc.c */ +/* Copyright (C) 1984 by Manx Software Systems */ + +#include "malloc-l.h" + +void *realloc(void *area, size_t size) + { + register void *cp; + size_t osize; + +#ifdef MALLOC_DEBUG + amess("realloc(0x"); + ahexw((unsigned int)area); + amess(", 0x"); + ahexw(size); + amess(") starting"); + acrlf(); + /* printf("realloc(0x%x, 0x%x) starting\n", area, size); */ + /* fflush(stdout); */ +#endif + + osize = (((FREE *)area-1)->f_size - 1) * sizeof(FREE); + free(area); + if ((cp = malloc(size)) != 0 && cp != area) +#if 1 /* Nick */ + memcpy(cp, area, size>osize ? osize : size); +#else + movmem(area, cp, size>osize ? osize : size); +#endif +#ifdef MALLOC_DEBUG + amess("realloc() returning 0x"); + ahexw((unsigned int)cp); + acrlf(); + /* printf("realloc() returning 0x%x\n", cp); */ + /* fflush(stdout); */ +#endif + return cp; + } + diff --git a/src/nos/crt/realloc.c$ b/src/nos/crt/realloc.c$ new file mode 100644 index 00000000..65c453e3 --- /dev/null +++ b/src/nos/crt/realloc.c$ @@ -0,0 +1,32 @@ +/* Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + * + * This is a combined alloca/malloc package. It uses a classic algorithm + * and so may be seen to be quite slow compared to more modern routines + * with 'nasty' distributions. + */ + +#include "malloc-l.h" + +#ifdef L_realloc +void *realloc(ptr, size) + void *ptr; + size_t size; +{ + void *nptr; + unsigned int osize; + + if (ptr == 0) + return malloc(size); + /* ??? what if I really want to free rest of block ? */ + if (size <= (osize = (m_size(((mem *) ptr) - 1) - 1) * sizeof(mem))) + return ptr; + if ((nptr = malloc(size)) == NULL) + return 0; + memcpy(nptr, ptr, osize); + free(ptr); + return nptr; +} +#endif /* L_realloc */ + \ No newline at end of file diff --git a/src/nos/crt/regerror.c b/src/nos/crt/regerror.c new file mode 100644 index 00000000..ab93e28a --- /dev/null +++ b/src/nos/crt/regerror.c @@ -0,0 +1,18 @@ +/* regerror.c + */ +#include +#include +#include +#include + +void regerror(s) + char *s; +{ +#ifdef ERRAVAIL + error("regexp: %s", s); +#else + fprintf(stderr, "regexp(3): %s", s); + exit(1); +#endif +} + \ No newline at end of file diff --git a/src/nos/crt/regexp.c b/src/nos/crt/regexp.c new file mode 100644 index 00000000..01f3bdeb --- /dev/null +++ b/src/nos/crt/regexp.c @@ -0,0 +1,1086 @@ +/* regexp.c regcomp and regexec -- regsub and regerror are elsewhere + * + * Copyright (c) 1986 by University of Toronto. + * Written by Henry Spencer. Not derived from licensed software. + * + * Permission is granted to anyone to use this software for any + * purpose on any computer system, and to redistribute it freely, + * subject to the following restrictions: + * + * 1. The author is not responsible for the consequences of use of + * this software, no matter how awful, even if they arise + * from defects in it. + * + * 2. The origin of this software must not be misrepresented, either + * by explicit claim or by omission. + * + * 3. Altered versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * + * Beware that some of this code is subtly aware of the way operator + * precedence is structured in regular expressions. Serious changes in + * regular-expression syntax might require a total rethink. + */ +#include +#include +#include +#include +#include "regmagic.h" + +/* The "internal use only" fields in regexp.h are present to pass info from + * compile to execute that permits the execute phase to run lots faster on + * simple cases. They are: + * + * regstart char that must begin a match; '\0' if none obvious + * reganch is the match anchored (at beginning-of-line only)? + * regmust string (pointer into program) that match must include, or NULL + * regmlen length of regmust string + * + * Regstart and reganch permit very fast decisions on suitable starting points + * for a match, cutting down the work a lot. Regmust permits fast rejection + * of lines that cannot possibly match. The regmust tests are costly enough + * that regcomp() supplies a regmust only if the r.e. contains something + * potentially expensive (at present, the only such thing detected is * or + + * at the start of the r.e., which can involve a lot of backup). Regmlen is + * supplied because the test in regexec() needs it and regcomp() is computing + * it anyway. + */ + +/* Structure for regexp "program". This is essentially a linear encoding + * of a nondeterministic finite-state machine (aka syntax charts or + * "railroad normal form" in parsing technology). Each node is an opcode + * plus a "next" pointer, possibly plus an operand. "Next" pointers of + * all nodes except BRANCH implement concatenation; a "next" pointer with + * a BRANCH on both ends of it is connecting two alternatives. (Here we + * have one of the subtle syntax dependencies: an individual BRANCH (as + * opposed to a collection of them) is never concatenated with anything + * because of operator precedence.) The operand of some types of node is + * a literal string; for others, it is a node leading into a sub-FSM. In + * particular, the operand of a BRANCH node is the first node of the branch. + * (NB this is *not* a tree structure: the tail of the branch connects + * to the thing following the set of BRANCHes.) The opcodes are: + */ + +/* definition number opnd? meaning */ +#define END 0 /* no End of program. */ +#define BOL 1 /* no Match "" at beginning of line. */ +#define EOL 2 /* no Match "" at end of line. */ +#define ANY 3 /* no Match any one character. */ +#define ANYOF 4 /* str Match any character in this string. */ +#define ANYBUT 5 /* str Match any character not in this string. */ +#define BRANCH 6 /* node Match this alternative, or the next... */ +#define BACK 7 /* no Match "", "next" ptr points backward. */ +#define EXACTLY 8 /* str Match this string. */ +#define NOTHING 9 /* no Match empty string. */ +#define STAR 10 /* node Match this (simple) thing 0 or more times. */ +#define PLUS 11 /* node Match this (simple) thing 1 or more times. */ +#define OPEN 20 /* no Mark this point in input as start of #n. */ + /* OPEN+1 is number 1, etc. */ +#define CLOSE 30 /* no Analogous to OPEN. */ + +/* + * Opcode notes: + * + * BRANCH The set of branches constituting a single choice are hooked + * together with their "next" pointers, since precedence prevents + * anything being concatenated to any individual branch. The + * "next" pointer of the last BRANCH in a choice points to the + * thing following the whole choice. This is also where the + * final "next" pointer of each individual branch points; each + * branch starts with the operand node of a BRANCH node. + * + * BACK Normal "next" pointers all implicitly point forward; BACK + * exists to make loop structures possible. + * + * STAR,PLUS '?', and complex '*' and '+', are implemented as circular + * BRANCH structures using BACK. Simple cases (one character + * per match) are implemented with STAR and PLUS for speed + * and to minimize recursive plunges. + * + * OPEN,CLOSE ...are numbered at compile time. + */ + +/* + * A node is one char of opcode followed by two chars of "next" pointer. + * "Next" pointers are stored as two 8-bit pieces, high order first. The + * value is a positive offset from the opcode of the node containing it. + * An operand, if any, simply follows the node. (Note that much of the + * code generation knows about this implicit relationship.) + * + * Using two bytes for the "next" pointer is vast overkill for most things, + * but allows patterns to get big without disasters. + */ +#define OP(p) (*(p)) +#define NEXT(p) (((*((p)+1)&0377)<<8) + (*((p)+2)&0377)) +#define OPERAND(p) ((p) + 3) + +/* + * See regmagic.h for one further detail of program structure. + */ + +/* + * Utility definitions. + */ +#ifndef CHARBITS +#define UCHARAT(p) ((int)*(unsigned char *)(p)) +#else +#define UCHARAT(p) ((int)*(p)&CHARBITS) +#endif + +extern void regerror __P((char *)); + +#define FAIL(m) { regerror(m); return(NULL); } +#define ISMULT(c) ((c) == '*' || (c) == '+' || (c) == '?') +#define META "^$.[()|?+*\\" + +/* + * Flags to be passed up and down. + */ +#define HASWIDTH 01 /* Known never to match null string. */ +#define SIMPLE 02 /* Simple enough to be STAR/PLUS operand. */ +#define SPSTART 04 /* Starts with * or +. */ +#define WORST 0 /* Worst case. */ + +/* + * Global work variables for regcomp(). + */ +static char *regparse; /* Input-scan pointer. */ +static int regnpar; /* () count. */ +static char regdummy; +static char *regcode; /* Code-emit pointer; ®dummy = don't. */ +static long regsize; /* Code size. */ + +/* + * Forward declarations for regcomp()'s friends. + */ +static char *reg __P((int paren, int *flagp)); +static char *regbranch __P((int *flagp)); +static char *regpiece __P((int *flagp)); +static char *regatom __P((int *flagp)); +static char *regnode __P((char op)); +static void regc __P((uint b)); +static void reginsert __P((char op, char *opnd)); +static void regtail __P((char *p, char *val)); +static void regoptail __P((char *p, char *val)); +static int regtry __P((regexp *prog, char *string)); +static int regmatch __P((char *prog)); +static int regrepeat __P((char *p)); +static char *regnext __P((char *p)); +static char *regprop __P((char *op)); +#ifdef STRCSPN +static int strcspn __P((char *, char *)); +#endif + +/* regcomp - compile a regular expression into internal code + * + * We can't allocate space until we know how big the compiled form will be, + * but we can't compile it (and thus know how big it is) until we've got a + * place to put the code. So we cheat: we compile it twice, once with code + * generation turned off and size counting turned on, and once "for real". + * This also means that we don't allocate space until we are sure that the + * thing really will compile successfully, and we never have to move the + * code and thus invalidate pointers into it. (Note that it has to be in + * one piece because free() must be able to free it all.) + * + * Beware that the optimization-preparation code in here knows about some + * of the structure of the compiled regexp. + */ +regexp *regcomp(exp) + char *exp; +{ + register regexp *r; + register char *scan; + register char *longest; + register int len; + int flags; + + if (exp == NULL) + FAIL("NULL argument"); + /* First pass: determine size, legality. */ + regparse = exp; + regnpar = 1; + regsize = 0L; + regcode = ®dummy; + regc(MAGIC); + if (reg(0, &flags) == NULL) + return(NULL); + /* Small enough for pointer-storage convention? */ + if (regsize >= 32767L) /* Probably could be 65535L. */ + FAIL("regexp too big"); + /* Allocate space. */ + r = (regexp *)malloc(sizeof(regexp) + (unsigned)regsize); + if (r == NULL) + FAIL("out of space"); + /* Second pass: emit code. */ + regparse = exp; + regnpar = 1; + regcode = r->program; + regc(MAGIC); + if (reg(0, &flags) == NULL) + return(NULL); + /* Dig out information for optimizations. */ + r->regstart = '\0'; /* Worst-case defaults. */ + r->reganch = 0; + r->regmust = NULL; + r->regmlen = 0; + scan = r->program+1; /* First BRANCH. */ + if (OP(regnext(scan)) == END) { /* Only one top-level choice. */ + scan = OPERAND(scan); + /* Starting-point info. */ + if (OP(scan) == EXACTLY) + r->regstart = *OPERAND(scan); + else if (OP(scan) == BOL) + r->reganch++; + /* + * If there's something expensive in the r.e., find the + * longest literal string that must appear and make it the + * regmust. Resolve ties in favor of later strings, since + * the regstart check works with the beginning of the r.e. + * and avoiding duplication strengthens checking. Not a + * strong reason, but sufficient in the absence of others. + */ + if (flags&SPSTART) { + longest = NULL; + len = 0; + while (scan != NULL) { + if (OP(scan) == EXACTLY && strlen(OPERAND(scan)) >= len) { + longest = OPERAND(scan); + len = strlen(OPERAND(scan)); + } + scan = regnext(scan); + } + r->regmust = longest; + r->regmlen = len; + } + } + return r; +} + +/* reg - regular expression, i.e. main body or parenthesized thing + * + * Caller must absorb opening parenthesis. + * + * Combining parenthesis handling with the base level of regular expression + * is a trifle forced, but the need to tie the tails of the branches to what + * follows makes it hard to avoid. + */ +static char *reg(paren, flagp) + int paren; /* Parenthesized? */ + int *flagp; +{ + register char *ret; + register char *br; + register char *ender; + register int parno; + int flags; + + *flagp = HASWIDTH; /* Tentatively. */ + /* Make an OPEN node, if parenthesized. */ + if (paren) { + if (regnpar >= NSUBEXP) + FAIL("too many ()"); + parno = regnpar; + regnpar++; + ret = regnode(OPEN+parno); + } + else ret = NULL; + /* Pick up the branches, linking them together. */ + br = regbranch(&flags); + if (br == NULL) + return NULL; + if (ret != NULL) + regtail(ret, br); /* OPEN -> first. */ + else ret = br; + if (!(flags&HASWIDTH)) + *flagp &= ~HASWIDTH; + *flagp |= flags&SPSTART; + while (*regparse == '|') { + regparse++; + br = regbranch(&flags); + if (br == NULL) + return NULL; + regtail(ret, br); /* BRANCH -> BRANCH. */ + if (!(flags&HASWIDTH)) + *flagp &= ~HASWIDTH; + *flagp |= flags&SPSTART; + } + /* Make a closing node, and hook it on the end. */ + ender = regnode((paren) ? CLOSE+parno : END); + regtail(ret, ender); + /* Hook the tails of the branches to the closing node. */ + br = ret; + while (br != NULL) { + regoptail(br, ender); + br = regnext(br); + } + /* Check for proper termination. */ + if (paren && *regparse++ != ')') { + FAIL("unmatched ()"); + } + else if (!paren && *regparse != '\0') { + if (*regparse == ')') { + FAIL("unmatched ()"); + } + else FAIL("junk on end"); /* "Can't happen". */ + /* NOTREACHED */ + } + return ret; +} + +/* regbranch - one alternative of an | operator + * + * Implements the concatenation operator. + */ +static char *regbranch(flagp) + int *flagp; +{ + register char *ret; + register char *chain; + register char *latest; + int flags; + + *flagp = WORST; /* Tentatively. */ + ret = regnode(BRANCH); + chain = NULL; + while (*regparse != '\0' && *regparse != '|' && *regparse != ')') { + latest = regpiece(&flags); + if (latest == NULL) + return(NULL); + *flagp |= flags&HASWIDTH; + if (chain == NULL) /* First piece. */ + *flagp |= flags&SPSTART; + else regtail(chain, latest); + chain = latest; + } + if (chain == NULL) /* Loop ran zero times. */ + regnode(NOTHING); + return ret; +} + +/* regpiece - something followed by possible [*+?] + * + * Note that the branching code sequences used for ? and the general cases + * of * and + are somewhat optimized: they use the same NOTHING node as + * both the endmarker for their branch list and the body of the last branch. + * It might seem that this node could be dispensed with entirely, but the + * endmarker role is not redundant. + */ +static char *regpiece(flagp) + int *flagp; +{ + register char *ret; + register char op; + register char *next; + int flags; + + ret = regatom(&flags); + if (ret == NULL) + return(NULL); + op = *regparse; + if (!ISMULT(op)) { + *flagp = flags; + return(ret); + } + if (!(flags&HASWIDTH) && op != '?') + FAIL("*+ operand could be empty"); + *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH); + if (op == '*' && (flags&SIMPLE)) + reginsert(STAR, ret); + else if (op == '*') { + /* Emit x* as (x&|), where & means "self". */ + reginsert(BRANCH, ret); /* Either x */ + regoptail(ret, regnode(BACK)); /* and loop */ + regoptail(ret, ret); /* back */ + regtail(ret, regnode(BRANCH)); /* or */ + regtail(ret, regnode(NOTHING)); /* null. */ + } + else if (op == '+' && (flags&SIMPLE)) + reginsert(PLUS, ret); + else if (op == '+') { + /* Emit x+ as x(&|), where & means "self". */ + next = regnode(BRANCH); /* Either */ + regtail(ret, next); + regtail(regnode(BACK), ret); /* loop back */ + regtail(next, regnode(BRANCH)); /* or */ + regtail(ret, regnode(NOTHING)); /* null. */ + } + else if (op == '?') { + /* Emit x? as (x|) */ + reginsert(BRANCH, ret); /* Either x */ + regtail(ret, regnode(BRANCH)); /* or */ + next = regnode(NOTHING); /* null. */ + regtail(ret, next); + regoptail(ret, next); + } + regparse++; + if (ISMULT(*regparse)) + FAIL("nested *?+"); + return(ret); +} + +/* regatom - the lowest level + * + * Optimization: gobbles an entire sequence of ordinary characters so that + * it can turn them into a single node, which is smaller to store and + * faster to run. Backslashed characters are exceptions, each becoming a + * separate node; the code is simpler that way and it's not worth fixing. + */ +static char *regatom(flagp) + int *flagp; +{ + register char *ret; + int flags; + + *flagp = WORST; /* Tentatively. */ + switch (*regparse++) { + case '^': + ret = regnode(BOL); + break; + case '$': + ret = regnode(EOL); + break; + case '.': + ret = regnode(ANY); + *flagp |= HASWIDTH|SIMPLE; + break; + case '[': { + register int class; + register int classend; + + if (*regparse == '^') { /* Complement of range. */ + ret = regnode(ANYBUT); + regparse++; + } + else ret = regnode(ANYOF); + if (*regparse == ']' || *regparse == '-') + regc(*regparse++); + while (*regparse != '\0' && *regparse != ']') { + if (*regparse == '-') { + regparse++; + if (*regparse == ']' || *regparse == '\0') + regc('-'); + else { + class = UCHARAT(regparse-2)+1; + classend = UCHARAT(regparse); + if (class > classend+1) + FAIL("invalid [] range"); + while (class <= classend) + regc(class++); + regparse++; + } + } + else regc(*regparse++); + } + regc('\0'); + if (*regparse != ']') + FAIL("unmatched []"); + regparse++; + *flagp |= HASWIDTH|SIMPLE; + } + break; + case '(': + ret = reg(1, &flags); + if (ret == NULL) + return(NULL); + *flagp |= flags&(HASWIDTH|SPSTART); + break; + case '\0': + case '|': + case ')': + FAIL("internal urp"); /* Supposed to be caught earlier. */ + case '?': + case '+': + case '*': + FAIL("?+* follows nothing"); + case '\\': + if (*regparse == '\0') + FAIL("trailing \\"); + ret = regnode(EXACTLY); + regc(*regparse++); + regc('\0'); + *flagp |= HASWIDTH|SIMPLE; + break; + default: { + register int len; + register char ender; + + len = strcspn(--regparse, META); + if (len <= 0) + FAIL("internal disaster"); + ender = *(regparse+len); + if (len > 1 && ISMULT(ender)) + len--; /* Back off clear of ?+* operand. */ + *flagp |= HASWIDTH; + if (len == 1) + *flagp |= SIMPLE; + ret = regnode(EXACTLY); + while (len > 0) { + regc(*regparse++); + len--; + } + regc('\0'); + } + break; + } + return ret; +} + +/* regnode - emit a node + */ +static char *regnode(op) + char op; +{ + register char *ret; + register char *ptr; + + ret = regcode; + if (ret == ®dummy) { + regsize += 3; + return ret; + } + ptr = ret; + *ptr++ = op; + *ptr++ = '\0'; /* Null "next" pointer. */ + *ptr++ = '\0'; + regcode = ptr; + return ret; +} + +/* regc - emit (if appropriate) a byte of code + */ +static void regc(b) + uint b; +{ + if (regcode != ®dummy) + *regcode++ = (char)b; + else regsize++; +} + +/* reginsert - insert an operator in front of already-emitted operand + * + * Means relocating the operand. + */ +static void reginsert(op, opnd) + char op; + char *opnd; +{ + register char *src; + register char *dst; + register char *place; + + if (regcode == ®dummy) { + regsize += 3; + return; + } + src = regcode; + regcode += 3; + dst = regcode; + while (src > opnd) + *--dst = *--src; + place = opnd; /* Op node, where operand used to be. */ + *place++ = op; + *place++ = '\0'; + *place++ = '\0'; +} + +/* regtail - set the next-pointer at the end of a node chain + */ +static void regtail(p, val) + char *p; + char *val; +{ + register char *scan; + register char *temp; + register int offset; + + if (p == ®dummy) + return; + /* Find last node. */ + scan = p; + for (;;) { + temp = regnext(scan); + if (temp == NULL) + break; + scan = temp; + } + if (OP(scan) == BACK) + offset = scan - val; + else offset = val - scan; + *(scan+1) = (offset>>8)&0377; + *(scan+2) = offset&0377; +} + +/* regoptail - regtail on operand of first argument; nop if operandless + */ +static void regoptail(p, val) + char *p; + char *val; +{ + /* "Operandless" and "op != BRANCH" are synonymous in practice. */ + if (p == NULL || p == ®dummy || OP(p) != BRANCH) + return; + regtail(OPERAND(p), val); +} + +/* + * regexec and friends + */ + +/* + * Global work variables for regexec(). + */ +static char *reginput; /* String-input pointer. */ +static char *regbol; /* Beginning of input, for ^ check. */ +static char **regstartp; /* Pointer to startp array. */ +static char **regendp; /* Ditto for endp. */ + +/* + * Forwards. + */ +#ifdef DEBUG +int regnarrate = 0; +#endif + +/* regexec - match a regexp against a string + */ +int regexec(prog, string) + regexp *prog; + char *string; +{ + register char *s; + + /* Be paranoid... */ + if (prog == NULL || string == NULL) { + regerror("NULL parameter"); + return(0); + } + /* Check validity of program. */ + if (UCHARAT(prog->program) != MAGIC) { + regerror("corrupted program"); + return(0); + } + /* If there is a "must appear" string, look for it. */ + if (prog->regmust != NULL) { + s = string; + while ((s = strchr(s, prog->regmust[0])) != NULL) { + if (strncmp(s, prog->regmust, prog->regmlen) == 0) + break; /* Found it. */ + s++; + } + if (s == NULL) /* Not present. */ + return(0); + } + /* Mark beginning of line for ^ . */ + regbol = string; + /* Simplest case: anchored match need be tried only once. */ + if (prog->reganch) + return(regtry(prog, string)); + /* Messy cases: unanchored match. */ + s = string; + if (prog->regstart != '\0') { + /* We know what char it must start with. */ + while ((s = strchr(s, prog->regstart)) != NULL) { + if (regtry(prog, s)) + return(1); + s++; + } + } + else { /* We don't -- general case. */ + do { + if (regtry(prog, s)) + return(1); + } while (*s++ != '\0'); + } + /* Failure. */ + return(0); +} + +/* regtry - try match at specific point + * 0 failure, 1 success + */ +static int regtry(prog, string) + regexp *prog; + char *string; +{ + register int i; + register char **sp; + register char **ep; + + reginput = string; + regstartp = prog->startp; + regendp = prog->endp; + sp = prog->startp; + ep = prog->endp; + i = NSUBEXP; + while (i-- != 0) { + *sp++ = NULL; + *ep++ = NULL; + } + if (regmatch(prog->program + 1)) { + prog->startp[0] = string; + prog->endp[0] = reginput; + return(1); + } + return(0); +} + +/* regmatch - main matching routine + * + * Conceptually the strategy is simple: check to see whether the current + * node matches, call self recursively to see whether the rest matches, + * and then act accordingly. In practice we make some effort to avoid + * recursion, in particular by going through "ordinary" nodes (that don't + * need to know whether the rest of the match failed) by a loop instead of + * by recursion. + */ +static int regmatch(prog) + char *prog; +{ + register char *scan; /* Current node. */ + char *next; /* Next node. */ + + scan = prog; +#ifdef DEBUG + if (scan != NULL && regnarrate) + fprintf(stderr, "%s(\n", regprop(scan)); +#endif + while (scan != NULL) { +#ifdef DEBUG + if (regnarrate) + fprintf(stderr, "%s...\n", regprop(scan)); +#endif + next = regnext(scan); + + switch (OP(scan)) { + case BOL: + if (reginput != regbol) + return(0); + break; + case EOL: + if (*reginput != '\0') + return(0); + break; + case ANY: + if (*reginput == '\0') + return(0); + reginput++; + break; + case EXACTLY: { + register int len; + register char *opnd; + + opnd = OPERAND(scan); + /* Inline the first character, for speed. */ + if (*opnd != *reginput) + return(0); + len = strlen(opnd); + if (len > 1 && strncmp(opnd, reginput, len) != 0) + return(0); + reginput += len; + } + break; + case ANYOF: + if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) == NULL) + return(0); + reginput++; + break; + case ANYBUT: + if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) != NULL) + return(0); + reginput++; + break; + case NOTHING: + break; + case BACK: + break; + case OPEN+1: + case OPEN+2: + case OPEN+3: + case OPEN+4: + case OPEN+5: + case OPEN+6: + case OPEN+7: + case OPEN+8: + case OPEN+9: { + register int no; + register char *save; + + no = OP(scan) - OPEN; + save = reginput; + + if (regmatch(next)) { + /* + * Don't set startp if some later + * invocation of the same parentheses + * already has. + */ + if (regstartp[no] == NULL) + regstartp[no] = save; + return(1); + } + return(0); + } + case CLOSE+1: + case CLOSE+2: + case CLOSE+3: + case CLOSE+4: + case CLOSE+5: + case CLOSE+6: + case CLOSE+7: + case CLOSE+8: + case CLOSE+9: { + register int no; + register char *save; + + no = OP(scan) - CLOSE; + save = reginput; + + if (regmatch(next)) { + /* + * Don't set endp if some later + * invocation of the same parentheses + * already has. + */ + if (regendp[no] == NULL) + regendp[no] = save; + return(1); + } + return(0); + } + case BRANCH: { + register char *save; + + if (OP(next) != BRANCH) /* No choice. */ + next = OPERAND(scan); /* Avoid recursion. */ + else { + do { + save = reginput; + if (regmatch(OPERAND(scan))) + return(1); + reginput = save; + scan = regnext(scan); + } while (scan != NULL && OP(scan) == BRANCH); + return(0); + } + } + break; /* ??? */ + case STAR: + case PLUS: { + register char nextch; + register int no; + register char *save; + register int min; + + /* + * Lookahead to avoid useless match attempts + * when we know what character comes next. + */ + nextch = '\0'; + if (OP(next) == EXACTLY) + nextch = *OPERAND(next); + min = (OP(scan) == STAR) ? 0 : 1; + save = reginput; + no = regrepeat(OPERAND(scan)); + while (no >= min) { + /* If it could work, try it. */ + if (nextch == '\0' || *reginput == nextch) + if (regmatch(next)) + return(1); + /* Couldn't or didn't -- back up. */ + no--; + reginput = save + no; + } + return(0); + } + case END: + return(1); /* Success! */ + default: + regerror("memory corruption"); + return(0); + } + scan = next; + } + /* + * We get here only if there's trouble -- normally "case END" is + * the terminating point. + */ + regerror("corrupted pointers"); + return(0); +} + +/* regrepeat - repeatedly match something simple, report how many + */ +static int regrepeat(p) + char *p; +{ + register int count = 0; + register char *scan; + register char *opnd; + + scan = reginput; + opnd = OPERAND(p); + switch (OP(p)) { + case ANY: + count = strlen(scan); + scan += count; + break; + case EXACTLY: + while (*opnd == *scan) { + count++; + scan++; + } + break; + case ANYOF: + while (*scan != '\0' && strchr(opnd, *scan) != NULL) { + count++; + scan++; + } + break; + case ANYBUT: + while (*scan != '\0' && strchr(opnd, *scan) == NULL) { + count++; + scan++; + } + break; + default: /* Oh dear. Called inappropriately. */ + regerror("internal foulup"); + count = 0; /* Best compromise. */ + break; + } + reginput = scan; + + return(count); +} + +/* regnext - dig the "next" pointer out of a node + */ +static char *regnext(p) + register char *p; +{ + register int offset; + + if (p == ®dummy) + return(NULL); + + offset = NEXT(p); + if (offset == 0) + return(NULL); + + if (OP(p) == BACK) + return p-offset; + return p+offset; +} + +#ifdef DEBUG + +/* regdump - dump a regexp onto stdout in vaguely comprehensible form + */ +void regdump(r) + regexp *r; +{ + register char *s, *next; + register char op = EXACTLY; /* Arbitrary non-END op. */ + + s = r->program + 1; + while (op != END) { /* While that wasn't END last time... */ + op = OP(s); + printf("%2d%s", s-r->program, regprop(s)); /* Where, what. */ + next = regnext(s); + if (next == NULL) /* Next ptr. */ + printf("(0)"); + else printf("(%d)", (s-r->program)+(next-s)); + s += 3; + if (op == ANYOF || op == ANYBUT || op == EXACTLY) { + /* Literal string, where present. */ + while (*s != '\0') { + putchar(*s); + s++; + } + s++; + } + putchar('\n'); + } + /* Header fields of interest. */ + if (r->regstart != '\0') + printf("start `%c' ", r->regstart); + if (r->reganch) + printf("anchored "); + if (r->regmust != NULL) + printf("must have \"%s\"", r->regmust); + printf("\n"); +} + +/* regprop - printable representation of opcode + */ +static char *regprop(op) + char *op; +{ + register char *p; + static char buf[50]; + + (void) strcpy(buf, ":"); + + switch (OP(op)) { + case BOL: p = "BOL"; break; + case EOL: p = "EOL"; break; + case ANY: p = "ANY"; break; + case ANYOF: p = "ANYOF"; break; + case ANYBUT: p = "ANYBUT"; break; + case BRANCH: p = "BRANCH"; break; + case EXACTLY: p = "EXACTLY"; break; + case NOTHING: p = "NOTHING"; break; + case BACK: p = "BACK"; break; + case END: p = "END"; break; + case STAR: p = "STAR"; break; + case PLUS: p = "PLUS"; break; + case OPEN+1: case OPEN+2: case OPEN+3: case OPEN+4: case OPEN+5: + case OPEN+6: case OPEN+7: case OPEN+8:case OPEN+9: + sprintf(buf+strlen(buf), "OPEN%d", OP(op)-OPEN); + p = NULL; + break; + case CLOSE+1: case CLOSE+2: case CLOSE+3: case CLOSE+4: case CLOSE+5: + case CLOSE+6: case CLOSE+7: case CLOSE+8: case CLOSE+9: + sprintf(buf+strlen(buf), "CLOSE%d", OP(op)-CLOSE); + p = NULL; + break; + default: + regerror("corrupted opcode"); + break; + } + if (p != NULL) + strcat(buf, p); + return buf; +} +#endif + +/* The following is provided for those people who do not have strcspn() in + * their C libraries. They should get off their butts and do something + * about it; at least one public-domain implementation of those (highly + * useful) string routines has been published on Usenet. + */ +#ifdef STRCSPN +/* strcspn - find length of initial segment of s1 consisting entirely + * of characters not from s2 + */ +static int strcspn(s1, s2) + char *s1; + char *s2; +{ + register char *scan1; + register char *scan2; + register int count; + + count = 0; + scan1 = s1; + while (*scan1 != '\0') { + for (scan2 = s2; *scan2 != '\0';) { /* ++ moved down. */ + if (*scan1 == *scan2++) + return(count); + } + scan1++; + count++; + } + return count; +} +#endif + diff --git a/src/nos/crt/regsub.c b/src/nos/crt/regsub.c new file mode 100644 index 00000000..a5c37cc9 --- /dev/null +++ b/src/nos/crt/regsub.c @@ -0,0 +1,80 @@ +/* regsub.c + * + * Copyright (c) 1986 by University of Toronto. + * Written by Henry Spencer. Not derived from licensed software. + * + * Permission is granted to anyone to use this software for any + * purpose on any computer system, and to redistribute it freely, + * subject to the following restrictions: + * + * 1. The author is not responsible for the consequences of use of + * this software, no matter how awful, even if they arise + * from defects in it. + * + * 2. The origin of this software must not be misrepresented, either + * by explicit claim or by omission. + * + * 3. Altered versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + */ +#include +#include +#include +#include "regmagic.h" + +#ifndef CHARBITS +#define UCHARAT(p) ((int)*(unsigned char *)(p)) +#else +#define UCHARAT(p) ((int)*(p)&CHARBITS) +#endif + +extern void regerror __P((char *)); + +/* regsub - perform substitutions after a regexp match + */ +void regsub(prog, source, dest) + regexp *prog; + char *source; + char *dest; +{ + register char *src; + register char *dst; + register char c; + register int no; + register int len; + + if (prog == NULL || source == NULL || dest == NULL) { + regerror("NULL parm to regsub"); + return; + } + if (UCHARAT(prog->program) != MAGIC) { + regerror("damaged regexp fed to regsub"); + return; + } + src = source; + dst = dest; + while ((c = *src++) != '\0') { + if (c == '&') + no = 0; + else if (c == '\\' && '0' <= *src && *src <= '9') + no = *src++ - '0'; + else no = -1; + if (no < 0) { /* Ordinary character. */ + if (c == '\\' && (*src == '\\' || *src == '&')) + c = *src++; + *dst++ = c; + } + else if (prog->startp[no] != NULL && prog->endp[no] != NULL) { + len = prog->endp[no] - prog->startp[no]; + strncpy(dst, prog->startp[no], len); + dst += len; + if (len != 0 && *(dst-1) == '\0') { + /* strncpy hit NUL. */ + regerror("damaged match string"); + return; + } + } + } + *dst++ = '\0'; +} + \ No newline at end of file diff --git a/src/nos/crt/rename.c b/src/nos/crt/rename.c new file mode 100644 index 00000000..41c1b746 --- /dev/null +++ b/src/nos/crt/rename.c @@ -0,0 +1,16 @@ +/* rename.c + */ +#include +#include + +int rename(oldname, newname) + char *oldname; + char *newname; +{ + int error = link(oldname, newname); + + if (error) + return error; + return unlink(oldname); +} + \ No newline at end of file diff --git a/src/nos/crt/rewind.c b/src/nos/crt/rewind.c new file mode 100644 index 00000000..0f7a5193 --- /dev/null +++ b/src/nos/crt/rewind.c @@ -0,0 +1,54 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_rewind +void rewind(fp) + FILE *fp; +{ + fseek(fp, 0L, SEEK_SET); + clearerr(fp); +} +#endif + +#ifdef L_fseek +int fseek(fp, offset, ref) + FILE *fp; + long offset; + int ref; +{ +#if 1 + /* if __MODE_READING and no ungetc ever done can just move pointer */ + /* This needs testing! */ + if ((fp->mode & (__MODE_READING | __MODE_UNGOT)) == __MODE_READING && + (ref == SEEK_SET || ref == SEEK_CUR)) { + long fpos = lseek(fp->fd, 0L, SEEK_CUR); + + if (fpos == -1L) + return EOF; + if (ref == SEEK_CUR) { + ref = SEEK_SET; + offset += fpos + (fp->bufpos - fp->bufread); + } + if (ref == SEEK_SET) { + if (offset < fpos && /* ??? */ + offset >= fpos + (fp->bufstart - fp->bufread)) { + fp->bufpos = (int)(offset - fpos) + fp->bufread; + return 0; + } + } + } +#endif + /* Use fflush to sync the pointers */ + if (fflush(fp) == EOF || lseek(fp->fd, offset, ref) < 0) + return EOF; + return 0; +} +#endif + diff --git a/src/nos/crt/rewindir.c b/src/nos/crt/rewindir.c new file mode 100644 index 00000000..08bdf8f0 --- /dev/null +++ b/src/nos/crt/rewindir.c @@ -0,0 +1,22 @@ +/* rewindir.c rewinddir implementation + * + */ +#include +#include +#include +#include +#include +#include +#include + +void rewinddir(dir) + register DIR *dir; +{ + if (dir == NULL || dir->dd_buf == NULL || dir->dd_fd == 0) { + errno = EFAULT; + return; + } + dir->dd_loc = 0; + lseek(dir->dd_fd, 0L, SEEK_SET); +} + diff --git a/src/nos/crt/rmdir.c b/src/nos/crt/rmdir.c new file mode 100644 index 00000000..ed506d27 --- /dev/null +++ b/src/nos/crt/rmdir.c @@ -0,0 +1,51 @@ +/* rmdir.c + */ +#include +#include +#include +#include +#include +#include + +int rmdir(path) + char *path; +{ + struct stat statbuf; + char newpath[PATHLEN]; + direct_t dir; + int fd; + + if (strlen(path)+3+1 > sizeof(newpath)) { + errno = ENAMETOOLONG; + goto Err; + } + if (stat(path, &statbuf) != 0) + goto Err; + if ((statbuf.st_mode & S_IFDIR) == 0) { + errno = ENOTDIR; + goto Err; + } + if ((fd = open(path, 0)) < 0) + goto Err; + while (read(fd, (char *) &dir, sizeof(dir)) == sizeof(dir)) { + if (dir.d_ino == 0 || + 0 == strcmp((char *)dir.d_name, ".") || + 0 == strcmp((char *)dir.d_name, "..")) + continue; + close(fd); + errno = ENOTEMPTY; + goto Err; + } + close(fd); + strcpy(newpath, path); + strcat(newpath, "/."); + if (unlink(newpath) != 0) /* remove path/. */ + goto Err; + strcat(newpath, "."); + if (unlink(newpath) != 0) /* remove path/.. */ + goto Err; + if (unlink(path) != 0) /* remove path */ +Err: return -1; + return 0; +} + diff --git a/src/nos/crt/scanf.c b/src/nos/crt/scanf.c new file mode 100644 index 00000000..5e831766 --- /dev/null +++ b/src/nos/crt/scanf.c @@ -0,0 +1,24 @@ +/* scanf1.c + */ + +#include "scanf.h" + +#ifdef L_scanf +#if 1 +int scanf(char *fmt,...) +#else +int scanf(fmt, va_alist) + char *fmt; + va_dcl +#endif +{ + va_list ptr; + int rv; + + va_strt(ptr, fmt); + rv = vfscanf(stdin, fmt, ptr); + va_end(ptr); + return rv; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/scanf.h b/src/nos/crt/scanf.h new file mode 100644 index 00000000..06f3ddaa --- /dev/null +++ b/src/nos/crt/scanf.h @@ -0,0 +1,27 @@ +/* scanf.c + */ +#include +#include +#include + +#ifdef MAKE_ALL +#define L_scanf +#define L_sscanf +#define L_fscanf +#define L_vscanf +#define L_vsscanf +#define L_vfscanf +#ifndef HI_TECH_C +/* #define FLOATS Nick */ +#endif +#endif + +#if 1 +#include +#define va_strt va_start +#else +#include +#define va_strt(p,i) va_start(p) +#endif + + \ No newline at end of file diff --git a/src/nos/crt/setbuff.c b/src/nos/crt/setbuff.c new file mode 100644 index 00000000..6feab35d --- /dev/null +++ b/src/nos/crt/setbuff.c @@ -0,0 +1,36 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_setbuff +void setbuffer(fp, buf, size) + FILE *fp; + char *buf; + size_t size; +{ + fflush(fp); + if (fp->mode & __MODE_FREEBUF) + free(fp->bufstart); + fp->mode &= ~(__MODE_FREEBUF | __MODE_BUF); + if (buf == NULL) { + fp->bufstart = (uchar *)fp->unbuf; + fp->bufend = (uchar *)fp->unbuf + sizeof(fp->unbuf); + fp->mode |= _IONBF; + } + else { + fp->bufstart = (uchar *)buf; + fp->bufend = (uchar *)buf + size; +#if _IOFBF + fp->mode |= _IOFBF; +#endif + } + fp->bufpos = fp->bufread = fp->bufwrite = fp->bufstart; +} +#endif + diff --git a/src/nos/crt/setenv.c b/src/nos/crt/setenv.c new file mode 100644 index 00000000..5f50ad85 --- /dev/null +++ b/src/nos/crt/setenv.c @@ -0,0 +1,88 @@ +/**************************** setenv.c ****************************/ +/* Copyright (C) 1992, 1995 Free Software Foundation, Inc. + This file is part of the GNU C Library. + */ + +#include "environ.h" + +#ifdef L_setenv +#include +#include + +int setenv(name, value, replace) + char *name; + char *value; + int replace; +{ + register char **ep; + register size_t size = 0; + size_t namelen = strlen(name); + size_t vallen = strlen(value); + char *p; + + ep = environ; + while ((p = *ep++) != NULL) { + if (!memcmp(p, name, namelen) && p[namelen] == '=') + break; + ++size; + } + if (p == NULL) { + static char **last_environ = NULL; + char **new_environ = (char **) malloc((size + 2) * sizeof(char *)); + if (new_environ == NULL) { +Err: errno = ENOMEM; + return -1; + } + memcpy(new_environ, environ, size * sizeof(char *)); + if ((p = malloc(namelen + 1 + vallen + 1)) == NULL) { + free(new_environ); + goto Err; + } + memcpy(p, name, namelen); + p[namelen] = '='; + memcpy(&p[namelen + 1], value, vallen + 1); + new_environ[size] = p; + new_environ[size + 1] = NULL; + if (last_environ != NULL) + free((void *) last_environ); + last_environ = new_environ; + environ = new_environ; + } + else if (replace) { + /* var exists and replaceing it contents is desired */ + size_t len = strlen(p); + + /* no room for new var and its contents. alloc space + for name and new content and copy them */ + if (len < namelen + 1 + vallen) { + char *new = malloc(namelen + 1 + vallen + 1); + + if (new == NULL) + goto Err; + memcpy(new, name, namelen); /* name */ + new[namelen] = '='; + *--ep = p = new; + /* next step: put new content */ + } + /* if len(old_value)>len(new_value), so we can just + copy the new value over the old one */ + memcpy(&p[namelen + 1], value, vallen + 1); + } + return 0; +} + +void unsetenv(name) + char *name; +{ + register char **ep, **dp, *p; + size_t namelen = strlen(name); + + dp = ep = environ; + while ((p = *ep++) != NULL) { + if (memcmp(p, name, namelen) || p[namelen] != '=') + *dp++ = p; + } + *dp = NULL; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/setgrent.c b/src/nos/crt/setgrent.c new file mode 100644 index 00000000..6feeedef --- /dev/null +++ b/src/nos/crt/setgrent.c @@ -0,0 +1,33 @@ +/* setgrent.c groups implementation + */ + +#include "grp-l.h" + +#ifdef L_setgrent +/* + * setgrent(), endgrent(), and getgrent() are mutually-dependent functions, + * so they are all included in the same object file, and thus all linked + * in together. + */ +static int grp_fd = -1; +char *_path_group = _PATH_GROUP; + +void setgrent() { + if (grp_fd != -1) + close(grp_fd); + grp_fd = open(_path_group, O_RDONLY | O_BINARY); +} + +void endgrent() { + if (grp_fd != -1) + close(grp_fd); + grp_fd = -1; +} + +struct group *getgrent() { + if (grp_fd == -1) + return NULL; + return __getgrent(grp_fd); +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/setjmp.c$ b/src/nos/crt/setjmp.c$ new file mode 100644 index 00000000..ea41a8c7 --- /dev/null +++ b/src/nos/crt/setjmp.c$ @@ -0,0 +1,48 @@ +/* + * setjmp.c for UZIX + * by A&L Software, 08/07/99 + */ +#include + +static int _lngjmprv = 1; + +#ifdef __TURBOC__ + +int setjmp (env) + jmp_buf env; +{ + env[0].di = _DI; + env[0].si = _SI; + env[0].bp = _BP; + env[0].sp = _SP; + __emit__(0x58); /* pop ax */ + __emit__(0x50); /* push ax */ + env[0].pc = _AX; + return 0; +} + +#if 1 +int longjmp(env, rv) /* Nick */ +#else +void longjmp(env, rv) +#endif + jmp_buf env; + int rv; +{ + _SP = env[0].sp; + _DI = env[0].di; + _SI = env[0].si; + _BP = env[0].bp; + __emit__(0x58); /* pop ax */ /* discards return from longjmp */ + _AX = env[0].pc; + __emit__(0x50); /* push ax */ /* now return is as it was from setjmp */ + if (rv) + return rv; + return 1; +} +#endif + +#ifdef HI_TECH_C +#include "setjmp.msx" +#endif + \ No newline at end of file diff --git a/src/nos/crt/setjmp.msx b/src/nos/crt/setjmp.msx new file mode 100644 index 00000000..a842354b --- /dev/null +++ b/src/nos/crt/setjmp.msx @@ -0,0 +1,126 @@ +/* + * setjmp.msx for UZIX + * by A&L Software, 08/07/99 + */ +#ifdef HI_TECH_C + +int setjmp (env) + jmp_buf env; /* int jmp_buf[7] */ +{ +#asm + ; DE = env + ; don't use stack here! + + defb 0FDh,07Dh ; LD A,IYl - saves IY + ld (de),a + inc de + defb 0FDh,07Ch ; LD A,IYh + ld (de),a + inc de + defb 0DDh,07Dh ; LD A,IXl - saves IX + ld (de),a + inc de + defb 0DDh,07Ch ; LD A,IXh + ld (de),a + inc de + ld a,c ; - saves BC + ld (de),a + inc de + ld a,b + ld (de),a + inc de + ld a,e ; - saves DE + ld (de),a + inc de + ld a,d + ld (de),a + inc de + ld a,l ; - saves HL + ld (de),a + inc de + ld a,h + ld (de),a + inc de + ld hl,0 + add hl,sp ; HL = SP + inc hl ; skip return address to after setjmp call + inc hl ; (it is saved below) + ld a,l ; - saves SP + ld (de),a + inc de + ld a,h + ld (de),a + inc de + pop hl ; HL = return address after setjmp call + push hl + ld a,l ; - saves PC + ld (de),a + inc de + ld a,h + ld (de),a + ld hl,0 + ret +#endasm +} + +void longjmp (env, rv) + jmp_buf env; + int rv; +{ +#asm + ; BC = rv, DE = env + ; don't use stack here! + global __lngjmprv + + ld (__lngjmprv),bc + ld hl,12 + add hl,de + ld b,(hl) + dec hl + ld c,(hl) ; BC = return address after setjmp call + dec hl + ld a,(hl) + dec hl + ld l,(hl) + ld h,a ; HL = saved SP in env + ld sp,hl ; - restores SP + push bc ; put return address in stack + ld a,(de) + defb 0FDh,06Fh ; LD IYl,A - restores IY + inc de + ld a,(de) + defb 0FDh,067h ; LD IYh,A + inc de + ld a,(de) + defb 0DDh,06Fh ; LD IXl,A - restores IX + inc de + ld a,(de) + defb 0DDh,067h ; LD IXh,A + inc de + ld a,(de) + ld c,a ; - restores BC + inc de + ld a,(de) + ld b,a + inc de + ld a,(de) + ;ld e,a ; - restores DE + inc de + ;ld a,(de) + ;ld d,a ; DE is the pointer, it can't be restored. + inc de ; anyway, it doesn't matter for lonjmp/setjmp + ;ld a,(de) + ;ld l,a ; - restores HL + inc de + ;ld a,(de) ; HL is the return value, it don't need to be + ;ld h,a ; restored, because it will be overwritten. + ld hl,(__lngjmprv) ; return value + ld a,h ; zero? + or l + ret nz ; return it if not + ld hl,1 + ret ; else return 1 +#endasm +} +#endif + diff --git a/src/nos/crt/setjmpb.S b/src/nos/crt/setjmpb.S new file mode 100644 index 00000000..e03e8fcc --- /dev/null +++ b/src/nos/crt/setjmpb.S @@ -0,0 +1,99 @@ +; setjmpb.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module _setjmpb + + .if 1 ; virtual memory + extrn leave_entry + .else + extern ?BANK_FAST_LEAVE_L08 + .endif + +#include "z80/asm.h" + +; ----------------------------------------------------------------------------- + + rseg CODE + + public _setjmp +_setjmp: + .if 1 + ld hl,4 + add hl,sp + ex de,hl + ld (hl),e + inc hl + ld (hl),d + inc hl + .if 1 ; virtual memory + ld a,(BBR_REFERENCE) + ld (hl),a + inc hl + ld (hl),#KRNL_TABLE >> 8 ; high word of BBR_REFERENCE value + inc hl + .endif + ld (hl),c + inc hl + ld (hl),b + inc hl + push ix + pop de + ld (hl),e + inc hl + ld (hl),d + inc hl + push iy + pop de + ld (hl),e + inc hl + ld (hl),d + inc hl + .if 1 ; virtual memory + ex de,hl + pop hl ; hl = CBR_REFERENCE at time of setjmp + ex (sp),hl ; hl = return addr from call to setjmp + ex de,hl + ld (hl),e + inc hl + ld (hl),d + inc hl + ex de,hl + ex (sp),hl ; hl = CBR_REFERENCE at time of setjmp + ex de,hl + ld (hl),e + inc hl + ld (hl),d + ld hl,0 ; hl = return value for call to setjmp + push hl + ex de,hl ; hl = CBR_REFERENCE at time of setjmp + jp leave_entry ; ?BANK_FAST_LEAVE_L08 ex (sp),hl skip + .else + pop af + pop de + push de + push af + ld (hl),e + inc hl + ld (hl),d + inc hl + ld (hl),a + ld hl,0 + jp ?BANK_FAST_LEAVE_L08 + .endif + .else + defb 021h,004h,000h,039h,0EBh,073h,023h + defb 072h,023h,071h,023h,070h,023h,0DDh + defb 0E5h,0D1h,073h,023h,072h,023h,0FDh + defb 0E5h,0D1h,073h,023h,072h,023h,0F1h + defb 0D1h,0D5h,0F5h,073h,023h,072h,023h + defb 077h,021h,000h,000h,0C3h + defw LWRD ?BANK_FAST_LEAVE_L08 + .endif + + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/crt/setjmpl.S b/src/nos/crt/setjmpl.S new file mode 100644 index 00000000..49b0eaae --- /dev/null +++ b/src/nos/crt/setjmpl.S @@ -0,0 +1,19 @@ +; setjmpl.asm +; Nick's reverse engineered subset of the IAR large 'C' library + +; ----------------------------------------------------------------------------- + + module _setjmpl + rseg CODE + public _setjmp +_setjmp: defb 021h,002h,000h,039h,0EBh,073h,023h + defb 072h,023h,071h,023h,070h,023h,0DDh + defb 0E5h,0D1h,073h,023h,072h,023h,0FDh + defb 0E5h,0D1h,073h,023h,072h,023h,0D1h + defb 0D5h,073h,023h,072h,021h,000h,000h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + END diff --git a/src/nos/crt/setpwent.c b/src/nos/crt/setpwent.c new file mode 100644 index 00000000..f569f230 --- /dev/null +++ b/src/nos/crt/setpwent.c @@ -0,0 +1,35 @@ +/* setpwent.c + */ + +#include "passwd.h" + +#ifdef L_setpwent +/* + * setpwent(), endpwent(), and getpwent() are included in the same object + * file, since one cannot be used without the other two, so it makes sense to + * link them all in together. + */ +/* file descriptor for the password file currently open */ +static int pw_fd = -1; +char *_path_passwd = _PATH_PASSWD; + +void setpwent() { + if (pw_fd != -1) + close(pw_fd); + pw_fd = open(_path_passwd, O_RDONLY | O_BINARY); + if (pw_fd==-1) printf("ERRNO %d opening password\n",errno); +} + +void endpwent(void) { + if (pw_fd != -1) + close(pw_fd); + pw_fd = -1; +} + +struct passwd *getpwent(void) { + if (pw_fd != -1) + return __getpwent(pw_fd); + return NULL; +} +#endif + diff --git a/src/nos/crt/setvbuff.c b/src/nos/crt/setvbuff.c new file mode 100644 index 00000000..733bf469 --- /dev/null +++ b/src/nos/crt/setvbuff.c @@ -0,0 +1,38 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_setvbuf +int setvbuf(fp, buf, mode, size) + FILE *fp; + char *buf; + int mode; + size_t size; +{ + fflush(fp); + if (fp->mode & __MODE_FREEBUF) + free(fp->bufstart); + fp->mode &= ~(__MODE_FREEBUF | __MODE_BUF); + fp->bufstart = (uchar *)fp->unbuf; + fp->bufend = (uchar *)fp->unbuf + sizeof(fp->unbuf); + fp->mode |= _IONBF; + if (mode == _IOFBF || mode == _IOLBF) { + if (size == 0) + size = BUFSIZ; + if (buf == NULL && (buf = calloc(1,size)) == NULL) + return EOF; + fp->bufstart = (uchar *)buf; + fp->bufend = (uchar *)buf + size; + fp->mode |= mode; + } + fp->bufpos = fp->bufread = fp->bufwrite = fp->bufstart; + return 0; +} +#endif + diff --git a/src/nos/crt/sleep.c b/src/nos/crt/sleep.c new file mode 100644 index 00000000..67ae83f2 --- /dev/null +++ b/src/nos/crt/sleep.c @@ -0,0 +1,26 @@ +/* sleep.c + */ +#include +#include +#include + +/* This uses SIGALRM, it does keep the previous alarm call but will lose + * any alarms that go off during the sleep + */ +static void alrm() { } + +unsigned int sleep(seconds) + unsigned int seconds; +{ + unsigned int prev_sec = alarm(0); + sig_t last_alarm = signal(SIGALRM, (sig_t)alrm); /* Nick cast */ + + if (prev_sec) + prev_sec = (prev_sec <= seconds ? 1 : prev_sec - seconds); + alarm(seconds); + pause(); + seconds = alarm(prev_sec); + signal(SIGALRM, last_alarm); + return seconds; +} + diff --git a/src/nos/crt/sprintf.c b/src/nos/crt/sprintf.c new file mode 100644 index 00000000..ba91b3d5 --- /dev/null +++ b/src/nos/crt/sprintf.c @@ -0,0 +1,50 @@ +/* printf.c + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + * + * Altered to use stdarg, made the core function vfprintf. + * Hooked into the stdio package using 'inside information' + * Altered sizeof() assumptions, now assumes all integers except chars + * will be either + * sizeof(xxx) == sizeof(long) or sizeof(xxx) == sizeof(short) + * + * -RDB + */ + +#include "printf.h" + +#ifdef L_sprintf +#if 1 +int sprintf(char *sp, char *fmt,...) +#else +int sprintf(sp, fmt, va_alist) + char *sp; + char *fmt; + va_dcl +#endif +{ +#if 0 /* Nick */ + static FILE string[1] = { + { 0, 0, (unsigned char *)-1, 0, (unsigned char *)-1, -1, + _IOFBF | __MODE_WRITE + } + }; +#endif + va_list ptr; + int rv; + + va_strt(ptr, fmt); +#if 1 /* Nick */ + rv = __vprinter(__sputter, (FILE *)&sp, fmt, ptr); + *(unsigned char *)sp = 0; +#else + string->bufpos = (unsigned char *)sp; + rv = vfprintf(string, fmt, ptr); + *(string->bufpos) = 0; +#endif + va_end(ptr); + return rv; +} +#endif + diff --git a/src/nos/crt/sputter.c b/src/nos/crt/sputter.c new file mode 100644 index 00000000..e6a86e58 --- /dev/null +++ b/src/nos/crt/sputter.c @@ -0,0 +1,30 @@ +/* sputter.c + * Nick Downing, Hytech + * + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + * + * Altered to use stdarg, made the core function vprinter (Nick). + * Hooked into the stdio package using 'inside information' + * Altered sizeof() assumptions, now assumes all integers except chars + * will be either + * sizeof(xxx) == sizeof(long) or sizeof(xxx) == sizeof(short) + * + * -RDB + */ + +#include "printf.h" + +#ifdef L_sputter +unsigned int __sputter(buffer, count, op) + void *buffer; + unsigned int count; + FILE *op; +{ + memcpy(*((unsigned char **)op), buffer, count); + *((unsigned char **)op) += count; + return count; +} +#endif + diff --git a/src/nos/crt/sscanf.c b/src/nos/crt/sscanf.c new file mode 100644 index 00000000..19b228c6 --- /dev/null +++ b/src/nos/crt/sscanf.c @@ -0,0 +1,31 @@ +/* scanf.c + */ + +#include "scanf.h" + +#ifdef L_sscanf +#if 1 +int sscanf(char *sp, char *fmt,...) +#else +int sscanf(sp, fmt, va_alist) + char *sp; + char *fmt; + va_dcl +#endif +{ + static FILE string[1] = { + { 0, (unsigned char *)-1, 0, 0, (unsigned char *)-1, -1, + _IOFBF | __MODE_READ + } + }; + va_list ptr; + int rv; + + va_strt(ptr, fmt); + string->bufpos = (unsigned char *)sp; + rv = vfscanf(string, fmt, ptr); + va_end(ptr); + return rv; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/stdio-l.h b/src/nos/crt/stdio-l.h new file mode 100644 index 00000000..3ed0f790 --- /dev/null +++ b/src/nos/crt/stdio-l.h @@ -0,0 +1,50 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#ifdef MAKE_ALL +#define L_stdio +#define L_fputc +#define L_fgetc +#define L_putchar +#define L_getchar +#define L_fflush +#define L_fgets +#define L_gets +#define L_fputs +#define L_puts +#define L_fread +#define L_fwrite +#define L_rewind +#define L_fseek +#define L_ftell +#define L_fopen +#define L_fclose +#define L_setbuff +#define L_setvbuf +#define L_ungetc +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef STATIC +#define STATIC +#endif + +extern FILE *__IO_list; /* For fflush at exit */ +#ifndef Inline_init +#define Inline_init __stdio_init_vars() +STATIC void __stdio_init_vars __P((void)); +#endif + diff --git a/src/nos/crt/stdio0.c b/src/nos/crt/stdio0.c new file mode 100644 index 00000000..a7dd9dcd --- /dev/null +++ b/src/nos/crt/stdio0.c @@ -0,0 +1,69 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_stdio + +#if 1 /* Nick */ +#define buferr (unsigned char *)(stderr[0].unbuf) /* Stderr is unbuffered */ +#else +#define buferr (unsigned char *)(stderr->unbuf) /* Stderr is unbuffered */ +#endif + +FILE *__IO_list = NULL; /* For fflush at exit */ + +static unsigned char bufin[BUFSIZ]; +static unsigned char bufout[BUFSIZ]; +#ifndef buferr +static unsigned char buferr[BUFSIZ]; +#endif + +FILE stdin[1] = { + {bufin, bufin, bufin, bufin, bufin + sizeof(bufin), + 0, _IOFBF | __MODE_READ | __MODE_IOTRAN} +}; + +FILE stdout[1] = { + {bufout, bufout, bufout, bufout, bufout + sizeof(bufout), + 1, _IOFBF | __MODE_WRITE | __MODE_IOTRAN} +}; + +FILE stderr[1] = { + {buferr, buferr, buferr, buferr, buferr + sizeof(buferr), + 2, _IONBF | __MODE_WRITE | __MODE_IOTRAN} +}; + +/* Call the stdio initialiser; it's main job it to call atexit */ +STATIC void __stdio_close_all(VOID) { + FILE *fp = __IO_list; + + fflush(stdout); + fflush(stderr); + while (fp) { + fflush(fp); + close(fp->fd); + /* Note we're not de-allocating the memory */ + /* There doesn't seem to be much point :-) */ + fp->fd = -1; + fp = fp->next; + } +} + +STATIC void __stdio_init_vars() { + static int first_time = 1; + + if (!first_time) + return; + first_time = 0; + if (isatty(1)) + stdout->mode |= _IOLBF; + atexit((atexit_t)__stdio_close_all); +} +#endif + diff --git a/src/nos/crt/strcat.c b/src/nos/crt/strcat.c new file mode 100644 index 00000000..567e41d0 --- /dev/null +++ b/src/nos/crt/strcat.c @@ -0,0 +1,19 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strcat ************************************/ +#ifdef L_strcat +char *strcat(d, s) + char *d; + const char *s; /* Nick */ +{ + strcpy(d + strlen(d), s); + return d; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strchr.c b/src/nos/crt/strchr.c new file mode 100644 index 00000000..83caf711 --- /dev/null +++ b/src/nos/crt/strchr.c @@ -0,0 +1,26 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strchr ************************************/ +#ifdef L_strchr +char *strchr(s, c) + const char *s; /* Nick */ + int c; +{ + register char ch; + + for (;;) { + if ((ch = *s) == c) + return (char *)s; /* Nick */ + if (ch == 0) + return NULL; /* Nick */ + s++; + } +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strcmp.c b/src/nos/crt/strcmp.c new file mode 100644 index 00000000..fee8af24 --- /dev/null +++ b/src/nos/crt/strcmp.c @@ -0,0 +1,24 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strcmp ************************************/ +#ifdef L_strcmp +int strcmp(d, s) + const char *d; /* Nick */ + const char *s; /* Nick */ +{ + register const char *s1 = d; /* Nick */ + register const char *s2 = s; /* Nick */ + register char c1, c2; + + while ((c1 = *s1++) == (c2 = *s2++) && c1) + ; + return c1 - c2; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strcpy.c b/src/nos/crt/strcpy.c new file mode 100644 index 00000000..c33ee89d --- /dev/null +++ b/src/nos/crt/strcpy.c @@ -0,0 +1,18 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strcpy ************************************/ +#ifdef L_strcpy +char *strcpy(d, s) + char *d; + const char *s; /* Nick */ +{ + return memcpy(d, s, strlen(s) + 1); +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strcspn.c b/src/nos/crt/strcspn.c new file mode 100644 index 00000000..696710e9 --- /dev/null +++ b/src/nos/crt/strcspn.c @@ -0,0 +1,29 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strcspn ************************************/ +#ifdef L_strcspn +/* + * Return the length of the sub-string of that consists + * entirely of characters not found in . The terminating '\0' + * in is not considered part of the match set. If the first + * character in is in , 0 is returned. + */ +/* This uses strchr, strchr should be in assembler */ +size_t strcspn(string, set) + register const char *string; /* Nick */ + const char *set; /* Nick */ +{ + const char *start = string; /* Nick */ + + while (*string && strchr(set, *string++) == 0) + ; + return (size_t)(string - start); +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strdup.c b/src/nos/crt/strdup.c new file mode 100644 index 00000000..d6b4bcd7 --- /dev/null +++ b/src/nos/crt/strdup.c @@ -0,0 +1,23 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strdup ************************************/ +#ifdef L_strdup +#include +char *strdup(s) + const char *s; /* Nick */ +{ + register size_t len = strlen(s) + 1; + register char *p = (char *) malloc(len); + + if (p) + memcpy(p, s, len); /* Faster than strcpy */ + return p; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/stricmp.c b/src/nos/crt/stricmp.c new file mode 100644 index 00000000..d050c285 --- /dev/null +++ b/src/nos/crt/stricmp.c @@ -0,0 +1,29 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function stricmp ************************************/ +#ifdef L_stricmp +#include +int stricmp(s, d) + const char *s; /* Nick */ + const char *d; /* Nick */ +{ + for (;;) { + unsigned char sc = *(uchar *)s++, dc = *(uchar *)d++; + + if (sc != dc) { + if (_tolower(sc) != _tolower(dc)) + return (int)(char)(sc - dc); + } + else if (sc == '\0') + break; + } + return 0; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/string-l.h b/src/nos/crt/string-l.h new file mode 100644 index 00000000..d1c2a79e --- /dev/null +++ b/src/nos/crt/string-l.h @@ -0,0 +1,34 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ +#include + +#ifdef MAKE_ALL +#define L_strlen +#define L_strcat +#define L_strcpy +#define L_strcmp +#define L_strncat +#define L_strncpy +#define L_strncmp +#define L_strchr +#define L_strrchr +#define L_strdup +#define L_strcspn +#define L_stricmp +#define L_strnicmp +#define L_strpbrk +#define L_strsep +#define L_strspn +#define L_strstr +#define L_strtok +#endif + +/* This is a basic string package; it includes the most used functions: + * + * strlen strcat strcpy strcmp strncat strncpy strncmp strchr strrchr strdup + * strcspn stricmp strnicmp strpbrk strspn strstr strtok + */ + \ No newline at end of file diff --git a/src/nos/crt/strlen.c b/src/nos/crt/strlen.c new file mode 100644 index 00000000..8c6f9035 --- /dev/null +++ b/src/nos/crt/strlen.c @@ -0,0 +1,33 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strlen ************************************/ +#ifdef L_strlen +size_t strlen(str) + register const char *str; /* Nick */ +{ +#ifndef HI_TECH_C + register const char *p = str; /* Nick */ + + while (*p != 0) + ++p; + return (size_t)(p-str); +#else +_asm + ld h,d + ld l,e + ld bc,0ffffh + xor a + cpir + sbc hl,de + dec hl +_endasm +#endif +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strncat.c b/src/nos/crt/strncat.c new file mode 100644 index 00000000..989ad6b4 --- /dev/null +++ b/src/nos/crt/strncat.c @@ -0,0 +1,28 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strncat ************************************/ +#ifdef L_strncat +char *strncat(d, s, l) + char *d; + const char *s; /* Nick */ + size_t l; +{ + register char *s1 = d + strlen(d); + register const char *s2 = memchr(s, 0, l); /* Nick */ + + if (s2) + memcpy(s1, s, s2 - s + 1); + else { + memcpy(s1, s, l); + s1[l] = '\0'; + } + return d; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strncmp.c b/src/nos/crt/strncmp.c new file mode 100644 index 00000000..028d4f3e --- /dev/null +++ b/src/nos/crt/strncmp.c @@ -0,0 +1,25 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strncmp ************************************/ +#ifdef L_strncmp +int strncmp(d, s, l) + const char *d; /* Nick */ + const char *s; /* Nick */ + size_t l; +{ + register char c1 = 0, c2 = 0; + + while (l-- != 0) { + if ((c1 = *d++) != (c2 = *s++) || c1 == '\0') + break; + } + return c1 - c2; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strncpy.c b/src/nos/crt/strncpy.c new file mode 100644 index 00000000..0198dda7 --- /dev/null +++ b/src/nos/crt/strncpy.c @@ -0,0 +1,30 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strncpy ************************************/ +#ifdef L_strncpy +char *strncpy(d, s, l) + char *d; + const char *s; /* Nick */ + size_t l; +{ + register char *s1 = d; + register const char *s2 = s; /* Nick */ + + while (l) { + l--; + if ((*s1++ = *s2++) == '\0') + break; + } + /* This _is_ correct strncpy is supposed to zap */ + while (l-- != 0) + *s1++ = '\0'; + return d; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strnicmp.c b/src/nos/crt/strnicmp.c new file mode 100644 index 00000000..0936e01b --- /dev/null +++ b/src/nos/crt/strnicmp.c @@ -0,0 +1,31 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strnicmp ************************************/ +#ifdef L_strnicmp +#include + +int strnicmp(s, d, l) + const char *s; /* Nick */ + const char *d; /* Nick */ + size_t l; +{ + while (l-- != 0) { + unsigned char sc = *(uchar *)s++, dc = *(uchar *)d++; + + if (sc != dc) { + if (_tolower(sc) != _tolower(dc)) + return (int)(char)(sc - dc); + } + else if (sc == '\0') + break; + } + return 0; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strpbrk.c b/src/nos/crt/strpbrk.c new file mode 100644 index 00000000..7e1ec957 --- /dev/null +++ b/src/nos/crt/strpbrk.c @@ -0,0 +1,24 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strpbrk ************************************/ +#ifdef L_strpbrk +/* This uses strchr, strchr should be in assembler */ +char *strpbrk(str, set) + register const char *str; /* Nick */ + register const char *set; /* Nick */ +{ + while (*str != '\0') { + if (strchr(set, *str)) + return (char *)str; /* Nick */ + ++str; + } + return 0; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strrchr.c b/src/nos/crt/strrchr.c new file mode 100644 index 00000000..acb02540 --- /dev/null +++ b/src/nos/crt/strrchr.c @@ -0,0 +1,27 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strrchr ************************************/ +#ifdef L_strrchr +char *strrchr(s, c) + const char *s; /* Nick */ + int c; +{ + register const char *p = s + strlen(s); /* Nick */ + + /* For null it's just like strlen */ + if (c == '\0') + return (char *)p; /* Nick */ + while (p != s) { + if (*--p == c) + return (char *)p; /* Nick */ + } + return NULL; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strsep.c b/src/nos/crt/strsep.c new file mode 100644 index 00000000..7fb2c32a --- /dev/null +++ b/src/nos/crt/strsep.c @@ -0,0 +1,27 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strsep ************************************/ +#ifdef L_strsep +char *strsep(pp, delim) + char **pp; + const char *delim; +{ + char *p, *q; + + if (0 == (p = *pp)) + return 0; + if ((q = strpbrk(p, delim)) != 0) { + *pp = q + 1; + *q = '\0'; + } + else *pp = 0; + return p; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strspn.c b/src/nos/crt/strspn.c new file mode 100644 index 00000000..00eca851 --- /dev/null +++ b/src/nos/crt/strspn.c @@ -0,0 +1,34 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strspn ************************************/ +#ifdef L_strspn +/* Return the length of the maximum initial segment + of S which contains only characters in ACCEPT. + */ +size_t strspn(s, accept) + const char *s; /* Nick */ + const char *accept; /* Nick */ +{ + register const char *p = s; /* Nick */ + register const char *a; /* Nick */ + register size_t count = 0; + + while (*p != '\0') { + a = accept; + while (*a != '\0' && *p != *a) + ++a; + if (*a == '\0') + break; + ++p; + ++count; + } + return count; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strstr.c b/src/nos/crt/strstr.c new file mode 100644 index 00000000..22eafe9b --- /dev/null +++ b/src/nos/crt/strstr.c @@ -0,0 +1,57 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strstr ************************************/ +#ifdef L_strstr +#if 1 +/* We've now got a nice fast strchr and memcmp use them */ +char *strstr(s1, s2) + const char *s1; /* Nick */ + const char *s2; /* Nick */ +{ + register int l = strlen(s2); + register const char *p = s1; + + if (l == 0) + return (char *)p; /* Nick */ + while ((p = strchr(p, *s2)) != 0) { + if (memcmp(p, s2, l) == 0) + return (char *)p; /* Nick */ + ++p; + } + return NULL; +} +#else +/* This is a nice simple self contained strstr, + now go and work out why the GNU one is faster :-) + */ +char *strstr(str1, str2) + char *str1, *str2; +{ + register char *Sptr, *Tptr; + int len = strlen(str1) - strlen(str2) + 1; + + if (*str2) { + while (len > 0) { + if (*str1 != *str2) + continue; + for (Sptr = str1, Tptr = str2; *Tptr != '\0'; Sptr++, Tptr++) { + if (*Sptr != *Tptr) + break; + } + if (*Tptr == '\0') + return str1; + --len; + ++str1; + } + } + return NULL; +} +#endif +#endif + \ No newline at end of file diff --git a/src/nos/crt/strtod.c b/src/nos/crt/strtod.c new file mode 100644 index 00000000..15d3d7e5 --- /dev/null +++ b/src/nos/crt/strtod.c @@ -0,0 +1,96 @@ +/* numeric/string conversions package + */ + +#include "cvt.h" + +#ifdef FLOAT +/**************************** strtod.c ****************************/ +#ifdef L_strtod +#include + +double strtod(nptr, endptr) + register char *nptr, **endptr; +{ + double number, mult; + int digits, negative, exp, exp_negative, exponent; + + /* advance beyond any leading whitespace */ + while (isspace(*nptr)) + nptr++; + /* check for optional '+' or '-' */ + negative = 0; + if (*nptr == '-') { + ++negative; + ++nptr; + } + else if (*nptr == '+') + ++nptr; + while (*nptr == '0') + nptr++; + exponent = digits = 0; + number = 0; + while (isdigit(*nptr)) { + if (digits > 33) + ++exponent; + else { + number *= 10; + number += (*nptr - '0'); + } + ++nptr; + ++digits; + } + if (*nptr == '.') { + ++nptr; + if (digits == 0) { + while (*nptr == '0') { + --exponent; + ++nptr; + } + } + while (isdigit(*nptr)) { + if (digits > 33) + ; + else { + number *= 10; + number += (*nptr - '0'); + --exponent; + } + ++nptr; + ++digits; + } + } + if (*nptr == 'e' || *nptr == 'E') { + nptr++; + exp_negative = 0; + if (*nptr == '-') { + ++exp_negative; + ++nptr; + } + else if (*nptr == '+') + ++nptr; + exp = 0; + while (isdigit(*nptr)) { + exp *= 10; + exp += (*nptr++ - '0'); + } + if (number != 0) { + if (exp_negative) + exp = -exp; + mult = 10; + if ((exp += exponent) < 0) { + exp = -exp; + mult = 0.1; + } + while (exp-- != 0) + number *= mult; + } + } + if (negative) + number = -number; + if (endptr != NULL) + *endptr = nptr; + return number; +} +#endif +#endif + diff --git a/src/nos/crt/strtok.c b/src/nos/crt/strtok.c new file mode 100644 index 00000000..925abf1a --- /dev/null +++ b/src/nos/crt/strtok.c @@ -0,0 +1,54 @@ +/* string.c + * Copyright (C) 1995,1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +#include "string-l.h" + +/********************** Function strtok ************************************/ +#ifdef L_strtok +static char *olds = 0; + +/* Parse S into tokens separated by characters in DELIM. + If S is NULL, the last string strtok() was called with is + used. For example: + char s[] = "-abc=-def"; + + x = strtok(s, "-"); // x = "abc" + x = strtok(NULL, "=-"); // x = "def" + x = strtok(NULL, "="); // x = NULL + // s = "abc\0-def\0" +*/ +char *strtok(s, delim) + register char *s; + register const char *delim; /* Nick */ +{ + char *token; + + if (s == 0) { + if (olds == 0) + return 0; + s = olds; + } + /* Scan leading delimiters. */ + s += strspn(s, delim); + if (*s == '\0') { + olds = 0; + return 0; + } + /* Find the end of the token. */ + token = s; + s = strpbrk(token, delim); + if (s == 0) + /* This token finishes the string. */ + olds = 0; + else { + /* Terminate the token and make OLDS point past it. */ + *s = '\0'; + olds = s + 1; + } + return token; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/strtol.c b/src/nos/crt/strtol.c new file mode 100644 index 00000000..42b0f915 --- /dev/null +++ b/src/nos/crt/strtol.c @@ -0,0 +1,30 @@ +/* numeric/string conversions package + */ + +#include "cvt.h" + +/**************************** strtol.c ****************************/ +#ifdef L_strtol +#include + +long strtol(nptr, endptr, base) + char *nptr, **endptr; + int base; +{ + long number; + int negative = 0; + char *ptr = nptr; + + while (isspace(*ptr)) + ptr++; + if (*ptr == '-') { + ++negative; + ++ptr; + } + else if (*ptr == '+') + ++ptr; + number = (long)strtoul(ptr, endptr, base); + return (negative ? -number : number); +} +#endif + diff --git a/src/nos/crt/strtoul.c b/src/nos/crt/strtoul.c new file mode 100644 index 00000000..0c8b8478 --- /dev/null +++ b/src/nos/crt/strtoul.c @@ -0,0 +1,74 @@ +/* numeric/string conversions package + */ + +#include "cvt.h" + +/**************************** strtoul.c ****************************/ +#ifdef L_strtoul +#include + +static int digit __P((unsigned char , int)); + +static int digit(unsigned char c, int base) { + int val = -1; + + if (isdigit(c)) val = c - '0'; + if (islower(c)) val = c - 'a' + 10; + if (isupper(c)) val = c - 'Z' + 10; + if (val >= base) val = -1; + return val; +} + +unsigned long strtoul(nptr, endptr, base) + char *nptr, **endptr; + int base; +{ + unsigned long number; + int dig; + + /* Sanity check the arguments */ + if (base < 2 || base > 36) + base = 0; + /* advance beyond any leading whitespace */ + while (isspace(*nptr)) + nptr++; + /* check for optional '+' ??? */ + if (*nptr == '+') + nptr++; + /* If base==0 and the string begins with + * "0x" then we're supposed to assume that it's hexadecimal + * "0b" then we're supposed to assume that it's binary + * "0" then we're supposed to assume that it's octal + */ + else if (base == 0 && *nptr == '0') { + if (__toupper(*(nptr + 1)) == 'X') { + base = 16; + nptr += 2; + } + else if (__toupper(*(nptr + 1)) == 'B') { + base = 2; + nptr += 2; + } + else { + base = 8; + nptr++; + } + } + /* If base is still 0 (it was 0 to begin with and the string didn't + * begin with "0"), then we are supposed to assume that it's base 10 + */ + if (base == 0) + base = 10; + number = 0; + while ((dig = digit(*nptr,base)) != -1) { + number *= base; + number += dig; + ++nptr; + } + if (endptr != NULL) + *endptr = nptr; + /* All done */ + return number; +} +#endif + diff --git a/src/nos/crt/system.c b/src/nos/crt/system.c new file mode 100644 index 00000000..fcbeab9a --- /dev/null +++ b/src/nos/crt/system.c @@ -0,0 +1,42 @@ +/* system.c + */ +#include +#include +#include +#include +#include + +int system(command) + char *command; +{ + sig_t save_quit, save_int; + int wait_ret, pid, wait_val = -1; + static char *argv[4] = { "sh", "-c", 0, 0 }; + + if (command == NULL) + return 1; + save_quit = (sig_t)signal(SIGQUIT, SIG_IGN); + save_int = (sig_t)signal(SIGINT, SIG_IGN); + if ((pid = fork()) < 0) + goto Ret; /* return -1 */ + if (pid == 0) { /* child */ + signal(SIGQUIT, SIG_DFL); + signal(SIGINT, SIG_DFL); + argv[2] = command; + execve(_PATH_BSHELL, argv, environ); + abort(); + } + /* Signals are not absolutly guaranteed with vfork */ + signal(SIGQUIT, SIG_IGN); + signal(SIGINT, SIG_IGN); + do { + if ((wait_ret = wait(&wait_val)) == -1) { + wait_val = -1; + break; + } + } while (wait_ret != pid); +Ret: signal(SIGQUIT, save_quit); + signal(SIGINT, save_int); + return wait_val; +} + \ No newline at end of file diff --git a/src/nos/crt/termcap.c b/src/nos/crt/termcap.c new file mode 100644 index 00000000..bc437e90 --- /dev/null +++ b/src/nos/crt/termcap.c @@ -0,0 +1,651 @@ +/* termcap.c + * Work-alike for termcap, plus extra features. + * Copyright (C) 1985, 1986, 1993 Free Software Foundation, Inc. + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#define bcopy(s, d, n) memcpy ((d), (s), (n)) + +/* TCBUFSIZ is the initial size allocated for the buffer + for reading the termcap file. The original name, BUFSIZ, + was changed to avoid conflict with stdio BUFSIZ (types.h). + It is not a limit. + Make it large normally for speed. + Make it variable when debugging, so can exercise + increasing the space dynamically. + */ + +#ifndef TCBUFSIZ +#ifdef DEBUG +#define TCBUFSIZ bufsize + +int bufsize = 128; +#else +#ifdef MSX +#define TCBUFSIZ 128 +#else +#define TCBUFSIZ 2048 +#endif +#endif +#endif + +#ifdef TIOCGWINSZ +#define ADJUST_WIN_EXTENT +#endif + +static void memory_out __P((void)); +static char *xmalloc __P((unsigned size)); +static char *xrealloc __P((char *ptr, unsigned size)); +static char *find_capability __P((char *bp, char *cap)); +static char *tgetst1 __P((char *ptr, char **area)); +static int scan_file __P((char *str, int fd, struct buffer *bufp)); +static int name_match __P((char *line, char *name)); +static int compare_contin __P((char *str1, char *str2)); +static char *gobble_line __P((int fd, struct buffer *bufp, char *append_end)); + + +static void memory_out() { + write(2, "virtual memory exhausted\n", 25); + exit(1); +} + +static char *xmalloc(size) + unsigned size; +{ + register char *tem = malloc(size); + + if (!tem) + memory_out(); + return tem; +} + +static char *xrealloc(ptr, size) + char *ptr; + unsigned size; +{ + register char *tem = realloc(ptr, size); + + if (!tem) + memory_out(); + return tem; +} + +/* Looking up capabilities in the entry already found. */ + +/* The pointer to the data made by tgetent is left here + for tgetnum, tgetflag and tgetstr to find. */ +static char *term_entry; + +/* Search entry BP for capability CAP. + * Return a pointer to the capability (in BP) if found, + * 0 if not found. + */ +static char *find_capability(bp, cap) + register char *bp, *cap; +{ + while (*bp) { + if (bp[0] == ':' + && bp[1] == cap[0] + && bp[2] == cap[1]) + return &bp[4]; + ++bp; + } + return NULL; +} + +int tgetnum(cap) + char *cap; +{ + register char *ptr = find_capability(term_entry, cap); + + if (!ptr || ptr[-1] != '#') + return -1; + return atoi(ptr); +} + +int tgetflag(cap) + char *cap; +{ + register char *ptr = find_capability(term_entry, cap); + + return ptr && ptr[-1] == ':'; +} + +/* Look up a string-valued capability CAP. + If AREA is non-null, it points to a pointer to a block in which + to store the string. That pointer is advanced over the space used. + If AREA is null, space is allocated with `malloc'. + */ +char *tgetstr(cap, area) + char *cap; + char **area; +{ + register char *ptr = find_capability(term_entry, cap); + + if (!ptr || (ptr[-1] != '=' && ptr[-1] != '~')) + return NULL; + return tgetst1(ptr, area); +} + +/* Table, indexed by a character in range 0100 to 0140 with 0100 subtracted, + gives meaning of character following \, or a space if no special meaning. + */ +static char esctab[] = +/* @ a b c d e f g h i j k l m n o p q r s t u v w x y z */ + "\ \a\b\ \ \033\f\ \ \ \ \ \ \ \n\ \ \ \r\ \ \ \v\ \ \ \ "; + +/* PTR points to a string value inside a termcap entry. + Copy that value, processing \ and ^ abbreviations, + into the block that *AREA points to, + or to newly allocated storage if AREA is NULL. + Return the address to which we copied the value, + or NULL if PTR is NULL + */ +static char *tgetst1(ptr, area) + char *ptr; + char **area; +{ + register char *p, *r; + register int c, size, c1; + char *ret; + + if (!ptr) + return NULL; + /* `ret' gets address of where to store the string. */ + if (!area) { + /* Compute size of block needed (may overestimate). */ + p = ptr; + while ((c = *p++) != 0 && c != ':' && c != '\n') + ; + ret = (char *) xmalloc(p - ptr + 1); + } + else ret = *area; + /* Copy the string value, stopping at null or colon. + * Also process ^ and \ abbreviations. + */ + p = ptr; + r = ret; + while ((c = *p++) != 0 && c != ':' && c != '\n') { + if (c == '^') /* control char ^X */ + c = *p++ & 037; + else if (c == '\\') { /* escaped char \X */ + c = *p++; + if (c >= '0' && c <= '7') { + c -= '0'; + size = 0; + + while (++size < 3 && + (c1 = *p) >= '0' && + c1 <= '7') { + c <<= 3; + c += c1 - '0'; + p++; + } + } + else if (c >= 0100 && c < 0200) { + c1 = esctab[(c & ~040) - 0100]; + if (c1 != ' ') + c = c1; + } + } + *r++ = c; + } + *r = '\0'; + if (area) + *area = r + 1; + return ret; +} + +/* Outputting a string with padding. */ + +int ospeed; +/* If OSPEED is 0, we use this as the actual baud rate. */ +int tputs_baud_rate; +char PC; +/* Actual baud rate if positive; + - baud rate / 100 if negative. + */ + +static short speeds[] = { + 0, 50, 75, 110, 135, 150, -2, -3, -6, -12, + -18, -24, -48, -96, -192, -384 +}; + +void tputs(str, nlines, outfun) + char *str; + int nlines; + int (*outfun) (int); +{ + register int padcount = 0; + + if (!str) + return; + while (*str >= '0' && *str <= '9') { + padcount += *str++ - '0'; + padcount *= 10; + } + if (*str == '.') { + str++; + padcount += *str++ - '0'; + } + if (*str == '*') { + str++; + padcount *= nlines; + } + while (*str) + (*outfun) (*str++); + /* padcount is now in units of tenths of msec. */ + padcount *= speeds[ospeed]; + padcount += 500; + padcount /= 1000; + if (speeds[ospeed] < 0) + padcount = -padcount; + else { + padcount += 50; + padcount /= 100; + } + while (padcount-- > 0) + (*outfun) (PC); +} + +/* Finding the termcap entry in the termcap data base. */ +struct buffer { + char *beg; + int size; + char *ptr; + int ateof; + int full; +}; + +/* Forward declarations of static functions. */ + +#ifdef ADJUST_WIN_EXTENT +#ifdef TIOCGWINSZ +static int get_win_extent(li, co) + int *li, *co; +{ + struct winsize ws; + + /* Some TIOCGWINSZ may be broken. + * Make sure ws.ws_row and ws.ws_col are not zero. + */ + if (ioctl(0, TIOCGWINSZ, &ws) != 0 || !ws.ws_row || !ws.ws_col) + return -1; + *li = ws.ws_row; + *co = ws.ws_col; + return 0; +} +#endif /* TIOCGWINSZ */ + +static int adjust_win_extent(bpp, howalloc, li, co) + char **bpp; + int howalloc; /* 0 must do in place, + * 1 must use malloc, + * 2 must use realloc */ + int li, co; +{ + int licolen, o_len, t, colon; + char *licobuf, *s; + + if (li < 0 || co < 0) + return 0; + s = *bpp; + colon = -1; + while (*s) { + if (*s == ':' && colon < 0) + colon = s - *bpp; + ++s; + } + o_len = s - *bpp; + licolen = 11; + t = li; + while ((t /= 10) > 0) + ++licolen; + t = co; + while ((t /= 10) > 0) + ++licolen; + licobuf = xmalloc(licolen + 1); + sprintf(licobuf, ":li#%d:co#%d:", li, co); + if (howalloc == 0) { + bcopy(*bpp + colon, *bpp + colon + licolen, o_len - colon + 1); + bcopy(licobuf, *bpp + colon, licolen); + } + else if (howalloc == 1) { + char *newbp = xmalloc(o_len + licolen + 1); + + bcopy(*bpp, newbp, colon); + bcopy(licobuf, newbp + colon, licolen); + strcpy(newbp + colon + licolen, *bpp + colon); + *bpp = newbp; + } + else { /* (howalloc == 2) */ + char *newbp = xrealloc(*bpp, o_len + licolen + 1); + + bcopy(newbp + colon, newbp + colon + licolen, o_len - colon + 1); + bcopy(licobuf, newbp + colon, licolen); + *bpp = newbp; + } + free(licobuf); + return 1; +} +#endif /* ADJUST_WIN_EXTENT */ + +#define valid_filename_p(fn) (*(fn) == '/') + +/* Find the termcap entry data for terminal type NAME + and store it in the block that BP points to. + Record its address for future use. + + If BP is null, space is dynamically allocated. + + Return -1 if there is some difficulty accessing the data base + of terminal types, + 0 if the data base is accessible but the type NAME is not defined + in it, and some other value otherwise. + */ +int tgetent(bp, name) + char *bp, *name; +{ + register char *termcap_name; + register int fd; + struct buffer buf; + register char *bp1; + char *bp2, *term; + register int c; + char *tcenv; /* TERMCAP value, if it contains :tc=. */ + char *indirect = NULL; /* Terminal type in :tc= in TERMCAP value. */ + char *termvar = getenv("TERM"); + int malloc_size = 0; + int filep; +#ifdef ADJUST_WIN_EXTENT + int li, co; /* #lines and columns on this tty */ + + if (get_win_extent(&li, &co) != 0) + li = co = -1; +#endif /* ADJUST_WIN_EXTENT */ + if (termvar == NULL) + return -1; /* missing env variable TERM */ + termcap_name = getenv("TERMCAP"); + if (termcap_name && *termcap_name == '\0') + termcap_name = NULL; + filep = termcap_name && valid_filename_p(termcap_name); + /* If termcap_name is non-null and starts with / (in the un*x case, + * that is), it is a file name to use instead of /etc/termcap. If it + * is non-null and does not start with /, it is the entry itself, + * but only if the name the caller requested matches the TERM + * variable. + */ + if (termcap_name && !filep && !strcmp(name, termvar)) { + indirect = tgetst1(find_capability(termcap_name, "tc"), (char **) 0); + if (!indirect) { + if (!bp) { + bp = termcap_name; +#ifdef ADJUST_WIN_EXTENT + if (adjust_win_extent(&bp, 1, li, co)) + malloc_size = 1; /* force return of bp */ +#endif /* ADJUST_WIN_EXTENT */ + } + else { + strcpy(bp, termcap_name); +#ifdef ADJUST_WIN_EXTENT + adjust_win_extent(&bp, 0, li, co); +#endif /* ADJUST_WIN_EXTENT */ + } + goto ret; + } + else { /* It has tc=. Need to read /etc/termcap. */ + tcenv = termcap_name; + termcap_name = NULL; + } + } + if (!termcap_name || !filep) + termcap_name = _PATH_TERMCAP; + /* Here we know we must search a file and termcap_name has its name. */ + if ((fd = open(termcap_name, 0)) < 0) + return -1; + buf.size = TCBUFSIZ; + /* Add 1 to size to ensure room for terminating null. */ + buf.beg = (char *) xmalloc(buf.size + 1); + term = indirect ? indirect : name; + if (!bp) { + malloc_size = indirect ? strlen(tcenv) + 1 : buf.size; + bp = (char *) xmalloc(malloc_size); + } + bp1 = bp; + if (indirect) { /* Copy the data from the environment variable. */ + strcpy(bp, tcenv); + bp1 += strlen(tcenv); + } + while (term) { + /* Scan the file, reading it via buf, + * till find start of main entry. + */ + if (scan_file(term, fd, &buf) == 0) { + close(fd); + free(buf.beg); + if (malloc_size) + free(bp); + return 0; + } + /* Free old `term' if appropriate. */ + if (term != name) + free(term); + /* If BP is malloc'd by us, make sure it is big enough. */ + if (malloc_size) { + malloc_size = bp1 - bp + buf.size; + termcap_name = (char *) xrealloc(bp, malloc_size); + bp1 += termcap_name - bp; + bp = termcap_name; + } + bp2 = bp1; + /* Copy the line of the entry from buf into bp. */ + termcap_name = buf.ptr; + while ((*bp1++ = c = *termcap_name++) != 0 && c != '\n') { + /* Drop out any \ newline sequence. */ + if (c == '\\' && *termcap_name == '\n') { + bp1--; + termcap_name++; + } + } + *bp1 = '\0'; + /* Does this entry refer to another terminal type's entry? + * If something is found, copy it into heap and + * null-terminate it. + */ + term = tgetst1(find_capability(bp2, "tc"), (char **) 0); + } + close(fd); + free(buf.beg); + if (malloc_size) + bp = (char *) xrealloc(bp, bp1 - bp + 1); +#ifdef ADJUST_WIN_EXTENT + adjust_win_extent(&bp, malloc_size ? 2 : 0, li, co); +#endif /* ADJUST_WIN_EXTENT */ + +ret: term_entry = bp; + if (malloc_size) + return (int) bp; + return 1; +} + +/* Given file open on FD and buffer BUFP, + scan the file from the beginning until a line is found + that starts the entry for terminal type STR. + Return 1 if successful, with that line in BUFP, + or 0 if no entry is found in the file. + */ +static int scan_file(str, fd, bufp) + char *str; + int fd; + register struct buffer *bufp; +{ + register char *end; + + bufp->ptr = bufp->beg; + bufp->full = 0; + bufp->ateof = 0; + *bufp->ptr = '\0'; + lseek(fd, 0L, SEEK_SET); + while (!bufp->ateof) { + /* Read a line into the buffer. */ + end = NULL; + do { + /* if it is continued, append another line to it, until a + * non-continued line ends. */ + end = gobble_line(fd, bufp, end); + } while (!bufp->ateof && end[-2] == '\\'); + if (*bufp->ptr != '#' && name_match(bufp->ptr, str)) + return 1; + /* Discard the line just processed. */ + bufp->ptr = end; + } + return 0; +} + +/* Return nonzero if NAME is one of the names specified + by termcap entry LINE. + */ +static int name_match(line, name) + char *line, *name; +{ + register char *tem; + + if (!compare_contin(line, name)) + return 1; + /* This line starts an entry. Is it the right one? */ + tem = line; + while (*tem && *tem != '\n' && *tem != ':') { + if (*tem++ == '|' && !compare_contin(tem, name)) + return 1; + } + return 0; +} + +static int compare_contin(str1, str2) + register char *str1, *str2; +{ + register int c1, c2; + + while (1) { + c1 = *str1++; + c2 = *str2++; + while (c1 == '\\' && *str1 == '\n') { + str1++; + while ((c1 = *str1++) == ' ' || c1 == '\t') + ; + } + if (c2 == '\0') { + /* End of type being looked up. */ + if (c1 == '|' || c1 == ':') + /* If end of name in data base, we win. */ + return 0; + break; + } + else if (c1 != c2) + break; + } + return 1; +} + +/* Make sure that the buffer <- BUFP contains a full line + of the file open on FD, starting at the place BUFP->ptr + points to. Can read more of the file, discard stuff before + BUFP->ptr, or make the buffer bigger. + + Return the pointer to after the newline ending the line, + or to the end of the file, if there is no newline to end it. + + Can also merge on continuation lines. If APPEND_END is + non-null, it points past the newline of a line that is + continued; we add another line onto it and regard the whole + thing as one line. The caller decides when a line is continued. + */ +static char *gobble_line(fd, bufp, append_end) + int fd; + register struct buffer *bufp; + char *append_end; +{ + register int nread; + register char *end, *tem, *buf = bufp->beg; + + if (!append_end) + append_end = bufp->ptr; + while (1) { + end = append_end; + while (*end && *end != '\n') + end++; + if (*end) + break; + if (bufp->ateof) + return buf + bufp->full; + if (bufp->ptr == buf) { + if (bufp->full == bufp->size) { + bufp->size *= 2; + /* Add 1 to size to ensure room for terminating + * null. */ + tem = (char *) xrealloc(buf, bufp->size + 1); + bufp->ptr = (bufp->ptr - buf) + tem; + append_end = (append_end - buf) + tem; + bufp->beg = buf = tem; + } + } + else { + append_end -= bufp->ptr - buf; + bcopy(bufp->ptr, buf, bufp->full -= bufp->ptr - buf); + bufp->ptr = buf; + } + if (0 == (nread = read(fd, buf + bufp->full, bufp->size - bufp->full))) + bufp->ateof = 1; + bufp->full += nread; + buf[bufp->full] = '\0'; + } + return end + 1; +} + +#ifdef TEST + +#include + +void tprint(char *cap) { + register char *y, *x = tgetstr(cap, 0); + + printf("%s: ", cap); + if (x) { + y = x; + while (*y) { + if (*y <= ' ' || *y == 0177) + printf("\\%0o", *y); + else putchar(*y); + ++y; + } + free(x); + } + else printf("none"); + putchar('\n'); +} + +void main(int argc, char *argv[]) { + char *buf, *term = argv[1]; + + putenv("TERMCAP=/UNIX/UZIX/LIB/SOURCES/termcap"); + printf("TERM: %s\n", term); + buf = (char *) tgetent(0, term); + if ((int) buf == 0 || (int)buf == -1) { + printf("No entry.\n"); + return; + } + printf("Entry: %s\n", buf); + tprint("cm"); + tprint("AL"); + printf("co: %d\n", tgetnum("co")); + printf("am: %d\n", tgetflag("am")); +} +#endif /* TEST */ + diff --git a/src/nos/crt/termcap.src b/src/nos/crt/termcap.src new file mode 100644 index 00000000..39acefcd --- /dev/null +++ b/src/nos/crt/termcap.src @@ -0,0 +1,225 @@ +# From: miquels@drinkel.ow.org (Miquel van Smoorenburg) +# +# Okay guys, here is a shorter termcap that does have most +# capabilities and is ncurses compatible. If it works for you +# I'd like to hear about it. +# +# Some entries in termcap 2.0.7 are too long and your programs +# may complain "tgetent: warning: termcap entry too long". Here is +# a smaller termcap. But it may not cover as many terminals as the one +# in termcap 2.0.7. You can install it as /etc/termcap. +# +# termcap Termcap entries for the VT family. +# All termcap entries have been freed of the 'ks' and +# 'ke' entries, that put the keypad into applications +# mode. This is a generally misused entry, not ment +# for the vt100 "applications" mode. Now cursor and +# function keys will work in all programs. +# +# Also, there is a "generic" vt entry with common +# entries for all terminals, on which all other entries +# are built. +# +# Version: @(#) vt-termcap 1.37 12-Mar-1996 MvS +# + +# VT-52 entry. +vt52|dec vt52:\ + :co#80:it#8:li#24:\ + :bl=^G:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :cr=^M:\ + :do=\EB:ho=\EH:kb=^H:kd=\EB:kl=\ED:kr=\EC:ku=\EA:\ + :le=\ED:nd=\EC:nw=^M^J:sf=^J:sr=\EI:ta=^I:up=\EA:\ + :dl=\EI:ve=\Ex5:vi=\Ey5: + +# Generic VT entry. +vg|vt-generic|Generic VT entries:\ + :bs:mi:ms:pt:xn:xo:it#8:\ + :RA=\E[?7l:SA=\E?7h:\ + :bl=^G:cr=^M:ta=^I:\ + :cm=\E[%i%d;%dH:\ + :le=^H:up=\E[A:do=\E[B:nd=\E[C:\ + :LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:DO=\E[%dB:\ + :ho=\E[H:cl=\E[H\E[2J:ce=\E[K:cb=\E[1K:cd=\E[J:sf=\ED:sr=\EM:\ + :ct=\E[3g:st=\EH:\ + :cs=\E[%i%d;%dr:sc=\E7:rc=\E8:\ + :ei=\E[4l:ic=\E[@:IC=\E[%d@:al=\E[L:AL=\E[%dL:\ + :dc=\E[P:DC=\E[%dP:dl=\E[M:DL=\E[%dM:\ + :so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\ + :mb=\E[5m:mh=\E[2m:md=\E[1m:mr=\E[7m:me=\E[m:\ + :sc=\E7:rc=\E8:kb=\177:\ + :ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D: + +## Linux console. One should really set TERM=linux instead of TERM=console. +#lx|linux|console|con80x25|LINUX System Console:\ +# :co#80:li#25:am:\ +# :is=\E[m\E[?1l\E>\E[10m:\ +# :rs=\E[m\E[?1l\E>\E[10m:\ +# :ch=\E[%i%dG:cv=\E[%i%dd:\ +# :eA=\E)0:as=^N:ae=^O:ac=aaffggjjkkllmmnnooqqssttuuvvwwxx:\ +# :ve=\E[?25h:vi=\E[?25l:\ +# :se=\E[27m:ue=\E[24m:mh=\E[2m:\ +# :ks=:ke=:\ +# :kh=\E[1~:kH=\E[4~:kI=\E[2~:kD=\E[3~:kP=\E[5~:kN=\E[6~:\ +# :k1=\E[[A:k2=\E[[B:k3=\E[[C:k4=\E[[D:k5=\E[[E:\ +# :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k0=\E[21~:\ +# :F1=\E[23~:F2=\E[24~:\ +# :tc=vt-generic: + +# Slackware 3.1 linux termcap entry (Sat Apr 27 23:03:58 CDT 1996): +lx|linux|console|con80x25|LINUX System Console:\ + :do=^J:co#80:li#25:cl=\E[H\E[J:sf=\ED:sb=\EM:\ + :le=^H:bs:am:cm=\E[%i%d;%dH:nd=\E[C:up=\E[A:\ + :ce=\E[K:cd=\E[J:so=\E[7m:se=\E[27m:us=\E[36m:ue=\E[m:\ + :md=\E[1m:mr=\E[7m:mb=\E[5m:me=\E[m:is=\E[1;25r\E[25;1H:\ + :ll=\E[1;25r\E[25;1H:al=\E[L:dc=\E[P:dl=\E[M:\ + :it#8:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:kb=^H:ti=\E[r\E[H:\ + :ho=\E[H:kP=\E[5~:kN=\E[6~:kH=\E[4~:kh=\E[1~:kD=\E[3~:kI=\E[2~:\ + :k1=\E[[A:k2=\E[[B:k3=\E[[C:k4=\E[[D:k5=\E[[E:k6=\E[17~:\ + :k7=\E[18~:k8=\E[19~:k9=\E[20~:k0=\E[21~:K1=\E[1~:K2=\E[5~:\ + :K4=\E[4~:K5=\E[6~:\ + :pt:sr=\EM:vt#3:xn:km:bl=^G:vi=\E[?25l:ve=\E[?25h:vs=\E[?25h:\ + :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:\ + :r1=\Ec:r2=\Ec:r3=\Ec: + +# Some other, commonly used linux console entries. +lx|con80x25:co#80:li#25:tc=linux: +lx|con80x28:co#80:li#25:tc=linux: +lx|con80x43:co#80:li#43:tc=linux: +lx|con80x50:co#80:li#50:tc=linux: +lx|con100x37:co#100:li#37:tc=linux: +lx|con100x40:co#100:li#40:tc=linux: +lx|con132x43:co#132:li#43:tc=linux: + +# vt102 - vt100 + insert line etc. VT102 does not have insert character. +v2|vt102|DEC vt102 compatible:\ + :co#80:li#24:\ + :ic@:IC@:\ + :is=\E[m\E[?1l\E>:\ + :rs=\E[m\E[?1l\E>:\ + :eA=\E)0:as=^N:ae=^O:ac=aaffggjjkkllmmnnooqqssttuuvvwwxx:\ + :ks=:ke=:\ + :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\ + :tc=vt-generic: + +# vt100 - really vt102 without insert line, insert char etc. +vt|vt100|DEC vt100 compatible:\ + :im@:mi@:al@:dl@:ic@:dc@:AL@:DL@:IC@:DC@:\ + :tc=vt102: + +# Standard vt320 (based on my own digital vt320) +v3|vt320|DEC vt320:\ + :co#80:li#24:hs:es:\ + :is=\E[m\E[2$~\E[?1l\E>:\ + :rs=\E[m\E[?1l\E>:\ + :ve=\E[?25h:vi=\E[?25l:\ + :se=\E[27m:ue=\E[24m:mh=\E[2m:\ + :eA=\E)0:as=^N:ae=^O:ac=aaffggjjkkllmmnnooqqssttuuvvwwxx:\ + :ts=\E[1$}\E[1;%i%dH:fs=\E[0$}:ds=\E[1$}\r\E[m\E[K\E[0$}:\ + :ks=:ke=:\ + :kI=\E[2~:kD=\E[3~:kP=\E[5~:kN=\E[6~:\ + :@4=\E[29~:@0=\E[1~:*6=\E[4~:\ + :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[16~\ + :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k0=\E[21~:\ + :F1=\E[23~:F2=\E[24~:F3=\E[25~:F4=\E[26~:F5=\E[28~:\ + :F6=\E[29~:F7=\E[31~:F8=\E[32~:\ + :tc=vt-generic: + +v8|vt320-8|DEC vt320 in 8-bit mode:\ + :kI=\2332~:kD=\2333~:kP=\2335~:kN=\2336~:\ + :@4=\23329~:@0=\2331~:*6=\2334~:\ + :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\23316~\ + :k6=\23317~:k7=\23318~:k8=\23319~:k9=\23320~:k0=\23321~:\ + :F1=\23323~:F2=\23324~:F3=\23325~:F4=\23326~:F5=\23328~:\ + :F6=\23329~:F7=\23331~:F8=\23332~:\ + :ku=\233A:kd=\233B:kr=\233C:kl=\233D:\ + :tc=vt320: + +# Entry for minicom so it uses the PC (IBM) character set. +# If this doesn't work for kernels between 1.1.18 and 1.1.80, +# change \E(U -> \E[11m (enter ANSI mode) +# and \E(B -> \E[10m (leave ANSI mode) +mc|minicom|ansi-mc|termcap entry for minicom on the console:\ + :is=\E[m\E>\E(U:\ + :rs=\E[m\E>\E(B:\ + :as@:ae@:eA@:ac@:\ + :bl=\E(B\007\E(U:\ + :vb=\E(B\007\E(U:\ + :tc=linux: + +# Entry for an xterm. Insert mode has been disabled. +vs|xterm|vs100|xterm terminal emulator (X Window System):\ + :am:bs:mi@:km:co#80:li#55:\ + :im@:ei@:\ + :ct=\E[3k:ue=\E[m:\ + :is=\E[m\E[?1l\E>:\ + :rs=\E[m\E[?1l\E>:\ + :eA=\E)0:as=^N:ae=^O:ac=aaffggjjkkllmmnnooqqssttuuvvwwxx:\ + :kI=\E[2~:kD=\177:kP=\E[5~:kN=\E[6~:\ + :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:\ + :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k0=\E[21~:\ + :F1=\E[23~:F2=\E[24~:\ + :kh=\E[H:kH=\EOw:\ + :ks=:ke=:\ + :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:\ + :tc=vt-generic: + +# Some other entries for the same xterm. +v2|xterms|vs100s|xterm small window:\ + :co#80:li#24:tc=xterm: +vb|xterm-bold|xterm with bold instead of underline:\ + :us=\E[1m:tc=xterm: +vi|xterm-ins|xterm with insert mode:\ + :mi:im=\E[4h:ei=\E[4l:tc=xterm: + +# DOS terminal emulator such as Telix or TeleMate. +# This probably also works for the SCO console, though it's incomplete. +an|ansi|ansi-bbs|ANSI terminals (emulators):\ + :co#80:li#24:am:\ + :is=:rs=\Ec:kb=^H:\ + :as=\E[m:ae=:eA=:\ + :ac=0\333+\257,\256.\031-\030a\261f\370g\361j\331k\277l\332m\300n\305q\304t\264u\303v\301w\302x\263~\025:\ + :kD=\177:kH=\E[Y:kN=\E[U:kP=\E[V:kh=\E[H:\ + :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOT:\ + :k6=\EOU:k7=\EOV:k8=\EOW:k9=\EOX:k0=\EOY:\ + :tc=vt-generic: + +# This seems to be an entry for other x86 based unices. +at|at386-m|386AT-M|386at-m|at/386 console:\ + :am:bw:eo:xt:co#80:li#25:\ + :ae=\E[10m:as=\E[12m:\ + :is=\E[0;10;38m:\ + :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOT:\ + :k6=\EOU:k7=\EOV:k8=\EOW:k9=\EOX:\ + :kh=\E[H:us=\E[4m:vb=^G:nl=\E[B:kb=^H:\ + :tc=vt-generic: + +# Yeah - Minix still lives :) +ma|minix|minix-am|minix-vcam|MINIX 1.5 Virtual Console:\ + :am:bs:co#80:li#25:km:ms:\ + :is=\E[0m\EPlinewrap.on\E\\:\ + :rs=\Ec\EPlinewrap.on\E\\:\ + :as=:ae=:eA=:\ + :ac=0\333+\257,\256.\031-\030a\261f\370g\361j\331k\277l\332m\300n\305q\304t\264u\303v\301w\302x\263~\025:\ + :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOT:\ + :k6=\EOU:k7=\EOV:k8=\EOW:k9=\EOX:k0=\EOY:\ + :kD=\177:kH=\E[Y:kN=\E[U:kP=\E[V:kh=\E[H:kb=^H:\ + :ve=\EPcursor.on\E\\:vi=\EPcursor.off\E\\:\ + :tc=vt-generic: + +# Some obligatory historic entries. +sa|network|ethernet|arpanet:co#80:os:am: +su|dumb|un|unknown:co#80:os:am: +sd|du|dialup:co#80:os:am: +t7|37|tty37|model 37 teletype:\ + :cr=^M:do=^J:nl=^J:bl=^G:le=^H:bs:hc:hu=\E8:hd=\E9:up=\E7:os: + +# Yes, there really are people that login from a Sun Console. +mu|sun|Sun Microsystems Workstation console:\ + :am:bs:km:mi:ms:pt:\ + :li#34:co#80:cl=^L:cm=\E[%i%d;%dH:nd=\E[C:up=\E[A:\ + :ce=\E[K:cd=\E[J:so=\E[7m:se=\E[m:\ + :kd=\E[B:kl=\E[D:ku=\E[A:kr=\E[C:kh=\E[H:\ + :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\ + :al=\E[L:dl=\E[M:im=:ei=:ic=\E[@:dc=\E[P:\ + :rs=\E[s: + \ No newline at end of file diff --git a/src/nos/crt/time-l.h b/src/nos/crt/time-l.h new file mode 100644 index 00000000..c0c35ec3 --- /dev/null +++ b/src/nos/crt/time-l.h @@ -0,0 +1,24 @@ +/* TIME-L.H Time conversion and time related package + * + */ +#include +#include + +#ifndef TZ_MOSCOW +#ifndef TZ_BRAZIL +#define TZ_BRAZIL +#endif +#endif + +#ifdef MAKE_ALL +#define L_asctime +#define L_ctime +#define L_gmtime +#define L_localtim +#define L_tzset +#define L_clock +#define L_mktime +#define L_difftime +#define L_convtime +#endif + \ No newline at end of file diff --git a/src/nos/crt/tmpnam.c b/src/nos/crt/tmpnam.c new file mode 100644 index 00000000..eedf57ec --- /dev/null +++ b/src/nos/crt/tmpnam.c @@ -0,0 +1,48 @@ +/* tmpnam.c + * + * function(s) + * __mkname - builds a file name of the form TMPXXXXX.$$$ + * tmpnam - builds a unique file name + */ +#include +#include +#include +#include +#include + +static char template[64]; +unsigned long _tmpnum; + +static char *__mkname __P((char *s, unsigned long num)); + +/* +Name __mkname - builds a file name of the form /tmp/NNNNNNN +Usage char * __mkname(char *s, unsigned long num); +Return value a file name of the form /tmp/NNNNNNN +*/ +static char *__mkname(s, num) + char *s; + unsigned long num; +{ + /* If no buffer provided, use internal template */ + if (s == NULL) + s = template; + strcpy(s, _PATH_TMP); + ultoa(num, s + strlen(s), 10); + return s; +} + +/* tmpnam - builds a unique file name + * Usage char *tmpnam(char *s); + * Prototype in stdio.h + * Return value a unique temporary file name + */ +char *tmpnam(s) + char *s; +{ + do { + s = __mkname(s, _tmpnum += 13); + } while (access(s, 0) != -1); + return s; +} + diff --git a/src/nos/crt/tparam.c b/src/nos/crt/tparam.c new file mode 100644 index 00000000..f724861f --- /dev/null +++ b/src/nos/crt/tparam.c @@ -0,0 +1,286 @@ +/* tparam.c + * Merge parameters into a termcap entry string. + * Copyright (C) 1985, 1987, 1993 Free Software Foundation, Inc. + */ +#include +#include +#include +#include +#include + +static void memory_out __P((void)); +static char *xmalloc __P((unsigned size)); +static char *xrealloc __P((char *ptr, unsigned size)); +static char *tparam1 __P((char *string, char *outstring, int len, char *up, char *left, int *argp)); + +static void memory_out() { + write(2, "virtual memory exhausted\n", 25); + exit(1); +} + +static char *xmalloc(size) + unsigned size; +{ + register char *tem = malloc(size); + + if (!tem) + memory_out(); + return tem; +} + +static char *xrealloc(ptr, size) + char *ptr; + unsigned size; +{ + register char *tem = realloc(ptr, size); + + if (!tem) + memory_out(); + return tem; +} + +/* Assuming STRING is the value of a termcap string entry + containing `%' constructs to expand parameters, + merge in parameter values and store result in block OUTSTRING points to. + LEN is the length of OUTSTRING. If more space is needed, + a block is allocated with `malloc'. + + The value returned is the address of the resulting string. + This may be OUTSTRING or may be the address of a block got with `malloc'. + In the latter case, the caller must free the block. + + The fourth and following args to tparam serve as the parameter values. + */ +/* VARARGS 2 */ +char *tparam(string, outstring, len, arg0, arg1, arg2, arg3) + char *string; + char *outstring; + int len; + int arg0, arg1, arg2, arg3; +{ +#ifdef NO_ARG_ARRAY + int arg[4]; + arg[0] = arg0; + arg[1] = arg1; + arg[2] = arg2; + arg[3] = arg3; + return tparam1(string, outstring, len, NULL, NULL, arg); +#else + (void)arg1; (void)arg2; (void)arg3; + return tparam1(string, outstring, len, NULL, NULL, &arg0); +#endif +} + +char *_BC; +char *_UP; + +static char tgoto_buf[50]; + +char *tgoto(cm, hpos, vpos) + char *cm; + int hpos, vpos; +{ + int args[2]; + + if (!cm) + return NULL; + args[0] = vpos; + args[1] = hpos; + return tparam1(cm, tgoto_buf, 50, _UP, _BC, args); +} + +static char *tparam1(string, outstring, len, up, left, argp) + char *string; + char *outstring; + int len; + char *up, *left; + register int *argp; +{ + register int c, tem; + register char *p = string; + register char *op = outstring; + int *old_argp = argp; + int outlen = 0; + int doleft = 0; + int doup = 0; + char *outend = outstring + len; + + while (1) { + /* If the buffer might be too short, make it bigger. */ + if (op + 5 >= outend) { + register char *new; + if (outlen == 0) { + outlen = len + 40; + new = (char *) xmalloc(outlen); + outend += 40; + memcpy(new, outstring, op - outstring); + } + else { + outend += outlen; + outlen *= 2; + new = (char *) xrealloc(outstring, outlen); + } + op += new -outstring; + outend += new -outstring; + outstring = new; + } + c = *p++; + if (!c) + break; + if (c == '%') { + c = *p++; + tem = *argp; + switch (c) { + case 'd': /* %d means output in decimal. */ + if (tem < 10) + goto onedigit; + if (tem < 100) + goto twodigit; + case '3': /* %3 means output in decimal, 3 digits. */ + if (tem > 999) { + *op++ = tem / 1000 + '0'; + tem %= 1000; + } + *op++ = tem / 100 + '0'; + case '2': /* %2 means output in decimal, 2 digits. */ +twodigit: + tem %= 100; + *op++ = tem / 10 + '0'; +onedigit: + *op++ = tem % 10 + '0'; + argp++; + break; + + case 'C': + /* For c-100: print quotient of value by 96, if + * nonzero, then do like %+. */ + if (tem >= 96) { + *op++ = tem / 96; + tem %= 96; + } + case '+': /* %+x means add character code of char x. */ + tem += *p++; + case '.': /* %. means output as character. */ + if (left) { + /* If want to forbid output of 0 and \n and + * \t, and this is one of them, increment + * it. */ + while (tem == 0 || tem == '\n' || tem == '\t') { + tem++; + if (argp == old_argp) + doup++, outend -= strlen(up); + else + doleft++, outend -= strlen(left); + } + } + *op++ = tem ? tem : 0200; + case 'f': /* %f means discard next arg. */ + argp++; + break; + + case 'b': /* %b means back up one arg (and re-use + * it). */ + argp--; + break; + + case 'r': /* %r means interchange following two args. */ + argp[0] = argp[1]; + argp[1] = tem; + old_argp++; + break; + + case '>': /* %>xy means if arg is > char code of x, */ + if (argp[0] > *p++) /* then add char code of y + * to the arg, */ + argp[0] += *p; /* and in any case don't + * output. */ + p++; /* Leave the arg to be output later. */ + break; + + case 'a': /* %a means arithmetic. */ + /* Next character says what operation. Add or + * subtract either a constant or some other arg. */ + /* First following character is + to add or - to + * subtract or = to assign. */ + /* Next following char is 'p' and an arg spec (0100 + * plus position of that arg relative to this one) + * or 'c' and a constant stored in a character. */ + tem = p[2] & 0177; + if (p[1] == 'p') + tem = argp[tem - 0100]; + if (p[0] == '-') + argp[0] -= tem; + else if (p[0] == '+') + argp[0] += tem; + else if (p[0] == '*') + argp[0] *= tem; + else if (p[0] == '/') + argp[0] /= tem; + else + argp[0] = tem; + + p += 3; + break; + + case 'i': /* %i means add one to arg, */ + argp[0]++; /* and leave it to be output later. */ + argp[1]++; /* Increment the following arg, + * too! */ + break; + + case '%': /* %% means output %; no arg. */ + goto ordinary; + + case 'n': /* %n means xor each of next two args with + * 140. */ + argp[0] ^= 0140; + argp[1] ^= 0140; + break; + + case 'm': /* %m means xor each of next two args with + * 177. */ + argp[0] ^= 0177; + argp[1] ^= 0177; + break; + + case 'B': /* %B means express arg as _BCD char code. */ + argp[0] += 6 * (tem / 10); + break; + + case 'D': /* %D means weird Delta Data + * transformation. */ + argp[0] -= 2 * (tem % 16); + break; + } + } + else + /* Ordinary character in the argument string. */ +ordinary: + *op++ = c; + } + *op = 0; + while (doup-- > 0) + strcat(op, up); + while (doleft-- > 0) + strcat(op, left); + return outstring; +} + +#ifdef TEST + +int main(argc, argv) + int argc; + char **argv; +{ + char buf[50]; + int args[3]; + + args[0] = atoi(argv[2]); + args[1] = atoi(argv[3]); + args[2] = atoi(argv[4]); + tparam1(argv[1], buf, 50, "LEFT", "UP", args); + printf("%s\n", buf); + return 0; +} +#endif /* DEBUG */ + diff --git a/src/nos/crt/ttyname.c b/src/nos/crt/ttyname.c new file mode 100644 index 00000000..c33a4d57 --- /dev/null +++ b/src/nos/crt/ttyname.c @@ -0,0 +1,45 @@ +/* ttyname.c + */ +#include +#include +#include +#include + +char *ttyname(fd) + int fd; +{ + static char name[MAXNAMLEN]; + static char dev[] = "/dev"; + struct stat st, dst; + struct dirent *d; + char *ret = NULL; + DIR *fp; + int noerr = errno; + + if (fstat(fd, &st) < 0) + return 0; + if (!isatty(fd)) { + errno = ENOTTY; + return 0; + } + fp = opendir(dev); + if (fp == 0) + return 0; + strcpy(name, dev); + strcat(name, "/"); + while ((d = readdir(fp)) != 0) { + if (strlen(d->d_name) > sizeof(name) - sizeof(dev) - 1) + continue; + strcpy(name + sizeof(dev), d->d_name); + if (stat(name, &dst) == 0 && + st.st_dev == dst.st_dev && + st.st_ino == dst.st_ino) { + ret = name; + break; + } + } + closedir(fp); + errno = noerr; + return ret; +} + \ No newline at end of file diff --git a/src/nos/crt/tzset.c b/src/nos/crt/tzset.c new file mode 100644 index 00000000..f69425f9 --- /dev/null +++ b/src/nos/crt/tzset.c @@ -0,0 +1,35 @@ +/*************************** TZSET ************************************/ +#include "time-l.h" + +#ifdef L_tzset +#include + +char *tzname[2] = { "GMT", "\0\0\0" }; +int daylight; +long timezone; + +/* tzset expects fo find a environment string of the form TZ=... + * ??? need to correct! + */ +void tzset(VOID) { + char *tz = getenv("TZ"); + + if (tz == NULL) { + memcpy(tzname[1],"GMT",3); +#ifdef TZ_MOSCOW + timezone = -3*60*60L; /* Moscow region */ +#endif +#ifdef TZ_BRAZIL + timezone = +3*60*60L; /* Brazil */ +#endif + } + else { + int v; + + memcpy(tzname[1],tz,3); + v = atoi(tz+3); + timezone = -((v / 100) * 60 + (v % 100) ) *60L; + } +} +#endif + diff --git a/src/nos/crt/ultoa.c b/src/nos/crt/ultoa.c new file mode 100644 index 00000000..70350a01 --- /dev/null +++ b/src/nos/crt/ultoa.c @@ -0,0 +1,22 @@ +/* numeric/string conversions package + */ + +#include "cvt.h" + +/**************************** ultoa.c ****************************/ +#ifdef L_ultoa +char *ultoa(value, strP, radix) + unsigned long value; + char *strP; + int radix; +{ + char hex = 'A'; + + if (radix < 0) { + hex = 'a'; + radix = -radix; + } + return __longtoa (value, strP, radix, 0, hex); +} +#endif + diff --git a/src/nos/crt/ungetc.c b/src/nos/crt/ungetc.c new file mode 100644 index 00000000..7716a1ac --- /dev/null +++ b/src/nos/crt/ungetc.c @@ -0,0 +1,30 @@ +/* stdio.c + * Copyright (C) 1996 Robert de Bath + * This file is part of the Linux-8086 C library and is distributed + * under the GNU Library General Public License. + */ + +/* This is an implementation of the C standard IO package. */ + +#include "stdio-l.h" + +#ifdef L_ungetc +int ungetc(c, fp) + int c; + FILE *fp; +{ + if (fp->mode & __MODE_WRITING) + fflush(fp); + /* Can't read or there's been an error then return EOF */ + if ((fp->mode & (__MODE_READ | __MODE_ERR)) != __MODE_READ) + return EOF; + /* Can't do fast fseeks */ + fp->mode |= __MODE_UNGOT; + if (fp->bufpos > fp->bufstart) + return *--fp->bufpos = (unsigned char) c; + if (fp->bufread == fp->bufstart) + return *fp->bufread++ = (unsigned char) c; + return EOF; +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/unix.h$ b/src/nos/crt/unix.h$ new file mode 100644 index 00000000..9a43feba --- /dev/null +++ b/src/nos/crt/unix.h$ @@ -0,0 +1,440 @@ +/* + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + UZIX structure and main definitions +**********************************************************/ + +#ifndef __UNIX_H +#define __UNIX_H + +#ifndef SEPH +#include "types.h" +#include "signal.h" +#include "errno.h" +#include "fcntl.h" +#include "sys/stat.h" +#include "sys/ioctl.h" +#endif + +#ifndef DEBUG +#define DEBUG 0 +#endif + +#define UZIXBASE (unsigned)0x8000 /* start of UZIX code */ +#define _UZIXBASE 8000h /* start of UZIX code for ASM */ +#define PROGBASE 0x100 /* Executable's load base */ +#define SYSCADDR 8 /* System call routine */ + /* Changed to 0008h to allow BDOSEMU */ +#define EXITADDR 0 /* System exit routine */ + +#define MAXSWAP 1024 /* maximal memory to use for swap */ +#ifdef MSX_HOSTED +#define MEMBANKING /* MSX has memory banking hardware */ +#else +#undef MEMBANKING /* i86 has no memory banking hardware */ +#endif + +#define MEM_DEV + +/* ITABSIZE should be at least 7 to allow piping. A lower value causes + piping to block. */ + +#if DEBUG > 1 +#define UFTSIZE 5 /* Number of per user files */ +#define OFTSIZE 10 /* Open file table size */ +#define ITABSIZE 8 /* Inode table size */ +#define PTABSIZE 5 /* Process table size */ +#define NBUFS (4-1) /* Number of block buffers */ +#else /* DEBUG > 1 */ +#ifdef MSX_HOSTED +#ifdef UZIX_MODULE +#define UFTSIZE 9 /* Number of per user files */ +#define OFTSIZE (14-4) /* Open file table size */ +#define ITABSIZE 7 /* Inode table size */ +#define PTABSIZE 7 /* Process table size */ +#define MTABSIZE 2 /* Module table size */ +#define RTABSIZE 3 /* Module reply table size */ +#define NBUFS 2 /* Number of block buffers */ +#else /* UZIX_MODULE */ +#define UFTSIZE 10 /* Number of per user files */ +#define OFTSIZE 15 /* Open file table size */ +#define ITABSIZE 8 /* Inode table size */ +#define PTABSIZE 6 /* Process table size */ +#define NBUFS 2 /* Number of block buffers */ +#endif /* UZIX_MODULE */ +#undef MEM_DEV +#else /* MSX_HOSTED */ +#ifdef NEED__SCALL +#define UFTSIZE 10 /*20 /* Number of per user files */ +#define OFTSIZE 20 /*40 /* Open file table size */ +#define ITABSIZE 10 /*20 /* Inode table size */ +#define PTABSIZE 5 /*10 /* Process table size (Nick, formerly 0) */ +#define NBUFS 5 /*10 /* Number of block buffers */ +#else /* NEED__SCALL */ +#define UFTSIZE 10 /*20 /* Number of per user files */ +#define OFTSIZE 0 /* Open file table size */ +#define ITABSIZE 10 /*20 /* Inode table size */ +#define PTABSIZE 0 /* Process table size */ +#define NBUFS 5 /*10 /* Number of block buffers */ +#endif /* NEED_SCALL */ +#endif /* MSX_HOSTED */ +#endif /* DEBUG > 1 */ + +#define NSIGS 16 /* Number of signals <= 16 */ + +#ifdef PC_HOSTED +#define TMPSTK 400 /* size of tmp stack. the bigger, the better. */ +#else +#if DEBUG > 1 +#define TMPSTK 300-50 /* for MSX */ +#endif +#endif + +#define SUPERBLOCK 1 /* disk block of filesystem superblock */ +#define ROOTINODE 1 /* Inode # of / for all mounted filesystems */ + +#ifdef PC_HOSTED +#define EMAGIC 0xE9 /* Header of executable - jmp near ptr ... */ +#else +#define EMAGIC 0xC3 /* Header of Z80-executable: jp ... */ +#endif +#define CMAGIC 31415 /* Random number for cinode c_magic */ +#define SMOUNTED 19638 /* Magic number to specify mounted filesystem */ + +typedef uchar page_t; /* swap page definition */ + +/* file-system related data types */ +typedef uint ino_t; /* Can have 65536 inodes in fs */ +typedef uint blkno_t; /* Can have 65536 BUFSIZE-byte blocks in fs */ +typedef uint dev_t; /* Device number */ + +#define MINOR(dev) ((uchar)(dev)) +#define MAJOR(dev) ((uchar)((dev) >> 8)) +#define MKDEV(major, minor) (((uint)(uchar)(major) << 8) | (uchar)(minor)) + +#define NULLINO ((ino_t)0) +#define NULLBLK ((blkno_t)-1) +#define NULLDEV ((dev_t)-1) + +/* executable file header */ +typedef struct s_exec { + uchar e_magic; /* magic value (jmp near ptr ) */ + int e_jump; /* */ + uchar e_flags; /* executable flags */ + /* bit 7: 1-not refresh system vectors on swapin() */ + /* bit 6: 1-process is a module */ + uint e_text; /* end of text */ + uint e_data; /* end of data */ + uint e_bss; /* end of bss */ + uint e_heap; /* needed heap len */ + uint e_stack; /* needed stack len */ + uint e_dummy; /* undefined now */ +} exec_t, *exeptr; + +/* input/output queue for character devices */ +typedef struct s_queue { + uchar *q_base; /* Pointer to data buffer */ + uchar *q_head; /* Pointer to addr of next char to read. */ + uchar *q_tail; /* Pointer to where next char to insert goes. */ + uint q_size; /* Max size of queue */ + uint q_count; /* How many characters presently in queue */ + uint q_wakeup; /* Threshold for waking up procs waiting on queue */ +} queue_t; + +/* Flags for setftime() */ +#define A_TIME 1 /* set access time */ +#define M_TIME 2 /* set modify time */ +#define C_TIME 4 /* set creation time */ + +typedef struct s_blkbuf { + uchar bf_data[BUFSIZE]; /* This MUST BE first ! */ + dev_t bf_dev; /* device of this block */ + blkno_t bf_blk; /* and block number on device */ + uchar bf_dirty; /* buffer changed flag */ + uchar bf_busy; /* buffer processing in progress */ + uchar bf_prio; /* buffer must be in memory (for wargs) */ + uint bf_time; /* LRU time stamp */ +/* struct s_blkbuf *bf_next; /* LRU free list pointer */ +} blkbuf_t, *bufptr; + +#define DIRECTBLOCKS 18 +#define INDIRECTBLOCKS 1 /* MUST BE 1! */ +#define DINDIRECTBLOCKS 1 /* MUST BE 1! */ +#define TOTALREFBLOCKS (DIRECTBLOCKS+2) + +/* Device-resident inode structure */ +typedef struct s_dinode { + mode_t i_mode; /* file mode */ + uint i_nlink; /* number of links to file */ + uchar i_uid, i_gid; /* file owner */ + off_t i_size; /* file size */ + time_t i_atime; /* last access time */ + time_t i_mtime; /* last modification time */ + time_t i_ctime; /* file creation time */ + blkno_t i_addr[DIRECTBLOCKS+INDIRECTBLOCKS+DINDIRECTBLOCKS]; +#if TOTALREFBLOCKS < 21 + blkno_t i_dummy[21-TOTALREFBLOCKS]; +#endif +} dinode_t; /* Exactly 64 bytes long! See DINODESPERBLOCK below */ + +#define DINODESPERBLOCK 8 /* # of dinode_t per logical block */ +#define DINODESPERBLOCKLOG 3 /* log2(DINODESPERBLOCK) */ +#define DINODESPERBLOCKMASK ((1<c_node.i_addr[0])) + +/* Getmode() returns the inode kind */ +#define _getmode(mode) ((mode) & S_IFMT) +#define getmode(ino) (_getmode((ino)->c_node.i_mode)) +/* Super() returns true if we are the superuser */ +#define super() (UDATA(u_euid) == 0) + +/* in-core inode structure */ +typedef struct s_cinode { + uint c_magic; /* Used to check for corruption */ + uchar c_dirty; /* Modified flag */ + dev_t c_dev; /* Inode's device */ + ino_t c_num; /* Inode's number */ + uint c_refs; /* In-core reference count */ + bool_t c_ro; /* Read-only filesystem flag */ + dinode_t c_node; /* disk inode copy */ +} cinode_t, *inoptr; + +#define DIRECTPERBLOCK (BUFSIZE/sizeof(direct_t)) + +#define FSFREEBLOCKS 50 +#define FSFREEINODES 50 + +/* device-resident super-block */ +typedef struct s_filesys { + uint s_mounted; /* signature */ + uint s_reserv; /* # of first block of inodes */ + uint s_isize; /* # of inode's blocks */ + uint s_fsize; /* # of data's blocks */ + + blkno_t s_tfree; /* total free blocks */ + uint s_nfree; /* # of free blocks in s_free */ + blkno_t s_free[FSFREEBLOCKS]; /* #s of free block's */ + + ino_t s_tinode; /* total free inodes */ + uint s_ninode; /* # of free inodes in s_inode */ + ino_t s_inode[FSFREEINODES]; /* #s of free inodes */ + + time_t s_time; /* last modification timestamp */ + +/* Core-resident part */ + bool_t s_fmod; /* filesystem modified */ + bool_t s_ronly; /* readonly filesystem */ + inoptr s_mntpt; /* Mount point inode */ + dev_t s_dev; /* Fs device */ +} filesys_t, *fsptr; + +/* open file descriptor */ +typedef struct oft { + off_t o_ptr; /* File position pointer */ + inoptr o_inode; /* Pointer into in-core inode table */ + uchar o_access; /* O_RDONLY, O_WRONLY, or O_RDWR */ + uchar o_refs; /* Ref count: depends on # of active children */ +} oft_t, *ofptr; + +#ifndef _PSTATE_T +#define _PSTATE_T +/* Process table p_status values */ +typedef enum { + P_EMPTY = 0, /* Unused slot */ + P_ZOMBIE, /* 1. Exited. */ + P_FORKING, /* 2. In process of forking; do not mess with */ + P_RUNNING, /* 3. Currently running process */ + P_READY, /* 4. Runnable process */ + P_SLEEP, /* 5. Sleeping; can be awakened by signal */ + P_XSLEEP, /* 6. Sleeping, don't wake up for signal */ + P_PAUSE, /* 7. Sleeping for pause(); can wakeup for signal */ + P_WAIT, /* 8. Executed a wait() */ + P_STOPED /* 9. Process is stoped */ +} pstate_t; +#endif + +#define PRIO_MAX 19 +#define PRIO_MIN -20 + +#define WNOHANG 1 +#define WUNTRACED 2 + +/* Process table entry */ +typedef struct s_ptab { + pstate_t p_status; /* Process status */ + int p_pid; /* Process ID */ + uchar p_uid; /* User ID */ + uchar p_cprio; /* Process current priority */ +/* uchar p_prio; /* Process base priority - NOT IMPLEMENTED */ + signed char p_nice; /* Process nice value (-20 to 19) */ +/* uchar p_mapped; /* Process not in UZIX kernel - NOT USED */ +/* page_t p_map[3]; /* Process memory map - NOT USED */ + page_t p_swap[2]; /* Swapping parameters */ + struct s_ptab *p_pptr; /* Process's parent table entry */ + int p_exitval; /* Exit value */ + /* Everything below here is overlaid by time info at exit */ + void *p_break; /* process break level */ + void *p_sp; /* saved stack pointer when swapped out */ + void *p_udata; /* back pointer to saved udata */ + uint p_alarm; /* Seconds until alarm goes off */ + void *p_wait; /* Address of thing waited for */ + sigset_t p_pending; /* Pending signals */ + sigset_t p_ignored; /* Ignored signals */ + uchar p_intr; /* !0 if awakened by signal */ +} ptab_t, *ptptr; + +#define FORALLPROCS(p) for ((p) = ptab; (p) < ptab + PTABSIZE; ++(p)) + +/* Per-process data (Swapped with process) */ +typedef struct s_udata { + ptab_t *u_ptab; /* Process table pointer */ + uchar u_name[DIRNAMELEN]; /* Name invoked with */ + + /* syscall's interface */ + uchar u_insys; /* True if in kernel now */ + uchar u_callno; /* syscall being executed */ + uchar u_error; /* Last error number */ + uchar u_traceme; /* Process tracing flag */ + int u_argn1; /* First arg */ + int u_argn2; /* Second arg */ + int u_argn3; /* Third arg */ + int u_argn4; /* Fourth arg (only for lseek) */ + int u_retval; /* Return value from syscall */ + int u_retval1; /* for long return value */ + + /* I/O interface */ + uchar *u_base; /* Source or dest for I/O */ + count_t u_count; /* Amount for I/O */ + off_t u_offset; /* Place in file for I/O */ + bufptr u_buf; + + /* filesystem info */ + uchar u_gid; /* process group id */ + uchar u_euid; /* effective user id */ + uchar u_egid; /* effective group id */ + mode_t u_mask; /* umask: file creation mode mask */ + time_t u_time; /* Start time */ + uchar u_files[UFTSIZE]; /* Proc file table: cont indexes into oft */ + inoptr u_root; /* Pointer into inode table for root */ + inoptr u_cwd; /* Pointer into inode table for cwd */ + + /* processes flow info */ + void *u_break; /* Top of data space */ + inoptr u_ino; /* Used during execve() */ + uchar u_inint; /* Inint value right before swapping */ + + void (*u_sigvec[NSIGS]) __P((signal_t)); /* Array of signal vectors */ + signal_t u_cursig; /* Signal currently being caught (1..NSIGS) */ + time_t u_utime; /* Elapsed ticks in user mode */ + time_t u_stime; /* Ticks in system mode */ + time_t u_cutime; /* Total children's ticks */ + time_t u_cstime; /* Total system children's ticks */ +} udata_t; + +/* The device driver switch table */ +typedef struct s_devsw { + uchar minors; /* # of minor device numbers */ + int (*dev_init) __P((uchar minor)); + int (*dev_open) __P((uchar minor)); + int (*dev_close) __P((uchar minor)); + int (*dev_read) __P((uchar minor, uchar rawflag)); + int (*dev_write) __P((uchar minor, uchar rawflag)); + int (*dev_ioctl) __P((uchar minor, int cmd, void *data)); +} devsw_t; + +/* Info about a specific process, returned by sys_getfsys */ +typedef struct s_pdata { + int u_pid; /* Process PID */ + ptab_t *u_ptab; /* Process table pointer */ + uchar u_name[DIRNAMELEN]; /* Name invoked with */ + + /* syscall's interface */ + uchar u_insys; /* True if in kernel now */ + uchar u_callno; /* syscall being executed */ + uchar u_traceme; /* Process tracing flag */ + + /* filesystem/user info */ + uchar u_uid; /* user id */ + uchar u_gid; /* group id */ + uchar u_euid; /* effective user id */ + uchar u_egid; /* group user id */ + time_t u_time; /* Start time */ + + /* process flow info */ + signal_t u_cursig; /* Signal currently being caught */ + + /* time info */ + time_t u_utime; /* Elapsed ticks in user mode */ + time_t u_stime; /* Ticks in system mode */ +}; + +/* Info about kernel, returned by sys_getfsys */ +typedef struct s_kdata { + uchar k_name[14]; /* OS name */ + uchar k_version[8]; /* OS version */ + uchar k_release[8]; /* OS release */ + uchar k_machine[8]; /* Host machine */ + int k_tmem; /* System memory, in kbytes */ + int k_kmem; /* Kernel memory, in kbytes */ +}; + +#define REFRESH_VECTORS() (!(((exeptr)PROGBASE)->e_flags & 0x80)) + +#ifdef UZIX_MODULE + +#define RESET_MODULE() (((exeptr)PROGBASE)->e_flags &= ~0x40) +#define SET_MODULE() (((exeptr)PROGBASE)->e_flags |= 0x40) +#define IS_MODULE() ((((exeptr)PROGBASE)->e_flags & 0x40) != 0) + +typedef int (*fcnhnd_t) (); /* Function call handler typedef */ + +/* Module table */ +typedef struct s_mtable { + int sig; /* Module signature */ + fcnhnd_t fcn_hnd;/* Module function call handler */ + page_t page[2];/* Module process pages */ +} modtab_t, *modtabptr; + +/* Module reply table */ +typedef struct s_mreply { + int sig; /* Module signature */ + int fcn; /* Function called */ + int pid; /* Requester PID */ + char *replyaddr; /* Reply data address */ + int replysize; /* Reply data size */ +} modreply_t, *modreplyptr; + +#endif + +/* sys_getset() commands */ +#define GET_PID 0 /* get process id */ +#define GET_PPID 1 /* get parent process id */ +#define GET_UID 2 /* get user id */ +#define SET_UID 3 /* set user id */ +#define GET_EUID 4 /* get effective user id */ +#define GET_GID 5 /* get group id */ +#define SET_GID 6 /* set group id */ +#define GET_EGID 7 /* get effective group id */ +#define GET_PRIO 8 /* get process priority */ +#define SET_PRIO 9 /* set process priority */ +#define SET_UMASK 10 /* get/set umask */ +#define SET_TRACE 11 /* set trace flag */ + +#endif diff --git a/src/nos/crt/utsname.c b/src/nos/crt/utsname.c new file mode 100644 index 00000000..1c1fb9aa --- /dev/null +++ b/src/nos/crt/utsname.c @@ -0,0 +1,39 @@ +/* + * utsname.c for UZIX + * by A&L Software 1999 + * + */ + +#include +#include +#include +#include +#ifdef __TURBOC__ +#include <..\kernel\unix.h> +/* Nick #endif */ +#else /* Nick #ifdef HI_TECH_C */ +#include +#endif + +int uname (__utsbuf) + struct utsname *__utsbuf; +{ + struct s_kdata kdata; + int i; + + getfsys(GI_KDAT, &kdata); + strcpy(__utsbuf->sysname,kdata.k_name); +#if 1 /* Nick */ + strcpy(__utsbuf->nodename,kdata.k_host); +#else + strcpy(__utsbuf->nodename,kdata.k_name); + for (i=0;inodename);i++) + __utsbuf->nodename[i]=tolower(__utsbuf->nodename[i]); +#endif + strcpy(__utsbuf->release,kdata.k_release); + strcpy(__utsbuf->version,kdata.k_version); + strcpy(__utsbuf->machine,kdata.k_machine); + strcpy(__utsbuf->domainname,"(localhost)"); + return 0; +} + \ No newline at end of file diff --git a/src/nos/crt/vfprintf.c b/src/nos/crt/vfprintf.c new file mode 100644 index 00000000..21cea9b7 --- /dev/null +++ b/src/nos/crt/vfprintf.c @@ -0,0 +1,287 @@ +/* printf.c + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + * + * Altered to use stdarg, made the core function vfprintf. + * Hooked into the stdio package using 'inside information' + * Altered sizeof() assumptions, now assumes all integers except chars + * will be either + * sizeof(xxx) == sizeof(long) or sizeof(xxx) == sizeof(short) + * + * -RDB + */ + +#include "printf.h" + +#ifdef L_vfprintf + +#ifdef FLOATS +extern void _fnum(double val, char fmt, int prec, char *ptmp); +#endif + +#if 0 /* Nick see vprinter.c */ +/* + * Output the given field in the manner specified by the arguments. Return + * the number of characters output. + */ +static int prtfld __P((FILE *op, unsigned char *buf, + int ljustf, char sign, char pad, + int width, int preci, int buffer_mode)); + +static int prtfld(op, buf, ljustf, sign, pad, width, preci, buffer_mode) + register FILE *op; + register unsigned char *buf; + int ljustf; + register char sign; + char pad; + register int width; + int preci; + int buffer_mode; +{ + register unsigned char ch; + register int cnt = 0, len = strlen(buf); + + if (*buf == '-') + sign = *buf++; + else if (sign) + len++; + if ((preci != -1) && (len > preci)) /* limit max data width */ + len = preci; + if (width < len) /* flexible field width or width overflow */ + width = len; + /* at this point: width = total field width, len = actual data width + * (including possible sign character) + */ + cnt = width; + width -= len; + while (width || len) { + if (!ljustf && width) { /* left padding */ + if (len && sign && (pad == '0')) + goto showsign; + ch = pad; + --width; + } + else if (len) { + if (sign) { +showsign: ch = sign; /* sign */ + sign = '\0'; + } + else ch = *buf++; /* main field */ + --len; + } + else { + ch = pad; /* right padding */ + --width; + } + putc(ch, op); + if (ch == '\n' && buffer_mode == _IOLBF) + fflush(op); + } + return (cnt); +} +#endif + +/* Nick static */ int vfprintf(op, fmt, ap) + FILE *op; + register char *fmt; + register va_list ap; +{ +#if 1 /* Nick see vprinter.c */ + return __vprinter(__fputter, op, fmt, ap); +#else + register int i, ljustf, lval, preci, dpoint, width, radix, cnt = 0; + char pad, sign, hash; + register char *ptmp, *add; + unsigned long val; + char tmp[64]; + int buffer_mode; + + /* This speeds things up a bit for unbuffered */ + buffer_mode = (op->mode & __MODE_BUF); + op->mode &= (~__MODE_BUF); + while (*fmt) { + if (*fmt == '%') { + if (buffer_mode == _IONBF) + fflush(op); + ljustf = 0; /* left justify flag */ + sign = '\0'; /* sign char & status */ + pad = ' '; /* justification padding char */ + width = -1; /* min field width */ + dpoint = 0; /* found decimal point */ + preci = -1; /* max data width */ + radix = 10; /* number base */ + ptmp = tmp; /* pointer to area to print */ + hash = 0; + lval = (sizeof(int) == sizeof(long)); /* long value flaged */ +fmtnxt: for (i = 0, ++fmt; ; ++fmt) { + if (*fmt < '0' || *fmt > '9') + break; + i *= 10; + i += (*fmt - '0'); + if (dpoint) + preci = i; + else if (!i && (pad == ' ')) { + pad = '0'; + goto fmtnxt; + } + else width = i; + } + switch (*fmt) { + case '\0': /* early EOS */ + --fmt; + goto charout; + + case '-': /* left justification */ + ljustf = 1; + goto fmtnxt; + + case ' ': + case '+': /* leading sign flag */ + sign = *fmt; + goto fmtnxt; + + case '#': + hash = 1; + goto fmtnxt; + + case '*': /* parameter width value */ + i = va_arg(ap, int); + if (dpoint) + preci = i; + else if ((width = i) < 0) { + ljustf = 1; + width = -i; + } + goto fmtnxt; + + case '.': /* secondary width field */ + dpoint = 1; + goto fmtnxt; + + case 'l': /* long data */ + lval = 1; + goto fmtnxt; + + case 'h': /* short data */ + lval = 0; + goto fmtnxt; + + case 'd': /* Signed decimal */ + case 'i': + ptmp = ltoa((long) ((lval) ? + va_arg(ap, long) : + va_arg(ap, short)), + tmp, 10); + goto printit; + + case 'b': /* Unsigned binary */ + radix = 2; + goto usproc; + + case 'o': /* Unsigned octal */ + radix = 8; + goto usproc; + + case 'p': /* Pointer */ + lval = (sizeof(char *) == sizeof(long)); + pad = '0'; + width = 5; + preci = 8; + /* fall thru */ + + case 'X': /* Unsigned hexadecimal 'ABC' */ + radix = 16; + goto usproc; + + case 'x': /* Unsigned hexadecimal 'abc' */ + radix = -16; + /* fall thru */ + + case 'u': /* Unsigned decimal */ +usproc: val = lval ? va_arg(ap, unsigned long) : + va_arg(ap, unsigned short); + ptmp = ultoa(val, tmp+4, radix); + add = ""; + if (hash) { + if (radix == 2) + add = "0b"; + else if (radix == 8) { + if (val != 0) + add = "0"; + } + else if (radix == 16) + add = "0x"; + else if (radix == -16) + add = "0X"; + if (*add) { + pad = '\0'; + strcpy(tmp,add); + ptmp = strcat(tmp,ptmp); + } + } + goto printit; + + case '!': /* inline Character */ + if ((i = fmt[1]) != 0) + ++fmt; + goto Chr; + + case 'c': /* Character */ + i = va_arg(ap, int); +Chr: ptmp[0] = i; + ptmp[1] = '\0'; + if (hash) { + pad = *ptmp; + goto chrpad; + } + goto nopad; + + case 's': /* String */ + ptmp = va_arg(ap, char *); +nopad: pad = ' '; +chrpad: sign = '\0'; +printit: cnt += prtfld(op, (unsigned char *)ptmp, + ljustf, sign, pad, width, preci, + buffer_mode); + break; + +#ifdef FLOATS + case 'e': /* float */ + case 'f': + case 'g': + case 'E': + case 'G': + _fnum (va_arg(ap, double), + *fmt, preci, ptmp); + /* double arg; + char fmt; (e/f/g/E/G) + int preci; (width, -1 if no) + char *ptmp; (where to print) + */ + preci = -1; + goto printit; + /* FALLTHROUGH if no floating printf available */ +#endif + default: /* unknown character */ + goto charout; + } + } + else { +charout: putc(*fmt, op); /* normal char out */ + ++cnt; + if (*fmt == '\n' && buffer_mode == _IOLBF) + fflush(op); + } + ++fmt; + } + op->mode |= buffer_mode; + if (buffer_mode == _IONBF) + fflush(op); + if (buffer_mode == _IOLBF) + op->bufwrite = op->bufstart; + return (cnt); +#endif +} +#endif + diff --git a/src/nos/crt/vfscanf.c b/src/nos/crt/vfscanf.c new file mode 100644 index 00000000..cd513dbd --- /dev/null +++ b/src/nos/crt/vfscanf.c @@ -0,0 +1,375 @@ +/* scanf.c + */ + +#include "scanf.h" + +#ifdef L_vfscanf +/* #define skip() do{c=getc(fp); if (c<1) goto done;}while(isspace(c)) */ + +#define skip() while(isspace(c)) { if ((c = getc(fp)) <= 0) goto done; } + +#ifdef FLOATS +/* fp scan actions */ +#define F_NADA 0 /* just change state */ +#define F_SIGN 1 /* set sign */ +#define F_ESIGN 2 /* set exponent's sign */ +#define F_INT 3 /* adjust integer part */ +#define F_FRAC 4 /* adjust fraction part */ +#define F_EXP 5 /* adjust exponent part */ +#define F_QUIT 6 + +#define NSTATE 8 +#define FS_INIT 0 /* initial state */ +#define FS_SIGNED 1 /* saw sign */ +#define FS_DIGS 2 /* saw digits, no . */ +#define FS_DOT 3 /* saw ., no digits */ +#define FS_DD 4 /* saw digits and . */ +#define FS_E 5 /* saw 'e' */ +#define FS_ESIGN 6 /* saw exp's sign */ +#define FS_EDIGS 7 /* saw exp's digits */ + +#define FC_DIG 0 +#define FC_DOT 1 +#define FC_E 2 +#define FC_SIGN 3 + +/* given transition,state do what action? */ +int fp_do[][NSTATE] = { + {F_INT, F_INT, F_INT, F_FRAC, F_FRAC, F_EXP, F_EXP, F_EXP}, /* see digit */ + {F_NADA, F_NADA, F_NADA, F_QUIT, F_QUIT, F_QUIT, F_QUIT, F_QUIT}, /* see '.' */ + {F_QUIT, F_QUIT, F_NADA, F_QUIT, F_NADA, F_QUIT, F_QUIT, F_QUIT}, /* see e/E */ + {F_SIGN, F_QUIT, F_QUIT, F_QUIT, F_QUIT, F_ESIGN, F_QUIT, F_QUIT}, /* see sign */ +}; + +/* given transition,state what is new state? */ +int fp_ns[][NSTATE] = { + {FS_DIGS, FS_DIGS, FS_DIGS, FS_DD, FS_DD, FS_EDIGS, FS_EDIGS, FS_EDIGS}, /* see digit */ + {FS_DOT, FS_DOT, FS_DD,}, /* see '.' */ + {0, 0, FS_E, 0, FS_E,}, /* see e/E */ + {FS_SIGNED, 0, 0, 0, 0, FS_ESIGN, 0, 0}, /* see sign */ +}; + +/* which states are valid terminators? */ +int fp_sval[NSTATE] = { + 0, 0, 1, 0, 1, 0, 0, 1 +}; + +double fp_scan(neg, eneg, n, frac, expo, fraclen) +int neg, eneg, fraclen; +long n, frac, expo; +{ + double l; + long exp; + int i; + + l = (double)n; + exp = expo; + if (eneg) exp = -exp; + for (i = 1; i <= fraclen; i++) l *= 10; + l += (double)frac; + exp -= fraclen; + while (exp < 0) { + l /= 10; + exp++; + } + while (exp > 0) { + l *= 10; + exp--; + } + if (neg) return -l; + return l; +} + +#endif + +#if 1 +int vfscanf(fp, fmt, ap) /* Nick */ +#else +static int vfscanf(fp, fmt, ap) +#endif + register FILE *fp; + register char *fmt; + va_list ap; +{ + register long n; + register /*unsigned*/ char *p; + /*unsigned*/ char delim[128], digits[17]; + unsigned char *q; + int store, neg, base, wide1, endnull, rngflag, c2; + register int c, width, lval, cnt = 0; +#ifdef FLOATS + long frac, expo; + int eneg, fraclen, fstate, trans; + double fx, fp_scan(); +#endif + + if (fmt == NULL || *fmt == 0) + return (0); + c = getc(fp); + while (c > 0) { + store = 0; + if (*fmt == '%') { + n = 0; + width = -1; + wide1 = 1; + base = 10; + lval = (sizeof(long) == sizeof(int)); + store = 1; + endnull = 1; + neg = -1; + strcpy(delim, "\011\012\013\014\015 "); + strcpy(digits, "0123456789ABCDEF"); + if (fmt[1] == '*') { + endnull = store = 0; + ++fmt; + } + while (isdigit(*++fmt)) { /* width digit(s) */ + if (width == -1) + width = 0; + wide1 = width = (width * 10) + (*fmt - '0'); + } + --fmt; +fmtnxt: ++fmt; + switch (_tolower(*fmt)) { /* _tolower() is a MACRO! */ + case '*': + endnull = store = 0; + goto fmtnxt; + case 'l': /* long data */ + lval = 1; + goto fmtnxt; + case 'h': /* short data */ + lval = 0; + goto fmtnxt; + + case 'i': /* any-base numeric */ + base = 0; + goto numfmt; + case 'b': /* unsigned binary */ + base = 2; + goto numfmt; + case 'o': /* unsigned octal */ + base = 8; + goto numfmt; + case 'x': /* unsigned hexadecimal */ + base = 16; + goto numfmt; + case 'd': /* SIGNED decimal */ + neg = 0; + /* FALL-THRU */ + case 'u': /* unsigned decimal */ +numfmt: skip(); + if (isupper(*fmt)) + lval = 1; + if (!base) { + base = 10; + neg = 0; + if (c == '%') { + base = 2; + goto skip1; + } + else if (c == '0') { + if ((c = getc(fp)) <= 0) + goto savnum; + if ((c == 'b') || (c == 'B')) { + base = 2; + digits[2] = '\0'; + goto zeroin; + } + if ((c != 'x') && (c != 'X')) { + base = 8; + digits[8] = '\0'; + goto zeroin; + } + base = 16; + goto skip1; + } + } + if ((neg == 0) && + (base == 10) && + ((neg = (c == '-')) != 0 || (c == '+'))) { +skip1: if ((c = getc(fp)) <= 0) + goto done; + } + digits[base] = '\0'; + p = strchr(digits, _toupper(c)); + if ((!c || !p) && width) + goto done; + while (p && width-- && c) { + n = (n * base) + (p - digits); + c = getc(fp); +zeroin: p = strchr(digits, _toupper(c)); + } +savnum: if (store) { + if (neg == 1) + n = -n; + if (lval) + *va_arg(ap, long *) = n; + else *va_arg(ap, short *) = n; + ++cnt; + } + break; +#ifdef FLOATS + case 'e': /* float */ + case 'f': + case 'g': + skip(); + if (isupper(*fmt)) + lval = 1; + fstate = FS_INIT; + neg = 0; + eneg = 0; + n = 0; + frac = 0; + expo = 0; + fraclen = 0; + while (c && width--) { + if (c >= '0' && c <= '9') + trans = FC_DIG; + else if (c == '.') + trans = FC_DOT; + else if (c == '+' || c == '-') + trans = FC_SIGN; + else if (_toupper(c) == 'E') + trans = FC_E; + else goto fdone; + switch (fp_do[trans][fstate]) { + case F_SIGN: + neg = (c == '-'); + break; + case F_ESIGN: + eneg = (c == '-'); + break; + case F_INT: + n *= 10; + n += (c - '0'); + break; + case F_FRAC: + frac *= 10; + frac += (c - '0'); + fraclen++; + break; + case F_EXP: + expo *= 10; + expo += (c - '0'); + break; + case F_QUIT: + goto fdone; + } + fstate = fp_ns[trans][fstate]; + c = getc(fp); + } +fdone: if (!fp_sval[fstate]) + goto done; + if (store) { + fx = fp_scan(neg, eneg, n, frac, expo, fraclen); + if (lval) + *va_arg(ap, double *) = fx; + else *va_arg(ap, float *) = fx; + ++cnt; + } + break; +#endif + case 'c': /* character data */ + width = wide1; + lval = endnull = 0; + delim[0] = '\0'; + goto strproc; + case '[': /* string w/ delimiter set */ + /* get delimiters */ + p = delim; + if (*++fmt == '^') { + fmt++; + lval = 0; + } + else lval = 1; + rngflag = 2; + if ((*fmt == ']') || (*fmt == '-')) { + *p++ = *fmt++; + rngflag = 0; + } + while (*fmt != ']') { + if (*fmt == '\0') + goto done; + switch (rngflag) { + case 1: + c2 = *(p - 2); + if (c2 <= *fmt) { + p -= 2; + while (c2 < *fmt) + *p++ = c2++; + rngflag = 2; + break; + } + /* fall thru intentional */ + case 0: + rngflag = (*fmt == '-'); + break; + case 2: + rngflag = 0; + } + *p++ = *fmt++; + } + *p = '\0'; + goto strproc; + + case 's': /* string data */ + lval = 0; + skip(); +strproc: /* process string */ + p = va_arg(ap, char *); + /* if the 1st char fails, match fails */ + if (width) { + q = ((unsigned char *) + strchr(delim, c)); + if ((c <= 0) || lval == (q == 0)) { + if (endnull) + *p = '\0'; + goto done; + } + } + for (;;) { /* FOREVER */ + if (store) + *p++ = c; + if (((c = getc(fp)) <= 0) || + (--width == 0)) + break; + + q = ((unsigned char *) + strchr(delim, c)); + if (lval == (q == 0)) + break; + } + if (store) { + if (endnull) + *p = '\0'; + ++cnt; + } + break; + case '\0': /* early EOS */ + --fmt; + /* FALL THRU */ + default: + goto cmatch; + } + } + else if (isspace(*fmt)) { /* skip whitespace */ + skip(); + } + else { /* normal match char */ +cmatch: if (c != *fmt) + break; + c = getc(fp); + } + if (!*++fmt) + break; + } +done: /* end of scan */ + if ((c == EOF) && (cnt == 0)) + return (EOF); + if (c != EOF) + ungetc(c, fp); + return (cnt); +} + +#endif + \ No newline at end of file diff --git a/src/nos/crt/vprinter.c b/src/nos/crt/vprinter.c new file mode 100644 index 00000000..c68da00f --- /dev/null +++ b/src/nos/crt/vprinter.c @@ -0,0 +1,322 @@ +/* vprinter.c + * Nick Downing, Hytech + * + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + * + * Altered to use stdarg, made the core function vprinter (Nick). + * Doesn't now hook into the stdio package using 'inside information' + * Altered sizeof() assumptions, now assumes all integers except chars + * will be either + * sizeof(xxx) == sizeof(long) or sizeof(xxx) == sizeof(short) + * + * -RDB + */ + +#include "printf.h" + +#ifdef L_vprinter + +#ifdef FLOATS +extern void _fnum(double val, char fmt, int prec, char *ptmp); +#endif + +/* + * Output the given field in the manner specified by the arguments. Return + * the number of characters output. + */ +static int prtfld __P((unsigned int (*pp)(void *, unsigned int, FILE *), + FILE *op, unsigned char *buf, + int ljustf, char sign, char pad, + int width, int preci)); + +static int prtfld(pp, op, buf, ljustf, sign, pad, width, preci) + unsigned int (*pp)(void *, unsigned int, FILE *); + register FILE *op; + register unsigned char *buf; + int ljustf; + register char sign; + char pad; + register int width; + int preci; +{ + register unsigned char ch; + register int cnt = 0, len = strlen(buf); +#if 1 + char tmp[64], *todo; + + todo = tmp; +#endif + if (*buf == '-') + sign = *buf++; + else if (sign) + len++; + if ((preci != -1) && (len > preci)) /* limit max data width */ + len = preci; + if (width < len) /* flexible field width or width overflow */ + width = len; + /* at this point: width = total field width, len = actual data width + * (including possible sign character) + */ + cnt = width; + width -= len; + while (width || len) { + if (!ljustf && width) { /* left padding */ + if (len && sign && (pad == '0')) + goto showsign; + ch = pad; + --width; + } + else if (len) { + if (sign) { +showsign: ch = sign; /* sign */ + sign = '\0'; + } + else ch = *buf++; /* main field */ + --len; + } + else { + ch = pad; /* right padding */ + --width; + } +#if 1 + if (todo >= (tmp + sizeof(tmp))) + { + pp(tmp, todo - tmp, op); + todo = tmp; + } + *todo++ = ch; +#else + putc(ch, op); + if (ch == '\n' && buffer_mode == _IOLBF) + fflush(op); +#endif + } +#if 1 + if (todo > tmp) + { + pp(tmp, todo - tmp, op); + /* todo = tmp; */ + } +#endif + return (cnt); +} + +int __vprinter(pp, op, fmt, ap) + unsigned int (*pp)(void *, unsigned int, FILE *); + FILE *op; + char *fmt; + va_list ap; +{ + register int i, ljustf, lval, preci, dpoint, width, radix, cnt = 0; + char pad, sign, hash; + register char *ptmp, *add; + unsigned long val; + char tmp[64]; + int buffer_mode; + char *done; + + done = fmt; + while (*fmt) { + if (*fmt == '%') { +#if 1 + if (fmt > done) + { + cnt += pp(done, fmt - done, op); + done = fmt; + } +#else + if (buffer_mode == _IONBF) + fflush(op); +#endif + ljustf = 0; /* left justify flag */ + sign = '\0'; /* sign char & status */ + pad = ' '; /* justification padding char */ + width = -1; /* min field width */ + dpoint = 0; /* found decimal point */ + preci = -1; /* max data width */ + radix = 10; /* number base */ + ptmp = tmp; /* pointer to area to print */ + hash = 0; + lval = (sizeof(int) == sizeof(long)); /* long value flaged */ +fmtnxt: for (i = 0, ++fmt; ; ++fmt) { + if (*fmt < '0' || *fmt > '9') + break; + i *= 10; + i += (*fmt - '0'); + if (dpoint) + preci = i; + else if (!i && (pad == ' ')) { + pad = '0'; + goto fmtnxt; + } + else width = i; + } + switch (*fmt) { + case '\0': /* early EOS */ + --fmt; + goto charout; + + case '-': /* left justification */ + ljustf = 1; + goto fmtnxt; + + case ' ': + case '+': /* leading sign flag */ + sign = *fmt; + goto fmtnxt; + + case '#': + hash = 1; + goto fmtnxt; + + case '*': /* parameter width value */ + i = va_arg(ap, int); + if (dpoint) + preci = i; + else if ((width = i) < 0) { + ljustf = 1; + width = -i; + } + goto fmtnxt; + + case '.': /* secondary width field */ + dpoint = 1; + goto fmtnxt; + + case 'l': /* long data */ + lval = 1; + goto fmtnxt; + + case 'h': /* short data */ + lval = 0; + goto fmtnxt; + + case 'd': /* Signed decimal */ + case 'i': + ptmp = ltoa((long) ((lval) ? + va_arg(ap, long) : + va_arg(ap, short)), + tmp, 10); + goto printit; + + case 'b': /* Unsigned binary */ + radix = 2; + goto usproc; + + case 'o': /* Unsigned octal */ + radix = 8; + goto usproc; + + case 'p': /* Pointer */ + lval = (sizeof(char *) == sizeof(long)); + pad = '0'; + width = 5; + preci = 8; + /* fall thru */ + + case 'X': /* Unsigned hexadecimal 'ABC' */ + radix = 16; + goto usproc; + + case 'x': /* Unsigned hexadecimal 'abc' */ + radix = -16; + /* fall thru */ + + case 'u': /* Unsigned decimal */ +usproc: val = lval ? va_arg(ap, unsigned long) : + va_arg(ap, unsigned short); + ptmp = ultoa(val, tmp+4, radix); + add = ""; + if (hash) { + if (radix == 2) + add = "0b"; + else if (radix == 8) { + if (val != 0) + add = "0"; + } + else if (radix == 16) + add = "0x"; + else if (radix == -16) + add = "0X"; + if (*add) { + pad = '\0'; + strcpy(tmp,add); + ptmp = strcat(tmp,ptmp); + } + } + goto printit; + + case '!': /* inline Character */ + if ((i = fmt[1]) != 0) + ++fmt; + goto Chr; + + case 'c': /* Character */ + i = va_arg(ap, int); +Chr: ptmp[0] = i; + ptmp[1] = '\0'; + if (hash) { + pad = *ptmp; + goto chrpad; + } + goto nopad; + + case 's': /* String */ + ptmp = va_arg(ap, char *); +nopad: pad = ' '; +chrpad: sign = '\0'; +printit: cnt += prtfld(pp, op, (unsigned char *)ptmp, + ljustf, sign, pad, width, preci); + break; + +#ifdef FLOATS + case 'e': /* float */ + case 'f': + case 'g': + case 'E': + case 'G': + _fnum (va_arg(ap, double), + *fmt, preci, ptmp); + /* double arg; + char fmt; (e/f/g/E/G) + int preci; (width, -1 if no) + char *ptmp; (where to print) + */ + preci = -1; + goto printit; + /* FALLTHROUGH if no floating printf available */ +#endif + default: /* unknown character */ +#if 1 + done = fmt; +#endif + goto charout; + } +#if 1 + done = fmt + 1; +#endif + } +#if 0 + else { +#endif +charout: +#if 0 + putc(*fmt, op); /* normal char out */ + ++cnt; + if (*fmt == '\n' && buffer_mode == _IOLBF) + fflush(op); + } +#endif + ++fmt; + } + if (fmt > done) + { + cnt += pp(done, fmt - done, op); + /* done = fmt; */ + } + return cnt; +} +#endif + diff --git a/src/nos/crt/vprintf.c b/src/nos/crt/vprintf.c new file mode 100644 index 00000000..c5dc0f68 --- /dev/null +++ b/src/nos/crt/vprintf.c @@ -0,0 +1,25 @@ +/* printf.c + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + * + * Altered to use stdarg, made the core function vfprintf. + * Hooked into the stdio package using 'inside information' + * Altered sizeof() assumptions, now assumes all integers except chars + * will be either + * sizeof(xxx) == sizeof(long) or sizeof(xxx) == sizeof(short) + * + * -RDB + */ + +#include "printf.h" + +#ifdef L_vprintf +int vprintf(fmt, ap) + char *fmt; + va_list ap; +{ + return vfprintf(stdout, fmt, ap); +} +#endif + diff --git a/src/nos/crt/vscanf.c b/src/nos/crt/vscanf.c new file mode 100644 index 00000000..701d660c --- /dev/null +++ b/src/nos/crt/vscanf.c @@ -0,0 +1,14 @@ +/* scanf.c + */ + +#include "scanf.h" + +#ifdef L_vscanf +int vscanf(fmt, ap) + char *fmt; + va_list ap; +{ + return vfscanf(stdin, fmt, ap); +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/vsprintf.c b/src/nos/crt/vsprintf.c new file mode 100644 index 00000000..a7d5085f --- /dev/null +++ b/src/nos/crt/vsprintf.c @@ -0,0 +1,43 @@ +/* printf.c + * Dale Schumacher 399 Beacon Ave. + * (alias: Dalnefre') St. Paul, MN 55104 + * dal@syntel.UUCP United States of America + * + * Altered to use stdarg, made the core function vfprintf. + * Hooked into the stdio package using 'inside information' + * Altered sizeof() assumptions, now assumes all integers except chars + * will be either + * sizeof(xxx) == sizeof(long) or sizeof(xxx) == sizeof(short) + * + * -RDB + */ + +#include "printf.h" + +#ifdef L_vsprintf +int vsprintf(sp, fmt, ap) + char *sp; + char *fmt; + va_list ap; +{ +#if 0 /* Nick */ + static FILE string[1] = { + { 0, 0, (unsigned char *)-1, 0, (unsigned char *)-1, -1, + _IOFBF | __MODE_WRITE + } + }; +#endif + int rv; + +#if 1 /* Nick */ + rv = __vprinter(__sputter, (FILE *)&sp, fmt, ap); + *(unsigned char *)sp = 0; +#else + string->bufpos = (unsigned char *)sp; + rv = vfprintf(string, fmt, ap); + *(string->bufpos) = 0; +#endif + return rv; +} +#endif + diff --git a/src/nos/crt/vsscanf.c b/src/nos/crt/vsscanf.c new file mode 100644 index 00000000..53952296 --- /dev/null +++ b/src/nos/crt/vsscanf.c @@ -0,0 +1,21 @@ +/* scanf.c + */ + +#include "scanf.h" + +#ifdef L_vsscanf +int vsscanf(sp, fmt, ap) + char *sp; + char *fmt; + va_list ap; +{ + static FILE string[1] = { + { 0, (unsigned char *)-1, 0, 0, (unsigned char *)-1, -1, + _IOFBF | __MODE_READ + } + }; + string->bufpos = (unsigned char *)sp; + return vfscanf(string, fmt, ap); +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/xitoa.c b/src/nos/crt/xitoa.c new file mode 100644 index 00000000..63a5ae52 --- /dev/null +++ b/src/nos/crt/xitoa.c @@ -0,0 +1,14 @@ +/* numeric/string conversions package + */ + +#include "cvt.h" + +/*********************** xitoa.c ***************************/ +#ifdef L_xitoa +char *_itoa(i) + int i; +{ + return ltostr((long)i,10); +} +#endif + \ No newline at end of file diff --git a/src/nos/crt/xltoa.c b/src/nos/crt/xltoa.c new file mode 100644 index 00000000..64e98bde --- /dev/null +++ b/src/nos/crt/xltoa.c @@ -0,0 +1,20 @@ +/* numeric/string conversions package + */ + +#include "cvt.h" + +/*************************** xltoa.c ***************************/ +#ifdef L_xltoa +char *_ultoa(val) + unsigned long val; +{ + return ultostr(val,10); +} + +char *_ltoa(val) + long val; +{ + return ltostr(val,10); +} +#endif + \ No newline at end of file diff --git a/src/nos/doc/bmexe332.zip b/src/nos/doc/bmexe332.zip new file mode 100644 index 0000000000000000000000000000000000000000..49fccdaf43cdb5107de15eee3f687f42b7302c29 GIT binary patch literal 29697 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 literal 0 HcmV?d00001 diff --git a/src/nos/doc/bmexe332/BM.DOC b/src/nos/doc/bmexe332/BM.DOC new file mode 100644 index 00000000..e4eef552 --- /dev/null +++ b/src/nos/doc/bmexe332/BM.DOC @@ -0,0 +1,595 @@ + + + + BM User Manual + + Dave Trulli, NN2Z + + + + + 1. _W_h_a_t__i_s__B_M__? + + BBBBMMMM is designed to serve as the mail user-interface for the + KA9Q TCP/IP inter-networking package. It provides a full + set of mail services to the user which allows the sending + and receipt of electronic mail. + + + + 2. _B_M__I_n_s_t_a_l_l_a_t_i_o_n + + To install BBBBMMMM requires the modification of the supplied + configuration files and the creation of the proper + directory structure. The following sections describe the + file and directory structure used by BBBBMMMM and SMTP. + + + 2.1 _D_i_r_e_c_t_o_r_y__S_t_r_u_c_t_u_r_e + + \spool\mqueue This directory holds the outbound mail + jobs for SMTP. Each job consists of 2 + files a xxxx.txt and xxxx.wrk file where + xxxx is a unique numerical prefix. The + format of the files are described in a + later section. + + + \spool\rqueue This directory is used by SMTP for jobs + that have been received and will be + processed by a user defined mail routing + program. This directory is not used + directly by BBBBMMMM. + + + \spool\mail This directory holds the individual + mailboxes for each user name on your + system. The extension .txt is add to the + user name to form the mailbox name. Mail + received by the SMTP server is appended to + the mailbox file. + + + 2.2 _C_o_n_f_i_g_u_r_a_t_i_o_n__F_i_l_e_s + + + + + + + + + + + + + + + + + - 2 - + + + + 2.2.1 _T_h_e__\_b_m_._r_c__f_i_l_e The \bm.rc file provides BBBBMMMM with + the configuration needed for the operation of the mailer. + + The format for the \bm.rc file is: + + variable value + + + The following variables are valid in the bm.rc file: + + + _s_m_t_p___<_m_a_i_l__p_a_t_h_> + + defines the path to the directory containing the mailbox + files. The default directory is \spool\mail on the + current drive. + + + _h_o_s_t__<_y_o_u_r__h_o_s_t__n_a_m_e_> + + Is used to set the local hostname for use in the RFC822 + mail headers. This is a required field. + + + _u_s_e_r__<_u_s_e_r__n_a_m_e_> + + Defines the user name of the person who is sending mail. + This is also used as the default mailbox for reading mail. + On the AMPRNET this is usually set to your call. There is + a DOS limit of 8 characters for the user name. + + + _e_d_i_t___<_p_a_t_h__o_f__y_o_u_r__e_d_i_t_o_r_> + + Defines the name of your favorite editor which can be used + to construct and edit the text of outgoing messages. The + use of edit is optional. + + + _f_u_l_l_n_a_m_e__<_y_o_u_r__f_u_l_l__n_a_m_e_> + + Is used to provide your full name to the mailer for use in + the comment portion of "From:" header line. The use of + fullname is optional. + + + + + + + + + + + + + + + + + + + - 3 - + + + + _r_e_p_l_y___<_r_e_t_u_r_n__a_d_d_r_e_s_s_> + + Defines the address where you wish to receive replies to + messages sent. This option is useful if you are operating + your pc on a local area network and would like your mail + replies sent to a more "well known host". The address + specified by reply is used to generate a "Reply-To:" + header in outbound mail. The "Reply-To:" header overrides + the "From:" header which is the address normally used to + reply to mail. This field is optional. + + + _m_a_x_l_e_t___<_n_u_m_b_e_r__o_f__m_e_s_s_a_g_e_s_> + + defines the maximum number of messages that can be + processed by BBBBMMMM in one mailbox file. The default value of + maxlet is 100. + + + _m_b_o_x__<_f_i_l_e_n_a_m_e_> + + Specifies the default file to be used for the "save" + command. This file is in the same format as a mailbox and + may later be viewed using the -f option of BBBBMMMM. If this + option is not used then the default is set to mbox. + + + _r_e_c_o_r_d__<_f_i_l_e_n_a_m_e_> + + If defined a copy of each message sent will be saved in + . + + + _f_o_l_d_e_r__<_d_i_r_e_c_t_o_r_y__n_a_m_e_> + + If defined folder contains the path used by the save + command. + + + _s_c_r_e_e_n__[_b_i_o_s__|__d_i_r_e_c_t_] + + In the Turboc compiled version of BBBBMMMM, screen sets the + display output mode to use either direct writes to screen + memory or the ROM BIOS. The default is direct which + provides the fastest output mode. If you are using a + windowing system such as Desqview you should set the mode + to bios. + + Here is a sample bm.rc file. + + + + + + + + + + + + + + - 4 - + + + + host nn2z.ampr + user nn2z + fullname Dave Trulli + # send my replies to the Sun + reply nn2z@ka9q.bellcore.com + screen direct + edit /bin/vi + mbox c:/folder/mbox + record c:/folder/outmail + folder c:/folder + maxlet 200 + + + + 2.13.1 _T_h_e__\_a_l_i_a_s__f_i_l_e The alias file provides an easy + way to maintain mailing lists. An alias can be any string + of characters not containing the "@" symbol. The format + for the alias file is: + + alias recip1 recip2 recip3 + recip4 + + Note that a long list of aliases can be continued on an + additional line by placing a tab or space on the + continuation line. + + Some examples aliases are: + + dave nn2z@nn2z.ampr + + phil karn@ka9q.bellcore.com + + # mail to local nnj users + nnj wb2cop@wb2cop.ampr karn@ka9q.bellcore.com + wb0mpq@home.wb0mpq.ampr w2kb@w2kb.ampr ka2tsm@ka2tsm.ampr + + In the above example, when specifying nnj as the + recipient, BBBBMMMM will expand the alias into the list of + recipients from the alias file. At this time an alias may + not contain any other aliases. + + + 2.13.2 _\_s_p_o_o_l_\_m_q_u_e_u_e_\_s_e_q_u_e_n_c_e_._s_e_q The sequence file + maintains a message counter which is used by BBBBMMMM and SSSSMMMMTTTTPPPP + to generate message ids and unique filenames. This file + is created by BBBBMMMM. + + + + + + + + + + + + + + + + + - 5 - + + + + 2.14 _E_n_v_i_r_o_n_m_e_n_t + + The timezone used in mail headers is obtained from the DOS + environment variable TZ. An example TZ setting is: + + set TZ=EDT4 + + It is set in your AUTOEXEC.BAT file. The first 3 + characters are the timezone and the fourth character is + the number of hours from GMT time. If TZ is not set, GMT + is assumed. + + + + 3. _C_o_m_m_a_n_d_s + + All BBBBMMMM commands are single letters followed by optional + arguments. The command list has been designed to make + those familiar with Berkeley mailers comfortable with BBBBMMMM. + + + 3.1 _M_a_i_n__m_e_n_u__c_o_m_m_a_n_d_s + + _m__[__u_s_e_r_l_i_s_t__] + + The mail command is used to send a message to one or more + recipients. All local recipient names ( those which don't + contain an '@' ) are checked for possible aliases. If no + arguments are supplied you will be prompted for a + recipient list. While entering a message into the text + buffer several commands are available such as: invoking an + editor, and reading in text from other messages or files. + See the section below for a description of these commands. + To end a message enter a line containing a single period. + + It is important to remember that the input line buffer has + a 128 character limit. You should format your text by + entering a carriage return at the end of each line. Typing + excessively long lines may cause data loss due to + truncation when passing the message through other hosts. + Keeping lines less than 80 characters is always a good + idea. + + + _d__[__m_s_g_l_i_s_t__] + + Mark messages for deletion. Messages marked for deletion + are removed when exiting BBBBMMMM via the qqqq command or when + changing to an alternate mailbox with the nnnn command. + + + + + + + + + + + + + + - 6 - + + + + _h + + Display message headers. The message headers contain the + message number, the status indicating whether it has been + read or deleted, the sender, size, date, and subject. + + + _u__[__m_s_g_l_i_s_t__] + + Undelete a message that is marked for deletion. The status + of a message can be determined by looking at the status + field of the message using the hhhh command. + + + _n__[__m_a_i_l_b_o_x__] + + Display or change mailbox. The nnnn command with no arguments + will display a list of mailboxes containing mail. If an + argument is supplied, then the current mailbox is closed + and a new mailbox is opened. + + + _!__c_m_d + + Run a DOS command from inside BBBBMMMM. An error message will + result if there is not enough memory available to load the + command. + + + _? + + Print a help menu for BBBBMMMM commands. + + + _s__[__m_s_g_l_i_s_t__]__[__f_i_l_e__] + + The ssss command is used to save messages in a file. If no + filename is given the default from the mbox variable in + \bm.rc is used. If no message number is supplied then the + current message is saved. The message is stored in the + same format as a mailbox file with all mail headers left + intact. + + + _p__[__m_s_g_l_i_s_t__] + + The pppp command is used to send messages to the printer. + This command uses the DOS device PPPPRRRRNNNN for output. This + command is equivalent to: + + + + + + + + + + + + + + - 7 - + + + + s [ msglist ] PRN + + + + _w__[__m_s_g_l_i_s_t__]__f_i_l_e + + The wwww command is used to save messages in a file. Only the + message body is saved. All mail headers are removed. If + no message number is supplied then the current message is + saved. + + + _f__[__m_s_g__] + + The ffff command is used to forward a mail message to another + recipient. If no message number is supplied the current + message is used. The user is prompted for the recipients + and a subject. The RFC822 header is added to the message + text while retaining the complete original message in the + body. Also see the ~m command. + + + _b__[__m_s_g__] + + Bounce a message. Bounce is similar to forwarding but + instead of your user information, the original sender + information is maintained. If no message number is + supplied the current message is used. + + + _r__[__m_s_g__] + + Reply to a message. Reply reads the header information in + order to construct a reply to the sender. The destination + information is taken from the "From:" or the "Reply- + To:"header, if included. If no message number is supplied + the current message is used. + + + _m_s_g_# + + Entering a message number from the header listing will + cause the message text to be displayed. + + + _l + + List outbound messages. The job number, the sender, and + the destination for each message is displayed. A status of + "L" will appear if the SMTP sender has the file locked. + + + + + + + + + + + + + - 8 - + + + + _k__[__m_s_g_l_i_s_t__] + + Remove an outbound message from the mqueue. A message can + be removed from the send queue by specifying the job + number obtained by the l command. If the message is + locked you will be warned that you may be removing a file + that is currently being sent by SMTP. You will asked if + this job should still be killed. + + + + _$ + + Update the mailbox. This command updates the mailbox, + deleting messages marked for deletion and reading in any + new mail that may have arrived since entering BBBBMMMM. + + + _x + + Exit to DOS without changing the data in the mailbox. + + + _q + + Quit to DOS updating the mailbox. + + + 3.21 _T_e_x_t__i_n_p_u_t__c_o_m_m_a_n_d_s + + The following commands are available while entering + message text into the message buffer. + + ~r read into the message buffer. + + ~m read into the message buffer. + + ~p display the text in the message buffer. + + ~e invoke the editor defined in \bm.rc with a + temporary file containing the text in the + message buffer. + + ~q Abort the current message. No data is sent. + + ~~ Insert a single tilda character into the + message. + + ~? Display help menu of tilda escape commands. + + + + + + + + + + + + + + - 9 - + + + + 4. _M_a_i_l_e_r__O_p_e_r_a_t_i_o_n + + 4.1 _C_o_m_m_a_n_d__L_i_n_e__O_p_t_i_o_n_s + + BBBBMMMM may be invoked as follows: + + To send mail: + bm [ -s subject ] recip1 .. .. recipN + + To read mail: + bm [ -u mailbox | -f file ] + + -s subject This option sets the subject to the text on + the command line. + + + -u mailbox Specify which mailbox to read. This + overides the default from the bm.rc. + + + -f file Read message from "file" instead of a + mailbox. + + 4.2 _S_e_n_d_i_n_g__M_a_i_l + + 4.3 _R_e_a_d_i_n_g__M_a_i_l + + + 5. _B_M_/_S_M_T_P__I_n_t_e_r_f_a_c_e + + 5.1 _F_i_l_e__F_o_r_m_a_t_s + + + 6. _B_u_g__R_e_p_o_r_t_s + + Please send any comments, suggestions or bug reports to: + + Dave Trulli + Usenet: nn2z@ka9q.bellcore.com + packet: nn2z@nn2z + AMPRNET: nn2z@nn2z.ampr [44.64.0.10] + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/nos/doc/bmexe332/BM.EXE b/src/nos/doc/bmexe332/BM.EXE new file mode 100644 index 0000000000000000000000000000000000000000..18372e415243bf84955ab9bbf706b10e26f4655f GIT binary patch literal 33500 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 value +.DE + +The following variables are valid in the bm.rc file: +.sp +.HU "smtp " +defines the path to the directory containing the mailbox files. +The default directory is \\spool\\mail on the current drive. + +.HU "host " +Is used to set the local hostname for use +in the RFC822 mail headers. This is a required field. + +.HU "user " +Defines the user name of the person who is sending mail. +This is also used as the default mailbox for reading mail. +On the AMPRNET this is usually set to your call. +There is a DOS limit of 8 characters for the user name. + +.HU "edit " +Defines the name of your favorite editor which can be used +to construct and edit the text of outgoing messages. +The use of edit is optional. + +.HU "fullname " +Is used to provide your full name +to the mailer for use in the comment portion of "From:" header line. +The use of fullname is optional. + +.HU "reply " +Defines the address where you wish to receive replies to messages sent. +This option is useful if you are operating your pc on a local area +network and would like your mail replies sent to a more "well known host". +The address specified by reply is used to generate a "Reply-To:" header +in outbound mail. The "Reply-To:" header overrides the "From:" header +which is the address normally used to reply to mail. This field is optional. + +.HU "maxlet " +defines the maximum number of messages that can be processed +by \f3BM\f1 in one mailbox file. The default value of maxlet is 100. + +.HU "mbox " +Specifies the default file to be used for the "save" command. +This file is in the same format as a mailbox and may later be viewed using +the -f option of \f3BM\f1. If this option is not used then the default is set +to mbox. + +.HU "record " +If defined a copy of each message sent will be saved +in . + +.HU "folder " +If defined folder contains the path used by the save command. + +.HU "screen [bios | direct]" +In the Turboc compiled version of \f3BM\f1, screen sets the display output mode +to use either direct writes to screen memory or the ROM BIOS. +The default is direct which provides the fastest output mode. +If you are using a windowing system +such as Desqview you should set the mode to bios. +.sp +Here is a sample bm.rc file. +.DS I +host nn2z.ampr +user nn2z +fullname Dave Trulli +# send my replies to the Sun +reply nn2z@ka9q.bellcore.com +screen direct +edit /bin/vi +mbox c:/folder/mbox +record c:/folder/outmail +folder c:/folder +maxlet 200 +.DE + +.H 3 "The %alias file" +The alias file provides an easy way to maintain mailing lists. +An alias can be any string of characters not containing the "@" symbol. +The format for the alias file is: +.DS I +alias recip1 recip2 recip3 + recip4 +.DE +Note that a long list of aliases can be continued on an additional line +by placing a tab or space on the continuation line. +.sp +Some examples aliases are: +.DS I +dave nn2z@nn2z.ampr + +phil karn@ka9q.bellcore.com + +# mail to local nnj users +nnj wb2cop@wb2cop.ampr karn@ka9q.bellcore.com + wb0mpq@home.wb0mpq.ampr w2kb@w2kb.ampr ka2tsm@ka2tsm.ampr +.DE +In the above example, when specifying nnj as the recipient, +\f3BM\f1 will expand the alias into the +list of recipients from the alias file. +At this time an alias may not contain any other aliases. + +.H 3 "%spool%mqueue%sequence.seq" +The sequence file maintains a message counter which is used +by \f3BM\f1 and \f3SMTP\f1 to generate message ids and unique filenames. +This file is created by \f3BM\f1. + +.H 2 "Environment" +The timezone used in mail headers is obtained from the DOS +environment variable TZ. An example TZ setting is: +.DS I +set TZ=EDT4 +.DE +It is set in your AUTOEXEC.BAT file. The first 3 characters are the +timezone and the fourth character is the number of hours +from GMT time. If TZ is not set, GMT is assumed. + +.H 1 "Commands" +All \f3BM\f1 commands are single letters followed by optional arguments. +The command list has been designed to make those familiar with Berkeley +mailers comfortable with \f3BM\f1. + +.H 2 "Main menu commands" +.HU "m [ userlist ] +The mail command is used to send a message to one or more recipients. +All local recipient names ( those which don't contain an '@' ) are +checked for possible aliases. +If no arguments are supplied you will be prompted for a recipient list. +While entering a message into the text buffer several commands are +available such as: invoking an editor, and reading in text from other messages +or files. See the section below for a description of these commands. +To end a message enter a line containing a single period. +.P +It is important to remember that the input line buffer has a 128 character +limit. You should format your text by entering a carriage return at the +end of each line. Typing excessively long lines may cause data loss +due to truncation when passing the message through other hosts. +Keeping lines less than 80 characters is always a good idea. + +.HU "d [ msglist ]" +Mark messages for deletion. +Messages marked for deletion are removed when exiting \f3BM\f1 via the +\f3q\f1 command or when changing to an alternate mailbox with the +\f3n\f1 command. + +.HU h +Display message headers. The message headers contain the message +number, the status indicating whether it has been read or deleted, the sender, +size, date, and subject. + +.HU "u [ msglist ]" +Undelete a message that is marked for deletion. The status +of a message can be determined by looking at the status field of the +message using the \f3h\f1 command. + +.HU "n [ mailbox ]" +Display or change mailbox. The \f3n\f1 command with no arguments +will display a list of mailboxes containing mail. If an argument +is supplied, then the current mailbox is closed and a +new mailbox is opened. + +.HU "! cmd" +Run a DOS command from inside \f3BM\f1. An error message will result if +there is not enough memory available to load the command. + +.HU ? +Print a help menu for \f3BM\f1 commands. + +.HU "s [ msglist ] [ file ]" +The \f3s\f1 command is used to save +messages in a file. If no filename is given the default from +the mbox variable in \\bm.rc is used. +If no message number is supplied then the current message is saved. +The message is stored in the same format as a mailbox file with +all mail headers left intact. + +.HU "p [ msglist ]" +The \f3p\f1 command is used to send messages to the printer. +This command uses the DOS device \f3PRN\f1 for output. +This command is equivalent to: +.DS CB +s [ msglist ] PRN +.DE + +.HU "w [ msglist ] file" +The \f3w\f1 command is used to save messages +in a file. Only the message body is saved. All mail headers +are removed. +If no message number is supplied then the current message is saved. + +.HU "f [ msg ]" +The \f3f\f1 command is used to forward a mail message to another recipient. +If no message number is supplied the current message is used. +The user is prompted for the recipients and a subject. The RFC822 +header is added to the message text while retaining the complete +original message in the body. +Also see the ~m command. + +.HU "b [ msg ]" +Bounce a message. Bounce is similar to forwarding but instead of +your user information, +the original sender information is maintained. +If no message number is supplied the current message is used. + +.HU "r [ msg ]" +Reply to a message. Reply reads the header information in order +to construct a reply to the sender. +The destination information is taken from the "From:" +or the "Reply-To:"header, if included. +If no message number is supplied the current message is used. + +.HU msg # +Entering a message number from the header listing will +cause the message text to be displayed. + +.HU l +List outbound messages. +The job number, the sender, and the destination for each message +is displayed. A status of "L" will appear if the SMTP sender +has the file locked. + +.HU "k [ msglist ]" +Remove an outbound message from the mqueue. +A message can be removed from the send +queue by specifying the job number obtained by the l command. +If the message is locked you will be warned that you may +be removing a file that is currently being sent by SMTP. You +will asked if this job should still be killed. + + +.HU $ +Update the mailbox. This command updates the mailbox, deleting messages +marked for deletion and reading in any new mail that may have +arrived since entering \f3BM\f1. + +.HU x +Exit to DOS without changing the data in the mailbox. + +.HU q +Quit to DOS updating the mailbox. + +.H 2 "Text input commands" +The following commands are available while entering message text into +the message buffer. +.VL 15 +.LI "~r " +read into the message buffer. +.LI "~m " +read into the message buffer. +.LI ~p +display the text in the message buffer. +.LI ~e +invoke the editor defined in \\bm.rc with +a temporary file containing the text in the message buffer. +.LI ~q +Abort the current message. No data is sent. +.LI ~~ +Insert a single tilda character into the message. +.LI ~? +Display help menu of tilda escape commands. +.LE + +.H 1 "Mailer Operation" +.H 2 "Command Line Options" +\f3BM\f1 may be invoked as follows: +.DS I +To send mail: +bm [ -s subject ] recip1 .. .. recipN + +To read mail: +bm [ -u mailbox | -f file ] +.DE +.VL 15 +.LI "-s subject" +This option sets the subject to the text on the command line. + +.LI "-u mailbox" +Specify which mailbox to read. This overides the default from the bm.rc. + +.LI "-f file" +Read message from "file" instead of a mailbox. +.LE +.H 2 "Sending Mail" +.H 2 "Reading Mail" +.H 1 "BM/SMTP Interface" +.H 2 "File Formats" +.H 1 "Bug Reports" +Please send any comments, suggestions or bug reports to: +.DS CE +Dave Trulli +Usenet: nn2z@ka9q.bellcore.com +packet: nn2z@nn2z +AMPRNET: nn2z@nn2z.ampr [44.64.0.10] +.DE + \ No newline at end of file diff --git a/src/nos/doc/bmpgp01.zip b/src/nos/doc/bmpgp01.zip new file mode 100644 index 0000000000000000000000000000000000000000..a77ccb93ca8c3ae4404df4225111eeeb3c22f152 GIT binary patch literal 75610 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 gmLNGJM;Zq!S`rr literal 0 HcmV?d00001 diff --git a/src/nos/doc/bmpgp01/BM.DOC b/src/nos/doc/bmpgp01/BM.DOC new file mode 100644 index 00000000..74dbaf54 --- /dev/null +++ b/src/nos/doc/bmpgp01/BM.DOC @@ -0,0 +1,525 @@ + BM User Manual + Dave Trulli, NN2Z + Emil LAURENTIU YO3GGH + + +1. What_is_BM_? + +BM is designed to serve as the mail user-interface for the +KA9Q TCP/IP inter-networking package. It provides a full +set of mail services to the user which allows the sending +and receipt of electronic mail. + + + +2. BM_Installation + +To install BM requires the modification of the supplied +configuration files and the creation of the proper +directory structure. The following sections describe the +file and directory structure used by BM and SMTP. + + +2.1 Directory_Structure + +\spool\mqueue This directory holds the outbound mail + jobs for SMTP. Each job consists of 2 + files a xxxx.txt and xxxx.wrk file where + xxxx is a unique numerical prefix. The + format of the files are described in a + later section. + + +\spool\rqueue This directory is used by SMTP for jobs + that have been received and will be + processed by a user defined mail routing + program. This directory is not used + directly by BM. + + +\spool\mail This directory holds the individual + mailboxes for each user name on your + system. The extension .txt is add to the + user name to form the mailbox name. Mail + received by the SMTP server is appended to + the mailbox file. + + +2.2 Configuration_Files + +2.2.1 The_\bm.rc_file The \bm.rc file provides BM with +the configuration needed for the operation of the mailer. + +The format for the \bm.rc file is: + + variable value + + +The following variables are valid in the bm.rc file: + + +smtp__ + +defines the path to the directory containing the mailbox +files. The default directory is \spool\mail on the +current drive. + + +host_ + +Is used to set the local hostname for use in the RFC822 +mail headers. This is a required field. + + +user_ + +Defines the user name of the person who is sending mail. +This is also used as the default mailbox for reading mail. +On the AMPRNET this is usually set to your call. There is +a DOS limit of 8 characters for the user name. + + +edit__ + +Defines the name of your favorite editor which can be used +to construct and edit the text of outgoing messages. The +use of edit is optional. + + +fullname_ + +Is used to provide your full name to the mailer for use in +the comment portion of "From:" header line. The use of +fullname is optional. + + + +reply__ + +Defines the address where you wish to receive replies to +messages sent. This option is useful if you are operating +your pc on a local area network and would like your mail +replies sent to a more "well known host". The address +specified by reply is used to generate a "Reply-To:" +header in outbound mail. The "Reply-To:" header overrides +the "From:" header which is the address normally used to +reply to mail. This field is optional. + + +maxlet__ + +defines the maximum number of messages that can be +processed by BM in one mailbox file. The default value of +maxlet is 100. + + +mbox_ + +Specifies the default file to be used for the "save" +command. This file is in the same format as a mailbox and +may later be viewed using the -f option of BM. If this +option is not used then the default is set to mbox. + + +record_ + +If defined a copy of each message sent will be saved in +. + + +folder_ + +If defined folder contains the path used by the save +command. + + +screen_[bios_|_direct] + +In the Turboc compiled version of BM, screen sets the +display output mode to use either direct writes to screen +memory or the ROM BIOS. The default is direct which +provides the fastest output mode. If you are using a +windowing system such as Desqview you should set the mode +to bios. + +Here is a sample bm.rc file. + + + + host nn2z.ampr + user nn2z + fullname Dave Trulli + # send my replies to the Sun + reply nn2z@ka9q.bellcore.com + screen direct + edit /bin/vi + mbox c:/folder/mbox + record c:/folder/outmail + folder c:/folder + maxlet 200 + + + +2.13.1 The_\alias_file The alias file provides an easy +way to maintain mailing lists. An alias can be any string +of characters not containing the "@" symbol. The format +for the alias file is: + + alias recip1 recip2 recip3 + recip4 + +Note that a long list of aliases can be continued on an +additional line by placing a tab or space on the +continuation line. + +Some examples aliases are: + + dave nn2z@nn2z.ampr + + phil karn@ka9q.bellcore.com + + # mail to local nnj users + nnj wb2cop@wb2cop.ampr karn@ka9q.bellcore.com + wb0mpq@home.wb0mpq.ampr w2kb@w2kb.ampr ka2tsm@ka2tsm.ampr + +In the above example, when specifying nnj as the +recipient, BM will expand the alias into the list of +recipients from the alias file. At this time an alias may +not contain any other aliases. + + +2.13.2 \spool\mqueue\sequence.seq The sequence file +maintains a message counter which is used by BM and SMTP +to generate message ids and unique filenames. This file +is created by BM. + + + +2.14 Environment + +The timezone used in mail headers is obtained from the DOS +environment variable TZ. An example TZ setting is: + + set TZ=EDT4 + +It is set in your AUTOEXEC.BAT file. The first 3 +characters are the timezone and the fourth character is +the number of hours from GMT time. If TZ is not set, GMT +is assumed. + + set BMRC=path\bm_rc_file + can be used to point to your BM configuration file + +If BMRC points to a valid config file and bm.exe is in your path +you can launch the mailer from anywhere. + + +2.15 PGP Support + +To use PGP encryption make sure that the environment variable PGPPATH +points to your PGP directory and that you have there the pgp.exe +program correctly configured. + +To send encrypted emails simply put [pgp on] and [pgp off] signs around +the text you want to encode. Multiple pgp marks can be used in the same +email. The user name used by PGP to encrypt this is taken from the email +"To" field. If you want to use a different one just use [pgp on name] +instead. + +Decryption is done automatically when an encrypted mail arrives. The +pgp.exe program is spawned and you will be prompted for the password. +Decrypted emails are then saved in clear. + + +2.16 Random signatures + +A signatur.sig file must reside in your mail queue directory to use this +feature. An example of this file can be found in the package. Modify this +file to suit your tastes. +This file will contain all the "cookies" to be used in your signatures +separated by blank lines. +A constant "start" and "end" part of the signature can also be specified. +A polite habit is to use no more than 4 lines of signature for an email. + + +3. Commands + +All BM commands are single letters followed by optional +arguments. The command list has been designed to make +those familiar with Berkeley mailers comfortable with BM. + + +3.1 Main_menu_commands + +m_[_userlist_] + +The mail command is used to send a message to one or more +recipients. All local recipient names ( those which don't +contain an '@' ) are checked for possible aliases. If no +arguments are supplied you will be prompted for a +recipient list. While entering a message into the text +buffer several commands are available such as: invoking an +editor, and reading in text from other messages or files. +See the section below for a description of these commands. +To end a message enter a line containing a single period. + +It is important to remember that the input line buffer has +a 128 character limit. You should format your text by +entering a carriage return at the end of each line. Typing +excessively long lines may cause data loss due to +truncation when passing the message through other hosts. +Keeping lines less than 80 characters is always a good +idea. + + +d_[_msglist_] + +Mark messages for deletion. Messages marked for deletion +are removed when exiting BM via the q command or when +changing to an alternate mailbox with the n command. + + +h + +Display message headers. The message headers contain the +message number, the status indicating whether it has been +read or deleted, the sender, size, date, and subject. + + +u_[_msglist_] + +Undelete a message that is marked for deletion. The status +of a message can be determined by looking at the status +field of the message using the h command. + + +n_[_mailbox_] + +Display or change mailbox. The n command with no arguments +will display a list of mailboxes containing mail. If an +argument is supplied, then the current mailbox is closed +and a new mailbox is opened. + + +!_cmd + +Run a DOS command from inside BM. An error message will +result if there is not enough memory available to load the +command. + + +? + +Print a help menu for BM commands. + + +s_[_msglist_]_[_file_] + +The s command is used to save messages in a file. If no +filename is given the default from the mbox variable in +\bm.rc is used. If no message number is supplied then the +current message is saved. The message is stored in the +same format as a mailbox file with all mail headers left +intact. + + +p_[_msglist_] + +The p command is used to send messages to the printer. +This command uses the DOS device PRN for output. This +command is equivalent to: + + + + s [ msglist ] PRN + + + +w_[_msglist_]_file + +The w command is used to save messages in a file. Only the +message body is saved. All mail headers are removed. If +no message number is supplied then the current message is +saved. + + +f_[_msg_] + +The f command is used to forward a mail message to another +recipient. If no message number is supplied the current +message is used. The user is prompted for the recipients +and a subject. The RFC822 header is added to the message +text while retaining the complete original message in the +body. Also see the ~m command. + + +b_[_msg_] + +Bounce a message. Bounce is similar to forwarding but +instead of your user information, the original sender +information is maintained. If no message number is +supplied the current message is used. + + +r_[_msg_] + +Reply to a message. Reply reads the header information in +order to construct a reply to the sender. The destination +information is taken from the "From:" or the "Reply- +To:"header, if included. If no message number is supplied +the current message is used. + + +msg# + +Entering a message number from the header listing will +cause the message text to be displayed. + + +l + +List outbound messages. The job number, the sender, and +the destination for each message is displayed. A status of +"L" will appear if the SMTP sender has the file locked. + + + +k_[_msglist_] + +Remove an outbound message from the mqueue. A message can +be removed from the send queue by specifying the job +number obtained by the l command. If the message is +locked you will be warned that you may be removing a file +that is currently being sent by SMTP. You will asked if +this job should still be killed. + + +$ + +Update the mailbox. This command updates the mailbox, +deleting messages marked for deletion and reading in any +new mail that may have arrived since entering BM. + + +x + +Exit to DOS without changing the data in the mailbox. + + +q + +Quit to DOS updating the mailbox. + + +3.21 Text_input_commands + +The following commands are available while entering +message text into the message buffer. + +~r read into the message buffer. + +~m read into the message buffer. + +~p display the text in the message buffer. + +~e invoke the editor defined in \bm.rc with a + temporary file containing the text in the + message buffer. + +~q Abort the current message. No data is sent. + +~~ Insert a single tilda character into the + message. + +~? Display help menu of tilda escape commands. + +4. Mailer_Operation + +4.1 Command_Line_Options + +BM may be invoked as follows: + + To send mail: + bm [ -s subject ] recip1 .. .. recipN + + To read mail: + bm [ -u mailbox | -f file ] + +-s subject This option sets the subject to the text on + the command line. + + +-u mailbox Specify which mailbox to read. This + overides the default from the bm.rc. + + +-f file Read message from "file" instead of a + mailbox. + +-------------- +There are a few new things to know about this version of BM: + +The reply command 'rf' or 'Rf' uses the address in the From line. + +The '/' command ignores case and can be used as follows: +/ tcpip +/ "tcpip net" + +The 'n' command has three special options: +n < switches to your recordfile +n > switches to your mbox +n ! switches to your notefile + +Aliases with an "@" in it are allowed. + +The default startup file is bm.rc and should be in the root directory. +Another way is to put BMRC in the environment. +eg. in your autoexec.bat file: +SET BMRC=C:\NET\BM.RC +BM can also be started with another config file; type bm -h for more info. + +The bm.rc defaults are: + +alias /net/alias +mqueue /spool/mqueue +smtp /spool/mail +mbox mbox +tmp /tmp (or TMP in environment) +zone GMT (or TZ in environment) +maxlet 300 + +The default tmp directory is /tmp so if not defined in bm.rc or in the +environment variable TMP make sure this directory exists. +Better is to have a ramdrive as a tmp directory. + +You can have a signature file which must be in the mqueue directory and called +user.sig (where user is the user defined in bm.rc). + +Commands d, p, s, u and w can also be used as follows: + +d * +p 2 4-10 +s 10-20 30-35 +u 3 5 $ +w 5 7 10-$ file +s * /net/mailfile + +Note that * means all messages and $ means the last message in the notefile. + +In compose mode enter a single tilde ( ~ ) as an option to the EDITING HEADING +FIELDS commands to remove a headerline. +eg.: +~R ~ +removes the Reply-To line. + +In Queue mode (bm -q) the From: and the Message-Id: line will be added. + +Marcel +Email: pa3azk@knoware.nl + +Dave Trulli +Email: nn2z@ka9q.bellcore.com + +Emil Laurentiu +Email: emil@interlog.com + diff --git a/src/nos/doc/bmpgp01/BM.EXE b/src/nos/doc/bmpgp01/BM.EXE new file mode 100644 index 0000000000000000000000000000000000000000..9e1f0cb7a2dfd418a167c40494cbfd1c51e7b11a GIT binary patch literal 33337 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 SEz_Cl`4u3IBGvo@0r-Ea +#include +#include +#include +#include +#include + +#define SETVBUF +#include +#include +#include "bm.h" +#include "header.h" + +char *getname( ); +static unsigned long mboxsize; +static int anyread; +static unsigned long mfsize; +char reply_addr[LINELEN]; +char badchar[] = "Invalid name\r\n"; + +#ifdef SETVBUF +#define MYBUF 4096 +char *inbuf = NULLCHAR; /* the stdio buffer for the mail file */ +char *outbuf = NULLCHAR;/* the stdio file io buffer for the temp file */ +#endif + +int +initnotes( ) +{ + FILE *tmpfile( ); + FILE *ifile; + register struct let *cmsg; + int i, ret; + struct stat mstat; + + nmsgs = 0; + current = 0; + change = 0; + newmsgs = 0; + anyread = 0; + if ( !stat( mfilename, &mstat ) ) + mboxsize = mstat.st_size; + else + mboxsize = 0; + if ( ( ifile = fopen( mfilename, "r" ) ) == NULLFILE ) + { + printf( nomail ); + mfile = NULLFILE; + return 0; + } + +#ifdef SETVBUF + if ( inbuf == NULLCHAR ) + inbuf = malloc( MYBUF ); + setvbuf( ifile, inbuf, _IOFBF, MYBUF ); +#endif + + if ( ( mfile = tmpfile( ) ) == NULLFILE ) + { + printf( "Unable to create tmp file\r\n" ); + ( void ) fclose( ifile ); + mfile = NULLFILE; + return 0; + } + +#ifdef SETVBUF + if ( outbuf == NULLCHAR ) + outbuf = malloc( MYBUF ); + setvbuf( mfile, outbuf, _IOFBF, MYBUF ); +#endif + + ret = readnotes( ifile ); + ( void ) fclose( ifile ); + if ( ret != 0 ) + return -1; + +#ifdef SETVBUF + if ( inbuf != NULLCHAR ) + { + ( void ) free( inbuf ); + inbuf = NULLCHAR; + } +#endif + + for ( cmsg = &mbox[1], i = 1; i <= nmsgs; i++, cmsg++ ) + if ( ( cmsg->status & READ ) == 0 ) + { + newmsgs++; + if ( current == 0 ) + current = i; + } + /* start at one if no new messages */ + if ( current == 0 ) + current++; + /* file is empty or not a mail file */ + if ( nmsgs == 0 ) + { + ( void ) fclose( mfile ); + printf( nomail ); + mfile = NULLFILE; + } + return 0; +} + +/* readnotes assumes that ifile is pointing to the first + * message that needs to be read. For initial reads of a + * notefile, this will be the beginning of the file. For + * rereads when new mail arrives, it will be the first new + * message. + */ +readnotes( ifile ) +FILE *ifile; +{ + char tstring[LINELEN]; + long cpos; + register struct let *cmsg; + register char *line; + long ftell( ); + + cmsg = ( struct let * ) NULL; + line = tstring; + while ( !feof( ifile ) ) + { + if ( fgets( line, LINELEN, ifile ) == NULLCHAR ) + break; + /* scan for beginning of a message */ + if ( strncmp( line, "From ", 5 ) == 0 ) + { + cpos = ftell( mfile ); + fputs( line, mfile ); + if ( nmsgs == maxlet - 1 ) + { + printf( "Mailbox full: > %d messages\r\n", maxlet - 1 ); + ( void ) fclose( mfile ); + return -1; + } + nmsgs++; + cmsg = &mbox[nmsgs]; + cmsg->start = cpos; + cmsg->status = 0; + cmsg->size = strlen( line ); + while ( !feof( ifile ) ) + { + if ( fgets( line, LINELEN, ifile ) == NULLCHAR ) + break; + if ( *line == '\n' ) + { /* done header part */ + cmsg->size++; + putc( *line, mfile ); + break; + } + if ( htype( line ) == STATUS ) + { + if ( line[8] == 'R' ) + cmsg->status |= READ; + continue; + } + cmsg->size += strlen( line ); + if ( fputs( line, mfile ) == EOF ) + { + perror( "tmp file" ); + ( void ) fclose( mfile ); + return -1; + } + + } + } + else if ( recv_pgp( line, ifile, mfile, cmsg ) ) + ; + else if ( cmsg ) + { + cmsg->size += strlen( line ); + fputs( line, mfile ); + } + } + return 0; +} + +/* list headers of a notefile */ +listnotes( to_list, argc, argv, msg_num, mlines ) +int to_list; +int argc; +char *argv[]; +int msg_num; +int mlines; +{ + register struct let *cmsg; + register char *a, *b, *p, *q, *s, *D, *M, *T; + char smtp_date[LINELEN], smtp_Day[LINELEN], smtp_Month[LINELEN]; + char smtp_Time[LINELEN], smtp_from[LINELEN], smtp_From[LINELEN]; + char smtp_subject[LINELEN], smtp_to[LINELEN], tstring[LINELEN]; + char qstring[LINELEN]; + int i, c, patt, frm, hdr; + long size; + + if ( mfile == NULLFILE ) + return; + +/* screen_clear(); */ + + if ( nmsgs == 1 && argc == 0 ) + printf( "Mailbox %s %ld bytes - %d message %d new\r\n\n", mfilename, mboxsize, nmsgs, newmsgs ); + else if ( argc == 0 ) + printf( "Mailbox %s %ld bytes - %d messages %d new\r\n\n", mfilename, mboxsize, nmsgs, newmsgs ); + if ( argc != 0 ) + { + a = argv[0]; + to_lower( a ); + } + if ( msg_num == 0 ) + i = 1; + else + i = msg_num; + for ( cmsg = &mbox[i]; i <= nmsgs; i++, cmsg++ ) + { + *smtp_date = '\0'; + *smtp_Day = '\0'; + *smtp_Month = '\0'; + *smtp_Time = '\0'; + *smtp_from = '\0'; + *smtp_From = '\0'; + *smtp_subject = '\0'; + *smtp_to = '\0'; + patt = 0; + frm = 0; + hdr = 0; + fseek( mfile, cmsg->start, 0 ); + size = cmsg->size; + while ( !feof( mfile ) && size > 0 ) + { + if ( fgets( tstring, sizeof( tstring ), mfile ) == NULLCHAR ) + break; + if ( argc != 0 ) + { + strcpy( qstring, tstring ); + b = qstring; + to_lower( b ); + rip( b ); + } + if ( strncmp( tstring, "From ", 5 ) == 0 ) + { + if ( frm == 1 ) + break; + frm = 1; + p = &tstring[5]; + q = &tstring[5]; + while ( *p && *p != ' ' && *p != '\t' && *p != '(' ) + p++; + *p = '\0'; + p = &tstring[5]; + while ( *q != ' ' && *q != '\t' ) + q++; + while ( *q == ' ' || *q == '\t' ) + q++; + M = smtp_Month; + *M++ = *q++; + *M++ = *q++; + *M++ = *q++; + *M = '\0'; + while ( *q == ' ' || *q == '\t' ) + q++; + D = smtp_Day; + if ( atoi( q ) < 10 && *q != '0' ) + *D++ = ' '; + else if ( atoi( q ) < 10 && *q == '0' ) + { + *D++ = ' '; + q++; + } + else + *D++ = *q++; + *D++ = *q++; + *D = '\0'; + while ( *q == ' ' || *q == '\t' ) + q++; + T = smtp_Time; + *T++ = *q++; + *T++ = *q++; + if ( *q == ':' ) + { + *T++ = *q++; + *T++ = *q++; + *T++ = *q++; + *T = '\0'; + } + else + { + *T = '\0'; + *smtp_Day = '\0'; + *smtp_Month = '\0'; + *smtp_Time = '\0'; + } + rip( smtp_Day ); + rip( smtp_Month ); + rip( smtp_Time ); + rip( p ); + sprintf( smtp_From, "%.30s", p ); + } + if ( argc != 0 && patt == 0 ) + if ( strstr( b, a ) != 0 ) + patt = 1; + if ( *tstring == '\n' ) /* end of header */ + if ( argc == 0 ) + break; + else + hdr = 1; + size -= strlen( tstring ); + rip( tstring ); + /* handle continuation later */ + if ( *tstring == ' ' || *tstring == '\t' ) + continue; + if ( hdr == 0 || argc == 0 ) + { + switch ( htype( tstring ) ) + { + case FROM: + if ( ( p = getname( tstring ) ) == NULLCHAR ) + { + p = &tstring[6]; + while ( *p && *p != ' ' && *p != '\t' && *p != '(' ) + p++; + *p = '\0'; + p = &tstring[6]; + } + cleanup_line( p ); + sprintf( smtp_from, "%.30s", p ); + break; + case TO: + if ( ( p = getname( tstring ) ) == NULLCHAR ) + p = &tstring[4]; + cleanup_line( p ); + sprintf( smtp_to, "%.30s", p ); + break; + case SUBJECT: + p = &tstring[9]; + while ( *p == ' ' || *p == '\t' ) + p++; + cleanup_line( p ); + sprintf( smtp_subject, "%.34s", p ); + break; + case DATE: + if ( ( p = strchr( tstring, ',' ) ) == NULLCHAR ) + p = &tstring[6]; + else + p++; + /* skip spaces */ + while ( *p == ' ' || *p == '\t' ) + p++; + if ( strlen( p ) < 17 ) + break; /* not a valid length */ + s = smtp_date; + /* copy day */ + if ( atoi( p ) < 10 && *p != '0' ) + *s++ = ' '; + else if ( atoi( p ) < 10 && *p == '0' ) + { + *s++ = ' '; + p++; + } + else + *s++ = *p++; + *s++ = *p++; + *s++ = ' '; + while ( *p == ' ' || *p == '\t' ) + p++; + /* copy month */ + *s++ = *p++; + *s++ = *p++; + *s++ = *p++; + while ( *p == ' ' || *p == '\t' ) + p++; + /* skip year */ + while ( isdigit( *p ) ) + p++; + /* copy time */ + *s++ = *p++; /* space */ + *s++ = *p++; /* hour */ + *s++ = *p++; + if ( *p == ':' ) + { + *s++ = *p++; /* : */ + *s++ = *p++; /* min */ + *s++ = *p++; + *s = '\0'; + } + else + { + *s = '\0'; + *smtp_date = '\0'; + } + break; + case NOHEADER: + break; + } + } + } + if ( *smtp_from == 0 ) + strcpy( smtp_from, smtp_From ); + if ( *smtp_date == 0 || strlen( smtp_date ) < 12 ) + { + strcpy( smtp_date, smtp_Day ); + strcat( smtp_date, " " ); + strcat( smtp_date, smtp_Month ); + strcat( smtp_date, " " ); + strcat( smtp_date, smtp_Time ); + if ( strlen( smtp_date ) < 12 ) + *smtp_date = '\0'; + } + if ( to_list ) + strcpy( smtp_from, smtp_to ); + if ( argc == 0 || patt ) + { + printf( "%c%c%c%3d %-27.27s %-12.12s %5ld %.25s\r\n", + ( i == current ? '>' : ' ' ), + ( cmsg->status & DELETE ? 'D' : ' ' ), + ( cmsg->status & READ ? 'Y' : 'N' ), + i, smtp_from, smtp_date, + cmsg->size, smtp_subject ); + if ( ( ++mlines % ( MAXROWS - 1 ) ) == 0 ) + { + printf( "--More--" ); + c = getrch( ); + printf( "\r \r" ); + if ( c == EOF || c == 'q' || c == 'Q' || c == 'a' || c == 'A' || + c == 'n' || c == 'N' || c == 's' || c == 'S' ) + break; + mlines = 0; + } + } + } +} + +to_lower( s ) +register char *s; +{ + while ( *s ) + { + if ( isupper( *s ) ) + *s = tolower( *s ); + s++; + } +} + +/* save msg on stream - if noheader set don't output the header */ +/* - if tab put "> " in front of line */ +int +msgtofile( msg, tfile, noheader, tab ) +int msg; +FILE *tfile; /* already open for write */ +int noheader; +int tab; +{ + char tstring[LINELEN]; + long size; + + if ( mfile == NULLFILE ) + { + printf( nomail ); + return -1; + } + fseek( mfile, mbox[msg].start, 0 ); + size = mbox[msg].size; + if ( ( mbox[msg].status & READ ) == 0 ) + { + mbox[msg].status |= READ; + change = 1; + } + + if ( noheader ) + { + /* skip header */ + while ( !feof( mfile ) && size > 0 ) + { + fgets( tstring, sizeof( tstring ), mfile ); + size -= strlen( tstring ); + if ( *tstring == '\n' ) + break; + } + } + while ( !feof( mfile ) && size > 0 ) + { + fgets( tstring, sizeof( tstring ), mfile ); + size -= strlen( tstring ); + if ( tab ) + fputs( "> ", tfile ); + fputs( tstring, tfile ); + if ( ferror( tfile ) ) + { + printf( "Error writing mail file\r\n" ); + ( void ) fclose( tfile ); + return -1; + } + } + return 0; +} + +/* delmsg - delete message in current notefile */ +delmsg( msg ) +int msg; +{ + mbox[msg].status |= DELETE; + change = 1; +} + +/* reply - to a message */ +Reply( msg, org, rf, test_addr, aliasmsg ) +int msg; +int org; +int rf; +int test_addr; +int aliasmsg; +{ + char to[LINELEN]; + char subject[LINELEN]; + char tstring[LINELEN]; + char msgid[LINELEN]; + char date[LINELEN]; + char *f, *p, *q, *s; + char *toarg[1]; + long size; + int msgno; + char from[LINELEN]; + + *to = '\0'; + *subject = '\0'; + *msgid = '\0'; + *date = '\0'; + *from = '\0'; + fseek( mfile, mbox[msg].start, 0 ); + size = mbox[msg].size; + while ( !feof( mfile ) && size > 0 ) + { + fgets( tstring, sizeof( tstring ), mfile ); + size -= strlen( tstring ); + if ( *tstring == '\n' ) /* end of header */ + break; + rip( tstring ); + if ( strncmp( tstring, "From ", 5 ) == 0 ) + { + f = &tstring[5]; + while ( *f && *f != ' ' && *f != '\t' && *f != '(' ) + f++; + *f = '\0'; + f = &tstring[5]; + sprintf( from, "%s", f ); + } + if ( htype( tstring ) == DATE ) + { + q = &tstring[6]; + while ( *q == ' ' || *q == '\t' ) + q++; + if ( *q == '\0' ) + *date = '\0'; + else + sprintf( date, "%s", q ); + } + if ( htype( tstring ) == MSGID ) + { + q = &tstring[12]; + while ( *q == ' ' || *q == '\t' ) + q++; + if ( *q == '\0' ) + *msgid = '\0'; + else + sprintf( msgid, "%s", q ); + } + if ( ( *to == '\0' && htype( tstring ) == FROM ) + || htype( tstring ) == REPLYTO ) + { + s = getname( tstring ); + if ( s == NULLCHAR ) + { + p = strchr( tstring, ':' ); + p += 2; + s = p; + while ( *p && *p != ' ' && *p != '\t' && *p != '(' ) + p++; + *p = '\0'; + } + *to = '\0'; + strncat( to, s, sizeof( to ) ); + } + else if ( htype( tstring ) == SUBJECT ) + { + q = &tstring[9]; + while ( *q == ' ' || *q == '\t' ) + q++; + if ( *q == '\0' ) + *subject = '\0'; + else + { + if ( strncmp( q, "Re:", 3 ) ) /* No Re: yet? */ + if ( strncmp( q, "RE:", 3 ) ) /* No RE: yet? */ + if ( strncmp( q, "re:", 3 ) ) /* No re: yet? */ + sprintf( subject, "Re: %s", q ); + else /* there's an re:, let's not add another */ + sprintf( subject, "%s", q ); + else /* there's an RE:, let's not add another */ + sprintf( subject, "%s", q ); + else /* there's an Re:, let's not add another */ + sprintf( subject, "%s", q ); + } + } + } + if ( *subject == '\0' ) + strcpy( subject, "Re: Your mail" ); + if ( *to == '\0' || rf ) + { + if ( *from != '\0' ) + strcpy( to, from ); + else + { + *to = '\0'; + printf( "No reply address in message\r\n" ); + } + } + if ( aliasmsg ) + strcpy( reply_addr, to ); + else + { + if ( *to != '\0' ) + { + toarg[0] = to; + msgno = msg; + if ( test_addr ) + print_reply_addr( toarg ); + else if ( org ) + dosmtpsend( NULLFILE, toarg, 1, subject, 1, msgno, msgid, + 0, 1, date ); + else + dosmtpsend( NULLFILE, toarg, 1, subject, 0, msgno, msgid, + 0, 1, date ); + } + } +} + +print_reply_addr( toargs ) +char *toargs[]; +{ + struct addr *tolist; + + if ( ( tolist = make_tolist( 1, toargs ) ) == NULLADDR ) + printf( "Invalid address\r\n" ); + else + printtolist( tolist, 0 ); +} + +/* close the temp file while copying mail back to the mailbox */ +int +closenotes( ) +{ + register struct let *cmsg; + register char *line; + char tstring[LINELEN]; + long size; + int i; + int ret; + FILE *nfile; + struct stat mstat; + + if ( mfile == NULLFILE ) + return 0; + if ( !change ) + { + ( void ) fclose( mfile ); + return 0; + } + line = tstring; + fseek( mfile, 0L, 2 ); + if ( isnewmail( ) ) + { + if ( ( nfile = fopen( mfilename, "r" ) ) == NULLFILE ) + perror( mfilename ); + else + { + /* seek to end of old msgs */ + fseek( nfile, mboxsize, 0 ); + /* seek to end of tempfile */ + fseek( mfile, 0L, 2 ); + ret = readnotes( nfile ); /* get the new mail */ + ( void ) fclose( nfile ); + if ( ret != 0 ) + { + printf( "Error updating mail file\r\n" ); + return -1; + } + } + } + if ( ( nfile = fopen( mfilename, "w" ) ) == NULLFILE ) + { + printf( "Unable to open %s\r\n", mfilename ); + return 0; + } + /* copy tmp file back to notes file */ + for ( cmsg = &mbox[1], i = 1; i <= nmsgs; i++, cmsg++ ) + { + fseek( mfile, cmsg->start, 0 ); + size = cmsg->size; + if ( ( cmsg->status & DELETE ) ) + continue; + /* copy the header */ + while ( !feof( mfile ) && size > 0 ) + { + fgets( line, LINELEN, mfile ); + size -= strlen( line ); + if ( *line == '\n' ) + { + if ( ( cmsg->status & READ ) != 0 ) + fprintf( nfile, "Status: R\n" ); + fputs( "\n", nfile ); + break; + } + fputs( line, nfile ); + } + while ( !feof( mfile ) && size > 0 ) + { + fgets( line, LINELEN, mfile ); + fputs( line, nfile ); + size -= strlen( line ); + if ( ferror( nfile ) ) + { + printf( "Error writing mail file\r\n" ); + ( void ) fclose( nfile ); + ( void ) fclose( mfile ); + return 0; + } + } + } + nmsgs = 0; + ( void ) fclose( nfile ); + ( void ) fclose( mfile ); + mfile = NULLFILE; + + /* remove a zero length file */ + if ( stat( mfilename, &mstat ) == 0 && mstat.st_size == 0 ) + if ( dflag || fflag ) + ( void ) unlink( mfilename ); + + return 0; +} + +/* get a message id from the sequence file */ +long +get_msgid( ) +{ + char sfilename[LINELEN]; + char s[20]; + long sequence = 0L; + FILE *sfile; + long atol( ); + + sprintf( sfilename, "%s/sequence.seq", mqueue ); + cleanup_fname( sfilename ); + sfile = fopen( sfilename, "r" ); + + /* if sequence file exists, get the value, otherwise set it */ + if ( sfile != NULLFILE ) + { + fgets( s, sizeof( s ), sfile ); + sequence = atol( s ); + /* Keep it in range of an 8 digit number to use for dos name prefix. */ + if ( sequence < 0L || sequence >= 99999999L ) + sequence = 0L; + ( void ) fclose( sfile ); + } + + /* increment sequence number, and write to sequence file */ + if ( ( sfile = fopen( sfilename, "w" ) ) == NULLFILE ) + { + perror( sfilename ); + return -1; + } + fprintf( sfile, "%ld", ++sequence ); + ( void ) fclose( sfile ); + return sequence; +} + +/* Given a string of the form , extract the part inside the + * brackets and return a pointer to it. + */ +char * +getname( cp ) +register char *cp; +{ + char *cp1; + + if ( ( cp = strchr( cp, '<' ) ) == NULLCHAR ) + return NULLCHAR; + cp++; /* cp -> first char of name */ + if ( ( cp1 = strchr( cp, '>' ) ) == NULLCHAR ) + return NULLCHAR; + *cp1 = '\0'; + return cp; +} + +/* create mail lockfile */ +int +mlock( dir, id ) +char *dir; +char *id; +{ + char lockname[LINELEN]; + int fd; + + /* Try to create the lock file in an atomic operation */ + sprintf( lockname, "%s/%.8s.lck", dir, id ); + cleanup_fname( lockname ); + if ( ( fd = open( lockname, O_WRONLY | O_EXCL | O_CREAT, 0600 ) ) == -1 ) + return -1; + ( void ) close( fd ); + return 0; +} + +/* remove mail lockfile */ +int +rmlock( dir, id ) +char *dir; +char *id; +{ + char lockname[LINELEN]; + + sprintf( lockname, "%s/%.8s.lck", dir, id ); + cleanup_fname( lockname ); + ( void ) unlink( lockname ); +} + +/* parse a line into argv array. Return argc */ +int +parse( line, argv, maxargs ) +register char *line; +char *argv[]; +int maxargs; +{ + int argc; + int pflag; + register char *cp; + + for ( argc = 0; argc < maxargs; argc++ ) + argv[argc] = NULLCHAR; + + for ( argc = 0; argc < maxargs; ) + { + pflag = 0; + /* Skip leading white space */ + while ( *line == ' ' || *line == '\t' ) + line++; + if ( *line == '\0' ) + break; + /* Check for quoted token */ + if ( *line == '"' ) + { + line++; /* Suppress quote */ + pflag = 1; + } + argv[argc++] = line; /* Beginning of token */ + /* Find terminating delimiter */ + if ( pflag ) + { + /* Find quote, it must be present */ + if ( ( line = strchr( line, '"' ) ) == NULLCHAR ) + { + return -1; + } + *line++ = '\0'; + } + else + { + /* + * Find space or tab. If not present, then we've already found the last + * token. + */ + for ( cp = line; *cp; cp++ ) + { + if ( *cp == ' ' || *cp == '\t' ) + break; + } + if ( *cp == '\0' ) + break; + *cp++ = '\0'; + line = cp; + } + } + return argc; +} + +lockit( ) +{ + char line[LINELEN]; + char *p; + + while ( mlock( maildir, notename ) ) + { + printf( "Mail file \"%s\" is busy, Abort or Retry (a/R) ? ", notename ); + gets( line ); + p = line; + while ( *p == ' ' || *p == '\t' ) + p++; + if ( *p == 'A' || *p == 'a' ) + { + if ( mfile != NULLFILE ) + ( void ) fclose( mfile ); + mfile = NULLFILE; + return 1; + } + } + return 0; +} + +/* print the next message or the current on of new */ +printnext( ) +{ + if ( mfile == NULLFILE ) + return; + if ( ( mbox[current].status & READ ) != 0 ) + { + if ( current == 1 && anyread == 0 ) + ; + else if ( current < nmsgs ) + { + current++; + } + else + { + printf( "Last message\r\n" ); + return; + } + } + displaymsg( current ); +} + +/* display message on the crt given msg number */ +displaymsg( msg ) +int msg; +{ + register int c; + register int col; + char buf[MAXCOL + 2];/* line buffer */ + int lines; + int cnt; + long tsize, size; + char cmd[LINELEN]; + FILE *ftmpmsg; + char msgfile[LINELEN]; + char *tmf = "bmXXXXXX"; + + anyread = 1; + if ( pager != NULLCHAR && *pager != '\0' ) + { + sprintf( msgfile, "%s\\%s", tmpdir, tmf ); + mktemp( msgfile ); + if ( ( ftmpmsg = fopen( msgfile, "w+" ) ) == NULLFILE ) + { + perror( msgfile ); + return; + } + fprintf( ftmpmsg, "Message #%d %s\n", + msg, mbox[msg].status & DELETE ? "[Deleted]" : "" ); + if ( ( mbox[msg].status & READ ) == 0 ) + { + mbox[msg].status |= READ; + change = 1; + } + msgtofile( msg, ftmpmsg, 0, 0 ); + ( void ) fclose( ftmpmsg ); + sprintf( cmd, "%s %s", pager, msgfile ); + system( cmd ); + ( void ) unlink( msgfile ); + return; + } + else + { + +/* screen_clear(); */ + fseek( mfile, mbox[msg].start, 0 ); + size = mbox[msg].size; + tsize = size; + + printf( "Message #%d %s\r\n", + msg, mbox[msg].status & DELETE ? "[Deleted]" : "" ); + if ( ( mbox[msg].status & READ ) == 0 ) + { + mbox[msg].status |= READ; + change = 1; + } + lines = 1; + col = 0; + while ( !feof( mfile ) && size > 0 ) + { + for ( col = 0; col < MAXCOL - 2; ) + { + c = getc( mfile ); + size--; + if ( feof( mfile ) || size == 0 ) /* end this line */ + break; + if ( c == '\t' ) + { + cnt = col + 8 - ( col & 7 ); + if ( cnt >= MAXCOL ) /* end this line */ + break; + while ( col < cnt ) + buf[col++] = ' '; + } + else if ( c == '\n' ) + break; + else + buf[col++] = c; + } +#ifdef __TURBOC__ + buf[col++] = '\r'; + buf[col++] = '\n'; + buf[col] = '\0'; + cputs( buf ); +#else + buf[col] = '\0'; + puts( buf ); +#endif + col = 0; + if ( ( ++lines == ( MAXROWS - 1 ) ) ) + { + printf( "--More--(%d%%)", ( tsize - size ) * 100 / tsize ); + c = getrch( ); + printf( "\r \r" ); + if ( c == EOF || c == 'q' || c == 'Q' || c == 'a' || c == 'A' || c == 'n' || c == 'N' || c == 's' || c == 'S' ) + break; +/* screen_clear(); */ + lines = 0; + } + } + } +} + +/* list jobs waiting to be sent in the mqueue */ +listqueue( ) +{ + register struct tm *tminfo; + struct tm *localtime( ); + char tstring[LINELEN]; + char workfile[LINELEN]; + char line[20]; + char host[LINELEN]; + char to[LINELEN]; + char from[LINELEN]; + char *p; + char status; + struct stat stbuf; + FILE *fp; + time_t t; + + time( &t ); + printf( "S Job_ID Size Date Time Host From\r\n" ); + sprintf( workfile, "%s/%s", mqueue, WORK ); + cleanup_fname( workfile ); + filedir( workfile, 0, line ); + while ( line[0] != '\0' ) + { + sprintf( tstring, "%s/%s", mqueue, line ); + cleanup_fname( tstring ); + if ( ( fp = fopen( tstring, "r" ) ) != NULLFILE ) + { + if ( ( p = strrchr( line, '.' ) ) != NULLCHAR ) + *p = '\0'; + sprintf( tstring, "%s/%s.lck", mqueue, line ); + cleanup_fname( tstring ); + if ( access( tstring, 0 ) ) + status = ' '; + else + status = 'L'; + sprintf( tstring, "%s/%s.txt", mqueue, line ); + cleanup_fname( tstring ); + stat( tstring, &stbuf ); + tminfo = localtime( &stbuf.st_ctime ); + *host = '\0'; + fgets( host, sizeof( host ), fp ); + rip( host ); + *from = '\0'; + fgets( from, sizeof( from ), fp ); + rip( from ); + cleanup_line( host ); + cleanup_line( from ); + printf( "%c %7s %7ld %02d/%02d %02d:%02d %-20.20s %s\r\n", + status, line, stbuf.st_size, + tminfo->tm_mon + 1, + tminfo->tm_mday, + tminfo->tm_hour, + tminfo->tm_min, + host, from ); + printf( "To:" ); + *to = '\0'; + while ( fgets( to, sizeof( to ), fp ) != NULLCHAR ) + { + rip( to ); + cleanup_line( to ); + printf( " %s", to ); + } + printf( "\r\n" ); + ( void ) fclose( fp ); + } + else + perror( tstring ); + filedir( workfile, 1, line ); + } +} + +/* kill a job in the mqueue */ +killjob( j ) +char *j; +{ + char s[LINELEN]; + char tbuf[LINELEN]; + char *p; + char *q; + char tstring[XXLINELEN]; + + sprintf( s, "%s/%s.lck", mqueue, j ); + cleanup_fname( s ); + p = strrchr( s, '.' ); + if ( !access( s, 0 ) ) + { + sprintf( tstring, "Warning: Job_ID %s is locked by SMTP. Remove (y/N) ? ", j ); + fputs( tstring, stdout ); + gets( tbuf ); + q = tbuf; + while ( *q == ' ' || *q == '\t' ) + q++; + if ( *q == 'y' || *q == 'Y' ) + ( void ) unlink( s ); + else + return; + } + strcpy( p, ".wrk" ); + if ( unlink( s ) ) + { + sprintf( tstring, "Job_ID %s not found\r\n", j ); + fputs( tstring, stdout ); + } + strcpy( p, ".txt" ); + ( void ) unlink( s ); +} + +/* check the current mailbox to see if new mail has arrived. +* checks to see if the file has increased in size. +* returns true if new mail has arrived. +*/ +isnewmail( ) +{ + struct stat mstat; + + if ( !stat( mfilename, &mstat ) ) + if ( mstat.st_size > mboxsize ) + return 1; + return 0; +} + +cleanup_fname( name ) +register char *name; +{ + while ( *name ) + { + if ( !isprint( *name ) ) + *name = '@'; + + if ( *name == '/' ) + *name = '\\'; + + if ( isupper( *name ) ) + *name = tolower( *name ); + + name++; + } +} + +cleanup_line( line ) +register char *line; +{ + while ( *line ) + { + if ( *line == '\t' ) + *line = ' '; + line++; + } +} + +cleanup_notename( name ) +register char *name; +{ + while ( *name ) + { + + if ( !isalnum( *name ) && ( *name != '_' ) && ( *name != '^' ) && ( *name != '$' ) && ( *name != '~' ) && ( *name != '!' ) && ( *name != '#' ) && ( *name != '%' ) && ( *name != '&' ) && ( *name != '-' ) && ( *name != '{' ) && ( *name != '}' ) && ( *name != '(' ) && ( *name != ')' ) && ( *name != '\'' ) && ( *name != '`' ) ) + *name = '@'; + if ( isupper( *name ) ) + *name = tolower( *name ); + if ( *name == '\\' || *name == '/' ) + *name = '@'; + name++; + } +} + +/* list or change mbox */ +mboxnames( argc, argv, sv ) +int argc; +char *argv[]; +int sv; +{ + register char *cp; + int ret; + char line[LINELEN]; + char buf[LINELEN]; + char *mfile_name; + struct stat mstat; + char mbuf[LINELEN]; + + if ( argc != 0 ) + { + if ( !fflag && lockit( ) ) + return; + ret = closenotes( ); + if ( !fflag ) + rmlock( maildir, notename ); + if ( ret != 0 ) + { + if ( sv ) + savetpfile( ); + exit( 1 ); + } + if ( strcmp( argv[0], "!" ) == 0 ) + { + fflag = 0; + lflag = 0; + strncpy( notename, username, 8 ); + notename[8] = '\0'; + cleanup_notename( notename ); + sprintf( notefile, "%s\\%s.txt", maildir, notename ); + cleanup_fname( notefile ); + mfilename = notefile; + } + else if ( strcmp( argv[0], ">" ) == 0 ) + { + fflag = 1; + lflag = 0; + strncpy( notename, username, 8 ); + notename[8] = '\0'; + cleanup_notename( notename ); + sprintf( mfilename, "%s", savebox ); + cleanup_fname( mfilename ); + } + else if ( strcmp( argv[0], "<" ) == 0 ) + { + fflag = 1; + lflag = 1; + strncpy( notename, username, 8 ); + notename[8] = '\0'; + cleanup_notename( notename ); + sprintf( mfilename, "%s", record ); + cleanup_fname( mfilename ); + } + else if ( strpbrk( argv[0], "/\\" ) != NULLCHAR ) + { + fflag = 1; + lflag = 0; + strncpy( notename, username, 8 ); + notename[8] = '\0'; + cleanup_notename( notename ); + mfile_name = argv[0]; + sprintf( mfilename, "%s", mfile_name ); + cleanup_fname( mfilename ); + } + else + { + fflag = 0; + lflag = 0; + mfilename = notefile; + strncpy( notename, argv[0], 8 ); + notename[8] = '\0'; + cleanup_notename( notename ); + + sprintf( notefile, "%s\\%s.txt", maildir, notename ); + cleanup_fname( notefile ); + } + if ( !fflag && lockit( ) ) + { + if ( sv ) + savetpfile( ); + exit( 1 ); + } + ret = initnotes( ); + if ( !fflag ) + rmlock( maildir, notename ); + if ( ret != 0 ) + { + if ( sv ) + savetpfile( ); + exit( 1 ); + } + if ( lflag ) + listnotes( 1, 0, NULLCHAR, 0, 2 ); + else + listnotes( 0, 0, NULLCHAR, 0, 2 ); + + } + else + { /* he wants to see what notefiles there are */ + sprintf( buf, "%s\\*.txt", maildir ); + cleanup_fname( buf ); + filedir( buf, 0, line ); + while ( line[0] != '\0' ) + { + sprintf( mbuf, "%s/%s", maildir, line ); + cleanup_fname( mbuf ); + if ( !stat( mbuf, &mstat ) ) + { + mfsize = mstat.st_size; + cp = strchr( line, '.' ); + *cp = '\0'; + printf( "Notefile -> %-8.8s %7ld bytes\r\n", line, mfsize ); + } + filedir( buf, 1, line ); + } + } +} + +alias_msg( msg_num ) +int msg_num; +{ + char line[LINELEN]; + char *p; + char abuf[LINELEN]; + char *q; + int ret = 1; + FILE *alfile; + + Reply( msg_num, 0, 1, 0, 1 ); + if ( *reply_addr != '\0' ) + { + printf( "Name: " ); + gets( line ); + p = line; + while ( *p == ' ' || *p == '\t' ) + p++; + if ( *p != '\0' ) + ret = chkname( p ); + else + printf( "No name specified\r\n" ); + } + if ( *reply_addr != '\0' && ret == 0 ) + { + if ( ( in_alias( 1, NULLCHAR, p ) ) == 0 ) + { + printf( "%s %s\r\n", p, reply_addr ); + printf( "Accept new alias (Y/n) ? " ); + gets( abuf ); + q = abuf; + while ( *q == ' ' || *q == '\t' ) + q++; + if ( *q != 'n' && *q != 'N' ) + { + if ( ( alfile = fopen( aliases, "a" ) ) == NULLFILE ) + perror( aliases ); + else + { + fprintf( alfile, "%s %s\n", p, reply_addr ); + ( void ) fclose( alfile ); + printf( "%s appended\r\n", aliases ); + } + } + } + else + printf( "Already an alias for %s\r\n", p ); + } +} + +chkname( s ) +register char *s; +{ + if ( *s == ',' || *s == '#' || !isprint( *s ) ) + { + printf( badchar ); + return 1; + } + else + { + for ( ; *s; s++ ) + { + if ( *s == ' ' || *s == '\t' ) + { + *s = '\0'; + break; + } + if ( *s == ',' || !isprint( *s ) ) + { + printf( badchar ); + return 1; + } + } + } + return 0; +} diff --git a/src/nos/doc/bmpgp01/FILE_ID.DIZ b/src/nos/doc/bmpgp01/FILE_ID.DIZ new file mode 100644 index 00000000..2d4f6eca --- /dev/null +++ b/src/nos/doc/bmpgp01/FILE_ID.DIZ @@ -0,0 +1,11 @@ +ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ +³ BMPGP - B'Dale's mailer /w PGP version 0.1 ³ +ÆÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͵ +³ ³ +³ BM mail user-interface for the KA9Q TCP/IP ³ +³ inter-networking package ³ +³ - build in support for PGP encryption ³ +³ - fortune cookies signatures ³ +³ ³ +³ This program is "Cardware". Sources are included ³ +ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ diff --git a/src/nos/doc/bmpgp01/GETOPT.C b/src/nos/doc/bmpgp01/GETOPT.C new file mode 100644 index 00000000..3aa30d2c --- /dev/null +++ b/src/nos/doc/bmpgp01/GETOPT.C @@ -0,0 +1,78 @@ +/* +* @(#)getopt.c 2.2 (smail) 1/26/87 +*/ + +#define index strchr +#include + +/*LINTLIBRARY*/ +#define EOF (-1) +#define ERR(s, c) if(opterr){\ + extern int write();\ + char errbuf[2];\ + errbuf[0] = c; errbuf[1] = '\n';\ + (void) write(2, argv[0], (unsigned)strlen(argv[0]));\ + (void) write(2, s, (unsigned)strlen(s));\ + (void) write(2, errbuf, 2);} + +extern char *index( ); + +int opterr = 1; +int optind = 1; +int optopt; +char *optarg; + +int +getopt( argc, argv, opts ) +int argc; +char **argv, *opts; +{ + static int sp = 1; + register int c; + register char *cp; + + if ( sp == 1 ) + if ( optind >= argc || + argv[optind][0] != '-' || argv[optind][1] == '\0' ) + return ( EOF ); + else if ( strcmp( argv[optind], "--" ) == 0 ) + { + optind++; + return ( EOF ); + } + optopt = c = argv[optind][sp]; + if ( c == ':' || ( cp = index( opts, c ) ) == 0 ) + { + ERR( ": illegal option -- ", c ); + if ( argv[optind][++sp] == '\0' ) + { + optind++; + sp = 1; + } + return ( '?' ); + } + if ( *++cp == ':' ) + { + if ( argv[optind][sp + 1] != '\0' ) + optarg = &argv[optind++][sp + 1]; + else if ( ++optind >= argc ) + { + ERR( ": option requires an argument -- ", c ); + sp = 1; + return ( '?' ); + } + else + optarg = argv[optind++]; + sp = 1; + } + else + { + if ( argv[optind][++sp] == '\0' ) + { + sp = 1; + optind++; + } + optarg = 0; + } + return ( c ); +} diff --git a/src/nos/doc/bmpgp01/HEADER.C b/src/nos/doc/bmpgp01/HEADER.C new file mode 100644 index 00000000..4560c31f --- /dev/null +++ b/src/nos/doc/bmpgp01/HEADER.C @@ -0,0 +1,56 @@ +#include +#include +#include "bm.h" +#include "header.h" + +struct token hd[] = { + "Status: ", STATUS, + "From: ", FROM, + "To: ", TO, + "Date: ", DATE, + "Message-Id: ", MSGID, + "Subject: ", SUBJECT, + "Reply-To: ", REPLYTO, + NULLCHAR, 0 +}; + +/* return the header token type */ +int +htype( s ) +char *s; +{ + register char *p; + register struct token *hp; + + p = s; + /* check to see if there is a ':' before and white space */ + while ( *p != '\0' && *p != ' ' && *p != '\t' && *p != ':' ) + p++; + if ( *p != ':' ) + return NOHEADER; + + for ( p = s, hp = hd; hp->str != NULLCHAR; hp++ ) + { + if ( prefix( hp->str, p ) ) + return hp->type; + } + return UNKNOWN; +} + +prefix( pref, full ) +register char *pref, *full; +{ + register char fc, pc; + + while ( ( pc = *pref++ ) != '\0' ) + { + fc = *full++; + if ( isupper( fc ) ) + fc = tolower( fc ); + if ( isupper( pc ) ) + pc = tolower( pc ); + if ( fc != pc ) + return 0; + } + return 1; +} diff --git a/src/nos/doc/bmpgp01/HEADER.H b/src/nos/doc/bmpgp01/HEADER.H new file mode 100644 index 00000000..d8230266 --- /dev/null +++ b/src/nos/doc/bmpgp01/HEADER.H @@ -0,0 +1,14 @@ +/* Header types */ +#define NOHEADER 0 +#define FROM 1 +#define TO 2 +#define DATE 3 +#define MSGID 4 +#define SUBJECT 5 +#define REPLYTO 6 +#define UNKNOWN 7 +#define STATUS 8 + +#ifndef NULLCHAR +#define NULLCHAR (char *)0 +#endif diff --git a/src/nos/doc/bmpgp01/MAIN.C b/src/nos/doc/bmpgp01/MAIN.C new file mode 100644 index 00000000..7d9634b2 --- /dev/null +++ b/src/nos/doc/bmpgp01/MAIN.C @@ -0,0 +1,1590 @@ +/* + * Simple mail user interface for KA9Q IP/TCP package. + */ +#include +#include +#include +#include +#if defined(__TURBOC__) +#include +#endif +#include "bm.h" + +/* commands valid in bm.rc */ + +struct token rccmds[] = { + "smtp", SMTP, + "host", HOST, + "user", USER, + "edit", EDIT, + "fullname", NAME, + "reply", REPLY, + "maxlet", MAXLET, + "mbox", MBOX, + "record", RECORD, + "folder", FOLDER, + "mqueue", MQUEUE, + "via", VIA, + "askvia", ASKVIA, + "autoedit", AUTOEDIT, + "tmp", TMPDIR, + "alias", ALIAS, + "zone", ZONE, + "pager", PAGER, + "asksubject", ASKSUBJECT, + "askmsgtype", ASKMSGTYPE, + "delempty", DELEMPTY, + "gate", GATE, + "organ", ORGAN, + "askrecord", ASKRECORD, + NULLCHAR, 0 +}; + +FILE *mfile = NULLFILE; +char *hostname = NULLCHAR; /* name of this host from rc file */ +char *username = NULLCHAR; /* name of this user from rc file */ +char *fullname = NULLCHAR; /* fullname of this user from rc file */ +char *replyto = NULLCHAR; /* address for reply-to header */ +char *maildir = NULLCHAR; /* defined mail directory */ +char *mqueue = NULLCHAR;/* defined mqueue outbound directory */ +char *savebox = NULLCHAR; /* name of the mbox text file */ +char *record = NULLCHAR;/* record outbound mail in this file */ +char *folder = NULLCHAR;/* directory for saveing read mail */ +char *editor = NULLCHAR;/* user's favorite text editor */ +char *tmpdir = NULLCHAR;/* tmp directory */ +char *aliases = NULLCHAR; /* defined alias directory */ +char *tzone = NULLCHAR; /* time zone */ +char *pager = NULLCHAR; /* pager */ +char *gate = NULLCHAR; /* gate to send default mail to */ +char *via = NULLCHAR; /* via to send default mail to */ +char *organ = NULLCHAR; /* organization name */ +char notename[9]; /* name of current notefile */ +char unotename[9]; /* name of user notefile */ +char notefile[LINELEN];/* full pathname of mail text file */ +char *mfilename = notefile; /* pointer to current mbox or mail + * file -f */ +char *emname = NULLCHAR; +int current; /* the current message number */ +int nmsgs; /* the number of messages in the notefile */ +int newmsgs; /* Number of new unread message */ +int change; /* indicates that the mail file has been + * changed in this session */ +int fflag = 0; /* true if current notefile is not an mbox */ +int qflag = 0; /* true if bm is used just to queue files */ +int sflag = 0; /* true if bm should ask for subject */ +int tflag = 0; /* true if bm should ask for msgtype */ +int vflag = 0; /* true if bm should ask for via route */ +int eflag = 0; /* true if autoedit */ +int rflag = 0; /* true if recording forced off */ +int lflag = 0; /* if true list to instead of from address */ +int dflag = 0; /* if true delete empty notefile */ +int aflag = 0; /* if true don't add sender addr to work file */ +int novia = 0; /* if true don't use via */ +int recflag = 0; /* true if bm should ask for record msg */ +unsigned maxlet = NLET + 1;/* max number of messages in mailbox */ +int tty = 0; /* tells if stdin is a tty */ +struct let *mbox; /* pointer to the array of messages */ + + +char usage[] = "Usage: bm [-a] [-c file] [-f file] [-e file] [-q] [-r] " +"[-v] [-u user]\r\nor: bm [-a] [-c file] " +"[-q] [-r] [-v] [-s subject] users\r\n"; +char options1[] = "\r\nOPTIONS\r\n"; +char options2[] = " -c file Use file instead of \\bm.rc\r\n"; +char options3[] = " -f file Use file instead of \\email\\user\r\n"; +char options4[] = " -h or -? Print this help msg\r\n"; +char options5[] = " -q Queue mode\r\n"; +char options6[] = " -s subject Set Subject field\r\n"; +char options7[] = " -e file Send file as the message body\r\n"; +char options8[] = " -u user Read user's mail\r\n"; +char options10[] = " -r Recording off\r\n"; +char options11[] = " -a Don't add sender address to work file\r\n"; +char options12[] = " -v Do not use via\r\n\n"; + +char badmsg[] = "Invalid message number %d\r\n"; +char nomail[] = "No messages\r\n"; +char noaccess[] = "Unable to access %s\n"; +char nofile[] = "No file specified\r\n"; +char badcommand[] = "Invalid command. ? for help\r\n"; +char newmail[] = "New mail has arrived\r\n"; +char nopattern[] = "No pattern specified\r\n"; + +char mailemail[] = "\\email"; /* Incoming mail */ +char mailqdir[] = "\\email\\mqueue"; /* Outgoing mail email */ +char alias[] = "\\net\\alias"; /* alias file */ +char tempdir[] = "\\tmp"; /* tmp directory */ +char deadmsg[] = "dead.msg"; /* dead.msg file */ + +/* version control information */ +char version[] = "Bdale's Mailer (MSDOS)"; + +main( argc, argv ) +int argc; +char *argv[]; +{ + extern int optind; + extern char *optarg; + char *subjectline = NULLCHAR; + long tmp; + int c; + int ret; + int cfg = 0; + char *cfgfile = NULLCHAR; + char *ttybuf; + char *p, *q; + int d; + + ( void ) fclose( stdaux ); + ( void ) fclose( stdprn ); + + directvideo = 1; + + if ( isatty( fileno( stdin ) ) ) + { + /* announce ourselves */ +/* screen_clear(); */ + printf( "%s\r\n\n", version ); + tty = 1; + } + + while ( ( c = getopt( argc, argv, "c:u:e:f:s:arqv?h" ) ) != -1 ) + { + switch ( c ) + { + case 'c': + cfg = 1; + cfgfile = optarg; + break; + case 'f': + fflag++; + mfilename = optarg; + cleanup_fname( mfilename ); + break; + case 'e': + emname = optarg; + break; + case 'r': + rflag++; + break; + case 'a': + aflag++; + break; + case 'v': + novia++; + break; + case 'q': + qflag++; + break; + case 's': + subjectline = optarg; + break; + case 'u': + strncpy( notename, optarg, 8 ); + notename[8] = '\0'; + cleanup_notename( notename ); + break; + case '?': + case 'h': + printf( usage ); + printf( options1 ); + printf( options11 ); + printf( options2 ); + printf( options3 ); + printf( options7 ); + printf( options4 ); + printf( options5 ); + printf( options10 ); + printf( options6 ); + printf( options8 ); + printf( options12 ); + exit( 1 ); + } + } + + if ( !cfg ) + loadconfig( NULLCHAR ); + else + loadconfig( cfgfile ); + + current = 1; + nmsgs = 0; + + /* check for important directories */ + + p = maildir; + q = maildir; + if ( p[0] != '\0' ) + { + p += strlen( p ) - 1; + q += strlen( q ) - 2; + } + if ( strcmp( maildir, "/" ) != 0 && strcmp( maildir, "\\" ) != 0 ) + { + if ( *maildir != '\0' && *p == ':' ) + strcat( maildir, "\\" ); + if ( *maildir != '\0' && *p == '/' || *p == '\\' && *q != ':' ) + { + d = strlen( maildir ); + maildir[d - 1] = '\0'; + } + } + + if ( access( maildir, 0 ) ) + { + fprintf( stderr, noaccess, maildir ); + exit( 1 ); + } + + p = maildir; + if ( p[0] != '\0' ) + p += strlen( p ) - 1; + if ( *p == '\\' || *p == '/' ) + { + d = strlen( maildir ); + maildir[d - 1] = '\0'; + } + + p = mqueue; + q = mqueue; + if ( p[0] != '\0' ) + { + p += strlen( p ) - 1; + q += strlen( q ) - 2; + } + if ( strcmp( mqueue, "/" ) != 0 && strcmp( mqueue, "\\" ) != 0 ) + { + if ( *mqueue != '\0' && *p == ':' ) + strcat( mqueue, "\\" ); + if ( *mqueue != '\0' && *p == '/' || *p == '\\' && *q != ':' ) + { + d = strlen( mqueue ); + mqueue[d - 1] = '\0'; + } + } + + if ( access( mqueue, 0 ) ) + { + fprintf( stderr, noaccess, mqueue ); + exit( 1 ); + } + + p = mqueue; + if ( p[0] != '\0' ) + p += strlen( p ) - 1; + if ( *p == '\\' || *p == '/' ) + { + d = strlen( mqueue ); + mqueue[d - 1] = '\0'; + } + + p = tmpdir; + q = tmpdir; + if ( p[0] != '\0' ) + { + p += strlen( p ) - 1; + q += strlen( q ) - 2; + } + if ( strcmp( tmpdir, "/" ) != 0 && strcmp( tmpdir, "\\" ) != 0 ) + { + if ( *tmpdir != '\0' && *p == ':' ) + strcat( tmpdir, "\\" ); + if ( *tmpdir != '\0' && *p == '/' || *p == '\\' && *q != ':' ) + { + d = strlen( tmpdir ); + tmpdir[d - 1] = '\0'; + } + } + + if ( access( tmpdir, 0 ) ) + { + fprintf( stderr, noaccess, tmpdir ); + exit( 1 ); + } + + p = tmpdir; + if ( p[0] != '\0' ) + p += strlen( p ) - 1; + if ( *p == '\\' || *p == '/' ) + { + d = strlen( tmpdir ); + tmpdir[d - 1] = '\0'; + } + + strncpy( unotename, username, 8 ); /* get username for signature file */ + unotename[8] = '\0'; + cleanup_notename( unotename ); + + if ( *notename == '\0' ) + { + strncpy( notename, username, 8 ); + notename[8] = '\0'; + cleanup_notename( notename ); + } + + /* set any signal handlers to catch break */ + setsignals( ); + + if ( optind < argc ) + { + dosmtpsend( NULLFILE, &argv[optind], argc - optind, subjectline, 0, + NULLCHAR, NULLCHAR, 0, 0, NULLCHAR ); + ( void ) exit( 0 ); + } + + tmp = ( long ) maxlet *( long ) sizeof( struct let ); + /* + * Since we are in the dos small model make sure that we don't overflow a + * unsigned short on the number bytes need for malloc. If not checked + * malloc will succeed and we will be trashing ourself in no time. + */ + if ( ( tmp & 0xffff0000 ) || + ( mbox = ( struct let * ) malloc( ( unsigned short ) tmp ) ) == ( struct let * ) NULL ) + { + fprintf( stderr, + "Cannot allocate memory table for %d messages\n", + maxlet - 1 ); + ( void ) exit( 1 ); + } + sprintf( notefile, "%s\\%s.txt", maildir, notename ); + cleanup_fname( notefile ); + if ( !fflag && lockit( ) ) + exit( 1 ); + ret = initnotes( ); + if ( !fflag ) + rmlock( maildir, notename ); + if ( ret != 0 ) + exit( 1 ); + listnotes( 0, 0, NULLCHAR, 0, 2 ); + + getcommand( ); + return 0; +} + +loadconfig( cfile ) +char *cfile; +{ + FILE *rcfp; /* handle for the configuration file */ + char rcline[LINELEN];/* buffer for config file reading */ + register char *h, *s, *p, *q; + int line = 0; + char *getenv( ); + char runcom[LINELEN]; + char xtempdir[LINELEN]; + char *rcl; + + if ( cfile == NULL ) + { + /* check for BMRC in the ENV */ + if ( ( h = getenv( "BMRC" ) ) != NULLCHAR ) + strcpy( runcom, h ); + else + strcpy( runcom, RUNCOM ); + } + else + strcpy( runcom, cfile ); + Rip( runcom ); + + cleanup_fname( runcom ); + if ( ( rcfp = fopen( runcom, "r" ) ) == NULLFILE ) + { /* open config file */ + fprintf( stderr, "Cannot open '%s', check your installation\n", runcom ); + ( void ) exit( 1 ); + } + + while ( !feof( rcfp ) ) + { + if ( fgets( rcline, LINELEN, rcfp ) == NULLCHAR ) + break; + line++; + rip( rcline ); + if ( *rcline == '\0' || *rcline == ';' || *rcline == '#' ) + continue; + /* find the argument to the command */ + + s = rcline; + /* skip the white space */ + while ( *s == ' ' || *s == '\t' ) + s++; + p = s; + /* skip the command */ + while ( *p && *p != ' ' && *p != '\t' ) + p++; + /* skip the white space */ + while ( *p == ' ' || *p == '\t' ) + p++; + if ( *s == '\0' ) + continue; + + switch ( rc_line_type( s ) ) + { + case HOST: + hostname = savestr( p ); + Rip( hostname ); + break; + case USER: + username = savestr( p ); + Rip( username ); + break; + case REPLY: + replyto = savestr( p ); + break; + case EDIT: + editor = savestr( p ); + break; + case AUTOEDIT: + eflag++; + break; + case SMTP: + maildir = savestr( p ); + Rip( maildir ); + cleanup_fname( maildir ); + break; + case NAME: + fullname = savestr( p ); + break; + case MAXLET: + maxlet = atoi( p ) + 1; + break; + case MBOX: + savebox = savestr( p ); + Rip( savebox ); + break; + case RECORD: + record = savestr( p ); + Rip( record ); + cleanup_fname( record ); + break; + case DELEMPTY: + dflag++; + break; + case FOLDER: + folder = savestr( p ); + Rip( folder ); + cleanup_fname( folder ); + break; + case MQUEUE: + mqueue = savestr( p ); + Rip( mqueue ); + cleanup_fname( mqueue ); + break; + case TMPDIR: + tmpdir = savestr( p ); + Rip( tmpdir ); + break; + case ALIAS: + aliases = savestr( p ); + Rip( aliases ); + cleanup_fname( aliases ); + break; + case ZONE: + tzone = savestr( p ); + Rip( tzone ); + break; + case PAGER: + pager = savestr( p ); + break; + case ASKSUBJECT: + sflag++; + break; + case ASKMSGTYPE: + tflag++; + break; + case GATE: + gate = savestr( p ); + Rip( gate ); + break; + case VIA: + via = savestr( p ); + Rip( via ); + break; + case ASKVIA: + vflag++; + break; + case ORGAN: + organ = savestr( p ); + break; + case ASKRECORD: + recflag++; + break; + default: + rcl = savestr( rcline ); + fprintf( stderr, + "%s: line %d invalid command: '%s'\n", + runcom, line, rcl ); + exit( 1 ); + } + } + ( void ) fclose( rcfp ); + if ( maildir == NULLCHAR || *maildir == '\0' ) + maildir = mailemail; + if ( mqueue == NULLCHAR || *mqueue == '\0' ) + mqueue = mailqdir; + if ( tmpdir == NULLCHAR || *tmpdir == '\0' ) + { + if ( ( q = getenv( "TMP" ) ) != NULLCHAR ) + strcpy( xtempdir, q ); + else + strcpy( xtempdir, tempdir ); + tmpdir = savestr( xtempdir ); + Rip( tmpdir ); + } + cleanup_fname( tmpdir ); + if ( aliases == NULLCHAR || *aliases == '\0' ) + { + aliases = alias; + } + if ( savebox == NULLCHAR || *savebox == '\0' ) + { + savebox = "mbox"; + } + if ( hostname == NULLCHAR || *hostname == '\0' ) + { + fprintf( stderr, "%s: hostname not set\n", runcom ); + exit( 1 ); + } + if ( username == NULLCHAR || *username == '\0' ) + { + fprintf( stderr, "%s: username not set\n", runcom ); + exit( 1 ); + } + pgp_ini(); +} + +/* return the line_type from a line of the configuration file */ +rc_line_type( s ) +register char *s; +{ + register struct token *tp; + + for ( tp = rccmds; tp->str != NULLCHAR; tp++ ) + { + if ( strncmp( tp->str, s, strlen( tp->str ) ) == 0 ) + return tp->type; + } + return ( NONE ); +} + +/* replace terminating end of line marker(s) with null */ +rip( s ) +register char *s; +{ + for ( ; *s; s++ ) + if ( *s == '\r' || *s == '\n' ) + { + *s = '\0'; + break; + } +} + +/* replace first space with null */ +Rip( s ) +register char *s; +{ + for ( ; *s; s++ ) + if ( *s == ' ' || *s == '\t' ) + { + *s = '\0'; + break; + } +} + +/* copy a string return a pointer to it */ +char * +savestr( s ) +char *s; +{ + register char *p; + int c; + + c = strlen( s ); + while ( s[c - 1] == ' ' || s[c - 1] == '\t' ) + { + s[c - 1] = '\0'; + c = strlen( s ); + } + p = malloc( strlen( s ) + 1 ); + if ( p == NULLCHAR ) + fprintf( stderr, "Out of memory\n" ); + else + strcpy( p, s ); + return p; +} + +dohelp( ) +{ +/* screen_clear(); */ + printf( "HELP: Mail Commands\r\n\n" ); + printf( "PRINTING MESSAGES AND HEADERS " + "OTHER COMMANDS\r\n" ); + printf( " Next msg " + " ! command Run shell command\r\n" ); + printf( " # Where # is msg number " + " $ Sync the notefile\r\n" ); + printf( " . Print current msg " + " %%[f] Print reply address\r\n" ); + printf( " h or H Print headers " + " / pattern Search for pattern\r\n" ); + printf( " " + " = Print msg number\r\n" ); + printf( "DISPOSING OF MESSAGES " + " ? Print this help msg\r\n" ); + printf( " b users Bounce msg (remail) " + " a [name] Edit or print alias\r\n" ); + printf( " d or u Delete or undelete " + " A Alias msg\r\n" ); + printf( " f users Forward msg to users " + " k job-id Kill unsent msgs\r\n" ); + printf( " F users Forward msg; no tab " + " l List unsent msgs\r\n" ); + printf( " p Print msg on printer " + " m users Mail to users\r\n" ); + printf( " r[f] Reply to a msg " + " M users file Mail file to users\r\n" ); + printf( " R[f] Reply including msg " + " n [file] Change notefile\r\n" ); + printf( " s [file] Save msg in mbox " + " q Quit; save changes\r\n" ); + printf( " w file Append msg to file " + " x Exit\r\n\n" ); +} + +bmexit( x ) +int x; +{ + if ( !fflag && lockit( ) ) + exit( 1 ); + ( void ) closenotes( ); + if ( !fflag ) + rmlock( maildir, notename ); + exit( x ); +} + +/* this is the main command processing loop */ +getcommand( ) +{ + FILE *tfile, *tmpfile( ); + char command[LINELEN]; /* command line */ + char *args[MAXARGS]; + int nargs; + char *p; + char *cp; + register int msgnum; + register int i; + int ret; + + printf( "\r\nType ? for help.\r\n" ); + + /* command parsing loop */ + while ( 1 ) + { + printf( "\"%s\"> ", notename ); + + gets( command ); + + p = command; + while ( *p == ' ' || *p == '\t' ) + p++; + + if ( *p == '!' ) + { + system( &p[1] ); + continue; + } + if ( *p ) + { + cp = p; + while ( *cp && *cp != ' ' && *cp != '\t' ) + cp++; + nargs = parse( cp, args, MAXARGS ); + } + + switch ( *p ) + { + case 'm': /* send msg */ + if ( nargs == 0 ) + { + printf( "To: " ); + gets( command ); + nargs = parse( command, args, MAXARGS ); + } + dosmtpsend( NULLFILE, args, nargs, NULLCHAR, 0, NULLCHAR, NULLCHAR, + 0, 0, NULLCHAR ); + break; + + case 'M': + if ( nargs == 0 ) + { + printf( "To: " ); + gets( command ); + nargs = parse( command, args, MAXARGS ); + } + dosmtpsend( NULLFILE, args, nargs, NULLCHAR, 0, NULLCHAR, NULLCHAR, + 1, 0, NULLCHAR ); + break; + + case 's': /* save current msg to file */ + do_msg( nargs, args, 0, 0, 0, 1, 0 ); + break; + + case 'w': /* write current msg to file */ + do_msg( nargs, args, 0, 0, 1, 0, 0 ); + break; + + case 'x': /* abort */ + ( void ) fclose( mfile ); + ( void ) exit( 0 ); + /* NOTREACHED */ + break; + + case 'p': /* print message */ + do_msg( nargs, args, 0, 0, 0, 0, 1 ); + break; + + case 'r': /* reply */ + if ( mfile == NULLFILE ) + printf( nomail ); + else + { + if ( nargs == 0 ) + msgnum = current; + else + msgnum = atoi( args[0] ); + switch ( p[1] ) + { + case 'f': + if ( msgnum >= 1 && msgnum <= nmsgs ) + Reply( msgnum, 0, 1, 0, 0 ); + else + printf( badmsg, msgnum ); + break; + default: + if ( msgnum >= 1 && msgnum <= nmsgs ) + Reply( msgnum, 0, 0, 0, 0 ); + else + printf( badmsg, msgnum ); + break; + } + } + break; + + case 'R': + if ( mfile == NULLFILE ) + printf( nomail ); + else + { + if ( nargs == 0 ) + msgnum = current; + else + msgnum = atoi( args[0] ); + switch ( p[1] ) + { + case 'f': + case 'F': + if ( msgnum >= 1 && msgnum <= nmsgs ) + Reply( msgnum, 1, 1, 0, 0 ); + else + printf( badmsg, msgnum ); + break; + default: + if ( msgnum >= 1 && msgnum <= nmsgs ) + Reply( msgnum, 1, 0, 0, 0 ); + else + printf( badmsg, msgnum ); + break; + } + } + break; + + case '%': + if ( mfile == NULLFILE ) + printf( nomail ); + else + { + if ( nargs == 0 ) + msgnum = current; + else + msgnum = atoi( args[0] ); + switch ( p[1] ) + { + case 'f': + case 'F': + if ( msgnum >= 1 && msgnum <= nmsgs ) + Reply( msgnum, 0, 1, 1, 0 ); + else + printf( badmsg, msgnum ); + break; + default: + if ( msgnum >= 1 && msgnum <= nmsgs ) + Reply( msgnum, 0, 0, 1, 0 ); + else + printf( badmsg, msgnum ); + break; + } + } + break; + + case 'f': + if ( mfile == NULLFILE ) + { + printf( nomail ); + break; + } + if ( nargs == 0 ) + msgnum = current; + else + msgnum = atoi( args[0] ); + if ( msgnum < 1 || msgnum > nmsgs ) + { + printf( badmsg, msgnum ); + break; + } + if ( ( tfile = tmpfile( ) ) == NULLFILE ) + printf( "Cannot open tmp file\r\n" ); + else + { + msgtofile( msgnum, tfile, 0, 1 ); + fseek( tfile, 0L, 0 ); + printf( "To: " ); + gets( command ); + nargs = parse( command, args, MAXARGS ); + dosmtpsend( tfile, args, nargs, NULLCHAR, 0, NULLCHAR, NULLCHAR, + 0, 0, NULLCHAR ); + ( void ) fclose( tfile ); + } + break; + + case 'F': + if ( mfile == NULLFILE ) + { + printf( nomail ); + break; + } + if ( nargs == 0 ) + msgnum = current; + else + msgnum = atoi( args[0] ); + if ( msgnum < 1 || msgnum > nmsgs ) + { + printf( badmsg, msgnum ); + break; + } + if ( ( tfile = tmpfile( ) ) == NULLFILE ) + printf( "Cannot open tmp file\r\n" ); + else + { + msgtofile( msgnum, tfile, 0, 0 ); + fseek( tfile, 0L, 0 ); + printf( "To: " ); + gets( command ); + nargs = parse( command, args, MAXARGS ); + dosmtpsend( tfile, args, nargs, NULLCHAR, 0, NULLCHAR, NULLCHAR, + 0, 0, NULLCHAR ); + ( void ) fclose( tfile ); + } + break; + + case 'b': /* bounce a message */ + if ( mfile == NULLFILE ) + { + printf( nomail ); + break; + } + if ( nargs == 0 ) + msgnum = current; + else + msgnum = atoi( args[0] ); + if ( msgnum < 1 || msgnum > nmsgs ) + { + printf( badmsg, msgnum ); + break; + } + if ( ( tfile = tmpfile( ) ) == NULLFILE ) + printf( "Cannot open tmp file\r\n" ); + else + { + msgtofile( msgnum, tfile, 0, 0 ); + fseek( tfile, 0L, 0 ); + printf( "To: " ); + gets( command ); + nargs = parse( command, args, MAXARGS ); + bouncemsg( tfile, args, nargs ); + ( void ) fclose( tfile ); + } + break; + + case 'u': + do_msg( nargs, args, 0, 1, 0, 0, 0 ); + break; + + case 'l': /* display unsent messages */ + listqueue( ); + break; + + case 'k': + if ( nargs == 0 ) + printf( "No Job_ID specified\r\n" ); + else + for ( i = 0; i < nargs; i++ ) + killjob( args[i] ); + break; + + case 'a': + in_alias( nargs, args, NULLCHAR ); + break; + + case 'A': + if ( mfile == NULLFILE ) + printf( nomail ); + else + { + if ( nargs == 0 ) + msgnum = current; + else + msgnum = atoi( args[0] ); + if ( msgnum >= 1 && msgnum <= nmsgs ) + alias_msg( msgnum ); + else + printf( badmsg, msgnum ); + } + break; + + case 'n': /* display or change notefile */ + mboxnames( nargs, args, 0 ); + break; + + case 'q': /* quit */ + if ( isnewmail( ) ) + { + printf( newmail ); + reinit( 3, 0 ); + } + else + bmexit( 0 ); + /* NOTREACHED */ + break; + + case '$': + if ( isnewmail( ) ) + { + printf( newmail ); + reinit( 3, 0 ); + } + else + reinit( 2, 0 ); + break; + + case '/': + if ( mfile == NULLFILE ) + printf( nomail ); + else + { + if ( nargs == 0 ) + { + printf( nopattern ); + break; + } + else if ( lflag ) + listnotes( 1, nargs, args, 0, 0 ); + else + listnotes( 0, nargs, args, 0, 0 ); + } + break; + + case 'd': /* delete a message */ + do_msg( nargs, args, 1, 0, 0, 0, 0 ); + break; + + case 'h': /* list message headers in notefile */ + + if ( mfile == NULLFILE ) + printf( nomail ); + else if ( lflag ) + if ( nargs == 0 ) + listnotes( 1, 0, NULLCHAR, 0, 2 ); + else + { + msgnum = atoi( args[0] ); + if ( msgnum >= 1 && msgnum <= nmsgs ) + listnotes( 1, 0, NULLCHAR, msgnum, 2 ); + else + printf( badmsg, msgnum ); + } + else if ( nargs == 0 ) + listnotes( 0, 0, NULLCHAR, 0, 2 ); + else + { + msgnum = atoi( args[0] ); + if ( msgnum >= 1 && msgnum <= nmsgs ) + listnotes( 0, 0, NULLCHAR, msgnum, 2 ); + else + printf( badmsg, msgnum ); + } + break; + + case 'H': /* list message headers in notefile */ + + if ( mfile == NULLFILE ) + printf( nomail ); + else if ( nargs == 0 ) + listnotes( 1, 0, NULLCHAR, 0, 2 ); + else + { + msgnum = atoi( args[0] ); + if ( msgnum >= 1 && msgnum <= nmsgs ) + listnotes( 1, 0, NULLCHAR, msgnum, 2 ); + else + printf( badmsg, msgnum ); + } + break; + + case '\0': /* a blank line prints next message */ + printnext( ); + break; + + case '?': /* help */ + dohelp( ); + break; + + case '.': + if ( mfile == NULLFILE ) + printf( nomail ); + else + displaymsg( current ); + break; + + case '=': + if ( mfile == NULLFILE ) + printf( nomail ); + else + printf( "Message #%d %s\r\n", current, + mbox[current].status & DELETE ? "[Deleted]" : "" ); + break; + + default: + if ( !isdigit( *p ) ) + printf( badcommand ); + else + { + if ( mfile == NULLFILE ) + printf( nomail ); + else + { + msgnum = atoi( p ); + if ( msgnum <= 0 || msgnum > nmsgs ) + printf( badmsg, msgnum ); + else + { + current = msgnum; + displaymsg( current ); + } + } + } + break; + } + } +} + +do_msg( argc, argv, del, undel, writemsg, savemsg, printmsg ) +int argc; +char *argv[]; +int del; +int undel; +int writemsg; +int savemsg; +int printmsg; +{ + register int msgnum; + register int nmsgnum; + register char *p; + register char *q; + register char *cp; + register int n; + register int i; + char tstring[LINELEN]; + register char *writefile; + FILE *tfile; + register int wflag = 0; + register char *savefile; + char buf[LINELEN]; + char cmd[LINELEN]; + char lpfile[LINELEN]; + register int j; + + register char *s; + register int c; + + if ( mfile == NULLFILE ) + { + printf( nomail ); + return; + } + if ( argc == 0 ) + { + if ( printmsg ) + { + if ( ( tfile = fopen( "PRN", "a" ) ) == NULLFILE ) + { + perror( "PRN" ); + return; + } + msgtofile( current, tfile, 0, 0 ); + fprintf( tfile, " " ); + ( void ) fclose( tfile ); + wflag = 1; + } + if ( savemsg ) + { + cleanup_fname( savebox ); + if ( ( tfile = fopen( savebox, "a" ) ) == NULLFILE ) + { + perror( savebox ); + return; + } + msgtofile( current, tfile, 0, 0 ); + ( void ) fclose( tfile ); + printf( "%s appended\r\n", savebox ); + } + if ( writemsg ) + printf( nofile ); + if ( del ) + delmsg( current ); + if ( undel ) + mbox[current].status &= ~DELETE; + } + else + { + if ( savemsg ) + { + if ( isdigit( *argv[argc - 1] ) || + *argv[argc - 1] == '*' || *argv[argc - 1] == '$' ) + savefile = savebox; + else + { + savefile = argv[argc - 1]; + --argc; + if ( strpbrk( savefile, "/\\" ) == NULLCHAR && folder != NULLCHAR ) + { + + s = folder; + if ( s[0] != '\0' ) + s += strlen( s ) - 1; + if ( *s == '\\' || *s == '/' ) + { + c = strlen( folder ); + folder[c - 1] = '\0'; + } + sprintf( buf, "%s/%s", folder, savefile ); + savefile = buf; + } + } + cleanup_fname( savefile ); + if ( argc == 0 ) + { + if ( ( tfile = fopen( savefile, "a" ) ) == NULLFILE ) + { + perror( savefile ); + return; + } + msgtofile( current, tfile, 0, 0 ); + ( void ) fclose( tfile ); + wflag = 1; + } + } + if ( writemsg ) + { + if ( isdigit( *argv[argc - 1] ) || + *argv[argc - 1] == '*' || *argv[argc - 1] == '$' ) + { + printf( nofile ); + return; + } + else + { + writefile = argv[argc - 1]; + --argc; + } + cleanup_fname( writefile ); + if ( argc == 0 ) + { + if ( ( tfile = fopen( writefile, "a" ) ) == NULLFILE ) + { + perror( writefile ); + return; + } + msgtofile( current, tfile, 1, 0 ); + ( void ) fclose( tfile ); + wflag = 1; + } + } + for ( j = 0; j < argc; j++ ) + { + i = strlen( argv[j] ); + *tstring = '\0'; + while ( i ) + { + strcat( tstring, "*" ); + i--; + } + if ( strcmp( argv[j], tstring ) == 0 ) + { + if ( printmsg ) + if ( ( tfile = fopen( "PRN", "a" ) ) == NULLFILE ) + { + perror( "PRN" ); + return; + } + if ( savemsg ) + if ( ( tfile = fopen( savefile, "a" ) ) == NULLFILE ) + { + perror( savefile ); + return; + } + if ( writemsg ) + if ( ( tfile = fopen( writefile, "a" ) ) == NULLFILE ) + { + perror( writefile ); + return; + } + msgnum = 1; + while ( msgnum != nmsgs + 1 ) + { + if ( del ) + delmsg( msgnum ); + if ( undel ) + mbox[msgnum].status &= ~DELETE; + if ( writemsg ) + msgtofile( msgnum, tfile, 1, 0 ); + if ( savemsg || printmsg ) + { + msgtofile( msgnum, tfile, 0, 0 ); + if ( printmsg ) + fprintf( tfile, " " ); + } + msgnum++; + } + if ( writemsg || savemsg || printmsg ) + { + wflag = 1; + ( void ) fclose( tfile ); + } + } + else + { + if ( strchr( argv[j], '-' ) != NULLCHAR ) + { + p = argv[j]; + cp = strchr( p, '-' ); + *cp = '\0'; + n = strlen( p ); + q = &p[n + 1]; + while ( *q == '-' ) + q++; + *tstring = '\0'; + while ( n ) + { + strcat( tstring, "$" ); + n--; + } + if ( strcmp( p, tstring ) == 0 ) + msgnum = nmsgs; + else + msgnum = atoi( p ); + i = strlen( q ); + *tstring = '\0'; + while ( i ) + { + strcat( tstring, "$" ); + i--; + } + if ( strcmp( q, tstring ) == 0 ) + nmsgnum = nmsgs; + else + nmsgnum = atoi( q ); + if ( msgnum < 1 || msgnum > nmsgs ) + printf( badmsg, msgnum ); + else if ( nmsgnum < 1 || nmsgnum > nmsgs ) + printf( badmsg, nmsgnum ); + if ( msgnum <= nmsgnum && msgnum >= 1 && + msgnum <= nmsgs && nmsgnum >= 1 && nmsgnum <= nmsgs ) + { + if ( printmsg ) + if ( ( tfile = fopen( "PRN", "a" ) ) == NULLFILE ) + { + perror( "PRN" ); + return; + } + if ( savemsg ) + if ( ( tfile = fopen( savefile, "a" ) ) == NULLFILE ) + { + perror( savefile ); + return; + } + if ( writemsg ) + if ( ( tfile = fopen( writefile, "a" ) ) == NULLFILE ) + { + perror( writefile ); + return; + } + while ( msgnum != nmsgnum + 1 ) + { + if ( del ) + delmsg( msgnum ); + if ( undel ) + mbox[msgnum].status &= ~DELETE; + if ( writemsg ) + msgtofile( msgnum, tfile, 1, 0 ); + if ( savemsg || printmsg ) + { + msgtofile( msgnum, tfile, 0, 0 ); + if ( printmsg ) + fprintf( tfile, " " ); + } + msgnum++; + } + if ( writemsg || savemsg || printmsg ) + { + ( void ) fclose( tfile ); + wflag = 1; + } + } + else + { + if ( msgnum > nmsgnum && msgnum >= 1 && + msgnum <= nmsgs && nmsgnum >= 1 && nmsgnum <= nmsgs ) + { + if ( printmsg ) + if ( ( tfile = fopen( "PRN", "a" ) ) == NULLFILE ) + { + perror( "PRN" ); + return; + } + if ( savemsg ) + if ( ( tfile = fopen( savefile, "a" ) ) == NULLFILE ) + { + perror( savefile ); + return; + } + if ( writemsg ) + if ( ( tfile = fopen( writefile, "a" ) ) == NULLFILE ) + { + perror( writefile ); + return; + } + while ( msgnum != nmsgnum - 1 ) + { + if ( del ) + delmsg( msgnum ); + if ( undel ) + mbox[msgnum].status &= ~DELETE; + if ( writemsg ) + msgtofile( msgnum, tfile, 1, 0 ); + if ( savemsg || printmsg ) + { + msgtofile( msgnum, tfile, 0, 0 ); + if ( printmsg ) + fprintf( tfile, " " ); + } + msgnum--; + } + if ( writemsg || savemsg || printmsg ) + { + ( void ) fclose( tfile ); + wflag = 1; + } + } + } + } + else + { + i = strlen( argv[j] ); + *tstring = '\0'; + while ( i ) + { + strcat( tstring, "$" ); + i--; + } + if ( strcmp( argv[j], tstring ) == 0 ) + msgnum = nmsgs; + else + msgnum = atoi( argv[j] ); + if ( msgnum >= 1 && msgnum <= nmsgs ) + { + if ( del ) + delmsg( msgnum ); + if ( undel ) + mbox[msgnum].status &= ~DELETE; + if ( writemsg ) + { + if ( ( tfile = fopen( writefile, "a" ) ) == NULLFILE ) + { + perror( writefile ); + return; + } + msgtofile( msgnum, tfile, 1, 0 ); + ( void ) fclose( tfile ); + wflag = 1; + } + if ( savemsg ) + { + if ( ( tfile = fopen( savefile, "a" ) ) == NULLFILE ) + { + perror( savefile ); + return; + } + msgtofile( msgnum, tfile, 0, 0 ); + ( void ) fclose( tfile ); + wflag = 1; + } + if ( printmsg ) + { + if ( ( tfile = fopen( "PRN", "a" ) ) == NULLFILE ) + { + perror( "PRN" ); + return; + } + msgtofile( msgnum, tfile, 0, 0 ); + fprintf( tfile, " " ); + ( void ) fclose( tfile ); + wflag = 1; + } + } + else + printf( badmsg, msgnum ); + } + } + } + if ( writemsg && wflag ) + printf( "%s appended\r\n", writefile ); + if ( savemsg && wflag ) + printf( "%s appended\r\n", savefile ); + } +} + +in_alias( argc, argv, user ) +int argc; +char *argv[]; +char *user; +{ + FILE *fa; + char *name; + char al[LINELEN]; + register char *a, *p, *q; + int found; + char Name[LINELEN]; + char als[LINELEN]; + char tstring[LINELEN]; + + if ( argc == 0 ) + { + if ( editor == NULLCHAR || *editor == '\0' ) + { + printf( "No editor defined\r\n" ); + return 0; + } + sprintf( tstring, "%s %s", editor, aliases ); + system( tstring ); + return 0; + } + found = 0; + if ( ( fa = fopen( aliases, "r" ) ) == NULLFILE ) + { + if ( user != NULLCHAR ) + return 0; + else + { + printf( "Cannot open %s\r\n", aliases ); + return 0; + } + } + if ( user != NULLCHAR ) + name = user; + else + name = argv[0]; + while ( fgets( al, LINELEN, fa ) != NULLCHAR ) + { + p = al; + if ( *p == '#' || *p == '\0' || *p == '\n' ) + continue; + rip( p ); + if ( found && *p != ' ' && *p != '\t' ) + break; + if ( !found ) + { + q = Name; + while ( *p && *p != ' ' && *p != '\t' && *p != ',' ) + *q++ = *p++; + *q = '\0'; + } + if ( strcmp( name, Name ) == 0 ) + { + while ( *p != '\0' ) + { + while ( *p == ' ' || *p == '\t' || *p == ',' ) + p++; + if ( *p == '#' ) + break; + a = als; + while ( *p && *p != ' ' && *p != '\t' && *p != ',' ) + *a++ = *p++; + *a = '\0'; + if ( *als != '\0' ) + { + found = 1; + if ( user == NULLCHAR ) + { + printf( "Alias: %s", als ); + if ( strchr( als, '@' ) == NULLCHAR ) + printf( "@%s", hostname ); + printf( "\r\n" ); + } + } + } + } + } + ( void ) fclose( fa ); + if ( user != NULLCHAR && found ) + return 1; + else if ( user != NULLCHAR && !found ) + return 0; + else if ( !found ) + printf( "No alias found\r\n" ); + return 0; +} + +reinit( nlines, sv ) +int nlines; +int sv; +{ + int ret; + + if ( !fflag && lockit( ) ) + return; + ret = closenotes( ); + if ( !fflag ) + rmlock( maildir, notename ); + if ( ret != 0 ) + { + if ( sv ) + savetpfile( ); + exit( 1 ); + } + if ( !fflag && lockit( ) ) + { + if ( sv ) + savetpfile( ); + exit( 1 ); + } + ret = initnotes( ); + if ( !fflag ) + rmlock( maildir, notename ); + if ( ret != 0 ) + { + if ( sv ) + savetpfile( ); + exit( 1 ); + } + if ( lflag ) + listnotes( 1, 0, NULLCHAR, 0, nlines ); + else + listnotes( 0, 0, NULLCHAR, 0, nlines ); +} diff --git a/src/nos/doc/bmpgp01/MAKEFILE b/src/nos/doc/bmpgp01/MAKEFILE new file mode 100644 index 00000000..028244de --- /dev/null +++ b/src/nos/doc/bmpgp01/MAKEFILE @@ -0,0 +1,39 @@ +# +# Makefile for Bdale's Mailer +# +# for more info see bm.doc and smtp.doc in the documentation package +# if you change the makefile, do a make clean before you do a make. +# This makefile for Turboc C using ndmake. +# + +CFLAGS= -ms -O -Z -d -DMSDOS -Dprintf=cprintf -y -v +LDFLAGS= -ms -l -v +HDRS= bm.h header.h +OBJS= main.obj send.obj pc.obj bmutil.obj pgp.obj header.obj getopt.obj + +all: bm.exe + +bm.exe: $(OBJS) + tcc $(LDFLAGS) -ebm $(OBJS) + +clean: + del *.obj + +clobber: clean + del *.exe +# +# dependencies - please keep up to date! +# +bmutil.obj: bmutil.c bm.h header.h +pc.obj: pc.c +main.obj: main.c bm.h +send.obj: send.c bm.h +pgp.obj: pgp.c bm.h +header.obj: header.c header.h +getopt.obj: getopt.c + +.c.obj: + tcc -c $(CFLAGS) $* +.asm.obj: + tasm $(AFLAGS) $*; + diff --git a/src/nos/doc/bmpgp01/PC.C b/src/nos/doc/bmpgp01/PC.C new file mode 100644 index 00000000..06df1c0f --- /dev/null +++ b/src/nos/doc/bmpgp01/PC.C @@ -0,0 +1,302 @@ +/* This file contains machine specific functions */ +#include + +/* This file is an attempt at keeping things portable while taking +* advantage of some of the faster io functions in the turbo lib. +* It seems they all do it their own way but here it goes +*/ + +/* directory search utility for DOS */ +#include +#include +/* #include */ +#define ST_RDONLY 0x01 /* read only file */ +#define ST_HIDDEN 0x02 /* hidden file */ +#define ST_SYSTEM 0x04 /* system file */ +#define ST_VLABEL 0x08 /* volume label */ +#define ST_DIRECT 0x10 /* file is a sub-directory */ +#define ST_ARCHIV 0x20 /* set when file has been written and closed */ + +#include "bm.h" + +#define REGFILE (ST_HIDDEN|ST_SYSTEM|ST_DIRECT) +#define SET_DTA 0x1a +#define FIND_FIRST 0x4e +#define FIND_NEXT 0x4f + +struct dirent +{ + char rsvd[21]; + char attr; + short ftime; + short fdate; + long fsize; + char fname[13]; +}; + +/* wildcard filename lookup */ +filedir( name, times, ret_str ) +char *name; +int times; +char *ret_str; +{ + register char *cp, *cp1; + static struct dirent sbuf; +#if defined(MICROSOFT) || defined(__TURBOC__) + union REGS regs; +#endif + + bdos( SET_DTA, ( unsigned ) &sbuf, 0 ); /* Set disk transfer address */ + +#if defined(MICROSOFT) || defined(__TURBOC__) + regs.h.ah = ( times == 0 ) ? FIND_FIRST : FIND_NEXT; + regs.x.dx = ( unsigned int ) name; + regs.x.cx = ( unsigned int ) REGFILE; + intdos( ®s, ®s ); + if ( regs.x.cflag ) + sbuf.fname[0] = '\0'; +#else + /* Find matching file */ + if ( dos( times == 0 ? FIND_FIRST : FIND_NEXT, 0, REGFILE, name, 0, 0 ) == -1 ) + sbuf.fname[0] = '\0'; +#endif + + /* Copy result to output, forcing to lower case */ + for ( cp = ret_str, cp1 = sbuf.fname; cp1 < &sbuf.fname[13] && *cp1 != '\0'; ) + *cp++ = tolower( *cp1++ ); + *cp = '\0'; +} + +/* This function should put the tty in a mode such that signgle characters +* can be read without waiting for a complete line. Echo should be on. +*/ +/* setrawmode() +{} */ + +/* This function should restore the tty modes back to cooked mode */ +/* setcookedmode() +{} */ + +/* This function return one character form the keyboard. It will wait +* for a character to be input. This function will echo the character. +* This funtion will return afer each character is typed if rawmode is set +*/ +int +getrch( ) +{ + int c; +#if defined(AZTEC) || defined(MICROSOFT) || defined(__TURBOC__) + c = bdos( 1, 0, 0 ); +#endif + return ( c & 0xff ); +} + +#ifdef SCREENCLEAR +/* This function show clear screen and put cursor at top of screen */ +screen_clear( ) +{ +#ifdef AZTEC + extern int scr_clear( ); + scr_clear( ); /* from lib S */ +#endif +#if defined(MICROSOFT) || defined(__TURBOC__) + /* clear screen using window scroll up */ + union REGS regs; + regs.h.ah = 6; + regs.h.al = 0; + regs.h.ch = 0; + regs.h.cl = 0; + regs.h.dh = 24; + regs.h.dl = 79; + regs.h.bh = 7; + int86( 0x10, ®s, ®s ); + /* home the cursor */ + regs.h.ah = 2; + regs.h.bh = 0; + regs.h.dh = 0; + regs.h.dl = 0; + int86( 0x10, ®s, ®s ); +#endif +} + +#endif /* SCREENCLEAR */ +#ifdef AZTEC +/* This is the aztec specific setvbuf since the Aztec lib doesnt have one */ +setvbuf( stream, buffer, type, size ) +register FILE *stream; +char *buffer; +int type; +int size; +{ + if ( stream->_buff ) + return; + if ( buffer && type != _IONBF ) + { + stream->_buff = buffer; + stream->_buflen = size; + } + else + { + stream->_buff = &stream->_bytbuf; + stream->_buflen = 1; + } +} + +#endif + +#if defined(MICROSOFT) || defined(AZTEC) +setsignals( ) +{ + signal( SIGINT, SIG_IGN ); +} + +#endif + +#if defined(__TURBOC__) +/* dummy do nothing */ +int +catchit( ) +{ +} + +setsignals( ) +{ + ctrlbrk( catchit ); +} + +/* setvideo(s) +char *s; +{ + if (strncmp("bios",s,4) == 0) + directvideo = 0; + else + directvideo = 1; +} */ +#endif + +#if defined(__TURBOC__) +/* I use my own gets to get around the desqview raw mode bug + which causes gets not to work right. + I am doing it only for turbo C right now since its a pain to + get it right for them all. + it reads straight from console not via stdin. +*/ +char * +gets( s ) +char *s; +{ + register char *p; + register int c; + register int n = 0; + + p = s; + while ( ( c = getrch( ) ) != EOF ) + { + if ( n == 0 && c == '\b' ) + { + putch( ' ' ); + putch( '\b' ); + } + else + { + if ( c == '\b' && p > s ) + { + n--; + p--; + putch( ' ' ); + putch( '\b' ); + } + else + { + if ( c == '\n' || c == '\r' ) + { + putch( '\n' ); + break; + } + else + { + if ( n == LINELEN - 1 ) + { + putch( '\r' ); + putch( '\n' ); + break; + } + else + { + n++; + *p++ = c; + } + } + } + } + } + *p = '\0'; + return ( s ); +} + +/* the strrchr() function is broken in Turbo C 2.0 */ +/* this implementation is probably more efficient, too... */ + +char * +strrchr( const char *s, int c ) + +{ + register char *rv = NULL; /* return value */ + + do + { + if ( *s == ( char ) c ) /* a match here? */ + rv = ( char * ) s; /* remember it */ + } + while ( *s++ ); + + return rv; /* return last match or NULL */ +} + +/* low-level routine used by tmpnam, fixed to use TMP environment variable */ + +char *pascal +__mkname( char *tmpname, unsigned int tmpnum ) + +{ + char *p; + static char staticname[LINELEN]; + + if ( tmpname == NULL ) + tmpname = staticname; + + p = tmpdir; + if ( p[0] != '\0' ) + p += strlen( p ) - 1; /* point to last character */ + + sprintf( tmpname, "%s%sTMP%u.$$$", + tmpdir, + ( ( *p != '/' && *p != '\\' ) ? "/" : "" ), + tmpnum ); + + return tmpname; +} + +unsigned int _tmpnum = 0; + +/* new tmpnam function. calls above routine to generate the name, but */ +/* is otherwise the same as the tmpnam() in the library. */ +char * +tmpnam( char *name ) + +{ + do + { + if ( _tmpnum == 0xffff ) + _tmpnum = 2; + else + ++_tmpnum; + + name = __mkname( name, _tmpnum ); + } + while ( access( name, 0 ) != -1 ); + + return name; +} + +#endif diff --git a/src/nos/doc/bmpgp01/PGP.C b/src/nos/doc/bmpgp01/PGP.C new file mode 100644 index 00000000..e43903a5 --- /dev/null +++ b/src/nos/doc/bmpgp01/PGP.C @@ -0,0 +1,221 @@ +#include +#include +#include +#include +#include +#include "bm.h" + +char tpgpin[LINELEN]; +char tpgpout[LINELEN]; + +void +pgp_ini( void ) +{ + strcpy( tpgpin, tmpdir ); + strcat( tpgpin, "\\pgpin.$$$" ); + strcpy( tpgpout, tmpdir ); + strcat( tpgpout, "\\pgpout.$$$" ); +} + +void +pgp_err( int pgperr ) +{ + char *s; + + if ( pgperr == 0 ) + return; + if ( pgperr == -1 ) + { + switch ( errno ) + { + case E2BIG: + s = "Argument list or environment list too big"; + case EINVAL: + s = "Invalid 'modeflag' argument"; + case ENOENT: + s = "PGP.EXE not found or PGPPATH variable not set"; + case ENOEXEC: + s = "PGP.EXE is not an executable file"; + case ENOMEM: + s = "Not enough memory to run PGP"; + } + printf( "\r\n%s\r\n", s ); + } + else + { + switch ( pgperr ) + { + case 0: + s = "exit ok"; + case 1: + s = "invalid file"; + case 2: + s = "file not found"; + case 3: + s = "unknown file"; + case 4: + s = "no batch"; + case 5: + s = "bad argument"; + case 6: + s = "interrupt"; + case 7: + s = "out of memory"; +/* keyring errors: base value = 10 */ + case 10: + s = "key generation"; + case 11: + s = "nonexist key"; + case 12: + s = "keyring add"; + case 13: + s = "keyring extract"; + case 14: + s = "keyring edit"; + case 15: + s = "keyring view"; + case 16: + s = "keyring remove"; + case 17: + s = "keyring check"; + case 18: + s = "key signature"; + case 19: + s = "keysig remove"; +/* encode errors: base value = 20 */ + case 20: + s = "signature"; + case 21: + s = "RSA encryption"; + case 22: + s = "encrypt"; + case 23: + s = "compress"; +/* decode errors: base value = 30 */ + case 30: + s = "signature check"; + case 31: + s = "RSA decryption"; + case 32: + s = "decrypt"; + case 33: + s = "decompress"; + default: + s = "unknown"; + } + printf( "\r\nPGP has returned a %s error\r\n", s ); + } + printf( "No encryption/decryption done... press any key\r\n" ); + getch( ); +} + +int +send_pgp( char *ln, FILE * fin, FILE * fout, char *user ) +{ + FILE *fpgp; + char *to_pgp_usr, *s; + int pgperr; + + if ( strncmp( ln, "[pgp on", 7 ) == 0 ) + { + s = ln + 7; + while ( *s == ' ' || *s == '\t' ) + s++; + if ( *s == ']' || *s == '\n' ) + to_pgp_usr = strdupw( user ); + else + { + to_pgp_usr = strdupw( s ); + s = to_pgp_usr; + while ( *s != ' ' && *s != '\t' && *s != ']' && *s != '\n' ) + s++; + *s = '\0'; + } + if ( ( fpgp = fopen( tpgpin, "wt" ) ) != NULLFILE ) + { + while ( ( fgets( ln, XLINELEN, fin ) ) != NULLCHAR ) + if ( strncmp( ln, "[pgp of", 7 ) != 0 ) + fputs( ln, fpgp ); + else + break; + fclose( fpgp ); + strcpy( ln, getenv( "PGPPATH" ) ); + strcat( ln, "\\pgp.exe" ); + pgperr = spawnl( P_WAIT, ln, "pgp", "-esat", + "-o", tpgpout, tpgpin, to_pgp_usr, NULL ); + free( to_pgp_usr ); + if ( pgperr || ( fpgp = fopen( tpgpout, "rt" ) ) == NULLFILE ) + fpgp = fopen( tpgpin, "rt" ); + while ( ( fgets( ln, XLINELEN, fpgp ) ) != NULLCHAR ) + fputs( ln, fout ); + fclose( fpgp ); + pgp_err( pgperr ); + unlink( tpgpin ); + unlink( tpgpout ); + } + } + else if ( fputs( ln, fout ) == EOF ) + return 1; + return 0; +} + +int +recv_pgp( char *ln, FILE * fin, FILE * fout, struct let * cmsg ) +{ + FILE *fpgp; + int pgperr; + char lstr[LINELEN]; + char *s; + + if ( strncmp( ln, "-----BEGIN PGP", 14 ) == 0 ) + { + if ( ( fpgp = fopen( tpgpin, "wt" ) ) != NULLFILE ) + { + fputs( ln, fpgp ); + do + { + if ( fgets( ln, LINELEN, fin ) == NULLCHAR ) + break; + fputs( ln, fpgp ); + } while ( strncmp( ln, "-----END PGP", 12 ) != 0 ); + fclose( fpgp ); + strcpy( lstr, getenv( "PGPPATH" ) ); + strcat( lstr, "\\pgp.exe" ); + pgperr = spawnl( P_WAIT, lstr, "pgp", "-p", + "-o", tpgpout, tpgpin, NULL ); + if ( pgperr || ( fpgp = fopen( tpgpout, "rt" ) ) == NULLFILE ) + fpgp = fopen( tpgpin, "rt" ); + if ( !pgperr ) + { + s = "[pgp on]\n"; + cmsg->size += strlen( s ); + fputs( s, fout ); + } + while ( fgets( ln, LINELEN, fpgp ) != NULLCHAR ) + { + cmsg->size += strlen( ln ); + fputs( ln, fout ); + } + if ( !pgperr ) + { + s = "[pgp off]\n"; + cmsg->size += strlen( s ); + fputs( s, fout ); + } + fclose( fpgp ); + change = 1; + unlink( tpgpin ); + unlink( tpgpout ); + pgp_err( pgperr ); + } + else + { + printf( "Unable to create PGP tmp file\r\n" ); + printf( "Message left encrypted... press any key\r\n" ); + getch( ); + } + return 1; + } + else + return 0; +} diff --git a/src/nos/doc/bmpgp01/SEND.C b/src/nos/doc/bmpgp01/SEND.C new file mode 100644 index 00000000..9ad6fb5f --- /dev/null +++ b/src/nos/doc/bmpgp01/SEND.C @@ -0,0 +1,1459 @@ +#include +#include +#include +#include +#include +#include +#ifndef UNIX +#include +#endif +#include "bm.h" + +struct addr *addrecip( ); +char *ptime( ); +extern char version[]; +long sequence; +char dateline[LINELEN], inreplytoline[LINELEN]; +char replytoline[XLINELEN], smtp_subjectline[XLINELEN]; +char fullnameline[XLINELEN], organline[XLINELEN]; +FILE *hfile; +char norcp[] = "No recipients\r\n"; +char nosend[] = "Send aborted\n"; +char bim[] = "\n ===== Begin of included message =====\n\n"; +char eim[] = " ===== End of included message =====\n\n"; +FILE *tpfile; +char tpf[LINELEN]; + +/* save and delete msg tmp file */ +savetpfile( ) +{ + char dmsg[XLINELEN]; + FILE *deadfl; + int c; + + strcpy( dmsg, deadmsg ); + if ( ( deadfl = fopen( dmsg, "w" ) ) == NULLFILE ) + perror( dmsg ); + else + { + fseek( tpfile, 0L, 0 ); + while ( ( c = getc( tpfile ) ) != EOF ) + if ( putc( c, deadfl ) == EOF ) + break; + if ( ferror( deadfl ) ) + { + perror( dmsg ); + ( void ) fclose( deadfl ); + ( void ) unlink( dmsg ); + } + else + { + ( void ) fclose( deadfl ); + printf( "Message saved in %s\r\n", dmsg ); + } + } + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); +} + +printtolist( tolist, ack ) +struct addr *tolist; +int ack; +{ + register struct addr *tp; + char tstring[XXLINELEN]; + int n; + + strcpy( tstring, "To: " ); + for ( tp = tolist; tp != NULLADDR; tp = tp->next ) + { + strcat( tstring, tp->user ); + if ( tp->host != NULLCHAR || *tp->host != '\0' ) + { + strcat( tstring, "@" ); + strcat( tstring, tp->host ); + } + n = strlen( tstring ); + if ( tp->next ) + { + if ( n > 50 ) + { + if ( tty ) + { + fputs( tstring, stdout ); + fputs( ",\r\n ", stdout ); + } + *tstring = '\0'; + } + else + strcat( tstring, ", " ); + } + } + if ( ack ) + { + if ( tty ) + { + fputs( tstring, stdout ); + fputs( " (Y/n) ? ", stdout ); + } + } + else if ( tty ) + { + fputs( tstring, stdout ); + fputs( "\r\n", stdout ); + } +} + +/* send a message */ +dosmtpsend( mfp, toargs, nargs, subject, incl, msgno, msgid, sendfile, + reply, date ) +FILE *mfp; +char *toargs[]; +int nargs; +char *subject; +int incl; +int msgno; +char *msgid; +int sendfile; +int reply; +char *date; +{ + char *tmpnam( ); + FILE *fpin, *fsign, *fsigna, *fts; + char smtp_subject[LINELEN]; + char *p; + char *tfl = "bmXXXXXX"; /* temp file name */ + struct addr *tolist; + time_t t; + int mnargs; + char *margs[MAXARGS], *targs[MAXARGS]; + char *cp, *q; + register int i, c, msgnum; + char bmcmd[2]; + struct stat mstat; + int T_nargs; + char cmd[LINELEN], tline[LINELEN]; + char cm[LINELEN], rm[LINELEN], line[LINELEN], tyn[LINELEN]; + char tstring[LINELEN], filetosend[LINELEN]; + char sign_str[XLINELEN], sign_all[XLINELEN]; + int tnargs, rmg, quotes, today_quote; + int txt = 0; + long beg_q_poz, end_q_poz; + + if ( nargs == 0 ) + { + printf( norcp ); + return 0; + } + fpin = mfp; + if( fpin == NULLFILE && emname != NULLCHAR ) + fpin = fopen( emname, "r" ); + if ( ( tolist = make_tolist( nargs, toargs ) ) == NULLADDR ) + { + fprintf( stderr, nosend ); + return 0; + } + + if ( ( sequence = get_msgid( ) ) == -1 ) + { + fprintf( stderr, nosend ); + return 0; + } + + time( &t ); + sprintf( tpf, "%s\\%s", tmpdir, tfl ); + mktemp( tpf ); + /* open textfile for write */ + if ( ( tpfile = fopen( tpf, "w+" ) ) == NULLFILE ) + { + perror( tpf ); + del_addrlist( tolist ); + return 1; + } + + if ( eflag && reply ) + { + printtolist( tolist, 1 ); + if ( tty ) + { + gets( tyn ); + q = tyn; + while ( *q == ' ' || *q == '\t' ) + q++; + if ( *q == 'n' || *q == 'N' ) + { + printf( "To: " ); + gets( tline ); + tnargs = parse( tline, targs, MAXARGS ); + if ( tnargs == 0 ) + { + printf( norcp ); + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + return 0; + } + if ( ( tolist = make_tolist( tnargs, targs ) ) == NULLADDR ) + { + fprintf( stderr, nosend ); + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + return 0; + } + else + printtolist( tolist, 0 ); + } + } + } + else + printtolist( tolist, 0 ); + + *fullnameline = '\0'; + if ( fullname != NULLCHAR && *fullname != '\0' ) + sprintf( fullnameline, " (%s)\n", fullname ); + else + sprintf( fullnameline, "\n" ); + + if ( !qflag ) + sprintf( dateline, "Date: %s", ptime( &t ) ); + + if ( !qflag ) + { + *replytoline = '\0'; + if ( replyto != NULLCHAR && *replyto != '\0' ) + sprintf( replytoline, "Reply-To: %s\n", replyto ); + + *smtp_subjectline = '\0'; + if ( sflag && tty && ( subject == NULL || *subject == '\0' ) || + mfp != NULLFILE || sendfile ) + { + /* prompt and get Subject: */ + printf( "Subject: " ); + gets( smtp_subject ); + q = smtp_subject; + while ( *q == ' ' || *q == '\t' ) + q++; + if ( *q != '\0' ) + sprintf( smtp_subjectline, "Subject: %s\n", q ); + } + if ( subject != NULL && *subject != '\0' ) + { + strcpy( smtp_subject, subject ); + if ( tty ) + printf( "Subject: %s\r\n", smtp_subject ); + sprintf( smtp_subjectline, "Subject: %s\n", smtp_subject ); + } + + *inreplytoline = '\0'; + if ( reply && *date != '\0' ) + sprintf( inreplytoline, "In-Reply-To: Your message of %s\n", date ); + + *organline = '\0'; + if ( organ != NULLCHAR && *organ != '\0' ) + sprintf( organline, "X-Organization: %s\n", organ ); + + if ( mfp != NULLFILE ) + fprintf( tpfile, " ===== Forwarded message follows =====\n\n" ); + } + + if ( !tty && fpin == NULLFILE ) + fpin = stdin; + + if ( fpin != NULLFILE ) + { + while ( ( c = getc( fpin ) ) != EOF ) + if ( putc( c, tpfile ) == EOF ) + break; + if ( ferror( tpfile ) ) + { + perror( "tmp file" ); + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + return 1; + } + } + else + { + if ( incl ) + { + if ( *msgid != '\0' ) + fprintf( tpfile, "In message %s you write:\n", msgid ); + else + fprintf( tpfile, "You write:\n" ); + msgtofile( msgno, tpfile, 1, 1 ); + } + if ( sendfile ) + { + printf( "File: " ); + gets( filetosend ); + q = filetosend; + while ( *q == ' ' || *q == '\t' ) + q++; + cleanup_fname( q ); + if ( *q == '\0' ) + { + printf( nofile ); + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + return 0; + } + else if ( ( fts = fopen( q, "r" ) ) == NULLFILE ) + { + printf( "No such file\r\n" ); + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + return 0; + } + else + { + printf( "Reading file %s\r\n", q ); + while ( ( c = getc( fts ) ) != EOF ) + if ( putc( c, tpfile ) == EOF ) + break; + if ( ferror( tpfile ) ) + { + perror( "tmp file" ); + ( void ) fclose( fts ); + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + return 1; + } + ( void ) fclose( fts ); + } + } + else + { + /* sending a message not from a file */ + /* copy text from console to the file */ + if ( !eflag ) + { + printf( "\r\nType message text. Enter a '.' " + "or Ctrl-D in column one to end." ); + printf( "\r\nCommands: ~p - Print msg so far, " + "~e - Invoke editor, ~? - Help\r\n\n" ); + for ( ;; ) + { + /* read line from console ie stdin */ + if ( gets( tstring ) == NULLCHAR ) + { + break; + } + rip( tstring ); + if ( strcmp( tstring, "." ) == 0 || tstring[0] == '\004' ) + break; + if ( *tstring == '~' ) + { + switch ( tstring[1] ) + { + case 'h': + case 'p': + case 'P': + /* Print the message so far */ + if ( !qflag ) + fputs( dateline, stdout ); + printf( "From: %s@%s", username, hostname ); + fputs( fullnameline, stdout ); + if ( !qflag ) + { + fputs( replytoline, stdout ); + printtolist( tolist, 0 ); + fputs( smtp_subjectline, stdout ); + fputs( inreplytoline, stdout ); + fputs( organline, stdout ); + printf( "X-Mailer: %s\r\n", version ); + fputs( "\n", stdout ); + } + if ( tstring[1] != 'h' ) + { + fseek( tpfile, 0L, 0 ); + while ( fgets( tstring, sizeof( tstring ), tpfile ) != + NULLCHAR ) + fputs( tstring, stdout ); + } + break; + case 'e': + case 'v': + /* Drop into editor */ + if ( editor == NULLCHAR || *editor == '\0' ) + { + printf( "No editor defined\r\n" ); + break; + } + ( void ) fclose( tpfile ); + sprintf( tstring, "%s %s", editor, tpf ); + /* call editor to enter message text */ + system( tstring ); + txt = 1; + tpfile = fopen( tpf, "a+" ); + break; + case 'a': + p = &tstring[2]; + mnargs = parse( p, margs, MAXARGS ); + in_alias( mnargs, margs, NULLCHAR ); + break; + case 'o': + if ( !qflag ) + { + p = &tstring[2]; + while ( *p == ' ' || *p == '\t' ) + p++; + if ( *p != '\0' ) + { + if ( ( strlen( p ) == 1 ) && *p == '~' ) + *organline = '\0'; + else if ( *p == '~' ) + sprintf( organline, "X-Organization: %s\n", &p[1] ); + else + sprintf( organline, "X-Organization: %s\n", p ); + } + else + fputs( organline, stdout ); + } + break; + case 'R': + if ( !qflag ) + { + p = &tstring[2]; + while ( *p == ' ' || *p == '\t' ) + p++; + if ( *p != '\0' ) + { + if ( ( strlen( p ) == 1 ) && *p == '~' ) + *replytoline = '\0'; + else if ( *p == '~' ) + sprintf( replytoline, "Reply-To: %s\n", &p[1] ); + else + sprintf( replytoline, "Reply-To: %s\n", p ); + } + else + fputs( replytoline, stdout ); + } + break; + case 's': + if ( !qflag ) + { + p = &tstring[2]; + while ( *p == ' ' || *p == '\t' ) + p++; + if ( *p != '\0' ) + { + if ( ( strlen( p ) == 1 ) && *p == '~' ) + *smtp_subjectline = '\0'; + else if ( *p == '~' ) + sprintf( smtp_subjectline, "Subject: %s\n", &p[1] ); + else + sprintf( smtp_subjectline, "Subject: %s\n", p ); + } + else + fputs( smtp_subjectline, stdout ); + } + break; + case 'T': + p = &tstring[2]; + if ( *p != '\0' ) + { + T_nargs = parse( p, margs, MAXARGS ); + if ( ( tolist = make_tolist( T_nargs, margs ) ) == NULLADDR ) + { + fprintf( stderr, nosend ); + if ( txt ) + savetpfile( ); + else + { + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + } + return 0; + } + } + printtolist( tolist, 0 ); + break; + case 'q': + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + printf( "Abort\r\n" ); + return 0; + case 'w': + { + FILE *outfl; + p = &tstring[2]; + while ( *p == ' ' || *p == '\t' ) + p++; + cleanup_fname( p ); + if ( *p == '\0' ) + printf( nofile ); + else + { + if ( stat( p, &mstat ) == 0 ) + { + printf( "File exists\r\n" ); + break; + } + if ( ( outfl = fopen( p, "w" ) ) == NULLFILE ) + { + perror( p ); + break; + } + fseek( tpfile, 0L, 0 ); + while ( ( c = getc( tpfile ) ) != EOF ) + if ( putc( c, outfl ) == EOF ) + break; + if ( ferror( outfl ) ) + { + perror( p ); + ( void ) fclose( outfl ); + ( void ) unlink( p ); + break; + } + ( void ) fclose( outfl ); + printf( "New file %s\r\n", p ); + } + break; + } + case 'r': + { + FILE *infl; + p = &tstring[2]; + while ( *p == ' ' || *p == '\t' ) + p++; + cleanup_fname( p ); + if ( *p == '\0' ) + printf( nofile ); + else if ( ( infl = fopen( p, "r" ) ) == NULLFILE ) + printf( "No such file\r\n" ); + else + { + printf( "Reading file %s\r\n", p ); + while ( ( c = getc( infl ) ) != EOF ) + if ( putc( c, tpfile ) == EOF ) + break; + if ( ferror( tpfile ) ) + { + perror( "tmp file" ); + ( void ) fclose( infl ); + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + return 1; + } + ( void ) fclose( infl ); + txt = 1; + } + + break; + } + case 'm': + { + int msg; + p = &tstring[2]; + while ( *p == ' ' || *p == '\t' ) + p++; + if ( *p == '\0' ) + msg = current; + else + msg = atoi( p ); + if ( mfile == NULLFILE || msg < 1 || msg > nmsgs ) + printf( "No such message\r\n" ); + else + { + printf( "Include header (y/N) ? " ); + gets( cm ); + q = cm; + while ( *q == ' ' || *q == '\t' ) + q++; + printf( "Inserting message %d\r\n", msg ); + fprintf( tpfile, bim ); + if ( *q == 'y' || *q == 'Y' ) + msgtofile( msg, tpfile, 0, 1 ); + else + msgtofile( msg, tpfile, 1, 1 ); + fprintf( tpfile, eim ); + txt = 1; + } + break; + } + case 'M': + { + int msg; + p = &tstring[2]; + while ( *p == ' ' || *p == '\t' ) + p++; + if ( *p == '\0' ) + msg = current; + else + msg = atoi( p ); + if ( mfile == NULLFILE || msg < 1 || msg > nmsgs ) + printf( "No such message\r\n" ); + else + { + printf( "Include header (y/N) ? " ); + gets( cm ); + q = cm; + while ( *q == ' ' || *q == '\t' ) + q++; + printf( "Inserting message %d\r\n", msg ); + fprintf( tpfile, bim ); + if ( *q == 'y' || *q == 'Y' ) + msgtofile( msg, tpfile, 0, 0 ); + else + msgtofile( msg, tpfile, 1, 0 ); + fprintf( tpfile, eim ); + txt = 1; + } + break; + } + case '!': + p = &tstring[2]; + system( p ); + break; + case '<': + p = &tstring[2]; + ( void ) fclose( tpfile ); + sprintf( cmd, "%s >> %s", p, tpf ); + system( cmd ); + tpfile = fopen( tpf, "a+" ); + txt = 1; + break; + case '~': + fprintf( tpfile, "%s\n", &tstring[1] ); + txt = 1; + break; + case ':': + p = &tstring[2]; + while ( *p == ' ' || *p == '\t' ) + p++; + if ( *p == '!' ) + { + system( &p[1] ); + break; + } + if ( *p ) + { + cp = p; + while ( *cp && *cp != ' ' && *cp != '\t' ) + cp++; + mnargs = parse( cp, margs, MAXARGS ); + } + switch ( *p ) + { + case 'a': + in_alias( mnargs, margs, NULLCHAR ); + break; + case 'A': + if ( mfile == NULLFILE ) + printf( nomail ); + else + { + if ( mnargs == 0 ) + msgnum = current; + else + msgnum = atoi( margs[0] ); + if ( msgnum >= 1 && msgnum <= nmsgs ) + alias_msg( msgnum ); + else + printf( badmsg, msgnum ); + } + break; + case 'd': + do_msg( mnargs, margs, 1, 0, 0, 0, 0 ); + break; + case 'h': + if ( mfile == NULLFILE ) + printf( nomail ); + else if ( lflag ) + if ( mnargs == 0 ) + listnotes( 1, 0, NULLCHAR, 0, 2 ); + else + { + msgnum = atoi( margs[0] ); + if ( msgnum >= 1 && msgnum <= nmsgs ) + listnotes( 1, 0, NULLCHAR, msgnum, 2 ); + else + printf( badmsg, msgnum ); + } + else if ( mnargs == 0 ) + listnotes( 0, 0, NULLCHAR, 0, 2 ); + else + { + msgnum = atoi( margs[0] ); + if ( msgnum >= 1 && msgnum <= nmsgs ) + listnotes( 0, 0, NULLCHAR, msgnum, 2 ); + else + printf( badmsg, msgnum ); + } + break; + case 'H': + if ( mfile == NULLFILE ) + printf( nomail ); + else if ( mnargs == 0 ) + listnotes( 1, 0, NULLCHAR, 0, 2 ); + else + { + msgnum = atoi( margs[0] ); + if ( msgnum >= 1 && msgnum <= nmsgs ) + listnotes( 1, 0, NULLCHAR, msgnum, 2 ); + else + printf( badmsg, msgnum ); + } + break; + case 'k': + if ( mnargs == 0 ) + printf( "No Job_ID specified\r\n" ); + else + for ( i = 0; i < mnargs; i++ ) + killjob( margs[i] ); + break; + case 'l': + listqueue( ); + break; + case 'n': + if ( txt ) + mboxnames( mnargs, margs, 1 ); + else + mboxnames( mnargs, margs, 0 ); + break; + case '$': + if ( isnewmail( ) ) + { + printf( newmail ); + if ( txt ) + reinit( 3, 1 ); + else + reinit( 3, 0 ); + } + else if ( txt ) + reinit( 2, 1 ); + else + reinit( 2, 0 ); + break; + case 'p': + do_msg( mnargs, margs, 0, 0, 0, 0, 1 ); + break; + case 's': + do_msg( mnargs, margs, 0, 0, 0, 1, 0 ); + break; + case 'u': + do_msg( mnargs, margs, 0, 1, 0, 0, 0 ); + break; + case 'w': + do_msg( mnargs, margs, 0, 0, 1, 0, 0 ); + break; + case '/': + if ( mfile == NULLFILE ) + printf( nomail ); + else + { + if ( mnargs == 0 ) + { + printf( nopattern ); + break; + } + else if ( lflag ) + listnotes( 1, mnargs, margs, 0, 0 ); + else + listnotes( 0, mnargs, margs, 0, 0 ); + } + break; + case '%': + if ( mfile == NULLFILE ) + printf( nomail ); + else + { + if ( mnargs == 0 ) + msgnum = current; + else + msgnum = atoi( margs[0] ); + switch ( p[1] ) + { + case 'f': + case 'F': + if ( msgnum >= 1 && msgnum <= nmsgs ) + Reply( msgnum, 0, 1, 1, 0 ); + else + printf( badmsg, msgnum ); + break; + default: + if ( msgnum >= 1 && msgnum <= nmsgs ) + Reply( msgnum, 0, 0, 1, 0 ); + else + printf( badmsg, msgnum ); + break; + + } + } + break; + case '.': + if ( mfile == NULLFILE ) + printf( nomail ); + else + displaymsg( current ); + break; + case '=': + if ( mfile == NULLFILE ) + printf( nomail ); + else + printf( "Message #%d %s\r\n", current, + mbox[current].status & + DELETE ? "[Deleted]" : "" ); + break; + case '\0': + printnext( ); + break; + case '?': + dohelp( ); + break; + default: + if ( *p == 'b' || *p == 'f' || *p == 'F' || + *p == 'm' || *p == 'M' || *p == 'q' || + *p == 'r' || *p == 'R' || *p == 'x' ) + { + strncpy( bmcmd, p, 1 ); + bmcmd[1] = '\0'; + printf( "Cannot run mail-command '%s' " + "while composing\r\n", bmcmd ); + } + else if ( !isdigit( *p ) ) + printf( badcommand ); + else + { + if ( mfile == NULLFILE ) + printf( nomail ); + else + { + msgnum = atoi( p ); + if ( msgnum <= 0 || msgnum > nmsgs ) + printf( badmsg, msgnum ); + else + { + current = msgnum; + displaymsg( current ); + } + } + } + break; + } + break; + case '?': + printf( "HELP: Mail Compose Escapes\r\n\n" ); + printf( "EDITING HEADING FIELDS " + "EDITING MESSAGE BODY\r\n" ); + printf( " " + " ~e or ~v Invoke editor\r\n" ); + printf( " ~o [organ] Set X-Organization\r\n" ); + printf( " ~R [reply] Set Reply-To field " + "OTHER COMPOSE ESCAPES\r\n" ); + printf( " ~s [subject] Set Subject field " + " ~! command Run shell command\r\n" ); + printf( " " + " ~: mail-command Run mail command\r\n" ); + printf( " ~T [users] Set To field " + " ~? Print this help msg\r\n" ); + printf( " " + " ~~ Begin line with tilde\r\n" ); + printf( "READING IN MESSAGES " + " ~a [name] Edit or print alias\r\n" ); + printf( " ~< command Read output shell command " + " ~h Print header\r\n" ); + printf( " ~m Read msg " + " ~p or ~P Print msg so far\r\n" ); + printf( " ~M Read msg; no tab " + " ~q Abort msg\r\n" ); + printf( " ~r file Read file " + " ~w file Write msg to file\r\n\n" ); + break; + default: + printf( "Unknown ~ escape. ~? for help\r\n" ); + } + printf( "(continue)\r\n" ); + } + else + { + fprintf( tpfile, "%s\n", tstring ); + txt = 1; + } + } + printf( "EOF\r\n" ); + } + else + { + if ( editor == NULLCHAR || *editor == '\0' ) + { + printf( "No editor defined\r\n" ); + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + return 0; + } + ( void ) fclose( tpfile ); + sprintf( tstring, "%s %s", editor, tpf ); + start:system( tstring ); + printf( "Abort, Edit or Send message (a/e/S) ? " ); + gets( line ); + q = line; + while ( *q == ' ' || *q == '\t' ) + q++; + if ( *q == 'a' || *q == 'A' ) + { + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + return 0; + } + if ( *q == 'e' || *q == 'E' ) + goto start; + tpfile = fopen( tpf, "a+" ); + } + } + } + if ( !qflag ) + { + sprintf( sign_str, "%s/%s.sig", mqueue, unotename ); + cleanup_fname( sign_str ); + sprintf( sign_all, "%s/signatur.sig", mqueue ); + cleanup_fname( sign_all ); + if ( ( fsigna = fopen( sign_all, "rt" ) ) != NULLFILE ) + { + if ( ( fsign = fopen( sign_str, "wt" ) ) != NULLFILE ) + { + while ( fgets( sign_all, XLINELEN, fsigna ) != NULLCHAR ) + { + if ( strncmp( sign_all, "--begin--", 9 ) == 0 ) + break; + fputs( sign_all, fsign ); + } + fprintf( fsign, "-- \n" ); + beg_q_poz = ftell( fsigna ); + quotes = 0; + while ( fgets( sign_all, XLINELEN, fsigna ) != NULLCHAR ) + { + if ( *sign_all == '\n' ) + quotes++; + if ( strncmp( sign_all, "--end--", 7 ) == 0 ) + { + quotes++; + break; + } + } + end_q_poz = ftell( fsigna ); +#ifdef UNIX + today_quote = ( unsigned ) time( NULL ) % quotes; +#else + today_quote = *((unsigned far *) MK_FP( 0x40, 0x6c )) % quotes; +#endif + fseek( fsigna, beg_q_poz, SEEK_SET ); + while ( today_quote ) + { + fgets( sign_all, XLINELEN, fsigna ); + if ( *sign_all == '\n' ) + today_quote--; + } + while ( fgets( sign_all, XLINELEN, fsigna ) != NULLCHAR ) + { + if ( *sign_all == '\n' || + strncmp( sign_all, "--end--", 7 ) == 0 ) + break; + fputs( sign_all, fsign ); + } + fprintf( fsign, "--\n" ); + fseek( fsigna, end_q_poz, SEEK_SET ); + while ( fgets( sign_all, XLINELEN, fsigna ) != NULLCHAR ) + fputs( sign_all, fsign ); + fclose( fsigna ); + fclose( fsign ); + } + } + if ( ( fsign = fopen( sign_str, "rt" ) ) != NULLFILE ) + { + while ( ( c = getc( fsign ) ) != EOF ) + if ( putc( c, tpfile ) == EOF ) + break; + if ( ferror( tpfile ) ) + { + perror( "tmp file" ); + ( void ) fclose( fsign ); + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + return 1; + } + ( void ) fclose( fsign ); + } + } + header( tolist ); + if ( ( queuejob( tpfile, tolist, 0 ) ) != 1 ) + { + + fputs( "\n", tpfile ); + if ( !sendfile && !rflag && record != NULLCHAR && *record != '\0' ) + if ( recflag && tty ) + { + printf( "Record message (y/N) ? " ); + gets( rm ); + q = rm; + while ( *q == ' ' || *q == '\t' ) + q++; + if ( *q == 'y' || *q == 'Y' ) + recordmsg( tpfile ); /* save copy for sender */ + } + else + recordmsg( tpfile ); /* save copy for sender */ + } + else if ( txt ) + { + ( void ) fclose( hfile ); + del_addrlist( tolist ); + savetpfile( ); + return 0; + } + ( void ) fclose( hfile ); + del_addrlist( tolist ); + ( void ) fclose( tpfile ); + ( void ) unlink( tpf ); + return 0; +} + +/* forward a message in its orginal form */ +bouncemsg( mfp, toargs, nargs ) +FILE *mfp; +char *toargs[]; +int nargs; +{ + struct addr *list; + + if ( nargs == 0 ) + printf( norcp ); + else if ( ( list = make_tolist( nargs, toargs ) ) == NULLADDR ) + fprintf( stderr, nosend ); + else + { + printtolist( list, 0 ); + queuejob( mfp, list, 1 ); + del_addrlist( list ); + } +} + +/* Return Date/Time in Arpanet format in passed string */ +/* Print out the time and date field as + * "DAY day MONTH year hh:mm:ss ZONE" + */ +char * +ptime( t ) +long *t; +{ + register struct tm *ltm; + struct tm *localtime( ); + static char tz[4]; + static char str[40]; + extern char *getenv( ); + char *p; + static char *days[7] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; + + static char *months[12] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + + /* Read the system time */ + ltm = localtime( t ); + + if ( tzone != NULLCHAR && *tzone != '\0' ) + strncpy( tz, tzone, 3 ); + + if ( *tz == '\0' ) + if ( ( p = getenv( "TZ" ) ) == NULLCHAR ) + strcpy( tz, "GMT" ); + else + strncpy( tz, p, 3 ); + + /* rfc 822 format */ + sprintf( str, "%s, %.2d %s %02d %02d:%02d:%02d %.3s\n", + days[ltm->tm_wday], + ltm->tm_mday, + months[ltm->tm_mon], + ltm->tm_year, + ltm->tm_hour, + ltm->tm_min, + ltm->tm_sec, + tz ); + return ( str ); +} + +/* save copy in the record file */ +recordmsg( dfile ) +FILE *dfile; +{ + FILE *fp; + time_t t; + int d; + char ml[LINELEN]; + register char *p; + register char *cp; + + fseek( dfile, 0L, 0 ); + if ( ( fp = fopen( record, "a" ) ) == NULLFILE ) + { + printf( "Unable to append to %s\r\n", record ); + } + else + { + ( void ) time( &t ); + fprintf( fp, "From %s@%s %s", username, hostname, ctime( &t ) ); + rewind( hfile ); + while ( ( d = getc( hfile ) ) != EOF ) + if ( putc( d, fp ) == EOF ) + break; + while ( fgets( ml, sizeof( ml ), dfile ) != NULLCHAR ) + { + p = ml; + if ( strncmp( p, "From ", 5 ) == 0 ) + fputs( ">", fp ); + fputs( p, fp ); + } + if ( ferror( fp ) ) + { + ( void ) fclose( fp ); + return 1; + } + ( void ) fclose( fp ); + } + return 0; +} + +/* make tmpfile with header */ +header( tolist ) +struct addr *tolist; +{ + FILE *tmpfile( ); + register struct addr *tp; + char qstring[XXLINELEN]; + int n; + + if ( ( hfile = tmpfile( ) ) == NULLFILE ) + perror( "tmp file" ); + else + { + if ( !qflag ) + fputs( dateline, hfile ); + if ( !aflag ) + { + fprintf( hfile, "From: %s@%s", username, hostname ); + fputs( fullnameline, hfile ); + } + if ( !qflag ) + { + fputs( replytoline, hfile ); + strcpy( qstring, "To: " ); + for ( tp = tolist; tp != NULLADDR; tp = tp->next ) + { + strcat( qstring, tp->user ); + if ( tp->host != NULLCHAR || *tp->host != '\0' ) + { + strcat( qstring, "@" ); + strcat( qstring, tp->host ); + } + n = strlen( qstring ); + if ( tp->next ) + { + if ( n > 50 ) + { + fprintf( hfile, "%s,\n ", qstring ); + *qstring = '\0'; + } + else + strcat( qstring, ", " ); + } + } + fprintf( hfile, "%s\n", qstring ); + fputs( smtp_subjectline, hfile ); + fputs( inreplytoline, hfile ); + fputs( organline, hfile ); + fputs( "\n", hfile ); + } + } +} + +/* place a mail job in the outbound queue */ +int +queuejob( dfile, tolist, bounce ) +FILE *dfile; +struct addr *tolist; +int bounce; +{ + FILE *fp; + char tmpstring[XLINELEN]; + char rm[LINELEN]; + char *q; + register struct addr *tp, *sp; + char prefix[9]; + int c, d; + long id; + int xmsgs; + + if ( !bounce ) + xmsgs = 0; + else + xmsgs = 1; + for ( tp = tolist; tp != NULLADDR; tp = tp->next ) + { + if ( tp->sent ) + continue; + fseek( dfile, 0L, 0 ); + if ( !xmsgs ) + sprintf( prefix, "%ld", sequence ); + else + { + if ( ( id = get_msgid( ) ) == -1 ) + { + fprintf( stderr, nosend ); + return 1; + } + sprintf( prefix, "%ld", id ); + } + ( void ) mlock( mqueue, prefix ); + sprintf( tmpstring, "%s/%s.txt", mqueue, prefix ); + cleanup_fname( tmpstring ); + if ( ( fp = fopen( tmpstring, "w" ) ) == NULLFILE ) + { + fprintf( stderr, "Unable to open %s\n", tmpstring ); + ( void ) rmlock( mqueue, prefix ); + return 1; + } + if ( !bounce ) + { + rewind( hfile ); + while ( ( d = getc( hfile ) ) != EOF ) + if ( putc( d, fp ) == EOF ) + break; + } + while ( ( fgets( tmpstring, XLINELEN, dfile ) ) != NULLCHAR ) + { + if ( send_pgp( tmpstring, dfile, fp, tp->user ) ) + break; + } + if ( ferror( fp ) ) + { + ( void ) fclose( fp ); + ( void ) rmlock( mqueue, prefix ); + return 1; + } + ( void ) fclose( fp ); + sprintf( tmpstring, "%s/%s.wrk", mqueue, prefix ); + cleanup_fname( tmpstring ); + if ( ( fp = fopen( tmpstring, "w" ) ) == NULLFILE ) + { + ( void ) rmlock( mqueue, prefix ); + return 1; + } + q = "n" ; + if ( tty && !novia && via && vflag ) + { + printf( "Send through via: %s (y/N) ? ", via ); + gets( rm ); + q = rm; + while ( *q == ' ' || *q == '\t' ) + q++; + } + if ( !tty && !novia && vflag || *q == 'y' || *q == 'Y' ) + fprintf( fp, "%s\n", via ); + else + fprintf( fp, "%s\n", tp->host ); + if ( !aflag ) + fprintf( fp, "%s@%s\n", username, hostname ); + else + fprintf( fp, "\n" ); + fprintf( fp, "%s@%s\n", tp->user, tp->host ); + tp->sent++; + /* find any other addresses to the same host */ + for ( sp = tp->next; sp != NULLADDR; sp = sp->next ) + { + if ( sp->sent ) + continue; + if ( strcmp( tp->host, sp->host ) == 0 ) + { + fprintf( fp, "%s@%s\n", sp->user, sp->host ); + sp->sent++; + } + } + ( void ) fclose( fp ); + ( void ) rmlock( mqueue, prefix ); + xmsgs = 1; + } + + return 0; +} + +#define SKIPWORD(X) while(*X && *X!=' ' && *X!='\t' && *X!='\n' && *X!=',') X++; +#define SKIPSPACE(X) while(*X ==' ' || *X =='\t' || *X =='\n' || *X ==',') X++; + +/* check for an alias and expand alias into a address list */ +struct addr * +expandalias( head, user ) +struct addr **head; +char *user; +{ + FILE *fp; + register char *s, *p, *h; + int inalias; + struct addr *tp; + char buf[LINELEN]; + + fp = fopen( aliases, "r" ); + + /* no alias file found */ + if ( fp == NULLFILE ) + return addrecip( head, user, hostname ); + + inalias = 0; + while ( fgets( buf, LINELEN, fp ) != NULLCHAR ) + { + p = buf; + if ( *p == '#' || *p == '\0' || *p == '\n' ) + continue; + rip( p ); + + /* if not in an matching entry skip continuation lines */ + if ( !inalias && isspace( *p ) ) + continue; + + /* when processing an active alias check for a continuation */ + if ( inalias ) + { + if ( !isspace( *p ) ) + break; /* done */ + } + else + { + s = p; + SKIPWORD( p ); + *p++ = '\0'; /* end the alias name */ + if ( strcmp( s, user ) != 0 ) + continue; /* no match go on */ + } + + /* process the recipients on the alias line */ + SKIPSPACE( p ); + while ( *p != '\0' && *p != '#' ) + { + inalias = 1; + s = p; + SKIPWORD( p ); + if ( *p != '\0' ) + *p++ = '\0'; + /* find hostname */ + if ( ( h = strchr( s, '@' ) ) != NULLCHAR ) + *h++ = '\0'; + else + h = hostname; + tp = addrecip( head, s, h ); + SKIPSPACE( p ); + } + } + ( void ) fclose( fp ); + + if ( inalias ) /* found and processed and alias. */ + return tp; + + /* no alias found treat as a local address */ + return addrecip( head, user, hostname ); +} + +/* convert arg list to a list of address structures */ +struct addr * +make_tolist( argc, argv ) +int argc; +char *argv[]; +{ + struct addr *tolist, *tp; + char *user, *host; + int i; + + tolist = NULLADDR; + for ( i = 0; i < argc; i++ ) + { + user = argv[i]; + if ( in_alias( 1, NULLCHAR, user ) || stricmp( user, username ) == 0 ) + tp = expandalias( &tolist, user ); + else + { + if ( ( host = strchr( user, '@' ) ) != NULLCHAR ) + { + *host++ = '\0'; + /* if it matches our host name */ + if ( stricmp( host, hostname ) == 0 ) + host = NULLCHAR; + } + else if ( gate != NULLCHAR && *gate != '\0' ) + host = gate; + + if ( host == NULLCHAR ) /* a local address */ + tp = expandalias( &tolist, user ); + else /* a remote address */ + tp = addrecip( &tolist, user, host ); + } + + if ( tp == NULLADDR ) + { + fprintf( stderr, "Out of memory\n" ); + del_addrlist( tolist ); + return NULLADDR; + } + } + return tolist; +} + +/* delete a list of mail addresses */ +del_addrlist( list ) +struct addr *list; +{ + struct addr *tp, *tp1;; + for ( tp = list; tp != NULLADDR; tp = tp1 ) + { + tp1 = tp->next; + if ( tp->user != NULLCHAR ); + free( tp->user ); + if ( tp->host != NULLCHAR ); + free( tp->host ); + ( void ) free( ( char * ) tp ); + } +} + +/* add an address to the from of the list pointed to by head +** return NULLADDR if out of memory. +*/ +struct addr * +addrecip( head, user, host ) +struct addr **head; +char *user, *host; +{ + register struct addr *tp; + + tp = ( struct addr * ) calloc( 1, sizeof( struct addr ) ); + if ( tp == NULLADDR ) + return NULLADDR; + + tp->next = NULLADDR; + + /* allocate storage for the user's login */ + if ( ( tp->user = malloc( ( unsigned ) strlen( user ) + 1 ) ) == NULLCHAR ) + { + ( void ) free( ( char * ) tp ); + return NULLADDR; + } + strcpy( tp->user, user ); + + /* allocate storage for the host name */ + if ( host != NULLCHAR ) + if ( ( tp->host = malloc( ( unsigned ) strlen( host ) + 1 ) ) == NULLCHAR ) + { + ( void ) free( tp->user ); + ( void ) free( ( char * ) tp ); + return NULLADDR; + } + strcpy( tp->host, host ); + + /* add entry to front of existing list */ + if ( *head == NULLADDR ) + *head = tp; + else + { + tp->next = *head; + *head = tp; + } + return tp; + +} diff --git a/src/nos/doc/bmpgp01/SIGNATUR.SIG b/src/nos/doc/bmpgp01/SIGNATUR.SIG new file mode 100644 index 00000000..b5bc3ca0 --- /dev/null +++ b/src/nos/doc/bmpgp01/SIGNATUR.SIG @@ -0,0 +1,150 @@ + Regards, + Emil +--begin-- +"Can you imagine the silence if everyone said only what he knows?" - K.Capek + +Recyclable bits and bytes have been used for the message above. + +Don't walk on the grass, smoke it. + +#define QUESTION ( bb || !bb ) - W. Shakespeare + +There's no gravity, the world just sucks. + + i + it + i nt + i nc t + i n fc t + i n f e c t + ... + t h e r e ' s n o + m e d i c i n e + a g a i n s t !!! + +"The reasonable man adapts himself to the world; the unreasonable one +persists in trying to adapt the world to himself. Therefore all progress +depends on the unreasonable man." - Shaw + +The surest sign that intelligent life exists elsewhere in the universe is +that it has never tried to contact us. + +Recursion: (n.) a programming method which tests the limits of available +memory in an iterative way by using the stack. When the program fails, all +memory has been used. Memorize this definition, then see: Recursion. + +If you have a VIRUS, in the name of biodiversity, PLEASE don't destroy it. + +PGP is obviously a good idea: look at who objects to it. + +A common mistake that people make when trying to design something completely +foolproof was to underestimate the ingenuity of complete fools. + +If debugging is the process of removing bugs, then programming must be the +process of putting them in. + +"To be or not to be" -Shakespeare +"To do is to be" -Socrates +"To be is to do" -Sartre +"To be do be do" -Sinatra + +A Bus station is where Buses stop. A Train station is where Trains stop. +On my desk, there is a Work station. + +A computer scientist is someone who fixes things that aren't broken. + +After a number of decimal places, nobody cares. + +Another megabytes the dust. + +Any nitwit can understand computers. Many do. + +Any program that runs right is obsolete. +Any sufficiently advanced bug is indistinguishable from a feature. + +As far as we know, our computer has never had an undetected error. + +Asking whether machines can think is like asking whether submarines can swim. + +Avoid temporary variables and strange women. +Beware of programmers who carry screwdrivers. + +CChheecckk yyoouurr dduupplleexx sswwiittcchh.. + +Hackers have kernel knowledge. + +The generation of random numbers is too important to be left to chance. + +The world is coming to an end. . . SAVE YOUR BUFFERS!! +The world will end in 5 minutes. Please log out. + +The determined programmer can write a FORTRAN program in any language. +Those who can't write, write help files. + +To err is human; but to really screw things up requires the root password. +To err is human; to really foul things up requires a computer. +To err is human; to forgive, beyond the scope of the Operating System. + +You never finish a program, you just stop working on it. + +If nothing ever sticks to TEFLON, how do they make TEFLON stick to the pan? + +finger: Segmentation fault (core dumped) +[1] + Done rm -rf * & + +God placed me on this earth to accomplish a certain number of things. +Right now I am so far behind, I'm never going to die. + +"If a malicious user has filled up your swap space, identify the offending +process or processes, and kill them." -Practical Unix Security + +Linux the choice of a Gnu generation +Linux - Why use Windows, since there is a door? + +Microsoft isn't the answer. Microsoft is the question, and the answer is no. + +Windows 95, (n): 32 bit extension and a graphical shell for a 16 bit patch +to an 8 bit operating system originally coded for a 4 bit microprocessor, +written by a 2 bit company that can't stand 1 bit of competition. + +If speed scares you, try Microsoft Windows. +Windows/NT: From the people who brought you EDLIN! +WinError: Window locked. Try Ctrl-Alt-Del. Then RESET. + +Hal 9000: "Dave, put those Windows disks down....Dave...DAVE!" + +Windows Error: Unable to figure out our own code. System halted. +Windows Error: Erroneous error. Nothing wrong. +Windows Error: Reserved for future mistakes. + +Air conditioned environment - Do not open Windows. + +Data to Picard: No, Captain, I do NOT run Windows. + +MASOCHIST /mas-oh-kist/ (n): Windows user. +Friends don't let friends use Windows! + +MS-Windows: A torture device not yet banned by Geneva Convention. + +He who laughs last probably isn't using Windows. + +Oxymorons: fast Windows, runs under Windows, Windows accelerator + +REAL men use COPY CON to create Windows apps... + +Remember, Speed kills! Use Windows. + +Turn your Pentium Pro into an XT - Run Windows NT. + +Windows would be better with curtains. + +Windows 95 to Pentium/233MHz CPU: Don't rush me, don't rush me ... + +Windows NT: It just gets Beta and Beta. +Windows NT: The network server that doesn't +Are you using Windows NT, or is that just an XT ? + +Would you let a Microsoft-based program run air traffic ? +--end-- +I am not a number, I am a PGP-Key: C1540493 2FC86994 4CC531E8 4331406A + diff --git a/src/nos/doc/bmpgp01/WILDMAT.C b/src/nos/doc/bmpgp01/WILDMAT.C new file mode 100644 index 00000000..c9ca848f --- /dev/null +++ b/src/nos/doc/bmpgp01/WILDMAT.C @@ -0,0 +1,136 @@ +/* + * @(#)wildmat.c 1.3 87/11/06 Public Domain. + * +From: rs@mirror.TMC.COM (Rich Salz) +Newsgroups: net.sources +Subject: Small shell-style pattern matcher +Message-ID: <596@mirror.TMC.COM> +Date: 27 Nov 86 00:06:40 GMT + +There have been several regular-expression subroutines and one or two +filename-globbing routines in mod.sources. They handle lots of +complicated patterns. This small piece of code handles the *?[]\ +wildcard characters the way the standard Unix(tm) shells do, with the +addition that "[^.....]" is an inverse character class -- it matches +any character not in the range ".....". Read the comments for more +info. + +For my application, I had first ripped off a copy of the "glob" routine +from within the find(1) source, but that code is bad news: it recurses +on every character in the pattern. I'm putting this replacement in the +public domain. It's small, tight, and iterative. Compile with -DTEST +to get a test driver. After you're convinced it works, install in +whatever way is appropriate for you. + +I would like to hear of bugs, but am not interested in additions; if I +were, I'd use the code I mentioned above. +*/ +/* +** Do shell-style pattern matching for ?, \, [], and * characters. +** Might not be robust in face of malformed patterns; e.g., "foo[a-" +** could cause a segmentation violation. +** +** Written by Rich $alz, mirror!rs, Wed Nov 26 19:03:17 EST 1986. +*/ + +/* + * Modified 6Nov87 by John Gilmore (hoptoad!gnu) to return a "match" + * if the pattern is immediately followed by a "/", as well as \0. + * This matches what "tar" does for matching whole subdirectories. + * + * The "*" code could be sped up by only recursing one level instead + * of two for each trial pattern, perhaps, and not recursing at all + * if a literal match of the next 2 chars would fail. + */ +#define TRUE 1 +#define FALSE 0 + + +static int +Star( s, p ) +register char *s; +register char *p; +{ + while ( wildmat( s, p ) == FALSE ) + if ( *++s == '\0' ) + return ( FALSE ); + return ( TRUE ); +} + + +int +wildmat( s, p ) +register char *s; +register char *p; +{ + register int last; + register int matched; + register int reverse; + + for ( ; *p; s++, p++ ) + switch ( *p ) + { + case '\\': + /* Literal match with following character; fall through. */ + p++; + default: + if ( *s != *p ) + return ( FALSE ); + continue; + case '?': + /* Match anything. */ + if ( *s == '\0' ) + return ( FALSE ); + continue; + case '*': + /* Trailing star matches everything. */ + return ( *++p ? Star( s, p ) : TRUE ); + case '[': + /* [^....] means inverse character class. */ + if ( reverse = p[1] == '^' ) + p++; + for ( last = 0400, matched = FALSE; *++p && *p != ']'; last = *p ) + /* This next line requires a good C compiler. */ + if ( *p == '-' ? *s <= *++p && *s >= last : *s == *p ) + matched = TRUE; + if ( matched == reverse ) + return ( FALSE ); + continue; + } + + /* For "tar" use, matches that end at a slash also work. --hoptoad!gnu */ + return ( *s == '\0' || *s == '/' ); +} + + +#ifdef TEST +#include + +extern char *gets( ); + + +main( ) +{ + char pattern[80]; + char text[80]; + + while ( TRUE ) + { + printf( "Enter pattern: " ); + if ( gets( pattern ) == NULL ) + break; + while ( TRUE ) + { + printf( "Enter text: " ); + if ( gets( text ) == NULL ) + exit( 0 ); + if ( text[0] == '\0' ) + /* Blank line; go back and get a new pattern. */ + break; + printf( " %d\r\n", wildmat( text, pattern ) ); + } + } + exit( 0 ); +} + +#endif /* TEST */ diff --git a/src/nos/doc/intronos.zip b/src/nos/doc/intronos.zip new file mode 100644 index 0000000000000000000000000000000000000000..dcbd78b73aba31c6c732b95c4d42231ce4c35a55 GIT binary patch literal 23055 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 K4AcEj?|%RaW!nY- literal 0 HcmV?d00001 diff --git a/src/nos/doc/intronos/INTRONOS.TXT b/src/nos/doc/intronos/INTRONOS.TXT new file mode 100644 index 00000000..840e7485 --- /dev/null +++ b/src/nos/doc/intronos/INTRONOS.TXT @@ -0,0 +1,1308 @@ + + + + + + + + + +Getting Started with TCP/IP on Packet Radio + + +by John Ackermann, AG9V +Miami Valley FM Association +Dayton, Ohio + + + + + +8 April 1992 + + + + + + +Copyright 1992 by John R. Ackermann, Jr. +This document may be freely copied and distributed for non-commercial +use only, provided this copyright notice is included. You may modify +this document but you must retain this copyright notice and include an +additional notice identifying you as the creator of the modifications. +You must also send a copy of the modified version to me at the address +shown below. + +(This is the generic ASCII text version. Any volunteers to help clean +it up and make it pretty?) +  +Introduction + +This document is intended to help hams with some experience in packet +radio get started with the TCP/IP software written by KA9Q and others. +It is not intended to take the place of the software's reference +manual, but rather to provide a quick-and-dirty introduction to the +capabilities of TCP/IP and the mysteries of installing and using the +software. + +There are several different versions of the KA9Q software floating +around. It was originally written for MS-DOS computers, but has been +ported to Macintosh, Amiga, Atari and UNIX systems. The original +program was called NET and its last formal version was issued in +April, 1989. If someone talks about 890421.1 NET, that's what they're +referring to. + +Since 1989, work has concentrated on a rewritten program called NOS +(for Network Operating System). NOS offers many new features that +make using TCP/IP much more effective. However, it is a growing and +changing creature, and keeping up with it is difficult. We recommend +that you use NOS instead of NET, but we can't tell you precisely where +to find the latest version. Your best bet is to check with a local +user. If you can't find a copy locally, there are several telephone +BBS systems that carry the software, but be prepared to find a +bewildering array of versions and flavors: + + N8EMR's Ham BBS (614) 895-2553 + ChowdaNet (401) 331-0334 + WB3FFV (301) 335-0858 + +This document is based on the MS-DOS version of NOS, specifically the +PA0GRI adaptation of the June 18, 1991 version of NOS as modified and +distributed by N1BEE (what a mouthful!) and available as grinos from +the ChowdaNet BBS. The discussion tries to stay away from features +that are specific to that version, but if something we say doesn't +seem to make sense with your version of the software, that's probably +why. + +A last note before we plunge in -- we said it before, and we'll say it +again: this document barely scratches the surface of NOS. Nearly +every command described here has options or parameters that we're +ignoring. Our goal is to give you a feel for what TCP/IP does, and to +get you on the air with NOS; to get beyond the novice stage you need +to look at the reference manual and experiment with the software. +Appendix A includes a list of organizations and individuals that can +provide further information about TCP/IP and amateur radio. + +  +TCP/IP and Ham Radio + +TCP/IP is a set of communication protocols that have become a standard +in the computer networking world. It is designed to link different +kinds of computer systems together over dissimilar networks. TCP/IP +software runs on nearly every kind of computer available, from IBM +mainframes to PCs, Macs, Amigas, and Ataris. The KA9Q software (from +now on, we'll call it NOS) is special because it includes the features +necessary to run TCP/IP over ham packet radio. + +The TCP/IP protocol suite allows different kinds of computers to talk +to one another across networks. The services it provides include +terminal sessions, file transfer, electronic mail, and data routing +services. Computers running TCP/IP (referred to as hosts) can run +some or all of these applications simultaneously; it's entirely +possible to sit at a PC computer running NOS and carry on a keyboard- +to-keyboard chat with one station, while another retrieves a file from +your hard disk and you send electronic mail to a third. + +It's also comforting to know that when you run TCP/IP, you don't give +up the ability to carry on normal packet communications. You can use +NOS just like a terminal program to establish connections with your +local BBS, etc. + +If you've looked at the size of the NOS documentation, you're probably +asking yourself what the benefit is of mastering this fairly complex +stuff. Well, NOS has several features that improve on regular packet +radio. It has much more sophisticated file transfer and electronic +mail capabilities than our present PBBS systems (and it's possible to +feed PBBS messages into NOS in a way that makes it much easier to use +them). It supports multiple simultaneous connections. It has new and +better methods of dealing with slow and congested channels that +improve the reliability and throughput of packet traffic. + +NOS also has the ability to route transmissions to distant stations +without the user needing to know every hop along the way; all you need +to do is get your data to a gateway station that knows how to move it +one hop closer to its destination. New work being done with NOS +promises dynamic routing that automatically adjusts to changes in the +network. + +And, since it is directly adapted from the de facto standard system of +interconnecting computers, it offers the possibility of sophisticated +services far beyond anything available on regular packet radio. For +example, in some areas ham TCP/IP users can log into multi-user Unix +computer systems and run applications as if they were directly +connected to those machines. + +  +What is TCP/IP? + +As mentioned above, TCP/IP is actually a set of protocols for the +transfer of data across networks of computers. Two of these protocols +underlie most of the others, and they give the set its popular name: + +TCP Transport Control Protocol, a "reliable stream service" (which +is a fancy way of saying it makes sure that all the data sent +to a remote host actually gets there). + +IP Internet Protocol, which sets the basic rules for formatting +packets of data to go out over a network. TCP rides on top of +IP. + +Now that you finally know what TCP/IP stands for, there are a few +concepts that are critical because they address the basic problem of +any communications system -- identifying the parties to the +conversation. Simply using our ham callsigns to address TCP/IP +packets doesn't work for two reasons. First, the protocols work +across many different networks, and have to have a consistent address +scheme. Second, and as important, ham callsigns don't contain enough +information to allow TCP/IP's sophisticated routing mechanisms to +work. + + +Names and Addresses + +The first important concept is the IP Address. Since these protocols +are used on lots of different computers, it was necessary to come up +with an addressing system that works with all of them, that provides +enough routing information, and that doesn't take up a lot of space. +The answer is to build TCP/IP addresses out of a four byte sequence, +with each byte providing information about the network an +subnetwork(s) to which a host belongs. + +TCP/IP addresses are called hierarchical because the four bytes have +decreasing significance from left to right. By looking at the +leftmost byte(s) we can learn how to route a transmission to the host +represented by the rightmost byte(s). We usually print these +addresses using the numeric value of each byte, separated by a period, +such as [44.70.12.34]. This is known as "dotted notation." The +square brackets aren't strictly necessary, but they are convenient to +set off ip addresses; we'll use them in all our references. + +We won't go into all the semantics of hierarchical addressing here, +but as an example the address [44.70.12.34] breaks down as: + + 44. The network assigned to amateur radio TCP/IP. + 70. The subnetwork for Ohio. + 12. The Dayton/Cincinnati area. + 34 A specific system address within that area. + +IP addresses are assigned by coordinators who derive their authority +from a central registry. The central coordinator for the ham radio net +(44.xx.xx.xx) is Brian Kantor, WB6CYT. He has delegated authority to +assign addresses to various state and national coordinators. The +folks in Appendix A can help you find your local coordinator. +  +The second important concept is the hostname. Obviously, ip addresses +aren't very intuitive. English-like hostnames make remembering +addresses much easier, and TCP/IP programs, including NOS, have means +(discussed below) to map between ip addresses and hostnames. A host +is any computer running TCP/IP; even when you're using services from +another computer, your system is still a host. When we talk about a +remote host, we're talking about a machine that you're communicating +with via TCP/IP. + +The convention in ham radio TCP/IP is to use your callsign as your +hostname. To help reduce confusion, we usually print hostnames in +lower case, and callsigns in capital letters -- my hostname is ag9v, +and my call is AG9V (though NOS isn't case sensitive and won't care if +you don't do it this way). + +Closely related to the hostname is the domain name. A domain is a +group of machines that are logically (though not necessarily +physically) connected together. Domain names are like ip addresses; +periods separate parts of the name, with each part representing a +different level in the domain hierarchy. But the domain name is +ordered in reverse -- its highest-level portion is at the right, the +opposite of ip addresses. + +The ham network's domain is ampr.org; org (short for "organizations") +is the top level domain, and ampr is the second level domain, +containing all ham TCP/IP hosts. + +When you combine a hostname with a domain name, you get something like +ag9v.ampr.org. This is called a Fully Qualified Domain Name (FQDN -- +knowing this acronym allows you to sound like a real expert). If a +host has multiple users, we can add the user's login name at the +beginning of the address, separated from the FQDN by a "@" character. +This combination is commonly known as an Internet address (the +"Internet" is the general term for all the TCP/IP hosts that are +interconnected in the commercial, educational, and military domains) +and is the address form used for most electronic mail in the real +world. For example, if there is a user "jra" at ag9v, +jra@ag9v.ampr.org would be that user's full Internet address. + +There's one last twist. Some services (such as Domain Name Service, +discussed below) need to know whether an address they are processing +is in fact an FQDN. To do so, they look for a trailing period at the +end of the domain name. Some versions of NOS ignore this issue, but +the PA0GRI versions (such as grinos) insist that you "anchor" all +domain names with a period at the end of the name. In other words, +grinos will barf if you issue the command "hostname ag9v.ampr.org" but +"hostname ag9v.ampr.org." will make it happy. + +This may seem like an overly complicated scheme to simply allow two +hams to talk to each other, but we use it because the ham radio TCP/IP +network can be tied to the worldwide TCP/IP network in a number of +different ways, and using the full set of TCP/IP address conventions +makes it possible for traffic to flow between the ham network and the +real world. + +Leaving aside legal issues about third-party traffic, there's no +reason, for example, why electronic mail can't be automatically routed +through a gateway (a computer that interconnects two or more networks) +  +between a ham TCP/IP user and a non-ham who has access to the +Internet. In fact, this service already exists in some areas. + +The good news is that for traffic within the ham network, we only need +to worry about hostnames, and NOS's domain suffix command will take +care of adding the "ampr.org" extension for us; only if we want to go +across networks do we need to worry about the full details of +addressing. + + +TCP/IP Services + +Now that we have those boring basics out of the way, the protocols +that use TCP/IP to provide real, useful services include: + +TELNET The terminal emulation program. In "real" networks, telnet +lets a user at one host remotely access a remote host, just as +if he was on a terminal directly connected to that computer. +In NOS, the telnet function usually connects you to a remote +host's mailbox, which acts very much like a personal PBBS. +The NOS telnet command does allow you to remotely login to a +host that supports that function; in some areas Unix computers +connected to the ham TCP/IP network provide that service. + +FTP File Transfer Protocol. A means of transferring both ASCII +(text) and binary (program, data, or compressed) files between +hosts. + +SMTP Simple Mail Transfer Protocol. A (mostly) invisible way of +moving electronic mail from one host to another. If you +create a message on your computer (using the BM program, +discussed below), SMTP will automatically attempt to transfer +it to the destination computer. + +POP Post Office Protocol. SMTP is neat, but it's really designed +to work with hosts that are available full time. Most ham +TCP/IP stations aren't. POP is designed for them; it allows +incoming mail to be stored at a host that acts as a mail +server; when you come on the air, your system automatically +asks the server to send you your mail. + +PING Packet InterNet Groper. A diagnostic that sends a packet to a +specified host; if the host is accessible to you and on the +air, it responds with another packet. PING tells you how long +the round trip took. + +FINGER A way of finding out information about the users at a host. +The finger command can simply list all the users at a host, or +spit out information (like the "brag tape" of RTTY days) about +a specific user. + +ARP Address Resolution Protocol. IP addresses need to be matched +with the correct hardware address (in our case, ham callsign) +to allow packets to be sent to their destination -- NOS +doesn't know what callsign goes with a given ip address. ARP +does this by sending out a broadcast message when it needs to +know the callsign that matches an address. The remote host +(if it's on the air) will answer and provide its hardware +address. +  +DNS Domain Name Service. Remembering IP addresses isn't easy. +NOS can use a file called domain.txt to contain mappings +between hostnames and IP addresses, but that means you need to +know the hostname and address of any station you want to +contact. Alternatively, a remote host may agree to serve as a +domain name server that NOS can query when it needs to know +the address of a host. Not all areas have a name server +available to the ham community, but in those that do, life is +a lot easier. + + +Installing NOS + +Frankly, there's no completely painless way to get NOS running on your +computer. NOS is somewhat picky about the directories used for its +files, and there are a number of custom parameters that you must set +to teach the program about your environment and your network. Those +parameters are contained in a configuration file that most versions of +NOS call autoexec.net (PA0GRI versions call it autoexec.nos; our +references to "autoexec.net" mean either variety). + + +Files and Directories + +You should create the following directories on your disk (NOS can work +from either a hard disk or a floppy; it's getting big enough, though, +that working from a 360K floppy can be tough): + +/spool (holds NOS' working files) + /spool/help (help files for the mbox) + /spool/mail (mail messages go here) + /spool/mqueue (mail workfiles) + /spool/rqueue (incoming mail workfiles) +/finger (home for finger info files) +/public (file uploads/downloads) + +Three files need to go in the root directory of your default disk: + +autoexec.net (the NOS configuration file)) +ftpusers (user ftp/mbox access) +domain.txt (hostnames if not using DNS) +bm.rc (mail program configuration) +alias (used by smtp and bm) + +NOS uses two executable files. These can be installed anywhere on +your file path: + +nos.exe (grinos.exe) (main executable file) +bm.exe (mailer program) + + +Setting up AUTOEXEC.NET + +Once the directories are created and the files copied, you need to +edit the autoexec.net file with a text editor to customize it. A +sample file is included as Appendix B. Some of the things you'll have +to put in the file are: +  +* Your hostname (usually your callsign in lower case): + hostname ag9v.ampr.org. + +* Your IP address: ip address [44.70.12.34] + +* Your callsign (optionally including an SSID; local customs +vary on this): ax25 mycall AG9V + +* "attach" commands to tell NOS how to talk to your hardware. +These can get quite hairy; Appendix C has the details. For a +TNC on COM 1 at 4800 baud, use: attach asy 0x3f8 4 ax25 ax0 +1024 256 4800 + +The "ax0" in the middle of the command is the interface name - +- you use it to identify this port to NOS when you set up +routing commands and the like. You can use any (short) name +you'd like, but the convention for COM ports is to use ax0, +ax1, etc. + +* At least one routing command. NOS needs to know where to send +packets. A default route that sends all packets out the ax0 +interface is: route add default ax0 + +* If you have a gateway for packets going outside the local +area, include a route like: route add [44.70.13.0]/24 ax0 +ag9v + +This command would route packets addressed to any host with +"44.70.13" as the first three bytes of its address out the ax0 +interface to ag9v, which presumably knows how to get these +packets to their destination. The "/24" means that the first +24 bits (three bytes) of the address are significant; NOS will +ignore the last byte when making routing decisions. + +* If you have a domain name server, add a command near the +beginning of your configuration file identifying its IP +address: domain addserver [44.70.12.34] + +* If you have a local mail server that knows how to route +messages outside the area (see the discussion of electronic +mail, below), add a command identifying it: smtp gateway +[44.70.12.34] + + +Storing Name/Address Matches in DOMAIN.TXT + +If you don't have a local domain name server (DNS), you'll need to +create domain.txt in the root directory, with one entry for every +hostname you want to communicate with. Appendix D shows how to set up +this file. If you don't have an entry for a host in the file (or the +name server doesn't know about it), you can use the ip address instead +of the hostname in NOS commands. + +If you're using DNS, NOS will save the hostname/address matches it +gets from the server in domain.txt, so you'll find that file existing +(and growing) even if you didn't create it. +  +Giving the Finger + +If you want users to be able to learn about your station with the +finger command, you need to create a text file in the /finger +directory called .txt (by the way, when we use angle +brackets, it means this is a value you'll need to insert yourself +-- minus the angles -- based on your own configuration). You can +use any text editor to create the file; it should contain basic info +about your system. Don't go overboard... one screen of text is plenty. + +You can also create additional files with information about specific +aspects of your system. For example, you might have a list of the +files available for downloading on your system in a finger file called +"filelist.txt." A remote host who issues the command finger +filelist@ will get that list. + + +Some Boring but Necessary Technical Stuff + +Before we move on to the good stuff about how to make NOS do magic, we +need to talk about three related commands that you may need to tweak +depending on local custom and the quality of the rf paths you're +using. Just as regular AX.25 uses the paclen command to limit the +size of packets, TCP/IP has parameters defining how much data is moved +in one chunk. In theory, the larger the datagram (TCP/IP's term for a +single block of data), the higher the efficiency, because the protocol +headers add a fixed amount of overhead; in larger datagrams the +overhead is a smaller percentage of the total data sent. + +However, some networks (such as NetRom) can't handle large datagrams +in one piece. More importantly, the larger the datagram, the longer +it takes to transmit, and on a busy or flaky path, the greater the +likelihood that something will corrupt it along the way. And, it +takes longer to resend a large packet than a small one. Because of +these factors, a fast network with clear channels and solid paths can +get away with sending much larger datagrams than a slow, unreliable one. + +NOS provides three parameters that deal with datagram sizes. The most +important one is the mtu (the sixth value in the attach asy command +described above). It is similar to paclen; it sets the largest +packet, including any headers, that can be sent on an interface. +Datagrams larger than the mtu are fragmented into multiple pieces, +which seriously reduces efficiency. Each interface has its own mtu, +set as part of its attach command. + +For 1200 baud channels that are shared with other packet users, an mtu +value of 256 is reasonable; in fact, since that is the largest packet +size most non-TCP/IP ham networks (like digipeaters and NetRom) are +designed to handle, 256 is the largest mtu you should specify if any +of your packets are going to move over such a node. + +Faster networks may use higher values. For good-quality channels with +fast data rates (9600 baud or above), it may be reasonable to use an +mtu ranging from 512 to 1500 (which matches the standard mtu used by +ethernet systems). +  +The other two parameters that set datagram size are part of the TCP +protocol. tcp mss is the largest segment (yet another term that means +almost, but not quite, the same thing as "packet") that TCP will +assemble for transmission. Because the TCP and IP headers attached to +each datagram total 40 bytes, mss should be 40 bytes smaller than mtu; +216 is the correct value for an mtu of 256. + +The tcp window parameter tells NOS how many datagrams it can have +outstanding at once -- if it is twice the value of mss, NOS can +receive two datagrams before sending an acknowledgement. This +parameter is analogous to the maxframe parameter in AX.25. + +Although using a large window has major benefits on full duplex +networks, on typical ham networks best performance comes from smaller +windows ranging from one to three times the mss. A good starting +point is to set the window equal to twice the value of mss (432 for +an mss of 216). + +In summary, good starting points for these values are: + +1200 baud, shared channel -- mtu 256, tcp mss 216, tcp window 432 +High speed, clear channel -- mtu 1500, tcp mss 1460, tcp window 2920 + +It's very important that local users all agree on these values -- +particularly the mtu and mss. Mismatched sizes will result in +fragmented packets and a decrease in throughput. + +Even more than in other parts of this manual, this discussion glosses +over lots of subtleties. Throughput can be drastically affected by +tuning these values, and both experimentation and local consensus are +necessary to come up with settings that both work and don't stomp on +other users of the channel. +  +Using NOS + +To run NOS, first make sure you have your TNC configured for KISS mode +(see Appendix F for details) and turned on. Then, type nos (or grinos +for the PA0GRI version). In a few seconds, you should see a net> +prompt. Any error messages that appear first probably indicate a +problem with your autoexec.net file. + +When you see the prompt, NOS is in command mode. When you are +communicating with another host, NOS is in converse mode. To return +to command mode from converse mode, press the F10 function key +(sometimes called the escape key). All commands typed at the NOS +prompt need to be followed by the return key. + +Typing ? in command mode will display a list of commands. Typing a +command name followed by ? will display the valid subcommands. You +can't really call it a help system, but it's better than nothing. + +Some commands can be abbreviated to save typing; the degree of +abbreviation allowed depends on the command set of the NOS version +you're using. Experimentation is the best way to see what works and +what doesn't. One minor annoyance in grinos is that commands are case +sensitive -- "c ax0 n8acv" is fine, but "C ax0 n8acv" isn't. It's +safest to do all your NOS keyboarding in lower case -- apart from case +sensitive commands, in the email world, typing in capital letters is +considered shouting! + +You can issue several commands from within NOS to deal with files and +directories. pwd displays your current working directory, and cd +allows you to change directories. dir displays files in the current +directory. mkdir creates a new directory, and rmdir + removes one. delete erases a file. + +You can also "shell out" to DOS from within NOS by entering either an +exclamation mark (!) or the command shell. To return to NOS, type +exit at the DOS prompt. + +From command mode, you can start a number of different types of +sessions to communicate with remote hosts. Each session has its own +display screen and you can switch between a session and command mode, +or between sessions. The se command displays the active sessions with +identifying numbers. To switch to a session, you can type se . From command mode, you can return to the current (most +recently displayed) session by entering a carriage return. + +You can capture incoming data from the current session to a disk file +by using the record command, and you can read in a data +file from disk with the upload command. + +The most common NOS session types are probably telnet, its cousin +ttylink, ftp, and a regular packet connect (technically called an ax25 +session). Telnet is used to "login" to a remote host, ttylink is a +kind of telnet specially designed for keyboard-to-keyboard +communications, ftp handles file transfers, and ax25 sessions allow +you to carry on normal packet activity. We'll talk about ax25 +sessions first, since they give you a chance to test your setup +without having another TCP/IP station on the air. +  +AX.25 Mode + +The connect command simply lets you do normal packet radio stuff. +Establishing an ax25 connect through NOS is just like using the +standard TNC commands with a few small differences. First, since NOS +can support several interfaces, each with its own hardware, you need +to tell NOS which one to use. + +So, to connect to N8ACV on interface ax0, enter connect ax0 N8ACV. +Once you get a Connected message, you'll be able to type to the +station at the other end just as you would with normal packet. To +disconnect, press F10 to go back to command mode and type disconnect +at the prompt. (Just as with a TNC, these commands can be +abbreviated; just how few of the letters are necessary will depend on +each implementation of NOS and the commands it supports). + +The other minor difference between the NOS connect command and a +regular TNC is that the word via is not used when specifying +digipeaters. To connect to N8ACV through N8KZA on interface ax0, you +would enter connect ax0 N8ACV N8KZA. + + +Telnet + +The telnet command logs you in to a remote TCP/IP host; depending on +the capabilities of that host, you might find yourself chatting +directly with the user at the other end, connecting to the NOS +mailbox, mbox (which acts very much like a sophisticated personal +PBBS), or getting a Unix "login:" prompt. To establish a telnet +session, enter telnet at the command prompt. To close a +session, press F10 to return to command and enter close . If there's only one session open, you can just enter close. +You can also end the session by issuing the appropriate exit or quit +command at the remote host's prompt. + +Some versions of NOS offer a new type of session that improves on +telnet for real-time keyboard-to-keyboard chats. It's called ttylink, +and works just like telnet (for example, start a session with ttylink +) except that it connects you directly to the remote host's +chat mode, and uses a split-screen format to make things less +confusing as you type to each other. + +You'll get a message like "Telnet session 1 failed: Reset/Refused +errno 9" if the remote host doesn't support ttylink. If the operator +at the other end isn't available to chat, you'll get a message like +"The system is unattended." You'll still be able to type, but there +won't be anyone there to reply. You can change the status on your +machine by setting the attended command either on or off. You might +want to put this command in your autoexec.net file to set your default +status. You exit from ttylink just as you would from telnet. + +And now a note from Miss Manners: you should never simply exit from +NOS when you have an open session. Doing so can cause great +unpleasantness at the remote host. Unless you're in some sort of +software or hardware lockup, or you know that the station on the other +end has gone away, always close sessions and wait for confirmation +before exiting the program. +  +You should also be aware that your system may have started sessions in +the background, for example to transfer electronic mail, or someone +else may have started a session with your system. You may not even +know these sessions are running. Pulling the plug on them would be +very impolite. Before exiting NOS, you should first use the se +command to make sure there are no current sessions running, and then +the tcp status command to see if there are any background connections +established. tcp status will show you a long and confusing list of +information; the important stuff at the end is the list of sockets +(which are services your system can either offer or request on the +network). If anything other than Listening appears in the Status +column, that means there's at least one remote host communicating with +you. + + +File Transfers + +You initiate a file transfer (ftp) session by entering ftp +at the command prompt. Once the session is established, the remote +host will prompt you for a user name and a password. If your hostname +and password have been added to the remote host's ftpusers file, +you'll have the ability to download and perhaps upload files in the +directories permitted you. + +If you haven't arranged with the remote host for your own account, you +can try to login as anonymous or guest; many systems support these +user names and grant limited (usually download-only) privileges to +them. If you login under one of these accounts, you should enter your +hostname as the password; that allows the remote host to keep track of +who's been using the system. + +Once you've logged in, you'll see a new prompt: ftp>. This will +remind you that you're actually issuing commands to the remote +computer. From the ftp> prompt, you can list the files in a +directory, change directories, upload files, or download files. + +To list files, enter dir at the ftp> prompt. You will get a listing +that shows subdirectories (if any) and files together with their dates +and sizes. To show the current directory name, type pwd. To change +directories, issue the cd command. Note that directories +are displayed with a forward slash (/) instead of the usual MS-DOS +backslash (\). That's because the Unix operating system, which is +TCP/IP's natural home, uses forward slashes. If the remote host is +running NOS, you can use either character, but some other systems +(particularly those running Unix) will recognize only the forward +slash. + +Once you've found a file you want to upload or download, you need to +make a decision. ftp can transfer the file either as an image file, +byte for byte, or as an ASCII file, converting the line-end character +as necessary to compensate for different operating systems (Unix uses +only a linefeed character at the end of lines; MS-DOS uses carriage +return/linefeed). Before beginning a file transfer, enter either type +i for an image file, or type a for an ASCII file, at the ftp> prompt. + +What are the consequences choosing the wrong type? Well, transferring +a binary file as type a will almost certainly fail. Transferring an +ASCII file as type i will work, but you may find that the line-ends +  +are screwed up. ASCII transfers are also quite a bit slower than +image, because each line needs to be processed separately. + +To actually start a file transfer, use the command put to send a file, or get + to receive one. The file name can include a full +path if you desire; remember to use the proper path separator +character for the remote host. If you only specify one filename, ftp +will assume that both the local and remote hosts will use the same +name. This can be dangerous if the remote host uses a different +operating system than you do, as it may have filenames that are +illegal on your system. + +If a file transfer goes awry, you can terminate it by going to command +mode via F10 and issuing the abort command. To end an ftp session, +you can either type quit at the ftp> prompt (the preferred way), or +you can close the session from the net> prompt. + +If you want others to be able to access files on your system, you'll +need to set up an ftpusers file in your root directory. Appendix E +describes the contents of that file. + +Another message from Miss Manners: transferring files via ftp is +reliable, but can be slooooow, particularly at 1200 baud. Before you +start downloading a 250 kilobyte file, consider how busy the channel +is, and whether you want to tie things up for (perhaps) several hours +by your download. NOS is polite and won't hog the channel, but don't +doubt that a large file transfer will slow things down for everyone +else. + + +Other Protocols + +The ping protocol mentioned above is very useful to see if a remote +host is on the air. Just enter the command ping at the NOS +prompt. If the host is available, you will see a response indicating +what the round-trip time was to that host. The time may be many +seconds if you're going through gateways, so be patient. + +The finger protocol lets you see information about a remote host's +users and services. Entering finger @ (note the slightly +different syntax -- the "@" symbol must immediately precede the remote +hostname) will display a list of the users (actually, finger files as +described above) at that host. Entering finger will +display the text file for that user. +  +Electronic Mail + +We've saved NOS's electronic mail capabilities for last because they +are a bit more involved than some other parts of the program. You use +two programs to handle mail: bm (a mail agent, in Unix terms) to +write and read messages, and NOS to send and receive them. First +we'll talk about reading and writing messages, and then about using +NOS to transport them. + + +Using BM.EXE to Read and Write Messages + +bm.exe is a program that reads and writes mail message in the format +TCP/IP systems recognize. Contrary to popular belief, "bm" stands for +"Bdale's Mailer" in honor of its creator, Bdale Garbee. You can run +bm from the DOS prompt just like any other program, from within NOS by +shelling to DOS with ! or shell, or (in grinos) by typing the mail +command from the net> prompt. + +Before using bm, you need to create its configuration file, bm.rc, +which must live in the root directory of your disk. An annotated +bm.rc file is included as Appendix G. Only the first three commands +in the sample file are absolutely necessary to make bm work. + +There's a bit of controversy in some areas over the proper name to +enter for user. Some folks recommend using either your first name, or +your initials (for example, my address would be "john@ag9v.ampr.org") +while other suggest using the callsign instead ("ag9v@ag9v.ampr.org"). + +While using the callsign may seem more impersonal, it has major +advantages when mail is moving between TCP/IP and the packet BBS +system, or when using the pop server; we strongly recommend that you +use the callsign@hostname format unless local objection is even +stronger. It's important to be consistent within the area, so that +everyone knows how to address mail to everyone else. + +When you start bm, you'll see a prompt such as ag9v> showing the +default mailbox (based on the user entry in bm.rc). As in NOS, you +enter commands at the prompt, following them with a carriage return. +Most bm commands are single letters, optionally followed by a mail +addressee, or a message number (or numbers). + +To send mail, use the command m . The addressee will +normally be a user at a remote host; for example, ag9v might send mail +to k8gkh@k8gkh. The single biggest problem with bm is forgetting to +include the hostname -- in other words, sending mail to rather +than @. Without the hostname, bm will think the user +is on your local system, and the mail will end up being stored in a +mailbox under that user's name on your own system. That doesn't work +too well. + +One way to solve that problem, and do some other interesting things, +is to create an alias file in your root directory. When you send a +message, bm will compare the addressee with the alias file, and if it +finds a match will replace the alias with a full address from the +file. An alias can point to a list of addresses, so it's possible to +define an alias that will send a copy of the message to everyone in +your local group. A sample alias file might look like: +  +greg k8gkh@k8gkh.ampr.org +bill n8kza@n8kza.ampr.org +club k8gkh@k8gkh.ampr.org n8kza@n8kza.ampr.org + n8acv@n8acv.ampr.org wb8gxb@wb8gxb.ampr.org + +The last alias demonstrates two things: a single alias can expand to +several addresses, and you can continue a long address list on +subsequent lines by indenting them with spaces or a tab character. + +Now, if you send mail to "greg" it will automatically be expanded to +the full address, and by sending a message to "club" all four users +will get a copy. + +By the way, you do not use a trailing dot after an FQDN (as discussed +above) in email addressing; things won't work right if you do. + +If you use bm's built-in editor to compose messages, remember that it +doesn't wrap lines; you have to hit the carriage return at the end of +each line. You can list outbound mail with the l command; you can +kill an outbound message with the k command (the message number +is obtained from the output of the l command). + +Several commands are used to deal with incoming mail. h displays the +headers (summary info) about messages in your mailbox. It is the +basic command you should use to check your incoming mail. Each +message header displayed will have a number to use with the other +message manipulation commands. Commands given without a message +number act on the current message (the one displayed with a > by it in +the display from the h command; if there's only one message, it is +always the current one). + +bm can support multiple users at a single host; a separate mailbox is +created for each user. Unfortunately, bm has no way of knowing if +incoming mail addressed to @ is valid, so it will +happily accept such mail and create a new mailbox for . You +may never know it's there, unless you use the n command to display the +list of mailboxes. You can also use n to change to a different +mailbox: n . + +The commonly used commands (which may be followed by one or more +message numbers if appropriate) are: + +msg# message number by itself will display that message and set it + as the current message. +r reply to a message. +d delete a message. +s save a message; if a file name follows the message number(s), + the message(s) will be saved in that file. Otherwise, they'll + be saved in the default mbox file. +u undelete a message previously marked for deletion. +p print a message on the local printer. +w save a message to a file without including headers. +f forward a message to another recipient. +b bounce a message. Like forward, but keeps the original sender + information intact (i.e., the message will not appear to have + been sent by you). +$ update the mailbox. This deletes messages marked for deletion + and reads in any new mail that may have arrived since you started bm. +  +There are two commands that exit from bm. x will exit without +updating the mailbox. In other words, the same messages will be there +the next time you run the program. q updates the mailbox (like $) and +then exits. + + +Moving Mail With NOS + +Now, to the mechanics of getting mail into and out of your system. +All mail that you create is sent to its destination (or at least to +the next stop on the way) by the smtp server in NOS. The smtp timer +command (set in autoexec.net) tells smtp how often to scan the +/spool/mqueue directory for outgoing mail. When it finds some, it +attempts to open an smtp session to the remote host in the address and +send the mail there. There's no default for the smtp timer value, so +your autoexec.net file should include something like smtp timer 600 +(which scans for mail every ten minutes). You can manually force smtp +to scan the queue by issuing the smtp kick command from the net> +prompt. If you have a local mail server with connections to the +outside world, you can use it to route mail for hosts that aren't in +your domain file with the smtp gateway command. + +Incoming mail can arrive at your station when a remote host does this +and starts an smtp session with you. But if you don't keep your +station up 24 hours a day, the remote host will be trying, and trying, +and trying, to connect with you until you finally show up. A far +better approach is to use pop -- the Post Office Protocol. If your +system runs pop, and someone in the area has agreed to be a pop +server, NOS will automatically contact that server when you come on +the air; the server will respond by sending the mail waiting in your +mailbox. You can then read it with bm just as if it had arrived via +smtp. + +To use pop, the server must establish a mailbox and password for you, +and you need to add the appropriate commands to your autoexec.net file +(see the annotated autoexec.net file in Appendix B). + +Remember that smtp or pop sessions may be running in the background +without your knowing about it. Always check for activity with the tcp +status command before pulling the plug! + +Additionally, smtp creates lock files in \spool\mqueue when it tries +to send outgoing mail. If NOS is killed before the mail transfer has +succeeded, these files (with the extension ".LCK") will be left behind +and if they are not manually removed, they will prevent smtp from +trying again to send those messages. To prevent this, you should +always issue the command "erase \spool\mqueue\*.LCK" before starting +NOS. It's a good idea to launch NOS using a batch file that removes +the locks before executing the program. +  +Conclusion + +This has been a whirlwind tour of TCP/IP. Once you have the software +installed, using it is really quite simple, and NOS truly opens the +door to using packet radio in a whole new way. + +To learn the subtleties of NOS, you should do two things: read the +reference manual for the version you're using, and experiment with the +program. Once you know the ins and outs, please share your knowledge +with others. The ham radio TCP/IP community is still small, and we +need all the Elmers we can get! + + +John Ackermann AG9V +2371 Stewart Road +Xenia, OH 45385 + +TCP/IP: ag9v.ampr.org. [44.70.12.34] +PBBS: AG9V@N8ACV.OH.US.NA +Internet: jra@lawday.daytonOH.ncr.com +CompuServe: 72300,1160 + +  +APPENDIX A +Resources for NOS and TCP/IP + +(Note: This is a very incomplete list; please feel free to provide +additional resources to add for the next edition!) + +TAPR +P.O. Box 22888 +Tucson, AZ 85734 + +The New England TCP Association +3628 Acushnet Ave. +New Bedford, MA 02745 +  +APPENDIX B +Sample AUTOEXEC.NOS File for GRINOS + +# A U T O E X E C . N E T +# This is a sample autoexec file for GRINOS version N1BEE 0.72. +# It doesn't have all the fancy features one might hope for, but +# the basics are there, with some hopefully useful comments. +# Any line beginning with a "#" character is treated as a comment. To +# uncomment a line, delete the # character + +# These are a couple of things for NOS to use internally. +mem eff on +watchdog on +nibufs 10 + +# NOS needs to know three things about you: your hostname, your +# ham callsign, and your ip address. By convention, the hostname +# is your callsign in lower case, followed by ".ampr.org". The +# callsign is generally used in upper case to distinguish it. The +# ip address comes from a local area coordinator. Note that there are +# a minimum of three places in this file where you need to insert your IP +# address -- here, in the ifconfig command, and at the end of each attach +# command. +hostname nocall.ampr.org +ax25 mycall NOCALL +ip address [44.xx.xx.xx] + +# This should match your ip address +ifconfig loopback ipaddress [44.xx.xx.xx] + +# This makes short forms of the hostname work. +domain suffix ampr.org. + +# NOS needs to know how to convert hostnames to ip addresses. +# You can do this manually via the "DOMAIN.TXT" file, or you can +# use a nameserver if one is available. To enable the +# nameserver, uncomment this line and plug in its correct +# address. +#domain addserver [44.xx.xx.xx] + +# Some additional commands for the domain service. Don't turn translate +# on unless you have a small domain file and/or a fast machine. +domain verbose off +domain cache size 40 +domain translate off + +# To use POP, uncomment these lines. Fill in "pop mailhost" with the +# ip address of the station serving as your pop server. Fill in the +# "pop mailbox" name with your hostname, i.e., your call. The "pop +# userdata" line needs to have your hostname, followed by a password +# (as negotiated with your mail server). "pop timer" sets +# how often, in seconds, to query for mail. +#pop mailhost [44.xx.xx.xx] +#pop mailbox hostname +#pop userdata hostname password +#pop timer 1800 +  +# Attach commands are complex; these are samples for COM 1 +# and 2. See Appendix C for details. Uncomment the +# appropriate line(s) for your hardware. +# COM1 -- 256 byte MTU, 4800 baud serial link as ax0 +attach asy 0x3f8 4 ax25 ax0 2048 256 4800 +# COM2 -- 256 byte MTU, 4800 baud serial link as ax1 +#attach asy 0x2f8 3 ax25 ax1 2048 256 4800 + +# This is the basic route, sending everything out ax0 +route add default ax0 + +# These are tcp parameters you shouldn't need to mess with. +ip ttl 16 +ip rtimer 240 +tcp irtt 3000 + +# On a shared channel, you may want to change timertype to +# exponential; that's more courteous, but will slow your +# retries down significantly. mss and window should ordinarily be the +# same value, equal to the largest mtu set in the attach command(s) above +# minus 40. With the common mtu for 1200 baud channels of 256, that means +# both mss and window should be 216. +tcp timertype linear +tcp bblimit 16 +tcp mss 216 +tcp window 216 + +# These set up AX.25 parameters +ax25 digipeat off +ax25 maxframe 1 +ax25 paclen 256 +ax25 retry 20 +ax25 window 4096 +ax25 blimit 15 +ax25 version 2 + +# as with tcp timertype, you may want to set this to +# exponential on a shared channel. +ax25 timertype linear + +# These are netrom setup commands. Don't turn them on +# unless you need them, and you know what you're doing. You +# can really screw up the network by putting out netrom +# broadcasts that don't fit with the configuration of the +# "real" netrom nodes that can hear you. +#attach netrom +#netrom interface ax0 MYALIAS 192 +#netrom obsotimer 1800 +#netrom nodetimer 10800 +#netrom verbose yes +#netrom bcnodes ax0 +#netrom ttl 8 +  +# These start the servers. +start smtp +start ftp +start echo +start discard +start telnet +start finger + +# Uncomment this line to enable logging. +#log \spool\net.log + +# Default file type for ftp transfers. Type image is for binary +# files; type ascii is for text; it's safest to set the default to image. +ftype image + +# This makes telnet sessions to Unix systems work +# line-by-line, rather than character-by-character. +echo refuse + +# Tell smtp how often to scan for outgoing mail +smtp timer 600 +smtp batch on + +# grinos can send a string of commands to the TNC on startup. You +# could use this to force the TNC into KISS mode. Note that you need to +# specify which interface to use. This must be done defining the +# interface and any data is sent to the TNC (for example, by the +# smtp and pop kick commands below) These commands will do that for a TNC2: +#comm ax0 "kiss on" +#comm ax0 "reset" + +# kick the smtp and pop servers at startup. Only uncomment the "pop +# kick" line if you've defined a pop server above. +smtp kick +#pop kick + +# GRINOS (but not other versions) can define the function +# keys with macros to make things a bit easier. Here are a +# couple of examples. Note that each command must end with +# a "\n" to signify a carriage return. The numbers +# represent the keys; 59 - 68 for F1- F10 (though F10 can't +# be redefined; it's always the escape key), 84 - 93 for +# shiftF1 - shift F10, 94 - 103 for ctrlF1 - ctrlF10, 104 - +# 113 for altF1 - altF10. +fkey 59 "tcp status\n" +fkey 60 "mem status\n" +fkey 61 "status\n" + +# THE END +  +APPENDIX C +Designing ATTACH Commands + +NOS supports a number of versions of the attach command to deal with +different hardware. We'll discuss three of them here: asy, used for +serial port connections; pi, used to connect to the Ottawa PI card; +and packet, used to interface to hardware supporting the FTP, Inc., +packet driver protocol. As usual, this discussion covers the basics; +see the NOS reference manual for details on all the many options. + +Hosts normally have a separate ip address for each interface. If you +are running more than one interface, you can include that interface's +ip address (in [xx.xx.xx.xx] form) at the end of the attach command. + +The asy version provides an interface to a standard PC serial port. +The syntax is: + +attach asy + +In English, these parameters are: + +ioaddr -- the address of the COM port being used. COM1 is +usually 0x3f8 and COM2 is usually 0x2f8. COM3 and COM4 aren't +standardized; using them will require looking at the documentation +for your serial card, and probably some experimentation. + +vector -- the IRQ used by the hardware. COM1 is usually 4, +and COM2 is usually 3. Again, COM3 and COM4 vary. + +mode -- this specifies the nature of the interface. ax25 is +for a connection to a KISS TNC, slip for a hardwired +connection to another host, ppp for a dial-up connection, and +nrs is for attaching a NOS station to a NetRom node. + +if -- the interface name. The convention is to use ax0, ax1, +etc., for KISS interfaces. + +bufsize -- the buffer for incoming data, in bytes. Usually a +value of 1024 is more than sufficient for a 1200 baud channel. + +mtu -- the maximum transmission unit size, in bytes. See the +discussion in the main text on this subject. + +speed -- the speed of the serial (not radio) link, in baud. +The best setting for this will depend on the speed of your +computer, but generally two to four times the radio speed is +adequate. + +Some sample attach asy commands are: + + # COM1, KISS TNC as ax0, MTU 256, 4800 BAUD + attach asy 0x3f8 4 ax25 ax0 1024 256 4800 + + # COM2, KISS TNC as ax1, MTU 256, 2400 BAUD + attach asy 0x2f8 3 ax25 ax1 1024 256 2400 + + # SLIP link, COM1 as sl0, MTU 256, 9600 BAUD + attach asy 0x3f8 4 slip sl0 1024 256 9600 +  +The Ottawa PI card is a plug-in board for PCs designed for high-speed +performance. It has two ports, one DMA driven for high speed and the +other interrupt driven. The attach syntax is: + +attach pi + + +A sample attach command (using the PI's default jumper settings) is: + +attach pi 380 7 1 ax25 pi0 1750 1024 0 1200 + +In this example, the interface name for the DMA port is "pi0a" and the +second port is "pi0b". Because the port a speed is 0, the PI card +expects the modem to provide its own clocking. The PI attach syntax +is explained in the manual provided with the card. + +Finally, the packet interface is used to connect to ethernet cards and +other hardware that supports the FTP, Inc. "packet driver" standard. +There's a packet driver for the PI card. The syntax is: + +attach packet + +In this case, ioaddr and vector need to match those used for the +packet TSR that supports the hardware. bufsize is the number of +packets (not bytes) that may be outstanding. For ethernet, the +standard mtu is 1500. + +Although most of the attach commands support the inclusion of an ip address +unique to that interface, we've noticed that some (particularly the packet +driver) don't work. If you need to assign an address to an interface, you can +use the following command the attach statement: + +ifconfig ipaddr [xx.xx.xx.xx] +  +APPENDIX D +The DOMAIN.TXT File + + +# The domain.txt file contains mappings between hostnames +# and ip addresses. The file can be quite complex, but +# basic entries usually resemble this. + +# Fields are separated by tabs or spaces. + +# These are normal address records. The first field is the +# hostname. The second field is a "time to live" value +# returned by the name server. If you manually create an +# entry, you can leave this field blank. The third field +# is always "IN" to signify these are internet addresses. +# The fourth field is "A" to signify an address record. The +# last field is the address. + +k8gkh.ampr.org. 3599886 IN A 44.70.12.31 +ag9v.ampr.org. 3585524 IN A 44.70.12.34 + +# This is a "canonical name" (CNAME) record that maps an +# alias to an official hostname. + +server.ampr.org. 3599886 IN CNAME ag9v.ampr.org. +  +APPENDIX E +Sample FTPUSERS File + +# This file establishes ftp user permissions. Fields are +# separated by exactly one space. The privileges value is a +# bitmask. The only values significant for ftp are: + +# 1 - read only +# 3 - read/write +# 7 - read/write/overwrite/delete + + +anonymous * /pub 1 # no password, read only in /pub +friend foobar /pub 3 # read/write privileges in /pub +spouse snoogums / 7 # read/write/delete everywhere +  +APPENDIX F +Making Your TNC Talk in KISS MODE + +Once NOS is installed and your configuration files set, you need to do +one more thing: get your TNC talking to your computer in KISS (Keep +It Simple, Stupid) mode. KISS is a special protocol that lets your +computer do the work of processing packets; the TNC does only the very +low-level packet assembly and disassembly functions. Nearly all TNCs +support KISS in one way or another. + +Typically, you'll need to issue commands to the TNC to set the serial +line baud rate to the same speed as you've specified in the attach +command, to 8 bit data, and to no parity. Then, issue the KISS +command (on a TNC2, kiss on), and the TNC's software reset command. +After that, you won't be able to talk to your TNC via the terminal +program, but NOS will be able to. (And don't worry, you can easily +return the TNC to normal mode if you want to.) Once you've done this, +you're set to run NOS. + +One trick that grinos supports is the ability to send commands to the +TNC during startup. The comm command will send a string of text to +the named interface. For example, to force a Kantronics DataEngine or +KAM into KISS mode every time you start NOS, include the following +commands in autoexec.nos (after you've defined the interface with the +attach command): + +comm ax0 "interface kiss" +comm ax0 "reset" + +Note that surrounding the text with double quote characters will +preserve spaces in the command. +  +Appendix G +A Sample BM.RC File + + +# bm.rc +# your hostname -- note that for mail we put a trailing period +# at the end of the FQDN. +host ag9v.ampr.org + +# the user name (one host can receive mail for several users); usually +# your callsign +user ag9v + +# your full name, for the message "From:" line +fullname John Ackermann + +# if you want to have replies sent to another host, because, for +# example, you are using a pop server, this line specifies where replies +# should go +reply ag9v@ag9v.ampr.org + +# for faster screen writes on the pc, use direct video, not bios +screen direct + +# if you want to use an editor different than bm's built-in one +edit ed + +# put saved messages here; note "/" instead of "\" +mbox c:/folder/mbox + +# save a copy of outbound mail here +record c:/folder/outmail + +# folder for your mail +folder c:/folder + +# maximum number of messages that can be pending +maxlet 200 + diff --git a/src/nos/doc/intronos/README.NOW b/src/nos/doc/intronos/README.NOW new file mode 100644 index 00000000..1b43be84 --- /dev/null +++ b/src/nos/doc/intronos/README.NOW @@ -0,0 +1,38 @@ +8 April 1992 + +The attached file, INTRONOS.TXT, is an ASCII version of my "Getting Started +with TCP/IP on Ham Radio." (Soon to be a major motion picture...) + +The document was originally written with Word for Windows, and included a +fair amount of fancy formatting. I've done only a minimal conversion to +straight ASCII, and as a result the typography may not be as clear as it +should be. + +On the other hand, it ought to be very easy to display on the screen or print +on just about any ASCII device. It includes only tabs, formfeeds, linefeeds, +and carriage returns as control characters, has the formfeeds spaced at no +more than 59 lines, and has lines short enough that you should be able to hang +print it with a 1 inch left margin on 3-hole punched paper. + +If anyone wants to go through this and format it properly (fix the hanging +indents, use quotes around words that originally were bolded or underlined, +etc.), you are welcome to do so. Just promise to get a copy of your version +to me so I can update it to track changes to the text. + +I'm also interested in correcting any errors of fact or opinion that folks +may spot. + +The obligatory notice: INTRONOS.TXT is copyright 1992 by John R. Ackermann, +Jr. Permission is given for non-commercial copying, distribution, and use. +You may modify the document, but you must retain my copyright notice in +addition to a notice identifying you as making the modifications (I'll take +the blame for my mistakes, but not yours...), and you must provide me with a +copy of the modified version. + +John Ackermann AG9V +john.ackermann@daytonOH.ncr.com +AG9V@N8ACV.OH + +2371 Stewart Road +Xenia, OH 45385 + diff --git a/src/nos/doc/ka9qbgn.zip b/src/nos/doc/ka9qbgn.zip new file mode 100644 index 0000000000000000000000000000000000000000..4b5c02f08a19e3ee5bcbd5e2c7c1ed6121ee80b1 GIT binary patch literal 175735 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

    Q@5tMZS`*B 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 A-2eap literal 0 HcmV?d00001 diff --git a/src/nos/doc/ka9qbgn/BM.TXT b/src/nos/doc/ka9qbgn/BM.TXT new file mode 100644 index 00000000..c1d6e342 --- /dev/null +++ b/src/nos/doc/ka9qbgn/BM.TXT @@ -0,0 +1,586 @@ + + + + BM User Manual + + Dave Trulli, NN2Z + + + + + 1. What is BM? + + BM is designed to serve as the mail user-interface for the + KA9Q TCP/IP inter-networking package. It provides a full + set of mail services to the user which allows the sending + and receipt of electronic mail. + + + + 2. BM Installation + + To install BM requires the modification of the supplied + configuration files and the creation of the proper + directory structure. The following sections describe the + file and directory structure used by BM and SMTP. + + + 2.1 Directory Structure + + \spool\mqueue This directory holds the outbound mail + jobs for SMTP. Each job consists of 2 + files a xxxx.txt and xxxx.wrk file where + xxxx is a unique numerical prefix. The + format of the files are described in a + later section. + + + \spool\rqueue This directory is used by SMTP for jobs + that have been received and will be + processed by a user defined mail routing + program. This directory is not used + directly by BM. + + + \spool\mail This directory holds the individual + mailboxes for each user name on your + system. The extension .txt is add to the + user name to form the mailbox name. Mail + received by the SMTP server is appended to + the mailbox file. + + + 2.2 Configuration Files + + + + + + + + + + + + + + + + + - 2 - + + + + 2.2.1 The\bm.rc file The \bm.rc file provides BM with + the configuration needed for the operation of the mailer. + + The format for the \bm.rc file is: + + variable value + + + The following variables are valid in the bm.rc file: + + + smtp + + defines the path to the directory containing the mailbox + files. The default directory is \spool\mail on the + current drive. + + + host + + Is used to set the local hostname for use in the RFC822 + mail headers. This is a required field. + + + user + + Defines the user name of the person who is sending mail. + This is also used as the default mailbox for reading mail. + On the AMPRNET this is usually set to your call. There is + a DOS limit of 8 characters for the user name. + + + edit + + Defines the name of your favorite editor which can be used + to construct and edit the text of outgoing messages. The + use of edit is optional. + + + fullname + + Is used to provide your full name to the mailer for use in + the comment portion of "From:" header line. The use of + fullname is optional. + + + + + + + + + + + + + + + + + + + - 3 - + + + + reply + + Defines the address where you wish to receive replies to + messages sent. This option is useful if you are operating + your pc on a local area network and would like your mail + replies sent to a more "well known host". The address + specified by reply is used to generate a "Reply-To:" + header in outbound mail. The "Reply-To:" header overrides + the "From:" header which is the address normally used to + reply to mail. This field is optional. + + + maxlet + + defines the maximum number of messages that can be + processed by BM in one mailbox file. The default value of + maxlet is 100. + + + mbox + + Specifies the default file to be used for the "save" + command. This file is in the same format as a mailbox and + may later be viewed using the -f option of BM. If this + option is not used then the default is set to mbox. + + + record + + If defined a copy of each message sent will be saved in + . + + + folder + + If defined folder contains the path used by the save + command. + + + screen [bios|direct] + + In the Turboc compiled version of BM, screen sets the + display output mode to use either direct writes to screen + memory or the ROM BIOS. The default is direct which + provides the fastest output mode. If you are using a + windowing system such as Desqview you should set the mode + to bios. + + Here is a sample bm.rc file. + + + + + + + + + + + + + + - 4 - + + + + host nn2z.ampr + user nn2z + fullname Dave Trulli + # send my replies to the Sun + reply nn2z@ka9q.bellcore.com + screen direct + edit /bin/vi + mbox c:/folder/mbox + record c:/folder/outmail + folder c:/folder + maxlet 200 + + + + 2.13.1 The\alias file The alias file provides an easy + way to maintain mailing lists. An alias can be any string + of characters not containing the "@" symbol. The format + for the alias file is: + + alias recip1 recip2 recip3 + recip4 + + Note that a long list of aliases can be continued on an + additional line by placing a tab or space on the + continuation line. + + Some examples aliases are: + + dave nn2z@nn2z.ampr + + phil karn@ka9q.bellcore.com + + # mail to local nnj users + nnj wb2cop@wb2cop.ampr karn@ka9q.bellcore.com + wb0mpq@home.wb0mpq.ampr w2kb@w2kb.ampr + ka2tsm@ka2tsm.ampr + + In the above example, when specifying nnj as the + recipient, BM will expand the alias into the list of + recipients from the alias file. At this time an alias may + not contain any other aliases. + + + 2.13.2 \spool\mqueue\sequence.seq The sequence file + maintains a message counter which is used by BM and SMTP + to generate message ids and unique filenames. This file + is created by BM. + + + + + + + + + + + + + + + + + - 5 - + + + + 2.14 Environment + + The timezone used in mail headers is obtained from the DOS + environment variable TZ. An example TZ setting is: + + set TZ=EDT4 + + It is set in your AUTOEXEC.BAT file. The first 3 + characters are the timezone and the fourth character is + the number of hours from GMT time. If TZ is not set, GMT + is assumed. + + + + 3. Commands + + All BM commands are single letters followed by optional + arguments. The command list has been designed to make + those familiar with Berkeley mailers comfortable with BM. + + + 3.1 Main menu commands + + m [userlist] + + The mail command is used to send a message to one or more + recipients. All local recipient names ( those which don't + contain an '@' ) are checked for possible aliases. If no + arguments are supplied you will be prompted for a + recipient list. While entering a message into the text + buffer several commands are available such as: invoking an + editor, and reading in text from other messages or files. + See the section below for a description of these commands. + To end a message enter a line containing a single period. + + It is important to remember that the input line buffer has + a 128 character limit. You should format your text by + entering a carriage return at the end of each line. Typing + excessively long lines may cause data loss due to + truncation when passing the message through other hosts. + Keeping lines less than 80 characters is always a good + idea. + + + d [msglist] + + Mark messages for deletion. Messages marked for deletion + are removed when exiting BM via the q command or when + changing to an alternate mailbox with the n command. + + + + + + + + + + + + + + - 6 - + + + + h + + Display message headers. The message headers contain the + message number, the status indicating whether it has been + read or deleted, the sender, size, date, and subject. + + + u [msglist] + + Undelete a message that is marked for deletion. The status + of a message can be determined by looking at the status + field of the message using the h command. + + + n [mailbox] + + Display or change mailbox. The n command with no arguments + will display a list of mailboxes containing mail. If an + argument is supplied, then the current mailbox is closed + and a new mailbox is opened. + + + !cmd + + Run a DOS command from inside BM. An error message will + result if there is not enough memory available to load the + command. + + + ? + + Print a help menu for BM commands. + + + s [msglist] [file] + + The s command is used to save messages in a file. If no + filename is given the default from the mbox variable in + \bm.rc is used. If no message number is supplied then the + current message is saved. The message is stored in the + same format as a mailbox file with all mail headers left + intact. + + + p [msglist] + + The p command is used to send messages to the printer. + This command uses the DOS device PRN for output. This + command is equivalent to: + + + + + + + + + + + + + + - 7 - + + + + s [ msglist ] PRN + + + + w [msglist] file + + The w command is used to save messages in a file. Only the + message body is saved. All mail headers are removed. If + no message number is supplied then the current message is + saved. + + + f [msg] + + The f command is used to forward a mail message to another + recipient. If no message number is supplied the current + message is used. The user is prompted for the recipients + and a subject. The RFC822 header is added to the message + text while retaining the complete original message in the + body. Also see the ~m command. + + + b [msg] + + Bounce a message. Bounce is similar to forwarding but + instead of your user information, the original sender + information is maintained. If no message number is + supplied the current message is used. + + + r [msg] + + Reply to a message. Reply reads the header information in + order to construct a reply to the sender. The destination + information is taken from the "From:" or the "Reply- + To:"header, if included. If no message number is supplied + the current message is used. + + + msg # + + Entering a message number from the header listing will + cause the message text to be displayed. + + + l + + List outbound messages. The job number, the sender, and + the destination for each message is displayed. A status of + "L" will appear if the SMTP sender has the file locked. + + + + + + + + + + + + + - 8 - + + + + k [msglist] + + Remove an outbound message from the mqueue. A message can + be removed from the send queue by specifying the job + number obtained by the l command. If the message is + locked you will be warned that you may be removing a file + that is currently being sent by SMTP. You will asked if + this job should still be killed. + + + + $ + + Update the mailbox. This command updates the mailbox, + deleting messages marked for deletion and reading in any + new mail that may have arrived since entering BM. + + + x + + Exit to DOS without changing the data in the mailbox. + + + q + + Quit to DOS updating the mailbox. + + + 3.21 Text input commands + + The following commands are available while entering + message text into the message buffer. + + ~r read into the message buffer. + + ~m read into the message buffer. + + ~p display the text in the message buffer. + + ~e invoke the editor defined in \bm.rc with a + temporary file containing the text in the + message buffer. + + ~q Abort the current message. No data is sent. + + ~~ Insert a single tilda character into the + message. + + ~? Display help menu of tilda escape commands. + + + + + + + + + + + + + + - 9 - + + + + 4. Mailer Operation + + 4.1 Command Line Options + + BM may be invoked as follows: + + To send mail: + bm [ -s subject ] recip1 .. .. recipN + + To read mail: + bm [ -u mailbox | -f file ] + + -s subject This option sets the subject to the text on + the command line. + + + -u mailbox Specify which mailbox to read. This + overides the default from the bm.rc. + + + -f file Read message from "file" instead of a + mailbox. + + + 6. BugReports + + Please send any comments, suggestions or bug reports to: + + Dave Trulli + Usenet: nn2z@ka9q.bellcore.com + packet: nn2z@nn2z + AMPRNET: nn2z@nn2z.ampr [44.64.0.10] + + + + + + + + + + + + + + + + + + diff --git a/src/nos/doc/ka9qbgn/CHANGES.LOG b/src/nos/doc/ka9qbgn/CHANGES.LOG new file mode 100644 index 00000000..38d647ad --- /dev/null +++ b/src/nos/doc/ka9qbgn/CHANGES.LOG @@ -0,0 +1,21 @@ + +* 01-Jan-1991 + + v1.1 : Added W9NKs NET/ROM Support Paper nrman.txt + + +* 26-Feb-1991 + + v1.2 : Added NOS Mailbox Documentation mailbox.txt + Added RSPF Defining Document rspf.txt + +* 04-Apr-1991 + + v1.3 : Added TCP/IP Command Set Reference noscmd16.txt + + +* 27-Apr-1991 + + v1.4 : Updated KA9Q NOS User Manual added. userman.txt + BM User manual added. bm.txt + diff --git a/src/nos/doc/ka9qbgn/IPAX25.TXT b/src/nos/doc/ka9qbgn/IPAX25.TXT new file mode 100644 index 00000000..150ba8a4 --- /dev/null +++ b/src/nos/doc/ka9qbgn/IPAX25.TXT @@ -0,0 +1,693 @@ +[The following paper has been submitted to the 7th ARRL Computer + Networking Conference. You may read it and pass it on to others + to read, but please do not reproduce it in any other publication. + Copyright 1988 by Daniel M. Frank.] + +[This is a DOS text version of a document originally produced + with a word processing program. In the translation process, + some text formatting may have been disturbed, and the bold + facing has definitely been lost. So, it may not scan quite + like the original. Sorry.] + + + TRANSMISSION OF IP DATAGRAMS OVER NET/ROM NETWORKS + + Daniel M. Frank, W9NK + 1802 Keyes Avenue + Madison, WI 53711-2006 + + +ABSTRACT + +One of the main design goals of the Internet Protocol was that IP +datagrams could be carried over existing local- and wide-area +networks. This characteristic of IP makes it possible to build so +called "internetworks" out of existing network facilities. We +built support for an existing Amateur wide area network, NET/ROM, +into the KA9Q TCP/IP package, allowing the use of NET/ROM to carry +IP datagrams, and adding features which make the KA9Q software +useful as a full duplex NET/ROM packet switch. We have also shown +that NET/ROM may be used as a datagram network only, independent +of its transport and application layer facilities. + + +INTRODUCTION + +In the late Seventies and early Eighties, the world of computer +communications consisted of many isolated local- and wide-area +networks. Enough communications capacity existed to link the +entire country, and much of the world, into a single large network, +but the existing facilities were physically and logically +dissimilar. They could not simply be "plugged together" to make +this large "internetwork" (or "Internet"). + +The designers of the Internet Protocol (the "IP" in "TCP/IP") were +committed to overcoming the obstacles that prevented an Internet +>from developing. They came up with two key ideas: + + o Gateways can be established between networks. A gateway + is a computer which possesses the physical resources and + software to connect with and speak to more than one kind + of network. + + o A single protocol can be developed whose messages + ("datagrams") can pass through any network, hidden inside + that network's "native" messages. When a message with + a datagram inside it encounters a gateway, the gateway + "unwraps" the datagram, rewraps it in the native message + of a second network, and sends it on its way. If a + datagram is too large to fit inside the native message + type of a network, the gateway breaks it into pieces + ("fragments"), each of which is then wrapped in a native + message and sent on. + +By using IP and gateways, the designers of the Internet have +created a global "network of networks", which today encompasses +hundreds of thousands of computer systems, connected to every +conceivable kind of network. + +Amateur packet radio networking, like computer networking, consists +of many different network technologies and protocols. Local AX.25 +communications, digipeating, TexNet, ROSE, and NET/ROM, to name +only a few, coexist or compete for dominance as the network +technology of choice. This competition is healthy, and is in the +spirit of amateur radio experimentation. Any attempt to establish +one network over another as the single "standard" is both pointless +and doomed to failure. No single standard can ever be imposed on +radio amateurs any more than it could have been imposed on computer +networks, given the investments already made in equipment, +software, and education. + +As the dissimilar amateur networks grow in size, they meet up with +each other. Sometimes they coexist on the same channels. But +without gateways and some kind of Internet Protocol, each network +is an island of communication, unable to send or receive data +beyond its own shores. + +The work described in this paper is a first step towards true +Amateur Radio internetworking. Using the KA9Q TCP/IP package as +a basis, we have built a software system which functions as a +gateway between local TCP/IP networks and the NET/ROM network. It +allows IP datagrams to be forwarded automatically and transparently +across existing NET/ROM facilities. In addition, as a full +implementation of NET/ROM layer 3, it is capable of functioning as +a NET/ROM relay node (as opposed to an AX.25 endpoint), and as a +full duplex NET/ROM packet switch. + + +IP OPERATIONS OVER STANDARD AX.25 CONNECTIONS + +In order to properly understand how we have interfaced to the +NET/ROM network, we should first examine how "ordinary" TCP/IP +operations take place over AX.25. This description follows the ISO +OSI Reference Model (RM), a seven-layer classification of network +facilities. + +>From the bottom up, the layers used in packet TCP/IP operation are: + + (1) A physical layer, made up of the radios, antennas, and + modems used to generate and carry the tones used to + convey digital data from one place to another. + + (2) A data link layer, made up of HDLC and AX.25, used to + format and address the data, detect errors and discard + bad packets. The link layer only knows about and + communicates with stations with which we are directly + connected. In the case of packet radio, this means + stations with which we have reliable, direct + communications. (Digipeating doesn't count, for purposes + of this discussion.) + + (3) A network layer, responsible for routing packets to their + destinations through one or more link-to-link hops. The + main distinction between the data link and network layers + is that the network layer provides facilities for + communication between stations not directly connected. + The network layer has to have some concept of routing, + that is, the path to be taken by a packet to reach its + destination. We use IP as our network protocol. + + (4) A transport layer, responsible for reliable end-to-end + communications. Our network layer does not guarantee + that a packet will actually reach its destination. While + AX.25 provides link layer acknowledgement and + retransmission, it does not guard against nodes which go + down, software errors, or a destination station which is + not on the air. The transport layer provides for an + acknowledgment to be sent from the packet's ultimate + destination, and for retries in case that acknowledgment + doesn't arrive within a reasonable amount of time. + + The other function of a transport layer is multiplexing. + The network layer provides only host-to-host addressing. + However, a computer can have many users, and provide many + different services. The transport layer takes incoming + packets from the network and directs them to the proper + programs based on information contained in the transport + header portion of the packets. + + Our transport protocol is TCP, the Transmission Control + Protocol. + + (5) The session layer is mainly involved with providing + services to individual programs within the computer. It + is not of importance for the current discussion. + + (6) The presentation layer is mainly concerned with the + uniform formatting of data, or its conversion between + different character sets. Some of the TCP/IP user + programs have a very simple presentation "layer" which + maps plain text messages in the native character set of + the user's computer, to and from ASCII with a standard + line-ending convention. + + (7) The application layer is made up of the various programs + and services that use networking facilities. Users of + TCP/IP mainly make use of telnet, for keyboard to + keyboard chat and remote login, smtp for automated + transfer of mail, and ftp, for easy exchange of files. + + + +LINK LAYER MULTIPLEXING + +As can be seen from our description, local TCP/IP operation uses +regular AX.25 communications for its link layer. An AX.25 packet +containing an IP datagram contains a special code in the protocol +ID (PID) field of its header. This allows the link layer software +to forward the contents of the packet to the proper part of the +KA9Q package, in this case the IP routing code. + +If the AX.25 packet contained a PID of "no level 3", the link layer +would forward it to a different part of the package, in this case +the AX.25 session code, which allows users of the package to hold +"regular" AX.25 conversations, bypassing all layers between the +link and application layers. (This brings up an important point +about the reference model we've presented: an implementation may +not contain certain layers from the RM if the services they would +have provided are unused or unneeded.) + +This switching of packets at the link layer based on their PIDs is +known as link layer multiplexing. Multiplexing at the link layer +is extremely useful, because it allows different network layer +protocols to share the same data link services, and often the same +link connections. Link layer multiplexing is what allows the KA9Q +software with NET/ROM support to act as a digipeater, an IP relay, +and a NET/ROM relay node, all on the same channel, through the same +TNC. + + +AN OVERVIEW OF NET/ROM + +Now that we understand how IP datagrams are carried over packet +radio links, we should examine how NET/ROM operates. Again, we +will use the ISO OSI Reference Model as our framework: + + (1) The physical layer is the same, i.e. radios, antennas, + and modems. + + (2) The data link layer is again AX.25, but the Protocol ID + field of NET/ROM packets is set to a special NET/ROM ID. + + (3) The network layer of NET/ROM handles the automatic + routing of packets to their destination. A NET/ROM + network packet header contains the source and destination + callsigns of the NET/ROM endpoints. There is no + information about the route the packet will travel to its + destination. Instead, every node maintains a routing + table based on routing adjacencies: it receives + broadcasts from other nodes which say, essentially, "I + am willing to take traffic for such-and-such a node." + When a NET/ROM node receives a network packet, it + examines its routing table to see if anyone is willing + to pass it on toward its destination. If so, it hands + off the packet to the next station. If not, it simply + throws the packet away without comment. + + The type of network communications service (as opposed + to the routing techniques) used in NET/ROM (and IP) is + usually called an unreliable, connectionless datagram + layer, and the network layer packets are generally called + datagrams. The service is unreliable, because it does + not guarantee or confirm ultimate delivery. It is + connectionless, because no circuit is established over + which datagrams will travel. (This contrasts with some + public data network protocols, where before data may be + sent to a remote system, a fixed path to that system must + be set up through the network, with resources + preallocated at every intervening node. Each approach + has its advantages and adherents.) + + (4) The transport layer of NET/ROM uses what is called a + sequenced packet protocol. Unlike TCP, which delivers + an unsegmented stream of bytes to the receiver, and is + free to pack as many or as few bytes into each message + as it likes, the NET/ROM transport delivers a sequence + of packets. The amount of data in these packets is + determined by the amount of data in the AX.25 packets the + NET/ROM user presents for transmission. NET/ROM is not + free to combine packets together for greater efficiency, + although it can fragment and reassemble packets which are + too large to fit in one of its transport messages. + + The NET/ROM transport protocol provides end-to-end + delivery and acknowledgement, as well as demultiplexing + of arriving messages by circuit number. A NET/ROM node + can be handling traffic for more than one circuit, or + connection, at a time, and it directs that traffic + internally by examining the circuit number field of the + transport header. + + (5) The session layer is not present in NET/ROM. + + (6) The presentation layer is not present in NET/ROM. + + (7) The application layer is what a user sees when he or she + connects to a NET/ROM node. It is responsible for + responding to user commands to list routes and nodes, and + establish connections. "No layer 3" AX.25 packets + arriving at a NET/ROM node are shunted directly up to the + application layer, while "NET/ROM" PID packets are + forwarded up to the NET/ROM network layer. This link + layer multiplexing should be familiar from our earlier + discussion. + + +A full explanation of how the NET/ROM software works is beyond the +scope of this paper. The reader is referred to the NET/ROM manual +for further details. + + +NETWORK AND INTERNETWORK + +Our presentation of the ISO OSI RM has been somewhat simplified. +In particular, the ISO recognizes a subdivision of Layer 3 into a +Network Layer (3A) and an Internetwork Layer (3B). Strictly +speaking, the Internet Protocol (IP) is a 3B protocol, while the +NET/ROM network service is a 3A protocol. To put it somewhat +crudely, IP is an Internetwork Layer because its messages can be +routed through multiple logically and physically distinct networks. +The same cannot be said of X.25, for example, or of NET/ROM layer +3. Our NET/ROM support in the KA9Q package reflects this +distinction. + +The KA9Q NET/ROM software is not a full NET/ROM implementation. +That was unnecessary for our purposes. We didn't need the NET/ROM +transport protocol, since our reliable end-to-end services are +already provided by TCP. We didn't need the application layer, for +similar reasons. What we did need was an existing network service +that could carry our IP datagram traffic to remote destinations +simply and easily. The NET/ROM network layer was sufficient for +this purpose. + +We use the NET/ROM nodes as a datagram network. When we have +traffic to pass through a local NET/ROM, our software makes sure +we have an AX.25 connection to that node, then puts a NET/ROM layer +3 header on our IP datagram and sends it off to the NET/ROM via an +AX.25 packet with a protocol ID of NET/ROM. The NET/ROM link layer +sees the protocol ID and passes the packet to its network layer, +which examines its routing table and passes the packet on to the +appropriate neighboring NET/ROM. This process continues until the +packet arrives at the destination computer running the KA9Q +software, where it is unwrapped and passed back up to the IP code. + +At no point is the NET/ROM user interface or transport layer +involved. We do not have to issue CONNECT commands, or make use +of NET/ROM virtual circuits in any way. The NET/ROM nodes accept +and pass our datagrams because they do not examine the contents of +network datagrams not specifically addressed to them. We are able +to take advantage of the link-layer acknowledgements and automatic +routing of the NET/ROM system without the overhead of its higher +level services. + + +SOFTWARE ARCHITECTURE + +Let's examine how this is done in more detail. Our once-simple +protocol stack has grown a bit by now. Let's have a look at it: + + (1) The physical layer is basically unchanged (although we + did added another physical layer service, described + later). + + (2) At the data link layer, we still have AX.25. However, + the link layer now multiplexes three different kinds of + packets. "No level 3" packets still go up the AX.25 + session code, and IP packets will go directly up to layer + 3B, but now we also direct packets with a NET/ROM PID to + the NET/ROM 3A routing layer. + + (3A) Incoming packets with a NET/ROM PID go to the network + layer. This is a full implementation of NET/ROM layer + 3. It has its own routing table, similar to that found + in any NET/ROM node. It sends NODES broadcasts, which + update the routing tables of neighboring NET/ROM nodes, + and updates its own routing table on receipt of NODES + broadcasts from those neighbors. + + The NET/ROM layer examines incoming NET/ROM datagrams to + see if our station is their destination. If the + datagrams are not for us, the routing table is examined + to see if we can forward them on to a neighboring node + for handling. If we can, they are sent back down to the + link layer to continue their journey. In other words, + a station running the KA9Q package with NET/ROM support + can act as a NET/ROM relay station. As far as + neighboring NET/ROM nodes are concerned, they are simply + passing traffic on through another NET/ROM. + + If a NET/ROM datagram is for us, the network layer makes + sure that it isn't a NET/ROM transport packet. If it is, + it is dropped. If it isn't, it is sent up to layer 3B. + + (3B) The internetwork layer contains the IP router and + protocol code. (Remember that IP has its own routing + table and algorithms!). It receives AX.25 traffic with + a protocol ID of IP, as well as IP datagrams arriving in + NET/ROM network datagrams. + + +The remaining layers are the same as before, so we won't repeat +them. + + +IP ROUTING VIA NET/ROM + +The IP routing table is similar, although not identical, to the one +used for NET/ROM. It contains two kinds of entries, which we will +call local routes and gateway routes. + +A local route consists of an IP address and an interface name. The +KA9Q software supports multiple interfaces, similar to the way that +NET/ROM supports both a TNC's modem and its serial port. One +component of a route, both in NET/ROM and the KA9Q package, is the +interface through which an outgoing datagram should pass. (The +main difference is that, while NET/ROM only supports AX.25 and two +interfaces, the KA9Q code supports many different link layers and +an almost unlimited number of interfaces.) When a local route is +found in the IP routing table, this means that the station with the +given IP address is on the local subnet, which for packet radio +purposes means that it is within radio communications range. The +datagram is forwarded to the link layer with an indication that +direct delivery should be attempted. + +A gateway route consists of an IP address, an interface name, and +a gateway IP address. When we encounter a gateway route, it means +that the station in question is not on our local subnet (i.e. not +within radio range), and must be reached via a relay station, or +gateway. (You will recall the idea of gateways from our earlier +introduction of internetworking.) The IP datagram is forwarded to +the link layer with an indication that the message should be sent, +not directly to its destination, but to the gateway station, which +will make an attempt to reach the recipient, perhaps via another +gateway. + +When we added the NET/ROM support, we were concerned that it be +fully transparent to the IP layer, both out of concern over proper +design, and out of a desire to avoid any unnecessary rewrite of the +existing code. One key assumption in the KA9Q IP routing software +is that of routing adjacency: the IP layer makes the assumption +that it can reach, via the interface given, some IP address +mentioned in the route entry (either the recipient or the gateway). +However, we are using NET/ROM precisely because there is no IP +station within radio range who can handle our traffic. In order +to maintain the adjacency assumption at the IP layer, we had to +simulate the presence of an adjacent IP station in the NET/ROM +code. + +An IP route which uses the NET/ROM support looks just like any +other routing table entry: it consists of a destination, an +interface, and an optional gateway. The only difference is that +the interface is called "Netrom", and it's not a link layer +interface at all, although it appears that way to the IP routing +code. When the IP layer sends a datagram down to the NET/ROM +"interface" for handling, it is actually calling a small stub +routine above the NET/ROM routing code. This stub looks up the IP +address in a table which associates IP addresses, used at the IP +layer and above, with AX.25 callsigns, used by NET/ROM's network +layer. If it finds an entry for the given IP address, it creates +a NET/ROM network layer datagram header with a destination address +set to the AX.25 callsign found in the association table, prepends +this header to the IP datagram, and hands it off to the NET/ROM +routing code. + +The NET/ROM routing software now handles the datagram exactly as +it would any NET/ROM traffic coming in from outside: it checks to +see if there is an entry for the destination AX.25 callsign in its +routing table. If there is, it opens a link layer (AX.25) +connection to the neighboring NET/ROM node advertising the best +quality route, and forwards the message into the NET/ROM network, +to be delivered (ultimately) to the station whose AX.25 address is +that in the destination field of the NET/ROM network header, and +whose IP address was that of the destination or gateway in the IP +routing table entry. + +This approach was extremely successful. Not one line of code +needed to be changed in the IP routing code of the original KA9Q +package. + + +FEATURES TO SUPPORT NET/ROM PACKET SWITCHING + +As implied above, the KA9Q package allows an almost unlimited +number of interfaces to be used for receiving and forwarding +packets. At the IP layer, datagrams are routed from interface to +interface using information from the IP routing table. We added +a similar functionality to the NET/ROM routing layer, allowing it +to receive and send NET/ROM traffic on any AX.25 interface it is +configured to use. This feature allows the KA9Q software with +NET/ROM support to be used as a multi-port full duplex NET/ROM +packet switch, using standard TNCs or modem boards available for +the IBM PC. This is vastly superior to the practice of wiring +together several NET/ROM TNCs with a diode bridge. There is no +possibility of collisions, since each TNC has its own serial port +or bus address, so the interfaces can all run at full duplex, full +speed through the switch. In addition, this arrangement can be +used with the high-speed interfaces and modems now becoming +available, far exceeding the capabilities of a standard TNC. + +In several places in the United States, excess bandwidth on +commercial data links is being used to carry NET/ROM traffic. +These "wormhole" links work fairly well when there is only one +NET/ROM at each end, but their performance degrades quickly if more +are added. Beyond the difficulties inherent in the diode bridging +scheme shown in the NET/ROM manual, there is an additional problem +not amenable to a simple hardware solution. Most of the data links +being used are running through time-domain or statistical +multiplexing hardware, or through public data networks. While all +of these provide some kind of carrier detect indication, in almost +every case that indication comes far too late to avoid collisions. +Carrier sense simply doesn't work, since the carrier indication +isn't there when it is needed, and arrives just in time to cause +unnecessary delays afterwards. Performance of such an arrangement +is likely to degrade to below that of schemes using no carrier +sense at all. + +NET/ROM nodes use a simple serial framing method to communicate +with each other over their serial ports. We have added support for +this framing method alongside the "KISS" protocol which the KA9Q +package normally uses to communicate with TNCs. It is possible to +plug a number of NET/ROM TNCs directly into the serial ports of an +IBM PC, and use the PC as a switch. Some of those NET/ROM TNCs can +be at the ends of "wormhole" links. These links can run at full +duplex with no collisions, thus getting maximum performance and +almost zero retries (assuming reliable data lines and serial +interface hardware). The NET/ROM serial interface code is +instrumented to provide statistics on traffic volume and error +rates on its serial ports. + + +LESSONS LEARNED + +The creation of the NET/ROM code has provided some interesting +lessons on how we should and should not go about building amateur +packet networks. One of these lessons became apparent before we +even thought of writing the NET/ROM code. + +We would probably not even have added the NET/ROM layer three +support to the KA9Q package had there been an easier way to +accomplish what we wanted, which was to use NET/ROM networks to +handle our IP traffic until we could build our own IP network. +Unfortunately, the NET/ROM software has a rather unfriendly link +layer multiplexor. It sends "no layer 3" packets to the +application layer, and "NET/ROM" packets to the NET/ROM network +layer, but anything else it consigns to oblivion. We could have +built fairly simple code to establish connections and send our IP +traffic over NET/ROM transport circuits, but any packet with a +protocol ID of "IP" was simply dropped by the NET/ROM software. +So, lesson number one: + + If you're going to build a networking product, write the + multiplexing code to be inclusive, rather than exclusive. + In other words, if you get something with an unfamiliar + protocol ID, wrap it up and send it on, remembering to + regenerate the PID properly on the other end. + + +Another problem we encountered was the lack of a protocol ID field +in the NET/ROM network layer header. Both AX.25 packet headers and +IP datagram headers contain a field which indicates what sort of +higher level protocol stuff is packaged inside. This is not unlike +the cans on your grocer's shelf: without a label, you have a hard +time telling the beets from the beans. The AX.25 protocol ID field +makes link layer multiplexing possible, and the protocol ID of an +IP datagram header allows many higher level protocols to use its +internetworking services. Because the NET/ROM network header does +not contain a protocol ID field, there is no straightforward way +to put anything but a NET/ROM transport packet inside. This is +unwise. The authors of NET/ROM may well have been unaware that +anyone would ever attempt a project such as ours, but by leaving +this feature out of their network layer, they made it difficult, +if not impossible, to ever introduce other transport protocols into +their product line. So, lesson number two: + + Include a protocol ID field in your link and network + layer headers, even if you can't think of a use for it + yet. Make it big enough to be useful, and offer to be + the repository of assigned PIDs, so that a standard + develops. + + +In experimenting with the auto-routing code in our NET/ROM network +implementation, we discovered something that is a common complaint +among NET/ROM operators. This can be summed up by the dictum, +"Just because you can hear them, doesn't mean they can hear you." +It is not unusual to have neighboring nodes that are "alligators" +(big mouth, tiny ears) or for your node to be a "rabbit" (big ears, +tiny mouth). Also, band openings on two meters happen quite often, +and usually last just long enough for you to receive a routing +broadcast from a station from whom you will never hear again - at +least until the next band opening. Either situation leaves your +routing table cluttered with impossible routes, which can lead to +repeated link-layer retries and transport layer failures. Routes +based on band openings age out fairly quickly. Ones based on deaf +neighbors come back, again and again. + +After a bit of experience with this phenomenon, we added the +"nodefilter" feature to our implementation. The user may specify +a list of nodes which are the only ones from which route broadcasts +will be accepted, or alternately, may specify a "reject list" of +nodes whose broadcasts will be routinely ignored. The lesson: + + If your routing method involves broadcast in an + asymmetrical or inconsistent communications environment, + provide a way to restrict the routes accepted to those + offered by reliable nodes. + + +The implementation described was actually the second one we did. +The first one grabbed AX.25 interfaces away from the IP part of the +KA9Q code, and could only be used for NET/ROM and regular AX.25 +traffic. This appeared to be a horrible idea from the moment the +first version was completed, and prompted an immediate rewrite, +producing a program that could act as a packet switch for IP as +well as NET/ROM. The lesson here (besides "look before you leap") +is: + + If you're going to build a packet switch for amateur use, + support link layer multiplexing, and try to make it + multi-purpose. This is a hobby, and the radios, tower + space, and dollars are in short supply. The more stuff + you can do with a single one of each, the happier you + will be in the long run. + + +EXPERIENCE + +At this writing, experience with the software is necessarily +limited. It is only now being made an official part of the +official KA9Q release (thanks, Phil!), so it has not been widely +available as for as long as we would have wished. Still, it has +found its way into enough hands for us to have some preliminary +measurements and impressions. + +The Madison, Wisconsin NET/ROM node (MAD) is connected to a node +(MQTA) in Marquette, in the Upper Peninsula of Michigan, via a +multiplexed commercial data line. We have conducted tests between +W9NK, in Madison, and KV9P, in Alpha, Michigan. Both stations sent +periodic routing broadcasts to announce their presence to their +local nodes. The path chosen by NET/ROM was: + + W9NK <-> MAD <-> MQT <-> MQTA <-> IRN <-> KV9P + +where MQTA and IRN were NET/ROM or TheNet nodes in Marquette and +Iron Mountain, Michigan, respectively. All nodes except the two +using the data line were on two meters, with a speed of 1200 baud. + +Performance was surprisingly good, with TCP round trip times +settling in around 12 to 20 seconds, with a standard deviation of +about nine seconds. In spite of the number of hops, performance +was good enough to hold fairly coherent keyboard-to-keyboard +conversations. + +We did note at least one case where duplicate copies of datagrams +were delivered by the NET/ROM network. Since TCP discards +duplicates, this causes no problem in normal operations, but in the +case we noticed it resulted in two replies to the same ICMP Echo +Request message (produced by the ping command). + +Feedback from other users, particularly N0AN in Iowa, illuminates +a serious problem with the management of existing NET/ROM networks: +the routing tables of these networks are so inaccurate that many +experienced users don't use the network layer facilities at all! +BBS mail forwarding scripts are set up to establish connections to +the local NET/ROM node, request a transport connection to a +selected neighbor, then from that neighbor to another, and so forth +to the NET/ROM node in their destination area. They have +discovered that, without human intervention, many NET/ROM networks' +routing facilities break down and become unusable. + +This problem has some impact on normal operations, in the sense +that these multiple transport sessions do not in any sense add up +to end-to-end protocol support. There is in fact no transport +facility (as we understand the term) in use in these cases, since +no acknowledgements travel from one end of the communications path +to another. There may as well be no transport layer in NET/ROM +under these circumstances; the overhead would at least be +substantially lower, with no additional loss of reliability. + +Unfortunately, networks in such a pathological state are unusable +by our TCP/IP software. Since we make no use of the NET/ROM +transport layer, we must rely entirely on the accuracy of the +network layer routing tables to support the forwarding of our +packets to their destinations. If these tables are not correct, +our traffic will not get through. + +The good news is that, in some areas where the NET/ROM operators +are also working with TCP/IP, this problem is forcing them to pay +attention to the quality of their routing tables. As we have noted +above, NET/ROM is somewhat short on facilities to do this, but a +few things can be and are being done with the tools available. One +side-effect of the TCP/IP NET/ROM support may be an improvement in +quality of service to all NET/ROM users! + + +FUTURE DEVELOPMENT + +We hope, at some point, to produce a version of this support that +can be put into ROM and used in a dedicated packet switch for +hostile environments. Such a switch would allow us to begin +building IP networks, while also offering superior performance to +the NET/ROM community. It is our hope that the two user +communities can work together, sharing resources to build a better +network than either could alone. + + +ACKNOWLEDGEMENTS + +Sincere thanks are due to Phil Karn, KA9Q, who would have been rich +(or at least, richer) by now if he hadn't been dedicated to +improving the state of the art for all radio amateurs. Also, +thanks to everyone on the tcp-group mailing list, who contributed +helpful comments during the design and development of the NET/ROM +code. Special thanks also to Howard Leadmon, WB3FFV, and John +Limpert, N3DMC, who got it to compile under Unix. + +Individuals who helped test or provided feedback on experience with +the software were: Duane Brummel, NX9K; Hasan Schiers, N0AN; and +Dave Reinhart, KV9P. + +Phil Karn, KA9Q, reviewed the first draft of this paper, providing +many helpful comments and suggestions. + + diff --git a/src/nos/doc/ka9qbgn/KISS.TXT b/src/nos/doc/ka9qbgn/KISS.TXT new file mode 100644 index 00000000..483a88bf --- /dev/null +++ b/src/nos/doc/ka9qbgn/KISS.TXT @@ -0,0 +1,554 @@ + + + + + + + + + + + The KISS TNC: A simple Host-to-TNC communications + protocol + + + Mike Chepponis, K3MC + + Phil Karn, KA9Q + + + + ABSTRACT + + The KISS[1] TNC provides direct computer to TNC + communication using a simple protocol described here. + Many TNCs now implement it, including the TAPR TNC-1 + and TNC-2 (and their clones), the venerable VADCG TNC, + the AEA PK-232/PK-87 and all TNCs in the Kantronics + line. KISS has quickly become the protocol of choice + for TCP/IP operation and multi-connect BBS software. + + + + 1. Introduction + + Standard TNC software was written with human users in mind; + unfortunately, commands and responses well suited for human use + are ill-adapted for host computer use, and vice versa. This is + especially true for multi-user servers such as bulletin boards + which must multiplex data from several network connections + across a single host/TNC link. In addition, experimentation + with new link level protocols is greatly hampered because there + may very well be no way at all to generate or receive frames in + the desired format without reprogramming the TNC. + + The KISS TNC solves these problems by eliminating as much + as possible from the TNC software, giving the attached host com- + plete control over and access to the contents of the HDLC frames + transmitted and received over the air. This is central to the + KISS philosophy: the host software should have control over all + TNC functions at the lowest possible level. + + The AX.25 protocol is removed entirely from the TNC, as are + all command interpreters and the like. The TNC simply converts + between synchronous HDLC, spoken on the full- or half-duplex + radio channel, and a special asynchronous, full duplex frame + "Keep It Simple, Stupid" + + + + + July 14, 1990 + + + + + + + + + format spoken on the host/TNC link. Every frame received on the + HDLC link is passed intact to the host once it has been + translated to the asynchronous format; likewise, asynchronous + frames from the host are transmitted on the radio channel once + they have been converted to HDLC format. + + Of course, this means that the bulk of AX.25 (or another + protocol) must now be implemented on the host system. This is + acceptable, however, considering the greatly increased flexibil- + ity and reduced overall complexity that comes from allowing the + protocol to reside on the same machine with the applications to + which it is closely coupled. + + It should be stressed that the KISS TNC was intended only + as a stopgap. Ideally, host computers would have HDLC inter- + faces of their own, making separate TNCs unnecessary. [15] + Unfortunately, HDLC interfaces are rare, although they are + starting to appear for the IBM PC. The KISS TNC therefore + becomes the "next best thing" to a real HDLC interface, since + the host computer only needs an ordinary asynchronous interface. + + 2. Asynchronous Frame Format + + The "asynchronous packet protocol" spoken between the host + and TNC is very simple, since its only function is to delimit + frames. Each frame is both preceded and followed by a special + FEND (Frame End) character, analogous to an HDLC flag. No CRC + or checksum is provided. In addition, no RS-232C handshaking + signals are employed. + + The special characters are: + + + Abbreviation Description Hex value + FEND Frame End C0 + FESC Frame Escape DB + TFEND Transposed Frame End DC + TFESC Transposed Frame Escape DD + + + The reason for both preceding and ending frames with FENDs + is to improve performance when there is noise on the asynch + line. The FEND at the beginning of a frame serves to "flush + out" any accumulated garbage into a separate frame (which will + be discarded by the upper layer protocol) instead of sticking it + on the front of an otherwise good frame. As with back-to-back + flags in HDLC, two FEND characters in a row should not be inter- + preted as delimiting an empty frame. + + 3. Transparency + + Frames are sent in 8-bit binary; the asynchronous link is + set to 8 data bits, 1 stop bit, and no parity. If a FEND ever + appears in the data, it is translated into the two byte sequence + FESC TFEND (Frame Escape, Transposed Frame End). Likewise, if + the FESC character ever appears in the user data, it is replaced + + + + July 14, 1990 + + + + + + + + + with the two character sequence FESC TFESC (Frame Escape, Tran- + sposed Frame Escape). + + As characters arrive at the receiver, they are appended to + a buffer containing the current frame. Receiving a FEND marks + the end of the current frame. Receipt of a FESC puts the + receiver into "escaped mode", causing the receiver to translate + a following TFESC or TFEND back to FESC or FEND, respectively, + before adding it to the receive buffer and leaving escaped mode. + Receipt of any character other than TFESC or TFEND while in + escaped mode is an error; no action is taken and frame assembly + continues. A TFEND or TESC received while not in escaped mode + is treated as an ordinary data character. + + This procedure may seem somewhat complicated, but it is + easy to implement and recovers quickly from errors. In particu- + lar, the FEND character is never sent over the channel except as + an actual end-of-frame indication. This ensures that any intact + frame (properly delimited by FEND characters) will always be + received properly regardless of the starting state of the + receiver or corruption of the preceding frame. + + This asynchronous framing protocol is identical to "SLIP" + (Serial Line IP), a popular method for sending ARPA IP datagrams + across asynchronous links. It could also form the basis of an + asynchronous amateur packet radio link protocol that avoids the + complexity of HDLC on slow speed channels. + + 4. Control of the KISS TNC + + Each asynchronous data frame sent to the TNC is converted + back into "pure" form and queued for transmission as a separate + HDLC frame. Although removing the human interface and the AX.25 + protocol from the TNC makes most existing TNC commands unneces- + sary (i.e., they become host functions), the TNC is still + responsible for keying the transmitter's PTT line and deferring + to other activity on the radio channel. It is therefore neces- + sary to allow the host to control a few TNC parameters, namely + the transmitter keyup delay, the transmitter persistence vari- + ables and any special hardware that a particular TNC may have. + + To distinguish between command and data frames on the + host/TNC link, the first byte of each asynchronous frame between + host and TNC is a "type" indicator. This type indicator byte is + broken into two 4-bit nibbles so that the low-order nibble indi- + cates the command number (given in the table below) and the + high-order nibble indicates the port number for that particular + command. In systems with only one HDLC port, it is by defini- + tion Port 0. In multi-port TNCs, the upper 4 bits of the type + indicator byte can specify one of up to sixteen ports. The fol- + lowing commands are defined in frames to the TNC (the "Command" + field is in hexadecimal): + + + + + + July 14, 1990 + + + + + + + + + Command Function Comments + 0 Data frame The rest of the frame is data to + be sent on the HDLC channel. + + 1 TXDELAY The next byte is the transmitter + keyup delay in 10 ms units. + The default start-up value is 50 + (i.e., 500 ms). + + 2 P The next byte is the persistence + parameter, p, scaled to the range + 0 - 255 with the following + formula: + + P = p * 256 - 1 + + The default value is P = 63 + (i.e., p = 0.25). + + 3 SlotTime The next byte is the slot interval + in 10 ms units. + The default is 10 (i.e., 100ms). + + 4 TXtail The next byte is the time to hold + up the TX after the FCS has been + sent, in 10 ms units. This command + is obsolete, and is included here + only for compatibility with some + existing implementations. + + 5 FullDuplex The next byte is 0 for half duplex, + nonzero for full duplex. + The default is 0 + (i.e., half duplex). + + 6 SetHardware Specific for each TNC. In the + TNC-1, this command sets the + modem speed. Other implementations + may use this function for other + hardware-specific functions. + + FF Return Exit KISS and return control to a + higher-level program. This is useful + only when KISS is incorporated + into the TNC along with other + applications. + + + The following types are defined in frames to the host: + + Type Function Comments + + 0 Data frame Rest of frame is data from + the HDLC channel. + + + No other types are defined; in particular, there is no pro- + vision for acknowledging data or command frames sent to the TNC. + KISS implementations must ignore any unsupported command types. + All KISS implementations must implement commands 0,1,2,3 and 5; + the others are optional. + + 5. Buffer and Packet Size Limits + + One of the things that makes the KISS TNC simple is the + deliberate lack of TNC/host flow control. The host computers run + a higher level protocol (typically TCP, but AX.25 in the con- + nected mode also qualifies) that handles flow control on an + end-to-end basis. Ideally, the TNC would always have more + buffer memory than the sum of all the flow control windows of + all of the logical connections using it at that moment. This + would allow for the worst case (i.e., all users sending simul- + taneously). In practice, however, many (if not most) user con- + nections are idle for long periods of time, so buffer memory may + be safely "overbooked". When the occasional "bump" occurs, the + TNC must drop the packet gracefully, i.e., ignore it without + crashing or losing packets already queued. The higher level + protocol is expected to recover by "backing off" and + + + + July 14, 1990 + + + + + + + + + retransmitting the packet at a later time, just as it does when- + ever a packet is lost in the network for any other reason. As + long as this occurs infrequently, the performance degradation is + slight; therefore the TNC should provide as much packet buffer- + ing as possible, limited only by available RAM. + + Individual packets at least 1024 bytes long should be + allowed. As with buffer queues, it is recommended that no + artificial limits be placed on packet size. For example, the + K3MC code running on a TNC-2 with 32K of RAM can send and + receive 30K byte packets, although this is admittedly rather + extreme. Large packets reduce protocol overhead on good chan- + nels. They are essential for good performance when operating on + high speed modems such as the new WA4DSY 56 kbps design. + + + 6. Persistence + + The P and SlotTime parameters are used to implement true + p-persistent CSMA. This works as follows: + + Whenever the host queues data for transmission, the TNC + begins monitoring the carrier detect signal from the modem. It + waits indefinitely for this signal to go inactive. When the + channel clears, the TNC generates a random number between 0 and + 1.[2] If this number is less than or equal to the parameter p, + the TNC keys the transmitter, waits .01 * TXDELAY seconds, and + transmits all queued frames. The TNC then unkeys the transmitter + and goes back to the idle state. If the random number is + greater than p, the TNC delays .01 * SlotTime seconds and + repeats the procedure beginning with the sampling of the carrier + detect signal. (If the carrier detect signal has gone active in + the meantime, the TNC again waits for it to clear before con- + tinuing). Note that p = 1 means "transmit as soon as the + channel clears"; in this case the p-persistence algorithm degen- + erates into the 1-persistent CSMA generally used by conventional + AX.25 TNCs. + + p-persistence causes the TNC to wait for an exponentially- + distributed random interval after sensing that the channel has + gone clear before attempting to transmit. With proper tuning of + the parameters p and SlotTime, several stations with traffic + to send are much less likely to collide with each other when + they all see the channel go clear. One transmits first and the + others see it in time to prevent a collision, and the channel + To conform to the literature, here p takes on values between 0 + to 1. However, fractions are difficult to use in a fixed point + microprocessor so the KISS TNC actually works with P values that + are rescaled to the range 0 to 255. To avoid confusion, we + will use lower-case p to mean the former (0-1) and upper-case + P whenever we mean the latter (0-255). + + + + July 14, 1990 + + + + + + + + + remains stable under heavy load. See references [1] through + [13] for details. + + We believe that optimum p and SlotTime values could be + computed automatically. This could be done by noting the chan- + nel occupancy and the length of the frames on the channel. We + are proceeding with a simulation of the p-persistence algorithm + described here that we hope will allow us to construct an + automatic algorithm for p and SlotTime selection. + + We added p-persistence to the KISS TNC because it was a + convenient opportunity to do so. However, it is not inherently + associated with KISS nor with new protocols such as TCP/IP. + Rather, persistence is a channel access protocol that can yield + dramatic performance improvements regardless of the higher level + protocol in use; we urge it be added to every TNC, whether or + not it supports KISS. + + 7. Implementation History + + The original idea for a simplified host/TNC protocol is due + to Brian Lloyd, WB6RQN. Phil Karn, KA9Q, organized the specifi- + cation and submitted an initial version on 6 August 1986. As of + this writing, the following KISS TNC implementations exist: + + + TNC type Author Comments + + TAPR TNC-2 & clones Mike Chepponis, K3MC First implementation, + most widely used. + Exists in both + downloadable and + dedicated ROM. + TAPR TNC-1 & clones Marc Kaufman, WB6ECE Both download and + dedicated ROM. + VADCG TNC Mike Bruski, AJ9X Dedicated ROM. + AEA PK-232 & PK-87 Steve Stuart, N6IA Integrated into + standard AEA firmware + as of 21 Jan 1987. + + The special commands "KISS ON" and "KISS OFF" (!) control entry + into KISS mode. + + Kantronics Mike Huslig Integrated into + standard Kantronics + firmware as of July + 1987. + + + The AEA and Kantronics implementations are noteworthy in + that the KISS functions were written by those vendors and + integrated into their standard TNC firmware. Their TNCs can + operate in either KISS or regular AX.25 mode without ROM + changes. Since the TNC-1 and TNC-2 KISS versions were written + by different authors than the original AX.25 firmware, and + because the original source code for those TNCs was not made + available, running KISS on these TNCs requires the installation + of nonstandard ROMs. Two ROMs are available for the TNC-2. One + contains "dedicated" KISS TNC code; the TNC operates only in the + KISS mode. The "download" version contains standard N2WX + firmware with a bootstrap loader overlay. When the TNC is turned + on or reset, it executes the loader. The loader will accept a + memory image in Intel Hex format, or it can be told to execute + the standard N2WX firmware through the "H"[3] command. The + + + + July 14, 1990 + + + + + + + + + download version is handy for occasional KISS operation, while + the dedicated version is much more convenient for full-time or + demo KISS operation. + + The code for the TNC-1 is also available in both download + and dedicated versions. However, at present the download ROM + contains only a bootstrap; the original ROMs must be put back in + to run the original TNC software. + + 8. Credits + + The combined "Howie + downloader" ROM for the TNC-2 was + contributed by WA7MXZ. This document was carefully typeset by + Bob Hoffman, N3CVL. + + + 9. Bibliography + + + 1. Tanenbaum, Andrew S., "Computer Networks" pp. 288-292. + Prentice-Hall 1981. + + 2. Tobagi, F. A.: "Random Access Techniques for Data Transmis- + sion over Packet Switched Radio Networks," Ph.D. thesis, + Computer Science Department, UCLA, 1974. + + 3. Kleinrock, L., and Tobagi, F.: "Random Access Techniques + for Data Transmission over Packet-Switched Radio Channels," + Proc. NCC, pp. 187-201, 1975. + + 4. Tobagi, F. A., Gerla, M., Peebles, R.W., and Manning, E.G.: + "Modeling and Measurement Techniques in Packet Communica- + tions Networks," Proc. IEEE, vol. 66, pp. 1423-1447, Nov. + 1978. + + 5. Lam, S. S.: "Packet Switching in a Multiaccess Broadcast + Channel", Ph.D. thesis, Computer Science Department, UCLA, + 1974. + + 6. Lam, S. S., and Kleinrock, L.: "Packet Switching in a Mul- + tiaccess Broadcast Channel: Dynamic Control Procedures," + IEEE Trans. Commun., vol COM-23, pp. 891-904, Sept. 1975. + + 7. Lam, S. S.: "A Carrier Sense Multiple Access Protocol for + Local Networks," Comput. Networks, vol 4, pp. 21-32, Feb. + 1980 + + 8. Tobagi, F. A.: "Multiaccess Protocols in Packet Communica- + tions Systems," IEEE Trans. Commun., vol COM-28, pp. 468- + 488, April 1980c. + + + + July 14, 1990 + + + + + + + + + 9. Bertsekas, D., and Gallager, R.: "Data Networks", pp. 274- + 282 Prentice-Hall 1987. + + 10. Kahn, R. E., Gronemeyer, S. A., Burchfiel, J., and Kungel- + man, R. C. "Advances in Packet Radio Technology," Proc. + IEEE. pp. 1468-1496. 1978. + + 11. Takagi, H.: "Analysis of Polling Systems," Cambridge, MA + MIT Press 1986. + + 12. Tobagi, F. A., and Kleinrock, L. "Packet Switching in Radio + Channels: Part II - The Hidden Terminal Problem in CSMA and + Busy-Tone Solution," IEEE Trans. Commun. COM-23 pp. 1417- + 1433. 1975. + + 13. Rivest, R. L.: "Network Control by Bayessian Broadcast," + Report MIT/LCS/TM-285. Cambridge, MA. MIT, Laboratory for + Computer Science. 1985. + + 14. Karn, P. and Lloyd, B.: "Link Level Protocols Revisited," + ARRL Amateur Radio Fifth Computer Networking Conference, + pp. 5.25-5.37, Orlando, 9 March 1986. + + 15. Karn, P., "Why Do We Even Need TNCs Anyway", Gateway, vol. + 3 no. 2, September 5, 1986. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + July 14, 1990 + + diff --git a/src/nos/doc/ka9qbgn/MAILBOX.TXT b/src/nos/doc/ka9qbgn/MAILBOX.TXT new file mode 100644 index 00000000..9e8db157 --- /dev/null +++ b/src/nos/doc/ka9qbgn/MAILBOX.TXT @@ -0,0 +1,792 @@ + + + + + + + NOS mail docs -- G4AMJ/NQ0I and SM0RGV (Rev. 3) + + +1. Introduction + + +This section of the NOS docs deals with the intricacies of +mail forwarding. You should read and understand this +documentation thoroughly before attempting to forward mail +through your NOS box to the AX.25 BBS world, otherwise you +might grossly misconfigure your system and be the unhappy +recipient of flames from BBS sysops. + +This section does NOT deal with the minutae of the mailbox +and its various commands; it assumes that you understand +concepts such as user areas (both public and private) and +how to list and send mail. If you need help with these, +please look elsewhere in the NOS docs. + +Apart from the usual domain.txt and other files necessary +for ordinary functionality of NOS, three files are important +in the mail forwarding process. These are : +/spool/forward.bbs, /alias and /spool/rewrite. The contents +of these will now be addressed individually. + + +2. /spool/forward.bbs + + +This file describes the actions taken by NOS in forwarding +to AX.25 BBSes. The file contains a series of forwarding +records, each record being separated by a line containing +two or more hyphens. The template for a forwarding record +is: + +BBS callsign +Connection route +Connection commands +List of areas to be forwarded +------------ + + +2.1. BBS callsign + + +This is simply the ordinary call of the remote BBS. A +typical (but not random!) entry might be simply the line: + +sm0rgv + +The callsign may be followed, on the same line, by a comma +separated list of valid intervals when forwarding is to take +place. Each valid interval is a four digit number: the first +two digits are the beginning hour of the valid interval, the + + + + + + + + + + - 2 - + + +last two digits are the final hour of the valid interval. +For example, if the first line of a forwarding record looks +like: + +sm0rgv 0006,1414 + +then forwarding to sm0rgv will take place only during hours +numbered 00, 01, 02, 03, 04, 05, 06 and 14. Ticks of the +mbox timer outside of these times will not cause mail to be +forwarded to sm0rgv. The default interval for forwarding is +0023. + + +2.2. Connection route + + +This is the method by which communication is to be +established with the remote BBS. The first token on the line +is the type of protocol to be used. This is one of ax25, +netrom or tcp. Following this is whatever further +information the chosen protocol requires to make the +connection. An example connection route for a simple ax25 +connection on interface ax0 is: + +ax25 ax0 g3dlh + + +2.3. Connection commands + + +Connection commands may, optionally, follow the connection +route. These take the form of a full stop (period), followed +by the command which will be transmitted once the connection +defined in the first line of the connection route is +established. + +For example, suppose that we wish to establish a netrom +connection with sm0rgv-2, through the netrom node #sth67. +Then the connection route and connection command portion of +the record would look like: + +netrom #sth67 + .c sm0rgv-2 [ Please note that the full stop would be placed at + the beginning of the line; I have placed it here + indented by one column simply so that gateways + which handle this message do not complain at + having a line beginning with a full stop; this + convention is followed throughout this documentation] + + +If the station is reached through digipeating, then the +digipeater callsigns should be in the ax25 route to the +destination callsign. That is, if you wish to forward +traffic to w0ljf, using k2na as a digipeater, then you + + + + + + + + + + - 3 - + + +should have the line: + +ax25 route add w0ljf k2na + +in your autoexec file. + + +2.4. List of areas to be forwarded + + +This is a list, one per line, of entries in the /spool/mail +directory which will be forwarded to the remote BBS. An +entry of the form: + +callsign + +will cause the file /spool/mail/callsign.txt to be scanned +for unread messages. Any such messages are sent to the +remote BBS and deleted from the file. + +One can also forward user areas using this mechanism. To do +this, simply place a line containing the name of the area in +the record. So, to forward amsat bulletins to the BBS, one +would have a line: + +amsat + +This will search the /spool/mail/amsat.txt file; any +messages contained therein which have not been forwarded to +the BBS in question will be forwarded. They will NOT be +deleted. The determining factor as to whether or not entries +are deleted is that if the filename is present in the +/spool/areas file, then there is NO deletion, otherwise +there is. + +Please note that ONLY FILES IN /spool/mail are checked. In +particular, the outbound SMTP mail queue is NOT checked. + + +2.5. Changing the recipient address + + +Normally, NOS uses the information in the To: header line to +determine the parameters used by the "S" command during BBS +forwarding. As the To: header is unchanged by all /alias and +/spool/rewrite machinations, the mail will be sent to the +BBS addressed precisely as the originator of the message +typed it. Occasionally, one might want to change this +behaviour. In this case, a line of the form: + +area newaddress + +in the list of areas to be forwarded will replace the +originally typed destination with the string newaddress + + + + + + + + + + - 4 - + + +instead. + + +3. /alias + + +The alias file is used to map LOCAL names to other names, +which may be either local or remote; additionally, from a +single input message, the alias file permits one to produce +multiple output messages. Thus, typical uses for the /alias +file are: converting one local name to another, converting a +local name to a remote name, and exploding a mail message so +that it is passed on to several recipients. + +The format of a record in the alias file is very simple: + +aliasname recipient1 recipient2 recipient3 + or recipient4 ... recipientN + + +There is no separation between records in the /alias file +other than a newline. + +The aliasname is a local username; that is, it does not +contain an "@" symbol. When the alias file is processed, if +the destination of the message matches precisely the +aliasname, then the mail is redirected to ALL of the +alieased recipients. + +Scanning of the /alias file is performed by the SMTP server. +The SMTP timer (which controls the SMTP client) is kicked +whenever the mailbox or SMTP server queues something for +delivery by SMTP. Mail transport within a single NOS system +is performed through the SMTP client/server mechanism. The +result of these facts is that as soon as a piece of mail is +entered to the mailbox, the SMTP client is kicked and +attempts to deliver the mail (which has already been scanned +by the rewrite mechanism - see below). If the mail is local +to the NOS system (i.e. no "@" sign in the address), then +the /alias file will be scanned and the name mappings take +place. + +A few lines in the /alias file might look something like: + +bdale bdale@n3eua +local fred@k0yum bdale@n3eua bill@ai0c.co.usa.na + n5op@n5op jim@k0jtz n0esg@n0esg +g4bki g4bki@gb7bil.2712.gbr.eu + + +The system must know how to deliver traffic to each of the +individual addresses in the style in which they are entered +in the /alias file. If the system does not know how to +deliver one of the new addresses, then it will send it to + + + + + + + + + + - 5 - + + +the SMTP gateway station defined by the 'smtp gateway' +command. + +Note that it is reasonable, and sometimes desireable, to +have alias records of the form: + +area area dest1 dest2 ... + +As the /alias file is scanned only once (see below), this +does not result in an infinite recursion. + + +4. /spool/rewrite + + +The rewrite file is used to perform a one-to-one mapping +between destination addresses as received by NOS and +destination addresses as actually used by NOS. Each record +within the rewrite file comprises a single line, containing +either two or three entries separated by spaces. The first +field is the template field; if a destination address +matches the template, it is replaced by the second field. +The third field, which is optional, is the single letter +"r", which, if present, tells NOS to rescan the rewrite +file, using the new destination address to attempt to match +against the templates. + +A template may contain asterisks. These stand for a match of +any number of characters (including zero). In the second +field, the character "$", followed by a single digit in the +range 1 to 9, represents the string that matched the +respective asterisk in the template. By way of example, +suppose that there is a line in the rewrite file which looks +like: + +*@* $1%$2@g1emm.ampr.org + +Then, any traffic reaching the system through the mailbox or +the SMTP server, but which is supposed to go to a remote +system, will be redirected to go through g1emm.ampr.org. +Suppose that a user logs on, and sends a message to +n0gbe@nq0i. Then the rewrite file attempts to match +"n0gbe@nq0i" against the entry *@*. It matches, and assignes +$1 the value n0gbe, and $2 the value nq0i. The mail file as +written to the disk will no longer be to n0gbe@nq0i, but, +rather, to n0gbe%nq0i@g1emm.ampr.org. [The nomenclature +station1%station2@station3 means the final destination is +station1@station2, and this traffic is to be routed through +the gateway station3.] + +As soon as a template match is found, the conversion is +performed and scanning is stopped, unless the third "r" +field is present, in which case scanning restarts from the +top of the file. + + + + + + + + + + - 6 - + + +N.B. It is a good idea to have a line of the form: + +*@*.ampr.org $1@$2.ampr.org + +at the beginning of your rewrite file. This will cause all +amprnet traffic to be caught early in the rewrite scan, and +no further scanning (and, hence, no unexpected +substitutions) will take place. + + +5. Scanning procedure + + +The two files which are used to determine the disposition of +traffic are scanned under slightly different circumstances. +Note that neither the /alias nor the /spool/rewrite scan +makes any actual changes to the contents of the traffic. In +particular, the To: field remains exactly as it was first +entered into the system. + +There are four possible entry routes for traffic into the +system: SMTP, through the mailbox by a user, through the +mailbox by a BBS, and via an external program (like BM) or +creation of the files manually. NOS determines if a piece of +traffic was entered into the system by a BBS by looking for +a BBS system ID (like the "[NET-H$]" block issued by NOS) on +the incoming connection prior to messages being uploaded. + + +5.1. Traffic received by SMTP server + + +1. The rewrite file is scanned and any changes applied +(unless the traffic was recieved through the local mailbox; +in that case, this step does not occur); +2. If the traffic appears to be local then the alias file is +scanned and any changes or explosions applied. +3. Any copies local to the system are delivered; copies for +remote delivery are placed in the SMTP queue. + + +5.2. Traffic received by mailbox from user + + +1. The rewrite file is scanned and any changes applied; +2. The traffic is passed to the SMTP client. + + +5.3. Traffic received by mailbox from BBS + + +1. The rewrite file is scanned and any changes applied; +2. The traffic is passed to the SMTP client. + + + + + + + + + + + - 7 - + + +5.4. Traffic entered by external mechanism + + +1. No scanning occurs; + +2. The traffic is passed to the SMTP client. + + +6. Headers + + +Appropriate RFC-822 headers are added to all incoming +traffic. Traffic entering through the mailbox recieves a +full complement of RFC-822 headers; traffic coming through +the SMTP server has only a "Received:" header applied. On +forwarding to a BBS, if an item of traffic contains BBS R: +headers, the RFC-822 header is converted to an appropriate +R: line at the time that NOS forwards the message. (This +change only occurs for BBS forwarding; forwarding by SMTP +retains the RFC-822 headers.) + + +7. Bulletin Identifiers (BIDs) + + +The AX.25 BBS system has evolved a reasonably efficient way +of reducing overhead when forwarding bulletins. When a +bulletin is originated on a BBS, it is given a unique +bulletin identifier (BID). This BID should (theoretically) +travel with the bulletin, and should never be changed during +the distribution of the bulletin. Each system keeps track of +all received BIDs. If a forwarding station wishes to forward +a bulletin to a BBS, then the receiving station checks its +local list of known BIDs and informs the transmitting +station if it already posesses the bulletin in question. The +NOS mailbox conforms to this protocol. Received BIDs are +stored in the file /spool/history, and are encoded in the +Message-ID: header line of the message by NOS. Messages +forwarded from areas listed in the /areas file will have +their BID (re)generated from the Message-ID: line. Note that +ALL messages from public areas are forwarded with a BID, +whether or not the message was produced with the "SB" +command. Like other BBSes, NOS will inform a transmitting +station not to transmit a bulletin if it is one that NOS +already has locally; likewise, it understands similar +messages from other stations to which it tries to forward. + +Note that the BID mechanism is not a part of the SMTP world. +If you are forwarding bulletins through SMTP, there is no +mechanism by which the receiving station can reject the +attempted delivery of a bulletin, even if it already exists +on the recipient system. (Note that a possible workaround is +to deliver bulletins to TCP/IP stations using TCP instead of +SMTP. Alternatively, one could use NNTP, as NNTP commands + + + + + + + + + + - 8 - + + +utilise the Message-ID: line, from which the BID is +derived.) The BID is preserved no matter which mechanism is +used to deliver the bulletin. + + +8. Traffic in practice + + +Now, the big question is, how does one set up these various +files to perform intelligent manipulation of mail? A number +of examples follow. Note that, often, there is more than one +way to accomplish an objective. The following are merely +examples (and not necessarily the most efficient method +possible for any given case). The format used will be: + +typed destination -> intended destination + +followed by the necessary entries in the alias (/alias), +rewrite (/spool/rewrite) and forwarding (/spool/forward.bbs) +files. + + +8.1. Using familiar names - SMTP destination + + +bdale -> bdale@n3eua.ampr.org + +alias: +bdale bdale@n3eua.ampr.org + +rewrite: +forward: + + +8.2. Exploding local mail + + +sysops -> nq0i, n5op@n5op.ampr.org + +alias: +sysops nq0i n5op@n5op@ampr.org + +rewrite: +forward: + + +8.3. Using familiar names - BBS forwarding + + +g4bki -> g4bki@gb7bil.2712.gbr.eu, to be forwarded by ai0c + +alias: +rewrite: +forward: + + + + + + + + + + - 9 - + + +ai0c +ax25 ax1 ai0c +g4bki g4bki@gb7bil.2712.gbr.eu +ai0c + + +8.4. Handling incoming bulletins by subject + + +tcpip@* -> nq0i, tcpip, bdale@n3eua.ampr.org, ai0c@ai0c [a BBS] + +alias: +tcpip nq0i tcpip bdale@n3eua.ampr.org ai0c + +rewrite: +tcpip@* tcpip + +forward: +ai0c +ax25 ai0c +ai0c + +Let's walk through the above example. An incoming item comes +in addressed to TCPIP@ALLUS. A scan is made through the +rewrite file, and a match is found. The item is redirected +to tcpip. The alias file is scanned; a total of four copies +of the item exist after this, three in local areas tcpip, +nq0i and ai0c, and one on the SMTP queue (for +bdale@n3eua.ampr.org). When the mailbox timer next ticks, +the mail in the local ai0c area will be forwarded on the ax1 +interface to ai0c. + + +8.5. Routing based on Hierarchical addressing + + +Wyoming -> KE7VS (SMTP) +Nebraska -> AG0N (BBS over the NETROM, NETROM ID WNBBS) +Europe -> W0LJF (BBS over AX.25) + +alias: +rewrite: +*.noam $1.na r +*.us $1.usa.na r +*.usa $1.usa.na r + +*.ne $1.ne.usa.na r +*.wy $1.wy.usa.na r + +*@*.*.wy.usa.na $1%$2.$3.wy.usa.na@ke7vs +*@*.wy.usa.na $1%$2.wy.usa.na@ke7vs + +*.ne.usa.na ag0n + + + + + + + + + + + - 10 - + + +*.eu w0ljf + +forward: +ag0n +netrom ax0 wnbbs +ag0n +---------- +w0ljf +ax25 ax1 w0ljf +w0ljf +---------- + +Why is the example rewrite file apparently so complicated? +This is to handle poorly constructed hierarchical addresses +in a reasonable way. A full U.S. hierarchical address has +the form: callsign@BBS.#localid.state.usa.na. Many states +have no #localid field. In the example rewrite file above, +the first three lines convert non-standard, but frequently +used, U.S. designators to the more standard format. It is +common for users not to use a full hierarchical address if +the destination is relatively local. For eample, a user +might easily use only .wy instead of the full .wy.usa.na if +he is geographically close to Wyoming. The second grouping +of two lines handles this problem. Note the third, "r", +field in all the entries so far. + +The remainder of the file handles properly formatted +hierarchical addresses. The two Wyoming entries handle the +cases with and without a #localid field. Differentiation +between these cases is not necessary for BBS forwarding. + + +8.6. General bulletin handling + + +The details of bulletin handling will vary somewhat from +place to place, as there are several distinct styles of +bulletin handling currently in use in the AX.25 BBS world. +In general, it is necessary to arrange one's system so that +it accepts bulletins from BBSes, forwards them to one or +more stations, and also handles intelligently bulletins +input by users into NOS. + +Suppose that we sish to handle bulletins @JUNK. We are to +deposit them locally in the junk area, and also forward to +BBS g4bki. We also know that we generally receive @JUNK +bulletins from g4amj, a local BBS which handles much +bulletin traffic. + + +alias: +rewrite: +*@junk junk + + + + + + + + + + + - 11 - + + +forward: +g4bki +ax25 ax1 g4bki +g4bki +junk +---------- +g4amj +ax25 ax1 g4amj +g4amj +junk +---------- + +All incoming @JUNK traffic is written to the junk area +(which should be an explicit entry in the /spool/areas +file). Each tick of the mailbox timer, NOS scans the junk +area for traffic not forwarded to g4bki or g4amj and +attempts to deliver unforwarded bulletins. Usually, g4amj +will respond with a "Have it" message and the bulletin will +not be forwarded. Any bulletins @JUNK deposited locally by +users will automatically be sent to both g4bki and g4amj. + + +9. Questions and Answers + + +Q. Under what circumstances does NOS request reverse +forwarding from a BBS? + +A. NOS requests a reverse forward after completing any +forwards of its own to the BBS. If no traffic was queued for +a given BBS, then no connection is attempted, so no reverse +forward request is issued. + + +Q. What kinds of message types does the NOS mbox support? + +A. Basically, NOS supports all two letter commands starting +with an "S". If the mailbox has not received an SID banner +(the "[NET-H$]") from a connected station, then an SF +command will send a followup to the address specified on the +command line. The SR command will send a reply to the +current message. One can also issue the command "SR +", where is the number of the message to +which you want to generate a reply. All other variations +cause an X-BBS-Msg-Type: header to be added to the message. +When a message with such a line is forwarded to a BBS, it is +sent to the BBS with the appropriate message type as the +second letter in the "S" command to the BBS. + +If NOS has received a valid SID, then ALL S commands are +handled by the X-BBS-Msg-Type: mechanism outlined above. + + + + + + + + + + + + + - 12 - + + +10. Logic map of the mailbox + + +============== AX.25 === NET/ROM === Ethernet === Loopback ================= + | | | | + | | | | ++--------------+ +--------------+ +--------------+ +--------------+ +| | | | | | | | +| Mailbox | | SMTP client | | SMTP server | | BBS Forward | +| | | | | | | | ++--------------+ +--------------+ +--------------+ +--------------+ + | ^ | ^ + | | | | + v | v | ++--------------+ +--------------+ +--------------+ +--------------+ +| | | | | | | | +| Add RFC822 | | Use MX or A | | Add Received | | Add own R: | +| header suite | | type records | | line | +>| line | +| | | | | | | | | ++--------------+ +--------------+ +--------------+ | +--------------+ + | ^ | | ^ + | | | | | + v | v | | ++--------------+ +--------------+ +--------------+ | +--------------+ +| | | | | | | | | +| Get Rewrite | | Use optional | | Apply Rewrite| | | Strip RFC822 | +| file address | | SMTP gateway | | file address | | | header suite | +| | | | | | | | | ++--------------+ +--------------+ +--------------+ | +--------------+ + | ^ | | ^ + | | | | | Yes + v | v | | ++--------------+ | +--------------+ | +--------------+ +| | No | | | | | | +| Local addr? |-------+ | | Alias file | +-| Any R: lines?| +| | | | | | No | | ++--------------+ | | +--------------+ +--------------+ + | | | | | | ^ + | Yes | | | | | | + v | | v v v | ++--------------+ v | +--------------+ +--------------+ +| | +--------------+ | | | | +| Apply Rewrite| | | No | Local |Yes | /spool/mail/ | +| file address |--->| SMTP queue |<---| address? |--->| directory | +| | | | | | | | ++--------------+ +--------------+ +--------------+ +--------------+ + + + + + + + + + + + + + + diff --git a/src/nos/doc/ka9qbgn/NEWUSER.TXT b/src/nos/doc/ka9qbgn/NEWUSER.TXT new file mode 100644 index 00000000..413d9e27 --- /dev/null +++ b/src/nos/doc/ka9qbgn/NEWUSER.TXT @@ -0,0 +1,2875 @@ + + + + +1. Introduction + + TCP/IP is the common name for a set of protocols developed to allow +cooperating computers to share resources across a network. A protocol is +simply a set of conventions or rules which must be adhered to by the +communicating computers on a network to ensure that the information being +exchanged is received and interpreted correctly. In the amateur radio +software implementation of TCP/IP networking, the command set of the TNC is +replaced with a very basic set of commands and the protocols run in the user's +computer. This opens up the real power of computer-to-computer networking via +packet radio. + + TCP/IP provides multiple connections (sessions), ASCII (text) and binary +(executable programs and encoded text) file transfer, electronic mail, and +keyboard-to-keyboard services. It was originally designed for the Department +of Defense to connect unlike mainframe computers in the military, government, +research institutions, private industry, and universities so that all could +share resources on a common network. TCP/IP was originally designed so that +it could be used with packet radio networks and it has since been modified so +that it is both usable on amateur radio networks and complies with FCC rules +on amateur radio digital transmissions. + + While there are many commands in a TCP/IP software package, it is still +easy to use. The user first sends a few software commands to the TNC to +substitute its limited command set with an even simpler command set (called +"KISS," for "keep it simple stupid") and transfers control to the TCP/IP +software in the user's computer. The user can then engage in TCP/IP +communications, or, since the software package has the capability of +communicating in normal AX.25 packet, the user can operate with AX.25 packet +bulletin boards, keyboard connects, digipeaters, or NET/ROM nodes. + + TCP/IP has several advantages over normal AX.25 packet. At its lower +levels, its strategies for retransmission of packets, exponential backoff in +the face of channel congestion, handling of lost and duplicated packets, and +packetization of data to be transmitted often lead to better overall channel +throughput. It is designed to be a multi-connect, store-and-forward system. +With TCP/IP, your local switch (similar to a node on AX.25) will hold your +mail, check every so often to see if your system is active and when it sees +you on the air, will send your mail to a sub-directory on your computer's disk +drive. Mail can also be forwarded from an AX.25 PBBS. There is never a +"station busy" reply on TCP/IP, since the software provides for multiple +sessions, with the switch passing out mail to connected stations much like a +dealer dealer cards, while handling a file transfer at the same time. There +is even a method to give emergency traffic a higher priority in the queue. + + The most accurate name for the set of protocols we are describing is the +"Internet protocol suite." This is a layered family of protocols. TCP +(transmission control protocol) and IP (internet protocol) are two of the lower +level protocols. While the end-user of the suite does not often interact with +the TCP or IP protocols, they are the best known of the protocols, and it has +become common to use the term TCP/IP to refer to the whole family. It is +probably not worth fighting this habit. + + This document is a beginner's guide to use of the KA9Q Internet Software +Package on the amateur radio packet network (AMPRNET). The KA9Q package is the + + + - 2 - + + +result of several years of development by Phil Karn, KA9Q, and his "merry band +of implementors." The "TCP group" has grown to include hundreds of individuals +worldwide, many of whom have contributed ideas to this software. The software +resulting from this collaboration is extremely versatile. It was written for +the IBM PC and clones, but has been ported to the Apple Macintosh, Atari ST, +Commodore Amiga, and to several versions of UNIX machines. It has drivers for +several hardware interfaces, allowing communication on wire networks as well as +packet radio networks. + + The KA9Q Internet Package, in particular the program NET, provides the +following services: + +telnet The telnet protocol, as implemented in the KA9Q software, allows + users to communicate by a keyboard connection. The end result is + the same as doing an AX.25 connection in most cases, but you + take advantage of the attributes of TCP/IP. + +mail The simple mail transfer protocol (SMTP) provides services for + sending and receiving mail. The sending, receiving, and + forwarding computers can run unattended during this transfer, so + it is not necessary to log into a PBBS to pick up your mail. A + separate program, Bdale's Mailer (BM), first written by Bdale + Garbee, N3EUA, is available to compose and read mail messages. + It is also documented in this guide. + +file transfer The file transfer protocol (FTP) allows a user on any computer + to get files from another computer, or to send files to another + computer. Security is handled by requiring the user to specify + a user name and password for the other computer. + +ax25 services Regular AX.25 services are also provided, so that NET can be + used for all of your packet radio activities. You can connect + to a friend who is not running TCP/IP and conduct a keyboard + chat. In addition, NET provides an AX.25 mailbox, allowing + your friends to send you mail and to initiate a keyboard chat. + +NET/ROM NET also allows your packet system to serve as a NET/ROM node, + although this will not be documented in this guide. + + An advantage to the TCP/IP protocols and software is that the routing of +packets through several systems to the eventual destination is simpler for the +user than that required in AX.25 or NET/ROM forwarding. You do not need to +know the full route to the destination. Rather, you set up a routing table to +the stations that you can communicate with directly. If all other systems set +up accurate routing tables, your packets will be forwarded properly to the +desired destination. + + There are many other TCP/IP services that may be made available for use on +packet radio in the future. The routing tables can be set up and kept up-to- +date automatically, without requiring the user to edit the table. When multi- +tasking computers become commonplace hobbyist machines, you will be able to +remotely login to these systems to execute programs on them. Network file +systems may become available, so that you can store your files on a remote disk +and access them through the packet radio network. Most of these potential + + + + + + + + + + - 3 - + + +services will require higher baud rate networks, as a 1200 baud radio link is +just too slow to support them. + +1.1. Objectives of This Guide + + The objectives of this guide are intentionally limited. The guide is +intended to encourage more hams to use the KA9Q NET software on the amateur +packet radio network (AMPRNET) and thus, it is aimed at beginners. It +provides information on installing and using version 890421.1 of NET and +version 3.3.1 of BM on an IBM PC or clone, with a serial interface to a TNC +running the KISS (Keep It Simple, Stupid) firmware. + + Installation and use of the software on other machines is similar to that +on the PC, but no attempt has been made in this guide to deal with the software +on these other machines. + + This guide only documents the subset of the NET commands that are of most +use to a beginning end-user of the software and the packet network. Short +descriptions of all of the top-level NET commands are given in Appendix B. +Further details are available in the manual "The KA9Q Internet Software +Package," updated for the 890421.1 revision, dated May 8, 1989, by Bdale +Garbee, N3EUA. This manual is often available on-line on the packet radio +network as userman.doc, or in a compressed form, such as userman.arc or +userman.zip. It should be consulted for details which are beyond the scope of +this guide. + +1.2. Acknowledgements + + Much of the material in this guide was taken from "The KA9Q Internet +Software Package," with permission from the author, Bdale Garbee. Thanks go to +Shayne Hughes, N6SPE, who helped me with the "software archeology," as we read +the source code and experimented with the programs to find out how they worked. +Thanks also go to Jim Pearce, N6ESV, and Chuck Bland, N6DBT, who provided many +useful comments on the manuscript. + + I would appreciate receiving any comments you have about this guide. I +can be contacted at the following addresses: + + AX.25 PBBS: N6GF@WA6NWE.#NOCAL.CA + Internet: ford@iris.ucdavis.edu + U.S. Mail: 226 Diablo Ave., Davis, CA 95616 + + +2. Necessary Resources + + The purpose of this section of the guide is to describe the necessary +resources you must have available to be able to set up an amateur packet radio +system running TCP/IP. The hardware requirements of TCP/IP are nearly the same +as any AX.25 packet station, although this guide assumes that the host computer +is a PC or clone. + +2.1. Computer + + The computer required to run the version of NET described in this guide +is an IBM PC or clone running the MS-DOS or PC-DOS operating system (to be +referred + + + + + - 4 - + + +to simply as DOS for the remainder of this guide). The PC can range from the +original PC (8086) to the XT, AT (286), 386, or 486 machines. This computer +must have at least one serial port and a floppy disk drive. A hard disk is +preferred, but is not absolutely necessary. + + It is assumed that the reader of this guide is familiar with the basics +of DOS. You should be able to set up directories, manage files, and have +available and know how to use a text editor. + +2.2. TNC + + The TNC (terminal node controller) used for TCP/IP must run the KISS +firmware. This includes the TAPR TNC-1, TNC-2 and clones produced by several +manufacturers, equipped with a ROM running KISS. For the TNC-2 or clones, +version 1.1.6 of the firmware, or later, is required. Most of the more recent +TNCs also run the KISS firmware. + + Attach your TNC to your PC serial port using an RS-232C cable, following +your TNC manufacturer's instructions. Set the baud rate between the computer +and the TNC as recommended in the TNC instructions. Verify that the TNC works +properly in the AX.25 mode, again following the TNC instructions, and then +enter the commands to run KISS. + + For the TNC-2 and clones, at the "cmd:" prompt, first type "KISS ON" and +you will receive the message "KISS WAS OFF" and another "cmd:" prompt. Type +"RESTART" and you should note that the CON and STA LEDs will flash three times +to indicate you have entered the KISS mode. This command set will then have +effect for subsequent power on/off cycles. To return to normal operation, +enter the command "param ax0 255" at the "net>" prompt when you are running +the KA9Q TCP/IP software package. + + For Kantronics TNCs, typing "KISSMODE ON" while in command mode, followed +by "RESET," will put the TNC in KISS mode. Turning the TNC off and then on +will cause the TNC to return to command mode. If you first turn KISSMODE ON +and then PERM the value in EEPROM, when the TNC is turned on, it will +automatically be in KISS mode. + + For other TNCs, follow the manufacturers instructions to enter the KISS +mode. + +2.3. Radio + + The majority of the TCP/IP packet operations are on 2 meters, so you will +need a 2m FM transceiver. The radio requirements for TCP/IP are the same as +those for AX.25 packet. Follow the directions in your TNC manual to interface +the transceiver to the TNC. + + In most areas, TCP/IP packet operations are found in the frequency ranges +144.91-145.09 MHz and 145.71-145.79 MHz. You will have to ask around to find +out what frequency is being used in your area. One way to find the TCP/IP +operation is to operate your TNC in the AX.25 mode and monitor the frequencies +with "MONITOR ON." The TCP/IP frequency is the one that causes the most +"garbage" to be displayed on your screen, although NET/ROM nodes also cause +this problem as well. The reason for this is that AX.25 TNCs do not decode +the + + + + + + - 5 - + + +TCP/IP or NET/ROM control information. + +2.4. IP Address + + IP addresses are 32 bit numbers that uniquely identify a given machine +(or "host") running the TCP/IP protocol suite. All of the possible 32 bit +numbers are coordinated by an entity known as the Network Information Center, +or NIC. Amateur Radio operators are fortunate in that a "Class A Subnet" +consisting of 24 bits of address, in the range 44.X.X.X, has been reserved for +our use. By general consensus, Brian Kantor, WB6CYT, of San Diego, CA, now +serves as the top level administrator of the 44.X.X.X address space, and +assigns blocks of addresses to regional coordinators from around the world. + + You need to have a unique address before you can link in with the rest of +the networked world. The best way to get one is to ask around the local packet +community and find out who your local address coordinator is. Your local +coordinator will then assign you an address from the block for your area. + + If you have not yet obtained your IP address and want to get on the air +immediately, you may temporarily use [44.128.0.*], with '*' replaced by a +number between 1 and 255. Try to be sure that no one else in your area is +using the same number. + + Brian Kantor can be reached as brian@ucsd.edu on the Internet if you have +access to this wire network and need help locating your local address +coordinator. + +2.5. KA9Q Software + + The KA9Q TCP/IP program NET and the mailer BM are likely to found to be +available in your local area. You should inquire about availability on your +local packet BBS. This would not only provide you with the software, but also +contact with someone who has used the software and could help you with its +installation and use. Further, since the source code to these programs is +available, many local versions are available and it is often to your advantage +to use these local versions. + + If you fail to locate the software locally, the Tucson Amateur Packet +Radio association (TAPR) now provides floppy copies of the software on 360K PC +floppies, and can provide KISS ROMs for various TNC's, at a nominal charge for +duplication and shipping. Contact TAPR for more information. + + TAPR + PO Box 12925 + Tucson, AZ 85732 + (602) 749-9479 + + + The programs NET and BM must be installed and configured on your +computer. The easiest way to deal with this is to edit the sample +configuration files that are included in most distributions of the software. +Local distributions also include configuration information appropriate for +your local network, so it is to your advantage to acquire the software +locally. If your distribution does not include the sample files, detailed +information on installation and + + + + + - 6 - + + +configuration is given in Appendix A of this guide. The information in this +appendix can also be used to understand the commands given in the sample files. + + A new version of the KA9Q Internet Package is now under development. It +is called "NOS" and is a major rewrite of the NET program. When an official +release of this software is made, it is likely that most packet systems will +convert to the new software. + +3. Definitions, Conventions, and Notation + + In this section, some terms used in TCP/IP networking are defined and the +conventions and notation used in the guide are explained. + + Each system on the amateur packet radio network is referred to as a +"node" or "host," terms that are derived from wire networks. Since each +TCP/IP node includes a computer, the term "machine" is also used +interchangeably with "node" and "host." As a user, you employ a "local host" +and you communicate with a "remote host." The local host requests services +from the remote host, and as a result, the remote host is known as a "server" +and the local host is a "client." Actually, servers are provided for each of +the supported protocols. + + Some hosts are set up not for use by an end user, but rather to forward +other packets, similar to the function of an AX.25 digipeater, and to serve as +a file repository. These systems are generally operated 24 hours a day and +are known as "switches" or "gateways." Some of these systems are set up to +serve as mail gateways to and from AX.25 PBBS systems. Note, however, that +end user hosts can also be used to forward TCP/IP packets. + + Each host on the AMPRNET must be identified by an IP address, a 32 bit +number that uniquely identifies a given machine. Hosts are also known by a +symbolic name which is linked to the IP address in the configuration file, +HOSTS.NET. + +3.1. Conventions Used in this Guide + + The conventions used in this guide are described below. The intent was +to produce this guide in the form of a simple ASCII (plain text) file that +could be distributed through the AMPRNET. Thus, it was not possible to use +bold or italic fonts, changes in point size, or underlining to clarify +meaning. + +parameter Literal argument. A character string such as "parameter," with + no surrounding brackets, is a required portion of a command and + is to be typed exactly as shown. + + Variable argument. A command argument enclosed by arrow + brackets, such as "," is a variable. An appropriate + value for the variable must be used in the command. Appropriate + values to be substituted are described as needed in this guide. + +[parameter] Optional argument. A command argument enclosed by square + brackets, such as "[parameter]," is an optional argument. The + effect of including, or not including, this argument in a + command is described in this guide. + + + + + + - 7 - + + +[] Optional variable argument. A command argument enclosed by + first by arrow brackets and then by square brackets, such as + "[]," is an optional variable argument. + +| "OR" operator. Command arguments separated by "|" mean that + either one or the other argument is to be used. For example, + "|clear" means that you are to either enter the variable + or the literal argument "clear." + +3.2. Notation Used in this Guide + + The following is the notation to be used in describing the commands in +this guide. + + The numeric IP address of a host in dotted decimal notation + enclosed by brackets, e.g. [44.2.0.100]. + + The symbolic name of a host. + + Denotes a host, switch, or gateway, which may be specified either + as a symbolic name (), or as a numeric IP address + (). The mappings between IP addresses and symbolic names + are defined in the file "HOSTS.NET" described in section A.4 of + Appendix A. + + An amateur callsign, either in upper or lower case. + + The name of an existing directory on the host computer. Directory + references can either be relative to the current directory, or + absolute, beginning at the root (\). To refer to the parent + directory, ".." can be used. + + The name of a file, e.g. HOSTS.NET. + + An integer number. + + A carriage return, usually marked "Return" on most keyboards. + Note that all commands given in this guide must be followed by a + carriage return, although the notation will not be used in + this case. is only used when the "command" needed is a + carriage return on an otherwise empty line. + + The command key labeled "F10" or "f10" at the top or left side of + the keyboard. + +4. NET + + The program that implements the Internet protocols is NET.EXE. In this +section, information on executing NET, its command and converse modes, +escaping back to DOS, NET utility commands, managing multiple sessions and +exiting NET are provided. Information on the major NET commands is given in +later sections. + + + + + + + - 8 - + + +4.1. Executing NET + + NET is usually invoked by simply typing the following at a DOS prompt: + + net + +If the software has been installed correctly, NET attempts to open the +configuration file "AUTOEXEC.NET" in the root directory of the current drive. +This file is described in section A.3 of Appendix A. You should then be +presented with a banner including revision information and a copyright +statement, followed by a prompt of "net>." If you don't get this, something is +wrong. Check your installation to see if you missed something. If you still +have troubles, find a NET user and ask for help. + + NET can also be invoked by typing: + + net + +NET will first attempt to open as an alternate configuration file, which +is read instead of AUTOEXEC.NET. + +4.2. Command and Converse Modes + + The program may be in one of two modes: command mode or converse mode. +In command mode, the prompt "net>" is displayed and any of the NET commands +described in this guide may be entered. In converse mode, keyboard input is +processed according to the "current session," which may be either a telnet, +ftp, or AX.25 connection. In a telnet or AX.25 session, keyboard input is +sent to the remote host and any output from the remote host is displayed on +the console. In an ftp session, only ftp converse mode commands may be +entered. In these sessions, the user remains in converse mode until either +the session is terminated (described in the sections of this guide dealing +with telnet, ftp, or AX.25) or by escaping back to command mode, as described +below. + + The user may escape back to command mode from converse mode by pressing +. The command mode prompt "net>" will be displayed and any of the NET +commands may be entered. The session that the user "escaped" from will remain +active. By entering at a "net>" prompt, the user will return to converse +mode in the "current session." Multiple sessions can be handled by NET. For +more information on multiple sessions, see section 4.5 below. + +4.3. Executing DOS Commands + + While running NET, you may need to execute some DOS commands or to run a +program such as BM. This can be done by suspending NET execution and then +returning to NET when you are finished. To suspend NET, enter at a "net>" +prompt: + + ! + +You will be returned to your DOS prompt and you can execute any DOS command. +Note that this will suspend all NET sessions. To return to NET, enter at an +DOS prompt: + + + + + + + - 9 - + + + + exit + +You will be returned to the "net>" prompt. + + Note that the command "shell" is the same as the "!" command. + +4.4. Utility Commands + + NET provides several utility commands to provide help information, manage +directories, and to start and stop the servers. These commands are useful in a +variety of sessions. + +4.4.1. help + + Displays a list of the main NET commands. The command "?" is equivalent +to "help." Note that several commands are listed that are not described in +this guide. Concise descriptions of the commands listed by help are given in +Appendix B. + +4.4.2. pwd + + Displays the name of the current directory on the local machine. + +4.4.3. cd + + Changes the current directory to , which must be an existing +directory on the local machine. The directory specified can be relative to the +current directory, or absolute, with the name beginning at the root (\). + +4.4.4. dir [] + + List the contents of the specified directory on the console. If no +argument is given, the current directory is listed. + +4.4.5. start + + Starts the specified Internet server, allowing remote connection +requests. Servers include: finger, ftp, remote, smtp, and telnet. Normally +these servers are started in the AUTOEXEC.NET file. However, you may not want +to start all of the servers automatically. For example, you may not want to +start telnet until you know you will be available at the keyboard to respond. +You can then enter "start telnet" from the "net>" prompt to activate the +telnet server. + +4.4.6. stop + + Stops the specified Internet server, rejecting any further remote connect +requests. Existing connections are allowed to complete normally. For example, +you could enter "stop telnet" if you expect to be unavailable to respond to a +telnet request. Then, when anyone tries to telnet to you, they will get the +message "Closed (Reset)." This is not the most informative message, but +possibly better than waiting endlessly to see if you will respond to the telnet +request. + + + + + + - 10 - + + +4.5. Managing Multiple Sessions + + The NET program can handle multiple sessions. For example, you can have +an ftp file transfer running at the same time as a telnet session. However, +you should limit your use of multiple sessions on a 1200 baud radio channel, +as you will cause considerable congestion. + + To start a second session, escape from the first session to the "net>" +prompt by pressing . Start the second session as you would normally (as +described in the sections of this guide dealing with telnet, ftp, or AX.25). + + To monitor the multiple sessions, use the "session" command from the +"net>" prompt. The syntax for this command is: + + session [] + + + Without arguments, "session" displays a list of current sessions, +including session number, remote TCP or AX.25 address and the address of the +TCP or AX.25 control block. An asterisk (*) is shown next to the "current" +session; entering at this point will put you in converse mode with that +session. Entering a session number as an argument to the session command will +put you in converse mode with that session. If the telnet server is enabled, +the user is notified of an incoming request and a session number is +automatically assigned. The user may then select the session normally to +converse with the remote user as though the session had been locally +initiated. An example of a session list: + + # &CB Type Rcv-Q State Remote socket + 0 8ac14 FTP 69 Established eyolo:ftp +*1 8b3d4 AX25 0 Connected n6spe-1 + + +4.6. Abbreviating NET Command Names + + Many of the NET command names can be abbreviated. However, the valid +abbreviations have not been documented. Further, there are some cases where +the abbreviated (or lengthened) name will appear to be accepted as a valid +command name, but the command will not execute properly. Thus, it will be +left to the user to experiment with the abbreviations. It is recommended that +you use the command names given in this guide, as they have been tested and +found to work as described. + +4.7. Exiting NET + + Before you exit NET, you should check to see if you have any sessions +active. This is done with the "tcp status" command, described in section +10.1.1. + + When you are sure you want to exit the NET program and return to DOS, +enter at a "net>" prompt: + + exit + + + + + + + - 11 - + + +5. Telnet + + The telnet command allows you to initiate a keyboard connection using the +telnet protocol. The end result is the same as doing an AX.25 connect in most +cases, but you'll be taking advantage of the attributes of the TCP/IP +protocols, as described in the introduction. + +5.1. Initiating a Telnet Session + + The command to initiate a telnet session with the specified host and enter +telnet converse mode is: + + telnet + +For example: + + telnet n3eua (talk to N3EUA, address in HOSTS.NET) + telnet [44.32.0.4] (use the numeric address directly) + + + If the connection is made, you can type back and forth just as if you +were connected with a normal TNC. When you're done, use the key to +escape back to command mode, and then type 'close' to close the connection, as +described in section 5.4 below. + +5.2. Accepting a Telnet Session + + If a remote host requests a telnet session, a message similar to the +following will be displayed on your console: + + Incoming Telnet session 0 from 44.2.0.96:1026 + +If you are in command mode, enter at a "net>" prompt and you will enter +converse mode for the telnet session. If you are in converse mode, use the + key to escape back to command mode, use the "session" command to list +the active sessions, and then use the "session " command to enter +converse mode on the desired telnet session. + +5.3. File Upload and Download + + The telnet session can be recorded to a file, or an ASCII file can be +uploaded instead of entering the information at the keyboard. + +5.3.1. record |off + + Opens and appends to it all data received or sent on the current +telnet session. If you are in telnet converse mode and want to initiate +recording, you will need to use the key to escape back to command mode +to issue the record command. The message "Recording into " will be +displayed and another "net>" prompt will be issued. Enter on a blank +line and you will return to the telnet converse mode with recording activated. +The command "record off" stops recording and closes the file. + + + + + + + - 12 - + + +5.3.2. upload + + Opens (must be an ASCII, file, not a binary file) and sends it on +the current telnet session as though it were typed on the terminal. If you +are in telnet converse mode and want to initiate uploading, you will need to +use the key to escape back to command mode to issue the upload command. +The uploading is initiated, but the file contents are not displayed on the +screen during the uploading. When the uploading is complete, the message +"Uploading off" is displayed. Enter on a blank line at the "net>" prompt +and you will return to the telnet converse mode. + +5.4. Closing a Telnet Session + + To close a telnet session, the following command is used: + + close [] + + + If you are in telnet converse mode, you will have to press to +escape to the "net>" prompt to issue this command. If you are running only +one session, entering close without arguments will close the session. If you +have multiple sessions, entering close without arguments will initiate a close +on the current session. If you are running multiple sessions, the "session" +command will display a list of these sessions. Entering close with a session +number argument will initiate a close on the specified session. Only one of +the hosts involved in the telnet session needs to initiate the close. +"Disconnect" is functionally the same command as "close." + +6. Mail + + One of the most useful features of TCP/IP is electronic mail. Mail can +be delivered to your unattended machine and you can read it at your leisure. +There is no need to log into a PBBS to pick up your messages. Your messages +can also be temporarily stored on your local switch and be delivered to your +machine when you run NET. + + Mail messages are composed and read and the mailbox is managed with the +program BM. NET, using the protocol SMTP (simple mail transport protocol) +sends and receives the mail. This section concentrates primarily on BM, but a +few comments on SMTP are given in subsection 6.5. + + The BM.EXE mail user interface program was created by Bdale Garbee, N3EUA, +and despite popular belief, "BM" really stands for "Bdale's Mailer." It was +later extended by Gerard van der Grinten, PA0GRI, and Dave Trulli, NN2Z. + +6.1. Executing BM + + BM must be executed from a DOS prompt. If you are currently running NET, +you will have to escape to a DOS subshell by entering "!" or "shell." You will +be returned to your DOS prompt and you can execute BM. Note that this will +suspend all NET sessions. When you are finished with BM, to return to NET, +enter "exit" at a DOS prompt and you will be returned to the "net>" prompt. + + BM is normally invoked by simply typing the following from a DOS prompt: + + + + - 13 - + + + bm + +BM will first read the mail configuration file, BM.RC, described in section A.5 +of Appendix A, and then will read the default mailbox defined in this +configuration file. Using the BM main menu commands described in section 6.2, +you can then compose or read mail messages or manage your mailbox. + + BM may also be invoked in two other ways. The first is: + + bm -u | -f + +With the argument "-u ," you can specify which mailbox to read, +overriding the default from BM.RC. With the argument "-f ," BM will +read the messages from instead of a mailbox. This is useful if you +have saved previously received messages to a file, using the "s" command +described in section 6.2.6. + + When you invoke BM, a banner will be displayed, followed by two lines of +copyright information and then the mail header information, as described in +section 6.2.1 below. Finally, there is a line reminding you to "Type ? for +help" and then a prompt, consisting of your user name in quotes followed by an +arrow (>). + + If you are only interested in composing a mail message, you can invoke BM +as: + + bm .. .. + +The arguments to are the mail addresses of your desired +recipients. Information on mail addresses is given in section 6.4. You will +be prompted to give a message subject and then to enter your message. When +you have finished composing your message, you will be returned to your DOS +prompt. + +6.2. BM Main Menu Commands + + All BM main menu commands are single letters followed by optional +arguments. + + A is a space-delimited list of message numbers, for example: + + 1 3 4 5 + +The message numbers are given in the message headers. + +6.2.1. h + + Display message headers. The message headers contain the message number, +the status indicating whether it has been read or deleted, the sender, size, +date, and subject. For example: + +Mailbox \spool\mail\n6gf.txt - 3 messages, 1 new + + DY 1 n6dbt@n6dbt 02 Apr 16:31 666 Friday Night Pat Sajak + Y 2 N6SPE@n6spe.ampr.org 02 Apr 17:40 576 Re: eyolo + + + + - 14 - + + +> N 3 N6SPE@n6spe.ampr.org 02 Apr 17:42 942 Re: NET log + +In the first line above, "D" indicates that the message has been marked for +deletion and "Y" indicates that it has been read. The message number is 1, the +sender is n6dbt@n6dbt, it was sent on April 2 at 16:31, is 666 characters long +and the subject is "Friday Night Pat Sajak." In the third line above, ">" +indicates that this is the current message and "N" means that it has not yet +been read. + +6.2.2. ? + + Display a help menu for BM commands. + +6.2.3. [] + + Entering a message number from the header listing will cause the message +text to be displayed. If a carriage return is entered on a blank line, the +current message will be displayed. + +6.2.4. d [] + + Mark messages for deletion. With no argument, the current message +(indicated by ">" in the first column of the message header) is marked for +deletion. Messages marked for deletion are removed when exiting BM via the 'q' +command, when changing to an alternate mailbox with the 'n' command, or when +updating with the '$' command. + +6.2.5. u [] + + Undelete a message that is marked for deletion. The status of a message +can be determined by looking at the status field of the message using the 'h' +command. + +6.2.6. s [] [] + + The 's' command is used to save messages in a file. If no file name is +given the default from the mbox variable in BM.RC is used. If no message +number is supplied then the current message is saved. If does not +exist, it will be created. If does exist, the messages will be +appended to this file. The messages are stored in the same format as a +mailbox file with all mail headers left intact. This file can later be read +into BM by invoking BM with the "-f " argument. + +6.2.7. w [] + + The "w" command is used to save messages in a file. Only the message body +is saved. All mail headers are removed. If no message number is supplied then +the current message is saved. + +6.2.8. p [] + + The "p" command is used to send messages to the printer. This command +uses the DOS device PRN for output. If no message number is supplied then the +current message is printed. + + + + + - 15 - + + +6.2.9. m [] + + The "m" command is used to compose a message to be mailed to the list of +recipients, specified by mail addresses or aliases, which are described in +section 6.4. All local recipient addresses (those which don't contain an '@') +are checked for possible aliases in the ALIAS file, described in section A.7 of +Appendix A. Each alias that is found, is expanded into its list of addresses. +If no recipient list is supplied with the "m" command, you will be prompted for +a recipient list. + + When you are composing a message, several commands are available such as +invoking an editor or reading in text from other messages or files, as +described in section 6.3. To end a message enter a line containing a single +period. + + It is important to remember that the input line buffer has a 128 character +limit. You should format your text by entering a carriage return at the end of +each line. Typing excessively long lines may cause data loss due to truncation +when passing the message through other hosts. Keeping lines less than 80 +characters is always a good idea. + +6.2.10. r [] + + Reply to a message. Reply reads the header information in order to +construct a reply to the sender. The destination information is taken from the +"From:" or the "Reply-To:" header, if included. If no message number is +supplied the current message is used. + +6.2.11. f [] + + The 'f' command is used to forward a mail message to another recipient. +If no message number is supplied the current message is used. The user is +prompted for the recipients and a subject. The mail header is added to the +message text while retaining the complete original message in the body. Also +see the ~m command. + +6.2.12. b [] + + Bounce a message. Bounce is similar to forwarding but instead of your +user information, the original sender information is maintained. If no +message number is supplied the current message is used. + +6.2.13. n [] + + Display or change the mailbox. The 'n' command with no arguments will +display a list of mailboxes containing mail. If an argument is supplied, then +the current mailbox is closed and a new mailbox is opened. + +6.2.14. l + + List outbound messages. The job number, the sender, and the destination +for each message is displayed. A status of "L" will appear if the SMTP sender +has the file locked, meaning the message has begun to be sent to its +destination. If you find that a message has been in the locked state for a +long period of time, the corresponding SMTP session may be "stuck." See +section 10.1 + + + + - 16 - + + +for a description of how to monitor the status of SMTP sessions and to reset +them if they get stuck. + +6.2.15. k [] + + Remove an outbound message from the send queue. A message can be removed +from the send queue by specifying the job number obtained by the l command. +If the message is locked you will be warned that you may be removing a file +that is currently being sent by SMTP. It is best not to remove locked +messages. They are better handled with the "tcp reset" command, described in +section 10.1.2. + +6.2.16. $ + + Update the mailbox, deleting messages marked for deletion. If you have a +large number of messages in your mailbox and are cleaning it up by marking +unwanted messages for deletion, updating the mailbox will shorten the header +list. + +6.2.17. x + + Exit to DOS without changing the data in the mailbox. Messages marked for +deletion will NOT be deleted. + +6.2.18. q + + Quit to DOS updating the mailbox. Messages marked for deletion WILL be +deleted. + +6.3. Text Input Commands + + The following commands are available while composing a message. The tilde +character (~) must be entered as the first character on a line. + + ~r Read into the message buffer. + + ~m Read into the message buffer. + + ~p Display the text in the message buffer. + + ~e Invoke the editor defined in BM.RC with a temporary file + containing the text in the message buffer. + + ~q Abort the current message. No data is sent. + + ~~ Insert a single tilde character into the message. + + ~? Display the help menu of tilde escape commands. + +6.4. Mail Addresses + + Mail is addressed to a recipient, which is either a user name defined in a +BM.RC file (described in section A.5 of Appendix A) or an "alias," which is an +alternative name for one or more users. Aliases are defined in the ALIAS file, +described in section A.7 of Appendix A. These recipients can be on the local + + + + + - 17 - + + +host or a remote host. + + Mail addressing varies from simple to mildly confusing. The simplest form +is: + + [@] + +If @ is not included, BM will search to see if is in the +ALIAS file on the local host. If it is, it will be expanded to the recipient +list given for the alias. If is not given in the alias file, the +message will be sent to on the local host (this is probably not +what you intended, unless you have more than one user on your host). + + If the address @ is used, the message will be sent to +, where is first looked up in the ALIAS file on . If + is found to be an alias, it will be expanded to the recipient list +given for the alias, and the message will be forwarded to these recipients. If + is not found in the alias file, the message will be delivered to + on . + + Host names can be found in your HOSTS.NET file, described in section A.4 +of Appendix A. Valid mail user names for a given host can be found using the +finger command, as described in section 9.2, if the finger files have been set +up on the this host. If an ALIAS file has been distributed for your area, +mail addresses and aliases will be found there. Otherwise, you will have to +contact the intended recipient and ask for his or her address. + + If the remote host of the recipient is not on the air when you try to send +the message, it will remain in your mail queue until some time when both hosts +are on the air at the time you attempt to send the message. To avoid this +delay, switches have been set up in many areas which run 24 hours a day and can +be used for mail forwarding. If the switch your recipient communicates with is + (a host name), then the mail can be addressed as: + + %@ + +Your mail will be transferred to and then forwarded to +@, using the stored route to . + +6.5. SMTP + + NET sends and receives mail using the simple mail transport protocol +(SMTP). This is handled automatically by NET, although, you may want to "kick" +out your outgoing mail manually, as described below. + + When mail is received, SMTP displays the message: + + New mail arrived for + +where is the addressee of the received mail. + + If you have included the "smtp timer" command in your AUTOEXEC.NET file, +SMTP will check your outbound mail queue at the time interval you have set to +determine if there is any new outgoing mail that should be sent. If you +haven't + + + + - 18 - + + +included this command, or you want to send out your mail before the next timer +interval, you can manually "kick" out your outgoing mail, as described below. + +6.5.1. smtp kick + + This command will review the outgoing mail queue and attempt to deliver +any pending mail. This command allows the user to "kick" the mail system +manually. This command can be entered at a "net>" prompt after you have +composed mail messages. + +7. File Transfer + + The ftp command provides for the transfer of files using the file +transport protocol. It enables you to do the following: + + Transfer text and binary files between local and remote host + List directories on a remote host + Delete files on a remote host + Create and remove directories on a remote host + + + The remote host can be unattended and the ftp server on that host will +provide the requested services. + + File access privileges are defined in the FTPUSERS file, described in +section A.8 of Appendix A. This file defines user login names, passwords, +directories to be accessed and file access privileges. It is a common +convention to allow arbitrary users limited access to files under the special +user names "anonymous" or "guest." + +7.1. Ftp Command + + The command ftp is used to initiate an ftp session. It is invoked as: + + ftp + +where is the desired remote host. If the session is established, you +will enter converse mode on the new ftp session. When in converse mode with an +ftp server, only the ftp commands described below will be valid. This will +remain true until the ftp "quit" command is issued, ending the ftp session, and +returning you to the "net>" prompt. + + When the connection between the two machines is opened, you'll get a +banner from the remote machine, followed by a prompt for your user name and +then your password. If you've negotiated with the person at the remote +machine to have a special user name and password set up for you in his or her +FTPUSERS file, use that. If not, use one of the special user names, +"anonymous" or "guest," and in this case, use your call sign as your password. +Your password is recorded in the log file on the remote host, allowing the +manager of that host to keep track of ftp activity. + +7.2. Ftp Converse Mode Commands + + The following are the ftp commands that are valid in ftp converse mode, + + + + + - 19 - + + +which you enter after your password is accepted. + +7.2.1. dir [| []] + + Without arguments, "dir" requests that a full directory listing of the +remote server's current directory be sent to your display. If one argument is +given, it is interpreted as a specific file or sub-directory on the remote +file system that is to be listed. If two arguments are given, the second is +taken as the local file into which the directory listing should be written +(instead of being sent to the display). The full listing gives the file +names, sizes, and creation dates. You should request a directory listing when +you first log into an unfamiliar machine. There will often be a file named +"README" or "whathere.txt" that will give some information about the files +available on the remote machine. This file can then be acquired with a "get" +command (described below), and read on your machine to learn more about the +files available on the remote host. + +7.2.2. ls [| []] + + ls is identical to the "dir" command except that an abbreviated directory +listing is provided. This listing gives only the file names. + +7.2.3. pwd + + Displays the name of the current directory on the remote host. + +7.2.4. cd + + Changes the current directory on the remote host to the directory +indicated by , which must be an existing directory on the remote +host. The directory specified can be relative to the current directory, or +absolute, with the name beginning at the root (\). + +7.2.5. get [] + + Asks the remote host to send the file specified in the first argument and +to write the file on the local machine. The second argument, if given, will be +the name of the file on the local machine; otherwise it will have the same name +as on the remote host. See the "type" command below if the file requested is +other than an ASCII file. If the file is over 10,000 characters in size, you +should only start the transfer when the radio channel is relatively quiet. Use +the "abort" command below if you want to terminate the transfer before it has +been completed. + +7.2.6. put [] + + Asks the local host to send the file specified in the first argument and +to write the file on the remote machine. The second argument, if given, will +be the name of the file on the remote host; otherwise it will have the same +name as on the local machine. You must have write privilege on the remote +host to use this command. Use the "abort" command below if you want to +terminate the transfer before it has been completed. See the "type" command +below if the file to be sent is other than an ASCII file. + + + + + - 20 - + + +7.2.7. quit + + Terminates the ftp session and returns you to the "net>" prompt. + +7.2.8. abort + + Aborts a get, put, dir or ls operation in progress. This is the only +acceptable command when these operations are in progress; all other commands +will result in an error message. Abort is valid only when a transfer is in +progress. When a get or put operation is aborted, a partial copy of the +transferred file will be left on the destination machine, which must be removed +manually if it is unwanted. This is also true for a dir or ls operation when +the directory listing is written as a local file. + +7.2.9. type [a|i] + + Tells both the local and remote hosts the type of file that is to be +transferred. Without arguments, the current mode is displayed. The default is +"a", which means ASCII (i.e., a text file). In "i" mode, which means IMAGE, +files are sent exactly as they appear in the file system. This mode must be +used when exchanging raw binary files (executables, compressed archives, etc). +The file type must be set before a "get" or "put" command is initiated. The +file type remains in effect until it is changed by a subsequent "type" command. + +7.2.10. dele + + Deletes a file on the remote machine. You must have delete privilege on +the remote host to use this command. + +7.2.11. mkdir + + Creates a directory with the name on the remote +machine. You must have write privilege on the remote host to use this +command. + +7.2.12. rmdir + + Deletes on the remote machine. The remote directory +must be empty before you can remove it. You must have delete privilege on the +remote host to use this command. + +7.3. Ftp Example + + In the ftp example below, the user initiates an ftp session with the +remote host "eyolo," logs in as the user "anonymous," requests a directory +listing, changes to subdirectory, gets a binary file and terminates the +session. The text given in parentheses to the right of the commands indicate +what has been typed by the user. + +net> ftp eyolo (ftp eyolo) +SYN sent +Established +220 eyolo.ampr.org FTP version 89042.1 ready at Mon Mar 26 16:16:54 1990 +Enter user name: anonymous (anonymous) +331 Enter PASS command + + + + + - 21 - + + +Password: n6gf (n6gf) +230 Logged in +dir (dir) +200 Port command okay +150 opening data connection for LIST \public +docs\ 16:42 3/02/90 lists\ 16:40 3/02/90 +programs\ 14:40 3/02/90 utility\ 16:42 3/02/90 +whathere.txt 1,755 18:22 3/21/90 +5 files. 6,959,104 bytes free. Disk size 10,584,064 bytes. +Get complete, 265 bytes received +226 File sent OK +cd programs (cd programs) +257 "\public\programs" is current directory +dir (dir) +200 Port command okay +150 Opening data connection for LIST \public\programs +bm.exe 41,225 17:55 2/25/90 net.exe 174,454 17:43 2/25/90 +2 files. 6,959,104 bytes free. Disk size 10,584,064 bytes. +Get complete, 135 bytes received +226 File sent OK +type i (type i) +200 Type OK +get bm.exe (get bm.exe) +200 Port command okay +150 opening data connection for RETR bm.exe +Get complete 41225 bytes received +226 File sent OK +quit (quit) +221 Goodbye! +Close wait +Last ACK +Closed (Normal) +net> + + + The user's callsign was used as the password, which is shown in this +example. However, the password is not echoed to the screen by the software. +Note that there are no prompts for ftp in the converse mode. After you +receive the message "230 Logged in" you can issue ftp commands. The display +generated by the "dir" command in this example shows that the user was logged +into the \public directory. The listing shows that there is one file, named +"whathere.txt," of size 1755 bytes, created at 18:40 on 3/21/90. There are +also four subdirectories, indicated by "\" at the end of their names: "docs\," +"lists\," "programs\," and "utility\," all created on 3/2/90. The dir output +is finished with the "226 File sent OK" message and the user can then issue +another ftp command. The command "cd programs" is issued to change to the +subdirectory programs. A dir command on this subdirectory shows that there +are two files, "bm.exe" and "net.exe." These are executable programs since +the file name extensions are "exe" and therefore, they are binary files. The +"type i" command is issued so that a binary file can be transferred. The +"get" command is issued and there will be a delay as the "bm.exe" file is +retrieved. This is also finished when the message "226 File sent OK" is +received. + + + + + + - 22 - + + +8. AX.25 Services + + NET provides AX.25 services, better known as the standard packet radio +protocol that you probably used before you switched to TCP/IP. This allows +you to use NET to move to another frequency and check into the local AX.25 +PBBS, or to initiate a keyboard session with a friend who hasn't been +convinced to switch to TCP/IP yet. In addition, there is an AX.25 mailbox, +allowing that same friend to connect to your system and initiate a keyboard +session, or to send a message to anyone reachable on TCP/IP. + +8.1. Initiating an AX.25 Connection + + The connect command is used to initiate an AX.25 connection. The syntax +is: + + connect ax0 [ ... ] + +This initiates an AX.25 session to the specified call sign. Up to 7 optional +digipeaters may be given; note that the word "via" is NOT needed. Data sent on +this session goes out in conventional AX.25 packets with no upper layer +protocol. The de-facto presentation standard format is used, in that each +packet holds one line of text, terminated by a carriage return. Two examples +are: + + connect ax0 n3eua (connect direct to N3EUA) + connect ax0 n3eua n1fed n0ccz (conn to N3EUA via N1FED and N0CCZ) + +If all is well, you should get "Conn Pending" and then "Connected" messages. +At this point, you're connected just like using a plain old TNC. + + When you're ready to disconnect, use the key to escape from the +session back to the 'net>' prompt, and then type 'disconnect', as described in +section 8.3. + +8.2. File Upload and Download + + AX.25 sessions can be recorded to a file and a file can be uploaded in +place of typing the information on the keyboard. + +8.2.1. record |off + + Opens and appends to it all data received or sent on the current +AX.25 session. If you are in AX.25 converse mode and want to initiate +recording, you will need to use the key to escape back to command mode +to issue the record command. The message "Recording into " will be +displayed and another "net>" prompt will be issued. Enter on a blank +line and you will return to the AX.25 converse mode with recording activated. +The command "record off" stops recording and closes the file. + +8.2.2. upload + + Opens and sends it on the current AX.25 session as though it were +typed on the terminal. If you are in AX.25 converse mode and want to initiate +uploading, you will need to use the key to escape back to command mode to + + + + - 23 - + + +issue the upload command. The uploading is initiated, but the file contents +are not displayed on the screen during the uploading. When the uploading is +complete, the message "Uploading off" is displayed. Enter on a blank +line at the "net>" prompt and you will return to the AX.25 converse mode. + +8.3. Terminating an AX.25 Connection + + To terminate an AX.25 connection, use the following command: + + disconnect [] + + + If you are in AX.25 converse mode, press to escape back to the +"net>" prompt to issue this command. If you are running only one session, +entering disconnect without arguments will terminate the connection. If you +have multiple sessions, entering disconnect without arguments will initiate a +close on the current session. If you are running multiple sessions, the +"session" command will display a list of these sessions. Entering disconnect +with a session number argument will initiate a close on the specified session. +After entering disconnect, you should get "Disc pending" and then +"Disconnected" messages. Note that "disconnect" is the same as the "close" +command and that the two command names can be used fully interchangeably. + +8.4. AX.25 Mailbox + + If your AUTOEXEC.NET file (described in section A.3 of Appendix A) +contains the command "mbox on," then your AX.25 mailbox will be accessed when +someone running the standard AX.25 packet protocol connects to you. When the +connection is made, the remote user must first enter and then a banner +and prompt similar to the following will be displayed: + + Welcome to the n6gf.ampr.org TCP/IP Mailbox + (C)hat, (S)end, (B)ye > + + + If the user chooses (C)hat, an AX.25 keyboard connection with your system +is requested. A message similar to the following will be displayed on your +console: + + Incoming AX25 session 0 from N6QGG + +If you are in command mode, enter at a "net>" prompt and you will enter +converse mode for the AX.25 keyboard session. If you are in converse mode, use +the key to escape back to command mode, use the "session" command to list +the active sessions, and then use the "session " command to enter +converse mode on the desired AX.25 session. When you are finished with the +chat, you can use the key to escape from the session back to the 'net>' +prompt, and then type 'disconnect', as described above. Alternatively, the +AX.25 user who initiated the session can terminate it by disconnecting in the +standard way. + + The syntax for the (S)end command is: + + S [@host] [< from_addr ] [$bulletin_id] + + + + - 24 - + + +With one argument, this will send a message to the specified mail address. +See sections 6.2.9 and 6.4 for a description of mail addresses. The user will +be prompted for a subject, then asked to enter the message. Instructions are +given for ending the message with ^Z or /EX beginning a line, the same as that +for AX.25 PBBS's. With two arguments, the user can send a message into the +TCP/IP network, using the addressing scheme described in Section 6.4 of this +guide. The third and fourth arguments are primarily for use in PBBS +forwarding and will not be described here. After sending a message, the +mailbox command prompt will be displayed to the user again. Entering B (for +Bye) will terminate the mailbox session. + +9. Monitoring Activity + + Several commands are available to monitor activity on the packet radio +channel and to acquire information about a remote host. + +9.1. ax25 heard [on|off|clear] + + Works like the "mheard" function in many TNC's. The command "ax heard," +with no parameters displays the list of callsigns heard and with options "on" +and "off" you control whether the list is updated or not. With the option +"clear," you clear the list of callsigns. If you are interested in monitoring +the channel with this command, include "ax25 heard on" in your AUTOEXEC.NET +file, as described in section A.3.20 of Appendix A. + + An example listing: + +Heard list: Sat Mar 31 15:09:23 1990 + +KB6RIH ARP NETROM IP Sat Mar 31 15:08:07 1990 +KA6FUB-3 NETROM Sat Mar 31 15:04:57 1990 +HIGH Sat Mar 31 14:25:06 1990 +N6VV-15 Sat Mar 31 14:05:16 1990 +N6SPE-1 ARP IP Sat Mar 31 12:49:30 1990 +N6QWS (via HIGH) Sat Mar 31 12:36:59 1990 +N6QGG Sat Mar 31 12:20:51 1990 + +KB6RIH is running NET, using the address resolution protocol (ARP), NETROM, and +the internet protocol (IP). KA6FUB-3 is a NETROM node. HIGH is an AX.25 +digipeater. N6VV-15 was being forwarded through the KA6FUB-3 NETROM node. The +only clue from this listing that this was a NETROM forward is the SSID (-15) on +N6VV's callsign. N6SPE-1 is also running NET, using ARP and IP. N6QWS was +heard digipeated through HIGH. Finally, N6QGG was heard direct on AX.25. + +9.2. finger + + This command allows you to "finger" information files on your host or on a +remote host. Finger files are described in section A.9 of Appendix A. + + The syntax for the finger command is: + + finger [][@] + +where is the name of the finger information file you wish to +query + + + + + - 25 - + + +and is the name of the remote host where the file resides. + + If you issue the command in the following form: + + finger + +you can query information from a finger file on the local host, namely your +own system. This is useful for testing finger on a system that you know is +running. + + The command in the following form: + + finger @ + +is used to acquire the names of the finger files available on . This +command returns a list of all finger files on the remote computer. + + Finally, issuing the command as: + + finger @ + +will display from . + + When you have been fingered by a remote host, a message similar to the +following will be displayed: + + You're being fingered by 44.2.0.98:1001! + + +9.3. ping + + This command is used to see if a remote host is on the air and if so, to +determine the quality of the path between the local and remote host. The +syntax for this command is: + + ping [|clear] [] + + + When the command is issued in the form: + + ping + +the remote host given in the argument is queried once. If it returns an echo, +the IP number of the host and the round trip time required are displayed. For +example: + + 44.2.0.96: echo reply id 0 seq 30522, 5508 ms + +In this case, the round trip to remote host [44.2.0.96] took 5508 ms, or about +5.5 seconds. If no echo is received, due to the host being off the air, a poor +path to the host, or a packet collision, nothing is displayed. + + Issuing the command in the form: + + ping + + + - 26 - + + +sets up a repetitive test, where the remote host is queried at a time interval +given by the number in the second argument, interpreted in seconds. Repetitive +queries can be set up for several hosts at once, by issuing a command for each +host. Users should be careful not to overdo this testing, as the ping queries +will add to channel congestion. The current results are displayed with the +third form of the ping command, and the repetitive queries continue until the +"ping clear" command is issued. + + Entering the command "ping," without an argument, displays a table of the +current results of the repetitive queries, listing the IP numbers of the remote +hosts, number of ping queries sent, number of ping echoes received, percent of +queries echoed, average round trip time and the ping interval time. For +example: + +Host Sent Rcvd % Avg RTT Interval +44.2.0.96 18 17 94 6596 60 +44.2.0.98 18 18 100 3209 60 + + + Finally, issuing the command in the form: + + ping clear + +cancels the repetitive ping requests and clears the table of ping query +results. + +9.4. trace + + The trace command is used to monitor the activity on the channel. The +syntax of this command is: + + trace [ax0 []|allmode|cmdmode] + + + The flags enable or disable tracing and determine the amount of +information displayed. Without arguments, trace gives a list of all defined +interfaces and their tracing status. This guide only considers the use of a +single interface, "ax0." The flags are given as a hexadecimal number which is +interpreted as follows: + +TIO +|||--- Enable tracing of output packets if 1, disable if 0 +||---- Enable tracing of input packets if 1, disable if 0 +|----- Controls type of tracing: + +0 - Protocol headers are decoded, but data is not displayed +1 - Protocol headers are decoded, and data (but not the + headers themselves) are displayed as ASCII characters, + 64 characters/line. Unprintable characters are displayed + as periods. +2 - Protocol headers are decoded, and the entire packet + (headers AND data) is also displayed in hexadecimal + and ASCII, 16 characters per line. + + + + + - 27 - + + + There is an additional option for tracing that allows you to select +whether traced packets are always displayed, or only displayed when you are in +command mode. Having tracing only happen in command mode sometimes provides +the right mix between "knowing what's going on," and "keeping the garbage off +the screen" while you're typing. To select tracing all the time (the default +mode), use 'trace allmode'. To restrict tracing to command mode, use 'trace +cmdmode'. + + For example, to trace the activity on interface ax0, with an ASCII +display: + + trace ax0 111 + +To turn off this tracing: + + trace ax0 000 + + +10. Advanced Topics + + While this document is intended to be a guide for beginners, there are a +few advanced topics of interest to many users that should be mentioned. The +presentation of these topics is concise and the reader should consult "The KA9Q +Internet Software Package," by Bdale Garbee, for details. + + Note that the commands included in the NET configuration file, +AUTOEXEC.NET, and described in Appendix A, can also be used interactively. +Further, these commands, when issued without their variable arguments, will +report the current values of these arguments. For example, the "route" +command, issued without arguments, will display the current routing table. +These commands, issued with arguments, can be used to alter the configuration +of NET while it is running. For example, "route add," described in section +A.3.8., can be used to add entries to the routing table, possibly to +experiment with alternative routes. To drop routes that are found to be +unreliable, the following command can be used: + + route drop + +where is the IP address or host name for the destination of your +packets. Note that if you find better routing methods with this +experimentation, you will have to edit the "route add" commands in your +AUTOEXEC.NET file for this routing table to be in effect the next time you run +NET. + +10.1. TCP + + The TCP command can be used to monitor and control session status at a +lower level than provided elsewhere in the KA9Q software package. + +10.1.1. tcp status [] + + Issued without the optional argument, this command displays the status +table for TCP sessions. For example: + +conout 102 conin 109 reset out 5 runt 0 chksum err 3 bdcasts 0 + &TCB Rcv-Q Snd-Q Local socket Remote socket State + + + + - 28 - + + +2e90e444 0 0 44.2.100:79 0.0.0.0 Listen (S) +2e90e59c 0 0 44.2.100:25 0.0.0.0 Listen (S) +2e90e790 0 0 44.2.100:23 0.0.0.0 Listen (S) +2e90eafc 0 335 44.2.100:1001 44.2.0.32:25 Established +2e90e4fc 0 0 44.2.100:21 0.0.0.0 Listen (S) + + + The first line gives some TCP-level statistics, including the number of +outbound and inbound connections to your host. The table below gives a +summary of all existing TCP connections. "&TCB" is the TCP address, "Rcv-Q" +and "Snd-Q" are the numbers of characters in the receiving and sending queues, +"Local socket" and "Remote socket" give the IP address and port of the local +and remote host, "State" gives the state of the session. Note that the remote +socket IP address is given as 0.0.0.0 for the listening servers. Each session +is assigned to a port. The server ports are 79 for finger, 25 for SMTP, 23 +for Telnet, and 21 for FTP. In this example, there is an established outbound +SMTP session, assigned to port 1001 on the local host, connected to the SMTP +server on port 25 of the host with IP address 44.2.0.32. 335 characters are +in the queue ready to be transmitted. + + Issuing the command with the argument , taken from the "&TCB" +column in the table, will provide a more detailed table of information on the +specified TCP connection. Of particular interest is the last line of the +table, which provides information about the retry timer. This is the timer +that determines when a packet retransmission will be attempted. It is +expressed in the form "running time/threshold time," both given in +milliseconds. When the running time reaches the threshold, the pending packet +will be retransmitted. If receipt of this packet is not acknowledged, the +threshold time will be increased and the running timer will be restarted. +When the channel becomes congested, the threshold time becomes very large, and +the data throughput drops substantially. This is known as the "exponential +backoff" strategy of TCP/IP. + + You should display the TCP status before you exit NET. This will let you +know if there are any active connections. For example, you should not exit NET +if someone is running an FTP session with your host. Except for the clatter of +your disk drive, you would not be aware of an active FTP session unless you +check the TCP status. If there are some active sessions, it is best to leave +NET running so that your TCP/IP node stays on the air. If you think you have +"stuck" sessions in which there is no active packet transmission, see section +10.1.3 for information on resetting these sessions. + +10.1.2. tcp kick + + If there is data on the send queue of the TCP connection indicated by the +argument , taken from the table generated by the "tcp status" +command, this will force an immediate retransmission. This can be attempted +if the connection appears to be "stuck." This can happen if the route is +unreliable, or if there is considerable channel congestion. This command +should be used sparingly, as it adds to channel congestion and defeats the TCP +strategies to deal with this congestion. + +10.1.3. tcp reset + + Resets the TCP connection indicated by the argument , taken from + + + + - 29 - + + + +the table generated by the "tcp status" command. This effectively terminates +the connection. While this command should not be used indiscriminantly, there +are situations in which it is useful, primarily when a TCP connection has +gotten "stuck." The three common situations in which a TCP connection can get +stuck are: remote host has crashed, propagation path of the route to the +remote host has deteriorated, and there is extreme congestion on the channel. +In each of these situations, tcp status for the corresponding TCP connection +will show an increasingly large threshold time. + + If you are in a telnet session or an AX.25 connection, you will find that +you will wait nearly forever for a response from the remote host. If you want +to give up on the session, escape to NET and close (or disconnect) the session. +If there is no response from the remote host, the session can remain half open +and should be reset using the tcp reset command. + + Similarly, an FTP session can also become stuck. If you are in the midst +of a file transfer (get or put operation), use the FTP converse command +"abort" to terminate the transfer. Then the "quit" command will initiate a +close on the session. If there is no response from the remote host, the half +open session should be reset using tcp reset. + + Another situation in which this command is appropriate for use is the +"stuck" SMTP session. As discussed in section 6.2.14, when a mail message has +begun to be sent, it is "locked." If the route to the destination host is +unreliable, the exponential backoff strategy of TCP can cause the transfer to +be delayed almost indefinitely. If you want to terminate the transfer, so +that you can try again at another time, or using a different route, you can +reset the corresponding TCP session. When this is done, the associated mail +message is unlocked and can be resent, or killed from BM if you want to give +up on the message entirely. + + + + + + + + + + - 30 - + + + Appendix A. Installation of NET and BM + + As with most software, some effort is needed to get NET and BM installed +and properly configured on your system. This requires setting up the proper +directory structure and editing some configuration files. While there are a +number of details to attend to, none of this is very difficult. + + The configuration files discussed below must be edited with a text editor. +Any editor will do, as long as it writes ASCII (simple text) files. A word +processing program will work as well, as long as you have it write an ASCII +output file. + +A.1. Installation Overview + + It will be assumed that you have received a disk (or disks) containing at +least the files NET.EXE and BM.EXE. You may also have the files AUTOEXEC.NET, +HOSTS.NET, FTPUSERS, and ALIAS, although if these were not included on your +distribution, don't panic, as you will be able to create them with an editor. + + Here are the steps you will have to take to install the KA9Q Internet +Package, where the root directory (\) is preferably on your C: hard disk drive, +or otherwise on your A: floppy disk drive: + + 1. Copy NET.EXE and BM.EXE to the root directory. + 2. Create the directory structure described in section A.2. + 3. Create the file AUTOEXEC.NET in the root directory and edit as + described in section A.3. + 4. Create the file HOSTS.NET in the root directory and edit as + described in section A.4. + 5. Create the file BM.RC in the root directory and edit as described + in section A.5. + 6. Edit your AUTOEXEC.BAT file in the root directory to add the time + zone environment variable, as described in section A.6. + 7. Create the ALIAS file in the root directory and edit as described in + section A.7. + 8. Create the FTPUSERS file in the root directory and edit as described + in section A.8. + 9. Create the finger file(s) in the directory \finger and edit as + described in section A.9. + + +A.2. File Structure + + Most of the required files will be kept in the root directory of your +primary disk drive, but several other directories must also be set up. + +\spool The NET log file (described in section A.3.21) is normally + stored in this directory. + +\spool\mail This directory holds the individual mailboxes for each user name + on your system. The extension .txt is added to the user name to + form the mailbox name. Mail received by the SMTP server is + appended to the mailbox file. + + + + + - 31 - + + +\spool\mqueue The directory holds the outbound mail jobs. Each job consists + of 2 files: an xxx.txt and xxx.wrk file, where xxx is a unique + numerical prefix. When the job is being sent, an xxx.lck file + is also created. The file sequence.seq is used to keep track + of the last message number. The mail transport protocol, SMTP, + and the mail program, BM, manage the files in this directory. + +\public This directory holds the files available for anonymous ftp, + described in section A.8. + +\finger This directory holds the finger files, described in sections 9.2 + and A.9. + + The files that will reside in the root directory include: + + NET.EXE + BM.EXE + AUTOEXEC.NET + HOSTS.NET + BM.RC + ALIAS + FTPUSERS + + +A.3. NET Configuration File -- AUTOEXEC.NET + + The AUTOEXEC.NET file, created in the root directory, has a function +similar to that of the AUTOEXEC.BAT file in DOS, hence the name. When NET is +executed, it reads AUTOEXEC.NET and executes all of the commands as if they +had been typed in to the program from the keyboard. This provides an easy +mechanism for setting up the initial system configuration, including setting +the IP address, hostname, AX.25 parameters, routing table, servers to start, +and protocol variables. This file is to be located in the root directory of +the current disk drive on your system. + + An example AUTOEXEC.NET file is usually distributed with the NET software. +This file is fully commented and explains how the example file should be edited +for your use. If this file is not available, use a text editor to create the +file, following the instructions given in the subsections below. It is +suggested that you put the commands into AUTOEXEC.NET in the order given below. + +A.3.1. # + + Commands starting with the hash mark (#) are ignored. This is mainly +useful for comments in the AUTOEXEC.NET file. The comments can appear anywhere +in the file. + +A.3.2. hostname + + Sets the local host's name (an ASCII string, NOT an IP address). This is +usually chosen to be .ampr.org, where is your amateur call sign. +The suffix 'ampr.org' is officially recognized as meaning an 'AMateur Packet +Radio' station. Your hostname will show up in mail headers and in the greeting +messages from the SMTP (mail), FTP (file transfer), and AX.25 mailbox servers. + + + + - 32 - + + +For example: + + hostname n6gf.ampr.org + + +A.3.3 ax25 mycall [-] + + Set the local AX.25 address. It does the same thing that 'MYCALL' does in +your AX.25 TNC. The standard format is used, e.g., KA9Q or WB6RQN-5. The +optional dash (-) and following the callsign is the SSID (substation +ID), used when it is necessary to distinguish between two or more packet +stations with the same callsign. The SSID will be 0 unless explicitly set to +another value, which must be a decimal number from 0 to 15. This command must +be given before any attach command using the AX.25 mode is given. For example: + + ax25 mycall n6gf + + +A.3.4 ip address + + Sets the local IP address. See section 2.4 for information on acquiring +an IP address. For example: + + ip address [44.2.0.100] + + +A.3.5. attach + + The attach command configures and attaches a hardware interface to the +system. While many interfaces can be handled by NET, in this guide, only a +single serial interface to a TNC running the KISS protocol will be considered. +The general form of the command for our purposes is: + + attach asy ax25 ax0 + + + "asy" refers to a standard PC asynchronous interface. Other hardware +interfaces are supported by NET, but will not be covered in this guide. + + is the base address of the control registers for the serial +interface. + + is the interrupt vector number. Both the I/O address and the +vector must be in hexadecimal. (You may put "0x" in front of these two values +if you wish, but note that they will be interpreted in hex even if you don't +use it). + + "ax25" forms IP datagrams to correspond to the AX.25 packet protocol. +Other modes are supported by NET, but will not be covered in this guide. + + "ax0" is the name by which the interface will be known to the various +commands, such as "connect," "route" and "trace". + + For asynchronous ports, specifies the size of the ring buffer in + + + + - 33 - + + +bytes to be statically allocated to the receiver; incoming bursts larger than +this may (but not necessarily) cause data to be lost. The suggested value is +1024. + + is the maximum transmission unit size, in bytes. Datagrams larger +than this limit will be fragmented at the IP layer into smaller pieces. The +suggested value is 256. + + is the baud rate of the serial communication between the computer +and the TNC. It must be chosen to be the same value as the baud rate selected +on the TNC, as discussed in section 2.3. The suggested value is 4800 for an +XT, and 9600 for an AT. + + Example 1 -- Attach the PC serial card normally known as "com1" (the first +controller) to operate in AX.25 mode at 4800 baud with a KISS TNC. + + attach asy 0x3f8 4 ax25 ax0 1024 256 4800 + + + Example 2 -- Attach the secondary PC serial card ("com2") to operate in +AX.25 mode at 4800 baud with a KISS TNC. + + attach asy 0x2f8 3 ax25 ax0 1024 256 4800 + + +A.3.6. ip ttl + + Sets the default time-to-live value placed in each outgoing IP datagram. +This limits the number of switch hops the datagram will be allowed to take. +The idea is to bound the lifetime of the packet should it become caught in a +routing loop, so the value should be somewhat larger than the diameter of the +loop. A suggested value is 16. For example: + + ip ttl 16 + + +A.3.7. param ax0 + + Param invokes a device-specific control routine. On a KISS TNC interface, +this sends control packets to the TNC. Data values are treated as decimal. +This command is used to change TNC parameters such as TXDELAY, TXTAIL, PERSIST, +and SLOTTIME. This command is TNC-specific, so you must read the documentation +for the KISS implementation for your TNC. Most KISS implementations include +good default values, so you shouldn't have to use this feature, but if things +don't work, you can use the "param" command to try tweaking the TNC. + + On a TNC-2, =1 will set TXDELAY (the time after key down when +packet information is transmitted) to X 0.01 seconds. To set TXDELAY +to 0.5 seconds: + + param ax0 1 50 + +On Kantronics TNCs, =1 sets TXDELAY to X 0.01 seconds, as with +the TNC-2. For =2, PERSIST is set to . For =3, + + + + - 34 - + + +SLOTTIME is set to X 0.01 seconds. The default values for these +parameters are generally acceptable, so it is usually not necessary to include +these commands in AUTOEXEC.NET. + +A.3.8. route add + + The "route add" command adds an entry to the routing table, defining how +your outgoing packets should be routed. Routing can be a complicated issue, so +it would be best for you to get some help on this from an experienced local +TCP/IP user. + + The command syntax is: + + route add [/bits]|default ax0 [] + + + Basically what you are trying to do is to route your packets directly to +those hosts that you can "hear" and route your packets to the remaining hosts +through hosts that can serve as gateways (similar to AX.25 digipeaters). The +destination host for your packets is , which is either an IP +address or a host name, as defined in the file HOSTS.NET, described in section +A.4. The gateway is , also an IP address or host name. Note +that it is not necessary to specify the entire sequence of hosts from your +system to the destination, but rather only the destination and the first stop +on the way. If the routing table on the other hosts has been set up properly, +your packets will get to the desired destination. Thus, everyone has to +cooperate in keeping the packets moving. + + In my area, N6RQR is over 40 miles away, but he is up in the foothills +above me and has a good station, so I can communicate with him directly. His +IP address is [44.2.0.54], so I route packets directly to him with the +statement: + + route add [44.2.0.54] ax0 + + + The option "/bits" can be used to avoid having to include a route add +statement for each and every host you can communicate with directly. To +understand this, more details on IP addresses are needed. The IP address is a +32-bit number, with four 8-bit numbers separated with periods (.). Each 8-bit +number can range from 0 to 255. The optional "/bits" suffix to the +destination host id specifies how many leading bits in the host IP address are +to be considered significant in the routing comparisons. If not specified, 32 +bits (i.e., full significance) is assumed. With this option, a single routing +table entry may refer to many hosts all sharing a common bit string prefix in +their IP addresses. For example, [44.0.0.0]/8 would match all addresses in +the form [44.*.*.*], where '*' is any number between 0 and 255; the remaining +24 bits are "don't-cares". When an IP address to be routed matches more than +one entry in the routing table, the entry with largest "bits" parameter (i.e., +the "best" match) is used. This allows individual hosts or blocks of hosts to +be exceptions to a more general rule for a larger block of hosts. + + The "/bits" option can be used to route packets directly to all the hams +on TCP/IP in my town. We have been assigned IP addresses in the range +[44.2.0.96] to [44.2.0.111], so our addresses agree in the first 24 bits. +Further, 96 + + + - 35 - + + +decimal is 01100000 binary and 111 decimal is 01101111 binary. Thus, our +addresses agree in an additional 4 bits, for a total of 28 bits. The command +used is: + + route add [44.2.0.96]/28 ax0 + + + Hams in a neighboring region have been assigned IP addresses of the form +[44.4.*.*]. N6RQR can forward packets to them, so we use him as a gateway with +the command: + + route add [44.4.0.0]/16 ax0 n6rqr + + + The special destination "default" is used to route datagrams to addresses +not in the routing table; it is equivalent to specifying a /bits suffix of /0 +to any destination host. Care must be taken with default entries since two +nodes with default entries pointing at each other will route packets to +unknown addresses back and forth in a loop until their time-to-live (TTL) +fields expire. (Routing loops for specific addresses can also be created, but +this is less likely to occur accidentally). + + In my area, we route packets to all other destinations through our local +switch, which has the host name "eyolo." The command used is: + + route add default ax0 eyolo + + +A.3.9. smtp timer + + Sets the interval to , in seconds, between scans of the outbound +mail queue to determine if there is any new outgoing mail which should be +sent. For example, "smtp timer 600" will cause the system to check for +outgoing mail every 10 minutes and attempt to deliver anything it finds. For +an end-user system that is not normally intended as a mail forwarder, you do +not want to set the interval to be too short, as you will be frequently +accessing disk needlessly. An interval of 30 minutes (=1800) is +probably reasonable. You can also "kick" out the mail manually, as described +in section 6.5.1. The suggested command is: + + smtp timer 1800 + + +A.3.10. smtp gateway + + Defines the host to be used as a "smart" mail relay. Any mail sent to a +host not defined in the file "HOSTS.NET" will instead be sent to the gateway +for forwarding. You will have to ask locally if there is a host that is used +as a mail gateway. If so, include this command in AUTOEXEC.NET. + +A.3.11. tcp mss + + Set the TCP maximum segment size in bytes that will be sent on all +outgoing TCP connect requests (SYN segments). This tells the remote end the +size of the + + + - 36 - + + +largest segment (packet) it may send. An mss of 216 will force folks to send +you packets of 256 characters or less (counting the overhead). Suggested +command: + + tcp mss 216 + + +A.3.12. tcp window + + Sets the window parameter, which establishes the maximum number of bytes +that may be outstanding before your system expects an ack. If the window is +twice as big as mss, for example, there will be two active packets on the +channel at any given time. Large values of window are a problem on the air. +Keep mss <= window <= 2*mss. Suggested command: + + tcp window 432 + + +A.3.13. start + + Starts the specified Internet server, allowing remote connection requests. +Suggested commands: + + start ftp + start telnet + start smtp + start finger + + +A.3.14. ax25 digipeat [on|off] + + Controls whether AX.25 packets addressed to this station as a digipeater +will be repeated or not. If you want to operate as a digipeater (for those +poor souls not operating TCP/IP), include the following command: + + ax25 digipeat on + + +A.3.15. ax25 heard [on|off] + + Controls whether the list of call signs heard is updated or not. +Suggested command: + + ax25 heard on + + +A.3.16. ax25 maxframe + + Establishes the maximum number of frames that will be allowed to remain +unacknowledged at one time on AX.25 connections. This number cannot be greater +than 7. Suggested command: + + ax25 maxframe 1 + + + + + - 37 - + + +A.3.17. ax25 paclen + + Limits the AX.25 packet length. This parameter should be less than or +equal to the defined in the attach command. Suggested command: + + ax25 paclen 256 + + +A.3.18. ax25 retry + + Limits the number of successive unsuccessful retransmission attempts on +AX.25 connections. If this limit is exceeded, link re-establishment is +attempted. If this fails "retry" times, then the connection is abandoned and +all queued data is deleted. Suggested command: + + ax25 retry 10 + + +A.3.19. ax25 window + + Sets the number of bytes that can be pending on an AX.25 receive queue. +Suggested command: + + ax25 window 2048 + + +A.3.20. mbox [on|off] + + Establishes whether or not the AX.25 mailbox is on. The mailbox allows +AX.25 packet users to leave a message for you or to establish a keyboard +conversation. Suggested command: + + mbox on + + +A.3.21. log + + Defines the name of the file for server session log entries. Don't +include this command if you don't want to keep a log. The suggested command +is: + + log \spool\net.log + +You should read this file occasionally and then discard it, as it can grow to +be quite large. + +A.4. The Hosts File -- HOSTS.NET + + The file HOSTS.NET, created in the root directory, provides a mapping +between an IP addresses and symbolic hostnames. It is used by NET to look up a +hostname to figure out the correct IP address to use. These hostsnames may be +used in establishing a TCP/IP connection, e.g. it is not necessary to enter +'telnet [44.2.0.98]', but merely 'telnet n6spe'. It is kept in the root +directory + + + + + - 38 - + + + At a minimimum each entry should contain the IP address and callsign. +Subsequent aliases in the same entry should be separated by a single space. +Each entry (IP address) represents a separate and distinct computer address. + + The form of an entry: + + ... + +Note that this is the one case where the IP address does not have to be +enclosed in brackets. A host can have more than one symbolic name. A Tab is +recommended between the IP address and host name. + + Here are some examples of HOSTS.NET entries: + + 44.2.0.98 n6spe shayne + 44.2.0.100 n6gf + 44.96.0.2 wb2sef xt.wb2sef + + + Note that the domain name .AMPR.ORG has been assigned for amateur radio. +By default, we assume that the hostname is the user's callsign in the case +where a user has one system online, and so .AMPR.ORG is the implied +official hostname. If you have more than one machine on the air, distinguish +them by prefixing a familiar name followed by a period, as in "winfree.n3eua" +or "at.n0ccz". + + Note that the use of a callsign as a host name has nothing to do with the +"mycall" parameter. It is convenient to use the callsign as a hostname, and +required to use the callsign for "mycall" to properly identify a station +according to FCC rules. + + If there is an established group of TCP/IP users in your area, they +probably maintain an up-to-date HOSTS.NET table that is made available by an +ftp file transfer. + +A.5. Mail Configuration File -- BM.RC + + The BM.RC file, created in the root directory, provides BM with the +configuration needed for the operation of the mailer. + + The format for each line in the BM.RC file is: + + + +The variables described below are valid in the BM.RC file. + +A.5.1. host + + Sets the local hostname for use in the mail headers. This is a required +field. This should match the hostname definition in AUTOEXEC.NET. + +A.5.2. user + + Defines the user name of the person who is sending mail. This is also +used + + + - 39 - + + +as the default mailbox for reading mail. On the AMPRNET this is usually set to +your call. There is a DOS limit of 8 characters for the user name. + +A.5.3. edit \ + + Defines the name of your favorite editor which can be used to construct +and edit the text of outgoing messages. is the name of the editor +and is the name of the directory where it is stored on the host +computer. The use of edit is optional. + +A.5.4. fullname + + Provides your full name to the mailer for use in the comment portion of +the "From:" header line. The use of fullname is optional. + +A.5.5. reply + + Defines the address where you wish to receive replies to messages sent. +This option is useful if you are operating your pc on a local area network and +would like your mail replies sent to a more "well known host," for exampe, your +local switch. The address specified by reply is used to generate a "Reply-To:" +header in outbound mail. The "Reply-To:" header overrides the "From:" header +which is the address normally used to reply to mail. This field is optional. + +A.5.6. mbox + + Specifies the default file to be used for the "save" command, for saving +received messages. This file is in the same format as a mailbox and may later +be viewed using the -f option of BM. If this option is not used then the +default file name is set to mbox. + +A.5.7. record + + If defined, a copy of each message sent will be saved in . + +A.5.8. folder + + If defined folder contains the directory used by the save command. If not +defined, files will be saved in the current directory. + +A.5.9. smtp + + Defines the directory containing the mailbox files. The default directory +is \spool\mail on the current drive. + +A.5.10. Example BM.RC File + + Here is an example of a BM.RC file: + + + + + + + + + + - 40 - + + + + host n6gf.ampr.org + user n6gf + reply n6gf%n6gf@eyolo + edit \bin\vi + fullname Gary Ford + mbox rcv.txt + folder \ford\packet + smtp \spool\mail + + +A.6. Time Zone Environment Variable + + The time zone used in mail headers is obtained from the DOS environment +variable TZ. An example TZ setting is: + + set TZ=EDT4 + +It should be added to your AUTOEXEC.BAT file. The first 3 characters are the +time zone and the fourth character is the number of hours from GMT time. If TZ +is not set, GMT is assumed. + +A.7. The Alias File -- ALIAS + + The ALIAS file, created in the root directory, provides an easy way to +maintain mailing lists. It allows you to send mail to an easily-remembered +name, instead of a complicated address. An alias can be any string of +characters not containing the "@" symbol. The format for an entry in the alias +file is: + + + ... + +Note that a long list of aliases can be continued on an additional line by +placing a tab or space in the first position of the continuation line. + + Some example aliases are: + + spe n6spe%n6spe@eyolo + dave nn2z@nn2z + # mail to local eyolo users + ey-gang n6gf%n6gf@eyolo n6spe%n6spe@eyolo + +In the above example, when specifying ey-gang as the recipient, BM will expand +the alias into the list of recipients from the alias file. + + An alias may not contain another alias from the same file. However, an +alias may contain a recipient name that is an alias on the local host or a +remote host. For example, if the host "eyolo" contains the following alias in +addition to the aliases above: + + # gang mail + gang se-gang@sesac nc-gang@ncsac ey-gang@eyolo + + + + + - 41 - + + +then mail addressed to "gang" will be forwarded to the alias "se-gang" at the +host "sesac," to the alias "nc-gang" at the host "ncsac" and to the alias "ey- +gang" on "eyolo" itself. The mail forwarded to "ey-gang" will then be +forwarded again, as indicated by the example alias above for "ey-gang." + + The use of an ALIAS file is optional. If you are just getting started +with TCP/IP, you might want to wait until you are more familiar with mail +addressing before you establish this file. More information on mail +addressing is given in section 6.4. + + Your local TCP/IP user group may maintain an alias file, so you should +inquire as to its availability. + +A.8. The FTP Users File -- FTPUSERS + + Since MS-DOS was designed as a single-user operating system, it provides +no access control; all files can be read, written or deleted by the local +user. It is usually undesirable to give such open access to a system to +remote network users. The FTP server therefore provides its own access +control mechanism. + + The file "FTPUSERS," created in the root directory, is used to control +remote FTP access. The default is NO access; if this file does not exist, the +FTP server will be unusable. A remote user must first "log in" to the system, +giving a valid name and password listed in FTPUSERS, before he or she can +transfer files. + + Each entry in FTPUSERS consists of a single line of the form + + ... + +There must be exactly one space between each field. Comment lines are begun +with "#" in column one. is the user's assigned login name. +"password" is the required password. Note that this is transmitted in plain +text; therefore it is not a good idea to give general write permission to the +root directory. A password of "*" (a single asterisk) means that any password +is acceptable. + + is the name of a directory that may be accessed by the remote +user. The remote user will also have access to the subdirectories of this +directory. The directory name must be absolute, i.e. it must begin from the +root directory (\). + + is a decimal number granting permission for read, write, and +overwrite and delete operations for and its subdirectories. For +a permission of 1, the user is allowed to read a file subject to the directory +access restrictions. A permission of 2 allows a user to write a new file if +it does not overwrite an existing file. A permission of 4 allows a user to +write a file even if it overwrites an existing file, and in addition he or she +may delete files. Again, all operations are allowed subject to the directory +access restrictions. Permissions may be combined by adding permission values. +For example, 3 (= 2 + 1) means that the user is given read and create +permission, but not overwrite/delete permission. Similarly, 7 (= 3 + 2 + 1) +means that the user is given read, write, overwrite and delete privileges. + + + + + - 42 - + + + It is a standard convention to keep a repository of downloadable files in +the directory \public and to allow users to logon with the username +"anonymous" with no password to access these files. In some areas, the public +access username is "guest." Every system providing an FTP server is +encouraged to provide restricted access to "anonymous" and "guest" users. The +appropriate FTPUSERS entries allowing the users "anonymous" and "guest" to +read files under \public and subdirectories, but not to write, overwrite or +delete any files are: + + anonymous * \public 1 + guest * \public 1 + +If you want to allow these users to write files as well, but not to overwrite +or delete files, change the permission to 3. + + You might want to give a friend access to both his or her own directory as +well as the public access directory. For example: + + n6spe test \users\n6spe 7 \public 3 + +This gives user "n6spe," with password "test," read, write, overwrite and +delete privileges for files under \users\n6spe and read and write privileges +for files under \public; he may not access files in other directories. + +A.9. Finger Files + + Finger files are information files having the name .txt, stored in +the \finger directory. It is common practice to set up a file for each of the +users on the host. Thus, if n6gf is a user, he should have an information file +named "n6gf.txt." This file is edited with a text editor and should include +information about the user such as his or her full name, address, and phone +number. Additionally, information about the packet system, such as computer, +TCP/IP software, TNC, radio, and antenna could be included. Using the finger +command, as described in section 9.2, the remote user can access the names of +the finger files and then have them displayed on his or her console. Thus, you +could have a separate information file for your system and include general +information about the files available for downloading and your usual hours of +operation. There is no specified format for these files. They will be +displayed on the remote host just as they appear in the file. + + + + + + + + + + + + + + + + + + - 43 - + + + Appendix B. NET Command Descriptions + + Given below are all of the commands listed by the "help" command in NET, +with concise descriptions of these commands. If the command is described in +more detail in this guide, the section(s) in which it is referenced is given +in parentheses. An asterisk (*) after the section reference indicates that +not all of the subcommands have been described in this guide. + +! Suspend NET, return to DOS. (4.3) + +arp Address Resolution Protocol. Connects IP addresses with callsigns. + +attach Configure and attach a hardware interface. (A.3.5)* + +ax25 AX.25 (normal packet) services. (4.2, 8., 9.1, A.3.3, A.3.14-A.3.19) + +cd Change directory. (4.4.3) + +close Close a session. (5.4, 8.3) + +connect AX.25 connect request. (8.1) + +dir List contents of a directory. (4.4.4) + +disconnect Close a session (alias for close). (5.4, 8.3) + +echo Controls telnet keyboard echo. + +eol Controls telnet end of line behavior. + +escape Controls command-mode escape command (not available on PC). + +exit Exit NET and return to DOS. (4.3, 4.7) + +finger Finger information files on remote host. (9.2, A.9) + +forward Forward traffic to another hardware interface. + +ftp File Transfer Protocol. (4.2, 7.) + +help List NET commands. (4.4.1) + +hostname Display or set hostname. (A.3.2) + +kick Force an immediate retransmission on a session. + +log Controls logging of server sessions. (A.3.21) + +ip Internet Protocol. (A.3.4, A.3.6)* + +memstat Displays internal free memory list. + +mbox AX.25 mailbox. (8.4, A.3.20) + + + + + + + + + + + - 44 - + + +mode Controls transmission mode on AX.25 interfaces. + +mulport Controls routing of data between interfaces. + +netrom Controls NET/ROM services. + +nrstat Displays NET/ROM statistics. + +param Invokes a device-specific control routine. (A.3.7)* + +ping Query a remote host. (9.3) + +pwd Display name of current directory. (4.4.2) + +record Record telnet or AX.25 session to a disk file. (5.3.1, 8.2.1) + +reset Reset a session. + +route Controls the routing table. (10., A.3.8) + +session Controls sessions selection. (4.5, 5.2, 8.4) + +shell Suspend NET, return to DOS. Alias for ! (4.3) + +smtp Simple Mail Transport Protocol. (6.5, A.3.9, A.3.10)* + +start Start a server. (4.4.5, A.3.13) + +stop Stop a server. (4.4.6) + +tcp Transport Control Protocol. (10.1, A.3.11, A.3.12) + +telnet Telnet keyboard-to-keyboard protocol. (4.2, 5.) + +trace Monitor packet traffic. (9.4) + +udp User datagram protocol. + +upload Upload ASCII file to telnet or AX.25 session. (5.3.1, 8.2.2) + +? List NET commands. Alias for help. (4.4.1) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Beginner's Guide to TCP/IP on the Amateur Packet + Radio Network Using the KA9Q Internet Software + + Version 1.0 + May 9, 1990 + + Documenting + NET 890421.1 + BM 3.3.1 + + + + + + + + + + + by + + Gary E. Ford, N6GF + + + + + + + + Copyright 1990 by Gary E. Ford. + All Rights Reserved. + + This Document may be reproduced in whole + or in part for any non-commercial purpose, + as long as credit is given to the author. + + + + + + + + + + + + + + + + + + + + Beginner's Guide to TCP/IP on the Amateur Packet + Radio Network Using the KA9Q Internet Software + + Contents + + Page + 1. Introduction.................................................. 1 + 1.1 Objectives of This Guide.................................. 3 + 1.2 Acknowledgements.......................................... 3 + + 2. Necessary Resources........................................... 3 + 2.1 Computer.................................................. 3 + 2.2 TNC....................................................... 4 + 2.3 Radio..................................................... 4 + 2.4 IP Address................................................ 5 + 2.5 KA9Q Software............................................. 5 + + 3. Definitions, Conventions, and Notation........................ 6 + 3.1 Conventions Used in this Guide............................ 6 + 3.2 Notation Used in this Guide............................... 7 + + 4. NET........................................................... 7 + 4.1 Executing NET............................................. 8 + 4.2 Command and Converse Modes................................ 8 + 4.3 Executing DOS Commands.................................... 8 + 4.4 Utility Commands.......................................... 9 + 4.5 Managing Multiple Sessions................................10 + 4.6 Abbreviating NET Command Names............................10 + 4.7 Exiting NET...............................................10 + + 5. Telnet........................................................11 + 5.1 Initiating a Telnet Session...............................11 + 5.2 Accepting a Telnet Session................................11 + 5.3 File Upload and Download..................................11 + 5.4 Closing a Telnet Session..................................12 + + 6. Mail..........................................................12 + 6.1 Executing BM..............................................12 + 6.2 BM Main Menu Commands.....................................13 + 6.3 Text Input Commands.......................................16 + 6.4 Mail Addresses............................................16 + 6.5 SMTP......................................................17 + + 7. File Transfer.................................................18 + 7.1 Ftp Command...............................................18 + 7.2 Ftp Converse Mode Commands................................18 + 7.3 Ftp Example...............................................20 + + 8. AX.25 Services................................................22 + 8.1 Initiating an AX.25 Connection............................22 + 8.2 File Upload and Download..................................22 + 8.3 Terminating an AX.25 Connection...........................23 + 8.4 AX.25 mailbox.............................................23 + + + + + + + + + + + + + + 9. Monitoring Activity............................................24 + 9.1 ax25 heard................................................24 + 9.2 finger....................................................24 + 9.3 ping......................................................25 + 9.4 trace.....................................................26 + + 10. Advanced Topics...............................................27 + 10.1 TCP......................................................27 + + Appendix A. Installation of NET and BM...........................30 + A.1 Installation Overview.....................................30 + A.2 File Structure............................................30 + A.3 NET Configuration File -- AUTOEXEC.NET....................31 + A.4 The Hosts File -- HOSTS.NET...............................37 + A.5 Mail Configuration File -- BM.RC..........................38 + A.6 Time Zone Environment Variable............................40 + A.7 The Alias File -- ALIAS...................................40 + A.8 The FTP Users File -- FTPUSERS............................41 + A.9 Finger Files..............................................42 + + Appendix B. NET Command Descriptions.............................43 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/nos/doc/ka9qbgn/NOSCMD16.TXT b/src/nos/doc/ka9qbgn/NOSCMD16.TXT new file mode 100644 index 00000000..48fa744c --- /dev/null +++ b/src/nos/doc/ka9qbgn/NOSCMD16.TXT @@ -0,0 +1,714 @@ + +============================ +TCP/IP COMMAND SET REFERENCE +============================ + +Version 1.6: 23 January 1991 + +Document Reference: "NRWCMD16" + + +by Ian Wade, G3NRW + + +7 Daubeney Close +Harlington +Dunstable +Bedfordshire +LU5 6NF, UK + + +IP: 44.131.5.2 +AX.25: G3NRW @ GB7BIL + + +Copyright (C) 1990, 1991 Ian Wade, G3NRW + +All rights reserved. No part of this document may be reproduced or +transmitted in any form or by any means, electronic or mechanical, +including photocopying, recording or by any information storage and +retrieval system for commercial purposes or resale or barter without +written permission from the author. + +This document may be reproduced in whole or in part for any non- +commercial amateur radio purpose as long as credit is given to the +author. + + +ABSTRACT +======== + +This document contains details of all of the commands to be found in +the following TCP/IP Network Operating System ("NOS") packages: + + KA9Q/PA0GRI: version 900819 + KA9Q/G1EMM: version KH113014 + + +CHANGES FROM PREVIOUS VERSION +============================= + +Minor corrections to the "route" command syntax. + +Familiarity with the basic functions of the "NOS" packages is assumed. +This document is intended only as a quick reference to the TCP/IP +command set, and does not describe how individual commands work. + + +RATIONALISATION OF PARAMETER DESCRIPTIONS +========================================= + +Because the "NOS" packages contain software modules originating from +several different sources, the documentation which describes them +inevitably contains a number of inconsistencies. For example, the +words "label" and "interface" apparently describe different objects, +whereas in actuality they are the same thing. On the other hand, the +meaning of the word "address" used in many commands differs from +command to command. + +In this document an attempt has been made to rationalise the meaning +of these parameters, to produce a consistent command set within and +across the two "NOS" packages. + +The principal parameters which have caused confusion in the past are +to do with names, addresses and interfaces. These are now defined +as follows: + + an AX.25 MYCALL callsign (e.g. "G3NRW-1") + a computer name (e.g. "g3nrw" or "g3nrw.ampr.org") + an Internet address (e.g. "44.131.5.2") + or + a user at a computer (e.g. "ian") + a device interface name (e.g. "pk0" or "ax0") + a device I/O base address (e.g. "0x3f8") + an IRQ level (e.g. "4") + +(Note that the word "hostid" is not used in this document, to avoid +confusion with the Unix command of the same name). + + +TCP/IP "NOS" COMMAND SET REFERENCE +================================== + +The rest of this document specifies the complete "NOS" command set +for the KA9Q/PA0GRI and KA9Q/G1EMM packages. + +The extreme left-hand column of each line is coded as follows: + +i | signifies a command in the KA9Q/PA0GRI version of "NOS" + m| signifies a command in the KA9Q/G1EMM version of "NOS" + +The extreme right-hand column shows the default values of command +parameters. + + +Version| |Default + _____| |_______ + | | +im| ? (help: list of top-level "nos>" commands) | +im| ! (break out to shell) | +im| # (comment line) | + + | | +im| abort [] (FTP) | + | | +im| arp | + | | +i | arp add ether|ax25|netrom | + | | | + | | + m| arp add ether|ax25|netrom|arcnet | + | | | + | | +i | arp drop ether|ax25|netrom | + | | + m| arp drop ether|ax25|netrom|arcnet | + | | +im| arp flush | + | | +i | arp publish ether|ax25|netrom | + | | | + | | + m| arp publish ether|ax25|netrom|arcnet | + | | | + | | +im| asystat | + | | +i | attach 3c500 arpa | + | [ipaddress] | + | | +i | attach asy slip|ax25|nrs | + | | + | [ipaddress] | + | | + m| attach asy slip|ax25|nrs|ppp | + | | + | [options] | + | | + m| attach drsi ax25 | + | | + | | + | [] [] | + | | + m| attach eagle ax25 | + | | + | [] [] | + | | + m| attach hapn ax25 | + | csma|full | + | [] | + | | +im| attach hs ax25 | + | | + | [] | + | [] | + | | + m| attach kiss | + | [] | + | | +im| attach netrom | + | | +im| attach packet | + | [] | + | | + m| attach pc100 ax25 | + | | + | [] [] | + | | +im| attach scc init | + | | + | [p] | + | [hdwe] [] | + | | +im| attach scc slip|kiss|nrs|ax25 | + | | + | [] | + | | + m| attended [off|on] |on + | | + m| ax25 bc | + m| ax25 bcinterval [] |0 + m| ax25 bctext [""] | +im| ax25 blimit [] |30 +im| ax25 digipeat [on|off] |on +im| ax25 flush | +im| ax25 heard | +im| ax25 irtt [] |5000 +im| ax25 kick <&AXB> | +im| ax25 maxframe [] |1 +im| ax25 mycall [] | +im| ax25 paclen [] |256 +im| ax25 pthresh [] |128 +im| ax25 reset <&AXB> | +im| ax25 retry [] |10 + | | +im| ax25 route | +im| ax25 route add [ ...] | +im| ax25 route drop | + m| ax25 route mode [vc|datagm|interface] | + | | +im| ax25 status [<&AXB>] | +im| ax25 t3 [] |0 + m| ax25 t4 [] |300 + m| ax25 timertype [original|linear|exponential] |exp +i | ax25 version [1|2] |1 + m| ax25 version [1|2] |2 +im| ax25 window [] |2048 + | | + + | | +im| bbs | + | | +im| Help ? (command list) | +im| Area A | +im| Bye B | +im| Chat C | +im| Download D | +im| Escape E [] |^X +im| Finger F [] | +im| Gateway G [...]| +im| Help H (full helpfile) | + m| Information I | +im| Heard J | +im| Kill K ... | +im| List L [ ...] | +im| Netrom N | +im| Read R [ ...] | +im| Send S [@ ] [< ] | +im| [$] | +im| Telnet T [] | +im| Upload U | + m| Verbose V | +im| What W [] | +im| Zap Z | + | | +im| Remote @ | +im| Expert [] | +i | (unknown) > | +im| (unknown) " | +im| (unknown) # | + | | + + | | +im| cd [] | + | | +im| close [] | + | | + m| comm | + | | +im| connect [ ...]| + | | + + | | +im| delete | + | | +im| detach | + | | + m| dialer | + | | + | | +im| dir [ | ] | + | | +im| disconnect [] (AX.25) | + | | +im| domain addserver [ ...] | + | | +i | domain addserver (starts server) | + | | +i | domain bootp [filename] | + | | + m| domain cache clean [off|on] |off + m| domain cache list | + m| domain cache size [] |20 + m| domain cache wait [] | + | | +i | domain debug [off|on] |off +im| domain dropserver [ ...] | + m| domain list | +i | domain listservers | +i | domain load [] | +i | domain loopback [off|on] |off + m| domain maxwait [] |60 +i | domain nslookup | +i | domain retries [] |0 + m| domain retry [] | +i | domain save | +im| domain suffix [] | +i | domain timeout [] |30 +im| domain trace [off|on] |off + m| domain translate [off|on] |off + m| domain verbose [off|on] |on + | | + m| drsistat | + | | + m| dump | <.> [] | + | | + + | | + m| eaglestat | + | | +im| echo [accept|refuse] (telnet) |accept + | | +i | eol [unix|standard] (telnet) |standd + m| eol [standard|null] (telnet) |standd + | | + m| escape (always F10 on PC) |0x1d + | | +i | etherstat | + | | +im| exit | + | | + + | | +im| finger []@ | + | (no spaces between parameters) | + | | +i | fkey | +i | fkey [ | "" ] | + | (terminate string with ^M for CR) | + | | + | f1 59 sf1 84 cf1 94 af1 104 pgup 73 | + | f2 60 sf2 85 cf2 95 af2 105 pgdn 81 | + | f3 61 sf3 86 cf3 96 af3 106 home 71 | + | f4 62 sf4 87 cf4 97 af4 107 end 79 | + | f5 63 sf5 88 cf5 98 af5 108 arup 72 | + | f6 64 sf6 89 cf6 99 af6 109 ardn 80 | + | f7 65 sf7 90 cf7 100 af7 110 ar l 75 | + | f8 66 sf8 91 cf8 101 af8 111 ar r 77 | + | f9 67 sf9 92 cf9 102 af9 112 ins 82 | + | f10 68 sf10 93 cf10 103 af10 113 del 83 | + | | + | | +im| ftp | + | | + | ascii | + | batch [off|on] | + | binary | + | cd [

    ] | + | dele | + | dir [ | [] ] | + | get [] | + | h | + | list [ | [] ] | + | ls [ | [] ] | + | mget [ ...] | + | mkdir | + | mput [ ...] | + | nlst [ | [] ] | + | pass | + | put [] | + | pwd [] | + | quit | + | rmdir | + | type [a | i | l ] |a + | user | + | | +im| F10 (to escape to "nos" command level) | + | | + + | | + m| hapnstat | +im| help (list of top-level "nos>" commands) | + | | +im| hopcheck check | +im| hopcheck maxttl [] |30 +im| hopcheck maxwait [] |5 +im| hopcheck queries [] |3 +im| hopcheck trace [off|on] |off + | | +im| hostname [] | + | | +im| hs | + | | + + | | +im| icmp echo [off|on] (must be "on" for one-shot pings) |on +im| icmp status | +im| icmp trace [off|on] |off + | | +im| ifconfig [] | +im| ifconfig broadcast | +im| ifconfig encapsulation none|ax25|slip|netrom | +im| ifconfig forward | +im| ifconfig ipaddress | +im| ifconfig linkaddress | +im| ifconfig mtu | +im| ifconfig netmask [0x] | +im| ifconfig rxbuf | + | | +i | info | + | | +im| ip address [ | ] | +im| ip rtimer [] |30 +im| ip status | +im| ip ttl [] |255 + | | + m| isat [off|on] |off + | | + + | | +im| kick [] | + | | + + | | +im| log [ | stop] | + | | + + | | + m| mail | + | | +im| mbox | + m| mbox attend [off|on] | + m| mbox kick | + m| mbox maxmsg [] |200 + m| mbox motd [""] | + m| mbox status | + m| mbox timer [] | + m| mbox tiptimeout [] | + | | +im| mem free | +im| mem garbage | + m| mem ifbufsize [] |2048 + m| mem nibufs [] |5 +im| mem sizes | +im| mem status | +im| mem thresh [] |8192 + | | +im| mkdir | + | | +im| mode [vc|datagram] (AX.25) | + | | +im| more [ ...] (q: quit) | + | (space: next page) | + | (CR: next line) | + m| motd [""] | + | | + m| multitask [off|on] |on + | | + + | | +im| netrom acktime [] |3000 +im| netrom bcnodes | +im| netrom connect | | +im| netrom choketime [] |180000 + m| netrom derate [off|on] |on +im| netrom interface | +im| netrom irtt [] |15000 +im| netrom kick <&CB> | + m| netrom minquality [] |10 + | | +im| netrom nodefilter | +im| netrom nodefilter add | +im| netrom nodefilter drop | +im| netrom nodefilter mode [none | accept | reject] | + | | +im| netrom nodetimer [] |0 +im| netrom obsotimer [] |0 + m| netrom promiscuous [off | on] |off +im| netrom qlimit [] |2048 +im| netrom reset <&CB> | +im| netrom retries [] |10 + | | +im| netrom route | +im| netrom route add | + | | +im| netrom route drop | +im| netrom route info | + | | +im| netrom status | + m| netrom timertype [linear | exponential] |exp +i | netrom ttl [] |64 + m| netrom ttl [] |10 +im| netrom user [] | +im| netrom verbose [off | on] |off +im| netrom window [] |4 + | | +im| nntp addserver | + | [] [ [ ...]] | + | | +im| nntp directory [spool | control ] | +im| nntp dropserver | +im| nntp groups [ ... ] | +im| nntp kick | +im| nntp listservers | +im| nntp trace [] (0: no trace) |1 + | (1: serious errors) | + | (2: transient errors) | + | (3: session progress) | + | (4: received articles) | + | (5: errors) | + | | +im| nrstat | + | | + + | | +im| param [ ...] | + | | +im| param 0 | +im| param 1 (10 mS units) | +im| param 2 (0-255) | +im| param 3 (10 mS units) | +im| param 4 (10 mS units) | +im| param 5 (n=0: half duplex) | + | (n>0: full duplex) | + | | +im| param 255 (exit KISS mode) | + | | +im| ping [ [ []]] | + | | +im| pop mailbox | +im| pop mailhost [] | +im| pop kick | + m| pop quiet [off|on] |off +im| pop timer [] |0 +im| pop userdata [ ] | + | | +im| ps | + | | +im| pwd [] | + | | + + | | +im| record [ | off] |off + | | +im| remote [-p port] [-k key] [-a kickaddr] | + | exit|reset|kick | +im| remote -s | + | | +im| rename | + | | +im| reset [] | + | | +im| rip accept | + | | +im| rip add [] | + | (1: include route to self) | + | (2: split horizon) | + | (4: triggered update) | + | | +im| rip drop | +im| rip merge [off|on] |off +im| rip refuse | +im| rip request | +im| rip status | +im| rip trace [] (0: no trace) |0 + | (1: changes only) | + | (2: full trace) | + | | +i | rlogin | +im| rmdir | + | | +im| route | +im| route add [/]|default | + | [gateway_host []] | + | | +im| route addprivate [/] | + | [gateway_host []] | + | | +im| route drop [/] | +im| route flush | +im| route lookup | + | | + m| rspf interface [ ] | + | (needs ifconfig broadcast 44.255.255.255) | + | | + m| rspf message [<"message_string">] | + m| rspf maxping [] |5 + m| rspf mode [vc | datagram | none] |none + m| rspf rrhtimer [] |0 + m| rspf routes | + m| rspf status | + m| rspf suspecttimer [] | + m| rspf timer [] |0 + | | + + | | +im| sccstat | + | | +im| session [] | + | | +im| shell | + | | + m| smtp batch [off|on] |off +im| smtp gateway [] | +im| smtp mode [ queue | route ] |route +im| smtp kick | +im| smtp kill | +im| smtp list | +im| smtp maxclients [] |10 +i | smtp mxlookup [off|on] |off + m| smtp quiet [off|on] |off +im| smtp timer [] (0: trace off) |0 + | (1: trace on) | + | | +im| socket [] | + | | + m| source | + | | +im| start ax25|discard|echo|finger|ftp|netrom|pop | + | remote|rip|smtp|telnet|ttylink | + m| start tip | + | | + m| status | + | | +im| stop ax25|discard|echo|finger|ftp|netrom|pop | + | remote|rip|smtp|telnet|ttylink | + m| stop tip | + | | + + | | + m| tail | + | | +im| tcp irtt [] |5000 +im| tcp kick <&TCB> | +im| tcp mss [] |512 +im| tcp reset <&TCB> | +im| tcp rtt <&TCB> | +im| tcp status [<&TCB>] | + m| tcp syndata [off|on] |off + m| tcp timertype [linear | exponential] |exp +im| tcp trace [off | on] |off +im| tcp window [] |2048 + | | +im| telnet [] |23 + | | + m| third-party [off | on] |on + | | +im| tip | + | | +i | ttylink [] |87 + | | +im| trace [ []]] | + | | + | BTIO FLAGS: | + | | + | B=0 Broadcast filter off (trace all packets) | + | B=1 Broadcast filter on (ignore broadcasts) | + | | + | T=0 Display protocol headers only | + | T=1 Display headers + ASCII text | + | T=2 Display headers + ASCII text + hex | + | | + | I=0 Ignore input packets | + | I=1 Trace input packets | + | | + | O=0 Ignore output packets | + | O=1 Trace output packets | + | | + + | | +im| udp status | + | | +im| upload | + | | + + | | +im| watch [off|on] |on + | | + m| watchdog [off|on] |off + | | + +______________________________________________________________________ + + + +NOS STARTUP OPTIONS +=================== + + nos [-t] (trace startup) + [-d ] + [-s ] + [-m ] + [ ] + + +/ftpusers PERMISSIONS +===================== + + 1 read file } + 2 create new file } "ftp" and "telnet" + 4 write/delete file } + + 8 AX.25 Gateway access } + 16 Telnet Gateway access } + 32 NET/ROM Access } "telnet" only + 64 Remote control } +128 Disallow access } + + +WELL-KNOWN PORT NUMBERS (decimal) +================================= + + 0 reserved 23 TELNET 79 FINGER + 1-4 unassigned 25 SMTP 87 TTYLINK + 5 RJE 37 TIME 95 SUPDUP + 7 ECHO 39 RLP 101 HOSTNAME + 9 DISCARD 42 NAMESERVER 102 ISO-TSAP + 11 USERS 43 NICNAME 109 POP-2 + 13 DAYTIME 53 DOMAIN 113 AUTH + 15 NETSTAT 67 BOOTPS 117 UUCP-PATH + 17 QUOTE 68 BOOTPC 119 NNTP + 19 CHARGEN 69 TFTP 513 RLOGIN + 20 FTP-data 75 private dialout + 21 FTP 77 private rje diff --git a/src/nos/doc/ka9qbgn/NRMAN.TXT b/src/nos/doc/ka9qbgn/NRMAN.TXT new file mode 100644 index 00000000..b7396492 --- /dev/null +++ b/src/nos/doc/ka9qbgn/NRMAN.TXT @@ -0,0 +1,423 @@ + + + NET/ROM support in the KA9Q NET Package + + Dan Frank, W9NK + +INTRODUCTION + + The NET/ROM support for the KA9Q package serves three purposes: + + 1) Existing NET/ROM networks may be used to send IP traffic. + + 2) NET may be used as a NET/ROM packet switch. + + 3) NET may be used to communicate with NET/ROM nodes, and its + mailbox facility can accept connects over the NET/ROM network. + + +SETTING UP THE NET/ROM INTERFACE + + No physical interface is completely dedicated to net/rom, which is as +it should be. You attach all your AX.25 interfaces, of whatever sort. +Then you attach the net/rom pseudo-interface ("attach netrom"). Then +you identify to the net/rom software those interfaces you want to allow +it to use, with the "netrom interface" command. The format of this +command is: + + netrom interface ax0 #ipnode 192 + +The first argument is the name of the previously attached interface you +want to use. The second argument is the alias of your node, to be used in +your routing broadcasts. The alias is never used for anything else (as +you will see!). The last number is the net/rom quality figure. This is +used in computing the route qualities; it represents the contribution of +this interface to the overall computation. For a 1200 baud half-duplex +connection, 192 is the right number. + + You need a netrom interface command for every interface you're going +to use with net/rom. + + +TRACING ON THE NET/ROM INTERFACE + + If you want to trace your NET/ROM datagrams, don't try turning +on trace mode for the "netrom" interface. Nothing will break, but +nothing will happen. You should trace the individual AX.25 interfaces +instead. + + +ROUTING BROADCASTS + + Once you have set up your interfaces, you need to set some timers. +There are two: the nodes broadcast interval timer, and the obsolescence +timer. These are set in seconds, like the smtp timer. You should usually +set them to an hour. You can set them to something different, if you want. +If your local net/rom nodes broadcast every hour, but you want to do so +every ten minutes, you can say: + + netrom nodetimer 600 + netrom obsotimer 3600 + +Every time the obsotimer kicks, the obsolescence counts for all non-permanent +entries are decremented by one. When the count for an entry falls below +five, it is no longer broadcast. When it falls to 0, it is removed. The +count is initialized at 6. These will eventually be settable parameters; +you can adjust them now by changing the initializers for the variables +in the source file. + + When you first come on the air, you can send out nodes broadcasts to +tell the local nodes that you are available. Use the command: + + netrom bcnodes ax0 + +where ax0 is the interface on which you want to send the broadcast. Do +this for every interface on which you want to do this. + + By default, the NET/ROM code does not broadcast the contents of your +routing table. This is as it should be, since usually we just want to +be the endpoints of communications rather than relaying NET/ROM traffic. +If you want to be a switch station, include the command: + + netrom verbose yes + +in your autoexec. + + Sometimes you can hear broadcasts from nodes that can't hear you. If +your routing table gets filled with these unusable routes, your node will +grind to a halt. The solution to this is node broadcast filtering, via +the netrom nodefilter command. There is a filter list, which contains +a list of callsigns and interfaces. Then there is a filter mode, which +indicates what to do with the list. + + If the filter mode is "none", no filtering is done. If it is "accept", +then only broadcasts from the indicated stations on the indicated +interfaces are accepted. If it is "reject", then all broadcasts +except those from the listed stations on the listed interfaces are +accepted. + + Because the net/rom code cannot at this time recognize unusable +routes and try alternates, I strongly recommend use of the filter +command to restrict broadcast acceptance to those nodes which you +know you can reach. + + +THE NET/ROM ROUTING TABLE + + The next net/rom commands are those used for maintaining +the routing table. They fall under the "netrom route" subcommand. +"netrom add" adds a permanent entry to the routing table. Its format +is: + + netrom route add #foo w9foo ax0 192 w9rly + +This command adds an entry for w9foo, whose alias is #foo, route +quality 192, via w9rly on interface ax0. Let's talk about what this +means. w9foo is the *destination* node, the one to whom you want +the packets routed by the net/rom network. w9rly is your *neighbor*, +the net/rom node to which you pass the packet to be forwarded. Since +w9rly may appear on more than one interface (the callsign may be used +by more than one net/rom node on different bands), we specify that +we are to use ax0 to send the packet. + + With net/rom, like IP, we don't know exactly what route a packet +will take to its destination. We only know the name of a neighbor +which has indicated a willingness to forward that packet (of course, +the neighbor may be the destination itself, but that's unlikely in +our application). Net/rom sends the packet to the neighbor, with a +network header specifying our callsign and that of the ultimate +destination (in this case w9foo). + + We can use the netrom route add command to establish a digipeater +path to the neighbor. For example: + + netrom route add #foo w9foo ax0 192 w9rly wd9igi + +This will cause us to use wd9igi as a digipeater in establishing our +connection to the net/rom node w9rly. + + To drop the route to w9foo, you would type + + netrom route drop w9foo w9rly ax0 + + To see the contents of your routing table, you may type + + netrom route + +and to see the routing entries for an individual station you can type + + netrom route info + +You may not use an alias as an argument to the netrom route info command. + + I can not stress enough that "route add" and "netrom route add" are two +different commands, with different purposes. In general, you only need a +"netrom route add" if you need to add a route to a net/rom node via a +digipeater path. If you find yourself using this command, ask yourself, +"Why am I doing this?" Many people do not understand that net/rom does +automatic routing (well, sort of :-)). + + +THE IMPORTANCE OF THE ROUTING TABLE + + The NET/ROM routing table is analogous to the IP routing table: if +there is nothing in it, your NET/ROM traffic will not go out. You must +either manually enter a list of routes (perhaps via your autoexec.net) +or wait to receive routing broadcasts from your neighbors before your +NET/ROM traffic will leave your station. + + If you go to send packets via NET/ROM and nothing happens, even if +you have trace mode on, make sure that the destination node is in your +NET/ROM routing table. If sending IP traffic, double check the ARP table +for an appropriate NET/ROM ARP entry for the destination node (see below +for more information on the use of the ARP table). The ARP table is not +used for NET/ROM transport routing. + + +INTERFACING WITH NET/ROMS USING YOUR SERIAL PORT + + What if you have a net/rom node or nodes, and you'd like to attach +them to your computer via their serial interfaces, and use net as a +packet switch? It's very easy: you have to attach those interfaces, +using the "attach asy" command, but specifying type "nrs" instead of +"slip" or "kiss". "nrs" is the net/rom serial framing protocol, which +is like KISS, but uses different framing characters and has an 8-bit +checksum. + + When you attach an nrs interface, it can be used for passing IP +datagrams or AX.25 frames over serial lines or modems. To use it +for net/rom, you have to identify it to the netrom code just like +any other interface, with the "netrom interface" command. + + +THE TIME TO LIVE INITIALIZER + + The "netrom ttl" command allows setting of the time-to-live +initializer for NET/ROM datagrams. I recommend a value of 16 +for most networks. Use more if you expect to go more than 16 hops. +The default is 64. + + The purpose of the ttl initializer is to prevent a packet from +getting caught forever in routing loops. Every router who handles +the packet decrements the ttl field of the network datagram before +sending it on, and when it reaches 0 it is discarded. + + +USING NET/ROM SUPPORT FOR IP + + Now you know all the commands, but how do we actually use net/rom +for IP communications? This takes two steps: + + Step one: update the routing table. In all likelihood, you will +use net/rom to gateway two IP subnets. So, you'll probably want to +identify a station on each end as a gateway. Let's say we're on the +Milwaukee subnet, and we want to talk to someone in Madison. If +we're not the gateway, we just have a routing table entry like this: + + route add [44.92.0.0]/24 ax0 wg9ate-pc.ampr + +This specifies that wg9ate should get all packets for the 44.92.0.x +subnet via interface ax0. + + Wg9ate has this routing table entry: + + route add [44.92.0.0]/24 netrom w9mad-pc.ampr + +(presuming that w9mad is the Madison gateway). Now, when the IP layer +at wg9ate gets datagrams for Madison, it knows that they have to go via +net/rom to w9mad. Notice that we don't specify a "real" interface, +like ax1 or nr0, in the route entry. The net/rom network layer will +pick the right interface based on its net/rom routing tables. + + We're not done yet, though. w9mad-pc.ampr is not an ax.25 +callsign. The net/rom send routine called by the IP layer needs +to map from the IP address to an ax.25 address. It does this via +a manually added arp entry: + + arp add w9mad-pc.ampr netrom w9mad + +[We kind of fudged by using the arp table for this purpose, since +there is no way to do automatic address resolution for net/rom, +and arp messages are never sent or received for net/rom nodes. +However, the arp table does contain precisely what we have here: +mappings from IP addresses to callsigns, and it saved a lot of +code to do it this way.] + +Notice also that no digipeaters are ever specified in the arp entry +for a net/rom node. Also, the callsign to which we are mapping +is the final destination of the packet, not the non-destination +neighbor. That neighbor will be picked based on the net/rom +routing tables. + + So, as a summary, let's look at what happens to a packet that +reaches the IP layer on wg9ate, destined for Madison. The IP +routing code looks the destination IP address up in the table, +and discovers that it should go via net/rom to w9mad-pc.ampr. +So, it passes the packet to the net/rom send routine. That +routine uses the arp table to translate w9mad-pc's IP address +to the callsign "w9mad". Then it passes the packet to the +net/rom routing code. That code checks to see if the destination +callsign (w9mad) is the same as that of any of its assigned +net/rom interfaces. Since it isn't, it puts a network layer +header (a.k.a. net/rom level 3 header) on it, and looks for +w9mad in its routing tables. Presumably, it finds an appropriate +neighbor for the packet, and sends in out via ax.25. The net/rom +network does the job of actually getting the packet to its +destination. + + At w9mad, the packet's protocol ID causes it to be sent to +the same net/rom routing code that handled the outgoing packet +from wg9ate (running on a different computer, of course). Now +the destination callsign matches, so the net/rom network layer +header is stripped off, and packet is passed up to the IP layer. +(Net/rom network headers don't have a protocol ID byte, so +we just hope for the best. If a net/rom node addresses a +net/rom transport layer packet to us, it is likely to be dropped +by IP for any of a number of reasons.) + + +THE NET/ROM TRANSPORT LAYER + + NET/ROM transport is the protocol used by NET/ROM node to +communicate end-to-end. When a user attaches to a NET/ROM +via AX.25, and asks for a connect to a node in the NODES list, +his local NET/ROM tries to open a transport connection to +the destination node over the NET/ROM network. NET/ROM transport +packets are carried in NET/ROM network datagrams, just like +IP datagrams. + + You shouldn't use NET/ROM transport when connecting to other +TCP/IP stations. TCP is a much better protocol than NET/ROM +transport, and makes better use of available bandwidth. Also, +BM and SMTP are more convenient to use than a TCP/IP station's +mailbox facility. However, for communicating with AX.25 users +via the NET/ROM network, the transport facilities in NET will +work better (and more easily) than the traditional method of +connecting to your local node via AX.25. + + +CONNECTING VIA NET/ROM TRANSPORT + + To connect to the node whose alias is FOO and whose callsign is +W9FOO, you can issue either of the following two commands: + + netrom connect foo + + netrom connect w9foo + +If foo:w9foo is in your NET/ROM routing table, your station will +transmit a connect request to the appropriate neighbor used to +reach w9foo. + + NET/ROM transport sessions are very much like those for AX.25. +You can use the disconnect, reset, kick, upload, and record +commands, and the session command to switch sessions. + + +DISPLAYING THE STATUS OF NET/ROM CONNECTIONS + + The command + + netrom status + +is used to display the status of all NET/ROM connections, which will +include those used in keyboard sessions as well as ones attached to +the mailbox. For more detailed information on a session, you can +use the address of the NET/ROM control block: + + netrom status <&nrcb> + +where <&nrcb> is the hex address given in the short form of the command +or in the "session" display. + + +NET/ROM TRANSPORT PARAMETERS + + The NET/ROM transport parameters may be set with the various +NET/ROM subcommands. Their meanings are listed below: + + acktime: This is the ack delay timer, similary to ax25 t2. + The default is 3000 ms. + + choketime: The time to wait before breaking a send choke condition. + Choke is the term for NET/ROM flow control. + + irtt: The initial round trip time guess, used for timer setting. + + qlimit: The maximum length of the receive queue for chat sessions. + This is similar to ax25 window. + + retries: Maximum retries on connect, disconnect, and data frames. + + window: Maximum sliding window size, negotiated down at connect + time. + + +THE MAILBOX + + The AX.25 mailbox also accepts NET/ROM connections. The "mbox on" +and "mbox off" commands control whether the mailbox is turned on for +NET/ROM as well as AX.25, and the "mbox" command displays current +mailbox connects of both types. + + Many people have observed that the AX.25 mailbox requires the user +to enter a carriage return to bring up the banner and prompt. This is +because of certain defects of that protocol when it is used as the +link layer for several different higher level protocols, and is +unavoidable. (So stop asking, OK? :-)) The NET/ROM mailbox does +not require the carriage return, and will be activated as soon as +the incoming connection is completed. + + +WHERE TO GO FOR MORE INFORMATION + + The paper "Transmission of IP Datagrams over NET/ROM Networks" +appeared in the Seventh ARRL Networking Conference papers, available +from the ARRL. In it, I describe the more technical details of how +the NET/ROM network support works. + + If you want to learn about NET/ROM, talk your local NET/ROM or TheNET +operator out of his or her manual. If you want to learn more, read +the source code. That's about it for sources, since the NET/ROM +protocols originated in a commercial product. + + +ABOUT THE CODE + + There has been a great deal of controversy about TheNET, a no-charge +NET/ROM clone for TNCs. This is not the place to discuss the truth +of the charges leveled by Software 2000 against its authors, but that +situation requires me to make the following statement: + + The NET/ROM transport support in NET.EXE was not taken in any way, +shape or form from NET/ROM (whose source I have never seen) or from +TheNET. The protocol code is based on protocol 6 from Tanenbaum's +excellent book, Computer Networks, as a moderately careful reading +of both should show. The source code is freely distributed, so +the curious reader should have the opportunity to check this assertion +if he or she so desires. + + The smoothed round trip time calculation, which is not done in +"real" NET/ROMs (and should be, by the way -- they'd work a whole +lot better) is adapted from that used by KA9Q in the TCP protocol +in NET. The dicey business of adapting it to a sliding windows +protocol with selective retransmission was done by me, all alone, +after my cries for help on the tcp-group mailing list went unanswered +:-). + + I have taken the precaution of copyrighting the NET/ROM code in +NET. It may be freely distributed for non-commercial purposes, in +whole or in part, and may be used in other software packages such +as BBS systems if so desired, so long as the copyright notice is +not removed from the source files, and the program in which it is +used displays "NET/ROM code copyright 1989 by Dan Frank, W9NK" +when it starts up. + + Any person who wishes to distribute the code, or anything based +on the code, for commercial purposes will find me very reasonable, +but rather insistent about being compensated for the hours I've +spent working on it. + +---------------------- Enjoy! + + Dan Frank, W9NK (dan@cs.wisc.edu, w9nk@w9wi-1 BBS, #MADIP:W9NK) diff --git a/src/nos/doc/ka9qbgn/README b/src/nos/doc/ka9qbgn/README new file mode 100644 index 00000000..25d52bc0 --- /dev/null +++ b/src/nos/doc/ka9qbgn/README @@ -0,0 +1,184 @@ + + KA9Q Internet Protocol Documentation Package + + + Collated by + + Mike Chace G6DHU + + + Version 1.4 - April 1991 + + + Copyright G6DHU 1991 + + This package may be reproduced in whole or in + part for any amateur radio and non-profit + purpose so long as credit is given to the + authors of the documents herein and myself + as the distibutor and collator of this package. + Please also note that some documents herein may + be subject to other copy restrictions. + + +This disk contains a number of documents that provide useful information +before embarking upon amateur TCP/IP using the software developed by Phil +Karn (KA9Q). A short description of each follows :- + + + 1) The NOS User Guide by Phil Karn (KA9Q) + + This is the definitive user manual for the NOS variant of the + TCP/IP NET program. NOS currently runs under MSDOS on all PC + clones and on the Commodore Amiga. + + This file has been updated (v1.4) from Phil's original by Bill + Simpson in early 1991. + + File : userman.txt + + + 2) The NET Guide by Gary Ford (N6GF) + + A quick tour of the last of the NET programs from which NOS + grew. Very much a beginners guide, it explains the setting + up of the NET and the mailer BM programs and leaves you in + a state ready to understand the basics of TCP/IP and the + NET program. It also gives a good introduction to the bascis + of the NOS program. + + File : newuser.txt + + + 3) The KISS TNC Protocol by Phil Karn (KA9Q) + + The defining document of the host-TNC protocol used by + most operators of the NET/NOS programs. + + File : kiss.txt + + + + 4) The Transmission of IP Datagrams Over NET/ROM by Dan Frank (W9NK) + + A paper originally submitted to one of the ARRL Computer + Networking Conferences. It explains in simple terms, how + the NET/ROM (and TheNet) node system is used to route IP + packets. + + File : ipax25.txt + + + + 5) The Internet Protocols by Charles Hedricks. + + This is a classic paper written at the time when TCP and IP + were still being developed. It explains in simple terms IP + and TCP and TCP services eg FTP, SMTP, Telnet. It then moves + onto more complex services such as ARP and the domain naming + system. + + Most things you will ever need to know about TCP and IP + will be here. + + File : tutorial.txt + + + 6) NET/ROM User Manual for the KA9Q Software by W9NK + + This short paper describes the NET/ROM code is it was originally + implemented in the KA9Q NET program. It is still a good guide to + setting up the NET/ROM facilities in either NOS or NET, although + there are changes that have been made to these packages since. + + File : nrman.txt + + + 7) NOS Mailbox Documentation (SM0RGV/G4AMJ/NQ0I) + + This document applies to newer versions of NOS only, specifically + ones that implement the 'mbox kick' and 'mbox timer' commands. + + It describes how you can arrange for mail to be delivered from + SMTP to AX25 systems such as PBBSs, PMSs and standard NTS + Mailboxes. + + File: mailbox.txt + + + 8) The Radio Shortest Path First (RSPF) Protocol (K1IO) + + Describes the RSPF Protocol which is implemented in NOS systems. + + RSPF provides a method by which NOS IP nodes can automatically + broadcast routing information and so provide a more flexible + local IP network. NET nodes cannot send such broadcasts but + they nevertheless participate in the protocol by replying to + the RSPF messages. + + !NB! This feature is for advanced users only but please do + read it if you are a beginner since it will help you + understand a most useful feature of the Internet System. + + Read Charles Hedrick's TCP/IP Paper first! + + File: rspf.txt + + + 9) The TCP/IP Command Set Reference - Ian Wade (G3NRW) + + This document provides a complete command reference for the + variants of TCP/IP NOS Software developed by G1EMM and PA0GRI. + + It gives a complete synopsis of all commands together with + their command line options. + + NB: Most of the commands are more fully described in Phil + Karn (KA9Q)s NOS User Guide (see above). + + File: noscmd16.txt + + + 10) BM (Bdale's Mailer) User Manual - Dave Trulli (NN2Z) + + A brief synopsis of the standard TCP/IP mailer, popular + since 1988. + + Includes details of setting up, machine environment + and commands. + + Please note that some versions of NOS are being + distributed with a new mailer (PCelm) loosely based + on BM - but to confuse things, the executable is + still named BM. You'll have to start your 'bm.exe' + to find out which you have! This manual will not + apply to PCelm. + + File: bm.txt + + + +Please DO read these documents before you go on the air if you are unfamiliar +with the workings of TCP, IP, NET/ROM and AX.25. + +They will help you to build up a good knowledge of the way the packet +network functions, not only in terms of running TCP/IP. They will also +show you how to be more channel friendly and how NET/ROM and AX.25 work. + +I can recommend switching on 'trace' in the NET/NOS program and watching the +network set up connections, pass data, close connections and so on, if +you are a new user. Get a feel for what all those packets are doing. + + +73 & Happy Reading! + +Mike + + +AMPRNET : g6dhu@g6dhu.ampr.org [44.131.20.3] +NTS BBS : G6DHU @ GB7IMB +Internet: mikec@praxis.co.uk + + +Telephone: Day : Bath (0225) 444700 + Evening : Bath (0225) 336838 diff --git a/src/nos/doc/ka9qbgn/RSPF.TXT b/src/nos/doc/ka9qbgn/RSPF.TXT new file mode 100644 index 00000000..48951d58 --- /dev/null +++ b/src/nos/doc/ka9qbgn/RSPF.TXT @@ -0,0 +1,1174 @@ + Fred Goldstein k1io + goldstein@carafe.enet.dec.com + Version 2.1 2-oct-1989 + + The Radio Shortest Path First (RSPF) Routing Protocol + For DDN Internet Protocol over Amateur Packet Radio + + ** DRAFT ARCHITECTURE -- FOR COMMENT ** + ** changes in V2.1 are noted by "**" and + should be edited out before final release** + +CONTENTS + +I. Introduction and Version Notes +II. Acquisition of router-router adjacencies +III. Acquisition of end node adjacencies +IV. Link state propagation +V. The Shortest Path First Spanning Tree +Appendix: Router Parameters + + +I. Introduction + +Amateur packet radio use of the Internet Protocol does not yet provide +all of the capabilities of other IP networks. One particular example +of this is IP packet routing. Most existing versions of the AMPR IP code +make use of a static routing table. This requires human intervention +every time a new backbone path is added, and adds geographic constraints +to address assignment which do not exist on the ARPA Internet. Some +implementations make use of automatic routing protocols (interior +gateway protocols, or IGPs) using distance vector routing. These IGPs +were originally written for wireline networks and tend to scale poorly +to the amateur packet radio environment. + +Many IP and other networks have implemented link state routing based upon +Dijkstra's "SPF" (shortest path first) spanning tree algorithm. A +wireline implementation of SPF for IP is being standardized as the +Open SPF Interior Gateway Protocol (OSPF), and an SPF procedure is +being considered by ISO as the standard "IS-IS" routing protocol for +OSI connectionless networks. A similar (and derivative) procedure can +be applied to AMPRnet (Net 44). It is called Radio Shortest Packet +First (RSPF); this document outlines the RSPF protocol. + +RSPF occupies the role traditionally referred to in TCP/IP networks as +an "Interior Gateway Protocol" (IGP), where "Gateway" means "router". +It makes use of the services of the Internet Protocol. It is not +inconceivable that a router could use both RSPF and another IGP, or +communicate with another network using the Exterior Gateway Protocol +(EGP). However these are not described in this document. + +RSPF is intended to be implemented on routers, and need not be +implemented on end nodes for the end nodes to take advantage of +routing services. Any IP station may be an end node giving no further +consideration to routing. + + +I.1. Elements of RSPF + +The RSPF protocol is designed for use by internet-layer routing nodes (IP +Gateways) in a packet radio network using the DDN Internet Protocol. +It is comprised of four major functions: + + 1) Acquisition of router-router adjacencies + 2) Acquisition of end node adjacencies + 3) Link state propogation + 4) Spanning tree route decision making. + +Its net result is the automatic maintenance of a least-cost routing +table for use by IP Routing. RSPF is optimized for the geographically +heirarchical addressing used in AMPRnet, but does not depend upon it. + +RSPF is simpler than OSPF and IS-IS, as it is designed for PC +implementation within the Amateur Radio Service. It also adds +procedures to take advantage of packet radio's "semi-broadcast" +nature. + + +I.2. Addressing convention + +When an RSPF router communicates with an end node, it will typically +deal with a 32 bit IP address. Routers themselves, however, also +support node group addressing (fewer than 32 bits need match). This +follows the convention in the KA9Q IP routing program, which permits a +crude form of heirarchical addressing as well as allowing portable +operations to override the defaults. RSPF looks for the match (node or +node group) with the greatest number of matching bits. Only if the +number of bits matched is equal, then the lower cost path will be used. + +Thus a match to a full node address will override a "cheaper" path that +matches its "class C net" of 24 bits, which overrides a "class B net", +etc., noting that AMPRnet does not follow strict 8-bit address +classification, and is a single Class A net. In every case, a greater +number of bits matched is considered a superior path to a destination +than one that matches fewer bits, regardless of the value of the routing +metric ("cost"). + + +I.3. Connection-oriented vs. connectionless lower layers + +IP is a datagram network protocol, and supports both connection- +oriented and connectionless lower layers (subnets). In a network with +a high packet loss rate, the local retransmission provided by a +connection-oriented datalink will substantially improve overall +throughput. However, in a high-speed dedicated backbone, particularly +one implemented using full-duplex radio or wireline links, +connectionless links may provide better overall performance. The +choice of which to use is a local matter; RSPF will work with both. +The reliability of the routing information, however, may be somewhat +greater with connection-oriented datalink procedures, since these will +give more rapid indication of a physical link failure. + + +I.4. Relationship to other protocols + +The reliability of the network depends upon reasonably reliable +transmission of the routing update; hence, for non-broadcast procedures, +connected-mode AX.25, or another reliable data link layer. (In any case +connected-AX.25 may be more useful than connectionless for backbone +links due to its local error correction ability.) + +**CHECK THIS OUT FOR VALIDITY WITH ANDERS** +All packets specific to RSPF shall be exchanged inside IP packets using +a protocol identifier which, pending formal assignment of one, shall +be 73. (How is this formally assigned?) Such IP packets shall be +sent with a time to live (TTL) value of 1. If broadcast procedures +are used, connectionless AX.25 UI frames shall be sent, with a +multicast address "QST-0" in the AX.25 address and an IP address of +44.255.255.255. (A router can also "read the mail" on passing radio +packets not addressed to it; such procedures are for further study.) + +Note that in this document, "subnetwork" and "data link" are synonymous, +and refer to the layer over which IP packets are exchanged. + + +I.5. Version 2.1 changes. + +RSPF draft 2.0 was released in June, 1988, as the first nearly- +implementable version. It was first implemented in September, 1989 by +Anders Klemets. This version 2.1 reflects changes whose need was +discovered during this implementation. These changes are both +editorial and, in a few cases, substantive. + +The format of the Routing Update packet has been slightly modified. +In order to prevent fragments of two or more different routing update +messages from being erroneously merged, an Envelope ID is added to +each such packet, with the same Envelope ID on all fragments of a +multi-packet message. The term for such a message is now "envelope"; +it contains one or more "bulletins", each of which originated from a +single router. + +There are no longer separate packet types for Full Routing Update and +Partial Routing Update. Instead, they are distinguished by the value +of the subsequence number, which is always 0 for Full Routing Updates +and is never 0 for Partial Routing Updates. A given envelope may +contain both types of bulletin. + +Cost is now set on the basis of receiver instead of transmitter. This +permits the automatic link quality adjustment to operate on the basis +of locally-received traffic. + +The remaining horizon is stored in the links table. This is needed +for consistency within the specification and was erroneously left out +of 2.0. + +It is now explicitly stated that upon creation of a new router-router +adjacency, the routers exchage full routing information. This allows +routers to initialize themselves with a reasonably complete map of the +network. + + +II. Acquisition of router-router adjacencies + +For RSPF to operate correctly, all routers must remain reasonably +current as to the state of the network at large. This is handled by +the propagation of "bulletin" messages among routers. End nodes need +not concern themselves with this; they will normally communicate +through one "designated" router at any given time, for all +(non-adjacent) destinations (not seen by ARP or other lower-layer +procedures). End nodes can also, of course, connect to each other +directly, bypassing RSPF. + +Each router maintains an adjacencies table. Each router's adjacency +table lists the following information for all other nodes, both +routers and end nodes, from which it directly receives packets over a +subnetwork: + + Adjacent node IP address (i.e., 44.56.0.44) + Adjacent node datalink (AX.25) address (i.e., K1IO-0) + Datalink used (i.e., AX0) + Datalink cost (i.e., 4) + Number of packets heard since last RRH update (i.e., 50) + Packet sequence number in last RRH update (i.e., 12593) + Time of last RRH update (i.e., 2130). + + +II.1. Router-router hello + +For the backbone to create its topology automatically, there must be a +way for routers to discover each other with minimal overhead. For +this purpose, a router-router hello (RRH) message is provided. +Periodically (as an initial suggestion, shortly before beginning to +propogate the periodic links state bulletin to known adjacencies), the +router sends out the RRH message to the layer 2 multicast address and IP +multicast address. RSPF makes no assumption of reciprocity (that +links are bidirectional), so receipt of an RRH packet provides the +receiver with information about a one-way (received) adjacency. + + +II.2. Connection-oriented procedure + +If a router uses connection-oriented subnet procedures to its own +adjacencies, then when a router receives this RRH packet, it checks to +see if it already has a link to that packet's originator in its own +links table. If not, it waits a random period of time (initial +suggestion: within the range of 0 to 10 times the link's value of T1, +DWAIT or SLOTTIME, and in any case much longer than the timers used +within a CSMA or Aloha subnet such as AX.25) and then attempts to +establish an AX.25 connection with the usual SABM; the router responds +with the usual UA (link established) or DM (link rejected). + +If a two-way connection has been established, then both routers add the +link to their adjacency tables. While the existence of this route is +set reciprocally, the cost of each side of the route is set separately +for each side of the connection. Cost is propagated in the routing +update (link state) packet. Thus the adjacency between two routers is +not actually used for real traffic until the first routing update +packet exchange has taken place. + +Loss of an adjacency may then be noted by the loss of the subnet +connection. When this occurs, the router removes the adjacency from +its adjacency table and follows the "bad news" procedures outlined +below for link state propagation. + + +II.3. Connectionless procedure + +If a router uses connectionless datalink procedures to its own +adjacencies (suitable to low-loss links), then when a router receives an +RRH packet, it checks to see if this adjacency is already in its +adjacency table. If not, then it is added. It also sends RRH packets +with the same frequency as with connection-oriented subnets. + +Loss of an adjacency may be noted by timeout; if no RRH message is +received, and no frames have been received from the adjacent router for +a period of time (initial suggestion: slightly over twice the maximum +interval between RRH messages), then the adjacency becomes suspect. +The router should attempt (**a settable number of times**) to exchange a +packet (ICMP echo) with the suspect adjacency; if unsuccessful (after +the usual number of retries), the route is marked lost. It may also +be marked lost if other attempts to send data through that router +fail, such that the implementation determines that there is a high +probability that the link is lost. + + +Table II-1. Coding of the RRH PDU. + + 1 2 + |0 |8 |6 |4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | RSPF Version #| Type (RRH) | Checksum | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Full IP Address of sending router | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | last packet sent seq. # | flags | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | plaintext |... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + +Parameters-- + + An RSPF Router-Router Hello packet is sent within IP with a type + of . Each RRH packet contains the following + fields: + + RSPF Version Number: Version number of this protocol (initially 1). + + Type: Value of 3 for RRH. + + Checksum: IP-style checksum + + Address: Full IP address of sending router + + Last packet sent sequence number: An integer (mod 65535) + incremented by 1 for every frame sent by the datalink layer across + this interface. This value allows receiving entities using + connectionless procedures to use the automatic link quality + measurement technique described in II.4. + + Flags: The low-order bit is 1 if connectionless datalink is + preferred; 0 if connection-oriented is preferred. (Set by + system management based upon anticipated link quality.) + Other bits are reserved (sent 0). + + Plaintext: An optional text message (length may be up to maximum + size remaining in datalink PDU). This might serve, for example, + to "broadcast" the router's existence to persons who might be + "reading the mail" (monitoring a radio channel promiscuously). + + +II.4. Automatic link quality measurement + +A connectionless link or subnetwork may have very reliable, or very +sporadic, performance. Since there is no procedure for ensuring the +reliability of packets sent over a connectionless link, a high rate of +packet loss may occur without being detected by the routers. If this +loss is high enough, another route may become a better choice; a high +enough packet loss rate may be enough to mark a link as "down". The +automatic link quality measurement procedure allows links which are +not yet "down", but whose performance is substandard, to be noted. + +Every router shall maintain, for each link, a count of all packets +sent over each link. Every time an RRH message is sent, it includes +the current value of this counter (modulo 65536). Every router also +maintains, in its adjacency table, a count of the total number of +packets received from said adjacency since the last RRH message, and +the value of that counter as received in the last RRH message. + +Upon receipt of an RRH message, the recipient router compares the value +of the received packet counter with the last received value in the +adjacency table. The difference (taking into account wrap-around at the +modulus) is compared with the number of packets received since the last +RRH message. (This works even if an RRH message is lost.) This packet +loss ratio is then maintained as a guideline to determine link quality. +If link quality falls below a settable threshhold, the link is +suspect. Timestamp can also be used to compute packet arrival rate. + +Connection-oriented data links presumably deliver 100% of attempted +packets. A high-quality connectionless link, such as Ethernet/LLC1, will +come close to this. However, single-frequency packet radio links are +prone to packet loss for several reasons, including hidden transmitters, +lack of collision detection, and rf interference. The packet loss ratio +is useful in setting link cost, and may also be used to determine +whether a link should use connectionless or connection-oriented +procedures. + +If a router reports, in its link update packets, that a given link has a +cost of _n_, then its adjacencies (and only its adjacencies) may apply +the packet loss ratio to adjust the cost which they maintain in their +link state tables. These adjusted costs, rather than the received +costs, may then be propagated to other routers. + +Such procedures should be applied sparingly, as each change must be +propagated and could, if used too frequently, result in network-wide +instability. A suggested (experimental) algorithm is as follows: A +percentage threshhold x is set, as is a cost-adjustment factor y. If +fewer than x% of packets are received during a measurement interval, +the cost of that adjacency is multipled by y. For example, if x is 80 and +y is 1.5, then an adjacency with a nominal assigned cost of 4 will be +up-costed to 6 if only 70% of packets are received, but will be +restored to 4 if 80% or more are received during the next measurement +interval. The measurement interval is the time between RRH messages, +which precede routing update messages. + + +III. Acquisition of end node adjacencies + +Three possible means of determining adjacencies to end nodes are the use +of connected-mode AX.25 links, the use of ARP, and the use of a +"wiretap" algorithm (see RFC981). Unless a connection mode Data Link +layer (with keepalive timers) is used, adjacent nodes may need to send +each other messages at regular intervals (ping) to ensure that the +link is still usable. A procedure is outlined below for routers and +end nodes to acquire knowledge of each other. + +It is assumed that RSPF will not be activated in end nodes; this +permits them to use simple version of the IP software. A node that +has RSPF support in its software but operates as an end node can also +use the router-router connection procedures and simply broadcast its +adjacency to the router in a one-entry bulletin with a horizon of one. +Such a node may also be simultaneously homed on two or more other +routers, unlike true end nodes whose traffic either bypasses RSPF +(using ARP) or arrives by way of its associated router. + +There is no "redirect" function provided in RSPF. Since radio does +not provide a true "broadcast" topology subnetwork, a router cannot +presume that if both end nodes can hear it, that both end nodes can +hear each other. + +If an end node knows the IP address of the router which will connect +it to the network at large, it may establish a connected-mode AX.25 +(or other subnet) connection to the router; the presence of this +connection indicates that the node is reachable from that router, +which then adds it to its links table and subsequent bulletins. This +may, of course, require an ARP exchange in order to acquire the AX.25 +(or other data link layer or subnet) address. + +Alternately, the end node can simply use ARP and use connectionless +link procedures. In this case the router should assume that the end node +is available until either a rather lengthy timer expires, or the router +is unable to make an ARP contact after the ARP timer expires. (A loss +of reachability should not be inferred from the ARP timeout.) + +Routers should periodically broadcast their availability (suggested +interval: every 15 minutes) with an AX.25 UI frame sent to QST-0 (the +AX.25 broadcast address). A human-readable "unproto" message may go +here, allowing individual operators to recognize routers and connect +as appropriate. (No specific PDU coding is provided, as the end +nodes do not use RSPF, and thus this is not really an RSPF packet.) + +A router may also choose to use "Promiscuous ARP" to provide service to +an end node which is attempting to connect with an IP address reachable +by the router. In such a case the router should wait an extra interval +after receiving the ARP request because the desired destination may +actually be directly reachable; ARP procedures may need to be modified +to provide this. + +Another potential approach is for routers to simply listen to AX.25 +traffic on the link and determine who is adjacent to whom. This is the +gist of the "wiretap" algorithm in RFC981, which also finds non-adjacent +nodes by taking advantage of the source routing found in AX.25 frames. +Integration of wiretap into RSPF is for further study. + + + +IV. Link state propagation + +Link state information is propagated between routers within bulletin +envelopes, which are sequences of packets containing partial or full +copies of the sending node's link state table. Both point-to-point +and broadcast procedures are provided. + +IV.1. Optional multicast/broadcast + +Packet radio is inherently a broadcast medium. Packet radio networks, +however, may be viewed as a collection of individual links which happen +to use a broadcast physical medium. It is also possible to exploit the +broadcast nature of the medium. RSPF link state propagation procedures +allow but do not require such multicasting. If the link uses +connectionless procedures for user data packet exchange, then broadcast +procedures should be used for link state packet exchange. The converse +may not necessarily be true: The threshhold of loss that militates +against connectionless transmission of user data may be more stringent +than that which call for non-broadcast transmission of link state +packets. (Optimal parameters are for further study.) + + +IV.2. Routing update bulletins + +Routing updates are passed along from router to router via routing +update bulletins, which are broadcast within routing update envelopes. +Bulletin propagation is designed to make it extremely likely that +every node within a given "horizon" receives every routing update +message sent out by a given node. + +Every router originates information about changes in its own adjacencies, +as well as periodic retranmissions of its entire list of adjacencies. +These bulletins are then propagated among other routers. The router whose +adjacency information is being broadcast is called the _reporting +router_; this may be some hops away from the routers which forward it to +their own adjacencies. Each reporting router's bulletins (adjacency +updates) contain a sequence number (and in some cases, a subsequence +number). These sequence and subsequence numbers are generated by the +reporting router and propagated; they are not changed when a bulletin +is relayed. They are incrememted by 1 (modulo 65536) every time a new +one is generated. + +Bulletins may also carry change information incremental to previous +bulletins. These carry the same sequence number as the full routing +update bulletin to which they are reporting incremental changes; each +such partial routing update bulletin has a subsequence number. The +subsequence number is zero for a full routing update bulletin. + +Every bulletin also has a horizon value, set by the reporting router, +associated with each of its constituent links. (A given reporting +router may have more than one constituent link, if it is a multi-port +router.) Every time a bulletin is propagated, each horizon value is +decremented by 1. When it hits zero, the bulletin is not propagated +further. Note that for horizon purposes, a bulletin's individual +constituent links may have separate horizons; when a link's horizon hits +zero, other links' adjacency information from the same reporting router +may continue to be propogated. + +It should also be noted that if a given link has adjacencies with +different horizons, these must be treated as separate links, since +horizon is reported as a characteristic of link. Such a circumstance +may occur, for example, when a router serves a node group. +Adjacencies within the node group are typically propagated with short +horizons, since they are only of local interest (i.e., to other nodes +in or near that node group). Similarly, the node group itself is +propagated with a long horizon, across a backbone. However, +adjacencies outside the node group may be propagated with long +horizons, as they would not otherwise be reached across a backbone +dependent upon node groups for long-haul routing. + +Every router maintains within memory a routers table containing one +tuple for every other router on the network. This tuple contains the +following elements: + + IP Address + Last received bulletin sequence number + Last received bulletin subsequence number + Timestamp for when the data was received. + Horizon remaining in bulletin when received **NEW IN 2.1** + +This table is used to coordinate the receipt and transmission of +bulletins, using either broadcast or non-broadcast procedures. + + +IV.3. Flooding without congestion + +Upon initialization of adjacencies + +Bulletins are forwarded in a routing update envelope which may contain +one or more reporting routers' bulletins (adjacency lists), which are +flooded to the network. A bulletin envelope may actually concatenate +multiple reporting routers' bulletins; this is in fact the typical +case, when routing update packets are exchange on schedule, **and when a +given router acquires a new adjacency**. However, partial routing +updates (good news and bad news) may be sent at any time. + +The first time an adjacency is acquired, the two routers perform a +full routing update with each other, exchanging their complete link +lists. Once this is complete, the routers perform the SPF algorithm +and compute new routing tables. + +Preventing loops and retransmissions + +A bulletin from reporting router X (which lists all of X's +adjacencies) is sent, initially by X, to every adjacent (to X) router +A. This router A passes it along to all of its own adjacencies B, +etc.. This flooding is controlled such that no reporting router's +adjacency update is sent more than once between the same pair of +routers. + +After router A sends its bulletin envelope to B, the recipient router +B then looks at the sequence number of each reporting router X's +adjacency bulletin within that envelope, and for each reporting +router's bulletin, compares the sequence number of the just-received +adjacency bulletin with the highest sequence number previously +originated from X. If the just-received bulletin is newer (higher +number), then it sends a positive acknowledgement to A, and joins in +the flooding to its own adjacencies. The horizon is, of course, +decremented. ** HOW IS IT POSITIVELY ACKED? NEED WE? ** + +If the bulletin from X has the same number as was stored in B, B checks +the horizon left in the received bulletin against the horizon left +when it previously received the bulletin. In the event that the +latest bulletin received had a shorter (lower number) horizon left +than the earlier one, it simply acknowledges the (redundant) message. +But if the reporting router X's horizon left is greater for the new +copy of the bulletin, router B propagates it as if it were a new +bulletin. This way, if the bulletin happened to first arrive via a +roundabout path, it won't accidentally fail to reach the intended end +of its range. (Summary: Newer or longer-horizon bulletins are both +passed along. Same age or older (by sequence number) or same or lower +horizon will not be propagated.) + +If any router B receives from router A a bulletin (from any reporting +router X) that contains a lower sequence number than one that had +previously arrived at B from said X, then it can be presumed that A +has "obsolete" information. B replies by sending a bulletin to A with +the latest link state information for that node X. As a corrolary, a +router may poll for information about a given reporting router by +sending a routing update bulletin for that reporting router with a +sequence number that is lower than the latest one it actually has +received. Said bulletin may contain zero links' information. (Note +that since the sequence number is modular, a value of 0 is not correct +for this function as 0 is higher than 65535; the "poll" number should +be only slightly lower.) + + +IV.4. Non-broadcast bulletin envelope exchange + +A router may acquire routing information from adjacent routers via +point-to-point procedures which treat every adjacency as a separate +logical data link. (Such a procedure also works, of course, over +point-to-point links such as wirelines.) This tends to have the highest +reliability, since connection-oriented data link control procedures can +be used to ensure the accuracy and completeness of the data passed over +the link. It has the disadvantage of requiring separate transmission of +the same data to different adjacent nodes on the same radio channel. + +Bulletin envelopes are thus exchanged (when connection-oriented is +selected) periodically (based upon timers) and when new information is +received (over a new adjacency, and when good and bad news arrive). +Delivery of these bulletins is considered to be gnerally reliable. + + +IV.5. Broadcast bulletin propagation + +When a router is adjacent to several other routers via the same +broadcast (i.e., packet radio) channel, retransmission of routing +bulletins to each adjacency makes additional use of bandwidth, which may +be a scarce resource. A broadcast procedure may be used to pass the +bulletin along that link. Note that broadcast propagation of bulletins +may be combined with non-broadcast propagation, on a link by link basis. +Although packet radio is a broadcast medium, it is not a perfect one: +The reliability of multicast packets is not as high as for wireline LANs. +This leads to the need for a unique broadcast "flooding" technique. + +A routing update bulletin is broadcast to the Layer 2 multicast AX.25 +address using the IP multicast address. Individual recipient routers +may or may not receive the entire bulletin, since there is no +acknowledgement provided. + +In the previously described case of a non-broadcast message sent via a +connection-oriented datalink, the entire routing update bulletin can +be assumed to have been received intact. Thus, if a given reporting +router has originated a new complete list of its adjacencies (new +sequence numbers, subsequence numbers are 0), then any adjacency not +included is presumed to have ceased to exist. Such a presumption is +not always possible when a bulletin was received via unacknowledged +broadcast, as the message might have been received in part. This +should not make the partially received bulletin unusable. + +A bulletin envelope is transmitted in one or more packets, each of +which constitutes a numbered fragment of the whole bulletin envelope. +Within the transmitted bulletin envelope, each individual reporting +router's bulletin begins with a node-header which contains the number +of links being reported on. Within each bulletin, each link is +identified by a link header, each of which specifies the number of +adjacencies being reported on (for that link). Since each IP packet +that makes up a bulletin contains a fragment number, it is also +possible to determine whether or not a fragment was lost. Each packet +also contains an envelope-ID, which prevents accidental mis-assembly +of different bulletins that may arrive close in time. **NEW IN 2.1** + +In connection-oriented non-broadcast procedures, a routing update +bulletin (not a partial one with a subsequence numbers >0) provides a +complete list of adjacencies known to the sending node, except where the +horizon is exceeded. Absence of a previouly-known adjacency then +implies that the adjacency has been lost. However, that assumption does +not apply to fragmented bulletins received in part, which can occur with +broadcast procedures: If a fragment was lost before reaching the end of +a given reporting router's bulletin within the bulletin envelope, then +the absence of a previously-known adjacency in the received bulletin +does not mean that the adjacency was lost. + +RSPF procedures dictate that routing update bulletins with a subsequence +number of zero are presumed to be complete lists of adjacencies from +their originators; higher subsequence numbers represent incremental +changes only. In the broadcast procedures, a routing update bulletin +with a subsequence number of zero, if received only in part, is +treated as a partial routing update bulletin. If it received in full, +it is treated as a full routing update bulletin. + +Thus, the recipient compares the sequence number with the previously +received sequence number from that reporting router. If it is higher +than the previously received one, then its adjacencies are used. If +it was received in full, and had a subsequence number of 0, then its +previous adjacencies are replaced (removed if not contained in the +latest full routing update bulletin). If it was not received in full, +or if its subsequence number was not zero, then its previous +adjacencies are left intact unless explicitly changed by the received +bulletin. + +If a bulletin is received in full, then the routers table is updated +with the latest sequence and/or subsequence number, horizon **NEW 2.1** +and timestamp. If it is received in part, then these entries are not +updated. After the bulletin has been completely transmitted, a +recipient node which has received a partial update from a reporting +node may poll for that node's latest information, by using the (now +known to be obsolete) sequence number for that router in its router +table in a bulletin, with zero links for that reporting router. (This +is the same polling procedure used for non-broadcast links.) + +Note that if a fragment is lost, a reporting router whose node-header is +in the lost fragment will of course remain unchanged in the recipient's +data base. Furthermore, any data received in subsequent fragments, +prior to a node-header, will also be meaningless. The last adjacency +of the last link in a reporting router's bulletin will have the Last +flag set to 1, signaling that following the address, a node header +follows. Note also that the first node-header within an envelope is +pointed to by the sync byte in the envelope header. The last flag and +sync byte should match or an error should be noted. + + +IV.6. Routing update bulletin packets + +A routing update bulletin envelope (Table IV.1) may contain several +different reporting routers' updated link state information, +concatenated into one message, with a different sequence number for each +source (reporting router). One of the sources, of course, may be the +local router. Each router's link state information is further broken +down by link, which allows its backbone routing information to be +propogated separately from its local end node adjacency information. + +Incremental changes (good news and bad news) + +Bulletins that only report changes in state come in two flavors. Good +News bulletins inform other routers that an adjacency has been noted. +Bad News bulletins inform them that an adjacency has been lost. If an +end node establishes a connection with a router whose node group default +addresses (based on the significant bit count) already include that end +station, however, no bulletin need be sent out, as packets to that end +station will already be routed correctly. Theoretically, a router could +send out a new full routing update bulletin every time it gained or lost +an adjacency. However, the use of shorter Good News and Bad News +packets, which do not contain a full routing update, allow the network +to remain relatively current with less transmitted traffic. + +Good news and bad news packets are propogated like other packets, +but are not originated by the same rules. While full routing bulletins +are originated based upon a timer, good news packets are transmitted +immediately upon receipt and initiated immediately after an adjacency +is initialized. This enables new links to be useful quickly. Bad news, +however, should not travel as fast: A node should cache any bad +news message for a time (initial recommendation for this timer: 60 +seconds) while waiting for the link to come back up. This helps keep +the network stable; if the node receives a packet destined for the +lost destination, it may send an ICMP "host unreachable" message +to the originator of the packet, unless it can reroute the packet +itself (as may happen with the loss of a backbone link when others +still exist). + +Because good news and bad news messages represent changes to the last +full link state bulletin propogated, but do not purport to completely +represent a node's link states, they carry bulletin subsequence +numbers. These use the last bulletin sequence number originated by the +reporting router, but the sub-sequence value increments from 1. (A full +link state packet has a sub-sequence value of 0, and resets the +subsequence counter.) + +Routes to nearby destinations + +Sometimes more than one router will serve the same area (determined by +the significant bits' matching), and they will need to know which one has +the better path to a given station. These adjacency messages may only +require a short horizon, as will Good News and Bad News packets which +refer to end nodes going on and off the air. Higher horizons are +needed for backbone routers. + + +Table IV.1. Routing update (link state packet) bulletin envelope: + + 1 2 + |0 |8 |6 |4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---- + | RSPF Version #| Type | fragment # | fragment total| packet + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -hdr + | Checksum | sync byte | # nodes below | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Envelope-ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---- + | Reporting node #1 full IP Router-Address | node + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -hdr + | Node 1 bulletin sequence # | sub-sequence #| # links | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---- + | horizon left | ERP factor | link cost | #adjacencies | link + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ _-hdr_ + |significant bits| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Adjacent node(s) 1,1,1 IP address | adj. + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --- + |significant bits| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Adjacent node(s) 1,1,2 IP address | adj. + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --- + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |significant bits| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Adjacent node(s) 1,1,n IP address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --- + | horizon left | ERP factor | link cost | #adjacencies | link + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --- + |significant bits| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Adjacent node(s) 1,2,1 IP address | adj. + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --- + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |significant bits| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Adjacent node(s) 1,2,n IP address | adj. + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --- + | Reporting node #2 full IP Address | node + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Node 2 bulletin sequence # | sub-sequence #| # links | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --- + | horizon left | ERP factor | link cost | #adjacencies | link + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --- + |significant bits| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ adj. + | Adjacent node(s) 2,1,1 IP address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ --- + |significant bits| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Adjacent node(s) 2,1,2 IP address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | horizon left | ERP factor | link cost | #adjacencies | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |significant bits| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Adjacent node(s) 2,2,1 IP address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |significant bits| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Adjacent node(s) 2,2,n IP address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Reporting node #n full IP address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Node n bulletin sequence # | sub-sequence #| # links | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + etc. + +Parameters-- + + An RSPF bulletin packet is sent within IP with a type of . Each routing update envelope + contains an envelope packet header that contains: + + RSPF Version Number: Version number of the protocol (initially 1). + Type: (Value 1 for Routing Update Bulletin Envelope) + + Fragment Number: States which fragment, in a segmented message, + this is, beginning at 1. Non-fragmented messages use 1. + + Fragment total: Total number of fragments in message; 1 if not + fragmented. + + Checksum: IP-style checksum. + + Sync byte: Which octet in this packet (counting from this + byte as byte 0) is the beginning of the first node-header. If 0, + this fragment has no node-header. Non-fragmented messages + use a value of 4 (because 3 bytes follow in packet header). + **NOTE CHANGE IN 2.1** + + Number of nodes reporting: The number of reporting routers in the + messages that follows (this packet or a sequence of packets forming + the envelope). + + + The node-header (for each reporting router) contains 8 octets: + + Reporting router #n full IP router address: The IP address of + the router whose adjacencies are being reported below. (Note + that if a router uses separate IP addresses on its links, it + should still adopt a single one as its router address.) + + Bulletin sequence number: When a bulletin is passed along, this + number is NOT changed; every new bulletin from a given Reporting + router has a value 1 higher than the previous bulletin from that + reporting router. (Note: This is modulo 65536, so implementations + must cope with the "wrap around" and consider values below, say, + 100, to be "higher" than values above, say, 65400. Between 100 + and 65400, modular arithmetic is NOT used.) + + Sub-sequence number: Good news and bad news packets representing + incremental changes from the last full report increment this value + by 1; it is 0 for full bulletins. + + # links: The number of different cost-horizon values (typically, + but not necessarily, representing different types of link in a + mulitiport gateway) being reported below; the following four octets + are the header for each link. + + [For each reporting router, adjacencies are reported separately by + link cost. This is the received cost value for that data link, after + any adjustment that may be based upon packet loss ratio. Adjacencies + are also reported separately by horizon, even if the cost is the same. + It does not matter at this point if there are multiple RF or other + links if their cost and horizon are the same. Likewise, separate + received costs or horizons on one link will be treated separately + and such adjacencies will be grouped under separate link headers:] + + Horizon left: This number is decremented every time a routing update + bulletin is passed along; when it reaches 0, it is not passed further. + + Link cost: A "figure of merit" for each link, rising with + slower/poorer links. This is the number whose total is minimized + by SPF. The range is 1-127. As a starting point, a 56000 bps fdx + backbone link might have a value of 2, a 4800bps hdx link a value + of 5, a 1200bps hdx link a value of 10 and a 300 bps hf "wormhole" + a value of 20. An Ethernet or high-speed (1 Mbps+) link might + then have a value of 1. A value of 255 denotes the loss of a + link; this is found in Bad News packets. These values should be + coordinated network-wide; adjusting them will change the way + packets are routed by RSPF. + + Number of adjacencies: The number of adjacencies to be listed for that + reporting node. + + ERP Factor: Used for "approximating" a route; contains the number of + significant bits for which a given node can be presumed to be a valid + router, even if it doesn't report in detail. A low factor = wider + coverage area; thus ERP of 16 means that if NO other match is found for + a given address, this router will try to handle it if it matches 16 + bits. Basically a handle for future enhancements; its use will not + be required in the initial release of RSPF. + + For each adjacency of the given link cost, the following is provided: + + Significant bits: The number of bits used for node group routing + purposes. Usually 32 but may be lower if a given link purports to + serve all end nodes in an area defined using the most-matched-bits + node group convention. Higher numbers of bits matched take a higher + priority than least cost. This uses the low-order 5 bits of the + octet. + + Last-flag: If this is the last adjacency in the list for this + reporting router, this value is 1; otherwise it is 0. (This + occupies the high-order bit of the significant bits octet.) + + Full IP address: The full IP address for this node. + +Note that the n,n,n vector within the bulletin has three fields in the +above representation: Reporting router within bulletin envelope, link +cost/horizon within reporting router's bulletin, and reporting adjacency +with that link cost/horizon. + + +IV.7. Fragmentation + +In a moderate to large network, a full routing update can easily exceed +the maximum size of an AX.25 frame or IP packet. The RSPF Routing +Update message, however, may be sent in fragments. The IP +fragmentation function is not used for this; bulletins are not assumed +to be terminated by a packet boundary. Each fragment is, however, +numbered in the packet header, along with an indication of the number +of the total number of fragments in that envelope. + +In order to permit parsing of the incoming fragments by routers who +are using unacknowledged broadcast information (with the high +likelihood of lost fragments), every bulletin's packet header contains a +sync byte indicator. This indicates which byte, where the next byte in +the header is byte 1, is the beginning of a node header. If a previous +fragment was lost, the receiver should ignore the number of bytes +indicated in the sync byte before resuming parsing of the packet. (If +the fragment does not exceed 255 bytes, this will always be sufficient. +It is recognized that long packets may not be able to use this mechanism +reliably, and a value of "0" should be used to indicate that no sync is +possible within this fragment.) + +Each routing update bulletin envelope takes the form of a three- +dimensional list, with the dimensions being reporting router, link and +adjacency. A given bulletin envelope may report on link state from one +or more remote nodes, as well as from the sending node. Each node may +have one or more links; each link may have one or more adjacencies. + +Packets may not be fragmented within adjacencies, but may be +fragmented after an adjacency's address and before the next adjacency's +significant bits field. (This presents a 5-octet field that should +not be fragmented.) The next fragment, in a new packet, simply begins +where the last one left off; the receiver knows how much more to +expect based upon the node and link count in the respective +node-header and link-header. + +A router may not start sending a new Routing Update message of any kind +to any given IP address until all fragments of a previous message to +that address have been transmitted. This applies both to point to +point (non-multicast address) and multicast procedures. + + +IV.8. Bulletin Timers + +The timers used for bulletin updates must be a compromise between +maintaing the network's current state and the traffic required to do +so. An initial suggestion: Good news messages should be initiated +within a few seconds and bad news messages should be initiated within +one minute, with relatively short horizons on the bulletins (i.e., the +routers within the region). Full routing updates with normal horizons +should be sent out every 30 minutes. If the network is small, more +frequent updates may be possible; too frequent updates risk choking +the network with update traffic. + + + + +V. The Shortest Path First spanning tree algorithm + +As a routing node comes onto the network, it acquires over time a +complete list of adjacencies between other nodes on the network except +as limited by the "horizon". Each adjacency (point to point link) +within the entire known network has a "cost" associated with it. It +should be noted that adjacencies, for the purposes of this algorithm, +are "logical" and not necessarily physical; if a subnetwork link +occurs below IP (as in AX.25 digipieating or NET/ROM), the two ends of +the link are still adjacent. (Adjacency at the IP internet layer is +based upon subnetworks, which may contain their own links.) + +Cost is set for the receive (** Changed in 2.1 to facilitate automatic +link quality adjustment **) side of each link. If the receiver and +transmitter do not agree on cost, the network shall apply different +routes for packets going in opposite directions between the same two +end nodes. (This is not a problem. In a radio environment, one +should NOT assume reciprocity across a link.) + +V.1. Tables + +Each router builds a _link state table_ that lists, for every known +link in the network (from every reporting router), the two ends and +the cost of that end of the link. The ends are listed by an IP router +address and, for the destination IP router address, a number of +significant bits. This is what's updated by the bulletins and by good +news/bad news messages. + + Source IP address Dest. IP addr/bits Cost + + 44.56.0.44 44.56.0.128/32 5 + 44.56.0.44 44.56.0.12/25 10 + +The goal of the SPF algorithm is to build a _paths table_ which lists, +for every reachable node (or node group approximation of fewer than 32 +bits) on the network, that node address (or node group address and +number of significant bits), the adjacent node used to get there +(i.e., where you blast the packets to next), and the total cost of the +path. (This feeds the Route table in the IP Route module in NET.) +This is done by building a spanning tree with the router doing the +computation (the home router) as the root of the tree. The paths +table thus lists the best way across the tree from the home router to +all known destinations. + +Every router contains, for the purposes of building the tree, a +_trial table_ that has three entries: Destination address/bits, +adjacent node, and cost of this path. The paths table additionally +has one more entry, the _parent_ node, which is the last hop +before the destination. Thus in a path A -> B -> C -> D -> E, home +router A views E as the destination, D as the parent, and B as the +adjacency. Note that in the path from A to B, A is the parent node. + +Begin building the paths table by using the home router as the first +node on the paths table. The cost to reach yourself is always 0, so +make the first entry on the paths table as follows: Source=self, +destination=self, parent=self, and cost=0. From here on in, parent +is always (by definition of the SPF spanning tree) the node most +recently added to the paths table. + + Destination Adjacent Parent Cost + + 44.56.0.128 44.56.0.128 44.56.0.44 5 + 44.56.0.131 44.56.0.128 44.56.0.128 10 + 44.56.0.200 44.56.0.128 44.56.0.131 15 + + Paths Table showing relationship between + destination, parent and adjacent nodes, where the home + node is 44.56.0.44 and 44.56.0.200 is three hops away; + all hops here have a cost of 5. + +V.2. Scanning the links + +The home router now scans its links table looking for all nodes (routers +and end nodes) that are adjacent to the current parent node, except +for links to nodes which are already on the paths table. (It is +generally fastest to build the paths table by scanning the links table +in order of increasing link cost.) Each of these new nodes is added +to the trial table, except for the parent node (which is already on +the paths table, so it can't possibly have a shorter path). The value +of cost placed on the trial table is the cost of the link from the +parent to the destination plus the cost from home to the parent node +(which value is already on the paths table). + +A node may only appear once in the trial table at any given time. If +an adjacency is found to a node that is already on the trial table, a +new entry replaces the existing entry if and only if the new total +cost is lower. If the cost is higher, it is ignored. (If the costs +are equal, then a "tiebreaker" is determined by treating the +lower-numbered IP address as the lower cost. This will simply make +the spanning tree more deterministic in case of tie.) Thus the trial +table always contains the lowest cost path to each destination found so +far. + +Once all of the links from the parent node have had their chance to go +onto the trial table, scan the entire trial table for the _one_ entry +with the lowest total cost. This not need be a link from that parent +node! In case of tie, pick the lower IP address (again just to be +deterministic). Move this node to the paths table; guaranteed, +there'll be no cheaper path to that node! The adjacency used for that +node in the paths table is the adjacency to its parent node. Note +that the parent _must_ already be on the paths table since that's the +source of the parent; you're working your way outward. + +This new addition to the paths table becomes the new parent node. +Repeat the procedure above (from the beginning of V.2) until there are +no nodes left on the trial table. This means you've completed the +spanning tree and have found the least-cost path to every other node. + +One of the router parameters is maximum_cost. If the cost to a given +parent node exceeds this value, the procedure stops, since all +subsequent entries in the route table will have a higher cost. This +value has some semblane to the time-to-live parameter of the IP +packet: It makes little sense to compute a routing table to nodes +that cannot be reached within time-to-live. (Ideally, ttl will be +implemented using a timer rather than a node counter, but this is +difficult to do with some of the packet radio data link controller +implementations; vis., TNCs.) + +A router should recalculate its routes periodically based upon the +current links table. How frequently depends upon the CPU load involved. +Initial estimates are that it should be recalculated after receipt of +every routing update bulletin: Partial calculations do not save +enough CPU time to make them worthwhile. + + +V.3. Filling in the routing table + +The route table in NOS and NET (the KA9Q et al implementations of IP) +contains, for each entry, the destination address, number of bits, +interface, gateway and metric. This is essentially left intact, +except that metric is filled in by cost and the routing decision looks +for the least cost of all matches. The route table is filled in from +the paths table. + +Since the routing table will be periodically recalculated from +scratch, implementation may require two route tables, one "in +progress" and one "in service". When the route calculation is +complete, the "in progress" table becomes "in service" and the old one +is cleared for reuse. This allows packet forwarding to continue while +the completed paths table is being converted into the route table. + +A manual route table may also be maintained. This should be overriden +by RSPF-generated entries. Manual routes are useful defaults before +RSPF generates routing entries, for destinations not reported on by +RSPF, and for interworking with other routing protocols. + + + + +Appendix I. Router parameters + +Every router must set a number of parameters in order to properly +operate. While RSPF builds its routing matrix automatically, overall +network efficiency and stability may require some fine-tuning based +upon experience. These include parameters set for each data link +or subnetwork layer entity (i.e., each radio channel) and for the +router in general. + +Link/subnet settings: + + Set Link cost: This is the cost parameter based upon the link speed + and type. Since the overall cost of the end-to-end path is + minimized by the RSPF spanning tree, link cost should be set to + arrive at the best overall network performance. The legal range + is 1-127. This is sent in routing update bulletins. + +Node settings: + + Add/Delete Node group: [IPaddr]/bits {cost}. This allows a node to + announce its ability to serve a group of nodes, identified using + the standard NET convention of address/significant bits. Thus a + node group setting of [44.56.0.1]/25 will match all nodes from + [44.56.0.1] to [44.56.0.127]. Cost is optional; if set, this + cost to will be propogated to reach such nodes; otherwise, the + link's default is used. + + Set horizon link: This sets the horizon value for the node's + routing bulletins apropos 32-bit addresses of other connected + routers. This should be high enough to propogate across the + backbone. + + Set horizon group: This sets the horizon value for the node's + routing bulletins apropos node group addresses (fewer than 32 + bits matched). Usually matches the horizon link value. + + Set horizon local: This sets the horizon vaue for the node's + routing bulletins apropos full link addresses (32 bits) **to + non-routers** within the router's node group area. This is set to + a low value so that only other routers serving the same or overlapping + node group(s) will receive these messages. + + Set horizon portable: This sets the horizon value for the + node's routing bulletins apropos full link addresses (32 bits) + not within a node group. This allows portable end nodes to + have their location in the network propogated farther than + the local horizon; this is usually set the same as horizon group. + + Set broadcast timer: This sets the time, in seconds, between + router-router hello (RRH) broadcasts. Initial suggestion: 900. + + Set suspect timer: This sets the time, in seconds, after which + an adjacency is "suspect" if no packets are received from it. + An ICMP echo is then issued. Initial suggestion: 900. + + Set suspect count: This sets the number of times an ICMP echo + (ping) should be sent after a node is suspect, before it is + removed from the adjacency list. diff --git a/src/nos/doc/ka9qbgn/TUTORIAL.TXT b/src/nos/doc/ka9qbgn/TUTORIAL.TXT new file mode 100644 index 00000000..b95cb13e --- /dev/null +++ b/src/nos/doc/ka9qbgn/TUTORIAL.TXT @@ -0,0 +1,1706 @@ + + + + + + + + + + + + + Introduction + to + the Internet Protocols + + + + + + C R + + C S + Computer Science Facilities Group + C I + + L S + + + RUTGERS + The State University of New Jersey + + + + + 3 July 1987 + +This is an introduction to the Internet networking protocols (TCP/IP). +It includes a summary of the facilities available and brief +descriptions of the major protocols in the family. + +Copyright (C) 1987, Charles L. Hedrick. Anyone may reproduce this +document, in whole or in part, provided that: (1) any copy or +republication of the entire document must show Rutgers University as +the source, and must include this notice; and (2) any other use of +this material must reference this manual and Rutgers University, and +the fact that the material is copyright by Charles Hedrick and is used +by permission. + + + +Unix is a trademark of AT&T Technologies, Inc. + + + + Table of Contents + + + 1. What is TCP/IP? 1 + 2. General description of the TCP/IP protocols 5 + 2.1 The TCP level 7 + 2.2 The IP level 10 + 2.3 The Ethernet level 11 + 3. Well-known sockets and the applications layer 12 + 3.1 An example application: SMTP 15 + 4. Protocols other than TCP: UDP and ICMP 17 + 5. Keeping track of names and information: the domain system 18 + 6. Routing 20 + 7. Details about Internet addresses: subnets and broadcasting 21 + 8. Datagram fragmentation and reassembly 23 + 9. Ethernet encapsulation: ARP 24 + 10. Getting more information 25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + i + + + +This document is a brief introduction to TCP/IP, followed by advice on +what to read for more information. This is not intended to be a +complete description. It can give you a reasonable idea of the +capabilities of the protocols. But if you need to know any details of +the technology, you will want to read the standards yourself. +Throughout the text, you will find references to the standards, in the +form of "RFC" or "IEN" numbers. These are document numbers. The final +section of this document tells you how to get copies of those +standards. + + + +1. What is TCP/IP? + + +TCP/IP is a set of protocols developed to allow cooperating computers +to share resources across a network. It was developed by a community +of researchers centered around the ARPAnet. Certainly the ARPAnet is +the best-known TCP/IP network. However as of June, 87, at least 130 +different vendors had products that support TCP/IP, and thousands of +networks of all kinds use it. + +First some basic definitions. The most accurate name for the set of +protocols we are describing is the "Internet protocol suite". TCP and +IP are two of the protocols in this suite. (They will be described +below.) Because TCP and IP are the best known of the protocols, it +has become common to use the term TCP/IP or IP/TCP to refer to the +whole family. It is probably not worth fighting this habit. However +this can lead to some oddities. For example, I find myself talking +about NFS as being based on TCP/IP, even though it doesn't use TCP at +all. (It does use IP. But it uses an alternative protocol, UDP, +instead of TCP. All of this alphabet soup will be unscrambled in the +following pages.) + +The Internet is a collection of networks, including the Arpanet, +NSFnet, regional networks such as NYsernet, local networks at a number +of University and research institutions, and a number of military +networks. The term "Internet" applies to this entire set of networks. +The subset of them that is managed by the Department of Defense is +referred to as the "DDN" (Defense Data Network). This includes some +research-oriented networks, such as the Arpanet, as well as more +strictly military ones. (Because much of the funding for Internet +protocol developments is done via the DDN organization, the terms +Internet and DDN can sometimes seem equivalent.) All of these +networks are connected to each other. Users can send messages from +any of them to any other, except where there are security or other +policy restrictions on access. Officially speaking, the Internet +protocol documents are simply standards adopted by the Internet +community for its own use. More recently, the Department of Defense +issued a MILSPEC definition of TCP/IP. This was intended to be a more +formal definition, appropriate for use in purchasing specifications. +However most of the TCP/IP community continues to use the Internet +standards. The MILSPEC version is intended to be consistent with it. + +Whatever it is called, TCP/IP is a family of protocols. A few provide + 1 + + + +"low-level" functions needed for many applications. These include IP, +TCP, and UDP. (These will be described in a bit more detail later.) +Others are protocols for doing specific tasks, e.g. transferring files +between computers, sending mail, or finding out who is logged in on +another computer. Initially TCP/IP was used mostly between +minicomputers or mainframes. These machines had their own disks, and +generally were self-contained. Thus the most important "traditional" +TCP/IP services are: + + - file transfer. The file transfer protocol (FTP) allows a user on + any computer to get files from another computer, or to send files + to another computer. Security is handled by requiring the user + to specify a user name and password for the other computer. + Provisions are made for handling file transfer between machines + with different character set, end of line conventions, etc. This + is not quite the same thing as more recent "network file system" + or "netbios" protocols, which will be described below. Rather, + FTP is a utility that you run any time you want to access a file + on another system. You use it to copy the file to your own + system. You then work with the local copy. (See RFC 959 for + specifications for FTP.) + + - remote login. The network terminal protocol (TELNET) allows a + user to log in on any other computer on the network. You start a + remote session by specifying a computer to connect to. From that + time until you finish the session, anything you type is sent to + the other computer. Note that you are really still talking to + your own computer. But the telnet program effectively makes your + computer invisible while it is running. Every character you type + is sent directly to the other system. Generally, the connection + to the remote computer behaves much like a dialup connection. + That is, the remote system will ask you to log in and give a + password, in whatever manner it would normally ask a user who had + just dialed it up. When you log off of the other computer, the + telnet program exits, and you will find yourself talking to your + own computer. Microcomputer implementations of telnet generally + include a terminal emulator for some common type of terminal. + (See RFC's 854 and 855 for specifications for telnet. By the + way, the telnet protocol should not be confused with Telenet, a + vendor of commercial network services.) + + - computer mail. This allows you to send messages to users on + other computers. Originally, people tended to use only one or + two specific computers. They would maintain "mail files" on + those machines. The computer mail system is simply a way for you + to add a message to another user's mail file. There are some + problems with this in an environment where microcomputers are + used. The most serious is that a micro is not well suited to + receive computer mail. When you send mail, the mail software + expects to be able to open a connection to the addressee's + computer, in order to send the mail. If this is a microcomputer, + it may be turned off, or it may be running an application other + than the mail system. For this reason, mail is normally handled + by a larger system, where it is practical to have a mail server + running all the time. Microcomputer mail software then becomes a + 2 + + + + user interface that retrieves mail from the mail server. (See + RFC 821 and 822 for specifications for computer mail. See RFC + 937 for a protocol designed for microcomputers to use in reading + mail from a mail server.) + +These services should be present in any implementation of TCP/IP, +except that micro-oriented implementations may not support computer +mail. These traditional applications still play a very important role +in TCP/IP-based networks. However more recently, the way in which +networks are used has been changing. The older model of a number of +large, self-sufficient computers is beginning to change. Now many +installations have several kinds of computers, including +microcomputers, workstations, minicomputers, and mainframes. These +computers are likely to be configured to perform specialized tasks. +Although people are still likely to work with one specific computer, +that computer will call on other systems on the net for specialized +services. This has led to the "server/client" model of network +services. A server is a system that provides a specific service for +the rest of the network. A client is another system that uses that +service. (Note that the server and client need not be on different +computers. They could be different programs running on the same +computer.) Here are the kinds of servers typically present in a +modern computer setup. Note that these computer services can all be +provided within the framework of TCP/IP. + + - network file systems. This allows a system to access files on + another computer in a somewhat more closely integrated fashion + than FTP. A network file system provides the illusion that disks + or other devices from one system are directly connected to other + systems. There is no need to use a special network utility to + access a file on another system. Your computer simply thinks it + has some extra disk drives. These extra "virtual" drives refer + to the other system's disks. This capability is useful for + several different purposes. It lets you put large disks on a few + computers, but still give others access to the disk space. Aside + from the obvious economic benefits, this allows people working on + several computers to share common files. It makes system + maintenance and backup easier, because you don't have to worry + about updating and backing up copies on lots of different + machines. A number of vendors now offer high-performance + diskless computers. These computers have no disk drives at all. + They are entirely dependent upon disks attached to common "file + servers". (See RFC's 1001 and 1002 for a description of + PC-oriented NetBIOS over TCP. In the workstation and + minicomputer area, Sun's Network File System is more likely to be + used. Protocol specifications for it are available from Sun + Microsystems.) + + - remote printing. This allows you to access printers on other + computers as if they were directly attached to yours. (The most + commonly used protocol is the remote lineprinter protocol from + Berkeley Unix. Unfortunately, there is no protocol document for + this. However the C code is easily obtained from Berkeley, so + implementations are common.) + + 3 + + + + - remote execution. This allows you to request that a particular + program be run on a different computer. This is useful when you + can do most of your work on a small computer, but a few tasks + require the resources of a larger system. There are a number of + different kinds of remote execution. Some operate on a command + by command basis. That is, you request that a specific command + or set of commands should run on some specific computer. (More + sophisticated versions will choose a system that happens to be + free.) However there are also "remote procedure call" systems + that allow a program to call a subroutine that will run on + another computer. (There are many protocols of this sort. + Berkeley Unix contains two servers to execute commands remotely: + rsh and rexec. The man pages describe the protocols that they + use. The user-contributed software with Berkeley 4.3 contains a + "distributed shell" that will distribute tasks among a set of + systems, depending upon load. Remote procedure call mechanisms + have been a topic for research for a number of years, so many + organizations have implementations of such facilities. The most + widespread commercially-supported remote procedure call protocols + seem to be Xerox's Courier and Sun's RPC. Protocol documents are + available from Xerox and Sun. There is a public implementation + of Courier over TCP as part of the user-contributed software with + Berkeley 4.3. An implementation of RPC was posted to Usenet by + Sun, and also appears as part of the user-contributed software + with Berkeley 4.3.) + + - name servers. In large installations, there are a number of + different collections of names that have to be managed. This + includes users and their passwords, names and network addresses + for computers, and accounts. It becomes very tedious to keep + this data up to date on all of the computers. Thus the databases + are kept on a small number of systems. Other systems access the + data over the network. (RFC 822 and 823 describe the name server + protocol used to keep track of host names and Internet addresses + on the Internet. This is now a required part of any TCP/IP + implementation. IEN 116 describes an older name server protocol + that is used by a few terminal servers and other products to look + up host names. Sun's Yellow Pages system is designed as a + general mechanism to handle user names, file sharing groups, and + other databases commonly used by Unix systems. It is widely + available commercially. Its protocol definition is available + from Sun.) + + - terminal servers. Many installations no longer connect terminals + directly to computers. Instead they connect them to terminal + servers. A terminal server is simply a small computer that only + knows how to run telnet (or some other protocol to do remote + login). If your terminal is connected to one of these, you + simply type the name of a computer, and you are connected to it. + Generally it is possible to have active connections to more than + one computer at the same time. The terminal server will have + provisions to switch between connections rapidly, and to notify + you when output is waiting for another connection. (Terminal + servers use the telnet protocol, already mentioned. However any + real terminal server will also have to support name service and a + 4 + + + + number of other protocols.) + + - network-oriented window systems. Until recently, high- + performance graphics programs had to execute on a computer that + had a bit-mapped graphics screen directly attached to it. + Network window systems allow a program to use a display on a + different computer. Full-scale network window systems provide an + interface that lets you distribute jobs to the systems that are + best suited to handle them, but still give you a single + graphically-based user interface. (The most widely-implemented + window system is X. A protocol description is available from + MIT's Project Athena. A reference implementation is publically + available from MIT. A number of vendors are also supporting + NeWS, a window system defined by Sun. Both of these systems are + designed to use TCP/IP.) + +Note that some of the protocols described above were designed by +Berkeley, Sun, or other organizations. Thus they are not officially +part of the Internet protocol suite. However they are implemented +using TCP/IP, just as normal TCP/IP application protocols are. Since +the protocol definitions are not considered proprietary, and since +commercially-support implementations are widely available, it is +reasonable to think of these protocols as being effectively part of +the Internet suite. Note that the list above is simply a sample of +the sort of services available through TCP/IP. However it does +contain the majority of the "major" applications. The other +commonly-used protocols tend to be specialized facilities for getting +information of various kinds, such as who is logged in, the time of +day, etc. However if you need a facility that is not listed here, we +encourage you to look through the current edition of Internet +Protocols (currently RFC 1011), which lists all of the available +protocols, and also to look at some of the major TCP/IP +implementations to see what various vendors have added. + + + +2. General description of the TCP/IP protocols + + +TCP/IP is a layered set of protocols. In order to understand what +this means, it is useful to look at an example. A typical situation +is sending mail. First, there is a protocol for mail. This defines a +set of commands which one machine sends to another, e.g. commands to +specify who the sender of the message is, who it is being sent to, and +then the text of the message. However this protocol assumes that +there is a way to communicate reliably between the two computers. +Mail, like other application protocols, simply defines a set of +commands and messages to be sent. It is designed to be used together +with TCP and IP. TCP is responsible for making sure that the commands +get through to the other end. It keeps track of what is sent, and +retransmitts anything that did not get through. If any message is too +large for one datagram, e.g. the text of the mail, TCP will split it +up into several datagrams, and make sure that they all arrive +correctly. Since these functions are needed for many applications, +they are put together into a separate protocol, rather than being part + 5 + + + +of the specifications for sending mail. You can think of TCP as +forming a library of routines that applications can use when they need +reliable network communications with another computer. Similarly, TCP +calls on the services of IP. Although the services that TCP supplies +are needed by many applications, there are still some kinds of +applications that don't need them. However there are some services +that every application needs. So these services are put together into +IP. As with TCP, you can think of IP as a library of routines that +TCP calls on, but which is also available to applications that don't +use TCP. This strategy of building several levels of protocol is +called "layering". We think of the applications programs such as +mail, TCP, and IP, as being separate "layers", each of which calls on +the services of the layer below it. Generally, TCP/IP applications +use 4 layers: + + - an application protocol such as mail + + - a protocol such as TCP that provides services need by many + applications + + - IP, which provides the basic service of getting datagrams to + their destination + + - the protocols needed to manage a specific physical medium, such + as Ethernet or a point to point line. + +TCP/IP is based on the "catenet model". (This is described in more +detail in IEN 48.) This model assumes that there are a large number +of independent networks connected together by gateways. The user +should be able to access computers or other resources on any of these +networks. Datagrams will often pass through a dozen different +networks before getting to their final destination. The routing +needed to accomplish this should be completely invisible to the user. +As far as the user is concerned, all he needs to know in order to +access another system is an "Internet address". This is an address +that looks like 128.6.4.194. It is actually a 32-bit number. However +it is normally written as 4 decimal numbers, each representing 8 bits +of the address. (The term "octet" is used by Internet documentation +for such 8-bit chunks. The term "byte" is not used, because TCP/IP is +supported by some computers that have byte sizes other than 8 bits.) +Generally the structure of the address gives you some information +about how to get to the system. For example, 128.6 is a network +number assigned by a central authority to Rutgers University. Rutgers +uses the next octet to indicate which of the campus Ethernets is +involved. 128.6.4 happens to be an Ethernet used by the Computer +Science Department. The last octet allows for up to 254 systems on +each Ethernet. (It is 254 because 0 and 255 are not allowed, for +reasons that will be discussed later.) Note that 128.6.4.194 and +128.6.5.194 would be different systems. The structure of an Internet +address is described in a bit more detail later. + +Of course we normally refer to systems by name, rather than by +Internet address. When we specify a name, the network software looks +it up in a database, and comes up with the corresponding Internet +address. Most of the network software deals strictly in terms of the + 6 + + + +address. (RFC 882 describes the name server technology used to handle +this lookup.) + +TCP/IP is built on "connectionless" technology. Information is +transfered as a sequence of "datagrams". A datagram is a collection +of data that is sent as a single message. Each of these datagrams is +sent through the network individually. There are provisions to open +connections (i.e. to start a conversation that will continue for some +time). However at some level, information from those connections is +broken up into datagrams, and those datagrams are treated by the +network as completely separate. For example, suppose you want to +transfer a 15000 octet file. Most networks can't handle a 15000 octet +datagram. So the protocols will break this up into something like 30 +500-octet datagrams. Each of these datagrams will be sent to the +other end. At that point, they will be put back together into the +15000-octet file. However while those datagrams are in transit, the +network doesn't know that there is any connection between them. It is +perfectly possible that datagram 14 will actually arrive before +datagram 13. It is also possible that somewhere in the network, an +error will occur, and some datagram won't get through at all. In that +case, that datagram has to be sent again. + +Note by the way that the terms "datagram" and "packet" often seem to +be nearly interchangable. Technically, datagram is the right word to +use when describing TCP/IP. A datagram is a unit of data, which is +what the protocols deal with. A packet is a physical thing, appearing +on an Ethernet or some wire. In most cases a packet simply contains a +datagram, so there is very little difference. However they can +differ. When TCP/IP is used on top of X.25, the X.25 interface breaks +the datagrams up into 128-byte packets. This is invisible to IP, +because the packets are put back together into a single datagram at +the other end before being processed by TCP/IP. So in this case, one +IP datagram would be carried by several packets. However with most +media, there are efficiency advantages to sending one datagram per +packet, and so the distinction tends to vanish. + + + +2.1 The TCP level + + +Two separate protocols are involved in handling TCP/IP datagrams. TCP +(the "transmission control protocol") is responsible for breaking up +the message into datagrams, reassembling them at the other end, +resending anything that gets lost, and putting things back in the +right order. IP (the "internet protocol") is responsible for routing +individual datagrams. It may seem like TCP is doing all the work. +And in small networks that is true. However in the Internet, simply +getting a datagram to its destination can be a complex job. A +connection may require the datagram to go through several networks at +Rutgers, a serial line to the John von Neuman Supercomputer Center, a +couple of Ethernets there, a series of 56Kbaud phone lines to another +NSFnet site, and more Ethernets on another campus. Keeping track of +the routes to all of the destinations and handling incompatibilities +among different transport media turns out to be a complex job. Note + 7 + + + +that the interface between TCP and IP is fairly simple. TCP simply +hands IP a datagram with a destination. IP doesn't know how this +datagram relates to any datagram before it or after it. + +It may have occurred to you that something is missing here. We have +talked about Internet addresses, but not about how you keep track of +multiple connections to a given system. Clearly it isn't enough to +get a datagram to the right destination. TCP has to know which +connection this datagram is part of. This task is referred to as +"demultiplexing." In fact, there are several levels of demultiplexing +going on in TCP/IP. The information needed to do this demultiplexing +is contained in a series of "headers". A header is simply a few extra +octets tacked onto the beginning of a datagram by some protocol in +order to keep track of it. It's a lot like putting a letter into an +envelope and putting an address on the outside of the envelope. +Except with modern networks it happens several times. It's like you +put the letter into a little envelope, your secretary puts that into a +somewhat bigger envelope, the campus mail center puts that envelope +into a still bigger one, etc. Here is an overview of the headers that +get stuck on a message that passes through a typical TCP/IP network: + +We start with a single data stream, say a file you are trying to send +to some other computer: + + ...................................................... + +TCP breaks it up into manageable chunks. (In order to do this, TCP +has to know how large a datagram your network can handle. Actually, +the TCP's at each end say how big a datagram they can handle, and then +they pick the smallest size.) + + .... .... .... .... .... .... .... .... + +TCP puts a header at the front of each datagram. This header actually +contains at least 20 octets, but the most important ones are a source +and destination "port number" and a "sequence number". The port +numbers are used to keep track of different conversations. Suppose 3 +different people are transferring files. Your TCP might allocate port +numbers 1000, 1001, and 1002 to these transfers. When you are sending +a datagram, this becomes the "source" port number, since you are the +source of the datagram. Of course the TCP at the other end has +assigned a port number of its own for the conversation. Your TCP has +to know the port number used by the other end as well. (It finds out +when the connection starts, as we will explain below.) It puts this +in the "destination" port field. Of course if the other end sends a +datagram back to you, the source and destination port numbers will be +reversed, since then it will be the source and you will be the +destination. Each datagram has a sequence number. This is used so +that the other end can make sure that it gets the datagrams in the +right order, and that it hasn't missed any. (See the TCP +specification for details.) TCP doesn't number the datagrams, but the +octets. So if there are 500 octets of data in each datagram, the +first datagram might be numbered 0, the second 500, the next 1000, the +next 1500, etc. Finally, I will mention the Checksum. This is a +number that is computed by adding up all the octets in the datagram + 8 + + + +(more or less - see the TCP spec). The result is put in the header. +TCP at the other end computes the checksum again. If they disagree, +then something bad happened to the datagram in transmission, and it is +thrown away. So here's what the datagram looks like now. + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Source Port | Destination Port | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Sequence Number | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Acknowledgment Number | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Data | |U|A|P|R|S|F| | + | Offset| Reserved |R|C|S|S|Y|I| Window | + | | |G|K|H|T|N|N| | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Checksum | Urgent Pointer | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | your data ... next 500 octets | + | ...... | + +If we abbreviate the TCP header as "T", the whole file now looks like +this: + + T.... T.... T.... T.... T.... T.... T.... + +You will note that there are items in the header that I have not +described above. They are generally involved with managing the +connection. In order to make sure the datagram has arrived at its +destination, the recipient has to send back an "acknowledgement". +This is a datagram whose "Acknowledgement number" field is filled in. +For example, sending a packet with an acknowledgement of 1500 +indicates that you have received all the data up to octet number 1500. +If the sender doesn't get an acknowledgement within a reasonable +amount of time, it sends the data again. The window is used to +control how much data can be in transit at any one time. It is not +practical to wait for each datagram to be acknowledged before sending +the next one. That would slow things down too much. On the other +hand, you can't just keep sending, or a fast computer might overrun +the capacity of a slow one to absorb data. Thus each end indicates +how much new data it is currently prepared to absorb by putting the +number of octets in its "Window" field. As the computer receives +data, the amount of space left in its window decreases. When it goes +to zero, the sender has to stop. As the receiver processes the data, +it increases its window, indicating that it is ready to accept more +data. Often the same datagram can be used to acknowledge receipt of a +set of data and to give permission for additional new data (by an +updated window). The "Urgent" field allows one end to tell the other +to skip ahead in its processing to a particular octet. This is often +useful for handling asynchronous events, for example when you type a +control character or other command that interrupts output. The other +fields are beyond the scope of this document. + + + + 9 + + + +2.2 The IP level + + +TCP sends each of these datagrams to IP. Of course it has to tell IP +the Internet address of the computer at the other end. Note that this +is all IP is concerned about. It doesn't care about what is in the +datagram, or even in the TCP header. IP's job is simply to find a +route for the datagram and get it to the other end. In order to allow +gateways or other intermediate systems to forward the datagram, it +adds its own header. The main things in this header are the source +and destination Internet address (32-bit addresses, like 128.6.4.194), +the protocol number, and another checksum. The source Internet +address is simply the address of your machine. (This is necessary so +the other end knows where the datagram came from.) The destination +Internet address is the address of the other machine. (This is +necessary so any gateways in the middle know where you want the +datagram to go.) The protocol number tells IP at the other end to +send the datagram to TCP. Although most IP traffic uses TCP, there +are other protocols that can use IP, so you have to tell IP which +protocol to send the datagram to. Finally, the checksum allows IP at +the other end to verify that the header wasn't damaged in transit. +Note that TCP and IP have separate checksums. IP needs to be able to +verify that the header didn't get damaged in transit, or it could send +a message to the wrong place. For reasons not worth discussing here, +it is both more efficient and safer to have TCP compute a separate +checksum for the TCP header and data. Once IP has tacked on its +header, here's what the message looks like: + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |Version| IHL |Type of Service| Total Length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Identification |Flags| Fragment Offset | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Time to Live | Protocol | Header Checksum | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Source Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Destination Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TCP header, then your data ...... | + | | + +If we represent the IP header by an "I", your file now looks like +this: + + IT.... IT.... IT.... IT.... IT.... IT.... IT.... + +Again, the header contains some additional fields that have not been +discussed. Most of them are beyond the scope of this document. The +flags and fragment offset are used to keep track of the pieces when a +datagram has to be split up. This can happen when datagrams are +forwarded through a network for which they are too big. (This will be +discussed a bit more below.) The time to live is a number that is +decremented whenever the datagram passes through a system. When it +goes to zero, the datagram is discarded. This is done in case a loop + 10 + + + +develops in the system somehow. Of course this should be impossible, +but well-designed networks are built to cope with "impossible" +conditions. + +At this point, it's possible that no more headers are needed. If your +computer happens to have a direct phone line connecting it to the +destination computer, or to a gateway, it may simply send the +datagrams out on the line (though likely a synchronous protocol such +as HDLC would be used, and it would add at least a few octets at the +beginning and end). + + + +2.3 The Ethernet level + + +However most of our networks these days use Ethernet. So now we have +to describe Ethernet's headers. Unfortunately, Ethernet has its own +addresses. The people who designed Ethernet wanted to make sure that +no two machines would end up with the same Ethernet address. +Furthermore, they didn't want the user to have to worry about +assigning addresses. So each Ethernet controller comes with an +address builtin from the factory. In order to make sure that they +would never have to reuse addresses, the Ethernet designers allocated +48 bits for the Ethernet address. People who make Ethernet equipment +have to register with a central authority, to make sure that the +numbers they assign don't overlap any other manufacturer. Ethernet is +a "broadcast medium". That is, it is in effect like an old party line +telephone. When you send a packet out on the Ethernet, every machine +on the network sees the packet. So something is needed to make sure +that the right machine gets it. As you might guess, this involves the +Ethernet header. Every Ethernet packet has a 14-octet header that +includes the source and destination Ethernet address, and a type code. +Each machine is supposed to pay attention only to packets with its own +Ethernet address in the destination field. (It's perfectly possible +to cheat, which is one reason that Ethernet communications are not +terribly secure.) Note that there is no connection between the +Ethernet address and the Internet address. Each machine has to have a +table of what Ethernet address corresponds to what Internet address. +(We will describe how this table is constructed a bit later.) In +addition to the addresses, the header contains a type code. The type +code is to allow for several different protocol families to be used on +the same network. So you can use TCP/IP, DECnet, Xerox NS, etc. at +the same time. Each of them will put a different value in the type +field. Finally, there is a checksum. The Ethernet controller +computes a checksum of the entire packet. When the other end receives +the packet, it recomputes the checksum, and throws the packet away if +the answer disagrees with the original. The checksum is put on the +end of the packet, not in the header. The final result is that your +message looks like this: + + + + + + 11 + + + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Ethernet destination address (first 32 bits) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Ethernet dest (last 16 bits) |Ethernet source (first 16 bits)| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Ethernet source address (last 32 bits) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Type code | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | IP header, then TCP header, then your data | + | | + ... + | | + | end of your data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Ethernet Checksum | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +If we represent the Ethernet header with "E", and the Ethernet +checksum with "C", your file now looks like this: + + EIT....C EIT....C EIT....C EIT....C EIT....C + +When these packets are received by the other end, of course all the +headers are removed. The Ethernet interface removes the Ethernet +header and the checksum. It looks at the type code. Since the type +code is the one assigned to IP, the Ethernet device driver passes the +datagram up to IP. IP removes the IP header. It looks at the IP +protocol field. Since the protocol type is TCP, it passes the +datagram up to TCP. TCP now looks at the sequence number. It uses +the sequence numbers and other information to combine all the +datagrams into the original file. + +The ends our initial summary of TCP/IP. There are still some crucial +concepts we haven't gotten to, so we'll now go back and add details in +several areas. (For detailed descriptions of the items discussed here +see, RFC 793 for TCP, RFC 791 for IP, and RFC's 894 and 826 for +sending IP over Ethernet.) + + + +3. Well-known sockets and the applications layer + + +So far, we have described how a stream of data is broken up into +datagrams, sent to another computer, and put back together. However +something more is needed in order to accomplish anything useful. +There has to be a way for you to open a connection to a specified +computer, log into it, tell it what file you want, and control the +transmission of the file. (If you have a different application in +mind, e.g. computer mail, some analogous protocol is needed.) This is +done by "application protocols". The application protocols run "on +top" of TCP/IP. That is, when they want to send a message, they give +the message to TCP. TCP makes sure it gets delivered to the other +end. Because TCP and IP take care of all the networking details, the + 12 + + + +applications protocols can treat a network connection as if it were a +simple byte stream, like a terminal or phone line. + +Before going into more details about applications programs, we have to +describe how you find an application. Suppose you want to send a file +to a computer whose Internet address is 128.6.4.7. To start the +process, you need more than just the Internet address. You have to +connect to the FTP server at the other end. In general, network +programs are specialized for a specific set of tasks. Most systems +have separate programs to handle file transfers, remote terminal +logins, mail, etc. When you connect to 128.6.4.7, you have to specify +that you want to talk to the FTP server. This is done by having +"well-known sockets" for each server. Recall that TCP uses port +numbers to keep track of individual conversations. User programs +normally use more or less random port numbers. However specific port +numbers are assigned to the programs that sit waiting for requests. +For example, if you want to send a file, you will start a program +called "ftp". It will open a connection using some random number, say +1234, for the port number on its end. However it will specify port +number 21 for the other end. This is the official port number for the +FTP server. Note that there are two different programs involved. You +run ftp on your side. This is a program designed to accept commands +from your terminal and pass them on to the other end. The program +that you talk to on the other machine is the FTP server. It is +designed to accept commands from the network connection, rather than +an interactive terminal. There is no need for your program to use a +well-known socket number for itself. Nobody is trying to find it. +However the servers have to have well-known numbers, so that people +can open connections to them and start sending them commands. The +official port numbers for each program are given in "Assigned +Numbers". + +Note that a connection is actually described by a set of 4 numbers: +the Internet address at each end, and the TCP port number at each end. +Every datagram has all four of those numbers in it. (The Internet +addresses are in the IP header, and the TCP port numbers are in the +TCP header.) In order to keep things straight, no two connections can +have the same set of numbers. However it is enough for any one number +to be different. For example, it is perfectly possible for two +different users on a machine to be sending files to the same other +machine. This could result in connections with the following +parameters: + + Internet addresses TCP ports + connection 1 128.6.4.194, 128.6.4.7 1234, 21 + connection 2 128.6.4.194, 128.6.4.7 1235, 21 + +Since the same machines are involved, the Internet addresses are the +same. Since they are both doing file transfers, one end of the +connection involves the well-known port number for FTP. The only +thing that differs is the port number for the program that the users +are running. That's enough of a difference. Generally, at least one +end of the connection asks the network software to assign it a port +number that is guaranteed to be unique. Normally, it's the user's +end, since the server has to use a well-known number. + 13 + + + + +Now that we know how to open connections, let's get back to the +applications programs. As mentioned earlier, once TCP has opened a +connection, we have something that might as well be a simple wire. +All the hard parts are handled by TCP and IP. However we still need +some agreement as to what we send over this connection. In effect +this is simply an agreement on what set of commands the application +will understand, and the format in which they are to be sent. +Generally, what is sent is a combination of commands and data. They +use context to differentiate. For example, the mail protocol works +like this: Your mail program opens a connection to the mail server at +the other end. Your program gives it your machine's name, the sender +of the message, and the recipients you want it sent to. It then sends +a command saying that it is starting the message. At that point, the +other end stops treating what it sees as commands, and starts +accepting the message. Your end then starts sending the text of the +message. At the end of the message, a special mark is sent (a dot in +the first column). After that, both ends understand that your program +is again sending commands. This is the simplest way to do things, and +the one that most applications use. + +File transfer is somewhat more complex. The file transfer protocol +involves two different connections. It starts out just like mail. +The user's program sends commands like "log me in as this user", "here +is my password", "send me the file with this name". However once the +command to send data is sent, a second connection is opened for the +data itself. It would certainly be possible to send the data on the +same connection, as mail does. However file transfers often take a +long time. The designers of the file transfer protocol wanted to +allow the user to continue issuing commands while the transfer is +going on. For example, the user might make an inquiry, or he might +abort the transfer. Thus the designers felt it was best to use a +separate connection for the data and leave the original command +connection for commands. (It is also possible to open command +connections to two different computers, and tell them to send a file +from one to the other. In that case, the data couldn't go over the +command connection.) + +Remote terminal connections use another mechanism still. For remote +logins, there is just one connection. It normally sends data. When +it is necessary to send a command (e.g. to set the terminal type or to +change some mode), a special character is used to indicate that the +next character is a command. If the user happens to type that special +character as data, two of them are sent. + +We are not going to describe the application protocols in detail in +this document. It's better to read the RFC's yourself. However there +are a couple of common conventions used by applications that will be +described here. First, the common network representation: TCP/IP is +intended to be usable on any computer. Unfortunately, not all +computers agree on how data is represented. There are differences in +character codes (ASCII vs. EBCDIC), in end of line conventions +(carriage return, line feed, or a representation using counts), and in +whether terminals expect characters to be sent individually or a line +at a time. In order to allow computers of different kinds to +communicate, each applications protocol defines a standard + 14 + + + +representation. Note that TCP and IP do not care about the +representation. TCP simply sends octets. However the programs at +both ends have to agree on how the octets are to be interpreted. The +RFC for each application specifies the standard representation for +that application. Normally it is "net ASCII". This uses ASCII +characters, with end of line denoted by a carriage return followed by +a line feed. For remote login, there is also a definition of a +"standard terminal", which turns out to be a half-duplex terminal with +echoing happening on the local machine. Most applications also make +provisions for the two computers to agree on other representations +that they may find more convenient. For example, PDP-10's have 36-bit +words. There is a way that two PDP-10's can agree to send a 36-bit +binary file. Similarly, two systems that prefer full-duplex terminal +conversations can agree on that. However each application has a +standard representation, which every machine must support. + + + +3.1 An example application: SMTP + + +In order to give a bit better idea what is involved in the application +protocols, I'm going to show an example of SMTP, which is the mail +protocol. (SMTP is "simple mail transfer protocol.) We assume that a +computer called TOPAZ.RUTGERS.EDU wants to send the following message. + + Date: Sat, 27 Jun 87 13:26:31 EDT + From: hedrick@topaz.rutgers.edu + To: levy@red.rutgers.edu + Subject: meeting + + Let's get together Monday at 1pm. + +First, note that the format of the message itself is described by an +Internet standard (RFC 822). The standard specifies the fact that the +message must be transmitted as net ASCII (i.e. it must be ASCII, with +carriage return/linefeed to delimit lines). It also describes the +general structure, as a group of header lines, then a blank line, and +then the body of the message. Finally, it describes the syntax of the +header lines in detail. Generally they consist of a keyword and then +a value. + +Note that the addressee is indicated as LEVY@RED.RUTGERS.EDU. +Initially, addresses were simply "person at machine". However recent +standards have made things more flexible. There are now provisions +for systems to handle other systems' mail. This can allow automatic +forwarding on behalf of computers not connected to the Internet. It +can be used to direct mail for a number of systems to one central mail +server. Indeed there is no requirement that an actual computer by the +name of RED.RUTGERS.EDU even exist. The name servers could be set up +so that you mail to department names, and each department's mail is +routed automatically to an appropriate computer. It is also possible +that the part before the @ is something other than a user name. It is +possible for programs to be set up to process mail. There are also +provisions to handle mailing lists, and generic names such as + 15 + + + +"postmaster" or "operator". + +The way the message is to be sent to another system is described by +RFC's 821 and 974. The program that is going to be doing the sending +asks the name server several queries to determine where to route the +message. The first query is to find out which machines handle mail +for the name RED.RUTGERS.EDU. In this case, the server replies that +RED.RUTGERS.EDU handles its own mail. The program then asks for the +address of RED.RUTGERS.EDU, which is 128.6.4.2. Then the mail program +opens a TCP connection to port 25 on 128.6.4.2. Port 25 is the +well-known socket used for receiving mail. Once this connection is +established, the mail program starts sending commands. Here is a +typical conversation. Each line is labelled as to whether it is from +TOPAZ or RED. Note that TOPAZ initiated the connection: + + RED 220 RED.RUTGERS.EDU SMTP Service at 29 Jun 87 05:17:18 EDT + TOPAZ HELO topaz.rutgers.edu + RED 250 RED.RUTGERS.EDU - Hello, TOPAZ.RUTGERS.EDU + TOPAZ MAIL From: + RED 250 MAIL accepted + TOPAZ RCPT To: + RED 250 Recipient accepted + TOPAZ DATA + RED 354 Start mail input; end with . + TOPAZ Date: Sat, 27 Jun 87 13:26:31 EDT + TOPAZ From: hedrick@topaz.rutgers.edu + TOPAZ To: levy@red.rutgers.edu + TOPAZ Subject: meeting + TOPAZ + TOPAZ Let's get together Monday at 1pm. + TOPAZ . + RED 250 OK + TOPAZ QUIT + RED 221 RED.RUTGERS.EDU Service closing transmission channel + +First, note that commands all use normal text. This is typical of the +Internet standards. Many of the protocols use standard ASCII +commands. This makes it easy to watch what is going on and to +diagnose problems. For example, the mail program keeps a log of each +conversation. If something goes wrong, the log file can simply be +mailed to the postmaster. Since it is normal text, he can see what +was going on. It also allows a human to interact directly with the +mail server, for testing. (Some newer protocols are complex enough +that this is not practical. The commands would have to have a syntax +that would require a significant parser. Thus there is a tendency for +newer protocols to use binary formats. Generally they are structured +like C or Pascal record structures.) Second, note that the responses +all begin with numbers. This is also typical of Internet protocols. +The allowable responses are defined in the protocol. The numbers +allow the user program to respond unambiguously. The rest of the +response is text, which is normally for use by any human who may be +watching or looking at a log. It has no effect on the operation of +the programs. (However there is one point at which the protocol uses +part of the text of the response.) The commands themselves simply +allow the mail program on one end to tell the mail server the + 16 + + + +information it needs to know in order to deliver the message. In this +case, the mail server could get the information by looking at the +message itself. But for more complex cases, that would not be safe. +Every session must begin with a HELO, which gives the name of the +system that initiated the connection. Then the sender and recipients +are specified. (There can be more than one RCPT command, if there are +several recipients.) Finally the data itself is sent. Note that the +text of the message is terminated by a line containing just a period. +(If such a line appears in the message, the period is doubled.) After +the message is accepted, the sender can send another message, or +terminate the session as in the example above. + +Generally, there is a pattern to the response numbers. The protocol +defines the specific set of responses that can be sent as answers to +any given command. However programs that don't want to analyze them +in detail can just look at the first digit. In general, responses +that begin with a 2 indicate success. Those that begin with 3 +indicate that some further action is needed, as shown above. 4 and 5 +indicate errors. 4 is a "temporary" error, such as a disk filling. +The message should be saved, and tried again later. 5 is a permanent +error, such as a non-existent recipient. The message should be +returned to the sender with an error message. + +(For more details about the protocols mentioned in this section, see +RFC's 821/822 for mail, RFC 959 for file transfer, and RFC's 854/855 +for remote logins. For the well-known port numbers, see the current +edition of Assigned Numbers, and possibly RFC 814.) + + + +4. Protocols other than TCP: UDP and ICMP + + +So far, we have described only connections that use TCP. Recall that +TCP is responsible for breaking up messages into datagrams, and +reassembling them properly. However in many applications, we have +messages that will always fit in a single datagram. An example is +name lookup. When a user attempts to make a connection to another +system, he will generally specify the system by name, rather than +Internet address. His system has to translate that name to an address +before it can do anything. Generally, only a few systems have the +database used to translate names to addresses. So the user's system +will want to send a query to one of the systems that has the database. +This query is going to be very short. It will certainly fit in one +datagram. So will the answer. Thus it seems silly to use TCP. Of +course TCP does more than just break things up into datagrams. It +also makes sure that the data arrives, resending datagrams where +necessary. But for a question that fits in a single datagram, we +don't need all the complexity of TCP to do this. If we don't get an +answer after a few seconds, we can just ask again. For applications +like this, there are alternatives to TCP. + +The most common alternative is UDP ("user datagram protocol"). UDP is +designed for applications where you don't need to put sequences of +datagrams together. It fits into the system much like TCP. There is + 17 + + + +a UDP header. The network software puts the UDP header on the front +of your data, just as it would put a TCP header on the front of your +data. Then UDP sends the data to IP, which adds the IP header, +putting UDP's protocol number in the protocol field instead of TCP's +protocol number. However UDP doesn't do as much as TCP does. It +doesn't split data into multiple datagrams. It doesn't keep track of +what it has sent so it can resend if necessary. About all that UDP +provides is port numbers, so that several programs can use UDP at +once. UDP port numbers are used just like TCP port numbers. There +are well-known port numbers for servers that use UDP. Note that the +UDP header is shorter than a TCP header. It still has source and +destination port numbers, and a checksum, but that's about it. No +sequence number, since it is not needed. UDP is used by the protocols +that handle name lookups (see IEN 116, RFC 882, and RFC 883), and a +number of similar protocols. + +Another alternative protocol is ICMP ("Internet control message +protocol"). ICMP is used for error messages, and other messages +intended for the TCP/IP software itself, rather than any particular +user program. For example, if you attempt to connect to a host, your +system may get back an ICMP message saying "host unreachable". ICMP +can also be used to find out some information about the network. See +RFC 792 for details of ICMP. ICMP is similar to UDP, in that it +handles messages that fit in one datagram. However it is even simpler +than UDP. It doesn't even have port numbers in its header. Since all +ICMP messages are interpreted by the network software itself, no port +numbers are needed to say where a ICMP message is supposed to go. + + + +5. Keeping track of names and information: the domain system + + +As we indicated earlier, the network software generally needs a 32-bit +Internet address in order to open a connection or send a datagram. +However users prefer to deal with computer names rather than numbers. +Thus there is a database that allows the software to look up a name +and find the corresponding number. When the Internet was small, this +was easy. Each system would have a file that listed all of the other +systems, giving both their name and number. There are now too many +computers for this approach to be practical. Thus these files have +been replaced by a set of name servers that keep track of host names +and the corresponding Internet addresses. (In fact these servers are +somewhat more general than that. This is just one kind of information +stored in the domain system.) Note that a set of interlocking servers +are used, rather than a single central one. There are now so many +different institutions connected to the Internet that it would be +impractical for them to notify a central authority whenever they +installed or moved a computer. Thus naming authority is delegated to +individual institutions. The name servers form a tree, corresponding +to institutional structure. The names themselves follow a similar +structure. A typical example is the name BORAX.LCS.MIT.EDU. This is +a computer at the Laboratory for Computer Science (LCS) at MIT. In +order to find its Internet address, you might potentially have to +consult 4 different servers. First, you would ask a central server + 18 + + + +(called the root) where the EDU server is. EDU is a server that keeps +track of educational institutions. The root server would give you the +names and Internet addresses of several servers for EDU. (There are +several servers at each level, to allow for the possibly that one +might be down.) You would then ask EDU where the server for MIT is. +Again, it would give you names and Internet addresses of several +servers for MIT. Generally, not all of those servers would be at MIT, +to allow for the possibility of a general power failure at MIT. Then +you would ask MIT where the server for LCS is, and finally you would +ask one of the LCS servers about BORAX. The final result would be the +Internet address for BORAX.LCS.MIT.EDU. Each of these levels is +referred to as a "domain". The entire name, BORAX.LCS.MIT.EDU, is +called a "domain name". (So are the names of the higher-level +domains, such as LCS.MIT.EDU, MIT.EDU, and EDU.) + +Fortunately, you don't really have to go through all of this most of +the time. First of all, the root name servers also happen to be the +name servers for the top-level domains such as EDU. Thus a single +query to a root server will get you to MIT. Second, software +generally remembers answers that it got before. So once we look up a +name at LCS.MIT.EDU, our software remembers where to find servers for +LCS.MIT.EDU, MIT.EDU, and EDU. It also remembers the translation of +BORAX.LCS.MIT.EDU. Each of these pieces of information has a "time to +live" associated with it. Typically this is a few days. After that, +the information expires and has to be looked up again. This allows +institutions to change things. + +The domain system is not limited to finding out Internet addresses. +Each domain name is a node in a database. The node can have records +that define a number of different properties. Examples are Internet +address, computer type, and a list of services provided by a computer. +A program can ask for a specific piece of information, or all +information about a given name. It is possible for a node in the +database to be marked as an "alias" (or nickname) for another node. +It is also possible to use the domain system to store information +about users, mailing lists, or other objects. + +There is an Internet standard defining the operation of these +databases, as well as the protocols used to make queries of them. +Every network utility has to be able to make such queries, since this +is now the official way to evaluate host names. Generally utilities +will talk to a server on their own system. This server will take care +of contacting the other servers for them. This keeps down the amount +of code that has to be in each application program. + +The domain system is particularly important for handling computer +mail. There are entry types to define what computer handles mail for +a given name, to specify where an individual is to receive mail, and +to define mailing lists. + +(See RFC's 882, 883, and 973 for specifications of the domain system. +RFC 974 defines the use of the domain system in sending mail.) + + + + 19 + + + +6. Routing + + +The description above indicated that the IP implementation is +responsible for getting datagrams to the destination indicated by the +destination address, but little was said about how this would be done. +The task of finding how to get a datagram to its destination is +referred to as "routing". In fact many of the details depend upon the +particular implementation. However some general things can be said. + +First, it is necessary to understand the model on which IP is based. +IP assumes that a system is attached to some local network. We assume +that the system can send datagrams to any other system on its own +network. (In the case of Ethernet, it simply finds the Ethernet +address of the destination system, and puts the datagram out on the +Ethernet.) The problem comes when a system is asked to send a +datagram to a system on a different network. This problem is handled +by gateways. A gateway is a system that connects a network with one +or more other networks. Gateways are often normal computers that +happen to have more than one network interface. For example, we have +a Unix machine that has two different Ethernet interfaces. Thus it is +connected to networks 128.6.4 and 128.6.3. This machine can act as a +gateway between those two networks. The software on that machine must +be set up so that it will forward datagrams from one network to the +other. That is, if a machine on network 128.6.4 sends a datagram to +the gateway, and the datagram is addressed to a machine on network +128.6.3, the gateway will forward the datagram to the destination. +Major communications centers often have gateways that connect a number +of different networks. (In many cases, special-purpose gateway +systems provide better performance or reliability than general-purpose +systems acting as gateways. A number of vendors sell such systems.) + +Routing in IP is based entirely upon the network number of the +destination address. Each computer has a table of network numbers. +For each network number, a gateway is listed. This is the gateway to +be used to get to that network. Note that the gateway doesn't have to +connect directly to the network. It just has to be the best place to +go to get there. For example at Rutgers, our interface to NSFnet is +at the John von Neuman Supercomputer Center (JvNC). Our connection to +JvNC is via a high-speed serial line connected to a gateway whose +address is 128.6.3.12. Systems on net 128.6.3 will list 128.6.3.12 as +the gateway for many off-campus networks. However systems on net +128.6.4 will list 128.6.4.1 as the gateway to those same off-campus +networks. 128.6.4.1 is the gateway between networks 128.6.4 and +128.6.3, so it is the first step in getting to JvNC. + +When a computer wants to send a datagram, it first checks to see if +the destination address is on the system's own local network. If so, +the datagram can be sent directly. Otherwise, the system expects to +find an entry for the network that the destination address is on. The +datagram is sent to the gateway listed in that entry. This table can +get quite big. For example, the Internet now includes several hundred +individual networks. Thus various strategies have been developed to +reduce the size of the routing table. One strategy is to depend upon +"default routes". Often, there is only one gateway out of a network. + 20 + + + +This gateway might connect a local Ethernet to a campus-wide backbone +network. In that case, we don't need to have a separate entry for +every network in the world. We simply define that gateway as a +"default". When no specific route is found for a datagram, the +datagram is sent to the default gateway. A default gateway can even +be used when there are several gateways on a network. There are +provisions for gateways to send a message saying "I'm not the best +gateway -- use this one instead." (The message is sent via ICMP. See +RFC 792.) Most network software is designed to use these messages to +add entries to their routing tables. Suppose network 128.6.4 has two +gateways, 128.6.4.59 and 128.6.4.1. 128.6.4.59 leads to several other +internal Rutgers networks. 128.6.4.1 leads indirectly to the NSFnet. +Suppose we set 128.6.4.59 as a default gateway, and have no other +routing table entries. Now what happens when we need to send a +datagram to MIT? MIT is network 18. Since we have no entry for +network 18, the datagram will be sent to the default, 128.6.4.59. As +it happens, this gateway is the wrong one. So it will forward the +datagram to 128.6.4.1. But it will also send back an error saying in +effect: "to get to network 18, use 128.6.4.1". Our software will then +add an entry to the routing table. Any future datagrams to MIT will +then go directly to 128.6.4.1. (The error message is sent using the +ICMP protocol. The message type is called "ICMP redirect.") + +Most IP experts recommend that individual computers should not try to +keep track of the entire network. Instead, they should start with +default gateways, and let the gateways tell them the routes, as just +described. However this doesn't say how the gateways should find out +about the routes. The gateways can't depend upon this strategy. They +have to have fairly complete routing tables. For this, some sort of +routing protocol is needed. A routing protocol is simply a technique +for the gateways to find each other, and keep up to date about the +best way to get to every network. RFC 1009 contains a review of +gateway design and routing. However rip.doc is probably a better +introduction to the subject. It contains some tutorial material, and +a detailed description of the most commonly-used routing protocol. + + + +7. Details about Internet addresses: subnets and broadcasting + + +As indicated earlier, Internet addresses are 32-bit numbers, normally +written as 4 octets (in decimal), e.g. 128.6.4.7. There are actually +3 different types of address. The problem is that the address has to +indicate both the network and the host within the network. It was +felt that eventually there would be lots of networks. Many of them +would be small, but probably 24 bits would be needed to represent all +the IP networks. It was also felt that some very big networks might +need 24 bits to represent all of their hosts. This would seem to lead +to 48 bit addresses. But the designers really wanted to use 32 bit +addresses. So they adopted a kludge. The assumption is that most of +the networks will be small. So they set up three different ranges of +address. Addresses beginning with 1 to 126 use only the first octet +for the network number. The other three octets are available for the +host number. Thus 24 bits are available for hosts. These numbers are + 21 + + + +used for large networks. But there can only be 126 of these very big +networks. The Arpanet is one, and there are a few large commercial +networks. But few normal organizations get one of these "class A" +addresses. For normal large organizations, "class B" addresses are +used. Class B addresses use the first two octets for the network +number. Thus network numbers are 128.1 through 191.254. (We avoid 0 +and 255, for reasons that we see below. We also avoid addresses +beginning with 127, because that is used by some systems for special +purposes.) The last two octets are available for host addesses, +giving 16 bits of host address. This allows for 64516 computers, +which should be enough for most organizations. (It is possible to get +more than one class B address, if you run out.) Finally, class C +addresses use three octets, in the range 192.1.1 to 223.254.254. +These allow only 254 hosts on each network, but there can be lots of +these networks. Addresses above 223 are reserved for future use, as +class D and E (which are currently not defined). + +Many large organizations find it convenient to divide their network +number into "subnets". For example, Rutgers has been assigned a class +B address, 128.6. We find it convenient to use the third octet of the +address to indicate which Ethernet a host is on. This division has no +significance outside of Rutgers. A computer at another institution +would treat all datagrams addressed to 128.6 the same way. They would +not look at the third octet of the address. Thus computers outside +Rutgers would not have different routes for 128.6.4 or 128.6.5. But +inside Rutgers, we treat 128.6.4 and 128.6.5 as separate networks. In +effect, gateways inside Rutgers have separate entries for each Rutgers +subnet, whereas gateways outside Rutgers just have one entry for +128.6. Note that we could do exactly the same thing by using a +separate class C address for each Ethernet. As far as Rutgers is +concerned, it would be just as convenient for us to have a number of +class C addresses. However using class C addresses would make things +inconvenient for the rest of the world. Every institution that wanted +to talk to us would have to have a separate entry for each one of our +networks. If every institution did this, there would be far too many +networks for any reasonable gateway to keep track of. By subdividing +a class B network, we hide our internal structure from everyone else, +and save them trouble. This subnet strategy requires special +provisions in the network software. It is described in RFC 950. + +0 and 255 have special meanings. 0 is reserved for machines that +don't know their address. In certain circumstances it is possible for +a machine not to know the number of the network it is on, or even its +own host address. For example, 0.0.0.23 would be a machine that knew +it was host number 23, but didn't know on what network. + +255 is used for "broadcast". A broadcast is a message that you want +every system on the network to see. Broadcasts are used in some +situations where you don't know who to talk to. For example, suppose +you need to look up a host name and get its Internet address. +Sometimes you don't know the address of the nearest name server. In +that case, you might send the request as a broadcast. There are also +cases where a number of systems are interested in information. It is +then less expensive to send a single broadcast than to send datagrams +individually to each host that is interested in the information. In + 22 + + + +order to send a broadcast, you use an address that is made by using +your network address, with all ones in the part of the address where +the host number goes. For example, if you are on network 128.6.4, you +would use 128.6.4.255 for broadcasts. How this is actually +implemented depends upon the medium. It is not possible to send +broadcasts on the Arpanet, or on point to point lines. However it is +possible on an Ethernet. If you use an Ethernet address with all its +bits on (all ones), every machine on the Ethernet is supposed to look +at that datagram. + +Although the official broadcast address for network 128.6.4 is now +128.6.4.255, there are some other addresses that may be treated as +broadcasts by certain implementations. For convenience, the standard +also allows 255.255.255.255 to be used. This refers to all hosts on +the local network. It is often simpler to use 255.255.255.255 instead +of finding out the network number for the local network and forming a +broadcast address such as 128.6.4.255. In addition, certain older +implementations may use 0 instead of 255 to form the broadcast +address. Such implementations would use 128.6.4.0 instead of +128.6.4.255 as the broadcast address on network 128.6.4. Finally, +certain older implementations may not understand about subnets. Thus +they consider the network number to be 128.6. In that case, they will +assume a broadcast address of 128.6.255.255 or 128.6.0.0. Until +support for broadcasts is implemented properly, it can be a somewhat +dangerous feature to use. + +Because 0 and 255 are used for unknown and broadcast addresses, normal +hosts should never be given addresses containing 0 or 255. Addresses +should never begin with 0, 127, or any number above 223. Addresses +violating these rules are sometimes referred to as "Martians", because +of rumors that the Central University of Mars is using network 225. + + + +8. Datagram fragmentation and reassembly + + +TCP/IP is designed for use with many different kinds of network. +Unfortunately, network designers do not agree about how big packets +can be. Ethernet packets can be 1500 octets long. Arpanet packets +have a maximum of around 1000 octets. Some very fast networks have +much larger packet sizes. At first, you might think that IP should +simply settle on the smallest possible size. Unfortunately, this +would cause serious performance problems. When transferring large +files, big packets are far more efficient than small ones. So we want +to be able to use the largest packet size possible. But we also want +to be able to handle networks with small limits. There are two +provisions for this. First, TCP has the ability to "negotiate" about +datagram size. When a TCP connection first opens, both ends can send +the maximum datagram size they can handle. The smaller of these +numbers is used for the rest of the connection. This allows two +implementations that can handle big datagrams to use them, but also +lets them talk to implementations that can't handle them. However +this doesn't completely solve the problem. The most serious problem +is that the two ends don't necessarily know about all of the steps in + 23 + + + +between. For example, when sending data between Rutgers and Berkeley, +it is likely that both computers will be on Ethernets. Thus they will +both be prepared to handle 1500-octet datagrams. However the +connection will at some point end up going over the Arpanet. It can't +handle packets of that size. For this reason, there are provisions to +split datagrams up into pieces. (This is referred to as +"fragmentation".) The IP header contains fields indicating the a +datagram has been split, and enough information to let the pieces be +put back together. If a gateway connects an Ethernet to the Arpanet, +it must be prepared to take 1500-octet Ethernet packets and split them +into pieces that will fit on the Arpanet. Furthermore, every host +implementation of TCP/IP must be prepared to accept pieces and put +them back together. This is referred to as "reassembly". + +TCP/IP implementations differ in the approach they take to deciding on +datagram size. It is fairly common for implementations to use +576-byte datagrams whenever they can't verify that the entire path is +able to handle larger packets. This rather conservative strategy is +used because of the number of implementations with bugs in the code to +reassemble fragments. Implementors often try to avoid ever having +fragmentation occur. Different implementors take different approaches +to deciding when it is safe to use large datagrams. Some use them +only for the local network. Others will use them for any network on +the same campus. 576 bytes is a "safe" size, which every +implementation must support. + + + +9. Ethernet encapsulation: ARP + + +There was a brief discussion earlier about what IP datagrams look like +on an Ethernet. The discussion showed the Ethernet header and +checksum. However it left one hole: It didn't say how to figure out +what Ethernet address to use when you want to talk to a given Internet +address. In fact, there is a separate protocol for this, called ARP +("address resolution protocol"). (Note by the way that ARP is not an +IP protocol. That is, the ARP datagrams do not have IP headers.) +Suppose you are on system 128.6.4.194 and you want to connect to +system 128.6.4.7. Your system will first verify that 128.6.4.7 is on +the same network, so it can talk directly via Ethernet. Then it will +look up 128.6.4.7 in its ARP table, to see if it already knows the +Ethernet address. If so, it will stick on an Ethernet header, and +send the packet. But suppose this system is not in the ARP table. +There is no way to send the packet, because you need the Ethernet +address. So it uses the ARP protocol to send an ARP request. +Essentially an ARP request says "I need the Ethernet address for +128.6.4.7". Every system listens to ARP requests. When a system sees +an ARP request for itself, it is required to respond. So 128.6.4.7 +will see the request, and will respond with an ARP reply saying in +effect "128.6.4.7 is 8:0:20:1:56:34". (Recall that Ethernet addresses +are 48 bits. This is 6 octets. Ethernet addresses are conventionally +shown in hex, using the punctuation shown.) Your system will save +this information in its ARP table, so future packets will go directly. +Most systems treat the ARP table as a cache, and clear entries in it + 24 + + + +if they have not been used in a certain period of time. + +Note by the way that ARP requests must be sent as "broadcasts". There +is no way that an ARP request can be sent directly to the right +system. After all, the whole reason for sending an ARP request is +that you don't know the Ethernet address. So an Ethernet address of +all ones is used, i.e. ff:ff:ff:ff:ff:ff. By convention, every +machine on the Ethernet is required to pay attention to packets with +this as an address. So every system sees every ARP requests. They +all look to see whether the request is for their own address. If so, +they respond. If not, they could just ignore it. (Some hosts will +use ARP requests to update their knowledge about other hosts on the +network, even if the request isn't for them.) Note that packets whose +IP address indicates broadcast (e.g. 255.255.255.255 or 128.6.4.255) +are also sent with an Ethernet address that is all ones. + + + +10. Getting more information + + +This directory contains documents describing the major protocols. +There are literally hundreds of documents, so we have chosen the ones +that seem most important. Internet standards are called RFC's. RFC +stands for Request for Comment. A proposed standard is initially +issued as a proposal, and given an RFC number. When it is finally +accepted, it is added to Official Internet Protocols, but it is still +referred to by the RFC number. We have also included two IEN's. +(IEN's used to be a separate classification for more informal +documents. This classification no longer exists -- RFC's are now used +for all official Internet documents, and a mailing list is used for +more informal reports.) The convention is that whenever an RFC is +revised, the revised version gets a new number. This is fine for most +purposes, but it causes problems with two documents: Assigned Numbers +and Official Internet Protocols. These documents are being revised +all the time, so the RFC number keeps changing. You will have to look +in rfc-index.txt to find the number of the latest edition. Anyone who +is seriously interested in TCP/IP should read the RFC describing IP +(791). RFC 1009 is also useful. It is a specification for gateways +to be used by NSFnet. As such, it contains an overview of a lot of +the TCP/IP technology. You should probably also read the description +of at least one of the application protocols, just to get a feel for +the way things work. Mail is probably a good one (821/822). TCP +(793) is of course a very basic specification. However the spec is +fairly complex, so you should only read this when you have the time +and patience to think about it carefully. Fortunately, the author of +the major RFC's (Jon Postel) is a very good writer. The TCP RFC is +far easier to read than you would expect, given the complexity of what +it is describing. You can look at the other RFC's as you become +curious about their subject matter. + +Here is a list of the documents you are more likely to want: + + rfc-index list of all RFC's + + 25 + + + + rfc1012 somewhat fuller list of all RFC's + + rfc1011 Official Protocols. It's useful to scan this to see + what tasks protocols have been built for. This defines + which RFC's are actual standards, as opposed to + requests for comments. + + rfc1010 Assigned Numbers. If you are working with TCP/IP, you + will probably want a hardcopy of this as a reference. + It's not very exciting to read. It lists all the + offically defined well-known ports and lots of other + things. + + rfc1009 NSFnet gateway specifications. A good overview of IP + routing and gateway technology. + + rfc1001/2 netBIOS: networking for PC's + + rfc973 update on domains + + rfc959 FTP (file transfer) + + rfc950 subnets + + rfc937 POP2: protocol for reading mail on PC's + + rfc894 how IP is to be put on Ethernet, see also rfc825 + + rfc882/3 domains (the database used to go from host names to + Internet address and back -- also used to handle UUCP + these days). See also rfc973 + + rfc854/5 telnet - protocol for remote logins + + rfc826 ARP - protocol for finding out Ethernet addresses + + rfc821/2 mail + + rfc814 names and ports - general concepts behind well-known + ports + + rfc793 TCP + + rfc792 ICMP + + rfc791 IP + + rfc768 UDP + + rip.doc details of the most commonly-used routing protocol + + ien-116 old name server (still needed by several kinds of + system) + + ien-48 the Catenet model, general description of the + 26 + + + + philosophy behind TCP/IP + +The following documents are somewhat more specialized. + + rfc813 window and acknowledgement strategies in TCP + + rfc815 datagram reassembly techniques + + rfc816 fault isolation and resolution techniques + + rfc817 modularity and efficiency in implementation + + rfc879 the maximum segment size option in TCP + + rfc896 congestion control + + rfc827,888,904,975,985 + EGP and related issues + +To those of you who may be reading this document remotely instead of +at Rutgers: The most important RFC's have been collected into a +three-volume set, the DDN Protocol Handbook. It is available from the +DDN Network Information Center, SRI International, 333 Ravenswood +Avenue, Menlo Park, California 94025 (telephone: 800-235-3155). You +should be able to get them via anonymous FTP from sri-nic.arpa. File +names are: + + RFC's: + rfc:rfc-index.txt + rfc:rfcxxx.txt + IEN's: + ien:ien-index.txt + ien:ien-xxx.txt + +rip.doc is available by anonymous FTP from topaz.rutgers.edu, as +/pub/tcp-ip-docs/rip.doc. + +Sites with access to UUCP but not FTP may be able to retreive them via +UUCP from UUCP host rutgers. The file names would be + + RFC's: + /topaz/pub/pub/tcp-ip-docs/rfc-index.txt + /topaz/pub/pub/tcp-ip-docs/rfcxxx.txt + IEN's: + /topaz/pub/pub/tcp-ip-docs/ien-index.txt + /topaz/pub/pub/tcp-ip-docs/ien-xxx.txt + /topaz/pub/pub/tcp-ip-docs/rip.doc + +Note that SRI-NIC has the entire set of RFC's and IEN's, but rutgers +and topaz have only those specifically mentioned above. + + + + + + 27 + diff --git a/src/nos/doc/ka9qbgn/USERMAN.TXT b/src/nos/doc/ka9qbgn/USERMAN.TXT new file mode 100644 index 00000000..f3af48a5 --- /dev/null +++ b/src/nos/doc/ka9qbgn/USERMAN.TXT @@ -0,0 +1,3420 @@ + + + + + + + + + + NET User Reference Manual (NOS Version) + + + Phil Karn, KA9Q + + + + + + +1. The NET.EXE Program + +The MS-DOS executable file net.exe provides Internet (TCP/IP), +NET/ROM and AX.25 facilities. Because it has an internal multi- +tasking operating system, net.exe can act simultaneously as a +client, a server and a packet switch for all three sets of proto- +cols. That is, while a local user accesses remote services, the +system can also provide those same services to remote users while +also switching IP, NET/ROM and AX.25 packets and frames between +other client and server nodes. + +The keyboard and display is used by the local operator to control +both host and gateway level functions, for which a number of com- +mands are provided. + +1.1. Installation + +Net.exe uses the following directory structure: + + /net + /net/spool + /net/spool/help + /net/spool/mail + /net/spool/mqueue + /net/spool/rqueue + /net/spool/news + + +The "/net" directory is not strictly necessary, and defaults to +the root of the current drive. Any name may be chosen using the +-d command-line option (described below). The alias, +autoexec.net, dialer, domain.txt and ftpusers configuration files +are located here. + +The "/spool" directory and its sub-directories are used by the +bbs, SMTP and NNTP services. The areas, forward.bbs, history, +mail.log, rewrite and signatur configuration files are located +here. + +The alias, forward.bbs and rewrite files are described in the +document "maildoc", which should be found at the same location as + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 2 - + + +this file. + +1.2. net [-b] [-s ] [-d ] [] + +1.2.1. -b + +The -b option specifies the use of BIOS for console output; the +default is to write directly to the video display buffer. Use +this option if you are running under a windowing package and have +trouble with output "bleeding through" on top of other windows. + +1.2.2. -s + +The -s option specifies the size of the socket array to be allo- +cated within net.exe. This limits the number of network connec- +tions that may exist simultaneously. The default is 40. + +1.2.3. -d + +The -d option allows the user to specify a directory for the con- +figuration and spool files; it defaults to the root directory of +the system. + +1.2.4. Startup file + +After all command-line options, the name of a startup file may be +specified. If no startup file is specified, net.exe attempts to +open a file named autoexec.net in the configuration directory of +the current drive. If the file exists, it is read and executed as +though its contents were typed on the console as commands. (See +the Commands chapter.) This feature is useful for attaching com- +munication interfaces, configuring network addresses, and start- +ing the various services. + + + + + + + + + + + + + + + + + + + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 3 - + + +2. Console modes + +The console may be in one of two modes: command mode and converse +mode. In command mode, the prompt net> is displayed and any of +the commands described in the Commands chapter may be entered. In +converse mode, keyboard input is processed according to the +current session. + +Sessions come in many types, including Telnet, FTP, AX25, NETROM, +Ping, More, Hopcheck and Tip. In a Telnet, AX25, NETROM, or Tip +session, keyboard input is sent to the remote system and any out- +put from the remote system is displayed on the console. In a FTP +session, keyboard input is first examined to see if it is a known +local command; if so it is executed locally. If not, it is +"passed through" to the remote FTP server. (See the FTP Subcom- +mands chapter). In a Ping session the user may test the path to a +remote site, and in a More session, the user may examine a local +file. A Hopcheck session is used to trace the path taken by pack- +ets to reach a specified destination. + +The keyboard also has cooked and raw states. In cooked state, +input is line-at-a-time; the user may use the line editing char- +acters ^U, ^R and backspace to erase the line, redisplay the line +and erase the last character, respectively. Hitting either +return or line feed passes the complete line up to the applica- +tion. In raw state, each character is immediately passed to the +application as it is typed. + +The keyboard is always in cooked state in command mode. It is +also cooked in converse mode on an AX25, FTP or NET/ROM session. +In a Telnet session it depends on whether the remote end has +issued (and the local end has accepted) the Telnet WILL ECHO +option (see the echo command). + +On the IBM-PC, the user may escape back to command mode by hit- +ting the F10 key. On other systems, the user must enter the +escape character, which is by default control-] (hex 1d, ASCII +GS). (Note that this is distinct from the ASCII character of the +same name). The escape character can be changed (see the escape +command). + +In the IBM PC version, each session (including the command "ses- +sion") has its own screen. When a new session is created, the +command display is saved in memory and the screen is cleared. +When the command escape key (usually F10) is hit, the current +session screen is saved and the command screen is restored. When +a session is resumed, its screen is restored exactly as it +appeared when it was last current. + + + + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 4 - + + +3. Commands + +This chapter describes the commands recognized in command mode, +or within a startup file such as autoexec.net. These are given in +the following notation: + + command + command literalparameter + command subcommand + command [] + command a | b + + +Many commands take subcommands or parameters, which may be +optional or required. In general, if a required subcommand or +parameter is omitted, an error message will summarize the avail- +able subcommands or required parameters. (Giving a '?' in place +of the subcommand will also generate the message. This is useful +when the command word alone is a valid command.) If a command +takes an optional value parameter, issuing the command without +the parameter generally displays the current value of the vari- +able. (Exceptions to this rule are noted in the individual com- +mand descriptions.) + +Two or more parameters separated by vertical bar(s) denote a +choice between the specified values. Optional parameters are +shown enclosed in [brackets], and a parameter enclosed in should be replaced with an actual value or string. For +example, the notation denotes an actual host or gateway, +which may be specified in one of two ways: as a numeric IP +address in dotted decimal notation (eg. 44.0.0.1), or as a sym- +bolic name listed in the file domain.txt. + +All commands and many subcommands may be abbreviated. You only +need type enough of a command's name to distinguish it from oth- +ers that begin with the same series of letters. Parameters, how- +ever, must be typed in full. + +Certain FTP subcommands (eg. put, get, dir, etc) are recognized +only in converse mode with the appropriate FTP session; they are +not recognized in command mode. (See the FTP Subcommands +chapter.) + +3.1. + +Entering a carriage return (empty line) while in command mode +puts you in converse mode with the current session. If there is +no current session, net.exe remains in command mode. + +3.2. ! + +An alias for the shell command. + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 5 - + + +3.3. # + +Commands starting with the hash mark (#) are ignored. This is +mainly useful for comments in the autoexec.net file. + +3.4. abort [] + +Abort a FTP get, put or dir operation in progress. If issued +without an argument, the current session is aborted. (This com- +mand works only on FTP sessions.) When receiving a file, abort +simply resets the data connection; the next incoming data packet +will generate a TCP RST (reset) response to clear the remote +server. When sending a file, abort sends a premature end-of- +file. Note that in both cases abort will leave a partial copy of +the file on the destination machine, which must be removed manu- +ally if it is unwanted. + +3.5. arp + +Display the Address Resolution Protocol table that maps IP +addresses to their subnet (link) addresses on subnetworks capable +of broadcasting. For each IP address entry the subnet type (eg. +Ethernet, AX.25), subnet address and time to expiration is shown. +If the link address is currently unknown, the number of IP +datagrams awaiting resolution is also shown. + +3.5.1. arp add ethernet | ax25 | + + +Add a permanent entry to the table. It will not time out as will +an automatically-created entry, but must be removed with the arp +drop command. + +3.5.2. arp publish ethernet | ax25 | + + +This command is similar to the arp add command, but system will +also respond to any ARP request it sees on the network that seeks +the specified address. (Use this feature with great care.) + +3.5.3. arp drop ax25 | ethernet + +Remove the specified entry from the ARP table. + +3.5.4. arp flush + +Drop all automatically-created entries in the ARP table; per- +manent entries are not affected. + +3.6. asystat + +Display statistics on attached asynchronous communications inter- +faces (8250 or 16550A), if any. The display for each port con- +sists of three lines. The first line gives the port label and the + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 6 - + + +configuration flags; these indicate whether the port is a 16550A +chip, the trigger character if any, whether CTS flow control is +enabled, whether RLSD (carrier detect) line control is enabled, +and the speed in bits per second. (Receiving the trigger charac- +ter causes the driver to signal upper layer software that data is +ready; it is automatically set to the appropriate frame end char- +acter for SLIP, PPP and NRS lines.) + +The second line of the status display shows receiver (RX) event +counts: the total number of receive interrupts, received charac- +ters, receiver overruns (lost characters) and the receiver high +water mark. The high water mark is the maximum number of charac- +ters ever read from the device during a single interrupt. This is +useful for monitoring system interrupt latency margins as it +shows how close the port hardware has come to overflowing due to +the inability of the CPU to respond to a receiver interrupt in +time. 8250 chips have no FIFO, so the high water mark cannot go +higher than 2 before overruns occur. The 16550A chip, however, +has a 16-byte receive FIFO which the software programs to inter- +rupt the CPU when the FIFO is one-quarter full. The high water +mark should typically be 4 or 5 when a 16550A is used; higher +values indicate that the CPU has at least once been slow to +respond to a receiver interrupt. + +When the 16550A is used, a count of FIFO timeouts is also +displayed on the RX status line. These are generated automati- +cally by the 16550A when three character intervals go by with +more than 0 but less than 4 characters in the FIFO. Since the +characters that make up a SLIP or NRS frame are normally sent at +full line speed, this count will usually be a lower bound on the +number of frames received on the port, as only the last fragment +of a frame generally results in a timeout (and then only when the +frame is not a multiple of 4 bytes long.) + +Finally, the software fifo overruns and high water mark are +displayed. These indicate whether the parameter on the +attach command needs to be adjusted (see the Attach Commands +chapter). + +The third line shows transmit (TX) statistics, including a total +count of transmit interrupts, transmitted characters, the length +of the transmit queue in bytes, the number of status interrupts, +and the number of THRE timeouts. The status interrupt count will +be zero unless CTS flow control or RLSD line control has been +enabled. The THRE timeout is a stopgap measure to catch lost +transmit interrupts, which seem to happen when there is a lot of +activity (ideally, this will be zero). + +3.7. attach ... + +Configure and attach a hardware interface to the system. Detailed +instructions for each driver are in the Attach Commands chapter. +An easy way to obtain a summary of the parameters required for a +given device is to issue a partial attach command (eg. attach + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 7 - + + +packet). This produces a usage message giving the complete com- +mand format. + +3.8. ax25 ... + +These commands are used for AX25 interfaces. + +3.8.1. ax25 blimit [] + +Display or set the AX25 retransmission backoff limit. Normally +each successive AX25 retransmission is delayed by twice the value +of the previous interval; this is called binary exponential back- +off. When the backoff reaches the blimit setting it is held at +that value, which defaults to 30. To prevent the possibility of +"congestive collapse" on a loaded channel, blimit should be set +at least as high as the number of stations sharing the channel. +Note that this is applicable only on actual AX25 connections; UI +frames will never be retransmitted by the AX25 layer. + +3.8.2. ax25 digipeat [on | off] + +Display or set the digipeater enable flag. + +3.8.3. ax25 flush + +Clear the AX.25 "heard" list (see ax25 heard). + +3.8.4. ax25 heard + +Display the AX.25 "heard" list. For each interface that is con- +figured to use AX.25, a list of all callsigns heard through that +interface is shown, along with a count of the number of packets +heard from each station and the interval, in hr:min:sec format, +since each station was last heard. The local station always +appears first in the listing; the packet count actually reflects +the number of packets transmitted. This entry is always present +even if no packets have been sent. + +3.8.5. ax25 irtt [] + +Display or set the initial value of smoothed round trip time to +be used when a new AX25 connection is created. The value is in +milliseconds. The actual round trip time will be learned by meas- +urement once the connection has been established. + +3.8.6. ax25 kick + +Force a retransmission on the specified AX.25 control block. + +3.8.7. ax25 maxframe [] + +Establish the maximum number of frames that will be allowed to +remain unacknowledged at one time on new AX.25 connections. This +number cannot be greater than 7. + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 8 - + + +3.8.8. ax25 mycall [] + +Display or set the local AX.25 address. The standard format is +used (eg. KA9Q-0 or WB6RQN-5). This command must be given before +any attach commands using AX.25 mode are given. + +3.8.9. ax25 paclen [] + +Limit the size of I-fields on new AX.25 connections. If IP +datagrams or fragments larger than this are transmitted, they +will be transparently fragmented at the AX.25 level, sent as a +series of I frames, and reassembled back into a complete IP +datagram or fragment at the other end of the link. To have any +effect on IP datagrams, this parameter should be less than or +equal to the MTU of the associated interface. + +3.8.10. ax25 pthresh [] + +Display or set the poll threshold to be used for new AX.25 Ver- +sion 2 connections. The poll threshold controls retransmission +behavior as follows. If the oldest unacknowledged I-frame size is +less than the poll threshold, it will be sent with the poll (P) +bit set if a timeout occurs. If the oldest unacked I-frame size +is equal to or greater than the threshold, then a RR or RNR +frame, as appropriate, with the poll bit set will be sent if a +timeout occurs. + +The idea behind the poll threshold is that the extra time needed +to send a "small" I-frame instead of a supervisory frame when +polling after a timeout is small, and since there's a good chance +the I-frame will have to be sent anyway (i.e., if it were lost +previously) then you might as well send it as the poll. But if +the I-frame is large, send a supervisory (RR/RNR) poll instead to +determine first if retransmitting the oldest unacknowledged I- +frame is necessary; the timeout might have been caused by a lost +acknowledgement. This is obviously a tradeoff, so experiment +with the poll threshold setting. The default is 128 bytes, one +half the default value of paclen. + +3.8.11. ax25 reset + +Delete the AX.25 connection control block at the specified +address. + +3.8.12. ax25 retry [] + +Limit the number of successive unsuccessful retransmission +attempts on new AX.25 connections. If this limit is exceeded, +link re-establishment is attempted. If this fails retry times, +then the connection is abandoned and all queued data is deleted. + +3.8.13. ax25 route + +Display the AX.25 routing table that specifies the digipeaters to + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 9 - + + +be used in reaching a given station. + +3.8.13.1. ax25 route add [digis ... ] + +Add an entry to the AX.25 routing table. An automatic ax25 route +add is executed if digipeaters are specified in an AX25 connect +command, or if a connection is received from a remote station via +digipeaters. Such automatic routing table entries won't override +locally created entries, however. + +3.8.13.2. ax25 route drop + +Drop an entry from the AX.25 routing table. + +3.8.14. ax25 status [] + +Without an argument, display a one-line summary of each AX.25 +control block. If the address of a particular control block is +specified, the contents of that control block are dumped in more +detail. Note that the send queue units are frames, while the +receive queue units are bytes. + +3.8.15. ax25 t3 [] + +Display or set the AX.25 idle "keep alive" timer. Value is in +milliseconds. + +3.8.16. ax25 version [1 | 2] + +Display or set the version of the AX.25 protocol to attempt to +use on new connections. The default is 1 (the version that does +not use the poll/final bits). + +3.8.17. ax25 window [] + +Set the number of bytes that can be pending on an AX.25 receive +queue beyond which I frames will be answered with RNR (Receiver +Not Ready) responses. This presently applies only to suspended +interactive AX.25 sessions, since incoming I-frames containing +network (IP, NET/ROM) packets are always processed immediately +and are not placed on the receive queue. However, when an AX.25 +connection carries both interactive and network packet traffic, +an RNR generated because of backlogged interactive traffic will +also stop network packet traffic from being sent. + +3.9. cd [] + +Change the current working directory, and display the new set- +ting. Without an argument, cd simply displays the current direc- +tory without change. The pwd command is an alias for cd. + +3.10. close [] + +Close the specified session; without an argument, close the + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 10 - + + +current session. On an AX.25 session, this command initiates a +disconnect. On a FTP or Telnet session, this command sends a FIN +(i.e., initiates a close) on the session's TCP connection. This +is an alternative to asking the remote server to initiate a close +(QUIT to FTP, or the logout command appropriate for the remote +system in the case of Telnet). When either FTP or Telnet sees +the incoming half of a TCP connection close, it automatically +responds by closing the outgoing half of the connection. Close +is more graceful than the reset command, in that it is less +likely to leave the remote TCP in a "half-open" state. + +3.11. connect [ ... ] + +Initiate a "vanilla" AX.25 session to the specified call sign +using the specified interface. Data sent on this session goes out +in conventional AX.25 packets with no upper layer protocol. The +de-facto presentation standard format is used, in that each +packet holds one line of text, terminated by a carriage return. +A single AX.25 connection may be used for terminal-to-terminal, +IP and NET/ROM traffic. The three types of data are automatically +separated by their AX.25 Level 3 Protocol IDs. + +Up to 7 optional digipeaters may be given; note that the word via +is NOT needed. If digipeaters are specified, they are automati- +cally added to the AX25 routing table as though the ax25 route +add command had been given before issuing the connect command. + +3.12. delete + +Delete a filename in the current working directory. + +3.13. detach + +Detach a previously attached interface from the system. All IP +routing table entries referring to this interface are deleted, +and forwarding references by any other interface to this inter- +face are removed. + +3.14. dialer + +Setup an autodialer session for the interface. Whenever the +interface is idle for the interval in , the autodialer +will ping the . If there is no answer after +attempts, the autodialer will execute the special commands con- +tained in the . + +If the interval in is zero, a previous dialer command +process will be removed. If the number of is zero, the + will be executed without pinging the . + +The file may have any valid name, and must be located in the con- +figuration directory (see the Installion section). The commands +in the file are described in the Dialer Subcommands chapter. + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 11 - + + +3.15. dir [] + +List the contents of the specified directory on the console. If +no argument is given, the current directory is listed. Note that +this command works by first listing the directory into a tem- +porary file, and then creating a more session to display it. +After this completes, the temporary file is deleted. + +3.16. disconnect [] + +An alias for the close command (for the benefit of AX.25 users). + +3.17. domain ... + +These commands are used for access to the Domain Name Service. + +3.17.1. domain addserver + +Add one or more domain name server(s) to the list of name +servers. + +3.17.2. domain dropserver + +Remove one or more domain name server(s) from the list of name +servers. + +3.17.3. domain listservers + +List the currently configured domain name servers, along with +statistics on how many queries and replies have been exchanged +with each one, response times, etc. + +3.17.4. domain query + +Send a query to a domain server asking for all resource records +associated with this , and list the records. + +3.17.5. domain retry [] + +Display or set the number of attempts to reach each server on the +list during one call to the resolver. If this count is exceeded, +a failure indication is returned. If set to 0, the list will +cycle forever; this may be useful for unattended operation. The +default is 3. + +3.17.6. domain suffix [] + +Display or specify the default domain name suffix to be appended +to a host name when it contains no periods. For example, if the +suffix is set to ampr.org and the user enters telnet ka9q, the +domain resolver will attempt to find ka9q.ampr.org. If the host +name being sought contains one or more periods, however, the +default suffix is NOT applied (eg. telnet foo.bar would NOT be +turned into foo.bar.ampr.org). + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 12 - + + +3.17.7. domain trace [on | off] + +Display or set the flag controlling the tracing of domain server +requests and responses. Trace messages will be seen only if a +domain name being sought is not found in the local cache file, +domain.txt. + +3.17.8. domain cache ... + +These commands are used for the use of the resource record file +domain.txt, and the local memory cache. + +3.17.8.1. domain cache clean [on | off] + +Display or set the flag controlling the removal of resource +records from the domain.txt file whose time-to-live has reached +zero. + +When clean is off (the default), expired records will be +retained; if no replacement can be obtained from another domain +name server, these records will continue to be used. + +When clean is on, expired records will be removed from the file +whenever any new record is added to the file. + +3.17.8.2. domain cache list + +List the current contents of the local memory cache. + +3.17.8.3. domain cache size [] + +Display or set the nominal maximum size of the local memory +cache. The default is 20. + +(Note: The cache may be temporarily larger when waiting for new +records to be written to the domain.txt file.) + +3.17.8.4. domain cache wait [] + +Display or set the interval in seconds to wait for additional +activity before updating the domain.txt file. The default is 300 +seconds (5 minutes). + +3.18. echo [accept | refuse] + +Display or set the flag controlling client Telnet's response to a +remote WILL ECHO offer. + +The Telnet presentation protocol specifies that in the absence of +a negotiated agreement to the contrary, neither end echoes data +received from the other. In this mode, a Telnet client session +echoes keyboard input locally and nothing is actually sent until +a carriage return is typed. Local line editing is also performed: +backspace deletes the last character typed, while control-U + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 13 - + + +deletes the entire line. + +When communicating from keyboard to keyboard the standard local +echo mode is used, so the setting of this parameter has no +effect. However, many timesharing systems (eg. UNIX) prefer to do +their own echoing of typed input. (This makes screen editors work +right, among other things). Such systems send a Telnet WILL ECHO +offer immediately upon receiving an incoming Telnet connection +request. If echo accept is in effect, a client Telnet session +will automatically return a DO ECHO response. In this mode, local +echoing and editing is turned off and each key stroke is sent +immediately (subject to the Nagle tinygram algorithm in TCP). +While this mode is just fine across an Ethernet, it is clearly +inefficient and painful across slow paths like packet radio chan- +nels. Specifying echo refuse causes an incoming WILL ECHO offer +to be answered with a DONT ECHO; the client Telnet session +remains in the local echo mode. Sessions already in the remote +echo mode are unaffected. (Note: Berkeley Unix has a bug in that +it will still echo input even after the client has refused the +WILL ECHO offer. To get around this problem, enter the stty -echo +command to the shell once you have logged in.) + +3.19. eol [unix | standard] + +Display or set Telnet's end-of-line behavior when in remote echo +mode. In standard mode, each key is sent as-is. In unix mode, +carriage returns are translated to line feeds. This command is +not necessary with all UNIX systems; use it only when you find +that a particular system responds to line feeds but not carriage +returns. Only SunOS release 3.2 seems to exhibit this behavior; +later releases are fixed. + +3.20. escape [] + +Display or set the current command-mode escape character in hex. +(This command is not provided on the IBM-PC; on the PC, the +escape char is always F10.) + +3.21. etherstat + +Display 3-Com Ethernet controller statistics (if configured). + +3.22. exit + +Exit the net.exe program and return to MS-DOS. + +3.23. finger [ ...] + +Issue a network finger request for user user at host hostid. This +creates a client session which may be interrupted, resumed, +reset, etc, just like a Telnet client session. + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 14 - + + +3.24. ftp + +Open an FTP control channel to the specified remote host and +enter converse mode on the new session. Responses from the +remote server are displayed directly on the screen. See the FTP +Subcommands chapter for descriptions of the commands available in +a FTP session. + +3.25. help + +Display a brief summary of top-level commands. + +3.26. hop ... + +These commands are used to test the connectivity of the network. + +3.26.1. hop check + +Initiate a hopcheck session to the specified host. This uses a +series of UDP "probe" packets with increasing IP TTL fields to +determine the sequence of gateways in the path to the specified +destination. This function is patterned after the UNIX traceroute +facility. + +ICMP message tracing should be turned off before this command is +executed (see the icmp trace command). + +3.26.2. hop maxttl [] + +Display or set the maximum TTL value to be used in hop check ses- +sions. This effectively bounds the radius of the search. + +3.26.3. hop maxwait [] + +Display or set the maximum interval that a hopcheck session will +wait for responses at each stage of the trace. The default is 5 +seconds. + +3.26.4. hop queries [] + +Display or set the number of UDP probes that will be sent at each +stage of the trace. The default is 3. + +3.26.5. hop trace [on | off] + +Display or set the flag that controls the display of additional +information during a hop check session. + +3.27. hostname [] + +Display or set the local host's name. By convention this should +be the same as the host's primary domain name. This string is +used only in the greeting messages of the various network +servers; note that it does NOT set the system's IP address. + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 15 - + + +If is the same as an (see the Attach commands +chapter), this command will search for a CNAME domain resource +record which corresponds to the IP address of the . + +3.28. hs + +Display statistics about the HS high speed HDLC driver (if con- +figured and active). + +3.29. icmp ... + +These commands are used for the Internet Control Message Protocol +service. + +3.29.1. icmp echo [on | off] + +Display or set the flag controlling the asynchronous display of +ICMP Echo Reply packets. This flag must be on for one-shot pings +to work (see the ping command.) + +3.29.2. icmp status + +Display statistics about the Internet Control Message Protocol +(ICMP), including the number of ICMP messages of each type sent +or received. + +3.29.3. icmp trace [on | off] + +Display or set the flag controlling the display of ICMP error +messages. These informational messages are generated by Internet +routers in response to routing, protocol or congestion problems. +This option should be turned off before using the hop check +facility because it relies on ICMP Time Exceeded messages, and +the asynchronous display of these messages will be mingled with +hop check command output. + +3.30. ifconfig + +Display a list of interfaces, with a short status for each. + +3.30.1. ifconfig + +Display an extended status of the interface. + +3.30.2. ifconfig broadcast
    + +Set the broadcast address for the interface. The
    takes +the form of an IP address with 1's in the host part of the +address. This is related to the netmask sub-command. See also the +arp command. + +3.30.3. ifconfig encapsulation + +Not fully implemented. + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 16 - + + +3.30.4. ifconfig forward + +Set a forwarding interface for multiple channel interfaces. To +remove the forward, set to . + +3.30.5. ifconfig ipaddress + +Set the IP address for this interface. It is standard Internet +practice that each interface has its own address. For hosts with +only one interface, the interface address is usually the same as +the host address. See also the hostname and ip address commands. + +3.30.6. ifconfig linkaddress + +Set the hardware dependant address for this interface. + +3.30.7. ifconfig mtu + +Set the MTU for this interface. See the Setting ... MTU, MSS and +Window chapter for more information. + +3.30.8. ifconfig netmask
    + +Set the sub-net mask for this interface. The
    takes the +form of an IP address with 1's in the network and subnet parts of +the address, and 0's in the host part of the address. This is +related to the broadcast sub-command. See also the route command. + +3.30.9. ifconfig rxbuf + +Not yet implemented. + +3.31. ip ... + +These commands are used for the Internet Protocol service. + +3.31.1. ip address [] + +Display or set the default local IP address. This command must be +given before an attach command if it is to be used as the default +IP address for the interface. + +3.31.2. ip rtimer [] + +Display or set the IP reassembly timeout. The default is 30 +seconds. + +3.31.3. ip status + +Display Internet Protocol (IP) statistics, such as total packet +counts and error counters of various types. + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 17 - + + +3.31.4. ip ttl [] + +Display or set the time-to-live value placed in each outgoing IP +datagram. This limits the number of switch hops the datagram will +be allowed to take. The idea is to bound the lifetime of the +packet should it become caught in a routing loop, so make the +value slightly larger than the number of hops across the network +you expect to transit packets. The default is set at compilation +time to the official recommended value for the Internet. + +3.32. isat [on | off] + +Display or set the AT flag. Currently, there is no sure-fire way +to determine the type of clock-chip being used. If an AT type +clock is in use, this command will allow measurement of time in +milliseconds, rather than clock ticks (55 milliseconds per clock +tick). + +3.32.1. kick [] + +Kick all sockets associated with a session; if no argument is +given, kick the current session. Performs the same function as +the ax25 kick and tcp kick commands, but is easier to type. + +3.33. log [stop | ] + +Display or set the filename for logging server sessions. If stop +is given as the argument, logging is terminated (the servers +themselves are unaffected). If a file name is given as an argu- +ment, server session log entries will be appended to it. + +3.34. mbox + +Display the status of the mailbox server system (if configured). + +3.35. memory ... + +These commands are used for memory allocation. + +3.35.1. memory free + +Display the storage allocator free list. Each entry consists of a +starting address, in hex, and a size, in decimal bytes. + +3.35.2. memory sizes + +Display a histogram of storage allocator request sizes. Each his- +togram bin is a binary order of magnitude (i.e., a factor of 2). + +3.35.3. memory status + +Display a summary of storage allocator statistics. The first line +shows the base address of the heap, its total size, the amount of +heap memory available in bytes and as a percentage of the total + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 18 - + + +heap size, and the amount of memory left over (i.e., not placed +on the heap at startup) and therefore available for shell subcom- +mands. + +The second line shows the total number of calls to allocate and +free blocks of memory, the difference of these two values (i.e., +the number of allocated blocks outstanding), the number of allo- +cation requests that were denied due to lack of memory, and the +number of calls to free() that attempted to free garbage (eg. by +freeing the same block twice or freeing a garbled pointer). + +The third line shows the number of calls to malloc and free that +occurred with interrupts off. In normal situations these values +should be zero. The fourth line shows statistics for the special +pool of fixed-size buffers used to satisfy requests for memory at +interrupt time. The variables shown are the number of buffers +currently in the pool, their size, and the number of requests +that failed due to exhaustion of the pool. + +3.36. mkdir + +Create a sub-directory in the current working directory. + +3.37. mode [vc | datagram] + +Control the default transmission mode on the specified AX.25 +interface. In datagram mode, IP packets are encapsulated in AX.25 +UI frames and transmitted without any other link level mechan- +isms, such as connections or acknowledgements. + +In vc (virtual circuit) mode, IP packets are encapsulated in +AX.25 I frames and are acknowledged at the link level according +to the AX.25 protocol. Link level connections are opened if +necessary. + +In both modes, ARP is used to map IP to AX.25 addresses. The +defaults can be overridden with the type-of-service (TOS) bits in +the IP header. Turning on the "reliability" bit causes I frames +to be used, while turning on the "low delay" bit uses UI frames. +(The effect of turning on both bits is undefined and subject to +change). + +In both modes, IP-level fragmentation is done if the datagram is +larger than the interface MTU. In virtual circuit mode, how- +ever, the resulting datagram (or fragments) is further fragmented +at the AX.25 layer if it (or they) are still larger than the +AX.25 paclen parameter. In AX.25 fragmentation, datagrams are +broken into several I frames and reassembled at the receiving end +before being passed to IP. This is preferable to IP fragmentation +whenever possible because of decreased overhead (the IP header +isn't repeated in each fragment) and increased robustness (a lost +fragment is immediately retransmitted by the link layer). + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 19 - + + +3.38. more [ ...] + +Display the specified file(s) a screen at a time. To proceed to +the next screen, press the space bar; to cancel the display, hit +the 'q' key. The more command creates a session that you can +suspend and resume just like any other session. + +3.39. param [ ...] + +Invoke a device-specific control routine. On a KISS TNC inter- +face, this sends control packets to the TNC. Data bytes are +treated as decimal. For example, param ax0 1 255 will set the +keyup timer (type field = 1) on the KISS TNC configured as ax0 to +2.55 seconds (255 x .01 sec). On a SLIP interface, the param +command allows the baud rate to be read (without arguments) or +set. The implementation of this command for the various inter- +face drivers is incomplete and subject to change. + +3.40. ping [ [ []]] + +Ping (send ICMP Echo Request packets to) the specified host. By +default the data field contains only a small timestamp to aid in +determining round trip time; if the optional length argument is +given, the appropriate number of data bytes (consisting of hex +55) are added to the ping packets. + +If interval is specified, pings will be repeated indefinitely at +the specified number of seconds; otherwise a single, "one shot" +ping is done. Responses to one-shot pings appear asynchronously +on the command screen, while repeated pings create a session that +may be suspended and resumed. Pinging continues until the session +is manually reset. + +The incflag option causes a repeated ping to increment the target +IP address for each ping; it is an experimental feature for +searching blocks of IP addresses for active hosts. + +3.41. ppp ... + +These commands are used for Point to Point Protocol interfaces. + +This implementation of PPP is designed to be as complete as pos- +sible. Because of this, the number of options can be rather +daunting. However, a typical PPP configuration might include the +following commands: + + + + + + + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 20 - + + + + attach asy 0x3f8 4 ppp pp0 4096 1500 9600 + dial pp0 30 3 dialer.pp0 + # + ppp pp0 lcp local accm 0 + ppp pp0 lcp local compress address on + ppp pp0 lcp local compress protocol on + ppp pp0 lcp local magic on + ppp pp0 lcp open active + # + ppp pp0 ipcp local compress tcp 16 1 + ppp pp0 ipcp open active + # + route add default pp0 + + +3.41.1. ppp + +Display the status of the PPP interface. + +3.41.2. ppp lcp ... + +These commands are used for the LCP [Link Control Protocol] con- +figuration. + +3.41.2.1. ppp lcp close + +Shutdown the PPP interface. + +3.41.2.2. ppp lcp local ... + +These commands control the configuration of the local side of the +link. If an option is specified, the parameters will be used as +the initial values in configuration requests. If not specified, +that option will not be requested. + +For each of these options, the allow parameter will permit the +remote to include that option in its response, even when the +option is not included in the request. By default, all options +are allowed. + +3.41.2.2.1. ppp lcp local accm [ | allow [on | +off] ] + +Display or set the Async Control Character Map. The default is +0xffffffff. + +3.41.2.2.2. ppp lcp local authenticate [ pap | none | +allow [on | off] ] + +Display or set the authentication protocol. The default is none. + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 21 - + + +3.41.2.2.3. ppp lcp local cfor hardware interrupt events will turn off this flag; this is +done to avoid critical sections and missed interrupts. The W flag +indicates that the process is waiting for an event; the event +column will be non-blank. Note that although there may be several +runnable processes at any time (shown in the ps listing as those +without the W flag and with blank event fields) only one process +is actually running at any one instant (The Refrigerator Light +Effect says that the ps command is always the one running when +this display is generated.) + +3.43. pwd [] + +An alias for the cd command. + +3.44. record [off | ] + +Append to filename all data received on the current session. +Data sent on the current session is also written into the file +except for Telnet sessions in remote echo mode. The command +record off stops recording and closes the file. + +3.45. remote [-p ] [-k ] [-a ] +exit | reset | kick + +Send a UDP packet to the specified host commanding it to exit the +net.exe program, reset the processor, or force a retransmission +on TCP connections. For this command to be accepted, the remote +system must be running the remote server and the port number +specified in the remote command must match the port number given +when the server was started on the remote system. If the port +numbers do not match, or if the remote server is not running on +the target system, the command packet is ignored. Even if the +command is accepted there is no acknowledgement. + +The kick command forces a retransmission timeout on all TCP con- +nections that the remote node may have with the local node. If +the -a option is used, connections to the specified host are +kicked instead. No key is required for the kick subcommand. + +The exit and reset subcommands are mainly useful for restarting +the net.exe program on a remote unattended system after the con- +figuration file has been updated. The remote system should + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 25 - + + +invoke the net.exe program automatically upon booting, preferably +in an infinite loop. For example, under MS-DOS the boot disk +should contain the following in autoexec.net: + + :loop + net + goto :loop + + + +3.46. remote -s + +The exit and reset subcommands of remote require a password. The +password is set on a given system with the -s option, and it is +specified in a command to a remote system with the -k option. If +no password is set with the -s option, then the exit and reset +subcommands are disabled. + +Note that remote is an experimental feature in NOS; it is not yet +supported by any other TCP/IP implementation. + +3.47. rename + +Rename oldfilename to newfilename. + +3.48. reset [] + +Reset the specified session; if no argument is given, reset the +current session. This command should be used with caution since +it does not reliably inform the remote end that the connection no +longer exists. (In TCP a reset (RST) message will be automati- +cally generated should the remote TCP send anything after a local +reset has been done. In AX.25 the DM message performs a similar +role. Both are used to get rid of a lingering half-open connec- +tion after a remote system has crashed.) + +3.49. rip ... + +These commands are used for the RIP service. + +3.49.1. rip accept + +Remove the specified gateway from the RIP filter table, allowing +future broadcasts from that gateway to be accepted. + +3.49.2. rip add [] + +Add an entry to the RIP broadcast table. The IP routing table +will be sent to hostid every interval seconds. If flags is speci- +fied as 1, then "split horizon" processing will be performed for +this destination. That is, any IP routing table entries pointing +to the interface that will be used to send this update will be +removed from the update. If split horizon processing is not +specified, then all routing table entries except those marked + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 26 - + + +"private" will be sent in each update. (Private entries are never +sent in RIP packets). + +Triggered updates are always done. That is, any change in the +routing table that causes a previously reachable destination to +become unreachable will trigger an update that advertises the +destination with metric 15, defined to mean "infinity". + +Note that for RIP packets to be sent properly to a broadcast +address, there must exist correct IP routing and ARP table +entries that will first steer the broadcast to the correct inter- +face and then place the correct link-level broadcast address in +the link-level destination field. If a standard IP broadcast +address convention is used (eg. 128.96.0.0 or 128.96.255.255) +then chances are you already have the necessary IP routing table +entry, but unusual subnet or cluster-addressed networks may +require special attention. However, an arp add command will be +required to translate this address to the appropriate link level +broadcast address. For example, + + +arp add 128.96.0.0 ethernet ff:ff:ff:ff:ff:ff + + +for an Ethernet network, and + + +arp add 44.255.255.255 ax25 qst-0 + + +for an AX25 packet radio channel. + +3.49.3. rip drop + +Remove an entry from the RIP broadcast table. + +3.49.4. rip merge [on | off] + +This flag controls an experimental feature for consolidating +redundant entries in the IP routing table. When rip merging is +enabled, the table is scanned after processing each RIP update. +An entry is considered redundant if the target(s) it covers would +be routed identically by a less "specific" entry already in the +table. That is, the target address(es) specified by the entry in +question must also match the target addresses of the less +specific entry and the two entries must have the same interface +and gateway fields. For example, if the routing table contains + + +Dest Len Interface Gateway Metric P Timer Use +1.2.3.4 32 ethernet0 128.96.1.2 1 0 0 0 +1.2.3 24 ethernet0 128.96.1.2 1 0 0 0 + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 27 - + + +then the first entry would be deleted as redundant since packets +sent to 1.2.3.4 will still be routed correctly by the second +entry. Note that the relative metrics of the entries are ignored. + +3.49.5. rip refuse + +Refuse to accept RIP updates from the specified gateway by adding +the gateway to the RIP filter table. It may be later removed with +the rip accept command. + +3.49.6. rip request + +Send a RIP Request packet to the specified gateway, causing it to +reply with a RIP Response packet containing its routing table. + +3.49.7. rip status + +Display RIP status, including a count of the number of packets +sent and received, the number of requests and responses, the +number of unknown RIP packet types, and the number of refused RIP +updates from hosts in the filter table. A list of the addresses +and intervals to which periodic RIP updates are being sent is +also shown, along with the contents of the filter table. + +3.49.8. rip trace [0 | 1 | 2] + +This variable controls the tracing of incoming and outgoing RIP +packets. Setting it to 0 disables all RIP tracing. A value of 1 +causes changes in the routing table to be displayed, while pack- +ets that cause no changes cause no output. Setting the variable +to 2 produces maximum output, including tracing of RIP packets +that cause no change in the routing table. + +3.50. rmdir + +Remove a sub-directory from the current working directory. + +3.51. route + +With no arguments, route displays the IP routing table. + +3.51.1. route add [/bits] | default +[ []] + +This command adds an entry to the routing table. It requires at +least two more arguments, the hostid of the target destination +and the name of the interface to which its packets should be +sent. If the destination is not local, the gateway's hostid +should also be specified. (If the interface is a point-to-point +link, then gatewayhostid may be omitted even if the target is +non-local because this field is only used to determine the +gateway's link level address, if any. If the destination is +directly reachable, gatewayhostid is also unnecessary since the +destination address is used to determine the interface link + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 28 - + + +address). + +The optional /bits suffix to the destination host id specifies +how many leading bits in the host id are to be considered signi- +ficant in the routing comparisons. If not specified, 32 bits +(i.e., full significance) is assumed. With this option, a single +routing table entry may refer to many hosts all sharing a common +bit string prefix in their IP addresses. For example, ARPA Class +A, B and C networks would use suffixes of /8, /16 and /24 respec- +tively; the command + +route add 44/8 sl0 44.64.0.2 + + +causes any IP addresses beginning with "44" in the first 8 bits +to be routed to 44.64.0.2; the remaining 24 bits are "don't- +cares". + +When an IP address to be routed matches more than one entry in +the routing table, the entry with largest bits parameter (i.e., +the "best" match) is used. This allows individual hosts or blocks +of hosts to be exceptions to a more general rule for a larger +block of hosts. + +The special destination default is used to route datagrams to +addresses not matched by any other entries in the routing table; +it is equivalent to specifying a /bits suffix of /0 to any desti- +nation hostid. Care must be taken with default entries since two +nodes with default entries pointing at each other will route +packets to unknown addresses back and forth in a loop until their +time-to-live (TTL) fields expire. (Routing loops for specific +addresses can also be created, but this is less likely to occur +accidentally). + +Here are some examples of the route command: + +# Route datagrams to IP address 44.0.0.3 to SLIP line #0. +# No gateway is needed because SLIP is point-to point. +route add 44.0.0.3 sl0 + +# Route all default traffic to the gateway on the local Ethernet +# with IP address 44.0.0.1 +route add default ec0 44.0.0.1 + +# The local Ethernet has an ARPA Class-C address assignment; +# route all IP addresses beginning with 192.4.8 to it +route add 192.4.8/24 ec0 + +# The station with IP address 44.0.0.10 is on the local AX.25 channel +route add 44.0.0.10 ax0 + + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 29 - + + +3.51.2. route addprivate [/bits] | default +[ []] + +This command is identical to route add except that it also marks +the new entry as private; it will never be included in outgoing +RIP updates. + +3.51.3. route drop + +route drop deletes an entry from the table. If a packet arrives +for the deleted address and a default route is in effect, it will +be used. + +3.52. session [] + +Without arguments, displays the list of current sessions, includ- +ing session number, remote TCP or AX.25 address and the address +of the TCP or AX.25 control block. An asterisk (*) is shown next +to the current session; entering a blank line at this point puts +you in converse mode with that session. Entering a session +number as an argument to the session command will put you in con- +verse mode with that session. If the Telnet server is enabled, +the user is notified of an incoming request and a session number +is automatically assigned. The user may then select the session +normally to converse with the remote user as though the session +had been locally initiated. + +3.53. shell + +Suspends net.exe and executes a sub-shell ("command processor" +under MS-DOS). When the sub-shell exits, net.exe resumes (under +MS-DOS, enter the exit command). Background activity (FTP +servers, etc) is also suspended while the subshell executes. Note +that this will fail unless there is sufficient unused memory for +the sub-shell and whatever command the user tries to run. + +3.54. smtp ... + +These commands are used for the Simple Message Transport Protocol +service (that is, mail). + +3.54.1. smtp gateway [] + +Displays or sets the host to be used as a "smart" mail relay. Any +mail sent to a host not in the host table will instead be sent to +the gateway for forwarding. + +3.54.2. smtp kick + +Run through the outgoing mail queue and attempt to deliver any +pending mail. This command allows the user to "kick" the mail +system manually. Normally, this command is periodically invoked +by a timer whenever net.exe is running. + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 30 - + + +3.54.3. smtp maxclients [] + +Displays or sets the maximum number of simultaneous outgoing SMTP +sessions that will be allowed. The default is 10; reduce it if +network congestion is a problem. + +3.54.4. smtp timer [] + +Displays or sets the interval between scans of the outbound mail +queue. For example, smtp timer 600 will cause the system to check +for outgoing mail every 10 minutes and attempt to deliver any- +thing it finds, subject of course to the smtp maxclients limit. +Setting a value of zero disables queue scanning altogether, note +that this is the default! This value is recommended for stand +alone IP gateways that never handle mail, since it saves wear and +tear on the floppy disk drive. + +3.54.5. smtp trace [] + +Displays or sets the trace flag in the SMTP client, allowing you +to watch SMTP's conversations as it delivers mail. Zero (the +default) disables tracing. + +3.55. socket [] + +Without an argument, displays all active sockets, giving their +index and type, the address of the associated protocol control +block and the and owner process ID and name. If the index to an +active socket is supplied, the status display for the appropriate +protocol is called. For example, if the socket refers to a TCP +connection, the display will be that given by the tcp status com- +mand with the protocol control block address. + +3.56. start ax25 | discard | echo | ftp | netrom | remote | smtp +| telnet | ttylink + +Start the specified Internet server, allowing remote connection +requests. + +3.57. stop ax25 | discard | echo | ftp | netrom | remote | smtp +| telnet | ttylink + +Stop the specified Internet server, rejecting any further remote +connect requests. Existing connections are allowed to complete +normally. + +3.58. tcp ... + +These commands are used for the Transmission Control Protocol +service. + +3.58.1. tcp irtt [] + +Display or set the initial round trip time estimate, in + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 31 - + + +milliseconds, to be used for new TCP connections until they can +measure and adapt to the actual value. The default is 5000 mil- +liseconds (5 seconds). Increasing this when operating over slow +channels will avoid the flurry of retransmissions that would oth- +erwise occur as the smoothed estimate settles down at the correct +value. Note that this command should be given before servers are +started in order for it to have effect on incoming connections. + +TCP also keeps a cache of measured round trip times and mean +deviations (MDEV) for current and recent destinations. Whenever a +new TCP connection is opened, the system first looks in this +cache. If the destination is found, the cached IRTT and MDEV +values are used. If not, the default IRTT value mentioned above +is used, along with a MDEV of 0. This feature is fully automatic, +and it can improve performance greatly when a series of connec- +tions are opened and closed to a given destination (eg. a series +of FTP file transfers or directory listings). + +3.58.2. tcp kick + +If there is unacknowledged data on the send queue of the speci- +fied TCB, this command forces an immediate retransmission. + +3.58.3. tcp mss [] + +Display or set the TCP Maximum Segment Size in bytes that will be +sent on all outgoing TCP connect request (SYN segments). This +tells the remote end the size of the largest segment (packet) it +may send. Changing MSS affects only future connections; existing +connections are unaffected. + +3.58.4. tcp reset + +Deletes the TCP control block at the specified address. + +3.58.5. tcp rtt + +Replaces the automatically computed round trip time in the speci- +fied TCB with the rtt in milliseconds. This command is useful to +speed up recovery from a series of lost packets since it provides +a manual bypass around the normal backoff retransmission timing +mechanisms. + +3.58.6. tcp status [] + +Without arguments, displays several TCP-level statistics, plus a +summary of all existing TCP connections, including TCB address, +send and receive queue sizes, local and remote sockets, and con- +nection state. If tcbaddr is specified, a more detailed dump of +the specified TCB is generated, including send and receive +sequence numbers and timer information. + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 32 - + + +3.58.7. tcp window [] + +Displays or sets the default receive window size in bytes to be +used by TCP when creating new connections. Existing connections +are unaffected. + +3.59. telnet + +Creates a Telnet session to the specified host and enters con- +verse mode. + +3.60. tip + +Creates a tip session that connects to the specified interface in +"dumb terminal" mode. The interface must have already been +attached with the attach command. Any packet traffic (IP +datagrams, etc) routed to the interface while this session exists +will be discarded. To close a tip session, use the reset command. +It will then revert to normal slip, nrs or kiss mode operation. + +This feature is primarily useful for manually establishing SLIP +connections. At present, only the built-in "com" ports can be +used with this command. + +3.61. trace [ [off | []]] + +Controls packet tracing by the interface drivers. Specific bits +enable tracing of the various interfaces and the amount of infor- +mation produced. Tracing is controlled on a per-interface basis; +without arguments, trace gives a list of all defined interfaces +and their tracing status. Output can be limited to a single +interface by specifying it, and the control flags can be change +by specifying them as well. The flags are given as a hexadecimal +number which is interpreted as follows: + + O - Enable tracing of output packets if 1, disable if 0 + I - Enable tracing of input packets if 1, disable if 0 + T - Controls type of tracing: + 0 - Protocol headers are decoded, but data is not displayed + 1 - Protocol headers are decoded, and data (but not the + headers themselves) are displayed as ASCII characters, + 64 characters/line. Unprintable characters are displayed + as periods. + 2 - Protocol headers are decoded, and the entire packet + (headers AND data) is also displayed in hexadecimal + and ASCII, 16 characters per line. + B - Broadcast filter flag. If set, only packets specifically addressed + to this node will be traced; broadcast packets will not be displayed. + +If tracefile is not specified, tracing will be to the console. + +3.62. udp status + +Displays the status of all UDP receive queues. + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 33 - + + +3.63. upload [] + +Opens filename and sends it on the current session as though it +were typed on the terminal. + +3.64. watch + +Displays the current software stopwatch values, with min and max +readings for each. This facility allows a programmer to measure +the execution time of critical sections of code with microsecond +resolution. This command is supported only on the IBM PC, and the +meaning of each stopwatch value depends on where the calls have +been inserted for test purposes; the distribution copy of net.exe +usually has no stopwatch calls. + +3.65. ? + +Same as the help command. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 34 - + + +4. Attach Commands + +This chapter details the attach commands for the various hardware +interface drivers. Not all of these drivers may be configured +into every net.exe binary; a list of the available types may be +obtained by entering the command attach ?. + +Some parameters are accepted by several drivers. They are: + +4.0.1. + +For asynchronous devices (eg. COM ports operating in SLIP or NRS +mode) this parameter specifies the size of the receiver's ring +buffer. It should be large enough to hold incoming data at full +line speed for the longest time that the system may be busy in +MS-DOS or the BIOS doing a slow I/O operation (eg. to a floppy +disk). A kilobyte is usually more than sufficient. + +For synchronous devices (eg. the scc, hs, pc100, hapn and drsi +interfaces operating in HDLC mode), the bufsize parameter speci- +fies the largest packet that may be received on the interface. +This should be set by mutual agreement among stations sharing the +channel. For standard AX.25 with a maximum I-frame data size of +256 bytes, a value of 325 should provide an adequate safety mar- +gin. On higher speed channels (eg. 56kb/s) larger values (eg. 2K +bytes) will provide much better performance and allow full-sized +Ethernet packets to be carried without fragmentation. + +4.0.2. + +The base address of the interface's control registers, in hex. + +4.0.3. + +The interface's hardware interrupt (IRQ) vector, in hex. + +4.0.4. + +The name (an arbitrary character string) to be assigned to this +interface. It is used to refer to the interface in ifconfig and +route commands and in trace output. + +4.0.5. + +The Maximum Transmission Unit size, in bytes. Datagrams larger +than this limit will be fragmented at the IP layer into smaller +pieces. For AX.25 UI frames, this limits the size of the informa- +tion field. For AX.25 I frames, however, the ax25 paclen parame- +ter is also relevant. If the datagram or fragment is still +larger than paclen, it is also fragmented at the AX.25 level (as +opposed to the IP level) before transmission. (See the ax25 +paclen command for further information). + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 35 - + + +4.0.6. + +The speed in bits per second (eg. 2400). + +4.1. attach 3c500 arpa +[] + +Attach a 3Com 3C501 Ethernet interface. qlen is the maximum +allowable transmit queue length. If the ipaddr parameter is not +given, the value associated with a prior ip address command will +be used. + +The use of this driver is not recommended; use the packet driver +interface with the loadable 3C501 packet driver instead. + +4.2. attach asy ax25 | nrs | ppp | slip + [] + +Attach a standard PC "com port" (asynchronous serial port), using +the National 8250 or 16550A chip. Standard values on the IBM PC +and clones for ioaddr and vector are 0x3f8 and 4 for COM1, and +0x2f8 and 3 for COM2. If the port uses a 16550A chip, it will be +detected automatically and the FIFOs enabled. + +4.2.1. ax25 + +Similar to slip, except that an AX.25 header and a KISS TNC con- +trol header are added to the front of the datagram before SLIP +encoding. Either UI (connectionless) or I (connection-oriented) +AX.25 frames can be used; see the mode command for details. + +4.2.2. nrs + +Use the NET/ROM asynchronous framing technique for communication +with a local NET/ROM TNC. + +4.2.3. ppp + +Point-to-Point-Protocol. Encapsulates datagrams in an HDLC-like +frame. This is a new Internet standard for point-to-point commun- +ication, compatible with CCITT standards. + +4.2.4. slip + +Serial Line Internet Protocol. Encapsulates IP datagrams directly +in SLIP frames without a link header. This is for operation on +point-to-point lines and is compatible with 4.2BSD UNIX SLIP. + +4.2.5. + +The optional flags are a string of characters "crv": c enables +RTS/CTS detection, r enables RLSD (Carrier Detect) physical line +sensing, v enables Van Jacobson TCP/IP Header Compression, and is +valid only for SLIP. + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 36 - + + +4.3. attach drsi ax25 + + +N6TTO driver for the Digital Radio Systems PCPA 8530 card. Since +there are two channels on the board, two interfaces are attached. +They will be named iface with 'a' and 'b' appended. bufsize is +the receiver buffer size in bytes; it must be larger than the +largest frame to be received. chaspeed and chbspeed are the +speeds, in bits/sec, for the A and B channels, respectively. + +4.4. attach eagle ax25 + + +WA3CVG/NG6Q driver for the Eagle Computer card (Zilog 8530). + +4.5. attach hapn ax25 +csma | full + +KE3Z driver for the Hamilton Amateur Packet Network adapter +(Intel 8273). The csma | full parameter specifies whether the +port should operate in carrier sense multiple access (CSMA) mode +or in full duplex. + +4.6. attach hs ax25 +

    + +Attach a DRSI PCPA or Eagle Computer interface card using a spe- +cial "high speed" 8530 driver. This driver uses busy-wait loops +to send and receive each byte instead of interrupts, making it +usable with high speed modems (such as the WA4DSY 56kb/s modem) +on slow systems. This does have the side effect of "freezing" the +system whenever the modem transmitter or receiver is active. This +driver can operate only in CSMA mode, and it is recommended that +no other interfaces requiring small interrupt latencies be +attached to the same machine. + +The keyupdelay parameter specifies the transmitter keyup delay +in byte time intervals. The p value specifies the transmitter +persistence value in the range 1-255; the corresponding slot time +is fixed at one hardware clock tick, about 55 ms on the PC. + +As with the other 8530 drivers, this driver actually attaches two +interfaces, one for each 8530 channel. + +4.7. attach packet + +Driver for use with separate software "packet drivers" meeting +the FTP Software, Inc, Software Packet Driver specification. The +driver must have already been installed before the attach command +is given. Packet drivers in the Ethernet, ARCNET, SLIP, SLFP, and +KISS/AX25 classes are supported. + +intvec is the software interrupt vector used for communication to +the packet driver, and txqlen is the maximum number of packets + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 37 - + + +that will be allowed on the transmit queue. + +4.8. attach pc100 ax25 + + +Driver for the PACCOMM PC-100 (Zilog 8530) card. Only AX.25 +operation is supported. + +4.9. attach scc init + [p|r] [] [] + +PE1CHL driver to initialize a generic SCC (8530) interface board +prior to actually attaching it. The parameters are as follows: + +4.9.1. + +The number of SCC chips to support. + +4.9.2. + +The base address of the first SCC chip (hex). + +4.9.3. + +The spacing between the SCC chip base addresses. + +4.9.4. + +The offset from a chip's base address to its channel A control +register. + +4.9.5. + +The offset from a chip's base address to its channel B control +register. + +4.9.6. + +The offset from each channel's control register to its data +register. + +4.9.7. + +The address of the INTACK/Read Vector port. If none, specify 0 to +read from RR3A/RR2B. + +4.9.8. + +The CPU interrupt vector for all connected SCCs. + +4.9.9. + +The clock frequency (PCLK/RTxC) of all SCCs in hertz. Prefix with +'p' for PCLK, 'r' for RTxC clock (for baudrate gen). + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 38 - + + +4.9.10. + +Optional hardware type. The following values are currently sup- +ported: 1 - Eagle card, 2 - PACCOMM PC-100, 4 - PRIMUS-PC card +(DG9BL), 8 - DRSI PCPA card. + +4.9.11. + +Optional extra parameter. At present, this is used only with the +PC-100 and PRIMUS-PC cards to set the modem mode. The value 0x22 +is used with the PC-100 and 0x2 is used with the PRIMUS-PC card. + +The attach scc ... init command must be given before the inter- +faces are actually attached with the following command. + +4.10. attach scc slip | kiss | nrs | ax25 + [] + +Attach an initialized SCC port to the system. The parameters are +as follows: + +4.10.1. + +The SCC channel number to attach, 0 or 1 for the first chip's A +or B port, 2 or 3 for the second chip's A or B port, etc. + +4.10.2. slip | kiss | nrs | ax25 + +The operating mode of the interface. slip, kiss and nrs all +operate the port hardware in asynchronous mode; slip is +Internet-standard serial line IP mode, kiss generates SLIP frames +containing KISS TNC commands and AX.25 packets and nrs uses +NET/ROM local serial link framing conventions to carry NET/ROM +packets. Selecting ax25 mode puts the interface into synchronous +HDLC mode that is suitable for direct connection to a half duplex +radio modem. + +4.10.3. + +The interface speed in bits per second (eg. 1200). Prefix with +'d' when an external divider is available to generate the TX +clock. When the clock source is PCLK, this can be a /32 divider +between TRxC and RTxC. When the clock is at RTxC, the TX rate +must be supplied at TRxC. This is needed only for full duplex +synchronous operation. When this arg is given as 'ext', the +transmit and receive clocks are external, and the internal baud +rate generator (BRG) and digital phase locked loop (DPLL) are not +used. + +4.11. Attach Examples + +Here are some examples of the attach command: + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 39 - + + + +# Attach a 3Com Ethernet controller using the standard 3Com address and +# vector (i.e., as it comes out of the box) to use ARPA-standard encapsulation. +# The receive queue is limited to 5 packets, and outgoing packets larger +# than 1500 bytes will be fragmented +attach 3c500 0x300 3 arpa ec0 5 1500 + +# Attach the PC asynch card normally known as "com1" (the first controller) +# to operate in point-to-point slip mode at 9600 baud, calling it "sl0". +# A 1024 byte receiver ring buffer is allocated. Outgoing packets larger +# than 256 bytes are fragmented. +attach asy 0x3f8 4 slip sl0 1024 256 9600 + +# Attach the secondary PC asynch card ("com2") to operate in AX.25 mode +# with an MTU of 576 bytes at 9600 baud with a KISS TNC, calling it "ax0". +# By default, IP datagrams are sent in UI frames +attach asy 0x2f8 3 ax25 ax0 1024 576 9600 + +# Attach the packet driver loaded at interrupt 0x7e +# The packet driver is for an Ethernet interface +attach packet 0x7e ethernet 8 1500 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 40 - + + +5. FTP Subcommands + +During converse mode with an FTP server, everything typed on the +console is first examined to see if it is a locally-known com- +mand. If not, the line is passed intact to the remote server on +the control channel. If it is one of the following commands, how- +ever, it is executed locally. (Note that this generally involves +other commands being sent to the remote server on the control +channel.) + +5.1. dir [ | []] + +Without arguments, dir requests that a full directory listing of +the remote server's current directory be sent to the terminal. +If one argument is given, this is passed along in the LIST com- +mand; this can be a specific file or subdirectory that is mean- +ingful to the remote file system. If two arguments are given, the +second is taken as the local file into which the directory list- +ing should be put (instead of being sent to the console). The +PORT command is used before the LIST command is sent. + +5.2. get [] + +Asks the remote server to send the file specified in the first +argument. The second argument, if given, will be the name of the +file on the local machine; otherwise it will have the same name +as on the remote machine. The PORT and RETR commands are sent on +the control channel. + +5.3. hash + +A synonym for the verbose 3 command. + +5.4. ls [ | []] + +ls is identical to the dir command except that the "NLST" command +is sent to the server instead of the "LIST" command. This results +in an abbreviated directory listing, i.e., one showing only the +file names themselves without any other information. + +5.5. mget [ ...] + +Fetch a collection of files from the server. File names may +include wild card characters; they will be interpreted and +expanded into a list of files by the remote system using the NLST +command. The files will have the same name on the local system +that they had on the server. + +5.6. mkdir + +Creates a directory on the remote machine. + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 41 - + + +5.7. mput [ ...] + +Send a collection of files to the server. File names may include +wild card characters; they will be expanded locally into a list +of files to be sent. The files will have the same name on the +server as on the local system. + +5.8. put [] + +Asks the remote server to accept data, creating the file named in +the first argument. The second argument, if given, will be the +name of the file on the remote machine; otherwise it will have +the same name as on the local machine. The PORT and STOR com- +mands are sent on the control channel. + +5.9. rmdir + +Deletes a directory on the remote machine. + +5.10. type [a | i | l ] + +Tells both the local client and remote server the type of file +that is to be transferred. The default is 'a', which means ASCII +(i.e., a text file). Type 'i' means image, i.e., binary. In +ASCII mode, files are sent as varying length lines of text in +ASCII separated by cr/lf sequences; in IMAGE mode, files are sent +exactly as they appear in the file system. ASCII mode should be +used whenever transferring text between dissimilar systems (eg. +UNIX and MS-DOS) because of their different end-of-line and/or +end-of-file conventions. When exchanging text files between +machines of the same type, either mode will work but IMAGE mode +is usually faster. Naturally, when exchanging raw binary files +(executables, compressed archives, etc) IMAGE mode must be used. +Type 'l' (logical byte size) is used when exchanging binary files +with remote servers having oddball word sizes (eg. DECSYSTEM-10s +and 20s). Locally it works exactly like IMAGE, except that it +notifies the remote system how large the byte size is. bytesize +is typically 8. The type command sets the local transfer mode and +generates the TYPE command on the control channel. + +5.11. verbose [0 | 1 | 2 | 3] + +Set or display the level of message output in file transfers. +Verbose 0 gives the least output, and verbose 3 the most, as fol- +lows: + +0 - Display error messages only. +1 - Display error messages plus a one-line summary after each transfer + giving the name of the file, its size, and the transfer time and rate. +2 - Display error and summary messages plus the progress messages generated + by the remote FTP server. (This setting is the default.) +3 - Display all messages. In addition, a "hash mark" (#) is displayed for + every 1,000 bytes sent or received. + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 42 - + + +If a command is sent to the remote server because it is not +recognized locally, the response is always displayed, regardless +of the setting of verbose. This is necessary for commands like +pwd (display working directory), which would otherwise produce no +message at all if verbose were set to 0 or 1. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 43 - + + +6. Dialer Subcommands + +Each dialer command may (should) have a different dialer file. +The file resides in the configuration directory, as specified in +the Installation section (see chapter 1). A typical dialer file +might be: + + # Set the speed, and toggle DTR to ensure modem is in command mode. + control down + wait 3000 + speed 2400 + control up + wait 3000 + # Dial, and wait for connection + send "atdt555-12127" + wait 45000 "CONNECT " speed + wait 2000 + # PAD specific initialization + send "7" + wait 15000 "Terminal =" + send "ppp7" + wait 10000 "70 + + +6.0.1. control down | up + +Control asy interface. The down option drops DTR and RTS. The up +option asserts DTR and RTS. + +6.0.2. send "string" + +This dialer command will write the specified string to the inter- +face. The string quote marks are required, and the string may not +contain embedded control characters. However, the standard C +string escape sequences are recognized (\0 should not be used). + +6.0.3. speed [ 9600 | 4800 | 2400 | 1200 | 300 ] + +This dialer command will set the speed of the interface to one of +the available speeds. If the speed is missing, the speed will be +displayed in the dialer session window. + +6.0.4. wait [ "test string" ] [ speed ] + +If only the time is specified, the dialer pauses for the desired +number of milliseconds. + +Otherwise, the dialer reads until the test string is detected on +the interface. If the string is not detected within the desired +time, the autodialer will reset. The string quote marks are +required, and the string may not contain embedded control charac- +ters. However, the standard C string escape sequences are recog- +nized (\0 should not be used). + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 44 - + + +Finally, if the speed parameter is specified, the dialer will +continue to read characters until a non-digit is detected. The +string read is converted to an integer, and used to set the +interface speed. If the trailing non-digit is not detected within +the desired time, or the integer value is not a valid speed, the +autodialer will reset. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 45 - + + +7. The /ftpusers File + +Since MS-DOS is a single-user operating system (some might say it +is a glorified bootstrap loader), it provides no access control; +all files can be read, written or deleted by the local user. It +is usually undesirable to give such open access to a system to +remote network users. Net.exe therefore provides its own access +control mechanisms. + +The file /ftpusers controls remote FTP and mailbox access. The +FTP default is no access; if this file does not exist, the FTP +server will be unusable. A remote user must first "log in" to +the system with the USER and PASS commands, giving a valid name +and password listed in /ftpusers, before he or she can transfer +files. + +Each entry in /ftpusers consists of a single line of the form + +username password /path permissions + + +There must be exactly four fields, and there must be exactly one +space between each field. Comments may be added after the last +field. Comment lines begin with '#' in column one. + +username is the user's login name. + +password is the required password. Note that this is in plain +text; therefore it is not a good idea to give general read per- +mission to the root directory. A password of '*' (a single +asterisk) means that any password is acceptable. + +/path is the allowable prefix on accessible files. Before any +file or directory operation, the current directory and the user- +specified file name are joined to form an absolute path name in +"canonical" form (i.e., a full path name starting at the root, +with "./" and "../" references, as well as redundant /'s, recog- +nized and removed). The result MUST begin with the allowable path +prefix; if not, the operation is denied. This field must always +begin with a "/", i.e., at the root directory. + +permissions is a decimal number granting permission for read, +create and write operations. If the low order bit (0x1) is set, +the user is allowed to read a file subject to the path name pre- +fix restriction. If the next bit (0x2) is set, the user is +allowed to create a new file if it does not overwrite an existing +file. If the third bit (0x4) is set, the user is allowed to +write a file even if it overwrites an existing file, and in addi- +tion he may delete files. Again, all operations are allowed sub- +ject to the path name prefix restrictions. Permissions may be +combined by adding bits, for example, 0x3 (= 0x2 + 0x1) means +that the user is given read and create permission, but not +overwrite/delete permission. + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 46 - + + +For example, suppose /ftpusers on machine pc.ka9q.ampr.org con- +tains the line + +friendly test /testdir 7 + + +A session using this account would look like this: + +net> ftp pc.ka9q.ampr.org +Resolving pc.ka9q.ampr.org... Trying 128.96.160.1... +FTP session 1 connected to pc.ka9q.ampr.org +220 pc.ka9q.ampr.org FTP version 900418 ready at Mon May 7 16:27:18 1990 +Enter user name: friendly +331 Enter PASS command +Password: test [not echoed] +230 Logged in +ftp> + + +The user now has read, write, overwrite and delete privileges for +any file under /testdir; he may not access any other files. + +Here are some more sample entries in /ftpusers: + +karn foobar / 7 # User "karn" with password "foobar" may read, + # write, overwrite and delete any file on the + # system. + +guest bletch /g/bogus 3 # User "guest" with password "bletch" may read + # any file under /g/bogus and its subdirectories, + # and may create a new file as long as it does + # not overwrite an existing file. He may NOT + # delete any files. + +anonymous * /public 1 # User "anonymous" (any password) may read files + # under /public and its subdirectories; he may + # not create, overwrite or delete any files. + + +This last entry is the standard convention for keeping a reposi- +tory of public files; in particular, the username "anonymous" is +an established ARPA convention. + + + + + + + + + + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 47 - + + +8. The domain.txt File + +Net.exe translates domain names (eg. "pc.ka9q.ampr.org") to IP +addresses (eg. 128.96.160.3) through the use of an Internet +Domain Name resolver and a local "cache" file, domain.txt. When- +ever the user specifies a domain name, the local cache is +searched for the desired entry. If it is present, it is used; if +not, and if domain name server(s) have been configured, a query +is sent over the network to the current server. If the server +responds, the answer is added to the domain.txt file for future +use. If the server does not respond, any additional servers on +the list are tried in a round-robin fashion until one responds, +or the retry limit is reached (see the domain retry command). If +domain.txt does not contain the desired entry and there are no +configured domain name servers, then the request immediately +fails. + +If a domain name server is available, and if all references to +host-ids in your /autoexec.net file are in IP address format, +then it is possible to start with a completely empty domain.txt +file and have net.exe build it for you. However, you may wish to +add your own entries to domain.txt, either because you prefer to +use symbolic domain names in your /autoexec.net file or you don't +have access to a domain server and you need to create entries for +all of the hosts you may wish to access. + +Each entry takes one line, and the fields are separated by any +combination of tabs or spaces. For example: + +pc.ka9q.ampr.org. IN A 128.96.160.3 + +IN is the class of the record. It means Internet, and it will be +found in all entries. A is the type of the record, and it means +that this is an address record. Domain name pc.ka9q.ampr.org +therefore has Internet address 128.96.160.3. + +Another possible entry is the CNAME (Canonical Name) record. For +example: + +ka9q.ampr.org. IN CNAME pc.ka9q.ampr.org. + +This says that domain name "ka9q.ampr.org" is actually an alias +for the system with (primary, or canonical) domain name +"pc.ka9q.ampr.org." When a domain name having a CNAME record is +given to net.exe, the system automatically follows the reference +to the canonical name and returns the IP address associated with +that entry. + +Entries added automatically by net.exe will have an additional +field between the domain name and the class (IN) field. For +example: + +pc.ka9q.ampr.org. 3600 IN A 128.96.160.3 + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 48 - + + +This is the time-to-live value, in seconds, associated with the +record received from the server. Clients (such as net.exe) cach- +ing these records are supposed to delete them after the time-to- +live interval has expired, allowing for the possibility that the +information in the record may become out of date. + +This implementation of net.exe will decrement the TTL to zero, +but will not delete the record unless the "clean" flag is on (see +the domain cache clean command). When a remote server is not +available, the old entry will be used. + +When the TTL value is missing (as in the examples above), the +record will never expire, and must be managed by hand. Since +domain.txt is a plain text file, it may be easily edited by the +user to add, change or delete records. + +Additional types of records, include NS (name server) and SOA +(start of authority) may appear in domain.txt from remote server +responses. These are not currently used by net.exe but are +retained for future development (such as the incorporation of a +domain name server into net.exe itself). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 49 - + + +9. Setting Bufsize, Paclen, Maxframe, MTU, MSS and Window + +Many net.exe users are confused by these parameters and do not +know how to set them properly. This chapter will first review +these parameters and then discuss how to choose values for them. +Special emphasis is given to avoiding interoperability problems +that may appear when communicating with non-net.exe implementa- +tions of AX.25. + +9.1. Hardware Parameters + + +9.1.1. Bufsize + +This parameter is required by most of net.exe's built-in HDLC +drivers (eg. those for the DRSI PCPA and the Paccomm PC-100). It +specifies the size of the buffer to be allocated for each +receiver port. HDLC frames larger than this value cannot be +received. + +There is no default bufsize; it must be specified in the attach +command for the interface. + +9.2. AX25 Parameters + +9.2.1. Paclen + +Paclen limits the size of the data field in an AX.25 I-frame. +This value does not include the AX.25 protocol header (source, +destination and digipeater addresses). + +Since unconnected-mode (datagram) AX.25 uses UI frames, this +parameter has no effect in unconnected mode. + +The default value of paclen is 256 bytes. + +9.2.2. Maxframe + +This parameter controls the number of I-frames that net.exe may +send on an AX.25 connection before it must stop and wait for an +acknowledgement. Since the AX.25/LAPB sequence number field is 3 +bits wide, this number cannot be larger than 7. + +Since unconnected-mode (datagram) AX.25 uses UI frames that do +not have sequence numbers, this parameter does not apply to +unconnected mode. + +The default value of maxframe in net.exe is 1 frame. + +9.3. IP and TCP Parameters + +9.3.1. MTU + +The MTU (Maximum Transmission Unit) is an interface parameter + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 50 - + + +that limits the size of the largest IP datagram that it may han- +dle. IP datagrams routed to an interface that are larger than +its MTU are each split into two or more fragments. Each fragment +has its own IP header and is handled by the network as if it were +a distinct IP datagram, but when it arrives at the destination it +is held by the IP layer until all of the other fragments belong- +ing to the original datagram have arrived. Then they are reassem- +bled back into the complete, original IP datagram. The minimum +acceptable interface MTU is 28 bytes: 20 bytes for the IP (frag- +ment) header, plus 8 bytes of data. + +There is no default MTU in net.exe; it must be explicitly speci- +fied for each interface as part of the attach command. + +9.3.2. MSS + +MSS (Maximum Segment Size) is a TCP-level parameter that limits +the amount of data that the remote TCP will send in a single TCP +packet. MSS values are exchanged in the SYN (connection request) +packets that open a TCP connection. In the net.exe implementation +of TCP, the MSS actually used by TCP is further reduced in order +to avoid fragmentation at the local IP interface. That is, the +local TCP asks IP for the MTU of the interface that will be used +to reach the destination. It then subtracts 40 from the MTU value +to allow for the overhead of the TCP and IP headers. If the +result is less than the MSS received from the remote TCP, it is +used instead. + +The default value of MSS is 512 bytes. + +9.3.3. Window + +This is a TCP-level parameter that controls how much data the +local TCP will allow the remote TCP to send before it must stop +and wait for an acknowledgement. The actual window value used by +TCP when deciding how much more data to send is referred to as +the effective window. This is the smaller of two values: the win- +dow advertised by the remote TCP minus the unacknowledged data in +flight, and the congestion window, an automatically computed +time-varying estimate of how much data the network can handle. + +The default value of Window is 2048 bytes. + +9.4. Discussion + + +9.4.1. IP Fragmentation vs AX.25 Segmentation + +IP-level fragmentation often makes it possible to interconnect +two dissimilar networks, but it is best avoided whenever possi- +ble. One reason is that when a single IP fragment is lost, all +other fragments belonging to the same datagram are effectively +also lost and the entire datagram must be retransmitted by the +source. Even without loss, fragments require the allocation of + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 51 - + + +temporary buffer memory at the destination, and it is never easy +to decide how long to wait for missing fragments before giving up +and discarding those that have already arrived. A reassembly +timer controls this process. In net.exe it is (re)initialized +with the ip rtimer parameter (default 30 seconds) whenever pro- +gress is made in reassembling a datagram (i.e., a new fragment is +received). It is not necessary that all of the fragments belong- +ing to a datagram arrive within a single timeout interval, only +that the interval between fragments be less than the timeout. + +Most subnetworks that carry IP have MTUs of 576 bytes or more, so +interconnecting them with subnetworks having smaller values can +result in considerable fragmentation. For this reason, IP imple- +mentors working with links or subnets having unusually small +packet size limits are encouraged to use transparent fragmenta- +tion, that is, to devise schemes to break up large IP datagrams +into a sequence of link or subnet frames that are immediately +reassembled on the other end of the link or subnet into the ori- +ginal, whole IP datagram without the use of IP-level fragmenta- +tion. Such a scheme is provided in AX.25 Version 2.1. It can +break a large IP or NET/ROM datagram into a series of paclen- +sized AX.25 segments (not to be confused with TCP segments), one +per AX.25 I-frame, for transmission and reassemble them into a +single datagram at the other end of the link before handing it up +to the IP or NET/ROM module. Unfortunately, the segmentation +procedure is a new feature in AX.25 and is not yet widely imple- +mented; in fact, net.exe is so far the only known implementation. +This creates some interoperability problems between net.exe and +non-net.exe nodes, in particular, standard NET/ROM nodes being +used to carry IP datagrams. This problem is discussed further in +the section on setting the MTU. + +9.4.2. Setting paclen and bufsize + +The more data you put into an AX.25 I frame, the smaller the +AX.25 headers are in relation to the total frame size. In other +words, by increasing paclen, you lower the AX.25 protocol over- +head. Also, large data packets reduce the overhead of keying up a +transmitter, and this can be an important factor with higher +speed modems. On the other hand, large frames make bigger targets +for noise and interference. Each link has an optimum value of +paclen that is best discovered by experiment. + +Another thing to remember when setting paclen is that the AX.25 +version 2.0 specification limits it to 256 bytes. Although +net.exe can handle much larger values, some other AX.25 implemen- +tations (including digipeaters) cannot and this may cause intero- +perability problems. Even net.exe may have trouble with certain +KISS TNCs because of fixed-size buffers. The original KISS TNC +code for the TNC-2 by K3MC can handle frames limited in size only +by the RAM in the TNC, but some other KISS TNCs cannot. + +Net.exe's built-in HDLC drivers (SCC, PC-100, DRSI, etc) allocate +receive buffers according to the maximum expected frame size, so + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 52 - + + +it is important that these devices be configured with the correct +bufsize. To do this, you must know the size of the largest possi- +ble frame that can be received. The paclen parameter controls +only the size of the data field in an I-frame and not the total +size of the frame as it appears on the air. The AX.25 spec allows +up to 8 digipeaters, so the largest possible frame is (paclen + +72) bytes. So you should make bufsize at least this large. + +Another important consideration is that the more recent versions +of NOS improve interrupt response by maintaining a special pool +of buffers for use by the receive routines. These buffers are +currently fixed in size to 2048 bytes and this can be changed +only by editing config.h and recompiling NOS. This limits buf- +size; in fact, attempting to set a larger value may cause the +driver not to work at all. This situation can be detected by run- +ning the memory status command and looking for a non-zero count +of Ibuffail events, although these events can also occur occa- +sionally during normal operation. + +One of the drawbacks of AX.25 that there is no way for one sta- +tion to tell another how large a packet it is willing to accept. +This requires the stations sharing a channel to agree beforehand +on a maximum packet size. TCP is different, as we shall see. + +9.4.3. Setting Maxframe + +For best performance on a half-duplex radio channel, maxframe +should always be set to 1. The reasons are explained in the paper +Link Level Protocols Revisited by Brian Lloyd and Phil Karn, +which appeared in the proceedings of the ARRL 5th Computer Net- +working Conference in 1986. + +9.4.4. Setting MTU + +TCP/IP header overhead considerations similar to those of the +AX.25 layer when setting paclen apply when choosing an MTU. How- +ever, certain subnetwork types supported by net.exe have well- +established MTUs, and these should always be used unless you know +what you're doing: 1500 bytes for Ethernet, and 508 bytes for +ARCNET. The MTU for PPP is automatically negotiated, and defaults +to 1500. Other subnet types, including SLIP and AX.25, are not as +well standardized. + +SLIP has no official MTU, but the most common implementation (for +BSD UNIX) uses an MTU of 1006 bytes. Although net.exe has no +hard wired limit on the size of a received SLIP frame, this is +not true for other systems. Interoperability problems may there- +fore result if larger MTUs are used in net.exe. + +Choosing an MTU for an AX.25 interface is more complex. When the +interface operates in datagram (UI-frame) mode, the paclen param- +eter does not apply. The MTU effectively becomes the paclen of +the link. However, as mentioned earlier, large packets sent on +AX.25 connections are automatically segmented into I-frames no + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 53 - + + +larger than paclen bytes. Unfortunately, as also mentioned ear- +lier, net.exe is so far the only known implementation of the new +AX.25 segmentation procedure. This is fine as long as all of the +NET/ROM nodes along a path are running net.exe, but since the +main reason net.exe supports NET/ROM is to allow use of existing +NET/ROM networks, this is unlikely. + +So it is usually important to avoid AX.25 segmentation when run- +ning IP over NET/ROM. The way to do this is to make sure that +packets larger than paclen are never handed to AX.25. A NET/ROM +transport header is 5 bytes long and a NET/ROM network header +takes 15 bytes, so 20 bytes must be added to the size of an IP +datagram when figuring the size of the AX.25 I-frame data field. +If paclen is 256, this leaves 236 bytes for the IP datagram. This +is the default MTU of the netrom pseudo-interface, so as long as +paclen is at least 256 bytes, AX.25 segmentation can't happen. +But if smaller values of paclen are used, the netrom MTU must +also be reduced with the ifconfig command. + +On the other hand, if you're running IP directly on top of AX.25, +chances are all of the nodes are running net.exe and support +AX.25 segmentation. In this case there is no reason not to use a +larger MTU and let AX.25 segmentation do its thing. If you choose +an MTU on the order of 1000-1500 bytes, you can largely avoid +IP-level fragmentation and reduce TCP/IP-level header overhead on +file transfers to a very low level. And you are still free to +pick whatever paclen value is appropriate for the link. + +9.4.5. Setting MSS + +The setting of this TCP-level parameter is somewhat less critical +than the IP and AX.25 level parameters already discussed, mainly +because it is automatically lowered according to the MTU of the +local interface when a connection is created. Although this is, +strictly speaking, a protocol layering violation (TCP is not sup- +posed to have any knowledge of the workings of lower layers) this +technique does work well in practice. However, it can be fooled; +for example, if a routing change occurs after the connection has +been opened and the new local interface has a smaller MTU than +the previous one, IP fragmentation may occur in the local system. + +The only drawback to setting a large MSS is that it might cause +avoidable fragmentation at some other point within the network +path if it includes a "bottleneck" subnet with an MTU smaller +than that of the local interface. (Unfortunately, there is +presently no way to know when this is the case. There is ongoing +work within the Internet Engineering Task Force on a "MTU +Discovery" procedure to determine the largest datagram that may +be sent over a given path without fragmentation, but it is not +yet complete.) Also, since the MSS you specify is sent to the +remote system, and not all other TCPs do the MSS-lowering pro- +cedure yet, this might cause the remote system to generate IP +fragments unnecessarily. + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 54 - + + +On the other hand, a too-small MSS can result in a considerable +performance loss, especially when operating over fast LANs and +networks that can handle larger packets. So the best value for +MSS is probably 40 less than the largest MTU on your system, with +the 40-byte margin allowing for the TCP and IP headers. For exam- +ple, if you have a SLIP interface with a 1006 byte MTU and an +Ethernet interface with a 1500 byte MTU, set MSS to 1460 bytes. +This allows you to receive maximum-sized Ethernet packets, assum- +ing the path to your system does not have any bottleneck subnets +with smaller MTUs. + +9.4.6. Setting Window + +A sliding window protocol like TCP cannot transfer more than one +window's worth of data per round trip time interval. So this +TCP-level parameter controls the ability of the remote TCP to +keep a long "pipe" full. That is, when operating over a path with +many hops, offering a large TCP window will help keep all those +hops busy when you're receiving data. On the other hand, offering +too large a window can congest the network if it cannot buffer +all that data. Fortunately, new algorithms for dynamic control- +ling the effective TCP flow control window have been developed +over the past few years and are now widely deployed. Net.exe +includes them, and you can watch them in action with the tcp +status or socket commands. Look at the cwind +(congestion window) value. + +In most cases it is safe to set the TCP window to a small integer +multiple of the MSS (eg. 4 times), or larger if necessary to +fully utilize a high bandwidth*delay product path. One thing to +keep in mind, however, is that advertising a certain TCP window +value declares that the system has that much buffer space avail- +able for incoming data. Net.exe does not actually preallocate +this space; it keeps it in a common pool and may well "overbook" +it, exploiting the fact that many TCP connections are idle for +long periods and gambling that most applications will read incom- +ing data from an active connection as soon as it arrives, thereby +quickly freeing the buffer memory. However, it is possible to run +net.exe out of memory if excessive TCP window sizes are adver- +tised and either the applications go to sleep indefinitely (eg. +suspended Telnet sessions) or a lot of out-of-sequence data +arrives. It is wise to keep an eye on the amount of available +memory and to decrease the TCP window size (or limit the number +of simultaneous connections) if it gets too low. + +Depending on the channel access method and link level protocol, +the use of a window setting that exceeds the MSS may cause an +increase in channel collisions. In particular, collisions between +data packets and returning acknowledgements during a bulk file +transfer may become common. Although this is, strictly speaking, +not TCP's fault, it is possible to work around the problem at the +TCP level by decreasing the window so that the protocol operates +in stop-and-wait mode. This is done by making the window value +equal to the MSS. + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + + + + + - 55 - + + +9.5. Summary + +In most cases, the default values provided by net.exe for each of +these parameters will work correctly and give reasonable perfor- +mance. Only in special circumstances such as operation over a +very poor link or experimentation with high speed modems should +it be necessary to change them. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +updated by Bill Simpson April 15, 1991 March 3, 1991 + + diff --git a/src/nos/doc/man_9106.zip b/src/nos/doc/man_9106.zip new file mode 100644 index 0000000000000000000000000000000000000000..a8ea60d9a3e6dbd0e013f6e05f143a3cca5e5cd1 GIT binary patch literal 51510 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 z01E&B000000096X000000000>K{-)QPg5>bSX59;1qJ{B000310RTAw008I600000 DNxY6P literal 0 HcmV?d00001 diff --git a/src/nos/doc/man_9106/KA9QNOS.TXT b/src/nos/doc/man_9106/KA9QNOS.TXT new file mode 100644 index 00000000..8957da07 --- /dev/null +++ b/src/nos/doc/man_9106/KA9QNOS.TXT @@ -0,0 +1,4488 @@ + + + + + + + + + + NET User Reference Manual (NOS Version) + + + Phil Karn, KA9Q + + + + + + +1. The NET.EXE Program + +The MS-DOS executable file net.exe provides Internet (TCP/IP), +NET/ROM and AX.25 facilities. Because it has an internal multi- +tasking operating system, net.exe can act simultaneously as a +client, a server and a packet switch for all three sets of proto- +cols. That is, while a local user accesses remote services, the +system can also provide those same services to remote users while +also switching IP, NET/ROM and AX.25 packets and frames between +other client and server nodes. + +The keyboard and display is used by the local operator to control +both host and gateway level functions, for which a number of com- +mands are provided. + +1.1. Installation + +Net.exe uses the following directory structure: + + /spool + /spool/help + /spool/mail + /spool/mqueue + /spool/rqueue + /spool/news + + +By default, the /spool directory is placed in the root directory +of the current drive. However, a subdirectory may be specified +with the -d command-line option described below. If a subdirec- +tory is given, the alias, autoexec.net, dialer, domain.txt and +ftpusers configuration files must also be located there. + +The "/spool" directory and its sub-directories are used by the +bbs, SMTP and NNTP services. The areas, forward.bbs, history, +mail.log, rewrite and signatur configuration files are located +here. + +1.2. net [-b] [-s ] [-d ] [] + + + + + + June 7, 1991 + + + + + + - 2 - + + +1.2.1. -b + +The -b option specifies the use of BIOS for console output; the +default is to write directly to the video display buffer. Use +this option if you are running under a windowing package and have +trouble with output "bleeding through" on top of other windows. + +1.2.2. -s + +The -s option specifies the size of the socket array to be allo- +cated within net.exe. This limits the number of network connec- +tions that may exist simultaneously. The default is 40. + +1.2.3. -d + +The -d option allows the user to specify a directory for the con- +figuration and spool files; it defaults to the root directory of +the system. + +1.2.4. Startup file + +After all command-line options, the name of a startup file may be +specified. If no startup file is specified, net.exe attempts to +open a file named autoexec.net in the configuration directory of +the current drive. If the file exists, it is read and executed +as though its contents were typed on the console as commands. +(See the Commands chapter.) This feature is useful for attaching +communication interfaces, configuring network addresses, and +starting the various services. + +2. Console modes + +The console may be in one of two modes: command mode and converse +mode. In command mode, the prompt net> is displayed and any of +the commands described in the Commands chapter may be entered. +In converse mode, keyboard input is processed according to the +current session. + +Sessions come in many types, including Telnet, FTP, AX25, NETROM, +Ping, More, Hopcheck and Tip. In a Telnet, AX25, NETROM, or Tip +session, keyboard input is sent to the remote system and any out- +put from the remote system is displayed on the console. In a FTP +session, keyboard input is first examined to see if it is a known +local command; if so it is executed locally. If not, it is +"passed through" to the remote FTP server. (See the FTP Subcom- +mands chapter). In a Ping session the user may test the path to +a remote site, and in a More session, the user may examine a +local file. A Hopcheck session is used to trace the path taken by +packets to reach a specified destination. A Tip session provides +a "dumb terminal" service that bypasses all network protocols. + +The keyboard also has cooked and raw states. In cooked state, +input is line-at-a-time; the user may use the line editing char- +acters ^U, ^R and backspace to erase the line, redisplay the line + + + + June 7, 1991 + + + + + + - 3 - + + +and erase the last character, respectively. Hitting either +return or line feed passes the complete line up to the applica- +tion. In raw state, each character is immediately passed to the +application as it is typed. + +The keyboard is always in cooked state in command mode. It is +also cooked in converse mode on an AX25, FTP or NET/ROM session. +In a Telnet session it depends on whether the remote end has +issued (and the local end has accepted) the Telnet WILL ECHO +option (see the echo command). + +On the IBM-PC, the user may escape back to command mode by hit- +ting the F10 key. On other systems, the user must enter the +escape character, which is by default control-] (hex 1d, ASCII +GS). (Note that this is distinct from the ASCII character of the +same name). The escape character can be changed (see the escape +command). + +In the IBM PC version, each session (including the command "ses- +sion") has its own screen. When a new session is created, the +command display is saved in memory and the screen is cleared. +When the command escape key (usually F10) is hit, the current +session screen is saved and the command screen is restored. When +a session is resumed, its screen is restored exactly as it +appeared when it was last current. + +3. Commands + +This chapter describes the commands recognized in command mode, +or within a startup file such as autoexec.net. These are given +in the following notation: + + command + command literal_parameter + command subcommand + command [] + command a | b + + +Many commands take subcommands or parameters, which may be +optional or required. In general, if a required subcommand or +parameter is omitted, an error message will summarize the avail- +able subcommands or required parameters. (Giving a '?' in place +of the subcommand will also generate the message. This is useful +when the command word alone is a valid command.) If a command +takes an optional value parameter, issuing the command without +the parameter generally displays the current value of the vari- +able. (Exceptions to this rule are noted in the individual com- +mand descriptions.) + +Two or more parameters separated by vertical bar(s) denote a +choice between the specified values. Optional parameters are +shown enclosed in [brackets], and a parameter enclosed in should be replaced with an actual value or string. For + + + + June 7, 1991 + + + + + + - 4 - + + +example, the notation denotes an actual host or gateway, +which may be specified in one of two ways: as a numeric IP +address in dotted decimal notation (eg. 44.0.0.1), or as a sym- +bolic name listed in the file domain.txt. + +All commands and many subcommands may be abbreviated. You only +need type enough of a command's name to distinguish it from oth- +ers that begin with the same series of letters. Parameters, how- +ever, must be typed in full. + +Certain FTP subcommands (eg. put, get, dir, etc) are recognized +only in converse mode with the appropriate FTP session; they are +not recognized in command mode. (See the FTP Subcommands +chapter.) + +Note that certain commands may have been configured out of a +given copy of net.exe to save disk and memory. If a command has +been configured out, it will not appear in the list produced by +the "?" command, nor will it be recognized by the command inter- +preter. + +3.1. + +Entering a carriage return (empty line) while in command mode +puts you in converse mode with the current session. If there is +no current session, net.exe remains in command mode. + +3.2. ! + +An alias for the shell command. + +3.3. # + +Commands starting with the hash mark (#) are ignored. This is +mainly useful for comments in the autoexec.net file. + +3.4. abort [] + +Abort a FTP get, put or dir operation in progress. If issued +without an argument, the current session is aborted. (This com- +mand works only on FTP sessions.) When receiving a file, abort +simply resets the data connection; the next incoming data packet +will generate a TCP RST (reset) response to clear the remote +server. When sending a file, abort sends a premature end-of- +file. Note that in both cases abort will leave a partial copy of +the file on the destination machine, which must be removed manu- +ally if it is unwanted. + +3.5. arp + +Display the Address Resolution Protocol table that maps IP +addresses to their subnet (link) addresses on subnetworks capable +of broadcasting. For each IP address entry the subnet type (eg. +Ethernet, AX.25), subnet address and time to expiration is shown. + + + + June 7, 1991 + + + + + + - 5 - + + +If the link address is currently unknown, the number of IP +datagrams awaiting resolution is also shown. + +3.5.1. arp add ethernet | ax25 | + + +Add a permanent entry to the table. It will not time out as will +an automatically-created entry, but must be removed with the arp +drop command. + +3.5.2. arp publish ethernet | ax25 | + + +This command is similar to the arp add command, but system will +also respond to any ARP request it sees on the network that seeks +the specified address. Use this feature with great care. + +3.5.3. arp drop ax25 | ethernet + +Remove the specified entry from the ARP table. + +3.5.4. arp flush + +Drop all automatically-created entries in the ARP table. Per- +manent entries are not affected. + +3.6. asystat + +Display statistics on attached asynchronous communications inter- +faces (8250 or 16550A), if any. The display for each port con- +sists of three lines. The first line gives the port label and the +configuration flags; these indicate whether the port is a 16550A +chip, the trigger character if any, whether CTS flow control is +enabled, whether RLSD (carrier detect) line control is enabled, +and the speed in bits per second. (Receiving the trigger charac- +ter causes the driver to signal upper layer software that data is +ready; it is automatically set to the appropriate frame end char- +acter for SLIP, PPP and NRS lines.) + +The second line of the status display shows receiver (RX) event +counts: the total number of receive interrupts, received charac- +ters, receiver overruns (lost characters) and the receiver high +water mark. The high water mark is the maximum number of charac- +ters ever read from the device during a single interrupt. This is +useful for monitoring system interrupt latency margins as it +shows how close the port hardware has come to overflowing due to +the inability of the CPU to respond to a receiver interrupt in +time. 8250 chips have no FIFO, so the high water mark cannot go +higher than 2 before overruns occur. The 16550A chip, however, +has a 16-byte receive FIFO which the software programs to inter- +rupt the CPU when the FIFO is one-quarter full. The high water +mark should typically be 4 or 5 when a 16550A is used; higher +values indicate that the CPU has at least once been slow to +respond to a receiver interrupt. + + + + June 7, 1991 + + + + + + - 6 - + + +When the 16550A is used, a count of FIFO timeouts is also +displayed on the RX status line. These are generated automati- +cally by the 16550A when three character intervals go by with +more than 0 but less than 4 characters in the FIFO. Since the +characters that make up a SLIP or NRS frame are normally sent at +full line speed, this count will usually be a lower bound on the +number of frames received on the port, as only the last fragment +of a frame generally results in a timeout (and then only when the +frame is not a multiple of 4 bytes long.) + +Finally, the software fifo overruns and high water mark are +displayed. These indicate whether the parameter on the +attach command needs to be adjusted (see the Attach Commands +chapter). + +The third line shows transmit (TX) statistics, including a total +count of transmit interrupts, transmitted characters, the length +of the transmit queue in bytes, the number of status interrupts, +and the number of THRE timeouts. The status interrupt count will +be zero unless CTS flow control or RLSD line control has been +enabled. The THRE timeout is a stopgap measure to catch lost +transmit interrupts, which seem to happen when there is a lot of +activity (ideally, this will be zero). + +3.7. attach ... + +Configure and attach a hardware interface to the system. +Detailed instructions for each driver are in the Attach Commands +chapter. An easy way to obtain a summary of the parameters +required for a given device is to issue a partial attach command +(eg. attach packet). This produces a usage message giving the +complete command format. + +3.8. ax25 ... + +These commands are used to control the AX.25 amateur radio link +level protocol. + +3.8.1. ax25 blimit [] + +Display or set the AX25 retransmission backoff limit. Normally +each successive AX25 retransmission is delayed by twice the value +of the previous interval; this is called binary exponential back- +off. When the backoff reaches the blimit setting it is held at +that value, which defaults to 30. To prevent the possibility of +"congestive collapse" on a loaded channel, blimit should be set +at least as high as the number of stations sharing the channel. +Note that this is applicable only on actual AX25 connections; UI +frames will never be retransmitted by the AX25 layer. + +3.8.2. ax25 dest + +Display the AX25 destination monitoring database. Each callsign +seen in the destination field of an AX25 frame is displayed (most + + + + June 7, 1991 + + + + + + - 7 - + + +recent first), along with the time since it was last referenced. +The time since the same callsign was last seen in the source +field of an AX25 frame on the same interface is also shown. If +the callsign has never been seen in the source field of a frame, +then this field is left blank. (This indicates that the destina- +tion is either a multicast address or a "hidden station".) + +3.8.3. ax25 digipeat [on | off] + +Display or set the digipeater enable flag. + +3.8.4. ax25 flush + +Clear the AX.25 "heard" list (see ax25 heard). + +3.8.5. ax25 heard + +Display the AX.25 "heard" list. For each interface that is con- +figured to use AX.25, a list of all callsigns heard through that +interface is shown, along with a count of the number of packets +heard from each station and the interval, in hr:min:sec format, +since each station was last heard. The list is sorted in most- +recently-heard order. The local station is included in the list- +ing; the packet count reflects the number of packets transmitted. +This count will be correct whether or not the modem monitors its +own transmissions. + +3.8.6. ax25 irtt [] + +Display or set the initial value of smoothed round trip time to +be used when a new AX25 connection is created. The value is in +milliseconds. The actual round trip time will be learned by +measurement once the connection has been established. + +3.8.7. ax25 kick + +Force a retransmission on the specified AX.25 control block. + +3.8.8. ax25 maxframe [] + +Establish the maximum number of frames that will be allowed to +remain unacknowledged at one time on new AX.25 connections. This +number cannot be greater than 7. + +3.8.9. ax25 mycall [] + +Display or set the local AX.25 address. The standard format is +used (eg. KA9Q-0 or WB6RQN-5). This command must be given before +any attach commands using AX.25 mode are given. + +3.8.10. ax25 paclen [] + +Limit the size of I-fields on new AX.25 connections. If IP +datagrams or fragments larger than this are transmitted, they + + + + June 7, 1991 + + + + + + - 8 - + + +will be transparently fragmented at the AX.25 level, sent as a +series of I frames, and reassembled back into a complete IP +datagram or fragment at the other end of the link. To have any +effect on IP datagrams, this parameter should be less than or +equal to the MTU of the associated interface. + +3.8.11. ax25 pthresh [] + +Display or set the poll threshold to be used for new AX.25 Ver- +sion 2 connections. The poll threshold controls retransmission +behavior as follows. If the oldest unacknowledged I-frame size is +less than the poll threshold, it will be sent with the poll (P) +bit set if a timeout occurs. If the oldest unacked I-frame size +is equal to or greater than the threshold, then a RR or RNR +frame, as appropriate, with the poll bit set will be sent if a +timeout occurs. + +The idea behind the poll threshold is that the extra time needed +to send a "small" I-frame instead of a supervisory frame when +polling after a timeout is small, and since there's a good chance +the I-frame will have to be sent anyway (i.e., if it were lost +previously) then you might as well send it as the poll. But if +the I-frame is large, send a supervisory (RR/RNR) poll instead to +determine first if retransmitting the oldest unacknowledged I- +frame is necessary; the timeout might have been caused by a lost +acknowledgement. This is obviously a tradeoff, so experiment +with the poll threshold setting. The default is 128 bytes, one +half the default value of paclen. + +3.8.12. ax25 reset + +Delete the AX.25 connection control block at the specified +address. + +3.8.13. ax25 retry [] + +Limit the number of successive unsuccessful retransmission +attempts on new AX.25 connections. If this limit is exceeded, +link re-establishment is attempted. If this fails retry times, +then the connection is abandoned and all queued data is deleted. +A value of 0 means "infinity"; the retry limit is disabled. +retry + +3.8.14. ax25 route + +Display the AX.25 routing table that specifies the digipeaters to +be used in reaching a given station. + +3.8.14.1. ax25 route add [digis ... ] + +Add an entry to the AX.25 routing table. An automatic ax25 route +add is executed if digipeaters are specified in an AX25 connect +command, or if a connection is received from a remote station via +digipeaters. Such automatic routing table entries won't override + + + + June 7, 1991 + + + + + + - 9 - + + +locally created entries, however. + +3.8.14.2. ax25 route drop + +Drop an entry from the AX.25 routing table. + +3.8.15. ax25 status [] + +Without an argument, display a one-line summary of each AX.25 +control block. If the address of a particular control block is +specified, the contents of that control block are dumped in more +detail. Note that the send queue units are frames, while the +receive queue units are bytes. + +3.8.16. ax25 t3 [] + +Display or set the AX.25 idle "keep alive" timer. Value is in +milliseconds. + +3.8.17. ax25 version [1 | 2] + +Display or set the version of the AX.25 protocol to attempt to +use on new connections. The default is 1 (the version that does +not use the poll/final bits). + +3.8.18. ax25 window [] + +Set the number of bytes that can be pending on an AX.25 receive +queue beyond which I frames will be answered with RNR (Receiver +Not Ready) responses. This presently applies only to suspended +interactive AX.25 sessions, since incoming I-frames containing +network (IP, NET/ROM) packets are always processed immediately +and are not placed on the receive queue. However, when an AX.25 +connection carries both interactive and network packet traffic, +an RNR generated because of backlogged interactive traffic will +also stop network packet traffic from being sent. + +3.9. BOOTP + +The bootp client and server are added to KA9Q to provide +automatic configuration capabilities. With this suite of exten- +sions, a KA9Q host can automatically configure its IP address, +subnet mask, broadcast address, host name, the default gateway, +the name servers, and default boot file. This simplifies host +configuration. + +The bootp server supports dynamic IP address assignment. If a +bootp request is made by a host to the server, and the server +doesn't have a static record for the PC making the request, an IP +address may be assigned from a list of dynamic addresses. This +simplifies server configuration, so that machines don't require +prior IP address assignment. This is useful in environments such +as university dormitories, where network service is provided, and +the computers configurations change frequently. When the server + + + + June 7, 1991 + + + + + + - 10 - + + +list of free addresses reaches a minimum threshold, it will begin +attempts to reclaim the address. + +The bootp client and server code are written according to RFC 951 +and 1048. + +3.9.1. bootp [] [silent] [noisy] + +Send a request to a bootp server, and wait for a reply. On +receipt of the server reply, the information is used to configure +the host. If a reply is not received, the command will time out. +Without arguments, bootp sends a request to the first interface +in the interface list. + +This command requires that there exist a routing entry for the IP +broadcast address 255.255.255.255 pointing to the appropriate +interface. If the interface uses ARP, there must also be an ARP +entry that maps that address to the appropriate link level broad- +cast address. For example, if you have an Ethernet interface +named "ethernet", use the following commands before the bootp +command: + + route add 255.255.255.255 ethernet + + arp add 255.255.255.255 ether ff:ff:ff:ff:ff:ff + +The following bootp subcommands are available: + +3.9.1.1. bootp + +Send a request over the specified network. + +3.9.1.2. bootp silent + +Set bootp so that it will not print the configuration. + +3.9.1.3. bootp noisy + +Set bootp so that it will print the configuration. + +3.9.2. bootpd ... + +This command starts and stops the bootp server, and sets the con- +figuration for the information it will provide in replies. If +the file bootptab exists, it will read the file for configuration +information. On receipt of a request, if bootptab has been +changed, the server will reread the file for the changed confi- +guration. The following subcommands are available: + +3.9.2.1. bootpd start + +Start the bootp server, reading from the file bootptab for confi- +guration information. + + + + + June 7, 1991 + + + + + + - 11 - + + +3.9.2.2. bootpd stop + +Stop the bootp server. + +3.9.2.3. bootpd dns + +Print the address of the domain name servers supplied in replies. + +3.9.2.4. bootpd dns ... + +Set the addresses. + +3.9.2.5. bootpd dynip + +Print the range and use of the dynamic IP address. + +3.9.2.6. bootpd dynip + +Set the range of IP address to be used for network netname. +These address will be supplied to hosts that are not found in the +static record. + +3.9.2.7. bootpd dynip off + +Turn off dynamic ip for network interface netname. + +3.9.2.8. bootpd host + +Print the information in the static host table. + +3.9.2.9. bootpd host ethernet|ax25 | [boot file] + +Add a host to the host table. The LANSTAR packet drivers provide +an Ethernet interface to upper layer applications, so configure a +LANSTAR network as an Ethernet. + +3.9.2.10. bootpd rmhost + +Remove host from the static host tables. + +3.9.2.11. bootpd homedir + +Print the default directory for the bootp file name used when the +bootp file is not specified in the static host record, and when +dynamic addresses are supplied. Default is the null string. + +3.9.2.12. bootpd homedir + +Set the default directory. + +3.9.2.13. bootpd defaultfile + +Print the default file for the bootp file name used when the + + + + June 7, 1991 + + + + + + - 12 - + + +bootp file is not specified in the static host record, and when +dynamic addresses are supplied. Default is the null string. + +3.9.2.14. bootpd defaultfile + +Set the default file. + +3.9.2.15. bootpd logfile + +Print the status of logging to a log file. + +3.9.2.16. bootpd logfile on|off + +Sets the file for logging to or the default, bootplog. +Turn logging to that file on or off. + +3.9.2.17. bootpd logscreen + +Print the status of logging to the screen. + +3.9.2.18. bootpd logscreen on|off + +Turn logging to the screen on or off. + +3.10. cd [] + +Change the current working directory, and display the new set- +ting. Without an argument, cd simply displays the current direc- +tory without change. The pwd command is an alias for cd. + +3.11. close [] + +Close the specified session; without an argument, close the +current session. On an AX.25 session, this command initiates a +disconnect. On a FTP or Telnet session, this command sends a FIN +(i.e., initiates a close) on the session's TCP connection. This +is an alternative to asking the remote server to initiate a close +(QUIT to FTP, or the logout command appropriate for the remote +system in the case of Telnet). When either FTP or Telnet sees +the incoming half of a TCP connection close, it automatically +responds by closing the outgoing half of the connection. Close +is more graceful than the reset command, in that it is less +likely to leave the remote TCP in a "half-open" state. + +3.12. connect [ ... ] + +Initiate a "vanilla" AX.25 session to the specified call sign +using the specified interface. Data sent on this session goes out +in conventional AX.25 packets with no upper layer protocol. The +de-facto presentation standard format is used, in that each +packet holds one line of text, terminated by a carriage return. +A single AX.25 connection may be used for terminal-to-terminal, +IP and NET/ROM traffic. The three types of data are automati- +cally separated by their AX.25 Level 3 Protocol IDs. + + + + June 7, 1991 + + + + + + - 13 - + + +Up to 7 optional digipeaters may be given; note that the word via +is NOT needed. If digipeaters are specified, they are automati- +cally added to the AX25 routing table as though the ax25 route +add command had been given before issuing the connect command. + +3.13. delete + +Delete a filename in the current working directory. + +3.14. detach + +Detach a previously attached interface from the system. All IP +routing table entries referring to this interface are deleted, +and forwarding references by any other interface to this inter- +face are removed. + +3.15. dialer [ [ [ []]]] + +Setup an autodialer session for the interface. Whenever the +interface is idle for the interval in , the autodialer +will ping the . If there is no answer after +attempts, or the interface is otherwise known to be down, the +autodialer will execute the special commands contained in the +. + +The may have any valid name, and must be located in +the configuration directory (see the Installion section). The +commands in the file are described in the Dialer Subcommands +chapter. + +If the is missing, any previous dialer command pro- +cess will be removed. If is missing, the +will be executed immediately without any further tests. If + is missing, the default is 2. If is missing and +the interface uses the PPP encapsulation, the PPP LCP echo will +be used instead. + +3.16. dir [] + +List the contents of the specified directory on the console. If +no argument is given, the current directory is listed. Note that +this command works by first listing the directory into a tem- +porary file, and then creating a more session to display it. +After this completes, the temporary file is deleted. + +3.17. disconnect [] + +An alias for the close command (for the benefit of AX.25 users). + +3.18. domain ... + +These commands control the operation of the Internet Domain Name +Service (DNS). + + + + June 7, 1991 + + + + + + - 14 - + + +3.18.1. domain addserver + +Add one or more domain name server(s) to the list of name +servers. + +3.18.2. domain dropserver + +Remove one or more domain name server(s) from the list of name +servers. + +3.18.3. domain listservers + +List the currently configured domain name servers, along with +statistics on how many queries and replies have been exchanged +with each one, response times, etc. + +3.18.4. domain query + +Send a query to a domain server asking for all resource records +associated with this , and list the records. + +3.18.5. domain retry [] + +Display or set the number of attempts to reach each server on the +list during one call to the resolver. If this count is exceeded, +a failure indication is returned. If set to 0, the list will +cycle forever; this may be useful for unattended operation. The +default is 3. + +3.18.6. domain suffix [] + +Display or specify the default domain name suffix to be appended +to a host name when it contains no periods. For example, if the +suffix is set to ampr.org and the user enters telnet ka9q, the +domain resolver will attempt to find ka9q.ampr.org. If the host +name being sought contains one or more periods, however, the +default suffix is NOT applied (eg. telnet foo.bar would NOT be +turned into foo.bar.ampr.org). + +3.18.7. domain trace [on | off] + +Display or set the flag controlling the tracing of domain server +requests and responses. Trace messages will be seen only if a +domain name being sought is not found in the local cache file, +domain.txt. + +3.18.8. domain cache ... + +These commands are used for the use of the resource record file +domain.txt, and the local memory cache. + +3.18.8.1. domain cache clean [on | off] + +Display or set the flag controlling the removal of resource + + + + June 7, 1991 + + + + + + - 15 - + + +records from the domain.txt file whose time-to-live has reached +zero. + +When clean is off (the default), expired records will be +retained; if no replacement can be obtained from another domain +name server, these records will continue to be used. + +When clean is on, expired records will be removed from the file +whenever any new record is added to the file. + +3.18.8.2. domain cache list + +List the current contents of the local memory cache. + +3.18.8.3. domain cache size [] + +Display or set the nominal maximum size of the local memory +cache. The default is 20. + +(Note: The cache may be temporarily larger when waiting for new +records to be written to the domain.txt file.) + +3.18.8.4. domain cache wait [] + +Display or set the interval in seconds to wait for additional +activity before updating the domain.txt file. The default is 300 +seconds (5 minutes). + +3.19. echo [accept | refuse] + +Display or set the flag controlling client Telnet's response to a +remote WILL ECHO offer. + +The Telnet presentation protocol specifies that in the absence of +a negotiated agreement to the contrary, neither end echoes data +received from the other. In this mode, a Telnet client session +echoes keyboard input locally and nothing is actually sent until +a carriage return is typed. Local line editing is also performed: +backspace deletes the last character typed, while control-U +deletes the entire line. + +When communicating from keyboard to keyboard the standard local +echo mode is used, so the setting of this parameter has no +effect. However, many timesharing systems (eg. UNIX) prefer to do +their own echoing of typed input. (This makes screen editors +work right, among other things). Such systems send a Telnet WILL +ECHO offer immediately upon receiving an incoming Telnet connec- +tion request. If echo accept is in effect, a client Telnet ses- +sion will automatically return a DO ECHO response. In this mode, +local echoing and editing is turned off and each key stroke is +sent immediately (subject to the congestion control algorithms in +TCP). While this mode is just fine across an Ethernet, it is +clearly inefficient and painful across slow paths like packet +radio channels. Specifying echo refuse causes an incoming WILL + + + + June 7, 1991 + + + + + + - 16 - + + +ECHO offer to be answered with a DONT ECHO; the client Telnet +session remains in the local echo mode. Sessions already in the +remote echo mode are unaffected. (Note: Berkeley Unix has a bug +in that it will still echo input even after the client has +refused the WILL ECHO offer. To get around this problem, enter +the stty -echo command to the shell once you have logged in.) + +3.20. eol [unix | standard] + +Display or set Telnet's end-of-line behavior when in remote echo +mode. In standard mode, each key is sent as-is. In unix mode, +carriage returns are translated to line feeds. This command is +not necessary with all UNIX systems; use it only when you find +that a particular system responds to line feeds but not carriage +returns. Only SunOS release 3.2 seems to exhibit this behavior; +later releases are fixed. + +3.21. escape [] + +Display or set the current command-mode escape character in hex. +(This command is not provided on the IBM-PC; on the PC, the +escape char is always F10.) + +3.22. etherstat + +Display 3-Com Ethernet controller statistics (if configured). + +3.23. exit + +Exit the net.exe program and return to MS-DOS. + +3.24. finger [ ...] + +Issue a network finger request for user user at host hostid. This +creates a client session which may be interrupted, resumed, +reset, etc, just like a Telnet client session. + +3.25. ftp + +Open an FTP control channel to the specified remote host and +enter converse mode on the new session. Responses from the +remote server are displayed directly on the screen. See the FTP +Subcommands chapter for descriptions of the commands available in +a FTP session. + +3.26. help + +Display a brief summary of top-level commands. + +3.27. hop ... + +These commands are used to test the connectivity of the network. + + + + + + June 7, 1991 + + + + + + - 17 - + + +3.27.1. hop check + +Initiate a hopcheck session to the specified host. This uses a +series of UDP "probe" packets with increasing IP TTL fields to +determine the sequence of gateways in the path to the specified +destination. This function is patterned after the UNIX traceroute +facility. + +ICMP message tracing should be turned off before this command is +executed (see the icmp trace command). + +3.27.2. hop maxttl [] + +Display or set the maximum TTL value to be used in hop check ses- +sions. This effectively bounds the radius of the search. + +3.27.3. hop maxwait [] + +Display or set the maximum interval that a hopcheck session will +wait for responses at each stage of the trace. The default is 5 +seconds. + +3.27.4. hop queries [] + +Display or set the number of UDP probes that will be sent at each +stage of the trace. The default is 3. + +3.27.5. hop trace [on | off] + +Display or set the flag that controls the display of additional +information during a hop check session. + +3.28. hostname [] + +Display or set the local host's name. By convention this should +be the same as the host's primary domain name. This string is +used only in the greeting messages of the various network +servers; note that it does NOT set the system's IP address. + +If is the same as an (see the Attach commands +chapter), this command will search for a CNAME domain resource +record which corresponds to the IP address of the . + +3.29. hs + +Display statistics about the HS high speed HDLC driver (if con- +figured and active). + +3.30. icmp ... + +These commands are used for the Internet Control Message Protocol +service. + + + + + + June 7, 1991 + + + + + + - 18 - + + +3.30.1. icmp echo [on | off] + +Display or set the flag controlling the asynchronous display of +ICMP Echo Reply packets. This flag must be on for one-shot pings +to work (see the ping command.) + +3.30.2. icmp status + +Display statistics about the Internet Control Message Protocol +(ICMP), including the number of ICMP messages of each type sent +or received. + +3.30.3. icmp trace [on | off] + +Display or set the flag controlling the display of ICMP error +messages. These informational messages are generated by Internet +routers in response to routing, protocol or congestion problems. +This option should be turned off before using the hop check +facility because it relies on ICMP Time Exceeded messages, and +the asynchronous display of these messages will be mingled with +hop check command output. + +3.31. ifconfig + +Display a list of interfaces, with a short status for each. + +3.31.1. ifconfig + +Display an extended status of the interface. + +3.31.2. ifconfig broadcast

    + +Set the broadcast address for the interface. The
    takes +the form of an IP address with 1's in the host part of the +address. This is related to the netmask sub-command. See also +the arp command. + +3.31.3. ifconfig encapsulation + +Not fully implemented. + +3.31.4. ifconfig forward + +Set a forwarding interface for multiple channel interfaces. To +remove the forward, set to . + +3.31.5. ifconfig ipaddress + +Set the IP address for this interface. It is standard Internet +practice that each interface has its own address. For hosts with +only one interface, the interface address is usually the same as +the host address. See also the hostname and ip address commands. + + + + + + June 7, 1991 + + + + + + - 19 - + + +3.31.6. ifconfig linkaddress + +Set the hardware dependant address for this interface. + +3.31.7. ifconfig mtu + +Set the MTU for this interface. See the Setting ... MTU, MSS and +Window chapter for more information. + +3.31.8. ifconfig netmask
    + +Set the sub-net mask for this interface. The
    takes the +form of an IP address with 1's in the network and subnet parts of +the address, and 0's in the host part of the address. This is +related to the broadcast sub-command. See also the route com- +mand. + +3.31.9. ifconfig rxbuf + +Not yet implemented. + +3.32. ip ... + +These commands configure the Internet Protocol (IP) service. + +3.32.1. ip address [] + +Display or set the default local IP address. This command must be +given before an attach command if it is to be used as the default +IP address for the interface. + +3.32.2. ip rtimer [] + +Display or set the IP reassembly timeout. The default is 30 +seconds. + +3.32.3. ip status + +Display Internet Protocol (IP) statistics, such as total packet +counts and error counters of various types. + +3.32.4. ip ttl [] + +Display or set the time-to-live value placed in each outgoing IP +datagram. This limits the number of switch hops the datagram +will be allowed to take. The idea is to bound the lifetime of the +packet should it become caught in a routing loop, so make the +value slightly larger than the number of hops across the network +you expect to transit packets. The default is set at compilation +time to the official recommended value for the Internet. + +3.33. isat [on | off] + +Display or set the AT flag. Currently, there is no sure-fire way + + + + June 7, 1991 + + + + + + - 20 - + + +to determine the type of clock-chip being used. If an AT type +clock is in use, this command will allow measurement of time in +milliseconds, rather than clock ticks (55 milliseconds per clock +tick). + +3.33.1. kick [] + +Kick all sockets associated with a session; if no argument is +given, kick the current session. Performs the same function as +the ax25 kick and tcp kick commands, but is easier to type. + +3.34. log [stop | ] + +Display or set the filename for logging server sessions. If stop +is given as the argument, logging is terminated (the servers +themselves are unaffected). If a file name is given as an argu- +ment, server session log entries will be appended to it. + +3.35. mbox + +Display the status of the mailbox server system (if configured). + +3.36. memory ... + +These commands are used to display memory allocation statistics. + +3.36.1. memory free + +Display the storage allocator free list. Each entry consists of a +starting address, in hex, and a size, in decimal bytes. + +3.36.2. memory ibuffs + +Display or set the number of buffers on the interrupt buffer +pool. The default is 5. + +3.36.3. memory ibufsize + +Display or set the size of each buffer on the interrupt buffer +pool. Since the interrupt buffer pool consists of fixed-size +buffers, the value chosen must be large enough to satisfy the +needs of the most demanding driver. The default is 2048. + +3.36.4. memory sizes + +Display a histogram of storage allocator request sizes. Each his- +togram bin is a binary order of magnitude (i.e., a factor of 2). + +3.36.5. memory status + +Display a summary of storage allocator statistics. The first line +shows the base address of the heap, its total size, the amount of +heap memory available in bytes and as a percentage of the total +heap size, and the amount of memory left over (i.e., not placed + + + + June 7, 1991 + + + + + + - 21 - + + +on the heap at startup) and therefore available for shell subcom- +mands. + +The second line shows the total number of calls to allocate and +free blocks of memory, the difference of these two values (i.e., +the number of allocated blocks outstanding), the number of allo- +cation requests that were denied due to lack of memory, and the +number of calls to free() that attempted to free garbage (eg. by +freeing the same block twice or freeing a garbled pointer). + +The third line shows the number of calls to malloc and free that +occurred with interrupts off. In normal situations these values +should be zero. The fourth line shows statistics for the special +pool of fixed-size buffers used to satisfy requests for memory at +interrupt time. The variables shown are the number of buffers +currently in the pool, their size, and the number of requests +that failed due to exhaustion of the pool. + +3.37. mkdir + +Create a sub-directory in the current working directory. + +3.38. mode [vc | datagram] + +Control the default transmission mode on the specified AX.25 +interface. In datagram mode, IP packets are encapsulated in AX.25 +UI frames and transmitted without any other link level mechan- +isms, such as connections or acknowledgements. + +In vc (virtual circuit) mode, IP packets are encapsulated in +AX.25 I frames and are acknowledged at the link level according +to the AX.25 protocol. Link level connections are opened if +necessary. + +In both modes, ARP is used to map IP to AX.25 addresses. The +defaults can be overridden with the type-of-service (TOS) bits in +the IP header. Turning on the "reliability" bit causes I frames +to be used, while turning on the "low delay" bit uses UI frames. +(The effect of turning on both bits is undefined and subject to +change). + +In both modes, IP-level fragmentation is done if the datagram is +larger than the interface MTU. In virtual circuit mode, how- +ever, the resulting datagram (or fragments) is further fragmented +at the AX.25 layer if it (or they) are still larger than the +AX.25 paclen parameter. In AX.25 fragmentation, datagrams are +broken into several I frames and reassembled at the receiving end +before being passed to IP. This is preferable to IP fragmentation +whenever possible because of decreased overhead (the IP header +isn't repeated in each fragment) and increased robustness (a lost +fragment is immediately retransmitted by the link layer). + + + + + + + June 7, 1991 + + + + + + - 22 - + + +3.39. more [ ...] + +Display the specified file(s) a screen at a time. To proceed to +the next screen, press the space bar; to cancel the display, hit +the 'q' key. The more command creates a session that you can +suspend and resume just like any other session. + +3.40. param [ [value]] ... + +Invoke a device-specific control routine. The following parame- +ter names are recognized by the parameter command, but not all +are supported by each device type. Most commands deal only with +half-duplex packet radio interfaces. + + TxDelay - transmit keyup delay + Persist - P-persistence setting + SlotTime - persistence slot time setting + txTail - transmit done holdup delay + FullDup - enable/disable full duplex + Hardware - hardware specific command + TxMute - experimental transmit mute command + DTR - control Data Terminal Ready (DTR) signal to modem + RTS - control Request to Send (RTS) signal to modem + Speed - set line speed + EndDelay + Group + Idle + Min + MaxKey + Wait + Down - drop modem control lines + Up - raise modem control lines + Return - return a KISS TNC to command mode + + +Depending on the interface, some parameters can be read back by +omitting a new value. This is not possible with KISS TNCs as +there are no KISS commands for reading back previously sent +parameters. + +On a KISS TNC interface, the param command generates and sends +control packets to the TNC. Data bytes are treated as decimal. +For example, param ax0 txdelay 255 will set the keyup timer +(type field = 1) on the KISS TNC configured as ax0 to 2.55 +seconds (255 x .01 sec). On all asy interfaces (slip, kiss/ax25, +nrs, ppp) the param speed command allows the baud rate to +be read or set. + +The implementation of this command for the various interface +drivers is incomplete and subject to change. + +3.41. ping [ [ []]] + +Ping (send ICMP Echo Request packets to) the specified host. By + + + + June 7, 1991 + + + + + + - 23 - + + +default the data field contains only a small timestamp to aid in +determining round trip time; if the optional length argument is +given, the appropriate number of data bytes (consisting of hex +55) are added to the ping packets. + +If interval is specified, pings will be repeated indefinitely at +the specified number of seconds; otherwise a single, "one shot" +ping is done. Responses to one-shot pings appear asynchronously +on the command screen, while repeated pings create a session that +may be suspended and resumed. Pinging continues until the ses- +sion is manually reset. + +The incflag option causes a repeated ping to increment the target +IP address for each ping; it is an experimental feature for +searching blocks of IP addresses for active hosts. + +3.42. ppp ... + +These commands are used to configure Point to Point Protocol +interfaces. + +This implementation of PPP is designed to be as complete as pos- +sible. Because of this, the number of options can be rather +daunting. However, a typical PPP configuration might include the +following commands: + + attach asy 0x3f8 4 ppp pp0 4096 1500 9600 r + dial pp0 dialer.pp0 30 + # + ppp pp0 quick + ppp pp0 lcp open + # + route add default pp0 + + +3.42.1. ppp + +Display the status of the PPP interface. + +3.42.2. ppp quick + +Quick setup for the PPP link. By popular demand, this command is +a shortcut for the following commands: + + ppp pp0 ipcp local compress tcp 16 1 + ppp pp0 ipcp open + ppp pp0 lcp local accm 0 + ppp pp0 lcp local acfc on + ppp pp0 lcp local pfc on + ppp pp0 lcp local magic on + + + + + + + + June 7, 1991 + + + + + + - 24 - + + +3.42.3. ppp lcp ... + +These commands are used for the LCP [Link Control Protocol] con- +figuration. + +3.42.3.1. ppp lcp close + +Shutdown the PPP interface. + +3.42.3.2. ppp lcp local ... + +These commands control the configuration of the local side of the +link. If an option is specified, the parameters will be used as +the initial values in configuration requests. If not specified, +that option will not be requested. + +For each of these options, the allow parameter will permit the +remote to include that option in its response, even when the +option is not included in the request. By default, all options +are allowed. + +3.42.3.2.1. ppp lcp local accm [ | allow [on | +off] ] + +Display or set the Async Control Character Map. The default is +0xffffffff. + +3.42.3.2.2. ppp lcp local authenticate [ pap | none | +allow [on | off] ] + +Display or set the authentication protocol. The default is none. + +3.42.3.2.3. ppp lcp local acfc [ on | off | allow [on | +off] ] + +Display or set the option to compress the address and control +fields of the PPP HLDC-like header. This is generally desirable +for slow asynchronous links, and undesirable for fast or synchro- +nous links. The default is off. + +3.42.3.2.4. ppp lcp local pfc [ on | off | allow [on | +off] ] + +Display or set the option to compress the protocol field of the +PPP HLDC-like header. This is generally desirable for slow asyn- +chronous links, and undesirable for fast or synchronous links. +The default is off. + +3.42.3.2.5. ppp lcp local magic [ on | off | | +allow [on | off] ] + +Display or set the initial Magic Number. The default is off +(zero). + + + + + June 7, 1991 + + + + + + - 25 - + + +3.42.3.2.6. ppp lcp local mru [ | allow [on | +off] ] + +Display or set the Maximum Receive Unit. The default is 1500. + +3.42.3.2.7. ppp lcp local default + +Reset the options to their default values. + +3.42.3.3. ppp lcp listen + +Wait for the physical layer to come up, then wait for configura- +tion negotiation from the remote. The open command is preferred. + +3.42.3.4. ppp lcp open + +Wait for the physical layer to come up, then initiate configura- +tion negotiation. + +3.42.3.5. ppp lcp remote ... + +These commands control the configuration of the remote side of +the link. The options are identical to those of the local side. +If an option is specified, the parameters will be used in +responses to the remote's configuration requests. If not speci- +fied, that option will be accepted if it is allowed. + +For each of these options, the allow parameter will permit the +remote to specify that option in its request. By default, all +options are allowed. + +3.42.3.6. ppp lcp timeout [] + +Display or set the interval to wait between configuration or ter- +mination attempts. The default is 3 seconds. + +3.42.3.7. ppp lcp try ... + +These commands are used for the various counters. + +3.42.3.7.1. ppp lcp try configure [] + +Display or set the number of configuration requests sent. The +default is 20. + +3.42.3.7.2. ppp lcp try failure [] + +Display or set the number of bad configuration requests allowed +from the remote. The default is 10. + +3.42.3.7.3. ppp lcp try terminate [] + +Display or set the number of termination requests sent before +shutdown. The default is 2. + + + + June 7, 1991 + + + + + + - 26 - + + +3.42.4. ppp ipcp ... + +These commands are used for the IPCP [Internet Protocol Control +Protocol] configuration. + +The close, listen, open, timeout and try sub-commands are identi- +cal to the LCP (described above). + +3.42.4.1. ppp ipcp local ... + +These commands control the configuration of the local side of the +link. If an option is specified, the parameters will be used as +the initial values in configuration requests. If not specified, +that option will not be requested. + +For each of these options, the allow parameter will permit the +remote to include that option in its response, even when the +option is not included in the request. By default, all options +are allowed. + +3.42.4.1.1. ppp ipcp local address [ | allow +[on | off] ] + +Display or set the local address for negotiation purposes. If an +address of 0 is specified, the other side of the link will supply +the address. By default, no addresses are negotiated. + +3.42.4.1.2. ppp ipcp local compress [ tcp +[] | none | allow [on | off] ] + +Display or set the compression protocol. The default is none. + +The tcp specifies the number of "conversation" slots, +which must be 1 to 255. (This may be limited at compilation time +to a smaller number.) A good choice is in the range 4 to 16. + +The tcp is 0 (don't compress the slot number) or 1 (OK to +compress the slot number). KA9Q can handle compressed slot +numbers, so the default is 1. + +3.42.4.2. ppp ipcp remote ... + +These commands control the configuration of the remote side of +the link. The options are identical to those of the local side. +If an option is specified, the parameters will be used in +responses to the remote's configuration requests. If not speci- +fied, that option will be accepted if it is allowed. + +For each of these options, the allow parameter will permit the +remote to specify that option in its request. By default, all +options are allowed. + + + + + + + June 7, 1991 + + + + + + - 27 - + + +3.42.4.3. ppp ipcp pool [ []] + +Specify a pool of addresses to be assigned to the . The + is the number of addresses in the pool; the default is 1. + +The addresses will be used in rotation. Overlapping series of +addresses may be assigned to more than one , and conflicts +will be resolved. + +3.42.5. ppp pap ... + +These commands are used for the PAP [Password Authentication Pro- +tocol] configuration. + +The timeout and try sub-commands are identical to the LCP +(described above). However, the terminate counter is unused. + +3.42.5.1. ppp pap user [ [] ] + +Display or set the username (the password may be set, but not +displayed). When the username is specified, but no password is +supplied, the ftpusers file is searched for the password. When a +username/password is unknown or rejected, a session will appear +at the console to prompt for a new username/password. + +3.42.6. ppp trace [] + +Display or set the flags that control the logging of information +during PPP link configuration. + +The flag value is 0 for none, 1 for basic, and 2 for general. +Values greater than 2 are usually not compiled, and are described +in the appropriate source files where they are defined. + +3.43. ps + +Display all current processes in the system. The fields are as +follows: + +PID - Process ID (the address of the process descriptor). + +SP - The current value of the process stack pointer. + +stksize - The size of the stack allocated to the process. + +maxstk - The apparent peak stack utilization of this process. +This is done in a somewhat heuristic fashion, so the numbers +should be treated as approximate. If this number reaches or +exceeds the stksize figure, the system is almost certain to +crash; the net.exe program should be recompiled to give the pro- +cess a larger allocation when it is started. + +event - The event this task is waiting for, if it is not runn- +able. + + + + June 7, 1991 + + + + + + - 28 - + + +fl - Process status flags. There are three: I (Interrupts +enabled), W (Waiting for event) and S (Suspended). The I flag is +set whenever a task has executed a pwait() call (wait for event) +without first disabling hardware interrupts. Only tasks that wait +for hardware interrupt events will turn off this flag; this is +done to avoid critical sections and missed interrupts. The W flag +indicates that the process is waiting for an event; the event +column will be non-blank. Note that although there may be several +runnable processes at any time (shown in the ps listing as those +without the W flag and with blank event fields) only one process +is actually running at any one instant (The Refrigerator Light +Effect says that the ps command is always the one running when +this display is generated.) + +3.44. pwd [] + +An alias for the cd command. + +3.45. record [off | ] + +Append to filename all data received on the current session. +Data sent on the current session is also written into the file +except for Telnet sessions in remote echo mode. The command +record off stops recording and closes the file. + +3.46. remote [-p ] [-k ] [-a ] +exit | reset | kick + +Send a UDP packet to the specified host commanding it to exit the +net.exe program, reset the processor, or force a retransmission +on TCP connections. For this command to be accepted, the remote +system must be running the remote server and the port number +specified in the remote command must match the port number given +when the server was started on the remote system. If the port +numbers do not match, or if the remote server is not running on +the target system, the command packet is ignored. Even if the +command is accepted there is no acknowledgement. + +The kick command forces a retransmission timeout on all TCP con- +nections that the remote node may have with the local node. If a +connection is idle, a current ACK packet (without data) is sent. +If the -a option is used, connections to the specified host are +kicked instead. No key is required for the kick subcommand. + +The exit and reset subcommands are mainly useful for restarting +the net.exe program on a remote unattended system after the con- +figuration file has been updated. The remote system should +invoke the net.exe program automatically upon booting, preferably +in an infinite loop. For example, under MS-DOS the boot disk +should contain the following in autoexec.net: + + :loop + net + goto :loop + + + + June 7, 1991 + + + + + + - 29 - + + +3.47. remote -s + +The exit and reset subcommands of remote require a password. The +password is set on a given system with the -s option, and it is +specified in a command to a remote system with the -k option. If +no password is set with the -s option, then the exit and reset +subcommands are disabled. + +Note that remote is an experimental feature in NOS; it is not yet +supported by any other TCP/IP implementation. + +3.48. rename + +Rename oldfilename to newfilename. + +3.49. reset [] + +Reset the specified session; if no argument is given, reset the +current session. This command should be used with caution since +it does not reliably inform the remote end that the connection no +longer exists. (In TCP a reset (RST) message will be automati- +cally generated should the remote TCP send anything after a local +reset has been done. In AX.25 the DM message performs a similar +role. Both are used to get rid of a lingering half-open connec- +tion after a remote system has crashed.) + +3.50. rip ... + +These commands are used for the RIP service. + +3.50.1. rip accept + +Remove the specified gateway from the RIP filter table, allowing +future broadcasts from that gateway to be accepted. + +3.50.2. rip add [] + +Add an entry to the RIP broadcast table. The IP routing table +will be sent to hostid every interval seconds. If flags is speci- +fied as 1, then "split horizon" processing will be performed for +this destination. That is, any IP routing table entries pointing +to the interface that will be used to send this update will be +removed from the update. If split horizon processing is not +specified, then all routing table entries except those marked +"private" will be sent in each update. (Private entries are +never sent in RIP packets). + +Triggered updates are always done. That is, any change in the +routing table that causes a previously reachable destination to +become unreachable will trigger an update that advertises the +destination with metric 15, defined to mean "infinity". + +Note that for RIP packets to be sent properly to a broadcast +address, there must exist correct IP routing and ARP table + + + + June 7, 1991 + + + + + + - 30 - + + +entries that will first steer the broadcast to the correct inter- +face and then place the correct link-level broadcast address in +the link-level destination field. If a standard IP broadcast +address convention is used (eg. 128.96.0.0 or 128.96.255.255) +then chances are you already have the necessary IP routing table +entry, but unusual subnet or cluster-addressed networks may +require special attention. However, an arp add command will be +required to translate this address to the appropriate link level +broadcast address. For example, + + +arp add 128.96.0.0 ethernet ff:ff:ff:ff:ff:ff + + +for an Ethernet network, and + + +arp add 44.255.255.255 ax25 qst-0 + + +for an AX25 packet radio channel. + +3.50.3. rip drop + +Remove an entry from the RIP broadcast table. + +3.50.4. rip merge [on | off] + +This flag controls an experimental feature for consolidating +redundant entries in the IP routing table. When rip merging is +enabled, the table is scanned after processing each RIP update. +An entry is considered redundant if the target(s) it covers would +be routed identically by a less "specific" entry already in the +table. That is, the target address(es) specified by the entry in +question must also match the target addresses of the less +specific entry and the two entries must have the same interface +and gateway fields. For example, if the routing table contains + + +Dest Len Interface Gateway Metric P Timer Use +1.2.3.4 32 ethernet0 128.96.1.2 1 0 0 0 +1.2.3 24 ethernet0 128.96.1.2 1 0 0 0 + + +then the first entry would be deleted as redundant since packets +sent to 1.2.3.4 will still be routed correctly by the second +entry. Note that the relative metrics of the entries are ignored. + +3.50.5. rip refuse + +Refuse to accept RIP updates from the specified gateway by adding +the gateway to the RIP filter table. It may be later removed with +the rip accept command. + + + + + June 7, 1991 + + + + + + - 31 - + + +3.50.6. rip request + +Send a RIP Request packet to the specified gateway, causing it to +reply with a RIP Response packet containing its routing table. + +3.50.7. rip status + +Display RIP status, including a count of the number of packets +sent and received, the number of requests and responses, the +number of unknown RIP packet types, and the number of refused RIP +updates from hosts in the filter table. A list of the addresses +and intervals to which periodic RIP updates are being sent is +also shown, along with the contents of the filter table. + +3.50.8. rip trace [0 | 1 | 2] + +This variable controls the tracing of incoming and outgoing RIP +packets. Setting it to 0 disables all RIP tracing. A value of 1 +causes changes in the routing table to be displayed, while pack- +ets that cause no changes cause no output. Setting the variable +to 2 produces maximum output, including tracing of RIP packets +that cause no change in the routing table. + +3.51. rmdir + +Remove a sub-directory from the current working directory. + +3.52. route + +With no arguments, route displays the IP routing table. + +3.52.1. route add [/bits] | default +[ []] + +This command adds an entry to the routing table. It requires at +least two more arguments, the hostid of the target destination +and the name of the interface to which its packets should be +sent. If the destination is not local, the gateway's hostid +should also be specified. (If the interface is a point-to-point +link, then gateway_hostid may be omitted even if the target is +non-local because this field is only used to determine the +gateway's link level address, if any. If the destination is +directly reachable, gateway_hostid is also unnecessary since the +destination address is used to determine the interface link +address). + +The optional /bits suffix to the destination host id specifies +how many leading bits in the host id are to be considered signi- +ficant in the routing comparisons. If not specified, 32 bits +(i.e., full significance) is assumed. With this option, a single +routing table entry may refer to many hosts all sharing a common +bit string prefix in their IP addresses. For example, ARPA Class +A, B and C networks would use suffixes of /8, /16 and /24 respec- +tively; the command + + + + June 7, 1991 + + + + + + - 32 - + + + +route add 44/8 sl0 44.64.0.2 + + +causes any IP addresses beginning with "44" in the first 8 bits +to be routed to 44.64.0.2; the remaining 24 bits are "don't- +cares". + +When an IP address to be routed matches more than one entry in +the routing table, the entry with largest bits parameter (i.e., +the "best" match) is used. This allows individual hosts or blocks +of hosts to be exceptions to a more general rule for a larger +block of hosts. + +The special destination default is used to route datagrams to +addresses not matched by any other entries in the routing table; +it is equivalent to specifying a /bits suffix of /0 to any desti- +nation hostid. Care must be taken with default entries since two +nodes with default entries pointing at each other will route +packets to unknown addresses back and forth in a loop until their +time-to-live (TTL) fields expire. (Routing loops for specific +addresses can also be created, but this is less likely to occur +accidentally). The best way to use default routes is to pick one +node in your network that has the "best" connections to the world +outside your network. Create a spanning tree with that node as +the root and have each node install a default route pointing in +the direction of that node, with the exception of the root node. + +Here are some examples of the route command: + +# Route datagrams to IP address 44.0.0.3 to SLIP line #0. +# No gateway is needed because SLIP is point-to point. +route add 44.0.0.3 sl0 + +# Route all default traffic to the gateway on the local Ethernet +# with IP address 44.0.0.1 +route add default ec0 44.0.0.1 + +# The local Ethernet has an ARPA Class-C address assignment; +# route all IP addresses beginning with 192.4.8 to it +route add 192.4.8/24 ec0 + +# The station with IP address 44.0.0.10 is on the local AX.25 channel +route add 44.0.0.10 ax0 + + +3.52.2. route addprivate [/bits] | default +[ []] + +This command is identical to route add except that it also marks +the new entry as private; it will never be included in outgoing +RIP updates. + + + + + + June 7, 1991 + + + + + + - 33 - + + +3.52.3. route drop + +route drop deletes an entry from the table. If a packet arrives +for the deleted address and a default route is in effect, it will +be used. + +3.53. session [] + +Without arguments, displays the list of current sessions, includ- +ing session number, remote TCP or AX.25 address and the associ- +ated socket index. An asterisk (*) is shown next to the current +session; entering a blank line at this point puts you in converse +mode with that session. Entering a session number as an argument +to the session command will put you in converse mode with that +session. If the Telnet server is enabled, the user is notified +of an incoming request and a session number is automatically +assigned. The user may then select the session normally to con- +verse with the remote user as though the session had been locally +initiated. + +3.54. shell + +Suspends net.exe and executes a sub-shell ("command processor" +under MS-DOS). When the sub-shell exits, net.exe resumes (under +MS-DOS, enter the exit command). Background activity (FTP +servers, etc) is also suspended while the subshell executes. Note +that this will fail unless there is sufficient unused memory for +the sub-shell and whatever command the user tries to run. + +3.55. smtp ... + +These commands control the operation of the Simple Mail Transfer +Protocol (that is, mail). + +3.55.1. smtp gateway [] + +Displays or sets the host to be used as a "smart" mail relay. Any +mail sent to a host not in the host table will instead be sent to +the gateway for forwarding. + +3.55.2. smtp kick + +Run through the outgoing mail queue and attempt to deliver any +pending mail. This command allows the user to "kick" the mail +system manually. Normally, this command is periodically invoked +by a timer whenever net.exe is running. + +3.55.3. smtp maxclients [] + +Displays or sets the maximum number of simultaneous outgoing SMTP +sessions that will be allowed. The default is 10; reduce it if +network congestion is a problem. + + + + + + June 7, 1991 + + + + + + - 34 - + + +3.55.4. smtp timer [] + +Displays or sets the interval between "kicks" (scans) of the out- +bound mail queue. For example, smtp timer 600 will cause the sys- +tem to check for outgoing mail every 10 minutes and attempt to +deliver anything it finds, subject of course to the smtp max- +clients limit. Setting a value of zero disables queue scanning +altogether, note that this is the default! This value is recom- +mended for stand alone IP gateways that never handle mail, since +it saves wear and tear on the floppy disk drive. + +3.55.5. smtp trace [] + +Displays or sets the trace flag in the SMTP client, allowing you +to watch SMTP's conversations as it delivers mail. Zero (the +default) disables tracing. + +3.56. socket [] + +Without an argument, displays all active sockets, giving their +index and type, the address of the associated protocol control +block and the and owner process ID and name. If the index to an +active socket is supplied, the status display for the appropriate +protocol is called. For example, if the socket refers to a TCP +connection, the display will be that given by the tcp status com- +mand with the protocol control block address. + +3.57. start ax25 | discard | echo | ftp | netrom | remote | smtp +| telnet | ttylink + +Start the specified Internet server, allowing remote connection +requests. + +3.58. stop ax25 | discard | echo | ftp | netrom | remote | smtp +| telnet | ttylink + +Stop the specified Internet server, rejecting any further remote +connect requests. Existing connections are allowed to complete +normally. + +3.59. tcp ... + +These commands are used for the Transmission Control Protocol +service. + +3.59.1. tcp irtt [] + +Display or set the initial round trip time estimate, in mil- +liseconds, to be used for new TCP connections until they can +measure and adapt to the actual value. The default is 5000 mil- +liseconds (5 seconds). Increasing this when operating over slow +channels will avoid the flurry of retransmissions that would oth- +erwise occur as the smoothed estimate settles down at the correct +value. Note that this command should be given before servers are + + + + June 7, 1991 + + + + + + - 35 - + + +started in order for it to have effect on incoming connections. + +TCP also caches measured round trip times and mean deviations +(MDEV) for current and recent destinations. Whenever a new TCP +connection is opened, the system first looks in this cache. If +the destination is found, the cached IRTT and MDEV values are +used. If not, the default IRTT value mentioned above is used, +along with a MDEV of 0. This feature is fully automatic, and it +can improve performance greatly when a series of connections are +opened and closed to a given destination (eg. a series of FTP +file transfers or directory listings). + +3.59.2. tcp kick + +If there is unacknowledged data on the send queue of the speci- +fied TCB, this command forces an immediate retransmission. + +3.59.3. tcp mss [] + +Display or set the TCP Maximum Segment Size in bytes that will be +sent on all outgoing TCP connect request (SYN segments). This +tells the remote end the size of the largest segment (packet) it +may send. Changing MSS affects only future connections; existing +connections are unaffected. + +3.59.4. tcp reset + +Deletes the TCP control block at the specified address. + +3.59.5. tcp rtt + +Replaces the automatically computed round trip time and mean +deviation values in the specified TCB with new values in mil- +liseconds. This command is useful to speed up recovery from a +series of lost packets since it provides a manual bypass around +the normal backoff retransmission timing mechanisms. + +3.59.6. tcp status [] + +Without arguments, displays several TCP-level statistics, plus a +summary of all existing TCP connections, including TCB address, +send and receive queue sizes, local and remote sockets, and con- +nection state. If tcb_addr is specified, a more detailed dump of +the specified TCB is generated, including send and receive +sequence numbers and timer information. + +3.59.7. tcp window [] + +Displays or sets the default receive window size in bytes to be +used by TCP when creating new connections. Existing connections +are unaffected. + + + + + + + June 7, 1991 + + + + + + - 36 - + + +3.60. telnet + +Creates a Telnet session to the specified host and enters con- +verse mode. + +3.61. tip + +Creates a tip session that connects to the specified interface in +"dumb terminal" mode. The interface must have already been +attached with the attach command. Any packet traffic (IP +datagrams, etc) routed to the interface while this session exists +will be discarded. To close a tip session, use the reset com- +mand. It will then revert to normal slip, nrs or kiss mode opera- +tion. + +This feature is primarily useful for manually establishing SLIP +connections. At present, only the built-in "com" ports can be +used with this command. + +3.62. trace [ [off | []]] + +Controls packet tracing by the interface drivers. Specific bits +enable tracing of the various interfaces and the amount of infor- +mation produced. Tracing is controlled on a per-interface basis; +without arguments, trace gives a list of all defined interfaces +and their tracing status. Output can be limited to a single +interface by specifying it, and the control flags can be change +by specifying them as well. The flags are given as a hexadecimal +number which is interpreted as follows: + + O - Enable tracing of output packets if 1, disable if 0 + I - Enable tracing of input packets if 1, disable if 0 + T - Controls type of tracing: + 0 - Protocol headers are decoded, but data is not displayed + 1 - Protocol headers are decoded, and data (but not the + headers themselves) are displayed as ASCII characters, + 64 characters/line. Unprintable characters are displayed + as periods. + 2 - Protocol headers are decoded, and the entire packet + (headers AND data) is also displayed in hexadecimal + and ASCII, 16 characters per line. + B - Broadcast filter flag. If set, only packets specifically addressed + to this node will be traced; broadcast packets will not be displayed. + +If tracefile is not specified, tracing will be to the console. + +3.63. udp status + +Displays the status of all UDP receive queues. + +3.64. upload [] + +Opens filename and sends it on the current session as though it +were typed on the terminal. + + + + June 7, 1991 + + + + + + - 37 - + + +3.65. watch + +Displays the current software stopwatch values, with min and max +readings for each. This facility allows a programmer to measure +the execution time of critical sections of code with microsecond +resolution. This command is supported only on the IBM PC, and +the meaning of each stopwatch value depends on where the calls +have been inserted for test purposes; the distribution copy of +net.exe usually has no stopwatch calls. + +3.66. ? + +Same as the help command. + +4. Attach Commands + +This chapter details the attach commands for the various hardware +interface drivers. Not all of these drivers may be configured +into every net.exe binary; a list of the available types may be +obtained by entering the command attach ?. + +Some parameters are accepted by several drivers. They are: + +4.0.1. + +For asynchronous devices (eg. COM ports operating in SLIP or NRS +mode) this parameter specifies the size of the receiver's ring +buffer. It should be large enough to hold incoming data at full +line speed for the longest time that the system may be busy in +MS-DOS or the BIOS doing a slow I/O operation (eg. to a floppy +disk). A kilobyte is usually more than sufficient. + +For synchronous devices (eg. the scc, hs, pc100, hapn and drsi +interfaces operating in HDLC mode), the bufsize parameter speci- +fies the largest packet that may be received on the interface. +This should be set by mutual agreement among stations sharing the +channel. For standard AX.25 with a maximum I-frame data size of +256 bytes, a value of 325 should provide an adequate safety mar- +gin. On higher speed channels (eg. 56kb/s) larger values (eg. 2K +bytes) will provide much better performance and allow full-sized +Ethernet packets to be carried without fragmentation. + +4.0.2. + +The base address of the interface's control registers, in hex. + +4.0.3. + +The interface's hardware interrupt (IRQ) vector, in hex. + +4.0.4. + +The name (an arbitrary character string) to be assigned to this +interface. It is used to refer to the interface in ifconfig and + + + + June 7, 1991 + + + + + + - 38 - + + +route commands and in trace output. + +4.0.5. + +The Maximum Transmission Unit size, in bytes. Datagrams larger +than this limit will be fragmented at the IP layer into smaller +pieces. For AX.25 UI frames, this limits the size of the informa- +tion field. For AX.25 I frames, however, the ax25 paclen parame- +ter is also relevant. If the datagram or fragment is still +larger than paclen, it is also fragmented at the AX.25 level (as +opposed to the IP level) before transmission. (See the ax25 +paclen command for further information). + +4.0.6. + +The speed in bits per second (eg. 2400). + +4.1. attach 3c500 arpa +[] + +Attach a 3Com 3C501 Ethernet interface. qlen is the maximum +allowable transmit queue length. If the ip_addr parameter is not +given, the value associated with a prior ip address command will +be used. + +The use of this driver is not recommended; use the packet driver +interface with the loadable 3C501 packet driver instead. + +4.2. attach asy ax25 | nrs | ppp | slip + [] + +Attach a standard PC "com port" (asynchronous serial port), using +the National 8250 or 16550A chip. Standard values on the IBM PC +and clones for ioaddr and vector are 0x3f8 and 4 for COM1, and +0x2f8 and 3 for COM2. If the port uses a 16550A chip, it will be +detected automatically and the FIFOs enabled. + +4.2.1. ax25 + +Similar to slip, except that an AX.25 header and a KISS TNC con- +trol header are added to the front of the datagram before SLIP +encoding. Either UI (connectionless) or I (connection-oriented) +AX.25 frames can be used; see the mode command for details. + +4.2.2. nrs + +Use the NET/ROM asynchronous framing technique for communication +with a local NET/ROM TNC. + +4.2.3. ppp + +Point-to-Point-Protocol. Encapsulates datagrams in an HDLC-like +frame. This is a new Internet standard for point-to-point com- +munication, compatible with CCITT standards. + + + + June 7, 1991 + + + + + + - 39 - + + +4.2.4. slip + +Serial Line Internet Protocol. Encapsulates IP datagrams +directly in SLIP frames without a link header. This is for opera- +tion on point-to-point lines and is compatible with 4.2BSD UNIX +SLIP. + +4.2.5. + +The optional flags are a string of characters "crv": c enables +RTS/CTS detection, r enables RLSD (Carrier Detect) physical line +sensing, v enables Van Jacobson TCP/IP Header Compression, and is +valid only for SLIP. + +4.3. attach drsi ax25 + + +N6TTO driver for the Digital Radio Systems PCPA 8530 card. Since +there are two channels on the board, two interfaces are attached. +They will be named iface with 'a' and 'b' appended. bufsize is +the receiver buffer size in bytes; it must be larger than the +largest frame to be received. ch_a_speed and ch_b_speed are the +speeds, in bits/sec, for the A and B channels, respectively. + +4.4. attach eagle ax25 + + +WA3CVG/NG6Q driver for the Eagle Computer card (Zilog 8530). + +4.5. attach hapn ax25 +csma | full + +KE3Z driver for the Hamilton Amateur Packet Network adapter +(Intel 8273). The csma | full parameter specifies whether the +port should operate in carrier sense multiple access (CSMA) mode +or in full duplex. + +4.6. attach hs ax25 +

    + +Attach a DRSI PCPA or Eagle Computer interface card using a spe- +cial "high speed" 8530 driver. This driver uses busy-wait loops +to send and receive each byte instead of interrupts, making it +usable with high speed modems (such as the WA4DSY 56kb/s modem) +on slow systems. This does have the side effect of "freezing" +the system whenever the modem transmitter or receiver is active. +This driver can operate only in CSMA mode, and it is recommended +that no other interfaces requiring small interrupt latencies be +attached to the same machine. + +The keyup_delay parameter specifies the transmitter keyup delay +in milliseconds. The p value specifies the transmitter per- +sistence value in the range 1-255; the corresponding slot time is +fixed at one hardware clock tick, about 55 ms on the PC. + + + + June 7, 1991 + + + + + + - 40 - + + +As with the other 8530 drivers, this driver actually attaches two +interfaces, one for each 8530 channel. + +4.7. attach packet + +Attach a separate software "packet driver" meeting the FTP +Software, Inc, Software Packet Driver specification. The driver +must have already been installed as a TSR (e.g., by invocation in +autoexec.bat). Packet drivers in the Ethernet, ARCNET, SLIP, +SLFP, and KISS/AX25 classes are supported. + +intvec is the software interrupt vector used for communication to +the packet driver, and txqlen is the maximum number of packets +that will be allowed on the transmit queue. + +4.8. attach pc100 ax25 + + +Driver for the PACCOMM PC-100 (Zilog 8530) card. Only AX.25 +operation is supported. + +4.9. attach scc init + [p|r] [] [] + +PE1CHL driver to initialize a generic SCC (8530) interface board +prior to actually attaching it. The parameters are as follows: + +4.9.1. + +The number of SCC chips to support. + +4.9.2. + +The base address of the first SCC chip (hex). + +4.9.3. + +The spacing between the SCC chip base addresses. + +4.9.4. + +The offset from a chip's base address to its channel A control +register. + +4.9.5. + +The offset from a chip's base address to its channel B control +register. + +4.9.6. + +The offset from each channel's control register to its data +register. + + + + + June 7, 1991 + + + + + + - 41 - + + +4.9.7. + +The address of the INTACK/Read Vector port. If none, specify 0 to +read from RR3A/RR2B. + +4.9.8. + +The CPU interrupt vector for all connected SCCs. + +4.9.9. + +The clock frequency (PCLK/RTxC) of all SCCs in hertz. Prefix +with 'p' for PCLK, 'r' for RTxC clock (for baudrate gen). + +4.9.10. + +Optional hardware type. The following values are currently sup- +ported: 1 - Eagle card, 2 - PACCOMM PC-100, 4 - PRIMUS-PC card +(DG9BL), 8 - DRSI PCPA card. + +4.9.11. + +Optional extra parameter. At present, this is used only with the +PC-100 and PRIMUS-PC cards to set the modem mode. The value 0x22 +is used with the PC-100 and 0x2 is used with the PRIMUS-PC card. + +The attach scc ... init command must be given before the inter- +faces are actually attached with the following command. + +4.10. attach scc slip | kiss | nrs | ax25 + [] + +Attach an initialized SCC port to the system. The parameters are +as follows: + +4.10.1. + +The SCC channel number to attach, 0 or 1 for the first chip's A +or B port, 2 or 3 for the second chip's A or B port, etc. + +4.10.2. slip | kiss | nrs | ax25 + +The operating mode of the interface. slip, kiss and nrs all +operate the port hardware in asynchronous mode; slip is +Internet-standard serial line IP mode, kiss generates SLIP frames +containing KISS TNC commands and AX.25 packets and nrs uses +NET/ROM local serial link framing conventions to carry NET/ROM +packets. Selecting ax25 mode puts the interface into synchronous +HDLC mode that is suitable for direct connection to a half duplex +radio modem. + +4.10.3. + +The interface speed in bits per second (eg. 1200). Prefix with + + + + June 7, 1991 + + + + + + - 42 - + + +'d' when an external divider is available to generate the TX +clock. When the clock source is PCLK, this can be a /32 divider +between TRxC and RTxC. When the clock is at RTxC, the TX rate +must be supplied at TRxC. This is needed only for full duplex +synchronous operation. When this arg is given as 'ext', the +transmit and receive clocks are external, and the internal baud +rate generator (BRG) and digital phase locked loop (DPLL) are not +used. + +4.11. Attach Examples + +Here are some examples of the attach command: + + +# Attach a 3Com Ethernet controller using the standard 3Com address and +# vector (i.e., as it comes out of the box) to use ARPA-standard encapsulation. +# The receive queue is limited to 5 packets, and outgoing packets larger +# than 1500 bytes will be fragmented +attach 3c500 0x300 3 arpa ec0 5 1500 + +# Attach the PC asynch card normally known as "com1" (the first controller) +# to operate in point-to-point slip mode at 9600 baud, calling it "sl0". +# A 1024 byte receiver ring buffer is allocated. Outgoing packets larger +# than 256 bytes are fragmented. +attach asy 0x3f8 4 slip sl0 1024 256 9600 + +# Attach the secondary PC asynch card ("com2") to operate in AX.25 mode +# with an MTU of 576 bytes at 9600 baud with a KISS TNC, calling it "ax0". +# By default, IP datagrams are sent in UI frames +attach asy 0x2f8 3 ax25 ax0 1024 576 9600 + +# Attach the packet driver loaded at interrupt 0x7e +# The packet driver is for an Ethernet interface +attach packet 0x7e ethernet 8 1500 + + + +5. FTP Subcommands + +During converse mode with an FTP server, everything typed on the +console is first examined to see if it is a locally-known com- +mand. If not, the line is passed intact to the remote server on +the control channel. If it is one of the following commands, how- +ever, it is executed locally. (Note that this generally involves +other commands being sent to the remote server on the control +channel.) + +5.1. dir [ | []] + +Without arguments, dir requests that a full directory listing of +the remote server's current directory be sent to the terminal. +If one argument is given, this is passed along in the LIST com- +mand; this can be a specific file or subdirectory that is mean- +ingful to the remote file system. If two arguments are given, the + + + + June 7, 1991 + + + + + + - 43 - + + +second is taken as the local file into which the directory list- +ing should be put (instead of being sent to the console). The +PORT command is used before the LIST command is sent. + +5.2. get [] + +Asks the remote server to send the file specified in the first +argument. The second argument, if given, will be the name of the +file on the local machine; otherwise it will have the same name +as on the remote machine. The PORT and RETR commands are sent on +the control channel. + +5.3. hash + +A synonym for the verbose 3 command. + +5.4. ls [ | []] + +ls is identical to the dir command except that the "NLST" command +is sent to the server instead of the "LIST" command. This results +in an abbreviated directory listing, i.e., one showing only the +file names themselves without any other information. + +5.5. mget [ ...] + +Fetch a collection of files from the server. File names may +include wild card characters; they will be interpreted and +expanded into a list of files by the remote system using the NLST +command. The files will have the same name on the local system +that they had on the server. + +5.6. mkdir + +Creates a directory on the remote machine. + +5.7. mput [ ...] + +Send a collection of files to the server. File names may include +wild card characters; they will be expanded locally into a list +of files to be sent. The files will have the same name on the +server as on the local system. + +5.8. put [] + +Asks the remote server to accept data, creating the file named in +the first argument. The second argument, if given, will be the +name of the file on the remote machine; otherwise it will have +the same name as on the local machine. The PORT and STOR com- +mands are sent on the control channel. + +5.9. rmdir + +Deletes a directory on the remote machine. + + + + + June 7, 1991 + + + + + + - 44 - + + +5.10. type [a | i | l ] + +Tells both the local client and remote server the type of file +that is to be transferred. The default is 'a', which means ASCII +(i.e., a text file). Type 'i' means image, i.e., binary. In +ASCII mode, files are sent as varying length lines of text in +ASCII separated by cr/lf sequences; in IMAGE mode, files are sent +exactly as they appear in the file system. ASCII mode should be +used whenever transferring text between dissimilar systems (eg. +UNIX and MS-DOS) because of their different end-of-line and/or +end-of-file conventions. When exchanging text files between +machines of the same type, either mode will work but IMAGE mode +is usually faster. Naturally, when exchanging raw binary files +(executables, compressed archives, etc) IMAGE mode must be used. +Type 'l' (logical byte size) is used when exchanging binary files +with remote servers having oddball word sizes (eg. DECSYSTEM-10s +and 20s). Locally it works exactly like IMAGE, except that it +notifies the remote system how large the byte size is. bytesize +is typically 8. The type command sets the local transfer mode +and generates the TYPE command on the control channel. + +5.11. verbose [0 | 1 | 2 | 3] + +Set or display the level of message output in file transfers. +Verbose 0 gives the least output, and verbose 3 the most, as fol- +lows: + +0 - Display error messages only. +1 - Display error messages plus a one-line summary after each transfer + giving the name of the file, its size, and the transfer time and rate. +2 - Display error and summary messages plus the progress messages generated + by the remote FTP server. (This setting is the default.) +3 - Display all messages. In addition, a "hash mark" (#) is displayed for + every 1,000 bytes sent or received. + +If a command is sent to the remote server because it is not +recognized locally, the response is always displayed, regardless +of the setting of verbose. This is necessary for commands like +pwd (display working directory), which would otherwise produce no +message at all if verbose were set to 0 or 1. + +6. Dialer Subcommands + +Each dialer command may (should) have a different dialer file. +The file resides in the configuration directory, as specified in +the Installation section (see chapter 1). A typical dialer file +might be: + + + + + + + + + + + June 7, 1991 + + + + + + - 45 - + + + + # Set the speed, and toggle DTR to ensure modem is in command mode. + control down + wait 3000 + speed 2400 + control up + wait 3000 + # Dial, and wait for connection + send "atdt555-12127" + wait 45000 "CONNECT " speed + wait 2000 + # PAD specific initialization + send "7" + wait 15000 "Terminal =" + send "ppp7" + wait 10000 "70 + + +6.0.1. control down | up + +Control asy interface. The down option drops DTR and RTS. The +up option asserts DTR and RTS. + +6.0.2. send "string" [] + +This dialer command will write the specified string to the inter- +face. The string quote marks are required, and the string may +not contain embedded control characters. However, the standard C +string escape sequences are recognized (\0 should not be used). + +There may be a wait of between each character. +This is used when the dialer cannot process a string at modem +speeds. + +6.0.3. speed [ 9600 | 4800 | 2400 | 1200 | 300 ] + +This dialer command will set the speed of the interface to one of +the available speeds. If the speed is missing, the speed will be +displayed in the dialer session window. + +6.0.4. wait [ "test string" ] [ speed ] + +If only the time is specified, the dialer pauses for the desired +number of milliseconds. + +Otherwise, the dialer reads until the test string is detected on +the interface. If the string is not detected within the desired +time, the autodialer will reset. The string quote marks are +required, and the string may not contain embedded control charac- +ters. However, the standard C string escape sequences are recog- +nized (\0 should not be used). + +Finally, if the speed parameter is specified, the dialer will +continue to read characters until a non-digit is detected. The + + + + June 7, 1991 + + + + + + - 46 - + + +string read is converted to an integer, and used to set the +interface speed. If the trailing non-digit is not detected +within the desired time, or the integer value is not a valid +speed, the autodialer will reset. The speed feature is useful +for reading back the CONNECT message generated by Hayes- +compatible modems. + +7. The /ftpusers File + +Since MS-DOS is a single-user operating system (some might say it +is a glorified bootstrap loader), it provides no access control; +all files can be read, written or deleted by the local user. It +is usually undesirable to give such open access to a system to +remote network users. Net.exe therefore provides its own access +control mechanisms. + +The file /ftpusers controls remote FTP and mailbox access. The +FTP default is no access; if this file does not exist, the FTP +server will be unusable. A remote user must first "log in" to +the system with the USER and PASS commands, giving a valid name +and password listed in /ftpusers, before he or she can transfer +files. + +Each entry in /ftpusers consists of a single line of the form + +username password /path permissions + + +There must be exactly four fields, and there must be exactly one +space between each field. Comments may be added after the last +field. Comment lines begin with '#' in column one. + +username is the user's login name. + +password is the required password. Note that this is in plain +text; therefore it is not a good idea to give general read per- +mission to the root directory. A password of '*' (a single +asterisk) means that any password is acceptable. + +/path is the allowable prefix on accessible files. Before any +file or directory operation, the current directory and the user- +specified file name are joined to form an absolute path name in +"canonical" form (i.e., a full path name starting at the root, +with "./" and "../" references, as well as redundant /'s, recog- +nized and removed). The result MUST begin with the allowable path +prefix; if not, the operation is denied. This field must always +begin with a "/", i.e., at the root directory. + +permissions is a decimal number granting permission for read, +create and write operations. If the low order bit (0x1) is set, +the user is allowed to read a file subject to the path name pre- +fix restriction. If the next bit (0x2) is set, the user is +allowed to create a new file if it does not overwrite an existing +file. If the third bit (0x4) is set, the user is allowed to + + + + June 7, 1991 + + + + + + - 47 - + + +write a file even if it overwrites an existing file, and in addi- +tion he may delete files. Again, all operations are allowed sub- +ject to the path name prefix restrictions. Permissions may be +combined by adding bits, for example, 0x3 (= 0x2 + 0x1) means +that the user is given read and create permission, but not +overwrite/delete permission. + +For example, suppose /ftpusers on machine pc.ka9q.ampr.org con- +tains the line + +friendly test /testdir 7 + + +A session using this account would look like this: + +net> ftp pc.ka9q.ampr.org +Resolving pc.ka9q.ampr.org... Trying 128.96.160.1... +FTP session 1 connected to pc.ka9q.ampr.org +220 pc.ka9q.ampr.org FTP version 900418 ready at Mon May 7 16:27:18 1990 +Enter user name: friendly +331 Enter PASS command +Password: test [not echoed] +230 Logged in +ftp> + + +The user now has read, write, overwrite and delete privileges for +any file under /testdir; he may not access any other files. + +Here are some more sample entries in /ftpusers: + +karn foobar / 7 # User "karn" with password "foobar" may read, + # write, overwrite and delete any file on the + # system. + +guest bletch /g/bogus 3 # User "guest" with password "bletch" may read + # any file under /g/bogus and its subdirectories, + # and may create a new file as long as it does + # not overwrite an existing file. He may NOT + # delete any files. + +anonymous * /public 1 # User "anonymous" (any password) may read files + # under /public and its subdirectories; he may + # not create, overwrite or delete any files. + + +This last entry is the standard convention for keeping a reposi- +tory of public files; in particular, the username "anonymous" is +an established ARPA convention. + +8. The domain.txt File + +Net.exe translates domain names (eg. "pc.ka9q.ampr.org") to IP +addresses (eg. 128.96.160.3) through the use of an Internet + + + + June 7, 1991 + + + + + + - 48 - + + +Domain Name resolver and a local "cache" file, domain.txt. When- +ever the user specifies a domain name, the local cache is +searched for the desired entry. If it is present, it is used; if +not, and if domain name server(s) have been configured, a query +is sent over the network to the current server. If the server +responds, the answer is added to the domain.txt file for future +use. If the server does not respond, any additional servers on +the list are tried in a round-robin fashion until one responds, +or the retry limit is reached (see the domain retry command). If +domain.txt does not contain the desired entry and there are no +configured domain name servers, then the request immediately +fails. + +If a domain name server is available, and if all references to +host-ids in your /autoexec.net file are in IP address format, +then it is possible to start with a completely empty domain.txt +file and have net.exe build it for you. However, you may wish to +add your own entries to domain.txt, either because you prefer to +use symbolic domain names in your /autoexec.net file or you don't +have access to a domain server and you need to create entries for +all of the hosts you may wish to access. + +Each entry takes one line, and the fields are separated by any +combination of tabs or spaces. For example: + +pc.ka9q.ampr.org. IN A 128.96.160.3 + +IN is the class of the record. It means Internet, and it will be +found in all entries. A is the type of the record, and it means +that this is an address record. Domain name pc.ka9q.ampr.org +therefore has Internet address 128.96.160.3. + +Another possible entry is the CNAME (Canonical Name) record. For +example: + +ka9q.ampr.org. IN CNAME pc.ka9q.ampr.org. + +This says that domain name "ka9q.ampr.org" is actually an alias +for the system with (primary, or canonical) domain name +"pc.ka9q.ampr.org." When a domain name having a CNAME record is +given to net.exe, the system automatically follows the reference +to the canonical name and returns the IP address associated with +that entry. + +Entries added automatically by net.exe will have an additional +field between the domain name and the class (IN) field. For +example: + +pc.ka9q.ampr.org. 3600 IN A 128.96.160.3 + +This is the time-to-live value, in seconds, associated with the +record received from the server. Clients (such as net.exe) cach- +ing these records are supposed to delete them after the time-to- +live interval has expired, allowing for the possibility that the + + + + June 7, 1991 + + + + + + - 49 - + + +information in the record may become out of date. + +This implementation of net.exe will decrement the TTL to zero, +but will not delete the record unless the "clean" flag is on (see +the domain cache clean command). When a remote server is not +available, the old entry will be used. + +When the TTL value is missing (as in the examples above), the +record will never expire, and must be managed by hand. Since +domain.txt is a plain text file, it may be easily edited by the +user to add, change or delete records. + +Additional types of records include MX (mail exchanger), NS (name +server) and SOA (start of authority) may appear in domain.txt +from remote server responses. Only MX is currently used by +net.exe (in the mailbox). The others are retained for future +development (such as the incorporation of a smarter resolver or a +full-blown domain name server). + +9. Setting Bufsize, Paclen, Maxframe, MTU, MSS and Window + +Many net.exe users are confused by these parameters and do not +know how to set them properly. This chapter will first review +these parameters and then discuss how to choose values for them. +Special emphasis is given to avoiding interoperability problems +that may appear when communicating with non-net.exe implementa- +tions of AX.25. + +9.1. Hardware Parameters + + +9.1.1. Bufsize + +This parameter is required by most of net.exe's built-in HDLC +drivers (eg. those for the DRSI PCPA and the Paccomm PC-100). It +specifies the size of the buffer to be allocated for each +receiver port. HDLC frames larger than this value cannot be +received. + +There is no default bufsize; it must be specified in the attach +command for the interface. + +9.2. AX25 Parameters + +9.2.1. Paclen + +Paclen limits the size of the data field in an AX.25 I-frame. +This value does not include the AX.25 protocol header (source, +destination and digipeater addresses). + +Since unconnected-mode (datagram) AX.25 uses UI frames, this +parameter has no effect in unconnected mode. + +The default value of paclen is 256 bytes. + + + + June 7, 1991 + + + + + + - 50 - + + +9.2.2. Maxframe + +This parameter controls the number of I-frames that net.exe may +send on an AX.25 connection before it must stop and wait for an +acknowledgement. Since the AX.25/LAPB sequence number field is 3 +bits wide, this number cannot be larger than 7. + +Since unconnected-mode (datagram) AX.25 uses UI frames that do +not have sequence numbers, this parameter does not apply to +unconnected mode. + +The default value of maxframe in net.exe is 1. + +9.3. IP and TCP Parameters + +9.3.1. MTU + +The MTU (Maximum Transmission Unit) is an interface parameter +that limits the size of the largest IP datagram that it may han- +dle. IP datagrams routed to an interface that are larger than +its MTU are each split into two or more fragments. Each fragment +has its own IP header and is handled by the network as if it were +a distinct IP datagram, but when it arrives at the destination it +is held by the IP layer until all of the other fragments belong- +ing to the original datagram have arrived. Then they are reassem- +bled back into the complete, original IP datagram. The minimum +acceptable interface MTU is 28 bytes: 20 bytes for the IP (frag- +ment) header, plus 8 bytes of data. + +There is no default MTU in net.exe; it must be explicitly speci- +fied for each interface as part of the attach command. + +9.3.2. MSS + +MSS (Maximum Segment Size) is a TCP-level parameter that limits +the amount of data that the remote TCP will send in a single TCP +packet. MSS values are exchanged in the SYN (connection request) +packets that open a TCP connection. In the net.exe implementation +of TCP, the MSS actually used by TCP is further reduced in order +to avoid fragmentation at the local IP interface. That is, the +local TCP asks IP for the MTU of the interface that will be used +to reach the destination. It then subtracts 40 from the MTU value +to allow for the overhead of the TCP and IP headers. If the +result is less than the MSS received from the remote TCP, it is +used instead. + +The default value of MSS is 512 bytes. + +9.3.3. Window + +This is a TCP-level parameter that controls how much data the +local TCP will allow the remote TCP to send before it must stop +and wait for an acknowledgement. The actual window value used by +TCP when deciding how much more data to send is referred to as + + + + June 7, 1991 + + + + + + - 51 - + + +the effective window. This is the smaller of two values: the +window advertised by the remote TCP minus the unacknowledged data +in flight, and the congestion window, an automatically computed +time-varying estimate of how much data the network can handle. + +The default value of Window is 2048 bytes. + +9.4. Discussion + + +9.4.1. IP Fragmentation vs AX.25 Segmentation + +IP-level fragmentation often makes it possible to interconnect +two dissimilar networks, but it is best avoided whenever possi- +ble. One reason is that when a single IP fragment is lost, all +other fragments belonging to the same datagram are effectively +also lost and the entire datagram must be retransmitted by the +source. Even without loss, fragments require the allocation of +temporary buffer memory at the destination, and it is never easy +to decide how long to wait for missing fragments before giving up +and discarding those that have already arrived. A reassembly +timer controls this process. In net.exe it is (re)initialized +with the ip rtimer parameter (default 30 seconds) whenever pro- +gress is made in reassembling a datagram (i.e., a new fragment is +received). It is not necessary that all of the fragments belong- +ing to a datagram arrive within a single timeout interval, only +that the interval between fragments be less than the timeout. + +Most subnetworks that carry IP have MTUs of 576 bytes or more, so +interconnecting them with subnetworks having smaller values can +result in considerable fragmentation. For this reason, IP imple- +mentors working with links or subnets having unusually small +packet size limits are encouraged to use transparent fragmenta- +tion, that is, to devise schemes to break up large IP datagrams +into a sequence of link or subnet frames that are immediately +reassembled on the other end of the link or subnet into the ori- +ginal, whole IP datagram without the use of IP-level fragmenta- +tion. Such a scheme is provided in AX.25 Version 2.1. It can +break a large IP or NET/ROM datagram into a series of paclen- +sized AX.25 segments (not to be confused with TCP segments), one +per AX.25 I-frame, for transmission and reassemble them into a +single datagram at the other end of the link before handing it up +to the IP or NET/ROM module. Unfortunately, the segmentation +procedure is a new feature in AX.25 and is not yet widely imple- +mented; in fact, net.exe is so far the only known implementation. +This creates some interoperability problems between net.exe and +non-net.exe nodes, in particular, standard NET/ROM nodes being +used to carry IP datagrams. This problem is discussed further in +the section on setting the MTU. + +9.4.2. Setting paclen and bufsize + +The more data you put into an AX.25 I frame, the smaller the +AX.25 headers are in relation to the total frame size. In other + + + + June 7, 1991 + + + + + + - 52 - + + +words, by increasing paclen, you lower the AX.25 protocol over- +head. Also, large data packets reduce the overhead of keying up a +transmitter, and this can be an important factor with higher +speed modems. On the other hand, large frames make bigger targets +for noise and interference. Each link has an optimum value of +paclen that is best discovered by experiment. + +Another thing to remember when setting paclen is that the AX.25 +version 2.0 specification limits it to 256 bytes. Although +net.exe can handle much larger values, some other AX.25 implemen- +tations (including digipeaters) cannot and this may cause intero- +perability problems. Even net.exe may have trouble with certain +KISS TNCs because of fixed-size buffers. The original KISS TNC +code for the TNC-2 by K3MC can handle frames limited in size only +by the RAM in the TNC, but some other KISS TNCs cannot. + +Net.exe's built-in HDLC drivers (SCC, PC-100, DRSI, etc) allocate +receive buffers according to the maximum expected frame size, so +it is important that these devices be configured with the correct +bufsize. To do this, you must know the size of the largest possi- +ble frame that can be received. The paclen parameter controls +only the size of the data field in an I-frame and not the total +size of the frame as it appears on the air. The AX.25 spec allows +up to 8 digipeaters, so the largest possible frame is (paclen + +72) bytes. So you should make bufsize at least this large. + +Another important consideration is that the more recent versions +of NOS improve interrupt response by maintaining a special pool +of buffers for use by the receive routines. These buffers are +configured by the memory nibufs and memory ibufsize commands. +ibufsize defaults to 2048 bytes. The setting of ibufsize limits +bufsize; in fact, attempting to set a larger value may cause the +driver not to work at all. This situation can be detected by run- +ning the memory status command and looking for a non-zero count +of Ibuffail events, although these events can also occur occa- +sionally during normal operation. + +One of the drawbacks of AX.25 that there is no way for one sta- +tion to tell another how large a packet it is willing to accept. +This requires the stations sharing a channel to agree beforehand +on a maximum packet size. TCP is different, as we shall see. + +9.4.3. Setting Maxframe + +For best performance on a half-duplex radio channel, maxframe +should always be set to 1. The reasons are explained in the paper +Link Level Protocols Revisited by Brian Lloyd and Phil Karn, +which appeared in the proceedings of the ARRL 5th Computer Net- +working Conference in 1986. + +9.4.4. Setting MTU + +TCP/IP header overhead considerations similar to those of the +AX.25 layer when setting paclen apply when choosing an MTU. + + + + June 7, 1991 + + + + + + - 53 - + + +However, certain subnetwork types supported by net.exe have +well-established MTUs, and these should always be used unless you +know what you're doing: 1500 bytes for Ethernet, and 508 bytes +for ARCNET. The MTU for PPP is automatically negotiated, and +defaults to 1500. Other subnet types, including SLIP and AX.25, +are not as well standardized. + +SLIP has no official MTU, but the most common implementation (for +BSD UNIX) uses an MTU of 1006 bytes. Although net.exe has no +hard wired limit on the size of a received SLIP frame, this is +not true for other systems. Interoperability problems may there- +fore result if larger MTUs are used in net.exe. + +Choosing an MTU for an AX.25 interface is more complex. When the +interface operates in datagram (UI-frame) mode, the paclen param- +eter does not apply. The MTU effectively becomes the paclen of +the link. However, as mentioned earlier, large packets sent on +AX.25 connections are automatically segmented into I-frames no +larger than paclen bytes. Unfortunately, as also mentioned ear- +lier, net.exe is so far the only known implementation of the new +AX.25 segmentation procedure. This is fine as long as all of the +NET/ROM nodes along a path are running net.exe, but since the +main reason net.exe supports NET/ROM is to allow use of existing +NET/ROM networks, this is unlikely. + +So it is usually important to avoid AX.25 segmentation when run- +ning IP over NET/ROM. The way to do this is to make sure that +packets larger than paclen are never handed to AX.25. A NET/ROM +transport header is 5 bytes long and a NET/ROM network header +takes 15 bytes, so 20 bytes must be added to the size of an IP +datagram when figuring the size of the AX.25 I-frame data field. +If paclen is 256, this leaves 236 bytes for the IP datagram. This +is the default MTU of the netrom pseudo-interface, so as long as +paclen is at least 256 bytes, AX.25 segmentation can't happen. +But if smaller values of paclen are used, the netrom MTU must +also be reduced with the ifconfig command. + +On the other hand, if you're running IP directly on top of AX.25, +chances are all of the nodes are running net.exe and support +AX.25 segmentation. In this case there is no reason not to use a +larger MTU and let AX.25 segmentation do its thing. If you choose +an MTU on the order of 1000-1500 bytes, you can largely avoid +IP-level fragmentation and reduce TCP/IP-level header overhead on +file transfers to a very low level. And you are still free to +pick whatever paclen value is appropriate for the link. + +9.4.5. Setting MSS + +The setting of this TCP-level parameter is somewhat less critical +than the IP and AX.25 level parameters already discussed, mainly +because it is automatically lowered according to the MTU of the +local interface when a connection is created. Although this is, +strictly speaking, a protocol layering violation (TCP is not sup- +posed to have any knowledge of the workings of lower layers) this + + + + June 7, 1991 + + + + + + - 54 - + + +technique does work well in practice. However, it can be fooled; +for example, if a routing change occurs after the connection has +been opened and the new local interface has a smaller MTU than +the previous one, IP fragmentation may occur in the local system. + +The only drawback to setting a large MSS is that it might cause +avoidable fragmentation at some other point within the network +path if it includes a "bottleneck" subnet with an MTU smaller +than that of the local interface. (Unfortunately, there is +presently no way to know when this is the case. There is ongoing +work within the Internet Engineering Task Force on a "MTU +Discovery" procedure to determine the largest datagram that may +be sent over a given path without fragmentation, but it is not +yet complete.) Also, since the MSS you specify is sent to the +remote system, and not all other TCPs do the MSS-lowering pro- +cedure yet, this might cause the remote system to generate IP +fragments unnecessarily. + +On the other hand, a too-small MSS can result in a considerable +performance loss, especially when operating over fast LANs and +networks that can handle larger packets. So the best value for +MSS is probably 40 less than the largest MTU on your system, with +the 40-byte margin allowing for the TCP and IP headers. For exam- +ple, if you have a SLIP interface with a 1006 byte MTU and an +Ethernet interface with a 1500 byte MTU, set MSS to 1460 bytes. +This allows you to receive maximum-sized Ethernet packets, assum- +ing the path to your system does not have any bottleneck subnets +with smaller MTUs. + +9.4.6. Setting Window + +A sliding window protocol like TCP cannot transfer more than one +window's worth of data per round trip time interval. So this +TCP-level parameter controls the ability of the remote TCP to +keep a long "pipe" full. That is, when operating over a path with +many hops, offering a large TCP window will help keep all those +hops busy when you're receiving data. On the other hand, offering +too large a window can congest the network if it cannot buffer +all that data. Fortunately, new algorithms for dynamic control- +ling the effective TCP flow control window have been developed +over the past few years and are now widely deployed. Net.exe +includes them, and you can watch them in action with the tcp +status or socket commands. Look at the cwind +(congestion window) value. + +In most cases it is safe to set the TCP window to a small integer +multiple of the MSS (eg. 4 times), or larger if necessary to +fully utilize a high bandwidth*delay product path. One thing to +keep in mind, however, is that advertising a certain TCP window +value declares that the system has that much buffer space avail- +able for incoming data. Net.exe does not actually preallocate +this space; it keeps it in a common pool and may well "overbook" +it, exploiting the fact that many TCP connections are idle for +long periods and gambling that most applications will read + + + + June 7, 1991 + + + + + + - 55 - + + +incoming data from an active connection as soon as it arrives, +thereby quickly freeing the buffer memory. However, it is possi- +ble to run net.exe out of memory if excessive TCP window sizes +are advertised and either the applications go to sleep indefin- +itely (eg. suspended Telnet sessions) or a lot of out-of-sequence +data arrives. It is wise to keep an eye on the amount of avail- +able memory and to decrease the TCP window size (or limit the +number of simultaneous connections) if it gets too low. + +Depending on the channel access method and link level protocol, +the use of a window setting that exceeds the MSS may cause an +increase in channel collisions. In particular, collisions between +data packets and returning acknowledgements during a bulk file +transfer may become common. Although this is, strictly speaking, +not TCP's fault, it is possible to work around the problem at the +TCP level by decreasing the window so that the protocol operates +in stop-and-wait mode. This is done by making the window value +equal to the MSS. + +9.5. Summary + +In most cases, the default values provided by net.exe for each of +these parameters will work correctly and give reasonable perfor- +mance. Only in special circumstances such as operation over a +very poor link or experimentation with high speed modems should +it be necessary to change them. + +10. Mail Forwarding + +10.1. Intended audience + +This section is intended for the NOS system operator desiring to +enable the forwarding of mail to other systems. They are NOT +intended as a user guide for the mail capabilities of NOS. + +10.2. Background + +This section of the NOS docs deals with the intricacies of mail +forwarding. You should read and understand this documentation +thoroughly before attempting to forward mail through your NOS box +to the AX.25 BBS world, otherwise you might grossly misconfigure +your system and be the unhappy recipient of flames from BBS +sysops. + +This section does NOT deal with the minutae of the mailbox and +its various commands; it assumes that you understand concepts +such as user areas (both public and private) and how to list and +send mail. If you need help with these, please look elsewhere in +the NOS docs. + +Apart from the usual domain.txt and other files necessary for +ordinary functionality of NOS, three files are important in the +mail forwarding process. These are: /spool/forward.bbs, /alias +and /spool/rewrite. The contents of these will now be addressed + + + + June 7, 1991 + + + + + + - 56 - + + +individually. + +10.3. /spool/forward.bbs + +This file describes the actions taken by NOS in forwarding to +AX.25 BBSes. The file contains a series of forwarding records, +each record being separated by a line containing two or more +hyphens. The template for a forwarding record is: + +BBS callsign +Connection route +Connection commands +List of areas to be forwarded +------------ + +10.4. BBS callsign + +This is simply the ordinary call of the remote BBS. A typical +(but not random!) entry might be simply the line: + +sm0rgv + +The callsign may be followed, on the same line, by a comma +separated list of valid intervals when forwarding is to take +place. Each valid interval is a four digit number: the first two +digits are the beginning hour of the valid interval, the last two +digits are the final hour of the valid interval. For example, if +the first line of a forwarding record looks like: + +sm0rgv 0006,1414 + +then forwarding to sm0rgv will take place only during hours num- +bered 00, 01, 02, 03, 04, 05, 06 and 14. Ticks of the mbox timer +outside of these times will not cause mail to be forwarded to +sm0rgv. The default interval for forwarding is 0023. + +10.5. Connection route + +This is the method by which communication is to be established +with the remote BBS. The first token on the line is the type of +protocol to be used. This is one of ax25, netrom or tcp. Follow- +ing this is whatever further information the chosen protocol +requires to make the connection. An example connection route for +a simple ax25 connection on interface ax0 is: + +ax25 ax0 g3dlh + + +10.6. Connection commands + +Connection commands may, optionally, follow the connection route. +These take the form of a full stop (period), followed by the com- +mand which will be transmitted once the connection defined in the +first line of the connection route is established. + + + + June 7, 1991 + + + + + + - 57 - + + +For example, suppose that we wish to establish a netrom connec- +tion with sm0rgv-2, through the netrom node #sth67. Then the con- +nection route and connection command portion of the record would +look like: + +netrom #sth67 + .c sm0rgv-2 [ Please note that the full stop would be placed at + the beginning of the line; I have placed it here + indented by one column simply so that gateways + which handle this message do not complain at + having a line beginning with a full stop; this + convention is followed throughout this documentation] + +If the station is reached through digipeating, then the digi- +peater callsigns should be in the ax25 route to the destination +callsign. That is, if you wish to forward traffic to w0ljf, +using k2na as a digipeater, then you should have the line: + +ax25 route add w0ljf k2na + +in your autoexec file. + + +10.7. List of areas to be forwarded + +This is a list, one per line, of entries in the /spool/mail +directory which will be forwarded to the remote BBS. An entry of +the form: + +callsign + +will cause the file /spool/mail/callsign.txt to be scanned for +unread messages. Any such messages are sent to the remote BBS and +deleted from the file. + +One can also forward user areas using this mechanism. To do this, +simply place a line containing the name of the area in the +record. So, to forward amsat bulletins to the BBS, one would have +a line: + +amsat + +This will search the /spool/mail/amsat.txt file; any messages +contained therein which have not been forwarded to the BBS in +question will be forwarded. They will NOT be deleted. The deter- +mining factor as to whether or not entries are deleted is that if +the filename is present in the /spool/areas file, then there is +NO deletion, otherwise there is. + +Please note that ONLY FILES IN /spool/mail are checked. In par- +ticular, the outbound SMTP mail queue is NOT checked. + + + + + + + June 7, 1991 + + + + + + - 58 - + + +10.8. Changing the recipient address + +Normally, NOS uses the information in the To: header line to +determine the parameters used by the "S" command during BBS for- +warding. As the To: header is unchanged by all /alias and +/spool/rewrite machinations, the mail will be sent to the BBS +addressed precisely as the originator of the message typed it. +Occasionally, one might want to change this behaviour. In this +case, a line of the form: + +area new_address + +in the list of areas to be forwarded will replace the originally +typed destination with the string new_address instead. + +11. /alias + +The alias file is used to map LOCAL names to other names, which +may be either local or remote; additionally, from a single input +message, the alias file permits one to produce multiple output +messages. Thus, typical uses for the /alias file are: converting +one local name to another, converting a local name to a remote +name, and exploding a mail message so that it is passed on to +several recipients. + +The format of a record in the alias file is very simple: + +aliasname recipient1 recipient2 recipient3 + or recipient4 ... recipientN + + +There is no separation between records in the /alias file other +than a newline. + +The aliasname is a local username; that is, it does not contain +an "@" symbol. When the alias file is processed, if the destina- +tion of the message matches precisely the aliasname, then the +mail is redirected to ALL of the alieased recipients. + +Scanning of the /alias file is performed by the SMTP server. The +SMTP timer (which controls the SMTP client) is kicked whenever +the mailbox or SMTP server queues something for delivery by SMTP. +Mail transport within a single NOS system is performed through +the SMTP client/server mechanism. The result of these facts is +that as soon as a piece of mail is entered to the mailbox, the +SMTP client is kicked and attempts to deliver the mail (which has +already been scanned by the rewrite mechanism - see below). If +the mail is local to the NOS system (i.e. no "@" sign in the +address), then the /alias file will be scanned and the name map- +pings take place. + +A few lines in the /alias file might look something like: + +bdale bdale@n3eua + + + + June 7, 1991 + + + + + + - 59 - + + +local fred@k0yum bdale@n3eua bill@ai0c.co.usa.na + n5op@n5op jim@k0jtz n0esg@n0esg +g4bki g4bki@gb7bil._2712.gbr.eu + + +The system must know how to deliver traffic to each of the indi- +vidual addresses in the style in which they are entered in the +/alias file. If the system does not know how to deliver one of +the new addresses, then it will send it to the SMTP gateway sta- +tion defined by the 'smtp gateway' command. + +Note that it is reasonable, and sometimes desireable, to have +alias records of the form: + +area area dest1 dest2 ... + +As the /alias file is scanned only once (see below), this does +not result in an infinite recursion. + +12. /spool/rewrite + + +The rewrite file is used to perform a one-to-one mapping between +destination addresses as received by NOS and destination +addresses as actually used by NOS. Each record within the rewrite +file comprises a single line, containing either two or three +entries separated by spaces. The first field is the template +field; if a destination address matches the template, it is +replaced by the second field. The third field, which is optional, +is the single letter "r", which, if present, tells NOS to rescan +the rewrite file, using the new destination address to attempt to +match against the templates. + +A template may contain asterisks. These stand for a match of any +number of characters (including zero). In the second field, the +character "$", followed by a single digit in the range 1 to 9, +represents the string that matched the respective asterisk in the +template. By way of example, suppose that there is a line in the +rewrite file which looks like: + +*@* $1%$2@g1emm.ampr.org + +Then, any traffic reaching the system through the mailbox or the +SMTP server, but which is supposed to go to a remote system, will +be redirected to go through g1emm.ampr.org. Suppose that a user +logs on, and sends a message to n0gbe@nq0i. Then the rewrite file +attempts to match "n0gbe@nq0i" against the entry *@*. It matches, +and assignes $1 the value n0gbe, and $2 the value nq0i. The mail +file as written to the disk will no longer be to n0gbe@nq0i, but, +rather, to n0gbe%nq0i@g1emm.ampr.org. [The nomenclature +station1%station2@station3 means the final destination is +station1@station2, and this traffic is to be routed through the +gateway station3.] + + + + + June 7, 1991 + + + + + + - 60 - + + +As soon as a template match is found, the conversion is performed +and scanning is stopped, unless the third "r" field is present, +in which case scanning restarts from the top of the file. + +N.B. It is a good idea to have a line of the form: + +*@*.ampr.org $1@$2.ampr.org + +at the beginning of your rewrite file. This will cause all +amprnet traffic to be caught early in the rewrite scan, and no +further scanning (and, hence, no unexpected substitutions) will +take place. + +12.1. Scanning procedure + +The two files which are used to determine the disposition of +traffic are scanned under slightly different circumstances. Note +that neither the /alias nor the /spool/rewrite scan makes any +actual changes to the contents of the traffic. In particular, the +To: field remains exactly as it was first entered into the sys- +tem. + +There are four possible entry routes for traffic into the system: +SMTP, through the mailbox by a user, through the mailbox by a +BBS, and via an external program (like BM) or creation of the +files manually. NOS determines if a piece of traffic was entered +into the system by a BBS by looking for a BBS system ID (like the +"[NET-H$]" block issued by NOS) on the incoming connection prior +to messages being uploaded. + +12.2. Traffic received by SMTP server + +1. The rewrite file is scanned and any changes applied (unless +the traffic was recieved through the local mailbox; in that case, +this step does not occur); +2. If the traffic appears to be local then the alias file is +scanned and any changes or explosions applied. +3. Any copies local to the system are delivered; copies for +remote delivery are placed in the SMTP queue. + +12.3. Traffic received by mailbox from user + +1. The rewrite file is scanned and any changes applied; +2. The traffic is passed to the SMTP client. + +12.4. Traffic received by mailbox from BBS + +1. The rewrite file is scanned and any changes applied; +2. The traffic is passed to the SMTP client. + +12.5. Traffic entered by external mechanism + +1. No scanning occurs; +2. The traffic is passed to the SMTP client. + + + + June 7, 1991 + + + + + + - 61 - + + +12.6. Headers + +Appropriate RFC-822 headers are added to all incoming traffic. +Traffic entering through the mailbox recieves a full complement +of RFC-822 headers; traffic coming through the SMTP server has +only a "Received:" header applied. On forwarding to a BBS, if an +item of traffic contains BBS R: headers, the RFC-822 header is +converted to an appropriate R: line at the time that NOS forwards +the message. (This change only occurs for BBS forwarding; for- +warding by SMTP retains the RFC-822 headers.) + +12.7. Bulletin Identifiers (BIDs) + +The AX.25 BBS system has evolved a reasonably efficient way of +reducing overhead when forwarding bulletins. When a bulletin is +originated on a BBS, it is given a unique bulletin identifier +(BID). This BID should (theoretically) travel with the bulletin, +and should never be changed during the distribution of the bul- +letin. Each system keeps track of all received BIDs. If a for- +warding station wishes to forward a bulletin to a BBS, then the +receiving station checks its local list of known BIDs and informs +the transmitting station if it already posesses the bulletin in +question. The NOS mailbox conforms to this protocol. Received +BIDs are stored in the file /spool/history, and are encoded in +the Message-ID: header line of the message by NOS. Messages for- +warded from areas listed in the /areas file will have their BID +(re)generated from the Message-ID: line. Note that ALL messages +from public areas are forwarded with a BID, whether or not the +message was produced with the "SB" command. Like other BBSes, NOS +will inform a transmitting station not to transmit a bulletin if +it is one that NOS already has locally; likewise, it understands +similar messages from other stations to which it tries to for- +ward. + +Note that the BID mechanism is not a part of the SMTP world. If +you are forwarding bulletins through SMTP, there is no mechanism +by which the receiving station can reject the attempted delivery +of a bulletin, even if it already exists on the recipient system. +(Note that a possible workaround is to deliver bulletins to +TCP/IP stations using TCP instead of SMTP. Alternatively, one +could use NNTP, as NNTP commands utilise the Message-ID: line, +from which the BID is derived.) The BID is preserved no matter +which mechanism is used to deliver the bulletin. + + +12.8. Traffic in practice + +Now, the big question is, how does one set up these various files +to perform intelligent manipulation of mail? A number of examples +follow. Note that, often, there is more than one way to accom- +plish an objective. The following are merely examples (and not +necessarily the most efficient method possible for any given +case). The format used will be: + + + + + June 7, 1991 + + + + + + - 62 - + + +typed destination -> intended destination + +followed by the necessary entries in the alias (/alias), rewrite +(/spool/rewrite) and forwarding (/spool/forward.bbs) files. + + +12.9. Using familiar names - SMTP destination + +bdale -> bdale@n3eua.ampr.org + +alias: +bdale bdale@n3eua.ampr.org + +rewrite: +forward: + + +12.10. Exploding local mail + +sysops -> nq0i, n5op@n5op.ampr.org + +alias: +sysops nq0i n5op@n5op@ampr.org + +rewrite: +forward: + + +12.11. Using familiar names - BBS forwarding + +g4bki -> g4bki@gb7bil._2712.gbr.eu, to be forwarded by ai0c + +alias: +rewrite: +forward: +ai0c +ax25 ax1 ai0c +g4bki g4bki@gb7bil._2712.gbr.eu +ai0c + + +12.12. Handling incoming bulletins by subject + +tcpip@* -> nq0i, tcpip, bdale@n3eua.ampr.org, ai0c@ai0c [a BBS] + +alias: +tcpip nq0i tcpip bdale@n3eua.ampr.org ai0c + +rewrite: +tcpip@* tcpip + +forward: +ai0c +ax25 ai0c + + + + June 7, 1991 + + + + + + - 63 - + + +ai0c + +Let's walk through the above example. An incoming item comes in +addressed to TCPIP@ALLUS. A scan is made through the rewrite +file, and a match is found. The item is redirected to tcpip. The +alias file is scanned; a total of four copies of the item exist +after this, three in local areas tcpip, nq0i and ai0c, and one on +the SMTP queue (for bdale@n3eua.ampr.org). When the mailbox timer +next ticks, the mail in the local ai0c area will be forwarded on +the ax1 interface to ai0c. + + +12.13. Routing based on Hierarchical addressing + + +Wyoming -> KE7VS (SMTP) +Nebraska -> AG0N (BBS over the NETROM, NETROM ID WNBBS) +Europe -> W0LJF (BBS over AX.25) + +alias: +rewrite: +*.noam $1.na r +*.us $1.usa.na r +*.usa $1.usa.na r + +*.ne $1.ne.usa.na r +*.wy $1.wy.usa.na r + +*@*.*.wy.usa.na $1%$2.$3.wy.usa.na@ke7vs +*@*.wy.usa.na $1%$2.wy.usa.na@ke7vs + +*.ne.usa.na ag0n + +*.eu w0ljf + +forward: +ag0n +netrom ax0 wnbbs +ag0n +---------- +w0ljf +ax25 ax1 w0ljf +w0ljf +---------- + +Why is the example rewrite file apparently so complicated? This +is to handle poorly constructed hierarchical addresses in a rea- +sonable way. A full U.S. hierarchical address has the form: +callsign@BBS.#localid.state.usa.na. Many states have no #localid +field. In the example rewrite file above, the first three lines +convert non-standard, but frequently used, U.S. designators to +the more standard format. It is common for users not to use a +full hierarchical address if the destination is relatively local. +For eample, a user might easily use only .wy instead of the full + + + + June 7, 1991 + + + + + + - 64 - + + +grouping of two lines handles this problem. Note the third, "r", +field in all the entries so far. + +The remainder of the file handles properly formatted hierarchical +addresses. The two Wyoming entries handle the cases with and +without a #localid field. Differentiation between these cases is +not necessary for BBS forwarding. + +12.14. General bulletin handling + +The details of bulletin handling will vary somewhat from place to +place, as there are several distinct styles of bulletin handling +currently in use in the AX.25 BBS world. In general, it is neces- +sary to arrange one's system so that it accepts bulletins from +BBSes, forwards them to one or more stations, and also handles +intelligently bulletins input by users into NOS. + +Suppose that we sish to handle bulletins @JUNK. We are to deposit +them locally in the junk area, and also forward to BBS g4bki. We +also know that we generally receive @JUNK bulletins from g4amj, a +local BBS which handles much bulletin traffic. +alias: +rewrite: +*@junk junk + +forward: +g4bki +ax25 ax1 g4bki +g4bki +junk +---------- +g4amj +ax25 ax1 g4amj +g4amj +junk +---------- + +All incoming @JUNK traffic is written to the junk area (which +should be an explicit entry in the /spool/areas file). Each tick +of the mailbox timer, NOS scans the junk area for traffic not +forwarded to g4bki or g4amj and attempts to deliver unforwarded +bulletins. Usually, g4amj will respond with a "Have it" message +and the bulletin will not be forwarded. Any bulletins @JUNK depo- +sited locally by users will automatically be sent to both g4bki +and g4amj. + +13. Questions and Answers + +Q. Under what circumstances does NOS request reverse forwarding +from a BBS? + +A. NOS requests a reverse forward after completing any forwards +of its own to the BBS. If no traffic was queued for a given BBS, +then no connection is attempted, so no reverse forward request is + + + + June 7, 1991 + + + + + + - 65 - + + +issued. + +Q. What kinds of message types does the NOS mbox support? + +A. Basically, NOS supports all two letter commands starting with +an "S". If the mailbox has not received an SID banner (the +"[NET-H$]") from a connected station, then an SF command will +send a followup to the address specified on the command line. The +SR command will send a reply to the current message. One can also +issue the command "SR ", where is the number of +the message to which you want to generate a reply. All other +variations cause an X-BBS-Msg-Type: header to be added to the +message. When a message with such a line is forwarded to a BBS, +it is sent to the BBS with the appropriate message type as the +second letter in the "S" command to the BBS. + +If NOS has received a valid SID, then ALL S commands are handled +by the X-BBS-Msg-Type: mechanism outlined above. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + June 7, 1991 + + + + + + - 66 - + + +14. Logic map of the mailbox + + +============== AX.25 === NET/ROM === Ethernet === Loopback ================= + | | | | + | | | | ++--------------+ +--------------+ +--------------+ +--------------+ +| | | | | | | | +| Mailbox | | SMTP client | | SMTP server | | BBS Forward | +| | | | | | | | ++--------------+ +--------------+ +--------------+ +--------------+ + | ^ | ^ + | | | | + v | v | ++--------------+ +--------------+ +--------------+ +--------------+ +| | | | | | | | +| Add RFC822 | | Use MX or A | | Add Received | | Add own R: | +| header suite | | type records | | line | +>| line | +| | | | | | | | | ++--------------+ +--------------+ +--------------+ | +--------------+ + | ^ | | ^ + | | | | | + v | v | | ++--------------+ +--------------+ +--------------+ | +--------------+ +| | | | | | | | | +| Get Rewrite | | Use optional | | Apply Rewrite| | | Strip RFC822 | +| file address | | SMTP gateway | | file address | | | header suite | +| | | | | | | | | ++--------------+ +--------------+ +--------------+ | +--------------+ + | ^ | | ^ + | | | | | Yes + v | v | | ++--------------+ | +--------------+ | +--------------+ +| | No | | | | | | +| Local addr? |-------+ | | Alias file | +-| Any R: lines?| +| | | | | | No | | ++--------------+ | | +--------------+ +--------------+ + | | | | | | ^ + | Yes | | | | | | + v | | v v v | ++--------------+ v | +--------------+ +--------------+ +| | +--------------+ | | | | +| Apply Rewrite| | | No | Local |Yes | /spool/mail/ | +| file address |--->| SMTP queue |<---| address? |--->| directory | +| | | | | | | | ++--------------+ +--------------+ +--------------+ +--------------+ + +15. Credits + +Several people have contributed to this manual. I would particu- +larly like to thank Bill Simpson and Michael Westerhof, KA9WSB, +for their significant editorial contributions to this document. +Deborah Swanberg wrote the original BOOTP documentation,. and +G4AMJ/NQ0I and SM0RGV contributed the section on mail forwarding. + + + + June 7, 1991 + + + + + + - 67 - + + +Although I am the primary author of this software package, many +others have contributed substantial additions and refinements. +Here is a partial list; additions and corrections are welcome. +See the individual source code files for additional authorship +details. + +15.1. ARCNET + +Written by Russ Nelson of Clarkson University. + +15.2. Autodialer + +Bill Simpson substantially rewrote my original version and +created a much improved control file format. + +15.3. Bootstrap Protocol (BOOTP) + +Written by Deborah Swanberg of the University of Michigan. + +15.4. Domain resolver + +Bill Simpson substantially extended my original version, adding +record caching and automatic expiration. + +15.5. DRSI driver + +Written by Stu Phillips, N6TTO. + +15.6. Eagle 8530 board driver + +Written by Art Goldman, WA3CVG, and Richard Bisbey, NG6Q. + +15.7. HAPN 8273 HDLC board driver + +Written by Jon Bloom, KE3Z, with fixes by John Tanner, VK2ZXQ. + +15.8. Hop Check utility + +Written by Katie Stevens of UC Davis; enhancements by Bill Simp- +son. + +15.9. Mailbox server & SMTP + +My original, primitive SMTP server was vastly enhanced and +expanded by Bdale Garbee, N3EUA and Dave Trulli, NN2Z. Anders +Klemets, SM0RGV, wrote the first "mailbox" specifically for +AX.25; he then expanded it into a full-blown bulletin board sys- +tem and integrated it with the SMTP facilities. + +15.10. NET/ROM + +The original NET/ROM code was done by Dan Frank, W9NK. It was +ported to the NOS platform by Anders Klemets, SM0RGV. + + + + + June 7, 1991 + + + + + + - 68 - + + +15.11. Netnews Transfer Protocol (NNTP) + +Written by Anders Klements, SM0RGV, with help from Bernie Roehl +and Gerard Van Der Grinten, PA0GRI. + +15.12. Packet Drivers + +Although not really part of this package, the Clarkson Packet +Driver Collection by Russ Nelson of Clarkson University has enor- +mously enhanced the utility of this package by allowing it to use +virtually every PC Ethernet controller board on the market. + +15.13. PI 8530 DMA HDLC driver + +Written by Dave Perry, VE3IFB. + +15.14. Post Office Protocol (POP) + +Originally authored by Mike Stockett, WA7DYX. Updates and modifi- +cations by Allen Gwinn, N5CKP, Gerard Van Der Grinten, PA0GRI, +and Mark Edwards, WA6SMN. + +15.15. Point to Point Protocol (PPP) + +Written by Katie Stevens of UC Davis, based on the original +implementation by Drew Perkins of CMU. Updated by Bill Simpson +and Glenn McGregor of the University of Michigan. + +15.16. Routing Information Protocol (RIP) + +Original (pre-NOS) version written by Al Broscious N3FCT. + +15.17. SCC - Generic 8530 driver + +Originally written for the old "NET" code by Rob Janssen, PE1CHL. +Ported to NOS by Ken Mitchum, KY3B. + +15.18. Socket-level stream compression + +Written by Anders Klemets, SM0RGV + +15.19. TCP/IP Header Compression + +Adapted from Van Jacobson's original BSD UNIX implementation by +Katie Stevens of UC Davis. Updated by Bill Simpson. + + + + + + + + + + + + + June 7, 1991 + + diff --git a/src/nos/doc/rurtcp.zip b/src/nos/doc/rurtcp.zip new file mode 100644 index 0000000000000000000000000000000000000000..69da11c413cc67fea434c9bbce614b4857b53e56 GIT binary patch literal 140848 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 z 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 literal 0 HcmV?d00001 diff --git a/src/nos/doc/rurtcp/FILE_ID.DIZ b/src/nos/doc/rurtcp/FILE_ID.DIZ new file mode 100644 index 00000000..4db41bf9 --- /dev/null +++ b/src/nos/doc/rurtcp/FILE_ID.DIZ @@ -0,0 +1,20 @@ + + ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ + ³ G0RUR's Programs ³ http://www.innotts.co.uk/~rur/ + ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ + ³ - 01332 737850 - Paul Simpson ³ + ³ 231 Caxton Street ³ + ³ - IO.92.GV - ÃÅÅÅÅÅ´ Sunnyhill ³ + ³ ³ Derby ³ + ³ - SK33 - ³ DE23 7RB ³ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + Visit my Web Site ³ ÂÅÂ ³ E-mail: rur@innotts.co.uk + ÀÄÄÄÁÁÁÄÄÄÙ + + - G0RUR's Easy Doc's TCP/IP Command Guide - + + RURTCP.ZIP Contains 2 Files + + û RURTCPP.ZIP G0RUR's Easy Doc's TCP/IP Command Guide + + û FILE_ID.EXE This File diff --git a/src/nos/doc/rurtcp/RURTCPP.ZIP b/src/nos/doc/rurtcp/RURTCPP.ZIP new file mode 100644 index 0000000000000000000000000000000000000000..50a67eb5d6ddb3850c584b3a8e7cb3d7ba693f37 GIT binary patch literal 140235 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

    g56jh!6)Pjth7H)6)CmKAqC{P zK-#Q_LIE2j#<|IY!yMgZOg^kDsS1Fd1_v;c1Tm*3#8w9z=ZcyNw!8bn42p@q~p>Go{A2=PDJw4&XJzOF|;ZXUAhc@x`QIBl^gO)%q)(jfl^;dV0g3m#3 znm;#n`cTfAn!I*3I2b0I4DV?BknFHBm2N!*L{&$a%&j~|N2l)_&yCm^*PE?Xw0)1le(0B{&U)EumdflyHJ~PX zL2`LvnwT7Pl+zmU^bgN94wd+BktfmxHvq0q416}v1&yUU`$$FtxS4V#Ksg$4~}y%hD|&|8Ho0qhTKxL9IZZJn@Zi@GsQT#^HMvDEo2ZA3@>-u$i4&IF@QORHl(b{50?YepRwr{G0 z3-Z%N3J;5hg0%vzgt(zd9LweCx`E?~Va2pr2a_l;?e0<&%O$Q~622hcBZNXQIL7qB z@c;&FAv$MR?ugTQN1yN}mC)_?Q(qM@bEZFm8F%Nz#MH-7D7r0EqhO`_B5)8tZmQRc z`m8t3ooydQL*+9$n2rVqFOYKj2w0~r5R-CC#ihkE*UM!?Gq@W! zoTGtdNd}J$4BQ;+OiqtDHYx9~WYIKRvcqzqi)G8w)y3+AX0`&^2~pg37EQ6W9i*1c z#pUWbhGO(c+NTG}0z#=d7MYwPf19z3%$UvRz8gmFK zj3|pl{?tFG$*m8LYzlO!V|gPorV=Jk_Qre}ZP-)<-ha$9P8(PtTx6BV80$#uLKc+R zQfXTnEGw8lWRW6-VPM;V4c*Y@F6MksTC9yJzy!DG-qn(+v661wq_Zeu2U{wCLYs($ z+Q;0Q92Jkk?$42(GTG16^nq;^yeYb3nAv%>sSjpCSlqdQobn#GFL;Vt?AKQ^mjrae ziuM9Q9)ihW!XRr(z(W%9uD<%jg{kVs`(aK#Bu9Sk;G z$x`{LfbG&b+TBXAjAR zT~OqEqQ>4dwi~>@=~|7jnv1U-U(YqFx8Rx_RvVvlHs%9iEk53* zQ4MGE!h<*!>WfJiPkWu%19^{>LDJgFm;+Xc)zs7NW|EOqVsJ8AH&X=Ig zob`?#j48x;LNW%FlJZyl_EyLnuHyP}hRMt(=!<~3_JF>!H&E-ivfm0j%lHr8W-=NX zv5J;P4s=~>npi8hVE*Bg<1oMCcX94Ntbu@qK9Q!lU5Zu6I0HaA~;Ia9^!3~hp>wj`WzbfVoa(FE+r7WxDaPB|= z8?N^AAJFa%38`SGE<$JkI%;ynL2cIg`O0*Y+htb^@*+l~Ag+D*gYPDKuJelL?xhVZ zG!xWtzMz2Oob3e@83V*e+RS=kF}GvLon)-r^K0_u49D)pEP&Z#j+Al=yt1^8HaEwi|O`Qg*ne)s~7@VcvafKwv z7l>PN{J}xZ#AulQGT#yc3@q`Z)bJmWydeyo;E~A&&p1c(Aja?$nIM+>h#E#zYDijM zpf%vxGbUMram3ynk++t%AmK3IYfl4J3jPG-0+g4bb*xz^j!h^~x@eB({$Lns+u3UWLs)cO2>$W@4V1Y8%_Lcc*#jF51tezX zMYzlun3+tkq5WO4gNlI}Kk8 zZQ*pZQ}Q==@0&NJFI2+}#B_{$`PgpUiqJO>{={JTn~6a};4wAWXiWT+Pne9T#emZt zoFFCZFVYl)M{ex`VLABA_R*{K^ssyIG<|+tT!yX*ndKOH*;1)l1$irmNbpoO!~BNg zOSJm~7c87RZ}7DJoDd$g(Z>YTOhuR`b+$I7&6s$+n=Sw~5IAw;Yni{d(f;XV-w$+f zWh`hapJ3j4jl2%CEUN!MEx?MOYAmo8EuF zx*f*@c3)MpsWS#|fL zY|3f&KjHa;{yc>d-+f|c;c%1wuMhI3$hW2V64!UxdS>PPVE0y&8eBi|F2!sL`1c5=qkOdK7~M+pnB_o1Vp4+_ zVSDeLjc~M&gN%0ydb;sAI41Oxj3fO9f*V6Hu4z~IF+_NP68{ly@)fBsQ?HB(jK8sF z!xAL1nM%GIKD1)9{y(8Vs(q1yA(=0#kKBs?0VLd=1N-AGk1d0n@F-K!K=Z)=gy5|P zyE^iUx8F3WWO90}JAny$XudHf*iQtW{~|OtrB-n2fMP@Hc={;GfHWjaPx|U{n-X)J zIQg*EiAxR;#Q}G#*C}t~?B%17>}GMSi=F>riygYnd=X+s`#o0%*h)`N?3d_P^@Z0- z!Hz1GugT(e&L7`(1f0eYhr7rZaZ?9uXTW|NtOkUWp}xk8g6pN*H4eHHer2)dwxXKD z^W`+ozN2a;?Zr978)v_%sQU2@Sb;;pv0uX?%OZXqXWqDdoRXZ5y4C1XD`xix%#sKN zg91z~rCmWw4tDdm=!w8LsW5OYJrr+zWxL3dXnrL}h0%%FU*+pE*UO?g7M7TCcj3NA zoExkj=KP}@8acx1f^G7nfh~ft#as_tME@GI?=haPvBqqd!xkNEvDoH$oe5wtpAZNW zoo=N+Ct28N6_yW)j2F@EtBaUiqZWc6x^*)YnKble8 z0Jw%u8Jy{YgG{)GuNw1!G+-btZiG$D5_nm03seYYg_RYox_-q-nH;*!;5&e%Jh}Iq znikkz`Jje-r0P!Llq&IY8|IzPi)g>3hcs;44OO2&Lq=-y#_h7EMAmw~%-22yL7b2y zOxhr-e?saGNJmA_qX?bRQgS(y`-+DT(r1zbJZ+;MpQ&%+*TMHK>Y8c9UzMT&tY95& z8`amYKpJT>;qq?@2gL;4Q~6%Uemw&y$7U2^B~tkK%swM6v*E z1ZS;cHh=?$jS5D_(>SiDB9CU`j6fqS$6wY?=8NUsn4zed#67gFJp&{UniSci+hBJDy5^;Z@Kv= zs`EttZv)MGBlKzLXKWo(xAzZZ*g}_*F(}=GkcD-sCr5>jL_jpqGS=D0dMA-lyo>{W zdvfp31Oy>`4`bwuHDd>$Z2!3B!0G`g)%bM+to3xcB!?Pl3mJCnFHx-zW7fd|p1e(s z!~5wLj`ut9-opeWD1m&0-}Rq-*KknFtyPZg9ow%k?0skWpy2>#GaRJthW)I8fB!c0 z(9iT!Wz^IH4cz@^@;TL>uv6|}(GuiJ_!&jFx}xl4DaVQBV)V6 zCY(l7clbYA=%%s#TwYj{9|q)xbs^JwVeV(~tavKba)4WkTx2)CgpblwIK_i8$~=EB zeEU8tA7s3l+W`aO(B;D`$a3I znevd^H_Jvy+(o2IjdO!#DMVS#P6xyzRfMHl4x>p%8npScJ=4VvhP+ct#nKQLe ztqs41>SX$mu2>ST2>nLq)~(DWKMI?6lCf+7uPNW?0$kmp6Ogm9o&_A;p*p}yv>{Wm z${6w%%CQ_hGwkAZJIVWD*M8jwkeevpLRknZLQ7TpkfA_n4Eb#`#9WM|7Ry5bS~6Tp z#|pwyLt}WLLAMwFw_ZeCXbjC!hO|)R&8@T|GJVKjD$QghtE@mWw~}b3VO=L6d_OX_ ziVWlf;dD4Vin|^v<$07&;2K~C`g!bSBU%{yJg$IfEqTC9Gpo$^E)Ckk-t5qibfuZ0 zff`yXQc-LS8Ends9+_rF-doQ|Gi4!PC{+%_DFAA?)nS7>le)g8>j=F-j%0=(6!9Nq z1LTVI=aB-&ML>+SGh(dgCA#&IvB!fh%fHKwU zD(>jp|I)F}_`|mi`>#(myNVc8%fr(h zV87|W#gkOGB2zaw-Rl0g>Du)Fzy?om+8_6%@!03~>u`j2`oqB);ebJg z5?KNrBd?y)@VfpU@NR8W-sT38mdpJ@=yFRJm69X`9j^59FF}!T{A}qJ&hZi)ugyRE zavkBnU6aq%-m)jKj(G zFt7GX_nhnLucRg07`pUS+H{??ZjoM*FQ13UN%hOOrEJ#ZC>bgsF+R<`4go?JZjZ)8 z7PVflgUqz{dnaC|-S+E+%V8wjlt<`R_}Z4wx$_@p=);Cu1+Rm>?h%3ZO&fR5s#7nh zWv#z&q;Ua9_3e>WoUMiYgetp|@0*<_y)w(0gU;mD^GD`MX@Fkzak9|(-w%Y(G3?WM1qUeX^>I3%Q|KqHUy9N4FHmkRB?zWMf zcwk3cW*zRxNPi4xUC!Um=zf(i#8w*M_7N=4G705be>QleJJVi0XK=>T3mG3r*9{Hf zvFZpU_V^ys)V&Bh{#JTrhn%*@Jy~hM&>2V0_@skQD!pU4+?`v6pZ(aU|neUcFtSCb=LN=6BuLl!rXkhT6!hnpXO+B-lA&L^XEFg z4kUZyZa@J%8--MxdmX>KXCLi`-$C8)XDozg${x;L44g~P7{Sfb4>LlS!x@1+_h~#_ zLlO18%3JY0sQ~R&oMD9)W-EU2%g~kSqo!kylGx@66uio_(Oh4Czi{Ku#4vDbP|xd) zq)ppua<4%RP?>DckLASWLvPM{0FKS&k|e^&GFcP0{CN$|)8YFruj^t-YFCH)d&KKp zpfHGYgdx|7G5-0`<*0xq4R=eX-hbg>f3AVoCDX3IxbHey`CbXs+pM0}ZBXoX>-BDS zSwMJrbKe#jWSnc3tcrV{6fHeS^fw=z&GAdgfi+wwIYtaEu(cRh3Dp-+G|aY3Ue+`x zExpbTHo*DTO5(G$uzMc#|5o_Voc*br-sWKU5w5vHV}F=-|LiI3ge^>X5JLJCRRlko zz&%t%YZuCr7NwB~Y4;7UJ2=w32o7FW)#O0#3l82l%ST_-Iq##-V1#?$a4u|y&MGN7 z0!JsGVW)5JKcc2Pq4Wu_Ci+h)tg7oXM)e=%TijG~?Rjn~LlPXT4X+M%Z%?6daM;t)a6t0@k(v;-8Gs z(o)3PXV+EX(z`Cs+fi}yhMViiUq>ET2-1Cf2g_qq*kXALGT&H(UUv^Ww?dmWosnVu zlyoGC)>>L-%O5{-v;L&Op~xEyhkTSu{WgQG*Q0=Pq{8R5-{I^84$5e965gI&Mfj`Q zKV&4$vA8onK{1BfuCQ)%f)+Rq;{Bi{w~Ap(F6_m3`;4r3<{94 zHb_c7FS>kZ&9q+QlJp0BbmMXE5!w(qbSHn^!>fB|NS0g+U0zi5;=i)S;c6YE+q(}- z@8#<6uQ4srruOD~9l<}IgYpkpOSK*b!Rs=gOI&zRt+A7n*yZEr@i=%gg18Q!2j`$% zf?rZ;GwNm9r_s}zN8CH;Q)1&maG2WF>W7MQ3h$Hi;o%KBp}?-5oYt}tJ*_yX(AZ~Z z4S2ZDv&2_67_n>#2ewP;(`(-k_0d}O+4x84Mdn+87J32BXSY5qCr4rTL-tC*P9I&3 zO-HZjc=rnoffm?p+-9s|12ohI4+vFs;mEKDEMo)ALE`;$GPnY$Pm|vBz8p7sPLpLu zQ_ItE(4z%TArGuhDx8m9t_lTLA?aaS#X-$wZFo30@@>Y` z_2j~z44x!wo3R=)e2)1>0h=k8{E@6h>^q8!*190I(}NiBi}eh@2^3@g+9qNwk)@Ec zbITQH?Dcbn;YO;}X>~W)56XM#)}JVTz2QIPgVpMPzBlw~@?P?uDMvQY>|?KiasSxV z`fI*g-A-hE$f3f^8+fWKhtMFosu zKc~rF4~W9ZIyjcSd^`C_`$O{n>G!rPm*m)f(M- z+JAl)aL-gZH*q(NSQElJgx)^Td`b66m}@DqG_s7#FS4uOj|>>eQFmly@=j58=g(B~ z#kAeEhqJzBa%K~Wjo!b++>cjaU@zEjgJe1;bMO|6Age~$fJja%AmH`e|8c~VbbuJ^ z0I{*m?B#X#C;j$>hl)ShUZ^5jZz55@$mR=^4fcPOS#2NG0!`b%mOxPlVmn6o?q6g> z)O==;l;U9<0nFoIdqf!Qd8ho6E{AJ5nR4+DCZ~#+nr)pz#ynTYlcN>#{~(#J9Ihr} z*d+7{4g$l9$Pw!=mcNr2uy146i=9MTj`i<9chq>2+oR*n$5in;{`@&@Ej^z2l(yfx z46r60a0z+8wS1Yi!qQnx`gCwQ$kgo3QIJ!7fTziRJ3yd^-s4(w!Qq_#n30SduM?w| z2JFO#`04$AJNY--4dg6;jjUYMI9`!Jj>OFEHBuoQVljpv&$(c~pDN44*M!RPoi%k{4h^tyF`>` zrg$!G%Wr?@ z{G|45Zvq!j5r7a|@lHj2-tHfy_roHm1qJ5vH4uI*s9J4(vzWgcWTTA~6~kFGp?uZ_n=Msg zOD*g_bCsZ7cyIy6P7iroz=l8xqt*snGza~U>6-D(Y?M-*S|Gq~JEz4R0Z?;N`W`e9 zO(Z0Zk415d2u1zeP%NdV$N1j_2Y->xRT!XHtZby2<8P6CFhi`pU`dW8KJ|dO0|#}R z(c3z8kK!eeI&m8?;uVC8e>1@-5+<06#HW@dz+?cLTCk#2QpfgT&kW~qwl}$!Z0&h% z`}>^pEmHA^3Q_0tUi?jS_~P#`~~gKecV zgMT637BfII3Ij(It>OU=*uzB!IQuQZBEw;o9oq{5!fWL5R?!d}?4*pU;EMpxz`%V1 z3JQ~_&?Ct9_a|&8M1!ZHT*$CnXWs@i2%|W!C1nnKT)jh~hksGdk(DiAQjlW;CpQ)1o@z%n$vQAD*o%U0 z<+Ar^cLmAsJWpfJ`hpSHu2zZdqSpK??`jq-`goBLw=wr7xGAnPmlV9O&_@mKzy3cBx%L@5g_+ENpM=kp|@Gxv< z&VZy|2qzf*OYyc?%`#57suS_y4aPGQSBGXMT=0-Ip_+K?AAM?hBHpelRU zgTz8bw+^ahXQr|9IPtL}NJ|J#`e{}snVPe??ZJ_4#|W7GyAEx0*!3X07d506-lfaF zd<8#tJpDLc4VxR%l|*zElCNOjR|$y;s;YkIpk1?cv``en}tWJOOuNH&q6lE#&$@i`L*a*#}zBLO|)ce2m~d ztFv?++5Ww%ftGAMvG_wPDSfDw3^=_JdtYFNsI+ za%$NJ3kP7$-~S{5@~*oPG+&07D|bs~!M`g*MhRz!52f%Sp-eKY#~*k&o=NfI;evRE zM;6jb;QXUR@*;ll7h#SIKLy~^(U3MN#K8y3Imvo}I4B@76iB$@LCGxqcO~c^92qV^ zG*(Fhd;mP~Q%hhUKzTfh#0W_85s8uAgN;bwQ=kNq7y$`ye5njEl2P8#^ z#D_?V5Qz_v6d@A$;1Y(CAH`x7t|osGKln=-7Wfn>MJ!gp0v}GWfrKO?mJ-Bb1}r5A z8?TapPXHWT6?}Lb|FyzyDeRp^argj7G2(y^&oLCfq)-xK@FhWV{Dcw*!HeKa5j+pz zOA)*l!IvUw+mG(A z)Dno?yJ2^@mQZXxycUE+hskx{X`HR!Jk`>VsQdJguD z$*q4zG-TNc@?bEqTFMGiA@{|#;x+cthq575z8o3bjDdYOIs3w%1a4;xzTn`ZA6X+~ zI|VYw;G6+oT>G=$RT9RHl_CB=TS$JQ$sUq~a)x(?-;<1E2i}H^1McR_ulnuUv%yQz zYp*{*TL9XSe0|~_M#R+m1ESlDmx3lZ0-Zu*ZnK}K91sBp%@=XigFte+um%)iT{_8E|;t+mT+AxJJ$HX30^v(Q!c0BW^=H9HuOx zO~=*!kmR)uRtekrXHP8Meah%tl-N9wn(V8c_IcUj!9U!L}RuTwfCAcP^XMWp+Mjtk@oBg*iyA2#V`Usy^gP#0I$wUGIgkp7C64#+$}<5 zwG(`$rE}%=8Z?%iV@I5kO1-?MfiSxegkT`YM$lBPW7-~|3gCDkgJ^i#{bY%)yjZ`K|@KI;m862#- z?v(xYb?ZC-StTH*%k)DdAB5fA8=N>9qYO<3)gM*2IoaDPYY~zViJ&p4_R`ylNY3=F? zmtAFWI;HxW9+JNxsc11~m|)+ikZ1f91bmFWOa?X<%Q;6YZvNMkGL=(}Qs!s{sX4I0 zEgecKTJn%kFb&*5m~6JiaSh%}%9I&>HB^2qgNcWN%JJ%w8RlWE5{~~ybnB)}!Y)KD z+z;_Z@3k4v=HM}(|Ho?om}1mLEERa+<_H`t-V!#|v1=gyo4adY@op-U`-J!I${Pp& z=gDyrcCO`miF8QNUU#V)2yCeZdS7k3o~5`)Nvt-d*?5K&K0^b!PjlUxufdXuxVreO7zt%ZVOza)S>sb9c0`L;G!GSYS z%7lP{w&WB!%Wds)_{RHmR(}r zsCF^|NH93N8bW>5-T6a4X4=r4by?g`EBUIpQ!5iw>q%R1oEYscv~y?{0hnBR%uSkn zyOg{D1=3RRBTy@96A-&Xz@{{tY%4QHa=_GV%&vwIou}Q%5eDGY0yZ&@9>I{RG!88= zG&wc4zv;Uv^6UN=RFdNTLgCSDGqXSf zU;1xI^<&~&^&klkL)ZnL>LGQdfc|~hK~irK#O!Ng!(FZvvPfqiEV)wvCqt&a6b-h* zP41^dmkkcWC`y3@+e1_Zo0LMYZ!#*9ebDa_xS6+DFds{+ERJ+=rdh(nu^gH2&##cS z(SA5611!h3<3mhAty7MoNR3Rdn!0;s#F+hh=&kwr8jCPJfpS6i%BrAjJ_pM)PNiwZ znJW>r@Ma@k1-!6 zfWm=@u)5Jd+mm57 zPWT-KJ(n?n$z}?bRki4jZ}emc8t>|8)i~8L+(S>hD@GE>Nlcyx`eRt3JM=Z{-h?Uq zYYWsnu{i{C4qge3^-rEr2`oK9&jQiMjgdbIfsO4dt(E(o^pQ01ZJ@MWa3C&qvGkhO z2wU;bh|{IQsbhB<`)L_O1hB8?3B8fKrk1q_bLZT@YA0=ng^K@dYP>rm|3A zD}CNv1!tP>%`Qo;e^nFxb^ZC)^pE!9$Y_V1mFP^oN>dOzOo~ zy9x0rMBZZ6w!I6Ke-pl1$;iCOE=8Ich(hqg5U^>|8e{D#7+DsDgP(=?LU}-6CB(v{ z`PK6qMWY_sl&*$YSw?JWFkePC8w*mpHeVTKck_;QUdu_>pzHzLpdB(oU3W$4b*y|P zyF^a1Xf3l!>>gTE$A+`u=1O8B+!g2rSkP0*=O6}?9q4Rf!vZ~Jeu@p2TYAG{KS3ba z$v8vdR42rLU7KY*#(j)Z?2x6p_hcd**0mYjS|&K=$r!KJPSu z5vwLVd{+~bn4pLRG(l`Vywuh{PNJ>U+UbCH+L?A{4p>^}cAVdURqJ%dQ}8jhot_R* zJMDCOrrb{w_P)RCnP2Z(`}<7@539_*zdwFI^rIpBwf0(Tuf6u#YpoqLqmMx(FdfrC ziRCa}%<=3ZP^F`?V!RTQnsE4I&2l%73DQJemuY%RKxJYhM zjiBV_%PmJo=08ArffY0rb*e02Dc@#_%D9#Aps~$`_1qUoJHEelB~StM4dJLo z4A>>;24WRRgM64N+s6Fd9jv&dV`+hNXxP*_V`Vf@gr}ogskO(+_sdNXeV9KPVSVXw zep$m3ha*QP=p&$|J7$u&5^mw7x5wz#($TVY;ErmvaP{%be;*O9*zSaA^6dn+fiVY) z`o7u5&-^o@EJNWgM4X^d@MyYJagUX}Utb`p;GhDdcumfX0 zj(Q1CN9@ovc13=RLJ|ZyDo!OR`4&DcHz@=?5R3@+_55C(EJJnn5k}NN+lZi!gMJ~y zLk-Uv)fV1DQw01m^W45z;T*us4@Ml?7+HvUD#$`ugR%W%=m-ZPux5QhnJ38!0aXuRQdCg@dODLZU{I0wP9?#N)bNJII?9-aoQeL-0-Vv)v zEbjKOld?SzTA(7CEGs_?O0FQzk-ynifPL^<=U67fgW&%GE*eo~>3)dczl$C_vI72( z?*b63ir_M*shXiSaNHLE9_~QHJ7# zoczbhh*Qed@zh+t1KdOFbtBZ7@OO+ z+YxFxMr!z>{!@NS2{O&F>?;S`e&@gH^}as)^|m0V;P%0^bSN^qGX<{9IFW2+1&1 zKHR4B^4g+=-Bi@Ju#1S1RmIZoMz4*SX6FR^7?+4@o>VN~ui!2CT(Qk72bcO{uM1Uw z_!2$Q*fK5T94l#SgEedhsqJa4(W&uiS%uZtRgm1al9_+lpasK9B}7lK2e2AUF-+71 zSl-Z3S`H_fFZCwNkibq@`qcn%XrB7$Y@5C_UfWqoWAkTi*% z#c@9XT^p=mXg|hQE&(NI^%lr@7^Dhpw@dqt#o#LVJhYC12uQp$*FwNs*)Sa8;X{9l zN3LSXJP22(L2OnR(e~{!;&Oafm`qr8r3?@t$4rf2L{8 zK>`Wz%672%GHEP5bT+neC>Kk>#NzobSO-`LWX7gJe(`+agB_# zz`oCTB34=V03Q9KcC0`5Vk4qe=WgAkb3| zx^Ix`l-3&QLAR%IMt_Rh;_heHAq|ch^A_t<@lMT;UKo&hwK7c`uh;mSH9Wt74vmC# z_e@VlrpK)bP{wCDrlmYk1dW# zO1z{?72Q=~;V&2`rL3%*IkB<=z}i0e@nrT6{`kFxy^+}EQFeLMTkm2?_Xs$iDrx*! zZ+j6BUdQNmxV&H&BNAGQDxuYH92ah2wmXfPGLJ~GGaf4hk2WQ2yJ%XXd>Ig|3w|$T zq&B^*uG2Fg=V%X?Js|9=zS|ewV&A>cP@3o8MBWt)j+rfuXV+=1F`TW@cj%SS*ue-X74LdFwNyd+Bx@@l+KmWwNaE{9@;0nvsL+Q(`ogStAnvdr#cK2xh zv#{qKXC;`+)ky<81h^RDk0HOw9WyZxSF#8EE<`9-bS1Tt#wL!XrLEl7Q7dQ` zI4xcDv=@D~ix1xpS!Eb&0ez*@CXLuCh0bEB<(h6%I{%=-M`iDmiC&1C{Ud#H$Qs$HQP=;7WPprWLd!VI>y2t~ z4Q2!IP3|Y351-7(;Jx{gFif^+f}ddQDA>=bvA&>6lJFY;;Y~0ivW_03ukewV1sUL? z$O;S6hrq89KWX=Sl$k+Sr9jjIRv4|JnT=uc@Phxx_{ef<9mNXBuVnf71wL1+1h)bf2; z{LX{mjvzp1QP&^$f!F-00Lo#P??cy@&FtAy(@~+jNK$RuMs^eYC3483WA!41`jPLb ze0}|fs4Mv||40NbJM{1T|4yTRztCG~;$|MAP||JYx2;gUS;2qUtPnaotTqcR?Kdty zMmq5bl)aIC^W74mr|6&a#0p!rk`;t~Bn%t2$w$yv1X{P%`DpW#H~Ih1kjxG<-%ogA z85=%4btV7*f;e9Oedz1vmwM|*?5m&oX!knh+lYSNW)Z-NSn!)|EM)??VRRMnpPD~s zl_FYv^m`X@#P|L#-AvNir><2h{{KzBo-)*SoUuqk1e!@!^VF84e4*kyO7G%J7SdNg zV(1a6D}E1A(l5S-*v)kbT}gf-3<6ir#RC29ua@)J;OYvH&G`=LK8Rg%n)U2A&wszm zGU9rEFi7DgCNH{|MVBcu`Q>j0L9ppjSeUQIza2))KtjCDuhq_vP*g}iC5On|T#y5s zNq+lBaA{jcH!IFue{6wUzSaFT>#i_}#H}7Udc@YCahs@cnhL(0+9yrud$#;g?Fb*BP?rE1U#0BU1-cV;7lfPg>56D|%QyH{$ zz5pV96+S~drh|#SA8)a#tdxC{)5kX~lwJT`nrPz0F^WXl3vbPuM?s|reIjuN^4?Us zw^xAqlbo=own{FyrPT9xCPs_jn3pfpv~-@FMLNL((jF&n3Od_LEOK*bCIoPnAAvJu zj1-%ed=LXY4(pc>i`)w?l32ImowmxUpw%Y^zj>i>7r|#1#nn~vlsNaF;d+qSZSeVy z-XzYleaH+}0rS*{$;YQ*06bE^3Hl^w&6n4K5onjVDI)(V+_O}PvMsaVoCp|SR=O+S zgh3oD;VzbLK5lB?5s@GJd$}3Z)Q1tEL>ZqMAu74}VQ_`&Bj(nxz_pys)7w_y?bmTt zsPc#}wRTv8T3{>IkXSK&{4|8tS@0^Gm@bHq=mgxeXe;^tS+rDc<`PR}iL#H|sydU4 zL6HL;qQeZQ-8$h(S8dgAVf*HB_PXcC)dz0bME7$*V(nWx$xYgvig#)``n>TurL^`h zSe|s&r+3AcFR3dRt~8stD((L2DhMlK@3e4^wX_6{?2PWaLK#^ZmDZVF$8+=%9p?Qx zUhQ}U&iip79}2}y5FS-+$J1z2(6kSo`tf-{^^sW1?XlEZ`Yw$3Eiw5O^p#^EUn`WmcND2@}3e{VIAmG z|FCa0{6=kz5g!6a1AGFb{PsV7SM${>Z3 zsZ_spQmaQxg(|k3RWfm4sgMsMrWgYVsAo7B~J3E)pjs)&EQNk4Z zj`Oet+4^%|TGnmRo8Y@ava@F3r65cT7FAwIvicA=L&-1)h9p`~dUuOsx=oG5(y8-3 zMF|tYzR%91TS!`j+*CP0_qRcnMdzo|;D1r90FaA^Mccle%D~5}BO~$|*>H((=1&}m z<`Cr)GLNKORgGdhu@FWg?~W6V&Elcyul~-tr+sV^53vviApbOurSM=GJR;02lcsdP zqo_*bG?MS_HoGf%I6bJ^s?*wDZvTU~w;-I(qdTcGb)niN8guNp%KyNzV{B1Z$iGq1 zneTS6gdSrHdxUmy?qF$<%CDt`r+%e3t14u)48*x5QF@IlE}vPV@urtIcY3cathUOA zL*pM^fIYb(a7Vpnm`jq(q}J1Xh9iQ*&A!fUNw||fHp8wz`QJO9_5>2fQg;@qZRe;f zQ8En%vYaEfGv&?a?Zmc5W}+v4*<1>z67yafQC%-4JNb7BVL*|0^L4INZtJe+Y`e(W z0OC56#k&7)@g6>=|@B(F!mEXwoC6?}Ay_Ff4S7Hd~AtiSL10 z!k7347tL%w>Kk93iaZdawXs_)-DY$Qvmch55mxj* zNCal%0gF=F!mo8yk}!5e+V#XfaP{Pjv#afCA)2ONJt)=*>Ph*($be#}Bo8=Fgq1gP+^_VCrSC%&m{unKvni}W^fk-Ajm zN_kkPdN=9GC>W|p2{9*jeW3?S)jraw(pQ|+lxI+82y3Qchaygj^GLv>5^A)SC|==# zxW)Qw6CNJDcY0nv(tlC>QPPLfStt3taR2G$5R`iN*lv-id$-!E^T<}_DSG$!7`0WIq_cNF z$|wKxodLa%UYf?EOK+D)y8jdZjO(}5>}hYXMM__c4C&vk=*_e+xMtZN~ZY=lR*g>9TXw z5JB^_I1!JcSmSX8PQ@_s2+c!|`@<9Yu+2u|hAKt4g~A+mzf3t}9_jS(r01Xo%c+LKoVd0b0&MVN1r76mQi2M!b{z_=uuiaOI`W^*Q;rc@ z%51_XLujiaH>w1|DBaU*;A}_x?O*6ryfkyYG9po-r}vyyp0_3=-TuG2dOI>EM@x@( z$#|CcwypKFiy|TB^&Oo^^n*z^zd`bmO5 zPk1>eT?54BtH9T~_ZmlY4H~lz>;{laxuTJ7%DJm`E^S8XjFbXzrO7$GPjS+#XJ}S_YS8k)Vnufr*pF? zHA zCDi?m(;A|4jD1-oiKpZ}GoegON?0;MRKGi;zItrxKtN-wvP+HDdnQ8fq-!e@?_`oI zlB z^}sZ-KSk>D0mB>%mVwqdte}#i%6P^G4#`dc02$*(0Rh@XoRqfgAh*`l8`>O+IKqph zxzVVtJ4xQ<65nf73Zf}Fj2e*x-HCCecP>|KPBdzhSZXMH2wueorzVtPC`_u_UW&ZH zhE-yGC|8jw0qL(Xk?VR}p2FP%XVzeKRf2>u8FFKggEZ`h+ZR81i0D&t!vS}bk}4^A zN(Xmu2_OQAa<{U|&&uA`{3G!J?|`s$3!Zi#`A3i_p-$ix!&?(j?L8-WF?#-R5+hM> z1xoI+cu53)>mW8^;YwjKq&YcLFi8r3OQkEyPCEO zfNezNTRUum`rW+~&c4BhqQP^8NN6Mliny^!4S+D#@3+ObLU0Z$8}%)fjBZdO4u=3p58m7prO!R|s5f)GSro^7)5z-OjZy zDzp_D>|sypWPck0z*1cnyH3=6V@c&@osXIM_2rjl2AD4JED)yv z!PNqUw5KD}qYG%$GnxJHCI#Q+Dy@AqGpmWZP-S!Xzve40TDAK$l?Cq>n4ACCV>rx~-6=|j| z*S{t=NKZA|sS^dkF6aa8yrN0?Ej3Ud0B6mzxe{{Og~g$5_Iv@u{o_`M4~c%=|2J2! z_Kr0Tz<#6hs&{AVyfU@}b?WUy6%rlW`}Yff+a|=lb3akqJJB_D%iB)<26|=`3x%f6 zr$!FT8llMjw~j{9U7Z)k6op9hbeCaDaJ$|xwk*(j0q)s}G*54M+OL}x{Dp{wmSlN{ zjeI~)N%J<5kKZW^CJA&4+|Ke>l(yaE91#+1vuyc{?SckO+}wh{xD`TMFkyr?-dlf? zcQ>+ZV=N7O*_RN0*ZNMGFsyq(;oU)Fku%KMYKa__6|o?&f4-Z;72wt?cfYO@`XGNKs}{81 zMb#GZl|Z12Uhl13(2>k#N^_Fh>@)&MyX}ipK?5G8%A>`%pI&)%REwgxq}9P4^|?^} ztM|D?YBqRKCs4V+PxDk~_&#Lf2UlRbGKe7S+eKgKDR}$GyA^JyV+EIm$4*Y^kuSnL zh5QFSd`KD%<6{`Ys`{szt{7g!m2K;;+o_!24hU2~hB}n_MQU`huEt^m=LUeP3%Ep& zGZStB-7ZqBbtK&dc`Rec_h_|}ETHzbN`{iV)Ln1lR_)dsUsnMe+m63gs48O^=~sT< zH>U1A&Oh=`pB_t8&M;B7j`5kf(ViGg!QJP(EZ6wF+?beqg2Wv{if#-f3Z@)*^lZC* zRI^xia~5aW0N4KzEPc@7v`UUfZ!~VGfOt0MKwsQEqe(FwQmQv?f!(D|=gaJ}X=~^M zu7pUnL#Fzqy5<^(a+rvgyfh82hRKc^u6`?ojz(0F&I*5qnviJWN#dA^#0mSJ|07Q?k6;%4gTvDrsbJTDO54 zrV*V#5CPEH;s<@(T=6hxz&@u*YWOGJ<|&>ZGS1K>r$-&3a~`6uoipc=>Us&r@3NSW z+a$L_=00pAk>yH*+ja11M4*g4%c2C#z!gIR$?RNXWFgVh5VN6wCb9b@HBoDF;M&4y zCubW^(EY*9Is2#R-4jg0i^MC@-GW*88d)C z^YsN}G3q!bIj=XR?`YIpMwoP&#>_LvEaoH2IDIYSORm^y*>HQ_My_CHtPQkfxL|O* zDgaySj>Ni#)6=H`&n~+idy6@Ow(9h@8R;7|7uloUjXA)Lu`X4iyWf;^*5y_fbS>wW zxl!oyJkOF-FxY`gvcUaYI%B)mpD~G^=z|VJOS$@~L1gZtCKo+%D`0(PL100%SO@p4 z8~IqLMYcVIt?3Wp)kyu;Xm!2#5gN4D(On<4jA{A!-nBE;!-1}!jDGz*hwmpMvxLzC z8PUeP`x`y7EEkGnTtY>-B8{>&HR6kG2D**1hn5950xXgml{spK6MUJac{1cVVby>@ zLioT3pxQR|gMbbzlbJeC^UU0F5Ga7{OCh!=ahCyyw`gWio+5t6>;ZYu-na1){`F6XxliggGvs+tI851cabThOLNf6s4c z?k;8pFiB*2JZGttu~gi5eWDeX-?YHZQ|aTgbdY8&GB$$vmnZ@1C*rZRRQ?TsN)I+PbJ~gB0Wcd34rfEE_U**NgYWTxT*{ zyk|zR2J6l>!*p00jPXss5pr%fqyZJF;e~Or!!8W|Lc?L*)&arsMO?=R8+W3IEiDN1RFvJT$9$wYk#?UyB%y>aCel^Y;bYIt} zoC87T$hpSZx=5Oa?HmwD0*F?{Jhs!<_ZORFRKK;l1+m=##j~6%RZMfm+%WeLWRNwf0v^ zG&!6--`$hHfxQUT47F@;{My~KKJ?}4y2wPWoz8v#-Qa<;_a&VdU(QIWB+K2*6HKeG zP}b7D&=QI??;oQ2TBTXi`DqpDEbFh-xItIe2@P;Y@SWhUhyM1@(J(OTWE>9ubzP_E zF0TpS86H>E6|%y%`}3oKrOa_j~lYP|GmJDNdRH&-$-z{m! zTB)2akL>=t0=`SUfmw)lt#&nIZTMm%nnHE^tU3U3Gf2u6_TYd2q|FQ`J0smJRb<8I zh4*ySQ;GXqY@qi)mJ368GS7G3?IB}%H;EXhm%GSiVgnDX{;Ho5O`DvK#{kA>;k*?mEg;u)Su^HYib4SLPvcNRhW8uD^$LQ zoJC)Y{gH;9PHV8bmYSe~g`7CT&kS=*8ek*{BWUHUq|K2PZh+PuwQyc0H=cuS?=k_G z1mHB%8mX=&{X3tzNHp%}NDH<$QKds&3k}q8w(oT;3a1ci`wVz=s7)6M*b#k0goFEg z+in$tv(o^OP*dX@;f*7M@cjfYs@}N~VZ~Niy|v^818vxe2V<8VD|0d9?X4X9f!y<&-!}XDY&P2rM2!8A^fm3 zJItqjgW4Rewncd~%0&(7o(&%DV)1f?8=uk}pym{h(bMR5>b!FVYlC}eaYqtY_l778 zhX@Ox>h6wOK<+QN3HuYha<8$-1z0*1NyQ zWHY39Cs8ZO4&C_4EW8B`Mo)&Qcdu8mAojZrxD+O1h|lLzxPpx>Bo}z_Pr%OP@NNL1 zzk(=yXbYGMXX$|TM~b-8MY&*PP+RDFUm(T(3_(sbB3O*yg|S2vp-UM39ta!he69EY z0nWoEU{jmJd;GP=cOKAgeD8nj!B&gKMauMsOpndqwIjcOkunQB*STf=MPLQv9H7u1 zaJ%RM!?*#0e@~MUhH-t}V~pLK!HRg2?4Zi3Uyu_|aRoz5`}ZrehDL<^wxraw$Pn(&+8a_kO=IU`_n^7mSH)@wJ}CVCH8$WYimxiFC03Sal|7 zPuifTc^xK_Ic^}pr!8QpMZ!>i-kV?~byna=24L3&qVO-I#tEjAaZodQ3=SIaf>;<` zK(ny}6?xPP#||{ITD@({eVuF?J6c1g;$FkC4#rZ4%Inm%z4ao|4-+TTFG$7>ptnEA z5WW`~;+6Y&yhHx!dBfdyZZvq0FYF3m+(Rf+xR%uDMIjrok7Y6&d*O@U2dN2Padl6Az>dj^X1)Dcr8!80CX_sj&)S~v?eq5ohY;nO zzYjm}cEJqnt`k}KfNGoRDH_B|hDyEaBm}s_eggWtL>873O(s6vg%6&FF5l+sG|Jn% z1^{RTqj~S$`s-iq{qwLA3@5MARuoQ24Q53SZ9|6xd;qL@f27uwxv#T6jEc!(Vilgu zs?%TwfklXdZpZ$|&b-Sxvi6eXB+nZN7jHK2FNNSG%M(fX*ca$j1c&ZE zd^^JWHa@`xv)J$$=!XJ4UtvEainesv-iMomV8ajI2l6_cP^XJ4>o4cnf&Slzl}m{_ zd-xB+qwO{ z#=Ni;YV2#Pe{mlFG(<DuQil zSRIG&o~7WHcqcQkmf)}D{k{mip3wOx!((`ly;gXs53-ZK!}7^S-4K84T|$bAq2} zu%?8bU zC%PZo2-XURhFqo7MEIGlSW42_wWz7T?jTv&jj{UH=eW8-NJpoMkCqQCpVM zx_<$|{mL5srq1BMN7cp<>Uv&3lEcuI%Al9$i@WA

    G$w6@o@NZ}qzbq~#b{eDpB0}&VXsry{# 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 literal 0 HcmV?d00001 diff --git a/src/nos/doc/rurtcp/rurtcpp/RURTCP.EXE b/src/nos/doc/rurtcp/rurtcpp/RURTCP.EXE new file mode 100644 index 0000000000000000000000000000000000000000..0031a7dfc170dddad45dcca08c9fa2b54ee760f8 GIT binary patch literal 256298 zcmXuKcR&+cwDvtoAf!`8Y!K{-AlQ*2iXb)&2zFEy6chm=0a2t#FLsZGW1;9#v4NE$ zgeKKOmtrA6B!!X!$tIc1ymRmUzCXzN&0;2dW-{5?`&rN4vHvEt0)iksw2HE-z=Il( zF#}R)&&J~R{dTtK`fLbVN6w~0uSwY{gb27sJxP@5WT!D8HFy1NLJcwd3GP4jBy@{` zs;i+i^$}{4cD6Po0sGZ?R1d9MF(JDK)y4Iwb?_9(C!KFw=|al3(Jm~mEnUA|l0QUF zH~uTX57`dM1#*#mx*VV*@-cE9Q4bH*6KQyJ_@=*#F$raRTPB@>Am1`$T$!{QMW5$Z z;4_UY@%cQzjritGc!uDIZ?i*;Fy4v8W9y=;kIxPpS+Da}D%P#k71gszf<9scIpwh}GKwl8}p<56Zqre19CsMaW<%COyw6^Kq!27o?k0N!`NvT9blSxUMa zoW2_o!YF%Z9g03m7@^>^+Ar5+^}&}a5EMl|M-pEYT(cRKKf2sk=Z1cY zgAQC6O7@OiK_*=DLmP5VY=f*45($i6sAOVC3VnU$j`S25K|jFlW;(^h{NwmC z7-i4o>5s^8qo{U%;3(4+exq{=Cw!uJB+xrB`#yB`;#P&mc+V!4)I2*J&%FyV6jF_i zA{cMFry3;nib?Tig;tsr=BHvssm2Xj}FLY5DyP6)w&k`;j9lyNt-KL4sZqqp_&MAP7{pqhjE08BiaH~-MxV2UO$R+i`TCG$-ef7@0 zFaZ}6FSN&Bu5|A&aRtV=}v28L_0z;&gQYjeXjYK{a8wv;}~4}u6%M@3>{nL)A#k74A@#SS7Fp@EumDN*0YvX z-UQ_5))T6KAz@5!je@5xuBL=L;&pmmNLNdUZl@z1P~B_!C-H?)I3B62$uzy3I+-b2 z(a0~xxhQz4?>4|SrVO*vMH1c}yyJvfW_Jhi^4Y#ZT=T%a%o;YDa6#If`EzyVVXb$~ zi1TPQn^26RO?%CGqCFy4k@TI-=Na`{8#*#XVPLg9v&FHSt)=9(nkff)C?LNxc&qnS z4>7zMkK&?q;?;zxBhElP{G7AJzO>3DJe+5&?du4>GSK4Zo0@f zo$+N|Yb`#DSa&p@-U%qZQ11|<=B-I1uJj-5$?-`=GOZi%O}^cLD#$?v4b|i57@+=p zR2vc;L!UL`m1bfeL8ubmUJU86vNQ1b%KrRMSKe~tz!xpkJ?QE~+VDZ`Y%^;*RarEl zHN8<->tvYplep*G3s%$P!H<+d&10M(;TrBN(s!j84_!_i!Dpg6v0AG$U0*mmr@0}8 z|C*SpqqZneF#!>vYJP_6Q=6gH1lIy>Do+byEpC*v?y(7>y$dsvd!Y$H{yo7}#a3@V zXre9C>Hf(1^a#%L{+y4?-;s~}Zhx2Aat|d`v(9QC;SugW1dEH8maf7vQFIy8WCoKR z%8WP`9vU2M&3qWkbPZt#gpaudhK5E2;LnW>Njy10>@XdfMz)=xktd8ORm11U;VxCV4UhthnqH}V_TW-_Cl4SE~s~V zg?so6oqC8AZ-$h|Uo{iJ!uSg%Iz|wCd8Vj)7|=HE#h1*tZ-|{H1o|+qC^7aGf%8W7 z0vgwiBM3L>T+nnv4iLw0eeIhU=_&7!;;Z&k=7-}vT3@AJs(3e86t}hrP!sA)P~x7J z0%zx>hijNScH?S@#XBo9`!m6%vQvXa#U9_^Pel2?;d~To;T&*qV=Of5)g8b%bq7%3 zI__6okd$~R=1m%yo{^T(0Qu+Mb?|-rRdF7eW((tfP8#Dm=VQTUBYZ5dxh#(_k2}x> zX@?Vp5Acc7ABi%rw^C)zB4K9Bt!I|icT4c4Q;D8wZclHo6tecV^E{1~i2AIB8&aj2 z+Mm1Eia-z06kxq?wwxf-5xU?VaGXsn-?}FJCol_|ECw^xxbISLm$svT5(rFR0P`m= z2=%oJVGhm@S9Y=tzMsnl3%3fWhgM1$+qMeK3O!N}><}y}6(SFCoR|lIak5RYto;3D zji}%XzT{_g6MeI zUa-90tzawUBiOCH02sZiH(fx0*x6P3%1znlG5Pb^Y48xxzm?@9RVylW`|WCYck)!+ z??(=G^qnmzshR$xl!*eG73^ubYf^f@OaOEfN?0d+!ql5W#!;qw=;?si5`PQ#=&*or z?*K3K>_?^)J~T6cR8`_jDJaZl3No>VFRCy9rtVqPA0E-69t;RLD?nM70r|`}q2CpM-!9FDRe)lX(IsJ9wRHi5T*o7uyiRoi z+NLf*pS~m1AtsHvCFJUtWaQ*8K$H2myPNaIhS%QdHryzC?QfoXQ{t@;4XF{lq124FzN zQdh9p{lUKv7(Ky=j%B!5WQ=~m=m$o+Sj1sFQuQ#f+;4`ZQl!}NK7GhfPe)?*Ms~fc ze9-p}nJatb$Ni~R=VxCdOEtw4I97J2jIE5mH(Kk|9ep=DE#Yort@S4@0U&4Z2z~IJ z>J}7?wA2YZdFz~W^c0cCJZ5d* zROHu5DBTSi|G26bDfaT|L28}8;Tzgs1?D%j))cm(&WEmSs5mzQJ0Bodvgbsn0vhmnEVBdCO~Q876jk?|F@`k&0v(we^$e1ne%5w=4@(Gm9JP26-=5F zhcu5w`ni3(u7#kqP&P9>z|TLLIu=!>Ibm%*ET9r`!=p;^7|SeeG|PCyIVqEyp_|io zSWP%1tW(OeU!B~rMkqX7Ezr9%aH^+nT-Y=tbu&*?$k1r9xc7>zy5-HA zQDm^Kkk%}JWc<6g6J0HtwoyXS+Nc}u;`t!wLw zNfxn6S257w4xVFAlup)37vSm?iyvGDYl;RE>IW!3K_7P)ji_oR)L-y@iN4Rv4rEU^ z^)oDn37T2bg59=kp#U(#(p?80f$2Py^Zvy^MvAa1qwsIR!5e@&bCyV20*?rhsfpxp zm5bku0fyps$5foD#car88r%WLm*H>59SN0VgY3xK0nYI7#DHae*y&I)?H@Vt>FsZu zhlh0Tyj|BRYB~ASw7BWbBhW_< zH5V`o6!WZ4-Rr09Ll2eg14|qC0gFo&osJNC5X=~W(|;YFZZsD`5}h)n5QmyMxj}JQ zIaQa;)!?p7+?G&Gh!o#IZL`{R7CU9%>CEA7vAT5*fc zcTKRH^Y@VN;JcB9=sO_){qA9nd}qpQ$@AAv^~-ccbzmPAfw))O z(0ISLSM7$-`z+n6{o)3|Ksj(0i_Vqc16NKKD2;b|UXG7~Ki2~zZltzh4;hb(U+U!s z@68`y{&0B<(9dv1SR!DEraG~5(zW4?gVHekLqaXH^yG)Y4|+qmbv}mz$sYZu=tW;}-as-6G{Za4kIm#pMTLg@GlL>NHv0!0 zHx>F@Q>s0JxgM~xm@++SsK-ElKi&AafppV*U?3G4D0a!S+rNA$^M75pX}>_ax6WCY z8+JijJZl|otju0QEd|E8$(xK*OAF`r3Jluhcc$9pQ*rA`pPv8y9{wvm4i8JHV_ASv z737|#G!NVOn2k8)GU=CmK%9* z;CQFkc5H$meR$40p~-ZYjO4ckTd*JHohbUNg;J#5K76Sxd&*cRz2fFnmbrP#tzI*) zy3c95uB6otKTh0X8r>;fSm)aNa&iaqAsdk0?*d9%<0X%(TYwf{mV3Qq%KcOtpnepp z@Wfnn2cSmWbAG#*0^-(8YyF_|G3{5?0^J8A*}T7XiQC2ZYD!d%oNos-%+|B{m(jYE zi=&bSdte*HE%4heK+71fEBz%M_-FBN3B?7FM-|<-(keFGsw28lF9e~dR?BYdSjh@a zR}4h6at3+J?k%s3#l(Z0&D0KCnEM?^fpT1_4zt)=4oQ#ROD*~`fc~(6&fFmz9;L}+ zhXrJ@(LlCJFm{G7j6}<;Q#*X#FmW-r^98?^b*V?Nc`T$>srS|peLC+J(s4g0ZEi-pSRUHT9;o@6Y?t|LvOp6p|OPxki7{;{SRyO9?jDbAFYUwYE*H;XNZ+ zx+2c3oL!d9JA^+}t(qlGLTv)q_yW+~S8~bi0Zs^X)3j3nBV*Jj>MF8L(+n8f03{n3 z{)DoDK7#1PKZ7${zy#p#v8;A9gJMZ3a^W8Q9l-Pjx@{*v`N9)2+TFe1+OvkIkA;PyM@;VK${9nyaD~U4kay z#zsW-_pAv_2k~X6j&KqJN83hwIDeom3Ylc$pk|Aa2gnmF$j~4-sQw&lo)1AE1T&%^AsLB}ruC;@{zv*q ztSw}5BH0)7U}^zeN0dhlUKn^!1N2=d4n0j_6uhR_%rDmc3?u4 z3qQ=}nl;laKqHRe>^-wMdRd4CbA2U=-e;KIxj>>*`0QrEBfnzTw3p@!%I_7}ofv=W zH;izJX0Op}A>VNkB!eD8kAnxB=CF@_9#3)z(d~)m@JFTR_D-7QgcH`a_UE7M{ImD% zr&oJJ?0Q&C@6a$u>qDJ~OqfAlA)fxbtXzE@+?@h_3cVaQ zJF&goY^~e_f(te-^L!0ven6wWN;M@2*ujb_mU;e*yhd@$DrLJVRp;+@Dy2!&xZQFo zmjZE7O*}WSh>WSi8(g6gTDKvh(-T3h(q_gXeVa8SUKoO~ZIN|v~ zJq2}swpvyJ^b4-#CfXc}jlH0KWSr1o%W`+2xLA58%bkPMg_^{wv)7&KQ#g$HibI?c z9(T%|#VE)@1jegcOMu`)E(iNa zmt3kSP)zH2b=OyCSy4)EBlldK^dEk~B)`MQlaGkt*r9lyq0nC*uzSU}TY&L9|E4@c z?rg8N7RXh^QCY?as&R;)A#C6fQ4d6T8fSaaAwkw6>$xJ@5aiIvnf|>~+9iD_p$PSK zH}Tzm9Ovlc{*z2dbaqMayL`q8Er(k{(R2A1UW#y*q@F`+hIJ=SwS4E$lO^QKOYV+G ziiIVqV^>FnqvJW_*f2xn+UNiZcHBA5F+)B}w~sJdT~f1z*msLCp%K3CIZO2D3E`NZ z8%mWt7qZC?6DRz}#ZI;4gPPY8Vb%}U4{A*q$KYT1XC$J5*AoS8qvCLf&3{j51L=>& zQn9~-yDX4{R;|z7t4$^D*JiJLt`wrNkyeFdR(3uKGB+QTV`Al={Y!KGwMG9LWe?g> zEc{0L0Ll=G=Qt!i?V0to#{~8)I+I__!-;hqc(ckl=7)ykW91y5`9w_5+>LPi z>FGYm`8WX(OgPhvSv42#ci_{FyYSArogg=jaVm!TI_lav!lyK&;aCFq?2MBy#6Hj=4kx&l=KJmGt8Fy%xVpY*X+k-B5bk8JTUH&x&HwX+bNi|5d z>L?)Rq!H5Grgm1TqfGZYhPGm2fV%5!>o#NUDo^dI7+m#hm+VbH$DaX4cMYeZV^X`V z7=J2O8M6XLEIfA@N3J-ItN?VyiJEmwgYMX`ylTS0!!-QLtGa^Hb*(T17;yKRT@$(k>_>)+tkiHk11B(&Jd=oRkkqA!?yO7Q0^$v z3`#OxH*SsIlz)zR_Ed~e>Xsi%C{Mmv7WGNsrU_BFhbWYN_+px7h31>1u*Fdb@}900 zeF-D~{WpwkX|(h_w{4ZJO)PwNjr362jD-3X(98sfn68u34tyK>XE1!A3=lgwMGbz4_4H zFF+U2Gepu%$eSg)+a+WpB8cnQHpfk|q zAt+BmUKn4_hb~p!*43AiNn&dJ#NUhNV|lVk`0u2`*}V@81EqN~5C8y#z{pDtL_h_^ z?&bgnBS4c}4o1Ngc~xfdH`@=Ca}y?2>DjGm*{vH(k}hVhQN=kdOj)HouDaDtTe0)m zSS&pLb$q$B>~^ZEmeW}01|BC&;Zkm_vK?;DkmR{hW%${OCI(zpU$~rgS||NR^3;uZ z%G8~BGC{Z?>FJ*lpt>zBh<$;S3Fi7GVlPz!Z$>}WdrF`S@0lDD=n04KRQ*#ODQ^={ zmV6cTRio-JK(F6)OGpIg`0=1)s4^%Zgw5O$a5^+Rn%R@UBjw$$J-x0ymnb67xJX5k|A99Rv>xa`B6p|vs_P$auBJ$5UV;}>p^Dz$q)PUd zX(W>i4diJgO2RbKjPrX1O5ijYUq1GTz0l7p=p2)z`0-YxG#^)p6s z4_-XybwQ-@Ib7_ZGMdn5Uwxrm$nBy&;HnojuLERsb?<}LlW9g8xmXn2p+C~(XD4V7 zKzfEJiNVJS+JSL!_~)&xofAJ_nr;asq&@VKui)0dx*{q@(T_+7r+b(c?{noZ-ini zl~1hLp;nv-p#K+>K|;e%|0Q-uF!t*Bf^= z0P>18Hdd?F+N{(~Wgf6yZZm1Sa-~Y=EYoAH?d#FN@Ce^{zu@nyj=ep0O1kV2T)8LU zD3j%PA}1O)lLWHaVe6JHI~{QPC}MUr!umu=i1o41)62HFiW2W{x+0;*0otz6n&*5M<6A|f_c>G+2#BkcXcFeS|VX`&+NMBfUj zztC0?A&hV_uO0}azbz;>c}|44!_#=r`!bUbjYbWP3p88^8smf<7$yw^@_I~jC1WuT zi!VbG&I}{f7^P!T3pWg?^yjCsf4X6*16V2@i@Ml$L*FZm^f5xPXn;i*Jht=h@|4zL zByAX(2w4*Orw_LjM>YOW4r%3lRc>EQ)7rj_qbKP){IDP+MUnT~TP&JOqF$Gezz26T zq#CbYVS&%P;?}pCTbHlRy^^~09MoB9dxlPW!J{h%k?yW^P%{S~U+4^c8ZLS-4wUg}a zayIezgkC$c=*A@HD?ly^WE9mw>B#O~#c|76kY#nNz=|+?d15Sl^!(6O6~rSbw5#=p zRl_P)?6A!V)i9;Oq+!PX&1c5DKzOtwIMYRM-5HfeAu!#Tw_By9Y96)&R5v?hU*36-bN8S^8tYXKCYk(gi{}kzj)tB!Y? zPlwnGCXSI9k6hIL`~Z@!`grez;sj~q-9Tv&NsEjV&+D7$bCrJX(KQGNq1_lg4AGx9hGEmkrxp zE>B54eIz8QtH*~Qn}~hd#NXO4`f6jf9E6`1yb-Nd{~X!-=Qkkl>n69^P{l7qM!(lG z^)B`n!k4YSuJ-f-z0iz2rrZ=x@>e8s)G+P0K zHOW6q>FsSZg}uRihBu%Tc!MQ*68(J}!0z{_#6~Y+OR&V)65%*qlq}5#R&&JM&yw~9 zpCy|g)#|wH+_8)0>f&3to_FkSjT7N8Ul~wLBc9C-D5ky@*uaOl+8JT%Vj|}71X*9SgvWBL=$NrqHZJU>>!20X<45QuY@f9&X zL*z(;@au}puVzvh9k9=?M}Qo=f<_sI9a3~|L7w8{lq*-NN-WZDDY{^^1~C=mLER^cdx zpYfE!NaT$6B8LlL(09tUS1Zl{u zQ7Q*&XAak1XatB0;kh~HAIPd?WmZh-yiA(g)EhN>BXraJsWe`PpH8xLIR z?QMo@V@VVqi_%Xkn*S=Fqy2r~`4E`-vn?cyMDr_geo85p*M%lKG`E^lgV?`tU~7Au%-rRw`uQBiyZXQtS6fKpU@?t zG8E{lEw_cLLILG$Z9ri!@^9Z#1xU*Ka^&w_5&2#Y-u3&!F>e7lIk-PkSu8qg2mf z#0!&{a^73r&20F`beqO~sAb@@eO0Vk(ZT-jaQWXs_?%|(KI)7HVD#M&wQ8G4{XVLQ zAf+b*1Sj_1#+igtCL6|C#jrb=(wn-%%2D2IC#!%;p~`-KON^5plMN3wXq1RXCEM3j ztNg}OsXS8~5*ji!Xi&Xdc*aGjQamCo;`an`0lz097C|A-D@rHM1lJ~*(F$LQFW>T` zr_#L_IvKohL^0qr+WPW!q}fSW6QVKCU~$K^-|?OYT8hMrcz`jbd56r6vD5P9%twrb znGOHS7t1aB{ACwrw_g8*%()Ls?gJxULDQ7xKF}kLCz!8P+y&IOXunQ{J&2og=kHOw zrzOHc&ED&(kApBrkmKINsX6vIGqhicGo#N*`(KWa zJeIzEUb?)WdVeZA>Uz&Q<$xQJQ+Zm0#5rvThQl%VtOaK@`|8G~s`ixSNe%&e_mp_6 z0KO}k_QtebGdNug$UU%Sb)MVJ+hXEx;PO*lGec_zOu_jG9%2+&8Lic3W-QcnBPC<(9j=tA+S%`vTa~FwO2$*zB(q=Na6$n-zT>v&H@+L_ zhYio|UKQ`O)0}O+YxCJmOyavk$27YPKRsu7H0{PH34Jim9t6T0?^)U2rBx25OOoE3 z&*JEoO!oJjFLFGT5sr6A5VmlReNvi~*B1bJk~D&dB$D;2#D*u30ooDvh4xT8xFo|Z zT0;LcXnfzEyz{d7korn{uE0c8(c=b!jBwf{75JpTcd^=qAq^!|;!#kgg33#M1r z-RhVgL|i?w?&Vcg#1qDo^-lmDQ3@YszQQ@wb4-fa-;1hiro79Bj5NaQL*IS3a2DIb z>^ZODO@LftCO^BjLjVhpcQkU&f8Tt8z3rnFNpzasN`Q9xU z1N5a`-3ySfC^z`%1fj~lCUzPLZQl;-Kdb%$=%X`wC5$%gcewf&MJ;|i8Nsvxl<498 znf+9B+30bFc)G)ea6^avQMxe#GGk!4U(IwAGJDv2;Nd)1>Z)3NvuE zKgDvYRS0uB%P%4#z~9>XvGPOzv5V61Lixo)h4N`iEc(3gb0q17!_IJg;m-V&hY~W9 zA1gJbrKiMVUbJ|m#cIRCf+J64I}gW6RkMxvtDaDaBgEOOmRuu`BZu<8NWUibAy%j=`-v!8WTgcq_U^p_T{N3d?gq4^ijB#Z z(xT{rkFJdWfZ^{0l=PIej`WOgRRgu1_V$RuwM)`kK(9}^xc-e6>edD_;qC&L_s<3^ zZQBT+3~zl}Tlo$oRQxXIyi&Kh17mHxJ1|NDyRvtbV&=bi$QXg^io_3#giPf9_ssA1 zw^9%e8cMWJNkZ5}9|08>+q8(69Ppt`(xqcM$LCTdx_^eQTJ9A8Q_(q4)3!Yt)!NST zwjEzi5puUuP3QV&Zy^Y!{m^$srs*V_AF}DId3+P|15}JtWJI+&lQ*A_>!zL%aYEj| z$-M9fU4Kz;A*wAyGLuIT_tk01I+GG4p&kzD>qV5d3zZeC7GN5y(ZX8CA8S0LMtMk` zX?X>-y8ca;lqL3fRKWZ*@E9hBQRK_fcyceGxh>LNu{=(|AR$7a?m*{%(3L{n4}ePl{*al%pe# z%DNwt(0wJk(6_eQSiP9(Mhnxm>r-51bt!VGmY*6M^DUFEUWcmDK#{@l5juY7w&`0! zA~6laf1Jxa&Ivhos3wGS`e;Bn!_6kizG@=|5$*BS0O830Z5ZLood%n0Yif^w_Bk zzwZ&!=r8&nTBMxnhbKx@|D5ieU5ZHIZ!pu(zct@K{FW=aY3DAiyIfKAwEHn58O=5D zYusWI323iM4#c0kkl~At0Lm3~Q+SYz{gaYibB}E*4RR?nb0NjsX=I5JI?&)TPPpQl zvz~owYKh;hel*07=^phgR3allA0p`U?SBGD)FC(B6cn)*f@G^Vml3`QnTx+ph8`c* z8(42)!i%bB$2@K6*Bs{r2M_C?RC0Ges0um}65vlCLnCF=Wq^jtPFD(xK#_?6=!c4i zPp&Z5LnzXHMaRBOPLIP%=rJ0*D%GPmG@lT?lvAZq6`T-(*FoK%69rzYqjd)nO?6Vy zkkDV>#mi-b<~%d(oqvJf%#FGdIWt#6mvUZl#-%4hPOzPI0^eSa2nbMH!(R>FB0>H^ zeoS_uQ?$F@uDkMc0 z=3Fnxm4e9q0@H-kQmFO70%?)4&hWgJSX5FYg z%{>t`9Ah-r_i>I(=$&6bb1r_|cD6#aL)7P!M( zo4*4iK~l=0krMs^48QU_uIlhZF?z!%&Gh15!RR)h%+GZ>iBSxn!mq%hpZh94mEVQY zCn*hUijR>cpUzM5MljOj>+%hZo;{q&2aHLAqaJ@5mhAO%;p_8vV#MVeoOI`(!srp- zpT313jZr#3fIqqMf7)P#@Q?G0u+%PhI{yT}2BWpl%=v-*R*dHGgRs_w7~%OR`Kk{5 zG;B}CFy8SNe+HJkI`a$vHs2PbBCNGLd?$=<@$X`-d0=#&pG|+pKZMZ{{=fV%^HmtR z^6&98vAE<>3jaQq1^T-DjwcWJuP~axIp$!ujEi9pKbPNz#j7(b_<8&xjPkJt8u*hK zrSTgJ%=yH{`q-JA<~L#IXM$zD_|4d{Rv4|}f8lSyBFkkq|Le*@jBxyKqFww5jQ&E7 z-}za7|9fj4Tlg=rR3UcRt=Pdp{~w+c*61`Yc8H$%ykq;M_g~dt?A|+e{56Qz-|2{1 zdNw&Mt(XQIRVF&Q1+>y~-SJf7*4W$lte`=N>&?(yn@-W( zVtD&fkMBBNOCgBEVivmg1Il)DboC#B@6<0%Hkd7BhcFIB;~+sqt`{xy z@Ka-NTK-1-W_@^Mry-6x`)jUvNSqJBzlMGlZ=sYXogCNxq0zlcDUsoCKfu?yS$nwk zo=21I>^x~rTSyKUZ9Nk?M41)ur2&GAkFB}ZdPPGz$?bli?0(>V?Z@30s|xa?o5SKefmMsUKyLc>2l!$)ZOBVhuiKZ+p!TK;IA->($S3T~NCqrXG;oV@g8dvay{ z#$g<{d>9zVS2$HSvdLU-zn{|cBa$I*oVb)_u*I+B#FAOdguJ(Y`Qd@aVI2~3ovObA zcLf$WqNHo-QdHdni6de(5LTZMbFK*Ayo)tHFScWk7sp#gzLR#|2p^p#+_j)Ln7e=9 zonjLC>uu2%XXLq0zHtq_>HMT-XXlxf@IO-D`~m@ap+WYsi_vEjFDTV$zoyu@bj zX(1-iG3(t#HE~2JvnSncq;Li6Qmn{fcYzG2Up~?;Ef%%>PI;iYmPM*SNX5?m`^-{; zA)SSp+8Q5xg*^$R?>=n-GF9pX;;so&Iy^D|VokkKjd?v{lr=)6sbyI?{}q~FVqb#m zoPPlQgK%&Qp|cu2+KK!pDI&BBoG}T*MZPdiTPBlfv}9wJMhkEd?-?y|gf^mihua`{ zHli^a(P)iiwQEK+dL!a_Lv`s1+K_ar8fP$dcM6w7>6oe$9o$XajpP^;10L-+lBL+C#Dvhe`XYZpu4 z(!U(Bd^GFPI9gwloLzDEF88i}wq}|P1sRa7f(xC?R?7DsIxPK~t@A62AdFfC(}b^Y z5N}`xAq65}&X&cxKNPaMsddENG)TQCNLRgAeT;VAb|1~w;VuDO_WLRhDGoC% z6h~+}YCq}G?IeYGao0F0qpPy(m<48YRm4fVG=%T%48a<-p16cgfL^91AEBZ!QwnB7 zFq@`Q-}H+7=j^j6HD{}ZG+KR5dR}{(I!0>xFE@jB#r9w^Hj_2Yo*^i}Rs%gYgIy*r z{D|Fj(<^RQyfi_2ajS(QaU@BR{P?CKMUkpVtDdV!SBp24V+H0MPPw8Sn9<5H!_nk? z^ks-#cGJ+>r-jaMA#eIwygp)G+xn-n4t;W>lgFxCg9$%a$)|sQ^bTvF(^|-nzo`B` z`t+$CGkU+?xbgPb>>kVqJ<>W*8%tSVOkJK1JK+C*!+J;)2Lk8hbE8ts)JeA-AcnyZ zc5r_s{rn{DU?HCNRp5+%0(wi~+*WK!kW!4#c}24sN_UeKPJhxu6VE@juGrz~-s+{T z>!eHv=EJR0oY+#Tw~6=UffO&EEsd9I2x9t?=TZuZbFxjVY$8au=iEpMLy&r|F-Jn@ z*AZXS`Yu)q3onU^7Ruh($O2!iTPmQFlPek18YmyD>#NtLY-bEdEm4?LG7@9sWiMxF zIqZ+rN;R;ZQ;6F`8$c@4rWdQkU%nvkjC7W4PpqWj73sjFWMq*a`l|QMnwm)cL_j^# zp!-_0LBgQC29&49xYrFrvHoz4vqnExPnrt}N;=lL&6tdu*_S2mJabUokv+RxJRO_y z9rr047LTY6l>%C~VKVMUQ8-wGErSA2=ffwhlQ5-|hAe9SpYjGKI9@7Cn0D{ilxUG9S?uMct&ixy zBr}4M?@Lsf`NE7uJ&Qj@-uGo`Zu@1Kf4ew8O^38w%=?YE31((Wa3jh=g}A|Wob4*0 zt#hMreoOo5iNA3!FVRSnhWM+bk3=!*Ge`PPgW0|fbfX=9Xa8p<0*)Nvb4{=K81P5L zdt6d|{X(O}u42vnEx&y_ImcIT_1OBxRhMGmSL^u+?%80zYs&qRUu4tD+&NLpw)O7| zitM(w`mG7{%bEXp_^A97{Epjh)e3Z%wt@NnK@nl05v5Q&SeTTq*%C0fT{C-WprmbY z`fwj|ow|53iUACDwtm*QgoZ^g+u^-$#cs<@vMonNchwV}oDZyyi|gQ~EnnYEa9HG* z#t|#O0P`Ka3Hv;o0cADMjuEGDQAd86G!9T{#~=z5!>dJDe!%XqS^CPepFWY}0!>1r zZg|0KwC}BEWWhEm_gk}+yjLx4cV7~!yM9{SHGZN0@nk`jnv=Y@m*xpP&Va>>fSD(f z%Q1g{(GwHNs%8jx;|s?E0YhHR`$XBT0){Xq+4io zEuK6^7y~rY-w(3f<^+R+d&}e#j0x#{-GhybK21s{FKdfk(d09Lksd3^auY4g(5`@0 z(0;*0U^y&@u~muNzRF=j3GA-t4h&r8#JW4WgK79oZTAHzl-YtNq6zLLB&fZgTAjY3 zpy~&pwMbT_0m@B3D_gosY9aB|8J9pzv2nH6$IDij??{pc=yTG5;odkxDojX4m02{b z_E<=dOWQ4sK*f|o;)KrUs)-XJ*M1j5()Z_@YW7OuB=}io@-ylcH2EEkL;WgHP6^{6 z@m7Mi|0z{|ZA=|xiJ|O=`1PWG6n+1+a3lP)m^@F28MN=GYgMMe zzh~RP>jWIFql@qe!%#E_|Nit^VT+U&Nq)6Ya9Cs-c%IX^73i_e&j5pU#P><6;d!TC z>i70E0eyn7O1TEYJR~J&{?|dmC@_zhu)9Nmrhw28=b0fg@s#vd0ZRI%o%iottg0Kz zxr08@*4(vkk0Zu7*;hrbD=C*10+qx@_%Boh$O*v6Je?=rp$+@$AVfozsJWjG^JZna z3HBt^NdUNUdO+Kb#Avz%!pl*NxoPY&<=xy?^V?R>Ofy?aS?2d+=vm zMhWA0;V3k>G*eua&CB;{y~3*_8i@=p#l>mGI~m|9;pE5!!6Kz_Gp@|fSVGa$pAkXz zmC^rN;Zl!yX%OP~;^7PlIj2w~p-RXDROwJMPs>3&9E~$^AV(P`#_Hi>8JTW+?&y+F6t(K2I(Ob1{S>x&aLIhwh>)RQ{L$V!Bw zM5s05v8ltF=cNn?*QfI(*YA>)O|2(x&}Gm&r(3+6L?aE%lQeo7hK8oOJWBDrCkRL& zR!WytN*5khCdL}zVwu=LG`7`B`-T8@RK6{%%5Y-dPJ-4Mki>+N~nWJd+5!hU!jEZ??}wHR~7psJ1RZ&ak}w zzM56ox2Lw@ZY33w(5oU>A&LYMB=IbS&Pt5PA{&wR<9;i*QB-madgbtZT~&yF!)Ds1^pt&R(R7>g3{vhNW#pKtiBvmI*LBq z@Hvu}=|O~Bx+7+m_7co4t45xZIAnRaa%4R`rhch@J}`3ds{HZgKC@YweBUMtRA*Wb zbWO*<*T2l{t_6(Dn&;{P!Q@ztSuLy=NKYK`a!iSR<#f^EwIvJFi&<+^`U;49Of16t zsijZ5LQf75e~KbXf#p7*3P2mLSbzQ(puBpqq>0n>T~w8)<6Hfc>1P$0(N2ZWy zX6@84YfWGnR>P{nW_Sw53>3NFme|(y_x5x9EBj5xd-`kp-wG3|mvBsu&FpXNFY9l} zlJWEY&y{1yVtyWE`E|>fsnI&pbXr#*1cgRY)RMC7)!%E(reHl07_v{L(L71!`P?Ogh z^nPy}n<`s^bbNp(<)Tuc2bUsUms@G&f8nZ$)Q*Wbk3DyE8{vt@E&*sn9u{bL*o3yg zS31$@#`#zZ^9K?ES>1!|>*?xr#NN>n&`)T}OMUyvrGUIUS5=A_zAjtVezn2q_s^t+ z&WSl{#-sUrY0n$~40vm*H5`;B3T#3KHOzbKFcUa|O}g#mpu^U>9W5#q&vwAo-4SVt zh$7OSDA8N-xhnIC^$H8vL{3|`_x;sKm+>qkSzWrGXc_0bo0jRg>cE!dLFq zG4uXDFm6?ORA;O1YffD7Ma7#s=oc{=+p?-vu8+G`kg& z)=jhor7mj404gq(fGvP2i%Wy3z%1t=%y536=bQnlTi@^N_t*E_uFjnEET8AIzCWMm znIo3-y2R>T!-{@x#3sroA{cvDW!2-|0fVdT+0&e3xoa zP~$Nh^Z)eT8zmhq<#Ed}moH{b5?fxg9=Y+-o2&zu4MnS&XM`))<4f_JW*c}MBMD?M|%TmLZe zUkxwssuEOvSZ-A_yGp2f2YwwpOtR}YUzgSx6=6E`12(MxthkFL z%m;J$1v`gs4NWy!_4O{*X~FeQm4)4@e9pOl^_92myh;}m9%b!q3g&6l8a-e0%;nnK zM>bsFT{QDlzdD2Eb))~KdN|5y_G#AD)seovi*FAKntN^!TJ&cW-X1jP^g7NzaD;6~~ zf2-*)CYQD?rYI-RfO64?J#tRZm)LGnTrt%C&hX&x?c1(4ldABkbpscPx4&l9T>H1- zyJM>P8E4+>k`uk+?(iuc|LPdDD6K!}cF*yi?xn&0%vqlV@n>4@lo7io7q<3>?eO^H z0_!nV@Yr3|Gb{1KX^-6>>kA*-z4G9LpNAfsKHeR*=kbT8lO78Sc22bq&DmZxvTGB; zyUL$q$^J=a;ps%h?0Z5U92xjwa+mOjcWYH&kEnjU26 zSfY1Qa6#|B-jRK!{N7h{dPCe3hRD4KAyv z3@@jC8fbZdznWe9CN+q;7EN^xoSHK{So46QLXW9}*<=&hav=aC2TnxkL-)dq3g)tE z99@2N7Bv{Q{^VNVx(6G1j~~p%sew99O!eUe-fF>voLPGmH8$4gHA{Il66^nB=LRE) zFkZosyWIXKD{Szm?+h0(zKR;~A8u6qM$r> z6{|>H^z+D#k>L{sBNKDk)vOaC3)>c3zB_-P)%>uwU`v+Yi3Jq?Y@uaCj1#?MDvv;JJN`SX3 zEaIxBQL1$6c$+3FGuWcHC_$jlGi{*s(R_UdH?TQxMxZXQKXh99R?)~$TOCKP2U_W! zGxKamehltr1vrFKXYfSF|b!ZEV@?o%)q%C_)O0BQL2c>`@(d29(M=3q~Uy)Lttl~ zbvC<;Dg8KN@EEen>V_Cc}A8Q&$sGp_Wn!A1%ZLpx**^uZ_RB`Krq%SyfQwz?cq{?p| zMTmq&4UZNSHR`YMTmP7@?|m<1Srq(~-t=X)Ni)22Wl!IL$yI)@KqEwS!!EKDJ-_!rwFt-5P|F&Ki4TtC12+ z^kCo@Lrody(hhF1;;oyzcCf2{%Mn~X_gl@&rd@rlH|$#M_jYxypExvm?<-S=oP1A; zl-Hu`*4!vw#a+5osToRaTVvsS=XI++3e~IB1=C>D9KT@O9EoE1YWcz?@Qc0~7s{u7 zR~`^NnWA!{f-Q5RgT-05g4%O#y1q+MtO(TySkS#(WwECBTk|_P6sxAvRJ8}I6svX* zZy6+ZV9Tb~o$Smx?picRv2Gkwy@5q^_w^nu2>F}}a_lLp?G>n&W3G*?MW&X5h={ax zuGpNY&5H%E-FSE4a+v9qHLpB#vsLQvPl~(z7G|iGn@6lsO~Dp*lf4|(M_9pI-3PDU z8m_cdbvRbm3F217%6qb~)s9{6_bHEA3w?tHIdiJbikxnDgjxF7#i~+RYe(vLJRTP1 zii3m2Y6nIpweZhq~)D-_n9FI-t}GKuBBc&lI&j z`GO@Mo>Ili*?;DVx#8HsKlW8zm-Y?BC#>Sv_WdX{Sufqtpm<#PB*y87P5V2jot5?` z`ZJ5J!;y{;4r)&NPz}n8EAjm5$v-;pkAEmS`&;pHLG|*O=AIsv7%P6=>~{kP07LZf z11|RSeZ{LeWz>v!aPQQgCAS{k^U+miz2uE&p?T*OL+K>+)~xtAs_L59}0F?>^pdwP)@d z-?ORSoxM8&EkB0W_SlQ|f781+7pJuQHV{!ibno3cxG!qx(nt-f$k!y9{aN?+y0<=0crv=0?44k(5{9%#7tO>*@s-8VP<+EwWsv%RZfIDVDWIxouK zxiQJY>(j2cUt+&ys{b;kZH++~d(F^fP^ky?9m5Bdq7AEm#6IFDthp03#YTVnTu*VG zq5kyhZqwnb!~0qx5gqX=;a4dJ_$M#m-^-~k_61w4RPS}Bdd@riIFfR@GNF26eF?85 zl3m!y?S4d2H!-%O^R(%HbNmD5&I=3*K8nu|36;luAH0wMGSx8qscOwc)p4x&GVfd! zrGPgc?Q7xGpKxNI5VJY_i3QHj7oG4lNTyJRx$FbYuH|g(gdY{hZsdosf5rA$g|Tzz zWfbQQn(v*uuR!0o`=Z5_3$H}KanZ_c+Tb0mX1ep7L2iF&Y|VqJm~RtDYEsx%Ps$6v zcjLXTe_{n^AwGUGg?H1JqLd%4EBFJC`}m_Z1rPfR4E?elIfVtc`uhzZANw?s-Oxpm z%}K+Bm-(v;{}AnJr0^qHfqq^#r|l@-oD*Yqr1{_PCn{%@37R_H#|ie{p|FI@53I;tD^w{8HUtUTMys8(f*= zcImjv9V>s!bgjwe|ssD<$M-_%u2G*TwcRs0_(~~%4a<{9i`sF&WA`?LbU#0kc zE*8+^sZ;7Ve?UtM%LN!1XeSFwnguP>;Q22~t#I{qLyFpDi3 z;+hmSRr6~a&Zul+yg1b-7YUT-PfSX zWC_Y2@gM#0D1M~Q>fHT0eYqF=bh$*|tTfxhx;%exNbf#=Z!$ILKRCDg+$BA`H((b< z)no80Y|cV%mX5QMf5mT~qTxgZlFJL|A6=g6?PYi-(Il_HgHgV(*?yx)^|;yB)j zs}!u-g0=&7#kU6g7i`*hHOT*Zj?}fB3R-ozx4kDQlACv*pMX2Zt#B>2G^~H<%=X2;3VOziTMiuqvnx4yuM+ru>^kFKdHY zS^v%Xru+b<=?SLhtR?G6N*>pM2RV6uXPUJv$jY51`7%=d{eR{wXQvK7CMbB}==|iWb zqP*!1y#5}O*PEK#n;(z3n2yw8T?2dgG3=X#A;T5Nx@vEhKku>B7i;|wEM$wGZ607N zOy05^SoF zFZ#B;S#h~zkHXadN**_}>U2%zZ~AF(6=0`z)c(kv)BC1eebQsC4>Ws1bzQK+G^Z~_ zW9BWcX982;FJn24iWBAal|TRM=cw{3!$&744!Q-OHLXtToEUS-ZVG;V0=7ER z;?fkcQkSC~G&?rp`cyzoy4b^+*d{gk=Ga{|={oz$Dhr1vQ>#O(>x8?w!t6$K=M#4w zh<4}RXHA0w-|Mb>$nyJ1KZX5d;!$^|X5%VKTLv!*da0*Vf8pfR!eMSMKQf{^Hrb-cp!)-12D7=5lWM zw(wmkhs$~Jd)G>_UQ^*QGOr6eaQ{kz+$=UC`)oIMcJ2M1YezR#?mt?kUtDDfhu2Eg zvG!D5^ImqK{Y&9b(l3Y4p7a*dxNWN_t%rWZ~@$FL@Hh%va zd(P&4?WS(9DLw1E4*e6oz_}qv|Ip^)7T14!P*S_@rw!_f>XDj?8Me3Q)^E_xz(*cP z1ahIOo>KK2a>N&Huk?0tj~rZo^H#$~ZRO-%ZK0r;yR`DhoyF-RU+LYx)wxu|?`?_` zu3v9hw!$^^lXt_ZpdmT`hDu6l=dWwker>R*dD%?7qIjpNe#aTXBGq?>;zr8Mqj7P? z)6nd5Eo!`Fz`Pp1X$Jft=*r^HHiL z!&67Tt!bUm)Mnq*>U=zz-Q`_9U)jsA!GbTc?DoB0u{WlR+ckOc{Njhhl)lX`X86v_ z*xJ?bgJ=nsW1}FQ_OFugMZVWRzL3q|G0rbD1pu8ZrI@ERK zLG~-^BY&)mPunYZIQY=)V0YK!-=}vEzn!P&*Z$s69eVLKS<(eV!o`it^#axJl-$uN zcH*($@3uOBzgARxy)I{K{kDtWyrDiHdf~?TunT*JZWx5B&u@gTwEl8niqi_wPp;%f zZt=D6EQ;>4>TB23y0ko&JH5r7)3&ePyx{J2UhkBktqX4DIPA5u`Fz&f52!y{c%sNH zOHaCoIDfgMLa$MioEybW8w@9Fumw&A&Zn<$Pv92TpRSNphyPdoht7S#S2m#CIty{6yo zk=zVU+Jt4fbW#Z?hEE=(^sa%t9Fq$aPEzWxdbQtiipj6uJ4jr7r|ITictcf%_TZPt z*gr2HZW%cB-p$Lk1z)VO^m$5|FY>)}AAZ<9U!2F;pZ|!uqS5DS8a=M&a3hw=ttQ@^ z^mx~kpArf#TPD~ZThFh?`dO1GDtkm()Wi*YmmAf{4SY2!YW}Cyi<;C|xmfESEVrub zQ}4|c5zjKabu-h4r_LBOJF80C7+#?7=x{I42g=3MJ3PbRIu+(6*Hj0omNggt>&}Q}tr)AGr}FO|v@%bq>-*X_b_wiz_}?WDQ-_-mwC}7d2uWnKvm8_FI)!`OQt>lQ!*yL`n*}vY z_6(k^7v3!HFQ)JzvMVOG_$qn7xV5;kf0_29wW~R|In6CeJGM5=Xc)B4*^qjy_IYaY zjjR3N4&VImD&MEIJK%>TrjcZ;`2}+B?vQ-*$k$B=+8U}zjjw3LX`p!6_s$Q+O}@(S zgrX6wxwE;YnYtb3@snc*)sf9x%=yW-;}v<&`d<6>md7Yok3e&ueD4rB@SdT;@yFYZ z%}=vU&l@7wPH8ncW>~-0kkTy-`Pb*Ew;vbR>mFzJ%_{5?ZJKMLuyTHsa-Gio^i!^6GQL|Zq)lk z6X*FNRs6vW!@=xaL2|F>&8)$5L)4ERH?pRLFFK?CNX~kt@y^0<@r`WZMs>! zN7@|K`>3RsyVxU&f3|DI!~-KM?zg;GwOHIp=Z;+xhCyTxH5mfGR&K zgf`LeF4&#>Kd^tkAATXUfAz?bK|w^y6V5L&hx8$bw*NSENZ+S7JNSCPnS(*fEu#8w z`8@SeYAT9u3aiBKoZg%6x3s2rbQ<;P_38__`5Mh>?#sQ`2Z~w^ln-U)+*@?5pv$C^ z)zax|I+o;>>ix(;OgK6&3{}~*0)C9Gn|#P&!+yU;QC(QOK!KU!RGs(w5()Pyv)n&>fm0* z^Gjw!7dpzSjUk^}uRAxizvi zVn_JiRrY&dnb_dGcm3qPDfjuqPJxMC=_hwZXAMNn&wxZufTYH1E9qE}sf+oNgr^^1nDo>t{vY}oaQ^{KAy%e%JL zxA7?I;GTPXesixQT7%uP)846DMd2|;j|v_X6svq2SASHAQ@{LFu!Qn4 zXwm(mj-sKWUww#z9@E~(1a(2+)^?}4b>zC7_;_mo9X%Wt+6Je9ke6Y`e?jt+hAkPnZAUwuP6#97u-InbzkV_WZA6jhoKzhYHf zOz{)n>qSv4B9%~>$gV$M*cJuv9yR6k+YZ@U{HSGX`C7w3=u3|ToI%@mTkWF{xb0d4 z{9ph5?nRHZ)xh@mt|#i}%*7pK3Byzhu`i)w8SMI+@LBZVxA} zgvm|Ar3poKKDwr-Yj<_mH8mIpSccaqYqRI-diUnZ{jml^C0l$ds87xhx_7zxVHV&0 zoyLbB4fLJNvTl0t(QwHx+1=0dgT1{Y*R~2`snBNm!*gN1UB&fP{M()D)(*C2bXwmo zR8wy>y`c{ct}7_$Nuy#**5>nK^@hH+4aC)g9FtY~Id-~+M#sQ9xz!dy&~L>f4LkeR znz!f7DSDPuXF|5O*R@xQu%|W0-OgF;xm{VhbE1`;`;NNu-TtknRvp_pcWhe+1y8qf z?(|TGhWDzDyWh-OS9EV@Pr-9>c7IarurSN4NS_3?)GxOQGag$O4W{>WXFhf4%zoP1 z)RFxd4)Rilz6sd7y%UPBncv941$Xi(pN{@}>^lubBl=Sp4LL0hidNMVeOAy-Rrk=G zn@izUzMA48)yIY`x0|QkRYw|xBUz#cCX{|wh*JMGdf{%~AgeA^wQg`){w=KM@#C5w zxr(6&LqA`*_qh1h_kxDmgY(P}S(A4T-TA%YClf5XzHU}{!@~ClaFQ?-)JqD60<$6p z?dwe*y_?u%ep}u<|Gvj9*8!6*;{N*jQyw`cBlm}9$$85cEy;OVH{C$xEZ#P$pf|9f zL6Gf2Ty*Zar)bTKw2{E~hhr(s<&X?uHJvX9xK?k0r>H~;R zZz63_nNd!~5AfOm10fBnhJw- z{-p-H>z7X6I4QsJsY*MNmH1zF|GRF>P4j(QzPPxzcep-CweY`frXLnQXXQL9w^DV# z6Hx9o!l97}&;R`&7%r@Z+aGo!ZKINug6*L{PqdwGP=sJCf}#xYwsDMk;}^Vs7+&X<(Lm*7 zOdE^|$=b9fCoUzc!ExipE$Z+$b7no$i-(+bZ}#gKhHT2-ta}C1-}=3ge)re#vo~d8 zZ15`<_T3(>3eeN}K~G^!LYV$|*cwAK8{07t3fdUf4=>jL>lOB$Il<%e?09@DQL&W; zRy?qLFS+jy$4P)4XfS9_#?^RWF*m)6y-cxv?R!;F?8)W8E1uo1xYfhY%-at%z!B%p zy>-oMVF*l4J31S9rK<5v!tmsQ2?Tu;=L)%*x@t zTNmE@c<*rGANa0DOpJaEzfZ|(orS^c%J*stAK~!5mDPHnwI_>mj|yMlZYBDDHEUgA zgK%&AYzmEHUyZREiyL78^bT`YJ=7{#Q+pqNX{MB$?y9Ho1NFVF^I4d@y||$`go_pX z^D)*{7N3pH5@H8h4=88f89MN5@gKuplsAX>r%S-Mw47@Cs?+PsmIq*gBTK%h<)^ zS>aYZp{al;_IENjGqZ)sZ5_;c!NSP`8~Q(c9?ya2XX_xCHtEI92|S*)kjI+|w?oHT z!p$jgKLDSKTTk?{$)An}bbtY!W};7a@X6ZSY|_L@!8|wK9P4@34$GZ*;g*xEcs4MF z70;0u%nRKto%?oJte3X~4&zQWonh-BvKI&)0tAk}Hg0k}pSRG#N`SjBGUYi>=7oIi zG+`lcsu|D2%xq1ZwZNKZ?o%h3hrkU> zkP;?ea?oi?&`j(VmRnF1#$!!c=*#$ ziV6_Th-#0(oLDcpdSC}wmafu<=`+pDc!|!be%39HwiuU%o#S7|CbO{BTiQScrS^8s&9HaRCmRTX%a@7O4D|wsvo2F zONhkW47unvJTL1Z8OsTqODN>c3)D(4ArUHn*G`<2Di6!$z@Vbn)Sc>*m4Cc}dZnzt z9SvPp6W{P&CQDc1QM%|DJ`j`Prhbel*X^`36{R?kY0+sMJoPP+r#Y<6gTI5cAWL^8 zxw5C@ zq9fh4bU38oFHifF|1$!N*``A6v`g2YBTIvY+DV5e#ORz8YUP2sc+8>zBA`-T60Y-( zQJ4A<9>QRF+5W5;ZCMQJ<92w$ikJXS-AVJ$iAws5x+KNp>$7Pa)up+7TQVGs#wJ7}F+Hm+#U(H!P2Gt{<*>X{lrRwcSokVdN_0M_j_JW6KSs^*nIbPj;e|&A z+a-m1;^DdyFOBycb(tsA3iV=d;+#zv2C&HeC#U@<@iRoxtBSk~FHBpO%BeHb6k{YQ z!%YwaTD;Ich%6=JiEp5xC#Mee$&eEr$#y^<5MwsYJ8c2+3!BV3@i`$2r@0`A@krn` zlDTTcC#&gAZlAmhy)dl%74|VaxG_%CXtaOQCO>C!Ti$&UxjXuKY0euFYa-&n8mr_}Moy z(kxu?Wb4Gb>7~SLigY&52PB)CgKx#tKPTfRsLQP28=L2C{(*eCa$wkte2EfG^jD&eJLqw4zy>7Nq&lSrrE6}y0d?7#x%yrzMcR3AF!P!1pa0&7}IP~lja9`Xb3CVZrFz` z@zF@nqv3~rqEnJ2^z=Gs;x{shQ^#v20*N;!Ayvau7ZFXM>Y`X39NX{^d7%-lzy!V1 z?}%VUFz7~2SsIzeMk9`2g>mBlr48=TdzjF5JPs#3thu>C?`pc+}>rJ5s`@ z!SqWf2onD~Hy&e0z{^L_Lv}bnn@wb-ic)5m(R3N7Wd6echAkva2Wr_NCpm9=tWs)o61du@V|ATj8m;8EXOs4k9gv+B$9l8y0`{> z>7vfz(8T{4?r)tbGh7>CiJEJpq_UG_Y3zcHu3wwV7EHh3#Fgf6e{ave7&L0*<^`|I zQL{AX(9~rU@R=Hzsn=aZ@5+OCYD%miO-SUDNil9hXeo$Jp3L3JK4`uN>SAyCx$ePJPZDy?chH=D za0P$o<^@7B-{zo%Zp@Df8=Kes2#I^L53>CUMVc+5@Iu5gXGumXSCOw)(p|KnD|Hg$ zjgma`J=2Q#F%Hqm<$d6Q4!Y6Jb>1)QLKosQt9_FsUC!s!rJrYxZ-;0C_~FFgfe24d zjv-l+6*W7->&?_TS7qd;5i&R7w2U+&Q$kN%ePsgsAR^;_My@TpAfCuuYC+;MTi}W< zuO!twFGA?Hz-mF*Mvh%yzNRvnkJ!VlFG*jpdFk1Fo(;ReO&BdBIVCdx1wtYvI$h|{ zNe@iCJ|9sKrv*QRd*U%VJchdyJd<~vAZ>!W&+RUHy7C~;aZl&xnTX%Q*acS@aqvDM zL}E>&i{`kSaOU*mZ$VVCg-)|!MZz>^-&-;lwGw@C8s+F5 z=DV#andI9Tqb_<|jHsHUE?v~=HWkKV#y>*j<9Q2g@$?7+BJpCK;uTN}BV{=H$_Hr^ zKa=kezY|TPlhOkLO_JHm@zl9Q6Fr`lD0j2)iN7L^%S$7+F*JFDh8>C7Xt9EL^EmOk zglNs32@Md1()?IaIv-xoM6v}79BT6s0l9K+Ofp)!8A$$%73_n!tZ){zHH+v2Ashy^ zZe|yhtep+(^lI(!woV764Yr*kHkSt89HaT+@#UBs+x zF2qs|b|FI+bC^srDbQvt(Pl)em8)Swv|{r`TgAjyvy3#*-9@+$qLy$bUZ2e{viRFj zWH$J0O~xFsC#?|1Q7b4z>?~MA<(qYEO^Nw5q#bgu;v?a|CfItC5 zo0||Ir*1u>Kkp!DC)0x;vqvtqCzGXa!ZGJSGhnumHX!g^xl3b+t+WKZK~IxQiPqWd z!!ivW$-{XCmjJR=RD31>$*c9KUk8f-D8Vf|`CoW=e>ejh%bg2Tg9J z6V8&7RC=Ho+Vaqf!7-|pk*MvSv-#|Uf=DsAgfyZV@hXh=4u}OX;_O#HjY*>ibtRhj ziPirCwolg5ZYkiwkm0iZJ6<(-uk7lbvao2`Emx^NysIQi_Zf=^$fiFh7}FL37d>-)39TSiTDEAvz9E{eqO$WX(NZh{tMg z#c9Ksm|_+Q_OSy-XXOy?P7p%C@KDq5Si6JW+2t+PRIeKu>i`)96&!t0tKPA#6yil)_VN_UGTWF zbRo%!Aex<{IN_YTBAIg~xM030*Di#n2-JP4D4!FqIim#Z1)5GuQ#aD8PIr$w%*n{# zaq?)HJh6)0*qo@|rS5|)QX3krZ6eJUB$mnSd=dy*g3*HxRUF zZ{AP_wkC|nK;ZcYAQBCsL)` zL?Hym$ns_AHO5mbKUhAV3NnUc!_2~I_EsKcmyZoE@}l+m6uF_2aOT^f*g|y3z2zYs zBF7q>Fo$SUr17V@9DNfFeFEgdF1I|92kt(gGM1MpO$TWQh~0g7;&{G|<>By_zI^o) zG`enyImj6nc8rXH5tH%F`J~KU2s&g&B)TIp+KWlERB3V-O(N>z?qeAM5)N;c<~kzJ zQ9fE_z!OQ%J%`anhP7oad1SVemca|nF^8JfMyJXI4v1|Q@meSpA}aI6?n1X|oiHaF z9_bf77bh{6gYasU84xrl8vNbZObqjGyBtLwLV8H33Xzx_KG$5DCY9MbN2!&Y*yRjk zWk)s=P>4e_#iP~)E}P$_NL1GbXv7H3WO(6g%H({Sv$u(=KN}H8+y!-cx*u>tWVFdr zVpCXh!1-lk>&}ZkE&<8C4GbijM%Q(I8e=UuWGDXg%xE^xKTp8S>rBt13H8wwsNYt1 zsXGyl%ka=Bd{8PAjyglNMUiIjTuG+%$-x8xv%t7vXaR|&{29AEoY)kO%a)KEt2nYC zNF3vwQLhvt2^?^`A0byTv`5Q6Beo%Xc0}4S>JNZGqBdDgs7qm$c6e?Gxnk^*_cAmP z%_%oLZ$l@^Ez4aegq61A$u`bmBr7`gFmZbah!Nx?tx9iC2;C0P4ypq1NG0d6-d0+j7?-OO6L)0OM&3=T3DHgX>+Bi$;Wn zBS*_4I$)_uyezwDImzbQlV-U>pb$@=lQl<E5L|Zb33LH9M)n8pDG|g*#-oNt z2gWUvyJUiw*DbY&yG$E87+8`k!?VCaq)N9s@?@Zw>{5-lL=!z1#cF%bcJ^n9w`H)P z6N)r?p+})DSfpbtI5~m|4PIvxIor8Y%hE~SLq!@*wb9^~##>3#V-x@67w{mSj7Vuw zD}9_{Y2ZfKrAcDRm@v@Nk!QFKb2bl+2Ib%n^t5fnj`>xY1hK8T7GnT2<-=Hxq_x& z$+9C-ngMvx(P(A430R@JQ07OtOoy^vyWf20uw?L6>QXmwDE=FXJV!QoBeVkAsfxTH zpn$ths&wOuQtjZGF+9`44j@Ypl_OVbS(Z-R-k#yf+tDZgT9Jlgq4C1ojiBJqe+}zL z8(^?wu(bn5PH~(*(Ycr%L(f zWf{L2KBBR}mG>@%r@ml4p6o9Ss%mtJI}nBrpbT9}p83`h=!M5Wgyc zUZlkA6Eb&N>yZN?oQ>x1TnX_WU!ueAlLx~R+)(3;^pLJFk~h`f=oiXj)b~WWPA~k0 z8IkM&C~UJm&lr{1r3ucj054H*@4V8lQ>Ez}{7h_+ZGf*$CSxJu;mP*m(A@W{D#>jQ zfShnTB#69F7cD6a_dm)@boasY%4L#`inK075rhkr+VB#4l0o@988tIf;fg0a9R-I9 zHtH@+A)3wUwKn+)MX5wmi!|4XEDhOYb;J`!2TxJX%33KrKaI!5Eol=UE@$!zeyhj9=f_$A{kc(N$@4fy%n3&~R0L_l*8IIT{(1akFr zGzx!Oqs+n}5U4>XF}_jUh%Qk&uD@6Hg%O`NZvKOayxqnp*}yaM&PDuspi4 zDuRIlNUlC>6kd4LVQ}Lhe6U{*2# zFlpQ~vJ_PH33Q^vn;5hoId#|?31{snlSdGlm2Tj+*b%uTCp_zg`qFEF6$9XM1AG}T zOfM&z6T$g~hi*oE2V)TeHH=FA%F8N6euWPzuwn-UeX9hb*3&GEUNIW88Pt{&4#6

    L(qW!6fBL&~5K5 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 z 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 literal 0 HcmV?d00001 diff --git a/src/nos/drivers/arcnet.c b/src/nos/drivers/arcnet.c new file mode 100644 index 00000000..ea9af863 --- /dev/null +++ b/src/nos/drivers/arcnet.c @@ -0,0 +1,118 @@ +/* Stuff generic to all ARCnet controllers + * Copyright 1990 Russ Nelson + */ +#include +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "timer.h" +#include "arp.h" +#include "ip.h" +#include "arcnet.h" + +uint8 ARC_bdcst[] = { 0 }; + +/* Convert ARCnet header in host form to network mbuf */ +void +htonarc( +struct arc *arc, +struct mbuf **bpp +){ + register uint8 *cp; + + pushdown(bpp,NULL,ARCLEN); + + cp = (*bpp)->data; + + memcpy(cp,arc->source,AADDR_LEN); + cp += AADDR_LEN; + memcpy(cp,arc->dest,AADDR_LEN); + cp += AADDR_LEN; + *cp++ = arc->type; +} +/* Extract ARCnet header */ +int +ntoharc(arc,bpp) +struct arc *arc; +struct mbuf **bpp; +{ + pullup(bpp,arc->source,AADDR_LEN); + pullup(bpp,arc->dest,AADDR_LEN); + arc->type = PULLCHAR(bpp); + return ARCLEN; +} + +/* Format an ARCnet address into a printable ascii string */ +char * +parc(out,addr) +char *out; +uint8 *addr; +{ + sprintf(out,"%02x", addr[0]); + return out; +} + +/* Convert an ARCnet address from Hex/ASCII to binary */ +int +garc(out,cp) +register uint8 *out; +register char *cp; +{ + *out = htoi(cp); + return 0; +} +/* Send an IP datagram on ARCnet */ +int +anet_send( +struct mbuf **bpp, /* Buffer to send */ +struct iface *iface, /* Pointer to interface control block */ +int32 gateway, /* IP address of next hop */ +uint8 tos +){ + uint8 *agate; + + agate = res_arp(iface,ARP_ARCNET,gateway,bpp); + if(agate != NULL) + return (*iface->output)(iface,agate,iface->hwaddr,ARC_IP,bpp); + return 0; +} +/* Send a packet with ARCnet header */ +int +anet_output( +struct iface *iface, /* Pointer to interface control block */ +uint8 *dest, /* Destination ARCnet address */ +uint8 *source, /* Source ARCnet address */ +uint16 type, /* Type field */ +struct mbuf **data /* Data field */ +){ + struct arc ap; + + memcpy(ap.dest,dest,AADDR_LEN); + memcpy(ap.source,source,AADDR_LEN); + ap.type = type; + htonarc(&ap,data); + return (*iface->raw)(iface,data); +} +/* Process incoming ARCnet packets. Shared by all ARCnet drivers. */ +void +aproc( +struct iface *iface, +struct mbuf **bpp +){ + struct arc hdr; + + /* Remove ARCnet header and kick packet upstairs */ + ntoharc(&hdr,bpp); + switch(hdr.type){ + case ARC_ARP: + arp_input(iface,bpp); + break; + case ARC_IP: + ip_route(iface,bpp,0); + break; + default: + free_p(bpp); + break; + } +} + diff --git a/src/nos/drivers/dma.c b/src/nos/drivers/dma.c new file mode 100644 index 00000000..763817dc --- /dev/null +++ b/src/nos/drivers/dma.c @@ -0,0 +1,440 @@ +/* PC DMA support functions. Copyright 1992 Phil Karn + * + * The functions dma_map() and dma_unmap() + * support the virtual->physical address translations required for + * PC DMA, either in a real mode machine or on a 386/486 running + * a memory manager with VDS (Virtual DMA Services) like Quarterdeck's + * QEMM386. + * + * Only the "lock" and "unlock" VDS calls are used, and only to + * check the suitability of the user's buffer for DMA. If it is not + * suitable, the automatic DMA buffer allocation/copy mechanism in VDS, + * as nice as it is, is *not* used since QEMM seems to have only one such + * buffer. It would be begging for deadlock were we to use it heavily in + * multitasking, especially for HDLC receive operations that always have + * to have a buffer allocated. + * + * So we implement our own dynamic DMA buffering, using conventional + * memory on the heap that is checked for DMA "correctness", and + * without limiting the number of simultaneous DMA operations. + */ + +#include +#ifndef ZILOG +#include +#endif +#include "global.h" +#include "dma.h" +#include "nospc.h" + +/* I/O port addresses for DMA page registers on the PC/AT */ +static uint16 Page_regs[] = { + 0x87,0x83,0x81,0x82,0x8f,0x8b,0x89,0x8a +}; + +/* Address to check to see if QEMM or other VDS manager is running. + * God, I hate peeking at absolute memory, but Microsoft says I have to... + */ +#ifndef ZILOG /* Nick */ +char *Vds_run = MK_FP(0x40,0x7b); +#endif + +/* Structure used to communicate with Virtual DMA Service (VDS) in + * QEMM, etc + */ +struct dds { + unsigned long rsize; + unsigned long offset; + unsigned short seg; + unsigned short buf_id; + unsigned long physaddr; +}; + +/* Descriptor used to keep track of the auxiliary buffer when the user's + * own buffer isn't suitable for hardware DMA + */ +struct dma { + struct dma *next; /* Linked list pointers */ + struct dma *prev; + void *p; /* virtual address of user's original buffer */ + unsigned short len; + void *aux; /* Virtual address of aux buffer, if any */ + unsigned long physaddr; /* Physical address of actual buffer */ +}; +#define NULLDMA (struct dma *)0 +struct dma *Dma; /* List of active DMA descriptors */ + +/* Allocate a block of memory suitable for DMA */ +void * +dma_malloc(physaddr,len) +int32 *physaddr; /* Return physical address thru here */ +unsigned short len; +{ + void *bufs[20],*aux; + int i,tries; + + for(tries=0;tries<20;tries++){ + if((aux = bufs[tries] = malloc(len)) == NULL) + break; + if((*physaddr = dmalock(aux,len)) != 0) + break; /* Good buffer */ + if((*physaddr >> 24) == 0){ + /* Good buffer outside bus-accessible memory + * (can this happen?) + */ + dmaunlock(*physaddr,len); + *physaddr = 0; + } + } + /* At this point, we've either got a good buffer (physaddr != 0) or + * we gave up or failed (physaddr == 0). Free all unsuitable buffers. + */ + for(i=0;i Copy user buffer to aux buffer if allocated */ +{ + void *bufs[20],*aux; + int i,tries; + unsigned long physaddr; + struct dma *dmap; + + /* Create descriptor */ + dmap = calloc(1,sizeof(struct dma)); + dmap->p = p; + dmap->len = len; + dmap->next = Dma; + if(Dma->next != NULL) + Dma->next->prev = dmap; + Dma = dmap; + + if((physaddr = dmalock(p,len)) != 0){ + dmap->physaddr = physaddr; + return physaddr; /* User's buffer is OK for DMA */ + } + /* Try to malloc a suitable buffer. Hold onto the unsuitable + * ones to make sure malloc doesn't give them right back to us. + */ + for(tries=0;tries<20;tries++){ + if((aux = bufs[tries] = malloc(len)) == NULL) + break; + if((physaddr = dmalock(aux,len)) != 0) + break; /* Good buffer */ + } + /* At this point, we've either got a good buffer (physaddr != 0) or + * we gave up or failed (physaddr == 0). Free all unsuitable buffers. + */ + for(i=0;inext != NULL) + dmap->next->prev = dmap->prev; + if(dmap->prev != NULL) + dmap->prev->next = dmap->next; + else + Dma = dmap->next; + free(dmap); + return 0; + } + /* Success */ + if(copy) + memcpy(aux,p,len); + + dmap->aux = aux; + dmap->physaddr = physaddr; + return physaddr; +} +/* When done with DMA, the user calls this function, again with his + * buffer's virtual address. We free any auxiliary buffers, after copying them + * out (if requested) and then if QEMM is running, call the unlock function. + */ +void +dma_unmap(p,copy) +void *p; +int copy; /* !0 => Copy aux buffer to user buffer, if mapped */ +{ + struct dma *dmap; + + for(dmap = Dma;dmap != NULLDMA;dmap = dmap->next){ + if(dmap->p == p) + break; + } + if(dmap == NULLDMA) + return; /* Unknown */ + +#ifndef ZILOG /* Nick */ + if((*Vds_run & 0x20) != 0) + dmaunlock(dmap->physaddr,dmap->len); /* VDS call */ +#endif + + /* Copy aux buffer to user's buffer, if requested, and free */ + if(dmap->aux != NULL){ + if(copy) + memcpy(dmap->p,dmap->aux,dmap->len); + free(dmap->aux); + } + /* Free DMA descriptor */ + if(dmap->next != NULLDMA) + dmap->next->prev = dmap->prev; + if(dmap->prev != NULLDMA) + dmap->prev->next = dmap->next; + else + Dma = dmap->next; + free(dmap); +} + +/* Translate a virtual address and length into a physical address for DMA. + * If QEMM or another VDS service is available, use it. Otherwise + * assume real mode and do the translation ourselves. + * + * If the physical buffer crosses a physical 64K memory + * boundary, or if it does not sit in contiguous 4K 386/486 pages, then + * return an error. + * + * Since we set the flag that says "don't remap", we don't need to keep + * the DDS structure as modified by the lock call. The only information + * needed to unlock is the address and length, which the user will supply. + */ +unsigned long +dmalock(p,len) +void *p; +unsigned short len; +{ +#ifdef ZILOG /* NIck */ + return (unsigned long)p; +#else + struct dds ddsp; + union REGS regs; + struct SREGS segregs; + unsigned long physaddr; + + if((*Vds_run & 0x20) == 0){ + /* VDS not available, assume real mode. Convert + * to flat address and check for 64K alignment + */ + physaddr = ((unsigned long)FP_SEG(p) << 4) + FP_OFF(p); + if((((physaddr + len) ^ physaddr) & ~0xffff) != 0) + physaddr = 0; /* NFG, crosses 64K segment */ + return physaddr; + } + /* VDS available, use it */ + ddsp.rsize = len; + ddsp.offset = FP_OFF(p); + ddsp.seg = FP_SEG(p); + + regs.x.ax = 0x8103; + /* Region must not cross 64K, be contiguous in physical memory, + * and do *not* allocate DMA buffer if it fails + */ + regs.x.dx = 20; + segregs.es = FP_SEG(&ddsp); + regs.x.di = FP_OFF(&ddsp); + int86x(0x4b,®s,®s,&segregs); + if(regs.x.cflag) + return 0; + + return ddsp.physaddr; +#endif +} +/* Release memory that has been locked for DMA */ +unsigned long +dmaunlock(physaddr,len) +unsigned long physaddr; +unsigned short len; +{ +#ifndef ZILOG /* Nick */ + union REGS regs; + struct SREGS segregs; + struct dds dds; + + if((*Vds_run & 0x20) == 0) + return 0; /* Nothing required */ + dds.rsize = len; + dds.physaddr = physaddr; + dds.buf_id = 0; + dds.seg = 0; /* We assume these are don't cares? */ + dds.offset = 0; + + regs.x.ax = 0x8104; + regs.x.dx = 0; + segregs.es = FP_SEG(&dds); + regs.x.di = FP_OFF(&dds); + int86x(0x4b,®s,®s,&segregs); + if(regs.x.cflag) + return -1; +#endif + + return 0; +} +/* Disable QEMM DMA translation */ +int +dis_dmaxl(chan) +int chan; /* DMA channel number */ +{ +#ifndef ZILOG /* Nick */ + union REGS regs; + struct SREGS segregs; + + if((*Vds_run & 0x20) == 0) + return 0; /* QEMM not running */ + regs.x.ax = 0x810b; + regs.x.bx = chan; + regs.x.dx = 0; + int86x(0x4b,®s,®s,&segregs); + if(regs.x.cflag) + return -1; +#endif + + return 0; +} + +/* Re-enable QEMM DMA translation */ +int +ena_dmaxl(chan) +int chan; +{ +#ifndef ZILOG /* Nick */ + union REGS regs; + struct SREGS segregs; + + if((*Vds_run & 0x20) == 0) + return 0; /* QEMM not running */ + regs.x.ax = 0x810c; + regs.x.bx = chan; + regs.x.dx = 0; + int86x(0x4b,®s,®s,&segregs); + if(regs.x.cflag) + return -1; +#endif + + return 0; +} + +/* Set up a 8237 DMA controller channel to point to a specified buffer */ +int +setup_dma(chan,physaddr,length,mode) +int chan; +int32 physaddr; +uint16 length; +int mode; /* Read/write, etc */ +{ +#ifndef ZILOG /* Nick */ + int dmaport; + int i_state; + + if(length == 0 || chan < 0 || chan > 7 || chan == 4) + return -1; + + i_state = dirps(); + dma_disable(chan); + outportb(Page_regs[chan],physaddr >> 16); /* Store in 64K DMA page */ + if(chan < 4){ + /* 8-bit DMA */ + length--; + outportb(DMA1BASE+DMA_MODE,mode|chan); /* Select mode */ + outportb(DMA1BASE+DMA_RESETFF,0); /* reset byte pointer flipflop */ + + /* Output buffer start (dest) address */ + dmaport = DMA1BASE + 2*chan; + outportb(dmaport,(uint8)physaddr); + outportb(dmaport,(uint8)(physaddr >> 8)); + + /* output DMA maximum byte count */ + dmaport++; + outportb(dmaport,(uint8)length); + outportb(dmaport,(uint8)(length >> 8)); + } else { + /* 16-bit DMA */ + length >>= 1; /* count is 16-bit words */ + length--; + physaddr >>= 1; + + outportb(DMA2BASE+2*DMA_MODE,mode|(chan & 3));/* Select mode */ + outportb(DMA2BASE+2*DMA_RESETFF,0); /* reset byte pointer flipflop */ + + /* Output buffer start (dest) address */ + dmaport = DMA2BASE + 4*(chan & 3); + outportb(dmaport,(uint8)physaddr); + outportb(dmaport,(uint8)(physaddr >> 8)); + + /* output DMA maximum byte count */ + dmaport += 2; + outportb(dmaport,(uint8)length); + outportb(dmaport,(uint8)(length >> 8)); + } + /* Unmask channel (start DMA) */ + dma_enable(chan); + restore(i_state); +#endif + return 0; +} + +/* Return current count on specified DMA channel */ +uint16 +dma_cnt(chan) +int chan; +{ +#ifdef ZILOG /* Nick */ + return 0; +#else + int dmaport; + uint16 bytecount; + + if(chan < 4){ + outportb(DMA1BASE+DMA_RESETFF,0); /* reset firstlast ff */ + dmaport = DMA1BASE + 2*chan + 1; + } else { + outportb(DMA2BASE+2*DMA_RESETFF,0); + dmaport = DMA2BASE + 4*(chan&3) + 2; + } + bytecount = inportb(dmaport); + bytecount += inportb(dmaport) << 8; + return bytecount; +#endif +} + +/* Disable DMA on specified channel, return previous status */ +int +dma_disable(chan) +int chan; +{ +#ifndef ZILOG /* Nick */ + if(chan < 4){ + outportb(DMA1BASE+DMA_MASK, DMA_DISABLE|chan); + } else { + outportb(DMA2BASE+2*DMA_MASK, DMA_DISABLE|(chan & 3)); + } +#endif + return 0; +} +/* Enable DMA on specified channel */ +int +dma_enable(chan) +int chan; +{ +#ifndef ZILOG /* Nick */ + if(chan < 4){ + outportb(DMA1BASE+DMA_MASK, DMA_ENABLE|chan); + } else { + outportb(DMA2BASE+2*DMA_MASK,DMA_ENABLE|(chan & 3)); + } +#endif + return 0; +} diff --git a/src/nos/drivers/drsi.c b/src/nos/drivers/drsi.c new file mode 100644 index 00000000..28e1ba52 --- /dev/null +++ b/src/nos/drivers/drsi.c @@ -0,0 +1,1114 @@ +/* + * Version with Stopwatches + * + * 0 - Not used + * 1 - rx_fsm run time + * 2 - drtx_active run time (per character tx time) + * + * Interface driver for the DRSI board for KA9Q's TCP/IP on an IBM-PC ONLY! + * + * Derived from a driver written by Art Goldman, WA3CVG + * (c) Copyright 1987 All Rights Reserved + * Permission for non-commercial use is hereby granted provided this notice + * is retained. For info call: (301) 997-3838. + * + * Heavily re-written from the original, a driver for the EAGLE board into + * a driver for the DRSI PC* Packet adpator. Copyright as original, all + * amendments likewise providing credit given and notice retained. + * Stu Phillips - N6TTO, W6/G8HQA (yes Virginia, really !). + * For info call: (408) 285-4142 + * + * This driver supports 1 (one) DRSI board. + * + * Reformatted and added ANSI-style declarations, integrated into NOS + * by KA9Q, 10/14/89 + * + * Latest set of defect fixes added 1/2/90 by N6TTO + * 1. Made P-PERSIST work properly + * 2. Fixed UNDERRUN bug when in DEFER state + * 3. Tx now defers correctly when DCD is high (!) + * + * Changed 3/4/90 by N6TTO + * Changed method of enabling the IRQ to the 8259 to call maskon() + * instead of clrbit(); change made to allow interrupts > 8 to work + * on an AT. + * + * Changed 11/14/90 by N6TTO + * Fixed incompatiblity between current NOS memory allocation scheme + * and changes made to speed up drsi transmit state machine. + * + */ + +#include +#ifndef ZILOG +#include +#endif +#include +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "pktdrvr.h" +#include "netuser.h" +#include "drsi.h" +#include "ax25.h" +#include "trace.h" +#include "nospc.h" +#include "esccgen.h" +#include "devparam.h" +#include +#include "po/messages.h" + +static int32 dr_ctl(struct iface *iface,int cmd,int set,int32 val); +static int dr_raw(struct iface *iface,struct mbuf **bpp); +static int dr_stop(struct iface *iface); +static void dr_wake(struct drchan *hp,int rx_or_tx, + void (*routine)(struct drchan *),int ticks); +static int drchanparam(struct drchan *hp); +static void drexint(struct drchan *hp); +static void drinitctc(unsigned port); +static void drrx_active(struct drchan *hp); +static void drrx_enable(struct drchan *hp); +static void drtx_active(struct drchan *hp); +static void drtx_defer(struct drchan *hp); +static void drtx_downtx(struct drchan *hp); +static void drtx_flagout(struct drchan *hp); +static void drtx_idle(struct drchan *hp); +static void drtx_rrts(struct drchan *hp); +static void drtx_tfirst(struct drchan *hp); +static char read_ctc(unsigned port,uint8 reg); /* unsigned reg */ +static void rx_fsm(struct drchan *hp); +static void tx_fsm(struct drchan *hp); +static void write_ctc(uint16 port,uint8 reg,uint8 val); + +struct DRTAB Drsi[DRMAX]; /* Device table - one entry per card */ +INTERRUPT (*Drhandle[])(void) = { dr0vec }; /* handler interrupt vector table */ +struct drchan Drchan[2*DRMAX]; /* channel table - 2 entries per card */ +uint16 Drnbr; + +/* Set specified routine to be 'woken' up after specified number + * of ticks (allows CPU to be freed up and reminders posted); + */ +static void +dr_wake(hp, rx_or_tx, routine, ticks) +struct drchan *hp; +int rx_or_tx; +void (*routine)(struct drchan *); +int ticks; +{ + hp->w[rx_or_tx].wcall = routine; + hp->w[rx_or_tx].wakecnt = ticks; +} + +/* Master interrupt handler. One interrupt at a time is handled. + * here. Service routines are called from here. + */ +INTERRUPT (NICK_FAR *(drint)(dev))() +int dev; +{ + register char st; + register uint16 pcbase, i; + struct drchan *hpa,*hpb; + struct DRTAB *dp; + + dp = &Drsi[dev]; + dp->ints++; + pcbase = dp->addr; + hpa = &Drchan[2 * dev]; + hpb = &Drchan[(2 * dev)+1]; + +yuk: + /* Check CTC for timer interrupt */ + st = read_ctc(pcbase, Z8536_CSR3); + if(st & Z_IP){ + /* Reset interrupt pending */ + write_ctc(pcbase, Z8536_CSR3, Z_CIP|Z_GCB); + for(i=0;i<=1;i++){ + if(hpa->w[i].wakecnt){ + if(--hpa->w[i].wakecnt == 0){ + (hpa->w[i].wcall)(hpa); + } + } + if(hpb->w[i].wakecnt){ + if(--hpb->w[i].wakecnt == 0){ + (hpb->w[i].wcall)(hpb); + } + } + } + } + /* Check the SIO for interrupts */ + + /* Read interrupt status register from channel A */ + while((st = read_escc(pcbase+CHANA+CTL,R3)) != 0){ + /* Use IFs to process ALL interrupts pending + * because we need to check all interrupt conditions + */ + if(st & CHARxIP){ + /* Channel A Rcv Interrupt Pending */ + rx_fsm(hpa); + } + if(st & CHBRxIP){ + /* Channel B Rcv Interrupt Pending */ + rx_fsm(hpb); + } + if(st & CHATxIP){ + /* Channel A Transmit Int Pending */ + tx_fsm(hpa); + } + if(st & CHBTxIP){ + /* Channel B Transmit Int Pending */ + tx_fsm(hpb); + } + if(st & CHAEXT){ + /* Channel A External Status Int */ + drexint(hpa); + } + if(st & CHBEXT){ + /* Channel B External Status Int */ + drexint(hpb); + } + /* Reset highest interrupt under service */ + write_escc(hpa->base+CTL,R0,RES_H_IUS); + + } /* End of while loop on int processing */ + if(read_ctc(pcbase, Z8536_CSR3) & Z_IP) + goto yuk; + return dp->chain ? dp->oldvec : NULL; +} + + +/* DRSI SIO External/Status interrupts + * This can be caused by a receiver abort, or a Tx UNDERRUN/EOM. + * Receiver automatically goes to Hunt on an abort. + * + * If the Tx Underrun interrupt hits, change state and + * issue a reset command for it, and return. + */ +static void +drexint(hp) +/* Nick register */ struct drchan *hp; +{ + register int base = hp->base; + char st; + int i_state; + + i_state = dirps(); + hp->exints++; + + st = read_escc(base+CTL,R0); /* Fetch status */ + + /* Check for Tx UNDERRUN/EOM - only in Transmit Mode */ + /* Note that the TxEOM bit remains set once we go */ + /* back to receive. The following qualifications */ + /* are necessary to prevent an aborted frame causing */ + /* a queued transmit frame to be tossed when in */ + /* DEFER state on transmit. */ + if((hp->tstate != DEFER) && (hp->rstate==0) && (st & TxEOM)){ + if(hp->tstate != UNDERRUN){ + /* This is an unexpected underrun. Discard the current + * frame (there's no way to rewind), kill the transmitter + * and return to receive with a wakeup posted to get the + * next (if any) frame. Any recovery will have to be done + * by higher level protocols (yuk). + */ + write_escc(base, R5, Tx8|DTR); /* Tx off now */ + write_escc(base, R1, 0); /* Prevent ext.status int */ + write_escc(base, R0, RES_Tx_P); /* Reset Tx int pending */ + write_escc(base, R0, ERR_RES); + write_escc(base, R0, RES_EOM_L); /* Reset underrun latch */ + free_p(&hp->sndbuf); + hp->tstate = IDLE; + hp->tx_state = drtx_idle; + dr_wake(hp, TX, tx_fsm, hp->slotime); + hp->rstate = ENABLE; + hp->rx_state = drrx_enable; + drrx_enable(hp); + } + } + /* Receive Mode only + * This triggers when hunt mode is entered, & since an ABORT + * automatically enters hunt mode, we use that to clean up + * any waiting garbage + */ + if((hp->rstate != IDLE) && (st & BRK_ABRT)){ + if(hp->rcvbuf != NULL){ + hp->rcp = hp->rcvbuf->data; + hp->rcvbuf->cnt = 0; + } + while(read_escc(base,R0) & Rx_CH_AV) + (void) inportb(base+DATA); + hp->aborts++; + hp->rstate = ACTIVE; + write_escc(base, R0, ERR_RES); + } + /* reset external status latch */ + write_escc(base,R0,RES_EXT_INT); + restore(i_state); +} + +/* Receive Finite State Machine - dispatcher */ +static void +rx_fsm(hp) +struct drchan *hp; +{ + int i_state; + + i_state = dirps(); + hp->rxints++; + (*hp->rx_state)(hp); + restore(i_state); +} + +/* drrx_enable + * Receive ENABLE state processor + */ +static void +drrx_enable(hp) +struct drchan *hp; +{ + register uint16 base = hp->base; + + write_escc(base, R1, INT_ALL_Rx|EXT_INT_ENAB); + write_escc(base, R15, BRKIE); /* Allow ABORT Int */ + write_escc(base, R14, BRSRC|BRENABL|SEARCH); + /* Turn on rx and enter hunt mode */ + write_escc(base, R3, ENT_HM|RxENABLE|RxCRC_ENAB|Rx8); + + if(hp->rcvbuf != NULL){ + hp->rcvbuf->cnt = 0; + hp->rcp = hp->rcvbuf->data; + } + hp->rstate = ACTIVE; + hp->rx_state = drrx_active; +} + +/* drrx_active + * Receive ACTIVE state processor + */ +static void +drrx_active(hp) +struct drchan *hp; +{ + register uint16 base = hp->base; + unsigned char rse,st; + struct mbuf *bp; + + /* Allocate a receive buffer if not already present */ + if(hp->rcvbuf == NULL){ + bp = hp->rcvbuf = alloc_mbuf(hp->bufsiz); + if(bp == NULL){ + /* No buffer - abort the receiver */ + write_escc(base, R3, ENT_HM|RxENABLE|RxCRC_ENAB|Rx8); + /* Clear character from rx buffer in SIO */ + (void) inportb(base+DATA); + return; + } + hp->rcvbuf->cnt = 0; + hp->rcp = hp->rcvbuf->data; + } + + st = read_escc(base, R0); /* get interrupt status from R0 */ + rse = read_escc(base,R1); /* get special status from R1 */ + + if(st & Rx_CH_AV){ + /* there is a char to be stored + * read special condition bits before reading the data char + * (already read above) + */ + if(rse & Rx_OVR){ + /* Rx overrun - toss buffer */ + hp->rcp = hp->rcvbuf->data; /* reset buffer pointers */ + hp->rcvbuf->cnt = 0; + hp->rstate = RXERROR; /* set error flag */ + hp->rovers++; /* count overruns */ + } else if(hp->rcvbuf->cnt >= hp->bufsiz){ + /* Too large -- toss buffer */ + hp->toobig++; + hp->rcp = hp->rcvbuf->data; /* reset buffer pointers */ + hp->rcvbuf->cnt = 0; + hp->rstate = TOOBIG; /* when set, chars are not stored */ + } + /* ok, we can store the received character now */ + if((hp->rstate == ACTIVE) && ((st & BRK_ABRT) == 0)){ + *hp->rcp++ = inportb(base+DATA); /* char to rcv buff */ + hp->rcvbuf->cnt++; /* bump count */ + } else { + /* got to empty FIFO */ + (void) inportb(base+DATA); + hp->rcp = hp->rcvbuf->data; /* reset buffer pointers */ + hp->rcvbuf->cnt = 0; + hp->rstate = RXABORT; + write_escc(base,R0,ERR_RES); /* reset err latch */ + } + } + /* The End of Frame bit is ALWAYS associated with a character, + * usually, it is the last CRC char. Only when EOF is true can + * we look at the CRC byte to see if we have a valid frame + */ + if(rse & END_FR){ + hp->rxframes++; + /* END OF FRAME -- Make sure Rx was active */ + if(hp->rcvbuf->cnt > 0){ /* any data to store */ + /* looks like a frame was received + * now is the only time we can check for CRC error + */ + if((rse & CRC_ERR) || (hp->rstate > ACTIVE) || + (hp->rcvbuf->cnt < 10) || (st & BRK_ABRT)){ + /* error occurred; toss frame */ + if(rse & CRC_ERR) + hp->crcerr++; /* count CRC errs */ + hp->rcp = hp->rcvbuf->data; + hp->rcvbuf->cnt = 0; + hp->rstate = ACTIVE; /* Clear error state */ + } else { + /* Here we have a valid frame */ + hp->rcvbuf->cnt -= 2; /* chuck FCS bytes */ + /* queue it in */ + net_route(hp->iface,&hp->rcvbuf); + hp->enqueued++; + /* packet queued - reset buffer pointer */ + hp->rcvbuf = NULL; + } /* end good frame queued */ + } /* end check for active receive upon EOF */ + } +} + +/* + * TX finite state machine - dispatcher + */ +static void +tx_fsm(hp) +struct drchan *hp; +{ + int i_state; + + i_state = dirps(); + if(hp->tstate != DEFER && hp->tstate) + hp->txints++; + (*hp->tx_state)(hp); + restore(i_state); +} + +/* drtx_idle + * Transmit IDLE transmit state processor + */ +static void +drtx_idle(hp) +struct drchan *hp; +{ + register uint16 base; + + /* Tx idle - is there a frame to transmit ? */ + if((hp->sndbuf = dequeue(&hp->sndq)) == NULL){ + /* Nothing to send - return to receive mode + * Turn Tx off - any trailing flag should have been sent + * by now + */ +#ifdef DRSIDEBUG + _printf(_("Nothing to TX\n")); +#endif + base = hp->base; + write_escc(base, R5, Tx8|DTR); /* Tx off now */ + write_escc(base, R0, ERR_RES); /* Reset error bits */ + + /* Delay for squelch tail before enabling receiver */ + hp->rstate = ENABLE; + hp->rx_state = drrx_enable; + dr_wake(hp, RX, rx_fsm, hp->squeldelay); + } else { + /* Frame to transmit */ + hp->tstate = DEFER; + hp->tx_state = drtx_defer; + drtx_defer(hp); + } +} + +/* drtx_defer + * Transmit DEFER state processor + */ +static void +drtx_defer(hp) +struct drchan *hp; +{ + register uint16 base = hp->base; + + /* We may have defered a previous tx attempt - in any event... + * Check DCD in case someone is already transmitting + * then check to see if we should defer due to P-PERSIST. + */ + +#ifdef DRSIDEBUG + _printf(_("drtx_defer - checking for DCD\n")); +#endif + if((read_escc(base+CTL, R0) & DCD) > 0){ + /* Carrier detected - defer */ + hp->txdefers++; + dr_wake(hp, TX, tx_fsm, 10); /* Defer for 100 mS */ +#ifdef DRSIDEBUG + _printf(_("drtx_defer - TX deferred\n")); +#endif + return; + } + +#ifdef DRSIDEBUG + _printf(_("drtx_defer - checking for P-PERSIST backoff\n")); +#endif + /* P-PERSIST is checked against channel 3 of the 8536 which is + * the free running counter for the 10 mS tick; The counter + * goes through 0x6000 ticks per 10 mS or one tick every + * 407 nS - this is pretty random compared to the DOS time of + * day clock (0x40:0x6C) used by the other (EAGLE) drivers. + */ + if (hp->persist <= read_ctc(base,Z8536_CC3LSB)) { +#ifdef DRSIDEBUG + _printf(_("drtx_defer - BACKOFF\n")); +#endif + hp->txppersist++; + dr_wake (hp, TX, tx_fsm, hp->slotime); + return; + } + /* No backoff - set RTS and start to transmit frame */ + write_escc(base, R1, 0); /* Prevent external status int */ + write_escc(base, R3, Rx8); /* Turn Rx off */ + hp->rstate = IDLE; /* Mark Rx as idle */ + hp->tstate = RRTS; + hp->tx_state = drtx_rrts; +#ifdef DRSIDEBUG + _printf(_("drtx_defer - wake posted for drtx_rrts\n")); +#endif + write_escc(base, R9, 0); /* Interrupts off */ + write_escc(base,R5,RTS|Tx8|DTR); /* Turn tx on */ + dr_wake(hp, TX, tx_fsm, 10); +} + +/* drtx_rrts + * Transmit RRTS state processor + */ +static void +drtx_rrts(hp) +struct drchan *hp; +{ + register uint16 base = hp->base; + + write_escc(base, R9, 0); /* Interrupts off */ + write_escc(base,R5,TxCRC_ENAB|RTS|TxENAB|Tx8|DTR); /* Tx now on */ + hp->tstate = TFIRST; + hp->tx_state = drtx_tfirst; +#ifdef DRSIDEBUG + _printf(_("8530 Int status %x\n"), read_escc(base+CHANA,R3)); + _printf(_("drtx_rrts - Wake posted for TXDELAY\n")); +#endif + dr_wake(hp, TX, tx_fsm, hp->txdelay); +} + +/* drtx_tfirst + * Transmit TFIRST state processor + */ +static void +drtx_tfirst(hp) +struct drchan *hp; +{ + register uint16 base = hp->base; + char c; + + /* Copy data to a local buffer to save on mbuf overheads + * during transmit interrupt time. + */ + hp->drtx_cnt = len_p(hp->sndbuf); + hp->drtx_tcp = hp->drtx_buffer; + + pullup(&hp->sndbuf, hp->drtx_tcp, hp->drtx_cnt); + + /* Transmit the first character in the buffer */ + c = *hp->drtx_tcp++; + hp->drtx_cnt--; + + write_escc(base, R0, RES_Tx_CRC); /* Reset CRC */ + write_escc(base, R0, RES_EOM_L); /* Reset underrun latch */ + outportb(base+DATA, c); /* Output first character */ + write_escc(base, R15, TxUIE); /* Allow underrun ints only */ + write_escc(base, R1, TxINT_ENAB|EXT_INT_ENAB); /* Tx/Ext status ints on */ + write_escc(base, R9, MIE|NV); /* master enable */ + hp->tstate = ACTIVE; + hp->tx_state = drtx_active; +} + +/* drtx_active + * Transmit ACTIVE state processor + */ +static void +drtx_active(hp) +struct drchan *hp; +{ + if(hp->drtx_cnt-- > 0){ + /* Send next character */ + outportb(hp->base+DATA, *hp->drtx_tcp++); + } else { + /* No more to send - wait for underrun to hit */ + hp->tstate = UNDERRUN; + hp->tx_state = drtx_flagout; + free_p(&hp->sndbuf); + write_escc(hp->base, R0, RES_EOM_L); /* Send CRC on underrun */ + write_escc(hp->base, R0, RES_Tx_P); /* Reset Tx Int pending */ + } +} + +/* drtx_flagout + * Transmit FLAGOUT state processor + */ +static void +drtx_flagout(hp) +struct drchan *hp; +{ + /* Arrive here after CRC sent and Tx interrupt fires. + * Post a wake for ENDDELAY + */ + + hp->tstate = UNDERRUN; + hp->tx_state = drtx_downtx; + write_escc(hp->base, R9, 0); + write_escc(hp->base, R0, RES_Tx_P); + dr_wake(hp, TX, tx_fsm, hp->enddelay); +} + +/* drtx_downtx + * Transmit DOWNTX state processor + */ +static void +drtx_downtx(hp) +struct drchan *hp; +{ + register int base = hp->base; + + /* See if theres anything left to send - if there is, send it ! */ + if((hp->sndbuf = dequeue(&hp->sndq)) == NULL){ + /* Nothing left to send - return to receive */ + write_escc(base, R5, Tx8|DTR); /* Tx off now */ + write_escc(base, R0, ERR_RES); /* Reset error bits */ + hp->tstate = IDLE; + hp->tx_state = drtx_idle; + hp->rstate = ENABLE; + hp->rx_state = drrx_enable; + drrx_enable(hp); + } else + drtx_tfirst(hp); + +} + +/* Write CTC register */ +static void +write_ctc(base, reg, val) +uint16 base; +uint8 reg,val; +{ + int i_state; + + i_state = dirps(); + /* Select register */ + outportb(base+Z8536_MASTER,reg); + outportb(base+Z8536_MASTER,val); + restore(i_state); +} + +/* Read CTC register */ +/* Nick static char */ +/* Nick read_ctc(base, reg) */ +/* Nick uint16 base; */ +/* Nick uint8 reg; */ +static char read_ctc(unsigned base,uint8 reg) /* unsigned reg */ +{ + uint8 c; + uint16 i; + int i_state; + + i_state = dirps(); + /* Select register */ + outportb(base+Z8536_MASTER,reg); + /* Delay for a short time to allow 8536 to settle */ + for(i=0;i<100;i++) + ; + c = inportb(base+Z8536_MASTER); + restore(i_state); + return(c); +} + +/* Initialize dr controller parameters */ +static int +drchanparam(hp) +/* Nick register */ struct drchan *hp; +{ + uint16 tc; + long br; + register uint16 base; + int i_state; + + /* Initialize 8530 channel for SDLC operation */ + base = hp->base; + i_state = dirps(); + + switch(base & 2){ + case 2: + write_escc(base,R9,CHRA); /* Reset channel A */ + break; + case 0: + write_escc(base,R9,CHRB); /* Reset channel B */ + break; + } + /* Deselect all Rx and Tx interrupts */ + write_escc(base,R1,0); + + /* Turn off external interrupts (like CTS/CD) */ + write_escc(base,R15,0); + + /* X1 clock, SDLC mode */ + write_escc(base,R4,SDLC|X1CLK); /* SDLC mode and X1 clock */ + + /* Now some misc Tx/Rx parameters */ + /* CRC PRESET 1, NRZI Mode */ + write_escc(base,R10,CRCPS|NRZI); + + /* Set up BRG and DPLL multiplexers */ + /* Tx Clk from RTxC. Rcv Clk from DPLL, TRxC pin outputs BRG */ + write_escc(base,R11,RCDPLL|TCRTxCP|TRxCOI|TRxCBR); + + /* Null out SDLC start address */ + write_escc(base,R6,0); + + /* SDLC flag */ + write_escc(base,R7,FLAG); + + /* Set up the Transmitter but don't enable it */ + /* DTR, 8 bit TX chars only - TX NOT ENABLED */ + write_escc(base,R5,Tx8|DTR); + + /* Receiver - initial setup only - more later */ + write_escc(base,R3,Rx8); /* 8 bits/char */ + + /* Setting up BRG now - turn it off first */ + write_escc(base,R14,BRSRC); /* BRG off, but keep Pclk source */ + + /* set the 32x time constant for the BRG */ + + br = hp->speed; /* get desired speed */ + tc = ((XTAL/32)/br)-2; /* calc 32X BRG divisor */ + + write_escc(base,R12,tc); /* lower byte */ + write_escc(base,R13,(tc>>8)); /* upper bite */ + + /* Time to set up clock control register for RECEIVE mode + * DRSI has xtal osc going to pclk at 4.9152 Mhz + * The BRG is sourced from that, and set to 32x clock + * The DPLL is sourced from the BRG. BRG is fed to the TRxC pin + * Transmit clock is provided by the BRG externally divided by + * 32 in the CTC counter 1 and 2. + * Receive clock is from the DPLL + */ + + /* Following subroutine sets up and ENABLES the receiver */ + drrx_enable(hp); + + /* DPLL from BRG, BRG source is PCLK */ + write_escc(hp->base,R14,BRSRC|SSBR); + /* SEARCH mode, keep BRG source */ + write_escc(hp->base,R14,BRSRC|SEARCH); + /* Enable the BRG */ + write_escc(hp->base,R14,BRSRC|BRENABL); + + /* enable the receive interrupts */ + + write_escc(hp->base,R1,(INT_ALL_Rx|EXT_INT_ENAB)); + write_escc(hp->base,R15,BRKIE); /* ABORT int */ + write_escc(hp->base,R9,MIE|NV); /* master enable */ + + + /* Now, turn on the receiver and hunt for a flag */ + write_escc(hp->base,R3,RxENABLE|RxCRC_ENAB|Rx8); + + restore(i_state); + return 0; +} + +/* + * Initialize the CTC (8536) + * Only the counter/timers are used - the IO ports are un-comitted. + * Channels 1 and 2 are linked to provide a /32 counter to convert + * the SIO BRG to a real clock for Transmit clocking. + * CTC 3 is left free running on a 10 mS period. It is always polled + * and therefore all interrupts from the chip are disabled. + * + * Updated 02/16/89 by N6TTO + * Changed to support the use of the second channel on the 8530. + * Added so that the driver works on the DRSI type 2 PC Adaptor + * which has 2 1200 bps modems. + * + */ +static void +drinitctc(port) +unsigned port; +{ + long i; + + /* Initialize 8536 CTC */ + + /* Initialize 8536 */ + /* Start by forcing chip into known state */ + (void) read_ctc(port, Z8536_MICR); + + write_ctc(port, Z8536_MICR, 0x01); /* Reset the CTC */ + for(i=0;i < 1000L; i++) /* Loop to delay */ + ; + write_ctc(port, Z8536_MICR, 0x00); /* Clear reset and start init seq. */ + + /* Wait for chip to come ready */ + while((read_ctc(port, Z8536_MICR)) != 0x02) + ; + + write_ctc(port, Z8536_MICR, 0xa6); /* MIE|NV|CT_VIS|RJA */ + write_ctc(port, Z8536_MCCR, 0xf4); /* PBE|CT1E|CT2E|CT3E|PAE */ + + write_ctc(port, Z8536_CTMS1, 0xe2); /* Continuous,EOE,ECE, Pulse output */ + write_ctc(port, Z8536_CTMS2, 0xe2); /* Continuous,EOE,ECE, Pulse output */ + write_ctc(port, Z8536_CTMS3, 0x80); /* Continuous,Pulse output */ + write_ctc(port, Z8536_CT1MSB, 0x00); /* Load time constant CTC #1 */ + write_ctc(port, Z8536_CT1LSB, 0x10); + write_ctc(port, Z8536_CT2MSB, 0x00); /* Load time constant CTC #2 */ + write_ctc(port, Z8536_CT2LSB, 0x10); + write_ctc(port, Z8536_CT3MSB, 0x60); /* Load time constant CTC #3 */ + write_ctc(port, Z8536_CT3LSB, 0x00); + + write_ctc(port, Z8536_IVR, 0x06); + + /* Set port direction bits in port A and B + * Data is input on bits d1 and d5, output on d0 and d4. + * The direction is set by 1 for input and 0 for output + */ + write_ctc(port, Z8536_PDCA, 0x22); + write_ctc(port, Z8536_PDCB, 0x22); + + write_ctc(port, Z8536_CSR1, Z_GCB|Z_TCB); /* Start CTC #1 running */ + write_ctc(port, Z8536_CSR2, Z_GCB|Z_TCB); /* Start CTC #2 running */ + write_ctc(port, Z8536_CSR3, Z_IE|Z_GCB|Z_TCB); /* Start CTC #3 running */ +} + +/* Attach a DRSI interface to the system + * argv[0]: hardware type, must be "drsi" + * argv[1]: I/O address, e.g., "0x300" + * argv[2]: vector, e.g., "2" + * argv[3]: mode, must be "ax25" + * argv[4]: iface label, e.g., "dr0" + * argv[5]: receiver packet buffer size in bytes + * argv[6]: maximum transmission unit, bytes + * argv[7]: iface speed for channel A + * argv[8]: iface speed for channel B (defaults to same as A if absent) + * argv[9]: First IP address, optional (defaults to Ip_addr) + * argv[10]: Second IP address, optional (defaults to Ip_addr) + */ +int +dr_attach(argc,argv) +int argc; +char *argv[]; +{ + register struct iface *if_pca,*if_pcb; + struct drchan *hp; + int dev; + char *cp; + + /* Quick check to make sure args are good and mycall is set */ + if(setencap(NULL,argv[3]) == -1){ + _printf(_("Mode %s unknown for interface %s\n"), + argv[3],argv[4]); + return -1; + } + if(if_lookup(argv[4]) != NULL){ + _printf(_("Interface %s already exists\n"), argv[4]); + return -1; + } + if(Mycall[0] == '\0'){ + _printf(_("set mycall first\n")); + return -1; + } + /* Note: More than one card can be supported if you give up a COM: + * port, thus freeing up an IRQ line and port address + */ + if(Drnbr >= DRMAX){ + _printf(_("Only %d DRSI controller(s) supported right now!\n"),DRMAX); + return -1; + } + dev = Drnbr++; + + /* Initialize hardware-level control structure */ + Drsi[dev].addr = htoi(argv[1]); + Drsi[dev].vec = atoi(argv[2]); + if(strchr(argv[2],'c') != NULL) + Drsi[dev].chain = 1; + else + Drsi[dev].chain = 0; + + /* Save original interrupt vector */ + Drsi[dev].oldvec = getirq(Drsi[dev].vec); + + /* Set new interrupt vector */ + if(setirq(Drsi[dev].vec,Drhandle[dev]) == -1){ + _printf(_("IRQ %u out of range\n"),Drsi[dev].vec); + Drnbr--; + } + /* Initialize the CTC */ + drinitctc(Drsi[dev].addr); + + /* Create iface structures and fill in details */ + if_pca = (struct iface *)callocw(1,sizeof(struct iface)); + if_pcb = (struct iface *)callocw(1,sizeof(struct iface)); + + if_pca->addr = if_pcb->addr = Ip_addr; + if(argc > 9) + if_pca->addr = resolve(argv[9]); + if(argc > 10) + if_pcb->addr = resolve(argv[10]); + if(if_pca->addr == 0 || if_pcb->addr == 0){ + printf(Noipaddr); + free(if_pca); + free(if_pcb); + return -1; + } + /* Append "a" to iface associated with A channel */ + if_pca->name = mallocw((unsigned)strlen(argv[4])+2); + strcpy(if_pca->name,argv[4]); + strcat(if_pca->name,"a"); + + /* Append "b" to iface associated with B channel */ + if_pcb->name = mallocw((unsigned)strlen(argv[4])+2); + strcpy(if_pcb->name,argv[4]); + strcat(if_pcb->name,"b"); + + if_pcb->mtu = if_pca->mtu = atoi(argv[6]); + if_pcb->ioctl = if_pca->ioctl = dr_ctl; + if_pca->dev = 2*dev; /* dr0a */ + if_pcb->dev = 2*dev + 1; /* dr0b */ + if_pcb->stop = if_pca->stop = dr_stop; + if_pcb->raw = if_pca->raw = dr_raw; + + setencap(if_pca,argv[3]); + setencap(if_pcb,argv[3]); + if(if_pcb->hwaddr == NULL) + if_pcb->hwaddr = mallocw(sizeof(Mycall)); + memcpy(if_pcb->hwaddr,&Mycall,sizeof(Mycall)); + if(if_pca->hwaddr == NULL) + if_pca->hwaddr = mallocw(sizeof(Mycall)); + memcpy(if_pca->hwaddr,&Mycall,sizeof(Mycall)); + /* Link em in to the iface chain */ + if_pca->next = if_pcb; + if_pcb->next = Ifaces; + Ifaces = if_pca; + + /* set params in drchan table for CHANNEL B */ + + hp = &Drchan[2*dev+1]; /* dr1 is offset 1 */ + hp->iface = if_pcb; + hp->stata = Drsi[dev].addr + CHANA + CTL; /* permanent status */ + hp->statb = Drsi[dev].addr + CHANB + CTL; /* addrs for CHANA/B*/ + if(argc > 8){ + /* Separate speed for channel B */ + hp->speed = (uint16)atoi(argv[8]); + } else { + /* Set speed to same as for channel A */ + hp->speed = (uint16)atoi(argv[7]); + } + hp->base = Drsi[dev].addr + CHANB; + hp->bufsiz = atoi(argv[5]); + hp->drtx_buffer = mallocw(if_pcb->mtu+100); + hp->tstate = IDLE; + hp->tx_state = drtx_idle; + hp->w[RX].wcall = NULL; + hp->w[RX].wakecnt = 0; + hp->w[TX].wcall = NULL; + hp->w[TX].wakecnt = 0; + /* default KISS Params */ + hp->txdelay = 25; /* 250 Ms */ + hp->persist = 64; /* 25% persistence */ + hp->slotime = 10; /* 100 Ms */ + hp->squeldelay = 20; /* 200 Ms */ + hp->enddelay = 10; /* 100 Ms */ + + write_escc(hp->stata,R9,FHWRES); /* Hardware reset */ + + /* Disable interrupts with Master interrupt ctrl reg */ + write_escc(hp->stata,R9,0); + + drchanparam(hp); + + /* Initialize buffer pointers */ + hp->rcvbuf = NULL; + hp->rcvbuf->cnt = 0; + hp->sndq = NULL; + + /* set params in drchan table for CHANNEL A */ + hp = &Drchan[2*dev]; /* dr0a is offset 0 */ + hp->iface = if_pca; + hp->speed = (uint16)atoi(argv[7]); + hp->base = Drsi[dev].addr + CHANA; + hp->bufsiz = atoi(argv[5]); + hp->drtx_buffer = mallocw(if_pca->mtu+100); + hp->tstate = IDLE; + hp->tx_state = drtx_idle; + hp->w[RX].wcall = NULL; + hp->w[RX].wakecnt = 0; + hp->w[TX].wcall = NULL; + hp->w[TX].wakecnt = 0; + /* default KISS Params */ + hp->txdelay = 30; /* 300 Ms */ + hp->persist = 64; /* 25% persistence */ + hp->slotime = 10; /* 100 Ms */ + hp->squeldelay = 20; /* 200 Ms */ + hp->enddelay = 10; /* 100 Ms */ + + drchanparam(hp); + + /* Initialize buffer pointers */ + hp->rcvbuf = NULL; + hp->rcvbuf->cnt = 0; + hp->sndq = NULL; + + write_escc(hp->base,R9,MIE|NV); /* master interrupt enable */ + + /* Enable interrupt in 8259 interrupt controller */ + maskon(Drsi[dev].vec); + + cp = if_name(if_pca," tx"); + if_pca->txproc = newproc(cp,512,if_tx,0,if_pca,NULL,0); + free(cp); + cp = if_name(if_pcb," tx"); + if_pcb->txproc = newproc(cp,512,if_tx,0,if_pcb,NULL,0); + free(cp); + return 0; +} + +/* Shut down iface */ +static int +dr_stop(iface) +struct iface *iface; +{ + uint16 dev; + + dev = iface->dev; + if(dev & 1) + return 0; + dev >>= 1; /* Convert back into DRSI number */ + + /* Set 8259 interrupt mask (turn off interrupts) */ + maskoff(Drsi[dev].vec); + + /* Restore original interrupt vector */ + setirq(Drsi[dev].vec, Drsi[dev].oldvec); + Drnbr--; + + /* Force hardware reset */ + write_escc(Drsi[dev].addr + CHANA + CTL,R9,FHWRES); + /* Reset the CTC */ + (void) read_ctc(Drsi[dev].addr, Z8536_MICR); + write_ctc(Drsi[dev].addr, Z8536_MICR, 0x01); + return 0; +} + +/* Send raw packet on DRSI card */ +static int +dr_raw( +struct iface *iface, +struct mbuf **bpp +){ + char kickflag; + struct drchan *hp; + int i_state; + + dump(iface,IF_TRACE_OUT,*bpp); + iface->rawsndcnt++; + iface->lastsent = secclock(); + + hp = &Drchan[iface->dev]; + i_state = dirps(); + kickflag = (hp->sndq == NULL) & (hp->sndbuf == NULL); + /* clever! flag=1 if something in queue */ + enqueue(&hp->sndq,bpp); + + if(kickflag) /* simulate interrupt to xmit */ + tx_fsm(hp); /* process interrupt */ + + restore(i_state); + return 0; +} + +/* display DRSI Channel stats */ +int +dodrstat(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct drchan *hp0, *hp1; + int i; + + for(i=0; iiface->name); + _printf(_("Rxints - %8ld Txints - %8ld Exints - %8ld\n"), + hp0->rxints, hp0->txints, hp0->exints); + _printf(_("Enqued - %8ld Crcerr - %8ld Aborts - %8ld\n"), + hp0->enqueued, hp0->crcerr, hp0->aborts); + _printf(_("RFrames - %8ld Rxovers - %8ld TooBig - %8ld\n"), + hp0->rxframes, hp0->rovers, hp0->toobig); + _printf(_("Txdefer - %8ld Txppers - %8ld Nomem - %8ld\n"), + hp0->txdefers, hp0->txppersist, hp0->nomem); + _printf(_("Tx state %8d Rx state %8d\n\n"),hp0->tstate,hp0->rstate); + _printf(_("Channel - %s\n"), hp1->iface->name); + _printf(_("Rxints - %8ld Txints - %8ld Exints - %8ld\n"), + hp1->rxints, hp1->txints, hp1->exints); + _printf(_("Enqued - %8ld Crcerr - %8ld Aborts - %8ld\n"), + hp1->enqueued, hp1->crcerr, hp1->aborts); + _printf(_("RFrames - %8ld Rxovers - %8ld TooBig - %8ld\n"), + hp1->rxframes, hp1->rovers, hp1->toobig); + _printf(_("Txdefer - %8ld Txppers - %8ld Nomem - %8ld\n"), + hp1->txdefers, hp1->txppersist, hp1->nomem); + _printf(_("Tx state %8d Rx state %8d\n"),hp1->tstate,hp1->rstate); + } + return 0; +} + +/* Subroutine to set kiss params in channel tables */ +static int32 +dr_ctl(iface,cmd,set,val) +struct iface *iface; +int cmd; +int set; +int32 val; +{ + struct drchan *hp; + hp = &Drchan[iface->dev]; + + switch(cmd){ + case PARAM_TXDELAY: + if(set) + hp->txdelay = val; + return hp->txdelay; + case PARAM_PERSIST: + if(set) + hp->persist = val; + return hp->persist; + case PARAM_SLOTTIME: + if(set) + hp->slotime = val; + return hp->slotime; + case PARAM_TXTAIL: + if(set) + hp->squeldelay = val; + return hp->squeldelay; + case PARAM_ENDDELAY: + if(set) + hp->enddelay = val; + return hp->enddelay; + case PARAM_SPEED: + return hp->speed; + } + return -1; +} diff --git a/src/nos/drivers/eagle.c b/src/nos/drivers/eagle.c new file mode 100644 index 00000000..c940efd2 --- /dev/null +++ b/src/nos/drivers/eagle.c @@ -0,0 +1,843 @@ +/* + * Interface driver for the EAGLE board for KA9Q's TCP/IP on an IBM-PC ONLY! + * + * Written by Art Goldman, WA3CVG - (c) Copyright 1987 All Rights Reserved + * Permission for non-commercial use is hereby granted provided this notice + * is retained. For info call: (301) 997-3838. + * + * 10 Jan 88 ng6q - Corrected IDLE comparison in doegstat. + * 6 Apr 88 ng6q - Changed eg_raw to prevent calling egtxint with a + * packet in sndbuf. Initialized sndq and rcvq in + * eg_attach. Added carrier detect check before + * slot time delay in egtxint. Should make major + * changes to egtxint to avoid delay loops while + * masked for receive interrupts. + */ + +#include +#ifndef ZILOG +#include +#endif +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "pktdrvr.h" +#include "netuser.h" +#include "eagle.h" +#include "esccgen.h" +#include "ax25.h" +#include "trace.h" +#include "nospc.h" +#include "devparam.h" +#include +#include +#include "po/messages.h" + +static int32 eg_ctl(struct iface *iface,int cmd,int set,int32 val); +static int eg_raw(struct iface *iface,struct mbuf **bpp); +static int eg_stop(struct iface *iface); +static void egchanparam(struct egchan *hp); +static void egexint(struct egchan *hp); +static void egrxint(struct egchan *hp); +static void egtxint(struct egchan *hp); +static void rts(struct egchan *hp,uint16 x); +static void waitmsec(int n); + +/* Nick static */ struct EGTAB Eagle[EGMAX]; /* Device table - one entry per card */ +static INTERRUPT (*eghandle[])() = { /* handler interrupt vector table */ + eg0vec, +}; +/* Nick static */ struct egchan Egchan[2*EGMAX]; /* channel table - 2 entries per card */ +static uint16 Egnbr; + +/* Master interrupt handler. One interrupt at a time is handled. + * here. Service routines are called from here. + */ +INTERRUPT (NICK_FAR *(egint)(dev))() +int dev; +{ + register char st; + register uint16 pcbase; + struct egchan *hp; + struct EGTAB *ep; + + ep = &Eagle[dev]; + ep->ints++; + pcbase = ep->addr; + + /* Read interrupt status register from channel A */ + while((st = read_scc(pcbase+CHANA+CTL,R3)) != 0) { + /* Use IFs to process ALL interrupts pending + * because we need to check all interrupt conditions + */ + if (st & CHARxIP) { + /* Channel A Rcv Interrupt Pending */ + hp = &Egchan[2 * dev]; + egrxint(hp); + } else if (st & CHATxIP) { + /* Channel A Transmit Int Pending */ + hp = &Egchan[2 * dev]; + egtxint(hp); + } else if (st & CHAEXT) { + /* Channel A External Status Int */ + hp = &Egchan[2 * dev]; + egexint(hp); + } else if (st & CHBRxIP) { + /* Channel B Rcv Interrupt Pending */ + hp = &Egchan[(2 * dev)+1]; + egrxint(hp); + } else if (st & CHBTxIP) { + /* Channel B Transmit Int Pending */ + hp = &Egchan[(2 * dev)+1]; + egtxint(hp); + } else if (st & CHBEXT) { + /* Channel B External Status Int */ + hp = &Egchan[(2 * dev)+1]; + egexint(hp); + } + /* Reset highest interrupt under service */ + write_scc(hp->base+CTL,R0,RES_H_IUS); + } /* End of while loop on int processing */ + return ep->chain ? ep->oldvec : NULL; +} + +/* Eagle SIO External/Status interrupts + * This can be caused by a receiver abort, or a Tx UNDERRUN/EOM. + * Receiver automatically goes to Hunt on an abort. + * + * If the Tx Underrun interrupt hits, change state and + * issue a reset command for it, and return. + */ +static void +egexint(hp) +register struct egchan *hp; +{ + char st; + int i_state; + + i_state = dirps(); + hp->exints++; + st = read_scc(hp->base+CTL,R0); /* Fetch status */ + + /* Check for Tx UNDERRUN/EOM - only in Transmit Mode */ + if((hp->rstate==0) && (st & TxEOM)) { + /* if in UNDERRUN, go to FLAGOUT state + * see explanation under egtxint() + * CRC & FLAG now going out, so + * wait for Tx BUffer Empty int + */ + + /* If we are not in underrun, this is an unexpected + * underrun. EOM bit should be set, so the SCC will + * now send an abort + */ + + if(hp->tstate == UNDERRUN) + hp->tstate = FLAGOUT; + + /* Tx Buff EMPTY interrupt occurs after CRC is sent */ + } + + /* Receive Mode only + * This triggers when hunt mode is entered, & since an ABORT + * automatically enters hunt mode, we use that to clean up + * any waiting garbage + */ + if((hp->rstate == ACTIVE) && (st & BRK_ABRT)) { + hp->rcp = hp->rcvbuf->data; + hp->rcvbuf->cnt = 0; /* rewind on DCD transition */ + hp->aborts++; /* nbr aborts * 2 */ + } + + /* reset external status latch */ + write_scc(CTL+hp->base,R0,RES_EXT_INT); + + restore(i_state); +} + +/* EG receive interrupt handler. The first receive buffer is pre-allocated + * in the init routine. Thereafter, it is filled here, queued out, and a + * new one acquired. CRC, OVERRUN and TOOBIG errors merely 'rewind' the + * pointers and reuse the same buffer. + */ +static void +egrxint(hp) +register struct egchan *hp; +{ + register uint16 base; + char rse; + int i_state; + + i_state = dirps(); + hp->rxints++; + base = hp->base; + + if ((read_scc(base+CTL,R0)) & Rx_CH_AV) { + /* there is a char to be stored + * read special condition bits before reading the data char + */ + rse = read_scc(hp->base+CTL,R1); /* get status byte from R1 */ + if(rse & Rx_OVR) { + /* Rx overrun - toss buffer */ + hp->rcp = hp->rcvbuf->data; /* reset buffer pointers */ + hp->rcvbuf->cnt = 0; + hp->rstate = RXERROR; /* set error flag */ + hp->rovers++; /* count overruns */ + } else if(hp->rcvbuf->cnt >= hp->bufsiz) { + /* Too large -- toss buffer */ + hp->toobig++; + hp->rcp = hp->rcvbuf->data; /* reset buffer pointers */ + hp->rcvbuf->cnt = 0; + hp->rstate = TOOBIG; /* when set, chars are not stored */ + } + /* ok, we can store the received character now */ + if(hp->rstate == ACTIVE) { /* If no errors... */ + *hp->rcp++ = inportb(base+DATA); /* char to rcv buff */ + hp->rcvbuf->cnt++; /* bump count */ + } else { + /* got to empty FIFO */ + (void) inportb(base+DATA); + write_scc(hp->base+CTL,R0,ERR_RES); /* reset err latch */ + hp->rstate = ACTIVE; + } + } + /* char has been stored + * read special condition bits + */ + rse = read_scc(hp->base+CTL,R1); /* get status byte from R1 */ + + /* The End of Frame bit is ALWAYS associated with a character, + * usually, it is the last CRC char. Only when EOF is true can + * we look at the CRC byte to see if we have a valid frame + */ + if(rse & END_FR) { + hp->rxframes++; + /* END OF FRAME -- Make sure Rx was active */ + if(hp->rcvbuf->cnt > 0) { /* any data to store */ + /* looks like a frame was received + * now is the only time we can check for CRC error + */ + if((rse & CRC_ERR) || (hp->rstate > ACTIVE) || (hp->rcvbuf->cnt < 10)) { + /* error occurred; toss frame */ + if(rse & CRC_ERR) + hp->crcerr++; /* count CRC errs */ + if(hp->rstate == RXERROR) + hp->rovers++; + /* don't throw away buffer - + * merely reset the pointers + */ + hp->rcp = hp->rcvbuf->data; + hp->rcvbuf->cnt = 0; + } else { + /* Here we have a valid frame */ + hp->rcvbuf->cnt -= 2; /* Toss 2 crc bytes */ + net_route(hp->iface,&hp->rcvbuf); + /* packet queued - get buffer for next frame */ + hp->rcvbuf = alloc_mbuf(hp->bufsiz); + hp->rcp = hp->rcvbuf->data; + hp->rcvbuf->cnt = 0; + if(hp->rcvbuf == NULL) { + /* No memory, abort receiver */ + restore(i_state); + _printf(_("DISASTER! Out of Memory for Receive!\n")); + write_scc(CTL+base,R3,Rx8); + return; + } + } /* end good frame queued */ + } /* end check for active receive upon EOF */ + hp->rstate = ACTIVE; /* and clear error status */ + } /* end EOF check */ + restore(i_state); +} + +/* egchan transmit interrupt service routine + * + * The state variable tstate, along with some static pointers, + * represents the state of the transmit "process". + */ +static void +egtxint(hp) +register struct egchan *hp; +{ + register uint16 base; + int c; + int i_state; + + i_state = dirps(); + + if(hp->tstate != DEFER && hp->tstate) + hp->txints++; + base = hp->base; + + switch(hp->tstate) { + case FLAGOUT: + /* Here after CRC sent and Tx interrupt fires. + * To give the SCC a chance to get the FLAG + * out, we delay 100 Ms + */ + hp->tstate = IDLE; /* fall thru to IDLE */ + waitmsec(10); /* 100 msec wait for flag Tx */ + /* Note, it may be possible to stuff out a + * meaningless character, wait for the interrupt + * then go to idle. A delay is absolutely necessary + * here else the packet gets truncated prematurely + * when no other packet is waiting to be sent. + * IDLE state indicates either we are starting a brand new packet + * as a result of its being queued for transmission (egtxint called + * from eg_raw), or after a frame has been transmitted (as a + * result of a Tx buffer empty interrupt after the CRC/FLAG + */ + case IDLE: + /* Transmitter idle. Find a frame for transmission */ + if((hp->sndbuf = dequeue(&hp->sndq)) == NULL) { + /* Nothing to send - return to receive mode + * Tx OFF now - flag should have gone + */ + rts(hp,OFF); + restore(i_state); + return; + } + /* If a buffer to send, we drop thru here */ + case DEFER: /* we may have deferred prev xmit attempt */ + /* PPERSIST CALCULATION: we use the lower byte of the + * 8253 timer 0 count, as a random number (0-255). + * If the persist value is higher, wait one slot time + */ + if(hp->persist >= peekb(0x40,0x6c)) + waitmsec(hp->slotime); + + /* Check DCD so we don't step on a frame being received */ + /* DCD is ACTIVE LOW on the SCC DCD pin, but the bit in R0 */ + /* is SET when DCD is ACTIVE!! */ + + if((read_scc(base+CTL,R0) & DCD) > 0) { /* Carrier Detected? */ + hp->tstate = DEFER; /* defer xmit */ + /* don't release dequeued buffer...*/ + restore(i_state); + return; + } + + rts(hp,ON); /* Transmitter on */ + /* ints not enabled yet */ + + /* Get next char to send */ + c = PULLCHAR(&hp->sndbuf); /* one char at a time */ + write_scc(CTL+base,R0,RES_Tx_CRC); /* reset for next frame */ + outportb(base+DATA,c); /* First char out now */ + + /* select transmit interrupts to enable */ + + write_scc(CTL+base,R15,TxUIE); /* allow Underrun int only */ + write_scc(CTL+base,R1,TxINT_ENAB|EXT_INT_ENAB); /* Tx/Extern ints on */ + write_scc(CTL+base,R9,MIE|NV); /* master enable */ + /* enable interrupt latch on board */ + outportb(hp->dmactrl,INTENABLE); + + hp->tstate = ACTIVE; /* char going out now */ + restore(i_state); + return; + + case ACTIVE: + /* Here we are actively sending a frame */ + if((c = PULLCHAR(&hp->sndbuf)) != -1){ + outportb(hp->base+DATA,c); /* next char is gone */ + /* stuffing a char satisfies Interrupt condition */ + } else { + /* No more to send - just stop till underrun int */ + hp->tstate = UNDERRUN; + free_p(&hp->sndbuf); + /* now we reset the EOM latch & enable underrun int */ + write_scc(CTL+base,R0,RES_EOM_L); /* send CRC at underrun */ + write_scc(CTL+hp->base,R0,RES_Tx_P); /* reset Tx Int Pend */ + } + restore(i_state); + return; /* back to wait for interrupt */ + + case UNDERRUN: + /* + * This state is handled by an UNDERRUN interrupt, which + * is an External Status interrupt. At UNDERRUN, the + * UNDERRUN/EOM latch in R0 will be 0, so the SCC will send + * CRC and ending flag. After the CRC clears the Tx buffer, + * a TX BUFF EMPTY interrupt will fire. At that time, we + * should be in FLAGOUT state, ready to send another frame + * if one is there to send. + */ + break; + } /* end switch */ + restore(i_state); +} + +/* SET Transmit or Receive Mode + * Set RTS (request-to-send) to modem on Transmit + */ +static void +rts(hp,x) +register struct egchan *hp; +uint16 x; +{ +uint16 tc; +long br; + + /* Reprogram BRG and turn on transmitter to send flags */ + if(x == ON) { /* Turn Tx ON and Receive OFF */ + write_scc(CTL+hp->base,R3,Rx8); /* Rx off */ + waitmsec(50); /* 500 msec delay before on */ + hp->rstate = IDLE; + write_scc(CTL+hp->base,R9,0); /* Interrupts off */ + br = hp->speed; /* get desired speed */ + tc = (XTAL/br)-2; /* calc 1X BRG divisor */ + write_scc(CTL+hp->base,R12,tc&0xFF); /* lower byte */ + write_scc(CTL+hp->base,R13,(tc>>8)&0xFF); /* upper bite */ + + write_scc(CTL+hp->base,R5,TxCRC_ENAB|RTS|TxENAB|Tx8|DTR); + /* Transmitter now on */ + write_scc(CTL+hp->base,R0,RES_Tx_CRC);/* CRC reset */ + waitmsec(hp->txdelay); /* Delay after Tx on */ + } else { /* Tx OFF and Rx ON */ + hp->tstate = IDLE; + write_scc(CTL+hp->base,R5,Tx8|DTR); /* TX off now */ + write_scc(CTL+hp->base,R0,ERR_RES); /* reset error bits */ + + write_scc(CTL+hp->base,R1,(INT_ALL_Rx|EXT_INT_ENAB)); + write_scc(CTL+hp->base,R15,BRKIE); /* allow ABORT int */ + + /* delay for squelch tail before enable of Rx */ + waitmsec(hp->squeldelay); /* keep it up */ + + /* Reprogram BRG for 32x clock for receive DPLL */ + write_scc(CTL+hp->base,R14,BRSRC); /* BRG off, but keep Pclk source */ + br = hp->speed; /* get desired speed */ + tc = ((XTAL/32)/br)-2; /* calc 32X BRG divisor */ + write_scc(CTL+hp->base,R12,tc&0xFF); /* lower byte */ + write_scc(CTL+hp->base,R13,(tc>>8)&0xFF); /* upper bite */ + write_scc(CTL+hp->base,R14,BRSRC|SEARCH); /* SEARCH mode, keep BRG source */ + write_scc(CTL+hp->base,R14,BRSRC|BRENABL); /* Enable the BRG */ + + /* Now, turn on the receiver and hunt for a flag */ + write_scc(CTL+hp->base,R3,RxENABLE|RxCRC_ENAB|Rx8); + hp->rstate = ACTIVE; /* Normal state */ + } +} + +/* Initialize eg controller parameters */ +static void +egchanparam(hp) +register struct egchan *hp; +{ + uint16 tc; + long br; + register uint16 base; + int i_state; + + /* Initialize 8530 channel for SDLC operation */ + + base = hp->base; +#ifdef notdef + _printf(_("Initializing Channel %c - Base = %x\n"),base&2?'A':'B',base); +#endif + i_state = dirps(); + + switch(base & 2){ + case 2: + write_scc(CTL+base,R9,CHRA); /* Reset channel A */ + break; + case 0: + write_scc(CTL+base,R9,CHRB); /* Reset channel B */ + break; + } + + /* Deselect all Rx and Tx interrupts */ + write_scc(CTL+base,R1,0); + + /* Turn off external interrupts (like CTS/CD) */ + write_scc(CTL+base,R15,0); + + /* X1 clock, SDLC mode */ + write_scc(CTL+base,R4,SDLC|X1CLK); /* SDLC mode and X1 clock */ + + /* Now some misc Tx/Rx parameters */ + /* CRC PRESET 1, NRZI Mode */ + write_scc(CTL+base,R10,CRCPS|NRZI); + + /* Set up BRG and DPLL multiplexers */ + /* Tx Clk from BRG. Rcv Clk from DPLL, TRxC pin outputs DPLL */ + write_scc(CTL+base,R11,TCBR|RCDPLL|TRxCDP|TRxCOI); + + /* Null out SDLC start address */ + write_scc(CTL+base,R6,0); + + /* SDLC flag */ + write_scc(CTL+base,R7,FLAG); + + /* Set up the Transmitter but don't enable it */ + /* DTR, 8 bit TX chars only - TX NOT ENABLED */ + write_scc(CTL+base,R5,Tx8|DTR); + + /* Receiver - intial setup only - more later */ + write_scc(CTL+base,R3,Rx8); /* 8 bits/char */ + + /* Setting up BRG now - turn it off first */ + write_scc(CTL+hp->base,R14,BRSRC); /* BRG off, but keep Pclk source */ + + /* set the 32x time constant for the BRG in Receive mode */ + + br = hp->speed; /* get desired speed */ + tc = ((XTAL/32)/br)-2; /* calc 32X BRG divisor */ + + write_scc(CTL+hp->base,R12,tc&0xFF); /* lower byte */ + write_scc(CTL+hp->base,R13,(tc>>8)&0xFF); /* upper bite */ + + /* Time to set up clock control register for RECEIVE mode + * Eagle has xtal osc going to pclk at 3.6864 Mhz + * The BRG is sourced from that, and set to 32x clock + * The DPLL is sourced from the BRG, and feeds the TRxC pin + * Transmit clock & Receive clock come from DPLL + */ + + /* Following subroutine sets up and ENABLES the receiver */ + rts(hp,OFF); /* TX OFF and RX ON */ + + write_scc(CTL+hp->base,R14,BRSRC|SSBR); /* DPLL from BRG, BRG source is PCLK */ + write_scc(CTL+hp->base,R14,BRSRC|SEARCH); /* SEARCH mode, keep BRG source */ + + write_scc(CTL+hp->base,R14,BRSRC|BRENABL); /* Enable the BRG */ + + /* enable the receive interrupts */ + + write_scc(CTL+hp->base,R1,(INT_ALL_Rx|EXT_INT_ENAB)); + write_scc(CTL+hp->base,R15,BRKIE); /* ABORT int */ + write_scc(CTL+hp->base,R9,MIE|NV); /* master enable */ + + /* enable interrupt latch on board */ + outportb(hp->dmactrl,INTENABLE); + + /* Now, turn on the receiver and hunt for a flag */ + write_scc(CTL+hp->base,R3,RxENABLE|RxCRC_ENAB|Rx8); + + restore(i_state); +} + +/* Attach a EAGLE interface to the system + * argv[0]: hardware type, must be "eagle" + * argv[1]: I/O address, e.g., "0x300" + * argv[2]: vector, e.g., "2" + * argv[3]: mode, must be: + * "ax25" (AX.25 UI frame format) + * argv[4]: interface label, e.g., "eg0" + * argv[5]: receiver packet buffer size in bytes + * argv[6]: maximum transmission unit, bytes + * argv[7]: interface speed, e.g, "1200" + * argv[8]: First IP address, optional (defaults to Ip_addr); + * argv[9]: Second IP address, optional (defaults to Ip_addr); + */ +int +eg_attach(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct iface *if_pca,*if_pcb; + struct egchan *hp; + int dev; + char *cp; + + /* Quick check to make sure args are good and mycall is set */ + if(strcmp(argv[3],"ax25") != 0){ + _printf(_("Mode %s unknown for interface %s\n"), + argv[3],argv[4]); + return -1; + } + if(if_lookup(argv[4]) != NULL){ + _printf(_("Interface %s already exists\n"),argv[4]); + return -1; + } + if(Mycall[0] == '\0'){ + _printf(_("set mycall first\n")); + return -1; + } + /* Note: More than one card can be supported if you give up a COM: + * port, thus freeing up an IRQ line and port address + */ + + if(Egnbr >= EGMAX) { + _printf(_("Only 1 EAGLE controller supported right now!\n")); + return -1; + } + if(setencap(NULL,argv[3]) == -1){ + _printf(_("Unknown encapsulation %s\n"),argv[3]); + return -1; + } + dev = Egnbr++; + + /* Initialize hardware-level control structure */ + Eagle[dev].addr = htoi(argv[1]); + Eagle[dev].vec = atoi(argv[2]); + if(strchr(argv[2],'c') != NULL) + Eagle[dev].chain = 1; + else + Eagle[dev].chain = 0; + + + /* Save original interrupt vector */ + Eagle[dev].oldvec = getirq(Eagle[dev].vec); + + /* Set new interrupt vector */ + if(setirq(Eagle[dev].vec,eghandle[dev]) == -1){ + _printf(_("IRQ %u out of range\n"),Eagle[dev].vec); + Egnbr--; + return -1; + } + /* Create interface structures and fill in details */ + if_pca = (struct iface *)callocw(1,sizeof(struct iface)); + if_pcb = (struct iface *)callocw(1,sizeof(struct iface)); + + if_pca->addr = if_pcb->addr = Ip_addr; + if(argc > 8) + if_pca->addr = resolve(argv[8]); + if(argc > 9) + if_pcb->addr = resolve(argv[9]); + + if(if_pca->addr == 0 || if_pcb->addr == 0){ + printf(Noipaddr); + free(if_pca); + free(if_pcb); + return -1; + } + /* Append "a" to interface associated with A channel */ + if_pca->name = mallocw((unsigned)strlen(argv[4])+2); + strcpy(if_pca->name,argv[4]); + strcat(if_pca->name,"a"); + /* Append "b" to iface associated with B channel */ + if_pcb->name = mallocw((unsigned)strlen(argv[4])+2); + strcpy(if_pcb->name,argv[4]); + strcat(if_pcb->name,"b"); + + if_pcb->mtu = if_pca->mtu = atoi(argv[6]); + if_pcb->ioctl = if_pca->ioctl = eg_ctl; + if_pca->dev = 2*dev; /* eg0a */ + if_pcb->dev = 2*dev + 1; /* eg0b */ + if_pcb->stop = if_pca->stop = eg_stop; + if_pcb->raw = if_pca->raw = eg_raw; + + /* Must work, was checked at top */ + setencap(if_pca,argv[3]); + setencap(if_pcb,argv[3]); + if(if_pcb->hwaddr == NULL) + if_pcb->hwaddr = mallocw(AXALEN); + memcpy(if_pcb->hwaddr,Mycall,AXALEN); + if(if_pca->hwaddr == NULL) + if_pca->hwaddr = mallocw(AXALEN); + memcpy(if_pca->hwaddr,Mycall,AXALEN); + + /* Link em in to the interface chain */ + if_pca->next = if_pcb; + if_pcb->next = Ifaces; + Ifaces = if_pca; + + /* set params in egchan table for CHANNEL B */ + + hp = &Egchan[2*dev+1]; /* eg1 is offset 1 */ + hp->iface = if_pcb; + hp->stata = Eagle[dev].addr + CHANA + CTL; /* permanent status */ + hp->statb = Eagle[dev].addr + CHANB + CTL; /* addrs for CHANA/B*/ + hp->dmactrl = Eagle[dev].addr + DMACTRL; /* Eagle control reg */ + hp->speed = (uint16)atoi(argv[7]); + hp->base = Eagle[dev].addr + CHANB; + hp->bufsiz = atoi(argv[5]); + hp->tstate = IDLE; + /* default KISS Params */ + hp->txdelay = 25; /* 250 Ms */ + hp->persist = 64; /* 25% persistence */ + hp->slotime = 10; /* 100 Ms */ + hp->squeldelay = 20; /* 200 Ms */ + + write_scc(CTL+hp->stata,R9,FHWRES); /* Hardware reset */ + /* one time only */ + /* Disable interrupts with Master interrupt ctrl reg */ + write_scc(CTL+hp->stata,R9,0); + + egchanparam(hp); + + /* Pre-allocate a receive buffer */ + hp->rcvbuf = alloc_mbuf(hp->bufsiz); + if(hp->rcvbuf == NULL) { + /* No memory, abort receiver */ + _printf(_("EGATTACH: No memory available for Receive buffers\n")); + /* Restore original interrupt vector */ + setirq(Eagle[dev].vec,Eagle[dev].oldvec); + Egnbr--; + return(-1); + } + hp->rcp = hp->rcvbuf->data; + hp->rcvbuf->cnt = 0; + hp->sndq = NULL; + + /* set params in egchan table for CHANNEL A */ + hp = &Egchan[2*dev]; /* eg0a is offset 0 */ + hp->iface = if_pca; + hp->speed = (uint16)atoi(argv[7]); + hp->base = Eagle[dev].addr + CHANA; + hp->bufsiz = atoi(argv[5]); + hp->tstate = IDLE; + /* default KISS Params */ + hp->txdelay = 25; /* 250 Ms */ + hp->persist = 64; /* 25% persistence */ + hp->slotime = 10; /* 100 Ms */ + hp->squeldelay = 20; /* 200 Ms */ + + egchanparam(hp); + + /* Pre-allocate a receive buffer */ + hp->rcvbuf = alloc_mbuf(hp->bufsiz); + if(hp->rcvbuf == NULL) { + /* No memory, abort receiver */ + _printf(_("EGATTACH: No memory available for Receive buffers\n")); + /* Restore original interrupt vector */ + setirq(Eagle[dev].vec,Eagle[dev].oldvec); + Egnbr--; + return -1; + } + hp->rcp = hp->rcvbuf->data; + hp->rcvbuf->cnt = 0; + hp->sndq = NULL; + + write_scc(CTL+hp->base,R9,MIE|NV); /* master interrupt enable */ + + /* Enable interrupts on the EAGLE card itself */ + outportb(hp->dmactrl,INTENABLE); + + /* Enable interrupt */ + maskon(Eagle[dev].vec); + + cp = if_name(if_pca," tx"); + if_pca->txproc = newproc(cp,512,if_tx,0,if_pca,NULL,0); + free(cp); + cp = if_name(if_pcb," tx"); + if_pcb->txproc = newproc(cp,512,if_tx,0,if_pcb,NULL,0); + free(cp); + + return 0; +} + + +/* Shut down interface */ +static int +eg_stop(iface) +struct iface *iface; +{ + int dev; + + dev = iface->dev; + if(dev & 1) + return 0; + dev >>= 1; /* Convert back into eagle number */ + + /* Turn off interrupts */ + maskoff(Eagle[dev].vec); + + /* Restore original interrupt vector */ + setirq(Eagle[dev].vec,Eagle[dev].oldvec); + + /* Force hardware reset */ + write_scc(CTL+Eagle[dev].addr + CHANA,R9,FHWRES); + + /* resets interrupt enable on eagle card itself */ + outportb(Eagle[dev].addr+DMACTRL,0); + return 0; +} + +/* Send raw packet on eagle card */ +static int +eg_raw( +struct iface *iface, +struct mbuf **bpp +){ + char kickflag; + struct egchan *hp; + + dump(iface,IF_TRACE_OUT,*bpp); + iface->rawsndcnt++; + iface->lastsent = secclock(); + hp = &Egchan[iface->dev]; + kickflag = (hp->sndq == NULL) & (hp->sndbuf == NULL); /* clever! flag=1 if something in queue */ + enqueue(&hp->sndq,bpp); + if(kickflag) /* simulate interrupt to xmit */ + egtxint(hp); /* process interrupt */ + return 0; +} +/* routine to delay n increments of 10 milliseconds + * about right on a turbo XT - will be slow on 4.77 + * Still looking for a way to use the 8253 timer... + */ +static void +waitmsec(n) +int n; +{ + long i; + + for(i=0L; i < (200L*n); i++) + ; /* simple loop delay */ +} + +/* display EAGLE Channel stats */ +int +doegstat(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct egchan *hp0, *hp1; + int i; + + for(i=0; ibase, hp0->rxints, + hp0->txints, hp0->exints, hp0->enqueued, hp0->crcerr, hp0->aborts, + hp0->rovers,hp0->rxframes, + hp0->rstate==0?"IDLE":hp0->rstate==1?"ACTIVE":hp0->rstate==2?"RXERROR":hp0->rstate==3?"RXABORT":"TOOBIG"); + + _printf(_("0x%x\t\t%ld\t%ld\t%ld\t%d\t%d\t%d\t%d\t%d\nRcv State=%s\n\n"), hp1->base, hp1->rxints, + hp1->txints, hp1->exints, hp1->enqueued, hp1->crcerr, hp1->aborts, + hp1->rovers,hp1->rxframes, + hp1->rstate==0?"IDLE":hp1->rstate==1?"ACTIVE":hp1->rstate==2?"RXERROR":hp1->rstate==3?"RXABORT":"TOOBIG"); + } + return 0; +} + +/* Subroutine to set kiss params in channel tables */ +static int32 +eg_ctl(iface,cmd,set,val) +struct iface *iface; +int cmd; +int set; +int32 val; +{ + struct egchan *hp; + + hp = &Egchan[iface->dev]; /* point to channel table */ + switch(cmd){ + case PARAM_TXDELAY: + if(set) + hp->txdelay = val; + return hp->txdelay; + case PARAM_PERSIST: + if(set) + hp->persist = val; + return hp->persist; + case PARAM_SLOTTIME: + if(set) + hp->slotime = val; + return hp->slotime; + case PARAM_TXTAIL: + if(set) + hp->squeldelay = val; + return hp->squeldelay; + } + return -1; +} diff --git a/src/nos/drivers/enet.c b/src/nos/drivers/enet.c new file mode 100644 index 00000000..d19957e8 --- /dev/null +++ b/src/nos/drivers/enet.c @@ -0,0 +1,127 @@ +/* Stuff generic to all Ethernet controllers + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "arp.h" +#include "ip.h" +#include "enet.h" + +uint8 Ether_bdcst[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + +/* Convert Ethernet header in host form to network mbuf */ +void +htonether( +struct ether *ether, +struct mbuf **bpp +){ + register uint8 *cp; + + if(bpp == NULL) + return; + pushdown(bpp,NULL,ETHERLEN); + cp = (*bpp)->data; + memcpy(cp,ether->dest,EADDR_LEN); + cp += EADDR_LEN; + memcpy(cp,ether->source,EADDR_LEN); + cp += EADDR_LEN; + put16(cp,ether->type); +} +/* Extract Ethernet header */ +int +ntohether( +struct ether *ether, +struct mbuf **bpp +){ + pullup(bpp,ether->dest,EADDR_LEN); + pullup(bpp,ether->source,EADDR_LEN); + ether->type = pull16(bpp); + return ETHERLEN; +} + +/* Format an Ethernet address into a printable ascii string */ +char * +pether( +char *out, +uint8 *addr +){ + sprintf(out,"%02x:%02x:%02x:%02x:%02x:%02x", + addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]); + return out; +} + +/* Convert an Ethernet address from Hex/ASCII to binary */ +int +gether( +/* Nick register */ uint8 *out, +/* Nick register */ char *cp +){ + register int i; + + for(i=6; i!=0; i--){ + *out++ = htoi(cp); + if((cp = strchr(cp,':')) == NULL) /* Find delimiter */ + break; + cp++; /* and skip over it */ + } + return i; +} +/* Send an IP datagram on Ethernet */ +int +enet_send( +struct mbuf **bpp, /* Buffer to send */ +struct iface *iface, /* Pointer to interface control block */ +int32 gateway, /* IP address of next hop */ +uint8 tos /* Type of service, not used */ +){ + uint8 *egate; + + egate = res_arp(iface,ARP_ETHER,gateway,bpp); + if(egate != NULL) + return (*iface->output)(iface,egate,iface->hwaddr,IP_TYPE,bpp); + return 0; +} +/* Send a packet with Ethernet header */ +int +enet_output( +struct iface *iface, /* Pointer to interface control block */ +uint8 *dest, /* Destination Ethernet address */ +uint8 *source, /* Source Ethernet address */ +uint16 type, /* Type field */ +struct mbuf **bpp /* Data field */ +){ + struct ether ep; + + memcpy(ep.dest,dest,EADDR_LEN); + memcpy(ep.source,source,EADDR_LEN); + ep.type = type; + htonether(&ep,bpp); + return (*iface->raw)(iface,bpp); +} +/* Process incoming Ethernet packets. Shared by all ethernet drivers. */ +void +eproc( +struct iface *iface, +struct mbuf **bpp +){ + struct ether hdr; + + /* Remove Ethernet header and kick packet upstairs */ + ntohether(&hdr,bpp); + + switch(hdr.type){ + case REVARP_TYPE: + case ARP_TYPE: + arp_input(iface,bpp); + break; + case IP_TYPE: + ip_route(iface,bpp,hdr.dest[0] & 1); + break; + default: + free_p(bpp); + break; + } +} + diff --git a/src/nos/drivers/hapn.c b/src/nos/drivers/hapn.c new file mode 100644 index 00000000..1e2fe90b --- /dev/null +++ b/src/nos/drivers/hapn.c @@ -0,0 +1,503 @@ +/* Driver for HAPN-1 8273 card on PC + * Jon Bloom, KE3Z; adapted from KA9Q's PC-100 driver + * Modified Rx interrupt routine to prevent lockup + * John Tanner VK2ZXQ 6th Feb 1988 + * Adapted back into 871225.9 by KA9Q 15 Feb 1988 + */ +#include +#ifndef ZILOG +#include +#endif +#include "global.h" +#include +#include "timer.h" +#include "mbuf.h" +#include "iface.h" +#include "pktdrvr.h" +#include "netuser.h" +#include "hapn.h" +#include "ax25.h" +#include "trace.h" +#include "nospc.h" +#include "proc.h" +#include +#include "po/messages.h" + +static void cmd_8273(uint16 base,uint8 cmd,int np,...); +static int hapn_init(struct hapn *hp); +static int hapn_raw(struct iface *iface,struct mbuf **bpp); +static int hapn_stop(struct iface *iface); +static int hcdchk(uint16 base); +static void hrxint(struct hapn *hp); +static void hrxgo(struct hapn *hp); +static void htxint(void *p); + +/* Nick static */ struct hapn Hapn[NHAPN]; +static INTERRUPT (*H_handle[])() = { ha0vec }; +static uint16 Nhapn; + +/* send command to the 8273 + * "base" = base port of 8273 + * "cmd" = command byte + * "np" = number of parameter bytes + * "p1" = first parameter (parameters are int) + */ +static void +cmd_8273(uint16 base, uint8 cmd, int np, ...) +{ + int p; + va_list ap; + + while(inportb(base+STA) & CBSY) + ; + outportb(base+CMD, cmd); + + va_start(ap,np); + while(np--){ + while(inportb(base+STA) & CPBF) + ; + p = va_arg(ap,int); + outportb(base+PAR, p); + } + va_end(ap); +} +/* Start receiver of 8273 */ +static void +hrxgo(hp) +register struct hapn *hp; +{ + cmd_8273(hp->base, GENERAL_RX, 2, hp->bufsiz & 0xff, hp->bufsiz >> 8); +} + +/* Interrupt service function. Entered with hapn index + * The "flag" variable is used in this routine to indicate a + * valid TX or RX interrupt. If an invalid interrupt is detected + * the 8273 is reset. + */ +INTERRUPT (NICK_FAR *(haint)(dev))() +int dev; +{ + register struct hapn *hp; + register uint16 base; + char flag = 0; + + hp = &Hapn[dev]; + base = hp->base; + + /* Check for TX interrupt */ + if(inportb(base+STA) & TXINT){ + flag = 1; /* Valid interrupt, set flag */ + htxint(hp); + } + /* Check for RX interrupt */ + if(inportb(base+STA) & RXINT){ + flag = 1; /* Valid interrupt, set flag */ + hrxint(hp); + } + /* Check for unknown interrupt */ + if(!flag){ + hp->badint++; /* Increment error counter */ + hapn_init(hp); /* Reinitialise the 8273 */ + } + return hp->chain ? hp->oldvec : NULL; +} +/* RX interrupt service + * if status register bit "RXIRA" is set, interrupt is final, + * otherwise, interrupt is data request + */ +static void +hrxint(hp) +register struct hapn *hp; +{ + struct mbuf *bp; + register uint16 base; + unsigned char results[10]; + + hp->rxints++; + base = hp->base; + + if(inportb(base+STA) & RXIRA){ + /* RX result interrupt + * If the result is a good frame 3 bytes need to be read + * If an error has occurred only one byte need to be read + */ + + /* Read first result byte and test for good data */ + if((results[0]=(inportb(base + RXI))) == 0xe0){ + /* Good result; read two more result bytes */ + while((inportb(base + STA) & RXIRA) == 0) + ; + /* Read second result byte */ + results[1] = inportb(base + RXI); + /* Wait for third result byte */ + while((inportb(base + STA) & RXIRA) == 0) + ; + results[2] = inportb(base + RXI);/* Read it */ + + /* Since this frame is ok put it on the queue */ + net_route(hp->iface,&hp->rcvbuf); + hp->rframes++; + } else { + /* Error termination + * Parse RIC and act accordingly + * Only one result byte returned on error + */ + switch(results[0]){ + case CRCERR: + hp->crcerr++; + break; + case ABORT_DET: + hp->aborts++; + break; + case DMA_OVRN: + hp->dmaorun++; + break; + case MEM_OVFL: + hp->toobig++; + break; + case CD_LOSS: + hp->cdloss++; + hapn_init(hp); /* 8273 reset on cd error */ + break; + case RX_ORUN: + hp->rxorun++; + break; + } + /* Throw rx buffer contents away to start over */ + hp->rcp = hp->rcvbuf->data; + hp->rcvbuf->cnt = 0; + } + /* Restart the receiver */ + cmd_8273(base,RX_DISABLE,0); + hrxgo(hp); + } else { + /* RX data interrupt; allocate new rx buffer if none present */ + if((bp = hp->rcvbuf) == NULL){ + bp = hp->rcvbuf = alloc_mbuf(hp->bufsiz); + if(bp == NULL){ + /* No memory available */ + hp->nomem++; + cmd_8273(base, RX_DISABLE, 0); + hrxgo(hp); + return; + } + /* Init buffer pointer */ + hp->rcp = hp->rcvbuf->data; + } + /* Barf if rx data is more than buffer can hold (should never + * happen since 8273 is also counting bytes). + */ + if(bp->cnt++ >= hp->bufsiz){ + hp->toobig++; + cmd_8273(base, RX_DISABLE, 0); + hrxgo(hp); + free_p(&bp); + hp->rcvbuf = NULL; + return; + } + /* Store the received byte */ + *hp->rcp++ = inportb(base+RXD); + } +} + +/* test for busy channel (CD active) + * returns TRUE if channel busy + */ +static int +hcdchk(base) +uint16 base; +{ + int i_state; + + i_state = dirps(); + cmd_8273(base, READ_A, 0); + while(!(inportb(base+STA) & CRBF)) + ; + restore(i_state); + return((inportb(base+RES) & CD) != 0); +} + +/* TX interrupt service + * if status register bit "TXIRA" is set, interrupt is final, + * otherwise, interrupt is data request + */ +static void +htxint(p) +void *p; +{ + register struct hapn *hp; + register uint16 base; + uint16 len; + int c; + int i_state; + + hp = (struct hapn *)p; + hp->txints++; + base = hp->base; + + c = 0; + i_state = dirps(); + if(inportb(base+STA) & TXIRA){ /* TX result interupt */ + hp->tstate = IDLE; + free_p(&hp->sndbuf); + hp->sndbuf = NULL; + + /* Read result */ + while((inportb(base+STA) & (TXINT | TXIRA)) != (TXINT | TXIRA)) + ; + c = inportb(base+TXI); + + /* Test for tx abort */ + switch(c & 0x1f){ + case DMA_URUN: + hp->t_urun++; + break; + case CTS_LOSS: + hp->ctsloss++; + break; + case ABORT_CMPLT: + hp->taborts++; + break; + } + } + switch(hp->tstate){ + case IDLE: /* See if a buffer is ready to be sent */ + if((hp->sndbuf = dequeue(&hp->sndq)) == NULL) + break; + + case DEFER: /* Busy-channel check */ + if(hp->mode == CSMA && (c & 0x1f) != EARLY_TXI){ + if(hcdchk(base)){ + hp->tstate = DEFER; + start_timer(&hp->defer); + break; + } + } + /* Start transmitter */ + stop_timer(&hp->defer); + len = len_p(hp->sndbuf); + cmd_8273(base, TX_FRAME, 2, len & 0xff, len >> 8); + hp->tstate = ACTIVE; + hp->tframes++; + break; + case ACTIVE: /* Get next byte to send */ + if((c = PULLCHAR(&hp->sndbuf)) == -1){ + cmd_8273(base, ABORT_TXF, 0); + hp->tstate = IDLE; + } else + outportb(base+TXD, c); + break; + } + restore(i_state); +} + +/* Attach a HAPN adaptor to the system + * argv[0]: hardware type, must be "hapn" + * argv[1]: I/O address, e.g. "0x310" + * argv[2]: vector, e.g. "2" + * argv[3]: mode, must be "ax25i" or "ax25ui" + * argv[4]: interface name, e.g. "ha0" + * argv[5]: rx packet buffer size in bytes + * argv[6]: maximum transmission unit in bytes + * argv[7]: channel-access mechanism, "csma" or "full" + * argv[8]: IP address, optional (defaults to Ip_addr) + */ +int +hapn_attach(argc, argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct iface *if_h; + struct hapn *hp; + int dev, i; + static struct { + char *str; + char type; + } ch_access [] = { "csma", 0, "full", 1 }; + char *cp; + int i_state; + + if(Nhapn >= NHAPN){ + _printf(_("Too many HAPN adaptors\n")); + return -1; + } + if(if_lookup(argv[4]) != NULL){ + _printf(_("Interface %s already exists\n"),argv[4]); + return -1; + } + if(setencap(NULL,argv[3]) == -1){ + _printf(_("Mode %s unknown for interface %s\n"), argv[3], argv[4]); + return -1; + } + if(Mycall[0] == '\0'){ + _printf(_("set mycall first\n")); + return -1; + } + /* Create new interface structure */ + if_h = (struct iface *) callocw(1,sizeof(struct iface)); + + /* Set interface address */ + if_h->addr = Ip_addr; + if(argc > 8) + if_h->addr = resolve(argv[8]); + if(if_h->addr == 0){ + printf(Noipaddr); + free(if_h); + return -1; + } + dev = Nhapn++; + hp = &Hapn[dev]; + + /* Initialize hardware constants */ + hp->base = htoi(argv[1]); + hp->vec = atoi(argv[2]); + if(strchr(argv[2],'c') != NULL) + hp->chain = 1; + else + hp->chain = 0; + + /* Save original interrupt vector */ + hp->oldvec = getirq(Hapn[dev].vec); + + /* Set new interrupt vector */ + setirq(hp->vec, H_handle[dev]); + + /* Continue filling interface structure */ + if_h->name = strdupw(argv[4]); + if_h->mtu = atoi(argv[6]); + if_h->dev = dev; + if_h->stop = hapn_stop; + if_h->raw = hapn_raw; + hp->iface = if_h; + + setencap(if_h,argv[3]); + if(if_h->hwaddr == NULL) + if_h->hwaddr = mallocw(AXALEN); + memcpy(if_h->hwaddr,Mycall,AXALEN); + /* Link the interface into the interface list */ + if_h->next = Ifaces; + Ifaces = if_h; + + /* Fill the local data structure */ + hp->bufsiz = atoi(argv[5]); + for(i = 0; i < (sizeof ch_access / sizeof ch_access[0]); i++) + if(!strcmp(argv[7], ch_access[i].str)) + hp->mode = ch_access[i].type; + + /* Initialize the hardware */ + i_state = dirps(); + hapn_init(hp); + + /* Initialize the defer timer */ + set_timer(&hp->defer,MSPTICK); + hp->defer.func = htxint; + hp->defer.arg = hp; + + /* Enable the interrupt */ + maskon(hp->vec); + + restore(i_state); + cp = if_name(if_h," tx"); + if_h->txproc = newproc(cp,512,if_tx,0,if_h,NULL,0); + free(cp); + return 0; +} + +/* initialize the HAPN adaptor */ +static int +hapn_init(hp) +register struct hapn *hp; +{ + register uint16 base; + int i_state; + + i_state = dirps(); + base = hp->base; + + /* Reset the 8273 */ + outportb(base+RST, 1); + outportb(base+RST, 0); + inportb(base+TXI); /* Clear any old IR contents */ + inportb(base+RXI); + + /* Select the operating modes */ + cmd_8273(base, SET_XFER, 1, 1); + cmd_8273(base, SET_MODE, 1, HDLC | EARLY | PREFRM | FLG_STM); + cmd_8273(base, SET_SERIAL, 1, NRZI); + cmd_8273(base, SET_B, 1, IRQ_ENB | RTS); + cmd_8273(base, RST_B, 1, 0xff ^ RTS); + hrxgo(hp); + restore(i_state); + return 0; +} + +/* shut down the HAPN adaptor */ +static int +hapn_stop(iface) +struct iface *iface; +{ + int dev; + uint16 base; + struct hapn *hp; + + dev = iface->dev; + hp = &Hapn[dev]; + base = hp->base; + + /* Mask off interrupt input */ + maskoff(hp->vec); + + /* Restore original interrupt vector */ + setirq(hp->vec,hp->oldvec); + + /* Reset the 8273 */ + outportb(base+RST, 1); + outportb(base+RST, 0); + return 0; +} + +/* Display adaptor statistics */ +int +dohapnstat(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct hapn *hp; + int i; + + if(Nhapn == 0){ + _printf(_("No HAPN adaptor attached\n")); + return 1; + } + for(i = 0; i < Nhapn; i++){ + hp = &Hapn[i]; + _printf(_("HAPN %d: rxints: %ld txints: %ld badint: %-5d\n"), i, + hp->rxints,hp->txints,hp->badint); + _printf(_(" receive - frames: %-5d crcerrs: %-5d aborts: %-5d dmaorun: %-5d\n"), + hp->rframes,hp->crcerr, hp->aborts, hp->dmaorun); + _printf(_(" - toobig: %-5d dcdloss: %-5d rxorun: %-5d\n"), + hp->toobig,hp->cdloss,hp->rxorun); + _printf(_(" transmit - frames: %-5d aborts : %-5d uruns : %-5d ctsloss: %-5d\n"), + hp->tframes,hp->taborts, hp->t_urun, hp->ctsloss); + } + return 0; +} + +/* Send raw packet on HAPN interface */ +static int +hapn_raw( +struct iface *iface, +struct mbuf **bpp +){ + struct hapn *hp; + + hp = &Hapn[iface->dev]; + enqueue(&hp->sndq, bpp); + + /* See if anything being transmitted */ + if(hp->tstate == IDLE) + htxint(hp); + return 0; +} diff --git a/src/nos/drivers/hs.c b/src/nos/drivers/hs.c new file mode 100644 index 00000000..6f2c4287 --- /dev/null +++ b/src/nos/drivers/hs.c @@ -0,0 +1,717 @@ +/* Interface driver for the DRSI PCPA or the Eagle 8530 boards for the IBM PC + * connected to a WA4DSY 56kbps modem. Uses polling-loop transfers with + * interrupts disabled for maximum speed. + * + * This driver is a bit of a kludge. A DMA-driven card and driver (e.g., + * the PI) is much better, but this is better than nothing if all you have + * is a "dumb" 8530 card. + * + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#ifndef ZILOG +#include +#endif +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "pktdrvr.h" +#include "netuser.h" +#include "hs.h" +#include "esccgen.h" +#include "ax25.h" +#include "trace.h" +#include "nospc.h" +#include "proc.h" +#include "devparam.h" +#include +#include "po/messages.h" + +static void flushrx(uint16 data); +static void hdlcparam(struct hdlc *hp); +static void hexint(struct hdlc *hp); +static void hrxint(struct hdlc *hp); +static int hs_stop(struct iface *iface); +static int hs_raw(struct iface *iface,struct mbuf **bpp); +static int32 hs_ctl(struct iface *,int cmd,int set,int32 val); +static void hstxoff(struct hdlc *hp); +static void hstxon(struct hdlc *hp); +static void htxint(struct hdlc *hp); +static void init_delay(void); +static void msdelay(void); + +/* Nick static */ struct hs Hs[NHS]; +static INTERRUPT (*Hshandle[])() = { hs0vec }; +static struct hdlc Hdlc[2*NHS]; +static uint16 Nhs; + +/* Master interrupt handler for the PC-100 card. All interrupts come + * here first, then are switched out to the appropriate routine. + */ +INTERRUPT (NICK_FAR *(hsint)(dev))() +int dev; +{ + register char iv; + uint16 hsbase; + struct hs *hsp; + register struct hdlc *hp; + + hsp = &Hs[dev]; + hsp->ints++; + hsbase = hsp->addr; + +#ifdef foo + outportb(hsbase+4,0x8+0x10); /* HIT EAGLE INTACK */ + (void)inportb(hsbase+CHANA+CTL,R0); + outportb(hsbase+4,0x8); /***/ +#endif + + /* Read interrupt status from channel A */ + while((iv = read_escc(hsbase+CHANA+CTL,R3)) != 0){ + if(iv & CHARxIP){ + /* Channel A Rcv Interrupt Pending */ + hp = &Hdlc[2*dev]; + hrxint(hp); + } else if(iv & CHATxIP){ + /* Channel A Transmit Int Pending */ + hp = &Hdlc[2*dev]; + htxint(hp); + } else if(iv & CHAEXT){ + /* Channel A External Status Int */ + hp = &Hdlc[2*dev]; + hexint(hp); + } else if(iv & CHBRxIP){ + /* Channel B Rcv Interrupt Pending */ + hp = &Hdlc[(2*dev)+1]; + hrxint(hp); + } else if(iv & CHBTxIP){ + /* Channel B Transmit Int Pending */ + hp = &Hdlc[(2*dev)+1]; + htxint(hp); + } else if(iv & CHBEXT){ + /* Channel B External Status Int */ + hp = &Hdlc[(2*dev)+1]; + hexint(hp); + } + /* Reset interrupt pending state */ + write_escc(hp->ctl,R0,RES_H_IUS); + outportb(hsbase+CHANA+CTL,0); /* Restore pointer to 0 */ + outportb(hsbase+CHANB+CTL,0); /* Restore pointer to 0 */ + } + outportb(hsbase+CHANA+CTL,0); /* Restore pointer to 0 */ + outportb(hsbase+CHANB+CTL,0); /* Restore pointer to 0 */ + return hsp->chain ? hsp->save.vec : NULL; +} +/* HDLC SIO External/Status interrupts + * The only one that can happen in this driver is a DCD change + */ +static void +hexint(hp) +register struct hdlc *hp; +{ + struct mbuf *rcvbuf; + char *cp; + int cnt,data; + register int ctl; + + ctl = hp->ctl; + data = hp->data; + hp->exints++; + + /* Allocate a receive buffer */ + if((rcvbuf = alloc_mbuf(hp->bufsiz+sizeof(struct iface *))) == NULL){ + /* Alloc failed; refuse to proceed */ + hp->nomem++; + write_escc(ctl,R3,ENT_HM|RxENABLE|RxCRC_ENAB|Rx8); + write_escc(ctl,R0,RES_EXT_INT); + return; + } + /* Allow space for descriptor on front */ + rcvbuf->data += sizeof(struct iface *); + cnt = 0; + + /* Disable DCDIE bit so we can track changes in DCD */ + write_escc(ctl,R15,0); + + write_escc(ctl,R3,ENT_HM|RxENABLE|RxCRC_ENAB|Rx8); + flushrx(data); + while((cnt = rx8530(ctl,data,cp,hp->bufsiz)) != -1){ + if(cnt > 4){ + /* Good frame */ + hp->good++; + /* Toss crc */ + rcvbuf->cnt = cnt - 1; + net_route(hp->iface,&rcvbuf); + /* Replenish buffer */ + rcvbuf = alloc_mbuf(hp->bufsiz + sizeof(struct iface *)); + } + /* Start new buffer */ + if(rcvbuf == NULL) + break; /* alloc failed */ + rcvbuf->data += sizeof(struct iface *); + } + write_escc(ctl,R0,RES_EXT_INT); + write_escc(ctl,R15,DCDIE); /* Re-enable DCD */ + write_escc(ctl,R3,ENT_HM|RxENABLE|RxCRC_ENAB|Rx8); + + /* Get rid of fragmentary buffer */ + free_p(&rcvbuf); +} +static void +flushrx(data) +register uint16 data; +{ + register int i = 5; + while(i-- != 0) + (void)inportb(data); +} +/* HDLC receiver interrupt handler. + * Not used in this driver + */ +static void +hrxint(hp) +register struct hdlc *hp; +{ +} +/* HDLC transmit interrupt service routine + * Not used in this driver + */ +static void +htxint(hp) +register struct hdlc *hp; +{ +} + +/* (re)Initialize HDLC controller parameters */ +static void +hdlcparam(hp) +register struct hdlc *hp; +{ + register uint16 ctl; + int i_state; + + /* Initialize 8530 channel for SDLC operation */ + ctl = hp->ctl; + i_state = dirps(); + +#ifdef foo + switch(ctl & 2){ + case CHANA: + write_escc(ctl,R9,CHRA); /* Reset channel A */ + break; + case CHANB: + write_escc(ctl,R9,CHRB); /* Reset channel B */ + break; + } + ppause(1L); /* Allow plenty of time for resetting */ +#endif + + /* Deselect interrupts for now */ + write_escc(ctl,R1,0); + write_escc(ctl,R15,0); + + /* X1 clock, SDLC mode, Sync modes enable, parity disable */ + write_escc(ctl,R4,X1CLK | SDLC | SYNC_ENAB); + + /* CRC preset 1, NRZ encoding, no active on poll, flag idle, + * flag on underrun, no loop mode, 8 bit sync + */ + write_escc(ctl,R10,CRCPS|NRZ); + + /* 8530 gets both tx and rx clock from modem. + * By default, TRxC = transmit clock, RTxC = receive clock + * (swapped 11 Feb 1990 to use new DRSI wiring) UNLESS + * the 'r' parameter is specified + */ + if(!hp->clkrev) + write_escc(ctl,R11,RCRTxCP | TCTRxCP); + else + write_escc(ctl,R11,RCTRxCP | TCRTxCP); + + /* Note: baud rate generator not used */ + + /* Null out SDLC start address */ + write_escc(ctl,R6,0); + + /* SDLC flag */ + write_escc(ctl,R7,FLAG); + + /* DTR On, 8 bit TX chars, no break, TX enable, SDLC CRC, + * RTS off, TxCRC enable + */ + write_escc(ctl,R5,DTR|Tx8|TxENAB|TxCRC_ENAB); + + /* 8 bit RX chars, auto enables off, no hunt mode, RxCRC enable, + * no address search, no inhibit sync chars, disable RX. Rx is + * started only by an actual DCD interrupt + */ + write_escc(ctl,R3,RxENABLE|RxCRC_ENAB|Rx8); + + /* Dummy interrupt vector + * (This probably isn't necessary) + */ + write_escc(ctl,R2,0); + + /* Enable only the external interrupts (modem interrupts) since + * polling is used for all actual tx/rx operations + */ + write_escc(ctl,R1,EXT_INT_ENAB); + + /* Enable only DCD interrupts */ + write_escc(ctl,R15,DCDIE); + + /* No reset, status low, master int enable, enable lower chain, + * no vector + */ + write_escc(ctl,R9,MIE|NV); + + restore(i_state); +} +/* Attach a high speed iterface to the system + * argv[0]: hardware type, must be "hs" + * argv[1]: I/O address, e.g., "0x380" + * argv[2]: vector, e.g., "2" + * argv[3]: mode, must be "ax25" + * argv[4]: interface base label, e.g., "drsi0". Driver appends "a" and "b". + * argv[5]: receiver packet buffer size in bytes + * argv[6]: maximum transmission unit, bytes + * argv[7]: keyup delay, milliseconds + * argv[8]: persistence value, 0-255 + * argv[9]: "r" to reverse sense of clock leads (optional) + */ +int +hs_attach(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct iface *if_hsa,*if_hsb; + struct hdlc *hp; + int dev; + char *cp; + + if(Nhs >= NHS){ + _printf(_("Too many hs controllers\n")); + return -1; + } + if(if_lookup(argv[4]) != NULL){ + _printf(_("Interface %s already exists\n"),argv[4]); + return -1; + } + if(setencap(NULL,argv[3]) == -1){ + _printf(_("Unknown encapsulation %s\n"),argv[3]); + return -1; + } + if(Mycall[0] == '\0'){ + _printf(_("set mycall first\n")); + return -1; + } + dev = Nhs++; + + /* Initialize hardware-level control structure */ + Hs[dev].addr = htoi(argv[1]); + Hs[dev].vec = atoi(argv[2]); + if(strchr(argv[2],'c') != NULL) + Hs[dev].chain = 1; + else + Hs[dev].chain = 0; + + /* Save original interrupt vector */ + Hs[dev].save.vec = getirq(Hs[dev].vec); + /* Set new interrupt vector */ + if(setirq(Hs[dev].vec,Hshandle[dev]) == -1){ + _printf(_("IRQ %u out of range\n"),Hs[dev].vec); + Nhs--; + return -1; + } + /* Create interface structures and fill in details */ + if_hsa = (struct iface *)callocw(1,sizeof(struct iface)); + if_hsb = (struct iface *)callocw(1,sizeof(struct iface)); + + if_hsa->addr = if_hsb->addr = Ip_addr; + if_hsa->name = mallocw(strlen(argv[4])+2); + strcpy(if_hsa->name,argv[4]); + strcat(if_hsa->name,"a"); + if_hsb->name = mallocw(strlen(argv[4])+2); + strcpy(if_hsb->name,argv[4]); + strcat(if_hsb->name,"b"); + if_hsb->mtu = if_hsa->mtu = atoi(argv[6]); + if_hsa->dev = 2*dev; + if_hsb->dev = 2*dev + 1; + if_hsb->stop = if_hsa->stop = hs_stop; + if_hsb->raw = if_hsa->raw = hs_raw; + if_hsa->ioctl = if_hsb->ioctl = hs_ctl; + + setencap(if_hsa,argv[3]); + setencap(if_hsb,argv[3]); + if(if_hsb->hwaddr == NULL) + if_hsb->hwaddr = mallocw(AXALEN); + memcpy(if_hsb->hwaddr,Mycall,AXALEN); + if(if_hsa->hwaddr == NULL) + if_hsa->hwaddr = mallocw(AXALEN); + memcpy(if_hsa->hwaddr,Mycall,AXALEN); + if_hsa->next = if_hsb; + if_hsb->next = Ifaces; + Ifaces = if_hsa; + + write_escc(Hs[dev].addr+CHANA+CTL,R9,FHWRES); + hp = &Hdlc[2*dev+1]; + hp->ctl = Hs[dev].addr + CHANB + CTL; + hp->data = Hs[dev].addr + CHANB + DATA; + hp->bufsiz = atoi(argv[5]); + if(argc > 7) + hp->txdelay = atol(argv[7]); + else + hp->txdelay = 15L; + if(argc > 8) + hp->p = atoi(argv[8]); + else + hp->p = 64; + if(argc > 9 && argv[9][0] == 'r') + hp->clkrev = 1; + else + hp->clkrev = 0; + hp->iface = if_hsb; + hdlcparam(hp); + + hp = &Hdlc[2*dev]; + hp->ctl = Hs[dev].addr + CHANA + CTL; + hp->data = Hs[dev].addr + CHANA + DATA; + hp->bufsiz = atoi(argv[5]); + hp->txdelay = Hdlc[2*dev+1].txdelay; + hp->p = Hdlc[2*dev+1].p; + if(argc > 9 && argv[9][0] == 'r') + hp->clkrev = 1; + else + hp->clkrev = 0; + hp->iface = if_hsa; + hdlcparam(hp); + + outportb(Hs[dev].addr + 4,0x08); /*EAGLE INT GATE */ + /* Clear mask (enable interrupt) in 8259 interrupt controller */ + maskon(Hs[dev].vec); + + /* Initialize timing delay loop */ + init_delay(); + cp = if_name(if_hsa," tx"); + if_hsa->txproc = newproc(cp,512,if_tx,0,if_hsa,NULL,0); + free(cp); + cp = if_name(if_hsb," tx"); + if_hsb->txproc = newproc(cp,512,if_tx,0,if_hsb,NULL,0); + free(cp); + return 0; +} +static int +hs_stop(iface) +struct iface *iface; +{ + int dev; + + dev = iface->dev; + if(dev & 1) + return -1; /* Valid only for the first device */ + dev >>= 1; /* Convert back into hs number */ + + /* Turn off interrupts */ + maskoff(Hs[dev].vec); + + /* Restore original interrupt vector */ + setirq(Hs[dev].vec,Hs[dev].save.vec); + + /* Force hardware reset */ + write_escc(Hs[dev].addr + CHANA+CTL,R9,FHWRES); + return 0; +} +/* Send raw packet */ +static int +hs_raw( +struct iface *iface, +struct mbuf **bpp +){ + + struct hdlc *hp; + struct mbuf *nbp; + register uint16 cnt; + register uint8 *cp; + uint16 ctl,data; + + dump(iface,IF_TRACE_OUT,*bpp); + iface->rawsndcnt++; + iface->lastsent = secclock(); + hp = &Hdlc[iface->dev]; + hp->txpkts++; + + ctl = hp->ctl; + data = hp->data; + + cnt = len_p(*bpp); + /* If buffer isn't contiguous (which is almost always + * the case) copy it to a new buffer for speed + */ + if((*bpp)->next != NULL){ + if((nbp = copy_p(*bpp,cnt)) == NULL){ + hp->nomem++; + free_p(bpp); + return -1; + } + free_p(bpp); + *bpp = nbp; + } + cp = (*bpp)->data; + /* Turn transmitter on */ + hstxon(hp); + /* Initialize transmitter CRC */ + write_escc(ctl,R0,RES_Tx_CRC); + for(;;){ + /* Wait for the transmitter to become ready */ + while(!(inportb(ctl) & Tx_BUF_EMP)) + ; + if(cnt-- == 0) + break; + outportb(data,*cp++); /* Send the character */ + } + write_escc(ctl,R0,RES_EOM_L); /* Allow CRC generation */ + /* End of frame. Wait for TxEOM to go high, indicating start of + * CRC transmission. Note that we don't reset the transmit + * interrupt pending flag as one ordinarily would, since we're + * not using tx interrupts. + */ + while(!(inportb(ctl) & TxEOM)) + ; + + free_p(bpp); + hstxoff(hp); /* Shut down tx */ + /* Hold off to give other guy a chance to + * respond + */ + hp->deftime = msclock() + hp->txdelay + 500; + return 0; +} + +/* Turn on high speed transmitter. Does p-persistence, then sends a dummy + * frame to allow for keyup delay. Returns with transmitter on and interrupts + * disabled + */ +static void +hstxon(hp) +struct hdlc *hp; +{ + uint16 ctl; + int i; + long ca; + int32 t; + + ctl = hp->ctl; + + /* Defer logic. Wait until deftime is in the past (so we + * defer to any overheard CTS messages) AND the p-persistence + * dice roll succeeds. The computation of ca allows for clock + * rollover (which happens every 49+ days). + */ + for(;;){ + t = msclock(); + ca = hp->deftime - t; + if(ca > 0){ + ppause(ca); + continue; + } + hp->deftime = t; /* Keep from getting too old */ + if((rand() & 0xff) > hp->p){ + ppause((long)MSPTICK); + continue; + } + break; + } + /* Prevent distractions. In particular, block off the DCD interrupt + * so we don't hear our own carrier and hang in the interrupt handler! + * Note that simply disabling CPU interrupts isn't enough since + * the call to ppause will block and the kernel will re-enable + * them. + */ + write_escc(ctl,R9,0); /* Disable all ESCC interrupts */ + disable(); + + /* Turn on carrier, enable transmitter */ + write_escc(ctl,R5,TxCRC_ENAB | RTS | TxENAB | Tx8 | DTR); + + /* Delay for keyup interval */ + for(i=hp->txdelay;i != 0;i--) + msdelay(); + +} +/* Turn transmitter off at the end of a series of frames */ +static void +hstxoff(hp) +struct hdlc *hp; +{ + int cnt; + uint16 ctl,data; + + ctl = hp->ctl; + data = hp->data; + /* To allow the ESCC buffering to drain, we begin a dummy frame, + * then abort it + */ + for(cnt=5;cnt != 0;cnt--){ + while(!(inportb(ctl) & Tx_BUF_EMP)) + ; + outportb(data,0); + } + write_escc(ctl,R0,SEND_ABORT); + + /* Turn off carrier and disable transmitter */ + write_escc(ctl,R5,TxCRC_ENAB | Tx8 | DTR); + /* Re-Enable ESCC interrupts */ + write_escc(ctl,R9,MIE|NV); + enable(); /* Turn interrupts back on */ +} + +int +dohs(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register int i; + register struct hdlc *hp; + + for(i=0;i<2*Nhs;i++){ + hp = &Hdlc[i]; + _printf(_("port %d: txpkts %lu ints %lu rxpkts %lu rxbytes %lu nomem %lu toobig %lu crcerr %lu aborts %lu overrun %lu\n"), + i,hp->txpkts,hp->exints,hp->good,hp->rxbytes, + hp->nomem,hp->toobig,hp->crcerr,hp->aborts, + hp->overrun); + } + return 0; +} +static int32 +hs_ctl(iface,cmd,set,val) +struct iface *iface; +int cmd; +int set; +int32 val; +{ + register struct hdlc *hp; + int32 t,ca; + + hp = &Hdlc[iface->dev]; + switch(cmd){ + case PARAM_TXDELAY: /* Tx keyup delay */ + if(set) + hp->txdelay = val; + return hp->txdelay; + case PARAM_PERSIST: + if(set) + hp->p = val; + return hp->p; + case PARAM_MUTE: + /* Mute transmitter for specified # of ms */ + if(set){ + if(val == -1){ + /* Special case for duration of a CTS */ + val = hp->txdelay + 500; + } + hp->deftime = msclock() + val; + } + t = msclock(); + ca = hp->deftime - t; + if(ca < 0){ + hp->deftime = t; + ca = 0; + } + return ca; + } + return -1; +} +#ifdef notdef /* replaced with assembler in 8530.asm */ +/* Read data from the 8530 receiver. + * Returns when either a good frame is received, or when carrier drops. + * If a good frame is received, the length is returned; otherwise -1. + */ +int +rx8530(ctl,data,buf,bufsize) +uint16 ctl,data; +char *buf; +uint16 bufsize; +{ + int cnt = 0; + register char status; + char error; + register char *cp = buf; + + for(;;){ + status = inportb(ctl); + if(!(status & DCD)){ + cnt = -1; + break; + } else if(status & BRK_ABRT){ + cp = buf; + cnt = 0; + } else if(status & Rx_CH_AV){ + /* Receive character is ready, get it */ + *cp++ = inportb(data); + if(++cnt > bufsize){ + /* Buffer overflow, start again */ + write_escc(ctl,R3,ENT_HM|RxENABLE|RxCRC_ENAB|Rx8); + cp = buf; + cnt = 0; + } + } else if((error = read_escc(ctl,R1)) & END_FR){ + if(!(error & CRC_ERR)) + break; /* Good frame! */ + /* Bad frame, start again */ + cp = buf; + cnt = 0; + } + } + return cnt; +} +#endif + +static int32 Del_const; + +/* Find the value of Del_const that will cause one execution of mloop() + * to take one millisecond + */ +static void +init_delay() +{ + int32 start,delay; + register int i,j; + int success = 0; + + /* Start with small value to make things tolerable on slow machines */ + Del_const = 10; + _printf(_("Del_const = %lu\n"),Del_const); + /* Limit the number of iterations in case we don't converge */ + for(i=0;i<5;i++){ + start = msclock(); + for(j=0;j<1000;j++) + msdelay(); + delay = msclock()-start; + _printf(_("delay %lu\n"),delay); + if(delay == 0){ + /* Too fast for accurate measurement on coarse clk */ + Del_const *= 10; + _printf(_("Del_const = %lu\n"),Del_const); + continue; + } + Del_const = (Del_const * 1000)/delay; + _printf(_("Del_const = %lu\n"),Del_const); + if(delay > 950 && delay < 1050){ + success = 1; + break; /* Within 1 tick - Close enough */ + } + } + if(!success) + _printf(_("HS: Warning: auto delay set failed\n")); +} +/* Delay for one millisecond (once calibrated by init_delay()) */ +static void +msdelay() +{ + int32 i; + + for(i=Del_const;i !=0;i--) + ; +} diff --git a/src/nos/drivers/pc100.c b/src/nos/drivers/pc100.c new file mode 100644 index 00000000..217831c8 --- /dev/null +++ b/src/nos/drivers/pc100.c @@ -0,0 +1,512 @@ +/* Interface driver for the PACCOMM PC-100 board for the IBM PC */ +/* UNFINISHED, DOESN'T WORK YET - work in progress by Bdale */ +/* currently only attempting to use the AMD7910 on Channel A */ + +#include +#ifndef ZILOG +#include +#endif +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "pktdrvr.h" +#include "netuser.h" +#include "pc100.h" +#include "esccgen.h" +#include "ax25.h" +#include "trace.h" +#include "nospc.h" +#include +#include "po/messages.h" + +static void hspint(struct hdlc *hp); +static void hexint(struct hdlc *hp); +static void hrxint(struct hdlc *hp); +static void htxint(/* Nick register */ struct hdlc *hp); +static void rts(uint16 base,int x); +static void hdlcparam(struct hdlc *hp); +static int pc_raw(struct iface *iface,struct mbuf **bpp); +static int pc_stop(struct iface *iface); + +/* Nick static */ struct pc100 Pc100[NPC]; +static INTERRUPT (*Pchandle[])() = { pc0vec }; +static struct hdlc Hdlc[2*NPC]; +static uint16 Npc; + +/* Branch table for interrupt handler */ +static void (*Svec[])(struct hdlc *hp) = { + htxint, hexint, hrxint, hspint +}; + +/* Master interrupt handler for the PC-100 card. All interrupts come + * here first, then are switched out to the appropriate routine. + */ +INTERRUPT (NICK_FAR *(pcint)(dev))() +int dev; +{ + register char iv; + register uint16 pcbase; + struct hdlc *hp; + struct pc100 *pcp; + + pcp = &Pc100[dev]; + pcp->ints++; + pcbase = pcp->addr; + + /* Read interrupt vector, including status, from channel B */ + iv = read_escc(CTL+pcbase+CHANB,R2); + + hp = &Hdlc[2 * dev + ((iv & 0x80)? 0 : 1)]; + + /* Now switch to appropriate routine */ + (*Svec[(iv>>1) & 0x3])(hp); + + /* Reset interrupt pending state (register A only) */ + write_escc(CTL+pcbase+CHANA,R0,RES_H_IUS); + + /* Wang the 8530 hardware interrupt acknowledge line - Bdale */ + inportb(pcbase+INTACK); + + return pcp->chain ? pcp->oldvec : NULL; +} +/* HDLC Special Receive Condition interrupt + * The most common event that triggers this interrupt is the + * end of a frame; it can also be caused by a receiver overflow. + */ +static void +hspint(hp) +/* Nick register */ struct hdlc *hp; +{ + register char c; + + hp->spints++; + c = read_escc(CTL+hp->base,R1); /* Fetch latched bits */ + + if((c & (END_FR|CRC_ERR)) == END_FR && hp->rcvbuf != NULL + && hp->rcvbuf->cnt > 1){ + /* End of valid frame */ + hp->rcvbuf->cnt--; /* Toss 1st crc byte */ + enqueue(&hp->rcvq,&hp->rcvbuf); + hp->rcvbuf = NULL; + hp->rcvcnt++; + } else { + /* An overflow or CRC error occurred; restart receiver */ + hp->crcerr++; + if(hp->rcvbuf != NULL){ + hp->rcp = hp->rcvbuf->data; + hp->rcvbuf->cnt = 0; + } + } + write_escc(CTL+hp->base,R0,ERR_RES); +} +/* HDLC SIO External/Status interrupts + * The only one of direct interest is a receiver abort; the other + * usual cause is a change in the modem control leads, so kick the + * transmit interrupt routine. + */ +static void +hexint(hp) +/* Nick register */ struct hdlc *hp; +{ + hp->exints++; + hp->status = read_escc(CTL+hp->base,R0); /* Fetch status */ + if((hp->status & BRK_ABRT) && hp->rcvbuf != NULL){ + hp->aborts++; + /* Restart receiver */ + hp->rcp = hp->rcvbuf->data; + hp->rcvbuf->cnt = 0; + } + write_escc(CTL+hp->base,R0,RES_EXT_INT); + write_escc(CTL+hp->base,R0,RES_H_IUS); + /* Kick the transmit interrupt routine for a possible modem change */ + htxint(hp); +} +/* HDLC receiver interrupt handler. Allocates buffers off the freelist, + * fills them with receive data, and puts them on the receive queue. + */ +static void +hrxint(hp) +/* Nick register */ struct hdlc *hp; +{ + struct mbuf *bp; + register uint16 base; + + hp->rxints++; + base = hp->base; + /* Allocate a receive buffer if not already present */ + if((bp = hp->rcvbuf) == NULL){ + bp = hp->rcvbuf = alloc_mbuf(hp->bufsiz); + if(bp == NULL){ + /* No memory, abort receiver */ + hp->nomem++; + write_escc(CTL+base,R3,ENT_HM|RxENABLE|RxCRC_ENAB|Rx8); + (void) inportb(base+DATA); + return; + } + hp->rcp = hp->rcvbuf->data; + } + while(read_escc(CTL+base,R0) & Rx_CH_AV){ + if(bp->cnt++ >= hp->bufsiz){ + /* Too large; abort the receiver, toss buffer */ + hp->toobig++; + write_escc(CTL+base,R3,ENT_HM|RxENABLE|RxCRC_ENAB|Rx8); + (void) inportb(base+DATA); + free_p(&bp); + hp->rcvbuf = NULL; + break; + } + /* Normal save */ + *hp->rcp++ = inportb(base+DATA); + } +} +static int ctswait; +/* HDLC transmit interrupt service routine + * + * The state variable tstate, along with some static pointers, + * represents the state of the transmit "process". + */ +static void +htxint(hp) +/* Nick register */ struct hdlc *hp; +{ + register uint16 base; + int c; + int i_state; + + hp->txints++; + base = hp->base; + i_state = dirps(); + while(read_escc(CTL+base,R0) & Tx_BUF_EMP){ + switch(hp->tstate){ + /* First here for efficiency */ + case ACTIVE: /* Sending frame */ + if((c = PULLCHAR(&hp->sndbuf)) != -1){ + outportb(base+DATA,c); + } else { + /* Do this after sending the last byte */ + write_escc(CTL+base,R0,RES_Tx_P); + if((hp->sndbuf = dequeue(&hp->sndq)) == NULL){ + switch(hp->mode){ + case CSMA: + /* Begin transmitter shutdown */ + hp->tstate = FLUSH; + break; + case FULLDUP: + hp->tstate = IDLE; + break; + } + } + } + continue; + case IDLE: + /* Transmitter idle. Find a frame for transmission */ + if((hp->sndbuf = dequeue(&hp->sndq)) == NULL) + goto ret; + + case DEFER: /* note fall-thru */ + if(hp->mode == CSMA && (hp->status & DCD)){ + hp->tstate = DEFER; + goto ret; + } + rts(base,ON); /* Transmitter on */ + case KEYUP: /* note fall-thru */ + if((hp->status & CTS) == 0){ + ctswait++; + hp->tstate = KEYUP; + goto ret; + } + write_escc(CTL+base,R0,RES_Tx_CRC); + c = PULLCHAR(&hp->sndbuf); + outportb(hp->base+DATA,c); + hp->tstate = ACTIVE; + write_escc(CTL+base,R0,RES_EOM_L); + continue; + case FLUSH: /* Sending flush character */ + outportb(hp->base+DATA,0); + hp->tstate = FIN2; + continue; + case FIN2: + write_escc(CTL+base,R0,SEND_ABORT); + hp->tstate = IDLE; + rts(base,OFF); + write_escc(CTL+base,R0,RES_Tx_P); + continue; + } + } +ret: restore(i_state); +} + +/* Set request-to-send on modem */ +static void +rts(base,x) +uint16 base; +int x; +{ + uint16 cmd; + + if(x) + cmd = TxCRC_ENAB | RTS | TxENAB | Tx8 | DTR; + else + cmd = TxCRC_ENAB | TxENAB | Tx8 | DTR; + write_escc(CTL+base,R5,cmd); +} +/* (re)Initialize HDLC controller parameters */ +static void +hdlcparam(hp) +/* Nick register */ struct hdlc *hp; +{ + uint16 tc; + register uint16 base; + int i_state; + + /* Initialize 8530 channel for SDLC operation */ + base = hp->base; + i_state = dirps(); + + switch(base & 2){ + case 0: + write_escc(CTL+base,R9,CHRA); /* Reset channel A */ + break; + case 2: + write_escc(CTL+base,R9,CHRB); /* Reset channel B */ + break; + } + /* Wait/DMA disable, Int on all Rx chars + spec condition, + * parity NOT spec condition, TxINT enable, Ext Int enable + */ + write_escc(CTL+base,R1,INT_ALL_Rx | TxINT_ENAB | EXT_INT_ENAB); + + /* Dummy interrupt vector, will be modified by interrupt type + * (This probably isn't necessary) + */ + write_escc(CTL+base,R2,0); + + /* 8 bit RX chars, auto enables off, no hunt mode, RxCRC enable, + * no address search, no inhibit sync chars, enable RX + */ + write_escc(CTL+base,R3,Rx8|RxCRC_ENAB|RxENABLE); + + /* X1 clock, SDLC mode, Sync modes enable, parity disable + * (Note: the DPLL does a by-32 clock division, so it's not necessary + * to divide here). + */ + write_escc(CTL+base,R4,X1CLK | SDLC | SYNC_ENAB); + + /* DTR On, 8 bit TX chars, no break, TX enable, SDLC CRC, + * RTS off, TxCRC enable + */ + write_escc(CTL+base,R5,DTR|Tx8|TxENAB|TxCRC_ENAB); + + /* SDLC flag */ + write_escc(CTL+base,R7,FLAG); + + /* No reset, status low, master int enable, enable lower chain, + * no vector, vector includes status + */ + write_escc(CTL+base,R9,MIE|NV|VIS); + /* CRC preset 1, NRZI encoding, no active on poll, flag idle, + * flag on underrun, no loop mode, 8 bit sync + */ + write_escc(CTL+base,R10,CRCPS|NRZI); + + /* Board no longer channel-specific for clk. The board should be set + * up to run from the 4.9152Mhz onboard crystal connected to PCLK. + * Both channels get receive clock at 32x from PCLK via the DPLL, + * with TRxC as an output, via a 4040 div by 32 counter to RTxC set + * us as an input to provide the transmit clock. + */ + + /* TRxC = BR Generator Output, TRxC O/I, + * transmit clock = RTxC pin, + * receive clock = DPLL output + */ + write_escc(CTL+base,R11,TRxCBR|TRxCOI|TCRTxCP|RCDPLL); + + /* Compute and load baud rate generator time constant + * DPLL needs x32 clock + * XTAL is defined in pc100.h to be the crystal clock / (2 * 32) + */ + tc = XTAL/(hp->speed) - 2; + write_escc(CTL+base,R12,tc); + write_escc(CTL+base,R13,tc >> 8); + + write_escc(CTL+base,R14,SNRZI); /* Set NRZI mode */ + write_escc(CTL+base,R14,SSBR); /* Set DPLL source = BR generator */ + write_escc(CTL+base,R14,SEARCH); /* Enter search mode */ + /* Set baud rate gen source = PCLK, enable baud rate gen */ + write_escc(CTL+base,R14,BRENABL|BRSRC); + + /* Break/abort IE, TX EOM IE, CTS IE, no SYNC/HUNT IE, DCD IE, + * no Zero Count IE + */ + write_escc(CTL+base,R15,BRKIE|TxUIE|CTSIE|DCDIE); + + restore(i_state); + if(hp->mode == FULLDUP){ + rts(base,ON); + } else if(hp->tstate == IDLE){ + rts(base,OFF); + } +} +/* Attach a PC-100 interface to the system + * argv[0]: hardware type, must be "pc100" + * argv[1]: I/O address, e.g., "0x380" + * argv[2]: vector, e.g., "2" + * argv[3]: mode, must be: + * "ax25ui" (AX.25 UI frame format) + * "ax25i" (AX.25 I frame format) + * argv[4]: interface label, e.g., "pc0" + * argv[5]: receiver packet buffer size in bytes + * argv[6]: maximum transmission unit, bytes + * argv[7]: interface speed, e.g, "9600" + * argv[8]: First IP address, optional (defaults to Ip_addr) + * argv[9]: Second IP address, optional (defaults to Ip_addr) + */ +int +pc_attach(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct iface *if_pca,*if_pcb; + struct hdlc *hp; + int dev; + char *cp; + + if(Npc >= NPC){ + _printf(_("Too many pc100 controllers\n")); + return -1; + } + if(if_lookup(argv[4]) != NULL){ + _printf(_("Interface %s already exists\n"),argv[4]); + return -1; + } + if(setencap(NULL,argv[3]) == -1){ + _printf(_("Mode %s unknown for interface %s\n"), + argv[3],argv[4]); + return -1; + } + if(Mycall[0] == '\0'){ + _printf(_("set mycall first\n")); + return -1; + } + dev = Npc++; + + /* Initialize hardware-level control structure */ + Pc100[dev].addr = htoi(argv[1]); + Pc100[dev].vec = atoi(argv[2]); + if(strchr(argv[2],'c') != NULL) + Pc100[dev].chain = 1; + else + Pc100[dev].chain = 0; + + /* Initialize modems */ + outportb(Pc100[dev].addr + MODEM_CTL,0x22); + + /* Save original interrupt vector */ + Pc100[dev].oldvec = getirq(Pc100[dev].vec); + /* Set new interrupt vector */ + if(setirq(Pc100[dev].vec,Pchandle[dev]) == -1){ + _printf(_("IRQ %u out of range\n"),Pc100[dev].vec); + Npc--; + return -1; + } + /* Create interface structures and fill in details */ + if_pca = (struct iface *)callocw(1,sizeof(struct iface)); + if_pcb = (struct iface *)callocw(1,sizeof(struct iface)); + + if_pca->addr = if_pcb->addr = Ip_addr; + if(argc > 8) + if_pca->addr = resolve(argv[8]); + + if(argc > 9) + if_pcb->addr = resolve(argv[9]); + if(if_pca->addr == 0 || if_pcb->addr == 0){ + printf(Noipaddr); + free(if_pca); + free(if_pcb); + return -1; + } + if_pca->name = strdupw(argv[4]); + if_pcb->name = strdupw(argv[4]); + if_pcb->name[strlen(argv[4]) - 1]++; /* kludge */ + if_pcb->mtu = if_pca->mtu = atoi(argv[6]); + if_pca->dev = 2*dev; + if_pcb->dev = 2*dev + 1; + if_pcb->stop = if_pca->stop = pc_stop; + if_pcb->raw = pc_raw; + + setencap(if_pca,argv[3]); + setencap(if_pcb,argv[3]); + if(if_pcb->hwaddr == NULL) + if_pcb->hwaddr = mallocw(AXALEN); + memcpy(if_pcb->hwaddr,Mycall,AXALEN); + + if_pca->next = if_pcb; + if_pcb->next = Ifaces; + Ifaces = if_pca; + + hp = &Hdlc[2*dev+1]; + hp->speed = (uint16)atoi(argv[7]); + hp->base = Pc100[dev].addr + CHANB; + hp->bufsiz = atoi(argv[5]); + hdlcparam(hp); + + hp = &Hdlc[2*dev]; + hp->speed = (uint16)atoi(argv[7]); + hp->base = Pc100[dev].addr + CHANA; + hp->bufsiz = atoi(argv[5]); + hdlcparam(hp); + + /* Clear mask (enable interrupt) in 8259 interrupt controller */ + clrbit(INTMASK,(char)(1<txproc = newproc(cp,512,if_tx,0,if_pca,NULL,0); + free(cp); + cp = if_name(if_pcb," tx"); + if_pcb->txproc = newproc(cp,512,if_tx,0,if_pcb,NULL,0); + free(cp); + + return 0; +} +static int +pc_stop(iface) +struct iface *iface; +{ + int dev; + + dev = iface->dev; + if(dev & 1) + return 0; + dev >>= 1; /* Convert back into PC100 number */ + /* Turn off interrupts */ + maskoff(Pc100[dev].vec); + + /* Restore original interrupt vector */ + setirq(Pc100[dev].vec,Pc100[dev].oldvec); + + /* Force hardware reset */ + write_escc(CTL+Pc100[dev].addr + CHANA,R9,FHWRES); + return 0; +} + +/* Send raw packet on PC-100 */ +static int +pc_raw( +struct iface *iface, +struct mbuf **bpp +){ + char kickflag; + struct hdlc *hp; + + dump(iface,IF_TRACE_OUT,*bpp); + iface->rawsndcnt++; + iface->lastsent = secclock(); + hp = &Hdlc[iface->dev]; + kickflag = (hp->sndq == NULL); + enqueue(&hp->sndq,bpp); + if(kickflag) + htxint(&Hdlc[iface->dev]); + return 0; +} diff --git a/src/nos/drivers/pi.c b/src/nos/drivers/pi.c new file mode 100644 index 00000000..576af77d --- /dev/null +++ b/src/nos/drivers/pi.c @@ -0,0 +1,1439 @@ +/* + * Interface driver for the VE3IFB 8530 card (PI card) + * Copyright 1990 by Dave Perry, VE3IFB + * Minor delinting - KA9Q 2/2/91 + * + * Portions of this driver were derived from the Eagle card + * driver by Art Goldman, WA3CVG. It has been very extensively + * modified from his work, due to the addition of DMA support + * and due to differences in the hardware. The PI card is NOT + * an Eagle card clone. It is an original design by Dave Perry, + * VE3IFB. Art's copyright notice follows: + * + * Written by Art Goldman, WA3CVG - (c) Copyright 1987 All Rights Reserved + * Permission for non-commercial use is hereby granted provided this notice + * is retained. For info call: (301) 997-3838. + * + */ + +#include +#include +#ifndef ZILOG +#include +#include +#endif +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "pktdrvr.h" +#include "netuser.h" +#include "pi.h" +#include "esccgen.h" +#include "ax25.h" +#include "trace.h" +#include "nospc.h" + +#include "session.h" +#include "lapb.h" +#include "proc.h" +#include "ip.h" +#include "devparam.h" +#include +#include "po/messages.h" + +#ifndef FP_OFF +#define FP_OFF(fp) ((unsigned)(fp)) +#endif +#ifndef FP_SEG +#define FP_SEG(fp) ((unsigned)((unsigned long)(fp) >> 16)) +#endif + +void b_rxint(struct pichan *); +void b_txint(struct pichan *); +void b_exint(struct pichan *); +void a_rxint(struct pichan *); +void a_txint(struct pichan *); +void a_exint(struct pichan *); + +static void xwrite_escc(struct pichan *hp,uint16 ctl,uint16 reg, + uint16 val ); +static char xread_escc(struct pichan *hp, uint16 ctl, char reg); +static int32 pi_ctl(struct iface *iface,int cmd,int set,int32 val); +static int pi_raw(struct iface *iface,struct mbuf **bpp); +static int pi_stop(struct iface *iface); +static void rts(struct pichan *hp, uint16 x); +void setup_rx_dma(struct pichan *hp); +void setup_tx_dma(struct pichan *hp); +static void set_acc_delay(void); +static void tdelay(/* Nick register */ struct pichan *hp,unsigned int time); +static int escc_init(/* Nick register */ struct pichan *hp); + +/* Nick static */ struct PITAB Pi[PIMAX]; /* Device table - one entry per card */ +static INTERRUPT (*pihandle[])() = { /* handler interrupt vector table */ + pi0vec, + pi1vec, + pi2vec +}; +static uint16 Page_regs[] = { + 0x87,0x83,0x81,0x82,0,0x8b,0x89,0x8a +}; +/* Nick static */ struct pichan Pichan[2*PIMAX]; /* channel table - 2 entries per card */ +static uint16 pinbr; + +extern uint16 acc_delay; /* Delay for the 8530 chip access recovery time */ + + +/* This calculates the constant to be used in the delay loops + * which satify the ESCC's access recovery time. It needs to be timed and + * calculated because a fixed value would not work in a 4.77mhz XT + * to a 40mhz 486 (and beyond). + */ +static void +set_acc_delay() +{ + long starttime, endtime; + int n; + int ticks; + + starttime = bioscnt(); + for(n = 0; n < 10; n++) + mloop(); + endtime = bioscnt(); + ticks = (int) (endtime - starttime); + if(ticks == 0) + ticks = 1; + acc_delay = 61/ticks; + if(acc_delay == 0) + acc_delay = 1; + fflush(stdout); +} + +/* Write 8530 register */ +static void +xwrite_escc(hp,ctl,reg,val) +/* Nick register */ struct pichan *hp; +/* Nick register */ uint16 ctl; +uint16 reg,val; +{ + wrtescc(hp->cardbase,ctl,reg,val); +} + +/* Read 8530 register */ +static char +xread_escc(hp,ctl,reg) +/* Nick register */ struct pichan *hp; +/* Nick register */ uint16 ctl; +char reg; +{ + return(rdescc(hp->cardbase,ctl,reg)); +} + +/* Setup 8253 chip for time delay */ +static void +tdelay(hp,time) +/* Nick register */ struct pichan *hp; +unsigned int time; /* Time to delay in milliseconds */ +{ + int n,port; + unsigned int t1; + unsigned char sc; + + if(hp->base & 2){ /* If A channel */ + sc = SC1; + t1 = time; + port = hp->cardbase+TMR1; + } else { + sc = SC2; + t1 = 10 * time; /* 10s of milliseconds for the B channel */ + port = hp->cardbase+TMR2; + } + + /* Setup timer sc */ + outportb(hp->cardbase+TMRCMD, sc|LSB_MSB|MODE0); + + /* satisfy access time restriction */ + for(n=0; n<5;n++) + ; + /* times 2 to make millisecs */ + outportb(port, (t1 << 1) & 0xFF); + + /* satisfy access time restriction */ + for(n=0; n<5;n++) + ; + outportb(port, (t1 >> 7) & 0xFF); + + /* Enable correct int for timeout */ + xwrite_escc(hp,hp->base+CTL,R15,CTSIE); + xwrite_escc(hp,hp->base+CTL,R1,EXT_INT_ENAB); + xwrite_escc(hp,hp->base+CTL,R0,RES_EXT_INT); +} + +/* Master interrupt handler. One interrupt at a time is handled. + * here. Service routines are called from here. + */ +INTERRUPT (NICK_FAR *(piint)(dev))() +int dev; +{ + register char st; + register uint16 pcbase; + struct pichan *hp; + struct PITAB *pip; + + pip = &Pi[dev]; + pip->ints++; + pcbase = pip->addr; + + /* Read interrupt status register (only valid from channel A) + * Process all pending interrupts in while loop + */ + hp = &Pichan[2 * dev]; /* Assume channel A */ + while((st = xread_escc(hp,pcbase+CHANA+CTL,R3)) != 0){ + if(st & CHARxIP){ + /* Channel A Rcv Interrupt Pending */ + hp = &Pichan[2 * dev]; + a_rxint(hp); + } else if(st & CHATxIP){ + /* Channel A Transmit Int Pending */ + hp = &Pichan[2 * dev]; + a_txint(hp); + } else if(st & CHAEXT){ + /* Channel A External Status Int */ + hp = &Pichan[2 * dev]; + a_exint(hp); + } else if(st & CHBRxIP){ + /* Channel B Rcv Interrupt Pending */ + hp = &Pichan[(2 * dev)+1]; + b_rxint(hp); + } else if(st & CHBTxIP){ + /* Channel B Transmit Int Pending */ + hp = &Pichan[(2 * dev)+1]; + b_txint(hp); + } else if(st & CHBEXT){ + /* Channel B External Status Int */ + hp = &Pichan[(2 * dev)+1]; + b_exint(hp); + } + /* Reset highest interrupt under service */ + xwrite_escc(hp,hp->base+CTL,R0,RES_H_IUS); + } /* End of while loop on int processing */ + return pip->chain ? pip->oldvec : NULL; +} + +/* Nick static */ void +a_exint(hp) +/* Nick register */ struct pichan *hp; +{ + register uint16 cmd; + char st; + int32 t,ca; + struct mbuf *bp; + int i_state; + + i_state = dirps(); + + st = xread_escc(hp,hp->base+CTL,R0); /* Fetch status */ + + /* reset external status latch */ + xwrite_escc(hp,CTL+hp->base,R0,RES_EXT_INT); + cmd = hp->base+CTL; + hp->exints++; + + if((hp->rstate >= ACTIVE) && (st & BRK_ABRT)){ + setup_rx_dma(hp); + hp->rstate = ACTIVE; + } + switch(hp->tstate){ + case ACTIVE: + hp->tstate = FLAGOUT; + tdelay(hp,hp->squeldelay); + break; + case FLAGOUT: + if((bp = dequeue(&hp->sndq)) == NULL){ + /* Nothing to send - return to receive mode */ + hp->tstate = IDLE; + rts(hp,OFF); + restore(i_state); + return; + } + /* Get all chars */ + hp->txcnt = pullup(&bp,hp->sndbuf,hp->bufsiz); + free_p(&bp); /* Truncate overly long packets */ + + /* NOTE - fall through if more to send */ + case ST_TXDELAY: + /* Disable DMA chan */ + outportb(DMA_MASK, DMA_DISABLE|hp->dmachan); + + /* Set up for TX dma */ + xwrite_escc(hp,cmd,R1,WT_FN_RDYFN|EXT_INT_ENAB); + + /* Setup DMA controller for tx */ + setup_tx_dma(hp); + + /* select transmit interrupts to enable */ + /* Allow DMA on chan */ + outportb(DMA_MASK,DMA_ENABLE|hp->dmachan); + + /* reset CRC, Txint pend*/ + xwrite_escc(hp,cmd,R0,RES_Tx_CRC|RES_Tx_P); + + /* allow Underrun int only */ + xwrite_escc(hp,cmd,R15,TxUIE); + + /* Enable TX DMA */ + xwrite_escc(hp,cmd,R1,WT_RDY_ENAB|WT_FN_RDYFN|EXT_INT_ENAB); + + /* Send CRC on underrun */ + xwrite_escc(hp,cmd,R0,RES_EOM_L); + + /* packet going out now */ + hp->tstate = ACTIVE; + break; + case DEFER: + /* we have deferred prev xmit attempt + * See Intel Microcommunications Handbook, p2-308 + */ + xwrite_escc(hp,cmd,R0,RES_EXT_INT); + xwrite_escc(hp,cmd,R0,RES_EXT_INT); + if((xread_escc(hp,cmd,R0) & DCD) != 0){ + hp->tstate = DEFER; + tdelay(hp,100); + /* Defer until dcd transition or 100mS timeout */ + xwrite_escc(hp,CTL+hp->base,R15,CTSIE|DCDIE); + restore(i_state); + return; + } + /* Defer logic. Wait until deftime is in the past (so we + * defer to any overheard CTS messages) AND the p-persistence + * dice roll succeeds. The computation of ca allows for clock + * rollover (which happens every 49+ days). + */ + t = msclock(); + ca = hp->deftime - t; + if(ca > 0){ + hp->tstate = DEFER; + tdelay(hp,ca); + restore(i_state); + return; + } + hp->deftime = t; /* Keep from getting too old */ + if((rand() & 0xff) > hp->persist){ + hp->tstate = DEFER; + tdelay(hp,hp->slotime); + restore(i_state); + return; + } + /* Assert RTS early minimize collision window */ + xwrite_escc(hp,cmd,R5,TxCRC_ENAB|RTS|Tx8); + rts(hp,ON); /* Transmitter on */ + hp->tstate = ST_TXDELAY; + tdelay(hp,hp->txdelay); + restore(i_state); + return; + } /* switch(hp->tstate) */ + + restore(i_state); +} /* a_exint() */ + +/* Receive interrupt handler for the A channel + */ +/* Nick static */ void +a_rxint(hp) +/* Nick register */ struct pichan *hp; +{ + register uint16 cmd; + register uint16 bytecount; + char rse; + struct mbuf *bp; + int i_state; + + hp->rxints++; + cmd = hp->base+CTL; + + i_state = dirps(); + rse = xread_escc(hp,cmd,R1); /* Get special condition bits from R1 */ + if(rse & Rx_OVR){ + /* If receiver overrun */ + hp->rovers++; + hp->rstate = RXERROR; + } + + if(rse & END_FR){ + /* If end of frame */ + /* figure length of frame from 8237 */ + outportb(DMA_RESETFF,0); /* reset firstlast ff */ + bytecount = inportb(DMABASE+2*hp->dmachan+1); + bytecount += inportb(DMABASE+2*hp->dmachan+1) << 8; + bytecount = hp->bufsiz - 1 - bytecount; + + if((rse & CRC_ERR)||(hp->rstate > ACTIVE)||(bytecount < 10)){ + if((bytecount >= 10) && (rse & CRC_ERR)) + hp->crcerr++; /* Ignore noise */ + + /* Reset buffer pointers */ + hp->rstate = ACTIVE; + setup_rx_dma(hp); + } else { + /* Here we have a valid frame. Copy to buffer, + * minus 2 CRC bytes + */ + bytecount -= 2; + if((bp = alloc_mbuf(bytecount+sizeof(struct iface *))) + != NULL){ + bp->data += sizeof(struct iface *); + bp->cnt = bytecount; + memcpy(bp->data,hp->rcvbuf,bytecount); + net_route(hp->iface,&bp); + hp->rxcnt = 0; + hp->rxframes++; + } + /* packet queued - get buffer for next frame */ + setup_rx_dma(hp); + } /* end good frame queued */ + } /* end EOF check */ + + xwrite_escc(hp,hp->base+CTL,R0,ERR_RES); /* error reset */ + restore(i_state); +} + +void +a_txint(hp) +/* Nick register */ struct pichan *hp; +{ + register uint16 cmd; + int32 t,ca; + struct mbuf *bp; + int i_state; + + cmd = CTL+hp->base; + + i_state = dirps(); + switch(hp->tstate){ + case IDLE: + /* Transmitter idle. Find a frame for transmission */ + if((bp = dequeue(&hp->sndq)) == NULL){ + rts(hp,OFF); + restore(i_state); + return; + } + /* If a buffer to send, we drop thru here */ + hp->txcnt = pullup(&bp,hp->sndbuf,hp->bufsiz); + free_p(&bp); /* Truncate overly long packet */ + hp->tcp = hp->sndbuf; + case DEFER: + /* we may have deferred prev xmit attempt */ + /* Check DCD - debounce it + * See Intel Microcommunications Handbook, p2-308 + */ + xwrite_escc(hp,cmd,R0,RES_EXT_INT); + xwrite_escc(hp,cmd,R0,RES_EXT_INT); + if((xread_escc(hp,cmd,R0) & DCD) != 0){ + hp->tstate = DEFER; + tdelay(hp,100); + /* defer until DCD transition or timeout */ + xwrite_escc(hp,cmd,R15,CTSIE|DCDIE); + restore(i_state); + return; + } + /* Defer logic. Wait until deftime is in the past (so we + * defer to any overheard CTS messages) AND the p-persistence + * dice roll succeeds. The computation of ca allows for clock + * rollover (which happens every 49+ days). + */ + t = msclock(); + ca = hp->deftime - t; + if(ca > 0){ + hp->tstate = DEFER; + tdelay(hp,ca); + restore(i_state); + return; + } + hp->deftime = t; /* Keep from getting too old */ + if((rand() & 0xff) > hp->persist){ + hp->tstate = DEFER; + tdelay(hp,hp->slotime); + restore(i_state); + return; + } + + /* Assert RTS early minimize collision window */ + xwrite_escc(hp,cmd,R5,TxCRC_ENAB|RTS|Tx8); + rts(hp,ON); /* Transmitter on */ + hp->tstate = ST_TXDELAY; + tdelay(hp,hp->txdelay); + restore(i_state); + return; + default: + break; + } /* end switch(hp->state) */ + + restore(i_state); +} /*a_txint */ + +/* Nick static */ void +b_rxint(hp) +/* Nick register */ struct pichan *hp; +{ + register uint16 cmd; + char rse; + struct mbuf *bp; + int i_state; + + hp->rxints++; + cmd = CTL+hp->base; + + i_state = dirps(); + if((xread_escc(hp,cmd,R0)) & Rx_CH_AV){ + /* there is a char to be stored + * read special condition bits before reading the data char + */ + rse = xread_escc(hp,cmd,R1); /* get status byte from R1 */ + if(rse & Rx_OVR){ + /* Rx overrun - toss buffer */ + /* reset buffer pointers */ + hp->rcp = hp->rcvbuf; + hp->rxcnt = 0; + hp->rstate = RXERROR; /* set error flag */ + hp->rovers++; + } else if(hp->rxcnt >= hp->bufsiz){ + /* Too large -- toss entire frame */ + /* reset buffer pointers */ + hp->rcp = hp->rcvbuf; + hp->rxcnt = 0; + hp->rstate = TOOBIG; /* when set, chars are not stored */ + } + /* ok, we can store the received character now */ + if(hp->rstate == ACTIVE){ /* If no errors... */ + *hp->rcp++ = xread_escc(hp,cmd,R8); /* char to rcv buff */ + hp->rxcnt++; /* bump count */ + } else { + /* got to empty FIFO */ + (void) xread_escc(hp,cmd,R8); + xwrite_escc(hp,cmd,R0,ERR_RES); /* reset err latch */ + hp->rstate = ACTIVE; + } + } + + if(rse & END_FR){ + /* END OF FRAME -- Make sure Rx was active */ + if(hp->rxcnt > 0){ + if((rse & CRC_ERR)||(hp->rstate > ACTIVE)||(hp->rxcnt < 10)){ + if((hp->rxcnt >= 10) && (rse & CRC_ERR)) + hp->crcerr++; /* Ignore noise */ + + hp->rcp = hp->rcvbuf; + hp->rxcnt = 0; + } else { + /* Here we have a valid frame */ + hp->rxcnt -= 2; /* Toss 2 crc bytes */ + if((bp = alloc_mbuf(hp->rxcnt+sizeof(struct iface *))) + != NULL){ + bp->data += sizeof(struct iface *); + bp->cnt = hp->rxcnt; + memcpy(bp->data,hp->rcvbuf,hp->rxcnt); + net_route(hp->iface,&bp); + hp->rxframes++; + } + /* packet queued - get ready for next frame */ + hp->rcp = hp->rcvbuf; + hp->rxcnt = 0; + } /* end good frame queued */ + } /* end check for active receive upon EOF */ + hp->rstate = ACTIVE; /* and clear error status */ + } /* end EOF check */ + + restore(i_state); +} + +/* Nick static */ void +b_txint(hp) +/* Nick register */ struct pichan *hp; +{ + register uint16 cmd; + char c; + struct mbuf *bp; + int i_state; + + cmd = CTL+hp->base; + + i_state = dirps(); + if(hp->tstate != DEFER && hp->tstate) + hp->txints++; + + switch(hp->tstate){ + case CRCOUT: + hp->tstate = FLAGOUT; + tdelay(hp,hp->squeldelay); + restore(i_state); + return; + case IDLE: + /* Transmitter idle. Find a frame for transmission */ + if((bp = dequeue(&hp->sndq)) == NULL){ + /* Nothing to send - return to receive mode + * Tx OFF now - flag should have gone + */ + rts(hp,OFF); + restore(i_state); + return; + } + hp->txcnt = pullup(&bp,hp->sndbuf,hp->bufsiz); + free_p(&bp); /* Truncate overly long packets */ + /* If a buffer to send, we drop thru here */ + case DEFER: /* we may have deferred prev xmit attempt */ + /* Check DCD - debounce it */ + /* See Intel Microcommunications Handbook, p2-308 */ + xwrite_escc(hp,cmd,R0,RES_EXT_INT); + xwrite_escc(hp,cmd,R0,RES_EXT_INT); + if((xread_escc(hp,cmd,R0) & DCD) != 0){ + hp->tstate = DEFER; + tdelay(hp,100); + /* defer until DCD transition or timeout */ + xwrite_escc(hp,cmd,R15,CTSIE|DCDIE); + restore(i_state); + return; + } + /* p - persist calculation */ + if(inportb(hp->cardbase+TMR0) > hp->persist){ + inportb(hp->cardbase+TMR0); /* Discard MSB */ + hp->tstate = DEFER; + tdelay(hp,hp->slotime); + restore(i_state); + return; + } + inportb(hp->cardbase+TMR0); /* Discard MSB */ + + rts(hp,ON); /* Transmitter on */ + hp->tstate = ST_TXDELAY; + tdelay(hp,hp->txdelay); + restore(i_state); + return; + + case ACTIVE: + /* Here we are actively sending a frame */ + if(hp->txcnt-- != 0){ + c = *hp->tcp++; + /* next char is gone */ + xwrite_escc(hp,cmd,R8,c); + /* stuffing a char satisfies Interrupt condition */ + } else { + /* No more to send */ + if((xread_escc(hp,cmd,R0) & 0x40)){ + /* Did we underrun? */ + /* unexpected underrun */ + hp->tunders++; + xwrite_escc(hp,cmd,R0,SEND_ABORT); + hp->tstate = FLAGOUT; + tdelay(hp,hp->squeldelay); + restore(i_state); + return; + } + hp->tstate = UNDERRUN; /* Now we expect to underrun */ + /* Send flags on underrun */ + if(hp->speed){ /* If externally clocked */ + xwrite_escc(hp,cmd,R10,CRCPS|NRZI); + } else { + xwrite_escc(hp,cmd,R10,CRCPS); + } + xwrite_escc(hp,cmd,R0,RES_Tx_P); /* reset Tx Int Pend */ + } + restore(i_state); + return; /* back to wait for interrupt */ + } /* end switch */ + restore(i_state); +} + +/* Pi SIO External/Status interrupts (for the B channel) + * This can be caused by a receiver abort, or a Tx UNDERRUN/EOM. + * Receiver automatically goes to Hunt on an abort. + * + * If the Tx Underrun interrupt hits, change state and + * issue a reset command for it, and return. + */ +/* Nick static */ void +b_exint(hp) +/* Nick register */ struct pichan *hp; +{ + char st; + register uint16 cmd; + char c; + struct mbuf *bp; + int i_state; + + cmd = CTL+hp->base; + hp->exints++; + i_state = dirps(); + st = xread_escc(hp,cmd,R0); /* Fetch status */ + /* reset external status latch */ + xwrite_escc(hp,cmd,R0,RES_EXT_INT); + + switch(hp->tstate){ + case ACTIVE: /* Unexpected underrun */ + xwrite_escc(hp,cmd,R0,SEND_ABORT); + hp->tstate = FLAGOUT; + hp->tunders++; + tdelay(hp,hp->squeldelay); + restore(i_state); + return; + case UNDERRUN: + hp->tstate = CRCOUT; + restore(i_state); + return; + case FLAGOUT: + /* Find a frame for transmission */ + if((bp = dequeue(&hp->sndq)) == NULL){ + /* Nothing to send - return to receive mode + * Tx OFF now - flag should have gone + */ + rts(hp,OFF); + hp->tstate = IDLE; + restore(i_state); + return; + } + hp->txcnt = pullup(&bp,hp->sndbuf,hp->bufsiz); + free_p(&bp); /* Truncate overly long packets */ + hp->tcp = hp->sndbuf; + + /* Get next char to send */ + c = *hp->tcp++; + hp->txcnt--; + xwrite_escc(hp,cmd,R0,RES_Tx_CRC);/* reset for next frame */ + + /* Send abort on underrun */ + if(hp->speed){ /* If externally clocked */ + xwrite_escc(hp,cmd,R10,CRCPS|NRZI|ABUNDER); + } else { + xwrite_escc(hp,cmd,R10,CRCPS|ABUNDER); + } + + xwrite_escc(hp,cmd,R8,c); /* First char out now */ + xwrite_escc(hp,cmd,R0,RES_EOM_L);/* Reset end of message latch */ + + /* select transmit interrupts to enable */ + + xwrite_escc(hp,cmd,R15,TxUIE); /* allow Underrun int only */ + xwrite_escc(hp,cmd,R0,RES_EXT_INT); + xwrite_escc(hp,cmd,R1,TxINT_ENAB|EXT_INT_ENAB); /* Tx/Extern ints on */ + + hp->tstate = ACTIVE; /* char going out now */ + restore(i_state); + return; + + case DEFER: + /* Check DCD - debounce it + * See Intel Microcommunications Handbook, p2-308 + */ + xwrite_escc(hp,cmd,R0,RES_EXT_INT); + xwrite_escc(hp,cmd,R0,RES_EXT_INT); + if((xread_escc(hp,cmd,R0) & DCD) != 0){ + hp->tstate = DEFER; + tdelay(hp,100); + /* defer until DCD transition or timeout */ + xwrite_escc(hp,cmd,R15,CTSIE|DCDIE); + restore(i_state); + return; + } + /* p - persist calculation */ + if(inportb(hp->cardbase+TMR0) > hp->persist){ + inportb(hp->cardbase+TMR0); /* Discard MSB */ + hp->tstate = DEFER; + tdelay(hp,hp->slotime); + restore(i_state); + return; + } + inportb(hp->cardbase+TMR0); /* Discard MSB */ + + rts(hp,ON); /* Transmitter on */ + hp->tstate = ST_TXDELAY; + tdelay(hp,hp->txdelay); + restore(i_state); + return; + + case ST_TXDELAY: + + /* Get next char to send */ + c = *hp->tcp++; + hp->txcnt--; + xwrite_escc(hp,cmd,R0,RES_Tx_CRC);/* reset for next frame */ + + /* Send abort on underrun */ + if(hp->speed){ /* If externally clocked */ + xwrite_escc(hp,cmd,R10,CRCPS|NRZI|ABUNDER); + } else { + xwrite_escc(hp,cmd,R10,CRCPS|ABUNDER); + } + + xwrite_escc(hp,cmd,R8,c); /* First char out now */ + xwrite_escc(hp,cmd,R0,RES_EOM_L);/* Reset end of message latch */ + + /* select transmit interrupts to enable */ + + xwrite_escc(hp,cmd,R15,TxUIE); /* allow Underrun int only */ + xwrite_escc(hp,cmd,R0,RES_EXT_INT); + /* Tx/Extern ints on */ + xwrite_escc(hp,cmd,R1,TxINT_ENAB|EXT_INT_ENAB); + + hp->tstate = ACTIVE; /* char going out now */ + restore(i_state); + return; + } + + /* Receive Mode only + * This triggers when hunt mode is entered, & since an ABORT + * automatically enters hunt mode, we use that to clean up + * any waiting garbage + */ + if((hp->rstate == ACTIVE) && (st & BRK_ABRT)){ + (void) xread_escc(hp,cmd,R8); + (void) xread_escc(hp,cmd,R8); + (void) xread_escc(hp,cmd,R8); + hp->rcp = hp->rcvbuf; + hp->rxcnt = 0; /* rewind on DCD transition */ + } + restore(i_state); +} + +/* SET Transmit or Receive Mode + * Set RTS (request-to-send) to modem on Transmit + */ +static void +rts(hp,x) +/* Nick register */ struct pichan *hp; +uint16 x; +{ + uint16 tc; + long br; + uint16 cmd; + + cmd = CTL+hp->base; + + /* Reprogram BRG and turn on transmitter to send flags */ + if(x == ON){ /* Turn Tx ON and Receive OFF */ + /* Exints off first to avoid abort int */ + xwrite_escc(hp,cmd,R15,0); + xwrite_escc(hp,cmd,R3,Rx8); /* Rx off */ + hp->rstate = IDLE; + if(cmd & 2){ /* if channel a */ + /* Set up for TX dma */ + xwrite_escc(hp,cmd,R1,WT_FN_RDYFN|EXT_INT_ENAB); + } else { + xwrite_escc(hp,cmd,R1,0); /* No interrupts */ + } + if(hp->speed){ /* if internally clocked */ + br = hp->speed; /* get desired speed */ + tc = (XTAL/br)-2; /* calc 1X BRG divisor */ + xwrite_escc(hp,cmd,R12,tc&0xFF); /* lower byte */ + xwrite_escc(hp,cmd,R13,(tc>>8)&0xFF);/* upper byte */ + } + xwrite_escc(hp,cmd,R5,TxCRC_ENAB|RTS|TxENAB|Tx8|DTR); + /* Transmitter now on */ + } else { /* Tx OFF and Rx ON */ + hp->tstate = IDLE; + xwrite_escc(hp,cmd,R5,Tx8|DTR); /* TX off */ + + if(hp->speed){ /* if internally clocked */ + /* Reprogram BRG for 32x clock for receive DPLL */ + /* BRG off, keep Pclk source */ + xwrite_escc(hp,cmd,R14,BRSRC); + br = hp->speed; /* get desired speed */ + /* calc 32X BRG divisor */ + tc = ((XTAL/32)/br)-2; + xwrite_escc(hp,cmd,R12,tc&0xFF); /* lower byte */ + xwrite_escc(hp,cmd,R13,(tc>>8)&0xFF);/* upper byte */ + /* SEARCH mode, BRG source */ + xwrite_escc(hp,cmd,R14,BRSRC|SEARCH); + /* Enable the BRG */ + xwrite_escc(hp,cmd,R14,BRSRC|BRENABL); + } + /* Now, turn on the receiver and hunt for a flag */ + xwrite_escc(hp,cmd,R3,RxENABLE|RxCRC_ENAB|Rx8); + hp->rstate = ACTIVE; /* Normal state */ + + if(cmd & 2){/* if channel a */ + setup_rx_dma(hp); + } else { + /* reset error bits */ + /* xwrite_escc(hp,cmd,R0,ERR_RES); */ + /* reset buffer pointers */ + hp->rcp = hp->rcvbuf; + hp->rxcnt = 0; + xwrite_escc(hp,cmd,R1,(INT_ALL_Rx|EXT_INT_ENAB)); + } + xwrite_escc(hp,cmd,R15,BRKIE); /* allow ABORT int */ + /* Hold tx off long enough for other station to reply */ + hp->deftime = msclock() + hp->txdelay + 500; + } +} + +void +setup_rx_dma(hp) +/* Nick register */ struct pichan *hp; +{ + int cmd; + int dmaport; + int i_state; + + cmd = hp->base+CTL; + dmaport = DMABASE+2*hp->dmachan; + + i_state = dirps(); + if(!hp->rcvbuf){ + /* No rx buffer available */ + restore(i_state); + return; + } + + /* Get ready for RX DMA */ + xwrite_escc(hp,cmd,R1,WT_FN_RDYFN|WT_RDY_RT|INT_ERR_Rx|EXT_INT_ENAB); + outportb(DMA_MASK, DMA_DISABLE|hp->dmachan); /* Disable DMA chan */ + /* Set DMA mode register to single transfers, incrementing address, + * auto init, writes + */ + outportb(DMA_MODE,DMA_RX_MODE|hp->dmachan); + + outportb(Page_regs[hp->dmachan],hp->rcvphys >> 16);/* Store in 64K DMA page */ + outportb(DMA_RESETFF,0); /* reset byte pointer flipflop */ + /* Output buffer start (dest) address */ + outportb(dmaport,hp->rcvphys); + outportb(dmaport,hp->rcvphys >> 8); + /* output DMA maximum byte count */ + dmaport++; + outportb(dmaport,hp->bufsiz - 1); + outportb(dmaport, (hp->bufsiz - 1) >> 8); + /* Unmask channel 1 (start DMA) */ + outportb(DMA_MASK, DMA_ENABLE|hp->dmachan); /* Enable DMA chan */ + + /* If a packet is already coming in, this line is supposed + * to mess up the crc to avoid receiving a partial packet + */ + xwrite_escc(hp,cmd,R0,RES_Rx_CRC); + + /* Enable RX dma */ + xwrite_escc(hp,cmd,R1,WT_RDY_ENAB|WT_FN_RDYFN|WT_RDY_RT|INT_ERR_Rx|EXT_INT_ENAB); + + restore(i_state); +} + +void +setup_tx_dma(hp) +struct pichan *hp; +{ + int dmaport; + uint16 length; + int i_state; + + length = hp->txcnt - 1; + dmaport = DMABASE + 2*hp->dmachan; + i_state = dirps(); + + outportb(DMA_MASK, DMA_DISABLE|hp->dmachan); /* Disable DMA chan */ + /* Set DMA mode register to single transfers, incrementing address, + * no auto init, reads + */ + outportb(DMA_MODE,DMA_TX_MODE|hp->dmachan); + + outportb(Page_regs[hp->dmachan],hp->sndphys >> 16); /* Store in 64K DMA page */ + outportb(DMA_RESETFF,0); /* reset byte pointer flipflop */ + outportb(dmaport,hp->sndphys); /* Output buffer start (source) address */ + outportb(dmaport,hp->sndphys >> 8); + /* output byte count */ + dmaport++; + outportb(dmaport,length); + outportb(dmaport, length >> 8); + + restore(i_state); +} + +/* Initialize pi controller parameters */ +static int +escc_init(hp) +/* Nick register */ struct pichan *hp; +{ + uint16 tc; + long br; + register uint16 cmd; + int i_state; + + /* Initialize 8530 channel for SDLC operation */ + + cmd = CTL+hp->base; +#ifdef notdef + _printf(_("Pi: Initializing Channel %c - Base = %x\n"),cmd&2?'A':'B',cmd&~CTL); +#endif + i_state = dirps(); + + switch(cmd & 2){ + case 2: + xwrite_escc(hp,cmd,R9,CHRA); /* Reset channel A */ + xwrite_escc(hp,cmd,R2,0xff); /* Initialize interrupt vector */ + break; + case 0: + xwrite_escc(hp,cmd,R9,CHRB); /* Reset channel B */ + break; + } + + /* Deselect all Rx and Tx interrupts */ + xwrite_escc(hp,cmd,R1,0); + + /* Turn off external interrupts (like CTS/CD) */ + xwrite_escc(hp,cmd,R15,0); + + /* X1 clock, SDLC mode */ + xwrite_escc(hp,cmd,R4,SDLC|X1CLK); + + /* Now some misc Tx/Rx parameters */ + /* CRC PRESET 1, NRZI Mode */ + if(hp->speed){ + xwrite_escc(hp,cmd,R10,CRCPS|NRZI); + /* Tx Clk from BRG. Rcv Clk from DPLL, TRxC pin outputs DPLL */ + xwrite_escc(hp,cmd,R11,TCBR|RCDPLL|TRxCDP|TRxCOI); + } else { + xwrite_escc(hp,cmd,R10,CRCPS); + /* Tx Clk from Trxcl. Rcv Clk from Rtxcl, TRxC pin is input */ + xwrite_escc(hp,cmd,R11,TCTRxCP); + } + + /* Null out SDLC start address */ + xwrite_escc(hp,cmd,R6,0); + + /* SDLC flag */ + xwrite_escc(hp,cmd,R7,FLAG); + + /* Set up the Transmitter but don't enable it + * DTR, 8 bit TX chars only - TX NOT ENABLED + */ + xwrite_escc(hp,cmd,R5,Tx8|DTR); + + /* Receiver - intial setup only - more later */ + xwrite_escc(hp,cmd,R3,Rx8); /* 8 bits/char */ + + /* Setting up BRG now - turn it off first */ + xwrite_escc(hp,cmd,R14,BRSRC); /* BRG off, but keep Pclk source */ + + /* set the 32x time constant for the BRG in Receive mode */ + + if(hp->speed){ + br = hp->speed; /* get desired speed */ + tc = ((XTAL/32)/br)-2; /* calc 32X BRG divisor */ + } else { + tc = 14; + } + + xwrite_escc(hp,cmd,R12,tc&0xFF); /* lower byte */ + xwrite_escc(hp,cmd,R13,(tc>>8)&0xFF); /* upper byte */ + + /* Following subroutine sets up and ENABLES the receiver */ + rts(hp,OFF); /* TX OFF and RX ON */ + + if(hp->speed){ + /* DPLL frm BRG, BRG src PCLK */ + xwrite_escc(hp,cmd,R14,BRSRC|SSBR); + } else { + /* DPLL frm rtxc,BRG src PCLK */ + xwrite_escc(hp,cmd,R14,BRSRC|SSRTxC); + } + xwrite_escc(hp,cmd,R14,BRSRC|SEARCH); /* SEARCH mode, keep BRG source */ + xwrite_escc(hp,cmd,R14,BRSRC|BRENABL);/* Enable the BRG */ + + if(!(cmd & 2)) /* if channel b */ + xwrite_escc(hp,cmd,R1,(INT_ALL_Rx|EXT_INT_ENAB)); + + xwrite_escc(hp,cmd,R15,BRKIE); /* ABORT int */ + + /* Now, turn on the receiver and hunt for a flag */ + xwrite_escc(hp,cmd,R3,RxENABLE|RxCRC_ENAB|Rx8); + + restore(i_state); + return 0; +} + + +/* Attach a PI interface to the system + * argv[0]: hardware type, must be "pi" + * argv[1]: I/O address, e.g., "0x300" + * argv[2]: vector, e.g., "2" + * argv[3]: dma channel (1..3) + * argv[4]: mode, must be: + * "ax25" (AX.25 UI frame format) + * argv[5]: interface label, e.g., "pi0" + * argv[6]: receiver packet buffer size in bytes + * argv[7]: maximum transmission unit, bytes + * argv[8]: channel A interface speed, e.g, "1200", 0 = ext. clock + * argv[9]: channel B interface speed + * argv[10]: First IP address, optional (defaults to Ip_addr); + * argv[11]: Second IP address, optional (defaults to Ip_addr); + */ +int +pi_attach(argc,argv) +int argc; +char *argv[]; +{ + register struct iface *if_pca,*if_pcb; + struct pichan *hp; + int dev; + int n; + char *cp; + + if(acc_delay == 0){ /* Only do this once */ + /* Adapt recovery time delay to processor speed */ + set_acc_delay(); + } + /* Quick check to make sure args are good and mycall is set */ + if(setencap(NULL,argv[4]) == -1){ + _printf(_("PI: Mode %s unknown for interface %s\n"), + argv[4],argv[5]); + return -1; + } + if(if_lookup(argv[5]) != NULL){ + _printf(_("PI: Interface %s already exists\n"),argv[5]); + return -1; + } + if(Mycall[0] == '\0'){ + _printf(_("PI: Set mycall first\n")); + return -1; + } + /* Note: each card must have a unique address, IRQ and DMA */ + + if(pinbr >= PIMAX){ + _printf(_("PI: Maximum of %d PI cards supported\n"),PIMAX); + return -1; + } + dev = pinbr++; + + /* Initialize hardware-level control structure */ + Pi[dev].addr = htoi(argv[1]); + Pi[dev].vec = atoi(argv[2]); + if(strchr(argv[2],'c') != NULL) + Pi[dev].chain = 1; + else + Pi[dev].chain = 0; + + /* Set up counter chip */ + /* 500 uS square wave */ + outportb(Pi[dev].addr+TMRCMD, SC0|LSB_MSB|MODE3); + for(n=0; n<5;n++) /* satisfy access time restriction */ + ; + outportb(Pi[dev].addr+TMR0, 922 & 0xFF); + for(n=0; n<5;n++) /* satisfy access time restriction */ + ; + outportb(Pi[dev].addr+TMR0, 922 >> 8); + for(n=0; n<5;n++) /* satisfy access time restriction */ + ; + + /* Save original interrupt vector */ + Pi[dev].oldvec = getirq(Pi[dev].vec); + + /* Set new interrupt vector */ + if(setirq(Pi[dev].vec,pihandle[dev]) == -1){ + _printf(_("PI: IRQ %u out of range\n"),Pi[dev].vec); + pinbr--; + return -1; + } + + if((atoi(argv[3]) < 1) || (atoi(argv[3]) > 3)){ + _printf(_("PI: DMA %d out of range\n"),atoi(argv[3])); + pinbr--; + return -1; + } + + /* set params in pichan table for CHANNEL B */ + hp = &Pichan[2*dev+1]; /* pi1 is offset 1 */ + hp->dmachan = 0; /* Channel B does not have dma */ + hp->cardbase = Pi[dev].addr; + hp->stata = Pi[dev].addr + CHANA + CTL; /* permanent status */ + hp->statb = Pi[dev].addr + CHANB + CTL; /* addrs for CHANA/B*/ + hp->speed = (uint16)atoi(argv[9]); + hp->base = Pi[dev].addr + CHANB; + hp->bufsiz = atoi(argv[6]); + hp->tstate = IDLE; + /* default channel access Params */ + hp->txdelay = 30; /* 300 Ms */ + hp->persist = 128; /* 50% persistence */ + hp->slotime = 30; /* 300 Ms */ + hp->squeldelay = 3; /* 30 Ms */ + + xwrite_escc(hp,CTL+hp->stata,R9,FHWRES); /* Hardware reset */ + /* one time only */ + /* Disable interrupts with Master interrupt ctrl reg */ + xwrite_escc(hp,CTL+hp->stata,R9,0); + + escc_init(hp); + + /* Pre-allocate a receive DMA buffer */ + hp->rcvbuf = dma_malloc(&hp->rcvphys,hp->bufsiz); + if(hp->rcvbuf == NULL){ + /* No memory, abort receiver */ + _printf(_("PI: No memory available for receive buffer\n")); + /* Restore original interrupt vector */ + setirq(Pi[dev].vec,Pi[dev].oldvec); + pinbr--; + return -1; + } + /* Pre-allocate a transmit DMA buffer */ + hp->sndbuf = dma_malloc(&hp->sndphys,hp->bufsiz); + if(hp->sndbuf == NULL){ + /* No memory, abort */ + _printf(_("PI: No memory available for transmit buffer\n")); + /* Restore original interrupt vector */ + setirq(Pi[dev].vec,Pi[dev].oldvec); + pinbr--; + free(hp->rcvbuf); + return -1; + } + hp->sndq = NULL; + + /* set params in pichan table for CHANNEL A */ + hp = &Pichan[2*dev]; /* pi0a is offset 0 */ + hp->dmachan = (unsigned char)atoi(argv[3]); + /* Verify dma channel */ + if(hp->dmachan >= 8){ + _printf(_("PI: DMA channel %d out of range\n"),hp->dmachan); + free(hp->rcvbuf); + free(hp->sndbuf); + /* Restore original interrupt vector */ + setirq(Pi[dev].vec,Pi[dev].oldvec); + pinbr--; + return -1; + } + hp->cardbase = Pi[dev].addr; + hp->speed = (uint16)atoi(argv[8]); + hp->base = Pi[dev].addr + CHANA; + hp->bufsiz = atoi(argv[6]); + hp->tstate = IDLE; + /* default channel access Params */ + hp->txdelay = 15; /* 15 mS */ + hp->persist = 128; /* 50% persistence */ + hp->slotime = 15; /* 15 mS */ + hp->squeldelay = 1; /* 1 mS */ + + /* Pre-allocate a receive buffer */ + hp->rcvbuf = dma_malloc(&hp->rcvphys,hp->bufsiz); + if(hp->rcvbuf == NULL){ + /* No memory, abort receiver */ + _printf(_("PI: No memory available for receive buffers\n")); + /* Restore original interrupt vector */ + setirq(Pi[dev].vec,Pi[dev].oldvec); + pinbr--; + return -1; + } + hp->sndq = NULL; + + /* Get a buffer for tx which does not cross a dma boundary */ + hp->sndbuf = dma_malloc(&hp->sndphys,hp->bufsiz); + if(hp->sndbuf == NULL){ + _printf(_("PI: No memory available for transmit buffer")); + /* Restore original interrupt vector */ + setirq(Pi[dev].vec,Pi[dev].oldvec); + pinbr--; + free(hp->rcvbuf); + return -1; + } + /* Create interface structures and fill in details */ + if_pca = (struct iface *)callocw(1,sizeof(struct iface)); + if_pcb = (struct iface *)callocw(1,sizeof(struct iface)); + + if_pca->addr = if_pcb->addr = Ip_addr; + if(argc > 10) + if_pca->addr = resolve(argv[10]); + if(argc > 11) + if_pcb->addr = resolve(argv[11]); + + if(if_pca->addr == 0 || if_pcb->addr == 0) + _printf(_("PI: No IP address!\n")); + + /* Append "a" to interface associated with A channel */ + if_pca->name = malloc((unsigned)strlen(argv[5])+2); + strcpy(if_pca->name,argv[5]); + strcat(if_pca->name,"a"); + /* Append "b" to interface associated with B channel */ + if_pcb->name = malloc((unsigned)strlen(argv[5])+2); + strcpy(if_pcb->name,argv[5]); + strcat(if_pcb->name,"b"); + + if_pcb->mtu = if_pca->mtu = atoi(argv[7]); + if_pcb->ioctl = if_pca->ioctl = pi_ctl; + if_pca->dev = 2*dev; /* pi0a */ + if_pcb->dev = 2*dev + 1; /* pi0b */ + if_pcb->stop = if_pca->stop = pi_stop; + if_pcb->raw = if_pca->raw = pi_raw; + + /* Must succeed, was checked at top */ + setencap(if_pca,argv[4]); + setencap(if_pcb,argv[4]); + + if(if_pcb->hwaddr == NULL) + if_pcb->hwaddr = mallocw(AXALEN); + memcpy(if_pcb->hwaddr,Mycall,AXALEN); + if(if_pca->hwaddr == NULL) + if_pca->hwaddr = mallocw(AXALEN); + memcpy(if_pca->hwaddr,Mycall,AXALEN); + + Pichan[2*dev].iface = if_pca; + Pichan[2*dev+1].iface = if_pcb; + + /* Link em in to the interface chain */ + if_pca->next = if_pcb; + if_pcb->next = Ifaces; + Ifaces = if_pca; + + escc_init(hp); + /* master interrupt enable */ + xwrite_escc(hp,CTL+hp->base,R9,MIE|NV); + + /* Enable interrupt */ + maskon(Pi[dev].vec); + + cp = if_name(if_pca," tx"); + if_pca->txproc = newproc(cp,512,if_tx,0,if_pca,NULL,0); + free(cp); + cp = if_name(if_pcb," tx"); + if_pcb->txproc = newproc(cp,512,if_tx,0,if_pcb,NULL,0); + free(cp); + return 0; +} + +/* Shut down interface */ +int +pi_stop(iface) +struct iface *iface; +{ + uint16 dev; + struct pichan *hp; + + dev = iface->dev; + if(dev & 1) /* Because there are 2 devices per card */ + return 0; + dev >>= 1; /* Convert back into pi number */ + hp = &Pichan[2*dev]; /* pi0a is offset 0 */ + + outportb(DMA_MASK, DMA_DISABLE|hp->dmachan); /* Disable DMA channel */ + + /* Turn off interrupts */ + maskoff(Pi[dev].vec); + + /* Restore original interrupt vector */ + setirq(Pi[dev].vec,Pi[dev].oldvec); + + /* Force hardware reset */ + xwrite_escc(&Pichan[2*dev],CTL+Pi[dev].addr + CHANA,R9,FHWRES); + + return 0; +} + +/* Send raw packet on pi card */ +int +pi_raw( +struct iface *iface, +struct mbuf **bpp +){ + char kickflag; + struct pichan *hp; + int i_state; + + dump(iface,IF_TRACE_OUT,*bpp); + iface->rawsndcnt++; + iface->lastsent = secclock(); + + hp = &Pichan[iface->dev]; + kickflag = (hp->sndq == NULL) & (hp->sndbuf == NULL); + enqueue(&hp->sndq,bpp); + hp->enqueued++; + if(kickflag){ + /* simulate interrupt to xmit */ + switch(hp->base & 2){ + case 2: + a_txint(hp); /* process interrupt */ + break; + case 0: + i_state = dirps(); + if(hp->tstate == IDLE) + b_txint(hp); + restore(i_state); + break; + } + } + return 0; +} + +/* display PI Channel stats */ +int +dopistat() +{ + struct pichan *hp; + int i; + + _printf(_("PI Board Statistics:\n\n")); + _printf(_("Base Addr Rxints Txints Exints TxFrms RxFrms Crcerr RxOvrs TxUndr \n")); + _printf(_("--------- ------ ------ ------ ------ ------ ------ ------ ------ \n")); + for(i=0; ibase, hp->rxints, hp->txints, hp->exints, hp->enqueued, + hp->rxframes, hp->crcerr, hp->rovers, hp->tunders, + hp->rstate==0 ? + "IDLE" : hp->rstate==1 ? + "ACTIVE" : hp->rstate==2 ? + "RXERROR" : hp->rstate==3 ? + "RXABORT":"TOOBIG" + ); + + _printf(_("Tstate = %s\n"), + hp->tstate == 0 ? + "IDLE" : hp->tstate == 1 ? + "ACTIVE" : hp->tstate == 2 ? + "UNDERRUN" : hp->tstate == 3 ? + "FLAGOUT" : hp->tstate == 4 ? + "DEFER" : hp->tstate == 5 ? + "TXDELAY" : "CRCOUT" + ); + } + return 0; +} + +/* Subroutine to set kiss params in channel tables */ +int32 +pi_ctl(iface,cmd,set,val) +struct iface *iface; +int cmd; +int set; +int32 val; +{ + struct pichan *hp; + int32 t,ca; + + hp = &Pichan[iface->dev]; /* point to channel table */ + switch(cmd){ + case PARAM_TXDELAY: + if(set) + hp->txdelay = val; + return hp->txdelay; + case PARAM_PERSIST: + if(set) + hp->persist = val; + return hp->persist; + case PARAM_SLOTTIME: + if(set) + hp->slotime = val; + return hp->slotime; + case PARAM_TXTAIL: + if(set) + hp->squeldelay = val; + return hp->squeldelay; + case PARAM_MUTE: + if(set){ + if(val == -1){ + /* Special case for duration of a CTS */ + val = hp->txdelay + 500; + } + hp->deftime = msclock() + val; + } + t = msclock(); + ca = hp->deftime - t; + if(ca < 0){ + hp->deftime = t; + ca = 0; + } + return ca; + } + return -1; +} diff --git a/src/nos/drivers/pktdrvr.c b/src/nos/drivers/pktdrvr.c new file mode 100644 index 00000000..97f6c514 --- /dev/null +++ b/src/nos/drivers/pktdrvr.c @@ -0,0 +1,495 @@ +/* Driver for FTP Software's packet driver interface. (PC specific code) + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#ifndef ZILOG +#include +#endif +#include "global.h" +#include "proc.h" +#include "mbuf.h" +#include "netuser.h" +#include "enet.h" +#include "arcnet.h" +#include "ax25.h" +#include "slip.h" +#include "kiss.h" +#include "iface.h" +#include "arp.h" +#include "trace.h" +#include "pktdrvr.h" +#include "config.h" +#include "devparam.h" +#include +#include "po/messages.h" + +static long access_type(int intno,int if_class,int if_type, + int if_number, uint8 *type,unsigned typelen, + INTERRUPT (*receiver)(void) ); +static int driver_info(int intno,int handle,int *version, + int *class,int *type,int *number,int *basic); +static int release_type(int intno,int handle); +static int get_address(int intno,int handle,uint8 *buf,int len); +static int set_rcv_mode(int intno,int handle,int mode); +static int pk_raw(struct iface *iface,struct mbuf **bpp); +static int pk_stop(struct iface *iface); +static int send_pkt(int intno,uint8 *buffer,unsigned length); + + +static INTERRUPT (*Pkvec[])() = { pkvec0,pkvec1,pkvec2 }; +static struct pktdrvr Pktdrvr[PK_MAX]; +static int Derr; +char Pkt_sig[] = "PKT DRVR"; /* Packet driver signature */ + +/* + * Send routine for packet driver + */ + +int +pk_send( +struct mbuf **bpp, /* Buffer to send */ +struct iface *iface, /* Pointer to interface control block */ +int32 gateway, /* Ignored */ +uint8 tos +){ + if(iface == NULL){ + free_p(bpp); + return -1; + } + return (*iface->raw)(iface,bpp); +} + +/* Send raw packet (caller provides header) */ +static int +pk_raw( +struct iface *iface, /* Pointer to interface control block */ +struct mbuf **bpp /* Data field */ +){ + register struct pktdrvr *pp; + uint16 size; + struct mbuf *bp1; + + iface->rawsndcnt++; + iface->lastsent = secclock(); + + dump(iface,IF_TRACE_OUT,*bpp); + pp = &Pktdrvr[iface->dev]; + size = len_p(*bpp); + + /* Perform class-specific processing, if any */ + switch(pp->class){ + case CL_ETHERNET: + if(size < RUNT){ + /* Pad the packet out to the minimum */ +#ifdef SECURE + /* This option copies the packet to a new mbuf, + * padded out with zeros. Otherwise we just lie + * to the packet driver about the length, and it + * will spit out bytes beyond the end of the mbuf + * that might be compromising. The cost is another + * alloc, free and copy. + */ + bp1 = ambufw(RUNT); + bp1->cnt = RUNT; + memset(bp1->data+size,0,RUNT-size); + pullup(bpp,bp1->data,size); + free_p(bpp); /* Shouldn't be necessary */ + *bpp = bp1; +#endif + size = RUNT; + } + break; + case CL_KISS: + /* This *really* shouldn't be done here, but it was the + * easiest way. Put the type field for KISS TNC on front. + */ + pushdown(bpp,NULL,1); + (*bpp)->data[0] = PARAM_DATA; + size++; + break; + } + if((*bpp)->next != NULL){ + /* Copy to contiguous buffer, since driver can't handle mbufs */ + bp1 = copy_p(*bpp,size); + free_p(bpp); + *bpp = bp1; + if(*bpp == NULL) + return -1; + } + send_pkt(pp->intno,(*bpp)->data,size); + free_p(bpp); + return 0; +} + +/* Packet driver receive upcall routine. Called by the packet driver TSR + * twice for each incoming packet: first with ax == 0 to allocate a buffer, + * and then with ax == 1 to signal completion of the copy. + * + * The packet driver actually calls an assembler hook (pkvec* in pkvec.s) + * that passes the driver's ax and cx registers to us as args. + * It then passes our return value back to the packet driver in es:di. + * + * Note that pushing es and di to us as args that we can modify only + * works reliably when the function is of type "interrupt". Otherwise the + * compiler can cache the args in registers and optimize out the stores back + * into the stack since C args are normally call-by-value. + */ +uint8 * +pkint( +int dev, +unsigned short cx, +unsigned short ax +){ + register struct pktdrvr *pp; + uint8 *retval = NULL; + + if(dev < 0 || dev >= PK_MAX) + return NULL; /* Unknown device */ + pp = &Pktdrvr[dev]; + if(pp->iface == NULL) + return NULL; /* Unknown device */ + switch(ax){ + case 0: /* Space allocate call */ + if((pp->buffer = alloc_mbuf(cx+sizeof(struct iface *))) != NULL){ + pp->buffer->data += sizeof(struct iface *); + pp->buffer->cnt = cx; + retval = pp->buffer->data; + } + break; + case 1: /* Packet complete call */ + net_route(pp->iface,&pp->buffer); + break; + default: + break; + } + return retval; +} + +/* Shut down the packet interface */ +static int +pk_stop( +struct iface *iface +){ + struct pktdrvr *pp; + + pp = &Pktdrvr[iface->dev]; + /* Call driver's release_type() entry */ + if(release_type(pp->intno,pp->handle1) == -1) + _printf(_("%s: release_type error code %u\n"),iface->name,Derr); + + if(pp->class == CL_ETHERNET || pp->class == CL_ARCNET){ + release_type(pp->intno,pp->handle2); + release_type(pp->intno,pp->handle3); + } + pp->iface = NULL; + return 0; +} +/* Attach a packet driver to the system + * argv[0]: hardware type, must be "packet" + * argv[1]: software interrupt vector, e.g., x7e + * argv[2]: interface label, e.g., "trw0" + * argv[3]: maximum number of packets allowed on transmit queue, e.g., "5" + * argv[4]: maximum transmission unit, bytes, e.g., "1500" + * argv[5]: IP address (optional) + */ +int +pk_attach( +int argc, +char *argv[], +void *p +){ + register struct iface *if_pk; + int class,type; + unsigned int intno; + static uint8 iptype[] = {IP_TYPE >> 8,IP_TYPE}; + static uint8 arptype[] = {ARP_TYPE >> 8,ARP_TYPE}; + static uint8 revarptype[] = {REVARP_TYPE >> 8, REVARP_TYPE}; + long handle; + int i; +#ifdef ARCNET + static uint8 arcip[] = {ARC_IP}; + static uint8 arcarp[] = {ARC_ARP}; +#endif + + long drvvec; + char sig[8]; /* Copy of driver signature "PKT DRVR" */ + register struct pktdrvr *pp; + char tmp[25]; + char *cp; + + for(i=0;i= PK_MAX){ + _printf(_("Too many packet drivers\n")); + return -1; + } + if(if_lookup(argv[2]) != NULL){ + _printf(_("Interface %s already exists\n"),argv[2]); + return -1; + } + + intno = htoi(argv[1]); + /* Verify that there's really a packet driver there, so we don't + * go off into the ozone (if there's any left) + */ + drvvec = (long)getvect(intno); + movblock(FP_OFF(drvvec)+3, FP_SEG(drvvec), + FP_OFF(sig),FP_SEG(sig),strlen(Pkt_sig)); + if(strncmp(sig,Pkt_sig,strlen(Pkt_sig)) != 0){ + _printf(_("No packet driver loaded at int 0x%x\n"),intno); + return -1; + } + if_pk = (struct iface *)callocw(1,sizeof(struct iface)); + if_pk->name = strdupw(argv[2]); + if(argc > 5) + if_pk->addr = resolve(argv[5]); + else + if_pk->addr = Ip_addr; + pp = &Pktdrvr[i]; + if_pk->mtu = atoi(argv[4]); + if_pk->dev = i; + if_pk->raw = pk_raw; + if_pk->stop = pk_stop; + pp->intno = intno; + pp->iface = if_pk; + + /* Version 1.08 of the packet driver spec dropped the handle + * requirement from the driver_info call. However, if we are using + * a version 1.05 packet driver, the following call will fail. + */ + if(driver_info(intno,-1,NULL,&class,&type,NULL,NULL) < 0){ + /* Find out by exhaustive search what class this driver is (ugh) */ + for(class=1;class<=NCLASS;class++){ + /* Store handle in temp long so we can tell an + * error return (-1) from a handle of 0xffff + */ + handle = access_type(intno,class,ANYTYPE,0,iptype,2, + Pkvec[if_pk->dev]); + if(handle != -1 || Derr == TYPE_INUSE){ + pp->handle1 = handle; + break; + } + } + /* Now that we know, release it and do it all over again with the + * right type fields + */ + release_type(intno,pp->handle1); + } + switch(class){ + case CL_ETHERNET: + pp->handle1 = access_type(intno,class,ANYTYPE,0,iptype,2, + Pkvec[if_pk->dev]); + pp->handle2 = access_type(intno,class,ANYTYPE,0,arptype,2, + Pkvec[if_pk->dev]); + pp->handle3 = access_type(intno,class,ANYTYPE,0,revarptype,2, + Pkvec[if_pk->dev]); + setencap(if_pk,"Ethernet"); + + /**** temp set multicast flag ****/ +/* i = set_rcv_mode(intno,pp->handle1,5); + _printf(_("set_rcv_mode returns %d, Derr = %d\n"),i,Derr); */ + + /* Get hardware Ethernet address from driver */ + if_pk->hwaddr = mallocw(EADDR_LEN); + get_address(intno,pp->handle1,if_pk->hwaddr,EADDR_LEN); + if(if_pk->hwaddr[0] & 1){ + _printf(_("Warning! Interface '%s' has a multicast address:"), + if_pk->name); + _printf(_(" (%s)\n"), + (*if_pk->iftype->format)(tmp,if_pk->hwaddr)); + } + break; +#ifdef ARCNET + case CL_ARCNET: + pp->handle1 = access_type(intno,class,ANYTYPE,0,arcip,1, + Pkvec[if_pk->dev]); + pp->handle2 = access_type(intno,class,ANYTYPE,0,arcarp,1, + Pkvec[if_pk->dev]); + if_pk->output = anet_output; + /* Get hardware ARCnet address from driver */ + if_pk->hwaddr = mallocw(AADDR_LEN); + get_address(intno,pp->handle1,if_pk->hwaddr,AADDR_LEN); + break; +#endif + case CL_SERIAL_LINE: + pp->handle1 = access_type(intno,class,ANYTYPE,0,NULL,0, + Pkvec[if_pk->dev]); + setencap(if_pk,"SLIP"); + break; +#ifdef AX25 + case CL_KISS: /* Note that the raw routine puts on the command */ + case CL_AX25: + pp->handle1 = access_type(intno,class,ANYTYPE,0,NULL,0, + Pkvec[if_pk->dev]); + setencap(if_pk,"AX25"); + if_pk->hwaddr = mallocw(AXALEN); + memcpy(if_pk->hwaddr,Mycall,AXALEN); + break; +#endif + case CL_SLFP: + pp->handle1 = access_type(intno,class,ANYTYPE,0,NULL,0, + Pkvec[if_pk->dev]); + setencap(if_pk,"SLFP"); + get_address(intno,pp->handle1,(uint8 *)&if_pk->addr,4); + break; + default: + _printf(_("Packet driver has unsupported class %u\n"),class); + free(if_pk->name); + free(if_pk); + return -1; + } + pp->class = class; + if_pk->next = Ifaces; + Ifaces = if_pk; + cp = if_name(if_pk," tx"); + if_pk->txproc = newproc(cp,768,if_tx,if_pk->dev,if_pk,NULL,0); + free(cp); + + return 0; +} +static long +access_type( +int intno, +int if_class, +int if_type, +int if_number, +uint8 *type, +unsigned typelen, +INTERRUPT (*receiver)() +){ + union REGS regs; + struct SREGS sregs; + + segread(&sregs); + regs.h.dl = if_number; /* Number */ + sregs.ds = FP_SEG(type); /* Packet type template */ + regs.x.si = FP_OFF(type); + regs.x.cx = typelen; /* Length of type */ + sregs.es = FP_SEG(receiver); /* Address of receive handler */ + regs.x.di = FP_OFF(receiver); + regs.x.bx = if_type; /* Type */ + regs.h.ah = ACCESS_TYPE; /* Access_type() function */ + regs.h.al = if_class; /* Class */ + int86x(intno,®s,®s,&sregs); + if(regs.x.cflag){ + Derr = regs.h.dh; + return -1; + } else + return regs.x.ax; +} +static int +release_type( +int intno, +int handle +){ + union REGS regs; + + regs.x.bx = handle; + regs.h.ah = RELEASE_TYPE; + int86(intno,®s,®s); + if(regs.x.cflag){ + Derr = regs.h.dh; + return -1; + } else + return 0; +} +static int +send_pkt( +int intno, +uint8 *buffer, +unsigned length +){ + union REGS regs; + struct SREGS sregs; + + segread(&sregs); + sregs.ds = FP_SEG(buffer); + sregs.es = FP_SEG(buffer); /* for buggy univation pkt driver - CDY */ + regs.x.si = FP_OFF(buffer); + regs.x.cx = length; + regs.h.ah = SEND_PKT; + int86x(intno,®s,®s,&sregs); + if(regs.x.cflag){ + Derr = regs.h.dh; + return -1; + } else + return 0; +} +static int +driver_info( +int intno, +int handle, +int *version, +int *class, +int *type, +int *number, +int *basic +){ + union REGS regs; + + regs.x.bx = handle; + regs.h.ah = DRIVER_INFO; + regs.h.al = 0xff; + int86(intno,®s,®s); + if(regs.x.cflag){ + Derr = regs.h.dh; + return -1; + } + if(version != NULL) + *version = regs.x.bx; + if(class != NULL) + *class = regs.h.ch; + if(type != NULL) + *type = regs.x.dx; + if(number != NULL) + *number = regs.h.cl; + if(basic != NULL) + *basic = regs.h.al; + return 0; +} +static int +get_address( +int intno, +int handle, +uint8 *buf, +int len +){ + union REGS regs; + struct SREGS sregs; + + segread(&sregs); + sregs.es = FP_SEG(buf); + regs.x.di = FP_OFF(buf); + regs.x.cx = len; + regs.x.bx = handle; + regs.h.ah = GET_ADDRESS; + int86x(intno,®s,®s,&sregs); + if(regs.x.cflag){ + Derr = regs.h.dh; + return -1; + } + return 0; +} +static int +set_rcv_mode( +int intno, +int handle, +int mode +){ + union REGS regs; + struct SREGS sregs; + + segread(&sregs); + regs.x.cx = mode; + regs.x.bx = handle; + regs.h.ah = SET_RCV_MODE; + int86x(intno,®s,®s,&sregs); + if(regs.x.cflag){ + Derr = regs.h.dh; + return -1; + } + return 0; +} + diff --git a/src/nos/dump/arcdump.c b/src/nos/dump/arcdump.c new file mode 100644 index 00000000..5e8e5012 --- /dev/null +++ b/src/nos/dump/arcdump.c @@ -0,0 +1,47 @@ +/* ARCNET trace routines + * Copyright 1990 Russ Nelson + */ + +#include +#include "global.h" +#include "mbuf.h" +#include "arcnet.h" +#include "trace.h" +#include +#include "po/messages.h" + +void +arc_dump(fp,bpp,check) +FILE *fp; +struct mbuf **bpp; +int check; /* Not used */ +{ + struct arc ahdr; + char s[20],d[20]; + + ntoharc(&ahdr,bpp); + parc(s,ahdr.source); + parc(d,ahdr.dest); + _fprintf(fp, _("Arcnet: len %u %s->%s"),ARCLEN + len_p(*bpp),s,d); + + switch(ahdr.type){ + case ARC_IP: + _fprintf(fp, _(" type IP\n")); + ip_dump(fp,bpp,1); + break; + case ARC_ARP: + _fprintf(fp, _(" type ARP\n")); + arp_dump(fp,bpp); + break; + default: + _fprintf(fp, _(" type 0x%x\n"),ahdr.type); + break; + } +} +int +arc_forus(iface,bp) +struct iface *iface; +struct mbuf *bp; +{ + return 1; +} diff --git a/src/nos/dump/arpdump.c b/src/nos/dump/arpdump.c new file mode 100644 index 00000000..68d4f608 --- /dev/null +++ b/src/nos/dump/arpdump.c @@ -0,0 +1,78 @@ +/* ARP packet tracing routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "arp.h" +#include "netuser.h" +#include "trace.h" +#include +#include "po/messages.h" + +void +arp_dump(fp,bpp) +FILE *fp; +struct mbuf **bpp; +{ + struct arp arp; + struct arp_type *at; + int is_ip = 0; + char tmp[25]; + + if(bpp == NULL || *bpp == NULL) + return; + _fprintf(fp, _("ARP: len %d"),len_p(*bpp)); + if(ntoharp(&arp,bpp) == -1){ + _fprintf(fp, _(" bad packet\n")); + return; + } + if(arp.hardware < NHWTYPES) + at = &Arp_type[arp.hardware]; + else + at = NULL; + + /* Print hardware type in Ascii if known, numerically if not */ + _fprintf(fp, _(" hwtype %s"),smsg(Arptypes,NHWTYPES,arp.hardware)); + + /* Print hardware length only if unknown type, or if it doesn't match + * the length in the known types table + */ + if(at == NULL || arp.hwalen != at->hwalen) + _fprintf(fp, _(" hwlen %u"),arp.hwalen); + + /* Check for most common case -- upper level protocol is IP */ + if(at != NULL && arp.protocol == at->iptype){ + _fprintf(fp, _(" prot IP")); + is_ip = 1; + } else { + _fprintf(fp, _(" prot 0x%x prlen %u"),arp.protocol,arp.pralen); + } + switch(arp.opcode){ + case ARP_REQUEST: + _fprintf(fp, _(" op REQUEST")); + break; + case ARP_REPLY: + _fprintf(fp, _(" op REPLY")); + break; + case REVARP_REQUEST: + _fprintf(fp, _(" op REVERSE REQUEST")); + break; + case REVARP_REPLY: + _fprintf(fp, _(" op REVERSE REPLY")); + break; + default: + _fprintf(fp, _(" op %u"),arp.opcode); + break; + } + _fprintf(fp, _("\n")); + _fprintf(fp, _("sender")); + if(is_ip) + _fprintf(fp, _(" IPaddr %s"),inet_ntoa(arp.sprotaddr)); + _fprintf(fp, _(" hwaddr %s\n"),at->format(tmp,arp.shwaddr)); + + _fprintf(fp, _("target")); + if(is_ip) + _fprintf(fp, _(" IPaddr %s"),inet_ntoa(arp.tprotaddr)); + _fprintf(fp, _(" hwaddr %s\n"),at->format(tmp,arp.thwaddr)); +} diff --git a/src/nos/dump/auto.mk b/src/nos/dump/auto.mk new file mode 100644 index 00000000..e1d09378 --- /dev/null +++ b/src/nos/dump/auto.mk @@ -0,0 +1,16 @@ +# auto.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +SUBDIRS= + +OUTPUTS= dump.$(LIBEXT) + +dump_$(LIBEXT)_SOURCES= \ + icmpdump.c \ + ipdump.c tcpdump.c \ + trace.c udpdump.c +#arcdump.c arpdump.c ax25dump.c enetdump.c kissdump.c nrdump.c ripdump.c + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/dump/ax25dump.c b/src/nos/dump/ax25dump.c new file mode 100644 index 00000000..fbd1d2c6 --- /dev/null +++ b/src/nos/dump/ax25dump.c @@ -0,0 +1,188 @@ +/* AX25 header tracing + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "ax25.h" +#include "lapb.h" +#include "trace.h" +#include "socket.h" +#include +#include "po/messages.h" + +static char *decode_type(uint16 type); + +/* Dump an AX.25 packet header */ +void +ax25_dump(fp,bpp,check) +FILE *fp; +struct mbuf **bpp; +int check; /* Not used */ +{ + char tmp[AXBUF]; + char frmr[3]; + int control,pid,seg; + uint16 type; + int unsegmented; + struct ax25 hdr; + uint8 *hp; + + _fprintf(fp, _("AX25: ")); + /* Extract the address header */ + if(ntohax25(&hdr,bpp) < 0){ + /* Something wrong with the header */ + _fprintf(fp, _(" bad header!\n")); + return; + } + _fprintf(fp, _("%s"),pax25(tmp,hdr.source)); + _fprintf(fp, _("->%s"),pax25(tmp,hdr.dest)); + if(hdr.ndigis > 0){ + _fprintf(fp, _(" v")); + for(hp = hdr.digis[0]; hp < &hdr.digis[hdr.ndigis][0]; + hp += AXALEN){ + /* Print digi string */ + _fprintf(fp, _(" %s%s"),pax25(tmp,hp), + (hp[ALEN] & REPEATED) ? "*":""); + } + } + if((control = PULLCHAR(bpp)) == -1) + return; + + putc(' ',fp); + type = ftype(control); + _fprintf(fp, _("%s"),decode_type(type)); + /* Dump poll/final bit */ + if(control & PF){ + switch(hdr.cmdrsp){ + case LAPB_COMMAND: + _fprintf(fp, _("(P)")); + break; + case LAPB_RESPONSE: + _fprintf(fp, _("(F)")); + break; + default: + _fprintf(fp, _("(P/F)")); + break; + } + } + /* Dump sequence numbers */ + if((type & 0x3) != U) /* I or S frame? */ + _fprintf(fp, _(" NR=%d"),(control>>5)&7); + if(type == I || type == UI){ + if(type == I) + _fprintf(fp, _(" NS=%d"),(control>>1)&7); + /* Decode I field */ + if((pid = PULLCHAR(bpp)) != -1){ /* Get pid */ + if(pid == PID_SEGMENT){ + unsegmented = 0; + seg = PULLCHAR(bpp); + _fprintf(fp, _("%s remain %u"),seg & SEG_FIRST ? + " First seg;" : "",seg & SEG_REM); + if(seg & SEG_FIRST) + pid = PULLCHAR(bpp); + } else + unsegmented = 1; + + switch(pid){ + case PID_SEGMENT: + putc('\n',fp); + break; /* Already displayed */ + case PID_ARP: + _fprintf(fp, _(" pid=ARP\n")); + arp_dump(fp,bpp); + break; + case PID_NETROM: + _fprintf(fp, _(" pid=NET/ROM\n")); + /* Don't verify checksums unless unsegmented */ + netrom_dump(fp,bpp,unsegmented); + break; + case PID_IP: + _fprintf(fp, _(" pid=IP\n")); + /* Don't verify checksums unless unsegmented */ + ip_dump(fp,bpp,unsegmented); + break; + case PID_X25: + _fprintf(fp, _(" pid=X.25\n")); + break; + case PID_TEXNET: + _fprintf(fp, _(" pid=TEXNET\n")); + break; + case PID_NO_L3: + _fprintf(fp, _(" pid=Text\n")); + break; + default: + _fprintf(fp, _(" pid=0x%x\n"),pid); + } + } + } else if(type == FRMR && pullup(bpp,frmr,3) == 3){ + _fprintf(fp, _(": %s"),decode_type(ftype(frmr[0]))); + _fprintf(fp, _(" Vr = %d Vs = %d"),(frmr[1] >> 5) & MMASK, + (frmr[1] >> 1) & MMASK); + if(frmr[2] & W) + _fprintf(fp, _(" Invalid control field")); + if(frmr[2] & X) + _fprintf(fp, _(" Illegal I-field")); + if(frmr[2] & Y) + _fprintf(fp, _(" Too-long I-field")); + if(frmr[2] & Z) + _fprintf(fp, _(" Invalid seq number")); + putc('\n',fp); + } else + putc('\n',fp); + +} +static char * +decode_type(type) +uint16 type; +{ + switch(type){ + case I: + return "I"; + case SABM: + return "SABM"; + case DISC: + return "DISC"; + case DM: + return "DM"; + case UA: + return "UA"; + case RR: + return "RR"; + case RNR: + return "RNR"; + case REJ: + return "REJ"; + case FRMR: + return "FRMR"; + case UI: + return "UI"; + default: + return "[invalid]"; + } +} + +/* Return 1 if this packet is directed to us, 0 otherwise. Note that + * this checks only the ultimate destination, not the digipeater field + */ +int +ax_forus(iface,bp) +struct iface *iface; +struct mbuf *bp; +{ + struct mbuf *bpp; + uint8 dest[AXALEN]; + + /* Duplicate the destination address */ + if(dup_p(&bpp,bp,0,AXALEN) != AXALEN){ + free_p(&bpp); + return 0; + } + if(pullup(&bpp,dest,AXALEN) < AXALEN) + return 0; + if(addreq(dest,iface->hwaddr)) + return 1; + else + return 0; +} + diff --git a/src/nos/dump/enetdump.c b/src/nos/dump/enetdump.c new file mode 100644 index 00000000..a179ee9e --- /dev/null +++ b/src/nos/dump/enetdump.c @@ -0,0 +1,53 @@ +/* Ethernet header tracing routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "enet.h" +#include "trace.h" +#include +#include "po/messages.h" + +void +ether_dump( +FILE *fp, +struct mbuf **bpp, +int check /* Not used */ +){ + struct ether ehdr; + char s[20],d[20]; + + ntohether(&ehdr,bpp); + pether(s,ehdr.source); + pether(d,ehdr.dest); + _fprintf(fp, _("Ether: len %u %s->%s"),ETHERLEN + len_p(*bpp),s,d); + + switch(ehdr.type){ + case IP_TYPE: + _fprintf(fp, _(" type IP\n")); + ip_dump(fp,bpp,1); + break; + case REVARP_TYPE: + _fprintf(fp, _(" type REVARP\n")); + arp_dump(fp,bpp); + break; + case ARP_TYPE: + _fprintf(fp, _(" type ARP\n")); + arp_dump(fp,bpp); + break; + default: + _fprintf(fp, _(" type 0x%x\n"),ehdr.type); + break; + } +} +int +ether_forus(struct iface *iface,struct mbuf *bp) +{ + /* Just look at the multicast bit */ + + if(bp->data[0] & 1) + return 0; + else + return 1; +} diff --git a/src/nos/dump/icmpdump.c b/src/nos/dump/icmpdump.c new file mode 100644 index 00000000..bf5b1966 --- /dev/null +++ b/src/nos/dump/icmpdump.c @@ -0,0 +1,76 @@ +/* ICMP header tracing + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "internet.h" +#include "netuser.h" +#include "icmp.h" +#include "trace.h" +#include "ip.h" +#include +#include "po/messages.h" + +/* Dump an ICMP header */ +void +icmp_dump(fp,bpp,source,dest,check) +FILE *fp; +struct mbuf **bpp; +int32 source,dest; +int check; /* If 0, bypass checksum verify */ +{ + struct icmp icmp; + uint16 csum; + + if(bpp == NULL || *bpp == NULL) + return; + csum = cksum(NULL,*bpp,len_p(*bpp)); + + ntohicmp(&icmp,bpp); + + _fprintf(fp, _("ICMP: type %s"),smsg(Icmptypes,ICMP_TYPES,icmp.type)); + + switch(icmp.type){ + case ICMP_DEST_UNREACH: + _fprintf(fp, _(" code %s"),smsg(Unreach,NUNREACH,icmp.code)); + break; + case ICMP_REDIRECT: + _fprintf(fp, _(" code %s"),smsg(Redirect,NREDIRECT,icmp.code)); + _fprintf(fp, _(" new gateway %s"),inet_ntoa(icmp.args.address)); + break; + case ICMP_TIME_EXCEED: + _fprintf(fp, _(" code %s"),smsg(Exceed,NEXCEED,icmp.code)); + break; + case ICMP_PARAM_PROB: + _fprintf(fp, _(" pointer %u"),icmp.args.pointer); + break; + case ICMP_ECHO: + case ICMP_ECHO_REPLY: + case ICMP_INFO_RQST: + case ICMP_INFO_REPLY: + case ICMP_TIMESTAMP: + case ICMP_TIME_REPLY: + _fprintf(fp, _(" id %u seq %u"),icmp.args.echo.id,icmp.args.echo.seq); + break; + case ICMP_IPSP: + _fprintf(fp, _(" %s"),smsg(Said_icmp,NIPSP,icmp.code)); + break; + } + if(check && csum != 0){ + _fprintf(fp, _(" CHECKSUM ERROR (%u)"),csum); + } + putc('\n',fp); + /* Dump the offending IP header, if any */ + switch(icmp.type){ + case ICMP_DEST_UNREACH: + case ICMP_TIME_EXCEED: + case ICMP_PARAM_PROB: + case ICMP_QUENCH: + case ICMP_REDIRECT: + case ICMP_IPSP: + _fprintf(fp, _("Returned ")); + ip_dump(fp,bpp,0); + } +} + diff --git a/src/nos/dump/ipdump.c b/src/nos/dump/ipdump.c new file mode 100644 index 00000000..cb502a88 --- /dev/null +++ b/src/nos/dump/ipdump.c @@ -0,0 +1,119 @@ +/* IP header tracing routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "internet.h" +#include "iface.h" +#include "ip.h" +#include "trace.h" +#include "netuser.h" +#include "session.h" +#include +#include "po/messages.h" + +void ipldump(FILE *fp,struct ip *ip,struct mbuf **bpp,int check); + +void +ip_dump( +FILE *fp, +struct mbuf **bpp, +int check +){ + struct ip ip; + uint16 ip_len; + uint16 csum; + + if(bpp == NULL || *bpp == NULL) + return; + + /* Sneak peek at IP header and find length */ + ip_len = ((*bpp)->data[0] & 0xf) << 2; + if(ip_len < IPLEN){ + _fprintf(fp, _("IP: bad header\n")); + return; + } + if(check && cksum(NULL,*bpp,ip_len) != 0) + _fprintf(fp, _("IP: CHECKSUM ERROR (%u)"),csum); + + ntohip(&ip,bpp); /* Can't fail, we've already checked ihl */ + ipldump(fp,&ip,bpp,check); +} +void +ipip_dump( +FILE *fp, +struct mbuf **bpp, +int32 source, +int32 dest, +int check +){ + ip_dump(fp,bpp,check); +} +void +ipldump(fp,ip,bpp,check) +FILE *fp; +struct ip *ip; +struct mbuf **bpp; +int check; +{ + uint16 length; + int i; + + /* Trim data segment if necessary. */ + length = ip->length - (IPLEN + ip->optlen); /* Length of data portion */ + trim_mbuf(bpp,length); + _fprintf(fp, _("IP: len %u"),ip->length); + _fprintf(fp, _(" %s"),inet_ntoa(ip->source)); + _fprintf(fp, _("->%s ihl %u ttl %u"), + inet_ntoa(ip->dest),IPLEN + ip->optlen,ip->ttl); + if(ip->tos != 0) + _fprintf(fp, _(" tos %u"),ip->tos); + if(ip->offset != 0 || ip->flags.mf) + _fprintf(fp, _(" id %u offs %u"),ip->id,ip->offset); + if(ip->flags.df) + _fprintf(fp, _(" DF")); + if(ip->flags.mf){ + _fprintf(fp, _(" MF")); + check = 0; /* Bypass host-level checksum verify */ + } + if(ip->flags.congest){ + _fprintf(fp, _(" CE")); + } + if(ip->offset != 0){ + putc('\n',fp); + return; + } + for(i=0;Iplink[i].proto != 0;i++){ + if(Iplink[i].proto == ip->protocol){ + _fprintf(fp, _(" prot %s\n"),Iplink[i].name); + (*Iplink[i].dump)(fp,bpp,ip->source,ip->dest,check); + return; + } + } + _fprintf(fp, _(" prot %u\n"),ip->protocol); +} +/* Dump a locally sent or received IP datagram to the command interp session */ +void +dumpip(iface,ip,bp,spi) +struct iface *iface; +struct ip *ip; +struct mbuf *bp; +int32 spi; +{ + struct mbuf *bpp; + + if(iface != NULL){ + _fprintf(Command->output, _("ip_recv(%s)"),iface->name); + if(spi != 0) + _fprintf(Command->output, _(" spi %lx"),spi); + _fprintf(Command->output, _("\n")); + } else + _fprintf(Command->output, _("ip_send\n")); + + dup_p(&bpp,bp,0,len_p(bp)); + ipldump(Command->output,ip,&bpp,1); + free_p(&bpp); + _fprintf(Command->output, _("\n")); +} + diff --git a/src/nos/dump/kissdump.c b/src/nos/dump/kissdump.c new file mode 100644 index 00000000..248b6ab3 --- /dev/null +++ b/src/nos/dump/kissdump.c @@ -0,0 +1,72 @@ +/* Tracing routines for KISS TNC + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "kiss.h" +#include "devparam.h" +#include "ax25.h" +#include "trace.h" +#include +#include "po/messages.h" + +void +ki_dump(fp,bpp,check) +FILE *fp; +struct mbuf **bpp; +int check; +{ + int type; + int val; + + _fprintf(fp, _("KISS: ")); + type = PULLCHAR(bpp); + if(type == PARAM_DATA){ + _fprintf(fp, _("Data\n")); + ax25_dump(fp,bpp,check); + return; + } + val = PULLCHAR(bpp); + switch(type){ + case PARAM_TXDELAY: + _fprintf(fp, _("TX Delay: %lu ms\n"),val * 10L); + break; + case PARAM_PERSIST: + _fprintf(fp, _("Persistence: %u/256\n"),val + 1); + break; + case PARAM_SLOTTIME: + _fprintf(fp, _("Slot time: %lu ms\n"),val * 10L); + break; + case PARAM_TXTAIL: + _fprintf(fp, _("TX Tail time: %lu ms\n"),val * 10L); + break; + case PARAM_FULLDUP: + _fprintf(fp, _("Duplex: %s\n"),val == 0 ? "Half" : "Full"); + break; + case PARAM_HW: + _fprintf(fp, _("Hardware %u\n"),val); + break; + case PARAM_RETURN: + _fprintf(fp, _("RETURN\n")); + break; + default: + _fprintf(fp, _("code %u arg %u\n"),type,val); + break; + } +} + +int +ki_forus(iface,bp) +struct iface *iface; +struct mbuf *bp; +{ + struct mbuf *bpp; + int i; + + if(bp->data[0] != PARAM_DATA) + return 0; + dup_p(&bpp,bp,1,AXALEN); + i = ax_forus(iface,bpp); + free_p(&bpp); + return i; +} diff --git a/src/nos/dump/makefile b/src/nos/dump/makefile new file mode 100644 index 00000000..89c3988f --- /dev/null +++ b/src/nos/dump/makefile @@ -0,0 +1,10 @@ +# makefile by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +include ../make.d/host.mk +include auto.mk +$(GENERATE) + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/dump/nrdump.c b/src/nos/dump/nrdump.c new file mode 100644 index 00000000..aa37cf39 --- /dev/null +++ b/src/nos/dump/nrdump.c @@ -0,0 +1,116 @@ +/* NET/ROM header tracing routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "netrom.h" +#include "nr4.h" +#include "trace.h" +#include +#include "po/messages.h" + +/* Display NET/ROM network and transport headers */ +void +netrom_dump(fp,bpp,check) +FILE *fp; +struct mbuf **bpp; +int check; +{ + uint8 src[AXALEN],dest[AXALEN]; + char tmp[AXBUF]; + uint8 thdr[NR4MINHDR]; + register i; + + if(bpp == NULL || *bpp == NULL) + return; + /* See if it is a routing broadcast */ + if((*(*bpp)->data) == NR3NODESIG) { + (void)PULLCHAR(bpp); /* Signature */ + pullup(bpp,tmp,ALEN); + tmp[ALEN] = '\0'; + _fprintf(fp, _("NET/ROM Routing: %s\n"),tmp); + for(i = 0;i < NRDESTPERPACK;i++) { + if (pullup(bpp,src,AXALEN) < AXALEN) + break; + _fprintf(fp, _(" %12s"),pax25(tmp,src)); + pullup(bpp,tmp,ALEN); + tmp[ALEN] = '\0'; + _fprintf(fp, _("%8s"),tmp); + pullup(bpp,src,AXALEN); + _fprintf(fp, _(" %12s"),pax25(tmp,src)); + tmp[0] = PULLCHAR(bpp); + _fprintf(fp, _(" %3u\n"),(tmp[0])); + } + return; + } + /* Decode network layer */ + pullup(bpp,src,AXALEN); + _fprintf(fp, _("NET/ROM: %s"),pax25(tmp,src)); + + pullup(bpp,dest,AXALEN); + _fprintf(fp, _("->%s"),pax25(tmp,dest)); + + i = PULLCHAR(bpp); + _fprintf(fp, _(" ttl %d\n"),i); + + /* Read first five bytes of "transport" header */ + pullup(bpp,thdr,NR4MINHDR); + switch(thdr[4] & NR4OPCODE){ + case NR4OPPID: /* network PID extension */ + if (thdr[0] == NRPROTO_IP && thdr[1] == NRPROTO_IP) { + ip_dump(fp,bpp,check) ; + return; + } + else + _fprintf(fp, _(" protocol family %x, proto %x"), + thdr[0], thdr[1]) ; + break ; + case NR4OPCONRQ: /* Connect request */ + _fprintf(fp, _(" conn rqst: ckt %d/%d"),(thdr[0]),(thdr[1])); + i = PULLCHAR(bpp); + _fprintf(fp, _(" wnd %d"),i); + pullup(bpp,src,AXALEN); + _fprintf(fp, _(" %s"),pax25(tmp,src)); + pullup(bpp,dest,AXALEN); + _fprintf(fp, _("@%s"),pax25(tmp,dest)); + break; + case NR4OPCONAK: /* Connect acknowledgement */ + _fprintf(fp, _(" conn ack: ur ckt %d/%d my ckt %d/%d"), + thdr[0], thdr[1], thdr[2],thdr[3]); + i = PULLCHAR(bpp); + _fprintf(fp, _(" wnd %d"),i); + break; + case NR4OPDISRQ: /* Disconnect request */ + _fprintf(fp, _(" disc: ckt %d/%d"), + thdr[0],thdr[1]); + break; + case NR4OPDISAK: /* Disconnect acknowledgement */ + _fprintf(fp, _(" disc ack: ckt %d/%d"), + thdr[0],thdr[1]); + break; + case NR4OPINFO: /* Information (data) */ + _fprintf(fp, _(" info: ckt %d/%d"), + thdr[0],thdr[1]); + _fprintf(fp, _(" txseq %d rxseq %d"), + thdr[2],thdr[3]); + break; + case NR4OPACK: /* Information acknowledgement */ + _fprintf(fp, _(" info ack: ckt %d/%d"), + thdr[0],thdr[1]); + _fprintf(fp, _(" txseq %d rxseq %d"),thdr[2],thdr[3]); + break; + default: + _fprintf(fp, _(" unknown transport type %d"), + thdr[4] & 0x0f) ; + break; + } + if(thdr[4] & NR4CHOKE) + _fprintf(fp, _(" CHOKE")); + if(thdr[4] & NR4NAK) + _fprintf(fp, _(" NAK")); + if(thdr[4] & NR4MORE) + _fprintf(fp, _(" MORE")); + putc('\n',fp); +} + diff --git a/src/nos/dump/ripdump.c b/src/nos/dump/ripdump.c new file mode 100644 index 00000000..928af56d --- /dev/null +++ b/src/nos/dump/ripdump.c @@ -0,0 +1,60 @@ +/* RIP packet tracing + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "netuser.h" +#include "timer.h" +#include "rip.h" +#include "trace.h" +#include +#include "po/messages.h" + +void +rip_dump(fp,bpp) +FILE *fp; +struct mbuf **bpp; +{ + struct rip_route entry; + int i; + int cmd,version; + uint16 len; + + _fprintf(fp, _("RIP: ")); + cmd = PULLCHAR(bpp); + version = PULLCHAR(bpp); + switch(cmd){ + case RIPCMD_REQUEST: + _fprintf(fp, _("REQUEST")); + break; + case RIPCMD_RESPONSE: + _fprintf(fp, _("RESPONSE")); + break; + default: + _fprintf(fp, _(" cmd %u"),cmd); + break; + } + + pull16(bpp); /* remove one word of padding */ + + len = len_p(*bpp); + _fprintf(fp, _(" vers %u entries %u:\n"),version,len / RIPROUTE); + + i = 0; + while(len >= RIPROUTE){ + /* Pull an entry off the packet */ + pullentry(&entry,bpp); + len -= RIPROUTE; + + if(entry.addr_fam != RIP_IPFAM) { + /* Skip non-IP addresses */ + continue; + } + _fprintf(fp, _("%-16s%-3u "),inet_ntoa(entry.target),entry.metric); + if((++i % 3) == 0){ + putc('\n',fp); + } + } + if((i % 3) != 0) + putc('\n',fp); +} diff --git a/src/nos/dump/tcpdump.c b/src/nos/dump/tcpdump.c new file mode 100644 index 00000000..a0db07ad --- /dev/null +++ b/src/nos/dump/tcpdump.c @@ -0,0 +1,85 @@ +/* TCP header tracing routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "netuser.h" +#include "internet.h" +#include "tcp.h" +#include "ip.h" +#include "trace.h" +#include +#include "po/messages.h" + +/* TCP segment header flags */ +static char *Tcpflags[] = { + "FIN", /* 0x01 */ + "SYN", /* 0x02 */ + "RST", /* 0x04 */ + "PSH", /* 0x08 */ + "ACK", /* 0x10 */ + "URG", /* 0x20 */ + "CE" /* 0x40 */ +}; + +/* Dump a TCP segment header. Assumed to be in network byte order */ +void +tcp_dump(fp,bpp,source,dest,check) +FILE *fp; +struct mbuf **bpp; +int32 source,dest; /* IP source and dest addresses */ +int check; /* 0 if checksum test is to be bypassed */ +{ + struct tcp seg; + struct pseudo_header ph; + uint16 csum; + uint16 dlen; + + if(bpp == NULL || *bpp == NULL) + return; + + /* Verify checksum */ + ph.source = source; + ph.dest = dest; + ph.protocol = TCP_PTCL; + ph.length = len_p(*bpp); + csum = cksum(&ph,*bpp,ph.length); + + ntohtcp(&seg,bpp); + + _fprintf(fp, _("TCP: %u->%u Seq x%lx"),seg.source,seg.dest,seg.seq,seg.ack); + if(seg.flags.ack) + _fprintf(fp, _(" Ack x%lx"),seg.ack); + if(seg.flags.congest) + _fprintf(fp, _(" %s"),Tcpflags[6]); + if(seg.flags.urg) + _fprintf(fp, _(" %s"),Tcpflags[5]); + if(seg.flags.ack) + _fprintf(fp, _(" %s"),Tcpflags[4]); + if(seg.flags.psh) + _fprintf(fp, _(" %s"),Tcpflags[3]); + if(seg.flags.rst) + _fprintf(fp, _(" %s"),Tcpflags[2]); + if(seg.flags.syn) + _fprintf(fp, _(" %s"),Tcpflags[1]); + if(seg.flags.fin) + _fprintf(fp, _(" %s"),Tcpflags[0]); + + _fprintf(fp, _(" Wnd %u"),seg.wnd); + if(seg.flags.urg) + _fprintf(fp, _(" UP x%x"),seg.up); + /* Print options, if any */ + if(seg.flags.mss) + _fprintf(fp, _(" MSS %u"),seg.mss); + if(seg.flags.wscale) + _fprintf(fp, _(" WSCALE %u"),seg.wsopt); + if(seg.flags.tstamp) + _fprintf(fp, _(" TSTAMP %lu TSECHO %lu"),seg.tsval,seg.tsecr); + if((dlen = len_p(*bpp)) != 0) + _fprintf(fp, _(" Data %u"),dlen); + if(check && csum != 0) + _fprintf(fp, _(" CHECKSUM ERROR (%u)"),csum); + putc('\n',fp); +} + diff --git a/src/nos/dump/trace.c b/src/nos/dump/trace.c new file mode 100644 index 00000000..6068ca86 --- /dev/null +++ b/src/nos/dump/trace.c @@ -0,0 +1,359 @@ +/* Packet tracing - top level and generic routines, including hex/ascii + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include +#include +#include "global.h" +#include +#include "mbuf.h" +#include "iface.h" +#include "pktdrvr.h" +#include "commands.h" +#include "trace.h" +#include "session.h" +#include +#include "po/messages.h" + +static void ascii_dump(FILE *fp,struct mbuf **bpp); +static void ctohex(char *buf,uint16 c); +static void fmtline(FILE *fp,uint16 addr,uint8 *buf,uint16 len); +void hex_dump(FILE *fp,struct mbuf **bpp); +static void showtrace(struct iface *ifp); + +/* Redefined here so that programs calling dump in the library won't pull + * in the rest of the package + */ +static char nospace[] = "No space!!\n"; + +struct tracecmd Tracecmd[] = { + "input", IF_TRACE_IN, IF_TRACE_IN, + "-input", 0, IF_TRACE_IN, + "output", IF_TRACE_OUT, IF_TRACE_OUT, + "-output", 0, IF_TRACE_OUT, + "broadcast", 0, IF_TRACE_NOBC, + "-broadcast", IF_TRACE_NOBC, IF_TRACE_NOBC, + "raw", IF_TRACE_RAW, IF_TRACE_RAW, + "-raw", 0, IF_TRACE_RAW, + "ascii", IF_TRACE_ASCII, IF_TRACE_ASCII|IF_TRACE_HEX, + "-ascii", 0, IF_TRACE_ASCII|IF_TRACE_HEX, + "hex", IF_TRACE_HEX, IF_TRACE_ASCII|IF_TRACE_HEX, + "-hex", IF_TRACE_ASCII, IF_TRACE_ASCII|IF_TRACE_HEX, + "off", 0, 0xffff, + NULL, 0, 0 +}; + + +void +dump( +struct iface *ifp, +int direction, +struct mbuf *bp +){ + struct mbuf *tbp; + uint16 size; + time_t timer; + char *cp; + struct iftype *ift; + FILE *fp; + + if(ifp == NULL || (ifp->trace & direction) == 0 + || (fp = ifp->trfp) == NULL) + return; /* Nothing to trace */ + + ift = ifp->iftype; + switch(direction){ + case IF_TRACE_IN: + if((ifp->trace & IF_TRACE_NOBC) + && ift != NULL + && (ift->addrtest != NULL) + && (*ift->addrtest)(ifp,bp) == 0) + return; /* broadcasts are suppressed */ + time(&timer); + cp = ctime(&timer); + cp[24] = '\0'; + _fprintf(fp, _("\n%s - %s recv:\n"),cp,ifp->name); + break; + case IF_TRACE_OUT: + time(&timer); + cp = ctime(&timer); + cp[24] = '\0'; + _fprintf(fp, _("\n%s - %s sent:\n"),cp,ifp->name); + break; + } + if(bp == NULL || (size = len_p(bp)) == 0){ + _fprintf(fp, _("empty packet!!\n")); + return; + } + dup_p(&tbp,bp,0,size); + if(tbp == NULL){ + fprintf(fp, nospace); + return; + } + if(ift != NULL && ift->trace != NULL) + (*ift->trace)(fp,&tbp,1); + if(ifp->trace & IF_TRACE_ASCII){ + /* Dump only data portion of packet in ascii */ + ascii_dump(fp,&tbp); + } else if(ifp->trace & IF_TRACE_HEX){ + /* Dump entire packet in hex/ascii */ + free_p(&tbp); + dup_p(&tbp,bp,0,len_p(bp)); + if(tbp != NULL) + hex_dump(fp,&tbp); + else + fprintf(fp, nospace); + } + free_p(&tbp); +} + +/* Dump packet bytes, no interpretation */ +void +raw_dump(ifp,direction,bp) +struct iface *ifp; +int direction; +struct mbuf *bp; +{ + struct mbuf *tbp; + FILE *fp; + + if((fp = ifp->trfp) == NULL) + return; + _fprintf(fp, _("\n******* raw packet dump (%s)\n"), + ((direction & IF_TRACE_OUT) ? "send" : "recv")); + dup_p(&tbp,bp,0,len_p(bp)); + if(tbp != NULL) + hex_dump(fp,&tbp); + else + fprintf(fp, nospace); + _fprintf(fp, _("*******\n")); + free_p(&tbp); +} + +/* Dump an mbuf in hex */ +void +hex_dump(fp,bpp) +FILE *fp; +register struct mbuf **bpp; +{ + uint16 n; + uint16 address; + uint8 buf[16]; + + if(bpp == NULL || *bpp == NULL || fp == NULL) + return; + + address = 0; + while((n = pullup(bpp,buf,sizeof(buf))) != 0){ + fmtline(fp,address,buf,n); + address += n; + } +} +/* Dump an mbuf in ascii */ +static void +ascii_dump(fp,bpp) +FILE *fp; +register struct mbuf **bpp; +{ + int c; + register uint16 tot; + + if(bpp == NULL || *bpp == NULL || fp == NULL) + return; + + tot = 0; + while((c = PULLCHAR(bpp)) != -1){ + if((tot % 64) == 0) + _fprintf(fp, _("%04x "),tot); + putc(isprint(c) ? c : '.',fp); + if((++tot % 64) == 0) + _fprintf(fp, _("\n")); + } + if((tot % 64) != 0) + _fprintf(fp, _("\n")); +} +/* Print a buffer up to 16 bytes long in formatted hex with ascii + * translation, e.g., + * 0000: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 0123456789:;<=>? + */ +static void +fmtline(fp,addr,buf,len) +FILE *fp; +uint16 addr; +uint8 *buf; +uint16 len; +{ + char line[80]; + char *aptr,*cptr; + uint8 c; + + memset(line,' ',sizeof(line)); + ctohex(line,(uint16)hibyte(addr)); + ctohex(line+2,(uint16)lobyte(addr)); + aptr = &line[6]; + cptr = &line[55]; + while(len-- != 0){ + c = *buf++; + ctohex(aptr,(uint16)c); + aptr += 3; + *cptr++ = isprint(c) ? c : '.'; + } + *cptr++ = '\n'; + fwrite(line,1,(unsigned)(cptr-line),fp); +} +/* Convert byte to two ascii-hex characters */ +static void +ctohex(buf,c) +register char *buf; +register uint16 c; +{ + static char hex[] = "0123456789abcdef"; + + *buf++ = hex[hinibble(c)]; + *buf = hex[lonibble(c)]; +} + +/* Modify or displace interface trace flags */ +int +dotrace(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct iface *ifp; + struct tracecmd *tp; + struct session *sp; + + if(argc < 2){ + for(ifp = Ifaces; ifp != NULL; ifp = ifp->next) + showtrace(ifp); + return 0; + } + if((ifp = if_lookup(argv[1])) == NULL){ + _printf(_("Interface %s unknown\n"),argv[1]); + return 1; + } + if(argc == 2){ + showtrace(ifp); + return 0; + } + /* MODIFY THIS TO HANDLE MULTIPLE OPTIONS */ + if(argc >= 3){ + for(tp = Tracecmd;tp->name != NULL;tp++) + if(strncmp(tp->name,argv[2],strlen(argv[2])) == 0) + break; + if(tp->name != NULL) + ifp->trace = (ifp->trace & ~tp->mask) | tp->val; + else + ifp->trace = htoi(argv[2]); + } + if(ifp->trfp != NULL){ + /* Close existing trace file */ + fclose(ifp->trfp); + ifp->trfp = NULL; + } + if(argc >= 4){ + if((ifp->trfp = fopen(argv[3],APPEND_TEXT)) == NULL){ + _printf(_("Can't write to %s\n"),argv[3]); + } + } else if(ifp->trace != 0){ + /* Create trace session */ + sp = newsession(Cmdline,ITRACE,1); + sp->cb.p = NULL; + sp->proc = sp->proc1 = sp->proc2 = NULL; + ifp->trfp = sp->output; + showtrace(ifp); + getchar(); /* Wait for the user to hit something */ + ifp->trace = 0; + ifp->trfp = NULL; + freesession(sp); + } + return 0; +} +/* Display the trace flags for a particular interface */ +static void +showtrace(ifp) +register struct iface *ifp; +{ + char *cp; + + if(ifp == NULL) + return; + _printf(_("%s:"),ifp->name); + if(ifp->trace & (IF_TRACE_IN | IF_TRACE_OUT | IF_TRACE_RAW)){ + if(ifp->trace & IF_TRACE_IN) + _printf(_(" input")); + if(ifp->trace & IF_TRACE_OUT) + _printf(_(" output")); + + if(ifp->trace & IF_TRACE_NOBC) + _printf(_(" - no broadcasts")); + + if(ifp->trace & IF_TRACE_HEX) + _printf(_(" (Hex/ASCII dump)")); + else if(ifp->trace & IF_TRACE_ASCII) + _printf(_(" (ASCII dump)")); + else + _printf(_(" (headers only)")); + + if(ifp->trace & IF_TRACE_RAW) + _printf(_(" Raw output")); + + if(ifp->trfp != NULL && (cp = fpname(ifp->trfp)) != NULL) + _printf(_(" trace file: %s"),cp); + _printf(_("\n")); + } else + _printf(_(" tracing off\n")); +} + +/* shut down all trace files */ +void +shuttrace() +{ + struct iface *ifp; + + for(ifp = Ifaces; ifp != NULL; ifp = ifp->next){ + fclose(ifp->trfp); + ifp->trfp = NULL; + } +} + +/* Log messages of the form + * Tue Jan 31 00:00:00 1987 44.64.0.7:1003 open FTP + */ +void +trace_log(struct iface *ifp,char *fmt, ...) +{ + va_list ap; + char *cp; +#if 1 /* Nick */ + time_t t; +#else + long t; +#endif + FILE *fp; + + if((fp = ifp->trfp) == NULL) + return; + time(&t); + cp = ctime(&t); + rip(cp); + _fprintf(fp, _("%s - "),cp); + va_start(ap,fmt); + vfprintf(fp, fmt,ap); + va_end(ap); + _fprintf(fp, _("\n")); +} +int +tprintf(struct iface *ifp,char *fmt, ...) +{ + va_list ap; + int ret = 0; + + if(ifp->trfp == NULL) + return -1; + va_start(ap,fmt); + ret = vfprintf(ifp->trfp, fmt,ap); + va_end(ap); + return ret; +} diff --git a/src/nos/dump/udpdump.c b/src/nos/dump/udpdump.c new file mode 100644 index 00000000..f888c91b --- /dev/null +++ b/src/nos/dump/udpdump.c @@ -0,0 +1,61 @@ +/* UDP packet tracing + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "netuser.h" +#include "internet.h" +#include "udp.h" +#include "ip.h" +#include "socket.h" +#include "trace.h" +#include +#include "po/messages.h" + +/* Dump a UDP header */ +void +udp_dump(fp,bpp,source,dest,check) +FILE *fp; +struct mbuf **bpp; +int32 source,dest; +int check; /* If 0, bypass checksum verify */ +{ + struct udp udp; + struct pseudo_header ph; + uint16 csum; + + if(bpp == NULL || *bpp == NULL) + return; + + _fprintf(fp, _("UDP:")); + + /* Compute checksum */ + ph.source = source; + ph.dest = dest; + ph.protocol = UDP_PTCL; + ph.length = len_p(*bpp); + if((csum = cksum(&ph,*bpp,ph.length)) == 0) + check = 0; /* No checksum error */ + + ntohudp(&udp,bpp); + + _fprintf(fp, _(" len %u"),udp.length); + _fprintf(fp, _(" %u->%u"),udp.source,udp.dest); + if(udp.length > UDPHDR) + _fprintf(fp, _(" Data %u"),udp.length - UDPHDR); + if(udp.checksum == 0) + check = 0; + if(check) + _fprintf(fp, _(" CHECKSUM ERROR (%u)"),csum); + + putc('\n',fp); + +#ifdef RIP /* Nick */ + switch(udp.dest){ + case IPPORT_RIP: + rip_dump(fp,bpp); + } +#endif +} + diff --git a/src/nos/filesys/auto.mk b/src/nos/filesys/auto.mk new file mode 100644 index 00000000..d070deec --- /dev/null +++ b/src/nos/filesys/auto.mk @@ -0,0 +1,321 @@ +# auto.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +SUBDIRS= + +OUTPUTS= filesys.$(LIBEXT) + +filesys_$(LIBEXT)_SOURCES= \ + devio.c execve.c filesys.c maxmin.c process.c rtc.c \ + scall1.c scall2.c systrace.c usrmem.c xfs.c \ + $(sys_phony_SOURCES) $(_sys_phony_SOURCES) xip.c + +devio_c_MODULES= \ + Bufpool Devtab bufclock buf_hits buf_miss buf_flsh bufinit \ + bread bfree zerobuf bufsync bfind freebuf bufdump validdev \ + bdreadwrite cdreadwrite d_openclose d_ioctl d_init ok ok_rdwr \ + nogood nogood_rdwr nogood_ioctl + +execve_c_MODULES= \ + sys_execve wargs rargs + +filesys_c_MODULES= \ + root_dev root_ino Fstab Inotab Oftab dirty_mask Badinomsg \ + Baddevmsg Badfsmsg Refstoinode Gtinobadoft fs_init findfs \ + getfs wr_inode i_ref i_deref i_free _namei namei srch_dir \ + srch_mt i_init i_open ch_link filename namecomp newfile \ + filesys_doclose i_alloc blk_alloc blk_free oft_alloc \ + oft_deref uf_alloc isdevice freeblk f_trunc bmap validblk \ + getinode getperm setftim fmount magic i_sync fs_sync + +maxmin_c_MODULES= \ + max_int max_long max_uint max_ulong \ + min_int min_long min_uint min_ulong + +process_c_MODULES= \ + Ptab udata p_init panic _panic valadr dprintf vdprintf +#dputter + +rtc_c_MODULES= rdtime sttime + +scall1_c_MODULES= \ + ibuf kbuf sys_NONE sys_sync sys_utime sys_close truncateto0 \ + sys_open sys_link sys_symlink sys_unlink sys_readwrite \ + sys_lseek sys_chdir sys_chroot sys_mknod chany sys_chmod \ + sys_chown stcpy sys_statfstat sys_falign sys_dup sys_dup2 \ + sys_getfsys sys_ioctl sys_mountumount sys_time n_creat \ + readwritei rwsetup scall1_getfsys + +scall2_c_MODULES= \ + findprocess filldesc sys_pipe sys_stime sys_times sys_brk \ + sys_sbrk sys_waitpid sys__exit doexit sys_fork sys_pause \ + sys_signal sys_kill sys_alarm sys_reboot sys_getset + +systrace_c_MODULES= \ + systrace_table syserror_table systrace_entry systrace_exit \ + systrace_dump + +usrmem_c_MODULES= \ + usrget usrget_str usrget_int usrput usrput_int + +xfs_c_MODULES= xfs_init xfs_end xfs_open xfs_close xfs_creat xfs_link \ + xfs_symlink xfs_unlink xfs_read xfs_write xfs_lseek xfs_chdir \ + xfs_mknod xfs_sync xfs_access xfs_chmod xfs_chown xfs_stat \ + xfs_fstat xfs_falign xfs_dup xfs_dup2 xfs_umask xfs_sysdebug \ + xfs_systrace xfs_getfsys xfs_ioctl xfs_mount xfs_umount \ + xfs_time + +sys_phony_SOURCES= \ + open.$(OBJEXT) close.$(OBJEXT) creat.$(OBJEXT) link.$(OBJEXT) \ + symlink.$(OBJEXT) unlink.$(OBJEXT) read.$(OBJEXT) \ + write.$(OBJEXT) lseek.$(OBJEXT) chdir.$(OBJEXT) \ + mknod.$(OBJEXT) sync.$(OBJEXT) access.$(OBJEXT) \ + chmod.$(OBJEXT) chown.$(OBJEXT) stat.$(OBJEXT) \ + fstat.$(OBJEXT) falign.$(OBJEXT) dup.$(OBJEXT) dup2.$(OBJEXT) \ + umask.$(OBJEXT) sysdebug.$(OBJEXT) systrace.$(OBJEXT) \ + getfsys.$(OBJEXT) ioctl.$(OBJEXT) mount.$(OBJEXT) \ + umount.$(OBJEXT) time.$(OBJEXT) +open_$(OBJEXT)_SOURCES= \ + xfs.c +open_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_open +close_$(OBJEXT)_SOURCES= \ + xfs.c +close_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_close +creat_$(OBJEXT)_SOURCES= \ + xfs.c +creat_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_creat +link_$(OBJEXT)_SOURCES= \ + xfs.c +link_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_link +symlink_$(OBJEXT)_SOURCES= \ + xfs.c +symlink_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_symlink +unlink_$(OBJEXT)_SOURCES= \ + xfs.c +unlink_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_unlink +read_$(OBJEXT)_SOURCES= \ + xfs.c +read_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_read +write_$(OBJEXT)_SOURCES= \ + xfs.c +write_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_write +lseek_$(OBJEXT)_SOURCES= \ + xfs.c +lseek_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_lseek +chdir_$(OBJEXT)_SOURCES= \ + xfs.c +chdir_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_chdir +mknod_$(OBJEXT)_SOURCES= \ + xfs.c +mknod_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_mknod +sync_$(OBJEXT)_SOURCES= \ + xfs.c +sync_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_sync +access_$(OBJEXT)_SOURCES= \ + xfs.c +access_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_access +chmod_$(OBJEXT)_SOURCES= \ + xfs.c +chmod_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_chmod +chown_$(OBJEXT)_SOURCES= \ + xfs.c +chown_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_chown +stat_$(OBJEXT)_SOURCES= \ + xfs.c +stat_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_stat +fstat_$(OBJEXT)_SOURCES= \ + xfs.c +fstat_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_fstat +falign_$(OBJEXT)_SOURCES= \ + xfs.c +falign_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_falign +dup_$(OBJEXT)_SOURCES= \ + xfs.c +dup_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_dup +dup2_$(OBJEXT)_SOURCES= \ + xfs.c +dup2_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_dup2 +umask_$(OBJEXT)_SOURCES= \ + xfs.c +umask_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_umask +sysdebug_$(OBJEXT)_SOURCES= \ + xfs.c +sysdebug_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_sysdebug +systrace_$(OBJEXT)_SOURCES= \ + xfs.c +systrace_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_systrace +getfsys_$(OBJEXT)_SOURCES= \ + xfs.c +getfsys_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_getfsys +ioctl_$(OBJEXT)_SOURCES= \ + xfs.c +ioctl_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_ioctl +mount_$(OBJEXT)_SOURCES= \ + xfs.c +mount_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_mount +umount_$(OBJEXT)_SOURCES= \ + xfs.c +umount_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_umount +time_$(OBJEXT)_SOURCES= \ + xfs.c +time_$(OBJEXT)_DEFINES= \ + $(sys_phony_DEFINES) SYS MODULE MODULE_xfs_time + +_sys_phony_SOURCES= \ + _open.$(OBJEXT) _close.$(OBJEXT) _creat.$(OBJEXT) \ + _link.$(OBJEXT) _symlink.$(OBJEXT) _unlink.$(OBJEXT) \ + _read.$(OBJEXT) _write.$(OBJEXT) _lseek.$(OBJEXT) \ + _chdir.$(OBJEXT) _mknod.$(OBJEXT) _sync.$(OBJEXT) \ + _access.$(OBJEXT) _chmod.$(OBJEXT) _chown.$(OBJEXT) \ + _stat.$(OBJEXT) _fstat.$(OBJEXT) _falign.$(OBJEXT) \ + _dup.$(OBJEXT) _dup2.$(OBJEXT) _umask.$(OBJEXT) \ + _sysdebug.$(OBJEXT) _systrace.$(OBJEXT) _getfsys.$(OBJEXT) \ + _ioctl.$(OBJEXT) _mount.$(OBJEXT) _umount.$(OBJEXT) \ + _time.$(OBJEXT) +_open_$(OBJEXT)_SOURCES= \ + xfs.c +_open_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_open +_close_$(OBJEXT)_SOURCES= \ + xfs.c +_close_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_close +_creat_$(OBJEXT)_SOURCES= \ + xfs.c +_creat_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_creat +_link_$(OBJEXT)_SOURCES= \ + xfs.c +_link_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_link +_symlink_$(OBJEXT)_SOURCES= \ + xfs.c +_symlink_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_symlink +_unlink_$(OBJEXT)_SOURCES= \ + xfs.c +_unlink_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_unlink +_read_$(OBJEXT)_SOURCES= \ + xfs.c +_read_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_read +_write_$(OBJEXT)_SOURCES= \ + xfs.c +_write_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_write +_lseek_$(OBJEXT)_SOURCES= \ + xfs.c +_lseek_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_lseek +_chdir_$(OBJEXT)_SOURCES= \ + xfs.c +_chdir_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_chdir +_mknod_$(OBJEXT)_SOURCES= \ + xfs.c +_mknod_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_mknod +_sync_$(OBJEXT)_SOURCES= \ + xfs.c +_sync_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_sync +_access_$(OBJEXT)_SOURCES= \ + xfs.c +_access_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_access +_chmod_$(OBJEXT)_SOURCES= \ + xfs.c +_chmod_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_chmod +_chown_$(OBJEXT)_SOURCES= \ + xfs.c +_chown_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_chown +_stat_$(OBJEXT)_SOURCES= \ + xfs.c +_stat_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_stat +_fstat_$(OBJEXT)_SOURCES= \ + xfs.c +_fstat_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_fstat +_falign_$(OBJEXT)_SOURCES= \ + xfs.c +_falign_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_falign +_dup_$(OBJEXT)_SOURCES= \ + xfs.c +_dup_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_dup +_dup2_$(OBJEXT)_SOURCES= \ + xfs.c +_dup2_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_dup2 +_umask_$(OBJEXT)_SOURCES= \ + xfs.c +_umask_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_umask +_sysdebug_$(OBJEXT)_SOURCES= \ + xfs.c +_sysdebug_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_sysdebug +_systrace_$(OBJEXT)_SOURCES= \ + xfs.c +_systrace_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_systrace +_getfsys_$(OBJEXT)_SOURCES= \ + xfs.c +_getfsys_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_getfsys +_ioctl_$(OBJEXT)_SOURCES= \ + xfs.c +_ioctl_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_ioctl +_mount_$(OBJEXT)_SOURCES= \ + xfs.c +_mount_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_mount +_umount_$(OBJEXT)_SOURCES= \ + xfs.c +_umount_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_umount +_time_$(OBJEXT)_SOURCES= \ + xfs.c +_time_$(OBJEXT)_DEFINES= \ + $(_sys_phony_DEFINES) _SYS MODULE MODULE_xfs_time + +xip_c_MODULES= xip_align xip_ualign xip_examine xip_align_chase \ + xip_align_bmap xip_align_reverse xip_align_recurse xip_search \ + xip_reserve xip_find xip_get xip_set + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/filesys/devio.c b/src/nos/filesys/devio.c new file mode 100644 index 00000000..01fdc103 --- /dev/null +++ b/src/nos/filesys/devio.c @@ -0,0 +1,820 @@ +/* + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + Buffer pool management and generic device I/O routines +**********************************************************/ + +#include +#include +#include +#include +#include "z80/asm.h" +#include "uzi/devio.h" +#include "uzi/rtc.h" +#include "uzi/filesys.h" +#include "uzi/process.h" +#include "nos/global.h" /* for ksignal() and kwait() */ +#include +#include +#include "po/messages.h" + +#ifndef DEBUG +#define DEBUG 0 +#endif + +#ifndef MODULE +#define MODULE_Bufpool +#define MODULE_Devtab +#define MODULE_bufclock +#define MODULE_buf_hits +#define MODULE_buf_miss +#define MODULE_buf_flsh +#define MODULE_bufinit +#define MODULE_bread +#define MODULE_bfree +#define MODULE_zerobuf +#define MODULE_bufsync +#define MODULE_bfind +#define MODULE_freebuf +#define MODULE_bufdump +#define MODULE_validdev +#define MODULE_bdreadwrite +#define MODULE_cdreadwrite +#define MODULE_d_openclose +#define MODULE_d_ioctl +#define MODULE_d_init +#define MODULE_ok +#define MODULE_ok_rdwr +#define MODULE_nogood +#define MODULE_nogood_rdwr +#define MODULE_nogood_ioctl +#endif + +#ifdef MODULE_Bufpool +blkbuf_t *Bufpool[NBLKBUFS]; +#endif + +#ifdef MODULE_Devtab +devsw_t *Devtab[NDEVICES]; +#endif + +#ifdef MODULE_bufclock +unsigned int bufclock; /* time-stamp counter for LRU */ +#endif + +#ifdef MODULE_buf_hits +unsigned int buf_hits; /* buffer pool hits */ +#endif +#ifdef MODULE_buf_miss +unsigned int buf_miss; /* buffer pool misses */ +#endif +#ifdef MODULE_buf_flsh +unsigned int buf_flsh; /* buffer pool flushes */ +#endif + +extern char *baddevmsg; + +/* Buffer pool management and generic device I/O */ + +/* The high-level interface is through bread() and bfree(). + * + * Bread() is given a device and block number, and a rewrite flag. + * If rewrite is 0, the block is actually read if it is not already + * in the buffer pool. If rewrite is set, it is assumed that the caller + * plans to rewrite the entire contents of the block, and it will + * not be read in, but only have a buffer named after it. Also if + * rewrite great then 1 bread() zeroes allocated buffer. + * + * Bfree() is given a buffer pointer and a dirty flag. + * The dirty flag ored with buffer bf_dirty and if result is 0, the buffer + * is made available for further use, else the buffer is marked "dirty", and + * it will eventually be written out to disk. If the flag is 2, the buffer + * will be immediately written out to disk. + * + * Zerobuf() returns a buffer of zeroes not belonging to any device. + * It must be bfree'd after use, and must not be dirty. + * It is used when a read() wants to read an unallocated block of a file. + * + * Bufsync() write outs all dirty blocks (exclude ones with bf_prio set!) + * + * Note that a pointer to a buffer structure is the same as a + * pointer to the data. This is very important. + */ + +/* new initialisation routine by Nick as Bufpool is now a sparse array */ +#ifdef MODULE_bufinit +void +bufinit(void) + { +#if 0 + blkbuf_t **bpp, *bp; + + /* original UZI: */ + /* memset(Bufpool, 0, NBLKBUFS * sizeof(blkbuf_t *)); */ + + for (bpp = Bufpool; bpp < Bufpool + NBLKBUFS; bpp++) + { + bp = calloc(sizeof(blkbuf_t), 1); + if (bp == NULL) + { + _panic(_("bufinit()")); + } + *bpp = bp; + } +#endif + } + +/* DEVIO garbage collection - called by storage allocator when free space + * runs low. Non-dirty buffers are discarded. If the situation is red, + * dirty buffers are flushed to disk, and then discarded also. + */ +void +devio_garbage(red) +int red; +{ + blkbuf_t **bpp, *bp; + + for (bpp = Bufpool; bpp < Bufpool + NBLKBUFS; bpp++) + { + bp = *bpp; + if (bp && bp->bf_busy == 0 && bp->bf_prio == 0) + { + if (bp->bf_dirty) + { + if (red == 0) + { + continue; + } + if (bp->bf_dev == NULLDEV) + { + _panic(_("attempt to write-back zerobuf")); + } + ++buf_flsh; +#if 0 /*DEBUG >= 5*/ + if (bp->bf_dev == 0 && bp->bf_blk == 222) + { + dprintf(5, "wri1 0x%04x 0x%02x\n", bp, bp->bf_data[0x3f]); + } +#endif + if (bdwrite(bp) < 0) + { + _dprintf(0, _("devio_garbage: WARNING! I/O error\n")); + continue; + } + /*bp->bf_dirty = 0;*/ + } + free(bp); + *bpp = NULL; + } + } +} +#endif + +/* read block blk from device dev, return buffer with this block */ +#ifdef MODULE_bread +void * +bread(dev_t dev, blkno_t blk, unsigned char rewrite) +{ + register blkbuf_t *bp; + +#if DEBUG >= 3 + dprintf(3, "bread(%u, %u, %u) starting\n", dev, blk, rewrite); +#endif + + bp = bfind(dev, blk); + if (bp) + { + if (bp->bf_busy) + _panic(_("want busy block 0x%x device 0x%x"), blk, dev); + ++buf_hits; +#if DEBUG >= 5 + if (bp->bf_dev == 0 && bp->bf_blk == 222) + { + dprintf(5, "chit 0x%04x 0x%02x\n", bp, bp->bf_data[0x3f]); + } +#endif + goto Done; + } + ++buf_miss; + /* block not found in pool - allocate free buffer for them */ + if ((bp = freebuf(1)) == NULL) goto Err; + bp->bf_dev = dev; + bp->bf_blk = blk; + /* If rewrite is set, we are about to write over the entire block, + * so we don't need the previous contents + */ + if (rewrite == 0) { /* we must read block data */ + if (bdread(bp) < 0) { /* device can define the error */ + if (udata->u_error == 0) + udata->u_error = EIO; +Err: +#if DEBUG >= 3 + dprintf(3, "bread() returning NULL, error %u\n", udata->u_error); +#endif + return NULL; + } +#if DEBUG >= 5 + if (bp->bf_dev == 0 && bp->bf_blk == 222) + { + dprintf(5, "read 0x%04x 0x%02x\n", bp, bp->bf_data[0x3f]); + } +#endif + } +Done: if (rewrite > 1) /* we need really zeroed block */ + { + memset(bp->bf_data, 0, BUFSIZE); +#if DEBUG >= 5 + if (bp->bf_dev == 0 && bp->bf_blk == 222) + { + dprintf(5, "zero 0x%04x 0x%02x\n", bp, bp->bf_data[0x3f]); + } +#endif + } + bp->bf_busy++; /* was always zero */ + bp->bf_time = ++bufclock; /* Time stamp it */ +#if DEBUG >= 3 + dprintf(3, "bread() returning 0x%x, success\n", bp); +#endif + return (bp->bf_data); +} +#endif + +/* free not needed now buffer */ + +#ifdef MODULE_bfree +int +bfree(blkbuf_t *bp, unsigned char dirty) +{ +#if DEBUG >= 3 + dprintf(3, "bfree(0x%x, %u) starting\n", bp, dirty); +#endif + + bp->bf_dirty |= dirty; + bp->bf_busy = 0; + if (bp->bf_dirty && bp->bf_dev == NULLDEV) + _panic(_("attempt to write-back zerobuf")); +#if 1 /* Nick */ + /* dirty_mask logic is now handled by i_sync() and wr_inode() */ + if (bp->bf_dirty >= 2) { /* Extra dirty */ +#else + if (bp->bf_dirty >= 2 && !dirty_mask) { /* Extra dirty */ +#endif +#if DEBUG >= 5 + if (bp->bf_dev == 0 && bp->bf_blk == 222) + { + dprintf(5, "wri2 0x%04x 0x%02x\n", bp, bp->bf_data[0x3f]); + } +#endif + if (bdwrite(bp) < 0) { + udata->u_error = EIO; +#if DEBUG >= 3 + dprintf(3, "bfree() returning -1, error %u\n", udata->u_error); +#endif + return (-1); + } + bp->bf_prio = bp->bf_dirty = 0; + } +#if DEBUG >= 5 + else + { + if (bp->bf_dev == 0 && bp->bf_blk == 222) + { + dprintf(5, "free 0x%04x 0x%02x\n", bp, bp->bf_data[0x3f]); + } + } +#endif + if (!bp->bf_prio) + ksignal(Bufpool, 0); +#if DEBUG >= 3 + dprintf(3, "bfree() returning 0, success\n"); +#endif + return 0; +} +#endif + +/* Returns a free zeroed buffer with no associated device. + * It is essentially a malloc for the kernel. Free it with brelse(). + * This procedure able to return NULL only if waitfor==0 + */ + +#ifdef MODULE_zerobuf +void * +zerobuf(unsigned char waitfor) +{ + static int blk = 0; + register blkbuf_t *bp; /* = freebuf(waitfor); Nick see below */ + +#if DEBUG >= 3 + dprintf(3, "zerobuf(%u) starting\n", waitfor); +#endif + + bp = freebuf(waitfor); /* Nick see above */ + + if (bp) { + bp->bf_dev = NULLDEV; + bp->bf_blk = ++blk; + bp->bf_busy = 1; + bp->bf_time = ++bufclock; + memset(bp->bf_data, 0, BUFSIZE); +#if DEBUG >= 3 + dprintf(3, "zerobuf() returning 0x%x, found\n", bp); +#endif + return bp->bf_data; + } +#if DEBUG >= 3 + dprintf(3, "zerobuf() returning NULL, not found\n"); +#endif + return NULL; +} +#endif + +/* flush all dirty buffers (except ones with bf_prio set) */ + +#ifdef MODULE_bufsync +void +bufsync(void) +{ + register blkbuf_t **bpp, *bp; + + /*bpp = Bufpool;*/ + +#if DEBUG >= 3 + dprintf(3, "bufsync() starting\n"); +#endif + +#if 0 + /* dirty_mask logic is now handled by i_sync() and wr_inode() */ + dirty_mask = 0; +#endif + for (bpp = Bufpool; bpp < Bufpool + NBLKBUFS; bpp++) + { + bp = *bpp; + if (bp && bp->bf_dev != NULLDEV && + bp->bf_dirty && + !bp->bf_prio) + { +#if DEBUG >= 5 + if (bp->bf_dev == 0 && bp->bf_blk == 222) + { + dprintf(5, "sync 0x%04x 0x%02x\n", bp, bp->bf_data[0x3f]); + } +#endif + if (!bdwrite(bp)) + { + bp->bf_dirty = 0; + } + } + } +#if DEBUG >= 3 + dprintf(3, "bufsync() returning\n"); +#endif +} +#endif + + +#ifdef MODULE_bfind +blkbuf_t * +bfind(int dev, blkno_t blk) +{ + register blkbuf_t **bpp, *bp; + +#if DEBUG >= 3 + dprintf(3, "bfind(%u, %u) starting\n", dev, blk); +#endif + + for (bpp = Bufpool; bpp < Bufpool + NBLKBUFS; bpp++) + { + bp = *bpp; + if (bp && bp->bf_dev == dev && bp->bf_blk == blk) + { +#if DEBUG >= 3 + dprintf(3, "bfind() returning 0x%x, found (index %u)\n", bp, bpp - Bufpool); +#endif + return bp; + } + } +#if DEBUG >= 3 + dprintf(3, "bfind() returning NULL, not found\n"); +#endif + return NULL; +} +#endif + +/* find free buffer in pool or freeing oldest + * This procedure able to return NULL only if waitfor == 0 + */ + +#ifdef MODULE_freebuf +blkbuf_t * +freebuf(unsigned char waitfor) +{ + unsigned int diff; + register blkbuf_t **bpp, *bp; + register blkbuf_t *oldest = NULL; + register unsigned int oldtime = 0; + +#if DEBUG >= 3 + dprintf(3, "freebuf(%u) starting\n", waitfor); +#endif + + /* Try to find a non-busy buffer and + * write out the data if it is dirty + */ + while (1) + { + /* pass 1 - try to find non dirty buffer */ + for (bpp = Bufpool; bpp < Bufpool + NBLKBUFS; bpp++) + { + bp = *bpp; + if (bp && !bp->bf_busy && !bp->bf_prio && + !bp->bf_dirty) + { + diff = bufclock - bp->bf_time; + if (diff >= oldtime) + { + oldest = bp; + oldtime = diff; + } + } + } + if (oldest) /* buffer found */ + { + break; + } + /* pass 0 - try to find any buffer */ + for (bpp = Bufpool; bpp < Bufpool + NBLKBUFS; bpp++) + { + bp = *bpp; + if (bp && !bp->bf_busy && !bp->bf_prio) + { + diff = bufclock - bp->bf_time; + if (diff >= oldtime) + { + oldest = bp; + oldtime = diff; + } + } + } + if (oldest) /* buffer found */ + { + break; + } + /* pass -1 - try to expand the buffer pool */ + for (bpp = Bufpool; bpp < Bufpool + NBLKBUFS; bpp++) + { + bp = *bpp; + if (bp == NULL) + { + oldest = calloc(sizeof(blkbuf_t), 1); + *bpp = oldest; /* may be null if no memory */ + goto found; + } + } + if (!waitfor) + { + goto Err; + } + kwait(Bufpool); /* wait for buffer */ + } +found: + if (oldest->bf_dirty) + { +#if 1 /* Nick */ + if (oldest->bf_dev == NULLDEV) + { + _panic(_("attempt to write-back zerobuf")); + } +#endif + ++buf_flsh; +#if 0 /*DEBUG >= 5*/ + if (bp->bf_dev == 0 && bp->bf_blk == 222) + { + dprintf(5, "wri1 0x%04x 0x%02x\n", bp, bp->bf_data[0x3f]); + } +#endif + if (bdwrite(oldest) < 0) + { + udata->u_error = EIO; +Err: return NULL; + } + oldest->bf_dirty = 0; + } +#if 0 /*DEBUG >= 5*/ + else + { + if (bp->bf_dev == 0 && bp->bf_blk == 222) + { + dprintf(5, "toss 0x%04x 0x%02x\n", bp, bp->bf_data[0x3f]); + } + } +#endif +#if DEBUG >= 3 + dprintf(3, "freebuf() returning 0x%x, found\n", oldest); +#endif + return oldest; +} +#endif + +/* dump buffers info for debug */ + +#ifdef MODULE_bufdump +void +bufdump(void) +{ + register blkbuf_t **bpp, *bp; + + _printf(_("Buf hits/miss/flsh: %u/%u/%u\n" + "Buffs:\tdev\tblock\tDBP\ttime\t(clock=%d)\n"), + buf_hits, buf_miss, buf_flsh, bufclock); + for (bpp = Bufpool; bpp < Bufpool + NBLKBUFS; bpp++) + { + bp = *bpp; + if (bp) + { + _printf(_("\t%p\t%u\t%c%c%c\t%u\n"), + bp->bf_dev, bp->bf_blk, + bp->bf_dirty ? 'd' : '-', + bp->bf_busy ? 'b' : '-', + bp->bf_prio ? 'p' : '-', + bp->bf_time); + } + } + buf_miss = buf_hits = buf_flsh = 0; +} +#endif + +/* validate device number */ + +#ifdef MODULE_validdev +devsw_t * +validdev(dev_t dev, char *msg) +{ + unsigned char major; + register devsw_t *dt; + + major = MAJOR(dev); + if (major < NDEVICES) + { + dt = Devtab[major]; + if (MINOR(dev) < dt->minors) + { + return dt; + } + } + + if (msg) + { + _panic(Baddevmsg, msg, (int)major); + } + + udata->u_error = ENODEV; + return NULL; +} +#endif + +/* Bdread() and bdwrite() are the block device interface routines. + * They are given a buffer pointer, which contains the device, + * block number, and data location. + * They basically validate the device and vector the call. + * + * Cdread() and cdwrite() are the same for character (or "raw") devices, + * and are handed a device number. + * + * udata->u_base, count, and offset have the rest of the data. + * + * The device driver read and write routines now have only two arguments, + * minor and rawflag. If rawflag is zero, a single block is desired, and + * the necessary data can be found in udata->u_buf. + * Otherwise, a "raw" or character read is desired, and udata->u_offset, + * udata->u_count, and udata->u_base should be consulted instead. + * + * Any device other than a disk will have only raw access. + */ + +/* block device read/write */ + +#ifdef MODULE_bdreadwrite +int +bdreadwrite(blkbuf_t *bp, unsigned char write) +{ + register dev_t dev = bp->bf_dev; + register devsw_t *dt = validdev(dev, !write ? "bdread" : "bdwrite"); + + udata->u_buf = bp; + if (write) + return (dt->dev_write)(MINOR(dev), 0); + return (dt->dev_read)(MINOR(dev), 0); +} +#endif + +/* character device read */ + +#ifdef MODULE_cdreadwrite +int +cdreadwrite(dev_t dev, unsigned char write) +{ + register devsw_t *dt = validdev(dev, !write ? "cdread" : "cdwrite"); + + if (write) + return (dt->dev_write)(MINOR(dev), 1); + return (dt->dev_read)(MINOR(dev), 1); +} +#endif + + +#ifdef MODULE_d_openclose +int +d_openclose(dev_t dev, unsigned char open) +{ + register devsw_t *dt = validdev(dev, open ? NULL : "d_close"); + + if (dt == NULL) + return (-1); + if (open) + return (dt->dev_open)(MINOR(dev)); + return (dt->dev_close)(MINOR(dev)); +} +#endif + +/* generic device ioctl */ + +#ifdef MODULE_d_ioctl +int +d_ioctl(dev_t dev, int request, void *data) +{ + register devsw_t *dt = validdev(dev, NULL); + + if (dt == NULL) { + udata->u_error = ENXIO; + goto Err; + } + if ((dt->dev_ioctl)(MINOR(dev), request, data)) { + udata->u_error = EINVAL; +Err: return (-1); + } + return 0; +} +#endif + +/* all devices initialization */ + +#ifdef MODULE_d_init +static int +ramdrive_read(unsigned char minor, unsigned char rawflag) + { + blkno_t block; + unsigned long dptr, sptr; + + block = udata->u_buf->bf_blk; + if (block >= HD0_SIZE) + { + return -1; + } + + sptr = ((unsigned long)(block + HD0_START)) << BUFSIZELOG; + dptr = (unsigned long)udata->u_buf->bf_data; + copyr(sptr, dptr, BUFSIZE); + + return 0; + } + +static int +ramdrive_write(unsigned char minor, unsigned char rawflag) + { + blkno_t block; + unsigned long dptr, sptr; + + block = udata->u_buf->bf_blk; + if (block >= HD0_SIZE) + { + return -1; + } + + sptr = (unsigned long)udata->u_buf->bf_data; + dptr = ((unsigned long)(block + HD0_START)) << BUFSIZELOG; + copyr(sptr, dptr, BUFSIZE); + + return 0; + } + +/* return type of d_init() was formerly an int, though it was never checked */ +void +d_init(void) +{ + register devsw_t **dtp, *dt; + unsigned char minor; + + for (dtp = Devtab; dtp < Devtab + NDEVICES; dtp++) + { + dt = calloc(sizeof(devsw_t), 1); + if (dt == NULL) + { + _panic(_("d_init()")); + } + dt->dev_init = nogood; + dt->dev_open = nogood; + dt->dev_close = nogood; + dt->dev_read = nogood_rdwr; + dt->dev_write = nogood_rdwr; + dt->dev_ioctl = nogood_ioctl; + *dtp = dt; + } + + dt = Devtab[0]; + dt->minors = 1; + dt->dev_init = ok; + dt->dev_open = ok; + dt->dev_close = ok; + dt->dev_read = ramdrive_read; + dt->dev_write = ramdrive_write; + + for (dtp = Devtab; dtp < Devtab + NDEVICES; dtp++) + { + dt = *dtp; + for (minor = 0; minor < dt->minors; minor++) + { + if ((dt->dev_init)(minor)) + { + _panic(_("d_init() major %d minor %d"), + dtp - Devtab, minor); + } + } + } +} +#endif + +/* special filler for driver functions, which do nothing */ + +#ifdef MODULE_ok +int +ok(unsigned char minor) +{ + /* NOTUSED(minor); */ + return 0; +} +#endif + +/* special filler for driver read/write functions, which do nothing */ + +#ifdef MODULE_ok_rdwr +int +ok_rdwr(unsigned char minor, unsigned char rawflag) +{ + /* NOTUSED(minor); */ + /* NOTUSED(rawflag); */ + return 0; +} +#endif + +/* special filler for driver functions, which return error */ + +#ifdef MODULE_nogood +int +nogood(unsigned char minor) +{ + /* NOTUSED(minor); */ + return -1; +} +#endif + +/* special filler for driver read/write functions, which return error */ + +#ifdef MODULE_nogood_rdwr +int +nogood_rdwr(unsigned char minor, unsigned char rawflag) +{ + /* NOTUSED(minor); */ + /* NOTUSED(rawflag); */ + return -1; +} +#endif + +/* special filler for driver ioctl functions, which return error */ + +#ifdef MODULE_nogood_ioctl +int +nogood_ioctl(unsigned char minor, int req, void *data) +{ + /* NOTUSED(minor); */ + /* NOTUSED(req); */ + /* NOTUSED(data); */ + return -1; +} +#endif + diff --git a/src/nos/filesys/execve.c b/src/nos/filesys/execve.c new file mode 100644 index 00000000..22085bb4 --- /dev/null +++ b/src/nos/filesys/execve.c @@ -0,0 +1,614 @@ +/* + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + Implementation of system calls +**********************************************************/ + +#include +#include +#include +#include +#include "z80/asm.h" +#include "uzi/devio.h" +#include "uzi/rtc.h" +#include "uzi/filesys.h" +#include "uzi/xip.h" +#include "uzi/process.h" +#include "uzi/maxmin.h" +#include "uzi/usrmem.h" +#include "uzi/execve.h" + +#ifndef MODULE +#define MODULE_sys_execve +#define MODULE_wargs +#define MODULE_rargs +#endif + +/* Implementation of system calls */ + +#if 1 /* Nick please look into this */ +/* User's execve() call. All other flavors are library routines. */ +/******************************************* +execve (name, argv, envp) Function 23 +char *name; +char *argv[]; +char *envp[]; +********************************************/ +#ifdef MODULE_sys_execve +#define name (char *)udata->u_argn0 +#define argv (char **)udata->u_argn1 +#define envp (char **)udata->u_argn2 +int +sys_execve(void) + { + int argc; + register cinode_t *ino; + char *buf; + blkno_t bmap(); + blkno_t blk; + char **nargv, **nenvp; /* In user space */ + argblk_t *abuf, *ebuf; + int (**sigp)(); + char *progptr; /* Original UZI */ + unsigned int entry, count, remain, offset; + filesys_t *dev; + dev_t devno; + blkno_t i, pos, *region = NULL, regions, blocks; + + ino = namei(name, NULL, 1); + if (ino == NULL) + { + return -1; + } + + if ((getperm(ino) & S_IOEXEC) == 0 || + (ino->c_node.i_mode & + (S_IEXEC | S_IOEXEC | S_IGEXEC)) == 0) + { + udata->u_error = EACCES; + goto nogood; + } + + if (S_ISREGALIGN(ino->c_node.i_mode) == 0) + { + udata->u_error = ENOREGALIGN; /* file not regular or aligned */ + goto nogood; + } + +/* abyte('a'); */ + + setftim (ino, A_TIME); +/* abyte('b'); */ + + /* Read in the first block of the new program */ + buf = bread(ino->c_dev, bmap(ino, 0, 1), 0); +/* abyte('c'); */ + + switch (((exehdr_t *)buf)->e_magic) + { + case E_MAGIC: + break; + case 0x2123: /* '#!' */ + udata->u_error = ESHELL; + goto nogood2; + default: + udata->u_error = ENOEXEC; + goto nogood2; + } + + entry = ((exehdr_t *)buf)->e_format; + switch (entry) /* temporary multiple use of variable */ + { + case E_FORMAT_LARGE: + break; + case E_FORMAT_BANKED: + /* prepare to access the given inode */ + devno = ino->c_dev; + dev = getfs(devno); + + /* construct region list using shared subroutine */ + region = xip_examine(dev, ino, ino->c_node.i_size, + ®ions, &blocks); + if (region == NULL) + { + goto nogood2; /* error code has been setup */ + } + break; + default: + udata->u_error = ENOEXEC; + goto nogood2; + } + + /* check the file's reported length against header */ + /* note: holes in the executable will cause a crash!! */ + if (((exehdr_t *)buf)->e_size > ino->c_node.i_size) + { + udata->u_error = ETOOSHORT; /* file is too short, or hole */ + goto nogood2; + } + + /* can't skip more than one block for header */ + if (((exehdr_t *)buf)->e_hsize >= BUFSIZE) + { + udata->u_error = ENOEXEC; /* executable format error */ + goto nogood2; + } + +#if 0 /* Nick has temporarily removed CP/M support */ + /* Set Flag to indicate type of Executable (UZI-CP/M) */ + if ((*(buf+3)=='U') && (*(buf+4)=='Z') && (*(buf+5)=='I')) + uzicom = 1; + else + uzicom = 0; +#endif +/* abyte('d'); */ + + /* Gather the arguments, and put them in temporary buffers. */ + /* Put environment in another buffer. */ + abuf = (argblk_t *)tmpbuf(); + ebuf = (argblk_t *)tmpbuf(); +/* abyte('e'); */ + + if (wargs(argv, abuf) || wargs(envp, ebuf)) + { + goto nogood3; /* SN */ + } +/* abyte('f'); */ + + di(); /* not sure if this is really necessary */ + + /* Check setuid stuff here. No other changes needed in user data */ + if (ino->c_node.i_mode & S_ISUID) + { + udata->u_ptab->p_euid = ino->c_node.i_uid; + } + + if (ino->c_node.i_mode & S_ISGID) + { + udata->u_ptab->p_egid = ino->c_node.i_gid; + } + +#if 0 /* don't bother for now, it requires the ptab!! */ + /* Reset child of fork */ + udata->u_ptab->p_fork_inf = 0; +/* abyte('g'); */ +#endif + + /* We are definitely going to succeed with the exec, + * so we can start writing over the old program + */ + + /* get break for program (not including argument data) */ + nargv = (char **)((exehdr_t *)buf)->e_break; + + /* read back arguments, determine position of environment */ + nenvp = (char **)rargs((char *)nargv, abuf, &argc); + brelse((blkbuf_t *)abuf); + + /* read back environment, determine initial break address */ + udata->u_ptab->p_break = (unsigned int)rargs((char *)nenvp, ebuf, NULL); + + /* zero out the program's udata and stack segments */ + progptr = (char *)((exehdr_t *)buf)->e_udata; + remain = (unsigned int)nargv - ((exehdr_t *)buf)->e_udata; + + bzero(ebuf, BUFSIZE); /* optimised for size, not speed */ + uput(ebuf, (void *)USER_TABLE, 0x100); /* zero virtual memory table */ + + while (remain) + { + count = min_int(remain, BUFSIZE); + uput(ebuf, progptr, count); + + progptr += count; + remain -= count; + } + + brelse((blkbuf_t *)ebuf); + + /* push the arguments to main(), just below the argument data */ + uputw(argc, nargv - 3); + uputw((unsigned int)nargv, nargv - 2); + uputw((unsigned int)nenvp, nargv - 1); + + /* set initial stack for program, just below parameters pushed */ + udata->u_ptab->p_isp = (char *)(nargv - 3); + + /* if executable is banked, map it into virtual memory space */ + if (entry == E_FORMAT_BANKED) /* entry = e_format field from header */ + { + /* find initial location of program, in virtual memory */ + progptr = (char *)0x8000; /* hard coded for now */ + + for (i = 0; i < regions; i++) + { + /* convert to page number, put in virt memory table */ + uputc(0x40 + (region[i] >> (PAGE_LOG-BUFSIZELOG)) - 4, + progptr++); + } + + if (brelse((blkbuf_t *)region) < 0) + { + /* udata->u_error = something; */ + } + /* region = NULL; */ /* don't bother, we can't fail now */ + } + + /* find out program's entry address, while buf is still valid */ + entry = ((exehdr_t *)buf)->e_entry; + + /* Read in the rest of the program */ + /* we have already checked that offset is < BUFSIZE */ + progptr = (char *)((exehdr_t *)buf)->e_idata; + offset = ((exehdr_t *)buf)->e_hsize; + remain = ((exehdr_t *)buf)->e_udata - (unsigned int)progptr; + + if (remain) /* first block is treated specially */ + { + count = min_int(remain, BUFSIZE - offset); + uput(buf + offset, progptr, count); + + progptr += count; + remain -= count; + } + brelse((blkbuf_t *)buf); + + blk = 1; + while (remain) + { + buf = bread(ino->c_dev, bmap(ino, blk++, 1), 0); + + count = min_int(remain, BUFSIZE); + uput(buf, progptr, count); + + progptr += count; + remain -= count; + + brelse((blkbuf_t *)buf); + } +/* abyte('j'); */ + i_deref(ino); + + /* Turn off caught signals */ + for (sigp = udata->u_ptab->p_sigvec; sigp < (udata->u_ptab->p_sigvec + NSIGS); sigp++) + { + if (((long)*sigp) != SIG_IGN) + { + *sigp = (void (*)(signal_t))SIG_DFL; + } + } + +#if 0 /* don't bother for now, it requires the ptab!! */ + /* Fill in udata->u_ptab->p_name with Program invocation name */ + uget(ugetw(nargv), udata->u_ptab->p_name, 8); +/* abyte('l'); */ +#endif + + /* Jump into the program, first setting the stack + * and copying the udata block + */ + + enable(); /* not sure if this is really necessary */ +/* abyte('m'); */ + doexec((int *)udata->u_ptab->p_isp, entry); + +nogood3: + brelse((blkbuf_t *)abuf); + brelse((blkbuf_t *)ebuf); +nogood2: + if (region) + { + brelse((blkbuf_t *)region); + } + brelse((blkbuf_t *)buf); +nogood: + i_deref(ino); + return -1; + } +#undef name +#undef argv +#undef envp +#endif + +/* SN TODO max (1024) 512 bytes for argv + and max 512 bytes for environ +*/ + + +#ifdef MODULE_wargs +int +wargs(char **argv, argblk_t *argbuf) /* argv in user space */ +{ + register char *ptr; /* Address of base of arg strings in user space */ + int c; + register char *bufp; + /* Nick unsigned ugetw(); due to IAR stricter checking */ + char ugetc(); +/* _dprintf(0, _("wargs 0x%x\n"), argv); */ + + argbuf->a_argc = 0; /* Store argc in argbuf */ + bufp = argbuf->a_buf; + + while (ptr = (char *)ugetw (argv++)) + { +/* _dprintf(0, _("0x%x\n"), ptr); */ + ++(argbuf->a_argc); /* Store argc in argbuf. */ + do + { + *bufp++ = c = ugetc (ptr++); + if (bufp > argbuf->a_buf+500) + { + udata->u_error = E2BIG; + return (1); + } + } + while (c); + } + argbuf->a_arglen = bufp - argbuf->a_buf; /*Store total string size. */ + return (0); +} +#endif + + +#ifdef MODULE_rargs +char * +rargs(char *ptr, argblk_t *argbuf, int *cnt) +{ + int argc; + char **argv; /* Address of users argv[], just below ptr */ + char *sptr; + + sptr = argbuf->a_buf; + + /* Move them into the users address space, from the bottom */ + argc = argbuf->a_argc; + argv = (char **)ptr; + ptr += (argc + 1) * sizeof(char *); + +/* abyte('a'); */ +/* ahexw((int)sptr); */ +/* abyte(' '); */ +/* ahexw((int)ptr); */ +/* abyte(' '); */ +/* ahexw((int)argbuf->a_arglen); */ + if (argbuf->a_arglen) + uput (sptr, ptr, argbuf->a_arglen); +/* abyte('b'); */ + + if (cnt) +/* { */ +/* _dprintf(0, _("(argc = %d)\n"), argc); */ + *cnt = argc; +/* } */ + + /* Set each element of argv[] to point to its argument string */ + while (argc--) + { +/* abyte('c'); */ +/* ahexw((int)ptr); */ +/* abyte(' '); */ +/* ahexw((int)argv); */ + uputw((unsigned int)ptr, argv++); +/* abyte('d'); */ + do + ++ptr; + while (*sptr++); + } +/* abyte('e'); */ +/* ahexw(0); */ +/* abyte(' '); */ +/* ahexw((int)argv); */ + /* add Null Pointer to end of array */ + uputw(0, argv); +/* abyte('f'); */ + return ptr; +} +#endif +#else +int repack(char **argp, char **envp, unsigned char check)); +void *scop(char **argv, unsigned char cnt, char *to, char *real); +unsigned int ssiz(char **argv, unsigned char *cnt, char **smin); +void exec2(void); + +static unsigned int __argc; +static char **__argv; +static char **__envp; + +/* check for arguments size */ +unsigned int ssiz(char **argv, unsigned char *cnt, char **smin) +{ + char *p, *mi = *smin; + unsigned int n = 0; + + *cnt = 1; + while ((p = *argv++) != NULL) { + if (p < mi) mi = p; + while (++n, *p++ != '\0') + ; + ++(*cnt); + } + *smin = mi; + return n; +} + +/* copy arguments vector */ +void *scop(char **argv, unsigned char cnt, char *to, char *real) +{ + char *s, **a = (char **)to, *q = to + sizeof(char *) * cnt; + + while ((s = *argv++) != NULL) { + *a++ = real; + while (++real, (*q++ = *s++) != '\0') + ; + } + *a = NULL; + return q; +} + +/* move all arguments to top of program memory or check their size */ +/* for move, stack can't be near the top of program memory and */ +/* PROGBASE area is used as draft area */ +int repack(char **argp, char **envp, unsigned char check) +{ + unsigned int tot, et, asiz, esiz; + unsigned char acnt, ecnt; + register char *p = (void *)PROGBASE; + char *amin = (void *)UZIXBASE; + + asiz = ssiz(argp, &acnt, &amin); + esiz = ssiz(envp, &ecnt, &amin); + + tot = (asiz + sizeof(char *) * acnt) + + (et = esiz + sizeof(char *) * ecnt); + if ((unsigned int)p + tot > (unsigned int)amin) { /* p == PROGBASE! */ + udata->u_error = ENOMEM; +Err: return 1; /* no room for args */ + } + if (check) { + if ((unsigned int)udata->u_base > (unsigned int)(UZIXBASE - 1 - tot)) { + udata->u_error = E2BIG; + goto Err; /* no room for args */ + } + goto Ok; + } + p = scop(argp, acnt, p, (char *)(UZIXBASE - 1 - et - asiz)); + scop(envp, ecnt, p, (char *)(UZIXBASE - 1 - esiz)); + __envp = (char **)(UZIXBASE - 1 - et); + __argv = (char **)(UZIXBASE - 1 - tot); + __argc = acnt-1; + bcopy((void *)PROGBASE, __argv, tot); +Ok: return 0; +} + +/* exec2() second step of execve - executed on system stack! */ +void exec2(void) +{ + register char **p, *progptr; + register blkno_t pblk; + unsigned char blk = 0; + char *buf; + + /* Read in the rest of the program */ + progptr = (char *)PROGBASE; + while (blk <= udata->u_count) { + if ((pblk = bmap(udata->u_ptab->p_ino, blk, 1)) != NULLBLK) { + buf = bread(udata->u_ptab->p_ino->c_dev, pblk, 0); + if (buf != NULL) { + bcopy(buf, progptr, BUFSIZE); + brelse((blkbuf_t *)buf); + } + } + progptr += BUFSIZE; + ++blk; + } + i_deref(udata->u_ptab->p_ino); + /* Zero out the free memory */ + bzero(progptr, (unsigned int) ((char *)__argv - progptr)); + udata->u_ptab->p_break = (unsigned int)(((exeptr)PROGBASE)->e_bss); +#if DEBUG > 1 + udata->u_ptab->p_traceme = (DEBUG > 10); /* Nick 0; */ +#endif + /* Fill in udata->u_ptab->p_name */ + bcopy(*__argv, udata->u_ptab->p_name, DIRNAMELEN); + /* Shove argc and the address of argv just below argv */ + p = __argv; + *--__argv = (char *) __envp; + *--__argv = (char *) p; + *--__argv = (char *) __argc; + /* Machine dependant jump into the program, first setting the stack */ + doexec((unsigned int)__argv); /* NORETURN */ +} + +/********************************************************* + SYSCALL execve(char *name, char *argv[], char *envp[]); +*********************************************************/ +#define name (char *)udata->u_argn0 +#define argv (char **)udata->u_argn1 +#define envp (char **)udata->u_argn2 +int sys_execve(void) +{ + register cinode_t *ino; + register unsigned char *buf; + register sig_t *sp; + unsigned char magic; + unsigned int mblk; + + if ((ino = namei(name, NULL, 1)) == 0) { + udata->u_error = ENOENT; + goto Err1; + } + mblk = (unsigned int)ino->c_node.i_size; /* image length in bytes */ + if (PROGBASE + ino->c_node.i_size >= UZIXBASE) { /* long operation! */ + udata->u_error = ENOMEM; + goto Ret; + } + if ((getperm(ino) & S_IOEXEC) == 0 || + getmode(ino) != S_IFREG || + (ino->c_node.i_mode & (S_IEXEC | S_IGEXEC | S_IOEXEC)) == 0) { + udata->u_error = EACCES; + goto Ret; + } + /* save information about program size in blocks/top */ + udata->u_count = (mblk + BUFSIZE - 1) >> BUFSIZELOG; + udata->u_base = (void *)(PROGBASE + mblk + 1024); /* min +1K stack */ + /* Read in the first block of the new program */ + buf = bread(ino->c_dev, bmap(ino, 0, 1), 0); + if (buf == NULL) goto Ret; + magic = ((exeptr)buf)->e_magic; + if (brelse((blkbuf_t *)buf) != 0) goto Ret; + if (magic != EMAGIC) { + if (((unsigned char *)buf)[0] == '#' && + ((unsigned char *)buf)[1] == '!') + udata->u_error = ESHELL; + else udata->u_error = ENOEXEC; + goto Ret; + } + setftim(ino, A_TIME); /* set access time */ + /* Turn off caught signals */ + sp = udata->u_ptab->p_sigvec; + while (sp < (udata->u_ptab->p_sigvec + NSIGS)) { + if ((sig_t)(*sp) != SIG_IGN) + *(sig_t *)sp = SIG_DFL; + ++sp; + } + /* Here, check the setuid stuff. No other changes need be + * made in the user data + */ + if (ino->c_node.i_mode & S_ISUID) udata->u_ptab->p_euid = ino->c_node.i_uid; + if (ino->c_node.i_mode & S_ISGID) udata->u_ptab->p_egid = ino->c_node.i_gid; + /* + * at this point, we are committed to reading in and executing + * the program. We switch to a local stack, and pass to it the + * necessary parameter: ino + */ + udata->u_ptab->p_ino = ino; /* Temporarly stash these here */ + if (repack(argv, envp, 1)) /* Check args size */ + goto Ret; + tempstack(); + repack(argv, envp, 0); /* Move arguments */ + exec2(); + +Ret: i_deref(ino); +Err1: return (-1); +} +#undef name +#undef argv +#undef envp +#endif + diff --git a/src/nos/filesys/filesys.c b/src/nos/filesys/filesys.c new file mode 100644 index 00000000..f1d1469b --- /dev/null +++ b/src/nos/filesys/filesys.c @@ -0,0 +1,2034 @@ +/* + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + Filesystem related routines +**********************************************************/ + +#include +#include +#include +#include +#include +#include +#include "z80/asm.h" +#include "uzi/devio.h" +#include "uzi/rtc.h" +#include "uzi/filesys.h" +#include "uzi/xip.h" +#include "uzi/process.h" +#include "uzi/scall1.h" /* for readi() and writei() macros */ +#include "uzi/usrmem.h" +#include "nos/global.h" /* for ksignal() */ +#include +#include "po/messages.h" + +#ifndef DEBUG +#define DEBUG 0 +#endif + +#ifdef MODULE +#define STATIC +extern unsigned char dirty_mask; +extern _char *Badinomsg; +extern _char *Badfsmsg; +extern _char *Refstoinode; +extern _char *Gtinobadoft; +#else +#define STATIC static +#define MODULE_root_dev +#define MODULE_root_ino +#define MODULE_Fstab +#define MODULE_Inotab +#define MODULE_Oftab +#define MODULE_dirty_mask +#define MODULE_Badinomsg +#define MODULE_Baddevmsg +#define MODULE_Badfsmsg +#define MODULE_Refstoinode +#define MODULE_Gtinobadoft +#define MODULE_fs_init +#define MODULE_findfs +#define MODULE_getfs +#define MODULE_wr_inode +#define MODULE_i_ref +#define MODULE_i_deref +#define MODULE_i_free +#define MODULE__namei +#define MODULE_namei +#define MODULE_srch_dir +#define MODULE_srch_mt +#define MODULE_i_open +#define MODULE_ch_link +#define MODULE_filename +#define MODULE_namecomp +#define MODULE_newfile +#define MODULE_filesys_doclose +#define MODULE_i_alloc +#define MODULE_blk_alloc +#define MODULE_blk_free +#define MODULE_oft_alloc +#define MODULE_oft_deref +#define MODULE_uf_alloc +#define MODULE_isdevice +#define MODULE_freeblk +#define MODULE_f_trunc +#define MODULE_bmap +#define MODULE_validblk +#define MODULE_getinode +#define MODULE_getperm +#define MODULE_setftim +#define MODULE_fmount +#define MODULE_magic +#define MODULE_i_sync +#define MODULE_fs_sync +#endif + +#ifdef MODULE_root_dev +dev_t root_dev; /* Device number of root filesystem. */ +#endif +#ifdef MODULE_root_ino +cinode_t *root_ino; /* Address of root dir in inode table */ +#endif + +#ifdef MODULE_Fstab +filesys_t *Fstab[NMOUNTS]; +#endif +#ifdef MODULE_Inotab +cinode_t *Inotab[NINODES]; +#endif +#ifdef MODULE_Oftab +oft_t *Oftab[NOPENFILES]; +#endif + +/* Internal variable for use whilst flushing cache */ +#ifdef MODULE_dirty_mask +STATIC unsigned char dirty_mask; +#endif + +/* Common messages. They are here to save memory */ +#ifdef MODULE_Badinomsg +STATIC _char *Badinomsg = N_("%s: bad inode number %u\n"); +#endif +#ifdef MODULE_Baddevmsg +_char *Baddevmsg = N_("%s: bad dev %u"); +#endif +#ifdef MODULE_Badfsmsg +STATIC _char *Badfsmsg = N_("%s: fs of dev %u marked as bad\n"); +#endif +#ifdef MODULE_Refstoinode +STATIC _char *Refstoinode = N_("%s refs to inode %u\n"); +#endif +#ifdef MODULE_Gtinobadoft +STATIC _char *Gtinobadoft = N_("getinode: bad oft %u%s %u\n"); +#endif + +#define blockinodes(blk) ((blk) << DINODESPERBLOCKLOG) +#define devinodes(dev) blockinodes((dev)->s_isize) +#define inodeblock(dev,ino) (((ino) >> DINODESPERBLOCKLOG) + \ + (dev)->s_reserv) +#define inodeoffset(ino) ((ino) & (DINODESPERBLOCK-1)) + +/* new initialisation routine by Nick as Fstab is now a sparse array */ +#ifdef MODULE_fs_init +void +fs_init(void) + { + filesys_t **fspp, *fsp; + + /* original UZI: */ + /* memset(Fstab, 0, NMOUNTS * sizeof(filesys_t *)); */ + + for (fspp = Fstab; fspp < Fstab + NMOUNTS; fspp++) + { + fsp = calloc(sizeof(filesys_t), 1); + if (fsp == NULL) + { + _panic(_("fs_init()")); + } + *fspp = fsp; + } + } +#endif + +/* Check the given device number, and return its address in the mount table. + */ +#ifdef MODULE_findfs +filesys_t * +findfs(dev_t devno) +{ + register filesys_t **fspp, *fsp; + + for (fspp = Fstab; fspp < Fstab + NMOUNTS; fspp++) + { + fsp = *fspp; +#if 1 /* temp! */ + dprintf(3, "fsp 0x%x s_mounted 0x%x s_dev %d\n", fsp, fsp->s_mounted, fsp->s_dev); +#endif + if (fsp->s_mounted && fsp->s_dev == devno) + { + return fsp; + } + } + return NULL; +} +#endif + +/* Check the given device number, and return its address in the mount table. + * Also time-stamp the superblock of dev, and mark it modified. + * Used when freeing and allocating blocks and inodes. + */ + +#ifdef MODULE_getfs +filesys_t * +getfs(dev_t devno) +{ + filesys_t *dev = findfs(devno); + + if (dev == NULL) + _panic(Baddevmsg, "getfs", devno); + rdtime(&dev->s_time); /* timestamp */ + dev->s_fmod = 1; /* mark modified */ + return dev; +} +#endif + +/* Wr_inode() writes out the given inode in the inode table out to disk, + * and resets its dirty bit. + * Attention! Immediate writing may be delayed by dirty_mask! + */ + +#ifdef MODULE_wr_inode +int +wr_inode(cinode_t *ino) +{ + dinode_t *buf; + +#if DEBUG >= 3 + dprintf(3, "wr_inode(0x%x) starting\n", ino); +#endif + + magic(ino, "wr_inode"); + if (ino->c_dirty && !ino->c_ro) { + if ((buf = (dinode_t *)bread(ino->c_dev, + inodeblock(findfs(ino->c_dev), + ino->c_num), 0)) == NULL) + { +Err: +#if DEBUG >= 3 + dprintf(3, "wr_inode() returning -1, error %u\n", udata->u_error); +#endif + return -1; + } + bcopy(&ino->c_node, &buf[inodeoffset(ino->c_num)], + sizeof(dinode_t)); +#if 1 /* Nick */ + /* write immediately, unless dirty_mask set before call */ + if (bfree((blkbuf_t *)buf, dirty_mask ? 1 : 2) < 0) +#else + if (bfree((blkbuf_t *)buf, 2) < 0) /* write immediately ! */ +#endif + goto Err; + } + ino->c_dirty = 0; /* unmark modif flag */ +#if DEBUG >= 3 + dprintf(3, "wr_inode() returning 0, success\n", udata->u_error); +#endif + return 0; +} +#endif + +/* I_ref() increases the reference count of the given inode table entry. + */ + +#ifdef MODULE_i_ref +void +i_ref(cinode_t *ino) +{ +#if DEBUG >= 4 + dprintf(4, "i_ref(0x%x) starting\n", ino); +#endif + + magic(ino, "i_ref"); + if (++ino->c_refs >= 12 * NINODES) /* Arbitrary limit */ + _panic(Refstoinode, "too many", ino); +#if DEBUG >= 4 + dprintf(4, "i_ref() returning, refs %u\n", ino->c_refs); +#endif +} +#endif + +/* I_deref() decreases the reference count of an inode, and frees it + * from the table if there are no more references to it. If it also + * has no links, the inode itself and its blocks (if not a device) are freed. + */ + +#ifdef MODULE_i_deref +void +i_deref(cinode_t *ino) +{ +#if DEBUG >= 4 + dprintf(4, "i_deref(0x%x) starting\n", ino); +#endif + + magic(ino, "i_deref"); + if (ino->c_refs == 0) + _panic(Refstoinode, "no", ino); + if (getmode(ino) == S_IFPIPE) + ksignal(ino, 0); + /* If the inode has no links and no refs, + * it must have its blocks freed. + */ + if (--ino->c_refs == 0) { + if (ino->c_node.i_nlink == 0) { + ino->c_node.i_size = 0; + f_trunc(ino); + /* and also freeing this inode */ + ino->c_node.i_mode = 0; + i_free(ino->c_dev, ino->c_num); + } + /* If the inode was modified, we must write it back to disk. */ + if (ino->c_dirty) + wr_inode(ino); + } +#if DEBUG >= 4 + dprintf(4, "i_deref() returning, refs %u\n", ino->c_refs); +#endif +} +#endif + +/* I_free() is given a device and inode number, and frees the inode. + * It is assumed that there are no references to the inode in the + * inode table or in the filesystem. + */ + +#ifdef MODULE_i_free +void +i_free(dev_t devno, ino_t ino) +{ + register filesys_t *dev = getfs(devno); + +#if DEBUG >= 4 + dprintf(4, "i_free(%u, %u) starting\n", devno, ino); +#endif + + if (ino <= ROOTINODE || ino >= devinodes(dev)) + _panic(Badinomsg, "i_free", ino); +#if 1 /* Nick free bitmap */ +#if 0 /* remove support for the original UZI filesystem */ + if (dev->s_bitmap_inode < dev->s_bitmap_block) + { +#endif + if (xip_set(devno, ino, 0, dev->s_bitmap_inode, + dev->s_bitmap_block) != 1) + { +#if DEBUG >= 4 + dprintf(4, "i_free() returning, error\n"); +#endif + return; /* always an i/o error (or very bad !!) */ + } + + ++dev->s_tinode; +#if 0 /* remove support for the original UZI filesystem */ +#if DEBUG >= 4 + dprintf(4, "i_free() returning, success\n"); +#endif + return; /* crude way to skip inode list processing */ + } +#endif +#endif +#if 0 /* remove support for the original UZI filesystem */ + ++dev->s_tinode; /* total free inodes */ + /* account to free inodes list if it's possible */ + if (dev->s_ninode < FSFREEINODES) + dev->s_inode[dev->s_ninode++] = ino; +#endif +#if DEBUG >= 4 + dprintf(4, "i_free() returning, success\n"); +#endif +} +#endif + +/* _namei() is given a string containing a path name, + * and returns an inode table pointer. + * If it returns NULL, the file did not exist. + * If the parent existed, 'parent' will be filled in with the + * parents cinode_t *. Otherwise, 'parent' will be set to NULL. + */ + +#ifdef MODULE__namei +cinode_t * +_namei(unsigned char *name, unsigned char **rest, + cinode_t *strt, cinode_t **parent) +{ + cinode_t *temp; + register cinode_t *ninode; /* next dir */ + register cinode_t *wd; /* the directory we are currently searching. */ +#if 0 /* Nick */ + char *tb; + char *name; /* Grab a block to copy the name from user space */ + + name = tb = (char *)tmpbuf(); +#if 0 + if (ugets (uname, name, 512)) + { + brelse((blkbuf_t *)tb); + return NULLINODE; /* Source String exceeded available length */ + } +#else + ugets (uname, name, 512); /*--*--*/ +#endif +#endif + + ninode = wd = strt; + i_ref(wd); + i_ref(ninode); + for (;;) { + if (ninode != NULL) { + magic(ninode, "_namei"); + /* See if we are at a mount point */ + ninode = srch_mt(ninode); + } + while (*name == '/') /* Skip (possibly repeated) slashes */ + ++name; + if (*name == 0) /* No more components of path? */ + break; + if (ninode == NULL) { /* path not found */ + udata->u_error = ENOENT; + goto Err; + } + if (getmode(ninode) == S_IFLNK) + break; /* symlinks processed separately */ + i_deref(wd); /* drop current dir */ + wd = ninode; /* switch to next inode */ + /* this node must be directory ... */ + if (getmode(wd) != S_IFDIR) { + udata->u_error = ENOTDIR; + goto Err; + } + /* ... enabled for searching */ + if ((getperm(wd) & S_IOEXEC) == 0) { + udata->u_error = EPERM; + goto Err; + } + /* See if we are going up through a mount point */ + if (wd->c_num == ROOTINODE && + wd->c_dev != root_dev && + name[1] == '.') { + /* switch to other fsys */ + temp = findfs(wd->c_dev)->s_mntpt; + i_deref(wd); + i_ref(wd = temp); + } + /* search for next part of path */ + if ((ninode = srch_dir(wd, (char *)name)) == (cinode_t *)-1) + goto Err; + while (*name != 0 && *name != '/') + ++name; /* skip this part */ + } + *parent = wd; /* store ref to parent */ +#if 0 /* Nick */ + *rest = uname + (name - tb); + brelse((blkbuf_t *)tb); +#else + *rest = name; +#endif + return ninode; + +Err: *parent = NULL; + i_deref(wd); +#if 0 /* Nick */ + brelse((blkbuf_t *)tb); +#endif + return NULL; +} +#endif + +/* namei() is given a string containing a path name, + * and returns an inode table pointer. + * If it returns NULL, the file did not exist. + * If the parent existed, and 'parent' is not null, 'parent' + * will be filled in with the parents cinode_t *. + * Otherwise, 'parent' will be set to NULL. + * If 'follow' is false then tail symlink is not opened + */ + +#ifdef MODULE_namei +cinode_t * +namei(char *uname, cinode_t **parent, unsigned char follow) +{ + register cinode_t *ino; + cinode_t *parent1, *strt; + unsigned char *buf = NULL, *buf1 = NULL, *rest, *s; + unsigned char cnt = 0; +#if 1 /* Nick */ + char *tb; + char *name; /* Grab a block to copy the name from user space */ + +#if 0 + if (uname == NULL) { + udata->u_error = ENOENT; + return NULL; + } +#endif + name = tb = (char *)tmpbuf(); +#if 0 + if (ugets(uname, name, 512)) + { + brelse((blkbuf_t *)tb); + return NULLINODE; /* String exceeded available length */ + } +#else + ugets(uname, name, 512); +#endif +#endif + udata->u_error = 0; +#if 0 /* Nick */ + if (name == NULL) { + udata->u_error = ENOENT; + ino = NULL; + goto Ret; + } +#endif + strt = (*name == '/') ? udata->u_ptab->p_root : udata->u_ptab->p_cwd; + while ((ino = _namei((unsigned char *)name, &rest, strt, &parent1)) != + NULL) { + if (getmode(ino) != S_IFLNK || (*rest == 0 && !follow)) { + if (parent != NULL) + *parent = parent1; + else i_deref(parent1); + goto Ret; + } + /* check symlink is readable */ + if (!(getperm(ino) & S_IOREAD)) { + udata->u_error = EPERM; +Err: i_deref(parent1); + i_deref(ino); + ino = NULL; + goto Ret; + } +#if 0 /* NICK TEMPORARY! PLEASE CHANGE THIS BACK! */ + if (!buf) if ((buf = (unsigned char *)zerobuf()) == NULL) + goto Err1; +#else + if (!buf) if ((buf = (unsigned char *)zerobuf(1)) == NULL) + goto Err1; +#endif + if (*rest) { /* need the temporary buffer */ +#if 0 /* NICK TEMPORARY! PLEASE CHANGE THIS BACK! */ + if (!buf1) buf1 = (unsigned char *)zerobuf(); +#else + if (!buf1) buf1 = (unsigned char *)zerobuf(0); +#endif + if (!buf1) { +Err1: udata->u_error = ENOMEM; + goto Ret; + } + s = buf1; + while ('\0' != (*s++ = *rest++)) + ; + rest = buf1; + } + else rest = (unsigned char *)""; + /* ! It's important - really "" ! */ + /* readin symlink contents */ + udata->u_count = BUFSIZE; + udata->u_base = (unsigned char *)buf; + udata->u_offset = 0; +#if 1 /* Nick */ + udata->u_sysio = 1; +#endif + readi(ino); + /* check for buffer size */ + s = rest; + while (*s++ != '\0') + ; + if (udata->u_count + (s - rest) >= BUFSIZE-1) { + udata->u_error = ENOMEM; + goto Err; + } + /* create substituted name */ + s = buf+udata->u_count; + if (*rest) + *s++ = '/'; + while ((*s++ = *rest++) != '\0') + ; + name = (char *)buf; + strt = (*name == '/') ? root_ino : parent1; + if (++cnt == 13) { /* recursion too deep */ + udata->u_error = ELOOP; + goto Err; + } + i_deref(parent1); + i_deref(ino); + } + /* name not found (ino == NULL) */ + if (parent != NULL) + *parent = parent1; /* store ref to parent */ + else { /* we want existent file! */ + if (parent1) + i_deref(parent1); /* deref node */ + if (udata->u_error == 0) + udata->u_error = ENOENT; + } +Ret: if (buf) if (brelse((blkbuf_t *)buf) < 0) ino=NULL; + if (buf1) if (brelse((blkbuf_t *)buf1) < 0) ino=NULL; +#if 1 /* Nick */ + brelse((blkbuf_t *)tb); +#endif + return ino; +} +#endif + +/* Srch_dir() is given a inode pointer of an open directory and a string + * containing a filename, and searches the directory for the file. + * If it exists, it opens it and returns the inode pointer, otherwise NULL. + * If an error occur, Srch_dir() returns -1. + * + * This depends on the fact that bread will return unallocated blocks as + * zero-filled, and a partially allocated block will be padded with zeroes. + */ + +#ifdef MODULE_srch_dir +cinode_t * +srch_dir(cinode_t *wd, char *name) +{ + ino_t ino; + blkno_t db; + unsigned int cb, ce, nblocks; + register direct_t *bp, *buf; + + nblocks = (unsigned int)(wd->c_node.i_size >> BUFSIZELOG); /* # of full blocks */ + if ((unsigned int)wd->c_node.i_size & (BUFSIZE-1)) + ++nblocks; /* and part of last block */ + cb = 0; + while (cb != nblocks) { + /* map file block to fs */ + if ((db = bmap(wd, cb, 1)) == NULLBLK) + break; + if ((buf = bp = (direct_t *)bread(wd->c_dev, db, 0)) == NULL) +Err1: return (cinode_t *)-1; + ce = 0; + while (ce < DIRECTPERBLOCK) { + if (namecomp((unsigned char *)name, bp->d_name)) { + /* file name found */ + ino = bp->d_ino; /* inode of file */ + if (brelse((blkbuf_t *)buf) < 0) goto Err1; + /* open the found file */ + return i_open(wd->c_dev, ino); + } + ++ce; + ++bp; + } + if (brelse((blkbuf_t *)buf) < 0) /* need next block */ + goto Err1; + ++cb; + } + /* file not found in this directory */ + return NULL; +} +#endif + +/* Srch_mt() sees if the given inode is a mount point. + * If so it dereferences it, and references and returns a pointer + * to the root of the mounted filesystem. + */ + +#ifdef MODULE_srch_mt +cinode_t * +srch_mt(cinode_t *ino) +{ + register filesys_t **fspp, *fsp; + + for (fspp = Fstab; fspp < Fstab + NMOUNTS; fspp++) + { + fsp = *fspp; + if (fsp->s_mounted && fsp->s_mntpt == ino) + { + i_deref(ino); + ino = i_open(fsp->s_dev, ROOTINODE); + /* return replaced inode */ + break; + } + } + return ino; +} +#endif + +/* new initialisation routine by Nick as Inotab is now a sparse array */ +#ifdef MODULE_i_init +void +i_init(void) + { +#if 0 + cinode_t **ipp, *ip; + + /* original UZI: */ + /* memset(Inotab, 0, NINODES * sizeof(cinode_t *)); */ + + for (ipp = Inotab; ipp < Inotab + NINODES; ipp++) + { + ip = calloc(sizeof(cinode_t), 1); + if (ip == NULL) + { + _panic(_("i_init()")); + } + *ipp = ip; + } +#endif + } + +/* FILESYS garbage collection - called by storage allocator when free space + * runs low. Non-referenced (cached) inodes are discarded. They will never + * be dirty, because they will have been synced when released earlier. + */ +void +filesys_garbage(red) +int red; +{ + register cinode_t **inopp, *ino; + + for (inopp = Inotab; inopp < Inotab + NINODES; inopp++) + { + ino = *inopp; + if (ino && ino->c_refs == 0) + { + free(ino); + } + } +} +#endif + +/* I_open() is given an inode number and a device number, and makes an entry + * in the inode table for them, or increases it reference count if it is + * already there. + * + * An inode == NULLINO means a newly allocated inode. + */ + +#ifdef MODULE_i_open +cinode_t * +i_open(dev_t devno, ino_t ino) +{ + filesys_t *dev; + dinode_t *buf; + cinode_t *ip, *nindex; + unsigned char i, newn, mode0; +#if 1 /* Nick free bitmap */ + unsigned char refs0; +#endif + static cinode_t **nextipp = Inotab; /* rover ptr */ + +#if DEBUG >= 3 + dprintf(3, "i_open(%u, %u) starting\n", devno, ino); +#endif + + if ((dev = findfs(devno)) == NULL) + _panic(Baddevmsg, "i_open", devno); + newn = 0; + if (ino == NULLINO) { /* Wanted a new one */ + if ((ino = i_alloc(devno)) == NULLINO) + goto Err; /* errno is already set by i_alloc */ + ++newn; + } +#if 0 /* handy for troubleshooting fmount() / bdread() problems */ + dprintf(2, "ino = %u\n", ino); + dprintf(2, "dev -> 0x%x\n", dev); + dprintf(2, "devinodes(dev) = %u\n", devinodes(dev)); +#endif + if (ino < ROOTINODE || ino >= devinodes(dev)) { + _dprintf(0, Badinomsg, "i_open", ino); + goto Err; + } + /* search inode table for available entry */ + nindex = NULL; + i = 0; +/* dprintf(2, "{ "); */ + for (i = 0; i < NINODES; i++) + { + ip = *nextipp++; + if (nextipp >= Inotab + NINODES) + { + nextipp = Inotab; +/* dprintf(2, "%u ", ip - Inotab); */ + } + if (ip) + { + if (ip->c_refs == 0) + { + nindex = ip; /* candidate for discarding */ + } + if (ip->c_dev == devno && ip->c_num == ino) + { + nindex = ip; +/* dprintf(2, "} "); */ + goto found; /* really found */ + } + } + } +/* dprintf(2, "} "); */ + /* Not already in table - take last candidate */ + if (nindex == NULL) + { /* No unrefed buffers in inode table */ + for (i = 0; i < NINODES; i++) + { + if (Inotab[i] == NULL) + { + nindex = calloc(sizeof(cinode_t), 1); + Inotab[i] = nindex; /* may be NULL! */ + break; + } + } + } + if (nindex == NULL) + { /* No unrefed slots in inode table, or no memory */ + udata->u_error = ENFILE; + goto Err; + } +/* dprintf(2, "reading(%u, %u) ", inodeblock(dev, ino), inodeoffset(ino)); */ + /* discard oldest? inode from table and read the inode from disk */ + buf = (dinode_t *)bread(devno, inodeblock(dev, ino), 0); + if (buf == NULL) goto Err; + bcopy(&buf[inodeoffset(ino)], &nindex->c_node, sizeof(dinode_t)); + if (brelse((blkbuf_t *)buf) < 0) goto Err; + /* fill-in in-core parts of inode */ + nindex->c_magic = CMAGIC; + nindex->c_dev = devno; + nindex->c_num = ino; + nindex->c_ro = dev->s_ronly; +found: +/* dprintf(2, "found(%u, 0%o) ", nindex->c_node.i_nlink, nindex->c_node.i_mode); */ + mode0 = (getmode(nindex) == 0); +#if 1 /* Nick free bitmap */ + /* need to check for the special case of working on an erased file */ + refs0 = (nindex->c_refs == 0) && (nindex->c_node.i_nlink == 0); +#endif + if (newn) { /* RO fs can't do i_alloc()! */ + /* newly allocated disk inode must be clean */ +#if 1 /* Nick free bitmap */ + if (!refs0 || !mode0) +#else + if (nindex->c_node.i_nlink || !mode0) +#endif + goto badino; + } /* and vice versa */ +#if 1 /* Nick free bitmap */ + else if (refs0 || mode0) +#else + else if (nindex->c_node.i_nlink == 0 || mode0) +#endif + goto badino; + i_ref(nindex); /* yet one ref */ +#if DEBUG >= 3 + dprintf(3, "i_open() returning 0x%x, success\n", nindex); +#endif + return nindex; + +badino: _dprintf(0, Badinomsg, "i_open (disk)", ino); /* nindex - Inotab); */ +Err: +#if DEBUG >= 3 + dprintf(3, "i_open() returning NULL, error %u\n", udata->u_error); +#endif + return NULL; +} +#endif + +/* Ch_link() modifies or makes a new entry in the directory for the name + * and inode pointer given. The directory is searched for oldname. + * When found, it is changed to newname, and it inode # is that of *nindex. + * + * An empty oldname ("") matches a unused slot. + * A nindex NULL means an inode #0. + * + * A return status of 0 means there was no space left in the filesystem, + * or a non-empty oldname was not found, or the user did not have write + * permission. + */ + +#ifdef MODULE_ch_link +int +ch_link(cinode_t *wd, char *oldname, char *newname, cinode_t *nindex) +{ + direct_t curentry; + int i; + +#if DEBUG >= 3 + dprintf(3, "ch_link(0x%x, \"%s\", \"%s\", 0x%x) starting\n", + wd, oldname, newname, nindex); +#endif + + /* Need the write permissions */ + if ((getperm(wd) & S_IOWRITE) == 0) { + udata->u_error = EPERM; + goto Err; + } + /* Search the directory for the desired slot */ + udata->u_offset = 0; /* from beginning */ + for (;;) { + udata->u_base = (unsigned char *)&curentry; + udata->u_count = sizeof(curentry); +#if 1 /* Nick */ + udata->u_sysio = 1; +#endif + readi(wd); + /* Read until EOF or name is found */ + /* readi() advances udata->u_offset */ + if (udata->u_count == 0 || + namecomp((unsigned char *)oldname, curentry.d_name)) + break; + } + if (udata->u_count == 0 && *oldname) +#if 1 /* Nick's addition due to a newfile() path which didn't set u_error */ + { + udata->u_error = ENOENT; + goto Err; /* Rename and old entry not found */ + } +#else + goto Err; /* Rename and old entry not found */ +#endif + oldname = (char *)curentry.d_name; + i = sizeof(curentry.d_name); + while (--i >= 0) { + if ('\0' != (*oldname++ = *newname)) + ++newname; + } + curentry.d_ino = nindex ? nindex->c_num : 0; + /* If an existing slot is being used, + * we must back up the file offset + */ + if (udata->u_count > 0) + udata->u_offset -= udata->u_count; + udata->u_base = (unsigned char *)&curentry; + udata->u_count = sizeof(curentry); + udata->u_error = 0; +#if 1 /* Nick */ + udata->u_sysio = 1; +#endif + writei(wd); /* write back updated directory */ + if (udata->u_error) + { +Err: +#if DEBUG >= 3 + dprintf(3, "ch_link() returning 0, error %u\n", udata->u_error); +#endif + return 0; + } + /* Update directory length to next block - simple way to extend dir */ + if ((unsigned int)wd->c_node.i_size & (BUFSIZE-1)) { + wd->c_node.i_size &= ~(BUFSIZE-1); + wd->c_node.i_size += BUFSIZE; + } + setftim(wd, A_TIME | M_TIME | C_TIME); /* And sets c_dirty */ +#if DEBUG >= 3 + dprintf(3, "ch_link() returning 1, success\n"); +#endif + return 1; +} +#endif + +/* Filename is given a path name in user space, and copies + * the final component of it to name (in system space). + */ + + +#ifdef MODULE_filename +void +filename(char *upath, char *name) +{ + char *buf; + register char *ptr; +/* Nick char *tmpbuf(); */ +/* Nick int ugets(); */ + + buf = (char *)tmpbuf(); + if (ugets(upath, buf, 512)) + { + brelse((blkbuf_t *)buf); + *name = '\0'; + return; /* An access violation reading the name */ + } + ptr = buf; + while (*ptr) + ++ptr; + /* Special case for "...name.../" */ + while (*ptr != '/' && ptr-- > buf) + ; + ptr++; + bcopy(ptr, name, DIRNAMELEN); + brelse((blkbuf_t *)buf); +} +#endif + +/* Namecomp() compares two strings to see if they are the same file name. + * It stops at DIRNAMELEN chars or a null or a slash. + * It returns 0 for difference. + */ + +#ifdef MODULE_namecomp +int +namecomp(unsigned char *n1, unsigned char *n2) +{ + unsigned char n = DIRNAMELEN; + +#if DEBUG >= 5 + dprintf(5, "namecomp(\"%s\", \"%s\") starting\n", n1, n2); +#endif + + while (*n1 && *n1 != '/') { + if (*n1++ != *n2++) + goto NotEq; + if (--n == 0) + { +#if DEBUG >= 5 + dprintf(5, "namecomp() returning -1, error\n"); +#endif + return (-1); /* first name too long - ignore this */ + } + } + if (*n2 == '\0' || *n2 == '/') + { +#if DEBUG >= 5 + dprintf(5, "namecomp() returning -1, match\n"); +#endif + return 1; /* names matched */ + } +NotEq: +#if DEBUG >= 5 + dprintf(5, "namecomp() returning 0, no match\n"); +#endif + return 0; +} +#endif + +/* Newfile() is given a pointer to a directory and a name, and + * creates an entry in the directory for the name, dereferences + * the parent, and returns a pointer to the new inode. + * + * It allocates an inode number, and creates a new entry in the inode + * table for the new file, and initializes the inode table entry for + * the new file. The new file will have one reference, and 0 links to it. + * + * Better make sure there isn't already an entry with the same name. + */ + +#ifdef MODULE_newfile +cinode_t * +newfile(cinode_t *pino, char *name) +{ + register cinode_t *nindex; + +#if DEBUG >= 3 + dprintf(3, "newfile(0x%x, \"%s\") starting\n", pino, name); +#endif + + if ((getperm(pino) & S_IOWRITE) == 0) { + udata->u_error = EPERM; +#if DEBUG >= 3 + dprintf(3, "newfile() returning NULL, error %u\n", udata->u_error); +#endif + return 0; + } + if ((nindex = i_open(pino->c_dev, NULLINO)) == NULL) + { +#if DEBUG >= 3 + dprintf(3, "newfile() returning NULL, error %u\n", udata->u_error); +#endif + goto Ret; /* can't create new inode */ + } + /* fill-in new inode */ + bzero(&nindex->c_node,sizeof(dinode_t)); + nindex->c_node.i_mode = S_IFREG; /* For the time being */ + nindex->c_node.i_nlink = 1; + nindex->c_node.i_uid = udata->u_ptab->p_euid; /* File owner */ + nindex->c_node.i_gid = udata->u_ptab->p_egid; + nindex->c_dirty = 1; + wr_inode(nindex); +#if 1 /* Nick now done by caller */ + if (ch_link(pino, "", name, nindex) == 0) { +#else + if (ch_link(pino, "", filename(name), nindex) == 0) { +#endif + i_deref(nindex); /* can't enter new file to directory */ + nindex = NULL; +#if DEBUG >= 3 + dprintf(3, "newfile() returning NULL, error %u\n", udata->u_error); +#endif + } +#if DEBUG >= 3 + else + { + dprintf(3, "newfile() returning 0x%x, success\n", nindex); + } +#endif +Ret: i_deref(pino); + return nindex; +} +#endif + +/* filesys_doclose() given the file descriptor and close them */ + +#ifdef MODULE_filesys_doclose +/* formerly unsigned char fd; */ +int +filesys_doclose(unsigned int fd) +{ + register cinode_t *ino = getinode(fd); + unsigned char oftindex; + +#if DEBUG >= 3 + dprintf(3, "filesys_doclose(%u) starting\n", (unsigned int)fd); +#endif + + if (ino == NULL) + { +#if DEBUG >= 3 + dprintf(3, "filesys_doclose() returning -1, error\n"); +#endif + return -1; + } + oftindex = udata->u_ptab->p_files[fd]; + if (isdevice(ino) && ino->c_refs == 1 && Oftab[oftindex]->o_refs == 1) + { + d_close(DEVNUM(ino)); + } + udata->u_ptab->p_files[fd] = (unsigned char)-1; + oft_deref(oftindex); +#if DEBUG >= 3 + dprintf(3, "filesys_doclose() returning 0, success\n"); +#endif + return 0; +} +#endif + +/* I_alloc() finds an unused inode number, and returns it, + * or NULLINO if there are no more inodes available. + */ + +#ifdef MODULE_i_alloc +ino_t +i_alloc(dev_t devno) +{ + ino_t ino; + blkno_t blk; + register unsigned char j, k; + dinode_t *buf, *bp; + filesys_t *dev = getfs(devno); + +#if DEBUG >= 4 + dprintf(4, "i_alloc(%u) starting\n", devno); +#endif + + if (dev->s_ronly) { + udata->u_error = EROFS; + goto Err1; + } +#if 1 /* Nick free bitmap */ +#if 0 /* remove support for the original UZI filesystem */ + if (dev->s_bitmap_inode < dev->s_bitmap_block) + { +#endif + ino = xip_find(devno, 0, 0, 1, dev->s_bitmap_inode, + dev->s_bitmap_block); + if (ino <= ROOTINODE || ino >= devinodes(dev)) + { + goto Err; /* should distinguish disk i/o errors !! */ + } + + if (dev->s_tinode == 0) + { + goto Corrupt; /* fs is corrupt, not just full! */ + } + +#if 0 /* remove support for the original UZI filesystem */ + goto found_inode; /* crude way to skip inode list processing */ + } +#endif +#endif +#if 0 /* remove support for the original UZI filesystem */ +Again: if (dev->s_ninode) { /* there are available inodes in list */ + if (dev->s_tinode == 0) + goto Corrupt; /* fs is corrupt, not just full! */ + /* get free inode from list */ + ino = dev->s_inode[--dev->s_ninode]; +#if 1 /* Nick free bitmap */ +found_inode: +#endif +#endif + if (ino <= ROOTINODE || ino >= devinodes(dev)) + goto Corrupt; + --dev->s_tinode; +#if DEBUG >= 4 + dprintf(4, "i_alloc() returning %u, success\n", ino); +#endif + return ino; +#if 0 /* remove support for the original UZI filesystem */ + } + /* There are no avilable inodes in list - we must scan the + * disk inodes, and fill up the table + */ + sys_sync(); /* Make on-disk inodes consistent */ + k = 0; + blk = 0; +/* dprintf(2, "[ "); */ + while (blk != dev->s_isize) { + if ((bp = buf = (dinode_t *)bread(devno, blk+dev->s_reserv, 0)) == NULL) + goto Err; + j = 0; + while (j != DINODESPERBLOCK) { + if (bp->i_mode == 0 && bp->i_nlink == 0) +/* { */ +/* dprintf(2, "%d ", blockinodes(blk) + j); */ + dev->s_inode[k++] = blockinodes(blk) + j; +/* } */ + if (k == FSFREEINODES) { + if (brelse((blkbuf_t *)buf) < 0) goto Err; + goto Done; + } + ++bp; + ++j; + } + ++blk; + if (brelse((blkbuf_t *)buf) < 0) goto Err; + if (k >= DINODESPERBLOCK-2) /* ??? */ + break; + } +Done: +/* dprintf(2, "] "); */ + if (k == 0) { /* no free inodes on disk */ + if (dev->s_tinode) + goto Corrupt; + goto Err; /* not a fatal error, the table is full */ + } + dev->s_ninode = k; + goto Again; +#endif + +Corrupt: + _dprintf(0, Badfsmsg, "i_alloc", devno); + dev->s_mounted = ~SMOUNTED; /* mark device as bad */ +Err: udata->u_error = ENOSPC; +Err1: +#if DEBUG >= 4 + dprintf(4, "i_alloc() returning NULLINO, error %u\n", udata->u_error); +#endif + return NULLINO; +} +#endif + +/* Blk_alloc() is given a device number, and allocates an unused block + * from it. A returned block number of zero means no more blocks. + * new: if the caller passes dirty = 1, don't write back immediately + * new: if the caller passes dirty = 2, write back the zeros immediately + * (the latter mode is used when allocating new indirect/dindirect blocks) + */ + +#ifdef MODULE_blk_alloc +blkno_t +blk_alloc(dev_t devno, unsigned char dirty) /* Nick dirty */ +{ +#if 1 /* Nick, don't use nf variable unnecessarily */ + char *buf; + blkno_t newno; +#else + count_t nf; + blkno_t *buf, newno; +#endif + register filesys_t *dev = getfs(devno); +/* int i; */ + +#if DEBUG >= 4 + dprintf(4, "blk_alloc(%u, %u) starting\n", devno, (unsigned)dirty); +#endif + + if (dev->s_ronly) { + udata->u_error = EROFS; + goto Err1; + } +#if 1 /* Nick free bitmap */ +#if 0 /* remove support for the original UZI filesystem */ + if (dev->s_bitmap_block < dev->s_bitmap_immov) + { +#endif + newno = xip_find(devno, 0, 0, 1, dev->s_bitmap_block, + dev->s_bitmap_immov); + if (newno < (dev->s_reserv + dev->s_isize) || + newno >= dev->s_fsize) + { + goto Err; /* should distinguish disk i/o errors !! */ + } + +#if 0 /* remove support for the original UZI filesystem */ + goto found_block; /* crude way to skip free list processing */ + } +#endif +#endif +#if 0 /* remove support for the original UZI filesystem */ +#if 1 /* Nick, don't use nf variable unnecessarily */ + if (dev->s_nfree <= 0 || dev->s_nfree > FSFREEBLOCKS) + goto Corrupt; +#else + nf = dev->s_nfree; +/* dprintf(2, "nf = %u\n", nf); */ + if (nf <= 0 || nf > FSFREEBLOCKS) +/* { */ +/* dprintf(2, "nf out of range\n"); */ + goto Corrupt; +/* } */ +#endif + if (0 == (newno = dev->s_free[--dev->s_nfree])) { + if (dev->s_tfree != 0) +/* { */ +/* dprintf(2, "dev->s_tfree != 0\n"); */ + goto Corrupt; +/* } */ + ++dev->s_nfree; + goto Err; + } + /* See if we must refill the s_free array */ + if (dev->s_nfree == 0) { + if ((buf = bread(devno, newno, 0)) == NULL) + goto Err; +/* dprintf(2, "buf[0] = %u\n", ((blkno_t *)buf)[0]); */ + dev->s_nfree = ((blkno_t *)buf)[0]; + bcopy(((blkno_t *)buf)+1,dev->s_free,sizeof(dev->s_free)); +/* dprintf(2, "< "); */ +/* for (i = 0; i < dev->s_nfree; i++) */ +/* { */ +/* dprintf(2, "%u ", dev->s_free[i]); */ +/* } */ +/* dprintf(2, "> "); */ + if (brelse((blkbuf_t *)buf) < 0) + goto Err; + } +#if 1 /* Nick free bitmap */ +found_block: +#endif +#endif + validblk(devno, newno); + if (dev->s_tfree == 0) +/* { */ +/* dprintf(2, "dev->s_tfree == 0\n"); */ + goto Corrupt; +/* } */ + --dev->s_tfree; + /* Zero out the new block */ + if ((buf = bread(devno, newno, 2)) == NULL) /* 2 for zeroing */ + goto Err; +#if 1 + if (bfree((blkbuf_t *)buf, dirty) < 0) /* write back */ +#else + if (bawrite((blkbuf_t *)buf) < 0) /* write back */ +#endif + goto Err; +#if DEBUG >= 4 + dprintf(4, "blk_alloc() returning %u, success\n", newno); +#endif + return newno; + +Corrupt: + _dprintf(0, Badfsmsg, "blk_alloc", devno); + dev->s_mounted = ~SMOUNTED; +Err: udata->u_error = ENOSPC; +Err1: +#if DEBUG >= 3 + dprintf(3, "blk_alloc() returning 0, error %u\n", udata->u_error); +#endif + return 0; +} +#endif + +/* Blk_free() is given a device number and a block number, + * and frees the block. + */ + +#ifdef MODULE_blk_free +void +blk_free(dev_t devno, blkno_t blk) +{ +#if 1 /* Nick free bitmap */ + blkno_t j; + char *buf, *p; +#else + blkno_t *buf; +#endif + register filesys_t *dev = getfs(devno); + +#if DEBUG >= 4 + dprintf(4, "blk_free(%u, %u) starting\n", devno, blk); +#endif + + if (dev->s_ronly || blk == 0) + { +End: +#if DEBUG >= 4 + dprintf(4, "blk_free() returning, error\n"); +#endif + return; + } + validblk(devno, blk); +#if 1 /* Nick free bitmap */ +#if 0 /* remove support for the original UZI filesystem */ + if (dev->s_bitmap_block < dev->s_bitmap_immov) + { +#endif + if (xip_set(devno, blk, 0, dev->s_bitmap_block, + dev->s_bitmap_immov) != 1) + { + goto End; /* always an i/o error (or very bad !!) */ + } + +#if 1 /* temporary only... also unreserve the block if it was reserved */ + if (xip_set(devno, blk, 0, dev->s_bitmap_immov, + dev->s_bitmap_final) == -1) + { + goto End; /* always an i/o error (or very bad !!) */ + } +#endif + + ++dev->s_tfree; +#if 0 /* remove support for the original UZI filesystem */ +#if DEBUG >= 4 + dprintf(4, "blk_free() returning, success\n"); +#endif + return; /* crude way to skip free list processing */ + } +#endif +#endif +#if 0 /* remove support for the original UZI filesystem */ + /* flushing overflowed free blocks list */ + if (dev->s_nfree == FSFREEBLOCKS) { + buf = bread(devno, blk, 1); + if (buf == NULL) + goto End; + ((blkno_t *)buf)[0] = dev->s_nfree; + bcopy(dev->s_free, ((blkno_t *)buf)+1, sizeof(dev->s_free)); + if (bawrite((blkbuf_t *)buf) < 0) + goto End; + dev->s_nfree = 0; + } + ++dev->s_tfree; + dev->s_free[dev->s_nfree++] = blk; +#endif +#if DEBUG >= 4 + dprintf(4, "blk_free() returning, success\n"); +#endif +} +#endif + +/* Oft_alloc() allocate entries in the open file table. + */ + +#ifdef MODULE_oft_alloc +unsigned char +oft_alloc(void) +{ + register oft_t *op; + register unsigned char j; + +#if DEBUG >= 4 + dprintf(4, "oft_alloc() starting\n"); +#endif + + for (j = 0; j < NOPENFILES; j++) + { + op = Oftab[j]; + if (op && op->o_refs == 0) + { + bzero(op, sizeof(oft_t)); /* zero out all fields */ + op->o_refs++; +#if DEBUG >= 4 + dprintf(4, "oft_alloc() returning %u, success (reuse)\n", (unsigned int)j); +#endif + return j; + } + } + + for (j = 0; j < NOPENFILES; j++) + { + op = Oftab[j]; + if (op == NULL) + { + op = callocw(sizeof(oft_t), 1); + op->o_refs++; + Oftab[j] = op; +#if DEBUG >= 4 + dprintf(4, "oft_alloc() returning %u, success (new)\n", (unsigned int)j); +#endif + return j; + } + } + + udata->u_error = ENFILE; +#if DEBUG >= 4 + dprintf(4, "oft_alloc() returning -1, error %u\n", ENFILE); +#endif + return -1; +} +#endif + +/* Oft_deref() dereference (and possibly free attached inode) + * entries in the open file table. + */ + +#ifdef MODULE_oft_deref +void +oft_deref(unsigned char of) +{ + register oft_t *op; + +#if DEBUG >= 4 + dprintf(4, "oft_deref(%u) starting\n", (unsigned int)of); +#endif + + op = Oftab[of]; + if (--(op->o_refs) == 0 && op->o_inode) + { + i_deref(op->o_inode); +#if 1 /* Nick, as Oftab is now a sparse array */ + free(op); + Oftab[of] = NULL; +#if DEBUG >= 4 + dprintf(4, "oft_deref() returning, refs 0 (freed)\n"); + return; +#endif +#else + op->o_inode = NULL; +#endif + } +#if DEBUG >= 4 + dprintf(4, "oft_deref() returning, refs %u\n", op->o_refs); +#endif +} +#endif + +/* Uf_alloc() finds an unused slot in the user file table. + */ + +#ifdef MODULE_uf_alloc +unsigned char +uf_alloc(void) +{ + register unsigned char j, *p = udata->u_ptab->p_files; + +#if DEBUG >= 4 + dprintf(4, "uf_alloc() starting\n"); +#endif + + for (j = 0; j < NUSERFILES; j++) + { + if (freefileentry(*p)) + { +#if DEBUG >= 4 + dprintf(4, "uf_alloc() returning %u, success\n", (unsigned int)j); +#endif + return j; + } + ++p; + } + + udata->u_error = ENFILE; +#if DEBUG >= 4 + dprintf(4, "uf_alloc() returning -1, error %u\n", ENFILE); +#endif + return -1; +} +#endif + +/* isdevice() returns true if ino points to a device + * old: !!! assume S_IFBLK == S_IFCHR|any + * new: checks for S_IFBLK and S_IFCHR separately + */ + +#ifdef MODULE_isdevice +unsigned char +isdevice(cinode_t *ino) +{ +#if 1 /* Nick, to avoid conflict with S_IFALIGN and other new filetypes */ + return S_ISDEV(ino->c_node.i_mode); +#else + return (ino->c_node.i_mode & S_IFCHR) != 0; +#endif +} +#endif + +/* Freeblk() - free (possible recursive for (double)inderect) block + */ + +#ifdef MODULE_freeblk +void +freeblk(dev_t dev, blkno_t blk, unsigned char level) +{ +#if DEBUG >= 3 + dprintf(3, "freeblk(%u, %u, %u) starting\n", dev, blk, (unsigned int)level); +#endif + + if (blk != 0) { + if (level != 0) { /* INDERECT/DINDERECT block */ + register blkno_t *buf = (blkno_t *)bread(dev, blk, 0); + unsigned int j; + + --level; + if ((buf) != NULL) { + j = BUFSIZE/sizeof(blkno_t); + while (j != 0) + freeblk(dev, buf[--j], level); + brelse((blkbuf_t *)buf); + } + } + blk_free(dev, blk); +#if DEBUG >= 3 + dprintf(3, "freeblk() returning, success\n"); +#endif + } +#if DEBUG >= 3 + else + { + dprintf(3, "freeblk() returning, error\n"); + } +#endif +} +#endif + +/* F_trunc() frees all the blocks associated with the file, + * if it is a disk file. + * need enhancement for truncating to given size + */ + +#ifdef MODULE_f_trunc +void +f_trunc(cinode_t *ino) +{ + dinode_t *ip = &ino->c_node; + blkno_t *blk = ip->i_addr; + register unsigned char j; + +#if DEBUG >= 3 + dprintf(3, "f_trunc(0x%x) starting\n", ino); +#endif + + /* First deallocate the double indirect blocks */ + freeblk(ino->c_dev, blk[TOTALREFBLOCKS-1], 2); + /* Also deallocate the indirect blocks */ + freeblk(ino->c_dev, blk[TOTALREFBLOCKS-1-DINDIRECTBLOCKS], 1); + /* Finally, free the direct blocks */ + j = 0; + while (j != DIRECTBLOCKS) { + freeblk(ino->c_dev, *blk++, 0); + ++j; + } + bzero(ip->i_addr, sizeof(blkno_t)*TOTALREFBLOCKS); + ino->c_dirty = 1; + ip->i_size = 0; +#if DEBUG >= 3 + dprintf(3, "f_trunc() returning\n"); +#endif +} +#endif + +/* Bmap() defines the structure of file system storage by returning the + * physical block number on a device given the inode and the logical + * block number in a file. + * + * The block is zeroed if created. + */ + +#ifdef MODULE_bmap +blkno_t +bmap(cinode_t *ip, blkno_t bn, unsigned char rdflg) +{ + dev_t dev; + register unsigned int i, j, sh; + register blkno_t *bp, nb; + +#if DEBUG >= 3 + dprintf(3, "bmap(0x%x, %u, %u) starting\n", ip, bn, (unsigned int)rdflg); +/* dprintf(2, "xx %u %u\n", Inotab[38]->c_node.i_addr[3], udata->u_page); */ +#endif + + if (isdevice(ip)) /* block devices */ + { +#if DEBUG >= 3 + dprintf(3, "bmap() returning %u, direct\n", bn); +#endif + return bn; /* map directly */ + } + dev = ip->c_dev; + /* blocks 0..DIRECTBLOCKS-1 are direct blocks */ + if (bn < DIRECTBLOCKS) { + bp = &ip->c_node.i_addr[bn]; + if (0 == (nb = *bp)) { + /* block not allocated yet */ + if (rdflg || (nb = blk_alloc(dev, 1)) == 0) /* write back later */ + goto Err; + *bp = nb; + ip->c_dirty = 1; + } + goto Ok; + } + /* addresses DIRECTBLOCKS and DIRECTBLOCKS+1 have single and double + * indirect blocks. + * The first step is to determine how many levels of indirection. + */ + bn -= DIRECTBLOCKS; + sh = 0; + j = INDIRECTBLOCKS+DINDIRECTBLOCKS; + if (bn >= BUFSIZE/sizeof(blkno_t)) { /* double indirect */ + sh = 8; /* shift by 8 */ + bn -= BUFSIZE/sizeof(blkno_t); + j -= INDIRECTBLOCKS; + } + /* fetch the address from the inode. + * Create the first indirect block if needed. + */ + bp = &ip->c_node.i_addr[TOTALREFBLOCKS - j]; + if ((nb = *bp) == 0) { + if (rdflg || 0 == (nb = blk_alloc(dev, 2))) /* write back now */ + goto Err; + *bp = nb; + ip->c_dirty = 1; + } + /* fetch through the indirect blocks */ + while (j <= INDIRECTBLOCKS+DINDIRECTBLOCKS) { + if ((bp = (blkno_t *)bread(dev, nb, 0)) == NULL) + { +Err: +#if DEBUG >= 3 + dprintf(3, "bmap() returning NULLBLK, error %u\n", udata->u_error); +#endif + return NULLBLK; + } + i = (bn >> sh) & (BUFSIZE/sizeof(blkno_t)-1); + if ((nb = bp[i]) != 0) { + if (brelse((blkbuf_t *)bp) < 0) + goto Err; + } else { + if (rdflg || 0 == (nb = blk_alloc(dev, +#if 1 + (j == INDIRECTBLOCKS+DINDIRECTBLOCKS) ? + 1 : 2 /* if indirect, write back now */ +#else + 1 /* write back later */ +#endif + ))) { + brelse((blkbuf_t *)bp); + goto Err; + } + bp[i] = nb; + if (bawrite((blkbuf_t *)bp) < 0) + goto Err; + } + sh -= 8; + ++j; + } +Ok: +#if DEBUG >= 3 + dprintf(3, "bmap() returning %u, success\n", nb); +#endif + return nb; +} +#endif + +/* Validblk() panics if the given block number is not a valid data block + * for the given device. + */ + +#ifdef MODULE_validblk +void +validblk(dev_t devno, blkno_t num) +{ + register filesys_t *dev = findfs(devno); + + if (dev == NULL) + _panic(_("validblk: dev 0x%x not mounted"), dev); + if (num < dev->s_isize + dev->s_reserv || num >= dev->s_fsize) + _panic(_("validblk: invalid block %u"), num); +} +#endif + +/* Getinode() returns the inode pointer associated with a user's + * file descriptor, checking for valid data structures + */ + +#ifdef MODULE_getinode +/* formerly unsigned char uindex; */ +cinode_t * +getinode(unsigned int uindex) +{ + register cinode_t *inoindex; + unsigned char oftindex; + + if (uindex >= NUSERFILES) + { + goto Err; + } + oftindex = udata->u_ptab->p_files[uindex]; + if (oftindex >= NOPENFILES) + { + _panic(Gtinobadoft, oftindex, " for", uindex); + } + if (freefileentry(oftindex)) + { +Err: udata->u_error = EBADF; + return NULL; + } + inoindex = Oftab[oftindex]->o_inode; +#if 0 /* Nick */ + if (inoindex < Inotab || inoindex >= Inotab + NINODES) + { + _panic(Gtinobadoft, oftindex, ", inode", inoindex); + } +#endif + magic(inoindex, "getinode"); + return inoindex; +} +#endif + +/* Getperm() looks at the given inode and the effective user/group ids, and + * returns the effective permissions in the low-order 3 bits. + */ + +#ifdef MODULE_getperm +int +getperm(cinode_t *ino) +{ + mode_t mode = ino->c_node.i_mode; + + if (super()) + mode |= S_ISDEV(mode) ? (mode >> 3) | (mode >> 6) : 07; + else { + if (ino->c_node.i_uid == udata->u_ptab->p_euid) mode >>= 6; /* owner */ + else if (ino->c_node.i_gid == udata->u_ptab->p_egid) mode >>= 3; /* group */ + } + return (mode & 07); +} +#endif + +/* Setftim() sets the times of the given inode, according to the flags + */ + +#ifdef MODULE_setftim +void +setftim(cinode_t *ino, unsigned char flag) +{ + static time_t t; + + rdtime(&t); + if (flag & A_TIME) ino->c_node.i_atime = t; + if (flag & M_TIME) ino->c_node.i_mtime = t; + if (flag & C_TIME) ino->c_node.i_ctime = t; + ino->c_dirty = 1; +} +#endif + +/* Fmount() places the given device in the mount table with mount point ino + */ + +#ifdef MODULE_fmount +int +fmount(dev_t dev, cinode_t *ino, bool_t roflag) +{ + char *buf; + register filesys_t **fspp, *fsp; + +#if DEBUG >= 3 + dprintf(3, "fmount(%d, 0x%x, %d) starting\n", dev, ino, roflag); +#endif + +#if 0 /* NICK TEMPORARY! PLEASE CHANGE THIS BACK! */ + if (!validdev(dev)) { +#else + if (!validdev(dev,NULL)) { +#endif + udata->u_error = ENODEV; + goto Err1; /* ENODEV */ + } + if (MAJOR(dev) >= DTHRESH) + goto Err; + /* Lookup free slot in mounted fs table */ + for (fspp = Fstab; fspp < Fstab + NMOUNTS; fspp++) + { + fsp = *fspp; + if (fsp->s_mounted && fsp->s_dev == dev) + { + udata->u_error = EBUSY; + goto Err1; + } + } + for (fspp = Fstab; fspp < Fstab + NMOUNTS; fspp++) + { + fsp = *fspp; + if (fsp->s_mounted == 0) + { + goto Ok; + } + } + udata->u_error = ENOMEM; + goto Err1; + /* temporarly lock the slot */ +Ok: + fsp->s_mounted = ~SMOUNTED; + fsp->s_dev = dev; +#if 0 /* look into this... IAR aliasing problem */ + dprintf(3, "dev %d fsp 0x%x s_mounted 0x%x s_dev %d a\n", dev, fsp, fsp->s_mounted, fsp->s_dev); +#endif + if (d_open(dev) != 0) + _panic(_("fmount: can't open fs on 0x%x"), dev); +#if 0 /* look into this... IAR aliasing problem */ + dprintf(3, "dev %d fsp 0x%x s_mounted 0x%x s_dev %d b\n", dev, fsp, fsp->s_mounted, fsp->s_dev); +#endif +#if 0 /* routine to search for the starting position within a FAT/FAT32 fs */ + { + register int i; + for (i = SUPERBLOCK; i < 0x400; ++i) + { + dprintf(2, "reading sector 0x%x\n", i); + buf = bread(dev, i, 0); + if (*(int *)buf == SMOUNTED) + { + dprintf(2, "formatted at sector 0x%x\n", i - SUPERBLOCK); + panic("stop"); + } + brelse((blkbuf_t *)buf); + } + } +#endif + /* read in superblock */ + buf = (char *)bread(dev, SUPERBLOCK, 0); +#if 0 /* look into this... IAR aliasing problem */ + dprintf(3, "dev %d fsp 0x%x s_mounted 0x%x s_dev %d c\n", dev, fsp, fsp->s_mounted, fsp->s_dev); +#endif + if (buf == NULL) goto Err1; + bcopy(buf, fsp, sizeof(filesys_t)); +#if 0 /* look into this... IAR aliasing problem */ + dprintf(3, "dev %d fsp 0x%x s_mounted 0x%x s_dev %d d\n", dev, fsp, fsp->s_mounted, fsp->s_dev); +#endif + /* fill-in in-core fields */ + fsp->s_ronly = roflag; + fsp->s_dev = dev; + fsp->s_fmod = 0; +#if 0 /* look into this... IAR aliasing problem */ + dprintf(3, "dev %d fsp 0x%x s_mounted 0x%x s_dev %d e\n", dev, fsp, fsp->s_mounted, fsp->s_dev); +#endif + if (brelse((blkbuf_t *)buf) < 0) goto Err1; +#if 0 /* look into this... IAR aliasing problem */ + dprintf(3, "dev %d fsp 0x%x s_mounted 0x%x s_dev %d f\n", dev, fsp, fsp->s_mounted, fsp->s_dev); +#endif + /* See if there really is a filesystem on the device */ + if (fsp->s_mounted != SMOUNTED || fsp->s_isize >= fsp->s_fsize) { + fsp->s_mounted = 0; /* free fs table entry */ +Err: udata->u_error = ENOTBLK; +Err1: +#if DEBUG >= 3 + dprintf(3, "fmount() returning -1, error %u\n", udata->u_error); +#endif + return (-1); + } +#if 0 /* look into this... IAR aliasing problem */ + dprintf(3, "dev %d fsp 0x%x s_mounted 0x%x s_dev %d g\n", dev, fsp, fsp->s_mounted, fsp->s_dev); +#endif + if ((fsp->s_mntpt = ino) != NULL) + i_ref(ino); +/* fsp->s_reserv = 2; */ +#if DEBUG >= 3 + dprintf(3, "fmount() returning 0, success\n", udata->u_error); +#endif +#if 0 /* look into this... IAR aliasing problem */ + dprintf(3, "dev %d fsp 0x%x s_mounted 0x%x s_dev %d h\n", dev, fsp, fsp->s_mounted, fsp->s_dev); +#endif + return 0; +} +#endif + +/* magic() check inode against corruption + */ + +#ifdef MODULE_magic +void +magic(cinode_t *ino, char *who) /* Nick added who */ +{ + if (ino->c_magic != CMAGIC) + _panic(_("%s: corrupted inode 0x%x"), who, ino); /* Nick added who */ +} +#endif + +/* i_sync() syncing all inodes + */ + +#ifdef MODULE_i_sync +void +i_sync(void) +{ + register cinode_t **inopp, *ino; + + /* Write out modified inodes */ + ++dirty_mask; + for (inopp = Inotab; inopp < Inotab + NINODES; inopp++) + { + ino = *inopp; + if (ino && ino->c_magic == CMAGIC && ino->c_dirty && + ino->c_refs > 0) + { + wr_inode(ino); + } + } +#if 1 /* Nick */ + --dirty_mask; +#endif + bufsync(); +} +#endif + +/* fs_sync() syncing all superblocks + */ + +#ifdef MODULE_fs_sync +void +fs_sync(void) +{ + register filesys_t **fspp, *fsp; + register blkbuf_t *buf; + + /* Write out modified super blocks + * old: This fills the rest of the super block with zeros + * new: This preserves the remaining bytes of the superblock + */ + for (fspp = Fstab; fspp < Fstab + NMOUNTS; fspp++) + { + fsp = *fspp; + if (fsp->s_mounted && fsp->s_fmod) + { +#if 1 /* Nick free bitmap */ + /* don't zero bitmap data after the filesys_t */ + buf = (blkbuf_t *)bread(fsp->s_dev, SUPERBLOCK, 0); +#else + buf = (blkbuf_t *)bread(fsp->s_dev, SUPERBLOCK, 2); +#endif + if (buf) + { + fsp->s_fmod = 0; + bcopy(fsp, buf, sizeof(*fsp)); + if (bfree(buf, 1) < 0) + fsp->s_fmod = 1; + } + } + } + + bufsync(); +} +#endif + diff --git a/src/nos/filesys/makefile b/src/nos/filesys/makefile new file mode 100644 index 00000000..89c3988f --- /dev/null +++ b/src/nos/filesys/makefile @@ -0,0 +1,10 @@ +# makefile by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +include ../make.d/host.mk +include auto.mk +$(GENERATE) + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/filesys/maxmin.c b/src/nos/filesys/maxmin.c new file mode 100644 index 00000000..bc498a09 --- /dev/null +++ b/src/nos/filesys/maxmin.c @@ -0,0 +1,116 @@ +/* maxmin.c by Nick for NOS/UZI implementation + * + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + General utility subroutines +**********************************************************/ + +#include "uzi/maxmin.h" + +#ifndef MODULE +#define MODULE_max_int +#define MODULE_max_long +#define MODULE_max_uint +#define MODULE_max_ulong +#define MODULE_min_int +#define MODULE_min_long +#define MODULE_min_uint +#define MODULE_min_ulong +#endif + +#ifdef MODULE_max_int +int +max_int(a, b) + int a; + int b; +{ + return (a > b) ? a : b; +} +#endif + +#ifdef MODULE_max_long +long +max_long(a, b) + long a; + long b; +{ + return (a > b) ? a : b; +} +#endif + +#ifdef MODULE_max_uint +unsigned int +max_uint(a, b) + unsigned int a; + unsigned int b; +{ + return (a > b) ? a : b; +} +#endif + +#ifdef MODULE_max_ulong +unsigned long +max_ulong(a, b) + unsigned long a; + unsigned long b; +{ + return (a > b) ? a : b; +} +#endif + +#ifdef MODULE_min_int +int +min_int(a, b) + int a; + int b; +{ + return (a < b) ? a : b; +} +#endif + +#ifdef MODULE_min_long +long +min_long(a, b) + long a; + long b; +{ + return (a < b) ? a : b; +} +#endif + +#ifdef MODULE_min_uint +unsigned int +min_uint(a, b) + unsigned int a; + unsigned int b; +{ + return (a < b) ? a : b; +} +#endif + +#ifdef MODULE_min_ulong +unsigned long +min_ulong(a, b) + unsigned long a; + unsigned long b; +{ + return (a < b) ? a : b; +} +#endif + diff --git a/src/nos/filesys/process.c b/src/nos/filesys/process.c new file mode 100644 index 00000000..80ba78ff --- /dev/null +++ b/src/nos/filesys/process.c @@ -0,0 +1,230 @@ +/* process.c by Nick for NOS/UZI project + * + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + Process management routines +**********************************************************/ + +#include +#include +#include +#include +#include +#include "z80/asm.h" +#include "uzi/devio.h" +#include "uzi/rtc.h" +#include "uzi/filesys.h" +#include "uzi/xip.h" +#include "uzi/process.h" +#include +#include "po/messages.h" + +#ifndef DEBUG +#define DEBUG 0 +#endif + +#ifndef MODULE +#define MODULE_Ptab +#define MODULE_udata +#define MODULE_p_init +#define MODULE_panic +#define MODULE__panic +#define MODULE_valadr +#define MODULE_dprintf +#define MODULE_vdprintf +#define MODULE_dputter +#endif + +#ifdef MODULE_Ptab +ptab_t *Ptab[NPROGRAMS]; +#endif + +#ifdef MODULE_udata +udata_t *udata_p; +#endif + +/* new initialisation routine by Nick as Bufpool is now a sparse array */ +#ifdef MODULE_p_init +void +p_init(void) + { + ptab_t **ptp, *pp; + + /* original UZI: */ + /* memset(Ptab, 0, NPROGRAMS * sizeof(ptab_t *)); */ + + for (ptp = Ptab; ptp < Ptab + NPROGRAMS; ptp++) + { + pp = calloc(sizeof(ptab_t), 1); + if (pp == NULL) + { + _panic(_("p_init()")); + } + *ptp = pp; + } + + pp = Ptab[0]; + pp->p_status = P_RUNNING; +#if 0 + pp->p_pptr = pp; /* seems to have been NULL in the original */ + pp->p_fork_inf = udata->u_page; /* set for use in execve */ +#endif + pp->p_cprio = MAXTICKS; + pp->p_umask = 022; + + /* User's file table */ + memset(pp->p_files, -1, NUSERFILES); + } +#endif + +#ifdef MODULE_panic +int +panic(char *message, ...) +{ + va_list arguments; + + _dprintf(0, _("\npanic: ")); + va_start(arguments, message); + vdprintf(0, message, arguments); + va_end(arguments); + exit(1); + } +#endif + +#ifdef MODULE__panic +int +_panic(_char *message, ...) +{ + va_list arguments; + + _dprintf(0, _("\npanic: ")); + va_start(arguments, message); + _vdprintf(0, message, arguments); + va_end(arguments); + exit(1); + } +#endif + +#ifdef MODULE_valadr +int +valadr(void *base, size_t size) +{ +#ifdef ZILOG + void *limit; + + if (base < (void *)USER_START) + { + goto Err; + } + + limit = (void *)((size_t)base + size); + if (limit < base || limit > (void *)USER_LIMIT) + { +Err: udata->u_error = EFAULT; + return 0; + } +#endif + + return 1; + } +#endif + +#ifdef MODULE_dprintf +extern int systrace_limit; + +int +dprintf(int level, const char *format, ...) + { + va_list arguments; + int result; + + if (Stkchk) + { + chkstk(); + } + +/* abyte('!'); */ +/* ahexw((unsigned int)udata_p); */ +/* abyte(' '); */ + + if (Ptab[0]->p_debugme < level) + { + return 0; + } + + va_start(arguments, format); + result = __vprinter(dputter, NULL, (char *)format, arguments); + /* fix this nasty cast! */ + va_end(arguments); + +/* abyte('@'); */ +/* ahexw((unsigned int)udata_p); */ +/* abyte(' '); */ + return result; + } +#endif + +#ifdef MODULE_vdprintf +int +vdprintf(int level, const char *format, va_list arguments) + { + if (Stkchk) + { + chkstk(); + } + + if (Ptab[0]->p_debugme < level) + { + return 0; + } + + return __vprinter(dputter, NULL, (char *)format, arguments); + /* fix this nasty cast! */ + } +#endif + +#ifdef MODULE_dputter +/* NOTE! this is not really used, instead see z80/diag.S for the asm ver */ +unsigned int /*NICK_PASCAL NICK_NEAR*/ +dputter(void *ptr, unsigned int n, FILE *fp) + { + unsigned char ch, *p, *q; + + if (Stkchk) + { + chkstk(); + } + + q = (unsigned char *)ptr + n; + for (p = (unsigned char *)ptr; p < q; p++) + { + ch = *p; + if (ch == '\n') + { + acrlf(); + } + else + { + abyte(ch); + } + } + return n; + } +#endif + diff --git a/src/nos/filesys/rtc.c b/src/nos/filesys/rtc.c new file mode 100644 index 00000000..febf9a99 --- /dev/null +++ b/src/nos/filesys/rtc.c @@ -0,0 +1,54 @@ +/* rtc.c by Nick for NOS/UZI project + * + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + Real time clock I/O routines +**********************************************************/ + +#include +#include +#include "z80/asm.h" +#include "uzi/rtc.h" +#include "nos/global.h" + +#ifndef DEBUG +#define DEBUG 0 +#endif + +#ifndef MODULE +#define MODULE_rdtime +#define MODULE_sttime +#endif + +#ifdef MODULE_rdtime +void +rdtime(rtctime_t *tvec) + { + *tvec = Clock; + } +#endif + +#ifdef MODULE_sttime +void +sttime(rtctime_t *tvec) + { + Clock = *tvec; + } +#endif + diff --git a/src/nos/filesys/scall1.c b/src/nos/filesys/scall1.c new file mode 100644 index 00000000..92052709 --- /dev/null +++ b/src/nos/filesys/scall1.c @@ -0,0 +1,1526 @@ +/* + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + Implementation of system calls +**********************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include "z80/asm.h" +#include "uzi/devio.h" +#include "uzi/rtc.h" +#include "uzi/filesys.h" +#include "uzi/xip.h" +#include "uzi/process.h" +#include "uzi/maxmin.h" +#include "uzi/usrmem.h" +#include "uzi/scall1.h" +#include "nos/global.h" /* for ksignal() and kwait() */ +#include +#include "po/messages.h" + +/* char ugetc(char *ptr); */ +#define ugetc(ptr) (ugetw(ptr) & 0xff) + +#ifdef MODULE +#define STATIC +extern info_t ibuf; +extern kdata_t kbuf; +#else +#define STATIC static +#define MODULE_ibuf +#define MODULE_kbuf +#define MODULE_sys_NONE +#define MODULE_sys_sync +#define MODULE_sys_utime +#define MODULE_sys_close +#define MODULE_truncateto0 +#define MODULE_sys_open +#define MODULE_sys_link +#define MODULE_sys_symlink +#define MODULE_sys_unlink +#define MODULE_sys_readwrite +#define MODULE_sys_lseek +#define MODULE_sys_chdir +#define MODULE_sys_chroot +#define MODULE_sys_mknod +#define MODULE_chany +#define MODULE_sys_chmod +#define MODULE_sys_chown +#define MODULE_stcpy +#define MODULE_sys_statfstat +#define MODULE_sys_falign +#define MODULE_sys_dup +#define MODULE_sys_dup2 +#define MODULE_sys_getfsys +#define MODULE_sys_ioctl +#define MODULE_sys_mountumount +#define MODULE_sys_time +#define MODULE_n_creat +#define MODULE_readwritei +#define MODULE_rwsetup +#define MODULE_scall1_getfsys +#endif + +#ifdef MODULE_ibuf +STATIC info_t ibuf; +#endif +#ifdef MODULE_kbuf +STATIC kdata_t kbuf; +#endif + +STATIC int chany(char *path, int val1, int val2, unsigned char mode); +STATIC void stcpy(cinode_t *ino, struct stat *buf); +STATIC cinode_t *n_creat(char *name, unsigned char new, mode_t mode); + +/********************************************* + SYSCALL NONE(); +**********************************************/ + +#ifdef MODULE_sys_NONE +int +sys_NONE(void) +{ + udata->u_error = ENOSYS; + return -1; +} +#endif + +/**************************************** + SYSCALL sync(void); +***************************************/ + +#ifdef MODULE_sys_sync +int +sys_sync(void) +{ + i_sync(); /* flushing inodes */ + fs_sync(); /* flushing superblocks */ + /* flushing buffers is already done by i_sync/fs_sync */ + return 0; +} +#endif + +/******************************** + SYSCALL utime(char *path, struct utimbuf *buf); +********************************/ +#ifdef MODULE_sys_utime +#define path (char *)udata->u_argn0 +#define buf ((struct utimbuf *)udata->u_argn1) +int +sys_utime(void) +{ + struct utimbuf lcl, *bufp = buf; + register cinode_t *ino; + + if (path == NULL) { + udata->u_error = EFAULT; +Err: return -1; + } + if (bufp == NULL) { + bufp = &lcl; + rdtime(&bufp->actime); + bcopy(&bufp->actime, &bufp->modtime, sizeof(time_t)); + } +#if 1 /* Nick */ + else + { + uget((char *)bufp, (char *)&lcl, sizeof(struct utimbuf)); + bufp = &lcl; + } +#endif + if ((ino = namei(path, NULL, 1)) == NULL) + goto Err; + if (ino->c_node.i_uid != udata->u_ptab->p_euid && !super()) { + udata->u_error = EPERM; + goto Err1; + } + if (ino->c_ro) { + udata->u_error = EROFS; +Err1: i_deref(ino); + goto Err; + } + bcopy(&bufp->actime, &ino->c_node.i_atime, sizeof(time_t)); + bcopy(&bufp->modtime, &ino->c_node.i_mtime, sizeof(time_t)); + ino->c_dirty=1; + i_deref(ino); + return 0; +} +#undef path +#undef buf +#endif + +/********************************************* + SYSCALL close(int uindex); +**********************************************/ +#ifdef MODULE_sys_close +#define uindex (unsigned int)udata->u_argn0 +int +sys_close(void) +{ + return filesys_doclose(uindex); +} +#undef uindex +#endif + +/* truncate the file, if a regular one, to zero length */ + +#ifdef MODULE_truncateto0 +void +truncateto0(cinode_t *ino) + { + register oft_t **opp, *op; + +#if 1 + if (S_ISREGALIGN(ino->c_node.i_mode)) /* regular file or XIP aligned */ +#else + if (getmode(ino) == S_IFREG) /* regular file */ +#endif + { + /* Truncate the regular file to zero length */ + ino->c_node.i_size = 0; /* for future use */ + f_trunc(ino); + /* Reset any oft pointers */ + for (opp = Oftab; opp < Oftab + NOPENFILES; opp++) + { + op = *opp; + if (op->o_inode == ino) + op->o_ptr = 0; + } + } + } +#endif + +/******************************************* + SYSCALL open(char *name, int flag, mode_t mode); +********************************************/ +#ifdef MODULE_sys_open +#define name (char *)udata->u_argn0 +#define flag (int)udata->u_argn1 +#define mode udata->u_argn2 +int +sys_open(void) +{ + oft_t *of; + off_t *op; + register cinode_t *ino; + register int spf = flag; + unsigned char perm, oftindex, uindex; + + if ((flag &= 0xFF) > O_RDWR) { /* special flags in high byte */ + udata->u_error = EINVAL; + goto Err1; + } + if (spf & O_SYMLINK) + spf = O_SYMLINK; + if ((uindex = uf_alloc()) == (unsigned char)-1 || /* user file descriptor */ + (oftindex = oft_alloc()) == (unsigned char)-1) /* system file descriptor */ + goto Err1; + if ((spf & O_NEW) || + (ino = namei(name, NULL, !(spf & O_SYMLINK))) == NULL) { /* open inode for name */ + if (!(spf & O_CREAT)) + goto Err; + mode = (S_IFREG | (mode & S_UMASK & ~udata->u_ptab->p_umask)); + udata->u_error = 0; + if ((ino = n_creat(name, (spf & O_NEW) != 0, mode)) == NULL) +#if 0 /* Nick's experimental addition */ + { + udata->u_error = 10000; + goto Err; + } +#else + goto Err; +#endif + } + of = Oftab[oftindex]; + of->o_inode = ino; /* save inode ref */ + perm = getperm(ino); /* check for permissions */ + if (((((unsigned char)flag == O_RDONLY) || + (unsigned char)flag == O_RDWR) && + !((unsigned char)perm & S_IOREAD)) || + (((unsigned char)flag == O_WRONLY || + (unsigned char)flag == O_RDWR) && + !((unsigned char)perm & S_IOWRITE))) { + udata->u_error = EPERM; + goto Err; + } + if (((unsigned char)flag == O_WRONLY || + (unsigned char)flag == O_RDWR) && + (ino->c_ro)) { + udata->u_error = EROFS; + goto Err; + } + if ((spf & O_SYMLINK) && getmode(ino) != S_IFLNK) { + udata->u_error = ESRCH; + goto Err; + } + if (getmode(ino) == S_IFDIR && /* directories only for read */ + flag != O_RDONLY) { + udata->u_error = EISDIR; + goto Err; + } + if (isdevice(ino) && +#if 1 /* Nick */ + ino->c_refs == 1 && + /*Oftab[oftindex]->o_refs == 1 &&*/ /* always true */ +#endif + d_open(DEVNUM(ino)) != 0) { + udata->u_error = ENXIO; /* can't access to device */ + goto Err; + } + udata->u_ptab->p_files[uindex] = oftindex; /* user fd */ + op = &(of->o_ptr); + if (spf & O_APPEND) /* posit to end of file */ + *op = ino->c_node.i_size; + else *op = 0; /* posit to start of file */ + /* creat must truncate file to 0 if it exists! */ + if ((spf & (O_CREAT|O_TRUNC)) == (O_CREAT|O_TRUNC)) truncateto0(ino); + of->o_access = flag; + if (getmode(ino) == S_IFPIPE && of->o_refs == 1) + kwait(ino); /* sleep process if no writer of reader */ + return uindex; + +Err: oft_deref(oftindex); /* This will call i_deref() */ +Err1: return (-1); +} +#undef name +#undef flag +#undef mode +#endif + +/******************************************** + SYSCALL link(char *oldname, char *newname); +*********************************************/ +#ifdef MODULE_sys_link +#define oldname (char *)udata->u_argn0 +#define newname (char *)udata->u_argn1 +int +sys_link(void) +{ + register cinode_t *ino, *ino2; + cinode_t *parent2 = NULL; + int ret = -1; +#if 1 + char fname[15]; +#endif + + if ((ino = namei(oldname, NULL, 1)) == 0) + goto Err1; + if (!(getperm(ino) & S_IOWRITE)) { + udata->u_error = EPERM; + goto Err; + } + /* Make sure newname doesn't exist, and get its parent */ + if ((ino2 = namei(newname, &parent2, 1)) != NULL) { + i_deref(ino2); + udata->u_error = EEXIST; + goto Err; + } + if (parent2 == NULL) /* even no path */ + goto Err; + if (ino->c_dev != parent2->c_dev) { + udata->u_error = EXDEV; /* inter-device link not allowed */ + goto Err; + } +#if 1 /* Nick */ + filename(newname, fname); + if (ch_link(parent2, "", fname, ino) == 0) +#else + if (ch_link(parent2, "", filename(newname), ino) == 0) +#endif + goto Err; + /* Update the link count */ + ++ino->c_node.i_nlink; + if (wr_inode(ino) < 0) goto Err; + setftim(ino, C_TIME); + ret = 0; +Err: if (parent2 != NULL) + i_deref(parent2); + i_deref(ino); +Err1: return ret; +} +#undef oldname +#undef newname +#endif + +/******************************************** + SYSCALL symlink(char *oldname, char *newname); +*********************************************/ +#ifdef MODULE_sys_symlink +#define oldname (char *)udata->u_argn0 +#define newname (char *)udata->u_argn1 +int +sys_symlink(void) +{ + register cinode_t *ino = NULL; + int ret = -1; + mode_t mode = S_IFREG | (0666 & ~udata->u_ptab->p_umask); +#if 1 /* Nick for IAR compiler */ + char *p; +#endif + + /* Create newname as new IFREG node */ + if ((ino = n_creat(newname, 1, mode)) == NULL) + goto Ret; + /* fill in new file */ + udata->u_offset = 0; /* don't use a = b = c = 0 ! HTC doesn't like this */ + udata->u_count = 0; + udata->u_base = (unsigned char *)oldname; /* buf */ +#if 1 /* Nick for IAR compiler */ + p = oldname; + while (ugetc(p)) /* (*p) */ + { + p++; + udata->u_count++; + } +#else + while (ugetc(oldname++)) /* (*oldname++ != 0) */ + udata->u_count = udata->u_count+1; /* nbytes */ +#endif +#if 1 /* Nick */ + udata->u_sysio = 0; /* target of symlink is passed in user space */ +#endif + writei(ino); /* write it */ + /* change mode to LNK */ + ino->c_node.i_mode = (mode & S_UMASK) | S_IFLNK; + if (wr_inode(ino) < 0) goto Ret; + ret = 0; +Ret: if (ino != NULL) i_deref(ino); + return ret; +} +#undef oldname +#undef newname +#endif + +/******************************************* + SYSCALL unlink(char *path); +********************************************/ +#ifdef MODULE_sys_unlink +#define path (char *)udata->u_argn0 +int +sys_unlink(void) +{ + cinode_t *pino; + register cinode_t *ino = namei(path, &pino, 0); + int ret = -1; +#if 1 + char fname[15]; +#endif + + if (pino == NULL || ino == NULL) { + udata->u_error = ENOENT; + goto Ret; + } + if (!(getperm(ino) & S_IOWRITE)) { + udata->u_error = EPERM; + goto Ret; + } + /* Remove the directory entry */ +#if 1 + filename(path, fname); + if (ch_link(pino, fname, "", NULL) == 0) +#else + if (ch_link(pino, filename(path), "", NULL) == 0) +#endif + goto Ret; + /* Decrease the link count of the inode */ + if (ino->c_node.i_nlink-- == 0) + _printf(_("_unlink: bad nlink %d"),ino->c_node.i_nlink += 2); + setftim(ino, C_TIME); + ret = 0; +Ret: if (pino) i_deref(pino); + if (ino) i_deref(ino); + return ret; +} +#undef path +#endif + +/********************************************** + SYSCALL read(int d, char *buf, unsigned int nbytes); + SYSCALL write(int d, char *buf, unsigned int nbytes); +**********************************************/ +#ifdef MODULE_sys_readwrite +#define d (unsigned int)udata->u_argn0 +#define buf (void *)udata->u_argn1 +#define nbytes (unsigned int)udata->u_argn2 +#define isread (udata->u_callno == 23) +int +sys_readwrite(void) +{ + register cinode_t *ino; + + /* Set up u_base, u_offset, ino; check permissions, file num. */ + if ((ino = rwsetup(d, buf, nbytes, isread)) == NULL) + return (-1); /* bomb out if error */ + if (nbytes) + if (isread) readi(ino); else writei(ino); + Oftab[udata->u_ptab->p_files[d]]->o_ptr = udata->u_offset; + return udata->u_count; +} +#undef d +#undef buf +#undef nbytes +#endif + +/************************************************ + SYSCALL lseek(int file, long offset, int whence); +************************************************/ +#ifdef MODULE_sys_lseek +#define file (unsigned char)udata->u_argn0 +#define offset *((off_t *)&udata->u_argn1) +#define flag (int)udata->u_argn3 +off_t +sys_lseek(void) +{ + register off_t* offp; + register cinode_t *ino; + + if ((ino = getinode(file)) == NULL) { +Err1: udata->u_retval1 = (-1); + return (-1); + } + if (getmode(ino) == S_IFPIPE) { + udata->u_error = ESPIPE; + goto Err1; + } + offp = &Oftab[udata->u_ptab->p_files[file]]->o_ptr; + switch (flag) { + case SEEK_SET: *offp = offset; break; + case SEEK_CUR: *offp += offset; break; + case SEEK_END: *offp = ino->c_node.i_size + offset; break; + default: + udata->u_error = EINVAL; + goto Err1; + } + udata->u_retval1 = ((unsigned int *)offp)[1]; + return *offp; +} +#undef file +#undef offset +#undef flag +#endif + +/************************************ + SYSCALL chdir(char *dir); +************************************/ +#ifdef MODULE_sys_chdir +#define dir (char *)udata->u_argn0 +int +sys_chdir(void) +{ + register cinode_t *newcwd; + + if ((newcwd = namei(dir, NULL, 1)) == 0) +Err1: return (-1); + if (getmode(newcwd) != S_IFDIR) { + i_deref(newcwd); + udata->u_error = ENOTDIR; + goto Err1; + } + if (!(getperm(newcwd) & S_IOEXEC)) { + udata->u_error = EPERM; + goto Err1; + } + i_deref(udata->u_ptab->p_cwd); + udata->u_ptab->p_cwd = newcwd; + return 0; +} +#undef dir +#endif + +/************************************ + SYSCALL chroot(char *dir); +************************************/ +#ifdef MODULE_sys_chroot +#define dir (char *)udata->u_argn0 +int +sys_chroot(void) +{ + if (sys_chdir() == 0) { + i_deref(udata->u_ptab->p_root); + udata->u_ptab->p_root = udata->u_ptab->p_cwd; + i_ref(udata->u_ptab->p_root); + return 0; + } + return -1; +} +#undef dir +#endif + +/********************************************* + SYSCALL mknod(char *name, mode_t mode, int dev); +*********************************************/ +#ifdef MODULE_sys_mknod +#define name (char *)udata->u_argn0 +#define mode (int)udata->u_argn1 +#define dev (dev_t)udata->u_argn2 +int +sys_mknod(void) +{ + register cinode_t *ino; + + mode &= ((~udata->u_ptab->p_umask & S_UMASK) | S_IFMT); + if (S_ISDEV(mode) && !super()) { /* only super able to create devs */ + udata->u_error = EPERM; +Err1: return -1; + } + if ((ino = n_creat(name, 1, mode)) == NULL) + goto Err1; + /* Initialize device node */ + if (isdevice(ino)) { + DEVNUM(ino) = dev; + ino->c_dirty = 1; + } + if (wr_inode(ino) < 0) { + i_deref(ino); + goto Err1; + } + i_deref(ino); + return 0; +} +#undef name +#undef mode +#undef dev + +/**************************************** + SYSCALL access(char *path, int mode); +****************************************/ +#define path (char *)udata->u_argn0 +#define mode (int)udata->u_argn1 +int +sys_access(void) +{ + register cinode_t *ino; + register int retval = -1; + unsigned char euid, egid; +#if 1 /* Nick for IAR compiler */ + /* char *p; */ + + /* p = path; */ + if ((mode &= 07) != 0 && ugetc(path) == 0) { +#else + if ((mode &= 07) != 0 && *path == 0) { +#endif + udata->u_error = ENOENT; + goto Err1; + } + /* Temporarily make eff. id real id. */ + euid = udata->u_ptab->p_euid; + egid = udata->u_ptab->p_egid; + udata->u_ptab->p_euid = udata->u_ptab->p_uid; + udata->u_ptab->p_egid = udata->u_ptab->p_gid; + + if ((ino = namei(path, NULL, 1)) == NULL) + goto Err; + retval = 0; + if ((~getperm(ino) & mode) != 0) { + udata->u_error = EPERM; + retval = -1; + } + i_deref(ino); +Err: udata->u_ptab->p_euid = euid; + udata->u_ptab->p_egid = egid; +Err1: return retval; +} +#undef path +#undef mode +#endif + + +#ifdef MODULE_chany +STATIC int +chany(char *path, int val1, int val2, unsigned char mode) +{ + register cinode_t *ino; + + if ((ino = namei(path, NULL, 1)) == NULL) + goto Err1; + if (ino->c_node.i_uid != udata->u_ptab->p_euid && !super()) { + i_deref(ino); + udata->u_error = EPERM; +Err1: return (-1); + } + if (mode) { + /* file class can't be changed */ + ino->c_node.i_mode &= S_IFMT; + ino->c_node.i_mode = (ino->c_node.i_mode | + ((mode_t)val1 & S_UMASK)); + } + else { + ino->c_node.i_uid = val1; + ino->c_node.i_gid = val2; + } + setftim(ino, C_TIME); + i_deref(ino); + return 0; +} +#endif + +/******************************************* + SYSCALL chmod(char *path, mode_t mode); +*******************************************/ +#ifdef MODULE_sys_chmod +#define path (char *)udata->u_argn0 +#define mode (mode_t)udata->u_argn1 +int +sys_chmod(void) +{ + return chany(path, (int)mode, 0, 1); +} +#undef path +#undef mode +#endif + +/************************************************* + SYSCALL chown(char *path, int owner, int group); +*************************************************/ +#ifdef MODULE_sys_chown +#define path (char *)udata->u_argn0 +#define owner (unsigned char)udata->u_argn1 +#define group (unsigned char)udata->u_argn2 +int +sys_chown(void) +{ + return chany(path, owner, group, 0); +} +#undef path +#undef owner +#undef group +#endif + +/* stcpy() Utility for stat and fstat + */ + +#ifdef MODULE_stcpy +STATIC void +stcpy(cinode_t *ino, struct stat *buf) +{ + /* ensure fields are copied individually, cinode_t may change */ + if (udata->u_insys) + { + buf->st_dev = ino->c_dev; + buf->st_ino = ino->c_num; + buf->st_mode = ino->c_node.i_mode; + buf->st_nlink = ino->c_node.i_nlink; + buf->st_uid = ino->c_node.i_uid; + buf->st_gid = ino->c_node.i_gid; + buf->st_rdev = DEVNUM(ino); + buf->st_size = ino->c_node.i_size; + memcpy(&buf->st_atime, &ino->c_node.i_atime, + 3 * sizeof(unsigned long)); + } + else + { + uputw(ino->c_dev, &buf->st_dev); + uputw(ino->c_num, &buf->st_ino); + uputw(ino->c_node.i_mode, &buf->st_mode); + uputw(ino->c_node.i_nlink, &buf->st_nlink); + uputw(ino->c_node.i_uid, &buf->st_uid); + uputw(ino->c_node.i_gid, &buf->st_gid); + uputw(DEVNUM(ino), &buf->st_rdev); + uput(&ino->c_node.i_size, &buf->st_size, sizeof(off_t)); + uput(&ino->c_node.i_atime, &buf->st_atime, + 3 * sizeof(unsigned long)); + } +} +#endif + +/************************************** + SYSCALL stat(char *path, char *buf); + SYSCALL fstat(int fd, char *buf); + **************************************/ +#ifdef MODULE_sys_statfstat +#define path (char *)udata->u_argn0 +#define fd (unsigned char)udata->u_argn0 +#define buf (char *)udata->u_argn1 +#define isstat (udata->u_callno == 27) +int +sys_statfstat(void) +{ + register cinode_t *ino; + + if (!valadr(buf, sizeof(struct stat))) goto Err; + if ((ino = isstat ? namei(path, NULL, 1) : getinode(fd)) == 0) { +Err: return -1; + } + stcpy(ino, (struct stat *)buf); + if (isstat) i_deref(ino); + return (0); +} +#undef path +#undef buf +#endif + +/************************************** + SYSCALL falign(int fd, int parm); + **************************************/ +#ifdef MODULE_sys_falign +#define fd (unsigned char)udata->u_argn0 +#define parm (int)udata->u_argn1 +int +sys_falign(void) +{ + cinode_t *ino; + + ino = getinode(fd); + if (ino == 0) + { + return -1; + } + + switch (parm) + { + case XIP_ALIGN: + return bitmap_align(ino, ino->c_node.i_size); + + case XIP_UALIGN: + return bitmap_ualign(ino, ino->c_node.i_size); + } + + return -1; +} +#undef path +#undef buf +#endif + +/************************************ + SYSCALL dup(int oldd); +************************************/ +#ifdef MODULE_sys_dup +#define oldd (unsigned char)udata->u_argn0 +int +sys_dup(void) +{ + register unsigned char newd, oftindex; + + if (getinode(oldd) == NULL || + (newd = uf_alloc()) == (unsigned char)-1) + return (-1); + oftindex = udata->u_ptab->p_files[oldd]; + udata->u_ptab->p_files[newd] = oftindex; + ++Oftab[oftindex]->o_refs; + return newd; +} +#undef oldd +#endif + +/**************************************** + SYSCALL dup2(int oldd, int newd); +****************************************/ +#ifdef MODULE_sys_dup2 +#define oldd (unsigned char)udata->u_argn0 +#define newd (unsigned char)udata->u_argn1 +int +sys_dup2(void) +{ + if (getinode(oldd) == NULL) + goto Err1; + if (newd >= NUSERFILES) { + udata->u_error = EBADF; +Err1: return (-1); + } + if (!freefileentry(udata->u_ptab->p_files[newd])) + filesys_doclose(newd); + udata->u_ptab->p_files[newd] = udata->u_ptab->p_files[oldd]; + ++Oftab[udata->u_ptab->p_files[oldd]]->o_refs; + return 0; +} +#undef oldd +#undef newd +#endif + +/* Special system call returns copies of UZIX + * structures for system dependent utils like df, ps... + */ +/*********************************************** + SYSCALL getfsys(dev_t devno, char *ubuf); +***********************************************/ +#ifdef MODULE_sys_getfsys +#define devno ((dev_t)udata->u_argn0) +#define ubuf ((char *)udata->u_argn1) +int +sys_getfsys(void) + { + info_t buf; + + if (scall1_getfsys(devno, &buf)) + { + return -1; + } + + if (!valadr(ubuf, buf.size)) + { + return -1; + } + + uput((char *)buf.ptr, ubuf, buf.size); + return 0; + } +#undef devno +#undef ubuf +#endif + +/********************************************** + SYSCALL ioctl(int fd,int request, void *data); +**********************************************/ +#ifdef MODULE_sys_ioctl +#define fd (unsigned char)udata->u_argn0 +#define request (int)udata->u_argn1 +#define data (void *)udata->u_argn2 +int +sys_ioctl(void) +{ + register cinode_t *ino; + + if ((ino = getinode(fd)) == NULL) + udata->u_error = EBADF; + else if (!isdevice(ino)) + udata->u_error = ENODEV; + else if ((getperm(ino) & S_IOWRITE) == 0) + udata->u_error = EPERM; + else if (!d_ioctl(DEVNUM(ino), request, data)) + return 0; + return -1; +} +#undef fd +#undef request +#undef data +#endif + +/************************************************** + SYSCALL mount(char *spec, char *dir, int rwflag); + SYSCALL umount(char *spec); +**************************************************/ +#ifdef MODULE_sys_mountumount +#define spec (char *)udata->u_argn0 +#define dir (char *)udata->u_argn1 +#define rwflag (int)udata->u_argn2 +#define ismount (udata->u_callno == 19) +int +sys_mountumount(void) +{ + register cinode_t *sino, *dino, **dinopp; + register dev_t dev; + int sts = -1; + filesys_t *fp; + + if (!super()) + { + udata->u_error = EPERM; + goto Err1; + } + if ((sino = namei(spec, NULL, 1)) == NULL) + { + goto Err1; + } + if (ismount) if ((dino = namei(dir, NULL, 1)) == 0) + { + i_deref(sino); + goto Err1; + } + if (getmode(sino) != S_IFBLK) + { + udata->u_error = ENOTBLK; + goto Err; + } + if (!ismount) + { +#if 0 /* FIX THIS!... now fixed */ + if (!validdev(dev = DEVNUM(sino))) goto ErrIO; +#else + if (!validdev(dev = DEVNUM(sino),NULL)) goto ErrIO; +#endif + } + else + { + if (getmode(dino) != S_IFDIR) + { + udata->u_error = ENOTDIR; + goto Err; + } + if (d_open(dev = DEVNUM(sino))) + { +ErrIO: udata->u_error = ENXIO; + goto Err; + } + d_close(dev); /* fmount will open the device */ + } + fp = findfs(dev); + if (!ismount) + { + if (!fp || !fp->s_mounted) + { + udata->u_error = EINVAL; + goto Err; + } + for (dinopp = Inotab; dinopp < Inotab + NINODES; dinopp++) + { + dino = *dinopp; + if (dino->c_refs > 0 && dino->c_dev == dev) + { + goto ErrBusy; + } + } + } + else + { + if (fp || dino->c_refs != 1 || dino->c_num == ROOTINODE) + { +ErrBusy: udata->u_error = EBUSY; + goto Err; + } + } + sys_sync(); + if (!ismount) + { + fp->s_mounted = 0; + i_deref(fp->s_mntpt); + sts = 0; + } + else + { + if (!fmount(dev, dino, rwflag)) + { + sts = 0; + } + else + { + goto ErrBusy; + } + } +Err: if (ismount) i_deref(dino); + i_deref(sino); +Err1: return sts; +} +#undef spec +#undef dir +#undef rwflag +#endif + +/*********************************** + SYSCALL time(time_t *tvec); +***********************************/ +#ifdef MODULE_sys_time +#define tvec (time_t *)udata->u_argn0 +time_t +sys_time(void) +{ + rtctime_t buf; + + rdtime(&buf); + uput(&buf, tvec, sizeof(rtctime_t)); + return buf; +} +#undef tvec + +/*======================================================================*/ + +#if 0 /*def __KERNEL__*/ +/* exit0() - do exit through vector 0 (erroneous jmp to address 0) + */ +void +exit0(void) +{ + doexit(-1, -1); +} +#endif +#endif /* __KERNEL__ */ + +/* create any kind of node */ + +#ifdef MODULE_n_creat +STATIC cinode_t * +n_creat(char *name, unsigned char new, mode_t mode) +{ + register cinode_t *ino; + cinode_t *parent = NULL; +#if 1 + char fname[15]; +#endif +#if DEBUG >= 3 + char *buf; + + buf = tmpbuf(); + ugets(name, buf, 512); + dprintf(3, "n_creat(\"%s\", %d, 0%o)\n", buf, new, mode); + brelse((blkbuf_t *)buf); +#endif + + if ((ino = namei(name, &parent, 1)) != NULL) { + /* The file already exists */ + if (new) { + udata->u_error = EEXIST; /* need new file! */ + goto Err1; + } + i_deref(parent); /* parent not needed */ + if (getmode(ino) == S_IFDIR) { /* can't rewrite directory */ + udata->u_error = EISDIR; + goto Err; + } + /* must have the write access */ + if ((getperm(ino) & S_IOWRITE) == 0) { + udata->u_error = EACCES; + goto Err; + } + truncateto0(ino); + } + else { /* must create the new file */ + if (parent == NULL) /* missing path to file */ +#if 0 /* Nick experimental */ + { + udata->u_error = 10003; + goto Err; + } +#else + goto Err; +#endif +#if 1 /* Nick */ + filename(name, fname); + if ((ino = newfile(parent, fname)) == NULL) +#else + if ((ino = newfile(parent, name)) == NULL) +#endif + /* Parent was derefed in newfile! */ +#if 0 /* Nick experimental */ + { + udata->u_error = 10002; + goto Err; + } +#else + goto Err; /* Doesn't exist and can't make it */ +#endif + ino->c_node.i_mode = mode; + setftim(ino, A_TIME | M_TIME | C_TIME); + /* The rest of the inode is initialized in newfile() */ + if (_getmode(mode) == S_IFDIR) { + if (ch_link(ino, "", ".", ino) == 0 || + ch_link(ino, "", "..", parent) == 0) + goto Err1; + ino->c_node.i_size = 2*sizeof(direct_t); + ino->c_node.i_nlink++; + parent->c_node.i_nlink++; + parent->c_dirty = 1; + } + } + if (wr_inode(ino) < 0) +#if 0 /* Nick experimental */ + { + udata->u_error = 10001; + goto Err; + } +#else + goto Err; +#endif +#if DEBUG >= 3 + dprintf(3, "n_creat() returning 0x%x, success\n", ino); +#endif + return ino; + +Err1: i_deref(parent); +Err: if (ino) + i_deref(ino); +#if DEBUG >= 3 + dprintf(3, "n_creat() returning NULL, error %u\n", udata->u_error); +#endif + return NULL; +} +#endif + +/* readwritei() implements reading/writing from/to any kind of inode + * udata prepared with parameters + */ + + +#ifdef MODULE_readwritei +void +readwritei(char write, cinode_t *ino) +{ + register unsigned int amount, todo, ublk, uoff, tdo = 0; + register char *bp; + register blkno_t pblk; + dev_t dev = ino->c_dev; + unsigned char ispipe = 0; + +#if DEBUG >= 3 + dprintf(3, "readwritei(%u, 0x%x) starting\n", (unsigned int)write, ino); +#endif + + if (write && ino->c_ro) { + udata->u_error = EROFS; +#if DEBUG >= 3 + dprintf(3, "readwritei() returning, error %u\n", udata->u_error); +#endif + return; + } + switch (getmode(ino)) { + case S_IFCHR: /* character device */ + udata->u_count = write ? cdwrite(DEVNUM(ino)) : cdread(DEVNUM(ino)); + if ((int)udata->u_count != -1) + udata->u_offset += udata->u_count; +#if DEBUG >= 3 + dprintf(3, "readwritei() returning, error %u\n", udata->u_error); +#endif + return; + case S_IFLNK: /* sym link */ + if (write) goto error; + case S_IFDIR: /* directory */ + case S_IFREG: /* regular file */ +#if 1 /* Nick */ + case S_IFALIGN: /* aligned regular file */ +#endif + todo = udata->u_count; + if (!write) { + /* See if offset is beyond end of file */ + if ((unsigned long)udata->u_offset >= + (unsigned long)ino->c_node.i_size) { + udata->u_count = 0; +#if DEBUG >= 3 + dprintf(3, "readwritei() returning, error %u\n", udata->u_error); +#endif + return; + } + /* See if end of file will limit read */ + if (udata->u_offset + todo > ino->c_node.i_size) + { + todo = (unsigned int)(ino->c_node.i_size - + udata->u_offset); + } + udata->u_count = todo; + } + goto loop; +#if 1 /*def __KERNEL__*/ + case S_IFPIPE: /* interprocess pipe */ + ++ispipe; + if (write) { /* write side */ + while ((todo = udata->u_count) > + (DIRECTBLOCKS * BUFSIZE) - + (unsigned int)ino->c_node.i_size) { + if (ino->c_refs == 1) { + /* No readers - broken pipe */ + udata->u_count = -1; + udata->u_error = EPIPE; +#if 0 /* temporary!!!! */ + ssig(udata->u_ptab, SIGPIPE); +#endif +#if DEBUG >= 3 + dprintf(3, "readwritei() returning, error %u\n", udata->u_error); +#endif + return; + } + /* Sleep if full pipe */ + kwait(ino); /* P_SLEEP */ + } + goto loop; + } else { /* read side */ + while ((unsigned int)ino->c_node.i_size == 0) { + if (ino->c_refs == 1) /* No writers */ + break; + /* Sleep if empty pipe */ + kwait(ino); /* P_SLEEP */ + } + /* this really should be revised to min_uint */ + todo = min_int(udata->u_count, + (unsigned int)ino->c_node.i_size); + udata->u_count = todo; + goto loop; + } +#endif /* __KERNEL__ */ + case S_IFBLK: /* block device */ + dev = DEVNUM(ino); + todo = udata->u_count; + /* blockdev/directory/regular/pipe */ +loop: while (todo) { + ublk = (unsigned int)(udata->u_offset >> BUFSIZELOG); + uoff = (unsigned int)udata->u_offset & (BUFSIZE - 1); + pblk = bmap(ino, ublk, write ? 0 : 1); + if (!write) { + /* Nick added isdevice(ino) to allow access */ + /* to block 0 via open handle to /dev/hdX */ +#if 0 /* FIX THIS!... now fixed */ + bp = (pblk == NULLBLK && isdevice(ino) == 0) ? + zerobuf() : bread(dev, pblk, 0); +#else + bp = (pblk == NULLBLK && isdevice(ino) == 0) ? + zerobuf(1): bread(dev, pblk, 0); +#endif + if (bp == NULL) { + /* EFAULT: for FD, means, out of disk bounds! + * it's not really an error. it just means EOF... */ + if (udata->u_error == EFAULT) + udata->u_error = 0; +#if DEBUG >= 3 + dprintf(3, "readwritei() returning, error %u\n", udata->u_error); +#endif + return; + } + } + /* this really should be revised to min_uint */ + amount = min_int(todo, BUFSIZE - uoff); + if (write) { + if (pblk == NULLBLK && isdevice(ino) == 0) + return; /* No space to make more blocks */ + /* If we are writing an entire block, we don't care + * about its previous contents + */ + bp = bread(dev, pblk, (amount == BUFSIZE)); + if (bp == NULL) + { +#if DEBUG >= 3 + dprintf(3, "readwritei() returning, error %u\n", udata->u_error); +#endif + return; + } +#if 1 /* Nick */ + /* if System is in context or destination is in Common memory + * (F000-FFFF is always in context), simply copy the data. + * Otherwise perform Interbank move (uput) to User bank. + */ + if (udata->u_sysio || (udata->u_base < (char *)0x8000)) /* Nick >= (char *) 0xf000)) */ + bcopy (udata->u_base, bp + uoff, amount); + else + uget (udata->u_base, bp + uoff, amount); +#else + bcopy(udata->u_base, bp + uoff, amount); +#endif + if (bfree((blkbuf_t *)bp, 2) < 0) + { +#if DEBUG >= 3 + dprintf(3, "readwritei() returning, error %u\n", udata->u_error); +#endif + return; + } + } else { +#if 1 /* Nick */ + /* if System is in context or destination is in Common memory + * (F000-FFFF is always in context), simply copy the data. + * Otherwise perform Interbank move (uput) to User bank. + */ + if (udata->u_sysio || (udata->u_base < (char *)0x8000)) /* Nick >= (char *)0xf000)) */ + bcopy (bp + uoff, udata->u_base, amount); + else + uput (bp + uoff, udata->u_base, amount); +#else + bcopy(bp+uoff, udata->u_base, amount); +#endif + if (brelse((blkbuf_t *)bp) < 0) + { +#if DEBUG >= 3 + dprintf(3, "readwritei() returning, error %u\n", udata->u_error); +#endif + return; + } + } + udata->u_base = (unsigned char *)udata->u_base + amount; + /* HTC stuff */ + tdo += amount; + udata->u_offset += amount; + todo -= amount; +#if 1 /*def __KERNEL__*/ + if (ispipe) { + if (ublk >= DIRECTBLOCKS) + udata->u_offset &= (BUFSIZE - 1); + ino->c_node.i_size += write ? amount : -amount; + /* Wake up any readers/writers */ + ksignal(ino, 0); + } +#endif /* __KERNEL__ */ + } + udata->u_count = tdo; + /* Update size if file grew */ + if (write && !ispipe) { + if (udata->u_offset > ino->c_node.i_size) { + ino->c_node.i_size = udata->u_offset; + ino->c_dirty = 1; + } + } +#if DEBUG >= 3 + dprintf(3, "readwritei() returning, success\n"); +#endif + return; + default: +error: udata->u_error = ENODEV; + if (!write) + udata->u_count = -1; +#if DEBUG >= 3 + dprintf(3, "readwritei() returning, error %u\n", udata->u_error); +#endif + return; + } +} +#endif + +/* rwsetup() prepare udata for read/write file */ + +#ifdef MODULE_rwsetup +cinode_t * +rwsetup(unsigned char fd, void *base, + unsigned int cnt, unsigned char rdflag) +{ + register cinode_t *ino; + register oft_t *oftp; + +#if DEBUG >= 3 + dprintf(3, "rwsetup(%u, 0x%x, %u, %u) starting\n", + (unsigned int)fd, base, cnt, (unsigned int)rdflag); +#endif + + if ((ino = getinode(fd)) == NULL) /* check fd */ + { +Err1: +#if DEBUG >= 3 + dprintf(3, "rwsetup() returning NULL, error %u\n", udata->u_error); +#endif + return NULL; + } + oftp = Oftab[udata->u_ptab->p_files[fd]]; + if (oftp->o_access == (rdflag ? O_WRONLY : O_RDONLY)) { + udata->u_error = EACCES; + goto Err1; + } + setftim(ino, rdflag ? A_TIME : (A_TIME | M_TIME)); + /* Initialize u_offset from file pointer */ + udata->u_offset = oftp->o_ptr; + udata->u_base = (unsigned char *)base; /* buf */ + udata->u_count = cnt; /* nbytes */ +#if 1 /* Nick */ + udata->u_sysio = 0; /* transfer is to be done on behalf of user */ +#endif +#if DEBUG >= 3 + dprintf(3, "rwsetup() returning 0x%x, success\n", ino); +#endif + return ino; +} + +#if 0 /* FIX THIS! */ +#if 1 /*def __KERNEL__*/ +#define tmpbuf ((udata_t *)TEMPDBUF) +int +pdat(struct s_pdata *ubuf) { + struct swap_mmread pp; + register ptptr p = ptab; +#ifdef PC_HOSTED + udata_t TEMPDBUF[1]; +#endif + + while (p < ptab+PTABSIZE) { + if (p->p_pid == ubuf->u_pid && p->p_status != P_ZOMBIE) { + if (p->p_status == P_RUNNING) + bcopy(&ub, tmpbuf, sizeof(udata_t)); + else { + pp.mm[0] = p->p_swap[0]; + pp.mm[1] = p->p_swap[1]; + pp.buf = (void *)tmpbuf; + pp.size = sizeof(udata_t); + pp.offset = (unsigned int)p->p_udata; + if (swap_mmread(&pp) < 0) { + udata->u_error = EIO; + goto Err; + } + } + ubuf->u_ptab = tmpbuf->u_ptab; + bcopy(tmpbuf->u_name, ubuf->u_name, DIRNAMELEN); + ubuf->u_insys = tmpbuf->u_insys; + ubuf->u_callno = tmpbuf->u_callno; +#if DEBUG + ubuf->u_traceme = tmpbuf->u_traceme; +#else + ubuf->u_traceme = 0; +#endif + ubuf->u_cursig = tmpbuf->u_cursig; + ubuf->u_euid = tmpbuf->u_euid; + ubuf->u_egid = tmpbuf->u_egid; + ubuf->u_gid = tmpbuf->u_gid; + ubuf->u_uid = p->p_uid; + ubuf->u_time = tmpbuf->u_time; + ubuf->u_ptab->p_utime = tmpbuf->u_ptab->p_utime; + ubuf->u_stime = tmpbuf->u_stime; + return 0; + } + ++p; + } + udata->u_error = ESRCH; +Err: return -1; +} +#endif +#endif /* __KERNEL__ */ +#endif + +/* This function is support for getfsys syscall and /dev/kmem */ +#ifdef MODULE_scall1_getfsys +#define ubuf ((struct s_pdata *)buf) +int +scall1_getfsys(dev_t devno, info_t *buf) + { + filesys_t *dev = findfs(devno); + register void *ptr = dev; + int cnt = sizeof(filesys_t); + + if (dev == NULL) + { + switch (devno) + { + case GI_FTAB: cnt = NMOUNTS; ptr = Fstab; break; + case GI_ITAB: cnt = NINODES; ptr = Inotab; break; + case GI_BTAB: cnt = NBLKBUFS; ptr = Bufpool; break; + case GI_PTAB: cnt = NPROGRAMS; ptr = Ptab; break; + case GI_UDAT: cnt = 1; ptr = udata; break; + case GI_UTAB: cnt = 1; ptr = udata->u_ptab; break; +#if 0 /* FIX THIS! */ + case GI_PDAT: return pdat(ubuf); +#endif + + case GI_KDAT: bcopy(UZIX, kbuf.k_name, 14); + bcopy(VERSION, kbuf.k_version, 8); + bcopy(RELEASE, kbuf.k_release, 8); + + bcopy(HOST, kbuf.k_host, 14); + bcopy(MACHINE, kbuf.k_machine, 8); + + kbuf.k_tmem = 256; /* 256k arena */ + kbuf.k_kmem = 56; /* 56k kernel */ + + cnt = sizeof(kbuf); + ptr = &kbuf; + goto getfsys_done; + + default: + udata->u_error = ENXIO; + return (-1); + } + + ibuf.size = cnt; + ibuf.ptr = ptr; + cnt = sizeof(ibuf); + ptr = &ibuf; + } + +getfsys_done: + buf->size = cnt; + buf->ptr = ptr; + return 0; + } +#undef tmpbuf +#undef ubuf +#endif + diff --git a/src/nos/filesys/scall2.c b/src/nos/filesys/scall2.c new file mode 100644 index 00000000..20217354 --- /dev/null +++ b/src/nos/filesys/scall2.c @@ -0,0 +1,642 @@ +/* + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + Implementation of system calls +**********************************************************/ + +#include +#include +#include +#include +#include +#include "z80/asm.h" +#include "uzi/devio.h" +#include "uzi/rtc.h" +#include "uzi/filesys.h" +#include "uzi/xip.h" +#include "uzi/process.h" +#include "uzi/maxmin.h" +#include "uzi/usrmem.h" +#include "uzi/scall2.h" +#include "nos/global.h" /* for Clock variable, kwait() and ksignal() */ +#include +#include "po/messages.h" + +#ifndef DEBUG +#define DEBUG 0 +#endif + +/* Implementation of system calls */ + +/* return a pointer to p_tab of process pid only */ +/* user must own process pid or be the superuser */ +#ifndef MODULE +#define MODULE_findprocess +#define MODULE_filldesc +#define MODULE_sys_pipe +#define MODULE_sys_stime +#define MODULE_sys_times +#define MODULE_sys_brk +#define MODULE_sys_sbrk +#define MODULE_sys_waitpid +#define MODULE_sys__exit +#define MODULE_doexit +#define MODULE_sys_fork +#define MODULE_sys_pause +#define MODULE_sys_signal +#define MODULE_sys_kill +#define MODULE_sys_alarm +#define MODULE_sys_reboot +#define MODULE_sys_getset +#endif + +#ifdef MODULE_findprocess +ptab_t * +findprocess(int pid) +{ + register ptab_t **ptp, *pt; + + for (ptp = Ptab; ptp < Ptab + NPROGRAMS; ptp++) + { + pt = *ptp; + disable(); + if (pt->p_pid == pid) + { + if (udata->u_ptab->p_uid == pt->p_uid || super()) + { + enable(); + return pt; + } + else + { + enable(); + udata->u_error = EPERM; + goto Err; + } + } + enable(); + } + + udata->u_error = EINVAL; +Err: return NULL; +} +#endif + +/******************************************** + SYSCALL pipe(int fildes[2]); +*******************************************/ +#ifdef MODULE_filldesc +void +filldesc(unsigned char oft, unsigned char access, cinode_t *ino) +{ + oft_t *op; + + op = Oftab[oft]; + op->o_ptr = 0; + op->o_inode = ino; + op->o_access = access; +} +#endif + + +#ifdef MODULE_sys_pipe +#define fildes ((unsigned int *)udata->u_argn0) +int +sys_pipe(void) +{ + unsigned char u1, u2; + unsigned char oft1 = (unsigned char)-1, oft2 = (unsigned char)-1; + cinode_t *ino; + + /* uf_alloc doesn't alloc an entry in user file table, + just returns the first free entry. so you must set it + before allocating another, or you'll get the same entry + */ + + if ((ino = i_open(root_dev, NULLINO)) == NULL) { + udata->u_error = ENOMEM; + goto Err; + } + if ((u1 = uf_alloc()) == (unsigned char)-1 || + (oft1 = oft_alloc()) == (unsigned char)-1) { + udata->u_error = ENOENT; + goto Err1; + } + udata->u_ptab->p_files[u1] = oft1; /* read side */ + filldesc(oft1, O_RDONLY, ino); + + if ((u2 = uf_alloc()) == (unsigned char)-1 || + (oft2 = oft_alloc()) == (unsigned char)-1) { + udata->u_ptab->p_files[u1] = -1; /* free user file table entry */ + udata->u_error = ENOENT; + goto Err2; + } + /* fill in pipe descriptors */ + udata->u_ptab->p_files[u2] = oft2; /* write side */ + filldesc(oft2, O_WRONLY, ino); + + /* No permissions necessary on pipes */ + ino->c_node.i_mode = S_IFPIPE | 0777; + ino->c_node.i_nlink = 0; /* a pipe is not in any directory */ + ++ino->c_refs; /* count two sides of pipe */ + +#if 1 /* Nick */ + uputw(u1, &fildes[0]); + uputw(u2, &fildes[1]); +#else + fildes[0] = u1; + fildes[1] = u2; +#endif + + return 0; + +Err2: if (oft2 != (unsigned char)-1) oft_deref(oft2); +Err1: if (oft1 != (unsigned char)-1) oft_deref(oft1); +Err: return -1; +} +#undef fildes +#endif + +/********************************** + SYSCALL stime(time_t *tvec) +**********************************/ +#ifdef MODULE_sys_stime +#define tvec (time_t *)udata->u_argn0 +int +sys_stime(void) +{ + rtctime_t buf; + + if (super() == 0) + { + udata->u_error = EPERM; + return -1; + } + + uget(tvec, &buf, sizeof(rtctime_t)); + sttime(&buf); + return 0; +} +#undef tvec +#endif + +/********************************* + SYSCALL times(struct tms *buf); +*********************************/ +#ifdef MODULE_sys_times +#define buf ((struct tms *)udata->u_argn0) +int +sys_times(void) +{ + if (valadr(buf, sizeof(struct tms))) { + disable(); + if (udata->u_insys) + { + bcopy(&udata->u_ptab->p_utime, buf, 4 * sizeof(unsigned long)); + bcopy(&Clock, &buf->tms_etime, sizeof(unsigned long)); + } + else + { + uput(&udata->u_ptab->p_utime, buf, 4 * sizeof(unsigned long)); + uput(&Clock, &buf->tms_etime, sizeof(unsigned long)); + } + enable(); + return 0; + } + return -1; +} +#undef buf +#endif + +/********************************** + SYSCALL brk(char *addr); +**********************************/ +#ifdef MODULE_sys_brk +#define addr ((char *)udata->u_argn0) +int +sys_brk(void) +{ + if ((unsigned int)addr < (unsigned int)USER_START /*|| + (addr + 256) >= (char *)udata->u_sp*/) + { + udata->u_error = ENOMEM; + return -1; + } + + udata->u_ptab->p_break = (unsigned int)addr; + return 0; +} +#undef addr +#endif + +/************************************ + SYSCALL sbrk(unsigned int incr); +************************************/ +#ifdef MODULE_sys_sbrk +#define incr *(unsigned int *)&udata->u_argn0 +int +sys_sbrk(void) +{ + register unsigned int oldbrk = udata->u_ptab->p_break; + + if (incr) + { + incr += oldbrk; /* set up udata for call to brk() */ + if (incr < oldbrk || sys_brk()) + { + return -1; + } + } + return (int)oldbrk; +} +#undef incr +#endif + +/************************************** + SYSCALL waitpid(int pid, int *statloc, int options); +**************************************/ +#ifdef MODULE_sys_waitpid +#define pid (int)udata->u_argn0 +#define statloc (int *)udata->u_argn1 +#define options (int)udata->u_argn0 +int +sys_waitpid(void) +{ + register ptab_t **ptp, *pt; + + if (!valadr((char *)statloc, sizeof(int))) + { + udata->u_error = EFAULT; + goto Err; + } + + /* See if we have any children. */ + disable(); + for (ptp = Ptab; ptp < Ptab + NPROGRAMS; ptp++) + { + pt = *ptp; + if ((unsigned char)(pt->p_status) != P_EMPTY && + pt->p_pptr == udata->u_ptab && + pt != udata->u_ptab) + { + enable(); + return dowait(); + } + } + enable(); + + udata->u_error = ECHILD; +Err: return -1; +} +#undef pid +#undef statloc +#undef options +#endif + +/************************************** + SYSCALL exit(int val); +**************************************/ +#ifdef MODULE_sys__exit +#define val (int)udata->u_argn0 +int +sys__exit(void) +{ + doexit(val, 0); + return -1; +} +#undef val +#endif + + +/* Subject of change in version 1.3h */ + +#ifdef MODULE_doexit +void +doexit(int val, int val2) +{ + register short j; + register ptab_t **ptp, *pt; + +#if DEBUG >= 2 + dprintf(2, "process %d exiting\n", udata->u_ptab->p_pid); +#endif + + for (j = 0; j < NUSERFILES; j++) + { + if (freefileentry(udata->u_ptab->p_files[j]) == 0) + { + filesys_doclose(j); + } + } + + sys_sync(); /* Not necessary, but a good idea. */ + + udata->u_ptab->p_exitval = (val<<8) | (val2 & 0xff); + + i_deref(udata->u_ptab->p_root); + i_deref(udata->u_ptab->p_cwd); + + /* Stash away child's execution tick counts in process table, + * overlaying some no longer necessary stuff. + */ + addtick(&udata->u_ptab->p_utime, &udata->u_ptab->p_cutime); + addtick(&udata->u_ptab->p_stime, &udata->u_ptab->p_cstime); + bcopy(&udata->u_ptab->p_utime, udata->u_ptab->p_zombie, + 2 * sizeof(unsigned long)); + + /* See if we have any children. Set child's parents to our parent */ + disable(); + for (ptp = Ptab; ptp < Ptab + NPROGRAMS; ptp++) + { + pt = *ptp; + if (pt->p_status && pt->p_pptr == udata->u_ptab && + pt != udata->u_ptab) + { + pt->p_pptr = udata->u_ptab->p_pptr; + } + } + enable(); + + /* Wake up a waiting parent, if any. */ +#if 0 /* temporary!!!!! */ + ssig((char *)udata->u_ptab->p_pptr, 0); +#endif + + udata->u_ptab->p_status = P_ZOMBIE; + + swapin(getproc()); + _panic(_("doexit: won't exit")); +} +#endif + + +/************************************** + SYSCALL fork(void); +**************************************/ + +#ifdef MODULE_sys_fork +int +sys_fork(void) +{ + return dofork(); +} +#endif + +/************************************** + SYSCALL pause(void); +**************************************/ + +#ifdef MODULE_sys_pause +int +sys_pause(void) +{ + kwait(NULL); /* P_PAUSE */ + udata->u_error = EINTR; + return -1; +} +#endif + +/**************************************** + SYSCALL signal(int sig, void (*func)()); +****************************************/ +#ifdef MODULE_sys_signal +#define sig (signal_t)udata->u_argn0 +#define func *((unsigned long *)&udata->u_argn1) +unsigned long +sys_signal(void) +{ + long retval = -1; +#if 1 /* fixes IAR internal error */ + signal_t mysig; + void (*myfunc)(signal_t); + void (**myvec)(signal_t); +#endif + + disable(); + /* SIGKILL & SIGSTOP can't be caught !!!*/ + if (sig == __NOTASIGNAL || + sig == SIGKILL || + ((unsigned)sig) > NSIGS) { + udata->u_error = EINVAL; + goto Err; + } + if (func == SIG_IGN) + udata->u_ptab->p_ignored |= sigmask(sig); + else { +#if 0 /* Nick removed this for IAR compiler... now back in again... OUT!! */ + if ((sig_t)func != SIG_DFL && ((char *)func) < PROGBASE) { + udata->u_error = EFAULT; + goto Err; + } +#endif + udata->u_ptab->p_ignored &= ~(sigmask(sig)); + } + retval = (long)udata->u_ptab->p_sigvec[sig-1]; +#if 1 /* fixes IAR internal error */ + mysig = sig; + myvec = udata->u_ptab->p_sigvec + (mysig - 1); + myfunc = (void (*)(signal_t))func; + *myvec = myfunc; +#else + udata->u_ptab->p_sigvec[sig-1] = (void (*)(signal_t))func; +#endif +Err: enable(); + udata->u_retval1 = ((int *)&retval)[1]; + return retval; +} +#undef sig +#undef func +#endif + +/************************************** + SYSCALL kill(int pid, int sig); +**************************************/ +#ifdef MODULE_sys_kill +#define pid (int)udata->u_argn0 +#define sig (int)udata->u_argn1 +int +sys_kill(void) +{ + register ptab_t *pt; + + if (sig == __NOTASIGNAL || (unsigned char)sig >= NSIGS || pid <= 1) { + udata->u_error = EINVAL; + return -1; + } + + pt = findprocess(pid); + if (pt == NULL) + { + return -1; + } + + sendsig(pt, sig); + return 0; +} +#undef pid +#undef sig +#endif + +/******************************** + SYSCALL alarm(unsigned int secs); +********************************/ +#ifdef MODULE_sys_alarm +#define secs (unsigned int)udata->u_argn0 +int +sys_alarm(void) +{ + register int retval; + + disable(); + retval = udata->u_ptab->p_alarm; + udata->u_ptab->p_alarm = secs; + enable(); + return retval; +} +#undef secs +#endif + +/******************************** + SYSCALL reboot(char p1, char p2); +********************************/ +#ifdef MODULE_sys_reboot +#define p1 (char)udata->u_argn0 +#define p2 (char)udata->u_argn1 +int +sys_reboot(void) +{ + if (super() == 0) + { + udata->u_error = EPERM; + return -1; + } + + if (p1 == 'm' && p2 == 'e') + { +#if 0 /* temporary ndef UTIL*/ /* Nick */ + while (sdevs[1].swr1 & 1) + ; /* wait for tx on SERIAL 1 to finish */ +#endif + abort(); + } + + udata->u_error = EINVAL; + return -1; +} +#undef p1 +#undef p2 +#endif + +/*********************************** + SYSCALL getset(int what, int parm1 ...); +***********************************/ +#ifdef MODULE_sys_getset +#define what (int)udata->u_argn0 +#define parm1 (int)udata->u_argn1 +#define parm2 (int)udata->u_argn2 +int +sys_getset(void) +{ + register int old; + register ptab_t *pt; + register signed char nice; + + switch (what) { + case GET_PID: + return udata->u_ptab->p_pid; + case GET_PPID: + return udata->u_ptab->p_pptr->p_pid; + case GET_UID: + return udata->u_ptab->p_uid; + case SET_UID: + if (super() || udata->u_ptab->p_uid == parm1) { + udata->u_ptab->p_uid = parm1; + udata->u_ptab->p_euid = parm1; + goto Ok; + } + break; + case GET_EUID: + return udata->u_ptab->p_euid; + case GET_GID: + return udata->u_ptab->p_gid; + case SET_PRIO: + /* parm1 = PID, parm2 = nice value */ + pt = findprocess(parm1); + if (pt == NULL) + { + goto Err; + } + nice = min_int((int)parm2, PRIO_MAX); + if (nice < PRIO_MIN) nice = PRIO_MIN; + if (!super()) + { + if (nice < 0) + { + nice = 0; + } + } + pt->p_nice = nice; + pt->p_cprio = (nice < 1) ? + (((-nice)*(TICKSPERSEC - MAXTICKS)) / + (- PRIO_MIN)) + MAXTICKS : + 1 + (((PRIO_MAX - nice) * MAXTICKS) / + PRIO_MAX); + goto Ok; + case GET_EGID: + return udata->u_ptab->p_egid; + case GET_PRIO: + return udata->u_ptab->p_cprio; /* must be p_prio */ + case SET_GID: + if (super() || udata->u_ptab->p_gid == parm1) { + udata->u_ptab->p_gid = parm1; + udata->u_ptab->p_egid = parm1; + goto Ok; + } + break; + case SET_UMASK: + old = udata->u_ptab->p_umask; + udata->u_ptab->p_umask = parm1 & S_UMASK; + return old; + case SET_TRACE: +#if DEBUG + old = udata->u_ptab->p_traceme; + udata->u_ptab->p_traceme = parm1; + return old; +#else + goto Ok; +#endif + case SET_DEBUG: +#if DEBUG + old = udata->u_ptab->p_debugme; + udata->u_ptab->p_debugme = parm1; + return old; +#else + goto Ok; +#endif + } + udata->u_error = EPERM; +Err: return -1; +Ok: return 0; +} +#undef what +#undef parm1 +#undef parm2 +#undef nice +#endif + diff --git a/src/nos/filesys/systrace.c b/src/nos/filesys/systrace.c new file mode 100644 index 00000000..34e9f7d1 --- /dev/null +++ b/src/nos/filesys/systrace.c @@ -0,0 +1,369 @@ +/* systrace.c by Nick for UZI180 */ + +#include +#include +#include +#include +#include +#include +#include "z80/asm.h" +#include "uzi/devio.h" +#include "uzi/rtc.h" +#include "uzi/filesys.h" +#include "uzi/xip.h" +#include "uzi/process.h" +#include "uzi/usrmem.h" +#include "uzi/systrace.h" +#include "nos/global.h" /* for ksignal() */ +#include +#include "po/messages.h" + +/* char ugetc(char *ptr); */ +#define ugetc(ptr) (ugetw(ptr) & 0xff) + +struct systrace_entry + { + char return_type; + _char *function_name; + char argument_type[4]; + }; + +#ifdef MODULE +#define STATIC +extern struct systrace_entry systrace_table[]; +extern int systrace_limit; +extern _char *syserror_table[]; +extern int syserror_limit; +#else +#define STATIC static +#define MODULE_systrace_table +#define MODULE_syserror_table +#define MODULE_systrace_entry +#define MODULE_systrace_exit +#define MODULE_systrace_dump +#endif + +#ifdef MODULE_systrace_table +STATIC struct systrace_entry systrace_table[] = + { + { TYPE_DEC, N_("access"), { TYPE_STR, TYPE_OCT, 0, 0 } }, + { TYPE_DEC, N_("alarm"), { TYPE_DEC, 0, 0, 0 } }, + { TYPE_HEX, N_("brk"), { TYPE_HEX, 0, 0, 0 } }, + { TYPE_DEC, N_("chdir"), { TYPE_STR, 0, 0, 0 } }, + { TYPE_DEC, N_("chmod"), { TYPE_STR, TYPE_OCT, 0, 0 } }, + { TYPE_DEC, N_("chown"), { TYPE_STR, TYPE_DEC, TYPE_DEC, 0 } }, + { TYPE_DEC, N_("close"), { TYPE_DEC, 0, 0, 0 } }, + { TYPE_DEC, N_("getset"), { TYPE_HEX, TYPE_HEX, TYPE_HEX, 0 } }, /* { TYPE_DEC, N_("creat"), { TYPE_STR, TYPE_HEX, 0, 0 } }, */ + { TYPE_DEC, N_("dup"), { TYPE_DEC, 0, 0, 0 } }, + { TYPE_DEC, N_("dup2"), { TYPE_DEC, TYPE_DEC, 0, 0 } }, + { TYPE_DEC, N_("execve"), { TYPE_STR, TYPE_HEX, TYPE_HEX, 0 } }, + { TYPE_DEC, N_("_exit"), { TYPE_DEC, 0, 0, 0 } }, + { TYPE_DEC, N_("fork"), { 0, 0, 0, 0 } }, + { TYPE_DEC, N_("fstat"), { TYPE_DEC, TYPE_HEX, 0, 0 } }, + { TYPE_DEC, N_("getfsys"), { TYPE_HEX, TYPE_HEX, 0, 0 } }, + { TYPE_HEX, N_("ioctl"), { TYPE_DEC, TYPE_HEX, TYPE_HEX, 0 } }, + { TYPE_DEC, N_("kill"), { TYPE_DEC, TYPE_DEC, 0, 0 } }, + { TYPE_DEC, N_("link"), { TYPE_STR, TYPE_STR, 0, 0 } }, + { TYPE_DEC, N_("mknod"), { TYPE_STR, TYPE_OCT, 0, 0 } }, + { TYPE_DEC, N_("mount"), { TYPE_STR, TYPE_STR, 0, 0 } }, + { TYPE_DEC, N_("open"), { TYPE_STR, TYPE_HEX, TYPE_OCT, 0 } }, + { TYPE_DEC, N_("pause"), { 0, 0, 0, 0 } }, + { TYPE_DEC, N_("pipe"), { TYPE_HEX, 0, 0, 0 } }, + { TYPE_HEX, N_("read"), { TYPE_DEC, TYPE_HEX, TYPE_HEX, 0 } }, + { TYPE_HEX, N_("sbrk"), { TYPE_HEX, 0, 0, 0 } }, + { TYPE_HEX, N_("lseek"), { TYPE_DEC, TYPE_HEX, TYPE_HEX, TYPE_DEC } }, + { TYPE_HEX, N_("signal"), { TYPE_DEC, TYPE_HEX, TYPE_HEX, 0 } }, + { TYPE_DEC, N_("stat"), { TYPE_STR, TYPE_HEX, 0, 0 } }, + { TYPE_DEC, N_("stime"), { TYPE_HEX, 0, 0, 0 } }, + { TYPE_DEC, N_("sync"), { 0, 0, 0, 0 } }, + { TYPE_HEX, N_("time"), { TYPE_HEX, 0, 0, 0 } }, + { TYPE_DEC, N_("times"), { TYPE_HEX, 0, 0, 0 } }, + { TYPE_DEC, N_("umount"), { TYPE_STR, 0, 0, 0 } }, + { TYPE_DEC, N_("unlink"), { TYPE_STR, 0, 0, 0 } }, + { TYPE_DEC, N_("utime"), { TYPE_STR, TYPE_HEX, 0, 0 } }, + { TYPE_DEC, N_("waitpid"), { TYPE_DEC, TYPE_HEX, TYPE_HEX, 0 } }, + { TYPE_HEX, N_("write"), { TYPE_DEC, TYPE_BIN, TYPE_HEX, 0 } }, + { TYPE_DEC, N_("reboot"), { TYPE_HEX, TYPE_HEX, 0, 0 } }, + { TYPE_DEC, N_("symlink"), { TYPE_STR, TYPE_STR, 0, 0 } }, + { TYPE_DEC, N_("chroot"), { TYPE_STR, 0, 0, 0 } }, + { TYPE_DEC, N_("falign"), { TYPE_DEC, TYPE_DEC, 0, 0 } } + }; + +STATIC int systrace_limit = + sizeof(systrace_table) / sizeof(systrace_table[0]); +#endif + +#ifdef MODULE_syserror_table +STATIC _char *syserror_table[] = + { + N_(""), + N_("EPERM"), + N_("ENOENT"), + N_("ESRCH"), + N_("EINTR"), + N_("EIO"), + N_("ENXIO"), + N_("E2BIG"), + N_("ENOEXEC"), + N_("EBADF"), + N_("ECHILD"), + N_("EAGAIN"), + N_("ENOMEM"), + N_("EACCES"), + N_("EFAULT"), + N_("ENOTBLK"), + N_("EBUSY"), + N_("EEXIST"), + N_("EXDEV"), + N_("ENODEV"), + N_("ENOTDIR"), + N_("EISDIR"), + N_("EINVAL"), + N_("ENFILE"), + N_("EMFILE"), + N_("ENOTTY"), + N_("ETXTBSY"), + N_("EFBIG"), + N_("ENOSPC"), + N_("ESPIPE"), + N_("EROFS"), + N_("EMLINK"), + N_("EPIPE"), + N_("EDOM"), + N_("ERANGE"), + N_("EDEADLK"), + N_("ENAMETOOLONG"), + N_("ENOLCK"), + N_("EINVFNC"), + N_("ENOTEMPTY"), + N_("ELOOP"), + N_("ESHELL") + }; + +STATIC int syserror_limit = + sizeof(syserror_table) / sizeof(syserror_table[0]); +#endif + +#ifdef MODULE_systrace_entry +void +systrace_entry(void) + { + int *u_argn_ptr; + register unsigned char i; + unsigned int value; + unsigned char type; + +/* abyte('{'); */ +/* ahexw(*(int *)(0xc931 + 0x9a)); */ + +/* dprintf(0, "word at 0x83f8 = 0x%x\n", ugetw(0x83f8)); */ +#if 1 + if (udata->u_ptab->p_traceme == 0) + { + return; + } +#endif + + _dprintf(0, _("\tpid %d, call %d"), + udata->u_ptab->p_pid, udata->u_callno); + + if (/*udata->u_callno < 0 ||*/ udata->u_callno >= systrace_limit) + { + _panic(_("can't trace invalid syscall index")); + } + + abyte(','); + abyte(' '); + _dprintf(0, systrace_table[udata->u_callno].function_name); + abyte('('); + + u_argn_ptr = &udata->u_argn0; + for (i = 0; i < 4; i++) + { + type = systrace_table[udata->u_callno].argument_type[i]; + if (type == 0) + { + break; + } + + if (i) + { + abyte(','); + abyte(' '); + } + + value = *u_argn_ptr++; + systrace_dump(value, udata->u_argn2, type); + } + + abyte(')'); + acrlf(); + } +#endif + + +#ifdef MODULE_systrace_exit +void +systrace_exit(void) + { + register unsigned char type; + +/* abyte('}'); */ +/* ahexw(*(int *)(0xc931 + 0x9a)); */ +#if 1 + if (udata->u_ptab->p_traceme == 0) + { + return; + } +#endif + + _dprintf(0, _("\t\tpid %d, call %d, ret "), + udata->u_ptab->p_pid, udata->u_callno); + + if (udata->u_callno == 23 /*7*/ && udata->u_error == 0) /* read() */ + { + systrace_dump(udata->u_argn1, udata->u_retval, TYPE_BIN); + abyte(','); + abyte(' '); + } + + type = systrace_table[udata->u_callno].return_type; + systrace_dump(udata->u_retval, 0, type); + + /* test for lseek(), signal(), time() yielding long return */ + if ((udata->u_callno == 25 || + udata->u_callno == 26 || + udata->u_callno == 30) && udata->u_error == 0) + { + abyte(','); + abyte(' '); + systrace_dump(udata->u_retval1, 0, type); + } + + _dprintf(0, _(", err %d"), udata->u_error); + if (udata->u_error > 0 && udata->u_error < syserror_limit) + { + abyte(' '); + abyte('('); + _dprintf(0, syserror_table[udata->u_error]); + abyte(')'); + } + + acrlf(); +/* dprintf(0, "word at 0x83f8 = 0x%x\n", ugetw(0x83f8)); */ + } +#endif + +#ifdef MODULE_systrace_dump +STATIC void +systrace_dump(unsigned int value, unsigned int count, unsigned char type) + { + register unsigned char j, c; + unsigned char max, flag, *data; + + max = 32; + flag = 1; + + switch (type) + { + + case TYPE_BIN: + max = 8; + if (count <= 8) + { + max = count; /* size of buffer at (char *)value */ + flag = 0; /* whether to show ellipsis */ + } + /* fall thru */ + + case TYPE_STR: + abyte('"'); + + data = (unsigned char *)value; + for (j = 0; j < max; j++) + { + c = ugetc(data++); + if (c == 0 && max > 16) + { + flag = 0; /* whether to show ellipsis */ + break; + } + if (c < 0x20 || c >= 0x80) + { + abyte('\\'); + switch (c) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + abyte('0' + c); + break; + case 9: + abyte('t'); + break; + case 0xa: + abyte('n'); + break; + case 0xd: + abyte('r'); + break; + default: + _dprintf(0, _("x%x"), (int)c); + break; + } + } + else + { + if (c == '\\' || c == '"') + { + abyte('\\'); + } + abyte(c); + } + } + + if (flag) + { + abyte('.'); + abyte('.'); + abyte('.'); + } + + abyte('"'); + break; + + case TYPE_OCT: + if (value < 8) + { + abyte('0' + value); + } + else + { + _dprintf(0, _("0%o"), value); + } + break; + + case TYPE_DEC: + _dprintf(0, _("%d"), value); + break; + + case TYPE_HEX: + if (value < 10) + { + abyte('0' + value); + } + else + { + _dprintf(0, _("0x%x"), value); + } + break; + } + } +#endif + diff --git a/src/nos/filesys/usrmem.c b/src/nos/filesys/usrmem.c new file mode 100644 index 00000000..7ad9d9d9 --- /dev/null +++ b/src/nos/filesys/usrmem.c @@ -0,0 +1,73 @@ +/* usrmem.c by Nick for NOS/UZI implementation + * + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + General utility subroutines +**********************************************************/ + +#include +#include +#include "uzi/usrmem.h" + +#ifndef MODULE +#define MODULE_usrget +#define MODULE_usrget_str +#define MODULE_usrget_int +#define MODULE_usrput +#define MODULE_usrput_int +#endif + +#ifdef MODULE_usrget +void *usrget(void *dest, const void *src, size_t count) + { + return memcpy(dest, src, count); + } +#endif + +#ifdef MODULE_usrget_str +void *usrget_str(void *dest, const void *src, size_t count) + { + return memccpy(dest, src, 0, count); + } +#endif + +#ifdef MODULE_usrget_int +int usrget_int(const void *src) + { + int value; + + usrget(&value, src, sizeof(value)); + return value; + } +#endif + +#ifdef MODULE_usrput +void *usrput(void *dest, const void *src, size_t count) + { + return memcpy(dest, src, count); + } +#endif + +#ifdef MODULE_usrput_int +void usrput_int(void *dest, int value) + { + usrput(dest, &value, sizeof(value)); + } +#endif + diff --git a/src/nos/filesys/xfs.c b/src/nos/filesys/xfs.c new file mode 100644 index 00000000..117c7e54 --- /dev/null +++ b/src/nos/filesys/xfs.c @@ -0,0 +1,1074 @@ +/* + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + UZIX system calls wrappers, used by UZIX utilities +**********************************************************/ + +#ifdef SYS +#define xfs_open open +#define xfs_close close +#define xfs_creat creat +#define xfs_link link +#define xfs_symlink symlink +#define xfs_unlink unlink +#define xfs_read read +#define xfs_write write +#define xfs_lseek lseek +#define xfs_chdir chdir +#define xfs_mknod mknod +#define xfs_sync sync +#define xfs_access access +#define xfs_chmod chmod +#define xfs_chown chown +#define xfs_stat stat +#define xfs_fstat fstat +#define xfs_falign falign +#define xfs_dup dup +#define xfs_dup2 dup2 +#define xfs_umask umask +#define xfs_sysdebug sysdebug +#define xfs_systrace systrace +#define xfs_getfsys getfsys +#define xfs_ioctl ioctl +#define xfs_mount mount +#define xfs_umount umount +#define xfs_time time +#endif + +#ifdef _SYS +#define xfs_open _open +#define xfs_close _close +#define xfs_creat _creat +#define xfs_link _link +#define xfs_symlink _symlink +#define xfs_unlink _unlink +#define xfs_read _read +#define xfs_write _write +#define xfs_lseek _lseek +#define xfs_chdir _chdir +#define xfs_mknod _mknod +#define xfs_sync _sync +#define xfs_access _access +#define xfs_chmod _chmod +#define xfs_chown _chown +#define xfs_stat _stat +#define xfs_fstat _fstat +#define xfs_falign _falign +#define xfs_dup _dup +#define xfs_dup2 _dup2 +#define xfs_umask _umask +#define xfs_sysdebug _sysdebug +#define xfs_systrace _systrace +#define xfs_getfsys _getfsys +#define xfs_ioctl _ioctl +#define xfs_mount _mount +#define xfs_umount _umount +#define xfs_time _time +#endif + +#include +#include +#include +#include +#include +#include +#include +#include "z80/asm.h" +#include "uzi/devio.h" +#include "uzi/rtc.h" +#include "uzi/filesys.h" +#include "uzi/xip.h" +#include "uzi/process.h" +#include "uzi/scall1.h" +#include "uzi/scall2.h" +#include "uzi/systrace.h" +#include "uzi/xfs.h" +#include +#include +#include "po/messages.h" + +#ifndef MODULE +#define MODULE_xfs_init +#define MODULE_xfs_end +#define MODULE_xfs_open +#define MODULE_xfs_close +#define MODULE_xfs_creat +#define MODULE_xfs_link +#define MODULE_xfs_symlink +#define MODULE_xfs_unlink +#define MODULE_xfs_read +#define MODULE_xfs_write +#define MODULE_xfs_lseek +#define MODULE_xfs_chdir +#define MODULE_xfs_mknod +#define MODULE_xfs_sync +#define MODULE_xfs_access +#define MODULE_xfs_chmod +#define MODULE_xfs_chown +#define MODULE_xfs_stat +#define MODULE_xfs_fstat +#define MODULE_xfs_falign +#define MODULE_xfs_dup +#define MODULE_xfs_dup2 +#define MODULE_xfs_umask +#define MODULE_xfs_sysdebug +#define MODULE_xfs_systrace +#define MODULE_xfs_getfsys +#define MODULE_xfs_ioctl +#define MODULE_xfs_mount +#define MODULE_xfs_umount +#define MODULE_xfs_time +#endif + +/* xfs_init() originally had a boolean parameter "waitfordisk" */ +#ifdef MODULE_xfs_init +void +xfs_init(boot_dev) + dev_t boot_dev; +{ + udata_t rq; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; /* for fmount(), i_open() and i_ref() */ + +/* abyte('c'); */ + bufinit(); +/* abyte('d'); */ + d_init(); +/* abyte('e'); */ + i_init(); /* Nick */ +/* abyte('f'); */ + fs_init(); /* Nick */ +/* abyte('g'); */ + +#if 0 + /* Open the console tty device */ + if (d_open(TTYDEV) != 0) + { + _panic(_("no tty")); + } +#endif + + root_dev = boot_dev; + if (root_dev != NULLDEV) + { +#ifdef _MSX_DOS + if (waitfordisk) + { + _printf(_("Insert disk and press RETURN: ")); + while (getchar() != '\n') + ; + } +#endif + + /* Mount the root device */ +/* abyte('+'); */ + if (fmount(root_dev, NULL, 0)) + { +/* abyte('-'); */ + _panic(_("no filesys")); + } + +/* abyte('*'); */ + root_ino = i_open(root_dev, ROOTINODE); +/* abyte('/'); */ + if (root_ino == 0) + { + _panic(_("no root")); + } + + Ptab[0]->p_cwd = root_ino; + Ptab[0]->p_root = root_ino; + i_ref(root_ino); + } + + rdtime(&Ptab[0]->p_time); /* this could be changed to time() */ + udata_p = NULL; +} +#endif + + +#ifdef MODULE_xfs_end +void +xfs_end(void) +{ + udata_t rq; + register int j; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + + for (j = 0; j < NUSERFILES; j++) + { + if (!freefileentry(udata->u_ptab->p_files[j])) + { + filesys_doclose(j); + } + } + + xfs_sync(); /* Not necessary, but a good idea. */ + /* already done by xfs_sync(): udata_p = NULL; */ +} +#endif + + +#ifdef MODULE_xfs_open +int +xfs_open(const char *name, int flag, ...) +{ + int result; + va_list arguments; + udata_t rq; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)name; + udata->u_argn1 = (unsigned int)flag; + if (flag & O_CREAT) + { + va_start(arguments, flag); + udata->u_argn2 = (unsigned int)va_arg(arguments, mode_t); + va_end(arguments); + } + else + { + udata->u_argn2 = 0; /* only needed for systrace */ + } + udata->u_callno = 20; /* only needed for systrace */ + systrace_entry(); + result = sys_open(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_close +int +xfs_close(uindex) + int uindex; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = uindex; + udata->u_callno = 6; /* only needed for systrace */ + systrace_entry(); + result = sys_close(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_creat +int +xfs_creat(name, mode) + const char *name; + mode_t mode; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)name; + udata->u_argn1 = O_CREAT|O_WRONLY|O_TRUNC; + udata->u_argn2 = (unsigned int)mode; + udata->u_callno = 20; /* only needed for systrace */ + systrace_entry(); + result = sys_open(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_link +int +xfs_link(name1, name2) + char *name1; + char *name2; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)name1; + udata->u_argn1 = (unsigned int)name2; + udata->u_callno = 17; /* only needed for systrace */ + systrace_entry(); + result = sys_link(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_symlink +int +xfs_symlink(name1, name2) + char *name1; + char *name2; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)name1; + udata->u_argn1 = (unsigned int)name2; + udata->u_callno = 38; /* only needed for systrace */ + systrace_entry(); + result = sys_symlink(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_unlink +int +xfs_unlink(const char *path) +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)path; + udata->u_callno = 33; /* only needed for systrace */ + systrace_entry(); + result = sys_unlink(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_read +int +xfs_read(d, buf, nbytes) + int d; + void *buf; + size_t nbytes; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)d; + udata->u_argn1 = (unsigned int)buf; + udata->u_argn2 = (unsigned int)nbytes; + udata->u_callno = 23; + systrace_entry(); + result = sys_readwrite(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_write +int +xfs_write(d, buf, nbytes) + int d; + const void *buf; + size_t nbytes; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)d; + udata->u_argn1 = (unsigned int)buf; + udata->u_argn2 = (unsigned int)nbytes; + udata->u_callno = 36; + systrace_entry(); + result = sys_readwrite(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_lseek +off_t +xfs_lseek(file, offset, flag) + int file; + off_t offset; + int flag; +{ + udata_t rq; + off_t result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)file; + udata->u_argn1 = (unsigned int)offset; + udata->u_argn2 = (unsigned int)(offset >> 16); + udata->u_argn3 = (unsigned int)flag; + udata->u_callno = 25; /* only needed for systrace */ + systrace_entry(); + result = sys_lseek(); + udata->u_retval = (int)result; /* only needed for systrace */ + systrace_exit(); + if (result == (off_t)-1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_chdir +int +xfs_chdir(dir) + char *dir; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)dir; + udata->u_callno = 3; /* only needed for systrace */ + systrace_entry(); + result = sys_chdir(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_mknod +int +xfs_mknod(name, mode, dev) + char *name; + mode_t mode; + int dev; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)name; + udata->u_argn1 = (unsigned int)mode; + udata->u_argn2 = (unsigned int)dev; + udata->u_callno = 18; /* only needed for systrace */ + systrace_entry(); + result = sys_mknod(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_sync +void +xfs_sync() +{ +#if 1 /* this is probably not necessary */ + udata_t rq; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_callno = 29; /* only needed for systrace */ + systrace_entry(); +#endif + sys_sync(); +#if 1 /* this is probably not necessary */ + udata->u_retval = 0; /* only needed for systrace */ + systrace_exit(); +#endif + udata_p = NULL; +} +#endif + + +#ifdef MODULE_xfs_access +int +xfs_access(path, mode) + char *path; + int mode; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)path; + udata->u_argn1 = (unsigned int)mode; + /* udata->u_callno = 0; */ /* only needed for systrace */ + systrace_entry(); + result = sys_access(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_chmod +int +xfs_chmod(path, mode) + char *path; + mode_t mode; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)path; + udata->u_argn1 = (unsigned int)mode; + udata->u_callno = 4; /* only needed for systrace */ + systrace_entry(); + result = sys_chmod(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_chown +int +xfs_chown(path, owner, group) + char *path; + int owner; + int group; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)path; + udata->u_argn1 = (unsigned int)owner; + udata->u_argn2 = (unsigned int)group; + udata->u_callno = 5; /* only needed for systrace */ + systrace_entry(); + result = sys_chown(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_stat +int +xfs_stat(path, buf) + char *path; + struct stat *buf; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)path; + udata->u_argn1 = (unsigned int)buf; + udata->u_callno = 27; + systrace_entry(); + result = sys_statfstat(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_fstat +int +xfs_fstat(fd, buf) + int fd; + struct stat *buf; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)fd; + udata->u_argn1 = (unsigned int)buf; + udata->u_callno = 13; + systrace_entry(); + result = sys_statfstat(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + +#if 1 /* Nick free bitmap */ + +#ifdef MODULE_xfs_falign +int +xfs_falign(fd, parm) + int fd; + int parm; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)fd; + udata->u_argn1 = (unsigned int)parm; + udata->u_callno = 40; /* only needed for systrace */ + systrace_entry(); + result = sys_falign(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif +#endif + + +#ifdef MODULE_xfs_dup +int +xfs_dup(oldd) + int oldd; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)oldd; + udata->u_callno = 8; /* only needed for systrace */ + systrace_entry(); + result = sys_dup(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_dup2 +int +xfs_dup2(oldd, newd) + int oldd; + int newd; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)oldd; + udata->u_argn1 = (unsigned int)newd; + udata->u_callno = 9; /* only needed for systrace */ + systrace_entry(); + result = sys_dup2(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_umask +int +xfs_umask(mask) + int mask; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)SET_UMASK; + udata->u_argn1 = (unsigned int)mask; + udata->u_callno = 7; /* only needed for systrace */ + systrace_entry(); + result = sys_getset(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_sysdebug +int +xfs_sysdebug(level) + int level; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)SET_DEBUG; + udata->u_argn1 = (unsigned int)level; + udata->u_callno = 7; /* only needed for systrace */ + systrace_entry(); + result = sys_getset(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_systrace +int +xfs_systrace(level) + int level; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)SET_TRACE; + udata->u_argn1 = (unsigned int)level; + udata->u_callno = 7; /* only needed for systrace */ + systrace_entry(); + result = sys_getset(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_getfsys +int +xfs_getfsys(dev, buf) + int dev; + void *buf; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)dev; + udata->u_argn1 = (unsigned int)buf; + udata->u_callno = 14; /* only needed for systrace */ + systrace_entry(); + result = sys_getfsys(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_ioctl +int +xfs_ioctl(int fd, int request, ...) +{ + int result; + va_list arguments; + udata_t rq; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)fd; + udata->u_argn1 = (unsigned int)request; + va_start(arguments, request); + udata->u_argn2 = (unsigned int)va_arg(arguments, void *); + va_end(arguments); + udata->u_callno = 15; /* only needed for systrace */ + systrace_entry(); + result = sys_ioctl(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_mount +int +xfs_mount(spec, dir, rwflag) + char *spec; + char *dir; + int rwflag; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)spec; + udata->u_argn1 = (unsigned int)dir; + udata->u_argn2 = (unsigned int)rwflag; + udata->u_callno = 19; + systrace_entry(); + result = sys_mountumount(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_umount +int +xfs_umount(spec) + char *spec; +{ + udata_t rq; + int result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)spec; + udata->u_callno = 32; + systrace_entry(); + result = sys_mountumount(); + udata->u_retval = result; /* only needed for systrace */ + systrace_exit(); + if (result == -1) + { + errno = udata->u_error; + } + udata_p = NULL; + return result; +} +#endif + + +#ifdef MODULE_xfs_time +time_t +xfs_time(tvec) + time_t *tvec; +{ + udata_t rq; + time_t result; + + memset(&rq, 0, sizeof(rq)); + udata_p = &rq; + udata->u_ptab = Ptab[0]; + udata->u_insys = 1; + udata->u_argn0 = (unsigned int)tvec; + udata->u_callno = 30; /* only needed for systrace */ + systrace_entry(); + result = sys_time(); + udata->u_retval = (int)result; /* only needed for systrace */ + systrace_exit(); + if (result == (time_t)-1) /* can this really happen? */ + { + errno = udata->u_error; /* though no errors defined by SUSV3 */ + } + udata_p = NULL; + return result; +} +#endif + diff --git a/src/nos/filesys/xip.c b/src/nos/filesys/xip.c new file mode 100644 index 00000000..55d37e79 --- /dev/null +++ b/src/nos/filesys/xip.c @@ -0,0 +1,1527 @@ +/* xip.c by Nick for NOS/UZI implementation + * + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + Filesystem related routines for XIP system +**********************************************************/ + +#include +#include +#include +#include +#include "z80/asm.h" +#include "uzi/devio.h" +#include "uzi/rtc.h" +#include "uzi/filesys.h" +#include "uzi/xip.h" +#include "uzi/process.h" +#include "uzi/maxmin.h" + +#ifndef DEBUG +#define DEBUG 0 +#endif + +#ifndef MODULE +#define MODULE_xip_align +#define MODULE_xip_ualign +#define MODULE_xip_examine +#define MODULE_xip_align_chase +#define MODULE_xip_align_bmap +#define MODULE_xip_align_reverse +#define MODULE_xip_align_recurse +#define MODULE_xip_search +#define MODULE_xip_reserve +#define MODULE_xip_find +#define MODULE_xip_get +#define MODULE_xip_set +#endif + +#ifdef UTIL /* rather a hack indeed */ +#define EISALIGN 42 /* 42 File is already aligned */ +#define ENOALIGN 43 /* 43 File is not aligned */ +#define ETOOSHORT 44 /* 44 File is too short, or hole */ +#define ENOREGALIGN 45 /* 42 Not a regular or aligned file */ +#define ENOLCKFS 46 /* 45 Not a locking filesystem */ +#define ECORRUPTFS 47 /* 46 Filesystem is corrupt */ +#endif + +/* Returns true if the magic number of a superblock is ok ??? not used */ +#define gooddev(dev) ((dev)->s_mounted == SMOUNTED) + +#define blockinodes(blk) ((blk) << DINODESPERBLOCKLOG) +#define devinodes(dev) blockinodes((dev)->s_isize) +#define inodeblock(dev,ino) (((ino) >> DINODESPERBLOCKLOG) + (dev)->s_reserv) +#define inodeoffset(ino) ((ino) & DINODESPERBLOCKMASK) + +#ifdef MODULE_xip_align +int +xip_align(cinode_t *ino, off_t size) + { + blkno_t i, j, k; + blkno_t blk, pos, /*inc,*/ newno; + blkno_t *region, regions, blocks; + filesys_t *dev; + dev_t devno; + cinode_t *other; + int flag, exclude, indirection; + +#if DEBUG >= 3 + dprintf(3, "xip_align(0x%x, %ld) starting\n", ino, size); +#endif + +/* return 0; */ + + /* prepare to access the given inode */ + devno = ino->c_dev; + dev = getfs(devno); + if (dev->s_bitmap_immov >= dev->s_bitmap_final) + { + udata->u_error = ENOLCKFS; /* not a locking filesystem */ +#if DEBUG >= 3 + dprintf(3, "xip_align() returning -1 a\n"); +#endif + return -1; + } + + /* validate the filetype, it must be non-aligned */ + if ((ino->c_node.i_mode & S_IFMT) == S_IFALIGN) + { + udata->u_error = EISALIGN; /* file is already aligned */ + return -1; + } + if ((ino->c_node.i_mode & S_IFMT) != S_IFREG) + { + udata->u_error = ENOREGALIGN; /* file not regular or aligned */ +#if DEBUG >= 3 + dprintf(3, "xip_ualign() returning -1 b\n"); +#endif + return -1; + } + + /* ensure the region list will fit in 512 bytes */ + regions = (size + REGION_BYTES - 1) >> REGION_LOG; + if (regions > (BUFSIZE / sizeof(blkno_t))) + { + udata->u_error = ENOSPC; /* size specified is too large */ +#if DEBUG >= 3 + dprintf(3, "xip_align() returning -1 c\n"); +#endif + return -1; + } + + /* ready to allocate the region list */ + region = (blkno_t *)tmpbuf(); + + /* calculate size in blocks, to resolve size of last region */ + blocks = (size + BUFSIZE - 1) >> BUFSIZELOG; + + /* allocate each region its physical memory address */ + pos = 0; + for (i = 0; i < regions; i++) + { + /* is this a full region, or the last partial region? */ + k = min_int(blocks - pos, REGION_BLOCKS); + + /* try to find contiguous aligned non-reserved blocks */ + j = xip_search(devno, k, dev->s_bitmap_immov, + dev->s_bitmap_final); + if (j == (blkno_t)-1) + { + /* there was not enough aligned space available */ + udata->u_error = ENOSPC; + + regions = i; + goto xip_align_error; + } + + /* found a suitable spot for the region, snarf it */ + region[i] = j; + if (xip_reserve(devno, j, k, 1, dev->s_bitmap_immov, + dev->s_bitmap_final)) + { + /* disk i/o error, or corrupt filesystem */ + /* udata->u_error = ENXIO */; + + regions = i; + goto xip_align_error; + } + + /* calculate file position for start of next region */ + pos += REGION_BLOCKS; + } + +#if DEBUG > 1 + dprintf(2, "processing my inode %d\n", ino->c_num); +#endif + + /* move the file's data into unoccupied blocks of each region */ + pos = 0; + for (i = 0; i < regions; i++) + { + /* is this a full region, or the last partial region? */ + k = min_int(blocks - pos, REGION_BLOCKS); + + /* loop through each block of the region individually */ + blk = region[i]; + for (j = 0; j < k; j++) + { + /* see if the target spot for this block is occupied */ + flag = xip_set(devno, blk, 1, dev->s_bitmap_block, + dev->s_bitmap_immov); + if (flag == -1) + { + /* disk i/o error, or corrupt filesystem */ + /* udata->u_error = ENXIO; */ + + goto xip_align_error; + } + + if (flag == 0) + { + /* no, move something in and possibly repeat */ + newno = xip_align_chase(dev, ino, blk, pos, + region, regions, blocks); + if (newno == (blkno_t)-1) + { + /* i/o error, or corrupt filesystem */ + /* udata->u_error = ENXIO; */ + + goto xip_align_error; + } + + /* eventually a non-target block was freed */ + if (xip_set(devno, newno, 0, + dev->s_bitmap_block, + dev->s_bitmap_immov) != 1) + { + /* disk error, or corrupt filesystem */ + /* udata->u_error = ENXIO; */ + + goto xip_align_error; + } + } + + blk++; + pos++; + } + } + + /* now, if any blocks remain to be swapped, traverse the entire */ + /* filesystem to find them, updating the filesystem as we move them */ + k = devinodes(dev); + for (j = ROOTINODE; j < k; j++) + { + /* scan inode bitmap via utility routine, looking for '1' */ + j = xip_find(devno, j, 1, 0, dev->s_bitmap_inode, + dev->s_bitmap_block); + if (j == (blkno_t)-1) + { + /* disk i/o error, or corrupt filesystem */ + /* udata->u_error = ENXIO; */ + + goto xip_align_error; + } + + if (j < ROOTINODE || j >= k) + { + break; /* not found, means no more inodes to search */ + } + + other = i_open(devno, j); + if (other == NULLINO) + { + /* disk i/o error, or corrupt filesystem */ + /* udata->u_error = ENXIO; */ + + goto xip_align_error; + } + +#if DEBUG > 1 + dprintf(2, "processing other inode %d\n", other->c_num); +#endif +#if 0 /* don't bother, since the S_IFMT bits will be invalid anyway */ + if (other->c_node.i_mode == 0) + { + i_deref(other); + continue; /* inode bitmap is bad, try to continue */ + } +#endif + + /* check mode */ + flag = other->c_node.i_mode & S_IFMT; + if (flag != S_IFALIGN && + flag != S_IFREG && + flag != S_IFDIR && + flag != S_IFLNK && + flag != S_IFBLK && + flag != S_IFCHR) + { + i_deref(other); + continue; /* inode's mode is bad, skip it, continue */ + } + + /* check blocks */ + if (flag == S_IFALIGN || flag == S_IFREG || + flag == S_IFDIR || flag == S_IFLNK) + { + /*pos = 0;*/ + /*inc = 1;*/ + indirection = 0; + exclude = (ino == other) ? 2 : (flag == S_IFALIGN); +#if 1 /* under construction */ + for (i = ((exclude == 1) ? DIRECTBLOCKS : 0); +#else + for (i = (exclude ? DIRECTBLOCKS : 0); +#endif + i <= DIRECTBLOCKS+INDIRECTBLOCKS; i++) + { + if (i == DIRECTBLOCKS) + { + /*inc = BUFSIZE / sizeof(blkno_t);*/ + indirection = 1; + } + else if (i == DIRECTBLOCKS+INDIRECTBLOCKS) + { + /* inc doesn't matter in this case */ + indirection = 2; + } + blk = other->c_node.i_addr[i]; +/* if (blk == 3840) dprintf(3, "bad @ %d,%d 0x%04x\n", other->c_num, i, &other->c_node.i_addr[i]); */ + if (blk) + { + pos = xip_align_recurse(dev, /*pos,*/ + ino, exclude, + &other->c_node.i_addr[i], + &other->c_dirty, indirection, + region, regions, blocks); + + /* move something into the freed spot, and possibly repeat */ + if (pos != (blkno_t)-1) + { + blk = xip_align_chase( + dev, ino, + blk, pos, + region, regions, blocks); + + if (blk == (blkno_t)-1) + { + /* disk i/o error, or corrupt filesystem */ + /* udata->u_error = ENXIO; */ + + break; /*return (blkno_t)-1;*/ + } + + /* eventually a non-target block was freed, indicate this */ + if (xip_set(devno, blk, 0, + dev->s_bitmap_block, + dev->s_bitmap_immov) + != 1) + { + /* disk i/o error, or corrupt filesystem */ + /* udata->u_error = ENXIO; */ + + break; /*return (blkno_t)-1;*/ /* corrupt filesystem */ + } + } + } + /*pos += inc;*/ + } + } + + i_deref(other); + } + + if (brelse((blkbuf_t *)region) < 0) + { + /* udata->u_error = something */ + +xip_align_error: + /* politely unreserve all regions reserved so far */ + for (i = 0; i < regions; i++) + { + /* in this case always unreserve a full sized region */ + xip_reserve(devno, region[i], + REGION_BLOCKS, 0, + dev->s_bitmap_immov, + dev->s_bitmap_final); + } + +#if DEBUG >= 3 + dprintf(3, "xip_align() returning -1 d\n"); +#endif + return -1; + } + + ino->c_node.i_mode = (ino->c_node.i_mode & ~S_IFMT) | S_IFALIGN; + ino->c_dirty = 1; + i_sync(); /* flushing inodes */ + +#if DEBUG >= 3 + dprintf(3, "xip_align() returning 0, success\n"); +#endif + return 0; /* successfully aligned the file */ + } +#endif + + +#ifdef MODULE_xip_ualign +int +xip_ualign(cinode_t *ino, off_t size) + { + blkno_t i, j, pos; + blkno_t *region, regions, blocks; + filesys_t *dev; + dev_t devno; + +#if DEBUG >= 3 + dprintf(3, "xip_ualign(0x%x, %ld) starting\n", ino, size); +#endif + + /* prepare to access the given inode */ + devno = ino->c_dev; + dev = getfs(devno); + + /* construct region list using subroutine shared with execve() */ + region = xip_examine(dev, ino, size, ®ions, &blocks); + if (region == NULL) + { +#if DEBUG >= 3 + dprintf(3, "xip_ualign() returning -1 a\n"); +#endif + return -1; /* error code has been setup by xip_examine() */ + } + + /* unreserve all regions using the list */ + pos = 0; + for (i = 0; i < regions; i++) + { + /* is this a full region, or the last partial region? */ + j = min_int(blocks - pos, REGION_BLOCKS); + + /* unreserve the required number of blocks for region */ + if (xip_reserve(devno, region[i], j, 0, + dev->s_bitmap_immov, + dev->s_bitmap_final)) + { + /* disk i/o error, or corrupt filesystem */ + /* udata->u_error = ENXIO */; +#if DEBUG >= 3 + dprintf(3, "xip_ualign() returning -1 f\n"); +#endif + return -1; + } + + pos += REGION_BLOCKS; + } + + if (brelse((blkbuf_t *)region) < 0) + { + /* udata->u_error = something */ + } + + ino->c_node.i_mode = (ino->c_node.i_mode & ~S_IFMT) | S_IFREG; + ino->c_dirty = 1; + i_sync(); /* flushing inodes */ + +#if DEBUG >= 3 + dprintf(3, "xip_ualign() returning 0\n"); +#endif + return 0; + } +#endif + + +#ifdef MODULE_xip_examine +blkno_t * +xip_examine(filesys_t *dev, cinode_t *ino, off_t size, + blkno_t *regioncount, blkno_t *blockcount) + { + blkno_t i, j, k; + blkno_t blk, pos, /*inc,*/ newno; + blkno_t *region, regions, blocks; + +#if DEBUG >= 3 + dprintf(3, "xip_examine(0x%x, 0x%x, %ld, 0x%x, 0x%x) starting\n", + dev, ino, size, regioncount, blockcount); +#endif + + if (dev->s_bitmap_immov >= dev->s_bitmap_final) + { + udata->u_error = ENOLCKFS; /* not a locking filesystem */ +#if DEBUG >= 3 + dprintf(3, "xip_examine() returning NULL, error %u\n", udata->u_error); +#endif + return NULL; + } + + /* validate the filetype, it must be aligned */ + if ((ino->c_node.i_mode & S_IFMT) == S_IFREG) + { + udata->u_error = ENOALIGN; /* file is not aligned */ +#if DEBUG >= 3 + dprintf(3, "xip_examine() returning NULL, error %u\n", udata->u_error); +#endif + return NULL; + } + if ((ino->c_node.i_mode & S_IFMT) != S_IFALIGN) + { + udata->u_error = ENOREGALIGN; /* file not regular or aligned */ +#if DEBUG >= 3 + dprintf(3, "xip_examine() returning NULL, error %u\n", udata->u_error); +#endif + return NULL; + } + + /* ensure the region list will fit in 512 bytes */ + regions = (size + REGION_BYTES - 1) >> REGION_LOG; + if (regions > (BUFSIZE / sizeof(blkno_t))) + { + udata->u_error = ENOSPC; /* size specified is too large */ +#if DEBUG >= 3 + dprintf(3, "xip_examine() returning NULL, error %u\n", udata->u_error); +#endif + return NULL; + } + + /* ready to allocate the region list */ + region = (blkno_t *)tmpbuf(); + + /* calculate size in blocks, to resolve size of last region */ + blocks = (size + BUFSIZE - 1) >> BUFSIZELOG; + + /* find each region's existing physical memory address */ + pos = 0; + for (i = 0; i < regions; i++) + { + /* is this a full region, or the last partial region? */ + k = min_int(blocks - pos, REGION_BLOCKS); + + /* first block must be aligned, save its position in list */ + blk = bmap(ino, pos, 1); + if ((blk & (PAGE_BLOCKS-1)) || blk == NULLBLK) + { + udata->u_error = ENOALIGN; /* alignment bad */ +#if DEBUG >= 3 + dprintf(3, "xip_examine() returning NULL, error %u a\n", udata->u_error); +#endif + return NULL; + } + region[i] = blk; + pos++; + + /* try to find and skip contiguous aligned blocks */ + for (j = 1; j < k; j++) + { + blk++; + newno = bmap(ino, pos, 1); + if (newno != blk) /*|| newno == NULLBLK)*/ + { + udata->u_error = ENOALIGN; /* alignment bad */ +#if DEBUG >= 3 + dprintf(3, "xip_examine() returning NULL, error %u b\n", udata->u_error); +#endif + return NULL; + } + pos++; + } + } + + *regioncount = regions; + *blockcount = blocks; +#if DEBUG >= 3 + dprintf(3, "xip_examine() returning 0x%x (%d, %d)\n", region, regions, blocks); +#endif + return region; + } +#endif + + +#ifdef MODULE_xip_align_chase +blkno_t +xip_align_chase(filesys_t *dev, cinode_t *ino, blkno_t blk, blkno_t pos, + blkno_t *region, blkno_t regions, + blkno_t blocks) + { + int i, occupied; + blkbuf_t *buf, *other; + +#if DEBUG >= 3 + dprintf(3, "xip_align_chase(0x%x, 0x%x, %d, %d, 0x%x, %d, %d) starting\n", + dev, ino, blk, pos, region, regions, blocks); +#endif + + /* check we have been passed a valid block number */ + if (blk < (dev->s_reserv + dev->s_isize) || blk >= dev->s_fsize) + { + udata->u_error = ECORRUPTFS; +#if DEBUG + dprintf(1, "xip_align_chase() 1 ino = %d, blk = %d, pos = %d\n", + ino->c_num, blk, pos); +#endif + return (blkno_t)-1; /* filesystem is corrupt */ + } + + /* infinite loop to chase the just-freed block around the file */ + while (1) + { + /* find corresponding block in allocation table for ino */ + blk = xip_align_bmap(ino, blk, pos); + if (blk == (blkno_t)-1) + { + /* udata->u_error = ETOOSHORT; */ + return (blkno_t)-1; /* file is too short, or hole */ + } + + /* check we have been passed a valid block number */ + if (blk < (dev->s_reserv + dev->s_isize) || + blk >= dev->s_fsize) + { + udata->u_error = ECORRUPTFS; +#if DEBUG + dprintf(1, "xip_align_chase() 2 ino = %d, blk = %d, pos = %d\n", + ino->c_num, blk, pos); +#endif +#if DEBUG >= 3 + dprintf(3, "xip_align_chase() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; /* filesystem is corrupt */ + } + + /* see if the just-freed block was part of the target file */ + pos = xip_align_reverse(blk, region, regions, blocks); + if (pos == (blkno_t)-1) + { +#if DEBUG >= 3 + dprintf(3, "xip_align_chase() returning %d, ok\n", blk); +#endif + return blk; /* success, return the just-freed block */ + } + + /* yes, we can move something into the just-freed block */ + } + } +#endif + + +#ifdef MODULE_xip_align_bmap +blkno_t +xip_align_bmap(cinode_t *ino, blkno_t newno, blkno_t pos) + { + dev_t devno; + int i, j, sh; + blkno_t blk; + blkbuf_t *buf, *other; + +#if DEBUG >= 3 + dprintf(3, "xip_align_bmap(0x%x, %u) starting\n", ino, pos); +#endif + + devno = ino->c_dev; + /* blocks 0..DIRECTBLOCKS-1 are direct blocks */ + if (pos < DIRECTBLOCKS) + { + blk = ino->c_node.i_addr[pos]; + if (blk == 0) + { + goto Err; + } + ino->c_node.i_addr[pos] = newno; /* move the block! */ + ino->c_dirty = 1; + goto Ok; + } + /* addresses DIRECTBLOCKS and DIRECTBLOCKS+1 have single and double + * indirect blocks. + * The first step is to determine how many levels of indirection. + */ + pos -= DIRECTBLOCKS; + sh = 0; + j = INDIRECTBLOCKS+DINDIRECTBLOCKS; + if (pos >= BUFSIZE / sizeof(blkno_t)) /* double indirect */ + { + sh = 8; /* shift by 8 */ + pos -= BUFSIZE / sizeof(blkno_t); + j -= INDIRECTBLOCKS; + } + /* fetch the address from the inode. + * Create the first indirect block if needed. + */ + blk = ino->c_node.i_addr[TOTALREFBLOCKS - j]; + if (blk == 0) + { + udata->u_error = ETOOSHORT; /* hole in file */ + goto Err; + } + /* fetch through the indirect blocks */ + while (j < INDIRECTBLOCKS+DINDIRECTBLOCKS) /* Nick <= */ + { + buf = (blkbuf_t *)bread(devno, blk, 0); + if (buf == NULL) + { + goto Err; + } + i = (pos >> sh) & (BUFSIZE / sizeof(blkno_t) - 1); + blk = ((blkno_t *)buf)[i]; + if (brelse(buf) < 0) + { + goto Err; + } + if (blk == 0) + { + udata->u_error = ETOOSHORT; /* hole in file */ + goto Err; + } + sh -= 8; + ++j; + } + + buf = (blkbuf_t *)bread(devno, blk, 0); + if (buf == NULL) + { +Err: +#if DEBUG >= 3 + dprintf(3, "xip_align_bmap() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; + } + i = (pos >> sh) & (BUFSIZE / sizeof(blkno_t) - 1); + blk = ((blkno_t *)buf)[i]; + if (blk == 0) + { + udata->u_error = ETOOSHORT; /* hole in file */ + brelse(buf); + goto Err; + } + ((blkno_t *)buf)[i] = newno; /* move the block! */ + if (bawrite(buf) < 0) + { + goto Err; + } +Ok: + /* read the block, as we have to move the data also */ + buf = (blkbuf_t *)bread(devno, blk, 0); + if (buf == NULL) + { + goto Err; + } + +#if DEBUG >= 2 + dprintf(2, "getting block %d -> %d, errno = %d\n", blk, newno, udata->u_error); +#endif + + /* really move the block by manipulating cache entries */ + other = (blkbuf_t *)bfind(devno, newno); /* hanging around in cache? */ + if (other) + { +/* dprintf(3, "bufpool entry %d = block %d, dirty 0\n", other - bufpool, blk); */ + other->bf_blk = blk; /* swap, for minimal overhead */ + other->bf_dirty = 0; /* try to avoid writing back */ + } + + /* revise the original cache entry to show the new block */ + buf->bf_blk = newno; /* original value is in variable blk */ +/* dprintf(3, "bufpool entry %d = block %d, dirty 1\n", buf - bufpool, newno); */ + if (bawrite(buf) < 0) /* dirty, but delay writing for the moment */ + { + goto Err; + } + +#if DEBUG >= 3 + dprintf(3, "xip_align_bmap() returning %u, success\n", blk); +#endif + return blk; +} +#endif + + +#ifdef MODULE_xip_align_reverse +blkno_t +xip_align_reverse(blkno_t blk, + blkno_t *region, blkno_t regions, blkno_t blocks) + { + blkno_t i, k; + blkno_t pos; + +#if DEBUG > 3 + dprintf(4, "xip_align_reverse(%u) starting\n", blk); +#endif + + /* perform a reverse lookup of blk via the region list */ + pos = 0; + for (i = 0; i < regions; i++) + { + /* is this a full region, or the last partial region? */ + k = min_int(blocks - pos, REGION_BLOCKS); + + /* see if the given blk falls within this region */ + if (blk >= region[i] && blk < (region[i] + k)) + { + /* yes, return the computed logical pos in file */ + pos += blk - region[i]; +#if DEBUG > 3 + dprintf(4, "xip_align_reverse() returning %u, found\n", pos); +#endif + return pos; + } + + /* calculate file position for start of next region */ + pos += REGION_BLOCKS; + } + + /* the given blk was not found in any region of the list */ +#if DEBUG > 3 + dprintf(4, "xip_align_reverse() returning -1, not found\n"); +#endif + return -1; + } +#endif + + +#ifdef MODULE_xip_align_recurse +blkno_t +xip_align_recurse(filesys_t *dev, cinode_t *ino, int exclude, + blkno_t *parent, char *dirty, + int indirection, blkno_t *region, + blkno_t regions, blkno_t blocks) + { + dev_t devno; + int i, reserved; + blkno_t blk, newno; + blkbuf_t *buf, *other; + int moveable; + blkno_t tempblk; + char tempdirty; + blkno_t pos, chase; + +#if DEBUG > 3 + dprintf(4, "xip_align_recurse" + "(0x%x, 0x%x, %d, 0x%x, 0x%x, %d, 0x%x, %d, %d) starting\n", + dev, ino, exclude, parent, dirty, indirection, + region, regions, blocks); +#endif + + /* check we have been passed a valid block number */ + blk = *parent; + if (blk < (dev->s_reserv + dev->s_isize) || blk >= dev->s_fsize) + { + /* filesystem is corrupt, invalid block */ + udata->u_error = ECORRUPTFS; +#if DEBUG + dprintf(1, "xip_align_recurse() ino = %d, blk = %d, ind = %d, par = 0x%04x\n", + ino->c_num, blk, indirection, parent); +#endif +#if DEBUG >= 3 + dprintf(3, "xip_align_recurse() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; + } + + /* see if this block is intended for the target file */ +#if 0 /* not possible, see "exclude ? DIRECTBLOCKS : 0" above */ + if (exclude && indirection == 0) + { + /* it's some other aligned file on the drive */ + moveable = 0; + } + else +#endif +#if 0 /* under construction */ + if (exclude == 2 && indirection == 0) + { + /* it's the target file */ + chase = xip_align_reverse(blk, region, regions, blocks); + moveable = (chase != (blkno_t)-1); + } + else +#endif + { + chase = xip_align_reverse(blk, region, regions, blocks); + moveable = (chase != (blkno_t)-1); + } + + /* early out, if the block doesn't need to be accessed at all */ + if (moveable == 0 && indirection == 0) + { + /* no action is needed (no move and not indirect) */ +#if DEBUG > 3 + dprintf(4, "xip_align_recurse() returning -1, no action, ok\n"); +#endif + return (blkno_t)-1; + } + + /* need to read the block, we might modify it, and/or relocate it */ + devno = dev->s_dev; /* don't forget! */ + buf = (blkbuf_t *)bread(devno, blk, 0); + if (buf == NULL) + { +#if DEBUG >= 3 + dprintf(3, "xip_align_recurse() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; /* disk i/o error reading the block itself */ + } + + /* if it's a single or double indirect block, traverse recursively */ +#if 1 /* under construction */ + if (indirection && (exclude != 1 || indirection > 1)) +#else + if (indirection && (exclude == 0 || indirection > 1)) +#endif + { +#if 0 /* silly silly */ + if (indirection > 1) + { + newno = BUFSIZE / sizeof(blkno_t); /* double ind. */ + } + else + { + newno = 1; /* single indirect */ + } +#endif + for (i = 0; i < BUFSIZE / sizeof(blkno_t); i++) + { + newno = ((blkno_t *)buf)[i]; +/* if (newno == 3840) dprintf(3, "bad # %d,%d 0x%04x\n", buf->bf_blk, i, &((blkno_t *)buf)[i]); */ + if (newno) + { + if (exclude == 2) /* it's the target file */ + { + tempblk = newno; + tempdirty = 0; + + if (bfree(buf, buf->bf_dirty) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_align_recurse() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; /* disk i/o error */ + } + + pos = xip_align_recurse(dev, /*pos,*/ + ino, exclude, + &tempblk, &tempdirty, + indirection-1, + region, regions, blocks); + + buf = (blkbuf_t *)bread(devno, blk, 0); + if (buf == NULL) + { +#if DEBUG >= 3 + dprintf(3, "xip_align_recurse() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; /* disk i/o error */ + } + + if (tempdirty) + { + ((blkno_t *)buf)[i] = tempblk; + buf->bf_dirty = tempdirty; + } + } + else + { + pos = xip_align_recurse(dev, /*pos,*/ + ino, exclude, + &((blkno_t *)buf)[i], + &buf->bf_dirty, indirection-1, + region, regions, blocks); + } + + /* move something into the freed spot, and possibly repeat */ + if (pos != (blkno_t)-1) + { + if (exclude == 2) + { + if (bfree(buf, buf->bf_dirty) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_align_recurse() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; /* disk i/o error */ + } + } + + newno = xip_align_chase(dev, ino, + newno, pos, + region, regions, blocks); + + if (exclude == 2) + { + buf = (blkbuf_t *)bread(devno, blk, 0); + if (buf == NULL) + { +#if DEBUG >= 3 + dprintf(3, "xip_align_recurse() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; /* disk i/o error */ + } + } + + if (newno == (blkno_t)-1) + { +#if DEBUG >= 3 + dprintf(3, "xip_align_recurse() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; + } + + /* eventually a non-target block was freed, indicate this */ + if (xip_set(devno, newno, 0, + dev->s_bitmap_block, + dev->s_bitmap_immov) != 1) + { + /* i/o error, or corrupt filesystem */ +#if DEBUG >= 3 + dprintf(3, "xip_align_recurse() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; + } + } + } + /*pos += newno;*/ + } + } + + /* if this block is in the way of the target file, move it */ + if (moveable) + { + /* find an unoccupied block (fixme: can't be reserved) */ + newno = xip_find(devno, 0, 0, 1, dev->s_bitmap_block, + dev->s_bitmap_immov); + if (newno < (dev->s_reserv + dev->s_isize) || + newno >= dev->s_fsize) + { + udata->u_error = ENOSPC; /* may overwrite ENXIO !! */ +#if DEBUG >= 3 + dprintf(3, "xip_align_recurse() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; + } + + /* revise parent's allocation entry to show the new block */ + *parent = newno; + + /* inform parent that its allocation entries were changed */ + *dirty = 1; + +#if DEBUG >= 2 + dprintf(2, "putting block %d -> %d, errno = %d\n", blk, newno, udata->u_error); +#endif + + /* really move the block by manipulating cache entries */ + other = (blkbuf_t *)bfind(devno, newno); /* hanging around in cache? */ + if (other) + { +/* dprintf(3, "bufpool entry %d = block %d, dirty 0\n", other - bufpool, blk); */ + other->bf_blk = blk; /* swap, for minimal overhead */ + other->bf_dirty = 0; /* try to avoid writing back */ + } + + /* revise the original cache entry to show the new block */ +/* dprintf(3, "bufpool entry %d = block %d, dirty 2\n", buf - bufpool, newno); */ + buf->bf_blk = newno; /* original value is in variable blk */ + if (bfree(buf, 2) < 0) /* very dirty, write back immediately */ + { +#if DEBUG >= 3 + dprintf(3, "xip_align_recurse() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; /* disk i/o error writing back */ + } + +#if DEBUG > 3 + dprintf(4, "xip_align_recurse() returning %d, moved, ok\n", chase); +#endif + return chase; /* indicate which spot was just freed */ + } + else + { + if (bfree(buf, buf->bf_dirty) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_align_recurse() returning -1, error %u\n", udata->u_error); +#endif + return (blkno_t)-1; /* disk i/o error writing back */ + } + } + +#if DEBUG > 3 + dprintf(4, "xip_align_recurse() returning -1, ok\n"); +#endif + return (blkno_t)-1; /* successfully traversed the block and its children */ + } +#endif + + +#ifdef MODULE_xip_search +blkno_t +xip_search(dev_t devno, int size, blkno_t start, blkno_t final) + { + char *buf, *p; + blkno_t i, j, lm, blk; + unsigned long bits, mask; /* assumes REGION_BLOCKS <= 32 */ + +#if DEBUG >= 3 + dprintf(3, "xip_search(%u, %d, %u, %u) starting\n", + devno, size, start, final); +#endif + +#if REGION_BLOCKS < 32 + /* validate the size parameter for extra safety */ + if (size < 1 || size > REGION_BLOCKS) + { + return (blkno_t)-1; /* should indicate parameter error */ + } + + /* form a bitstring of the needed size, for testing bitmap */ + mask = (1L << size) - 1; +#else + /* validate the size parameter for extra safety */ + if (size < 1 || size > 32) /* REGION_BLOCKS > 32 bombs at runtime */ + { + return (blkno_t)-1; /* should indicate parameter error */ + } + + /* form a bitstring of the needed size, for testing bitmap */ + if (size < 32) + { + mask = (1L << size) - 1; + } + else + { + mask = (unsigned long)-1; /* size is maximum 32 */ + } +#endif + + /* initialise bitbuffer, we need it to span bitmap blocks */ + bits = (unsigned long)-1; + + /* read bitmap, skipping unused bytes of reserved blocks */ + j = start; + while (j < final) + { + /* calculate ending position after reading block */ + lm = min_int((j + BUFSIZE) & ~(BUFSIZE - 1), final); + + /* read block and calculate starting relevant byte */ + buf = bread(devno, j >> BUFSIZELOG, 0); + if (buf == NULL) + { +#if DEBUG >= 3 + dprintf(3, "xip_search() returning -1, i/o error\n"); +#endif + return (blkno_t)-1; /* should indicate i/o error */ + } + p = buf + (j & (BUFSIZE - 1)); + + /* ready to scan each byte looking for contiguous '0' bits */ + for (i = j; i < lm; i += (PAGE_BLOCKS >> 3)) /* can't be 0 ! */ + { + bits = (bits >> PAGE_BLOCKS) | + (((unsigned long)*p) << (32 - PAGE_BLOCKS)); + + if ((bits & mask) == 0) + { + /* all of the required blocks are unlocked */ + + /* calculate which disk block it refers to */ + blk = ((i - start) << 3) - (32 - PAGE_BLOCKS); + + /* don't write it back, our caller will */ + if (brelse((blkbuf_t *)buf) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_search() returning -1, i/o error\n"); +#endif + return (blkno_t)-1; + } + +#if DEBUG >= 3 + dprintf(3, "xip_search() returning %u, success\n", blk); +#endif + return blk; + } + + p += PAGE_BLOCKS >> 3; /* can't be 0 */ + } + + /* nothing found this time, release block and loop */ + if (brelse((blkbuf_t *)buf) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_search() returning -1, i/o error\n"); +#endif + return (blkno_t)-1; + } + + /* bump counter to continue after data just read */ + j = lm; + } + + /* no '0' string found within the bitmap limits */ +#if DEBUG >= 3 + dprintf(3, "xip_search() returning -1, bitmap full\n"); +#endif + return (blkno_t)-1; /* not an error, bitmap was really full */ + } +#endif + + +#ifdef MODULE_xip_reserve +int +xip_reserve(dev_t devno, blkno_t blk, int size, int flag, + blkno_t start, blkno_t final) + { + blkno_t i, j, lm; + char *buf, *p, mask; + +#if DEBUG >= 3 + dprintf(3, "xip_reserve(%u, %u, %d, %d, %u, %u) starting\n", + devno, blk, size, flag, start, final); +#endif + + /* calculate byte position within bitmap for this block */ + j = start + (blk >> 3); + if (j >= final) + { +#if DEBUG >= 3 + dprintf(3, "xip_reserve() returning -1, out of range\n"); +#endif + return -1; /* block out of range, very bad */ + } + + /* read block and calculate starting relevant byte */ + buf = bread(devno, j >> BUFSIZELOG, 0); + if (buf == NULL) + { +#if DEBUG >= 3 + dprintf(3, "xip_reserve() returning -1, i/o error\n"); +#endif + return -1; /* should indicate i/o error */ + } + p = buf + (j & (BUFSIZE - 1)); + + /* calculate ending position after reading block */ + lm = min_int((j + BUFSIZE) & ~(BUFSIZE - 1), final); + + /* ready to modify the required bits and write back */ + mask = flag ? 0xff : 0; + while (size > 8) + { + *p++ = mask; + + j++; + if (j >= lm) + { + /* gone past the end of the current bitmap block */ + if (j >= final) + { +#if DEBUG >= 3 + dprintf(3, "xip_reserve() returning -1, out of range\n"); +#endif + return -1; /* out of range */ + } + + /* need to flush the modifications done so far */ + if (bawrite((blkbuf_t *)buf) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_reserve() returning -1, i/o error\n"); +#endif + return -1; /* i/o error */ + } + + /* read next block, we always start at the beginning */ + buf = bread(devno, j >> BUFSIZELOG, 0); + if (buf == NULL) + { +#if DEBUG >= 3 + dprintf(3, "xip_reserve() returning -1, i/o error\n"); +#endif + return -1; /* i/o error */ + } + p = buf; + + /* calculate ending position after reading block */ + lm = min_int((j + BUFSIZE) & ~(BUFSIZE - 1), final); + } + + size -= 8; + } + + /* done all bitmap bytes, except the last (maybe partial) byte */ + mask = (1 << size) - 1; + if (flag) + { + *p |= mask; + } + else + { + *p &= ~mask; + } + + /* ready to write back the modified bitmap block */ + if (bawrite((blkbuf_t *)buf) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_reserve() returning -1, i/o error\n"); +#endif + return -1; /* should indicate i/o error */ + } + +#if DEBUG >= 3 + dprintf(3, "xip_reserve() returning 0, success\n"); +#endif + return 0; + } +#endif + + +#ifdef MODULE_xip_find +blkno_t +xip_find(dev_t devno, blkno_t blk, int flag, int toggle, + blkno_t start, blkno_t final) + { + char c, first; + char *buf, *p, mask; + blkno_t i, j, lm; + +#if DEBUG >= 3 + dprintf(3, "xip_find(%u, %u, %d, %d, %u, %u) starting\n", + devno, blk, flag, toggle, start, final); +#endif + + /* set up to skip byte sized groups having opposite value */ + mask = flag ? 0 : 0xff; + + /* prepare to handle the first byte of the bitmap specially */ + first = ~((1 << (blk & 7)) - 1); + + /* read bitmap, skipping unused bytes of reserved blocks */ + j = start + (blk >> 3); + while (j < final) + { + /* calculate ending position after reading block */ + lm = min_int((j + BUFSIZE) & ~(BUFSIZE - 1), final); + + /* read block and calculate starting relevant byte */ + buf = bread(devno, j >> BUFSIZELOG, 0); + if (buf == NULL) + { +#if DEBUG >= 3 + dprintf(3, "xip_find() returning -1, i/o error\n"); +#endif + return (blkno_t)-1; /* should indicate i/o error */ + } + p = buf + (j & (BUFSIZE - 1)); + + /* ready to scan each byte looking for a bit of 'flag' */ + for (i = j; i < lm; i++) + { + c = (*p ^ mask) & first; /* set bits being sought */ + first = 0xff; /* process full bytes from now on */ + + if (c) + { + /* at least one of the 8 blocks is available */ + + /* calculate which disk block it refers to */ + blk = (i - start) << 3; + for (i = 0; i < 7; i++) /* don't check bit 7 */ + { + if (c & (1 << i)) + { + break; + } + } + blk += i; + + if (toggle) + { + /* ready to toggle and write back */ + *p ^= 1 << i; + if (bawrite((blkbuf_t *)buf) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_find() returning -1, i/o error\n"); +#endif + return (blkno_t)-1; /* i/o */ + } + } + else + { + if (brelse((blkbuf_t *)buf) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_find() returning -1, i/o error\n"); +#endif + return (blkno_t)-1; /* i/o */ + } + } + +#if DEBUG >= 3 + dprintf(3, "xip_find() returning %u, success\n", blk); +#endif + return blk; + } + + p++; + } + + /* nothing found this time, release block and loop */ + if (brelse((blkbuf_t *)buf) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_find() returning -1, i/o error\n"); +#endif + return (blkno_t)-1; + } + + /* bump counter to continue after data just read */ + j = lm; + } + + /* no 'flag' bit found within the bitmap limits */ + blk = (j - start) << 3; +#if DEBUG >= 3 + dprintf(3, "xip_find() returning %u, bitmap full\n", blk); +#endif + return blk; /* not an error, bitmap was really full */ + } +#endif + + +#ifdef MODULE_xip_get +int +xip_get(dev_t devno, blkno_t blk, blkno_t start, blkno_t final) + { + blkno_t i, j; + char *buf, *p; + +#if DEBUG >= 3 + dprintf(3, "xip_get(%u, %u, %u, %u) starting\n", devno, blk, start, final); +#endif + + /* calculate byte position within bitmap for this block */ + j = start + (blk >> 3); + if (j >= final) + { +#if DEBUG >= 3 + dprintf(3, "xip_get() returning -1, out of range\n"); +#endif + return -1; /* block out of range, very bad */ + } + i = 1 << (blk & 7); + + /* read block and calculate starting relevant byte */ + buf = bread(devno, j >> BUFSIZELOG, 0); + if (buf == NULL) + { +#if DEBUG >= 3 + dprintf(3, "xip_get() returning -1, i/o error\n"); +#endif + return -1; /* should indicate i/o error */ + } + p = buf + (j & (BUFSIZE - 1)); + + /* check if the block is free or used (value of 0 or 1) */ + i = ((*p & i) != 0); + + if (brelse((blkbuf_t *)buf) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_get() returning -1, i/o error\n"); +#endif + return -1; + } + +#if DEBUG >= 3 + dprintf(3, "xip_get() returning %d, success\n", i); +#endif + return i; + } +#endif + + +#ifdef MODULE_xip_set +int +xip_set(dev_t devno, blkno_t blk, int flag, + blkno_t start, blkno_t final) + { + blkno_t i, j; + char *buf, *p, mask; + +#if DEBUG >= 3 + dprintf(3, "xip_set(%u, %u, %d, %u, %u) starting\n", + devno, blk, flag, start, final); +#endif + + /* calculate byte position within bitmap for this block */ + j = start + (blk >> 3); + if (j >= final) + { +#if DEBUG >= 3 + dprintf(3, "xip_set() returning -1, out of range\n"); +#endif + return -1; /* block out of range, very bad */ + } + mask = 1 << (blk & 7); + + /* read block and calculate starting relevant byte */ + buf = bread(devno, j >> BUFSIZELOG, 0); + if (buf == NULL) + { +#if DEBUG >= 3 + dprintf(3, "xip_set() returning -1, i/o error\n"); +#endif + return -1; /* should indicate i/o error */ + } + p = buf + (j & (BUFSIZE - 1)); + + /* find the desired and the original values of the bit */ + i = (flag != 0); + j = ((*p & mask) != 0); + + /* ready to modify the bit and write back (if necessary) */ + if (i != j) + { + *p ^= mask; + if (bawrite((blkbuf_t *)buf) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_set() returning -1, i/o error\n"); +#endif + return -1; /* should indicate i/o error */ + } + } + else + { + if (brelse((blkbuf_t *)buf) < 0) + { +#if DEBUG >= 3 + dprintf(3, "xip_set() returning -1, i/o error\n"); +#endif + return -1; /* should indicate i/o error */ + } + } + +#if DEBUG >= 3 + dprintf(3, "xip_set() returning %d, success\n", j); +#endif + return j; + } +#endif + diff --git a/src/nos/g.sh b/src/nos/g.sh new file mode 100644 index 00000000..076c44bd --- /dev/null +++ b/src/nos/g.sh @@ -0,0 +1,15 @@ +#!/bin/sh +grep "$1" ax25/* +grep "$1" clients/* +grep "$1" drivers/* +grep "$1" dump/* +grep "$1" filesys/* +grep "$1" internet/* +grep "$1" intl/* +grep "$1" main/* +grep "$1" net/* +grep "$1" netrom/* +grep "$1" po/* +grep "$1" ppp/* +grep "$1" servers/* +grep "$1" z80/* diff --git a/src/nos/gboot/build.ban b/src/nos/gboot/build.ban new file mode 100644 index 00000000..fd61bc88 --- /dev/null +++ b/src/nos/gboot/build.ban @@ -0,0 +1,35 @@ +copy ..\gboot.asm +copy ..\io64180.inc +copy ..\diag.inc +copy ..\copyr.inc +copy ..\clears.inc +as-z80 -l -o gboot +@if errorlevel 1 goto failure +link-z80 -f gboot +@if errorlevel 1 goto failure +ihex2bin gboot.i86 ..\..\..\bin\boot.bin +4dos /c crcd ..\..\..\bin\boot.bin +bin2c ..\..\..\bin\boot.bin ..\..\fsutil\boot.c + +copy ..\uzboot.asm +as-z80 -l -o uzboot +@if errorlevel 1 goto failure +copy ..\uzfile.asm +as-z80 -l -o uzfile +@if errorlevel 1 goto failure +copy ..\uzmain.asm +as-z80 -l -o uzmain +@if errorlevel 1 goto failure +copy ..\uzdata.asm +as-z80 -l -o uzdata +@if errorlevel 1 goto failure +link-z80 -f uzboot +@if errorlevel 1 goto failure +ihex2bin uzboot.i86 ..\..\..\bin\uzboot.ldr + +@echo SUCCESS +@goto done +:failure +@echo FAILURE +:done + diff --git a/src/nos/gboot/checksum.dat b/src/nos/gboot/checksum.dat new file mode 100644 index 00000000..172cee84 --- /dev/null +++ b/src/nos/gboot/checksum.dat @@ -0,0 +1,2 @@ +C A:KERNEL.BIN +C A:BOOT.BIN diff --git a/src/nos/gboot/clears.inc b/src/nos/gboot/clears.inc new file mode 100644 index 00000000..ff7f0386 --- /dev/null +++ b/src/nos/gboot/clears.inc @@ -0,0 +1,50 @@ +; clears.s01 +; Hard and fast system initialisation for built in Z180 devices +; Now modified for use as an include file when compiling the boot routines + +; ----------------------------------------------------------------------------- + +;$io64180.s01 + +; .area _CODE + rseg RCODE + +; ----------------------------------------------------------------------------- + + public clears + +clears:: + ; initialise z180 serial ports + ld a,01110100b ; enables, rts off, d8 pn s1, tend0 + out0 (CNTLA0),a ; rts0 = 1 keeps us alive, new v5 + out0 (CNTLA1),a ; cka1d = 1 enables tend0 + .if 1 + ld a,22h ; 22h = 9600, 20h = 38400 + out0 (CNTLB0),a ; ps = 1 enables /30 mode + out0 (CNTLB1),a ; ps = 1 enables /30 mode + sub a + out0 (STAT0),a + out0 (STAT1),a ; cts1e = 0 enables rxs + .else + sub a + out0 (STAT0),a + out0 (STAT1),a ; cts1e = 0 enables rxs + out0 (CNTLB0),a ; 115200, ps = 0 disables /30 mode + out0 (CNTLB1),a ; 115200, ps = 0 disables /30 mode + .endif + in0 (RDR0) ; clear asci0 rx & irq + in0 (RDR1) ; clear asci1 rx & irq + + ; initialise dma controller + out0 (BCR0H),a + out0 (BCR1H),a + out0 (MAR1H),a + out0 (MAR1B),a + out0 (IAR1L),a + out0 (IAR1H),a + + ret + +; ----------------------------------------------------------------------------- + +; END diff --git a/src/nos/gboot/copyr.inc b/src/nos/gboot/copyr.inc new file mode 100644 index 00000000..a89d7c77 --- /dev/null +++ b/src/nos/gboot/copyr.inc @@ -0,0 +1,312 @@ +; copyr.s01 +; Reentrant DMA copy routine for Hytech CMX, doesn't disable ints for too long +; Now modified for use as an include file when compiling the boot routines + +; ----------------------------------------------------------------------------- + +; $io64180.s01 + +BITE equ 32 +BITELOG equ 5 + +PBITE equ 16 +PBITELOG equ 4 + +; extern abyte, ahexw, ahexn, acrlf + +; copy routine +; ------------ + +; copy bc bytes from d:iy --> e:hl + +; 10 bits @ 38400 == 260 usec +; 1 dma cycle (read+write) == 6 t-states == .977 usec +; so 266 dma cycles burst per character 6*266 = 1596 +; we will use a max of 256 characters burst mode 6*256 = 1536 + + rseg RCODE + +; public _copyr +; +;_copyr: push iy +; +; push de +; pop iy +; ld d,c ; d:iy = entry c:de -> source data +; +; ld hl,9 +; add hl,sp +; ld b,(hl) +; dec hl +; ld c,(hl) ; bc = entry (sp+6) = byte count +; +; dec hl +; dec hl +; ld e,(hl) +; dec hl +; ld a,(hl) +; dec hl +; ld l,(hl) +; ld h,a ; e:hl = entry (sp+2) -> destination +; call copyr +; +; pop iy +; ret +; +; public copyb +; +;copyb: ld bc,1 + + public copyr + +copyr: + .if 0 ; diagnostic + push hl + + ld a,d + call ahexn + ld a,':' + call abyte + + push iy + pop hl + call ahexw + + ld a,' ' + call abyte + + ld a,e + call ahexn + ld a,':' + call abyte + + pop hl + push hl + call ahexw + + ld a,' ' + call abyte + + ld l,c + ld h,b + call ahexw + + call acrlf + + pop hl + .endif + ld a,e + cp 4 + .if 1 + jp nc,copyrp + .else + jr nc,copyrp + .endif + + .if 1 + LD A,C + AND BITE-1 ;00011111B +; JR Z,CPYL0 + PUSH BC + LD C,A + LD B,0 + .if 1 +;;; di +; out0 (BCR0L),c + call cpyst0 + inc c + dec c + jr z,cpyl0 + in0 a,(DSTAT) + xor 01010000b + out0 (DSTAT),a + add iy,bc + call c,inc_d + add hl,bc + call c,inc_e +cpyl0: + .else + CALL CPYBC + .endif + .if 0 +; POP BC +; .if 0 +; LD A,C +; AND .binnot.(BITE-1) ;11100000B +; LD C,A +; .endif +;CPYL0: +; POP AF ; HIGH ORDER CNT +; PUSH HL +; LD L,C +; LD H,B + ex (sp),hl + sub a ; high order count + LD B,8-BITELOG ;3 +CPYL1: ADD HL,HL + ADC A,A + DJNZ CPYL1 ; A:H = A:HL/BITE ;32 + LD C,H + LD B,A + POP HL + .else + pop bc + ld a,BITELOG ;5 +cpyl30: srl b + rr c + dec a + jr nz,cpyl30 ; bc = bc/BITE ;32 + .endif + JR CPYL3 +CPYL2: PUSH BC + LD BC,BITE ;32 + .if 1 +;;; ei +; out0 (BCR0L+1),b + out0 (BCR0L),c +;;; di +; in0 (BCR0L+1) ;f,(BCR0L+1) +; call z,cpyst0 +;;; in0 (BCR0L) +;;; call z,cpyst0 + in0 a,(DSTAT) + xor 01010000b + out0 (DSTAT),a + add iy,bc + call c,inc_d + add hl,bc + call c,inc_e + .else + CALL CPYBCI + .endif + POP BC + DEC BC +CPYL3: LD A,B + OR C + JR NZ,CPYL2 + .else + push bc + ld b,0 +;;; di +; out0 (BCR0L),c + call cpyst0 + inc c + dec c + jr z,cpyl0 + in0 a,(DSTAT) + xor 01010000b + out0 (DSTAT),a + add iy,bc + call c,inc_d + add hl,bc + call c,inc_e +cpyl0: pop bc + inc b + jr cpyl1 +cpyl2: push bc + ld bc,100h +;;; ei + out0 (BCR0L+1),b +;;; di + in0 (BCR0L+1) ;f,(BCR0L+1) + call z,cpyst0 + in0 a,(DSTAT) + xor 01010000b + out0 (DSTAT),a + add iy,bc + call c,inc_d + add hl,bc + call c,inc_e + pop bc +cpyl1: djnz cpyl2 + .endif +;;; ei + ret + +cpyst0: + out0 (BCR0L),c + out0 (BCR0L+1),b + jr cpyst2 +cpyst1: ld a,1 + out0 (BCR0L),a +cpyst2: push hl + push iy + out0 (DAR0L),l + out0 (DAR0L+1),h + out0 (DAR0L+2),e + pop hl + out0 (SAR0L),l + out0 (SAR0L+1),h + out0 (SAR0L+2),d + pop hl + ld a,2 ; memory+ --> memory+, burst mode + out0 (DMODE),a + ret + +inc_d: inc d + ret +inc_e: inc e + ret + +copyrp: push bc + xor a +;;; di + out0 (BCR0L),a + out0 (BCR0L+1),a + .if 0 + push hl + ld l,c + ld h,b + sub a ; high order count + LD B,8-PBITELOG +CPYL1X: ADD HL,HL + ADC A,A + DJNZ CPYL1X ; A:H = A:HL/PBITE ;32 + LD C,H + LD B,A + pop hl + .else + ld a,PBITELOG ;5 +cpyl31: srl b + rr c + dec a + jr nz,cpyl31 ; bc = bc/PBITE ;32 + .endif + ld a,b + or c + jr z,cpyc0 +cpyl4: push bc ; 1464 t-states for this loop + ld bc,PBITE + call cpybc0 + pop bc + dec bc +;;; di + ld a,b + or c + jr nz,cpyl4 +cpyc0: pop bc + ld b,a ; 0 + ld a,c + and PBITE-1 ;00011111b + jr z,cpyl5 + ld c,a +cpybc0: in0 (BCR0L) ;f,(BCR0L) + call z,cpyst1 + add iy,bc ; 1396 t-states for this subroutine + call c,inc_d ; 32 bytes, no boundary + add hl,bc ; no interrupt, no dma1 cycle steal + call c,inc_e + ld b,c + ld c,1 + in0 a,(DSTAT) + xor 01010000b +cpybc1: out0 (DSTAT),a + out0 (BCR0L),c + djnz cpybc1 +cpyl5: +;;; ei + ret + +; ----------------------------------------------------------------------------- + +; END diff --git a/src/nos/gboot/diag.inc b/src/nos/gboot/diag.inc new file mode 100644 index 00000000..747720ee --- /dev/null +++ b/src/nos/gboot/diag.inc @@ -0,0 +1,132 @@ +; diag.s01 +; Polled mode serial output for built in Z180 port SERIAL 0 (Hytech CMX) +; Now modified for use as an include file when compiling the boot routines + +; ----------------------------------------------------------------------------- + +;$io64180.s01 + +; .area _CODE + rseg RCODE + +; ----------------------------------------------------------------------------- + +; public _abyte +; +;_abyte:: +; .if 0 ; SDCC +; ld hl,2 +; add hl,sp +; ld a,(hl) +; .else ; IAR +; ld a,e +; .endif + + public abyte + +abyte:: + .if 0 ; 0=enable abytes, 1=disable abytes (doesn't affect the code size) + ret + .else + push af + .endif + + .if 0 ; checking to see when memory corruption occurs + extern _osBank + ld a,(_osBank) + cp 0 + jr z,ok + pop af + ld a,'_' + push af +ok: + .endif + +L1$: in0 a,(STAT1) ;(STAT0) + and 10b + jr z,L1$ + + pop af + out0 (TDR1),a ;(TDR0),a + + .if 0 + di + .endif + .if 0 + ei + .endif + ret + +; public _acrlf +; +;_acrlf:: + + public acrlf + +acrlf:: + ld a,0dh + call abyte + ld a,0ah + jr abyte + +; public _ahexw +; +;_ahexw:: +; .if 0 ; SDCC +; ld hl,2 +; add hl,sp +; ld e,(hl) +; inc hl +; ld d,(hl) +; .endif +; ex de,hl + + public ahexw + +ahexw:: + ld a,h + call ahexb + ld a,l + + public ahexb + +ahexb:: + push af + rrca + rrca + rrca + rrca + call ahexn + pop af + + public ahexn + +ahexn:: + and 0fh + add a,90h + daa + adc a,40h + daa + jr abyte + + public amess + +amess:: + ex (sp),hl + push af + +L01$: ld a,(hl) + inc hl + or a + jr z,L02$ + + call abyte + jr L01$ + +L02$: pop af + ex (sp),hl + ret + +; ----------------------------------------------------------------------------- + +; END diff --git a/src/nos/gboot/gboot.S b/src/nos/gboot/gboot.S new file mode 100644 index 00000000..5a632549 --- /dev/null +++ b/src/nos/gboot/gboot.S @@ -0,0 +1,1301 @@ +; gboot.S +; Generic Hytech boot loader program to occupy 4 sectors at start of each disk + +/* #define OLD_LAYOUT */ /* temporary, retain compatibility with uzi */ + +; ----------------------------------------------------------------------------- + +#include "z80/asm.h" + + rseg RCODE + +; ----------------------------------------------------------------------------- + +#if 0 /* allows more room for gboot, but means we need to translate addrs */ +#define CA1_GBOOT 0x2000 /* size of gboot code + data + stack */ +#else /* allows less room for gboot, but means we can work with native addrs */ +#define CA1_GBOOT DATA_START /* size of gboot code + data + stack */ +#endif + +#define USER_BBR ((BA_START - DATA_START) >> 12) /* nos 0x00 uzi 0xfc */ +#define USER_CBAR ((BA_START >> 12) + (CA1_START >> 8)) /* nos 0xf1 uzi 0x84 */ + +#define GBOOT_CBAR (CA1_GBOOT >> 8) /* nos 0x10 uzi 0x80 */ + +#define GBOOT_KRNL_CBR ((0 - CA1_GBOOT) >> 12) /* nos 0xff uzi 0xf8 */ +#define GBOOT_KRNL_OFF CA1_GBOOT /* nos 0x1000 uzi 0x8000 */ + +#define GBOOT_USER_CBR ((BA_START - CA1_GBOOT) >> 12) /* nos 0x00 uzi 0x00 */ +#define GBOOT_USER_OFF (CA1_GBOOT - DATA_START) /* nos 0x0000 uzi 0x0000 */ + +; ----------------------------------------------------------------------------- + +start: defm 'XXXXYYMMDDHHMMSS' ; BOOT.BIN CRC, date and time + + ; hytech eprom will enter at base+10h + ld sp,#CA1_GBOOT ; as we will later set CBAR = 20h + call clears + call acrlf + call initial_boot ; for compatibility (returns if not ok) + jr entry + defb 0,0 + + ; need a cp/m directory entry at base+20h + defb 0,'BOOT BIN',0,0,0,(final+7fh-start)/80h + defb 0 + defb ((400h-(final-start)) >> 14) & 1 + defb ((800h-(final-start)) >> 14) & 2 + defb ((0c00h-(final-start)) >> 14) & 3 + defb 0,0,0,0,0,0,0,0,0,0,0,0 + +; ----------------------------------------------------------------------------- + +entry: + call gmess + defb 'loading /boot/kernel.bin',0dh,0ah,0 + + call virtual_init ; modifies CBR (can't call EPROM now) + call mount_ram_drive + call load_kernel_bin + + call say_starting ; tell the user we have liftoff + + call translate_regions + +kazumi: + call load_parameters + ; careful! b will be used again below!! + +#if GBOOT_USER_OFF + ld hl,(e_stack) ; load into base of stack region + push hl + + ld de,#GBOOT_USER_OFF + add hl,de ; need to adjust the value from header + ex de,hl +#else + ld de,(e_stack) ; load into base of stack region + push de +#endif + + ld hl,runsys ; start of small stub program below + ld c,runsys_end-runsys ; size of small stub program (b=0) + ldir ; copy stub program + + pop bc ; untranslated, where we copied runsys + + ld hl,(e_break) ; information for the client program + + ; note that we can't actually use the stack until CBAR and CBR are set + ld sp,hl ; (but it's convenient to use hl value) + + ld de,parameters_end-parameters + add hl,de ; need to adjust for environment size + ex de,hl ; information for the client program + + ld hl,(e_entry) ; information for the runsys stub + +#if CA1_GBOOT > DATA_START + ; We have been using translated addresses to set up the client area, + ; since the client's view of its area begins before CA1_GBOOT, which + ; is the start of our window. It's now time to untranslate them, so + ; that the memory management unit is left in the correct state for + ; the client. After this, we can't access variables such as e_break. + ; In addition we must be executing at an address of less than 1000h. + ld a,#DATA_START >> 8 + out0 (CBAR),a ; need to access DATA_START thru CBR + ; (for new layout it's normally by BBR) +#endif + +#if USER_BBR + ld a,#USER_BBR +#else + sub a +#endif +#if USER_BBR != GBOOT_USER_CBR + out0 (CBR),a ; it was GBOOT_USER_CBR +#endif + + push bc + ret ; enter stub program (jp 8100h) + +runsys: +#ifndef OLD_LAYOUT + out0 (BBR),a ; so that BBR = CBR, otherwise we'd get + ; lost as soon as we modify CBAR (nos!) +#endif + ld a,#USER_CBAR + out0 (CBAR),a ; CA0 = 4k, bank area = 56k, CA1 = 4k +#ifndef OLD_LAYOUT + ld a,(USER_TABLE + USER_THRESHOLD) ; = CBR_REFERENCE setup earlier + out0 (CBR),a ; first code window (not necessary yet) +#endif + jp (hl) ; jump to entry address from exe header +runsys_end: + + .if (runsys_end-start) > 1000h +error - runsys stub routine must be within the first window + .endif + +; ----------------------------------------------------------------------------- + +mount_ram_drive: + ld de,SUPERBLOCK + ld hl,block + call block_read + + ld hl,(block) + ld de,SMOUNTED + or a + sbc hl,de + jr nz,black_magic + + ld hl,(block+2) + ld (reserv),hl + ld hl,(block+4) + ld (isize),hl + ld hl,(block+6) + ld (fsize),hl + ret + +; ----------------------------------------------------------------------------- +; had some kind of fatal error, the entry points are to save code space + +check_e_magic: + ld hl,(e_magic) + ld de,E_MAGIC + or a + sbc hl,de + ret z + + call gmess + defb 'bad e_magic: ',0 + jr error_magic + +check_e_format: + ld hl,(e_format) + ld de,E_FORMAT_KERNEL + or a + sbc hl,de + ret z + + call gmess + defb 'bad e_format: ',0 + jr error_magic + +black_magic: + call gmess + defb 'bad magic: ',0 + +error_magic: + add hl,de + +error_ahexw: + call ahexw + +error_acrlf: + call acrlf + +error_bomb: + ; try not to surprise the user unnecessarily + call gmess + defb 'doing a clean boot',0dh,0ah,0 + + ; before erroring, prepare to clobber CP/M drive A: directory + ld hl,block + ld de,block+1 + ld bc,BUFSIZE-1 + ld (hl),0aah ; clobbering pattern + ldir ; initialise temporary buffer + + ; perform the clobbering (this ensures a clean boot from EPROM) +#if 1 + ld de,0 + ld b,4 +clobber_loop: + push bc + push de + + ld hl,block + call block_write + + pop de + pop bc + inc de + djnz clobber_loop +#else + ld de,304h + ld l,c + ld h,b ; ld hl,0 ; e:hl -> destination 4:0000 + + ld b,4 ; clobber until just before 4:0800 +clobber_loop: + push bc + + ld iy,block ; copy from d:iy -> destination + ld bc,BUFSIZE ; bytes to copy + call copyr ; copy them, one byte at a time + + pop bc + djnz clobber_loop +#endif + + ; ready to reboot, by instructing the WPO chip on motherboard + ld a,0aah + out0 (TRDR),A ; command byte to error the system + ld a,13h + out0 (CNTR),A ; TE=1, divisor = 3, start transmission + + ; wait for the reboot to occur, or else we're rather stuck + jr $ + +; ----------------------------------------------------------------------------- + +gmess: call amess + defb 'gboot: ',0 + jp amess + +rsel1: +#if 1 /* temporary only */ + ld de,2 ; save eprom serial no to 2:fc81 + call copy_serial_no +#endif + + ld a,81h + out0 (TRDR),A ; command byte to set RSEL=1 + ld a,13h + out0 (CNTR),A ; TE=1, divisor = 3, start transmission + + sub a + dec a + jr nz,$-1 + dec a + jr nz,$-1 + dec a + jr nz,$-1 + dec a + jr nz,$-1 ; delay for command to be processed + +#if 1 /* temporary only */ + ld de,200h ; restore eprom serial no from 2:fc81 +copy_serial_no: + ld hl,0fc81h + push hl + pop iy + ld bc,5 + jp copyr +#else + ret +#endif + +say_starting: + call gmess + defb 'starting operating system',0dh,0ah,0 + ret + +virtual_init: + call rsel1 + + ld a,#GBOOT_CBAR + out0 (CBAR),a ; CA0 = 0k, bank area = 4k, CA1 = 60k + ld a,#GBOOT_KRNL_CBR + out0 (CBR),a ; access KRNL_START via GBOOT_KRNL_OFF + +#ifndef OLD_LAYOUT + ld de,#GBOOT_KRNL_OFF + KRNL_TABLE + 1 + ; address of kernel memory table + 1 + ld bc,0ffh ; size of kernel memory table - 1 + call clear_bc_p1_at_de_m1 + ; careful! b will be used again below!! + +; it's now accessed via GBOOT_USER_OFF +; ld hl,#KRNL_TABLE + KRNL_THRESHOLD +; ld (GBOOT_KRNL_OFF + BBR_REFERENCE),hl + + ld hl,#USER_BBR + (USER_CBAR << 8) + ld (GBOOT_KRNL_OFF + KRNL_TABLE + KRNL_THRESHOLD),hl +#endif + +#if GBOOT_USER_CBR + ld a,#GBOOT_USER_CBR +#else + sub a +#endif + out0 (CBR),a ; access USER_TABLE via GBOOT_USER_OFF + + ld de,#GBOOT_USER_OFF + USER_TABLE + 1 + ; address of user memory table + 1 +#ifndef OLD_LAYOUT + dec c ;ld c,0ffh ; size of user memory table - 1 (b=0) + call clear_bc_p1_at_de_m1 + + ld hl,#KRNL_TABLE + KRNL_THRESHOLD + ld (GBOOT_USER_OFF + BBR_REFERENCE),hl + + ld hl,#USER_TABLE + USER_THRESHOLD + ld (GBOOT_USER_OFF + CBR_REFERENCE),hl + ret +#else + ld bc,0ffh ; size of user memory table - 1 + jr clear_bc_p1_at_de_m1 +#endif + +clear_udata: + call get_udata_size_m1 ; returns bc = size-1, de = start+1 + ret c + +#if GBOOT_USER_OFF + ld hl,#GBOOT_USER_OFF + add hl,de ; need to adjust the value from header + ex de,hl +#endif + ; fall into clear_bc_p1_at_de_m1 + +clear_bc_p1_at_de_m1: + ld l,e + ld h,d + dec hl + ld (hl),0 + + ld a,c + or b + ret z + + ldir + ret + +de_min_hl_de: + ; enter with values in hl and de, returns de = min(hl, de) + or a + sbc hl,de + ret nc ; de is lesser + add hl,de ; hl was lesser, restore its value + ex de,hl ; and return the original hl in de + ret + +get_ca0_size: + ld hl,(e_hsize) ; variable size of header + ld de,exe_header_size ; subtract fixed size of header + jr calculate_size + +get_ca1_size: + ld hl,(e_udata) ; ending logical addr in CA1 region + ld de,(e_idata) ; starting logical addr in CA1 region + jr calculate_size + +get_udata_size_m1: + ld hl,(e_break) ; ending logical addr to be cleared + ld de,(e_udata) ; starting logical addr to be cleared + inc de ; special algorithm for correct cf + ; fall into calculate_size + +calculate_size: ; enter with hl = start addr, de = end + or a + sbc hl,de ; find the difference + ld c,l + ld b,h ; bc = bytes to load for region + ret + +; ----------------------------------------------------------------------------- + +dir_search: + ld (dir_name),hl + +#if 1 /* new kernel format */ + call file_setup ; read inode and prepare to walk file + +dir_search_loop: + ld bc,SIZEOF_DIRECT_T + ld hl,directory_buf + call file_read ; returns hl = preserved, cf set up + ret c ; also implies nz ; directory search failed (not found) + + inc hl + + ld de,(dir_name) + ld b,DIRNAMELEN + +dir_search_compare_loop: + inc hl + + ld a,(de) + cp (hl) + jr nz,dir_search_loop ; didn't match, go and read another + or a + jr z,dir_search_compare_good ; matched, and sentinel was reached + + inc de + djnz dir_search_compare_loop + + ; matched, and directory filename was of maximal length + ld a,(de) + or a + ; if user's filename is exactly maximum, return zf=1 (found) + ; if user's filename is longer than maximum, return zf=0 (not found) + +dir_search_compare_good: + ld de,(directory_buf) ; de = return value, inode number + ret ; with zf=1 from the comparisons above +#else + ld hl,inode + call inode_read ; read inode of the dir to be searched + + call bmap_setup ; prepare counters to walk the file + jr dir_search_loope + +dir_search_loop: + push hl ; h = count of entries in current block + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_dir_block ; hole in directory + + ld hl,block + push hl + call block_read + pop hl + pop bc ; b = count of entries in current block + +dir_search_entry_loop: + push hl + inc hl + + ld de,(dir_name) + ld c,DIRNAMELEN + +dir_search_compare_loop: + inc hl + + ld a,(de) + cp (hl) + jr nz,dir_search_compare_bad + or a + jr z,dir_search_compare_good + + inc de + dec c + jr nz,dir_search_compare_loop + + ; matched, and directory filename was of maximal length + ld a,(de) + or a + ; if user's filename is exactly maximum, return zf=1 (found) + ; if user's filename is longer than maximum, return zf=0 (not found) + +dir_search_compare_good: + pop hl + ld e,(hl) + inc hl + ld d,(hl) + ret + +dir_search_compare_bad: + pop hl + ld de,SIZEOF_DIRECT_T + add hl,de + djnz dir_search_entry_loop + +dir_search_loope: + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + add hl,hl + add hl,hl + add hl,hl + add hl,hl ; assumes SIZEOF_DIRECT_T = 16!! + + ld a,h ; a = valid bytes / SIZEOF_DIRECT_T + or a + jr nz,dir_search_loop + + inc a ; nz + ret + +bad_dir_block: + call gmess + defb 'hole in directory',0dh,0ah,0 + jp error_bomb +#endif + +; ----------------------------------------------------------------------------- + +bad_file: + call gmess + defb 'file not found',0dh,0ah,0 + jp error_bomb + +bad_length: + call gmess + defb 'file too short',0dh,0ah,0 + jp error_bomb + +load_kernel_bin: + ld de,ROOTINODE + ld hl,name_boot + call dir_search ; returns de = the found inode + jr nz,bad_file + + ld hl,name_kernel_bin + call dir_search ; returns de = the found inode + jr nz,bad_file + + call file_setup ; read inode and prepare to walk file + + ld hl,exe_header_buf + ld bc,exe_header_size + call file_read ; read first block, copy header to buf + jr c,bad_length + + call check_e_magic ; ensure e_magic = E_MAGIC + call check_e_format ; ensure e_format = E_FORMAT_KERNEL + + ld a,#GBOOT_KRNL_CBR + out0 (CBR),a ; access KRNL_START via GBOOT_KRNL_OFF + + call get_ca0_size ; returns bc = size, de = start of copy + ld hl,#GBOOT_KRNL_OFF + KRNL_START + call file_read ; read CA0 data to kernel data segment + +#if GBOOT_USER_CBR + ld a,#GBOOT_USER_CBR +#else + sub a +#endif + out0 (CBR),a ; access USER_START via GBOOT_USER_OFF + + call get_ca1_size ; returns bc = size, de = start of copy +#if GBOOT_USER_OFF + ld hl,#GBOOT_USER_OFF + add hl,de ; need to adjust the value from header +#else + ex de,hl ; correct uzi ; destination specified by file header +#endif + call file_read ; read CA1 data to kernel data segment + + call clear_udata ; now subroutinised (see initial_boot) + ; fall into file_scan ; scan file and construct block list + +file_scan: + ld hl,region_list + ld (region_ptr),hl + +#if 0 /* new kernel format */ + ld hl,inode + call inode_read ; read inode of the target file +#endif + + call bmap_setup ; prepare counters to walk the file + call bmap_remain ; get hl = valid bytes in first block + ; and decrement the file size remaining + ld a,l + or h ; any bytes in file? + jr z,bad_file_size ; no, abort proceedings + +file_scan_loop: + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block +; ld l,e +; ld h,d +; call ahexw + + ld a,e + and #PAGE_BLOCKS-1 ; check it starts on a page boundary + jr nz,bad_alignment + + ld hl,(region_ptr) + ld (hl),e + inc hl + ld (hl),d ; stash away the starting block no. + inc hl + ld (region_ptr),hl ; for the current region (bumped) + + ld b,#REGION_BLOCKS-1 + +file_region_loop: + push bc + push de + + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h + jr z,file_region_final + + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block +; ld a,' ' +; call abyte +; ld l,e +; ld h,d +; call ahexw + + ex de,hl ; hl = the actual block no. from file + pop de + inc de ; de = expected, contiguous block no. + + or a + sbc hl,de + jr nz,bad_alignment + + pop bc + djnz file_region_loop +; call acrlf + + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h ; anything left to read? + jr nz,file_scan_loop ; yes (scan is limited by file size) + ret ; last region is = REGION_BLOCKS blocks + +file_region_final: +; call acrlf + pop hl ; last region is < REGION_BLOCKS blocks + pop hl ; clean up saved variables, and done + ret + +bad_file_size: + call gmess + defb 'null file',0dh,0ah,0 + jp error_bomb + +bad_file_block: + call gmess + defb 'hole in file',0dh,0ah,0 + jp error_bomb + +bad_alignment: + call gmess + defb 'not aligned',0dh,0ah,0 + jp error_bomb + +; ----------------------------------------------------------------------------- + +#if 1 /* new kernel format */ +file_read: + ; enter with hl -> user buffer, bc = bytes to read (must be nonzero!!) + + push hl ; this will be preserved for caller + push bc ; this will be used to set cf on return + + ld (read_user),bc + ld (read_user_ptr),hl + + ld hl,0 + ld (read_done),hl + + ld hl,(read_remain) + ld a,l + or h ; got any leftover data in buffer? + jr nz,file_read_entry ; yes, use it first + +file_read_loop: + ; read a new block into the buffer, recording no. of valid bytes read + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h + jr z,file_read_done ; reached end of file + + ld (read_remain),hl + + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block ; hole in file + + ld hl,block + ld (read_remain_ptr),hl + call block_read + +file_read_entry: + ; satisfy as much as possible of user's request from current buffer + ld hl,(read_remain) ; bytes available + ld de,(read_user) ; bytes wanted + call de_min_hl_de ; de = amount to be processed this time + + ld hl,(read_remain) + or a + sbc hl,de + ld (read_remain),hl ; reduce bytes available by amount + + ld hl,(read_user) + or a + sbc hl,de + ld (read_user),hl ; reduce bytes wanted by amount + + ld hl,(read_done) + add hl,de + ld (read_done),hl ; increase bytes copied by amount + + ld c,e + ld b,d + ld de,(read_user_ptr) + ld hl,(read_remain_ptr) + ldir + ld (read_remain_ptr),hl + ld (read_user_ptr),de + + ; see if the user's entire request has now been processed + ld hl,(read_user) + ld a,l + or h + jr nz,file_read_loop ; no, get another block + +file_read_done: + ld hl,(read_done) ; indicates how much was really read + ld c,l + ld b,h ; bc = return value, how much was read + + pop de ; de = size of user's original request + or a + sbc hl,de ; set cf=1 if less than amount wanted + + pop hl ; hl preserved for convenience of user + ret + +; ----------------------------------------------------------------------------- + +file_setup: + ; enter with de = inode number for file to be read + + ld hl,inode + call inode_read ; read inode of the dir to be searched + + ld hl,0 + ld (read_remain),hl ; forces a new data block to be loaded + ; fall into bmap_setup +#endif + +bmap_setup: + ld hl,(inode+8) + ld (size_remain),hl + ld hl,(inode+10) + ld (size_remain+2),hl + + ld hl,inode+24 + ld (direct_ptr),hl + ld hl,indirect_block+BUFSIZE + ld (indirect_ptr),hl + ld hl,dindirect_block+BUFSIZE + ld (dindirect_ptr),hl + ret + +bmap_remain: + ld hl,(size_remain) + ld de,(size_remain+2) + + ld bc,BUFSIZE + or a + sbc hl,bc + ex de,hl + ld b,0 ; ld bc,0 + sbc hl,bc + ex de,hl + jr c,bmap_remain_final + + ld (size_remain),hl + ld (size_remain+2),de + + ld hl,BUFSIZE + ret ; return a complete block of size hl + +bmap_remain_final: + ld hl,(size_remain) + ld (size_remain),bc ; 0 + ;ld (size_remain+2),bc ; 0 + ret ; return a partial block of size hl + +bmap_block: + ld hl,(direct_ptr) + ld de,inode+24+DIRECTBLOCKS*2 + or a + sbc hl,de + jr nc,bmap_indirect + + ld hl,(direct_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (direct_ptr),hl + ret + +bmap_indirect: + ld hl,(indirect_ptr) + ld de,indirect_block+BUFSIZE + or a + sbc hl,de + jr c,bmap_indirect_already + + ld hl,(direct_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (direct_ptr),hl + + ld hl,indirect_block + ld (indirect_ptr),hl + call block_read + +bmap_indirect_already: + ld hl,(direct_ptr) + ld de,inode+24+DIRECTBLOCKS*2+INDIRECTBLOCKS*2+1 ; fudge! + or a + sbc hl,de + jr nc,bmap_dindirect + + ld hl,(indirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (indirect_ptr),hl + ret + +bmap_dindirect: + ld hl,(dindirect_ptr) + ld de,dindirect_block+BUFSIZE + or a + sbc hl,de + jr c,bmap_dindirect_already + + ld hl,(indirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (indirect_ptr),hl + + ld hl,dindirect_block + ld (dindirect_ptr),hl + call block_read + +bmap_dindirect_already: + ld hl,(dindirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (dindirect_ptr),hl + ret + +; ----------------------------------------------------------------------------- +; enter with hl -> buffer, de = inode number + +inode_read: + push hl + + ld a,e + and DINODESPERBLOCK-1 ; find inode position within disk block + + ld b,DINODESPERBLOCKLOG ; shift count to find which disk block +inode_shift: + srl d + rr e + djnz inode_shift ; leaves de = block (relative to itab) + + ld hl,(isize) + scf + sbc hl,de ; check if block is beyond end of table + jr c,bad_inode + + ld hl,(reserv) + add hl,de + ex de,hl ; adjust block for start of inode table + + ld hl,block + push af + push hl + call block_read + pop hl + pop de ; d = inode position within block + + ld bc,SIZEOF_DINODE_T + ld e,c + mlt de + add hl,de + pop de ; de -> user's buffer for disk inode + ldir ; copy it, freeing up block buffer + ret + +bad_inode: + call gmess + defb 'bad inode: ',0 + add a,'0' + call abyte + call amess + defb ', ',0 + ex de,hl + jp error_ahexw + +; ----------------------------------------------------------------------------- +; enter with hl -> buffer, de = block number + +block_read: + push hl + call block_xlate ; a:hl -> data in ramdrive + + push hl + pop iy + ld d,a ; d:iy -> data in ramdrive + + pop hl + ld e,3 ; e:hl -> user's buffer in seg 3: + jp copyr ; copy BUFSIZE bytes from d:iy to e:hl + +block_write: + push hl + call block_xlate ; a:hl -> data in ramdrive + + pop iy + ld d,3 ; d:iy -> user's buffer in seg 3: + + ld e,a ; e:hl -> data in ramdrive + jp copyr ; copy BUFSIZE bytes from d:iy to e:hl + +block_xlate: + ld hl,HD0_SIZE + scf + sbc hl,de ; check whether block no is in range + jr c,bad_block + + ld bc,BUFSIZE ; bytes to be copied for 1 block + + ld hl,HD0_START + add hl,de ; hl = block index (from start of ram) + + ld a,h + ld h,l + ld l,c ;0 ; a:hl = block index * 100h + + add hl,hl + adc a,a ; a:hl = block index * BUFSIZE (200h!!) + ret + +block_to_bank: + ld a,(hl) + inc hl + ld d,(hl) ; d:a = block no. from start of disk + inc hl + + srl d + rra + srl d + rra + srl d + rra ; a = block / 8 (PAGE_BLOCKS = 8!!) + + ;add a,#HD0_START/PAGE_BLOCKS-4 ; correct code uzi + add a,#HD0_START/PAGE_BLOCKS - (CODE_START >> 12) ; BBR or CBR val + ret + +bad_block: + call gmess + defb 'bad block: ',0 + ex de,hl + jp error_ahexw + +; ----------------------------------------------------------------------------- + +translate_regions: + ld bc,#GBOOT_USER_OFF + USER_TABLE + USER_THRESHOLD + ; address of user memory table + 80h + ld hl,region_list ; -> block no. of 1st found region + jr translate_loope + +translate_loop: + add hl,de ; restore hl value from comparison + + call block_to_bank ; calculates a from word at hl (bumped) + +#if REGION_BYTES > WINDOW_BYTES + ld e,#REGION_BYTES / WINDOW_BYTES +translate_window: +#endif + ld (bc),a ; a = BBR or CBR value to access page + inc bc +#if REGION_BYTES > WINDOW_BYTES +#if (WINDOW_BYTES / PAGE_BYTES) == 1 + inc a +#else + add a,#WINDOW_BYTES / PAGE_BYTES +#endif + dec e + jr nz,translate_window +#endif + +translate_loope: + ld de,(region_ptr) ; indicates end of region list + or a + sbc hl,de ; see if we've gone past the end + jr c,translate_loop + + ret + +load_parameters: + ld de,(e_break) ; untranslated base of parameter block + + ld hl,(parameter_argv) + add hl,de + ld (parameter_argv),hl ; relocate argv + + ld hl,arguments + call load_parameter_loope ; relocate argv array entries + + ld hl,(parameter_envp) + add hl,de + ld (parameter_envp),hl ; relocate envp + + ld hl,environment + call load_parameter_loope ; relocate envp array entries + +#if GBOOT_USER_OFF + ld hl,#GBOOT_USER_OFF + add hl,de ; need to adjust the value from header + ex de,hl +#endif + ld hl,parameters ; pre-initialised parameter block + + ld bc,parameters_end-parameters ; size in bytes to copy + ldir ; copy parameter block for kernel init + ; careful! b will be used again below!! + + ret + +load_parameter_loop: + ld a,c + add a,e + dec hl + ld (hl),a + + ld a,b + adc a,d + inc hl + ld (hl),a + + inc hl +load_parameter_loope: + ld c,(hl) + inc hl + ld b,(hl) + + ld a,c + or b + jr nz,load_parameter_loop + + ret + +; ----------------------------------------------------------------------------- + +initial_boot: + ld hl,UZINAM + call LDFILE ; copy entire KERNEL.BIN data to c:0000 + ret z ; halt if the file could not be found + + call gmess + defb 'loading A:KERNEL.BIN',0dh,0ah,0 + + ld a,'1' + ld (argument_1+7),a ; so kernel will use /dev/hd1 as root + +loop: ld de,(LDMAX) + or a + sbc hl,de ; did we load an entire extent? + jr nz,done ; no, assume the file is fully loaded + + add hl,de ; restore hl = LDMAX + ld (LDPTR),hl ; load from where we finished last time + + ld a,l + or h ; did we wrap around to a new segment? + jr nz,cont + + ld hl,LDSEG + inc (hl) ; yes, need to advance segment counter + +cont: ld hl,4000h + add hl,de + ld (LDMAX),hl ; advance LDMAX to load 4000h bytes + + ld hl,LDEXT + inc (hl) ; advance extent counter to next extent + + ld hl,UZINAM + call LDFILE ; copy more CMX.BIN data to LDSEG:LDPTR + jr nz,loop + + ld hl,LDEXT + dec (hl) ; account for extent that wasn't found + +done: + call virtual_init ; modifies CBR (can't call EPROM now) + + ld iy,0 + ld hl,exe_header_buf + ld de,0c03h ; copy from c: to 3: + ld bc,exe_header_size + call copyr ; read the executable's header + + call check_e_magic ; ensure e_magic = E_MAGIC + call check_e_format ; ensure e_format = E_FORMAT_KERNEL + + call get_ca0_size ; returns bc = size, de = start of copy + push de + pop iy + + ld de,0c00h ; copy from c: to 0: + ld l,e + ld h,e ; destination = 0 (start of CA0 region) + call copyr ; returns iy advanced, d & e preserved + push de + + call get_ca1_size ; returns bc = size, de = start of copy +#if USER_BBR + ld hl,#USER_BBR << 12 + add hl,de ; adjust for intended user BBR if not 0 +#else + ex de,hl ; correct code nos +#endif + + pop de ; copy from c: to 0: + call copyr + + call clear_udata ; now subroutinised (see initial_boot) + + call say_starting ; tell the user we have liftoff + + ld a,(LDEXT) ; number of extents (assume = regions) + inc a ; do all extents, including the first +#if (REGION_BYTES / WINDOW_BYTES) >= 4 + rlca ; happens for nos, but not uzi +#endif +#if (REGION_BYTES / WINDOW_BYTES) >= 2 + rlca ; happens for nos, but not uzi +#endif + ld b,a ; how many extents were loaded ? (-1) + + ld hl,#GBOOT_USER_OFF + USER_TABLE + USER_THRESHOLD + ; address of user memory table + 80h + ld a,#0xc0 - (CODE_START >> 12) ; BBR or CBR to access first page + +virtual_loop: + ld (hl),a ; map 16kbytes into virt memory space + inc hl +#if (WINDOW_BYTES / PAGE_BYTES) == 1 + inc a +#else + add a,#WINDOW_BYTES / PAGE_BYTES +#endif + djnz virtual_loop + + jp kazumi + +; ----------------------------------------------------------------------------- + +#include "diag.inc" +#include "copyr.inc" +#include "clears.inc" + +; ----------------------------------------------------------------------------- + +parameters: defw 2 ; argc +parameter_argv: defw arguments-parameters +parameter_envp: defw environment-parameters +arguments: defw argument_0-parameters + defw argument_1-parameters + defw 0 ; terminates the argument list +argument_0: defb '/boot/kernel.bin',0 +argument_1: defb 'root=hd0',0 +environment: defw environment_0-parameters + defw 0 ; terminates the environment list +environment_0: defb 'SN=00000',0 +parameters_end: + +name_boot: defb 'boot',0 +name_kernel_bin: defb 'kernel.bin',0 + + ; note: defb 1 is very important here, because if UZINAM ends + ; up on a 32 byte boundary, the KERNEL.BIN filename (extent 0) + ; may be seen by the initial_boot routine, preventing the + ; proper loading of /boot/kernel after formatting the ramdrive +UZINAM: defb 1,'KERNEL BIN' ; LDNAM +LDEXT: defb 0 ; LDEXT +LDSEG: defb 0ch ; LDSEG +LDPTR: defw 0 ; LDPTR +LDMAX: defw 4000h ; LDMAX + +; ----------------------------------------------------------------------------- + +final: ; initialised code and data ends here + + .if (final-start) > 800h ; maximum size of the filesystem boot block +error - gboot has too much code + initialized data + .endif + +; ----------------------------------------------------------------------------- + +reserv: +isize equ reserv+2 +fsize equ isize+2 + +dir_name equ fsize+2 +size_remain equ dir_name+2 + +direct_ptr equ size_remain+4 +indirect_ptr equ direct_ptr+2 +dindirect_ptr equ indirect_ptr+2 + +inode equ dindirect_ptr+2 +block equ inode+SIZEOF_DINODE_T + +indirect_block equ block+BUFSIZE +dindirect_block equ indirect_block+BUFSIZE + +#if 1 /* new kernel format */ +directory_buf equ dindirect_block+BUFSIZE + +read_remain equ directory_buf+SIZEOF_DIRECT_T +read_remain_ptr equ read_remain+2 +read_user equ read_remain_ptr+2 +read_user_ptr equ read_user+2 +read_done equ read_user_ptr+2 + +exe_header_buf equ read_done+2 +e_magic equ exe_header_buf +e_format equ e_magic+2 +e_size equ e_format+2 +e_hsize equ e_size+4 +e_idata equ e_hsize+2 +e_entry equ e_idata+2 +e_udata equ e_entry+2 +e_stack equ e_udata+2 +e_break equ e_stack+2 +exe_header_size equ e_break+2-exe_header_buf + +region_ptr equ exe_header_buf+exe_header_size +#else +region_ptr equ dindirect_block+BUFSIZE +#endif +region_list equ region_ptr+2 + +stack_start equ region_list+2*(HD0_SIZE/REGION_BLOCKS) +minsp equ stack_start+MINIMAL_STACK ; initial sp is at least this + +; ----------------------------------------------------------------------------- + + .if (minsp-start) > CA1_GBOOT ; nos 1000h, because CBAR = 10h (uzi 8000h, 80h) +error - gboot has too much uninitialized data + .endif + +; ----------------------------------------------------------------------------- + + END diff --git a/src/nos/gboot/gboot.lnk b/src/nos/gboot/gboot.lnk new file mode 100644 index 00000000..87fdf744 --- /dev/null +++ b/src/nos/gboot/gboot.lnk @@ -0,0 +1,6 @@ +-m +-u +-i +-o gboot +-b _DEFAULT=0 +gboot diff --git a/src/nos/gboot/gboot.sav b/src/nos/gboot/gboot.sav new file mode 100644 index 00000000..a0deb495 --- /dev/null +++ b/src/nos/gboot/gboot.sav @@ -0,0 +1,1276 @@ +; gboot.S +; Generic Hytech boot loader program to occupy 4 sectors at start of each disk + +#include "asmglobl.h" + + rseg RCODE + +; ----------------------------------------------------------------------------- + +start: defm 'XXXXYYMMDDHHMMSS' ; BOOT.BIN CRC, date and time + + ; hytech eprom will enter at base+10h + ld sp,CA1_GBOOT ; as we will later set CBAR = 20h + call clears + call acrlf + call initial_boot ; for compatibility (returns if not ok) + jr entry + defb 0,0 + + ; need a cp/m directory entry at base+20h + defb 0,'BOOT BIN',0,0,0,(final+7fh-start)/80h + defb 0 + defb ((400h-(final-start)) >> 14) & 1 + defb ((800h-(final-start)) >> 14) & 2 + defb ((0c00h-(final-start)) >> 14) & 3 + defb 0,0,0,0,0,0,0,0,0,0,0,0 + +; ----------------------------------------------------------------------------- + +entry: + call gmess + defb 'loading /boot/kernel.bin',0dh,0ah,0 + + .if 1 ; new kernel format + call virtual_init ; modifies CBR (can't call EPROM now) + .endif + + ld de,SUPERBLOCK + ld hl,block + call block_read + + ld hl,(block) + ld de,SMOUNTED + or a + sbc hl,de + jp nz,black_magic + + ld hl,(block+2) + ld (reserv),hl + ld hl,(block+4) + ld (isize),hl + ld hl,(block+6) + ld (fsize),hl + + ld de,ROOTINODE + ld hl,name_boot + call dir_search ; returns de = the found inode + jr nz,bad_file + + ld hl,name_kernel_bin + call dir_search ; returns de = the found inode + jr nz,bad_file + + .if 1 ; new kernel format + call file_setup ; read inode and prepare to walk file + + ld hl,exe_header_buf + ld bc,exe_header_size + call file_read ; read first block, copy header to buf + jr c,bad_length + + call check_e_magic ; ensure e_magic = E_MAGIC + call check_e_format ; ensure e_format = E_FORMAT_KERNEL + + ;ld a,0-8 ; correct code for uzi kernel + ;out0 (CBR),a ; so that logical 8000 = phys 0:0000 +#if (KRNL_START - CA1_GBOOT) >> 12 + ld a,#(KRNL_START - CA1_GBOOT) >> 12 ; -2 for nos kernel +#else + sub a ; this should never happen +#endif + out0 (CBR),a ; so that logical 2000 = phys 0:0000 + + call get_ca0_size ; returns bc = size, de = start of copy + ;ld hl,8000h ; destination = start of CA0 region + ld hl,CA1_GBOOT + (KRNL_START & 0xfff) ; 2000h + call file_read ; read CA0 data to kernel data segment + + ;sub a ; also works, see bstartup.s01 at label init + ;out0 (CBR),a ; window onto 0:8000, virt memory table + ;ld a,4-8 ; correct code for the latest uzi kernel + ;out0 (CBR),a ; window onto 0:4000, virt memory table +#if OS_BANK + ((USER_START - CA1_GBOOT) >> 12) + ld a,#OS_BANK + ((USER_START - CA1_GBOOT) >> 12) ; -1 for nos +#else + sub a ; this should never happen +#endif + out0 (CBR),a ; window onto 0:2000, virt memory table + + call get_ca1_size ; returns bc = size, de = start of copy +#if CA1_GBOOT - (USER_START & ~0xfff) + ld hl,#CA1_GBOOT - (USER_START & ~0xfff) + add hl,de ; need to adjust the value from header +#else + ex de,hl ; correct code uzi ; destination specified by file header +#endif + call file_read ; read CA1 data to kernel data segment + + call get_udata_size_m1 ; returns bc = size-1, de = start+1 + call nc,clear_bc_p1_at_de_m1 ; if bc => 0, clear bc+1 bytes at de-1 + .endif + + call file_scan ; scan file and construct block list + + .if 1 ; new kernel format + call say_starting ; tell the user we have liftoff + .else + call virtual_init ; modifies CBR (can't call EPROM now) + .endif + + ;ld bc,8080h + ld bc,CA1_GBOOT + (USER_TABLE & 0xfff) + 0x80 ; 2080h for nos + ; initial spot in virt memory table + .if 1 ; new kernel format + ld hl,region_list ; -> block no. of 1st found region + .else + ld hl,region_list+2 ; -> block no. of 2nd found region + .endif + jr translate_loope + +translate_loop: + add hl,de ; restore hl value from comparison + + call block_to_bbr ; calculates a from word at hl (bumped) + ld (bc),a ; a = required bbr value to access page + inc bc + +translate_loope: + ld de,(region_ptr) ; indicates end of region list + or a + sbc hl,de ; see if we've gone past the end + jr c,translate_loop + + .if 0 ; new kernel format + ld hl,region_list ; there is at least one entry + call block_to_bbr ; a = required bbr value for init code + .endif + +kazumi: + .if 0 + ; please preserve a for entering kernel at label runsys! + .endif + + .if 1 ; correct code for nos, acceptable for uzi +#if CA1_GBOOT - (USER_START & ~0xfff) + ld hl,(e_break) ; parameters just after stack region + ld de,#CA1_GBOOT - (USER_START & ~0xfff) + add hl,de ; need to adjust the value from header + ex de,hl +#endif + .else ; correct code for uzi only + ld sp,parameters-parameters_end ; stack just under copied params + .endif + + ld hl,parameters ; pre-initialised parameter block + .if 1 ; correct code for nos, acceptable for uzi +#if (CA1_GBOOT - (USER_START & ~0xfff)) == 0 + ld de,(e_break) +#endif + .else ; correct code for uzi only + ld de,parameters-parameters_end ; to fit neatly at top of memory + .endif + ld bc,parameters_end-parameters ; size in bytes to copy + ldir ; copy parameter block for kernel init + ; careful! b will be used again below!! + +; .if 1 ; so as not to corrupt CBR when jumping to the loaded program + .if 1 ; new kernel format +#if CA1_GBOOT - (USER_START & ~0xfff) + ld hl,(e_stack) ; load into base of stack region + ld de,#CA1_GBOOT - (USER_START & ~0xfff) + add hl,de ; need to adjust the value from header + ex de,hl +#endif + ld hl,runsys ; start of small stub program below +#if (CA1_GBOOT - (USER_START & ~0xfff)) == 0 + ld de,(e_stack) ; load into base of stack region + push de ; -> just after virtual memory table +#endif + .else + ld hl,runsys ; start of small stub program below + ;ld de,8100h + ld de,USER_START ; 0x1100 for nos, 0x8100 for uzi + push de ; -> just after virtual memory table + .endif + + ld c,runsys_end-runsys ; size of small stub program (b=0) + ldir ; copy stub program + + .if 1 ; new kernel format +#if CA1_GBOOT - (USER_START & ~0xfff) + ld bc,(e_stack) ; need the unadjusted value from header +#else + pop bc ; they're the same, so use push and pop +#endif + + .if 1 ; correct code for nos, acceptable for uzi + ld hl,(e_break) ; information for the client program + ld de,parameters_end-parameters + add hl,de ; need to adjust for environment size + ex de,hl + .endif + ld hl,(e_entry) ; information for the runsys stub + .if 0 ; correct code for uzi only + ld de,(e_break) ; information for the client program + .endif + +#if CA1_GBOOT - (USER_START & ~0xfff) + ; We have been using translated addresses to set up the client area, + ; since the client's view of its area begins before CA1_GBOOT, which + ; is the start of our window. It's now time to untranslate them, so + ; that the memory management unit is left in the correct state for + ; the client. After this, we can't access variables such as e_break. + ; In addition we must be executing at an address of less than 1000h. + ld sp,(e_break) + + ld a,10h + out0 (CBAR),a + + ld a,OS_BANK + out0 (CBR),a + + push bc +#endif + .endif + ret ; enter stub program (jp 8100h) +; .else +; ;ld e,30h-8 +; ;out0 (CBR),e ; window onto runsys (CBAR = 80h) +; ld e,0x30 - (CA1_GBOOT >> 12) ; 0x2e for nos, 0x28 for uzi +; out0 (CBR),e ; window onto runsys (CBAR = 20h) +; jp runsys + CA1_GBOOT ; run the remaining startup from window +; .endif + +bad_file: + call gmess + defb 'file not found',0dh,0ah,0 + jr error_bomb + + .if 1 ; new kernel format +bad_length: + call gmess + defb 'file too short',0dh,0ah,0 + jr error_bomb + .endif + +runsys: + .if 1 ; new kernel format + .if 1 ; correct code for nos, acceptable for uzi + out0 (BBR),a ; so that BBR = CBR, otherwise we'd get + ; lost as soon as we modify CBAR (nos!) + .endif + ;ld a,84h + ;out0 (CBAR),a ; CA0 = 16k, bank area = 16k, CA1 = 32k + ld a,#(BA_START >> 12) + (CA1_START >> 8) ; 0xf1 for nos, 0x84 uzi + out0 (CBAR),a ; CA0 = 4k, bank area = 56k, CA1 = 4k + jp (hl) ; jump to entry address from exe header + .else + ;ld e,84h + ;out0 (CBAR),e ; CA0 = 16k, bank area = 16k, CA1 = 32k + ld e,#(BA_START >> 12) + (CA1_START >> 8) ; 0xf1 for nos, 0x84 uzi + out0 (CBAR),e ; CA0 = 4k, bank area = 56k, CA1 = 4k + + out0 (BBR),a ; bank area = logical 4000 = abs c:0000 + jp CODE_START ; execute file from the 1st loaded page + .endif +; .if 1 ; so as not to corrupt CBR when jumping to the loaded program +runsys_end: +; .endif + + .if (runsys_end-start) > 1000h +error - runsys stub routine must be within the first window + .endif + +; ----------------------------------------------------------------------------- +; had some kind of fatal error, the entry points are to save code space + + .if 1 ; new kernel format +check_e_magic: + ld hl,(e_magic) + ld de,E_MAGIC + or a + sbc hl,de + ret z + + call gmess + defb 'bad e_magic: ',0 + jr error_magic + +check_e_format: + ld hl,(e_format) + ld de,E_FORMAT_KERNEL + or a + sbc hl,de + ret z + + call gmess + defb 'bad e_format: ',0 + ; fall into error_magic + + .endif + +black_magic: + call gmess + defb 'bad magic: ',0 + +error_magic: + add hl,de + +error_ahexw: + call ahexw + +error_acrlf: + call acrlf + +error_bomb: + ; try not to surprise the user unnecessarily + call gmess + defb 'doing a clean boot',0dh,0ah,0 + + ; before erroring, prepare to clobber CP/M drive A: directory + ld hl,block + ld de,block+1 + ld bc,BUFSIZE-1 + ld (hl),0aah ; clobbering pattern + ldir ; initialise temporary buffer + + ; perform the clobbering (this ensures a clean boot from EPROM) + .if 1 + ld de,0 + ld b,4 +clobber_loop: + push bc + push de + + ld hl,block + call block_write + + pop de + pop bc + inc de + djnz clobber_loop + .else + ld de,304h + ld l,c + ld h,b ; ld hl,0 ; e:hl -> destination 4:0000 + + ld b,4 ; clobber until just before 4:0800 +clobber_loop: + push bc + + ld iy,block ; copy from d:iy -> destination + ld bc,BUFSIZE ; bytes to copy + call copyr ; copy them, one byte at a time + + pop bc + djnz clobber_loop + .endif + + ; ready to reboot, by instructing the WPO chip on motherboard + ld a,0aah + out0 (TRDR),A ; command byte to error the system + ld a,13h + out0 (CNTR),A ; TE=1, divisor = 3, start transmission + + ; wait for the reboot to occur, or else we're rather stuck + jr $ + +; ----------------------------------------------------------------------------- + +gmess: call amess + defb 'gboot: ',0 + jp amess + +rsel1: + .if 1 ; temporary only + ld de,2 ; save eprom serial no to 2:fc81 + call copy_serial_no + .endif + ld a,81h + out0 (TRDR),A ; command byte to set RSEL=1 + ld a,13h + out0 (CNTR),A ; TE=1, divisor = 3, start transmission + + sub a + dec a + jr nz,$-1 + dec a + jr nz,$-1 + dec a + jr nz,$-1 + dec a + jr nz,$-1 ; delay for command to be processed + .if 1 ; temporary only + ld de,200h ; restore eprom serial no from 2:fc81 +copy_serial_no: + ld hl,0fc81h + push hl + pop iy + ld bc,5 + jp copyr + .else + ret + .endif + + .if 1 ; new kernel format +say_starting: + call gmess + defb 'starting operating system',0dh,0ah,0 + ret +.endif + +virtual_init: + .if 0 ; new kernel format + call gmess + defb 'starting operating system',0dh,0ah,0 + .endif + + call rsel1 + + ;ld a,80h + ;out0 (CBAR),a ; CA0 = 0k, bank area = 32k, CA1 = 32k + ld a,#(BA_GBOOT >> 12) + (CA1_GBOOT >> 8) ; 20h + out0 (CBAR),a ; CA0 = 0k, bank area = 8k, CA1 = 56k + + ;sub a ; also works, see bstartup.s01 at label init + ;out0 (CBR),a ; window onto 0:8000, virt memory table + ;ld a,4-8 ; correct code for the latest uzi kernel + ;out0 (CBR),a ; window onto 0:4000, virt memory table +#if OS_BANK + ((USER_TABLE - CA1_GBOOT) >> 12) + ld a,#OS_BANK + ((USER_TABLE - CA1_GBOOT) >> 12) +#else + sub a ; correct code for the latest nos kernel +#endif + out0 (CBR),a ; window onto 0:1000, virt memory table + + .if 1 ; new kernel format + ;ld de,8001h + ld de,CA1_GBOOT + (USER_TABLE & 0xfff) + 1 ; 2001h for nos + ; address of virtual memory table+1 + ld bc,0ffh ; size of virtual memory table-1 + ; fall into clear_bc_p1_at_de_m1 + +clear_bc_p1_at_de_m1: + ld l,e + ld h,d + dec hl + ld (hl),0 + + ld a,c + or b + ret z + + ldir + ret + +de_min_hl_de: + ; enter with values in hl and de, returns de = min(hl, de) + or a + sbc hl,de + ret nc ; de is lesser + add hl,de ; hl was lesser, restore its value + ex de,hl ; and return the original hl in de + ret + +get_ca0_size: + ld hl,(e_hsize) ; variable size of header + ld de,exe_header_size ; subtract fixed size of header + jr calculate_size + +get_ca1_size: + ld hl,(e_udata) ; ending logical addr in CA1 region + ld de,(e_idata) ; starting logical addr in CA1 region + jr calculate_size + +get_udata_size_m1: + ld hl,(e_break) ; ending logical addr to be cleared + ld de,(e_udata) ; starting logical addr to be cleared + inc de ; special algorithm for correct cf + ; fall into calculate_size + +calculate_size: ; enter with hl = start addr, de = end + or a + sbc hl,de ; find the difference + ld c,l + ld b,h ; bc = bytes to load for region + ret + .else + ;ld hl,8000h ; correct code for uzi kernel + ld hl,CA1_GBOOT + (USER_TABLE & 0xfff) ; 2000h for nos + ;ld de,8001h ; correct code for uzi kernel + ld de,CA1_GBOOT + (USER_TABLE & 0xfff) + 1 ; 2001h for nos + ld bc,0ffh +#if USER_TABLE & 0xff + ld (hl),0 +#else + ld (hl),l ; correct code for the uzi or nos kernel +#endif + ldir ; zero out the virtual memory table + ret + .endif + +; ----------------------------------------------------------------------------- + +dir_search: + ld (dir_name),hl + + .if 1 ; new kernel format + call file_setup ; read inode and prepare to walk file + +dir_search_loop: + ld bc,SIZEOF_DIRECT_T + ld hl,directory_buf + call file_read ; returns hl = preserved, cf set up + ret c ; also implies nz ; directory search failed (not found) + + inc hl + + ld de,(dir_name) + ld b,DIRNAMELEN + +dir_search_compare_loop: + inc hl + + ld a,(de) + cp (hl) + jr nz,dir_search_loop ; didn't match, go and read another + or a + jr z,dir_search_compare_good ; matched, and sentinel was reached + + inc de + djnz dir_search_compare_loop + + ; matched, and directory filename was of maximal length + ld a,(de) + or a + ; if user's filename is exactly maximum, return zf=1 (found) + ; if user's filename is longer than maximum, return zf=0 (not found) + +dir_search_compare_good: + ld de,(directory_buf) ; de = return value, inode number + ret ; with zf=1 from the comparisons above + .else + ld hl,inode + call inode_read ; read inode of the dir to be searched + + call bmap_setup ; prepare counters to walk the file + jr dir_search_loope + +dir_search_loop: + push hl ; h = count of entries in current block + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_dir_block ; hole in directory + + ld hl,block + push hl + call block_read + pop hl + pop bc ; b = count of entries in current block + +dir_search_entry_loop: + push hl + inc hl + + ld de,(dir_name) + ld c,DIRNAMELEN + +dir_search_compare_loop: + inc hl + + ld a,(de) + cp (hl) + jr nz,dir_search_compare_bad + or a + jr z,dir_search_compare_good + + inc de + dec c + jr nz,dir_search_compare_loop + + ; matched, and directory filename was of maximal length + ld a,(de) + or a + ; if user's filename is exactly maximum, return zf=1 (found) + ; if user's filename is longer than maximum, return zf=0 (not found) + +dir_search_compare_good: + pop hl + ld e,(hl) + inc hl + ld d,(hl) + ret + +dir_search_compare_bad: + pop hl + ld de,SIZEOF_DIRECT_T + add hl,de + djnz dir_search_entry_loop + +dir_search_loope: + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + add hl,hl + add hl,hl + add hl,hl + add hl,hl ; assumes SIZEOF_DIRECT_T = 16!! + + ld a,h ; a = valid bytes / SIZEOF_DIRECT_T + or a + jr nz,dir_search_loop + + inc a ; nz + ret + +bad_dir_block: + call gmess + defb 'hole in directory',0dh,0ah,0 + jp error_bomb + .endif + +; ----------------------------------------------------------------------------- + +file_scan: + ld hl,region_list + ld (region_ptr),hl + + .if 0 ; new kernel format + ld hl,inode + call inode_read ; read inode of the target file + .endif + + call bmap_setup ; prepare counters to walk the file + call bmap_remain ; get hl = valid bytes in first block + ; and decrement the file size remaining + ld a,l + or h ; any bytes in file? + jr z,bad_file_size ; no, abort proceedings + +file_scan_loop: + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block +; ld l,e +; ld h,d +; call ahexw + + ld a,e + and #PAGE_BLOCKS-1 ; check it starts on a page boundary + jr nz,bad_alignment + + ld hl,(region_ptr) + ld (hl),e + inc hl + ld (hl),d ; stash away the starting block no. + inc hl + ld (region_ptr),hl ; for the current region (bumped) + + ld b,#REGION_BLOCKS-1 + +file_region_loop: + push bc + push de + + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h + jr z,file_region_final + + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block +; ld a,' ' +; call abyte +; ld l,e +; ld h,d +; call ahexw + + ex de,hl ; hl = the actual block no. from file + pop de + inc de ; de = expected, contiguous block no. + + or a + sbc hl,de + jr nz,bad_alignment + + pop bc + djnz file_region_loop +; call acrlf + + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h ; anything left to read? + jr nz,file_scan_loop ; yes (scan is limited by file size) + ret ; last region is = REGION_BLOCKS blocks + +file_region_final: +; call acrlf + pop hl ; last region is < REGION_BLOCKS blocks + pop hl ; clean up saved variables, and done + ret + +bad_file_size: + call gmess + defb 'null file',0dh,0ah,0 + jp error_bomb + +bad_file_block: + call gmess + defb 'hole in file',0dh,0ah,0 + jp error_bomb + +bad_alignment: + call gmess + defb 'not aligned',0dh,0ah,0 + jp error_bomb + +; ----------------------------------------------------------------------------- + + .if 1 ; new kernel format +file_read: + ; enter with hl -> user buffer, bc = bytes to read (must be nonzero!!) + + push hl ; this will be preserved for caller + push bc ; this will be used to set cf on return + + ld (read_user),bc + ld (read_user_ptr),hl + + ld hl,0 + ld (read_done),hl + + ld hl,(read_remain) + ld a,l + or h ; got any leftover data in buffer? + jr nz,file_read_entry ; yes, use it first + +file_read_loop: + ; read a new block into the buffer, recording no. of valid bytes read + call bmap_remain ; get hl = valid bytes in current block + ; and decrement the file size remaining + ld a,l + or h + jr z,file_read_done ; reached end of file + + ld (read_remain),hl + + call bmap_block ; get de = block no. of current block + ; and increment the block position + ld a,e + or d + jr z,bad_file_block ; hole in file + + ld hl,block + ld (read_remain_ptr),hl + call block_read + +file_read_entry: + ; satisfy as much as possible of user's request from current buffer + ld hl,(read_remain) ; bytes available + ld de,(read_user) ; bytes wanted + call de_min_hl_de ; de = amount to be processed this time + + ld hl,(read_remain) + or a + sbc hl,de + ld (read_remain),hl ; reduce bytes available by amount + + ld hl,(read_user) + or a + sbc hl,de + ld (read_user),hl ; reduce bytes wanted by amount + + ld hl,(read_done) + add hl,de + ld (read_done),hl ; increase bytes copied by amount + + ld c,e + ld b,d + ld de,(read_user_ptr) + ld hl,(read_remain_ptr) + ldir + ld (read_remain_ptr),hl + ld (read_user_ptr),de + + ; see if the user's entire request has now been processed + ld hl,(read_user) + ld a,l + or h + jr nz,file_read_loop ; no, get another block + +file_read_done: + ld hl,(read_done) ; indicates how much was really read + ld c,l + ld b,h ; bc = return value, how much was read + + pop de ; de = size of user's original request + or a + sbc hl,de ; set cf=1 if less than amount wanted + + pop hl ; hl preserved for convenience of user + ret + .endif + +; ----------------------------------------------------------------------------- + + .if 1 ; new kernel format +file_setup: + ; enter with de = inode number for file to be read + + ld hl,inode + call inode_read ; read inode of the dir to be searched + + ld hl,0 + ld (read_remain),hl ; forces a new data block to be loaded + ; fall into bmap_setup + .endif + +bmap_setup: + ld hl,(inode+8) + ld (size_remain),hl + ld hl,(inode+10) + ld (size_remain+2),hl + + ld hl,inode+24 + ld (direct_ptr),hl + ld hl,indirect_block+BUFSIZE + ld (indirect_ptr),hl + ld hl,dindirect_block+BUFSIZE + ld (dindirect_ptr),hl + ret + +bmap_remain: + ld hl,(size_remain) + ld de,(size_remain+2) + + ld bc,BUFSIZE + or a + sbc hl,bc + ex de,hl + ld b,0 ; ld bc,0 + sbc hl,bc + ex de,hl + jr c,bmap_remain_final + + ld (size_remain),hl + ld (size_remain+2),de + + ld hl,BUFSIZE + ret ; return a complete block of size hl + +bmap_remain_final: + ld hl,(size_remain) + ld (size_remain),bc ; 0 + ;ld (size_remain+2),bc ; 0 + ret ; return a partial block of size hl + +bmap_block: + ld hl,(direct_ptr) + ld de,inode+24+DIRECTBLOCKS*2 + or a + sbc hl,de + jr nc,bmap_indirect + + ld hl,(direct_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (direct_ptr),hl + ret + +bmap_indirect: + ld hl,(indirect_ptr) + ld de,indirect_block+BUFSIZE + or a + sbc hl,de + jr c,bmap_indirect_already + + ld hl,(direct_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (direct_ptr),hl + + ld hl,indirect_block + ld (indirect_ptr),hl + call block_read + +bmap_indirect_already: + ld hl,(direct_ptr) + ld de,inode+24+DIRECTBLOCKS*2+INDIRECTBLOCKS*2+1 ; fudge! + or a + sbc hl,de + jr nc,bmap_dindirect + + ld hl,(indirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (indirect_ptr),hl + ret + +bmap_dindirect: + ld hl,(dindirect_ptr) + ld de,dindirect_block+BUFSIZE + or a + sbc hl,de + jr c,bmap_dindirect_already + + ld hl,(indirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (indirect_ptr),hl + + ld hl,dindirect_block + ld (dindirect_ptr),hl + call block_read + +bmap_dindirect_already: + ld hl,(dindirect_ptr) + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld (dindirect_ptr),hl + ret + +; ----------------------------------------------------------------------------- +; enter with hl -> buffer, de = inode number + +inode_read: + push hl + + ld a,e + and DINODESPERBLOCK-1 ; find inode position within disk block + + ld b,DINODESPERBLOCKLOG ; shift count to find which disk block +inode_shift: + srl d + rr e + djnz inode_shift ; leaves de = block (relative to itab) + + ld hl,(isize) + scf + sbc hl,de ; check if block is beyond end of table + jr c,bad_inode + + ld hl,(reserv) + add hl,de + ex de,hl ; adjust block for start of inode table + + ld hl,block + push af + push hl + call block_read + pop hl + pop de ; d = inode position within block + + ld bc,SIZEOF_DINODE_T + ld e,c + mlt de + add hl,de + pop de ; de -> user's buffer for disk inode + ldir ; copy it, freeing up block buffer + ret + +bad_inode: + call gmess + defb 'bad inode: ',0 + add a,'0' + call abyte + call amess + defb ', ',0 + ex de,hl + jp error_ahexw + +; ----------------------------------------------------------------------------- +; enter with hl -> buffer, de = block number + +block_read: + push hl + call block_xlate ; a:hl -> data in ramdrive + + push hl + pop iy + ld d,a ; d:iy -> data in ramdrive + + pop hl + ld e,3 ; e:hl -> user's buffer in seg 3: + jp copyr ; copy BUFSIZE bytes from d:iy to e:hl + +block_write: + push hl + call block_xlate ; a:hl -> data in ramdrive + + pop iy + ld d,3 ; d:iy -> user's buffer in seg 3: + + ld e,a ; e:hl -> data in ramdrive + jp copyr ; copy BUFSIZE bytes from d:iy to e:hl + +block_xlate: + ld hl,HD0_SIZE + scf + sbc hl,de ; check whether block no is in range + jr c,bad_block + + ld bc,BUFSIZE ; bytes to be copied for 1 block + + ld hl,HD0_START + add hl,de ; hl = block index (from start of ram) + + ld a,h + ld h,l + ld l,c ;0 ; a:hl = block index * 100h + + add hl,hl + adc a,a ; a:hl = block index * BUFSIZE (200h!!) + ret + +block_to_bbr: + ld a,(hl) + inc hl + ld d,(hl) ; d:a = block no. from start of disk + inc hl + + srl d + rra + srl d + rra + srl d + rra ; a = block / 8 (PAGE_BLOCKS = 8!!) + + add a,#HD0_START/PAGE_BLOCKS-4 + ret + +bad_block: + call gmess + defb 'bad block: ',0 + ex de,hl + jp error_ahexw + +; ----------------------------------------------------------------------------- + +initial_boot: + ld hl,UZINAM + call LDFILE ; copy entire KERNEL.BIN data to c:0000 + ret z ; halt if the file could not be found + + call gmess + defb 'loading A:KERNEL.BIN',0dh,0ah,0 + + ld a,'1' + ld (argument_1+7),a ; so kernel will use /dev/hd1 as root + +loop: ld de,(LDMAX) + or a + sbc hl,de ; did we load an entire extent? + jr nz,done ; no, assume the file is fully loaded + + add hl,de ; restore hl = LDMAX + ld (LDPTR),hl ; load from where we finished last time + + ld a,l + or h ; did we wrap around to a new segment? + jr nz,cont + + ld hl,LDSEG + inc (hl) ; yes, need to advance segment counter + +cont: ld hl,4000h + add hl,de + ld (LDMAX),hl ; advance LDMAX to load 4000h bytes + + ld hl,LDEXT + inc (hl) ; advance extent counter to next extent + + ld hl,UZINAM + call LDFILE ; copy more CMX.BIN data to LDSEG:LDPTR + jr nz,loop + + .if 1 ; virtual memory + ld hl,LDEXT + dec (hl) ; account for extent that wasn't found + .endif + +done: + .if 1 ; virtual memory + call virtual_init ; modifies CBR (can't call EPROM now) + + .if 1 ; new kernel format + ld iy,0 + ld hl,exe_header_buf + ld de,0c03h ; copy from c: to 3: + ld bc,exe_header_size + call copyr ; read the executable's header + + call check_e_magic ; ensure e_magic = E_MAGIC + call check_e_format ; ensure e_format = E_FORMAT_KERNEL + + call get_ca0_size ; returns bc = size, de = start of copy + push de + pop iy + + ld de,0c00h ; copy from c: to 0: + ld l,e + ld h,e ; destination = 0 (start of CA0 region) + call copyr ; returns iy advanced, d & e preserved + push de + + call get_ca1_size ; returns bc = size, de = start of copy + ld hl,4000h-8000h + add hl,de ; correct for the intended CBR = 4-8 + + pop de ; copy from c: to 0: + call copyr + + call get_udata_size_m1 ; returns bc = size-1, de = start+1 + call nc,clear_bc_p1_at_de_m1 ; if bc => 0, clear bc+1 bytes at de-1 + + call say_starting ; tell the user we have liftoff + .endif + + ld a,(LDEXT) + .if 1 ; new kernel format + inc a ; do all pages, including the first + .endif + ld b,a ; how many extents were loaded ? (-1) + + ld hl,8080h ; initial spot in virt memory table + .if 1 ; new kernel format + ld a,0c0h-4 ; bbr value to access 1st loaded page + .else + ld a,0c0h ; bbr value to access 2nd loaded page + .endif + +virtual_loop: + ld (hl),a ; map 16kbytes into virt memory space + inc hl + add a,4 + djnz virtual_loop + .else + call rsel1 ; select RAM for segments 0: and 1: + + ld a,80h + out0 (CBAR),a ; CA0 = 0k, bank area = 32k, CA1 = 32k + .endif + + .if 0 ; new kernel format + ld a,0c0h-4 ; bbr value to access 1st loaded page + .endif + jp kazumi + +; ----------------------------------------------------------------------------- + +#include "diag.inc" +#include "copyr.inc" +#include "clears.inc" + +; ----------------------------------------------------------------------------- + +parameters: defw 2 ; argc + defw arguments-parameters_end ; argv + defw environment-parameters_end ; envp +arguments: defw argument_0-parameters_end + defw argument_1-parameters_end + defw 0 ; terminates the argument list +argument_0: defb '/boot/kernel.bin',0 +argument_1: defb 'root=hd0',0 +environment: defw environment_0-parameters_end + defw 0 ; termninates the environment list +environment_0: defb 'SN=00000',0 +parameters_end: ; this will equal address 0 after parameters are copied + +name_boot: defb 'boot',0 +name_kernel_bin: defb 'kernel.bin',0 + + ; note: defb 1 is very important here, because if UZINAM ends + ; up on a 32 byte boundary, the KERNEL.BIN filename (extent 0) + ; may be seen by the initial_boot routine, preventing the + ; proper loading of /boot/kernel after formatting the ramdrive +UZINAM: defb 1,'KERNEL BIN' ; LDNAM +LDEXT: defb 0 ; LDEXT +LDSEG: defb 0ch ; LDSEG +LDPTR: defw 0 ; LDPTR +LDMAX: defw 4000h ; LDMAX + +; ----------------------------------------------------------------------------- + +final: ; initialised code and data ends here + + .if (final-start) > 800h ; maximum size of the filesystem boot block +error - gboot has too much code + initialized data + .endif + +; ----------------------------------------------------------------------------- + +reserv: +isize equ reserv+2 +fsize equ isize+2 + +dir_name equ fsize+2 +size_remain equ dir_name+2 + +direct_ptr equ size_remain+4 +indirect_ptr equ direct_ptr+2 +dindirect_ptr equ indirect_ptr+2 + +inode equ dindirect_ptr+2 +block equ inode+SIZEOF_DINODE_T + +indirect_block equ block+BUFSIZE +dindirect_block equ indirect_block+BUFSIZE + + .if 1 ; new kernel format +directory_buf equ dindirect_block+BUFSIZE + +read_remain equ directory_buf+SIZEOF_DIRECT_T +read_remain_ptr equ read_remain+2 +read_user equ read_remain_ptr+2 +read_user_ptr equ read_user+2 +read_done equ read_user_ptr+2 + +exe_header_buf equ read_done+2 +e_magic equ exe_header_buf +e_format equ e_magic+2 +e_size equ e_format+2 +e_hsize equ e_size+4 +e_idata equ e_hsize+2 +e_entry equ e_idata+2 +e_udata equ e_entry+2 +e_stack equ e_udata+2 +e_break equ e_stack+2 +exe_header_size equ e_break+2-exe_header_buf + +region_ptr equ exe_header_buf+exe_header_size + .else +region_ptr equ dindirect_block+BUFSIZE + .endif +region_list equ region_ptr+2 + +stack_start equ region_list+2*(HD0_SIZE/REGION_BLOCKS) +minsp equ stack_start+MINIMAL_STACK ; initial sp is at least this + +; ----------------------------------------------------------------------------- + + .if (minsp-start) > CA1_GBOOT ; nos 2000h, because CBAR = 20h (uzi 8000h, 10h) +error - gboot has too much uninitialized data + .endif + +; ----------------------------------------------------------------------------- + + END diff --git a/src/nos/gboot/io64180.inc b/src/nos/gboot/io64180.inc new file mode 100644 index 00000000..01380ae1 --- /dev/null +++ b/src/nos/gboot/io64180.inc @@ -0,0 +1,155 @@ +; /* - 64180.inc - +; +; This files defines the internal register addresses +; for HD64180 +; +; File version: $Revision: 1.4 $ +; +; */ +; +; /* ================================== */ +; /* */ +; /* ASCI Channel Control Registers */ +; /* */ +; /* ================================== */ + +CNTLA0 = 0x00; /* ASCI Ctrl Reg A, Ch 0 */ +CNTLA1 = 0x01; /* ASCI Ctrl Reg A, Ch 1 */ +CNTLB0 = 0x02; /* ASCI Ctrl Reg B, Ch 0 */ +CNTLB1 = 0x03; /* ASCI Ctrl Reg B, Ch 1 */ +; ----------------------------------------------------------------------------- +STAT0 = 0x04; /* ASCI Status Reg, Ch 0 */ +STAT1 = 0x05; /* ASCI Status Reg, Ch 1 */ +; ----------------------------------------------------------------------------- +TDR0 = 0x06; /* ASCI Transmit Data Reg, Ch 0 */ +TDR1 = 0x07; /* ASCI Transmit Data Reg, Ch 1 */ +RDR0 = 0x08; /* ASCI Receive Data Reg, Ch 0 */ +RDR1 = 0x09; /* ASCI Receive Data Reg, Ch 1 */ + +; /* ================================== */ +; /* */ +; /* CSI/O Registers */ +; /* */ +; /* ================================== */ + +CNTR = 0x0A; /* CSI/O Ctrl Reg */ +TRDR = 0x0B; /* CSI/O Trans/Rec Data Reg */ + +; /* ================================== */ +; /* */ +; /* Timer Registers */ +; /* */ +; /* ================================== */ + +TMDR0L = 0x0C; /* Timer 0 Data Reg L */ +TMDR0H = 0x0D; /* Timer 0 Data Reg H */ +TMDR1L = 0x14; /* Timer 1 Data Reg L */ +TMDR1H = 0x15; /* Timer 1 Data Reg H */ +; ----------------------------------------------------------------------------- +RLDR0L = 0x0E; /* Timer 0 Reload Reg L */ +RLDR0H = 0x0F; /* Timer 0 Reload Reg H */ +RLDR1L = 0x16; /* Timer 1 Reload Reg L */ +RLDR1H = 0x17; /* Timer 1 Reload Reg H */ +; ----------------------------------------------------------------------------- +TCR = 0x10; /* Timer Ctrl Reg */ + +; /* ================================== */ +; /* */ +; /* Free Running Counter */ +; /* */ +; /* ================================== */ + +FRC = 0x18; /* Free Running Counter */ + +; /* ================================== */ +; /* */ +; /* DMA Registers */ +; /* */ +; /* ================================== */ + +SAR0L = 0x20; /* DMA 0 Source Addr Reg */ +SAR0H = 0x21; /* DMA 0 Source Addr Reg */ +SAR0B = 0x22; /* DMA 0 Source Addr Reg */ +; ----------------------------------------------------------------------------- +DAR0L = 0x23; /* DMA 0 Destination Addr Reg */ +DAR0H = 0x24; /* DMA 0 Destination Addr Reg */ +DAR0B = 0x25; /* DMA 0 Destination Addr Reg */ +; ----------------------------------------------------------------------------- +BCR0L = 0x26; /* DMA 0 Counter Reg */ +BCR0H = 0x27; /* DMA 0 Counter Reg */ +; ----------------------------------------------------------------------------- +MAR1L = 0x28; /* DMA 1 Memory Addr Reg */ +MAR1H = 0x29; /* DMA 1 Memory Addr Reg */ +MAR1B = 0x2A; /* DMA 1 Memory Addr Reg */ +; ----------------------------------------------------------------------------- +IAR1L = 0x2B; /* DMA I/O Addr Reg */ +IAR1H = 0x2C; /* DMA I/O Addr Reg */ +; ----------------------------------------------------------------------------- +BCR1L = 0x2E; /* DMA 1 Byte Count Reg */ +BCR1H = 0x2F; /* DMA 1 Byte Count Reg */ +; ----------------------------------------------------------------------------- +DSTAT = 0x30; /* DMA Status Reg */ +DMODE = 0x31; /* DMA Mode Reg */ +DCNTL = 0x32; /* DMA/WAIT Ctrl Reg */ + +; /* ================================== */ +; /* */ +; /* MMU Registers */ +; /* */ +; /* ================================== */ + +CBR = 0x38; /* MMU Common Base Reg */ +BBR = 0x39; /* MMU Bank Base Reg */ +CBAR = 0x3A; /* MMU Bank/Common Area Reg */ +; CBR_location = 0x38; /* MMU Common Base Reg */ +; BBR_location = 0x39; /* MMU Bank Base Reg */ +; CBAR_location = 0x3A; /* MMU Bank/Common Area Reg */ +; #define CBR CBR_location +; #define BBR BBR_location +; #define CBAR CBAR_location + +; /* ================================== */ +; /* */ +; /* Interrupt Registers */ +; /* */ +; /* ================================== */ + +IL = 0x33; /* Int Vect Low Reg */ +ITC = 0x34; /* Int/Trap Ctrl Reg */ + +; /* ================================== */ +; /* */ +; /* Refresh Registers */ +; /* */ +; /* ================================== */ + +RCR = 0x36; /* Refresh Ctrl Reg */ + +; /* ================================== */ +; /* */ +; /* I/O Registers */ +; /* */ +; /* ================================== */ + +ICR = 0x3F; /* I/O Ctrl Reg */ + +; /* ================================== */ +; /* */ +; /* Bit Definitions */ +; /* */ +; /* ================================== */ + +INT0SW = 0x01; /* interrupt enable bits in ITC */ +INT1SW = 0x02; /* interrupt enable bits in ITC */ +INT2SW = 0x04; /* interrupt enable bits in ITC */ + +; ----------------------------------------------------------------------------- +; Hytech specific hardware: (For the WPO30-V5, Hytech 1000, Hytech 1500) + +BC8530 = 0x214; /* channel B control in 8530 */ +AC8530 = 0x215; /* channel A control in 8530 */ +BD8530 = 0x216; /* channel B data in 8530 */ +AD8530 = 0x217; /* channel A data in 8530 */ + +; ----------------------------------------------------------------------------- + diff --git a/src/nos/gboot/n.ba% b/src/nos/gboot/n.ba% new file mode 100644 index 00000000..a9e801e6 --- /dev/null +++ b/src/nos/gboot/n.ba% @@ -0,0 +1,8 @@ +md build +cd build +copy ..\gboot.lnk +copy ..\uzboot.lnk +copy ..\build.ban n.bat +call n +cd .. + diff --git a/src/nos/gboot/n.sh b/src/nos/gboot/n.sh new file mode 100644 index 00000000..43c0c7e4 --- /dev/null +++ b/src/nos/gboot/n.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +( + test -d build || mkdir build || exit + tradcpp -I../include gboot.S build/gboot.asm || exit + as-z80 -l -o -z build/gboot.asm || exit + cp gboot.lnk build/ || exit + link-z80 -f build/gboot.lnk || exit + ihex2bin build/gboot.i86 ../bin/boot.bin || exit + 4dos.com /c crcd ..\\bin\\boot.bin || exit + bin2c ../bin/boot.bin ../../fsutil/boot.c || exit +) + diff --git a/src/nos/gboot/s.sh b/src/nos/gboot/s.sh new file mode 100644 index 00000000..6a92cf83 --- /dev/null +++ b/src/nos/gboot/s.sh @@ -0,0 +1,3 @@ +#!/bin/sh +cp ../bin/boot.bin ../../../bin +bin2c ../bin/boot.bin ../../fsutil/boot.c diff --git a/src/nos/gboot/uzboot.asm b/src/nos/gboot/uzboot.asm new file mode 100644 index 00000000..99c710f6 --- /dev/null +++ b/src/nos/gboot/uzboot.asm @@ -0,0 +1,67 @@ +; uzboot.asm by Nick, based on c0k.asm for UZI180 (creates a kernel executable) + +; ----------------------------------------------------------------------------- + +$ io64180.inc + +E_MAGIC equ 0a6c9h +E_FORMAT_KERNEL equ 3 +E_STACK_SIZE equ 1000h + +; ----------------------------------------------------------------------------- + + module _uzboot + + extern init + + extern e_RCODE ; e_hsize + extern s_ICODE ; e_idata + extern s_UDATA0 ; e_udata + extern s_CSTACK ; e_stack + extern e_CSTACK ; e_break + +; ----------------------------------------------------------------------------- +; forward definitions of segments, to set the linkage order (c0k must be first) + + rseg RCODE + rseg ICODE +; rseg TEMP +; rseg DATA0 +; rseg WCSTR + rseg CONST + rseg CSTR + rseg IDATA0(NUL) + rseg CDATA0 + rseg ECSTR(NUL) + rseg CCSTR + rseg CODE(NUL) ; needs to be at end for banked model + rseg UDATA0 + rseg CSTACK + +; ----------------------------------------------------------------------------- + + rseg _DEFAULT ; means header is discarded at loading + + defw E_MAGIC ; e_magic + defw E_FORMAT_KERNEL ; e_format + defd 12345678h ; e_size + defw e_RCODE+14h ; e_hsize (14h = l__DEFAULT) + defw s_ICODE ; e_idata + defw init ; e_entry + defw s_UDATA0 ; e_udata + defw s_CSTACK ; e_stack + defw e_CSTACK ; e_break + +; ----------------------------------------------------------------------------- + +$ diag.inc ; this will select RCODE segment +$ copyr.inc ; this will select RCODE segment + +; ----------------------------------------------------------------------------- + + rseg CSTACK + defs E_STACK_SIZE ; the default stack size is set here + +; ----------------------------------------------------------------------------- + + END diff --git a/src/nos/gboot/uzboot.lnk b/src/nos/gboot/uzboot.lnk new file mode 100644 index 00000000..6fc150b2 --- /dev/null +++ b/src/nos/gboot/uzboot.lnk @@ -0,0 +1,12 @@ +-m +-u +-i +-o uzboot +-bl RCODE=0 +-bl ICODE=0x8100 +-bl CODE=0x804000,0x10000 +-bc CODE=0x4000 +uzboot +uzfile +uzmain +uzdata diff --git a/src/nos/gboot/uzdata.asm b/src/nos/gboot/uzdata.asm new file mode 100644 index 00000000..7f4bac37 --- /dev/null +++ b/src/nos/gboot/uzdata.asm @@ -0,0 +1,22 @@ +; uzdata.asm by Nick, gunzipper, stub program providing label to access zdata + +; ----------------------------------------------------------------------------- + +$ io64180.inc + +; ----------------------------------------------------------------------------- + + module _uzdata + + public zdata + + rseg CODE + +; ----------------------------------------------------------------------------- + +zdata:: + ; the actual data is provided by concatenating it to the executable + +; ----------------------------------------------------------------------------- + + END diff --git a/src/nos/gboot/uzfile.asm b/src/nos/gboot/uzfile.asm new file mode 100644 index 00000000..16c12e9c --- /dev/null +++ b/src/nos/gboot/uzfile.asm @@ -0,0 +1,1255 @@ +; uzfile.asm by Nick, gunzipper, based on zipfile.inc from Hytech EPROM 5.529+ + +; ----------------------------------------------------------------------------- + +$ io64180.inc + + module _uzfile + + public uzfgo + public gzhbuf + public gztbuf + extern abyte + extern ahexb + extern ahexw + extern acrlf + extern bomb + extern copyr + extern uzmess + + rseg RCODE + +; ----------------------------------------------------------------------------- + +bad_format: + call uzmess + db 'not in gzip format',0dh,0ah,0 + jp bomb + +uzfgo: ; file is deflated, inflate + ;in0 d,(BBR) + ;push de + + ;ld e,0 + ;call winehl ; e:hl -> input data + ;push hl + ;pop iy + ;out0 (BBR),e ; BBR:iy -> input data + + ld (outptr),hl + ld hl,outseg + ld (hl),e ; save absolute address -> output buffer for calls to copyr + + ld hl,virtbr + ld (hl),d ; save virtual base address to use when incrementing virtbr:ix + push iy + pop ix ; now reading the input data from (ix) instead of (iy) + + ld l,d + ld h,80h + ld a,(hl) ; translate BBR value via virtual memory table for actual use + out0 (BBR),a ; prepare to read the input data directly from (ix) + + sub a ; inflation_routine + ld (lblock),a ; last block flag + ld (dbits),a ; dead bits in low dbuf + call nxtix ; initialise dbuf + + ld iy,gzhbuf + ld b,10 + call pread + + ld hl,(gzhbuf) + ld de,8b1fh + or a + sbc hl,de ; ensure magic number is gzip + jr nz,bad_format + + ld hl,(gzhbuf+2) + ld de,8 + or a + sbc hl,de ; ensure compression method = 8 and no header options are present + jr nz,bad_format + + ld iy,outbuf ; non-repeated data will be stored temporarily at (iy) + +uzf0: ld a,(lblock) + dec a + .if 0 + jp z,uzfret + .else + jr z,uzfret ; inflate_done + .endif + + .if 0 + call acrlf + + ld a,(virtbr) + call ahexb + ld a,':' + call abyte + push ix + pop hl + call ahexw + + ld a,'=' + call abyte + + extern zdata + ld hl,LWRD zdata+10 + ld a,BYTE3 zdata+10 + add hl,hl + add hl,hl + rra + rr h + rr l + rra + rr h + rr l + ex de,hl + ld c,a ; c:de -> absolute start of compressed data + + push ix + pop hl + ld a,(virtbr) + add hl,hl + add hl,hl + rra + rr h + rr l + rra + rr h + rr l ; a:hl -> absolute position in compressed data + + or a + sbc hl,de + sbc a,c ; a:hl = absolute offset within compressed data + call ahexb + call ahexw + + ld a,' ' + call abyte + ld a,16 + ld hl,dbits + sub (hl) + call ahexb + ld a,' ' + call abyte + call peek + ld a,c + and 7 + call ahexb + call acrlf + .endif + + ld a,1 + call bits ; get_bit + ld (lblock),a + + call tbl ; read_tables + ;jr nz,uzfret ; bad table + +uzf1: + .if 0 + ld a,'a' + call abyte + .endif + + ;ld bc,wdog ; rwdog + ;in0 (c) + + ld hl,plit ; lit_parse_table + ld de,llit ; lit_bitlen_table + call parse ; returns de = item + dec d + .if 0 + jp z,uzf2 + .else + jr z,uzf2 + .endif + + ld (iy),e + inc iy + .if 0 + ld a,e + call ahexb + call acrlf + .endif + .if 0 + ld a,'b' + call abyte + .endif + + .if 1 + ld hl,plit ; lit_parse_table + ld de,llit ; lit_bitlen_table + call parse ; returns de = item + dec d + jr z,uzf2 + + ld (iy),e + inc iy + .if 0 + ld a,e + call ahexb + call acrlf + .endif + .if 0 + ld a,'c' + call abyte + .endif + + ld hl,plit ; lit_parse_table + ld de,llit ; lit_bitlen_table + call parse ; returns de = item + dec d + jr z,uzf2 + + ld (iy),e + inc iy + .if 0 + ld a,e + call ahexb + call acrlf + .endif + .if 0 + ld a,'d' + call abyte + .endif + + ld hl,plit ; lit_parse_table + ld de,llit ; lit_bitlen_table + call parse ; returns de = item + dec d + jr z,uzf2 + + ld (iy),e + inc iy + .if 0 + ld a,e + call ahexb + call acrlf + .endif + .if 0 + ld a,'e' + call abyte + .endif + + push iy + pop hl + ld de,outbuf+100h + or a + sbc hl,de + jr c,uzf1 ; output buffer still has room + .if 0 + ld a,'f' + call abyte + .endif + + inc h ; hl now = iy - outbuf (byte count) + call oflsh + .endif + jr uzf1 + +uzfret: ; enter with z = success, nz = failure + .if 0 + ld a,'g' + call abyte + .endif + + ;ld bc,(zdbuf+16h) ; uncompressed size, if success + ;pop de + ;out0 (BBR),d + push iy + pop hl + ld de,outbuf + or a + sbc hl,de + call nz,oflsh ; leaves outptr/seg valid for possible checking by our caller + + ld iy,gztbuf + ld b,8 + call pread ; retrieve crc/size, our caller is responsible for checking them + + ld hl,outseg + ld e,(hl) + ld hl,(outptr) ; so our caller can calculate the actual decompressed size + ret + +uzf2: + .if 0 + ld a,'h' + call abyte + .endif + + ld a,e + or a + .if 1 + jp z,uzf0 + .else + jr z,uzf0 ; new_table + .endif + + ex de,hl ; hl = basic length code + + cp 9 + jr c,uzf4 ; length 3-10 = hl+2, no extra bits + cp 1dh + jr c,uzf3 ; length 11-258, 1-5 extra bits + + ld hl,258 ; length 258 = hl, no extra bits + jr uzf5 + +uzf3: sub 5 ; a = 4-17h extra bits/4 + rrca + rrca + and 7 + ld b,a ; b = 1-5 extra bits + + ld a,l + dec a ; no need to sub 5 + and 3 ; 4 possible lengths for current b + or 4 + ld l,a ; hl = 4-7 for algorithm + + ld a,b + add hl,hl ; hl = base length, value 0-0e0h + djnz $-1 + + ex de,hl + call bitsb ; hl = 1-5 extra bits, value 0-1fh + add hl,de ; hl = 8-0ffh for lengths 11-258 + + inc hl +uzf4: inc hl + inc hl +uzf5: push hl + .if 0 + ld a,'i' + call abyte + .endif + + ld hl,pdist ; dist_parse_table + ld de,ldist ; dist_bitlen_table + call parse ; returns de = item + + ;ld a,e + ex de,hl + ld a,l + cp 4 + jr c,uzf6 ; de = distance 0-3, no extra bits + + ;ex de,hl ; hl = basic distance code + + rrca + and 0fh + dec a + ld b,a ; b = 1-0bh extra bits + + ld a,l + and 1 ; 2 possible distances for current b + or 2 + ld l,a ; hl = 2-3 for algorithm + + ld a,b + add hl,hl ; hl = base distance, value 0-6000h + djnz $-1 + + ex de,hl + call bitsw ; hl = 0-0bh extra bits, value 0-1fffh + add hl,de ; de = distance 4-7fffh + + ;ex de,hl +uzf6: ;inc de ; real distance + inc hl + push hl + .if 0 + ld a,'j' + call abyte + .endif + + push iy + pop hl + ld de,outbuf + sub a ;or a + sbc hl,de ; got anything in output buffer? + ld c,l + ld b,h ; zf, bc indicate how many bytes waiting + + ld iy,outbuf-4000h + ld d,a ;ld d,0 + + ld hl,outseg + ld e,(hl) + ld hl,(outptr) + + call nz,copyr ; flush anything still in output buffer + .if 0 + ld a,'k' + call abyte + .endif + + ;push iy + ;pop hl + ;push hl + ;or a + ;sbc hl,de + ;pop de + ;pop bc + ;ldir + ;push de + ;pop iy + ; e:hl = output location + ; can't use outptr/seg until e:hl has been saved back + .if 0 + ex (sp),hl + call ahexw + ex (sp),hl + ld a,',' + call abyte + .endif + pop bc ; bc = distance code + push hl + or a + sbc hl,bc ; go backwards as specified by distance code + ex (sp),hl ; restore e:hl = output location + pop iy + ld a,e + sbc a,0 + ld d,a ; d:iy = output location - distance code + + .if 0 + ex (sp),hl + call ahexw + ex (sp),hl + call acrlf + .endif + pop bc ; bc = length code + call copyr ; append bc bytes from d:iy to output buffer + + ld (outptr),hl + ld hl,outseg + ld (hl),e + + ld iy,outbuf ; restart output buffer + + .if 0 + ld a,(zfprog) + or a + jp z,uzf1 ; skip progress callouts if disabled + + push ix + pop hl + in0 a,(BBR) + rlca + rlca + rlca + rlca + add a,h ; minor absehl + call uzprog ; a = index = source address / 100h + .endif + jp uzf1 + +; ----------------------------------------------------------------------------- + +tbl: ld a,2 + call bits ; get_bits + dec a ; 1 = default tables + jr nz,tbldyn + + ld hl,llit ; lit_bitlen_table + ld de,llit+1 ; lit_bitlen_table+1 + ld bc,90h + ld (hl),8 + ldir ; 90h * bit length 8 + ld c,70h + ld (hl),9 + ldir ; 70h * bit length 9 + ld c,18h + ld (hl),7 + ldir ; 18h * bit length 7 + ld c,8-1 + ld (hl),8 ; 8 * bit length 8 + ldir + + ld hl,ldist ; dist_bitlen_table + ld de,ldist+1 + ld bc,20h-1 + ld (hl),5 + ldir ; 20h * bit length 5 + + ld hl,120h + ld (nlit),hl ; num_lit_codes = 120h + dec h + ld (ndist),hl ; num_dist_codes = 20h + jp tblmak ; make_parse_tables + +tbldyn: dec a ; 2 = dynamic tables + ;ret nz ; else bad table + jp nz,bad_block + + ld a,5 + call bitsb ; get_bits + ld bc,101h + add hl,bc + ld (nlit),hl ; num_lit_codes + + ld a,5 + call bitsb + inc hl + ld (ndist),hl ; num_dist_codes + + ld hl,ltbl ; bitlen_bitlens + ld bc,13h + call zfill ; initialise bitlen bitlen table + + ld a,4 + call bits ; get_bits + add a,4 + ld b,a ; count of bitlen bitlens + ld de,lxlat ; bitlen_order +tbl0: push bc + + ld a,(de) + inc de + ld c,a + ld b,0 + ld hl,ltbl ; bitlen_bitlens + add hl,bc + + ld a,3 + call bits ; get_bits + ld (hl),a + + pop bc + djnz tbl0 + + ld bc,13h + ld de,ltbl ; bitlen_bitlens + ld hl,ptbl ; bitlen_parse_table + call make ; make_parse_table + + ld de,llit ; lit_bitlen_table + ld hl,(nlit) ; num_lit_codes + ld bc,(ndist) ; num_dist_codes + add hl,bc + add hl,de + ld (lend),hl ; termination loop counter +tbl1: ex de,hl + push hl + + ld hl,ptbl ; bitlen_parse_table + ld de,ltbl ; bitlen_bitlens + call parse + + ld a,e + cp 10h + jr c,tbl5 ; single bitlen + jr z,tbl4 ; 10h = repeated bitlen * 3-6 + cp 11h + jr z,tbl2 ; 11h = repeated zeros * 3-10 + + ld a,7 ; 12h = repeated zeros * 11-138 + call bits ; get_bits + add a,11 + jr tbl3 + +tbl2: ld a,3 ; 11h = repeated zeros * 3-10 + call bits ; get_bits + add a,3 +tbl3: ld c,a + + pop hl + call zfill + jr tbl6 + +tbl4: ld a,2 ; 10h = repeated bitlen * 3-6 + call bits ; get_bits + add a,3 + ld c,a + + pop hl + dec hl + call hlfill + jr tbl6 + +tbl5: pop hl + ld (hl),e ; single bitlen + +tbl6: inc hl + ld e,l + ld d,h + + ld bc,(lend) ; termination loop counter + or a + sbc hl,bc + jr c,tbl1 + + ld bc,(ndist) + ld hl,ldist-1 + add hl,bc + ex de,hl + ld hl,(lend) + dec hl + lddr ; move dist_bitlen_table to proper spot + +tblmak: ld bc,(nlit) ; num_lit_codes + ld de,llit ; lit_bitlen_table + ld hl,plit ; lit_parse_table + lit_parse_tree + call make ; make_parse_table + + ld bc,(ndist) ; num_dist_codes + ld de,ldist ; dist_bitlen_table + ld hl,pdist ; dist_parse_table + dist_parse_tree + ;call make + ;ret + +; call with: +; bc = items +; de -> bitlen table, 1 byte per item +; hl -> parse table, 100h words +; parse tree is at hl+200h + +make: ld a,c + or b + ret z + + ld (nmake),bc ; count of items + ld (lmake),de ; pointer to bitlen table + ld (pmake),hl ; pointer to parse table + tree + + ; scan entries counting each bit length 0-15 to lcount + + ld hl,lcount ; bitlen_counts + ld bc,10h*2 + call zfill + + ld de,(lmake) ; pointer to bitlen table + ld bc,(nmake) ; count of items +make0: push bc + + ld a,(de) + inc de + + ld c,a + ld b,0 + ld hl,lcount ; bitlen_counts + add hl,bc + add hl,bc + inc (hl) + jr nz,$+4 + inc hl + inc (hl) + + pop bc + dec bc + ld a,c + or b + jr nz,make0 + + ; assign each bit length 1-15 a starting code to cmake + + ld de,0 + ld bc,2 +make1: push bc + + ld hl,cmake ; current_codes + add hl,bc + ld (hl),e + inc hl + ld (hl),d + + ld hl,lcount ; bitlen_counts + add hl,bc + ld c,(hl) + inc hl + ld b,(hl) + + ex de,hl + add hl,bc + add hl,hl + ex de,hl + + pop bc + inc c + inc c + ld a,c + cp 20h + jr c,make1 + + ld a,e + or d + jr z,make15 + + ; table is not full, allowed if sum lcount <= 1 + + ld hl,lcount+2 ; ignore bit length 0 + ld de,0 + ld a,15 ; bit lengths 1-15 +make14: ld c,(hl) + inc hl + ld b,(hl) + inc hl + ex de,hl + add hl,bc + ex de,hl + dec a + jr nz,make14 + ld hl,1 + or a + sbc hl,de + ;ret c ; bad table if 1 < sum lcount + jp c,bad_table + +make15: ; scan entries assigning codes to hmake from cmake + + ld de,(lmake) ; pointer to bitlen table + ld bc,(nmake) ; count of items + ld hl,hmake ; huffman_table +make2: push bc + + ld a,(de) + inc de + or a + ld bc,0 + jr z,make3 + + push hl + ld c,a + ld hl,cmake ; current_codes + add hl,bc + add hl,bc + + ld c,(hl) + inc (hl) + inc hl + ld b,(hl) + jr nz,$+3 + inc (hl) + pop hl + +make3: ld (hl),c + inc hl + ld (hl),b + inc hl + + pop bc + dec bc + ld a,c + or b + jr nz,make2 + + ; scan entries bit reversing each code in hmake + + ld de,(lmake) ; pointer to bitlen table + ld bc,(nmake) ; count of items + ld hl,hmake ; huffman_table +make4: push bc + + ld a,(de) + inc de + + push de + push hl + + ld e,(hl) + inc hl + ld d,(hl) + + or a + jr z,make6 + + ld hl,0 + ld b,a +make5: rr d + rr e + adc hl,hl + djnz make5 + ex de,hl + +make6: pop hl + ld (hl),e + inc hl + ld (hl),d + inc hl + pop de + + pop bc + dec bc + ld a,c + or b + jr nz,make4 + + ; construct parse table and tree + + ld hl,(pmake) ; pointer to parse table + tree + ld bc,100h*2 + call zfill + inc hl + ld (trptr),hl ; tree ptr + + ld de,0 ; index to lmake +make7: ld hl,hmake + add hl,de + add hl,de + ld c,(hl) + inc hl + ld b,(hl) + + ld hl,(lmake) ; pointer to bitlen table + add hl,de + ld a,(hl) + or a + jr z,make13 + cp 9 + jr nc,make10 + + ld b,a + ld hl,1 +make8: add hl,hl + djnz make8 ; b = 0 for <= 8 bit huffman code + ld (pinc),hl ; parse table increment + +make9: ld hl,(pmake) ; pointer to parse table + tree + add hl,bc + add hl,bc ; huffman code + + ld (hl),e + inc hl + ld (hl),d + + ld hl,(pinc) ; parse table increment + add hl,bc + ld c,l + ld b,h + + ld a,b + or a + jr z,make9 + jr make13 + +make10: push de + push af + + ld a,b + ld b,0 + ld hl,(pmake) ; pointer to parse table + tree + add hl,bc + add hl,bc ; huffman code, lo 8 bits + ld c,a ; huffman code, hi 8 bits + + pop af + sub 8 + ld b,a + +make11: ld e,(hl) + inc hl + ld d,(hl) + + ld a,e + or d + jr nz,make12 ; existing branch + + ld de,(trptr) ; tree ptr + ld (hl),d + dec hl + ld (hl),e + + push de +; rept 4 +; ld (de),a +; inc de +; endm + ld (de),a + inc de + ld (de),a + inc de + ld (de),a + inc de + ld (de),a + inc de + ld (trptr),de ; tree ptr + pop de + +make12: ex de,hl + + rr c + jr nc,$+4 + inc hl + inc hl + + djnz make11 + + pop de + ld (hl),e + inc hl + ld (hl),d + +make13: inc de + + ld hl,(nmake) + or a + sbc hl,de + jr nz,make7 + + ret ; z for caller of tbl + +bad_block: + call uzmess + db 'invalid table type',0dh,0ah,0 + jp bomb + +bad_table: + call uzmess + db 'file has bad table',0dh,0ah,0 + jp bomb + +; ----------------------------------------------------------------------------- +; enter with: +; a = bits to read (1-10h) + +; returns: +; de = preserved +; hl = value + +bitsw: cp 9 + jr c,bitsb + + sub 8 + ld h,a ; h = eventual bits in h + call peek + .if 0 + inc ix ; shortcut to flush 8 bits + .else + call nxtix + .endif + ld l,c ; l = bits 0-7 of result + + ld a,h + call bits + ld h,a ; h = bits 8-n of result + ret ; result in hl + +bitsb: call bits + ld l,a + ld h,b ; 0 + ret + +; enter with: +; a = bits to read (1-8) + +; returns: +; de = preserved +; a = value + +bits: push hl + ld l,a + call peek + call flush + ld a,c + ld c,l + ld hl,bmask-1 + add hl,bc + and (hl) + pop hl + ret ; result in hl and a + +; ----------------------------------------------------------------------------- +; enter with: +; hl -> parse table +; de -> bitlen table + +; returns: +; de = next item from input + +parse: call peek ; a = index for parse table lookup + add hl,bc + add hl,bc + ld a,(hl) + inc hl + ld h,(hl) + ld l,a ; hl = parse table entry + ex de,hl ; de = parse table entry, hl -> bitlens + + .if 0 + bit 4,d + .else + bit 7,d + .endif + jr z,parse2 ; parse from table + ; parse from tree + .if 0 + inc ix ; shortcut to flush 8 bits + .else + call nxtix + .endif + call peek ; c = bit buffer for tree lookup + + ld a,(dbits) + +parse0: rr c + jr nc,$+4 + inc de + inc de + + inc a + cp 8 ; dbits = 8? + jr c,parse1 ; no, bit buffer ok + + .if 0 + inc ix ; shortcut to flush 8 bits + ld c,(ix) ; refresh bit buffer + .else + call nxtix + ld a,(dbuf) + ld c,a + .endif + + sub a ; new byte, no dead bits + +parse1: ex de,hl + ld e,(hl) + inc hl + ld d,(hl) + + .if 0 + bit 4,d + .else + bit 7,d + .endif + jr nz,parse0 + + ld (dbits),a + ret + +parse2: add hl,de + ld l,(hl) ; l = bitlen table entry + ;call flush + ;ret + +; enter with: +; l = bits to kill +; BBR:ix -> input data +; dbuf = 8 bits from input +; dbits = dead bits 0-7 + +; returns: +; bc = preserved +; de = preserved +; hl = preserved +; BBR:ix = advanced +; dbuf = updated +; dbits = advanced + +flush: ld a,(dbits) + add a,l + ld (dbits),a + sub 8 + ret c + ld (dbits),a + +nxtix: ld a,(ix) + ld (dbuf),a + ;push bc + ;ld bc,1 + ;add ix,bc + ;pop bc + ;ret nc ; still in same window + inc ix + push ix + ex (sp),hl + bit 7,h + pop hl + ret z ; still in same window (ix < 8000h) + + .if 0 + ld a,(zfprog) + or a ; progress callouts enabled? + jr z,skprog ; skip if not + + in0 a,(BBR) + push af + push bc + push de + push hl + push iy + + add a,0fh+1 + rlca + rlca + rlca + rlca ; convert window to segment + ld h,a + ld l,0 ; absolute 0:hl -> new source data + call uzprog ; call boot1 + + pop iy + pop hl + pop de + pop bc + pop af + jr dnprog + .endif + +skprog: ;in0 a,(BBR) +dnprog: ;inc a + push hl + ld hl,virtbr + inc (hl) + ld l,(hl) + ld h,80h + ld a,(hl) ; translate BBR value via virtual memory table for actual use + pop hl + out0 (BBR),a ; wrapped into new window + + ;ld ix,0f000h ; BBR:ix -> new source data + ld ix,4000h + ret + +; ----------------------------------------------------------------------------- + +; enter with: +; BBR:ix -> input data +; dbuf = 8 bits from input +; dbits = dead bits 0-7 + +; returns: +; bc = next 8 bits (b = 0) +; de = preserved +; hl = preserved + +peek: ld bc,(dbuf) ; b = dbits + ld a,b + or a + ret z + ld a,(ix) +peeklp: rra + rr c + djnz peeklp + ret + +; ----------------------------------------------------------------------------- + +zfill: sub a +afill: ld (hl),a + dec bc +hlfill: ld e,l + ld d,h + inc de + ldir + ret + +; ----------------------------------------------------------------------------- + +pread: ; plain_read + ld hl,dbits + ld a,(hl) ; see if we were already byte aligned + or a + jr z,preade + ld (hl),0 ; no, we need to flush up to 7 bits + +preadl: call nxtix ; refresh bit buffer, then advance ix +preade: ld a,(dbuf) ; enter here with a valid bit buffer + + ld (iy),a ; save in output (no shifting needed) + inc iy + + djnz preadl ; copy up to 100h bytes + jp nxtix ; refresh bit buffer for our caller + +oflsh: ; output_flush + ld c,l + ld b,h ; bc now = iy - outbuf (byte count) + + ld iy,outbuf-4000h ; because IDATA0 is phys 4000, log 8000 + ld d,0 + + ld hl,outseg + ld e,(hl) + ld hl,(outptr) + + call copyr ; flush output buffer to output + + ld (outptr),hl + ld hl,outseg + ld (hl),e + + ld iy,outbuf ; restart output buffer + ret + +; ----------------------------------------------------------------------------- + + rseg IDATA0 +bmask: defs 8 + rseg CDATA0 + defb 1,3,7,0fh,1fh,3fh,7fh,0ffh + + rseg IDATA0 +lxlat: defs 19 + rseg CDATA0 + defb 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 + +; ----------------------------------------------------------------------------- + + rseg UDATA0 + +; tbl data + +nlit: defs 2 ; num_lit_codes +ndist: defs 2 ; num_dist_codes +lend: defs 2 ; llit + nlit + ndist, loop terminator + +; make data + +nmake: defs 2 ; count of items +lmake: defs 2 ; pointer to bitlen table +pmake: defs 2 ; pointer to parse table + tree +trptr: defs 2 ; tree ptr +pinc: defs 2 ; parse table increment + +; peek + flush data + +; retain ordering % +dbuf: defs 1 +dbits: defs 1 ; dead bits in low dbuf +; % + +; uzfile data + +lblock: defs 1 ; last_block_flag + +virtbr: defs 1 ; virtual base register before xlat +gzhbuf: defs 10 ; gzip header (no extra fields allowed) +gztbuf: defs 8 ; gzip trailer (crc-32, orig size-32) + +outptr: defs 2 ; absolute output offset +outseg: defs 1 ; absolute output segment +outbuf: defs 103h ; minimises the need to call copyr + ; outbuf should be 100h, but we allow an extra 3 bytes, due to + ; the main loop for decompressing non-repeated data, which is + ; unrolled 4 times (we test against outbuf+100h every 4 chars) + +; buffers + +ltbl: defs 13h ; bitlen_bitlens +lcount: defs 10h*2 ; bitlen_counts +cmake: defs 10h*2 ; current_codes +hmake: defs 120h*2 ; huffman_table + +; llit must be followed by ldist because we unpack lit bitlens and +; dist bitlens together, then move dist bitlens to start at ldist + +; retain ordering % +llit: defs 120h ; lit_bitlen_table +ldist: defs 20h ; dist_bitlen_table +; % + +ptbl: defs 100h*2 ; bitlen_parse_table +plit: defs (100h+240h)*2 ; lit_parse_table + lit_parse_tree +pdist: defs (100h+40h)*2 ; dist_parse_table + dist_parse_tree + +;ztop: defs 1 ; must be < 0e000h + +; ----------------------------------------------------------------------------- + + \ No newline at end of file diff --git a/src/nos/gboot/uzmain.asm b/src/nos/gboot/uzmain.asm new file mode 100644 index 00000000..e5642f82 --- /dev/null +++ b/src/nos/gboot/uzmain.asm @@ -0,0 +1,233 @@ +; uzmain.asm by Nick, gunzipper, main program and error handling routines + +; ----------------------------------------------------------------------------- + +$ io64180.inc + +BUFSIZE equ 200h ; how many bytes per disk block +BUFSIZELOG equ 9 ; shift count representing the above + +HD0_START equ 512 +HD0_SIZE equ 1536 + +; ----------------------------------------------------------------------------- + + module _uzmain + + public init + public bomb + public uzmess + extern abyte + extern ahexb + extern ahexw + extern acrlf + extern amess + extern copyr + extern uzfgo + extern gztbuf + extern zdata + + extern s_CODE + extern e_CODE + + rseg ICODE + +; ----------------------------------------------------------------------------- + +init:: +; now there are the next stack structure: +; +4 envp +; +2 argv +; sp-> +0 argc + + call uzmess + defb 'unzipping root filesystem',0dh,0ah,0 + + ld hl,0 + ld iy,LWRD zdata + defb 11h ; ld de, + defb 4 ; e:hl -> destination, absolute 4:0000 (CP/M A: and B:) + defb BYTE3 zdata ; d:iy -> source, virtual zdata (gzipped input) + + call uzfgo ; we return here only if successful + + ld a,e + sub 4 + ld e,a + ld d,0 ; de:hl = 32-bit actual size unpacked + .if 0 + push hl + ex de,hl + call ahexw + ex de,hl + call ahexw + ld a,' ' + call abyte + ld hl,(gztbuf+6) + call ahexw + ld hl,(gztbuf+4) + call ahexw + call acrlf + pop hl + .endif + + ld bc,(gztbuf+4) + or a + sbc hl,bc + jr nz,bad_size ; check low order 16 bits of size + + ld hl,(gztbuf+6) + ;or a + sbc hl,de + jr nz,bad_size ; check high order 16 bits of size + + .if 0 ; intentionally corrupt inode 20 so that fsck won't run + jr poox +poo: + defw 0c1h + defw 0c0h +poox: + ld iy,poo-4000h + ld hl,0f18h + ld de,4 + ld bc,poox-poo + call copyr + .endif + + .if 0 ; check for accidental corruption of inode 18 + ; dump block 7 + ld a,40h-4 + out0 (BBR),a + ld hl,4e00h + ld c,20h +dline: + ld b,10h +ditem: + ld a,(hl) + inc hl + call ahexb + ld a,' ' + call abyte + djnz ditem + call acrlf + dec c + jr nz,dline + .endif + + call uzmess + defb 'starting kernel via reboot',0dh,0ah,0 + + ld hl,0 + ; wait for last character to be sent @ 9600 +reboot_delay: + dec hl + ld a,l + or h + jr nz,reboot_delay + + jr success ; reboot and run ramdrive boot sector + +bad_size: + call uzmess + db 'bad uncompressed size',0dh,0ah,0 + ;jr bomb + +bomb:: + ; try not to surprise the user unnecessarily + call uzmess + defb 'doing a clean boot',0dh,0ah,0 + + ; before rebooting, prepare to clobber CP/M drive A: directory + ld hl,block + ld de,block+1 + ld bc,BUFSIZE-1 + ld (hl),0aah ; clobbering pattern + ldir ; initialise temporary buffer + + ; perform the clobbering (this ensures a clean boot from EPROM) + .if 1 + ld de,0 + ld b,4 +clobber_loop: + push bc + push de + + ld hl,block + call block_write + + pop de + pop bc + inc de + djnz clobber_loop + .else + ld de,304h + ld l,c + ld h,b ; ld hl,0 ; e:hl -> destination 4:0000 + + ld b,4 ; clobber until just before 4:0800 +clobber_loop: + push bc + + ld iy,block ; copy from d:iy -> destination + ld bc,BUFSIZE ; bytes to copy + call copyr ; copy them, one byte at a time + + pop bc + djnz clobber_loop + .endif + +success: + ; ready to reboot, by instructing the WPO chip on motherboard + ld a,0aah + out0 (TRDR),A ; command byte to reboot the system + ld a,13h + out0 (CNTR),A ; TE=1, divisor = 3, start transmission + + ; wait for the reboot to occur, or else we're rather stuck + jr $ + +block_write: + push hl + call block_xlate ; a:hl -> data in ramdrive + + pop iy + ld d,3 ; d:iy -> user's buffer in seg 3: + + ld e,a ; e:hl -> data in ramdrive + jp copyr ; copy BUFSIZE bytes from d:iy to e:hl + +block_xlate: + ;ld hl,HD0_SIZE + ;scf + ;sbc hl,de ; check whether block no is in range + ;jr c,bad_block + + ld bc,BUFSIZE ; bytes to be copied for 1 block + + ld hl,HD0_START + add hl,de ; hl = block index (from start of ram) + + ld a,h + ld h,l + ld l,c ;0 ; a:hl = block index * 100h + + add hl,hl + adc a,a ; a:hl = block index * BUFSIZE (200h!!) + ret + +; ----------------------------------------------------------------------------- + +uzmess:: + call amess + defb 'uzboot: ',0 + jp amess + +; ----------------------------------------------------------------------------- + + rseg UDATA0 + +block: defs BUFSIZE ; temporary buffer for clobbering disc + +; ----------------------------------------------------------------------------- + + END diff --git a/src/nos/iar/BANKCALLDIRECT!.S b/src/nos/iar/BANKCALLDIRECT!.S new file mode 100644 index 00000000..8ed46f8e --- /dev/null +++ b/src/nos/iar/BANKCALLDIRECT!.S @@ -0,0 +1,48 @@ +; BANKCALLDIRECT.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BANK_CALL_DIRECT_L08 + + .if 1 +CBR equ 38h + .endif + + rseg RCODE + + public ?BANK_CALL_DIRECT_L08 + +?BANK_CALL_DIRECT_L08: + .if 1 + ; this Hytech modified code refers to CBR (38h) + push hl + + .if 1 ; virtual memory + ld h,10h + ld l,a ; hl -> 1000h + entry a value + ld a,(hl) ; translate cbr via virt memory table + + .if 0 ; slow but conservative + pop hl + or a ; check for unused virt memory pages + ret z ; just to be extra paranoid + push hl + .endif + .endif + + in0 h,(CBR) + out0 (CBR),a + ex (sp),hl + jp (hl) + .else + ; this IAR standard code refers to BBR (39h) + defb 0E5h,0EDh,020h,039h,0EDh,039h,039h + defb 0E3h,0E9h + .endif + + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BANKCALLDIRECT.S b/src/nos/iar/BANKCALLDIRECT.S new file mode 100644 index 00000000..f80e62a8 --- /dev/null +++ b/src/nos/iar/BANKCALLDIRECT.S @@ -0,0 +1,77 @@ +; BANKCALLDIRECT.S +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BANK_CALL_DIRECT_L08 + +#include "z80/asm.h" + +; ----------------------------------------------------------------------------- + + rseg RCODE + + public ?BANK_CALL_DIRECT_L08 +?BANK_CALL_DIRECT_L08: + + public ?BANK_CALL_DIRECT_EXAF_L08 +?BANK_CALL_DIRECT_EXAF_L08: + .if 1 + ; this Hytech modified code refers to CBR (38h) + push hl + + .if 1 ; virtual memory + ld hl,(CBR_REFERENCE) + push hl + ld l,a +#if 0 + sub a + ld (CBR_REFERENCE),a +#endif + ld a,(hl) + out0 (CBR),a + ld (CBR_REFERENCE),hl +#ifdef CALL_DIAGNOSTIC + extrn abyte,ahexw + ld a,i + jp po,silly1 + ld a,' ' + call abyte + ld a,'[' + call abyte + push hl + ld hl,4 + add hl,sp + call ahexw + pop hl + ld a,'=' + call abyte + call ahexw +silly1: +#endif + pop hl + .else + in0 h,(CBR) + out0 (CBR),a + .endif + ex (sp),hl +#ifdef CALL_DIAGNOSTIC + ld a,i + jp po,silly2 + ld a,':' + call abyte + call ahexw +silly2: +#endif + jp (hl) + .else + ; this IAR standard code refers to BBR (39h) + defb 0E5h,0EDh,020h,039h,0EDh,039h,039h + defb 0E3h,0E9h + .endif + + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BANKCALLDIRECTEXAF!.S b/src/nos/iar/BANKCALLDIRECTEXAF!.S new file mode 100644 index 00000000..6d5c13ab --- /dev/null +++ b/src/nos/iar/BANKCALLDIRECTEXAF!.S @@ -0,0 +1,55 @@ +; BANKCALLDIRECTEXAF.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BANK_CALL_DIRECT_EXAF_L08 + + .if 1 +CBR equ 38h + .endif + + rseg RCODE + + public ?BANK_CALL_DIRECT_EXAF_L08 + +?BANK_CALL_DIRECT_EXAF_L08: + .if 1 + ; this Hytech modified code refers to CBR (38h) + ex af,af' + in0 a,(CBR) + push af + ex af,af' + + .if 1 ; virtual memory + push hl + ld h,10h + ld l,a ; hl -> 1000h + entry a value + ld a,(hl) ; translate CBR via virt memory table + + .if 0 ; slow but conservative + pop hl + or a ; check for unused virt memory pages + ret z ; just to be extra paranoid + + out0 (CBR),a + jp (hl) + .else + out0 (CBR),a + ret + .endif + .else + out0 (CBR),a + jp (hl) + .endif + .else + ; this IAR standard code refers to BBR (39h) + defb 008h,0EDh,038h,039h,0F5h,008h,0EDh + defb 039h,039h,0E9h + .endif + + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BANKCALLDIRECTEXAF.S b/src/nos/iar/BANKCALLDIRECTEXAF.S new file mode 100644 index 00000000..6d5c13ab --- /dev/null +++ b/src/nos/iar/BANKCALLDIRECTEXAF.S @@ -0,0 +1,55 @@ +; BANKCALLDIRECTEXAF.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BANK_CALL_DIRECT_EXAF_L08 + + .if 1 +CBR equ 38h + .endif + + rseg RCODE + + public ?BANK_CALL_DIRECT_EXAF_L08 + +?BANK_CALL_DIRECT_EXAF_L08: + .if 1 + ; this Hytech modified code refers to CBR (38h) + ex af,af' + in0 a,(CBR) + push af + ex af,af' + + .if 1 ; virtual memory + push hl + ld h,10h + ld l,a ; hl -> 1000h + entry a value + ld a,(hl) ; translate CBR via virt memory table + + .if 0 ; slow but conservative + pop hl + or a ; check for unused virt memory pages + ret z ; just to be extra paranoid + + out0 (CBR),a + jp (hl) + .else + out0 (CBR),a + ret + .endif + .else + out0 (CBR),a + jp (hl) + .endif + .else + ; this IAR standard code refers to BBR (39h) + defb 008h,0EDh,038h,039h,0F5h,008h,0EDh + defb 039h,039h,0E9h + .endif + + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BANKLEAVE32!.S b/src/nos/iar/BANKLEAVE32!.S new file mode 100644 index 00000000..16940fc2 --- /dev/null +++ b/src/nos/iar/BANKLEAVE32!.S @@ -0,0 +1,40 @@ +; BANKLEAVE32.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BANK_LEAVE_32_L08 + + .if 1 +CBR equ 38h + .endif + + rseg RCODE + + public ?BANK_LEAVE_32_L08 + +?BANK_LEAVE_32_L08: + .if 1 + ld sp,ix + pop ix + pop de + inc sp + inc sp + .else + defb 0DDh,0F9h,0DDh,0E1h,0D1h,033h,033h + .endif + + .if 1 + ; this Hytech modified code refers to CBR (38h) + pop af + out0 (CBR),a + ret + .else + ; this IAR standard code refers to BBR (39h) + defb 0F1h,0EDh,039h,039h,0C9h + .endif + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BANKLEAVE32.S b/src/nos/iar/BANKLEAVE32.S new file mode 100644 index 00000000..fc90eede --- /dev/null +++ b/src/nos/iar/BANKLEAVE32.S @@ -0,0 +1,79 @@ +; BANKLEAVE32.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BANK_LEAVE_32_L08 + +#include "z80/asm.h" + +; ----------------------------------------------------------------------------- + + rseg RCODE + + public ?BANK_LEAVE_32_L08 + +?BANK_LEAVE_32_L08: + .if 1 + ld sp,ix + pop ix + pop de + inc sp + inc sp + .else + defb 0DDh,0F9h,0DDh,0E1h,0D1h,033h,033h + .endif + + .if 1 + ; this Hytech modified code refers to CBR (38h) + .if 1 ; virtual memory + ex (sp),hl +#if 0 + sub a + ld (CBR_REFERENCE),a +#endif + ld a,(hl) + out0 (CBR),a + ld (CBR_REFERENCE),hl +#ifdef CALL_DIAGNOSTIC + extrn abyte,ahexw + ld a,i + jp po,silly1 + ld a,']' + call abyte + ld a,' ' + call abyte + push hl + ld hl,2 + add hl,sp + call ahexw + pop hl + ld a,'=' + call abyte + call ahexw +silly1: +#endif + pop hl + .else + pop af + out0 (CBR),a + .endif +#ifdef CALL_DIAGNOSTIC + ld a,i + ret po + ld a,':' + call abyte + ex (sp),hl + call ahexw + ex (sp),hl +#endif + ret + .else + ; this IAR standard code refers to BBR (39h) + defb 0F1h,0EDh,039h,039h,0C9h + .endif + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BANKLEAVEDIRECT!.S b/src/nos/iar/BANKLEAVEDIRECT!.S new file mode 100644 index 00000000..ac278dbe --- /dev/null +++ b/src/nos/iar/BANKLEAVEDIRECT!.S @@ -0,0 +1,43 @@ +; BANKLEAVEDIRECT.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BANK_LEAVE_DIRECT_L08 + + .if 1 +CBR equ 38h + .endif + + rseg RCODE + + public ?BANK_LEAVE_DIRECT_L08 + +?BANK_LEAVE_DIRECT_L08: + .if 1 + ld sp,ix + pop ix + pop de + pop bc + .else + defb 0DDh,0F9h,0DDh,0E1h,0D1h,0C1h + .endif + + public ?BANK_FAST_LEAVE_L08 + +?BANK_FAST_LEAVE_L08: + .if 1 + ; this Hytech modified code refers to CBR (38h) + pop af + out0 (CBR),a + ret + .else + ; this IAR standard code refers to BBR (39h) + defb 0F1h,0EDh,039h,039h,0C9h + .endif + + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BANKLEAVEDIRECT.S b/src/nos/iar/BANKLEAVEDIRECT.S new file mode 100644 index 00000000..305b7ee6 --- /dev/null +++ b/src/nos/iar/BANKLEAVEDIRECT.S @@ -0,0 +1,84 @@ +; BANKLEAVEDIRECT.S +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BANK_LEAVE_DIRECT_L08 + +#include "z80/asm.h" + +; ----------------------------------------------------------------------------- + + rseg RCODE + + public ?BANK_LEAVE_DIRECT_L08 + +?BANK_LEAVE_DIRECT_L08: + .if 1 + ld sp,ix + pop ix + pop de + pop bc + .else + defb 0DDh,0F9h,0DDh,0E1h,0D1h,0C1h + .endif + + public ?BANK_FAST_LEAVE_L08 +?BANK_FAST_LEAVE_L08: + .if 1 + ; this Hytech modified code refers to CBR (38h) + .if 1 ; virtual memory + ex (sp),hl + + public leave_entry +leave_entry: +#if 0 + sub a + ld (CBR_REFERENCE),a +#endif + ld a,(hl) + out0 (CBR),a + ld (CBR_REFERENCE),hl +#ifdef CALL_DIAGNOSTIC + extrn abyte,ahexw + ld a,i + jp po,silly1 + ld a,']' + call abyte + ld a,' ' + call abyte + push hl + ld hl,2 + add hl,sp + call ahexw + pop hl + ld a,'=' + call abyte + call ahexw +silly1: +#endif + pop hl + .else + pop af + out0 (CBR),a + .endif +#ifdef CALL_DIAGNOSTIC + ld a,i + ret po + ld a,':' + call abyte + ex (sp),hl + call ahexw + ex (sp),hl +#endif + ret + .else + ; this IAR standard code refers to BBR (39h) + defb 0F1h,0EDh,039h,039h,0C9h + .endif + + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFCANDASG.S b/src/nos/iar/BFCANDASG.S new file mode 100644 index 00000000..fe64afc3 --- /dev/null +++ b/src/nos/iar/BFCANDASG.S @@ -0,0 +1,22 @@ +; BFCANDASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_C_ANDASG_L10 + rseg RCODE +rcode_base: + public ?BF_C_ANDASG_L10 +?BF_C_ANDASG_L10 equ rcode_base+00000000h + extern ?BF_C_SHIFT_UP_L10 + extern ?BF_C_RET_VAL_L10 + defb 0EBh,0E3h,0C5h,0D5h,05Eh,023h,056h + defb 023h,0E3h,0F5h,0CDh + defw LWRD ?BF_C_SHIFT_UP_L10 + defb 047h,07Eh,0A0h,0C3h + defw LWRD ?BF_C_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFCLSHASG.S b/src/nos/iar/BFCLSHASG.S new file mode 100644 index 00000000..a13f2107 --- /dev/null +++ b/src/nos/iar/BFCLSHASG.S @@ -0,0 +1,22 @@ +; BFCLSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_C_LSHASG_L10 + rseg RCODE +rcode_base: + public ?BF_C_LSHASG_L10 +?BF_C_LSHASG_L10 equ rcode_base+00000000h + extern ?C_LSH_L01 + extern ?BF_C_RET_VAL_L10 + defb 0EBh,0E3h,0C5h,0D5h,05Eh,023h,056h + defb 023h,0E3h,0F5h,07Eh,0A2h,0CDh + defw LWRD ?C_LSH_L01 + defb 0C3h + defw LWRD ?BF_C_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFCMULASG.S b/src/nos/iar/BFCMULASG.S new file mode 100644 index 00000000..58059dfd --- /dev/null +++ b/src/nos/iar/BFCMULASG.S @@ -0,0 +1,22 @@ +; BFCMULASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_C_MULASG_L10 + rseg RCODE +rcode_base: + public ?BF_C_MULASG_L10 +?BF_C_MULASG_L10 equ rcode_base+00000000h + extern ?C_MUL_L01 + extern ?BF_C_RET_VAL_L10 + defb 0EBh,0E3h,0C5h,0D5h,05Eh,023h,056h + defb 023h,0E3h,0F5h,047h,07Eh,0A2h,0CDh + defw LWRD ?C_MUL_L01 + defb 0C3h + defw LWRD ?BF_C_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFCORASG.S b/src/nos/iar/BFCORASG.S new file mode 100644 index 00000000..744565e6 --- /dev/null +++ b/src/nos/iar/BFCORASG.S @@ -0,0 +1,22 @@ +; BFCORASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_C_ORASG_L10 + rseg RCODE +rcode_base: + public ?BF_C_ORASG_L10 +?BF_C_ORASG_L10 equ rcode_base+00000000h + extern ?BF_C_SHIFT_UP_L10 + extern ?BF_C_RET_VAL_L10 + defb 0EBh,0E3h,0C5h,0D5h,05Eh,023h,056h + defb 023h,0E3h,0F5h,0CDh + defw LWRD ?BF_C_SHIFT_UP_L10 + defb 047h,07Eh,0B0h,0C3h + defw LWRD ?BF_C_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFCRETVAL.S b/src/nos/iar/BFCRETVAL.S new file mode 100644 index 00000000..835eb31f --- /dev/null +++ b/src/nos/iar/BFCRETVAL.S @@ -0,0 +1,31 @@ +; BFCRETVAL.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_C_RET_VAL_L10 + rseg RCODE +rcode_base: + public ?BF_C_RET_VAL_L10 +?BF_C_RET_VAL_L10 equ rcode_base+00000000h + extern ?BF_SC_EXT_L10 + extern ?SC_RSH_L01 + extern ?UC_RSH_L01 + defb 0A2h,04Fh,07Ah,02Fh,0A6h,0B1h,077h + defb 0CBh,07Bh,028h,01Ch,0CBh,073h,0C4h + defw LWRD ?BF_SC_EXT_L10 + defb 07Bh,0E6h,007h,047h,079h,0CBh,073h + defb 028h,007h,0CDh + defw LWRD ?SC_RSH_L01 + defb 0D1h,0C3h + defw rcode_base+28h ; t_push_rel (0000) 00000028 + defb 0CDh + defw LWRD ?UC_RSH_L01 + defb 0D1h,0C3h + defw rcode_base+28h ; t_push_rel (0000) 00000028 + defb 0F1h,0D1h,0C1h,0EBh,0E3h,0EBh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFCSHIFTUP.S b/src/nos/iar/BFCSHIFTUP.S new file mode 100644 index 00000000..b46fd027 --- /dev/null +++ b/src/nos/iar/BFCSHIFTUP.S @@ -0,0 +1,18 @@ +; BFCSHIFTUP.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_C_SHIFT_UP_L10 + rseg RCODE +rcode_base: + public ?BF_C_SHIFT_UP_L10 +?BF_C_SHIFT_UP_L10 equ rcode_base+00000000h + extern ?C_LSH_L01 + defb 04Fh,07Bh,0E6h,007h,047h,079h,0C3h + defw LWRD ?C_LSH_L01 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFCXORASG.S b/src/nos/iar/BFCXORASG.S new file mode 100644 index 00000000..1f1ef0ca --- /dev/null +++ b/src/nos/iar/BFCXORASG.S @@ -0,0 +1,22 @@ +; BFCXORASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_C_XORASG_L10 + rseg RCODE +rcode_base: + public ?BF_C_XORASG_L10 +?BF_C_XORASG_L10 equ rcode_base+00000000h + extern ?BF_C_SHIFT_UP_L10 + extern ?BF_C_RET_VAL_L10 + defb 0EBh,0E3h,0C5h,0D5h,05Eh,023h,056h + defb 023h,0E3h,0F5h,0CDh + defw LWRD ?BF_C_SHIFT_UP_L10 + defb 047h,07Eh,0A8h,0C3h + defw LWRD ?BF_C_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFMASKEDLD.S b/src/nos/iar/BFMASKEDLD.S new file mode 100644 index 00000000..c8b91bb8 --- /dev/null +++ b/src/nos/iar/BFMASKEDLD.S @@ -0,0 +1,17 @@ +; BFMASKEDLD.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_MASKED_LD_L10 + rseg RCODE +rcode_base: + public ?BF_MASKED_LD_L10 +?BF_MASKED_LD_L10 equ rcode_base+00000000h + defb 07Eh,0DDh,0A6h,001h,05Fh,023h,07Eh + defb 0DDh,0A6h,002h,057h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFMASKEDST.S b/src/nos/iar/BFMASKEDST.S new file mode 100644 index 00000000..85adac2c --- /dev/null +++ b/src/nos/iar/BFMASKEDST.S @@ -0,0 +1,19 @@ +; BFMASKEDST.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_MASKED_ST_L10 + rseg RCODE +rcode_base: + public ?BF_MASKED_ST_L10 +?BF_MASKED_ST_L10 equ rcode_base+00000000h + defb 0DDh,04Eh,001h,0DDh,046h,002h,07Bh + defb 0A1h,05Fh,07Ah,0A0h,057h,078h,02Fh + defb 0A6h,0B2h,077h,02Bh,079h,02Fh,0A6h + defb 0B3h,077h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSADDASG.S b/src/nos/iar/BFSADDASG.S new file mode 100644 index 00000000..d3adfbef --- /dev/null +++ b/src/nos/iar/BFSADDASG.S @@ -0,0 +1,24 @@ +; BFSADDASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_ADDASG_L10 + rseg RCODE +rcode_base: + public ?BF_S_ADDASG_L10 +?BF_S_ADDASG_L10 equ rcode_base+00000000h + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,050h,059h,0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 07Eh,083h,05Fh,023h,07Eh,08Ah,057h + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSANDASG.S b/src/nos/iar/BFSANDASG.S new file mode 100644 index 00000000..06758107 --- /dev/null +++ b/src/nos/iar/BFSANDASG.S @@ -0,0 +1,24 @@ +; BFSANDASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_ANDASG_L10 + rseg RCODE +rcode_base: + public ?BF_S_ANDASG_L10 +?BF_S_ANDASG_L10 equ rcode_base+00000000h + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,050h,059h,0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 07Eh,0A3h,05Fh,023h,07Eh,0A2h,057h + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSCDIVASG.S b/src/nos/iar/BFSCDIVASG.S new file mode 100644 index 00000000..2abc5dc8 --- /dev/null +++ b/src/nos/iar/BFSCDIVASG.S @@ -0,0 +1,28 @@ +; BFSCDIVASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_SC_DIVASG_L10 + rseg RCODE +rcode_base: + public ?BF_SC_DIVASG_L10 +?BF_SC_DIVASG_L10 equ rcode_base+00000000h + extern ?BF_SC_LD_SHIFT_DOWN_L10 + extern ?SC_DIV_L01 + extern ?BF_C_SHIFT_UP_L10 + extern ?BF_C_RET_VAL_L10 + defb 0EBh,0E3h,0C5h,0D5h,05Eh,023h,056h + defb 023h,0E3h,0F5h,0CDh + defw LWRD ?BF_SC_LD_SHIFT_DOWN_L10 + defb 0CDh + defw LWRD ?SC_DIV_L01 + defb 0CDh + defw LWRD ?BF_C_SHIFT_UP_L10 + defb 0C3h + defw LWRD ?BF_C_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSCEXT.S b/src/nos/iar/BFSCEXT.S new file mode 100644 index 00000000..eeaf9f5a --- /dev/null +++ b/src/nos/iar/BFSCEXT.S @@ -0,0 +1,18 @@ +; BFSCEXT.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_SC_EXT_L10 + rseg RCODE +rcode_base: + public ?BF_SC_EXT_L10 +?BF_SC_EXT_L10 equ rcode_base+00000000h + defb 006h,080h,07Ah,0A0h,020h,004h,0CBh + defb 028h,018h,0F8h,079h,0A0h,0C8h,079h + defb 0B0h,04Fh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSCLDSHIFTDOWN.S b/src/nos/iar/BFSCLDSHIFTDOWN.S new file mode 100644 index 00000000..0fa8da56 --- /dev/null +++ b/src/nos/iar/BFSCLDSHIFTDOWN.S @@ -0,0 +1,22 @@ +; BFSCLDSHIFTDOWN.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_SC_LD_SHIFT_DOWN_L10 + rseg RCODE +rcode_base: + public ?BF_SC_LD_SHIFT_DOWN_L10 +?BF_SC_LD_SHIFT_DOWN_L10 equ rcode_base+00000000h + extern ?BF_SC_EXT_L10 + extern ?SC_RSH_L01 + defb 047h,0C5h,07Eh,0A2h,04Fh,0CDh + defw LWRD ?BF_SC_EXT_L10 + defb 07Bh,0E6h,007h,047h,079h,0CDh + defw LWRD ?SC_RSH_L01 + defb 0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSCMODASG.S b/src/nos/iar/BFSCMODASG.S new file mode 100644 index 00000000..d0cb848d --- /dev/null +++ b/src/nos/iar/BFSCMODASG.S @@ -0,0 +1,28 @@ +; BFSCMODASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_SC_MODASG_L10 + rseg RCODE +rcode_base: + public ?BF_SC_MODASG_L10 +?BF_SC_MODASG_L10 equ rcode_base+00000000h + extern ?BF_SC_LD_SHIFT_DOWN_L10 + extern ?SC_MOD_L01 + extern ?BF_C_SHIFT_UP_L10 + extern ?BF_C_RET_VAL_L10 + defb 0EBh,0E3h,0C5h,0D5h,05Eh,023h,056h + defb 023h,0E3h,0F5h,0CDh + defw LWRD ?BF_SC_LD_SHIFT_DOWN_L10 + defb 0CDh + defw LWRD ?SC_MOD_L01 + defb 0CDh + defw LWRD ?BF_C_SHIFT_UP_L10 + defb 0C3h + defw LWRD ?BF_C_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSCRSHASG.S b/src/nos/iar/BFSCRSHASG.S new file mode 100644 index 00000000..4ed8f93f --- /dev/null +++ b/src/nos/iar/BFSCRSHASG.S @@ -0,0 +1,26 @@ +; BFSCRSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_SC_RSHASG_L10 + rseg RCODE +rcode_base: + public ?BF_SC_RSHASG_L10 +?BF_SC_RSHASG_L10 equ rcode_base+00000000h + extern ?BF_SC_EXT_L10 + extern ?SC_RSH_L01 + extern ?BF_C_RET_VAL_L10 + defb 0EBh,0E3h,0C5h,0D5h,05Eh,023h,056h + defb 023h,0E3h,0F5h,0C5h,07Eh,0A2h,04Fh + defb 0CDh + defw LWRD ?BF_SC_EXT_L10 + defb 0C1h,0CDh + defw LWRD ?SC_RSH_L01 + defb 0C3h + defw LWRD ?BF_C_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSLSHASG.S b/src/nos/iar/BFSLSHASG.S new file mode 100644 index 00000000..6d89383f --- /dev/null +++ b/src/nos/iar/BFSLSHASG.S @@ -0,0 +1,26 @@ +; BFSLSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_LSHASG_L10 + rseg RCODE +rcode_base: + public ?BF_S_LSHASG_L10 +?BF_S_LSHASG_L10 equ rcode_base+00000000h + extern ?BF_MASKED_LD_L10 + extern ?S_LSH_L02 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,0CDh + defw LWRD ?BF_MASKED_LD_L10 + defb 0CDh + defw LWRD ?S_LSH_L02 + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSMULASG.S b/src/nos/iar/BFSMULASG.S new file mode 100644 index 00000000..17013fbc --- /dev/null +++ b/src/nos/iar/BFSMULASG.S @@ -0,0 +1,24 @@ +; BFSMULASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_MULASG_L10 + rseg RCODE +rcode_base: + public ?BF_S_MULASG_L10 +?BF_S_MULASG_L10 equ rcode_base+00000000h + extern ?S_MUL_L02 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,07Eh,0DDh,0A6h,001h,05Fh,023h + defb 07Eh,0DDh,0A6h,002h,057h,0CDh + defw LWRD ?S_MUL_L02 + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSNEGASG.S b/src/nos/iar/BFSNEGASG.S new file mode 100644 index 00000000..725f3189 --- /dev/null +++ b/src/nos/iar/BFSNEGASG.S @@ -0,0 +1,24 @@ +; BFSNEGASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_NEGASG_L10 + rseg RCODE +rcode_base: + public ?BF_S_NEGASG_L10 +?BF_S_NEGASG_L10 equ rcode_base+00000000h + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,011h,001h,000h,0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 07Eh,02Fh,083h,05Fh,023h,07Eh,02Fh + defb 08Ah,057h,0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSORASG.S b/src/nos/iar/BFSORASG.S new file mode 100644 index 00000000..31060124 --- /dev/null +++ b/src/nos/iar/BFSORASG.S @@ -0,0 +1,24 @@ +; BFSORASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_ORASG_L10 + rseg RCODE +rcode_base: + public ?BF_S_ORASG_L10 +?BF_S_ORASG_L10 equ rcode_base+00000000h + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,050h,059h,0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 07Eh,0B3h,05Fh,023h,07Eh,0B2h,057h + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSPOSTDEC.S b/src/nos/iar/BFSPOSTDEC.S new file mode 100644 index 00000000..06b63eed --- /dev/null +++ b/src/nos/iar/BFSPOSTDEC.S @@ -0,0 +1,24 @@ +; BFSPOSTDEC.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_POST_DEC_L10 + rseg RCODE +rcode_base: + public ?BF_S_POST_DEC_L10 +?BF_S_POST_DEC_L10 equ rcode_base+00000000h + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL2_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,011h,001h,000h,0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 04Eh,023h,046h,0C5h,079h,093h,05Fh + defb 078h,09Ah,057h,0C3h + defw LWRD ?BF_S_RET_VAL2_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSPOSTINC.S b/src/nos/iar/BFSPOSTINC.S new file mode 100644 index 00000000..ce4f824b --- /dev/null +++ b/src/nos/iar/BFSPOSTINC.S @@ -0,0 +1,24 @@ +; BFSPOSTINC.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_POST_INC_L10 + rseg RCODE +rcode_base: + public ?BF_S_POST_INC_L10 +?BF_S_POST_INC_L10 equ rcode_base+00000000h + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL2_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,011h,001h,000h,0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 04Eh,023h,046h,0C5h,079h,083h,05Fh + defb 078h,08Ah,057h,0C3h + defw LWRD ?BF_S_RET_VAL2_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSPREDEC.S b/src/nos/iar/BFSPREDEC.S new file mode 100644 index 00000000..1ee854a7 --- /dev/null +++ b/src/nos/iar/BFSPREDEC.S @@ -0,0 +1,24 @@ +; BFSPREDEC.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_PRE_DEC_L10 + rseg RCODE +rcode_base: + public ?BF_S_PRE_DEC_L10 +?BF_S_PRE_DEC_L10 equ rcode_base+00000000h + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,011h,001h,000h,0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 07Eh,093h,05Fh,023h,07Eh,09Ah,057h + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSPREINC.S b/src/nos/iar/BFSPREINC.S new file mode 100644 index 00000000..03ab13ba --- /dev/null +++ b/src/nos/iar/BFSPREINC.S @@ -0,0 +1,24 @@ +; BFSPREINC.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_PRE_INC_L10 + rseg RCODE +rcode_base: + public ?BF_S_PRE_INC_L10 +?BF_S_PRE_INC_L10 equ rcode_base+00000000h + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,011h,001h,000h,0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 07Eh,083h,05Fh,023h,07Eh,08Ah,057h + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSRETVAL.S b/src/nos/iar/BFSRETVAL.S new file mode 100644 index 00000000..a79e3518 --- /dev/null +++ b/src/nos/iar/BFSRETVAL.S @@ -0,0 +1,40 @@ +; BFSRETVAL.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_RET_VAL_L10 + rseg RCODE +rcode_base: + public ?BF_S_RET_VAL_L10 +?BF_S_RET_VAL_L10 equ rcode_base+0000000Ch + public ?BF_S_RET_VAL2_L10 +?BF_S_RET_VAL2_L10 equ rcode_base+00000000h + extern ?BF_MASKED_ST_L10 + extern ?BF_SS_EXT_L10 + extern ?SS_RSH_L02 + extern ?US_RSH_L02 + defb 0CDh + defw LWRD ?BF_MASKED_ST_L10 + defb 0D1h,07Bh,0A1h,05Fh,07Ah,0A0h,057h + defb 018h,003h,0CDh + defw LWRD ?BF_MASKED_ST_L10 + defb 0DDh,04Eh,000h,0CBh,079h,028h,01Dh + defb 079h,0E6h,00Fh,047h,0CBh,071h,028h + defb 00Ch,0CDh + defw LWRD ?BF_SS_EXT_L10 + defb 0CDh + defw LWRD ?SS_RSH_L02 + defb 042h,04Bh,0E1h,0C3h + defw rcode_base+34h ; t_push_rel (0000) 00000034 + defb 0CDh + defw LWRD ?US_RSH_L02 + defb 042h,04Bh,0E1h,0C3h + defw rcode_base+34h ; t_push_rel (0000) 00000034 + defb 0C1h,0F1h,0E1h,0D1h,0DDh,0E1h,0EBh + defb 0E3h,0EBh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSSDIVASG.S b/src/nos/iar/BFSSDIVASG.S new file mode 100644 index 00000000..77091cdd --- /dev/null +++ b/src/nos/iar/BFSSDIVASG.S @@ -0,0 +1,29 @@ +; BFSSDIVASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_SS_DIVASG_L10 + rseg RCODE +rcode_base: + public ?BF_SS_DIVASG_L10 +?BF_SS_DIVASG_L10 equ rcode_base+00000000h + extern ?BF_SS_LD_SHIFT_DOWN_L10 + extern ?SS_DIV_L02 + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,0CDh + defw LWRD ?BF_SS_LD_SHIFT_DOWN_L10 + defb 0CDh + defw LWRD ?SS_DIV_L02 + defb 0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSSEXT.S b/src/nos/iar/BFSSEXT.S new file mode 100644 index 00000000..93c672aa --- /dev/null +++ b/src/nos/iar/BFSSEXT.S @@ -0,0 +1,22 @@ +; BFSSEXT.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_SS_EXT_L10 + rseg RCODE +rcode_base: + public ?BF_SS_EXT_L10 +?BF_SS_EXT_L10 equ rcode_base+00000000h + defb 0E5h,0C5h,0DDh,06Eh,001h,0DDh,066h + defb 002h,006h,080h,00Eh,000h,07Ch,0A0h + defb 020h,00Ah,07Dh,0A1h,020h,006h,0CBh + defb 028h,0CBh,019h,018h,0F2h,07Ah,0A4h + defb 0A0h,020h,008h,07Bh,0A5h,0A1h,028h + defb 006h,07Bh,0B1h,05Fh,07Ah,0B0h,057h + defb 0C1h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSSHIFTUP.S b/src/nos/iar/BFSSHIFTUP.S new file mode 100644 index 00000000..b513ea25 --- /dev/null +++ b/src/nos/iar/BFSSHIFTUP.S @@ -0,0 +1,18 @@ +; BFSSHIFTUP.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_SHIFT_UP_L10 + rseg RCODE +rcode_base: + public ?BF_S_SHIFT_UP_L10 +?BF_S_SHIFT_UP_L10 equ rcode_base+00000000h + extern ?S_LSH_L02 + defb 0DDh,07Eh,000h,0E6h,00Fh,047h,0C3h + defw LWRD ?S_LSH_L02 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSSLDSHIFTDOWN.S b/src/nos/iar/BFSSLDSHIFTDOWN.S new file mode 100644 index 00000000..0ea7a5d2 --- /dev/null +++ b/src/nos/iar/BFSSLDSHIFTDOWN.S @@ -0,0 +1,25 @@ +; BFSSLDSHIFTDOWN.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_SS_LD_SHIFT_DOWN_L10 + rseg RCODE +rcode_base: + public ?BF_SS_LD_SHIFT_DOWN_L10 +?BF_SS_LD_SHIFT_DOWN_L10 equ rcode_base+00000000h + extern ?BF_MASKED_LD_L10 + extern ?BF_SS_EXT_L10 + extern ?SS_RSH_L02 + defb 0C5h,0CDh + defw LWRD ?BF_MASKED_LD_L10 + defb 0CDh + defw LWRD ?BF_SS_EXT_L10 + defb 0DDh,07Eh,000h,0E6h,00Fh,047h,0CDh + defw LWRD ?SS_RSH_L02 + defb 0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSSMODASG.S b/src/nos/iar/BFSSMODASG.S new file mode 100644 index 00000000..e067701a --- /dev/null +++ b/src/nos/iar/BFSSMODASG.S @@ -0,0 +1,29 @@ +; BFSSMODASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_SS_MODASG_L10 + rseg RCODE +rcode_base: + public ?BF_SS_MODASG_L10 +?BF_SS_MODASG_L10 equ rcode_base+00000000h + extern ?BF_SS_LD_SHIFT_DOWN_L10 + extern ?SS_MOD_L02 + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,0CDh + defw LWRD ?BF_SS_LD_SHIFT_DOWN_L10 + defb 0CDh + defw LWRD ?SS_MOD_L02 + defb 0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSSRSHASG.S b/src/nos/iar/BFSSRSHASG.S new file mode 100644 index 00000000..522e5dbd --- /dev/null +++ b/src/nos/iar/BFSSRSHASG.S @@ -0,0 +1,29 @@ +; BFSSRSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_SS_RSHASG_L10 + rseg RCODE +rcode_base: + public ?BF_SS_RSHASG_L10 +?BF_SS_RSHASG_L10 equ rcode_base+00000000h + extern ?BF_MASKED_LD_L10 + extern ?BF_SS_EXT_L10 + extern ?SS_RSH_L02 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,0CDh + defw LWRD ?BF_MASKED_LD_L10 + defb 0CDh + defw LWRD ?BF_SS_EXT_L10 + defb 0CDh + defw LWRD ?SS_RSH_L02 + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSSUBASG.S b/src/nos/iar/BFSSUBASG.S new file mode 100644 index 00000000..be1216af --- /dev/null +++ b/src/nos/iar/BFSSUBASG.S @@ -0,0 +1,24 @@ +; BFSSUBASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_SUBASG_L10 + rseg RCODE +rcode_base: + public ?BF_S_SUBASG_L10 +?BF_S_SUBASG_L10 equ rcode_base+00000000h + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,050h,059h,0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 07Eh,093h,05Fh,023h,07Eh,09Ah,057h + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFSXORASG.S b/src/nos/iar/BFSXORASG.S new file mode 100644 index 00000000..85db9b58 --- /dev/null +++ b/src/nos/iar/BFSXORASG.S @@ -0,0 +1,24 @@ +; BFSXORASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_S_XORASG_L10 + rseg RCODE +rcode_base: + public ?BF_S_XORASG_L10 +?BF_S_XORASG_L10 equ rcode_base+00000000h + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,050h,059h,0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 07Eh,0ABh,05Fh,023h,07Eh,0AAh,057h + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFUCDIVASG.S b/src/nos/iar/BFUCDIVASG.S new file mode 100644 index 00000000..2957484d --- /dev/null +++ b/src/nos/iar/BFUCDIVASG.S @@ -0,0 +1,28 @@ +; BFUCDIVASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_UC_DIVASG_L10 + rseg RCODE +rcode_base: + public ?BF_UC_DIVASG_L10 +?BF_UC_DIVASG_L10 equ rcode_base+00000000h + extern ?BF_UC_LD_SHIFT_DOWN_L10 + extern ?UC_DIV_L01 + extern ?BF_C_SHIFT_UP_L10 + extern ?BF_C_RET_VAL_L10 + defb 0EBh,0E3h,0C5h,0D5h,05Eh,023h,056h + defb 023h,0E3h,0F5h,0CDh + defw LWRD ?BF_UC_LD_SHIFT_DOWN_L10 + defb 0CDh + defw LWRD ?UC_DIV_L01 + defb 0CDh + defw LWRD ?BF_C_SHIFT_UP_L10 + defb 0C3h + defw LWRD ?BF_C_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFUCLDSHIFTDOWN.S b/src/nos/iar/BFUCLDSHIFTDOWN.S new file mode 100644 index 00000000..6c444df0 --- /dev/null +++ b/src/nos/iar/BFUCLDSHIFTDOWN.S @@ -0,0 +1,20 @@ +; BFUCLDSHIFTDOWN.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_UC_LD_SHIFT_DOWN_L10 + rseg RCODE +rcode_base: + public ?BF_UC_LD_SHIFT_DOWN_L10 +?BF_UC_LD_SHIFT_DOWN_L10 equ rcode_base+00000000h + extern ?UC_RSH_L01 + defb 047h,0C5h,07Eh,0A2h,04Fh,07Bh,0E6h + defb 007h,047h,079h,0CDh + defw LWRD ?UC_RSH_L01 + defb 0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFUCMODASG.S b/src/nos/iar/BFUCMODASG.S new file mode 100644 index 00000000..d4834555 --- /dev/null +++ b/src/nos/iar/BFUCMODASG.S @@ -0,0 +1,28 @@ +; BFUCMODASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_UC_MODASG_L10 + rseg RCODE +rcode_base: + public ?BF_UC_MODASG_L10 +?BF_UC_MODASG_L10 equ rcode_base+00000000h + extern ?BF_UC_LD_SHIFT_DOWN_L10 + extern ?UC_MOD_L01 + extern ?BF_C_SHIFT_UP_L10 + extern ?BF_C_RET_VAL_L10 + defb 0EBh,0E3h,0C5h,0D5h,05Eh,023h,056h + defb 023h,0E3h,0F5h,0CDh + defw LWRD ?BF_UC_LD_SHIFT_DOWN_L10 + defb 0CDh + defw LWRD ?UC_MOD_L01 + defb 0CDh + defw LWRD ?BF_C_SHIFT_UP_L10 + defb 0C3h + defw LWRD ?BF_C_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFUCRSHASG.S b/src/nos/iar/BFUCRSHASG.S new file mode 100644 index 00000000..09de5522 --- /dev/null +++ b/src/nos/iar/BFUCRSHASG.S @@ -0,0 +1,22 @@ +; BFUCRSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_UC_RSHASG_L10 + rseg RCODE +rcode_base: + public ?BF_UC_RSHASG_L10 +?BF_UC_RSHASG_L10 equ rcode_base+00000000h + extern ?UC_RSH_L01 + extern ?BF_C_RET_VAL_L10 + defb 0EBh,0E3h,0C5h,0D5h,05Eh,023h,056h + defb 023h,0E3h,0F5h,07Eh,0A2h,0CDh + defw LWRD ?UC_RSH_L01 + defb 0C3h + defw LWRD ?BF_C_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFUSDIVASG.S b/src/nos/iar/BFUSDIVASG.S new file mode 100644 index 00000000..0246f8e7 --- /dev/null +++ b/src/nos/iar/BFUSDIVASG.S @@ -0,0 +1,29 @@ +; BFUSDIVASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_US_DIVASG_L10 + rseg RCODE +rcode_base: + public ?BF_US_DIVASG_L10 +?BF_US_DIVASG_L10 equ rcode_base+00000000h + extern ?BF_US_LD_SHIFT_DOWN_L10 + extern ?US_DIV_L02 + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,0CDh + defw LWRD ?BF_US_LD_SHIFT_DOWN_L10 + defb 0CDh + defw LWRD ?US_DIV_L02 + defb 0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFUSLDSHIFTDOWN.S b/src/nos/iar/BFUSLDSHIFTDOWN.S new file mode 100644 index 00000000..54fade43 --- /dev/null +++ b/src/nos/iar/BFUSLDSHIFTDOWN.S @@ -0,0 +1,22 @@ +; BFUSLDSHIFTDOWN.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_US_LD_SHIFT_DOWN_L10 + rseg RCODE +rcode_base: + public ?BF_US_LD_SHIFT_DOWN_L10 +?BF_US_LD_SHIFT_DOWN_L10 equ rcode_base+00000000h + extern ?BF_MASKED_LD_L10 + extern ?US_RSH_L02 + defb 0C5h,0CDh + defw LWRD ?BF_MASKED_LD_L10 + defb 0DDh,07Eh,000h,0E6h,00Fh,047h,0CDh + defw LWRD ?US_RSH_L02 + defb 0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFUSMODASG.S b/src/nos/iar/BFUSMODASG.S new file mode 100644 index 00000000..8dd625ee --- /dev/null +++ b/src/nos/iar/BFUSMODASG.S @@ -0,0 +1,29 @@ +; BFUSMODASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_US_MODASG_L10 + rseg RCODE +rcode_base: + public ?BF_US_MODASG_L10 +?BF_US_MODASG_L10 equ rcode_base+00000000h + extern ?BF_US_LD_SHIFT_DOWN_L10 + extern ?US_MOD_L02 + extern ?BF_S_SHIFT_UP_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,0CDh + defw LWRD ?BF_US_LD_SHIFT_DOWN_L10 + defb 0CDh + defw LWRD ?US_MOD_L02 + defb 0CDh + defw LWRD ?BF_S_SHIFT_UP_L10 + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/BFUSRSHASG.S b/src/nos/iar/BFUSRSHASG.S new file mode 100644 index 00000000..42326744 --- /dev/null +++ b/src/nos/iar/BFUSRSHASG.S @@ -0,0 +1,26 @@ +; BFUSRSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?BF_US_RSHASG_L10 + rseg RCODE +rcode_base: + public ?BF_US_RSHASG_L10 +?BF_US_RSHASG_L10 equ rcode_base+00000000h + extern ?US_RSH_L02 + extern ?BF_MASKED_LD_L10 + extern ?BF_S_RET_VAL_L10 + defb 0EBh,0E3h,0DDh,0E5h,0D5h,0E5h,0DDh + defb 0E1h,023h,023h,023h,0E3h,0E5h,0F5h + defb 0C5h,0CDh + defw LWRD ?BF_MASKED_LD_L10 + defb 0CDh + defw LWRD ?US_RSH_L02 + defb 0C3h + defw LWRD ?BF_S_RET_VAL_L10 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/CALLIND.S b/src/nos/iar/CALLIND.S new file mode 100644 index 00000000..ae805f7a --- /dev/null +++ b/src/nos/iar/CALLIND.S @@ -0,0 +1,16 @@ +; CALLIND.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?CALL_IND_L09 + rseg RCODE +rcode_base: + public ?CALL_IND_L09 +?CALL_IND_L09 equ rcode_base+00000000h + defb 0E9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/CDIVMOD.S b/src/nos/iar/CDIVMOD.S new file mode 100644 index 00000000..32c299e0 --- /dev/null +++ b/src/nos/iar/CDIVMOD.S @@ -0,0 +1,18 @@ +; CDIVMOD.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?C_DIVMOD_L01 + rseg RCODE +rcode_base: + public ?C_DIVMOD_L01 +?C_DIVMOD_L01 equ rcode_base+00000000h + defb 011h,009h,000h,0CBh,011h,01Dh,0C8h + defb 0CBh,012h,07Ah,090h,038h,0F6h,057h + defb 018h,0F3h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/CFINDSIGN.S b/src/nos/iar/CFINDSIGN.S new file mode 100644 index 00000000..5a7402ac --- /dev/null +++ b/src/nos/iar/CFINDSIGN.S @@ -0,0 +1,18 @@ +; CFINDSIGN.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?C_FIND_SIGN_L01 + rseg RCODE +rcode_base: + public ?C_FIND_SIGN_L01 +?C_FIND_SIGN_L01 equ rcode_base+00000000h + defb 0CBh,078h,028h,005h,0AFh,090h,047h + defb 03Eh,001h,0CBh,079h,0C8h,0F5h,0AFh + defb 091h,04Fh,0F1h,0EEh,001h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/CLSH.S b/src/nos/iar/CLSH.S new file mode 100644 index 00000000..34905e2b --- /dev/null +++ b/src/nos/iar/CLSH.S @@ -0,0 +1,16 @@ +; CLSH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?C_LSH_L01 + rseg RCODE +rcode_base: + public ?C_LSH_L01 +?C_LSH_L01 equ rcode_base+00000000h + defb 004h,005h,0C8h,087h,010h,0FDh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/CLSHASG.S b/src/nos/iar/CLSHASG.S new file mode 100644 index 00000000..e38f7e6e --- /dev/null +++ b/src/nos/iar/CLSHASG.S @@ -0,0 +1,19 @@ +; CLSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?C_LSHASG_L01 + rseg RCODE +rcode_base: + public ?C_LSHASG_L01 +?C_LSHASG_L01 equ rcode_base+00000000h + extern ?C_LSH_L01 + defb 07Eh,0CDh + defw LWRD ?C_LSH_L01 + defb 077h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/CMUL.S b/src/nos/iar/CMUL.S new file mode 100644 index 00000000..f0dde678 --- /dev/null +++ b/src/nos/iar/CMUL.S @@ -0,0 +1,16 @@ +; CMUL.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?C_MUL_L01 + rseg RCODE +rcode_base: + public ?C_MUL_L01 +?C_MUL_L01 equ rcode_base+00000000h + defb 0C5h,04Fh,0EDh,04Ch,079h,0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/CMULASG.S b/src/nos/iar/CMULASG.S new file mode 100644 index 00000000..7308472a --- /dev/null +++ b/src/nos/iar/CMULASG.S @@ -0,0 +1,19 @@ +; CMULASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?C_MULASG_L01 + rseg RCODE +rcode_base: + public ?C_MULASG_L01 +?C_MULASG_L01 equ rcode_base+00000000h + extern ?C_MUL_L01 + defb 0C5h,047h,07Eh,0CDh + defw LWRD ?C_MUL_L01 + defb 077h,0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/CSSWITCH.S b/src/nos/iar/CSSWITCH.S new file mode 100644 index 00000000..4465fd6c --- /dev/null +++ b/src/nos/iar/CSSWITCH.S @@ -0,0 +1,19 @@ +; CSSWITCH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?C_S_SWITCH_L06 + rseg RCODE +rcode_base: + public ?C_S_SWITCH_L06 +?C_S_SWITCH_L06 equ rcode_base+00000000h + defb 0E3h,0F5h,0D5h,016h,000h,07Bh,096h + defb 023h,05Fh,096h,023h,07Ah,09Eh,023h + defb 030h,004h,0EBh,023h,029h,019h,05Eh + defb 023h,056h,0EBh,0D1h,0F1h,0E3h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/CVSWITCH.S b/src/nos/iar/CVSWITCH.S new file mode 100644 index 00000000..a5509f54 --- /dev/null +++ b/src/nos/iar/CVSWITCH.S @@ -0,0 +1,20 @@ +; CVSWITCH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?C_V_SWITCH_L06 + rseg RCODE +rcode_base: + public ?C_V_SWITCH_L06 +?C_V_SWITCH_L06 equ rcode_base+00000000h + extern ?V_SWITCH_END_L06 + defb 0E3h,0F5h,0C5h,04Eh,023h,046h,023h + defb 07Bh,0EDh,0B1h,020h,002h,023h,023h + defb 009h,0C3h + defw LWRD ?V_SWITCH_END_L06 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/ENTAUTODIRECT.S b/src/nos/iar/ENTAUTODIRECT.S new file mode 100644 index 00000000..3f875a4b --- /dev/null +++ b/src/nos/iar/ENTAUTODIRECT.S @@ -0,0 +1,18 @@ +; ENTAUTODIRECT.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?ENT_AUTO_DIRECT_L09 + rseg RCODE +rcode_base: + public ?ENT_AUTO_DIRECT_L09 +?ENT_AUTO_DIRECT_L09 equ rcode_base+00000000h + defb 0E1h,0C5h,0D5h,0DDh,0E5h,0DDh,021h + defb 000h,000h,0DDh,039h,05Eh,023h,056h + defb 023h,0EBh,039h,0F9h,0EBh,0E9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/ENTPARMDIRECT.S b/src/nos/iar/ENTPARMDIRECT.S new file mode 100644 index 00000000..acc08c69 --- /dev/null +++ b/src/nos/iar/ENTPARMDIRECT.S @@ -0,0 +1,17 @@ +; ENTPARMDIRECT.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?ENT_PARM_DIRECT_L09 + rseg RCODE +rcode_base: + public ?ENT_PARM_DIRECT_L09 +?ENT_PARM_DIRECT_L09 equ rcode_base+00000000h + defb 0E1h,0C5h,0D5h,0DDh,0E5h,0DDh,021h + defb 000h,000h,0DDh,039h,0E9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FADDASG.S b/src/nos/iar/FADDASG.S new file mode 100644 index 00000000..1320fcfd --- /dev/null +++ b/src/nos/iar/FADDASG.S @@ -0,0 +1,22 @@ +; FADDASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_ADDASG_L04 + rseg RCODE +rcode_base: + public ?F_ADDASG_L04 +?F_ADDASG_L04 equ rcode_base+00000000h + extern ?F_END_ASG2_L04 + extern ?F_ADD_L04 + defb 0C5h,0D5h,05Eh,023h,056h,023h,04Eh + defb 023h,046h,0EBh,0CDh + defw LWRD ?F_ADD_L04 + defb 0C3h + defw LWRD ?F_END_ASG2_L04 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FADDSUB.S b/src/nos/iar/FADDSUB.S new file mode 100644 index 00000000..6503f5d2 --- /dev/null +++ b/src/nos/iar/FADDSUB.S @@ -0,0 +1,75 @@ +; FADDSUB.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_ADD_SUB_L04 + rseg RCODE +rcode_base: + public ?F_SUB_L04 +?F_SUB_L04 equ rcode_base+00000000h + public ?F_ADD_L04 +?F_ADD_L04 equ rcode_base+00000014h + extern ?F_OVERFLOW_L04 + extern ?F_UNDERFLOW_L04 + extern ?F_ROUND_L04 + extern ?F_NO_PACK_L04 + extern ?F_PACK_L04 + extern ?F_UNPACK_L04 + defb 0EBh,0E3h,0DDh,0E5h,0DDh,021h,002h + defb 000h,0DDh,039h,0E5h,0F5h,0DDh,07Eh + defb 005h,0EEh,080h,06Fh,018h,00Fh,0EBh + defb 0E3h,0DDh,0E5h,0DDh,021h,002h,000h + defb 0DDh,039h,0E5h,0F5h,0DDh,06Eh,005h + defb 078h,0E6h,07Fh,0B1h,020h,015h,045h + defb 0DDh,04Eh,004h,0DDh,056h,003h,0DDh + defb 05Eh,002h,07Dh,0E6h + defb 07Fh,06Fh,0B1h,020h,001h,045h,0C3h + defw LWRD ?F_NO_PACK_L04 + defb 07Dh,0E6h,07Fh,0DDh,0B6h,004h,0CAh + defw LWRD ?F_NO_PACK_L04 + defb 0C5h,0D5h,078h,0E6h,07Fh,067h,0DDh + defb 075h,005h,07Dh,0E6h,07Fh,047h,069h + defb 0DDh,04Eh,004h,0EDh,042h,020h,009h + defb 0EBh,0DDh,046h,003h,0DDh,04Eh,002h + defb 0EDh,042h,0D1h,038h,01Dh,0E1h,0DDh + defb 07Eh,003h,0DDh,072h,003h,057h,0DDh + defb 07Eh,002h,0DDh,073h,002h,05Fh,0DDh + defb 046h,005h,0DDh,074h + defb 005h,0DDh,04Eh,004h,0DDh,075h,004h + defb 018h,001h,0C1h,0CDh + defw LWRD ?F_UNPACK_L04 + defb 0F5h,07Ch,095h,0FEh,01Ah,038h,00Fh + defb 0DDh,046h,005h,0DDh,04Eh,004h,0DDh + defb 056h,003h,0DDh,05Eh,002h,0C3h + defw LWRD ?F_PACK_L04 + defb 0FEh,008h,038h,010h,0D6h,008h,06Fh + defb 0AFh,0BBh,05Ah,028h,002h,0CBh,0C3h + defb 051h,048h,047h,07Dh,018h,0ECh,0B7h + defb 028h,00Fh,0CBh,038h,0CBh,019h,0CBh + defb 01Ah,0CBh,01Bh,030h,002h,0CBh,0C3h + defb 03Dh,020h,0F1h,0DDh,0CBh,0F9h,056h + defb 020h,029h,0DDh,07Eh,002h,083h,05Fh + defb 0DDh,07Eh,003h,08Ah + defb 057h,0DDh,07Eh,004h,089h,04Fh,0DDh + defb 07Eh,005h,088h,047h,030h,010h,0CBh + defb 018h,0CBh,019h,0CBh,01Ah,0CBh,01Bh + defb 030h,002h,0CBh,0C3h,024h,0CAh + defw LWRD ?F_OVERFLOW_L04 + defb 0C3h + defw LWRD ?F_ROUND_L04 + defb 0DDh,07Eh,002h,093h,05Fh,0DDh,07Eh + defb 003h,09Ah,057h,0DDh,07Eh,004h,099h + defb 04Fh,0DDh,07Eh,005h,098h,047h,0B1h + defb 0B2h,0B3h,0CAh + defw LWRD ?F_UNDERFLOW_L04 + defb 0CBh,078h,020h,00Eh,025h,0CAh + defw LWRD ?F_UNDERFLOW_L04 + defb 0CBh,023h,0CBh,012h,0CBh,011h,0CBh + defb 010h,018h,0EEh,0C3h + defw LWRD ?F_ROUND_L04 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FCMP.S b/src/nos/iar/FCMP.S new file mode 100644 index 00000000..7eabf575 --- /dev/null +++ b/src/nos/iar/FCMP.S @@ -0,0 +1,28 @@ +; FCMP.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_CMP_L04 + rseg RCODE +rcode_base: + public ?F_CMP_L04 +?F_CMP_L04 equ rcode_base+00000000h + defb 0EBh,0E3h,0DDh,0E5h,0DDh,021h,002h + defb 000h,0DDh,039h,0E5h,067h,0DDh,07Eh + defb 005h,0CBh,078h,028h,019h,0CBh,07Fh + defb 028h,015h,090h,020h,02Bh,0DDh,07Eh + defb 004h,091h,020h,025h,0DDh,07Eh,003h + defb 092h,020h,01Fh,0DDh,07Eh,002h,093h + defb 018h,019h,0EEh,080h,06Fh,078h,0EEh + defb 080h,095h,020h,010h + defb 079h,0DDh,096h,004h,020h,00Ah,07Ah + defb 0DDh,096h,003h,020h,004h,07Bh,0DDh + defb 096h,002h,07Ch,0E1h,0DDh,075h,004h + defb 0DDh,074h,005h,0DDh,0E1h,0E1h,0EBh + defb 033h,033h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FDEC.S b/src/nos/iar/FDEC.S new file mode 100644 index 00000000..80bd2045 --- /dev/null +++ b/src/nos/iar/FDEC.S @@ -0,0 +1,20 @@ +; FDEC.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_DEC_L04 + rseg RCODE +rcode_base: + public ?F_DEC_L04 +?F_DEC_L04 equ rcode_base+00000000h + extern ?F_ADD_L04 + defb 0C5h,0E5h,001h,080h,0BFh,021h,000h + defb 000h,0CDh + defw LWRD ?F_ADD_L04 + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FDECASG.S b/src/nos/iar/FDECASG.S new file mode 100644 index 00000000..ebbfa1d4 --- /dev/null +++ b/src/nos/iar/FDECASG.S @@ -0,0 +1,21 @@ +; FDECASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_DECASG_L04 + rseg RCODE +rcode_base: + public ?F_DECASG_L04 +?F_DECASG_L04 equ rcode_base+00000000h + extern ?F_DEC_L04 + defb 05Eh,023h,056h,023h,04Eh,023h,046h + defb 0EBh,0CDh + defw LWRD ?F_DEC_L04 + defb 0EBh,070h,02Bh,071h,02Bh,072h,02Bh + defb 073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FDIV.S b/src/nos/iar/FDIV.S new file mode 100644 index 00000000..02849632 --- /dev/null +++ b/src/nos/iar/FDIV.S @@ -0,0 +1,59 @@ +; FDIV.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_DIV_L04 + rseg RCODE +rcode_base: + public ?F_DIV_L04 +?F_DIV_L04 equ rcode_base+00000000h + extern ?F_UNPACK_L04 + extern ?F_PACK_L04 + extern ?F_OVERFLOW_L04 + extern ?F_UNDERFLOW2_L04 + extern ?F_UNDERFLOW_L04 + extern ?F_UP_ROUND_L04 + defb 0EBh,0E3h,0DDh,0E5h,0DDh,021h,002h + defb 000h,0DDh,039h,0E5h,0F5h,0CDh + defw LWRD ?F_UNPACK_L04 + defb 01Fh,01Fh,0F5h,0AFh,0BDh,0CAh + defw LWRD ?F_UNDERFLOW_L04 + defb 0B4h,0CAh + defw LWRD ?F_OVERFLOW_L04 + defb 0D6h,07Fh,0D2h + defw rcode_base+28h ; t_push_rel (0000) 00000028 + defb 0EDh,044h,085h,0DAh + defw LWRD ?F_OVERFLOW_L04 + defb 018h,009h,067h,07Dh,094h,0DAh + defw LWRD ?F_UNDERFLOW_L04 + defb 0CAh + defw LWRD ?F_UNDERFLOW_L04 + defb 0F5h,06Ah,061h,048h,006h,000h,0DDh + defb 056h,004h,0DDh,05Eh,003h,0A7h,0EDh + defb 052h,079h,0DDh,09Eh,005h,030h,00Fh + defb 0DDh,035h,0F7h,0CAh + defw LWRD ?F_UNDERFLOW2_L04 + defb 0CBh,025h,0CBh,014h,017h,019h,0DDh + defb 08Eh,005h,04Fh,0DDh,036h,0F6h,017h + defb 0CBh,025h,0CBh,014h,0CBh,011h,0CBh + defb 010h,0EDh,052h,079h,0DDh,09Eh,005h + defb 04Fh,078h,0DEh,000h,047h,030h,008h + defb 019h,079h,0DDh,08Eh,005h,04Fh,006h + defb 000h,0DDh,0CBh,002h,016h,0DDh,0CBh + defb 003h,016h,0DDh,0CBh + defb 004h,016h,0DDh,035h,0F6h,020h,0D2h + defb 079h,0CBh,025h,0CBh,014h,017h,0CBh + defb 010h,020h,007h,0DDh,096h,005h,020h + defb 002h,0EDh,052h,0DDh,07Eh,004h,02Fh + defb 047h,0DDh,07Eh,003h,02Fh,04Fh,0DDh + defb 07Eh,002h,02Fh,057h,01Eh,000h,0E1h + defb 038h,007h,020h,002h,0CBh,042h,0C2h + defw LWRD ?F_UP_ROUND_L04 + defb 0C3h + defw LWRD ?F_PACK_L04 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FDIVASG.S b/src/nos/iar/FDIVASG.S new file mode 100644 index 00000000..a0824b66 --- /dev/null +++ b/src/nos/iar/FDIVASG.S @@ -0,0 +1,22 @@ +; FDIVASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_DIVASG_L04 + rseg RCODE +rcode_base: + public ?F_DIVASG_L04 +?F_DIVASG_L04 equ rcode_base+00000000h + extern ?F_END_ASG2_L04 + extern ?F_DIV_L04 + defb 0C5h,0D5h,05Eh,023h,056h,023h,04Eh + defb 023h,046h,0EBh,0CDh + defw LWRD ?F_DIV_L04 + defb 0C3h + defw LWRD ?F_END_ASG2_L04 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FENDASG2.S b/src/nos/iar/FENDASG2.S new file mode 100644 index 00000000..9118ac48 --- /dev/null +++ b/src/nos/iar/FENDASG2.S @@ -0,0 +1,17 @@ +; FENDASG2.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_END_ASG2_L04 + rseg RCODE +rcode_base: + public ?F_END_ASG2_L04 +?F_END_ASG2_L04 equ rcode_base+00000000h + defb 0EBh,070h,02Bh,071h,02Bh,072h,02Bh + defb 073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FINC.S b/src/nos/iar/FINC.S new file mode 100644 index 00000000..2f920f00 --- /dev/null +++ b/src/nos/iar/FINC.S @@ -0,0 +1,20 @@ +; FINC.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_INC_L04 + rseg RCODE +rcode_base: + public ?F_INC_L04 +?F_INC_L04 equ rcode_base+00000000h + extern ?F_ADD_L04 + defb 0C5h,0E5h,001h,080h,03Fh,021h,000h + defb 000h,0CDh + defw LWRD ?F_ADD_L04 + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FINCASG.S b/src/nos/iar/FINCASG.S new file mode 100644 index 00000000..773a10f8 --- /dev/null +++ b/src/nos/iar/FINCASG.S @@ -0,0 +1,21 @@ +; FINCASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_INCASG_L04 + rseg RCODE +rcode_base: + public ?F_INCASG_L04 +?F_INCASG_L04 equ rcode_base+00000000h + extern ?F_INC_L04 + defb 05Eh,023h,056h,023h,04Eh,023h,046h + defb 0EBh,0CDh + defw LWRD ?F_INC_L04 + defb 0EBh,070h,02Bh,071h,02Bh,072h,02Bh + defb 073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FMUL.S b/src/nos/iar/FMUL.S new file mode 100644 index 00000000..c7600f1d --- /dev/null +++ b/src/nos/iar/FMUL.S @@ -0,0 +1,64 @@ +; FMUL.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_MUL_L04 + rseg RCODE +rcode_base: + public ?F_MUL_L04 +?F_MUL_L04 equ rcode_base+00000000h + extern ?F_UNPACK_L04 + extern ?F_OVERFLOW_L04 + extern ?F_UNDERFLOW_L04 + extern ?F_ROUND_L04 + defb 0EBh,0E3h,0DDh,0E5h,0DDh,021h,002h + defb 000h,0DDh,039h,0E5h,0F5h,0CDh + defw LWRD ?F_UNPACK_L04 + defb 0CBh,03Fh,0CBh,03Fh,0F5h,0AFh,0BDh + defb 0CAh + defw LWRD ?F_UNDERFLOW_L04 + defb 0B4h,0CAh + defw LWRD ?F_UNDERFLOW_L04 + defb 0D6h,07Fh,038h,006h,085h,0DAh + defw LWRD ?F_OVERFLOW_L04 + defb 018h,004h,085h,0D2h + defw LWRD ?F_UNDERFLOW_L04 + defb 067h,03Eh,080h,0A8h,0B1h,0B2h,020h + defb 00Bh,0DDh,046h,005h,0DDh,04Eh,004h + defb 0DDh,056h,003h,018h,029h,03Eh,080h + defb 0DDh,0AEh,005h,0DDh,0B6h,004h,0DDh + defb 0B6h,003h,028h,01Ch,07Ch,0C5h,0D5h + defb 0CDh + defw rcode_base+6ah ; t_push_rel (0000) 0000006A + defb 0F1h,0F1h,0CBh,03Dh,030h,010h,024h + defb 0CAh + defw LWRD ?F_OVERFLOW_L04 + defb 0CBh,018h,0CBh,019h,0CBh,01Ah,0CBh + defb 01Bh,030h,002h,0CBh,0C3h,0C3h + defw LWRD ?F_ROUND_L04 + defb 0F5h,060h,0DDh,056h,005h,06Ah,0EDh + defb 06Ch,0E5h,060h,0DDh,06Eh,004h,0EDh + defb 06Ch,059h,0EDh,05Ch,0AFh,019h,0CEh + defb 000h,0F5h,0E5h,060h,0DDh,06Eh,003h + defb 0EDh,06Ch,059h,0DDh,056h,004h,0EDh + defb 05Ch,0AFh,019h,0CEh,000h,0DDh,046h + defb 0F5h,050h,0DDh,05Eh,005h,0EDh,05Ch + defb 019h,0CEh,000h,0F5h + defb 0E5h,069h,0DDh,066h,003h,0EDh,06Ch + defb 050h,0DDh,05Eh,004h,0EDh,05Ch,0AFh + defb 019h,0CEh,000h,0DDh,04Eh,003h,0EDh + defb 04Ch,0DDh,071h,002h,048h,006h,000h + defb 009h,0DDh,075h,0F4h,04Ch,0CEh,000h + defb 047h,0E1h,009h,04Dh,0D1h,07Ah,0CEh + defb 000h,057h,05Ch,0E1h,019h,045h,0D1h + defb 07Ah,0CEh,000h,057h + defb 05Ch,0E1h,019h,0E5h,0C5h,0D1h,0C1h + defb 0E1h,0CBh,013h,0CBh,012h,0CBh,011h + defb 0CBh,010h,0CBh,015h,0DDh,07Eh,0F4h + defb 0DDh,0B6h,002h,0C8h,0CBh,0C3h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FMULASG.S b/src/nos/iar/FMULASG.S new file mode 100644 index 00000000..e3db9e51 --- /dev/null +++ b/src/nos/iar/FMULASG.S @@ -0,0 +1,22 @@ +; FMULASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_MULASG_L04 + rseg RCODE +rcode_base: + public ?F_MULASG_L04 +?F_MULASG_L04 equ rcode_base+00000000h + extern ?F_END_ASG2_L04 + extern ?F_MUL_L04 + defb 0C5h,0D5h,05Eh,023h,056h,023h,04Eh + defb 023h,046h,0EBh,0CDh + defw LWRD ?F_MUL_L04 + defb 0C3h + defw LWRD ?F_END_ASG2_L04 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FNEGASG.S b/src/nos/iar/FNEGASG.S new file mode 100644 index 00000000..72e368c9 --- /dev/null +++ b/src/nos/iar/FNEGASG.S @@ -0,0 +1,19 @@ +; FNEGASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_NEGASG_L04 + rseg RCODE +rcode_base: + public ?F_NEGASG_L04 +?F_NEGASG_L04 equ rcode_base+00000000h + defb 0F5h,05Eh,023h,056h,023h,04Eh,023h + defb 046h,079h,0B0h,028h,005h,078h,0EEh + defb 080h,047h,070h,02Bh,02Bh,02Bh,0F1h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FPACK.S b/src/nos/iar/FPACK.S new file mode 100644 index 00000000..76fd0850 --- /dev/null +++ b/src/nos/iar/FPACK.S @@ -0,0 +1,32 @@ +; FPACK.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_PACK_L04 + rseg RCODE +rcode_base: + public ?F_PACK_L04 +?F_PACK_L04 equ rcode_base+00000015h + public ?F_OVERFLOW_L04 +?F_OVERFLOW_L04 equ rcode_base+00000000h + public ?F_UNDERFLOW2_L04 +?F_UNDERFLOW2_L04 equ rcode_base+0000000Dh + public ?F_UNDERFLOW_L04 +?F_UNDERFLOW_L04 equ rcode_base+0000000Eh + public ?F_NO_PACK_L04 +?F_NO_PACK_L04 equ rcode_base+0000002Bh + defb 006h,0FFh,048h,050h,058h,0DDh,0CBh + defb 0F9h,01Eh,0CBh,018h,018h,01Dh,0C1h + defb 006h,000h,048h,050h,058h,018h,015h + defb 07Ch,0B7h,028h,0F5h,03Ch,028h,0E4h + defb 05Ah,051h,048h,044h,0DDh,0CBh,0F9h + defb 01Eh,0CBh,018h,038h,002h,0CBh,0B9h + defb 0F1h,0F1h,0E1h,0DDh,075h,004h,0DDh + defb 074h,005h,0DDh,0E1h + defb 0E1h,0EBh,033h,033h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FROUND.S b/src/nos/iar/FROUND.S new file mode 100644 index 00000000..521bf286 --- /dev/null +++ b/src/nos/iar/FROUND.S @@ -0,0 +1,30 @@ +; FROUND.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_ROUND_L04 + rseg RCODE +rcode_base: + public ?F_ROUND_L04 +?F_ROUND_L04 equ rcode_base+00000000h + public ?F_UP_ROUND_L04 +?F_UP_ROUND_L04 equ rcode_base+00000010h + extern ?F_PACK_L04 + extern ?F_OVERFLOW_L04 + extern ?F_UNDERFLOW_L04 + defb 07Ch,0B7h,0CAh + defw LWRD ?F_UNDERFLOW_L04 + defb 07Bh,017h,030h,01Bh,0B7h,020h,004h + defb 0CBh,042h,028h,014h,07Ah,0C6h,001h + defb 057h,079h,0CEh,000h,04Fh,078h,0CEh + defb 000h,047h,030h,006h,0CBh,018h,024h + defb 0CAh + defw LWRD ?F_OVERFLOW_L04 + defb 0C3h + defw LWRD ?F_PACK_L04 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FSUBASG.S b/src/nos/iar/FSUBASG.S new file mode 100644 index 00000000..c150d159 --- /dev/null +++ b/src/nos/iar/FSUBASG.S @@ -0,0 +1,22 @@ +; FSUBASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_SUBASG_L04 + rseg RCODE +rcode_base: + public ?F_SUBASG_L04 +?F_SUBASG_L04 equ rcode_base+00000000h + extern ?F_END_ASG2_L04 + extern ?F_SUB_L04 + defb 0C5h,0D5h,05Eh,023h,056h,023h,04Eh + defb 023h,046h,0EBh,0CDh + defw LWRD ?F_SUB_L04 + defb 0C3h + defw LWRD ?F_END_ASG2_L04 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FTOL.S b/src/nos/iar/FTOL.S new file mode 100644 index 00000000..688af051 --- /dev/null +++ b/src/nos/iar/FTOL.S @@ -0,0 +1,34 @@ +; FTOL.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_TO_L_L04 + rseg RCODE +rcode_base: + public ?F_TO_L_L04 +?F_TO_L_L04 equ rcode_base+00000000h + extern ?L_NOT_L03 + extern ?L_INC_L03 + defb 0F5h,0D5h,0CBh,020h,0CBh,013h,0CBh + defb 079h,028h,002h,0CBh,0C0h,0CBh,0F9h + defb 078h,0D6h,07Fh,030h,007h,001h,000h + defb 000h,060h,069h,018h,041h,0FEh,020h + defb 038h,00Dh,001h,000h,080h,061h,069h + defb 0CBh,043h,020h,034h,00Bh,02Bh,018h + defb 030h,047h,03Eh,01Fh,090h,051h,04Ch + defb 065h,02Eh,000h,028h + defb 01Ah,0D6h,008h,038h,007h,06Ch,061h + defb 04Ah,016h,000h,018h,0F5h,0C6h,008h + defb 028h,00Bh,047h,0CBh,03Ah,0CBh,019h + defb 0CBh,01Ch,0CBh,01Dh,010h,0F6h,042h + defb 0CBh,043h,028h,006h,0CDh + defw LWRD ?L_NOT_L03 + defb 0CDh + defw LWRD ?L_INC_L03 + defb 0D1h,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/FUNPACK.S b/src/nos/iar/FUNPACK.S new file mode 100644 index 00000000..7c3f4cf7 --- /dev/null +++ b/src/nos/iar/FUNPACK.S @@ -0,0 +1,25 @@ +; FUNPACK.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?F_UNPACK_L04 + rseg RCODE +rcode_base: + public ?F_UNPACK_L04 +?F_UNPACK_L04 equ rcode_base+00000000h + defb 0AFh,067h,0CBh,021h,0CBh,010h,017h + defb 037h,0CBh,019h,068h,041h,04Ah,053h + defb 01Eh,000h,0C5h,0D5h,0DDh,05Eh,002h + defb 0DDh,056h,003h,0DDh,04Eh,004h,0DDh + defb 046h,005h,0CBh,021h,0CBh,010h,0CBh + defb 014h,037h,0CBh,019h,0DDh,071h,005h + defb 0DDh,072h,004h,0DDh,073h,003h,0DDh + defb 036h,002h,000h,04Fh + defb 0ACh,0CBh,019h,017h,0CBh,01Ch,017h + defb 060h,0D1h,0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/L b/src/nos/iar/L new file mode 100644 index 00000000..b0fbba4d --- /dev/null +++ b/src/nos/iar/L @@ -0,0 +1,195 @@ +BANKCALLDIRECT.S +BANKCALLDIRECTEXAF.S +BANKLEAVE32.S +BANKLEAVEDIRECT.S +BFCANDASG.S +BFCLSHASG.S +BFCMULASG.S +BFCORASG.S +BFCRETVAL.S +BFCSHIFTUP.S +BFCXORASG.S +BFMASKEDLD.S +BFMASKEDST.S +BFSADDASG.S +BFSANDASG.S +BFSCDIVASG.S +BFSCEXT.S +BFSCLDSHIFTDOWN.S +BFSCMODASG.S +BFSCRSHASG.S +BFSLSHASG.S +BFSMULASG.S +BFSNEGASG.S +BFSORASG.S +BFSPOSTDEC.S +BFSPOSTINC.S +BFSPREDEC.S +BFSPREINC.S +BFSRETVAL.S +BFSSDIVASG.S +BFSSEXT.S +BFSSHIFTUP.S +BFSSLDSHIFTDOWN.S +BFSSMODASG.S +BFSSRSHASG.S +BFSSUBASG.S +BFSXORASG.S +BFUCDIVASG.S +BFUCLDSHIFTDOWN.S +BFUCMODASG.S +BFUCRSHASG.S +BFUSDIVASG.S +BFUSLDSHIFTDOWN.S +BFUSMODASG.S +BFUSRSHASG.S +CALLIND.S +CDIVMOD.S +CFINDSIGN.S +CLSH.S +CLSHASG.S +CMUL.S +CMULASG.S +CSSWITCH.S +CVSWITCH.S +ENTAUTODIRECT.S +ENTPARMDIRECT.S +FADDASG.S +FADDSUB.S +FCMP.S +FDEC.S +FDECASG.S +FDIV.S +FDIVASG.S +FENDASG2.S +FINC.S +FINCASG.S +FMUL.S +FMULASG.S +FNEGASG.S +FPACK.S +FROUND.S +FSUBASG.S +FTOL.S +FUNPACK.S +LADDASG.S +LAND.S +LANDASG.S +LDEC.S +LDECASG.S +LDIVMOD.S +LEAVE32.S +LEAVEDIRECT.S +LENDASG.S +LENDMULDIVASG.S +LFINDSIGN.S +LIBVERSION.S +LINC.S +LINCASG.S +LLSH.S +LLSHASG.S +LMUL.S +LMULASG.S +LNEG.S +LNEGASG.S +LNOT.S +LNOTASG.S +LOR.S +LORASG.S +LSSWITCH.S +LSUBASG.S +LTOF.S +LVSWITCH.S +LXOR.S +LXORASG.S +MEMCMP.S +MEMSET.S +MONITORBANKLEAVE.S +MONITORBANKLEAVE32.S +MONITORBANKLEAVEIX.S +MONITORBANKLEAVEPOP.S +MONITORLEAVE.S +MONITORLEAVE32.S +MONITORLEAVEIX.S +MONITORLEAVEIXPA.S +MONITORLEAVEPA.S +MONITORLEAVEPOP.S +SCDIV.S +SCMOD.S +SCRSH.S +SCRSHASG.S +SDIVMOD.S +SFINDSIGN.S +SLCMP.S +SLDIV.S +SLDIVASG.S +SLMOD.S +SLMODASG.S +SLRSH.S +SLRSHASG.S +SLSH.S +SLSHASG.S +SLSHASGBCprim.S +SLSHASGDEprim.S +SMUL.S +SMULASG.S +SMULASGBCprim.S +SMULASGDEprim.S +SMULASGIX.S +SMULASGIY.S +SSCMP.S +SSDIV.S +SSDIVASG.S +SSDIVASGBCprim.S +SSDIVASGDEprim.S +SSDIVASGIX.S +SSDIVASGIY.S +SSMOD.S +SSMODASG.S +SSMODASGBCprim.S +SSMODASGDEprim.S +SSMODASGIX.S +SSMODASGIY.S +SSRSH.S +SSRSHASG.S +SSRSHASGBCprim.S +SSRSHASGDEprim.S +SSRSHASGIX.S +SSRSHASGIY.S +SSSWITCH.S +SSWITCHEND.S +STRCAT.S +STRCHR.S +STRCMP.S +STRCPY.S +STRLEN.S +SVSWITCH.S +UCDIV.S +UCMOD.S +UCRSH.S +UCRSHASG.S +ULDIV.S +ULDIVASG.S +ULMOD.S +ULMODASG.S +ULRSH.S +ULRSHASG.S +USDIV.S +USDIVASG.S +USDIVASGBCprim.S +USDIVASGDEprim.S +USDIVASGIX.S +USDIVASGIY.S +USMOD.S +USMODASG.S +USMODASGBCprim.S +USMODASGDEprim.S +USMODASGIX.S +USMODASGIY.S +USRSH.S +USRSHASG.S +USRSHASGBCprim.S +USRSHASGDEprim.S +USRSHASGIX.S +USRSHASGIY.S +VSWITCHEND.S diff --git a/src/nos/iar/LADDASG.S b/src/nos/iar/LADDASG.S new file mode 100644 index 00000000..c990d5a1 --- /dev/null +++ b/src/nos/iar/LADDASG.S @@ -0,0 +1,19 @@ +; LADDASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_ADDASG_L03 + rseg RCODE +rcode_base: + public ?L_ADDASG_L03 +?L_ADDASG_L03 equ rcode_base+00000000h + defb 0F5h,07Eh,083h,077h,05Fh,023h,07Eh + defb 08Ah,077h,057h,023h,07Eh,089h,077h + defb 04Fh,023h,07Eh,088h,077h,047h,02Bh + defb 02Bh,02Bh,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LAND.S b/src/nos/iar/LAND.S new file mode 100644 index 00000000..74b422bf --- /dev/null +++ b/src/nos/iar/LAND.S @@ -0,0 +1,20 @@ +; LAND.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_AND_L03 + rseg RCODE +rcode_base: + public ?L_AND_L03 +?L_AND_L03 equ rcode_base+00000000h + defb 0EBh,0E3h,0F5h,0E5h,021h,006h,000h + defb 039h,07Eh,0A3h,077h,023h,07Eh,0A2h + defb 077h,0D1h,023h,07Eh,073h,0A1h,04Fh + defb 023h,07Eh,072h,0A0h,047h,0F1h,0D1h + defb 0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LANDASG.S b/src/nos/iar/LANDASG.S new file mode 100644 index 00000000..dde8774e --- /dev/null +++ b/src/nos/iar/LANDASG.S @@ -0,0 +1,19 @@ +; LANDASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_ANDASG_L03 + rseg RCODE +rcode_base: + public ?L_ANDASG_L03 +?L_ANDASG_L03 equ rcode_base+00000000h + defb 0F5h,07Eh,0A3h,077h,05Fh,023h,07Eh + defb 0A2h,077h,057h,023h,07Eh,0A1h,077h + defb 04Fh,023h,07Eh,0A0h,077h,047h,02Bh + defb 02Bh,02Bh,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LDEC.S b/src/nos/iar/LDEC.S new file mode 100644 index 00000000..b32f28dd --- /dev/null +++ b/src/nos/iar/LDEC.S @@ -0,0 +1,17 @@ +; LDEC.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_DEC_L03 + rseg RCODE +rcode_base: + public ?L_DEC_L03 +?L_DEC_L03 equ rcode_base+00000000h + defb 0F5h,07Dh,0B4h,02Bh,020h,001h,00Bh + defb 0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LDECASG.S b/src/nos/iar/LDECASG.S new file mode 100644 index 00000000..6355a318 --- /dev/null +++ b/src/nos/iar/LDECASG.S @@ -0,0 +1,22 @@ +; LDECASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_DECASG_L03 + rseg RCODE +rcode_base: + public ?L_DECASG_L03 +?L_DECASG_L03 equ rcode_base+00000000h + extern ?L_DEC_L03 + extern ?L_END_ASG_L03 + defb 05Eh,023h,056h,023h,04Eh,023h,046h + defb 0EBh,0CDh + defw LWRD ?L_DEC_L03 + defb 0C3h + defw LWRD ?L_END_ASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LDIVMOD.S b/src/nos/iar/LDIVMOD.S new file mode 100644 index 00000000..21ba6ea1 --- /dev/null +++ b/src/nos/iar/LDIVMOD.S @@ -0,0 +1,28 @@ +; LDIVMOD.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_DIVMOD_L03 + rseg RCODE +rcode_base: + public ?L_DIVMOD_L03 +?L_DIVMOD_L03 equ rcode_base+00000000h + defb 0F5h,021h,000h,000h,001h,000h,000h + defb 0DDh,036h,0F8h,021h,018h,002h,019h + defb 037h,0DDh,0CBh,0FCh,016h,0DDh,0CBh + defb 0FDh,016h,0DDh,0CBh,0FEh,016h,0DDh + defb 0CBh,0FFh,016h,0DDh,035h,0F8h,028h + defb 02Eh,0CBh,011h,0CBh,010h,0CBh,015h + defb 0CBh,014h,0EDh,052h,038h,0DDh,020h + defb 010h,078h,0DDh,096h + defb 007h,038h,0D5h,020h,008h,079h,0DDh + defb 096h,006h,038h,0CDh,018h,004h,079h + defb 0DDh,096h,006h,04Fh,078h,0DDh,09Eh + defb 007h,047h,030h,0C1h,02Bh,0A7h,018h + defb 0BDh,0F1h,0E5h,060h,069h,0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LEAVE32.S b/src/nos/iar/LEAVE32.S new file mode 100644 index 00000000..1eabf459 --- /dev/null +++ b/src/nos/iar/LEAVE32.S @@ -0,0 +1,17 @@ +; LEAVE32.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?LEAVE_32_L09 + rseg RCODE +rcode_base: + public ?LEAVE_32_L09 +?LEAVE_32_L09 equ rcode_base+00000000h + defb 0DDh,0F9h,0DDh,0E1h,0D1h,033h,033h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LEAVEDIRECT.S b/src/nos/iar/LEAVEDIRECT.S new file mode 100644 index 00000000..9e2cbb5a --- /dev/null +++ b/src/nos/iar/LEAVEDIRECT.S @@ -0,0 +1,16 @@ +; LEAVEDIRECT.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?LEAVE_DIRECT_L09 + rseg RCODE +rcode_base: + public ?LEAVE_DIRECT_L09 +?LEAVE_DIRECT_L09 equ rcode_base+00000000h + defb 0DDh,0F9h,0DDh,0E1h,0D1h,0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LENDASG.S b/src/nos/iar/LENDASG.S new file mode 100644 index 00000000..3f7f7e84 --- /dev/null +++ b/src/nos/iar/LENDASG.S @@ -0,0 +1,17 @@ +; LENDASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_END_ASG_L03 + rseg RCODE +rcode_base: + public ?L_END_ASG_L03 +?L_END_ASG_L03 equ rcode_base+00000000h + defb 0EBh,070h,02Bh,071h,02Bh,072h,02Bh + defb 073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LENDMULDIVASG.S b/src/nos/iar/LENDMULDIVASG.S new file mode 100644 index 00000000..556feafc --- /dev/null +++ b/src/nos/iar/LENDMULDIVASG.S @@ -0,0 +1,17 @@ +; LENDMULDIVASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_END_MULDIVASG_L03 + rseg RCODE +rcode_base: + public ?L_END_MULDIVASG_L03 +?L_END_MULDIVASG_L03 equ rcode_base+00000000h + defb 0EBh,070h,02Bh,071h,02Bh,072h,02Bh + defb 073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LFINDSIGN.S b/src/nos/iar/LFINDSIGN.S new file mode 100644 index 00000000..5e796207 --- /dev/null +++ b/src/nos/iar/LFINDSIGN.S @@ -0,0 +1,33 @@ +; LFINDSIGN.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_FIND_SIGN_L03 + rseg RCODE +rcode_base: + public ?L_FIND_SIGN_L03 +?L_FIND_SIGN_L03 equ rcode_base+00000000h + extern ?L_NOT_L03 + extern ?L_INC_L03 + defb 0CBh,07Ah,028h,018h,042h,04Bh,0DDh + defb 066h,007h,0DDh,06Eh,006h,0CDh + defw LWRD ?L_NOT_L03 + defb 0CDh + defw LWRD ?L_INC_L03 + defb 050h,059h,0DDh,074h,007h,0DDh,075h + defb 006h,03Eh,001h,0DDh,0CBh,0FFh,07Eh + defb 0C8h,0F5h,0DDh,046h,0FFh,0DDh,04Eh + defb 0FEh,0DDh,066h,0FDh,0DDh,06Eh,0FCh + defb 0CDh + defw LWRD ?L_NOT_L03 + defb 0CDh + defw LWRD ?L_INC_L03 + defb 0DDh,070h,0FFh,0DDh,071h,0FEh,0DDh + defb 074h,0FDh,0DDh,075h,0FCh,0F1h,0EEh + defb 001h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LIBVERSION.S b/src/nos/iar/LIBVERSION.S new file mode 100644 index 00000000..ec22fe86 --- /dev/null +++ b/src/nos/iar/LIBVERSION.S @@ -0,0 +1,15 @@ +; LIBVERSION.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?LIB_VERSION_L00 + public ?CL64180B_4_06_L00 +?CL64180B_4_06_L00 equ 00000000h + public ?CL64180L_4_06_L00 ; Nick +?CL64180L_4_06_L00 equ 00000000h ; Nick + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LINC.S b/src/nos/iar/LINC.S new file mode 100644 index 00000000..0fb5806e --- /dev/null +++ b/src/nos/iar/LINC.S @@ -0,0 +1,17 @@ +; LINC.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_INC_L03 + rseg RCODE +rcode_base: + public ?L_INC_L03 +?L_INC_L03 equ rcode_base+00000000h + defb 02Ch,0C0h,024h,0C0h,00Ch,0C0h,004h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LINCASG.S b/src/nos/iar/LINCASG.S new file mode 100644 index 00000000..3e6dfd05 --- /dev/null +++ b/src/nos/iar/LINCASG.S @@ -0,0 +1,22 @@ +; LINCASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_INCASG_L03 + rseg RCODE +rcode_base: + public ?L_INCASG_L03 +?L_INCASG_L03 equ rcode_base+00000000h + extern ?L_INC_L03 + extern ?L_END_ASG_L03 + defb 05Eh,023h,056h,023h,04Eh,023h,046h + defb 0EBh,0CDh + defw LWRD ?L_INC_L03 + defb 0C3h + defw LWRD ?L_END_ASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LLSH.S b/src/nos/iar/LLSH.S new file mode 100644 index 00000000..b840b35d --- /dev/null +++ b/src/nos/iar/LLSH.S @@ -0,0 +1,19 @@ +; LLSH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_LSH_L03 + rseg RCODE +rcode_base: + public ?L_LSH_L03 +?L_LSH_L03 equ rcode_base+00000000h + defb 0B7h,0C8h,0FEh,008h,038h,009h,041h + defb 04Ch,065h,02Eh,000h,0D6h,008h,018h + defb 0F2h,029h,0CBh,011h,0CBh,010h,03Dh + defb 020h,0F8h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LLSHASG.S b/src/nos/iar/LLSHASG.S new file mode 100644 index 00000000..109a3672 --- /dev/null +++ b/src/nos/iar/LLSHASG.S @@ -0,0 +1,22 @@ +; LLSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_LSHASG_L03 + rseg RCODE +rcode_base: + public ?L_LSHASG_L03 +?L_LSHASG_L03 equ rcode_base+00000000h + extern ?L_LSH_L03 + extern ?L_END_ASG_L03 + defb 05Eh,023h,056h,023h,04Eh,023h,046h + defb 0EBh,0CDh + defw LWRD ?L_LSH_L03 + defb 0C3h + defw LWRD ?L_END_ASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LMUL.S b/src/nos/iar/LMUL.S new file mode 100644 index 00000000..529b1c77 --- /dev/null +++ b/src/nos/iar/LMUL.S @@ -0,0 +1,35 @@ +; LMUL.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_MUL_L03 + rseg RCODE +rcode_base: + public ?L_MUL_L03 +?L_MUL_L03 equ rcode_base+00000000h + defb 0E3h,0D5h,0DDh,0E5h,0DDh,021h,000h + defb 000h,0DDh,039h,0DDh,056h,009h,0DDh + defb 074h,009h,0DDh,05Eh,008h,0DDh,075h + defb 008h,0D5h,0C5h,0F5h,0DDh,06Eh,004h + defb 062h,0EDh,06Ch,0DDh,056h,005h,0EDh + defb 05Ch,019h,059h,0DDh,056h,007h,0EDh + defb 05Ch,019h,0DDh,05Eh,006h,050h,0EDh + defb 05Ch,019h,0E5h,0DDh + defb 05Eh,004h,0DDh,056h,0FEh,0EDh,05Ch + defb 0DDh,06Eh,005h,0DDh,066h,007h,0EDh + defb 06Ch,019h,0DDh,046h,006h,0EDh,04Ch + defb 009h,0E5h,0DDh,05Eh,004h,0DDh,056h + defb 007h,0EDh,05Ch,0DDh,06Eh,005h,0DDh + defb 066h,006h,0EDh,06Ch,0AFh,019h,017h + defb 0F5h,0DDh,05Eh,004h,0DDh,056h,006h + defb 0EDh,05Ch,04Ah,006h + defb 000h,0AFh,009h,017h,055h,0C1h,04Ch + defb 0E1h,009h,084h,0C1h,081h,04Dh,047h + defb 0EBh,0F1h,0D1h,0D1h,0DDh,0E1h,0D1h + defb 033h,033h,033h,033h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LMULASG.S b/src/nos/iar/LMULASG.S new file mode 100644 index 00000000..7de5b686 --- /dev/null +++ b/src/nos/iar/LMULASG.S @@ -0,0 +1,22 @@ +; LMULASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_MULASG_L03 + rseg RCODE +rcode_base: + public ?L_MULASG_L03 +?L_MULASG_L03 equ rcode_base+00000000h + extern ?L_MUL_L03 + extern ?L_END_MULDIVASG_L03 + defb 0C5h,0D5h,05Eh,023h,056h,023h,04Eh + defb 023h,046h,0EBh,0CDh + defw LWRD ?L_MUL_L03 + defb 0C3h + defw LWRD ?L_END_MULDIVASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LNEG.S b/src/nos/iar/LNEG.S new file mode 100644 index 00000000..7067e401 --- /dev/null +++ b/src/nos/iar/LNEG.S @@ -0,0 +1,18 @@ +; LNEG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_NEG_L03 + rseg RCODE +rcode_base: + public ?L_NEG_L03 +?L_NEG_L03 equ rcode_base+00000000h + defb 0F5h,0AFh,095h,06Fh,03Eh,000h,09Ch + defb 067h,03Eh,000h,099h,04Fh,03Eh,000h + defb 098h,047h,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LNEGASG.S b/src/nos/iar/LNEGASG.S new file mode 100644 index 00000000..951ffb75 --- /dev/null +++ b/src/nos/iar/LNEGASG.S @@ -0,0 +1,22 @@ +; LNEGASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_NEGASG_L03 + rseg RCODE +rcode_base: + public ?L_NEGASG_L03 +?L_NEGASG_L03 equ rcode_base+00000000h + extern ?L_NEG_L03 + extern ?L_END_ASG_L03 + defb 05Eh,023h,056h,023h,04Eh,023h,046h + defb 0EBh,0CDh + defw LWRD ?L_NEG_L03 + defb 0C3h + defw LWRD ?L_END_ASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LNOT.S b/src/nos/iar/LNOT.S new file mode 100644 index 00000000..f779a98c --- /dev/null +++ b/src/nos/iar/LNOT.S @@ -0,0 +1,18 @@ +; LNOT.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_NOT_L03 + rseg RCODE +rcode_base: + public ?L_NOT_L03 +?L_NOT_L03 equ rcode_base+00000000h + defb 0F5h,07Dh,02Fh,06Fh,07Ch,02Fh,067h + defb 079h,02Fh,04Fh,078h,02Fh,047h,0F1h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LNOTASG.S b/src/nos/iar/LNOTASG.S new file mode 100644 index 00000000..1ee3c69d --- /dev/null +++ b/src/nos/iar/LNOTASG.S @@ -0,0 +1,22 @@ +; LNOTASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_NOTASG_L03 + rseg RCODE +rcode_base: + public ?L_NOTASG_L03 +?L_NOTASG_L03 equ rcode_base+00000000h + extern ?L_NOT_L03 + extern ?L_END_ASG_L03 + defb 05Eh,023h,056h,023h,04Eh,023h,046h + defb 0EBh,0CDh + defw LWRD ?L_NOT_L03 + defb 0C3h + defw LWRD ?L_END_ASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LOR.S b/src/nos/iar/LOR.S new file mode 100644 index 00000000..377f5fa7 --- /dev/null +++ b/src/nos/iar/LOR.S @@ -0,0 +1,20 @@ +; LOR.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_OR_L03 + rseg RCODE +rcode_base: + public ?L_OR_L03 +?L_OR_L03 equ rcode_base+00000000h + defb 0EBh,0E3h,0F5h,0E5h,021h,006h,000h + defb 039h,07Eh,0B3h,077h,023h,07Eh,0B2h + defb 077h,0D1h,023h,07Eh,073h,0B1h,04Fh + defb 023h,07Eh,072h,0B0h,047h,0F1h,0D1h + defb 0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LORASG.S b/src/nos/iar/LORASG.S new file mode 100644 index 00000000..ffd40d78 --- /dev/null +++ b/src/nos/iar/LORASG.S @@ -0,0 +1,19 @@ +; LORASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_ORASG_L03 + rseg RCODE +rcode_base: + public ?L_ORASG_L03 +?L_ORASG_L03 equ rcode_base+00000000h + defb 0F5h,07Eh,0B3h,077h,05Fh,023h,07Eh + defb 0B2h,077h,057h,023h,07Eh,0B1h,077h + defb 04Fh,023h,07Eh,0B0h,077h,047h,02Bh + defb 02Bh,02Bh,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LSSWITCH.S b/src/nos/iar/LSSWITCH.S new file mode 100644 index 00000000..ef339157 --- /dev/null +++ b/src/nos/iar/LSSWITCH.S @@ -0,0 +1,22 @@ +; LSSWITCH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_S_SWITCH_L06 + rseg RCODE +rcode_base: + public ?L_S_SWITCH_L06 +?L_S_SWITCH_L06 equ rcode_base+00000000h + extern ?S_SWITCH_END_L06 + defb 0E3h,0F5h,0D5h,0C5h,07Bh,096h,023h + defb 05Fh,07Ah,09Eh,023h,057h,079h,09Eh + defb 023h,04Fh,078h,09Eh,023h,047h,07Bh + defb 096h,023h,07Ah,09Eh,023h,079h,0DEh + defb 000h,078h,0DEh,000h,0C1h,0C3h + defw LWRD ?S_SWITCH_END_L06 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LSUBASG.S b/src/nos/iar/LSUBASG.S new file mode 100644 index 00000000..a3e4a104 --- /dev/null +++ b/src/nos/iar/LSUBASG.S @@ -0,0 +1,19 @@ +; LSUBASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_SUBASG_L03 + rseg RCODE +rcode_base: + public ?L_SUBASG_L03 +?L_SUBASG_L03 equ rcode_base+00000000h + defb 0F5h,07Eh,093h,077h,05Fh,023h,07Eh + defb 09Ah,077h,057h,023h,07Eh,099h,077h + defb 04Fh,023h,07Eh,098h,077h,047h,02Bh + defb 02Bh,02Bh,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LTOF.S b/src/nos/iar/LTOF.S new file mode 100644 index 00000000..5377924e --- /dev/null +++ b/src/nos/iar/LTOF.S @@ -0,0 +1,31 @@ +; LTOF.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_TO_F_L04 + rseg RCODE +rcode_base: + public ?SL_TO_F_L04 +?SL_TO_F_L04 equ rcode_base+00000000h + public ?UL_TO_F_L04 +?UL_TO_F_L04 equ rcode_base+00000016h + extern ?L_NOT_L03 + extern ?L_INC_L03 + defb 0F5h,0D5h,078h,0B1h,0B4h,0B5h,028h + defb 038h,0AFh,0CBh,078h,028h,007h,0CDh + defw LWRD ?L_NOT_L03 + defb 0CDh + defw LWRD ?L_INC_L03 + defb 03Ch,018h,009h,0F5h,0D5h,078h,0B1h + defb 0B4h,0B5h,028h,022h,0AFh,058h,006h + defb 01Fh,0CBh,07Bh,020h,00Ah,0CBh,025h + defb 0CBh,014h,0CBh,011h,0CBh,013h,010h + defb 0F2h,057h,078h,0C6h,07Fh,047h,06Ch + defb 061h,04Bh,0CBh,01Ah,0CBh,018h,038h + defb 002h,0CBh,0B9h,0D1h,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LVSWITCH.S b/src/nos/iar/LVSWITCH.S new file mode 100644 index 00000000..30ce6be4 --- /dev/null +++ b/src/nos/iar/LVSWITCH.S @@ -0,0 +1,26 @@ +; LVSWITCH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_V_SWITCH_L06 + rseg RCODE +rcode_base: + public ?L_V_SWITCH_L06 +?L_V_SWITCH_L06 equ rcode_base+00000000h + extern ?V_SWITCH_END_L06 + defb 0E3h,0F5h,0C5h,0DDh,0E5h,0DDh,021h + defb 000h,000h,0DDh,039h,04Eh,023h,046h + defb 018h,002h,023h,023h,023h,078h,0B1h + defb 028h,01Bh,00Bh,07Bh,096h,023h,020h + defb 0F3h,07Ah,096h,020h,0EFh,023h,0DDh + defb 07Eh,002h,096h,023h,020h,0E9h,0DDh + defb 07Eh,003h,096h,020h,0E3h,023h,023h + defb 023h,009h,009h,009h + defb 009h,0DDh,0E1h,0C3h + defw LWRD ?V_SWITCH_END_L06 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LXOR.S b/src/nos/iar/LXOR.S new file mode 100644 index 00000000..1779546a --- /dev/null +++ b/src/nos/iar/LXOR.S @@ -0,0 +1,20 @@ +; LXOR.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_XOR_L03 + rseg RCODE +rcode_base: + public ?L_XOR_L03 +?L_XOR_L03 equ rcode_base+00000000h + defb 0EBh,0E3h,0F5h,0E5h,021h,006h,000h + defb 039h,07Eh,0ABh,077h,023h,07Eh,0AAh + defb 077h,0D1h,023h,07Eh,073h,0A9h,04Fh + defb 023h,07Eh,072h,0A8h,047h,0F1h,0D1h + defb 0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/LXORASG.S b/src/nos/iar/LXORASG.S new file mode 100644 index 00000000..13ec8b7f --- /dev/null +++ b/src/nos/iar/LXORASG.S @@ -0,0 +1,19 @@ +; LXORASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?L_XORASG_L03 + rseg RCODE +rcode_base: + public ?L_XORASG_L03 +?L_XORASG_L03 equ rcode_base+00000000h + defb 0F5h,07Eh,0ABh,077h,05Fh,023h,07Eh + defb 0AAh,077h,057h,023h,07Eh,0A9h,077h + defb 04Fh,023h,07Eh,0A8h,077h,047h,02Bh + defb 02Bh,02Bh,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MEMCMP.S b/src/nos/iar/MEMCMP.S new file mode 100644 index 00000000..2ace680d --- /dev/null +++ b/src/nos/iar/MEMCMP.S @@ -0,0 +1,20 @@ +; MEMCMP.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MEMCMP_L11 + rseg RCODE +rcode_base: + public ?MEMCMP_L11 +?MEMCMP_L11 equ rcode_base+00000000h + defb 0F5h,0C5h,0D5h,079h,0B0h,028h,009h + defb 01Ah,0EDh,0A1h,020h,009h,013h,0EAh + defw rcode_base+7 ; t_push_rel (0000) 00000007 + defb 021h,000h,000h,018h,005h,02Bh,096h + defb 06Fh,09Fh,067h,0D1h,0C1h,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MEMSET.S b/src/nos/iar/MEMSET.S new file mode 100644 index 00000000..e9c1203f --- /dev/null +++ b/src/nos/iar/MEMSET.S @@ -0,0 +1,19 @@ +; MEMSET.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MEMSET_L11 + rseg RCODE +rcode_base: + public ?MEMSET_L11 +?MEMSET_L11 equ rcode_base+00000000h + defb 0F5h,0E5h,0D5h,078h,0B1h,028h,00Ch + defb 07Dh,012h,00Bh,078h,0B1h,028h,005h + defb 06Bh,062h,013h,0EDh,0B0h,0D1h,0E1h + defb 0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MONITORBANKLEAVE.S b/src/nos/iar/MONITORBANKLEAVE.S new file mode 100644 index 00000000..78bb9566 --- /dev/null +++ b/src/nos/iar/MONITORBANKLEAVE.S @@ -0,0 +1,20 @@ +; MONITORBANKLEAVE.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MONITOR_BANK_LEAVE_L09 + rseg RCODE +rcode_base: + public ?MONITOR_BANK_LEAVE_L09 +?MONITOR_BANK_LEAVE_L09 equ rcode_base+00000000h + extern ?BANK_FAST_LEAVE_L08 + defb 0F1h,0E2h + defw LWRD ?BANK_FAST_LEAVE_L08 + defb 0FBh,0C3h + defw LWRD ?BANK_FAST_LEAVE_L08 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MONITORBANKLEAVE32.S b/src/nos/iar/MONITORBANKLEAVE32.S new file mode 100644 index 00000000..aed8c51a --- /dev/null +++ b/src/nos/iar/MONITORBANKLEAVE32.S @@ -0,0 +1,21 @@ +; MONITORBANKLEAVE32.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MONITOR_BANK_LEAVE_32_L09 + rseg RCODE +rcode_base: + public ?MONITOR_BANK_LEAVE_32_L09 +?MONITOR_BANK_LEAVE_32_L09 equ rcode_base+00000000h + extern ?BANK_FAST_LEAVE_L08 + defb 0F1h,0DDh,0F9h,0DDh,0E1h,0D1h,033h + defb 033h,0E2h + defw LWRD ?BANK_FAST_LEAVE_L08 + defb 0FBh,0C3h + defw LWRD ?BANK_FAST_LEAVE_L08 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MONITORBANKLEAVEIX.S b/src/nos/iar/MONITORBANKLEAVEIX.S new file mode 100644 index 00000000..c076b9f9 --- /dev/null +++ b/src/nos/iar/MONITORBANKLEAVEIX.S @@ -0,0 +1,20 @@ +; MONITORBANKLEAVEIX.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MONITOR_BANK_LEAVE_IX_L09 + rseg RCODE +rcode_base: + public ?MONITOR_BANK_LEAVE_IX_L09 +?MONITOR_BANK_LEAVE_IX_L09 equ rcode_base+00000000h + extern ?BANK_FAST_LEAVE_L08 + defb 0F1h,0DDh,0F9h,0DDh,0E1h,0E2h + defw LWRD ?BANK_FAST_LEAVE_L08 + defb 0FBh,0C3h + defw LWRD ?BANK_FAST_LEAVE_L08 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MONITORBANKLEAVEPOP.S b/src/nos/iar/MONITORBANKLEAVEPOP.S new file mode 100644 index 00000000..dec508f1 --- /dev/null +++ b/src/nos/iar/MONITORBANKLEAVEPOP.S @@ -0,0 +1,21 @@ +; MONITORBANKLEAVEPOP.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MONITOR_BANK_LEAVE_POP_L09 + rseg RCODE +rcode_base: + public ?MONITOR_BANK_LEAVE_POP_L09 +?MONITOR_BANK_LEAVE_POP_L09 equ rcode_base+00000000h + extern ?BANK_FAST_LEAVE_L08 + defb 0F1h,0DDh,0F9h,0DDh,0E1h,0D1h,0C1h + defb 0E2h + defw LWRD ?BANK_FAST_LEAVE_L08 + defb 0FBh,0C3h + defw LWRD ?BANK_FAST_LEAVE_L08 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MONITORLEAVE.S b/src/nos/iar/MONITORLEAVE.S new file mode 100644 index 00000000..67050a4a --- /dev/null +++ b/src/nos/iar/MONITORLEAVE.S @@ -0,0 +1,16 @@ +; MONITORLEAVE.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MONITOR_LEAVE_L09 + rseg RCODE +rcode_base: + public ?MONITOR_LEAVE_L09 +?MONITOR_LEAVE_L09 equ rcode_base+00000000h + defb 0F1h,0E0h,0FBh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MONITORLEAVE32.S b/src/nos/iar/MONITORLEAVE32.S new file mode 100644 index 00000000..41d2c3fc --- /dev/null +++ b/src/nos/iar/MONITORLEAVE32.S @@ -0,0 +1,17 @@ +; MONITORLEAVE32.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MONITOR_LEAVE_32_L09 + rseg RCODE +rcode_base: + public ?MONITOR_LEAVE_32_L09 +?MONITOR_LEAVE_32_L09 equ rcode_base+00000000h + defb 0F1h,0DDh,0F9h,0DDh,0E1h,0D1h,033h + defb 033h,0E0h,0FBh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MONITORLEAVEIX.S b/src/nos/iar/MONITORLEAVEIX.S new file mode 100644 index 00000000..f09cc547 --- /dev/null +++ b/src/nos/iar/MONITORLEAVEIX.S @@ -0,0 +1,17 @@ +; MONITORLEAVEIX.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MONITOR_LEAVE_IX_L09 + rseg RCODE +rcode_base: + public ?MONITOR_LEAVE_IX_L09 +?MONITOR_LEAVE_IX_L09 equ rcode_base+00000000h + defb 0F1h,0DDh,0F9h,0DDh,0E1h,0E0h,0FBh + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MONITORLEAVEIXPA.S b/src/nos/iar/MONITORLEAVEIXPA.S new file mode 100644 index 00000000..5e08d880 --- /dev/null +++ b/src/nos/iar/MONITORLEAVEIXPA.S @@ -0,0 +1,17 @@ +; MONITORLEAVEIXPA.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MONITOR_LEAVE_IX_PA_L09 + rseg RCODE +rcode_base: + public ?MONITOR_LEAVE_IX_PA_L09 +?MONITOR_LEAVE_IX_PA_L09 equ rcode_base+00000000h + defb 067h,0F1h,07Ch,0DDh,0F9h,0DDh,0E1h + defb 0E0h,0FBh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MONITORLEAVEPA.S b/src/nos/iar/MONITORLEAVEPA.S new file mode 100644 index 00000000..cbb3af0d --- /dev/null +++ b/src/nos/iar/MONITORLEAVEPA.S @@ -0,0 +1,16 @@ +; MONITORLEAVEPA.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MONITOR_LEAVE_PA_L09 + rseg RCODE +rcode_base: + public ?MONITOR_LEAVE_PA_L09 +?MONITOR_LEAVE_PA_L09 equ rcode_base+00000000h + defb 067h,0F1h,07Ch,0E0h,0FBh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/MONITORLEAVEPOP.S b/src/nos/iar/MONITORLEAVEPOP.S new file mode 100644 index 00000000..bf8d1243 --- /dev/null +++ b/src/nos/iar/MONITORLEAVEPOP.S @@ -0,0 +1,17 @@ +; MONITORLEAVEPOP.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?MONITOR_LEAVE_POP_L09 + rseg RCODE +rcode_base: + public ?MONITOR_LEAVE_POP_L09 +?MONITOR_LEAVE_POP_L09 equ rcode_base+00000000h + defb 05Fh,0F1h,07Bh,0DDh,0F9h,0DDh,0E1h + defb 0D1h,0C1h,0E0h,0FBh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SCDIV.S b/src/nos/iar/SCDIV.S new file mode 100644 index 00000000..fb9dd99e --- /dev/null +++ b/src/nos/iar/SCDIV.S @@ -0,0 +1,23 @@ +; SCDIV.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SC_DIV_L01 + rseg RCODE +rcode_base: + public ?SC_DIV_L01 +?SC_DIV_L01 equ rcode_base+00000000h + extern ?C_FIND_SIGN_L01 + extern ?C_DIVMOD_L01 + defb 0C5h,0D5h,04Fh,0AFh,0CDh + defw LWRD ?C_FIND_SIGN_L01 + defb 0F5h,0CDh + defw LWRD ?C_DIVMOD_L01 + defb 0F1h,0B7h,079h,028h,003h,03Ch,018h + defb 002h,0EEh,0FFh,0D1h,0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SCMOD.S b/src/nos/iar/SCMOD.S new file mode 100644 index 00000000..7c08b0fa --- /dev/null +++ b/src/nos/iar/SCMOD.S @@ -0,0 +1,23 @@ +; SCMOD.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SC_MOD_L01 + rseg RCODE +rcode_base: + public ?SC_MOD_L01 +?SC_MOD_L01 equ rcode_base+00000000h + extern ?C_DIVMOD_L01 + extern ?C_FIND_SIGN_L01 + defb 0C5h,0D5h,04Fh,03Eh,001h,0CDh + defw LWRD ?C_FIND_SIGN_L01 + defb 0F5h,0CDh + defw LWRD ?C_DIVMOD_L01 + defb 0F1h,0B7h,07Ah,020h,002h,0EDh,044h + defb 0D1h,0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SCRSH.S b/src/nos/iar/SCRSH.S new file mode 100644 index 00000000..8fa1ad55 --- /dev/null +++ b/src/nos/iar/SCRSH.S @@ -0,0 +1,17 @@ +; SCRSH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SC_RSH_L01 + rseg RCODE +rcode_base: + public ?SC_RSH_L01 +?SC_RSH_L01 equ rcode_base+00000000h + defb 004h,005h,0C8h,0CBh,02Fh,010h,0FCh + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SCRSHASG.S b/src/nos/iar/SCRSHASG.S new file mode 100644 index 00000000..7a443004 --- /dev/null +++ b/src/nos/iar/SCRSHASG.S @@ -0,0 +1,19 @@ +; SCRSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SC_RSHASG_L01 + rseg RCODE +rcode_base: + public ?SC_RSHASG_L01 +?SC_RSHASG_L01 equ rcode_base+00000000h + extern ?SC_RSH_L01 + defb 07Eh,0CDh + defw LWRD ?SC_RSH_L01 + defb 077h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SDIVMOD.S b/src/nos/iar/SDIVMOD.S new file mode 100644 index 00000000..289801bf --- /dev/null +++ b/src/nos/iar/SDIVMOD.S @@ -0,0 +1,19 @@ +; SDIVMOD.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_DIVMOD_L02 + rseg RCODE +rcode_base: + public ?S_DIVMOD_L02 +?S_DIVMOD_L02 equ rcode_base+00000000h + defb 021h,000h,000h,03Eh,011h,0CBh,013h + defb 0CBh,012h,03Dh,0C8h,0CBh,015h,0CBh + defb 014h,0EDh,042h,030h,0F2h,009h,018h + defb 0EFh + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SFINDSIGN.S b/src/nos/iar/SFINDSIGN.S new file mode 100644 index 00000000..ef4d6f68 --- /dev/null +++ b/src/nos/iar/SFINDSIGN.S @@ -0,0 +1,19 @@ +; SFINDSIGN.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_FIND_SIGN_L02 + rseg RCODE +rcode_base: + public ?S_FIND_SIGN_L02 +?S_FIND_SIGN_L02 equ rcode_base+00000000h + defb 0CBh,078h,028h,009h,0AFh,091h,04Fh + defb 03Eh,000h,098h,047h,03Eh,001h,0CBh + defb 07Ah,0C8h,0F5h,0AFh,093h,05Fh,03Eh + defb 000h,09Ah,057h,0F1h,0EEh,001h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SLCMP.S b/src/nos/iar/SLCMP.S new file mode 100644 index 00000000..5441c566 --- /dev/null +++ b/src/nos/iar/SLCMP.S @@ -0,0 +1,22 @@ +; SLCMP.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SL_CMP_L03 + rseg RCODE +rcode_base: + public ?SL_CMP_L03 +?SL_CMP_L03 equ rcode_base+00000000h + defb 0EBh,0E3h,0D5h,0C5h,0F5h,0D5h,0C5h + defb 0EBh,021h,00Fh,000h,039h,07Eh,0EEh + defb 080h,047h,072h,02Bh,04Eh,073h,0EBh + defb 0E1h,07Ch,0EEh,080h,067h,0EDh,042h + defb 0E1h,020h,00Ah,0EBh,02Bh,07Eh,02Bh + defb 06Eh,067h,0EBh,0A7h,0EDh,052h,0C1h + defb 078h,0C1h,0E1h,0D1h,033h,033h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SLDIV.S b/src/nos/iar/SLDIV.S new file mode 100644 index 00000000..93baf447 --- /dev/null +++ b/src/nos/iar/SLDIV.S @@ -0,0 +1,31 @@ +; SLDIV.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SL_DIV_L03 + rseg RCODE +rcode_base: + public ?SL_DIV_L03 +?SL_DIV_L03 equ rcode_base+00000000h + extern ?L_FIND_SIGN_L03 + extern ?L_DIVMOD_L03 + extern ?L_NOT_L03 + extern ?L_INC_L03 + defb 0EBh,0E3h,0F5h,0DDh,0E5h,0DDh,021h + defb 000h,000h,0DDh,039h,0C5h,0D5h,0DDh + defb 056h,009h,0DDh,074h,009h,0DDh,05Eh + defb 008h,0DDh,075h,008h,0AFh,0CDh + defw LWRD ?L_FIND_SIGN_L03 + defb 0CDh + defw LWRD ?L_DIVMOD_L03 + defb 0E1h,0C1h,0B7h,0CCh + defw LWRD ?L_NOT_L03 + defb 0C4h + defw LWRD ?L_INC_L03 + defb 0DDh,0E1h,0F1h,0D1h,033h,033h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SLDIVASG.S b/src/nos/iar/SLDIVASG.S new file mode 100644 index 00000000..4ec88b5a --- /dev/null +++ b/src/nos/iar/SLDIVASG.S @@ -0,0 +1,22 @@ +; SLDIVASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SL_DIVASG_L03 + rseg RCODE +rcode_base: + public ?SL_DIVASG_L03 +?SL_DIVASG_L03 equ rcode_base+00000000h + extern ?SL_DIV_L03 + extern ?L_END_MULDIVASG_L03 + defb 0C5h,0D5h,05Eh,023h,056h,023h,04Eh + defb 023h,046h,0EBh,0CDh + defw LWRD ?SL_DIV_L03 + defb 0C3h + defw LWRD ?L_END_MULDIVASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SLMOD.S b/src/nos/iar/SLMOD.S new file mode 100644 index 00000000..5de1a312 --- /dev/null +++ b/src/nos/iar/SLMOD.S @@ -0,0 +1,32 @@ +; SLMOD.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SL_MOD_L03 + rseg RCODE +rcode_base: + public ?SL_MOD_L03 +?SL_MOD_L03 equ rcode_base+00000000h + extern ?L_FIND_SIGN_L03 + extern ?L_DIVMOD_L03 + extern ?L_NOT_L03 + extern ?L_INC_L03 + defb 0EBh,0E3h,0F5h,0DDh,0E5h,0DDh,021h + defb 000h,000h,0DDh,039h,0C5h,0D5h,0DDh + defb 056h,009h,0DDh,074h,009h,0DDh,05Eh + defb 008h,0DDh,075h,008h,03Eh,001h,0CDh + defw LWRD ?L_FIND_SIGN_L03 + defb 0CDh + defw LWRD ?L_DIVMOD_L03 + defb 0B7h,020h,006h,0CDh + defw LWRD ?L_NOT_L03 + defb 0CDh + defw LWRD ?L_INC_L03 + defb 0DDh,0F9h,0DDh,0E1h,0F1h,0D1h,033h + defb 033h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SLMODASG.S b/src/nos/iar/SLMODASG.S new file mode 100644 index 00000000..41c824e1 --- /dev/null +++ b/src/nos/iar/SLMODASG.S @@ -0,0 +1,22 @@ +; SLMODASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SL_MODASG_L03 + rseg RCODE +rcode_base: + public ?SL_MODASG_L03 +?SL_MODASG_L03 equ rcode_base+00000000h + extern ?SL_MOD_L03 + extern ?L_END_MULDIVASG_L03 + defb 0C5h,0D5h,05Eh,023h,056h,023h,04Eh + defb 023h,046h,0EBh,0CDh + defw LWRD ?SL_MOD_L03 + defb 0C3h + defw LWRD ?L_END_MULDIVASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SLRSH.S b/src/nos/iar/SLRSH.S new file mode 100644 index 00000000..e9d8889c --- /dev/null +++ b/src/nos/iar/SLRSH.S @@ -0,0 +1,17 @@ +; SLRSH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SL_RSH_L03 + rseg RCODE +rcode_base: + public ?SL_RSH_L03 +?SL_RSH_L03 equ rcode_base+00000000h + defb 0B7h,0C8h,0CBh,028h,0CBh,019h,0CBh + defb 01Ch,0CBh,01Dh,03Dh,020h,0F5h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SLRSHASG.S b/src/nos/iar/SLRSHASG.S new file mode 100644 index 00000000..be98c019 --- /dev/null +++ b/src/nos/iar/SLRSHASG.S @@ -0,0 +1,22 @@ +; SLRSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SL_RSHASG_L03 + rseg RCODE +rcode_base: + public ?SL_RSHASG_L03 +?SL_RSHASG_L03 equ rcode_base+00000000h + extern ?SL_RSH_L03 + extern ?L_END_ASG_L03 + defb 05Eh,023h,056h,023h,04Eh,023h,046h + defb 0EBh,0CDh + defw LWRD ?SL_RSH_L03 + defb 0C3h + defw LWRD ?L_END_ASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SLSH.S b/src/nos/iar/SLSH.S new file mode 100644 index 00000000..a3b72ddc --- /dev/null +++ b/src/nos/iar/SLSH.S @@ -0,0 +1,17 @@ +; SLSH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_LSH_L02 + rseg RCODE +rcode_base: + public ?S_LSH_L02 +?S_LSH_L02 equ rcode_base+00000000h + defb 004h,005h,0C8h,0EBh,029h,010h,0FDh + defb 0EBh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SLSHASG.S b/src/nos/iar/SLSHASG.S new file mode 100644 index 00000000..746658d5 --- /dev/null +++ b/src/nos/iar/SLSHASG.S @@ -0,0 +1,19 @@ +; SLSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_LSHASG_L02 + rseg RCODE +rcode_base: + public ?S_LSHASG_L02 +?S_LSHASG_L02 equ rcode_base+00000000h + extern ?S_LSH_L02 + defb 05Eh,023h,056h,0CDh + defw LWRD ?S_LSH_L02 + defb 072h,02Bh,073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SLSHASGBCprim.S b/src/nos/iar/SLSHASGBCprim.S new file mode 100644 index 00000000..1c5fa378 --- /dev/null +++ b/src/nos/iar/SLSHASGBCprim.S @@ -0,0 +1,18 @@ +; SLSHASGBCprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_LSHASG_BC_prim_L12 + rseg RCODE +rcode_base: + public ?S_LSHASG_BC_prim_L12 +?S_LSHASG_BC_prim_L12 equ rcode_base+00000000h + defb 0D9h,0B7h,028h,007h,0CBh,021h,0CBh + defb 010h,03Dh,020h,0F9h,0C5h,0D9h,0E1h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SLSHASGDEprim.S b/src/nos/iar/SLSHASGDEprim.S new file mode 100644 index 00000000..ee6cc856 --- /dev/null +++ b/src/nos/iar/SLSHASGDEprim.S @@ -0,0 +1,17 @@ +; SLSHASGDEprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_LSHASG_DE_prim_L12 + rseg RCODE +rcode_base: + public ?S_LSHASG_DE_prim_L12 +?S_LSHASG_DE_prim_L12 equ rcode_base+00000000h + defb 0D9h,0B7h,028h,006h,0EBh,029h,03Dh + defb 020h,0FCh,0EBh,0D5h,0D9h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SMUL.S b/src/nos/iar/SMUL.S new file mode 100644 index 00000000..e5a6ce7e --- /dev/null +++ b/src/nos/iar/SMUL.S @@ -0,0 +1,19 @@ +; SMUL.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_MUL_L02 + rseg RCODE +rcode_base: + public ?S_MUL_L02 +?S_MUL_L02 equ rcode_base+00000000h + defb 0F5h,0C5h,0E5h,078h,042h,051h,067h + defb 06Bh,0EDh,04Ch,0EDh,06Ch,0EDh,05Ch + defb 079h,085h,082h,057h,0E1h,0C1h,0F1h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SMULASG.S b/src/nos/iar/SMULASG.S new file mode 100644 index 00000000..c773655a --- /dev/null +++ b/src/nos/iar/SMULASG.S @@ -0,0 +1,19 @@ +; SMULASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_MULASG_L02 + rseg RCODE +rcode_base: + public ?S_MULASG_L02 +?S_MULASG_L02 equ rcode_base+00000000h + extern ?S_MUL_L02 + defb 05Eh,023h,056h,0CDh + defw LWRD ?S_MUL_L02 + defb 072h,02Bh,073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SMULASGBCprim.S b/src/nos/iar/SMULASGBCprim.S new file mode 100644 index 00000000..3679ce6f --- /dev/null +++ b/src/nos/iar/SMULASGBCprim.S @@ -0,0 +1,19 @@ +; SMULASGBCprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_MULASG_BC_prim_L12 + rseg RCODE +rcode_base: + public ?S_MULASG_BC_prim_L12 +?S_MULASG_BC_prim_L12 equ rcode_base+00000000h + extern ?S_MUL_L02 + defb 0C5h,0D9h,0EBh,0E3h,0EBh,0CDh + defw LWRD ?S_MUL_L02 + defb 042h,04Bh,0D1h,0C5h,0D9h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SMULASGDEprim.S b/src/nos/iar/SMULASGDEprim.S new file mode 100644 index 00000000..782bc6ef --- /dev/null +++ b/src/nos/iar/SMULASGDEprim.S @@ -0,0 +1,19 @@ +; SMULASGDEprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_MULASG_DE_prim_L12 + rseg RCODE +rcode_base: + public ?S_MULASG_DE_prim_L12 +?S_MULASG_DE_prim_L12 equ rcode_base+00000000h + extern ?S_MUL_L02 + defb 0C5h,0D9h,0E1h,0C5h,044h,04Dh,0CDh + defw LWRD ?S_MUL_L02 + defb 0C1h,0D5h,0D9h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SMULASGIX.S b/src/nos/iar/SMULASGIX.S new file mode 100644 index 00000000..58241196 --- /dev/null +++ b/src/nos/iar/SMULASGIX.S @@ -0,0 +1,19 @@ +; SMULASGIX.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_MULASG_IX_L12 + rseg RCODE +rcode_base: + public ?S_MULASG_IX_L12 +?S_MULASG_IX_L12 equ rcode_base+00000000h + extern ?S_MUL_L02 + defb 0D5h,0DDh,0E5h,0D1h,0CDh + defw LWRD ?S_MUL_L02 + defb 0D5h,0EBh,0DDh,0E1h,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SMULASGIY.S b/src/nos/iar/SMULASGIY.S new file mode 100644 index 00000000..4d7cadf6 --- /dev/null +++ b/src/nos/iar/SMULASGIY.S @@ -0,0 +1,19 @@ +; SMULASGIY.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_MULASG_IY_L12 + rseg RCODE +rcode_base: + public ?S_MULASG_IY_L12 +?S_MULASG_IY_L12 equ rcode_base+00000000h + extern ?S_MUL_L02 + defb 0D5h,0FDh,0E5h,0D1h,0CDh + defw LWRD ?S_MUL_L02 + defb 0D5h,0EBh,0FDh,0E1h,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSCMP.S b/src/nos/iar/SSCMP.S new file mode 100644 index 00000000..bf92b9c2 --- /dev/null +++ b/src/nos/iar/SSCMP.S @@ -0,0 +1,18 @@ +; SSCMP.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_CMP_L02 + rseg RCODE +rcode_base: + public ?SS_CMP_L02 +?SS_CMP_L02 equ rcode_base+00000000h + defb 0C5h,0E5h,0F5h,07Ch,0EEh,080h,067h + defb 078h,0EEh,080h,047h,0F1h,0A7h,0EDh + defb 042h,0E1h,0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSDIV.S b/src/nos/iar/SSDIV.S new file mode 100644 index 00000000..b9e5d9d4 --- /dev/null +++ b/src/nos/iar/SSDIV.S @@ -0,0 +1,24 @@ +; SSDIV.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_DIV_L02 + rseg RCODE +rcode_base: + public ?SS_DIV_L02 +?SS_DIV_L02 equ rcode_base+00000000h + extern ?S_FIND_SIGN_L02 + extern ?S_DIVMOD_L02 + defb 0F5h,0C5h,0E5h,0AFh,0CDh + defw LWRD ?S_FIND_SIGN_L02 + defb 0F5h,0CDh + defw LWRD ?S_DIVMOD_L02 + defb 0F1h,0B7h,028h,003h,013h,018h,006h + defb 07Bh,02Fh,05Fh,07Ah,02Fh,057h,0E1h + defb 0C1h,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSDIVASG.S b/src/nos/iar/SSDIVASG.S new file mode 100644 index 00000000..ea41231f --- /dev/null +++ b/src/nos/iar/SSDIVASG.S @@ -0,0 +1,19 @@ +; SSDIVASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_DIVASG_L02 + rseg RCODE +rcode_base: + public ?SS_DIVASG_L02 +?SS_DIVASG_L02 equ rcode_base+00000000h + extern ?SS_DIV_L02 + defb 05Eh,023h,056h,0CDh + defw LWRD ?SS_DIV_L02 + defb 072h,02Bh,073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSDIVASGBCprim.S b/src/nos/iar/SSDIVASGBCprim.S new file mode 100644 index 00000000..314b806b --- /dev/null +++ b/src/nos/iar/SSDIVASGBCprim.S @@ -0,0 +1,20 @@ +; SSDIVASGBCprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_DIVASG_BC_prim_L12 + rseg RCODE +rcode_base: + public ?SS_DIVASG_BC_prim_L12 +?SS_DIVASG_BC_prim_L12 equ rcode_base+00000000h + extern ?SS_DIV_L02 + defb 0C5h,0D9h,0EBh,0E3h,050h,059h,044h + defb 04Dh,0CDh + defw LWRD ?SS_DIV_L02 + defb 042h,04Bh,0D1h,0C5h,0D9h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSDIVASGDEprim.S b/src/nos/iar/SSDIVASGDEprim.S new file mode 100644 index 00000000..9f661442 --- /dev/null +++ b/src/nos/iar/SSDIVASGDEprim.S @@ -0,0 +1,19 @@ +; SSDIVASGDEprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_DIVASG_DE_prim_L12 + rseg RCODE +rcode_base: + public ?SS_DIVASG_DE_prim_L12 +?SS_DIVASG_DE_prim_L12 equ rcode_base+00000000h + extern ?SS_DIV_L02 + defb 0C5h,0D9h,0E1h,0C5h,044h,04Dh,0CDh + defw LWRD ?SS_DIV_L02 + defb 0C1h,0D5h,0D9h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSDIVASGIX.S b/src/nos/iar/SSDIVASGIX.S new file mode 100644 index 00000000..a0d97b45 --- /dev/null +++ b/src/nos/iar/SSDIVASGIX.S @@ -0,0 +1,19 @@ +; SSDIVASGIX.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_DIVASG_IX_L12 + rseg RCODE +rcode_base: + public ?SS_DIVASG_IX_L12 +?SS_DIVASG_IX_L12 equ rcode_base+00000000h + extern ?SS_DIV_L02 + defb 0D5h,0DDh,0E5h,0D1h,0CDh + defw LWRD ?SS_DIV_L02 + defb 0D5h,0EBh,0DDh,0E1h,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSDIVASGIY.S b/src/nos/iar/SSDIVASGIY.S new file mode 100644 index 00000000..3e3b3767 --- /dev/null +++ b/src/nos/iar/SSDIVASGIY.S @@ -0,0 +1,19 @@ +; SSDIVASGIY.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_DIVASG_IY_L12 + rseg RCODE +rcode_base: + public ?SS_DIVASG_IY_L12 +?SS_DIVASG_IY_L12 equ rcode_base+00000000h + extern ?SS_DIV_L02 + defb 0D5h,0FDh,0E5h,0D1h,0CDh + defw LWRD ?SS_DIV_L02 + defb 0D5h,0EBh,0FDh,0E1h,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSMOD.S b/src/nos/iar/SSMOD.S new file mode 100644 index 00000000..a9cedbf3 --- /dev/null +++ b/src/nos/iar/SSMOD.S @@ -0,0 +1,24 @@ +; SSMOD.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_MOD_L02 + rseg RCODE +rcode_base: + public ?SS_MOD_L02 +?SS_MOD_L02 equ rcode_base+00000000h + extern ?S_FIND_SIGN_L02 + extern ?S_DIVMOD_L02 + defb 0F5h,0E5h,0C5h,03Eh,001h,0CDh + defw LWRD ?S_FIND_SIGN_L02 + defb 0F5h,0CDh + defw LWRD ?S_DIVMOD_L02 + defb 0F1h,0EBh,0B7h,020h,007h,0AFh,093h + defb 05Fh,03Eh,000h,09Ah,057h,0C1h,0E1h + defb 0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSMODASG.S b/src/nos/iar/SSMODASG.S new file mode 100644 index 00000000..330a92d3 --- /dev/null +++ b/src/nos/iar/SSMODASG.S @@ -0,0 +1,19 @@ +; SSMODASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_MODASG_L02 + rseg RCODE +rcode_base: + public ?SS_MODASG_L02 +?SS_MODASG_L02 equ rcode_base+00000000h + extern ?SS_MOD_L02 + defb 05Eh,023h,056h,0CDh + defw LWRD ?SS_MOD_L02 + defb 072h,02Bh,073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSMODASGBCprim.S b/src/nos/iar/SSMODASGBCprim.S new file mode 100644 index 00000000..23e0636e --- /dev/null +++ b/src/nos/iar/SSMODASGBCprim.S @@ -0,0 +1,20 @@ +; SSMODASGBCprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_MODASG_BC_prim_L12 + rseg RCODE +rcode_base: + public ?SS_MODASG_BC_prim_L12 +?SS_MODASG_BC_prim_L12 equ rcode_base+00000000h + extern ?SS_MOD_L02 + defb 0C5h,0D9h,0EBh,0E3h,050h,059h,044h + defb 04Dh,0CDh + defw LWRD ?SS_MOD_L02 + defb 042h,04Bh,0D1h,0C5h,0D9h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSMODASGDEprim.S b/src/nos/iar/SSMODASGDEprim.S new file mode 100644 index 00000000..220ba776 --- /dev/null +++ b/src/nos/iar/SSMODASGDEprim.S @@ -0,0 +1,19 @@ +; SSMODASGDEprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_MODASG_DE_prim_L12 + rseg RCODE +rcode_base: + public ?SS_MODASG_DE_prim_L12 +?SS_MODASG_DE_prim_L12 equ rcode_base+00000000h + extern ?SS_MOD_L02 + defb 0C5h,0D9h,0E1h,0C5h,044h,04Dh,0CDh + defw LWRD ?SS_MOD_L02 + defb 0C1h,0D5h,0D9h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSMODASGIX.S b/src/nos/iar/SSMODASGIX.S new file mode 100644 index 00000000..eab3eee3 --- /dev/null +++ b/src/nos/iar/SSMODASGIX.S @@ -0,0 +1,19 @@ +; SSMODASGIX.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_MODASG_IX_L12 + rseg RCODE +rcode_base: + public ?SS_MODASG_IX_L12 +?SS_MODASG_IX_L12 equ rcode_base+00000000h + extern ?SS_MOD_L02 + defb 0D5h,0DDh,0E5h,0D1h,0CDh + defw LWRD ?SS_MOD_L02 + defb 0D5h,0EBh,0DDh,0E1h,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSMODASGIY.S b/src/nos/iar/SSMODASGIY.S new file mode 100644 index 00000000..282b7f94 --- /dev/null +++ b/src/nos/iar/SSMODASGIY.S @@ -0,0 +1,19 @@ +; SSMODASGIY.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_MODASG_IY_L12 + rseg RCODE +rcode_base: + public ?SS_MODASG_IY_L12 +?SS_MODASG_IY_L12 equ rcode_base+00000000h + extern ?SS_MOD_L02 + defb 0D5h,0FDh,0E5h,0D1h,0CDh + defw LWRD ?SS_MOD_L02 + defb 0D5h,0EBh,0FDh,0E1h,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSRSH.S b/src/nos/iar/SSRSH.S new file mode 100644 index 00000000..02b522d5 --- /dev/null +++ b/src/nos/iar/SSRSH.S @@ -0,0 +1,17 @@ +; SSRSH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_RSH_L02 + rseg RCODE +rcode_base: + public ?SS_RSH_L02 +?SS_RSH_L02 equ rcode_base+00000000h + defb 004h,005h,0C8h,0CBh,02Ah,0CBh,01Bh + defb 010h,0FAh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSRSHASG.S b/src/nos/iar/SSRSHASG.S new file mode 100644 index 00000000..8d27338d --- /dev/null +++ b/src/nos/iar/SSRSHASG.S @@ -0,0 +1,19 @@ +; SSRSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_RSHASG_L02 + rseg RCODE +rcode_base: + public ?SS_RSHASG_L02 +?SS_RSHASG_L02 equ rcode_base+00000000h + extern ?SS_RSH_L02 + defb 05Eh,023h,056h,0CDh + defw LWRD ?SS_RSH_L02 + defb 072h,02Bh,073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSRSHASGBCprim.S b/src/nos/iar/SSRSHASGBCprim.S new file mode 100644 index 00000000..83d6e13a --- /dev/null +++ b/src/nos/iar/SSRSHASGBCprim.S @@ -0,0 +1,18 @@ +; SSRSHASGBCprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_RSHASG_BC_prim_L12 + rseg RCODE +rcode_base: + public ?SS_RSHASG_BC_prim_L12 +?SS_RSHASG_BC_prim_L12 equ rcode_base+00000000h + defb 0D9h,0B7h,028h,007h,0CBh,028h,0CBh + defb 019h,03Dh,020h,0F9h,0C5h,0D9h,0E1h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSRSHASGDEprim.S b/src/nos/iar/SSRSHASGDEprim.S new file mode 100644 index 00000000..774f92da --- /dev/null +++ b/src/nos/iar/SSRSHASGDEprim.S @@ -0,0 +1,18 @@ +; SSRSHASGDEprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_RSHASG_DE_prim_L12 + rseg RCODE +rcode_base: + public ?SS_RSHASG_DE_prim_L12 +?SS_RSHASG_DE_prim_L12 equ rcode_base+00000000h + defb 0D9h,0B7h,028h,007h,0CBh,02Ah,0CBh + defb 01Bh,03Dh,020h,0F9h,0D5h,0D9h,0E1h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSRSHASGIX.S b/src/nos/iar/SSRSHASGIX.S new file mode 100644 index 00000000..e0704a7c --- /dev/null +++ b/src/nos/iar/SSRSHASGIX.S @@ -0,0 +1,19 @@ +; SSRSHASGIX.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_RSHASG_IX_L12 + rseg RCODE +rcode_base: + public ?SS_RSHASG_IX_L12 +?SS_RSHASG_IX_L12 equ rcode_base+00000000h + extern ?SS_RSH_L02 + defb 0D5h,0DDh,0E5h,0D1h,0CDh + defw LWRD ?SS_RSH_L02 + defb 0D5h,0DDh,0E1h,0EBh,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSRSHASGIY.S b/src/nos/iar/SSRSHASGIY.S new file mode 100644 index 00000000..2c810813 --- /dev/null +++ b/src/nos/iar/SSRSHASGIY.S @@ -0,0 +1,19 @@ +; SSRSHASGIY.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?SS_RSHASG_IY_L12 + rseg RCODE +rcode_base: + public ?SS_RSHASG_IY_L12 +?SS_RSHASG_IY_L12 equ rcode_base+00000000h + extern ?SS_RSH_L02 + defb 0D5h,0FDh,0E5h,0D1h,0CDh + defw LWRD ?SS_RSH_L02 + defb 0D5h,0FDh,0E1h,0EBh,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSSWITCH.S b/src/nos/iar/SSSWITCH.S new file mode 100644 index 00000000..bb28ccda --- /dev/null +++ b/src/nos/iar/SSSWITCH.S @@ -0,0 +1,20 @@ +; SSSWITCH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_S_SWITCH_L06 + rseg RCODE +rcode_base: + public ?S_S_SWITCH_L06 +?S_S_SWITCH_L06 equ rcode_base+00000000h + extern ?S_SWITCH_END_L06 + defb 0E3h,0F5h,0D5h,07Bh,096h,023h,05Fh + defb 07Ah,09Eh,023h,057h,07Bh,096h,023h + defb 07Ah,09Eh,023h,0C3h + defw LWRD ?S_SWITCH_END_L06 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SSWITCHEND.S b/src/nos/iar/SSWITCHEND.S new file mode 100644 index 00000000..743e7ebc --- /dev/null +++ b/src/nos/iar/SSWITCHEND.S @@ -0,0 +1,17 @@ +; SSWITCHEND.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_SWITCH_END_L06 + rseg RCODE +rcode_base: + public ?S_SWITCH_END_L06 +?S_SWITCH_END_L06 equ rcode_base+00000000h + defb 030h,004h,0EBh,023h,029h,019h,05Eh + defb 023h,056h,0EBh,0D1h,0F1h,0E3h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/STRCAT.S b/src/nos/iar/STRCAT.S new file mode 100644 index 00000000..4a86a192 --- /dev/null +++ b/src/nos/iar/STRCAT.S @@ -0,0 +1,18 @@ +; STRCAT.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?STRCAT_L11 + rseg RCODE +rcode_base: + public ?STRCAT_L11 +?STRCAT_L11 equ rcode_base+00000000h + defb 0E5h,0D5h,0C5h,0F5h,0AFh,047h,04Fh + defb 0EDh,0B1h,02Bh,0EBh,0BEh,0EDh,0A0h + defb 020h,0FBh,0F1h,0C1h,0D1h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/STRCHR.S b/src/nos/iar/STRCHR.S new file mode 100644 index 00000000..81b1208e --- /dev/null +++ b/src/nos/iar/STRCHR.S @@ -0,0 +1,17 @@ +; STRCHR.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?STRCHR_L11 + rseg RCODE +rcode_base: + public ?STRCHR_L11 +?STRCHR_L11 equ rcode_base+00000000h + defb 07Eh,0BBh,0C8h,0B7h,023h,020h,0F9h + defb 021h,000h,000h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/STRCMP.S b/src/nos/iar/STRCMP.S new file mode 100644 index 00000000..006cbc26 --- /dev/null +++ b/src/nos/iar/STRCMP.S @@ -0,0 +1,18 @@ +; STRCMP.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?STRCMP_L11 + rseg RCODE +rcode_base: + public ?STRCMP_L11 +?STRCMP_L11 equ rcode_base+00000000h + defb 0F5h,0D5h,01Ah,0BEh,020h,009h,013h + defb 023h,0B7h,020h,0F7h,021h,000h,000h + defb 011h,0CBh,01Ch,0D1h,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/STRCPY.S b/src/nos/iar/STRCPY.S new file mode 100644 index 00000000..ab8be072 --- /dev/null +++ b/src/nos/iar/STRCPY.S @@ -0,0 +1,18 @@ +; STRCPY.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?STRCPY_L11 + rseg RCODE +rcode_base: + public ?STRCPY_L11 +?STRCPY_L11 equ rcode_base+00000000h + defb 0F5h,0E5h,0D5h,0C5h,0AFh,0EBh,0BEh + defb 0EDh,0A0h,020h,0FBh,0C1h,0D1h,0E1h + defb 0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/STRLEN.S b/src/nos/iar/STRLEN.S new file mode 100644 index 00000000..965b5b16 --- /dev/null +++ b/src/nos/iar/STRLEN.S @@ -0,0 +1,18 @@ +; STRLEN.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?STRLEN_L11 + rseg RCODE +rcode_base: + public ?STRLEN_L11 +?STRLEN_L11 equ rcode_base+00000000h + defb 0C5h,0F5h,0AFh,047h,04Fh,0EDh,0B1h + defb 021h,0FFh,0FFh,0EDh,042h,0F1h,0C1h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/SVSWITCH.S b/src/nos/iar/SVSWITCH.S new file mode 100644 index 00000000..cc6ff642 --- /dev/null +++ b/src/nos/iar/SVSWITCH.S @@ -0,0 +1,21 @@ +; SVSWITCH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?S_V_SWITCH_L06 + rseg RCODE +rcode_base: + public ?S_V_SWITCH_L06 +?S_V_SWITCH_L06 equ rcode_base+00000000h + extern ?V_SWITCH_END_L06 + defb 0E3h,0F5h,0C5h,04Eh,023h,046h,023h + defb 078h,0B1h,028h,00Dh,00Bh,07Bh,096h + defb 023h,020h,0F5h,07Ah,096h,020h,0F1h + defb 023h,023h,023h,009h,009h,0C3h + defw LWRD ?V_SWITCH_END_L06 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/UCDIV.S b/src/nos/iar/UCDIV.S new file mode 100644 index 00000000..61080706 --- /dev/null +++ b/src/nos/iar/UCDIV.S @@ -0,0 +1,19 @@ +; UCDIV.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?UC_DIV_L01 + rseg RCODE +rcode_base: + public ?UC_DIV_L01 +?UC_DIV_L01 equ rcode_base+00000000h + extern ?C_DIVMOD_L01 + defb 0C5h,0D5h,04Fh,0CDh + defw LWRD ?C_DIVMOD_L01 + defb 079h,0EEh,0FFh,0D1h,0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/UCMOD.S b/src/nos/iar/UCMOD.S new file mode 100644 index 00000000..0aba7e45 --- /dev/null +++ b/src/nos/iar/UCMOD.S @@ -0,0 +1,19 @@ +; UCMOD.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?UC_MOD_L01 + rseg RCODE +rcode_base: + public ?UC_MOD_L01 +?UC_MOD_L01 equ rcode_base+00000000h + extern ?C_DIVMOD_L01 + defb 0C5h,0D5h,04Fh,0CDh + defw LWRD ?C_DIVMOD_L01 + defb 07Ah,0D1h,0C1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/UCRSH.S b/src/nos/iar/UCRSH.S new file mode 100644 index 00000000..38fa8067 --- /dev/null +++ b/src/nos/iar/UCRSH.S @@ -0,0 +1,17 @@ +; UCRSH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?UC_RSH_L01 + rseg RCODE +rcode_base: + public ?UC_RSH_L01 +?UC_RSH_L01 equ rcode_base+00000000h + defb 004h,005h,0C8h,0CBh,03Fh,010h,0FCh + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/UCRSHASG.S b/src/nos/iar/UCRSHASG.S new file mode 100644 index 00000000..2190c0ba --- /dev/null +++ b/src/nos/iar/UCRSHASG.S @@ -0,0 +1,19 @@ +; UCRSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?UC_RSHASG_L01 + rseg RCODE +rcode_base: + public ?UC_RSHASG_L01 +?UC_RSHASG_L01 equ rcode_base+00000000h + extern ?UC_RSH_L01 + defb 07Eh,0CDh + defw LWRD ?UC_RSH_L01 + defb 077h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/ULDIV.S b/src/nos/iar/ULDIV.S new file mode 100644 index 00000000..70bffbe4 --- /dev/null +++ b/src/nos/iar/ULDIV.S @@ -0,0 +1,25 @@ +; ULDIV.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?UL_DIV_L03 + rseg RCODE +rcode_base: + public ?UL_DIV_L03 +?UL_DIV_L03 equ rcode_base+00000000h + extern ?L_DIVMOD_L03 + extern ?L_NOT_L03 + defb 0EBh,0E3h,0F5h,0DDh,0E5h,0DDh,021h + defb 000h,000h,0DDh,039h,0C5h,0D5h,0DDh + defb 056h,009h,0DDh,074h,009h,0DDh,05Eh + defb 008h,0DDh,075h,008h,0CDh + defw LWRD ?L_DIVMOD_L03 + defb 0E1h,0C1h,0CDh + defw LWRD ?L_NOT_L03 + defb 0DDh,0E1h,0F1h,0D1h,033h,033h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/ULDIVASG.S b/src/nos/iar/ULDIVASG.S new file mode 100644 index 00000000..64c0bb66 --- /dev/null +++ b/src/nos/iar/ULDIVASG.S @@ -0,0 +1,22 @@ +; ULDIVASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?UL_DIVASG_L03 + rseg RCODE +rcode_base: + public ?UL_DIVASG_L03 +?UL_DIVASG_L03 equ rcode_base+00000000h + extern ?UL_DIV_L03 + extern ?L_END_MULDIVASG_L03 + defb 0C5h,0D5h,05Eh,023h,056h,023h,04Eh + defb 023h,046h,0EBh,0CDh + defw LWRD ?UL_DIV_L03 + defb 0C3h + defw LWRD ?L_END_MULDIVASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/ULMOD.S b/src/nos/iar/ULMOD.S new file mode 100644 index 00000000..1b8bf1c3 --- /dev/null +++ b/src/nos/iar/ULMOD.S @@ -0,0 +1,23 @@ +; ULMOD.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?UL_MOD_L03 + rseg RCODE +rcode_base: + public ?UL_MOD_L03 +?UL_MOD_L03 equ rcode_base+00000000h + extern ?L_DIVMOD_L03 + defb 0EBh,0E3h,0F5h,0DDh,0E5h,0DDh,021h + defb 000h,000h,0DDh,039h,0C5h,0D5h,0DDh + defb 056h,009h,0DDh,074h,009h,0DDh,05Eh + defb 008h,0DDh,075h,008h,0CDh + defw LWRD ?L_DIVMOD_L03 + defb 0DDh,0F9h,0DDh,0E1h,0F1h,0D1h,033h + defb 033h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/ULMODASG.S b/src/nos/iar/ULMODASG.S new file mode 100644 index 00000000..7fbec554 --- /dev/null +++ b/src/nos/iar/ULMODASG.S @@ -0,0 +1,22 @@ +; ULMODASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?UL_MODASG_L03 + rseg RCODE +rcode_base: + public ?UL_MODASG_L03 +?UL_MODASG_L03 equ rcode_base+00000000h + extern ?UL_MOD_L03 + extern ?L_END_MULDIVASG_L03 + defb 0C5h,0D5h,05Eh,023h,056h,023h,04Eh + defb 023h,046h,0EBh,0CDh + defw LWRD ?UL_MOD_L03 + defb 0C3h + defw LWRD ?L_END_MULDIVASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/ULRSH.S b/src/nos/iar/ULRSH.S new file mode 100644 index 00000000..d5914419 --- /dev/null +++ b/src/nos/iar/ULRSH.S @@ -0,0 +1,19 @@ +; ULRSH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?UL_RSH_L03 + rseg RCODE +rcode_base: + public ?UL_RSH_L03 +?UL_RSH_L03 equ rcode_base+00000000h + defb 0B7h,0C8h,0FEh,008h,038h,009h,06Ch + defb 061h,048h,006h,000h,0D6h,008h,018h + defb 0F2h,0CBh,038h,0CBh,019h,0CBh,01Ch + defb 0CBh,01Dh,03Dh,020h,0F5h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/ULRSHASG.S b/src/nos/iar/ULRSHASG.S new file mode 100644 index 00000000..aaf99d4c --- /dev/null +++ b/src/nos/iar/ULRSHASG.S @@ -0,0 +1,22 @@ +; ULRSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?UL_RSHASG_L03 + rseg RCODE +rcode_base: + public ?UL_RSHASG_L03 +?UL_RSHASG_L03 equ rcode_base+00000000h + extern ?UL_RSH_L03 + extern ?L_END_ASG_L03 + defb 05Eh,023h,056h,023h,04Eh,023h,046h + defb 0EBh,0CDh + defw LWRD ?UL_RSH_L03 + defb 0C3h + defw LWRD ?L_END_ASG_L03 + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USDIV.S b/src/nos/iar/USDIV.S new file mode 100644 index 00000000..9694ceb9 --- /dev/null +++ b/src/nos/iar/USDIV.S @@ -0,0 +1,20 @@ +; USDIV.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_DIV_L02 + rseg RCODE +rcode_base: + public ?US_DIV_L02 +?US_DIV_L02 equ rcode_base+00000000h + extern ?S_DIVMOD_L02 + defb 0F5h,0E5h,0CDh + defw LWRD ?S_DIVMOD_L02 + defb 07Bh,02Fh,05Fh,07Ah,02Fh,057h,0E1h + defb 0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USDIVASG.S b/src/nos/iar/USDIVASG.S new file mode 100644 index 00000000..39165e63 --- /dev/null +++ b/src/nos/iar/USDIVASG.S @@ -0,0 +1,19 @@ +; USDIVASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_DIVASG_L02 + rseg RCODE +rcode_base: + public ?US_DIVASG_L02 +?US_DIVASG_L02 equ rcode_base+00000000h + extern ?US_DIV_L02 + defb 05Eh,023h,056h,0CDh + defw LWRD ?US_DIV_L02 + defb 072h,02Bh,073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USDIVASGBCprim.S b/src/nos/iar/USDIVASGBCprim.S new file mode 100644 index 00000000..79e33487 --- /dev/null +++ b/src/nos/iar/USDIVASGBCprim.S @@ -0,0 +1,20 @@ +; USDIVASGBCprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_DIVASG_BC_prim_L12 + rseg RCODE +rcode_base: + public ?US_DIVASG_BC_prim_L12 +?US_DIVASG_BC_prim_L12 equ rcode_base+00000000h + extern ?US_DIV_L02 + defb 0C5h,0D9h,0EBh,0E3h,050h,059h,044h + defb 04Dh,0CDh + defw LWRD ?US_DIV_L02 + defb 042h,04Bh,0D1h,0C5h,0D9h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USDIVASGDEprim.S b/src/nos/iar/USDIVASGDEprim.S new file mode 100644 index 00000000..5a10d6f0 --- /dev/null +++ b/src/nos/iar/USDIVASGDEprim.S @@ -0,0 +1,19 @@ +; USDIVASGDEprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_DIVASG_DE_prim_L12 + rseg RCODE +rcode_base: + public ?US_DIVASG_DE_prim_L12 +?US_DIVASG_DE_prim_L12 equ rcode_base+00000000h + extern ?US_DIV_L02 + defb 0C5h,0D9h,0E1h,0C5h,044h,04Dh,0CDh + defw LWRD ?US_DIV_L02 + defb 0C1h,0D5h,0D9h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USDIVASGIX.S b/src/nos/iar/USDIVASGIX.S new file mode 100644 index 00000000..9d78a02f --- /dev/null +++ b/src/nos/iar/USDIVASGIX.S @@ -0,0 +1,19 @@ +; USDIVASGIX.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_DIVASG_IX_L12 + rseg RCODE +rcode_base: + public ?US_DIVASG_IX_L12 +?US_DIVASG_IX_L12 equ rcode_base+00000000h + extern ?US_DIV_L02 + defb 0D5h,0DDh,0E5h,0D1h,0CDh + defw LWRD ?US_DIV_L02 + defb 0D5h,0EBh,0DDh,0E1h,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USDIVASGIY.S b/src/nos/iar/USDIVASGIY.S new file mode 100644 index 00000000..a1f8b154 --- /dev/null +++ b/src/nos/iar/USDIVASGIY.S @@ -0,0 +1,19 @@ +; USDIVASGIY.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_DIVASG_IY_L12 + rseg RCODE +rcode_base: + public ?US_DIVASG_IY_L12 +?US_DIVASG_IY_L12 equ rcode_base+00000000h + extern ?US_DIV_L02 + defb 0D5h,0FDh,0E5h,0D1h,0CDh + defw LWRD ?US_DIV_L02 + defb 0D5h,0EBh,0FDh,0E1h,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USMOD.S b/src/nos/iar/USMOD.S new file mode 100644 index 00000000..483da82d --- /dev/null +++ b/src/nos/iar/USMOD.S @@ -0,0 +1,19 @@ +; USMOD.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_MOD_L02 + rseg RCODE +rcode_base: + public ?US_MOD_L02 +?US_MOD_L02 equ rcode_base+00000000h + extern ?S_DIVMOD_L02 + defb 0F5h,0E5h,0CDh + defw LWRD ?S_DIVMOD_L02 + defb 0EBh,0E1h,0F1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USMODASG.S b/src/nos/iar/USMODASG.S new file mode 100644 index 00000000..a12694a2 --- /dev/null +++ b/src/nos/iar/USMODASG.S @@ -0,0 +1,19 @@ +; USMODASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_MODASG_L02 + rseg RCODE +rcode_base: + public ?US_MODASG_L02 +?US_MODASG_L02 equ rcode_base+00000000h + extern ?US_MOD_L02 + defb 05Eh,023h,056h,0CDh + defw LWRD ?US_MOD_L02 + defb 072h,02Bh,073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USMODASGBCprim.S b/src/nos/iar/USMODASGBCprim.S new file mode 100644 index 00000000..6e5668ad --- /dev/null +++ b/src/nos/iar/USMODASGBCprim.S @@ -0,0 +1,20 @@ +; USMODASGBCprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_MODASG_BC_prim_L12 + rseg RCODE +rcode_base: + public ?US_MODASG_BC_prim_L12 +?US_MODASG_BC_prim_L12 equ rcode_base+00000000h + extern ?US_MOD_L02 + defb 0C5h,0D9h,0EBh,0E3h,050h,059h,044h + defb 04Dh,0CDh + defw LWRD ?US_MOD_L02 + defb 042h,04Bh,0D1h,0C5h,0D9h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USMODASGDEprim.S b/src/nos/iar/USMODASGDEprim.S new file mode 100644 index 00000000..b0e81d22 --- /dev/null +++ b/src/nos/iar/USMODASGDEprim.S @@ -0,0 +1,19 @@ +; USMODASGDEprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_MODASG_DE_prim_L12 + rseg RCODE +rcode_base: + public ?US_MODASG_DE_prim_L12 +?US_MODASG_DE_prim_L12 equ rcode_base+00000000h + extern ?US_MOD_L02 + defb 0C5h,0D9h,0E1h,0C5h,044h,04Dh,0CDh + defw LWRD ?US_MOD_L02 + defb 0C1h,0D5h,0D9h,0E1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USMODASGIX.S b/src/nos/iar/USMODASGIX.S new file mode 100644 index 00000000..1bc18dbb --- /dev/null +++ b/src/nos/iar/USMODASGIX.S @@ -0,0 +1,19 @@ +; USMODASGIX.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_MODASG_IX_L12 + rseg RCODE +rcode_base: + public ?US_MODASG_IX_L12 +?US_MODASG_IX_L12 equ rcode_base+00000000h + extern ?US_MOD_L02 + defb 0D5h,0DDh,0E5h,0D1h,0CDh + defw LWRD ?US_MOD_L02 + defb 0D5h,0EBh,0DDh,0E1h,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USMODASGIY.S b/src/nos/iar/USMODASGIY.S new file mode 100644 index 00000000..c0aacd9f --- /dev/null +++ b/src/nos/iar/USMODASGIY.S @@ -0,0 +1,19 @@ +; USMODASGIY.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_MODASG_IY_L12 + rseg RCODE +rcode_base: + public ?US_MODASG_IY_L12 +?US_MODASG_IY_L12 equ rcode_base+00000000h + extern ?US_MOD_L02 + defb 0D5h,0FDh,0E5h,0D1h,0CDh + defw LWRD ?US_MOD_L02 + defb 0D5h,0EBh,0FDh,0E1h,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USRSH.S b/src/nos/iar/USRSH.S new file mode 100644 index 00000000..78c48307 --- /dev/null +++ b/src/nos/iar/USRSH.S @@ -0,0 +1,17 @@ +; USRSH.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_RSH_L02 + rseg RCODE +rcode_base: + public ?US_RSH_L02 +?US_RSH_L02 equ rcode_base+00000000h + defb 004h,005h,0C8h,0CBh,03Ah,0CBh,01Bh + defb 010h,0FAh,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USRSHASG.S b/src/nos/iar/USRSHASG.S new file mode 100644 index 00000000..f3ba0e4a --- /dev/null +++ b/src/nos/iar/USRSHASG.S @@ -0,0 +1,19 @@ +; USRSHASG.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_RSHASG_L02 + rseg RCODE +rcode_base: + public ?US_RSHASG_L02 +?US_RSHASG_L02 equ rcode_base+00000000h + extern ?US_RSH_L02 + defb 05Eh,023h,056h,0CDh + defw LWRD ?US_RSH_L02 + defb 072h,02Bh,073h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USRSHASGBCprim.S b/src/nos/iar/USRSHASGBCprim.S new file mode 100644 index 00000000..5a760b4c --- /dev/null +++ b/src/nos/iar/USRSHASGBCprim.S @@ -0,0 +1,18 @@ +; USRSHASGBCprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_RSHASG_BC_prim_L12 + rseg RCODE +rcode_base: + public ?US_RSHASG_BC_prim_L12 +?US_RSHASG_BC_prim_L12 equ rcode_base+00000000h + defb 0D9h,0B7h,028h,007h,0CBh,038h,0CBh + defb 019h,03Dh,020h,0F9h,0C5h,0D9h,0E1h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USRSHASGDEprim.S b/src/nos/iar/USRSHASGDEprim.S new file mode 100644 index 00000000..122fb7b5 --- /dev/null +++ b/src/nos/iar/USRSHASGDEprim.S @@ -0,0 +1,18 @@ +; USRSHASGDEprim.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_RSHASG_DE_prim_L12 + rseg RCODE +rcode_base: + public ?US_RSHASG_DE_prim_L12 +?US_RSHASG_DE_prim_L12 equ rcode_base+00000000h + defb 0D9h,0B7h,028h,007h,0CBh,03Ah,0CBh + defb 01Bh,03Dh,020h,0F9h,0D5h,0D9h,0E1h + defb 0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USRSHASGIX.S b/src/nos/iar/USRSHASGIX.S new file mode 100644 index 00000000..6b962225 --- /dev/null +++ b/src/nos/iar/USRSHASGIX.S @@ -0,0 +1,19 @@ +; USRSHASGIX.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_RSHASG_IX_L12 + rseg RCODE +rcode_base: + public ?US_RSHASG_IX_L12 +?US_RSHASG_IX_L12 equ rcode_base+00000000h + extern ?US_RSH_L02 + defb 0D5h,0DDh,0E5h,0D1h,0CDh + defw LWRD ?US_RSH_L02 + defb 0D5h,0DDh,0E1h,0EBh,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/USRSHASGIY.S b/src/nos/iar/USRSHASGIY.S new file mode 100644 index 00000000..5b1afb90 --- /dev/null +++ b/src/nos/iar/USRSHASGIY.S @@ -0,0 +1,19 @@ +; USRSHASGIY.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?US_RSHASG_IY_L12 + rseg RCODE +rcode_base: + public ?US_RSHASG_IY_L12 +?US_RSHASG_IY_L12 equ rcode_base+00000000h + extern ?US_RSH_L02 + defb 0D5h,0FDh,0E5h,0D1h,0CDh + defw LWRD ?US_RSH_L02 + defb 0D5h,0FDh,0E1h,0EBh,0D1h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/VSWITCHEND.S b/src/nos/iar/VSWITCHEND.S new file mode 100644 index 00000000..5cfd62c4 --- /dev/null +++ b/src/nos/iar/VSWITCHEND.S @@ -0,0 +1,17 @@ +; VSWITCHEND.asm +; Nick's reverse engineered subset of the IAR banked 'C' library + +; ----------------------------------------------------------------------------- + + module ?V_SWITCH_END_L06 + rseg RCODE +rcode_base: + public ?V_SWITCH_END_L06 +?V_SWITCH_END_L06 equ rcode_base+00000000h + defb 009h,009h,07Eh,023h,066h,06Fh,0C1h + defb 0F1h,0E3h,0C9h + endmod + +; ----------------------------------------------------------------------------- + + end diff --git a/src/nos/iar/auto.mk b/src/nos/iar/auto.mk new file mode 100644 index 00000000..eb939aa8 --- /dev/null +++ b/src/nos/iar/auto.mk @@ -0,0 +1,210 @@ +# auto.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +#CPPFLAGS+= -include iar_defs.h + +SUBDIRS= + +OUTPUTS= iar.$(LIBEXT) + +iar_$(LIBEXT)_SOURCES= \ + BANKCALLDIRECT.S \ + BANKLEAVE32.S \ + BANKLEAVEDIRECT.S \ + BFCANDASG.S \ + BFCLSHASG.S \ + BFCMULASG.S \ + BFCORASG.S \ + BFCRETVAL.S \ + BFCSHIFTUP.S \ + BFCXORASG.S \ + BFMASKEDLD.S \ + BFMASKEDST.S \ + BFSADDASG.S \ + BFSANDASG.S \ + BFSCDIVASG.S \ + BFSCEXT.S \ + BFSCLDSHIFTDOWN.S \ + BFSCMODASG.S \ + BFSCRSHASG.S \ + BFSLSHASG.S \ + BFSMULASG.S \ + BFSNEGASG.S \ + BFSORASG.S \ + BFSPOSTDEC.S \ + BFSPOSTINC.S \ + BFSPREDEC.S \ + BFSPREINC.S \ + BFSRETVAL.S \ + BFSSDIVASG.S \ + BFSSEXT.S \ + BFSSHIFTUP.S \ + BFSSLDSHIFTDOWN.S \ + BFSSMODASG.S \ + BFSSRSHASG.S \ + BFSSUBASG.S \ + BFSXORASG.S \ + BFUCDIVASG.S \ + BFUCLDSHIFTDOWN.S \ + BFUCMODASG.S \ + BFUCRSHASG.S \ + BFUSDIVASG.S \ + BFUSLDSHIFTDOWN.S \ + BFUSMODASG.S \ + BFUSRSHASG.S \ + CALLIND.S \ + CDIVMOD.S \ + CFINDSIGN.S \ + CLSH.S \ + CLSHASG.S \ + CMUL.S \ + CMULASG.S \ + CSSWITCH.S \ + CVSWITCH.S \ + ENTAUTODIRECT.S \ + ENTPARMDIRECT.S \ + FADDASG.S \ + FADDSUB.S \ + FCMP.S \ + FDEC.S \ + FDECASG.S \ + FDIV.S \ + FDIVASG.S \ + FENDASG2.S \ + FINC.S \ + FINCASG.S \ + FMUL.S \ + FMULASG.S \ + FNEGASG.S \ + FPACK.S \ + FROUND.S \ + FSUBASG.S \ + FTOL.S \ + FUNPACK.S \ + LADDASG.S \ + LAND.S \ + LANDASG.S \ + LDEC.S \ + LDECASG.S \ + LDIVMOD.S \ + LEAVE32.S \ + LEAVEDIRECT.S \ + LENDASG.S \ + LENDMULDIVASG.S \ + LFINDSIGN.S \ + LIBVERSION.S \ + LINC.S \ + LINCASG.S \ + LLSH.S \ + LLSHASG.S \ + LMUL.S \ + LMULASG.S \ + LNEG.S \ + LNEGASG.S \ + LNOT.S \ + LNOTASG.S \ + LOR.S \ + LORASG.S \ + LSSWITCH.S \ + LSUBASG.S \ + LTOF.S \ + LVSWITCH.S \ + LXOR.S \ + LXORASG.S \ + MEMCMP.S \ + MEMSET.S \ + MONITORBANKLEAVE.S \ + MONITORBANKLEAVE32.S \ + MONITORBANKLEAVEIX.S \ + MONITORBANKLEAVEPOP.S \ + MONITORLEAVE.S \ + MONITORLEAVE32.S \ + MONITORLEAVEIX.S \ + MONITORLEAVEIXPA.S \ + MONITORLEAVEPA.S \ + MONITORLEAVEPOP.S \ + SCDIV.S \ + SCMOD.S \ + SCRSH.S \ + SCRSHASG.S \ + SDIVMOD.S \ + SFINDSIGN.S \ + SLCMP.S \ + SLDIV.S \ + SLDIVASG.S \ + SLMOD.S \ + SLMODASG.S \ + SLRSH.S \ + SLRSHASG.S \ + SLSH.S \ + SLSHASG.S \ + SLSHASGBCprim.S \ + SLSHASGDEprim.S \ + SMUL.S \ + SMULASG.S \ + SMULASGBCprim.S \ + SMULASGDEprim.S \ + SMULASGIX.S \ + SMULASGIY.S \ + SSCMP.S \ + SSDIV.S \ + SSDIVASG.S \ + SSDIVASGBCprim.S \ + SSDIVASGDEprim.S \ + SSDIVASGIX.S \ + SSDIVASGIY.S \ + SSMOD.S \ + SSMODASG.S \ + SSMODASGBCprim.S \ + SSMODASGDEprim.S \ + SSMODASGIX.S \ + SSMODASGIY.S \ + SSRSH.S \ + SSRSHASG.S \ + SSRSHASGBCprim.S \ + SSRSHASGDEprim.S \ + SSRSHASGIX.S \ + SSRSHASGIY.S \ + SSSWITCH.S \ + SSWITCHEND.S \ + STRCAT.S \ + STRCHR.S \ + STRCMP.S \ + STRCPY.S \ + STRLEN.S \ + SVSWITCH.S \ + UCDIV.S \ + UCMOD.S \ + UCRSH.S \ + UCRSHASG.S \ + ULDIV.S \ + ULDIVASG.S \ + ULMOD.S \ + ULMODASG.S \ + ULRSH.S \ + ULRSHASG.S \ + USDIV.S \ + USDIVASG.S \ + USDIVASGBCprim.S \ + USDIVASGDEprim.S \ + USDIVASGIX.S \ + USDIVASGIY.S \ + USMOD.S \ + USMODASG.S \ + USMODASGBCprim.S \ + USMODASGDEprim.S \ + USMODASGIX.S \ + USMODASGIY.S \ + USRSH.S \ + USRSHASG.S \ + USRSHASGBCprim.S \ + USRSHASGDEprim.S \ + USRSHASGIX.S \ + USRSHASGIY.S \ + VSWITCHEND.S + +# BANKCALLDIRECTEXAF.S + +# ----------------------------------------------------------------------------- \ + diff --git a/src/nos/iar/iar_defs.h b/src/nos/iar/iar_defs.h new file mode 100644 index 00000000..e9819641 --- /dev/null +++ b/src/nos/iar/iar_defs.h @@ -0,0 +1 @@ +#define RCODE ICODE diff --git a/src/nos/iar/makefile b/src/nos/iar/makefile new file mode 100644 index 00000000..89c3988f --- /dev/null +++ b/src/nos/iar/makefile @@ -0,0 +1,10 @@ +# makefile by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +include ../make.d/host.mk +include auto.mk +$(GENERATE) + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/include/!readme! b/src/nos/include/!readme! new file mode 100644 index 00000000..9c2eaa15 --- /dev/null +++ b/src/nos/include/!readme! @@ -0,0 +1,10 @@ +UZIX library - header files + +The header files for UZIX library were taken, adapted and inspired in many +sources, from free implementations to comercial products. Since header +files of C libraries seems to be a common thing, these are all in public +domain. + +Adriano Cunha, 12/07/2001 +http://uzix.msx.org + diff --git a/src/nos/include/alloc.h b/src/nos/include/alloc.h new file mode 100644 index 00000000..e396a264 --- /dev/null +++ b/src/nos/include/alloc.h @@ -0,0 +1,3 @@ +#ifndef __MALLOC_H +#include +#endif diff --git a/src/nos/include/ar.h b/src/nos/include/ar.h new file mode 100644 index 00000000..67394111 --- /dev/null +++ b/src/nos/include/ar.h @@ -0,0 +1,18 @@ +#ifndef __AR_H +#define __AR_H + +#define ARMAG "!\n" +#define SARMAG 8 +#define ARFMAG "`\n" + +struct ar_hdr { + char ar_name[16], + ar_date[12], + ar_uid[6], + ar_gid[6], + ar_mode[8], + ar_size[10], + ar_fmag[2]; +}; + +#endif /* __AR_H */ diff --git a/src/nos/include/assert.h b/src/nos/include/assert.h new file mode 100644 index 00000000..015d7f20 --- /dev/null +++ b/src/nos/include/assert.h @@ -0,0 +1,27 @@ +#ifndef __ASSERT_H +#define __ASSERT_H +#ifndef __TYPES_H +#include +#endif + +/* ANSI compilers only version ! */ + +/* If NDEBUG is defined, do nothing. + If not, and EXPRESSION is zero, print an error message and abort. */ + +#ifdef NDEBUG + +#define assert(expr) ((void) 0) + +#else /* NDEBUG */ + +extern void __assert __P((char *, char *, int)); + +#define assert(expr) \ + ((void) ((expr) || (__assert (__STRING(expr), __FILE__, __LINE__), 0))) + +#endif /* NDEBUG */ + +extern void __errput __P((char *)); + +#endif /* __ASSERT_H */ diff --git a/src/nos/include/ctype.h b/src/nos/include/ctype.h new file mode 100644 index 00000000..412eae5c --- /dev/null +++ b/src/nos/include/ctype.h @@ -0,0 +1,90 @@ +/* ctype.h Character classification and conversion + */ +#ifndef __CTYPE_H +#define __CTYPE_H + +#ifdef _MSX_DOS /* HI-TECH-C/MSX-DOS CTYPE.H */ + +#define _U 0x01 +#define _L 0x02 +#define _N 0x04 +#define _S 0x08 +#define _P 0x10 +#define _C 0x20 +#define _X 0x40 + +#if 1 /* Nick */ +extern unsigned char __ctype[]; + /* in libc.lib */ +#else +extern unsigned char _ctype_[]; + /* in libc.lib */ +#endif + +#define isalpha(c) ((_ctype_+1)[c]&(_U|_L)) +#define isupper(c) ((_ctype_+1)[c]&_U) +#define islower(c) ((_ctype_+1)[c]&_L) +#define isdigit(c) ((_ctype_+1)[c]&_N) +#define isxdigit(c) ((_ctype_+1)[c]&(_N|_X)) +#define isspace(c) ((_ctype_+1)[c]&_S) +#define ispunct(c) ((_ctype_+1)[c]&_P) +#define isalnum(c) ((_ctype_+1)[c]&(_U|_L|_N)) +#define isprint(c) ((_ctype_+1)[c]&(_P|_U|_L|_N|_S)) +#define isgraph(c) ((_ctype_+1)[c]&(_P|_U|_L|_N)) +#define iscntrl(c) ((_ctype_+1)[c]&_C) +#define isascii(c) (!((c)&0xFF80)) +#define toascii(c) ((c)&0x7F) + +extern char toupper(char); +extern char tolower(char); +extern char * strupr(char *); +extern char * strlwr(char *); + +#else /* UZIX-hosted CTYPE.H */ + +#include /* Nick */ + +extern unsigned char __ctype[]; + +#define __CT_c 0x01 /* control character */ +#define __CT_u 0x02 /* upper case */ +#define __CT_l 0x04 /* lower case */ +#define __CT_d 0x08 /* numeric digit */ +#define __CT_s 0x10 /* whitespace */ +#define __CT_p 0x20 /* punctuation */ +#define __CT_x 0x40 /* hexadecimal */ + +#define __CT_a (__CT_u|__CT_l) /* alpha */ + +/* always functions ! */ +extern int toupper __P((int)); +extern int tolower __P((int)); + +#define _toupper(c) (islower(c) ? (c)^0x20 : (c)) +#define _tolower(c) (isupper(c) ? (c)^0x20 : (c)) +#define __toupper(c) ((c)^0x20) +#define __tolower(c) ((c)^0x20) +#define toascii(c) ((c)&0x7F) + +#define _CTYPE(c) (__ctype[(unsigned char)(c)]) + +/* Note the '!!' is a cast to 'bool' and even BCC deletes it in an if() */ +#define isascii(c) (!((c)&~0x7F)) +#define isalnum(c) (!!(_CTYPE(c)&(__CT_a|__CT_d))) +#define isalpha(c) (!!(_CTYPE(c)&__CT_a)) +#define iscntrl(c) (!!(_CTYPE(c)&__CT_c)) +#define isdigit(c) (!!(_CTYPE(c)&__CT_d)) +#define isgraph(c) (! (_CTYPE(c)&(__CT_c|__CT_s))) +#define islower(c) (!!(_CTYPE(c)&__CT_l)) +#define isprint(c) (! (_CTYPE(c)&__CT_c)) +#define ispunct(c) (!!(_CTYPE(c)&__CT_p)) +#define isspace(c) (!!(_CTYPE(c)&__CT_s)) +#define isupper(c) (!!(_CTYPE(c)&__CT_u)) +#define isxdigit(c) (!!(_CTYPE(c)&__CT_x)) + +#define isdecimal(c) isdigit(c) +#define isoctal(c) ((c) >= '0' && (c) <= '7') + +#endif /* END OF CTYPE.H DEFINITION */ + +#endif /* __CTYPE_H */ diff --git a/src/nos/include/ctype.h% b/src/nos/include/ctype.h% new file mode 100644 index 00000000..6fbe01ee --- /dev/null +++ b/src/nos/include/ctype.h% @@ -0,0 +1,169 @@ +/* - CTYPE.H - + + The ANSI character testing function declarations. + + Note: 7-bit ASCII or 8-bit ASCII may be supported by these functions. + + $Name: V3_34K V3_34J V3_34I V3_34H V3_34G $ + + Copyright 1986 - 1999 IAR Systems. All rights reserved. +*/ + +#ifndef _CTYPE_INCLUDED +#define _CTYPE_INCLUDED + +/* #include "sysmac.h" Nick */ +/* - SYSMAC.H - + + Defines system macros to maintain source compatibility + with different IAR compilers. + + $Name: V3_34K V3_34J V3_34I V3_34H $ + + Copyright 1986 - 1999 IAR Systems. All rights reserved. +*/ + +#ifndef _SYSMAC_H_ +#define _SYSMAC_H_ + + +#if defined(__IAR_SYSTEMS_ICC) && !defined(__IAR_SYSTEMS_ICC__) +#define __IAR_SYSTEMS_ICC__ 1 +#endif + +#if __IAR_SYSTEMS_ICC__ > 4 +#error __IAR_SYSTEMS_ICC__ > 4 not available yet! +#endif + +#ifndef __CHAR_SIZE__ +#define __CHAR_SIZE__ sizeof(char) +#endif + +#ifndef __SHORT_SIZE__ +#define __SHORT_SIZE__ sizeof(short) +#endif + +#ifndef __INT_SIZE__ +#define __INT_SIZE__ sizeof(int) +#endif + +#ifndef __LONG_SIZE__ +#define __LONG_SIZE__ sizeof(long) +#endif + +#ifndef __FLOAT_SIZE__ +#define __FLOAT_SIZE__ sizeof(float) +#endif + +#ifndef __DOUBLE_SIZE__ +#define __DOUBLE_SIZE__ sizeof(double) +#endif + +#ifndef __LONG_DOUBLE_SIZE__ +#define __LONG_DOUBLE_SIZE__ sizeof(long double) +#endif + +#ifndef __SIZE_T_TYPE__ +#if sizeof((char*)0 - (char*)0) <= sizeof(int) +#define __SIZE_T_TYPE__ unsigned int +#else +#define __SIZE_T_TYPE__ unsigned long +#endif +#endif + +#ifndef __PTRDIFF_T_TYPE__ +#if sizeof((char*)0 - (char*)0) <= sizeof(int) +#define __PTRDIFF_T_TYPE__ unsigned int +#else +#define __PTRDIFF_T_TYPE__ unsigned long +#endif +#endif + +#ifndef __JMP_BUF_ELEMENT_TYPE__ +#ifndef __JMP_BUF_NUM_ELEMENTS__ +#define __JMP_BUF_ELEMENT_TYPE__ char +#ifndef __JMP_BUF__ +#define __JMP_BUF_NUM_ELEMENTS__ 8 +#else +#define __JMP_BUF_NUM_ELEMENTS__ __JMP_BUF__ +#endif +#endif +#endif + + +#define __INTRINSIC +#if __IAR_SYSTEMS_ICC__ >= 2 +#undef __INTRINSIC +#define __INTRINSIC __intrinsic +#endif + +/* Macro for frmwri and frmrd */ +#define VAPTR(T) (va_arg(ap, T *)) + +/* Typedefs put here to appear only once */ +typedef __SIZE_T_TYPE__ size_t; +typedef __PTRDIFF_T_TYPE__ ptrdiff_t; + +#endif /* _SYSMAC_H_ */ +/* end of #include "sysmac.h" Nick */ + +#define _U 01 +#define _L 02 +#define _N 04 +#define _S 010 +#define _P 020 +#define _C 040 +#define _X 0100 +#define _B 0200 + +#if __IAR_SYSTEMS_ICC__ < 2 +#if __TID__ & 0x8000 +#pragma function=intrinsic(0) +#endif +#endif + +#ifdef __8_BIT_ASCII_WANTED +extern const unsigned char _Large_Ctype[257]; +#define _Ctype _Large_Ctype +#else +extern const unsigned char _Small_Ctype[129]; +#define _Ctype _Small_Ctype +#endif + +__INTRINSIC int isalpha(int); +__INTRINSIC int isupper(int); +__INTRINSIC int islower(int); +__INTRINSIC int isdigit(int); +__INTRINSIC int isxdigit(int); +__INTRINSIC int isspace(int); +__INTRINSIC int ispunct(int); +__INTRINSIC int isalnum(int); +__INTRINSIC int isprint(int); +__INTRINSIC int isgraph(int); +__INTRINSIC int iscntrl(int); +__INTRINSIC int toupper(int); +__INTRINSIC int tolower(int); + +#if __IAR_SYSTEMS_ICC__ < 2 +#if __TID__ & 0x8000 +#pragma function=default +#endif +#endif + + +#define isalpha(c) ((_Ctype+1)[c]&(_U|_L)) +#define isupper(c) ((_Ctype+1)[c]&_U) +#define islower(c) ((_Ctype+1)[c]&_L) +#define isdigit(c) ((_Ctype+1)[c]&_N) +#define isxdigit(c) ((_Ctype+1)[c]&(_N|_X)) +#define isspace(c) ((_Ctype+1)[c]&_S) +#define ispunct(c) ((_Ctype+1)[c]&_P) +#define isalnum(c) ((_Ctype+1)[c]&(_U|_L|_N)) +#define isprint(c) ((_Ctype+1)[c]&(_P|_U|_L|_N|_B)) +#define isgraph(c) ((_Ctype+1)[c]&(_P|_U|_L|_N)) +#define iscntrl(c) ((_Ctype+1)[c]&_C) +#define toupper(c) (islower((c))? (c)&0x5F: (c)) +#define tolower(c) (isupper((c))? (c)|0x20: (c)) + +#endif + diff --git a/src/nos/include/curses.h b/src/nos/include/curses.h new file mode 100644 index 00000000..3badca89 --- /dev/null +++ b/src/nos/include/curses.h @@ -0,0 +1,229 @@ +/* curses.h - defines macros and prototypes for curses */ + +#ifndef CURSES_H + +#define _BIG_MACHINE_ + +#include +#include +#include + +#ifndef _PROTOTYPE +#define _PROTOTYPE(x,y) x y +#endif + +typedef int bool; + +#define TRUE 1 +#define FALSE 0 +#define ERR 1 /* general error flag */ +#define OK 0 /* general OK flag */ + +/* Macros. */ +#define box(win,vc,hc) wbox(win,0,0,0,0,vc,hc) +#define addch(ch) waddch(stdscr,ch) +#define mvaddch(y,x,ch) (wmove(stdscr,y,x)==ERR?ERR:waddch(stdscr,ch)) +#define mvwaddch(win,y,x,ch) (wmove(win,y,x)==ERR?ERR:waddch(win,ch)) +#define getch() wgetch(stdscr) +#define mvgetch(y,x) (wmove(stdscr,y,x)==ERR?ERR:wgetch(stdscr)) +#define mvwgetch(win,y,x) (wmove(win,y,x)==ERR?ERR:wgetch(win)) +#define addstr(str) waddstr(stdscr,str) +#define mvaddstr(y,x,str) (wmove(stdscr,y,x)==ERR?ERR:waddstr(stdscr,str)) +#define mvwaddstr(win,y,x,str) (wmove(win,y,x)==ERR?ERR:waddstr(win,str)) +#define getstr(str) wgetstr(stdscr,str) +#define mvgetstr(y,x,str) (wmove(stdscr,y,x)==ERR?ERR:wgetstr(stdscr,str)) +#define mvwgetstr(win,y,x,str) (wmove(win,y,x)==ERR?ERR:wgetstr(win,str)) +#define move(y,x) wmove(stdscr,y,x) +#define clear() wclear(stdscr) +#define erase() werase(stdscr) +#define clrtobot() wclrtobot(stdscr) +#define mvclrtobot(y,x) (wmove(stdscr,y,x)==ERR?ERR:wclrtobot(stdscr)) +#define mvwclrtobot(win,y,x) (wmove(win,y,x)==ERR?ERR:wclrtobot(win)) +#define clrtoeol() wclrtoeol(stdscr) +#define mvclrtoeol(y,x) (wmove(stdscr,y,x)==ERR?ERR:wclrtoeol(stdscr)) +#define mvwclrtoeol(win,y,x) (wmove(win,y,x)==ERR?ERR:wclrtoeol(win)) +#define insertln() winsertln(stdscr) +#define mvinsertln(y,x) (wmove(stdscr,y,x)==ERR?ERR:winsertln(stdscr)) +#define mvwinsertln(win,y,x) (wmove(win,y,x)==ERR?ERR:winsertln(win)) +#define deleteln() wdeleteln(stdscr) +#define mvdeleteln(y,x) (wmove(stdscr,y,x)==ERR?ERR:wdeleteln(stdscr)) +#define mvwdeleteln(win,y,x) (wmove(win,y,x)==ERR?ERR:wdeleteln(win)) +#define refresh() wrefresh(stdscr) +#define inch() winch(stdscr) +#define insch(ch) winsch(stdscr,ch) +#define mvinsch(y,x,ch) (wmove(stdscr,y,x)==ERR?ERR:winsch(stdscr,ch)) +#define mvwinsch(win,y,x,ch) (wmove(win,y,x)==ERR?ERR:winsch(win,ch)) +#define delch() wdelch(stdscr) +#define mvdelch(y,x) (wmove(stdscr,y,x)==ERR?ERR:wdelch(stdscr)) +#define mvwdelch(win,y,x) (wmove(win,y,x)==ERR?ERR:wdelch(win)) +#define standout() wstandout(stdscr) +#define wstandout(win) (win)->_attrs |= A_STANDOUT +#define standend() wstandend(stdscr) +#define wstandend(win) (win)->_attrs &= ~A_STANDOUT +#define attrset(attrs) wattrset(stdscr, attrs) +#define wattrset(win, attrs) (win)->_attrs = (attrs) +#define attron(attrs) wattron(stdscr, attrs) +#define wattron(win, attrs) (win)->_attrs |= (attrs) +#define attroff(attrs) wattroff(stdscr,attrs) +#define wattroff(win, attrs) (win)->_attrs &= ~(attrs) +#define resetty() stty(1, &_orig_tty) +#define getyx(win,y,x) (y = (win)->_cury, x = (win)->_curx) + +/* Video attribute definitions. */ +#define A_BLINK 0x0100 +#define A_BLANK 0 +#define A_BOLD 0x0200 +#define A_DIM 0 +#define A_PROTECT 0 +#define A_REVERSE 0x0400 +#define A_STANDOUT 0x0800 +#define A_UNDERLINE 0x1000 +#define A_ALTCHARSET 0x2000 + +/* Type declarations. */ +typedef struct { + int _cury; /* current pseudo-cursor */ + int _curx; + int _maxy; /* max coordinates */ + int _maxx; + int _begy; /* origin on screen */ + int _begx; + int _flags; /* window properties */ + int _attrs; /* attributes of written characters */ + int _tabsize; /* tab character size */ + bool _clear; /* causes clear at next refresh */ + bool _leave; /* leaves cursor as it happens */ + bool _scroll; /* allows window scrolling */ + bool _nodelay; /* input character wait flag */ + bool _keypad; /* flags keypad key mode active */ + int **_line; /* pointer to line pointer array */ + int *_minchng; /* First changed character in line */ + int *_maxchng; /* Last changed character in line */ + int _regtop; /* Top/bottom of scrolling region */ + int _regbottom; +} WINDOW; + +/* External variables */ +extern int LINES; /* terminal height */ +extern int COLS; /* terminal width */ +extern bool NONL; /* \n causes CR too ? */ +extern WINDOW *curscr; /* the current screen image */ +extern WINDOW *stdscr; /* the default screen window */ +extern struct sgttyb _orig_tty, _tty; + +extern unsigned int ACS_ULCORNER; /* terminal dependent block grafic */ +extern unsigned int ACS_LLCORNER; /* charcters. Forget IBM, we are */ +extern unsigned int ACS_URCORNER; /* independent of their charset. :-) */ +extern unsigned int ACS_LRCORNER; +extern unsigned int ACS_RTEE; +extern unsigned int ACS_LTEE; +extern unsigned int ACS_BTEE; +extern unsigned int ACS_TTEE; +extern unsigned int ACS_HLINE; +extern unsigned int ACS_VLINE; +extern unsigned int ACS_PLUS; +extern unsigned int ACS_S1; +extern unsigned int ACS_S9; +extern unsigned int ACS_DIAMOND; +extern unsigned int ACS_CKBOARD; +extern unsigned int ACS_DEGREE; +extern unsigned int ACS_PLMINUS; +extern unsigned int ACS_BULLET; +extern unsigned int ACS_LARROW; +extern unsigned int ACS_RARROW; +extern unsigned int ACS_DARROW; +extern unsigned int ACS_UARROW; +extern unsigned int ACS_BOARD; +extern unsigned int ACS_LANTERN; +extern unsigned int ACS_BLOCK; + +#ifdef _BIG_MACHINE_ +_PROTOTYPE( char *unctrl, (int _c) ); +_PROTOTYPE( int baudrate, (void)); +_PROTOTYPE( void beep, (void)); +_PROTOTYPE( void cbreak, (void)); +_PROTOTYPE( void clearok, (WINDOW *_win, bool _flag) ); +_PROTOTYPE( void clrscr, (void)); +_PROTOTYPE( void curs_set, (int _visibility) ); +_PROTOTYPE( void delwin, (WINDOW *_win) ); +_PROTOTYPE( void doupdate, (void)); +_PROTOTYPE( void echo, (void)); +_PROTOTYPE( int endwin, (void)); +_PROTOTYPE( int erasechar, (void)); +_PROTOTYPE( void fatal, (char *_s) ); +_PROTOTYPE( int fixterm, (void)); +_PROTOTYPE( void flash, (void)); +_PROTOTYPE( int gettmode, (void)); +_PROTOTYPE( void idlok, (WINDOW *_win, bool _flag) ); +_PROTOTYPE( WINDOW *initscr, (void)); +_PROTOTYPE( void keypad, (WINDOW *_win, bool _flag) ); +_PROTOTYPE( int killchar, (void)); +_PROTOTYPE( void leaveok, (WINDOW *_win, bool _flag) ); +_PROTOTYPE( char *longname, (void)); +_PROTOTYPE( void meta, (WINDOW *_win, bool _flag) ); +_PROTOTYPE( int mvcur, (int _oldy, int _oldx, int _newy, int _newx) ); +_PROTOTYPE( int mvinch, (int _y, int _x) ); +_PROTOTYPE( int mvprintw, (int _y, int _x, char *_fmt, ...) ); +_PROTOTYPE( int mvscanw, (int _y, int _x, char *_fmt, char *_A1, int _A2, + int _A3, int _A4, int _A5) ); +_PROTOTYPE( int mvwin, (WINDOW *_win, int _begy, int _begx) ); +_PROTOTYPE( int mvwinch, (WINDOW *_win, int _y, int _x) ); +_PROTOTYPE( int mvwprintw, (WINDOW *_win, int _y, int _x, char *_fmt, ...) ); +_PROTOTYPE( int mvwscanw, (WINDOW *_win, int _y, int _x, char *_fmt, char *_A1, + int _A2, int _A3, int _A4, int _A5) ); +_PROTOTYPE( WINDOW *newwin, (int _num_lines, int _num_cols, int _y, int _x)); +_PROTOTYPE( void nl, (void)); +_PROTOTYPE( void nocbreak, (void)); +_PROTOTYPE( void nodelay, (WINDOW *_win, bool _flag) ); +_PROTOTYPE( void noecho, (void)); +_PROTOTYPE( void nonl, (void)); +_PROTOTYPE( void noraw, (void)); +_PROTOTYPE( void outc, (int _c) ); +_PROTOTYPE( void overlay, (WINDOW *_win1, WINDOW *_win2) ); +_PROTOTYPE( void overwrite, (WINDOW *_win1, WINDOW *_win2) ); +_PROTOTYPE( void poscur, (int _r, int _c) ); +_PROTOTYPE( int printw, (char *fmt, ...) ); +_PROTOTYPE( void raw, (void)); +_PROTOTYPE( int resetterm, (void)); +_PROTOTYPE( int saveoldterm, (void)); +_PROTOTYPE( int saveterm, (void)); +_PROTOTYPE( int savetty, (void)); +_PROTOTYPE( int scanw, (char *_fmt, char *_A1, int _A2, int _A3, int _A4, + int _A5) ); +_PROTOTYPE( void scroll, (WINDOW *_win) ); +_PROTOTYPE( void scrollok, (WINDOW *_win, bool _flag) ); +_PROTOTYPE( int setscrreg, (int _top, int _bottom) ); +_PROTOTYPE( int setterm, (char *_type) ); +_PROTOTYPE( int setupterm, (void)); +_PROTOTYPE( WINDOW *subwin, (WINDOW *_orig, int _nlines, int _ncols, int _y, + int _x)); +_PROTOTYPE( int tabsize, (int _ts) ); +_PROTOTYPE( void touchwin, (WINDOW *_win) ); +_PROTOTYPE( int waddch, (WINDOW *_win, int _c) ); +_PROTOTYPE( int waddstr, (WINDOW *_win, char *_str) ); +_PROTOTYPE( int wbox, (WINDOW *_win, int _ymin, int _xmin, int _ymax, + int _xmax, unsigned int _v, unsigned int _h) ); +_PROTOTYPE( void wclear, (WINDOW *_win) ); +_PROTOTYPE( int wclrtobot, (WINDOW *_win) ); +_PROTOTYPE( int wclrtoeol, (WINDOW *_win) ); +_PROTOTYPE( int wdelch, (WINDOW *_win) ); +_PROTOTYPE( int wdeleteln, (WINDOW *_win) ); +_PROTOTYPE( void werase, (WINDOW *_win) ); +_PROTOTYPE( int wgetch, (WINDOW *_win) ); +_PROTOTYPE( int wgetstr, (WINDOW *_win, char *_str) ); +_PROTOTYPE( int winch, (WINDOW *_win) ); +_PROTOTYPE( int winsch, (WINDOW *_win, char _c) ); +_PROTOTYPE( int winsertln, (WINDOW *_win) ); +_PROTOTYPE( int wmove, (WINDOW *_win, int _y, int _x) ); +_PROTOTYPE( void wnoutrefresh, (WINDOW *_win) ); +_PROTOTYPE( int wprintw, (WINDOW *win, char *fmt, ...)); +_PROTOTYPE( void wrefresh, (WINDOW *_win) ); +_PROTOTYPE( int wscanw, (WINDOW *_win, char *_fmt, char *_A1, int _A2, int _A3, + int _A4, int _A5) ); +_PROTOTYPE( int wsetscrreg, (WINDOW *_win, int _top, int _bottom) ); +_PROTOTYPE( int wtabsize, (WINDOW *_win, int _ts) ); + +#endif +#define CURSES_H + +#endif diff --git a/src/nos/include/dirent.h b/src/nos/include/dirent.h new file mode 100644 index 00000000..ab97fa13 --- /dev/null +++ b/src/nos/include/dirent.h @@ -0,0 +1,48 @@ +#ifndef __DIRENT_H +#define __DIRENT_H +#ifndef __TYPES_H +#include +#endif + +#ifndef MAXNAMLEN +#define MAXNAMLEN DIRNAMELEN +#endif + +/* Directory stream type. */ +typedef struct { + int dd_fd; /* file descriptor */ + int dd_loc; /* offset in buffer */ + int dd_size; /* # of valid entries in buffer */ + struct dirent *dd_buf; /* -> directory buffer */ +} DIR; /* stream data from opendir() */ + +typedef int (*__dir_select_fn_t) __P ((struct dirent *)); + +typedef int (*__dir_compar_fn_t) __P ((struct dirent **, struct dirent **)); + +struct dirent { + unsigned d_ino; + unsigned d_off; /* ??? off_t - index in directory[] */ + unsigned short d_reclen; + char d_name[MAXNAMLEN+1]; +}; + +extern DIR *opendir __P ((char *__name)); +extern int closedir __P ((DIR * __dirp)); +extern struct dirent *readdir __P ((DIR * __dirp)); +extern void rewinddir __P ((DIR * __dirp)); + +extern void seekdir __P ((DIR * __dirp, off_t __pos)); +extern off_t telldir __P ((DIR * __dirp)); + +/* Scan the directory DIR, calling SELECT on each directory entry. + Entries for which SELECT returns nonzero are individually malloc'd, + sorted using qsort with CMP, and collected in a malloc'd array in + *NAMELIST. Returns the number of entries selected, or -1 on error. + */ +extern int scandir __P ((char *__dir, + struct dirent ***__namelist, + __dir_select_fn_t __select, + __dir_compar_fn_t __compar)); + +#endif /* dirent.h */ diff --git a/src/nos/include/errno.h b/src/nos/include/errno.h new file mode 100644 index 00000000..a0c01173 --- /dev/null +++ b/src/nos/include/errno.h @@ -0,0 +1,75 @@ +#ifndef __ERRNO_H +#define __ERRNO_H +#ifndef __TYPES_H +#include +#endif + +/* Error codes */ /*- if not used */ +#define EPERM 1 /* 1 Operation not permitted */ +#define ENOENT 2 /* 2 No such file or directory */ +#define ESRCH 3 /*-*/ /* 3 No such process */ +#define EINTR 4 /* 4 Interrupted system call */ +#define EIO 5 /* 5 I/O error */ +#define ENXIO 6 /* 6 No such device or address */ +#define E2BIG 7 /* 7 Arg list too long */ +#define ENOEXEC 8 /* 8 Exec format error */ +#define EBADF 9 /* 9 Bad file number */ +#define ECHILD 10 /* 10 No child processes */ +#define EAGAIN 11 /* 11 Try again */ +#define ENOMEM 12 /* 12 Out of memory */ +#define EACCES 13 /* 13 Permission denied */ +#define EFAULT 14 /* 14 Bad address */ +#define ENOTBLK 15 /* 15 Block device required */ +#define EBUSY 16 /* 16 Device or resource busy */ +#define EEXIST 17 /* 17 File exists */ +#define EXDEV 18 /* 18 Cross-device link */ +#define ENODEV 19 /* 19 No such device */ +#define ENOTDIR 20 /* 20 Not a directory */ +#define EISDIR 21 /* 21 Is a directory */ +#define EINVAL 22 /* 22 Invalid argument */ +#define ENFILE 23 /* 23 File table overflow */ +#define EMFILE 24 /*-*/ /* 24 Too many open files */ +#define ENOTTY 25 /*-*/ /* 25 Not a typewriter */ +#define ETXTBSY 26 /*-*/ /* 26 Text file busy */ +#define EFBIG 27 /*-*/ /* 27 File too large */ +#define ENOSPC 28 /* 28 No space left on device */ +#define ESPIPE 29 /* 29 Illegal seek */ +#define EROFS 30 /*-*/ /* 30 Read-only file system */ +#define EMLINK 31 /*-*/ /* 31 Too many links */ +#define EPIPE 32 /* 32 Broken pipe */ +#define EDOM 33 /*-*/ /* 33 Math argument out of domain of func */ +#define ERANGE 34 /*-*/ /* 34 Math result not representable */ +#define EDEADLK 35 /*-*/ /* 35 Resource deadlock would occur */ +#define ENAMETOOLONG 36 /*-*/ /* 36 File name too long */ +#define ENOLCK 37 /*-*/ /* 37 No record locks available */ +#define EINVFNC 38 /* 38 Function not implemented */ +#define ENOTEMPTY 39 /*-*/ /* 39 Directory not empty */ +#define ELOOP 40 /*-*/ /* 40 Too many symbolic links encountered */ +#define ESHELL 41 /*-*/ /* 41 It's a shell script */ +#if 1 /* Nick free bitmap */ +#define EISALIGN 42 /* 42 File is already aligned */ +#define ENOALIGN 43 /* 43 File is not aligned */ +#define ETOOSHORT 44 /* 44 File is too short, or hole */ +#define ENOREGALIGN 45 /* 42 Not a regular or aligned file */ +#define ENOLCKFS 46 /* 45 Not a locking filesystem */ +#define ECORRUPTFS 47 /* 46 Filesystem is corrupt */ +#endif +#define ENOSYS EINVFNC + +#if 1 /* Nick free bitmap */ +#define __ERRORS 46 +#else +#define __ERRORS 40 +#endif + +#define EOVERFLOW 75 /* Value too large for defined data type */ + +extern int sys_nerr; +#if 0 /* Nick please use strerror() instead */ +extern char *sys_errlist[]; +#endif +extern int errno; + +extern char *strerror __P((int _errno)); + +#endif diff --git a/src/nos/include/errno.h% b/src/nos/include/errno.h% new file mode 100644 index 00000000..f505f7af --- /dev/null +++ b/src/nos/include/errno.h% @@ -0,0 +1,132 @@ +#ifndef _I386_ERRNO_H +#define _I386_ERRNO_H + +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Arg list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Try again */ +#define ENOMEM 12 /* Out of memory */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Device or resource busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* File table overflow */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Not a typewriter */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Math argument out of domain of func */ +#define ERANGE 34 /* Math result not representable */ +#define EDEADLK 35 /* Resource deadlock would occur */ +#define ENAMETOOLONG 36 /* File name too long */ +#define ENOLCK 37 /* No record locks available */ +#define ENOSYS 38 /* Function not implemented */ +#define ENOTEMPTY 39 /* Directory not empty */ +#define ELOOP 40 /* Too many symbolic links encountered */ +#define EWOULDBLOCK EAGAIN /* Operation would block */ +#define ENOMSG 42 /* No message of desired type */ +#define EIDRM 43 /* Identifier removed */ +#define ECHRNG 44 /* Channel number out of range */ +#define EL2NSYNC 45 /* Level 2 not synchronized */ +#define EL3HLT 46 /* Level 3 halted */ +#define EL3RST 47 /* Level 3 reset */ +#define ELNRNG 48 /* Link number out of range */ +#define EUNATCH 49 /* Protocol driver not attached */ +#define ENOCSI 50 /* No CSI structure available */ +#define EL2HLT 51 /* Level 2 halted */ +#define EBADE 52 /* Invalid exchange */ +#define EBADR 53 /* Invalid request descriptor */ +#define EXFULL 54 /* Exchange full */ +#define ENOANO 55 /* No anode */ +#define EBADRQC 56 /* Invalid request code */ +#define EBADSLT 57 /* Invalid slot */ + +#define EDEADLOCK EDEADLK + +#define EBFONT 59 /* Bad font file format */ +#define ENOSTR 60 /* Device not a stream */ +#define ENODATA 61 /* No data available */ +#define ETIME 62 /* Timer expired */ +#define ENOSR 63 /* Out of streams resources */ +#define ENONET 64 /* Machine is not on the network */ +#define ENOPKG 65 /* Package not installed */ +#define EREMOTE 66 /* Object is remote */ +#define ENOLINK 67 /* Link has been severed */ +#define EADV 68 /* Advertise error */ +#define ESRMNT 69 /* Srmount error */ +#define ECOMM 70 /* Communication error on send */ +#define EPROTO 71 /* Protocol error */ +#define EMULTIHOP 72 /* Multihop attempted */ +#define EDOTDOT 73 /* RFS specific error */ +#define EBADMSG 74 /* Not a data message */ +#define EOVERFLOW 75 /* Value too large for defined data type */ +#define ENOTUNIQ 76 /* Name not unique on network */ +#define EBADFD 77 /* File descriptor in bad state */ +#define EREMCHG 78 /* Remote address changed */ +#define ELIBACC 79 /* Can not access a needed shared library */ +#define ELIBBAD 80 /* Accessing a corrupted shared library */ +#define ELIBSCN 81 /* .lib section in a.out corrupted */ +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ +#define ELIBEXEC 83 /* Cannot exec a shared library directly */ +#define EILSEQ 84 /* Illegal byte sequence */ +#define ERESTART 85 /* Interrupted system call should be restarted */ +#define ESTRPIPE 86 /* Streams pipe error */ +#define EUSERS 87 /* Too many users */ +#define ENOTSOCK 88 /* Socket operation on non-socket */ +#define EDESTADDRREQ 89 /* Destination address required */ +#define EMSGSIZE 90 /* Message too long */ +#define EPROTOTYPE 91 /* Protocol wrong type for socket */ +#define ENOPROTOOPT 92 /* Protocol not available */ +#define EPROTONOSUPPORT 93 /* Protocol not supported */ +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ +#define EPFNOSUPPORT 96 /* Protocol family not supported */ +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ +#define EADDRINUSE 98 /* Address already in use */ +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ +#define ENETDOWN 100 /* Network is down */ +#define ENETUNREACH 101 /* Network is unreachable */ +#define ENETRESET 102 /* Network dropped connection because of reset */ +#define ECONNABORTED 103 /* Software caused connection abort */ +#define ECONNRESET 104 /* Connection reset by peer */ +#define ENOBUFS 105 /* No buffer space available */ +#define EISCONN 106 /* Transport endpoint is already connected */ +#define ENOTCONN 107 /* Transport endpoint is not connected */ +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ +#define ETOOMANYREFS 109 /* Too many references: cannot splice */ +#define ETIMEDOUT 110 /* Connection timed out */ +#define ECONNREFUSED 111 /* Connection refused */ +#define EHOSTDOWN 112 /* Host is down */ +#define EHOSTUNREACH 113 /* No route to host */ +#define EALREADY 114 /* Operation already in progress */ +#define EINPROGRESS 115 /* Operation now in progress */ +#define ESTALE 116 /* Stale NFS file handle */ +#define EUCLEAN 117 /* Structure needs cleaning */ +#define ENOTNAM 118 /* Not a XENIX named type file */ +#define ENAVAIL 119 /* No XENIX semaphores available */ +#define EISNAM 120 /* Is a named type file */ +#define EREMOTEIO 121 /* Remote I/O error */ +#define EDQUOT 122 /* Quota exceeded */ + +#define ENOMEDIUM 123 /* No medium found */ +#define EMEDIUMTYPE 124 /* Wrong medium type */ + +#endif diff --git a/src/nos/include/fcntl.h b/src/nos/include/fcntl.h new file mode 100644 index 00000000..e5d1b28b --- /dev/null +++ b/src/nos/include/fcntl.h @@ -0,0 +1,36 @@ +#ifndef __FCNTL_H +#define __FCNTL_H + +#ifndef __TYPES_H /* Nick, for __P and uint definitions */ +#include +#endif + +#define O_RDONLY 0 +#define O_WRONLY 1 +#define O_RDWR 2 + +/* Flag values for open only */ +#define O_CREAT 0x0100 /* create and open file */ +#define O_TRUNC 0x0200 /* open with truncation */ +#define O_NEW 0x0400 /* create only if not exist */ +#define O_SYMLINK 0x0800 /* open symlink as file */ + +/* a file in append mode may be written to only at its end. */ +#define O_APPEND 0x2000 /* to end of file */ +#define O_EXCL 0x4000 /* exclusive open */ +#define O_BINARY 0x8000 /* not used in unix */ + +#ifndef SEEK_SET +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif + +#ifndef SKIP_SYSCALLS +/* extra prototypes added by Nick */ +/* just to make extra certain IAR doesn't use regparms */ +extern int ioctl __P((int fd, int request, ...)); +extern int open __P((const char *name, int flag, ...)); /* Nick uint */ +#endif + +#endif /* __FCNTL_H */ diff --git a/src/nos/include/features.h b/src/nos/include/features.h new file mode 100644 index 00000000..255a89d6 --- /dev/null +++ b/src/nos/include/features.h @@ -0,0 +1,61 @@ +#ifndef __FEATURES_H +#define __FEATURES_H + +#if 0 /* Nick, for IAR compiler (see signal.h)... DOESN'T WORK */ +#pragma language=extended +#endif + +#ifndef __STDC__ +#ifdef HI_TECH_C +#define __STDC__ 1 +#endif +#endif + +/* Define prototypes shell for non-ANSI compilers */ +#ifdef __TURBOC__ + +#define VOID void +#define __P(a) a +#define __const const + +void __cli__(); +void __sti__(); +void __int__(int); +void __emit__(); + +#define di() __cli__() +#define ei() __sti__() + +#define geninterrupt(i) __int__(i) +#define FP_OFF(fp) ((unsigned)(fp)) +#define FP_SEG(fp) ((unsigned)((unsigned long)(fp) >> 16)) + +#else +#if 1 /* Nick def __STDC__ */ + +#ifndef VOID +#define VOID void +#endif +#ifndef __P +#define __P(a) a +#endif +#define __const const + +#else /* K&R */ + +#ifndef VOID +#define VOID +#endif +#ifndef __P +#define __P(a) () +#endif +#define __const +#define volatile +#define void char + +#endif /* __STDC__ */ +#endif /* __TURBOC__ */ + +#include + +#endif diff --git a/src/nos/include/float.h b/src/nos/include/float.h new file mode 100644 index 00000000..84094274 --- /dev/null +++ b/src/nos/include/float.h @@ -0,0 +1,174 @@ +/* Characteristics of floating types */ + +#ifndef _FLOAT_H +#define _FLOAT_H + +#ifdef HI_TECH_C + +#define DBL_RADIX 2 /* radix of exponent for a double */ +#define DBL_ROUNDS 0 /* doubles don't round when converted to int */ +#define FLT_RADIX 2 /* radix of float exponent */ +#define FLT_ROUNDS 0 /* float also truncates to int */ + +#define FLT_MANT_DIG 24 /* 24 bits in mantissa */ +#define DBL_MANT_DIG 24 /* ditto for double */ +#define DBL_MANT_DIG 24 /* ditto long double */ +#define FLT_EPSILON 1.19209290e-07 /* smallest x, x+1.0 != 1.0 */ +#define DBL_EPSILON 1.19209290e-07 /* smallest x, x+1.0 != 1.0 */ +#define FLT_DIG 6 /* decimal significant digs */ +#define DBL_DIG 6 +#define FLT_MIN_EXP -63 /* min binary exponent */ +#define DBL_MIN_EXP -63 +#define FLT_MIN 1.0842021e-19 /* smallest floating number */ +#define DBL_MIN 1.0842021e-19 +#define FLT_MIN_10_EXP -19 +#define DBL_MIN_10_EXP -19 +#define FLT_MAX_EXP 63 /* max binary exponent */ +#define DBL_MAX_EXP 63 +#define FLT_MAX 9.223369e18 /* max floating number */ +#define DBL_MAX 9.223369e18 +#define FLT_MAX_10_EXP 18 /* max decimal exponent */ +#define DBL_MAX_10_EXP 18 + +/* long double equates to double */ + + +#define LDBL_MANT_DIG DBL_MANT_DIG +#define LDBL_EPSILON DBL_EPSILON +#define LDBL_DIG DBL_DIG +#define LDBL_MIN_EXP DBL_MIN_EXP +#define LDBL_MIN DBL_MIN +#define LDBL_MIN_10_EXP DBL_MIN_10_EXP +#define LDBL_MAX_EXP DBL_MAX_EXP +#define LDBL_MAX DBL_MAX +#define LDBL_MAX_10_EXP DBL_MAX_10_EXP + +#endif + +#ifdef __TURBO_C__ + +#if __STDC__ +#define _Cdecl +#else +#define _Cdecl cdecl +#endif + +#define FLT_RADIX 2 +#define FLT_ROUNDS 1 +#define FLT_GUARD 1 +#define FLT_NORMALIZE 1 + +#define DBL_DIG 15 +#define FLT_DIG 6 +#define LDBL_DIG 19 + +#define DBL_MANT_DIG 53 +#define FLT_MANT_DIG 24 +#define LDBL_MANT_DIG 64 + +#define DBL_EPSILON 2.2204460492503131E-16 +#define FLT_EPSILON 1.19209290E-07F +#define LDBL_EPSILON 1.084202172485504E-19 + +/* smallest positive IEEE normal numbers */ +#define DBL_MIN 2.2250738585072014E-308 +#define FLT_MIN 1.17549435E-38F +#define LDBL_MIN _tiny_ldble + +#define DBL_MAX _huge_dble +#define FLT_MAX _huge_flt +#define LDBL_MAX _huge_ldble + +#define DBL_MAX_EXP +1024 +#define FLT_MAX_EXP +128 +#define LDBL_MAX_EXP +16384 + +#define DBL_MAX_10_EXP +308 +#define FLT_MAX_10_EXP +38 +#define LDBL_MAX_10_EXP +4932 + +#define DBL_MIN_10_EXP -307 +#define FLT_MIN_10_EXP -37 +#define LDBL_MIN_10_EXP -4931 + +#define DBL_MIN_EXP -1021 +#define FLT_MIN_EXP -125 +#define LDBL_MIN_EXP -16381 + +extern float _Cdecl _huge_flt; +extern double _Cdecl _huge_dble; +extern long double _Cdecl _huge_ldble; +extern long double _Cdecl _tiny_ldble; + +unsigned int _Cdecl _clear87(void); +unsigned int _Cdecl _control87(unsigned int new, unsigned int mask); +void _Cdecl _fpreset(void); +unsigned int _Cdecl _status87(void); + +/* 8087/80287 Status Word format */ + +#define SW_INVALID 0x0001 /* Invalid operation */ +#define SW_DENORMAL 0x0002 /* Denormalized operand */ +#define SW_ZERODIVIDE 0x0004 /* Zero divide */ +#define SW_OVERFLOW 0x0008 /* Overflow */ +#define SW_UNDERFLOW 0x0010 /* Underflow */ +#define SW_INEXACT 0x0020 /* Precision (Inexact result) */ + +/* 8087/80287 Control Word format */ + +#define MCW_EM 0x003f /* interrupt Exception Masks */ +#define EM_INVALID 0x0001 /* invalid */ +#define EM_DENORMAL 0x0002 /* denormal */ +#define EM_ZERODIVIDE 0x0004 /* zero divide */ +#define EM_OVERFLOW 0x0008 /* overflow */ +#define EM_UNDERFLOW 0x0010 /* underflow */ +#define EM_INEXACT 0x0020 /* inexact (precision) */ + +#define MCW_IC 0x1000 /* Infinity Control */ +#define IC_AFFINE 0x1000 /* affine */ +#define IC_PROJECTIVE 0x0000 /* projective */ + +#define MCW_RC 0x0c00 /* Rounding Control */ +#define RC_CHOP 0x0c00 /* chop */ +#define RC_UP 0x0800 /* up */ +#define RC_DOWN 0x0400 /* down */ +#define RC_NEAR 0x0000 /* near */ + +#define MCW_PC 0x0300 /* Precision Control */ +#define PC_24 0x0000 /* 24 bits */ +#define PC_53 0x0200 /* 53 bits */ +#define PC_64 0x0300 /* 64 bits */ + +/* 8087/80287 Initial Control Word */ +/* use affine infinity, mask underflow and precision exceptions */ + +#define CW_DEFAULT (RC_NEAR+PC_64+IC_AFFINE+EM_UNDERFLOW+EM_INEXACT) + +/* + SIGFPE signal error types (for integer & float exceptions). +*/ +#define FPE_INTOVFLOW 126 /* 80x86 Interrupt on overflow */ +#define FPE_INTDIV0 127 /* 80x86 Integer divide by zero */ + +#define FPE_INVALID 129 /* 80x87 invalid operation */ +#define FPE_ZERODIVIDE 131 /* 80x87 divide by zero */ +#define FPE_OVERFLOW 132 /* 80x87 arithmetic overflow */ +#define FPE_UNDERFLOW 133 /* 80x87 arithmetic underflow */ +#define FPE_INEXACT 134 /* 80x87 precision loss */ +#define FPE_EXPLICITGEN 140 /* When SIGFPE is raise()'d */ + +/* + SIGSEGV signal error types. +*/ +#define SEGV_BOUND 10 /* A BOUND violation (SIGSEGV) */ +#define SEGV_EXPLICITGEN 11 /* When SIGSEGV is raise()'d */ + +/* + SIGILL signal error types. +*/ +#define ILL_EXECUTION 20 /* Illegal operation exception */ +#define ILL_EXPLICITGEN 21 /* When SIGILL is raise()'d */ + +#endif + +#endif \ No newline at end of file diff --git a/src/nos/include/getopt.h b/src/nos/include/getopt.h new file mode 100644 index 00000000..9ee81e27 --- /dev/null +++ b/src/nos/include/getopt.h @@ -0,0 +1,13 @@ +#ifndef __GETOPT_H +#define __GETOPT_H +#ifndef __TYPES_H +#include +#endif + +extern char *optarg; +extern int opterr; +extern int optind; + +extern int getopt __P((int argc, char **argv, char *shortopts)); + +#endif /* __GETOPT_H */ diff --git a/src/nos/include/grp.h b/src/nos/include/grp.h new file mode 100644 index 00000000..844546ed --- /dev/null +++ b/src/nos/include/grp.h @@ -0,0 +1,35 @@ +#ifndef __GRP_H +#define __GRP_H +#ifndef __TYPES_H +#include +#endif +#include + +#define GR_MAX_GROUPS 32 +#define GR_MAX_MEMBERS 16 + +/* The group structure */ +struct group { + char *gr_name; /* Group name. */ + char *gr_passwd; /* Password. */ + int gr_gid; /* Group ID. */ + char **gr_mem; /* Member list. */ +}; + +extern void setgrent __P((void)); +extern void endgrent __P((void)); +extern struct group *getgrent __P((void)); + +extern struct group *getgrgid __P((int gid)); +extern struct group *getgrnam __P((char * name)); + +extern struct group * fgetgrent __P((FILE * file)); + +extern int setgroups __P((size_t n, int *groups)); +extern int initgroups __P((char * user, int gid)); + +extern struct group * __getgrent __P((int grp_fd)); + +extern char *_path_group; + +#endif /* __GRP_H */ diff --git a/src/nos/include/intrz80.h$ b/src/nos/include/intrz80.h$ new file mode 100644 index 00000000..a93ab076 --- /dev/null +++ b/src/nos/include/intrz80.h$ @@ -0,0 +1,46 @@ +/* - intrz80.h - + + Intrinsic functions for the ICCZ80 + + Version: 4.00 [IHAT] + +*/ + +#ifndef _INTRINS_INCLUDED +#define _INTRINS_INCLUDED + +#pragma language=extended + +#if __TID__ & 0x8000 +#pragma function=intrinsic(0) +#endif + + +void enable_interrupt(void); +void disable_interrupt(void); +unsigned char input(unsigned short); +void output(unsigned short, unsigned char); +void halt(void); +void interrupt_mode_0(void); +void interrupt_mode_1(void); +void interrupt_mode_2(void); +void load_I_register(unsigned char); +unsigned char dump_I_register(void); +void _opc(unsigned char); +long address_24_of(void *); +void input_block_inc(unsigned char, unsigned char *, unsigned char); +void input_block_dec(unsigned char, unsigned char *, unsigned char); +void output_block_inc(unsigned char, unsigned char *, unsigned char); +void output_block_dec(unsigned char, unsigned char *, unsigned char); +unsigned char input8(unsigned char); +void output8(unsigned char, unsigned char); + +/* HD64180/Z8018X functions */ +void sleep(void); +void output_memory_block_inc(unsigned char, unsigned char *, unsigned char); +void output_memory_block_dec(unsigned char, unsigned char *, unsigned char); +#if __TID__ & 0x8000 +#pragma function=default +#endif + +#endif diff --git a/src/nos/include/libintl.h b/src/nos/include/libintl.h new file mode 100644 index 00000000..bfd93d16 --- /dev/null +++ b/src/nos/include/libintl.h @@ -0,0 +1,50 @@ +/* libintl.h by Nick for NOS/UZI project */ + +#ifndef __LIBINTL_H +#define __LIBINTL_H + +#ifdef ZILOG + +#include +#include + +typedef void _char(void); +#define gettext _gettext +int _dprintf(int level, _char *format, ...); +int _vdprintf(int level, _char *format, va_list arguments); +int _fprintf(FILE *stream, _char *format, ...); +int _vfprintf(FILE *stream, _char *format, va_list arguments); +int _fputs(_char *string, FILE *stream); +int _printf(_char *format, ...); +int _vprintf(_char *format, va_list arguments); +int _puts(_char *string); +char *_strcpy(char *buffer, _char *string); +int _strlen(_char *string); +#define _strdup(string) ((char *)_gettext(string)) +int _strncmp(const char *buffer, _char *string, size_t count); +char *_strncpy(char *buffer, _char *string, size_t count); + +#else + +#define _char const char +#define N_ +#define _ gettext +#define _dprintf dprintf +#define _vdprintf vdprintf +#define _fprintf fprintf +#define _vfprintf vfprintf +#define _fputs fputs +#define _printf printf +#define _vprintf vprintf +#define _puts puts +#define _strcpy strcpy +#define _strdup strdup +#define _strlen strlen +#define _strncmp strncmp +#define _strncpy strncpy +#endif + +const char *gettext(_char *string); + +#endif /* __LIBINTL_H */ + diff --git a/src/nos/include/limits.h b/src/nos/include/limits.h new file mode 100644 index 00000000..9a41efe0 --- /dev/null +++ b/src/nos/include/limits.h @@ -0,0 +1,55 @@ +#ifndef __LIMITS_H +#define __LIMITS_H + +#ifdef __TURBOC__ + +#define CHAR_MAX 127 /* maximum char value */ +#define CHAR_MIN (-127) /* mimimum char value */ +#define SCHAR_MAX 127 /* maximum signed char value */ +#define SCHAR_MIN (-127) /* minimum signed char value */ +#define CHAR_BIT 8 /* number of bits in a char */ + +#define SHRT_MAX 32767 /* maximum (signed) short value */ +#define SHRT_MIN (-32767) /* minimum (signed) short value */ +#define INT_MAX 32767 /* maximum (signed) int value */ +#define INT_MIN (-32767) /* minimum (signed) int value */ + +#define LONG_MAX 2147483647 /* maximum (signed) long value */ +#define LONG_MIN (-2147483647) /* minimum (signed) long value */ + +#define UCHAR_MAX 255 /* maximum unsigned char value */ +#define USHRT_MAX 0xffff /* maximum unsigned short value */ +#define UINT_MAX 0xffff /* maximum unsigned int value */ +#define ULONG_MAX 0xffffffff /* maximum unsigned long value */ + +#ifndef RAND_MAX +#define RAND_MAX INT_MAX +#endif + +#else + +#define CHAR_MAX 127 /* maximum char value */ +#define CHAR_MIN (-127) /* mimimum char value */ +#define SCHAR_MAX 127 /* maximum signed char value */ +#define SCHAR_MIN (-127) /* minimum signed char value */ +#define CHAR_BIT 8 /* number of bits in a char */ + +#define SHRT_MAX 32767 /* maximum (signed) short value */ +#define SHRT_MIN (-32767) /* minimum (signed) short value */ +#define INT_MAX 32767 /* maximum (signed) int value */ +#define INT_MIN (-32767) /* minimum (signed) int value */ + +#define LONG_MAX 2147483647 /* maximum (signed) long value */ +#define LONG_MIN (-2147483647) /* minimum (signed) long value */ + +#define UCHAR_MAX 255 /* maximum unsigned char value */ +#define USHRT_MAX 0xffff /* maximum unsigned short value */ +#define UINT_MAX 0xffff /* maximum unsigned int value */ +#define ULONG_MAX 0xffffffff /* maximum unsigned long value */ + +#ifndef RAND_MAX +#define RAND_MAX INT_MAX +#endif +#endif + +#endif diff --git a/src/nos/include/malloc.h b/src/nos/include/malloc.h new file mode 100644 index 00000000..cc48cfa5 --- /dev/null +++ b/src/nos/include/malloc.h @@ -0,0 +1,13 @@ +#ifndef __MALLOC_H +#define __MALLOC_H +#ifndef __TYPES_H +#include +#endif + +extern void free __P((void *)); +extern void *malloc __P((size_t)); +extern void *realloc __P((void *, size_t)); +extern void *calloc __P((size_t, size_t)); +extern void *alloca __P((size_t)); + +#endif diff --git a/src/nos/include/math.h b/src/nos/include/math.h new file mode 100644 index 00000000..5ad0f609 --- /dev/null +++ b/src/nos/include/math.h @@ -0,0 +1,34 @@ +/* + */ + +#ifndef _MATH_H +#define _MATH_H + +extern double fabs(double); +extern double floor(double); +extern double ceil(double); +extern double modf(double, double *); +extern double frexp(double, int *); +extern double ldexp(double, int); +extern double atof(char *); + +extern double sqrt(double); + +extern double sin(double); +extern double cos(double); +extern double tan(double); +extern double asin(double); +extern double acos(double); +extern double atan(double); +extern double atan2(double, double); +extern double sinh(double); +extern double cosh(double); +extern double tanh(double); + +extern double log(double); +extern double log10(double); +extern double pow(double, double); +extern double exp(double); + +extern double eval_poly(double, double *, int); +#endif diff --git a/src/nos/include/mem.h b/src/nos/include/mem.h new file mode 100644 index 00000000..c14a7e14 --- /dev/null +++ b/src/nos/include/mem.h @@ -0,0 +1,54 @@ +#ifndef __MEM_H +#define __MEM_H +#ifndef __TYPES_H +#include +#endif +#include + +#ifdef _MSX_DOS /* HI-TECH-C/MSX-DOS MEM.H */ + +#ifndef _STDDEF +typedef int ptrdiff_t; /* result type of pointer difference */ +typedef unsigned size_t; /* type yielded by sizeof */ +#define _STDDEF +#define offsetof(ty, mem) ((int)&(((ty *)0)->mem)) +#endif /* _STDDEF Nick */ + +#ifndef NULL +#define NULL ((void *)0) +#endif /* NULL Nick */ + +extern int errno; /* system error number */ + +extern void * memcpy __P ((void *, void *, size_t)); +extern void * memmove __P ((void *, void *, size_t)); +extern int memcmp __P ((void *, void *, size_t)); +extern void * memchr __P ((void *, int, size_t)); +extern void * memset __P ((void *, int, size_t)); + +#else /* UZIX-hosted MEM.H */ + +/* Basic mem functions */ +extern void * memcpy __P ((void*, void*, size_t)); +extern void * memccpy __P ((void*, void*, int, size_t)); +extern void * memchr __P ((void*, int, size_t)); +extern void * memset __P ((void*, int, size_t)); +extern int memcmp __P ((void*, void*, size_t)); +extern void * memmove __P ((void*, void*, size_t)); + +/* BSDisms */ +#define index strchr +#define rindex strrchr +#define strcasecmp stricmp +#define strncasecmp strnicmp + +#ifdef z80 +#pragma inline(memcpy) +#pragma inline(memset) +#pragma inline(strcpy) +#pragma inline(strlen) +#pragma inline(strcmp) +#endif + +#endif /* END OF DEFINITION MEM.H */ +#endif diff --git a/src/nos/include/memory.h b/src/nos/include/memory.h new file mode 100644 index 00000000..05041a20 --- /dev/null +++ b/src/nos/include/memory.h @@ -0,0 +1,3 @@ +#ifndef __STRING_H +#include +#endif diff --git a/src/nos/include/ncurses.h b/src/nos/include/ncurses.h new file mode 100644 index 00000000..5e275b74 --- /dev/null +++ b/src/nos/include/ncurses.h @@ -0,0 +1,7 @@ +/* + ncurses.h + + just a fake - equal to curses.h +*/ + +#include \ No newline at end of file diff --git a/src/nos/include/nos/ahdlc.h b/src/nos/include/nos/ahdlc.h new file mode 100644 index 00000000..b76a0655 --- /dev/null +++ b/src/nos/include/nos/ahdlc.h @@ -0,0 +1,28 @@ +#ifndef _AHDLC_H +#define _AHDLC_H +#include "global.h" +#include "mbuf.h" + +/* Asynch HDLC receiver control block */ +struct ahdlc { + int escaped; /* Escape char (0x7d) just seen */ + int hunt; /* Flushing input until next flag */ + struct mbuf *inframe; /* Current frame being reassembled */ + int maxsize; /* Maximum packet size */ + uint16 fcs; /* current CRC value */ + int32 rxframes; /* Valid frames received */ + int32 aborts; /* Aborts seen */ + int32 toobigs; /* Frames larger than maxsize */ + int32 crcerrs; /* Frames with CRC errors */ + int32 runts; /* Frames shorter than 2 bytes */ +}; +#define HDLC_ESC_ASYNC 0x7d /* Escapes special chars (0x7d, 0x7e) */ +#define HDLC_FLAG 0x7e /* Ends each frame */ +#define HDLC_ESC_COMPL 0x20 /* XORed with special chars in data */ + +void init_hdlc(struct ahdlc *,int); +struct mbuf *ahdlcrx(struct ahdlc *,uint8); +struct mbuf *ahdlctx(struct mbuf *); + +#endif /* _AHDLC_H */ + diff --git a/src/nos/include/nos/arcnet.h b/src/nos/include/nos/arcnet.h new file mode 100644 index 00000000..a40a81b7 --- /dev/null +++ b/src/nos/include/nos/arcnet.h @@ -0,0 +1,44 @@ +/* Generic ARCnet constants and templates */ + +#ifndef _ARCNET_H +#define _ARCNET_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#define AADDR_LEN 1 +/* Format of an ARCnet header */ +struct arc { + uint8 source[AADDR_LEN]; + uint8 dest[AADDR_LEN]; + uint8 type; +}; +#define ARCLEN 3 + +/* ARCnet broadcast address */ +extern uint8 ARC_bdcst[]; + +/* ARCnet type fields */ +#define ARC_IP 0xf0 /* Type field for IP */ +#define ARC_ARP 0xf1 /* Type field for ARP */ + +/* In file arcnet.c: */ +void htonarc(struct arc *arc,struct mbuf **data); +int ntoharc(struct arc *arc,struct mbuf **bpp); +char *parc(char *out,uint8 *addr); +int garc(uint8 *out,char *cp); +int anet_send(struct mbuf **bp,struct iface *iface,int32 gateway,uint8 tos); +int anet_output(struct iface *iface,uint8 dest[],uint8 source[],uint16 type, + struct mbuf **data); +void aproc(struct iface *iface,struct mbuf **bp); + +#endif /* _ARCNET_H */ diff --git a/src/nos/include/nos/arp.h b/src/nos/include/nos/arp.h new file mode 100644 index 00000000..7d0f5638 --- /dev/null +++ b/src/nos/include/nos/arp.h @@ -0,0 +1,125 @@ +#ifndef _ARP_H +#define _ARP_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _TIMER_H +#include "timer.h" +#endif + +/* Lifetime of a valid ARP entry */ +#define ARPLIFE 900 /* 15 minutes */ +/* Lifetime of a pending ARP entry */ +#define PENDTIME 15 /* 15 seconds */ + +/* ARP definitions (see RFC 826) */ + +#define ARPLEN 16 /* Size of ARP hdr, minus hardware addresses */ + +/* Address size definitions */ +#define IPALEN 4 /* Length in bytes of an IP address */ +#define MAXHWALEN 20 /* Maximum length of a hardware address */ + +/* ARP opcodes */ +enum arp_opcode { + ARP_REQUEST=1, + ARP_REPLY, + REVARP_REQUEST, + REVARP_REPLY +}; +/* Hardware types */ +enum arp_hwtype { + ARP_NETROM=0, /* Fake for NET/ROM (never actually sent) */ + ARP_ETHER, /* Assigned to 10 megabit Ethernet */ + ARP_EETHER, /* Assigned to experimental Ethernet */ + ARP_AX25, /* Assigned to AX.25 Level 2 */ + ARP_PRONET, /* Assigned to PROnet token ring */ + ARP_CHAOS, /* Assigned to Chaosnet */ + ARP_IEEE802, /* Who uses this? */ + ARP_ARCNET, + ARP_APPLETALK +}; +extern char *Arptypes[]; /* Type fields in ASCII, defined in arpcmd */ +#define NHWTYPES 9 + +/* Table of hardware types known to ARP */ +struct arp_type { + uint16 hwalen; /* Hardware length */ + uint16 iptype; /* Hardware type field for IP */ + uint16 arptype; /* Hardware type field for ARP */ + uint16 pendtime; /* # secs to wait pending response */ + uint8 *bdcst; /* Hardware broadcast address */ + char *(*format)(char *,uint8 *); + /* Function that formats addresses */ + int (*scan)(uint8 *,char *); + /* Reverse of format */ +}; +extern struct arp_type Arp_type[]; + +/* Format of an ARP request or reply packet. From p. 3 */ +struct arp { + enum arp_hwtype hardware; /* Hardware type */ + uint16 protocol; /* Protocol type */ + uint8 hwalen; /* Hardware address length, bytes */ + uint8 pralen; /* Length of protocol address */ + enum arp_opcode opcode; /* ARP opcode (request/reply) */ + uint8 shwaddr[MAXHWALEN]; /* Sender hardware address field */ + int32 sprotaddr; /* Sender Protocol address field */ + uint8 thwaddr[MAXHWALEN]; /* Target hardware address field */ + int32 tprotaddr; /* Target protocol address field */ +}; + +/* Format of ARP table */ +struct arp_tab { + struct arp_tab *next; /* Doubly-linked list pointers */ + struct arp_tab *prev; + struct timer timer; /* Time until aging this entry */ + struct mbuf *pending; /* Queue of datagrams awaiting resolution */ + int32 ip_addr; /* IP Address, host order */ + enum arp_hwtype hardware; /* Hardware type */ + enum { + ARP_PENDING, /* Incomplete */ + ARP_VALID /* Complete */ + } state; + uint8 *hw_addr; /* Hardware address */ + unsigned int pub:1; /* Respond to requests for this entry? */ +}; +extern struct arp_tab *Arp_tab[]; + +struct arp_stat { + unsigned recv; /* Total number of ARP packets received */ + unsigned badtype; /* Incoming requests for unsupported hardware */ + unsigned badlen; /* Incoming length field(s) didn't match types */ + unsigned badaddr; /* Bogus incoming addresses */ + unsigned inreq; /* Incoming requests for us */ + unsigned replies; /* Replies sent */ + unsigned outreq; /* Outoging requests sent */ +}; +extern struct arp_stat Arp_stat; + +/* In arp.c: */ +struct arp_tab *arp_add(int32 ipaddr,enum arp_hwtype hardware,uint8 *hw_addr, + int pub); +void arp_drop(void *p); +int arp_init(unsigned int hwtype,int hwalen,int iptype,int arptype, + int pendtime,uint8 *bdcst,char *(*format)(char *,uint8 *), + int (*scan)(uint8 *,char *) ); +void arp_input(struct iface *iface,struct mbuf **bpp); +struct arp_tab *arp_lookup(enum arp_hwtype hardware,int32 ipaddr); +uint8 *res_arp(struct iface *iface,enum arp_hwtype hardware,int32 target,struct mbuf **bpp); + +/* In arphdr.c: */ +struct mbuf *htonarp(struct arp *arp); +int ntoharp(struct arp *arp,struct mbuf **bpp); + +#endif /* _ARP_H */ diff --git a/src/nos/include/nos/asci.h b/src/nos/include/nos/asci.h new file mode 100644 index 00000000..a2e203ff --- /dev/null +++ b/src/nos/include/nos/asci.h @@ -0,0 +1,229 @@ +/* Various I/O definitions specific to asynch I/O on the IBM PC */ +#ifndef _ASCI_H +#define _ASCI_H + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _PROC_H +#include "proc.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +/* Output pseudo-dma control structure */ +struct dma { + uint8 *data; /* current output pointer */ + unsigned short cnt; /* byte count remaining */ + volatile uint8 busy; /* transmitter active */ +}; + +/* Read fifo control structure */ +struct fifo { + uint8 *buf; /* Ring buffer */ + unsigned bufsize; /* Size of ring buffer */ + uint8 *wp; /* Write pointer */ + uint8 *rp; /* Read pointer */ + volatile unsigned short cnt; /* count of characters in buffer */ + unsigned short hiwat; /* High water mark */ + long overrun; /* count of sw fifo buffer overruns */ +}; + +/* Asynch controller control block */ +struct asy { + struct iface *iface; + struct fifo fifo; + int trigchar; /* Fifo trigger character */ + + struct dma dma; + + unsigned addr; /* Base I/O address */ + int vec; /* Interrupt vector */ + long speed; /* Line speed in bits per second */ + + struct { /* Previous configuration saved at startup */ + INTERRUPT (*vec)(void); + /* Original interrupt vector [cs:pc] */ + uint8 mask; /* 8259 mask */ +#if 0 + uint8 divh,divl; /* baud rate divisor */ +#endif + uint8 cntla; /* line control reg */ + uint8 stat; /* Interrupt enable register */ +#if 0 + uint8 mcr; /* modem control bits */ +#endif + uint8 cntlb; /* modem status bits */ +#if 0 + uint8 iir; /* Interrupt ind register (for fifo bits) */ +#endif + } save; + +#if 0 + uint8 is_16550a; /* 16550A detected */ +#endif + uint8 cntlb; /* Copy of current modem status register */ + uint8 cts; /* obey CTS lead for xmit flow control */ + uint8 rlsd; /* RLSD (CD) indicates line state */ + uint8 chain; /* Do interrupt vector chaining */ + + long fifotimeouts; /* hw fifo character timeout int's */ + long rxints; /* receive interrupts */ + long txints; /* transmit interrupts */ + long rxchar; /* Received characters */ + long overrun; /* Receiver hardware overrun errors */ + long txchar; /* Transmitted characters */ + long rxhiwat; /* High water mark on hardware rx fifo */ + long msint_count; /* Count of modem status interrupts */ + long txto; /* Count of TX interrupt timeouts */ + long cdchanges; /* Count of CD changes */ +#if 1 /* Nick */ + int suspend_count; /* packet mode enabled only when count == 0 */ + int trigchar_save; /* trigchar save location valid if count > 0 */ +#endif +}; + +extern int Nasy; /* Actual number of asynch lines */ +extern struct asy Asy[]; + +#if 0 +struct fport { + int base; + int irq; + struct asy *asy[4]; /* Pointers to regular asy entries */ + int iv; /* Interrupt demux port */ +}; +extern int Nfport; +extern struct fport Fport[]; + +#define BAUDCLK 115200L /* PS=0, DR=0, 18.432 Mhz / (16 * 10) */ +#endif + +/* National 8250 asynch UART definitions */ +/* Control/status register offsets from base address */ +#define CNTLA 0 /* Line control register */ +#define CNTLB 2 /* Modem status register */ +#define STAT 4 /* Line status / Interrupt enable register */ +#define TDR 6 /* Transmitter holding register */ +#define RDR 8 /* Receiver buffer register */ + +#if 0 +#define DLL 0 /* Divisor latch LSB */ +#define DLM 1 /* Divisor latch MSB */ +#define IIR 2 /* Interrupt ident register */ +#define FCR 2 /* FIFO control register (16550A only) */ +#define MCR 4 /* Modem control register */ +#endif + +/* 8250 Line Control Register */ +#define CNTLA_RE 0x40 /* Receive enable */ +#define CNTLA_TE 0x20 /* Transmit enable */ +#define CNTLA_RTS_CKA1D 0x10 /* =1 RTS off (chan0), =1 TEND0 select (chan1) +#define CNTLA_7BITS 0x00 /* 7 bit words */ +#define CNTLA_8BITS 0x04 /* 8 bit words */ +#define CNTLA_BIT_MASK 0x04 /* mask of bit size */ +#define CNTLA_PEN 0x02 /* Parity enable */ +#define CNTLA_NSB 0x01 /* Number of stop bits */ + +#if 0 +#define CNTLA_SP 0x20 /* Stick parity */ +#define CNTLA_SB 0x40 /* Set break */ +#define CNTLA_DLAB 0x80 /* Divisor Latch Access Bit */ +#endif + +/* 8250 Line Status Register */ +#define STAT_RDRF 0x80 /* Data ready */ +#define STAT_OVRN 0x40 /* Overrun error */ +#define STAT_PE 0x20 /* Parity error */ +#define STAT_FE 0x10 /* Framing error */ +#define STAT_TDRE 0x02 /* Transmitter line holding register empty */ + +#if 0 +#define STAT_BI 0x10 /* Break interrupt */ +#define STAT_TSRE 0x40 /* Transmitter shift register empty */ +#endif + +/* 8250 Interrupt Identification Register */ +#if 0 +#define IIR_IP 0x01 /* 0 if interrupt pending */ + +#define IIR_MSTAT 0x00 /* Modem status interrupt */ +#define IIR_TDRE 0x02 /* Transmitter holding register empty int */ +#define IIR_RDA 0x04 /* Receiver data available interrupt */ +#define IIR_RLS 0x06 /* Receiver Line Status interrupt */ +#define IIR_ID_MASK 0x06 /* Mask for interrupt ID */ + +#define IIR_FIFO_TIMEOUT 0x08 /* FIFO timeout interrupt pending - 16550A */ +#define IIR_FIFO_ENABLED 0xc0 /* FIFO enabled (FCR0,1 = 1) - 16550A only */ +#endif + +/* 8250 interrupt enable register bits */ +#define STAT_RIE 0x08 /* Data available interrupt */ +#define STAT_TIE 0x01 /* Tx buffer empty interrupt */ + +#if 0 +#define STAT_RLS 0x04 /* Receive line status interrupt */ +#define STAT_MS 0x08 /* Modem status interrupt */ +#endif + +/* 8250 Modem control register */ +#if 0 +#define MCR_DTR 0x01 /* Data Terminal Ready */ +#define MCR_RTS 0x02 /* Request to Send */ +#define MCR_RFR MCR_RTS /* Ready for Receiving (same as RTS) */ +#define MCR_OUT1 0x04 /* Out 1 (not used) */ +#define MCR_OUT2 0x08 /* Master interrupt enable (actually OUT 2) */ +#define MCR_LOOP 0x10 /* Loopback test mode */ +#endif + +/* 8250 Modem Status Register */ +#define CNTLB_MPBT 0x80 /* =0 Send ordinary, =1 Send wakeup */ +#define CNTLB_MP 0x40 /* =0 Normal mode, =1 Multiprocessor mode */ +#define CNTLB_PEO 0x10 /* =0 Even parity, =1 Odd parity select */ + +#if 0 +#define CNTLB_DCTS 0x01 /* Delta Clear-to-Send */ +#define CNTLB_DDSR 0x02 /* Delta Data Set Ready */ +#define CNTLB_TERI 0x04 /* Trailing edge ring indicator */ +#define CNTLB_DRLSD 0x08 /* Delta Rx Line Signal Detect */ +#define CNTLB_CTS 0x10 /* Clear to send */ +#define CNTLB_DSR 0x20 /* Data set ready */ +#define CNTLB_RI 0x40 /* Ring indicator */ +#define CNTLB_RLSD 0x80 /* Rx line signal detect */ +#endif + +/* 16550A FIFO control register values */ +#if 0 +#define FIFO_ENABLE 0x01 /* enable TX & RX fifo */ +#define FIFO_CLR_RX 0x02 /* clear RX fifo */ +#define FIFO_CLR_TX 0x04 /* clear TX fifo */ +#define FIFO_START_DMA 0x08 /* enable TXRDY/RXRDY pin DMA handshake */ +#define FIFO_SIZE_1 0x00 /* RX fifo trigger levels */ +#define FIFO_SIZE_4 0x40 +#define FIFO_SIZE_8 0x80 +#define FIFO_SIZE_14 0xC0 +#define FIFO_SIZE_MASK 0xC0 + +#define FIFO_TRIGGER_LEVEL FIFO_SIZE_4 +#define FIFO_SETUP (FIFO_ENABLE|FIFO_CLR_RX|FIFO_CLR_TX|FIFO_TRIGGER_LEVEL) + +#define OUTPUT_FIFO_SIZE 16 +#endif + +/* In asyvec.asm: */ +#if 1 +INTERRUPT asci0vec(void); +INTERRUPT asci1vec(void); +#else +INTERRUPT asy0vec(void); +INTERRUPT asy1vec(void); +INTERRUPT asy2vec(void); +INTERRUPT asy3vec(void); +INTERRUPT asy4vec(void); +INTERRUPT asy5vec(void); +#endif + +#endif /* _ASCI_H */ diff --git a/src/nos/include/nos/asmglobl.x86 b/src/nos/include/nos/asmglobl.x86 new file mode 100644 index 00000000..142ed412 --- /dev/null +++ b/src/nos/include/nos/asmglobl.x86 @@ -0,0 +1,61 @@ +; global include file for all .s files to specify model and define macros + ;.MODEL USE16 LARGE,C + .MODEL LARGE,C + %MACS + .LALL + + if @DataSize NE 0 + LARGEDATA EQU 1 + endif + +; Pop CPU flags. On the 286 this uses an alternate sequence to avoid +; a bug on early versions of the 286 +POPFLAGS macro + if @Cpu AND 8 + popf ; popf okay on the 386/486 + + elseif @Cpu AND 4 ; use alternate sequence on the 286 + JMP $+3 ;Jump over IRET + IRET ;Pops CS, IP, FLAGS + PUSH CS ;Removed by IRET + CALL $-2 ;Pushes IP, removed by IRET + else + popf ; popf okay on the 8086/88/186 + endif + endm + +; Push all general purpose registers. If 386/486, push 32-bit regs +; to support C code compiled with the -3 option +PUSHALL macro + if @Cpu AND 8 ; PUSHAD available to protect 32-bit regs + pushad + elseif @Cpu AND 4 ; PUSHA available + pusha + else + push ax ; save user regs on interrupt stack + push bx + push cx + push dx + push bp + push si + push di + endif + endm + +; Pop all general purpose registers +POPALL macro + if @Cpu AND 8 ; PUSHAD available to protect 32-bit regs + popad + nop ; Avoid bug on some early 386's + elseif @Cpu AND 4 ; PUSHA available + popa + else + pop di + pop si + pop bp + pop dx + pop cx + pop bx + pop ax + endif + endm diff --git a/src/nos/include/nos/asy.h b/src/nos/include/nos/asy.h new file mode 100644 index 00000000..3e61ced2 --- /dev/null +++ b/src/nos/include/nos/asy.h @@ -0,0 +1,60 @@ +#ifndef _ASY_H +#define _ASY_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +/* If you increase this, you must add additional interrupt vector + * hooks in asyvec.asm + */ +#if 1 +#define ASY_MAX 2 +#else +#define ASY_MAX 6 +#define FPORT_MAX 1 +#endif + +struct asymode { + char *name; + int trigchar; + int (*init)(struct iface *); + int (*free)(struct iface *); +}; +extern struct asymode Asymode[]; + +/* In n8250.c: */ +int asy_init(int dev,struct iface *ifp,int base,int irq, + uint16 bufsize,int trigchar,long speed,int cts,int rlsd,int chain); +int32 asy_ioctl(struct iface *ifp,int cmd,int set,int32 val); +int asy_read(int dev,void *buf,unsigned short cnt); +int asy_open(char *name); +int asy_close(int dev); +int asy_speed(int dev,long bps); +int asy_send(int dev,struct mbuf **bpp); +int asy_stop(struct iface *ifp); +int asy_write(int dev,void *buf,unsigned short cnt); +int get_rlsd_asy(int dev, int new_rlsd); +int get_asy(int dev); +void fp_stop(void); + +/* In asyvec.asm: */ +INTERRUPT asy0vec(void); +INTERRUPT asy1vec(void); +INTERRUPT asy2vec(void); +INTERRUPT asy3vec(void); +INTERRUPT asy4vec(void); +INTERRUPT asy5vec(void); + +/* In fourport.asm: */ +INTERRUPT fp0vec(void); + +#endif /* _ASY_H */ diff --git a/src/nos/include/nos/ax25.h b/src/nos/include/nos/ax25.h new file mode 100644 index 00000000..572042a2 --- /dev/null +++ b/src/nos/include/nos/ax25.h @@ -0,0 +1,182 @@ +#ifndef _AX25_H +#define _AX25_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _SOCKADDR_H +#include "sockaddr.h" +#endif + +extern char Ax25_eol[]; + +/* AX.25 datagram (address) sub-layer definitions */ + +#define MAXDIGIS 7 /* Maximum number of digipeaters */ +#define ALEN 6 /* Number of chars in callsign field */ +#define AXALEN 7 /* Total AX.25 address length, including SSID */ +#define AXBUF 10 /* Buffer size for maximum-length ascii call */ + +/* Bits within SSID field of AX.25 address */ +#define SSID 0x1e /* Sub station ID */ +#define REPEATED 0x80 /* Has-been-repeated bit in repeater field */ +#define E 0x01 /* Address extension bit */ +#define C 0x80 /* Command/response designation */ + +/* Our AX.25 address */ +extern uint8 Mycall[AXALEN]; + +/* List of AX.25 multicast addresses, e.g., "QST -0" in shifted ASCII */ +extern uint8 Ax25multi[][AXALEN]; + +extern int Digipeat; +extern int Ax25mbox; + +/* Number of chars in interface field. The involved definition takes possible + * alignment requirements into account, since ax25_addr is of an odd size. + */ +#define ILEN (sizeof(struct sockaddr) - sizeof(short) - AXALEN) + +/* Socket address, AX.25 style */ +struct sockaddr_ax { + short sax_family; /* 2 bytes */ + uint8 ax25_addr[AXALEN]; + char iface[ILEN]; /* Interface name */ +}; + +/* Internal representation of an AX.25 header */ +struct ax25 { + uint8 dest[AXALEN]; /* Destination address */ + uint8 source[AXALEN]; /* Source address */ + uint8 digis[MAXDIGIS][AXALEN]; /* Digi string */ + int ndigis; /* Number of digipeaters */ + int nextdigi; /* Index to next digi in chain */ + enum { + LAPB_UNKNOWN, + LAPB_COMMAND, + LAPB_RESPONSE + } cmdrsp; /* Command/response */ +}; + +/* AX.25 routing table entry */ +struct ax_route { + struct ax_route *next; /* Linked list pointer */ + uint8 target[AXALEN]; + uint8 digis[MAXDIGIS][AXALEN]; + int ndigis; + enum { + AX_LOCAL, /* Set by local ax25 route command */ + AX_AUTO /* Set by incoming packet */ + } type; +}; + +extern struct ax_route *Ax_routes; +extern struct ax_route Ax_default; + +/* AX.25 Level 3 Protocol IDs (PIDs) */ +#define PID_X25 0x01 /* CCITT X.25 PLP */ +#define PID_SEGMENT 0x08 /* Segmentation fragment */ +#define PID_TEXNET 0xc3 /* TEXNET datagram protocol */ +#define PID_LQ 0xc4 /* Link quality protocol */ +#define PID_APPLETALK 0xca /* Appletalk */ +#define PID_APPLEARP 0xcb /* Appletalk ARP */ +#define PID_IP 0xcc /* ARPA Internet Protocol */ +#define PID_ARP 0xcd /* ARPA Address Resolution Protocol */ +#define PID_NETROM 0xcf /* NET/ROM */ +#define PID_NO_L3 0xf0 /* No level 3 protocol */ + +/* Link quality report packet header, internal format */ +struct lqhdr { + uint16 version; /* Version number of protocol */ +#define LINKVERS 1 + int32 ip_addr; /* Sending station's IP address */ +}; +#define LQHDR 6 +/* Link quality entry, internal format */ +struct lqentry { + uint8 addr[AXALEN]; /* Address of heard station */ + int32 count; /* Count of packets heard from that station */ +}; +#define LQENTRY 11 + +/* Link quality database record format + * Currently used only by AX.25 interfaces + */ +struct lq { + struct lq *next; + uint8 addr[AXALEN]; /* Hardware address of station heard */ + struct iface *iface; /* Interface address was heard on */ + int32 time; /* Time station was last heard */ + int32 currxcnt; /* Current # of packets heard from this station */ + +#ifdef notdef /* Not yet implemented */ + /* # of packets heard from this station as of his last update */ + int32 lastrxcnt; + + /* # packets reported as transmitted by station as of his last update */ + int32 lasttxcnt; + + uint16 hisqual; /* Fraction (0-1000) of station's packets heard + * as of last update + */ + uint16 myqual; /* Fraction (0-1000) of our packets heard by station + * as of last update + */ +#endif +}; + +extern struct lq *Lq; /* Link quality record headers */ + +/* Structure used to keep track of monitored destination addresses */ +struct ld { + struct ld *next; /* Linked list pointers */ + uint8 addr[AXALEN];/* Hardware address of destination overheard */ + struct iface *iface; /* Interface address was heard on */ + int32 time; /* Time station was last mentioned */ + int32 currxcnt; /* Current # of packets destined to this station */ +}; + +extern struct ld *Ld; /* Destination address record headers */ + +/* In ax25.c: */ +struct ax_route *ax_add(uint8 *,int,uint8 digis[][AXALEN],int); +int ax_drop(uint8 *); +struct ax_route *ax_lookup(uint8 *); +void ax_recv(struct iface *,struct mbuf **); +int axui_send(struct mbuf **bp,struct iface *iface,int32 gateway,uint8 tos); +int axi_send(struct mbuf **bp,struct iface *iface,int32 gateway,uint8 tos); +int ax_output(struct iface *iface,uint8 *dest,uint8 *source,uint16 pid, + struct mbuf **data); +int axsend(struct iface *iface,uint8 *dest,uint8 *source, + int cmdrsp,int ctl,struct mbuf **data); + +/* In axhdr.c: */ +void htonax25(struct ax25 *hdr,struct mbuf **data); +int ntohax25(struct ax25 *hdr,struct mbuf **bpp); + +/* In axlink.c: */ +void getlqentry(struct lqentry *ep,struct mbuf **bpp); +void getlqhdr(struct lqhdr *hp,struct mbuf **bpp); +void logsrc(struct iface *iface,uint8 *addr); +void logdest(struct iface *iface,uint8 *addr); +char *putlqentry(char *cp,uint8 *addr,int32 count); +char *putlqhdr(char *cp,uint16 version,int32 ip_addr); +struct lq *al_lookup(struct iface *ifp,uint8 *addr,int sort); + +/* In ax25subr.c: */ +int addreq(uint8 *a,uint8 *b); +char *pax25(char *e,uint8 *addr); +int setcall(uint8 *out,char *call); + +void beac_input(struct iface *iface,uint8 *src,struct mbuf **bpp); + +#endif /* _AX25_H */ diff --git a/src/nos/include/nos/ax25mail.h b/src/nos/include/nos/ax25mail.h new file mode 100644 index 00000000..4b18956a --- /dev/null +++ b/src/nos/include/nos/ax25mail.h @@ -0,0 +1,3 @@ +int ax250(int argc,char *argv[],void *p); +int ax25start(int argc,char *argv[],void *p); +int dogateway(int argc,char *argv[],void *p); diff --git a/src/nos/include/nos/bm.h b/src/nos/include/nos/bm.h new file mode 100644 index 00000000..25d9bded --- /dev/null +++ b/src/nos/include/nos/bm.h @@ -0,0 +1,66 @@ +#ifndef _BM_H +#define _BM_H + +/* bm.h -- definitions for bmutil.c that aren't included elsewhere */ + +#ifndef _SMTP_H +#include "smtp.h" +#endif + +#ifndef _MAILBOX_H +#include "mailbox.h" +#endif + +/* Header types */ +#define NOHEADER -1 +#define APPROVED 0 +#define FROM 1 +#define TO 2 +#define DATE 3 +#define MSGID 4 +#define SUBJECT 5 +#define RECEIVED 6 +#define SENDER 7 +#define REPLYTO 8 +#define STATUS 9 +#define BBSTYPE 10 +#define XFORWARD 11 +#define CC 12 +#define RRECEIPT 13 +#define APPARTO 14 +#define ERRORSTO 15 +#define ORGANIZATION 17 +#define UNKNOWN 18 + +/* number of columns and lines on a standard display, e.g. vt100 */ +#define MAXCOL 80 +#define MAXLIN 24 + +/* message status */ +#define BM_DELETE 1 +#define BM_READ 2 +#define BM_FORWARDED 4 + +#define BM_NLET 200 /* default size of letter array */ + +#define SLINELEN 64 +#define LINELEN 256 + +extern unsigned Maxlet; /* max messages */ +extern char *fgets(); +extern char *Hdrs[]; + +void scanmail(struct mbx *m); +int msgtofile(struct mbx *m,int msg,FILE *tfile,int noheader); +int dolistnotes(int argc,char *argv[],void *p); +int isarea(char *name); +int dodelmsg(int argc,char *argv[],void *p); +int doreadmsg(int argc,char *argv[],void *p); +int doreadnext(int argc,char *argv[],void *p); +int mbx_reply(int argc,char *argv[],struct mbx *m,struct list **cclist,char **rhdr); +int closenotes(struct mbx *m); +long isnewprivmail(struct mbx *m); +int htype(char *s); +char *getaddress(char *string,int cont); + +#endif /* _BM_H */ diff --git a/src/nos/include/nos/bootp.h b/src/nos/include/nos/bootp.h new file mode 100644 index 00000000..55e4399b --- /dev/null +++ b/src/nos/include/nos/bootp.h @@ -0,0 +1,82 @@ +/*************************************************/ +/* Center for Information Technology Integration */ +/* The University of Michigan */ +/* Ann Arbor */ +/* */ +/* Dedicated to the public domain. */ +/* Send questions to info@citi.umich.edu */ +/* */ +/* BOOTP is documented in RFC 951 and RFC 1048 */ +/*************************************************/ + +#ifndef BOOTREQUEST + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _SOCKET_H +#include "socket.h" +#endif + +#ifndef _IP_H +#include "ip.h" +#endif + +struct bootp { + uint8 op; /* packet opcode type */ + uint8 htype; /* hardware addr type */ + uint8 hlen; /* hardware addr length */ + uint8 hops; /* gateway hops */ + int32 xid; /* transaction ID */ + uint16 secs; /* seconds since boot began */ + uint16 unused; + struct in_addr ciaddr; /* client IP address */ + struct in_addr yiaddr; /* 'your' IP address */ + struct in_addr siaddr; /* server IP address */ + struct in_addr giaddr; /* gateway IP address */ + uint8 chaddr[16]; /* client hardware address */ + char sname[64]; /* server host name */ + char file[128]; /* boot file name */ + uint8 vend[64]; /* vendor-specific area */ +}; + +/* + * UDP port numbers, server and client. + */ +#define IPPORT_BOOTPS 67 +#define IPPORT_BOOTPC 68 + +#define BOOTREQUEST 1 +#define BOOTREPLY 2 + +#define BOOTP_PAD 0 +#define BOOTP_SUBNET 1 +#define BOOTP_GATEWAY 3 +#define BOOTP_DNS 6 +#define BOOTP_HOSTNAME 12 +#define BOOTP_END 0xff + +/* + * "vendor" data permitted for Stanford boot clients. + */ +struct vend { + uint8 v_magic[4]; /* magic number */ + unsigned long v_flags; /* flags/opcodes, etc. */ + uint8 v_unused[56]; /* currently unused */ +}; + +#define VM_STANFORD "STAN" /* v_magic for Stanford */ + +/* v_flags values */ +#define VF_PCBOOT 1 /* an IBMPC or Mac wants environment info */ +#define VF_HELP 2 /* help me, I'm not registered */ + +extern int WantBootp; +extern char bp_ascii[]; + +void bootp_print_packet(struct bootp *bp); +int bootp_validPacket(struct ip *ip,struct mbuf *bp); + +#endif + diff --git a/src/nos/include/nos/bootpd.h b/src/nos/include/nos/bootpd.h new file mode 100644 index 00000000..c9e04657 --- /dev/null +++ b/src/nos/include/nos/bootpd.h @@ -0,0 +1,46 @@ +/*************************************************/ +/* Center for Information Technology Integration */ +/* The University of Michigan */ +/* Ann Arbor */ +/* */ +/* Dedicated to the public domain. */ +/* Send questions to info@citi.umich.edu */ +/* */ +/* BOOTP is documented in RFC 951 and RFC 1048 */ +/*************************************************/ + +#include "socket.h" +#include "arp.h" + +#define MHOSTS 12 /* max number of 'hosts' structs */ +#define BP_MAXDNS 5 + + +struct bootpd_stat { + int rcvd; + int bad_size; + int bad_op; + +}; + +struct host { + char name[31]; /* host name (and suffix) */ + uint8 htype; /* hardware type */ + uint8 haddr[MAXHWALEN]; /* hardware address */ + struct in_addr iaddr; /* internet address */ + char bootfile[32]; /* default boot file name */ +}; + +extern char *ArpNames[]; +extern char bp_ascii[]; + +int readtab(void); +void readtab_shut(void); +void bp_log(char *fmt,...); +void da_status(struct iface *iface); +int da_assign(struct iface *iface,uint8 *hwaddr,int32 *ipaddr); +int da_init(void); +void da_shut(void); +int da_done_net(struct iface *iface); +int da_serve_net(struct iface *iface,int32 rstart,int32 rend); + diff --git a/src/nos/include/nos/cmdparse.h b/src/nos/include/nos/cmdparse.h new file mode 100644 index 00000000..ce4a12a1 --- /dev/null +++ b/src/nos/include/nos/cmdparse.h @@ -0,0 +1,28 @@ +#ifndef _CMDPARSE_H +#define _CMDPARSE_H + +#include /* for _char... ZILOG only (Nick) */ + +#define NARG 20 /* Max number of args to commands */ + +struct cmds { + _char *name; /* Name of command */ + int (*func)(int argc,char *argv[],void *p); + /* Function to execute command */ + int stksize; /* Size of stack if subprocess, 0 if synch */ + int argcmin; /* Minimum number of args */ + _char *argc_errmsg; /* Message to print if insufficient args */ +}; +extern struct cmds Cmds[],Startcmds[],Stopcmds[],Attab[]; + +/* In cmdparse.c: */ +int cmdparse(struct cmds cmds[], char *line, void *p); +int subcmd(struct cmds tab[], int argc, char *argv[], void *p); +int setbool(int *var, _char *label, int argc, char *argv[]); +int bit16cmd(uint16 *bits, uint16 mask, _char *label, int argc, char *argv[]); +int setint(int *var, _char *label, int argc, char *argv[]); +int setlong(int32 *var, _char *label, int argc, char *argv[]); +int setshort(unsigned short *var, _char *label, int argc, char *argv[]); +int setuns(unsigned *var, _char *label, int argc, char *argv[]); + +#endif /* _CMDPARSE_H */ diff --git a/src/nos/include/nos/commands.h b/src/nos/include/nos/commands.h new file mode 100644 index 00000000..444274a4 --- /dev/null +++ b/src/nos/include/nos/commands.h @@ -0,0 +1,260 @@ +#ifndef _COMMANDS_H +#define _COMMANDS_H + +/* In n8250.c, amiga.c: */ +int doasystat(int argc,char *argv[],void *p); +int fp_attach (int argc,char *argv[],void *p); + +/* In alloc.c: */ +int domem(int argc,char *argv[],void *p); + +/* In amiga.c: */ +int doamiga(int argc,char *argv[],void *p); + +/* In arpcmd.c: */ +int doarp(int argc,char *argv[],void *p); + +/* In asy.c: */ +int asy_attach(int argc,char *argv[],void *p); + +/* In ax25cmd.c: */ +int doax25(int argc,char *argv[],void *p); +int doaxheard(int argc,char *argv[],void *p); +int doaxdest(int argc,char *argv[],void *p); +int doconnect(int argc,char *argv[],void *p); + +/* In bootp.c */ +int dobootp(int argc,char *argv[],void *p); + +/* In bootpd.c */ +int bootpdcmd(int argc,char *argv[],void *p); + +/* In dialer.c: */ +int dodialer(int argc,char *argv[],void *p); + +/* In dirutil.c: */ +int docd(int argc,char *argv[],void *p); +int dodir(int argc,char *argv[],void *p); +int domkd(int argc,char *argv[],void *p); +int dormd(int argc,char *argv[],void *p); + +/* In domain.c: */ +int dodomain(int argc,char *argv[],void *p); + +/* In drsi.c: */ +int dodrstat(int argc,char *argv[],void *p); +int dr_attach(int argc,char *argv[],void *p); +int dodr(int argc,char *argv[],void *p); + +/* In eagle.c: */ +int eg_attach(int argc,char *argv[],void *p); +int doegstat(int argc,char *argv[],void *p); + +/* In ec.c: */ +int doetherstat(int argc,char *argv[],void *p); +int ec_attach(int argc,char *argv[],void *p); + +/* In fax.c: */ +int dofax(int argc,char *argv[],void *p); +int fax1(int argc,char *argv[],void *p); +int fax0(int argc,char *argv[],void *p); + +/* In finger.c: */ +int dofinger(int argc,char *argv[],void *p); + +/* In fingerd.c: */ +int finstart(int argc,char *argv[],void *p); +int fin0(int argc,char *argv[],void *p); + +/* In ftpcli.c: */ +int doftp(int argc,char *argv[],void *p); +int doabort(int argc,char *argv[],void *p); + +/* In ftpserv.c: */ +int ftpstart(int argc,char *argv[],void *p); +int ftp0(int argc,char *argv[],void *p); + +/* In hapn.c: */ +int dohapnstat(int argc,char *argv[],void *p); +int hapn_attach(int argc,char *argv[],void *p); + +/* In hop.c: */ +int dohop(int argc,char *argv[],void *p); + +/* In hs.c: */ +int dohs(int argc,char *argv[],void *p); +int hs_attach(int argc,char *argv[],void *p); + +/* In icmpcmd.c: */ +int doicmp(int argc,char *argv[],void *p); + +/* In iface.c: */ +int doifconfig(int argc,char *argv[],void *p); +int dodetach(int argc,char *argv[],void *p); + +/* In ipcmd.c: */ +int doip(int argc,char *argv[],void *p); +int doroute(int argc,char *argv[],void *p); + +/* In ipsec.c: */ +int dosec(int argc,char *argv[],void *p); + +/* In ksp.c: */ +int doksp(int argc,char *argv[],void *p); + +/* In ksubr.c: */ +int ps(int argc,char *argv[],void *p); + +/* In lterm.c: */ +int dolterm(int argc,char *argv[],void *p); + +/* In main.c: */ +int dodelete(int argc,char *argv[],void *p); +int dorename(int argc,char *argv[],void *p); +int doexit(int argc,char *argv[],void *p); +int dohostname(int argc,char *argv[],void *p); +int dolog(int argc,char *argv[],void *p); +int dohelp(int argc,char *argv[],void *p); +int doattach(int argc,char *argv[],void *p); +int doparam(int argc,char *argv[],void *p); +int dopage(int argc,char *argv[],void *p); +int domode(int argc,char *argv[],void *p); +int donothing(int argc,char *argv[],void *p); +int donrstat(int argc,char *argv[],void *p); +int doescape(int argc,char *argv[],void *p); +int doremote(int argc,char *argv[],void *p); +int doboot(int argc,char *argv[],void *p); +int dorepeat(int argc,char *argv[],void *p); +int dostacktest(int argc,char *argv[],void *p); +int dosysdebug(int argc,char *argv[],void *p); +int dosystrace(int argc,char *argv[],void *p); +int dowipe(int argc,char *argv[],void *p); + +/* In mailbox.c: */ +int dombox(int argc,char *argv[],void *p); + +/* In nntpcli.c: */ +int donntp(int argc,char *argv[],void *p); + +/* In nrcmd.c: */ +int donetrom(int argc,char *argv[],void *p); +int nr_attach(int argc,char *argv[],void *p); + +/* In pc.c: */ +int doshell(int argc,char *argv[],void *p); +int doisat(int argc,char *argv[],void *p); + +/* In pc100.h: */ +int pc_attach(int argc,char *argv[],void *p); + +/* In pktdrvr.c: */ +int pk_attach(int argc,char *argv[],void *p); + +/* In pi.c: */ +int pi_attach(int argc,char *argv[],void *p); +int dopistat(int argc,char *argv[],void *p); + +/* In ping.c: */ +int doping(int argc,char *argv[],void *p); + +/* in popcli.c */ +int dopop(int argc,char *argv[],void *p); + +/* in popserv.c */ +int pop1(int argc,char *argv[],void *p); +int pop0(int argc,char *argv[],void *p); + +/* In qtso.c: */ +int doqtso(int argc,char *argv[],void *p); + +/* In rarp.c: */ +int dorarp(int argc,char *argv[],void *p); + +/* In ripcmd.c: */ +int dorip(int argc,char *argv[],void *p); + +/* In ripcmd.c: */ +int doaddrefuse(int argc,char *argv[],void *p); +int dodroprefuse(int argc,char *argv[],void *p); +int dorip(int argc,char *argv[],void *p); +int doripadd(int argc,char *argv[],void *p); +int doripdrop(int argc,char *argv[],void *p); +int doripinit(int argc,char *argv[],void *p); +int doripmerge(int argc,char *argv[],void *p); +int doripreq(int argc,char *argv[],void *p); +int doripstat(int argc,char *argv[],void *p); +int doripstop(int argc,char *argv[],void *p); +int doriptrace(int argc,char *argv[],void *p); + +/* In sb.c: */ +int dosound(int argc,char *argv[],void *p); + +/* In escc.c: */ +int escc_attach(int argc,char *argv[],void *p); +int doesccstat(int argc,char *argv[],void *p); + +/* In session.c: */ +int dosession(int argc,char *argv[],void *p); +int go(int argc,char *argv[],void *p); +int doclose(int argc,char *argv[],void *p); +int doreset(int argc,char *argv[],void *p); +int dokick(int argc,char *argv[],void *p); +int dorecord(int argc,char *argv[],void *p); +int dosfsize(int argc,char *argv[],void *p); +int doupload(int argc,char *argv[],void *p); + +/* In smisc.c: */ +int dis1(int argc,char *argv[],void *p); +int dis0(int argc,char *argv[],void *p); +int echo1(int argc,char *argv[],void *p); +int echo0(int argc,char *argv[],void *p); +int rem1(int argc,char *argv[],void *p); +int rem0(int argc,char *argv[],void *p); +int term1(int argc,char *argv[],void *p); +int term0(int argc,char *argv[],void *p); +int bsr1(int argc,char *argv[],void *p); +int bsr0(int argc,char *argv[],void *p); + +/* In smtpcli.c: */ +int dosmtp(int argc,char *argv[],void *p); + +/* In smtpserv.c: */ +int smtp1(int argc,char *argv[],void *p); +int smtp0(int argc,char *argv[],void *p); + +/* In sockcmd.c: */ +int dosock(int argc,char *argv[],void *p); + +/* In stdio.c: */ +int dofiles(int argc,char *argv[],void *p); + +/* In sw.c: */ +int doswatch(int argc,char *argv[],void *p); + +/* In tcpcmd.c: */ +int dotcp(int argc,char *argv[],void *p); + +/* In telnet.c: */ +int doecho(int argc,char *argv[],void *p); +int doeol(int argc,char *argv[],void *p); +int dotelnet(int argc,char *argv[],void *p); +int dotopt(int argc,char *argv[],void *p); + +/* In tip.c: */ +int dotip(int argc,char *argv[],void *p); + +/* In ttylink.c: */ +int ttylstart(int argc,char *argv[],void *p); +int ttyl0(int argc,char *argv[],void *p); + +/* In trace.c: */ +int dotrace(int argc,char *argv[],void *p); + +/* In udpcmd.c: */ +int doudp(int argc,char *argv[],void *p); + +/* In view.c: */ +int doview(int argc,char *argv[],void *p); +void view(int,void *,void *); + +#endif /* _COMMANDS_H */ diff --git a/src/nos/include/nos/config.h b/src/nos/include/nos/config.h new file mode 100644 index 00000000..fdfb1976 --- /dev/null +++ b/src/nos/include/nos/config.h @@ -0,0 +1,90 @@ +#ifndef _CONFIG_H +#define _CONFIG_H + +/* Software options */ +#undef MAILBOX 1 /* Include SM0RGV mailbox server */ +#undef NNTP 1 /* Netnews client */ +#define CLIENTS 1 /* Include TCP clients (added by Nick) */ +#define SERVERS 1 /* Include TCP servers */ +#undef TELNETD 1 /* Include telnet server (TIPMAIL for now) */ +#undef SMTP 1 /* Include SMTP server */ +#define TRACE 1 /* Include packet tracing code */ +#undef ARP 1 /* Include ARP routing */ +#undef RIP 1 /* Include RIP routing */ +#define HOPCHECK 1 /* IP path tracing command */ +#define DIALER 1 /* SLIP redial code */ +#undef NRS 1 /* NET/ROM async interface */ +#undef NETROM 1 /* NET/ROM network support */ +#undef LZW 1 /* LZW-compressed sockets */ +#define SLIP 1 /* Serial line IP on built-in ports */ +#define PPP 1 /* Point-to-Point Protocol code */ +#define VJCOMPRESS 1 /* Van Jacobson TCP compression for SLIP */ +#define TRACEBACK 1 /* Stack traceback code */ +#define LOCSOCK 1 /* Local loopback sockets */ +#define SCROLLBACK 1000 /* Default lines in session scrollback file */ + +#undef IPSEC 1 /* IP network layer security functions */ + +/* Software tuning parameters */ +#ifdef ZILOG +#define MTHRESH 2048 /* Default memory threshold */ +#define NSESSIONS 5 /* Number of interactive clients */ +#define DEFNSOCK 32 /* Default number of sockets */ +/* I don't think this is really referenced: */ +#define DEFNFILES 32 /* Default number of open files */ +#else +#define MTHRESH 8192 /* Default memory threshold */ +#define NSESSIONS 20 /* Number of interactive clients */ +#define DEFNSOCK 100 /* Default number of sockets */ +#define DEFNFILES 128 /* Default number of open files */ +#endif + +/* Hardware driver options */ +#undef SOUND 1 /* Soundblaster 16 */ +#undef ARCNET 1 /* ARCnet via PACKET driver */ +#undef KISS 1 /* KISS TNC code */ +#undef HS 1 /* High speed (56kbps) modem driver */ +#undef HAPN 1 /* Hamilton Area Packet Network driver code */ +#undef EAGLE 1 /* Eagle card driver */ +#undef PI 1 /* PI card driver */ +#undef PACKET 1 /* FTP Software's Packet Driver interface */ +#undef PC100 1 /* PAC-COM PC-100 driver code */ +#undef APPLETALK 1 /* Appletalk interface (Macintosh) */ +#undef DRSI 1 /* DRSI PCPA slow-speed driver */ +#define ESCC 1 /* PE1CHL generic escc driver */ +#define ASY 1 /* Asynch driver code */ +#undef SLFP 1 /* SLFP packet driver class supported */ +#undef CDMA_DM 1 /* CDMA mobile DM interface */ +#undef QTSO 1 /* CDMA QTSO data interface */ +#undef DMLITE 1 /* CDMA mobile asynch DM interface */ +#undef KSP 1 /* Kitchen Sink Protocol */ + +#if defined(AX25) || defined(ETHER) || defined(APPLETALK) /* Nick */ +#define ARP 1 /* These protocols are based on ARP */ +#endif + +#if defined(NRS) && !defined(NETROM) +#define NETROM 1 /* NRS implies NETROM */ +#endif + +#if (defined(HS)||defined(NETROM)||defined(KISS)||defined(HAPN)||defined(EAGLE)||defined(PC100)||defined(PI)/* Nick ||defined(ESCC)*/) +#define AX25 1 /* AX.25 subnet code */ +#endif + +#if (defined(ARCNET) || defined(SLFP)) && !defined(PACKET) +#define PACKET 1 /* FTP Software's Packet Driver interface */ +#endif + +#if (defined(PC_EC) || defined(PACKET)) +#define ETHER 1 /* Generic Ethernet code */ +#endif + +#if defined(CDMA_DM) && !defined(VJCOMPRESS) +#define VJCOMPRESS 1 /* Van Jacobson TCP compression for SLIP */ +#endif + +#if defined(TELNETD) && !defined(MAILBOX) /* Nick */ +#define MAILBOX 1 /* Telnet server currently only does TIPMAIL */ +#endif + +#endif /* _CONFIG_H */ diff --git a/src/nos/include/nos/conv.h b/src/nos/include/nos/conv.h new file mode 100644 index 00000000..35be3da2 --- /dev/null +++ b/src/nos/include/nos/conv.h @@ -0,0 +1,61 @@ +unsigned long decode(unsigned char *data,signed char *symbols, + unsigned int nbits,int mettab[2][3],int delta,unsigned long maxcycles); +int encode(unsigned char *symbols,unsigned char *data,unsigned int nbytes); +void expsym(signed char *,unsigned char *,unsigned int); +double gen_met(int mettab[2][3],double ber,double nc); + +extern unsigned char Partab[]; +extern unsigned char Bitcnt[]; +extern unsigned char Revtab[]; + +/* PN symbol scrambler definitions + * The 23-degree polynomial is the CCITT standard for V.29, V.32 and V.33 + */ +#define PN_START 1 +#define PN_SCRAMBLE(X) Partab[((X) & 0x420000) >> 17] +/*#define PN_SCRAMBLE(X) Partab[((X) & 0x60) >> 5] */ + + +#define ILEAVE 64 + +/* Convolutional coding polynomials. All are rate 1/2, K=32 */ +#define LL 1 + +#ifdef NASA_STANDARD +/* "NASA standard" code by Massey & Costello + * Nonsystematic, quick look-in, dmin=11, dfree=23 + * used on Pioneer 10-12, Helios A,B + */ +#define POLY1 0xbbef6bb7 +#define POLY2 0xbbef6bb5 +#endif + +#ifdef MJ +/* Massey-Johannesson code + * Nonsystematic, quick look-in, dmin=13, dfree>=23 + * Purported to be more computationally efficient than Massey-Costello + */ +#define POLY1 0xb840a20f +#define POLY2 0xb840a20d +#endif + +#ifdef LL +/* Layland-Lushbaugh code + * Nonsystematic, non-quick look-in, dmin=?, dfree=? + */ +#define POLY1 0xf2d05351 +#define POLY2 0xe4613c47 +#endif + +#define ENCODE(sym,encstate){\ + unsigned long _tmp;\ +\ + _tmp = (encstate) & POLY1;\ + _tmp ^= _tmp >> 16;\ + (sym) = Partab[(_tmp ^ (_tmp >> 8)) & 0xff];\ + _tmp = (encstate) & POLY2;\ + _tmp ^= _tmp >> 16;\ + (sym) |= Partab[(_tmp ^ (_tmp >> 8)) & 0xff] << 1;\ +} + + diff --git a/src/nos/include/nos/crc.h b/src/nos/include/nos/crc.h new file mode 100644 index 00000000..b199cf92 --- /dev/null +++ b/src/nos/include/nos/crc.h @@ -0,0 +1,11 @@ +/* 16 bit CRC-CCITT stuff. Extracted from Bill Simpson's PPP */ + +#define FCS_START 0xffff /* Starting bit string for FCS calculation */ +#define FCS_FINAL 0xf0b8 /* FCS when summed over frame and sender FCS */ + +#define FCS(fcs, c) (((fcs) >> 8) ^ Fcstab[((fcs) ^ (c)) & 0x00ff]) + +extern unsigned short Fcstab[]; +int crc_check(unsigned char *buf,unsigned int len); +void crc_gen(unsigned char *buf,unsigned int len); + diff --git a/src/nos/include/nos/daemon.h b/src/nos/include/nos/daemon.h new file mode 100644 index 00000000..33905a8c --- /dev/null +++ b/src/nos/include/nos/daemon.h @@ -0,0 +1,29 @@ +#ifndef _DAEMON_H +#define _DAEMON_H + +struct daemon { + char *name; + unsigned stksize; + void (*fp)(int,void *,void *); +}; +extern struct daemon Daemons[]; + +/* In alloc.c: */ +void gcollect(int,void*,void*); + +/* In main.c: */ +void keyboard(int,void*,void*); +void network(int,void *,void *); +void display(int,void *,void *); + +/* In kernel.c: */ +void killer(int,void*,void*); + +/* In random.c: */ +void rand_init(int,void*,void*); + +/* In timer.c: */ +void timerproc(int,void*,void*); + +#endif /* _DAEMON_H */ + diff --git a/src/nos/include/nos/devparam.h b/src/nos/include/nos/devparam.h new file mode 100644 index 00000000..b32ed48a --- /dev/null +++ b/src/nos/include/nos/devparam.h @@ -0,0 +1,38 @@ +#ifndef _DEVPARAM_H +#define _DEVPARAM_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +/* device parameter control */ +enum devparam { + PARAM_DATA, + PARAM_TXDELAY, + PARAM_PERSIST, + PARAM_SLOTTIME, + PARAM_TXTAIL, + PARAM_FULLDUP, + PARAM_HW, + PARAM_MUTE, + PARAM_DTR, + PARAM_RTS, + PARAM_SPEED, + PARAM_ENDDELAY, + PARAM_GROUP, + PARAM_IDLE, + PARAM_MIN, + PARAM_MAXKEY, + PARAM_WAIT, + PARAM_DOWN=0x81, + PARAM_UP=0x82, + PARAM_BLIND=0x83, /* should be vertigo, can't tell down/up? */ + PARAM_RETURN=0xff +}; + +/* In devparam.c: */ +int devparam(char *s); +char *parmname(int n); + +#endif /* _DEVPARAM_H */ + diff --git a/src/nos/include/nos/dialer.h b/src/nos/include/nos/dialer.h new file mode 100644 index 00000000..d953b285 --- /dev/null +++ b/src/nos/include/nos/dialer.h @@ -0,0 +1,14 @@ +/* Dynamic dialup params */ +struct asydialer { + char *actfile; /* Script to activate line */ + char *dropfile; /* Script to drop line */ + char *ansfile; /* Script to answer incoming call */ + struct timer idle; /* Idle timeout timer */ + long originates; /* Count of times we bring up the link */ + long answers; /* Count of incoming calls */ + long localdrops; /* Count of times we dropped the link */ + int dev; +}; + +int sd_init(struct iface *,int32,int,char **); +int sd_stat(struct iface *); diff --git a/src/nos/include/nos/dirutil.h b/src/nos/include/nos/dirutil.h new file mode 100644 index 00000000..cdeb283e --- /dev/null +++ b/src/nos/include/nos/dirutil.h @@ -0,0 +1,17 @@ +#ifndef _DIRUTIL_H +#define _DIRUTIL_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +/* In dirutil.c */ +FILE *dir(char *path,int full); +int filedir(char *name,int times,char *ret_str); +int getdir(char *path,int full,FILE *file); + +/* In pathname.c: */ +char *pathname(char *cd,char *path); + +#endif /* _DIRUTIL_H */ + diff --git a/src/nos/include/nos/display.h b/src/nos/include/nos/display.h new file mode 100644 index 00000000..f434d4e9 --- /dev/null +++ b/src/nos/include/nos/display.h @@ -0,0 +1,77 @@ +#ifndef _DISPLAY_H +#define _DISPLAY_H + +#ifndef _STDIO_H +#include +#endif + +#define MAXARGS 5 + +struct display { + unsigned cookie; /* Magic cookie to detect bogus pointers */ +#define D_COOKIE 0xbeef + uint8 cols; /* Screen width */ + uint8 col; /* cursor column, 0 to cols-1 */ + uint8 savcol; /* Saved cursor column */ + + uint8 rows; /* Screen height */ + uint8 row; /* cursor row, 0 to rows-1 */ + uint8 savrow; /* Saved cursor row */ + + uint8 slast; /* Last row in scrolled region */ + int scroll; /* Scroll offset */ + + int argi; /* index to current entry in arg[] */ + int arg[MAXARGS]; /* numerical args to ANSI sequence */ + + uint8 attrib; /* Current screen attribute */ + enum { + DISP_NORMAL, /* No ANSI sequence in progress */ + DISP_ESCAPE, /* ESC char seen */ + DISP_ARG /* ESC[ seen */ + } state; /* State of ANSI escape sequence FSM */ + struct { + unsigned int dirty_screen:1; /* Whole screen needs update */ + unsigned int dirty_cursor:1; /* Cursor has moved */ + unsigned int no_line_wrap:1; /* Don't wrap past last col */ + unsigned int no_scroll:1; /* Set for wrap-scrolling */ + unsigned int scrollbk; /* Scrollback is active */ + } flags; /* Status flags */ + + uint8 *buf; /* Internal screen image */ + + /* "Dirty" info. Keeps track of which lines (and parts of lines) + * have changed since the last screen update. lcol is initialized + * to the right edge, while rcol is initialized to the left edge. + * Whenever lcol <= rcol, the line is considered to be dirty. + */ + struct dirty { + uint8 lcol; /* Leftmost dirty column */ + uint8 rcol; /* Rightmost dirty column */ + } *dirty; /* One per line */ + + uint8 *tabstops; /* Tab stops */ + + FILE *sfile; /* Save file for scrollback */ + long sfseek; /* Write pointer for scrollback file */ + long sfoffs; /* Scrollback offset */ + long sfsize; /* Size of scrollback file, lines */ + long sflimit; /* Limit on sfsize */ +}; + +struct display *newdisplay(int rows,int cols,int noscrol,int sfsize); +void displaywrite(struct display *dp,void *buf,int cnt); +void dupdate(struct display *dp); +void closedisplay(struct display *dp); +void statwrite(struct display *dp,int col,void *buf,int cnt,int attrib); +void dscrollmode(struct display *dp,int flag); +void dhome(struct display *dp); +void dend(struct display *dp); +void dpgup(struct display *dp); +void dpgdown(struct display *dp); +void dcursup(struct display *dp); +void dcursdown(struct display *dp); +void debug(char *s); + +#endif _DISPLAY_H + diff --git a/src/nos/include/nos/dma.h b/src/nos/include/nos/dma.h new file mode 100644 index 00000000..043982f9 --- /dev/null +++ b/src/nos/include/nos/dma.h @@ -0,0 +1,25 @@ +int setup_dma(int chan, int32 physaddr, uint16 length,int mode); +uint16 dma_cnt(int chan); +int dma_disable(int chan); +int dma_enable(int chan); +void *dma_malloc(int32 *,unsigned short); +int dis_dmaxl(int); +int ena_dmaxl(int); + +#define DMA1BASE 0 /* Base address of 1st (8-bit) DMA controller */ +#define DMA2BASE 0xc0 /* Base address of 2nd (16-bit) DMA controller */ +#define DMAEN 0x4 /* Offset off DMA Enable register */ + +/* DMA controller registers */ +#define DMA_STAT 8 /* DMA controller status register */ +#define DMA_MASK 0xa /* DMA controller mask register */ +#define DMA_MODE 0xb /* DMA controller mode register */ +#define DMA_RESETFF 0xc /* DMA controller first/last flip flop */ +/* DMA data */ +#define DMA_DISABLE 4 /* Disable channel n */ +#define DMA_ENABLE 0 /* Enable channel n */ +/* Single transfers, incr. address, auto init, writes, ch. n */ +#define DMA_RX_MODE 0x54 +/* Single transfers, incr. address, no auto init, reads, ch. n */ +#define DMA_TX_MODE 0x48 + diff --git a/src/nos/include/nos/domain.h b/src/nos/include/nos/domain.h new file mode 100644 index 00000000..74578ba9 --- /dev/null +++ b/src/nos/include/nos/domain.h @@ -0,0 +1,152 @@ +#ifndef _DOMAIN_H +#define _DOMAIN_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _PROC_H +#include "proc.h" +#endif + +#define INITRTT 2000L /* Initial smoothed response time */ +#define MAXCNAME 10 /* Maximum amount of cname recursion */ + +#define TYPE_A 1 /* Host address */ +#define TYPE_NS 2 /* Name server */ +#define TYPE_MD 3 /* Mail destination (obsolete) */ +#define TYPE_MF 4 /* Mail forwarder (obsolete) */ +#define TYPE_CNAME 5 /* Canonical name */ +#define TYPE_SOA 6 /* Start of Authority */ +#define TYPE_MB 7 /* Mailbox name (experimental) */ +#define TYPE_MG 8 /* Mail group member (experimental) */ +#define TYPE_MR 9 /* Mail rename name (experimental) */ +#define TYPE_NULL 10 /* Null (experimental) */ +#define TYPE_WKS 11 /* Well-known sockets */ +#define TYPE_PTR 12 /* Pointer record */ +#define TYPE_HINFO 13 /* Host information */ +#define TYPE_MINFO 14 /* Mailbox information (experimental)*/ +#define TYPE_MX 15 /* Mail exchanger */ +#define TYPE_TXT 16 /* Text strings */ +#define TYPE_ANY 255 /* Matches any type */ + +#define CLASS_IN 1 /* The ARPA Internet */ + +struct dserver { + struct dserver *prev; /* Linked list pointers */ + struct dserver *next; + + int32 address; /* IP address of server */ + int32 timeout; /* Current timeout, ticks */ + int32 srtt; /* Smoothed round trip time, ticks */ + int32 mdev; /* Mean deviation, ticks */ + int32 queries; /* Query packets sent to this server */ + int32 responses; /* Response packets received from this server */ +}; +extern struct dserver *Dlist; +extern int Dsocket; /* Socket to use for domain queries */ + +/* Round trip timing parameters */ +#define AGAIN 8 /* Average RTT gain = 1/8 */ +#define LAGAIN 3 /* Log2(AGAIN) */ +#define DGAIN 4 /* Mean deviation gain = 1/4 */ +#define LDGAIN 2 /* log2(DGAIN) */ + +/* Header for all domain messages */ +struct dhdr { + uint16 id; /* Identification */ + uint8 qr; /* Query/Response */ +#define QUERY 0 +#define RESPONSE 1 + uint8 opcode; +#define IQUERY 1 + uint8 aa; /* Authoratative answer */ + uint8 tc; /* Truncation */ + uint8 rd; /* Recursion desired */ + uint8 ra; /* Recursion available */ + uint8 rcode; /* Response code */ +#define NO_ERROR 0 +#define FORMAT_ERROR 1 +#define SERVER_FAIL 2 +#define NAME_ERROR 3 +#define NOT_IMPL 4 +#define REFUSED 5 + uint16 qdcount; /* Question count */ + uint16 ancount; /* Answer count */ + uint16 nscount; /* Authority (name server) count */ + uint16 arcount; /* Additional record count */ + struct rr *questions; /* List of questions */ + struct rr *answers; /* List of answers */ + struct rr *authority; /* List of name servers */ + struct rr *additional; /* List of additional records */ +}; + +struct mx { + uint16 pref; + char *exch; +}; + +struct hinfo { + char *cpu; + char *os; +}; + +struct soa { + char *mname; + char *rname; + int32 serial; + int32 refresh; + int32 retry; + int32 expire; + int32 minimum; +}; + +struct rr { + struct rr *last; + struct rr *next; + uint8 source; +#define RR_NONE 0 +#define RR_FILE 1 /* from file */ +#define RR_QUESTION 4 /* from server reply */ +#define RR_ANSWER 5 /* from server reply */ +#define RR_AUTHORITY 6 /* from server reply */ +#define RR_ADDITIONAL 7 /* from server reply */ +#define RR_QUERY 8 /* test name (see QUERY)*/ +#define RR_INQUERY 9 /* test resource (see IQUERY)*/ + + char *comment; /* optional comment */ + char *name; /* Domain name, ascii form */ + int32 ttl; /* Time-to-live */ +#define TTL_MISSING 0x80000000L + uint16 class; /* IN, etc */ +#define CLASS_MISSING 0 + uint16 type; /* A, MX, etc */ +#define TYPE_MISSING 0 + uint16 rdlength; /* Length of data field */ + union { + int32 addr; /* Used for type == A */ + struct soa soa; /* Used for type == SOA */ + struct mx mx; /* Used for type == MX */ + struct hinfo hinfo; /* Used for type == HINFO */ + char *name; /* for domain names */ + char *data; /* for anything else */ + } rdata; +}; +extern struct proc *Dfile_updater; + +/* In domain.c */ +int add_nameserver(int32 address); +void free_rr(struct rr *rrlp); +struct rr *inverse_a(int32 ip_address); +struct rr *resolve_rr(char *dname,uint16 dtype); +char *resolve_a(int32 ip_address, int shorten); +struct rr *resolve_mailb(char *name); + +/* In domhdr.c: */ +int ntohdomain(struct dhdr *dhdr,struct mbuf **bpp); + +#endif /* _DOMAIN_H */ diff --git a/src/nos/include/nos/drsi.h b/src/nos/include/nos/drsi.h new file mode 100644 index 00000000..9153d6f3 --- /dev/null +++ b/src/nos/include/nos/drsi.h @@ -0,0 +1,179 @@ +#ifndef _DRSI_H +#define _DRSI_H + +/* Hardware-dependent routines for the DRSI card for the PC + * This card contains a Zilog 8530, ZILOG 8536 and a modem. + */ +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#define DRMAX 1 /* One card max */ +#define AX_MTU 512 +#define INTMASK 0x21 /* Intel 8259 interrupt controller mask */ + +struct DRTAB { + /* Original interrupt vector contents */ + INTERRUPT (*oldvec)(void); + uint16 addr; /* Base I/O address */ + uint16 vec; /* Vector */ + long ints; /* Interrupt count */ + uint8 chain; /* Interrupt chaining enable */ +}; +extern struct DRTAB Drsi[]; +extern uint16 Drnbr; + +/* Register offset info, specific to the DRSI + * E.g., to read the data port on channel A, use + * inportb(drchan[dev].base + CHANA + DATA) + */ +#define CHANB 0 /* Base of channel B regs */ +#define CHANA 2 /* Base of channel A regs */ + +/* 8530 ports on each channel */ +#define CTL 0 +#define DATA 1 +#define DMACTRL 4 /* Base of channel + 4 */ + +/* 8536 ports */ +#define Z8536_MASTER 7 /* 8536 master register offset from BASE */ + +/* Struct used to contain wakeup data */ + +struct dr_wakeup { + void (*wcall)(struct drchan *hp); + int wakecnt; +}; + +#define RX 0 /* Index into wake array */ +#define TX 1 /* ----------""--------- */ +struct drchan { + long rxints; /* Receiver interrupts */ + long txints; /* Transmitter interrupts */ + long exints; /* External/status interrupts */ + long spints; /* Special receiver interrupts */ + + long enqueued; /* Packets actually forwarded */ + long rxframes; /* Number of Frames Actally Received */ + long toobig; /* Giant receiver packets */ + long crcerr; /* CRC Errors */ + long aborts; /* Receiver aborts */ + long rovers; /* Receiver Overruns */ + long txdefers; /* Number of defered transmit attempts */ + long txppersist; /* Tx attempts defered due to p-persist */ + long nomem; /* No TX buffer available for local buffer */ + uint8 status; /* Copy of R0 at last external interrupt */ + struct mbuf *rcvbuf; /* Buffer for current rx packet */ + uint16 bufsiz; /* Size of rcvbuf */ + uint8 *rcp; /* Pointer into rcvbuf */ + + struct mbuf *sndq; /* Packets awaiting transmission */ + uint16 sndcnt; /* Number of packets on sndq */ + struct mbuf *sndbuf; /* Current buffer being transmitted */ + uint16 drtx_cnt; /* Number of chars left in local buffer */ + uint8 *drtx_buffer; /* Local Tx buffer (copy of data buffer) */ + uint8 *drtx_tcp; /* Pointer into local buffer */ + struct dr_wakeup w[2]; /* One wakeup for Rx and one for Tx */ + /* Tx state machine - state processor */ + void (*tx_state)(struct drchan *hp); + /* Rx state machine - state processor */ + void (*rx_state)(struct drchan *hp); + uint8 tstate; /* Tranmsitter state */ +#define IDLE 0 /* Transmitter off, no data pending */ +#define ACTIVE 1 /* Transmitter on, sending data */ +#define UNDERRUN 2 /* Transmitter on, flushing CRC */ +#define FLAGOUT 3 /* CRC sent - attempt to start next frame */ +#define DEFER 4 /* Receive Active - DEFER Transmit */ +#define RRTS 5 /* Raise RTS */ +#define TFIRST 6 /* Transmit first character */ +#define DOWNTX 7 /* Return to receive after ENDDELAY */ + uint8 rstate; /* Set when !DCD goes to 0 (TRUE) */ +/* Normal state is ACTIVE if Receive enabled */ +#define RXERROR 2 /* Error -- Aborting current Frame */ +#define RXABORT 3 /* ABORT sequence detected */ +#define TOOBIG 4 /* too large a frame to store */ +#define ENABLE 5 /* Enable RX */ + uint16 dev; /* Device number */ + uint16 base; /* Base of I/O registers */ + uint16 stata; /* address of Channel A status regs */ + uint16 statb; /* address of Channel B status regs */ + uint16 dmactrl; /* address of DMA/INTERRUPT reg on card */ + uint16 speed; /* Line speed, bps */ + int txdelay; /* Transmit Delay 10 ms/cnt */ + int persist; /* Persistence (0-255) as a % */ + int slotime; /* Delay to wait on persistence hit */ + int squeldelay; /* Delay after XMTR OFF for seuelch tail */ + int enddelay; /* Hold up after sending last char in frame */ + struct iface *iface; /* Associated interface */ +}; +extern struct drchan drchan[]; + +/* In drsi.c: */ +INTERRUPT (NICK_FAR *(drint)(int dev))(); + +/* Interrupt vector handlers (assembler) in drsivec.asm */ +INTERRUPT dr0vec(void); + + +#define OFF 0 +#define ON 1 +#define INIT 2 + +/* 8530 clock speed */ + +#define XTAL ((long) 4915200/2) /* 32X clock constant */ + +/*************************************************************/ +/* TEMP FOR DEBUG ONLY - eliminates Divide by zero interrupt */ +/* - preset for 1200 BAUD !!!!!!!!!!!!!! */ +/*************************************************************/ +#define TXCONST 2046 /* (XTAL/1200L)-2 */ +#define RXCONST 62 /* ((XTAL/32)/1200L)-2 */ + + +/* Baud rate generator definitions */ +struct baudrate { + uint16 speed; + uint8 val; +}; + + +/* 8536 register definitions */ + +#define Z8536_MICR 0x00 /* Master interrupt control register */ +#define Z8536_MCCR 0x01 /* Master configuration control register */ +#define Z8536_CTMS1 0x1c /* Counter/timer mode specification #1 */ +#define Z8536_CTMS2 0x1d /* Counter/timer mode specification #2 */ +#define Z8536_CTMS3 0x1e /* Counter/timer mode specification #3 */ +#define Z8536_IVR 0x04 /* Interrupt vector register */ + +#define Z8536_CSR1 0x0a /* Command and status register CTC #1 */ +#define Z8536_CSR2 0x0b /* Command and status register CTC #2 */ +#define Z8536_CSR3 0x0c /* Command and status register CTC #3 */ + +#define Z8536_CC3LSB 0x15 /* CTC #3 Current count - LSB */ + +#define Z8536_CT1MSB 0x16 /* CTC #1 Timer constant - MSB */ +#define Z8536_CT1LSB 0x17 /* CTC #1 Timer constant - LSB */ +#define Z8536_CT2MSB 0x18 /* CTC #2 Timer constant - MSB */ +#define Z8536_CT2LSB 0x19 /* CTC #2 Timer constant - LSB */ +#define Z8536_CT3MSB 0x1a /* CTC #3 Timer constant - MSB */ +#define Z8536_CT3LSB 0x1b /* CTC #3 Timer constant - LSB */ +#define Z8536_PDCA 0x23 /* Port A data direction control */ +#define Z8536_PDCB 0x2b /* Port B data direction control */ + +#define Z_GCB 0x04 /* CTC Gate command bit */ +#define Z_TCB 0x02 /* CTC Trigger command bit */ +#define Z_IE 0xc0 /* CTC Interrupt enable (set) */ +#define Z_CIP 0x20 /* CTC Clear interrupt pending */ +#define Z_IP 0x20 /* CTC Interrupt pending */ + +#endif /* _DRSI_H */ diff --git a/src/nos/include/nos/eagle.h b/src/nos/include/nos/eagle.h new file mode 100644 index 00000000..dc26dbfb --- /dev/null +++ b/src/nos/include/nos/eagle.h @@ -0,0 +1,130 @@ +#ifndef _EAGLE_H +#define _EAGLE_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +/* Hardware-dependent routines for the EAGLE card for the PC + * This card contains a Zilog 8530 only - no modem! + */ +#define EGMAX 1 /* One card max */ +#define AX_MTU 512 +#define INTMASK 0x21 /* Intel 8259 interrupt controller mask */ + +struct EGTAB { + INTERRUPT (*oldvec)(void); /* Original interrupt vector contents */ + uint16 addr; /* Base I/O address */ + unsigned vec; /* Vector */ + long ints; /* Interrupt count */ + uint8 chain; /* Interrupt chaining enable */ +}; +extern struct EGTAB Eagle[]; + +/* Register offset info, specific to the EAGLE + * E.g., to read the data port on channel A, use + * inportb(egchan[dev].base + CHANA + DATA) + */ +#define CHANB 0 /* Base of channel B regs */ +#define CHANA 2 /* Base of channel A regs */ + +/* 8530 ports on each channel */ +#define CTL 0 +#define DATA 1 +#define DMACTRL 4 /* Base of channel + 4 */ + +/* EAGLE DMA/INTERRUPT CONTROL REGISTER */ +#define DMAPORT 0 /* 0 = Data Port */ +#define INTPORT 1 /* 1 = Interrupt Port */ +#define DMACHANA 0 /* 0 = DMA on CHANNEL A */ +#define DMACHANB 2 /* 1 = DMA on Channel B */ +#define DMADISABLE 0 /* 0 = DMA disabled */ +#define DMAENABLE 4 /* 1 = DMA enabled */ +#define INTDISABLE 0 /* 0 = Interrupts disabled */ +#define INTENABLE 8 /* 1 = Interrupts enabled */ +#define INTACKTOG 10 /* 1 = INT ACK TOGGLE */ + + +struct egchan { + long rxints; /* Receiver interrupts */ + long txints; /* Transmitter interrupts */ + long exints; /* External/status interrupts */ + long spints; /* Special receiver interrupts */ + + int enqueued; /* Packets actually forwarded */ + int rxframes; /* Number of Frames Actally Received */ + int toobig; /* Giant receiver packets */ + int crcerr; /* CRC Errors */ + int aborts; /* Receiver aborts */ + int rovers; /* Receiver Overruns */ + + uint8 status; /* Copy of R0 at last external interrupt */ + struct mbuf *rcvbuf; /* Buffer for current rx packet */ + uint16 bufsiz; /* Size of rcvbuf */ + uint8 *rcp; /* Pointer into rcvbuf */ + + struct mbuf *sndq; /* Packets awaiting transmission */ + uint16 sndcnt; /* Number of packets on sndq */ + struct mbuf *sndbuf; /* Current buffer being transmitted */ + uint8 tstate; /* Tranmsitter state */ +#define IDLE 0 /* Transmitter off, no data pending */ +#define ACTIVE 1 /* Transmitter on, sending data */ +#define UNDERRUN 2 /* Transmitter on, flushing CRC */ +#define FLAGOUT 3 /* CRC sent - attempt to start next frame */ +#define DEFER 4 /* Receive Active - DEFER Transmit */ + uint8 rstate; /* Set when !DCD goes to 0 (TRUE) */ +/* Normal state is ACTIVE if Receive enabled */ +#define RXERROR 2 /* Error -- Aborting current Frame */ +#define RXABORT 3 /* ABORT sequence detected */ +#define TOOBIG 4 /* too large a frame to store */ + int dev; /* Device number */ + uint16 base; /* Base of I/O registers */ + uint16 stata; /* address of Channel A status regs */ + uint16 statb; /* address of Channel B status regs */ + uint16 dmactrl; /* address of DMA/INTERRUPT reg on card */ + uint16 speed; /* Line speed, bps */ + uint8 txdelay; /* Transmit Delay 10 ms/cnt */ + uint8 persist; /* Persistence (0-255) as a % */ + uint8 slotime; /* Delay to wait on persistence hit */ + uint8 squeldelay; /* Delay after XMTR OFF for squelch tail */ + struct iface *iface; /* Associated interface */ +}; +extern struct egchan Egchan[]; + + +#define OFF 0 +#define ON 1 +#define INIT 2 + +/* 8530 clock speed */ + +#define XTAL ((long) 3686400/2) /* 32X clock constant */ + +/*************************************************************/ +/* TEMP FOR DEBUG ONLY - eliminates Divide by zero interrupt */ +/* - preset for 1200 BAUD !!!!!!!!!!!!!! */ +/*************************************************************/ +#define TXCONST 1534 /* (XTAL/1200L)-2 */ +#define RXCONST 46 /* ((XTAL/32)/1200L)-2 */ + +/* Baud rate generator definitions */ +struct baudrate { + uint16 speed; + uint8 val; +}; + +/* In eagle.c: */ +INTERRUPT (NICK_FAR *(egint)(int dev))(); + +/* In eaglevec.asm: */ +INTERRUPT eg0vec(void); + +#endif /* _EAGLE_H */ diff --git a/src/nos/include/nos/enet.h b/src/nos/include/nos/enet.h new file mode 100644 index 00000000..a45b4de2 --- /dev/null +++ b/src/nos/include/nos/enet.h @@ -0,0 +1,51 @@ +#ifndef _ENET_H +#define _ENET_H + +/* Generic Ethernet constants and templates */ +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#define EADDR_LEN 6 +/* Format of an Ethernet header */ +struct ether { + uint8 dest[EADDR_LEN]; + uint8 source[EADDR_LEN]; + uint16 type; +}; +#define ETHERLEN 14 + +/* Ethernet broadcast address */ +extern uint8 Ether_bdcst[]; + +/* Ethernet type fields */ +#define IP_TYPE 0x800 /* Type field for IP */ +#define ARP_TYPE 0x806 /* Type field for ARP */ +#define REVARP_TYPE 0x8035 /* Type field for reverse ARP */ + +#define RUNT 60 /* smallest legal size packet, no fcs */ +#define GIANT 1514 /* largest legal size packet, no fcs */ + +#define MAXTRIES 16 /* Maximum number of transmission attempts */ + +/* In file enet.c: */ +char *pether(char *out,uint8 *addr); +int gether(uint8 *out,char *cp); +int enet_send(struct mbuf **bpp,struct iface *iface,int32 gateway,uint8 tos); +int enet_output(struct iface *iface,uint8 dest[],uint8 source[],uint16 type, + struct mbuf **bpp); +void eproc(struct iface *iface,struct mbuf **bpp); + +/* In enethdr.c: */ +void htonether(struct ether *ether,struct mbuf **data); +int ntohether(struct ether *ether,struct mbuf **bpp); + +#endif /* _ENET_H */ diff --git a/src/nos/include/nos/escc.h b/src/nos/include/nos/escc.h new file mode 100644 index 00000000..edae4bb8 --- /dev/null +++ b/src/nos/include/nos/escc.h @@ -0,0 +1,170 @@ +#ifndef _ESCC_H +#define _ESCC_H + +/* Definitions for Z8530 ESCC driver by PE1CHL + * Adapted for NOS 1/23/90 + * Ken Mitchum KY3B + * km@speedy.cs.pitt.edu + * km@cadre.dsl.pitt.edu + * + * Support added for Sealevel Systems Inc's ACB-IV 8530 card (HWSEALEVEL) + * 5 Aug 91, Tom Jennings, Cygnus Support (tomj@cygnus.com). See comments + * in ESCC.C + * + */ + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#define INLINE 1 + +typedef uint16 ioaddr; /* type definition for an 'io port address' */ +#define MAXESCC 4 /* maximal number of ESCC chips supported */ +#define TPS (1000/MSPTICK) /* escctim() ticks per second */ + +# if defined(INLINE) +/* special delay construction only necessary when inline IN/OUT is used */ +#define D(v) escc_delay(v) /* delay for 5 PCLK cycles (or more) */ +#define RDREG(a) (D(inportb(a))) /* read any input port */ +#define WRREG(a,v) {outportb(a,v); D(1);} /* write any output port */ +#define RDESCC(c,r) (outportb(c,r), D(1), D(inportb(c))) /* read ESCC reg */ +#define WRESCC(c,r,v) {outportb(c,r); D(1); outportb(c,v); D(1);} /* write ESCC reg*/ +# else +#define RDREG(a) (inportb(a)) /* read any input port */ +#define WRREG(a,v) {outportb(a,v);} /* write any output port */ +#define RDESCC(c,r) (outportb(c,r), inportb(c)) /* read ESCC reg */ +#define WRESCC(c,r,v) {outportb(c,r); outportb(c,v);} /* write ESCC reg */ +# endif + +#define HWEAGLE 0x01 /* hardware type for EAGLE card */ +#define HWPC100 0x02 /* hardware type for PC100 card */ +#define HWPRIMUS 0x04 /* hardware type for PRIMUS-PC (DG9BL) card */ +#define HWDRSI 0x08 /* hardware type for DRSI PC*Packet card */ +#define HWSEALEVEL 0x10 /* hardware type for Sealevel ACB-IV card */ + +#ifndef VOID +#define VOID(x) (x) /* not necessary for most compilers */ +#endif + +struct esccinfo { + int init; /* ESCC driver initialized? */ + int nchips; /* Number of ESCC chips in system */ + int maxchan; /* Highest valid channel number */ + ioaddr iobase; /* Base address of first ESCC */ + int space; /* Spacing between subsequent ESCCs */ + int off[2]; /* Offset to A and B channel control regs */ + int doff; /* Offset from control to data register */ + int ivec; /* System interrupt vector number */ + long clk; /* PCLK/RTxC frequency in Hz */ + int pclk; /* flag to use PCLK (instead of RTxC) */ + int hwtype; /* special hardware type indicator */ + int hwparam; /* special hardware parameter */ +}; +extern struct esccinfo esccinfo; + +/* ESCC channel control structure for AX.25 mode */ +struct escca { + unsigned int maxdefer; /* Timer for CSMA defer time limit */ + + unsigned int tstate; /* Transmitter state */ +#define IDLE 0 /* Transmitter off, no data pending */ +#define DEFER 1 /* Receive Active - DEFER Transmit */ +#define KEYUP 2 /* Permission to keyup the transmitter */ +#define KEYWT 3 /* Transmitter switched on, waiting for CTS */ +#define ACTIVE 4 /* Transmitter on, sending data */ +#define FLUSH 5 /* CRC sent - attempt to start next frame */ +#define TAIL 6 /* End of transmission, send tail */ + + unsigned char txdelay; /* Transmit Delay 10 ms/cnt */ + unsigned char persist; /* Persistence (0-255) as a % */ + unsigned char slottime; /* Delay to wait on persistence hit */ + unsigned char tailtime; /* Delay after XMTR OFF */ + unsigned char fulldup; /* Full Duplex mode 0=CSMA 1=DUP 2=ALWAYS KEYED */ + unsigned char waittime; /* Waittime before any transmit attempt */ + unsigned char maxkeyup; /* Maximum time to transmit (seconds) */ + unsigned char mintime; /* Minimal offtime after MAXKEYUP timeout */ + unsigned char idletime; /* Maximum idle time in ALWAYS KEYED mode (seconds) */ +}; + +/* ESCC channel structure. one is allocated for each attached ESCC channel, */ +/* so 2 of these are allocated for each fully utilized ESCC chip */ +struct esccchan { + /* interrupt handlers for 4 different IP's */ + /* MUST BE first 4 elements of this structure, and MUST remain */ + /* in the sequence Transmit-Status-Receive-Special */ + void (*int_transmit)(); /* Transmit Buffer Empty interrupt handler */ +#ifdef ZILOG + char dummy0; /* IAR code pointers are 3 bytes, pretend 4 */ +#endif + void (*int_extstat)(); /* External/Status Change interrupt handler */ +#ifdef ZILOG + char dummy1; /* IAR code pointers are 3 bytes, pretend 4 */ +#endif + void (*int_receive)(); /* Receive Character Avail. interrupt handler */ +#ifdef ZILOG + char dummy2; /* IAR code pointers are 3 bytes, pretend 4 */ +#endif + void (*int_special)(); /* Special Receive Condition interrupt handler */ +#ifdef ZILOG + char dummy3; /* IAR code pointers are 3 bytes, pretend 4 */ +#endif + + /* don't insert anything before "ctrl" (see assembly interrupt handler) */ + ioaddr ctrl; /* I/O address of CONTROL register */ + ioaddr data; /* I/O address of DATA register for this channel */ + + unsigned char wreg[16]; /* Copy of last written value in WRx */ + unsigned char status; /* Copy of R0 at last external interrupt */ + unsigned char txchar; /* Char to transmit on next TX interrupt */ + + struct fifo fifo; + struct escca a; /* control structure for AX.25 use */ + + struct mbuf *rbp; /* Head of mbuf chain being filled */ + struct mbuf *rbp1; /* Pointer to mbuf currently being written */ + struct mbuf *sndq; /* Encapsulated packets awaiting transmission */ + struct mbuf *tbp; /* Transmit mbuf being sent */ + + struct iface *iface; /* associated interface structure */ + + int bufsiz; + + unsigned int timercount;/* 10ms timer for AX.25 use */ + int group; /* group ID for AX.25 TX interlocking */ +#define NOGROUP 0 /* not member of any group */ +#define RXGROUP 0x100 /* if set, only tx when all channels clear */ +#define TXGROUP 0x200 /* if set, don't transmit simultaneously */ + + long speed; /* Line speed, bps */ + char extclock; /* External clock source on RTxC/TRxC */ + char fulldup; /* External divider for fulldup available */ + char tx_inhibit; /* Transmit is not allowed when set */ + char dum; /* filler (keep addr even for speed) */ + + /* statistic information on this channel */ + long rxints; /* Receiver interrupts */ + long txints; /* Transmitter interrupts */ + long exints; /* External/status interrupts */ + long spints; /* Special receiver interrupts */ + + long enqueued; /* Packets actually forwarded */ + long rxframes; /* Number of Frames Actally Received */ + long rxerrs; /* CRC Errors or KISS errors */ + unsigned int nospace; /* "Out of buffers" */ + unsigned int rovers; /* Receiver Overruns */ +}; +extern struct esccchan *esccchan[]; + +/* Z8530 ESCC Register access macros */ + +#define rd(escc,reg) RDESCC((escc)->ctrl,(reg)) +#define wr(escc,reg,val) WRESCC((escc)->ctrl,(reg),((escc)->wreg[reg] = val)) +#define or(escc,reg,val) WRESCC((escc)->ctrl,(reg),((escc)->wreg[reg] |= val)) +#define cl(escc,reg,val) WRESCC((escc)->ctrl,(reg),((escc)->wreg[reg] &= ~(val))) + +#endif /* _ESCC_H */ diff --git a/src/nos/include/nos/esccgen.h b/src/nos/include/nos/esccgen.h new file mode 100644 index 00000000..b01bd8d7 --- /dev/null +++ b/src/nos/include/nos/esccgen.h @@ -0,0 +1,235 @@ +#ifndef _ESCCGEN_H +#define _ESCCGEN_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +/* In esccgen.S: */ +void write_scc(uint16 ctl,uint8 reg,uint8 val); +uint8 read_scc(uint16 ctl,uint8 reg); +int rx8530(uint16 ctl,uint16 data,void *buf,uint16 bufsize); + +/* Zilog 8530 Serial Communications Controller Register definitions */ +#define FLAG 0x7e + +/* Write Register 0 */ +#define R0 0 /* Register selects */ +#define R1 1 +#define R2 2 +#define R3 3 +#define R4 4 +#define R5 5 +#define R6 6 +#define R7 7 +#define R8 8 +#define R9 9 +#define R10 10 +#define R11 11 +#define R12 12 +#define R13 13 +#define R14 14 +#define R15 15 + +#define NULLCODE 0 /* Null Code */ +#define POINT_HIGH 0x8 /* Select upper half of registers */ +#define RES_EXT_INT 0x10 /* Reset Ext. Status Interrupts */ +#define SEND_ABORT 0x18 /* HDLC Abort */ +#define RES_RxINT_FC 0x20 /* Reset RxINT on First Character */ +#define RES_Tx_P 0x28 /* Reset TxINT Pending */ +#define ERR_RES 0x30 /* Error Reset */ +#define RES_H_IUS 0x38 /* Reset highest IUS */ + +#define RES_Rx_CRC 0x40 /* Reset Rx CRC Checker */ +#define RES_Tx_CRC 0x80 /* Reset Tx CRC Checker */ +#define RES_EOM_L 0xC0 /* Reset EOM latch */ + +/* Write Register 1 */ + +#define EXT_INT_ENAB 0x1 /* Ext Int Enable */ +#define TxINT_ENAB 0x2 /* Tx Int Enable */ +#define PAR_SPEC 0x4 /* Parity is special condition */ + +#define RxINT_DISAB 0 /* Rx Int Disable */ +#define RxINT_FCERR 0x8 /* Rx Int on First Character Only or Error */ +#define INT_ALL_Rx 0x10 /* Int on all Rx Characters or error */ +#define INT_ERR_Rx 0x18 /* Int on error only */ + +#define WT_RDY_RT 0x20 /* Wait/Ready on R/T */ +#define WT_FN_RDYFN 0x40 /* Wait/FN/Ready FN */ +#define WT_RDY_ENAB 0x80 /* Wait/Ready Enable */ + +/* Write Register #2 (Interrupt Vector) */ + +/* Write Register 3 */ + +#define RxENABLE 0x1 /* Rx Enable */ +#define SYNC_L_INH 0x2 /* Sync Character Load Inhibit */ +#define ADD_SM 0x4 /* Address Search Mode (SDLC) */ +#define RxCRC_ENAB 0x8 /* Rx CRC Enable */ +#define ENT_HM 0x10 /* Enter Hunt Mode */ +#define AUTO_ENAB 0x20 /* Auto Enables */ +#define Rx5 0x0 /* Rx 5 Bits/Character */ +#define Rx7 0x40 /* Rx 7 Bits/Character */ +#define Rx6 0x80 /* Rx 6 Bits/Character */ +#define Rx8 0xc0 /* Rx 8 Bits/Character */ + +/* Write Register 4 */ + +#define PAR_ENA 0x1 /* Parity Enable */ +#define PAR_EVEN 0x2 /* Parity Even/Odd* */ + +#define SYNC_ENAB 0 /* Sync Modes Enable */ +#define SB1 0x4 /* 1 stop bit/char */ +#define SB15 0x8 /* 1.5 stop bits/char */ +#define SB2 0xc /* 2 stop bits/char */ + +#define MONSYNC 0 /* 8 Bit Sync character */ +#define BISYNC 0x10 /* 16 bit sync character */ +#define SDLC 0x20 /* SDLC Mode (01111110 Sync Flag) */ +#define EXTSYNC 0x30 /* External Sync Mode */ + +#define X1CLK 0x0 /* x1 clock mode */ +#define X16CLK 0x40 /* x16 clock mode */ +#define X32CLK 0x80 /* x32 clock mode */ +#define X64CLK 0xC0 /* x64 clock mode */ + +/* Write Register 5 */ + +#define TxCRC_ENAB 0x1 /* Tx CRC Enable */ +#define RTS 0x2 /* RTS */ +#define SDLC_CRC 0x4 /* SDLC/CRC-16 */ +#define TxENAB 0x8 /* Tx Enable */ +#define SND_BRK 0x10 /* Send Break */ +#define Tx5 0x0 /* Tx 5 bits (or less)/character */ +#define Tx7 0x20 /* Tx 7 bits/character */ +#define Tx6 0x40 /* Tx 6 bits/character */ +#define Tx8 0x60 /* Tx 8 bits/character */ +#define DTR 0x80 /* DTR */ + +/* Write Register 6 (Sync bits 0-7/SDLC Address Field) */ + +/* Write Register 7 (Sync bits 8-15/SDLC 01111110) */ + +/* Write Register 8 (transmit buffer) */ + +/* Write Register 9 (Master interrupt control) */ +#define VIS 1 /* Vector Includes Status */ +#define NV 2 /* No Vector */ +#define DLC 4 /* Disable Lower Chain */ +#define MIE 8 /* Master Interrupt Enable */ +#define STATHI 0x10 /* Status high */ +#define NORESET 0 /* No reset on write to R9 */ +#define SINTACK 0x20 /* Software INTACK (CMOS only) */ +#define CHRB 0x40 /* Reset channel B */ +#define CHRA 0x80 /* Reset channel A */ +#define FHWRES 0xc0 /* Force hardware reset */ + +/* Write Register 10 (misc control bits) */ +#define BIT6 1 /* 6 bit/8bit sync */ +#define LOOPMODE 2 /* SDLC Loop mode */ +#define ABUNDER 4 /* Abort/flag on SDLC xmit underrun */ +#define MARKIDLE 8 /* Mark/flag on idle */ +#define GAOP 0x10 /* Go active on poll */ +#define NRZ 0 /* NRZ mode */ +#define NRZI 0x20 /* NRZI mode */ +#define FM1 0x40 /* FM1 (transition = 1) */ +#define FM0 0x60 /* FM0 (transition = 0) */ +#define CRCPS 0x80 /* CRC Preset I/O */ + +/* Write Register 11 (Clock Mode control) */ +#define TRxCXT 0 /* TRxC = Xtal output */ +#define TRxCTC 1 /* TRxC = Transmit clock */ +#define TRxCBR 2 /* TRxC = BR Generator Output */ +#define TRxCDP 3 /* TRxC = DPLL output */ +#define TRxCOI 4 /* TRxC O/I */ +#define TCRTxCP 0 /* Transmit clock = RTxC pin */ +#define TCTRxCP 8 /* Transmit clock = TRxC pin */ +#define TCBR 0x10 /* Transmit clock = BR Generator output */ +#define TCDPLL 0x18 /* Transmit clock = DPLL output */ +#define RCRTxCP 0 /* Receive clock = RTxC pin */ +#define RCTRxCP 0x20 /* Receive clock = TRxC pin */ +#define RCBR 0x40 /* Receive clock = BR Generator output */ +#define RCDPLL 0x60 /* Receive clock = DPLL output */ +#define RTxCX 0x80 /* RTxC Xtal/No Xtal */ + +/* Write Register 12 (lower byte of baud rate generator time constant) */ + +/* Write Register 13 (upper byte of baud rate generator time constant) */ + +/* Write Register 14 (Misc control bits) */ +#define BRENABL 1 /* Baud rate generator enable */ +#define BRSRC 2 /* Baud rate generator source */ +#define DTRREQ 4 /* DTR/Request function */ +#define AUTOECHO 8 /* Auto Echo */ +#define LOOPBAK 0x10 /* Local loopback */ +#define SEARCH 0x20 /* Enter search mode */ +#define RMC 0x40 /* Reset missing clock */ +#define DISDPLL 0x60 /* Disable DPLL */ +#define SSBR 0x80 /* Set DPLL source = BR generator */ +#define SSRTxC 0xa0 /* Set DPLL source = RTxC */ +#define SFMM 0xc0 /* Set FM mode */ +#define SNRZI 0xe0 /* Set NRZI mode */ + +/* Write Register 15 (external/status interrupt control) */ +#define ZCIE 2 /* Zero count IE */ +#define DCDIE 8 /* DCD IE */ +#define SYNCIE 0x10 /* Sync/hunt IE */ +#define CTSIE 0x20 /* CTS IE */ +#define TxUIE 0x40 /* Tx Underrun/EOM IE */ +#define BRKIE 0x80 /* Break/Abort IE */ + + +/* Read Register 0 */ +#define Rx_CH_AV 0x1 /* Rx Character Available */ +#define ZCOUNT 0x2 /* Zero count */ +#define Tx_BUF_EMP 0x4 /* Tx Buffer empty */ +#define DCD 0x8 /* DCD */ +#define SYNC_HUNT 0x10 /* Sync/hunt */ +#define CTS 0x20 /* CTS */ +#define TxEOM 0x40 /* Tx underrun */ +#define BRK_ABRT 0x80 /* Break/Abort */ + +/* Read Register 1 */ +#define ALL_SNT 0x1 /* All sent */ +/* Residue Data for 8 Rx bits/char programmed */ +#define RES3 0x8 /* 0/3 */ +#define RES4 0x4 /* 0/4 */ +#define RES5 0xc /* 0/5 */ +#define RES6 0x2 /* 0/6 */ +#define RES7 0xa /* 0/7 */ +#define RES8 0x6 /* 0/8 */ +#define RES18 0xe /* 1/8 */ +#define RES28 0x0 /* 2/8 */ +/* Special Rx Condition Interrupts */ +#define PAR_ERR 0x10 /* Parity error */ +#define Rx_OVR 0x20 /* Rx Overrun Error */ +#define CRC_ERR 0x40 /* CRC/Framing Error */ +#define END_FR 0x80 /* End of Frame (SDLC) */ + +/* Read Register 2 (channel b only) - Interrupt vector */ + +/* Read Register 3 (interrupt pending register) ch a only */ +#define CHBEXT 0x1 /* Channel B Ext/Stat IP */ +#define CHBTxIP 0x2 /* Channel B Tx IP */ +#define CHBRxIP 0x4 /* Channel B Rx IP */ +#define CHAEXT 0x8 /* Channel A Ext/Stat IP */ +#define CHATxIP 0x10 /* Channel A Tx IP */ +#define CHARxIP 0x20 /* Channel A Rx IP */ + +/* Read Register 8 (receive data register) */ + +/* Read Register 10 (misc status bits) */ +#define ONLOOP 2 /* On loop */ +#define LOOPSEND 0x10 /* Loop sending */ +#define CLK2MIS 0x40 /* Two clocks missing */ +#define CLK1MIS 0x80 /* One clock missing */ + +/* Read Register 12 (lower byte of baud rate generator constant) */ + +/* Read Register 13 (upper byte of baud rate generator constant) */ + +/* Read Register 15 (value of WR 15) */ + + +#endif /* _ESCCGEN_H */ diff --git a/src/nos/include/nos/files.h b/src/nos/include/nos/files.h new file mode 100644 index 00000000..8eb80bb7 --- /dev/null +++ b/src/nos/include/nos/files.h @@ -0,0 +1,46 @@ +#ifndef _FILES_H +#define _FILES_H + +/* Permission bits in FTPUSERS file */ +#define FTP_READ 1 /* Read files */ +#define FTP_CREATE 2 /* Create new files */ +#define FTP_WRITE 4 /* Overwrite or delete existing files */ +#define AX25_CMD 8 /* AX.25 gateway operation allowed */ +#define TELNET_CMD 16 /* Telnet gateway operation allowed */ +#define NETROM_CMD 32 /* NET/ROM gateway operation allowed */ +#define SYSOP_CMD 64 /* Remote sysop access allowed */ +#define EXCLUDED_CMD 128 /* This user is banned from the BBS */ +#define PPP_ACCESS_PRIV 0x0100 /* Priv bit for PPP connection */ +#define PPP_PWD_LOOKUP 0x0200 /* Priv bit for peerID/pass lookup */ + + +/* External definitions for configuration-dependent file names set in + * files.c + */ +extern char *Startup; /* Initialization file */ +extern char *Userfile; /* Authorized FTP users and passwords */ +extern char *Maillog; /* mail log */ +extern char *Mailspool; /* Incoming mail */ +extern char *Mailqdir; /* Outgoing mail spool */ +extern char *Mailqueue; /* Outgoing mail work files */ +extern char *Routeqdir; /* queue for router */ +extern char *Alias; /* the alias file */ +extern char *Dfile; /* Domain cache */ +extern char *Fdir; /* Finger info directory */ +extern char *Arealist; /* List of message areas */ +extern char *Helpdir; /* Mailbox help file directory */ +extern char *Rewritefile; /* Address rewrite file */ +extern char *Newsdir; /* News messages and NNTP data */ +extern char *Popusers; /* POP2 user and passwd file */ +extern char *Signature; /* Mail signature file directory */ +extern char *Forwardfile; /* Mail forwarding file */ +extern char *Historyfile; /* Message ID history file */ + +void initroot(char *root); +char *rootdircat(char *filename); +int userlogin(char *name,char *pass,char **path,int len,int *pwdignore); +char *userlookup(char *username, char **password, char **directory, + int *permission, int32 *ip_address); +void usercvt(void); + +#endif /* _FILES_H */ diff --git a/src/nos/include/nos/ftp.h b/src/nos/include/nos/ftp.h new file mode 100644 index 00000000..ac2c9d94 --- /dev/null +++ b/src/nos/include/nos/ftp.h @@ -0,0 +1,25 @@ +#ifndef _FTP_H +#define _FTP_H + +/* Definitions common to both FTP servers and clients */ +enum ftp_type { + ASCII_TYPE, + IMAGE_TYPE, + LOGICAL_TYPE +}; + +/* Verbosity levels for sendfile and recvfile in ftpsubr.c */ +enum verb_level { + V_QUIET, /* Error messages only */ + V_SHORT, /* Final message only */ + V_NORMAL, /* display control messages */ + V_HASH, /* control messages, hash marks */ + V_STAT /* Full-blown status display */ +}; +/* In ftpsubr.c: */ +long sendfile(FILE *fp,FILE *network,enum ftp_type mode,enum verb_level verb); +long recvfile(FILE *fp,FILE *network,enum ftp_type mode,enum verb_level verb); +int isbinary(FILE *fp); +int md5hash(FILE *fp,uint8 hash[16],int ascii); + +#endif /* _FTP_H */ diff --git a/src/nos/include/nos/ftpcli.h b/src/nos/include/nos/ftpcli.h new file mode 100644 index 00000000..5ba891e9 --- /dev/null +++ b/src/nos/include/nos/ftpcli.h @@ -0,0 +1,39 @@ +#ifndef _FTPCLI_H +#define _FTPCLI_H + +#include + +#ifndef _FTP_H +#include "ftp.h" +#endif + +#ifndef _SESSION_H +#include "session.h" +#endif + +#define LINELEN 256 /* Length of user command buffer */ + +/* Per-session FTP client control block */ +struct ftpcli { + FILE *control; + FILE *data; + + char state; +#define COMMAND_STATE 0 /* Awaiting user command */ +#define SENDING_STATE 1 /* Sending data to user */ +#define RECEIVING_STATE 2 /* Storing data from user */ + + uint16 verbose; /* Transfer verbosity level */ + int batch; /* Command batching flag */ + int abort; /* Aborted transfer flag */ + int update; /* Compare with MD5 during mput/mget */ + char type; /* Transfer type */ + char typesent; /* Last type command sent to server */ + int logbsize; /* Logical byte size for logical type */ + FILE *fp; /* File descriptor being transferred */ + + char buf[LINELEN]; /* Command buffer */ + char line[LINELEN]; /* Last response from server */ + struct session *session; +}; +#endif /* _FTPCLI_H */ diff --git a/src/nos/include/nos/ftpserv.h b/src/nos/include/nos/ftpserv.h new file mode 100644 index 00000000..a30a0a53 --- /dev/null +++ b/src/nos/include/nos/ftpserv.h @@ -0,0 +1,60 @@ +#ifndef _FTPSERV_H +#define _FTPSERV_H + +#include + +#ifndef _SOCKADDR_H +#include "sockaddr.h" +#endif + +#ifndef _FTP_H +#include "ftp.h" +#endif + +extern char *Userfile; /* List of user names and permissions */ + +struct ftpserv { + FILE *control; /* Control stream */ + FILE *data; /* Data stream */ + enum ftp_type type; /* Transfer type */ + int logbsize; /* Logical byte size for logical type */ + + FILE *fp; /* File descriptor being transferred */ + struct sockaddr_in port;/* Remote port for data connection */ + char *username; /* Arg to USER command */ + char *path; /* Allowable path prefix */ + int perms; /* Permission flag bits */ + /* (See FILES.H for definitions) */ + char *cd; /* Current directory name */ +}; + +/* FTP commands */ +enum ftp_cmd { + USER_CMD, + ACCT_CMD, + PASS_CMD, + TYPE_CMD, + LIST_CMD, + CWD_CMD, + DELE_CMD, + NAME_CMD, + QUIT_CMD, + RETR_CMD, + STOR_CMD, + PORT_CMD, + NLST_CMD, + PWD_CMD, + XPWD_CMD, + MKD_CMD, + XMKD_CMD, + XRMD_CMD, + RMD_CMD, + STRU_CMD, + MODE_CMD, + SYST_CMD, + XMD5_CMD, + XCWD_CMD /* Nick , */ +}; +int permcheck(char *path,int perms,int op,char *file); + +#endif /* _FTPSERV_H */ diff --git a/src/nos/include/nos/global.h b/src/nos/include/nos/global.h new file mode 100644 index 00000000..21767d14 --- /dev/null +++ b/src/nos/include/nos/global.h @@ -0,0 +1,299 @@ +#ifndef _GLOBAL_H +#define _GLOBAL_H + +#include +#include + +/* Global definitions used by every source file. + * Some may be compiler dependent. + * + * This file depends only on internal macros or those defined on the + * command line, so it may be safely included first. + */ + +#if !defined(AMIGA) && (defined(LATTICE) || defined(MAC) || defined(__TURBOC__)) +/* These compilers require special open modes when reading binary files. + * + * "The single most brilliant design decision in all of UNIX was the + * choice of a SINGLE character as the end-of-line indicator" -- M. O'Dell + * + * "Whoever picked the end-of-line conventions for MS-DOS and the Macintosh + * should be shot!" -- P. Karn's corollary to O'Dell's declaration + */ +#define READ_BINARY "rb" +#define WRITE_BINARY "wb" +#define APPEND_BINARY "ab+" +#define READ_TEXT "rt" +#define WRITE_TEXT "wt" +#define APPEND_TEXT "at+" + +#else + +#define READ_BINARY "r" +#define WRITE_BINARY "w" +#define APPEND_BINARY "a+" +#define READ_TEXT "r" +#define WRITE_TEXT "w" +#define APPEND_TEXT "a+" + +#endif + +/* These two lines assume that your compiler's longs are 32 bits and + * shorts are 16 bits. It is already assumed that chars are 8 bits, + * but it doesn't matter if they're signed or unsigned. + */ +typedef long int32; /* 32-bit signed integer */ +typedef unsigned long uint32; /* 32-bit unsigned integer */ +typedef unsigned short uint16; /* 16-bit unsigned integer */ +typedef unsigned char byte_t; /* 8-bit unsigned integer */ +typedef unsigned char uint8; /* 8-bit unsigned integer */ +#define MAXINT16 0xffff /* Largest 16-bit integer */ +#define MAXINT32 0xffffffff /* Largest 32-bit integer */ +#define NBBY 8 /* 8 bits/byte */ + +#define HASHMOD 7 /* Modulus used by hash_ip() function */ + +/* The "interrupt" keyword is non-standard, so make it configurable */ +#if defined(__TURBOC__) && defined(MSDOS) +#define INTERRUPT void interrupt +#else +#define INTERRUPT void +#endif + +/* Note that these definitions are on by default if none of the Turbo-C style + * memory model definitions are on; this avoids having to change them when + * porting to 68K environments. + */ +#ifdef ZILOG /* Nick */ + +#define LARGECODE 1 +#define FP_OFF(fp) ((int)(fp)) +#define FP_SEG(fp) ((int)(((unsigned long)(fp)) >> 16)) +#define MK_FP(seg, off) (((unsigned long)(seg)) << 16 | ((unsigned long)(off))) + +#else /* Nick */ + +#if !defined(__TINY__) && !defined(__SMALL__) && !defined(__MEDIUM__) && !defined(__GNUC__) +#define LARGEDATA 1 +#endif + +#if !defined(__TINY__) && !defined(__SMALL__) && !defined(__COMPACT__) && !defined(__GNUC__) +#define LARGECODE 1 +#endif + +#endif /* Nick */ + +/* Since not all compilers support structure assignment, the ASSIGN() + * macro is used. This controls how it's actually implemented. + */ +#ifdef NOSTRUCTASSIGN /* Version for old compilers that don't support it */ +#define ASSIGN(a,b) memcpy((char *)&(a),(char *)&(b),sizeof(b); +#else /* Version for compilers that do */ +#define ASSIGN(a,b) ((a) = (b)) +#endif + +/* Define null object pointer in case stdio.h isn't included */ +#ifndef NULL +/* General purpose NULL pointer */ +#define NULL 0 +#endif + +/* standard boolean constants */ +#define FALSE 0 +#define TRUE 1 +#define NO 0 +#define YES 1 + +#define CTLA 0x1 +#define CTLB 0x2 +#define CTLC 0x3 +#define CTLD 0x4 +#define CTLE 0x5 +#define CTLF 0x6 +#define CTLG 0x7 +#define CTLH 0x8 +#define CTLI 0x9 +#define CTLJ 0xa +#define CTLK 0xb +#define CTLL 0xc +#define CTLM 0xd +#define CTLN 0xe +#define CTLO 0xf +#define CTLP 0x10 +#define CTLQ 0x11 +#define CTLR 0x12 +#define CTLS 0x13 +#define CTLT 0x14 +#define CTLU 0x15 +#define CTLV 0x16 +#define CTLW 0x17 +#define CTLX 0x18 +#define CTLY 0x19 +#define CTLZ 0x1a + +#define BELL CTLG +#define BS CTLH +#define TAB CTLI +#define LF CTLJ +#define FF CTLL +#define CR CTLM +#define XON CTLQ +#define XOFF CTLS +#define ESC 0x1b +#define DEL 0x7f + +/* string equality shorthand */ +#define STREQ(x,y) (strcmp(x,y) == 0) + +/* Extract a short from a long */ +#define hiword(x) ((uint16)((x) >> 16)) +#define loword(x) ((uint16)(x)) + +/* Extract a byte from a short */ +#define hibyte(x) ((unsigned char)((x) >> 8)) +#define lobyte(x) ((unsigned char)(x)) + +/* Extract nibbles from a byte */ +#define hinibble(x) (((x) >> 4) & 0xf) +#define lonibble(x) ((x) & 0xf) + +/* Various low-level and miscellaneous functions */ +int availmem(void); +void *callocw(unsigned nelem,unsigned size); +int32 clock(); +int dirps(void); +void free(void *); +#define FREE(p) {free(p); p = NULL;} +int getopt(int argc,char *argv[],char *opts); +void getrand(unsigned char *buf,int len); +int htob(char c); +int htoi(char *); +int readhex(uint8 *,char *,int); +long htol(char *); +char *inbuf(uint16 port,char *buf,uint16 cnt); +uint16 hash_ip(int32 addr); +int istate(void); +#if 0 /* doesn't work due to inclusion from stdio.h */ +#include /* Nick temporary due to logmsg _char reference */ +void logmsg(int s,_char *fmt, ...); +#endif +int ilog2(uint16 x); +void *ltop(long); +void *malloc(size_t nb); +void *mallocw(size_t nb); +int memcnt(uint8 *buf,uint8 c,int size); +void memxor(uint8 *,uint8 *,unsigned int); +char *outbuf(uint16 port,char *buf,uint16 cnt); +int32 rdclock(void); +void restore(int); +void rip(char *); +char *smsg(char *msgs[],unsigned nmsgs,unsigned n); +void stktrace(unsigned short dummy_parameter); /* Nick added dummy_parameter */ +/* #if !defined ZILOG && !defined __TURBOC__ */ /* Nick */ +char *strdupw(const char *); +/* #endif */ +int urandom(unsigned int n); +int wildmat(char *s,char *p,char **argv); + +#ifdef AZTEC +#define rewind(fp) fseek(fp,0L,0); +#endif + +#if defined(__TURBOC__) && defined(MSDOS) +#define movblock(so,ss,do,ds,c) movedata(ss,so,ds,do,c) + +#else + +/* General purpose function macros already defined in turbo C */ +#ifndef min +#define min(x,y) ((x)<(y)?(x):(y)) /* Lesser of two args */ +#endif +#ifndef max +#define max(x,y) ((x)>(y)?(x):(y)) /* Greater of two args */ +#endif +#ifdef MSDOS +#define MK_FP(seg,ofs) ((void far *) \ + (((unsigned long)(seg) << 16) | (unsigned)(ofs))) +#endif +#endif /* __TURBOC __ */ + +#ifdef AMIGA +/* super kludge de WA3YMH */ +#ifndef fileno +#include +#endif +#define fclose(fp) amiga_fclose(fp) +extern int amiga_fclose(FILE *); +extern FILE *tmpfile(void); + +extern char *sys_errlist[]; +extern int errno; +#endif + +/* Externals used by getopt */ +extern int optind; +extern char *optarg; + +/* Threshold setting on available memory */ +extern int32 Memthresh; + +/* System clock - count of ticks since startup */ +extern int32 Clock; + +/* Various useful strings */ +extern char Badhost[]; +extern char Nospace[]; +extern char Notval[]; +extern char *Hostname; +extern char Version[]; +extern char Whitespace[]; + +/* Your system's end-of-line convention */ +extern char Eol[]; + +/* Your system OS - set in files.c */ +extern char System[]; + +/* Your system's temp directory */ +extern char *Tmpdir; + +extern unsigned Nfiles; /* Maximum number of open files */ +extern unsigned Nsock; /* Maximum number of open sockets */ + +extern void (*Gcollect[])(); + +#ifdef ZILOG /* Nick */ + +unsigned char inportb(unsigned short port); +void outportb(unsigned short port, unsigned char value); +void enable(void); +void disable(void); +void abyte(char data); +void acrlf(void); +void ahexw(int data); +void amess(char *ptr); +void copyr(unsigned long src, unsigned long dest, size_t count); +int diag_open(int dev); +int diag_close(int dev); +int diag_write(int dev, const char *buffer, size_t count); + +#define NICK_CONST +#define NICK_FAR +#define NICK_NEAR +#define NICK_PASCAL +#define NICK__SS + +#else + +#define NICK_CONST const +#define NICK_FAR far +#define NICK_NEAR near +#define NICK_PASCAL pascal +#define NICK__SS _ss + +#endif + +#include /* Nick temporary */ +#include "uzi/maxmin.h" /* Nick temporary */ + +#endif /* _GLOBAL_H */ diff --git a/src/nos/include/nos/hapn.h b/src/nos/include/nos/hapn.h new file mode 100644 index 00000000..d99ee18b --- /dev/null +++ b/src/nos/include/nos/hapn.h @@ -0,0 +1,164 @@ +#ifndef _HAPN_H +#define _HAPN_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _TIMER_H +#include "timer.h" +#endif + +/* HAPN-1 PC plug-in card driver. + * This card contains an Intel 8273 SDLC/HDLC Protocol Controller + * The card is hardwired to addresses 310-31f and IRQ 2 + */ + +#define NHAPN 1 +#define INTMASK 0x21 /* PC interrupt controller (8259) */ + +struct hapn { + struct iface *iface; + + long rxints; /* RX interupt count */ + long txints; /* TX interrupt count */ + /* Error counters */ + int badint; /* Bad interrupt type */ + int crcerr; /* CRC errors */ + int aborts; /* RX frame aborts */ + int dmaorun; /* DMA overun */ + int toobig; /* RX frame too large */ + int rframes; /* # of RX frames */ + int cdloss; /* Loss of DCD during receive */ + int rxorun; /* Receive interrupt overun */ + int nomem; /* insufficient memory */ + int t_urun; /* TX underruns */ + int ctsloss; /* Loss of CTS (dead-man timeout) */ + int taborts; /* TX aborts */ + int tframes; /* # of TX frames */ + + struct mbuf *rcvbuf; /* Current receive buffer */ + uint16 bufsiz; /* Maximum RX frame size */ + uint8 *rcp; /* RX data pointer */ + + struct mbuf *sndq; /* Transmit frames queue */ + uint16 sndcnt; /* Count of frames on sndq */ + struct mbuf *sndbuf; /* Current TX frame buffer */ + int tstate; /* Transmitter state */ +#define IDLE 0 +#define DEFER 1 +#define ACTIVE 2 + struct timer defer; + int mode; /* Channel-access mode */ +#define CSMA 0 +#define FULLDUP 1 + uint16 base; /* Base I/O address of board */ + unsigned vec; /* Interrupt level */ + INTERRUPT (*oldvec)(void); /* Previous interrupt service vector */ + uint8 chain; /* Interrupt chaining enable */ +}; + +extern struct hapn Hapn[]; + +/* Interrupt vector handler */ + +/* In hapn.c: */ +INTERRUPT (NICK_FAR *(haint)(int dev))(); + +/* In hapnvec.asm: */ +INTERRUPT ha0vec(void); + +/* 8273 register addresses */ + +#define CMD 0 +#define STA 0 +#define PAR 1 +#define RES 1 +#define RST 1 +#define TXI 2 +#define RXI 3 +#define TXD 4 +#define RXD 8 + +/* 8273 commands */ + +#define SET_ONE 0xa4 +#define RST_ONE 0x64 +#define SET_XFER 0x97 +#define RST_XFER 0x57 +#define SET_MODE 0x91 +#define RST_MODE 0x51 +#define HDLC 0x20 +#define EOP 0x10 +#define EARLY 0x8 +#define BUFFERD 4 +#define PREFRM 2 +#define FLG_STM 1 +#define SET_SERIAL 0xa0 +#define RST_SERIAL 0x60 +#define LOOP 4 +#define TXC_RXC 2 +#define NRZI 1 +#define GENERAL_RX 0xc0 +#define SELECT_RX 0xc1 +#define SELECT_LRX 0xc2 +#define RX_DISABLE 0xc5 +#define TX_FRAME 0xc8 +#define LOOP_TX 0xca +#define TX_TRANS 0xc9 +#define ABORT_TXF 0xcc +#define ABORT_LTX 0xce +#define ABORT_TXT 0xcd +#define READ_A 0x22 +#define CD 2 +#define CTS 1 +#define READ_B 0x23 +#define SET_B 0xa3 +#define RST_B 0x63 +#define FLAG_D 0x20 +#define IRQ_ENB 8 +#define RTS 1 + +/* Status register bits */ + +#define CBSY 0x80 +#define CBF 0x40 +#define CPBF 0x20 +#define CRBF 0x10 +#define RXINT 8 +#define TXINT 4 +#define RXIRA 2 +#define TXIRA 1 + +/* Transmit result codes */ + +#define EARLY_TXI 0xc +#define TX_CMPLT 0xd +#define DMA_URUN 0xe +#define CTS_LOSS 0xf +#define ABORT_CMPLT 0x10 + +/* Receive result codes */ + +#define A1_MATCH 0 +#define A2_MATCH 1 +#define CRCERR 3 +#define ABORT_DET 4 +#define IDLE_DET 5 +#define EOP_DET 6 +#define SHORT_FRM 7 +#define DMA_OVRN 8 +#define MEM_OVFL 9 +#define CD_LOSS 0xa +#define RX_ORUN 0xb + +#endif /* _HAPN_H */ + diff --git a/src/nos/include/nos/hardware.h b/src/nos/include/nos/hardware.h new file mode 100644 index 00000000..f9f421c7 --- /dev/null +++ b/src/nos/include/nos/hardware.h @@ -0,0 +1,5 @@ +#ifndef _HARDWARE_H +#define _HARDWARE_H +#include "nospc.h" +#endif /* _HARDWARE_H */ + diff --git a/src/nos/include/nos/hs.h b/src/nos/include/nos/hs.h new file mode 100644 index 00000000..4ba5aac2 --- /dev/null +++ b/src/nos/include/nos/hs.h @@ -0,0 +1,87 @@ +#ifndef _HS_H +#define _HS_H +/* Hardware-dependent routines for the DRSI or Eagle cards for the PC + * driving a high speed modem. These cards both contain Zilog 8530s. + */ + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#define NHS 1 /* One card max */ + +struct hs { + struct { + INTERRUPT (*vec)(void); + } save; + + uint16 addr; /* Base I/O adHsess */ + uint16 vec; /* Vector */ + long ints; /* Interrupt count */ + uint8 chain; /* Interrupt chaining enable */ +}; +extern struct hs Hs[]; + +/* Register offset info, specific to the DRSI PCPA and Eagle cards + * E.g., to read the data port on channel A, use + * inportb(hdlc[dev].base + CHANA + DATA) + */ +#define CHANB 0 /* Base of channel B regs */ +#define CHANA 2 /* Base of channel A regs */ + +/* 8530 ports on each channel */ +#define CTL 0 +#define DATA 1 + +struct hdlc { + long rxints; /* Receiver interrupts */ + long txints; /* Transmitter interrupts */ + long exints; /* External/status interrupts */ + long spints; /* Special receiver interrupts */ + long rxbytes; /* Total receive bytes */ + long nomem; /* Buffer allocate failures */ + long toobig; /* Giant receiver packets */ + long crcerr; /* CRC Errors */ + long aborts; /* Receiver aborts */ + long good; /* Valid frames */ + long txpkts; + long overrun; /* Receiver overruns */ + + uint16 bufsiz; /* Size of rcvbuf */ + + int dev; /* Device number */ + int clkrev; /* Clock pins swapped */ + uint16 ctl; /* Control register */ + uint16 data; /* Data register */ + uint16 speed; /* Line speed, bps */ + long txdelay; /* Keyup delay, ticks */ + uint8 p; /* P-persistence value */ + struct mbuf *txq; /* Transmit queue */ + + struct iface *iface; /* Associated interface */ + int32 deftime; /* Time when we can next transmit */ +}; + +#define OFF 0 +#define ON 1 + +/* Baud rate generator definitions */ +struct baudrate { + uint16 speed; + uint8 val; +}; +/* In hs.c: */ +INTERRUPT (NICK_FAR *(hsint)(int dev))(); + +/* In hsvec.asm: */ +INTERRUPT hs0vec(int dev); + +#endif /* _HS_H */ diff --git a/src/nos/include/nos/icmp.h b/src/nos/include/nos/icmp.h new file mode 100644 index 00000000..a0fcf5c1 --- /dev/null +++ b/src/nos/include/nos/icmp.h @@ -0,0 +1,142 @@ +#ifndef _ICMP_H +#define _ICMP_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _INTERNET_H +#include "internet.h" +#endif + +#ifndef _IP_H +#include "ip.h" +#endif + +/* SNMP MIB variables, used for statistics and control. See RFC 1066 */ +extern struct mib_entry Icmp_mib[]; +#define icmpInMsgs Icmp_mib[1].value.integer +#define icmpInErrors Icmp_mib[2].value.integer +#define icmpInDestUnreachs Icmp_mib[3].value.integer +#define icmpInTimeExcds Icmp_mib[4].value.integer +#define icmpInParmProbs Icmp_mib[5].value.integer +#define icmpInSrcQuenchs Icmp_mib[6].value.integer +#define icmpInRedirects Icmp_mib[7].value.integer +#define icmpInEchos Icmp_mib[8].value.integer +#define icmpInEchoReps Icmp_mib[9].value.integer +#define icmpInTimestamps Icmp_mib[10].value.integer +#define icmpInTimestampReps Icmp_mib[11].value.integer +#define icmpInAddrMasks Icmp_mib[12].value.integer +#define icmpInAddrMaskReps Icmp_mib[13].value.integer +#define icmpOutMsgs Icmp_mib[14].value.integer +#define icmpOutErrors Icmp_mib[15].value.integer +#define icmpOutDestUnreachs Icmp_mib[16].value.integer +#define icmpOutTimeExcds Icmp_mib[17].value.integer +#define icmpOutParmProbs Icmp_mib[18].value.integer +#define icmpOutSrcQuenchs Icmp_mib[19].value.integer +#define icmpOutRedirects Icmp_mib[20].value.integer +#define icmpOutEchos Icmp_mib[21].value.integer +#define icmpOutEchoReps Icmp_mib[22].value.integer +#define icmpOutTimestamps Icmp_mib[23].value.integer +#define icmpOutTimestampReps Icmp_mib[24].value.integer +#define icmpOutAddrMasks Icmp_mib[25].value.integer +#define icmpOutAddrMaskReps Icmp_mib[26].value.integer +#define NUMICMPMIB 26 + +/* Internet Control Message Protocol */ + +/* Message types */ +#define ICMP_ECHO_REPLY 0 /* Echo Reply */ +#define ICMP_DEST_UNREACH 3 /* Destination Unreachable */ +#define ICMP_QUENCH 4 /* Source Quench */ +#define ICMP_REDIRECT 5 /* Redirect */ +#define ICMP_ECHO 8 /* Echo Request */ +#define ICMP_TIME_EXCEED 11 /* Time-to-live Exceeded */ +#define ICMP_PARAM_PROB 12 /* Parameter Problem */ +#define ICMP_TIMESTAMP 13 /* Timestamp */ +#define ICMP_TIME_REPLY 14 /* Timestamp Reply */ +#define ICMP_INFO_RQST 15 /* Information Request */ +#define ICMP_INFO_REPLY 16 /* Information Reply */ +#define ICMP_ADDR_MASK 17 /* Address mask request */ +#define ICMP_ADDR_MASK_REPLY 18 /* Address mask reply */ +#define ICMP_IPSP 19 /* Problem with secured packet */ +#define ICMP_TYPES 20 + +/* Internal format of an ICMP header (checksum is missing) */ +struct icmp { + uint8 type; + uint8 code; + union icmp_args { + uint16 mtu; + int32 unused; + uint8 pointer; + int32 address; + struct { + uint16 id; + uint16 seq; + } echo; + } args; +}; +#define ICMPLEN 8 /* Length of ICMP header on the net */ + +/* Destination Unreachable codes */ +#define ICMP_NET_UNREACH 0 /* Net unreachable */ +#define ICMP_HOST_UNREACH 1 /* Host unreachable */ +#define ICMP_PROT_UNREACH 2 /* Protocol unreachable */ +#define ICMP_PORT_UNREACH 3 /* Port unreachable */ +#define ICMP_FRAG_NEEDED 4 /* Fragmentation needed and DF set */ +#define ICMP_ROUTE_FAIL 5 /* Source route failed */ +#define ICMP_ADMIN_PROHIB 13 /* Administrativly prohibbited */ + +#define NUNREACH 14 + +/* Time Exceeded codes */ +#define ICMP_TTL_EXCEED 0 /* Time-to-live exceeded */ +#define ICMP_FRAG_EXCEED 1 /* Fragment reassembly time exceeded */ + +#define NEXCEED 2 + +/* Redirect message codes */ +#define ICMP_REDR_NET 0 /* Redirect for the network */ +#define ICMP_REDR_HOST 1 /* Redirect for the host */ +#define ICMP_REDR_TOS 2 /* Redirect for Type of Service, or-ed with prev */ + +#define NREDIRECT 3 + +/* Bad security packet codes */ +#define ICMP_IPSP_SPI_UNKNOWN 0 +#define ICMP_IPSP_AUTH_FAIL 1 +#define ICMP_IPSP_DECRYPT_FAIL 2 +#define NIPSP 3 + +extern int Icmp_trace; +extern int Icmp_echo; + +/* ICMP messages, decoded */ +extern char *Icmptypes[],*Unreach[],*Exceed[],*Redirect[],*Said_icmp[]; + +struct icmplink { + uint8 proto; + void (*funct)(int32,int32,int32,uint8,uint8,struct mbuf **); +}; +extern struct icmplink Icmplink[]; + +/* In icmp.c: */ +void icmp_input(struct iface *iface,struct ip *ip,struct mbuf **bp, + int rxbroadcast,int32 said); +int icmp_output(struct ip *ip,struct mbuf *data,uint8 type,uint8 code, + union icmp_args *args); + +/* In icmphdr.c: */ +void htonicmp(struct icmp *icmp,struct mbuf **data); +int ntohicmp(struct icmp *icmp,struct mbuf **bpp); + +#endif /* _ICMP_H */ diff --git a/src/nos/include/nos/iface.h b/src/nos/include/nos/iface.h new file mode 100644 index 00000000..74115d17 --- /dev/null +++ b/src/nos/include/nos/iface.h @@ -0,0 +1,147 @@ +#ifndef _IFACE_H +#define _IFACE_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _PROC_H +#include "proc.h" +#endif + + +/* Interface encapsulation mode table entry. An array of these structures + * are initialized in config.c with all of the information necessary + * to attach a device. + */ +struct iface; /* Defined later */ +struct iftype { + char *name; /* Name of encapsulation technique */ + int (*send)(struct mbuf **,struct iface *,int32,uint8); + /* Routine to send an IP datagram */ + int (*output)(struct iface *,uint8 *,uint8 *,uint16,struct mbuf **); + /* Routine to send link packet */ + char *(*format)(char *,uint8 *); + /* Function that formats addresses */ + int (*scan)(uint8 *,char *); + /* Reverse of format */ + int type; /* Type field for network process */ + int hwalen; /* Length of hardware address, if any */ + void (*rcvf)(struct iface *,struct mbuf **); + /* Function that handles incoming packets */ + int (*addrtest)(struct iface *,struct mbuf *); + /* Function that tests incoming addresses */ + void (*trace)(FILE *,struct mbuf **,int); + /* Function that decodes protocol headers */ + int (*dinit)(struct iface *,int32,int,char **); + /* Function to initialize demand dialing */ + int (*dstat)(struct iface *); + /* Function to display dialer status */ +}; +extern struct iftype Iftypes[]; + + +/* Interface control structure */ +struct iface { + struct iface *next; /* Linked list pointer */ + char *name; /* Ascii string with interface name */ + + int32 addr; /* IP address */ + int32 broadcast; /* Broadcast address */ + int32 netmask; /* Network mask */ + + uint16 mtu; /* Maximum transmission unit size */ + + uint16 trace; /* Trace flags */ +#define IF_TRACE_OUT 0x01 /* Output packets */ +#define IF_TRACE_IN 0x10 /* Packets to me except broadcast */ +#define IF_TRACE_ASCII 0x100 /* Dump packets in ascii */ +#define IF_TRACE_HEX 0x200 /* Dump packets in hex/ascii */ +#define IF_TRACE_NOBC 0x1000 /* Suppress broadcasts */ +#define IF_TRACE_RAW 0x2000 /* Raw dump, if supported */ + FILE *trfp; /* Stream to trace to */ + + struct iface *forw; /* Forwarding interface for output, if rx only */ + + struct proc *rxproc; /* Receiver process, if any */ + struct proc *txproc; /* IP send process */ + struct proc *supv; /* Supervisory process, if any */ + + struct mbuf *outq; /* IP datagram transmission queue */ + int outlim; /* Limit on outq length */ + int txbusy; /* Transmitter is busy */ + + void *dstate; /* Demand dialer link state, if any */ + int (*dtickle)(struct iface *); + /* Function to tickle dialer, if any */ + void (*dstatus)(struct iface *); + /* Function to display dialer state, if any */ + + /* Device dependent */ + int dev; /* Subdevice number to pass to send */ + /* To device -- control */ + int32 (*ioctl)(struct iface *,int cmd,int set,int32 val); + /* From device -- when status changes */ + int (*iostatus)(struct iface *,int cmd,int32 val); + /* Call before detaching */ + int (*stop)(struct iface *); + uint8 *hwaddr; /* Device hardware address, if any */ + + /* Encapsulation dependent */ + void *edv; /* Pointer to protocol extension block, if any */ + int xdev; /* Associated Slip or Nrs channel, if any */ + struct iftype *iftype; /* Pointer to appropriate iftype entry */ + + /* Routine to send an IP datagram */ + int (*send)(struct mbuf **,struct iface *,int32,uint8); + /* Encapsulate any link packet */ + int (*output)(struct iface *,uint8 *,uint8 *,uint16,struct mbuf **); + /* Send raw packet */ + int (*raw)(struct iface *,struct mbuf **); + /* Display status */ + void (*show)(struct iface *); + + int (*discard)(struct iface *,struct mbuf **); + int (*echo)(struct iface *,struct mbuf **); + + /* Counters */ + int32 ipsndcnt; /* IP datagrams sent */ + int32 rawsndcnt; /* Raw packets sent */ + int32 iprecvcnt; /* IP datagrams received */ + int32 rawrecvcnt; /* Raw packets received */ + int32 lastsent; /* Clock time of last send */ + int32 lastrecv; /* Clock time of last receive */ +}; +extern struct iface *Ifaces; /* Head of interface list */ +extern struct iface Loopback; /* Optional loopback interface */ +extern struct iface Encap; /* IP-in-IP pseudo interface */ + +/* Header put on front of each packet sent to an interface */ +struct qhdr { + uint8 tos; + int32 gateway; +}; + +extern char Noipaddr[]; +extern struct mbuf *Hopper; + +/* In iface.c: */ +int bitbucket(struct iface *ifp,struct mbuf **bp); +int if_detach(struct iface *ifp); +struct iface *if_lookup(char *name); +char *if_name(struct iface *ifp,char *comment); +void if_tx(int dev,void *arg1,void *unused); +struct iface *ismyaddr(int32 addr); +void network(int i,void *v1,void *v2); +int nu_send(struct mbuf **bpp,struct iface *ifp,int32 gateway,uint8 tos); +int nu_output(struct iface *,uint8 *,uint8 *,uint16,struct mbuf **); +int setencap(struct iface *ifp,char *mode); + +/* In config.c: */ +int net_route(struct iface *ifp,struct mbuf **bpp); + +#endif /* _IFACE_H */ diff --git a/src/nos/include/nos/internet.h b/src/nos/include/nos/internet.h new file mode 100644 index 00000000..05669621 --- /dev/null +++ b/src/nos/include/nos/internet.h @@ -0,0 +1,68 @@ +#ifndef _INTERNET_H +#define _INTERNET_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +/* Global structures and constants pertaining to the interface between IP and + * higher level protocols + */ + +/* IP protocol field values */ +#define ICMP_PTCL 1 /* Internet Control Message Protocol */ +#define IP4_PTCL 4 /* IP inside IP */ +#define TCP_PTCL 6 /* Transmission Control Protocol */ +#define UDP_PTCL 17 /* User Datagram Protocol */ +#define IP_PTCL 94 /* JI's IP inside IP */ +#define ESP_PTCL 50 /* Encapsulating Security Protocol */ +#define AH_PTCL 51 /* Authentication header */ + +#define MAXTTL 255 /* Maximum possible IP time-to-live value */ + +/* DoD-style precedences */ +#define IP_PRECEDENCE 0xe0 /* Mask for precedence field */ +#define ROUTINE 0x00 +#define PRIORITY 0x20 +#define IMMEDIATE 0x40 +#define FLASH 0x60 +#define FLASH_OVER 0x80 +#define CRITIC 0xa0 +#define INET_CTL 0xc0 +#define NET_CTL 0xe0 + +/* Amateur-style precedences */ +#define AM_ROUTINE 0x00 +#define AM_WELFARE 0x20 +#define AM_PRIORITY 0x40 +#define AM_EMERGENCY 0x60 + +/* Class-of-service bits */ +#define IP_COS 0x1c /* Mask for class-of-service bits */ +#define LOW_DELAY 0x10 +#define THROUGHPUT 0x08 +#define RELIABILITY 0x04 + +/* IP TOS fields */ +#define PREC(x) (((x)>>5) & 0x7) +#define DELAY 0x10 +#define THRUPUT 0x8 +#define RELIABLITY 0x4 + +/* Pseudo-header for TCP and UDP checksumming */ +struct pseudo_header { + int32 source; /* IP source */ + int32 dest; /* IP destination */ + char protocol; /* Protocol */ + uint16 length; /* Data field length */ +}; + +/* Format of a MIB entry for statistics gathering */ +struct mib_entry { + char *name; + union { + int32 integer; + } value; +}; + +#endif /* _INTERNET_H */ diff --git a/src/nos/include/nos/ip.h b/src/nos/include/nos/ip.h new file mode 100644 index 00000000..9a8a9abe --- /dev/null +++ b/src/nos/include/nos/ip.h @@ -0,0 +1,223 @@ +#ifndef _IP_H +#define _IP_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _INTERNET_H +#include "internet.h" +#endif + +#ifndef _TIMER_H +#include "timer.h" +#endif + +#define TLB 30 /* Default reassembly timeout, sec */ +#define IPVERSION 4 +#define IP_CS_OLD 1 /* use saved checksum */ +#define IP_CS_NEW 0 /* calculate checksum */ + +extern char Hashtab[]; /* Modulus lookup table */ + +/* SNMP MIB variables, used for statistics and control. See RFC 1066 */ +extern struct mib_entry Ip_mib[]; +#define ipForwarding Ip_mib[1].value.integer +#define ipDefaultTTL Ip_mib[2].value.integer +#define ipInReceives Ip_mib[3].value.integer +#define ipInHdrErrors Ip_mib[4].value.integer +#define ipInAddrErrors Ip_mib[5].value.integer +#define ipForwDatagrams Ip_mib[6].value.integer +#define ipInUnknownProtos Ip_mib[7].value.integer +#define ipInDiscards Ip_mib[8].value.integer +#define ipInDelivers Ip_mib[9].value.integer +#define ipOutRequests Ip_mib[10].value.integer +#define ipOutDiscards Ip_mib[11].value.integer +#define ipOutNoRoutes Ip_mib[12].value.integer +#define ipReasmTimeout Ip_mib[13].value.integer +#define ipReasmReqds Ip_mib[14].value.integer +#define ipReasmOKs Ip_mib[15].value.integer +#define ipReasmFails Ip_mib[16].value.integer +#define ipFragOKs Ip_mib[17].value.integer +#define ipFragFails Ip_mib[18].value.integer +#define ipFragCreates Ip_mib[19].value.integer + +#define NUMIPMIB 19 + +/* IP header, INTERNAL representation */ +#define IPLEN 20 /* Length of standard IP header */ +#define IP_MAXOPT 40 /* Largest option field, bytes */ +struct ip { + int32 source; /* Source address */ + int32 dest; /* Destination address */ + uint16 length; /* Total length */ + uint16 id; /* Identification */ + uint16 offset; /* Fragment offset in bytes */ + uint16 checksum; /* Header checksum */ + + struct { + unsigned int congest:1; /* Congestion experienced bit (exp) */ + unsigned int df:1; /* Don't fragment flag */ + unsigned int mf:1; /* More Fragments flag */ + } flags; + + uint8 version; /* IP version number */ + uint8 tos; /* Type of service */ + uint8 ttl; /* Time to live */ + uint8 protocol; /* Protocol */ + uint8 optlen; /* Length of options field, bytes */ + uint8 options[IP_MAXOPT];/* Options field */ +}; +/* Fields in option type byte */ +#define OPT_COPIED 0x80 /* Copied-on-fragmentation flag */ +#define OPT_CLASS 0x60 /* Option class */ +#define OPT_NUMBER 0x1f /* Option number */ + +/* IP option numbers */ +#define IP_EOL 0 /* End of options list */ +#define IP_NOOP 1 /* No Operation */ +#define IP_SECURITY 2 /* Security parameters */ +#define IP_LSROUTE 3 /* Loose Source Routing */ +#define IP_TIMESTAMP 4 /* Internet Timestamp */ +#define IP_RROUTE 7 /* Record Route */ +#define IP_STREAMID 8 /* Stream ID */ +#define IP_SSROUTE 9 /* Strict Source Routing */ + +/* Timestamp option flags */ +#define TS_ONLY 0 /* Time stamps only */ +#define TS_ADDRESS 1 /* Addresses + Time stamps */ +#define TS_PRESPEC 3 /* Prespecified addresses only */ + +/* IP routing table entry */ +struct route { + struct route *prev; /* Linked list pointers */ + struct route *next; + int32 target; /* Target IP address */ + unsigned int bits; /* Number of significant bits in target */ + int32 gateway; /* IP address of local gateway for this target */ + int32 metric; /* Hop count or whatever */ + struct iface *iface; /* Device interface structure */ + struct { + unsigned int rtprivate:1; /* Don't advertise this route */ + unsigned int rttrig:1; /* Trigger is pending for this route */ + } flags; + struct timer timer; /* Time until aging of this entry */ + int32 uses; /* Usage count */ +}; +extern struct route *Routes[32][HASHMOD]; /* Routing table */ +extern struct route R_default; /* Default route entry */ + +/* Cache for the last-used routing entry, speeds up the common case where + * we handle a burst of packets to the same destination + */ +struct rt_cache { + int32 target; + struct route *route; +}; +extern struct rt_cache Rt_cache[]; +extern int32 Rtlookups; /* Count of calls to rt_lookup() */ +extern int32 Rtchits; /* Count of cache hits in rt_lookup() */ + +extern uint16 Id_cntr; /* Datagram serial number */ + +/* Reassembly descriptor */ +struct reasm { + struct reasm *next; /* Linked list pointer */ + struct timer timer; /* Reassembly timeout timer */ + struct frag *fraglist; /* Head of data fragment chain */ + uint16 length; /* Entire datagram length, if known */ + int32 source; /* src/dest/id/protocol uniquely describe a datagram */ + int32 dest; + uint16 id; + char protocol; +}; + +/* Fragment descriptor in a reassembly list */ +struct frag { + struct frag *prev; /* Previous fragment on list */ + struct frag *next; /* Next fragment */ + struct mbuf *buf; /* Actual fragment data */ + uint16 offset; /* Starting offset of fragment */ + uint16 last; /* Ending offset of fragment */ +}; + +extern struct reasm *Reasmq; /* The list of reassembly descriptors */ + +/* Structure for handling raw IP user sockets */ +struct raw_ip { + struct raw_ip *next; /* Linked list pointer */ + + struct mbuf *rcvq; /* receive queue */ + void (*r_upcall)(struct raw_ip *); + int protocol; /* Protocol */ + int user; /* User linkage */ +}; + +/* formerly Raw_ip but this conflicts with raw_ip() on a Win32 filesystem */ +extern struct raw_ip *Rawip; + +/* Transport protocol link table */ +struct iplink { + char proto; + char *name; + void (*funct)(struct iface *,struct ip *,struct mbuf **,int,int32); + void (*dump)(FILE *,struct mbuf **,int32,int32,int); +}; +extern struct iplink Iplink[]; + +/* List of TCP port numbers to be given priority queuing */ +extern int Tcp_interact[]; + +extern int Ip_trace; + +/* In ip.c: */ +void ip_garbage(int drastic); +void ip_recv(struct iface *iface,struct ip *ip,struct mbuf **bpp, + int rxbroadcast, int32 said); +void ipip_recv(struct iface *iface,struct ip *ip,struct mbuf **bp, + int rxbroadcast,int32 said); +int ip_send(int32 source,int32 dest,char protocol,char tos,char ttl, + struct mbuf **bpp,uint16 length,uint16 id,char df); +struct raw_ip *raw_ip(int protocol,void (*r_upcall)(struct raw_ip *) ); +void del_ip(struct raw_ip *rrp); +void rquench(struct iface *ifp,int drop); + +/* In ipdump.c */ +void dumpip(struct iface *iface,struct ip *ip,struct mbuf *bp,int32 spi); + +/* In iproute.c: */ +void ipinit(void); +uint16 ip_mtu(int32 addr); +void encap_tx(int dev,void *arg1,void *unused); +int ip_encap(struct mbuf **bpp,struct iface *iface,int32 gateway,uint8 tos); +void ip_proc(struct iface *iface,struct mbuf **bpp); +int ip_route(struct iface *i_iface,struct mbuf **bpp,int rxbroadcast); +int32 locaddr(int32 addr); +void rt_merge(int trace); +struct route *rt_add(int32 target,unsigned int bits,int32 gateway, + struct iface *iface,int32 metric,int32 ttl,uint8 private); +int rt_drop(int32 target,unsigned int bits); +struct route *rt_lookup(int32 target); +struct route *rt_blookup(int32 target,unsigned int bits); + +/* In iphdr.c: */ +uint16 cksum(struct pseudo_header *ph,struct mbuf *m,uint16 len); +uint16 eac(int32 sum); +void htonip(struct ip *ip,struct mbuf **data,int cflag); +int ntohip(struct ip *ip,struct mbuf **bpp); + +/* In either lcsum.c or pcgen.asm: */ +uint16 lcsum(uint16 *wp,uint16 len); + +/* In sim.c: */ +void net_sim(struct mbuf *bp); + +#endif /* _IP_H */ diff --git a/src/nos/include/nos/kiss.h b/src/nos/include/nos/kiss.h new file mode 100644 index 00000000..32645875 --- /dev/null +++ b/src/nos/include/nos/kiss.h @@ -0,0 +1,20 @@ +#ifndef _KISS_H +#define _KISS_H + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +/* In kiss.c: */ +int kiss_free(struct iface *ifp); +int kiss_raw(struct iface *iface,struct mbuf **data); +void kiss_recv(struct iface *iface,struct mbuf **bp); +int kiss_init(struct iface *ifp); +int32 kiss_ioctl(struct iface *iface,int cmd,int set,int32 val); +void kiss_recv(struct iface *iface,struct mbuf **bp); + +#endif /* _KISS_H */ diff --git a/src/nos/include/nos/lapb.h b/src/nos/include/nos/lapb.h new file mode 100644 index 00000000..4974e139 --- /dev/null +++ b/src/nos/include/nos/lapb.h @@ -0,0 +1,183 @@ +#ifndef _LAPB_H +#define _LAPB_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _TIMER_H +#include "timer.h" +#endif + +#ifndef _AX25_H +#include "ax25.h" +#endif + +/* Upper sub-layer (LAPB) definitions */ + +/* Control field templates */ +#define I 0x00 /* Information frames */ +#define S 0x01 /* Supervisory frames */ +#define RR 0x01 /* Receiver ready */ +#define RNR 0x05 /* Receiver not ready */ +#define REJ 0x09 /* Reject */ +#define U 0x03 /* Unnumbered frames */ +#define SABM 0x2f /* Set Asynchronous Balanced Mode */ +#define DISC 0x43 /* Disconnect */ +#define DM 0x0f /* Disconnected mode */ +#define UA 0x63 /* Unnumbered acknowledge */ +#define FRMR 0x87 /* Frame reject */ +#define UI 0x03 /* Unnumbered information */ +#define PF 0x10 /* Poll/final bit */ + +#define MMASK 7 /* Mask for modulo-8 sequence numbers */ + +/* FRMR reason bits */ +#define W 1 /* Invalid control field */ +#define X 2 /* Unallowed I-field */ +#define Y 4 /* Too-long I-field */ +#define Z 8 /* Invalid sequence number */ + +#define SEG_FIRST 0x80 /* First segment of a sequence */ +#define SEG_REM 0x7f /* Mask for # segments remaining */ + +/* Per-connection link control block + * These are created and destroyed dynamically, + * and are indexed through a hash table. + * One exists for each logical AX.25 Level 2 connection + */ +struct ax25_cb { + struct ax25_cb *next; /* Linked list pointer */ + + struct iface *iface; /* Interface */ + + struct mbuf *txq; /* Transmit queue */ + struct mbuf *rxasm; /* Receive reassembly buffer */ + struct mbuf *rxq; /* Receive queue */ + + uint8 local[AXALEN]; /* Addresses */ + uint8 remote[AXALEN]; + + struct { + unsigned int rejsent:1; /* REJ frame has been sent */ + unsigned int remotebusy:1; /* Remote sent RNR */ + unsigned int rtt_run:1; /* Round trip "timer" is running */ + unsigned int retrans:1; /* A retransmission has occurred */ + unsigned int clone:1; /* Server-type cb, will be cloned */ + } flags; + + uint8 reason; /* Reason for connection closing */ +#define LB_NORMAL 0 /* Normal close */ +#define LB_DM 1 /* Received DM from other end */ +#define LB_TIMEOUT 2 /* Excessive retries */ + + uint8 response; /* Response owed to other end */ + uint8 vs; /* Our send state variable */ + uint8 vr; /* Our receive state variable */ + uint8 unack; /* Number of unacked frames */ + int maxframe; /* Transmit flow control level, frames */ + uint16 paclen; /* Maximum outbound packet size, bytes */ + uint16 window; /* Local flow control limit, bytes */ + enum { + V1=1, /* AX.25 Version 1 */ + V2 /* AX.25 Version 2 */ + } proto; /* Protocol version */ + uint16 pthresh; /* Poll threshold, bytes */ + unsigned retries; /* Retry counter */ + unsigned n2; /* Retry limit */ + enum { + LAPB_DISCONNECTED=1, + LAPB_LISTEN, + LAPB_SETUP, + LAPB_DISCPENDING, + LAPB_CONNECTED, + LAPB_RECOVERY + } state; /* Link state */ + struct timer t1; /* Retry timer */ + struct timer t3; /* Keep-alive poll timer */ + int32 rtt_time; /* Stored clock values for RTT, ticks */ + int rtt_seq; /* Sequence number being timed */ + int32 srt; /* Smoothed round-trip time, ms */ + int32 mdev; /* Mean rtt deviation, ms */ + + void (*r_upcall)(struct ax25_cb *,int); /* Receiver upcall */ + void (*t_upcall)(struct ax25_cb *,int); /* Transmit upcall */ + void (*s_upcall)(struct ax25_cb *,int,int); /* State change upcall */ + + int user; /* User pointer */ + + int segremain; /* Segmenter state */ +}; +/* Linkage to network protocols atop ax25 */ +struct axlink { + int pid; + void (*funct)(struct iface *,struct ax25_cb *,uint8 *, uint8 *, + struct mbuf **,int); +}; +extern struct axlink Axlink[]; + +/* Codes for the open_ax25 call */ +#define AX_PASSIVE 0 +#define AX_ACTIVE 1 +#define AX_SERVER 2 /* Passive, clone on opening */ + +extern struct ax25_cb Ax25default,*Ax25_cb; +extern char *Ax25states[],*Axreasons[]; +extern int32 Axirtt,T3init,Blimit; +extern uint16 N2,Maxframe,Paclen,Pthresh,Axwindow,Axversion; + +/* In ax25cmd.c: */ +void st_ax25(struct ax25_cb *axp); + +/* In ax25subr.c: */ +struct ax25_cb *cr_ax25(uint8 *addr); +void del_ax25(struct ax25_cb *axp); +struct ax25_cb *find_ax25(uint8 *); + +/* In ax25user.c: */ +int ax25val(struct ax25_cb *axp); +int disc_ax25(struct ax25_cb *axp); +int kick_ax25(struct ax25_cb *axp); +struct ax25_cb *open_ax25(struct iface *,uint8 *,uint8 *, + int,uint16, + void (*)(struct ax25_cb *,int), + void (*)(struct ax25_cb *,int), + void (*)(struct ax25_cb *,int,int), + int user); +struct mbuf *recv_ax25(struct ax25_cb *axp,uint16 cnt); +int reset_ax25(struct ax25_cb *axp); +int send_ax25(struct ax25_cb *axp,struct mbuf **bp,int pid); + +/* In lapb.c: */ +void est_link(struct ax25_cb *axp); +void lapbstate(struct ax25_cb *axp,int s); +int lapb_input(struct ax25_cb *axp,int cmdrsp,struct mbuf **bp); +int lapb_output(struct ax25_cb *axp); +struct mbuf *segmenter(struct mbuf **bp,uint16 ssize); +int sendctl(struct ax25_cb *axp,int cmdrsp,int cmd); +int sendframe(struct ax25_cb *axp,int cmdrsp,int ctl,struct mbuf **data); +void axnl3(struct iface *iface,struct ax25_cb *axp,uint8 *src, + uint8 *dest,struct mbuf **bp,int mcast); + +/* In lapbtimer.c: */ +void pollthem(void *p); +void recover(void *p); + +/* In ax25subr.c: */ +uint16 ftype(int control); +void lapb_garbage(int drastic); + +/* In axsock.c: */ +void s_arcall(struct ax25_cb *axp,int cnt); +void s_ascall(struct ax25_cb *axp,int old,int new); +void s_atcall(struct ax25_cb *axp,int cnt); + +#endif /* _LAPB_H */ diff --git a/src/nos/include/nos/logmsg.h b/src/nos/include/nos/logmsg.h new file mode 100644 index 00000000..116ea6be --- /dev/null +++ b/src/nos/include/nos/logmsg.h @@ -0,0 +1,9 @@ +#ifndef __LOGMSG_H +#define __LOGMSG_H + +#include + +void logmsg(int s, _char *fmt, ...); + +#endif /* __LOGMSG_H */ + diff --git a/src/nos/include/nos/lzw.h b/src/nos/include/nos/lzw.h new file mode 100644 index 00000000..af9ac141 --- /dev/null +++ b/src/nos/include/nos/lzw.h @@ -0,0 +1,50 @@ +#ifndef _LZW_H +#define _LZW_H + +/* a string entry */ +struct zentry { + uint16 code; /* codeword of the prefix string */ + char data; /* character to add to the prefix string */ +}; +struct zfast { /* fast version of string entry */ + uint16 owncode; /* own codeword */ + uint16 code; /* codeword of prefix string */ + char data; /* character to add to prefix string */ +}; +#define ZCC 256 /* clear code table codeword */ +#define ZFLUSH 257 /* codeword that signals a break in coding */ + +struct lzw { + uint16 codebits; /* significant bits in each codeword */ + int maxbits; /* maximum number of bits per codeword */ +#define LZWBITS 9 /* initial number of bits in each codeword */ + int32 prefix; /* last processed codeword */ + char mode; /* Compact or fast compression mode */ +#define LZWCOMPACT 0 +#define LZWFAST 1 + union { + struct zentry **tbl; /* compact table */ +#define LZWBLK 130 /* size of entry arrays to allocate */ + struct mbuf **bpp; /* mbuf version of table */ +#define ZHASH 256 /* hash table size */ + void *p; /* generic table pointer */ + } tu; /* table of entries */ + int nextbit; /* next bit to process in code stream */ + int version; /* version number of sender */ +#define ZVERSION 3 /* version number */ + int32 cnt; /* count of processed bytes */ + int32 code; /* temporary storage for coding in progress */ + int32 next; /* next code to be added to the table */ + int flushbit; /* next bit of the ZFLUSH codeword to send */ + /* the following is used by the decoder only */ + struct mbuf *buf; /* decoded buffer */ +}; + +struct usock; /* To please Turbo C++ */ +void lzwencode(int s,char c); +void lzwinit(int s,int bits,int mode); +void lzwfree(struct usock *up); +void lzwflush(struct usock *up); +int lzwdecode(struct usock *up); + +#endif /* _LZW_H */ diff --git a/src/nos/include/nos/mailbox.h b/src/nos/include/nos/mailbox.h new file mode 100644 index 00000000..64938499 --- /dev/null +++ b/src/nos/include/nos/mailbox.h @@ -0,0 +1,114 @@ +#ifndef _MAILBOX_H +#define _MAILBOX_H +/* Defines for the ax.25 mailbox facility */ +#define NUMMBX 10 /* max number of mailbox sessions */ +#ifndef _TIMER_H +#include "timer.h" +#endif + +#ifndef _SOCKADDR_H +#include "sockaddr.h" +#endif + +/* a mailbox list entry */ +struct let { + long start; + long size; + int status; +}; + +#define MBXLINE 128 /* max length of line */ +struct mbx { + int state ; /* mailbox state */ +#define MBX_LOGIN 0 /* trying to log in */ +#define MBX_CMD 1 /* in command mode */ +#define MBX_SUBJ 2 /* waiting for a subject line */ +#define MBX_DATA 3 /* collecting the message */ +#define MBX_REVFWD 4 /* reverse forwarding in progress */ +#define MBX_TRYING 5 /* pending forwarding connection */ +#define MBX_FORWARD 6 /* established forwarding connection */ + char name[20] ; /* Name of remote station */ + char *to ; /* To-address in form user or user@host */ + char *origto ; /* Original To-address, if rewritten */ + char *tofrom ; /* Optional */ +#define MBX_HIER_SID 0x04 /* The BBS supports "hierarchical routing */ + /* designators." */ + /* Space here for others, currently not of */ + /* interest to us. */ + char stype ; /* BBS send command type (B,P,T, etc.) */ + int type ; /* Type of session when invoking "chat" */ + FILE *user; /* User linkage area */ + char escape; /* Escape character */ + int privs; /* Privileges (taken from Ftpusers file) */ +#define AX25_CMD 8 /* AX.25 gateway operation allowed */ +#define TELNET_CMD 16 /* Telnet gateway operation allowed */ +#define NETROM_CMD 32 /* NET/ROM gateway operation allowed */ +#define SYSOP_CMD 64 /* Remote sysop access allowed */ +#define EXCLUDED_CMD 128 /* This user is banned from the BBS */ + char *path; /* Directory path */ + char *startmsg; /* Message to be sent at connect through any */ + /* of the gateways */ + int current; /* the current message number */ + int nmsgs; /* number of messages in this mail box */ + int newmsgs; /* number of new messages in mail box */ + int change; /* mail file changed */ + int anyread; /* true if any message has been read */ + FILE *mfile; /* mail data file pointer */ + char area[64]; /* name of current mail area */ + long mboxsize; /* size of mailbox when opened */ + long mysize; /* size of my private mailbox */ + struct let *mbox; + char *stdinbuf; /* the stdio buffer for the mail file */ + char *stdoutbuf; /* the stdio file io buffer for the temp file */ +} ; + +/* Structure used for automatic flushing of gateway sockets */ +struct gwalarm { + FILE *s1; + FILE *s2; + struct timer t; +}; + +/* In mailbox.c: */ +extern struct mbx *Mbox[NUMMBX] ; +extern char Noperm[]; +extern char Nosock[]; +extern void (*Listusers)(FILE *network); + +int dombescape(int argc,char *argv[],void *p); +int mbxrecvline(FILE *network,char *buf,int len,int escape); +int gw_connect(struct mbx *m,int s,struct sockaddr *fsocket,int len); + +void mbx_incom(int s,void *t,void *p); +int domboxdisplay(int argc,char *argv[],void *p); +struct mbx *newmbx(void); +void exitbbs(struct mbx *m); +int domboxbye(int argc,char *argv[],void *p); +int mbx_parse(struct mbx *m); +void changearea(struct mbx *m,char *area); +char *rewrite_address(char *addr); +void listusers(FILE *network); + +/* In forward.c: */ +int dorevfwd(int argc,char *argv[],void *p); +int dombtimer(int argc,char *argv[],void *p); +int dombkick(int argc,char *argv[],void *p); + +/* In tipmail.c */ +extern unsigned Tiptimeout; + +#endif /* _MAILBOX_H */ + diff --git a/src/nos/include/nos/main.h b/src/nos/include/nos/main.h new file mode 100644 index 00000000..2d9e0034 --- /dev/null +++ b/src/nos/include/nos/main.h @@ -0,0 +1,16 @@ +#ifndef _MAIN_H +#define _MAIN_H + +#ifndef _PROC_H +#include "proc.h" +#endif + +extern char Badhost[]; +extern char *Hostname; +extern char Nospace[]; /* Generic malloc fail message */ + +extern struct proc *Cmdpp; +extern struct proc *Display; +extern int main_exit; /* from main program (flag) */ + +#endif /* _MAIN_H */ diff --git a/src/nos/include/nos/mbuf.h b/src/nos/include/nos/mbuf.h new file mode 100644 index 00000000..8be4ee12 --- /dev/null +++ b/src/nos/include/nos/mbuf.h @@ -0,0 +1,85 @@ +#ifndef _MBUF_H +#define _MBUF_H + +#include + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +extern unsigned Ibufsize; /* Size of interrupt buffers to allocate */ +extern int Nibufs; /* Number of interrupt buffers to allocate */ +extern long Pushdowns; /* Total calls to pushdown() */ +extern long Pushalloc; /* Calls to pushdown that call malloc() */ + +/* Basic message buffer structure */ +struct mbuf { + struct mbuf *next; /* Links mbufs belonging to single packets */ + struct mbuf *anext; /* Links packets on queues */ + uint16 size; /* Size of associated data buffer */ + int refcnt; /* Reference count */ + struct mbuf *dup; /* Pointer to duplicated mbuf */ + uint8 *data; /* Active working pointers */ + uint16 cnt; +}; + +#if 1 /* Nick */ +#define PULLCHAR(bpp) pullchar((bpp)) +/* ((bpp) && *(bpp) && (*(bpp))->cnt > 1 ? \ + ((*(bpp))->cnt--, *(*(bpp))->data++) : pullchar((bpp))) */ +#else +#define PULLCHAR(bpp)\ + ((bpp) != NULL && (*bpp) != NULL && (*bpp)->cnt > 1 ? \ + ((*bpp)->cnt--,*(*bpp)->data++) : pullchar(bpp)) +#endif + +/* In mbuf.c: */ +struct mbuf *alloc_mbuf(uint16 size); +struct mbuf *free_mbuf(struct mbuf **bpp); + +struct mbuf *ambufw(uint16 size); +struct mbuf *copy_p(struct mbuf *bp,uint16 cnt); +uint16 dup_p(struct mbuf **hp,struct mbuf *bp,uint16 offset,uint16 cnt); +uint16 extract(struct mbuf *bp,uint16 offset,void *buf,uint16 len); +struct mbuf *free_p(struct mbuf **bpp); +uint16 len_p(struct mbuf *bp); +void trim_mbuf(struct mbuf **bpp,uint16 length); +int write_p(FILE *fp,struct mbuf *bp); + +struct mbuf *dequeue(struct mbuf **q); +void enqueue(struct mbuf **q,struct mbuf **bpp); +void free_q(struct mbuf **q); +uint16 len_q(struct mbuf *bp); + +struct mbuf *qdata(void *data,uint16 cnt); +uint16 dqdata(struct mbuf *bp,void *buf,unsigned cnt); + +void append(struct mbuf **bph,struct mbuf **bpp); +void pushdown(struct mbuf **bpp,void *buf,uint16 size); +uint16 pullup(struct mbuf **bph,void *buf,uint16 cnt); + +#if 1 /* Nick */ +#define pullchar(bpp) pull8((bpp)) +#else +#define pullchar(x) pull8(x) +#endif +int pull8(struct mbuf **bpp); /* returns -1 if nothing */ +long pull16(struct mbuf **bpp); /* returns -1 if nothing */ +int32 pull32(struct mbuf **bpp); /* returns 0 if nothing */ + +uint16 get16(uint8 *cp); +int32 get32(uint8 *cp); +uint8 *put16(uint8 *cp,uint16 x); +uint8 *put32(uint8 *cp,int32 x); + +void iqstat(void); +void refiq(void); +void mbuf_crunch(struct mbuf **bpp); + +void mbufsizes(void); +void mbufstat(void); +void mbuf_garbage(int red); + +#define AUDIT(bp) audit(bp,__FILE__,__LINE__) + +#endif /* _MBUF_H */ diff --git a/src/nos/include/nos/md5.h b/src/nos/include/nos/md5.h new file mode 100644 index 00000000..3ac57360 --- /dev/null +++ b/src/nos/include/nos/md5.h @@ -0,0 +1,56 @@ +/* MD5.H - header file for MD5C.C + */ +typedef unsigned long UINT4; + +/* Following inserted to remove dependencies on other include files - PRK */ +#ifndef _RSAREF_H_ /* Should find a cleaner way */ +#define PROTO_LIST(x) x +typedef unsigned char * POINTER; +#endif + +/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All + rights reserved. + + License to copy and use this software is granted provided that it + is identified as the "RSA Data Security, Inc. MD5 Message-Digest + Algorithm" in all material mentioning or referencing this software + or this function. + + License is also granted to make and use derivative works provided + that such works are identified as "derived from the RSA Data + Security, Inc. MD5 Message-Digest Algorithm" in all material + mentioning or referencing the derived work. + + RSA Data Security, Inc. makes no representations concerning either + the merchantability of this software or the suitability of this + software for any particular purpose. It is provided "as is" + without express or implied warranty of any kind. + + These notices must be retained in any copies of any part of this + documentation and/or software. + */ + +#ifndef _MD5_H_ +#define _MD5_H_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* MD5 context. */ +typedef struct { + UINT4 state[4]; /* state (ABCD) */ + UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ + unsigned char buffer[64]; /* input buffer */ +} MD5_CTX; + +void MD5Init PROTO_LIST ((MD5_CTX *)); +void MD5Update PROTO_LIST + ((MD5_CTX *, unsigned char *, unsigned int)); +void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/nos/include/nos/n8250.h b/src/nos/include/nos/n8250.h new file mode 100644 index 00000000..3027d093 --- /dev/null +++ b/src/nos/include/nos/n8250.h @@ -0,0 +1,188 @@ +/* Various I/O definitions specific to asynch I/O on the IBM PC */ +#ifndef _N8250_H +#define _N8250_H + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _PROC_H +#include "proc.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +/* Output pseudo-dma control structure */ +struct dma { + uint8 *data; /* current output pointer */ + unsigned short cnt; /* byte count remaining */ + volatile uint8 busy; /* transmitter active */ +}; + +/* Read fifo control structure */ +struct fifo { + uint8 *buf; /* Ring buffer */ + unsigned bufsize; /* Size of ring buffer */ + uint8 *wp; /* Write pointer */ + uint8 *rp; /* Read pointer */ + volatile unsigned short cnt; /* count of characters in buffer */ + unsigned short hiwat; /* High water mark */ + long overrun; /* count of sw fifo buffer overruns */ +}; + +/* Asynch controller control block */ +struct asy { + struct iface *iface; + struct fifo fifo; + int trigchar; /* Fifo trigger character */ + + struct dma dma; + + unsigned addr; /* Base I/O address */ + int vec; /* Interrupt vector */ + long speed; /* Line speed in bits per second */ + + struct { /* Previous configuration saved at startup */ + INTERRUPT (*vec)(void); + /* Original interrupt vector [cs:pc] */ + uint8 mask; /* 8259 mask */ + uint8 divh,divl; /* baud rate divisor */ + uint8 lcr; /* line control reg */ + uint8 ier; /* Interrupt enable register */ + uint8 mcr; /* modem control bits */ + uint8 msr; /* modem status bits */ + uint8 iir; /* Interrupt ind register (for fifo bits) */ + } save; + + uint8 is_16550a; /* 16550A detected */ + uint8 msr; /* Copy of current modem status register */ + uint8 cts; /* obey CTS lead for xmit flow control */ + uint8 rlsd; /* RLSD (CD) indicates line state */ + uint8 chain; /* Do interrupt vector chaining */ + + long fifotimeouts; /* hw fifo character timeout int's */ + long rxints; /* receive interrupts */ + long txints; /* transmit interrupts */ + long rxchar; /* Received characters */ + long overrun; /* Receiver hardware overrun errors */ + long txchar; /* Transmitted characters */ + long rxhiwat; /* High water mark on hardware rx fifo */ + long msint_count; /* Count of modem status interrupts */ + long txto; /* Count of TX interrupt timeouts */ + long cdchanges; /* Count of CD changes */ +}; + +extern int Nasy; /* Actual number of asynch lines */ +extern struct asy Asy[]; + +struct fport { + int base; + int irq; + struct asy *asy[4]; /* Pointers to regular asy entries */ + int iv; /* Interrupt demux port */ +}; +extern int Nfport; +extern struct fport Fport[]; + +#define BAUDCLK 115200L /* 1.8432 Mhz / 16 */ + +/* National 8250 asynch UART definitions */ +/* Control/status register offsets from base address */ +#define THR 0 /* Transmitter holding register */ +#define RBR 0 /* Receiver buffer register */ +#define DLL 0 /* Divisor latch LSB */ +#define DLM 1 /* Divisor latch MSB */ +#define IER 1 /* Interrupt enable register */ +#define IIR 2 /* Interrupt ident register */ +#define FCR 2 /* FIFO control register (16550A only) */ +#define LCR 3 /* Line control register */ +#define MCR 4 /* Modem control register */ +#define LSR 5 /* Line status register */ +#define MSR 6 /* Modem status register */ + +/* 8250 Line Control Register */ +#define LCR_5BITS 0x00 /* 5 bit words */ +#define LCR_6BITS 0x01 /* 6 bit words */ +#define LCR_7BITS 0x02 /* 7 bit words */ +#define LCR_8BITS 0x03 /* 8 bit words */ +#define LCR_BIT_MASK 0x03 /* mask of bit size */ +#define LCR_NSB 0x04 /* Number of stop bits */ +#define LCR_PEN 0x08 /* Parity enable */ +#define LCR_EPS 0x10 /* Even parity select */ +#define LCR_SP 0x20 /* Stick parity */ +#define LCR_SB 0x40 /* Set break */ +#define LCR_DLAB 0x80 /* Divisor Latch Access Bit */ + +/* 8250 Line Status Register */ +#define LSR_DR 0x01 /* Data ready */ +#define LSR_OE 0x02 /* Overrun error */ +#define LSR_PE 0x04 /* Parity error */ +#define LSR_FE 0x08 /* Framing error */ +#define LSR_BI 0x10 /* Break interrupt */ +#define LSR_THRE 0x20 /* Transmitter line holding register empty */ +#define LSR_TSRE 0x40 /* Transmitter shift register empty */ + +/* 8250 Interrupt Identification Register */ +#define IIR_IP 0x01 /* 0 if interrupt pending */ + +#define IIR_MSTAT 0x00 /* Modem status interrupt */ +#define IIR_THRE 0x02 /* Transmitter holding register empty int */ +#define IIR_RDA 0x04 /* Receiver data available interrupt */ +#define IIR_RLS 0x06 /* Receiver Line Status interrupt */ +#define IIR_ID_MASK 0x06 /* Mask for interrupt ID */ + +#define IIR_FIFO_TIMEOUT 0x08 /* FIFO timeout interrupt pending - 16550A */ +#define IIR_FIFO_ENABLED 0xc0 /* FIFO enabled (FCR0,1 = 1) - 16550A only */ + + +/* 8250 interrupt enable register bits */ +#define IER_DAV 0x01 /* Data available interrupt */ +#define IER_TxE 0x02 /* Tx buffer empty interrupt */ +#define IER_RLS 0x04 /* Receive line status interrupt */ +#define IER_MS 0x08 /* Modem status interrupt */ + +/* 8250 Modem control register */ +#define MCR_DTR 0x01 /* Data Terminal Ready */ +#define MCR_RTS 0x02 /* Request to Send */ +#define MCR_RFR MCR_RTS /* Ready for Receiving (same as RTS) */ +#define MCR_OUT1 0x04 /* Out 1 (not used) */ +#define MCR_OUT2 0x08 /* Master interrupt enable (actually OUT 2) */ +#define MCR_LOOP 0x10 /* Loopback test mode */ + +/* 8250 Modem Status Register */ +#define MSR_DCTS 0x01 /* Delta Clear-to-Send */ +#define MSR_DDSR 0x02 /* Delta Data Set Ready */ +#define MSR_TERI 0x04 /* Trailing edge ring indicator */ +#define MSR_DRLSD 0x08 /* Delta Rx Line Signal Detect */ +#define MSR_CTS 0x10 /* Clear to send */ +#define MSR_DSR 0x20 /* Data set ready */ +#define MSR_RI 0x40 /* Ring indicator */ +#define MSR_RLSD 0x80 /* Rx line signal detect */ + +/* 16550A FIFO control register values */ +#define FIFO_ENABLE 0x01 /* enable TX & RX fifo */ +#define FIFO_CLR_RX 0x02 /* clear RX fifo */ +#define FIFO_CLR_TX 0x04 /* clear TX fifo */ +#define FIFO_START_DMA 0x08 /* enable TXRDY/RXRDY pin DMA handshake */ +#define FIFO_SIZE_1 0x00 /* RX fifo trigger levels */ +#define FIFO_SIZE_4 0x40 +#define FIFO_SIZE_8 0x80 +#define FIFO_SIZE_14 0xC0 +#define FIFO_SIZE_MASK 0xC0 + +#define FIFO_TRIGGER_LEVEL FIFO_SIZE_4 +#define FIFO_SETUP (FIFO_ENABLE|FIFO_CLR_RX|FIFO_CLR_TX|FIFO_TRIGGER_LEVEL) + +#define OUTPUT_FIFO_SIZE 16 + +/* In asyvec.asm: */ +INTERRUPT asy0vec(void); +INTERRUPT asy1vec(void); +INTERRUPT asy2vec(void); +INTERRUPT asy3vec(void); +INTERRUPT asy4vec(void); +INTERRUPT asy5vec(void); + +#endif /* _N8250_H */ diff --git a/src/nos/include/nos/netrom.h b/src/nos/include/nos/netrom.h new file mode 100644 index 00000000..cf6df91b --- /dev/null +++ b/src/nos/include/nos/netrom.h @@ -0,0 +1,211 @@ +#ifndef _NETROM_H +#define _NETROM_H + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _AX25_H +#include "ax25.h" +#endif + +#ifndef _LAPB_H +#include "lapb.h" +#endif + +#ifndef _NR4_H +#include "nr4.h" +#endif + +/* net/rom support definitions + * Copyright 1989 by Daniel M. Frank, W9NK. Permission granted for + * non-commercial distribution only. + */ + +#define NR3HLEN 15 /* length of a net/rom level 3 hdr, */ +#define NR3DLEN 241 /* max data size in net/rom l3 packet */ +#define NR3NODESIG 0xff /* signature for nodes broadcast */ +#define NR3NODEHL 7 /* nodes bc header length */ + +#define NRNUMIFACE 10 /* number of interfaces associated */ + /* with net/rom network layer */ +#define NRNUMCHAINS 17 /* number of chains in the */ + /* neighbor and route hash tables */ +#define NRRTDESTLEN 21 /* length of destination entry in */ + /* nodes broadcast */ +#define NRDESTPERPACK 11 /* maximum number of destinations per */ + /* nodes packet */ + +/* NET/ROM protocol numbers */ +#define NRPROTO_IP 0x0c + +/* Internal representation of net/rom network layer header */ +struct nr3hdr { + uint8 source[AXALEN] ; /* callsign of origin node */ + uint8 dest[AXALEN] ; /* callsign of destination node */ + unsigned ttl ; /* time-to-live */ +} ; + +/* Internal representation of net/rom routing broadcast destination */ +/* entry */ +struct nr3dest { + uint8 dest[AXALEN] ; /* destination callsign */ + char alias[AXALEN] ; /* ident, upper case ASCII, blank-filled */ + uint8 neighbor[AXALEN] ; /* best-quality neighbor */ + unsigned quality ; /* quality of route for this neighbor */ +} ; + + +/* net/rom interface table entry */ +struct nriface { + struct iface *iface ; /* pointer to ax.25 interface */ + char alias[AXALEN] ; /* alias for this interface's node */ + /* broadcasts */ + unsigned quality ; /* net/rom link quality estimate */ +} ; + +/* net/rom neighbor table structure */ +struct nrnbr_tab { + struct nrnbr_tab *next ; /* doubly linked list pointers */ + struct nrnbr_tab *prev ; + uint8 call[AXALEN] ; /* call of neighbor + 2 digis max */ + unsigned iface ; /* offset of neighbor's port in */ + /* interface table */ + unsigned refcnt ; /* how many routes for this neighbor? */ +} ; + +/* A list of these structures is provided for each route table */ +/* entry. They bind a destination to a neighbor node. If the */ +/* list of bindings becomes empty, the route table entry is */ +/* automatically deleted. */ + +struct nr_bind { + struct nr_bind *next ; /* doubly linked list */ + struct nr_bind *prev ; + unsigned quality ; /* quality estimate */ + unsigned obsocnt ; /* obsolescence count */ + unsigned flags ; +#define NRB_PERMANENT 0x01 /* entry never times out */ +#define NRB_RECORDED 0x02 /* a "record route" entry */ + struct nrnbr_tab *via ; /* route goes via this neighbor */ +} ; + +/* net/rom routing table entry */ + +struct nrroute_tab { + struct nrroute_tab *next ; /* doubly linked list pointers */ + struct nrroute_tab *prev ; + char alias[AXALEN] ; /* alias of node */ + uint8 call[AXALEN] ; /* callsign of node */ + unsigned num_routes ; /* how many routes in bindings list? */ + struct nr_bind *routes ; /* list of neighbors */ + +} ; + +/* The net/rom nodes broadcast filter structure */ +struct nrnf_tab { + struct nrnf_tab *next ; /* doubly linked list */ + struct nrnf_tab *prev ; + uint8 neighbor[AXALEN] ; /* call of neighbor to filter */ + unsigned iface ; /* filter on this interface */ +} ; + +/* Structure for handling raw NET/ROM user sockets */ +struct raw_nr { + struct raw_nr *prev; + struct raw_nr *next; + + struct mbuf *rcvq; /* receive queue */ + uint8 protocol; /* Protocol */ +}; + +/* The interface table */ +extern struct nriface Nrifaces[NRNUMIFACE] ; + +/* How many interfaces are in use */ +extern unsigned Nr_numiface ; + +/* The neighbor hash table (hashed on neighbor callsign) */ +extern struct nrnbr_tab *Nrnbr_tab[NRNUMCHAINS] ; + +/* The routes hash table (hashed on destination callsign) */ +extern struct nrroute_tab *Nrroute_tab[NRNUMCHAINS] ; + +/* The nodes broadcast filter table */ +extern struct nrnf_tab *Nrnf_tab[NRNUMCHAINS] ; + +extern uint8 Nr_nodebc[AXALEN]; + +/* filter modes: */ +#define NRNF_NOFILTER 0 /* don't filter */ +#define NRNF_ACCEPT 1 /* accept broadcasts from stations in list */ +#define NRNF_REJECT 2 /* reject broadcasts from stations in list */ + +/* The filter mode */ +extern unsigned Nr_nfmode ; + +/* The time-to-live for net/rom network layer packets */ +extern unsigned short Nr_ttl ; + +/* The obsolescence count initializer */ +extern unsigned Obso_init ; + +/* The threshhold at which routes becoming obsolete are not broadcast */ +extern unsigned Obso_minbc ; + +/* The quality threshhold below which routes in a broadcast will */ +/* be ignored */ +extern unsigned Nr_autofloor ; + +/* Whether we want to broadcast the contents of our routing + * table, or just our own callsign and alias: + */ +extern int Nr_verbose ; + +/* The maximum number of routes maintained for a destination. */ +/* If the list fills up, only the highest quality routes are */ +/* kept. This limiting is done to avoid possible over-use of */ +/* memory for routing tables in closely spaced net/rom networks. */ +extern unsigned Nr_maxroutes ; + +/* The netrom pseudo-interface */ +extern struct iface *Nr_iface ; + +/* Functions */ + +/* In nr3.c: */ +void del_rnr(struct raw_nr *rpp); +uint8 *find_nralias(char *); +struct nrroute_tab *find_nrroute(uint8 *); +void nr_bcnodes(unsigned ifno); +void nr_nodercv(struct iface *iface,uint8 *source,struct mbuf **bpp); +int nr_nfadd(uint8 *, unsigned); +int nr_nfdrop(uint8 *, unsigned); +void nr_route(struct mbuf **bp,struct ax25_cb *iaxp); +int nr_routeadd(char *, uint8 *, unsigned, + unsigned, uint8 *, unsigned, unsigned); +int nr_routedrop(uint8 *, uint8 *, unsigned); +int nr_send(struct mbuf **bp,struct iface *iface,int32 gateway,uint8 tos); +void nr_sendraw(uint8 *dest,unsigned family,unsigned proto, + struct mbuf **data); +void nr3output(uint8 *dest,struct mbuf **data); +uint16 nrhash(uint8 *s); +struct raw_nr *raw_nr(uint8); + +/* In nrcmd.c: */ +void donrdump(struct nr4cb *cb); +int doroutedump(void); +int dorouteinfo(int argc,char *argv[],void *p); +int putalias(char *to, char *from,int complain); + +/* In nrhdr.c: */ +struct mbuf *htonnr3(struct nr3hdr *); +struct mbuf *htonnrdest(struct nr3dest *); +int ntohnr3(struct nr3hdr *, struct mbuf **); +int ntohnrdest(struct nr3dest *ds,struct mbuf **bpp); + +#endif /* _NETROM_H */ diff --git a/src/nos/include/nos/netuser.h b/src/nos/include/nos/netuser.h new file mode 100644 index 00000000..1653e4b4 --- /dev/null +++ b/src/nos/include/nos/netuser.h @@ -0,0 +1,54 @@ +#ifndef _NETUSER_H +#define _NETUSER_H + +/* Global structures and constants needed by an Internet user process */ + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#define NCONN 20 /* Maximum number of open network connections */ + +extern int32 Ip_addr; /* Our IP address */ +extern int Net_error; /* Error return code */ +extern char Inet_eol[]; + +#define NONE 0 /* No error */ +#define CON_EXISTS 1 /* Connection already exists */ +#define NO_CONN 2 /* Connection does not exist */ +#define CON_CLOS 3 /* Connection closing */ +#define NO_MEM 4 /* No memory for TCB creation */ +#define WOULDBLK 5 /* Would block */ +#define NOPROTO 6 /* Protocol or mode not supported */ +#define INVALID 7 /* Invalid arguments */ + +/* Codes for the tcp_open call */ +#define TCP_PASSIVE 0 +#define TCP_ACTIVE 1 +#define TCP_SERVER 2 /* Passive, clone on opening */ + +/* Local IP wildcard address */ +#define INADDR_ANY 0x0L + +/* Socket structure */ +struct socket { + int32 address; /* IP address */ + uint16 port; /* port number */ +}; + +/* Connection structure (two sockets) */ +struct connection { + struct socket local; + struct socket remote; +}; +/* In domain.c: */ +int32 resolve(char *name); +int32 resolve_mx(char *name); +char *resolve_a(int32 ip_address, int shorten); + +/* In netuser.c: */ +int32 aton(char *s); +char *inet_ntoa(int32 a); +char *pinet(struct socket *s); + +#endif /* _NETUSER_H */ diff --git a/src/nos/include/nos/nospc.h b/src/nos/include/nos/nospc.h new file mode 100644 index 00000000..f3d91adc --- /dev/null +++ b/src/nos/include/nos/nospc.h @@ -0,0 +1,142 @@ +#ifndef _PC_H +#define _PC_H +#define _HARDWARE_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#define NSW 10 /* Number of stopwatch "memories" */ + +#ifdef ZILOG +#define HWTIRQ 10 /* IRQ for Z180 PRT channel 0 */ +#else +#define HWTIRQ 0 /* IRQ for PC timer (not used yet, see "chtimer") */ +#define KBIRQ 1 /* IRQ for PC keyboard */ +#endif + +/* Extended keyboard codes for function keys */ +#define F1 59 /* Function key 1 */ +#define F2 60 +#define F3 61 +#define F4 62 +#define F5 63 +#define F6 64 +#define F7 65 +#define F8 66 +#define F9 67 +#define F10 68 + +#define CURSHOM 71 /* Home key */ +#define CURSUP 72 /* Up arrow key */ +#define PAGEUP 73 /* Page up key */ +#define CURSLEFT 75 /* Cursor left key */ +#define CURSRIGHT 77 /* Cursor right key */ +#define CURSEND 79 /* END key */ +#define CURSDWN 80 /* Down arrow key */ +#define PAGEDWN 81 /* Page down key */ + +#define AF1 104 /* ALT-F1 */ +#define AF2 105 +#define AF3 106 +#define AF4 107 +#define AF5 108 +#define AF6 109 +#define AF7 110 +#define AF8 111 +#define AF9 112 +#define AF10 113 +#define AF11 139 +#define AF12 140 + +struct stopwatch { + long calls; + uint16 maxval; + uint16 minval; + int32 totval; +}; +extern struct stopwatch Sw[]; +extern uint16 Intstk[]; /* Interrupt stack defined in pcgen.asm */ +extern uint16 Stktop[]; /* Top of interrupt stack */ +extern void (*Shutdown[])(); /* List of functions to call at shutdown */ +extern int Mtasker; /* Type of multitasker, if any */ + +/* In n8250.c: */ +void asytimer(void); + +/* In dos.c: */ +extern unsigned *Refcnt; +int _creat(const char *file, mode_t mode); /* Nick mode_t formerly int */ +int _open(const char *file, int flag, ...); /* Nick added flag and ellipsis */ +int dup(int fd); +int _close(int fd); +int _read(int fd, void *buf, size_t cnt); +int _write(int fd, const void *buf, size_t cnt); +long _lseek(int fd, long offset, int whence); + +/* In dma.c: */ +unsigned long dma_map(void *p,unsigned short len,int copy); +void dma_unmap(void *p,int copy); +int dis_dmaxl(int chan); +int ena_dmaxl(int chan); +unsigned long dmalock(void *p,unsigned short len); +unsigned long dmaunlock(unsigned long physaddr,unsigned short len); +void *dma_malloc(int32 *physaddr,unsigned short len); + +/* In random.c: */ +void rtype(uint16 c); + +/* In escc.c: */ +void escctimer(void); +void esccstop(void); + +/* In pc.c: */ +long bioscnt(void); +void clrbit(unsigned port,char bits); +void ctick(void); +int32 divrem(int32 dividend,uint16 divisor); +INTERRUPT (*getirq(unsigned int))(void); +int getmask(unsigned irq); +int intcontext(void); +void ioinit(void); +void iostop(void); +void kbsave(int c); +int kbread(void); +int maskoff(unsigned irq); +int maskon(unsigned irq); +void pctick(void); +void setbit(unsigned port,char bits); +int setirq(unsigned irq,INTERRUPT (*handler)(void)); +void sysreset(void); +void systick(void); +void writebit(unsigned port,char mask,int val); + +#ifdef ZILOG +/* In z80gen.S: */ +INTERRUPT hwtick(void); +#else +/* In pcgen.S: */ +INTERRUPT btick(void); +#endif +void chktasker(void); +void chtimer(INTERRUPT (*)()); +int32 divrem(int32 dividend,uint16 divisor); +uint16 getss(void); +void giveup(void); +uint16 kbraw(void); +uint16 longdiv(uint16 divisor,int n,uint16 *dividend); +uint16 longmul(uint16 multiplier,int n,uint16 *multiplicand); +INTERRUPT nullvec(void); +INTERRUPT kbint(void); +void uchtimer(void); +uint16 clockbits(void); + +/* In stopwatch.asm: */ +void swstart(void); +uint16 stopval(void); + +/* In sw.c: */ +void swstop(int n); + +#endif /* _PC_H */ + diff --git a/src/nos/include/nos/nospc.h% b/src/nos/include/nos/nospc.h% new file mode 100644 index 00000000..385324bb --- /dev/null +++ b/src/nos/include/nos/nospc.h% @@ -0,0 +1,138 @@ +#ifndef _PC_H +#define _PC_H +#define _HARDWARE_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _SESSION_H +#include "session.h" +#endif + +#define NSW 10 /* Number of stopwatch "memories" */ + +#define KBIRQ 1 /* IRQ for PC keyboard */ + +/* Extended keyboard codes for function keys */ +#define F1 59 /* Function key 1 */ +#define F2 60 +#define F3 61 +#define F4 62 +#define F5 63 +#define F6 64 +#define F7 65 +#define F8 66 +#define F9 67 +#define F10 68 + +#define CURSHOM 71 /* Home key */ +#define CURSUP 72 /* Up arrow key */ +#define PAGEUP 73 /* Page up key */ +#define CURSLEFT 75 /* Cursor left key */ +#define CURSRIGHT 77 /* Cursor right key */ +#define CURSEND 79 /* END key */ +#define CURSDWN 80 /* Down arrow key */ +#define PAGEDWN 81 /* Page down key */ + +#define AF1 104 /* ALT-F1 */ +#define AF2 105 +#define AF3 106 +#define AF4 107 +#define AF5 108 +#define AF6 109 +#define AF7 110 +#define AF8 111 +#define AF9 112 +#define AF10 113 +#define AF11 139 +#define AF12 140 + +struct stopwatch { + long calls; + uint16 maxval; + uint16 minval; + int32 totval; +}; +extern struct stopwatch Sw[]; +extern uint16 Intstk[]; /* Interrupt stack defined in pcgen.asm */ +extern uint16 Stktop[]; /* Top of interrupt stack */ +extern void (*Shutdown[])(); /* List of functions to call at shutdown */ +extern int Mtasker; /* Type of multitasker, if any */ + +/* In n8250.c: */ +void asytimer(void); + +/* In dos.c: */ +extern unsigned *Refcnt; +int _creat(const char *file,int mode); +int _open(const char *file,int mode); +int dup(int fd); +int _close(int fd); +int _read(int fd,void *buf,unsigned cnt); +int _write(int fd,const void *buf,unsigned cnt); +long _lseek(int fd,long offset,int whence); + +/* In dma.c: */ +unsigned long dma_map(void *p,unsigned short len,int copy); +void dma_unmap(void *p,int copy); +int dis_dmaxl(int chan); +int ena_dmaxl(int chan); +unsigned long dmalock(void *p,unsigned long len); +unsigned long dmaunlock(unsigned long physaddr,unsigned short len); +void *dma_malloc(int32 *physaddr,unsigned short len); + +/* In random.c: */ +void rtype(uint16 c); + +/* In escc.c: */ +void escctimer(void); +void esccstop(void); + +/* In pc.c: */ +long bioscnt(void); +void clrbit(unsigned port,char bits); +void ctick(void); +int32 divrem(int32 dividend,uint16 divisor); +INTERRUPT (*getirq(unsigned int))(void); +void freescreen(struct session *sp); +int getmask(unsigned irq); +int intcontext(void); +void ioinit(void); +void iostop(void); +void kbsave(int c); +int kbread(void); +int maskoff(unsigned irq); +int maskon(unsigned irq); +void newscreen(struct session *sp); +void pctick(void); +void setbit(unsigned port,char bits); +int setirq(unsigned irq,INTERRUPT (*handler)(void)); +void sysreset(void); +void systick(void); +void writebit(unsigned port,char mask,int val); + +/* In pcgen.asm: */ +INTERRUPT btick(void); +void chktasker(void); +void chtimer(INTERRUPT (*)()); +int32 divrem(int32 dividend,uint16 divisor); +uint16 getss(void); +void giveup(void); +uint16 kbraw(void); +uint16 longdiv(uint16 divisor,int n,uint16 *dividend); +uint16 longmul(uint16 multiplier,int n,uint16 *multiplicand); +INTERRUPT nullvec(void); +INTERRUPT kbint(void); +void uchtimer(void); +uint16 clockbits(void); + +/* In stopwatch.asm: */ +void swstart(void); +uint16 stopval(void); + +/* In sw.c: */ +void swstop(int n); + +#endif /* _PC_H */ + diff --git a/src/nos/include/nos/nr4.h b/src/nos/include/nos/nr4.h new file mode 100644 index 00000000..d591f468 --- /dev/null +++ b/src/nos/include/nos/nr4.h @@ -0,0 +1,271 @@ +#ifndef _NR4_H +#define _NR4_H +/* nr4.h: defines for netrom layer 4 (transport) support */ + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _TIMER_H +#include "timer.h" +#endif + +#ifndef _AX25_H +#include "ax25.h" +#endif + +/* compile-time limitations */ + +#define NR4MAXCIRC 20 /* maximum number of open circuits */ +#define NR4MAXWIN 127 /* maximum window size, send and receive */ + +/* protocol limitation: */ + +#define NR4MAXINFO 236 /* maximum data in an info packet */ + +/* sequence number wraparound mask */ + +#define NR4SEQMASK 0xff /* eight-bit sequence numbers */ + +/* flags in high nybble of opcode byte */ + +#define NR4CHOKE 0x80 +#define NR4NAK 0x40 +#define NR4MORE 0x20 /* The "more follows" flag for */ + /* pointless packet reassembly */ + +/* mask for opcode nybble */ + +#define NR4OPCODE 0x0f + +/* opcodes */ + +#define NR4OPPID 0 /* protocol ID extension to network layer */ +#define NR4OPCONRQ 1 /* connect request */ +#define NR4OPCONAK 2 /* connect acknowledge */ +#define NR4OPDISRQ 3 /* disconnect request */ +#define NR4OPDISAK 4 /* disconnect acknowledge */ +#define NR4OPINFO 5 /* information packet */ +#define NR4OPACK 6 /* information ACK */ +#define NR4NUMOPS 7 /* number of transport opcodes */ + +/* minimum length of NET/ROM transport header */ + +#define NR4MINHDR 5 + +/* host format net/rom transport header */ + +struct nr4hdr { + uint8 opcode ; /* opcode and flags */ + uint8 yourindex ; /* receipient's circuit index */ + uint8 yourid ; /* receipient's circuit ID */ + + union { + + struct { /* network extension */ + uint8 family ; /* protocol family */ + uint8 proto ; /* protocol within family */ + } pid ; + + struct { /* connect request */ + uint8 myindex ; /* sender's circuit index */ + uint8 myid ; /* sender's circuit ID */ + uint8 window ; /* sender's proposed window size */ + uint8 user[AXALEN] ; /* callsign of originating user */ + uint8 node[AXALEN] ; /* callsign of originating node */ + } conreq ; + + struct { /* connect acknowledge */ + uint8 myindex ; /* sender's circuit index */ + uint8 myid ; /* sender's circuit ID */ + uint8 window ; /* accepted window size */ + } conack ; + + struct { /* information */ + uint8 txseq ; /* sender's tx sequence number */ + uint8 rxseq ; /* sender's rx sequence number */ + } info ; + + struct { /* information acknowledge */ + uint8 rxseq ; /* sender's rx sequence number */ + } ack ; + + } u ; /* End of union */ + +} ; + +/* A netrom send buffer structure */ + +struct nr4txbuf { + struct timer tretry ; /* retry timer */ + unsigned retries ; /* number of retries */ + struct mbuf *data ; /* data sent but not acknowledged */ +} ; + +/* A netrom receive buffer structure */ + +struct nr4rxbuf { + uint8 occupied ; /* flag: buffer in use */ + struct mbuf *data ; /* data received out of sequence */ +} ; + +/* address structure */ +struct nr4_addr { + uint8 user[AXALEN]; + uint8 node[AXALEN]; +}; + +struct sockaddr_nr { + short nr_family; + struct nr4_addr nr_addr; +}; + +/* The netrom circuit control block */ + +struct nr4cb { + unsigned mynum ; /* my circuit number */ + unsigned myid ; /* my circuit ID */ + unsigned yournum ; /* remote circuit number */ + unsigned yourid ; /* remote circuit ID */ + struct nr4_addr remote ; /* address of remote node */ + struct nr4_addr local ; /* our own address */ + + unsigned window ; /* negotiated window size */ + + /* Data for round trip timer calculation and setting */ + + long srtt ; /* Smoothed round trip time */ + long mdev ; /* Mean deviation in round trip time */ + unsigned blevel ; /* Backoff level */ + unsigned txmax ; /* The maximum number of retries among */ + /* the frames in the window. This is 0 */ + /* if there are no frames in the window. */ + /* It is used as a baseline to determine */ + /* when to increment the backoff level. */ + + /* flags */ + + char clone ; /* clone this cb upon connect */ + char choked ; /* choke received from remote */ + char qfull ; /* receive queue is full, and we have */ + /* choked the other end */ + char naksent ; /* a NAK has already been sent */ + + /* transmit buffers and window variables */ + + struct nr4txbuf *txbufs ; /* pointer to array[windowsize] of bufs */ + uint8 nextosend ; /* sequence # of next frame to send */ + uint8 ackxpected ; /* sequence number of next expected ACK */ + unsigned nbuffered ; /* number of buffered TX frames */ + struct mbuf *txq ; /* queue of unsent data */ + + /* receive buffers and window variables */ + + struct nr4rxbuf *rxbufs ; /* pointer to array[windowsize] of bufs */ + uint8 rxpected ; /* # of next receive frame expected */ + uint8 rxpastwin ; /* top of RX window + 1 */ + struct mbuf *rxq ; /* "fully" received data queue */ + + /* Connection state */ + + int state ; /* connection state */ +#define NR4STDISC 0 /* disconnected */ +#define NR4STCPEND 1 /* connection pending */ +#define NR4STCON 2 /* connected */ +#define NR4STDPEND 3 /* disconnect requested locally */ +#define NR4STLISTEN 4 /* listening for incoming connections */ + + int dreason ; /* Reason for disconnect */ +#define NR4RNORMAL 0 /* Normal, requested disconnect */ +#define NR4RREMOTE 1 /* Remote requested */ +#define NR4RTIMEOUT 2 /* Connection timed out */ +#define NR4RRESET 3 /* Connection reset locally */ +#define NR4RREFUSED 4 /* Connect request refused */ + + /* Per-connection timers */ + + struct timer tchoke ; /* choke timeout */ + struct timer tack ; /* ack delay timer */ + + struct timer tcd ; /* connect/disconnect timer */ + unsigned cdtries ; /* Number of connect/disconnect tries */ + + void (*r_upcall)(struct nr4cb *,uint16); + /* receive upcall */ + void (*t_upcall)(struct nr4cb *,uint16); + /* transmit upcall */ + void (*s_upcall)(struct nr4cb *,int,int); + /* state change upcall */ + int user ; /* user linkage area */ +} ; + +/* The netrom circuit pointer structure */ + +struct nr4circp { + uint8 cid ; /* circuit ID; incremented each time*/ + /* this circuit is used */ + struct nr4cb *ccb ; /* pointer to circuit control block, */ + /* NULL if not in use */ +} ; + +/* The circuit table: */ + +extern struct nr4circp Nr4circuits[NR4MAXCIRC] ; + +/* Some globals */ + +extern unsigned short Nr4window ; /* The advertised window size, in frames */ +extern long Nr4irtt ; /* The initial round trip time */ +extern unsigned short Nr4retries ; /* The number of times to retry */ +extern long Nr4acktime ; /* How long to wait until ACK'ing */ +extern char *Nr4states[] ; /* NET/ROM state names */ +extern char *Nr4reasons[] ; /* Disconnect reason names */ +extern unsigned short Nr4qlimit ; /* max receive queue length before CHOKE */ +extern long Nr4choketime ; /* CHOKEd state timeout */ +extern uint8 Nr4user[AXALEN]; /* User callsign in outgoing connects */ + +/* function definitions */ + +/* In nr4hdr.c: */ +int ntohnr4(struct nr4hdr *, struct mbuf **); +struct mbuf *htonnr4(struct nr4hdr *); + +/* In nr4subr.c: */ +void free_n4circ(struct nr4cb *); +struct nr4cb *get_n4circ(int, int); +int init_nr4window(struct nr4cb *, unsigned); +int nr4between(unsigned, unsigned, unsigned); +struct nr4cb *match_n4circ(int, int,uint8 *,uint8 *); +struct nr4cb *new_n4circ(void); +void nr4defaults(struct nr4cb *); +int nr4valcb(struct nr4cb *); +void nr_garbage(int red); + +/* In nr4.c: */ +void nr4input(struct nr4hdr *hdr,struct mbuf **bp); +int nr4output(struct nr4cb *); +void nr4sbuf(struct nr4cb *, unsigned); +void nr4sframe(uint8 *, struct nr4hdr *, struct mbuf **); +void nr4state(struct nr4cb *, int); + +/* In nr4timer.c */ +void nr4ackit(void *); +void nr4cdtimeout(void *); +void nr4txtimeout(void *); +void nr4unchoke(void *); + +/* In nr4user.c: */ +void disc_nr4(struct nr4cb *); +int kick_nr4(struct nr4cb *); +struct nr4cb *open_nr4(struct nr4_addr *, struct nr4_addr *, int, + void (*)(struct nr4cb *,uint16), + void (*)(struct nr4cb *,uint16), + void (*)(struct nr4cb *,int,int),int); +struct mbuf *recv_nr4(struct nr4cb *, uint16); +void reset_nr4(struct nr4cb *); +int send_nr4(struct nr4cb *, struct mbuf **); + +/* In nrcmd.c: */ +void nr4_state(struct nr4cb *, int, int); + +#endif /* _NR4_H */ diff --git a/src/nos/include/nos/nr4mail.h b/src/nos/include/nos/nr4mail.h new file mode 100644 index 00000000..84bf4320 --- /dev/null +++ b/src/nos/include/nos/nr4mail.h @@ -0,0 +1,3 @@ +int nr40(int argc,char *argv[],void *p); +int nr4start(int argc,char *argv[],void *p); +int dombnetrom(int argc,char *argv[],void *p); diff --git a/src/nos/include/nos/nrs.h b/src/nos/include/nos/nrs.h new file mode 100644 index 00000000..e9d72483 --- /dev/null +++ b/src/nos/include/nos/nrs.h @@ -0,0 +1,55 @@ +#ifndef _NRS_H +#define _NRS_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#define NRS_MAX 5 /* Maximum number of Nrs channels */ + +/* SLIP definitions */ +#define NRS_ALLOC 40 /* Receiver allocation increment */ + +#define STX 0x02 /* frame start */ +#define ETX 0x03 /* frame end */ +#define DLE 0x10 /* data link escape */ +#define NUL 0x0 /* null character */ + +/* packet unstuffing state machine */ +#define NRS_INTER 0 /* in between packets */ +#define NRS_INPACK 1 /* we've seen STX, and are in a the packet */ +#define NRS_ESCAPE 2 /* we've seen a DLE while in NRS_INPACK */ +#define NRS_CSUM 3 /* we've seen an ETX, and are waiting for the checksum */ + +/* net/rom serial protocol control structure */ +struct nrs { + uint8 state; /* Receiver State control flag */ + unsigned char csum; /* Accumulating checksum */ + struct mbuf *rbp; /* Head of mbuf chain being filled */ + struct mbuf *rbp1; /* Pointer to mbuf currently being written */ + uint8 *rcp; /* Write pointer */ + uint16 rcnt; /* Length of mbuf chain */ + struct mbuf *tbp; /* Transmit mbuf being sent */ + long errors; /* Checksum errors detected */ + long packets ; /* Number of packets received successfully */ + struct iface *iface ; /* Associated interface structure */ + int (*send)(int,struct mbuf **);/* Routine to send mbufs */ + int (*get)(int);/* Routine to fetch input chars */ +}; + +extern struct nrs Nrs[]; +/* In nrs.c: */ +int nrs_free(struct iface *ifp); +int nrs_init(struct iface *ifp); +int nrs_raw(struct iface *iface,struct mbuf **bpp); +void nrs_recv(int dev,void *v1,void *v2); + +#endif /* _NRS_H */ diff --git a/src/nos/include/nos/pc100.h b/src/nos/include/nos/pc100.h new file mode 100644 index 00000000..fb1d2116 --- /dev/null +++ b/src/nos/include/nos/pc100.h @@ -0,0 +1,108 @@ +#ifndef _PC100_H +#define _PC100_H + +/* UNFINISHED! */ +/* Hardware-dependent routines for the PACCOMM PC-100 card for the PC + * This card contains a Zilog 8530 plus two modems, one of which is an + * AMD 7910, and one of which is a TCM3105. + * + * Originally written by Phil Karn KA9Q for an early rev of the board which + * did interrupt acks wrong. Hacked by Bdale Garbee N3EUA to work with beta + * copies of the second major revision of the card. + */ +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#define NPC 1 /* One card max */ +#define AX_MTU 512 +#define INTMASK 0x21 /* Intel 8259 interrupt controller mask */ + +struct pc100 { + INTERRUPT (*oldvec)(void);/* Original interrupt vector contents */ + uint16 addr; /* Base I/O address */ + unsigned vec; /* Vector */ + long ints; /* Interrupt count */ + uint8 chain; /* Interrupt chaining enable */ +}; +extern struct pc100 Pc100[]; + +/* Register offset info, specific to the PC-100 + * E.g., to read the data port on channel A, use + * inportb(hdlc[dev].base + CHANA + DATA) + */ +#define MODEM_CTL 0 /* modem control port, write only */ +/* #define CHANB 4 /* Base of channel B regs */ +/* #define CHANA 6 /* Base of channel A regs */ +#define CHANB 6 /* Base of channel B regs */ +#define CHANA 4 /* Base of channel A regs */ +#define INTACK 8 /* access this to wang 8530's INTA.L */ + +/* 8530 ports on each channel */ +/* #define CTL 0 */ +/* #define DATA 1 */ +#define CTL 1 +#define DATA 0 + +struct hdlc { + long rxints; /* Receiver interrupts */ + long txints; /* Transmitter interrupts */ + long exints; /* External/status interrupts */ + long spints; /* Special receiver interrupts */ + + int nomem; /* Buffer allocate failures */ + int toobig; /* Giant receiver packets */ + int crcerr; /* CRC Errors */ + int aborts; /* Receiver aborts */ + + uint8 status; /* Copy of R0 at last external interrupt */ + struct mbuf *rcvq; /* Receive queue */ + uint16 rcvcnt; /* Number of packets on rcvq */ + struct mbuf *rcvbuf; /* Buffer for current rx packet */ + uint16 bufsiz; /* Size of rcvbuf */ + uint8 *rcp; /* Pointer into rcvbuf */ + + struct mbuf *sndq; /* Packets awaiting transmission */ + uint16 sndcnt; /* Number of packets on sndq */ + struct mbuf *sndbuf; /* Current buffer being transmitted */ + int tstate; /* Tranmsitter state */ +#define IDLE 0 /* Transmitter off, no data pending */ +#define DEFER 1 /* Transmitter off, waiting for channel clear*/ +#define KEYUP 2 /* Transmitter on, waiting for CTS */ +#define ACTIVE 3 /* Transmitter on, sending data */ +#define FLUSH 4 /* Transmitter on, flushing tx buffers */ +#define FIN2 5 /* Ditto, second char */ + + int mode; /* Transmitter mode */ +#define CSMA 0 /* Carrier-sense multiple access */ +#define FULLDUP 1 /* Full duplex */ + + int dev; /* Device number */ + uint16 base; /* Base of I/O registers */ + uint16 speed; /* Line speed, bps */ +}; + +#define OFF 0 +#define ON 1 + +/* 8530 clock speed */ +/* #define XTAL ((unsigned)38400) /* 2.4576 Mhz / (2*32) */ +#define XTAL ((unsigned)76797) /* 4.915 Mhz / (2*32) */ + +/* Baud rate generator definitions */ +struct baudrate { + uint16 speed; + uint8 val; +}; + +/* In pc100.c: */ +INTERRUPT (NICK_FAR *(pcint)(int dev))(); + +/* In pc100vec.asm: */ +INTERRUPT pc0vec(void); + +#endif /* _PC100_H */ diff --git a/src/nos/include/nos/pi.h b/src/nos/include/nos/pi.h new file mode 100644 index 00000000..9bc07a14 --- /dev/null +++ b/src/nos/include/nos/pi.h @@ -0,0 +1,138 @@ +#ifndef PIMAX + +/* Hardware-dependent routines for the VE3IFB interface card for the PC + */ + +#include "global.h" +#define PIMAX 3 /* 3 cards max */ +#define AX_MTU 512 +#define INTMASK 0x21 /* Intel 8259 interrupt controller mask */ + +#define DMABASE 0 /* Base I/O address of 1st (8-bit) DMA controller */ +struct PITAB { + INTERRUPT (*oldvec)(void); /* Original interrupt vector contents */ + uint16 addr; /* Base I/O address */ + unsigned vec; /* Vector */ + long ints; /* Interrupt count */ + uint8 chain; /* Enable interrupt chaining */ +}; +extern struct PITAB Pi[]; + +/* Register offset info, specific to the PI + * E.g., to read the data port on channel A, use + * inportb(pichan[dev].base + CHANA + DATA) + */ +#define CHANB 0 /* Base of channel B regs */ +#define CHANA 2 /* Base of channel A regs */ + +/* 8530 ports on each channel */ +#define CTL 0 +#define DATA 1 + +#define DMAEN 0x4 /* Offset off DMA Enable register */ + +/* Timer chip offsets */ +#define TMR0 0x8 /* Offset of timer 0 register */ +#define TMR1 0x9 /* Offset of timer 1 register */ +#define TMR2 0xA /* Offset of timer 2 register */ +#define TMRCMD 0xB /* Offset of timer command register */ + +/* Timer chip equates */ +#define SC0 0x00 /* Select counter 0 */ +#define SC1 0x40 /* Select counter 1 */ +#define SC2 0x80 /* Select counter 2 */ +#define CLATCH 0x00 /* Counter latching operation */ +#define MSB 0x20 /* Read/load MSB only */ +#define LSB 0x10 /* Read/load LSB only */ +#define LSB_MSB 0x30 /* Read/load LSB, then MSB */ +#define MODE0 0x00 /* Interrupt on terminal count */ +#define MODE1 0x02 /* Programmable one shot */ +#define MODE2 0x04 /* Rate generator */ +#define MODE3 0x06 /* Square wave rate generator */ +#define MODE4 0x08 /* Software triggered strobe */ +#define MODE5 0x0a /* Hardware triggered strobe */ +#define BCD 0x01 /* BCD counter */ + +/* DMA controller registers */ +#define DMA_STAT 8 /* DMA controller status register */ +#define DMA_MASK 10 /* DMA controller mask register */ +#define DMA_MODE 11 /* DMA controller mode register */ +#define DMA_RESETFF 12 /* DMA controller first/last flip flop */ +/* DMA data */ +#define DMA_DISABLE (0x04) /* Disable channel n */ +#define DMA_ENABLE (0x00) /* Enable channel n */ +/* Single transfers, incr. address, auto init, writes, ch. n */ +#define DMA_RX_MODE (0x54) +/* Single transfers, incr. address, no auto init, reads, ch. n */ +#define DMA_TX_MODE (0x48) + +struct pichan { + long rxints; /* Receiver interrupts */ + long txints; /* Transmitter interrupts */ + long exints; /* External/status interrupts */ + + int enqueued; /* Packets enqueued for transmit */ + int rxframes; /* Packets received */ + int crcerr; /* CRC Errors */ + int rovers; /* Receiver Overruns */ + int tunders; /* Tranmitter underruns */ + + uint8 *rcvbuf; /* Buffer for current rx packet */ + int32 rcvphys; /* Physical address of same, for DMA */ + uint8 *rcp; /* Pointer into rcvbuf for non-dma */ + uint16 bufsiz; /* Size of rcvbuf */ + uint16 rxcnt; /* Running count (non-DMA) */ + + struct mbuf *sndq; /* Packets awaiting transmission */ + uint16 sndcnt; /* Number of packets on sndq */ + uint8 *sndbuf; /* Current buffer being transmitted */ + uint8 *tcp; /* Pointer into sndbuf for non-DMA */ + uint16 txcnt; /* Chars remaining to be sent (non-DMA) */ + int32 sndphys; /* Physical address of sndbuf, for DMA */ + uint8 tstate; /* Transmitter state */ +#define IDLE 0 /* Transmitter off, no data pending */ +#define ACTIVE 1 /* Transmitter on, sending data */ +#define UNDERRUN 2 /* Transmitter on, flushing CRC */ +#define FLAGOUT 3 /* CRC sent - attempt to start next frame */ +#define DEFER 4 /* Receive Active - DEFER Transmit */ +#define ST_TXDELAY 5 /* Sending leading flags */ +#define CRCOUT 6 + uint8 rstate; /* Set when !DCD goes to 0 (TRUE) */ +/* Normal state is ACTIVE if Receive enabled */ +#define RXERROR 2 /* Error -- Aborting current Frame */ +#define RXABORT 3 /* ABORT sequence detected */ +#define TOOBIG 4 /* too large a frame to store */ + uint16 dev; /* Device number */ + uint16 base; /* Base of I/O registers */ + uint16 cardbase; /* Base address of card */ + uint16 stata; /* address of Channel A status regs */ + uint16 statb; /* address of Channel B status regs */ + uint16 speed; /* Line speed, bps */ + uint16 txdelay; /* Transmit Delay 10 ms/cnt */ + uint8 persist; /* Persistence (0-255) as a % */ + uint16 slotime; /* Delay to wait on persistence hit */ + uint16 squeldelay; /* Delay after XMTR OFF for squelch tail */ + struct iface *iface; /* Associated interface */ + uint8 dmachan; /* DMA channel for this port */ + int32 deftime; /* Time when xmit is enabled */ +}; +extern struct pichan Pichan[]; + +#define OFF 0 +#define ON 1 + +/* 8530 clock speed */ +#define XTAL ((long)3686400/2) /* 32X clock constant */ + +/* In pi.c: */ +INTERRUPT (NICK_FAR *(piint)(int dev))(); + +/* In pivec.asm: */ +void mloop(void); +void wrtscc(uint16 cbase,uint16 ctl,uint16 reg,uint16 word); +uint8 rdscc(uint16 cbase,uint16 word,uint8 byte); +INTERRUPT pi0vec(void); +INTERRUPT pi1vec(void); +INTERRUPT pi2vec(void); + +#endif /* PIMAX */ diff --git a/src/nos/include/nos/ping.h b/src/nos/include/nos/ping.h new file mode 100644 index 00000000..c892a299 --- /dev/null +++ b/src/nos/include/nos/ping.h @@ -0,0 +1,28 @@ +#ifndef _PING_H +#define _PING_H + +#ifndef _SESSION_H +#include "session.h" +#endif + +struct ping { + struct session *sp; + int s; /* Socket for pinging */ + int32 target; /* Starting target IP address */ + int incflag; /* If true, increment target after each ping */ + int32 sent; /* Total number of pings sent */ + int32 srtt; /* Smoothed round trip time */ + int32 mdev; /* Mean deviation */ + int32 maxrtt; /* Maximum rtt */ + int32 minrtt; /* Minimum rtt */ + int32 responses; /* Total number of responses */ + int32 interval; /* Inter-ping interval, ticks */ + uint16 len; /* Length of data portion of ping */ +}; + +/* In ping.c: */ +void echo_proc(int32 source,int32 dest,struct icmp *icmp,struct mbuf **bpp); +int pingem(int s,int32 target,uint16 seq,uint16 id,uint16 len); + +#endif /* _PING_H */ + diff --git a/src/nos/include/nos/pktdrvr.h b/src/nos/include/nos/pktdrvr.h new file mode 100644 index 00000000..4f02c90b --- /dev/null +++ b/src/nos/include/nos/pktdrvr.h @@ -0,0 +1,116 @@ +#ifndef _PKTDRVR_H +#define _PKTDRVR_H + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#define PK_MAX 3 /* Add extra interrupt hooks if you increase this */ + +/* Packet driver interface classes */ +#define CL_NONE 0 +#define CL_ETHERNET 1 +#define CL_PRONET_10 2 +#define CL_IEEE8025 3 +#define CL_OMNINET 4 +#define CL_APPLETALK 5 +#define CL_SERIAL_LINE 6 +#define CL_STARLAN 7 +#define CL_ARCNET 8 +#define CL_AX25 9 +#define CL_KISS 10 +#define CL_IEEE8023 11 +#define CL_FDDI 12 +#define CL_INTERNET_X25 13 +#define CL_LANSTAR 14 +#define CL_SLFP 15 +#define CL_NETROM 16 +#define CL_PPP 17 +#define CL_QTSO 18 +#define NCLASS 19 + +#ifdef MSDOS + +/* Packet driver interface types (not a complete list) */ +#define TC500 1 +#define PC2000 10 +#define WD8003 14 +#define PC8250 15 +#define ANYTYPE 0xffff + +/* Packet driver function call numbers. From Appendix B. */ +#define DRIVER_INFO 1 +#define ACCESS_TYPE 2 +#define RELEASE_TYPE 3 +#define SEND_PKT 4 +#define TERMINATE 5 +#define GET_ADDRESS 6 +#define RESET_INTERFACE 7 +#define GET_PARAMETERS 10 +#define AS_SEND_PKT 11 +#define SET_RCV_MODE 20 +#define GET_RCV_MODE 21 +#define SET_MULTICAST_LIST 22 +#define GET_MULTICAST_LIST 23 +#define GET_STATISTICS 24 +#define SET_ADDRESS 25 + +/* Packet driver error return codes. From Appendix C. */ + +#define NO_ERROR 0 +#define BAD_HANDLE 1 /* invalid handle number */ +#define NO_CLASS 2 /* no interfaces of specified class found */ +#define NO_TYPE 3 /* no interfaces of specified type found */ +#define NO_NUMBER 4 /* no interfaces of specified number found */ +#define BAD_TYPE 5 /* bad packet type specified */ +#define NO_MULTICAST 6 /* this interface does not support multicast */ +#define CANT_TERMINATE 7 /* this packet driver cannot terminate */ +#define BAD_MODE 8 /* an invalid receiver mode was specified */ +#define NO_SPACE 9 /* operation failed because of insufficient space */ +#define TYPE_INUSE 10 /* the type had previously been accessed, and not released */ +#define BAD_COMMAND 11 /* the command was out of range, or not implemented */ +#define CANT_SEND 12 /* the packet couldn't be sent (usually hardware error) */ +#define CANT_SET 13 /* hardware address couldn't be changed (> 1 handle open) */ +#define BAD_ADDRESS 14 /* hardware address has bad length or format */ +#define CANT_RESET 15 /* couldn't reset interface (> 1 handle open) */ + +typedef union { + struct { + uint8 lo; + uint8 hi; + } byte; + unsigned short word; +} ureg; + +#define CARRY_FLAG 0x1 + +struct pktdrvr { + int class; /* Interface class (ether/slip/etc) */ + int intno; /* Interrupt vector */ + short handle1; /* Driver handle(s) */ + short handle2; + short handle3; + struct mbuf *buffer; /* Currently allocated rx buffer */ + struct iface *iface; +}; + +extern struct pktdrvr Pktdrvr[]; + +/* In pktdrvr.c: */ +uint8 *pkint(int dev,unsigned short cx, unsigned short ax); +void pk_tx(int dev,void *arg1,void *unused); +int pk_send(struct mbuf **bpp,struct iface *iface,int32 gateway,uint8 tos); +extern char Pkt_sig[]; + +/* In pkvec.asm: */ +INTERRUPT pkvec0(void); +INTERRUPT pkvec1(void); +INTERRUPT pkvec2(void); + +#endif /* MSDOS */ + +#endif /* _PKTDRVR_H */ diff --git a/src/nos/include/nos/pop.h b/src/nos/include/nos/pop.h new file mode 100644 index 00000000..8f944389 --- /dev/null +++ b/src/nos/include/nos/pop.h @@ -0,0 +1,59 @@ +/* + filename -- POP.H + + author -- Mike Stockett, WA7DYX + + additional hacking by Allen Gwinn, N5CKP +*/ + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +#define BUF_LEN 128 + +#include + +/* ---------------- common server data structures ---------------- */ + +/* POP server control block */ + +struct pop_scb { + FILE *network; /* Network stream for this connection */ + char state; /* server state */ +#define LSTN 0 +#define AUTH 1 +#define MBOX 2 +#define ITEM 3 +#define NEXT 4 +#define DONE 5 + char buf[BUF_LEN], /* input line buffer */ + count, /* line buffer length */ + username[64]; /* user/folder name */ + FILE *wf; /* work folder file pointer */ + int folder_len, /* number of msgs in current folder */ + msg_num; /* current msg number */ + long msg_len; /* length of current msg */ + int msg_status_size; /* size of the message status array */ + long curpos, /* current msg's position in file */ + folder_file_size, /* length of the current folder file, in bytes */ + nextpos; /* next msg's position in file */ + unsigned int folder_modified, /* mail folder contents modified flag */ + *msg_status; /* message status array pointer */ +}; + +/* Response messages */ + +static char count_rsp[] = "#%d messages in this folder\n", + error_rsp[] = "- ERROR: %s\n", + greeting_msg[] = "+ POP2 %s\n", +/* length_rsp[] = "=%ld bytes in this message\n", */ + length_rsp[] = "=%ld characters in Message #%d\n", + msg_line[] = "%s\n", + no_mail_rsp[] = "+ No mail, sorry\n", + no_more_rsp[] = "=%d No more messages in this folder\n", + signoff_msg[] = "+ Bye, thanks for calling\n"; + +/* ------------------------ end of header file ---------------------------- */ + diff --git a/src/nos/include/nos/ppp.h b/src/nos/include/nos/ppp.h new file mode 100644 index 00000000..425652bb --- /dev/null +++ b/src/nos/include/nos/ppp.h @@ -0,0 +1,80 @@ +#ifndef _PPP_H +#define _PPP_H +/* + * This implementation of PPP is declared to be in the public domain. + * + * Jan 91 Bill_Simpson@um.cc.umich.edu + * Computer Systems Consulting Services + * + * Acknowledgements and correction history may be found in PPP.C + */ + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + + +/* PPP definitions */ +#define PPP_ALLOC 128 /* mbuf allocation increment */ + + +struct ppp_hdr { + byte_t addr; +#define HDLC_ALL_ADDR 0xff /* HDLC all-station */ + byte_t control; +#define HDLC_UI 0x03 /* HDLC Unnumbered Information */ + uint16 protocol; +#define PPP_IP_PROTOCOL 0x0021 /* Internet Protocol */ +#define PPP_COMPR_PROTOCOL 0x002d /* Van Jacobson Compressed TCP/IP */ +#define PPP_UNCOMP_PROTOCOL 0x002f /* Van Jacobson Uncompressed TCP/IP */ +#define PPP_IPCP_PROTOCOL 0x8021 /* Internet Protocol Control Protocol */ +#define PPP_LCP_PROTOCOL 0xc021 /* Link Control Protocol */ +#define PPP_PAP_PROTOCOL 0xc023 /* Password Authentication Protocol */ +}; +#define PPP_HDR_LEN 4 /* Max bytes for PPP/HDLC envelope header */ + +/* HDLC envelope constants */ +#define HDLC_ENVLEN 8 /* Max bytes for HDLC envelope (outgoing) */ + +#define HDLC_FLAG 0x7e /* HDLC async start/stop flag */ +#define HDLC_ESC_ASYNC 0x7d /* HDLC transparency escape flag for async */ +#define HDLC_ESC_COMPL 0x20 /* HDLC transparency bit complement mask */ + +#define HDLC_FCS_START 0xffff /* Starting bit string for FCS calculation */ +#define HDLC_FCS_FINAL 0xf0b8 /* FCS when summed over frame and sender FCS */ + + +/* In ppp.c: */ +int ppp_send(struct mbuf **data,struct iface *iface,int32 gateway, + uint8 tos); +int ppp_output(struct iface *iface, char dest[], char source[], + uint16 type, struct mbuf **data); + +int ppp_init(struct iface *iface); +int ppp_free(struct iface *iface); +void ppp_proc(struct iface *iface, struct mbuf **bp); + +/* In pppcmd.c */ +extern int PPPtrace; /* trace flag */ +extern struct iface *PPPiface; /* iface for trace */ + +void ppp_show(struct iface *ifp); + +int doppp_commands(int argc,char *argv[], void *p); + +int doppp_active(int argc, char *argv[], void *p); +int doppp_passive(int argc, char *argv[], void *p); + +int doppp_close(int argc, char *argv[], void *p); +int doppp_timeout(int argc, char *argv[], void *p); +int doppp_try(int argc, char *argv[], void *p); + +#endif /* _PPP_H */ diff --git a/src/nos/include/nos/pppfsm.h b/src/nos/include/nos/pppfsm.h new file mode 100644 index 00000000..84123ddb --- /dev/null +++ b/src/nos/include/nos/pppfsm.h @@ -0,0 +1,219 @@ +#ifndef _PPPFSM_H +#define _PPPFSM_H + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _PROC_H +#include "proc.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _TIMER_H +#include "timer.h" +#endif + + /* 00: serious internal problems */ + /* 01: interoperability problems */ + /* 02: state machine messages */ +#define PPP_DEBUG_RAW +#define PPP_DEBUG_OPTIONS 0x08 +#define PPP_DEBUG_CHECKS(x) if(PPPtrace & 0x40) trace_log(PPPiface,x); +#define PPP_DEBUG_ROUTINES(x) if(PPPtrace & 0x80) trace_log(PPPiface,x); + +/* config packet header */ +struct config_hdr { + byte_t code; +#define CONFIG_REQ 1 +#define CONFIG_ACK 2 +#define CONFIG_NAK 3 +#define CONFIG_REJ 4 +#define TERM_REQ 5 +#define TERM_ACK 6 +#define CODE_REJ 7 +#define PROT_REJ 8 +#define ECHO_REQ 9 +#define ECHO_REPLY 10 +#define DISCARD_REQ 11 +#define QUALITY_REPORT 12 + + byte_t id; + uint16 len; +}; +#define CONFIG_HDR_LEN 4 /* Length of config packet header */ + + +/* config option header */ +struct option_hdr { + byte_t type; /* protocol dependant types */ + byte_t len; +}; +#define OPTION_HDR_LEN 2 /* Length of option header */ + + +/* Supported Configuration Protocol index */ +enum { + Lcp, + Pap, + IPcp, + fsmi_Size +}; + +struct fsm_s; /* forward declaration */ + +/* Protocol Constants needed by State Machine */ +struct fsm_constant_s { + char *name; /* Name of protocol */ + uint16 protocol; /* Protocol number */ + uint16 recognize; /* Config codes to use (bits) */ + + byte_t fsmi; /* Finite State Machine index */ + byte_t try_req; /* # tries for request */ + byte_t try_nak; /* # tries for nak substitutes */ + byte_t try_terminate; /* # tries for terminate */ + int32 timeout; /* Time for timeouts (milliseconds)*/ + + /* To free structure */ + void (*free)(struct fsm_s *fsm_p); + + /* Set negotiation to initial values */ + void (*reset)(struct fsm_s *fsm_p); + /* When leaving Closed or Listen */ + void (*starting)(struct fsm_s *fsm_p); + /* When entering Opened */ + void (*opening)(struct fsm_s *fsm_p); + /* When leaving Opened */ + void (*closing)(struct fsm_s *fsm_p); + /* When entering Closed or Listen (after termination) */ + void (*stopping)(struct fsm_s *fsm_p); + + struct mbuf *(*makereq)(struct fsm_s *fsm_p); + + int (*request)(struct fsm_s *fsm_p, + struct config_hdr *hdr, + struct mbuf **bpp); + int (*ack)(struct fsm_s *fsm_p, + struct config_hdr *hdr, + struct mbuf **bpp); + int (*nak)(struct fsm_s *fsm_p, + struct config_hdr *hdr, + struct mbuf **bpp); + int (*reject)(struct fsm_s *fsm_p, + struct config_hdr *hdr, + struct mbuf **bpp); +}; + +/* FSM states */ +enum { + fsmCLOSED, + fsmLISTEN, + fsmREQ_Sent, + fsmACK_Rcvd, + fsmACK_Sent, + fsmOPENED, + fsmTERM_Sent, + fsmState_Size +}; + +/* State Machine Control Block */ +struct fsm_s { + byte_t state; /* FSM state */ + byte_t lastid; /* ID of last REQ we sent */ + + byte_t flags; +#define PPP_ESCAPED 0x01 +#define PPP_TOSS 0x02 +#define FSM_PASSIVE 0x40 /* opened passive */ +#define FSM_ACTIVE 0x80 /* opened active */ + + byte_t retry; /* counter for timeouts */ + byte_t try_req; /* # tries for request */ + byte_t try_terminate; /* # tries for terminate */ + + byte_t retry_nak; /* counter for naks of requests */ + byte_t try_nak; /* # tries for nak substitutes */ + + struct ppp_s *ppp_p; /* the ppp we belong to */ + struct timer timer; + struct fsm_constant_s *pdc; /* protocol dependent constants */ + void *pdv; /* protocol dependent variables */ +}; + + +/* Link Phases */ +enum { + pppDEAD, /* Waiting for physical layer */ + pppLCP, /* Link Control Phase */ + pppAP, /* Authentication Phase */ + pppREADY, /* Link ready for traffic */ + pppTERMINATE, /* Termination Phase */ + pppPhase_Size +}; + +/* PPP control block */ +struct ppp_s { + struct iface *iface; /* pointer to interface block */ + + byte_t phase; /* phase of link initialization */ + byte_t id; /* id counter for connection */ + + byte_t flags; +#define PPP_AP_LOCAL 0x10 /* local authentication */ +#define PPP_AP_REMOTE 0x20 /* remote authentication */ + + byte_t trace; /* trace flags for connection */ + + struct fsm_s fsm[fsmi_Size]; /* finite state machines */ + + int32 upsince; /* Timestamp when Link Opened */ + char *peername; /* Peername from remote (if any) */ + + int32 OutTxOctetCount; /* # octets sent */ + int32 OutOpenFlag; /* # of open flags sent */ + uint16 OutNCP[fsmi_Size]; /* # NCP packets sent by protocol */ + uint16 OutError; /* # packets with error on send */ + uint16 OutMemory; /* # alloc failures on send */ + + int32 InRxOctetCount; /* # octets received */ + int32 InOpenFlag; /* # of open flags */ + uint16 InNCP[fsmi_Size]; /* # NCP packets by protocol */ + uint16 InUnknown; /* # unknown packets received */ + uint16 InChecksum; /* # packets with bad checksum */ + uint16 InFrame; /* # packets with frame error */ + uint16 InError; /* # packets with other error */ + uint16 InMemory; /* # alloc failures */ +}; + +extern char *fsmStates[]; +extern char *fsmCodes[]; + +void htoncnf(struct config_hdr *cnf, struct mbuf **data); +int ntohcnf(struct config_hdr *cnf, struct mbuf **bpp); +int ntohopt(struct option_hdr *opt, struct mbuf **bpp); + +void fsm_no_action(struct fsm_s *fsm_p); +int fsm_no_check(struct fsm_s *fsm_p, + struct config_hdr *hdr, + struct mbuf **bp); + +void fsm_log(struct fsm_s *fsm_p, char *comment); +void fsm_timer(struct fsm_s *fsm_p); + +int fsm_send(struct fsm_s *fsm_p, byte_t code, + byte_t id, struct mbuf **data); +int fsm_sendreq(struct fsm_s *fsm_p); + +void fsm_proc(struct fsm_s *fsm_p, struct mbuf **bp); + +void fsm_start(struct fsm_s *fsm_p); +void fsm_down(struct fsm_s *fsm_p); +void fsm_close(struct fsm_s *fsm_p); + +void fsm_init(struct fsm_s *fsm_p); +void fsm_free(struct fsm_s *fsm_p); + +#endif /* _PPPFSM_H */ diff --git a/src/nos/include/nos/pppipcp.h b/src/nos/include/nos/pppipcp.h new file mode 100644 index 00000000..06c862a9 --- /dev/null +++ b/src/nos/include/nos/pppipcp.h @@ -0,0 +1,59 @@ +#ifndef _PPPIPCP_H +#define _PPPIPCP_H + +#ifndef _SLHC_H +#include "slhc.h" +#endif + + /* IPCP option types */ +#define IPCP_ADDRESS 0x01 +#define IPCP_COMPRESS 0x02 +#define IPCP_OPTION_LIMIT 0x02 /* highest # we can handle */ + +/* Table for IPCP configuration requests */ +struct ipcp_value_s { + uint16 negotiate; /* negotiation flags */ +#define IPCP_N_ADDRESS (1 << IPCP_ADDRESS) +#define IPCP_N_COMPRESS (1 << IPCP_COMPRESS) + + int32 address; /* address for this side */ + int32 other; /* address for other side */ + + uint16 compression; /* Compression protocol */ + uint16 slots; /* Slots (0-n)*/ + byte_t slot_compress; /* Slots may be compressed (flag)*/ +}; + +#define IPCP_SLOT_DEFAULT 16 /* Default # of slots */ +#define IPCP_SLOT_HI 64 /* Maximum # of slots */ +#define IPCP_SLOT_LO 1 /* Minimum # of slots */ +#define IPCP_SLOT_COMPRESS 0x01 /* May compress slot id */ + +struct ipcp_side_s { + uint16 will_negotiate; + struct ipcp_value_s want; + struct ipcp_value_s work; +}; + +/* Store address pool in otherwise unused address locations */ +#define peer_min local.want.other /* First IP address in pool */ +#define peer_max remote.want.other /* Last IP address in pool */ + +/* IPCP control block */ +struct ipcp_s { + struct ipcp_side_s local; + struct ipcp_side_s remote; + + struct slcompress *slhcp; /* pointer to compression block */ +}; + +#define IPCP_REQ_TRY 20 /* REQ attempts */ +#define IPCP_NAK_TRY 10 /* NAK attempts */ +#define IPCP_TERM_TRY 10 /* tries on TERM REQ */ +#define IPCP_TIMEOUT 3 /* Seconds to wait for response */ + + +int doppp_ipcp(int argc, char *argv[], void *p); +void ipcp_init(struct ppp_s *ppp_p); + +#endif /* _PPPIPCP_H */ diff --git a/src/nos/include/nos/ppplcp.h b/src/nos/include/nos/ppplcp.h new file mode 100644 index 00000000..a48b190f --- /dev/null +++ b/src/nos/include/nos/ppplcp.h @@ -0,0 +1,81 @@ +#ifndef _PPPLCP_H +#define _PPPLCP_H + + /* LCP option types */ +#define LCP_MRU 0x01 +#define LCP_ACCM 0x02 +#define LCP_AUTHENT 0x03 +#define LCP_ENCRYPT 0x04 +#define LCP_MAGIC 0x05 +#define LCP_QUALITY 0x06 +#define LCP_PFC 0x07 +#define LCP_ACFC 0x08 +#define LCP_OPTION_LIMIT 0x08 /* highest # we can handle */ + +/* Table for LCP configuration requests */ +struct lcp_value_s { + uint16 negotiate; /* negotiation flags */ +#define LCP_N_MRU (1 << LCP_MRU) +#define LCP_N_ACCM (1 << LCP_ACCM) +#define LCP_N_AUTHENT (1 << LCP_AUTHENT) +#define LCP_N_ENCRYPT (1 << LCP_ENCRYPT) +#define LCP_N_MAGIC (1 << LCP_MAGIC) +#define LCP_N_QUALITY (1 << LCP_QUALITY) +#define LCP_N_PFC (1 << LCP_PFC) +#define LCP_N_ACFC (1 << LCP_ACFC) + + uint16 mru; /* Maximum Receive Unit */ + int32 accm; /* Async Control Char Map */ + uint16 authentication; /* Authentication protocol */ + uint16 encryption; /* Encryption protocol */ + int32 magic_number; /* Magic number value */ + int32 reporting_period; /* Link Quality reporting period */ +}; + +/* Other configuration option values */ +#define LCP_ACCM_DEFAULT 0xffffffffL +#define LCP_MRU_DEFAULT 1500 +#define LCP_MRU_HI 4096 /* High MRU limit */ +#define LCP_MRU_LO 128 /* Lower MRU limit */ + +/* + * local.want: Options to request. + * Contains desired value. + * Only non-default options need to be negotiated. + * Initially, all are default. + * local.will: Options to accept in a NAK from remote. + * local.work: Options currently being negotiated. + * Value is valid only when negotiate bit is set. + * + * remote.want: Options to suggest by NAK if not present in REQ. + * Contains desired value. + * remote.will: Options to accept in a REQ from remote. + * remote.work: Options currently being negotiated. + * Value is valid only when negotiate bit is set. + */ + +struct lcp_side_s { + uint16 will_negotiate; + struct lcp_value_s want; + struct lcp_value_s work; +}; + +/* LCP control block */ +struct lcp_s { + struct lcp_side_s local; + struct lcp_side_s remote; +}; + +#define LCP_REQ_TRY 20 /* REQ attempts */ +#define LCP_NAK_TRY 10 /* NAK attempts */ +#define LCP_TERM_TRY 10 /* tries on TERM REQ */ +#define LCP_TIMEOUT 3 /* Seconds to wait for response */ + + +int doppp_lcp(int argc, char *argv[], void *p); + +void ppp_ready(struct ppp_s *ppp_p); + +void lcp_init(struct ppp_s *ppp_p); + +#endif /* _PPPLCP_H */ diff --git a/src/nos/include/nos/ppppap.h b/src/nos/include/nos/ppppap.h new file mode 100644 index 00000000..8db54a46 --- /dev/null +++ b/src/nos/include/nos/ppppap.h @@ -0,0 +1,25 @@ +#ifndef _PPPPAP_H +#define _PPPPAP_H + /* PAP config packet codes */ +/* PAP control block */ +struct pap_s { + char *username; /* Username for REQ */ + char *password; /* Password for REQ */ + char *message; /* message from last ACK/NAK */ + struct proc *pp; /* user/password process */ +}; + +#define PAP_REQ_TRY 100 /* REQ attempts */ +#define PAP_FAIL_MAX 5 /* # attempts from remote */ +#define PAP_TIMEOUT 3 /* Seconds to wait for response */ + + +int pap_local(struct ppp_s *ppp_p); +int pap_remote(struct ppp_s *ppp_p); +void pap_down(struct fsm_s *fsm_p); +void pap_proc(struct fsm_s *fsm_p, struct mbuf **bpp); + +int doppp_pap(int argc, char *argv[], void *p); +void pap_init(struct ppp_s *ppp_p); + +#endif /* _PPPPAP_H */ diff --git a/src/nos/include/nos/proc.h b/src/nos/include/nos/proc.h new file mode 100644 index 00000000..801c8834 --- /dev/null +++ b/src/nos/include/nos/proc.h @@ -0,0 +1,128 @@ +#ifndef _PROC_H +#define _PROC_H + +#include + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _TIMER_H +#include "timer.h" +#endif + +#define SIGQSIZE 200 /* Entries in ksignal queue */ + +/* Kernel process control block */ +#define PHASH 16 /* Number of wait table hash chains */ +struct proc { + struct proc *prev; /* Process table pointers */ + struct proc *next; + + struct { + unsigned int suspend:1; /* Process is suspended */ + unsigned int waiting:1; /* Process is waiting */ + unsigned int istate:1; /* Process has interrupts enabled */ + unsigned int sset:1; /* Process has set sig */ + unsigned int freeargs:1; /* Free args on termination */ + } flags; + jmp_buf env; /* Process register state */ + jmp_buf sig; /* State for alert signal */ + int signo; /* Arg to alert to cause signal */ + void *event; /* Wait event */ + uint16 *stack; /* Process stack */ + unsigned stksize; /* Size of same */ + char *name; /* Arbitrary user-assigned name */ + int retval; /* Return value from next kwait() */ + struct timer alarm; /* Alarm clock timer */ + FILE *input; /* Process stdin */ + FILE *output; /* Process stdout */ + int iarg; /* Copy of iarg */ + void *parg1; /* Copy of parg1 */ + void *parg2; /* Copy of parg2 */ +#if 1 /* Nick see ksubr.c */ + void (*startp)(int i, void * p, void *u); /* Copy of initial pc */ +#endif +}; +extern struct proc *Waittab[]; /* Head of wait list */ +extern struct proc *Rdytab; /* Head of ready list */ +extern struct proc *Curproc; /* Currently running process */ +extern struct proc *Susptab; /* Suspended processes */ +extern int Stkchk; /* Stack checking flag */ +extern int Kdebug; /* Control display of current task on screen */ + +struct sigentry { + void *event; + int n; +}; +struct ksig { + struct sigentry entry[SIGQSIZE]; + struct sigentry *wp; + struct sigentry *rp; + volatile int nentries; /* modified both by interrupts and main */ + int maxentries; + int32 duksigs; + int lostsigs; + int32 ksigs; /* Count of ksignal calls */ + int32 ksigwakes; /* Processes woken */ + int32 ksignops; /* ksignal calls that didn't wake anything */ + int32 ksigsqueued; /* ksignal calls queued with ints off */ + int32 kwaits; /* Count of kwait calls */ + int32 kwaitnops; /* kwait calls that didn't block */ + int32 kwaitints; /* kwait calls from interrupt context (error) */ +}; +extern struct ksig Ksig; + +/* Prepare for an exception signal and return 0. If after this macro + * is executed any other process executes alert(pp,val), this will + * invoke the exception and cause this macro to return a second time, + * but with the return value 1. This cannot be a function since the stack + * frame current at the time setjmp is called must still be current + * at the time the signal is taken. Note use of comma operators to return + * the value of setjmp as the overall macro expression value. + */ +#define SETSIG(val) (Curproc->flags.sset=1,\ + Curproc->signo = (val),setjmp(Curproc->sig)) + +/* In kernel.c: */ +void alert(struct proc *pp,int val); +void chname(struct proc *pp,char *newname); +void killproc(struct proc *pp); +void killself(void); +#if 0 /* Nick */ +struct proc *mainproc(struct proc *pp, char *name); +#else +struct proc *mainproc(char *name); +#endif +struct proc *newproc(char *name,unsigned int stksize, + void (*pc)(int,void *,void *), + int iarg,void *parg1,void *parg2,int freeargs); +void ksignal(void *event,int n); +int kwait(void *event); +void resume(struct proc *pp); +int setsig(int val); +void suspend(struct proc *pp); + +/* In ksubr.c: */ +void chkstk(void); +void kinit(void); +unsigned phash(void *event); +#if 1 /* Nick */ +void psetup(struct proc *pp); +#else +void psetup(struct proc *pp,int iarg,void *parg1,void *parg2, + void ((*pc)(int,void *,void *)) ); +#endif +#ifdef AMIGA +void init_psetup(struct proc *pp); +#endif + +#if 0 /* Nick, see z80/asm.h */ +/* Stack background fill value for high water mark checking */ +#define STACKPAT 0x55aa +#endif + +/* Value stashed in location 0 to detect null pointer dereferences */ +#define NULLPAT 0xdead + +#endif /* _PROC_H */ diff --git a/src/nos/include/nos/remote.h b/src/nos/include/nos/remote.h new file mode 100644 index 00000000..c99941df --- /dev/null +++ b/src/nos/include/nos/remote.h @@ -0,0 +1,13 @@ +#ifndef _REMOTE_H +#define _REMOTE_H + +/* Remote reset/restart server definitions */ + +extern char *Rempass; + +/* Commands */ +#define SYS_RESET 1 +#define SYS_EXIT 2 +#define KICK_ME 3 + +#endif /* _REMOTE_H */ diff --git a/src/nos/include/nos/rip.h b/src/nos/include/nos/rip.h new file mode 100644 index 00000000..924bf336 --- /dev/null +++ b/src/nos/include/nos/rip.h @@ -0,0 +1,121 @@ +#ifndef _RIP_H +#define _RIP_H + +/* Routing Information Protocol (RIP) + * + * This code is derived from the 4.2 BSD version which was + * used as a spec since no formal specification is known to exist. + * See RFC 1009, Gateway Requirements, for more details. AGB 4-29-88 + * + * The draft RIP RFC was used to develop most of this code. The above + * referred to the basics of the rip_recv() function of RIP.C. The RIP + * RFC has now been issued as RFC1058. AGB 7-23-88 + * + * Substantially rewritten and integrated into NOS 9/1989 by KA9Q + */ +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _UDP_H +#include "udp.h" +#endif + +#define RIP_INFINITY 16 +#define RIP_TTL 240 /* Default time-to-live for an entry */ +#define RIPVERSION 1 +#define RIP_IPFAM 2 + +/* UDP Port for RIP */ +#define RIP_PORT 520 + +/* RIP Packet Types */ +enum ripcmd { + RIPCMD_REQUEST=1, /* want info */ + RIPCMD_RESPONSE, /* responding to request */ + RIPCMD_MAX /* Nick , */ +}; + +#define HOPCNT_INFINITY 16 /* per Xerox NS */ +#define MAXRIPROUTES 25 /* maximum # routes per RIP pkt */ + +struct rip_list { + struct rip_list *prev; + struct rip_list *next; /* doubly linked list */ + + /* address to scream at periodically: + * this address must have a direct network interface route and an + * ARP entry for the appropriate hardware broadcast address, if approp. + */ + int32 dest; + + /* basic rate of RIP clocks on this net interface */ + int32 interval; + + struct timer rip_time; /* time to output next on this net. iface */ + + /* the interface to transmit on and receive from */ + struct iface *iface; + + /* described below with the mask defs */ + struct { + unsigned int rip_split:1; /* Do split horizon processing */ + unsigned int rip_us:1; /* Include ourselves in the list */ + } flags; +}; + +/* Host format of a single entry in a RIP response packet */ +struct rip_route { + uint16 addr_fam; + int32 target; + int32 metric; +}; +#define RIPROUTE 20 /* Size of each routing entry */ +#define RIPHEADER 4 /* Size of rip header before routes */ +#define MAXRIPPACKET RIPHEADER + (MAXRIPROUTES*RIPROUTE) + +/* RIP statistics counters */ +struct rip_stat { + int32 output; /* Packets sent */ + int32 rcvd; /* Packets received */ + int32 request; /* Number of request packets received */ + int32 response; /* Number of responses received */ + int32 unknown; /* Number of unknown command pkts received */ + int32 version; /* Number of version errors */ + int32 addr_family; /* Number of address family errors */ + int32 refusals; /* Number of packets dropped from a host + on the refuse list */ +}; + +struct rip_refuse { + struct rip_refuse *prev; + struct rip_refuse *next; + int32 target; +}; + +/* RIP primitives */ +int rip_init(void); +void rt_timeout(void *s); +void rip_trigger(void); +int rip_add(int32 dest,int32 interval,int split,int us); +int riprefadd(int32 gateway); +int riprefdrop(int32 gateway); +int ripreq(int32 dest,uint16 replyport); +int rip_drop(int32 dest); +int nbits(int32 target); +void pullentry(struct rip_route *ep,struct mbuf **bpp); + +/* RIP Definition */ +extern uint16 Rip_trace; +extern int Rip_merge; +extern struct rip_stat Rip_stat; +extern struct rip_list *Rip_list; +extern struct rip_refuse *Rip_refuse; +extern struct udp_cb *Rip_cb; + +#endif /* _RIP_H */ + diff --git a/src/nos/include/nos/sb.h b/src/nos/include/nos/sb.h new file mode 100644 index 00000000..6836f60f --- /dev/null +++ b/src/nos/include/nos/sb.h @@ -0,0 +1,28 @@ +#define SB_RESET 6 +#define SB_READ_DATA 0xa +#define SB_WB 0xc +#define SB_WB_STAT 0xc +#define SB_RB_STAT 0xe +#define SB_MIX_INDEX 4 +#define SB_MIX_DATA 5 + +#define SB_IS 0x82 /* Interrupt status */ + +#define SB_MV 0x30 +#define SB_DAC 0x32 +#define SB_MIDI 0x34 +#define SB_CD 0x36 +#define SB_LINE 0x38 +#define SB_MIKE 0x3a +#define SB_PCSPKR 0x3b +#define SB_OUTMIX 0x3c +#define SB_INMIXL 0x3d +#define SB_INMIXR 0x3e +#define SB_ADC 0x3f +#define SB_OUTG 0x41 +#define SB_MIKAGC 0x43 +#define SB_TREB 0x44 +#define SB_BASS 0x46 + +void sbshut(void); + diff --git a/src/nos/include/nos/session.h b/src/nos/include/nos/session.h new file mode 100644 index 00000000..e3515add --- /dev/null +++ b/src/nos/include/nos/session.h @@ -0,0 +1,104 @@ +#ifndef _SESSION_H +#define _SESSION_H + +#include + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _PROC_H +#include "proc.h" +#endif + +#ifndef _HARDWARE_H +#include "hardware.h" +#endif + +#ifndef _FTPCLI_H +#include "ftpcli.h" +#endif + +#ifndef _TELNET_H +#include "telnet.h" +#endif + +struct ttystate { + uint8 *line; /* Line buffer */ + uint8 *lp; /* Pointer into same */ + unsigned int echo:1; /* Keyboard local echoing? */ + unsigned int edit:1; /* Local editing? */ + unsigned int crnl:1; /* Translate cr to lf? */ +}; + +/* Session control structure; only one entry is used at a time */ +struct session { + unsigned index; + enum { + TELNET, + FTP, + AX25TNC, + FINGER, + PING, + NRSESSION, + COMMAND, + VIEW, + HOP, + TIP, + PPPPASS, + DIAL, + DQUERY, + DCLIST, + ITRACE, + REPEAT, + FAX + } type; + + char *name; /* Name of remote host */ + union { + struct ftpcli *ftp; + struct telnet *telnet; + void *p; + } cb; + struct proc *proc; /* Primary session process (e.g., tn recv) */ + struct proc *proc1; /* Secondary session process (e.g., tn xmit) */ + struct proc *proc2; /* Tertiary session process (e.g., upload) */ + FILE *network; /* Primary network socket (control for FTP) */ + FILE *record; /* Receive record file */ + FILE *upload; /* Send file */ + struct ttystate ttystate; + FILE *input; /* Input stream */ + FILE *output; /* Output stream */ + int (*ctlproc)(int); /* Upcall for keyboard ctls */ + int (*inproc)(int); /* Upcall for normal characters */ + struct session *parent; + enum { + SCROLL_INBAND, + SCROLL_LOCAL + } scrollmode; /* Cursor control key mode */ +}; +extern char *Sestypes[]; +extern unsigned Nsessions; /* Maximum number of sessions */ +extern long Sfsize; /* Size of scrollback file, lines */ +#if 1 /* Nick */ +extern struct session *Sessions[]; /* Session descriptors themselves */ +#else +extern struct session **Sessions; /* Session descriptors themselves */ +#endif +extern struct session *Current; /* Always points to current session */ +extern struct session *Lastcurr; /* Last non-command session */ +extern struct session *Command; /* Pointer to command session */ +extern char *Cmdline; /* Last typed command line */ + +/* In session.c: */ +void freesession(struct session *sp); +int keywait(char *prompt,int flush); +struct session *sessptr(char *cp); +struct session *newsession(char *name,int type,int makecur); +void sesflush(void); +void upload(int unused,void *sp1,void *p); + +extern uint16 Lport; +#define ALERT_EOF 1 + +#endif /* _SESSION_H */ diff --git a/src/nos/include/nos/slhc.h b/src/nos/include/nos/slhc.h new file mode 100644 index 00000000..a39a0678 --- /dev/null +++ b/src/nos/include/nos/slhc.h @@ -0,0 +1,188 @@ +#ifndef _SLHC_H +#define _SLHC_H +/* + * Definitions for tcp compression routines. + * + * $Header: c:/internet/src/RCS/slhc.h 1.4 1994/01/02 09:54:16 karn Exp $ + * + * Copyright (c) 1989 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * Van Jacobson (van@helios.ee.lbl.gov), Dec 31, 1989: + * - Initial distribution. + * + * + * modified for KA9Q Internet Software Package by + * Katie Stevens (dkstevens@ucdavis.edu) + * University of California, Davis + * Computing Services + * - 01-31-90 initial adaptation + * + * - Feb 1991 Bill_Simpson@um.cc.umich.edu + * variable number of conversation slots + * allow zero or one slots + * separate routines + * status display + */ +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IP_H +#include "ip.h" +#endif + +#ifndef _TCP_H +#include "tcp.h" +#endif + +/* + * Compressed packet format: + * + * The first octet contains the packet type (top 3 bits), TCP + * 'push' bit, and flags that indicate which of the 4 TCP sequence + * numbers have changed (bottom 5 bits). The next octet is a + * conversation number that associates a saved IP/TCP header with + * the compressed packet. The next two octets are the TCP checksum + * from the original datagram. The next 0 to 15 octets are + * sequence number changes, one change per bit set in the header + * (there may be no changes and there are two special cases where + * the receiver implicitly knows what changed -- see below). + * + * There are 5 numbers which can change (they are always inserted + * in the following order): TCP urgent pointer, window, + * acknowlegement, sequence number and IP ID. (The urgent pointer + * is different from the others in that its value is sent, not the + * change in value.) Since typical use of SLIP links is biased + * toward small packets (see comments on MTU/MSS below), changes + * use a variable length coding with one octet for numbers in the + * range 1 - 255 and 3 octets (0, MSB, LSB) for numbers in the + * range 256 - 65535 or 0. (If the change in sequence number or + * ack is more than 65535, an uncompressed packet is sent.) + */ + +/* + * Packet types (must not conflict with IP protocol version) + * + * The top nibble of the first octet is the packet type. There are + * three possible types: IP (not proto TCP or tcp with one of the + * control flags set); uncompressed TCP (a normal IP/TCP packet but + * with the 8-bit protocol field replaced by an 8-bit connection id -- + * this type of packet syncs the sender & receiver); and compressed + * TCP (described above). + * + * LSB of 4-bit field is TCP "PUSH" bit (a worthless anachronism) and + * is logically part of the 4-bit "changes" field that follows. Top + * three bits are actual packet type. For backward compatibility + * and in the interest of conserving bits, numbers are chosen so the + * IP protocol version number (4) which normally appears in this nibble + * means "IP packet". + */ + +/* SLIP compression masks for len/vers byte */ +#define SL_TYPE_IP 0x40 +#define SL_TYPE_UNCOMPRESSED_TCP 0x70 +#define SL_TYPE_COMPRESSED_TCP 0x80 +#define SL_TYPE_ERROR 0x00 + +/* Bits in first octet of compressed packet */ +#define NEW_C 0x40 /* flag bits for what changed in a packet */ +#define NEW_I 0x20 +#define NEW_S 0x08 +#define NEW_A 0x04 +#define NEW_W 0x02 +#define NEW_U 0x01 + +/* reserved, special-case values of above */ +#define SPECIAL_I (NEW_S|NEW_W|NEW_U) /* echoed interactive traffic */ +#define SPECIAL_D (NEW_S|NEW_A|NEW_W|NEW_U) /* unidirectional data */ +#define SPECIALS_MASK (NEW_S|NEW_A|NEW_W|NEW_U) + +#define TCP_PUSH_BIT 0x10 + +/* + * data type and sizes conversion assumptions: + * + * VJ code KA9Q style generic + * u_char byte_t unsigned char 8 bits + * u_short uint16 unsigned short 16 bits + * u_int uint16 unsigned short 16 bits + * u_long unsigned long unsigned long 32 bits + * int int32 long 32 bits + */ + +/* + * "state" data for each active tcp conversation on the wire. This is + * basically a copy of the entire IP/TCP header from the last packet + * we saw from the conversation together with a small identifier + * the transmit & receive ends of the line use to locate saved header. + */ +struct cstate { + byte_t this; /* connection id number (xmit) */ + struct cstate *next; /* next in ring (xmit) */ + struct ip cs_ip; /* ip/tcp hdr from most recent packet */ + struct tcp cs_tcp; +}; + +/* + * all the state data for one serial line (we need one of these per line). + */ +struct slcompress { + struct cstate *tstate; /* transmit connection states (array)*/ + struct cstate *rstate; /* receive connection states (array)*/ + + byte_t tslot_limit; /* highest transmit slot id (0-l)*/ + byte_t rslot_limit; /* highest receive slot id (0-l)*/ + + byte_t xmit_oldest; /* oldest xmit in ring */ + byte_t xmit_current; /* most recent xmit id */ + byte_t recv_current; /* most recent rcvd id */ + + byte_t flags; +#define SLF_TOSS 0x01 /* tossing rcvd frames until id received */ + + int32 sls_o_nontcp; /* outbound non-TCP packets */ + int32 sls_o_tcp; /* outbound TCP packets */ + int32 sls_o_uncompressed; /* outbound uncompressed packets */ + int32 sls_o_compressed; /* outbound compressed packets */ + int32 sls_o_searches; /* searches for connection state */ + int32 sls_o_misses; /* times couldn't find conn. state */ + + int32 sls_i_uncompressed; /* inbound uncompressed packets */ + int32 sls_i_compressed; /* inbound compressed packets */ + int32 sls_i_error; /* inbound error packets */ + int32 sls_i_tossed; /* inbound packets tossed because of error */ +}; + +/* In slhc.c: */ +struct slcompress *slhc_init(int rslots, int tslots); +void slhc_free(struct slcompress *comp); + +int slhc_compress(struct slcompress *comp, + struct mbuf **bpp, int compress_cid); +int slhc_uncompress(struct slcompress *comp, + struct mbuf **bpp); +int slhc_remember(struct slcompress *comp, + struct mbuf **bpp); +int slhc_toss(struct slcompress *comp); + +void slhc_i_status(struct slcompress *comp); +void slhc_o_status(struct slcompress *comp); + +#endif /* _SLHC_H */ diff --git a/src/nos/include/nos/slip.h b/src/nos/include/nos/slip.h new file mode 100644 index 00000000..a36094d8 --- /dev/null +++ b/src/nos/include/nos/slip.h @@ -0,0 +1,60 @@ +#ifndef _SLIP_H +#define _SLIP_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _SLHC_H +#include "slhc.h" +#endif + +#define SLIP_MAX 6 /* Maximum number of slip channels */ + +/* SLIP definitions */ + +/* Receiver allocation increment + * Make this match the medium mbuf size in mbuf.h for best performance + */ +#define SLIP_ALLOC 128 + +#define FR_END 0300 /* Frame End */ +#define FR_ESC 0333 /* Frame Escape */ +#define T_FR_END 0334 /* Transposed frame end */ +#define T_FR_ESC 0335 /* Transposed frame escape */ + +/* Slip protocol control structure */ +struct slip { + struct iface *iface; + uint8 escaped; /* Receiver State control flag */ +#define SLIP_FLAG 0x01 /* Last char was a frame escape */ +#define SLIP_VJCOMPR 0x02 /* TCP header compression enabled */ + struct mbuf *rbp_head; /* Head of mbuf chain being filled */ + struct mbuf *rbp_tail; /* Pointer to mbuf currently being written */ + uint8 *rcp; /* Write pointer */ + uint16 rcnt; /* Length of mbuf chain */ + struct mbuf *tbp; /* Transmit mbuf being sent */ + uint16 errors; /* Receiver input errors */ + int type; /* Protocol of input */ + int (*send)(int,struct mbuf **); /* send mbufs to device */ + int (*get)(int); /* fetch input chars from device */ + struct slcompress *slcomp; /* TCP header compression table */ +}; + +/* In slip.c: */ +extern struct slip Slip[]; + +void asytxdone(int dev); +int slip_free(struct iface *ifp); +int slip_init(struct iface *ifp); +int slip_raw(struct iface *iface,struct mbuf **data); +void slip_rx(int xdev,void *p1,void *p2); +int slip_send(struct mbuf **bp,struct iface *iface,int32 gateway,uint8 tos); +int vjslip_send(struct mbuf **bp,struct iface *iface,int32 gateway,uint8 tos); +void slip_status(struct iface *iface); + +#endif /* _SLIP_H */ diff --git a/src/nos/include/nos/smtp.h b/src/nos/include/nos/smtp.h new file mode 100644 index 00000000..18807b65 --- /dev/null +++ b/src/nos/include/nos/smtp.h @@ -0,0 +1,88 @@ +#ifndef _SMTP_H +#define _SMTP_H + +#define SMTPTRACE /* enable tracing for smtp */ +#define MAXSESSIONS 10 /* most connections allowed */ +#define JOBNAME 13 /* max size of a job name with null */ +#define LINELEN 256 +#define SLINELEN 64 +#define MBOXLEN 8 /* max size of a mail box name */ + +/* types of address used by smtp in an address list */ +#define BADADDR 0 +#define LOCAL 1 +#define DOMAIN 2 + +/* a list entry */ +struct list { + struct list *next; + char *val; + char type; +}; + +/* Per-session control block used by smtp server */ +struct smtpsv { + FILE *network; /* The network stream for this connection */ + char *system; /* Name of remote system */ + char *from; /* sender address */ + struct list *to; /* Linked list of recipients */ + FILE *data; /* Temporary input file pointer */ +}; + +/* used by smtpcli as a queue entry for a single message */ +struct smtp_job { + struct smtp_job *next; /* pointer to next mail job for this system */ + char jobname[9]; /* the prefix of the job file name */ + char *from; /* address of sender */ + struct list *to; /* Linked list of recipients */ +}; + +/* control structure used by an smtp client session */ +struct smtpcli { + FILE *network; /* The network stream for this connection */ + int32 ipdest; /* address of forwarding system */ + char *destname; /* domain address of forwarding system */ + char *wname; /* name of workfile */ + char *tname; /* name of data file */ + char buf[LINELEN]; /* Output buffer */ + char cnt; /* Length of input buffer */ + FILE *tfile; + struct smtp_job *jobq; + struct list *errlog; + int lock; /* In use */ +}; + +/* smtp server routing mode */ +#define QUEUE 1 + +extern int Smtpmode; +extern char *Mailspool; +extern char *Maillog; +extern char *Mailqdir; /* Outgoing spool directory */ +extern char *Routeqdir; /* spool directory for a router program */ +extern char *Mailqueue; /* Prototype of work file */ +extern char *Maillock; /* Mail system lock */ +extern char *Alias; /* File of local aliases */ + +/* In smtpserv.c: */ +#if 1 /* Nick */ +char *ptime(time_t *t); +#else +char *ptime(long *t); +#endif +long get_msgid(void); +char *getname(char *cp); +int validate_address(char *s); +int queuejob(FILE *dfile,char *host,struct list *to,char *from); +struct list *addlist(struct list **head,char *val,int type); +int mdaemon(FILE *data,char *to,struct list *lp,int bounce); + +/* In smtpcli.c: */ +int smtptick(int32 target); +int mlock(char *dir,char *id); +int rmlock(char *dir,char *id); +void del_list(struct list *lp); +int32 mailroute(char *dest); + +#endif /* _SMTP_H */ + diff --git a/src/nos/include/nos/sockaddr.h b/src/nos/include/nos/sockaddr.h new file mode 100644 index 00000000..d1ad1ee7 --- /dev/null +++ b/src/nos/include/nos/sockaddr.h @@ -0,0 +1,34 @@ +#ifndef _SOCKADDR_H +#define _SOCKADDR_H + +/* Berkeley format socket address structures. These things were rather + * poorly thought out, but compatibility is important (or so they say). + * Note that all the sockaddr variants must be of the same size, 16 bytes + * to be specific. Although attempts have been made to account for alignment + * requirements (notably in sockaddr_ax), porters should check each + * structure. + */ + +/* Generic socket address structure */ +struct sockaddr { + short sa_family; + char sa_data[14]; +}; + +/* This is a structure for "historical" reasons (whatever they are) */ +struct in_addr { + unsigned long s_addr; +}; + +/* Socket address, DARPA Internet style */ +struct sockaddr_in { + short sin_family; + unsigned short sin_port; + struct in_addr sin_addr; + char sin_zero[8]; +}; + +#define SOCKSIZE (sizeof(struct sockaddr)) +#define MAXSOCKSIZE SOCKSIZE /* All sockets are of the same size for now */ + +#endif /* _SOCKADDR_H */ diff --git a/src/nos/include/nos/socket.h b/src/nos/include/nos/socket.h new file mode 100644 index 00000000..2ff095df --- /dev/null +++ b/src/nos/include/nos/socket.h @@ -0,0 +1,122 @@ +#ifndef _SOCKET_H +#define _SOCKET_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#include + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _PROC_H +#include "proc.h" +#endif + +#ifndef _SOCKADDR_H +#include "sockaddr.h" +#endif + +/* Local IP wildcard address */ +#define INADDR_ANY 0x0L + +/* IP protocol numbers */ +/* now in internet.h */ + +/* TCP port numbers */ +#define IPPORT_ECHO 7 /* Echo data port */ +#define IPPORT_DISCARD 9 /* Discard data port */ +#define IPPORT_FTPD 20 /* FTP Data port */ +#define IPPORT_FTP 21 /* FTP Control port */ +#define IPPORT_TELNET 23 /* Telnet port */ +#define IPPORT_SMTP 25 /* Mail port */ +#define IPPORT_MTP 57 /* Secondary telnet protocol */ +#define IPPORT_FINGER 79 /* Finger port */ +#define IPPORT_TTYLINK 87 /* Chat port */ +#define IPPORT_POP 109 /* pop2 port */ +#define IPPORT_NNTP 119 /* Netnews port */ +#define IPPORT_LOGIN 513 /* BSD rlogin port */ +#define IPPORT_TERM 5000 /* Serial interface server port */ + +/* UDP port numbers */ +#define IPPORT_DOMAIN 53 +#define IPPORT_BOOTPS 67 +#define IPPORT_BOOTPC 68 +#define IPPORT_PHOTURIS 468 /* Photuris Key management */ +#define IPPORT_RIP 520 +#define IPPORT_REMOTE 1234 /* Pulled out of the air */ +#define IPPORT_BSR 5000 /* BSR X10 interface server port (UDP) */ + +#define AF_INET 0 +#define AF_AX25 1 +#define AF_NETROM 2 +#define AF_LOCAL 3 +#define NAF 4 + +#define SOCK_STREAM 0 +#define SOCK_DGRAM 1 +#define SOCK_RAW 2 +#define SOCK_SEQPACKET 3 + +#undef EWOULDBLOCK +#define EWOULDBLOCK 100 +#define ENOTCONN 101 +#define ESOCKTNOSUPPORT 102 +#define EAFNOSUPPORT 103 +#define EISCONN 104 +#define EOPNOTSUPP 105 +#define EALARM 106 +#define EABORT 107 +#undef EINTR +#define EINTR 108 +#define ECONNREFUSED 109 +#define EMSGSIZE 110 +#define EADDRINUSE 111 +#define EMIN 100 +#define EMAX 112 + +extern char *Sock_errlist[]; + +/* In socket.c: */ +extern int Axi_sock; /* Socket listening to AX25 (there can be only one) */ + +int accept(int s,struct sockaddr *peername,int *peernamelen); +int bind(int s,struct sockaddr *name,int namelen); +int close_s(int s); +int connect(int s,struct sockaddr *peername,int peernamelen); +char *eolseq(int s); +void freesock(struct proc *pp); +int getpeername(int s,struct sockaddr *peername,int *peernamelen); +int getsockname(int s,struct sockaddr *name,int *namelen); +int listen(int s,int backlog); +int recv_mbuf(int s,struct mbuf **bpp,int flags,struct sockaddr *from,int *fromlen); +int send_mbuf(int s,struct mbuf **bp,int flags,struct sockaddr *to,int tolen); +int settos(int s,int tos); +int shutdown(int s,int how); +int socket(int af,int type,int protocol); +void sockinit(void); +int sockkick(int s); +int socklen(int s,int rtx); +struct proc *sockowner(int s,struct proc *newowner); +int usesock(int s); +int socketpair(int af,int type,int protocol,int sv[]); + +/* In sockuser.c: */ +void flushsocks(void); +int recv(int s,void *buf,int len,int flags); +int recvfrom(int s,void *buf,int len,int flags,struct sockaddr *from,int *fromlen); +int send(int s,void *buf,int len,int flags); +int sendto(int s,void *buf,int len,int flags,struct sockaddr *to,int tolen); + +/* In file sockutil.c: */ +char *psocket(void *p); +char *sockerr(int s); +char *sockstate(int s); + +/* In file tcpsock.c: */ +int start_tcp(uint16 port,char *name,void (*task)(),int stack); +int stop_tcp(uint16 port); + +#endif /* _SOCKET_H */ diff --git a/src/nos/include/nos/sppp.h b/src/nos/include/nos/sppp.h new file mode 100644 index 00000000..1d4d445f --- /dev/null +++ b/src/nos/include/nos/sppp.h @@ -0,0 +1,18 @@ +/* HDLC envelope constants */ +#define HDLC_ENVLEN 8 /* Max bytes for HDLC envelope (outgoing) */ + +#define HDLC_FLAG 0x7e /* HDLC async start/stop flag */ +#define HDLC_ESC_ASYNC 0x7d /* HDLC transparency escape flag for async */ +#define HDLC_ESC_COMPL 0x20 /* HDLC transparency bit complement mask */ + +#define HDLC_FCS_START 0xffff /* Starting bit string for FCS calculation */ +#define HDLC_FCS_FINAL 0xf0b8 /* FCS when summed over frame and sender FCS */ +#define PPP_IP_PROTOCOL 0x0021 /* Internet Protocol */ +#define PPP_COMPR_PROTOCOL 0x002d /* Van Jacobson Compressed TCP/IP */ +#define PPP_UNCOMP_PROTOCOL 0x002f /* Van Jacobson Uncompressed TCP/IP */ + +void sppp_rx(int dev,void *p1,void *p2); +int sppp_send(struct mbuf **bpp,struct iface *ifp,int32 gateway,uint8 tos); +int sppp_output(struct iface *iface,int protocol,struct mbuf **bpp); +int sppp_init(struct iface *ifp); +int sppp_free(struct iface *ifp); diff --git a/src/nos/include/nos/stdio.h b/src/nos/include/nos/stdio.h new file mode 100644 index 00000000..3069808f --- /dev/null +++ b/src/nos/include/nos/stdio.h @@ -0,0 +1,163 @@ +#ifndef _STDIO_H +#define _STDIO_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#define EOL_LEN 3 + +#define _fd_type(fd) (((fd) >> 13) & 3) +#define _fd_seq(fd) ((fd) & 8191) +#define _mk_fd(fd,type) ((fd) | ((type) << 13)) + +struct _file{ + unsigned cookie; /* Detect bogus file pointers */ +#define _COOKIE 0xdead + int refcnt; + struct _file *prev; + struct _file *next; + + int fd; /* File, socket or asy descriptor */ + long offset; /* Seek offset, type == _FL_FILE only */ + + enum { + _FL_FILE, /* Associated with file */ + _FL_SOCK, /* Associated with network socket */ + _FL_ASY, /* Asynch port */ +#ifdef ZILOG + _FL_DIAG, /* Polled asynch port (output only for now) */ +#endif + _FL_DISPLAY, /* Associated with display driver */ + _FL_PIPE /* Pipe mode */ + } type; + + enum { + _IOFBF=1, /* Full buffering */ + _IOLBF, /* Line buffering */ + _IONBF /* No buffering */ + } bufmode; /* Output buffering mode */ + + struct { + unsigned int err:1; /* Error on stream */ + unsigned int eof:1; /* EOF seen */ + unsigned int ascii:1; /* Ascii (newline translate) mode */ + unsigned int append:1; /* Always seek to end before writing */ + unsigned int tmp:1; /* Delete on close */ + unsigned int partread:1;/* Allow partial reads from fread() */ + } flags; + struct mbuf *obuf; /* Output buffer */ + struct mbuf *ibuf; /* Input buffer */ + char eol[EOL_LEN]; /* Text mode end-of-line sequence, if any */ + int bufsize; /* Size of buffer to use */ + void *ptr; /* File name or display pointer */ +}; + +typedef struct _file FILE; + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned size_t; +#endif + +#ifndef NULL /* Nick formerly #undef NULL */ +#define NULL 0 +#endif +#ifndef BUFSIZ /* Nick */ +#define BUFSIZ 128 +#endif +#ifndef EOF /* Nick */ +#define EOF (-1) +#endif +#ifndef L_tmpnam /* Nick */ +#define L_tmpnam 13 +#endif + +#ifndef SEEK_SET /* Nick */ +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif + +#ifndef _PROC_H +#include "proc.h" +#endif + +#define stdout Curproc->output +#define stdin Curproc->input +#define stderr Curproc->output + +#define STREAM_BINARY 0 +#define STREAM_ASCII 1 + +#define FULL_READ 0 +#define PART_READ 1 + +FILE *asyopen(char *name,char *mode); +#ifdef ZILOG +FILE *diagopen(int dev, char *mode); +#endif +int close(int fd); +FILE *displayopen(char *mode,int noscrol,int sfsize); +int fblock(FILE *fp,int mode); +int fclose(FILE *fp); +void fcloseall(void); +FILE *fdopen(int handle,char *mode); +FILE *fdup(FILE *fp); +int fflush(FILE *fp); +int fgetc(FILE *fp); +int _fgetc(FILE *fp); +char *fgets(char *buf,int len,FILE *fp); +void flushall(void); +int fmode (FILE *fp,int mode); +char *fpname(FILE *fp); +int fprintf(FILE *fp,char *fmt,...); +int fputc(int c,FILE *fp); +int fputs(char *buf,FILE *fp); +size_t fread(void *ptr,size_t size,size_t n,FILE *fp); +FILE *freopen(char *name,char *mode,FILE *fp); +int fseek(FILE *fp,long offset,int whence); +long ftell(FILE *fp); +size_t fwrite(void *ptr,size_t size,size_t n,FILE *fp); +char *gets(char *s); +void perror(const char *s); +FILE *pipeopen(void); +int printf(char *fmt,...); +int puts(char *s); +int rename(const char *,const char *); +void setbuf(FILE *fp,char *buf); +int seteol(FILE *fp,char *seq); +int setvbuf(FILE *fp,char *buf,int type,int size); +int sprintf(char *,char *, ...); +int sscanf(char *,char *,...); /* From regular library */ +FILE *tmpfile(void); +char *tmpnam(char *); /* From regular library */ +int ungetc(int c,FILE *fp); +int unlink(const char *); /* From regular library */ +int vfprintf(FILE *fp,char *fmt, void *args); +int vprintf(char *fmt, void *args); +int vsprintf(char *,char *,void *); + +extern int _clrtmp; /* Flag controlling wipe of temporary files on close */ + +/* Macros */ +#define feof(fp) ((fp)->flags.eof) +#define ferror(fp) ((fp)->flags.err) +#define fileno(fp) ((fp) != NULL ? (fp)->fd : -1) +#define fopen(s,m) (freopen((s),(m),NULL)) +#define putc(c,fp) (fputc((c),(fp))) +#define getc(fp) (fgetc((fp))) +#define getchar() (getc(stdin)) +#define clearerr(fp) ((fp)->flags.eof = (fp)->flags.err = 0) +#define rewind(fp) ((void)fseek((fp),0L,SEEK_SET),clearerr((fp))) +#define putchar(c) (putc((c),stdout)) + +#ifdef ZILOG +/* for debugging, see filesys/process.c */ +#include /* this should be done earlier, before vfprintf() etc */ +int dprintf(int level, const char *format, ...); +int vdprintf(int level, const char *format, va_list arguments); +unsigned int dputter(void *ptr, unsigned int n, FILE *fp); +#endif + +#endif /* _STDIO_H */ diff --git a/src/nos/include/nos/sync.h b/src/nos/include/nos/sync.h new file mode 100644 index 00000000..97d88087 --- /dev/null +++ b/src/nos/include/nos/sync.h @@ -0,0 +1,8 @@ +/* m-sequence generated by polynomial x^6 + X^5 + 1, started in the 100000 + * state and augmented with an extra 0 at the front to make a 64-bit sequence + * 0000 0010 0001 1000 1010 0111 1010 0011 + * 1001 0010 1101 1101 1001 1010 1011 1111 + */ +#define SYNC1 0x0218a7a3L +#define SYNC2 0x92dd9abfL + diff --git a/src/nos/include/nos/tcp.h b/src/nos/include/nos/tcp.h new file mode 100644 index 00000000..58dc21a5 --- /dev/null +++ b/src/nos/include/nos/tcp.h @@ -0,0 +1,320 @@ +#ifndef _TCP_H +#define _TCP_H + +/* TCP implementation. Follows RFC 793 as closely as possible */ +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _INTERNET_H +#include "internet.h" +#endif + +#ifndef _IP_H +#include "ip.h" +#endif + +#ifndef _NETUSER_H +#include "netuser.h" +#endif + +#ifndef _TIMER_H +#include "timer.h" +#endif + +#define DEF_MSS 512 /* Default maximum segment size */ +#define DEF_WND 2048 /* Default receiver window */ +#define RTTCACHE 16 /* # of TCP round-trip-time cache entries */ +#define DEF_RTT 5000 /* Initial guess at round trip time (5 sec) */ +#define MSL2 30 /* Guess at two maximum-segment lifetimes */ +#define MIN_RTO 500L /* Minimum timeout, milliseconds */ +#define TCP_HDR_PAD 70 /* mbuf size to preallocate for headers */ +#define DEF_WSCALE 0 /* Our window scale option */ + +#define geniss() ((int32)msclock() << 12) /* Increment clock at 4 MB/sec */ + +/* Number of consecutive duplicate acks to trigger fast recovery */ +#define TCPDUPACKS 3 + +/* Round trip timing parameters */ +#define AGAIN 8 /* Average RTT gain = 1/8 */ +#define LAGAIN 3 /* Log2(AGAIN) */ +#define DGAIN 4 /* Mean deviation gain = 1/4 */ +#define LDGAIN 2 /* log2(DGAIN) */ + +/* TCP segment header -- internal representation + * Note that this structure is NOT the actual header as it appears on the + * network (in particular, the offset field is missing). + * All that knowledge is in the functions ntohtcp() and htontcp() in tcpsubr.c + */ +#define TCPLEN 20 /* Minimum Header length, bytes */ +#define TCP_MAXOPT 40 /* Largest option field, bytes */ +struct tcp { + uint16 source; /* Source port */ + uint16 dest; /* Destination port */ + int32 seq; /* Sequence number */ + int32 ack; /* Acknowledgment number */ + uint16 wnd; /* Receiver flow control window */ + uint16 checksum; /* Checksum */ + uint16 up; /* Urgent pointer */ + uint16 mss; /* Optional max seg size */ + uint8 wsopt; /* Optional window scale factor */ + uint32 tsval; /* Outbound timestamp */ + uint32 tsecr; /* Timestamp echo field */ + struct { + unsigned int congest:1; /* Echoed IP congestion experienced bit */ + unsigned int urg:1; + unsigned int ack:1; + unsigned int psh:1; + unsigned int rst:1; + unsigned int syn:1; + unsigned int fin:1; + unsigned int mss:1; /* MSS option present */ + unsigned int wscale:1; /* Window scale option present */ + unsigned int tstamp:1; /* Timestamp option present */ + } flags; +}; +/* TCP options */ +#define EOL_KIND 0 +#define NOOP_KIND 1 +#define MSS_KIND 2 +#define MSS_LENGTH 4 +#define WSCALE_KIND 3 +#define WSCALE_LENGTH 3 +#define TSTAMP_KIND 8 +#define TSTAMP_LENGTH 10 + +/* Resequencing queue entry */ +struct reseq { + struct reseq *next; /* Linked-list pointer */ + struct tcp seg; /* TCP header */ + struct mbuf *bp; /* data */ + uint16 length; /* data length */ + char tos; /* Type of service */ +}; +/* These numbers match those defined in the MIB for TCP connection state */ +enum tcp_state { + TCP_CLOSED=1, + TCP_LISTEN, + TCP_SYN_SENT, + TCP_SYN_RECEIVED, + TCP_ESTABLISHED, + TCP_FINWAIT1, + TCP_FINWAIT2, + TCP_CLOSE_WAIT, + TCP_LAST_ACK, + TCP_CLOSING, + TCP_TIME_WAIT /* Nick , */ +}; + +/* TCP connection control block */ +struct tcb { + struct tcb *next; /* Linked list pointer */ + + struct connection conn; + + enum tcp_state state; /* Connection state */ + + char reason; /* Reason for closing */ +#define NORMAL 0 /* Normal close */ +#define RESET 1 /* Reset by other end */ +#define TIMEOUT 2 /* Excessive retransmissions */ +#define NETWORK 3 /* Network problem (ICMP message) */ + +/* If reason == NETWORK, the ICMP type and code values are stored here */ + uint8 type; + uint8 code; + + /* Send sequence variables */ + struct { + int32 una; /* First unacknowledged sequence number */ + int32 nxt; /* Next sequence num to be sent for the first time */ + int32 ptr; /* Working transmission pointer */ + int32 wl1; /* Sequence number used for last window update */ + int32 wl2; /* Ack number used for last window update */ + int32 wnd; /* Other end's offered receive window */ + uint16 up; /* Send urgent pointer */ + uint8 wind_scale;/* Send window scale */ + } snd; + int32 iss; /* Initial send sequence number */ + int32 resent; /* Count of bytes retransmitted */ + int32 cwind; /* Congestion window */ + int32 ssthresh; /* Slow-start threshold */ + int dupacks; /* Count of duplicate (do-nothing) ACKs */ + + /* Receive sequence variables */ + struct { + int32 nxt; /* Incoming sequence number expected next */ + int32 wnd; /* Our offered receive window */ + uint16 up; /* Receive urgent pointer */ + uint8 wind_scale;/* Recv window scale */ + } rcv; + int32 last_ack_sent; /* Last ack sent for timestamp purposes */ + int32 ts_recent; /* Most recent incoming timestamp */ + + int32 irs; /* Initial receive sequence number */ + int32 rerecv; /* Count of duplicate bytes received */ + int32 mss; /* Maximum segment size */ + + int32 window; /* Receiver window and send queue limit */ + int32 limit; /* Send queue limit */ + + void (*r_upcall)(struct tcb *tcb,int32 cnt); + /* Call when "significant" amount of data arrives */ + void (*t_upcall)(struct tcb *tcb,int32 cnt); + /* Call when ok to send more data */ + void (*s_upcall)(struct tcb *tcb,int old,int new); + /* Call when connection state changes */ + struct { /* Control flags */ + unsigned int force:1; /* We owe the other end an ACK or window update */ + unsigned int clone:1; /* Server-type TCB, cloned on incoming SYN */ + unsigned int retran:1; /* A retransmission has occurred */ + unsigned int active:1; /* TCB created with an active open */ + unsigned int synack:1; /* Our SYN has been acked */ + unsigned int rtt_run:1; /* We're timing a segment */ + unsigned int congest:1; /* Copy of last IP congest bit received */ + int ts_ok:1; /* We're using timestamps */ + int ws_ok:1; /* We're using window scaling */ + } flags; + char tos; /* Type of service (for IP) */ + int backoff; /* Backoff interval */ + + struct mbuf *rcvq; /* Receive queue */ + struct mbuf *sndq; /* Send queue */ + int32 rcvcnt; /* Count of items on rcvq */ + int32 sndcnt; /* Number of unacknowledged sequence numbers on + * sndq. NB: includes SYN and FIN, which don't + * actually appear on sndq! + */ + + struct reseq *reseq; /* Out-of-order segment queue */ + struct timer timer; /* Retransmission timer */ + int32 rtt_time; /* Stored clock values for RTT */ + int32 rttseq; /* Sequence number being timed */ + int32 rttack; /* Ack at start of timing (for txbw calc) */ + int32 srtt; /* Smoothed round trip time, milliseconds */ + int32 mdev; /* Mean deviation, milliseconds */ + int32 rtt; /* Last received RTT (for debugging) */ + + int user; /* User parameter (e.g., for mapping to an + * application control block + */ + int32 quench; /* Count of incoming ICMP source quenches */ + int32 unreach; /* Count of incoming ICMP unreachables */ + int32 timeouts; /* Count of retransmission timeouts */ + int32 lastack; /* Time of last received ack */ + int32 txbw; /* Estimate of transmit bandwidth */ + int32 lastrx; /* Time of last received data */ + int32 rxbw; /* Estimate of receive bandwidth */ +}; +/* TCP round-trip time cache */ +struct tcp_rtt { + int32 addr; /* Destination IP address */ + int32 srtt; /* Most recent SRTT */ + int32 mdev; /* Most recent mean deviation */ +}; +extern struct tcp_rtt Tcp_rtt[]; +extern int (*Kicklist[])(); + +/* TCP statistics counters */ +struct tcp_stat { + uint16 runt; /* Smaller than minimum size */ + uint16 checksum; /* TCP header checksum errors */ + uint16 conout; /* Outgoing connection attempts */ + uint16 conin; /* Incoming connection attempts */ + uint16 resets; /* Resets generated */ + uint16 bdcsts; /* Bogus broadcast packets */ +}; +extern struct mib_entry Tcp_mib[]; +#define tcpRtoAlgorithm Tcp_mib[1].value.integer +#define tcpRtoMin Tcp_mib[2].value.integer +#define tcpRtoMax Tcp_mib[3].value.integer +#define tcpMaxConn Tcp_mib[4].value.integer +#define tcpActiveOpens Tcp_mib[5].value.integer +#define tcpPassiveOpens Tcp_mib[6].value.integer +#define tcpAttemptFails Tcp_mib[7].value.integer +#define tcpEstabResets Tcp_mib[8].value.integer +#define tcpCurrEstab Tcp_mib[9].value.integer +#define tcpInSegs Tcp_mib[10].value.integer +#define tcpOutSegs Tcp_mib[11].value.integer +#define tcpRetransSegs Tcp_mib[12].value.integer +#define tcpInErrs Tcp_mib[14].value.integer +#define tcpOutRsts Tcp_mib[15].value.integer +#define NUMTCPMIB 15 + +extern struct tcb *Tcbs; +extern char *Tcpstates[]; +extern char *Tcpreasons[]; + +/* In tcpcmd.c: */ +extern int Tcp_tstamps; +extern int32 Tcp_irtt; +extern uint16 Tcp_limit; +extern uint16 Tcp_mss; +extern int Tcp_syndata; +extern int Tcp_trace; +extern uint16 Tcp_window; + +void st_tcp(struct tcb *tcb); + +/* In tcphdr.c: */ +void htontcp(struct tcp *tcph,struct mbuf **data, + int32 ipsrc,int32 ipdest); +int ntohtcp(struct tcp *tcph,struct mbuf **bpp); + +/* In tcpin.c: */ +void reset(struct ip *ip,struct tcp *seg); +void send_syn(struct tcb *tcb); +void tcp_input(struct iface *iface,struct ip *ip,struct mbuf **bpp, + int rxbroadcast,int32 said); +void tcp_icmp(int32 icsource,int32 source,int32 dest, + uint8 type,uint8 code,struct mbuf **bpp); + +/* In tcpsubr.c: */ +void close_self(struct tcb *tcb,int reason); +struct tcb *create_tcb(struct connection *conn); +struct tcb *lookup_tcb(struct connection *conn); +void rtt_add(int32 addr,int32 rtt); +struct tcp_rtt *rtt_get(int32 addr); +int seq_ge(int32 x,int32 y); +int seq_gt(int32 x,int32 y); +int seq_le(int32 x,int32 y); +int seq_lt(int32 x,int32 y); +int seq_within(int32 x,int32 low,int32 high); +void settcpstate(struct tcb *tcb,enum tcp_state newstate); +void tcp_garbage(int red); + +/* In tcpout.c: */ +void tcp_output(struct tcb *tcb); + +/* In tcptimer.c: */ +int32 backoff(int n); +void tcp_timeout(void *p); + +/* In tcpuser.c: */ +int close_tcp(struct tcb *tcb); +int del_tcp(struct tcb *tcb); +int kick(int32 addr); +int kick_tcp(struct tcb *tcb); +struct tcb *open_tcp(struct socket *lsocket,struct socket *fsocket, + int mode,uint16 window, + void (*r_upcall)(struct tcb *tcb,int32 cnt), + void (*t_upcall)(struct tcb *tcb,int32 cnt), + void (*s_upcall)(struct tcb *tcb,int old,int new), + int tos,int user); +int32 recv_tcp(struct tcb *tcb,struct mbuf **bpp,int32 cnt); +void reset_all(void); +void reset_tcp(struct tcb *tcb); +long send_tcp(struct tcb *tcb,struct mbuf **bpp); +char *tcp_port(uint16 n); +int tcpval(struct tcb *tcb); + +#endif /* _TCP_H */ diff --git a/src/nos/include/nos/telnet.h b/src/nos/include/nos/telnet.h new file mode 100644 index 00000000..6d4b1401 --- /dev/null +++ b/src/nos/include/nos/telnet.h @@ -0,0 +1,53 @@ +#ifndef _TELNET_H +#define _TELNET_H + +#ifndef _SESSION_H +#include "session.h" +#endif + +#ifndef _SOCKADDR_H +#include "sockaddr.h" +#endif + +#define LINESIZE 256 /* Length of local editing buffer */ + +/* Telnet command characters */ +#define IAC 255 /* Interpret as command */ +#define WILL 251 +#define WONT 252 +#define DO 253 +#define DONT 254 + +/* Telnet options */ +#define TN_TRANSMIT_BINARY 0 +#define TN_ECHO 1 +#define TN_SUPPRESS_GA 3 +#define TN_STATUS 5 +#define TN_TIMING_MARK 6 +#define NOPTIONS 6 + +/* Telnet protocol control block */ +struct telnet { + char local[NOPTIONS]; /* Local option settings */ + char remote[NOPTIONS]; /* Remote option settings */ + struct session *session; /* Pointer to session structure */ + char eolmode; /* Control translation of enter key */ +}; + +extern int Refuse_echo; +extern int Tn_cr_mode; + +/* In telnet.c: */ +int tel_connect(struct session *sp,struct sockaddr *fsocket,int len); +void tel_output(int unused,void *p1,void *p2); +void tnrecv(struct telnet *tn); +void doopt(struct telnet *tn,int opt); +void dontopt(struct telnet *tn,int opt); +void willopt(struct telnet *tn,int opt); +void wontopt(struct telnet *tn,int opt); +void answer(struct telnet *tn,int r1,int r2); + +/* In ttylink.c: */ +void ttylhandle(int s,void *unused,void *p); + +#endif /* _TELNET_H */ diff --git a/src/nos/include/nos/timer.h b/src/nos/include/nos/timer.h new file mode 100644 index 00000000..889b4852 --- /dev/null +++ b/src/nos/include/nos/timer.h @@ -0,0 +1,60 @@ +#ifndef _TIMER_H +#define _TIMER_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +/* Software timers + * There is one of these structures for each simulated timer. + * Whenever the timer is running, it is on a linked list + * pointed to by "Timers". The list is sorted in ascending order of + * expiration, with the first timer to expire at the head. This + * allows the timer process to avoid having to scan the entire list + * on every clock tick; once it finds an unexpired timer, it can + * stop searching. + * + * Stopping a timer or letting it expire causes it to be removed + * from the list. Starting a timer puts it on the list at the right + * place. + */ +struct timer { + struct timer *next; /* Linked-list pointer */ + int32 duration; /* Duration of timer, in ticks */ + int32 expiration; /* Clock time at expiration */ + void (*func)(void *); /* Function to call at expiration */ + void *arg; /* Arg to pass function */ + char state; /* Timer state */ +#define TIMER_STOP 0 +#define TIMER_RUN 1 +#define TIMER_EXPIRE 2 +}; +#define MAX_TIME (int32)4294967295 /* Max long integer */ +#ifndef MSPTICK +#define MSPTICK 55 /* Milliseconds per tick */ +#endif +#ifndef EALARM +#define EALARM 106 +#endif +/* Useful user macros that hide the timer structure internals */ +#define dur_timer(t) ((t)->duration*MSPTICK) +#define run_timer(t) ((t)->state == TIMER_RUN) + +extern int Tick; +extern void (*Cfunc[])(); /* List of clock tick functions */ + +/* In timer.c: */ +void kalarm(int32 ms); +int ppause(int32 ms); +int32 read_timer(struct timer *t); +void set_timer(struct timer *t,int32 x); +void start_timer(struct timer *t); +void stop_timer(struct timer *timer); +char *tformat(int32 t); + +/* In hardware.c: */ +int32 msclock(void); +int32 secclock(void); +int32 usclock(void); + +#endif /* _TIMER_H */ diff --git a/src/nos/include/nos/tipmail.h b/src/nos/include/nos/tipmail.h new file mode 100644 index 00000000..0069f6b6 --- /dev/null +++ b/src/nos/include/nos/tipmail.h @@ -0,0 +1,4 @@ +int tipstart(int argc,char *argv[],void *p); +int tip0(int argc,char *argv[],void *p); +int telnet0(int argc,char *argv[],void *p); +int telnet1(int argc,char *argv[],void *p); diff --git a/src/nos/include/nos/trace.h b/src/nos/include/nos/trace.h new file mode 100644 index 00000000..7cc670d4 --- /dev/null +++ b/src/nos/include/nos/trace.h @@ -0,0 +1,89 @@ +#ifndef _TRACE_H +#define _TRACE_H + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +/* Definitions for packet dumping */ + +/* Table of trace subcommands */ +struct tracecmd { + char *name; /* Name of trace subcommand */ + int val; /* New setting for these bits */ + int mask; /* Mask of bits affected in trace word */ +}; +extern struct tracecmd Tracecmd[]; /* Defined in trace.c */ + +/* List of address testing and tracing functions for each interface. + * Entries are placed in this table by conditional compilation in main.c. + */ +struct trace { + int (*addrtest)(struct iface *iface,struct mbuf *bp); + void (*tracef)(FILE *,struct mbuf **,int); +}; + +extern struct trace Tracef[]; + +/* In trace.c: */ +void dump(struct iface *ifp,int direction,struct mbuf *bp); +void raw_dump(struct iface *ifp,int direction, struct mbuf *bp); +void trace_log(struct iface *ifp,char *fmt, ...); +void shuttrace(void); +int tprintf(struct iface *ifp,char *fmt,...); +void hex_dump(FILE *fp,struct mbuf **bpp); + +/* In arcdump.c: */ +void arc_dump(FILE *fp,struct mbuf **bpp,int check); +int arc_forus(struct iface *iface,struct mbuf *bp); + +/* In arpdump.c: */ +void arp_dump(FILE *fp,struct mbuf **bpp); + +/* In ax25dump.c: */ +void ax25_dump(FILE *fp,struct mbuf **bpp,int check); +int ax_forus(struct iface *iface,struct mbuf *bp); + +/* In enetdump.c: */ +void ether_dump(FILE *fp,struct mbuf **bpp,int check); +int ether_forus(struct iface *iface,struct mbuf *bp); + +/* In icmpdump.c: */ +void icmp_dump(FILE *fp,struct mbuf **bpp,int32 source,int32 dest,int check); + +/* In ipdump.c: */ +void ipip_dump(FILE *fp,struct mbuf **bpp,int32 source,int32 dest,int check); +void ip_dump(FILE *fp,struct mbuf **bpp,int check); + +/* In kissdump.c: */ +void ki_dump(FILE *fp,struct mbuf **bpp,int check); +int ki_forus(struct iface *iface,struct mbuf *bp); + +/* In nrdump.c: */ +void netrom_dump(FILE *fp,struct mbuf **bpp,int check); + +/* In pppdump.c: */ +void ppp_dump(FILE *fp,struct mbuf **bpp,int check); + +/* In ripdump.c: */ +void rip_dump(FILE *fp,struct mbuf **bpp); + +/* In secdump.c: */ +void esp_dump(FILE *fp,struct mbuf **bpp,int32 source,int32 dest,int check); +void ah_dump(FILE *fp,struct mbuf **bpp,int32 source,int32 dest,int check); + +/* In slcompdump.c: */ +void sl_dump(FILE *fp,struct mbuf **bpp,int check); +void vjcomp_dump(FILE *fp,struct mbuf **bpp,int unused); + +/* In tcpdump.c: */ +void tcp_dump(FILE *fp,struct mbuf **bpp,int32 source,int32 dest,int check); + +/* In udpdump.c: */ +void udp_dump(FILE *fp,struct mbuf **bpp,int32 source,int32 dest,int check); + +#endif /* _TRACE_H */ diff --git a/src/nos/include/nos/tty.h b/src/nos/include/nos/tty.h new file mode 100644 index 00000000..3f48be0d --- /dev/null +++ b/src/nos/include/nos/tty.h @@ -0,0 +1,15 @@ +#ifndef _TTY_H +#define _TTY_H + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _SESSION_H +#include "session.h" +#endif + +/* In ttydriv.c: */ +int ttydriv(struct session *sp,uint8 c); + +#endif /* _TTY_H */ diff --git a/src/nos/include/nos/udp.h b/src/nos/include/nos/udp.h new file mode 100644 index 00000000..63aceef6 --- /dev/null +++ b/src/nos/include/nos/udp.h @@ -0,0 +1,91 @@ +#ifndef _UDP_H +#define _UDP_H + +#ifndef _GLOBAL_H +#include "global.h" +#endif + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _IFACE_H +#include "iface.h" +#endif + +#ifndef _INTERNET_H +#include "internet.h" +#endif + +#ifndef _IP_H +#include "ip.h" +#endif + +#ifndef _NETUSER_H +#include "netuser.h" +#endif + +/* SNMP MIB variables, used for statistics and control. See RFC 1066 */ +extern struct mib_entry Udp_mib[]; +#define udpInDatagrams Udp_mib[1].value.integer +#define udpNoPorts Udp_mib[2].value.integer +#define udpInErrors Udp_mib[3].value.integer +#define udpOutDatagrams Udp_mib[4].value.integer +#define NUMUDPMIB 4 + +/* User Datagram Protocol definitions */ + +/* Structure of a UDP protocol header */ +struct udp { + uint16 source; /* Source port */ + uint16 dest; /* Destination port */ + uint16 length; /* Length of header and data */ + uint16 checksum; /* Checksum over pseudo-header, header and data */ +}; +#define UDPHDR 8 /* Length of UDP header */ + +/* User Datagram Protocol control block + * Each entry on the receive queue consists of the + * remote socket structure, followed by any data + */ +struct udp_cb { + struct udp_cb *next; + struct socket socket; /* Local port accepting datagrams */ + void (*r_upcall)(struct iface *iface,struct udp_cb *,int); + /* Function to call when one arrives */ + struct mbuf *rcvq; /* Queue of pending datagrams */ + int rcvcnt; /* Count of pending datagrams */ + int user; /* User link */ +}; +extern struct udp_cb *Udps; /* Hash table for UDP structures */ + +/* UDP primitives */ + +/* In udp.c: */ +int del_udp(struct udp_cb *up); +struct udp_cb *open_udp(struct socket *lsocket, + void (*r_upcall)(struct iface *iface,struct udp_cb *,int)); +int recv_udp(struct udp_cb *up,struct socket *fsocket,struct mbuf **bp); +int send_udp(struct socket *lsocket,struct socket *fsocket,char tos, + char ttl,struct mbuf **data,uint16 length,uint16 id,char df); +void udp_input(struct iface *iface,struct ip *ip,struct mbuf **bp, + int rxbroadcast,int32 said); +void udp_garbage(int drastic); + +#ifdef HOPCHECK +void udp_icmp(int32 icsource, int32 ipsource,int32 ipdest, + char ictype,char iccode,struct mbuf **bpp); +/* In hop.c: */ +void hop_icmp(struct udp_cb *ucb, int32 icsource, int32 ipdest, + uint16 udpdest, char ictype, char iccode); +#endif + +/* In udpcmd.c: */ +int st_udp(struct udp_cb *udp,int n); + +/* In udphdr.c: */ +void htonudp(struct udp *udp,struct mbuf **data,struct pseudo_header *ph); +int ntohudp(struct udp *udp,struct mbuf **bpp); +uint16 udpcksum(struct mbuf *bp); + +#endif /* _UDP_H */ diff --git a/src/nos/include/nos/usock.h b/src/nos/include/nos/usock.h new file mode 100644 index 00000000..b1c2bfca --- /dev/null +++ b/src/nos/include/nos/usock.h @@ -0,0 +1,223 @@ +#ifndef _USOCK_H +#define _USOCK_H + +#ifndef _MBUF_H +#include "mbuf.h" +#endif + +#ifndef _LZW_H +#include "lzw.h" +#endif + +#ifndef _PROC_H +#include "proc.h" +#endif + +#ifndef _TCP_H +#include "tcp.h" +#endif + +#ifndef _UDP_H +#include "udp.h" +#endif + +#ifndef _IP_H +#include "ip.h" +#endif + +#ifndef _NETROM_H +#include "netrom.h" +#endif + +#ifndef _SOCKADDR_H +#include "sockaddr.h" +#endif + +struct loc { + struct usock *peer; + struct mbuf *q; + int hiwat; /* Flow control point */ + int flags; +#define LOC_SHUTDOWN 1 +}; +#define LOCDFLOW 5 /* dgram socket flow-control point, packets */ +#define LOCSFLOW 2048 /* stream socket flow control point, bytes */ +#define SOCKBASE 128 /* Start of socket indexes */ + +union sp { + struct sockaddr *sa; + struct sockaddr_in *in; + struct sockaddr_ax *ax; + struct sockaddr_nr *nr; +}; +struct socklink { + int type; /* Socket type */ + int (*socket)(struct usock *,int); + int (*bind)(struct usock *); + int (*listen)(struct usock *,int); + int (*connect)(struct usock *); + int accept; + int (*recv)(struct usock *,struct mbuf **,struct sockaddr *,int *); + int (*send)(struct usock *,struct mbuf **,struct sockaddr *); + int (*qlen)(struct usock *,int); + int (*kick)(struct usock *); + int (*shut)(struct usock *,int); + int (*close)(struct usock *); + int (*check)(struct sockaddr *,int); + char **error; + char *(*state)(struct usock *); + int (*status)(struct usock *); + char *eol; +}; +extern struct socklink Socklink[]; +union cb { + struct tcb *tcb; + struct ax25_cb *ax25; + struct udp_cb *udp; + struct raw_ip *rip; + struct raw_nr *rnr; + struct nr4cb *nr4; + struct loc *local; + void *p; +}; +/* User sockets */ +struct usock { + unsigned index; + struct proc *owner; + int refcnt; + char noblock; + enum { + NOTUSED, + TYPE_TCP, + TYPE_UDP, + TYPE_AX25I, + TYPE_AX25UI, + TYPE_RAW, + TYPE_NETROML3, + TYPE_NETROML4, + TYPE_LOCAL_STREAM, + TYPE_LOCAL_DGRAM /* Nick , */ + } type; + struct socklink *sp; + int rdysock; + union cb cb; + struct sockaddr *name; + int namelen; + struct sockaddr *peername; + int peernamelen; + uint8 errcodes[4]; /* Protocol-specific error codes */ + uint8 tos; /* Internet type-of-service */ + int flag; /* Mode flags, defined in socket.h */ +}; +extern char *(*Psock[])(struct sockaddr *); +extern char Badsocket[]; +extern char *Socktypes[]; +extern struct usock **Usock; +extern unsigned Nsock; +extern uint16 Lport; + +struct usock *itop(int s); +void st_garbage(int red); + +/* In axsocket.c: */ +int so_ax_sock(struct usock *up,int protocol); +int so_ax_bind(struct usock *up); +int so_ax_listen(struct usock *up,int backlog); +int so_ax_conn(struct usock *up); +int so_ax_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from, + int *fromlen); +int so_ax_send(struct usock *up,struct mbuf **bp,struct sockaddr *to); +int so_ax_qlen(struct usock *up,int rtx); +int so_ax_kick(struct usock *up); +int so_ax_shut(struct usock *up,int how); +int so_ax_close(struct usock *up); +int checkaxaddr(struct sockaddr *name,int namelen); +int so_axui_sock(struct usock *up,int protocol); +int so_axui_bind(struct usock *up); +int so_axui_conn(struct usock *up); +int so_axui_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from, + int *fromlen); +int so_axui_send(struct usock *up,struct mbuf **bp,struct sockaddr *to); +int so_axui_qlen(struct usock *up,int rtx); +int so_axui_shut(struct usock *up,int how); +int so_axui_close(struct usock *up); +char *axpsocket(struct sockaddr *p); +char *axstate(struct usock *up); +int so_ax_stat(struct usock *up); + + +/* In ipsocket.c: */ +int so_ip_sock(struct usock *up,int protocol); +int so_ip_conn(struct usock *up); +int so_ip_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from, + int *fromlen); +int so_ip_send(struct usock *up,struct mbuf **bp,struct sockaddr *to); +int so_ip_qlen(struct usock *up,int rtx); +int so_ip_close(struct usock *up); +int checkipaddr(struct sockaddr *name,int namelen); +char *ippsocket(struct sockaddr *p); + +/* In locsocket.c: */ +int so_los(struct usock *up,int protocol); +int so_lod(struct usock *up,int protocol); +int so_lo_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from, + int *fromlen); +int so_los_send(struct usock *up,struct mbuf **bp,struct sockaddr *to); +int so_lod_send(struct usock *up,struct mbuf **bp,struct sockaddr *to); +int so_lod_qlen(struct usock *up,int rtx); +int so_los_qlen(struct usock *up,int rtx); +int so_loc_shut(struct usock *up,int how); +int so_loc_close(struct usock *up); +char *lopsocket(struct sockaddr *p); +int so_loc_stat(struct usock *up); + +/* In nrsocket.c: */ +int so_n3_sock(struct usock *up,int protocol); +int so_n4_sock(struct usock *up,int protocol); +int so_n4_listen(struct usock *up,int backlog); +int so_n3_conn(struct usock *up); +int so_n4_conn(struct usock *up); +int so_n3_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from, + int *fromlen); +int so_n4_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from, + int *fromlen); +int so_n3_send(struct usock *up,struct mbuf **bp,struct sockaddr *to); +int so_n4_send(struct usock *up,struct mbuf **bp,struct sockaddr *to); +int so_n3_qlen(struct usock *up,int rtx); +int so_n4_qlen(struct usock *up,int rtx); +int so_n4_kick(struct usock *up); +int so_n4_shut(struct usock *up,int how); +int so_n3_close(struct usock *up); +int so_n4_close(struct usock *up); +int checknraddr(struct sockaddr *name,int namelen); +char *nrpsocket(struct sockaddr *p); +char *nrstate(struct usock *up); +int so_n4_stat(struct usock *up); + +/* In tcpsock.c: */ +int so_tcp(struct usock *up,int protocol); +int so_tcp_listen(struct usock *up,int backlog); +int so_tcp_conn(struct usock *up); +int so_tcp_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from, + int *fromlen); +int so_tcp_send(struct usock *up,struct mbuf **bp,struct sockaddr *to); +int so_tcp_qlen(struct usock *up,int rtx); +int so_tcp_kick(struct usock *up); +int so_tcp_shut(struct usock *up,int how); +int so_tcp_close(struct usock *up); +char *tcpstate(struct usock *up); +int so_tcp_stat(struct usock *up); + +/* In udpsocket.c: */ +int so_udp(struct usock *up,int protocol); +int so_udp_bind(struct usock *up); +int so_udp_conn(struct usock *up); +int so_udp_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from, + int *fromlen); +int so_udp_send(struct usock *up,struct mbuf **bp,struct sockaddr *to); +int so_udp_qlen(struct usock *up,int rtx); +int so_udp_shut(struct usock *up,int how); +int so_udp_close(struct usock *up); +int so_udp_stat(struct usock *up); + +#endif /* _USOCK_H */ diff --git a/src/nos/include/nos/z8536.h b/src/nos/include/nos/z8536.h new file mode 100644 index 00000000..c558524b --- /dev/null +++ b/src/nos/include/nos/z8536.h @@ -0,0 +1,32 @@ +#ifndef _8536_H +#define _8536_H + +/* 8536 register definitions */ + +#define CIO_MICR 0x00 /* Master interrupt control register */ +#define CIO_MCCR 0x01 /* Master configuration control register */ +#define CIO_CTMS1 0x1c /* Counter/timer mode specification #1 */ +#define CIO_CTMS2 0x1d /* Counter/timer mode specification #2 */ +#define CIO_CTMS3 0x1e /* Counter/timer mode specification #3 */ +#define CIO_IVR 0x04 /* Interrupt vector register */ + +#define CIO_CSR1 0x0a /* Command and status register CTC #1 */ +#define CIO_CSR2 0x0b /* Command and status register CTC #2 */ +#define CIO_CSR3 0x0c /* Command and status register CTC #3 */ + +#define CIO_CT1MSB 0x16 /* CTC #1 Timer constant - MSB */ +#define CIO_CT1LSB 0x17 /* CTC #1 Timer constant - LSB */ +#define CIO_CT2MSB 0x18 /* CTC #2 Timer constant - MSB */ +#define CIO_CT2LSB 0x19 /* CTC #2 Timer constant - LSB */ +#define CIO_CT3MSB 0x1a /* CTC #3 Timer constant - MSB */ +#define CIO_CT3LSB 0x1b /* CTC #3 Timer constant - LSB */ +#define CIO_PDCA 0x23 /* Port A data direction control */ +#define CIO_PDCB 0x2b /* Port B data direction control */ + +#define CIO_GCB 0x04 /* CTC Gate command bit */ +#define CIO_TCB 0x02 /* CTC Trigger command bit */ +#define CIO_IE 0xc0 /* CTC Interrupt enable (set) */ +#define CIO_CIP 0x20 /* CTC Clear interrupt pending */ +#define CIO_IP 0x20 /* CTC Interrupt pending */ + +#endif /* _8536_H */ diff --git a/src/nos/include/paths.h b/src/nos/include/paths.h new file mode 100644 index 00000000..daa311a2 --- /dev/null +++ b/src/nos/include/paths.h @@ -0,0 +1,32 @@ +#ifndef __PATHS_H +#define __PATHS_H + +#define _PATH_DEV "/dev/" +#define _PATH_DEVNULL "/dev/null" +#define _PATH_CONSOLE "/dev/console" +#define _PATH_TTY "/dev/tty" +#if 1 /* Nick */ +#define _PATH_PRINTER "/dev/printer" +#endif + +#define _PATH_TMP "/tmp/" +#define _PATH_UTMP "/var/run/utmp" + +#define _PATH_INIT "/bin/init" +#define _PATH_LOGIN "/bin/login" +#define _PATH_BSHELL "/bin/sh" +#define _PATH_DEFPATH ".:/bin:/usr/bin:/etc:/usr/local/bin" + +#if 1 /* Nick */ +#define _PATH_LIBERR "/lib/liberror.txt" +#else +#define _PATH_LIBERR "/usr/lib/liberror.txt" +#endif + +#define _PATH_TERMCAP "/etc/termcap" +#define _PATH_PASSWD "/etc/passwd" +#define _PATH_GROUP "/etc/group" + +#define _PATH_HOME "/home" + +#endif /* __PATHS_H */ diff --git a/src/nos/include/po/messages.h b/src/nos/include/po/messages.h new file mode 100644 index 00000000..f572171d --- /dev/null +++ b/src/nos/include/po/messages.h @@ -0,0 +1,1524 @@ +/* ../include/po/messages.h generated by c2po, do not edit! */ + +#ifndef __MESSAGES_H +#define __MESSAGES_H + +void __0000_ffff_(void); +void __0001_508a__08_20_08(void); +void __0002_17d6__09_09_20MRU_09_20A(void); +void __0003_002f__09_09_256u_20Lcp_2(void); +void __0004_14b3__09_09_256u_20Lcp_2(void); +void __0005_7313__09_09pid_20_25d_2c(void); +void __0006_bdbf__09_2510ld_20Cmp_2c(void); +void __0007_d27a__09_2510ld_20Cmp_2c(void); +void __0008_c900__09_2510ld_20Search(void); +void __0009_2913__09_25ld(void); +void __000a_1c3a__09_25p_09_25u_09_2(void); +void __000b_b9ba__09_25s(void); +void __000c_21cf__09_25s_09_25s_09_2(void); +void __000d_1d7d__09_25s_09_25s_0a(void); +void __000e_b532__09_25s_0a(void); +void __000f_26e5__09_25u_09_25s_0a(void); +void __0010_7e01__09_28open_20for_20(void); +void __0011_d62d__09_3c_25u_3e(void); +void __0012_9f29__09IN(void); +void __0013_53f6__09Local_3a_09(void); +void __0014_a684__09Remote_3a_09(void); +void __0015_e0e0__09Urgent_20pointer(void); +void __0016_c0f0__09changes_3a_200x_(void); +void __0017_6a8d__09connection_200x_(void); +void __0018_a28a__09connection_20ID_(void); +void __0019_cf72__09delta_20ACK_20an(void); +void __001a_8077__09delta_20ACK_3a_2(void); +void __001b_4a2b__09delta_20ID_3a_20(void); +void __001c_7710__09delta_20SEQ_20im(void); +void __001d_a966__09delta_20SEQ_3a_2(void); +void __001e_f05a__09delta_20WINDOW_3(void); +void __001f_ad18__09increment_20ID_0(void); +void __0020_13bc__09local_20IP_20add(void); +void __0021_efeb__09pid_20_25d_2c_20(void); +void __0022_a0dd__0a(void); +void __0023_f279__0a_20_20_20_20(void); +void __0024_f170__0a_20_20_20_20_20_(void); +void __0025_da94__0a_25s_20_2d_20_25(void); +void __0026_e088__0a_25s_20_2d_20_25(void); +void __0027_c061__0a_2a_2a_2a_20Loca(void); +void __0028_932c__0a_2a_2a_2a_20Unab(void); +void __0029_2592__0a_2a_2a_2a_2a_2a_(void); +void __002a_0887__0aCurrent_20remote(void); +void __002b_ebd8__0aReclaimation_20a(void); +void __002c_c546__0aUsed_20address_2(void); +void __002d_e8fc__0apanic_3a_20(void); +void __002e_4403__20_0aend_0asize_20(void); +void __002f_f289__20_20(void); +void __0030_3839__20_20_20(void); +void __0031_8d78__20_20_20_20(void); +void __0032_de40__20_20_20_20_20(void); +void __0033_3e02__20_20_20_20_20_20_(void); +void __0034_0534__20_20_20_20_20_20_(void); +void __0035_3fef__20_20_20_20_20_20_(void); +void __0036_3164__20_20_20_20_20_20_(void); +void __0037_c6d7__20_20_20_20_20_20_(void); +void __0038_9d57__20_20_20_20_20_20_(void); +void __0039_d46e__20_20_20_20_20_20_(void); +void __003a_f37c__20_20_20_20_20_20_(void); +void __003b_5dd1__20_20_20_20_20_20_(void); +void __003c_0406__20_20_20_20_20_20_(void); +void __003d_da67__20_20_20_20_20_20_(void); +void __003e_f638__20_20_20_20_20_20_(void); +void __003f_74c7__20_20_20_20_20_20_(void); +void __0040_f10d__20_20_20_20_20_20_(void); +void __0041_d02b__20_20_20_20_20_20_(void); +void __0042_0105__20_20_20_20_20_20_(void); +void __0043_c46d__20_20_20_20_20_20_(void); +void __0044_3a28__20_20_20_20_20_20_(void); +void __0045_48df__20_20_20_20_20_20_(void); +void __0046_da1e__20_20_20_20_20_20s(void); +void __0047_3800__20_20_20_20_20_26A(void); +void __0048_0e60__20_20_20_20_20_28_(void); +void __0049_d7d4__20_20_20_20_20Broa(void); +void __004a_f5a8__20_20_20_20_20Defa(void); +void __004b_de7b__20_20_20_20_20Host(void); +void __004c_a271__20_20_20_20_20INF(void); +void __004d_1775__20_20_20_20_20IP_2(void); +void __004e_7765__20_20_20_20_20Name(void); +void __004f_6879__20_20_20_20_20Subn(void); +void __0050_dac6__20_20_20_20_25_2d4(void); +void __0051_b576__20_20_20_20_2512s(void); +void __0052_e5e6__20_20_20_20_253u_0(void); +void __0053_ed50__20_20_20_20_25s_20(void); +void __0054_3528__20_20_20_20_25s_20(void); +void __0055_cbdf__20_20_20_20_25s_20(void); +void __0056_f7f3__20_20_20_20_26UCB_(void); +void __0057_9bd9__20_20_20_20In_09TC(void); +void __0058_7788__20_20_20_20Out_09T(void); +void __0059_8f4d__20_20_20_20Record_(void); +void __005a_eacd__20_20_20_20Upload_(void); +void __005b_2da2__20_20_20_25s_0a(void); +void __005c_ad66__20_20_20PUSH(void); +void __005d_9f3a__20_20_20TCP_20chec(void); +void __005e_5946__20_20_20connection(void); +void __005f_f01f__20_20_3d_3d_3d_3d_(void); +void __0060_cfff__20_20_3d_3d_3d_3d_(void); +void __0061_8181__20_20SR_20_5bnumbe(void); +void __0062_1149__20_20S_5bF_5d_20na(void); +void __0063_47af__20_20remote_20IP_2(void); +void __0064_ccb1__20_20seq_20x_25lx_(void); +void __0065_c997__20_21_3f(void); +void __0066_536e__20_21A(void); +void __0067_27d1__20_21F(void); +void __0068_ceaf__20_21H(void); +void __0069_ab99__20_21N(void); +void __006a_5266__20_21P(void); +void __006b_60fd__20_21S(void); +void __006c_bac3__20_23_20_20S_23_20(void); +void __006d_9a7d__20_25_2d15s(void); +void __006e_85f4__20_25_2d3d_20(void); +void __006f_a413__20_2502u_2f_2502u(void); +void __0070_d8f4__20_2502u_2f_2502u_(void); +void __0071_4d6e__20_2502x(void); +void __0072_cad1__20_2510lu_2510lu_2(void); +void __0073_43b6__20_254d_20_254d(void); +void __0074_78a4__20_258s_20_20_20_2(void); +void __0075_6904__20_25lu_20bps_0a(void); +void __0076_269f__20_25s(void); +void __0077_c302__20_25s_0a(void); +void __0078_10eb__20_25s_20_25s_20_2(void); +void __0079_c236__20_25s_25s(void); +void __007a_3c84__20_25s_2b_25x(void); +void __007b_97d2__20_25u_0a(void); +void __007c_5984__20_25u_2d_3e_25u(void); +void __007d_98a5__20_28_25ld_20ms_29(void); +void __007e_9556__20_28_25s_20seek_3(void); +void __007f_6268__20_28_25s_29_0a(void); +void __0080_3f71__20_28ASCII_20dump_(void); +void __0081_05b3__20_28Hex_2fASCII_2(void); +void __0082_0cd7__20_28S_29(void); +void __0083_ef5f__20_28headers_20onl(void); +void __0084_c04d__20_28published_29(void); +void __0085_ac28__20_2a_2a_2a(void); +void __0086_8841__20_2d_20(void); +void __0087_ace7__20_2d_20no_20broad(void); +void __0088_01a0__20APND(void); +void __0089_2da0__20Ack_20x_25lx(void); +void __008a_f35d__20BUSY(void); +void __008b_43af__20CE(void); +void __008c_d667__20CHECKSUM_20ERROR(void); +void __008d_5947__20CHOKE(void); +void __008e_3c3c__20DF(void); +void __008f_26b0__20Data_20_25u(void); +void __0090_5125__20EOF(void); +void __0091_2269__20ERR(void); +void __0092_869e__20IPaddr_20_25s(void); +void __0093_d267__20Illegal_20I_2dfi(void); +void __0094_d316__20Invalid_20contro(void); +void __0095_1e4f__20Invalid_20seq_20(void); +void __0096_fd02__20MC_3a_20int_20_2(void); +void __0097_eb24__20MF(void); +void __0098_747e__20MORE(void); +void __0099_c5ed__20MSS_20_25u(void); +void __009a_3976__20NAK(void); +void __009b_c092__20NR_3d_25d(void); +void __009c_dc29__20NS_3d_25d(void); +void __009d_df24__20RX_3a_20int_20_2(void); +void __009e_78a4__20Raw_20output(void); +void __009f_a393__20Remote_3a_20_25s(void); +void __00a0_d7c2__20Retry(void); +void __00a1_d322__20State_3a_20_25s_(void); +void __00a2_c86b__20TMP(void); +void __00a3_2dcc__20TSTAMP_20_25lu_2(void); +void __00a4_e8c1__20TX_3a_20int_20_2(void); +void __00a5_d70d__20Too_2dlong_20I_2(void); +void __00a6_5a85__20UP_20x_25x(void); +void __00a7_2210__20Unack_3a_20_25_2(void); +void __00a8_3a68__20Unknown_20passwo(void); +void __00a9_23f3__20Vr_20_3d_20_25d_(void); +void __00aa_a984__20WSCALE_20_25u(void); +void __00ab_1d25__20Wnd_20_25u(void); +void __00ac_e77d__20_5b_25s_5d_20_25(void); +void __00ad_7762__20_5bcts_20flow_20(void); +void __00ae_2f4d__20_5brlsd_20line_2(void); +void __00af_db59__20_5btrigger_200x_(void); +void __00b0_bc24__20asy_20(void); +void __00b1_c96a__20bad_20header_21_(void); +void __00b2_0acc__20bad_20packet_0a(void); +void __00b3_d795__20cmd_20_25u(void); +void __00b4_1813__20code_20_25s(void); +void __00b5_ad83__20dest_20_25s(void); +void __00b6_e3a3__20dest_20_25s_20_2(void); +void __00b7_4976__20diag(void); +void __00b8_e36a__20file(void); +void __00b9_5e9d__20full(void); +void __00ba_4c62__20hwaddr_20_25s_0a(void); +void __00bb_ed56__20hwlen_20_25u(void); +void __00bc_2971__20hwtype_20_25s(void); +void __00bd_3119__20id_20_25u_20offs(void); +void __00be_8f2f__20id_20_25u_20pctl(void); +void __00bf_20f7__20id_20_25u_20seq_(void); +void __00c0_8c07__20idle_20timer_20_(void); +void __00c1_7166__20input(void); +void __00c2_6c92__20len_20_25u(void); +void __00c3_0c74__20line(void); +void __00c4_2537__20new_20gateway_20(void); +void __00c5_ea43__20new_20gateway_20(void); +void __00c6_e3db__20none(void); +void __00c7_826b__20offset_20_25u_20(void); +void __00c8_6680__20op_20_25u(void); +void __00c9_f7d5__20op_20REPLY(void); +void __00ca_5e3d__20op_20REQUEST(void); +void __00cb_9500__20op_20REVERSE_20R(void); +void __00cc_3faa__20op_20REVERSE_20R(void); +void __00cd_8a3d__20output(void); +void __00ce_5896__20pid_3d0x_25x_0a(void); +void __00cf_aba6__20pid_3dARP_0a(void); +void __00d0_d4e9__20pid_3dIP_0a(void); +void __00d1_a349__20pid_3dNET_2fROM_(void); +void __00d2_932f__20pid_3dTEXNET_0a(void); +void __00d3_4927__20pid_3dText_0a(void); +void __00d4_c207__20pid_3dX_2e25_0a(void); +void __00d5_5760__20pipe(void); +void __00d6_ac0a__20pointer_20_25u(void); +void __00d7_5557__20prot_20_25s_0a(void); +void __00d8_0187__20prot_20_25u_0a(void); +void __00d9_75a2__20prot_200x_25x_20(void); +void __00da_3541__20prot_20IP(void); +void __00db_1888__20receive_20_20_2d(void); +void __00dc_f2f3__20sock(void); +void __00dd_c067__20spi_20_25lx(void); +void __00de_2902__20sw_20over_20_25l(void); +void __00df_0bfc__20tos_20_25u(void); +void __00e0_e1c5__20trace_20file_3a_(void); +void __00e1_ca97__20tracing_20off_0a(void); +void __00e2_be19__20transmit_20_2d_2(void); +void __00e3_afd2__20ttl_20_25d_0a(void); +void __00e4_6f53__20txseq_20_25d_20r(void); +void __00e5_c8f3__20type_200x_25x_0a(void); +void __00e6_6772__20type_20ARP_0a(void); +void __00e7_5c83__20type_20IP_0a(void); +void __00e8_f937__20type_20REVARP_0a(void); +void __00e9_c53a__20v(void); +void __00ea_9158__20vers_20_25u_20en(void); +void __00eb_994d__20wnd_20_25d(void); +void __00ec_426e__20_7c_20(void); +void __00ed_3f0c__21(void); +void __00ee_f9eb__21_21_20_25s_20_25(void); +void __00ef_ef2d__21_21_20maximum_20(void); +void __00f0_55d7__22_25s_22_20_2d_20(void); +void __00f1_60ae__23_20queries_20eac(void); +void __00f2_1acc__23_20secs_20to_20w(void); +void __00f3_fb95__25_2d10_2e10s_20_2(void); +void __00f4_3035__25_2d10s_20IP_20ad(void); +void __00f5_01be__25_2d10s_25_2d17s(void); +void __00f6_4da0__25_2d10s_25_2d17s_(void); +void __00f7_ff4a__25_2d10s_25_2d6s(void); +void __00f8_e1c2__25_2d11s_25_2d9s_2(void); +void __00f9_7335__25_2d13s(void); +void __00fa_27e5__25_2d15s(void); +void __00fb_0d8d__25_2d16s(void); +void __00fc_e560__25_2d16s_20_20(void); +void __00fd_f903__25_2d16s_25_2d3u_2(void); +void __00fe_2609__25_2d16s_25_2d9lu_(void); +void __00ff_1455__25_2d17s(void); +void __0100_e920__25_2d20s_258lu_258(void); +void __0101_8589__25_2d22s(void); +void __0102_b616__25_2d22s_0a(void); +void __0103_9c51__25_2d23s(void); +void __0104_bf59__25_2d2u(void); +void __0105_6601__25_2d32s_20_28_25l(void); +void __0106_a681__25_2d3u(void); +void __0107_ea81__25_2d4d(void); +void __0108_6f94__25_2d4d_255d_20_25(void); +void __0109_eb89__25_2d4u(void); +void __010a_2455__25_2d5ld(void); +void __010b_90e5__25_2d7lu(void); +void __010c_8982__25_2d7s_20_25_2d8s(void); +void __010d_da22__25_2d8lu(void); +void __010e_d1e2__25_2ds(void); +void __010f_1e56__2502x(void); +void __0110_3773__2504x_20_20(void); +void __0111_6df9__2504x_20_20_2504x_(void); +void __0112_aa0a__2504x_3a_2504x(void); +void __0113_83ad__2510lu_20In_2c_20_(void); +void __0114_cbd3__2510lu_20Out_2c_20(void); +void __0115_2875__2510lu_2510lu_255l(void); +void __0116_a689__251s_20_253d_20_20(void); +void __0117_e9b8__252d_20_25_2d6s_20(void); +void __0118_b620__252d_20_25_2d6s_20(void); +void __0119_1703__253d_3a(void); +void __011a_b932__254d_20_25_2d8s_25(void); +void __011b_936b__254s(void); +void __011c_4a96__258lu(void); +void __011d_5eaf__258lu_0a(void); +void __011e_3acb__258s(void); +void __011f_3341__258u_2510u_2511lu_(void); +void __0120_fd73__259p_20_20_20_253d(void); +void __0121_b8a6__259p_20_25_2d8d_25(void); +void __0122_1719__259p_20_25_2d9s_25(void); +void __0123_1260__259p_256u_20_20_25(void); +void __0124_482b__259p_256u_256u_20_(void); +void __0125_fcae__25c(void); +void __0126_6d8a__25c_20(void); +void __0127_3d14__25c_20_257s_20_257(void); +void __0128_22d3__25c_25c_25c(void); +void __0129_4b6e__25c_25c_25c_0a(void); +void __012a_2970__25c_25c_25c_253d_2(void); +void __012b_8514__25c_25s_0a(void); +void __012c_086d__25c_5b2J(void); +void __012d_8811__25d(void); +void __012e_aeda__25d_0a(void); +void __012f_cd50__25d_20message_25s_(void); +void __0130_ea62__25ld(void); +void __0131_eb6a__25lu(void); +void __0132_63ed__25lu_0a(void); +void __0133_f325__25lu_2f_25lu_0a(void); +void __0134_d273__25p_20(void); +void __0135_1c93__25p_20_256lu(void); +void __0136_ec2f__25s(void); +void __0137_7643__25s_0a(void); +void __0138_0276__25s_0a_25s_0a(void); +void __0139_f81b__25s_20(void); +void __013a_8b7d__25s_20_2502d_2502d(void); +void __013b_7be3__25s_20_25p_0a(void); +void __013c_518b__25s_20_25s_0a(void); +void __013d_ca49__25s_20_25s_3a_20_2(void); +void __013e_43c6__25s_20_25s_3a_20Er(void); +void __013f_b8b7__25s_20_2d_20(void); +void __0140_1170__25s_20_2d_20Differ(void); +void __0141_d4cc__25s_20_2d_20Remote(void); +void __0142_4968__25s_20_2d_20Same_0(void); +void __0143_ace2__25s_20dialer_3a_20(void); +void __0144_933b__25s_20errno_20_25d(void); +void __0145_f768__25s_20file_25s_2e_(void); +void __0146_c691__25s_20is_20unreach(void); +void __0147_a4a4__25s_20logged_20in(void); +void __0148_a64e__25s_20logged_20in_(void); +void __0149_b314__25s_20refs_20to_20(void); +void __014a_bd91__25s_20remain_20_25(void); +void __014b_bf9e__25s_20thru_20(void); +void __014c_243b__25s_20type_20_25s_(void); +void __014d_7d69__25s_25_25_25s_2ebb(void); +void __014e_d324__25s_25c_0a(void); +void __014f_ce9c__25s_25c_25c_25c(void); +void __0150_910e__25s_25s(void); +void __0151_46b5__25s_25s_0a(void); +void __0152_4d3a__25s_25s_0a_0a(void); +void __0153_47c0__25s_3a(void); +void __0154_6911__25s_3a_0a(void); +void __0155_e749__25s_3a_20(void); +void __0156_650d__25s_3a_20_25d_20me(void); +void __0157_86f5__25s_3a_20_25ld_0a(void); +void __0158_7189__25s_3a_20_25s_0a(void); +void __0159_35bd__25s_3a_20_25s_2c(void); +void __015a_adab__25s_3a_20Interface(void); +void __015b_5f8a__25s_3a_20PPP_2fPAP(void); +void __015c_0cde__25s_3a_20bad_20dev(void); +void __015d_5351__25s_3a_20bad_20ino(void); +void __015e_8c96__25s_3a_20corrupted(void); +void __015f_d157__25s_3a_20fs_20of_2(void); +void __0160_1d98__25s_3a_20local_20n(void); +void __0161_bba5__25s_3a_20mode_20_2(void); +void __0162_60cc__25s_3a_20not_20a_2(void); +void __0163_4ed5__25s_3a_20release_5(void); +void __0164_04ae__25s_3a_20rtt_20_25(void); +void __0165_db35__25s_3a_20srtt_20_2(void); +void __0166_65f3__25s_3c_25ld_40_25s(void); +void __0167_6e45__25s_3e_20_25s_20_2(void); +void __0168_205d__25s_3e_20Invalid_2(void); +void __0169_c86f__25s_40_25s_0a(void); +void __016a_82c1__25s_40_25s_3a_0a(void); +void __016b_9fa6__25sMAILER_2dDAEMON(void); +void __016c_c284__25sR_0a(void); +void __016d_2293__25u_0a(void); +void __016e_c0bd__25u_20additional_3(void); +void __016f_7db0__25u_20answers_3a_0(void); +void __0170_7c48__25u_20authority_3a(void); +void __0171_b843__25u_20questions_3a(void); +void __0172_af86__25u_3a_20calls_20_(void); +void __0173_52fc__25x(void); +void __0174_b099__26AXB_20_20_20_20_(void); +void __0175_7bf6__26CB_20_20_20_20_2(void); +void __0176_c497__26TCB_20_20_20_20_(void); +void __0177_f73b__26UCB_20_20_20_20_(void); +void __0178_aa89__27_25c_27_0a(void); +void __0179_a2cd__28(void); +void __017a_ba4c__28_252u_29_25_2d20(void); +void __017b_52bf__28F_29(void); +void __017c_93fe__28P_29(void); +void __017d_38a6__28P_2fF_29(void); +void __017e_7b70__28compressed_20ALL(void); +void __017f_c1c3__28hopcheck_29_20IC(void); +void __0180_565f__28missing_20UI_21_(void); +void __0181_f935__28not_20odd_21_29_(void); +void __0182_abc9__29_0a(void); +void __0183_bfa2__2a_2a_20smtp_3a_20(void); +void __0184_1969__2a_2a_2a(void); +void __0185_a448__2a_2a_2a_20Done_0a(void); +void __0186_c993__2a_2a_2a_20Unable_(void); +void __0187_b489__2a_2a_2a_2a_2a_2a_(void); +void __0188_5b29__2c_20(void); +void __0189_1a71__2c_20err_20_25d(void); +void __018a_099c__2d_2d_2d_2d_2d_20E(void); +void __018b_01ea__2d_2d_2d_2d_2d_20F(void); +void __018c_04ae__2d_2d_2d_2d_2d_2d_(void); +void __018d_1b54__2d_2d_2d_2d_2d_2d_(void); +void __018e_3d1a__2d_2d_2d_2d_2d_2d_(void); +void __018f_8ddf__2d_3e_25s(void); +void __0190_589d__2d_3e_25s_20ihl_20(void); +void __0191_e6c1__2e_0a(void); +void __0192_ed84__2f_25lu_20ms(void); +void __0193_6d9b__2f_25lu_20ms_0a(void); +void __0194_a44f__2f_25lu_20ms_3b_20(void); +void __0195_096e__2f_25u(void); +void __0196_96dc__2fEX(void); +void __0197_79e7_0_25o(void); +void __0198_8157_007Incoming_20_25s_(void); +void __0199_b04e_0x_2503x_20_20_20_2(void); +void __019a_3f3a_0x_2504x_0a(void); +void __019b_8308_0x_2508lx_0a(void); +void __019c_ab8d_0x_25x(void); +void __019d_6f63_0x_25x_09_09_25ld_0(void); +void __019e_fea8_0x_25x_09_09_25ld_0(void); +void __019f_f01c_0x_25x_0a(void); +void __01a0_d635_100_20Warning_3a_20(void); +void __01a1_3f47_150_20Opening_20dat(void); +void __01a2_67ab_200_20(void); +void __01a3_cc8d_200_20MKD_20ok_0a(void); +void __01a4_6c3a_200_20Ok_0a(void); +void __01a5_ba32_200_20Port_20comman(void); +void __01a6_1db7_200_20Type_20_25s_2(void); +void __01a7_1192_215_20_25s_20Type_3(void); +void __01a8_01fe_220_20_25s_20FTP_20(void); +void __01a9_7804_221_20Goodbye_21_0a(void); +void __01aa_3f54_226_20File_20receiv(void); +void __01ab_caea_226_20File_20sent_2(void); +void __01ac_9fe8_230_20Logged_20in_0(void); +void __01ad_55db_250_20_25s_0a(void); +void __01ae_c720_250_20File_20delete(void); +void __01af_de54_250_2d_25s_0a(void); +void __01b0_9400_257_20_22_25s_22_20(void); +void __01b1_24f1_331_20Enter_20PASS_(void); +void __01b2_273f_421_20System_20over(void); +void __01b3_e43d_425_20Data_20connec(void); +void __01b4_7e66_500_20Unknown_20com(void); +void __01b5_3d39_500_20Unsupported_2(void); +void __01b6_fe7e_501_20Bad_20port_20(void); +void __01b7_065e_501_20Only_20logica(void); +void __01b8_a2bf_501_20Unknown_20typ(void); +void __01b9_41cf_502_20Command_20not(void); +void __01ba_f576_503_20Login_20with_(void); +void __01bb_7dc2_530_20Please_20log_(void); +void __01bc_c53a_550_20Can_27t_20rea(void); +void __01bd_4770_550_20Delete_20fail(void); +void __01be_38c3_550_20Permission_20(void); +void __01bf_95c1_552_20Write_20error(void); +void __01c0_7eaf_553_20Can_27t_20cre(void); +void __01c1_f0b2_553_20Can_27t_20rea(void); +void __01c2_b04b__3a_20_25d_0a(void); +void __01c3_6aba__3a_20_25ld_0a(void); +void __01c4_8cd1__3a_20_25s(void); +void __01c5_68d2__3a_20_25s_0a(void); +void __01c6_3c02__3a_20_25u_0a(void); +void __01c7_6692__3b_20Tries_3a_20_2(void); +void __01c8_697b__3c_25ld_40_25s_3e_(void); +void __01c9_2587__3c_25s_40_25s_2ebb(void); +void __01ca_3152__3c_3d_3d_25s(void); +void __01cb_defc__3c_3d_3d_25s_0a(void); +void __01cc_016b__3d_3d_3eARTICLE_20(void); +void __01cd_c133__3d_3d_3eNEWNEWS_20(void); +void __01ce_696c__3d_3d_3eQUIT_0a(void); +void __01cf_396e__3d_3dNo_20response(void); +void __01d0_c6f3__3f(void); +void __01d1_4d83__40(void); +void __01d2_23d2__40_25s(void); +void __01d3_7f61_ARP_3a_20len_20_25d(void); +void __01d4_124c_ARTICLE_20_25s(void); +void __01d5_109d_AX25_20receive_20wi(void); +void __01d6_f4e0_AX25_20version(void); +void __01d7_818f_AX25_3a_20(void); +void __01d8_f05c_Abort_0d_0a(void); +void __01d9_6caf_Aborted_2e(void); +void __01da_f2cb_Aborted_2e_0a(void); +void __01db_537a_Accept_0a(void); +void __01dc_b988_Ack_20delay_20time_(void); +void __01dd_fccc_Active_20RIP_20outp(void); +void __01de_e216_Address_2fControl_2(void); +void __01df_1fbc_All_20groups_20are_(void); +void __01e0_4a0c_Allow_20ACCM(void); +void __01e1_8e02_Allow_20Address(void); +void __01e2_7b21_Allow_20Address_2fC(void); +void __01e3_5003_Allow_20Authenticat(void); +void __01e4_081e_Allow_20Compression(void); +void __01e5_14d8_Allow_20MRU(void); +void __01e6_5c94_Allow_20Magic_20Num(void); +void __01e7_33ea_Allow_20Protocol_20(void); +void __01e8_a5f9_Already_20have_20_2(void); +void __01e9_8eaf_Arcnet_3a_20len_20_(void); +void __01ea_52c7_Argument_20missing_(void); +void __01eb_3ed8_Ascii_0a(void); +void __01ec_7cb2_Attach_20device_20f(void); +void __01ed_ec38_Attach_20netrom_20i(void); +void __01ee_ee22_Attended_20flag(void); +void __01ef_0443_Available_20areas_2(void); +void __01f0_6999_Backoff_20Level_20_(void); +void __01f1_9716_Bad_20digipeater_20(void); +void __01f2_0b9f_Bad_20syntax_2e_0a(void); +void __01f3_e884_Bad_20target_20_25s(void); +void __01f4_822a_Bad_20user_20or_20h(void); +void __01f5_61f7_Base_20Addr_09Rxint(void); +void __01f6_929a_Base_20Addr_20_20Rx(void); +void __01f7_de82_Buf_20hits_2fmiss_2(void); +void __01f8_ae0c_CTRL_2d_25c_0a(void); +void __01f9_6c46_CWD_20_25s_0a(void); +void __01fa_0e64_Calls_20originated_(void); +void __01fb_9777_Calls_20timed_20out(void); +void __01fc_e911_Can_27t_20NLST_20_2(void); +void __01fd_daf3_Can_27t_20add_20rou(void); +void __01fe_6db7_Can_27t_20attach_20(void); +void __01ff_79e8_Can_27t_20change_20(void); +void __0200_3bb8_Can_27t_20create_20(void); +void __0201_0003_Can_27t_20create_20(void); +void __0202_ef8c_Can_27t_20create_20(void); +void __0203_28e0_Can_27t_20create_20(void); +void __0204_d5bc_Can_27t_20create_20(void); +void __0205_c7fb_Can_27t_20delete_20(void); +void __0206_d5d6_Can_27t_20detach_20(void); +void __0207_5d65_Can_27t_20find_20he(void); +void __0208_3eee_Can_27t_20list_20lo(void); +void __0209_c1c1_Can_27t_20open_20_2(void); +void __020a_fedd_Can_27t_20open_20_2(void); +void __020b_fb2a_Can_27t_20open_20_2(void); +void __020c_d8a5_Can_27t_20open_20in(void); +void __020d_0616_Can_27t_20read_20_2(void); +void __020e_4a10_Can_27t_20read_20_2(void); +void __020f_8468_Can_27t_20read_20co(void); +void __0210_4327_Can_27t_20read_20di(void); +void __0211_5fb2_Can_27t_20read_20lo(void); +void __0212_36d4_Can_27t_20read_20pa(void); +void __0213_5e43_Can_27t_20rename_20(void); +void __0214_4bfe_Can_27t_20rewrite_2(void); +void __0215_24ca_Can_27t_20set_20lin(void); +void __0216_5e82_Can_27t_20write_20_(void); +void __0217_988b_Can_27t_20write_20l(void); +void __0218_c0f9_Can_27t_20write_20t(void); +void __0219_5055_Ch_20Iface_20_20_20(void); +void __021a_eff3_Channel_20_2d_20_25(void); +void __021b_1b09_Choke_20timeout_20_(void); +void __021c_f95c_Closed_3a_20_25s_0a(void); +void __021d_e508_Command_20batching(void); +void __021e_b471_Connect_20failed_0a(void); +void __021f_bb2f_Connect_20failed_3a(void); +void __0220_85e9_Connect_20to_20mail(void); +void __0221_6930_Connected_0a(void); +void __0222_5189_Connected_20to_20_2(void); +void __0223_771a_Connected_20to_20ma(void); +void __0224_0e16_Connected_2e(void); +void __0225_3e79_Connection_20closed(void); +void __0226_faa9_Connection_20failed(void); +void __0227_3676_Could_20not_20creat(void); +void __0228_d95b_Couldn_27t_20queue_(void); +void __0229_68a6_Current_20message_2(void); +void __022a_23ad_Currently_20enabled(void); +void __022b_1cf7_DELE_20_25s(void); +void __022c_5fad_DISASTER_21_20Out_2(void); +void __022d_7ce2_DRSI_20Board_20Stat(void); +void __022e_2f52_D_5bU_5d_20filename(void); +void __022f_698b_Data_0a(void); +void __0230_cb1c_Data_20outside_20he(void); +void __0231_01be_Data_20pointer_20_2(void); +void __0232_3cbb_Data_20pointer_20be(void); +void __0233_bd70_Defaulting_20to_20b(void); +void __0234_2d19_Del_5fconst_20_3d_2(void); +void __0235_6255_Dest_20Addr_20_20_2(void); +void __0236_3894_Dialing_20not_20sup(void); +void __0237_26a3_Different_0a(void); +void __0238_ae33_Digipeat(void); +void __0239_af35_Directory_20table_2(void); +void __023a_c1bb_Disconnected_20(void); +void __023b_2cc5_Disconnecting_2e(void); +void __023c_b7f4_Dup_20acks_20_20_20(void); +void __023d_3ed4_Duplex_3a_20_25s_0a(void); +void __023e_b671_E2BIG(void); +void __023f_56e8_EACCES(void); +void __0240_f378_EAGAIN(void); +void __0241_0483_EAGLE_20Board_20Sta(void); +void __0242_a2a1_EBADF(void); +void __0243_74ba_EBUSY(void); +void __0244_4029_ECHILD(void); +void __0245_cd2b_EDEADLK(void); +void __0246_4299_EDOM(void); +void __0247_bec8_EEXIST(void); +void __0248_afa9_EFAULT(void); +void __0249_9ed8_EFBIG(void); +void __024a_28f7_EGATTACH_3a_20No_20(void); +void __024b_eb47_EINTR(void); +void __024c_b479_EINVAL(void); +void __024d_21d8_EINVFNC(void); +void __024e_2d75_EIO(void); +void __024f_fb45_EISDIR(void); +void __0250_8de7_ELOOP(void); +void __0251_9e5a_EMFILE(void); +void __0252_983a_EMLINK(void); +void __0253_0607_ENAMETOOLONG(void); +void __0254_8396_ENFILE(void); +void __0255_7088_ENODEV(void); +void __0256_edee_ENOENT(void); +void __0257_a107_ENOEXEC(void); +void __0258_29fe_ENOLCK(void); +void __0259_42c4_ENOMEM(void); +void __025a_d51d_ENOSPC(void); +void __025b_d3a2_ENOTBLK(void); +void __025c_f683_ENOTDIR(void); +void __025d_83de_ENOTEMPTY(void); +void __025e_81a3_ENOTTY(void); +void __025f_01a7_ENXIO(void); +void __0260_4485_EPERM(void); +void __0261_5ede_EPIPE(void); +void __0262_7f6a_ERANGE(void); +void __0263_0587_EROFS(void); +void __0264_6b3a_ESCC_20channel_20_2(void); +void __0265_6d38_ESCC_20channel_20_2(void); +void __0266_0a8a_ESCC_20driver_20alr(void); +void __0267_d89e_ESCC_20driver_20not(void); +void __0268_dd82_ESHELL(void); +void __0269_ffa8_ESPIPE(void); +void __026a_b33c_ESRCH(void); +void __026b_194a_ETXTBSY(void); +void __026c_8d4a_EXDEV(void); +void __026d_4f54_Encapsulation_20mod(void); +void __026e_0f4a_Enqued_20_20_2d_20_(void); +void __026f_de30_Enter_20message_2e_(void); +void __0270_3a50_Error_20in_20respon(void); +void __0271_d568_Error_20updating_20(void); +void __0272_69fc_Error_20writing_20m(void); +void __0273_9664_Escape_20character_(void); +void __0274_8c2d_Ether_3a_20len_20_2(void); +void __0275_3af3_F_3e(void); +void __0276_0046_Failed_0a(void); +void __0277_4a7b_First_20init_20ESCC(void); +void __0278_0954_Forwarding_20timer_(void); +void __0279_95bb_Free_20address_20qu(void); +void __027a_fee7_Free_20cache_3a_20s(void); +void __027b_8dc1_Free_20memory_20thr(void); +void __027c_1be2_From_20_25s_20_25s(void); +void __027d_d837_From_3a_20_25s_0a(void); +void __027e_b9a0_Garbage_20bp_20_25l(void); +void __027f_7731_Group_20list_20too_(void); +void __0280_ccdf_HAPN_20_25d_3a_20_2(void); +void __0281_9570_HOPCHECK_20start_20(void); +void __0282_8ef4_HOPCHECK_20to_20_25(void); +void __0283_c794_HOPCHECK_20tracing(void); +void __0284_4952_HS_3a_20Warning_3a_(void); +void __0285_10ba_Hardware_20_25u_0a(void); +void __0286_32e9_Heap_20debugging(void); +void __0287_9144_Host_20_25s_20_28_2(void); +void __0288_862c_Host_20_25s_20unkno(void); +void __0289_f216_Hostname_20set_20to(void); +void __028a_28fb_Hytech_20KA9Q_20NOS(void); +void __028b_df4f_ICMP_20echo_20respo(void); +void __028c_db6d_ICMP_20from_20_25s_(void); +void __028d_abbc_ICMP_20tracing(void); +void __028e_6b85_ICMP_3a_20type_20_2(void); +void __028f_dff6_IP_0a(void); +void __0290_5812_IP_20Time_2dto_2dli(void); +void __0291_0e41_IP_20addr_20_20_20_(void); +void __0292_8cdb_IP_20reasm_20timeou(void); +void __0293_5f88_IP_20rx_20tracing(void); +void __0294_88e0_IP_3a_20CHECKSUM_20(void); +void __0295_03a7_IP_3a_20bad_20heade(void); +void __0296_4543_IP_3a_20len_20_25u(void); +void __0297_e067_IPCP_0a(void); +void __0298_7c5c_IPCP_20_25s_0a(void); +void __0299_a490_IRQ_20_25u_20out_20(void); +void __029a_925d_Idle_20poll_20timer(void); +void __029b_4ab5_Image_0a(void); +void __029c_7e58_Initial_20RTT_20_28(void); +void __029d_bd38_Inqlen_3a_20_25d_20(void); +void __029e_c7f6_Insufficient_20args(void); +void __029f_fcf9_Interface_20_20_20R(void); +void __02a0_b903_Interface_20_22_25s(void); +void __02a1_4daf_Interface_20_22_25s(void); +void __02a2_42ac_Interface_20_22_25s(void); +void __02a3_5a50_Interface_20_25s_20(void); +void __02a4_1298_Interface_20_25s_20(void); +void __02a5_24cb_Interface_20_25s_20(void); +void __02a6_c749_Interface_20_25s_20(void); +void __02a7_63a0_Interface_20_25s_20(void); +void __02a8_8880_Interface_20_25s_20(void); +void __02a9_6e91_Interface_20_25s_20(void); +void __02aa_103c_Interface_20address(void); +void __02ab_c429_Interface_3a_20(void); +void __02ac_d726_Invalid_20magic_20c(void); +void __02ad_42d9_Invalid_20range_2e_(void); +void __02ae_89c0_Invalid_20type_20_2(void); +void __02af_62ed_Invalid_20user_20na(void); +void __02b0_be0b_Job_20id_20_25s_20n(void); +void __02b1_87a9_K_20numbers(void); +void __02b2_414e_KISS_3a_20(void); +void __02b3_1668_Known_20users_20on_(void); +void __02b4_171d_LCP_0a(void); +void __02b5_befe_LCP_20_25s_0a(void); +void __02b6_1d45_Last_20message_0a(void); +void __02b7_a317_Loc_20(void); +void __02b8_5ce5_Local_3a_20_25s(void); +void __02b9_0926_Local_3a_20_25s_20_(void); +void __02ba_6210_Lock_20directory_20(void); +void __02bb_f59a_Logging_20off_0a(void); +void __02bc_1bd9_Logging_20to_20_25s(void); +void __02bd_4a5a_Logical_20bytesize_(void); +void __02be_4f93_Login_20incorrect_0(void); +void __02bf_8ac2_MBOX_20Zap_3a_20_25(void); +void __02c0_1dc7_MBOX_20bbs_20mail_2(void); +void __02c1_37c2_MBOX_20bbs_20mail_2(void); +void __02c2_f88f_MBOX_20forward_20fa(void); +void __02c3_9bd4_MBOX_20forwarding_2(void); +void __02c4_d1e8_MBOX_20login_3a_20_(void); +void __02c5_dd2e_MBOX_20login_3a_20_(void); +void __02c6_e920_MBOX_20sysop_3a_20_(void); +void __02c7_a30c_MBOX_20upload_3a_20(void); +void __02c8_c247_MKD_20_25s(void); +void __02c9_53a6_MRU_20_25s_20_28_25(void); +void __02ca_f9a6_Magic_20Number(void); +void __02cb_d070_Mail_20area_3a_20_2(void); +void __02cc_0103_Mail_20box_20full_3(void); +void __02cd_523a_Main_20commands_3a_(void); +void __02ce_dcca_Max_20attempts_20to(void); +void __02cf_0279_Max_20clients(void); +void __02d0_3cd5_Max_20frame_20lengt(void); +void __02d1_d96d_Maximum_20messages_(void); +void __02d2_488d_Mbuf_20sizes_3a_0a(void); +void __02d3_ee8f_Message_20_23_25d_2(void); +void __02d4_b5f9_Mode_20_25s_20unkno(void); +void __02d5_aa15_Mode_20_25s_20unkno(void); +void __02d6_ac3e_Msg_20_25d_20Killed(void); +void __02d7_9a86_Must_20be_20_200_20(void); +void __02d8_362b_Must_20be_20_200_20(void); +void __02d9_2da0_Must_20be_20_3e_3d_(void); +void __02da_06a9_Must_20set_20_27r_2(void); +void __02db_d814_N_3e_3d_255u_3a_257(void); +void __02dc_7868_NET_2fROM_20Routing(void); +void __02dd_ae07_NET_2fROM_20not_20a(void); +void __02de_d0e9_NET_2fROM_3a_20_25s(void); +void __02df_73b0_NEWNEWS_20_25s_20_2(void); +void __02e0_c191_NNTP_20_25s_20Canno(void); +void __02e1_7ed2_NNTP_20_25s_20Canno(void); +void __02e2_bcd0_NNTP_20_25s_20Conne(void); +void __02e3_796b_NNTP_20_25s_20Conne(void); +void __02e4_4193_NNTP_20_25s_20Conne(void); +void __02e5_0909_NNTP_20_25s_20Conne(void); +void __02e6_3814_NNTP_20_25s_20Conne(void); +void __02e7_b5ec_NNTP_20_25s_20Could(void); +void __02e8_8531_NNTP_20_25s_20Could(void); +void __02e9_8fd5_NNTP_20_25s_20Could(void); +void __02ea_0d83_NNTP_20_25s_20Givin(void); +void __02eb_19c4_NNTP_20_25s_20Givin(void); +void __02ec_213a_NNTP_20_25s_20bad_2(void); +void __02ed_31a2_NNTP_20_25s_20bad_2(void); +void __02ee_df3f_NNTP_20_25s_20givin(void); +void __02ef_791c_NNTP_20_25s_20givin(void); +void __02f0_75ce_NNTP_20_25s_20givin(void); +void __02f1_7eb6_NNTP_20_25s_20proto(void); +void __02f2_7f99_NNTP_20_25s_20proto(void); +void __02f3_a517_NNTP_20Cannot_20ope(void); +void __02f4_fc8f_NNTP_20can_27t_20re(void); +void __02f5_2c2a_NNTP_20daemon_20ent(void); +void __02f6_f2a9_NNTP_20daemon_20exi(void); +void __02f7_cbc7_NNTP_20daemon_20qui(void); +void __02f8_0fa8_NNTP_20group_20_27_(void); +void __02f9_0e76_NNTP_20receive_20er(void); +void __02fa_a47f_NNTP_20received_20_(void); +void __02fb_0916_NNTP_20tracing(void); +void __02fc_b065_NNTP_20window_20to_(void); +void __02fd_852e_NO_20_2d_20(void); +void __02fe_e182_NO_20_2d_20bad_20ad(void); +void __02ff_7ccb_NO_20_2d_20syntax_2(void); +void __0300_2df6_NOS_20log_20closed(void); +void __0301_e1c8_NOS_20was_20started(void); +void __0302_cfbe_NOS_20was_20stopped(void); +void __0303_998c_NULL_20BUFFER_0a(void); +void __0304_89a8_Net_3e_20(void); +void __0305_e0c6_Network_20_25s_20co(void); +void __0306_4009_New_20mail_20arrive(void); +void __0307_fbfc_New_20mail_20arrive(void); +void __0308_d0a7_New_20news_20arrive(void); +void __0309_e9a0_No_20HAPN_20adaptor(void); +void __030a_87bb_No_20current_20sess(void); +void __030b_7f27_No_20dialer_20activ(void); +void __030c_cd1f_No_20finger_20infor(void); +void __030d_2a2e_No_20help_20availab(void); +void __030e_7cc9_No_20packet_20drive(void); +void __030f_4e0c_No_20such_20message(void); +void __0310_2a80_No_20such_20server_(void); +void __0311_0cda_Nodetimer_20_25lu_2(void); +void __0312_3fb0_None(void); +void __0313_1aee_None_0a(void); +void __0314_f8e2_Not_20a_20valid_20s(void); +void __0315_b4ba_Not_20an_20FTP_20se(void); +void __0316_ee7e_Not_20found_0a(void); +void __0317_533e_Not_20in_20table_0a(void); +void __0318_c7b9_Not_20supported_0a(void); +void __0319_9692_Obsotimer_20_25lu_2(void); +void __031a_ff96_Oh_2c_20hello_20_25(void); +void __031b_0948_Only_20_25d_20DRSI_(void); +void __031c_8edb_Only_20_25d_20net_2(void); +void __031d_f9f0_Only_201_20EAGLE_20(void); +void __031e_1514_Outqlen_3a_20_25d_2(void); +void __031f_5b48_PANIC_3a_20Timer_20(void); +void __0320_281b_PANIC_3a_20buffer_2(void); +void __0321_f630_PAP_0a(void); +void __0322_b2fb_PAP_20_25s_0a(void); +void __0323_8063_PASS_20_25s(void); +void __0324_2320_PI_20Board_20Statis(void); +void __0325_73f1_PI_3a_20DMA_20_25d_(void); +void __0326_5841_PI_3a_20DMA_20chann(void); +void __0327_3992_PI_3a_20IRQ_20_25u_(void); +void __0328_4ca4_PI_3a_20Interface_2(void); +void __0329_d856_PI_3a_20Maximum_20o(void); +void __032a_9098_PI_3a_20Mode_20_25s(void); +void __032b_de39_PI_3a_20No_20IP_20a(void); +void __032c_02ea_PI_3a_20No_20memory(void); +void __032d_c0d0_PI_3a_20No_20memory(void); +void __032e_94ca_PI_3a_20No_20memory(void); +void __032f_c698_PI_3a_20No_20memory(void); +void __0330_d61f_PI_3a_20Set_20mycal(void); +void __0331_68d4_PID_20_20_20CS_3aIP(void); +void __0332_3c62_POP_20access_20DENI(void); +void __0333_f3cf_POP_20access_20gran(void); +void __0334_639f_POP_20client_20retr(void); +void __0335_e9bb_POP_20quiet(void); +void __0336_1231_POP_20users_20file_(void); +void __0337_e126_PORT_20_25u_2c_25u_(void); +void __0338_b459_PPP_20tracing(void); +void __0339_b660_PPP_3a_20len_20_253(void); +void __033a_8c73_Packet_20driver_20h(void); +void __033b_d638_Pap_0a(void); +void __033c_8165_Parameter_20_25s_20(void); +void __033d_85d2_Password_3a_20(void); +void __033e_cb37_Password_3a_20_25c_(void); +void __033f_6310_Path_3a_20(void); +void __0340_f75b_Persistence_3a_20_2(void); +void __0341_7bc8_Pinging_20_25s_0a(void); +void __0342_94a5_Pinging_20resumed_0(void); +void __0343_7fa9_Pinging_20suspended(void); +void __0344_220f_Please_20hang_20up_(void); +void __0345_4304_Poll_20threshold_20(void); +void __0346_f8a0_Pool_20count_20_25s(void); +void __0347_dd4d_Protocol_20Field_20(void); +void __0348_744a_QUIT_0a(void); +void __0349_43c0_Quality_20cannot_20(void); +void __034a_b523_Queue_20limit_20_28(void); +void __034b_4a0a_R_20numbers(void); +void __034c_db0e_R_3a_25s_20_40_25s_(void); +void __034d_373f_REQUEST(void); +void __034e_19a4_RESPONSE(void); +void __034f_8b13_RETR_20_25s(void); +void __0350_86e9_RETURN_0a(void); +void __0351_bbdb_RFrames_20_2d_20_25(void); +void __0352_f9d6_RIP_20merging(void); +void __0353_3211_RIP_20refused_20fro(void); +void __0354_8827_RIP_20tracing(void); +void __0355_5585_RIP_3a_20(void); +void __0356_fd1d_RIP_3a_20sent_20_25(void); +void __0357_6b7c_RIPCMD_3a_20Unknown(void); +void __0358_5f5f_RIPCMD_5fREQUEST_0a(void); +void __0359_07f6_RIPCMD_5fRESPONSE_2(void); +void __035a_eb71_RIP_5frx_3a_20Not_2(void); +void __035b_86e6_RMD_20_25s(void); +void __035c_8005_Range_20for_20inter(void); +void __035d_1ee5_Reassembly_20fragme(void); +void __035e_fbe9_Reassembly_20queue_(void); +void __035f_5eb3_Received_3a_20(void); +void __0360_9fbc_Recording_20into_20(void); +void __0361_aa80_Recording_20off_0a(void); +void __0362_2a15_Recv_3a_20_20_20_20(void); +void __0363_d0ff_Refuse_0a(void); +void __0364_42c0_Refusing_20announce(void); +void __0365_6bd1_Requesting_2e_2e_2e(void); +void __0366_4784_Resolver_20_25s_20u(void); +void __0367_ae52_Resolving_20_25s_2e(void); +void __0368_200a_Resolving_20_25s_2e(void); +void __0369_cacc_Retry_20limit(void); +void __036a_0cd3_Returned_20(void); +void __036b_85af_Route_20add_20faile(void); +void __036c_9b70_Routing_20lookups_3(void); +void __036d_9c01_Rxints_20_20_2d_20_(void); +void __036e_ccf6_S_20_20_20_20_20Job(void); +void __036f_df6d_S_20command_20synta(void); +void __0370_4fbb_S_23_20_20_20Type_2(void); +void __0371_bf54_SMTP_20_25s_20Conne(void); +void __0372_cbb7_SMTP_20batching(void); +void __0373_e45f_SMTP_20client_20Try(void); +void __0374_797a_SMTP_20sent_20job_2(void); +void __0375_68b2_SMTP_20tracing(void); +void __0376_e7a4_SP_20_3d_20_25p_2c_(void); +void __0377_a1f1_STOR_20_25s(void); +void __0378_49fd_STOR_20_25s_0a(void); +void __0379_38ea_STOR_20_25s_3a_20_2(void); +void __037a_12cc_STOR_20_25s_3a_20Er(void); +void __037b_cfe9_SUBCMD_20_2d_20Don_(void); +void __037c_0319_SYST_0a(void); +void __037d_93fc_Same_0a(void); +void __037e_3c55_Scroll_20file_20siz(void); +void __037f_e255_Send_20file_2c_20_2(void); +void __0380_c1d8_Send_3a_20_2508lx_2(void); +void __0381_afab_Server_20address_20(void); +void __0382_36ef_Session_20_25s_20no(void); +void __0383_0845_Slot_20time_3a_20_2(void); +void __0384_6556_Socket_20not_20in_2(void); +void __0385_a061_Sorry_20_2d_20the_2(void); +void __0386_8034_Stack_20violation_2(void); +void __0387_6414_Station_20_20_20Las(void); +void __0388_5bef_Station_20_20_20Las(void); +void __0389_9aef_Subject_3a_20_25s_0(void); +void __038a_0cac_System_20is_20overl(void); +void __038b_63e9_T_20hostname(void); +void __038c_1279_T1_3a_20(void); +void __038d_a7c1_T3_3a_20(void); +void __038e_e4a1_TACK_3a_20(void); +void __038f_7f7b_TCB_20_25p_20_25s_2(void); +void __0390_5447_TCD_3a_20(void); +void __0391_fa23_TCP_20MSS(void); +void __0392_70e7_TCP_20default_20irt(void); +void __0393_5ac7_TCP_20header_20comp(void); +void __0394_c668_TCP_20state_20traci(void); +void __0395_b0d7_TCP_20syn_2bdata_20(void); +void __0396_43bd_TCP_20timestamps(void); +void __0397_5b74_TCP_20window(void); +void __0398_7267_TCP_3a_20_25u_2d_3e(void); +void __0399_59c4_TChoke_3a_20(void); +void __039a_2ced_TX_20Delay_3a_20_25(void); +void __039b_6a23_TX_20Tail_20time_3a(void); +void __039c_d175_TX_20queue_20limit(void); +void __039d_f579_TYPE_20A_0a(void); +void __039e_3bb9_TYPE_20I_0a(void); +void __039f_a616_TYPE_20L_20_25d_0a(void); +void __03a0_f6fb_Target_20_20_20_20T(void); +void __03a1_950b_Telnet_20option_20t(void); +void __03a2_4517_Thank_20you_20_25s_(void); +void __03a3_70f0_The_20escape_20char(void); +void __03a4_6de0_Time_20for_201000_2(void); +void __03a5_601a_Time_20to_20live(void); +void __03a6_e505_Timeout_20value_20_(void); +void __03a7_1db3_Timer_20_20_20_20_2(void); +void __03a8_d78a_Tip_20connection_20(void); +void __03a9_c093_Tip_20session_20alr(void); +void __03aa_8c54_To_3a_20_25s_0a(void); +void __03ab_2a55_Too_20many_20HAPN_2(void); +void __03ac_76b7_Too_20many_20asynch(void); +void __03ad_58f2_Too_20many_20digipe(void); +void __03ae_2d53_Too_20many_20hs_20c(void); +void __03af_286c_Too_20many_20mailbo(void); +void __03b0_4c9a_Too_20many_20nrs_20(void); +void __03b1_7103_Too_20many_20packet(void); +void __03b2_d8c3_Too_20many_20pc100_(void); +void __03b3_2057_Too_20many_20sessio(void); +void __03b4_447c_Too_20many_20slip_2(void); +void __03b5_0d8c_Try_20to_20bounce_2(void); +void __03b6_2030_Trying_20_25s_2e_2e(void); +void __03b7_cee2_Trying_20_25s_2e_2e(void); +void __03b8_be29_Trying_20Connection(void); +void __03b9_9c56_Tstate_20_3d_20_25s(void); +void __03ba_6afe_Turn_20off_20local_(void); +void __03bb_c801_Tx_20state_20_20_25(void); +void __03bc_be1b_Tx_20state_20_20_25(void); +void __03bd_e1f6_TxBuffers_3a_20_20S(void); +void __03be_5cfe_Txdefer_20_2d_20_25(void); +void __03bf_e733_U_20filename(void); +void __03c0_9059_UDP_3a(void); +void __03c1_a945_USER_20_25s(void); +void __03c2_41aa_Unknown_20command(void); +void __03c3_e21a_Unknown_20command_2(void); +void __03c4_b975_Unknown_20command_3(void); +void __03c5_d2a4_Unknown_20encapsula(void); +void __03c6_8cf4_Unknown_20parameter(void); +void __03c7_eb24_Update_20with_20MD5(void); +void __03c8_7d7d_Uploading_20_25s_0a(void); +void __03c9_bd81_Uploading_20off_0a(void); +void __03ca_6d70_Uptime_20_25s_20Sta(void); +void __03cb_0a8d_Usage_3a_20(void); +void __03cc_125c_Usage_3a_20_25s_20_(void); +void __03cd_6ae1_Usage_3a_20F_20user(void); +void __03ce_7dd1_Usage_3a_20ax25_20r(void); +void __03cf_f8b8_Usage_3a_20dial_20_(void); +void __03d0_a375_Usage_3a_20mbox_20m(void); +void __03d1_8cfb_Usage_3a_20pop_20us(void); +void __03d2_a2c0_Usage_3a_20smtp_20m(void); +void __03d3_9654_Use_20the_20ax25_20(void); +void __03d4_4893_User_20_20_20_20_20(void); +void __03d5_633f_User_20_25s_20not_2(void); +void __03d6_75ef_V_20numbers(void); +void __03d7_4b9d_VJ_20Compressed_20T(void); +void __03d8_2be9_VJ_20Uncompressed_2(void); +void __03d9_3d32_Valid_20options_3a(void); +void __03da_8007_Value_20_25s_20_28_(void); +void __03db_c8df_Verbose(void); +void __03dc_32ff_Verbose_20flag(void); +void __03dd_b110_WARNING_3a_20Locati(void); +void __03de_eddf_Warning_21_20Interf(void); +void __03df_4457_Warning_3a_20type_2(void); +void __03e0_85a8_Window_20_28frames_(void); +void __03e1_9331_Window_20size_20_28(void); +void __03e2_613d_Window_3a_20_25_2d5(void); +void __03e3_25a6_Wink_20DTR_3f_20(void); +void __03e4_75b2_Writing_20article_2(void); +void __03e5_3999_XMD5_20_25s(void); +void __03e6_a62b_XMD5_20_25s_0a(void); +void __03e7_8515_XMKD_20_25s_0a(void); +void __03e8_31d2_XRMD_20_25s_0a(void); +void __03e9_71c6_You_20have_20(void); +void __03ea_1e66_You_20have_20new_20(void); +void __03eb_4583_You_27re_20using_20(void); +void __03ec_4aef_Z_20filename(void); +void __03ed_5fd7_Zap_20failed_3a_20_(void); +void __03ee_e3d1__5b(void); +void __03ef_9d9c__5bNET_2dHMR_24_5d(void); +void __03f0_f8e4__5bunknown_5d(void); +void __03f1_699f__5eC_0a(void); +void __03f2_e5d6__5eR_0a(void); +void __03f3_1951__5fexit(void); +void __03f4_a314__5ffcreat_3a_20WARN(void); +void __03f5_79de__5funlink_3a_20bad_(void); +void __03f6_722b_accept(void); +void __03f7_30f9_accept_0a(void); +void __03f8_2cfc_access(void); +void __03f9_9b89_accm(void); +void __03fa_16c9_acct(void); +void __03fb_0c4f_acfc(void); +void __03fc_7530_acktime(void); +void __03fd_41b5_add(void); +void __03fe_d8a3_add_20_3chostid_3e(void); +void __03ff_6783_addprivate(void); +void __0400_9712_address(void); +void __0401_2c42_addserver(void); +void __0402_b0a9_alarm(void); +void __0403_9965_allocs_20_25lu_20fr(void); +void __0404_8e82_allow_20pap_20none_(void); +void __0405_ba08_allow_20tcp_20none_(void); +void __0406_94f6_anext_20pointer_20o(void); +void __0407_c2a0_answer_20script_3a_(void); +void __0408_da7c_area(void); +void __0409_1dde_arp_20add_20_3chost(void); +void __040a_96ce_arp_20drop_20_3chos(void); +void __040b_0018_arp_20publish_20_3c(void); +void __040c_5838_asci(void); +void __040d_4354_ascii(void); +void __040e_3914_ascistat(void); +void __040f_6442_attach(void); +void __0410_39bc_attach_20_3chardwar(void); +void __0411_fe98_attach_20asci_20_3c(void); +void __0412_342d_attach_20escc_20_3c(void); +void __0413_7943_attempt_20to_20writ(void); +void __0414_7d37_attend(void); +void __0415_c133_authenticate(void); +void __0416_fd47_ax25_20kick_20_3cax(void); +void __0417_0003_ax25_20reset_20_3ca(void); +void __0418_ca0a_bad_20destination_2(void); +void __0419_60d3_bad_20internet_20ad(void); +void __041a_0a79_bad_20neighbor_20ca(void); +void __041b_4126_batch(void); +void __041c_bcb6_bcnodes(void); +void __041d_0c93_begin_20_2503o_20_2(void); +void __041e_3245_binary(void); +void __041f_4c4f_blimit(void); +void __0420_ff8d_bootp_20_5bnet_5fna(void); +void __0421_0e8f_bootp_3a_20Net_5fer(void); +void __0422_f5d9_bootp_3a_20timed_20(void); +void __0423_72d6_bp_20_25lx_20tot_20(void); +void __0424_9767_brk(void); +void __0425_f951_broadcast(void); +void __0426_03ff_bsr(void); +void __0427_83e6_by_20_25s_20_28_25s(void); +void __0428_69f3_by_20_25s_20with_20(void); +void __0429_9ab1_bye(void); +void __042a_7cbf_cache(void); +void __042b_a3a9_can_27t_20read_20_2(void); +void __042c_f4b4_can_27t_20trace_20i(void); +void __042d_9aa7_cd(void); +void __042e_42c2_cd_20_3cdirectory_3(void); +void __042f_35a9_chat(void); +void __0430_743f_chdir(void); +void __0431_5ed3_check(void); +void __0432_40b3_check_20_3chost_3e(void); +void __0433_c946_chmod(void); +void __0434_b786_choketime(void); +void __0435_88f5_chown(void); +void __0436_87a8_chroot(void); +void __0437_4822_clean(void); +void __0438_23aa_close(void); +void __0439_2b22_close_20FTP(void); +void __043a_f93d_close_20Finger(void); +void __043b_0957_close_20POP(void); +void __043c_b85c_close_20POP_20_2d_2(void); +void __043d_83a3_close_20SMTP(void); +void __043e_b949_close_20SMTP_20_2d_(void); +void __043f_423c_close_20discard(void); +void __0440_419d_close_20echo(void); +void __0441_03ad_close_20term(void); +void __0442_83dc_code_20_25u_20arg_2(void); +void __0443_ea90_compare(void); +void __0444_a613_compare_20_3cremote(void); +void __0445_fbc2_compress(void); +void __0446_3845_compressed_20(void); +void __0447_26b1_configure(void); +void __0448_749f_connect(void); +void __0449_5769_control(void); +void __044a_941e_control_20up_20_7c_(void); +void __044b_2aba_control_3a_20_25s_0(void); +void __044c_4bf4_cwd(void); +void __044d_62af_d_5finit_28_29(void); +void __044e_5a9b_d_5finit_28_29_20ma(void); +void __044f_62a8_debug(void); +void __0450_740d_default(void); +void __0451_db45_defaultfile(void); +void __0452_818b_delay_20_25lu_0a(void); +void __0453_2c87_dele(void); +void __0454_89a5_delete(void); +void __0455_3919_delete_20_3cfile_3e(void); +void __0456_6466_destlist(void); +void __0457_cfc1_detach(void); +void __0458_26f3_detach_20_3cinterfa(void); +void __0459_3f12_devio_5fgarbage_3a_(void); +void __045a_0f61_dfile_5fsearch_3a_2(void); +void __045b_4eba_dfile_5fupdate_3a_2(void); +void __045c_5b47_dfile_5fupdate_3a_2(void); +void __045d_ef06_dfile_5fupdate_3a_2(void); +void __045e_0173_dialer(void); +void __045f_8d0b_dialer_20_3ciface_3(void); +void __0460_18c3_digipeat(void); +void __0461_bdc7_dir(void); +void __0462_5c0a_directory(void); +void __0463_176f_discard(void); +void __0464_684a_discard_20expired_2(void); +void __0465_f701_disconnect(void); +void __0466_e146_dns(void); +void __0467_8f79_dns_5fquery_3a_20qu(void); +void __0468_6da5_dns_5fquery_3a_20re(void); +void __0469_041c_doexit_3a_20won_27t(void); +void __046a_21ed_domain(void); +void __046b_e0fd_down_20script_3a_20(void); +void __046c_050c_download(void); +void __046d_4853_drop(void); +void __046e_0532_drop_20_3chostid_3e(void); +void __046f_e7cf_dropserver(void); +void __0470_a2e4_dup(void); +void __0471_b319_dup2(void); +void __0472_cb91_dynip(void); +void __0473_2edf_echo(void); +void __0474_7366_empty_20packet_21_2(void); +void __0475_48fd_encapsulation(void); +void __0476_4a34_eol(void); +void __0477_b4ae_escape(void); +void __0478_858e_escc(void); +void __0479_d50a_escc_25d_3a_20No_20(void); +void __047a_6362_esccstat(void); +void __047b_59b0_execve(void); +void __047c_3566_exit(void); +void __047d_bd2b_expired(void); +void __047e_bce0_failure(void); +void __047f_086a_falign(void); +void __0480_303b_files(void); +void __0481_d6a7_filter_20mode_20is_(void); +void __0482_927a_finger(void); +void __0483_8ea1_finger_20name_40hos(void); +void __0484_28f4_flush(void); +void __0485_dc8b_fmount_3a_20can_27t(void); +void __0486_8074_fork(void); +void __0487_8227_forward(void); +void __0488_c066_fp_20_20_20_20_20_2(void); +void __0489_9a2a_free_3a_20WARNING_2(void); +void __048a_f896_freelist(void); +void __048b_bd4f_from_20_25s_20(void); +void __048c_5b02_from_20_25s_2ebbs_2(void); +void __048d_2208_fs_5finit_28_29(void); +void __048e_7fbc_fstat(void); +void __048f_0e84_ftp(void); +void __0490_bafd_ftp_20_3caddress_3e(void); +void __0491_f999_ftp_3e_20syst_0a(void); +void __0492_51ba_garbage_20collectio(void); +void __0493_c2ce_gateway(void); +void __0494_9e35_get(void); +void __0495_c7c0_get_20_3cremotefile(void); +void __0496_60c5_getfsys(void); +void __0497_631b_getinode_3a_20bad_2(void); +void __0498_7dac_getset(void); +void __0499_b3cb_groups(void); +void __049a_156e_hash(void); +void __049b_5bc8_heap_20size_20_25lu(void); +void __049c_856f_heard(void); +void __049d_fc9f_help(void); +void __049e_1d5e_homedir(void); +void __049f_6fa6_hop(void); +void __04a0_df98_host(void); +void __04a1_476e_hostname(void); +void __04a2_2f25_icmp(void); +void __04a3_dd41_ident(void); +void __04a4_fe83_ifconfig(void); +void __04a5_6196_ignored_20_28hold_2(void); +void __04a6_dc84_info(void); +void __04a7_0500_input_20line_3a_20_(void); +void __04a8_9677_interface(void); +void __04a9_3fa5_ioctl(void); +void __04aa_3172_ip(void); +void __04ab_d229_ip_5frecv_28_25s_29(void); +void __04ac_289f_ip_5fsend_0a(void); +void __04ad_0191_ipaddress(void); +void __04ae_dfc4_ipcp(void); +void __04af_f4c1_irtt(void); +void __04b0_516b_kick(void); +void __04b1_a61c_kill(void); +void __04b2_ff9f_kill_20_3cjobnumber(void); +void __04b3_5e27_ksigs_20_25lu_20que(void); +void __04b4_1bbe_kwaits_20_25lu_20no(void); +void __04b5_a567_lcp(void); +void __04b6_b632_link(void); +void __04b7_dfe4_linkaddress(void); +void __04b8_7bad_list(void); +void __04b9_4346_listen(void); +void __04ba_a5dd_listservers(void); +void __04bb_f2d8_local(void); +void __04bc_68f9_log(void); +void __04bd_feb4_logfile(void); +void __04be_52c6_login_3a_20(void); +void __04bf_a516_logscreen(void); +void __04c0_8f77_lookup(void); +void __04c1_7d51_ls(void); +void __04c2_634b_lseek(void); +void __04c3_0288_magic(void); +void __04c4_868b_maibox_20name_20not(void); +void __04c5_2d7f_mailbox(void); +void __04c6_2084_mailbox_20name_20no(void); +void __04c7_86f8_mailhost(void); +void __04c8_63b8_mailhost_20not_20de(void); +void __04c9_139d_maxclients(void); +void __04ca_8d56_maxframe(void); +void __04cb_d5aa_maximum_20route_20q(void); +void __04cc_9853_maxmsg(void); +void __04cd_7203_maxttl(void); +void __04ce_e017_maxwait(void); +void __04cf_e57a_mbuf_20allocs_20_25(void); +void __04d0_8c4f_mcompare(void); +void __04d1_f47e_mcompare_20_3cfile_(void); +void __04d2_a71a_md5(void); +void __04d3_cc78_md5_20_3cfile_3e(void); +void __04d4_4d2a_memory(void); +void __04d5_69ba_memory_20cache_20si(void); +void __04d6_336a_merge(void); +void __04d7_649e_merge_20_25s_20_25d(void); +void __04d8_460c_metric_20better_3a_(void); +void __04d9_3694_metric_20change_3a_(void); +void __04da_44b0_metric_20not_20bett(void); +void __04db_b64c_mget(void); +void __04dc_8d01_mget_20_3cfile_3e_2(void); +void __04dd_1e96_mkd_20(void); +void __04de_304a_mkdir(void); +void __04df_7d04_mkdir_20_3cdirector(void); +void __04e0_6257_mknod(void); +void __04e1_685e_mode(void); +void __04e2_9335_modes_20are_3a_20no(void); +void __04e3_a91f_more(void); +void __04e4_5384_more_20_3cfilename_(void); +void __04e5_ec46_motd(void); +void __04e6_b5d1_mount(void); +void __04e7_2a4d_mput(void); +void __04e8_312f_mput_20_3cfile_3e_2(void); +void __04e9_245f_mru(void); +void __04ea_58b1_mss(void); +void __04eb_708f_mtu(void); +void __04ec_78ae_mycall(void); +void __04ed_8a90_name(void); +void __04ee_b07d_netmask(void); +void __04ef_4d2c_netrom_20bcnodes_20(void); +void __04f0_c5dc_netrom_20connect_20(void); +void __04f1_925a_netrom_20interface_(void); +void __04f2_a510_netrom_20interface_(void); +void __04f3_b271_netrom_20kick_20_3c(void); +void __04f4_5334_netrom_20nodefilter(void); +void __04f5_6bfe_netrom_20nodefilter(void); +void __04f6_328e_netrom_20reset_20_3(void); +void __04f7_18c8_netrom_20route_20ad(void); +void __04f8_fff3_netrom_20route_20dr(void); +void __04f9_e8da_netrom_20route_20in(void); +void __04fa_2254_newproc_20_22_25s_2(void); +void __04fb_4db6_newsession_3a_20WAR(void); +void __04fc_5ab5_newsession_3a_20WAR(void); +void __04fd_7718_next_20pointer_20ou(void); +void __04fe_7b66_nlst(void); +void __04ff_0ca7_nntp_20addserver_20(void); +void __0500_fea0_nntp_20dropserver_2(void); +void __0501_a821_nntp_20kick_20_3cnn(void); +void __0502_a7f6_no_20filesys(void); +void __0503_7405_no_20root(void); +void __0504_b518_no_20such_20route_0(void); +void __0505_3fb4_nodefilter(void); +void __0506_bac4_nodefilter_20subcom(void); +void __0507_e743_nodes(void); +void __0508_57cf_nodetimer(void); +void __0509_7a7f_none_0a(void); +void __050a_29c2_normal_20_28_25s_20(void); +void __050b_07d0_null_0a(void); +void __050c_fb30_obsotimer(void); +void __050d_3971_open(void); +void __050e_a412_open_20_25s(void); +void __050f_e5a0_open_20FTP(void); +void __0510_10d3_open_20Finger(void); +void __0511_fe22_open_20MBOX(void); +void __0512_c7d5_open_20POP(void); +void __0513_2477_open_20SMTP(void); +void __0514_4ca5_open_20discard(void); +void __0515_e649_open_20echo(void); +void __0516_a479_open_20term(void); +void __0517_2f09_p_5finit_28_29(void); +void __0518_76ec_packet_20delayed_20(void); +void __0519_8504_packet_20duped_0a(void); +void __051a_a8e1_packet_20lost_0a(void); +void __051b_ead4_paclen(void); +void __051c_1a03_page(void); +void __051d_dd11_page_20_3ccommand_3(void); +void __051e_b6e1_pap(void); +void __051f_512a_param(void); +void __0520_d362_param_20_3cinterfac(void); +void __0521_9d45_pass(void); +void __0522_f746_pause(void); +void __0523_d9f3_pfc(void); +void __0524_28cb_ping(void); +void __0525_d85a_ping_20_3chostid_3e(void); +void __0526_0458_pipe(void); +void __0527_5919_pool(void); +void __0528_e039_port(void); +void __0529_a9d2_port_20_25d_3a_20tx(void); +void __052a_3aa8_ppp(void); +void __052b_8304_ppp_5fproc_3a_20mis(void); +void __052c_3dc2_protocol_3a_20(void); +void __052d_4160_ps(void); +void __052e_26dc_pthresh(void); +void __052f_a61f_publish(void); +void __0530_274c_pushdown_20calls_20(void); +void __0531_0234_put(void); +void __0532_8f3b_put_20_3clocalfile_(void); +void __0533_2105_pwd(void); +void __0534_0282_qlimit(void); +void __0535_0be6_queries(void); +void __0536_0bef_query(void); +void __0537_6646_query_20_3chostid_3(void); +void __0538_27c8_queue_20job_20_25s_(void); +void __0539_1196_quick(void); +void __053a_ad30_quiet(void); +void __053b_7b54_quit(void); +void __053c_054d_read(void); +void __053d_c7a9_read_20_3cremotefil(void); +void __053e_7ee6_reboot(void); +void __053f_1c64_received_20_25u_20b(void); +void __0540_5735_record(void); +void __0541_18c5_recv_3a_20do_20(void); +void __0542_8810_recv_3a_20dont_20(void); +void __0543_84ef_recv_3a_20will_20(void); +void __0544_219c_recv_3a_20wont_20(void); +void __0545_c7dc_refuse(void); +void __0546_0e31_reject_0a(void); +void __0547_bc2e_remote(void); +void __0548_4ff0_remote_20_5b_2dp_20(void); +void __0549_cb71_rename(void); +void __054a_a493_rename_20_3coldfile(void); +void __054b_6d5b_repeat(void); +void __054c_01b9_repeat_20_3cinterva(void); +void __054d_3f14_request(void); +void __054e_85b2_reset(void); +void __054f_c3ce_response_20id_20_25(void); +void __0550_9bd3_retr(void); +void __0551_5e3c_retries(void); +void __0552_0acb_retry(void); +void __0553_7f96_rip_20accept_20_3cg(void); +void __0554_764e_rip_20add_20_3cdest(void); +void __0555_3030_rip_20drop_20_3cdes(void); +void __0556_8661_rip_20refuse_20_3cg(void); +void __0557_b917_rmd_20(void); +void __0558_a56c_rmdir(void); +void __0559_b9e3_rmdir_20_3cdirector(void); +void __055a_c459_rmhost(void); +void __055b_0284_route(void); +void __055c_ea02_route_20add_20_3cde(void); +void __055d_f461_route_20add_20_5b_2(void); +void __055e_d581_route_20addprivate_(void); +void __055f_bbd2_route_20drop_20_3cd(void); +void __0560_103e_route_20drop_20_5b_(void); +void __0561_a5ec_route_20lookup_20_3(void); +void __0562_ae23_route_20to_20self_3(void); +void __0563_2c09_rtimer(void); +void __0564_ae54_rtt(void); +void __0565_02fc_running(void); +void __0566_b4d7_rxbuf(void); +void __0567_d2fd_sbrk(void); +void __0568_3365_scrollback(void); +void __0569_9a3e_send(void); +void __056a_e397_send_20_22string_22(void); +void __056b_5c19_sender(void); +void __056c_efea_sending_20job_20_25(void); +void __056d_7321_sent_3a_20do_20(void); +void __056e_db3c_sent_3a_20dont_20(void); +void __056f_d7c3_sent_3a_20will_20(void); +void __0570_72b0_sent_3a_20wont_20(void); +void __0571_2d5d_serial_20line_20IP_(void); +void __0572_f33e_serial_20line_20VJ_(void); +void __0573_6f7f_serial_20line_20VJ_(void); +void __0574_6f48_server_20retries(void); +void __0575_f0af_server_20trace(void); +void __0576_db9a_session(void); +void __0577_3031_set_20mycall_20firs(void); +void __0578_1de4_shell(void); +void __0579_3faf_signal(void); +void __057a_dce5_size(void); +void __057b_f163_sizes(void); +void __057c_4046_smtp_20daemon_20ent(void); +void __057d_8e2a_smtp_20daemon_3a_20(void); +void __057e_23e1_smtp_20job_20_25s_2(void); +void __057f_ed89_smtp_20mode_3a_20_2(void); +void __0580_2b33_smtp_20recv_3a_20_2(void); +void __0581_928b_smtp_20sent_3a_20(void); +void __0582_b4cf_socket(void); +void __0583_6b20_some_20strange_2c_2(void); +void __0584_60cd_speed(void); +void __0585_9785_speed_20_3cbps_3e(void); +void __0586_1861_spool_3a_20_25s_0a(void); +void __0587_61f2_src_20_25s(void); +void __0588_4e06_srtt_20_3d_20_25lu_(void); +void __0589_795f_stack_20test(void); +void __058a_45e3_stacktest(void); +void __058b_be0b_stacktest_20_5bon_7(void); +void __058c_fcc6_standard_0a(void); +void __058d_b958_start(void); +void __058e_4b5d_start_20_3cserverna(void); +void __058f_9324_start_20bsr_20_3cin(void); +void __0590_d63e_stat(void); +void __0591_5069_status(void); +void __0592_7dfc_status_20up_20_7c_2(void); +void __0593_68cb_stime(void); +void __0594_4875_stktrace_20from_20p(void); +void __0595_0a0a_stop(void); +void __0596_6ec0_stop_20_3cservernam(void); +void __0597_301d_stopped(void); +void __0598_2918_stor(void); +void __0599_784e_stru(void); +void __059a_bec3_suffix(void); +void __059b_420b_symlink(void); +void __059c_ceb7_sync(void); +void __059d_bb66_syndata(void); +void __059e_b50c_sysdebug(void); +void __059f_be35_sysdebug_20_5bon_7c(void); +void __05a0_8f60_syst(void); +void __05a1_f3f3_system_20call_20tra(void); +void __05a2_a612_system_20kernel_20d(void); +void __05a3_98fb_systrace(void); +void __05a4_71e3_systrace_20_5bon_7c(void); +void __05a5_6404_t3(void); +void __05a6_b31f_target(void); +void __05a7_e630_tcp(void); +void __05a8_e483_tcp_20kick_20_3ctcb(void); +void __05a9_a12c_tcp_20reset_20_3ctc(void); +void __05aa_bb94_tcp_20rtt_20_3ctcb_(void); +void __05ab_f363_tcp_20stat_20_3ctcb(void); +void __05ac_6ff2_telnet(void); +void __05ad_2114_telnet_20_3caddress(void); +void __05ae_6cef_term(void); +void __05af_7425_terminate(void); +void __05b0_4c6f_thresh(void); +void __05b1_535d_time(void); +void __05b2_43a3_time_20before_20fil(void); +void __05b3_7156_timeout(void); +void __05b4_d9a6_timer(void); +void __05b5_d29c_timer_3a_20ints_20w(void); +void __05b6_c82f_times(void); +void __05b7_223a_timestamps(void); +void __05b8_004c_tip_20or_20dialer_2(void); +void __05b9_aa4a_tiptimeout(void); +void __05ba_aa76_tmp_20file_20wiping(void); +void __05bb_2645_tmp_20file_3a_20_25(void); +void __05bc_a165_topt(void); +void __05bd_4f5f_trace(void); +void __05be_3bce_traceroute_20done_3(void); +void __05bf_f7b8_try(void); +void __05c0_e444_ttl(void); +void __05c1_299c_ttylink(void); +void __05c2_e58b_txqlen(void); +void __05c3_f321_type(void); +void __05c4_f1e4_udp(void); +void __05c5_5caf_umount(void); +void __05c6_5c70_unknown_0a(void); +void __05c7_bc4f_unknown_200x_2504x_(void); +void __05c8_5194_unknown_20hardware_(void); +void __05c9_acee_unlink(void); +void __05ca_f303_up_20script_3a_20_2(void); +void __05cb_db93_update(void); +void __05cc_5c27_update_20Domain_2et(void); +void __05cd_0b09_update_20Domain_2et(void); +void __05ce_c5a3_update_20Domain_2et(void); +void __05cf_d4f0_upload(void); +void __05d0_13f7_user(void); +void __05d1_6f25_user_20abort_0a(void); +void __05d2_1b49_userdata(void); +void __05d3_3967_username_20not_20de(void); +void __05d4_c23f_users(void); +void __05d5_5353_utime(void); +void __05d6_d261_valid_20subcommands(void); +void __05d7_a0e5_validblk_3a_20dev_2(void); +void __05d8_74cf_validblk_3a_20inval(void); +void __05d9_ab5c_verbose(void); +void __05da_207d_version(void); +void __05db_9778_view(void); +void __05dc_23f1_view_20_3cfilename_(void); +void __05dd_d63a_wait(void); +void __05de_2887_wait_20_3cmilliseco(void); +void __05df_e988_waitpid(void); +void __05e0_674e_want_20busy_20block(void); +void __05e1_84e4_what(void); +void __05e2_9158_window(void); +void __05e3_5379_wipe(void); +void __05e4_4cc8_write(void); +void __05e5_dd6d_x_25x(void); +void __05e6_ce7b_xcwd(void); +void __05e7_2295_xmd5(void); +void __05e8_e251_xmkd(void); +void __05e9_a48a_xpwd(void); +void __05ea_79d3_xrmd(void); +void __05eb_c59b_zap(void); + +#endif /* __MESSAGES_H */ + diff --git a/src/nos/include/pwd.h b/src/nos/include/pwd.h new file mode 100644 index 00000000..ecf1ad08 --- /dev/null +++ b/src/nos/include/pwd.h @@ -0,0 +1,37 @@ +#ifndef __PWD_H +#define __PWD_H +#ifndef __TYPES_H +#include +#endif +#include + +/* The passwd structure. */ +struct passwd { + char *pw_name; /* Username */ + char *pw_passwd; /* Password */ + int pw_uid; /* User ID */ + int pw_gid; /* Group ID */ + char *pw_gecos; /* Real name */ + char *pw_dir; /* Home directory */ + char *pw_shell; /* Shell program */ +}; + +extern void setpwent __P((void)); +extern void endpwent __P((void)); +extern struct passwd *getpwent __P((void)); + +extern int putpwent __P((struct passwd * __p, FILE * __f)); +extern int getpw __P((int uid, char *buf)); + +extern struct passwd *fgetpwent __P((FILE * file)); + +extern struct passwd *getpwuid __P((int __uid)); +extern struct passwd *getpwnam __P((char *)); + +extern struct passwd * __getpwent __P((int passwd_fd)); + +extern char *_path_passwd; + +#define getlogin() getpwnam(getuid()) + +#endif /* pwd.h */ diff --git a/src/nos/include/regexp.h b/src/nos/include/regexp.h new file mode 100644 index 00000000..263b90ad --- /dev/null +++ b/src/nos/include/regexp.h @@ -0,0 +1,27 @@ +/* + * Definitions etc. for regexp(3) routines. + * + * Caveat: this is V8 regexp(3) [actually, a reimplementation thereof], + * not the System V one. + */ +#ifndef __REGEXP_H +#define __REGEXP_H + +#define NSUBEXP 10 + +typedef struct regexp { + char *startp[NSUBEXP]; + char *endp[NSUBEXP]; + char regstart; /* Internal use only. */ + char reganch; /* Internal use only. */ + char *regmust; /* Internal use only. */ + int regmlen; /* Internal use only. */ + char program[1]; /* Unwarranted chumminess with compiler. */ +} regexp; + +extern regexp *regcomp __P((char *)); +extern int regexec __P((regexp *prog, char *string)); +extern void regsub __P((regexp *prog, char *source, char *dest)); +extern void regerror __P((char *)); + +#endif diff --git a/src/nos/include/regmagic.h b/src/nos/include/regmagic.h new file mode 100644 index 00000000..7fd76a5d --- /dev/null +++ b/src/nos/include/regmagic.h @@ -0,0 +1,5 @@ +/* + * The first byte of the regexp internal "program" is actually this magic + * number; the start node begins in the second byte. + */ +#define MAGIC 0234 diff --git a/src/nos/include/search.h b/src/nos/include/search.h new file mode 100644 index 00000000..18a8f5b6 --- /dev/null +++ b/src/nos/include/search.h @@ -0,0 +1,55 @@ +#ifndef __SEARCH_H +#define __SEARCH_H +#ifndef __TYPES_H +#include +#endif +#include + +#ifndef __COMPAR_FN_T +#define __COMPAR_FN_T +typedef int (*__compar_fn_t) __P((__ptr_t, __ptr_t)); +#endif + +/* for use with hsearch(3) */ + +typedef struct entry { char *key; char *data; } ENTRY; +typedef enum { FIND, ENTER } ACTION; + +extern ENTRY * hsearch __P((ENTRY __item, ACTION __action)); +extern int hcreate __P((unsigned __nel)); +extern void hdestroy __P((void)); + +/* The tsearch routines are very interesting. They make many + * assumptions about the compiler. It assumpts that the first field + * in node must be the "key" field, which points to the datum. + * Everything depends on that. It is a very tricky stuff. H.J. + */ +/* For tsearch */ +typedef enum { preorder, postorder, endorder, leaf } VISIT; + +extern void *tsearch __P((void *__key, void **__rootp, __compar_fn_t compar)); + +extern void *tfind __P((void *__key, void ** __rootp, __compar_fn_t compar)); + +extern void *tdelete __P((void * __key, void ** __rootp, __compar_fn_t compar)); + +#ifndef __ACTION_FN_T +#define __ACTION_FN_T +/* FYI, the first argument should be a pointer to "key". + * Please read the man page for details. + */ +typedef void (*__action_fn_t) __P((void *__nodep, VISIT __value, int __level)); +#endif + +extern void twalk __P((void * __root, __action_fn_t action)); + + +extern void * lfind __P((void * __key, void * __base, + size_t * __nmemb, size_t __size, + __compar_fn_t __compar)); + +extern void * lsearch __P((void * __key, void * __base, + size_t * __nmemb, size_t __size, + __compar_fn_t __compar)); + +#endif /* search.h */ diff --git a/src/nos/include/setjmp.h b/src/nos/include/setjmp.h new file mode 100644 index 00000000..35435665 --- /dev/null +++ b/src/nos/include/setjmp.h @@ -0,0 +1,29 @@ +/* setjmp.h + + Defines typedef and functions for setjmp/longjmp. + + Copyright (c) Borland International 1987,1988 + All Rights Reserved. +*/ +#if 1 /* Nick __STDC__ */ +#define _Cdecl +#else +#define _Cdecl cdecl +#endif + +#ifndef _SETJMP +#define _SETJMP +typedef struct { + unsigned int j_sp; + unsigned int j_ss; /* this will be ignored for large model */ + unsigned int j_bc; + unsigned int j_ix; + unsigned int j_iy; + unsigned int j_ip; + unsigned int j_cs; /* this will be ignored for large model */ +} jmp_buf[1]; + +void _Cdecl longjmp(jmp_buf jmpb, int retval); +int _Cdecl setjmp(jmp_buf jmpb); +#endif + diff --git a/src/nos/include/setjmp.h$ b/src/nos/include/setjmp.h$ new file mode 100644 index 00000000..2a96e863 --- /dev/null +++ b/src/nos/include/setjmp.h$ @@ -0,0 +1,38 @@ +#ifndef __SETJMP_H +#define __SETJMP_H +#ifndef __TYPES_H +#include +#endif + +#ifdef __TURBOC__ +/* + * I know most systems use an array of ints here, but I prefer this - RDB + */ +typedef struct { + unsigned int pc; + unsigned int sp; + unsigned int bp; + unsigned int si; + unsigned int di; +} jmp_buf[1]; +#else + +#ifdef HI_TECH_C + +typedef int jmp_buf[7]; + +#else + +#error fillin setjmp.h! + +#endif +#endif + +int setjmp __P((jmp_buf env)); +#if 1 +int longjmp __P((jmp_buf env, int rv)); /* Nick */ +#else +void longjmp __P((jmp_buf env, int rv)); +#endif + +#endif diff --git a/src/nos/include/setjmp.h% b/src/nos/include/setjmp.h% new file mode 100644 index 00000000..7a606308 --- /dev/null +++ b/src/nos/include/setjmp.h% @@ -0,0 +1,172 @@ +/* - SETJMP.H - + + The ANSI "setjmp" and "longjmp" function declarations. + + $Name: V3_34K V3_34J $ + + Copyright 1986 - 1999 IAR Systems. All rights reserved. +*/ + +#ifndef _SETJMP_INCLUDED +#define _SETJMP_INCLUDED + +/* #include "sysmac.h" Nick */ +/* - SYSMAC.H - + + Defines system macros to maintain source compatibility + with different IAR compilers. + + $Name: V3_34K V3_34J V3_34I V3_34H $ + + Copyright 1986 - 1999 IAR Systems. All rights reserved. +*/ + +#ifndef _SYSMAC_H_ +#define _SYSMAC_H_ + + +#if defined(__IAR_SYSTEMS_ICC) && !defined(__IAR_SYSTEMS_ICC__) +#define __IAR_SYSTEMS_ICC__ 1 +#endif + +#if __IAR_SYSTEMS_ICC__ > 4 +#error __IAR_SYSTEMS_ICC__ > 4 not available yet! +#endif + +#ifndef __CHAR_SIZE__ +#define __CHAR_SIZE__ sizeof(char) +#endif + +#ifndef __SHORT_SIZE__ +#define __SHORT_SIZE__ sizeof(short) +#endif + +#ifndef __INT_SIZE__ +#define __INT_SIZE__ sizeof(int) +#endif + +#ifndef __LONG_SIZE__ +#define __LONG_SIZE__ sizeof(long) +#endif + +#ifndef __FLOAT_SIZE__ +#define __FLOAT_SIZE__ sizeof(float) +#endif + +#ifndef __DOUBLE_SIZE__ +#define __DOUBLE_SIZE__ sizeof(double) +#endif + +#ifndef __LONG_DOUBLE_SIZE__ +#define __LONG_DOUBLE_SIZE__ sizeof(long double) +#endif + +#ifndef __SIZE_T_TYPE__ +#if sizeof((char*)0 - (char*)0) <= sizeof(int) +#define __SIZE_T_TYPE__ unsigned int +#else +#define __SIZE_T_TYPE__ unsigned long +#endif +#endif + +#ifndef __PTRDIFF_T_TYPE__ +#if sizeof((char*)0 - (char*)0) <= sizeof(int) +#define __PTRDIFF_T_TYPE__ unsigned int +#else +#define __PTRDIFF_T_TYPE__ unsigned long +#endif +#endif + +#ifndef __JMP_BUF_ELEMENT_TYPE__ +#ifndef __JMP_BUF_NUM_ELEMENTS__ +#define __JMP_BUF_ELEMENT_TYPE__ char +#ifndef __JMP_BUF__ +#define __JMP_BUF_NUM_ELEMENTS__ 8 +#else +#define __JMP_BUF_NUM_ELEMENTS__ __JMP_BUF__ +#endif +#endif +#endif + + +#define __INTRINSIC +#if __IAR_SYSTEMS_ICC__ >= 2 +#undef __INTRINSIC +#define __INTRINSIC __intrinsic +#endif + +/* Macro for frmwri and frmrd */ +#define VAPTR(T) (va_arg(ap, T *)) + +/* Typedefs put here to appear only once */ +/* typedef __SIZE_T_TYPE__ size_t; Nick */ +typedef __PTRDIFF_T_TYPE__ ptrdiff_t; + +#endif /* _SYSMAC_H_ */ +/* end of #include "sysmac.h" Nick */ + +/*==========================*/ +/* ICCH8500 ,ICCH83 and H8S */ +/* have word alignment. */ +/*==========================*/ +#if ((__TID__ >> 8) & 0x7f) == 9 \ + || ((__TID__ >> 8) & 0x7f) == 10 \ + || ((__TID__ >> 8) & 0x7f) == 27 +typedef short jmp_buf[__JMP_BUF_NUM_ELEMENTS__ >> 1]; +#else +typedef __JMP_BUF_ELEMENT_TYPE__ jmp_buf[__JMP_BUF_NUM_ELEMENTS__]; +#endif + +#if __IAR_SYSTEMS_ICC__ < 2 +#if __TID__ & 0x8000 +#pragma function=intrinsic(0) +#endif +#endif + +#ifndef MEMORY_ATTRIBUTE +#define MEMORY_ATTRIBUTE +#endif + + +/*======================*/ +/* ICCH83 can not be */ +/* completely ANSI for */ +/* the return value */ +/* type from 'setjump'. */ +/*----------------------*/ +/* Calls to 'longjmp' */ +/* and 'setjmp' must be */ +/* calls to standard */ +/* functions. */ +/*======================*/ +#if ((__TID__ & 0x7F00) >> 8) == 10 + +#if __IAR_SYSTEMS_ICC__ < 2 +#pragma function=__standard_function +MEMORY_ATTRIBUTE short setjmp(jmp_buf); +MEMORY_ATTRIBUTE void longjmp(jmp_buf, short); +#pragma function=default +#else +#error Make sure this pragma is supported when upgrading! +#endif + +/*======================*/ +/* Nothing special with */ +/* all the others. */ +/*======================*/ +#else + +__INTRINSIC MEMORY_ATTRIBUTE int setjmp(jmp_buf); +__INTRINSIC MEMORY_ATTRIBUTE void longjmp(jmp_buf, int); + +#endif + + + +#if __IAR_SYSTEMS_ICC__ < 2 +#if __TID__ & 0x8000 +#pragma function=default +#endif +#endif + +#endif /* _SETJMP_INCLUDED */ diff --git a/src/nos/include/sgtty.h b/src/nos/include/sgtty.h new file mode 100644 index 00000000..bc484575 --- /dev/null +++ b/src/nos/include/sgtty.h @@ -0,0 +1,38 @@ +#define TIOCGETP 0 +#define TIOCSETP 1 +#define TIOCSETN 2 +/** +#define TIOCEXCL 3 +#define TIOCNXCL 4 +#define TIOCHPCL 5 +**/ +#define TIOCFLUSH 6 +#define TIOCGETC 7 +#define TIOCSETC 8 +#define TIOCTLSET 9 +#define TIOCTLRES 10 + +#define XTABS 0006000 +#define UNBUFF 0000100 /* Nick */ +#define RAW 0000040 +#define CRMOD 0000020 +#define CRLF 0000020 +#define ECHO 0000010 +#define LCASE 0000004 +#define CBREAK 0000002 +#define COOKED 0000000 + + +struct sgttyb { + char sg_ispeed, sg_ospeed; + char sg_erase, sg_kill; + int sg_flags; +}; + +struct tchars { + char t_intrc,t_quit,t_start,t_stop,t_eof; +}; + +#define stty( fd, s) (ioctl(fd, TIOCSETP, s)) +#define gtty( fd, s) (ioctl(fd, TIOCGETP, s)) + diff --git a/src/nos/include/signal.h b/src/nos/include/signal.h new file mode 100644 index 00000000..70c7f45c --- /dev/null +++ b/src/nos/include/signal.h @@ -0,0 +1,99 @@ +#ifndef __SIGNAL_H +#define __SIGNAL_H +#ifndef __TYPES_H +#include +#endif + +#define NSIGS 16 /* Number of signals <= 16 */ + +#if 1 /* Nick, because the unix() system call needs integer parameters only */ +#define __NOTASIGNAL 0 +#define SIGHUP 1 /* Hangup detected on controlling terminal + or death of a controlling process */ +#define SIGINT 2 /* Interrupt from keyboard */ +#define SIGQUIT 3 /* Quit from keyboard */ +#define SIGILL 4 /* Illegal instruction */ +#define SIGTRAP 5 /* Trace/breakpoint trap */ +#define SIGIOT 6 /* IOT trap. A synonym for SIGABRT */ +#define SIGABRT SIGIOT /* Abort signal from abort */ +#define SIGUSR1 7 /* User's signal 1 */ +#define SIGUSR2 8 /* User's signal 2 */ +#define SIGKILL 9 /* Kill signal */ +#define SIGPIPE 10 /* Broken pipe: write to pipe with no readers */ +#define SIGALRM 11 /* Timer signal from alarm */ +#define SIGTERM 12 /* Termination signal */ +#define SIGURG 13 /* Urgent signal */ +#define SIGCONT 14 /* Continue process */ +#define SIGSTOP 15 /* Stop process */ +#define __NUMOFSIGNALS SIGSTOP +/* this signals defined only for compatibility */ +#define SIGBUS 16 /* Bus error */ +#define SIGFPE 17 /* Floating point exception */ +#define SIGSEGV 18 /* Invalid memory reference */ +#define SIGSYS 19 /* Bad argument to routine */ +#define SIGTTIN 20 +#define SIGTOUT 21 +typedef int signal_t; +#else +/* signals values */ +typedef enum { + __NOTASIGNAL = 0, + SIGHUP, /* Hangup detected on controlling terminal + or death of a controlling process */ + SIGINT, /* Interrupt from keyboard */ + SIGQUIT, /* Quit from keyboard */ + SIGILL, /* Illegal instruction */ + SIGTRAP, /* Trace/breakpoint trap */ + SIGIOT, /* IOT trap. A synonym for SIGABRT */ + SIGABRT = SIGIOT, /* Abort signal from abort */ + SIGUSR1, /* User's signal 1 */ + SIGUSR2, /* User's signal 2 */ + SIGKILL, /* Kill signal */ + SIGPIPE, /* Broken pipe: write to pipe with no readers */ + SIGALRM, /* Timer signal from alarm */ + SIGTERM, /* Termination signal */ + SIGURG, /* Urgent signal */ + SIGCONT, /* Continue process */ + SIGSTOP, /* Stop process */ +#define __NUMOFSIGNALS SIGSTOP + /* this signals defined only for compatibility */ + SIGBUS, /* Bus error */ + SIGFPE, /* Floating point exception */ + SIGSEGV, /* Invalid memory reference */ + SIGSYS, /* Bad argument to routine */ + SIGTTIN, + SIGTOUT +} signal_t; +#endif + +#if __NUMOFSIGNALS > NSIGS + error Too many signals defined +#endif + +#define sigmask(sig) (1<<((sig)-1)) /* signal mask */ + +typedef uint sigset_t; /* at least 16 bits */ + +/* Type of a signal handler. */ +#if 1 /* Nick, for IAR compiler large or banked memory model */ +typedef long sig_t; +#else +typedef void (*sig_t) __P((signal_t)); +#endif + +#define SIG_DFL ((sig_t)0) /* default signal handling */ +#define SIG_IGN ((sig_t)1) /* ignore signal */ +#define SIG_ERR ((sig_t)-1) /* error return from signal */ + +#if 0 +struct sigaction { + sig_t sa_handler; + sigset_t sa_mask; + uint sa_flags; + void (*sa_restorer)( /*void*/ ); +}; +#endif + +extern char *sys_siglist[]; + +#endif diff --git a/src/nos/include/stdarg.h b/src/nos/include/stdarg.h new file mode 100644 index 00000000..30dc3b51 --- /dev/null +++ b/src/nos/include/stdarg.h @@ -0,0 +1,37 @@ +#ifndef __STDARG_H +#define __STDARG_H + +#ifndef __VARARGS_H +#ifdef HI_TECH_C /* HTC-MSDOS STDARG.H */ + +typedef void *va_list[1]; +#define _STACK_ALIGN 2 +#define va_start(ap, parmn) *ap = (char *)&parmn + ((sizeof(parmn)+_STACK_ALIGN-1)&~(_STACK_ALIGN-1)) +#define va_arg(ap, type) (*(*(type **)ap)++) +#define va_end(ap) + +#else /* STDARG.H (TC2.0) */ + +typedef void *va_list; +#if 1 /* Nick for IAR convention */ +#define __VA_ALIGN 2 +#define __VA_SIZEOF(parm) \ + ((sizeof(parm) + (__VA_ALIGN - 1)) & ~(__VA_ALIGN - 1)) +#define va_start(ap, parm) \ + ((ap) = (char *)&(parm) + __VA_SIZEOF(parm)) +#define va_arg(ap, type) \ + (*(type *)((*(char **)&(ap) += __VA_SIZEOF(type)) - __VA_SIZEOF(type))) +#define va_copy(dest, src) \ + ((dest) = (src)) +#define va_end(ap) +#else +#define va_start(ap, p) (ap = (char *) (&(p)+1)) +#define va_arg(ap, type) ((type *) (((char *)ap) += sizeof(type)))[-1] +#define va_end(ap) +#endif + +#endif +#endif /* __VARARGS_H */ + +#endif /* __STDARG_H */ + diff --git a/src/nos/include/stdarg.h% b/src/nos/include/stdarg.h% new file mode 100644 index 00000000..2b7c2aea --- /dev/null +++ b/src/nos/include/stdarg.h% @@ -0,0 +1,310 @@ +/* - STDARG.H - + The ANSI macros for reading variable argument lists (...). + + $Name: V3_34K V3_34J V3_34I V3_34H $ + + Copyright 1986 - 1999 IAR Systems. All rights reserved. +*/ + +#ifndef _STDARG_H_ +#define _STDARG_H_ + +/* #include "sysmac.h" Nick */ +/* - SYSMAC.H - + + Defines system macros to maintain source compatibility + with different IAR compilers. + + $Name: V3_34K V3_34J V3_34I V3_34H $ + + Copyright 1986 - 1999 IAR Systems. All rights reserved. +*/ + +#ifndef _SYSMAC_H_ +#define _SYSMAC_H_ + + +#if defined(__IAR_SYSTEMS_ICC) && !defined(__IAR_SYSTEMS_ICC__) +#define __IAR_SYSTEMS_ICC__ 1 +#endif + +#if __IAR_SYSTEMS_ICC__ > 4 +#error __IAR_SYSTEMS_ICC__ > 4 not available yet! +#endif + +#ifndef __CHAR_SIZE__ +#define __CHAR_SIZE__ sizeof(char) +#endif + +#ifndef __SHORT_SIZE__ +#define __SHORT_SIZE__ sizeof(short) +#endif + +#ifndef __INT_SIZE__ +#define __INT_SIZE__ sizeof(int) +#endif + +#ifndef __LONG_SIZE__ +#define __LONG_SIZE__ sizeof(long) +#endif + +#ifndef __FLOAT_SIZE__ +#define __FLOAT_SIZE__ sizeof(float) +#endif + +#ifndef __DOUBLE_SIZE__ +#define __DOUBLE_SIZE__ sizeof(double) +#endif + +#ifndef __LONG_DOUBLE_SIZE__ +#define __LONG_DOUBLE_SIZE__ sizeof(long double) +#endif + +#ifndef __SIZE_T_TYPE__ +#if sizeof((char*)0 - (char*)0) <= sizeof(int) +#define __SIZE_T_TYPE__ unsigned int +#else +#define __SIZE_T_TYPE__ unsigned long +#endif +#endif + +#ifndef __PTRDIFF_T_TYPE__ +#if sizeof((char*)0 - (char*)0) <= sizeof(int) +#define __PTRDIFF_T_TYPE__ unsigned int +#else +#define __PTRDIFF_T_TYPE__ unsigned long +#endif +#endif + +#ifndef __JMP_BUF_ELEMENT_TYPE__ +#ifndef __JMP_BUF_NUM_ELEMENTS__ +#define __JMP_BUF_ELEMENT_TYPE__ char +#ifndef __JMP_BUF__ +#define __JMP_BUF_NUM_ELEMENTS__ 8 +#else +#define __JMP_BUF_NUM_ELEMENTS__ __JMP_BUF__ +#endif +#endif +#endif + + +#define __INTRINSIC +#if __IAR_SYSTEMS_ICC__ >= 2 +#undef __INTRINSIC +#define __INTRINSIC __intrinsic +#endif + +/* Macro for frmwri and frmrd */ +#define VAPTR(T) (va_arg(ap, T *)) + +/* Typedefs put here to appear only once */ +typedef __SIZE_T_TYPE__ size_t; +typedef __PTRDIFF_T_TYPE__ ptrdiff_t; + +#endif /* _SYSMAC_H_ */ +/* end of #include "sysmac.h" Nick */ + +#if __IAR_SYSTEMS_ICC__ >= 2 + +typedef void *va_list[1]; + +__INTRINSIC void __va_start(va_list); + +#define va_start(ap, parmN) __va_start(ap) +#define va_end(ap) ((void) 0) + +#ifdef __VA_STACK_DECREASING__ +#if __VA_STACK_DECREASING__ +#define va_arg(ap,type) (*(*(type **)ap)++) +#else +#define va_arg(ap,type) (*--(*(type **)ap)) +#endif +#endif + + +#else /* __IAR_SYSTEMS_ICC__ >= 2 */ + + +/*=====================================*/ +/* ICCZ80 version 1.00 - 3.xx */ +/*=====================================*/ +#if ((__TID__ >> 8) & 0x7f) == 4 + +#define _NOT_DEFAULT_BEHAVIOR + +typedef struct +{ + char *parm; + char *addr; + char argc; +} va_list[1]; + +#if __IAR_SYSTEMS_ICC__ < 2 +#if __TID__ & 0x8000 +#pragma function=intrinsic(0) +#endif +#endif + +#ifndef MEMORY_ATTRIBUTE +#define MEMORY_ATTRIBUTE +#endif + +__INTRINSIC MEMORY_ATTRIBUTE char *_get_varg(va_list ap, char type, char size); + +#if __IAR_SYSTEMS_ICC__ < 2 +#if __TID__ & 0x8000 +#pragma function=default +#endif +#endif + +#define va_start(ap,parmN) ((ap[0].addr = ((char *) &parmN) + sizeof(parmN)),\ + (ap[0].parm = _args$)) +#define va_arg(ap,mode) *(mode *) _get_varg (ap, _argt$(mode), sizeof(mode)) + +#define va_end(ap) ((void)0) +#endif + + +/*=====================================*/ +/* Stack grows in positiv direction. */ +/* CG-driver designed ICC only! */ +/* - - - - - - - - - - - - - - - - - - */ +/* ICC251 version 1.00 - */ +/*=====================================*/ +#if ((__TID__ >> 8) & 0x7f) == 36 + +#define _NOT_DEFAULT_BEHAVIOR + +typedef void *va_list[1]; + +#define va_start(ap,parmN) (ap[0] = ((char *) &parmN) - 1) +#define va_arg(ap,mode) (*--(*(mode **)ap)) + +#define va_end(ap) ((void)0) +#endif + + +/*=====================================*/ +/* Stack grows in positiv direction. */ +/* - - - - - - - - - - - - - - - - - - */ +/* ICC8051 version 1.00 - 3.10 */ +/* Single chip memory model */ +/* */ +/* ICC7700 version 1.00 - */ +/*=====================================*/ +#if ((__TID__ >> 8) == 1 && (__TID__ & 15) == 0) || \ + ((__TID__ >> 8) & 0x7f) == 19 + +#define _NOT_DEFAULT_BEHAVIOR + +typedef void *va_list[1]; + +#define va_start(ap,parmN) (ap[0] = (void*)&parmN) +#define va_arg(ap,mode) (*--(*(mode **)ap)) + +#define va_end(ap) ((void)0) +#endif + + +/*=====================================*/ +/* These targets has char pushed as */ +/* word on stack. */ +/* Stack grows in negativ direction. */ +/* (Old type of code-generators) */ +/* - - - - - - - - - - - - - - - - - - */ +/* ICCH8500 version 1.xx - */ +/* ICCH83 version 3.xx - */ +/* ICC78000 version 1.xx */ +/* ICC78300 version 1.xx */ +/* ICC78300 version 2.00 - */ +/* ICC78000 version 2.xx */ +/* ICCZ80 version 4.00 - */ +/*=====================================*/ +#if ((__TID__ >> 8) & 0x7f) == 9 || /* IANB 97.06.26 */ \ + ((__TID__ >> 8) & 0x7f) == 10 || /* IANB 97.06.26 */ \ + ((__TID__ >> 8) & 0x7f) == 15 || \ + ((__TID__ >> 8) & 0x7f) == 16 || \ + ((__TID__ >> 8) & 0x7f) == 20 || \ + ((__TID__ >> 8) & 0x7f) == 21 || /* IERA 94.01.16 */ \ + ((__TID__ >> 8) & 0x7f) == 23 /* IHAT 94.04.18 */ + +#define _NOT_DEFAULT_BEHAVIOR + +typedef void *va_list[1]; + +#define va_start(ap,parmN) \ + ap[0] = ((char *) &parmN) + (sizeof(parmN) > 1 ? sizeof(parmN) : 2) +#define va_arg(ap,mode) \ + (sizeof(mode) == 1 ? (*(mode *)(*(int **)ap)++) : \ + *(*(mode **) ap)++) + +#define va_end(ap) ((void)0) +#endif + + +/*=====================================*/ +/* These targets has char pushed as */ +/* word on stack. */ +/* Stack grows in negativ direction. */ +/* (New type of code-generators) */ +/* - - - - - - - - - - - - - - - - - - */ +/* ICC78400 version 1.00 - */ +/* ICC78000 version 3.xx */ +/* ICCCR16 - */ +/* ICCCR32 - */ +/*=====================================*/ +#if ((__TID__ >> 8) & 0x7f) == 29 || \ + ((__TID__ >> 8) & 0x7f) == 30 || /* IBEV 97.07.14 */ \ + ((__TID__ >> 8) & 0x7f) == 41 || /* IASL 97.06.09 */ \ + ((__TID__ >> 8) & 0x7f) == 42 /* IBEV 97.12.18 */ + +#define _NOT_DEFAULT_BEHAVIOR + +typedef void *va_list[1]; + +#define va_start(ap,parmN) ap[0] = ((char *) &parmN) + sizeof(parmN) +#define va_arg(ap,mode) \ + (sizeof(mode) < sizeof(int) ? (*(mode *)(*(int **)ap)++) : \ + *(*(mode **) ap)++) + +#define va_end(ap) ((void)0) +#endif + + +/*=====================================*/ +/* 8096 has char packed as low byte */ +/* in word on the stack. */ +/* - - - - - - - - - - - - - - - - - - */ +/* ICC8096 version 1.00 - */ +/*=====================================*/ +#if ((__TID__ >> 8) & 0x7f) == 6 /* ICLM 93.11.01 */ + +#define _NOT_DEFAULT_BEHAVIOR + +typedef void *va_list[1]; + +#define va_start(ap,parmN) ap[0] = ((char *) &parmN) + (sizeof(parmN) > 1 ? sizeof(parmN) : 2) + +#define va_arg(ap,mode) (*(*(mode **) ap)++) + +#define va_end(ap) ((void)0) +#endif + + +/*=====================================*/ +/* All ICC compilers except those */ +/* listed above. */ +/*=====================================*/ +#ifndef _NOT_DEFAULT_BEHAVIOR + +typedef void *va_list[1]; + +#define va_start(ap,parmN) ap[0] = ((char *) &parmN) + sizeof(parmN) +#define va_arg(ap,mode) (*(*(mode **) ap)++) + +#define va_end(ap) ((void)0) +#endif + +#endif /* __IAR_SYSTEMS_ICC__ >= 2 */ +#endif /* _STDARG_H_ */ + diff --git a/src/nos/include/stddef.h b/src/nos/include/stddef.h new file mode 100644 index 00000000..69ed6f4a --- /dev/null +++ b/src/nos/include/stddef.h @@ -0,0 +1,13 @@ +#ifndef __STDDEF_H +#define __STDDEF_H + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +#ifndef NULL +#define NULL 0 +#endif + +#endif /* __STDDEF_H */ diff --git a/src/nos/include/stdio.h b/src/nos/include/stdio.h new file mode 100644 index 00000000..59bcaa4a --- /dev/null +++ b/src/nos/include/stdio.h @@ -0,0 +1,167 @@ +#ifndef __STDIO_H +#define __STDIO_H +#ifndef __TYPES_H +#include +#endif +#include + +#ifndef SEEK_SET +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif + +#define _IOFBF 0x00 /* full buffering */ +#define _IOLBF 0x01 /* line buffering */ +#define _IONBF 0x02 /* no buffering */ +#define __MODE_BUF 0x03 /* Modal buffering dependent on isatty */ + +#define __MODE_FREEBUF 0x04 /* Buffer allocated with malloc, can free */ +#define __MODE_FREEFIL 0x08 /* FILE allocated with malloc, can free */ + +#define __MODE_READ 0x10 /* Opened in read only */ +#define __MODE_WRITE 0x20 /* Opened in write only */ +#define __MODE_RDWR 0x30 /* Opened in read/write */ + +#define __MODE_READING 0x40 /* Buffer has pending read data */ +#define __MODE_WRITING 0x80 /* Buffer has pending write data */ + +#define __MODE_EOF 0x100 /* EOF status */ +#define __MODE_ERR 0x200 /* Error status */ +#define __MODE_UNGOT 0x400 /* Buffer has been polluted by ungetc */ + +#ifdef __MSDOS__ +#define __MODE_IOTRAN 0x1000 /* MSDOS nl <-> cr,nl translation */ +#else +#define __MODE_IOTRAN 0 +#endif + +/* when you add or change fields here, be sure to change the initialization + * in stdio_init and fopen */ +struct __stdio_file { + uchar *bufpos; /* the next byte to write to or read from */ + uchar *bufread; /* the end of data returned by last read() */ + uchar *bufwrite; /* highest address writable by macro */ + uchar *bufstart; /* the start of the buffer */ + uchar *bufend; /* the end of the buffer; ie the byte after + the last malloc()ed byte */ + int fd; /* the file descriptor associated with the stream */ + int mode; + char unbuf[8]; /* The buffer for 'unbuffered' streams */ + struct __stdio_file * next; +}; + +#define EOF (-1) +#ifndef NULL +#define NULL (0) +#endif + +typedef struct __stdio_file FILE; + +extern FILE stdin[1]; +extern FILE stdout[1]; +extern FILE stderr[1]; + +#if 1 /* Nick, we want smaller code size, and "Inline_init", def x__MSDOS__ */ +#define putc(c, fp) fputc(c, fp) +#define getc(fp) fgetc(fp) +#else +#define putc(c, stream) \ + (((stream)->bufpos >= (stream)->bufwrite) ? \ + fputc((c), (stream)) : \ + (uchar) (*(stream)->bufpos++ = (c))) +#define getc(stream) \ + (((stream)->bufpos >= (stream)->bufread) ? \ + fgetc(stream) : \ + (*(stream)->bufpos++)) +#endif + +#define putchar(c) putc((c), stdout) +#define getchar() getc(stdin) + +extern char *gets __P((char *)); + +extern int _putchar __P((int)); +extern int _getchar __P((void)); + +#define ferror(fp) (((fp)->mode&__MODE_ERR) != 0) +#define feof(fp) (((fp)->mode&__MODE_EOF) != 0) +#define clearerr(fp) ((fp)->mode &= ~(__MODE_EOF|__MODE_ERR)) +#define fileno(fp) ((fp)->fd) + +/* These two call malloc */ +extern int setvbuf __P((FILE*, char*, int, size_t)); +#define setlinebuf(__fp) setvbuf((__fp), (char*)0, _IOLBF, 0) + +/* These don't */ +extern void setbuffer __P((FILE*, char*, size_t)); +#define setbuf(__fp, __buf) setbuffer((__fp), (__buf), BUFSIZ) + +extern int fgetc __P((FILE*)); +extern int fputc __P((int, FILE*)); +extern int ungetc __P((int, FILE*)); + +extern int fclose __P((FILE*)); +extern int fflush __P((FILE*)); +#define stdio_pending(fp) ((fp)->bufread > (fp)->bufpos) +extern char *fgets __P((char*, size_t, FILE*)); +extern FILE *__fopen __P((char*, int, FILE*, char*)); + +#if 1 +#define fopen(__file, __mode) __fopen((__file), -1, (FILE*)0, (__mode)) +#define freopen(__file, __mode, __fp) __fopen((__file), -1, (__fp), (__mode)) +#define fdopen(__file, __mode) __fopen((char*)0, (__file), (FILE*)0, (__mode)) +#else +extern FILE * fopen __P((char *__file, char *__mode)); +extern FILE * freopen __P((char *__file, char *__mode, int __fp)); +extern FILE * fdopen __P((int __fd, char *__mode)); +#endif + +extern int fputs __P((void *, FILE*)); +extern int puts __P((void *)); + +extern int fread __P((void *, size_t, size_t, FILE *)); +extern int fwrite __P((void *, size_t, size_t, FILE *)); + +extern int fseek __P((FILE *fp, long offset, int whence)); +extern long ftell __P((FILE *fp)); + +extern int printf __P((char*, ...)); +extern int fprintf __P((FILE*, char*, ...)); +extern int sprintf __P((char*, char*, ...)); + +extern int vprintf __P((char*, va_list)); +extern int vfprintf __P((FILE*, char*, va_list)); +extern int vsprintf __P((char*, char*, va_list)); + +#if 0 +typedef int (*_printer_func_t) __P((int, void *)); +extern int _vprinter(_printer_func_t prt, void *, char *, ...)); +#endif + +#if 1 /* Nick see vprinter.c */ +int __vprinter __P((unsigned (*pp)(void *, unsigned, FILE *), FILE *op, + char *fmt, va_list ap)); +unsigned int __fputter __P((void *buffer, unsigned int count, FILE *op)); +unsigned int __sputter __P((void *buffer, unsigned int count, FILE *op)); +#endif + +extern int scanf __P((char*, ...)); +extern int fscanf __P((FILE*, char*, ...)); +extern int sscanf __P((char*, char*, ...)); + +extern int vscanf __P((char*, va_list)); +extern int vfscanf __P((FILE*, char*, va_list)); +extern int vsscanf __P((char*, char*, va_list)); + +extern void perror __P((char *__s)); +extern char *strerror __P((int __errno)); + +extern char *tmpnam __P((char *buf)); + +extern int rename __P((char *oldname, char *newname)); +extern void rewind __P((FILE *fp)); +extern FILE *popen __P((char *, char *)); +extern int pclose __P((FILE *)); + +#endif /* __STDIO_H */ diff --git a/src/nos/include/stdlib.h b/src/nos/include/stdlib.h new file mode 100644 index 00000000..0db9559b --- /dev/null +++ b/src/nos/include/stdlib.h @@ -0,0 +1,93 @@ +#ifndef __STDLIB_H +#define __STDLIB_H +#ifndef __TYPES_H +#include +#endif +#include + +/* Don't overwrite user definitions of NULL */ +#ifndef NULL +#define NULL ((void *) 0) +#endif + +/* Returned by `div' */ +typedef struct { + int quot; /* Quotient */ + int rem; /* Remainder */ +} div_t; + +/* Returned by `ldiv' */ +typedef struct { + long int quot; /* Quotient */ + long int rem; /* Remainder */ +} ldiv_t; + +/* For program termination */ +#define EXIT_FAILURE 1 +#define EXIT_SUCCESS 0 + +extern void _exit __P((int)); +extern void exit __P((int)); +extern void abort __P((void)); + +extern unsigned int sleep __P((unsigned int seconds)); + +extern int rand __P((void)); +extern void srand __P((uint seed)); + +extern char *__longtoa __P((unsigned long, char *, int, char, char)); +extern char *itoa __P((int value, char *strP, int radix)); +extern char *ultoa __P((unsigned long value, char *strP, int radix)); +extern char *ltoa __P((long value, char *strP, int radix)); + +extern int atoi __P((char *str)); +extern long atol __P((char *strP)); + +extern char *_itoa __P((int value)); +extern char *_ltoa __P((long value)); +extern char *_ultoa __P((unsigned long value)); + +extern char *ultostr __P((unsigned long value, int radix)); +extern char *ltostr __P((long value, int radix)); + +extern long strtol __P ((char * nptr, char ** endptr, int base)); +extern unsigned long strtoul __P ((char * nptr, + char ** endptr, int base)); +#ifndef __HAS_NO_FLOATS__ +extern double strtod __P ((char * nptr, char ** endptr)); +#endif + +extern char **environ; +extern char *getenv __P((char *)); +extern int putenv __P((char *)); +extern int setenv __P((char *, char *, int)); +extern void unsetenv __P((char *)); + +typedef void (*atexit_t) __P((int)); +typedef void (*onexit_t) __P((int, void *)); +extern int atexit __P((atexit_t)); +extern int on_exit __P((onexit_t, void *arg)); +extern onexit_t __cleanup; + +extern char *crypt __P((char *__key, char *__salt)); + +typedef int (*cmp_func_t) __P((void *, void *)); + +extern int _bsearch; +extern void *bsearch __P((void *key, void *base, size_t num, size_t size, cmp_func_t cmp)); +extern void *lfind __P((void *key, void *base, size_t *num, size_t size, cmp_func_t cmp)); +extern void *lsearch __P((void *key, void *base, size_t *num, size_t size, cmp_func_t cmp)); +extern void *_qbuf; +extern void qsort __P((void *base, size_t num, size_t size, cmp_func_t cmp)); + +extern int opterr; +extern int optind; +extern char *optarg; +extern int getopt __P((int argc, char *argv[], char *optstring)); + +extern char *getpass(char *prompt); + +extern int _argc; +extern char **_argv; + +#endif /* __STDLIB_H */ diff --git a/src/nos/include/string.h b/src/nos/include/string.h new file mode 100644 index 00000000..c8578ffb --- /dev/null +++ b/src/nos/include/string.h @@ -0,0 +1,99 @@ +#ifndef __STRING_H +#define __STRING_H +#ifndef __TYPES_H +#include +#endif +#include + +#ifdef _MSX_DOS /* HI-TECH-C/MSX-DOS STRING.H */ + +/* String functions */ + +#ifndef _STDDEF +typedef int ptrdiff_t; /* result type of pointer difference */ +typedef unsigned size_t; /* type yielded by sizeof */ +#define _STDDEF +#define offsetof(ty, mem) ((int)&(((ty *)0)->mem)) +#endif /* _STDDEF Nick */ + +#ifndef NULL +#define NULL ((void *)0) +#endif /* NULL Nick */ + +extern int errno; /* system error number */ + +extern void * memcpy __P ((void *, const void *, size_t)); +extern void * memmove __P ((void *, const void *, size_t)); +extern char * strcpy __P ((char*, const char *)); +extern char * strncpy __P ((char *, const char *, size_t)); +extern char * strcat __P ((char*, const char *)); +extern char * strncat __P ((char *, const char *, size_t)); +extern int memcmp __P ((const void *, const void *, size_t)); +extern int strcmp __P ((const char*, const char *)); +extern int strncmp __P ((const char *, const char *, size_t)); +extern size_t strcoll __P ((char *, size_t, const char *)); +extern void * memchr __P ((const void *, int, size_t)); +extern size_t strcspn __P ((const char *, const char *)); +extern char * strpbrk __P ((char *, char *)); +extern size_t strspn __P ((const char *, const char *)); +extern char * strstr __P ((const char *, const char *)); +extern char * strtok __P ((char *, const char *)); +extern void * memset __P ((void *, int, size_t)); +extern char * strerror __P ((int)); +extern size_t strlen __P ((const char *)); +extern char * strchr __P ((const char *, int)); +extern char * strrchr __P ((const char *, int)); + +#else /* UZIX-hosted STRING.H */ + +/* Basic string functions */ +extern size_t strlen __P ((const char * __str)); + +extern char * strcat __P ((char *, const char *)); +extern char * strcpy __P ((char *, const char *)); +extern int strcmp __P ((const char *, const char *)); + +extern char * strncat __P ((char *, const char *, size_t)); +extern char * strncpy __P ((char *, const char *, size_t)); +extern int strncmp __P((const char *, const char *, size_t)); + +extern int stricmp __P((const char *, const char *)); +extern strnicmp __P((const char *, const char *, size_t)); + +extern char * strchr __P ((const char *, int)); +extern char * strrchr __P ((const char *, int)); +extern char * strdup __P ((const char *)); + +/* Basic mem functions */ +extern void * memcpy __P ((void *, const void *, size_t)); +extern void * memccpy __P ((void *, const void *, int, size_t)); +extern void * memchr __P ((const void *, int, size_t)); +extern void * memset __P ((void *, int, size_t)); +extern int memcmp __P ((const void *, const void *, size_t)); + +extern void * memmove __P ((void *, const void *, size_t)); + +/* BSDisms */ +#define index strchr +#define rindex strrchr +#define strcasecmp stricmp +#define strncasecmp strnicmp + +/* Other common BSD functions */ +char *strpbrk __P ((const char *, const char *)); +char *strsep __P ((char **, const char *)); +char *strstr __P ((const char *, const char *)); +char *strtok __P ((char *, const char *)); +size_t strcspn __P ((const char *, const char *)); +size_t strspn __P ((const char *, const char *)); + +#ifdef z80 +#pragma inline(memcpy) +#pragma inline(memset) +#pragma inline(strcpy) +#pragma inline(strlen) +#pragma inline(strcmp) +#endif + +#endif /* END OF DEFINITION STRING.H */ +#endif diff --git a/src/nos/include/strings.h b/src/nos/include/strings.h new file mode 100644 index 00000000..05041a20 --- /dev/null +++ b/src/nos/include/strings.h @@ -0,0 +1,3 @@ +#ifndef __STRING_H +#include +#endif diff --git a/src/nos/include/sys/cdefs.h b/src/nos/include/sys/cdefs.h new file mode 100644 index 00000000..8bf22d29 --- /dev/null +++ b/src/nos/include/sys/cdefs.h @@ -0,0 +1,24 @@ +#ifndef _SYS_CDEFS_H +#define _SYS_CDEFS_H +#ifndef __FEATURES_H +#include +#endif + +#ifdef __TURBOC__ +#define __CONCAT(x,y) x ## y +#define __STRING(x) #x +#else +#ifdef __STDC__ +#define __CONCAT(x,y) x ## y +#define __STRING(x) #x +#else +#define __CONCAT(x,y) x/**/y +#define __STRING(x) "x" +#endif /* __STDC__ */ +#endif /* __TURBOC__ */ + +/* This is not a typedef so `const __ptr_t' does the right thing */ +/* For K&R 'void' defined as 'char' */ +#define __ptr_t void * + +#endif diff --git a/src/nos/include/sys/exec.h b/src/nos/include/sys/exec.h new file mode 100644 index 00000000..e96f9483 --- /dev/null +++ b/src/nos/include/sys/exec.h @@ -0,0 +1,4 @@ +#ifndef _SYS_EXEC_H +#define _SYS_EXEC_H + +#endif diff --git a/src/nos/include/sys/ioctl.h b/src/nos/include/sys/ioctl.h new file mode 100644 index 00000000..c1d308c9 --- /dev/null +++ b/src/nos/include/sys/ioctl.h @@ -0,0 +1,38 @@ +#ifndef _SYS_IOCTL_H +#define _SYS_IOCTL_H + +typedef enum { + GI_PTAB = -1, /* processes table */ + GI_ITAB = -2, /* inodes table */ + GI_BTAB = -3, /* buffers table */ + GI_FTAB = -4, /* filesystems table */ + GI_UDAT = -5, /* process user data */ + GI_UTAB = -6, /* current process table */ + GI_PDAT = -7, /* process info */ + GI_KDAT = -8 /* kernel info */ +} getinfo_t; + +/* control of /dev/mem device */ +#define MEM_INFO 0 + +#if 0 /* Nick, it conflicts with TIOCSETP etc, see c:\uzi\include\sgtty.h */ +/* control of /dev/tty device */ +#define TTY_COOKED 0 /* buffered */ +#define TTY_RAW 1 /* unbuffered, wait */ +#define TTY_RAW_UNBUFF 2 /* unbuffered, no wait */ +#endif + +struct swap_mmread { + uchar mm[2]; + uint offset; + uint size; + uchar *buf; +}; + +typedef struct { + getinfo_t req; + size_t size; + void *ptr; +} info_t; + +#endif diff --git a/src/nos/include/sys/mount.h b/src/nos/include/sys/mount.h new file mode 100644 index 00000000..65a85fb5 --- /dev/null +++ b/src/nos/include/sys/mount.h @@ -0,0 +1,2 @@ +/* mount.h by Nick */ + diff --git a/src/nos/include/sys/poll.h b/src/nos/include/sys/poll.h new file mode 100644 index 00000000..156b4a7c --- /dev/null +++ b/src/nos/include/sys/poll.h @@ -0,0 +1,7 @@ +/* poll.h by Nick */ + +typedef struct + { + int dummy; + } pollfd; + diff --git a/src/nos/include/sys/seek.h b/src/nos/include/sys/seek.h new file mode 100644 index 00000000..a5d740ce --- /dev/null +++ b/src/nos/include/sys/seek.h @@ -0,0 +1,19 @@ +#ifndef _SYS_SEEK_H +#define _SYS_SEEK_H + +#ifndef SEEK_OSET +#define SEEK_OSET 0 +#define SEEK_OCUR 1 +#define SEEK_OEND 2 +#define SEEK_BSET 3 +#define SEEK_BCUR 4 +#define SEEK_BEND 5 +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif + +#endif /* _SYS_SEEK_H */ diff --git a/src/nos/include/sys/select.h b/src/nos/include/sys/select.h new file mode 100644 index 00000000..46504684 --- /dev/null +++ b/src/nos/include/sys/select.h @@ -0,0 +1,12 @@ +/* select.h by Nick */ + +typedef struct + { + int dummy; + } fd_set; + +typedef struct + { + int dummy; + } timeval; + diff --git a/src/nos/include/sys/socket.h b/src/nos/include/sys/socket.h new file mode 100644 index 00000000..448cfb83 --- /dev/null +++ b/src/nos/include/sys/socket.h @@ -0,0 +1,9 @@ +/* socket.h by Nick */ + +typedef int socklen_t; + +typedef struct + { + int dummy; + } sockaddr; + diff --git a/src/nos/include/sys/stat.h b/src/nos/include/sys/stat.h new file mode 100644 index 00000000..953a73d9 --- /dev/null +++ b/src/nos/include/sys/stat.h @@ -0,0 +1,79 @@ +#ifndef _SYS_STAT_H +#define _SYS_STAT_H + +#define S_IFMT 0170000 /* file type mask */ +#if 1 /* Nick */ +#define S_IFALIGN 0120000 /* regular file, XIP aligned */ +#endif +#define S_IFLNK 0110000 /* symbolic link */ +#define S_IFREG 0100000 /* or just 000000, regular */ +#define S_IFBLK 0060000 /* block special */ +#define S_IFDIR 0040000 /* directory */ +#define S_IFCHR 0020000 /* character special */ +#define S_IFPIPE 0010000 /* pipe */ + +#define S_UMASK 07777 /* bits modifiable by chmod */ + +#define S_ISUID 04000 /* set euid to file uid */ +#define S_ISGID 02000 /* set egid to file gid */ +#define S_ISVTX 01000 /* */ + +#define S_IREAD 0400 /* owner may read */ +#define S_IWRITE 0200 /* owner may write */ +#define S_IEXEC 0100 /* owner may execute */ + +#define S_IGREAD 0040 /* group may read */ +#define S_IGWRITE 0020 /* group may write */ +#define S_IGEXEC 0010 /* group may execute */ + +#define S_IOREAD 0004 /* other may read */ +#define S_IOWRITE 0002 /* other may write */ +#define S_IOEXEC 0001 /* other may execute */ + +#define S_IRWXU 00700 +#define S_IRUSR 00400 +#define S_IWUSR 00200 +#define S_IXUSR 00100 + +#define S_IRWXG 00070 +#define S_IRGRP 00040 +#define S_IWGRP 00020 +#define S_IXGRP 00010 + +#define S_IRWXO 00007 +#define S_IROTH 00004 +#define S_IWOTH 00002 +#define S_IXOTH 00001 + +#ifdef __KERNEL__ +#define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO) +#define S_IALLUGO (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO) +#define S_IRUGO (S_IRUSR|S_IRGRP|S_IROTH) +#define S_IWUGO (S_IWUSR|S_IWGRP|S_IWOTH) +#define S_IXUGO (S_IXUSR|S_IXGRP|S_IXOTH) +#endif + +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISPIPE(m) (((m) & S_IFMT) == S_IFPIPE) + +#if 1 /* Nick */ +#define S_ISDEV(m) (S_ISCHR(m) || S_ISBLK(m)) +#else +#define S_ISDEV(m) (((m) & S_IFMT) & S_IFCHR) +#endif + +#if 1 /* Nick */ +#define S_ISALIGN(m) (((m) & S_IFMT) == S_IFALIGN) +#define S_ISREGALIGN(m) (S_ISREG(m) || S_ISALIGN(m)) +#endif + +#if 1 /* Nick free bitmap */ +#define XIP_ALIGN 0 +#define XIP_UALIGN 1 +#endif + +#endif diff --git a/src/nos/include/sys/timeb.h b/src/nos/include/sys/timeb.h new file mode 100644 index 00000000..041f8be3 --- /dev/null +++ b/src/nos/include/sys/timeb.h @@ -0,0 +1,17 @@ +/* timeb.h by Nick for UZI C library */ + +#ifndef __TIMEB_H +#define __TIMEB_H + +struct timeb + { + time_t time; /* Seconds portion of the current time */ + unsigned short millitm; /* Millisecs portion of the current time */ + short timezone; /* The local timezone in minutes west of Greenwich */ + short dstflag; /* TRUE if Daylight Savings Time is in effect */ + }; + +int ftime(struct timeb *); /* LEGACY */ + +#endif + diff --git a/src/nos/include/sys/types.h b/src/nos/include/sys/types.h new file mode 100644 index 00000000..20a63fbd --- /dev/null +++ b/src/nos/include/sys/types.h @@ -0,0 +1,115 @@ +#ifndef __TYPES_H +#define __TYPES_H + +#ifndef __FEATURES_H +#include "features.h" +#endif + +/* USER! basic data types */ +/* ! uchar & uint is counterparts and must be declared simultaneously */ +#ifndef uchar_is_defined +#define uchar_is_defined +typedef unsigned char uchar; +typedef unsigned int uint; +#endif + +typedef uchar bool_t; /* boolean value */ +typedef uint count_t; /* counter for anything */ +#ifndef _SIZE_T +#define _SIZE_T +typedef uint size_t; +#endif +#ifndef _SSIZE_T +#define _SSIZE_T +typedef int ssize_t; +#endif + +typedef unsigned int mode_t; +#if 0 /* Nick, see unix.h !! */ +typedef struct blkoff_t { + uint/*16*/ o_blkno; /* Block number */ + int/*16*/ o_offset; /* Offset within block 0-511 */ +} blkoff_t; +#endif +typedef long off_t; + +#if 1 /* halfway compatibility measure by Nick, the struct is the same size */ +/* file's timestamp structure (non UNIX-standard) */ +typedef struct s_time { + uint t_time; + uint t_date; +} dostime_t; +#endif +typedef unsigned long time_t; + +/* User's structure for times() system call */ +struct tms { + time_t tms_utime; + time_t tms_stime; + time_t tms_cutime; + time_t tms_cstime; + time_t tms_etime; /* Elapsed real time */ +}; + +#ifndef utimbuf_is_defined +#define utimbuf_is_defined +/* User's structure for utime() system call */ +struct utimbuf { + time_t actime; + time_t modtime; +}; +#endif + +/* data structure for stat() */ +struct stat { /* USER! Really only used by users */ + uint st_dev; /* device number */ + uint st_ino; /* inode number */ + mode_t st_mode; /* file mode */ + uint st_nlink; /* number of links */ + uint st_uid; /* owner id */ + uint st_gid; /* owner group */ + uint st_rdev; /* */ + off_t st_size; /* Nick changed blkoff_t to off_t file size */ + time_t st_atime; /* last access time */ + time_t st_mtime; /* last modification time */ + time_t st_ctime; /* file creation time */ +}; + +#define DIRNAMELEN 14 + +/* device directory entry */ +typedef struct direct { + unsigned int d_ino; /* file's inode */ + uchar d_name[DIRNAMELEN]; /* file name */ +} direct_t; + +#ifndef NULL +#define NULL 0 +#endif + +#if 0 /* Nick see z80/asm.h */ +#define BUFSIZE 512 /* uzix buffer/block size */ +#define BUFSIZELOG 9 /* uzix buffer/block size log2 */ + +#if 1 /* Nick free bitmap */ +#define REGION_LOG 14 +#define REGION_BYTES (1< +#endif + +struct utsname { + char sysname[14]; + char nodename[14]; + char release[8]; + char version[8]; + char machine[8]; + char domainname[14]; +}; + +extern int uname __P ((struct utsname * __utsbuf)); + +#endif diff --git a/src/nos/include/sys/wait.h b/src/nos/include/sys/wait.h new file mode 100644 index 00000000..e8aa1376 --- /dev/null +++ b/src/nos/include/sys/wait.h @@ -0,0 +1,48 @@ +#ifndef _SYS_WAIT_H +#define _SYS_WAIT_H +#ifndef __TYPES_H +#include +#endif + +/* Bits in the third argument to `waitpid'. */ +#define WNOHANG 1 /* Don't block waiting. */ +#define WUNTRACED 2 /* Report status of stopped children. */ + +/* Everything extant so far uses these same bits. */ +/* If WIFEXITED(STATUS), the low-order 8 bits of the status. */ +#define WEXITSTATUS(status) (((status) & 0xff00) >> 8) + +/* If WIFSIGNALED(STATUS), the terminating signal. */ +#define WTERMSIG(status) ((status) & 0x7f) + +/* If WIFSTOPPED(STATUS), the signal that stopped the child. */ +#define WSTOPSIG(status) WEXITSTATUS(status) + +/* Nonzero if STATUS indicates normal termination. */ +#define WIFEXITED(status) (((status) & 0xff) == 0) + +/* Nonzero if STATUS indicates termination by a signal. */ +#define WIFSIGNALED(status) (((unsigned int)((status)-1) & 0xFFFF) < 0xFF) + +/* Nonzero if STATUS indicates the child is stopped. */ +#define WIFSTOPPED(status) (((status) & 0xff) == 0x7f) + +/* Nonzero if STATUS indicates the child dumped core. */ +#define WCOREDUMP(status) ((status) & 0200) + +/* Macros for constructing status values. */ +#define W_EXITCODE(ret, sig) ((ret) << 8 | (sig)) +#define W_STOPCODE(sig) ((sig) << 8 | 0x7f) + +/* Special values for the PID argument to `waitpid' and `wait4'. */ +#define WAIT_ANY (-1) /* Any process. */ +#define WAIT_MYPGRP 0 /* Any process in my process group. */ + +extern int waitpid __P((int pid, int *__stat_loc, int options)); + +/* Wait for a child to die. When one does, put its status in *STAT_LOC + and return its process ID. For errors, return (pid_t) -1. + */ +#define wait(statloc) waitpid(WAIT_ANY, statloc, 0) + +#endif diff --git a/src/nos/include/syscalls.h b/src/nos/include/syscalls.h new file mode 100644 index 00000000..dc2de299 --- /dev/null +++ b/src/nos/include/syscalls.h @@ -0,0 +1,199 @@ +/* SYSCALLS.H + */ +#ifndef __SYSCALLS_H +#define __SYSCALLS_H +#ifndef __TYPES_H +#include +#endif +#ifndef __SIGNAL_H +#include +#endif + +#ifndef __VENDOR_H /* Nick */ +#include /* Nick */ +#endif /* Nick */ + +#ifndef __DOS__ + +extern int errno; + +#ifndef __STDLIB_H +extern void _exit __P((int val)); +#endif + +extern int access __P((char *path, int mode)); +extern int alarm __P((uint secs)); +extern int brk __P((char *addr)); +extern int chdir __P((char *dir)); +extern int chroot __P((char *dir)); +extern int chmod __P((char *path, mode_t mode)); +extern int chown __P((char *path, int owner, int group)); +extern int close __P((int uindex)); +extern int creat __P((const char *name, mode_t mode)); +extern int dup __P((int oldd)); +extern int dup2 __P((int oldd, int newd)); +extern int execve __P((char *name, char *argv[], char *envp[])); +extern int fork __P((void)); +extern int fstat __P((int fd, struct stat *buf)); /* Nick void *buf)); */ +#if 1 /* Nick free bitmap */ +extern int falign __P((int fd, int parm)); +#endif +extern int getfsys __P((int dev, void *buf)); +extern int getgid __P((void)); +extern int getpid __P((void)); +extern int getppid __P((void)); +extern int getuid __P((void)); +extern int geteuid __P((void)); +extern int getegid __P((void)); +extern int getprio __P((void)); +#ifndef SKIP_SYSCALLS +extern int ioctl __P((int fd, int request, ...)); +#endif +extern int kill __P((int pid, int sig)); +extern int link __P((char *oldname, char *newname)); +extern int symlink __P((char *oldname, char *newname)); +extern int mknod __P((char *name, mode_t mode, int dev)); +extern int mkfifo __P((char *name, mode_t mode)); +extern int mount __P((char *spec, char *dir, int rwflag)); +#ifndef SKIP_SYSCALLS +extern int open __P((const char *name, int flag, ...)); /* Nick uint */ +#endif +extern int pause __P((void)); +extern int pipe __P((int fildes[2])); +extern int read __P((int d, void *buf, size_t nbytes)); +extern int sbrk __P((uint incr)); +extern off_t lseek __P((int file, off_t offset, int whence)); +extern int setgid __P((int gid)); +extern int setuid __P((int uid)); +extern int setprio __P((int pid, char prio)); +extern sig_t signal __P((signal_t sig, sig_t func)); +extern int stat __P((char *path, struct stat *buf)); /* Nick void *buf)); */ +extern int stime __P((time_t *tvec)); +extern void sync __P((void)); /* Nick int sync __P((void)); */ +extern time_t time __P((time_t *tvec)); +extern int times __P((struct tms *buf)); +extern int utime __P((char *path, struct utimbuf *buf)); +extern int umask __P((int mask)); +extern int umount __P((char *spec)); +extern int unlink __P((const char *path)); +extern int wait __P((int *statloc)); +extern int write __P((int d, const void *buf, size_t nbytes)); +extern int reboot __P((char p1, char p2)); +extern int systrace __P((int onoff)); +#if 1 /* Nick */ +extern int sysdebug __P((int onoff)); +#endif + +extern int _access __P((char *path, int mode)); +extern int _alarm __P((uint secs)); +extern int _brk __P((char *addr)); +extern int _chdir __P((char *dir)); +extern int _chroot __P((char *dir)); +extern int _chmod __P((char *path, mode_t mode)); +extern int _chown __P((char *path, int owner, int group)); +extern int _close __P((int uindex)); +extern int _creat __P((const char *name, mode_t mode)); +extern int _dup __P((int oldd)); +extern int _dup2 __P((int oldd, int newd)); +extern int _execve __P((char *name, char *argv[], char *envp[])); +extern int _fork __P((void)); +extern int _fstat __P((int fd, struct stat *buf)); /* Nick void *buf)); */ +#if 1 /* Nick free bitmap */ +extern int _falign __P((int fd, int parm)); +#endif +extern int _getfsys __P((int dev, void *buf)); +extern int _getgid __P((void)); +extern int _getpid __P((void)); +extern int _getppid __P((void)); +extern int _getuid __P((void)); +extern int _geteuid __P((void)); +extern int _getegid __P((void)); +extern int _getprio __P((void)); +#ifndef SKIP_SYSCALLS +extern int _ioctl __P((int fd, int request, ...)); +#endif +extern int _kill __P((int pid, int sig)); +extern int _link __P((char *oldname, char *newname)); +extern int _symlink __P((char *oldname, char *newname)); +extern int _mknod __P((char *name, mode_t mode, int dev)); +extern int _mkfifo __P((char *name, mode_t mode)); +extern int _mount __P((char *spec, char *dir, int rwflag)); +#ifndef SKIP_SYSCALLS +extern int _open __P((const char *name, int flag, ...)); /* Nick uint */ +#endif +extern int _pause __P((void)); +extern int _pipe __P((int fildes[2])); +extern int _read __P((int d, void *buf, size_t nbytes)); +extern int _sbrk __P((uint incr)); +extern off_t _lseek __P((int file, off_t offset, int whence)); +extern int _setgid __P((int gid)); +extern int _setuid __P((int uid)); +extern int _setprio __P((int pid, char prio)); +extern sig_t _signal __P((signal_t sig, sig_t func)); +extern int _stat __P((char *path, struct stat *buf)); /* Nick void *buf)); */ +extern int _stime __P((time_t *tvec)); +extern void _sync __P((void)); /* Nick int sync __P((void)); */ +extern time_t _time __P((time_t *tvec)); +extern int _times __P((struct tms *buf)); +extern int _utime __P((char *path, struct utimbuf *buf)); +extern int _umask __P((int mask)); +extern int _umount __P((char *spec)); +extern int _unlink __P((const char *path)); +extern int _wait __P((int *statloc)); +extern int _write __P((int d, const void *buf, size_t nbytes)); +extern int _reboot __P((char p1, char p2)); +extern int _systrace __P((int onoff)); +#if 1 /* Nick */ +extern int _sysdebug __P((int onoff)); +#endif + +extern int unix __P((int callno, ...)); /* ensures IAR doesn't use regparms */ +extern long unix_long __P((int callno, ...)); /* ensures IAR doesn't use reg */ + +#ifdef UZIX_MODULE +extern int modulereg __P((uint sig, int (*func)())); +extern int moduledereg __P((uint sig)); +extern int modulecall __P((uint sig, uint fcn, char *args, int argsize)); +extern int modulereply __P((uint sig, int fcn, char *repladdr)); +extern int modulesendreply __P((int pid, int fcn, char *repladdr, int replysize)); +#endif + +#else /* running under MS-DOS */ + +#include "types.h" +#include +#include +#include +#include +#include +#include + +extern int alarm(uint secs); +extern int chown(char *path, int owner, int group); +extern int fork(void); +extern int getfsys(int dev, void *buf); +extern int getgid(void); +extern int getppid(void); +extern int getuid(void); +extern int geteuid(void); +extern int getegid(void); +extern int getprio(void); +extern int kill(int pid, int sig); +extern int link(char *name1, char *name2); +extern int mknod(char *name, mode_t mode, int dev); +extern int mount(char *spec, char *dir, int rwflag); +extern int pause(void); +extern int pipe(int fildes[2]); +extern int setgid(int gid); +extern int setuid(int uid); +extern int stime(time_t *tvec); +extern void sync(void); /* Nick int sync(void); */ +extern time_t time(time_t *tvec); +extern int times(struct tms *buf); +extern int umount(char *spec); +extern int wait(int *statloc); +extern int reboot(char p1, char p2); +extern int systrace(int onoff); + +#endif /* __DOS__ */ +#endif /* __SYSCALLS_H */ diff --git a/src/nos/include/sysmac.h% b/src/nos/include/sysmac.h% new file mode 100644 index 00000000..76932c8c --- /dev/null +++ b/src/nos/include/sysmac.h% @@ -0,0 +1,92 @@ +/* - SYSMAC.H - + + Defines system macros to maintain source compatibility + with different IAR compilers. + + $Name: V3_34K V3_34J V3_34I V3_34H $ + + Copyright 1986 - 1999 IAR Systems. All rights reserved. +*/ + +#ifndef _SYSMAC_H_ +#define _SYSMAC_H_ + + +#if defined(__IAR_SYSTEMS_ICC) && !defined(__IAR_SYSTEMS_ICC__) +#define __IAR_SYSTEMS_ICC__ 1 +#endif + +#if __IAR_SYSTEMS_ICC__ > 4 +#error __IAR_SYSTEMS_ICC__ > 4 not available yet! +#endif + +#ifndef __CHAR_SIZE__ +#define __CHAR_SIZE__ sizeof(char) +#endif + +#ifndef __SHORT_SIZE__ +#define __SHORT_SIZE__ sizeof(short) +#endif + +#ifndef __INT_SIZE__ +#define __INT_SIZE__ sizeof(int) +#endif + +#ifndef __LONG_SIZE__ +#define __LONG_SIZE__ sizeof(long) +#endif + +#ifndef __FLOAT_SIZE__ +#define __FLOAT_SIZE__ sizeof(float) +#endif + +#ifndef __DOUBLE_SIZE__ +#define __DOUBLE_SIZE__ sizeof(double) +#endif + +#ifndef __LONG_DOUBLE_SIZE__ +#define __LONG_DOUBLE_SIZE__ sizeof(long double) +#endif + +#ifndef __SIZE_T_TYPE__ +#if sizeof((char*)0 - (char*)0) <= sizeof(int) +#define __SIZE_T_TYPE__ unsigned int +#else +#define __SIZE_T_TYPE__ unsigned long +#endif +#endif + +#ifndef __PTRDIFF_T_TYPE__ +#if sizeof((char*)0 - (char*)0) <= sizeof(int) +#define __PTRDIFF_T_TYPE__ unsigned int +#else +#define __PTRDIFF_T_TYPE__ unsigned long +#endif +#endif + +#ifndef __JMP_BUF_ELEMENT_TYPE__ +#ifndef __JMP_BUF_NUM_ELEMENTS__ +#define __JMP_BUF_ELEMENT_TYPE__ char +#ifndef __JMP_BUF__ +#define __JMP_BUF_NUM_ELEMENTS__ 8 +#else +#define __JMP_BUF_NUM_ELEMENTS__ __JMP_BUF__ +#endif +#endif +#endif + + +#define __INTRINSIC +#if __IAR_SYSTEMS_ICC__ >= 2 +#undef __INTRINSIC +#define __INTRINSIC __intrinsic +#endif + +/* Macro for frmwri and frmrd */ +#define VAPTR(T) (va_arg(ap, T *)) + +/* Typedefs put here to appear only once */ +typedef __SIZE_T_TYPE__ size_t; +typedef __PTRDIFF_T_TYPE__ ptrdiff_t; + +#endif /* _SYSMAC_H_ */ diff --git a/src/nos/include/tcpip.h b/src/nos/include/tcpip.h new file mode 100644 index 00000000..77eb88d6 --- /dev/null +++ b/src/nos/include/tcpip.h @@ -0,0 +1,120 @@ +/* UZIX TCP/IP Stack + * (c) 2000 A&L Software + * Adriano C. R. da Cunha + */ + +/* Protocol numbers */ +#define ICMP_PROTOCOL 1 +#define TCP_PROTOCOL 6 +#define UDP_PROTOCOL 17 + +/* TCP/IP open modes */ +#define TCP_ACTIVE_OPEN 255 +#define TCP_PASSIVE_OPEN 0 + +/* data size */ +#define DOMSIZE 128 + +/* protocols */ +#define IPV4_TCP 0x01 +#define IPV4_UDP 0x02 +#define IPV4_ICMP 0x03 + +/* UDP modes */ +#define UDPMODE_ASC 1 +#define UDPMODE_CKSUM 2 + +/* error codes */ +#define ECONTIMEOUT 0x80 +#define ECONREFUSED 0x81 +#define ENOPERM 0x82 +#define ENOPORT 0x83 +#define ENOROUTE 0x84 +#define ENOSOCK 0x85 +#define ENOTIMP 0x86 +#define EPROT 0x87 +#define EPORTINUSE 0x88 + +/* TCP socket status + bits: 76543210 + ^^ ^^^^ state + |+-------listen state + +--------write enable +*/ + +#define TCP_CLOSED 0x00 +#define TCP_LISTEN 0x01 +#define TCP_SYN_SENT 0x42 +#define TCP_SYN_RECEIVED 0x43 +#define TCP_ESTABLISHED 0xc4 +#define TCP_FIN_WAIT1 0x45 +#define TCP_FIN_WAIT2 0x46 +#define TCP_CLOSE_WAIT 0x87 +#define TCP_CLOSING 0x08 +#define TCP_LAST_ACK 0x09 +#define TCP_TIMEWAIT 0x0a + +/* UDP socket status */ +#define UDP_LISTEN 0x91 +#define UDP_ESTABLISHED 0x94 + +/* some structures used */ +typedef struct s_ip_struct { /* TCP/UDP connection info data */ + uchar remote_ip[4]; + uint remote_port; + uint local_port; +} ip_struct_t; + +typedef struct s_icmpdata { /* ICMP packet data */ + uchar type; + uchar icmpcode; + unsigned long unused; /* Used for various things */ + uchar data[28]; /* Make up to 64 bytes */ + uint len; + uchar sourceIP[4]; + uchar ttl; +} icmpdata_t; + +typedef struct { /* TCP/IP stack info */ + uchar IP[4]; + uchar dns1ip[4]; + uchar dns2ip[4]; + char datalink[5]; + char domainname[DOMSIZE]; + int used_sockets; + int avail_sockets; + int used_buffers; + int avail_buffers; + int IP_chksum_errors; +} tcpinfo_t; + +typedef struct { /* socket info */ + int localport; + int remoteport; + uchar remote_ip[4]; + char socketstatus; /* bit 7: listen, bits 3-0: closed...timewait */ + char sockettype; /* IPV4_UDP or IPV4_TCP */ + char sockerr; /* error code (if any) */ + int pid; +} sockinfo_t; + +/* user calls: TCP/IP */ +int ipconnect(char mode, ip_struct_t *ipstruct); +int ipclose(uchar socknum); +int iplisten(int aport, uchar protocol); +int ipunlisten(int aport); +int ipaccept(ip_struct_t *ipstruct, int aport, uchar block); +int ping(uchar *IP, unsigned long *unused, uint len); +int setsocktimeout(uchar socknum, uint timeout); +icmpdata_t *ipgetpingreply(void); +int ipwrite(uchar socknum, uchar *bytes, int len); +int ipread(uchar socknum, uchar *bytes, int len); +int ipgetc(uchar socknum); +int ipputc(uchar socknum, uchar byte); +tcpinfo_t *gettcpinfo(void); +sockinfo_t *getsockinfo(uchar socknum); + +/* user calls: DNS */ +int local_lookup(char *ip_name, uchar *ipaddr); +int resolve(char *name, uchar *ipaddr); +int reverse_lookup(char *name, char *ipaddr); diff --git a/src/nos/include/termcap.h b/src/nos/include/termcap.h new file mode 100644 index 00000000..ec80bd86 --- /dev/null +++ b/src/nos/include/termcap.h @@ -0,0 +1,21 @@ +#ifndef __TERMCAP_H +#define __TERMCAP_H +#ifndef __TYPES_H +#include +#endif + +extern char PC; +extern char *UP; +extern char *BC; +extern int ospeed; + +extern int tgetent __P((char *, char *)); +extern int tgetflag __P((char *)); +extern int tgetnum __P((char *)); +extern char *tgetstr __P((char *, char **)); + +extern void tputs __P((char *, int, int (*)(int))); +extern char *tgoto __P((char *, int, int)); +extern char *tparam(); /* VARARGS */ + +#endif /* _TERMCAP_H */ diff --git a/src/nos/include/termio.h b/src/nos/include/termio.h new file mode 100644 index 00000000..67a0b1e7 --- /dev/null +++ b/src/nos/include/termio.h @@ -0,0 +1,3 @@ +#ifndef __TERMIOS_H +#include +#endif diff --git a/src/nos/include/termios.h b/src/nos/include/termios.h new file mode 100644 index 00000000..dd1f359e --- /dev/null +++ b/src/nos/include/termios.h @@ -0,0 +1,23 @@ +#ifndef __TERMIOS_H +#define __TERMIOS_H +#ifndef __TYPES_H +#include +#endif + +extern int cfgetispeed __P ((struct termios *__termios_p)); +extern int cfgetospeed __P ((struct termios *__termios_p)); +extern int cfsetispeed __P ((struct termios *__termios_p, int __speed)); +extern int cfsetospeed __P ((struct termios *__termios_p, int __speed)); + +extern void cfmakeraw __P ((struct termios *__t)); + +extern int tcsetattr __P ((int __fd, int __opt, struct termios *__termios_p)); +extern int tcgetattr __P ((int __fildes, struct termios *__termios_p)); +extern int tcdrain __P ((int __fildes)); +extern int tcflow __P ((int __fildes, int __action)); +extern int tcflush __P ((int __fildes, int __queue_selector)); +extern int tcsendbreak __P ((int __fildes, int __duration)); +extern int tcgetpgrp __P ((int __fildes)); +extern int tcsetpgrp __P ((int __fildes, int __pgrp_id)); + +#endif diff --git a/src/nos/include/time.h b/src/nos/include/time.h new file mode 100644 index 00000000..0063c545 --- /dev/null +++ b/src/nos/include/time.h @@ -0,0 +1,61 @@ +#ifndef __TIME_H +#define __TIME_H +#ifndef __TYPES_H +#include +#endif +#include + +#if (defined(MSX) || defined(MSX_UZIX_TARGET)) +#define CLOCKS_PER_SEC *(uchar *)63220 /* Must agree with kernel EXTERN.H */ +#define CLK_TCK *(uchar *)63220 /* That must be the same as HZ ???? */ +#else +#define CLOCKS_PER_SEC 18 +#define CLK_TCK 18 /* That must be the same as HZ ???? */ +#endif + +#ifndef CLOCK_T +#define CLOCK_T +typedef long clock_t; +#endif + +struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; +}; + +struct timezone { + int tz_minuteswest; /* minutes west of Greenwich */ + int tz_dsttime; /* type of dst correction */ +}; + +#define __isleap(year) \ + ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) + +extern char *tzname[2]; +extern int daylight; +extern long timezone; + +extern long clock __P ((void)); +extern time_t mktime __P ((struct tm * __tp)); +extern long difftime __P ((time_t *__time2, time_t *__time1)); + +extern time_t time __P((time_t *tvec)); + +extern void __tm_conv __P((struct tm *tmbuf, time_t *t, int offset)); +extern void __asctime __P((char *, struct tm *)); +extern char *asctime __P ((struct tm * __tp)); +extern char *ctime __P ((time_t * __tp)); +extern void tzset __P ((void)); + +extern struct tm *gmtime __P ((time_t *__tp)); +extern struct tm *localtime __P ((time_t * __tp)); +extern unsigned long convtime __P ((time_t *time_field)); + +#endif diff --git a/src/nos/include/unistd.h b/src/nos/include/unistd.h new file mode 100644 index 00000000..773e17c8 --- /dev/null +++ b/src/nos/include/unistd.h @@ -0,0 +1,58 @@ +#ifndef __UNISTD_H +#define __UNISTD_H +#ifndef __TYPES_H +#include +#endif +#include + +#ifndef SEEK_SET +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif + +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +extern int mkdir __P((char *, mode_t)); +extern int rmdir __P((char *)); + +extern long tell __P((int)); +extern off_t lseek __P((int, off_t, int)); + +extern int isatty __P((int)); + +extern int lstat __P((char *, void *)); +extern int readlink __P((char *, char *, int)); + +extern char **environ; + +extern char * _findPath __P((char *pathname)); +extern int execl __P((char *pathname, char *arg0, ...)); +extern int execle __P((char *pathname, char *arg0, ...)); +extern int execlp __P((char *pathname, char *arg0, ...)); +extern int execlpe __P((char *pathname, char *arg0, ...)); +extern int execv __P((char *pathname, char *argv[])); +extern int exect __P((char *pathname, char *argv[], char *envp[])); +extern int execvp __P((char *pathname, char *argv[])); +extern int execvpe __P((char *pathname, char *argv[], char *envp[])); + +extern char *ttyname __P((int)); +extern int system __P((char *)); +extern int pause __P((void)); +extern int fork __P((void)); +extern char *getcwd __P((char *, int)); + +#ifndef __STDLIB_H +extern void exit __P((int)); +#endif + +#ifndef R_OK +#define R_OK 4 /* Test for read permission. */ +#define W_OK 2 /* Test for write permission. */ +#define X_OK 1 /* Test for execute permission. */ +#define F_OK 0 /* Test for existence. */ +#endif + +#endif /* __UNISTD_H */ diff --git a/src/nos/include/utime.h b/src/nos/include/utime.h new file mode 100644 index 00000000..b9cbd2a6 --- /dev/null +++ b/src/nos/include/utime.h @@ -0,0 +1,9 @@ +#ifndef __UTIME_H +#define __UTIME_H +#ifndef __TYPES_H +#include +#endif + +extern int utime __P ((char *__filename, struct utimbuf *__utimebuf)); + +#endif diff --git a/src/nos/include/utmp.h b/src/nos/include/utmp.h new file mode 100644 index 00000000..6506fb12 --- /dev/null +++ b/src/nos/include/utmp.h @@ -0,0 +1,45 @@ +#ifndef __UTMP_H +#define __UTMP_H +#ifndef __TYPES_H +#include +#endif +#include +#include + +#define UT_UNKNOWN 0 +#define UT_LINESIZE 12 +#define UT_NAMESIZE 8 +#define UT_HOSTSIZE 16 + +#define RUN_LVL 1 +#define BOOT_TIME 2 +#define NEW_TIME 3 +#define OLD_TIME 4 + +#define INIT_PROCESS 5 +#define LOGIN_PROCESS 6 +#define USER_PROCESS 7 +#define DEAD_PROCESS 8 + +struct utmp { + short ut_type; /* type of login */ + int ut_pid; /* pid of login-process */ + char ut_line[UT_LINESIZE]; /* devicename of tty -"/dev/", null-term */ + char ut_id[2]; /* abbrev. ttyname, as 01, s1 etc. */ + time_t ut_time; /* login time */ + char ut_user[UT_NAMESIZE]; /* username, not null-term */ + char ut_host[UT_HOSTSIZE]; /* hostname for remote login... */ + long ut_addr; /* IP addr of remote host */ +}; + +extern void setutent __P((void)); +extern void utmpname __P((char *)); +extern struct utmp * getutent __P((void)); +extern struct utmp * getutid __P((struct utmp *)); +extern struct utmp * getutline __P((struct utmp *)); +extern struct utmp * pututline __P((struct utmp *)); +extern void endutent __P((void)); + +struct utmp * __getutent __P((int)); + +#endif /* __UTMP_H */ diff --git a/src/nos/include/utsname.h b/src/nos/include/utsname.h new file mode 100644 index 00000000..35e57851 --- /dev/null +++ b/src/nos/include/utsname.h @@ -0,0 +1,18 @@ +#ifndef __UTSNAME_H +#define __UTSNAME_H +#ifndef __TYPES_H +#include +#endif + +struct utsname { + char sysname[14]; + char nodename[14]; + char release[8]; + char version[8]; + char machine[8]; + char domainname[14]; +}; + +extern int uname __P ((struct utsname * __utsbuf)); + +#endif diff --git a/src/nos/include/uzi/devio.h b/src/nos/include/uzi/devio.h new file mode 100644 index 00000000..7b82516d --- /dev/null +++ b/src/nos/include/uzi/devio.h @@ -0,0 +1,103 @@ +/* devio.h by Nick for NOS/UZI project */ + +#ifndef __DEVIO_H +#define __DEVIO_H + +/* BUFSIZE has been defined already by the C runtime library */ +typedef unsigned short ino_t; /* Can have 65536 inodes in fs */ +typedef unsigned short blkno_t; /* Can have 65536 BUFSIZE-byte blocks in fs */ +typedef unsigned short dev_t; /* Device number */ + +#define MINOR(dev) ((uchar)(dev)) +#define MAJOR(dev) ((uchar)((dev) >> 8)) +#define MKDEV(major, minor) (((uint)(uchar)(major) << 8) | (uchar)(minor)) + +#define NULLINO ((ino_t)0) +#define NULLBLK ((blkno_t)-1) +#define NULLDEV ((dev_t)-1) + +/* forward reference to help the compiler */ +typedef struct blkbuf_s blkbuf_t; + +/* structure of an in-core buffered disk block */ +struct blkbuf_s + { + unsigned char bf_data[BUFSIZE]; /* This MUST BE first ! */ + dev_t bf_dev; /* device of this block */ + blkno_t bf_blk; /* and block number on device */ + unsigned char bf_dirty; /* buffer changed flag */ + unsigned char bf_busy; /* buffer processing in progress */ + unsigned char bf_prio; /* buffer must be in memory (for wargs) */ + unsigned int bf_time; /* LRU time stamp */ + /*struct s_blkbuf *bf_next;*/ /* LRU free list pointer */ + }; + +/* structure of a device driver switch table entry */ +typedef struct + { + unsigned char minors; /* # of minor device numbers */ + int (*dev_init)(unsigned char minor); + int (*dev_open)(unsigned char minor); + int (*dev_close)(unsigned char minor); + int (*dev_read)(unsigned char minor, unsigned char rawflag); + int (*dev_write)(unsigned char minor, unsigned char rawflag); + int (*dev_ioctl)(unsigned char minor, int cmd, void *data); + } devsw_t; + +#define NBLKBUFS 3 /* maximum number of disk blocks in the buffer cache */ +#define NDEVICES 3 /* number of device driver switch table entries (majors) */ +#define DTHRESH 2 /* device driver switch table indices < DTHRESH are block */ + +extern blkbuf_t *Bufpool[NBLKBUFS]; +extern devsw_t *Devtab[NDEVICES]; + +extern unsigned int bufclock; /* time-stamp counter for LRU */ + +extern unsigned int buf_hits; /* buffer pool hits */ +extern unsigned int buf_miss; /* buffer pool misses */ +extern unsigned int buf_flsh; /* buffer pool flushes */ + +/* release buffer */ +#define brelse(bp) bfree(bp, 0) + +/* free buffer and mark them dirty for eventually writing */ +#define bawrite(bp) bfree(bp, 1) + +/* shortcuts for block device read/write */ +#define bdread(bp) bdreadwrite(bp, 0) +#define bdwrite(bp) bdreadwrite(bp, 1) + +/* shortcuts for character device read/write */ +#define cdread(dev) cdreadwrite(dev, 0) +#define cdwrite(dev) cdreadwrite(dev, 1) + +/* shortcuts for device open/close */ +#define d_open(dev) d_openclose(dev, 1) +#define d_close(dev) d_openclose(dev, 0) + +/* shortcuts for access to buffer pool by clients */ +#define tmpbuf() zerobuf(1); /* not allowed to return NULL */ + +void bufinit(void); +void devio_garbage(int red); +void *bread(dev_t dev, blkno_t blk, unsigned char rewrite); +int bfree(blkbuf_t *bp, unsigned char dirty); +void *zerobuf(unsigned char waitfor); +void bufsync(void); +blkbuf_t *bfind(int dev, blkno_t blk); +blkbuf_t *freebuf(unsigned char waitfor); +void bufdump(void); +devsw_t *validdev(dev_t dev, char *msg); +int bdreadwrite(blkbuf_t *bp, unsigned char write); +int cdreadwrite(dev_t dev, unsigned char write); +int d_openclose(dev_t dev, unsigned char open); +int d_ioctl(dev_t dev, int request, void *data); +void d_init(void); +int ok(unsigned char minor); +int ok_rdwr(unsigned char minor, unsigned char rawflag); +int nogood(unsigned char minor); +int nogood_rdwr(unsigned char minor, unsigned char rawflag); +int nogood_ioctl(unsigned char minor, int req, void *data); + +#endif /* __DEVIO_H */ + diff --git a/src/nos/include/uzi/execve.h b/src/nos/include/uzi/execve.h new file mode 100644 index 00000000..be8aa0df --- /dev/null +++ b/src/nos/include/uzi/execve.h @@ -0,0 +1,51 @@ +/* execve.h by Nick for NOS/UZI project */ + +#ifndef __EXECVE_H +#define __EXECVE_H + +#if 1 /* Nick please look into this */ + +/* Struct to hold arguments temporarily in execve */ +typedef struct + { + int a_argc; + int a_arglen; + int a_envc; + char a_buf[512-3*sizeof(int)]; + } argblk_t; + +#define E_MAGIC 0xa6c9 + +#define E_FORMAT_LARGE 1 +#define E_FORMAT_BANKED 2 +#define E_FORMAT_KERNEL 3 + +typedef struct + { + unsigned short e_magic; + unsigned short e_format; + off_t e_size; + unsigned short e_hsize; + unsigned short e_idata; + unsigned short e_entry; + unsigned short e_udata; + unsigned short e_stack; + unsigned short e_break; + } exehdr_t; + +int sys_execve(void); +int wargs(char **argv, argblk_t *argbuf); +char *rargs(char *ptr, argblk_t *argbuf, int *cnt); + +#else + +unsigned int ssiz(char **argv, unsigned char *cnt, char **smin); +void *scop(char **argv, unsigned char cnt, char *to, char *real); +int repack(char **argp, char **envp, unsigned char check); +void exec2(void); +int sys_execve(void); + +#endif + +#endif /* __EXECVE_H */ + diff --git a/src/nos/include/uzi/filesys.h b/src/nos/include/uzi/filesys.h new file mode 100644 index 00000000..cf520800 --- /dev/null +++ b/src/nos/include/uzi/filesys.h @@ -0,0 +1,159 @@ +/* filesys.h by Nick for NOS/UZI project */ + +#ifndef __FILESYS_H +#define __FILESYS_H + +#include /* for _char... ZILOG only (Nick) */ + +#define NMOUNTS 1 /*3*/ /* maximum number of filesystems */ +#define NINODES 5 /*20*/ /* maximum entries in inode cache */ +#define NUSERFILES 10 /* maximum number of user files */ +#define NOPENFILES 15 /* maximum number of open files */ + +#define CMAGIC 24721 /* random number for cinode c_magic (in-core only) */ +#define SMOUNTED 12742 /* magic number to flag mounted filesystem (on disk) */ +#define SUPERBLOCK 4 /* disk block of filesystem superblock (MUST BE 4!) */ +#define ROOTINODE 1 /* root inode entry # for all mounted filesystems */ + +/* Flags for setftime() */ +#define A_TIME 1 +#define M_TIME 2 +#define C_TIME 4 + +/* note: (D)(IN)DIRECTBLOCKS and TOTALREFBLOCKS are provided by z80/asm.h */ + +/* structure of disk inode */ +typedef struct + { + unsigned short i_mode; + unsigned short i_nlink; + unsigned short i_uid; + unsigned short i_gid; + off_t i_size; + rtctime_t i_atime; + rtctime_t i_mtime; + rtctime_t i_ctime; + blkno_t i_addr[TOTALREFBLOCKS]; + } dinode_t; /* Exactly 64 bytes long! (Don't break it!) */ + +/* note: DINODESPERBLOCK and DINODESPERBLOCKLOG are provided by z80/asm.h */ + +/* structure of in-core inode */ +typedef struct + { + unsigned short c_magic; /* Used to check for corruption */ + unsigned char c_dirty; /* Modified flag */ + dev_t c_dev; /* Inode's device */ + ino_t c_num; /* Inode's number */ + unsigned short c_refs; /* In-core reference count */ + unsigned char c_ro; /* Read-only filesystem flag */ + dinode_t c_node; /* disk inode copy */ + } cinode_t; + +#define DEVNUM(ino) ((dev_t)((ino)->c_node.i_addr[0])) + +/* structure of open file table entry */ +typedef struct + { + off_t o_ptr; /* File position pointer */ + cinode_t *o_inode; /* Pointer into in-core inode table */ + unsigned char o_access; /* O_RDONLY, O_WRONLY, or O_RDWR */ + unsigned char o_refs; /* Refcount: depends on # of active children */ + } oft_t; + +/* direct_t has been kindly provided by types.h */ +#define DIRECTPERBLOCK (BUFSIZE / sizeof(direct_t)) + +#if 0 /* remove support for the original UZI filesystem */ +#define FSFREEBLOCKS 50 +#define FSFREEINODES 50 +#endif + +/* device-resident super-block */ +typedef struct + { + unsigned short s_mounted; /* signature */ + unsigned short s_reserv; /* # of first block of inodes */ + unsigned short s_isize; /* # of inode's blocks */ + unsigned short s_fsize; /* # of data's blocks */ + + blkno_t s_tfree; /* total free blocks */ +#if 0 /* remove support for the original UZI filesystem */ + unsigned short s_nfree; /* # of free blocks in s_free */ + blkno_t s_free[FSFREEBLOCKS]; /* #s of free block's */ +#endif + + ino_t s_tinode; /* total free inodes */ +#if 0 /* remove support for the original UZI filesystem */ + unsigned short s_ninode; /* # of free inodes in s_inode */ + ino_t s_inode[FSFREEINODES]; /* #s of free inodes */ +#endif + + rtctime_t s_time; /* last modification timestamp */ + +#if 1 /* Nick free bitmap */ + blkno_t s_bitmap_inode; /* disk byte position of free inode bitmap */ + blkno_t s_bitmap_block; /* disk byte position of free block bitmap */ + blkno_t s_bitmap_immov; /* disk byte position of immoveable bitmap */ + blkno_t s_bitmap_final; /* byte position just after end of bitmaps */ +#endif + +/* Core-resident part */ + unsigned char s_fmod; /* filesystem modified */ + unsigned char s_ronly; /* readonly filesystem */ + cinode_t *s_mntpt; /* mount point inode */ + dev_t s_dev; /* device on which filesystem resides */ + } filesys_t; + +extern dev_t root_dev; /* Device number of root filesystem. */ +extern cinode_t *root_ino; /* Address of root dir in inode table */ + +extern filesys_t *Fstab[NMOUNTS]; +extern cinode_t *Inotab[NINODES]; +extern oft_t *Oftab[NOPENFILES]; + +extern _char *Baddevmsg; + +/* shortcut to sidestep signed vs. unsigned char issues */ +#define freefileentry(e) ((e) & 0x80) + +void fs_init(void); +filesys_t *findfs(dev_t devno); +filesys_t *getfs(dev_t devno); +int wr_inode(cinode_t *ino); +void i_ref(cinode_t *ino); +void i_deref(cinode_t *ino); +void i_free(dev_t devno, ino_t ino); +cinode_t *_namei(unsigned char *name, unsigned char **rest, + cinode_t *strt, cinode_t **parent); +cinode_t *namei(char *uname, cinode_t **parent, unsigned char follow); +cinode_t *srch_dir(cinode_t *wd, char *name); +cinode_t *srch_mt(cinode_t *ino); +void i_init(void); +cinode_t *i_open(dev_t devno, ino_t ino); +int ch_link(cinode_t *wd, char *oldname, char *newname, cinode_t *nindex); +void filename(char *upath, char *name); /* char *filename(char *path); */ +int namecomp(unsigned char *n1, unsigned char *n2); +cinode_t *newfile(cinode_t *pino, char *name); +int filesys_doclose(unsigned int fd); /* Nick unsigned char */ +ino_t i_alloc(dev_t devno); +blkno_t blk_alloc(dev_t devno, unsigned char dirty); /* Nick dirty */ +void blk_free(dev_t devno, blkno_t blk); +unsigned char oft_alloc(void); +void oft_deref(unsigned char of); +unsigned char uf_alloc(void); +unsigned char isdevice(cinode_t *ino); +void freeblk(dev_t dev, blkno_t blk, unsigned char level); +void f_trunc(cinode_t *ino); +blkno_t bmap(cinode_t *ip, blkno_t bn, unsigned char rdflg); +void validblk(dev_t devno, blkno_t num); +cinode_t *getinode(unsigned int uindex); /* Nick unsigned char */ +int getperm(cinode_t *ino); +void setftim(cinode_t *ino, unsigned char flag); +int fmount(dev_t dev, cinode_t *ino, unsigned char roflag); +void magic(cinode_t *ino, char *who); +void i_sync(void); +void fs_sync(void); + +#endif /* __FILESYS_H */ + diff --git a/src/nos/include/uzi/maxmin.h b/src/nos/include/uzi/maxmin.h new file mode 100644 index 00000000..1e9939dd --- /dev/null +++ b/src/nos/include/uzi/maxmin.h @@ -0,0 +1,15 @@ +/* maxmin.h by Nick for NOS/UZI project */ + +#ifndef __MAXMIN_H +#define __MAXMIN_H + +int max_int(int a, int b); +long max_long(long a, long b); +unsigned int max_uint(unsigned int a, unsigned int b); +unsigned long max_ulong(unsigned long a, unsigned long b); +int min_int(int a, int b); +long min_long(long a, long b); +unsigned int min_uint(unsigned int a, unsigned int b); +unsigned long min_ulong(unsigned long a, unsigned long b); + +#endif /* __MAXMIN_H */ diff --git a/src/nos/include/uzi/process.h b/src/nos/include/uzi/process.h new file mode 100644 index 00000000..d789820b --- /dev/null +++ b/src/nos/include/uzi/process.h @@ -0,0 +1,153 @@ +/* process.h by Nick for NOS/UZI project */ + +#ifndef __PROCESS_H +#define __PROCESS_H + +#include /* for _char... ZILOG only (Nick) */ + +#define NPROGRAMS 1 + +#define PRIO_MAX 19 +#define PRIO_MIN -20 + +#define TICKSPERSEC 50 /* Ticks per second */ +#define MAXTICKS 4 /* Max ticks before swapping out (time slice) + default process time slice */ +#if 0 /* temporary */ +#define MAXBACK 3 /* Process time slice for tasks not connected + to the current tty */ +#define MAXBACK2 2 /* Process time slice for background tasks */ +#define MAXINTER 5 /* Process time slice for interactive tasks */ +#endif + +/* note: WNOHANG / WUNTRACED are provided by sys/wait.h */ + +#define P_EMPTY 0 /* change this (use NULL in sparse array!) */ +#define P_ZOMBIE 1 /* means the program has left an exitcode */ +#define P_FORKING 2 /* means do not mess with this Ptab entry (change this!) */ +#define P_RUNNING 3 /* for the moment we have only 1 process, always RUNNING */ + +/* forward reference to help the compiler */ +typedef struct ptab_s ptab_t; + +/* structure of a unix process (nos processes are akin to threads) */ +struct ptab_s + { + char p_status; /* Process status */ +#if 0 + char p_tty; /* Process' controlling tty minor # */ +#endif + int p_pid; /* Process ID */ + int p_uid; + ptab_t *p_pptr; /* Process parent's table entry */ + unsigned int p_alarm; /* Seconds until alarm goes off */ + unsigned int p_exitval; /* Exit value */ +#if 1 +/* Everything below here is overlaid by time info at exit */ + unsigned long p_zombie[2]; /* Don't allow sharing of mem after all!! */ +#endif +#if 0 + char *p_wait; /* Address of thing waited for */ + int p_page; /* Process BBR base value in UZI180 */ +#endif + unsigned char p_cprio; /* Process current priority */ + signed char p_nice; /* Process nice value (-20 to 19) */ + unsigned short p_pending; /* Pending signals */ + unsigned short p_ignored; /* Ignored signals */ +#if 0 + struct s_ublock *p_ublk; /* Pointer to udata block when not running */ + unsigned short p_waitno; /* wait #; for finding longest waiting proc */ +/* Added for correct execve() of type 1 binaries */ + unsigned int p_fork_inf; /* 0 = parent of fork, 1 = child of fork */ +#endif + unsigned int p_break; /* process break level */ +#if 0 + unsigned char p_intr; /* !0 if awakened by signal */ +#endif + +#if 1 /* these have been moved from udata into the ptab */ + int p_gid; + int p_euid; + int p_egid; + int p_umask; /* umask: file creation mode mask */ + rtctime_t p_time; /* Start time */ + + cinode_t *p_cwd; /* Index into inode table of cwd. */ +#if 0 + unsigned int p_break; /* Top of data space */ + cinode_t *p_ino; /* Used during execve() */ +#endif + void *p_isp; /* Value of initial sp (argv) */ + int (*p_sigvec[NSIGS])(); /* Array of signal vectors */ +#if 0 + char p_name[8]; /* Name invoked with */ +#endif + unsigned long p_utime; /* Elapsed ticks in user mode */ + unsigned long p_stime; /* Ticks in system mode */ + unsigned long p_cutime; /* Total childrens ticks */ + unsigned long p_cstime; +#if 0 + unsigned char p_page; /* Process' MMU Base Address */ +#endif + cinode_t *p_root; /* Index into inode table of chroot target */ + + int p_traceme; /* added by Nick, used only ifdef DEBUG */ + int p_debugme; /* added by Nick, used only ifdef DEBUG */ + + unsigned char p_files[NUSERFILES]; /* Process file table */ +#endif + }; + +extern ptab_t *Ptab[NPROGRAMS]; + +/* structure of temporary per-call storage */ +typedef struct + { + ptab_t *u_ptab; /* Process table pointer */ + + unsigned char u_insys; /* True if in kernel */ + unsigned char u_callno; /* sys call being executed. */ +#if 0 + void *u_retloc; /* Return location from sys call phase out!! */ +#endif + int u_retval; /* Return value from sys call */ + int u_retval1; /* Nick, for long return value from lseek() */ + int u_error; /* Last error number */ +#if 0 + int *u_sp; /* Used when process is swapped. */ + int *u_bc; /* Place for user's frame pointer */ + int u_cursig; /* Signal currently being caught */ +#endif + int u_argn0; /* Last system call arg */ + int u_argn1; /* This way because args on stack backwards */ + int u_argn2; + int u_argn3; /* args n-3, n-2, n-1, and n */ + + void *u_base; /* Source or dest for I/O */ + unsigned int u_count; /* Amount for I/O */ + off_t u_offset; /* Place in file for I/O */ + blkbuf_t *u_buf; + unsigned char u_sysio; /* True if I/O to system space */ + } udata_t; + +extern udata_t *udata_p; +#if DEBUG >= 4 +#define udata (udata_p ? udata_p : (udata_t *)_panic(_("no udata"))) +#else +#define udata udata_p +#endif + +/* Getmode() returns the inode kind */ +#define _getmode(mode) ((mode) & S_IFMT) +#define getmode(ino) (_getmode((ino)->c_node.i_mode)) + +/* Super() returns true if we are the superuser */ +#define super() (udata->u_ptab->p_euid == 0) + +void p_init(void); +int panic(char *message, ...); +int _panic(_char *message, ...); +int valadr(void *base, size_t size); + +#endif /* __PROCESS_H */ + diff --git a/src/nos/include/uzi/rtc.h b/src/nos/include/uzi/rtc.h new file mode 100644 index 00000000..6a29364d --- /dev/null +++ b/src/nos/include/uzi/rtc.h @@ -0,0 +1,14 @@ +/* rtc.h by Nick for NOS/UZI project */ + +#ifndef __RTC_H +#define __RTC_H + +/* can contain either msdos or proper unix style time/date (soon!!) */ +/* uzi name prefix avoids conflict when compiling for Windows, Linux etc */ +typedef unsigned long rtctime_t; + +void rdtime(rtctime_t *tvec); +void sttime(rtctime_t *tvec); + +#endif /* __RTC_H */ + diff --git a/src/nos/include/uzi/scall1.h b/src/nos/include/uzi/scall1.h new file mode 100644 index 00000000..4acb10f9 --- /dev/null +++ b/src/nos/include/uzi/scall1.h @@ -0,0 +1,64 @@ +/* scall1.h by Nick for NOS/UZI project */ + +#ifndef __SCALL1_H +#define __SCALL1_H + +/* placeholders until we decide to make them informative */ +#define UZIX "UZIX" +#define HOST "HOST" +#define VERSION "VERSION" +#define RELEASE "RELEASE" +#define MACHINE "MACHINE" + +/* Info about kernel, returned by sys_getfsys */ +typedef struct + { + unsigned char k_name[14]; /* OS name */ + unsigned char k_version[8]; /* OS version */ + unsigned char k_release[8]; /* OS release */ + + unsigned char k_host[14]; /* Host name */ + unsigned char k_machine[8]; /* Host machine */ + + unsigned int k_tmem; /* System memory, in kbytes */ + unsigned int k_kmem; /* Kernel memory, in kbytes */ + } kdata_t; + +/* shortcuts for access to file data via an open inode */ +#define readi(x) readwritei(0, x) +#define writei(x) readwritei(1, x) + +int sys_sync(void); +int sys_utime(void); +int sys_close(void); +void truncateto0(cinode_t *ino); +int sys_open(void); +int sys_link(void); +int sys_symlink(void); +int sys_unlink(void); +int sys_readwrite(void); +off_t sys_lseek(void); +int sys_chdir(void); +int sys_chroot(void); +int sys_mknod(void); +int sys_access(void); +int sys_chmod(void); +int sys_chown(void); +/*void stcpy(cinode_t *ino, struct stat *buf);*/ +int sys_statfstat(void); +int sys_falign(void); +int sys_dup(void); +int sys_dup2(void); +int sys_getfsys(void); +int sys_ioctl(void); +int sys_mountumount(void); +time_t sys_time(void); +/*cinode_t *n_creat(char *name, bool_t new, mode_t mode);*/ +void readwritei(char write, cinode_t *ino); +cinode_t *rwsetup(unsigned char fd, void *base, + unsigned int cnt, unsigned char rdflag); +int pdat(struct s_pdata *ubuf); +int scall1_getfsys(dev_t devno, info_t *buf); + +#endif /* __SCALL1_H */ + diff --git a/src/nos/include/uzi/scall2.h b/src/nos/include/uzi/scall2.h new file mode 100644 index 00000000..1a868ddf --- /dev/null +++ b/src/nos/include/uzi/scall2.h @@ -0,0 +1,41 @@ +/* scall2.h by Nick for NOS/UZI project */ + +#ifndef __SCALL2_H +#define __SCALL2_H + +/* sys_getset() commands */ +#define GET_PID 0 /* get process id */ +#define GET_PPID 1 /* get parent process id */ +#define GET_UID 2 /* get user id */ +#define SET_UID 3 /* set user id */ +#define GET_EUID 4 /* get effective user id */ +#define GET_GID 5 /* get group id */ +#define SET_GID 6 /* set group id */ +#define GET_EGID 7 /* get effective group id */ +#define GET_PRIO 8 /* get process priority */ +#define SET_PRIO 9 /* set process priority */ +#define SET_UMASK 10 /* get/set umask */ +#define SET_TRACE 11 /* set trace flag */ +#define SET_DEBUG 12 /* set debug flag */ + +ptab_t *findprocess(int pid); +void filldesc(unsigned char oft, unsigned char access, cinode_t *ino); +int sys_pipe(void); +int sys_stime(void); +int sys_times(void); +int sys_brk(void); +int sys_sbrk(void); +int sys_waitpid(void); +int sys__exit(void); +void doexit(int val, int val2); +int sys_fork(void); +int sys_pause(void); +unsigned long sys_signal(void); +int sys_kill(void); +int sys_alarm(void); +int sys_reboot(void); +int sys_getset(void); +int sys_getset(void); + +#endif /* __SCALL2_H */ + diff --git a/src/nos/include/uzi/systrace.h b/src/nos/include/uzi/systrace.h new file mode 100644 index 00000000..55980268 --- /dev/null +++ b/src/nos/include/uzi/systrace.h @@ -0,0 +1,17 @@ +/* systrace.h by Nick for NOS/UZI project */ + +#ifndef __SYSTRACE_H +#define __SYSTRACE_H + +#define TYPE_BIN 1 +#define TYPE_STR 2 +#define TYPE_OCT 3 +#define TYPE_DEC 4 +#define TYPE_HEX 5 + +void systrace_entry(void); +void systrace_exit(void); +void systrace_dump(unsigned int value, unsigned int count, unsigned char type); + +#endif + diff --git a/src/nos/include/uzi/unix.h% b/src/nos/include/uzi/unix.h% new file mode 100644 index 00000000..02c4f8ff --- /dev/null +++ b/src/nos/include/uzi/unix.h% @@ -0,0 +1,1021 @@ +/**************************************************** +UZI (Unix Z80 Implementation) Kernel: unix.h +From UZI by Doug Braun and UZI280 by Stefan Nitschke. +*****************************************************/ +/* History: + * 21.12.97 - Removed leading ? from Per-Process equates. HFB + * 11.07.98 - Shortened Time Slices to 50 Ticks/Sec (20 mS). HFB + */ + +#ifndef __UNIX_H +#define __UNIX_H + +#ifndef VAX /* Nick UZIX compatible */ +#include /* for mode_t and others */ +#include /* for O_RDONLY and others */ +#include /* for signal_t and others */ +#include /* for info_t and others */ +#include /* for S_IFREG and others */ +#include /* for SEEK_END and others */ +#include /* for EACCES and others */ +#endif + +#ifndef VAX +#define CPM +#endif + +#define UFTSIZE 20 /*10*/ /* Number of user files */ /*280 = 22*/ +#define OFTSIZE 30 /*15*/ /* Open file table size */ /*280 = 45*/ +#define ITABSIZE 40 /*20*/ /* Inode table size */ /*280 = 45*/ +#define PTABSIZE 5 /*6*/ /* Process table size in UZI180. Size as: + * 1 MB RAM, 1st 32k Shadowed - 14 + * 512k RAM, No Shadow ROM - 7 + * 512k RAM, 1st 32k Shadowed - 6 + * 256k RAM, No Shadow ROM - 3 + */ +#define NSIGS 16 /* Number of signals <= 16 */ + +#if 1 /* Nick UZIX compatible */ +#define SUPERBLOCK 4 /*1*/ /* disk block of filesystem superblock */ +#endif +#define ROOTINODE 1 /* Inode # of / for all mounted filesystems. */ + +#define TICKSPERSEC 50 /* Ticks per second */ +#define MAXTICKS 4 /* Max ticks before swapping out (time slice) + default process time slice */ +#define MAXBACK 3 /* Process time slice for tasks not connected + to the current tty */ +#define MAXBACK2 2 /* Process time slice for background tasks */ +#define MAXINTER 5 /* Process time slice for interactive tasks */ + +#define ARGBLK 0 /* Block number on SWAPDEV for arguments */ +#define PROGBASE ((char *)(0x8100)) /* also data base (Nick, prev 0x100) */ +#define PROGTOP ((char *)(0xfffe)) /* Top of program, base of U_DATA */ +#define SYSCADDR 0x30 /* System call address, by Nick, UZIX compatible */ + +#define EMAGIC 0xc3 /* Header of executable */ +#define CMAGIC 24721 /* Random number for cinode c_magic */ +#define SMOUNTED 12742 /* Magic number to specify mounted filesystem */ +#define NULL 0 + +#define Hi_TECH_C + +#ifndef Hi_TECH_C +/* Speed and code length optimized for Q/C Compiler */ +#define ifnull(e) if(e){}else +#define ifnot(e) if(e){}else +#define ifzero(e) if(e){}else +#else /* Define for Hi-Tech Compiler */ +#define FALSE 0 +#define ifnull(e) if ((e)==0) +#define ifnot(e) if ((e)==FALSE) +#define ifzero(e) if ((e)==NULL) +#endif + + +#ifdef CPM + typedef unsigned uint16; + typedef int int16; +#else + typedef unsigned short uint16; + typedef short int16; +#endif + +/* USER! basic data types added by Nick, see ../include/types.h */ +/* ! uchar & uint is counterparts and must be declared simultaneously */ +#ifndef uchar_is_defined +#define uchar_is_defined +typedef unsigned char uchar; +typedef unsigned int uint; +#endif + + +typedef struct s_queue { + char *q_base; /* Pointer to data */ + char *q_head; /* Pointer to addr of next char to read. */ + char *q_tail; /* Pointer to where next char to insert goes. */ + int q_size; /* Max size of queue */ + int q_count; /* How many characters presently in queue */ + int q_wakeup; /* Threshold for waking up processes waiting on queue */ +} queue_t; + + +#ifdef __TYPES_H /* Nick */ +typedef time_t uzitime_t; +#else +typedef struct uzitime_s { + uint16 t_time; + uint16 t_date; +} uzitime_t; + +#ifndef SKIP_TIME_T /* for utils target, skip when compiling ucp.c, ucpsub.c */ +typedef uzitime_t time_t; +#endif + +/* User's structure for times() system call */ + +struct tms { + uzitime_t tms_utime; + uzitime_t tms_stime; + uzitime_t tms_cutime; + uzitime_t tms_cstime; + uzitime_t tms_etime; /* Elapsed real time */ +}; + +#ifndef utimbuf_is_defined +#define utimbuf_is_defined +/* User's structure for utime() system call */ +struct utimbuf { + uzitime_t actime; + uzitime_t modtime; +}; +#endif + +#endif /* Nick */ + +/* Flags for setftime() */ +#define A_TIME 1 +#define M_TIME 2 +#define C_TIME 4 + +#ifndef __TYPES_H /* Nick */ +/* extra typedefs added from types.h, needed for UTIL target */ +typedef long off_t; +typedef uchar bool_t; /* boolean value */ +typedef uint count_t; /* counter for anything */ +typedef unsigned int mode_t; + +#define BUFSIZE 512 /* uzix buffer/block size */ +#define BUFSIZELOG 9 /* uzix buffer/block size log2 */ +#endif /* __TYPES_H Nick */ + +#ifndef __SIGNAL_H /* Nick */ +/* extra typedefs added from signal.h, needed for UTIL target */ +typedef int signal_t; +#endif + +#if 1 /* file-system related data types added by Nick from uzix1.0 */ +typedef uint16 ino_t; /* Can have 65536 inodes in fs */ +typedef uint16 blkno_t; /* Can have 65536 BUFSIZE-byte blocks in fs */ +typedef uint16 dev_t; /* Device number */ + +#define MINOR(dev) ((uchar)(dev)) +#define MAJOR(dev) ((uchar)((dev) >> 8)) +#define MKDEV(major, minor) (((uint)(uchar)(major) << 8) | (uchar)(minor)) + +#define NULLINO ((ino_t)0) +#define NULLBLK ((blkno_t)-1) +#define NULLDEV ((dev_t)-1) +#else +typedef uint16 blkno_t; /* Can have 65536 512-byte blocks in filesystem */ +#define NULLBLK ((blkno_t)-1) +#endif + +#if 1 /* Nick UZIX compatible */ +typedef struct s_blkbuf { + uchar bf_data[BUFSIZE]; /* This MUST BE first ! */ + dev_t bf_dev; /* device of this block */ + blkno_t bf_blk; /* and block number on device */ + uchar bf_dirty; /* buffer changed flag */ + uchar bf_busy; /* buffer processing in progress */ + uchar bf_prio; /* buffer must be in memory (for wargs) */ + uint bf_time; /* LRU time stamp */ +/* struct s_blkbuf *bf_next; /* LRU free list pointer */ +} blkbuf_t, *bufptr; +#else +typedef struct s_blkbuf { + char bf_data[512]; /* This MUST be first ! */ + char bf_dev; + blkno_t bf_blk; + char bf_dirty; + char bf_busy; + uint16 bf_time; /* LRU time stamp */ +} blkbuf_t, *bufptr; +#endif + +#if 1 /* Nick UZIX compatible */ +#define DIRECTBLOCKS 18 +#define INDIRECTBLOCKS 1 /* MUST BE 1! */ +#define DINDIRECTBLOCKS 1 /* MUST BE 1! */ +#define TOTALREFBLOCKS (DIRECTBLOCKS+2) +#endif + +#if 1 /* Nick UZIX compatible */ +typedef struct s_dinode { +#else +typedef struct dinode { +#endif + uint16 i_mode; + uint16 i_nlink; + uint16 i_uid; + uint16 i_gid; + off_t i_size; /* Nick blkoff_t i_size; */ + uzitime_t i_atime; + uzitime_t i_mtime; + uzitime_t i_ctime; + blkno_t i_addr[20]; +#if 1 /* Nick UZIX compatible */ +} dinode_t; /* Exactly 64 bytes long! */ +#else +} dinode; /* Exactly 64 bytes long! */ +#endif + +#if 1 /* Nick UZIX compatible */ +#define DINODESPERBLOCK 8 /* # of dinode_t per logical block */ +#define DINODESPERBLOCKLOG 3 /* log2(DINODESPERBLOCK) */ +#define DINODESPERBLOCKMASK ((1<c_node.i_addr[0])) + +/* Getmode() returns the inode kind */ +#define _getmode(mode) ((mode) & S_IFMT) +#define getmode(ino) (_getmode((ino)->c_node.i_mode)) +/* Super() returns true if we are the superuser */ +#define super() (udata.u_euid == 0) +#endif + +#ifndef __TYPES_H /* Nick */ + +struct stat /* Really only used by users */ +{ + int16 st_dev; + uint16 st_ino; + uint16 st_mode; + uint16 st_nlink; + uint16 st_uid; + uint16 st_gid; + uint16 st_rdev; + off_t st_size; /* blkoff_t st_size; */ + uzitime_t st_atime; + uzitime_t st_mtime; + uzitime_t st_ctime; +}; + +#endif + +#if 1 /* Nick UZIX compatible */ +#ifndef _SYS_STAT_H + +#define S_IFMT 0170000 /* file type mask */ +#if 1 /* Nick */ +#define S_IFALIGN 0120000 /* regular file, XIP aligned */ +#endif +#define S_IFLNK 0110000 /* symbolic link */ +#define S_IFREG 0100000 /* or just 000000, regular */ +#define S_IFBLK 0060000 /* block special */ +#define S_IFDIR 0040000 /* directory */ +#define S_IFCHR 0020000 /* character special */ +#define S_IFPIPE 0010000 /* pipe */ + +#define S_UMASK 07777 /* bits modifiable by chmod */ + +#define S_ISUID 04000 /* set euid to file uid */ +#define S_ISGID 02000 /* set egid to file gid */ +#define S_ISVTX 01000 /* */ + +#define S_IREAD 0400 /* owner may read */ +#define S_IWRITE 0200 /* owner may write */ +#define S_IEXEC 0100 /* owner may execute */ + +#define S_IGREAD 0040 /* group may read */ +#define S_IGWRITE 0020 /* group may write */ +#define S_IGEXEC 0010 /* group may execute */ + +#define S_IOREAD 0004 /* other may read */ +#define S_IOWRITE 0002 /* other may write */ +#define S_IOEXEC 0001 /* other may execute */ + +#define S_IRWXU 00700 +#define S_IRUSR 00400 +#define S_IWUSR 00200 +#define S_IXUSR 00100 + +#define S_IRWXG 00070 +#define S_IRGRP 00040 +#define S_IWGRP 00020 +#define S_IXGRP 00010 + +#define S_IRWXO 00007 +#define S_IROTH 00004 +#define S_IWOTH 00002 +#define S_IXOTH 00001 + +#ifdef __KERNEL__ +#define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO) +#define S_IALLUGO (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO) +#define S_IRUGO (S_IRUSR|S_IRGRP|S_IROTH) +#define S_IWUGO (S_IWUSR|S_IWGRP|S_IWOTH) +#define S_IXUGO (S_IXUSR|S_IXGRP|S_IXOTH) +#endif + +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISPIPE(m) (((m) & S_IFMT) == S_IFPIPE) + +#if 1 /* Nick */ +#define S_ISDEV(m) (S_ISCHR(m) || S_ISBLK(m)) +#else +#define S_ISDEV(m) (((m) & S_IFMT) & S_IFCHR) +#endif + +#if 1 /* Nick */ +#define S_ISALIGN(m) (((m) & S_IFMT) == S_IFALIGN) +#define S_ISREGALIGN(m) (S_ISREG(m) || S_ISALIGN(m)) +#endif + +#if 1 /* Nick free bitmap */ +#define XIP_ALIGN 0 +#define XIP_UALIGN 1 +#endif + +#endif +#else +/* Bit masks for i_mode and st_mode */ + +#define OTH_EX 0001 +#define OTH_WR 0002 +#define OTH_RD 0004 +#define GRP_EX 0010 +#define GRP_WR 0020 +#define GRP_RD 0040 +#define OWN_EX 0100 +#define OWN_WR 0200 +#define OWN_RD 0400 + +#define SAV_TXT 01000 +#define SET_GID 02000 +#define SET_UID 04000 + +#define MODE_MASK 07777 + +#define F_REG 0100000 +#define F_DIR 040000 +#define F_PIPE 010000 +#define F_BDEV 060000 +#define F_CDEV 020000 + +#define F_MASK 0170000 +#endif + +#if 1 /* Nick UZIX compatible */ +/* Getmode() returns the inode kind */ +#define _getmode(mode) ((mode) & S_IFMT) +/* temporary #define getmode(ino) (_getmode((ino)->c_node.i_mode)) */ +/* Super() returns true if we are the superuser */ +/* temporary #define super() (udata.u_euid == 0) */ +#endif + + +#if 1 /* Nick UZIX compatible */ +/* in-core inode structure */ +typedef struct s_cinode { + uint16 c_magic; /* Used to check for corruption */ + uchar c_dirty; /* Modified flag */ + dev_t c_dev; /* Inode's device */ + ino_t c_num; /* Inode's number */ + uint16 c_refs; /* In-core reference count */ + bool_t c_ro; /* Read-only filesystem flag */ + dinode_t c_node; /* disk inode copy */ +} cinode_t, *inoptr; +#else +typedef struct cinode { + int16 c_magic; /* Used to check for corruption. */ + int16 c_dev; /* Inode's device */ + uint16 c_num; /* Inode # */ + dinode c_node; + char c_refs; /* In-core reference count */ + char c_dirty; /* Modified flag. */ +} cinode, *inoptr; +#endif + +#define NULLINODE ((inoptr)NULL) +#define NULLINOPTR ((inoptr*)NULL) + + +#ifndef __TYPES_H /* Nick */ +#define DIRNAMELEN 14 + +/* device directory entry */ +typedef struct s_direct { + uint16 d_ino; /* file's inode */ + uchar d_name[DIRNAMELEN]; /* file name */ +} direct_t; + +#define BUFSIZE 512 /* uzix buffer/block size */ +#define BUFSIZELOG 9 /* uzix buffer/block size log2 */ + +#if 1 /* Nick free bitmap */ +#define REGION_LOG 14 +#define REGION_BYTES (1< +_asm +OSYS equ 2 ; byte offsets of elements of u_data +OCALL equ 3 +ORET equ 4 ; Return Location +ORVAL equ 6 ; Return Value +OERR equ 8 ; Error Number +OSP equ 10 ; User's Stack Pointer +OBC equ 12 ; User's Frame Pointer +OPAGE equ 121 + NSIGS ; Nick ; User's base BBR register value for Process +_endasm +------*/ + +#if 1 /* Nick UZIX compatible */ +typedef struct s_udata { +#else +typedef struct u_data { +#endif +#if 1 /* Nick UZIX compatible */ + ptab_t *u_ptab; /* Process table pointer */ +#else + struct p_tab *u_ptab; /* Process table pointer */ +#endif + char u_insys; /* True if in kernel */ + char u_callno; /* sys call being executed. */ + char *u_retloc; /* Return location from sys call */ + int u_retval; /* Return value from sys call */ + int u_retval1; /* Nick, for long return value from lseek() */ + int u_error; /* Last error number */ + int *u_sp; /* Used when process is swapped. */ + int *u_bc; /* Place for user's frame pointer */ + int u_cursig; /* Signal currently being caught */ +#if 1 /* Nick */ + int u_argn0; /* Last system call arg */ +#else + int u_argn; /* Last system call arg */ +#endif + int u_argn1; /* This way because args on stack backwards */ + int u_argn2; + int u_argn3; /* args n-3, n-2, n-1, and n */ + + char * u_base; /* Source or dest for I/O */ + unsigned u_count; /* Amount for I/O */ + off_t u_offset; /* Nick blkoff_t u_offset; /* Place in file for I/O */ +#if 1 /* Nick UZIX compatible */ + struct s_blkbuf *u_buf; +#else + struct blkbuf *u_buf; +#endif + char u_sysio; /* True if I/O to system space */ + + int u_gid; + int u_euid; + int u_egid; + int u_mask; /* umask: file creation mode mask */ + uzitime_t u_time; /* Start time */ +#if 0 + char u_files[UFTSIZE]; /* Process file table: + indices into open file table. */ +#endif + inoptr u_cwd; /* Index into inode table of cwd. */ + unsigned u_break; /* Top of data space */ + inoptr u_ino; /* Used during execve() */ + char *u_isp; /* Value of initial sp (argv) */ + int (*u_sigvec[NSIGS])(); /* Array of signal vectors */ + char u_name[8]; /* Name invoked with */ + uzitime_t u_utime; /* Elapsed ticks in user mode */ + uzitime_t u_stime; /* Ticks in system mode */ + uzitime_t u_cutime; /* Total childrens ticks */ + uzitime_t u_cstime; + char u_page; /* Process' MMU Base Address */ + inoptr u_root; /* Index into inode table of chroot target */ + char u_traceme; /* added by Nick, used only ifdef DEBUG */ + char u_debugme; /* added by Nick, used only ifdef DEBUG */ +#if 1 + char u_files[UFTSIZE]; /* Process file table: + indices into open file table. */ +#endif +#if 1 /* Nick UZIX compatible */ +} udata_t; +#else +} u_data; +#endif + + +/* This is the user data structure, padded out to 512 bytes with the + * System Stack. + */ +#if 1 /* Nick */ +typedef struct s_ublock { +#else +typedef struct u_block { +#endif +#if 1 /* Nick UZIX compatible */ + udata_t u_d; + char u_s [0x1000 /*512*/ - sizeof(struct s_udata)]; +#else + u_data u_d; + char u_s [512 - sizeof(struct u_data)]; +#endif +#if 1 /* Nick */ +} ublock_t; +#else +} u_block; +#endif + + +/* Struct to temporarily hold arguments in execve */ +struct s_argblk { + int a_argc; + int a_arglen; + int a_envc; + char a_buf[512-3*sizeof(int)]; +}; + + +/* The device driver switch table */ + +#if 1 /* Nick UZIX compatible */ +/* The device driver switch table */ +typedef struct s_devsw { + uchar minors; /* # of minor device numbers */ + int (*dev_init)(uchar minor); + int (*dev_open)(uchar minor); + int (*dev_close)(uchar minor); + int (*dev_read)(uchar minor, uchar rawflag); + int (*dev_write)(uchar minor, uchar rawflag); + int (*dev_ioctl)(uchar minor, int cmd, void *data); +} devsw_t; +#else +typedef struct devsw { + int minor; /* The minor device number (an argument to below) */ + int (*dev_open)(); /* The routines for reading, etc */ + int (*dev_close)(); /* Format: op(minor,blkno,offset,count,buf); */ + int (*dev_read)(); /* Offset would be ignored for block devices */ + int (*dev_write)(); /* Blkno and offset ignored for tty, etc. */ + int (*dev_ioctl)(); /* Count is rounded to 512 for block devices */ +} devsw; +#endif + +#if 1 /* Nick UZIX compatible */ +#ifndef NATIVE +#ifndef __FCNTL_H +/* extra definitions added by Nick from sys/fcntl.h, needed for UTIL target */ + +#define O_RDONLY 0 +#define O_WRONLY 1 +#define O_RDWR 2 + +/* Flag values for open only */ +#define O_CREAT 0x0100 /* create and open file */ +#define O_TRUNC 0x0200 /* open with truncation */ +#define O_NEW 0x0400 /* create only if not exist */ +#define O_SYMLINK 0x0800 /* open symlink as file */ + +/* a file in append mode may be written to only at its end. */ +#define O_APPEND 0x2000 /* to end of file */ +#define O_EXCL 0x4000 /* exclusive open */ +#define O_BINARY 0x8000 /* not used in unix */ + +#endif +#endif +#else +#ifndef _FCNTL_H +/* Open() parameters. */ + +#define O_RDONLY 0 +#define O_WRONLY 1 +#define O_RDWR 2 +#endif +#endif + +#if 1 /* Nick UZIX compatible */ +#ifndef __ERRNO_H +/* Error codes */ /*- if not used */ +#define EPERM 1 /* 1 Operation not permitted */ +#define ENOENT 2 /* 2 No such file or directory */ +#define ESRCH 3 /*-*/ /* 3 No such process */ +#define EINTR 4 /* 4 Interrupted system call */ +#define EIO 5 /* 5 I/O error */ +#define ENXIO 6 /* 6 No such device or address */ +#define E2BIG 7 /* 7 Arg list too long */ +#define ENOEXEC 8 /* 8 Exec format error */ +#define EBADF 9 /* 9 Bad file number */ +#define ECHILD 10 /* 10 No child processes */ +#define EAGAIN 11 /* 11 Try again */ +#define ENOMEM 12 /* 12 Out of memory */ +#define EACCES 13 /* 13 Permission denied */ +#define EFAULT 14 /* 14 Bad address */ +#define ENOTBLK 15 /* 15 Block device required */ +#define EBUSY 16 /* 16 Device or resource busy */ +#define EEXIST 17 /* 17 File exists */ +#define EXDEV 18 /* 18 Cross-device link */ +#define ENODEV 19 /* 19 No such device */ +#define ENOTDIR 20 /* 20 Not a directory */ +#define EISDIR 21 /* 21 Is a directory */ +#define EINVAL 22 /* 22 Invalid argument */ +#define ENFILE 23 /* 23 File table overflow */ +#define EMFILE 24 /*-*/ /* 24 Too many open files */ +#define ENOTTY 25 /*-*/ /* 25 Not a typewriter */ +#define ETXTBSY 26 /*-*/ /* 26 Text file busy */ +#define EFBIG 27 /*-*/ /* 27 File too large */ +#define ENOSPC 28 /* 28 No space left on device */ +#define ESPIPE 29 /* 29 Illegal seek */ +#define EROFS 30 /*-*/ /* 30 Read-only file system */ +#define EMLINK 31 /*-*/ /* 31 Too many links */ +#define EPIPE 32 /* 32 Broken pipe */ +#define EDOM 33 /*-*/ /* 33 Math argument out of domain of func */ +#define ERANGE 34 /*-*/ /* 34 Math result not representable */ +#define EDEADLK 35 /*-*/ /* 35 Resource deadlock would occur */ +#define ENAMETOOLONG 36 /*-*/ /* 36 File name too long */ +#define ENOLCK 37 /*-*/ /* 37 No record locks available */ +#define EINVFNC 38 /* 38 Function not implemented */ +#define ENOTEMPTY 39 /*-*/ /* 39 Directory not empty */ +#define ELOOP 40 /*-*/ /* 40 Too many symbolic links encountered */ +#define ESHELL 41 /*-*/ /* 41 It's a shell script */ +#define ENOSYS EINVFNC + +#define __ERRORS 40 +#endif +#else +#ifndef __ERRNO_H +/* + * Error codes + */ +#define EPERM 1 /* Not owner */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted System Call */ +#define EIO 5 /* I/O Error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Arg list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No children */ +#define EAGAIN 11 /* No more processes */ +#define ENOMEM 12 /* Not enough core */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Mount device busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* File table overflow */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Not a typewriter */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ + +/* math software */ +#define EDOM 33 /* Argument too large */ +#define ERANGE 34 /* Result too large */ + +#define ENAMETOOLONG 63 /* File name too long */ +#endif +#endif + +#if 1 /* Nick UZIX compatible */ + +/* Info about a specific process, returned by sys_getfsys */ +typedef struct s_pdata { + int u_pid; /* Process PID */ + ptab_t *u_ptab; /* Process table pointer */ + uchar u_name[DIRNAMELEN]; /* Name invoked with */ + + /* syscall's interface */ + uchar u_insys; /* True if in kernel now */ + uchar u_callno; /* syscall being executed */ + uchar u_traceme; /* Process tracing flag */ + + /* filesystem/user info */ + uchar u_uid; /* user id */ + uchar u_gid; /* group id */ + uchar u_euid; /* effective user id */ + uchar u_egid; /* group user id */ + uzitime_t u_time; /* Start time */ + + /* process flow info */ + signal_t u_cursig; /* Signal currently being caught */ + + /* time info */ + uzitime_t u_utime; /* Elapsed ticks in user mode */ + uzitime_t u_stime; /* Ticks in system mode */ +}; + +/* Info about kernel, returned by sys_getfsys */ +typedef struct s_kdata { + uchar k_name[14]; /* OS name */ + uchar k_version[8]; /* OS version */ + uchar k_release[8]; /* OS release */ + + uchar k_host[14]; /* Host name */ + uchar k_machine[8]; /* Host machine */ + + int k_tmem; /* System memory, in kbytes */ + int k_kmem; /* Kernel memory, in kbytes */ +}; + +#define PRIO_MAX 19 +#define PRIO_MIN -20 + +#define WNOHANG 1 +#define WUNTRACED 2 + +/* sys_getset() commands */ +#define GET_PID 0 /* get process id */ +#define GET_PPID 1 /* get parent process id */ +#define GET_UID 2 /* get user id */ +#define SET_UID 3 /* set user id */ +#define GET_EUID 4 /* get effective user id */ +#define GET_GID 5 /* get group id */ +#define SET_GID 6 /* set group id */ +#define GET_EGID 7 /* get effective group id */ +#define GET_PRIO 8 /* get process priority */ +#define SET_PRIO 9 /* set process priority */ +#define SET_UMASK 10 /* get/set umask */ +#define SET_TRACE 11 /* set trace flag */ +#define SET_DEBUG 12 /* set debug flag */ + +#endif + +#ifndef SEEK_SET +/* extra definitions from sys/seek.h, it wasn't worth testing _SYS_SEEK_H */ +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif + +#ifndef _SYS_IOCTL_H +/* extra definitions added by Nick from sys/ioctl.h, needed for UTIL target */ +typedef enum { + GI_PTAB = -1, /* processes table */ + GI_ITAB = -2, /* inodes table */ + GI_BTAB = -3, /* buffers table */ + GI_FTAB = -4, /* filesystems table */ + GI_UDAT = -5, /* process user data */ + GI_UTAB = -6, /* current process table */ + GI_PDAT = -7, /* process info */ + GI_KDAT = -8 /* kernel info */ +} getinfo_t; + +typedef struct { + getinfo_t req; + int size; /* Nick temporary size_t size; */ + void *ptr; +} info_t; +#endif + +#if 1 /* Nick EXE format */ +#define E_MAGIC 0xa6c9 + +#define E_FORMAT_LARGE 1 +#define E_FORMAT_BANKED 2 +#define E_FORMAT_KERNEL 3 + +typedef struct s_exefile + { + uint16 e_magic; + uint16 e_format; + off_t e_size; + uint16 e_hsize; + uint16 e_idata; + uint16 e_entry; + uint16 e_udata; + uint16 e_stack; + uint16 e_break; + } exefile_t; +#endif + +#endif /* __UNIX_H */ + diff --git a/src/nos/include/uzi/usrmem.h b/src/nos/include/uzi/usrmem.h new file mode 100644 index 00000000..069d3d47 --- /dev/null +++ b/src/nos/include/uzi/usrmem.h @@ -0,0 +1,21 @@ +/* usrmem.h by Nick for NOS/UZI project */ + +#ifndef __USRMEM_H +#define __USRMEM_H + +#define bcopy(s, d, c) memcpy(d, s, c) +#define bfill(d, v, c) memset(d, v, c) +#define bzero(d, c) memset(d, 0, c) +#define uget(s, d, c) usrget(d, s, c) +#define ugets(s, d, c) usrget_str(d, s, c) +#define ugetw(s) usrget_int(s) +#define uput(s, d, c) usrput(d, s, c) +#define uputw(v, d) usrput_int(d, v) + +void *usrget(void *dest, const void *src, size_t count); +int usrget_int(const void *src); +void *usrget_str(void *dest, const void *src, size_t count); +void *usrput(void *dest, const void *src, size_t count); +void usrput_int(void *dest, int value); + +#endif /* __USRMEM_H */ diff --git a/src/nos/include/uzi/xfs.h b/src/nos/include/uzi/xfs.h new file mode 100644 index 00000000..9e6b7f30 --- /dev/null +++ b/src/nos/include/uzi/xfs.h @@ -0,0 +1,58 @@ +/* + * UZIX - UNIX Implementation for MSX + * (c) 1997-2001 Arcady Schekochikhin + * Adriano C. R. da Cunha + * + * UZIX is based on UZI (UNIX Zilog Implementation) + * UZI is a UNIX kernel clone written for Z-80 systems. + * All code is public domain, not being based on any AT&T code. + * + * The author, Douglas Braun, can be reached at: + * 7696 West Zayante Rd. + * Felton, CA 95018 + * oliveb!intelca!mipos3!cadev4!dbraun + * + * This program is under GNU GPL, read COPYING for details + * + */ + +/********************************************************** + UZIX system calls wrappers, used by UZIX utilities +**********************************************************/ + +#ifndef _XFS_H +#define _XFS_H + +void xfs_init(dev_t boot_dev); +void xfs_end(void); +int xfs_open(const char *name, int flag, ...); +int xfs_close(int uindex); +int xfs_creat(const char *name, mode_t mode); +int xfs_link(char *name1, char *name2); +int xfs_symlink(char *name1, char *name2); +int xfs_unlink(const char *path); +int xfs_read(int d, void *buf, size_t nbytes); +int xfs_write(int d, const void *buf, size_t nbytes); +int xfs_seek(int file, unsigned int offset, int flag); +int xfs_chdir(char *dir); +int xfs_mknod(char *name, mode_t mode, int dev); +void xfs_sync(void); +int xfs_access(char *path, int mode); +int xfs_chmod(char *path, mode_t mode); +int xfs_chown(char *path, int owner, int group); +int xfs_stat(char *path, struct stat *buf); +int xfs_fstat(int fd, struct stat *buf); +int xfs_falign(int fd, int parm); +int xfs_dup(int oldd); +int xfs_dup2(int oldd, int newd); +int xfs_umask(int mask); +int xfs_sysdebug(int level); +int xfs_systrace(int level); +int xfs_ioctl(int fd, int request, ...); +int xfs_mount(char *spec, char *dir, int rwflag); +int xfs_umount(char *spec); +time_t xfs_time(time_t *tvec); +int xfs_getfsys(int dev, void *buf); + +#endif + diff --git a/src/nos/include/uzi/xip.h b/src/nos/include/uzi/xip.h new file mode 100644 index 00000000..1aa7da4f --- /dev/null +++ b/src/nos/include/uzi/xip.h @@ -0,0 +1,29 @@ +/* xip.h by Nick for NOS/UZI project */ + +#ifndef __XIP_H +#define __XIP_H + +int xip_align(cinode_t *ino, off_t size); +int xip_ualign(cinode_t *ino, off_t size); +blkno_t *xip_examine(filesys_t *dev, cinode_t *ino, off_t size, + blkno_t *regioncount, blkno_t *blockcount); +blkno_t xip_align_chase(filesys_t *dev, cinode_t *ino, blkno_t blk, + blkno_t pos, blkno_t *region, blkno_t regions, blkno_t blocks); +blkno_t xip_align_bmap(cinode_t *ino, blkno_t newno, blkno_t pos); +blkno_t xip_align_reverse(blkno_t blk, + blkno_t *region, blkno_t regions, blkno_t blocks); +blkno_t xip_align_recurse(filesys_t *dev, cinode_t *ino, int exclude, + blkno_t *parent, char *dirty, + int indirection, blkno_t *region, + blkno_t regions, blkno_t blocks); +blkno_t xip_search(dev_t devno, int size, blkno_t start, blkno_t final); +int xip_reserve(dev_t devno, blkno_t blk, int size, int flag, + blkno_t start, blkno_t final); +blkno_t xip_find(dev_t devno, blkno_t blk, int flag, int toggle, + blkno_t start, blkno_t final); +int xip_get(dev_t devno, blkno_t blk, blkno_t start, blkno_t final); +int xip_set(dev_t devno, blkno_t blk, int flag, + blkno_t start, blkno_t final); + +#endif /* __XIP_H */ + diff --git a/src/nos/include/varargs.h b/src/nos/include/varargs.h new file mode 100644 index 00000000..bdab9db0 --- /dev/null +++ b/src/nos/include/varargs.h @@ -0,0 +1,13 @@ +#ifndef __VARARGS_H +#define __VARARGS_H + +#ifndef __STDARG_H +typedef void *va_list; + +#define va_dcl va_list va_alist; +#define va_start(ap) (ap) = (va_list)&va_alist +#define va_arg(ap,t) ((t *)(((char *)(ap)) += sizeof(t)))[-1] +#define va_end(ap) (ap) = NULL + +#endif +#endif diff --git a/src/nos/include/vendor.h b/src/nos/include/vendor.h new file mode 100644 index 00000000..20819e06 --- /dev/null +++ b/src/nos/include/vendor.h @@ -0,0 +1,11 @@ +/* vendor.h for IAR by Nick, puts underscores on externs where necessary */ + +#ifndef __VENDOR_H +#define __VENDOR_H + +/* #define read _read */ +/* #define write _write */ +/* #define symlink link */ + +#endif /* __VENDOR.H */ + diff --git a/src/nos/include/z80/asm.h b/src/nos/include/z80/asm.h new file mode 100644 index 00000000..f9f60fe8 --- /dev/null +++ b/src/nos/include/z80/asm.h @@ -0,0 +1,210 @@ +/* global include file for all .S files to specify model and define macros */ + +/* ------------------------------------------------------------------------- */ +/* Z180 register definitions: */ + +#define CNTLA0 0x00 /* ASCI Control Reg A Ch 0 */ +#define CNTLA1 0x01 /* ASCI Control Reg A Ch 1 */ +#define CNTLB0 0x02 /* ASCI Control Reg B Ch 0 */ +#define CNTLB1 0x03 /* ASCI Control Reg B Ch 1 */ +#define STAT0 0x04 /* ASCI Status Reg Ch 0 */ +#define STAT1 0x05 /* ASCI Status Reg Ch 1 */ +#define TDR0 0x06 /* ASCI Tx Data Reg Ch 0 */ +#define TDR1 0x07 /* ASCI Tx Data Reg Ch 1 */ +#define RDR0 0x08 /* ASCI Rx Data Reg Ch 0 */ +#define RDR1 0x09 /* ASCI Rx Data Reg Ch 1 */ + +#define CNTR 0x0a /* CSI/O Control Reg */ +#define TRDR 0x0b /* CSI/O Tx/Rx Data Reg */ + +#define TMDR0L 0x0c /* Timer Data Reg Ch0-Low */ +#define TMDR0H 0x0d /* Timer Data Reg Ch0-High */ +#define RLDR0L 0x0e /* Timer Reload Reg Ch0-Low */ +#define RLDR0H 0x0f /* Timer Reload Reg Ch0-High */ +#define TCR 0x10 /* Timer Control Reg */ +#define TMDR1L 0x14 /* Timer Data Reg Ch1-Low */ +#define TMDR1H 0x15 /* Timer Data Reg Ch1-High */ +#define RLDR1L 0x16 /* Timer Reload Reg Ch1-Low */ +#define RLDR1H 0x17 /* Timer Reload Reg Ch1-High */ +#define FRC 0x18 /* Free-Running Counter */ + +#define SAR0L 0x20 /* DMA Source Addr Reg Ch0-Low */ +#define SAR0H 0x21 /* DMA Source Addr Reg Ch0-High */ +#define SAR0B 0x22 /* DMA Source Addr Reg Ch0-Bank */ +#define DAR0L 0x23 /* DMA Dest Addr Reg Ch0-Low */ +#define DAR0H 0x24 /* DMA Dest Addr Reg Ch0-High */ +#define DAR0B 0x25 /* DMA Dest ADDR REG CH0-Bank */ +#define BCR0L 0x26 /* DMA Byte Count Reg Ch0-Low */ +#define BCR0H 0x27 /* DMA Byte Count Reg Ch0-High */ +#define MAR1L 0x28 /* DMA Memory Addr Reg Ch1-Low */ +#define MAR1H 0x29 /* DMA Memory Addr Reg Ch1-High */ +#define MAR1B 0x2a /* DMA Memory Addr Reg Ch1-Bank */ +#define IAR1L 0x2b /* DMA I/O Addr Reg Ch1-Low */ +#define IAR1H 0x2c /* DMA I/O Addr Reg Ch2-High */ +#define BCR1L 0x2e /* DMA Byte Count Reg Ch1-Low */ +#define BCR1H 0x2f /* DMA Byte Count Reg Ch1-High */ +#define DSTAT 0x30 /* DMA Status Reg */ +#define DMODE 0x31 /* DMA Mode Reg */ +#define DCNTL 0x32 /* DMA/Wait Control Reg */ + +#define IL 0x33 /* INT Vector Low Reg */ +#define ITC 0x34 /* INT/TRAP Control Reg */ +#define RCR 0x36 /* Refresh Control Reg */ +#define CBR 0x38 /* MMU Common Base Reg */ +#define BBR 0x39 /* MMU Bank Base Reg */ +#define CBAR 0x3a /* MMU COmmon/Bank Area Reg */ +#define ICR 0x3f /* I/O Control Reg */ + +/* Z180 register bit definitions: */ + +#define INT0SW 0x01 /* interrupt enable bits in ITC */ +#define INT1SW 0x02 /* interrupt enable bits in ITC */ +#define INT2SW 0x04 /* interrupt enable bits in ITC */ + +/* S180 additional registers: */ + +#define CCR 0x1f /* CPU Control Reg */ +#define OMCR 0x3e /* Operation Mode Control Reg */ + +/* Z182 additional registers: */ + +#if 0 +#define BRK0 0x12 /* Break Control Reg Ch 0 */ +#define BRK1 0x13 /* Break Control Reg Ch 1 */ + +#define WSGCS 0xd8 /* Wait-State Generator Chip Select */ +#define ENH182 0xd9 /* Z80182 Enhancements Reg */ +#define INTTYPE 0xdf /* Interrupt Edge/Pin MUX Reg */ +#define PINMUX 0xdf /* Interrupt Edge/Pin MUX Reg */ +#define RAMUBR 0xe6 /* RAM End Boundary */ +#define RAMLBR 0xe7 /* RAM Start Boundary */ +#define ROMBR 0xe8 /* ROM Boundary */ +#define FIFOCTL 0xe9 /* FIFO Control Reg */ +#define RTOTC 0xea /* Rx Time-Out Time Constant */ +#define TTOTC 0xeb /* Tx Time-Out Time Constant */ +#define FCR 0xec /* FIFO Register */ +#define SCR 0xef /* System Pin Control */ +/* (MIMIC Registers occupy 0xf0-0xff if used) */ + +#define DDRA 0xed /* PIO Direction Reg Port A */ +#define DRA 0xee /* PIO Data Port A */ +#define DDRB 0xe4 /* PIO Direction Reg Port B */ +#define DRB 0xe5 /* PIO Data Port B */ +#define DDRC 0xdd /* PIO Direction Reg Port C */ +#define DRC 0xde /* PIO Data Port C */ + +#define SCCACNT 0xe0 /* ESCC Control Channel A */ +#define SCCAD 0xe1 /* ESCC Data Channel A */ +#define SCCBCNT 0xe2 /* ESCC Control Channel B */ +#define SCCBD 0xe3 /* ESCC Data Channel B */ +#endif + +/* ------------------------------------------------------------------------- */ +/* Hytech specific hardware: (For the WPO30-V5, Hytech 1000, Hytech 1500) */ + +#define BC8530 0x214 /* channel B control in 8530 */ +#define AC8530 0x215 /* channel A control in 8530 */ +#define BD8530 0x216 /* channel B data in 8530 */ +#define AD8530 0x217 /* channel A data in 8530 */ + +/* ------------------------------------------------------------------------- */ +/* Filesystem configuration: (These constants are needed at boot time) */ + +#define LDFILE 0xf037 /* BOOTLDR.BIN entry point */ + +#define SUPERBLOCK 4 /* starting position of filesystem */ +#define SMOUNTED 12742 /* random number to flag mounted fs */ +#define ROOTINODE 1 /* root inode # for all mounted fs */ + +#define BUFSIZE 0x200 /* count of bytes per disk block */ +#define BUFSIZELOG 9 /* shift count representing above */ + +#define SIZEOF_DINODE_T 64 /* count of bytes per disk inode */ +#define DINODESPERBLOCK 8 /* count of disk inodes per block */ +#define DINODESPERBLOCKLOG 3 /* shift count representing above */ + +#define DIRECTBLOCKS 18 /* count of direct block #s in inode */ +#define INDIRECTBLOCKS 1 /* MUST BE 1! */ +#define DINDIRECTBLOCKS 1 /* MUST BE 1! */ +#define TOTALREFBLOCKS (DIRECTBLOCKS+INDIRECTBLOCKS+DINDIRECTBLOCKS) + +#define SIZEOF_DIRECT_T 16 /* count of bytes per dir entry */ +#define DIRNAMELEN 14 /* how many of these are dir name */ + +#define REGION_LOG 14 /* file alignment uses 16kbyte units */ +#define REGION_BYTES (1<state == ARP_VALID) + return arp->hw_addr; + if(arp != NULL){ + /* Earlier packets are already pending, kick this one back + * as a source quench + */ + ntohip(&ip,bpp); + icmp_output(&ip,*bpp,ICMP_QUENCH,0,NULL); + free_p(bpp); + } else { + /* Create an entry and put the datagram on the + * queue pending an answer + */ + arp = arp_add(target,hardware,NULL,0); + enqueue(&arp->pending,bpp); + arp_output(iface,hardware,target); + } + return NULL; +} +/* Handle incoming ARP packets. This is almost a direct implementation of + * the algorithm on page 5 of RFC 826, except for: + * 1. Outgoing datagrams to unresolved addresses are kept on a queue + * pending a reply to our ARP request. + * 2. The names of the fields in the ARP packet were made more mnemonic. + * 3. Requests for IP addresses listed in our table as "published" are + * responded to, even if the address is not our own. + */ +void +arp_input( +struct iface *iface, +struct mbuf **bpp +){ + struct arp arp; + struct arp_tab *ap; + struct arp_type *at; + int i; + + Arp_stat.recv++; + if(ntoharp(&arp,bpp) == -1) /* Convert into host format */ + return; + if(arp.hardware >= NHWTYPES){ + /* Unknown hardware type, ignore */ + Arp_stat.badtype++; + return; + } + at = &Arp_type[arp.hardware]; + if(arp.protocol != at->iptype){ + /* Unsupported protocol type, ignore */ + Arp_stat.badtype++; + return; + } + if(arp.hwalen > MAXHWALEN || arp.pralen != sizeof(int32)){ + /* Incorrect protocol addr length (different hw addr lengths + * are OK since AX.25 addresses can be of variable length) + */ + Arp_stat.badlen++; + return; + } + if(memcmp(arp.shwaddr,at->bdcst,at->hwalen) == 0){ + /* This guy is trying to say he's got the broadcast address! */ + Arp_stat.badaddr++; + return; + } + /* If this guy is already in the table, update its entry + * unless it's a manual entry (noted by the lack of a timer) + */ + ap = NULL; /* ap plays the role of merge_flag in the spec */ + if((ap = arp_lookup(arp.hardware,arp.sprotaddr)) != NULL + && dur_timer(&ap->timer) != 0){ + ap = arp_add(arp.sprotaddr,arp.hardware,arp.shwaddr,0); + } + /* See if we're the address they're looking for */ + if(ismyaddr(arp.tprotaddr) != NULL){ + if(ap == NULL) /* Only if not already in the table */ + arp_add(arp.sprotaddr,arp.hardware,arp.shwaddr,0); + + if(arp.opcode == ARP_REQUEST){ + /* Swap sender's and target's (us) hardware and protocol + * fields, and send the packet back as a reply + */ + memcpy(arp.thwaddr,arp.shwaddr,(uint16)arp.hwalen); + /* Mark the end of the sender's AX.25 address + * in case he didn't + */ + if(arp.hardware == ARP_AX25) + arp.thwaddr[arp.hwalen-1] |= E; + + memcpy(arp.shwaddr,iface->hwaddr,at->hwalen); + arp.tprotaddr = arp.sprotaddr; + arp.sprotaddr = iface->addr; + arp.opcode = ARP_REPLY; + if((*bpp = htonarp(&arp)) == NULL) + return; + + if(iface->forw != NULL) + (*iface->forw->output)(iface->forw, + arp.thwaddr,iface->forw->hwaddr,at->arptype,bpp); + else + (*iface->output)(iface,arp.thwaddr, + iface->hwaddr,at->arptype,bpp); + Arp_stat.inreq++; + } else { + Arp_stat.replies++; + } + } else if(arp.opcode == ARP_REQUEST + && (ap = arp_lookup(arp.hardware,arp.tprotaddr)) != NULL + && ap->pub){ + /* Otherwise, respond if the guy he's looking for is + * published in our table. + */ + memcpy(arp.thwaddr,arp.shwaddr,(uint16)arp.hwalen); + memcpy(arp.shwaddr,ap->hw_addr,at->hwalen); + arp.tprotaddr = arp.sprotaddr; + arp.sprotaddr = ap->ip_addr; + arp.opcode = ARP_REPLY; + if((*bpp = htonarp(&arp)) == NULL) + return; + if(iface->forw != NULL) + (*iface->forw->output)(iface->forw, + arp.thwaddr,iface->forw->hwaddr,at->arptype,bpp); + else + (*iface->output)(iface,arp.thwaddr, + iface->hwaddr,at->arptype,bpp); + Arp_stat.inreq++; + } else if(arp.opcode == REVARP_REQUEST){ + for(i=0;inext) + if(memcmp(ap->hw_addr,arp.thwaddr,at->hwalen) == 0) + goto found; + found: if(ap != NULL && ap->pub){ + memcpy(arp.shwaddr,iface->hwaddr,at->hwalen); + arp.tprotaddr = ap->ip_addr; + arp.sprotaddr = iface->addr; + arp.opcode = REVARP_REPLY; + if((*bpp = htonarp(&arp)) == NULL) + return; + if(iface->forw != NULL) + (*iface->forw->output)(iface->forw, + arp.thwaddr,iface->forw->hwaddr,REVARP_TYPE,bpp); + else + (*iface->output)(iface,arp.thwaddr, + iface->hwaddr,REVARP_TYPE,bpp); + Arp_stat.inreq++; + } + } +} +/* Add an IP-addr / hardware-addr pair to the ARP table */ +struct arp_tab * +arp_add(ipaddr,hardware,hw_addr,pub) +int32 ipaddr; /* IP address, host order */ +enum arp_hwtype hardware; /* Hardware type */ +uint8 *hw_addr; /* Hardware address, if known; NULL otherwise */ +int pub; /* Publish this entry? */ +{ + struct mbuf *bp; + register struct arp_tab *ap; + struct arp_type *at; + unsigned hashval; + + if(hardware >=NHWTYPES) + return NULL; /* Invalid hardware type */ + at = &Arp_type[hardware]; + + if((ap = arp_lookup(hardware,ipaddr)) == NULL){ + /* New entry */ + ap = (struct arp_tab *)callocw(1,sizeof(struct arp_tab)); + ap->hw_addr = mallocw(at->hwalen); + ap->timer.func = arp_drop; + ap->timer.arg = ap; + ap->hardware = hardware; + ap->ip_addr = ipaddr; + + /* Put on head of hash chain */ + hashval = hash_ip(ipaddr); + ap->prev = NULL; + ap->next = Arp_tab[hashval]; + Arp_tab[hashval] = ap; + if(ap->next != NULL){ + ap->next->prev = ap; + } + } + if(hw_addr == NULL){ + /* Await response */ + ap->state = ARP_PENDING; + set_timer(&ap->timer,Arp_type[hardware].pendtime * 1000L); + } else { + /* Response has come in, update entry and run through queue */ + ap->state = ARP_VALID; + set_timer(&ap->timer,ARPLIFE*1000L); + memcpy(ap->hw_addr,hw_addr,at->hwalen); + ap->pub = pub; + while((bp = dequeue(&ap->pending)) != NULL) + ip_route(NULL,&bp,0); + } + start_timer(&ap->timer); + return ap; +} + +/* Remove an entry from the ARP table */ +void +arp_drop(p) +void *p; +{ + register struct arp_tab *ap; + + ap = (struct arp_tab *)p; + if(ap == NULL) + return; + stop_timer(&ap->timer); /* Shouldn't be necessary */ + if(ap->next != NULL) + ap->next->prev = ap->prev; + if(ap->prev != NULL) + ap->prev->next = ap->next; + else + Arp_tab[hash_ip(ap->ip_addr)] = ap->next; + free_q(&ap->pending); + free(ap->hw_addr); + free(ap); +} + +/* Look up the given IP address in the ARP table */ +struct arp_tab * +arp_lookup(hardware,ipaddr) +enum arp_hwtype hardware; +int32 ipaddr; +{ + register struct arp_tab *ap; + + for(ap = Arp_tab[hash_ip(ipaddr)]; ap != NULL; ap = ap->next){ + if(ap->ip_addr == ipaddr && ap->hardware == hardware) + break; + } + return ap; +} +/* Send an ARP request to resolve IP address target_ip */ +static void +arp_output(iface,hardware,target) +struct iface *iface; +enum arp_hwtype hardware; +int32 target; +{ + struct arp arp; + struct mbuf *bp; + struct arp_type *at; + + at = &Arp_type[hardware]; + if(iface->output == NULL) + return; + + arp.hardware = hardware; + arp.protocol = at->iptype; + arp.hwalen = at->hwalen; + arp.pralen = sizeof(int32); + arp.opcode = ARP_REQUEST; + memcpy(arp.shwaddr,iface->hwaddr,at->hwalen); + arp.sprotaddr = iface->addr; + memset(arp.thwaddr,0,at->hwalen); + arp.tprotaddr = target; + if((bp = htonarp(&arp)) == NULL) + return; + (*iface->output)(iface,at->bdcst, + iface->hwaddr,at->arptype,&bp); + Arp_stat.outreq++; +} + diff --git a/src/nos/internet/arpcmd.c b/src/nos/internet/arpcmd.c new file mode 100644 index 00000000..9528374e --- /dev/null +++ b/src/nos/internet/arpcmd.c @@ -0,0 +1,234 @@ +/* ARP commands + * Copyright 1991, Phil Karn, KA9Q + */ +#include +#include +#include "global.h" +#include "mbuf.h" +#include "timer.h" +#include "enet.h" +#include "ax25.h" +#include "arp.h" +#include "netuser.h" +#include "cmdparse.h" +#include "commands.h" +#include +#include "po/messages.h" + +static int doarpadd(int argc,char *argv[],void *p); +static int doarpdrop(int argc,char *argv[],void *p); +static int doarpflush(int argc,char *argv[],void *p); +static void dumparp(void); + +static struct cmds Arpcmds[] = { + N_("add"), doarpadd, 0, 4, + N_("arp add ether|ax25|netrom|arcnet "), + + N_("drop"), doarpdrop, 0, 3, + N_("arp drop ether|ax25|netrom|arcnet"), + + N_("flush"), doarpflush, 0, 0, + NULL, + + N_("publish"), doarpadd, 0, 4, + N_("arp publish ether|ax25|netrom|arcnet "), + + NULL, +}; +char *Arptypes[] = { + "NET/ROM", + "10 Mb Ethernet", + "3 Mb Ethernet", + "AX.25", + "Pronet", + "Chaos", + "", + "Arcnet", + "Appletalk" +}; + +int +doarp(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + if(argc < 2){ + dumparp(); + return 0; + } + return subcmd(Arpcmds,argc,argv,p); +} +static +doarpadd(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + uint16 hardware; + int32 addr; + uint8 *hwaddr; + struct arp_tab *ap; + struct arp_type *at; + int pub = 0; + + if(argv[0][0] == 'p') /* Is this entry published? */ + pub = 1; + if((addr = resolve(argv[1])) == 0){ + printf(Badhost,argv[1]); + return 1; + } + /* This is a kludge. It really ought to be table driven */ + switch(tolower(argv[2][0])){ + case 'n': /* Net/Rom pseudo-type */ + hardware = ARP_NETROM; + break; + case 'e': /* "ether" */ + hardware = ARP_ETHER; + break; + case 'a': /* "ax25" */ + switch(tolower(argv[2][1])) { + case 'x': + hardware = ARP_AX25; + break; + case 'r': + hardware = ARP_ARCNET; + break; + default: + _printf(_("unknown hardware type \"%s\"\n"),argv[2]); + return -1; + } + break; + case 'm': /* "mac appletalk" */ + hardware = ARP_APPLETALK; + break; + default: + _printf(_("unknown hardware type \"%s\"\n"),argv[2]); + return -1; + } + /* If an entry already exists, clear it */ + if((ap = arp_lookup(hardware,addr)) != NULL) + arp_drop(ap); + + at = &Arp_type[hardware]; + if(at->scan == NULL){ + _printf(_("Attach device first\n")); + return 1; + } + /* Allocate buffer for hardware address and fill with remaining args */ + hwaddr = mallocw(at->hwalen); + /* Destination address */ + (*at->scan)(hwaddr,argv[3]); + ap = arp_add(addr,hardware,hwaddr,pub); /* Put in table */ + free(hwaddr); /* Clean up */ + stop_timer(&ap->timer); /* Make entry permanent */ + set_timer(&ap->timer,0L); + return 0; +} +/* Remove an ARP entry */ +static +doarpdrop(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + uint16 hardware; + int32 addr; + struct arp_tab *ap; + + if((addr = resolve(argv[1])) == 0){ + printf(Badhost,argv[1]); + return 1; + } + /* This is a kludge. It really ought to be table driven */ + switch(tolower(argv[2][0])){ + case 'n': + hardware = ARP_NETROM; + break; + case 'e': /* "ether" */ + hardware = ARP_ETHER; + break; + case 'a': /* "ax25" */ + switch(tolower(argv[2][1])) { + case 'x': + hardware = ARP_AX25; + break; + case 'r': + hardware = ARP_ARCNET; + break; + default: + hardware = 0; + break; + } + break; + case 'm': /* "mac appletalk" */ + hardware = ARP_APPLETALK; + break; + default: + hardware = 0; + break; + } + if((ap = arp_lookup(hardware,addr)) == NULL) + return -1; + arp_drop(ap); + return 0; +} +/* Flush all automatic entries in the arp cache */ +static int +doarpflush(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct arp_tab *ap; + struct arp_tab *aptmp; + int i; + + for(i=0;inext; + if(dur_timer(&ap->timer) != 0) + arp_drop(ap); + } + } + return 0; +} + +/* Dump ARP table */ +static void +dumparp() +{ + register int i; + register struct arp_tab *ap; + char e[128]; + + _printf(_("received %u badtype %u bogus addr %u reqst in %u replies %u reqst out %u\n"), + Arp_stat.recv,Arp_stat.badtype,Arp_stat.badaddr,Arp_stat.inreq, + Arp_stat.replies,Arp_stat.outreq); + + _printf(_("IP addr Type Time Q Addr\n")); + for(i=0;inext){ + _printf(_("%-16s"),inet_ntoa(ap->ip_addr)); + _printf(_("%-15s"),smsg(Arptypes,NHWTYPES,ap->hardware)); + _printf(_("%-5ld"),read_timer(&ap->timer)/1000L); + if(ap->state == ARP_PENDING) + _printf(_("%-2u"),len_q(ap->pending)); + else + _printf(_(" ")); + if(ap->state == ARP_VALID){ + if(Arp_type[ap->hardware].format != NULL){ + (*Arp_type[ap->hardware].format)(e,ap->hw_addr); + } else { + e[0] = '\0'; + } + _printf(_("%s"),e); + } else { + _printf(_("[unknown]")); + } + if(ap->pub) + _printf(_(" (published)")); + _printf(_("\n")); + } + } +} diff --git a/src/nos/internet/arphdr.c b/src/nos/internet/arphdr.c new file mode 100644 index 00000000..36ff9ae6 --- /dev/null +++ b/src/nos/internet/arphdr.c @@ -0,0 +1,60 @@ +/* ARP header conversion routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "arp.h" + +/* Copy a host format arp structure into mbuf for transmission */ +struct mbuf * +htonarp(arp) +register struct arp *arp; +{ + struct mbuf *bp; + register uint8 *buf; + + if(arp == (struct arp *)NULL) + return NULL; + + bp = ambufw(ARPLEN + 2 * arp->hwalen); + buf = bp->data; + + buf = put16(buf,arp->hardware); + buf = put16(buf,arp->protocol); + *buf++ = arp->hwalen; + *buf++ = arp->pralen; + buf = put16(buf,arp->opcode); + memcpy(buf,arp->shwaddr,(uint16)arp->hwalen); + buf += arp->hwalen; + buf = put32(buf,arp->sprotaddr); + memcpy(buf,arp->thwaddr,(uint16)arp->hwalen); + buf += arp->hwalen; + buf = put32(buf,arp->tprotaddr); + + bp->cnt = buf - bp->data; + return bp; +} +/* Convert an incoming ARP packet into a host-format structure */ +int +ntoharp( +struct arp *arp, +struct mbuf **bpp +){ + if(arp == (struct arp *)NULL || bpp == NULL) + return -1; + + arp->hardware = pull16(bpp); + arp->protocol = pull16(bpp); + arp->hwalen = PULLCHAR(bpp); + arp->pralen = PULLCHAR(bpp); + arp->opcode = pull16(bpp); + pullup(bpp,arp->shwaddr,(uint16)arp->hwalen); + arp->sprotaddr = pull32(bpp); + pullup(bpp,arp->thwaddr,(uint16)arp->hwalen); + arp->tprotaddr = pull32(bpp); + + /* Get rid of anything left over */ + free_p(bpp); + return 0; +} + diff --git a/src/nos/internet/auto.mk b/src/nos/internet/auto.mk new file mode 100644 index 00000000..6026522e --- /dev/null +++ b/src/nos/internet/auto.mk @@ -0,0 +1,47 @@ +# auto.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +SUBDIRS= + +OUTPUTS= internet.$(LIBEXT) + +internet_$(LIBEXT)_SOURCES=\ + domain.c domhdr.c hop.c icmp.c \ + icmpcmd.c icmphdr.c icmpmsg.c ip.c ipcmd.c iphdr.c \ + iproute.c ipsock.c netuser.c ping.c \ + sim.c tcpcmd.c tcphdr.c tcpin.c tcpout.c tcpsock.c \ + tcpsubr.c tcptimer.c tcpuser.c udp.c udpcmd.c \ + udphdr.c udpsock.c +#arp.c arpcmd.c arphdr.c rip.c ripcmd.c + +domain_c_MODULES= \ + Dcache Dcache_size Dcache_time Dfile_clean Dfile_reading \ + Dfile_writing Dfile_updater Dfile_wait_absolute \ + Dfile_wait_relative Dservers Dserver_retries Dsuffix Dtrace \ + Dtypes Ndtypes delim Dcmds Dcachecmds dodomain docache \ + dosuffix docacheclean docachelist docachesize docachewait \ + dlist_add dlist_drop dodnsadd add_nameserver dodnsdrop \ + dodnslist dodnsquery dodnsretry dodnstrace dtype check_ttl \ + compare_rr compare_rr_list copy_rr copy_rr_list free_rr \ + make_rr dcache_add dcache_drop dcache_search dcache_update \ + get_rr put_rr dfile_search dfile_update dumpdomain \ + dns_makequery dns_query isaddr checksuffix resolver inverse_a \ + resolve_rr resolve_a resolve resolve_mx resolve_mailb + +ip_c_MODULES= Ip_mib Reasmq Id_cntr Rawip Ip_trace ip_send ip_recv \ + ipip_recv fraghandle raw_ip del_ip lookup_reasm creat_reasm \ + free_reasm ip_timeout newfrag freefrag ip_garbage ttldec \ + rquench + +iproute_c_MODULES= \ + Routes route Rt_cache Rtlookups Rtchits ipinit ip_route q_pkt \ + ip_proc ip_encap rt_add rt_drop ip_mtu locaddr rt_lookup \ + rt_blookup rt_merge rt_timeout + +tcpin_c_MODULES= \ + tcp_input tcp_icmp reset update in_window proc_syn send_syn \ + add_reseq get_reseq trim + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/internet/domain.c b/src/nos/internet/domain.c new file mode 100644 index 00000000..86accea1 --- /dev/null +++ b/src/nos/internet/domain.c @@ -0,0 +1,2084 @@ +/* + * DOMAIN.C -- domain name system stub resolver + * + * Original code by Phil Karn, KA9Q. + * + * Apr 90 Bill Simpson added address->name resolution, time-to-live, + * thru memory caching, generalized multi-record multi-type searches, + * Oct 90 and many minor changes to conform more closely to the RFCs. + * Feb 91 Bill Simpson added "query" command and TYPE_ANY processing. + * Jul 91 Bill Simpson added "more" sessions for query and cache list. + */ + +#include +#include /* Nick */ +#include +#include +#include +#include "global.h" +#include "mbuf.h" +#include "proc.h" +#include "ip.h" +#include "netuser.h" +#include "session.h" +#include "socket.h" +#include "cmdparse.h" +#include "commands.h" +#include "files.h" +#include "main.h" +#include "domain.h" +#include +#include "po/messages.h" +#include "nos/logmsg.h" + +#ifdef MODULE +#define STATIC +extern struct rr *Dcache; +extern int Dcache_size; +extern time_t Dcache_time; + +extern int Dfile_clean; +extern int Dfile_reading; +extern int Dfile_writing; + +extern int32 Dfile_wait_absolute; +extern int Dfile_wait_relative; + +extern struct dserver *Dservers; +extern int Dserver_retries; + +extern char *Dsuffix; +extern int Dtrace; +extern char *Dtypes[]; +extern int Ndtypes; +extern char delim[]; + + +/** + ** Domain Resolver Commands + **/ + +extern struct cmds Dcmds[]; +extern struct cmds Dcachecmds[]; +#else +#define STATIC static +#define MODULE_Dcache +#define MODULE_Dcache_size +#define MODULE_Dcache_time +#define MODULE_Dfile_clean +#define MODULE_Dfile_reading +#define MODULE_Dfile_writing +#define MODULE_Dfile_updater +#define MODULE_Dfile_wait_absolute +#define MODULE_Dfile_wait_relative +#define MODULE_Dservers +#define MODULE_Dserver_retries +#define MODULE_Dsuffix +#define MODULE_Dtrace +#define MODULE_Dtypes +#define MODULE_Ndtypes +#define MODULE_delim +#define MODULE_Dcmds +#define MODULE_Dcachecmds +#define MODULE_dodomain +#define MODULE_docache +#define MODULE_dosuffix +#define MODULE_docacheclean +#define MODULE_docachelist +#define MODULE_docachesize +#define MODULE_docachewait +#define MODULE_dlist_add +#define MODULE_dlist_drop +#define MODULE_dodnsadd +#define MODULE_add_nameserver +#define MODULE_dodnsdrop +#define MODULE_dodnslist +#define MODULE_dodnsquery +#define MODULE_dodnsretry +#define MODULE_dodnstrace +#define MODULE_dtype +#define MODULE_check_ttl +#define MODULE_compare_rr +#define MODULE_compare_rr_list +#define MODULE_copy_rr +#define MODULE_copy_rr_list +#define MODULE_free_rr +#define MODULE_make_rr +#define MODULE_dcache_add +#define MODULE_dcache_drop +#define MODULE_dcache_search +#define MODULE_dcache_update +#define MODULE_get_rr +#define MODULE_put_rr +#define MODULE_dfile_search +#define MODULE_dfile_update +#define MODULE_dumpdomain +#define MODULE_dns_makequery +#define MODULE_dns_query +#define MODULE_isaddr +#define MODULE_checksuffix +#define MODULE_resolver +#define MODULE_inverse_a +#define MODULE_resolve_rr +#define MODULE_resolve_a +#define MODULE_resolve +#define MODULE_resolve_mx +#define MODULE_resolve_mailb +#endif + +#undef DEBUG /* for certain trace messages */ +#undef DEBUG_PAIN /* for painful debugging */ + +#ifdef MODULE_Dcache +STATIC struct rr *Dcache = NULL; /* Cache of resource records */ +#endif +#ifdef MODULE_Dcache_size +STATIC int Dcache_size = 20; /* size limit */ +#endif +#ifdef MODULE_Dcache_time +STATIC time_t Dcache_time = 0L; /* timestamp */ +#endif + +#ifdef MODULE_Dfile_clean +STATIC int Dfile_clean = FALSE; /* discard expired records (flag) */ +#endif +#ifdef MODULE_Dfile_reading +STATIC int Dfile_reading = 0; /* read interlock (count) */ +#endif +#ifdef MODULE_Dfile_writing +STATIC int Dfile_writing = 0; /* write interlock (count) */ +#endif + +#ifdef MODULE_Dfile_updater +struct proc *Dfile_updater = NULL; +#endif +#ifdef MODULE_Dfile_wait_absolute +STATIC int32 Dfile_wait_absolute = 0L; /* timeout Clock time */ +#endif +#ifdef MODULE_Dfile_wait_relative +STATIC int Dfile_wait_relative = 300; /* timeout file activity (seconds) */ +#endif + +#ifdef MODULE_Dservers +STATIC struct dserver *Dservers = NULL; /* List of potential servers */ +#endif +#ifdef MODULE_Dserver_retries +STATIC int Dserver_retries = 2; /* Attempts to reach servers */ +#endif + +#ifdef MODULE_Dsuffix +STATIC char *Dsuffix = NULL; /* Default suffix for names without periods */ +#endif +#ifdef MODULE_Dtrace +STATIC int Dtrace = FALSE; +#endif +#ifdef MODULE_Dtypes +STATIC char *Dtypes[] = { + "", + "A", + "NS", + "MD", + "MF", + "CNAME", + "SOA", + "MB", + "MG", + "MR", + "NULL", + "WKS", + "PTR", + "HINFO", + "MINFO", + "MX", + "TXT" +}; +#endif +#ifdef MODULE_Ndtypes +STATIC int Ndtypes = 17; +#endif +#ifdef MODULE_delim +STATIC char delim[] = " \t\r\n"; +#endif + +STATIC int docache(int argc,char *argv[],void *p); +STATIC int dosuffix(int argc,char *argv[],void *p); + +STATIC int docacheclean(int argc,char *argv[],void *p); +STATIC int docachelist(int argc,char *argv[],void *p); +STATIC int docachesize(int argc,char *argv[],void *p); +STATIC int docachewait(int argc,char *argv[],void *p); + +STATIC void dlist_add(struct dserver *dp); +STATIC void dlist_drop(struct dserver *dp); +STATIC int dodnsadd(int argc,char *argv[],void *p); +STATIC int dodnsdrop(int argc,char *argv[],void *p); +STATIC int dodnslist(int argc,char *argv[],void *p); +STATIC int dodnsquery(int argc,char *argv[],void *p); +STATIC int dodnsretry(int argc,char *argv[],void *p); +STATIC int dodnstrace(int argc,char *argv[],void *p); + +STATIC char * dtype(int value); +STATIC int check_ttl(struct rr *rrlp); +STATIC int compare_rr(struct rr *search_rrp,struct rr *target_rrp); +STATIC int compare_rr_list(struct rr *rrlp,struct rr *target_rrp); +STATIC struct rr *copy_rr(struct rr *rrp); +STATIC struct rr *copy_rr_list(struct rr *rrlp); +STATIC struct rr *make_rr(int source, + char *dname,uint16 class,uint16 type,int32 ttl,uint16 rdl,void *data); + +STATIC void dcache_add(struct rr *rrlp); +STATIC void dcache_drop(struct rr *rrp); +STATIC struct rr *dcache_search(struct rr *rrlp); +STATIC void dcache_update(struct rr *rrlp); + +STATIC struct rr *get_rr(FILE *fp, struct rr *lastrrp); +STATIC void put_rr(FILE *fp,struct rr *rrp); +STATIC struct rr *dfile_search(struct rr *rrlp); +STATIC void dfile_update(int s,void *unused,void *p); + +STATIC void dumpdomain(struct dhdr *dhp,int32 rtt); +STATIC int dns_makequery(uint16 op,struct rr *rrp, + uint8 *buffer,uint16 buflen); +STATIC int dns_query(struct rr *rrlp); + +STATIC int isaddr(char *s); +STATIC char *checksuffix(char *dname); +STATIC struct rr *resolver(struct rr *rrlp); + + +/** + ** Domain Resolver Commands + **/ + +#ifdef MODULE_Dcmds +STATIC struct cmds Dcmds[] = { + N_("addserver"), dodnsadd, 0, 2, N_("add "), + N_("dropserver"), dodnsdrop, 0, 2, N_("drop "), + N_("list"), dodnslist, 0, 0, NULL, + N_("query"), dodnsquery, 512, 2, N_("query "), + N_("retry"), dodnsretry, 0, 0, NULL, + N_("suffix"), dosuffix, 0, 0, NULL, + N_("trace"), dodnstrace, 0, 0, NULL, + N_("cache"), docache, 0, 0, NULL, + NULL, +}; +#endif + +#ifdef MODULE_Dcachecmds +STATIC struct cmds Dcachecmds[] = { + N_("clean"), docacheclean, 0, 0, NULL, + N_("list"), docachelist, 512, 0, NULL, + N_("size"), docachesize, 0, 0, NULL, + N_("wait"), docachewait, 0, 0, NULL, + NULL, +}; +#endif + +#ifdef MODULE_dodomain +int +dodomain(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Dcmds,argc,argv,p); +} +#endif + +#ifdef MODULE_docache +STATIC int +docache(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Dcachecmds,argc,argv,p); +} +#endif + +#ifdef MODULE_dosuffix +STATIC int +dosuffix(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + if(argc < 2){ + if(Dsuffix != NULL) + _printf(_("%s\n"),Dsuffix); + return 0; + } + free(Dsuffix); + Dsuffix = strdupw(argv[1]); + return 0; +} +#endif + +#ifdef MODULE_docacheclean +STATIC int +docacheclean(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Dfile_clean, _("discard expired records"), argc, argv); +} +#endif + +#ifdef MODULE_docachelist +STATIC int +docachelist(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct rr *rrp; + struct session *sp; + int row = 25; + + if((sp = newsession(Cmdline,DCLIST,1)) == NULL){ + return -1; + } + + (void)dcache_search(NULL); /* update ttl */ + + /* Put tty into raw mode so single-char responses will work */ + sp->ttystate.echo = sp->ttystate.edit = 0; + + for(rrp=Dcache;rrp!=NULL;rrp=rrp->next) + { + put_rr(stdout,rrp); + if(--row == 0){ + row = keywait("--More--",0); + switch(row){ + case -1: + case 'q': + case 'Q': + rrp = NULL; + break; + case '\n': + case '\r': + row = 1; + break; + case ' ': + default: + row = 25; + }; + } + } + fflush(stdout); + keywait(NULL,1); + freesession(sp); + return 0; +} +#endif + +#ifdef MODULE_docachesize +STATIC int +docachesize(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int newsize; + int oldsize; + int result; + + newsize = oldsize = Dcache_size; + result = setint(&newsize, _("memory cache size"), argc, argv); + + if(newsize > 0){ + Dcache_size = newsize; + if(newsize < oldsize){ + (void)dcache_search(NULL); /* update size */ + } + } + return result; +} +#endif + +#ifdef MODULE_docachewait +STATIC int +docachewait(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setint(&Dfile_wait_relative, + _("time before file update (seconds)"), argc,argv ); +} +#endif + +#ifdef MODULE_dlist_add +STATIC void +dlist_add(dp) +register struct dserver *dp; +{ + dp->prev = NULL; + dp->next = Dservers; + if(Dservers != NULL) + Dservers->prev = dp; + Dservers = dp; +} +#endif + +#ifdef MODULE_dlist_drop +STATIC void +dlist_drop(dp) +register struct dserver *dp; +{ + if(dp->prev != NULL) + dp->prev->next = dp->next; + else + Dservers = dp->next; + if(dp->next != NULL) + dp->next->prev = dp->prev; +} +#endif + +#ifdef MODULE_dodnsadd +STATIC int +dodnsadd(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int32 address; + + if((address = resolve(argv[1])) == 0L){ + _printf(_("Resolver %s unknown\n"),argv[1]); + return 1; + } + return add_nameserver(address); +} +#endif + +#ifdef MODULE_add_nameserver +int +add_nameserver(address) +int32 address; +{ + struct dserver *dp; + + dp = (struct dserver *)callocw(1,sizeof(struct dserver)); + dp->address = address; + dp->srtt = INITRTT; + dp->mdev = 0; + dp->timeout = 2 * dp->mdev + dp->srtt + 3; + dlist_add(dp); + return 0; +} +#endif + +#ifdef MODULE_dodnsdrop +STATIC int +dodnsdrop(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct dserver *dp; + int32 addr; + + addr = resolve(argv[1]); + for(dp = Dservers;dp != NULL;dp = dp->next) + if(addr == dp->address) + break; + + if(dp == NULL){ + _printf(_("Not found\n")); + return 1; + } + + dlist_drop(dp); + free(dp); + return 0; +} +#endif + +#ifdef MODULE_dodnslist +STATIC int +dodnslist(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct dserver *dp; + + _printf(_("Server address srtt mdev timeout queries responses\n")); + for(dp = Dservers;dp != NULL;dp = dp->next){ + _printf(_("%-20s%8lu%8lu%10lu%10lu%10lu\n"), + inet_ntoa(dp->address), + dp->srtt,dp->mdev,dp->timeout, + dp->queries,dp->responses); + } + return 0; +} +#endif + +#ifdef MODULE_dodnsquery +STATIC int +dodnsquery(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct rr *rrp; + struct rr *result_rrlp; + char *sname; + struct session *sp; + int row = 25; + + if((sp = newsession(Cmdline,DQUERY,1)) == NULL){ + return -1; + } + + if ( isaddr( argv[1] ) ) { + result_rrlp = inverse_a( aton( argv[1] ) ); + } else { + sname = checksuffix( argv[1] ); + rrp = make_rr(RR_QUERY,sname,CLASS_IN,TYPE_ANY,0,0,NULL); + FREE(sname); + + dns_query(rrp); + result_rrlp = dcache_search(rrp); + free_rr(rrp); + } + + /* Put tty into raw mode so single-char responses will work */ + sp->ttystate.echo = sp->ttystate.edit = 0; + + for( rrp=result_rrlp; rrp!=NULL; rrp=rrp->next) + { + put_rr(stdout,rrp); + if(--row == 0){ + row = keywait("--More--",0); + switch(row){ + case -1: + case 'q': + case 'Q': + rrp = NULL; + break; + case '\n': + case '\r': + row = 1; + break; + case ' ': + default: + row = 25; + }; + } + } + fflush(stdout); + free_rr(result_rrlp); + keywait(NULL,1); + freesession(sp); + return 0; +} +#endif + +#ifdef MODULE_dodnsretry +STATIC int +dodnsretry(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setint(&Dserver_retries, _("server retries"), argc, argv); +} +#endif + +#ifdef MODULE_dodnstrace +STATIC int +dodnstrace(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Dtrace, _("server trace"), argc, argv); +} +#endif + + +/** + ** Domain Resource Record Utilities + **/ + +#ifdef MODULE_dtype +STATIC char * +dtype(value) +int value; +{ + static char buf[10]; + + if (value < Ndtypes) + return Dtypes[value]; + + sprintf( buf, "{%d}", value); + return buf; +} +#endif + +/* check list of resource records for any expired ones. + * returns number of expired records. + */ +#ifdef MODULE_check_ttl +STATIC int +check_ttl(rrlp) +register struct rr *rrlp; +{ + int count = 0; + + while(rrlp != NULL){ + if(rrlp->ttl == 0L) + count++; + rrlp = rrlp->next; + } + return count; +} +#endif + + +/* Compare two resource records. + * returns 0 if match, nonzero otherwise. + */ +#ifdef MODULE_compare_rr +STATIC int +compare_rr(search_rrp,target_rrp) +register struct rr *search_rrp,*target_rrp; +{ + int i; + + if(search_rrp == NULL || target_rrp == NULL) + return -32765; + + if(search_rrp->class != target_rrp->class) + return -32763; + + if(search_rrp->type != TYPE_ANY + && search_rrp->type != target_rrp->type + && (search_rrp->source != RR_QUERY + || (target_rrp->type != TYPE_CNAME + && target_rrp->type != TYPE_PTR))) + return -32761; + + if(search_rrp->source != RR_INQUERY){ + if((i = strlen(search_rrp->name)) != strlen(target_rrp->name)) + return -32759; + if((i = strnicmp(search_rrp->name,target_rrp->name,i)) != 0) + return i; + + /* match negative records so that they are replaced */ + if(target_rrp->rdlength == 0) + return 0; + } + + /* if a query has gotten this far, match it */ + if(search_rrp->source == RR_QUERY) + return 0; + + /* ensure negative records don't replace older records */ + if(search_rrp->rdlength == 0) + return -32757; + + /* match expired records so that they are replaced */ + if(search_rrp->source != RR_INQUERY){ + if(target_rrp->ttl == 0L) + return 0; + } + + /* Note: rdlengths are not compared because they vary depending + * on the representation (ASCII or encoded) this record was + * generated from. + */ + + switch(search_rrp->type){ + case TYPE_A: + i = search_rrp->rdata.addr != target_rrp->rdata.addr; + break; + case TYPE_CNAME: + case TYPE_MB: + case TYPE_MG: + case TYPE_MR: + case TYPE_NS: + case TYPE_PTR: + case TYPE_TXT: + i = stricmp(search_rrp->rdata.data,target_rrp->rdata.data); + break; + case TYPE_HINFO: + i = strcmp(search_rrp->rdata.hinfo.cpu,target_rrp->rdata.hinfo.cpu) || + strcmp(search_rrp->rdata.hinfo.os,target_rrp->rdata.hinfo.os); + break; + case TYPE_MX: + i = stricmp(search_rrp->rdata.mx.exch,target_rrp->rdata.mx.exch); + break; + case TYPE_SOA: + i = search_rrp->rdata.soa.serial != target_rrp->rdata.soa.serial; + break; + default: + i = -32755; /* unsupported */ + } + return i; +} +#endif + +#ifdef MODULE_compare_rr_list +STATIC int +compare_rr_list(rrlp,target_rrp) +register struct rr *rrlp,*target_rrp; +{ + while(rrlp != NULL){ + if(compare_rr(rrlp,target_rrp) == 0) + return 0; +#ifdef DEBUG_PAIN + if(Dtrace) + _printf(_("%15d %s\n"), + compare_rr(rrlp,target_rrp), + target_rrp->name); +#endif + rrlp = rrlp->next; + } + return -32767; +} +#endif + + +/* Make a new copy of a resource record */ +#ifdef MODULE_copy_rr +STATIC struct rr * +copy_rr(rrp) +register struct rr *rrp; +{ + register struct rr *newrr; + + if(rrp == NULL) + return NULL; + + newrr = (struct rr *)callocw(1,sizeof(struct rr)); + newrr->source = rrp->source; + newrr->name = strdupw(rrp->name); + newrr->type = rrp->type; + newrr->class = rrp->class; + newrr->ttl = rrp->ttl; + if((newrr->rdlength = rrp->rdlength) == 0) + return newrr; + + switch(rrp->type){ + case TYPE_A: + newrr->rdata.addr = rrp->rdata.addr; + break; + case TYPE_CNAME: + case TYPE_MB: + case TYPE_MG: + case TYPE_MR: + case TYPE_NS: + case TYPE_PTR: + case TYPE_TXT: + newrr->rdata.name = strdupw(rrp->rdata.name); + break; + case TYPE_HINFO: + newrr->rdata.hinfo.cpu = strdupw(rrp->rdata.hinfo.cpu); + newrr->rdata.hinfo.os = strdupw(rrp->rdata.hinfo.os); + break; + case TYPE_MX: + newrr->rdata.mx.pref = rrp->rdata.mx.pref; + newrr->rdata.mx.exch = strdupw(rrp->rdata.mx.exch); + break; + case TYPE_SOA: + newrr->rdata.soa.mname = strdupw(rrp->rdata.soa.mname); + newrr->rdata.soa.rname = strdupw(rrp->rdata.soa.rname); + newrr->rdata.soa.serial = rrp->rdata.soa.serial; + newrr->rdata.soa.refresh = rrp->rdata.soa.refresh; + newrr->rdata.soa.retry = rrp->rdata.soa.retry; + newrr->rdata.soa.expire = rrp->rdata.soa.expire; + newrr->rdata.soa.minimum = rrp->rdata.soa.minimum; + break; + } + return newrr; +} +#endif + +#ifdef MODULE_copy_rr_list +STATIC struct rr * +copy_rr_list(rrlp) +register struct rr *rrlp; +{ + register struct rr **rrpp; + struct rr *result_rrlp; + + rrpp = &result_rrlp; + while(rrlp != NULL){ + *rrpp = copy_rr(rrlp); + rrpp = &(*rrpp)->next; + rrlp = rrlp->next; + } + *rrpp = NULL; + return result_rrlp; +} +#endif + + +/* Free (list of) resource records */ +#ifdef MODULE_free_rr +void +free_rr(rrlp) +register struct rr *rrlp; +{ + register struct rr *rrp; + + while((rrp = rrlp) != NULL){ + rrlp = rrlp->next; + + free(rrp->comment); + free(rrp->name); + if(rrp->rdlength > 0){ + switch(rrp->type){ + case TYPE_A: + break; /* Nothing allocated in rdata section */ + case TYPE_CNAME: + case TYPE_MB: + case TYPE_MG: + case TYPE_MR: + case TYPE_NS: + case TYPE_PTR: + case TYPE_TXT: + free(rrp->rdata.name); + break; + case TYPE_HINFO: + free(rrp->rdata.hinfo.cpu); + free(rrp->rdata.hinfo.os); + break; + case TYPE_MX: + free(rrp->rdata.mx.exch); + break; + case TYPE_SOA: + free(rrp->rdata.soa.mname); + free(rrp->rdata.soa.rname); + break; + } + } + free(rrp); + } +} +#endif + +#ifdef MODULE_make_rr +STATIC struct rr * +make_rr(source,dname,dclass,dtype,ttl,rdl,data) +int source; +char *dname; +uint16 dclass; +uint16 dtype; +int32 ttl; +uint16 rdl; +void *data; +{ + register struct rr *newrr; + + newrr = (struct rr *)callocw(1,sizeof(struct rr)); + newrr->source = source; + newrr->name = strdupw(dname); + newrr->class = dclass; + newrr->type = dtype; + newrr->ttl = ttl; + if((newrr->rdlength = rdl) == 0) + return newrr; + + switch(dtype){ + case TYPE_A: + { + register int32 *ap = (int32 *)data; + newrr->rdata.addr = *ap; + break; + } + case TYPE_CNAME: + case TYPE_MB: + case TYPE_MG: + case TYPE_MR: + case TYPE_NS: + case TYPE_PTR: + case TYPE_TXT: + { + newrr->rdata.name = strdupw((char *)data); + break; + } + case TYPE_HINFO: + { + register struct hinfo *hinfop = (struct hinfo *)data; + newrr->rdata.hinfo.cpu = strdupw(hinfop->cpu); + newrr->rdata.hinfo.os = strdupw(hinfop->os); + break; + } + case TYPE_MX: + { + register struct mx *mxp = (struct mx *)data; + newrr->rdata.mx.pref = mxp->pref; + newrr->rdata.mx.exch = strdupw(mxp->exch); + break; + } + case TYPE_SOA: + { + register struct soa *soap = (struct soa *)data; + newrr->rdata.soa.mname = strdupw(soap->mname); + newrr->rdata.soa.rname = strdupw(soap->rname); + newrr->rdata.soa.serial = soap->serial; + newrr->rdata.soa.refresh = soap->refresh; + newrr->rdata.soa.retry = soap->retry; + newrr->rdata.soa.expire = soap->expire; + newrr->rdata.soa.minimum = soap->minimum; + break; + } + } + return newrr; +} +#endif + + +/** + ** Domain Cache Utilities + **/ + +#ifdef MODULE_dcache_add +STATIC void +dcache_add(rrlp) +register struct rr *rrlp; +{ + register struct rr *last_rrp; + struct rr *save_rrp; + + if(rrlp == NULL) + return; + + save_rrp = rrlp; + last_rrp = NULL; + while(rrlp != NULL){ + rrlp->last = last_rrp; + last_rrp = rrlp; + rrlp = rrlp->next; + } + last_rrp->next = Dcache; + if(Dcache != NULL) + Dcache->last = last_rrp; + Dcache = save_rrp; +} +#endif + +#ifdef MODULE_dcache_drop +STATIC void +dcache_drop(rrp) +register struct rr *rrp; +{ + if(rrp->last != NULL) + rrp->last->next = rrp->next; + else + Dcache = rrp->next; + if(rrp->next != NULL) + rrp->next->last = rrp->last; + rrp->last = + rrp->next = NULL; +} +#endif + +/* Search cache for resource records, removing them from the cache. + * Also, timeout cache entries, and trim cache to size. + * (Calling with NULL is legal -- will timeout & trim only.) + * Note that an answer from the cache cannot be authoritative, because + * we cannot guarantee that all the entries remain from a previous request. + * Returns RR list, or NULL if no record found. + */ +#ifdef MODULE_dcache_search +STATIC struct rr * +dcache_search(rrlp) +struct rr *rrlp; +{ + register struct rr *rrp, *test_rrp; + struct rr **rrpp, *result_rrlp; + int32 elapsed; + time_t now; + int count = 0; + +#ifdef DEBUG + if(Dtrace && rrlp != NULL){ + _printf(_("dcache_search: searching for %s\n"),rrlp->name); + } +#endif + + elapsed = (int32)(time(&now) - Dcache_time); + Dcache_time = now; + + rrpp = &result_rrlp; + for(rrp = Dcache; (test_rrp = rrp) != NULL;){ + rrp = rrp->next; + /* timeout entries */ + if(test_rrp->ttl > 0L + && (test_rrp->ttl -= elapsed) <= 0L) + test_rrp->ttl = 0L; + + if(compare_rr_list(rrlp,test_rrp) == 0){ + dcache_drop( *rrpp = test_rrp ); + rrpp = &(*rrpp)->next; + } else if(test_rrp->source == RR_FILE && ++count > Dcache_size){ + dcache_drop(test_rrp); + free_rr(test_rrp); + } + } + *rrpp = NULL; + return result_rrlp; +} +#endif + + +/* Move a list of resource records to the cache, removing duplicates. */ +#ifdef MODULE_dcache_update +STATIC void +dcache_update(rrlp) +register struct rr *rrlp; +{ + if(rrlp == NULL) + return; + + free_rr(dcache_search(rrlp)); /* remove duplicates, first */ + dcache_add(rrlp); +} +#endif + + +/** + ** File Utilities + **/ + +#ifdef MODULE_get_rr +STATIC struct rr * +get_rr(fp,lastrrp) +FILE *fp; +struct rr *lastrrp; +{ + char *line,*lp,*strtok(); + struct rr *rrp; + char *name,*ttl,*class,*type,*data; + int i; + + line = mallocw(256); + if(fgets(line,256,fp) == NULL){ + free(line); + return NULL; + } + + rrp = (struct rr *)callocw(1,sizeof(struct rr)); + rrp->source = RR_FILE; + + if(line[0] == '\0' || line[0] == '#' || line[0] == ';'){ + rrp->comment = line; + return rrp; + } + + if(!isspace(line[0]) || lastrrp == NULL){ + name = strtok(line,delim); + lp = NULL; + } else { /* Name field is missing */ + name = lastrrp->name; + lp = line; + } + if(name == NULL || (i = strlen(name)) == 0){ + rrp->comment = strdupw("\n"); + free(line); + return rrp; + } + + if(name[i-1] != '.'){ + /* Tack on a trailing period if it's not there */ + /* !!! need to implement $ORIGIN suffix here */ + rrp->name = mallocw(i+2); + strcpy(rrp->name,name); + strcat(rrp->name,"."); + } else + rrp->name = strdupw(name); + + ttl = strtok(lp,delim); + + if(ttl == NULL || (!isdigit(ttl[0]) && ttl[0] != '-')){ + /* Optional ttl field is missing */ + rrp->ttl = TTL_MISSING; + class = ttl; + } else { + rrp->ttl = atol(ttl); + class = strtok(NULL,delim); + } + + if(class == NULL){ + /* we're in trouble, but keep processing */ + rrp->class = CLASS_MISSING; + type = class; + } else if(class[0] == '<'){ + rrp->class = atoi(&class[1]); + type = strtok(NULL,delim); + } else if(stricmp(class,"IN") == 0){ + rrp->class = CLASS_IN; + type = strtok(NULL,delim); + } else { + /* Optional class field is missing; assume IN */ + rrp->class = CLASS_IN; + type = class; + } + + if(type == NULL){ + /* we're in trouble, but keep processing */ + rrp->type = TYPE_MISSING; + data = type; + } else if(type[0] == '{'){ + rrp->type = atoi(&class[1]); + data = strtok(NULL,delim); + } else { + rrp->type = TYPE_MISSING; + for(i=1;itype = i; + data = strtok(NULL,delim); + break; + } + } + } + + if(rrp->type == TYPE_MISSING){ + data = NULL; + } + + if(data == NULL){ + /* Empty record, just return */ + free(line); + return rrp; + } + switch(rrp->type){ + case TYPE_A: + rrp->rdlength = 4; + rrp->rdata.addr = aton(data); + break; + case TYPE_CNAME: + case TYPE_MB: + case TYPE_MG: + case TYPE_MR: + case TYPE_NS: + case TYPE_PTR: + case TYPE_TXT: + rrp->rdlength = strlen(data); + rrp->rdata.name = strdupw(data); + break; + case TYPE_HINFO: + rrp->rdlength = strlen(data); + rrp->rdata.hinfo.cpu = strdupw(data); + if((data = strtok(NULL,delim)) != NULL){ + rrp->rdlength += strlen(data); + rrp->rdata.hinfo.os = strdupw(data); + } + break; + case TYPE_MX: + rrp->rdata.mx.pref = atoi(data); + rrp->rdlength = 2; + + /* Get domain name of exchanger */ + if((data = strtok(NULL,delim)) != NULL){ + rrp->rdlength += strlen(data); + rrp->rdata.mx.exch = strdupw(data); + } + break; + case TYPE_SOA: + /* Get domain name of master name server */ + rrp->rdlength = strlen(data); + rrp->rdata.soa.mname = strdupw(data); + + /* Get domain name of irresponsible person */ + if((data = strtok(NULL,delim)) != NULL){ + rrp->rdata.soa.rname = strdupw(data); + rrp->rdlength += strlen(data); + } + data = strtok(NULL,delim); + rrp->rdata.soa.serial = atol(data); + data = strtok(NULL,delim); + rrp->rdata.soa.refresh = atol(data); + data = strtok(NULL,delim); + rrp->rdata.soa.retry = atol(data); + data = strtok(NULL,delim); + rrp->rdata.soa.expire = atol(data); + data = strtok(NULL,delim); + rrp->rdata.soa.minimum = atol(data); + rrp->rdlength += 20; + break; + } + + /* !!! need to handle trailing comments */ + free(line); + return rrp; +} +#endif + + +/* Print a resource record */ +#ifdef MODULE_put_rr +STATIC void +put_rr(fp,rrp) +FILE *fp; +struct rr *rrp; +{ + char * stuff; + + if(fp == NULL || rrp == NULL) + return; + + if(rrp->name == NULL && rrp->comment != NULL){ + _fprintf(fp, _("%s"),rrp->comment); + return; + } + + _fprintf(fp, _("%s"),rrp->name); + if(rrp->ttl != TTL_MISSING) + _fprintf(fp, _("\t%ld"),rrp->ttl); + if(rrp->class == CLASS_IN) + _fprintf(fp, _("\tIN")); + else + _fprintf(fp, _("\t<%u>"),rrp->class); + + stuff = dtype(rrp->type); + _fprintf(fp, _("\t%s"),stuff); + if(rrp->rdlength == 0){ + /* Null data portion, indicates nonexistent record */ + /* or unsupported type. Hopefully, these will filter */ + /* as time goes by. */ + _fprintf(fp, _("\n")); + return; + } + switch(rrp->type){ + case TYPE_A: + _fprintf(fp, _("\t%s\n"),inet_ntoa(rrp->rdata.addr)); + break; + case TYPE_CNAME: + case TYPE_MB: + case TYPE_MG: + case TYPE_MR: + case TYPE_NS: + case TYPE_PTR: + case TYPE_TXT: + /* These are all printable text strings */ + _fprintf(fp, _("\t%s\n"),rrp->rdata.data); + break; + case TYPE_HINFO: + _fprintf(fp, _("\t%s\t%s\n"), + rrp->rdata.hinfo.cpu, + rrp->rdata.hinfo.os); + break; + case TYPE_MX: + _fprintf(fp, _("\t%u\t%s\n"), + rrp->rdata.mx.pref, + rrp->rdata.mx.exch); + break; + case TYPE_SOA: + _fprintf(fp, _("\t%s\t%s\t%lu\t%lu\t%lu\t%lu\t%lu\n"), + rrp->rdata.soa.mname,rrp->rdata.soa.rname, + rrp->rdata.soa.serial,rrp->rdata.soa.refresh, + rrp->rdata.soa.retry,rrp->rdata.soa.expire, + rrp->rdata.soa.minimum); + break; + default: + _fprintf(fp, _("\n")); + break; + } +} +#endif + + +/* Search local database for resource records. + * Returns RR list, or NULL if no record found. + */ +#ifdef MODULE_dfile_search +STATIC struct rr * +dfile_search(rrlp) +struct rr *rrlp; +{ + register struct rr *frrp; + struct rr **rrpp, *result_rrlp, *oldrrp; + int32 elapsed; + FILE *dbase; + struct stat dstat; + +#ifdef DEBUG + if(Dtrace){ + _printf(_("dfile_search: searching for %s\n"),rrlp->name); + } +#endif + + while(Dfile_writing > 0) + kwait(&Dfile_reading); + Dfile_reading++; + + if((dbase = fopen(Dfile,READ_TEXT)) == NULL){ + Dfile_reading--; + return NULL; + } + if(fstat(fileno(dbase),&dstat) != 0){ + _printf(_("dfile_search: can't get file status\n")); + fclose(dbase); + Dfile_reading--; + return NULL; + } + if((elapsed = (int32)(Dcache_time - (time_t)dstat.st_ctime)) < 0L) + elapsed = -elapsed; /* arbitrary time mismatch */ + + result_rrlp = NULL; /* for contiguous test below */ + oldrrp = NULL; + rrpp = &result_rrlp; + while((frrp = get_rr(dbase,oldrrp)) != NULL){ + free_rr(oldrrp); + if(frrp->type != TYPE_MISSING + && frrp->rdlength > 0 + && compare_rr_list(rrlp,frrp) == 0){ + if(frrp->ttl > 0L + && (frrp->ttl -= elapsed) <= 0L) + frrp->ttl = 0L; + *rrpp = frrp; + rrpp = &(*rrpp)->next; + oldrrp = copy_rr(frrp); + } else { + oldrrp = frrp; + /* + All records of the same name and the same type + are contiguous. Therefore, for a single query, + we can stop searching. Multiple queries must + read the whole file. + */ + if(rrlp->type != TYPE_ANY + && rrlp->next == NULL + && result_rrlp != NULL) + break; + } + if(!main_exit) + kwait(NULL); /* run multiple sessions */ + } + free_rr(oldrrp); + *rrpp = NULL; + + fclose(dbase); + + if(--Dfile_reading <= 0){ + Dfile_reading = 0; + ksignal(&Dfile_writing,0); + } + + return result_rrlp; +} +#endif + + +/* Process which will add new resource records from the cache + * to the local file, eliminating duplicates while it goes. + */ +#ifdef MODULE_dfile_update +STATIC void +dfile_update(s,unused,p) +int s; +void *unused; +void *p; +{ + struct rr **rrpp, *rrlp, *oldrrp; + char *newname; + FILE *old_fp, *new_fp; + struct stat old_stat, new_stat; + + logmsg(-1, _("update Domain.txt initiated")); + + /* Produce output on command session rather than the one + * that invoked us + */ + fclose(stdin); + stdin = fdup(Cmdpp->input); + fclose(stdout); + stdout = fdup(Cmdpp->output); + + newname = strdupw(Dfile); + strcpy(&newname[strlen(newname)-3],"tmp"); + + while(Dfile_wait_absolute != 0L && !main_exit){ + register struct rr *frrp; + int32 elapsed; + + while(Dfile_wait_absolute != 0L){ + elapsed = Dfile_wait_absolute - secclock(); + Dfile_wait_absolute = 0L; + if(elapsed > 0L && !main_exit){ + kalarm(elapsed*1000L); + kwait(&Dfile_wait_absolute); + kalarm(0L); + } + } + + logmsg(-1, _("update Domain.txt")); + + /* create new file for copy */ + if((new_fp = fopen(newname,WRITE_TEXT)) == NULL){ + _printf(_("dfile_update: can't create %s!\n"),newname); + break; + } + if(fstat(fileno(new_fp),&new_stat) != 0){ + _printf(_("dfile_update: can't get new_file status!\n")); + fclose(new_fp); + break; + } + + kwait(NULL); /* file operations can be slow */ + + /* timeout the cache one last time before writing */ + (void)dcache_search(NULL); + + /* copy new RRs out to the new file */ + /* (can't wait here, the cache might change) */ + rrpp = &rrlp; + for(frrp = Dcache; frrp != NULL; frrp = frrp->next ){ + switch(frrp->source){ + case RR_QUESTION: + case RR_ANSWER: + case RR_AUTHORITY: + case RR_ADDITIONAL: + *rrpp = copy_rr(frrp); + if(frrp->type != TYPE_MISSING + && frrp->rdlength > 0) + put_rr(new_fp,frrp); + rrpp = &(*rrpp)->next; + frrp->source = RR_FILE; + break; + } + } + *rrpp = NULL; + + /* open up the old file, concurrently with everyone else */ + if((old_fp = fopen(Dfile,READ_TEXT)) == NULL){ + /* great! no old file, so we're ready to go. */ + fclose(new_fp); + rename(newname,Dfile); + free_rr(rrlp); + break; + } + if(fstat(fileno(old_fp),&old_stat) != 0){ + _printf(_("dfile_update: can't get old_file status!\n")); + fclose(new_fp); + fclose(old_fp); + free_rr(rrlp); + break; + } + if((elapsed = (int32)(new_stat.st_ctime - old_stat.st_ctime)) < 0L) + elapsed = -elapsed; /* file times are inconsistant */ + + /* Now append any non-duplicate records */ + oldrrp = NULL; + while((frrp = get_rr(old_fp,oldrrp)) != NULL){ + free_rr(oldrrp); + if(frrp->name == NULL + && frrp->comment != NULL) + put_rr(new_fp,frrp); + if(frrp->type != TYPE_MISSING + && frrp->rdlength > 0 + && compare_rr_list(rrlp,frrp) != 0){ + if(frrp->ttl > 0L + && (frrp->ttl -= elapsed) <= 0L) + frrp->ttl = 0L; + if(frrp->ttl != 0 || !Dfile_clean) + put_rr(new_fp,frrp); + } + oldrrp = frrp; + if(!main_exit) + kwait(NULL); /* run in background */ + } + free_rr(oldrrp); + fclose(new_fp); + fclose(old_fp); + free_rr(rrlp); + + /* wait for everyone else to finish reading */ + Dfile_writing++; + while(Dfile_reading > 0) + kwait(&Dfile_writing); + + unlink(Dfile); + rename(newname,Dfile); + + Dfile_writing = 0; + ksignal(&Dfile_reading,0); + } + free(newname); + + logmsg(-1, _("update Domain.txt finished")); + Dfile_updater = NULL; +} +#endif + + +/** + ** Domain Server Utilities + **/ + +#ifdef MODULE_dumpdomain +STATIC void +dumpdomain(dhp,rtt) +struct dhdr *dhp; +int32 rtt; +{ + struct rr *rrp; + char * stuff; + + _printf(_("response id %u (rtt %lu sec) qr %u opcode %u aa %u tc %u rd %u ra %u rcode %u\n"), + dhp->id,(long)rtt / 1000L, + dhp->qr,dhp->opcode,dhp->aa,dhp->tc,dhp->rd, + dhp->ra,dhp->rcode); + _printf(_("%u questions:\n"),dhp->qdcount); + for(rrp = dhp->questions; rrp != NULL; rrp = rrp->next){ + stuff = dtype(rrp->type); + _printf(_("%s type %s class %u\n"),rrp->name, + stuff,rrp->class); + } + _printf(_("%u answers:\n"),dhp->ancount); + for(rrp = dhp->answers; rrp != NULL; rrp = rrp->next){ + put_rr(stdout,rrp); + } + _printf(_("%u authority:\n"),dhp->nscount); + for(rrp = dhp->authority; rrp != NULL; rrp = rrp->next){ + put_rr(stdout,rrp); + } + _printf(_("%u additional:\n"),dhp->arcount); + for(rrp = dhp->additional; rrp != NULL; rrp = rrp->next){ + put_rr(stdout,rrp); + } + fflush(stdout); +} +#endif + +#ifdef MODULE_dns_makequery +STATIC int +dns_makequery(op,srrp,buffer,buflen) +uint16 op; /* operation */ +struct rr *srrp;/* Search RR */ +uint8 *buffer; /* Area for query */ +uint16 buflen; /* Length of same */ +{ + uint8 *cp; + char *cp1; + char *dname, *sname; + uint16 parameter; + uint16 dlen,len; + + cp = buffer; + /* Use millisecond clock for timestamping */ + cp = put16(cp,(uint16)msclock()); + parameter = (op << 11) + | 0x0100; /* Recursion desired */ + cp = put16(cp,parameter); + cp = put16(cp,1); + cp = put16(cp,0); + cp = put16(cp,0); + cp = put16(cp,0); + + sname = strdupw(srrp->name); + dname = sname; + dlen = strlen(dname); + for(;;){ + /* Look for next dot */ + cp1 = strchr(dname,'.'); + if(cp1 != NULL) + len = cp1-dname; /* More to come */ + else + len = dlen; /* Last component */ + *cp++ = len; /* Write length of component */ + if(len == 0) + break; + /* Copy component up to (but not including) dot */ + strncpy((char *)cp,dname,len); + cp += len; + if(cp1 == NULL){ + *cp++ = 0; /* Last one; write null and finish */ + break; + } + dname += len+1; + dlen -= len+1; + } + free(sname); + cp = put16(cp,srrp->type); + cp = put16(cp,srrp->class); + return cp - buffer; +} +#endif + + +/* domain server resolution loop + * returns: any answers in cache. + * (future features) + * multiple queries. + * inverse queries. + * return value: 0 if something added to cache, -1 if error + */ +#ifdef MODULE_dns_query +STATIC int +dns_query(rrlp) +struct rr *rrlp; +{ + struct mbuf *bp; + struct dhdr *dhp; + struct dserver *dp; /* server list */ + int32 rtt,abserr; + int tried = 0; /* server list has been retried (count) */ + + if((dp = Dservers) == NULL) + return -1; + + for(;;){ + uint8 *buf; + int len; + struct sockaddr_in server_in; + int s; + int rval; + + dp->queries++; + + s = socket(AF_INET,SOCK_DGRAM,0); + server_in.sin_family = AF_INET; + server_in.sin_port = IPPORT_DOMAIN; + server_in.sin_addr.s_addr = dp->address; + + if(Dtrace){ + _printf(_("dns_query: querying server %s for %s\n"), + inet_ntoa(dp->address),rrlp->name); + } + + buf = mallocw(512); + len = dns_makequery(0,rrlp,buf,512); + if(sendto(s,buf,len,0,(struct sockaddr *)&server_in,sizeof(server_in)) == -1) + perror("domain sendto"); + FREE(buf); + kalarm(max(dp->timeout,100)); + /* Wait for something to happen */ + rval = recv_mbuf(s,&bp,0,NULL,0); + kalarm(0L); + close_s(s); + + if(Dtrace){ + if(errno == 0) + _printf(_("dns_query: received message length %d\n"),rval); + else + perror("dns_query"); + } + + if(rval > 0) + break; + + if(errno == EABORT) + return -1; /* Killed by "reset" command */ + + /* Timeout; back off this one and try another server */ + dp->timeout <<= 1; + if((dp = dp->next) == NULL){ + dp = Dservers; + if(Dserver_retries > 0 && ++tried > Dserver_retries) + return -1; + } + } + + /* got a response */ + dp->responses++; + dhp = (struct dhdr *) mallocw(sizeof(struct dhdr)); + ntohdomain(dhp,&bp); /* Convert to local format */ + + /* Compute and update the round trip time */ + rtt = (int32) ((uint16)msclock() - dhp->id); + abserr = rtt > dp->srtt ? rtt - dp->srtt : dp->srtt - rtt; + dp->srtt = ((AGAIN-1) * dp->srtt + rtt + (AGAIN/2)) >> LAGAIN; + dp->mdev = ((DGAIN-1) * dp->mdev + abserr + (DGAIN/2)) >> LDGAIN; + dp->timeout = 4 * dp->mdev + dp->srtt; + + /* move to top of list for next time */ + if(dp->prev != NULL){ + dlist_drop(dp); + dlist_add(dp); + } + + if(Dtrace) + dumpdomain(dhp,rtt); + + /* Add negative reply to answers. This assumes that there was + * only one question, which is true for all questions we send. + */ + if(dhp->aa && (dhp->rcode == NAME_ERROR || dhp->ancount == 0)){ + register struct rr *rrp; + long ttl = 600L; /* Default TTL for negative records */ + + /* look for SOA ttl */ + for(rrp = dhp->authority; rrp != NULL; rrp = rrp->next){ + if(rrp->type == TYPE_SOA) + ttl = rrp->ttl; + } + + /* make the questions the negative answers */ + for(rrp = dhp->questions; rrp != NULL; rrp = rrp->next) + rrp->ttl = ttl; + } else { + free_rr(dhp->questions); + dhp->questions = NULL; + } + + /* post in reverse order to maintain original order */ + dcache_update(dhp->additional); + dcache_update(dhp->authority); + dcache_update(dhp->answers); + dcache_update(dhp->questions); + + Dfile_wait_absolute = secclock() + Dfile_wait_relative; + if(Dfile_updater == NULL){ + Dfile_updater = newproc("domain update", + 512,dfile_update,0,NULL,NULL,0); + } + +#ifdef DEBUG + if(Dtrace) + keywait(NULL,1); /* so we can look around */ +#endif + free(dhp); + return 0; +} +#endif + + +/** + ** Resolver Utilities + **/ + +/* Return TRUE if string appears to be an IP address in dotted decimal; + * return FALSE otherwise (i.e., if string is a domain name) + */ +#ifdef MODULE_isaddr +STATIC int +isaddr(s) +register char *s; +{ + char c; + + if(s == NULL) + return TRUE; /* Can't happen */ + + while((c = *s++) != '\0'){ + if(c != '[' && c != ']' && !isdigit(c) && c != '.') + return FALSE; + } + return TRUE; +} +#endif + + +/* Return "normalized" domain name, with default suffix and trailing '.' + */ +#ifdef MODULE_checksuffix +STATIC char * +checksuffix(dname) +char *dname; +{ + char *sname, *tname; + + sname = strdupw(dname); + if(strchr(sname,'.') == NULL && Dsuffix != NULL){ + /* Append default suffix */ + tname = mallocw(strlen(sname)+strlen(Dsuffix)+2); + sprintf(tname,"%s.%s",sname,Dsuffix); + free(sname); + sname = tname; + } + if(sname[strlen(sname)-1] != '.'){ + /* Append trailing dot */ + tname = mallocw(strlen(sname)+2); + sprintf(tname,"%s.",sname); + free(sname); + sname = tname; + } + return sname; +} +#endif + + +/* Search for resource records. + * Returns RR list, or NULL if no record found. + */ +#ifdef MODULE_resolver +STATIC struct rr * +resolver(rrlp) +register struct rr *rrlp; +{ + register struct rr *result_rrlp; + + if((result_rrlp = dcache_search(rrlp)) == NULL){ + result_rrlp = dfile_search(rrlp); + } + if(result_rrlp == NULL || check_ttl(result_rrlp) != 0){ + dcache_add(result_rrlp); /* save any expired RRs */ + if(dns_query(rrlp) == -1) + return NULL; + result_rrlp = dcache_search(rrlp); + } + dcache_add(copy_rr_list(result_rrlp)); + return result_rrlp; +} +#endif + + +/* general entry point for address -> domain name resolution. + * Returns RR list, or NULL if no record found. + */ +#ifdef MODULE_inverse_a +struct rr * +inverse_a(ip_address) +int32 ip_address; +{ + struct rr *prrp; + struct rr *result_rrlp; + char pname[30]; + + if(ip_address == 0L) + return NULL; + + sprintf( pname, "%u.%u.%u.%u.IN-ADDR.ARPA.", + lobyte(loword(ip_address)), + hibyte(loword(ip_address)), + lobyte(hiword(ip_address)), + hibyte(hiword(ip_address)) ); + + prrp = make_rr(RR_QUERY,pname,CLASS_IN,TYPE_PTR,0,0,NULL); + + prrp->next = /* make list to speed search */ + make_rr(RR_INQUERY,NULL,CLASS_IN,TYPE_A,0,4,&ip_address); + + result_rrlp = resolver(prrp); + + free_rr(prrp); + return result_rrlp; +} +#endif + +/* general entry point for domain name -> resource resolution. + * Returns RR list, or NULL if no record found. + */ +#ifdef MODULE_resolve_rr +struct rr * +resolve_rr(dname,dtype) +char *dname; +uint16 dtype; +{ + struct rr *qrrp; + struct rr *result_rrlp; + char *sname; + int looping = MAXCNAME; + + if(dname == NULL) + return NULL; + + sname = checksuffix(dname); + qrrp = make_rr(RR_QUERY,sname,CLASS_IN,dtype,0,0,NULL); + FREE(sname); + + while(looping > 0){ + if((result_rrlp=resolver(qrrp)) == NULL + || result_rrlp->type == dtype) + break; +#ifdef DEBUG + if(Dtrace) + put_rr(stdout,result_rrlp); +#endif + /* Should be CNAME or PTR record */ + /* Replace name and try again */ + free(qrrp->name); + qrrp->name = strdupw(result_rrlp->rdata.name); + free_rr(result_rrlp); + result_rrlp = NULL; + looping--; + } + free_rr(qrrp); + return result_rrlp; +} +#endif + + +/* main entry point for address -> domain name resolution. + * Returns string, or NULL if no name found. + */ +#ifdef MODULE_resolve_a +char * +resolve_a(ip_address,shorten) +int32 ip_address; /* search address */ +int shorten; /* return only first part of name (flag)*/ +{ + struct rr *save_rrlp, *rrlp; + char *result = NULL; + + for( rrlp = save_rrlp = inverse_a(ip_address); + rrlp != NULL && result == NULL; + rrlp = rrlp->next ){ + if(rrlp->rdlength > 0){ + switch(rrlp->type){ + case TYPE_PTR: + result = strdupw(rrlp->rdata.name); + break; + case TYPE_A: + result = strdupw(rrlp->name); + break; + } + } + } + free_rr(save_rrlp); + + if(result != NULL && shorten){ + int dot; + char *shortened; + + if((dot = strcspn(result, ".")) == 0){ + shortened = mallocw(dot+1); + strncpy(shortened, result, dot); + shortened[dot] = '\0'; + free(result); + result = shortened; + } + } + return result; +} +#endif + + +/* Main entry point for domain name -> address resolution. + * Returns 0 if name is currently unresolvable. + */ +#ifdef MODULE_resolve +int32 +resolve(name) +char *name; +{ + register struct rr *rrlp; + int32 ip_address = 0; + + if(name == NULL) + return 0; + + if(isaddr(name)) + return aton(name); + + if((rrlp = resolve_rr(name,TYPE_A)) != NULL + && rrlp->rdlength > 0) + ip_address = rrlp->rdata.addr; + + /* multi-homed hosts are handled here */ + if(rrlp != NULL && rrlp->next != NULL) { + register struct rr *rrp; + register struct route *rp; + uint16 cost = MAXINT16; + rrp = rrlp; + /* choose the best of a set of routes */ + while(rrp != NULL) { + if(rrp->rdlength > 0 + && (rp = rt_lookup(rrp->rdata.addr)) != NULL + && rp->metric <= cost) { + ip_address = rrp->rdata.addr; + cost = rp->metric; + } + rrp = rrp->next; + } + } + + free_rr(rrlp); + return ip_address; +} +#endif + + +/* Main entry point for MX record lookup. + * Returns 0 if name is currently unresolvable. + */ +#ifdef MODULE_resolve_mx +int32 +resolve_mx(name) +char *name; +{ + register struct rr *rrp, *arrp; + char *sname, *tmp, *cp; + int32 addr, ip_address = 0; + uint16 pref = MAXINT16; + + if(name == NULL) + return 0; + + if(isaddr(name)){ + if((sname = resolve_a(aton(name),FALSE)) == NULL) + return 0; + } + else + sname = strdupw(name); + + cp = sname; + while(1){ + rrp = arrp = resolve_rr(sname,TYPE_MX); + /* Search this list of rr's for an MX record */ + while(rrp != NULL){ + if(rrp->rdlength > 0 && rrp->rdata.mx.pref <= pref && + (addr = resolve(rrp->rdata.mx.exch)) != 0L){ + pref = rrp->rdata.mx.pref; + ip_address = addr; + } + rrp = rrp->next; + } + free_rr(arrp); + if(ip_address != 0) + break; + /* Compose wild card one level up */ + if((cp = strchr(cp,'.')) == NULL) + break; + tmp = mallocw(strlen(cp)+2); + sprintf(tmp,"*%s",cp); /* wildcard expansion */ + free(sname); + sname = tmp; + cp = sname + 2; + } + free(sname); + return ip_address; +} +#endif + + +/* Search for local records of the MB, MG and MR type. Returns list of + * matching records. + */ +#ifdef MODULE_resolve_mailb +struct rr * +resolve_mailb(name) +char *name; /* local username, without trailing dot */ +{ + register struct rr *result_rrlp; + struct rr *rrlp; + char *sname; + + /* Append trailing dot */ + sname = mallocw(strlen(name)+2); + sprintf(sname,"%s.",name); + rrlp = make_rr(RR_QUERY,sname,CLASS_IN,TYPE_MB,0,0,NULL); + rrlp->next = make_rr(RR_QUERY,sname,CLASS_IN,TYPE_MG,0,0,NULL); + rrlp->next->next = make_rr(RR_QUERY,sname,CLASS_IN,TYPE_MR,0,0,NULL); + FREE(sname); + if((result_rrlp = dcache_search(rrlp)) == NULL){ + result_rrlp = dfile_search(rrlp); + } + free_rr(rrlp); + if(Dsuffix != NULL){ + rrlp = result_rrlp; + while(rrlp != NULL){ /* add domain suffix to data */ + if(rrlp->rdlength > 0 && + rrlp->rdata.name[rrlp->rdlength-1] != '.'){ + sname = mallocw(rrlp->rdlength + + strlen(Dsuffix)+2); + sprintf(sname,"%s.%s",rrlp->rdata.name,Dsuffix); + free(rrlp->rdata.name); + rrlp->rdata.name = sname; + rrlp->rdlength = strlen(sname); + } + rrlp = rrlp->next; + } + } + dcache_add(copy_rr_list(result_rrlp)); + return result_rrlp; +} +#endif diff --git a/src/nos/internet/domhdr.c b/src/nos/internet/domhdr.c new file mode 100644 index 00000000..c5cf891f --- /dev/null +++ b/src/nos/internet/domhdr.c @@ -0,0 +1,297 @@ +/* Domain header conversion routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "domain.h" + +static int dn_expand(uint8 *msg,uint8 *eom,uint8 *compressed,char *full, + int fullen); +static uint8 *getq(struct rr **rrpp,uint8 *msg,uint8 *cp); +static uint8 *ntohrr(struct rr **rrpp,uint8 *msg,uint8 *cp); + +int +ntohdomain(dhdr,bpp) +register struct dhdr *dhdr; +struct mbuf **bpp; +{ + uint16 tmp,len; + register uint16 i; + uint8 *msg,*cp; + struct rr **rrpp; + + len = len_p(*bpp); + msg = mallocw(len); + pullup(bpp,msg,len); + memset(dhdr,0,sizeof(*dhdr)); + + dhdr->id = get16(&msg[0]); + tmp = get16(&msg[2]); + if(tmp & 0x8000) + dhdr->qr = 1; + dhdr->opcode = (tmp >> 11) & 0xf; + if(tmp & 0x0400) + dhdr->aa = 1; + if(tmp & 0x0200) + dhdr->tc = 1; + if(tmp & 0x0100) + dhdr->rd = 1; + if(tmp & 0x0080) + dhdr->ra = 1; + dhdr->rcode = tmp & 0xf; + dhdr->qdcount = get16(&msg[4]); + dhdr->ancount = get16(&msg[6]); + dhdr->nscount = get16(&msg[8]); + dhdr->arcount = get16(&msg[10]); + + /* Now parse the variable length sections */ + cp = &msg[12]; + + /* Question section */ + rrpp = &dhdr->questions; + for(i=0;iqdcount;i++){ + if((cp = getq(rrpp,msg,cp)) == NULL){ + free(msg); + return -1; + } + (*rrpp)->source = RR_QUESTION; + rrpp = &(*rrpp)->next; + } + *rrpp = NULL; + + /* Answer section */ + rrpp = &dhdr->answers; + for(i=0;iancount;i++){ + if((cp = ntohrr(rrpp,msg,cp)) == NULL){ + free(msg); + return -1; + } + (*rrpp)->source = RR_ANSWER; + rrpp = &(*rrpp)->next; + } + *rrpp = NULL; + + /* Name server (authority) section */ + rrpp = &dhdr->authority; + for(i=0;inscount;i++){ + if((cp = ntohrr(rrpp,msg,cp)) == NULL){ + free(msg); + return -1; + } + (*rrpp)->source = RR_AUTHORITY; + rrpp = &(*rrpp)->next; + } + *rrpp = NULL; + + /* Additional section */ + rrpp = &dhdr->additional; + for(i=0;iarcount;i++){ + if((cp = ntohrr(rrpp,msg,cp)) == NULL){ + free(msg); + return -1; + } + (*rrpp)->source = RR_ADDITIONAL; + rrpp = &(*rrpp)->next; + } + *rrpp = NULL; + free(msg); + return 0; +} +static uint8 * +getq(rrpp,msg,cp) +struct rr **rrpp; +uint8 *msg; +uint8 *cp; +{ + register struct rr *rrp; + int len; + char *name; + + *rrpp = rrp = (struct rr *)callocw(1,sizeof(struct rr)); + name = mallocw(512); + len = dn_expand(msg,NULL,cp,name,512); + if(len == -1){ + free(name); + return NULL; + } + cp += len; + rrp->name = strdupw(name); + rrp->type = get16(cp); + cp += 2; + rrp->class = get16(cp); + cp += 2; + rrp->ttl = 0; + rrp->rdlength = 0; + free(name); + return cp; +} +/* Read a resource record from a domain message into a host structure */ +static uint8 * +ntohrr(rrpp,msg,cp) +struct rr **rrpp; /* Where to allocate resource record structure */ +uint8 *msg; /* Pointer to beginning of domain message */ +uint8 *cp; /* Pointer to start of encoded RR record */ +{ + register struct rr *rrp; + int len; + char *name; + + *rrpp = rrp = (struct rr *)callocw(1,sizeof(struct rr)); + name = mallocw(512); + if((len = dn_expand(msg,NULL,cp,name,512)) == -1){ + free(name); + return NULL; + } + cp += len; + rrp->name = strdupw(name); + rrp->type = get16(cp); + cp += 2; + rrp->class = get16(cp); + cp+= 2; + rrp->ttl = get32(cp); + cp += 4; + rrp->rdlength = get16(cp); + cp += 2; + switch(rrp->type){ + case TYPE_A: + /* Just read the address directly into the structure */ + rrp->rdata.addr = get32(cp); + cp += 4; + break; + case TYPE_CNAME: + case TYPE_MB: + case TYPE_MG: + case TYPE_MR: + case TYPE_NS: + case TYPE_PTR: + /* These types all consist of a single domain name; + * convert it to ascii format + */ + len = dn_expand(msg,NULL,cp,name,512); + if(len == -1){ + free(name); + return NULL; + } + rrp->rdata.name = strdupw(name); + rrp->rdlength = strlen(name); + cp += len; + break; + case TYPE_HINFO: + len = *cp++; + rrp->rdata.hinfo.cpu = mallocw(len+1); + strncpy(rrp->rdata.hinfo.cpu,(char *)cp,len); + cp += len; + + len = *cp++; + rrp->rdata.hinfo.os = mallocw(len+1); + strncpy(rrp->rdata.hinfo.os,(char *)cp,len); + cp += len; + break; + case TYPE_MX: + rrp->rdata.mx.pref = get16(cp); + cp += 2; + /* Get domain name of exchanger */ + len = dn_expand(msg,NULL,cp,name,512); + if(len == -1){ + free(name); + return NULL; + } + rrp->rdata.mx.exch = strdupw(name); + cp += len; + break; + case TYPE_SOA: + /* Get domain name of name server */ + len = dn_expand(msg,NULL,cp,name,512); + if(len == -1){ + free(name); + return NULL; + } + rrp->rdata.soa.mname = strdupw(name); + cp += len; + + /* Get domain name of responsible person */ + len = dn_expand(msg,NULL,cp,name,512); + if(len == -1){ + free(name); + return NULL; + } + rrp->rdata.soa.rname = strdupw(name); + cp += len; + + rrp->rdata.soa.serial = get32(cp); + cp += 4; + rrp->rdata.soa.refresh = get32(cp); + cp += 4; + rrp->rdata.soa.retry = get32(cp); + cp += 4; + rrp->rdata.soa.expire = get32(cp); + cp += 4; + rrp->rdata.soa.minimum = get32(cp); + cp += 4; + break; + case TYPE_TXT: + /* Just stash */ + rrp->rdata.data = mallocw(rrp->rdlength); + memcpy(rrp->rdata.data,cp,rrp->rdlength); + cp += rrp->rdlength; + break; + default: + /* Ignore */ + cp += rrp->rdlength; + break; + } + free(name); + return cp; +} + +/* Convert a compressed domain name to the human-readable form */ +static int +dn_expand(msg,eom,compressed,full,fullen) +uint8 *msg; /* Complete domain message */ +uint8 *eom; +uint8 *compressed; /* Pointer to compressed name */ +char *full; /* Pointer to result buffer */ +int fullen; /* Length of same */ +{ + unsigned int slen; /* Length of current segment */ + register uint8 *cp; + int clen = 0; /* Total length of compressed name */ + int indirect = 0; /* Set if indirection encountered */ + int nseg = 0; /* Total number of segments in name */ + + cp = compressed; + for(;;){ + slen = *cp++; /* Length of this segment */ + if(!indirect) + clen++; + if((slen & 0xc0) == 0xc0){ + if(!indirect) + clen++; + indirect = 1; + /* Follow indirection */ + cp = &msg[((slen & 0x3f)<<8) + *cp]; + slen = *cp++; + } + if(slen == 0) /* zero length == all done */ + break; + fullen -= slen + 1; + if(fullen < 0) + return -1; + if(!indirect) + clen += slen; + while(slen-- != 0) + *full++ = (char)*cp++; + *full++ = '.'; + nseg++; + } + if(nseg == 0){ + /* Root name; represent as single dot */ + *full++ = '.'; + fullen--; + } + *full++ = '\0'; + fullen--; + return clen; /* Length of compressed message */ +} + + diff --git a/src/nos/internet/hop.c b/src/nos/internet/hop.c new file mode 100644 index 00000000..1c42ee89 --- /dev/null +++ b/src/nos/internet/hop.c @@ -0,0 +1,447 @@ +/* + * HOP.C -- trace route packets take to a remote host + * + * 02-90 -- Katie Stevens (dkstevens@ucdavis.edu) + * UC Davis, Computing Services + * Davis, CA + * 04-90 -- Modified by Phil Karn to use raw IP sockets to read replies + * 08-90 -- Modified by Bill Simpson to display domain names + */ + +#include +#include /* Nick */ +#include +#include "global.h" +#include "mbuf.h" +#include "usock.h" +#include "socket.h" +#include "session.h" +#include "timer.h" +#include "proc.h" +#include "netuser.h" +#include "domain.h" +#include "commands.h" +#include "tty.h" +#include "cmdparse.h" +#include "ip.h" +#include "icmp.h" +#include "udp.h" +#include "hardware.h" +#include +#include "po/messages.h" +#include "nos/logmsg.h" + +#define HOPMAXQUERY 5 /* Max# queries each TTL value */ +static uint16 Hoprport = 32768+666; /* funny port for udp probes */ +#define HOP_HIGHBIT 32768 /* Mask to check ICMP msgs */ + + +#define HOPTRACE 1 /* Enable HOP tracing */ +#ifdef HOPTRACE +static int Hoptrace = 0; +static int hoptrace(int argc,char *argv[],void *p); +#endif + + +static unsigned short Hopmaxttl = 30; /* max attempts */ +static unsigned short Hopmaxwait = 5; /* secs timeout each attempt */ +static unsigned short Hopquery = 3; /* #probes each attempt */ + +static int hopcheck(int argc,char *argv[],void *p); +static int hopttl(int argc,char *argv[],void *p); +static int hokwait(int argc,char *argv[],void *p); +static int hopnum(int argc,char *argv[],void *p); +static int geticmp(int s,uint16 lport,uint16 fport, + int32 *sender,char *type,char *code); +static int keychar(int c); + +static struct cmds Hopcmds[] = { + N_("check"), hopcheck, 2048, 2, N_("check "), + N_("maxttl"), hopttl, 0, 0, NULL, + N_("maxwait"), hokwait, 0, 0, NULL, + N_("queries"), hopnum, 0, 0, NULL, +#ifdef HOPTRACE + N_("trace"), hoptrace, 0, 0, NULL, +#endif + NULL, +}; + +/* attempt to trace route to a remote host */ +int +dohop(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Hopcmds,argc,argv,p); +} + +/* Set/show # queries sent each TTL value */ +static int +hopnum(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + uint16 r; + uint16 x = Hopquery; + r = setshort(&x, _("# queries each attempt"), argc, argv); + if ((x <= 0)||(x > HOPMAXQUERY)) { + _printf(_("Must be 0 < x <= %d\n"),HOPMAXQUERY); + return 0; + } else { + Hopquery = x; + } + return (int)r; +} +#ifdef HOPTRACE +/* Set/show tracelevel */ +static int +hoptrace(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Hoptrace, _("HOPCHECK tracing"), argc, argv); +} +#endif +/* Set/show maximum TTL value for a traceroute query */ +static int +hopttl(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + uint16 r; + uint16 x = Hopmaxttl; + r = setshort(&x, _("Max attempts to reach host"), argc, argv); + if ((x <= 0)||(x > 255)) { + _printf(_("Must be 0 < x <= 255\n")); + return 0; + } else { + Hopmaxttl = x; + } + return (int)r; +} +/* Set/show #secs until timeout for a traceroute query */ +static int +hokwait(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + uint16 r; + uint16 x = Hopmaxwait; + r = setshort(&x, _("# secs to wait for reply to query"), argc, argv); + if (x <= 0) { + _printf(_("Must be >= 0\n")); + return 0; + } else { + Hopmaxwait = x; + } + return (int)r; +} + +/* send probes to trace route of a remote host */ +static int +hopcheck(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct session *sp; /* Session for trace output */ + int s; /* Socket for queries */ + int s1; /* Raw socket for replies */ + struct socket lsocket; /* Local socket sending queries */ + struct socket rsocket; /* Final destination of queries */ + int32 cticks; /* Timer for query replies */ + int32 icsource; /* Sender of last ICMP reply */ + char ictype; /* ICMP type last ICMP reply */ + char iccode; /* ICMP code last ICMP reply */ + int32 lastaddr; /* Sender of previous ICMP reply */ + struct sockaddr_in sock; + register struct usock *usp; + register struct sockaddr_in *sinp; + unsigned char sndttl, q; + int tracedone = 0; + int ilookup = 1; /* Control of inverse domain lookup */ + int c; + extern int optind; + char *hostname; + int save_trace; + int user_reset = 0; + + optind = 1; + while((c = getopt(argc,argv,"n")) != EOF){ + switch(c){ + case 'n': + ilookup = 0; + break; + } + } + hostname = argv[optind]; + /* Allocate a session descriptor */ + if((sp = newsession(Cmdline,HOP,1)) == NULL){ + _printf(_("Too many sessions\n")); + keywait(NULL,1); + return 1; + } + sp->inproc = keychar; + s = -1; + + /* Setup UDP socket to remote host */ + sock.sin_family = AF_INET; + sock.sin_port = Hoprport; + _printf(_("Resolving %s... "),hostname); + if((sock.sin_addr.s_addr = resolve(hostname)) == 0){ + _printf(_("unknown\n"),hostname); + keywait(NULL,1); + freesession(sp); + return 1; + } + + /* Open socket to remote host */ + _printf(_("%s "),psocket((struct sockaddr *)&sock)); + if((s = socket(AF_INET,SOCK_DGRAM,0)) == -1){ + _printf(_("Can't create udp socket\n")); + keywait(NULL,1); + freesession(sp); + return 1; + } + if(connect(s,(struct sockaddr *)&sock,sizeof(sock)) == -1){ + _printf(_("Connect failed\n")); + keywait(NULL,1); + freesession(sp); + return 1; + } + if((s1 = socket(AF_INET,SOCK_RAW,ICMP_PTCL)) == -1){ + _printf(_("Can't create raw socket\n")); + keywait(NULL,1); + close(s); + freesession(sp); + return 1; + } + _printf(_("\n")); + /* turn off icmp tracing while hop-checking */ + save_trace = Icmp_trace; + Icmp_trace = 0; + + /* Setup structures to send queries */ + /* Retrieve socket details for user socket control block */ + usp = itop(s); + sinp = (struct sockaddr_in *)usp->name; + lsocket.address = sinp->sin_addr.s_addr; + lsocket.port = sinp->sin_port; + sinp = (struct sockaddr_in *)usp->peername; + rsocket.address = sinp->sin_addr.s_addr; + + /* Send queries with increasing TTL; start with TTL=1 */ + if (Hoptrace) + logmsg(s, _("HOPCHECK start trace to %s\n"), sp->name); + for (sndttl=1; (sndttl < Hopmaxttl); ++sndttl, sinp->sin_port++) { + /* Increment funny UDP port number each round */ + rsocket.port = sinp->sin_port; + _printf(_("%3d:"),sndttl); + lastaddr = (int32)0; + /* Send a round of queries */ + for (q=0; (q < Hopquery); ++q) { + struct mbuf *bp; + bp = ambufw(0); + send_udp(&lsocket,&rsocket,0,sndttl,&bp,0,0,0); + cticks = msclock(); + kalarm( ((long)Hopmaxwait*1000L) ); + + /* Wait for a reply to our query */ + if(geticmp(s1,lsocket.port,rsocket.port, + &icsource,&ictype,&iccode) == -1){ + if(errno != EALARM){ + user_reset = 1; + goto done; /* User reset */ + } + /* Alarm rang, give up waiting for replies */ + _printf(_(" ***")); + continue; + } + /* Save #ticks taken for reply */ + cticks = msclock() - cticks; + /* Report ICMP reply */ + if (icsource != lastaddr) { + struct rr *save_rrlp, *rrlp; + + if(lastaddr != (int32)0) + _printf(_("\n ")); + _printf(_(" %-15s"),inet_ntoa(icsource)); + if(ilookup){ + for(rrlp = save_rrlp = inverse_a(icsource); + rrlp != NULL; + rrlp = rrlp->next){ + if(rrlp->rdlength > 0){ + switch(rrlp->type){ + case TYPE_PTR: + _printf(_(" %s"), rrlp->rdata.name); + goto got_name; + case TYPE_A: + _printf(_(" %s"), rrlp->name); + goto got_name; + } +#ifdef notdef + if(rrlp->next != NULL) + _printf(_("\n%20s")," "); +#endif + } + } + got_name: ; + free_rr(save_rrlp); + + } + lastaddr = icsource; + } + _printf(_(" (%ld ms)"),cticks); +#ifdef HOPTRACE + if (Hoptrace) + logmsg(s, _( + "(hopcheck) ICMP from %s (%ldms) %s %s"), + inet_ntoa(icsource), + cticks, + Icmptypes[ictype], + ((ictype == ICMP_TIME_EXCEED)?Exceed[iccode]:Unreach[iccode])); +#endif + + /* Check type of reply */ + if (ictype == ICMP_TIME_EXCEED) + continue; + /* Reply was: destination unreachable */ + switch(iccode) { + case ICMP_PORT_UNREACH: + ++tracedone; + break; + case ICMP_NET_UNREACH: + ++tracedone; + _printf(_(" !N")); + break; + case ICMP_HOST_UNREACH: + ++tracedone; + _printf(_(" !H")); + break; + case ICMP_PROT_UNREACH: + ++tracedone; + _printf(_(" !P")); + break; + case ICMP_FRAG_NEEDED: + ++tracedone; + _printf(_(" !F")); + break; + case ICMP_ROUTE_FAIL: + ++tracedone; + _printf(_(" !S")); + break; + case ICMP_ADMIN_PROHIB: + ++tracedone; + _printf(_(" !A")); + break; + default: + _printf(_(" !?")); + break; + } + } + /* Done with this round of queries */ + kalarm((long)0); + _printf(_("\n")); + /* Check if we reached remote host this round */ + if (tracedone != 0) + break; + } + + /* Done with traceroute */ +done: close(s); + s = -1; + close(s1); + if(user_reset) + _printf(_("\n")); /* May have been in middle of line */ + _printf(_("traceroute done: ")); + Icmp_trace = save_trace; + if(user_reset){ + _printf(_("user abort\n")); + } else if (sndttl >= Hopmaxttl) { + _printf(_("!! maximum TTL exceeded\n")); + } else if ((icsource == rsocket.address) + &&(iccode == ICMP_PORT_UNREACH)) { + _printf(_("normal (%s %s)\n"), + Icmptypes[ictype],Unreach[iccode]); + } else { + _printf(_("!! %s %s\n"), + Icmptypes[ictype],Unreach[iccode]); + } +#ifdef HOPTRACE + if (Hoptrace) + logmsg(s, _("HOPCHECK to %s done"), sp->name); +#endif + keywait(NULL,1); + freesession(sp); + return 0; +} + +/* Hop check session keyboard upcall routine -- handles ^C */ +static int +keychar(c) +int c; +{ + switch(c){ + case CTLC: + alert(Current->proc,EABORT); + return 0; + } + return 1; +} + +/* Read raw network socket looking for ICMP messages in response to our + * UDP probes + */ +static int +geticmp(s,lport,fport,sender,type,code) +int s; +uint16 lport; +uint16 fport; +int32 *sender; +char *type,*code; +{ + int size; + struct icmp icmphdr; + struct ip iphdr; + struct udp udphdr; + struct mbuf *bp; + struct sockaddr_in sock; + + for(;;){ + size = sizeof(sock); + if(recv_mbuf(s,&bp,0,(struct sockaddr *)&sock,&size) == -1) + return -1; + /* It's an ICMP message, let's see if it's interesting */ + ntohicmp(&icmphdr,&bp); + if((icmphdr.type != ICMP_TIME_EXCEED || + icmphdr.code != ICMP_TTL_EXCEED) + && icmphdr.type != ICMP_DEST_UNREACH){ + /* We're not interested in these */ + free_p(&bp); + continue; + } + ntohip(&iphdr,&bp); + if(iphdr.protocol != UDP_PTCL){ + /* Not UDP, so can't be interesting */ + free_p(&bp); + continue; + } + ntohudp(&udphdr,&bp); + if(udphdr.dest != fport || udphdr.source != lport){ + /* Not from our hopcheck session */ + free_p(&bp); + continue; + } + /* Passed all of our checks, so return it */ + *sender = sock.sin_addr.s_addr; + *type = icmphdr.type; + *code = icmphdr.code; + free_p(&bp); + return 0; + } +} diff --git a/src/nos/internet/icmp.c b/src/nos/internet/icmp.c new file mode 100644 index 00000000..13a33733 --- /dev/null +++ b/src/nos/internet/icmp.c @@ -0,0 +1,267 @@ +/* Internet Control Message Protocol (ICMP) + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "ip.h" +#include "icmp.h" +#include "ping.h" +#include "netuser.h" +#include +#include "po/messages.h" + +struct mib_entry Icmp_mib[] = { + "", 0, + "icmpInMsgs", 0, + "icmpInErrors", 0, + "icmpInDestUnreachs", 0, + "icmpInTimeExcds", 0, + "icmpInParmProbs", 0, + "icmpInSrcQuenchs", 0, + "icmpInRedirects", 0, + "icmpInEchos", 0, + "icmpInEchoReps", 0, + "icmpInTimestamps", 0, + "icmpInTimestampReps", 0, + "icmpInAddrMasks", 0, + "icmpInAddrMaskReps", 0, + "icmpOutMsgs", 0, + "icmpOutErrors", 0, + "icmpOutDestUnreachs", 0, + "icmpOutTimeExcds", 0, + "icmpOutParmProbs", 0, + "icmpOutSrcQuenchs", 0, + "icmpOutRedirects", 0, + "icmpOutEchos", 0, + "icmpOutEchoReps", 0, + "icmpOutTimestamps", 0, + "icmpOutTimestampReps", 0, + "icmpOutAddrMasks", 0, + "icmpOutAddrMaskReps", 0, +}; + +/* Process an incoming ICMP packet */ +void +icmp_input( +struct iface *iface, /* Incoming interface (ignored) */ +struct ip *ip, /* Pointer to decoded IP header structure */ +struct mbuf **bpp, /* Pointer to ICMP message */ +int rxbroadcast, +int32 said +){ + struct icmplink *ipp; + struct icmp icmp; /* ICMP header */ + struct ip oip; /* Offending datagram header */ + uint16 type; /* Type of ICMP message */ + uint16 length; + + icmpInMsgs++; + if(rxbroadcast){ + /* Broadcast ICMP packets are to be IGNORED !! */ + icmpInErrors++; + free_p(bpp); + return; + } + length = ip->length - IPLEN - ip->optlen; + if(cksum(NULL,*bpp,length) != 0){ + /* Bad ICMP checksum; discard */ + icmpInErrors++; + free_p(bpp); + return; + } + ntohicmp(&icmp,bpp); + + /* Process the message. Some messages are passed up to the protocol + * module for handling, others are handled here. + */ + type = icmp.type; + + switch(type){ + case ICMP_TIME_EXCEED: /* Time-to-live Exceeded */ + case ICMP_DEST_UNREACH: /* Destination Unreachable */ + case ICMP_QUENCH: /* Source Quench */ + case ICMP_IPSP: /* Bad security packet */ + switch(type){ + case ICMP_TIME_EXCEED: /* Time-to-live Exceeded */ + icmpInTimeExcds++; + break; + case ICMP_DEST_UNREACH: /* Destination Unreachable */ + icmpInDestUnreachs++; + break; + case ICMP_QUENCH: /* Source Quench */ + icmpInSrcQuenchs++; + break; + } + ntohip(&oip,bpp); /* Extract offending IP header */ + if(Icmp_trace){ + _printf(_("ICMP from %s:"),inet_ntoa(ip->source)); + _printf(_(" dest %s %s"),inet_ntoa(oip.dest), + smsg(Icmptypes,ICMP_TYPES,type)); + switch(type){ + case ICMP_TIME_EXCEED: + _printf(_(" %s\n"), + smsg(Exceed,NEXCEED,icmp.code)); + break; + case ICMP_DEST_UNREACH: + _printf(_(" %s\n"), + smsg(Unreach,NUNREACH,icmp.code)); + break; + case ICMP_IPSP: + _printf(_(" %s\n"),smsg(Said_icmp,NIPSP,icmp.code)); + break; + default: + _printf(_(" %u\n"),icmp.code); + break; + } + } + for(ipp = Icmplink;ipp->funct != NULL;ipp++) + if(ipp->proto == oip.protocol) + break; + if(ipp->funct != NULL){ + (*ipp->funct)(ip->source,oip.source,oip.dest,icmp.type, + icmp.code,bpp); + } + break; + case ICMP_ECHO: /* Echo Request */ + /* Change type to ECHO_REPLY, recompute checksum, + * and return datagram. + */ + icmpInEchos++; + icmp.type = ICMP_ECHO_REPLY; + htonicmp(&icmp,bpp); + icmpOutEchoReps++; + ip_send(ip->dest,ip->source,ICMP_PTCL,ip->tos,0,bpp,length,0,0); + return; + case ICMP_REDIRECT: /* Redirect */ + icmpInRedirects++; + ntohip(&oip,bpp); /* Extract offending IP header */ + if(Icmp_trace){ + _printf(_("ICMP from %s:"),inet_ntoa(ip->source)); + _printf(_(" dest %s %s"),inet_ntoa(oip.dest), + smsg(Icmptypes,ICMP_TYPES,type)); + _printf(_(" new gateway %s\n"),inet_ntoa(icmp.args.address)); + } + break; + case ICMP_PARAM_PROB: /* Parameter Problem */ + icmpInParmProbs++; + break; + case ICMP_ECHO_REPLY: /* Echo Reply */ + icmpInEchoReps++; + echo_proc(ip->source,ip->dest,&icmp,bpp); + break; + case ICMP_TIMESTAMP: /* Timestamp */ + icmpInTimestamps++; + break; + case ICMP_TIME_REPLY: /* Timestamp Reply */ + icmpInTimestampReps++; + break; + case ICMP_INFO_RQST: /* Information Request */ + break; + case ICMP_INFO_REPLY: /* Information Reply */ + break; + } + free_p(bpp); +} +/* Return an ICMP response to the sender of a datagram. + * Unlike most routines, the callER frees the mbuf. + */ +int +icmp_output( +struct ip *ip, /* Header of offending datagram */ +struct mbuf *data, /* Data portion of datagram - FREED BY CALLER */ +uint8 type, /* Codes to send */ +uint8 code, +union icmp_args *args +){ + struct mbuf *bp; + struct icmp icmp; /* ICMP protocol header */ + uint16 dlen; /* Length of data portion of offending pkt */ + uint16 length; /* Total length of reply */ + + if(ip == NULL) + return -1; + if(ip->protocol == ICMP_PTCL){ + /* Peek at type field of ICMP header to see if it's safe to + * return an ICMP message + */ + switch(data->data[0]){ + case ICMP_ECHO_REPLY: + case ICMP_ECHO: + case ICMP_TIMESTAMP: + case ICMP_TIME_REPLY: + case ICMP_INFO_RQST: + case ICMP_INFO_REPLY: + break; /* These are all safe */ + default: + /* Never send an ICMP error message about another + * ICMP error message! + */ + return -1; + } + } + /* Compute amount of original datagram to return. + * We return the original IP header, and up to 8 bytes past that. + */ + dlen = min(8,len_p(data)); + length = dlen + ICMPLEN + IPLEN + ip->optlen; + /* Take excerpt from data portion */ + if(data != NULL && dup_p(&bp,data,0,dlen) == 0) + return -1; /* The caller will free data */ + + /* Recreate and tack on offending IP header */ + htonip(ip,&bp,IP_CS_NEW); + icmp.type = type; + icmp.code = code; + icmp.args.unused = 0; + switch(icmp.type){ + case ICMP_PARAM_PROB: + icmpOutParmProbs++; + icmp.args.pointer = args->pointer; + break; + case ICMP_REDIRECT: + icmpOutRedirects++; + icmp.args.address = args->address; + break; + case ICMP_ECHO: + icmpOutEchos++; + break; + case ICMP_ECHO_REPLY: + icmpOutEchoReps++; + break; + case ICMP_INFO_RQST: + break; + case ICMP_INFO_REPLY: + break; + case ICMP_TIMESTAMP: + icmpOutTimestamps++; + break; + case ICMP_TIME_REPLY: + icmpOutTimestampReps++; + icmp.args.echo.id = args->echo.id; + icmp.args.echo.seq = args->echo.seq; + break; + case ICMP_ADDR_MASK: + icmpOutAddrMasks++; + break; + case ICMP_ADDR_MASK_REPLY: + icmpOutAddrMaskReps++; + break; + case ICMP_DEST_UNREACH: + if(icmp.code == ICMP_FRAG_NEEDED) + icmp.args.mtu = args->mtu; + icmpOutDestUnreachs++; + break; + case ICMP_TIME_EXCEED: + icmpOutTimeExcds++; + break; + case ICMP_QUENCH: + icmpOutSrcQuenchs++; + break; + } + icmpOutMsgs++; + /* Now stick on the ICMP header */ + htonicmp(&icmp,&bp); + return ip_send(INADDR_ANY,ip->source,ICMP_PTCL,ip->tos,0,&bp,length,0,0); +} diff --git a/src/nos/internet/icmpcmd.c b/src/nos/internet/icmpcmd.c new file mode 100644 index 00000000..a991cc3f --- /dev/null +++ b/src/nos/internet/icmpcmd.c @@ -0,0 +1,78 @@ +/* ICMP-related user commands + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "icmp.h" +#include "ip.h" +#include "mbuf.h" +#include "netuser.h" +#include "internet.h" +#include "timer.h" +#include "socket.h" +#include "proc.h" +#include "cmdparse.h" +#include "commands.h" +#include +#include "po/messages.h" + +static int doicmpec(int argc, char *argv[],void *p); +static int doicmpstat(int argc, char *argv[],void *p); +static int doicmptr(int argc, char *argv[],void *p); + +static struct cmds Icmpcmds[] = { + N_("echo"), doicmpec, 0, 0, NULL, + N_("status"), doicmpstat, 0, 0, NULL, + N_("trace"), doicmptr, 0, 0, NULL, + NULL +}; + +int Icmp_trace; +int Icmp_echo = 1; + +int +doicmp(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Icmpcmds,argc,argv,p); +} + +static int +doicmpstat(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register int i; + int lim; + + /* Note that the ICMP variables are shown in column order, because + * that lines up the In and Out variables on the same line + */ + lim = NUMICMPMIB/2; + for(i=1;i<=lim;i++){ + _printf(_("(%2u)%-20s%10lu"),i,Icmp_mib[i].name, + Icmp_mib[i].value.integer); + _printf(_(" (%2u)%-20s%10lu\n"),i+lim,Icmp_mib[i+lim].name, + Icmp_mib[i+lim].value.integer); + } + return 0; +} +static int +doicmptr(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Icmp_trace, _("ICMP tracing"), argc, argv); +} +static int +doicmpec(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Icmp_echo, _("ICMP echo response accept"), argc, argv); +} diff --git a/src/nos/internet/icmphdr.c b/src/nos/internet/icmphdr.c new file mode 100644 index 00000000..03870a4c --- /dev/null +++ b/src/nos/internet/icmphdr.c @@ -0,0 +1,98 @@ +/* ICMP header conversion routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "internet.h" +#include "ip.h" +#include "icmp.h" + +/* Generate ICMP header in network byte order, link data, compute checksum */ +void +htonicmp( +struct icmp *icmp, +struct mbuf **bpp +){ + register uint8 *cp; + uint16 checksum; + + pushdown(bpp,NULL,ICMPLEN); + cp = (*bpp)->data; + + *cp++ = icmp->type; + *cp++ = icmp->code; + cp = put16(cp,0); /* Clear checksum */ + switch(icmp->type){ + case ICMP_DEST_UNREACH: + if(icmp->code == ICMP_FRAG_NEEDED){ + /* Deering/Mogul max MTU indication */ + cp = put16(cp,0); + cp = put16(cp,icmp->args.mtu); + } else + cp = put32(cp,0L); + break; + case ICMP_PARAM_PROB: + *cp++ = icmp->args.pointer; + *cp++ = 0; + cp = put16(cp,0); + break; + case ICMP_REDIRECT: + cp = put32(cp,icmp->args.address); + break; + case ICMP_ECHO: + case ICMP_ECHO_REPLY: + case ICMP_TIMESTAMP: + case ICMP_TIME_REPLY: + case ICMP_INFO_RQST: + case ICMP_INFO_REPLY: + cp = put16(cp,icmp->args.echo.id); + cp = put16(cp,icmp->args.echo.seq); + break; + default: + cp = put32(cp,0L); + break; + } + /* Compute checksum, and stash result */ + checksum = cksum(NULL,*bpp,len_p(*bpp)); + cp = &(*bpp)->data[2]; + cp = put16(cp,checksum); +} +/* Pull off ICMP header */ +int +ntohicmp(icmp,bpp) +struct icmp *icmp; +struct mbuf **bpp; +{ + uint8 icmpbuf[8]; + + if(icmp == (struct icmp *)NULL) + return -1; + if(pullup(bpp,icmpbuf,8) != 8) + return -1; + icmp->type = icmpbuf[0]; + icmp->code = icmpbuf[1]; + switch(icmp->type){ + case ICMP_DEST_UNREACH: + /* Retrieve Deering/Mogul MTU value */ + if(icmp->code == ICMP_FRAG_NEEDED) + icmp->args.mtu = get16(&icmpbuf[6]); + break; + case ICMP_PARAM_PROB: + icmp->args.pointer = icmpbuf[4]; + break; + case ICMP_REDIRECT: + icmp->args.address = get32(&icmpbuf[4]); + break; + case ICMP_ECHO: + case ICMP_ECHO_REPLY: + case ICMP_TIMESTAMP: + case ICMP_TIME_REPLY: + case ICMP_INFO_RQST: + case ICMP_INFO_REPLY: + icmp->args.echo.id = get16(&icmpbuf[4]); + icmp->args.echo.seq = get16(&icmpbuf[6]); + break; + } + return 0; +} + diff --git a/src/nos/internet/icmpmsg.c b/src/nos/internet/icmpmsg.c new file mode 100644 index 00000000..5bd9a72b --- /dev/null +++ b/src/nos/internet/icmpmsg.c @@ -0,0 +1,67 @@ +/* ICMP message type tables + * Copyright 1991 Phil Karn, KA9Q + */ + +#include "global.h" + +/* ICMP message types */ +char *Icmptypes[] = { + "Echo Reply", + NULL, + NULL, + "Unreachable", + "Source Quench", + "Redirect", + NULL, + NULL, + "Echo Request", + NULL, + NULL, + "Time Exceeded", + "Parameter Problem", + "Timestamp", + "Timestamp Reply", + "Information Request", + "Information Reply", + "Address mask request", + "Address mask reply", + "Security Association" +}; + +/* ICMP unreachable messages */ +char *Unreach[] = { + "Network", + "Host", + "Protocol", + "Port", + "Fragmentation", + "Source route", + "Dest net unknown", + "Dest host unknown", + "Source host isolated", + "Net prohibited", + "Host prohibited", + "Net TOS", + "Host TOS", + "Administratively Prohibited" +}; +/* ICMP Time exceeded messages */ +char *Exceed[] = { + "Time-to-live", + "Fragment reassembly" +}; + +/* ICMP redirect messages */ +char *Redirect[] = { + "Network", + "Host", + "TOS & Network", + "TOS & Host" +}; +/* Bad SAID messages */ +char *Said_icmp[] = { + "Unknown SAID", + "Authentication failed", + "Decryption failed" +}; + diff --git a/src/nos/internet/ip.c b/src/nos/internet/ip.c new file mode 100644 index 00000000..464667f2 --- /dev/null +++ b/src/nos/internet/ip.c @@ -0,0 +1,710 @@ +#undef SIM +/* Upper half of IP, consisting of send/receive primitives, including + * fragment reassembly, for higher level protocols. + * Not needed when running as a standalone gateway. + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "timer.h" +#include "internet.h" +#include "netuser.h" +#include "iface.h" +#include "pktdrvr.h" +#include "ip.h" +#include "icmp.h" + +#ifdef MODULE +#define STATIC +#else +#define STATIC static +#define MODULE_Ip_mib +#define MODULE_Reasmq +#define MODULE_Id_cntr +#define MODULE_Rawip +#define MODULE_Ip_trace +#define MODULE_ip_send +#define MODULE_ip_recv +#define MODULE_ipip_recv +#define MODULE_fraghandle +#define MODULE_raw_ip +#define MODULE_del_ip +#define MODULE_lookup_reasm +#define MODULE_creat_reasm +#define MODULE_free_reasm +#define MODULE_ip_timeout +#define MODULE_newfrag +#define MODULE_freefrag +#define MODULE_ip_garbage +#define MODULE_ttldec +#define MODULE_rquench +#endif + +STATIC int fraghandle(struct ip *ip,struct mbuf **bpp); +STATIC void ip_timeout(void *arg); +STATIC void free_reasm(struct reasm *rp); +STATIC void freefrag(struct frag *fp); +STATIC struct reasm *lookup_reasm(struct ip *ip); +STATIC struct reasm *creat_reasm(struct ip *ip); +STATIC struct frag *newfrag(uint16 offset,uint16 last,struct mbuf **bpp); +void ttldec(struct iface *ifp); + +#ifdef MODULE_Ip_mib +struct mib_entry Ip_mib[20] = { + "", 0, + "ipForwarding", 1, + "ipDefaultTTL", MAXTTL, + "ipInReceives", 0, + "ipInHdrErrors", 0, + "ipInAddrErrors", 0, + "ipForwDatagrams", 0, + "ipInUnknownProtos", 0, + "ipInDiscards", 0, + "ipInDelivers", 0, + "ipOutRequests", 0, + "ipOutDiscards", 0, + "ipOutNoRoutes", 0, + "ipReasmTimeout", TLB, + "ipReasmReqds", 0, + "ipReasmOKs", 0, + "ipReasmFails", 0, + "ipFragOKs", 0, + "ipFragFails", 0, + "ipFragCreates", 0, +}; +#endif + +#ifdef MODULE_Reasmq +struct reasm *Reasmq; +#endif +#ifdef MODULE_Id_cntr +uint16 Id_cntr = 0; /* Datagram serial number */ +#endif +#ifdef MODULE_Rawip +/* formerly Raw_ip but this conflicts with raw_ip() on a Win32 filesystem */ +/* Nick STATIC */ struct raw_ip *Rawip; +#endif +#ifdef MODULE_Ip_trace +int Ip_trace = 0; +#endif + +#define INSERT 0 +#define APPEND 1 +#define PREPEND 2 + +/* Send an IP datagram. Modeled after the example interface on p 32 of + * RFC 791 + */ +#ifdef MODULE_ip_send +int +ip_send( +int32 source, /* source address */ +int32 dest, /* Destination address */ +char protocol, /* Protocol */ +char tos, /* Type of service */ +char ttl, /* Time-to-live */ +struct mbuf **bpp, /* Data portion of datagram */ +uint16 length, /* Optional length of data portion */ +uint16 id, /* Optional identification */ +char df /* Don't-fragment flag */ +){ + struct ip ip; /* IP header */ + + ipOutRequests++; + + if(bpp == NULL) + return -1; + if(source == INADDR_ANY) + source = locaddr(dest); + if(length == 0 && *bpp != NULL) + length = len_p(*bpp); + if(id == 0) + id = Id_cntr++; + if(ttl == 0) + ttl = ipDefaultTTL; + + /* Fill in IP header */ + ip.version = IPVERSION; + ip.tos = tos; + ip.length = IPLEN + length; + ip.id = id; + ip.offset = 0; + ip.flags.mf = 0; + ip.flags.df = df; + ip.flags.congest = 0; + ip.ttl = ttl; + ip.protocol = protocol; + ip.source = source; + ip.dest = dest; + ip.optlen = 0; + if(Ip_trace) + dumpip(NULL,&ip,*bpp,0); + + htonip(&ip,bpp,IP_CS_NEW); + if(ismyaddr(ip.dest)){ + /* Pretend it has been sent by the loopback interface before + * it appears in the receive queue + */ +#ifdef SIM + net_sim(bpp); +#else + net_route(&Loopback,bpp); +#endif + Loopback.ipsndcnt++; + Loopback.rawsndcnt++; + Loopback.lastsent = secclock(); + } else + net_route(NULL,bpp); + return 0; +} +#endif + +/* Reassemble incoming IP fragments and dispatch completed datagrams + * to the proper transport module + */ + +#ifdef MODULE_ip_recv +void +ip_recv( +struct iface *iface, /* Incoming interface */ +struct ip *ip, /* Extracted IP header */ +struct mbuf **bpp, /* Data portion */ +int rxbroadcast, /* True if received on subnet broadcast address */ +int32 spi /* Security association, if any */ +){ + /* Function to call with completed datagram */ + register struct raw_ip *rp; + struct mbuf *bp1; + int rxcnt = 0; + register struct iplink *ipp; + + /* If we have a complete packet, call the next layer + * to handle the result. Note that fraghandle passes back + * a length field that does NOT include the IP header + */ + if(bpp == NULL || fraghandle(ip,bpp) == -1) + return; /* Not done yet */ + + /* Trim data segment if necessary. */ + trim_mbuf(bpp,ip->length - (IPLEN + ip->optlen)); + + ipInDelivers++; + if(Ip_trace) + dumpip(iface,ip,*bpp,spi); + + for(rp = Rawip;rp != NULL;rp = rp->next){ + if(rp->protocol != ip->protocol) + continue; + rxcnt++; + /* Duplicate the data portion, and put the header back on */ + dup_p(&bp1,*bpp,0,len_p(*bpp)); + if(bp1 != NULL){ + htonip(ip,&bp1,IP_CS_OLD); + enqueue(&rp->rcvq,&bp1); + if(rp->r_upcall != NULL) + (*rp->r_upcall)(rp); + } else { + free_p(&bp1); + } + } + /* Look it up in the transport protocol table */ + for(ipp = Iplink;ipp->funct != NULL;ipp++){ + if(ipp->proto == ip->protocol) + break; + } + if(ipp->funct != NULL){ + /* Found, call transport protocol */ + (*ipp->funct)(iface,ip,bpp,rxbroadcast,spi); + } else { + /* Not found */ + if(rxcnt == 0){ + /* Send an ICMP Protocol Unknown response... */ + ipInUnknownProtos++; + /* ...unless it's a broadcast */ + if(!rxbroadcast){ + icmp_output(ip,*bpp,ICMP_DEST_UNREACH, + ICMP_PROT_UNREACH,NULL); + } + } + free_p(bpp); + } +} +#endif +/* Handle IP packets encapsulated inside IP */ + +#ifdef MODULE_ipip_recv +void +ipip_recv( +struct iface *iface, /* Incoming interface */ +struct ip *ip, /* Extracted IP header */ +struct mbuf **bpp, /* Data portion */ +int rxbroadcast, /* True if received on subnet broadcast address */ +int32 spi +){ + net_route(&Encap,bpp); +} +#endif + +/* Process IP datagram fragments + * If datagram is complete, return its length (MINUS header); + * otherwise return -1 + */ + +#ifdef MODULE_fraghandle +STATIC int +fraghandle( +struct ip *ip, /* IP header, host byte order */ +struct mbuf **bpp /* The fragment itself */ +){ + register struct reasm *rp; /* Pointer to reassembly descriptor */ + struct frag *lastfrag,*nextfrag,*tfp; + struct mbuf *tbp; + uint16 i; + uint16 last; /* Index of first byte beyond fragment */ + + last = ip->offset + ip->length - (IPLEN + ip->optlen); + + rp = lookup_reasm(ip); + if(ip->offset == 0 && !ip->flags.mf){ + /* Complete datagram received. Discard any earlier fragments */ + if(rp != NULL){ + free_reasm(rp); + ipReasmOKs++; + } + return ip->length; + } + ipReasmReqds++; + if(rp == NULL){ + /* First fragment; create new reassembly descriptor */ + if((rp = creat_reasm(ip)) == NULL){ + /* No space for descriptor, drop fragment */ + ipReasmFails++; + free_p(bpp); + return -1; + } + } + /* Keep restarting timer as long as we keep getting fragments */ + stop_timer(&rp->timer); + start_timer(&rp->timer); + + /* If this is the last fragment, we now know how long the + * entire datagram is; record it + */ + if(!ip->flags.mf) + rp->length = last; + + /* Set nextfrag to the first fragment which begins after us, + * and lastfrag to the last fragment which begins before us + */ + lastfrag = NULL; + for(nextfrag = rp->fraglist;nextfrag != NULL;nextfrag = nextfrag->next){ + if(nextfrag->offset > ip->offset) + break; + lastfrag = nextfrag; + } + /* Check for overlap with preceeding fragment */ + if(lastfrag != NULL && ip->offset < lastfrag->last){ + /* Strip overlap from new fragment */ + i = lastfrag->last - ip->offset; + pullup(bpp,NULL,i); + if(*bpp == NULL) + return -1; /* Nothing left */ + ip->offset += i; + } + /* Look for overlap with succeeding segments */ + for(; nextfrag != NULL; nextfrag = tfp){ + tfp = nextfrag->next; /* save in case we delete fp */ + + if(nextfrag->offset >= last) + break; /* Past our end */ + /* Trim the front of this entry; if nothing is + * left, remove it. + */ + i = last - nextfrag->offset; + pullup(&nextfrag->buf,NULL,i); + if(nextfrag->buf == NULL){ + /* superseded; delete from list */ + if(nextfrag->prev != NULL) + nextfrag->prev->next = nextfrag->next; + else + rp->fraglist = nextfrag->next; + if(tfp->next != NULL) + nextfrag->next->prev = nextfrag->prev; + freefrag(nextfrag); + } else + nextfrag->offset = last; + } + /* Lastfrag now points, as before, to the fragment before us; + * nextfrag points at the next fragment. Check to see if we can + * join to either or both fragments. + */ + i = INSERT; + if(lastfrag != NULL && lastfrag->last == ip->offset) + i |= APPEND; + if(nextfrag != NULL && nextfrag->offset == last) + i |= PREPEND; + switch(i){ + case INSERT: /* Insert new desc between lastfrag and nextfrag */ + tfp = newfrag(ip->offset,last,bpp); + tfp->prev = lastfrag; + tfp->next = nextfrag; + if(lastfrag != NULL) + lastfrag->next = tfp; /* Middle of list */ + else + rp->fraglist = tfp; /* First on list */ + if(nextfrag != NULL) + nextfrag->prev = tfp; + break; + case APPEND: /* Append to lastfrag */ + append(&lastfrag->buf,bpp); + lastfrag->last = last; /* Extend forward */ + break; + case PREPEND: /* Prepend to nextfrag */ + tbp = nextfrag->buf; + nextfrag->buf = *bpp; + bpp = NULL; + append(&nextfrag->buf,&tbp); + nextfrag->offset = ip->offset; /* Extend backward */ + break; + case (APPEND|PREPEND): + /* Consolidate by appending this fragment and nextfrag + * to lastfrag and removing the nextfrag descriptor + */ + append(&lastfrag->buf,bpp); + append(&lastfrag->buf,&nextfrag->buf); + nextfrag->buf = NULL; + lastfrag->last = nextfrag->last; + + /* Finally unlink and delete the now unneeded nextfrag */ + lastfrag->next = nextfrag->next; + if(nextfrag->next != NULL) + nextfrag->next->prev = lastfrag; + freefrag(nextfrag); + break; + } + if(rp->fraglist->offset == 0 && rp->fraglist->next == NULL + && rp->length != 0){ + + /* We've gotten a complete datagram, so extract it from the + * reassembly buffer and pass it on. + */ + *bpp = rp->fraglist->buf; + rp->fraglist->buf = NULL; + /* Tell IP the entire length */ + ip->length = rp->length + (IPLEN + ip->optlen); + free_reasm(rp); + ipReasmOKs++; + ip->offset = 0; + ip->flags.mf = 0; + return ip->length; + } else + return -1; +} +#endif +/* Arrange for receipt of raw IP datagrams */ + +#ifdef MODULE_raw_ip +struct raw_ip * +raw_ip( +int protocol, +void (*r_upcall)() +){ + register struct raw_ip *rp; + + rp = (struct raw_ip *)callocw(1,sizeof(struct raw_ip)); + rp->protocol = protocol; + rp->r_upcall = r_upcall; + rp->next = Rawip; + Rawip = rp; + return rp; +} +#endif +/* Free a raw IP descriptor */ + +#ifdef MODULE_del_ip +void +del_ip( +struct raw_ip *rpp +){ + struct raw_ip *rplast = NULL; + register struct raw_ip *rp; + + /* Do sanity check on arg */ + for(rp = Rawip;rp != NULL;rplast=rp,rp = rp->next) + if(rp == rpp) + break; + if(rp == NULL) + return; /* Doesn't exist */ + + /* Unlink */ + if(rplast != NULL) + rplast->next = rp->next; + else + Rawip = rp->next; + /* Free resources */ + free_q(&rp->rcvq); + free(rp); +} +#endif + + +#ifdef MODULE_lookup_reasm +STATIC struct reasm * +lookup_reasm( +struct ip *ip +){ + register struct reasm *rp; + struct reasm *rplast = NULL; + + for(rp = Reasmq;rp != NULL;rplast=rp,rp = rp->next){ + if(ip->id == rp->id && ip->source == rp->source + && ip->dest == rp->dest && ip->protocol == rp->protocol){ + if(rplast != NULL){ + /* Move to top of list for speed */ + rplast->next = rp->next; + rp->next = Reasmq; + Reasmq = rp; + } + return rp; + } + + } + return NULL; +} +#endif +/* Create a reassembly descriptor, + * put at head of reassembly list + */ + +#ifdef MODULE_creat_reasm +STATIC struct reasm * +creat_reasm( +struct ip *ip +){ + register struct reasm *rp; + + if((rp = (struct reasm *)calloc(1,sizeof(struct reasm))) == NULL) + return rp; /* No space for descriptor */ + rp->source = ip->source; + rp->dest = ip->dest; + rp->id = ip->id; + rp->protocol = ip->protocol; + set_timer(&rp->timer,ipReasmTimeout * 1000L); + rp->timer.func = ip_timeout; + rp->timer.arg = rp; + + rp->next = Reasmq; + Reasmq = rp; + return rp; +} +#endif + +/* Free all resources associated with a reassembly descriptor */ + +#ifdef MODULE_free_reasm +STATIC void +free_reasm( +struct reasm *r +){ + register struct reasm *rp; + struct reasm *rplast = NULL; + register struct frag *fp; + + for(rp = Reasmq;rp != NULL;rplast = rp,rp=rp->next) + if(r == rp) + break; + if(rp == NULL) + return; /* Not on list */ + + stop_timer(&rp->timer); + /* Remove from list of reassembly descriptors */ + if(rplast != NULL) + rplast->next = rp->next; + else + Reasmq = rp->next; + + /* Free any fragments on list, starting at beginning */ + while((fp = rp->fraglist) != NULL){ + rp->fraglist = fp->next; + free_p(&fp->buf); + free(fp); + } + free(rp); +} +#endif + +/* Handle reassembly timeouts by deleting all reassembly resources */ + +#ifdef MODULE_ip_timeout +STATIC void +ip_timeout( +void *arg +){ + free_reasm((struct reasm *)arg); + ipReasmFails++; +} +#endif +/* Create a fragment */ + +#ifdef MODULE_newfrag +STATIC struct frag * +newfrag( +uint16 offset, +uint16 last, +struct mbuf **bpp +){ + struct frag *fp; + + if((fp = (struct frag *)calloc(1,sizeof(struct frag))) == NULL){ + /* Drop fragment */ + free_p(bpp); + return NULL; + } + fp->buf = *bpp; + *bpp = NULL; + fp->offset = offset; + fp->last = last; + return fp; +} +#endif +/* Delete a fragment, return next one on queue */ + +#ifdef MODULE_freefrag +STATIC void +freefrag( +struct frag *fp +){ + free_p(&fp->buf); + free(fp); +} +#endif + +/* In red alert mode, blow away the whole reassembly queue. Otherwise crunch + * each fragment on each reassembly descriptor + */ + +#ifdef MODULE_ip_garbage +void +ip_garbage( +int red +){ + struct reasm *rp,*rp1; + struct frag *fp; + struct raw_ip *rwp; + struct iface *ifp; + + /* Run through the reassembly queue */ + for(rp = Reasmq;rp != NULL;rp = rp1){ + rp1 = rp->next; + if(red){ + free_reasm(rp); + } else { + for(fp = rp->fraglist;fp != NULL;fp = fp->next){ + mbuf_crunch(&fp->buf); + } + } + } + /* Run through the raw IP queue */ + for(rwp = Rawip;rwp != NULL;rwp = rwp->next) + mbuf_crunch(&rwp->rcvq); + + /* Walk through interface output queues and decrement IP TTLs. + * Discard and return ICMP TTL exceeded messages for any that + * go to zero. (Some argue that this ought to be done all the + * time, but it would probably break a lot of machines with + * small IP TTL settings using amateur packet radio paths.) + * + * Also send an ICMP source quench message to one + * randomly chosen packet on each queue. If in red mode, + * also drop the packet. + */ + for(ifp=Ifaces;ifp != NULL;ifp = ifp->next){ + ttldec(ifp); + rquench(ifp,red); + } +} +#endif +/* Decrement the IP TTL field in each packet on the send queue. If + * a TTL goes to zero, discard the packet. + */ + +#ifdef MODULE_ttldec +void +ttldec( +struct iface *ifp +){ + struct mbuf *bp,*bpprev,*bpnext; + struct qhdr qhdr; + struct ip ip; + + bpprev = NULL; + for(bp = ifp->outq; bp != NULL;bpprev = bp,bp = bpnext){ + bpnext = bp->anext; + pullup(&bp,&qhdr,sizeof(qhdr)); + ntohip(&ip,&bp); + if(--ip.ttl == 0){ + /* Drop packet */ + icmp_output(&ip,bp,ICMP_TIME_EXCEED,0,NULL); + if(bpprev == NULL) /* First on queue */ + ifp->outq = bpnext; + else + bpprev->anext = bpnext; + free_p(&bp); + bp = bpprev; + continue; + } + /* Put IP and queue headers back, restore to queue */ + htonip(&ip,&bp,0); + pushdown(&bp,&qhdr,sizeof(qhdr)); + if(bpprev == NULL) /* First on queue */ + ifp->outq = bp; + else + bpprev->anext = bp; + bp->anext = bpnext; + } +} +#endif + +/* Execute random quench algorithm on an interface's output queue */ + +#ifdef MODULE_rquench +void +rquench( +struct iface *ifp, +int drop +){ + struct mbuf *bp,*bplast; + int i; + struct qhdr qhdr; + struct ip ip; + struct mbuf *bpdup; + + if((i = len_q(ifp->outq)) == 0) + return; /* Queue is empty */ + + i = urandom(i); /* Select a victim */ + + /* Search for i-th message on queue */ + bplast = NULL; + for(bp = ifp->outq;bp != NULL && i>0;i--,bplast=bp,bp=bp->anext) + ; + if(bp == NULL) + return; /* "Can't happen" */ + + /* Send a source quench */ + dup_p(&bpdup,bp,0,len_p(bp)); + pullup(&bpdup,&qhdr,sizeof(qhdr)); + ntohip(&ip,&bpdup); + icmp_output(&ip,bpdup,ICMP_QUENCH,0,NULL); + free_p(&bpdup); + if(!drop) + return; /* All done */ + + /* Drop the packet */ + if(bplast != NULL) + bplast->anext = bp->anext; + else + ifp->outq = bp->anext; /* First on list */ + free_p(&bp); +} +#endif diff --git a/src/nos/internet/ipcmd.c b/src/nos/internet/ipcmd.c new file mode 100644 index 00000000..1a781d24 --- /dev/null +++ b/src/nos/internet/ipcmd.c @@ -0,0 +1,352 @@ +/* IP-related user commands + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "internet.h" +#include "timer.h" +#include "netuser.h" +#include "iface.h" +#include "ip.h" +#include "cmdparse.h" +#include "commands.h" +#include "rip.h" +#include +#include "po/messages.h" + +int32 Ip_addr; + +static int doadd(int argc,char *argv[],void *p); +static int dodrop(int argc,char *argv[],void *p); +static int doflush(int argc,char *argv[],void *p); +static int doipaddr(int argc,char *argv[],void *p); +static int doipstat(int argc,char *argv[],void *p); +static int dolook(int argc,char *argv[],void *p); +static int dortimer(int argc,char *argv[],void *p); +static int dottl(int argc,char *argv[],void *p); +static int doiptrace(int argc,char *argv[],void *p); +static int dumproute(struct route *rp); + +static struct cmds Ipcmds[] = { + N_("address"), doipaddr, 0, 0, NULL, + N_("rtimer"), dortimer, 0, 0, NULL, + N_("status"), doipstat, 0, 0, NULL, + N_("trace"), doiptrace, 0, 0, NULL, + N_("ttl"), dottl, 0, 0, NULL, + NULL, +}; +/* "route" subcommands */ +static struct cmds Rtcmds[] = { + N_("add"), doadd, 0, 3, + N_("route add [/] [gateway] [metric]"), + + N_("addprivate"), doadd, 0, 3, + N_("route addprivate [/] [gateway] [metric]"), + + N_("drop"), dodrop, 0, 2, + N_("route drop [/]"), + + N_("flush"), doflush, 0, 0, + NULL, + + N_("lookup"), dolook, 0, 2, + N_("route lookup "), + + NULL, +}; + +int +doip(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Ipcmds,argc,argv,p); +} +static int +doiptrace(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Ip_trace, _("IP rx tracing"), argc, argv); +} + +static int +doipaddr(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int32 n; + + if(argc < 2) { + _printf(_("%s\n"),inet_ntoa(Ip_addr)); + } else if((n = resolve(argv[1])) == 0){ + printf(Badhost,argv[1]); + return 1; + } else + Ip_addr = n; + return 0; +} +static int +dortimer(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setlong(&ipReasmTimeout, _("IP reasm timeout (sec)"), + argc, argv); +} +static int +dottl(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setlong(&ipDefaultTTL, _("IP Time-to-live"), argc, argv); +} + + +/* Display and/or manipulate routing table */ +int +doroute(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register int i,bits; + register struct route *rp; + + if(argc >= 2) + return subcmd(Rtcmds,argc,argv,p); + + /* Dump IP routing table + * Dest Len Interface Gateway Use + * 192.001.002.003 32 sl0 192.002.003.004 0 + */ + printf( +"Dest Len Interface Gateway Metric P Timer Use\n"); + + for(bits=31;bits>=0;bits--){ + for(i=0;inext){ + if(dumproute(rp) == EOF) + return 0; + } + } + } + if(R_default.iface != NULL) + dumproute(&R_default); + + return 0; +} +/* Add an entry to the routing table + * E.g., "add 1.2.3.4 ax0 5.6.7.8 3" + */ +static int +doadd(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct iface *ifp; + int32 dest,gateway; + unsigned bits; + char *bitp; + int32 metric; + char private; + + if(strncmp(argv[0],"addp",4) == 0) + private = 1; + else + private = 0; + if(strcmp(argv[1],"default") == 0){ + dest = 0; + bits = 0; + } else { + /* If IP address is followed by an optional slash and + * a length field, (e.g., 128.96/16) get it; + * otherwise assume a full 32-bit address + */ + if((bitp = strchr(argv[1],'/')) != NULL){ + /* Terminate address token for resolve() call */ + *bitp++ = '\0'; + bits = atoi(bitp); + } else + bits = 32; + + if((dest = resolve(argv[1])) == 0){ + printf(Badhost,argv[1]); + return 1; + } + } + if((ifp = if_lookup(argv[2])) == NULL){ + _printf(_("Interface \"%s\" unknown\n"),argv[2]); + return 1; + } + if(argc > 3){ + if((gateway = resolve(argv[3])) == 0){ + printf(Badhost,argv[3]); + return 1; + } + } else { + gateway = 0; + } + if (argc > 4) + metric = atol(argv[4]); + else + metric = 1; + + if(rt_add(dest,bits,gateway,ifp,metric,0,private) == NULL) + _printf(_("Can't add route\n")); + return 0; +} +/* Drop an entry from the routing table + * E.g., "drop 128.96/16 + */ +static int +dodrop(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + char *bitp; + unsigned bits; + int32 n; + + if(strcmp(argv[1],"default") == 0){ + n = 0; + bits = 0; + } else { + /* If IP address is followed by an optional slash and length field, + * (e.g., 128.96/16) get it; otherwise assume a full 32-bit address + */ + if((bitp = strchr(argv[1],'/')) != NULL){ + /* Terminate address token for resolve() call */ + *bitp++ = '\0'; + bits = atoi(bitp); + } else + bits = 32; + + if((n = resolve(argv[1])) == 0){ + printf(Badhost,argv[1]); + return 1; + } + } + return rt_drop(n,bits); +} +/* Force a timeout on all temporary routes */ +static int +doflush(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct route *rp; + struct route *rptmp; + int i,j; + + if(R_default.timer.state == TIMER_RUN){ + rt_drop(0,0); /* Drop default route */ + } + for(i=0;inext; + if(rp->timer.state == TIMER_RUN){ + rt_drop(rp->target,rp->bits); + } + } + } + } + return 0; +} +/* Dump a routing table entry */ +static int +dumproute(rp) +register struct route *rp; +{ + char *cp; + + if(rp->target != 0) + cp = inet_ntoa(rp->target); + else + cp = "default"; + _printf(_("%-16s"),cp); + _printf(_("%-4u"),rp->bits); + _printf(_("%-13s"),rp->iface->name); + if(rp->gateway != 0) + cp = inet_ntoa(rp->gateway); + else + cp = ""; + _printf(_("%-17s"),cp); + _printf(_("%-8lu"),rp->metric); + _printf(_("%c "),rp->flags.rtprivate ? 'P' : ' '); + _printf(_("%-7lu"), + read_timer(&rp->timer) / 1000L); + return _printf(_("%lu\n"),rp->uses); +} + +static int +dolook(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct route *rp; + int32 addr; + + addr = resolve(argv[1]); + if(addr == 0){ + _printf(_("Host %s unknown\n"),argv[1]); + return 1; + } + if((rp = rt_lookup(addr)) == NULL){ + _printf(_("Host %s (%s) unreachable\n"),argv[1],inet_ntoa(addr)); + return 1; + } + dumproute(rp); + return 0; +} + +static int +doipstat(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct reasm *rp; + register struct frag *fp; + int i; + + for(i=1;i<=NUMIPMIB;i++){ + _printf(_("(%2u)%-20s%10lu"),i, + Ip_mib[i].name,Ip_mib[i].value.integer); + if(i % 2) + _printf(_(" ")); + else + _printf(_("\n")); + } + if((i % 2) == 0) + _printf(_("\n")); + _printf(_("Routing lookups: %lu, cache hits %lu (%lu%%)\n"), + Rtlookups,Rtchits, + Rtlookups != 0 ? (Rtchits*100 + Rtlookups/2)/Rtlookups: 0); + + if(Reasmq != NULL) + _printf(_("Reassembly fragments:\n")); + for(rp = Reasmq;rp != NULL;rp = rp->next){ + _printf(_("src %s"),inet_ntoa(rp->source)); + _printf(_(" dest %s"),inet_ntoa(rp->dest)); + _printf(_(" id %u pctl %u time %lu len %u\n"), + rp->id,rp->protocol,read_timer(&rp->timer), + rp->length); + for(fp = rp->fraglist;fp != NULL;fp = fp->next){ + _printf(_(" offset %u last %u\n"),fp->offset, + fp->last); + } + } + return 0; +} diff --git a/src/nos/internet/iphdr.c b/src/nos/internet/iphdr.c new file mode 100644 index 00000000..b4fedfdf --- /dev/null +++ b/src/nos/internet/iphdr.c @@ -0,0 +1,177 @@ +/* IP header conversion routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "ip.h" +#include "internet.h" + +/* Convert IP header in host format to network mbuf + * If cflag != 0, take checksum from structure, + * otherwise compute it automatically. + */ +void +htonip( +struct ip *ip, +struct mbuf **bpp, +int cflag +){ + uint16 hdr_len; + register uint8 *cp; + uint16 fl_offs; + + if(bpp == NULL) + return; + hdr_len = IPLEN + ip->optlen; + if(hdr_len > IPLEN + IP_MAXOPT) + hdr_len = IPLEN + IP_MAXOPT; + pushdown(bpp,NULL,hdr_len); + cp = (*bpp)->data; + + *cp++ = (ip->version << 4) | (hdr_len >> 2); + *cp++ = ip->tos; + cp = put16(cp,ip->length); + cp = put16(cp,ip->id); + fl_offs = ip->offset >> 3; + if(ip->flags.congest) + fl_offs |= 0x8000; + if(ip->flags.df) + fl_offs |= 0x4000; + if(ip->flags.mf) + fl_offs |= 0x2000; + + cp = put16(cp,fl_offs); + *cp++ = ip->ttl; + *cp++ = ip->protocol; + if(cflag){ + /* Use checksum from host structure */ + cp = put16(cp,ip->checksum); + } else { + /* Clear checksum for later recalculation */ + *cp++ = 0; + *cp++ = 0; + } + cp = put32(cp,ip->source); + cp = put32(cp,ip->dest); + if(ip->optlen != 0) + memcpy(cp,ip->options,min(ip->optlen,IP_MAXOPT)); + + /* If requested, recompute checksum and insert into header */ + if(!cflag) + put16(&(*bpp)->data[10],cksum(NULL,*bpp,hdr_len)); +} +/* Extract an IP header from mbuf */ +int +ntohip( +struct ip *ip, +struct mbuf **bpp +){ + int ihl; + uint16 fl_offs; + uint8 ipbuf[IPLEN]; + + if(pullup(bpp,ipbuf,IPLEN) != IPLEN) + return -1; + + ip->version = (ipbuf[0] >> 4) & 0xf; + ip->tos = ipbuf[1]; + ip->length = get16(&ipbuf[2]); + ip->id = get16(&ipbuf[4]); + fl_offs = get16(&ipbuf[6]); + ip->offset = (fl_offs & 0x1fff) << 3; + ip->flags.mf = (fl_offs & 0x2000) ? 1 : 0; + ip->flags.df = (fl_offs & 0x4000) ? 1 : 0; + ip->flags.congest = (fl_offs & 0x8000) ? 1 : 0; + ip->ttl = ipbuf[8]; + ip->protocol = ipbuf[9]; + ip->checksum = get16(&ipbuf[10]); + ip->source = get32(&ipbuf[12]); + ip->dest = get32(&ipbuf[16]); + + ihl = (ipbuf[0] & 0xf) << 2; + if(ihl < IPLEN){ + /* Bogus packet; header is too short */ + ip->optlen = 0; + return -1; + } + if ( (ip->optlen = ihl - IPLEN) != 0 ) { + if ( pullup(bpp,ip->options,ip->optlen) < ip->optlen ) + return -1; + } + return ihl; +} +/* Perform end-around-carry adjustment */ +uint16 +eac( +int32 sum /* Carries in high order 16 bits */ +){ + register uint16 csum; + + while((csum = sum >> 16) != 0) + sum = csum + (sum & 0xffffL); + return (uint16) (sum & 0xffffl); /* Chops to 16 bits */ +} +/* Checksum a mbuf chain, with optional pseudo-header */ +uint16 +cksum( +struct pseudo_header *ph, +struct mbuf *m, +uint16 len +){ + register uint16 cnt, total; + register int32 sum, csum; + register uint8 *up; + uint16 csum1; + int swap = 0; + + sum = 0l; + + /* Sum pseudo-header, if present */ + if(ph != NULL){ + sum = hiword(ph->source); + sum += loword(ph->source); + sum += hiword(ph->dest); + sum += loword(ph->dest); + sum += ph->protocol; + sum += ph->length; + } + /* Now do each mbuf on the chain */ + for(total = 0; m != NULL && total < len; m = m->next) { + cnt = min(m->cnt, len - total); + up = m->data; + csum = 0; + + if(((long)up) & 1){ + /* Handle odd leading byte */ + if(swap) + csum = *up++; + else + csum = (uint16)*up++ << 8; + cnt--; + swap = !swap; + } + if(cnt > 1){ + /* Have the primitive checksumming routine do most of + * the work. At this point, up is guaranteed to be on + * a short boundary + */ + csum1 = lcsum((unsigned short *)up, (uint16)(cnt >> 1)); + if(swap) + csum1 = (csum1 << 8) | (csum1 >> 8); + csum += csum1; + } + /* Handle odd trailing byte */ + if(cnt & 1){ + if(swap) + csum += up[--cnt]; + else + csum += (uint16)up[--cnt] << 8; + swap = !swap; + } + sum += csum; + total += m->cnt; + } + /* Do final end-around carry, complement and return */ + return (uint16)(~eac(sum) & 0xffff); +} + diff --git a/src/nos/internet/iproute.c b/src/nos/internet/iproute.c new file mode 100644 index 00000000..05ed2f92 --- /dev/null +++ b/src/nos/internet/iproute.c @@ -0,0 +1,885 @@ +/* Lower half of IP, consisting of gateway routines + * Includes routing and options processing code + * + * Copyright 1991 Phil Karn, KA9Q + */ +#include "config.h" +#include "global.h" +#include "mbuf.h" +#include "iface.h" +#include "timer.h" +#include "internet.h" +#include "ip.h" +#include "tcp.h" +#include "netuser.h" +#include "icmp.h" +#include "rip.h" +#include "trace.h" +#include "pktdrvr.h" +#include "bootp.h" +#ifdef IPSEC +#include "ipsec.h" +#endif +#include +#include "po/messages.h" + +#ifdef MODULE +#define STATIC +#else +#define STATIC static +#define MODULE_Routes +#define MODULE_route +#define MODULE_Rt_cache +#define MODULE_Rtlookups +#define MODULE_Rtchits +#define MODULE_ipinit +#define MODULE_ip_route +#define MODULE_q_pkt +#define MODULE_ip_proc +#define MODULE_ip_encap +#define MODULE_rt_add +#define MODULE_rt_drop +#define MODULE_ip_mtu +#define MODULE_locaddr +#define MODULE_rt_lookup +#define MODULE_rt_blookup +#define MODULE_rt_merge +#define MODULE_rt_timeout +#endif + +#ifdef MODULE_Routes +struct route *Routes[32][HASHMOD]; /* Routing table */ +#endif +#ifdef MODULE_route +struct route R_default = { /* Default route entry */ + NULL, NULL, + 0,0,0, + RIP_INFINITY /* Init metric to infinity */ +}; +#endif + +#ifdef MODULE_Rt_cache +/* Nick please see ip.h static */ struct rt_cache Rt_cache[HASHMOD]; +#endif +#ifdef MODULE_Rtlookups +int32 Rtlookups; +#endif +#ifdef MODULE_Rtchits +int32 Rtchits; +#endif + +STATIC int q_pkt(struct iface *iface,int32 gateway,struct ip *ip, + struct mbuf **bpp,int ckgood); + +/* Initialize modulo lookup table used by hash_ip() in pcgen.asm */ + +#ifdef MODULE_ipinit +void +ipinit(void) +{ + int i; + + for(i=0;i<256;i++) + Hashtab[i] = i % HASHMOD; +} +#endif + +/* Route an IP datagram. This is the "hopper" through which all IP datagrams, + * coming or going, must pass. + * + * "rxbroadcast" is set to indicate that the packet came in on a subnet + * broadcast. The router will kick the packet upstairs regardless of the + * IP destination address. + */ + +#ifdef MODULE_ip_route +int +ip_route( +struct iface *i_iface, /* Input interface */ +struct mbuf **bpp, /* Input packet */ +int rxbroadcast /* True if packet had link broadcast address */ +){ + struct ip ip; /* IP header being processed */ + uint16 ip_len; /* IP header length */ + uint16 length; /* Length of data portion */ + int32 gateway; /* Gateway IP address */ + register struct route *rp; /* Route table entry */ + struct iface *iface; /* Output interface, possibly forwarded */ + uint16 offset; /* Starting offset of current datagram */ + uint16 mf_flag; /* Original datagram MF flag */ + int strict = 0; /* Strict source routing flag */ + uint16 opt_len; /* Length of current option */ + uint8 *opt; /* -> beginning of current option */ + int i; + int ckgood = IP_CS_OLD; /* Has good checksum without modification */ + int pointer; /* Relative pointer index for sroute/rroute */ + + if(i_iface != NULL){ + ipInReceives++; /* Not locally generated */ + i_iface->iprecvcnt++; + } + if(len_p(*bpp) < IPLEN){ + /* The packet is shorter than a legal IP header */ + ipInHdrErrors++; + free_p(bpp); + return -1; + } + /* Sneak a peek at the IP header's IHL field to find its length */ + ip_len = ((*bpp)->data[0] & 0xf) << 2; + if(ip_len < IPLEN){ + /* The IP header length field is too small */ + ipInHdrErrors++; + free_p(bpp); + return -1; + } + if(cksum(NULL,*bpp,ip_len) != 0){ + /* Bad IP header checksum; discard */ + ipInHdrErrors++; + free_p(bpp); + return -1; + } + /* Extract IP header */ + ntohip(&ip,bpp); + + if(ip.version != IPVERSION){ + /* We can't handle this version of IP */ + ipInHdrErrors++; + free_p(bpp); + return -1; + } + /* If we're running low on memory, return a source quench */ + if(!rxbroadcast && availmem() != 0) + icmp_output(&ip,*bpp,ICMP_QUENCH,0,NULL); + + /* Process options, if any. Also compute length of secondary IP + * header in case fragmentation is needed later + */ + strict = 0; + for(i=0;i opt_len) + break; /* Route exhausted; it's for us */ + + /* Put address for next hop into destination field, + * put our address into the route field, and bump + * the pointer. We've already ensured enough space. + */ + ip.dest = get32(&opt[pointer]); + put32(&opt[pointer],locaddr(ip.dest)); + opt[2] += 4; + ckgood = IP_CS_NEW; + break; + case IP_RROUTE: /* Record route */ + if(opt_len < 3){ + /* Option is too short to be a legal rroute. + * Send an ICMP message and drop it. + */ + if(!rxbroadcast){ + union icmp_args icmp_args; + + icmp_args.pointer = IPLEN + i; + icmp_output(&ip,*bpp,ICMP_PARAM_PROB,0,&icmp_args); + } + free_p(bpp); + return -1; + } + pointer = opt[2]; + if(pointer + 4 > opt_len){ + /* Route area exhausted; send an ICMP msg */ + if(!rxbroadcast){ + union icmp_args icmp_args; + + icmp_args.pointer = IPLEN + i; + icmp_output(&ip,*bpp,ICMP_PARAM_PROB,0,&icmp_args); + } + /* Also drop if odd-sized */ + if(pointer != opt_len){ + free_p(bpp); + return -1; + } + } else { + /* Add our address to the route. + * We've already ensured there's enough space. + */ + put32(&opt[pointer],locaddr(ip.dest)); + opt[2] += 4; + ckgood = IP_CS_NEW; + } + break; + } + } +no_opt: + + /* See if it's a broadcast or addressed to us, and kick it upstairs */ + if(ismyaddr(ip.dest) != NULL || rxbroadcast || + (WantBootp && bootp_validPacket(&ip, *bpp))){ +#ifdef GWONLY + /* We're only a gateway, we have no host level protocols */ + if(!rxbroadcast) + icmp_output(&ip,*bpp,ICMP_DEST_UNREACH, + ICMP_PROT_UNREACH,NULL); + ipInUnknownProtos++; + free_p(bpp); +#else + ip_recv(i_iface,&ip,bpp,rxbroadcast,0); +#endif + return 0; + } + /* Packet is not destined to us. If it originated elsewhere, count + * it as a forwarded datagram. + */ + if(i_iface != NULL) + ipForwDatagrams++; + + /* Adjust the header checksum to allow for the modified TTL */ + ip.checksum += 0x100; + if((ip.checksum & 0xff00) == 0) + ip.checksum++; /* end-around carry */ + + /* Decrement TTL and discard if zero. We don't have to check + * rxbroadcast here because it's already been checked + */ + if(--ip.ttl == 0){ + /* Send ICMP "Time Exceeded" message */ + icmp_output(&ip,*bpp,ICMP_TIME_EXCEED,0,NULL); + ipInHdrErrors++; + free_p(bpp); + return -1; + } + /* Look up target address in routing table */ + if((rp = rt_lookup(ip.dest)) == NULL){ + /* No route exists, return unreachable message (we already + * know this can't be a broadcast) + */ + icmp_output(&ip,*bpp,ICMP_DEST_UNREACH,ICMP_HOST_UNREACH,NULL); + free_p(bpp); + ipOutNoRoutes++; + return -1; + } + rp->uses++; + + /* Check for output forwarding and divert if necessary */ + iface = rp->iface; + if(iface->forw != NULL) + iface = iface->forw; + + /* Find gateway; zero gateway in routing table means "send direct" */ + if(rp->gateway == 0) + gateway = ip.dest; + else + gateway = rp->gateway; + + if(strict && gateway != ip.dest){ + /* Strict source routing requires a direct entry + * Again, we know this isn't a broadcast + */ + icmp_output(&ip,*bpp,ICMP_DEST_UNREACH,ICMP_ROUTE_FAIL,NULL); + free_p(bpp); + ipOutNoRoutes++; + return -1; + } +#ifdef IPSEC + if(sec_output(iface,&ip,bpp) != 0){ + /* We inserted a security header, recompute hdr checksum */ + ckgood = IP_CS_NEW; /* Recompute IP checksum */ + } +#endif + if(ip.length <= iface->mtu){ + /* Datagram smaller than interface MTU; put header + * back on and send normally. + */ + return q_pkt(iface,gateway,&ip,bpp,ckgood); + } + /* Fragmentation needed */ + if(ip.flags.df){ + /* Don't Fragment set; return ICMP message and drop */ + union icmp_args icmp_args; + + icmp_args.mtu = iface->mtu; + icmp_output(&ip,*bpp,ICMP_DEST_UNREACH,ICMP_FRAG_NEEDED,&icmp_args); + free_p(bpp); + ipFragFails++; + return -1; + } + /* Create fragments */ + offset = ip.offset; /* Remember starting offset */ + mf_flag = ip.flags.mf; /* Save original MF flag */ + length = ip.length - ip_len; /* Length of data portion */ + while(length != 0){ /* As long as there's data left */ + uint16 fragsize; /* Size of this fragment's data */ + struct mbuf *f_data; /* Data portion of fragment */ + + /* After the first fragment, should remove those + * options that aren't supposed to be copied on fragmentation + */ + if(length + ip_len <= iface->mtu){ + /* Last fragment; send all that remains */ + fragsize = length; + ip.flags.mf = mf_flag; /* Pass original MF flag */ + } else { + /* More to come, so send multiple of 8 bytes */ + fragsize = (iface->mtu - ip_len) & 0xfff8; + ip.flags.mf = 1; + } + ip.length = fragsize + ip_len; + + /* Duplicate the fragment */ + dup_p(&f_data,*bpp,ip.offset-offset,fragsize); + if(f_data == NULL){ + free_p(bpp); + ipFragFails++; + return -1; + } + if(q_pkt(iface,gateway,&ip,&f_data,IP_CS_NEW) == -1){ + free_p(bpp); + ipFragFails++; + return -1; + } + ipFragCreates++; + ip.offset += fragsize; + length -= fragsize; + } + ipFragOKs++; + free_p(bpp); + return 0; +} +#endif + +/* Add an IP datagram to an interface output queue, sorting first by + * the precedence field in the IP header, and secondarily by an + * "interactive" flag set by peeking at the transport layer to see + * if the packet belongs to what appears to be an interactive session. + * A layer violation, yes, but a useful one... + */ +#ifdef MODULE_q_pkt +STATIC int +q_pkt( +struct iface *iface, +int32 gateway, +struct ip *ip, +struct mbuf **bpp, +int ckgood +){ + struct mbuf *tlast,*tbp; + struct tcp tcp; + struct qhdr qhdr,qtmp; + int i; + + iface->ipsndcnt++; + htonip(ip,bpp,ckgood); + + /* create priority field consisting of tos with 2 unused + * low order bits stripped, one of which we'll use as an + * "interactive" flag. + */ + qhdr.tos = (ip->tos & 0xfc); + qhdr.gateway = gateway; + + if(iface->outq == NULL){ + /* Queue empty, no priority decisions to be made + * This is the usual case for fast networks like Ethernet, + * so we can avoid some time-consuming stuff + */ + pushdown(bpp,&qhdr,sizeof(qhdr)); + iface->outq = *bpp; + *bpp = NULL; + } else { + /* See if this packet references a "priority" TCP port number */ + if(ip->protocol == TCP_PTCL && ip->offset == 0){ + /* Extract a copy of the TCP header */ + if(dup_p(&tbp,*bpp,sizeof(struct qhdr)+IPLEN+ + ip->optlen,TCPLEN+TCP_MAXOPT) >= TCPLEN){ + ntohtcp(&tcp,&tbp); + + for(i=0;Tcp_interact[i] != -1;i++){ + if(tcp.source == Tcp_interact[i] + || tcp.dest == Tcp_interact[i]){ + qhdr.tos |= 1; + break; + } + } + } + free_p(&tbp); + } + pushdown(bpp,&qhdr,sizeof(qhdr)); + /* Search the queue looking for the first packet with precedence + * lower than our packet + */ + tlast = NULL; + for(tbp = iface->outq;tbp != NULL;tlast=tbp,tbp = tbp->anext){ + memcpy(&qtmp,tbp->data,sizeof(qtmp)); + if(qhdr.tos > qtmp.tos){ + break; /* Add it just before tbp */ + } + } + (*bpp)->anext = tbp; + if(tlast == NULL){ + /* First on queue */ + iface->outq = *bpp; + } else { + tlast->anext = *bpp; + } + *bpp = NULL; + } + ksignal(&iface->outq,1); + if(iface->outlim != 0 && len_q(iface->outq) >= iface->outlim){ + /* Output queue is at limit; return source quench to + * the sender of a randomly selected packet on the queue + */ + rquench(iface,0); + } + return 0; +} +#endif + +/* Direct IP input routine for packets without link-level header */ +#ifdef MODULE_ip_proc +void +ip_proc( +struct iface *iface, +struct mbuf **bpp +){ + ip_route(iface,bpp,0); +} +#endif + +#ifdef MODULE_ip_encap +int +ip_encap( +struct mbuf **bpp, +struct iface *iface, +int32 gateway, +uint8 tos +){ + struct ip ip; + + dump(iface,IF_TRACE_OUT,*bpp); + iface->rawsndcnt++; + iface->lastsent = secclock(); + if(gateway == 0L){ + /* Gateway must be specified */ + ntohip(&ip,bpp); + icmp_output(&ip,*bpp,ICMP_DEST_UNREACH,ICMP_HOST_UNREACH,NULL); + free_p(bpp); + ipOutNoRoutes++; + return -1; + } + /* Encapsulate in an IP packet from us to the gateway. + * The outer source address is taken from the encap interface + * structure. This defaults to INADDR_ANY, so unless it is + * changed (with iface encap ipaddr ...), the IP address + * of the physical interface used to reach the encap gateway + * will be used. + */ + return ip_send(Encap.addr,gateway,IP_PTCL,tos,0,bpp,0,0,0); +} +#endif + +/* Add an entry to the IP routing table. Returns 0 on success, -1 on failure */ +#ifdef MODULE_rt_add +struct route * +rt_add( +int32 target, /* Target IP address prefix */ +unsigned int bits, /* Size of target address prefix in bits (0-32) */ +int32 gateway, /* Optional gateway to be reached via interface */ +struct iface *iface, /* Interface to which packet is to be routed */ +int32 metric, /* Metric for this route entry */ +int32 ttl, /* Lifetime of this route entry in sec */ +uint8 private /* Inhibit advertising this entry ? */ +){ + struct route *rp,**hp; + int i; + + if(iface == NULL) + return NULL; + + if(bits > 32) + bits = 32; /* Bulletproofing */ + + if(bits == 32 && ismyaddr(target)) + return NULL; /* Don't accept routes to ourselves */ + + /* Mask off don't-care bits of target */ + target &= ~0L << (32-bits); + + /* Encapsulated routes must specify gateway, and it can't be + * ourselves + */ + if(iface == &Encap && (gateway == 0 || ismyaddr(gateway))) + return NULL; + + for(i=0;iprev = NULL; + hp = &Routes[bits-1][hash_ip(target)]; + rp->next = *hp; + if(rp->next != NULL) + rp->next->prev = rp; + *hp = rp; + rp->uses = 0; + } + rp->target = target; + rp->bits = bits; + rp->gateway = gateway; + rp->metric = metric; + rp->iface = iface; + rp->flags.rtprivate = private; /* Should anyone be told of this route? */ + rp->timer.func = rt_timeout; /* Set the timer field */ + rp->timer.arg = (void *)rp; + set_timer(&rp->timer,ttl*1000L); + stop_timer(&rp->timer); + start_timer(&rp->timer); /* start the timer if appropriate */ + + return rp; +} +#endif + + +/* Remove an entry from the IP routing table. Returns 0 on success, -1 + * if entry was not in table. + */ +#ifdef MODULE_rt_drop +int +rt_drop( +int32 target, +unsigned int bits +){ + register struct route *rp; + int i; + + for(i=0;i 32) + bits = 32; + + /* Mask off target according to width */ + target &= ~0L << (32-bits); + + /* Search appropriate chain for existing entry */ + for(rp = Routes[bits-1][hash_ip(target)];rp != NULL;rp = rp->next){ + if(rp->target == target) + break; + } + if(rp == NULL) + return -1; /* Not in table */ + + stop_timer(&rp->timer); + if(rp->next != NULL) + rp->next->prev = rp->prev; + if(rp->prev != NULL) + rp->prev->next = rp->next; + else + Routes[bits-1][hash_ip(target)] = rp->next; + + free(rp); + return 0; +} +#endif + +/* Compute hash function on IP address */ +#if 0 /* Nick def notdef */ +static uint16 +hash_ip( +int32 addr +){ + register uint16 ret; + + ret = hiword(addr); + ret ^= loword(addr); + return (uint16)(ret % HASHMOD); +} +#endif + +#ifndef GWONLY +/* Given an IP address, return the MTU of the local interface used to + * reach that destination. This is used by TCP to avoid local fragmentation + */ + +#ifdef MODULE_ip_mtu +uint16 +ip_mtu( +int32 addr +){ + register struct route *rp; + struct iface *iface; + + rp = rt_lookup(addr); + if(rp == NULL || rp->iface == NULL) + return 0; + if(rp->iface == &Encap){ + /* Recurse to the actual hardware interface */ + return ip_mtu(rp->gateway) - IPLEN; /* no options? */ + } + iface = rp->iface; +#ifdef IPSEC + if(iface->forw != NULL) + return iface->forw->mtu - sec_overhead(addr); + else + return iface->mtu - sec_overhead(addr); +#else + if(iface->forw != NULL) + return iface->forw->mtu; + else + return iface->mtu; +#endif +} +#endif + + +/* Given a destination address, return the IP address of the local + * interface that will be used to reach it. If there is no route + * to the destination, pick the first non-loopback address. + */ +#ifdef MODULE_locaddr +int32 +locaddr(addr) +int32 addr; +{ + register struct route *rp; + struct iface *ifp; + + if(ismyaddr(addr) != NULL) + return addr; /* Loopback case */ + + if((rp = rt_lookup(addr)) != NULL) + ifp = rp->iface; + else + ifp = NULL; + + if(ifp == &Encap){ + if((rp = rt_lookup(rp->gateway)) != NULL) + ifp = rp->iface; + else + ifp = NULL; + } + if(ifp == NULL){ + /* No route currently exists, so just pick the first real + * interface and use its address + */ + for(ifp = Ifaces;ifp != NULL;ifp = ifp->next){ + if(ifp != &Loopback && ifp != &Encap) + break; + } + } + if(ifp == NULL || ifp == &Loopback) + return 0; /* No dice */ + + if(ifp->forw != NULL) + return ifp->forw->addr; + else + return ifp->addr; +} +#endif +#endif + + +/* Look up target in hash table, matching the entry having the largest number + * of leading bits in common. Return default route if not found; + * if default route not set, return NULL + */ +#ifdef MODULE_rt_lookup +struct route * +rt_lookup(target) +int32 target; +{ + register struct route *rp; + int bits; + int32 tsave; + int32 mask; + struct rt_cache *rcp; + + Rtlookups++; + /* Examine cache first */ + rcp = &Rt_cache[hash_ip(target)]; + if(target == rcp->target && (rp = rcp->route) != NULL){ + Rtchits++; + return rp; + } + tsave = target; + + mask = ~0; /* All ones */ + for(bits = 31;bits >= 0; bits--){ + target &= mask; + for(rp = Routes[bits][hash_ip(target)];rp != NULL;rp = rp->next){ + if(rp->target != target + || (rp->iface == &Encap && rp->gateway == tsave)) + continue; + /* Stash in cache and return */ + rcp->target = tsave; + rcp->route = rp; + return rp; + } + mask <<= 1; + } + if(R_default.iface != NULL){ + rcp->target = tsave; + rcp->route = &R_default; + return &R_default; + } else + return NULL; +} +#endif + +/* Search routing table for entry with specific width */ +#ifdef MODULE_rt_blookup +struct route * +rt_blookup(target,bits) +int32 target; +unsigned int bits; +{ + register struct route *rp; + + if(bits == 0){ + if(R_default.iface != NULL) + return &R_default; + else + return NULL; + } + /* Mask off target according to width */ + target &= ~0L << (32-bits); + + for(rp = Routes[bits-1][hash_ip(target)];rp != NULL;rp = rp->next){ + if(rp->target == target){ + return rp; + } + } + return NULL; +} +#endif + + +/* Scan the routing table. For each entry, see if there's a less-specific + * one that points to the same interface and gateway. If so, delete + * the more specific entry, since it is redundant. + */ +#ifdef MODULE_rt_merge +void +rt_merge( +int trace +){ + int bits,i,j; + struct route *rp,*rpnext,*rp1; + + for(bits=32;bits>0;bits--){ + for(i = 0;inext; + for(j=bits-1;j >= 0;j--){ + if((rp1 = rt_blookup(rp->target,j)) != NULL + && rp1->iface == rp->iface + && rp1->gateway == rp->gateway){ + if(trace > 1) + _printf(_("merge %s %d\n"), + inet_ntoa(rp->target), + rp->bits); + rt_drop(rp->target,rp->bits); + break; + } + } + } + } + } +} +#endif + +/* Route timeout handler. If route has already been marked for deletion + * then delete it. Otherwise mark for deletion and restart timer. + */ + +#ifdef MODULE_rt_timeout /* 1 Nick, this has moved from rip.c */ +void +rt_timeout(s) +void *s; +{ + register struct route *rp = (struct route *)s; + + stop_timer(&rp->timer); + if(rp->metric < RIP_INFINITY){ + rp->metric = RIP_INFINITY; + if(dur_timer(&rp->timer) == 0) + set_timer(&rp->timer,RIP_TTL*1000L); + /* wait 2/3 of timeout before garbage collect */ + set_timer(&rp->timer,dur_timer(&rp->timer)*2/3); + rp->timer.func = /* Nick (void *) */ rt_timeout; + rp->timer.arg = (void *)rp; + start_timer(&rp->timer); + /* Route changed; mark it for triggered update */ + rp->flags.rttrig = 1; +#ifdef RIP /* Nick */ + rip_trigger(); +#endif + } else { + rt_drop(rp->target,rp->bits); + } +} +#endif diff --git a/src/nos/internet/ipsock.c b/src/nos/internet/ipsock.c new file mode 100644 index 00000000..40123595 --- /dev/null +++ b/src/nos/internet/ipsock.c @@ -0,0 +1,170 @@ +/* ipsock.c */ + +#include /* Nick */ +#include "global.h" +#include "mbuf.h" +#include "ip.h" +#include "usock.h" +#include "socket.h" + +char Inet_eol[] = "\r\n"; + +static void rip_recv(struct raw_ip *rp); +static void autobind(struct usock *up); + +int +so_ip_sock(up,protocol) +struct usock *up; +int protocol; +{ + int s; + + s = up->index; + up->cb.rip = raw_ip(protocol,rip_recv); + up->cb.rip->user = s; + return 0; +} +int +so_ip_conn(up) +struct usock *up; +{ + if(up->name == NULL) + autobind(up); + return 0; +} +int +so_ip_recv(up,bpp,from,fromlen) +struct usock *up; +struct mbuf **bpp; +struct sockaddr *from; +int *fromlen; +{ + struct raw_ip *rip; + struct sockaddr_in *remote; + struct ip ip; + int cnt; + + while((rip = up->cb.rip) != NULL && rip->rcvq == NULL){ + if(up->noblock){ + errno = EWOULDBLOCK; + return -1; + } else if((errno = kwait(up)) != 0){ + return -1; + } + } + if(rip == NULL){ + /* Connection went away */ + errno = ENOTCONN; + return -1; + } + *bpp = dequeue(&rip->rcvq); + ntohip(&ip,bpp); + + cnt = len_p(*bpp); + if(from != NULL && fromlen != (int *)NULL && *fromlen >= SOCKSIZE){ + remote = (struct sockaddr_in *)from; + remote->sin_family = AF_INET; + remote->sin_addr.s_addr = ip.source; + remote->sin_port = 0; + *fromlen = SOCKSIZE; + } + return cnt; +} +int +so_ip_send( +struct usock *up, +struct mbuf **bpp, +struct sockaddr *to +){ + struct sockaddr_in *local,*remote; + + if(up->name == NULL) + autobind(up); + local = (struct sockaddr_in *)up->name; + if(to != NULL){ + remote = (struct sockaddr_in *)to; + } else if(up->peername != NULL) { + remote = (struct sockaddr_in *)up->peername; + } else { + free_p(bpp); + errno = ENOTCONN; + return -1; + } + ip_send(local->sin_addr.s_addr,remote->sin_addr.s_addr, + (char)up->cb.rip->protocol,0,0,bpp,0,0,0); + return 0; +} +int +so_ip_qlen(up,rtx) +struct usock *up; +int rtx; +{ + int len; + + switch(rtx){ + case 0: + len = len_q(up->cb.rip->rcvq); + break; + case 1: + len = 0; + break; + } + return len; +} +int +so_ip_close(up) +struct usock *up; +{ + del_ip(up->cb.rip); + return 0; +} +int +checkipaddr(name,namelen) +struct sockaddr *name; +int namelen; +{ + struct sockaddr_in *sock; + + sock = (struct sockaddr_in *)name; + if(sock->sin_family != AF_INET || namelen != sizeof(struct sockaddr_in)) + return -1; + return 0; +} + +/* Raw IP receive upcall routine */ +static void +rip_recv(rp) +struct raw_ip *rp; +{ + ksignal(itop(rp->user),1); + kwait(NULL); +} +/* Issue an automatic bind of a local address */ +static void +autobind(up) +struct usock *up; +{ + struct sockaddr_in local; + int s; + + s = up->index; + local.sin_family = AF_INET; + local.sin_addr.s_addr = INADDR_ANY; + local.sin_port = Lport++; + bind(s,(struct sockaddr *)&local,sizeof(struct sockaddr_in)); +} +char * +ippsocket(p) +struct sockaddr *p; +{ + struct sockaddr_in *sp; + struct socket socket; + static char buf[30]; + + sp = (struct sockaddr_in *)p; + socket.address = sp->sin_addr.s_addr; + socket.port = sp->sin_port; + strcpy(buf,pinet(&socket)); + + return buf; +} diff --git a/src/nos/internet/makefile b/src/nos/internet/makefile new file mode 100644 index 00000000..89c3988f --- /dev/null +++ b/src/nos/internet/makefile @@ -0,0 +1,10 @@ +# makefile by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +include ../make.d/host.mk +include auto.mk +$(GENERATE) + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/internet/netuser.c b/src/nos/internet/netuser.c new file mode 100644 index 00000000..c5c4f244 --- /dev/null +++ b/src/nos/internet/netuser.c @@ -0,0 +1,87 @@ +/* Miscellaneous integer and IP address format conversion subroutines + * Copyright 1991 Phil Karn, KA9Q + */ +#define LINELEN 256 +#include +#include +#include "global.h" +#include "netuser.h" + +int Net_error; + +/* Convert Internet address in ascii dotted-decimal format (44.0.0.1) to + * binary IP address + */ +int32 +aton(s) +register char *s; +{ + int32 n; + + register int i; + + n = 0; + if(s == NULL) + return 0; + for(i=24;i>=0;i -= 8){ + /* Skip any leading stuff (e.g., spaces, '[') */ + while(*s != '\0' && !isdigit(*s)) + s++; + if(*s == '\0') + break; + n |= (int32)atoi(s) << i; + if((s = strchr(s,'.')) == NULL) + break; + s++; + } + return n; +} +/* Convert an internet address (in host byte order) to a dotted decimal ascii + * string, e.g., 255.255.255.255\0 + */ +char * +inet_ntoa(a) +int32 a; +{ + static char buf[16]; + + sprintf(buf,"%u.%u.%u.%u", + hibyte(hiword(a)), + lobyte(hiword(a)), + hibyte(loword(a)), + lobyte(loword(a)) ); + return buf; +} +/* Convert hex-ascii string to long integer */ +long +htol(s) +char *s; +{ + long ret; + char c; + + ret = 0; + while((c = *s++) != '\0'){ + if(c == 'x') + continue; /* Ignore 'x', e.g., '0x' prefixes */ + if(c >= '0' && c <= '9') + ret = ret*16 + (c - '0'); + else if(c >= 'a' && c <= 'f') + ret = ret*16 + (10 + c - 'a'); + else if(c >= 'A' && c <= 'F') + ret = ret*16 + (10 + c - 'A'); + else + break; + } + return ret; +} +char * +pinet(s) +struct socket *s; +{ + static char buf[30]; + + sprintf(buf,"%s:%u",inet_ntoa(s->address),s->port); + return buf; +} + diff --git a/src/nos/internet/ping.c b/src/nos/internet/ping.c new file mode 100644 index 00000000..dc6e43a4 --- /dev/null +++ b/src/nos/internet/ping.c @@ -0,0 +1,305 @@ +/* ICMP-related user commands + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "icmp.h" +#include "mbuf.h" +#include "netuser.h" +#include "internet.h" +#include "socket.h" +#include "proc.h" +#include "session.h" +#include "commands.h" +#include "ping.h" +#include "main.h" /* for Display global variable... ZILOG only (Nick) */ +#include +#include "po/messages.h" + +static void pingtx(int s,void *ping1,void *p); +static void pinghdr(struct session *sp,struct ping *ping); +static int pingproc(int c); +static int keychar(int c); + +/* Send ICMP Echo Request packets */ +int +doping(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct sockaddr_in from; + struct icmp icmp; + struct mbuf *bp; + int32 timestamp,rtt,abserr; + int s,fromlen; + struct ping ping; + struct session *sp; + + memset(&ping,0,sizeof(ping)); + /* Allocate a session descriptor */ + if((sp = ping.sp = newsession(Cmdline,PING,1)) == NULL){ + _printf(_("Too many sessions\n")); + return 1; + } + if((ping.s = s = socket(AF_INET,SOCK_RAW,ICMP_PTCL)) == -1){ + _printf(_("Can't create socket\n")); + keywait(NULL,1); + freesession(sp); + return 1; + } + sp->inproc = keychar; /* Intercept ^C */ + if(SETSIG(EABORT)){ + keywait(NULL,1); + freesession(sp); + return 1; + } + _printf(_("Resolving %s...\n"),argv[1]); + if((ping.target = resolve(argv[1])) == 0){ + _printf(_("unknown\n")); + keywait(NULL,1); + freesession(sp); + return 1; + } + _printf(_("Pinging %s\n"),inet_ntoa(ping.target)); + sp->cb.p = &ping; + if(argc > 2) + ping.len = atoi(argv[2]); + + if(argc > 3) + ping.interval = atol(argv[3]); + + /* Optionally ping a range of IP addresses */ + if(argc > 4) + ping.incflag = 1; + + if(ping.interval != 0){ + sp->proc1 = newproc("pingtx",300,pingtx,s,&ping,NULL,0); + } else { + /* One shot ping; let echo_proc hook handle response. + * An ID of MAXINT16 will not be confused with a legal socket + * number, which is used to identify repeated pings + */ + pingem(s,ping.target,0,MAXINT16,ping.len); + close(s); +#ifdef ZILOG + kwait((void *)64); /* wait for response to be printed */ +#endif + freesession(sp); + return 0; + } + sp->inproc = pingproc; + /* Now collect the replies */ + pinghdr(sp,&ping); + for(;;){ + fromlen = sizeof(from); + if(recv_mbuf(s,&bp,0,(struct sockaddr *)&from,&fromlen) == -1) + break; + ntohicmp(&icmp,&bp); + if(icmp.type != ICMP_ECHO_REPLY || icmp.args.echo.id != s){ + /* Ignore other people's responses */ + free_p(&bp); + continue; + } + /* Get stamp */ + if(pullup(&bp,×tamp,sizeof(timestamp)) + != sizeof(timestamp)){ + /* The timestamp is missing! */ + free_p(&bp); /* Probably not necessary */ + continue; + } + free_p(&bp); + + ping.responses++; + + /* Compute round trip time, update smoothed estimates */ + rtt = msclock() - timestamp; + abserr = (rtt > ping.srtt) ? (rtt-ping.srtt) : (ping.srtt-rtt); + + if(ping.responses == 1){ + /* First response, base entire SRTT on it */ + ping.srtt = rtt; + ping.mdev = 0; + ping.maxrtt = ping.minrtt = rtt; + } else { + ping.srtt = (7*ping.srtt + rtt + 4) >> 3; + ping.mdev = (3*ping.mdev + abserr + 2) >> 2; + if(rtt > ping.maxrtt) + ping.maxrtt = rtt; + if(rtt < ping.minrtt) + ping.minrtt = rtt; + } + if((ping.responses % 20) == 0) + pinghdr(sp,&ping); + _printf(_("%10lu%10lu%5lu%8lu%8lu%8lu%8lu%8lu\n"), + ping.sent,ping.responses, + (ping.responses*100 + ping.sent/2)/ping.sent, + rtt,ping.srtt,ping.mdev,ping.maxrtt,ping.minrtt); + } + if(sp->proc1 != NULL){ + killproc(sp->proc1); + sp->proc1 = NULL; + } + close(s); + keywait(NULL,1); + freesession(sp); + return 0; +} +static int +keychar(c) +int c; +{ + if(c != CTLC) + return 1; /* Ignore all but ^C */ + + _fprintf(Current->output, _("^C\n")); + alert(Current->proc,EABORT); + return 0; +} +static void +pinghdr(sp,ping) +struct session *sp; +struct ping *ping; +{ + _printf(_(" sent rcvd % rtt avg mdev max min\n")); +} + +void +echo_proc( +int32 source, +int32 dest, +struct icmp *icmp, +struct mbuf **bpp +){ + int32 timestamp,rtt; + + if(Icmp_echo && icmp->args.echo.id == MAXINT16 + && pullup(bpp,×tamp,sizeof(timestamp)) + == sizeof(timestamp)){ + /* Compute round trip time */ + rtt = msclock() - timestamp; + _printf(_("%s: rtt %lu\n"),inet_ntoa(source),rtt); + } + free_p(bpp); +#ifdef ZILOG + ksignal((void *)64, 0); /* wake up all instances of doping() */ +#endif +} +/* Ping transmit process. Runs until killed */ +static void +pingtx(s,ping1,p) +int s; /* Socket to use */ +void *ping1; +void *p; +{ + struct ping *ping; + + ping = (struct ping *)ping1; + if(ping->incflag){ + for(;;){ + pingem(s,ping->target++,0,MAXINT16,ping->len); + ping->sent++; + ppause(ping->interval); + } + } else { + for(;;){ + pingem(s,ping->target,(uint16)ping->sent++,(uint16)s,ping->len); + ppause(ping->interval); + } + } +} + + +/* Send ICMP Echo Request packet */ +int +pingem(s,target,seq,id,len) +int s; /* Raw socket on which to send ping */ +int32 target; /* Site to be pinged */ +uint16 seq; /* ICMP Echo Request sequence number */ +uint16 id; /* ICMP Echo Request ID */ +uint16 len; /* Length of optional data field */ +{ + struct mbuf *data; + struct icmp icmp; + struct sockaddr_in to; + int32 clock; + int i; + uint8 *cp; + + clock = msclock(); + data = ambufw((uint16)(len+sizeof(clock))); + data->cnt = len+sizeof(clock); +#define counter 1 +#ifdef rnd + /* Set data field to random pattern */ + cp = data->data+sizeof(clock); + while(len-- != 0) + *cp++ = rand(); +#else +#ifdef alternate + /* Set optional data field, if any, to all 55's */ + if(len != 0) + memset(data->data+sizeof(clock),0x55,len); +#else +#ifdef counter + cp = data->data+sizeof(clock); + i = 0; + while(len-- != 0) + *cp++ = i++; +#endif +#endif +#endif + /* Insert timestamp and build ICMP header */ + memcpy(data->data,&clock,sizeof(clock)); + icmpOutEchos++; + icmpOutMsgs++; + icmp.type = ICMP_ECHO; + icmp.code = 0; + icmp.args.echo.seq = seq; + icmp.args.echo.id = id; + htonicmp(&icmp,&data); + to.sin_family = AF_INET; + to.sin_addr.s_addr = target; + send_mbuf(s,&data,0,(struct sockaddr *)&to,sizeof(to)); + return 0; +} +static int +pingproc(c) +int c; +{ + struct ping *p; + struct session *sp; + + sp = Current; + p = (struct ping *)sp->cb.p; + + if(p->s == -1) + return 1; /* Shutting down, let keywait have it */ + switch(c){ + case '\033': + case 'Q': + case 'q': + case 3: /* ctl-c - quit */ + alert(sp->proc,EABORT); + if(Current->proc1 != NULL){ + killproc(sp->proc1); + sp->proc1 = NULL; + } + shutdown(p->s,2); + p->s = -1; + break; + case ' ': /* Toggle pinger */ + if(sp->proc1 != NULL){ + killproc(sp->proc1); + sp->proc1 = NULL; + _fprintf(sp->output, _("Pinging suspended, %lu sent\n"),p->sent); + } else { + p->sent = p->responses = 0; + sp->proc1 = newproc("pingtx",300,pingtx,p->s,p,NULL,0); + _fprintf(sp->output, _("Pinging resumed\n")); + } + break; + } + return 0; +} + diff --git a/src/nos/internet/rip.c b/src/nos/internet/rip.c new file mode 100644 index 00000000..7c0b9972 --- /dev/null +++ b/src/nos/internet/rip.c @@ -0,0 +1,690 @@ +/* This file contains code to implement the Routing Information Protocol (RIP) + * and is derived from 4.2BSD code. Mike Karels of Berkeley has stated on + * TCP-IP that the code may be freely used as long as UC Berkeley is + * credited. (Well, here's some credit :-). AGB 4-28-88 + + * Further documentation on the RIP protocol is now available in Charles + * Hedrick's draft RFC, as yet unnumbered. AGB 5-6-88 + * + * The RIP RFC has now been issued as RFC1058. AGB 7-23-88 + * + * Code gutted and substantially rewritten. KA9Q 9/89 + */ +#include "global.h" +#include "mbuf.h" +#include "netuser.h" +#include "udp.h" +#include "timer.h" +#include "iface.h" +#include "ip.h" +#include "internet.h" +#include "rip.h" +#include "arp.h" +#include +#include "po/messages.h" + +struct rip_stat Rip_stat; +uint16 Rip_trace; +int Rip_merge; +struct rip_list *Rip_list; +struct udp_cb *Rip_cb; + +struct rip_refuse *Rip_refuse; + +static void rip_rx(struct iface *iface,struct udp_cb *sock,int cnt); +static void proc_rip(struct iface *iface,int32 gateway, + struct rip_route *ep,int32 ttl); +static uint8 *putheader(uint8 *cp,enum ripcmd command,uint8 version); +static uint8 *putentry(uint8 *cp,uint16 fam,int32 target,int32 metric); +static void rip_shout(void *p); +static void send_routes(int32 dest,uint16 port,int split,int trig, + int us); + +/* Send RIP CMD_RESPONSE packet(s) to the specified rip_list entry */ +static void +rip_shout(p) +void *p; +{ + register struct rip_list *rl; + + rl = (struct rip_list *)p; + stop_timer(&rl->rip_time); + send_routes(rl->dest,RIP_PORT,rl->flags.rip_split,0,rl->flags.rip_us); + set_timer(&rl->rip_time,rl->interval*1000L); + start_timer(&rl->rip_time); +} + +/* Send the routing table. */ +static void +send_routes(dest,port,split,trig,us) +int32 dest; /* IP destination address to send to */ +uint16 port; +int split; /* Do split horizon? */ +int trig; /* Send only triggered updates? */ +int us; /* Include our address in update */ +{ + uint8 *cp; + int i,bits,numroutes,maxroutes; + uint16 pktsize; + struct mbuf *bp; + struct route *rp; + struct socket lsock,fsock; + struct iface *iface; + + if((rp = rt_lookup(dest)) == NULL) + return; /* No route exists, can't do it */ + iface = rp->iface; + + /* Compute maximum packet size and number of routes we can send */ + pktsize = ip_mtu(dest) - IPLEN; + pktsize = min(pktsize,MAXRIPPACKET); + maxroutes = (pktsize - RIPHEADER) / RIPROUTE; + + lsock.address = INADDR_ANY; + lsock.port = RIP_PORT; + fsock.address = dest; + fsock.port = port; + + /* Allocate space for a full size RIP packet and generate header */ + if((bp = alloc_mbuf(pktsize)) == NULL) + return; + numroutes = 0; + cp = putheader(bp->data,RIPCMD_RESPONSE,RIPVERSION); + + /* Emit route to ourselves, if requested */ + if(us){ + cp = putentry(cp,RIP_IPFAM,iface->addr,1); + numroutes++; + } + /* Emit default route, if appropriate */ + if(R_default.iface != NULL && !R_default.flags.rtprivate + && (!trig || R_default.flags.rttrig)){ + if(!split || iface != R_default.iface){ + cp = putentry(cp,RIP_IPFAM,0,R_default.metric); + numroutes++; + } else if(trig){ + cp = putentry(cp,RIP_IPFAM,0,RIP_INFINITY); + numroutes++; + } + } + for(bits=0;bits<32;bits++){ + for(i=0;inext){ + if(rp->flags.rtprivate + || (trig && !rp->flags.rttrig)) + continue; + + if(numroutes >= maxroutes){ + /* Packet full, flush and make another */ + bp->cnt = RIPHEADER + numroutes * RIPROUTE; + send_udp(&lsock,&fsock,0,0,&bp,bp->cnt,0,0); + Rip_stat.output++; + if((bp = alloc_mbuf(pktsize)) == NULL) + return; + numroutes = 0; + cp = putheader(bp->data,RIPCMD_RESPONSE,RIPVERSION); + } + if(!split || iface != rp->iface){ + cp = putentry(cp,RIP_IPFAM,rp->target,rp->metric+1); + numroutes++; + } else if(trig){ + cp = putentry(cp,RIP_IPFAM,rp->target,RIP_INFINITY); + numroutes++; + } + } + } + } + if(numroutes != 0){ + bp->cnt = RIPHEADER + numroutes * RIPROUTE; + send_udp(&lsock,&fsock,0,0,&bp,bp->cnt,0,0); + Rip_stat.output++; + } else { + free_p(&bp); + } +} +/* Add an entry to the rip broadcast list */ +int +rip_add(dest,interval,split,us) +int32 dest; +int32 interval; +int split,us; +{ + register struct rip_list *rl; + struct route *rp; + + if((rp = rt_lookup(dest)) == NULL){ + _printf(_("%s is unreachable\n"),inet_ntoa(dest)); + return 1; + } + for(rl = Rip_list; rl != NULL; rl = rl->next) + if(rl->dest == dest) + break; + + if(rl == NULL){ + /* get a chunk of memory for the rip interface descriptor */ + rl = (struct rip_list *)callocw(1,sizeof(struct rip_list)); + + /* tack this record on as the first in the list */ + rl->next = Rip_list; + if(rl->next != NULL) + rl->next->prev = rl; + Rip_list = rl; + rl->dest = dest; + } + /* and the interface ptr, tick interval and flags */ + rl->iface = rp->iface; + rl->interval = interval; + rl->flags.rip_split = split; + rl->flags.rip_us = us; + + /* set up the timer stuff */ + rl->rip_time.func = rip_shout; + rl->rip_time.arg = rl; + /* This will initialize the timer and do an immediate broadcast */ + rip_shout(rl); + return 0; +} + +/* add a gateway to the rip_refuse list which allows us to ignore their + * advertisements +*/ +int +riprefadd(gateway) +int32 gateway; +{ + register struct rip_refuse *rl; + + for(rl = Rip_refuse; rl != NULL; rl = rl->next) + if(rl->target == gateway) + return 0; /* Already in table */ + + + /* get a chunk of memory for the rip interface descriptor */ + rl = (struct rip_refuse *)callocw(1,sizeof(struct rip_refuse)); + + /* tack this record on as the first in the list */ + rl->next = Rip_refuse; + if(rl->next != NULL) + rl->next->prev = rl; + Rip_refuse = rl; + + /* fill in the gateway to ignore */ + rl->target = gateway; + return 0; +} + +/* drop a RIP target */ +int +rip_drop(dest) +int32 dest; +{ + register struct rip_list *rl; + + for(rl = Rip_list; rl != NULL; rl = rl->next) + if(rl->dest == dest) + break; + + /* leave if we didn't find it */ + if(rl == NULL) + return 0; + + /* stop the timer */ + stop_timer(&rl->rip_time); + + /* Unlink from list */ + if(rl->next != NULL) + rl->next->prev = rl->prev; + if(rl->prev != NULL) + rl->prev->next = rl->next; + else + Rip_list = rl->next; + + /* and deallocate the descriptor memory */ + free(rl); + return 0; +} + +/* drop a RIP-refuse target from the rip_refuse list */ +int +riprefdrop(gateway) +int32 gateway; +{ + register struct rip_refuse *rl; + + for(rl = Rip_refuse; rl != NULL; rl = rl->next) + if(rl->target == gateway) + break; + + /* leave if we didn't find it */ + if(rl == NULL) + return 0; + + /* Unlink from list */ + if(rl->next != NULL) + rl->next->prev = rl->prev; + if(rl->prev != NULL) + rl->prev->next = rl->next; + else + Rip_refuse = rl->next; + + /* and deallocate the structure memory */ + free(rl); + return 0; +} + +/* function to output a RIP CMD_RESPONSE packet for the rip_trigger list */ +void +rip_trigger() +{ + register struct rip_list *rl; + int bits,i; + struct route *rp; + + for(rl=Rip_list;rl != NULL;rl = rl->next){ + send_routes(rl->dest,RIP_PORT,rl->flags.rip_split,1,0); + } + /* Clear the trigger list */ + R_default.flags.rttrig = 0; + for(bits=0;bits<32;bits++){ + for(i=0;inext){ + rp->flags.rttrig = 0; + } + } + } +} + +/* Start RIP agent listening at local RIP UDP port */ +int +rip_init() +{ + struct socket lsock; + + lsock.address = INADDR_ANY; + lsock.port = RIP_PORT; + + if(Rip_cb == NULL) + Rip_cb = open_udp(&lsock,rip_rx); + + return 0; +} + +/* Process RIP input received from 'interface'. */ +static void +rip_rx(iface,sock,cnt) +struct iface *iface; +struct udp_cb *sock; +int cnt; +{ + struct mbuf *bp; + struct socket fsock; + enum ripcmd cmd; + register struct rip_refuse *rfl; + struct rip_route entry; + struct route *rp; + struct rip_list *rl; + int32 ttl; + + /* receive the RIP packet */ + recv_udp(sock,&fsock,&bp); + + /* increment the rcvd cnt */ + Rip_stat.rcvd++; + + /* check the gateway of this packet against the rip_refuse list and + * discard it if a match is found + */ + for(rfl=Rip_refuse;rfl != NULL;rfl = rfl->next){ + if(fsock.address == rfl->target){ + Rip_stat.refusals++; + if(Rip_trace > 1) + _printf(_("RIP refused from %s\n"), + inet_ntoa(fsock.address)); + free_p(&bp); + return; + } + } + cmd = PULLCHAR(&bp); + /* Check the version of the frame */ + if(PULLCHAR(&bp) != RIPVERSION){ + free_p(&bp); + Rip_stat.version++; + return; + } + switch(cmd){ + case RIPCMD_RESPONSE: + if(Rip_trace > 1) + _printf(_("RIPCMD_RESPONSE from %s \n"),inet_ntoa(fsock.address)); + + Rip_stat.response++; + /* See if this interface is on our broadcast list; if so, + * use its interval to calculate entry lifetimes. Otherwise, + * use default + */ + ttl = RIP_TTL; + for(rl=Rip_list; rl != NULL; rl = rl->next){ + if(rl->iface == iface){ + ttl = rl->interval * 4; + break; + } + } + (void)pull16(&bp); /* remove one word of padding */ + while(len_p(bp) >= RIPROUTE){ + pullentry(&entry,&bp); + proc_rip(iface,fsock.address,&entry,ttl); + } + /* If we can't reach the sender of this update, or if + * our existing route is not through the interface we + * got this update on, add him as a host specific entry + */ + if((rp = rt_blookup(fsock.address,32)) != NULL){ + /* Host-specific route already exists, refresh it */ + start_timer(&rp->timer); + } else if((rp = rt_lookup(fsock.address)) == NULL + || rp->iface != iface){ + entry.addr_fam = RIP_IPFAM; + entry.target = fsock.address; + entry.metric = 0; /* will get incremented to 1 */ + proc_rip(iface,fsock.address,&entry,ttl); + } + if(Rip_merge) + rt_merge(Rip_trace); + rip_trigger(); + break; + case RIPCMD_REQUEST: + if(Rip_trace > 1) + _printf(_("RIPCMD_REQUEST\n")); + + Rip_stat.request++; + /* For now, just send the whole table with split horizon + * enabled when the source port is RIP_PORT, and send + * the whole table with split horizon disable when another + * source port is used. This should be replaced with a more + * complete implementation that checks for non-global requests + */ + if(fsock.port == RIP_PORT) + send_routes(fsock.address,fsock.port,1,0,1); + else + send_routes(fsock.address,fsock.port,0,0,1); + break; + default: + if(Rip_trace > 1) + _printf(_("RIPCMD: Unknown Type\n")); + + Rip_stat.unknown++; + break; + } /* switch */ + free_p(&bp); +} +/* Apply a set of heuristics for determining the number of significant bits + * (i.e., the address mask) in the target address. Needed since RIP doesn't + * include the address mask for each entry. + */ +int +nbits(target) +int32 target; +{ + int bits; + + if(target == 0) + return 0; /* Special case: 0.0.0.0 is the default route */ + + /* Check the host-part bytes of + * the address to check for byte-wide zeros + * which we'll consider to be subnet routes. + * e.g. 44.80.0.0 will be considered to be equal to 44.80/16 + * whereas 44.80.1.0 will be considered to be 44.80.1/24 + */ + switch (hibyte(hiword(target)) >> 6) { + case 3: /* Class C address */ + /*is it a host address ? i.e. are there any 1's in the + * host part ? + */ + if(target & 0xff) + bits = 32; + else + bits = 24; + break; + case 2: /* Class B address */ + if(target & 0xff) + bits = 32; + else if(target & 0xff00) + bits = 24; + else + bits = 16; + break; + case 0: /* Class A address */ + case 1: + if(target & 0xff) + bits = 32; + else if(target & 0xff00) + bits = 24; + else if(target & 0xff0000) + bits = 16; + else + bits = 8; + } + + return bits; +} +/* Remove and process a RIP response entry from a packet */ +static void +proc_rip(iface,gateway,ep,ttl) +struct iface *iface; +int32 gateway; +register struct rip_route *ep; +int32 ttl; +{ + unsigned int bits; + register struct route *rp; + int add = 0; /* action flags */ + int drop = 0; + int trigger = 0; + + if(ep->addr_fam != RIP_IPFAM) { + /* Skip non-IP addresses */ + if(Rip_trace > 1) + _printf(_("RIP_rx: Not an IP RIP packet !\n")); + Rip_stat.addr_family++; + return; + } + /* Guess at the mask, since it's not explicit */ + bits = nbits(ep->target); + + /* Don't ever add a route to myself through somebody! */ + if(bits == 32 && ismyaddr(ep->target) != NULL){ + if(Rip_trace > 1){ + _printf(_("route to self: %s %ld\n"), + inet_ntoa(ep->target),ep->metric); + } + return; + } + /* Find existing entry, if any */ + rp = rt_blookup(ep->target,bits); + + /* Don't touch private routes */ + if(rp != NULL && rp->flags.rtprivate) + return; + + if(rp == NULL){ + if(ep->metric < RIP_INFINITY){ + /* New route; add it and trigger an update */ + add++; + trigger++; + } + } else if(rp->metric == RIP_INFINITY){ + /* Route is in hold-down; ignore this guy */ + if(Rip_trace > 0){ + _printf(_("ignored (hold-down): %s %lu\n"), + inet_ntoa(ep->target),ep->metric); + } + } else if(rp->gateway == gateway && rp->iface == iface){ + /* This is the gateway for the entry we already have; + * restart the timer + */ + set_timer(&rp->timer,ttl*1000L); + start_timer(&rp->timer); + if(rp->metric != ep->metric){ + /* Metric has changed. Update it and trigger an + * update. If route has become unavailable, start + * the hold-down timeout. + */ + if(Rip_trace){ + _printf(_("metric change: %s %lu -> %lu\n"), + inet_ntoa(ep->target),rp->metric,ep->metric); + } + if(ep->metric == RIP_INFINITY) + rt_timeout(rp); /* Enter hold-down timeout */ + else + rp->metric = ep->metric; + trigger++; + } + } else { + /* Entry is from a different gateway than the current route */ + if(ep->metric < rp->metric){ + /* Switch to a new gateway */ + if(Rip_trace > 0){ + _printf(_("metric better: %s %lu\n"), + inet_ntoa(ep->target),ep->metric); + } + drop++; + add++; + trigger++; + } else { + /* Metric is no better, stay with current route */ + if(Rip_trace > 1){ + _printf(_("metric not better: %s %lu\n"), + inet_ntoa(ep->target),ep->metric); + } + } + } + if(drop){ + /* Switching to a better gateway; delete old entry */ + if(Rip_trace){ + _printf(_("route drop [%s]/%u"), + inet_ntoa(ep->target),bits); + if(rp != NULL) + _printf(_(" %s %s %lu"),rp->iface->name, + inet_ntoa(rp->gateway),rp->metric); + _printf(_("\n")); + } + rt_drop(ep->target,bits); + } + if(add){ + /* Add a new entry */ + if(Rip_trace > 0){ + _printf(_("route add [%s]/%u %s"),inet_ntoa(ep->target), + bits,iface->name); + _printf(_(" [%s] %u\n"),inet_ntoa(gateway), + (int)ep->metric); + } + rp = rt_add(ep->target,(unsigned) bits,gateway,iface, + (int) ep->metric,ttl,0); + } + /* If the route changed, mark it for a triggered update */ + if(trigger){ + rp->flags.rttrig = 1; + } +} +/* Send a RIP request packet to the specified destination */ +int +ripreq(dest,replyport) +int32 dest; +uint16 replyport; +{ + struct mbuf *bp; + struct socket lsock,fsock; + uint8 *cp; + + lsock.address = INADDR_ANY; + lsock.port = replyport; + + /* if we were given a valid dest addr, ask it (the routers on that net) + * for a default gateway + */ + if(dest == 0) + return 0; + + fsock.address = dest; + fsock.port = RIP_PORT; + + /* Send out one RIP Request packet as a broadcast to 'dest' */ + if((bp = alloc_mbuf(RIPHEADER + RIPROUTE)) == NULL) + return -1; + + cp = putheader(bp->data,RIPCMD_REQUEST,RIPVERSION); + cp = putentry(cp,0,0L,RIP_INFINITY); + bp->cnt = RIPHEADER + RIPROUTE; + send_udp(&lsock, &fsock,0,0,&bp,bp->cnt,0,0); + Rip_stat.output++; + return 0; +} +void +pullentry(ep,bpp) +register struct rip_route *ep; +struct mbuf **bpp; +{ + ep->addr_fam = pull16(bpp); + (void)pull16(bpp); + ep->target = pull32(bpp); + (void)pull32(bpp); + (void)pull32(bpp); + ep->metric = pull32(bpp); +} + +/* Write the header of a RIP packet */ +static uint8 * +putheader(cp,command,version) +register uint8 *cp; +enum ripcmd command; +uint8 version; +{ + *cp++ = command; + *cp++ = version; + return put16(cp,0); +} + +/* Write a single entry into a rip packet */ +static uint8 * +putentry(cp,fam,target,metric) +register uint8 *cp; +uint16 fam; +int32 target; +int32 metric; +{ + cp = put16(cp,fam); + cp = put16(cp,0); + cp = put32(cp,target); + cp = put32(cp,0L); + cp = put32(cp,0L); + return put32(cp,metric); +} + +#if 0 /* Nick, this has moved to iproute.c */ +/* Route timeout handler. If route has already been marked for deletion + * then delete it. Otherwise mark for deletion and restart timer. + */ +void +rt_timeout(s) +void *s; +{ + register struct route *rp = (struct route *)s; + + stop_timer(&rp->timer); + if(rp->metric < RIP_INFINITY){ + rp->metric = RIP_INFINITY; + if(dur_timer(&rp->timer) == 0) + set_timer(&rp->timer,RIP_TTL*1000L); + /* wait 2/3 of timeout before garbage collect */ + set_timer(&rp->timer,dur_timer(&rp->timer)*2/3); + rp->timer.func = /* Nick (void *) */ rt_timeout; + rp->timer.arg = (void *)rp; + start_timer(&rp->timer); + /* Route changed; mark it for triggered update */ + rp->flags.rttrig = 1; + rip_trigger(); + } else { + rt_drop(rp->target,rp->bits); + } +} +#endif diff --git a/src/nos/internet/ripcmd.c b/src/nos/internet/ripcmd.c new file mode 100644 index 00000000..5f24e5ed --- /dev/null +++ b/src/nos/internet/ripcmd.c @@ -0,0 +1,170 @@ +/* RIP-related user commands + * Al Broscious, N3FCT + * Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "netuser.h" +#include "internet.h" +#include "cmdparse.h" +#include "timer.h" +#include "iface.h" +#include "udp.h" +#include "rip.h" +#include "commands.h" +#include +#include "po/messages.h" + +struct cmds Ripcmds[] = { + _("accept"), dodroprefuse, 0, 2, + _("rip accept "), + _("add"), doripadd, 0, 3, + _("rip add []"), + _("drop"), doripdrop, 0, 2, + _("rip drop "), + _("merge"), doripmerge, 0, 0, NULL, + _("refuse"), doaddrefuse, 0, 2, + _("rip refuse "), + _("request"), doripreq, 0, 2, NULL, + _("status"), doripstat, 0, 0, NULL, + _("trace"), doriptrace, 0, 0, NULL, + NULL, +}; + +int +dorip(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Ripcmds,argc,argv,p); +} + +/* Add an entry to the RIP output list */ +int +doripadd(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + int split = 1; + int us = 0; + + if(argc > 3) + split = atoi(argv[3]); + if(argc > 4) + us = atoi(argv[4]); + + return rip_add(resolve(argv[1]),atol(argv[2]),split,us); +} + +/* Add an entry to the RIP refuse list */ +int +doaddrefuse(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return riprefadd(resolve(argv[1])); +} + +/* Drop an entry from the RIP output list */ +int +doripdrop(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return rip_drop(resolve(argv[1])); +} + +/* Drop an entry from the RIP refuse list */ +int +dodroprefuse(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return riprefdrop(resolve(argv[1])); +} + +/* Initialize the RIP listener */ +int +doripinit(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return rip_init(); +} +int +doripstop(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + del_udp(Rip_cb); + Rip_cb = NULL; + return 0; +} +int +doripreq(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + uint16 replyport; + + if(argc > 2) + replyport = atoi(argv[2]); + else + replyport = RIP_PORT; + return ripreq(resolve(argv[1]),replyport); +} +/* Dump RIP statistics */ +int +doripstat(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct rip_list *rl; + struct rip_refuse *rfl; + + _printf(_("RIP: sent %lu rcvd %lu reqst %lu resp %lu unk %lu refused %lu\n"), + Rip_stat.output, Rip_stat.rcvd, Rip_stat.request, Rip_stat.response, + Rip_stat.unknown,Rip_stat.refusals); + if(Rip_list != NULL){ + _printf(_("Active RIP output interfaces:\n")); + _printf(_("Dest Addr Interval Split\n")); + for(rl=Rip_list; rl != NULL; rl = rl->next){ + _printf(_("%-16s%-9lu%-6u\n"),inet_ntoa(rl->dest), + rl->interval,rl->flags.rip_split); + } + } + if(Rip_refuse != NULL){ + _printf(_("Refusing announcements from gateways:\n")); + for(rfl=Rip_refuse; rfl != NULL;rfl = rfl->next){ + _printf(_("%s\n"),inet_ntoa(rfl->target)); + } + } + return 0; +} + +int +doriptrace(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&Rip_trace, _("RIP tracing"), argc, argv); +} +int +doripmerge(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Rip_merge, _("RIP merging"), argc, argv); +} diff --git a/src/nos/internet/sim.c b/src/nos/internet/sim.c new file mode 100644 index 00000000..a5310846 --- /dev/null +++ b/src/nos/internet/sim.c @@ -0,0 +1,88 @@ +/* Simulate a network path by introducing delay (propagation and queuing), + * bandwidth (delay as a function of packet size), duplication and loss. + * Intended for use with the loopback interface + */ +#include "global.h" +#include "mbuf.h" +#include "timer.h" +#include "iface.h" +#include "ip.h" +#include +#include "po/messages.h" + +static void simfunc(void *p); + +struct pkt { + struct timer timer; + struct mbuf *bp; +}; + +struct { + int32 fixed; /* Fixed prop delay, ms */ + int32 xmit; /* Xmit time, ms/byte */ + int32 maxq; /* Max queueing delay, ms */ + int pdup; /* Probability of duplication, *0.1% */ + int ploss; /* Probability of loss, *0.1% */ +} Simctl = { + 0,0,1000,0,0 }; +int +dosim(argc,argv,p) +int argc; +char *argv; +void *p; +{ + return 0; +} + +void +net_sim(bp) +struct mbuf *bp; +{ + struct pkt *pkt; + int32 delay; + + if(urandom(1000) < Simctl.ploss){ + if(Loopback.trfp) + _fprintf(Loopback.trfp, _("packet lost\n")); + free_p(&bp); /* Packet is lost */ + return; + } + if(urandom(1000) < Simctl.pdup){ + struct mbuf *dbp; + if(Loopback.trfp) + _fprintf(Loopback.trfp, _("packet duped\n")); + dup_p(&dbp,bp,0,len_p(bp)); + net_sim(dbp); /* Packet is duplicated */ + } + /* The simulated network delay for this packet is the sum + * of three factors: a fixed propagation delay, a transmission + * delay proportional to the packet size, and an evenly + * distributed random queuing delay up to some maximum + */ + delay = Simctl.fixed + len_p(bp)*Simctl.xmit + urandom(Simctl.maxq); + if(Loopback.trfp) + _fprintf(Loopback.trfp, _("packet delayed %ld ms\n"),delay); + if(delay == 0){ + /* No delay, return immediately */ + net_route(&Loopback,&bp); + return; + } + pkt = (struct pkt *)mallocw(sizeof(struct pkt)); + pkt->bp = bp; + set_timer(&pkt->timer,delay); + pkt->timer.func = simfunc; + pkt->timer.arg = pkt; + start_timer(&pkt->timer); +} +/* Put packet on hopper after delay */ +static void +simfunc(p) +void *p; +{ + struct pkt *pkt = (struct pkt *)p; + struct mbuf *bp = pkt->bp; + + stop_timer(&pkt->timer); /* shouldn't be necessary */ + net_route(&Loopback,&bp); + free(pkt); +} diff --git a/src/nos/internet/tcpcmd.c b/src/nos/internet/tcpcmd.c new file mode 100644 index 00000000..b68d8b23 --- /dev/null +++ b/src/nos/internet/tcpcmd.c @@ -0,0 +1,369 @@ +/* TCP control and status routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "timer.h" +#include "mbuf.h" +#include "netuser.h" +#include "internet.h" +#include "tcp.h" +#include "cmdparse.h" +#include "commands.h" +#include "socket.h" +#include "session.h" +#include +#include "po/messages.h" + +int Tcp_tstamps = 1; + +static int doirtt(int argc,char *argv[],void *p); +static int domss(int argc,char *argv[],void *p); +static int dortt(int argc,char *argv[],void *p); +static int dotcpkick(int argc,char *argv[],void *p); +static int dotcpreset(int argc,char *argv[],void *p); +static int dotcpstat(int argc,char *argv[],void *p); +static int dotcptr(int argc,char *argv[],void *p); +static int dowindow(int argc,char *argv[],void *p); +static int dosyndata(int argc,char *argv[],void *p); +static int dotimestamps(int argc,char *argv[],void *p); +static int tstat(void); +static int keychar(int c); +static void tcprepstat(int interval,void *p1,void *p2); + +/* TCP subcommand table */ +static struct cmds Tcpcmds[] = { + N_("irtt"), doirtt, 0, 0, NULL, + N_("kick"), dotcpkick, 0, 2, N_("tcp kick "), + N_("mss"), domss, 0, 0, NULL, + N_("reset"), dotcpreset, 0, 2, N_("tcp reset "), + N_("rtt"), dortt, 0, 3, N_("tcp rtt "), + N_("status"), dotcpstat, 0, 0, N_("tcp stat []"), + N_("syndata"), dosyndata, 0, 0, NULL, + N_("timestamps"), dotimestamps, 0, 0, NULL, + N_("trace"), dotcptr, 0, 0, NULL, + N_("window"), dowindow, 0, 0, NULL, + NULL, +}; +int +dotcp(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Tcpcmds,argc,argv,p); +} +static int +dotcptr(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Tcp_trace, _("TCP state tracing"), argc, argv); +} +static int +dotimestamps(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Tcp_tstamps, _("TCP timestamps"), argc, argv); +} + +/* Eliminate a TCP connection */ +static int +dotcpreset(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct tcb *tcb; + + tcb = (struct tcb *)ltop(htol(argv[1])); + if(!tcpval(tcb)){ + printf(Notval); + return 1; + } + reset_tcp(tcb); + return 0; +} + +/* Set initial round trip time for new connections */ +static int +doirtt(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + struct tcp_rtt *tp; + + setlong(&Tcp_irtt, _("TCP default irtt"), argc, argv); + if(argc < 2){ + for(tp = &Tcp_rtt[0];tp < &Tcp_rtt[RTTCACHE];tp++){ + if(tp->addr != 0){ + _printf(_("%s: srtt %lu mdev %lu\n"), + inet_ntoa(tp->addr), + tp->srtt,tp->mdev); + } + } + } + return 0; +} + +/* Set smoothed round trip time for specified TCB */ +static int +dortt(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct tcb *tcb; + + tcb = (struct tcb *)ltop(htol(argv[1])); + if(!tcpval(tcb)){ + printf(Notval); + return 1; + } + tcb->srtt = atol(argv[2]); + return 0; +} + +/* Force a retransmission */ +static int +dotcpkick(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct tcb *tcb; + + tcb = (struct tcb *)ltop(htol(argv[1])); + if(kick_tcp(tcb) == -1){ + printf(Notval); + return 1; + } + return 0; +} + +/* Set default maximum segment size */ +static int +domss(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&Tcp_mss, _("TCP MSS"), argc, argv); +} + +/* Set default window size */ +static int +dowindow(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setshort(&Tcp_window, _("TCP window"), argc, argv); +} + +static int +dosyndata(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return setbool(&Tcp_syndata, _("TCP syn+data piggybacking"), + argc, argv); +} + + +/* Display status of TCBs */ +static int +dotcpstat(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct tcb *tcb; + int32 interval = 0; + + if(argc < 2){ + tstat(); + return 0; + } + if(argc > 2) + interval = atol(argv[2]); + + tcb = (struct tcb *)ltop(htol(argv[1])); + if(!tcpval(tcb)){ + printf(Notval); + return 1; + } + if(interval == 0){ + st_tcp(tcb); + return 0; + } + newproc("rep tcp stat",512,tcprepstat,interval,(void *)tcb,NULL,0); + return 0; +} + +static void +tcprepstat(interval,p1,p2) +int interval; +void *p1; +void *p2; +{ + struct tcb *tcb = (struct tcb *)p1; + struct session *sp; + + if((sp = newsession(Cmdline,REPEAT,1)) == NULL){ + _printf(_("Too many sessions\n")); + return; + } + sp->inproc = keychar; /* Intercept ^C */ + while(sp->inproc == keychar){ /* ^C will clear sp->inproc */ + _printf(_("%c[2J"),ESC); /* Clear screen */ + st_tcp(tcb); + if(tcb->state == TCP_CLOSED || ppause(interval) == -1) + break; + } + keywait(NULL,1); + freesession(sp); +} + +/* Dump TCP stats and summary of all TCBs +/* &TCB Rcv-Q Snd-Q Local socket Remote socket State + * 1234 0 0 xxx.xxx.xxx.xxx:xxxxx xxx.xxx.xxx.xxx:xxxxx Established + */ +static int +tstat() +{ + register int i; + register struct tcb *tcb; + int j; + + for(j=i=1;i<=NUMTCPMIB;i++){ + if(Tcp_mib[i].name == NULL) + continue; + _printf(_("(%2u)%-20s%10lu"),i,Tcp_mib[i].name, + Tcp_mib[i].value.integer); + if(j++ % 2) + _printf(_(" ")); + else + _printf(_("\n")); + } + if((j % 2) == 0) + _printf(_("\n")); + + _printf(_("&TCB Rcv-Q Snd-Q Local socket Remote socket State\n")); + for(tcb=Tcbs;tcb != NULL;tcb = tcb->next){ + _printf(_("%9p%6u%6u "),tcb,tcb->rcvcnt,tcb->sndcnt); + _printf(_("%-23s"),pinet(&tcb->conn.local)); + _printf(_("%-23s"),pinet(&tcb->conn.remote)); + _printf(_("%-s"),Tcpstates[tcb->state]); + if(tcb->state == TCP_LISTEN && tcb->flags.clone) + _printf(_(" (S)")); + _printf(_("\n")); + } + return 0; +} +/* Dump a TCP control block in detail */ +void +st_tcp(tcb) +struct tcb *tcb; +{ + int32 sent,recvd; + + if(tcb == NULL) + return; + /* Compute total data sent and received; take out SYN and FIN */ + sent = tcb->snd.una - tcb->iss; /* Acknowledged data only */ + recvd = tcb->rcv.nxt - tcb->irs; + switch(tcb->state){ + case TCP_LISTEN: + case TCP_SYN_SENT: /* Nothing received or acked yet */ + sent = recvd = 0; + break; + case TCP_SYN_RECEIVED: + recvd--; /* Got SYN, no data acked yet */ + sent = 0; + break; + case TCP_ESTABLISHED: /* Got and sent SYN */ + case TCP_FINWAIT1: /* FIN not acked yet */ + sent--; + recvd--; + break; + case TCP_FINWAIT2: /* Our SYN and FIN both acked */ + sent -= 2; + recvd--; + break; + case TCP_CLOSE_WAIT: /* Got SYN and FIN, our FIN not yet acked */ + case TCP_CLOSING: + case TCP_LAST_ACK: + sent--; + recvd -= 2; + break; + case TCP_TIME_WAIT: /* Sent and received SYN/FIN, all acked */ + sent -= 2; + recvd -= 2; + break; + } + _printf(_("Local: %s"),pinet(&tcb->conn.local)); + _printf(_(" Remote: %s"),pinet(&tcb->conn.remote)); + _printf(_(" State: %s\n"),Tcpstates[tcb->state]); + _printf(_(" Unack Next Resent CWind Thrsh Wind MSS Queue Thruput Total\n")); + _printf(_("Send: %08lx %08lx%7lu%6lu%6lu%6lu%5lu%6lu%9lu%11lu\n"), + tcb->snd.una,tcb->snd.nxt,tcb->resent,tcb->cwind,tcb->ssthresh, + tcb->snd.wnd,tcb->mss,tcb->sndcnt,tcb->txbw,sent); + + _printf(_("Recv: %08lx%7lu %6lu %6lu%9lu%11lu\n"), + tcb->rcv.nxt,tcb->rerecv,tcb->rcv.wnd,tcb->rcvcnt,tcb->rxbw,recvd); + + _printf(_("Dup acks Backoff Timeouts Source Quench Unreachables Power\n")); + _printf(_("%8u%10u%11lu%16lu%15lu"),tcb->dupacks,tcb->backoff,tcb->timeouts, + tcb->quench,tcb->unreach); + if(tcb->srtt != 0) + _printf(_("%8lu"),1000*tcb->txbw/tcb->srtt); + else + _printf(_(" INF")); + if(tcb->flags.retran) + _printf(_(" Retry")); + _printf(_("\n")); + + _printf(_("Timer Count Duration Last RTT SRTT Mdev Method\n")); + switch(tcb->timer.state){ + case TIMER_STOP: + _printf(_("stopped")); + break; + case TIMER_RUN: + _printf(_("running")); + break; + case TIMER_EXPIRE: + _printf(_("expired")); + break; + } + _printf(_(" %10lu%10lu%10lu%10lu%10lu"),(long)read_timer(&tcb->timer), + (long)dur_timer(&tcb->timer),tcb->rtt,tcb->srtt,tcb->mdev); + _printf(_(" %s\n"),tcb->flags.ts_ok ? "timestamps":"standard"); + + if(tcb->reseq != (struct reseq *)NULL){ + register struct reseq *rp; + + _printf(_("Reassembly queue:\n")); + for(rp = tcb->reseq;rp != (struct reseq *)NULL; rp = rp->next){ + _printf(_(" seq x%lx %u bytes\n"),rp->seg.seq,rp->length); + } + } +} +static int +keychar(c) +int c; +{ + if(c != CTLC) + return 1; /* Ignore all but ^C */ + + _fprintf(Current->output, _("^C\n")); + alert(Current->proc,EABORT); + Current->inproc = NULL; + return 0; +} + diff --git a/src/nos/internet/tcphdr.c b/src/nos/internet/tcphdr.c new file mode 100644 index 00000000..012ab880 --- /dev/null +++ b/src/nos/internet/tcphdr.c @@ -0,0 +1,180 @@ +/* TCP header conversion routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "tcp.h" +#include "ip.h" +#include "internet.h" + +/* Convert TCP header in host format into mbuf ready for transmission, + * link in data (if any). + * + * If checksum field is zero, recompute it, otherwise take the value + * in the host header. + */ +void +htontcp( +struct tcp *tcph, +struct mbuf **bpp, /* Data in, packet out */ +int32 ipsrc, /* For computing header checksum */ +int32 ipdest +){ + uint16 hdrlen; + register uint8 *cp; + + if(bpp == NULL) + return; + hdrlen = TCPLEN; + if(tcph->flags.mss) + hdrlen += MSS_LENGTH; + if(tcph->flags.tstamp) + hdrlen += TSTAMP_LENGTH; + if(tcph->flags.wscale) + hdrlen += WSCALE_LENGTH; + + hdrlen = (hdrlen + 3) & 0xfc; /* Round up to multiple of 4 */ + pushdown(bpp,NULL,hdrlen); + cp = (*bpp)->data; + memset(cp,0,hdrlen); + cp = put16(cp,tcph->source); + cp = put16(cp,tcph->dest); + cp = put32(cp,tcph->seq); + cp = put32(cp,tcph->ack); + *cp++ = hdrlen << 2; /* Offset field */ + *cp = 0; + if(tcph->flags.congest) + *cp |= 64; + if(tcph->flags.urg) + *cp |= 32; + if(tcph->flags.ack) + *cp |= 16; + if(tcph->flags.psh) + *cp |= 8; + if(tcph->flags.rst) + *cp |= 4; + if(tcph->flags.syn) + *cp |= 2; + if(tcph->flags.fin) + *cp |= 1; + cp++; + cp = put16(cp,tcph->wnd); + cp = put16(cp,tcph->checksum); + cp = put16(cp,tcph->up); + + /* Write options, if any */ + if(tcph->flags.mss){ + *cp++ = MSS_KIND; + *cp++ = MSS_LENGTH; + cp = put16(cp,tcph->mss); + } + if(tcph->flags.tstamp){ + *cp++ = TSTAMP_KIND; + *cp++ = TSTAMP_LENGTH; + cp = put32(cp,tcph->tsval); + cp = put32(cp,tcph->tsecr); + } + if(tcph->flags.wscale){ + *cp++ = WSCALE_KIND; + *cp++ = WSCALE_LENGTH; + *cp++ = tcph->wsopt; + } + if(tcph->checksum == 0){ + /* Recompute header checksum */ + struct pseudo_header ph; + + ph.source = ipsrc; + ph.dest = ipdest; + ph.protocol = TCP_PTCL; + ph.length = len_p(*bpp); + put16(&(*bpp)->data[16],cksum(&ph,*bpp,ph.length)); + } +} +/* Pull TCP header off mbuf */ +int +ntohtcp( +struct tcp *tcph, +struct mbuf **bpp +){ + int hdrlen,i,optlen,kind; + register int flags; + uint8 hdrbuf[TCPLEN],*cp; + uint8 options[TCP_MAXOPT]; + + memset(tcph,0,sizeof(struct tcp)); + i = pullup(bpp,hdrbuf,TCPLEN); + /* Note that the results will be garbage if the header is too short. + * We don't check for this because returned ICMP messages will be + * truncated, and we at least want to get the port numbers. + */ + tcph->source = get16(&hdrbuf[0]); + tcph->dest = get16(&hdrbuf[2]); + tcph->seq = get32(&hdrbuf[4]); + tcph->ack = get32(&hdrbuf[8]); + hdrlen = (hdrbuf[12] & 0xf0) >> 2; + flags = hdrbuf[13]; + tcph->flags.congest = (flags & 64) ? 1 : 0; + tcph->flags.urg = (flags & 32) ? 1 : 0; + tcph->flags.ack = (flags & 16) ? 1 : 0; + tcph->flags.psh = (flags & 8) ? 1 : 0; + tcph->flags.rst = (flags & 4) ? 1 : 0; + tcph->flags.syn = (flags & 2) ? 1 : 0; + tcph->flags.fin = (flags & 1) ? 1 : 0; + tcph->wnd = get16(&hdrbuf[14]); + tcph->checksum = get16(&hdrbuf[16]); + tcph->up = get16(&hdrbuf[18]); + optlen = hdrlen - TCPLEN; + + /* Check for option field */ + if(i < TCPLEN || hdrlen < TCPLEN) + return -1; /* Header smaller than legal minimum */ + if(optlen == 0) + return (int)hdrlen; /* No options, all done */ + + if(optlen > len_p(*bpp)){ + /* Remainder too short for options length specified */ + return -1; + } + pullup(bpp,options,optlen); /* "Can't fail" */ + /* Process options */ + for(cp=options,i=optlen; i > 0;){ + kind = *cp++; + i--; + /* Process single-byte options */ + switch(kind){ + case EOL_KIND: + return (int)hdrlen; /* End of options list */ + case NOOP_KIND: + continue; /* Go look for next option */ + } + /* All other options have a length field */ + optlen = *cp++; + + /* Process valid multi-byte options */ + switch(kind){ + case MSS_KIND: + if(optlen == MSS_LENGTH){ + tcph->mss = get16(cp); + tcph->flags.mss = 1; + } + break; + case WSCALE_KIND: + if(optlen == WSCALE_LENGTH){ + tcph->wsopt = *cp; + tcph->flags.wscale = 1; + } + break; + case TSTAMP_KIND: + if(optlen == TSTAMP_LENGTH){ + tcph->tsval = get32(cp); + tcph->tsecr = get32(cp+4); + tcph->flags.tstamp = 1; + } + break; + } + optlen = max(2,optlen); /* Enforce legal minimum */ + i -= optlen; + cp += optlen - 2; + } + return (int)hdrlen; +} diff --git a/src/nos/internet/tcpin.c b/src/nos/internet/tcpin.c new file mode 100644 index 00000000..dd308ce6 --- /dev/null +++ b/src/nos/internet/tcpin.c @@ -0,0 +1,984 @@ +/* Process incoming TCP segments. Page number references are to ARPA RFC-793, + * the TCP specification. + * + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "timer.h" +#include "mbuf.h" +#include "netuser.h" +#include "internet.h" +#include "tcp.h" +#include "icmp.h" +#include "iface.h" +#include "ip.h" + +#ifdef MODULE +#define STATIC +#else +#define STATIC static +#define MODULE_tcp_input +#define MODULE_tcp_icmp +#define MODULE_reset +#define MODULE_update +#define MODULE_in_window +#define MODULE_proc_syn +#define MODULE_send_syn +#define MODULE_add_reseq +#define MODULE_get_reseq +#define MODULE_trim +#endif + +STATIC void update(struct tcb *tcb,struct tcp *seg,uint16 length); +STATIC void proc_syn(struct tcb *tcb,uint8 tos,struct tcp *seg); +STATIC void add_reseq(struct tcb *tcb,uint8 tos,struct tcp *seg, + struct mbuf **bp,uint16 length); +STATIC void get_reseq(struct tcb *tcb,uint8 *tos,struct tcp *seq, + struct mbuf **bp,uint16 *length); +STATIC int trim(struct tcb *tcb,struct tcp *seg,struct mbuf **bpp, + uint16 *length); +STATIC int in_window(struct tcb *tcb,int32 seq); + + +/* This function is called from IP with the IP header in machine byte order, + * along with a mbuf chain pointing to the TCP header. + */ +#ifdef MODULE_tcp_input +void +tcp_input( +struct iface *iface, /* Incoming interface (ignored) */ +struct ip *ip, /* IP header */ +struct mbuf **bpp, /* Data field, if any */ +int rxbroadcast, /* Incoming broadcast - discard if true */ +int32 said /* Authenticated packet */ +){ + struct tcb *ntcb; + register struct tcb *tcb; /* TCP Protocol control block */ + struct tcp seg; /* Local copy of segment header */ + struct connection conn; /* Local copy of addresses */ + struct pseudo_header ph; /* Pseudo-header for checksumming */ + int hdrlen; /* Length of TCP header */ + uint16 length; + int32 t; + + if(bpp == NULL || *bpp == NULL) + return; + + tcpInSegs++; + if(rxbroadcast){ + /* Any TCP packet arriving as a broadcast is + * to be completely IGNORED!! + */ + free_p(bpp); + return; + } + length = ip->length - IPLEN - ip->optlen; + ph.source = ip->source; + ph.dest = ip->dest; + ph.protocol = ip->protocol; + ph.length = length; + if(cksum(&ph,*bpp,length) != 0){ + /* Checksum failed, ignore segment completely */ + tcpInErrs++; + free_p(bpp); + return; + } + /* Form local copy of TCP header in host byte order */ + if((hdrlen = ntohtcp(&seg,bpp)) < 0){ + /* TCP header is too small */ + free_p(bpp); + return; + } + length -= hdrlen; + + /* Fill in connection structure and find TCB */ + conn.local.address = ip->dest; + conn.local.port = seg.dest; + conn.remote.address = ip->source; + conn.remote.port = seg.source; + + if((tcb = lookup_tcb(&conn)) == NULL){ + /* If this segment doesn't carry a SYN, reject it */ + if(!seg.flags.syn){ + free_p(bpp); + reset(ip,&seg); + return; + } + /* See if there's a TCP_LISTEN on this socket with + * unspecified remote address and port + */ + conn.remote.address = 0; + conn.remote.port = 0; + if((tcb = lookup_tcb(&conn)) == NULL){ + /* Nope, try unspecified local address too */ + conn.local.address = 0; + if((tcb = lookup_tcb(&conn)) == NULL){ + /* No LISTENs, so reject */ + free_p(bpp); + reset(ip,&seg); + return; + } + } + /* We've found an server listen socket, so clone the TCB */ + if(tcb->flags.clone){ + ntcb = (struct tcb *)mallocw(sizeof (struct tcb)); + ASSIGN(*ntcb,*tcb); + tcb = ntcb; + tcb->timer.arg = tcb; + /* Put on list */ + tcb->next = Tcbs; + Tcbs = tcb; + } + /* Put all the socket info into the TCB */ + tcb->conn.local.address = ip->dest; + tcb->conn.remote.address = ip->source; + tcb->conn.remote.port = seg.source; + } + tcb->flags.congest = ip->flags.congest; + /* Do unsynchronized-state processing (p. 65-68) */ + switch(tcb->state){ + case TCP_CLOSED: + free_p(bpp); + reset(ip,&seg); + return; + case TCP_LISTEN: + if(seg.flags.rst){ + free_p(bpp); + return; + } + if(seg.flags.ack){ + free_p(bpp); + reset(ip,&seg); + return; + } + if(seg.flags.syn){ + /* (Security check is bypassed) */ + /* page 66 */ + proc_syn(tcb,ip->tos,&seg); + send_syn(tcb); + settcpstate(tcb,TCP_SYN_RECEIVED); + if(length != 0 || seg.flags.fin) { + /* Continue processing if there's more */ + break; + } + tcp_output(tcb); + } + free_p(bpp); /* Unlikely to get here directly */ + return; + case TCP_SYN_SENT: + if(seg.flags.ack){ + if(!seq_within(seg.ack,tcb->iss+1,tcb->snd.nxt)){ + free_p(bpp); + reset(ip,&seg); + return; + } + } + if(seg.flags.rst){ /* p 67 */ + if(seg.flags.ack){ + /* The ack must be acceptable since we just checked it. + * This is how the remote side refuses connect requests. + */ + close_self(tcb,RESET); + } + free_p(bpp); + return; + } + /* (Security check skipped here) */ +#ifdef PREC_CHECK /* Turned off for compatibility with BSD */ + /* Check incoming precedence; it must match if there's an ACK */ + if(seg.flags.ack && PREC(ip->tos) != PREC(tcb->tos)){ + free_p(bpp); + reset(ip,&seg); + return; + } +#endif + if(seg.flags.syn){ + proc_syn(tcb,ip->tos,&seg); + if(seg.flags.ack){ + /* Our SYN has been acked, otherwise the ACK + * wouldn't have been valid. + */ + update(tcb,&seg,length); + settcpstate(tcb,TCP_ESTABLISHED); + } else { + settcpstate(tcb,TCP_SYN_RECEIVED); + } + if(length != 0 || seg.flags.fin) { + break; /* Continue processing if there's more */ + } + tcp_output(tcb); + } else { + free_p(bpp); /* Ignore if neither SYN or RST is set */ + } + return; + } + /* We reach this point directly in any synchronized state. Note that + * if we fell through from LISTEN or SYN_SENT processing because of a + * data-bearing SYN, window trimming and sequence testing "cannot fail". + * + * Begin by trimming segment to fit receive window. + */ + if(trim(tcb,&seg,bpp,&length) == -1){ + /* Segment is unacceptable */ + if(!seg.flags.rst){ /* NEVER answer RSTs */ + /* In SYN_RECEIVED state, answer a retransmitted SYN + * with a retransmitted SYN/ACK. + */ + if(tcb->state == TCP_SYN_RECEIVED) + tcb->snd.ptr = tcb->snd.una; + tcb->flags.force = 1; + tcp_output(tcb); + } + return; + } + /* If segment isn't the next one expected, and there's data + * or flags associated with it, put it on the resequencing + * queue and remind ourselves to ACK it. Then strip off + * the SYN/data/FIN and continue to process the ACK (or RST) + */ + if(seg.seq != tcb->rcv.nxt + && (length != 0 || seg.flags.syn || seg.flags.fin)){ + add_reseq(tcb,ip->tos,&seg,bpp,length); + if(seg.flags.ack && !seg.flags.rst) + tcb->flags.force = 1; + seg.flags.syn = seg.flags.fin = 0; + length = 0; + } + /* This loop first processes the current segment, and then + * repeats if it can process the resequencing queue. + */ + for(;;){ + /* We reach this point with an acceptable segment; data and flags + * (if any) are in the window, and if there's data, syn or fin, + * the starting sequence number equals rcv.nxt + * (p. 70) + */ + if(seg.flags.rst){ + if(tcb->state == TCP_SYN_RECEIVED + && !tcb->flags.clone && !tcb->flags.active){ + /* Go back to listen state only if this was + * not a cloned or active server TCB + */ + settcpstate(tcb,TCP_LISTEN); + } else { + close_self(tcb,RESET); + } + free_p(bpp); + return; + } + /* (Security check skipped here) p. 71 */ +#ifdef PREC_CHECK + /* Check for precedence mismatch */ + if(PREC(ip->tos) != PREC(tcb->tos)){ + free_p(bpp); + reset(ip,&seg); + return; + } +#endif + /* Check for erroneous extra SYN */ + if(seg.flags.syn){ + free_p(bpp); + reset(ip,&seg); + return; + } + /* Update timestamp field */ + if(seg.flags.tstamp + && seq_within(tcb->last_ack_sent,seg.seq,seg.seq+length)) + tcb->ts_recent = seg.tsval; + /* Check ack field p. 72 */ + if(!seg.flags.ack){ + free_p(bpp); /* All segments after synchronization must have ACK */ + return; + } + /* Process ACK */ + switch(tcb->state){ + case TCP_SYN_RECEIVED: + if(seq_within(seg.ack,tcb->snd.una+1,tcb->snd.nxt)){ + update(tcb,&seg,length); + settcpstate(tcb,TCP_ESTABLISHED); + } else { + free_p(bpp); + reset(ip,&seg); + return; + } + break; + case TCP_ESTABLISHED: + case TCP_CLOSE_WAIT: + case TCP_FINWAIT2: + update(tcb,&seg,length); + break; + case TCP_FINWAIT1: /* p. 73 */ + update(tcb,&seg,length); + if(tcb->sndcnt == 0){ + /* Our FIN is acknowledged */ + settcpstate(tcb,TCP_FINWAIT2); + } + break; + case TCP_CLOSING: + update(tcb,&seg,length); + if(tcb->sndcnt == 0){ + /* Our FIN is acknowledged */ + settcpstate(tcb,TCP_TIME_WAIT); + set_timer(&tcb->timer,MSL2*1000L); + start_timer(&tcb->timer); + } + break; + case TCP_LAST_ACK: + update(tcb,&seg,length); + if(tcb->sndcnt == 0){ + /* Our FIN is acknowledged, close connection */ + close_self(tcb,NORMAL); + return; + } + break; + case TCP_TIME_WAIT: + start_timer(&tcb->timer); + break; + } + + /* (URGent bit processing skipped here) */ + + /* Process the segment text, if any, beginning at rcv.nxt (p. 74) */ + if(length != 0){ + switch(tcb->state){ + case TCP_SYN_RECEIVED: + case TCP_ESTABLISHED: + case TCP_FINWAIT1: + case TCP_FINWAIT2: + /* Place on receive queue */ + t = msclock(); + if(t > tcb->lastrx){ + tcb->rxbw = 1000L*length / (t - tcb->lastrx); + tcb->lastrx = t; + } + append(&tcb->rcvq,bpp); + tcb->rcvcnt += length; + tcb->rcv.nxt += length; + tcb->rcv.wnd -= length; + tcb->flags.force = 1; + /* Notify user */ + if(tcb->r_upcall) + (*tcb->r_upcall)(tcb,tcb->rcvcnt); + break; + default: + /* Ignore segment text */ + free_p(bpp); + break; + } + } + /* process FIN bit (p 75) */ + if(seg.flags.fin){ + tcb->flags.force = 1; /* Always respond with an ACK */ + + switch(tcb->state){ + case TCP_SYN_RECEIVED: + case TCP_ESTABLISHED: + tcb->rcv.nxt++; + settcpstate(tcb,TCP_CLOSE_WAIT); + break; + case TCP_FINWAIT1: + tcb->rcv.nxt++; + if(tcb->sndcnt == 0){ + /* Our FIN has been acked; bypass TCP_CLOSING state */ + settcpstate(tcb,TCP_TIME_WAIT); + set_timer(&tcb->timer,MSL2*1000L); + start_timer(&tcb->timer); + } else { + settcpstate(tcb,TCP_CLOSING); + } + break; + case TCP_FINWAIT2: + tcb->rcv.nxt++; + settcpstate(tcb,TCP_TIME_WAIT); + set_timer(&tcb->timer,MSL2*1000L); + start_timer(&tcb->timer); + break; + case TCP_CLOSE_WAIT: + case TCP_CLOSING: + case TCP_LAST_ACK: + break; /* Ignore */ + case TCP_TIME_WAIT: /* p 76 */ + start_timer(&tcb->timer); + break; + } + /* Call the client again so he can see EOF */ + if(tcb->r_upcall) + (*tcb->r_upcall)(tcb,tcb->rcvcnt); + } + /* Scan the resequencing queue, looking for a segment we can handle, + * and freeing all those that are now obsolete. + */ + while(tcb->reseq != NULL && seq_ge(tcb->rcv.nxt,tcb->reseq->seg.seq)){ + get_reseq(tcb,&ip->tos,&seg,bpp,&length); + if(trim(tcb,&seg,bpp,&length) == 0) + goto gotone; + /* Segment is an old one; trim has freed it */ + } + break; +gotone: ; + } + tcp_output(tcb); /* Send any necessary ack */ +} +#endif + +/* Process an incoming ICMP response */ +#ifdef MODULE_tcp_icmp +void +tcp_icmp( +int32 icsource, /* Sender of ICMP message (not used) */ +int32 source, /* Original IP datagram source (i.e. us) */ +int32 dest, /* Original IP datagram dest (i.e., them) */ +uint8 type, /* ICMP error codes */ +uint8 code, +struct mbuf **bpp /* First 8 bytes of TCP header */ +){ + struct tcp seg; + struct connection conn; + register struct tcb *tcb; + + /* Extract the socket info from the returned TCP header fragment + * Note that since this is a datagram we sent, the source fields + * refer to the local side. + */ + ntohtcp(&seg,bpp); + conn.local.port = seg.source; + conn.remote.port = seg.dest; + conn.local.address = source; + conn.remote.address = dest; + if((tcb = lookup_tcb(&conn)) == NULL) + return; /* Unknown connection, ignore */ + + /* Verify that the sequence number in the returned segment corresponds + * to something currently unacknowledged. If not, it can safely + * be ignored. + */ + if(!seq_within(seg.seq,tcb->snd.una,tcb->snd.nxt)) + return; + + /* Destination Unreachable and Time Exceeded messages never kill a + * connection; the info is merely saved for future reference. + */ + switch(type){ + case ICMP_DEST_UNREACH: + case ICMP_TIME_EXCEED: + tcb->type = type; + tcb->code = code; + tcb->unreach++; + break; + case ICMP_QUENCH: + /* Source quench; reduce slowstart threshold to half + * current window and restart slowstart + */ + tcb->ssthresh = tcb->cwind / 2; + tcb->ssthresh = max(tcb->ssthresh,tcb->mss); + /* Shrink congestion window to 1 packet */ + tcb->cwind = tcb->mss; + tcb->quench++; + break; + } +} +#endif + + +/* Send an acceptable reset (RST) response for this segment + * The RST reply is composed in place on the input segment + */ +#ifdef MODULE_reset +void +reset(ip,seg) +struct ip *ip; /* Offending IP header */ +/* Nick register */ struct tcp *seg; /* Offending TCP header */ +{ + struct mbuf *hbp; + uint16 tmp; + + if(seg->flags.rst) + return; /* Never send an RST in response to an RST */ + + /* Swap port numbers */ + tmp = seg->source; + seg->source = seg->dest; + seg->dest = tmp; + + if(seg->flags.ack){ + /* This reset is being sent to clear a half-open connection. + * Set the sequence number of the RST to the incoming ACK + * so it will be acceptable. + */ + seg->flags.ack = 0; + seg->seq = seg->ack; + seg->ack = 0; + } else { + /* We're rejecting a connect request (SYN) from TCP_LISTEN state + * so we have to "acknowledge" their SYN. + */ + seg->flags.ack = 1; + seg->ack = seg->seq; + seg->seq = 0; + if(seg->flags.syn) + seg->ack++; + } + /* Set remaining parts of packet */ + seg->flags.urg = 0; + seg->flags.psh = 0; + seg->flags.rst = 1; + seg->flags.syn = 0; + seg->flags.fin = 0; + seg->flags.mss = 0; + seg->flags.wscale = 0; + seg->flags.tstamp = 0; + seg->wnd = 0; + seg->up = 0; + seg->checksum = 0; /* force recomputation */ + + hbp = ambufw(TCP_HDR_PAD); /* Prealloc room for headers */ + hbp->data += TCP_HDR_PAD; + htontcp(seg,&hbp,ip->dest,ip->source); + /* Ship it out (note swap of addresses) */ + ip_send(ip->dest,ip->source,TCP_PTCL,ip->tos,0,&hbp,len_p(hbp),0,0); + tcpOutRsts++; +} +#endif + + +/* Process an incoming acknowledgement and window indication. + * From page 72. + */ +#ifdef MODULE_update +STATIC void +update(tcb,seg,length) +/* Nick register */ struct tcb *tcb; +/* Nick register */ struct tcp *seg; +uint16 length; +{ + int32 acked; + int winupd = 0; + int32 swind; /* Incoming window, scaled (non-SYN only) */ + long rtt; /* measured round trip time */ + int32 abserr; /* abs(rtt - srtt) */ + + acked = 0; + if(seq_gt(seg->ack,tcb->snd.nxt)){ + tcb->flags.force = 1; /* Acks something not yet sent */ + return; + } + /* Decide if we need to do a window update. + * This is always checked whenever a legal ACK is received, + * even if it doesn't actually acknowledge anything, + * because it might be a spontaneous window reopening. + */ + if(seq_gt(seg->seq,tcb->snd.wl1) || ((seg->seq == tcb->snd.wl1) + && seq_ge(seg->ack,tcb->snd.wl2))){ + if(seg->flags.syn || !tcb->flags.ws_ok) + swind = seg->wnd; + else + swind = seg->wnd << tcb->snd.wind_scale; + if(swind > tcb->snd.wnd){ + winupd = 1; /* Don't count as duplicate ack */ + + /* If the window had been closed, crank back the send + * pointer so we'll immediately resume transmission. + * Otherwise we'd have to wait until the next probe. + */ + if(tcb->snd.wnd == 0) + tcb->snd.ptr = tcb->snd.una; + } + /* Remember for next time */ + tcb->snd.wnd = swind; + tcb->snd.wl1 = seg->seq; + tcb->snd.wl2 = seg->ack; + } + /* See if anything new is being acknowledged */ + if(seq_lt(seg->ack,tcb->snd.una)) + return; /* Old ack, ignore */ + + if(seg->ack == tcb->snd.una){ + /* Ack current, but doesn't ack anything */ + if(tcb->sndcnt == 0 || winupd || length != 0 || seg->flags.syn || seg->flags.fin){ + /* Either we have nothing in the pipe, this segment + * was sent to update the window, or it carries + * data/syn/fin. In any of these cases we + * wouldn't necessarily expect an ACK. + */ + return; + } + /* Van Jacobson "fast recovery" code */ + if(++tcb->dupacks == TCPDUPACKS){ + /* We've had a burst of do-nothing acks, so + * we almost certainly lost a packet. + * Resend it now to avoid a timeout. (This is + * Van Jacobson's 'quick recovery' algorithm.) + */ + int32 ptrsave; + + /* Knock the threshold down just as though + * this were a timeout, since we've had + * network congestion. + */ + tcb->ssthresh = tcb->cwind/2; + tcb->ssthresh = max(tcb->ssthresh,tcb->mss); + + /* Manipulate the machinery in tcp_output() to + * retransmit just the missing packet + */ + ptrsave = tcb->snd.ptr; + tcb->snd.ptr = tcb->snd.una; + tcb->cwind = tcb->mss; + tcp_output(tcb); + tcb->snd.ptr = ptrsave; + + /* "Inflate" the congestion window, pretending as + * though the duplicate acks were normally acking + * the packets beyond the one that was lost. + */ + tcb->cwind = tcb->ssthresh + TCPDUPACKS*tcb->mss; + } else if(tcb->dupacks > TCPDUPACKS){ + /* Continue to inflate the congestion window + * until the acks finally get "unstuck". + */ + tcb->cwind += tcb->mss; + } + /* Clamp the congestion window at the amount currently + * on the send queue, with a minimum of one packet. + * This keeps us from increasing the cwind beyond what + * we're actually putting in the pipe; otherwise a big + * burst of data could overwhelm the net. + */ + tcb->cwind = min(tcb->cwind,tcb->sndcnt); + tcb->cwind = max(tcb->cwind,tcb->mss); + return; + } + /* We're here, so the ACK must have actually acked something */ + if(tcb->dupacks >= TCPDUPACKS && tcb->cwind > tcb->ssthresh){ + /* The acks have finally gotten "unstuck". So now we + * can "deflate" the congestion window, i.e. take it + * back down to where it would be after slow start + * finishes. + */ + tcb->cwind = tcb->ssthresh; + } + tcb->dupacks = 0; + acked = seg->ack - tcb->snd.una; + + /* Expand congestion window if not already at limit and if + * this packet wasn't retransmitted + */ + if(tcb->cwind < tcb->snd.wnd && !tcb->flags.retran){ + if(tcb->cwind < tcb->ssthresh){ + /* Still doing slow start/CUTE, expand by amount acked */ + tcb->cwind += min(acked,tcb->mss); + } else { + /* Steady-state test of extra path capacity */ + tcb->cwind += ((long)tcb->mss * tcb->mss) / tcb->cwind; + } + /* Don't expand beyond the offered window */ + if(tcb->cwind > tcb->snd.wnd) + tcb->cwind = tcb->snd.wnd; + } + tcb->cwind = min(tcb->cwind,tcb->sndcnt); /* Clamp */ + tcb->cwind = max(tcb->cwind,tcb->mss); + + /* Round trip time estimation */ + rtt = -1; /* Init to invalid value */ + if(tcb->flags.ts_ok && seg->flags.tstamp){ + /* Determine RTT from timestamp echo */ + rtt = msclock() - seg->tsecr; + } else if(tcb->flags.rtt_run && seq_ge(seg->ack,tcb->rttseq)){ + /* use standard round trip timing */ + /* A timed sequence number has been acked */ + tcb->flags.rtt_run = 0; + if(!(tcb->flags.retran)){ + /* This packet was sent only once and now + * it's been acked, so process the round trip time + */ + rtt = msclock() - tcb->rtt_time; + } + } + if(rtt >= 0){ + tcb->rtt = rtt; /* Save for display */ + + abserr = (rtt > tcb->srtt) ? rtt - tcb->srtt : tcb->srtt - rtt; + /* Run SRTT and MDEV integrators, with rounding */ + tcb->srtt = ((AGAIN-1)*tcb->srtt + rtt + (AGAIN/2)) >> LAGAIN; + tcb->mdev = ((DGAIN-1)*tcb->mdev + abserr + (DGAIN/2)) >> LDGAIN; + + rtt_add(tcb->conn.remote.address,rtt); + /* Reset the backoff level */ + tcb->backoff = 0; + + /* Update our tx throughput estimate */ + if(rtt != 0) /* Avoid division by zero */ + tcb->txbw = 1000*(seg->ack - tcb->rttack)/rtt; + } + tcb->sndcnt -= acked; /* Update virtual byte count on snd queue */ + tcb->snd.una = seg->ack; + + /* If we're waiting for an ack of our SYN, note it and adjust count */ + if(!(tcb->flags.synack)){ + tcb->flags.synack = 1; + acked--; /* One less byte to pull from real snd queue */ + } + /* Remove acknowledged bytes from the send queue and update the + * unacknowledged pointer. If a FIN is being acked, + * pullup won't be able to remove it from the queue, but that + * causes no harm. + */ + pullup(&tcb->sndq,NULL,(uint16)acked); + + /* Stop retransmission timer, but restart it if there is still + * unacknowledged data. + */ + stop_timer(&tcb->timer); + if(tcb->snd.una != tcb->snd.nxt) + start_timer(&tcb->timer); + + /* If retransmissions have been occurring, make sure the + * send pointer doesn't repeat ancient history + */ + if(seq_lt(tcb->snd.ptr,tcb->snd.una)) + tcb->snd.ptr = tcb->snd.una; + + /* Clear the retransmission flag since the oldest + * unacknowledged segment (the only one that is ever retransmitted) + * has now been acked. + */ + tcb->flags.retran = 0; + + /* If outgoing data was acked, notify the user so he can send more + * unless we've already sent a FIN. + */ + if(acked != 0 && tcb->t_upcall + && (tcb->state == TCP_ESTABLISHED || tcb->state == TCP_CLOSE_WAIT)){ + (*tcb->t_upcall)(tcb,tcb->window - tcb->sndcnt); + } +} +#endif + + +/* Determine if the given sequence number is in our receiver window. + * NB: must not be used when window is closed! + */ +#ifdef MODULE_in_window +STATIC +int +in_window(tcb,seq) +struct tcb *tcb; +int32 seq; +{ + return seq_within(seq,tcb->rcv.nxt,(int32)(tcb->rcv.nxt+tcb->rcv.wnd-1)); +} +#endif + + +/* Process an incoming SYN */ +#ifdef MODULE_proc_syn +STATIC void +proc_syn(tcb,tos,seg) +/* Nick register */ struct tcb *tcb; +uint8 tos; +struct tcp *seg; +{ + uint16 mtu; + struct tcp_rtt *tp; + + tcb->flags.force = 1; /* Always send a response */ + + /* Note: It's not specified in RFC 793, but SND.WL1 and + * SND.WND are initialized here since it's possible for the + * window update routine in update() to fail depending on the + * IRS if they are left unitialized. + */ + /* Check incoming precedence and increase if higher */ + if(PREC(tos) > PREC(tcb->tos)) + tcb->tos = tos; + tcb->rcv.nxt = seg->seq + 1; /* p 68 */ + tcb->snd.wl1 = tcb->irs = seg->seq; + tcb->snd.wnd = seg->wnd; /* Never scaled in a SYN */ + if(seg->flags.mss) + tcb->mss = seg->mss; + if(seg->flags.wscale){ + tcb->snd.wind_scale = seg->wsopt; + tcb->rcv.wind_scale = DEF_WSCALE; + tcb->flags.ws_ok = 1; + } + if(seg->flags.tstamp && Tcp_tstamps){ + tcb->flags.ts_ok = 1; + tcb->ts_recent = seg->tsval; + } + /* Check the MTU of the interface we'll use to reach this guy + * and lower the MSS so that unnecessary fragmentation won't occur + */ + if((mtu = ip_mtu(tcb->conn.remote.address)) != 0){ + /* Allow space for the TCP and IP headers */ + if(tcb->flags.ts_ok) + mtu -= (TSTAMP_LENGTH + TCPLEN + IPLEN + 3) & ~3; + else + mtu -= TCPLEN + IPLEN; + tcb->cwind = tcb->mss = min(mtu,tcb->mss); + } + /* See if there's round-trip time experience */ + if((tp = rtt_get(tcb->conn.remote.address)) != NULL){ + tcb->srtt = tp->srtt; + tcb->mdev = tp->mdev; + } +} +#endif + +/* Generate an initial sequence number and put a SYN on the send queue */ +#ifdef MODULE_send_syn +void +send_syn(tcb) +/* Nick register */ struct tcb *tcb; +{ + tcb->iss = geniss(); + tcb->rttseq = tcb->snd.wl2 = tcb->snd.una = tcb->iss; + tcb->snd.ptr = tcb->snd.nxt = tcb->rttseq; + tcb->sndcnt++; + tcb->flags.force = 1; +} +#endif + +/* Add an entry to the resequencing queue in the proper place */ +#ifdef MODULE_add_reseq +STATIC void +add_reseq( +struct tcb *tcb, +uint8 tos, +struct tcp *seg, +struct mbuf **bpp, +uint16 length +){ + register struct reseq *rp,*rp1; + + /* Allocate reassembly descriptor */ + if((rp = (struct reseq *)malloc(sizeof (struct reseq))) == NULL){ + /* No space, toss on floor */ + free_p(bpp); + return; + } + ASSIGN(rp->seg,*seg); + rp->tos = tos; + rp->bp = (*bpp); + *bpp = NULL; + rp->length = length; + + /* Place on reassembly list sorting by starting seq number */ + rp1 = tcb->reseq; + if(rp1 == NULL || seq_lt(seg->seq,rp1->seg.seq)){ + /* Either the list is empty, or we're less than all other + * entries; insert at beginning. + */ + rp->next = rp1; + tcb->reseq = rp; + } else { + /* Find the last entry less than us */ + for(;;){ + if(rp1->next == NULL || seq_lt(seg->seq,rp1->next->seg.seq)){ + /* We belong just after this one */ + rp->next = rp1->next; + rp1->next = rp; + break; + } + rp1 = rp1->next; + } + } +} +#endif + +/* Fetch the first entry off the resequencing queue */ +#ifdef MODULE_get_reseq +STATIC void +get_reseq( +/* Nick register */ struct tcb *tcb, +uint8 *tos, +struct tcp *seg, +struct mbuf **bp, +uint16 *length +){ + register struct reseq *rp; + + if((rp = tcb->reseq) == NULL) + return; + + tcb->reseq = rp->next; + + *tos = rp->tos; + ASSIGN(*seg,rp->seg); + *bp = rp->bp; + *length = rp->length; + free(rp); +} +#endif + +/* Trim segment to fit window. Return 0 if OK, -1 if segment is + * unacceptable. + */ +#ifdef MODULE_trim +STATIC int +trim( +/* Nick register */ struct tcb *tcb, +/* Nick register */ struct tcp *seg, +struct mbuf **bpp, +uint16 *length +){ + long dupcnt,excess; + uint16 len; /* Segment length including flags */ + char accept = 0; + + len = *length; + if(seg->flags.syn) + len++; + if(seg->flags.fin) + len++; + + /* Segment acceptability tests */ + if(tcb->rcv.wnd == 0){ + /* If our window is closed, then the other end is + * probably probing us. If so, they might send us acks + * with seg.seq > rcv.nxt. Be sure to accept these + */ + if(len == 0 && seq_within(seg->seq,tcb->rcv.nxt,tcb->rcv.nxt+tcb->window)) + return 0; + return -1; /* reject all others */ + } + if(tcb->rcv.wnd > 0){ + /* Some part of the segment must be in the window */ + if(in_window(tcb,seg->seq)){ + accept++; /* Beginning is */ + } else if(len != 0){ + if(in_window(tcb,(int32)(seg->seq+len-1)) || /* End is */ + seq_within(tcb->rcv.nxt,seg->seq,(int32)(seg->seq+len-1))){ /* Straddles */ + accept++; + } + } + } + if(!accept){ + tcb->rerecv += len; + free_p(bpp); + return -1; + } + if((dupcnt = tcb->rcv.nxt - seg->seq) > 0){ + tcb->rerecv += dupcnt; + /* Trim off SYN if present */ + if(seg->flags.syn){ + /* SYN is before first data byte */ + seg->flags.syn = 0; + seg->seq++; + dupcnt--; + } + if(dupcnt > 0){ + pullup(bpp,NULL,(uint16)dupcnt); + seg->seq += dupcnt; + *length -= dupcnt; + } + } + if((excess = seg->seq + *length - (tcb->rcv.nxt + tcb->rcv.wnd)) > 0){ + tcb->rerecv += excess; + /* Trim right edge */ + *length -= excess; + trim_mbuf(bpp,*length); + seg->flags.fin = 0; /* FIN follows last data byte */ + } + return 0; +} +#endif diff --git a/src/nos/internet/tcpout.c b/src/nos/internet/tcpout.c new file mode 100644 index 00000000..83ffe157 --- /dev/null +++ b/src/nos/internet/tcpout.c @@ -0,0 +1,224 @@ +/* TCP output segment processing + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "timer.h" +#include "mbuf.h" +#include "netuser.h" +#include "internet.h" +#include "tcp.h" +#include "ip.h" + +/* Send a segment on the specified connection. One gets sent only + * if there is data to be sent or if "force" is non zero + */ +void +tcp_output(tcb) +register struct tcb *tcb; +{ + struct mbuf *dbp; /* Header and data buffer pointers */ + struct tcp seg; /* Local working copy of header */ + uint16 ssize; /* Size of current segment being sent, + * including SYN and FIN flags */ + uint16 dsize; /* Size of segment less SYN and FIN */ + int32 usable; /* Usable window */ + int32 sent; /* Sequence count (incl SYN/FIN) already + * in the pipe but not yet acked */ + int32 rto; /* Retransmit timeout setting */ + + if(tcb == NULL) + return; + + switch(tcb->state){ + case TCP_LISTEN: + case TCP_CLOSED: + return; /* Don't send anything */ + } + for(;;){ + memset(&seg,0,sizeof(seg)); + /* Compute data already in flight */ + sent = tcb->snd.ptr - tcb->snd.una; + + /* Compute usable send window as minimum of offered + * and congestion windows, minus data already in flight. + * Be careful that the window hasn't shrunk -- + * these are unsigned vars. + */ + usable = min(tcb->snd.wnd,tcb->cwind); + if(usable > sent) + usable -= sent; /* Most common case */ + else if(usable == 0 && sent == 0) + usable = 1; /* Closed window probe */ + else + usable = 0; /* Window closed or shrunken */ + + /* Compute size of segment we *could* send. This is the + * smallest of the usable window, the mss, or the amount + * we have on hand. (I don't like optimistic windows) + */ + ssize = min(tcb->sndcnt - sent,usable); + ssize = min(ssize,tcb->mss); + + /* Now we decide if we actually want to send it. + * Apply John Nagle's "single outstanding segment" rule. + * If data is already in the pipeline, don't send + * more unless it is MSS-sized, the very last packet, + * or we're being forced to transmit anyway (e.g., to + * ack incoming data). + */ + if(!tcb->flags.force && sent != 0 && ssize < tcb->mss + && !(tcb->state == TCP_FINWAIT1 && ssize == tcb->sndcnt-sent)){ + ssize = 0; + } + /* Unless the tcp syndata option is on, inhibit data until + * our SYN has been acked. This ought to be OK, but some + * old TCPs have problems with data piggybacked on SYNs. + */ + if(!tcb->flags.synack && !Tcp_syndata){ + if(tcb->snd.ptr == tcb->iss) + ssize = min(1,ssize); /* Send only SYN */ + else + ssize = 0; /* Don't send anything */ + } + /* If we're forced to send an ack while retransmitting, + * don't send any data. This will let us use the current + * sequence number, which may be necessary for the + * ack to be accepted by the receiver + */ + if(tcb->flags.force && tcb->snd.ptr != tcb->snd.nxt) + ssize = 0; + if(ssize == 0 && !tcb->flags.force) + break; /* No need to send anything */ + + tcb->flags.force = 0; /* Only one forced segment! */ + + seg.source = tcb->conn.local.port; + seg.dest = tcb->conn.remote.port; + + /* Set the flags according to the state we're in. It is + * assumed that if this segment is associated with a state + * transition, then the state change will already have been + * made. This allows this routine to be called from a + * retransmission timeout with force=1. + */ + seg.flags.ack = 1; /* Every state except TCP_SYN_SENT */ + seg.flags.congest = tcb->flags.congest; + + if(tcb->state == TCP_SYN_SENT) + seg.flags.ack = 0; /* Haven't seen anything yet */ + + dsize = ssize; + if(!tcb->flags.synack && tcb->snd.ptr == tcb->iss){ + /* Send SYN */ + seg.flags.syn = 1; + dsize--; /* SYN isn't really in snd queue */ + /* Also send MSS, wscale and tstamp (if OK) */ + seg.mss = Tcp_mss; + seg.flags.mss = 1; + seg.wsopt = DEF_WSCALE; + seg.flags.wscale = 1; + if(Tcp_tstamps){ + seg.flags.tstamp = 1; + seg.tsval = msclock(); + } + } + /* If there's no data, use snd.nxt rather than snd.ptr to + * ensure ack acceptance in case we were retransmitting + */ + if(ssize == 0) + seg.seq = tcb->snd.nxt; + else + seg.seq = tcb->snd.ptr; + tcb->last_ack_sent = seg.ack = tcb->rcv.nxt; + if(seg.flags.syn || !tcb->flags.ws_ok) + seg.wnd = tcb->rcv.wnd; + else + seg.wnd = tcb->rcv.wnd >> tcb->rcv.wind_scale; + + /* Now try to extract some data from the send queue. Since + * SYN and FIN occupy sequence space and are reflected in + * sndcnt but don't actually sit in the send queue, extract + * will return one less than dsize if a FIN needs to be sent. + */ + dbp = ambufw(TCP_HDR_PAD+dsize); + dbp->data += TCP_HDR_PAD; /* Allow room for other hdrs */ + if(dsize != 0){ + int32 offset; + + /* SYN doesn't actually take up space on the sndq, + * so take it out of the sent count + */ + offset = sent; + if(!tcb->flags.synack && sent != 0) + offset--; + + dbp->cnt = extract(tcb->sndq,(uint16)offset,dbp->data,dsize); + if(dbp->cnt != dsize){ + /* We ran past the end of the send queue; + * send a FIN + */ + seg.flags.fin = 1; + dsize--; + } + } + /* If the entire send queue will now be in the pipe, set the + * push flag + */ + if(dsize != 0 && sent + ssize == tcb->sndcnt) + seg.flags.psh = 1; + + /* If this transmission includes previously transmitted data, + * snd.nxt will already be past snd.ptr. In this case, + * compute the amount of retransmitted data and keep score + */ + if(tcb->snd.ptr < tcb->snd.nxt) +#ifdef ZILOG /* fixes internal error in IAR compiler */ + tcb->resent += min_uint(tcb->snd.nxt - tcb->snd.ptr,ssize); +#else + tcb->resent += min(tcb->snd.nxt - tcb->snd.ptr,ssize); +#endif + + tcb->snd.ptr += ssize; + /* If this is the first transmission of a range of sequence + * numbers, record it so we'll accept acknowledgments + * for it later + */ + if(seq_gt(tcb->snd.ptr,tcb->snd.nxt)) + tcb->snd.nxt = tcb->snd.ptr; + + if(tcb->flags.ts_ok && seg.flags.ack){ + seg.flags.tstamp = 1; + seg.tsval = msclock(); + seg.tsecr = tcb->ts_recent; + } + /* Generate TCP header, compute checksum, and link in data */ + htontcp(&seg,&dbp,tcb->conn.local.address, + tcb->conn.remote.address); + + /* If we're sending some data or flags, start retransmission + * and round trip timers if they aren't already running. + */ + if(ssize != 0){ + /* Set round trip timer. */ + rto = backoff(tcb->backoff) * (4 * tcb->mdev + tcb->srtt); + set_timer(&tcb->timer,max(MIN_RTO,rto)); + if(!run_timer(&tcb->timer)) + start_timer(&tcb->timer); + + /* If round trip timer isn't running, start it */ + if(tcb->flags.ts_ok || !tcb->flags.rtt_run){ + tcb->flags.rtt_run = 1; + tcb->rtt_time = msclock(); + tcb->rttseq = tcb->snd.ptr; + tcb->rttack = tcb->snd.una; + } + } + if(tcb->flags.retran) + tcpRetransSegs++; + else + tcpOutSegs++; + + ip_send(tcb->conn.local.address,tcb->conn.remote.address, + TCP_PTCL,tcb->tos,0,&dbp,len_p(dbp),0,0); + } +} diff --git a/src/nos/internet/tcpout.l b/src/nos/internet/tcpout.l new file mode 100644 index 00000000..75771589 --- /dev/null +++ b/src/nos/internet/tcpout.l @@ -0,0 +1,2057 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef unsigned char uchar; +typedef unsigned int uint; + + +typedef uchar bool_t; +typedef uint count_t; + + +typedef uint size_t; + + + +typedef int ssize_t; + + +typedef unsigned int mode_t; + + + + + + +typedef long off_t; + + + +typedef struct s_time { + uint t_time; + uint t_date; +} dostime_t; + +typedef unsigned long time_t; + + +struct tms { + time_t tms_utime; + time_t tms_stime; + time_t tms_cutime; + time_t tms_cstime; + time_t tms_etime; +}; + + + + +struct utimbuf { + time_t actime; + time_t modtime; +}; + + + +struct stat { + uint st_dev; + uint st_ino; + mode_t st_mode; + uint st_nlink; + uint st_uid; + uint st_gid; + uint st_rdev; + off_t st_size; + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +}; + + + + +typedef struct direct { + unsigned int d_ino; + uchar d_name[14]; +} direct_t; + + + + + + + + + + + + + + + + + + + + + + + + + +extern void free (void *); +extern void *malloc (size_t); +extern void *realloc (void *, size_t); +extern void *calloc (size_t, size_t); +extern void *alloca (size_t); + + + + + + + + + +typedef struct { + int quot; + int rem; +} div_t; + + +typedef struct { + long int quot; + long int rem; +} ldiv_t; + + + + + +extern void _exit (int); +extern void exit (int); +extern void abort (void); + +extern unsigned int sleep (unsigned int seconds); + +extern int rand (void); +extern void srand (uint seed); + +extern char *__longtoa (unsigned long, char *, int, char, char); +extern char *itoa (int value, char *strP, int radix); +extern char *ultoa (unsigned long value, char *strP, int radix); +extern char *ltoa (long value, char *strP, int radix); + +extern int atoi (char *str); +extern long atol (char *strP); + +extern char *_itoa (int value); +extern char *_ltoa (long value); +extern char *_ultoa (unsigned long value); + +extern char *ultostr (unsigned long value, int radix); +extern char *ltostr (long value, int radix); + +extern long strtol (char * nptr, char ** endptr, int base); +extern unsigned long strtoul (char * nptr, + char ** endptr, int base); + +extern double strtod (char * nptr, char ** endptr); + + +extern char **environ; +extern char *getenv (char *); +extern int putenv (char *); +extern int setenv (char *, char *, int); +extern void unsetenv (char *); + +typedef void (*atexit_t) (int); +typedef void (*onexit_t) (int, void *); +extern int atexit (atexit_t); +extern int on_exit (onexit_t, void *arg); +extern onexit_t __cleanup; + +extern char *crypt (char *__key, char *__salt); + +typedef int (*cmp_func_t) (void *, void *); + +extern int _bsearch; +extern void *bsearch (void *key, void *base, size_t num, size_t size, cmp_func_t cmp); +extern void *lfind (void *key, void *base, size_t *num, size_t size, cmp_func_t cmp); +extern void *lsearch (void *key, void *base, size_t *num, size_t size, cmp_func_t cmp); +extern void *_qbuf; +extern void qsort (void *base, size_t num, size_t size, cmp_func_t cmp); + +extern int opterr; +extern int optind; +extern char *optarg; +extern int getopt (int argc, char *argv[], char *optstring); + +extern char *getpass(char *prompt); + +extern int _argc; +extern char **_argv; + + + + + + + + + + + + + + + + + + + + + + + + +extern size_t strlen (const char * __str); + +extern char * strcat (char *, const char *); +extern char * strcpy (char *, const char *); +extern int strcmp (const char *, const char *); + +extern char * strncat (char *, const char *, size_t); +extern char * strncpy (char *, const char *, size_t); +extern int strncmp (const char *, const char *, size_t); + +extern int stricmp (const char *, const char *); +extern strnicmp (const char *, const char *, size_t); + +extern char * strchr (const char *, int); +extern char * strrchr (const char *, int); +extern char * strdup (const char *); + + +extern void * memcpy (void *, const void *, size_t); +extern void * memccpy (void *, const void *, int, size_t); +extern void * memchr (const void *, int, size_t); +extern void * memset (void *, int, size_t); +extern int memcmp (const void *, const void *, size_t); + +extern void * memmove (void *, const void *, size_t); + + + + + + + + +char *strpbrk (const char *, const char *); +char *strsep (char **, const char *); +char *strstr (const char *, const char *); +char *strtok (char *, const char *); +size_t strcspn (const char *, const char *); +size_t strspn (const char *, const char *); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef long int32; +typedef unsigned long uint32; +typedef unsigned short uint16; +typedef unsigned char byte_t; +typedef unsigned char uint8; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +int availmem(void); +void *callocw(unsigned nelem,unsigned size); +int32 clock(); +int dirps(void); +void free(void *); + +int getopt(int argc,char *argv[],char *opts); +void getrand(unsigned char *buf,int len); +int htob(char c); +int htoi(char *); +int readhex(uint8 *,char *,int); +long htol(char *); +char *inbuf(uint16 port,char *buf,uint16 cnt); +uint16 hash_ip(int32 addr); +int istate(void); +void logmsg(int s,char *fmt, ...); +int ilog2(uint16 x); +void *ltop(long); +void *malloc(size_t nb); +void *mallocw(size_t nb); +int memcnt(uint8 *buf,uint8 c,int size); +void memxor(uint8 *,uint8 *,unsigned int); +char *outbuf(uint16 port,char *buf,uint16 cnt); +int32 rdclock(void); +void restore(int); +void rip(char *); +char *smsg(char *msgs[],unsigned nmsgs,unsigned n); +void stktrace(unsigned short dummy_parameter); + +char *strdupw(const char *); + +int urandom(unsigned int n); +int wildmat(char *s,char *p,char **argv); + + + + + + + + + + + + + + + + + + + + + + + + + + +extern int optind; +extern char *optarg; + + +extern int32 Memthresh; + + +extern int32 Clock; + + +extern char Badhost[]; +extern char Nospace[]; +extern char Notval[]; +extern char *Hostname; +extern char Version[]; +extern char Whitespace[]; + + +extern char Eol[]; + + +extern char System[]; + + +extern char *Tmpdir; + +extern unsigned Nfiles; +extern unsigned Nsock; + +extern void (*Gcollect[])(); + + + +unsigned char inportb(unsigned short port); +void outportb(unsigned short port, unsigned char value); +void enable(void); +void disable(void); +void abyte(char data); +void acrlf(void); +void ahexw(int data); +void amess(char *ptr); +void copyr(unsigned long src, unsigned long dest, size_t count); +int diag_open(int dev); +int diag_close(int dev); +int diag_write(int dev, const char *buffer, size_t count); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct timer { + struct timer *next; + int32 duration; + int32 expiration; + void (*func)(void *); + void *arg; + char state; + + + +}; + + + + + + + + + + + +extern int Tick; +extern void (*Cfunc[])(); + + +void kalarm(int32 ms); +int ppause(int32 ms); +int32 read_timer(struct timer *t); +void set_timer(struct timer *t,int32 x); +void start_timer(struct timer *t); +void stop_timer(struct timer *timer); +char *tformat(int32 t); + + +int32 msclock(void); +int32 secclock(void); +int32 usclock(void); + + + + + + + + + + + + + + + + + + +struct _file{ + unsigned cookie; + + int refcnt; + struct _file *prev; + struct _file *next; + + int fd; + long offset; + + enum { + _FL_FILE, + _FL_SOCK, + _FL_ASY, + + _FL_DIAG, + + _FL_DISPLAY, + _FL_PIPE + } type; + + enum { + _IOFBF=1, + _IOLBF, + _IONBF + } bufmode; + + struct { + unsigned int err:1; + unsigned int eof:1; + unsigned int ascii:1; + unsigned int append:1; + unsigned int tmp:1; + unsigned int partread:1; + } flags; + struct mbuf *obuf; + struct mbuf *ibuf; + char eol[3]; + int bufsize; + void *ptr; +}; + +typedef struct _file FILE; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef struct { + unsigned int j_sp; + unsigned int j_ss; + unsigned int j_bc; + unsigned int j_ix; + unsigned int j_iy; + unsigned int j_ip; + unsigned int j_cs; +} jmp_buf[1]; + +void longjmp(jmp_buf jmpb, int retval); +int setjmp(jmp_buf jmpb); + + + + + + + + + + + + + + + +struct proc { + struct proc *prev; + struct proc *next; + + struct { + unsigned int suspend:1; + unsigned int waiting:1; + unsigned int istate:1; + unsigned int sset:1; + unsigned int freeargs:1; + } flags; + jmp_buf env; + jmp_buf sig; + int signo; + void *event; + uint16 *stack; + unsigned stksize; + char *name; + int retval; + struct timer alarm; + FILE *input; + FILE *output; + int iarg; + void *parg1; + void *parg2; + + void (*startp)(int i, void * p, void *u); + +}; +extern struct proc *Waittab[]; +extern struct proc *Rdytab; +extern struct proc *Curproc; +extern struct proc *Susptab; +extern int Stkchk; +extern int Kdebug; + +struct sigentry { + void *event; + int n; +}; +struct ksig { + struct sigentry entry[200 ]; + struct sigentry *wp; + struct sigentry *rp; + volatile int nentries; + int maxentries; + int32 duksigs; + int lostsigs; + int32 ksigs; + int32 ksigwakes; + int32 ksignops; + int32 ksigsqueued; + int32 kwaits; + int32 kwaitnops; + int32 kwaitints; +}; +extern struct ksig Ksig; + + + + + + + + + + + + + +void alert(struct proc *pp,int val); +void chname(struct proc *pp,char *newname); +void killproc(struct proc *pp); +void killself(void); + + + +struct proc *mainproc(char *name); + +struct proc *newproc(char *name,unsigned int stksize, + void (*pc)(int,void *,void *), + int iarg,void *parg1,void *parg2,int freeargs); +void ksignal(void *event,int n); +int kwait(void *event); +void resume(struct proc *pp); +int setsig(int val); +void suspend(struct proc *pp); + + +void chkstk(void); +void kinit(void); +unsigned phash(void *event); + +void psetup(struct proc *pp); + + + + + + + + + + + + + + + + + + + + + + + + + + + +FILE *asyopen(char *name,char *mode); + +FILE *diagopen(int dev, char *mode); + +int close(int fd); +FILE *displayopen(char *mode,int noscrol,int sfsize); +int fblock(FILE *fp,int mode); +int fclose(FILE *fp); +void fcloseall(void); +FILE *fdopen(int handle,char *mode); +FILE *fdup(FILE *fp); +int fflush(FILE *fp); +int fgetc(FILE *fp); +int _fgetc(FILE *fp); +char *fgets(char *buf,int len,FILE *fp); +void flushall(void); +int fmode (FILE *fp,int mode); +char *fpname(FILE *fp); +int fprintf(FILE *fp,char *fmt,...); +int fputc(int c,FILE *fp); +int fputs(char *buf,FILE *fp); +size_t fread(void *ptr,size_t size,size_t n,FILE *fp); +FILE *freopen(char *name,char *mode,FILE *fp); +int fseek(FILE *fp,long offset,int whence); +long ftell(FILE *fp); +size_t fwrite(void *ptr,size_t size,size_t n,FILE *fp); +char *gets(char *s); +void perror(const char *s); +FILE *pipeopen(void); +int printf(char *fmt,...); +int puts(char *s); +int rename(const char *,const char *); +void setbuf(FILE *fp,char *buf); +int seteol(FILE *fp,char *seq); +int setvbuf(FILE *fp,char *buf,int type,int size); +int sprintf(char *,char *, ...); +int sscanf(char *,char *,...); +FILE *tmpfile(void); +char *tmpnam(char *); +int ungetc(int c,FILE *fp); +int unlink(const char *); +int vfprintf(FILE *fp,char *fmt, void *args); +int vprintf(char *fmt, void *args); +int vsprintf(char *,char *,void *); + +extern int _clrtmp; + + + + + + + + + + + + + + + +int dprintf(int level, const char *format, ...); + + + + + + + + +extern unsigned Ibufsize; +extern int Nibufs; +extern long Pushdowns; +extern long Pushalloc; + + +struct mbuf { + struct mbuf *next; + struct mbuf *anext; + uint16 size; + int refcnt; + struct mbuf *dup; + uint8 *data; + uint16 cnt; +}; + + + + + + + + + + + + +struct mbuf *alloc_mbuf(uint16 size); +struct mbuf *free_mbuf(struct mbuf **bpp); + +struct mbuf *ambufw(uint16 size); +struct mbuf *copy_p(struct mbuf *bp,uint16 cnt); +uint16 dup_p(struct mbuf **hp,struct mbuf *bp,uint16 offset,uint16 cnt); +uint16 extract(struct mbuf *bp,uint16 offset,void *buf,uint16 len); +struct mbuf *free_p(struct mbuf **bpp); +uint16 len_p(struct mbuf *bp); +void trim_mbuf(struct mbuf **bpp,uint16 length); +int write_p(FILE *fp,struct mbuf *bp); + +struct mbuf *dequeue(struct mbuf **q); +void enqueue(struct mbuf **q,struct mbuf **bpp); +void free_q(struct mbuf **q); +uint16 len_q(struct mbuf *bp); + +struct mbuf *qdata(void *data,uint16 cnt); +uint16 dqdata(struct mbuf *bp,void *buf,unsigned cnt); + +void append(struct mbuf **bph,struct mbuf **bpp); +void pushdown(struct mbuf **bpp,void *buf,uint16 size); +uint16 pullup(struct mbuf **bph,void *buf,uint16 cnt); + + + + + + +int pull8(struct mbuf **bpp); +long pull16(struct mbuf **bpp); +int32 pull32(struct mbuf **bpp); + +uint16 get16(uint8 *cp); +int32 get32(uint8 *cp); +uint8 *put16(uint8 *cp,uint16 x); +uint8 *put32(uint8 *cp,int32 x); + +void iqstat(void); +void refiq(void); +void mbuf_crunch(struct mbuf **bpp); + +void mbufsizes(void); +void mbufstat(void); +void mbuf_garbage(int red); + + + + + + + + + + + + + + + +extern int32 Ip_addr; +extern int Net_error; +extern char Inet_eol[]; + + + + + + + + + + + + + + + + + + + +struct socket { + int32 address; + uint16 port; +}; + + +struct connection { + struct socket local; + struct socket remote; +}; + +int32 resolve(char *name); +int32 resolve_mx(char *name); +char *resolve_a(int32 ip_address, int shorten); + + +int32 aton(char *s); +char *inet_ntoa(int32 a); +char *pinet(struct socket *s); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct pseudo_header { + int32 source; + int32 dest; + char protocol; + uint16 length; +}; + + +struct mib_entry { + char *name; + union { + int32 integer; + } value; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct iface; +struct iftype { + char *name; + int (*send)(struct mbuf **,struct iface *,int32,uint8); + + int (*output)(struct iface *,uint8 *,uint8 *,uint16,struct mbuf **); + + char *(*format)(char *,uint8 *); + + int (*scan)(uint8 *,char *); + + int type; + int hwalen; + void (*rcvf)(struct iface *,struct mbuf **); + + int (*addrtest)(struct iface *,struct mbuf *); + + void (*trace)(FILE *,struct mbuf **,int); + + int (*dinit)(struct iface *,int32,int,char **); + + int (*dstat)(struct iface *); + +}; +extern struct iftype Iftypes[]; + + + +struct iface { + struct iface *next; + char *name; + + int32 addr; + int32 broadcast; + int32 netmask; + + uint16 mtu; + + uint16 trace; + + + + + + + FILE *trfp; + + struct iface *forw; + + struct proc *rxproc; + struct proc *txproc; + struct proc *supv; + + struct mbuf *outq; + int outlim; + int txbusy; + + void *dstate; + int (*dtickle)(struct iface *); + + void (*dstatus)(struct iface *); + + + + int dev; + + int32 (*ioctl)(struct iface *,int cmd,int set,int32 val); + + int (*iostatus)(struct iface *,int cmd,int32 val); + + int (*stop)(struct iface *); + uint8 *hwaddr; + + + void *edv; + int xdev; + struct iftype *iftype; + + + int (*send)(struct mbuf **,struct iface *,int32,uint8); + + int (*output)(struct iface *,uint8 *,uint8 *,uint16,struct mbuf **); + + int (*raw)(struct iface *,struct mbuf **); + + void (*show)(struct iface *); + + int (*discard)(struct iface *,struct mbuf **); + int (*echo)(struct iface *,struct mbuf **); + + + int32 ipsndcnt; + int32 rawsndcnt; + int32 iprecvcnt; + int32 rawrecvcnt; + int32 lastsent; + int32 lastrecv; +}; +extern struct iface *Ifaces; +extern struct iface Loopback; +extern struct iface Encap; + + +struct qhdr { + uint8 tos; + int32 gateway; +}; + +extern char Noipaddr[]; +extern struct mbuf *Hopper; + + +int bitbucket(struct iface *ifp,struct mbuf **bp); +int if_detach(struct iface *ifp); +struct iface *if_lookup(char *name); +char *if_name(struct iface *ifp,char *comment); +void if_tx(int dev,void *arg1,void *unused); +struct iface *ismyaddr(int32 addr); +void network(int i,void *v1,void *v2); +int nu_send(struct mbuf **bpp,struct iface *ifp,int32 gateway,uint8 tos); +int nu_output(struct iface *,uint8 *,uint8 *,uint16,struct mbuf **); +int setencap(struct iface *ifp,char *mode); + + +int net_route(struct iface *ifp,struct mbuf **bpp); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern char Hashtab[]; + + +extern struct mib_entry Ip_mib[]; + + + + + + + + + + + + + + + + + + + + + + + + + +struct ip { + int32 source; + int32 dest; + uint16 length; + uint16 id; + uint16 offset; + uint16 checksum; + + struct { + unsigned int congest:1; + unsigned int df:1; + unsigned int mf:1; + } flags; + + uint8 version; + uint8 tos; + uint8 ttl; + uint8 protocol; + uint8 optlen; + uint8 options[40 ]; +}; + + + + + + + + + + + + + + + + + + + + + +struct route { + struct route *prev; + struct route *next; + int32 target; + unsigned int bits; + int32 gateway; + int32 metric; + struct iface *iface; + struct { + unsigned int rtprivate:1; + unsigned int rttrig:1; + } flags; + struct timer timer; + int32 uses; +}; +extern struct route *Routes[32][7 ]; +extern struct route R_default; + + + + +struct rt_cache { + int32 target; + struct route *route; +}; +extern struct rt_cache Rt_cache[]; +extern int32 Rtlookups; +extern int32 Rtchits; + +extern uint16 Id_cntr; + + +struct reasm { + struct reasm *next; + struct timer timer; + struct frag *fraglist; + uint16 length; + int32 source; + int32 dest; + uint16 id; + char protocol; +}; + + +struct frag { + struct frag *prev; + struct frag *next; + struct mbuf *buf; + uint16 offset; + uint16 last; +}; + +extern struct reasm *Reasmq; + + +struct raw_ip { + struct raw_ip *next; + + struct mbuf *rcvq; + void (*r_upcall)(struct raw_ip *); + int protocol; + int user; +}; + +extern struct raw_ip *Raw_ip; + + +struct iplink { + char proto; + char *name; + void (*funct)(struct iface *,struct ip *,struct mbuf **,int,int32); + void (*dump)(FILE *,struct mbuf **,int32,int32,int); +}; +extern struct iplink Iplink[]; + + +extern int Tcp_interact[]; + +extern int Ip_trace; + + +void ip_garbage(int drastic); +void ip_recv(struct iface *iface,struct ip *ip,struct mbuf **bpp, + int rxbroadcast, int32 said); +void ipip_recv(struct iface *iface,struct ip *ip,struct mbuf **bp, + int rxbroadcast,int32 said); +int ip_send(int32 source,int32 dest,char protocol,char tos,char ttl, + struct mbuf **bpp,uint16 length,uint16 id,char df); +struct raw_ip *raw_ip(int protocol,void (*r_upcall)(struct raw_ip *) ); +void del_ip(struct raw_ip *rrp); +void rquench(struct iface *ifp,int drop); + + +void dumpip(struct iface *iface,struct ip *ip,struct mbuf *bp,int32 spi); + + +void ipinit(void); +uint16 ip_mtu(int32 addr); +void encap_tx(int dev,void *arg1,void *unused); +int ip_encap(struct mbuf **bpp,struct iface *iface,int32 gateway,uint8 tos); +void ip_proc(struct iface *iface,struct mbuf **bpp); +int ip_route(struct iface *i_iface,struct mbuf **bpp,int rxbroadcast); +int32 locaddr(int32 addr); +void rt_merge(int trace); +struct route *rt_add(int32 target,unsigned int bits,int32 gateway, + struct iface *iface,int32 metric,int32 ttl,uint8 private); +int rt_drop(int32 target,unsigned int bits); +struct route *rt_lookup(int32 target); +struct route *rt_blookup(int32 target,unsigned int bits); + + +uint16 cksum(struct pseudo_header *ph,struct mbuf *m,uint16 len); +uint16 eac(int32 sum); +void htonip(struct ip *ip,struct mbuf **data,int cflag); +int ntohip(struct ip *ip,struct mbuf **bpp); + + +uint16 lcsum(uint16 *wp,uint16 len); + + +void net_sim(struct mbuf *bp); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct tcp { + uint16 source; + uint16 dest; + int32 seq; + int32 ack; + uint16 wnd; + uint16 checksum; + uint16 up; + uint16 mss; + uint8 wsopt; + uint32 tsval; + uint32 tsecr; + struct { + unsigned int congest:1; + unsigned int urg:1; + unsigned int ack:1; + unsigned int psh:1; + unsigned int rst:1; + unsigned int syn:1; + unsigned int fin:1; + unsigned int mss:1; + unsigned int wscale:1; + unsigned int tstamp:1; + } flags; +}; + + + + + + + + + + + +struct reseq { + struct reseq *next; + struct tcp seg; + struct mbuf *bp; + uint16 length; + char tos; +}; + +enum tcp_state { + TCP_CLOSED=1, + TCP_LISTEN, + TCP_SYN_SENT, + TCP_SYN_RECEIVED, + TCP_ESTABLISHED, + TCP_FINWAIT1, + TCP_FINWAIT2, + TCP_CLOSE_WAIT, + TCP_LAST_ACK, + TCP_CLOSING, + TCP_TIME_WAIT +}; + + +struct tcb { + struct tcb *next; + + struct connection conn; + + enum tcp_state state; + + char reason; + + + + + + + uint8 type; + uint8 code; + + + struct { + int32 una; + int32 nxt; + int32 ptr; + int32 wl1; + int32 wl2; + int32 wnd; + uint16 up; + uint8 wind_scale; + } snd; + int32 iss; + int32 resent; + int32 cwind; + int32 ssthresh; + int dupacks; + + + struct { + int32 nxt; + int32 wnd; + uint16 up; + uint8 wind_scale; + } rcv; + int32 last_ack_sent; + int32 ts_recent; + + int32 irs; + int32 rerecv; + int32 mss; + + int32 window; + int32 limit; + + void (*r_upcall)(struct tcb *tcb,int32 cnt); + + void (*t_upcall)(struct tcb *tcb,int32 cnt); + + void (*s_upcall)(struct tcb *tcb,int old,int new); + + struct { + unsigned int force:1; + unsigned int clone:1; + unsigned int retran:1; + unsigned int active:1; + unsigned int synack:1; + unsigned int rtt_run:1; + unsigned int congest:1; + int ts_ok:1; + int ws_ok:1; + } flags; + char tos; + int backoff; + + struct mbuf *rcvq; + struct mbuf *sndq; + int32 rcvcnt; + int32 sndcnt; + + + + + struct reseq *reseq; + struct timer timer; + int32 rtt_time; + int32 rttseq; + int32 rttack; + int32 srtt; + int32 mdev; + int32 rtt; + + int user; + + + int32 quench; + int32 unreach; + int32 timeouts; + int32 lastack; + int32 txbw; + int32 lastrx; + int32 rxbw; +}; + +struct tcp_rtt { + int32 addr; + int32 srtt; + int32 mdev; +}; +extern struct tcp_rtt Tcp_rtt[]; +extern int (*Kicklist[])(); + + +struct tcp_stat { + uint16 runt; + uint16 checksum; + uint16 conout; + uint16 conin; + uint16 resets; + uint16 bdcsts; +}; +extern struct mib_entry Tcp_mib[]; + + + + + + + + + + + + + + + + +extern struct tcb *Tcbs; +extern char *Tcpstates[]; +extern char *Tcpreasons[]; + + +extern int Tcp_tstamps; +extern int32 Tcp_irtt; +extern uint16 Tcp_limit; +extern uint16 Tcp_mss; +extern int Tcp_syndata; +extern int Tcp_trace; +extern uint16 Tcp_window; + +void st_tcp(struct tcb *tcb); + + +void htontcp(struct tcp *tcph,struct mbuf **data, + int32 ipsrc,int32 ipdest); +int ntohtcp(struct tcp *tcph,struct mbuf **bpp); + + +void reset(struct ip *ip,struct tcp *seg); +void send_syn(struct tcb *tcb); +void tcp_input(struct iface *iface,struct ip *ip,struct mbuf **bpp, + int rxbroadcast,int32 said); +void tcp_icmp(int32 icsource,int32 source,int32 dest, + uint8 type,uint8 code,struct mbuf **bpp); + + +void close_self(struct tcb *tcb,int reason); +struct tcb *create_tcb(struct connection *conn); +struct tcb *lookup_tcb(struct connection *conn); +void rtt_add(int32 addr,int32 rtt); +struct tcp_rtt *rtt_get(int32 addr); +int seq_ge(int32 x,int32 y); +int seq_gt(int32 x,int32 y); +int seq_le(int32 x,int32 y); +int seq_lt(int32 x,int32 y); +int seq_within(int32 x,int32 low,int32 high); +void settcpstate(struct tcb *tcb,enum tcp_state newstate); +void tcp_garbage(int red); + + +void tcp_output(struct tcb *tcb); + + +int32 backoff(int n); +void tcp_timeout(void *p); + + +int close_tcp(struct tcb *tcb); +int del_tcp(struct tcb *tcb); +int kick(int32 addr); +int kick_tcp(struct tcb *tcb); +struct tcb *open_tcp(struct socket *lsocket,struct socket *fsocket, + int mode,uint16 window, + void (*r_upcall)(struct tcb *tcb,int32 cnt), + void (*t_upcall)(struct tcb *tcb,int32 cnt), + void (*s_upcall)(struct tcb *tcb,int old,int new), + int tos,int user); +int32 recv_tcp(struct tcb *tcb,struct mbuf **bpp,int32 cnt); +void reset_all(void); +void reset_tcp(struct tcb *tcb); +long send_tcp(struct tcb *tcb,struct mbuf **bpp); +char *tcp_port(uint16 n); +int tcpval(struct tcb *tcb); + + + + + + + +void +tcp_output(tcb) +register struct tcb *tcb; +{ + struct mbuf *dbp; + struct tcp seg; + uint16 ssize; + + uint16 dsize; + int32 usable; + int32 sent; + + int32 rto; + + if(tcb == 0) + return; + + switch(tcb->state){ + case TCP_LISTEN: + case TCP_CLOSED: + return; + } + for(;;){ + memset(&seg,0,sizeof(seg)); + + sent = tcb->snd.ptr - tcb->snd.una; + + + + + + + usable = ((tcb->snd.wnd)<(tcb->cwind)?(tcb->snd.wnd):(tcb->cwind)) ; + if(usable > sent) + usable -= sent; + else if(usable == 0 && sent == 0) + usable = 1; + else + usable = 0; + + + + + + ssize = ((tcb->sndcnt - sent)<(usable)?(tcb->sndcnt - sent):(usable)) ; + ssize = ((ssize)<(tcb->mss)?(ssize):(tcb->mss)) ; + + + + + + + + + if(!tcb->flags.force && sent != 0 && ssize < tcb->mss + && !(tcb->state == TCP_FINWAIT1 && ssize == tcb->sndcnt-sent)){ + ssize = 0; + } + + + + + if(!tcb->flags.synack && !Tcp_syndata){ + if(tcb->snd.ptr == tcb->iss) + ssize = ((1)<(ssize)?(1):(ssize)) ; + else + ssize = 0; + } + + + + + + if(tcb->flags.force && tcb->snd.ptr != tcb->snd.nxt) + ssize = 0; + if(ssize == 0 && !tcb->flags.force) + break; + + tcb->flags.force = 0; + + seg.source = tcb->conn.local.port; + seg.dest = tcb->conn.remote.port; + + + + + + + + seg.flags.ack = 1; + seg.flags.congest = tcb->flags.congest; + + if(tcb->state == TCP_SYN_SENT) + seg.flags.ack = 0; + + dsize = ssize; + if(!tcb->flags.synack && tcb->snd.ptr == tcb->iss){ + + seg.flags.syn = 1; + dsize--; + + seg.mss = Tcp_mss; + seg.flags.mss = 1; + seg.wsopt = 0 ; + seg.flags.wscale = 1; + if(Tcp_tstamps){ + seg.flags.tstamp = 1; + seg.tsval = msclock(); + } + } + + + + if(ssize == 0) + seg.seq = tcb->snd.nxt; + else + seg.seq = tcb->snd.ptr; + tcb->last_ack_sent = seg.ack = tcb->rcv.nxt; + if(seg.flags.syn || !tcb->flags.ws_ok) + seg.wnd = tcb->rcv.wnd; + else + seg.wnd = tcb->rcv.wnd >> tcb->rcv.wind_scale; + + + + + + + dbp = ambufw(70 +dsize); + dbp->data += 70 ; + if(dsize != 0){ + int32 offset; + + + + + offset = sent; + if(!tcb->flags.synack && sent != 0) + offset--; + + dbp->cnt = extract(tcb->sndq,(uint16)offset,dbp->data,dsize); + if(dbp->cnt != dsize){ + + + + seg.flags.fin = 1; + dsize--; + } + } + + + + if(dsize != 0 && sent + ssize == tcb->sndcnt) + seg.flags.psh = 1; + + + + + + if(tcb->snd.ptr < tcb->snd.nxt) + tcb->resent += ((tcb->snd.nxt - tcb->snd.ptr)<(ssize)?(tcb->snd.nxt - tcb->snd.ptr):(ssize)) ; + + tcb->snd.ptr += ssize; + + + + + if(seq_gt(tcb->snd.ptr,tcb->snd.nxt)) + tcb->snd.nxt = tcb->snd.ptr; + + if(tcb->flags.ts_ok && seg.flags.ack){ + seg.flags.tstamp = 1; + seg.tsval = msclock(); + seg.tsecr = tcb->ts_recent; + } + + htontcp(&seg,&dbp,tcb->conn.local.address, + tcb->conn.remote.address); + + + + + if(ssize != 0){ + + rto = backoff(tcb->backoff) * (4 * tcb->mdev + tcb->srtt); + set_timer(&tcb->timer,((500L )>(rto)?(500L ):(rto)) ); + if(!((&tcb->timer)->state == 1)) + start_timer(&tcb->timer); + + + if(tcb->flags.ts_ok || !tcb->flags.rtt_run){ + tcb->flags.rtt_run = 1; + tcb->rtt_time = msclock(); + tcb->rttseq = tcb->snd.ptr; + tcb->rttack = tcb->snd.una; + } + } + if(tcb->flags.retran) + Tcp_mib[12].value.integer++; + else + Tcp_mib[11].value.integer++; + + ip_send(tcb->conn.local.address,tcb->conn.remote.address, + 6 ,tcb->tos,0,&dbp,len_p(dbp),0,0); + } +} diff --git a/src/nos/internet/tcpsock.c b/src/nos/internet/tcpsock.c new file mode 100644 index 00000000..3d9ccc4a --- /dev/null +++ b/src/nos/internet/tcpsock.c @@ -0,0 +1,436 @@ +/* tcpsock.c */ + +#include /* Nick */ +#include "global.h" +#include "tcp.h" +#include "socket.h" +#include "usock.h" + +static void s_trcall(struct tcb *tcb,int32 cnt); +static void s_tscall(struct tcb *tcb,int old,int new); +static void s_ttcall(struct tcb *tcb,int32 cnt); +static void trdiscard(struct tcb *tcb,int32 cnt); +static void autobind(struct usock *up); + +uint16 Lport = 1024; + +int +so_tcp(struct usock *up,int protocol) +{ + up->type = TYPE_TCP; + return 0; +} +int +so_tcp_listen(struct usock *up,int backlog) +{ + struct sockaddr_in *local; + struct socket lsock; + + if(up->name == NULL) + autobind(up); + + local = (struct sockaddr_in *)up->name; + lsock.address = local->sin_addr.s_addr; + lsock.port = local->sin_port; + up->cb.tcb = open_tcp(&lsock,NULL, + backlog ? TCP_SERVER:TCP_PASSIVE,0, + s_trcall,s_ttcall,s_tscall,up->tos,up->index); + return 0; +} +int +so_tcp_conn(struct usock *up) +{ + int s; + struct tcb *tcb; + struct socket lsock,fsock; + struct sockaddr_in *local,*remote; + + if(up->name == NULL){ + autobind(up); + } + + if(checkipaddr(up->peername,up->peernamelen) == -1){ + errno = EAFNOSUPPORT; + return -1; + } + s = up->index; + /* Construct the TCP-style ports from the sockaddr structs */ + local = (struct sockaddr_in *)up->name; + remote = (struct sockaddr_in *)up->peername; + + if(local->sin_addr.s_addr == INADDR_ANY) + /* Choose a local address */ + local->sin_addr.s_addr = locaddr(remote->sin_addr.s_addr); + + lsock.address = local->sin_addr.s_addr; + lsock.port = local->sin_port; + fsock.address = remote->sin_addr.s_addr; + fsock.port = remote->sin_port; + + /* Open the TCB in active mode */ + up->cb.tcb = open_tcp(&lsock,&fsock,TCP_ACTIVE,0, + s_trcall,s_ttcall,s_tscall,up->tos,s); + + /* Wait for the connection to complete */ + while((tcb = up->cb.tcb) != NULL && tcb->state != TCP_ESTABLISHED){ + if(up->noblock){ + errno = EWOULDBLOCK; + return -1; + } else if((errno = kwait(up)) != 0){ + return -1; + } + } + if(tcb == NULL){ + /* Probably got refused */ + FREE(up->peername); + errno = ECONNREFUSED; + return -1; + } + return 0; +} +int +so_tcp_recv(struct usock *up,struct mbuf **bpp,struct sockaddr *from, + int *fromlen) +{ + long cnt; + struct tcb *tcb; + + while((tcb = up->cb.tcb) != NULL && tcb->r_upcall != trdiscard + && (cnt = recv_tcp(tcb,bpp,0)) == -1){ + if(up->noblock){ + errno = EWOULDBLOCK; + return -1; + } else if((errno = kwait(up)) != 0){ + return -1; + } + } + if(tcb == NULL){ + /* Connection went away */ + errno = ENOTCONN; + return -1; + } else if(tcb->r_upcall == trdiscard){ + /* Receive shutdown has been done */ + errno = ENOTCONN; /* CHANGE */ + return -1; + } + return cnt; +} +int +so_tcp_send(struct usock *up,struct mbuf **bpp,struct sockaddr *to) +{ + struct tcb *tcb; + long cnt; + + if((tcb = up->cb.tcb) == NULL){ + free_p(bpp); + errno = ENOTCONN; + return -1; + } + cnt = send_tcp(tcb,bpp); + + while((tcb = up->cb.tcb) != NULL && + tcb->sndcnt > tcb->window){ + /* Send queue is full */ + if(up->noblock){ + errno = EWOULDBLOCK; + return -1; + } else if((errno = kwait(up)) != 0){ + return -1; + } + } + if(tcb == NULL){ + errno = ENOTCONN; + return -1; + } + return cnt; +} +int +so_tcp_qlen(struct usock *up,int rtx) +{ + int len; + + switch(rtx){ + case 0: + len = up->cb.tcb->rcvcnt; + break; + case 1: + len = up->cb.tcb->sndcnt; + break; + } + return len; +} +int +so_tcp_kick(struct usock *up) +{ + kick_tcp(up->cb.tcb); + return 0; +} +int +so_tcp_shut(struct usock *up,int how) +{ + switch(how){ + case 0: /* No more receives -- replace upcall */ + up->cb.tcb->r_upcall = trdiscard; + break; + case 1: /* Send EOF */ + close_tcp(up->cb.tcb); + break; + case 2: /* Blow away TCB */ + reset_tcp(up->cb.tcb); + up->cb.tcb = NULL; + break; + } + return 0; +} +int +so_tcp_close(struct usock *up) +{ + if(up->cb.tcb != NULL){ /* In case it's been reset */ + up->cb.tcb->r_upcall = trdiscard; + /* Tell the TCP_CLOSED upcall there's no more socket */ + up->cb.tcb->user = -1; + close_tcp(up->cb.tcb); + } + return 0; +} +/* TCP receive upcall routine */ +static void +s_trcall(struct tcb *tcb,int32 cnt) +{ + /* Wake up anybody waiting for data, and let them run */ + ksignal(itop(tcb->user),1); + kwait(NULL); +} +/* TCP transmit upcall routine */ +static void +s_ttcall(struct tcb *tcb,int32 cnt) +{ + /* Wake up anybody waiting to send data, and let them run */ + ksignal(itop(tcb->user),1); + kwait(NULL); +} +/* TCP state change upcall routine */ +static void +s_tscall(struct tcb *tcb,int old,int new) +{ + int s,ns; + struct usock *up,*nup,*oup; + union sp sp; + + s = tcb->user; + oup = up = itop(s); + + switch(new){ + case TCP_CLOSED: + /* Clean up. If the user has already closed the socket, + * then up will be null (s was set to -1 by the close routine). + * If not, then this is an abnormal close (e.g., a reset) + * and clearing out the pointer in the socket structure will + * prevent any further operations on what will be a freed + * control block. Also wake up anybody waiting on events + * related to this tcb so they will notice it disappearing. + */ + if(up != NULL){ + up->cb.tcb = NULL; + up->errcodes[0] = tcb->reason; + up->errcodes[1] = tcb->type; + up->errcodes[2] = tcb->code; + ksignal(up,0); /* Wake up anybody waiting */ + } + del_tcp(tcb); + break; + case TCP_SYN_RECEIVED: + /* Handle an incoming connection. If this is a server TCB, + * then we're being handed a "clone" TCB and we need to + * create a new socket structure for it. In either case, + * find out who we're talking to and wake up the guy waiting + * for the connection. + */ + if(tcb->flags.clone){ + /* Clone the socket */ + ns = socket(AF_INET,SOCK_STREAM,0); + nup = itop(ns); + ASSIGN(*nup,*up); + tcb->user = ns; + nup->cb.tcb = tcb; + /* Allocate new memory for the name areas */ + nup->name = mallocw(SOCKSIZE); + nup->peername = mallocw(SOCKSIZE); + nup->index = ns; + /* Store the new socket # in the old one */ + up->rdysock = ns; + up = nup; + s = ns; + } else { + /* Allocate space for the peer's name */ + up->peername = mallocw(SOCKSIZE); + /* Store the old socket # in the old socket */ + up->rdysock = s; + } + /* Load the addresses. Memory for the name has already + * been allocated, either above or in the original bind. + */ + sp.sa = up->name; + sp.in->sin_family = AF_INET; + sp.in->sin_addr.s_addr = up->cb.tcb->conn.local.address; + sp.in->sin_port = up->cb.tcb->conn.local.port; + up->namelen = SOCKSIZE; + + sp.sa = up->peername; + sp.in->sin_family = AF_INET; + sp.in->sin_addr.s_addr = up->cb.tcb->conn.remote.address; + sp.in->sin_port = up->cb.tcb->conn.remote.port; + up->peernamelen = SOCKSIZE; + + /* Wake up the guy accepting it, and let him run */ + ksignal(oup,1); + kwait(NULL); + break; + default: /* Ignore all other state transitions */ + break; + } + ksignal(up,0); /* In case anybody's waiting */ +} +/* Discard data received on a TCP connection. Used after a receive shutdown or + * close_s until the TCB disappears. + */ +static void +trdiscard(struct tcb *tcb,int32 cnt) +{ + struct mbuf *bp; + + recv_tcp(tcb,&bp,cnt); + free_p(&bp); +} + +/* Issue an automatic bind of a local address */ +static void +autobind(struct usock *up) +{ + struct sockaddr_in local; + + local.sin_family = AF_INET; + local.sin_addr.s_addr = INADDR_ANY; + local.sin_port = Lport++; + bind(up->index,(struct sockaddr *)&local,sizeof(struct sockaddr_in)); +} +char * +tcpstate(struct usock *up) +{ + if(up->cb.tcb == NULL) + return NULL; + return Tcpstates[up->cb.tcb->state]; +} +int +so_tcp_stat(struct usock *up) +{ + st_tcp(up->cb.tcb); + return 0; +} + +struct inet { + struct inet *next; + struct tcb *tcb; + char *name; + int stack; + void (*task)(int,void *,void *); +}; +#define NULLINET (struct inet *)0 +struct inet *Inet_list; + +static void i_upcall(struct tcb *tcb,int oldstate,int newstate); + + +/* Start a TCP server. Create TCB in listen state and post upcall for + * when a connection comes in + */ +int +start_tcp(uint16 port,char *name,void (*task)(int,void *,void *),int stack) +{ + struct inet *in; + struct socket lsocket; + + in = (struct inet *)calloc(1,sizeof(struct inet)); + lsocket.address = INADDR_ANY; + lsocket.port = port; + in->tcb = open_tcp(&lsocket,NULL,TCP_SERVER,0,NULL,NULL,i_upcall,0,-1); + if(in->tcb == NULL){ + free(in); + return -1; + } + in->stack = stack; + in->task = task; + in->name = strdupw(name); + in->next = Inet_list; + Inet_list = in; + return 0; +} + +/* State change upcall that takes incoming TCP connections */ +static void +i_upcall(struct tcb *tcb,int oldstate,int newstate) +{ + struct inet *in; + struct sockaddr_in sock; + struct usock *up; + int s; + + if(oldstate != TCP_LISTEN) + return; /* "can't happen" */ + if(newstate == TCP_CLOSED){ + /* Called when server is shut down */ + del_tcp(tcb); + return; + } + for(in = Inet_list;in != NULLINET;in = in->next) + if(in->tcb->conn.local.port == tcb->conn.local.port) + break; + if(in == NULLINET) + return; /* not in table - "can't happen" */ + + /* Create a socket, hook it up with the TCB */ + s = socket(AF_INET,SOCK_STREAM,0); + up = itop(s); + sock.sin_family = AF_INET; + sock.sin_addr.s_addr = tcb->conn.local.address; + sock.sin_port = tcb->conn.local.port; + bind(s,(struct sockaddr *)&sock,SOCKSIZE); + + sock.sin_addr.s_addr = tcb->conn.remote.address; + sock.sin_port = tcb->conn.remote.port; + up->peernamelen = SOCKSIZE; + up->peername = mallocw(up->peernamelen); + memcpy(up->peername,&sock,SOCKSIZE); + up->cb.tcb = tcb; + tcb->user = s; + + /* Set the normal upcalls */ + tcb->r_upcall = s_trcall; + tcb->t_upcall = s_ttcall; + tcb->s_upcall = s_tscall; + + /* And spawn the server task */ + newproc(in->name,in->stack,in->task,s,NULL,NULL,0); +} +/* Close down a TCP server created earlier by inet_start */ +int +stop_tcp(uint16 port) +{ + struct inet *in,*inprev; + + inprev = NULLINET; + for(in = Inet_list;in != NULLINET;inprev=in,in = in->next) + if(in->tcb->conn.local.port == port) + break; + if(in == NULLINET) + return -1; + close_tcp(in->tcb); + free(in->name); + if(inprev != NULLINET) + inprev->next = in->next; + else + Inet_list = in->next; + free(in); + return 0; +} + diff --git a/src/nos/internet/tcpsubr.c b/src/nos/internet/tcpsubr.c new file mode 100644 index 00000000..0aa9c430 --- /dev/null +++ b/src/nos/internet/tcpsubr.c @@ -0,0 +1,333 @@ +/* Low level TCP routines: + * control block management + * sequence number logical operations + * state transitions + * RTT cacheing + * garbage collection + * + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "timer.h" +#include "mbuf.h" +#include "netuser.h" +#include "internet.h" +#include "tcp.h" +#include "ip.h" +#include +#include "po/messages.h" + +/* TCP connection states */ +char *Tcpstates[] = { + "", + "Closed", + "Listen", + "SYN sent", + "SYN recv", + "Estab", + "FINwait1", + "FINwait2", + "Closewait", + "Last ACK", + "Closing", + "Timewait" +}; + +/* TCP closing reasons */ +char *Tcpreasons[] = { + "Normal", + "Reset/Refused", + "Timeout", /* Not actually used */ + "ICMP" /* Not actually used */ +}; +struct tcb *Tcbs; /* Head of control block list */ +uint16 Tcp_mss = DEF_MSS; /* Maximum segment size to be sent with SYN */ +int32 Tcp_irtt = DEF_RTT; /* Initial guess at round trip time */ +int Tcp_trace; /* State change tracing flag */ +int Tcp_syndata; +struct tcp_rtt Tcp_rtt[RTTCACHE]; +struct mib_entry Tcp_mib[] = { + NULL, 0, + "tcpRtoAlgorithm", 4, /* Van Jacobsen's algorithm */ + "tcpRtoMin", 0, /* No lower bound */ + "tcpRtoMax", MAXINT32, /* No upper bound */ + "tcpMaxConn", -1L, /* No limit */ + "tcpActiveOpens", 0, + "tcpPassiveOpens", 0, + "tcpAttemptFails", 0, + "tcpEstabResets", 0, + "tcpCurrEstab", 0, + "tcpInSegs", 0, + "tcpOutSegs", 0, + "tcpRetransSegs", 0, + NULL, 0, /* Connection state goes here */ + "tcpInErrs", 0, + "tcpOutRsts", 0, +}; + + +/* Look up TCP connection + * Return TCB pointer or NULL if nonexistant. + * Also move the entry to the top of the list to speed future searches. + */ +struct tcb * +lookup_tcb(conn) +register struct connection *conn; +{ + register struct tcb *tcb; + struct tcb *tcblast = NULL; + + for(tcb=Tcbs;tcb != NULL;tcblast = tcb,tcb = tcb->next){ + /* Yet another structure compatibility hack */ + if(conn->remote.port == tcb->conn.remote.port + && conn->local.port == tcb->conn.local.port + && conn->remote.address == tcb->conn.remote.address + && conn->local.address == tcb->conn.local.address){ + if(tcblast != NULL){ + /* Move to top of list */ + tcblast->next = tcb->next; + tcb->next = Tcbs; + Tcbs = tcb; + } + return tcb; + } + + } + return NULL; +} + +/* Create a TCB, return pointer. Return pointer if TCB already exists. */ +struct tcb * +create_tcb(conn) +struct connection *conn; +{ + register struct tcb *tcb; + struct tcp_rtt *tp; + + if((tcb = lookup_tcb(conn)) != NULL) + return tcb; + tcb = (struct tcb *)callocw(1,sizeof (struct tcb)); + ASSIGN(tcb->conn,*conn); + + tcb->state = TCP_CLOSED; + tcb->cwind = tcb->mss = Tcp_mss; + tcb->ssthresh = 65535; + if((tp = rtt_get(tcb->conn.remote.address)) != NULL){ + tcb->srtt = tp->srtt; + tcb->mdev = tp->mdev; + } else { + tcb->srtt = Tcp_irtt; /* mdev = 0 */ + } + /* Initialize timer intervals */ + set_timer(&tcb->timer,tcb->srtt); + tcb->timer.func = tcp_timeout; + tcb->timer.arg = tcb; + + tcb->next = Tcbs; + Tcbs = tcb; + return tcb; +} + +/* Close our TCB */ +void +close_self(tcb,reason) +register struct tcb *tcb; +int reason; +{ + struct reseq *rp1; + register struct reseq *rp; + + if(tcb == NULL) + return; + + stop_timer(&tcb->timer); + tcb->reason = reason; + + /* Flush reassembly queue; nothing more can arrive */ + for(rp = tcb->reseq;rp != NULL;rp = rp1){ + rp1 = rp->next; + free_p(&rp->bp); + free(rp); + } + tcb->reseq = NULL; + settcpstate(tcb,TCP_CLOSED); +} + +/* Sequence number comparisons + * Return true if x is between low and high inclusive, + * false otherwise + */ +int +seq_within(x,low,high) +register int32 x,low,high; +{ + if(low <= high){ + if(low <= x && x <= high) + return 1; + } else { + if(low >= x && x >= high) + return 1; + } + return 0; +} +int +seq_lt(x,y) +register int32 x,y; +{ + return (long)(x-y) < 0; +} +#ifdef notdef +int +seq_le(x,y) +register int32 x,y; +{ + return (long)(x-y) <= 0; +} +#endif /* notdef */ +int +seq_gt(x,y) +register int32 x,y; +{ + return (long)(x-y) > 0; +} +int +seq_ge(x,y) +register int32 x,y; +{ + return (long)(x-y) >= 0; +} + +void +settcpstate(tcb,newstate) +register struct tcb *tcb; +enum tcp_state newstate; +{ + enum tcp_state oldstate; + + oldstate = tcb->state; + tcb->state = newstate; + if(Tcp_trace) + _printf(_("TCB %p %s -> %s\n"),tcb, + Tcpstates[oldstate],Tcpstates[newstate]); + + /* Update MIB variables */ + switch(oldstate){ + case TCP_CLOSED: + if(newstate == TCP_SYN_SENT) + tcpActiveOpens++; + break; + case TCP_LISTEN: + if(newstate == TCP_SYN_RECEIVED) + tcpPassiveOpens++; + break; + case TCP_SYN_SENT: + if(newstate == TCP_CLOSED) + tcpAttemptFails++; + break; + case TCP_SYN_RECEIVED: + switch(newstate){ + case TCP_CLOSED: + case TCP_LISTEN: + tcpAttemptFails++; + break; + } + break; + case TCP_ESTABLISHED: + case TCP_CLOSE_WAIT: + switch(newstate){ + case TCP_CLOSED: + case TCP_LISTEN: + tcpEstabResets++; + break; + } + tcpCurrEstab--; + break; + } + if(newstate == TCP_ESTABLISHED || newstate == TCP_CLOSE_WAIT) + tcpCurrEstab++; + + if(tcb->s_upcall) + (*tcb->s_upcall)(tcb,oldstate,newstate); + + switch(newstate){ + case TCP_SYN_RECEIVED: /***/ + case TCP_ESTABLISHED: + /* Notify the user that he can begin sending data */ + if(tcb->t_upcall) + (*tcb->t_upcall)(tcb,tcb->window - tcb->sndcnt); + break; + } +} +/* Round trip timing cache routines. + * These functions implement a very simple system for keeping track of + * network performance for future use in new connections. + * The emphasis here is on speed of update (rather than optimum cache hit + * ratio) since rtt_add is called every time a TCP connection updates + * its round trip estimate. + */ +void +rtt_add(addr,rtt) +int32 addr; /* Destination IP address */ +int32 rtt; +{ + register struct tcp_rtt *tp; + int32 abserr; + + if(addr == 0) + return; + tp = &Tcp_rtt[(unsigned short)addr % RTTCACHE]; + if(tp->addr != addr){ + /* New entry */ + tp->addr = addr; + tp->srtt = rtt; + tp->mdev = 0; + } else { + /* Run our own SRTT and MDEV integrators, with rounding */ + abserr = (rtt > tp->srtt) ? rtt - tp->srtt : tp->srtt - rtt; + tp->srtt = ((AGAIN-1)*tp->srtt + rtt + (AGAIN/2)) >> LAGAIN; + tp->mdev = ((DGAIN-1)*tp->mdev + abserr + (DGAIN/2)) >> LDGAIN; + } +} +struct tcp_rtt * +rtt_get(addr) +int32 addr; +{ + register struct tcp_rtt *tp; + + if(addr == 0) + return NULL; + tp = &Tcp_rtt[(unsigned short)addr % RTTCACHE]; + if(tp->addr != addr) + return NULL; + return tp; +} + +/* TCP garbage collection - called by storage allocator when free space + * runs low. The send and receive queues are crunched. If the situation + * is red, the resequencing queue is discarded; otherwise it is + * also crunched. + */ +void +tcp_garbage(red) +int red; +{ + register struct tcb *tcb; + struct reseq *rp,*rp1; + + for(tcb = Tcbs;tcb != NULL;tcb = tcb->next){ + mbuf_crunch(&tcb->rcvq); + mbuf_crunch(&tcb->sndq); + for(rp = tcb->reseq;rp != NULL;rp = rp1){ + rp1 = rp->next; + if(red){ + free_p(&rp->bp); + free(rp); + } else { + mbuf_crunch(&rp->bp); + } + } + if(red) + tcb->reseq = NULL; + } +} diff --git a/src/nos/internet/tcptimer.c b/src/nos/internet/tcptimer.c new file mode 100644 index 00000000..3e71879b --- /dev/null +++ b/src/nos/internet/tcptimer.c @@ -0,0 +1,57 @@ +/* TCP timeout routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "timer.h" +#include "netuser.h" +#include "internet.h" +#include "tcp.h" + +/* Timer timeout */ +void +tcp_timeout(p) +void *p; +{ + register struct tcb *tcb; + int32 ptrsave; + + tcb = p; + if(tcb == NULL) + return; + + /* Make sure the timer has stopped (we might have been kicked) */ + stop_timer(&tcb->timer); + + switch(tcb->state){ + case TCP_TIME_WAIT: /* 2MSL timer has expired */ + close_self(tcb,NORMAL); + break; + default: /* Retransmission timer has expired */ + tcb->timeouts++; + tcb->flags.retran = 1; /* Indicate > 1 transmission */ + tcb->backoff++; + /* Reduce slowstart threshold to half current window */ + tcb->ssthresh = tcb->cwind / 2; + tcb->ssthresh = max(tcb->ssthresh,tcb->mss); + /* Shrink congestion window to 1 packet */ + tcb->cwind = tcb->mss; + /* Retransmit just the oldest unacked packet */ + ptrsave = tcb->snd.ptr; + tcb->snd.ptr = tcb->snd.una; + tcp_output(tcb); + tcb->snd.ptr = ptrsave; + } +} +/* Backoff function - the subject of much research */ +int32 +backoff(n) +int n; +{ + if(n > 31) + n = 31; /* Prevent truncation to zero */ + + return 1L << n; /* Binary exponential back off */ +} + diff --git a/src/nos/internet/tcpuser.c b/src/nos/internet/tcpuser.c new file mode 100644 index 00000000..de9f8387 --- /dev/null +++ b/src/nos/internet/tcpuser.c @@ -0,0 +1,381 @@ +/* User calls to TCP + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "timer.h" +#include "mbuf.h" +#include "netuser.h" +#include "socket.h" +#include "internet.h" +#include "tcp.h" +#include "ip.h" +#include "icmp.h" +#include "proc.h" + +uint16 Tcp_window = DEF_WND; + +struct tcb * +open_tcp(lsocket,fsocket,mode,window,r_upcall,t_upcall,s_upcall,tos,user) +struct socket *lsocket; /* Local socket */ +struct socket *fsocket; /* Remote socket */ +int mode; /* Active/passive/server */ +uint16 window; /* Receive window (and send buffer) sizes */ +void (*r_upcall)(); /* Function to call when data arrives */ +void (*t_upcall)(); /* Function to call when ok to send more data */ +void (*s_upcall)(); /* Function to call when connection state changes */ +int tos; +int user; /* User linkage area */ +{ + struct connection conn; + register struct tcb *tcb; + + if(lsocket == NULL){ + Net_error = INVALID; + return NULL; + } + conn.local.address = lsocket->address; + conn.local.port = lsocket->port; + if(fsocket != NULL){ + conn.remote.address = fsocket->address; + conn.remote.port = fsocket->port; + } else { + conn.remote.address = 0; + conn.remote.port = 0; + } + if((tcb = lookup_tcb(&conn)) == NULL){ + if((tcb = create_tcb(&conn)) == NULL){ + Net_error = NO_MEM; + return NULL; + } + } else if(tcb->state != TCP_LISTEN){ + Net_error = CON_EXISTS; + return NULL; + } + tcb->user = user; + if(window != 0) + tcb->window = tcb->rcv.wnd = window; + else + tcb->window = tcb->rcv.wnd = Tcp_window; + tcb->snd.wnd = 1; /* Allow space for sending a SYN */ + tcb->r_upcall = r_upcall; + tcb->t_upcall = t_upcall; + tcb->s_upcall = s_upcall; + tcb->tos = tos; + switch(mode){ + case TCP_SERVER: + tcb->flags.clone = 1; + case TCP_PASSIVE: /* Note fall-thru */ + settcpstate(tcb,TCP_LISTEN); + break; + case TCP_ACTIVE: + /* Send SYN, go into TCP_SYN_SENT state */ + tcb->flags.active = 1; + send_syn(tcb); + settcpstate(tcb,TCP_SYN_SENT); + tcp_output(tcb); + break; + } + return tcb; +} +/* User send routine */ +long +send_tcp(tcb,bpp) +register struct tcb *tcb; +struct mbuf **bpp; +{ + int32 cnt; + + if(tcb == NULL || bpp == NULL || *bpp == NULL){ + free_p(bpp); + Net_error = INVALID; + return -1; + } + cnt = len_p(*bpp); + switch(tcb->state){ + case TCP_CLOSED: + free_p(bpp); + Net_error = NO_CONN; + return -1; + case TCP_LISTEN: + if(tcb->conn.remote.address == 0 && tcb->conn.remote.port == 0){ + /* Save data for later */ + append(&tcb->sndq,bpp); + tcb->sndcnt += cnt; + break; + } + /* Change state from passive to active */ + tcb->flags.active = 1; + send_syn(tcb); + settcpstate(tcb,TCP_SYN_SENT); /* Note fall-thru */ + case TCP_SYN_SENT: + case TCP_SYN_RECEIVED: + case TCP_ESTABLISHED: + case TCP_CLOSE_WAIT: + append(&tcb->sndq,bpp); + tcb->sndcnt += cnt; + tcp_output(tcb); + break; + case TCP_FINWAIT1: + case TCP_FINWAIT2: + case TCP_CLOSING: + case TCP_LAST_ACK: + case TCP_TIME_WAIT: + free_p(bpp); + Net_error = CON_CLOS; + return -1; + } + return (long)cnt; +} +/* User receive routine */ +int32 +recv_tcp(tcb,bpp,cnt) +register struct tcb *tcb; +struct mbuf **bpp; +int32 cnt; +{ + if(tcb == NULL || bpp == (struct mbuf **)NULL){ + Net_error = INVALID; + return -1; + } + if(tcb->rcvcnt == 0){ + /* If there's nothing on the queue, our action depends on what state + * we're in (i.e., whether or not we're expecting any more data). + * If no more data is expected, then simply return 0; this is + * interpreted as "end of file". Otherwise return -1. + */ + switch(tcb->state){ + case TCP_LISTEN: + case TCP_SYN_SENT: + case TCP_SYN_RECEIVED: + case TCP_ESTABLISHED: + case TCP_FINWAIT1: + case TCP_FINWAIT2: + Net_error = WOULDBLK; + return -1; + case TCP_CLOSED: + case TCP_CLOSE_WAIT: + case TCP_CLOSING: + case TCP_LAST_ACK: + case TCP_TIME_WAIT: + *bpp = NULL; + return 0; + } + } + /* cnt == 0 means "I want it all" */ + if(cnt == 0) + cnt = tcb->rcvcnt; + /* See if the user can take all of it */ + if(tcb->rcvcnt <= cnt){ + cnt = tcb->rcvcnt; + *bpp = tcb->rcvq; + tcb->rcvq = NULL; + } else { + *bpp = ambufw(cnt); + pullup(&tcb->rcvq,(*bpp)->data,cnt); + (*bpp)->cnt = cnt; + } + tcb->rcvcnt -= cnt; + tcb->rcv.wnd += cnt; + /* Do a window update if it was less than one packet and now it's more */ + if(tcb->rcv.wnd > tcb->mss && tcb->rcv.wnd - cnt < tcb->mss){ + tcb->flags.force = 1; + tcp_output(tcb); + } + return (int)cnt; +} +/* This really means "I have no more data to send". It only closes the + * connection in one direction, and we can continue to receive data + * indefinitely. + */ +int +close_tcp(tcb) +register struct tcb *tcb; +{ + if(tcb == NULL){ + Net_error = INVALID; + return -1; + } + switch(tcb->state){ + case TCP_CLOSED: + return 0; /* Unlikely */ + case TCP_LISTEN: + case TCP_SYN_SENT: + close_self(tcb,NORMAL); + return 0; + case TCP_SYN_RECEIVED: + case TCP_ESTABLISHED: + tcb->sndcnt++; + tcb->snd.nxt++; + settcpstate(tcb,TCP_FINWAIT1); + tcp_output(tcb); + return 0; + case TCP_CLOSE_WAIT: + tcb->sndcnt++; + tcb->snd.nxt++; + settcpstate(tcb,TCP_LAST_ACK); + tcp_output(tcb); + return 0; + case TCP_FINWAIT1: + case TCP_FINWAIT2: + case TCP_CLOSING: + case TCP_LAST_ACK: + case TCP_TIME_WAIT: + Net_error = CON_CLOS; + return -1; + } + return -1; /* "Can't happen" */ +} +/* Delete TCB, free resources. The user is not notified, even if the TCB is + * not in the TCP_CLOSED state. This function should normally be called by the + * user only in response to a state change upcall to TCP_CLOSED state. + */ +int +del_tcp(conn) +struct tcb *conn; +{ + register struct tcb *tcb; + struct tcb *tcblast = NULL; + struct reseq *rp,*rp1; + + /* Remove from list */ + for(tcb=Tcbs;tcb != NULL;tcblast = tcb,tcb = tcb->next) + if(tcb == conn) + break; + if(tcb == NULL){ + Net_error = INVALID; + return -1; /* conn was NULL, or not on list */ + } + if(tcblast != NULL) + tcblast->next = tcb->next; + else + Tcbs = tcb->next; /* was first on list */ + + stop_timer(&tcb->timer); + for(rp = tcb->reseq;rp != NULL;rp = rp1){ + rp1 = rp->next; + free_p(&rp->bp); + free(rp); + } + tcb->reseq = NULL; + free_p(&tcb->rcvq); + free_p(&tcb->sndq); + free(tcb); + return 0; +} +/* Return 1 if arg is a valid TCB, 0 otherwise */ +int +tcpval(tcb) +struct tcb *tcb; +{ + register struct tcb *tcb1; + + if(tcb == NULL) + return 0; /* Null pointer can't be valid */ + for(tcb1=Tcbs;tcb1 != NULL;tcb1 = tcb1->next){ + if(tcb1 == tcb) + return 1; + } + return 0; +} +/* Kick a particular TCP connection */ +int +kick_tcp(tcb) +register struct tcb *tcb; +{ + if(!tcpval(tcb)) + return -1; + tcb->flags.force = 1; /* Send ACK even if no data */ + tcb->backoff = 0; + tcp_timeout(tcb); + return 0; +} +/* Kick all TCP connections to specified address; return number kicked */ +int +kick(addr) +int32 addr; +{ + register struct tcb *tcb; + int cnt = 0; + + for(tcb=Tcbs;tcb != NULL;tcb = tcb->next){ + if(tcb->conn.remote.address == addr){ + kick_tcp(tcb); + cnt++; + } + } + return cnt; +} +/* Clear all TCP connections */ +void +reset_all() +{ + register struct tcb *tcb,*tcbnext; + + for(tcb=Tcbs;tcb != NULL;tcb = tcbnext){ + tcbnext = tcb->next; + reset_tcp(tcb); + } + kwait(NULL); /* Let the RSTs go forth */ +} +void +reset_tcp(tcb) +register struct tcb *tcb; +{ + struct tcp fakeseg; + struct ip fakeip; + + if(tcb == NULL) + return; + if(tcb->state != TCP_LISTEN){ + /* Compose a fake segment with just enough info to generate the + * correct RST reply + */ + memset(&fakeseg,0,sizeof(fakeseg)); + memset(&fakeip,0,sizeof(fakeip)); + fakeseg.dest = tcb->conn.local.port; + fakeseg.source = tcb->conn.remote.port; + fakeseg.flags.ack = 1; + /* Here we try to pick a sequence number with the greatest likelihood + * of being in his receive window. + */ + fakeseg.ack = tcb->snd.nxt + tcb->snd.wnd - 1; + fakeip.dest = tcb->conn.local.address; + fakeip.source = tcb->conn.remote.address; + fakeip.tos = tcb->tos; + reset(&fakeip,&fakeseg); + } + close_self(tcb,RESET); +} +#ifdef notused +/* Return character string corresponding to a TCP well-known port, or + * the decimal number if unknown. + */ +char * +tcp_port(n) +uint16 n; +{ + static char buf[32]; + + switch(n){ + case IPPORT_ECHO: + return "echo"; + case IPPORT_DISCARD: + return "discard"; + case IPPORT_FTPD: + return "ftp_data"; + case IPPORT_FTP: + return "ftp"; + case IPPORT_TELNET: + return "telnet"; + case IPPORT_SMTP: + return "smtp"; + case IPPORT_POP: + return "pop"; + default: + sprintf(buf,"%u",n); + return buf; + } +} +#endif + diff --git a/src/nos/internet/udp.c b/src/nos/internet/udp.c new file mode 100644 index 00000000..014ca314 --- /dev/null +++ b/src/nos/internet/udp.c @@ -0,0 +1,280 @@ +/* Internet User Data Protocol (UDP) + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "netuser.h" +#include "iface.h" +#include "udp.h" +#include "ip.h" +#include "internet.h" +#include "icmp.h" + +static struct udp_cb *lookup_udp(struct socket *socket); + +struct mib_entry Udp_mib[] = { + "", 0, + "udpInDatagrams", 0, + "udpNoPorts", 0, + "udpInErrors", 0, + "udpOutDatagrams", 0, +}; + +/* UDP control structures list */ +struct udp_cb *Udps; + +/* Create a UDP control block for lsocket, so that we can queue + * incoming datagrams. + */ +struct udp_cb * +open_udp(lsocket,r_upcall) +struct socket *lsocket; +void (*r_upcall)(); +{ + register struct udp_cb *up; + + if((up = lookup_udp(lsocket)) != NULL){ + /* Already exists */ + Net_error = CON_EXISTS; + return NULL; + } + up = (struct udp_cb *)callocw(1,sizeof (struct udp_cb)); + up->socket.address = lsocket->address; + up->socket.port = lsocket->port; + up->r_upcall = r_upcall; + + up->next = Udps; + Udps = up; + return up; +} + +/* Send a UDP datagram */ +int +send_udp( +struct socket *lsocket, /* Source socket */ +struct socket *fsocket, /* Destination socket */ +char tos, /* Type-of-service for IP */ +char ttl, /* Time-to-live for IP */ +struct mbuf **bpp, /* Data field, if any */ +uint16 length, /* Length of data field */ +uint16 id, /* Optional ID field for IP */ +char df /* Don't Fragment flag for IP */ +){ + struct pseudo_header ph; + struct udp udp; + int32 laddr; + + if(bpp == NULL) + return -1; + if(length != 0 && *bpp != NULL) + trim_mbuf(bpp,length); + else + length = len_p(*bpp); + + length += UDPHDR; + + laddr = lsocket->address; + if(laddr == INADDR_ANY) + laddr = locaddr(fsocket->address); + + udp.source = lsocket->port; + udp.dest = fsocket->port; + udp.length = length; + + /* Create IP pseudo-header, compute checksum and send it */ + ph.length = length; + ph.source = laddr; + ph.dest = fsocket->address; + ph.protocol = UDP_PTCL; + + htonudp(&udp,bpp,&ph); + udpOutDatagrams++; + ip_send(laddr,fsocket->address,UDP_PTCL,tos,ttl,bpp,length,id,df); + return (int)length; +} +/* Accept a waiting datagram, if available. Returns length of datagram */ +int +recv_udp(up,fsocket,bp) +register struct udp_cb *up; +struct socket *fsocket; /* Place to stash incoming socket */ +struct mbuf **bp; /* Place to stash data packet */ +{ + struct socket sp; + struct mbuf *buf; + uint16 length; + + if(up == NULL){ + Net_error = NO_CONN; + return -1; + } + if(up->rcvcnt == 0){ + Net_error = WOULDBLK; + return -1; + } + buf = dequeue(&up->rcvq); + up->rcvcnt--; + + /* Strip socket header */ + pullup(&buf,&sp,sizeof(struct socket)); + + /* Fill in the user's foreign socket structure, if given */ + if(fsocket != NULL){ + fsocket->address = sp.address; + fsocket->port = sp.port; + } + /* Hand data to user */ + length = len_p(buf); + if(bp != NULL) + *bp = buf; + else + free_p(&buf); + return (int)length; +} +/* Delete a UDP control block */ +int +del_udp(conn) +struct udp_cb *conn; +{ + struct mbuf *bp; + register struct udp_cb *up; + struct udp_cb *udplast = NULL; + + for(up = Udps;up != NULL;udplast = up,up = up->next){ + if(up == conn) + break; + } + if(up == NULL){ + /* Either conn was NULL or not found on list */ + Net_error = INVALID; + return -1; + } + /* Get rid of any pending packets */ + while(up->rcvcnt != 0){ + bp = up->rcvq; + up->rcvq = up->rcvq->anext; + free_p(&bp); + up->rcvcnt--; + } + /* Remove from list */ + if(udplast != NULL) + udplast->next = up->next; + else + Udps = up->next; /* was first on list */ + + free(up); + return 0; +} +/* Process an incoming UDP datagram */ +void +udp_input( +struct iface *iface, /* Input interface */ +struct ip *ip, /* IP header */ +struct mbuf **bpp, /* UDP header and data */ +int rxbroadcast, /* The only protocol that accepts 'em */ +int32 said +){ + struct pseudo_header ph; + struct udp udp; + struct udp_cb *up; + struct socket lsocket; + struct socket fsocket; + uint16 length; + + if(bpp == NULL || *bpp == NULL) + return; + + /* Create pseudo-header and verify checksum */ + ph.source = ip->source; + ph.dest = ip->dest; + ph.protocol = ip->protocol; + length = ip->length - IPLEN - ip->optlen; + ph.length = length; + + /* Peek at header checksum before we extract the header. This + * allows us to bypass cksum() if the checksum field was not + * set by the sender. + */ + udp.checksum = udpcksum(*bpp); + if(udp.checksum != 0 && cksum(&ph,*bpp,length) != 0){ + /* Checksum non-zero, and wrong */ + udpInErrors++; + free_p(bpp); + return; + } + /* Extract UDP header in host order */ + if(ntohudp(&udp,bpp) != 0){ + /* Truncated header */ + udpInErrors++; + free_p(bpp); + return; + } + /* If this was a broadcast packet, pretend it was sent to us */ + if(rxbroadcast){ + lsocket.address = iface->addr; + } else + lsocket.address = ip->dest; + + lsocket.port = udp.dest; + /* See if there's somebody around to read it */ + if((up = lookup_udp(&lsocket)) == NULL){ + /* Nope, return an ICMP message */ + if(!rxbroadcast){ + htonudp(&udp,bpp,&ph); + icmp_output(ip,*bpp,ICMP_DEST_UNREACH,ICMP_PORT_UNREACH,NULL); + } + udpNoPorts++; + free_p(bpp); + return; + } + /* Prepend the foreign socket info */ + fsocket.address = ip->source; + fsocket.port = udp.source; + pushdown(bpp,&fsocket,sizeof(fsocket)); + + /* Queue it */ + enqueue(&up->rcvq,bpp); + up->rcvcnt++; + udpInDatagrams++; + if(up->r_upcall) + (*up->r_upcall)(iface,up,up->rcvcnt); +} +/* Look up UDP socket. + * Return control block pointer or NULL if nonexistant + * As side effect, move control block to top of list to speed future + * searches. + */ +static struct udp_cb * +lookup_udp(socket) +struct socket *socket; +{ + register struct udp_cb *up; + struct udp_cb *uplast = NULL; + + for(up = Udps;up != NULL;uplast = up,up = up->next){ + if(socket->port == up->socket.port + && (socket->address == up->socket.address + || up->socket.address == INADDR_ANY)){ + if(uplast != NULL){ + /* Move to top of list */ + uplast->next = up->next; + up->next = Udps; + Udps = up; + } + return up; + } + } + return NULL; +} + +/* Attempt to reclaim unused space in UDP receive queues */ +void +udp_garbage(red) +int red; +{ + register struct udp_cb *udp; + + for(udp = Udps;udp != NULL; udp = udp->next){ + mbuf_crunch(&udp->rcvq); + } +} + diff --git a/src/nos/internet/udpcmd.c b/src/nos/internet/udpcmd.c new file mode 100644 index 00000000..31f5e478 --- /dev/null +++ b/src/nos/internet/udpcmd.c @@ -0,0 +1,67 @@ +/* UDP-related user commands + * Copyright 1991 Phil Karn, KA9Q + */ +#include +#include "global.h" +#include "mbuf.h" +#include "netuser.h" +#include "udp.h" +#include "internet.h" +#include "cmdparse.h" +#include "commands.h" +#include +#include "po/messages.h" + +static int doudpstat(int argc,char *argv[],void *p); + +static struct cmds Udpcmds[] = { + _("status"), doudpstat, 0, 0, NULL, + NULL, +}; +int +doudp(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + return subcmd(Udpcmds,argc,argv,p); +} +int +st_udp(udp,n) +struct udp_cb *udp; +int n; +{ + if(n == 0) + _printf(_("&UCB Rcv-Q Local socket\n")); + + return _printf(_("%9p%6u %s\n"),udp,udp->rcvcnt,pinet(&udp->socket)); +} + +/* Dump UDP statistics and control blocks */ +static int +doudpstat(argc,argv,p) +int argc; +char *argv[]; +void *p; +{ + register struct udp_cb *udp; + register int i; + + for(i=1;i<=NUMUDPMIB;i++){ + _printf(_("(%2u)%-20s%10lu"),i, + Udp_mib[i].name,Udp_mib[i].value.integer); + if(i % 2) + _printf(_(" ")); + else + _printf(_("\n")); + } + if((i % 2) == 0) + _printf(_("\n")); + + _printf(_(" &UCB Rcv-Q Local socket\n")); + for(udp = Udps;udp != NULL; udp = udp->next){ + if(st_udp(udp,1) == EOF) + return 0; + } + return 0; +} diff --git a/src/nos/internet/udphdr.c b/src/nos/internet/udphdr.c new file mode 100644 index 00000000..d697b3db --- /dev/null +++ b/src/nos/internet/udphdr.c @@ -0,0 +1,66 @@ +/* UDP header conversion routines + * Copyright 1991 Phil Karn, KA9Q + */ +#include "global.h" +#include "mbuf.h" +#include "ip.h" +#include "internet.h" +#include "udp.h" + +/* Convert UDP header in internal format to an mbuf in external format */ +void +htonudp( +struct udp *udp, +struct mbuf **bpp, +struct pseudo_header *ph +){ + register uint8 *cp; + uint16 checksum; + + /* Allocate UDP protocol header and fill it in */ + pushdown(bpp,NULL,UDPHDR); + cp = (*bpp)->data; + cp = put16(cp,udp->source); /* Source port */ + cp = put16(cp,udp->dest); /* Destination port */ + cp = put16(cp,udp->length); /* Length */ + *cp++ = 0; /* Clear checksum */ + *cp-- = 0; + + /* All zeros and all ones is equivalent in one's complement arithmetic; + * the spec requires us to change zeros into ones to distinguish an + * all-zero checksum from no checksum at all + */ + if((checksum = cksum(ph,*bpp,ph->length)) == 0) + checksum = 0xffff; + put16(cp,checksum); +} +/* Convert UDP header in mbuf to internal structure */ +int +ntohudp( +struct udp *udp, +struct mbuf **bpp +){ + uint8 udpbuf[UDPHDR]; + + if(pullup(bpp,udpbuf,UDPHDR) != UDPHDR) + return -1; + udp->source = get16(&udpbuf[0]); + udp->dest = get16(&udpbuf[2]); + udp->length = get16(&udpbuf[4]); + udp->checksum = get16(&udpbuf[6]); + return 0; +} +/* Extract UDP checksum value from a network-format header without + * disturbing the header + */ +uint16 +udpcksum( +struct mbuf *bp +){ + struct mbuf *dup; + + if(dup_p(&dup,bp,6,2) != 2) + return 0; + return pull16(&dup); +} + diff --git a/src/nos/internet/udpsock.c b/src/nos/internet/udpsock.c new file mode 100644 index 00000000..a260a74a --- /dev/null +++ b/src/nos/internet/udpsock.c @@ -0,0 +1,174 @@ +/* udpsock.c */ + +#include /* Nick */ +#include "global.h" +#include "udp.h" +#include "socket.h" +#include "usock.h" + +static void s_urcall(struct iface *iface,struct udp_cb *udp,int cnt); +static void autobind(struct usock *up); + +int +so_udp(up,protocol) +struct usock *up; +int protocol; +{ + return 0; +} +int +so_udp_bind(up) +struct usock *up; +{ + int s; + struct sockaddr_in *sp; + struct socket lsock; + + s = up->index; + sp = (struct sockaddr_in *)up->name; + lsock.address = sp->sin_addr.s_addr; + lsock.port = sp->sin_port; + up->cb.udp = open_udp(&lsock,s_urcall); + up->cb.udp->user = s; + return 0; +} +int +so_udp_conn(up) +struct usock *up; +{ + if(up->name == NULL){ + autobind(up); + } + return 0; +} +int +so_udp_recv(up,bpp,from,fromlen) +struct usock *up; +struct mbuf **bpp; +struct sockaddr *from; +int *fromlen; +{ + int cnt; + struct udp_cb *udp; + struct sockaddr_in *remote; + struct socket fsocket; + + while((udp = up->cb.udp) != NULL + && (cnt = recv_udp(udp,&fsocket,bpp)) == -1){ + if(up->noblock){ + errno = EWOULDBLOCK; + return -1; + } else if((errno = kwait(up)) != 0){ + return -1; + } + } + if(udp == NULL){ + /* Connection went away */ + errno = ENOTCONN; + return -1; + } + if(from != NULL && fromlen != (int *)NULL && *fromlen >= SOCKSIZE){ + remote = (struct sockaddr_in *)from; + remote->sin_family = AF_INET; + remote->sin_addr.s_addr = fsocket.address; + remote->sin_port = fsocket.port; + *fromlen = SOCKSIZE; + } + return cnt; +} +int +so_udp_send( +struct usock *up, +struct mbuf **bpp, +struct sockaddr *to +){ + struct sockaddr_in *local,*remote; + struct socket lsock,fsock; + + if(up->name == NULL) + autobind(up); + local = (struct sockaddr_in *)up->name; + lsock.address = local->sin_addr.s_addr; + lsock.port = local->sin_port; + if(to != NULL) { + remote = (struct sockaddr_in *)to; + } else if(up->peername != NULL){ + remote = (struct sockaddr_in *)up->peername; + } else { + free_p(bpp); + errno = ENOTCONN; + return -1; + } + fsock.address = remote->sin_addr.s_addr; + fsock.port = remote->sin_port; + send_udp(&lsock,&fsock,up->tos,0,bpp,0,0,0); + return 0; +} +int +so_udp_qlen(up,rtx) +struct usock *up; +int rtx; +{ + int len; + + switch(rtx){ + case 0: + len = up->cb.udp->rcvcnt; + break; + case 1: + len = 0; + break; + } + return len; +} +int +so_udp_close(up) +struct usock *up; +{ + if(up->cb.udp != NULL){ + del_udp(up->cb.udp); + } + return 0; +} +int +so_udp_shut(up,how) +struct usock *up; +int how; +{ + int s; + + s = up->index; + close_s(s); + return 0; +} +static void +s_urcall(iface,udp,cnt) +struct iface *iface; +struct udp_cb *udp; +int cnt; +{ + ksignal(itop(udp->user),1); + kwait(NULL); +} + +/* Issue an automatic bind of a local address */ +static void +autobind(up) +struct usock *up; +{ + struct sockaddr_in local; + int s; + + s = up->index; + local.sin_family = AF_INET; + local.sin_addr.s_addr = INADDR_ANY; + local.sin_port = Lport++; + bind(s,(struct sockaddr *)&local,sizeof(struct sockaddr_in)); +} +int +so_udp_stat(up) +struct usock *up; +{ + st_udp(up->cb.udp,0); + return 0; +} diff --git a/src/nos/intl/auto.mk b/src/nos/intl/auto.mk new file mode 100644 index 00000000..ff667e92 --- /dev/null +++ b/src/nos/intl/auto.mk @@ -0,0 +1,17 @@ +# auto.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +SUBDIRS= + +OUTPUTS= intl.$(LIBEXT) + +intl_$(LIBEXT)_SOURCES= \ + gettext.S intl.c + +intl_c_MODULES= __failtext __dgetfail __fgetfail __getfail _dprintf _vdprintf \ + _fprintf _vfprintf _fputs _printf _vprintf _puts _strcpy \ + _strlen _strncmp _strncpy + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/intl/gettext.S b/src/nos/intl/gettext.S new file mode 100644 index 00000000..c2925da4 --- /dev/null +++ b/src/nos/intl/gettext.S @@ -0,0 +1,96 @@ +; gettext.S by Nick for NOS/UZI project + +; ----------------------------------------------------------------------------- + + extrn _malloc + extrn ?BANK_CALL_DIRECT_L08 + extrn ?BANK_FAST_LEAVE_L08 + +#include "z80/asm.h" + +; ----------------------------------------------------------------------------- + + rseg RCODE + +lentext: + out0 (CBR),a + + ld c,(hl) + inc hl + ld b,(hl) + inc hl + + ld a,(iy) + out0 (CBR),a + ret + +cpytext: + out0 (CBR),a + + ldir + + ld a,(iy) + out0 (CBR),a + ret + +; ----------------------------------------------------------------------------- + + rseg CODE + +; Z80 _gettext() implementation based on malloc(): + +; Return is const char *, so results can be shared, +; but when calling via _strdup() we cast to char *. +; This works because there is one call to __gettext +; for each call to _strdup, so results are not shared. + +; prototype in libintl.h: +; const char *_gettext(void (*string)(void)); + + public __gettext +__gettext: + push iy + + ld hl,(CBR_REFERENCE) + push hl + pop iy + ld l,c + ld a,(hl) + + ex de,hl + call lentext ; returns bc = length from a:hl + ; de/ix/iy preserved + ld a,(de) + push hl ; bc will be preserved by malloc() + push af + + ld e,c + ld d,b ; de = argument to malloc() + + ld hl,LWRD _malloc + ld a,BYTE3 _malloc + call ?BANK_CALL_DIRECT_L08 ; banked call to malloc() + ; bc/ix/iy preserved + ld a,l + or h + jr z,failure ; NULL return, abort operation + + ld e,l + ld d,h ; de = destination for copy + pop af + ex (sp),hl ; a:hl = banked source for copy + call cpytext ; copy the data including null byte + ; ix/iy preserved + pop hl ; restore hl = malloc() return value +done: + pop iy + jp ?BANK_FAST_LEAVE_L08 ; with hl = malloc() return value + +failure: + pop af + jr done + +; ----------------------------------------------------------------------------- + + end + diff --git a/src/nos/intl/intl.c b/src/nos/intl/intl.c new file mode 100644 index 00000000..47763f64 --- /dev/null +++ b/src/nos/intl/intl.c @@ -0,0 +1,298 @@ +/* intl.c by Nick for NOS/UZI project */ + +#include +#include +#include +#include +#include +#include + +#ifdef MODULE +#define STATIC +extern char __failtext[]; +#else +#define STATIC static +#define MODULE___failtext +#define MODULE___dgetfail +#define MODULE___fgetfail +#define MODULE___getfail +#define MODULE__dprintf +#define MODULE__vdprintf +#define MODULE__fprintf +#define MODULE__vfprintf +#define MODULE__fputs +#define MODULE__printf +#define MODULE__vprintf +#define MODULE__puts +#define MODULE__strcpy +#define MODULE__strlen +#define MODULE__strncmp +#define MODULE__strncpy +#endif + +STATIC int __fgetfail(FILE *stream, void (*address)(void)); +STATIC int __getfail(void (*address)(void)); + +/* ------------------------------------------------------------------------- */ + +#ifdef MODULE___failtext +STATIC char __failtext[] = "_gettext(%06lx) failure\n"; +#endif + +#ifdef MODULE___dgetfail +STATIC int __dgetfail(int level, void (*address)(void)) + { + return dprintf(level, __failtext, (unsigned long)address); + } +#endif + +#ifdef MODULE___fgetfail +STATIC int __fgetfail(FILE *stream, void (*address)(void)) + { + return fprintf(stream, __failtext, (unsigned long)address); + } +#endif + +#ifdef MODULE___getfail +STATIC int __getfail(void (*address)(void)) + { + return printf(__failtext, (unsigned long)address); + } +#endif + +/* ------------------------------------------------------------------------- */ + +#ifdef MODULE__dprintf +int _dprintf(int level, _char *format, ...) + { + va_list arguments; + int result; + + va_start(arguments, format); + result = _vdprintf(level, format, arguments); + va_end(arguments); + + return result; + } +#endif + +#ifdef MODULE__vdprintf +int _vdprintf(int level, _char *format, va_list arguments) + { + char *duptext; + int result; + + duptext = _strdup(format); + if (duptext == NULL) + { + return __dgetfail(level, format); + } + + result = vdprintf(level, duptext, arguments); + + free(duptext); + return result; + } +#endif + +/* ------------------------------------------------------------------------- */ + +#ifdef MODULE__fprintf +int _fprintf(FILE *stream, _char *format, ...) + { + va_list arguments; + int result; + + va_start(arguments, format); + result = _vfprintf(stream, format, arguments); + va_end(arguments); + + return result; + } +#endif + +#ifdef MODULE__vfprintf +int _vfprintf(FILE *stream, _char *format, va_list arguments) + { + char *duptext; + int result; + + duptext = _strdup(format); + if (duptext == NULL) + { + return __fgetfail(stream, format); + } + + result = vfprintf(stream, duptext, arguments); + + free(duptext); + return result; + } +#endif + +#ifdef MODULE__fputs +int _fputs(_char *string, FILE *stream) + { + char *duptext; + int result; + + duptext = _strdup(string); + if (duptext == NULL) + { + return __fgetfail(stream, string); + } + + result = fputs(duptext, stream); + + free(duptext); + return result; + } +#endif + +/* ------------------------------------------------------------------------- */ + +#ifdef MODULE__printf +int _printf(_char *format, ...) + { + va_list arguments; + int result; + + va_start(arguments, format); + result = _vprintf(format, arguments); + va_end(arguments); + + return result; + } +#endif + +#ifdef MODULE__vprintf +int _vprintf(_char *format, va_list arguments) + { + char *duptext; + int result; + + duptext = _strdup(format); + if (duptext == NULL) + { + return __getfail(format); + } + + result = vprintf(duptext, arguments); + + free(duptext); + return result; + } +#endif + +#ifdef MODULE__puts +int _puts(_char *string) + { + char *duptext; + int result; + + duptext = _strdup(string); + if (duptext == NULL) + { + return __getfail(string); + } + + result = puts(duptext); + + free(duptext); + return result; + } +#endif + +/* ------------------------------------------------------------------------- */ + +#ifdef MODULE__strcpy +char *_strcpy(char *buffer, _char *string) + { + char *duptext; + + duptext = _strdup(string); + if (duptext == NULL) + { + __getfail(string); + + /* attempt to continue with a null string */ + *buffer = 0; + return buffer; + } + + strcpy(buffer, duptext); + + free(duptext); + return buffer; + } +#endif + +#ifdef MODULE__strlen +int _strlen(_char *string) + { + int result; + char *duptext; + + duptext = _strdup(string); + if (duptext == NULL) + { + __getfail(string); + + /* attempt to continue with a null string */ + return 0; + } + + /* note: it has to be done this way due to plurals handling */ + result = strlen(duptext); + + free(duptext); + return result; + } +#endif + +#ifdef MODULE__strncmp +int _strncmp(const char *buffer, _char *string, size_t count) + { + int result; + char *duptext; + + duptext = _strdup(string); + if (duptext == NULL) + { + __getfail(string); + + /* attempt to continue with a null string */ + return *buffer ? 1 : 0; + } + + result = strncmp(buffer, duptext, count); + + free(duptext); + return result; + } +#endif + +#ifdef MODULE__strncpy +char *_strncpy(char *buffer, _char *string, size_t count) + { + char *duptext; + + duptext = _strdup(string); + if (duptext == NULL) + { + __getfail(string); + + /* attempt to continue with a null string */ + memset(buffer, 0, count); + return buffer; + } + + strncpy(buffer, duptext, count); + + free(duptext); + return buffer; + } +#endif + +/* ------------------------------------------------------------------------- */ + diff --git a/src/nos/intl/makefile b/src/nos/intl/makefile new file mode 100644 index 00000000..89c3988f --- /dev/null +++ b/src/nos/intl/makefile @@ -0,0 +1,10 @@ +# makefile by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +include ../make.d/host.mk +include auto.mk +$(GENERATE) + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/ipsec_mk b/src/nos/ipsec_mk new file mode 100644 index 00000000..2365f47b --- /dev/null +++ b/src/nos/ipsec_mk @@ -0,0 +1,20 @@ +# makefile by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +SRCDIR=.. +MAKEDIR=$(SRCDIR)\\makedir + +include $(MAKEDIR)\\z80_make + +# ----------------------------------------------------------------------------- + +IPSEC= ipsec.rel esp.rel deskey.rel des3borl.rel desborl.rel \ + desspa.rel ah.rel + +# ----------------------------------------------------------------------------- + +ipsec.lib: $(IPSEC) + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/lib/clients.lib b/src/nos/lib/clients.lib new file mode 100644 index 00000000..ae9e90a2 --- /dev/null +++ b/src/nos/lib/clients.lib @@ -0,0 +1,87 @@ +clients_lib/bootp.rel + _bootp_validPacket + _dobootp + _WantBootp +clients_lib/finger.rel + _dofinger +clients_lib/Notsess.rel + _Notsess +clients_lib/Ftpcmds.rel + _Ftpcmds +clients_lib/doftp.rel + _doftp +clients_lib/doverbose.rel + _doverbose +clients_lib/dobatch.rel + _dobatch +clients_lib/doupdate.rel + _doupdate +clients_lib/dohash.rel + _dohash +clients_lib/doquit.rel + _doquit +clients_lib/doftpcd.rel + _doftpcd +clients_lib/domkdir.rel + _domkdir +clients_lib/dormdir.rel + _dormdir +clients_lib/dobinary.rel + _dobinary +clients_lib/doascii.rel + _doascii +clients_lib/dotype.rel + _dotype +clients_lib/doget.rel + _doget +clients_lib/doread.rel + _doread +clients_lib/domget.rel + _domget +clients_lib/dolist.rel + _dolist +clients_lib/dols.rel + _dols +clients_lib/domd5.rel + _domd5 +clients_lib/docompare.rel + _docompare +clients_lib/domcompare.rel + _domcompare +clients_lib/compsub.rel + _compsub +clients_lib/getsub.rel + _getsub +clients_lib/doput.rel + _doput +clients_lib/domput.rel + _domput +clients_lib/putsub.rel + _putsub +clients_lib/sendport.rel + _sendport +clients_lib/getresp.rel + _getresp +clients_lib/getline.rel + _getline +clients_lib/keychar.rel + _keychar +clients_lib/lterm.rel + _dolterm +clients_lib/telnet.rel + _dontopt + _willopt + _tel_connect + _answer + _tnrecv + _doeol + _tel_output + _dotopt + _wontopt + _dotelnet + _doopt + _doecho + _Topt + _Refuse_echo + _Tn_cr_mode + _T_options diff --git a/src/nos/lib/clients_lib/Ftpcmds.rel b/src/nos/lib/clients_lib/Ftpcmds.rel new file mode 100644 index 00000000..fa088466 --- /dev/null +++ b/src/nos/lib/clients_lib/Ftpcmds.rel @@ -0,0 +1,156 @@ +XL4 +H 4 areas 3C global symbols +S _domget Ref00000000 +S ___04db_b64c_mget Ref00000000 +S ___041b_4126_batch Ref00000000 +S ___053d_c7a9_read_20_3cremotefil Ref00000000 +S _doverbose Ref00000000 +S ___041e_3245_binary Ref00000000 +S _donothing Ref00000000 +S ___040d_4354_ascii Ref00000000 +S _dolist Ref00000000 +S ___05d9_ab5c_verbose Ref00000000 +S ___053c_054d_read Ref00000000 +S ___0532_8f3b_put_20_3clocalfile_ Ref00000000 +S ___04df_7d04_mkdir_20_3cdirector Ref00000000 +S _doget Ref00000000 +S ___0494_9e35_get Ref00000000 +S ___04c1_7d51_ls Ref00000000 +S ___04b8_7bad_list Ref00000000 +S ___0000_ffff_ Ref00000000 +S _dotype Ref00000000 +S _dobatch Ref00000000 +S _doupdate Ref00000000 +S _doquit Ref00000000 +S ___042e_42c2_cd_20_3cdirectory_3 Ref00000000 +S _dobinary Ref00000000 +S _domput Ref00000000 +S _domd5 Ref00000000 +S ___05cb_db93_update Ref00000000 +S ___0558_a56c_rmdir Ref00000000 +S _doascii Ref00000000 +S ___04e8_312f_mput_20_3cfile_3e_2 Ref00000000 +S ___0495_c7c0_get_20_3cremotefile Ref00000000 +S ___0443_ea90_compare Ref00000000 +S .__.ABS. Def00000000 +S ___049a_156e_hash Ref00000000 +S _doftpcd Ref00000000 +S ___04d2_a71a_md5 Ref00000000 +S ___0461_bdc7_dir Ref00000000 +S _domcompare Ref00000000 +S ___0531_0234_put Ref00000000 +S _domkdir Ref00000000 +S _doput Ref00000000 +S ___0444_a613_compare_20_3cremote Ref00000000 +S ___04e7_2a4d_mput Ref00000000 +S _doread Ref00000000 +S ___04dc_8d01_mget_20_3cfile_3e_2 Ref00000000 +S ___042d_9aa7_cd Ref00000000 +S _dormdir Ref00000000 +S ___04fe_7b66_nlst Ref00000000 +S _dols Ref00000000 +S ___0559_b9e3_rmdir_20_3cdirector Ref00000000 +S ___04d1_f47e_mcompare_20_3cfile_ Ref00000000 +S ___05c3_f321_type Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dohash Ref00000000 +S ___04de_304a_mkdir Ref00000000 +S _docompare Ref00000000 +S ___053b_7b54_quit Ref00000000 +S ___04d0_8c4f_mcompare Ref00000000 +S ___04d3_cc78_md5_20_3cfile_3e Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 145 flags 0 +S _Ftpcmds Def00000000 +A CDATA0 size 145 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 11 00 4A 08 06 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 07 00 +T 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 1C 00 +T 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 02 00 4A 08 13 00 +T 22 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 05 00 +T 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 17 00 +T 34 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 2D 00 4A 08 22 00 +T 3C 00 00 00 02 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 06 16 00 4A 0A 1F 00 +T 44 00 00 00 00 00 00 00 00 00 02 00 +R 00 00 03 00 4A 04 37 00 +T 4B 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 29 00 4A 08 24 00 +T 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 08 00 +T 5B 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 10 00 4A 08 08 00 +T 63 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 0E 00 +T 6B 00 00 00 00 00 00 00 00 00 02 00 +R 00 00 03 00 4A 04 0D 00 +T 72 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 1E 00 4A 08 21 00 +T 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 35 00 +T 82 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0F 00 4A 08 30 00 +T 8A 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 39 00 +T 92 00 00 00 00 00 00 00 00 00 02 00 +R 00 00 03 00 4A 04 25 00 +T 99 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 32 00 4A 08 23 00 +T 9F 00 00 00 00 00 00 00 00 00 02 00 +R 00 00 03 00 4A 04 19 00 +T A6 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 3A 00 4A 08 01 00 +T AC 00 00 00 00 00 00 00 00 00 02 00 +R 00 00 03 00 4A 04 00 00 +T B3 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 2C 00 4A 08 36 00 +T B9 00 00 00 00 00 00 00 00 00 02 00 +R 00 00 03 00 4A 04 27 00 +T C0 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0C 00 4A 08 2A 00 +T C6 00 00 00 00 00 00 00 00 00 02 00 +R 00 00 03 00 4A 04 18 00 +T CD 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 1D 00 4A 08 2F 00 +T D3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 30 00 +T DD 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 38 00 4A 08 15 00 +T E5 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 0A 00 +T ED 00 00 00 00 00 00 00 00 00 02 00 +R 00 00 03 00 4A 04 2B 00 +T F4 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 03 00 4A 08 1B 00 +T FA 00 00 00 00 00 00 00 00 00 02 00 +R 00 00 03 00 4A 04 2E 00 +T 01 01 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 31 00 4A 08 26 00 +T 07 01 00 00 00 00 00 00 00 00 02 00 +R 00 00 03 00 4A 04 28 00 +T 0E 01 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0B 00 4A 08 33 00 +T 14 01 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 12 00 +T 1E 01 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 1A 00 4A 08 14 00 +T 26 01 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 09 00 +T 2E 01 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 04 00 +T 38 01 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 42 01 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/clients_lib/Notsess.rel b/src/nos/lib/clients_lib/Notsess.rel new file mode 100644 index 00000000..61e72a4d --- /dev/null +++ b/src/nos/lib/clients_lib/Notsess.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___0315_b4ba_Not_20an_20FTP_20se Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Notsess Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/clients_lib/bootp.rel b/src/nos/lib/clients_lib/bootp.rel new file mode 100644 index 00000000..2ddb58f7 --- /dev/null +++ b/src/nos/lib/clients_lib/bootp.rel @@ -0,0 +1,1225 @@ +XL4 +H 5 areas 40 global symbols +S _put16 Ref00000000 +S _add_nameserver Ref00000000 +S ___0365_6bd1_Requesting_2e_2e_2e Ref00000000 +S _rt_blookup Ref00000000 +S _inet_ntoa Ref00000000 +S _ntohudp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0049_d7d4__20_20_20_20_20Broa Ref00000000 +S ___0421_0e8f_bootp_3a_20Net_5fer Ref00000000 +S _strncmp Ref00000000 +S _if_lookup Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S ?L_AND_L03 Ref00000000 +S _memset Ref00000000 +S _memcpy Ref00000000 +S _Ifaces Ref00000000 +S _len_p Ref00000000 +S _send_udp Ref00000000 +S ___02ac_d726_Invalid_20magic_20c Ref00000000 +S _strncpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alloc_mbuf Ref00000000 +S ___004e_7765__20_20_20_20_20Name Ref00000000 +S ___0420_ff8d_bootp_20_5bnet_5fna Ref00000000 +S _strlen Ref00000000 +S _recv_udp Ref00000000 +S _dup_p Ref00000000 +S ?L_OR_L03 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _open_udp Ref00000000 +S ___004a_f5a8__20_20_20_20_20Defa Ref00000000 +S _del_udp Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _kwait Ref00000000 +S _pullup Ref00000000 +S _pull32 Ref00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _pull16 Ref00000000 +S _get32 Ref00000000 +S ___0422_f5d9_bootp_3a_20timed_20 Ref00000000 +S ?L_NOT_L03 Ref00000000 +S ___0305_e0c6_Network_20_25s_20co Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _rt_add Ref00000000 +S _time Ref00000000 +S _mallocw Ref00000000 +S _Net_error Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S ___004f_6879__20_20_20_20_20Subn Ref00000000 +S __printf Ref00000000 +S _Ip_addr Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___004d_1775__20_20_20_20_20IP_2 Ref00000000 +S ___004b_de7b__20_20_20_20_20Host Ref00000000 +S _rt_drop Ref00000000 +S _put32 Ref00000000 +S _Hostname Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E99 flags 0 +S _bootp_validPacket Def00000DA6 +S _dobootp Def00000000 +A CSTR size D flags 0 +A IDATA0 size 4 flags 0 +S _WantBootp Def00000000 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF AF DD 77 DE +R 00 00 01 00 02 05 2C 00 +T 09 00 00 00 DD 77 DF 11 02 80 DD 6E 02 DD 66 +R 00 00 01 00 +T 14 00 00 00 03 3E 80 AC 67 ED 52 30 0C +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 2A 00 00 00 00 DD 75 DE DD 74 DF +R 00 00 01 00 02 05 0F 00 +T 26 00 00 00 C3 11 01 00 00 +R 00 00 01 00 00 05 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 6E 02 DD 66 03 DD 4E FE DD 46 +R 00 00 01 00 +T 3C 00 00 00 FF A7 ED 42 CA 11 01 00 00 +R 00 00 01 00 00 09 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 6E FE DD 66 FF 29 DD 4E 04 DD +R 00 00 01 00 +T 4E 00 00 00 46 05 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 56 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0A 00 02 0A 06 00 +T 5D 00 00 00 75 DE DD 74 DF 7D B4 28 03 +R 00 00 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 C3 06 01 00 00 +R 00 00 01 00 00 05 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 DD 6E FE DD 66 FF 29 DD 4E 04 DD +R 00 00 01 00 +T 74 00 00 00 46 05 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 7C 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 18 00 02 0A 06 00 +T 83 00 00 00 01 00 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 00 05 02 00 +T 8C 00 00 00 29 DD 5E 04 DD 56 05 19 5E 23 56 +R 00 00 01 00 +T 97 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 9D 00 00 00 00 00 00 00 F1 7D B4 20 08 +R 00 00 01 00 02 04 06 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 21 01 00 22 02 00 00 00 18 5A +R 00 00 01 00 00 08 03 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 DD 6E FE DD 66 FF 29 DD 4E 04 DD +R 00 00 01 00 +T B7 00 00 00 46 05 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T BF 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 18 00 02 0A 06 00 +T C6 00 00 00 01 07 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 00 05 02 00 +T CF 00 00 00 29 DD 5E 04 DD 56 05 19 5E 23 56 +R 00 00 01 00 +T DA 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T E0 00 00 00 00 00 00 00 F1 7D B4 20 08 +R 00 00 01 00 02 04 06 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 21 00 00 22 02 00 00 00 18 17 +R 00 00 01 00 00 08 03 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 17 00 02 0B 17 00 +T F5 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 34 00 02 0B 34 00 +T FB 00 00 00 CD 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 05 06 00 +T 04 01 00 00 2A 05 00 00 +R 00 00 01 00 00 04 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 0E 01 00 00 +R 00 00 01 00 +T 0E 01 00 00 C3 31 00 00 00 +R 00 00 01 00 00 05 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 DD 7E DE DD B6 DF 20 06 +R 00 00 01 00 +T 19 01 00 00 +R 00 00 01 00 +T 19 01 00 00 21 00 00 C3 2A 05 00 00 +R 00 00 01 00 00 08 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 21 04 00 DD 4E DE DD 46 DF 09 4E +R 00 00 01 00 +T 2A 01 00 00 23 46 23 5E 23 56 69 60 DD 75 E0 +R 00 00 01 00 +T 35 01 00 00 DD 74 E1 DD 73 E2 DD 72 E3 DD 36 +R 00 00 01 00 +T 40 01 00 00 E4 44 DD 36 E5 00 0E 00 C5 21 +R 00 00 01 00 +T 4A 01 00 00 00 00 E5 21 06 00 39 5D 54 3E +R 00 00 01 00 +T 54 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T 59 01 00 00 00 00 00 00 F1 F1 DD 75 EE DD 74 +R 00 00 01 00 02 04 06 00 +T 62 01 00 00 EF 21 08 00 DD 4E DE DD 46 DF 09 +R 00 00 01 00 +T 6D 01 00 00 5E 23 56 23 4E 23 46 EB DD 75 E6 +R 00 00 01 00 +T 78 01 00 00 DD 74 E7 DD 71 E8 DD 70 E9 DD 36 +R 00 00 01 00 +T 83 01 00 00 EA 43 DD 36 EB 00 21 18 00 39 5D +R 00 00 01 00 +T 8E 01 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2E 00 02 0B 2E 00 +T 94 01 00 00 CD 00 00 00 00 AF DD 77 FA DD 77 +R 00 00 01 00 02 05 06 00 +T 9D 01 00 00 FB DD 77 FC DD 77 FD +R 00 00 01 00 +T A4 01 00 00 +R 00 00 01 00 +T A4 01 00 00 21 01 00 22 00 00 00 00 21 14 00 +R 00 00 01 00 00 08 03 00 +T AD 01 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 2E 00 +T B3 01 00 00 00 00 00 00 CD 00 00 00 00 A7 DD +R 00 00 01 00 02 04 2E 00 02 09 06 00 +T BA 01 00 00 6E F2 DD 66 F3 DD 4E F6 DD 46 F7 +R 00 00 01 00 +T C5 01 00 00 ED 42 EB DD 6E F4 DD 66 F5 DD 4E +R 00 00 01 00 +T D0 01 00 00 F8 DD 46 F9 ED 42 EB A7 01 1E 00 +R 00 00 01 00 +T DB 01 00 00 ED 42 EB 01 00 00 ED 42 38 14 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 29 00 02 0B 29 00 +T EB 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 34 00 02 0B 34 00 +T F1 01 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 06 00 +T F7 01 00 00 13 05 00 00 +R 00 00 01 00 00 04 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 A7 DD 6E F2 DD 66 F3 DD 4E FA DD +R 00 00 01 00 +T 04 02 00 00 46 FB ED 42 EB DD 6E F4 DD 66 F5 +R 00 00 01 00 +T 0F 02 00 00 DD 4E FC DD 46 FD ED 42 E5 D5 A7 +R 00 00 01 00 +T 1A 02 00 00 21 05 00 C1 ED 42 21 00 00 C1 ED +R 00 00 01 00 +T 25 02 00 00 42 D2 A9 04 00 00 +R 00 00 01 00 00 06 01 00 +T 29 02 00 00 +R 00 00 01 00 +T 29 02 00 00 2A 02 00 00 00 7D B4 20 11 +R 00 00 01 00 00 05 03 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 02 00 02 0B 02 00 +T 36 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 34 00 02 0B 34 00 +T 3C 02 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 06 00 +T 41 02 00 00 +R 00 00 01 00 +T 41 02 00 00 11 2C 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 15 00 +T 47 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 15 00 02 09 06 00 +T 4E 02 00 00 EC DD 74 ED 7D B4 20 03 +R 00 00 01 00 +T 56 02 00 00 +R 00 00 01 00 +T 56 02 00 00 C3 13 05 00 00 +R 00 00 01 00 00 05 01 00 +T 59 02 00 00 +R 00 00 01 00 +T 59 02 00 00 21 0A 00 DD 4E EC DD 46 ED 09 56 +R 00 00 01 00 +T 64 02 00 00 23 66 6A DD 75 F0 DD 74 F1 23 DD +R 00 00 01 00 +T 6F 02 00 00 75 F0 DD 74 F1 2B 36 01 21 3D 00 +R 00 00 01 00 +T 7A 02 00 00 DD 4E DE DD 46 DF 09 56 23 66 6A +R 00 00 01 00 +T 85 02 00 00 11 0E 00 19 56 DD 6E F0 DD 66 F1 +R 00 00 01 00 +T 90 02 00 00 23 DD 75 F0 DD 74 F1 2B 72 21 +R 00 00 01 00 +T 9A 02 00 00 3D 00 09 56 23 66 6A 11 10 00 19 +R 00 00 01 00 +T A5 02 00 00 56 DD 6E F0 DD 66 F1 23 DD 75 F0 +R 00 00 01 00 +T B0 02 00 00 DD 74 F1 2B 72 DD 6E F0 DD 66 F1 +R 00 00 01 00 +T BB 02 00 00 23 DD 75 F0 DD 74 F1 2B 36 00 DD +R 00 00 01 00 +T C6 02 00 00 6E F4 DD 66 F5 E5 DD 6E F2 DD 66 +R 00 00 01 00 +T D1 02 00 00 F3 E5 DD 5E F0 DD 56 F1 3E +R 00 00 01 00 +T DA 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3B 00 02 09 3B 00 +T DF 02 00 00 00 00 00 00 F1 F1 DD 75 F0 DD 74 +R 00 00 01 00 02 04 06 00 +T E8 02 00 00 F1 DD 5E F6 DD 56 F7 DD 6E F2 DD +R 00 00 01 00 +T F3 02 00 00 66 F3 A7 ED 52 4D 44 DD 5E F0 DD +R 00 00 01 00 +T FE 02 00 00 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T 03 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 06 00 +T 0A 03 00 00 F0 DD 74 F1 01 00 00 EB 3E +R 00 00 01 00 +T 13 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 18 03 00 00 00 00 00 00 DD 75 F0 DD 74 F1 21 +R 00 00 01 00 02 04 06 00 +T 21 03 00 00 04 00 DD 4E DE DD 46 DF 09 5E 23 +R 00 00 01 00 +T 2C 03 00 00 56 23 4E 23 46 C5 D5 DD 5E F0 DD +R 00 00 01 00 +T 37 03 00 00 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 3B 00 +T 3C 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 3B 00 02 09 06 00 +T 43 03 00 00 DD 75 F0 DD 74 F1 01 00 00 C5 01 +R 00 00 01 00 +T 4E 03 00 00 00 00 C5 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 3B 00 +T 55 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 3B 00 02 09 06 00 +T 5C 03 00 00 DD 75 F0 DD 74 F1 01 00 00 C5 01 +R 00 00 01 00 +T 67 03 00 00 00 00 C5 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 3B 00 +T 6E 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 3B 00 02 09 06 00 +T 75 03 00 00 DD 75 F0 DD 74 F1 01 00 00 C5 01 +R 00 00 01 00 +T 80 03 00 00 00 00 C5 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 3B 00 +T 87 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 3B 00 02 09 06 00 +T 8E 03 00 00 DD 75 F0 DD 74 F1 21 3D 00 DD 4E +R 00 00 01 00 +T 99 03 00 00 DE DD 46 DF 09 56 23 66 6A 11 +R 00 00 01 00 +T A3 03 00 00 10 00 19 5E 23 56 D5 21 37 00 09 +R 00 00 01 00 +T AE 03 00 00 4E 23 46 DD 5E F0 DD 56 F1 3E +R 00 00 01 00 +T B8 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T BD 03 00 00 00 00 00 00 F1 21 12 00 39 7E C6 +R 00 00 01 00 02 04 06 00 +T C6 03 00 00 10 77 23 7E CE 00 77 21 40 00 E5 +R 00 00 01 00 +T D1 03 00 00 01 00 00 DD 5E F0 DD 56 F1 3E +R 00 00 01 00 +T DB 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T E0 03 00 00 00 00 00 00 F1 21 12 00 39 7E C6 +R 00 00 01 00 02 04 06 00 +T E9 03 00 00 40 77 23 7E CE 00 77 21 80 00 E5 +R 00 00 01 00 +T F4 03 00 00 01 00 00 DD 5E F0 DD 56 F1 3E +R 00 00 01 00 +T FE 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 03 04 00 00 00 00 00 00 F1 21 12 00 39 7E C6 +R 00 00 01 00 02 04 06 00 +T 0C 04 00 00 80 77 23 7E CE 00 77 21 40 00 E5 +R 00 00 01 00 +T 17 04 00 00 01 00 00 DD 5E F0 DD 56 F1 3E +R 00 00 01 00 +T 21 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 26 04 00 00 00 00 00 00 F1 21 12 00 39 7E C6 +R 00 00 01 00 02 04 06 00 +T 2F 04 00 00 40 77 23 7E CE 00 77 21 0C 00 DD +R 00 00 01 00 +T 3A 04 00 00 4E EC DD 46 ED 09 E5 21 0A 00 09 +R 00 00 01 00 +T 45 04 00 00 5E 23 56 DD 6E F0 DD 66 F1 A7 ED +R 00 00 01 00 +T 50 04 00 00 52 EB E1 73 23 72 0E 00 C5 21 +R 00 00 01 00 +T 5A 04 00 00 00 00 E5 21 0C 00 DD 4E EC DD 46 +R 00 00 01 00 +T 65 04 00 00 ED 09 5E 23 56 D5 21 14 00 39 E5 +R 00 00 01 00 +T 70 04 00 00 0E 00 C5 0E 00 C5 21 14 00 39 4D +R 00 00 01 00 +T 7B 04 00 00 44 21 0E 00 39 5D 54 3E +R 00 00 01 00 +T 83 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 88 04 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 06 00 +T 91 04 00 00 DD 4E F4 DD 46 F5 DD 6E F2 DD 66 +R 00 00 01 00 +T 9C 04 00 00 F3 DD 75 FA DD 74 FB DD 71 FC DD +R 00 00 01 00 +T A7 04 00 00 70 FD +R 00 00 01 00 +T A9 04 00 00 +R 00 00 01 00 +T A9 04 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 22 00 +T AF 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 22 00 02 09 06 00 +T B5 04 00 00 0E 00 39 E5 21 0A 00 39 4D 44 DD +R 00 00 01 00 +T C0 04 00 00 5E EE DD 56 EF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 19 00 +T C8 04 00 00 00 00 00 00 CD 00 00 00 00 F1 4D +R 00 00 01 00 02 04 19 00 02 09 06 00 +T CF 04 00 00 44 21 FF FF CD 00 00 00 00 30 17 +R 00 00 01 00 02 09 31 00 +T D8 04 00 00 +R 00 00 01 00 +T D8 04 00 00 DD 4E EC DD 46 ED DD 5E DE DD 56 +R 00 00 01 00 +T E3 04 00 00 DF CD 2D 05 00 00 7D B4 28 02 +R 00 00 01 00 00 06 01 00 +T EB 04 00 00 +R 00 00 01 00 +T EB 04 00 00 18 26 +R 00 00 01 00 +T ED 04 00 00 +R 00 00 01 00 +T ED 04 00 00 18 21 +R 00 00 01 00 +T EF 04 00 00 +R 00 00 01 00 +T EF 04 00 00 2A 00 00 00 00 3E 05 AD B4 28 18 +R 00 00 01 00 02 05 30 00 +T F8 04 00 00 +R 00 00 01 00 +T F8 04 00 00 2A 00 00 00 00 E5 0E 00 00 00 00 +R 00 00 01 00 02 05 30 00 2B 0B 08 00 +T FE 04 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 08 00 +T 04 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 34 00 02 09 34 00 +T 09 05 00 00 00 00 00 00 F1 F1 F1 18 03 +R 00 00 01 00 02 04 06 00 +T 10 05 00 00 +R 00 00 01 00 +T 10 05 00 00 +R 00 00 01 00 +T 10 05 00 00 C3 A4 01 00 00 +R 00 00 01 00 00 05 01 00 +T 13 05 00 00 +R 00 00 01 00 +T 13 05 00 00 21 00 00 22 00 00 00 00 DD 5E EE +R 00 00 01 00 00 08 03 00 +T 1C 05 00 00 DD 56 EF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 1F 00 +T 22 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1F 00 02 09 06 00 +T 28 05 00 00 00 00 +R 00 00 01 00 +T 2A 05 00 00 +R 00 00 01 00 +T 2A 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 14 00 +T 2D 05 00 00 +R 00 00 01 00 +T 2D 05 00 00 CD 00 00 00 00 BC FE 21 04 00 39 +R 00 00 01 00 02 05 2C 00 +T 36 05 00 00 AF 77 23 77 23 77 23 77 21 08 00 +R 00 00 01 00 +T 41 05 00 00 39 AF 77 23 77 23 77 23 77 59 50 +R 00 00 01 00 +T 4C 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T 52 05 00 00 00 00 00 00 01 2C 01 A7 ED 42 28 +R 00 00 01 00 02 04 06 00 +T 5B 05 00 00 14 +R 00 00 01 00 +T 5C 05 00 00 +R 00 00 01 00 +T 5C 05 00 00 21 48 01 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 32 00 +T 64 05 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 32 00 02 0A 06 00 +T 6B 05 00 00 00 00 C3 E8 0B 00 00 +R 00 00 01 00 00 07 01 00 +T 70 05 00 00 +R 00 00 01 00 +T 70 05 00 00 21 16 00 39 4D 44 21 48 01 39 5D +R 00 00 01 00 +T 7B 05 00 00 54 CD EB 0B 00 00 21 48 01 39 5D +R 00 00 01 00 00 06 01 00 +T 84 05 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 32 00 02 0B 32 00 +T 8A 05 00 00 CD 00 00 00 00 21 16 00 39 46 05 +R 00 00 01 00 02 05 06 00 +T 93 05 00 00 05 28 06 +R 00 00 01 00 +T 96 05 00 00 +R 00 00 01 00 +T 96 05 00 00 21 00 00 C3 E8 0B 00 00 +R 00 00 01 00 00 08 01 00 +T 9C 05 00 00 +R 00 00 01 00 +T 9C 05 00 00 2A 02 00 00 00 7D B4 20 1E +R 00 00 01 00 00 05 03 00 +T A3 05 00 00 +R 00 00 01 00 +T A3 05 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T AE 05 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 2B 00 +T B3 05 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 2B 00 2B 0A 34 00 +T B9 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 34 00 02 09 06 00 +T C0 05 00 00 F1 +R 00 00 01 00 +T C1 05 00 00 +R 00 00 01 00 +T C1 05 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T CC 05 00 00 23 B6 23 B6 23 B6 20 69 +R 00 00 01 00 +T D4 05 00 00 +R 00 00 01 00 +T D4 05 00 00 21 26 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T DF 05 00 00 EB 7C 07 9F 4F 41 22 00 00 00 00 +R 00 00 01 00 02 0B 35 00 +T E8 05 00 00 ED 43 02 00 00 00 21 04 00 DD 4E +R 00 00 01 00 02 06 35 00 +T F1 05 00 00 02 DD 46 03 09 E5 21 28 00 39 5E +R 00 00 01 00 +T FC 05 00 00 23 56 23 4E 23 46 E1 73 23 72 23 +R 00 00 01 00 +T 07 06 00 00 71 23 70 2A 02 00 00 00 7D B4 20 +R 00 00 01 00 00 08 03 00 +T 10 06 00 00 2C +R 00 00 01 00 +T 11 06 00 00 +R 00 00 01 00 +T 11 06 00 00 21 04 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1C 06 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 24 06 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 04 00 02 0A 06 00 +T 2B 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 38 00 02 0B 38 00 +T 31 06 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 34 00 02 0B 34 00 +T 37 06 00 00 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 05 06 00 +T 3D 06 00 00 +R 00 00 01 00 +T 3D 06 00 00 +R 00 00 01 00 +T 3D 06 00 00 21 16 00 39 01 EC 00 09 DD 75 FE +R 00 00 01 00 +T 48 06 00 00 DD 74 FF EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 28 00 +T 4F 06 00 00 00 00 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 02 04 28 00 02 09 06 00 +T 56 06 00 00 01 63 53 A7 ED 42 20 08 EB 01 +R 00 00 01 00 +T 60 06 00 00 82 63 ED 42 28 17 +R 00 00 01 00 +T 66 06 00 00 +R 00 00 01 00 +T 66 06 00 00 +R 00 00 01 00 +T 66 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 12 00 02 0B 12 00 +T 6C 06 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 34 00 02 0B 34 00 +T 72 06 00 00 CD 00 00 00 00 F1 F1 21 00 00 C3 +R 00 00 01 00 02 05 06 00 +T 7B 06 00 00 E8 0B 00 00 +R 00 00 01 00 00 04 01 00 +T 7D 06 00 00 +R 00 00 01 00 +T 7D 06 00 00 21 42 01 39 7E C6 04 77 23 7E CE +R 00 00 01 00 +T 88 06 00 00 00 77 +R 00 00 01 00 +T 8A 06 00 00 +R 00 00 01 00 +T 8A 06 00 00 21 00 00 39 E5 DD 6E FE DD 66 FF +R 00 00 01 00 +T 95 06 00 00 4E 06 00 E1 71 23 70 3E FF A9 B0 +R 00 00 01 00 +T A0 06 00 00 CA 8E 0B 00 00 21 16 00 39 01 +R 00 00 01 00 00 05 01 00 +T A8 06 00 00 2C 01 09 4D 44 DD 6E FE DD 66 FF +R 00 00 01 00 +T B3 06 00 00 23 DD 75 FE DD 74 FF A7 ED 42 D2 +R 00 00 01 00 +T BE 06 00 00 8E 0B 00 00 +R 00 00 01 00 00 04 01 00 +T C0 06 00 00 +R 00 00 01 00 +T C0 06 00 00 +R 00 00 01 00 +T C0 06 00 00 +R 00 00 01 00 +T C0 06 00 00 21 00 00 39 5E 23 56 CD +R 00 00 01 00 +T C8 06 00 00 00 00 00 00 05 00 00 00 01 00 +R 00 00 01 00 02 04 0B 00 +T D0 06 00 00 03 00 06 00 0C 00 5B 0B 00 00 +R 00 00 01 00 00 0A 01 00 +T D8 06 00 00 78 09 00 00 06 0A 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T DC 06 00 00 A3 0A 00 00 E4 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T E0 06 00 00 E2 06 00 00 +R 00 00 01 00 00 04 01 00 +T E2 06 00 00 +R 00 00 01 00 +T E2 06 00 00 18 A6 +R 00 00 01 00 +T E4 06 00 00 +R 00 00 01 00 +T E4 06 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T EC 06 00 00 +R 00 00 01 00 +T EC 06 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 28 00 +T F4 06 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 28 00 02 0A 06 00 +T FB 06 00 00 21 12 00 39 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 06 07 00 00 70 21 42 01 39 7E C6 04 77 23 7E +R 00 00 01 00 +T 11 07 00 00 CE 00 77 21 14 00 39 E5 21 0C 00 +R 00 00 01 00 +T 1C 07 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 27 07 00 00 4E 23 46 CD 3A 0E 00 00 E5 21 +R 00 00 01 00 00 08 01 00 +T 2F 07 00 00 0C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 3A 07 00 00 56 23 4E 23 46 C5 D5 21 04 00 DD +R 00 00 01 00 +T 45 07 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 50 07 00 00 23 46 EB CD 00 00 00 00 EB 3E +R 00 00 01 00 02 08 0C 00 +T 58 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 5D 07 00 00 00 00 00 00 F1 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 06 00 +T 66 07 00 00 21 14 00 39 7E 23 B6 28 2E +R 00 00 01 00 +T 6F 07 00 00 +R 00 00 01 00 +T 6F 07 00 00 21 08 00 E5 21 16 00 39 4E 23 46 +R 00 00 01 00 +T 7A 07 00 00 E1 09 4E 23 46 C5 21 04 00 E5 21 +R 00 00 01 00 +T 85 07 00 00 18 00 39 4E 23 46 E1 09 5E 23 56 +R 00 00 01 00 +T 90 07 00 00 23 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 3A 00 +T 97 07 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 3A 00 02 09 06 00 +T 9D 07 00 00 +R 00 00 01 00 +T 9D 07 00 00 21 0C 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T A8 07 00 00 21 12 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T B3 07 00 00 E1 73 23 72 23 71 23 70 0E 00 C5 +R 00 00 01 00 +T BE 07 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T C9 07 00 00 E5 21 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 +T D4 07 00 00 E5 21 00 00 E5 21 00 00 E5 21 +R 00 00 01 00 +T DE 07 00 00 0C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T E9 07 00 00 56 23 4E 23 46 CD 3A 0E 00 00 E5 +R 00 00 01 00 00 0A 01 00 +T F2 07 00 00 21 04 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T FD 07 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2D 00 +T 05 08 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 2D 00 02 0A 06 00 +T 0C 08 00 00 21 12 00 39 F9 EB 2A 02 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 15 08 00 00 7D B4 20 26 +R 00 00 01 00 +T 19 08 00 00 +R 00 00 01 00 +T 19 08 00 00 21 10 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 24 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 2A 08 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 06 00 2B 0A 33 00 +T 30 08 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 33 00 2B 0B 34 00 +T 36 08 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 34 00 02 0A 06 00 +T 3D 08 00 00 F1 F1 +R 00 00 01 00 +T 3F 08 00 00 +R 00 00 01 00 +T 3F 08 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 4A 08 00 00 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 52 08 00 00 00 00 00 00 C5 E5 21 04 00 DD 4E +R 00 00 01 00 02 04 2A 00 +T 5B 08 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 66 08 00 00 46 EB CD 00 00 00 00 E5 21 0E 00 +R 00 00 01 00 02 07 1B 00 +T 6F 08 00 00 39 D1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T 79 08 00 00 14 00 39 E5 01 20 00 C5 21 08 00 +R 00 00 01 00 +T 84 08 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 8F 08 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 95 08 00 00 00 00 00 00 CD 00 00 00 00 F1 4D +R 00 00 01 00 02 04 03 00 02 09 06 00 +T 9C 08 00 00 44 E1 71 23 70 21 14 00 39 7E 23 +R 00 00 01 00 +T A7 08 00 00 B6 28 3A 21 12 00 E5 21 16 00 39 +R 00 00 01 00 +T B2 08 00 00 4E 23 46 E1 09 46 23 66 68 DD 4E +R 00 00 01 00 +T BD 08 00 00 02 DD 46 03 A7 ED 42 20 1E +R 00 00 01 00 +T C6 08 00 00 +R 00 00 01 00 +T C6 08 00 00 +R 00 00 01 00 +T C6 08 00 00 +R 00 00 01 00 +T C6 08 00 00 21 20 00 E5 21 08 00 DD 4E 02 DD +R 00 00 01 00 +T D1 08 00 00 46 03 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T DC 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3A 00 02 09 3A 00 +T E1 08 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 06 00 +T E4 08 00 00 +R 00 00 01 00 +T E4 08 00 00 21 08 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T EF 08 00 00 21 0E 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T FA 08 00 00 E1 73 23 72 23 71 23 70 0E 01 C5 +R 00 00 01 00 +T 05 09 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 10 09 00 00 E5 21 01 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 1B 09 00 00 E5 21 00 00 E5 21 00 00 E5 21 +R 00 00 01 00 +T 25 09 00 00 20 00 E5 21 08 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 30 09 00 00 03 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 3A 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2D 00 02 09 2D 00 +T 3F 09 00 00 00 00 00 00 EB 21 12 00 39 F9 EB +R 00 00 01 00 02 04 06 00 +T 48 09 00 00 2A 02 00 00 00 7D B4 20 26 +R 00 00 01 00 00 05 03 00 +T 4F 09 00 00 +R 00 00 01 00 +T 4F 09 00 00 21 0C 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 5A 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 60 09 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 06 00 2B 0A 07 00 +T 66 09 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 07 00 2B 0B 34 00 +T 6C 09 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 34 00 02 0A 06 00 +T 73 09 00 00 F1 F1 +R 00 00 01 00 +T 75 09 00 00 +R 00 00 01 00 +T 75 09 00 00 C3 8B 0B 00 00 +R 00 00 01 00 00 05 01 00 +T 78 09 00 00 +R 00 00 01 00 +T 78 09 00 00 21 02 00 39 E5 DD 6E FE DD 66 FF +R 00 00 01 00 +T 83 09 00 00 4E 06 00 E1 71 23 70 DD 34 FE 20 +R 00 00 01 00 +T 8E 09 00 00 03 DD 34 FF +R 00 00 01 00 +T 92 09 00 00 +R 00 00 01 00 +T 92 09 00 00 2A 00 00 00 00 7D B4 28 0C +R 00 00 01 00 02 05 3C 00 +T 99 09 00 00 +R 00 00 01 00 +T 99 09 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 3C 00 2B 0B 25 00 +T 9F 09 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 25 00 02 0A 06 00 +T A5 09 00 00 +R 00 00 01 00 +T A5 09 00 00 21 02 00 39 5E 23 56 3E +R 00 00 01 00 +T AD 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2F 00 02 09 2F 00 +T B2 09 00 00 00 00 00 00 22 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 02 09 3C 00 +T B8 09 00 00 02 00 39 4E 23 46 C5 DD 4E FE DD +R 00 00 01 00 +T C3 09 00 00 46 FF ED 5B 00 00 00 00 3E +R 00 00 01 00 02 08 3C 00 +T CA 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T CF 09 00 00 00 00 00 00 F1 21 42 01 39 E5 21 +R 00 00 01 00 02 04 06 00 +T D8 09 00 00 04 00 39 4E 23 46 E1 7E 81 77 23 +R 00 00 01 00 +T E3 09 00 00 7E 88 77 2A 02 00 00 00 7D B4 20 +R 00 00 01 00 00 08 03 00 +T EC 09 00 00 16 +R 00 00 01 00 +T ED 09 00 00 +R 00 00 01 00 +T ED 09 00 00 2A 00 00 00 00 E5 0E 00 00 00 00 +R 00 00 01 00 02 05 3C 00 2B 0B 39 00 +T F3 09 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 39 00 +T F9 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 34 00 02 09 34 00 +T FE 09 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 06 00 +T 03 0A 00 00 +R 00 00 01 00 +T 03 0A 00 00 C3 8B 0B 00 00 +R 00 00 01 00 00 05 01 00 +T 06 0A 00 00 +R 00 00 01 00 +T 06 0A 00 00 21 02 00 39 E5 DD 6E FE DD 66 FF +R 00 00 01 00 +T 11 0A 00 00 4E 06 00 E1 71 23 70 DD 34 FE 20 +R 00 00 01 00 +T 1C 0A 00 00 03 DD 34 FF +R 00 00 01 00 +T 20 0A 00 00 +R 00 00 01 00 +T 20 0A 00 00 +R 00 00 01 00 +T 20 0A 00 00 21 02 00 39 7E 23 B6 28 77 +R 00 00 01 00 +T 29 0A 00 00 +R 00 00 01 00 +T 29 0A 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 28 00 +T 31 0A 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 28 00 02 0A 06 00 +T 38 0A 00 00 21 0A 00 39 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 43 0A 00 00 70 21 08 00 39 5E 23 56 23 4E 23 +R 00 00 01 00 +T 4E 0A 00 00 46 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 54 0A 00 00 CD 00 00 00 00 2A 02 00 00 00 7D +R 00 00 01 00 02 05 06 00 00 0A 03 00 +T 5B 0A 00 00 B4 20 26 +R 00 00 01 00 +T 5E 0A 00 00 +R 00 00 01 00 +T 5E 0A 00 00 21 08 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 69 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 6F 0A 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 06 00 2B 0A 16 00 +T 75 0A 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 16 00 2B 0B 34 00 +T 7B 0A 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 34 00 02 0A 06 00 +T 82 0A 00 00 F1 F1 +R 00 00 01 00 +T 84 0A 00 00 +R 00 00 01 00 +T 84 0A 00 00 21 42 01 39 7E C6 04 77 23 7E CE +R 00 00 01 00 +T 8F 0A 00 00 00 77 21 02 00 39 7E D6 04 77 23 +R 00 00 01 00 +T 9A 0A 00 00 7E DE 00 77 18 80 +R 00 00 01 00 +T A0 0A 00 00 +R 00 00 01 00 +T A0 0A 00 00 C3 8B 0B 00 00 +R 00 00 01 00 00 05 01 00 +T A3 0A 00 00 +R 00 00 01 00 +T A3 0A 00 00 21 02 00 39 E5 DD 6E FE DD 66 FF +R 00 00 01 00 +T AE 0A 00 00 4E 06 00 E1 71 23 70 DD 34 FE 20 +R 00 00 01 00 +T B9 0A 00 00 03 DD 34 FF +R 00 00 01 00 +T BD 0A 00 00 +R 00 00 01 00 +T BD 0A 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 28 00 +T C5 0A 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 28 00 02 0A 06 00 +T CC 0A 00 00 21 06 00 39 D1 73 23 72 23 71 23 +R 00 00 01 00 +T D7 0A 00 00 70 2E 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T E2 0A 00 00 E5 21 00 00 E5 21 01 00 E5 DD 6E +R 00 00 01 00 +T ED 0A 00 00 02 DD 66 03 E5 21 10 00 39 4E 23 +R 00 00 01 00 +T F8 0A 00 00 46 23 5E 23 56 D5 C5 21 00 00 E5 +R 00 00 01 00 +T 03 0B 00 00 01 00 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2D 00 +T 0B 0B 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 2D 00 02 0A 06 00 +T 12 0B 00 00 21 12 00 39 F9 EB 2A 02 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 1B 0B 00 00 7D B4 20 26 +R 00 00 01 00 +T 1F 0B 00 00 +R 00 00 01 00 +T 1F 0B 00 00 21 04 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 2A 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 30 0B 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 06 00 2B 0A 1E 00 +T 36 0B 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 1E 00 2B 0B 34 00 +T 3C 0B 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 34 00 02 0A 06 00 +T 43 0B 00 00 F1 F1 +R 00 00 01 00 +T 45 0B 00 00 +R 00 00 01 00 +T 45 0B 00 00 21 42 01 39 E5 21 04 00 39 4E 23 +R 00 00 01 00 +T 50 0B 00 00 46 E1 7E 81 77 23 7E 88 77 18 30 +R 00 00 01 00 +T 5B 0B 00 00 +R 00 00 01 00 +T 5B 0B 00 00 21 02 00 39 E5 DD 6E FE DD 66 FF +R 00 00 01 00 +T 66 0B 00 00 4E 06 00 E1 71 23 70 DD 34 FE 20 +R 00 00 01 00 +T 71 0B 00 00 03 DD 34 FF +R 00 00 01 00 +T 75 0B 00 00 +R 00 00 01 00 +T 75 0B 00 00 21 42 01 39 E5 21 04 00 39 4E 23 +R 00 00 01 00 +T 80 0B 00 00 46 E1 7E 81 77 23 7E 88 77 18 00 +R 00 00 01 00 +T 8B 0B 00 00 +R 00 00 01 00 +T 8B 0B 00 00 C3 8A 06 00 00 +R 00 00 01 00 00 05 01 00 +T 8E 0B 00 00 +R 00 00 01 00 +T 8E 0B 00 00 0E 00 C5 21 00 00 E5 21 00 00 E5 +R 00 00 01 00 +T 99 0B 00 00 21 00 00 E5 21 01 00 E5 DD 6E 02 +R 00 00 01 00 +T A4 0B 00 00 DD 66 03 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T AF 0B 00 00 E5 21 0C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T BA 0B 00 00 5E 23 56 23 4E 23 46 CD +R 00 00 01 00 +T C2 0B 00 00 3A 0E 00 00 E5 21 04 00 DD 4E 02 +R 00 00 01 00 00 04 01 00 +T CB 0B 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T D6 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T DC 0B 00 00 00 00 00 00 EB 21 12 00 39 F9 EB +R 00 00 01 00 02 04 06 00 +T E5 0B 00 00 21 01 00 +R 00 00 01 00 +T E8 0B 00 00 +R 00 00 01 00 +T E8 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1C 00 +T EB 0B 00 00 +R 00 00 01 00 +T EB 0B 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 26 00 2B 0A 36 00 +T F1 0B 00 00 00 00 00 00 CD 00 00 00 00 E5 69 +R 00 00 01 00 02 04 36 00 02 09 06 00 +T F8 0B 00 00 60 C1 71 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 02 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 36 00 02 09 36 00 +T 07 0C 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 06 00 +T 10 0C 00 00 23 C1 71 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 1A 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 36 00 02 09 36 00 +T 1F 0C 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 06 00 +T 28 0C 00 00 23 23 C1 71 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 33 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 36 00 02 09 36 00 +T 38 0C 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 06 00 +T 41 0C 00 00 23 23 23 C1 71 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 4C 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 24 00 02 0A 24 00 +T 52 0C 00 00 00 00 00 00 E5 21 04 00 DD 5E 04 +R 00 00 01 00 02 04 06 00 +T 5B 0C 00 00 DD 56 05 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 66 0C 00 00 70 21 08 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T 71 0C 00 00 E5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 79 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 27 00 02 09 27 00 +T 7E 0C 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 06 00 +T 86 0C 00 00 0A 00 DD 4E 04 DD 46 05 09 E5 DD +R 00 00 01 00 +T 91 0C 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 27 00 +T 99 0C 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 27 00 02 09 06 00 +T A0 0C 00 00 73 23 72 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T AA 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T AF 0C 00 00 00 00 00 00 E5 21 0C 00 DD 5E 04 +R 00 00 01 00 02 04 06 00 +T B8 0C 00 00 DD 56 05 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T C3 0C 00 00 70 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T CB 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T D0 0C 00 00 00 00 00 00 E5 21 10 00 DD 5E 04 +R 00 00 01 00 02 04 06 00 +T D9 0C 00 00 DD 56 05 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T E4 0C 00 00 70 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T EC 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T F1 0C 00 00 00 00 00 00 E5 21 14 00 DD 5E 04 +R 00 00 01 00 02 04 06 00 +T FA 0C 00 00 DD 56 05 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 05 0D 00 00 70 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 0D 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T 12 0D 00 00 00 00 00 00 E5 21 18 00 DD 5E 04 +R 00 00 01 00 02 04 06 00 +T 1B 0D 00 00 DD 56 05 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 26 0D 00 00 70 21 10 00 E5 21 1C 00 DD 4E 04 +R 00 00 01 00 +T 31 0D 00 00 DD 46 05 09 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 3C 0D 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 23 00 02 0B 23 00 +T 42 0D 00 00 CD 00 00 00 00 F1 21 40 00 E5 21 +R 00 00 01 00 02 05 06 00 +T 4B 0D 00 00 2C 00 DD 4E 04 DD 46 05 09 4D 44 +R 00 00 01 00 +T 56 0D 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 23 00 +T 5E 0D 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 23 00 02 0A 06 00 +T 65 0D 00 00 21 80 00 E5 21 6C 00 DD 4E 04 DD +R 00 00 01 00 +T 70 0D 00 00 46 05 09 4D 44 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 7B 0D 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 23 00 02 0A 23 00 +T 81 0D 00 00 00 00 00 00 F1 21 40 00 E5 21 +R 00 00 01 00 02 04 06 00 +T 89 0D 00 00 EC 00 DD 4E 04 DD 46 05 09 4D 44 +R 00 00 01 00 +T 94 0D 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 23 00 +T 9C 0D 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 23 00 02 0A 06 00 +T A3 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1C 00 +T A6 0D 00 00 +R 00 00 01 00 +T A6 0D 00 00 CD 00 00 00 00 F6 FF 21 15 00 DD +R 00 00 01 00 02 05 2C 00 +T AF 0D 00 00 5E 02 DD 56 03 19 7E FE 11 28 05 +R 00 00 01 00 +T BA 0D 00 00 +R 00 00 01 00 +T BA 0D 00 00 21 00 00 18 78 +R 00 00 01 00 +T BF 0D 00 00 +R 00 00 01 00 +T BF 0D 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T C7 0D 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 10 00 02 0A 06 00 +T CE 0D 00 00 34 01 A7 ED 42 28 05 +R 00 00 01 00 +T D5 0D 00 00 +R 00 00 01 00 +T D5 0D 00 00 21 00 00 18 5D +R 00 00 01 00 +T DA 0D 00 00 +R 00 00 01 00 +T DA 0D 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T E2 0D 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 10 00 02 0A 06 00 +T E9 0D 00 00 21 00 00 E5 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T F4 0D 00 00 0C 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1A 00 +T FC 0D 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1A 00 02 09 06 00 +T 03 0E 00 00 21 0E 00 39 4D 44 21 00 00 39 5D +R 00 00 01 00 +T 0E 0E 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 14 0E 00 00 CD 00 00 00 00 21 0E 00 39 5D 54 +R 00 00 01 00 02 05 06 00 +T 1D 0E 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 32 00 02 0A 32 00 +T 23 0E 00 00 00 00 00 00 3E 44 DD AE F8 DD B6 +R 00 00 01 00 02 04 06 00 +T 2C 0E 00 00 F9 20 05 21 01 00 18 03 +R 00 00 01 00 +T 34 0E 00 00 +R 00 00 01 00 +T 34 0E 00 00 21 00 00 +R 00 00 01 00 +T 37 0E 00 00 +R 00 00 01 00 +T 37 0E 00 00 +R 00 00 01 00 +T 37 0E 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 14 00 +T 3A 0E 00 00 +R 00 00 01 00 +T 3A 0E 00 00 CD 00 00 00 00 FC FF AF DD 77 FC +R 00 00 01 00 02 05 2C 00 +T 43 0E 00 00 DD 77 FD DD 36 FE 1F DD 36 FF 00 +R 00 00 01 00 +T 4E 0E 00 00 +R 00 00 01 00 +T 4E 0E 00 00 DD CB FF 7E 20 3C +R 00 00 01 00 +T 54 0E 00 00 +R 00 00 01 00 +T 54 0E 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 5F 0E 00 00 66 03 E5 DD 7E FE 01 00 00 21 +R 00 00 01 00 +T 69 0E 00 00 01 00 CD 00 00 00 00 CD +R 00 00 01 00 02 07 21 00 +T 6F 0E 00 00 00 00 00 00 7D B4 B1 B0 20 02 +R 00 00 01 00 02 04 0C 00 +T 77 0E 00 00 +R 00 00 01 00 +T 77 0E 00 00 18 17 +R 00 00 01 00 +T 79 0E 00 00 +R 00 00 01 00 +T 79 0E 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 81 0E 00 00 +R 00 00 01 00 +T 81 0E 00 00 DD 6E FE DD 66 FF 2B DD 75 FE DD +R 00 00 01 00 +T 8C 0E 00 00 74 FF 18 BE +R 00 00 01 00 +T 90 0E 00 00 +R 00 00 01 00 +T 90 0E 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 1C 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 73 69 6C 65 6E 74 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 6E 6F 69 73 79 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/clients_lib/compsub.rel b/src/nos/lib/clients_lib/compsub.rel new file mode 100644 index 00000000..a31b5d1b --- /dev/null +++ b/src/nos/lib/clients_lib/compsub.rel @@ -0,0 +1,338 @@ +XL4 +H 3 areas 19 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___02b7_a317_Loc_20 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___010f_1e56__2502x Ref00000000 +S _strchr Ref00000000 +S __fprintf Ref00000000 +S .__.ABS. Def00000000 +S _readhex Ref00000000 +S ___039f_a616_TYPE_20L_20_25d_0a Ref00000000 +S ___039e_3bb9_TYPE_20I_0a Ref00000000 +S _md5hash Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___0077_c302__20_25s_0a Ref00000000 +S ___03e6_a62b_XMD5_20_25s_0a Ref00000000 +S _freopen Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0211_5fb2_Can_27t_20read_20lo Ref00000000 +S ___0270_3a50_Error_20in_20respon Ref00000000 +S _getresp Ref00000000 +S ___039d_f579_TYPE_20A_0a Ref00000000 +S _fclose Ref00000000 +S _memcmp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 327 flags 0 +S _compsub Def00000000 +A CSTR size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D2 FF AF DD 77 DE +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 DD 77 DF DD 6E 02 DD 66 03 56 23 +R 00 00 01 00 +T 14 00 00 00 66 6A DD 75 D6 DD 74 D7 21 0D 00 +R 00 00 01 00 +T 1F 00 00 00 DD 5E 02 DD 56 03 19 7E FE 01 38 +R 00 00 01 00 +T 2A 00 00 00 0E FE 03 30 0A +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 36 D2 00 00 00 00 DD 36 D3 +R 00 00 01 00 09 07 02 00 +T 36 00 00 00 00 00 00 00 18 0E +R 00 00 01 00 89 04 02 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 FE 00 20 0A DD 36 D2 00 00 00 00 +R 00 00 01 00 09 0B 02 00 +T 41 00 00 00 DD 36 D3 00 00 00 00 18 00 +R 00 00 01 00 89 07 02 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 21 00 00 E5 DD 4E D2 DD 46 D3 DD +R 00 00 01 00 +T 52 00 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T 5A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 61 00 00 00 75 D8 DD 74 D9 7D B4 20 1F +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T 72 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 12 00 02 0A 12 00 +T 78 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T 7E 00 00 00 00 00 00 00 F1 F1 F1 21 01 00 C3 +R 00 00 01 00 02 04 00 00 +T 87 00 00 00 24 03 00 00 +R 00 00 01 00 00 04 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 21 0D 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 94 00 00 00 21 0E 00 09 7E E1 BE CA +R 00 00 01 00 +T 9C 00 00 00 65 01 00 00 +R 00 00 01 00 00 04 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 21 0D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T A9 00 00 00 FE 00 20 1B +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 15 00 02 0B 15 00 +T B3 00 00 00 E5 DD 6E D6 DD 66 D7 E5 3E +R 00 00 01 00 +T BC 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T C1 00 00 00 00 00 00 00 F1 F1 F1 18 4D +R 00 00 01 00 02 04 00 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 FE 01 20 1B 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 09 00 +T D0 00 00 00 00 00 00 00 E5 DD 6E D6 DD 66 D7 +R 00 00 01 00 02 04 09 00 +T D9 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T DF 00 00 00 CD 00 00 00 00 F1 F1 F1 18 2E +R 00 00 01 00 02 05 00 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 FE 02 20 2A 21 0F 00 DD 4E 02 DD +R 00 00 01 00 +T F2 00 00 00 46 03 09 4E 23 46 C5 0E +R 00 00 01 00 +T FA 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 08 00 02 0A 08 00 +T 00 01 00 00 DD 6E D6 DD 66 D7 E5 3E +R 00 00 01 00 +T 08 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 0D 01 00 00 00 00 00 00 F1 F1 F1 F1 18 00 +R 00 00 01 00 02 04 00 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 21 0D 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 20 01 00 00 21 0E 00 09 72 21 07 00 09 7E 23 +R 00 00 01 00 +T 2B 01 00 00 B6 20 2F +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 01 C8 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 38 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T 3D 01 00 00 00 00 00 00 DD 75 DA DD 74 DB 7D +R 00 00 01 00 02 04 00 00 +T 46 01 00 00 A4 3C 28 0E DD 4E DA DD 46 DB 21 +R 00 00 01 00 +T 51 01 00 00 2B 01 CD 00 00 00 00 30 03 +R 00 00 01 00 02 07 0F 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 C3 21 03 00 00 +R 00 00 01 00 00 05 01 00 +T 5B 01 00 00 +R 00 00 01 00 +T 5B 01 00 00 18 08 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 DD 36 DE 01 DD 36 DF 00 +R 00 00 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 DD 6E 0A DD 66 0B E5 0E +R 00 00 01 00 +T 6D 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0D 00 02 0A 0D 00 +T 73 01 00 00 DD 6E D6 DD 66 D7 E5 3E +R 00 00 01 00 +T 7B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 80 01 00 00 00 00 00 00 F1 F1 F1 F1 21 0D 00 +R 00 00 01 00 02 04 00 00 +T 89 01 00 00 DD 4E 02 DD 46 03 09 7E B7 20 04 +R 00 00 01 00 +T 94 01 00 00 0E 01 18 02 +R 00 00 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 0E 00 +R 00 00 01 00 +T 9A 01 00 00 +R 00 00 01 00 +T 9A 01 00 00 06 00 C5 21 20 00 39 4D 44 DD 5E +R 00 00 01 00 +T A5 01 00 00 D8 DD 56 D9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T AC 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T B3 01 00 00 5E D8 DD 56 D9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 16 00 +T BB 01 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 16 00 02 09 00 00 +T C2 01 00 00 DE DD B6 DF 28 24 01 C8 00 DD 5E +R 00 00 01 00 +T CD 01 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 14 00 +T D4 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 14 00 02 09 00 00 +T DB 01 00 00 DA DD 74 DB 4D 44 21 2B 01 CD +R 00 00 01 00 +T E5 01 00 00 00 00 00 00 30 03 +R 00 00 01 00 02 04 0F 00 +T E9 01 00 00 +R 00 00 01 00 +T E9 01 00 00 +R 00 00 01 00 +T E9 01 00 00 +R 00 00 01 00 +T E9 01 00 00 C3 21 03 00 00 +R 00 00 01 00 00 05 01 00 +T EC 01 00 00 +R 00 00 01 00 +T EC 01 00 00 01 C8 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T F6 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T FB 01 00 00 00 00 00 00 DD 75 DA DD 74 DB 4D +R 00 00 01 00 02 04 00 00 +T 04 02 00 00 44 21 2B 01 CD 00 00 00 00 30 1F +R 00 00 01 00 02 09 0F 00 +T 0D 02 00 00 +R 00 00 01 00 +T 0D 02 00 00 21 F4 01 DD 4E DA DD 46 DB A7 ED +R 00 00 01 00 +T 18 02 00 00 42 20 0E +R 00 00 01 00 +T 1B 02 00 00 +R 00 00 01 00 +T 1B 02 00 00 21 0B 00 DD 4E 02 DD 46 03 09 AF +R 00 00 01 00 +T 26 02 00 00 77 23 77 +R 00 00 01 00 +T 29 02 00 00 +R 00 00 01 00 +T 29 02 00 00 C3 21 03 00 00 +R 00 00 01 00 00 05 01 00 +T 2C 02 00 00 +R 00 00 01 00 +T 2C 02 00 00 01 20 00 21 13 01 DD 5E 02 DD 56 +R 00 00 01 00 +T 37 02 00 00 03 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 3D 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 44 02 00 00 D4 DD 74 D5 7D B4 20 14 +R 00 00 01 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 13 00 02 0B 13 00 +T 52 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 58 02 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 00 00 +T 5E 02 00 00 21 03 00 00 +R 00 00 01 00 00 04 01 00 +T 60 02 00 00 +R 00 00 01 00 +T 60 02 00 00 21 10 00 E5 DD 4E D4 DD 46 D5 21 +R 00 00 01 00 +T 6B 02 00 00 10 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 73 02 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 7A 02 00 00 05 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 85 02 00 00 46 21 01 00 A7 ED 42 30 6C +R 00 00 01 00 +T 8E 02 00 00 +R 00 00 01 00 +T 8E 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 94 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 9A 02 00 00 CD 00 00 00 00 F1 F1 AF DD 77 DC +R 00 00 01 00 02 05 00 00 +T A3 02 00 00 DD 77 DD +R 00 00 01 00 +T A6 02 00 00 +R 00 00 01 00 +T A6 02 00 00 01 10 80 DD 6E DC DD 66 DD 3E 80 +R 00 00 01 00 +T B1 02 00 00 AC 67 ED 42 30 2A +R 00 00 01 00 +T B7 02 00 00 +R 00 00 01 00 +T B7 02 00 00 21 1E 00 39 DD 4E DC DD 46 DD 09 +R 00 00 01 00 +T C2 02 00 00 5E 16 00 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 09 03 00 +T CA 02 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 2B 0A 10 00 +T D0 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T D7 02 00 00 F1 03 DD 71 DC DD 70 DD 18 C5 +R 00 00 01 00 +T E1 02 00 00 +R 00 00 01 00 +T E1 02 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T E9 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0C 00 02 0A 0C 00 +T EF 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T F5 02 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T FA 02 00 00 +R 00 00 01 00 +T FA 02 00 00 21 10 00 E5 21 10 00 39 4D 44 21 +R 00 00 01 00 +T 05 03 00 00 20 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 17 00 +T 0D 03 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 17 00 02 09 00 00 +T 14 03 00 00 B4 20 05 +R 00 00 01 00 +T 17 03 00 00 +R 00 00 01 00 +T 17 03 00 00 21 00 00 18 08 +R 00 00 01 00 +T 1C 03 00 00 +R 00 00 01 00 +T 1C 03 00 00 21 01 00 18 03 +R 00 00 01 00 +T 21 03 00 00 +R 00 00 01 00 +T 21 03 00 00 21 01 00 +R 00 00 01 00 +T 24 03 00 00 +R 00 00 01 00 +T 24 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/doascii.rel b/src/nos/lib/clients_lib/doascii.rel new file mode 100644 index 00000000..096bff29 --- /dev/null +++ b/src/nos/lib/clients_lib/doascii.rel @@ -0,0 +1,30 @@ +XL4 +H 3 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _dotype Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29 flags 0 +S _doascii Def00000000 +A CSTR size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 36 FE +R 00 00 01 00 02 05 04 00 +T 08 00 00 00 00 00 00 00 DD 36 FF 00 00 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T 0D 00 00 00 DD 6E 0A DD 66 0B E5 21 02 00 39 +R 00 00 01 00 +T 18 00 00 00 4D 44 11 02 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 20 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 27 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 41 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/dobatch.rel b/src/nos/lib/clients_lib/dobatch.rel new file mode 100644 index 00000000..a2dcfee7 --- /dev/null +++ b/src/nos/lib/clients_lib/dobatch.rel @@ -0,0 +1,42 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___021d_e508_Command_20batching Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setbool Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 49 flags 0 +S _dobatch Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 05 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 FF FF 18 2C +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 25 00 00 00 66 03 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 04 00 +T 2C 00 00 00 00 00 00 00 E5 21 07 00 DD 4E FE +R 00 00 01 00 02 04 04 00 +T 35 00 00 00 DD 46 FF 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 3D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 44 00 00 00 F1 F1 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/clients_lib/dobinary.rel b/src/nos/lib/clients_lib/dobinary.rel new file mode 100644 index 00000000..9a8e2c43 --- /dev/null +++ b/src/nos/lib/clients_lib/dobinary.rel @@ -0,0 +1,30 @@ +XL4 +H 3 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _dotype Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29 flags 0 +S _dobinary Def00000000 +A CSTR size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 36 FE +R 00 00 01 00 02 05 04 00 +T 08 00 00 00 00 00 00 00 DD 36 FF 00 00 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T 0D 00 00 00 DD 6E 0A DD 66 0B E5 21 02 00 39 +R 00 00 01 00 +T 18 00 00 00 4D 44 11 02 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 20 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 27 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 49 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/docompare.rel b/src/nos/lib/clients_lib/docompare.rel new file mode 100644 index 00000000..1f1a09c4 --- /dev/null +++ b/src/nos/lib/clients_lib/docompare.rel @@ -0,0 +1,90 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0237_26a3_Different_0a Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___037d_93fc_Same_0a Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Notsess Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _compsub Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BA flags 0 +S _docompare Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 0A DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 19 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 06 00 +T 1B 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 2B 0A 08 00 +T 21 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 28 00 00 00 21 01 00 C3 B7 00 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 6E 04 DD 66 05 23 23 46 23 66 +R 00 00 01 00 +T 39 00 00 00 68 DD 75 FA DD 74 FB DD 4E 02 DD +R 00 00 01 00 +T 44 00 00 00 46 03 21 02 00 CD 00 00 00 00 30 +R 00 00 01 00 02 0A 07 00 +T 4D 00 00 00 16 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T 59 00 00 00 23 66 68 DD 75 FC DD 74 FD 18 0C +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 6E FA DD 66 FB DD 75 FC DD 74 +R 00 00 01 00 +T 6F 00 00 00 FD +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 DD 6E FA DD 66 FB E5 DD 4E FC DD +R 00 00 01 00 +T 7B 00 00 00 46 FD DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 84 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 89 00 00 00 00 00 00 00 F1 7D B4 20 13 +R 00 00 01 00 02 04 00 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 04 00 02 0B 04 00 +T 96 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 9C 00 00 00 CD 00 00 00 00 F1 F1 18 11 +R 00 00 01 00 02 05 00 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T A9 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T AF 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 21 00 00 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/clients_lib/doftp.rel b/src/nos/lib/clients_lib/doftp.rel new file mode 100644 index 00000000..7646dc46 --- /dev/null +++ b/src/nos/lib/clients_lib/doftp.rel @@ -0,0 +1,716 @@ +XL4 +H 3 areas 35 global symbols +S _resolve Ref00000000 +S ___03b3_2057_Too_20many_20sessio Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _System Ref00000000 +S _Badhost Ref00000000 +S ___0323_8063_PASS_20_25s Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _socket Ref00000000 +S ___037c_0319_SYST_0a Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S _memset Ref00000000 +S _newsession Ref00000000 +S _cmdparse Ref00000000 +S _sockstate Ref00000000 +S _Ftpcmds Ref00000000 +S _setjmp Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S ___0221_6930_Connected_0a Ref00000000 +S _strlen Ref00000000 +S __fprintf Ref00000000 +S _strdupw Ref00000000 +S _perror Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ___03b6_2030_Trying_20_25s_2e_2e Ref00000000 +S ___0491_f999_ftp_3e_20syst_0a Ref00000000 +S ___021c_f95c_Closed_3a_20_25s_0a Ref00000000 +S _settos Ref00000000 +S _free Ref00000000 +S ___0367_ae52_Resolving_20_25s_2e Ref00000000 +S _freesession Ref00000000 +S _keychar Ref00000000 +S _getline Ref00000000 +S _connect Ref00000000 +S ___0202_ef8c_Can_27t_20create_20 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S ___03c1_a945_USER_20_25s Ref00000000 +S _strnicmp Ref00000000 +S _fputs Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _sockerr Ref00000000 +S _psocket Ref00000000 +S _getresp Ref00000000 +S ___0233_bd70_Defaulting_20to_20b Ref00000000 +S _fdopen Ref00000000 +S _fclose Ref00000000 +S _Cmdline Ref00000000 +S _keywait Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 737 flags 0 +S _doftp Def00000000 +A CSTR size 3A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 CC FD 21 00 00 39 +R 00 00 01 00 02 05 25 00 +T 09 00 00 00 E5 11 01 00 D5 01 01 00 ED 5B +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 32 00 2B 09 0B 00 +T 18 00 00 00 00 00 00 00 CD 00 00 00 00 F1 4D +R 00 00 01 00 02 04 0B 00 02 09 02 00 +T 1F 00 00 00 44 E1 71 23 70 79 B0 20 17 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 2E 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2A 00 02 0B 2A 00 +T 34 00 00 00 CD 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 05 02 00 +T 3D 00 00 00 34 07 00 00 +R 00 00 01 00 00 04 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 21 20 00 E5 21 02 00 39 4E 23 46 +R 00 00 01 00 +T 4A 00 00 00 E1 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 07 21 00 +T 50 00 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 21 00 2B 0A 21 00 +T 55 00 00 00 15 02 E5 01 00 00 21 04 00 39 5D +R 00 00 01 00 +T 60 00 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 66 00 00 00 CD 00 00 00 00 F1 21 02 00 39 E5 +R 00 00 01 00 02 05 02 00 +T 6F 00 00 00 21 06 00 39 AF 77 23 77 E1 AF 77 +R 00 00 01 00 +T 7A 00 00 00 23 77 21 07 00 39 36 02 23 36 00 +R 00 00 01 00 +T 85 00 00 00 21 05 00 E5 21 02 00 39 4E 23 46 +R 00 00 01 00 +T 90 00 00 00 E1 09 E5 21 04 00 39 4D 44 E1 71 +R 00 00 01 00 +T 9B 00 00 00 23 70 21 00 00 39 46 23 66 68 DD +R 00 00 01 00 +T A6 00 00 00 75 E1 DD 74 E2 AF DD 77 E3 DD 77 +R 00 00 01 00 +T B1 00 00 00 E4 01 03 80 DD 6E 02 DD 66 03 3E +R 00 00 01 00 +T BC 00 00 00 80 AC 67 ED 42 30 0A +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 DD 36 E5 15 DD 36 E6 00 18 1B +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T D8 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 26 00 +T DD 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 26 00 02 09 02 00 +T E4 00 00 00 E5 DD 74 E6 +R 00 00 01 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 21 04 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 18 00 +T F1 00 00 00 F6 08 77 23 7E F6 00 77 21 22 00 +R 00 00 01 00 +T FC 00 00 00 ED 4B 00 00 00 00 09 36 6B 23 36 +R 00 00 01 00 02 06 18 00 +T 05 01 00 00 00 21 14 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 18 00 +T 0E 01 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0F 00 02 0B 0F 00 +T 14 01 00 00 CD 00 00 00 00 7D B4 28 23 +R 00 00 01 00 02 05 02 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 01 01 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 33 00 +T 23 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 33 00 02 0A 02 00 +T 2A 01 00 00 00 00 39 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 20 00 +T 32 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 20 00 02 0A 02 00 +T 39 01 00 00 01 00 C3 34 07 00 00 +R 00 00 01 00 00 07 01 00 +T 3E 01 00 00 +R 00 00 01 00 +T 3E 01 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 49 01 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 1F 00 +T 4E 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 1F 00 2B 0A 2A 00 +T 54 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2A 00 02 09 02 00 +T 5B 01 00 00 F1 DD 6E 04 DD 66 05 23 23 5E 23 +R 00 00 01 00 +T 66 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 6C 01 00 00 CD 00 00 00 00 DD 75 E7 DD 74 E8 +R 00 00 01 00 02 05 02 00 +T 75 01 00 00 DD 71 E9 DD 70 EA 7D B4 B1 B0 20 +R 00 00 01 00 +T 80 01 00 00 3D +R 00 00 01 00 +T 81 01 00 00 +R 00 00 01 00 +T 81 01 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 8C 01 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 04 00 +T 92 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 97 01 00 00 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 04 02 00 +T 9F 01 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 33 00 +T A4 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 33 00 02 09 02 00 +T AA 01 00 00 00 00 39 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 20 00 +T B2 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 20 00 02 0A 02 00 +T B9 01 00 00 01 00 C3 34 07 00 00 +R 00 00 01 00 00 07 01 00 +T BE 01 00 00 +R 00 00 01 00 +T BE 01 00 00 21 00 00 E5 01 00 00 11 00 00 3E +R 00 00 01 00 +T C9 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T CE 01 00 00 00 00 00 00 F1 DD 75 FD DD 74 FE +R 00 00 01 00 02 04 02 00 +T D7 01 00 00 7D A4 3C 20 34 +R 00 00 01 00 +T DC 01 00 00 +R 00 00 01 00 +T DC 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 24 00 02 0B 24 00 +T E2 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2A 00 02 0B 2A 00 +T E8 01 00 00 CD 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 05 02 00 +T F1 01 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 33 00 +T F6 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 33 00 02 09 02 00 +T FC 01 00 00 00 00 39 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 20 00 +T 04 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 20 00 02 0A 02 00 +T 0B 02 00 00 01 00 C3 34 07 00 00 +R 00 00 01 00 00 07 01 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 21 04 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 18 00 +T 19 02 00 00 F6 08 77 23 7E F6 00 77 21 22 00 +R 00 00 01 00 +T 24 02 00 00 ED 4B 00 00 00 00 09 36 6B 23 36 +R 00 00 01 00 02 06 18 00 +T 2D 02 00 00 00 21 14 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 18 00 +T 36 02 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0F 00 02 0B 0F 00 +T 3C 02 00 00 CD 00 00 00 00 7D B4 28 03 +R 00 00 01 00 02 05 02 00 +T 43 02 00 00 +R 00 00 01 00 +T 43 02 00 00 C3 43 06 00 00 +R 00 00 01 00 00 05 01 00 +T 46 02 00 00 +R 00 00 01 00 +T 46 02 00 00 21 0D 00 E5 21 02 00 39 4E 23 46 +R 00 00 01 00 +T 51 02 00 00 E1 09 E5 21 04 00 39 E5 01 +R 00 00 01 00 +T 5A 02 00 00 00 00 00 00 DD 5E FD DD 56 FE 3E +R 00 00 01 00 00 04 02 00 +T 63 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 30 00 02 09 30 00 +T 68 02 00 00 00 00 00 00 4D 44 E1 71 23 70 DD +R 00 00 01 00 02 04 02 00 +T 71 02 00 00 71 FB DD 70 FC E1 71 23 70 01 +R 00 00 01 00 +T 7B 02 00 00 10 00 DD 5E FD DD 56 FE 3E +R 00 00 01 00 +T 84 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T 89 02 00 00 00 00 00 00 21 17 02 39 5D 54 3E +R 00 00 01 00 02 04 02 00 +T 92 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2D 00 02 09 2D 00 +T 97 02 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 02 00 2B 0A 1A 00 +T 9D 02 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 1A 00 2B 0B 2A 00 +T A3 02 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 2A 00 02 0A 02 00 +T AA 02 00 00 F1 F1 21 10 00 E5 21 19 02 39 4D +R 00 00 01 00 +T B5 02 00 00 44 DD 5E FD DD 56 FE 3E +R 00 00 01 00 +T BD 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 23 00 02 09 23 00 +T C2 02 00 00 00 00 00 00 F1 7D A4 3C 20 0E +R 00 00 01 00 02 04 02 00 +T CA 02 00 00 +R 00 00 01 00 +T CA 02 00 00 11 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 17 00 +T D0 02 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 17 00 02 09 02 00 +T D6 02 00 00 43 06 00 00 +R 00 00 01 00 00 04 01 00 +T D8 02 00 00 +R 00 00 01 00 +T D8 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 13 00 02 0B 13 00 +T DE 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2A 00 02 0B 2A 00 +T E4 02 00 00 CD 00 00 00 00 F1 F1 01 C8 00 21 +R 00 00 01 00 02 05 02 00 +T ED 02 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 2E 00 +T F5 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 2E 00 02 09 02 00 +T FC 02 00 00 F3 DD 74 F4 01 90 81 3E 80 AC 67 +R 00 00 01 00 +T 07 03 00 00 ED 42 38 03 +R 00 00 01 00 +T 0B 03 00 00 +R 00 00 01 00 +T 0B 03 00 00 C3 43 06 00 00 +R 00 00 01 00 00 05 01 00 +T 0E 03 00 00 +R 00 00 01 00 +T 0E 03 00 00 21 04 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 18 00 +T 17 03 00 00 F6 08 77 23 7E F6 00 77 21 22 00 +R 00 00 01 00 +T 22 03 00 00 ED 4B 00 00 00 00 09 36 6B 23 36 +R 00 00 01 00 02 06 18 00 +T 2B 03 00 00 00 21 14 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 18 00 +T 34 03 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0F 00 02 0B 0F 00 +T 3A 03 00 00 CD 00 00 00 00 7D B4 28 08 +R 00 00 01 00 02 05 02 00 +T 41 03 00 00 +R 00 00 01 00 +T 41 03 00 00 DD 36 F3 C8 DD 36 F4 00 +R 00 00 01 00 +T 49 03 00 00 +R 00 00 01 00 +T 49 03 00 00 +R 00 00 01 00 +T 49 03 00 00 DD 7E F3 DD A6 F4 3C CA +R 00 00 01 00 +T 51 03 00 00 43 06 00 00 +R 00 00 01 00 00 04 01 00 +T 53 03 00 00 +R 00 00 01 00 +T 53 03 00 00 DD 5E F3 DD 56 F4 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 5C 03 00 00 04 00 D7 00 DC 00 E6 00 4B 01 +R 00 00 01 00 +T 66 03 00 00 36 05 00 00 E1 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6A 03 00 00 8F 04 00 00 70 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6E 03 00 00 D3 04 00 00 +R 00 00 01 00 00 04 01 00 +T 70 03 00 00 +R 00 00 01 00 +T 70 03 00 00 21 00 01 E5 21 04 00 39 01 13 00 +R 00 00 01 00 +T 7B 03 00 00 09 E5 01 13 00 00 00 21 04 00 39 +R 00 00 01 00 00 07 02 00 +T 84 03 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 22 00 +T 8A 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 22 00 02 09 02 00 +T 91 03 00 00 21 15 00 39 7E FE 0A 28 3C +R 00 00 01 00 +T 9A 03 00 00 +R 00 00 01 00 +T 9A 03 00 00 21 02 00 39 01 13 00 09 E5 0E +R 00 00 01 00 +T A4 03 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 27 00 02 0A 27 00 +T AA 03 00 00 DD 6E FB DD 66 FC E5 3E +R 00 00 01 00 +T B2 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T B7 03 00 00 00 00 00 00 F1 F1 F1 F1 01 C8 00 +R 00 00 01 00 02 04 02 00 +T C0 03 00 00 21 02 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2E 00 +T C8 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 2E 00 02 0A 02 00 +T CF 03 00 00 75 F3 DD 74 F4 18 08 +R 00 00 01 00 +T D6 03 00 00 +R 00 00 01 00 +T D6 03 00 00 DD 36 F3 C8 DD 36 F4 00 +R 00 00 01 00 +T DE 03 00 00 +R 00 00 01 00 +T DE 03 00 00 C3 40 06 00 00 +R 00 00 01 00 00 05 01 00 +T E1 03 00 00 +R 00 00 01 00 +T E1 03 00 00 21 17 00 E5 21 02 00 39 4E 23 46 +R 00 00 01 00 +T EC 03 00 00 E1 09 7E E6 FE 77 23 7E E6 FF 77 +R 00 00 01 00 +T F7 03 00 00 21 00 01 E5 21 04 00 39 01 13 00 +R 00 00 01 00 +T 02 04 00 00 09 E5 01 25 00 00 00 21 04 00 39 +R 00 00 01 00 00 07 02 00 +T 0B 04 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 22 00 +T 11 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 22 00 02 09 02 00 +T 18 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 09 00 02 0B 09 00 +T 1E 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2A 00 02 0B 2A 00 +T 24 04 00 00 CD 00 00 00 00 F1 F1 21 17 00 E5 +R 00 00 01 00 02 05 02 00 +T 2D 04 00 00 21 02 00 39 4E 23 46 E1 09 7E F6 +R 00 00 01 00 +T 38 04 00 00 01 77 23 7E F6 00 77 21 15 00 39 +R 00 00 01 00 +T 43 04 00 00 7E FE 0A 28 3C +R 00 00 01 00 +T 48 04 00 00 +R 00 00 01 00 +T 48 04 00 00 21 02 00 39 01 13 00 09 E5 0E +R 00 00 01 00 +T 52 04 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T 58 04 00 00 DD 6E FB DD 66 FC E5 3E +R 00 00 01 00 +T 60 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 65 04 00 00 00 00 00 00 F1 F1 F1 F1 01 C8 00 +R 00 00 01 00 02 04 02 00 +T 6E 04 00 00 21 02 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2E 00 +T 76 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 2E 00 02 0A 02 00 +T 7D 04 00 00 75 F3 DD 74 F4 18 08 +R 00 00 01 00 +T 84 04 00 00 +R 00 00 01 00 +T 84 04 00 00 DD 36 F3 C8 DD 36 F4 00 +R 00 00 01 00 +T 8C 04 00 00 +R 00 00 01 00 +T 8C 04 00 00 C3 40 06 00 00 +R 00 00 01 00 00 05 01 00 +T 8F 04 00 00 +R 00 00 01 00 +T 8F 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1B 00 02 0B 1B 00 +T 95 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2A 00 02 0B 2A 00 +T 9B 04 00 00 CD 00 00 00 00 F1 F1 0E +R 00 00 01 00 02 05 02 00 +T A1 04 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 08 00 02 0A 08 00 +T A7 04 00 00 DD 6E FB DD 66 FC E5 3E +R 00 00 01 00 +T AF 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T B4 04 00 00 00 00 00 00 F1 F1 F1 01 C8 00 21 +R 00 00 01 00 02 04 02 00 +T BD 04 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 2E 00 +T C5 04 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 2E 00 02 09 02 00 +T CC 04 00 00 F3 DD 74 F4 C3 40 06 00 00 +R 00 00 01 00 00 09 01 00 +T D3 04 00 00 +R 00 00 01 00 +T D3 04 00 00 01 20 00 21 02 00 39 11 13 01 19 +R 00 00 01 00 +T DE 04 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T E4 04 00 00 CD 00 00 00 00 DD 75 F9 DD 74 FA +R 00 00 01 00 02 05 02 00 +T ED 04 00 00 7D B4 28 3A 11 00 00 00 00 3E +R 00 00 01 00 02 09 03 00 +T F5 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T FA 04 00 00 00 00 00 00 E5 01 00 00 00 00 DD +R 00 00 01 00 02 04 02 00 02 0A 03 00 +T 01 05 00 00 5E F9 DD 56 FA 13 3E 00 00 00 00 +R 00 00 01 00 2B 0B 28 00 +T 09 05 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 28 00 02 0A 02 00 +T 10 05 00 00 7D B4 20 17 +R 00 00 01 00 +T 14 05 00 00 +R 00 00 01 00 +T 14 05 00 00 +R 00 00 01 00 +T 14 05 00 00 +R 00 00 01 00 +T 14 05 00 00 21 0F 00 39 36 01 0E 00 00 00 00 +R 00 00 01 00 2B 0B 2F 00 +T 1C 05 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 2F 00 +T 22 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2A 00 02 09 2A 00 +T 27 05 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 DD 36 F3 C8 DD 36 F4 00 C3 +R 00 00 01 00 +T 34 05 00 00 40 06 00 00 +R 00 00 01 00 00 04 01 00 +T 36 05 00 00 +R 00 00 01 00 +T 36 05 00 00 DD 7E FB DD B6 FC 28 0F 21 08 00 +R 00 00 01 00 +T 41 05 00 00 DD 4E FB DD 46 FC 09 5E 23 56 18 +R 00 00 01 00 +T 4C 05 00 00 03 +R 00 00 01 00 +T 4D 05 00 00 +R 00 00 01 00 +T 4D 05 00 00 11 FF FF +R 00 00 01 00 +T 50 05 00 00 +R 00 00 01 00 +T 50 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T 56 05 00 00 00 00 00 00 7D B4 20 0B +R 00 00 01 00 02 04 02 00 +T 5C 05 00 00 +R 00 00 01 00 +T 5C 05 00 00 DD 36 F3 FF DD 36 F4 FF C3 +R 00 00 01 00 +T 65 05 00 00 40 06 00 00 +R 00 00 01 00 00 04 01 00 +T 67 05 00 00 +R 00 00 01 00 +T 67 05 00 00 21 00 01 E5 21 04 00 39 01 13 00 +R 00 00 01 00 +T 72 05 00 00 09 E5 01 30 00 00 00 21 04 00 39 +R 00 00 01 00 00 07 02 00 +T 7B 05 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 22 00 +T 81 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 22 00 02 09 02 00 +T 88 05 00 00 21 02 00 39 01 13 00 09 EB 3E +R 00 00 01 00 +T 92 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T 97 05 00 00 00 00 00 00 DD 75 F7 DD 74 F8 21 +R 00 00 01 00 02 04 02 00 +T A0 05 00 00 02 00 39 E5 21 04 00 39 01 13 00 +R 00 00 01 00 +T AB 05 00 00 09 4D 44 11 00 00 00 00 3E +R 00 00 01 00 02 08 0E 00 +T B2 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T B7 05 00 00 00 00 00 00 F1 DD 75 F3 DD 74 F4 +R 00 00 01 00 02 04 02 00 +T C0 05 00 00 7D A4 3C 28 17 +R 00 00 01 00 +T C5 05 00 00 +R 00 00 01 00 +T C5 05 00 00 DD 5E F7 DD 56 F8 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1E 00 +T CD 05 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 1E 00 02 0A 02 00 +T D4 05 00 00 DD 77 F7 DD 77 F8 18 64 +R 00 00 01 00 +T DC 05 00 00 +R 00 00 01 00 +T DC 05 00 00 DD 4E FB DD 46 FC DD 5E F7 DD 56 +R 00 00 01 00 +T E7 05 00 00 F8 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 29 00 02 0B 29 00 +T ED 05 00 00 CD 00 00 00 00 DD 5E F7 DD 56 F8 +R 00 00 01 00 02 05 02 00 +T F6 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1E 00 02 0A 1E 00 +T FC 05 00 00 00 00 00 00 AF DD 77 F7 DD 77 F8 +R 00 00 01 00 02 04 02 00 +T 05 06 00 00 21 07 00 39 46 23 66 68 DD 75 F5 +R 00 00 01 00 +T 10 06 00 00 DD 74 F6 21 07 00 39 36 02 23 36 +R 00 00 01 00 +T 1B 06 00 00 00 01 C8 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 26 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2E 00 02 09 2E 00 +T 2B 06 00 00 00 00 00 00 DD 75 F3 DD 74 F4 21 +R 00 00 01 00 02 04 02 00 +T 34 06 00 00 07 00 39 DD 4E F5 DD 46 F6 71 23 +R 00 00 01 00 +T 3F 06 00 00 70 +R 00 00 01 00 +T 40 06 00 00 +R 00 00 01 00 +T 40 06 00 00 +R 00 00 01 00 +T 40 06 00 00 C3 49 03 00 00 +R 00 00 01 00 00 05 01 00 +T 43 06 00 00 +R 00 00 01 00 +T 43 06 00 00 +R 00 00 01 00 +T 43 06 00 00 DD 7E FB DD B6 FC 28 0F 21 08 00 +R 00 00 01 00 +T 4E 06 00 00 DD 4E FB DD 46 FC 09 5E 23 56 18 +R 00 00 01 00 +T 59 06 00 00 03 +R 00 00 01 00 +T 5A 06 00 00 +R 00 00 01 00 +T 5A 06 00 00 11 FF FF +R 00 00 01 00 +T 5D 06 00 00 +R 00 00 01 00 +T 5D 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2C 00 02 0A 2C 00 +T 63 06 00 00 00 00 00 00 DD 75 F9 DD 74 FA 7D +R 00 00 01 00 02 04 02 00 +T 6C 06 00 00 B4 28 02 18 03 +R 00 00 01 00 +T 71 06 00 00 +R 00 00 01 00 +T 71 06 00 00 21 36 00 00 00 +R 00 00 01 00 00 05 02 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 1C 00 +T 79 06 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 1C 00 2B 0A 2A 00 +T 7F 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2A 00 02 09 02 00 +T 86 06 00 00 F1 21 13 00 39 46 23 66 68 7D B4 +R 00 00 01 00 +T 91 06 00 00 28 29 21 40 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 18 00 +T 9A 06 00 00 09 46 23 66 68 E5 21 15 00 39 4E +R 00 00 01 00 +T A5 06 00 00 23 46 E1 A7 ED 42 28 0F +R 00 00 01 00 +T AD 06 00 00 +R 00 00 01 00 +T AD 06 00 00 +R 00 00 01 00 +T AD 06 00 00 +R 00 00 01 00 +T AD 06 00 00 21 13 00 39 5E 23 56 3E +R 00 00 01 00 +T B5 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 31 00 02 09 31 00 +T BA 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T BC 06 00 00 +R 00 00 01 00 +T BC 06 00 00 21 04 00 39 46 23 66 68 7D B4 28 +R 00 00 01 00 +T C7 06 00 00 0F +R 00 00 01 00 +T C8 06 00 00 +R 00 00 01 00 +T C8 06 00 00 21 04 00 39 5E 23 56 3E +R 00 00 01 00 +T D0 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 31 00 02 09 31 00 +T D5 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T D7 06 00 00 +R 00 00 01 00 +T D7 06 00 00 21 02 00 39 46 23 66 68 7D B4 28 +R 00 00 01 00 +T E2 06 00 00 28 +R 00 00 01 00 +T E3 06 00 00 +R 00 00 01 00 +T E3 06 00 00 21 02 00 39 5E 23 56 3E +R 00 00 01 00 +T EB 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 31 00 02 09 31 00 +T F0 06 00 00 00 00 00 00 21 02 00 39 AF 77 23 +R 00 00 01 00 02 04 02 00 +T F9 06 00 00 77 21 0D 00 E5 21 02 00 39 4E 23 +R 00 00 01 00 +T 04 07 00 00 46 E1 09 AF 77 23 77 +R 00 00 01 00 +T 0B 07 00 00 +R 00 00 01 00 +T 0B 07 00 00 01 01 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 33 00 +T 13 07 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 33 00 02 0A 02 00 +T 1A 07 00 00 6E E1 DD 66 E2 7D B4 28 0E +R 00 00 01 00 +T 23 07 00 00 +R 00 00 01 00 +T 23 07 00 00 DD 5E E1 DD 56 E2 3E 00 00 00 00 +R 00 00 01 00 2B 0B 20 00 +T 2B 07 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 20 00 02 0A 02 00 +T 31 07 00 00 +R 00 00 01 00 +T 31 07 00 00 21 00 00 +R 00 00 01 00 +T 34 07 00 00 +R 00 00 01 00 +T 34 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 2B 74 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 43 6F 6E 6E 65 63 74 20 66 61 69 +R 00 00 02 00 +T 0F 00 00 00 6C 65 64 00 +R 00 00 02 00 +T 13 00 00 00 +R 00 00 02 00 +T 13 00 00 00 45 6E 74 65 72 20 75 73 65 72 20 +R 00 00 02 00 +T 1E 00 00 00 6E 61 6D 65 3A 20 00 +R 00 00 02 00 +T 25 00 00 00 +R 00 00 02 00 +T 25 00 00 00 50 61 73 73 77 6F 72 64 3A 20 00 +R 00 00 02 00 +T 30 00 00 00 +R 00 00 02 00 +T 30 00 00 00 66 74 70 3E 20 00 +R 00 00 02 00 +T 36 00 00 00 +R 00 00 02 00 +T 36 00 00 00 45 4F 46 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/doftpcd.rel b/src/nos/lib/clients_lib/doftpcd.rel new file mode 100644 index 00000000..584ab766 --- /dev/null +++ b/src/nos/lib/clients_lib/doftpcd.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___01f9_6c46_CWD_20_25s_0a Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _getresp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 57 flags 0 +S _doftpcd Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 05 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 FF FF 18 3A +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 25 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 01 00 +T 2A 00 00 00 00 00 00 00 E5 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 01 00 +T 33 00 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 3A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 41 00 00 00 F1 F1 01 C8 00 DD 5E FE DD 56 FF +R 00 00 01 00 +T 4C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 52 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/clients_lib/doget.rel b/src/nos/lib/clients_lib/doget.rel new file mode 100644 index 00000000..0372bf44 --- /dev/null +++ b/src/nos/lib/clients_lib/doget.rel @@ -0,0 +1,134 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _getsub Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _perror Ref00000000 +S .__.ABS. Def00000000 +S ___0216_5e82_Can_27t_20write_20_ Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _freopen Ref00000000 +S _Notsess Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11F flags 0 +S _doget Def00000000 +A CSTR size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 6E 0A DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 66 0B DD 75 FA DD 74 FB 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 19 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 08 00 +T 1B 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 2B 0A 09 00 +T 21 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 28 00 00 00 21 01 00 C3 1C 01 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 6E 04 DD 66 05 23 23 46 23 66 +R 00 00 01 00 +T 39 00 00 00 68 DD 75 F6 DD 74 F7 01 03 80 DD +R 00 00 01 00 +T 44 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 42 +R 00 00 01 00 +T 4F 00 00 00 30 0E +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 6E F6 DD 66 F7 DD 75 F8 DD 74 +R 00 00 01 00 +T 5C 00 00 00 F9 18 14 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T 6A 00 00 00 23 66 68 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 21 0D 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 7E 00 00 00 FE 01 38 0E FE 03 30 0A +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 DD 36 FE 00 00 00 00 DD 36 FF +R 00 00 01 00 09 07 02 00 +T 8D 00 00 00 00 00 00 00 18 0E +R 00 00 01 00 89 04 02 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 FE 00 20 0A DD 36 FE 00 00 00 00 +R 00 00 01 00 09 0B 02 00 +T 98 00 00 00 DD 36 FF 00 00 00 00 18 00 +R 00 00 01 00 89 07 02 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 21 00 00 E5 DD 4E FE DD 46 FF DD +R 00 00 01 00 +T A9 00 00 00 5E F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T B1 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 07 00 02 09 00 00 +T B8 00 00 00 75 FC DD 74 FD 7D B4 20 29 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 DD 6E F8 DD 66 F9 E5 0E +R 00 00 01 00 +T C9 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T CF 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T D5 00 00 00 00 00 00 00 F1 F1 F1 11 +R 00 00 01 00 02 04 00 00 +T DB 00 00 00 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 03 00 +T E0 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T E6 00 00 00 01 00 18 32 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 DD 6E FC DD 66 FD E5 DD 6E F6 DD +R 00 00 01 00 +T F5 00 00 00 66 F7 E5 01 03 00 00 00 DD 5E FA +R 00 00 01 00 00 08 02 00 +T FE 00 00 00 DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 04 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 0B 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 13 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 1A 01 00 00 00 00 +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 77 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 52 45 54 52 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/dohash.rel b/src/nos/lib/clients_lib/dohash.rel new file mode 100644 index 00000000..3bdb319d --- /dev/null +++ b/src/nos/lib/clients_lib/dohash.rel @@ -0,0 +1,31 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2F flags 0 +S _dohash Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 05 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 FF FF 18 12 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 05 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T 25 00 00 00 03 23 36 00 21 00 00 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/clients_lib/dolist.rel b/src/nos/lib/clients_lib/dolist.rel new file mode 100644 index 00000000..64f5b7fb --- /dev/null +++ b/src/nos/lib/clients_lib/dolist.rel @@ -0,0 +1,107 @@ +XL4 +H 3 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _getsub Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _perror Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _freopen Ref00000000 +S _Notsess Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0217_988b_Can_27t_20write_20l Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C8 flags 0 +S _dolist Def00000000 +A CSTR size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 19 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 08 00 +T 1B 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 2B 0A 0A 00 +T 21 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 28 00 00 00 21 01 00 C3 C5 00 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 4E 02 DD 46 03 21 02 00 CD +R 00 00 01 00 +T 38 00 00 00 00 00 00 00 30 25 +R 00 00 01 00 02 04 09 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 21 00 00 E5 01 00 00 00 00 21 +R 00 00 01 00 00 09 02 00 +T 44 00 00 00 04 00 DD 5E 04 DD 56 05 19 5E 23 +R 00 00 01 00 +T 4F 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 55 00 00 00 CD 00 00 00 00 F1 DD 75 FE DD 74 +R 00 00 01 00 02 05 00 00 +T 5E 00 00 00 FF 18 12 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 21 40 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 04 00 +T 6A 00 00 00 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 DD 7E FE DD B6 FF 20 21 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0C 00 02 0B 0C 00 +T 81 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 87 00 00 00 CD 00 00 00 00 F1 F1 11 +R 00 00 01 00 02 05 00 00 +T 8D 00 00 00 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 03 00 +T 92 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 98 00 00 00 01 00 18 29 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 DD 6E FE DD 66 FF E5 DD 6E 04 DD +R 00 00 01 00 +T A7 00 00 00 66 05 23 23 4E 23 46 C5 01 +R 00 00 01 00 +T B0 00 00 00 03 00 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 00 04 02 00 +T B9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T BE 00 00 00 00 00 00 00 F1 F1 21 00 00 +R 00 00 01 00 02 04 00 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 77 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 4C 49 53 54 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/dols.rel b/src/nos/lib/clients_lib/dols.rel new file mode 100644 index 00000000..84a1fc30 --- /dev/null +++ b/src/nos/lib/clients_lib/dols.rel @@ -0,0 +1,107 @@ +XL4 +H 3 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _getsub Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _perror Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _freopen Ref00000000 +S _Notsess Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0217_988b_Can_27t_20write_20l Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C8 flags 0 +S _dols Def00000000 +A CSTR size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 19 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 08 00 +T 1B 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 2B 0A 0A 00 +T 21 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 28 00 00 00 21 01 00 C3 C5 00 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 4E 02 DD 46 03 21 02 00 CD +R 00 00 01 00 +T 38 00 00 00 00 00 00 00 30 25 +R 00 00 01 00 02 04 09 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 21 00 00 E5 01 00 00 00 00 21 +R 00 00 01 00 00 09 02 00 +T 44 00 00 00 04 00 DD 5E 04 DD 56 05 19 5E 23 +R 00 00 01 00 +T 4F 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 55 00 00 00 CD 00 00 00 00 F1 DD 75 FE DD 74 +R 00 00 01 00 02 05 00 00 +T 5E 00 00 00 FF 18 12 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 21 40 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 04 00 +T 6A 00 00 00 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 DD 7E FE DD B6 FF 20 21 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0C 00 02 0B 0C 00 +T 81 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 87 00 00 00 CD 00 00 00 00 F1 F1 11 +R 00 00 01 00 02 05 00 00 +T 8D 00 00 00 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 03 00 +T 92 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 98 00 00 00 01 00 18 29 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 DD 6E FE DD 66 FF E5 DD 6E 04 DD +R 00 00 01 00 +T A7 00 00 00 66 05 23 23 4E 23 46 C5 01 +R 00 00 01 00 +T B0 00 00 00 03 00 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 00 04 02 00 +T B9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T BE 00 00 00 00 00 00 00 F1 F1 21 00 00 +R 00 00 01 00 02 04 00 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 77 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 4E 4C 53 54 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/domcompare.rel b/src/nos/lib/clients_lib/domcompare.rel new file mode 100644 index 00000000..c4db74c0 --- /dev/null +++ b/src/nos/lib/clients_lib/domcompare.rel @@ -0,0 +1,222 @@ +XL4 +H 3 areas 15 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___01fc_e911_Can_27t_20NLST_20_2 Ref00000000 +S _getsub Ref00000000 +S ___0140_1170__25s_20_2d_20Differ Ref00000000 +S _rip Ref00000000 +S _fseek Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fgets Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ___0142_4968__25s_20_2d_20Same_0 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S _Notsess Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _tmpfile Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _compsub Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 224 flags 0 +S _domcompare Def00000000 +A CSTR size 5 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF DD 6E 0A DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 66 0B DD 75 F4 DD 74 F5 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 19 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0D 00 +T 1B 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0D 00 2B 0A 10 00 +T 21 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T 28 00 00 00 21 01 00 C3 21 02 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 11 00 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T 34 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 3B 00 00 00 F8 DD 74 F9 21 04 00 DD 4E F4 DD +R 00 00 01 00 +T 46 00 00 00 46 F5 09 36 02 DD 36 FA 01 DD 36 +R 00 00 01 00 +T 51 00 00 00 FB 00 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 DD 4E 02 DD 46 03 DD 6E FA DD 66 +R 00 00 01 00 +T 5E 00 00 00 FB CD 00 00 00 00 D2 FC 01 00 00 +R 00 00 01 00 02 06 0E 00 00 0B 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0F 00 02 0A 0F 00 +T 6B 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 E5 +R 00 00 01 00 02 04 00 00 +T 74 00 00 00 DD 6E FA DD 66 FB 29 DD 4E 04 DD +R 00 00 01 00 +T 7F 00 00 00 46 05 09 4E 23 46 C5 01 +R 00 00 01 00 +T 87 00 00 00 00 00 00 00 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 00 04 02 00 +T 90 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 95 00 00 00 00 00 00 00 F1 F1 DD 75 FC DD 74 +R 00 00 01 00 02 04 00 00 +T 9E 00 00 00 FD DD 71 FE DD 70 FF 21 09 00 DD +R 00 00 01 00 +T A9 00 00 00 4E F4 DD 46 F5 09 7E 23 B6 28 03 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 C3 FC 01 00 00 +R 00 00 01 00 00 05 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 DD 7E FC DD A6 FD DD A6 FE DD A6 +R 00 00 01 00 +T C2 00 00 00 FF 3C 20 27 +R 00 00 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 DD 6E FA DD 66 FB 29 DD 4E 04 DD +R 00 00 01 00 +T D1 00 00 00 46 05 09 4E 23 46 C5 0E +R 00 00 01 00 +T D9 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 01 00 02 0A 01 00 +T DF 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T E5 00 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T EB 00 00 00 F1 01 00 00 +R 00 00 01 00 00 04 01 00 +T ED 00 00 00 +R 00 00 01 00 +T ED 00 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T F8 00 00 00 E5 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T 00 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 05 01 00 00 00 00 00 00 F1 F1 F1 21 10 00 DD +R 00 00 01 00 02 04 00 00 +T 0E 01 00 00 4E F6 DD 46 F7 09 CB 86 21 10 00 +R 00 00 01 00 +T 19 01 00 00 09 CB 8E +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 DD 6E F6 DD 66 F7 E5 01 00 01 DD +R 00 00 01 00 +T 27 01 00 00 5E F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 2F 01 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 36 01 00 00 B4 CA E3 01 00 00 +R 00 00 01 00 00 06 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 42 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 49 01 00 00 6E F8 DD 66 F9 E5 DD 4E F8 DD 46 +R 00 00 01 00 +T 54 01 00 00 F9 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 5C 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 61 01 00 00 00 00 00 00 F1 7D B4 20 1B +R 00 00 01 00 02 04 00 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 DD 6E F8 DD 66 F9 E5 0E +R 00 00 01 00 +T 70 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0A 00 02 0A 0A 00 +T 76 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T 7C 01 00 00 00 00 00 00 F1 F1 F1 18 19 +R 00 00 01 00 02 04 00 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 DD 6E F8 DD 66 F9 E5 0E +R 00 00 01 00 +T 8B 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T 91 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T 97 01 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 9C 01 00 00 +R 00 00 01 00 +T 9C 01 00 00 21 09 00 DD 4E F4 DD 46 F5 09 7E +R 00 00 01 00 +T A7 01 00 00 23 B6 28 35 +R 00 00 01 00 +T AB 01 00 00 +R 00 00 01 00 +T AB 01 00 00 21 09 00 DD 4E F4 DD 46 F5 09 AF +R 00 00 01 00 +T B6 01 00 00 77 23 77 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T C0 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T C5 01 00 00 00 00 00 00 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 02 04 00 00 +T CE 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T D3 01 00 00 00 00 00 00 21 04 00 09 36 00 21 +R 00 00 01 00 02 04 00 00 +T DC 01 00 00 01 00 18 41 +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 C3 1C 01 00 00 +R 00 00 01 00 00 05 01 00 +T E3 01 00 00 +R 00 00 01 00 +T E3 01 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 13 00 +T EB 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 13 00 02 0A 00 00 +T F1 01 00 00 +R 00 00 01 00 +T F1 01 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 C3 53 00 00 00 +R 00 00 01 00 00 05 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 04 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 0B 02 00 00 04 00 DD 4E F4 DD 46 F5 09 36 00 +R 00 00 01 00 +T 16 02 00 00 21 09 00 09 AF 77 23 77 21 00 00 +R 00 00 01 00 +T 21 02 00 00 +R 00 00 01 00 +T 21 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4E 4C 53 54 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/domd5.rel b/src/nos/lib/clients_lib/domd5.rel new file mode 100644 index 00000000..c57c90d9 --- /dev/null +++ b/src/nos/lib/clients_lib/domd5.rel @@ -0,0 +1,167 @@ +XL4 +H 2 areas F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S .__.ABS. Def00000000 +S ___039f_a616_TYPE_20L_20_25d_0a Ref00000000 +S ___039e_3bb9_TYPE_20I_0a Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___03e6_a62b_XMD5_20_25s_0a Ref00000000 +S _Notsess Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _getresp Ref00000000 +S ___039d_f579_TYPE_20A_0a Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 183 flags 0 +S _domd5 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF AF DD 77 FE +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FF DD 6E 0A DD 66 0B DD 75 +R 00 00 01 00 +T 14 00 00 00 F8 DD 74 F9 7D B4 20 19 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 08 00 +T 22 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 2B 0A 0A 00 +T 28 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 2F 00 00 00 21 01 00 C3 80 01 00 00 +R 00 00 01 00 00 08 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 DD 6E F8 DD 66 F9 46 23 66 68 DD +R 00 00 01 00 +T 40 00 00 00 75 FA DD 74 FB DD 6E 04 DD 66 05 +R 00 00 01 00 +T 4B 00 00 00 23 23 46 23 66 68 DD 75 F6 DD 74 +R 00 00 01 00 +T 56 00 00 00 F7 21 0D 00 DD 4E F8 DD 46 F9 09 +R 00 00 01 00 +T 61 00 00 00 E5 21 0E 00 09 7E E1 BE CA +R 00 00 01 00 +T 6A 00 00 00 32 01 00 00 +R 00 00 01 00 00 04 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 21 0D 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 77 00 00 00 FE 00 20 1B +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0D 00 02 0B 0D 00 +T 81 00 00 00 E5 DD 6E FA DD 66 FB E5 3E +R 00 00 01 00 +T 8A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 8F 00 00 00 00 00 00 00 F1 F1 F1 18 4D +R 00 00 01 00 02 04 00 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 FE 01 20 1B 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 05 00 +T 9E 00 00 00 00 00 00 00 E5 DD 6E FA DD 66 FB +R 00 00 01 00 02 04 05 00 +T A7 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T AD 00 00 00 CD 00 00 00 00 F1 F1 F1 18 2E +R 00 00 01 00 02 05 00 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 FE 02 20 2A 21 0F 00 DD 4E F8 DD +R 00 00 01 00 +T C0 00 00 00 46 F9 09 4E 23 46 C5 0E +R 00 00 01 00 +T C8 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 04 00 02 0A 04 00 +T CE 00 00 00 DD 6E FA DD 66 FB E5 3E +R 00 00 01 00 +T D6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T DB 00 00 00 00 00 00 00 F1 F1 F1 F1 18 00 +R 00 00 01 00 02 04 00 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 21 0D 00 DD 4E F8 DD 46 F9 09 56 +R 00 00 01 00 +T EE 00 00 00 21 0E 00 09 72 21 07 00 09 7E 23 +R 00 00 01 00 +T F9 00 00 00 B6 20 2E +R 00 00 01 00 +T FC 00 00 00 +R 00 00 01 00 +T FC 00 00 00 01 C8 00 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T 06 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 0B 01 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 00 00 +T 14 01 00 00 A4 3C 28 0E DD 4E FC DD 46 FD 21 +R 00 00 01 00 +T 1F 01 00 00 2B 01 CD 00 00 00 00 30 02 +R 00 00 01 00 02 07 09 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 18 55 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 18 08 +R 00 00 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 32 01 00 00 +R 00 00 01 00 +T 32 01 00 00 +R 00 00 01 00 +T 32 01 00 00 DD 6E F6 DD 66 F7 E5 0E +R 00 00 01 00 +T 3A 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 07 00 02 0A 07 00 +T 40 01 00 00 DD 6E FA DD 66 FB E5 3E +R 00 00 01 00 +T 48 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 4D 01 00 00 00 00 00 00 F1 F1 F1 F1 DD 7E FE +R 00 00 01 00 02 04 00 00 +T 56 01 00 00 DD B6 FF 28 11 +R 00 00 01 00 +T 5B 01 00 00 +R 00 00 01 00 +T 5B 01 00 00 01 C8 00 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T 65 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 6A 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 01 C8 00 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T 76 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 7B 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 7D 01 00 00 +R 00 00 01 00 +T 7D 01 00 00 21 00 00 +R 00 00 01 00 +T 80 01 00 00 +R 00 00 01 00 +T 80 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/clients_lib/domget.rel b/src/nos/lib/clients_lib/domget.rel new file mode 100644 index 00000000..4f453553 --- /dev/null +++ b/src/nos/lib/clients_lib/domget.rel @@ -0,0 +1,279 @@ +XL4 +H 3 areas 16 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___01fc_e911_Can_27t_20NLST_20_2 Ref00000000 +S _getsub Ref00000000 +S _rip Ref00000000 +S _fseek Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fgets Ref00000000 +S _perror Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ___0216_5e82_Can_27t_20write_20_ Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S _freopen Ref00000000 +S _Notsess Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _tmpfile Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _compsub Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2A3 flags 0 +S _domget Def00000000 +A CSTR size D flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F0 FF DD 6E 0A DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 66 0B DD 75 F0 DD 74 F1 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 19 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0E 00 +T 1B 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 2B 0A 11 00 +T 21 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 28 00 00 00 21 01 00 C3 A0 02 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 21 0D 00 DD 4E F0 DD 46 F1 09 7E +R 00 00 01 00 +T 39 00 00 00 FE 01 38 0E FE 03 30 0A +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 36 F8 00 00 00 00 DD 36 F9 +R 00 00 01 00 09 07 02 00 +T 48 00 00 00 00 00 00 00 18 0E +R 00 00 01 00 89 04 02 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 FE 00 20 0A DD 36 F8 00 00 00 00 +R 00 00 01 00 09 0B 02 00 +T 53 00 00 00 DD 36 F9 00 00 00 00 18 00 +R 00 00 01 00 89 07 02 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 11 00 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T 5F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 66 00 00 00 F6 DD 74 F7 21 04 00 DD 4E F0 DD +R 00 00 01 00 +T 71 00 00 00 46 F1 09 36 02 DD 36 FA 01 DD 36 +R 00 00 01 00 +T 7C 00 00 00 FB 00 +R 00 00 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 DD 4E 02 DD 46 03 DD 6E FA DD 66 +R 00 00 01 00 +T 89 00 00 00 FB CD 00 00 00 00 D2 7B 02 00 00 +R 00 00 01 00 02 06 0F 00 00 0B 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T 96 00 00 00 00 00 00 00 DD 75 F2 DD 74 F3 E5 +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 DD 6E FA DD 66 FB 29 DD 4E 04 DD +R 00 00 01 00 +T AA 00 00 00 46 05 09 4E 23 46 C5 01 +R 00 00 01 00 +T B2 00 00 00 02 00 00 00 DD 5E F0 DD 56 F1 3E +R 00 00 01 00 00 04 02 00 +T BB 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T C0 00 00 00 00 00 00 00 F1 F1 DD 75 FC DD 74 +R 00 00 01 00 02 04 00 00 +T C9 00 00 00 FD DD 71 FE DD 70 FF 21 09 00 DD +R 00 00 01 00 +T D4 00 00 00 4E F0 DD 46 F1 09 7E 23 B6 28 03 +R 00 00 01 00 +T DF 00 00 00 +R 00 00 01 00 +T DF 00 00 00 C3 7B 02 00 00 +R 00 00 01 00 00 05 01 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 DD 7E FC DD A6 FD DD A6 FE DD A6 +R 00 00 01 00 +T ED 00 00 00 FF 3C 20 27 +R 00 00 01 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 DD 6E FA DD 66 FB 29 DD 4E 04 DD +R 00 00 01 00 +T FC 00 00 00 46 05 09 4E 23 46 C5 0E +R 00 00 01 00 +T 04 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 01 00 02 0A 01 00 +T 0A 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 11 00 02 0A 11 00 +T 10 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T 16 01 00 00 70 02 00 00 +R 00 00 01 00 00 04 01 00 +T 18 01 00 00 +R 00 00 01 00 +T 18 01 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 23 01 00 00 E5 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T 2B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 30 01 00 00 00 00 00 00 F1 F1 F1 21 10 00 DD +R 00 00 01 00 02 04 00 00 +T 39 01 00 00 4E F2 DD 46 F3 09 CB 86 21 10 00 +R 00 00 01 00 +T 44 01 00 00 09 CB 8E +R 00 00 01 00 +T 47 01 00 00 +R 00 00 01 00 +T 47 01 00 00 DD 6E F2 DD 66 F3 E5 01 00 01 DD +R 00 00 01 00 +T 52 01 00 00 5E F6 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 5A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 61 01 00 00 B4 CA 62 02 00 00 +R 00 00 01 00 00 06 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 6D 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 74 01 00 00 0B 00 DD 4E F0 DD 46 F1 09 7E 23 +R 00 00 01 00 +T 7F 01 00 00 B6 28 20 DD 6E F6 DD 66 F7 E5 DD +R 00 00 01 00 +T 8A 01 00 00 4E F6 DD 46 F7 DD 5E F0 DD 56 F1 +R 00 00 01 00 +T 95 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 9B 01 00 00 00 00 00 00 F1 7D B4 28 79 +R 00 00 01 00 02 04 00 00 +T A2 01 00 00 +R 00 00 01 00 +T A2 01 00 00 +R 00 00 01 00 +T A2 01 00 00 +R 00 00 01 00 +T A2 01 00 00 21 00 00 E5 DD 4E F8 DD 46 F9 DD +R 00 00 01 00 +T AD 01 00 00 5E F6 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T B5 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T BC 01 00 00 75 F4 DD 74 F5 7D B4 20 27 +R 00 00 01 00 +T C5 01 00 00 +R 00 00 01 00 +T C5 01 00 00 DD 6E F6 DD 66 F7 E5 0E +R 00 00 01 00 +T CD 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0A 00 02 0A 0A 00 +T D3 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 11 00 02 0A 11 00 +T D9 01 00 00 00 00 00 00 F1 F1 F1 11 +R 00 00 01 00 02 04 00 00 +T DF 01 00 00 07 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 07 00 +T E4 01 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T EA 01 00 00 47 01 00 00 +R 00 00 01 00 00 04 01 00 +T EC 01 00 00 +R 00 00 01 00 +T EC 01 00 00 DD 6E F4 DD 66 F5 E5 DD 6E F6 DD +R 00 00 01 00 +T F7 01 00 00 66 F7 E5 01 08 00 00 00 DD 5E F0 +R 00 00 01 00 00 08 02 00 +T 00 02 00 00 DD 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 06 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 0D 02 00 00 DD 5E F4 DD 56 F5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 14 00 +T 15 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 14 00 02 0A 00 00 +T 1B 02 00 00 +R 00 00 01 00 +T 1B 02 00 00 21 09 00 DD 4E F0 DD 46 F1 09 7E +R 00 00 01 00 +T 26 02 00 00 23 B6 28 35 +R 00 00 01 00 +T 2A 02 00 00 +R 00 00 01 00 +T 2A 02 00 00 21 09 00 DD 4E F0 DD 46 F1 09 AF +R 00 00 01 00 +T 35 02 00 00 77 23 77 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T 3F 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T 44 02 00 00 00 00 00 00 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 02 04 00 00 +T 4D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 52 02 00 00 00 00 00 00 21 04 00 09 36 00 21 +R 00 00 01 00 02 04 00 00 +T 5B 02 00 00 01 00 18 41 +R 00 00 01 00 +T 5F 02 00 00 +R 00 00 01 00 +T 5F 02 00 00 C3 47 01 00 00 +R 00 00 01 00 00 05 01 00 +T 62 02 00 00 +R 00 00 01 00 +T 62 02 00 00 DD 5E F2 DD 56 F3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 14 00 +T 6A 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 14 00 02 0A 00 00 +T 70 02 00 00 +R 00 00 01 00 +T 70 02 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 78 02 00 00 +R 00 00 01 00 +T 78 02 00 00 C3 7E 00 00 00 +R 00 00 01 00 00 05 01 00 +T 7B 02 00 00 +R 00 00 01 00 +T 7B 02 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 83 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 8A 02 00 00 04 00 DD 4E F0 DD 46 F1 09 36 00 +R 00 00 01 00 +T 95 02 00 00 21 09 00 09 AF 77 23 77 21 00 00 +R 00 00 01 00 +T A0 02 00 00 +R 00 00 01 00 +T A0 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 77 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 4E 4C 53 54 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 00 +R 00 00 02 00 +T 08 00 00 00 +R 00 00 02 00 +T 08 00 00 00 52 45 54 52 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/domkdir.rel b/src/nos/lib/clients_lib/domkdir.rel new file mode 100644 index 00000000..d8d3d360 --- /dev/null +++ b/src/nos/lib/clients_lib/domkdir.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___03e7_8515_XMKD_20_25s_0a Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _getresp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 57 flags 0 +S _domkdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 05 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 FF FF 18 3A +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 25 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 05 00 +T 2A 00 00 00 00 00 00 00 E5 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 05 00 +T 33 00 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 3A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 41 00 00 00 F1 F1 01 C8 00 DD 5E FE DD 56 FF +R 00 00 01 00 +T 4C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 52 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/clients_lib/domput.rel b/src/nos/lib/clients_lib/domput.rel new file mode 100644 index 00000000..96755931 --- /dev/null +++ b/src/nos/lib/clients_lib/domput.rel @@ -0,0 +1,178 @@ +XL4 +H 2 areas 14 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _rip Ref00000000 +S _fseek Ref00000000 +S ___0208_3eee_Can_27t_20list_20lo Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fgets Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _putsub Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S _Notsess Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _tmpfile Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _compsub Ref00000000 +S _fclose Ref00000000 +S _getdir Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1AA flags 0 +S _domput Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF DD 6E 0A DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 66 0B DD 75 F8 DD 74 F9 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 19 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0B 00 +T 1B 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 2B 0A 0E 00 +T 21 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 28 00 00 00 21 01 00 C3 A7 01 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T 34 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 00 00 +T 3D 00 00 00 B4 20 17 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 46 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 4C 00 00 00 CD 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 05 00 00 +T 55 00 00 00 A7 01 00 00 +R 00 00 01 00 00 04 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 36 FC 01 DD 36 FD 00 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 4E 02 DD 46 03 DD 6E FC DD 66 +R 00 00 01 00 +T 6A 00 00 00 FD CD 00 00 00 00 30 2E +R 00 00 01 00 02 06 0C 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 DD 6E FA DD 66 FB E5 01 00 00 DD +R 00 00 01 00 +T 7B 00 00 00 6E FC DD 66 FD 29 DD 5E 04 DD 56 +R 00 00 01 00 +T 86 00 00 00 05 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 12 00 +T 8E 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 95 00 00 00 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 18 C1 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T A9 00 00 00 E5 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T B1 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T B6 00 00 00 00 00 00 00 F1 F1 F1 21 10 00 DD +R 00 00 01 00 02 04 00 00 +T BF 00 00 00 4E FA DD 46 FB 09 CB 86 21 10 00 +R 00 00 01 00 +T CA 00 00 00 09 CB 8E 11 00 01 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T D2 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T D9 00 00 00 75 FE DD 74 FF 21 04 00 DD 4E F8 +R 00 00 01 00 +T E4 00 00 00 DD 46 F9 09 36 01 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 DD 6E FA DD 66 FB E5 01 00 01 DD +R 00 00 01 00 +T F5 00 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T FD 00 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 04 01 00 00 B4 28 6D +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 0F 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 16 01 00 00 0B 00 DD 4E F8 DD 46 F9 09 7E 23 +R 00 00 01 00 +T 21 01 00 00 B6 28 20 DD 6E FE DD 66 FF E5 DD +R 00 00 01 00 +T 2C 01 00 00 4E FE DD 46 FF DD 5E F8 DD 56 F9 +R 00 00 01 00 +T 37 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T 3D 01 00 00 00 00 00 00 F1 7D B4 28 1C +R 00 00 01 00 02 04 00 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 DD 6E FE DD 66 FF E5 DD 4E FE DD +R 00 00 01 00 +T 4F 01 00 00 46 FF DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T 58 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 5D 01 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 00 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 21 09 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 6B 01 00 00 23 B6 28 02 +R 00 00 01 00 +T 6F 01 00 00 +R 00 00 01 00 +T 6F 01 00 00 18 03 +R 00 00 01 00 +T 71 01 00 00 +R 00 00 01 00 +T 71 01 00 00 C3 EA 00 00 00 +R 00 00 01 00 00 05 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 7C 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 83 01 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 8B 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 91 01 00 00 04 00 DD 4E F8 DD 46 F9 09 36 00 +R 00 00 01 00 +T 9C 01 00 00 21 09 00 09 AF 77 23 77 21 00 00 +R 00 00 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/clients_lib/doput.rel b/src/nos/lib/clients_lib/doput.rel new file mode 100644 index 00000000..be5df981 --- /dev/null +++ b/src/nos/lib/clients_lib/doput.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _putsub Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Notsess Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 94 flags 0 +S _doput Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FA DD 74 FB 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 18 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 05 00 +T 1B 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 2B 0A 06 00 +T 21 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 28 00 00 00 21 01 00 18 64 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 DD 6E 04 DD 66 05 23 23 46 23 66 +R 00 00 01 00 +T 38 00 00 00 68 DD 75 FE DD 74 FF 01 03 80 DD +R 00 00 01 00 +T 43 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 42 +R 00 00 01 00 +T 4E 00 00 00 30 0E +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 DD 6E FE DD 66 FF DD 75 FC DD 74 +R 00 00 01 00 +T 5B 00 00 00 FD 18 14 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T 69 00 00 00 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 DD 6E FE DD 66 FF E5 DD 4E FC DD +R 00 00 01 00 +T 7D 00 00 00 46 FD DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 86 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 8B 00 00 00 00 00 00 00 F1 21 00 00 +R 00 00 01 00 02 04 00 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/clients_lib/doquit.rel b/src/nos/lib/clients_lib/doquit.rel new file mode 100644 index 00000000..ee719bb4 --- /dev/null +++ b/src/nos/lib/clients_lib/doquit.rel @@ -0,0 +1,49 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _getresp Ref00000000 +S ___0348_744a_QUIT_0a Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5E flags 0 +S _doquit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 05 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 FF FF 18 41 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 07 00 02 0B 07 00 +T 20 00 00 00 E5 DD 6E FE DD 66 FF 4E 23 46 C5 +R 00 00 01 00 +T 2B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 31 00 00 00 00 00 00 00 F1 F1 F1 01 C8 00 DD +R 00 00 01 00 02 04 00 00 +T 3A 00 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 42 00 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 48 00 00 00 C8 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 51 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 56 00 00 00 00 00 00 00 21 FF FF +R 00 00 01 00 02 04 00 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/clients_lib/doread.rel b/src/nos/lib/clients_lib/doread.rel new file mode 100644 index 00000000..c6e9cb65 --- /dev/null +++ b/src/nos/lib/clients_lib/doread.rel @@ -0,0 +1,55 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _getsub Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Notsess Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5E flags 0 +S _doread Def00000000 +A CSTR size 5 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 18 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 06 00 +T 1B 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 2B 0A 07 00 +T 21 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 28 00 00 00 21 01 00 18 2E +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 03 00 +T 36 00 00 00 23 46 C5 DD 6E 04 DD 66 05 23 23 +R 00 00 01 00 +T 41 00 00 00 4E 23 46 C5 01 00 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T 4A 00 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 51 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 58 00 00 00 21 00 00 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 52 45 54 52 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/dormdir.rel b/src/nos/lib/clients_lib/dormdir.rel new file mode 100644 index 00000000..c8bfb04c --- /dev/null +++ b/src/nos/lib/clients_lib/dormdir.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S ___03e8_31d2_XRMD_20_25s_0a Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _getresp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 57 flags 0 +S _dormdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 05 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 FF FF 18 3A +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 25 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 03 00 +T 2A 00 00 00 00 00 00 00 E5 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 03 00 +T 33 00 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 3A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 41 00 00 00 F1 F1 01 C8 00 DD 5E FE DD 56 FF +R 00 00 01 00 +T 4C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 52 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/clients_lib/dotype.rel b/src/nos/lib/clients_lib/dotype.rel new file mode 100644 index 00000000..4219e818 --- /dev/null +++ b/src/nos/lib/clients_lib/dotype.rel @@ -0,0 +1,137 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___02ae_89c0_Invalid_20type_20_2 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___02bd_4a5a_Logical_20bytesize_ Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S ___01eb_3ed8_Ascii_0a Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___029b_4ab5_Image_0a Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 130 flags 0 +S _dotype Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 06 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 FF FF C3 2D 01 00 00 +R 00 00 01 00 00 08 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 01 02 80 DD 6E 02 DD 66 03 3E 80 +R 00 00 01 00 +T 26 00 00 00 AC 67 ED 42 30 65 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 21 0D 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 37 00 00 00 FE 01 20 13 +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T 41 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 47 00 00 00 CD 00 00 00 00 F1 F1 18 3D +R 00 00 01 00 02 05 00 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 FE 00 20 13 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 07 00 +T 56 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 2B 0A 08 00 +T 5C 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 63 00 00 00 18 26 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 FE 02 20 22 21 0F 00 DD 4E FE DD +R 00 00 01 00 +T 70 00 00 00 46 FF 09 4E 23 46 C5 0E +R 00 00 01 00 +T 78 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T 7E 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 84 00 00 00 00 00 00 00 F1 F1 F1 18 00 +R 00 00 01 00 02 04 00 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 21 00 00 C3 2D 01 00 00 +R 00 00 01 00 00 08 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 DD 6E 04 DD 66 05 23 23 7E 23 66 +R 00 00 01 00 +T 9C 00 00 00 6F 5E CD 00 00 00 00 08 00 41 42 +R 00 00 01 00 02 07 0B 00 +T A5 00 00 00 49 4C 61 62 69 6C 07 01 00 00 +R 00 00 01 00 00 0A 01 00 +T AD 00 00 00 D9 00 00 00 BD 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B1 00 00 00 BD 00 00 00 CB 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B5 00 00 00 D9 00 00 00 BD 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B9 00 00 00 BD 00 00 00 CB 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 21 0D 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T C8 00 00 00 01 18 5F +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 21 0D 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T D6 00 00 00 00 18 51 +R 00 00 01 00 +T D9 00 00 00 +R 00 00 01 00 +T D9 00 00 00 21 0D 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T E4 00 00 00 02 21 0F 00 09 E5 21 04 00 DD 4E +R 00 00 01 00 +T EF 00 00 00 04 DD 46 05 09 5E 23 56 3E +R 00 00 01 00 +T F8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T FD 00 00 00 00 00 00 00 4D 44 E1 71 23 70 18 +R 00 00 01 00 02 04 00 00 +T 06 01 00 00 23 +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 12 01 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 01 00 +T 17 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 08 00 +T 1D 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 24 01 00 00 F1 21 01 00 18 03 +R 00 00 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 21 00 00 +R 00 00 01 00 +T 2D 01 00 00 +R 00 00 01 00 +T 2D 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/clients_lib/doupdate.rel b/src/nos/lib/clients_lib/doupdate.rel new file mode 100644 index 00000000..7e3b785c --- /dev/null +++ b/src/nos/lib/clients_lib/doupdate.rel @@ -0,0 +1,42 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___03c7_eb24_Update_20with_20MD5 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setbool Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 49 flags 0 +S _doupdate Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 05 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 FF FF 18 2C +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 25 00 00 00 66 03 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 01 00 +T 2C 00 00 00 00 00 00 00 E5 21 0B 00 DD 4E FE +R 00 00 01 00 02 04 01 00 +T 35 00 00 00 DD 46 FF 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 3D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 44 00 00 00 F1 F1 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/clients_lib/doverbose.rel b/src/nos/lib/clients_lib/doverbose.rel new file mode 100644 index 00000000..bfac4642 --- /dev/null +++ b/src/nos/lib/clients_lib/doverbose.rel @@ -0,0 +1,42 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___03db_c8df_Verbose Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setshort Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 49 flags 0 +S _doverbose Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 05 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 FF FF 18 2C +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 25 00 00 00 66 03 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 03 00 +T 2C 00 00 00 00 00 00 00 E5 21 05 00 DD 4E FE +R 00 00 01 00 02 04 03 00 +T 35 00 00 00 DD 46 FF 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 3D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 44 00 00 00 F1 F1 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/clients_lib/finger.rel b/src/nos/lib/clients_lib/finger.rel new file mode 100644 index 00000000..898b98fb --- /dev/null +++ b/src/nos/lib/clients_lib/finger.rel @@ -0,0 +1,347 @@ +XL4 +H 3 areas 28 global symbols +S _resolve Ref00000000 +S ___03b3_2057_Too_20many_20sessio Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0137_7643__25s_0a Ref00000000 +S _fflush Ref00000000 +S _socket Ref00000000 +S _fgetc Ref00000000 +S ___016a_82c1__25s_40_25s_3a_0a Ref00000000 +S _newsession Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S ___0221_6930_Connected_0a Ref00000000 +S _alert Ref00000000 +S __fprintf Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ___03b6_2030_Trying_20_25s_2e_2e Ref00000000 +S _fputc Ref00000000 +S ___0367_ae52_Resolving_20_25s_2e Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Current Ref00000000 +S _freesession Ref00000000 +S _close_s Ref00000000 +S _connect Ref00000000 +S ___0202_ef8c_Can_27t_20create_20 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___03f1_699f__5eC_0a Ref00000000 +S ___0160_1d98__25s_3a_20local_20n Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ___021f_bb2f_Connect_20failed_3a Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _sockerr Ref00000000 +S _psocket Ref00000000 +S ___05c6_5c70_unknown_0a Ref00000000 +S _fdopen Ref00000000 +S _fclose Ref00000000 +S _Cmdline Ref00000000 +S _keywait Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 34E flags 0 +S _dofinger Def00000000 +A CSTR size 5 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E4 FF 21 01 00 E5 +R 00 00 01 00 02 05 19 00 +T 09 00 00 00 01 03 00 ED 5B 00 00 00 00 3E +R 00 00 01 00 02 09 25 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 16 00 00 00 00 00 00 00 F1 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 02 00 +T 1F 00 00 00 7D B4 20 25 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 29 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1D 00 02 0B 1D 00 +T 2F 00 00 00 CD 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 05 02 00 +T 38 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 26 00 +T 3D 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 26 00 02 09 02 00 +T 43 00 00 00 01 00 C3 03 03 00 00 +R 00 00 01 00 00 07 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 21 20 00 DD 4E FC DD 46 FD 09 36 +R 00 00 01 00 +T 53 00 00 00 06 03 00 00 23 36 06 03 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T 58 00 00 00 36 06 03 00 00 21 17 00 09 CB 8E +R 00 00 01 00 29 05 01 00 +T 60 00 00 00 21 17 00 09 CB 86 AF DD 77 E4 DD +R 00 00 01 00 +T 6B 00 00 00 77 E5 DD 36 E6 4F DD 36 E7 00 DD +R 00 00 01 00 +T 76 00 00 00 36 F8 01 DD 36 F9 00 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 DD 4E 02 DD 46 03 DD 6E F8 DD 66 +R 00 00 01 00 +T 88 00 00 00 F9 CD 00 00 00 00 D2 E4 02 00 00 +R 00 00 01 00 02 06 1C 00 00 0B 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 01 40 00 DD 6E F8 DD 66 F9 29 DD +R 00 00 01 00 +T 9A 00 00 00 5E 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T A4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T A9 00 00 00 00 00 00 00 DD 75 F4 DD 74 F5 7D +R 00 00 01 00 02 04 02 00 +T B2 00 00 00 B4 20 27 +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 DD 6E F8 DD 66 F9 29 DD 4E 04 DD +R 00 00 01 00 +T C0 00 00 00 46 05 09 4E 23 46 C5 0E +R 00 00 01 00 +T C8 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 1B 00 02 0A 1B 00 +T CE 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1D 00 02 0A 1D 00 +T D4 00 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 02 00 +T DA 00 00 00 D9 02 00 00 +R 00 00 01 00 00 04 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T E7 00 00 00 74 F5 2B 36 00 DD 6E F4 DD 66 F5 +R 00 00 01 00 +T F2 00 00 00 E5 DD 6E F8 DD 66 F9 29 DD 4E 04 +R 00 00 01 00 +T FD 00 00 00 DD 46 05 09 4E 23 46 C5 0E +R 00 00 01 00 +T 06 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 07 00 02 0A 07 00 +T 0C 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1D 00 02 0A 1D 00 +T 12 01 00 00 00 00 00 00 F1 F1 F1 F1 DD 6E F4 +R 00 00 01 00 02 04 02 00 +T 1B 01 00 00 DD 66 F5 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 12 00 +T 23 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 12 00 2B 0A 1D 00 +T 29 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1D 00 02 09 02 00 +T 30 01 00 00 F1 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 38 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 3D 01 00 00 00 00 00 00 DD 75 E8 DD 74 E9 DD +R 00 00 01 00 02 04 02 00 +T 46 01 00 00 71 EA DD 70 EB 7D B4 B1 B0 20 14 +R 00 00 01 00 +T 51 01 00 00 +R 00 00 01 00 +T 51 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 22 00 02 0B 22 00 +T 57 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1D 00 02 0B 1D 00 +T 5D 01 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 02 00 +T 63 01 00 00 D9 02 00 00 +R 00 00 01 00 00 04 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 21 00 +T 6D 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 21 00 02 0A 02 00 +T 74 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 10 00 02 0B 10 00 +T 7A 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1D 00 02 0B 1D 00 +T 80 01 00 00 CD 00 00 00 00 F1 F1 F1 21 00 00 +R 00 00 01 00 02 05 02 00 +T 89 01 00 00 E5 01 00 00 11 00 00 3E +R 00 00 01 00 +T 91 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 96 01 00 00 00 00 00 00 F1 DD 75 F6 DD 74 F7 +R 00 00 01 00 02 04 02 00 +T 9F 01 00 00 7D A4 3C 20 14 +R 00 00 01 00 +T A4 01 00 00 +R 00 00 01 00 +T A4 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 18 00 02 0B 18 00 +T AA 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1D 00 02 0B 1D 00 +T B0 01 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 02 00 +T B6 01 00 00 E4 02 00 00 +R 00 00 01 00 00 04 01 00 +T B8 01 00 00 +R 00 00 01 00 +T B8 01 00 00 21 10 00 E5 21 02 00 39 4D 44 DD +R 00 00 01 00 +T C3 01 00 00 5E F6 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 17 00 +T CB 01 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 17 00 02 09 02 00 +T D2 01 00 00 A4 3C 20 41 +R 00 00 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 20 00 +T DE 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 20 00 02 0A 02 00 +T E5 01 00 00 75 F4 DD 74 F5 7D B4 28 02 18 03 +R 00 00 01 00 +T F0 01 00 00 +R 00 00 01 00 +T F0 01 00 00 21 00 00 00 00 +R 00 00 01 00 00 05 02 00 +T F3 01 00 00 +R 00 00 01 00 +T F3 01 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 1E 00 +T F8 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 1E 00 2B 0A 1D 00 +T FE 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1D 00 02 09 02 00 +T 05 02 00 00 F1 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T 0D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T 12 02 00 00 00 00 00 00 C3 D9 02 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T 17 02 00 00 +R 00 00 01 00 +T 17 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0B 00 02 0B 0B 00 +T 1D 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1D 00 02 0B 1D 00 +T 23 02 00 00 CD 00 00 00 00 F1 F1 21 0D 00 DD +R 00 00 01 00 02 05 02 00 +T 2C 02 00 00 4E FC DD 46 FD 09 E5 01 +R 00 00 01 00 +T 34 02 00 00 01 00 00 00 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 00 04 02 00 +T 3D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 23 00 02 09 23 00 +T 42 02 00 00 00 00 00 00 DD 75 FE DD 74 FF 4D +R 00 00 01 00 02 04 02 00 +T 4B 02 00 00 44 E1 71 23 70 DD 6E F8 DD 66 F9 +R 00 00 01 00 +T 56 02 00 00 29 DD 5E 04 DD 56 05 19 5E 23 56 +R 00 00 01 00 +T 61 02 00 00 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 06 03 00 +T 66 02 00 00 00 00 00 00 E5 C5 3E 00 00 00 00 +R 00 00 01 00 02 04 03 00 2B 0B 0D 00 +T 6C 02 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0D 00 02 0A 02 00 +T 73 02 00 00 F1 F1 F1 21 40 00 ED 4B +R 00 00 01 00 +T 7B 02 00 00 00 00 00 00 09 5E 23 56 3E +R 00 00 01 00 02 04 0E 00 +T 82 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 87 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 89 02 00 00 +R 00 00 01 00 +T 89 02 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 91 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 02 00 +T 98 02 00 00 75 FA DD 74 FB 7D A4 3C 28 1B +R 00 00 01 00 +T A2 02 00 00 +R 00 00 01 00 +T A2 02 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 0E 00 +T AB 02 00 00 23 46 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T B4 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T B9 02 00 00 00 00 00 00 18 CC +R 00 00 01 00 02 04 02 00 +T BD 02 00 00 +R 00 00 01 00 +T BD 02 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 24 00 +T C5 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 24 00 02 0A 02 00 +T CC 02 00 00 0D 00 DD 4E FC DD 46 FD 09 AF 77 +R 00 00 01 00 +T D7 02 00 00 23 77 +R 00 00 01 00 +T D9 02 00 00 +R 00 00 01 00 +T D9 02 00 00 DD 34 F8 20 03 DD 34 F9 +R 00 00 01 00 +T E1 02 00 00 +R 00 00 01 00 +T E1 02 00 00 C3 7D 00 00 00 +R 00 00 01 00 00 05 01 00 +T E4 02 00 00 +R 00 00 01 00 +T E4 02 00 00 01 01 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 26 00 +T EC 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 26 00 02 0A 02 00 +T F3 02 00 00 5E FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 15 00 +T FB 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 15 00 02 09 02 00 +T 01 03 00 00 00 00 +R 00 00 01 00 +T 03 03 00 00 +R 00 00 01 00 +T 03 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 09 00 +T 06 03 00 00 +R 00 00 01 00 +T 06 03 00 00 CD 00 00 00 00 3E 03 AB B2 28 05 +R 00 00 01 00 02 05 13 00 +T 0F 03 00 00 +R 00 00 01 00 +T 0F 03 00 00 21 01 00 18 37 +R 00 00 01 00 +T 14 03 00 00 +R 00 00 01 00 +T 14 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1A 00 02 0B 1A 00 +T 1A 03 00 00 E5 21 1B 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 14 00 +T 23 03 00 00 5E 23 56 D5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0D 00 +T 2A 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 02 00 +T 31 03 00 00 F1 01 6B 00 21 07 00 ED 5B +R 00 00 01 00 +T 3A 03 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 14 00 +T 41 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 46 03 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 02 00 +T 4B 03 00 00 +R 00 00 01 00 +T 4B 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 09 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 +T 01 00 00 00 +R 00 00 02 00 +T 01 00 00 00 72 2B 74 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/getline.rel b/src/nos/lib/clients_lib/getline.rel new file mode 100644 index 00000000..930f5614 --- /dev/null +++ b/src/nos/lib/clients_lib/getline.rel @@ -0,0 +1,39 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _fgets Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4E flags 0 +S _getline Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 3E 00 00 00 00 +R 00 00 01 00 02 05 08 00 2B 0B 02 00 +T 06 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 0D 00 00 00 21 40 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 06 00 +T 16 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 1B 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 21 00 00 00 3E 00 09 4E 23 46 C5 DD 4E 0C DD +R 00 00 01 00 +T 2C 00 00 00 46 0D DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T 35 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 3A 00 00 00 00 00 00 00 F1 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 00 00 +T 43 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 49 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 03 00 diff --git a/src/nos/lib/clients_lib/getresp.rel b/src/nos/lib/clients_lib/getresp.rel new file mode 100644 index 00000000..9a795d5d --- /dev/null +++ b/src/nos/lib/clients_lib/getresp.rel @@ -0,0 +1,101 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0137_7643__25s_0a Ref00000000 +S _fflush Ref00000000 +S _rip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fgets Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D8 flags 0 +S _getresp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 66 03 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 6E 02 DD 66 03 4E 23 46 C5 01 +R 00 00 01 00 +T 21 00 00 00 00 01 21 13 01 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 2C 00 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 31 00 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 38 00 00 00 B4 20 0B +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 DD 36 FE FF DD 36 FF FF C3 +R 00 00 01 00 +T 44 00 00 00 CF 00 00 00 +R 00 00 01 00 00 04 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 21 13 01 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 51 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 57 00 00 00 00 00 00 00 21 13 01 09 EB 3E +R 00 00 01 00 02 04 00 00 +T 5F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 64 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 01 +R 00 00 01 00 02 04 00 00 +T 6D 00 00 00 90 81 3E 80 AC 67 ED 42 30 16 21 +R 00 00 01 00 +T 78 00 00 00 05 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T 83 00 00 00 66 68 01 02 00 A7 ED 42 38 1D +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 21 13 01 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 98 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 9E 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T A4 00 00 00 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 05 00 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 21 16 01 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T B5 00 00 00 FE 2D 28 13 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T C0 00 00 00 6E FE DD 66 FF CD 00 00 00 00 38 +R 00 00 01 00 02 0A 09 00 +T C9 00 00 00 02 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 18 03 +R 00 00 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 C3 16 00 00 00 +R 00 00 01 00 00 05 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 04 00 diff --git a/src/nos/lib/clients_lib/getsub.rel b/src/nos/lib/clients_lib/getsub.rel new file mode 100644 index 00000000..0fc7586c --- /dev/null +++ b/src/nos/lib/clients_lib/getsub.rel @@ -0,0 +1,614 @@ +XL4 +H 3 areas 1F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0137_7643__25s_0a Ref00000000 +S _socket Ref00000000 +S _listen Ref00000000 +S _recvfile Ref00000000 +S _getsockname Ref00000000 +S ___013e_43c6__25s_20_25s_3a_20Er Ref00000000 +S ___013c_518b__25s_20_25s_0a Ref00000000 +S __fprintf Ref00000000 +S _strcmp Ref00000000 +S ___013d_ca49__25s_20_25s_3a_20_2 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +S ___039f_a616_TYPE_20L_20_25d_0a Ref00000000 +S ___039e_3bb9_TYPE_20I_0a Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _msclock Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _sendport Ref00000000 +S ?UL_DIV_L03 Ref00000000 +S _accept Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _getresp Ref00000000 +S ___039d_f579_TYPE_20A_0a Ref00000000 +S _fdopen Ref00000000 +S _fclose Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 686 flags 0 +S _getsub Def00000000 +A CSTR size 13 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C2 FF AF DD 77 FA +R 00 00 01 00 02 05 10 00 +T 09 00 00 00 DD 77 FB DD 7E 02 DD B6 03 20 09 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 01 FF FF 21 FF FF C3 83 06 00 00 +R 00 00 01 00 00 0B 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 0D 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 28 00 00 00 16 00 DD 73 CE DD 72 CF 0A 6F 03 +R 00 00 01 00 +T 33 00 00 00 0A 67 DD 75 C6 DD 74 C7 21 00 00 +R 00 00 01 00 +T 3E 00 00 00 E5 01 00 00 11 00 00 3E +R 00 00 01 00 +T 46 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 4B 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 54 00 00 00 01 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 5B 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 61 00 00 00 0D 00 DD 4E 02 DD 46 03 09 7E FE +R 00 00 01 00 +T 6C 00 00 00 01 38 26 FE 03 30 22 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 DD 6E 02 DD 66 03 23 23 E5 01 +R 00 00 01 00 +T 7D 00 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 00 04 02 00 +T 86 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T 8B 00 00 00 00 00 00 00 4D 44 E1 71 23 70 18 +R 00 00 01 00 02 04 00 00 +T 94 00 00 00 26 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 FE 00 20 22 DD 6E 02 DD 66 03 23 +R 00 00 01 00 +T A0 00 00 00 23 E5 01 04 00 00 00 DD 5E FE DD +R 00 00 01 00 00 07 02 00 +T A9 00 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1B 00 +T AE 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 1B 00 02 09 00 00 +T B5 00 00 00 E1 71 23 70 18 00 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T C6 00 00 00 16 00 DD 73 FC DD 72 FD 21 04 00 +R 00 00 01 00 +T D1 00 00 00 09 36 02 01 08 00 00 00 DD 5E 04 +R 00 00 01 00 00 08 02 00 +T DA 00 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T E0 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T E7 00 00 00 28 15 01 0D 00 00 00 DD 5E 04 DD +R 00 00 01 00 00 07 02 00 +T F0 00 00 00 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T F5 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T FC 00 00 00 20 0C +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 21 0D 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 09 01 00 00 00 +R 00 00 01 00 +T 0A 01 00 00 +R 00 00 01 00 +T 0A 01 00 00 21 0D 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 15 01 00 00 21 0E 00 09 7E E1 BE CA +R 00 00 01 00 +T 1D 01 00 00 E6 01 00 00 +R 00 00 01 00 00 04 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 21 0D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 2A 01 00 00 FE 00 20 1B +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1A 00 02 0B 1A 00 +T 34 01 00 00 E5 DD 6E C6 DD 66 C7 E5 3E +R 00 00 01 00 +T 3D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 42 01 00 00 00 00 00 00 F1 F1 F1 18 4D +R 00 00 01 00 02 04 00 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 FE 01 20 1B 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 0F 00 +T 51 01 00 00 00 00 00 00 E5 DD 6E C6 DD 66 C7 +R 00 00 01 00 02 04 0F 00 +T 5A 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 60 01 00 00 CD 00 00 00 00 F1 F1 F1 18 2E +R 00 00 01 00 02 05 00 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 FE 02 20 2A 21 0F 00 DD 4E 02 DD +R 00 00 01 00 +T 73 01 00 00 46 03 09 4E 23 46 C5 0E +R 00 00 01 00 +T 7B 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0E 00 02 0A 0E 00 +T 81 01 00 00 DD 6E C6 DD 66 C7 E5 3E +R 00 00 01 00 +T 89 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 8E 01 00 00 00 00 00 00 F1 F1 F1 F1 18 00 +R 00 00 01 00 02 04 00 00 +T 96 01 00 00 +R 00 00 01 00 +T 96 01 00 00 21 0D 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T A1 01 00 00 21 0E 00 09 72 21 07 00 09 7E 23 +R 00 00 01 00 +T AC 01 00 00 B6 20 2F +R 00 00 01 00 +T AF 01 00 00 +R 00 00 01 00 +T AF 01 00 00 01 C8 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T B9 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T BE 01 00 00 00 00 00 00 DD 75 CA DD 74 CB 7D +R 00 00 01 00 02 04 00 00 +T C7 01 00 00 A4 3C 28 0E DD 4E CA DD 46 CB 21 +R 00 00 01 00 +T D2 01 00 00 2B 01 CD 00 00 00 00 30 03 +R 00 00 01 00 02 07 16 00 +T D9 01 00 00 +R 00 00 01 00 +T D9 01 00 00 +R 00 00 01 00 +T D9 01 00 00 +R 00 00 01 00 +T D9 01 00 00 C3 1B 06 00 00 +R 00 00 01 00 00 05 01 00 +T DC 01 00 00 +R 00 00 01 00 +T DC 01 00 00 18 08 +R 00 00 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 DD 36 FA 01 DD 36 FB 00 +R 00 00 01 00 +T E6 01 00 00 +R 00 00 01 00 +T E6 01 00 00 +R 00 00 01 00 +T E6 01 00 00 DD 36 CC 10 DD 36 CD 00 21 0A 00 +R 00 00 01 00 +T F1 01 00 00 39 E5 21 10 00 39 4D 44 DD 5E FE +R 00 00 01 00 +T FC 01 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T 02 02 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 09 02 00 00 36 CC 10 DD 36 CD 00 21 0A 00 39 +R 00 00 01 00 +T 14 02 00 00 E5 21 20 00 39 4D 44 DD 6E 02 DD +R 00 00 01 00 +T 1F 02 00 00 66 03 7E 23 B6 28 13 DD 6E 02 DD +R 00 00 01 00 +T 2A 02 00 00 66 03 56 23 66 6A 11 08 00 19 5E +R 00 00 01 00 +T 35 02 00 00 23 56 18 03 +R 00 00 01 00 +T 39 02 00 00 +R 00 00 01 00 +T 39 02 00 00 11 FF FF +R 00 00 01 00 +T 3C 02 00 00 +R 00 00 01 00 +T 3C 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 42 02 00 00 00 00 00 00 F1 21 22 00 39 5E 23 +R 00 00 01 00 02 04 00 00 +T 4B 02 00 00 56 23 4E 23 46 EB DD 75 D4 DD 74 +R 00 00 01 00 +T 56 02 00 00 D5 DD 71 D6 DD 70 D7 21 0E 00 39 +R 00 00 01 00 +T 61 02 00 00 4D 44 DD 5E C6 DD 56 C7 3E +R 00 00 01 00 +T 6A 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 6F 02 00 00 00 00 00 00 21 07 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 78 02 00 00 46 03 09 7E 23 B6 20 2D +R 00 00 01 00 +T 80 02 00 00 +R 00 00 01 00 +T 80 02 00 00 01 C8 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 8A 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T 8F 02 00 00 00 00 00 00 DD 75 CA DD 74 CB 7D +R 00 00 01 00 02 04 00 00 +T 98 02 00 00 A4 3C 28 0E DD 4E CA DD 46 CB 21 +R 00 00 01 00 +T A3 02 00 00 2B 01 CD 00 00 00 00 30 03 +R 00 00 01 00 02 07 16 00 +T AA 02 00 00 +R 00 00 01 00 +T AA 02 00 00 +R 00 00 01 00 +T AA 02 00 00 +R 00 00 01 00 +T AA 02 00 00 C3 1B 06 00 00 +R 00 00 01 00 00 05 01 00 +T AD 02 00 00 +R 00 00 01 00 +T AD 02 00 00 +R 00 00 01 00 +T AD 02 00 00 DD 7E 0A DD B6 0B 28 2B +R 00 00 01 00 +T B5 02 00 00 +R 00 00 01 00 +T B5 02 00 00 DD 6E 0A DD 66 0B E5 DD 6E 04 DD +R 00 00 01 00 +T C0 02 00 00 66 05 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 07 00 +T C7 02 00 00 00 00 00 00 E5 DD 6E C6 DD 66 C7 +R 00 00 01 00 02 04 07 00 +T D0 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T D6 02 00 00 CD 00 00 00 00 F1 F1 F1 F1 F1 18 +R 00 00 01 00 02 05 00 00 +T DF 02 00 00 21 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T E8 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 01 00 02 0A 01 00 +T EE 02 00 00 DD 6E C6 DD 66 C7 E5 3E +R 00 00 01 00 +T F6 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T FB 02 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 01 03 00 00 +R 00 00 01 00 +T 01 03 00 00 21 07 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 0C 03 00 00 23 B6 28 62 +R 00 00 01 00 +T 10 03 00 00 +R 00 00 01 00 +T 10 03 00 00 DD 7E FA DD B6 FB 28 2D +R 00 00 01 00 +T 18 03 00 00 +R 00 00 01 00 +T 18 03 00 00 01 C8 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 22 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T 27 03 00 00 00 00 00 00 DD 75 CA DD 74 CB 7D +R 00 00 01 00 02 04 00 00 +T 30 03 00 00 A4 3C 28 0E DD 4E CA DD 46 CB 21 +R 00 00 01 00 +T 3B 03 00 00 2B 01 CD 00 00 00 00 30 03 +R 00 00 01 00 02 07 16 00 +T 42 03 00 00 +R 00 00 01 00 +T 42 03 00 00 +R 00 00 01 00 +T 42 03 00 00 +R 00 00 01 00 +T 42 03 00 00 C3 1B 06 00 00 +R 00 00 01 00 00 05 01 00 +T 45 03 00 00 +R 00 00 01 00 +T 45 03 00 00 +R 00 00 01 00 +T 45 03 00 00 01 C8 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 4F 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T 54 03 00 00 00 00 00 00 DD 75 CA DD 74 CB 7D +R 00 00 01 00 02 04 00 00 +T 5D 03 00 00 A4 3C 28 0E DD 4E CA DD 46 CB 21 +R 00 00 01 00 +T 68 03 00 00 2B 01 CD 00 00 00 00 30 03 +R 00 00 01 00 02 07 16 00 +T 6F 03 00 00 +R 00 00 01 00 +T 6F 03 00 00 +R 00 00 01 00 +T 6F 03 00 00 +R 00 00 01 00 +T 6F 03 00 00 C3 1B 06 00 00 +R 00 00 01 00 00 05 01 00 +T 72 03 00 00 +R 00 00 01 00 +T 72 03 00 00 +R 00 00 01 00 +T 72 03 00 00 01 64 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 7C 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T 81 03 00 00 00 00 00 00 DD 75 CA DD 74 CB 7D +R 00 00 01 00 02 04 00 00 +T 8A 03 00 00 A4 3C 28 11 01 90 81 DD 6E CA DD +R 00 00 01 00 +T 95 03 00 00 66 CB 3E 80 AC 67 ED 42 38 03 +R 00 00 01 00 +T 9F 03 00 00 +R 00 00 01 00 +T 9F 03 00 00 +R 00 00 01 00 +T 9F 03 00 00 +R 00 00 01 00 +T 9F 03 00 00 C3 1B 06 00 00 +R 00 00 01 00 00 05 01 00 +T A2 03 00 00 +R 00 00 01 00 +T A2 03 00 00 AF DD 77 C8 DD 77 C9 21 06 00 39 +R 00 00 01 00 +T AD 03 00 00 E5 01 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T B8 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T BD 03 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T C6 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 11 00 02 0A 11 00 +T CC 03 00 00 00 00 00 00 DD 75 F0 DD 74 F1 DD +R 00 00 01 00 02 04 00 00 +T D5 03 00 00 71 F2 DD 70 F3 21 05 00 DD 4E 02 +R 00 00 01 00 +T E0 03 00 00 DD 46 03 09 46 23 66 68 DD 75 F8 +R 00 00 01 00 +T EB 03 00 00 DD 74 F9 01 03 80 3E 80 AC 67 ED +R 00 00 01 00 +T F6 03 00 00 42 38 17 DD 7E 0C DD B6 0D 20 0F +R 00 00 01 00 +T 01 04 00 00 +R 00 00 01 00 +T 01 04 00 00 +R 00 00 01 00 +T 01 04 00 00 +R 00 00 01 00 +T 01 04 00 00 21 05 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 0C 04 00 00 02 23 36 00 +R 00 00 01 00 +T 10 04 00 00 +R 00 00 01 00 +T 10 04 00 00 21 05 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1B 04 00 00 D5 21 0D 00 09 5E D5 03 03 69 60 +R 00 00 01 00 +T 26 04 00 00 4E 23 46 DD 5E 0C DD 56 0D 3E +R 00 00 01 00 +T 30 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 35 04 00 00 00 00 00 00 F1 F1 DD 75 C2 DD 74 +R 00 00 01 00 02 04 00 00 +T 3E 04 00 00 C3 DD 71 C4 DD 70 C5 DD 6E 02 DD +R 00 00 01 00 +T 49 04 00 00 66 03 23 23 5E 23 56 3E +R 00 00 01 00 +T 51 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1C 00 02 09 1C 00 +T 56 04 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 00 00 +T 5F 04 00 00 23 AF 77 23 77 DD 7E 0A DD B6 0B +R 00 00 01 00 +T 6A 04 00 00 20 08 +R 00 00 01 00 +T 6C 04 00 00 +R 00 00 01 00 +T 6C 04 00 00 DD 36 0A 12 00 00 00 DD 36 0B +R 00 00 01 00 09 07 02 00 +T 73 04 00 00 12 00 00 00 +R 00 00 01 00 89 04 02 00 +T 74 04 00 00 +R 00 00 01 00 +T 74 04 00 00 DD 7E C2 DD A6 C3 DD A6 C4 DD A6 +R 00 00 01 00 +T 7F 04 00 00 C5 3C 20 24 +R 00 00 01 00 +T 83 04 00 00 +R 00 00 01 00 +T 83 04 00 00 DD 6E 0A DD 66 0B E5 DD 6E 04 DD +R 00 00 01 00 +T 8E 04 00 00 66 05 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 06 00 +T 95 04 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 2B 0A 17 00 +T 9B 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 17 00 02 09 00 00 +T A2 04 00 00 F1 F1 C3 D9 05 00 00 +R 00 00 01 00 00 07 01 00 +T A7 04 00 00 +R 00 00 01 00 +T A7 04 00 00 21 05 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T B2 04 00 00 23 66 68 01 01 00 A7 ED 42 DA +R 00 00 01 00 +T BC 04 00 00 D9 05 00 00 +R 00 00 01 00 00 04 01 00 +T BE 04 00 00 +R 00 00 01 00 +T BE 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 11 00 02 0A 11 00 +T C4 04 00 00 00 00 00 00 59 50 A7 DD 4E F0 DD +R 00 00 01 00 02 04 00 00 +T CD 04 00 00 46 F1 ED 42 EB DD 4E F2 DD 46 F3 +R 00 00 01 00 +T D8 04 00 00 ED 42 4D 44 EB DD 75 F0 DD 74 F1 +R 00 00 01 00 +T E3 04 00 00 DD 71 F2 DD 70 F3 AF DD 77 F4 DD +R 00 00 01 00 +T EE 04 00 00 77 F5 DD 77 F6 DD 77 F7 7D B4 B1 +R 00 00 01 00 +T F9 04 00 00 B0 CA 80 05 00 00 +R 00 00 01 00 00 06 01 00 +T FD 04 00 00 +R 00 00 01 00 +T FD 04 00 00 A7 DD 6E C2 DD 66 C3 01 37 89 ED +R 00 00 01 00 +T 08 05 00 00 42 DD 6E C4 DD 66 C5 01 41 00 ED +R 00 00 01 00 +T 13 05 00 00 42 30 36 +R 00 00 01 00 +T 16 05 00 00 +R 00 00 01 00 +T 16 05 00 00 DD 6E F2 DD 66 F3 E5 DD 6E F0 DD +R 00 00 01 00 +T 21 05 00 00 66 F1 E5 21 00 00 E5 21 E8 03 E5 +R 00 00 01 00 +T 2C 05 00 00 DD 4E C4 DD 46 C5 DD 6E C2 DD 66 +R 00 00 01 00 +T 37 05 00 00 C3 CD 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 06 0D 00 02 0B 14 00 +T 3E 05 00 00 DD 75 F4 DD 74 F5 DD 71 F6 DD 70 +R 00 00 01 00 +T 49 05 00 00 F7 18 34 +R 00 00 01 00 +T 4C 05 00 00 +R 00 00 01 00 +T 4C 05 00 00 21 00 00 E5 21 E8 03 E5 DD 4E F2 +R 00 00 01 00 +T 57 05 00 00 DD 46 F3 DD 6E F0 DD 66 F1 CD +R 00 00 01 00 +T 61 05 00 00 00 00 00 00 C5 E5 DD 4E C4 DD 46 +R 00 00 01 00 02 04 12 00 +T 6A 05 00 00 C5 DD 6E C2 DD 66 C3 CD +R 00 00 01 00 +T 72 05 00 00 00 00 00 00 DD 75 F4 DD 74 F5 DD +R 00 00 01 00 02 04 14 00 +T 7B 05 00 00 71 F6 DD 70 F7 +R 00 00 01 00 +T 80 05 00 00 +R 00 00 01 00 +T 80 05 00 00 +R 00 00 01 00 +T 80 05 00 00 DD 6E F6 DD 66 F7 E5 DD 6E F4 DD +R 00 00 01 00 +T 8B 05 00 00 66 F5 E5 21 00 00 E5 21 E8 03 E5 +R 00 00 01 00 +T 96 05 00 00 DD 4E F2 DD 46 F3 DD 6E F0 DD 66 +R 00 00 01 00 +T A1 05 00 00 F1 CD 00 00 00 00 C5 E5 DD 6E C4 +R 00 00 01 00 02 06 12 00 +T AA 05 00 00 DD 66 C5 E5 DD 6E C2 DD 66 C3 E5 +R 00 00 01 00 +T B5 05 00 00 DD 6E 0A DD 66 0B E5 DD 6E 04 DD +R 00 00 01 00 +T C0 05 00 00 66 05 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0A 00 +T C7 05 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 0A 17 00 +T CD 05 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 17 00 02 09 00 00 +T D4 05 00 00 14 00 39 F9 EB +R 00 00 01 00 +T D9 05 00 00 +R 00 00 01 00 +T D9 05 00 00 +R 00 00 01 00 +T D9 05 00 00 01 C8 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T E3 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T E8 05 00 00 00 00 00 00 21 04 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T F1 05 00 00 46 03 09 DD 56 FC 72 21 05 00 09 +R 00 00 01 00 +T FC 05 00 00 DD 5E F8 DD 56 F9 73 23 72 21 +R 00 00 01 00 +T 06 06 00 00 0D 00 09 DD 46 CE 70 DD 4E C4 DD +R 00 00 01 00 +T 11 06 00 00 46 C5 DD 6E C2 DD 66 C3 18 68 +R 00 00 01 00 +T 1B 06 00 00 +R 00 00 01 00 +T 1B 06 00 00 DD 7E 0C DD B6 0D 28 25 21 40 00 +R 00 00 01 00 +T 26 06 00 00 ED 4B 00 00 00 00 09 46 23 66 68 +R 00 00 01 00 02 06 0B 00 +T 2F 06 00 00 DD 4E 0C DD 46 0D A7 ED 42 28 0E +R 00 00 01 00 +T 3A 06 00 00 +R 00 00 01 00 +T 3A 06 00 00 +R 00 00 01 00 +T 3A 06 00 00 +R 00 00 01 00 +T 3A 06 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1C 00 +T 42 06 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 1C 00 02 0A 00 00 +T 48 06 00 00 +R 00 00 01 00 +T 48 06 00 00 DD 6E 02 DD 66 03 23 23 5E 23 56 +R 00 00 01 00 +T 53 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1C 00 02 0A 1C 00 +T 59 06 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 00 00 +T 62 06 00 00 23 AF 77 23 77 21 04 00 DD 4E 02 +R 00 00 01 00 +T 6D 06 00 00 DD 46 03 09 DD 56 FC 72 21 0D 00 +R 00 00 01 00 +T 78 06 00 00 09 DD 46 CE 70 01 FF FF 21 FF FF +R 00 00 01 00 +T 83 06 00 00 +R 00 00 01 00 +T 83 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1D 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 2B 62 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 72 2B 74 00 +R 00 00 02 00 +T 08 00 00 00 +R 00 00 02 00 +T 08 00 00 00 4C 49 53 54 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 4E 4C 53 54 00 +R 00 00 02 00 +T 12 00 00 00 +R 00 00 02 00 +T 12 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/keychar.rel b/src/nos/lib/clients_lib/keychar.rel new file mode 100644 index 00000000..ae25b856 --- /dev/null +++ b/src/nos/lib/clients_lib/keychar.rel @@ -0,0 +1,103 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alert Ref00000000 +S __fprintf Ref00000000 +S .__.ABS. Def00000000 +S _Current Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___03f1_699f__5eC_0a Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _shutdown Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F3 flags 0 +S _keychar Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 3E 03 DD AE +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 02 DD B6 03 28 06 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 21 01 00 C3 F0 00 00 00 +R 00 00 01 00 00 08 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 07 00 02 0B 07 00 +T 1B 00 00 00 E5 21 1B 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 05 00 +T 24 00 00 00 5E 23 56 D5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 2B 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 32 00 00 00 F1 21 05 00 09 46 23 66 68 DD 75 +R 00 00 01 00 +T 3D 00 00 00 FE DD 74 FF 01 04 00 09 7E FE 00 +R 00 00 01 00 +T 48 00 00 00 20 19 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 01 6B 00 21 07 00 ED 5B +R 00 00 01 00 +T 52 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 05 00 +T 59 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 5E 00 00 00 00 00 00 00 C3 ED 00 00 00 +R 00 00 01 00 02 04 00 00 00 09 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 FE 01 20 41 01 01 00 DD 6E FE DD +R 00 00 01 00 +T 6E 00 00 00 66 FF 23 23 7E 23 B6 28 15 DD 6E +R 00 00 01 00 +T 79 00 00 00 FE DD 66 FF 23 23 56 23 66 6A 11 +R 00 00 01 00 +T 84 00 00 00 08 00 19 5E 23 56 18 03 +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 11 FF FF +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 95 00 00 00 00 00 00 00 21 09 00 DD 4E FE DD +R 00 00 01 00 02 04 00 00 +T 9E 00 00 00 46 FF 09 36 01 23 36 00 18 45 +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 FE 02 20 41 01 02 00 DD 6E FE DD +R 00 00 01 00 +T B3 00 00 00 66 FF 23 23 7E 23 B6 28 15 DD 6E +R 00 00 01 00 +T BE 00 00 00 FE DD 66 FF 23 23 56 23 66 6A 11 +R 00 00 01 00 +T C9 00 00 00 08 00 19 5E 23 56 18 03 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 11 FF FF +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T DA 00 00 00 00 00 00 00 21 09 00 DD 4E FE DD +R 00 00 01 00 02 04 00 00 +T E3 00 00 00 46 FF 09 36 01 23 36 00 18 00 +R 00 00 01 00 +T ED 00 00 00 +R 00 00 01 00 +T ED 00 00 00 21 00 00 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/clients_lib/lterm.rel b/src/nos/lib/clients_lib/lterm.rel new file mode 100644 index 00000000..91479f3e --- /dev/null +++ b/src/nos/lib/clients_lib/lterm.rel @@ -0,0 +1,435 @@ +XL4 +H 3 areas 2A global symbols +S _resolve Ref00000000 +S ___03b3_2057_Too_20many_20sessio Ref00000000 +S _suspend Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Badhost Ref00000000 +S _secclock Ref00000000 +S _if_lookup Ref00000000 +S _fflush Ref00000000 +S _socket Ref00000000 +S _fgetc Ref00000000 +S ___02a9_6e91_Interface_20_25s_20 Ref00000000 +S _newsession Ref00000000 +S _resume Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _asy_write Ref00000000 +S _perror Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _killproc Ref00000000 +S _settos Ref00000000 +S _fputc Ref00000000 +S ___05b8_004c_tip_20or_20dialer_2 Ref00000000 +S _freesession Ref00000000 +S _connect Ref00000000 +S ___0202_ef8c_Can_27t_20create_20 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _get_asy Ref00000000 +S _atoi Ref00000000 +S _Asy Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fdopen Ref00000000 +S ___02a7_63a0_Interface_20_25s_20 Ref00000000 +S _Cmdline Ref00000000 +S _bitbucket Ref00000000 +S _newproc Ref00000000 +S _keywait Ref00000000 +S _setvbuf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 49E flags 0 +S _dolterm Def00000000 +A CSTR size 19 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF AF DD 77 E0 +R 00 00 01 00 02 05 1A 00 +T 09 00 00 00 DD 77 E1 03 03 0A 5F 03 0A 57 3E +R 00 00 01 00 +T 14 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 19 00 00 00 00 00 00 00 DD 75 E2 DD 74 E3 7D +R 00 00 01 00 02 04 03 00 +T 22 00 00 00 B4 20 24 +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 30 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 0A 00 +T 35 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 0A 20 00 +T 3B 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 20 00 02 09 03 00 +T 42 00 00 00 F1 21 01 00 C3 11 04 00 00 +R 00 00 01 00 00 09 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 21 2C 00 DD 4E E2 DD 46 E3 09 46 +R 00 00 01 00 +T 54 00 00 00 23 66 68 01 02 80 3E 80 AC 67 ED +R 00 00 01 00 +T 5F 00 00 00 42 30 26 21 2C 00 DD 4E E2 DD 46 +R 00 00 01 00 +T 6A 00 00 00 E3 09 5E 23 56 01 59 00 CD +R 00 00 01 00 +T 73 00 00 00 00 00 00 00 21 00 00 00 00 19 46 +R 00 00 01 00 02 04 1B 00 02 09 1E 00 +T 7A 00 00 00 23 66 68 DD 4E E2 DD 46 E3 A7 ED +R 00 00 01 00 +T 85 00 00 00 42 28 24 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 93 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 23 00 +T 98 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 23 00 2B 0A 20 00 +T 9E 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 20 00 02 09 03 00 +T A5 00 00 00 F1 21 01 00 C3 11 04 00 00 +R 00 00 01 00 00 09 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 21 45 00 DD 4E E2 DD 46 E3 09 4E +R 00 00 01 00 +T B7 00 00 00 23 46 23 7E 69 60 0E 00 00 00 00 +R 00 00 01 00 2B 0B 25 00 +T BF 00 00 00 11 00 00 00 00 B9 20 28 ED 52 20 +R 00 00 01 00 02 05 25 00 +T C8 00 00 00 24 +R 00 00 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T D4 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 16 00 +T D9 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 16 00 2B 0A 20 00 +T DF 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 20 00 02 09 03 00 +T E6 00 00 00 F1 21 01 00 C3 11 04 00 00 +R 00 00 01 00 00 09 01 00 +T ED 00 00 00 +R 00 00 01 00 +T ED 00 00 00 AF DD 77 E9 DD 77 EA 21 04 00 DD +R 00 00 01 00 +T F8 00 00 00 4E 04 DD 46 05 09 5E 23 56 3E +R 00 00 01 00 +T 02 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 07 01 00 00 00 00 00 00 DD 75 ED DD 74 EE DD +R 00 00 01 00 02 04 03 00 +T 10 01 00 00 71 EF DD 70 F0 7D B4 B1 B0 20 3E +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 26 01 00 00 23 46 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 08 04 00 +T 2E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 33 01 00 00 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 04 03 00 +T 3B 01 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 27 00 +T 40 01 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 27 00 02 09 03 00 +T 47 01 00 00 F9 DD 56 FA 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 17 00 +T 4E 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 17 00 02 09 03 00 +T 54 01 00 00 01 00 C3 11 04 00 00 +R 00 00 01 00 00 07 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 DD 4E 02 DD 46 03 21 03 00 CD +R 00 00 01 00 +T 63 01 00 00 00 00 00 00 30 1D +R 00 00 01 00 02 04 1F 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 21 06 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 72 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1D 00 +T 77 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1D 00 02 09 03 00 +T 7E 01 00 00 EB DD 74 EC 18 08 +R 00 00 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 DD 36 EB 17 DD 36 EC 00 +R 00 00 01 00 +T 8C 01 00 00 +R 00 00 01 00 +T 8C 01 00 00 21 01 00 E5 01 09 00 ED 5B +R 00 00 01 00 +T 95 01 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 24 00 2B 09 0B 00 +T 9A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0B 00 02 09 03 00 +T A1 01 00 00 75 F9 DD 74 FA 7D B4 20 17 +R 00 00 01 00 +T AA 01 00 00 +R 00 00 01 00 +T AA 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T B0 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 20 00 02 0B 20 00 +T B6 01 00 00 CD 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 05 03 00 +T BF 01 00 00 11 04 00 00 +R 00 00 01 00 00 04 01 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 21 45 00 DD 4E E2 DD 46 E3 09 4E +R 00 00 01 00 +T CC 01 00 00 23 46 23 56 69 60 DD 75 E4 DD 74 +R 00 00 01 00 +T D7 01 00 00 E5 DD 72 E6 21 45 00 DD 4E E2 DD +R 00 00 01 00 +T E2 01 00 00 46 E3 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 08 25 00 +T E9 01 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 25 00 2B 0A 25 00 +T EE 01 00 00 18 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T F6 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 02 00 02 0A 03 00 +T FD 01 00 00 2C 00 09 5E 23 56 01 59 00 CD +R 00 00 01 00 +T 07 02 00 00 00 00 00 00 21 12 00 00 00 19 46 +R 00 00 01 00 02 04 1B 00 02 09 1E 00 +T 0E 02 00 00 23 66 68 DD 75 FD DD 74 FE 21 +R 00 00 01 00 +T 18 02 00 00 2C 00 DD 4E E2 DD 46 E3 09 4E 23 +R 00 00 01 00 +T 23 02 00 00 46 11 59 00 CD 00 00 00 00 21 +R 00 00 01 00 02 09 1B 00 +T 2B 02 00 00 12 00 00 00 19 36 FF 23 36 FF 21 +R 00 00 01 00 02 04 1E 00 +T 34 02 00 00 00 00 E5 01 00 00 11 00 00 3E +R 00 00 01 00 +T 3E 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 43 02 00 00 00 00 00 00 F1 DD 75 E7 DD 74 E8 +R 00 00 01 00 02 04 03 00 +T 4C 02 00 00 7D A4 3C 20 30 +R 00 00 01 00 +T 51 02 00 00 +R 00 00 01 00 +T 51 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 19 00 02 0B 19 00 +T 57 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 20 00 02 0B 20 00 +T 5D 02 00 00 CD 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 05 03 00 +T 66 02 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 27 00 +T 6B 02 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 27 00 02 09 03 00 +T 72 02 00 00 F9 DD 56 FA 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 17 00 +T 79 02 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 17 00 02 09 03 00 +T 7F 02 00 00 AE 03 00 00 +R 00 00 01 00 00 04 01 00 +T 81 02 00 00 +R 00 00 01 00 +T 81 02 00 00 01 10 00 DD 5E E7 DD 56 E8 3E +R 00 00 01 00 +T 8B 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T 90 02 00 00 00 00 00 00 01 00 00 00 00 DD 5E +R 00 00 01 00 02 04 03 00 00 09 02 00 +T 97 02 00 00 E7 DD 56 E8 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 22 00 +T 9E 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 22 00 02 09 03 00 +T A5 02 00 00 E0 DD 74 E1 01 00 00 C5 01 03 00 +R 00 00 01 00 +T B0 02 00 00 C5 01 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 28 00 +T B8 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 28 00 02 09 03 00 +T BF 02 00 00 21 10 00 E5 21 0B 00 39 4D 44 DD +R 00 00 01 00 +T CA 02 00 00 5E E7 DD 56 E8 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 18 00 +T D2 02 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 18 00 02 09 03 00 +T D9 02 00 00 A4 3C 20 2A +R 00 00 01 00 +T DD 02 00 00 +R 00 00 01 00 +T DD 02 00 00 11 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 10 00 +T E3 02 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 10 00 02 09 03 00 +T E9 02 00 00 01 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 27 00 +T F1 02 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 27 00 02 09 03 00 +T F8 02 00 00 F9 DD 56 FA 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 17 00 +T FF 02 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 17 00 02 09 03 00 +T 05 03 00 00 AE 03 00 00 +R 00 00 01 00 00 04 01 00 +T 07 03 00 00 +R 00 00 01 00 +T 07 03 00 00 21 09 00 DD 4E F9 DD 46 FA 09 E5 +R 00 00 01 00 +T 12 03 00 00 01 00 00 C5 01 00 00 C5 DD 4E E0 +R 00 00 01 00 +T 1D 03 00 00 DD 46 E1 C5 21 2C 00 DD 4E E2 DD +R 00 00 01 00 +T 28 03 00 00 46 E3 09 4E 23 46 C5 0E +R 00 00 01 00 +T 30 03 00 00 14 04 00 00 C5 21 14 04 00 00 E5 +R 00 00 01 00 29 04 01 00 00 0A 01 00 +T 36 03 00 00 01 00 02 11 13 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T 3D 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 26 00 02 09 26 00 +T 42 03 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 03 00 +T 4B 03 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 +T 51 03 00 00 +R 00 00 01 00 +T 51 03 00 00 21 2C 00 DD 4E E2 DD 46 E3 09 5E +R 00 00 01 00 +T 5C 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1C 00 +T 61 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1C 00 02 09 03 00 +T 68 03 00 00 FB DD 74 FC 7D A4 3C 28 3D +R 00 00 01 00 +T 71 03 00 00 +R 00 00 01 00 +T 71 03 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 11 00 +T 7A 03 00 00 23 46 DD 5E FB DD 56 FC 3E +R 00 00 01 00 +T 83 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 88 03 00 00 00 00 00 00 DD 4E E0 DD 46 E1 DD +R 00 00 01 00 02 04 03 00 +T 91 03 00 00 5E FB DD 56 FC 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 15 00 +T 99 03 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 15 00 02 09 03 00 +T A0 03 00 00 E0 DD 56 E1 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T A7 03 00 00 00 00 00 00 CD 00 00 00 00 18 A3 +R 00 00 01 00 02 04 07 00 02 09 03 00 +T AE 03 00 00 +R 00 00 01 00 +T AE 03 00 00 +R 00 00 01 00 +T AE 03 00 00 21 09 00 DD 4E F9 DD 46 FA 09 5E +R 00 00 01 00 +T B9 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 13 00 +T BE 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 13 00 02 09 03 00 +T C4 03 00 00 09 00 09 AF 77 23 77 21 45 00 DD +R 00 00 01 00 +T CF 03 00 00 5E E2 DD 56 E3 19 DD 7E E6 DD 4E +R 00 00 01 00 +T DA 03 00 00 E4 DD 46 E5 71 23 70 23 77 21 +R 00 00 01 00 +T E4 03 00 00 18 00 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T EC 03 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 0C 00 02 0A 03 00 +T F3 03 00 00 01 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 27 00 +T FB 03 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 27 00 02 09 03 00 +T 02 04 00 00 F9 DD 56 FA 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 17 00 +T 09 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 17 00 02 09 03 00 +T 0F 04 00 00 00 00 +R 00 00 01 00 +T 11 04 00 00 +R 00 00 01 00 +T 11 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 14 04 00 00 +R 00 00 01 00 +T 14 04 00 00 CD 00 00 00 00 FA FF DD 71 FD DD +R 00 00 01 00 02 05 1A 00 +T 1D 04 00 00 70 FE +R 00 00 01 00 +T 1F 04 00 00 +R 00 00 01 00 +T 1F 04 00 00 DD 5E FD DD 56 FE 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 27 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 03 00 +T 2E 04 00 00 75 FA DD 74 FB 7D A4 3C 28 63 +R 00 00 01 00 +T 38 04 00 00 +R 00 00 01 00 +T 38 04 00 00 DD 46 FA DD 70 FC 21 40 00 ED 5B +R 00 00 01 00 +T 43 04 00 00 00 00 00 00 19 4E 23 46 DD 5E FC +R 00 00 01 00 02 04 11 00 +T 4C 04 00 00 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 15 00 +T 51 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 15 00 02 09 03 00 +T 57 04 00 00 01 00 E5 21 04 00 39 4D 44 DD 5E +R 00 00 01 00 +T 62 04 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0F 00 +T 69 04 00 00 00 00 00 00 CD 00 00 00 00 F1 01 +R 00 00 01 00 02 04 0F 00 02 09 03 00 +T 70 04 00 00 59 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 79 04 00 00 00 00 00 00 21 00 00 00 00 19 46 +R 00 00 01 00 02 04 1B 00 02 09 1E 00 +T 80 04 00 00 23 66 68 01 61 00 09 E5 3E +R 00 00 01 00 +T 89 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 8E 04 00 00 00 00 00 00 EB E1 73 23 72 23 71 +R 00 00 01 00 02 04 03 00 +T 97 04 00 00 23 70 18 84 +R 00 00 01 00 +T 9B 04 00 00 +R 00 00 01 00 +T 9B 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 2B 62 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 63 6F 6E 6E 65 63 74 20 66 61 69 +R 00 00 02 00 +T 0F 00 00 00 6C 65 64 00 +R 00 00 02 00 +T 13 00 00 00 +R 00 00 02 00 +T 13 00 00 00 6C 74 65 72 6D 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/putsub.rel b/src/nos/lib/clients_lib/putsub.rel new file mode 100644 index 00000000..938987f6 --- /dev/null +++ b/src/nos/lib/clients_lib/putsub.rel @@ -0,0 +1,569 @@ +XL4 +H 3 areas 24 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strerror Ref00000000 +S ___0379_38ea_STOR_20_25s_3a_20_2 Ref00000000 +S _fflush Ref00000000 +S _socket Ref00000000 +S _sendfile Ref00000000 +S ___037a_12cc_STOR_20_25s_3a_20Er Ref00000000 +S _listen Ref00000000 +S _getsockname Ref00000000 +S __fprintf Ref00000000 +S ___03df_4457_Warning_3a_20type_2 Ref00000000 +S .__.ABS. Def00000000 +S _isbinary Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _errno Ref00000000 +S ___039f_a616_TYPE_20L_20_25d_0a Ref00000000 +S ___020e_4a10_Can_27t_20read_20_2 Ref00000000 +S ___039e_3bb9_TYPE_20I_0a Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _msclock Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _sendport Ref00000000 +S _freopen Ref00000000 +S ?UL_DIV_L03 Ref00000000 +S _accept Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0378_49fd_STOR_20_25s_0a Ref00000000 +S _getresp Ref00000000 +S ___039d_f579_TYPE_20A_0a Ref00000000 +S _shutdown Ref00000000 +S _fdopen Ref00000000 +S _fclose Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 621 flags 0 +S _putsub Def00000000 +A CSTR size 5 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C4 FF AF DD 77 FC +R 00 00 01 00 02 05 12 00 +T 09 00 00 00 DD 77 FD DD 6E 02 DD 66 03 56 23 +R 00 00 01 00 +T 14 00 00 00 66 6A DD 75 D2 DD 74 D3 21 0D 00 +R 00 00 01 00 +T 1F 00 00 00 DD 5E 02 DD 56 03 19 56 15 20 0A +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 36 C4 00 00 00 00 DD 36 C5 +R 00 00 01 00 09 07 02 00 +T 31 00 00 00 00 00 00 00 18 08 +R 00 00 01 00 89 04 02 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 36 C4 00 00 00 00 DD 36 C5 +R 00 00 01 00 09 07 02 00 +T 3B 00 00 00 00 00 00 00 +R 00 00 01 00 89 04 02 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 21 00 00 E5 DD 4E C4 DD 46 C5 DD +R 00 00 01 00 +T 47 00 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 16 00 +T 4F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 16 00 02 09 00 00 +T 56 00 00 00 75 D0 DD 74 D1 7D B4 20 30 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 0E 00 2B 0B 01 00 +T 65 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 6C 00 00 00 DD 6E 0A DD 66 0B E5 0E +R 00 00 01 00 +T 74 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 10 00 02 0A 10 00 +T 7A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T 80 00 00 00 00 00 00 00 F1 F1 F1 F1 01 FF FF +R 00 00 01 00 02 04 00 00 +T 89 00 00 00 21 FF FF C3 1E 06 00 00 +R 00 00 01 00 00 08 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 21 0D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 9A 00 00 00 B7 20 2B DD 5E D0 DD 56 D1 3E +R 00 00 01 00 +T A4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T A9 00 00 00 00 00 00 00 7D B4 28 19 +R 00 00 01 00 02 04 00 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 DD 6E 0A DD 66 0B E5 0E +R 00 00 01 00 +T B7 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0A 00 02 0A 0A 00 +T BD 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T C3 00 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 21 00 00 E5 01 00 00 11 00 00 3E +R 00 00 01 00 +T D3 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T D8 00 00 00 00 00 00 00 F1 DD 75 CA DD 74 CB +R 00 00 01 00 02 04 00 00 +T E1 00 00 00 DD 6E 02 DD 66 03 23 23 E5 01 +R 00 00 01 00 +T EB 00 00 00 02 00 00 00 DD 5E CA DD 56 CB 3E +R 00 00 01 00 00 04 02 00 +T F4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 20 00 02 09 20 00 +T F9 00 00 00 00 00 00 00 4D 44 E1 71 23 70 01 +R 00 00 01 00 02 04 00 00 +T 02 01 00 00 00 00 DD 5E CA DD 56 CB 3E +R 00 00 01 00 +T 0B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 10 01 00 00 00 00 00 00 21 04 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 19 01 00 00 46 03 09 5E 16 00 DD 73 FE DD 72 +R 00 00 01 00 +T 24 01 00 00 FF 21 04 00 09 36 01 21 0D 00 09 +R 00 00 01 00 +T 2F 01 00 00 E5 21 0E 00 09 7E E1 BE CA +R 00 00 01 00 +T 38 01 00 00 01 02 00 00 +R 00 00 01 00 00 04 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 21 0D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 45 01 00 00 FE 00 20 1B +R 00 00 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1E 00 02 0B 1E 00 +T 4F 01 00 00 E5 DD 6E D2 DD 66 D3 E5 3E +R 00 00 01 00 +T 58 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 5D 01 00 00 00 00 00 00 F1 F1 F1 18 4D +R 00 00 01 00 02 04 00 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 FE 01 20 1B 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 11 00 +T 6C 01 00 00 00 00 00 00 E5 DD 6E D2 DD 66 D3 +R 00 00 01 00 02 04 11 00 +T 75 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 7B 01 00 00 CD 00 00 00 00 F1 F1 F1 18 2E +R 00 00 01 00 02 05 00 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 FE 02 20 2A 21 0F 00 DD 4E 02 DD +R 00 00 01 00 +T 8E 01 00 00 46 03 09 4E 23 46 C5 0E +R 00 00 01 00 +T 96 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0F 00 02 0A 0F 00 +T 9C 01 00 00 DD 6E D2 DD 66 D3 E5 3E +R 00 00 01 00 +T A4 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T A9 01 00 00 00 00 00 00 F1 F1 F1 F1 18 00 +R 00 00 01 00 02 04 00 00 +T B1 01 00 00 +R 00 00 01 00 +T B1 01 00 00 21 0D 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T BC 01 00 00 21 0E 00 09 72 21 07 00 09 7E 23 +R 00 00 01 00 +T C7 01 00 00 B6 20 2F +R 00 00 01 00 +T CA 01 00 00 +R 00 00 01 00 +T CA 01 00 00 01 C8 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T D4 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T D9 01 00 00 00 00 00 00 DD 75 C8 DD 74 C9 7D +R 00 00 01 00 02 04 00 00 +T E2 01 00 00 A4 3C 28 0E DD 4E C8 DD 46 C9 21 +R 00 00 01 00 +T ED 01 00 00 2B 01 CD 00 00 00 00 30 03 +R 00 00 01 00 02 07 19 00 +T F4 01 00 00 +R 00 00 01 00 +T F4 01 00 00 +R 00 00 01 00 +T F4 01 00 00 +R 00 00 01 00 +T F4 01 00 00 C3 DD 05 00 00 +R 00 00 01 00 00 05 01 00 +T F7 01 00 00 +R 00 00 01 00 +T F7 01 00 00 18 08 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 DD 36 FC 01 DD 36 FD 00 +R 00 00 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 DD 36 C6 10 DD 36 C7 00 21 02 00 +R 00 00 01 00 +T 0C 02 00 00 39 E5 21 12 00 39 4D 44 DD 5E CA +R 00 00 01 00 +T 17 02 00 00 DD 56 CB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 1D 02 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 24 02 00 00 36 C6 10 DD 36 C7 00 21 02 00 39 +R 00 00 01 00 +T 2F 02 00 00 E5 21 22 00 39 4D 44 DD 6E 02 DD +R 00 00 01 00 +T 3A 02 00 00 66 03 7E 23 B6 28 13 DD 6E 02 DD +R 00 00 01 00 +T 45 02 00 00 66 03 56 23 66 6A 11 08 00 19 5E +R 00 00 01 00 +T 50 02 00 00 23 56 18 03 +R 00 00 01 00 +T 54 02 00 00 +R 00 00 01 00 +T 54 02 00 00 11 FF FF +R 00 00 01 00 +T 57 02 00 00 +R 00 00 01 00 +T 57 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 5D 02 00 00 00 00 00 00 F1 21 24 00 39 5E 23 +R 00 00 01 00 02 04 00 00 +T 66 02 00 00 56 23 4E 23 46 EB DD 75 D8 DD 74 +R 00 00 01 00 +T 71 02 00 00 D9 DD 71 DA DD 70 DB 21 10 00 39 +R 00 00 01 00 +T 7C 02 00 00 4D 44 DD 5E D2 DD 56 D3 3E +R 00 00 01 00 +T 85 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 8A 02 00 00 00 00 00 00 21 07 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 93 02 00 00 46 03 09 7E 23 B6 20 2D +R 00 00 01 00 +T 9B 02 00 00 +R 00 00 01 00 +T 9B 02 00 00 01 C8 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T A5 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T AA 02 00 00 00 00 00 00 DD 75 C8 DD 74 C9 7D +R 00 00 01 00 02 04 00 00 +T B3 02 00 00 A4 3C 28 0E DD 4E C8 DD 46 C9 21 +R 00 00 01 00 +T BE 02 00 00 2B 01 CD 00 00 00 00 30 03 +R 00 00 01 00 02 07 19 00 +T C5 02 00 00 +R 00 00 01 00 +T C5 02 00 00 +R 00 00 01 00 +T C5 02 00 00 +R 00 00 01 00 +T C5 02 00 00 C3 DD 05 00 00 +R 00 00 01 00 00 05 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T D0 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 1C 00 02 0A 1C 00 +T D6 02 00 00 DD 6E D2 DD 66 D3 E5 3E +R 00 00 01 00 +T DE 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T E3 02 00 00 00 00 00 00 F1 F1 F1 F1 21 07 00 +R 00 00 01 00 02 04 00 00 +T EC 02 00 00 DD 4E 02 DD 46 03 09 7E 23 B6 28 +R 00 00 01 00 +T F7 02 00 00 62 +R 00 00 01 00 +T F8 02 00 00 +R 00 00 01 00 +T F8 02 00 00 DD 7E FC DD B6 FD 28 2D +R 00 00 01 00 +T 00 03 00 00 +R 00 00 01 00 +T 00 03 00 00 01 C8 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 0A 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T 0F 03 00 00 00 00 00 00 DD 75 C8 DD 74 C9 7D +R 00 00 01 00 02 04 00 00 +T 18 03 00 00 A4 3C 28 0E DD 4E C8 DD 46 C9 21 +R 00 00 01 00 +T 23 03 00 00 2B 01 CD 00 00 00 00 30 03 +R 00 00 01 00 02 07 19 00 +T 2A 03 00 00 +R 00 00 01 00 +T 2A 03 00 00 +R 00 00 01 00 +T 2A 03 00 00 +R 00 00 01 00 +T 2A 03 00 00 C3 DD 05 00 00 +R 00 00 01 00 00 05 01 00 +T 2D 03 00 00 +R 00 00 01 00 +T 2D 03 00 00 +R 00 00 01 00 +T 2D 03 00 00 01 C8 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 37 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T 3C 03 00 00 00 00 00 00 DD 75 C8 DD 74 C9 7D +R 00 00 01 00 02 04 00 00 +T 45 03 00 00 A4 3C 28 0E DD 4E C8 DD 46 C9 21 +R 00 00 01 00 +T 50 03 00 00 2B 01 CD 00 00 00 00 30 03 +R 00 00 01 00 02 07 19 00 +T 57 03 00 00 +R 00 00 01 00 +T 57 03 00 00 +R 00 00 01 00 +T 57 03 00 00 +R 00 00 01 00 +T 57 03 00 00 C3 DD 05 00 00 +R 00 00 01 00 00 05 01 00 +T 5A 03 00 00 +R 00 00 01 00 +T 5A 03 00 00 +R 00 00 01 00 +T 5A 03 00 00 01 64 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 64 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T 69 03 00 00 00 00 00 00 DD 75 C8 DD 74 C9 7D +R 00 00 01 00 02 04 00 00 +T 72 03 00 00 A4 3C 28 11 01 90 81 DD 6E C8 DD +R 00 00 01 00 +T 7D 03 00 00 66 C9 3E 80 AC 67 ED 42 38 03 +R 00 00 01 00 +T 87 03 00 00 +R 00 00 01 00 +T 87 03 00 00 +R 00 00 01 00 +T 87 03 00 00 +R 00 00 01 00 +T 87 03 00 00 C3 DD 05 00 00 +R 00 00 01 00 00 05 01 00 +T 8A 03 00 00 +R 00 00 01 00 +T 8A 03 00 00 21 00 00 E5 01 00 00 DD 5E CA DD +R 00 00 01 00 +T 95 03 00 00 56 CB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 18 00 +T 9A 03 00 00 00 00 00 00 CD 00 00 00 00 F1 3E +R 00 00 01 00 02 04 18 00 02 09 00 00 +T A1 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T A6 03 00 00 00 00 00 00 DD 75 F4 DD 74 F5 DD +R 00 00 01 00 02 04 00 00 +T AF 03 00 00 71 F6 DD 70 F7 21 05 00 DD 4E 02 +R 00 00 01 00 +T BA 03 00 00 DD 46 03 09 5E D5 21 0D 00 09 5E +R 00 00 01 00 +T C5 03 00 00 D5 03 03 69 60 4E 23 46 DD 5E D0 +R 00 00 01 00 +T D0 03 00 00 DD 56 D1 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T D6 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T DD 03 00 00 DD 75 CC DD 74 CD DD 71 CE DD 70 +R 00 00 01 00 +T E8 03 00 00 CF DD 5E 02 DD 56 03 13 13 EB 5E +R 00 00 01 00 +T F3 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T F8 03 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T FE 03 00 00 01 00 DD 6E 02 DD 66 03 23 23 7E +R 00 00 01 00 +T 09 04 00 00 23 B6 28 15 DD 6E 02 DD 66 03 23 +R 00 00 01 00 +T 14 04 00 00 23 56 23 66 6A 11 08 00 19 5E 23 +R 00 00 01 00 +T 1F 04 00 00 56 18 03 +R 00 00 01 00 +T 22 04 00 00 +R 00 00 01 00 +T 22 04 00 00 11 FF FF +R 00 00 01 00 +T 25 04 00 00 +R 00 00 01 00 +T 25 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1F 00 02 0A 1F 00 +T 2B 04 00 00 00 00 00 00 DD 5E D0 DD 56 D1 3E +R 00 00 01 00 02 04 00 00 +T 34 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 21 00 02 09 21 00 +T 39 04 00 00 00 00 00 00 01 C8 00 DD 5E 02 DD +R 00 00 01 00 02 04 00 00 +T 42 04 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1D 00 +T 47 04 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 1D 00 02 09 00 00 +T 4E 04 00 00 02 DD 66 03 23 23 5E 23 56 3E +R 00 00 01 00 +T 58 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 21 00 02 09 21 00 +T 5D 04 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 00 00 +T 66 04 00 00 23 AF 77 23 77 DD 7E CC DD A6 CD +R 00 00 01 00 +T 71 04 00 00 DD A6 CE DD A6 CF 3C 20 1C +R 00 00 01 00 +T 7A 04 00 00 +R 00 00 01 00 +T 7A 04 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T 82 04 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 06 00 02 0A 06 00 +T 88 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T 8E 04 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T 94 04 00 00 C1 05 00 00 +R 00 00 01 00 00 04 01 00 +T 96 04 00 00 +R 00 00 01 00 +T 96 04 00 00 21 05 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T A1 04 00 00 23 66 68 01 01 00 A7 ED 42 DA +R 00 00 01 00 +T AB 04 00 00 C1 05 00 00 +R 00 00 01 00 00 04 01 00 +T AD 04 00 00 +R 00 00 01 00 +T AD 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T B3 04 00 00 00 00 00 00 59 50 A7 DD 4E F4 DD +R 00 00 01 00 02 04 00 00 +T BC 04 00 00 46 F5 ED 42 EB DD 4E F6 DD 46 F7 +R 00 00 01 00 +T C7 04 00 00 ED 42 4D 44 EB DD 75 F4 DD 74 F5 +R 00 00 01 00 +T D2 04 00 00 DD 71 F6 DD 70 F7 AF DD 77 F8 DD +R 00 00 01 00 +T DD 04 00 00 77 F9 DD 77 FA DD 77 FB 7D B4 B1 +R 00 00 01 00 +T E8 04 00 00 B0 CA 6F 05 00 00 +R 00 00 01 00 00 06 01 00 +T EC 04 00 00 +R 00 00 01 00 +T EC 04 00 00 A7 DD 6E CC DD 66 CD 01 37 89 ED +R 00 00 01 00 +T F7 04 00 00 42 DD 6E CE DD 66 CF 01 41 00 ED +R 00 00 01 00 +T 02 05 00 00 42 30 36 +R 00 00 01 00 +T 05 05 00 00 +R 00 00 01 00 +T 05 05 00 00 DD 6E F6 DD 66 F7 E5 DD 6E F4 DD +R 00 00 01 00 +T 10 05 00 00 66 F5 E5 21 00 00 E5 21 E8 03 E5 +R 00 00 01 00 +T 1B 05 00 00 DD 4E CE DD 46 CF DD 6E CC DD 66 +R 00 00 01 00 +T 26 05 00 00 CD CD 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 06 0D 00 02 0B 17 00 +T 2D 05 00 00 DD 75 F8 DD 74 F9 DD 71 FA DD 70 +R 00 00 01 00 +T 38 05 00 00 FB 18 34 +R 00 00 01 00 +T 3B 05 00 00 +R 00 00 01 00 +T 3B 05 00 00 21 00 00 E5 21 E8 03 E5 DD 4E F6 +R 00 00 01 00 +T 46 05 00 00 DD 46 F7 DD 6E F4 DD 66 F5 CD +R 00 00 01 00 +T 50 05 00 00 00 00 00 00 C5 E5 DD 4E CE DD 46 +R 00 00 01 00 02 04 14 00 +T 59 05 00 00 CF DD 6E CC DD 66 CD CD +R 00 00 01 00 +T 61 05 00 00 00 00 00 00 DD 75 F8 DD 74 F9 DD +R 00 00 01 00 02 04 17 00 +T 6A 05 00 00 71 FA DD 70 FB +R 00 00 01 00 +T 6F 05 00 00 +R 00 00 01 00 +T 6F 05 00 00 +R 00 00 01 00 +T 6F 05 00 00 DD 6E FA DD 66 FB E5 DD 6E F8 DD +R 00 00 01 00 +T 7A 05 00 00 66 F9 E5 21 00 00 E5 21 E8 03 E5 +R 00 00 01 00 +T 85 05 00 00 DD 4E F6 DD 46 F7 DD 6E F4 DD 66 +R 00 00 01 00 +T 90 05 00 00 F5 CD 00 00 00 00 C5 E5 DD 6E CE +R 00 00 01 00 02 06 14 00 +T 99 05 00 00 DD 66 CF E5 DD 6E CC DD 66 CD E5 +R 00 00 01 00 +T A4 05 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T AC 05 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 02 00 02 0A 02 00 +T B2 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T B8 05 00 00 00 00 00 00 EB 21 12 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T C1 05 00 00 +R 00 00 01 00 +T C1 05 00 00 +R 00 00 01 00 +T C1 05 00 00 21 04 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T CC 05 00 00 46 FE 70 DD 4E CE DD 46 CF DD 6E +R 00 00 01 00 +T D7 05 00 00 CC DD 66 CD 18 41 +R 00 00 01 00 +T DD 05 00 00 +R 00 00 01 00 +T DD 05 00 00 DD 5E D0 DD 56 D1 3E 00 00 00 00 +R 00 00 01 00 2B 0B 21 00 +T E5 05 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 21 00 02 0A 00 00 +T EC 05 00 00 6E 02 DD 66 03 23 23 5E 23 56 3E +R 00 00 01 00 +T F7 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 21 00 02 09 21 00 +T FC 05 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 00 00 +T 05 06 00 00 23 AF 77 23 77 21 04 00 DD 4E 02 +R 00 00 01 00 +T 10 06 00 00 DD 46 03 09 DD 46 FE 70 01 FF FF +R 00 00 01 00 +T 1B 06 00 00 21 FF FF +R 00 00 01 00 +T 1E 06 00 00 +R 00 00 01 00 +T 1E 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 22 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 77 2B 00 +R 00 00 02 00 diff --git a/src/nos/lib/clients_lib/sendport.rel b/src/nos/lib/clients_lib/sendport.rel new file mode 100644 index 00000000..e8648236 --- /dev/null +++ b/src/nos/lib/clients_lib/sendport.rel @@ -0,0 +1,48 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0337_e126_PORT_20_25u_2c_25u_ Ref00000000 +S __fprintf Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A6 flags 0 +S _sendport Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 03 03 0A 6F 03 0A +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 67 26 00 E5 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T 14 00 00 00 23 46 23 66 68 6C 26 00 26 00 E5 +R 00 00 01 00 +T 1F 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 2A 00 00 00 23 46 23 5E 23 56 69 60 26 00 E5 +R 00 00 01 00 +T 35 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 40 00 00 00 23 46 23 5E 23 56 69 60 6C 26 00 +R 00 00 01 00 +T 4B 00 00 00 26 00 E5 21 04 00 DD 4E 04 DD 46 +R 00 00 01 00 +T 56 00 00 00 05 09 4E 23 46 23 5E 23 56 69 60 +R 00 00 01 00 +T 61 00 00 00 6B 62 11 00 00 26 00 E5 21 04 00 +R 00 00 01 00 +T 6C 00 00 00 DD 4E 04 DD 46 05 09 5E 23 56 23 +R 00 00 01 00 +T 77 00 00 00 4E 23 46 EB 69 60 01 00 00 6C 26 +R 00 00 01 00 +T 82 00 00 00 00 26 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 02 00 +T 8A 00 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 02 00 +T 93 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 99 00 00 00 CD 00 00 00 00 EB 21 12 00 39 F9 +R 00 00 01 00 02 05 00 00 +T A2 00 00 00 EB C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/clients_lib/telnet.rel b/src/nos/lib/clients_lib/telnet.rel new file mode 100644 index 00000000..76517d0d --- /dev/null +++ b/src/nos/lib/clients_lib/telnet.rel @@ -0,0 +1,1448 @@ +XL4 +H 5 areas 4F global symbols +S _resolve Ref00000000 +S ___03b3_2057_Too_20many_20sessio Ref00000000 +S ___0363_d0ff_Refuse_0a Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0137_7643__25s_0a Ref00000000 +S _Badhost Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _fflush Ref00000000 +S _socket Ref00000000 +S _fgetc Ref00000000 +S ___056d_7321_sent_3a_20do_20 Ref00000000 +S _memset Ref00000000 +S _fmode Ref00000000 +S _newsession Ref00000000 +S _setjmp Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___056f_d7c3_sent_3a_20will_20 Ref00000000 +S ___0221_6930_Connected_0a Ref00000000 +S _alert Ref00000000 +S __fprintf Ref00000000 +S ___050b_07d0_null_0a Ref00000000 +S _perror Ref00000000 +S ___0543_84ef_recv_3a_20will_20 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ___058c_fcc6_standard_0a Ref00000000 +S ___03b6_2030_Trying_20_25s_2e_2e Ref00000000 +S _killproc Ref00000000 +S ___021c_f95c_Closed_3a_20_25s_0a Ref00000000 +S _settos Ref00000000 +S _fputc Ref00000000 +S ___03cc_125c_Usage_3a_20_25s_20_ Ref00000000 +S ___0367_ae52_Resolving_20_25s_2e Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___01db_537a_Accept_0a Ref00000000 +S _Current Ref00000000 +S _freesession Ref00000000 +S _connect Ref00000000 +S ___0202_ef8c_Can_27t_20create_20 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___03a1_950b_Telnet_20option_20t Ref00000000 +S _atoi Ref00000000 +S ___03f1_699f__5eC_0a Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ___0542_8810_recv_3a_20dont_20 Ref00000000 +S ___016d_2293__25u_0a Ref00000000 +S ___0544_219c_recv_3a_20wont_20 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setbool Ref00000000 +S _sockerr Ref00000000 +S _psocket Ref00000000 +S ___0570_72b0_sent_3a_20wont_20 Ref00000000 +S _fdopen Ref00000000 +S _fclose Ref00000000 +S ___056e_db3c_sent_3a_20dont_20 Ref00000000 +S _Cmdline Ref00000000 +S ___0128_22d3__25c_25c_25c Ref00000000 +S _newproc Ref00000000 +S _keywait Ref00000000 +S _setvbuf Ref00000000 +S ___0541_18c5_recv_3a_20do_20 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DD7 flags 0 +S _dontopt Def00000BCE +S _willopt Def000007E1 +S _tel_connect Def0000023F +S _answer Def00000C7F +S _tnrecv Def00000341 +S _doeol Def0000074C +S _tel_output Def000005DF +S _dotopt Def00000000 +S _wontopt Def00000992 +S _dotelnet Def00000021 +S _doopt Def00000B08 +S _doecho Def000006D3 +A CSTR size 5A flags 0 +A IDATA0 size 14 flags 0 +S _Topt Def00000004 +S _Refuse_echo Def00000000 +S _Tn_cr_mode Def00000002 +S _T_options Def00000006 +A CDATA0 size 14 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 22 00 +T 06 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 29 00 02 0A 29 00 +T 0C 00 00 00 11 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 03 00 2B 0A 32 00 +T 12 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 32 00 02 09 03 00 +T 19 00 00 00 F1 F1 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 0A 10 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 CD 00 00 00 00 EC FF 21 01 00 E5 +R 00 00 01 00 02 05 28 00 +T 2A 00 00 00 01 00 00 ED 5B 00 00 00 00 3E +R 00 00 01 00 02 09 39 00 +T 32 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 37 00 00 00 00 00 00 00 F1 DD 75 EC DD 74 ED +R 00 00 01 00 02 04 03 00 +T 40 00 00 00 7D B4 20 17 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 4A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T 50 00 00 00 CD 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 05 03 00 +T 59 00 00 00 3C 02 00 00 +R 00 00 01 00 00 04 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 21 20 00 DD 4E EC DD 46 ED 09 36 +R 00 00 01 00 +T 66 00 00 00 8F 0D 00 00 23 36 8F 0D 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T 6B 00 00 00 36 8F 0D 00 00 AF DD 77 EE DD 77 +R 00 00 01 00 29 05 01 00 +T 73 00 00 00 EF 01 03 80 DD 6E 02 DD 66 03 3E +R 00 00 01 00 +T 7E 00 00 00 80 AC 67 ED 42 30 0A +R 00 00 01 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 DD 36 F0 17 DD 36 F1 00 18 1B +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 9A 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2A 00 +T 9F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 2A 00 02 09 03 00 +T A6 00 00 00 F0 DD 74 F1 +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 21 04 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 18 00 +T B3 00 00 00 F6 08 77 23 7E F6 00 77 21 22 00 +R 00 00 01 00 +T BE 00 00 00 ED 4B 00 00 00 00 09 36 6B 23 36 +R 00 00 01 00 02 06 18 00 +T C7 00 00 00 00 21 14 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 18 00 +T D0 00 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T D6 00 00 00 CD 00 00 00 00 7D B4 28 22 +R 00 00 01 00 02 05 03 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 01 01 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3C 00 +T E5 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 3C 00 02 0A 03 00 +T EC 00 00 00 5E EC DD 56 ED 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 25 00 +T F4 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 25 00 02 09 03 00 +T FA 00 00 00 01 00 C3 3C 02 00 00 +R 00 00 01 00 00 07 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 0A 01 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 21 00 +T 0F 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 21 00 2B 0A 2D 00 +T 15 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2D 00 02 09 03 00 +T 1C 01 00 00 F1 DD 6E 04 DD 66 05 23 23 5E 23 +R 00 00 01 00 +T 27 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 2D 01 00 00 CD 00 00 00 00 DD 75 F2 DD 74 F3 +R 00 00 01 00 02 05 03 00 +T 36 01 00 00 DD 71 F4 DD 70 F5 7D B4 B1 B0 20 +R 00 00 01 00 +T 41 01 00 00 3C +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 4D 01 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 05 00 +T 53 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 58 01 00 00 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 04 03 00 +T 60 01 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 3C 00 +T 65 01 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 3C 00 02 09 03 00 +T 6C 01 00 00 EC DD 56 ED 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 25 00 +T 73 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 25 00 02 09 03 00 +T 79 01 00 00 01 00 C3 3C 02 00 00 +R 00 00 01 00 00 07 01 00 +T 7E 01 00 00 +R 00 00 01 00 +T 7E 01 00 00 21 00 00 E5 01 00 00 11 00 00 3E +R 00 00 01 00 +T 89 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 8E 01 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 03 00 +T 97 01 00 00 7D A4 3C 20 32 +R 00 00 01 00 +T 9C 01 00 00 +R 00 00 01 00 +T 9C 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 27 00 02 0B 27 00 +T A2 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T A8 01 00 00 CD 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 05 03 00 +T B1 01 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 3C 00 +T B6 01 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 3C 00 02 09 03 00 +T BD 01 00 00 EC DD 56 ED 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 25 00 +T C4 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 25 00 02 09 03 00 +T CA 01 00 00 01 00 18 6E +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 01 10 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T D8 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1E 00 02 09 1E 00 +T DD 01 00 00 00 00 00 00 21 0D 00 DD 4E EC DD +R 00 00 01 00 02 04 03 00 +T E6 01 00 00 46 ED 09 E5 01 3B 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T EF 01 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 36 00 +T F6 01 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 36 00 02 09 03 00 +T FD 01 00 00 E1 71 23 70 21 80 00 E5 21 02 00 +R 00 00 01 00 +T 08 02 00 00 E5 01 00 00 21 0D 00 DD 5E EC DD +R 00 00 01 00 +T 13 02 00 00 56 ED 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3D 00 +T 1B 02 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 3D 00 02 0A 03 00 +T 22 02 00 00 F1 21 10 00 E5 21 04 00 39 4D 44 +R 00 00 01 00 +T 2D 02 00 00 DD 5E EC DD 56 ED 3E 3F 02 00 00 +R 00 00 01 00 29 0B 01 00 +T 35 02 00 00 21 3F 02 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 00 05 01 00 02 0A 03 00 +T 3C 02 00 00 +R 00 00 01 00 +T 3C 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 CD 00 00 00 00 F0 FF 21 0F 00 E5 +R 00 00 01 00 02 05 28 00 +T 48 02 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 52 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 57 02 00 00 00 00 00 00 F1 3A 02 00 00 00 DD +R 00 00 01 00 02 04 03 00 00 0A 03 00 +T 5E 02 00 00 77 FE DD 6E 02 DD 66 03 DD 75 FC +R 00 00 01 00 +T 69 02 00 00 DD 74 FD 21 05 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 74 02 00 00 03 09 E5 21 02 00 39 5D 54 E1 73 +R 00 00 01 00 +T 7F 02 00 00 23 72 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 88 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 34 00 02 09 34 00 +T 8D 02 00 00 00 00 00 00 E5 1E 00 00 00 00 D5 +R 00 00 01 00 02 04 03 00 2B 0A 1B 00 +T 93 02 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 1B 00 2B 0B 2D 00 +T 99 02 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 2D 00 02 0A 03 00 +T A0 02 00 00 F1 F1 DD 6E 0A DD 66 0B E5 DD 4E +R 00 00 01 00 +T AB 02 00 00 04 DD 46 05 21 0D 00 DD 5E 02 DD +R 00 00 01 00 +T B6 02 00 00 56 03 19 7E 23 B6 28 11 21 0D 00 +R 00 00 01 00 +T C1 02 00 00 19 56 23 66 6A 11 08 00 19 5E 23 +R 00 00 01 00 +T CC 02 00 00 56 18 03 +R 00 00 01 00 +T CF 02 00 00 +R 00 00 01 00 +T CF 02 00 00 11 FF FF +R 00 00 01 00 +T D2 02 00 00 +R 00 00 01 00 +T D2 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 26 00 02 0A 26 00 +T D8 02 00 00 00 00 00 00 F1 7D A4 3C 20 2C +R 00 00 01 00 02 04 03 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 11 3F 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 16 00 +T E6 02 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 16 00 02 09 03 00 +T EC 02 00 00 01 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 3C 00 +T F4 02 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 3C 00 02 09 03 00 +T FB 02 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 25 00 +T 02 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 25 00 02 09 03 00 +T 08 03 00 00 01 00 18 32 +R 00 00 01 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 12 00 02 0B 12 00 +T 12 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T 18 03 00 00 CD 00 00 00 00 F1 F1 21 20 00 DD +R 00 00 01 00 02 05 03 00 +T 21 03 00 00 4E 02 DD 46 03 09 AF 77 23 77 23 +R 00 00 01 00 +T 2C 03 00 00 77 21 00 00 39 5D 54 3E +R 00 00 01 00 +T 34 03 00 00 41 03 00 00 21 41 03 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 39 03 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 03 00 +T 3E 03 00 00 +R 00 00 01 00 +T 3E 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 41 03 00 00 +R 00 00 01 00 +T 41 03 00 00 CD 00 00 00 00 F8 FF 21 0C 00 DD +R 00 00 01 00 02 05 28 00 +T 4A 03 00 00 4E 02 DD 46 03 09 56 23 66 6A DD +R 00 00 01 00 +T 55 03 00 00 75 FA DD 74 FB 11 0D 00 19 56 23 +R 00 00 01 00 +T 60 03 00 00 66 6A DD 75 FE DD 74 FF 21 09 00 +R 00 00 01 00 +T 6B 03 00 00 DD 5E FA DD 56 FB 19 E5 11 00 00 +R 00 00 01 00 +T 76 03 00 00 D5 11 00 00 D5 C5 01 00 00 C5 0E +R 00 00 01 00 +T 81 03 00 00 DF 05 00 00 C5 01 DF 05 00 00 C5 +R 00 00 01 00 29 04 01 00 00 0A 01 00 +T 87 03 00 00 01 00 04 11 4E 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T 8E 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3B 00 02 09 3B 00 +T 93 03 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 03 00 +T 9C 03 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 +T A2 03 00 00 +R 00 00 01 00 +T A2 03 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T AA 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 03 00 +T B1 03 00 00 75 F8 DD 74 F9 7D A4 3C CA +R 00 00 01 00 +T BA 03 00 00 0E 05 00 00 +R 00 00 01 00 00 04 01 00 +T BC 03 00 00 +R 00 00 01 00 +T BC 03 00 00 3E FF DD AE F8 DD B6 F9 28 44 +R 00 00 01 00 +T C6 03 00 00 +R 00 00 01 00 +T C6 03 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 18 00 +T CF 03 00 00 23 46 DD 5E F8 16 00 3E +R 00 00 01 00 +T D7 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T DC 03 00 00 00 00 00 00 21 0F 00 DD 4E FA DD +R 00 00 01 00 02 04 03 00 +T E5 03 00 00 46 FB 09 7E 23 B6 28 1B +R 00 00 01 00 +T ED 03 00 00 +R 00 00 01 00 +T ED 03 00 00 21 0F 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T F8 03 00 00 23 46 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T 01 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T 06 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 +T 08 04 00 00 +R 00 00 01 00 +T 08 04 00 00 18 98 +R 00 00 01 00 +T 0A 04 00 00 +R 00 00 01 00 +T 0A 04 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 12 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 03 00 +T 19 04 00 00 75 F8 DD 74 F9 EB CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 22 04 00 00 FB 00 05 00 0B 05 00 00 +R 00 00 01 00 00 08 01 00 +T 28 04 00 00 32 04 00 00 59 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 2C 04 00 00 80 04 00 00 A6 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 30 04 00 00 CC 04 00 00 +R 00 00 01 00 00 04 01 00 +T 32 04 00 00 +R 00 00 01 00 +T 32 04 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 3A 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 03 00 +T 41 04 00 00 75 F8 DD 74 F9 4D 44 DD 5E 02 DD +R 00 00 01 00 +T 4C 04 00 00 56 03 3E E1 07 00 00 21 +R 00 00 01 00 29 07 01 00 +T 51 04 00 00 E1 07 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 00 04 01 00 02 09 03 00 +T 57 04 00 00 0B 05 00 00 +R 00 00 01 00 00 04 01 00 +T 59 04 00 00 +R 00 00 01 00 +T 59 04 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 61 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 03 00 +T 68 04 00 00 75 F8 DD 74 F9 4D 44 DD 5E 02 DD +R 00 00 01 00 +T 73 04 00 00 56 03 3E 92 09 00 00 21 +R 00 00 01 00 29 07 01 00 +T 78 04 00 00 92 09 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 00 04 01 00 02 09 03 00 +T 7E 04 00 00 0B 05 00 00 +R 00 00 01 00 00 04 01 00 +T 80 04 00 00 +R 00 00 01 00 +T 80 04 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 88 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 03 00 +T 8F 04 00 00 75 F8 DD 74 F9 4D 44 DD 5E 02 DD +R 00 00 01 00 +T 9A 04 00 00 56 03 3E 08 0B 00 00 21 +R 00 00 01 00 29 07 01 00 +T 9F 04 00 00 08 0B 00 00 CD 00 00 00 00 18 65 +R 00 00 01 00 00 04 01 00 02 09 03 00 +T A6 04 00 00 +R 00 00 01 00 +T A6 04 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T AE 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 03 00 +T B5 04 00 00 75 F8 DD 74 F9 4D 44 DD 5E 02 DD +R 00 00 01 00 +T C0 04 00 00 56 03 3E CE 0B 00 00 21 +R 00 00 01 00 29 07 01 00 +T C5 04 00 00 CE 0B 00 00 CD 00 00 00 00 18 3F +R 00 00 01 00 00 04 01 00 02 09 03 00 +T CC 04 00 00 +R 00 00 01 00 +T CC 04 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 18 00 +T D5 04 00 00 23 46 11 FF 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1F 00 +T DD 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1F 00 02 09 03 00 +T E3 04 00 00 0F 00 DD 4E FA DD 46 FB 09 7E 23 +R 00 00 01 00 +T EE 04 00 00 B6 28 18 +R 00 00 01 00 +T F1 04 00 00 +R 00 00 01 00 +T F1 04 00 00 21 0F 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T FC 04 00 00 23 46 11 FF 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1F 00 +T 04 05 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 1F 00 02 09 03 00 +T 09 05 00 00 +R 00 00 01 00 +T 09 05 00 00 18 00 +R 00 00 01 00 +T 0B 05 00 00 +R 00 00 01 00 +T 0B 05 00 00 C3 A2 03 00 00 +R 00 00 01 00 00 05 01 00 +T 0E 05 00 00 +R 00 00 01 00 +T 0E 05 00 00 +R 00 00 01 00 +T 0E 05 00 00 01 01 00 21 1B 00 DD 5E FA DD 56 +R 00 00 01 00 +T 19 05 00 00 FB 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0C 00 +T 21 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0C 00 02 09 03 00 +T 27 05 00 00 80 00 E5 21 02 00 E5 01 00 00 21 +R 00 00 01 00 +T 32 05 00 00 1B 00 DD 5E FA DD 56 FB 19 5E 23 +R 00 00 01 00 +T 3D 05 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3D 00 02 0B 3D 00 +T 43 05 00 00 CD 00 00 00 00 F1 F1 DD 7E FE DD +R 00 00 01 00 02 05 03 00 +T 4C 05 00 00 B6 FF 28 0F 21 08 00 DD 4E FE DD +R 00 00 01 00 +T 57 05 00 00 46 FF 09 5E 23 56 18 03 +R 00 00 01 00 +T 5F 05 00 00 +R 00 00 01 00 +T 5F 05 00 00 11 FF FF +R 00 00 01 00 +T 62 05 00 00 +R 00 00 01 00 +T 62 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 33 00 02 0A 33 00 +T 68 05 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 03 00 +T 71 05 00 00 B4 28 02 18 03 +R 00 00 01 00 +T 76 05 00 00 +R 00 00 01 00 +T 76 05 00 00 21 56 00 00 00 +R 00 00 01 00 00 05 02 00 +T 79 05 00 00 +R 00 00 01 00 +T 79 05 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 1D 00 +T 7E 05 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 1D 00 2B 0A 2D 00 +T 84 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2D 00 02 09 03 00 +T 8B 05 00 00 F1 21 09 00 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T 96 05 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 1C 00 +T 9C 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1C 00 02 09 03 00 +T A2 05 00 00 09 00 09 AF 77 23 77 21 0D 00 09 +R 00 00 01 00 +T AD 05 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 37 00 +T B3 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 37 00 02 09 03 00 +T B9 05 00 00 0D 00 09 AF 77 23 77 01 01 00 11 +R 00 00 01 00 +T C4 05 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 3C 00 +T C9 05 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 3C 00 02 09 03 00 +T D0 05 00 00 FA DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 25 00 +T D7 05 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 25 00 02 09 03 00 +T DD 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 10 00 +T DF 05 00 00 +R 00 00 01 00 +T DF 05 00 00 CD 00 00 00 00 FA FF DD 71 FE DD +R 00 00 01 00 02 05 28 00 +T E8 05 00 00 70 FF 21 0C 00 09 46 23 66 68 DD +R 00 00 01 00 +T F3 05 00 00 75 FA DD 74 FB +R 00 00 01 00 +T F8 05 00 00 +R 00 00 01 00 +T F8 05 00 00 21 19 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T 03 06 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 08 06 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 03 00 +T 0F 06 00 00 FC DD 74 FD 7D A4 3C CA +R 00 00 01 00 +T 17 06 00 00 C2 06 00 00 +R 00 00 01 00 00 04 01 00 +T 19 06 00 00 +R 00 00 01 00 +T 19 06 00 00 21 0D 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T 24 06 00 00 23 46 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 2D 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T 32 06 00 00 00 00 00 00 21 07 00 DD 4E FE DD +R 00 00 01 00 02 04 03 00 +T 3B 06 00 00 46 FF 09 7E B7 20 2A 21 0F 00 DD +R 00 00 01 00 +T 46 06 00 00 4E FA DD 46 FB 09 7E 23 B6 28 1B +R 00 00 01 00 +T 51 06 00 00 +R 00 00 01 00 +T 51 06 00 00 +R 00 00 01 00 +T 51 06 00 00 +R 00 00 01 00 +T 51 06 00 00 21 0F 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T 5C 06 00 00 23 46 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 65 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T 6A 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 +T 6C 06 00 00 +R 00 00 01 00 +T 6C 06 00 00 3E 0D DD AE FC DD B6 FD 20 26 21 +R 00 00 01 00 +T 77 06 00 00 0E 00 DD 4E FE DD 46 FF 09 7E B7 +R 00 00 01 00 +T 82 06 00 00 28 18 +R 00 00 01 00 +T 84 06 00 00 +R 00 00 01 00 +T 84 06 00 00 +R 00 00 01 00 +T 84 06 00 00 +R 00 00 01 00 +T 84 06 00 00 21 0D 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T 8F 06 00 00 23 46 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1F 00 +T 97 06 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 1F 00 02 09 03 00 +T 9C 06 00 00 +R 00 00 01 00 +T 9C 06 00 00 21 07 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T A7 06 00 00 B7 28 15 +R 00 00 01 00 +T AA 06 00 00 +R 00 00 01 00 +T AA 06 00 00 21 0D 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T B5 06 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T BA 06 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 07 00 02 09 03 00 +T BF 06 00 00 +R 00 00 01 00 +T BF 06 00 00 C3 F8 05 00 00 +R 00 00 01 00 00 05 01 00 +T C2 06 00 00 +R 00 00 01 00 +T C2 06 00 00 21 09 00 DD 4E FA DD 46 FB 09 AF +R 00 00 01 00 +T CD 06 00 00 77 23 77 C3 00 00 00 00 +R 00 00 01 00 02 08 10 00 +T D3 06 00 00 +R 00 00 01 00 +T D3 06 00 00 CD 00 00 00 00 01 02 80 EB 3E 80 +R 00 00 01 00 02 05 22 00 +T DC 06 00 00 AC 67 ED 42 30 2D +R 00 00 01 00 +T E2 06 00 00 +R 00 00 01 00 +T E2 06 00 00 2A 00 00 00 00 7D B4 28 13 +R 00 00 01 00 00 05 03 00 +T E9 06 00 00 +R 00 00 01 00 +T E9 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 02 00 02 0B 02 00 +T EF 06 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T F5 06 00 00 CD 00 00 00 00 F1 F1 18 11 +R 00 00 01 00 02 05 03 00 +T FC 06 00 00 +R 00 00 01 00 +T FC 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 23 00 02 0B 23 00 +T 02 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T 08 07 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 03 00 +T 0D 07 00 00 +R 00 00 01 00 +T 0D 07 00 00 18 37 +R 00 00 01 00 +T 0F 07 00 00 +R 00 00 01 00 +T 0F 07 00 00 DD 6E 04 DD 66 05 23 23 7E 23 66 +R 00 00 01 00 +T 1A 07 00 00 6F 7E FE 72 20 08 +R 00 00 01 00 +T 20 07 00 00 +R 00 00 01 00 +T 20 07 00 00 21 01 00 22 00 00 00 00 18 1E +R 00 00 01 00 00 08 03 00 +T 28 07 00 00 +R 00 00 01 00 +T 28 07 00 00 DD 6E 04 DD 66 05 23 23 7E 23 66 +R 00 00 01 00 +T 33 07 00 00 6F 7E FE 61 20 08 +R 00 00 01 00 +T 39 07 00 00 +R 00 00 01 00 +T 39 07 00 00 21 00 00 22 00 00 00 00 18 05 +R 00 00 01 00 00 08 03 00 +T 41 07 00 00 +R 00 00 01 00 +T 41 07 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 46 07 00 00 +R 00 00 01 00 +T 46 07 00 00 +R 00 00 01 00 +T 46 07 00 00 +R 00 00 01 00 +T 46 07 00 00 21 00 00 +R 00 00 01 00 +T 49 07 00 00 +R 00 00 01 00 +T 49 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 4C 07 00 00 +R 00 00 01 00 +T 4C 07 00 00 CD 00 00 00 00 01 02 80 EB 3E 80 +R 00 00 01 00 02 05 22 00 +T 55 07 00 00 AC 67 ED 42 30 2D +R 00 00 01 00 +T 5B 07 00 00 +R 00 00 01 00 +T 5B 07 00 00 2A 02 00 00 00 7D B4 28 13 +R 00 00 01 00 00 05 03 00 +T 62 07 00 00 +R 00 00 01 00 +T 62 07 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 15 00 02 0B 15 00 +T 68 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T 6E 07 00 00 CD 00 00 00 00 F1 F1 18 11 +R 00 00 01 00 02 05 03 00 +T 75 07 00 00 +R 00 00 01 00 +T 75 07 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1A 00 02 0B 1A 00 +T 7B 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T 81 07 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 03 00 +T 86 07 00 00 +R 00 00 01 00 +T 86 07 00 00 18 53 +R 00 00 01 00 +T 88 07 00 00 +R 00 00 01 00 +T 88 07 00 00 DD 6E 04 DD 66 05 23 23 7E 23 66 +R 00 00 01 00 +T 93 07 00 00 6F 7E FE 6E 20 08 +R 00 00 01 00 +T 99 07 00 00 +R 00 00 01 00 +T 99 07 00 00 21 01 00 22 02 00 00 00 18 3A +R 00 00 01 00 00 08 03 00 +T A1 07 00 00 +R 00 00 01 00 +T A1 07 00 00 DD 6E 04 DD 66 05 23 23 7E 23 66 +R 00 00 01 00 +T AC 07 00 00 6F 7E FE 73 20 08 +R 00 00 01 00 +T B2 07 00 00 +R 00 00 01 00 +T B2 07 00 00 21 00 00 22 02 00 00 00 18 21 +R 00 00 01 00 00 08 03 00 +T BA 07 00 00 +R 00 00 01 00 +T BA 07 00 00 DD 6E 04 DD 66 05 4E 23 46 C5 0E +R 00 00 01 00 +T C5 07 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 20 00 02 0A 20 00 +T CB 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T D1 07 00 00 00 00 00 00 F1 F1 F1 21 FF FF 18 +R 00 00 01 00 02 04 03 00 +T DA 07 00 00 03 +R 00 00 01 00 +T DB 07 00 00 +R 00 00 01 00 +T DB 07 00 00 +R 00 00 01 00 +T DB 07 00 00 +R 00 00 01 00 +T DB 07 00 00 21 00 00 +R 00 00 01 00 +T DE 07 00 00 +R 00 00 01 00 +T DE 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T E1 07 00 00 +R 00 00 01 00 +T E1 07 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 28 00 +T E7 07 00 00 04 00 00 00 7D B4 28 5B +R 00 00 01 00 00 04 03 00 +T ED 07 00 00 +R 00 00 01 00 +T ED 07 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 17 00 02 0B 17 00 +T F3 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T F9 07 00 00 CD 00 00 00 00 F1 F1 DD 4E 04 DD +R 00 00 01 00 02 05 03 00 +T 02 08 00 00 46 05 21 06 00 CD 00 00 00 00 38 +R 00 00 01 00 02 0A 2C 00 +T 0B 08 00 00 23 +R 00 00 01 00 +T 0C 08 00 00 +R 00 00 01 00 +T 0C 08 00 00 DD 6E 04 DD 66 05 29 01 +R 00 00 01 00 +T 14 08 00 00 06 00 00 00 09 4E 23 46 C5 0E +R 00 00 01 00 00 04 03 00 +T 1C 08 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 04 00 02 0A 04 00 +T 22 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T 28 08 00 00 00 00 00 00 F1 F1 F1 18 19 +R 00 00 01 00 02 04 03 00 +T 2F 08 00 00 +R 00 00 01 00 +T 2F 08 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T 37 08 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 2F 00 02 0A 2F 00 +T 3D 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T 43 08 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 03 00 +T 48 08 00 00 +R 00 00 01 00 +T 48 08 00 00 +R 00 00 01 00 +T 48 08 00 00 DD 4E 04 DD 46 05 78 EE 80 47 21 +R 00 00 01 00 +T 53 08 00 00 00 80 09 D2 6B 09 00 00 21 02 80 +R 00 00 01 00 00 08 01 00 +T 5C 08 00 00 A7 ED 42 CA 6B 09 00 00 21 FC 7F +R 00 00 01 00 00 08 01 00 +T 65 08 00 00 09 DA 6B 09 00 00 +R 00 00 01 00 00 06 01 00 +T 69 08 00 00 +R 00 00 01 00 +T 69 08 00 00 DD 6E 04 DD 66 05 DD 4E 02 DD 46 +R 00 00 01 00 +T 74 08 00 00 03 09 01 06 00 09 46 05 20 03 +R 00 00 01 00 +T 7E 08 00 00 +R 00 00 01 00 +T 7E 08 00 00 C3 8F 09 00 00 +R 00 00 01 00 00 05 01 00 +T 81 08 00 00 +R 00 00 01 00 +T 81 08 00 00 3E 01 DD AE 04 DD B6 05 C2 +R 00 00 01 00 +T 8A 08 00 00 4E 09 00 00 +R 00 00 01 00 00 04 01 00 +T 8C 08 00 00 +R 00 00 01 00 +T 8C 08 00 00 2A 00 00 00 00 7D B4 28 0B +R 00 00 01 00 00 05 03 00 +T 93 08 00 00 +R 00 00 01 00 +T 93 08 00 00 DD 36 FE FE DD 36 FF 00 C3 +R 00 00 01 00 +T 9C 08 00 00 73 09 00 00 +R 00 00 01 00 00 04 01 00 +T 9E 08 00 00 +R 00 00 01 00 +T 9E 08 00 00 21 0C 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T A9 08 00 00 23 66 6A 11 17 00 19 7E E6 FD 77 +R 00 00 01 00 +T B4 08 00 00 23 7E E6 FF 77 21 0C 00 09 56 23 +R 00 00 01 00 +T BF 08 00 00 66 6A 11 17 00 19 7E E6 FE 77 23 +R 00 00 01 00 +T CA 08 00 00 7E E6 FF 77 01 00 00 21 0C 00 DD +R 00 00 01 00 +T D5 08 00 00 5E 02 DD 56 03 19 7E 23 66 6F 11 +R 00 00 01 00 +T E0 08 00 00 0D 00 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T E8 08 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0C 00 02 0A 03 00 +T EF 08 00 00 00 00 E5 21 03 00 E5 01 00 00 21 +R 00 00 01 00 +T FA 08 00 00 0C 00 DD 5E 02 DD 56 03 19 56 23 +R 00 00 01 00 +T 05 09 00 00 66 6A 11 0D 00 19 5E 23 56 3E +R 00 00 01 00 +T 0F 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3D 00 02 09 3D 00 +T 14 09 00 00 00 00 00 00 F1 F1 01 00 00 21 +R 00 00 01 00 02 04 03 00 +T 1C 09 00 00 40 00 ED 5B 00 00 00 00 19 5E 23 +R 00 00 01 00 02 08 18 00 +T 25 09 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 2B 09 00 00 CD 00 00 00 00 21 00 00 E5 21 +R 00 00 01 00 02 05 03 00 +T 33 09 00 00 03 00 E5 01 00 00 21 40 00 ED 5B +R 00 00 01 00 +T 3E 09 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 18 00 +T 45 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3D 00 02 09 3D 00 +T 4A 09 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 +T 4E 09 00 00 +R 00 00 01 00 +T 4E 09 00 00 DD 6E 04 DD 66 05 DD 4E 02 DD 46 +R 00 00 01 00 +T 59 09 00 00 03 09 01 06 00 09 36 01 DD 36 FE +R 00 00 01 00 +T 64 09 00 00 FD DD 36 FF 00 18 08 +R 00 00 01 00 +T 6B 09 00 00 +R 00 00 01 00 +T 6B 09 00 00 DD 36 FE FE DD 36 FF 00 +R 00 00 01 00 +T 73 09 00 00 +R 00 00 01 00 +T 73 09 00 00 DD 6E 04 DD 66 05 E5 DD 4E FE DD +R 00 00 01 00 +T 7E 09 00 00 46 FF DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 87 09 00 00 7F 0C 00 00 21 7F 0C 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 8C 09 00 00 00 00 00 00 E1 +R 00 00 01 00 02 04 03 00 +T 8F 09 00 00 +R 00 00 01 00 +T 8F 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 92 09 00 00 +R 00 00 01 00 +T 92 09 00 00 CD 00 00 00 00 2A 04 00 00 00 7D +R 00 00 01 00 02 05 22 00 00 0A 03 00 +T 99 09 00 00 B4 28 5B +R 00 00 01 00 +T 9C 09 00 00 +R 00 00 01 00 +T 9C 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 30 00 02 0B 30 00 +T A2 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T A8 09 00 00 CD 00 00 00 00 F1 F1 DD 4E 04 DD +R 00 00 01 00 02 05 03 00 +T B1 09 00 00 46 05 21 06 00 CD 00 00 00 00 38 +R 00 00 01 00 02 0A 2C 00 +T BA 09 00 00 23 +R 00 00 01 00 +T BB 09 00 00 +R 00 00 01 00 +T BB 09 00 00 DD 6E 04 DD 66 05 29 01 +R 00 00 01 00 +T C3 09 00 00 06 00 00 00 09 4E 23 46 C5 0E +R 00 00 01 00 00 04 03 00 +T CB 09 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 04 00 02 0A 04 00 +T D1 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T D7 09 00 00 00 00 00 00 F1 F1 F1 18 19 +R 00 00 01 00 02 04 03 00 +T DE 09 00 00 +R 00 00 01 00 +T DE 09 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T E6 09 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 2F 00 02 0A 2F 00 +T EC 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T F2 09 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 03 00 +T F7 09 00 00 +R 00 00 01 00 +T F7 09 00 00 +R 00 00 01 00 +T F7 09 00 00 DD 4E 04 DD 46 05 21 06 00 CD +R 00 00 01 00 +T 01 0A 00 00 00 00 00 00 DA EC 0A 00 00 +R 00 00 01 00 02 04 2C 00 00 09 01 00 +T 06 0A 00 00 +R 00 00 01 00 +T 06 0A 00 00 DD 6E 04 DD 66 05 DD 4E 02 DD 46 +R 00 00 01 00 +T 11 0A 00 00 03 09 01 06 00 09 7E B7 20 03 +R 00 00 01 00 +T 1B 0A 00 00 +R 00 00 01 00 +T 1B 0A 00 00 C3 05 0B 00 00 +R 00 00 01 00 00 05 01 00 +T 1E 0A 00 00 +R 00 00 01 00 +T 1E 0A 00 00 DD 6E 04 DD 66 05 DD 4E 02 DD 46 +R 00 00 01 00 +T 29 0A 00 00 03 09 01 06 00 09 36 00 3E 01 DD +R 00 00 01 00 +T 34 0A 00 00 AE 04 DD B6 05 C2 EC 0A 00 00 +R 00 00 01 00 00 0A 01 00 +T 3C 0A 00 00 +R 00 00 01 00 +T 3C 0A 00 00 21 0C 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 47 0A 00 00 23 66 6A 11 17 00 19 7E F6 02 77 +R 00 00 01 00 +T 52 0A 00 00 23 7E F6 00 77 21 0C 00 09 56 23 +R 00 00 01 00 +T 5D 0A 00 00 66 6A 11 17 00 19 7E F6 01 77 23 +R 00 00 01 00 +T 68 0A 00 00 7E F6 00 77 01 01 00 21 0C 00 DD +R 00 00 01 00 +T 73 0A 00 00 5E 02 DD 56 03 19 7E 23 66 6F 11 +R 00 00 01 00 +T 7E 0A 00 00 0D 00 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 86 0A 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0C 00 02 0A 03 00 +T 8D 0A 00 00 80 00 E5 21 02 00 E5 01 00 00 21 +R 00 00 01 00 +T 98 0A 00 00 0C 00 DD 5E 02 DD 56 03 19 56 23 +R 00 00 01 00 +T A3 0A 00 00 66 6A 11 0D 00 19 5E 23 56 3E +R 00 00 01 00 +T AD 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3D 00 02 09 3D 00 +T B2 0A 00 00 00 00 00 00 F1 F1 01 01 00 21 +R 00 00 01 00 02 04 03 00 +T BA 0A 00 00 40 00 ED 5B 00 00 00 00 19 5E 23 +R 00 00 01 00 02 08 18 00 +T C3 0A 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T C9 0A 00 00 CD 00 00 00 00 21 80 00 E5 21 +R 00 00 01 00 02 05 03 00 +T D1 0A 00 00 02 00 E5 01 00 00 21 40 00 ED 5B +R 00 00 01 00 +T DC 0A 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 18 00 +T E3 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3D 00 02 09 3D 00 +T E8 0A 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 +T EC 0A 00 00 +R 00 00 01 00 +T EC 0A 00 00 +R 00 00 01 00 +T EC 0A 00 00 DD 6E 04 DD 66 05 E5 01 FE 00 DD +R 00 00 01 00 +T F7 0A 00 00 5E 02 DD 56 03 3E 7F 0C 00 00 21 +R 00 00 01 00 29 0A 01 00 +T FF 0A 00 00 7F 0C 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 00 04 01 00 02 09 03 00 +T 05 0B 00 00 +R 00 00 01 00 +T 05 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 08 0B 00 00 +R 00 00 01 00 +T 08 0B 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 28 00 +T 0E 0B 00 00 04 00 00 00 7D B4 28 5B +R 00 00 01 00 00 04 03 00 +T 14 0B 00 00 +R 00 00 01 00 +T 14 0B 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 3E 00 02 0B 3E 00 +T 1A 0B 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T 20 0B 00 00 CD 00 00 00 00 F1 F1 DD 4E 04 DD +R 00 00 01 00 02 05 03 00 +T 29 0B 00 00 46 05 21 06 00 CD 00 00 00 00 38 +R 00 00 01 00 02 0A 2C 00 +T 32 0B 00 00 23 +R 00 00 01 00 +T 33 0B 00 00 +R 00 00 01 00 +T 33 0B 00 00 DD 6E 04 DD 66 05 29 01 +R 00 00 01 00 +T 3B 0B 00 00 06 00 00 00 09 4E 23 46 C5 0E +R 00 00 01 00 00 04 03 00 +T 43 0B 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 04 00 02 0A 04 00 +T 49 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T 4F 0B 00 00 00 00 00 00 F1 F1 F1 18 19 +R 00 00 01 00 02 04 03 00 +T 56 0B 00 00 +R 00 00 01 00 +T 56 0B 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T 5E 0B 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 2F 00 02 0A 2F 00 +T 64 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T 6A 0B 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 03 00 +T 6F 0B 00 00 +R 00 00 01 00 +T 6F 0B 00 00 +R 00 00 01 00 +T 6F 0B 00 00 DD 4E 04 DD 46 05 3E 03 A9 B0 20 +R 00 00 01 00 +T 7A 0B 00 00 2C +R 00 00 01 00 +T 7B 0B 00 00 +R 00 00 01 00 +T 7B 0B 00 00 DD 6E 04 DD 66 05 DD 4E 02 DD 46 +R 00 00 01 00 +T 86 0B 00 00 03 09 46 05 20 02 +R 00 00 01 00 +T 8C 0B 00 00 +R 00 00 01 00 +T 8C 0B 00 00 18 3D +R 00 00 01 00 +T 8E 0B 00 00 +R 00 00 01 00 +T 8E 0B 00 00 DD 6E 04 DD 66 05 DD 4E 02 DD 46 +R 00 00 01 00 +T 99 0B 00 00 03 09 36 01 DD 36 FE FB DD 36 FF +R 00 00 01 00 +T A4 0B 00 00 00 18 08 +R 00 00 01 00 +T A7 0B 00 00 +R 00 00 01 00 +T A7 0B 00 00 DD 36 FE FC DD 36 FF 00 +R 00 00 01 00 +T AF 0B 00 00 +R 00 00 01 00 +T AF 0B 00 00 DD 6E 04 DD 66 05 E5 DD 4E FE DD +R 00 00 01 00 +T BA 0B 00 00 46 FF DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T C3 0B 00 00 7F 0C 00 00 21 7F 0C 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T C8 0B 00 00 00 00 00 00 E1 +R 00 00 01 00 02 04 03 00 +T CB 0B 00 00 +R 00 00 01 00 +T CB 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T CE 0B 00 00 +R 00 00 01 00 +T CE 0B 00 00 CD 00 00 00 00 2A 04 00 00 00 7D +R 00 00 01 00 02 05 22 00 00 0A 03 00 +T D5 0B 00 00 B4 28 5B +R 00 00 01 00 +T D8 0B 00 00 +R 00 00 01 00 +T D8 0B 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 2E 00 02 0B 2E 00 +T DE 0B 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T E4 0B 00 00 CD 00 00 00 00 F1 F1 DD 4E 04 DD +R 00 00 01 00 02 05 03 00 +T ED 0B 00 00 46 05 21 06 00 CD 00 00 00 00 38 +R 00 00 01 00 02 0A 2C 00 +T F6 0B 00 00 23 +R 00 00 01 00 +T F7 0B 00 00 +R 00 00 01 00 +T F7 0B 00 00 DD 6E 04 DD 66 05 29 01 +R 00 00 01 00 +T FF 0B 00 00 06 00 00 00 09 4E 23 46 C5 0E +R 00 00 01 00 00 04 03 00 +T 07 0C 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 04 00 02 0A 04 00 +T 0D 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T 13 0C 00 00 00 00 00 00 F1 F1 F1 18 19 +R 00 00 01 00 02 04 03 00 +T 1A 0C 00 00 +R 00 00 01 00 +T 1A 0C 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T 22 0C 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 2F 00 02 0A 2F 00 +T 28 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T 2E 0C 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 03 00 +T 33 0C 00 00 +R 00 00 01 00 +T 33 0C 00 00 +R 00 00 01 00 +T 33 0C 00 00 DD 4E 04 DD 46 05 21 06 00 CD +R 00 00 01 00 +T 3D 0C 00 00 00 00 00 00 38 22 +R 00 00 01 00 02 04 2C 00 +T 41 0C 00 00 +R 00 00 01 00 +T 41 0C 00 00 DD 6E 04 DD 66 05 DD 4E 02 DD 46 +R 00 00 01 00 +T 4C 0C 00 00 03 09 7E B7 20 02 +R 00 00 01 00 +T 52 0C 00 00 +R 00 00 01 00 +T 52 0C 00 00 18 28 +R 00 00 01 00 +T 54 0C 00 00 +R 00 00 01 00 +T 54 0C 00 00 DD 6E 04 DD 66 05 DD 4E 02 DD 46 +R 00 00 01 00 +T 5F 0C 00 00 03 09 36 00 +R 00 00 01 00 +T 63 0C 00 00 +R 00 00 01 00 +T 63 0C 00 00 DD 6E 04 DD 66 05 E5 01 FC 00 DD +R 00 00 01 00 +T 6E 0C 00 00 5E 02 DD 56 03 3E 7F 0C 00 00 21 +R 00 00 01 00 29 0A 01 00 +T 76 0C 00 00 7F 0C 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 00 04 01 00 02 09 03 00 +T 7C 0C 00 00 +R 00 00 01 00 +T 7C 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 7F 0C 00 00 +R 00 00 01 00 +T 7F 0C 00 00 CD 00 00 00 00 2A 04 00 00 00 7D +R 00 00 01 00 02 05 22 00 00 0A 03 00 +T 86 0C 00 00 B4 CA 37 0D 00 00 +R 00 00 01 00 00 06 01 00 +T 8A 0C 00 00 +R 00 00 01 00 +T 8A 0C 00 00 DD 5E 04 DD 56 05 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 93 0C 00 00 FB 00 04 00 ED 0C 00 00 +R 00 00 01 00 00 08 01 00 +T 99 0C 00 00 A1 0C 00 00 B4 0C 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 9D 0C 00 00 C7 0C 00 00 DA 0C 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A1 0C 00 00 +R 00 00 01 00 +T A1 0C 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 11 00 02 0B 11 00 +T A7 0C 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T AD 0C 00 00 CD 00 00 00 00 F1 F1 18 39 +R 00 00 01 00 02 05 03 00 +T B4 0C 00 00 +R 00 00 01 00 +T B4 0C 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 35 00 02 0B 35 00 +T BA 0C 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T C0 0C 00 00 CD 00 00 00 00 F1 F1 18 26 +R 00 00 01 00 02 05 03 00 +T C7 0C 00 00 +R 00 00 01 00 +T C7 0C 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T CD 0C 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T D3 0C 00 00 CD 00 00 00 00 F1 F1 18 13 +R 00 00 01 00 02 05 03 00 +T DA 0C 00 00 +R 00 00 01 00 +T DA 0C 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 38 00 02 0B 38 00 +T E0 0C 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2D 00 02 0B 2D 00 +T E6 0C 00 00 CD 00 00 00 00 F1 F1 18 00 +R 00 00 01 00 02 05 03 00 +T ED 0C 00 00 +R 00 00 01 00 +T ED 0C 00 00 DD 4E 0A DD 46 0B 21 06 00 CD +R 00 00 01 00 +T F7 0C 00 00 00 00 00 00 38 23 +R 00 00 01 00 02 04 2C 00 +T FB 0C 00 00 +R 00 00 01 00 +T FB 0C 00 00 DD 6E 0A DD 66 0B 29 01 +R 00 00 01 00 +T 03 0D 00 00 06 00 00 00 09 4E 23 46 C5 0E +R 00 00 01 00 00 04 03 00 +T 0B 0D 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 04 00 02 0A 04 00 +T 11 0D 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T 17 0D 00 00 00 00 00 00 F1 F1 F1 18 19 +R 00 00 01 00 02 04 03 00 +T 1E 0D 00 00 +R 00 00 01 00 +T 1E 0D 00 00 DD 6E 0A DD 66 0B E5 0E +R 00 00 01 00 +T 26 0D 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 2F 00 02 0A 2F 00 +T 2C 0D 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2D 00 02 0A 2D 00 +T 32 0D 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 03 00 +T 37 0D 00 00 +R 00 00 01 00 +T 37 0D 00 00 +R 00 00 01 00 +T 37 0D 00 00 DD 6E 0A DD 66 0B E5 DD 6E 04 DD +R 00 00 01 00 +T 42 0D 00 00 66 05 E5 21 FF 00 E5 0E +R 00 00 01 00 +T 4A 0D 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 3A 00 02 0A 3A 00 +T 50 0D 00 00 21 0C 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 5B 0D 00 00 23 66 6A 11 0D 00 19 5E 23 56 D5 +R 00 00 01 00 +T 66 0D 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 14 00 02 0A 14 00 +T 6C 0D 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 03 00 +T 75 0D 00 00 21 0C 00 09 46 23 66 68 01 0D 00 +R 00 00 01 00 +T 80 0D 00 00 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T 87 0D 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 07 00 02 09 03 00 +T 8D 0D 00 00 00 00 00 00 +R 00 00 01 00 02 04 10 00 +T 8F 0D 00 00 +R 00 00 01 00 +T 8F 0D 00 00 CD 00 00 00 00 3E 03 AB B2 28 05 +R 00 00 01 00 02 05 22 00 +T 98 0D 00 00 +R 00 00 01 00 +T 98 0D 00 00 21 01 00 18 37 +R 00 00 01 00 +T 9D 0D 00 00 +R 00 00 01 00 +T 9D 0D 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 2B 00 02 0B 2B 00 +T A3 0D 00 00 E5 21 1B 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 24 00 +T AC 0D 00 00 5E 23 56 D5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 14 00 +T B3 0D 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 14 00 02 09 03 00 +T BA 0D 00 00 F1 01 6B 00 21 07 00 ED 5B +R 00 00 01 00 +T C3 0D 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 24 00 +T CA 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T CF 0D 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 03 00 +T D4 0D 00 00 +R 00 00 01 00 +T D4 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 54 72 61 6E 73 6D 69 74 20 42 69 +R 00 00 02 00 +T 0B 00 00 00 6E 61 72 79 00 +R 00 00 02 00 +T 10 00 00 00 +R 00 00 02 00 +T 10 00 00 00 45 63 68 6F 00 +R 00 00 02 00 +T 15 00 00 00 +R 00 00 02 00 +T 15 00 00 00 00 +R 00 00 02 00 +T 16 00 00 00 +R 00 00 02 00 +T 16 00 00 00 53 75 70 70 72 65 73 73 20 47 6F +R 00 00 02 00 +T 21 00 00 00 20 41 68 65 61 64 00 +R 00 00 02 00 +T 28 00 00 00 +R 00 00 02 00 +T 28 00 00 00 53 74 61 74 75 73 00 +R 00 00 02 00 +T 2F 00 00 00 +R 00 00 02 00 +T 2F 00 00 00 54 69 6D 69 6E 67 20 4D 61 72 6B +R 00 00 02 00 +T 3A 00 00 00 00 +R 00 00 02 00 +T 3B 00 00 00 +R 00 00 02 00 +T 3B 00 00 00 72 2B 74 00 +R 00 00 02 00 +T 3F 00 00 00 +R 00 00 02 00 +T 3F 00 00 00 63 6F 6E 6E 65 63 74 20 66 61 69 +R 00 00 02 00 +T 4A 00 00 00 6C 65 64 00 +R 00 00 02 00 +T 4E 00 00 00 +R 00 00 02 00 +T 4E 00 00 00 74 65 6C 5F 6F 75 74 00 +R 00 00 02 00 +T 56 00 00 00 +R 00 00 02 00 +T 56 00 00 00 45 4F 46 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 00 0A 02 00 +T 08 00 00 00 10 00 00 00 15 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0C 00 00 00 16 00 00 00 15 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 10 00 00 00 28 00 00 00 2F 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 diff --git a/src/nos/lib/crt0_banked.lst b/src/nos/lib/crt0_banked.lst new file mode 100644 index 00000000..edd7b904 --- /dev/null +++ b/src/nos/lib/crt0_banked.lst @@ -0,0 +1,332 @@ + 1 ; crt0b.asm by Nick for UZI180 banked memory model + 2 + 3 ; ----------------------------------------------------------------------------- + 4 + 00000000 5 .if 0 + 6 $ io64180.s01 + 7 .endif + 8 + 9 module _c0b + 10 + 11 public init + 12 extern _main + 13 extern _exit + 14 + 15 extern l__DEFAULT ; e_hsize + 16 extern s_RCODE ; e_idata + 17 extern s_UDATA0 ; e_udata + 18 extern s_CSTACK ; e_stack + 19 extern e_CSTACK ; e_break + 20 + 00000001 21 .if 1 + 22 extern ?BANK_CALL_DIRECT_L08 + 23 .endif + 24 + 0000A6C9 25 E_MAGIC equ 0a6c9h + 00000002 26 E_FORMAT_BANKED equ 2 + 00001000 27 E_STACK_SIZE equ 1000h + 28 + 29 ; ----------------------------------------------------------------------------- + 30 ; forward definitions of segments, to set the linkage order (c0l must be first) + 31 + 32 rseg RCODE + 33 ; rseg TEMP + 34 ; rseg DATA0 + 35 ; rseg WCSTR + 36 rseg CONST + 37 rseg CSTR + 38 rseg IDATA0(NUL) + 39 rseg CDATA0 + 40 rseg ECSTR(NUL) + 41 rseg CCSTR + 42 rseg CODE(NUL) ; needs to be at end for banked model + 43 rseg UDATA0 + 44 rseg CSTACK + 45 + 46 ; ----------------------------------------------------------------------------- + 47 + 00000001 48 .if 1 + 49 rseg _DEFAULT ; means header is discarded at loading + 50 .else + 51 rseg RCODE ; means header is visible to loaded pgm + 52 .endif + 53 + 00000001 54 .if 1 + 00000000 C9 A6 55 defw E_MAGIC ; e_magic + 00000002 02 00 56 defw E_FORMAT_BANKED ; e_format + 00000004 78 56 34 12 57 defd 12345678h ; e_size + 00000008 00 00 58 defw l__DEFAULT ; e_hsize + 0000000A 00 00 59 defw s_RCODE ; e_idata + 0000000C 00 00 60 defw init ; e_entry + 0000000E 00 00 61 defw s_UDATA0 ; e_udata + 00000010 00 00 62 defw s_CSTACK ; e_stack + 00000012 00 00 63 defw e_CSTACK ; e_break + 64 .else + 65 jp init + 66 .endif + 67 + 68 ; ----------------------------------------------------------------------------- + 69 + 70 rseg RCODE + 71 + 00000000 72 init:: + 00000000 73 .if 0 + 74 ld a,'A' + 75 call abyte + 76 .endif + 77 + 00000000 78 .if 0 + 79 ld de,.sfb.CSTACK ; 1st argument to _brk() + 80 + 00000000 81 .if 0 + 82 ld hl,LWRD _brk + 83 ld a,BYTE3 _brk + 84 call ?BANK_CALL_DIRECT_L08 + 85 .else + 86 call _brk + 87 .endif + 88 + 89 call seg_init + 90 .endif + 91 + 92 ; now there are the next stack structure: + 93 ; +4 envp + 94 ; +2 argv + 95 ; sp-> +0 argc + 00000001 96 .if 1 + 00000000 D1 97 pop de + 00000001 ED 53 00 00 98 ld (__argc),de ; 2nd argument to _main + 00000005 C1 99 pop bc + 00000006 ED 43 02 00 100 ld (__argv),bc ; 1st argument to _main + 0000000A E1 101 pop hl + 0000000B 22 04 00 102 ld (_environ),hl + 103 .else + 104 ld ix,0 + 105 add ix,sp + 106 ld l,(ix+4) + 107 ld h,(ix+5) + 108 ld (_environ),hl + 109 ld c,(ix+2) + 110 ld b,(ix+3) + 111 ld (__argv),bc ; 1st argument to _main + 112 ld e,(ix+0) + 113 ld d,(ix+1) + 114 ld (__argc),de ; 2nd argument to _main + 115 .endif + 116 + 00000001 117 .if 1 + 0000000E 21 00 00 118 ld HL,LWRD _main ; banked call to main() + 00000011 3E 00 119 ld A,BYTE3 _main + 00000013 CD 00 00 120 call ?BANK_CALL_DIRECT_L08 + 121 .else + 122 call _main ; non-banked call to main() + 123 .endif + 124 + 00000016 EB 125 ex de,hl ; de = exitcode (1st argument to exit) + 126 + 00000001 127 .if 1 + 00000017 21 00 00 128 ld HL,LWRD _exit ; banked call to exit() + 0000001A 3E 00 129 ld A,BYTE3 _exit + 0000001C C3 00 00 130 jp ?BANK_CALL_DIRECT_L08 + 131 .else + 132 jp _exit ; non-banked call to exit() + 133 .endif + 134 + 135 ; ----------------------------------------------------------------------------- + 136 + 00000000 137 .if 0 + 138 seg_init: + 139 ld HL,.sfe.UDATA0 + 140 ld DE,.sfb.UDATA0 + 141 call zero_mem + 142 + 143 ld DE,.sfb.IDATA0 ; destination address + 144 ld HL,.sfe.CDATA0 ;+4000h ; really 8:0000 + .sfe.CDATA0 + 145 ld BC,.sfb.CDATA0 ;+4000h ; really 8:0000 + .sfb.CDATA0 + 146 call copy_mem + 147 + 148 ld DE,.sfb.ECSTR ; destination address + 149 ld HL,.sfe.CCSTR ;+4000h ; really 8:0000 + .sfe.CCSTR + 150 ld BC,.sfb.CCSTR ;+4000h ; really 8:0000 + .sfb.CCSTR + 151 + 152 ; Just fall in to the copy_mem function + 153 + 154 copy_mem: + 155 XOR A + 156 SBC HL,BC + 157 PUSH BC + 158 LD C,L + 159 LD B,H ; BC - that many bytes + 160 POP HL ; source address + 161 RET Z ; If block size = 0 return now + 162 LDIR + 163 RET + 164 + 165 zero_mem: + 166 XOR A + 167 again: PUSH HL + 168 SBC HL,DE + 169 POP HL + 170 RET Z + 171 LD (DE),A + 172 INC DE + 173 JR again + 174 .endif + 175 + 176 ; ----------------------------------------------------------------------------- + 177 + 00000000 178 .if 0 + 179 public _abyte + 180 + 181 _abyte:: + 00000000 182 .if 0 ; SDCC + 183 ld hl,2 + 184 add hl,sp + 185 ld a,(hl) + 186 .else ; IAR + 187 ld a,e + 188 .endif + 189 + 190 public abyte + 191 + 192 abyte:: + 00000000 193 .if 0 + 194 ret + 195 .else + 196 push af + 197 .endif + 198 + 199 L1$: in0 a,(STAT1) + 200 and 10b + 201 jr z,L1$ + 202 + 203 pop af + 204 out0 (TDR1),a + 205 + 00000000 206 .if 0 + 207 di + 208 .endif + 00000000 209 .if 0 + 210 ei + 211 .endif + 212 ret + 213 + 214 public _acrlf + 215 + 216 _acrlf:: + 217 + 218 public acrlf + 219 + 220 acrlf:: + 221 ld a,0dh + 222 call abyte + 223 ld a,0ah + 224 jr abyte + 225 + 226 public _ahexw + 227 + 228 _ahexw:: + 00000000 229 .if 0 ; SDCC + 230 ld hl,2 + 231 add hl,sp + 232 ld e,(hl) + 233 inc hl + 234 ld d,(hl) + 235 .endif + 236 ex de,hl + 237 + 238 public ahexw + 239 + 240 ahexw:: + 241 ld a,h + 242 call ahexb + 243 ld a,l + 244 + 245 public ahexb + 246 + 247 ahexb:: + 248 push af + 249 rrca + 250 rrca + 251 rrca + 252 rrca + 253 call ahexn + 254 pop af + 255 + 256 public ahexn + 257 + 258 ahexn:: + 259 and 0fh + 260 add a,90h + 261 daa + 262 adc a,40h + 263 daa + 264 jr abyte + 265 + 266 public amess + 267 + 268 amess:: + 269 ex (sp),hl + 270 push af + 271 + 272 L01$: ld a,(hl) + 273 inc hl + 274 or a + 275 jr z,L02$ + 276 + 277 call abyte + 278 jr L01$ + 279 + 280 L02$: pop af + 281 ex (sp),hl + 282 ret + 283 .endif + 284 + 285 ; ----------------------------------------------------------------------------- + 286 + 287 public __argc, __argv, _environ, _errno, ___cleanup + 288 + 289 rseg UDATA0 + 00000000 290 __argc: defs 2 + 00000002 291 __argv: defs 2 + 00000004 292 _environ: defs 2 + 00000006 293 _errno: defs 2 + 00000008 294 ___cleanup: defs 3 ; oopsy 2 + 295 + 296 rseg CSTACK + 00000000 297 defs E_STACK_SIZE + 298 + 299 ; ----------------------------------------------------------------------------- + 300 + 00001000 301 END + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1. +Hexadecimal [32-Bits] + +Symbol Table + + .__.ABS. = 00000000 G | ?BANK_CALL_DIR ******** GX + E_FORMAT_BANKE = 00000002 | E_MAGIC = 0000A6C9 + E_STACK_SIZE = 00001000 | 9 ___cleanup 00000008 GR + 9 __argc 00000000 GR | 9 __argv 00000002 GR + 9 _environ 00000004 GR | 9 _errno 00000006 GR + _exit ******** GX | _main ******** GX + e_CSTACK ******** GX | 1 init 00000000 GR + l__DEFAULT ******** GX | s_CSTACK ******** GX + s_RCODE ******** GX | s_UDATA0 ******** GX + + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2. +Hexadecimal [32-Bits] + +Area Table + + 0 _DEFAULT size 14 flags 0 + 1 RCODE size 1F flags 0 + 2 CONST size 0 flags 0 + 3 CSTR size 0 flags 0 + 4 IDATA0 size 0 flags 1 + 5 CDATA0 size 0 flags 0 + 6 ECSTR size 0 flags 1 + 7 CCSTR size 0 flags 0 + 8 CODE size 0 flags 1 + 9 UDATA0 size B flags 0 + A CSTACK size 1000 flags 0 diff --git a/src/nos/lib/crt0_banked.rel b/src/nos/lib/crt0_banked.rel new file mode 100644 index 00000000..39d75320 --- /dev/null +++ b/src/nos/lib/crt0_banked.rel @@ -0,0 +1,61 @@ +XL4 +H B areas F global symbols +M _c0b +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _main Ref00000000 +S s_CSTACK Ref00000000 +S _exit Ref00000000 +S .__.ABS. Def00000000 +S l__DEFAULT Ref00000000 +S s_UDATA0 Ref00000000 +S e_CSTACK Ref00000000 +S s_RCODE Ref00000000 +A _DEFAULT size 14 flags 0 +A RCODE size 1F flags 0 +S init Def00000000 +A CONST size 0 flags 0 +A CSTR size 0 flags 0 +A IDATA0 size 0 flags 1 +A CDATA0 size 0 flags 0 +A ECSTR size 0 flags 1 +A CCSTR size 0 flags 0 +A CODE size 0 flags 1 +A UDATA0 size B flags 0 +S ___cleanup Def00000008 +S _errno Def00000006 +S __argc Def00000000 +S _environ Def00000004 +S __argv Def00000002 +A CSTACK size 1000 flags 0 +T 00 00 00 00 C9 A6 02 00 78 56 34 12 +R 00 00 00 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 00 00 02 04 05 00 02 08 08 00 +T 0C 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 00 00 00 04 01 00 02 08 06 00 +T 10 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 00 00 02 04 02 00 02 08 07 00 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D1 ED 53 00 00 00 00 C1 ED 43 +R 00 00 01 00 00 07 09 00 +T 08 00 00 00 02 00 00 00 E1 22 04 00 00 00 21 +R 00 00 01 00 00 04 09 00 00 0A 09 00 +T 0F 00 00 00 00 00 00 00 3E 00 00 00 00 CD +R 00 00 01 00 02 04 01 00 2B 09 01 00 +T 14 00 00 00 00 00 00 00 EB 21 00 00 00 00 3E +R 00 00 01 00 02 04 00 00 02 0A 03 00 +T 1B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 2B 04 03 00 02 09 00 00 +T 00 00 00 00 +R 00 00 09 00 +T 02 00 00 00 +R 00 00 09 00 +T 04 00 00 00 +R 00 00 09 00 +T 06 00 00 00 +R 00 00 09 00 +T 08 00 00 00 +R 00 00 09 00 +T 00 00 00 00 +R 00 00 0A 00 diff --git a/src/nos/lib/crt0_large.lst b/src/nos/lib/crt0_large.lst new file mode 100644 index 00000000..a921d23f --- /dev/null +++ b/src/nos/lib/crt0_large.lst @@ -0,0 +1,335 @@ + 1 ; crt0l.asm by Nick for UZI180 large memory model + 2 + 3 ; ----------------------------------------------------------------------------- + 4 + 00000000 5 .if 0 + 6 $ io64180.s01 + 7 .endif + 8 + 9 module _c0l + 10 + 11 public __init ; vendor _init + 00000000 12 .if 0 + 13 extern brk ; vendor _brk + 14 .endif + 15 extern main ; vendor _main + 16 extern exit ; vendor _exit + 17 + 18 extern l__DEFAULT ; e_hsize + 19 extern s_RCODE ; e_idata + 20 extern s_UDATA0 ; e_udata + 21 extern s_CSTACK ; e_stack + 22 extern e_CSTACK ; e_break + 23 + 00000000 24 .if 0 + 25 extern ?BANK_CALL_DIRECT_L08 + 26 .endif + 27 + 0000A6C9 28 E_MAGIC equ 0a6c9h + 00000001 29 E_FORMAT_LARGE equ 1 + 00001000 30 E_STACK_SIZE equ 1000h + 31 + 32 ; ----------------------------------------------------------------------------- + 33 ; forward definitions of segments, to set the linkage order (c0l must be first) + 34 + 35 rseg RCODE + 36 rseg CODE ; needs to be at start for large model + 37 ; rseg TEMP + 38 ; rseg DATA0 + 39 ; rseg WCSTR + 40 rseg CONST + 41 rseg CSTR + 42 rseg IDATA0(NUL) + 43 rseg CDATA0 + 44 rseg ECSTR(NUL) + 45 rseg CCSTR + 46 rseg UDATA0 + 47 rseg CSTACK + 48 + 49 ; ----------------------------------------------------------------------------- + 50 + 00000001 51 .if 1 + 52 rseg _DEFAULT ; means header is discarded at loading + 53 .else + 54 rseg RCODE ; means header is visible to loaded pgm + 55 .endif + 56 + 00000001 57 .if 1 + 00000000 C9 A6 58 defw E_MAGIC ; e_magic + 00000002 01 00 59 defw E_FORMAT_LARGE ; e_format + 00000004 78 56 34 12 60 defd 12345678h ; e_size + 00000008 00 00 61 defw l__DEFAULT ; e_hsize + 0000000A 00 00 62 defw s_RCODE ; e_idata + 0000000C 00 00 63 defw __init ; e_entry + 0000000E 00 00 64 defw s_UDATA0 ; e_udata + 00000010 00 00 65 defw s_CSTACK ; e_stack + 00000012 00 00 66 defw e_CSTACK ; e_break + 67 .else + 68 jp __init + 69 .endif + 70 + 71 ; ----------------------------------------------------------------------------- + 72 + 73 rseg RCODE + 74 + 00000000 75 __init:: + 00000000 76 .if 0 + 77 ld a,'A' + 78 call abyte + 79 .endif + 80 + 00000000 81 .if 0 + 82 ld de,.sfb.CSTACK ; 1st argument to brk() + 83 + 00000000 84 .if 0 + 85 ld hl,LWRD brk + 86 ld a,BYTE3 brk + 87 call ?BANK_CALL_DIRECT_L08 + 88 .else + 89 call brk + 90 .endif + 91 + 92 call seg_init + 93 .endif + 94 + 95 ; now there are the next stack structure: + 96 ; +4 envp + 97 ; +2 argv + 98 ; sp-> +0 argc + 00000001 99 .if 1 + 00000000 D1 100 pop de + 00000001 ED 53 00 00 101 ld (_argc),de ; vendor __argc (2nd argument to main) + 00000005 C1 102 pop bc + 00000006 ED 43 02 00 103 ld (_argv),bc ; vendor __argv (1st argument to main) + 0000000A E1 104 pop hl + 0000000B 22 04 00 105 ld (environ),hl ; vendor _environ + 106 .else + 107 ld ix,0 + 108 add ix,sp + 109 ld l,(ix+4) + 110 ld h,(ix+5) + 111 ld (environ),hl ; vendor _environ + 112 ld c,(ix+2) + 113 ld b,(ix+3) + 114 ld (_argv),bc ; vendor __argv (1st argument to main) + 115 ld e,(ix+0) + 116 ld d,(ix+1) + 117 ld (_argc),de ; vendor __argc (2nd argument to main) + 118 .endif + 119 + 00000000 120 .if 0 + 121 ld HL,LWRD main ; banked call to _main() + 122 ld A,BYTE3 main + 123 call ?BANK_CALL_DIRECT_L08 + 124 .else + 0000000E CD 00 00 125 call main ; vendor _main ; non-banked call to _main() + 126 .endif + 127 + 00000011 EB 128 ex de,hl ; de = exitcode (1st argument to exit) + 129 + 00000000 130 .if 0 + 131 ld HL,LWRD exit ; banked call to _exit() + 132 ld A,BYTE3 exit + 133 jp ?BANK_CALL_DIRECT_L08 + 134 .else + 00000012 C3 00 00 135 jp exit ; vendor _exit ; non-banked call to _exit() + 136 .endif + 137 + 138 ; ----------------------------------------------------------------------------- + 139 + 00000000 140 .if 0 + 141 seg_init: + 142 ld HL,.sfe.UDATA0 + 143 ld DE,.sfb.UDATA0 + 144 call zero_mem + 145 + 146 ld DE,.sfb.IDATA0 ; destination address + 147 ld HL,.sfe.CDATA0 ;+4000h ; really 8:0000 + .sfe.CDATA0 + 148 ld BC,.sfb.CDATA0 ;+4000h ; really 8:0000 + .sfb.CDATA0 + 149 call copy_mem + 150 + 151 ld DE,.sfb.ECSTR ; destination address + 152 ld HL,.sfe.CCSTR ;+4000h ; really 8:0000 + .sfe.CCSTR + 153 ld BC,.sfb.CCSTR ;+4000h ; really 8:0000 + .sfb.CCSTR + 154 + 155 ; Just fall in to the copy_mem function + 156 + 157 copy_mem: + 158 XOR A + 159 SBC HL,BC + 160 PUSH BC + 161 LD C,L + 162 LD B,H ; BC - that many bytes + 163 POP HL ; source address + 164 RET Z ; If block size = 0 return now + 165 LDIR + 166 RET + 167 + 168 zero_mem: + 169 XOR A + 170 again: PUSH HL + 171 SBC HL,DE + 172 POP HL + 173 RET Z + 174 LD (DE),A + 175 INC DE + 176 JR again + 177 .endif + 178 + 179 ; ----------------------------------------------------------------------------- + 180 + 00000000 181 .if 0 + 182 public _abyte + 183 + 184 _abyte:: + 00000000 185 .if 0 ; SDCC + 186 ld hl,2 + 187 add hl,sp + 188 ld a,(hl) + 189 .else ; IAR + 190 ld a,e + 191 .endif + 192 + 193 public abyte + 194 + 195 abyte:: + 00000000 196 .if 0 + 197 ret + 198 .else + 199 push af + 200 .endif + 201 + 202 L1$: in0 a,(STAT1) + 203 and 10b + 204 jr z,L1$ + 205 + 206 pop af + 207 out0 (TDR1),a + 208 + 00000000 209 .if 0 + 210 di + 211 .endif + 00000000 212 .if 0 + 213 ei + 214 .endif + 215 ret + 216 + 217 public _acrlf + 218 + 219 _acrlf:: + 220 + 221 public acrlf + 222 + 223 acrlf:: + 224 ld a,0dh + 225 call abyte + 226 ld a,0ah + 227 jr abyte + 228 + 229 public _ahexw + 230 + 231 _ahexw:: + 00000000 232 .if 0 ; SDCC + 233 ld hl,2 + 234 add hl,sp + 235 ld e,(hl) + 236 inc hl + 237 ld d,(hl) + 238 .endif + 239 ex de,hl + 240 + 241 public ahexw + 242 + 243 ahexw:: + 244 ld a,h + 245 call ahexb + 246 ld a,l + 247 + 248 public ahexb + 249 + 250 ahexb:: + 251 push af + 252 rrca + 253 rrca + 254 rrca + 255 rrca + 256 call ahexn + 257 pop af + 258 + 259 public ahexn + 260 + 261 ahexn:: + 262 and 0fh + 263 add a,90h + 264 daa + 265 adc a,40h + 266 daa + 267 jr abyte + 268 + 269 public amess + 270 + 271 amess:: + 272 ex (sp),hl + 273 push af + 274 + 275 L01$: ld a,(hl) + 276 inc hl + 277 or a + 278 jr z,L02$ + 279 + 280 call abyte + 281 jr L01$ + 282 + 283 L02$: pop af + 284 ex (sp),hl + 285 ret + 286 .endif + 287 + 288 ; ----------------------------------------------------------------------------- + 289 + 290 public _argc, _argv, environ, errno, __cleanup + 291 ;public __argc, __argv, _environ, _errno, ___cleanup + 292 + 293 rseg UDATA0 + 00000000 294 _argc: defs 2 ; vendor __argc + 00000002 295 _argv: defs 2 ; vendor __argv + 00000004 296 environ: defs 2 ; vendor _environ + 00000006 297 errno: defs 2 ; vendor _errno + 00000008 298 __cleanup: defs 2 ; vendor ___cleanup + 299 + 300 rseg CSTACK + 00000000 301 defs E_STACK_SIZE + 302 + 303 ; ----------------------------------------------------------------------------- + 304 + 00001000 305 END + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 1. +Hexadecimal [32-Bits] + +Symbol Table + + .__.ABS. = 00000000 G | E_FORMAT_LARGE = 00000001 + E_MAGIC = 0000A6C9 | E_STACK_SIZE = 00001000 + 9 __cleanup 00000008 GR | 1 __init 00000000 GR + 9 _argc 00000000 GR | 9 _argv 00000002 GR + e_CSTACK ******** GX | 9 environ 00000004 GR + 9 errno 00000006 GR | exit ******** GX + l__DEFAULT ******** GX | main ******** GX + s_CSTACK ******** GX | s_RCODE ******** GX + s_UDATA0 ******** GX + ASxxxx Assembler V03.11 (Zilog Z80 / Hitachi HD64180), page 2. +Hexadecimal [32-Bits] + +Area Table + + 0 _DEFAULT size 14 flags 0 + 1 RCODE size 15 flags 0 + 2 CODE size 0 flags 0 + 3 CONST size 0 flags 0 + 4 CSTR size 0 flags 0 + 5 IDATA0 size 0 flags 1 + 6 CDATA0 size 0 flags 0 + 7 ECSTR size 0 flags 1 + 8 CCSTR size 0 flags 0 + 9 UDATA0 size A flags 0 + A CSTACK size 1000 flags 0 diff --git a/src/nos/lib/crt0_large.rel b/src/nos/lib/crt0_large.rel new file mode 100644 index 00000000..c88e76ca --- /dev/null +++ b/src/nos/lib/crt0_large.rel @@ -0,0 +1,56 @@ +XL4 +H B areas E global symbols +M _c0l +S s_CSTACK Ref00000000 +S .__.ABS. Def00000000 +S main Ref00000000 +S l__DEFAULT Ref00000000 +S s_UDATA0 Ref00000000 +S exit Ref00000000 +S e_CSTACK Ref00000000 +S s_RCODE Ref00000000 +A _DEFAULT size 14 flags 0 +A RCODE size 15 flags 0 +S __init Def00000000 +A CODE size 0 flags 0 +A CONST size 0 flags 0 +A CSTR size 0 flags 0 +A IDATA0 size 0 flags 1 +A CDATA0 size 0 flags 0 +A ECSTR size 0 flags 1 +A CCSTR size 0 flags 0 +A UDATA0 size A flags 0 +S environ Def00000004 +S _argv Def00000002 +S __cleanup Def00000008 +S errno Def00000006 +S _argc Def00000000 +A CSTACK size 1000 flags 0 +T 00 00 00 00 C9 A6 01 00 78 56 34 12 +R 00 00 00 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 00 00 02 04 03 00 02 08 07 00 +T 0C 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 00 00 00 04 01 00 02 08 04 00 +T 10 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 00 00 02 04 00 00 02 08 06 00 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D1 ED 53 00 00 00 00 C1 ED 43 +R 00 00 01 00 00 07 09 00 +T 08 00 00 00 02 00 00 00 E1 22 04 00 00 00 CD +R 00 00 01 00 00 04 09 00 00 0A 09 00 +T 0F 00 00 00 00 00 00 00 EB C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 0A 05 00 +T 00 00 00 00 +R 00 00 09 00 +T 02 00 00 00 +R 00 00 09 00 +T 04 00 00 00 +R 00 00 09 00 +T 06 00 00 00 +R 00 00 09 00 +T 08 00 00 00 +R 00 00 09 00 +T 00 00 00 00 +R 00 00 0A 00 diff --git a/src/nos/lib/crt_banked.lib b/src/nos/lib/crt_banked.lib new file mode 100644 index 00000000..2018c790 --- /dev/null +++ b/src/nos/lib/crt_banked.lib @@ -0,0 +1,342 @@ +crt_banked_lib/abort.rel + _abort +crt_banked_lib/alloca.rel + _alloca +crt_banked_lib/asctime.rel + ___asctime + _asctime +crt_banked_lib/assert.rel + ___assert + ___errput +crt_banked_lib/atexit.rel + _atexit + _on_exit + ___on_exit_table + ___on_exit_count +crt_banked_lib/atoi.rel + _atoi +crt_banked_lib/atol.rel + _atol +crt_banked_lib/bsearch.rel + _bsearch + __bsearch +crt_banked_lib/calloc.rel + _calloc +crt_banked_lib/clock.rel + _clock +crt_banked_lib/closedir.rel + _closedir +crt_banked_lib/convtime.rel + _convtime +crt_banked_lib/crypt.rel + _crypt +crt_banked_lib/ctime.rel + _ctime +crt_banked_lib/ctype.rel + _tolower + _toupper + ___ctype +crt_banked_lib/difftime.rel + _difftime +crt_banked_lib/error.rel + _strerror + ___sys_errlist + ___sys_nerr +crt_banked_lib/etime.rel + _etime + _dout + _ediff +crt_banked_lib/execl.rel + __findPath + _execl +crt_banked_lib/execle.rel + _execle +crt_banked_lib/execlp.rel + _execlp +crt_banked_lib/execlpe.rel + _execlpe +crt_banked_lib/exect.rel + _exect +crt_banked_lib/execv.rel + _execv +crt_banked_lib/execvp.rel + _execvp +crt_banked_lib/execvpe.rel + _execvpe +crt_banked_lib/exit.rel + _exit +crt_banked_lib/fclose.rel + _fclose +crt_banked_lib/fflush.rel + _fflush +crt_banked_lib/fgetc.rel + _fgetc +crt_banked_lib/fgetgren.rel + _fgetgrent +crt_banked_lib/fgetpwen.rel + _fgetpwent +crt_banked_lib/fgets.rel + _fgets +crt_banked_lib/fopen.rel + ___fopen +crt_banked_lib/fprintf.rel + _fprintf +crt_banked_lib/fputc.rel + _fputc +crt_banked_lib/fputs.rel + _fputs +crt_banked_lib/fputter.rel + ___fputter +crt_banked_lib/fread.rel + _fread +crt_banked_lib/free.rel + _free +crt_banked_lib/fscanf.rel + _fscanf +crt_banked_lib/ftell.rel + _ftell +crt_banked_lib/fwrite.rel + _fwrite +crt_banked_lib/getcwd.rel + _getcwd +crt_banked_lib/getenv.rel + _getenv +crt_banked_lib/getgrent.rel + ___getgrent +crt_banked_lib/getgrgid.rel + _getgrgid +crt_banked_lib/getgrnam.rel + _getgrnam +crt_banked_lib/getopt.rel + _getopt + _optarg + _optopt + _optind + _opterr +crt_banked_lib/getpass.rel + _getpass +crt_banked_lib/getpw.rel + _getpw +crt_banked_lib/getpwent.rel + ___getpwent +crt_banked_lib/getpwnam.rel + _getpwnam +crt_banked_lib/getpwuid.rel + _getpwuid +crt_banked_lib/gets.rel + _puts + _gets +crt_banked_lib/gmtime.rel + _gmtime + ___tm_conv +crt_banked_lib/initgrup.rel + _initgroups +crt_banked_lib/isatty.rel + _isatty +crt_banked_lib/itoa.rel + _itoa + ___longtoa +crt_banked_lib/localtim.rel + _localtime +crt_banked_lib/longjmp.rel + _longjmp +crt_banked_lib/lsearch.rel + _lfind + _lsearch +crt_banked_lib/lstat.rel + _lstat +crt_banked_lib/ltoa.rel + _ltoa +crt_banked_lib/ltostr.rel + _ultostr + _ltostr +crt_banked_lib/malloc.rel + _malloc + ___malloc_last + ___malloc_head +crt_banked_lib/memccpy.rel + _memccpy +crt_banked_lib/memchr.rel + _memchr +crt_banked_lib/memcmp.rel + _memcmp +crt_banked_lib/memcpy.rel + _memcpy +crt_banked_lib/memmove.rel + _memmove +crt_banked_lib/memset.rel + _memset +crt_banked_lib/mkdir.rel + _mkdir +crt_banked_lib/mktime.rel + _mktime +crt_banked_lib/opendir.rel + _opendir +crt_banked_lib/perror.rel + _perror +crt_banked_lib/popen.rel + _pclose + _popen +crt_banked_lib/printf.rel + _printf +crt_banked_lib/putenv.rel + _putenv +crt_banked_lib/putgetch.rel + __putchar + __getchar +crt_banked_lib/putpwent.rel + _putpwent +crt_banked_lib/qsort.rel + _qsort +crt_banked_lib/rand.rel + _srand + _rand +crt_banked_lib/readdir.rel + _readdir +crt_banked_lib/readlink.rel + _readlink +crt_banked_lib/realloc.rel + _realloc +crt_banked_lib/regerror.rel + _regerror +crt_banked_lib/regexp.rel + _regexec + _regcomp +crt_banked_lib/regsub.rel + _regsub +crt_banked_lib/rename.rel + _rename +crt_banked_lib/rewind.rel + _rewind + _fseek +crt_banked_lib/rewindir.rel + _rewinddir +crt_banked_lib/rmdir.rel + _rmdir +crt_banked_lib/scanf.rel + _scanf +crt_banked_lib/setbuff.rel + _setbuffer +crt_banked_lib/setenv.rel + _setenv + _unsetenv +crt_banked_lib/setgrent.rel + _endgrent + _getgrent + _setgrent + __path_group +crt_banked_lib/setjmp.rel + _setjmp +crt_banked_lib/setpwent.rel + _endpwent + _getpwent + _setpwent + __path_passwd +crt_banked_lib/setvbuff.rel + _setvbuf +crt_banked_lib/sleep.rel + _sleep +crt_banked_lib/sprintf.rel + _sprintf +crt_banked_lib/sputter.rel + ___sputter +crt_banked_lib/sscanf.rel + _sscanf +crt_banked_lib/stdio0.rel + ___stdio_init_vars + ___stdio_close_all + _stderr + _stdin + _stdout + ___IO_list +crt_banked_lib/strcat.rel + _strcat +crt_banked_lib/strchr.rel + _strchr +crt_banked_lib/strcmp.rel + _strcmp +crt_banked_lib/strcpy.rel + _strcpy +crt_banked_lib/strcspn.rel + _strcspn +crt_banked_lib/strdup.rel + _strdup +crt_banked_lib/stricmp.rel + _stricmp +crt_banked_lib/strlen.rel + _strlen +crt_banked_lib/strncat.rel + _strncat +crt_banked_lib/strncmp.rel + _strncmp +crt_banked_lib/strncpy.rel + _strncpy +crt_banked_lib/strnicmp.rel + _strnicmp +crt_banked_lib/strpbrk.rel + _strpbrk +crt_banked_lib/strrchr.rel + _strrchr +crt_banked_lib/strsep.rel + _strsep +crt_banked_lib/strspn.rel + _strspn +crt_banked_lib/strstr.rel + _strstr +crt_banked_lib/strtok.rel + _strtok +crt_banked_lib/strtol.rel + _strtol +crt_banked_lib/strtoul.rel + _strtoul +crt_banked_lib/system.rel + _system +crt_banked_lib/termcap.rel + _tputs + _tgetnum + _tgetstr + _tgetflag + _tgetent + _ospeed + _tputs_baud_rate + _PC +crt_banked_lib/tmpnam.rel + _tmpnam + __tmpnum +crt_banked_lib/tparam.rel + _tparam + _tgoto + __UP + __BC +crt_banked_lib/ttyname.rel + _ttyname +crt_banked_lib/tzset.rel + _tzset + _daylight + _timezone + _tzname +crt_banked_lib/ultoa.rel + _ultoa +crt_banked_lib/ungetc.rel + _ungetc +crt_banked_lib/utsname.rel + _uname +crt_banked_lib/vfprintf.rel + _vfprintf +crt_banked_lib/vfscanf.rel + _vfscanf +crt_banked_lib/vprinter.rel + ___vprinter +crt_banked_lib/vprintf.rel + _vprintf +crt_banked_lib/vscanf.rel + _vscanf +crt_banked_lib/vsprintf.rel + _vsprintf +crt_banked_lib/vsscanf.rel + _vsscanf +crt_banked_lib/xitoa.rel + __itoa +crt_banked_lib/xltoa.rel + __ultoa + __ltoa diff --git a/src/nos/lib/crt_banked_lib/abort.rel b/src/nos/lib/crt_banked_lib/abort.rel new file mode 100644 index 00000000..f0c588a7 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/abort.rel @@ -0,0 +1,50 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S __exit Ref00000000 +S _pause Ref00000000 +S .__.ABS. Def00000000 +S _kill Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _getpid Ref00000000 +S _signal Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6E flags 0 +S _abort Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 21 00 00 E5 21 00 00 E5 11 +R 00 00 01 00 +T 0B 00 00 00 06 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 10 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 17 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 1D 00 00 00 00 00 00 00 4D 44 11 06 00 3E +R 00 00 01 00 02 04 00 00 +T 25 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 2A 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 03 00 +T 2F 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 35 00 00 00 00 00 E5 21 00 00 E5 11 09 00 3E +R 00 00 01 00 +T 40 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 45 00 00 00 00 00 00 00 F1 F1 3E 00 00 00 00 +R 00 00 01 00 02 04 00 00 2B 0B 07 00 +T 4B 00 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 52 00 00 00 44 11 09 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 5F 00 00 00 FF 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 64 00 00 00 00 00 00 00 CD 00 00 00 00 D1 C1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 6B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/alloca.rel b/src/nos/lib/crt_banked_lib/alloca.rel new file mode 100644 index 00000000..151cb1d1 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/alloca.rel @@ -0,0 +1,98 @@ +XL4 +H 4 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size CE flags 0 +S _alloca Def00000000 +A IDATA0 size 2 flags 0 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 2A +R 00 00 01 00 02 05 04 00 +T 06 00 00 00 00 00 00 00 DD 75 FB DD 74 FC +R 00 00 01 00 00 04 02 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 DD 7E FB DD B6 FC 28 49 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 21 00 00 39 4D 44 21 04 00 DD 5E +R 00 00 01 00 +T 21 00 00 00 FB DD 56 FC 19 56 23 66 6A A7 ED +R 00 00 01 00 +T 2C 00 00 00 42 30 2C +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 6E FB DD 66 FC 46 23 66 68 DD +R 00 00 01 00 +T 3A 00 00 00 75 FD DD 74 FE DD 5E FB DD 56 FC +R 00 00 01 00 +T 45 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 4B 00 00 00 00 00 00 00 DD 6E FD DD 66 FE DD +R 00 00 01 00 02 04 00 00 +T 54 00 00 00 75 FB DD 74 FC 18 02 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 18 02 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 18 AF +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E FB DD 66 FC 22 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 68 00 00 00 DD 7E 02 DD B6 03 20 05 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 21 00 00 18 56 +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 80 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 86 00 00 00 00 00 00 00 DD 75 FB DD 74 FC 7D +R 00 00 01 00 02 04 00 00 +T 8F 00 00 00 B4 20 08 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 DD 6E FB DD 66 FC 18 31 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 2A 00 00 00 00 E5 DD 6E FB DD 66 +R 00 00 01 00 00 05 02 00 +T A3 00 00 00 FC C1 71 23 70 21 04 00 DD 4E FB +R 00 00 01 00 +T AE 00 00 00 DD 46 FC 09 E5 21 02 00 39 5D 54 +R 00 00 01 00 +T B9 00 00 00 E1 73 23 72 ED 43 00 00 00 00 21 +R 00 00 01 00 00 0A 02 00 +T C2 00 00 00 0C 00 DD 4E FB DD 46 FC 09 +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/asctime.rel b/src/nos/lib/crt_banked_lib/asctime.rel new file mode 100644 index 00000000..e42342a2 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/asctime.rel @@ -0,0 +1,225 @@ +XL4 +H 6 areas F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 263 flags 0 +S ___asctime Def0000001C +S _asctime Def00000240 +A CSTR size 1A flags 0 +A UDATA0 size 1A flags 0 +A IDATA0 size 3B flags 0 +A CDATA0 size 3B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 01 0A 00 DD 5E 04 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 56 05 CD 00 00 00 00 7B C6 30 +R 00 00 01 00 02 08 0A 00 +T 12 00 00 00 DD 6E 02 DD 66 03 77 C3 +R 00 00 01 00 +T 1A 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 CD 00 00 00 00 FE FF 01 +R 00 00 01 00 02 05 07 00 +T 22 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 00 04 02 00 +T 2B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 30 00 00 00 00 00 00 00 21 0C 00 DD 4E 04 DD +R 00 00 01 00 02 04 00 00 +T 39 00 00 00 46 05 09 23 CB 7E 20 41 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 DD 4E 04 DD 46 05 09 4E 23 46 21 +R 00 00 01 00 +T 4F 00 00 00 06 00 CD 00 00 00 00 38 2C +R 00 00 01 00 02 07 09 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 21 03 00 E5 21 0C 00 DD 4E 04 DD +R 00 00 01 00 +T 61 00 00 00 46 05 09 4E 23 46 11 03 00 CD +R 00 00 01 00 +T 6B 00 00 00 00 00 00 00 21 00 00 00 00 19 4D +R 00 00 01 00 02 04 08 00 00 09 04 00 +T 72 00 00 00 44 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 7A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7F 00 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 21 08 00 DD 4E 04 DD 46 05 09 23 +R 00 00 01 00 +T 8D 00 00 00 CB 7E 20 46 21 08 00 DD 4E 04 DD +R 00 00 01 00 +T 98 00 00 00 46 05 09 4E 23 46 21 0B 00 CD +R 00 00 01 00 +T A2 00 00 00 00 00 00 00 38 31 +R 00 00 01 00 02 04 09 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 21 03 00 E5 21 08 00 DD 4E 04 DD +R 00 00 01 00 +T B1 00 00 00 46 05 09 4E 23 46 11 03 00 CD +R 00 00 01 00 +T BB 00 00 00 00 00 00 00 21 16 00 00 00 19 4D +R 00 00 01 00 02 04 08 00 00 09 04 00 +T C2 00 00 00 44 21 04 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T CD 00 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T D3 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 00 00 +T D7 00 00 00 +R 00 00 01 00 +T D7 00 00 00 21 0A 00 DD 4E 04 DD 46 05 09 56 +R 00 00 01 00 +T E2 00 00 00 23 66 6A 11 6C 07 19 DD 75 FE DD +R 00 00 01 00 +T ED 00 00 00 74 FF 21 06 00 09 5E 23 56 01 +R 00 00 01 00 +T F7 00 00 00 0A 00 CD 00 00 00 00 4B 42 21 +R 00 00 01 00 02 07 0B 00 +T FF 00 00 00 08 00 DD 5E 02 DD 56 03 19 EB CD +R 00 00 01 00 +T 0A 01 00 00 00 00 00 00 21 06 00 DD 4E 04 DD +R 00 00 01 00 00 04 01 00 +T 13 01 00 00 46 05 09 4E 23 46 21 09 00 DD 5E +R 00 00 01 00 +T 1E 01 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 27 01 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 32 01 00 00 23 56 01 0A 00 CD 00 00 00 00 4B +R 00 00 01 00 02 0A 0B 00 +T 3B 01 00 00 42 21 0B 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 46 01 00 00 EB CD 00 00 00 00 21 04 00 DD 4E +R 00 00 01 00 00 06 01 00 +T 4F 01 00 00 04 DD 46 05 09 4E 23 46 21 0C 00 +R 00 00 01 00 +T 5A 01 00 00 DD 5E 02 DD 56 03 19 EB CD +R 00 00 01 00 +T 63 01 00 00 00 00 00 00 DD 6E 04 DD 66 05 23 +R 00 00 01 00 00 04 01 00 +T 6C 01 00 00 23 5E 23 56 01 0A 00 CD +R 00 00 01 00 +T 74 01 00 00 00 00 00 00 4B 42 21 0E 00 DD 5E +R 00 00 01 00 02 04 0B 00 +T 7D 01 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 86 01 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 91 01 00 00 21 0F 00 DD 5E 02 DD 56 03 19 EB +R 00 00 01 00 +T 9C 01 00 00 CD 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 01 00 +T A5 01 00 00 5E 23 56 01 0A 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0B 00 +T AE 01 00 00 4B 42 21 11 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T B9 01 00 00 19 EB CD 00 00 00 00 DD 6E 04 DD +R 00 00 01 00 00 07 01 00 +T C2 01 00 00 66 05 4E 23 46 21 12 00 DD 5E 02 +R 00 00 01 00 +T CD 01 00 00 DD 56 03 19 EB CD 00 00 00 00 01 +R 00 00 01 00 00 0A 01 00 +T D6 01 00 00 E8 03 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T DF 01 00 00 00 00 00 00 4B 42 21 14 00 DD 5E +R 00 00 01 00 02 04 0B 00 +T E8 01 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T F1 01 00 00 01 64 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T FB 01 00 00 00 00 00 00 4B 42 21 15 00 DD 5E +R 00 00 01 00 02 04 0B 00 +T 04 02 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 0D 02 00 00 01 0A 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 17 02 00 00 00 00 00 00 4B 42 21 16 00 DD 5E +R 00 00 01 00 02 04 0B 00 +T 20 02 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 29 02 00 00 DD 4E FE DD 46 FF 21 17 00 DD 5E +R 00 00 01 00 +T 34 02 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 3D 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 CD 00 00 00 00 7B B2 20 05 +R 00 00 01 00 02 05 05 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 21 00 00 18 14 +R 00 00 01 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 DD 4E 02 DD 46 03 11 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 55 02 00 00 3E 1C 00 00 00 21 1C 00 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 5B 02 00 00 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 02 04 00 00 00 09 03 00 +T 60 02 00 00 +R 00 00 01 00 +T 60 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 45 72 72 20 45 72 72 20 2E 2E 20 +R 00 00 02 00 +T 0B 00 00 00 2E 2E 3A 2E 2E 3A 2E 2E 20 2E 2E +R 00 00 02 00 +T 16 00 00 00 2E 2E 0A 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 16 00 00 00 +R 00 00 04 00 +T 16 00 00 00 +R 00 00 04 00 +T 00 00 00 00 53 75 6E 4D 6F 6E 54 75 65 57 65 +R 00 00 05 00 +T 0B 00 00 00 64 54 68 75 46 72 69 53 61 74 00 +R 00 00 05 00 +T 16 00 00 00 4A 61 6E 46 65 62 4D 61 72 41 70 +R 00 00 05 00 +T 21 00 00 00 72 4D 61 79 4A 75 6E 4A 75 6C 41 +R 00 00 05 00 +T 2C 00 00 00 75 67 53 65 70 4F 63 74 4E 6F 76 +R 00 00 05 00 +T 37 00 00 00 44 65 63 00 +R 00 00 05 00 diff --git a/src/nos/lib/crt_banked_lib/assert.rel b/src/nos/lib/crt_banked_lib/assert.rel new file mode 100644 index 00000000..aa9df2b6 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/assert.rel @@ -0,0 +1,82 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __itoa Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _abort Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _write Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8A flags 0 +S ___assert Def00000021 +S ___errput Def00000000 +A CSTR size 1D flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 2B 0A 03 00 +T 06 00 00 00 00 00 00 00 CD 00 00 00 00 E5 DD +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 0D 00 00 00 4E 02 DD 46 03 11 02 00 3E +R 00 00 01 00 +T 16 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 1B 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 02 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 CD 00 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 02 05 06 00 00 0A 02 00 +T 28 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 2D 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 00 00 +T 36 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 3B 00 00 00 00 00 00 00 11 09 00 00 00 3E +R 00 00 01 00 02 04 00 00 00 09 02 00 +T 41 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 46 00 00 00 00 00 00 00 59 50 3E 00 00 00 00 +R 00 00 01 00 02 04 00 00 29 0B 01 00 +T 4C 00 00 00 21 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 00 05 01 00 02 0A 00 00 +T 53 00 00 00 12 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 29 09 01 00 +T 58 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 00 04 01 00 02 09 00 00 +T 5F 00 00 00 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 66 00 00 00 00 00 00 00 CD 00 00 00 00 EB 3E +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 6D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 72 00 00 00 00 00 00 00 11 1A 00 00 00 3E +R 00 00 01 00 02 04 00 00 00 09 02 00 +T 78 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 7D 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 04 00 +T 82 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 88 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 46 61 69 6C 65 64 20 27 00 +R 00 00 02 00 +T 09 00 00 00 +R 00 00 02 00 +T 09 00 00 00 27 2C 20 66 69 6C 65 20 00 +R 00 00 02 00 +T 12 00 00 00 +R 00 00 02 00 +T 12 00 00 00 2C 20 6C 69 6E 65 20 00 +R 00 00 02 00 +T 1A 00 00 00 +R 00 00 02 00 +T 1A 00 00 00 2E 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/atexit.rel b/src/nos/lib/crt_banked_lib/atexit.rel new file mode 100644 index 00000000..ac8b3603 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/atexit.rel @@ -0,0 +1,128 @@ +XL4 +H 5 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S ___cleanup Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 108 flags 0 +S _atexit Def000000F5 +S _on_exit Def0000007C +A UDATA0 size 32 flags 0 +S ___on_exit_table Def00000000 +A IDATA0 size 2 flags 0 +S ___on_exit_count Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 2A +R 00 00 01 00 02 05 06 00 +T 06 00 00 00 00 00 00 00 2B DD 75 FA DD 74 FB +R 00 00 01 00 00 04 03 00 +T 0F 00 00 00 21 FF FF 22 00 00 00 00 3E 00 21 +R 00 00 01 00 00 08 03 00 +T 18 00 00 00 00 00 32 02 00 00 00 22 +R 00 00 01 00 02 07 05 00 +T 1E 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD CB FB 7E 20 53 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 01 05 00 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 30 00 00 00 00 00 00 00 21 00 00 00 00 19 5E +R 00 00 01 00 02 04 07 00 00 09 02 00 +T 37 00 00 00 23 56 23 46 EB DD 75 FC DD 74 FD +R 00 00 01 00 +T 42 00 00 00 DD 70 FE 11 05 00 DD 4E FA DD 46 +R 00 00 01 00 +T 4D 00 00 00 FB CD 00 00 00 00 21 03 00 00 00 +R 00 00 01 00 02 06 07 00 00 0B 02 00 +T 54 00 00 00 19 4E 23 46 DD 5E 02 DD 56 03 DD +R 00 00 01 00 +T 5F 00 00 00 7E FE DD 6E FC DD 66 FD CD +R 00 00 01 00 +T 68 00 00 00 00 00 00 00 DD 6E FA DD 66 FB 2B +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 DD 75 FA DD 74 FB 18 A7 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 CD 00 00 00 00 2A 00 00 00 00 CB +R 00 00 01 00 02 05 03 00 00 0A 03 00 +T 83 00 00 00 7C 20 0E 01 0A 80 2A 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 8C 00 00 00 3E 80 AC 67 ED 42 38 0B +R 00 00 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 21 0C 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 9D 00 00 00 18 53 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 3E 00 00 00 00 21 00 00 00 00 32 +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T A5 00 00 00 02 00 00 00 22 00 00 00 00 DD 7E +R 00 00 01 00 02 04 05 00 02 09 05 00 +T AC 00 00 00 02 DD B6 03 DD B6 04 28 3A +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 01 05 00 ED 5B 00 00 00 00 CD +R 00 00 01 00 00 09 03 00 +T BD 00 00 00 00 00 00 00 21 00 00 00 00 19 DD +R 00 00 01 00 02 04 07 00 00 09 02 00 +T C4 00 00 00 56 04 DD 4E 02 DD 46 03 71 23 70 +R 00 00 01 00 +T CF 00 00 00 23 72 01 05 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T D8 00 00 00 CD 00 00 00 00 21 03 00 00 00 19 +R 00 00 01 00 02 05 07 00 00 0A 02 00 +T DF 00 00 00 DD 4E 0A DD 46 0B 71 23 70 2A +R 00 00 01 00 +T E9 00 00 00 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 21 00 00 +R 00 00 01 00 +T F2 00 00 00 +R 00 00 01 00 +T F2 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 CD 00 00 00 00 21 00 00 E5 3E +R 00 00 01 00 02 05 03 00 +T FD 00 00 00 7C 00 00 00 21 7C 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 02 01 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/crt_banked_lib/atoi.rel b/src/nos/lib/crt_banked_lib/atoi.rel new file mode 100644 index 00000000..532a5ad2 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/atoi.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strtol Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S _atoi Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0A 00 E5 01 +R 00 00 01 00 02 05 03 00 +T 08 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 0D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 14 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_banked_lib/atol.rel b/src/nos/lib/crt_banked_lib/atol.rel new file mode 100644 index 00000000..8d675f03 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/atol.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strtol Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S _atol Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0A 00 E5 01 +R 00 00 01 00 02 05 02 00 +T 08 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 14 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 diff --git a/src/nos/lib/crt_banked_lib/bsearch.rel b/src/nos/lib/crt_banked_lib/bsearch.rel new file mode 100644 index 00000000..f4fe176d --- /dev/null +++ b/src/nos/lib/crt_banked_lib/bsearch.rel @@ -0,0 +1,94 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D4 flags 0 +S _bsearch Def00000000 +A UDATA0 size 2 flags 0 +S __bsearch Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 F8 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD 77 F9 21 FF FF DD 5E 0A DD 56 +R 00 00 01 00 +T 14 00 00 00 0B 19 DD 75 FA DD 74 FB +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 DD 4E F8 DD 46 F9 DD 6E FA DD 66 +R 00 00 01 00 +T 27 00 00 00 FB CD 00 00 00 00 DA C5 00 00 00 +R 00 00 01 00 02 06 05 00 00 0B 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 6E FA DD 66 FB DD 4E F8 DD 46 +R 00 00 01 00 +T 39 00 00 00 F9 09 CB 2C CB 1D DD 75 FC DD 74 +R 00 00 01 00 +T 44 00 00 00 FD DD 4E 02 DD 46 03 C5 EB DD 4E +R 00 00 01 00 +T 4F 00 00 00 0C DD 46 0D CD 00 00 00 00 DD 6E +R 00 00 01 00 02 09 04 00 +T 58 00 00 00 04 DD 66 05 19 EB DD 7E 10 DD 6E +R 00 00 01 00 +T 63 00 00 00 0E DD 66 0F C1 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 00 00 +T 6C 00 00 00 75 FE DD 74 FF 7D B4 28 2C +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 4E FE DD 46 FF 21 00 00 CD +R 00 00 01 00 +T 7F 00 00 00 00 00 00 00 30 0F +R 00 00 01 00 02 04 05 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 DD 6E FC DD 66 FD 2B DD 75 FA DD +R 00 00 01 00 +T 8E 00 00 00 74 FB 18 0D +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 DD 6E FC DD 66 FD 23 DD 75 F8 DD +R 00 00 01 00 +T 9D 00 00 00 74 F9 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 18 21 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 DD 6E FC DD 66 FD 22 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T AA 00 00 00 DD 4E 0C DD 46 0D DD 5E FC DD 56 +R 00 00 01 00 +T B5 00 00 00 FD CD 00 00 00 00 DD 6E 04 DD 66 +R 00 00 01 00 02 06 04 00 +T BE 00 00 00 05 19 18 0F +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 C3 1C 00 00 00 +R 00 00 01 00 00 05 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 DD 6E FA DD 66 FB 22 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T CE 00 00 00 21 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/calloc.rel b/src/nos/lib/crt_banked_lib/calloc.rel new file mode 100644 index 00000000..030f5828 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/calloc.rel @@ -0,0 +1,37 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 48 flags 0 +S _calloc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 CD 00 00 00 00 DD 73 FC DD +R 00 00 01 00 02 07 05 00 +T 12 00 00 00 72 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T 17 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 1E 00 00 00 FE DD 74 FF 7D B4 28 19 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 6E FC DD 66 FD E5 01 00 00 DD +R 00 00 01 00 +T 31 00 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 39 00 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_banked_lib/clock.rel b/src/nos/lib/crt_banked_lib/clock.rel new file mode 100644 index 00000000..eb42cb16 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/clock.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _times Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S _clock Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EC FF 21 00 00 39 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 14 00 00 00 00 00 39 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 1F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/crt_banked_lib/closedir.rel b/src/nos/lib/crt_banked_lib/closedir.rel new file mode 100644 index 00000000..ae4c9b30 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/closedir.rel @@ -0,0 +1,57 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _close Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 76 flags 0 +S _closedir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 1A 21 +R 00 00 01 00 02 05 05 00 +T 08 00 00 00 06 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 13 00 00 00 B6 28 0B DD 6E 02 DD 66 03 7E 23 +R 00 00 01 00 +T 1E 00 00 00 B6 20 0B +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 0E 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 06 00 +T 2A 00 00 00 18 47 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 6E 02 DD 66 03 5E 23 56 3E +R 00 00 01 00 +T 36 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 3B 00 00 00 00 00 00 00 21 06 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 44 00 00 00 46 03 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 4C 00 00 00 21 00 00 00 00 CD 00 00 00 00 69 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 53 00 00 00 60 AF 77 23 77 21 06 00 DD 4E 02 +R 00 00 01 00 +T 5E 00 00 00 DD 46 03 09 AF 77 23 77 59 50 3E +R 00 00 01 00 +T 69 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 6E 00 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 00 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/convtime.rel b/src/nos/lib/crt_banked_lib/convtime.rel new file mode 100644 index 00000000..4ebe3f39 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/convtime.rel @@ -0,0 +1,191 @@ +XL4 +H 4 areas 9 global symbols +S ?US_RSH_L02 Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +S _timezone Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2CE flags 0 +S _convtime Def00000000 +A IDATA0 size 18 flags 0 +A CDATA0 size 18 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D6 FF DD 6E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 03 23 23 7E E6 00 5F 23 7E E6 +R 00 00 01 00 +T 14 00 00 00 FE 57 06 09 CD 00 00 00 00 21 +R 00 00 01 00 02 09 00 00 +T 1C 00 00 00 BC 07 19 DD 75 D6 DD 74 D7 01 +R 00 00 01 00 +T 26 00 00 00 B4 07 A7 ED 42 30 0C +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 39 7E C6 64 77 30 02 23 +R 00 00 01 00 +T 38 00 00 00 34 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 6E 02 DD 66 03 23 23 7E E6 E0 +R 00 00 01 00 +T 44 00 00 00 5F 23 7E E6 01 57 06 05 CD +R 00 00 01 00 +T 4D 00 00 00 00 00 00 00 DD 73 D8 DD 72 D9 DD +R 00 00 01 00 02 04 00 00 +T 56 00 00 00 6E 02 DD 66 03 23 23 7E E6 1F 4F +R 00 00 01 00 +T 61 00 00 00 23 7E E6 00 47 DD 71 DA DD 70 DB +R 00 00 01 00 +T 6C 00 00 00 DD 6E 02 DD 66 03 7E E6 00 5F 23 +R 00 00 01 00 +T 77 00 00 00 7E E6 F8 57 06 0B CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 80 00 00 00 DD 73 DC DD 72 DD DD 6E 02 DD 66 +R 00 00 01 00 +T 8B 00 00 00 03 7E E6 E0 5F 23 7E E6 07 57 06 +R 00 00 01 00 +T 96 00 00 00 05 CD 00 00 00 00 DD 73 DE DD 72 +R 00 00 01 00 02 06 00 00 +T 9F 00 00 00 DF DD 6E 02 DD 66 03 7E E6 1F 4F +R 00 00 01 00 +T AA 00 00 00 23 7E E6 00 47 69 60 29 DD 75 E0 +R 00 00 01 00 +T B5 00 00 00 DD 74 E1 21 4E F8 DD 4E D6 DD 46 +R 00 00 01 00 +T C0 00 00 00 D7 09 DD 75 D6 DD 74 D7 CB 3C CB +R 00 00 01 00 +T CB 00 00 00 1D CB 3C CB 1D DD 75 E2 DD 74 E3 +R 00 00 01 00 +T D6 00 00 00 EB 01 00 00 C5 D5 01 00 00 21 +R 00 00 01 00 +T E0 00 00 00 18 00 CD 00 00 00 00 C5 E5 01 +R 00 00 01 00 02 07 02 00 +T E8 00 00 00 00 00 21 3C 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 02 00 +T F1 00 00 00 E5 01 00 00 21 3C 00 CD +R 00 00 01 00 +T F9 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 02 00 +T 02 01 00 00 71 FE DD 70 FF DD 7E D6 E6 03 47 +R 00 00 01 00 +T 0D 01 00 00 DD 7E D7 E6 00 B0 20 1B 01 03 00 +R 00 00 01 00 +T 18 01 00 00 DD 6E D8 DD 66 D9 A7 ED 42 30 0D +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 21 26 00 39 01 01 00 11 80 51 CD +R 00 00 01 00 +T 2E 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 30 01 00 00 +R 00 00 01 00 +T 30 01 00 00 DD 6E D6 DD 66 D7 01 00 00 C5 E5 +R 00 00 01 00 +T 3B 01 00 00 01 00 00 21 6D 01 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 44 01 00 00 C5 E5 01 00 00 21 18 00 CD +R 00 00 01 00 +T 4D 01 00 00 00 00 00 00 C5 E5 01 00 00 21 +R 00 00 01 00 02 04 02 00 +T 55 01 00 00 3C 00 CD 00 00 00 00 C5 E5 01 +R 00 00 01 00 02 07 02 00 +T 5D 01 00 00 00 00 21 3C 00 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 02 00 +T 66 01 00 00 75 E8 DD 74 E9 DD 71 EA DD 70 EB +R 00 00 01 00 +T 71 01 00 00 DD 6E D8 DD 66 D9 29 01 +R 00 00 01 00 +T 79 01 00 00 FE FF FF FF 09 46 23 66 68 DD 75 +R 00 00 01 00 00 04 02 00 +T 82 01 00 00 D8 DD 74 D9 EB 01 00 00 C5 D5 01 +R 00 00 01 00 +T 8D 01 00 00 00 00 21 18 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 02 00 +T 96 01 00 00 E5 01 00 00 21 3C 00 CD +R 00 00 01 00 +T 9E 01 00 00 00 00 00 00 C5 E5 01 00 00 21 +R 00 00 01 00 02 04 02 00 +T A6 01 00 00 3C 00 CD 00 00 00 00 DD 75 EC DD +R 00 00 01 00 02 07 02 00 +T AF 01 00 00 74 ED DD 71 EE DD 70 EF DD 5E DA +R 00 00 01 00 +T BA 01 00 00 DD 56 DB 01 00 00 C5 D5 01 00 00 +R 00 00 01 00 +T C5 01 00 00 21 18 00 CD 00 00 00 00 C5 E5 01 +R 00 00 01 00 02 08 02 00 +T CE 01 00 00 00 00 21 3C 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 02 00 +T D7 01 00 00 E5 01 00 00 21 3C 00 CD +R 00 00 01 00 +T DF 01 00 00 00 00 00 00 DD 75 F0 DD 74 F1 DD +R 00 00 01 00 02 04 02 00 +T E8 01 00 00 71 F2 DD 70 F3 DD 5E DC DD 56 DD +R 00 00 01 00 +T F3 01 00 00 01 00 00 C5 D5 01 00 00 21 3C 00 +R 00 00 01 00 +T FE 01 00 00 CD 00 00 00 00 C5 E5 01 00 00 21 +R 00 00 01 00 02 05 02 00 +T 07 02 00 00 3C 00 CD 00 00 00 00 DD 75 F4 DD +R 00 00 01 00 02 07 02 00 +T 10 02 00 00 74 F5 DD 71 F6 DD 70 F7 DD 5E DE +R 00 00 01 00 +T 1B 02 00 00 DD 56 DF 01 00 00 C5 D5 01 00 00 +R 00 00 01 00 +T 26 02 00 00 21 3C 00 CD 00 00 00 00 DD 75 F8 +R 00 00 01 00 02 08 02 00 +T 2F 02 00 00 DD 74 F9 DD 71 FA DD 70 FB C5 E5 +R 00 00 01 00 +T 3A 02 00 00 DD 6E E0 DD 66 E1 01 00 00 C5 E5 +R 00 00 01 00 +T 45 02 00 00 DD 6E FC DD 66 FD C1 09 EB DD 6E +R 00 00 01 00 +T 50 02 00 00 FE DD 66 FF C1 ED 4A E5 D5 DD 6E +R 00 00 01 00 +T 5B 02 00 00 E8 DD 66 E9 C1 09 EB DD 6E EA DD +R 00 00 01 00 +T 66 02 00 00 66 EB C1 ED 4A E5 D5 DD 6E EC DD +R 00 00 01 00 +T 71 02 00 00 66 ED C1 09 EB DD 6E EE DD 66 EF +R 00 00 01 00 +T 7C 02 00 00 C1 ED 4A E5 D5 DD 6E F0 DD 66 F1 +R 00 00 01 00 +T 87 02 00 00 C1 09 EB DD 6E F2 DD 66 F3 C1 ED +R 00 00 01 00 +T 92 02 00 00 4A E5 D5 DD 6E F4 DD 66 F5 C1 09 +R 00 00 01 00 +T 9D 02 00 00 EB DD 6E F6 DD 66 F7 C1 ED 4A EB +R 00 00 01 00 +T A8 02 00 00 C1 09 EB C1 ED 4A E5 D5 2A +R 00 00 01 00 +T B1 02 00 00 00 00 00 00 C1 09 EB 2A +R 00 00 01 00 02 04 03 00 +T B7 02 00 00 02 00 00 00 C1 ED 4A 4D 44 EB DD +R 00 00 01 00 02 04 03 00 +T C0 02 00 00 75 E4 DD 74 E5 DD 71 E6 DD 70 E7 +R 00 00 01 00 +T CB 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 1F 00 3B 00 5A 00 78 00 +R 00 00 03 00 +T 0A 00 00 00 97 00 B5 00 D4 00 F3 00 11 01 +R 00 00 03 00 +T 14 00 00 00 30 01 4E 01 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/crypt.rel b/src/nos/lib/crt_banked_lib/crypt.rel new file mode 100644 index 00000000..a1342e43 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/crypt.rel @@ -0,0 +1,229 @@ +XL4 +H 3 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memset Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?UL_RSHASG_L03 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_XOR_L03 Ref00000000 +S ?L_ORASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?UL_RSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2AD flags 0 +S _crypt Def00000000 +A UDATA0 size 10 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DC FF DD 36 F8 B9 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 36 F9 79 DD 36 FA 37 DD 36 FB +R 00 00 01 00 +T 14 00 00 00 9E 21 10 00 E5 01 00 00 11 +R 00 00 01 00 +T 1D 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 01 00 +T 22 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 29 00 00 00 02 00 E5 DD 4E 04 DD 46 05 11 +R 00 00 01 00 +T 33 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 02 00 +T 38 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 3F 00 00 00 36 FE 00 +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 DD 7E FE FE 0E 30 2E DD 4E FE 06 +R 00 00 01 00 +T 4D 00 00 00 00 DD 6E 02 DD 66 03 09 7E B7 28 +R 00 00 01 00 +T 58 00 00 00 1E +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 21 02 00 00 00 DD 4E FE 06 00 09 +R 00 00 01 00 00 05 02 00 +T 62 00 00 00 E5 DD 4E FE 06 00 DD 6E 02 DD 66 +R 00 00 01 00 +T 6D 00 00 00 03 09 46 E1 70 DD 34 FE 18 CB +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 DD 4E FE 06 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 82 00 00 00 09 7E B7 28 18 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 DD 4E FE 06 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 92 00 00 00 09 3A 02 00 00 00 86 32 +R 00 00 01 00 00 06 02 00 +T 98 00 00 00 02 00 00 00 DD 34 FE 18 D8 +R 00 00 01 00 00 04 02 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 10 00 E5 01 00 00 00 00 21 +R 00 00 01 00 00 09 02 00 +T A7 00 00 00 0A 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T AF 00 00 00 00 00 00 00 CD 00 00 00 00 F1 AF +R 00 00 01 00 02 04 02 00 02 09 00 00 +T B6 00 00 00 DD 77 F4 DD 77 F5 DD 77 F6 DD 77 +R 00 00 01 00 +T C1 00 00 00 F7 AF DD 77 E0 DD 77 E1 DD 77 E2 +R 00 00 01 00 +T CC 00 00 00 DD 77 E3 AF DD 77 DC DD 77 DD DD +R 00 00 01 00 +T D7 00 00 00 77 DE DD 77 DF DD 36 FE 40 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 AF DD B6 FE CA 02 02 00 00 +R 00 00 01 00 00 09 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 21 18 00 39 DD 4E FA DD 46 FB DD +R 00 00 01 00 +T F2 00 00 00 5E F8 DD 56 F9 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 05 00 +T FB 00 00 00 00 00 39 E5 21 06 00 39 5E 23 56 +R 00 00 01 00 +T 06 01 00 00 23 4E 23 46 EB 3E 05 CD +R 00 00 01 00 +T 0E 01 00 00 00 00 00 00 C5 E5 DD 6E E8 DD 66 +R 00 00 01 00 02 04 0C 00 +T 17 01 00 00 E9 C1 09 EB DD 6E EA DD 66 EB C1 +R 00 00 01 00 +T 22 01 00 00 ED 4A E5 D5 DD 6E E2 DD 66 E3 E5 +R 00 00 01 00 +T 2D 01 00 00 DD 6E E0 DD 66 E1 E5 DD 6E F4 DD +R 00 00 01 00 +T 38 01 00 00 66 F5 C1 09 EB DD 6E F6 DD 66 F7 +R 00 00 01 00 +T 43 01 00 00 C1 ED 4A E5 D5 21 0E 00 39 5E 23 +R 00 00 01 00 +T 4E 01 00 00 56 23 4E 23 46 EB 3E 04 CD +R 00 00 01 00 +T 57 01 00 00 00 00 00 00 C5 E5 DD 6E E4 DD 66 +R 00 00 01 00 02 04 07 00 +T 60 01 00 00 E5 C1 09 EB DD 6E E6 DD 66 E7 C1 +R 00 00 01 00 +T 6B 01 00 00 ED 4A 4D 44 EB CD 00 00 00 00 CD +R 00 00 01 00 02 0A 09 00 +T 74 01 00 00 00 00 00 00 EB E1 CD 00 00 00 00 +R 00 00 01 00 02 04 09 00 02 0B 05 00 +T 7B 01 00 00 21 04 00 39 E5 21 02 00 39 5E 23 +R 00 00 01 00 +T 86 01 00 00 56 23 4E 23 46 EB 3E 05 CD +R 00 00 01 00 +T 8F 01 00 00 00 00 00 00 C5 E5 DD 6E F0 DD 66 +R 00 00 01 00 02 04 0C 00 +T 98 01 00 00 F1 C1 09 EB DD 6E F2 DD 66 F3 C1 +R 00 00 01 00 +T A3 01 00 00 ED 4A E5 D5 DD 6E DE DD 66 DF E5 +R 00 00 01 00 +T AE 01 00 00 DD 6E DC DD 66 DD E5 DD 6E F4 DD +R 00 00 01 00 +T B9 01 00 00 66 F5 C1 09 EB DD 6E F6 DD 66 F7 +R 00 00 01 00 +T C4 01 00 00 C1 ED 4A E5 D5 21 0A 00 39 5E 23 +R 00 00 01 00 +T CF 01 00 00 56 23 4E 23 46 EB 3E 04 CD +R 00 00 01 00 +T D8 01 00 00 00 00 00 00 C5 E5 DD 6E EC DD 66 +R 00 00 01 00 02 04 07 00 +T E1 01 00 00 ED C1 09 EB DD 6E EE DD 66 EF C1 +R 00 00 01 00 +T EC 01 00 00 ED 4A 4D 44 EB CD 00 00 00 00 CD +R 00 00 01 00 02 0A 09 00 +T F5 01 00 00 00 00 00 00 EB E1 CD 00 00 00 00 +R 00 00 01 00 02 04 09 00 02 0B 05 00 +T FC 01 00 00 DD 35 FE C3 E0 00 00 00 +R 00 00 01 00 00 08 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 21 00 00 39 DD 75 FC DD 74 FD DD +R 00 00 01 00 +T 0D 02 00 00 36 FE 02 +R 00 00 01 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 DD 7E FE FE 0D D2 A3 02 00 00 +R 00 00 01 00 00 0A 01 00 +T 18 02 00 00 +R 00 00 01 00 +T 18 02 00 00 DD 7E FE FE 08 20 28 +R 00 00 01 00 +T 1F 02 00 00 +R 00 00 01 00 +T 1F 02 00 00 21 00 00 39 E5 21 06 00 39 5E 23 +R 00 00 01 00 +T 2A 02 00 00 56 23 4E 23 46 EB 3E 1C CD +R 00 00 01 00 +T 33 02 00 00 00 00 00 00 EB E1 CD 00 00 00 00 +R 00 00 01 00 02 04 0C 00 02 0B 0A 00 +T 3A 02 00 00 DD 7E FC C6 04 DD 77 FC 30 03 DD +R 00 00 01 00 +T 45 02 00 00 34 FD +R 00 00 01 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 DD 6E FC DD 66 FD 5E 23 56 23 4E +R 00 00 01 00 +T 52 02 00 00 23 46 EB 7D E6 3F DD 77 FF 3E 06 +R 00 00 01 00 +T 5D 02 00 00 DD 6E FC DD 66 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 66 02 00 00 DD 7E FF FE 0C 30 0A +R 00 00 01 00 +T 6D 02 00 00 +R 00 00 01 00 +T 6D 02 00 00 DD 7E FF C6 2E DD 77 FF 18 19 +R 00 00 01 00 +T 77 02 00 00 +R 00 00 01 00 +T 77 02 00 00 DD 7E FF FE 26 30 0A +R 00 00 01 00 +T 7E 02 00 00 +R 00 00 01 00 +T 7E 02 00 00 DD 7E FF C6 35 DD 77 FF 18 08 +R 00 00 01 00 +T 88 02 00 00 +R 00 00 01 00 +T 88 02 00 00 DD 7E FF C6 3B DD 77 FF +R 00 00 01 00 +T 90 02 00 00 +R 00 00 01 00 +T 90 02 00 00 +R 00 00 01 00 +T 90 02 00 00 DD 4E FE 06 00 21 00 00 00 00 09 +R 00 00 01 00 00 0A 02 00 +T 99 02 00 00 DD 46 FF 70 DD 34 FE C3 +R 00 00 01 00 +T A1 02 00 00 10 02 00 00 +R 00 00 01 00 00 04 01 00 +T A3 02 00 00 +R 00 00 01 00 +T A3 02 00 00 AF 32 0D 00 00 00 21 00 00 00 00 +R 00 00 01 00 00 06 02 00 00 0B 02 00 +T AA 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/ctime.rel b/src/nos/lib/crt_banked_lib/ctime.rel new file mode 100644 index 00000000..a393f179 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/ctime.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _asctime Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _localtime Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S _ctime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 2B 0A 06 00 +T 06 00 00 00 00 00 00 00 CD 00 00 00 00 EB 3E +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 0D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 12 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 diff --git a/src/nos/lib/crt_banked_lib/ctype.rel b/src/nos/lib/crt_banked_lib/ctype.rel new file mode 100644 index 00000000..92f9bb61 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/ctype.rel @@ -0,0 +1,101 @@ +XL4 +H 4 areas 7 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4A flags 0 +S _tolower Def00000025 +S _toupper Def00000000 +A IDATA0 size 100 flags 0 +S ___ctype Def00000000 +A CDATA0 size 100 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 16 00 21 +R 00 00 01 00 02 05 02 00 +T 06 00 00 00 00 00 00 00 19 7E E6 04 28 0E DD +R 00 00 01 00 00 04 02 00 +T 0F 00 00 00 7E 02 EE 20 6F DD 7E 03 EE 00 67 +R 00 00 01 00 +T 1A 00 00 00 18 06 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 CD 00 00 00 00 16 00 21 +R 00 00 01 00 02 05 02 00 +T 2B 00 00 00 00 00 00 00 19 7E E6 02 28 0E DD +R 00 00 01 00 00 04 02 00 +T 34 00 00 00 7E 02 EE 20 6F DD 7E 03 EE 00 67 +R 00 00 01 00 +T 3F 00 00 00 18 06 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 01 01 01 01 01 01 01 01 01 11 11 +R 00 00 03 00 +T 0B 00 00 00 11 11 11 01 01 01 01 01 01 01 01 +R 00 00 03 00 +T 16 00 00 00 01 01 01 01 01 01 01 01 01 01 10 +R 00 00 03 00 +T 21 00 00 00 20 20 20 20 20 20 20 20 20 20 20 +R 00 00 03 00 +T 2C 00 00 00 20 20 20 20 48 48 48 48 48 48 48 +R 00 00 03 00 +T 37 00 00 00 48 48 48 20 20 20 20 20 20 20 42 +R 00 00 03 00 +T 42 00 00 00 42 42 42 42 42 02 02 02 02 02 02 +R 00 00 03 00 +T 4D 00 00 00 02 02 02 02 02 02 02 02 02 02 02 +R 00 00 03 00 +T 58 00 00 00 02 02 02 20 20 20 20 20 20 44 44 +R 00 00 03 00 +T 63 00 00 00 44 44 44 44 04 04 04 04 04 04 04 +R 00 00 03 00 +T 6E 00 00 00 04 04 04 04 04 04 04 04 04 04 04 +R 00 00 03 00 +T 79 00 00 00 04 04 20 20 20 20 01 00 00 00 00 +R 00 00 03 00 +T 84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 8F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T A5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T BB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T C6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T D1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T DC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T E7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T F2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T FD 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/difftime.rel b/src/nos/lib/crt_banked_lib/difftime.rel new file mode 100644 index 00000000..57fca31d --- /dev/null +++ b/src/nos/lib/crt_banked_lib/difftime.rel @@ -0,0 +1,85 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ___tm_conv Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 152 flags 0 +S _difftime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D4 FF 21 00 00 E5 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 21 02 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 11 00 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 18 00 00 00 21 00 00 E5 DD 4E 02 DD 46 03 21 +R 00 00 01 00 +T 23 00 00 00 14 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 2B 00 00 00 00 00 00 00 CD 00 00 00 00 E1 DD +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 32 00 00 00 4E D6 DD 46 D7 11 3C 00 CD +R 00 00 01 00 +T 3B 00 00 00 00 00 00 00 D5 DD 4E D8 DD 46 D9 +R 00 00 01 00 02 04 04 00 +T 44 00 00 00 11 10 0E CD 00 00 00 00 EB D1 19 +R 00 00 01 00 02 08 04 00 +T 4D 00 00 00 7C 07 9F 4F 41 C5 E5 DD 6E E2 DD +R 00 00 01 00 +T 58 00 00 00 66 E3 7C 07 9F 4F 41 C5 E5 01 +R 00 00 01 00 +T 62 00 00 00 01 00 21 80 51 CD 00 00 00 00 59 +R 00 00 01 00 02 0A 02 00 +T 6B 00 00 00 50 C1 09 EB C1 ED 4A E5 D5 DD 6E +R 00 00 01 00 +T 76 00 00 00 DE DD 66 DF 7C 07 9F 4F 41 C5 E5 +R 00 00 01 00 +T 81 00 00 00 01 EB 01 21 80 BF CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 8A 00 00 00 59 50 C1 09 EB C1 ED 4A E5 D5 DD +R 00 00 01 00 +T 95 00 00 00 6E D4 DD 66 D5 7C 07 9F 5F 53 C1 +R 00 00 01 00 +T A0 00 00 00 09 EB C1 ED 4A 4D 44 EB DD 75 F8 +R 00 00 01 00 +T AB 00 00 00 DD 74 F9 DD 71 FA DD 70 FB DD 5E +R 00 00 01 00 +T B6 00 00 00 E8 DD 56 E9 01 3C 00 CD +R 00 00 01 00 +T BE 00 00 00 00 00 00 00 D5 DD 4E EA DD 46 EB +R 00 00 01 00 02 04 04 00 +T C7 00 00 00 11 10 0E CD 00 00 00 00 EB D1 19 +R 00 00 01 00 02 08 04 00 +T D0 00 00 00 EB 7A 07 9F 4F 41 C5 D5 DD 6E F4 +R 00 00 01 00 +T DB 00 00 00 DD 66 F5 7C 07 9F 4F 41 C5 E5 01 +R 00 00 01 00 +T E6 00 00 00 01 00 21 80 51 CD 00 00 00 00 59 +R 00 00 01 00 02 0A 02 00 +T EF 00 00 00 50 C1 09 EB C1 ED 4A E5 D5 DD 6E +R 00 00 01 00 +T FA 00 00 00 F0 DD 66 F1 7C 07 9F 4F 41 C5 E5 +R 00 00 01 00 +T 05 01 00 00 01 EB 01 21 80 BF CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 0E 01 00 00 59 50 C1 09 EB C1 ED 4A E5 D5 DD +R 00 00 01 00 +T 19 01 00 00 6E E6 DD 66 E7 7C 07 9F 5F 53 C1 +R 00 00 01 00 +T 24 01 00 00 09 EB C1 ED 4A 4D 44 EB DD 75 FC +R 00 00 01 00 +T 2F 01 00 00 DD 74 FD DD 71 FE DD 70 FF 59 50 +R 00 00 01 00 +T 3A 01 00 00 A7 DD 4E F8 DD 46 F9 ED 42 EB DD +R 00 00 01 00 +T 45 01 00 00 4E FA DD 46 FB ED 42 4D 44 EB C3 +R 00 00 01 00 +T 50 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 07 00 diff --git a/src/nos/lib/crt_banked_lib/error.rel b/src/nos/lib/crt_banked_lib/error.rel new file mode 100644 index 00000000..c93a5c1c --- /dev/null +++ b/src/nos/lib/crt_banked_lib/error.rel @@ -0,0 +1,249 @@ +XL4 +H 6 areas 11 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S _close Ref00000000 +S _strlen Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _itoa Ref00000000 +S _atoi Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1BD flags 0 +S _strerror Def00000000 +A CSTR size 21 flags 0 +A UDATA0 size 50 flags 0 +A IDATA0 size 4 flags 0 +S ___sys_errlist Def00000000 +S ___sys_nerr Def00000002 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 76 FF AF DD 77 FE +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 77 FF 2A 02 00 00 00 7D B4 28 +R 00 00 01 00 00 08 04 00 +T 12 00 00 00 2B +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 DD CB 03 7E 20 0F ED 4B +R 00 00 01 00 +T 1B 00 00 00 02 00 00 00 DD 6E 02 DD 66 03 CD +R 00 00 01 00 00 04 04 00 +T 24 00 00 00 00 00 00 00 38 03 +R 00 00 01 00 02 04 0B 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 C3 85 01 00 00 +R 00 00 01 00 00 05 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 6E 02 DD 66 03 29 ED 4B +R 00 00 01 00 +T 34 00 00 00 00 00 00 00 09 46 23 66 68 C3 +R 00 00 01 00 00 04 04 00 +T 3C 00 00 00 BA 01 00 00 +R 00 00 01 00 00 04 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 DD 4E 02 DD 46 03 21 00 00 CD +R 00 00 01 00 +T 48 00 00 00 00 00 00 00 38 03 +R 00 00 01 00 02 04 0B 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 C3 85 01 00 00 +R 00 00 01 00 00 05 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 21 00 00 E5 21 00 00 00 00 E5 3E +R 00 00 01 00 00 09 02 00 +T 58 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 5D 00 00 00 00 00 00 00 F1 F1 DD 75 FA DD 74 +R 00 00 01 00 02 04 00 00 +T 66 00 00 00 FB CB 7C 28 03 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 C3 85 01 00 00 +R 00 00 01 00 00 05 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 21 80 00 E5 21 04 00 39 4D 44 DD +R 00 00 01 00 +T 79 00 00 00 5E FA DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 81 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 88 00 00 00 75 F8 DD 74 F9 4D 44 21 00 00 CD +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 D2 85 01 00 00 +R 00 00 01 00 02 04 0B 00 00 09 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 DD 4E F8 DD 46 F9 DD 6E FC DD 66 +R 00 00 01 00 +T AA 00 00 00 FD A7 ED 42 D2 82 01 00 00 +R 00 00 01 00 00 09 01 00 +T B1 00 00 00 +R 00 00 01 00 +T B1 00 00 00 21 02 00 39 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T BC 00 00 00 7E FE 0A C2 4A 01 00 00 +R 00 00 01 00 00 08 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 21 00 00 00 00 DD 4E FE DD 46 FF +R 00 00 01 00 00 05 03 00 +T CB 00 00 00 09 36 00 11 00 00 00 00 3E +R 00 00 01 00 00 08 03 00 +T D2 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T D7 00 00 00 00 00 00 00 DD 4E 02 DD 46 03 A7 +R 00 00 01 00 02 04 00 00 +T E0 00 00 00 ED 42 20 5D +R 00 00 01 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 21 00 00 39 E5 01 20 00 11 +R 00 00 01 00 +T ED 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 02 00 +T F2 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T F9 00 00 00 E1 71 23 70 79 B0 20 10 +R 00 00 01 00 +T 01 01 00 00 +R 00 00 01 00 +T 01 01 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 09 01 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 10 01 00 00 74 +R 00 00 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 21 00 00 39 7E 23 66 6F 7E FE 20 +R 00 00 01 00 +T 1C 01 00 00 20 0B +R 00 00 01 00 +T 1E 01 00 00 +R 00 00 01 00 +T 1E 01 00 00 21 00 00 39 34 23 20 01 34 +R 00 00 01 00 +T 27 01 00 00 +R 00 00 01 00 +T 27 01 00 00 18 E8 +R 00 00 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 31 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 38 01 00 00 00 00 39 46 23 66 68 18 79 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 AF DD 77 FE DD 77 FF 18 2D +R 00 00 01 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 01 4F 00 DD 6E FE DD 66 FF A7 ED +R 00 00 01 00 +T 55 01 00 00 42 30 1F +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 21 02 00 39 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T 63 01 00 00 46 DD 6E FE DD 66 FF 23 DD 75 FE +R 00 00 01 00 +T 6E 01 00 00 DD 74 FF 2B 11 00 00 00 00 19 70 +R 00 00 01 00 00 09 03 00 +T 77 01 00 00 +R 00 00 01 00 +T 77 01 00 00 +R 00 00 01 00 +T 77 01 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 7F 01 00 00 +R 00 00 01 00 +T 7F 01 00 00 C3 9F 00 00 00 +R 00 00 01 00 00 05 01 00 +T 82 01 00 00 +R 00 00 01 00 +T 82 01 00 00 C3 6E 00 00 00 +R 00 00 01 00 00 05 01 00 +T 85 01 00 00 +R 00 00 01 00 +T 85 01 00 00 +R 00 00 01 00 +T 85 01 00 00 01 12 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 00 05 02 00 00 0A 03 00 +T 8C 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 91 01 00 00 00 00 00 00 21 0A 00 E5 11 +R 00 00 01 00 02 04 00 00 +T 98 01 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 04 00 +T 9D 01 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T A3 01 00 00 00 00 00 00 09 4D 44 DD 5E 02 DD +R 00 00 01 00 00 04 03 00 +T AC 01 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T B1 01 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T B8 01 00 00 00 00 00 00 +R 00 00 01 00 00 04 03 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 6C 69 62 2F 6C 69 62 65 72 72 +R 00 00 02 00 +T 0B 00 00 00 6F 72 2E 74 78 74 00 +R 00 00 02 00 +T 12 00 00 00 +R 00 00 02 00 +T 12 00 00 00 55 6E 6B 6E 6F 77 6E 20 65 72 72 +R 00 00 02 00 +T 1D 00 00 00 6F 72 20 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 00 00 +R 00 00 05 00 diff --git a/src/nos/lib/crt_banked_lib/etime.rel b/src/nos/lib/crt_banked_lib/etime.rel new file mode 100644 index 00000000..8fa5b219 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/etime.rel @@ -0,0 +1,117 @@ +XL4 +H 3 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?SS_MODASG_L02 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?US_MOD_L02 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13A flags 0 +S _etime Def00000000 +S _dout Def0000009D +S _ediff Def000000D7 +A UDATA0 size 1A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 02 00 00 00 22 +R 00 00 01 00 02 05 04 00 00 0A 02 00 +T 07 00 00 00 00 00 00 00 13 13 EB 5E 23 56 01 +R 00 00 01 00 00 04 02 00 +T 10 00 00 00 3C 00 CD 00 00 00 00 3E +R 00 00 01 00 02 07 09 00 +T 16 00 00 00 9D 00 00 00 21 9D 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 1B 00 00 00 00 00 00 00 2A 00 00 00 00 23 22 +R 00 00 01 00 02 04 00 00 00 09 02 00 +T 22 00 00 00 00 00 00 00 2B 36 3A DD 6E 02 DD +R 00 00 01 00 00 04 02 00 +T 2B 00 00 00 66 03 23 23 5E 23 56 01 3C 00 CD +R 00 00 01 00 +T 36 00 00 00 00 00 00 00 3E 9D 00 00 00 21 +R 00 00 01 00 02 04 07 00 29 09 01 00 +T 3B 00 00 00 9D 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 00 04 01 00 02 09 00 00 +T 41 00 00 00 00 00 00 00 23 22 00 00 00 00 2B +R 00 00 01 00 00 04 02 00 00 0A 02 00 +T 48 00 00 00 36 3A DD 6E 02 DD 66 03 5E 23 56 +R 00 00 01 00 +T 53 00 00 00 01 32 00 CD 00 00 00 00 3E +R 00 00 01 00 02 08 09 00 +T 5A 00 00 00 9D 00 00 00 21 9D 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 5F 00 00 00 00 00 00 00 2A 00 00 00 00 23 22 +R 00 00 01 00 02 04 00 00 00 09 02 00 +T 66 00 00 00 00 00 00 00 2B 36 2E DD 6E 02 DD +R 00 00 01 00 00 04 02 00 +T 6F 00 00 00 66 03 5E 23 56 01 32 00 CD +R 00 00 01 00 +T 78 00 00 00 00 00 00 00 01 0A 00 CD +R 00 00 01 00 02 04 07 00 +T 7E 00 00 00 00 00 00 00 01 32 00 CD +R 00 00 01 00 02 04 05 00 +T 84 00 00 00 00 00 00 00 7B C6 30 2A +R 00 00 01 00 02 04 09 00 +T 8A 00 00 00 00 00 00 00 23 22 00 00 00 00 2B +R 00 00 01 00 00 04 02 00 00 0A 02 00 +T 91 00 00 00 77 2A 00 00 00 00 36 00 21 +R 00 00 01 00 00 06 02 00 +T 98 00 00 00 02 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 04 02 00 02 09 02 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 CD 00 00 00 00 21 02 00 39 01 +R 00 00 01 00 02 05 04 00 +T A5 00 00 00 64 00 CD 00 00 00 00 01 0A 00 CD +R 00 00 01 00 02 07 01 00 +T AE 00 00 00 00 00 00 00 7B C6 30 2A +R 00 00 01 00 02 04 08 00 +T B4 00 00 00 00 00 00 00 23 22 00 00 00 00 2B +R 00 00 01 00 00 04 02 00 00 0A 02 00 +T BB 00 00 00 77 01 0A 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T C6 00 00 00 00 00 00 00 7B C6 30 2A +R 00 00 01 00 02 04 06 00 +T CC 00 00 00 00 00 00 00 23 22 00 00 00 00 2B +R 00 00 01 00 00 04 02 00 00 0A 02 00 +T D3 00 00 00 77 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 +T D7 00 00 00 +R 00 00 01 00 +T D7 00 00 00 CD 00 00 00 00 69 60 4E 23 46 1A +R 00 00 01 00 02 05 04 00 +T E0 00 00 00 6F 13 1A 67 A7 ED 42 30 1E +R 00 00 01 00 +T E9 00 00 00 +R 00 00 01 00 +T E9 00 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T F4 00 00 00 0B 70 2B 71 DD 6E 02 DD 66 03 7E +R 00 00 01 00 +T FF 00 00 00 C6 B8 77 23 7E CE 0B 77 +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 12 01 00 00 DD 6E 02 DD 66 03 23 23 7E 91 77 +R 00 00 01 00 +T 1D 01 00 00 23 7E 98 77 DD 6E 04 DD 66 05 4E +R 00 00 01 00 +T 28 01 00 00 23 46 DD 6E 02 DD 66 03 7E 91 77 +R 00 00 01 00 +T 33 01 00 00 23 7E 98 77 C3 00 00 00 00 +R 00 00 01 00 02 09 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/execl.rel b/src/nos/lib/crt_banked_lib/execl.rel new file mode 100644 index 00000000..da468bde --- /dev/null +++ b/src/nos/lib/crt_banked_lib/execl.rel @@ -0,0 +1,198 @@ +XL4 +H 4 areas E global symbols +S _execve Ref00000000 +S _environ Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _getenv Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _access Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 158 flags 0 +S __findPath Def00000000 +S _execl Def00000139 +A CSTR size 29 flags 0 +A UDATA0 size 101 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 66 03 7E FE 2F 28 0B DD 6E 02 DD +R 00 00 01 00 +T 14 00 00 00 66 03 7E FE 2E 20 09 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 6E 02 DD 66 03 C3 36 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 03 00 +T 2A 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 02 00 +T 31 00 00 00 FE DD 74 FF 7D B4 20 08 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 36 FE 05 00 00 00 DD 36 FF +R 00 00 01 00 09 07 02 00 +T 40 00 00 00 05 00 00 00 +R 00 00 01 00 89 04 02 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 6E FE DD 66 FF AF B6 CA +R 00 00 01 00 +T 4A 00 00 00 19 01 00 00 +R 00 00 01 00 00 04 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 DD 36 FC 00 00 00 00 DD 36 FD +R 00 00 01 00 09 07 03 00 +T 53 00 00 00 00 00 00 00 +R 00 00 01 00 89 04 03 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 6E FE DD 66 FF AF B6 28 3B DD +R 00 00 01 00 +T 5F 00 00 00 6E FE DD 66 FF 23 DD 75 FE DD 74 +R 00 00 01 00 +T 6A 00 00 00 FF 2B 46 DD 6E FC DD 66 FD 70 78 +R 00 00 01 00 +T 75 00 00 00 FE 3A 28 20 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 01 00 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 00 05 03 00 +T 82 00 00 00 A7 ED 42 01 01 01 A7 ED 42 38 02 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 18 0A +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 18 BB +R 00 00 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 DD 6E FC DD 66 FD 2B DD 75 FC DD +R 00 00 01 00 +T A4 00 00 00 74 FD 7E FE 2F 28 0F +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T B6 00 00 00 74 FD 36 2F +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 01 00 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 00 05 03 00 +T CB 00 00 00 A7 ED 42 E5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T D6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T DB 00 00 00 00 00 00 00 4D 44 E1 09 01 01 01 +R 00 00 01 00 02 04 02 00 +T E4 00 00 00 A7 ED 42 38 02 +R 00 00 01 00 +T E9 00 00 00 +R 00 00 01 00 +T E9 00 00 00 18 2E +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 DD 4E 02 DD 46 03 DD 5E FC DD 56 +R 00 00 01 00 +T F6 00 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T FC 00 00 00 CD 00 00 00 00 01 00 00 11 +R 00 00 01 00 02 05 02 00 +T 03 01 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 0A 00 +T 08 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0A 00 02 09 02 00 +T 0F 01 00 00 20 05 +R 00 00 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 21 00 00 00 00 18 20 +R 00 00 01 00 00 05 03 00 +T 16 01 00 00 +R 00 00 01 00 +T 16 01 00 00 C3 41 00 00 00 +R 00 00 01 00 00 05 01 00 +T 19 01 00 00 +R 00 00 01 00 +T 19 01 00 00 01 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 23 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 28 01 00 00 00 00 00 00 7D B4 20 05 +R 00 00 01 00 02 04 02 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 21 00 00 00 00 18 03 +R 00 00 01 00 00 05 03 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 21 00 00 +R 00 00 01 00 +T 36 01 00 00 +R 00 00 01 00 +T 36 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 CD 00 00 00 00 2A 00 00 00 00 E5 +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T 40 01 00 00 21 0E 00 39 4D 44 DD 5E 0A DD 56 +R 00 00 01 00 +T 4B 01 00 00 0B 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 51 01 00 00 CD 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0B 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 50 41 54 48 00 +R 00 00 02 00 +T 05 00 00 00 +R 00 00 02 00 +T 05 00 00 00 2E 3A 2F 62 69 6E 3A 2F 75 73 72 +R 00 00 02 00 +T 10 00 00 00 2F 62 69 6E 3A 2F 65 74 63 3A 2F +R 00 00 02 00 +T 1B 00 00 00 75 73 72 2F 6C 6F 63 61 6C 2F 62 +R 00 00 02 00 +T 26 00 00 00 69 6E 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/execle.rel b/src/nos/lib/crt_banked_lib/execle.rel new file mode 100644 index 00000000..059f1065 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/execle.rel @@ -0,0 +1,37 @@ +XL4 +H 2 areas 7 global symbols +S _execve Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 48 flags 0 +S _execle Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0E 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 DD 6E FE DD 66 FF 4D 44 03 03 DD +R 00 00 01 00 +T 1A 00 00 00 71 FE DD 70 FF 7E 23 B6 28 02 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 18 E9 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 6E FE DD 66 FF 4E 23 46 C5 21 +R 00 00 01 00 +T 31 00 00 00 10 00 39 4D 44 DD 5E 0A DD 56 0B +R 00 00 01 00 +T 3C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T 42 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0A 02 00 diff --git a/src/nos/lib/crt_banked_lib/execlp.rel b/src/nos/lib/crt_banked_lib/execlp.rel new file mode 100644 index 00000000..c620e7d8 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/execlp.rel @@ -0,0 +1,27 @@ +XL4 +H 2 areas 9 global symbols +S _execve Ref00000000 +S _environ Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __findPath Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S _execlp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 2A 00 00 00 00 E5 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 07 00 00 00 21 0E 00 39 4D 44 DD 5E 0A DD 56 +R 00 00 01 00 +T 12 00 00 00 0B 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 18 00 00 00 CD 00 00 00 00 EB 3E 00 00 00 00 +R 00 00 01 00 02 05 02 00 2B 0B 00 00 +T 1E 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 00 00 02 0A 02 00 +T 25 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/crt_banked_lib/execlpe.rel b/src/nos/lib/crt_banked_lib/execlpe.rel new file mode 100644 index 00000000..0c7acfde --- /dev/null +++ b/src/nos/lib/crt_banked_lib/execlpe.rel @@ -0,0 +1,42 @@ +XL4 +H 2 areas 8 global symbols +S _execve Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __findPath Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 51 flags 0 +S _execlpe Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0E 00 39 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 DD 6E FE DD 66 FF 4D 44 03 03 DD +R 00 00 01 00 +T 1A 00 00 00 71 FE DD 70 FF 7E 23 B6 28 02 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 18 E9 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 6E FE DD 66 FF 4E 23 46 C5 21 +R 00 00 01 00 +T 31 00 00 00 10 00 39 4D 44 DD 5E 0A DD 56 0B +R 00 00 01 00 +T 3C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 42 00 00 00 00 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 00 00 +T 48 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 4F 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 diff --git a/src/nos/lib/crt_banked_lib/exect.rel b/src/nos/lib/crt_banked_lib/exect.rel new file mode 100644 index 00000000..e74d2855 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/exect.rel @@ -0,0 +1,19 @@ +XL4 +H 2 areas 7 global symbols +S _execve Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S _exect Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 0F 00 00 00 CD 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_banked_lib/execv.rel b/src/nos/lib/crt_banked_lib/execv.rel new file mode 100644 index 00000000..e5c09f1a --- /dev/null +++ b/src/nos/lib/crt_banked_lib/execv.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 8 global symbols +S _execve Ref00000000 +S _environ Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S _execv Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 2A 00 00 00 00 E5 +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T 07 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T 0D 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 0A 03 00 diff --git a/src/nos/lib/crt_banked_lib/execvp.rel b/src/nos/lib/crt_banked_lib/execvp.rel new file mode 100644 index 00000000..199b921b --- /dev/null +++ b/src/nos/lib/crt_banked_lib/execvp.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 9 global symbols +S _execve Ref00000000 +S _environ Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __findPath Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1C flags 0 +S _execvp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 2A 00 00 00 00 E5 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 07 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 0D 00 00 00 00 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 0A 00 00 +T 13 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 1A 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 diff --git a/src/nos/lib/crt_banked_lib/execvpe.rel b/src/nos/lib/crt_banked_lib/execvpe.rel new file mode 100644 index 00000000..f9c06f1f --- /dev/null +++ b/src/nos/lib/crt_banked_lib/execvpe.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 8 global symbols +S _execve Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __findPath Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F flags 0 +S _execvpe Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 0F 00 00 00 CD 00 00 00 00 EB 3E 00 00 00 00 +R 00 00 01 00 02 05 01 00 2B 0B 00 00 +T 15 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 1C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_banked_lib/exit.rel b/src/nos/lib/crt_banked_lib/exit.rel new file mode 100644 index 00000000..fd09da81 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/exit.rel @@ -0,0 +1,34 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __exit Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___cleanup Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S _exit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 2A 00 00 00 00 3A +R 00 00 01 00 02 05 04 00 02 0A 05 00 +T 07 00 00 00 02 00 00 00 B5 B4 28 12 +R 00 00 01 00 02 04 05 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 01 00 00 DD 5E 02 DD 56 03 3A +R 00 00 01 00 +T 17 00 00 00 02 00 00 00 2A 00 00 00 00 CD +R 00 00 01 00 02 04 05 00 02 09 05 00 +T 1D 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 27 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 2E 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_banked_lib/fclose.rel b/src/nos/lib/crt_banked_lib/fclose.rel new file mode 100644 index 00000000..88cd8acb --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fclose.rel @@ -0,0 +1,155 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _close Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___IO_list Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 171 flags 0 +S _fclose Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 DD 77 FB DD 7E 02 DD B6 03 20 0C +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 06 00 +T 1D 00 00 00 C3 6E 01 00 00 +R 00 00 01 00 00 05 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 28 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 2F 00 00 00 B4 28 06 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 FF FF C3 6E 01 00 00 +R 00 00 01 00 00 08 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 43 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 48 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 4F 00 00 00 28 08 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 36 FA FF DD 36 FB FF +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 64 00 00 00 FF 23 36 FF 21 0C 00 09 7E E6 04 +R 00 00 01 00 +T 6F 00 00 00 28 34 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 7C 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 81 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 87 00 00 00 0C 00 09 7E E6 FB 77 23 7E E6 FF +R 00 00 01 00 +T 92 00 00 00 77 21 06 00 09 E5 21 08 00 09 AF +R 00 00 01 00 +T 9D 00 00 00 77 23 77 E1 AF 77 23 77 +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T B0 00 00 00 E6 08 CA 5A 01 00 00 +R 00 00 01 00 00 07 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 2A 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 08 00 +T BE 00 00 00 AF DD 77 FE DD 77 FF 21 0C 00 DD +R 00 00 01 00 +T C9 00 00 00 4E 02 DD 46 03 09 AF 77 23 77 +R 00 00 01 00 +T D3 00 00 00 +R 00 00 01 00 +T D3 00 00 00 DD 7E FC DD B6 FD 28 27 DD 6E 02 +R 00 00 01 00 +T DE 00 00 00 DD 66 03 DD 4E FC DD 46 FD A7 ED +R 00 00 01 00 +T E9 00 00 00 42 28 16 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 21 16 00 DD 4E FC DD 46 FD 09 56 +R 00 00 01 00 +T F7 00 00 00 23 66 6A DD 75 FC DD 74 FD 18 D1 +R 00 00 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 DD 6E 02 DD 66 03 DD 4E FC DD 46 +R 00 00 01 00 +T 0D 01 00 00 FD A7 ED 42 20 37 +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 7E FE DD B6 FF 20 13 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 21 16 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 26 01 00 00 23 66 68 22 00 00 00 00 18 1C +R 00 00 01 00 02 08 08 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 21 16 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 39 01 00 00 21 16 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 44 01 00 00 23 46 E1 71 23 70 +R 00 00 01 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 52 01 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 59 01 00 00 0E +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 AF +R 00 00 01 00 +T 65 01 00 00 77 23 77 +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_banked_lib/fflush.rel b/src/nos/lib/crt_banked_lib/fflush.rel new file mode 100644 index 00000000..60808d79 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fflush.rel @@ -0,0 +1,208 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _stderr Ref00000000 +S _lseek Ref00000000 +S .__.ABS. Def00000000 +S _stdin Ref00000000 +S _stdout Ref00000000 +S _errno Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ___IO_list Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 213 flags 0 +S _fflush Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 FE +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 DD 77 FF DD 7E 02 DD B6 03 20 78 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 29 0A 01 00 +T 1A 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 00 04 01 00 02 09 00 00 +T 21 00 00 00 20 1E 11 00 00 00 00 3E +R 00 00 01 00 02 07 06 00 +T 27 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 2C 00 00 00 00 00 00 00 7D B4 20 0F 11 +R 00 00 01 00 02 04 00 00 +T 33 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 29 09 01 00 +T 38 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 00 04 01 00 02 09 00 00 +T 3F 00 00 00 28 06 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 21 FF FF C3 10 02 00 00 +R 00 00 01 00 00 08 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 2A 00 00 00 00 DD 75 02 DD 74 03 +R 00 00 01 00 02 05 0B 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 DD 7E 02 DD B6 03 28 2E +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 29 0B 01 00 +T 60 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 00 05 01 00 02 0A 00 00 +T 67 00 00 00 B4 28 06 +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 21 FF FF C3 10 02 00 00 +R 00 00 01 00 00 08 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 21 16 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 7B 00 00 00 23 66 6A DD 75 02 DD 74 03 18 CA +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 21 00 00 C3 10 02 00 00 +R 00 00 01 00 00 08 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 97 00 00 00 E6 80 CA 66 01 00 00 +R 00 00 01 00 00 07 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T A7 00 00 00 23 56 0A 6F 03 0A 67 A7 ED 52 DD +R 00 00 01 00 +T B2 00 00 00 75 FA DD 74 FB 7D B4 CA +R 00 00 01 00 +T BA 00 00 00 64 01 00 00 +R 00 00 01 00 00 04 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T C7 00 00 00 23 66 68 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 DD 6E FA DD 66 FB E5 DD 4E F8 DD +R 00 00 01 00 +T DB 00 00 00 46 F9 21 0A 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T E6 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T ED 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 08 00 02 09 00 00 +T F4 00 00 00 75 FC DD 74 FD 4D 44 21 00 00 CD +R 00 00 01 00 +T FF 00 00 00 00 00 00 00 30 1E +R 00 00 01 00 02 04 0A 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 21 00 00 39 7E DD 86 FC 77 23 7E +R 00 00 01 00 +T 0E 01 00 00 DD 8E FD 77 21 02 00 39 7E DD 96 +R 00 00 01 00 +T 19 01 00 00 FC 77 23 7E DD 9E FD 77 +R 00 00 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 DD 4E FC DD 46 FD 21 00 00 CD +R 00 00 01 00 +T 2B 01 00 00 00 00 00 00 38 A1 DD 7E FC DD A6 +R 00 00 01 00 02 04 0A 00 +T 34 01 00 00 FD 3C 20 09 2A 00 00 00 00 3E 04 +R 00 00 01 00 02 09 07 00 +T 3D 01 00 00 AD B4 28 8F +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 DD 7E FA DD B6 FB 28 1B +R 00 00 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 54 01 00 00 F6 00 77 23 7E F6 02 77 DD 36 FE +R 00 00 01 00 +T 5F 01 00 00 FF DD 36 FF FF +R 00 00 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 18 6A +R 00 00 01 00 +T 66 01 00 00 +R 00 00 01 00 +T 66 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 71 01 00 00 E6 40 28 5B +R 00 00 01 00 +T 75 01 00 00 +R 00 00 01 00 +T 75 01 00 00 DD 6E 02 DD 66 03 4E 23 46 DD 6E +R 00 00 01 00 +T 80 01 00 00 02 DD 66 03 23 23 56 23 66 6A A7 +R 00 00 01 00 +T 8B 01 00 00 ED 42 DD 75 FA DD 74 FB 4D 44 21 +R 00 00 01 00 +T 96 01 00 00 00 00 CD 00 00 00 00 30 33 21 +R 00 00 01 00 02 07 0A 00 +T 9E 01 00 00 01 00 E5 DD 4E FA DD 46 FB A7 21 +R 00 00 01 00 +T A9 01 00 00 00 00 ED 42 7C 07 9F 4F 41 C5 E5 +R 00 00 01 00 +T B4 01 00 00 21 0A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T BF 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T C4 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T CB 01 00 00 F1 CB 78 28 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T DB 01 00 00 E6 3F 77 23 7E E6 FA 77 69 60 23 +R 00 00 01 00 +T E6 01 00 00 23 E5 21 04 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T F1 01 00 00 09 E5 21 06 00 09 56 23 66 6A E5 +R 00 00 01 00 +T FC 01 00 00 69 60 C1 71 23 70 E1 71 23 70 E1 +R 00 00 01 00 +T 07 02 00 00 71 23 70 DD 6E FE DD 66 FF +R 00 00 01 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/fgetc.rel b/src/nos/lib/crt_banked_lib/fgetc.rel new file mode 100644 index 00000000..eb56e58e --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fgetc.rel @@ -0,0 +1,94 @@ +XL4 +H 2 areas 8 global symbols +S _fread Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 110 flags 0 +S _fgetc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0C 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 7E E6 80 28 0E +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 1C 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 2D 00 00 00 E6 10 4F 23 7E E6 03 47 3E 10 A9 +R 00 00 01 00 +T 38 00 00 00 B0 28 06 +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 21 FF FF C3 0D 01 00 00 +R 00 00 01 00 00 08 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 4C 00 00 00 DD 6E 02 DD 66 03 56 23 66 6A A7 +R 00 00 01 00 +T 57 00 00 00 ED 42 DA F3 00 00 00 +R 00 00 01 00 00 07 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 6E 02 DD 66 03 23 23 E5 21 +R 00 00 01 00 +T 66 00 00 00 06 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 71 00 00 00 56 E1 73 23 72 69 60 73 23 72 DD +R 00 00 01 00 +T 7C 00 00 00 6E 02 DD 66 03 E5 21 06 00 DD 4E +R 00 00 01 00 +T 87 00 00 00 02 DD 46 03 09 5E 23 56 21 08 00 +R 00 00 01 00 +T 92 00 00 00 09 7E 23 66 6F A7 ED 52 E5 01 +R 00 00 01 00 +T 9C 00 00 00 01 00 DD 6E 02 DD 66 03 5E 23 56 +R 00 00 01 00 +T A7 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T AD 00 00 00 00 00 00 00 F1 F1 DD 75 FE DD 74 +R 00 00 01 00 02 04 01 00 +T B6 00 00 00 FF 7D B4 20 05 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 21 FF FF 18 4D +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 DD 6E 02 DD 66 03 23 23 7E DD 86 +R 00 00 01 00 +T CB 00 00 00 FE 77 23 7E DD 8E FF 77 21 0C 00 +R 00 00 01 00 +T D6 00 00 00 DD 4E 02 DD 46 03 09 7E F6 40 77 +R 00 00 01 00 +T E1 00 00 00 23 7E F6 00 77 21 0C 00 09 7E E6 +R 00 00 01 00 +T EC 00 00 00 FF 77 23 7E E6 FB 77 +R 00 00 01 00 +T F3 00 00 00 +R 00 00 01 00 +T F3 00 00 00 DD 6E 02 DD 66 03 4E 23 46 03 70 +R 00 00 01 00 +T FE 00 00 00 2B 71 0B 0A 4F 06 00 DD 71 FE DD +R 00 00 01 00 +T 09 01 00 00 70 FF 69 60 +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_banked_lib/fgetgren.rel b/src/nos/lib/crt_banked_lib/fgetgren.rel new file mode 100644 index 00000000..9250c241 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fgetgren.rel @@ -0,0 +1,34 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___getgrent Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2A flags 0 +S _fgetgrent Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 20 0B +R 00 00 01 00 02 05 04 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 21 04 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 05 00 +T 10 00 00 00 18 15 +R 00 00 01 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1D 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 22 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/fgetpwen.rel b/src/nos/lib/crt_banked_lib/fgetpwen.rel new file mode 100644 index 00000000..688c1081 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fgetpwen.rel @@ -0,0 +1,34 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S ___getpwent Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2A flags 0 +S _fgetpwent Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 20 0B +R 00 00 01 00 02 05 03 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 21 04 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 04 00 +T 10 00 00 00 18 15 +R 00 00 01 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1D 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 22 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/fgets.rel b/src/nos/lib/crt_banked_lib/fgets.rel new file mode 100644 index 00000000..9341c126 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fgets.rel @@ -0,0 +1,83 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fgetc Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A5 flags 0 +S _fgets Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 71 FA DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 70 FB DD 6E 02 DD 66 03 DD 75 FE +R 00 00 01 00 +T 14 00 00 00 DD 74 FF +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E FA DD 66 FB 2B DD 75 FA DD +R 00 00 01 00 +T 22 00 00 00 74 FB 23 7D B4 28 51 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 31 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 38 00 00 00 75 FC DD 74 FD 7D A4 3C 20 18 +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 DD 6E FE DD 66 FF DD 4E 02 DD 46 +R 00 00 01 00 +T 4D 00 00 00 03 A7 ED 42 20 05 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 21 00 00 18 4A +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 18 20 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 DD 46 FC DD 6E 02 DD 66 03 23 DD +R 00 00 01 00 +T 65 00 00 00 75 02 DD 74 03 2B 70 3E 0A DD AE +R 00 00 01 00 +T 70 00 00 00 FC DD B6 FD 20 02 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 18 02 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 18 9D +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 DD 6E 02 DD 66 03 36 00 21 0C 00 +R 00 00 01 00 +T 85 00 00 00 DD 4E 0A DD 46 0B 09 7E E6 00 47 +R 00 00 01 00 +T 90 00 00 00 23 7E E6 02 B0 28 05 21 00 00 18 +R 00 00 01 00 +T 9B 00 00 00 06 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_banked_lib/fopen.rel b/src/nos/lib/crt_banked_lib/fopen.rel new file mode 100644 index 00000000..0c5e85d2 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fopen.rel @@ -0,0 +1,254 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _isatty Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S ___IO_list Ref00000000 +S _open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2B9 flags 0 +S ___fopen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FB AF DD 77 FC DD 77 FD AF +R 00 00 01 00 +T 14 00 00 00 DD 77 FE DD 77 FF DD 7E 0A DD B6 +R 00 00 01 00 +T 1F 00 00 00 0B 28 35 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T 2D 00 00 00 E6 0F 5F 23 7E E6 00 57 21 02 00 +R 00 00 01 00 +T 38 00 00 00 39 7E B3 77 23 7E B2 77 21 0C 00 +R 00 00 01 00 +T 43 00 00 00 09 7E E6 F3 77 23 7E E6 FF 77 59 +R 00 00 01 00 +T 4E 00 00 00 50 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 54 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 6E 0C DD 66 0D AF B6 28 70 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 6E 0C DD 66 0D 23 DD 75 0C DD +R 00 00 01 00 +T 6C 00 00 00 74 0D 2B 5E CD 00 00 00 00 04 00 +R 00 00 01 00 02 09 0B 00 +T 75 00 00 00 2B 61 72 77 CF 00 00 00 +R 00 00 01 00 00 08 01 00 +T 7B 00 00 00 92 00 00 00 83 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7F 00 00 00 A9 00 00 00 C0 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 21 02 00 39 7E F6 10 77 23 7E F6 +R 00 00 01 00 +T 8E 00 00 00 00 77 18 3D +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T 9D 00 00 00 00 77 DD 36 FA 00 DD 36 FB 03 18 +R 00 00 01 00 +T A8 00 00 00 26 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T B4 00 00 00 00 77 DD 36 FA 00 DD 36 FB 21 18 +R 00 00 01 00 +T BF 00 00 00 0F +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 21 02 00 39 7E F6 30 77 23 7E F6 +R 00 00 01 00 +T CB 00 00 00 00 77 18 00 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 18 86 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 7E FC E6 30 4F DD 7E FD E6 00 +R 00 00 01 00 +T DC 00 00 00 47 79 B0 20 06 +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 3E 10 A9 B0 20 02 18 24 +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 3E 20 A9 B0 20 0F 21 00 00 39 7E +R 00 00 01 00 +T FA 00 00 00 F6 01 77 23 7E F6 00 77 18 0F +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 21 00 00 39 7E F6 02 77 23 7E F6 +R 00 00 01 00 +T 0F 01 00 00 00 77 18 00 +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 7E 0A DD B6 0B 20 1E 01 18 00 +R 00 00 01 00 +T 1E 01 00 00 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 24 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 2B 01 00 00 FE DD 74 FF 7D B4 20 06 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 7E 02 DD B6 03 28 23 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 21 B6 01 E5 DD 6E FA DD 66 FB E5 +R 00 00 01 00 +T 4C 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 54 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 59 01 00 00 00 00 00 00 F1 F1 F1 DD 75 04 DD +R 00 00 01 00 02 04 00 00 +T 62 01 00 00 74 05 +R 00 00 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 DD CB 05 7E 28 2E +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 2A 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 05 00 +T 73 01 00 00 DD 7E FE DD B6 FF 28 0E +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 83 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 89 01 00 00 +R 00 00 01 00 +T 89 01 00 00 DD 6E FA DD 66 FB 22 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 92 01 00 00 21 00 00 C3 B6 02 00 00 +R 00 00 01 00 00 08 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 DD 7E 0A DD B6 0B C2 6A 02 00 00 +R 00 00 01 00 00 0B 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 DD 6E FE DD 66 FF DD 75 0A DD 74 +R 00 00 01 00 +T AC 01 00 00 0B 01 16 00 09 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T B5 01 00 00 71 23 70 DD 6E 0A DD 66 0B 22 +R 00 00 01 00 +T BF 01 00 00 00 00 00 00 21 0C 00 DD 4E 0A DD +R 00 00 01 00 02 04 08 00 +T C8 01 00 00 46 0B 09 36 08 23 36 00 DD 5E 04 +R 00 00 01 00 +T D3 01 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T D9 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T E0 01 00 00 28 13 +R 00 00 01 00 +T E2 01 00 00 +R 00 00 01 00 +T E2 01 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T ED 01 00 00 F6 01 77 23 7E F6 00 77 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 21 06 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 00 02 00 00 01 00 02 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 08 02 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 0F 02 00 00 44 E1 71 23 70 79 B0 20 29 +R 00 00 01 00 +T 18 02 00 00 +R 00 00 01 00 +T 18 02 00 00 21 06 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 23 02 00 00 21 0E 00 09 EB E1 73 23 72 21 +R 00 00 01 00 +T 2D 02 00 00 08 00 09 E5 21 0E 00 09 01 08 00 +R 00 00 01 00 +T 38 02 00 00 09 4D 44 E1 71 23 70 18 29 +R 00 00 01 00 +T 41 02 00 00 +R 00 00 01 00 +T 41 02 00 00 21 08 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 4C 02 00 00 21 06 00 09 56 23 66 6A 3E 02 84 +R 00 00 01 00 +T 57 02 00 00 67 EB E1 73 23 72 21 0C 00 09 7E +R 00 00 01 00 +T 62 02 00 00 F6 04 77 23 7E F6 00 77 +R 00 00 01 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 DD 6E 0A DD 66 0B 23 23 E5 21 +R 00 00 01 00 +T 74 02 00 00 04 00 DD 4E 0A DD 46 0B 09 E5 21 +R 00 00 01 00 +T 7F 02 00 00 06 00 09 5E 23 56 E1 73 23 72 E1 +R 00 00 01 00 +T 8A 02 00 00 73 23 72 69 60 73 23 72 21 0C 00 +R 00 00 01 00 +T 95 02 00 00 DD 4E 0A DD 46 0B 09 7E DD B6 FC +R 00 00 01 00 +T A0 02 00 00 77 23 7E DD B6 FD 77 21 0A 00 09 +R 00 00 01 00 +T AB 02 00 00 DD 5E 04 DD 56 05 73 23 72 69 60 +R 00 00 01 00 +T B6 02 00 00 +R 00 00 01 00 +T B6 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/fprintf.rel b/src/nos/lib/crt_banked_lib/fprintf.rel new file mode 100644 index 00000000..b7d71c8a --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fprintf.rel @@ -0,0 +1,30 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___fputter Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___vprinter Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3B flags 0 +S _fprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 10 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 6E 0C DD 66 0D E5 DD 6E 0A DD +R 00 00 01 00 +T 1F 00 00 00 66 0B E5 0E 00 00 00 00 11 +R 00 00 01 00 2B 08 01 00 +T 25 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 09 06 00 +T 2A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 31 00 00 00 F1 DD 75 FE DD 74 FF C3 +R 00 00 01 00 +T 39 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/crt_banked_lib/fputc.rel b/src/nos/lib/crt_banked_lib/fputc.rel new file mode 100644 index 00000000..f3b74fa9 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fputc.rel @@ -0,0 +1,130 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ___stdio_init_vars Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 112 flags 0 +S _fputc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 3E +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 0B 00 00 00 00 00 00 00 21 0C 00 09 46 23 66 +R 00 00 01 00 02 04 00 00 +T 14 00 00 00 68 DD 75 FE DD 74 FF 7D E6 40 28 +R 00 00 01 00 +T 1F 00 00 00 18 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 27 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 2C 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 00 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 FF FF C3 0F 01 00 00 +R 00 00 01 00 00 08 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 7E FE E6 20 6F DD 7E FF E6 03 +R 00 00 01 00 +T 43 00 00 00 67 3E 20 AD B4 28 06 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 21 FF FF C3 0F 01 00 00 +R 00 00 01 00 00 08 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 21 08 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 5B 00 00 00 23 56 0A 6F 03 0A 67 A7 ED 52 38 +R 00 00 01 00 +T 66 00 00 00 18 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 6E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 73 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 00 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 21 FF FF C3 0F 01 00 00 +R 00 00 01 00 00 08 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 DD 6E 04 DD 66 05 4E 23 46 03 70 +R 00 00 01 00 +T 8A 00 00 00 2B 71 0B 69 60 DD 46 02 70 21 +R 00 00 01 00 +T 94 00 00 00 0C 00 DD 4E 04 DD 46 05 09 7E F6 +R 00 00 01 00 +T 9F 00 00 00 80 77 23 7E F6 00 77 3E 0A DD AE +R 00 00 01 00 +T AA 00 00 00 02 DD B6 03 20 07 DD 7E FE E6 01 +R 00 00 01 00 +T B5 00 00 00 20 07 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 DD 7E FE E6 02 28 17 +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T C6 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T CD 00 00 00 B4 28 05 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 21 FF FF 18 3A +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 DD 7E FE E6 03 28 18 +R 00 00 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T E7 00 00 00 21 06 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T F2 00 00 00 18 16 +R 00 00 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T FF 00 00 00 21 08 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 0A 01 00 00 +R 00 00 01 00 +T 0A 01 00 00 DD 6E 02 26 00 +R 00 00 01 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_banked_lib/fputs.rel b/src/nos/lib/crt_banked_lib/fputs.rel new file mode 100644 index 00000000..b0d5b5ea --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fputs.rel @@ -0,0 +1,53 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _fputc Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5E flags 0 +S _fputs Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FC +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 77 FD DD 6E 02 DD 66 03 DD 75 +R 00 00 01 00 +T 14 00 00 00 FE DD 74 FF +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 6E FE DD 66 FF AF B6 28 33 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 2D 00 00 00 FF 23 DD 75 FE DD 74 FF 2B 5E 16 +R 00 00 01 00 +T 38 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 3E 00 00 00 CD 00 00 00 00 7D A4 3C 20 05 +R 00 00 01 00 02 05 00 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 21 FF FF 18 10 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 18 C3 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/fputter.rel b/src/nos/lib/crt_banked_lib/fputter.rel new file mode 100644 index 00000000..a4bd53be --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fputter.rel @@ -0,0 +1,92 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _fputc Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E7 flags 0 +S ___fputter Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 0C 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 5E 0A DD 56 0B 19 7E E6 03 4F 23 +R 00 00 01 00 +T 14 00 00 00 7E E6 00 47 DD 71 FD DD 70 FE 21 +R 00 00 01 00 +T 1F 00 00 00 0C 00 19 7E E6 FC 77 23 7E E6 FF +R 00 00 01 00 +T 2A 00 00 00 77 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 DD 4E 04 DD 46 05 DD 6E FA DD 66 +R 00 00 01 00 +T 3D 00 00 00 FB A7 ED 42 30 4E +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 6E 02 DD 66 03 46 DD 70 FC DD +R 00 00 01 00 +T 4E 00 00 00 4E 0A DD 46 0B DD 5E FC 16 00 3E +R 00 00 01 00 +T 59 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 5E 00 00 00 00 00 00 00 DD 7E FC FE 0A 20 18 +R 00 00 01 00 02 04 00 00 +T 67 00 00 00 3E 01 DD AE FD DD B6 FE 20 0E +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 79 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 18 A1 +R 00 00 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T 9C 00 00 00 DD B6 FD 77 23 7E DD B6 FE 77 3E +R 00 00 01 00 +T A7 00 00 00 02 DD AE FD DD B6 FE 20 0E +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T B8 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 3E 01 DD AE FD DD B6 FE 20 16 +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 21 04 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T D3 00 00 00 21 06 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 DD 6E FA DD 66 FB C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_banked_lib/fread.rel b/src/nos/lib/crt_banked_lib/fread.rel new file mode 100644 index 00000000..a6cf0834 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fread.rel @@ -0,0 +1,155 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S _memcpy Ref00000000 +S ___stdio_init_vars Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1AE flags 0 +S _fread Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 FE +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 DD 77 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 16 00 00 00 02 DD B6 03 28 18 DD 7E 04 DD B6 +R 00 00 01 00 +T 21 00 00 00 05 28 10 DD 7E 0A DD B6 0B 28 08 +R 00 00 01 00 +T 2C 00 00 00 DD 7E 0C DD B6 0D 20 06 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 21 00 00 C3 AB 01 00 00 +R 00 00 01 00 00 08 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 46 +R 00 00 01 00 +T 45 00 00 00 23 66 68 DD 75 FA DD 74 FB 7D E6 +R 00 00 01 00 +T 50 00 00 00 80 28 0E +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 5B 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 7E FA E6 10 6F DD 7E FB E6 03 +R 00 00 01 00 +T 6C 00 00 00 67 3E 10 AD B4 28 06 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 21 00 00 C3 AB 01 00 00 +R 00 00 01 00 00 08 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 DD 4E 0A DD 46 0B DD 5E 04 DD 56 +R 00 00 01 00 +T 84 00 00 00 05 CD 00 00 00 00 DD 73 FC DD 72 +R 00 00 01 00 02 06 08 00 +T 8D 00 00 00 FD DD 6E 0C DD 66 0D 4E 23 46 DD +R 00 00 01 00 +T 98 00 00 00 6E 0C DD 66 0D 23 23 7E 23 66 6F +R 00 00 01 00 +T A3 00 00 00 A7 ED 42 DD 75 F8 DD 74 F9 A7 ED +R 00 00 01 00 +T AE 00 00 00 52 38 39 +R 00 00 01 00 +T B1 00 00 00 +R 00 00 01 00 +T B1 00 00 00 DD 6E FC DD 66 FD E5 DD 6E 0C DD +R 00 00 01 00 +T BC 00 00 00 66 0D 4E 23 46 DD 5E 02 DD 56 03 +R 00 00 01 00 +T C7 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T CD 00 00 00 00 00 00 00 F1 DD 6E 0C DD 66 0D +R 00 00 01 00 02 04 00 00 +T D6 00 00 00 7E DD 86 FC 77 23 7E DD 8E FD 77 +R 00 00 01 00 +T E1 00 00 00 DD 6E FC DD 66 FD C3 AB 01 00 00 +R 00 00 01 00 00 0B 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 DD 4E F8 DD 46 F9 21 00 00 CD +R 00 00 01 00 +T F4 00 00 00 00 00 00 00 30 2B +R 00 00 01 00 02 04 09 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 DD 6E F8 DD 66 F9 E5 DD 6E 0C DD +R 00 00 01 00 +T 03 01 00 00 66 0D 4E 23 46 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 0E 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 14 01 00 00 00 00 00 00 F1 DD 6E F8 DD 66 F9 +R 00 00 01 00 02 04 00 00 +T 1D 01 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 DD 4E FE DD 46 FF DD 6E FC DD 66 +R 00 00 01 00 +T 2E 01 00 00 FD A7 ED 42 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 39 01 00 00 09 4D 44 21 0A 00 DD 5E 0C DD 56 +R 00 00 01 00 +T 44 01 00 00 0D 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 4C 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 53 01 00 00 75 F8 DD 74 F9 CB 7C 28 1C +R 00 00 01 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 67 01 00 00 F6 00 77 23 7E F6 02 77 AF DD 77 +R 00 00 01 00 +T 72 01 00 00 F8 DD 77 F9 18 1B +R 00 00 01 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 DD 7E F8 DD B6 F9 20 13 +R 00 00 01 00 +T 80 01 00 00 +R 00 00 01 00 +T 80 01 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 8B 01 00 00 F6 00 77 23 7E F6 01 77 +R 00 00 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 DD 6E F8 DD 66 F9 DD 4E FE DD 46 +R 00 00 01 00 +T 9E 01 00 00 FF 09 EB DD 4E 04 DD 46 05 CD +R 00 00 01 00 +T A8 01 00 00 00 00 00 00 EB +R 00 00 01 00 02 04 0A 00 +T AB 01 00 00 +R 00 00 01 00 +T AB 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/crt_banked_lib/free.rel b/src/nos/lib/crt_banked_lib/free.rel new file mode 100644 index 00000000..cc2335b5 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/free.rel @@ -0,0 +1,88 @@ +XL4 +H 2 areas 6 global symbols +S ___malloc_last Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DA flags 0 +S _free Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 FC FF DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 4E 02 DD 46 03 09 DD 75 FE DD 74 +R 00 00 01 00 +T 14 00 00 00 FF 23 23 7E 23 B6 28 03 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 C3 D7 00 00 00 +R 00 00 01 00 00 05 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 2A 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 00 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 4E FC DD 46 FD DD 6E FE DD 66 +R 00 00 01 00 +T 33 00 00 00 FF A7 ED 42 38 17 DD 6E FC DD 66 +R 00 00 01 00 +T 3E 00 00 00 FD 23 23 46 23 66 68 DD 4E FE DD +R 00 00 01 00 +T 49 00 00 00 46 FF A7 ED 42 30 53 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 DD 6E FC DD 66 FD 23 23 4E 23 46 +R 00 00 01 00 +T 5B 00 00 00 DD 6E FC DD 66 FD A7 ED 42 38 29 +R 00 00 01 00 +T 66 00 00 00 DD 4E FE DD 46 FF DD 6E FC DD 66 +R 00 00 01 00 +T 71 00 00 00 FD A7 ED 42 38 16 DD 6E FC DD 66 +R 00 00 01 00 +T 7C 00 00 00 FD 23 23 4E 23 46 DD 6E FE DD 66 +R 00 00 01 00 +T 87 00 00 00 FF A7 ED 42 30 02 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 18 14 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T 9A 00 00 00 68 DD 75 FC DD 74 FD 18 85 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 DD 6E FE DD 66 FF 23 23 E5 DD 4E +R 00 00 01 00 +T AE 00 00 00 FC DD 46 FD 03 03 69 60 4E 23 46 +R 00 00 01 00 +T B9 00 00 00 E1 71 23 70 DD 6E FC DD 66 FD 23 +R 00 00 01 00 +T C4 00 00 00 23 DD 4E FE DD 46 FF 71 23 70 DD +R 00 00 01 00 +T CF 00 00 00 6E FC DD 66 FD 22 00 00 00 00 +R 00 00 01 00 02 0A 00 00 +T D7 00 00 00 +R 00 00 01 00 +T D7 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/fscanf.rel b/src/nos/lib/crt_banked_lib/fscanf.rel new file mode 100644 index 00000000..af5f7046 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fscanf.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _vfscanf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S _fscanf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 10 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 4E 0C DD 46 0D DD 5E 0A DD 56 +R 00 00 01 00 +T 1F 00 00 00 0B 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 25 00 00 00 CD 00 00 00 00 F1 DD 75 FE DD 74 +R 00 00 01 00 02 05 00 00 +T 2E 00 00 00 FF C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/crt_banked_lib/ftell.rel b/src/nos/lib/crt_banked_lib/ftell.rel new file mode 100644 index 00000000..cce1c724 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/ftell.rel @@ -0,0 +1,40 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S _lseek Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3F flags 0 +S _ftell Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 2B 0A 01 00 +T 06 00 00 00 00 00 00 00 CD 00 00 00 00 7D A4 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 0D 00 00 00 3C 20 08 +R 00 00 01 00 +T 10 00 00 00 +R 00 00 01 00 +T 10 00 00 00 01 FF FF 21 FF FF 18 24 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 21 01 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 23 00 00 00 E5 21 0A 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 2E 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 34 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 3B 00 00 00 F1 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/crt_banked_lib/fwrite.rel b/src/nos/lib/crt_banked_lib/fwrite.rel new file mode 100644 index 00000000..2eb02e97 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/fwrite.rel @@ -0,0 +1,198 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S _memcpy Ref00000000 +S ___stdio_init_vars Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21C flags 0 +S _fwrite Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 3E +R 00 00 01 00 02 05 08 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 0B 00 00 00 00 00 00 00 DD 7E 02 DD B6 03 28 +R 00 00 01 00 02 04 00 00 +T 14 00 00 00 18 DD 7E 04 DD B6 05 28 10 DD 7E +R 00 00 01 00 +T 1F 00 00 00 0A DD B6 0B 28 08 DD 7E 0C DD B6 +R 00 00 01 00 +T 2A 00 00 00 0D 20 06 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 46 +R 00 00 01 00 +T 3E 00 00 00 23 66 68 DD 75 FA DD 74 FB 7D E6 +R 00 00 01 00 +T 49 00 00 00 40 28 18 DD 5E 0C DD 56 0D 3E +R 00 00 01 00 +T 53 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 58 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 00 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 7E FA E6 20 6F DD 7E FB E6 03 +R 00 00 01 00 +T 6F 00 00 00 67 3E 20 AD B4 28 06 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 4E 0A DD 46 0B DD 5E 04 DD 56 +R 00 00 01 00 +T 87 00 00 00 05 CD 00 00 00 00 DD 73 FC DD 72 +R 00 00 01 00 02 06 09 00 +T 90 00 00 00 FD DD 6E 0C DD 66 0D 4E 23 46 21 +R 00 00 01 00 +T 9B 00 00 00 08 00 DD 5E 0C DD 56 0D 19 56 23 +R 00 00 01 00 +T A6 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T B1 00 00 00 DD 4E FC DD 46 FD A7 ED 42 30 18 +R 00 00 01 00 +T BC 00 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T C4 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T CB 00 00 00 B4 28 06 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 00 00 C3 19 02 00 00 +R 00 00 01 00 00 08 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 DD 6E 0C DD 66 0D 4E 23 46 21 +R 00 00 01 00 +T DE 00 00 00 08 00 DD 5E 0C DD 56 0D 19 56 23 +R 00 00 01 00 +T E9 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T F4 00 00 00 DD 4E FC DD 46 FD A7 ED 42 38 61 +R 00 00 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 0A 01 00 00 F6 80 77 23 7E F6 00 77 DD 6E FC +R 00 00 01 00 +T 15 01 00 00 DD 66 FD E5 DD 4E 02 DD 46 03 DD +R 00 00 01 00 +T 20 01 00 00 6E 0C DD 66 0D 5E 23 56 3E +R 00 00 01 00 +T 29 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 2E 01 00 00 00 00 00 00 F1 DD 6E 0C DD 66 0D +R 00 00 01 00 02 04 00 00 +T 37 01 00 00 7E DD 86 FC 77 23 7E DD 8E FD 77 +R 00 00 01 00 +T 42 01 00 00 DD 7E FA E6 03 28 0E +R 00 00 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 51 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 DD 6E 0A DD 66 0B C3 19 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 6B 01 00 00 FF +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 6E FC DD 66 FD E5 DD 4E 02 DD +R 00 00 01 00 +T 77 01 00 00 46 03 21 0A 00 DD 5E 0C DD 56 0D +R 00 00 01 00 +T 82 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T 89 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 90 01 00 00 75 F8 DD 74 F9 4D 44 21 00 00 CD +R 00 00 01 00 +T 9B 01 00 00 00 00 00 00 30 22 +R 00 00 01 00 02 04 0A 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 DD 6E F8 DD 66 F9 DD 4E 02 DD 46 +R 00 00 01 00 +T AA 01 00 00 03 09 DD 75 02 DD 74 03 21 04 00 +R 00 00 01 00 +T B5 01 00 00 39 7E DD 96 F8 77 23 7E DD 9E F9 +R 00 00 01 00 +T C0 01 00 00 77 +R 00 00 01 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 DD 4E F8 DD 46 F9 21 00 00 CD +R 00 00 01 00 +T CB 01 00 00 00 00 00 00 38 9D DD 7E F8 DD A6 +R 00 00 01 00 02 04 0A 00 +T D4 01 00 00 F9 3C 20 09 2A 00 00 00 00 3E 04 +R 00 00 01 00 02 09 06 00 +T DD 01 00 00 AD B4 28 8B +R 00 00 01 00 +T E1 01 00 00 +R 00 00 01 00 +T E1 01 00 00 DD CB F9 7E 28 13 +R 00 00 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 21 0C 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T F2 01 00 00 F6 00 77 23 7E F6 02 77 +R 00 00 01 00 +T FA 01 00 00 +R 00 00 01 00 +T FA 01 00 00 21 06 00 39 7E DD 96 FC 77 23 7E +R 00 00 01 00 +T 05 02 00 00 DD 9E FD 77 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T 10 02 00 00 5E FE DD 56 FF CD 00 00 00 00 EB +R 00 00 01 00 02 0A 0B 00 +T 19 02 00 00 +R 00 00 01 00 +T 19 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/crt_banked_lib/getcwd.rel b/src/nos/lib/crt_banked_lib/getcwd.rel new file mode 100644 index 00000000..29cf7631 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/getcwd.rel @@ -0,0 +1,353 @@ +XL4 +H 4 areas 11 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strcat Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _closedir Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _readdir Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _opendir Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2A2 flags 0 +S _getcwd Def00000245 +A CSTR size 8 flags 0 +A UDATA0 size 26 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 36 FE 00 +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 01 08 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 10 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0F 00 02 0A 0F 00 +T 16 00 00 00 00 00 00 00 CB 7C 28 06 +R 00 00 01 00 02 04 00 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 00 00 C3 94 01 00 00 +R 00 00 01 00 00 08 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 2A 08 00 00 00 DD 4E 02 DD 46 03 +R 00 00 01 00 00 05 03 00 +T 2B 00 00 00 A7 ED 42 28 03 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 34 FE +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 04 00 +T 39 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 40 00 00 00 75 FA DD 74 FB 2B ED 4B +R 00 00 01 00 +T 48 00 00 00 00 00 00 00 09 DD 75 F8 DD 74 F9 +R 00 00 01 00 00 04 03 00 +T 51 00 00 00 7E FE 2F 28 3C +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 DD 4E FA DD 46 FB 03 03 2A +R 00 00 01 00 +T 5F 00 00 00 02 00 00 00 CD 00 00 00 00 30 0C +R 00 00 01 00 00 04 03 00 02 09 0C 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 21 22 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 0A 00 +T 6F 00 00 00 C3 94 01 00 00 +R 00 00 01 00 00 05 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 01 00 00 00 00 DD 5E F8 DD 56 F9 +R 00 00 01 00 00 05 02 00 +T 7B 00 00 00 13 DD 73 F8 DD 72 F9 3E +R 00 00 01 00 +T 83 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 88 00 00 00 00 00 00 00 DD 34 FA 20 03 DD 34 +R 00 00 01 00 02 04 00 00 +T 91 00 00 00 FB +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 0D 00 +T A0 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0D 00 02 0A 00 00 +T A7 00 00 00 75 FC DD 74 FD 7D B4 20 06 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 21 00 00 C3 94 01 00 00 +R 00 00 01 00 00 08 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T BE 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T C5 00 00 00 75 F6 DD 74 F7 7D B4 CA +R 00 00 01 00 +T CD 00 00 00 7D 01 00 00 +R 00 00 01 00 00 04 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 AF DD B6 FE 20 16 DD 6E F6 DD 66 +R 00 00 01 00 +T DA 00 00 00 F7 46 23 66 68 DD 4E 04 DD 46 05 +R 00 00 01 00 +T E5 00 00 00 A7 ED 42 C2 7A 01 00 00 +R 00 00 01 00 00 08 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 21 06 00 DD 4E F6 DD 46 F7 09 EB +R 00 00 01 00 +T F6 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T FC 00 00 00 00 00 00 00 DD 4E FA DD 46 FB 09 +R 00 00 01 00 02 04 00 00 +T 05 01 00 00 4D 44 2A 02 00 00 00 A7 ED 42 30 +R 00 00 01 00 00 07 03 00 +T 0E 01 00 00 0B +R 00 00 01 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 21 22 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 0A 00 +T 18 01 00 00 18 7A +R 00 00 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 21 06 00 DD 4E F6 DD 46 F7 09 4D +R 00 00 01 00 +T 25 01 00 00 44 DD 5E F8 DD 56 F9 13 3E +R 00 00 01 00 +T 2E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 33 01 00 00 00 00 00 00 01 08 00 00 00 ED 5B +R 00 00 01 00 02 04 00 00 00 09 03 00 +T 3A 01 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 0F 00 +T 3F 01 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 46 01 00 00 28 03 +R 00 00 01 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 C3 B6 00 00 00 +R 00 00 01 00 00 05 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 2A 0A 00 00 00 DD 4E 04 DD 46 05 +R 00 00 01 00 00 05 03 00 +T 54 01 00 00 A7 ED 42 20 21 2A 08 00 00 00 DD +R 00 00 01 00 00 0A 03 00 +T 5D 01 00 00 4E 02 DD 46 03 A7 ED 42 20 13 +R 00 00 01 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 6F 01 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 76 01 00 00 00 00 00 00 18 1A +R 00 00 01 00 00 04 03 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 C3 B6 00 00 00 +R 00 00 01 00 00 05 01 00 +T 7D 01 00 00 +R 00 00 01 00 +T 7D 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 85 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 8C 01 00 00 02 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 07 0A 00 +T 94 01 00 00 +R 00 00 01 00 +T 94 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 97 01 00 00 +R 00 00 01 00 +T 97 01 00 00 CD 00 00 00 00 FC FF 01 +R 00 00 01 00 02 05 0B 00 +T 9D 01 00 00 08 00 00 00 ED 5B 00 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T A4 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T A9 01 00 00 00 00 00 00 CB 7C 28 06 +R 00 00 01 00 02 04 00 00 +T AF 01 00 00 +R 00 00 01 00 +T AF 01 00 00 21 00 00 C3 42 02 00 00 +R 00 00 01 00 00 08 01 00 +T B5 01 00 00 +R 00 00 01 00 +T B5 01 00 00 2A 08 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 00 05 03 00 +T BE 01 00 00 ED 4B 0A 00 00 00 DD 71 FE DD 70 +R 00 00 01 00 00 06 03 00 +T C7 01 00 00 FF ED 4B 04 00 00 00 A7 ED 42 20 +R 00 00 01 00 00 07 03 00 +T D0 01 00 00 22 2A 06 00 00 00 DD 4E FE DD 46 +R 00 00 01 00 00 06 03 00 +T D9 01 00 00 FF A7 ED 42 20 14 +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 01 00 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 03 00 +T E6 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T EC 01 00 00 00 00 00 00 2A 00 00 00 00 18 4F +R 00 00 01 00 02 04 00 00 00 09 03 00 +T F3 01 00 00 +R 00 00 01 00 +T F3 01 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 04 00 +T F9 01 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 00 02 00 00 04 00 09 4D 44 2A 02 00 00 00 A7 +R 00 00 01 00 00 0A 03 00 +T 09 02 00 00 ED 42 30 0B +R 00 00 01 00 +T 0D 02 00 00 +R 00 00 01 00 +T 0D 02 00 00 21 22 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 0A 00 +T 16 02 00 00 18 2A +R 00 00 01 00 +T 18 02 00 00 +R 00 00 01 00 +T 18 02 00 00 01 02 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 03 00 +T 1F 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 25 02 00 00 00 00 00 00 CD 97 01 00 00 7D B4 +R 00 00 01 00 02 04 00 00 00 09 01 00 +T 2C 02 00 00 28 11 DD 4E FE DD 46 FF DD 5E FC +R 00 00 01 00 +T 37 02 00 00 DD 56 FD CD 00 00 00 00 18 03 +R 00 00 01 00 00 08 01 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 21 00 00 +R 00 00 01 00 +T 42 02 00 00 +R 00 00 01 00 +T 42 02 00 00 +R 00 00 01 00 +T 42 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 45 02 00 00 +R 00 00 01 00 +T 45 02 00 00 CD 00 00 00 00 ED 43 02 00 00 00 +R 00 00 01 00 02 05 08 00 00 0B 03 00 +T 4C 02 00 00 69 60 01 03 80 3E 80 AC 67 ED 42 +R 00 00 01 00 +T 57 02 00 00 30 0B +R 00 00 01 00 +T 59 02 00 00 +R 00 00 01 00 +T 59 02 00 00 21 22 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 0A 00 +T 62 02 00 00 18 3B +R 00 00 01 00 +T 64 02 00 00 +R 00 00 01 00 +T 64 02 00 00 01 06 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 00 05 02 00 +T 6D 02 00 00 22 00 00 00 00 EB 3E 00 00 00 00 +R 00 00 01 00 00 05 03 00 2B 0B 09 00 +T 73 02 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 7A 02 00 00 08 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 09 02 00 +T 80 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 85 02 00 00 00 00 00 00 CB 7C 28 05 +R 00 00 01 00 02 04 00 00 +T 8B 02 00 00 +R 00 00 01 00 +T 8B 02 00 00 21 00 00 18 0F +R 00 00 01 00 +T 90 02 00 00 +R 00 00 01 00 +T 90 02 00 00 2A 08 00 00 00 22 04 00 00 00 2A +R 00 00 01 00 00 05 03 00 00 0A 03 00 +T 97 02 00 00 0A 00 00 00 22 06 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 09 03 00 +T 9D 02 00 00 97 01 00 00 +R 00 00 01 00 00 04 01 00 +T 9F 02 00 00 +R 00 00 01 00 +T 9F 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 2F 2E 2E 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 2E 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/getenv.rel b/src/nos/lib/crt_banked_lib/getenv.rel new file mode 100644 index 00000000..fb94caef --- /dev/null +++ b/src/nos/lib/crt_banked_lib/getenv.rel @@ -0,0 +1,83 @@ +XL4 +H 2 areas 9 global symbols +S _environ Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _memcmp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B1 flags 0 +S _getenv Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 2A +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 00 00 +T 0F 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 17 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 1E 00 00 00 FE DD 74 FF DD 7E FC DD B6 FD 28 +R 00 00 01 00 +T 29 00 00 00 08 DD 7E FE DD B6 FF 20 05 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 00 00 18 77 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 6E FC DD 66 FD 4D 44 03 03 DD +R 00 00 01 00 +T 42 00 00 00 71 FC DD 70 FD 46 23 66 68 DD 75 +R 00 00 01 00 +T 4D 00 00 00 FA DD 74 FB 7D B4 28 56 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 6E 02 DD 66 03 E5 DD 6E FA DD +R 00 00 01 00 +T 60 00 00 00 66 FB 7E E1 BE 20 42 DD 6E FE DD +R 00 00 01 00 +T 6B 00 00 00 66 FF DD 4E FA DD 46 FB 09 7E FE +R 00 00 01 00 +T 76 00 00 00 3D 20 30 DD 6E FE DD 66 FF E5 DD +R 00 00 01 00 +T 81 00 00 00 4E FA DD 46 FB DD 5E 02 DD 56 03 +R 00 00 01 00 +T 8C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 92 00 00 00 00 00 00 00 F1 7D B4 20 10 +R 00 00 01 00 02 04 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 DD 6E FE DD 66 FF 23 DD 4E FA DD +R 00 00 01 00 +T A4 00 00 00 46 FB 09 18 05 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 18 8C +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 21 00 00 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_banked_lib/getgrent.rel b/src/nos/lib/crt_banked_lib/getgrent.rel new file mode 100644 index 00000000..51b698e0 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/getgrent.rel @@ -0,0 +1,294 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _lseek Ref00000000 +S _strchr Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S _strtol Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2C9 flags 0 +S ___getgrent Def00000000 +A UDATA0 size F2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF +R 00 00 01 00 02 05 07 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 21 C8 00 E5 01 00 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T 0E 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T 15 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 1C 00 00 00 75 FC DD 74 FD 4D 44 21 00 00 CD +R 00 00 01 00 +T 27 00 00 00 00 00 00 00 38 06 +R 00 00 01 00 02 04 08 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 00 00 C3 C6 02 00 00 +R 00 00 01 00 00 08 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 01 0A 00 11 00 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T 38 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 3D 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 7D +R 00 00 01 00 02 04 00 00 +T 46 00 00 00 B4 28 5A +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 6E F6 DD 66 F7 23 DD 75 F6 DD +R 00 00 01 00 +T 54 00 00 00 74 F7 2B 36 00 21 01 00 E5 01 +R 00 00 01 00 +T 5E 00 00 00 00 00 00 00 DD 6E F6 DD 66 F7 A7 +R 00 00 01 00 00 04 02 00 +T 67 00 00 00 ED 42 DD 4E FC DD 46 FD A7 ED 42 +R 00 00 01 00 +T 72 00 00 00 7C 07 9F 4F 41 C5 E5 DD 5E 02 DD +R 00 00 01 00 +T 7D 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 82 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 89 00 00 00 F1 DD 6E F6 DD 66 F7 2B 2B 7E FE +R 00 00 01 00 +T 94 00 00 00 0D 20 0A +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 DD 6E F6 DD 66 F7 2B 2B 36 00 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 18 79 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 21 C8 00 E5 01 00 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T AC 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T B3 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 04 00 02 09 00 00 +T BA 00 00 00 75 FC DD 74 FD 4D 44 21 00 00 CD +R 00 00 01 00 +T C5 00 00 00 00 00 00 00 38 06 +R 00 00 01 00 02 04 08 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 21 00 00 C3 C6 02 00 00 +R 00 00 01 00 00 08 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 01 0A 00 11 00 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T D6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T DB 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 7D +R 00 00 01 00 02 04 00 00 +T E4 00 00 00 B4 28 BC +R 00 00 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 21 01 00 E5 01 00 00 00 00 DD 6E +R 00 00 01 00 00 09 02 00 +T F0 00 00 00 F6 DD 66 F7 A7 ED 42 DD 4E FC DD +R 00 00 01 00 +T FB 00 00 00 46 FD A7 ED 42 23 7C 07 9F 4F 41 +R 00 00 01 00 +T 06 01 00 00 C5 E5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 0F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 14 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T 1A 01 00 00 05 00 00 00 +R 00 00 01 00 00 04 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 3A 00 00 00 00 FE 23 28 15 3A +R 00 00 01 00 00 05 02 00 +T 24 01 00 00 00 00 00 00 FE 20 28 0E 3A +R 00 00 01 00 00 04 02 00 +T 2B 01 00 00 00 00 00 00 FE 0A 28 07 3A +R 00 00 01 00 00 04 02 00 +T 32 01 00 00 00 00 00 00 FE 09 20 03 +R 00 00 01 00 00 04 02 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 3B 01 00 00 +R 00 00 01 00 +T 3B 01 00 00 21 00 00 00 00 22 EA 00 00 00 01 +R 00 00 01 00 00 05 02 00 00 0A 02 00 +T 42 01 00 00 3A 00 11 00 00 00 00 3E +R 00 00 01 00 00 07 02 00 +T 48 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 4D 01 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 56 01 00 00 B4 20 03 +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 67 01 00 00 74 FF 2B 36 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 72 01 00 00 22 EC 00 00 00 01 3A 00 DD 5E FE +R 00 00 01 00 00 05 02 00 +T 7B 01 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 81 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 88 01 00 00 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 90 01 00 00 +R 00 00 01 00 +T 90 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 9E 01 00 00 74 FF 2B 36 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T A9 01 00 00 DD 75 F6 DD 74 F7 01 3A 00 DD 5E +R 00 00 01 00 +T B4 01 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T BB 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T C2 01 00 00 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T CA 01 00 00 +R 00 00 01 00 +T CA 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T CD 01 00 00 +R 00 00 01 00 +T CD 01 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T D8 01 00 00 74 FF 2B 36 00 21 0A 00 E5 21 +R 00 00 01 00 +T E2 01 00 00 04 00 39 4D 44 DD 5E F6 DD 56 F7 +R 00 00 01 00 +T ED 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T F3 01 00 00 00 00 00 00 F1 22 EE 00 00 00 DD +R 00 00 01 00 02 04 00 00 00 0A 02 00 +T FA 01 00 00 6E F8 DD 66 F9 AF B6 28 03 +R 00 00 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 06 02 00 00 +R 00 00 01 00 +T 06 02 00 00 DD 6E FE DD 66 FF DD 75 F6 DD 74 +R 00 00 01 00 +T 11 02 00 00 F7 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T 19 02 00 00 +R 00 00 01 00 +T 19 02 00 00 01 2C 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 23 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 28 02 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 31 02 00 00 B4 28 4B +R 00 00 01 00 +T 34 02 00 00 +R 00 00 01 00 +T 34 02 00 00 DD 6E FE DD 66 FF 36 00 DD 34 FE +R 00 00 01 00 +T 3F 02 00 00 20 03 DD 34 FF +R 00 00 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 DD 6E FA DD 66 FB 29 01 +R 00 00 01 00 +T 4C 02 00 00 C8 00 00 00 09 DD 4E F6 DD 46 F7 +R 00 00 01 00 00 04 02 00 +T 55 02 00 00 71 23 70 DD 6E FE DD 66 FF DD 75 +R 00 00 01 00 +T 60 02 00 00 F6 DD 74 F7 01 10 80 DD 6E FA DD +R 00 00 01 00 +T 6B 02 00 00 66 FB 3E 80 AC 67 ED 42 30 08 +R 00 00 01 00 +T 75 02 00 00 +R 00 00 01 00 +T 75 02 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 7D 02 00 00 +R 00 00 01 00 +T 7D 02 00 00 +R 00 00 01 00 +T 7D 02 00 00 18 9A +R 00 00 01 00 +T 7F 02 00 00 +R 00 00 01 00 +T 7F 02 00 00 DD 6E F6 DD 66 F7 AF B6 20 11 +R 00 00 01 00 +T 89 02 00 00 +R 00 00 01 00 +T 89 02 00 00 DD 6E FA DD 66 FB 29 01 +R 00 00 01 00 +T 91 02 00 00 C8 00 00 00 09 AF 77 23 77 18 23 +R 00 00 01 00 00 04 02 00 +T 9A 02 00 00 +R 00 00 01 00 +T 9A 02 00 00 DD 6E FA DD 66 FB 29 01 +R 00 00 01 00 +T A2 02 00 00 C8 00 00 00 09 DD 4E F6 DD 46 F7 +R 00 00 01 00 00 04 02 00 +T AB 02 00 00 71 23 70 DD 6E FA DD 66 FB 29 01 +R 00 00 01 00 +T B6 02 00 00 CA 00 00 00 09 AF 77 23 77 +R 00 00 01 00 00 04 02 00 +T BD 02 00 00 +R 00 00 01 00 +T BD 02 00 00 21 C8 00 00 00 22 F0 00 00 00 21 +R 00 00 01 00 00 05 02 00 00 0A 02 00 +T C4 02 00 00 EA 00 00 00 +R 00 00 01 00 00 04 02 00 +T C6 02 00 00 +R 00 00 01 00 +T C6 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T C8 00 00 00 +R 00 00 02 00 +T C8 00 00 00 +R 00 00 02 00 +T EA 00 00 00 +R 00 00 02 00 +T EA 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/getgrgid.rel b/src/nos/lib/crt_banked_lib/getgrgid.rel new file mode 100644 index 00000000..5ce3c18b --- /dev/null +++ b/src/nos/lib/crt_banked_lib/getgrgid.rel @@ -0,0 +1,53 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _endgrent Ref00000000 +S .__.ABS. Def00000000 +S _getgrent Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _setgrent Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4D flags 0 +S _getgrgid Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 3E +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 0B 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 13 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 1C 00 00 00 B4 28 1D +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T 2A 00 00 00 23 66 68 DD 4E 02 DD 46 03 A7 ED +R 00 00 01 00 +T 35 00 00 00 42 20 02 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 18 02 +R 00 00 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 18 D1 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 42 00 00 00 00 00 00 00 DD 6E FE DD 66 FF C3 +R 00 00 01 00 02 04 00 00 +T 4B 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_banked_lib/getgrnam.rel b/src/nos/lib/crt_banked_lib/getgrnam.rel new file mode 100644 index 00000000..e97eb1ec --- /dev/null +++ b/src/nos/lib/crt_banked_lib/getgrnam.rel @@ -0,0 +1,69 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _endgrent Ref00000000 +S _strcmp Ref00000000 +S .__.ABS. Def00000000 +S _getgrent Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _setgrent Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 62 flags 0 +S _getgrnam Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 B6 03 20 0B +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 16 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 06 00 +T 16 00 00 00 18 47 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 1E 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 26 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 2F 00 00 00 B4 28 1F +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 DD 4E 02 DD 46 03 DD 6E FE DD 66 +R 00 00 01 00 +T 3D 00 00 00 FF 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 44 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 4B 00 00 00 20 02 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 18 02 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 18 CF +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 57 00 00 00 00 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 00 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/getopt.rel b/src/nos/lib/crt_banked_lib/getopt.rel new file mode 100644 index 00000000..97c9afa0 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/getopt.rel @@ -0,0 +1,290 @@ +XL4 +H 6 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _stderr Ref00000000 +S _strchr Ref00000000 +S _strcmp Ref00000000 +S .__.ABS. Def00000000 +S _fputc Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _fputs Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23D flags 0 +S _getopt Def00000000 +A CSTR size 3A flags 0 +A UDATA0 size 4 flags 0 +S _optarg Def00000002 +S _optopt Def00000000 +A IDATA0 size 6 flags 0 +S _optind Def00000002 +S _opterr Def00000000 +A CDATA0 size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 07 00 +T 06 00 00 00 04 00 00 00 3E 01 AD B4 20 66 +R 00 00 01 00 00 04 04 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 DD 4E 02 DD 46 03 2A 02 00 00 00 +R 00 00 01 00 00 0B 04 00 +T 17 00 00 00 CD 00 00 00 00 30 28 2A +R 00 00 01 00 02 05 08 00 +T 1D 00 00 00 02 00 00 00 29 DD 4E 04 DD 46 05 +R 00 00 01 00 00 04 04 00 +T 26 00 00 00 09 7E 23 66 6F 7E FE 2D 20 14 2A +R 00 00 01 00 +T 31 00 00 00 02 00 00 00 29 DD 4E 04 DD 46 05 +R 00 00 01 00 00 04 04 00 +T 3A 00 00 00 09 46 23 66 68 23 7E B7 20 06 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 FF FF C3 3A 02 00 00 +R 00 00 01 00 00 08 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 01 00 00 00 00 2A 02 00 00 00 29 +R 00 00 01 00 00 05 02 00 00 0A 04 00 +T 51 00 00 00 DD 5E 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 5C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 61 00 00 00 00 00 00 00 7D B4 20 0D +R 00 00 01 00 02 04 00 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 6E 00 00 00 21 FF FF C3 3A 02 00 00 +R 00 00 01 00 00 08 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T 7D 00 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T 85 00 00 00 04 00 00 00 09 4E 06 00 DD 71 FC +R 00 00 01 00 00 04 04 00 +T 8E 00 00 00 DD 70 FD ED 43 00 00 00 00 3E 3A +R 00 00 01 00 00 09 03 00 +T 97 00 00 00 DD AE FC DD B6 FD 28 1E DD 4E FC +R 00 00 01 00 +T A2 00 00 00 DD 46 FD DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T AC 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T B1 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T BA 00 00 00 B4 20 78 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 2A 00 00 00 00 7D B4 28 41 +R 00 00 01 00 00 05 04 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 01 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 02 05 02 00 +T CD 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T D3 00 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T D9 00 00 00 00 00 00 00 11 03 00 00 00 3E +R 00 00 01 00 02 04 02 00 00 09 02 00 +T DF 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T E4 00 00 00 00 00 00 00 01 00 00 00 00 DD 5E +R 00 00 01 00 02 04 00 00 02 09 02 00 +T EB 00 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 06 00 +T F2 00 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T F8 00 00 00 00 00 00 00 11 0A 00 3E +R 00 00 01 00 02 04 02 00 +T FE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 03 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T 0E 01 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T 16 01 00 00 04 00 00 00 03 ED 43 04 00 00 00 +R 00 00 01 00 00 04 04 00 00 0B 04 00 +T 1D 01 00 00 09 7E B7 20 0D +R 00 00 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 29 01 00 00 21 01 00 22 04 00 00 00 +R 00 00 01 00 00 08 04 00 +T 2F 01 00 00 +R 00 00 01 00 +T 2F 01 00 00 21 3F 00 C3 3A 02 00 00 +R 00 00 01 00 00 08 01 00 +T 35 01 00 00 +R 00 00 01 00 +T 35 01 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 40 01 00 00 74 FF 7E FE 3A C2 04 02 00 00 +R 00 00 01 00 00 0A 01 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T 51 01 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T 59 01 00 00 04 00 00 00 09 23 7E B7 28 1F +R 00 00 01 00 00 04 04 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 68 01 00 00 2B 29 DD 4E 04 DD 46 05 09 46 23 +R 00 00 01 00 +T 73 01 00 00 66 68 ED 4B 04 00 00 00 09 23 22 +R 00 00 01 00 00 08 04 00 +T 7C 01 00 00 02 00 00 00 18 7C +R 00 00 01 00 00 04 03 00 +T 80 01 00 00 +R 00 00 01 00 +T 80 01 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 87 01 00 00 DD 4E 02 DD 46 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T 90 01 00 00 38 53 +R 00 00 01 00 +T 92 01 00 00 +R 00 00 01 00 +T 92 01 00 00 2A 00 00 00 00 7D B4 28 41 +R 00 00 01 00 00 05 04 00 +T 99 01 00 00 +R 00 00 01 00 +T 99 01 00 00 01 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 02 05 02 00 +T A2 01 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T A8 01 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T AE 01 00 00 00 00 00 00 11 18 00 00 00 3E +R 00 00 01 00 02 04 02 00 00 09 02 00 +T B4 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T B9 01 00 00 00 00 00 00 01 00 00 00 00 DD 5E +R 00 00 01 00 02 04 00 00 02 09 02 00 +T C0 01 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 06 00 +T C7 01 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T CD 01 00 00 00 00 00 00 11 0A 00 3E +R 00 00 01 00 02 04 02 00 +T D3 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T D8 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T DA 01 00 00 +R 00 00 01 00 +T DA 01 00 00 21 01 00 22 04 00 00 00 21 3F 00 +R 00 00 01 00 00 08 04 00 +T E3 01 00 00 18 55 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T EC 01 00 00 2B 29 DD 4E 04 DD 46 05 09 46 23 +R 00 00 01 00 +T F7 01 00 00 66 68 22 02 00 00 00 +R 00 00 01 00 00 07 03 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 21 01 00 22 04 00 00 00 18 30 +R 00 00 01 00 00 08 04 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T 0D 02 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T 15 02 00 00 04 00 00 00 03 ED 43 04 00 00 00 +R 00 00 01 00 00 04 04 00 00 0B 04 00 +T 1C 02 00 00 09 7E B7 20 0D +R 00 00 01 00 +T 21 02 00 00 +R 00 00 01 00 +T 21 02 00 00 21 01 00 22 04 00 00 00 2A +R 00 00 01 00 00 08 04 00 +T 28 02 00 00 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 04 04 00 00 0A 04 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 21 00 00 22 02 00 00 00 +R 00 00 01 00 00 08 03 00 +T 34 02 00 00 +R 00 00 01 00 +T 34 02 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 3A 02 00 00 +R 00 00 01 00 +T 3A 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2D 2D 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 3A 20 69 6C 6C 65 67 61 6C 20 6F +R 00 00 02 00 +T 0E 00 00 00 70 74 69 6F 6E 20 2D 2D 20 00 +R 00 00 02 00 +T 18 00 00 00 +R 00 00 02 00 +T 18 00 00 00 3A 20 6F 70 74 69 6F 6E 20 72 65 +R 00 00 02 00 +T 23 00 00 00 71 75 69 72 65 73 20 61 6E 20 61 +R 00 00 02 00 +T 2E 00 00 00 72 67 75 6D 65 6E 74 20 2D 2D 20 +R 00 00 02 00 +T 39 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 04 00 00 00 +R 00 00 04 00 +T 04 00 00 00 +R 00 00 04 00 +T 00 00 00 00 01 00 01 00 01 00 +R 00 00 05 00 diff --git a/src/nos/lib/crt_banked_lib/getpass.rel b/src/nos/lib/crt_banked_lib/getpass.rel new file mode 100644 index 00000000..3bc10488 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/getpass.rel @@ -0,0 +1,166 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _ioctl Ref00000000 +S .__.ABS. Def00000000 +S _stdout Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _fputs Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S __getchar Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 153 flags 0 +S _getpass Def000000AE +A UDATA0 size 80 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 DD 77 FF +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 17 00 00 00 FF CD 00 00 00 00 30 7D +R 00 00 01 00 02 06 08 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0B 00 02 0A 0B 00 +T 23 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 00 00 +T 2C 00 00 00 A4 3C 20 0D DD 7E FE DD B6 FF 20 +R 00 00 01 00 +T 37 00 00 00 05 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 21 00 00 18 6E +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 3E 43 DD AE FC DD B6 FD 20 04 3E +R 00 00 01 00 +T 48 00 00 00 01 18 01 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 AF +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 E6 1F 20 13 3E 5A DD AE FC DD B6 +R 00 00 01 00 +T 57 00 00 00 FD 20 04 3E 01 18 01 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 AF +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 E6 1F 28 05 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 21 00 00 18 43 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 3E 0A DD AE FC DD B6 FD 28 0A 3E +R 00 00 01 00 +T 73 00 00 00 0D DD AE FC DD B6 FD 20 02 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 18 1C +R 00 00 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 89 00 00 00 74 FF 2B DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 94 00 00 00 46 FC 70 C3 0C 00 00 00 +R 00 00 01 00 00 08 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 DD 6E FE DD 66 FF DD 4E 02 DD 46 +R 00 00 01 00 +T A5 00 00 00 03 09 36 00 69 60 +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 CD 00 00 00 00 F8 FF 01 +R 00 00 01 00 02 05 07 00 +T B4 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 06 00 +T BD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T C2 00 00 00 00 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 02 04 00 00 02 09 06 00 +T C8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T CD 00 00 00 00 00 00 00 21 00 00 39 E5 21 +R 00 00 01 00 02 04 00 00 +T D5 00 00 00 00 00 E5 21 00 00 E5 3E +R 00 00 01 00 +T DD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T E2 00 00 00 00 00 00 00 F1 F1 F1 DD 6E FC DD +R 00 00 01 00 02 04 00 00 +T EB 00 00 00 66 FD DD 75 FE DD 74 FF 21 04 00 +R 00 00 01 00 +T F6 00 00 00 39 7E E6 F7 77 23 7E E6 FF 77 21 +R 00 00 01 00 +T 01 01 00 00 00 00 39 E5 21 01 00 E5 21 00 00 +R 00 00 01 00 +T 0C 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 12 01 00 00 CD 00 00 00 00 F1 F1 F1 01 7F 00 +R 00 00 01 00 02 05 00 00 +T 1B 01 00 00 11 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 00 05 02 00 00 0A 01 00 +T 22 01 00 00 B4 20 04 +R 00 00 01 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 AF 32 00 00 00 00 +R 00 00 01 00 00 06 02 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 DD 6E FE DD 66 FF DD 75 FC DD 74 +R 00 00 01 00 +T 34 01 00 00 FD 21 00 00 39 E5 21 01 00 E5 21 +R 00 00 01 00 +T 3F 01 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 45 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 4C 01 00 00 F1 21 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 06 02 00 02 0B 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/getpw.rel b/src/nos/lib/crt_banked_lib/getpw.rel new file mode 100644 index 00000000..cc08bf13 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/getpw.rel @@ -0,0 +1,68 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sprintf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S _getpwuid Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 91 flags 0 +S _getpw Def00000000 +A CSTR size 15 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 79 B0 20 0B +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 12 00 00 00 18 7A +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 1C 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 23 00 00 00 75 FE DD 74 FF 7D B4 20 05 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 21 FF FF 18 5D +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 21 0C 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 3C 00 00 00 23 56 D5 21 0A 00 09 5E 23 56 D5 +R 00 00 01 00 +T 47 00 00 00 21 08 00 09 5E 23 56 D5 21 06 00 +R 00 00 01 00 +T 52 00 00 00 09 5E 23 56 D5 21 04 00 09 5E 23 +R 00 00 01 00 +T 5D 00 00 00 56 D5 03 03 69 60 4E 23 46 C5 DD +R 00 00 01 00 +T 68 00 00 00 6E FE DD 66 FF 4E 23 46 C5 21 +R 00 00 01 00 +T 72 00 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 00 04 02 00 +T 7B 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 81 00 00 00 CD 00 00 00 00 EB 21 12 00 39 F9 +R 00 00 01 00 02 05 00 00 +T 8A 00 00 00 EB 21 00 00 +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 73 3A 25 73 3A 25 75 3A 25 75 +R 00 00 02 00 +T 0B 00 00 00 3A 25 73 3A 25 73 3A 25 73 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/getpwent.rel b/src/nos/lib/crt_banked_lib/getpwent.rel new file mode 100644 index 00000000..72cb0a47 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/getpwent.rel @@ -0,0 +1,293 @@ +XL4 +H 3 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _lseek Ref00000000 +S _strchr Ref00000000 +S _read Ref00000000 +S _strtoul Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 288 flags 0 +S ___getpwent Def00000000 +A UDATA0 size 10E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF +R 00 00 01 00 02 05 08 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 21 00 01 E5 01 00 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T 0E 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T 15 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 1C 00 00 00 75 FE DD 74 FF 4D 44 21 00 00 CD +R 00 00 01 00 +T 27 00 00 00 00 00 00 00 38 06 +R 00 00 01 00 02 04 09 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 00 00 C3 85 02 00 00 +R 00 00 01 00 00 08 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 01 0A 00 11 00 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T 38 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 3D 00 00 00 00 00 00 00 DD 75 F4 DD 74 F5 7D +R 00 00 01 00 02 04 00 00 +T 46 00 00 00 B4 28 5B +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T 54 00 00 00 74 F5 2B 36 00 21 01 00 E5 01 +R 00 00 01 00 +T 5E 00 00 00 00 00 00 00 DD 6E F4 DD 66 F5 A7 +R 00 00 01 00 00 04 02 00 +T 67 00 00 00 ED 42 DD 4E FE DD 46 FF A7 ED 42 +R 00 00 01 00 +T 72 00 00 00 7C 07 9F 4F 41 C5 E5 DD 5E 02 DD +R 00 00 01 00 +T 7D 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 82 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 89 00 00 00 F1 DD 6E F4 DD 66 F5 2B 2B 7E FE +R 00 00 01 00 +T 94 00 00 00 0D 20 0A +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 DD 6E F4 DD 66 F5 2B 2B 36 00 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 C3 36 01 00 00 +R 00 00 01 00 00 05 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 21 00 01 E5 01 00 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T AD 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T B4 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 05 00 02 09 00 00 +T BB 00 00 00 75 FE DD 74 FF 4D 44 21 00 00 CD +R 00 00 01 00 +T C6 00 00 00 00 00 00 00 38 06 +R 00 00 01 00 02 04 09 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 21 00 00 C3 85 02 00 00 +R 00 00 01 00 00 08 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 01 0A 00 11 00 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T D7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T DC 00 00 00 00 00 00 00 DD 75 F4 DD 74 F5 7D +R 00 00 01 00 02 04 00 00 +T E5 00 00 00 B4 28 BC +R 00 00 01 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 21 01 00 E5 DD 6E FE DD 66 FF 7C +R 00 00 01 00 +T F3 00 00 00 07 9F 5F 53 D5 E5 01 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T FC 00 00 00 DD 6E F4 DD 66 F5 A7 ED 42 7C 07 +R 00 00 01 00 +T 07 01 00 00 9F 5F 53 A7 C1 ED 42 EB C1 ED 42 +R 00 00 01 00 +T 12 01 00 00 E5 D5 21 01 00 C1 09 EB 21 00 00 +R 00 00 01 00 +T 1D 01 00 00 C1 ED 4A E5 D5 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 28 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 2E 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T 34 01 00 00 05 00 00 00 +R 00 00 01 00 00 04 01 00 +T 36 01 00 00 +R 00 00 01 00 +T 36 01 00 00 3A 00 00 00 00 FE 23 28 15 3A +R 00 00 01 00 00 05 02 00 +T 3E 01 00 00 00 00 00 00 FE 20 28 0E 3A +R 00 00 01 00 00 04 02 00 +T 45 01 00 00 00 00 00 00 FE 0A 28 07 3A +R 00 00 01 00 00 04 02 00 +T 4C 01 00 00 00 00 00 00 FE 09 20 03 +R 00 00 01 00 00 04 02 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 55 01 00 00 +R 00 00 01 00 +T 55 01 00 00 DD 36 F4 00 00 00 00 DD 36 F5 +R 00 00 01 00 09 07 02 00 +T 5C 01 00 00 00 00 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 89 04 02 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 01 07 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T 6F 01 00 00 AC 67 ED 42 D2 30 02 00 00 +R 00 00 01 00 00 09 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 DD 5E FC DD 56 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 7F 01 00 00 00 00 07 00 E6 01 00 00 +R 00 00 01 00 00 08 01 00 +T 85 01 00 00 93 01 00 00 9E 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 89 01 00 00 A9 01 00 00 B7 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8D 01 00 00 C5 01 00 00 D0 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 91 01 00 00 DB 01 00 00 +R 00 00 01 00 00 04 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 DD 6E F4 DD 66 F5 22 00 01 00 00 +R 00 00 01 00 00 0B 02 00 +T 9C 01 00 00 18 48 +R 00 00 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 DD 6E F4 DD 66 F5 22 02 01 00 00 +R 00 00 01 00 00 0B 02 00 +T A7 01 00 00 18 3D +R 00 00 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 DD 6E F4 DD 66 F5 DD 75 FA DD 74 +R 00 00 01 00 +T B4 01 00 00 FB 18 2F +R 00 00 01 00 +T B7 01 00 00 +R 00 00 01 00 +T B7 01 00 00 DD 6E F4 DD 66 F5 DD 75 F8 DD 74 +R 00 00 01 00 +T C2 01 00 00 F9 18 21 +R 00 00 01 00 +T C5 01 00 00 +R 00 00 01 00 +T C5 01 00 00 DD 6E F4 DD 66 F5 22 08 01 00 00 +R 00 00 01 00 00 0B 02 00 +T CE 01 00 00 18 16 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 DD 6E F4 DD 66 F5 22 0A 01 00 00 +R 00 00 01 00 00 0B 02 00 +T D9 01 00 00 18 0B +R 00 00 01 00 +T DB 01 00 00 +R 00 00 01 00 +T DB 01 00 00 DD 6E F4 DD 66 F5 22 0C 01 00 00 +R 00 00 01 00 00 0B 02 00 +T E4 01 00 00 18 00 +R 00 00 01 00 +T E6 01 00 00 +R 00 00 01 00 +T E6 01 00 00 01 06 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T F1 01 00 00 AC 67 ED 42 30 2E +R 00 00 01 00 +T F7 01 00 00 +R 00 00 01 00 +T F7 01 00 00 01 3A 00 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 01 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 06 02 00 00 00 00 00 00 DD 75 F4 DD 74 F5 7D +R 00 00 01 00 02 04 00 00 +T 0F 02 00 00 B4 20 03 +R 00 00 01 00 +T 12 02 00 00 +R 00 00 01 00 +T 12 02 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 15 02 00 00 +R 00 00 01 00 +T 15 02 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T 20 02 00 00 74 F5 2B 36 00 +R 00 00 01 00 +T 25 02 00 00 +R 00 00 01 00 +T 25 02 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 2D 02 00 00 +R 00 00 01 00 +T 2D 02 00 00 C3 64 01 00 00 +R 00 00 01 00 00 05 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 21 0A 00 E5 21 04 00 39 4D 44 DD +R 00 00 01 00 +T 3B 02 00 00 5E F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 43 02 00 00 00 00 00 00 CD 00 00 00 00 F1 22 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 4A 02 00 00 06 01 00 00 DD 6E F6 DD 66 F7 AF +R 00 00 01 00 00 04 02 00 +T 53 02 00 00 B6 28 03 +R 00 00 01 00 +T 56 02 00 00 +R 00 00 01 00 +T 56 02 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 59 02 00 00 +R 00 00 01 00 +T 59 02 00 00 21 0A 00 E5 21 04 00 39 4D 44 DD +R 00 00 01 00 +T 64 02 00 00 5E FA DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 6C 02 00 00 00 00 00 00 CD 00 00 00 00 F1 22 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 73 02 00 00 04 01 00 00 DD 6E F6 DD 66 F7 AF +R 00 00 01 00 00 04 02 00 +T 7C 02 00 00 B6 28 03 +R 00 00 01 00 +T 7F 02 00 00 +R 00 00 01 00 +T 7F 02 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 82 02 00 00 +R 00 00 01 00 +T 82 02 00 00 21 00 01 00 00 +R 00 00 01 00 00 05 02 00 +T 85 02 00 00 +R 00 00 01 00 +T 85 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 01 00 00 +R 00 00 02 00 +T 00 01 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/getpwnam.rel b/src/nos/lib/crt_banked_lib/getpwnam.rel new file mode 100644 index 00000000..797e433f --- /dev/null +++ b/src/nos/lib/crt_banked_lib/getpwnam.rel @@ -0,0 +1,69 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strcmp Ref00000000 +S .__.ABS. Def00000000 +S _endpwent Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _getpwent Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setpwent Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 62 flags 0 +S _getpwnam Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 B6 03 20 0B +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 16 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 05 00 +T 16 00 00 00 18 47 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 1E 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 26 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 2F 00 00 00 B4 28 1F +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 DD 4E 02 DD 46 03 DD 6E FE DD 66 +R 00 00 01 00 +T 3D 00 00 00 FF 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 44 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 4B 00 00 00 20 02 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 18 02 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 18 CF +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 57 00 00 00 00 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 00 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/getpwuid.rel b/src/nos/lib/crt_banked_lib/getpwuid.rel new file mode 100644 index 00000000..645a33f2 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/getpwuid.rel @@ -0,0 +1,53 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _endpwent Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _getpwent Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setpwent Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4D flags 0 +S _getpwuid Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 3E +R 00 00 01 00 02 05 04 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 0B 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 13 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 1C 00 00 00 B4 28 1D +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T 2A 00 00 00 23 66 68 DD 4E 02 DD 46 03 A7 ED +R 00 00 01 00 +T 35 00 00 00 42 20 02 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 18 02 +R 00 00 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 18 D1 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 42 00 00 00 00 00 00 00 DD 6E FE DD 66 FF C3 +R 00 00 01 00 02 04 00 00 +T 4B 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_banked_lib/gets.rel b/src/nos/lib/crt_banked_lib/gets.rel new file mode 100644 index 00000000..74c14658 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/gets.rel @@ -0,0 +1,96 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fgetc Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _stdin Ref00000000 +S _fputc Ref00000000 +S _stdout Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _fputs Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BE flags 0 +S _puts Def00000075 +S _gets Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 2B 0A 01 00 +T 17 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 1E 00 00 00 FC DD 74 FD 7D A4 3C 28 1E 3E 0A +R 00 00 01 00 +T 29 00 00 00 DD AE FC DD B6 FD 28 14 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 46 FC DD 6E FE DD 66 FF 23 DD +R 00 00 01 00 +T 3C 00 00 00 75 FE DD 74 FF 2B 70 18 CC +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 6E FE DD 66 FF 36 00 DD 7E FC +R 00 00 01 00 +T 50 00 00 00 DD A6 FD 3C 20 16 DD 6E 02 DD 66 +R 00 00 01 00 +T 5B 00 00 00 03 DD 4E FE DD 46 FF A7 ED 42 20 +R 00 00 01 00 +T 66 00 00 00 05 21 00 00 18 06 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 CD 00 00 00 00 FE FF 01 +R 00 00 01 00 02 05 07 00 +T 7B 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 06 00 +T 84 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 89 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 92 00 00 00 A4 3C 28 13 01 00 00 00 00 11 +R 00 00 01 00 02 09 06 00 +T 9A 00 00 00 0A 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 9F 00 00 00 00 00 00 00 CD 00 00 00 00 7D A4 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T A6 00 00 00 3C 20 05 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 21 FF FF 18 0D +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T B9 00 00 00 74 FF +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_banked_lib/gmtime.rel b/src/nos/lib/crt_banked_lib/gmtime.rel new file mode 100644 index 00000000..cfa52321 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/gmtime.rel @@ -0,0 +1,478 @@ +XL4 +H 5 areas D global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _timezone Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4F5 flags 0 +S _gmtime Def000004CB +S ___tm_conv Def00000000 +A UDATA0 size 12 flags 0 +A IDATA0 size 18 flags 0 +A CDATA0 size 18 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 0A 6F 03 0A +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 67 7D E6 1F 4F 7C E6 00 47 69 60 +R 00 00 01 00 +T 14 00 00 00 29 E5 DD 6E 02 DD 66 03 C1 71 23 +R 00 00 01 00 +T 1F 00 00 00 70 DD 6E 02 DD 66 03 23 23 E5 DD +R 00 00 01 00 +T 2A 00 00 00 6E 04 DD 66 05 5E 23 56 06 05 CD +R 00 00 01 00 +T 35 00 00 00 00 00 00 00 7B E6 3F 6F 7A E6 00 +R 00 00 01 00 02 04 00 00 +T 3E 00 00 00 67 DD 4E 0A DD 46 0B 09 4D 44 E1 +R 00 00 01 00 +T 49 00 00 00 71 23 70 21 04 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 54 00 00 00 03 09 E5 DD 6E 04 DD 66 05 5E 23 +R 00 00 01 00 +T 5F 00 00 00 56 06 0B CD 00 00 00 00 7B E6 1F +R 00 00 01 00 02 08 00 00 +T 68 00 00 00 4F 7A E6 00 47 E1 71 23 70 21 +R 00 00 01 00 +T 72 00 00 00 06 00 DD 4E 02 DD 46 03 09 E5 DD +R 00 00 01 00 +T 7D 00 00 00 5E 04 DD 56 05 13 13 EB 5E 23 56 +R 00 00 01 00 +T 88 00 00 00 7B E6 1F 4F 7A E6 00 47 E1 71 23 +R 00 00 01 00 +T 93 00 00 00 70 21 08 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 9E 00 00 00 E5 DD 6E 04 DD 66 05 23 23 5E 23 +R 00 00 01 00 +T A9 00 00 00 56 06 05 CD 00 00 00 00 7B E6 0F +R 00 00 01 00 02 08 00 00 +T B2 00 00 00 6F 7A E6 00 67 01 FF FF 09 4D 44 +R 00 00 01 00 +T BD 00 00 00 E1 71 23 70 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T C8 00 00 00 23 5E 23 56 06 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T D1 00 00 00 7B E6 7F 6F 7A E6 00 67 01 BC 07 +R 00 00 01 00 +T DC 00 00 00 09 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 DD 6E 02 DD 66 03 23 23 23 CB 7E +R 00 00 01 00 +T EE 00 00 00 CA 0C 02 00 00 +R 00 00 01 00 00 05 01 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 DD 6E 02 DD 66 03 23 23 7E C6 3C +R 00 00 01 00 +T FC 00 00 00 77 30 02 23 34 +R 00 00 01 00 +T 01 01 00 00 +R 00 00 01 00 +T 01 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 0C 01 00 00 23 46 0B 70 2B 71 +R 00 00 01 00 +T 12 01 00 00 +R 00 00 01 00 +T 12 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 23 +R 00 00 01 00 +T 1D 01 00 00 CB 7E CA 09 02 00 00 +R 00 00 01 00 00 07 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 2D 01 00 00 C6 18 77 30 02 23 34 +R 00 00 01 00 +T 34 01 00 00 +R 00 00 01 00 +T 34 01 00 00 21 08 00 09 56 23 66 6A 29 11 +R 00 00 01 00 +T 3E 01 00 00 00 00 00 00 19 56 23 66 6A DD 75 +R 00 00 01 00 00 04 03 00 +T 47 01 00 00 FA DD 74 FB 21 08 00 09 3E 01 AE +R 00 00 01 00 +T 52 01 00 00 23 B6 20 38 01 04 00 DD 5E F8 DD +R 00 00 01 00 +T 5D 01 00 00 56 F9 CD 00 00 00 00 7B B2 20 28 +R 00 00 01 00 02 07 09 00 +T 66 01 00 00 01 64 00 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 70 01 00 00 00 00 00 00 7B B2 20 10 01 90 01 +R 00 00 01 00 02 04 09 00 +T 79 01 00 00 DD 5E F8 DD 56 F9 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 82 01 00 00 7B B2 20 08 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 21 06 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 99 01 00 00 23 46 0B 70 2B 71 +R 00 00 01 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 21 06 00 DD 4E 02 DD 46 03 09 23 +R 00 00 01 00 +T AA 01 00 00 CB 7E 28 58 +R 00 00 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T B9 01 00 00 DD 86 FA 77 23 7E DD 8E FB 77 21 +R 00 00 01 00 +T C4 01 00 00 08 00 09 4E 23 46 0B 70 2B 71 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T D9 01 00 00 23 46 21 00 00 CD 00 00 00 00 38 +R 00 00 01 00 02 0A 08 00 +T E2 01 00 00 21 +R 00 00 01 00 +T E3 01 00 00 +R 00 00 01 00 +T E3 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T EE 01 00 00 C6 0C 77 30 02 23 34 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 DD 6E F8 DD 66 F9 2B DD 75 F8 DD +R 00 00 01 00 +T 00 02 00 00 74 F9 18 CA +R 00 00 01 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 18 99 +R 00 00 01 00 +T 06 02 00 00 +R 00 00 01 00 +T 06 02 00 00 C3 12 01 00 00 +R 00 00 01 00 00 05 01 00 +T 09 02 00 00 +R 00 00 01 00 +T 09 02 00 00 C3 E3 00 00 00 +R 00 00 01 00 00 05 01 00 +T 0C 02 00 00 +R 00 00 01 00 +T 0C 02 00 00 +R 00 00 01 00 +T 0C 02 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 17 02 00 00 68 01 3C 80 3E 80 AC 67 ED 42 DA +R 00 00 01 00 +T 22 02 00 00 4E 03 00 00 +R 00 00 01 00 00 04 01 00 +T 24 02 00 00 +R 00 00 01 00 +T 24 02 00 00 DD 6E 02 DD 66 03 23 23 7E D6 3C +R 00 00 01 00 +T 2F 02 00 00 77 23 7E DE 00 77 21 04 00 DD 4E +R 00 00 01 00 +T 3A 02 00 00 02 DD 46 03 09 34 23 20 01 34 +R 00 00 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 21 04 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 4F 02 00 00 23 66 68 01 18 80 3E 80 AC 67 ED +R 00 00 01 00 +T 5A 02 00 00 42 DA 4B 03 00 00 +R 00 00 01 00 00 06 01 00 +T 5E 02 00 00 +R 00 00 01 00 +T 5E 02 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 69 02 00 00 D6 18 77 23 7E DE 00 77 21 08 00 +R 00 00 01 00 +T 74 02 00 00 09 56 23 66 6A 29 11 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 7D 02 00 00 19 56 23 66 6A DD 75 FA DD 74 FB +R 00 00 01 00 +T 88 02 00 00 21 08 00 09 3E 01 AE 23 B6 20 38 +R 00 00 01 00 +T 93 02 00 00 01 04 00 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 9D 02 00 00 00 00 00 00 7B B2 20 28 01 64 00 +R 00 00 01 00 02 04 09 00 +T A6 02 00 00 DD 5E F8 DD 56 F9 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T AF 02 00 00 7B B2 20 10 01 90 01 DD 5E F8 DD +R 00 00 01 00 +T BA 02 00 00 56 F9 CD 00 00 00 00 7B B2 20 08 +R 00 00 01 00 02 07 09 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 34 +R 00 00 01 00 +T D6 02 00 00 23 20 01 34 +R 00 00 01 00 +T DA 02 00 00 +R 00 00 01 00 +T DA 02 00 00 +R 00 00 01 00 +T DA 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T E5 02 00 00 23 46 DD 6E FA DD 66 FB CD +R 00 00 01 00 +T EE 02 00 00 00 00 00 00 30 56 +R 00 00 01 00 02 04 08 00 +T F2 02 00 00 +R 00 00 01 00 +T F2 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T FD 02 00 00 DD 96 FA 77 23 7E DD 9E FB 77 21 +R 00 00 01 00 +T 08 03 00 00 08 00 09 34 23 20 01 34 +R 00 00 01 00 +T 10 03 00 00 +R 00 00 01 00 +T 10 03 00 00 +R 00 00 01 00 +T 10 03 00 00 21 08 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 1B 03 00 00 23 66 68 01 0C 80 3E 80 AC 67 ED +R 00 00 01 00 +T 26 03 00 00 42 38 1D +R 00 00 01 00 +T 29 03 00 00 +R 00 00 01 00 +T 29 03 00 00 21 08 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 34 03 00 00 D6 0C 77 23 7E DE 00 77 DD 34 F8 +R 00 00 01 00 +T 3F 03 00 00 20 03 DD 34 F9 +R 00 00 01 00 +T 44 03 00 00 +R 00 00 01 00 +T 44 03 00 00 18 CA +R 00 00 01 00 +T 46 03 00 00 +R 00 00 01 00 +T 46 03 00 00 18 92 +R 00 00 01 00 +T 48 03 00 00 +R 00 00 01 00 +T 48 03 00 00 C3 44 02 00 00 +R 00 00 01 00 00 05 01 00 +T 4B 03 00 00 +R 00 00 01 00 +T 4B 03 00 00 C3 0C 02 00 00 +R 00 00 01 00 00 05 01 00 +T 4E 03 00 00 +R 00 00 01 00 +T 4E 03 00 00 21 0A 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 59 03 00 00 21 94 F8 DD 4E F8 DD 46 F9 09 EB +R 00 00 01 00 +T 64 03 00 00 E1 73 23 72 21 CC 07 CD +R 00 00 01 00 +T 6C 03 00 00 00 00 00 00 30 12 +R 00 00 01 00 02 04 08 00 +T 70 03 00 00 +R 00 00 01 00 +T 70 03 00 00 DD 36 FA CD DD 36 FB 07 DD 36 FC +R 00 00 01 00 +T 7B 03 00 00 02 DD 36 FD 00 18 10 +R 00 00 01 00 +T 82 03 00 00 +R 00 00 01 00 +T 82 03 00 00 DD 36 FA B2 DD 36 FB 07 DD 36 FC +R 00 00 01 00 +T 8D 03 00 00 03 DD 36 FD 00 +R 00 00 01 00 +T 92 03 00 00 +R 00 00 01 00 +T 92 03 00 00 +R 00 00 01 00 +T 92 03 00 00 DD 4E F8 DD 46 F9 DD 6E FA DD 66 +R 00 00 01 00 +T 9D 03 00 00 FB CD 00 00 00 00 30 4D +R 00 00 01 00 02 06 08 00 +T A3 03 00 00 +R 00 00 01 00 +T A3 03 00 00 01 04 00 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T AD 03 00 00 00 00 00 00 7B B2 20 25 01 64 00 +R 00 00 01 00 02 04 09 00 +T B6 03 00 00 DD 5E FA DD 56 FB CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T BF 03 00 00 7B B2 20 10 01 90 01 DD 5E FA DD +R 00 00 01 00 +T CA 03 00 00 56 FB CD 00 00 00 00 7B B2 20 05 +R 00 00 01 00 02 07 09 00 +T D3 03 00 00 +R 00 00 01 00 +T D3 03 00 00 11 02 00 18 03 +R 00 00 01 00 +T D8 03 00 00 +R 00 00 01 00 +T D8 03 00 00 11 01 00 +R 00 00 01 00 +T DB 03 00 00 +R 00 00 01 00 +T DB 03 00 00 21 04 00 39 7E 83 77 23 7E 8A 77 +R 00 00 01 00 +T E6 03 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T EE 03 00 00 +R 00 00 01 00 +T EE 03 00 00 18 A2 +R 00 00 01 00 +T F0 03 00 00 +R 00 00 01 00 +T F0 03 00 00 AF DD 77 FA DD 77 FB 21 06 00 DD +R 00 00 01 00 +T FB 03 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 06 04 00 00 75 FE DD 74 FF +R 00 00 01 00 +T 0B 04 00 00 +R 00 00 01 00 +T 0B 04 00 00 21 08 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 16 04 00 00 23 46 DD 6E FA DD 66 FB CD +R 00 00 01 00 +T 1F 04 00 00 00 00 00 00 30 65 +R 00 00 01 00 02 04 08 00 +T 23 04 00 00 +R 00 00 01 00 +T 23 04 00 00 DD 6E FA DD 66 FB 29 01 +R 00 00 01 00 +T 2B 04 00 00 00 00 00 00 09 4E 23 46 21 06 00 +R 00 00 01 00 00 04 03 00 +T 34 04 00 00 39 7E 81 77 23 7E 88 77 3E 01 DD +R 00 00 01 00 +T 3F 04 00 00 AE FA DD B6 FB 20 38 01 04 00 DD +R 00 00 01 00 +T 4A 04 00 00 5E FA DD 56 FB CD 00 00 00 00 7B +R 00 00 01 00 02 0A 09 00 +T 53 04 00 00 B2 20 28 01 64 00 DD 5E FA DD 56 +R 00 00 01 00 +T 5E 04 00 00 FB CD 00 00 00 00 7B B2 20 10 01 +R 00 00 01 00 02 06 09 00 +T 67 04 00 00 90 01 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 70 04 00 00 00 00 00 00 7B B2 20 08 +R 00 00 01 00 02 04 09 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 7E 04 00 00 +R 00 00 01 00 +T 7E 04 00 00 +R 00 00 01 00 +T 7E 04 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 86 04 00 00 +R 00 00 01 00 +T 86 04 00 00 18 83 +R 00 00 01 00 +T 88 04 00 00 +R 00 00 01 00 +T 88 04 00 00 21 0C 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 93 04 00 00 DD 6E FE DD 66 FF DD 5E FC DD 56 +R 00 00 01 00 +T 9E 04 00 00 FD 19 EB 01 07 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T A7 04 00 00 E1 73 23 72 21 0E 00 DD 4E 02 DD +R 00 00 01 00 +T B2 04 00 00 46 03 09 DD 5E FE DD 56 FF 13 73 +R 00 00 01 00 +T BD 04 00 00 23 72 21 10 00 09 36 FF 23 36 FF +R 00 00 01 00 +T C8 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T CB 04 00 00 +R 00 00 01 00 +T CB 04 00 00 CD 00 00 00 00 21 00 00 E5 21 +R 00 00 01 00 02 05 04 00 +T D3 04 00 00 3C 00 E5 ED 4B 02 00 00 00 2A +R 00 00 01 00 02 09 05 00 +T DB 04 00 00 00 00 00 00 CD 00 00 00 00 E5 4B +R 00 00 01 00 02 04 05 00 02 09 07 00 +T E2 04 00 00 42 11 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 02 00 29 0B 01 00 +T E8 04 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 00 05 01 00 02 0A 01 00 +T EF 04 00 00 21 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0A 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 1F 00 1C 00 1F 00 1E 00 1F 00 +R 00 00 04 00 +T 0A 00 00 00 1E 00 1F 00 1F 00 1E 00 1F 00 +R 00 00 04 00 +T 14 00 00 00 1E 00 1F 00 +R 00 00 04 00 diff --git a/src/nos/lib/crt_banked_lib/initgrup.rel b/src/nos/lib/crt_banked_lib/initgrup.rel new file mode 100644 index 00000000..9f6381b4 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/initgrup.rel @@ -0,0 +1,113 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _endgrent Ref00000000 +S _strcmp Ref00000000 +S .__.ABS. Def00000000 +S _getgrent Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _setgroups Ref00000000 +S _setgrent Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size FA flags 0 +S _initgroups Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 BA FF AF DD 77 FE +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FF DD 6E FE DD 66 FF 29 E5 +R 00 00 01 00 +T 14 00 00 00 21 04 00 39 5D 54 E1 19 71 23 70 +R 00 00 01 00 +T 1F 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 25 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 01 20 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 32 00 00 00 AC 67 ED 42 D2 DB 00 00 00 3E +R 00 00 01 00 00 09 01 00 +T 3A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 3F 00 00 00 00 00 00 00 DD 75 BA DD 74 BB 7D +R 00 00 01 00 02 04 00 00 +T 48 00 00 00 B4 CA DB 00 00 00 +R 00 00 01 00 00 06 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 21 04 00 DD 4E BA DD 46 BB 09 46 +R 00 00 01 00 +T 57 00 00 00 23 66 68 DD 4E 04 DD 46 05 A7 ED +R 00 00 01 00 +T 62 00 00 00 42 28 73 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 06 00 DD 4E BA DD 46 BB 09 46 +R 00 00 01 00 +T 70 00 00 00 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 DD 6E FC DD 66 FD 7E 23 B6 28 54 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 DD 4E 02 DD 46 03 DD 6E FC DD 66 +R 00 00 01 00 +T 8F 00 00 00 FD 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 96 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 9D 00 00 00 20 2A +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 DD 6E FE DD 66 FF 29 E5 21 04 00 +R 00 00 01 00 +T B2 00 00 00 39 4D 44 E1 09 E5 21 04 00 DD 4E +R 00 00 01 00 +T BD 00 00 00 BA DD 46 BB 09 4E 23 46 E1 71 23 +R 00 00 01 00 +T C8 00 00 00 70 +R 00 00 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T D4 00 00 00 34 FD +R 00 00 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 18 A1 +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 C3 27 00 00 00 +R 00 00 01 00 00 05 01 00 +T DB 00 00 00 +R 00 00 01 00 +T DB 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T E1 00 00 00 00 00 00 00 21 02 00 39 4D 44 DD +R 00 00 01 00 02 04 00 00 +T EA 00 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T F2 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T F8 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_banked_lib/isatty.rel b/src/nos/lib/crt_banked_lib/isatty.rel new file mode 100644 index 00000000..6bea2e2a --- /dev/null +++ b/src/nos/lib/crt_banked_lib/isatty.rel @@ -0,0 +1,41 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _fstat Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3B flags 0 +S _isatty Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E2 FF 21 00 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4D 44 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 17 00 00 00 00 00 00 00 7D A4 3C 28 12 DD 7E +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 E6 E6 00 6F DD 7E E7 E6 F0 67 3E +R 00 00 01 00 +T 2B 00 00 00 20 AC B5 28 05 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 21 00 00 18 03 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 21 01 00 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/itoa.rel b/src/nos/lib/crt_banked_lib/itoa.rel new file mode 100644 index 00000000..eb5ec3ed --- /dev/null +++ b/src/nos/lib/crt_banked_lib/itoa.rel @@ -0,0 +1,193 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?UL_DIVASG_L03 Ref00000000 +S ?L_NEG_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?UL_MOD_L03 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_MOD_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1FD flags 0 +S _itoa Def00000194 +S ___longtoa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D6 FF DD 6E 0A DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 0B DD 75 F8 DD 74 F9 21 00 00 +R 00 00 01 00 +T 14 00 00 00 39 DD 75 FA DD 74 FB 21 2C 00 39 +R 00 00 01 00 +T 1F 00 00 00 DD 75 FC DD 74 FD 21 3A 00 39 7E +R 00 00 01 00 +T 2A 00 00 00 D6 0A 77 DD 4E 0C DD 46 0D 21 +R 00 00 01 00 +T 34 00 00 00 24 00 CD 00 00 00 00 38 11 01 +R 00 00 01 00 02 07 07 00 +T 3C 00 00 00 02 80 DD 6E 0C DD 66 0D 3E 80 AC +R 00 00 01 00 +T 47 00 00 00 67 ED 42 30 03 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 C3 83 01 00 00 +R 00 00 01 00 00 05 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 DD 6E FC DD 66 FD 23 23 7E E6 00 +R 00 00 01 00 +T 5A 00 00 00 47 23 7E E6 80 B0 28 31 AF DD B6 +R 00 00 01 00 +T 65 00 00 00 0E 28 2B +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T 73 00 00 00 74 F9 2B 36 2D DD 4E 04 DD 46 05 +R 00 00 01 00 +T 7E 00 00 00 DD 6E 02 DD 66 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 87 00 00 00 DD 75 02 DD 74 03 DD 71 04 DD 70 +R 00 00 01 00 +T 92 00 00 00 05 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 DD 6E FC DD 66 FD 23 23 7E 23 B6 +R 00 00 01 00 +T 9E 00 00 00 20 02 +R 00 00 01 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 18 4E +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 DD 6E 0C DD 66 0D 7C 07 9F 4F 41 +R 00 00 01 00 +T AD 00 00 00 C5 E5 DD 4E 04 DD 46 05 DD 6E 02 +R 00 00 01 00 +T B8 00 00 00 DD 66 03 CD 00 00 00 00 E5 DD 6E +R 00 00 01 00 02 08 06 00 +T C1 00 00 00 FA DD 66 FB 23 DD 75 FA DD 74 FB +R 00 00 01 00 +T CC 00 00 00 2B C1 71 21 2C 00 39 DD 5E 0C DD +R 00 00 01 00 +T D7 00 00 00 56 0D 7A 07 9F 4F 41 CD +R 00 00 01 00 +T DF 00 00 00 00 00 00 00 DD 6E FC DD 66 FD 23 +R 00 00 01 00 02 04 01 00 +T E8 00 00 00 23 7E 23 B6 20 B4 +R 00 00 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 18 30 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 5E 02 DD 56 03 DD 4E 0C DD 46 +R 00 00 01 00 +T FB 00 00 00 0D CD 00 00 00 00 DD 6E FA DD 66 +R 00 00 01 00 02 06 08 00 +T 04 01 00 00 FB 23 DD 75 FA DD 74 FB 2B 73 DD +R 00 00 01 00 +T 0F 01 00 00 5E 02 DD 56 03 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 09 00 +T 18 01 00 00 6E FC DD 66 FD 73 23 72 +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 DD 6E FC DD 66 FD 7E 23 B6 20 C5 +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 21 00 00 39 4D 44 DD 6E FA DD 66 +R 00 00 01 00 +T 36 01 00 00 FB A7 ED 42 DD 75 FF +R 00 00 01 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 AF DD B6 FF 28 40 +R 00 00 01 00 +T 43 01 00 00 +R 00 00 01 00 +T 43 01 00 00 DD 6E FA DD 66 FB 2B DD 75 FA DD +R 00 00 01 00 +T 4E 01 00 00 74 FB 46 DD 70 FE 78 FE 0A 30 0A +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 DD 7E FE C6 30 DD 77 FE 18 09 +R 00 00 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 DD 7E FE DD 86 10 DD 77 FE +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T 77 01 00 00 74 F9 2B DD 46 FE 70 DD 35 FF 18 +R 00 00 01 00 +T 82 01 00 00 BA +R 00 00 01 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 DD 6E F8 DD 66 F9 36 00 DD 6E 0A +R 00 00 01 00 +T 8E 01 00 00 DD 66 0B C3 00 00 00 00 +R 00 00 01 00 02 08 03 00 +T 94 01 00 00 +R 00 00 01 00 +T 94 01 00 00 CD 00 00 00 00 FE FF DD 36 FE 41 +R 00 00 01 00 02 05 05 00 +T 9D 01 00 00 DD CB 0B 7E 28 16 +R 00 00 01 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 DD 36 FE 61 DD 4E 0A DD 46 0B A7 +R 00 00 01 00 +T AE 01 00 00 21 00 00 ED 42 DD 75 0A DD 74 0B +R 00 00 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 DD 6E FE E5 0E 01 C5 DD 6E 0A DD +R 00 00 01 00 +T C4 01 00 00 66 0B E5 DD 6E 04 DD 66 05 E5 3E +R 00 00 01 00 +T CF 01 00 00 0A DD AE 0A DD B6 0B 20 0D DD 5E +R 00 00 01 00 +T DA 01 00 00 02 DD 56 03 7A 07 9F 4F 41 18 09 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 DD 5E 02 DD 56 03 01 00 00 +R 00 00 01 00 +T EE 01 00 00 +R 00 00 01 00 +T EE 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T F4 01 00 00 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T FB 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 diff --git a/src/nos/lib/crt_banked_lib/localtim.rel b/src/nos/lib/crt_banked_lib/localtim.rel new file mode 100644 index 00000000..58ba9c1b --- /dev/null +++ b/src/nos/lib/crt_banked_lib/localtim.rel @@ -0,0 +1,26 @@ +XL4 +H 3 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___tm_conv Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1B flags 0 +S _localtime Def00000000 +A UDATA0 size 12 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 E5 4B 42 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 04 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 16 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 04 02 00 02 09 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/longjmp.rel b/src/nos/lib/crt_banked_lib/longjmp.rel new file mode 100644 index 00000000..b1296bef --- /dev/null +++ b/src/nos/lib/crt_banked_lib/longjmp.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 3 global symbols +S leave_entry Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3E flags 0 +S _longjmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 78 B1 20 01 03 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 EB 5E 23 56 23 EB F9 EB 5E 23 56 +R 00 00 01 00 +T 10 00 00 00 23 EB 7E ED 39 39 23 7E ED 39 3A +R 00 00 01 00 +T 1B 00 00 00 EB C5 4E 23 46 23 5E 23 56 23 D5 +R 00 00 01 00 +T 26 00 00 00 DD E1 5E 23 56 23 D5 FD E1 5E 23 +R 00 00 01 00 +T 31 00 00 00 56 23 EB E3 E5 EB 5E 23 56 EB C3 +R 00 00 01 00 +T 3C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/crt_banked_lib/lsearch.rel b/src/nos/lib/crt_banked_lib/lsearch.rel new file mode 100644 index 00000000..881a9440 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/lsearch.rel @@ -0,0 +1,93 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size EC flags 0 +S _lfind Def00000000 +S _lsearch Def00000066 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B 56 23 66 6A DD 75 FE DD 74 +R 00 00 01 00 +T 14 00 00 00 FF +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 DD 6E FE DD 66 FF 2B DD 75 FE DD +R 00 00 01 00 +T 20 00 00 00 74 FF 23 7D B4 28 39 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 DD 4E 02 DD 46 03 DD 5E 04 DD 56 +R 00 00 01 00 +T 32 00 00 00 05 DD 7E 10 DD 6E 0E DD 66 0F CD +R 00 00 01 00 +T 3D 00 00 00 00 00 00 00 7D B4 20 08 +R 00 00 01 00 02 04 00 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 6E 04 DD 66 05 18 18 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 DD 6E 0C DD 66 0D DD 4E 04 DD 46 +R 00 00 01 00 +T 56 00 00 00 05 09 DD 75 04 DD 74 05 18 B5 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 21 00 00 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 CD 00 00 00 00 FE FF DD 6E 10 E5 +R 00 00 01 00 02 05 04 00 +T 6F 00 00 00 DD 6E 0E DD 66 0F E5 DD 6E 0C DD +R 00 00 01 00 +T 7A 00 00 00 66 0D E5 DD 6E 0A DD 66 0B E5 DD +R 00 00 01 00 +T 85 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 29 0A 01 00 +T 8D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 00 04 01 00 02 09 00 00 +T 94 00 00 00 F1 F1 DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 9F 00 00 00 43 +R 00 00 01 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 DD 6E 0C DD 66 0D E5 DD 4E 02 DD +R 00 00 01 00 +T AB 00 00 00 46 03 C5 DD 6E 0A DD 66 0B 5E 23 +R 00 00 01 00 +T B6 00 00 00 56 DD 4E 0C DD 46 0D CD +R 00 00 01 00 +T BE 00 00 00 00 00 00 00 DD 6E 04 DD 66 05 19 +R 00 00 01 00 02 04 05 00 +T C7 00 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T CD 00 00 00 C1 CD 00 00 00 00 F1 DD 75 FE DD +R 00 00 01 00 02 06 00 00 +T D6 00 00 00 74 FF DD 6E 0A DD 66 0B 34 23 20 +R 00 00 01 00 +T E1 00 00 00 01 34 +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_banked_lib/lstat.rel b/src/nos/lib/crt_banked_lib/lstat.rel new file mode 100644 index 00000000..f933765b --- /dev/null +++ b/src/nos/lib/crt_banked_lib/lstat.rel @@ -0,0 +1,52 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _close Ref00000000 +S .__.ABS. Def00000000 +S _fstat Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 71 flags 0 +S _lstat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 00 08 E5 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 16 00 00 00 00 00 00 00 F1 F1 DD 75 FE DD 74 +R 00 00 01 00 02 04 00 00 +T 1F 00 00 00 FF CB 7C 28 1C +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 2F 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 35 00 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 00 00 +T 3E 00 00 00 18 28 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 DD 4E 04 DD 46 05 DD 5E FE DD 56 +R 00 00 01 00 +T 4B 00 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 51 00 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 00 00 +T 5A 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 62 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 01 00 diff --git a/src/nos/lib/crt_banked_lib/ltoa.rel b/src/nos/lib/crt_banked_lib/ltoa.rel new file mode 100644 index 00000000..3c92a900 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/ltoa.rel @@ -0,0 +1,45 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___longtoa Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 63 flags 0 +S _ltoa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 36 FE 41 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD CB 0D 7E 28 16 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 DD 36 FE 61 DD 4E 0C DD 46 0D A7 +R 00 00 01 00 +T 1A 00 00 00 21 00 00 ED 42 DD 75 0C DD 74 0D +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E FE E5 3E 0A DD AE 0C DD B6 +R 00 00 01 00 +T 30 00 00 00 0D 20 04 3E 01 18 01 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 AF +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 4F C5 DD 6E 0C DD 66 0D E5 DD 6E +R 00 00 01 00 +T 43 00 00 00 0A DD 66 0B E5 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 4E 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 56 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 5D 00 00 00 F1 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 08 01 00 diff --git a/src/nos/lib/crt_banked_lib/ltostr.rel b/src/nos/lib/crt_banked_lib/ltostr.rel new file mode 100644 index 00000000..52b75ea6 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/ltostr.rel @@ -0,0 +1,38 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ultoa Ref00000000 +S _ltoa Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36 flags 0 +S _ultostr Def00000000 +S _ltostr Def0000001B +A UDATA0 size 22 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 E5 21 00 00 00 00 E5 3E +R 00 00 01 00 00 06 02 00 +T 0F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 14 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0B 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 03 00 +T 24 00 00 00 E5 21 00 00 00 00 E5 3E +R 00 00 01 00 00 06 02 00 +T 2A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 2F 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0B 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/malloc.rel b/src/nos/lib/crt_banked_lib/malloc.rel new file mode 100644 index 00000000..0b261b94 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/malloc.rel @@ -0,0 +1,199 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sbrk Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22C flags 0 +S _malloc Def00000000 +A UDATA0 size 6 flags 0 +S ___malloc_last Def00000004 +S ___malloc_head Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 03 23 23 23 CB 3C CB 1D CB 3C +R 00 00 01 00 +T 14 00 00 00 CB 1D 23 DD 75 FE DD 74 FF 2A +R 00 00 01 00 +T 1E 00 00 00 04 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 00 04 02 00 +T 27 00 00 00 B4 20 11 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 36 FC 00 00 00 00 DD 36 FD +R 00 00 01 00 09 07 02 00 +T 31 00 00 00 00 00 00 00 21 00 00 00 00 22 +R 00 00 01 00 89 04 02 00 00 09 02 00 +T 36 00 00 00 02 00 00 00 22 04 00 00 00 +R 00 00 01 00 00 04 02 00 00 09 02 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T 46 00 00 00 68 DD 75 FA DD 74 FB +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T 58 00 00 00 68 DD 4E FA DD 46 FB A7 ED 42 CA +R 00 00 01 00 +T 63 00 00 00 F0 00 00 00 DD 6E FA DD 66 FB 46 +R 00 00 01 00 00 04 01 00 +T 6C 00 00 00 23 66 68 29 29 DD 4E FA DD 46 FB +R 00 00 01 00 +T 77 00 00 00 09 E5 03 03 69 60 4E 23 46 E1 A7 +R 00 00 01 00 +T 82 00 00 00 ED 42 20 6A +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T 91 00 00 00 68 ED 4B 04 00 00 00 A7 ED 42 20 +R 00 00 01 00 00 07 02 00 +T 9A 00 00 00 15 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T A6 00 00 00 68 23 23 46 23 66 68 22 +R 00 00 01 00 +T AE 00 00 00 04 00 00 00 +R 00 00 01 00 00 04 02 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 DD 6E FA DD 66 FB 23 23 7E 23 66 +R 00 00 01 00 +T BB 00 00 00 6F 4E 23 46 DD 6E FA DD 66 FB 7E +R 00 00 01 00 +T C6 00 00 00 81 77 23 7E 88 77 DD 6E FA DD 66 +R 00 00 01 00 +T D1 00 00 00 FB 23 23 E5 DD 4E FA DD 46 FB 03 +R 00 00 01 00 +T DC 00 00 00 03 69 60 4E 23 46 03 03 69 60 4E +R 00 00 01 00 +T E7 00 00 00 23 46 E1 71 23 70 C3 4D 00 00 00 +R 00 00 01 00 00 0B 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T FB 00 00 00 4E FE DD 46 FF A7 ED 42 DA +R 00 00 01 00 +T 04 01 00 00 AE 01 00 00 +R 00 00 01 00 00 04 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T 11 01 00 00 4E FE DD 46 FF A7 ED 42 20 1C +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 DD 6E FC DD 66 FD 23 23 E5 DD 4E +R 00 00 01 00 +T 26 01 00 00 FA DD 46 FB 03 03 69 60 4E 23 46 +R 00 00 01 00 +T 31 01 00 00 E1 71 23 70 18 56 +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 DD 6E FE DD 66 FF 29 29 DD 4E FA +R 00 00 01 00 +T 42 01 00 00 DD 46 FB 09 22 04 00 00 00 DD 6E +R 00 00 01 00 00 09 02 00 +T 4B 01 00 00 FC DD 66 FD 23 23 ED 5B +R 00 00 01 00 +T 53 01 00 00 04 00 00 00 73 23 72 2A +R 00 00 01 00 00 04 02 00 +T 59 01 00 00 04 00 00 00 23 23 E5 03 03 69 60 +R 00 00 01 00 00 04 02 00 +T 62 01 00 00 4E 23 46 E1 71 23 70 DD 6E FA DD +R 00 00 01 00 +T 6D 01 00 00 66 FB 46 23 66 68 DD 4E FE DD 46 +R 00 00 01 00 +T 78 01 00 00 FF A7 ED 42 E5 2A 04 00 00 00 D1 +R 00 00 01 00 00 0A 02 00 +T 81 01 00 00 73 23 72 DD 6E FA DD 66 FB 71 23 +R 00 00 01 00 +T 8C 01 00 00 70 +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 DD 6E FC DD 66 FD 22 04 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 96 01 00 00 DD 6E FA DD 66 FB 23 23 AF 77 23 +R 00 00 01 00 +T A1 01 00 00 77 21 04 00 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T AC 01 00 00 18 27 +R 00 00 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 2A 04 00 00 00 DD 4E FA DD 46 FB +R 00 00 01 00 00 05 02 00 +T B7 01 00 00 A7 ED 42 20 4F +R 00 00 01 00 +T BC 01 00 00 +R 00 00 01 00 +T BC 01 00 00 11 00 04 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T C2 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T C9 01 00 00 FA DD 74 FB 7D A4 3C 20 06 +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 21 00 00 +R 00 00 01 00 +T D5 01 00 00 +R 00 00 01 00 +T D5 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 DD 6E FA DD 66 FB 36 00 23 36 01 +R 00 00 01 00 +T E3 01 00 00 DD 6E FA DD 66 FB 23 23 AF 77 23 +R 00 00 01 00 +T EE 01 00 00 77 21 04 00 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T F9 01 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T FF 01 00 00 CD 00 00 00 00 2A 04 00 00 00 DD +R 00 00 01 00 02 05 00 00 00 0A 02 00 +T 06 02 00 00 75 FA DD 74 FB +R 00 00 01 00 +T 0B 02 00 00 +R 00 00 01 00 +T 0B 02 00 00 DD 6E FA DD 66 FB DD 75 FC DD 74 +R 00 00 01 00 +T 16 02 00 00 FD DD 6E FA DD 66 FB 23 23 46 23 +R 00 00 01 00 +T 21 02 00 00 66 68 DD 75 FA DD 74 FB C3 +R 00 00 01 00 +T 2A 02 00 00 4D 00 00 00 +R 00 00 01 00 00 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/memccpy.rel b/src/nos/lib/crt_banked_lib/memccpy.rel new file mode 100644 index 00000000..fd2e483d --- /dev/null +++ b/src/nos/lib/crt_banked_lib/memccpy.rel @@ -0,0 +1,49 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 65 flags 0 +S _memccpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 03 DD 75 FC DD 74 FD DD 71 FE +R 00 00 01 00 +T 14 00 00 00 DD 70 FF +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E 0C DD 66 0D 2B DD 75 0C DD +R 00 00 01 00 +T 22 00 00 00 74 0D 23 7D B4 28 36 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 34 00 00 00 74 FF 2B 46 DD 6E FC DD 66 FD 23 +R 00 00 01 00 +T 3F 00 00 00 DD 75 FC DD 74 FD 2B 70 48 06 00 +R 00 00 01 00 +T 4A 00 00 00 DD 6E 0A DD 66 0B A7 ED 42 20 08 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 6E FC DD 66 FD 18 05 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 18 B8 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 21 00 00 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/crt_banked_lib/memchr.rel b/src/nos/lib/crt_banked_lib/memchr.rel new file mode 100644 index 00000000..f727bd50 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/memchr.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4F flags 0 +S _memchr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 1C 00 00 00 74 0B 23 7D B4 28 26 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 DD 6E FE DD 66 FF 4E 06 00 DD 6E +R 00 00 01 00 +T 2E 00 00 00 04 DD 66 05 A7 ED 42 20 08 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 6E FE DD 66 FF 18 0D +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 18 C8 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 21 00 00 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/crt_banked_lib/memcmp.rel b/src/nos/lib/crt_banked_lib/memcmp.rel new file mode 100644 index 00000000..7405ab6d --- /dev/null +++ b/src/nos/lib/crt_banked_lib/memcmp.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6D flags 0 +S _memcmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 71 FA DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 70 FB DD 6E 02 DD 66 03 DD 75 FC +R 00 00 01 00 +T 14 00 00 00 DD 74 FD DD 36 FE 00 DD 36 FF 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 2A 00 00 00 74 0B 23 7D B4 28 2C +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 3C 00 00 00 74 FD 2B 46 DD 70 FF DD 6E FA DD +R 00 00 01 00 +T 47 00 00 00 66 FB 23 DD 75 FA DD 74 FB 2B 4E +R 00 00 01 00 +T 52 00 00 00 DD 71 FE 79 B8 28 02 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 18 02 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 18 C2 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 DD 4E FF 06 00 DD 6E FE 26 00 A7 +R 00 00 01 00 +T 68 00 00 00 ED 42 C3 00 00 00 00 +R 00 00 01 00 02 07 00 00 diff --git a/src/nos/lib/crt_banked_lib/memcpy.rel b/src/nos/lib/crt_banked_lib/memcpy.rel new file mode 100644 index 00000000..2657cea7 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/memcpy.rel @@ -0,0 +1,35 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 52 flags 0 +S _memcpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 03 DD 75 FC DD 74 FD DD 71 FE +R 00 00 01 00 +T 14 00 00 00 DD 70 FF +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 22 00 00 00 74 0B 23 7D B4 28 20 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 34 00 00 00 74 FF 2B 46 DD 6E FC DD 66 FD 23 +R 00 00 01 00 +T 3F 00 00 00 DD 75 FC DD 74 FD 2B 70 18 CE +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 00 00 diff --git a/src/nos/lib/crt_banked_lib/memmove.rel b/src/nos/lib/crt_banked_lib/memmove.rel new file mode 100644 index 00000000..b518854e --- /dev/null +++ b/src/nos/lib/crt_banked_lib/memmove.rel @@ -0,0 +1,61 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9A flags 0 +S _memmove Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 03 DD 75 FC DD 74 FD DD 71 FE +R 00 00 01 00 +T 14 00 00 00 DD 70 FF A7 ED 42 DD 4E 0A DD 46 +R 00 00 01 00 +T 1F 00 00 00 0B A7 ED 42 38 1E +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 30 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 39 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 3E 00 00 00 00 00 00 00 F1 18 54 +R 00 00 01 00 02 04 00 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 21 00 00 39 7E DD 86 0A 77 23 7E +R 00 00 01 00 +T 4E 00 00 00 DD 8E 0B 77 21 02 00 39 7E DD 86 +R 00 00 01 00 +T 59 00 00 00 0A 77 23 7E DD 8E 0B 77 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 6C 00 00 00 74 0B 23 7D B4 28 1E +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 DD 6E FE DD 66 FF 2B DD 75 FE DD +R 00 00 01 00 +T 7E 00 00 00 74 FF 46 DD 6E FC DD 66 FD 2B DD +R 00 00 01 00 +T 89 00 00 00 75 FC DD 74 FD 70 18 D0 +R 00 00 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_banked_lib/memset.rel b/src/nos/lib/crt_banked_lib/memset.rel new file mode 100644 index 00000000..0dd59644 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/memset.rel @@ -0,0 +1,31 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 40 flags 0 +S _memset Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 1C 00 00 00 74 0B 23 7D B4 28 14 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 DD 46 04 DD 6E FE DD 66 FF 23 DD +R 00 00 01 00 +T 2E 00 00 00 75 FE DD 74 FF 2B 70 18 DA +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 00 00 diff --git a/src/nos/lib/crt_banked_lib/mkdir.rel b/src/nos/lib/crt_banked_lib/mkdir.rel new file mode 100644 index 00000000..a81d3989 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/mkdir.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _mknod Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S _mkdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 E5 79 E6 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 FF 6F 78 E6 0F 67 7D F6 00 4F 7C +R 00 00 01 00 +T 14 00 00 00 F6 40 47 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 1A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 21 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_banked_lib/mktime.rel b/src/nos/lib/crt_banked_lib/mktime.rel new file mode 100644 index 00000000..f70ac657 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/mktime.rel @@ -0,0 +1,41 @@ +XL4 +H 2 areas 5 global symbols +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9C flags 0 +S _mktime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 04 00 DD +R 00 00 01 00 02 05 01 00 +T 09 00 00 00 4E 02 DD 46 03 09 56 23 66 6A 65 +R 00 00 01 00 +T 14 00 00 00 2E 00 29 29 29 E5 03 03 0A 6F 03 +R 00 00 01 00 +T 1F 00 00 00 0A 67 29 29 29 29 29 4D 44 E1 7D +R 00 00 01 00 +T 2A 00 00 00 B1 5F 7C B0 57 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 35 00 00 00 46 23 66 68 CB 2C CB 1D 7B B5 4F +R 00 00 01 00 +T 40 00 00 00 7A B4 47 DD 71 FC DD 70 FD 21 +R 00 00 01 00 +T 4A 00 00 00 0A 00 DD 4E 02 DD 46 03 09 56 23 +R 00 00 01 00 +T 55 00 00 00 66 6A 11 B0 FF 19 65 2E 00 29 E5 +R 00 00 01 00 +T 60 00 00 00 21 08 00 09 56 23 66 6A 23 29 29 +R 00 00 01 00 +T 6B 00 00 00 29 29 29 EB E1 7D B3 4F 7C B2 47 +R 00 00 01 00 +T 76 00 00 00 21 06 00 DD 5E 02 DD 56 03 19 79 +R 00 00 01 00 +T 81 00 00 00 B6 5F 78 23 B6 57 DD 73 FE DD 72 +R 00 00 01 00 +T 8C 00 00 00 FF DD 4E FE DD 46 FF DD 6E FC DD +R 00 00 01 00 +T 97 00 00 00 66 FD C3 00 00 00 00 +R 00 00 01 00 02 07 03 00 diff --git a/src/nos/lib/crt_banked_lib/opendir.rel b/src/nos/lib/crt_banked_lib/opendir.rel new file mode 100644 index 00000000..903837c9 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/opendir.rel @@ -0,0 +1,105 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S _open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E1 flags 0 +S _opendir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 00 00 39 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4D 44 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 17 00 00 00 00 00 00 00 7D B4 28 03 +R 00 00 01 00 02 04 00 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 C3 D3 00 00 00 +R 00 00 01 00 00 05 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 7E E4 E6 00 47 DD 7E E5 E6 40 +R 00 00 01 00 +T 2B 00 00 00 B0 20 09 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 21 14 00 22 00 00 00 00 C3 +R 00 00 01 00 02 08 04 00 +T 35 00 00 00 D3 00 00 00 +R 00 00 01 00 00 04 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 01 08 00 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 3F 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 46 00 00 00 75 FE DD 74 FF 7D B4 20 08 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 21 0C 00 22 00 00 00 00 18 7C +R 00 00 01 00 02 08 04 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 06 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 62 00 00 00 01 15 00 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 6A 00 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 71 00 00 00 44 E1 71 23 70 79 B0 20 16 +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 82 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 89 00 00 00 0C 00 22 00 00 00 00 18 43 +R 00 00 01 00 02 07 04 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 21 00 80 E5 DD 6E 02 DD 66 03 E5 +R 00 00 01 00 +T 9B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T A1 00 00 00 00 00 00 00 F1 F1 E5 DD 6E FE DD +R 00 00 01 00 02 04 00 00 +T AA 00 00 00 66 FF C1 71 23 70 CB 78 28 24 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 21 06 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T BF 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T C4 00 00 00 00 00 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T CB 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T D1 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T D3 00 00 00 +R 00 00 01 00 +T D3 00 00 00 21 00 00 18 06 +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/perror.rel b/src/nos/lib/crt_banked_lib/perror.rel new file mode 100644 index 00000000..99d76359 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/perror.rel @@ -0,0 +1,84 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strerror Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 87 flags 0 +S _perror Def0000004A +A CSTR size B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E FE DD 66 FF AF B6 28 0A +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 18 EC +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 4E 02 DD 46 03 DD 6E FE DD 66 +R 00 00 01 00 +T 30 00 00 00 FF A7 ED 42 E5 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 3B 00 00 00 11 02 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 41 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 48 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 CD 00 00 00 00 7B B2 20 08 +R 00 00 01 00 02 05 05 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 36 02 00 00 00 00 DD 36 03 +R 00 00 01 00 09 07 02 00 +T 58 00 00 00 00 00 00 00 +R 00 00 01 00 89 04 02 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 62 00 00 00 11 06 00 00 00 CD 00 00 00 00 ED +R 00 00 01 00 00 05 02 00 00 0A 01 00 +T 69 00 00 00 5B 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 2B 0A 01 00 +T 6F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 76 00 00 00 02 DD 74 03 EB CD 00 00 00 00 11 +R 00 00 01 00 00 0A 01 00 +T 7F 00 00 00 09 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 00 04 02 00 00 09 01 00 +T 85 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 65 72 72 6F 72 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 3A 20 00 +R 00 00 02 00 +T 09 00 00 00 +R 00 00 02 00 +T 09 00 00 00 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/popen.rel b/src/nos/lib/crt_banked_lib/popen.rel new file mode 100644 index 00000000..409033a6 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/popen.rel @@ -0,0 +1,204 @@ +XL4 +H 5 areas 11 global symbols +S _execve Ref00000000 +S _environ Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _close Ref00000000 +S ___fopen Ref00000000 +S _abort Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _pipe Ref00000000 +S _waitpid Ref00000000 +S _fork Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dup2 Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1B1 flags 0 +S _pclose Def00000176 +S _popen Def00000000 +A CSTR size E flags 0 +A IDATA0 size 8 flags 0 +A CDATA0 size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF 21 00 00 39 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 09 00 02 09 02 00 +T 15 00 00 00 28 06 +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 21 00 00 C3 73 01 00 00 +R 00 00 01 00 00 08 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E 04 DD 66 05 7E FE 72 20 04 +R 00 00 01 00 +T 28 00 00 00 0E 01 18 02 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 0E 00 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 06 00 DD 71 FC DD 70 FD 79 B0 20 +R 00 00 01 00 +T 39 00 00 00 04 0E 01 18 02 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 0E 00 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 06 00 DD 71 FE DD 70 FF 3E +R 00 00 01 00 +T 49 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4E 00 00 00 00 00 00 00 DD 75 FA DD 74 FB CB +R 00 00 01 00 02 04 02 00 +T 57 00 00 00 7C 28 22 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 62 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 02 00 +T 69 00 00 00 5E F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 71 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 02 00 +T 77 00 00 00 00 00 C3 73 01 00 00 +R 00 00 01 00 00 07 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 7E FA DD B6 FB C2 2D 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 DD 6E FE DD 66 FF 29 E5 21 02 00 +R 00 00 01 00 +T 90 00 00 00 39 4D 44 E1 09 5E 23 56 3E +R 00 00 01 00 +T 99 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 9E 00 00 00 00 00 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 02 04 02 00 +T A7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T AC 00 00 00 00 00 00 00 DD 6E FC DD 66 FD 29 +R 00 00 01 00 02 04 02 00 +T B5 00 00 00 E5 21 02 00 39 4D 44 E1 09 46 23 +R 00 00 01 00 +T C0 00 00 00 66 68 DD 4E FC DD 46 FD A7 ED 42 +R 00 00 01 00 +T CB 00 00 00 28 3C +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 DD 4E FC DD 46 FD DD 6E FC DD 66 +R 00 00 01 00 +T D8 00 00 00 FD 29 E5 21 02 00 39 5D 54 E1 19 +R 00 00 01 00 +T E3 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0D 00 +T E9 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 0D 00 02 09 02 00 +T F0 00 00 00 FC DD 66 FD 29 E5 21 02 00 39 4D +R 00 00 01 00 +T FB 00 00 00 44 E1 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 03 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0A 02 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 DD 6E 02 DD 66 03 22 04 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 12 01 00 00 2A 00 00 00 00 E5 01 00 00 00 00 +R 00 00 01 00 02 05 01 00 00 0B 03 00 +T 19 01 00 00 11 06 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 00 00 +T 1F 01 00 00 00 00 00 00 CD 00 00 00 00 F1 3E +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 26 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 2B 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 2D 01 00 00 +R 00 00 01 00 +T 2D 01 00 00 DD 6E FC DD 66 FD 29 E5 21 02 00 +R 00 00 01 00 +T 38 01 00 00 39 4D 44 E1 09 5E 23 56 3E +R 00 00 01 00 +T 41 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 46 01 00 00 00 00 00 00 DD 6E 04 DD 66 05 E5 +R 00 00 01 00 02 04 02 00 +T 4F 01 00 00 21 00 00 E5 DD 6E FE DD 66 FF 29 +R 00 00 01 00 +T 5A 01 00 00 E5 21 06 00 39 4D 44 E1 09 4E 23 +R 00 00 01 00 +T 65 01 00 00 46 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T 6C 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 73 01 00 00 +R 00 00 01 00 +T 73 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 08 00 +T 7F 01 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 84 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0E 00 02 09 02 00 +T 8B 01 00 00 28 05 +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 21 FF FF 18 1C +R 00 00 01 00 +T 92 01 00 00 +R 00 00 01 00 +T 92 01 00 00 21 00 00 E5 21 02 00 39 4D 44 11 +R 00 00 01 00 +T 9D 01 00 00 FF FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T A2 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0A 00 02 09 02 00 +T A9 01 00 00 6E FE DD 66 FF +R 00 00 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 73 68 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 2D 63 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 2F 62 69 6E 2F 73 68 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 03 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 06 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/crt_banked_lib/printf.rel b/src/nos/lib/crt_banked_lib/printf.rel new file mode 100644 index 00000000..33de373b --- /dev/null +++ b/src/nos/lib/crt_banked_lib/printf.rel @@ -0,0 +1,26 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _stdout Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _vfprintf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2F flags 0 +S _printf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0E 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 4E 0A DD 46 0B 11 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 1D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 23 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 2C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/putenv.rel b/src/nos/lib/crt_banked_lib/putenv.rel new file mode 100644 index 00000000..1185fb6a --- /dev/null +++ b/src/nos/lib/crt_banked_lib/putenv.rel @@ -0,0 +1,202 @@ +XL4 +H 4 areas E global symbols +S _environ Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +S _memcmp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D5 flags 0 +S _putenv Def00000000 +A IDATA0 size 4 flags 0 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF 01 3D 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 18 00 00 00 FA DD 74 FB 7D B4 20 16 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 28 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T 2F 00 00 00 75 FE DD 74 FF 18 15 +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 DD 4E 02 DD 46 03 DD 6E FA DD 66 +R 00 00 01 00 +T 41 00 00 00 FB A7 ED 42 DD 75 FE DD 74 FF +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 2A 00 00 00 00 DD 75 F6 DD 74 F7 +R 00 00 01 00 02 05 00 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 6E F6 DD 66 F7 46 23 66 68 DD +R 00 00 01 00 +T 5F 00 00 00 75 FC DD 74 FD 7D B4 CA +R 00 00 01 00 +T 67 00 00 00 F0 00 00 00 +R 00 00 01 00 00 04 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 DD 6E 02 DD 66 03 E5 DD 6E FC DD +R 00 00 01 00 +T 74 00 00 00 66 FD 7E E1 BE 20 65 DD 6E FE DD +R 00 00 01 00 +T 7F 00 00 00 66 FF DD 4E FC DD 46 FD 09 7E FE +R 00 00 01 00 +T 8A 00 00 00 3D 20 53 DD 6E FE DD 66 FF E5 DD +R 00 00 01 00 +T 95 00 00 00 4E FC DD 46 FD DD 5E 02 DD 56 03 +R 00 00 01 00 +T A0 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T A6 00 00 00 00 00 00 00 F1 7D B4 20 33 +R 00 00 01 00 02 04 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 DD 6E F6 DD 66 F7 23 23 46 23 66 +R 00 00 01 00 +T B8 00 00 00 68 E5 DD 6E F6 DD 66 F7 C1 71 23 +R 00 00 01 00 +T C3 00 00 00 70 79 B0 28 0F +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 DD 7E F6 C6 02 DD 77 F6 30 03 DD +R 00 00 01 00 +T D3 00 00 00 34 F7 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 18 D6 +R 00 00 01 00 +T D7 00 00 00 +R 00 00 01 00 +T D7 00 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 02 00 +T DE 00 00 00 18 10 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 DD 7E F6 C6 02 DD 77 F6 30 03 DD +R 00 00 01 00 +T EB 00 00 00 34 F7 +R 00 00 01 00 +T ED 00 00 00 +R 00 00 01 00 +T ED 00 00 00 C3 54 00 00 00 +R 00 00 01 00 00 05 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 7E FA DD B6 FB 20 06 +R 00 00 01 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 21 00 00 C3 D2 01 00 00 +R 00 00 01 00 00 08 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 ED 4B 02 00 00 00 21 00 00 CD +R 00 00 01 00 00 06 02 00 +T 06 01 00 00 00 00 00 00 DA A5 01 00 00 +R 00 00 01 00 02 04 09 00 00 09 01 00 +T 0B 01 00 00 +R 00 00 01 00 +T 0B 01 00 00 ED 4B 00 00 00 00 DD 6E F6 DD 66 +R 00 00 01 00 02 06 00 00 +T 14 01 00 00 F7 A7 ED 42 CB 2C CB 1D 01 05 00 +R 00 00 01 00 +T 1F 01 00 00 09 29 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0B 00 +T 25 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0B 00 02 09 01 00 +T 2C 01 00 00 F8 DD 74 F9 7D B4 20 06 +R 00 00 01 00 +T 34 01 00 00 +R 00 00 01 00 +T 34 01 00 00 21 FF FF C3 D2 01 00 00 +R 00 00 01 00 00 08 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 ED 4B 00 00 00 00 DD 6E F6 DD 66 +R 00 00 01 00 02 06 00 00 +T 43 01 00 00 F7 A7 ED 42 CB 2C CB 1D 23 29 E5 +R 00 00 01 00 +T 4E 01 00 00 ED 4B 00 00 00 00 DD 5E F8 DD 56 +R 00 00 01 00 02 06 00 00 +T 57 01 00 00 F9 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 5D 01 00 00 CD 00 00 00 00 F1 ED 4B +R 00 00 01 00 02 05 01 00 +T 63 01 00 00 00 00 00 00 DD 6E F6 DD 66 F7 A7 +R 00 00 01 00 02 04 00 00 +T 6C 01 00 00 ED 42 CB 2C CB 1D 29 DD 4E F8 DD +R 00 00 01 00 +T 77 01 00 00 46 F9 09 DD 75 F6 DD 74 F7 21 +R 00 00 01 00 +T 81 01 00 00 04 00 22 02 00 00 00 2A +R 00 00 01 00 00 07 02 00 +T 87 01 00 00 00 00 00 00 7D B4 28 0C +R 00 00 01 00 00 04 02 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 02 00 2B 0B 07 00 +T 93 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T 99 01 00 00 +R 00 00 01 00 +T 99 01 00 00 DD 6E F8 DD 66 F9 22 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T A2 01 00 00 22 00 00 00 00 +R 00 00 01 00 00 05 02 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 DD 6E F6 DD 66 F7 4D 44 03 03 DD +R 00 00 01 00 +T B0 01 00 00 71 F6 DD 70 F7 DD 4E 02 DD 46 03 +R 00 00 01 00 +T BB 01 00 00 71 23 70 DD 6E F6 DD 66 F7 AF 77 +R 00 00 01 00 +T C6 01 00 00 23 77 2A 02 00 00 00 2B 22 +R 00 00 01 00 00 07 02 00 +T CD 01 00 00 02 00 00 00 21 00 00 +R 00 00 01 00 00 04 02 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/putgetch.rel b/src/nos/lib/crt_banked_lib/putgetch.rel new file mode 100644 index 00000000..c6109537 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/putgetch.rel @@ -0,0 +1,46 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4A flags 0 +S __putchar Def00000000 +S __getchar Def0000001C +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 01 00 E5 21 +R 00 00 01 00 02 05 04 00 +T 08 00 00 00 04 00 39 4D 44 11 01 00 3E +R 00 00 01 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 16 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 CD 00 00 00 00 FE FF 21 01 00 E5 +R 00 00 01 00 02 05 06 00 +T 25 00 00 00 21 02 00 39 4D 44 11 00 00 3E +R 00 00 01 00 +T 2F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 34 00 00 00 00 00 00 00 F1 3E 01 AD B4 20 07 +R 00 00 01 00 02 04 00 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 DD 6E FE 26 00 18 03 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 FF FF +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/putpwent.rel b/src/nos/lib/crt_banked_lib/putpwent.rel new file mode 100644 index 00000000..1c028fd4 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/putpwent.rel @@ -0,0 +1,69 @@ +XL4 +H 3 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fprintf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 83 flags 0 +S _putpwent Def00000000 +A CSTR size 16 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 08 DD 7E +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 04 DD B6 05 20 0B +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 18 00 00 00 18 66 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 25 00 00 00 23 56 D5 21 0A 00 09 5E 23 56 D5 +R 00 00 01 00 +T 30 00 00 00 21 08 00 09 5E 23 56 D5 21 06 00 +R 00 00 01 00 +T 3B 00 00 00 09 5E 23 56 D5 21 04 00 09 5E 23 +R 00 00 01 00 +T 46 00 00 00 56 D5 03 03 69 60 4E 23 46 C5 DD +R 00 00 01 00 +T 51 00 00 00 6E 02 DD 66 03 4E 23 46 C5 21 +R 00 00 01 00 +T 5B 00 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 00 04 02 00 +T 64 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 6A 00 00 00 CD 00 00 00 00 EB 21 12 00 39 F9 +R 00 00 01 00 02 05 00 00 +T 73 00 00 00 EB CB 7C 28 05 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 00 00 +R 00 00 01 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 73 3A 25 73 3A 25 75 3A 25 75 +R 00 00 02 00 +T 0B 00 00 00 3A 25 73 3A 25 73 3A 25 73 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/qsort.rel b/src/nos/lib/crt_banked_lib/qsort.rel new file mode 100644 index 00000000..00954ac9 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/qsort.rel @@ -0,0 +1,308 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37F flags 0 +S _qsort Def00000334 +A UDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF +R 00 00 01 00 02 05 05 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 DD 4E 04 DD 46 05 DD 6E 02 DD 66 +R 00 00 01 00 +T 10 00 00 00 03 A7 ED 42 38 03 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 DD 6E 02 DD 66 03 DD 75 F6 DD 74 +R 00 00 01 00 +T 24 00 00 00 F7 DD 6E 04 DD 66 05 DD 75 F8 DD +R 00 00 01 00 +T 2F 00 00 00 74 F9 DD 4E 02 DD 46 03 DD 6E 04 +R 00 00 01 00 +T 3A 00 00 00 DD 66 05 A7 ED 42 DD 4E 08 DD 46 +R 00 00 01 00 +T 45 00 00 00 09 09 EB 69 60 29 4D 44 CD +R 00 00 01 00 +T 4E 00 00 00 00 00 00 00 DD 4E 08 DD 46 09 CD +R 00 00 01 00 02 04 08 00 +T 57 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 19 +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 DD 75 FC DD 74 FD DD 75 FA DD 74 +R 00 00 01 00 +T 6B 00 00 00 FB +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 4E FA DD 46 FB DD 6E F6 DD 66 +R 00 00 01 00 +T 77 00 00 00 F7 A7 ED 42 30 64 DD 4E FA DD 46 +R 00 00 01 00 +T 82 00 00 00 FB DD 5E F6 DD 56 F7 3A +R 00 00 01 00 +T 8A 00 00 00 02 00 00 00 2A 00 00 00 00 CD +R 00 00 01 00 00 04 02 00 00 09 02 00 +T 90 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 4D +R 00 00 01 00 02 04 00 00 +T 99 00 00 00 44 21 00 00 CD 00 00 00 00 38 3F +R 00 00 01 00 02 09 07 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 DD CB FF 7E 28 11 +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 21 00 00 39 7E DD 86 08 77 23 7E +R 00 00 01 00 +T B3 00 00 00 DD 8E 09 77 18 26 +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 21 04 00 39 7E DD 96 08 77 23 7E +R 00 00 01 00 +T C4 00 00 00 DD 9E 09 77 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T CF 00 00 00 DD 4E FA DD 46 FB DD 5E F6 DD 56 +R 00 00 01 00 +T DA 00 00 00 F7 CD 7E 02 00 00 E1 +R 00 00 01 00 00 06 01 00 +T DF 00 00 00 +R 00 00 01 00 +T DF 00 00 00 18 8B +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 DD 4E F8 DD 46 F9 DD 6E FC DD 66 +R 00 00 01 00 +T EC 00 00 00 FD A7 ED 42 D2 E9 01 00 00 +R 00 00 01 00 00 09 01 00 +T F3 00 00 00 +R 00 00 01 00 +T F3 00 00 00 DD 4E FC DD 46 FD DD 5E F8 DD 56 +R 00 00 01 00 +T FE 00 00 00 F9 3A 02 00 00 00 2A 00 00 00 00 +R 00 00 01 00 00 06 02 00 00 0B 02 00 +T 05 01 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 00 00 +T 0E 01 00 00 CB 7C CA A7 01 00 00 +R 00 00 01 00 00 07 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 4E FA DD 46 FB DD 6E F6 DD 66 +R 00 00 01 00 +T 1E 01 00 00 F7 A7 ED 42 30 38 +R 00 00 01 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 DD 6E 08 DD 66 09 E5 DD 4E F8 DD +R 00 00 01 00 +T 2F 01 00 00 46 F9 DD 5E F6 DD 56 F7 CD +R 00 00 01 00 +T 38 01 00 00 7E 02 00 00 E1 21 00 00 39 7E DD +R 00 00 01 00 00 04 01 00 +T 41 01 00 00 86 08 77 23 7E DD 8E 09 77 21 +R 00 00 01 00 +T 4B 01 00 00 02 00 39 7E DD 96 08 77 23 7E DD +R 00 00 01 00 +T 56 01 00 00 9E 09 77 C3 6C 00 00 00 +R 00 00 01 00 00 08 01 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 21 06 00 39 7E DD 86 08 77 23 7E +R 00 00 01 00 +T 67 01 00 00 DD 8E 09 77 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T 72 01 00 00 DD 6E F8 DD 66 F9 E5 DD 4E FC DD +R 00 00 01 00 +T 7D 01 00 00 46 FD DD 5E F6 DD 56 F7 CD +R 00 00 01 00 +T 86 01 00 00 CE 02 00 00 E1 E1 21 04 00 39 7E +R 00 00 01 00 00 04 01 00 +T 8F 01 00 00 DD 86 08 77 23 7E DD 8E 09 77 DD +R 00 00 01 00 +T 9A 01 00 00 6E FA DD 66 FB DD 75 F6 DD 74 F7 +R 00 00 01 00 +T A5 01 00 00 18 3F +R 00 00 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 DD 7E FE DD B6 FF 20 28 +R 00 00 01 00 +T AF 01 00 00 +R 00 00 01 00 +T AF 01 00 00 21 06 00 39 7E DD 86 08 77 23 7E +R 00 00 01 00 +T BA 01 00 00 DD 8E 09 77 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T C5 01 00 00 DD 4E FC DD 46 FD DD 5E F8 DD 56 +R 00 00 01 00 +T D0 01 00 00 F9 CD 7E 02 00 00 E1 18 0F +R 00 00 01 00 00 06 01 00 +T D7 01 00 00 +R 00 00 01 00 +T D7 01 00 00 21 02 00 39 7E DD 96 08 77 23 7E +R 00 00 01 00 +T E2 01 00 00 DD 9E 09 77 +R 00 00 01 00 +T E6 01 00 00 +R 00 00 01 00 +T E6 01 00 00 +R 00 00 01 00 +T E6 01 00 00 C3 E1 00 00 00 +R 00 00 01 00 00 05 01 00 +T E9 01 00 00 +R 00 00 01 00 +T E9 01 00 00 DD 4E FA DD 46 FB DD 6E F6 DD 66 +R 00 00 01 00 +T F4 01 00 00 F7 A7 ED 42 30 4C +R 00 00 01 00 +T FA 01 00 00 +R 00 00 01 00 +T FA 01 00 00 21 04 00 39 7E DD 96 08 77 23 7E +R 00 00 01 00 +T 05 02 00 00 DD 9E 09 77 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T 10 02 00 00 DD 6E F6 DD 66 F7 E5 DD 4E FA DD +R 00 00 01 00 +T 1B 02 00 00 46 FB DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 24 02 00 00 CE 02 00 00 E1 E1 21 06 00 39 7E +R 00 00 01 00 00 04 01 00 +T 2D 02 00 00 DD 96 08 77 23 7E DD 9E 09 77 DD +R 00 00 01 00 +T 38 02 00 00 6E FC DD 66 FD DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 43 02 00 00 C3 6C 00 00 00 +R 00 00 01 00 00 05 01 00 +T 46 02 00 00 +R 00 00 01 00 +T 46 02 00 00 DD 6E 08 DD 66 09 E5 DD 4E 08 DD +R 00 00 01 00 +T 51 02 00 00 46 09 DD 6E FA DD 66 FB A7 ED 42 +R 00 00 01 00 +T 5C 02 00 00 4D 44 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 65 02 00 00 00 00 00 00 E1 DD 6E 08 DD 66 09 +R 00 00 01 00 00 04 01 00 +T 6E 02 00 00 DD 4E FC DD 46 FD 09 DD 75 02 DD +R 00 00 01 00 +T 79 02 00 00 74 03 C3 05 00 00 00 +R 00 00 01 00 00 07 01 00 +T 7E 02 00 00 +R 00 00 01 00 +T 7E 02 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 05 00 +T 83 02 00 00 +R 00 00 01 00 +T 83 02 00 00 +R 00 00 01 00 +T 83 02 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 8E 02 00 00 74 09 23 7D B4 28 36 +R 00 00 01 00 +T 95 02 00 00 +R 00 00 01 00 +T 95 02 00 00 DD 6E 02 DD 66 03 4E 06 00 DD 71 +R 00 00 01 00 +T A0 02 00 00 FE DD 70 FF DD 6E 04 DD 66 05 56 +R 00 00 01 00 +T AB 02 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T B6 02 00 00 74 03 2B 72 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T C1 02 00 00 DD 75 04 DD 74 05 2B 71 18 B8 +R 00 00 01 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T CE 02 00 00 +R 00 00 01 00 +T CE 02 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 05 00 +T D3 02 00 00 +R 00 00 01 00 +T D3 02 00 00 +R 00 00 01 00 +T D3 02 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T DE 02 00 00 74 0B 23 7D B4 28 4C +R 00 00 01 00 +T E5 02 00 00 +R 00 00 01 00 +T E5 02 00 00 DD 6E 02 DD 66 03 4E 06 00 DD 71 +R 00 00 01 00 +T F0 02 00 00 FE DD 70 FF DD 6E 08 DD 66 09 56 +R 00 00 01 00 +T FB 02 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 06 03 00 00 74 03 2B 72 DD 6E 04 DD 66 05 56 +R 00 00 01 00 +T 11 03 00 00 DD 6E 08 DD 66 09 23 DD 75 08 DD +R 00 00 01 00 +T 1C 03 00 00 74 09 2B 72 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T 27 03 00 00 DD 75 04 DD 74 05 2B 71 18 A2 +R 00 00 01 00 +T 31 03 00 00 +R 00 00 01 00 +T 31 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 34 03 00 00 +R 00 00 01 00 +T 34 03 00 00 CD 00 00 00 00 79 B0 20 02 +R 00 00 01 00 02 05 04 00 +T 3B 03 00 00 +R 00 00 01 00 +T 3B 03 00 00 18 3F +R 00 00 01 00 +T 3D 03 00 00 +R 00 00 01 00 +T 3D 03 00 00 DD 46 0E DD 6E 0C DD 66 0D ED 43 +R 00 00 01 00 +T 48 03 00 00 01 00 00 00 22 00 00 00 00 DD 6E +R 00 00 01 00 00 04 02 00 00 09 02 00 +T 4F 03 00 00 0A DD 66 0B E5 21 FF FF DD 4E 04 +R 00 00 01 00 +T 5A 03 00 00 DD 46 05 09 4D 44 DD 5E 0A DD 56 +R 00 00 01 00 +T 65 03 00 00 0B CD 00 00 00 00 DD 6E 02 DD 66 +R 00 00 01 00 02 06 06 00 +T 6E 03 00 00 03 19 4D 44 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 79 03 00 00 00 00 00 00 E1 +R 00 00 01 00 00 04 01 00 +T 7C 03 00 00 +R 00 00 01 00 +T 7C 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/rand.rel b/src/nos/lib/crt_banked_lib/rand.rel new file mode 100644 index 00000000..e1e44290 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/rand.rel @@ -0,0 +1,126 @@ +XL4 +H 4 areas A global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?US_MOD_L02 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13E flags 0 +S _srand Def000000F8 +S _rand Def00000000 +A IDATA0 size 6 flags 0 +A CDATA0 size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 01 CE 00 ED +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 5B 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 00 05 02 00 02 0A 06 00 +T 10 00 00 00 73 FE DD 72 FF 01 1F 00 CD +R 00 00 01 00 +T 19 00 00 00 00 00 00 00 D5 01 CE 00 DD 5E FE +R 00 00 01 00 02 04 04 00 +T 22 00 00 00 DD 56 FF CD 00 00 00 00 2A +R 00 00 01 00 02 08 04 00 +T 29 00 00 00 00 00 00 00 A7 ED 52 4D 44 11 +R 00 00 01 00 00 04 02 00 +T 31 00 00 00 9D 00 CD 00 00 00 00 EB D1 A7 ED +R 00 00 01 00 02 07 04 00 +T 3A 00 00 00 52 22 00 00 00 00 CB 7C 28 0B +R 00 00 01 00 00 06 02 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 21 6B 7E ED 4B 00 00 00 00 09 22 +R 00 00 01 00 00 09 02 00 +T 4B 00 00 00 00 00 00 00 +R 00 00 01 00 00 04 02 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 01 D9 00 ED 5B 02 00 00 00 CD +R 00 00 01 00 00 09 02 00 +T 55 00 00 00 00 00 00 00 DD 73 FE DD 72 FF 01 +R 00 00 01 00 02 04 06 00 +T 5E 00 00 00 2D 00 CD 00 00 00 00 D5 01 D9 00 +R 00 00 01 00 02 07 04 00 +T 67 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 70 00 00 00 2A 02 00 00 00 A7 ED 52 4D 44 11 +R 00 00 01 00 00 05 02 00 +T 79 00 00 00 92 00 CD 00 00 00 00 EB D1 A7 ED +R 00 00 01 00 02 07 04 00 +T 82 00 00 00 52 22 02 00 00 00 CB 7C 28 0B +R 00 00 01 00 00 06 02 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 EF 7B ED 4B 02 00 00 00 09 22 +R 00 00 01 00 00 09 02 00 +T 93 00 00 00 02 00 00 00 +R 00 00 01 00 00 04 02 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 01 DE 00 ED 5B 04 00 00 00 CD +R 00 00 01 00 00 09 02 00 +T 9D 00 00 00 00 00 00 00 DD 73 FE DD 72 FF 01 +R 00 00 01 00 02 04 06 00 +T A6 00 00 00 85 00 CD 00 00 00 00 D5 01 DE 00 +R 00 00 01 00 02 07 04 00 +T AF 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T B8 00 00 00 2A 04 00 00 00 A7 ED 52 4D 44 11 +R 00 00 01 00 00 05 02 00 +T C1 00 00 00 8E 00 CD 00 00 00 00 EB D1 A7 ED +R 00 00 01 00 02 07 04 00 +T CA 00 00 00 52 22 04 00 00 00 CB 7C 28 0B +R 00 00 01 00 00 06 02 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 21 A9 7B ED 4B 04 00 00 00 09 22 +R 00 00 01 00 00 09 02 00 +T DB 00 00 00 04 00 00 00 +R 00 00 01 00 00 04 02 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 2A 00 00 00 00 ED 4B 02 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 02 00 +T E4 00 00 00 7D A9 5F 7C A8 57 2A 04 00 00 00 +R 00 00 01 00 00 0B 02 00 +T ED 00 00 00 7B AD 4F 7A AC 47 69 60 C3 +R 00 00 01 00 +T F6 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 CD 00 00 00 00 21 02 00 39 7E E6 +R 00 00 01 00 02 05 02 00 +T 01 01 00 00 FF 77 23 7E E6 7F 77 01 6A 7E DD +R 00 00 01 00 +T 0C 01 00 00 5E 02 DD 56 03 CD 00 00 00 00 13 +R 00 00 01 00 02 0A 05 00 +T 15 01 00 00 ED 53 00 00 00 00 01 EE 7B DD 5E +R 00 00 01 00 00 06 02 00 +T 1E 01 00 00 02 DD 56 03 CD 00 00 00 00 13 ED +R 00 00 01 00 02 09 05 00 +T 27 01 00 00 53 02 00 00 00 01 A8 7B DD 5E 02 +R 00 00 01 00 00 05 02 00 +T 30 01 00 00 DD 56 03 CD 00 00 00 00 13 ED 53 +R 00 00 01 00 02 08 05 00 +T 39 01 00 00 04 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 04 02 00 02 09 00 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 00 00 00 00 01 00 01 00 01 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/readdir.rel b/src/nos/lib/crt_banked_lib/readdir.rel new file mode 100644 index 00000000..65981d5b --- /dev/null +++ b/src/nos/lib/crt_banked_lib/readdir.rel @@ -0,0 +1,94 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strncpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E3 flags 0 +S _readdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EE FF DD 7E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 B6 03 28 1A 21 06 00 DD 4E 02 DD +R 00 00 01 00 +T 14 00 00 00 46 03 09 7E 23 B6 28 0B DD 6E 02 +R 00 00 01 00 +T 1F 00 00 00 DD 66 03 7E 23 B6 20 0C +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 21 0E 00 22 00 00 00 00 +R 00 00 01 00 02 08 06 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 C3 E0 00 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 DD 36 F0 00 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 7E F0 B7 20 26 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 10 00 E5 21 02 00 39 4D 44 DD +R 00 00 01 00 +T 48 00 00 00 6E 02 DD 66 03 5E 23 56 3E +R 00 00 01 00 +T 51 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 56 00 00 00 00 00 00 00 F1 3E 10 AD B4 28 02 +R 00 00 01 00 02 04 00 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 18 CC +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 18 D4 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 6E 00 00 00 23 66 6A DD 75 FE DD 74 FF DD 5E +R 00 00 01 00 +T 79 00 00 00 EE DD 56 EF 73 23 72 DD 6E FE DD +R 00 00 01 00 +T 84 00 00 00 66 FF 23 23 E5 69 60 23 23 4E 23 +R 00 00 01 00 +T 8F 00 00 00 46 03 70 2B 71 0B E1 71 23 70 21 +R 00 00 01 00 +T 9A 00 00 00 0E 00 E5 21 02 00 39 01 02 00 09 +R 00 00 01 00 +T A5 00 00 00 4D 44 21 06 00 DD 5E FE DD 56 FF +R 00 00 01 00 +T B0 00 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T B5 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T BC 00 00 00 14 00 DD 4E FE DD 46 FF 09 36 00 +R 00 00 01 00 +T C7 00 00 00 21 04 00 09 E5 21 06 00 09 EB 3E +R 00 00 01 00 +T D2 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T D7 00 00 00 00 00 00 00 EB E1 73 23 72 69 60 +R 00 00 01 00 02 04 00 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_banked_lib/readlink.rel b/src/nos/lib/crt_banked_lib/readlink.rel new file mode 100644 index 00000000..539e6eec --- /dev/null +++ b/src/nos/lib/crt_banked_lib/readlink.rel @@ -0,0 +1,49 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _close Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 62 flags 0 +S _readlink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 00 08 E5 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 16 00 00 00 00 00 00 00 F1 F1 DD 75 FE DD 74 +R 00 00 01 00 02 04 00 00 +T 1F 00 00 00 FF CB 7C 28 05 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 21 FF FF 18 36 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 34 00 00 00 46 05 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 3D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 42 00 00 00 00 00 00 00 F1 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 00 00 +T 4B 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 53 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 5A 00 00 00 6E FC DD 66 FD +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/realloc.rel b/src/nos/lib/crt_banked_lib/realloc.rel new file mode 100644 index 00000000..6441d5ca --- /dev/null +++ b/src/nos/lib/crt_banked_lib/realloc.rel @@ -0,0 +1,61 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8E flags 0 +S _realloc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 FC FF DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 5E 02 DD 56 03 19 7E 23 66 6F 01 +R 00 00 01 00 +T 14 00 00 00 FF FF 09 29 29 DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 25 00 00 00 00 00 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 02 04 00 00 +T 2E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 33 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 00 00 +T 3C 00 00 00 B4 28 46 DD 6E 02 DD 66 03 DD 4E +R 00 00 01 00 +T 47 00 00 00 FC DD 46 FD A7 ED 42 28 35 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 5B 00 00 00 FF A7 ED 42 30 08 DD 6E FE DD 66 +R 00 00 01 00 +T 66 00 00 00 FF 18 06 +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 E5 DD 4E 02 DD 46 03 DD 5E FC DD +R 00 00 01 00 +T 7A 00 00 00 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 7F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_banked_lib/regerror.rel b/src/nos/lib/crt_banked_lib/regerror.rel new file mode 100644 index 00000000..7325be74 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/regerror.rel @@ -0,0 +1,34 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _stderr Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fprintf Ref00000000 +S _exit Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S _regerror Def00000000 +A CSTR size E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D5 21 00 00 00 00 +R 00 00 01 00 02 05 04 00 00 0B 02 00 +T 07 00 00 00 E5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 02 00 +T 0D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 12 00 00 00 00 00 00 00 F1 F1 F1 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 1B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 20 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 65 67 65 78 70 28 33 29 3A 20 +R 00 00 02 00 +T 0B 00 00 00 25 73 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/regexp.rel b/src/nos/lib/crt_banked_lib/regexp.rel new file mode 100644 index 00000000..9dbc5c6c --- /dev/null +++ b/src/nos/lib/crt_banked_lib/regexp.rel @@ -0,0 +1,2217 @@ +XL4 +H 4 areas 15 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strncmp Ref00000000 +S _strcspn Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _regerror Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 135D flags 0 +S _regexec Def00000BF6 +S _regcomp Def00000000 +A CSTR size 132 flags 0 +A UDATA0 size 13 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 7E 02 DD +R 00 00 01 00 02 05 0D 00 +T 09 00 00 00 B6 03 20 11 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 13 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 19 00 00 00 00 00 C3 FC 01 00 00 +R 00 00 01 00 00 07 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 6E 02 DD 66 03 22 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 27 00 00 00 21 01 00 22 02 00 00 00 01 00 00 +R 00 00 01 00 00 08 03 00 +T 30 00 00 00 21 00 00 22 07 00 00 00 ED 43 +R 00 00 01 00 00 08 03 00 +T 38 00 00 00 09 00 00 00 21 04 00 00 00 22 +R 00 00 01 00 00 04 03 00 00 09 03 00 +T 3E 00 00 00 05 00 00 00 11 9C 00 CD +R 00 00 01 00 00 04 03 00 +T 44 00 00 00 47 0A 00 00 21 08 00 39 4D 44 11 +R 00 00 01 00 00 04 01 00 +T 4D 00 00 00 00 00 CD FF 01 00 00 7D B4 20 06 +R 00 00 01 00 00 07 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 21 00 00 C3 FC 01 00 00 +R 00 00 01 00 00 08 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 21 00 00 E5 21 FF 7F E5 ED 4B +R 00 00 01 00 +T 66 00 00 00 09 00 00 00 2A 07 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 09 03 00 +T 6C 00 00 00 00 00 00 00 38 11 +R 00 00 01 00 02 04 0C 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 11 0E 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 76 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 7C 00 00 00 00 00 C3 FC 01 00 00 +R 00 00 01 00 00 07 01 00 +T 81 00 00 00 +R 00 00 01 00 +T 81 00 00 00 2A 07 00 00 00 01 2F 00 09 EB 3E +R 00 00 01 00 00 05 03 00 +T 8A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 8F 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 7D +R 00 00 01 00 02 04 00 00 +T 98 00 00 00 B4 20 11 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 11 1D 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T A1 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T A7 00 00 00 00 00 C3 FC 01 00 00 +R 00 00 01 00 00 07 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 DD 6E 02 DD 66 03 22 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T B5 00 00 00 21 01 00 22 02 00 00 00 21 2E 00 +R 00 00 01 00 00 08 03 00 +T BE 00 00 00 DD 4E F6 DD 46 F7 09 22 +R 00 00 01 00 +T C6 00 00 00 05 00 00 00 11 9C 00 CD +R 00 00 01 00 00 04 03 00 +T CC 00 00 00 47 0A 00 00 21 08 00 39 4D 44 11 +R 00 00 01 00 00 04 01 00 +T D5 00 00 00 00 00 CD FF 01 00 00 7D B4 20 06 +R 00 00 01 00 00 07 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 21 00 00 C3 FC 01 00 00 +R 00 00 01 00 00 08 01 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 21 28 00 DD 4E F6 DD 46 F7 09 36 +R 00 00 01 00 +T EF 00 00 00 00 21 29 00 09 36 00 21 2A 00 09 +R 00 00 01 00 +T FA 00 00 00 AF 77 23 77 21 2C 00 09 AF 77 23 +R 00 00 01 00 +T 05 01 00 00 77 21 2E 00 09 23 DD 75 F8 DD 74 +R 00 00 01 00 +T 10 01 00 00 F9 EB CD E9 12 00 00 7E B7 C2 +R 00 00 01 00 00 07 01 00 +T 18 01 00 00 F6 01 00 00 +R 00 00 01 00 00 04 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 DD 6E F8 DD 66 F9 23 23 23 DD 75 +R 00 00 01 00 +T 25 01 00 00 F8 DD 74 F9 7E FE 08 20 17 +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 DD 6E F8 DD 66 F9 23 23 23 46 21 +R 00 00 01 00 +T 39 01 00 00 28 00 DD 5E F6 DD 56 F7 19 70 18 +R 00 00 01 00 +T 44 01 00 00 15 +R 00 00 01 00 +T 45 01 00 00 +R 00 00 01 00 +T 45 01 00 00 DD 6E F8 DD 66 F9 46 05 20 0B +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 21 29 00 DD 4E F6 DD 46 F7 09 34 +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 DD 7E FE E6 04 CA F6 01 00 00 +R 00 00 01 00 00 0A 01 00 +T 62 01 00 00 +R 00 00 01 00 +T 62 01 00 00 AF DD 77 FA DD 77 FB AF DD 77 FC +R 00 00 01 00 +T 6D 01 00 00 DD 77 FD +R 00 00 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 DD 7E F8 DD B6 F9 28 5E +R 00 00 01 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 DD 6E F8 DD 66 F9 7E FE 08 20 42 +R 00 00 01 00 +T 83 01 00 00 DD 5E F8 DD 56 F9 13 13 13 3E +R 00 00 01 00 +T 8D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 92 01 00 00 00 00 00 00 DD 4E FC DD 46 FD A7 +R 00 00 01 00 02 04 00 00 +T 9B 01 00 00 ED 42 38 26 +R 00 00 01 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 DD 6E F8 DD 66 F9 23 23 23 DD 75 +R 00 00 01 00 +T AA 01 00 00 FA DD 74 FB DD 5E F8 DD 56 F9 13 +R 00 00 01 00 +T B5 01 00 00 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T BA 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T C1 01 00 00 FC DD 74 FD +R 00 00 01 00 +T C5 01 00 00 +R 00 00 01 00 +T C5 01 00 00 DD 5E F8 DD 56 F9 CD E9 12 00 00 +R 00 00 01 00 00 0B 01 00 +T CE 01 00 00 DD 75 F8 DD 74 F9 18 9A +R 00 00 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 21 2A 00 DD 4E F6 DD 46 F7 09 DD +R 00 00 01 00 +T E1 01 00 00 5E FA DD 56 FB 73 23 72 21 2C 00 +R 00 00 01 00 +T EC 01 00 00 09 DD 4E FC DD 46 FD 71 23 70 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 DD 6E F6 DD 66 F7 +R 00 00 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T FF 01 00 00 +R 00 00 01 00 +T FF 01 00 00 CD 00 00 00 00 F6 FF 69 60 36 01 +R 00 00 01 00 02 05 0D 00 +T 08 02 00 00 23 36 00 DD 7E 02 DD B6 03 28 40 +R 00 00 01 00 +T 13 02 00 00 +R 00 00 01 00 +T 13 02 00 00 01 0A 80 2A 02 00 00 00 3E 80 AC +R 00 00 01 00 00 08 03 00 +T 1C 02 00 00 67 ED 42 38 11 +R 00 00 01 00 +T 21 02 00 00 +R 00 00 01 00 +T 21 02 00 00 11 2A 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 27 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 2D 02 00 00 00 00 C3 FD 03 00 00 +R 00 00 01 00 00 07 01 00 +T 32 02 00 00 +R 00 00 01 00 +T 32 02 00 00 2A 02 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 00 05 03 00 +T 3B 02 00 00 ED 4B 02 00 00 00 03 ED 43 +R 00 00 01 00 00 06 03 00 +T 42 02 00 00 02 00 00 00 7D C6 14 5F CD +R 00 00 01 00 00 04 03 00 +T 49 02 00 00 D3 09 00 00 DD 75 F6 DD 74 F7 18 +R 00 00 01 00 00 04 01 00 +T 52 02 00 00 07 +R 00 00 01 00 +T 53 02 00 00 +R 00 00 01 00 +T 53 02 00 00 AF DD 77 F6 DD 77 F7 +R 00 00 01 00 +T 5A 02 00 00 +R 00 00 01 00 +T 5A 02 00 00 21 08 00 39 5D 54 CD 00 04 00 00 +R 00 00 01 00 00 0B 01 00 +T 63 02 00 00 DD 75 F8 DD 74 F9 7D B4 20 06 +R 00 00 01 00 +T 6D 02 00 00 +R 00 00 01 00 +T 6D 02 00 00 21 00 00 C3 FD 03 00 00 +R 00 00 01 00 00 08 01 00 +T 73 02 00 00 +R 00 00 01 00 +T 73 02 00 00 DD 7E F6 DD B6 F7 28 11 +R 00 00 01 00 +T 7B 02 00 00 +R 00 00 01 00 +T 7B 02 00 00 DD 4E F8 DD 46 F9 DD 5E F6 DD 56 +R 00 00 01 00 +T 86 02 00 00 F7 CD 1C 0B 00 00 18 0C +R 00 00 01 00 00 06 01 00 +T 8C 02 00 00 +R 00 00 01 00 +T 8C 02 00 00 DD 6E F8 DD 66 F9 DD 75 F6 DD 74 +R 00 00 01 00 +T 97 02 00 00 F7 +R 00 00 01 00 +T 98 02 00 00 +R 00 00 01 00 +T 98 02 00 00 DD 7E FE E6 01 47 DD 7E FF E6 00 +R 00 00 01 00 +T A3 02 00 00 B0 20 0F +R 00 00 01 00 +T A6 02 00 00 +R 00 00 01 00 +T A6 02 00 00 DD 6E 04 DD 66 05 7E E6 FE 77 23 +R 00 00 01 00 +T B1 02 00 00 7E E6 FF 77 +R 00 00 01 00 +T B5 02 00 00 +R 00 00 01 00 +T B5 02 00 00 DD 7E FE E6 04 4F DD 7E FF E6 00 +R 00 00 01 00 +T C0 02 00 00 47 DD 6E 04 DD 66 05 7E B1 77 23 +R 00 00 01 00 +T CB 02 00 00 7E B0 77 +R 00 00 01 00 +T CE 02 00 00 +R 00 00 01 00 +T CE 02 00 00 2A 00 00 00 00 7E FE 7C 20 67 +R 00 00 01 00 00 05 03 00 +T D6 02 00 00 +R 00 00 01 00 +T D6 02 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T DD 02 00 00 21 08 00 39 5D 54 CD 00 04 00 00 +R 00 00 01 00 00 0B 01 00 +T E6 02 00 00 DD 75 F8 DD 74 F9 7D B4 20 06 +R 00 00 01 00 +T F0 02 00 00 +R 00 00 01 00 +T F0 02 00 00 21 00 00 C3 FD 03 00 00 +R 00 00 01 00 00 08 01 00 +T F6 02 00 00 +R 00 00 01 00 +T F6 02 00 00 DD 4E F8 DD 46 F9 DD 5E F6 DD 56 +R 00 00 01 00 +T 01 03 00 00 F7 CD 1C 0B 00 00 DD 7E FE E6 01 +R 00 00 01 00 00 06 01 00 +T 0A 03 00 00 47 DD 7E FF E6 00 B0 20 0F +R 00 00 01 00 +T 13 03 00 00 +R 00 00 01 00 +T 13 03 00 00 DD 6E 04 DD 66 05 7E E6 FE 77 23 +R 00 00 01 00 +T 1E 03 00 00 7E E6 FF 77 +R 00 00 01 00 +T 22 03 00 00 +R 00 00 01 00 +T 22 03 00 00 DD 7E FE E6 04 4F DD 7E FF E6 00 +R 00 00 01 00 +T 2D 03 00 00 47 DD 6E 04 DD 66 05 7E B1 77 23 +R 00 00 01 00 +T 38 03 00 00 7E B0 77 18 91 +R 00 00 01 00 +T 3D 03 00 00 +R 00 00 01 00 +T 3D 03 00 00 DD 7E 02 DD B6 03 28 08 DD 7E FC +R 00 00 01 00 +T 48 03 00 00 C6 1E 5F 18 02 +R 00 00 01 00 +T 4D 03 00 00 +R 00 00 01 00 +T 4D 03 00 00 1E 00 +R 00 00 01 00 +T 4F 03 00 00 +R 00 00 01 00 +T 4F 03 00 00 CD D3 09 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 00 05 01 00 +T 58 03 00 00 4D 44 DD 5E F6 DD 56 F7 CD +R 00 00 01 00 +T 61 03 00 00 1C 0B 00 00 DD 6E F6 DD 66 F7 DD +R 00 00 01 00 00 04 01 00 +T 6A 03 00 00 75 F8 DD 74 F9 +R 00 00 01 00 +T 6F 03 00 00 +R 00 00 01 00 +T 6F 03 00 00 DD 7E F8 DD B6 F9 28 20 +R 00 00 01 00 +T 77 03 00 00 +R 00 00 01 00 +T 77 03 00 00 DD 4E FA DD 46 FB DD 5E F8 DD 56 +R 00 00 01 00 +T 82 03 00 00 F9 CD BF 0B 00 00 DD 5E F8 DD 56 +R 00 00 01 00 00 06 01 00 +T 8B 03 00 00 F9 CD E9 12 00 00 DD 75 F8 DD 74 +R 00 00 01 00 00 06 01 00 +T 94 03 00 00 F9 18 D8 +R 00 00 01 00 +T 97 03 00 00 +R 00 00 01 00 +T 97 03 00 00 DD 7E 02 DD B6 03 28 1F 2A +R 00 00 01 00 +T A0 03 00 00 00 00 00 00 23 22 00 00 00 00 2B +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T A7 03 00 00 7E FE 29 28 12 +R 00 00 01 00 +T AC 03 00 00 +R 00 00 01 00 +T AC 03 00 00 +R 00 00 01 00 +T AC 03 00 00 +R 00 00 01 00 +T AC 03 00 00 11 36 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T B2 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T B8 03 00 00 00 00 18 41 18 39 +R 00 00 01 00 +T BE 03 00 00 +R 00 00 01 00 +T BE 03 00 00 DD 7E 02 DD B6 03 20 31 2A +R 00 00 01 00 +T C7 03 00 00 00 00 00 00 AF B6 28 2A +R 00 00 01 00 00 04 03 00 +T CD 03 00 00 +R 00 00 01 00 +T CD 03 00 00 +R 00 00 01 00 +T CD 03 00 00 +R 00 00 01 00 +T CD 03 00 00 2A 00 00 00 00 7E FE 29 20 12 +R 00 00 01 00 00 05 03 00 +T D5 03 00 00 +R 00 00 01 00 +T D5 03 00 00 11 36 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T DB 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T E1 03 00 00 00 00 18 18 18 10 +R 00 00 01 00 +T E7 03 00 00 +R 00 00 01 00 +T E7 03 00 00 11 43 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T ED 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T F3 03 00 00 00 00 18 06 +R 00 00 01 00 +T F7 03 00 00 +R 00 00 01 00 +T F7 03 00 00 +R 00 00 01 00 +T F7 03 00 00 +R 00 00 01 00 +T F7 03 00 00 DD 6E F6 DD 66 F7 +R 00 00 01 00 +T FD 03 00 00 +R 00 00 01 00 +T FD 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 00 04 00 00 +R 00 00 01 00 +T 00 04 00 00 CD 00 00 00 00 F8 FF DD 6E 02 DD +R 00 00 01 00 02 05 0D 00 +T 09 04 00 00 66 03 AF 77 23 77 1E 06 CD +R 00 00 01 00 +T 12 04 00 00 D3 09 00 00 DD 75 F8 DD 74 F9 AF +R 00 00 01 00 00 04 01 00 +T 1B 04 00 00 DD 77 FA DD 77 FB +R 00 00 01 00 +T 21 04 00 00 +R 00 00 01 00 +T 21 04 00 00 2A 00 00 00 00 AF B6 CA +R 00 00 01 00 00 05 03 00 +T 27 04 00 00 AB 04 00 00 2A 00 00 00 00 7E FE +R 00 00 01 00 00 04 01 00 00 09 03 00 +T 2E 04 00 00 7C 28 7A 2A 00 00 00 00 7E FE 29 +R 00 00 01 00 00 08 03 00 +T 37 04 00 00 28 72 +R 00 00 01 00 +T 39 04 00 00 +R 00 00 01 00 +T 39 04 00 00 +R 00 00 01 00 +T 39 04 00 00 +R 00 00 01 00 +T 39 04 00 00 21 06 00 39 5D 54 CD C1 04 00 00 +R 00 00 01 00 00 0B 01 00 +T 42 04 00 00 DD 75 FC DD 74 FD 7D B4 20 05 +R 00 00 01 00 +T 4C 04 00 00 +R 00 00 01 00 +T 4C 04 00 00 21 00 00 18 6D +R 00 00 01 00 +T 51 04 00 00 +R 00 00 01 00 +T 51 04 00 00 DD 7E FE E6 01 4F DD 7E FF E6 00 +R 00 00 01 00 +T 5C 04 00 00 47 DD 6E 02 DD 66 03 7E B1 77 23 +R 00 00 01 00 +T 67 04 00 00 7E B0 77 DD 7E FA DD B6 FB 20 1B +R 00 00 01 00 +T 72 04 00 00 +R 00 00 01 00 +T 72 04 00 00 DD 7E FE E6 04 4F DD 7E FF E6 00 +R 00 00 01 00 +T 7D 04 00 00 47 DD 6E 02 DD 66 03 7E B1 77 23 +R 00 00 01 00 +T 88 04 00 00 7E B0 77 18 0F +R 00 00 01 00 +T 8D 04 00 00 +R 00 00 01 00 +T 8D 04 00 00 DD 4E FC DD 46 FD DD 5E FA DD 56 +R 00 00 01 00 +T 98 04 00 00 FB CD 1C 0B 00 00 +R 00 00 01 00 00 06 01 00 +T 9C 04 00 00 +R 00 00 01 00 +T 9C 04 00 00 DD 6E FC DD 66 FD DD 75 FA DD 74 +R 00 00 01 00 +T A7 04 00 00 FB C3 21 04 00 00 +R 00 00 01 00 00 06 01 00 +T AB 04 00 00 +R 00 00 01 00 +T AB 04 00 00 DD 7E FA DD B6 FB 20 05 +R 00 00 01 00 +T B3 04 00 00 +R 00 00 01 00 +T B3 04 00 00 1E 09 CD D3 09 00 00 +R 00 00 01 00 00 07 01 00 +T B8 04 00 00 +R 00 00 01 00 +T B8 04 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 +T BE 04 00 00 +R 00 00 01 00 +T BE 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T C1 04 00 00 +R 00 00 01 00 +T C1 04 00 00 CD 00 00 00 00 F8 FF 21 05 00 39 +R 00 00 01 00 02 05 0D 00 +T CA 04 00 00 5D 54 CD AC 06 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T D3 04 00 00 74 F9 7D B4 20 06 +R 00 00 01 00 +T D9 04 00 00 +R 00 00 01 00 +T D9 04 00 00 21 00 00 C3 A9 06 00 00 +R 00 00 01 00 00 08 01 00 +T DF 04 00 00 +R 00 00 01 00 +T DF 04 00 00 2A 00 00 00 00 46 DD 70 FA 78 FE +R 00 00 01 00 00 05 03 00 +T E8 04 00 00 2A 28 28 DD 7E FA FE 2B 28 21 DD +R 00 00 01 00 +T F3 04 00 00 7E FA FE 3F 28 1A +R 00 00 01 00 +T F9 04 00 00 +R 00 00 01 00 +T F9 04 00 00 DD 6E FD DD 66 FE E5 DD 6E 02 DD +R 00 00 01 00 +T 04 05 00 00 66 03 C1 71 23 70 DD 6E F8 DD 66 +R 00 00 01 00 +T 0F 05 00 00 F9 C3 A9 06 00 00 +R 00 00 01 00 00 06 01 00 +T 13 05 00 00 +R 00 00 01 00 +T 13 05 00 00 DD 7E FD E6 01 47 DD 7E FE E6 00 +R 00 00 01 00 +T 1E 05 00 00 B0 20 18 DD 7E FA FE 3F 28 11 +R 00 00 01 00 +T 28 05 00 00 +R 00 00 01 00 +T 28 05 00 00 +R 00 00 01 00 +T 28 05 00 00 +R 00 00 01 00 +T 28 05 00 00 11 4F 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 2E 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 34 05 00 00 00 00 C3 A9 06 00 00 +R 00 00 01 00 00 07 01 00 +T 39 05 00 00 +R 00 00 01 00 +T 39 05 00 00 DD 7E FA FE 2B 28 05 21 04 00 18 +R 00 00 01 00 +T 44 05 00 00 03 +R 00 00 01 00 +T 45 05 00 00 +R 00 00 01 00 +T 45 05 00 00 21 01 00 +R 00 00 01 00 +T 48 05 00 00 +R 00 00 01 00 +T 48 05 00 00 E5 DD 6E 02 DD 66 03 C1 71 23 70 +R 00 00 01 00 +T 53 05 00 00 DD 7E FA FE 2A 20 15 DD 7E FD E6 +R 00 00 01 00 +T 5E 05 00 00 02 28 0E +R 00 00 01 00 +T 61 05 00 00 +R 00 00 01 00 +T 61 05 00 00 +R 00 00 01 00 +T 61 05 00 00 +R 00 00 01 00 +T 61 05 00 00 DD 4E F8 DD 46 F9 1E 0A CD +R 00 00 01 00 +T 6A 05 00 00 78 0A 00 00 C3 74 06 00 00 +R 00 00 01 00 00 04 01 00 00 09 01 00 +T 6F 05 00 00 +R 00 00 01 00 +T 6F 05 00 00 DD 7E FA FE 2A 20 4D +R 00 00 01 00 +T 76 05 00 00 +R 00 00 01 00 +T 76 05 00 00 DD 4E F8 DD 46 F9 1E 06 CD +R 00 00 01 00 +T 7F 05 00 00 78 0A 00 00 1E 07 CD D3 09 00 00 +R 00 00 01 00 00 04 01 00 00 0B 01 00 +T 86 05 00 00 4D 44 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 8F 05 00 00 BF 0B 00 00 DD 4E F8 DD 46 F9 DD +R 00 00 01 00 00 04 01 00 +T 98 05 00 00 5E F8 DD 56 F9 CD BF 0B 00 00 1E +R 00 00 01 00 00 0A 01 00 +T A1 05 00 00 06 CD D3 09 00 00 4D 44 DD 5E F8 +R 00 00 01 00 00 06 01 00 +T AA 05 00 00 DD 56 F9 CD 1C 0B 00 00 1E 09 CD +R 00 00 01 00 00 08 01 00 +T B3 05 00 00 D3 09 00 00 4D 44 DD 5E F8 DD 56 +R 00 00 01 00 00 04 01 00 +T BC 05 00 00 F9 CD 1C 0B 00 00 C3 74 06 00 00 +R 00 00 01 00 00 06 01 00 00 0B 01 00 +T C3 05 00 00 +R 00 00 01 00 +T C3 05 00 00 DD 7E FA FE 2B 20 15 DD 7E FD E6 +R 00 00 01 00 +T CE 05 00 00 02 28 0E +R 00 00 01 00 +T D1 05 00 00 +R 00 00 01 00 +T D1 05 00 00 +R 00 00 01 00 +T D1 05 00 00 +R 00 00 01 00 +T D1 05 00 00 DD 4E F8 DD 46 F9 1E 0B CD +R 00 00 01 00 +T DA 05 00 00 78 0A 00 00 C3 74 06 00 00 +R 00 00 01 00 00 04 01 00 00 09 01 00 +T DF 05 00 00 +R 00 00 01 00 +T DF 05 00 00 DD 7E FA FE 2B 20 47 +R 00 00 01 00 +T E6 05 00 00 +R 00 00 01 00 +T E6 05 00 00 1E 06 CD D3 09 00 00 DD 75 FB DD +R 00 00 01 00 00 07 01 00 +T EF 05 00 00 74 FC 4D 44 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T FA 05 00 00 1C 0B 00 00 DD 4E F8 DD 46 F9 1E +R 00 00 01 00 00 04 01 00 +T 03 06 00 00 07 CD D3 09 00 00 EB CD +R 00 00 01 00 00 06 01 00 +T 09 06 00 00 1C 0B 00 00 1E 06 CD D3 09 00 00 +R 00 00 01 00 00 04 01 00 00 0B 01 00 +T 10 06 00 00 4D 44 DD 5E FB DD 56 FC CD +R 00 00 01 00 +T 19 06 00 00 1C 0B 00 00 1E 09 CD D3 09 00 00 +R 00 00 01 00 00 04 01 00 00 0B 01 00 +T 20 06 00 00 4D 44 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 29 06 00 00 1C 0B 00 00 18 47 +R 00 00 01 00 00 04 01 00 +T 2D 06 00 00 +R 00 00 01 00 +T 2D 06 00 00 DD 7E FA FE 3F 20 40 +R 00 00 01 00 +T 34 06 00 00 +R 00 00 01 00 +T 34 06 00 00 DD 4E F8 DD 46 F9 1E 06 CD +R 00 00 01 00 +T 3D 06 00 00 78 0A 00 00 1E 06 CD D3 09 00 00 +R 00 00 01 00 00 04 01 00 00 0B 01 00 +T 44 06 00 00 4D 44 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 4D 06 00 00 1C 0B 00 00 1E 09 CD D3 09 00 00 +R 00 00 01 00 00 04 01 00 00 0B 01 00 +T 54 06 00 00 DD 75 FB DD 74 FC 4D 44 DD 5E F8 +R 00 00 01 00 +T 5F 06 00 00 DD 56 F9 CD 1C 0B 00 00 DD 4E FB +R 00 00 01 00 00 08 01 00 +T 68 06 00 00 DD 46 FC DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 72 06 00 00 BF 0B 00 00 +R 00 00 01 00 00 04 01 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 7B 06 00 00 2A 00 00 00 00 7E FE 2A 28 10 2A +R 00 00 01 00 00 05 03 00 +T 84 06 00 00 00 00 00 00 7E FE 2B 28 08 2A +R 00 00 01 00 00 04 03 00 +T 8C 06 00 00 00 00 00 00 7E FE 3F 20 10 +R 00 00 01 00 00 04 03 00 +T 93 06 00 00 +R 00 00 01 00 +T 93 06 00 00 +R 00 00 01 00 +T 93 06 00 00 +R 00 00 01 00 +T 93 06 00 00 11 69 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 99 06 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 9F 06 00 00 00 00 18 06 +R 00 00 01 00 +T A3 06 00 00 +R 00 00 01 00 +T A3 06 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 +T A9 06 00 00 +R 00 00 01 00 +T A9 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T AC 06 00 00 +R 00 00 01 00 +T AC 06 00 00 CD 00 00 00 00 F8 FF DD 6E 02 DD +R 00 00 01 00 02 05 0D 00 +T B5 06 00 00 66 03 AF 77 23 77 2A 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T BE 06 00 00 23 22 00 00 00 00 2B 5E CD +R 00 00 01 00 00 06 03 00 +T C5 06 00 00 00 00 00 00 0C 00 00 24 28 29 2A +R 00 00 01 00 02 04 11 00 +T CE 06 00 00 2B 2E 3F 5B 5C 5E 7C F0 08 00 00 +R 00 00 01 00 00 0B 01 00 +T D7 06 00 00 85 08 00 00 EF 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T DB 06 00 00 A7 08 00 00 28 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T DF 06 00 00 96 08 00 00 0B 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T E3 06 00 00 96 08 00 00 96 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T E7 06 00 00 85 08 00 00 4D 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T EB 06 00 00 FD 06 00 00 85 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T EF 06 00 00 +R 00 00 01 00 +T EF 06 00 00 1E 01 CD D3 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T F8 06 00 00 74 F9 C3 CA 09 00 00 +R 00 00 01 00 00 07 01 00 +T FD 06 00 00 +R 00 00 01 00 +T FD 06 00 00 1E 02 CD D3 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T 06 07 00 00 74 F9 C3 CA 09 00 00 +R 00 00 01 00 00 07 01 00 +T 0B 07 00 00 +R 00 00 01 00 +T 0B 07 00 00 1E 03 CD D3 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T 14 07 00 00 74 F9 DD 6E 02 DD 66 03 7E F6 03 +R 00 00 01 00 +T 1F 07 00 00 77 23 7E F6 00 77 C3 CA 09 00 00 +R 00 00 01 00 00 0B 01 00 +T 28 07 00 00 +R 00 00 01 00 +T 28 07 00 00 2A 00 00 00 00 7E FE 5E 20 14 +R 00 00 01 00 00 05 03 00 +T 30 07 00 00 +R 00 00 01 00 +T 30 07 00 00 1E 05 CD D3 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T 39 07 00 00 74 F9 2A 00 00 00 00 23 22 +R 00 00 01 00 00 07 03 00 +T 40 07 00 00 00 00 00 00 18 0B +R 00 00 01 00 00 04 03 00 +T 44 07 00 00 +R 00 00 01 00 +T 44 07 00 00 1E 04 CD D3 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T 4D 07 00 00 74 F9 +R 00 00 01 00 +T 4F 07 00 00 +R 00 00 01 00 +T 4F 07 00 00 2A 00 00 00 00 7E FE 5D 28 08 2A +R 00 00 01 00 00 05 03 00 +T 58 07 00 00 00 00 00 00 7E FE 2D 20 0E +R 00 00 01 00 00 04 03 00 +T 5F 07 00 00 +R 00 00 01 00 +T 5F 07 00 00 +R 00 00 01 00 +T 5F 07 00 00 +R 00 00 01 00 +T 5F 07 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 66 07 00 00 2B 5E 16 00 CD 47 0A 00 00 +R 00 00 01 00 00 09 01 00 +T 6D 07 00 00 +R 00 00 01 00 +T 6D 07 00 00 +R 00 00 01 00 +T 6D 07 00 00 2A 00 00 00 00 AF B6 CA +R 00 00 01 00 00 05 03 00 +T 73 07 00 00 15 08 00 00 2A 00 00 00 00 7E FE +R 00 00 01 00 00 04 01 00 00 09 03 00 +T 7A 07 00 00 5D CA 15 08 00 00 +R 00 00 01 00 00 06 01 00 +T 7E 07 00 00 +R 00 00 01 00 +T 7E 07 00 00 +R 00 00 01 00 +T 7E 07 00 00 +R 00 00 01 00 +T 7E 07 00 00 2A 00 00 00 00 7E FE 2D 20 7E +R 00 00 01 00 00 05 03 00 +T 86 07 00 00 +R 00 00 01 00 +T 86 07 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 8D 07 00 00 2A 00 00 00 00 7E FE 5D 28 07 2A +R 00 00 01 00 00 05 03 00 +T 96 07 00 00 00 00 00 00 AF B6 20 08 +R 00 00 01 00 00 04 03 00 +T 9C 07 00 00 +R 00 00 01 00 +T 9C 07 00 00 +R 00 00 01 00 +T 9C 07 00 00 +R 00 00 01 00 +T 9C 07 00 00 11 2D 00 CD 47 0A 00 00 18 5E +R 00 00 01 00 00 08 01 00 +T A4 07 00 00 +R 00 00 01 00 +T A4 07 00 00 2A 00 00 00 00 2B 2B 4E 06 00 03 +R 00 00 01 00 00 05 03 00 +T AD 07 00 00 DD 71 FC DD 70 FD 2A 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T B6 07 00 00 5E 16 00 DD 73 FE DD 72 FF EB 23 +R 00 00 01 00 +T C1 07 00 00 CD 00 00 00 00 30 11 +R 00 00 01 00 02 05 0E 00 +T C6 07 00 00 +R 00 00 01 00 +T C6 07 00 00 11 74 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T CC 07 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T D2 07 00 00 00 00 C3 D0 09 00 00 +R 00 00 01 00 00 07 01 00 +T D7 07 00 00 +R 00 00 01 00 +T D7 07 00 00 +R 00 00 01 00 +T D7 07 00 00 DD 4E FC DD 46 FD DD 6E FE DD 66 +R 00 00 01 00 +T E2 07 00 00 FF CD 00 00 00 00 38 13 +R 00 00 01 00 02 06 0E 00 +T E8 07 00 00 +R 00 00 01 00 +T E8 07 00 00 DD 5E FC DD 56 FD 13 DD 73 FC DD +R 00 00 01 00 +T F3 07 00 00 72 FD 1B CD 47 0A 00 00 18 DC +R 00 00 01 00 00 08 01 00 +T FB 07 00 00 +R 00 00 01 00 +T FB 07 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 02 08 00 00 +R 00 00 01 00 +T 02 08 00 00 18 0E +R 00 00 01 00 +T 04 08 00 00 +R 00 00 01 00 +T 04 08 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 0B 08 00 00 2B 5E 16 00 CD 47 0A 00 00 +R 00 00 01 00 00 09 01 00 +T 12 08 00 00 +R 00 00 01 00 +T 12 08 00 00 C3 6D 07 00 00 +R 00 00 01 00 00 05 01 00 +T 15 08 00 00 +R 00 00 01 00 +T 15 08 00 00 11 00 00 CD 47 0A 00 00 2A +R 00 00 01 00 00 08 01 00 +T 1C 08 00 00 00 00 00 00 7E FE 5D 28 11 +R 00 00 01 00 00 04 03 00 +T 23 08 00 00 +R 00 00 01 00 +T 23 08 00 00 11 85 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 29 08 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 2F 08 00 00 00 00 C3 D0 09 00 00 +R 00 00 01 00 00 07 01 00 +T 34 08 00 00 +R 00 00 01 00 +T 34 08 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 3B 08 00 00 DD 6E 02 DD 66 03 7E F6 03 77 23 +R 00 00 01 00 +T 46 08 00 00 7E F6 00 77 C3 CA 09 00 00 +R 00 00 01 00 00 09 01 00 +T 4D 08 00 00 +R 00 00 01 00 +T 4D 08 00 00 21 02 00 39 4D 44 11 01 00 CD +R 00 00 01 00 +T 57 08 00 00 FF 01 00 00 DD 75 F8 DD 74 F9 7D +R 00 00 01 00 00 04 01 00 +T 60 08 00 00 B4 20 06 +R 00 00 01 00 +T 63 08 00 00 +R 00 00 01 00 +T 63 08 00 00 21 00 00 C3 D0 09 00 00 +R 00 00 01 00 00 08 01 00 +T 69 08 00 00 +R 00 00 01 00 +T 69 08 00 00 DD 7E FA E6 05 4F DD 7E FB E6 00 +R 00 00 01 00 +T 74 08 00 00 47 DD 6E 02 DD 66 03 7E B1 77 23 +R 00 00 01 00 +T 7F 08 00 00 7E B0 77 C3 CA 09 00 00 +R 00 00 01 00 00 08 01 00 +T 85 08 00 00 +R 00 00 01 00 +T 85 08 00 00 11 92 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 8B 08 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 91 08 00 00 00 00 C3 D0 09 00 00 +R 00 00 01 00 00 07 01 00 +T 96 08 00 00 +R 00 00 01 00 +T 96 08 00 00 11 9F 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 9C 08 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T A2 08 00 00 00 00 C3 D0 09 00 00 +R 00 00 01 00 00 07 01 00 +T A7 08 00 00 +R 00 00 01 00 +T A7 08 00 00 2A 00 00 00 00 AF B6 20 11 +R 00 00 01 00 00 05 03 00 +T AE 08 00 00 +R 00 00 01 00 +T AE 08 00 00 11 B3 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T B4 08 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T BA 08 00 00 00 00 C3 D0 09 00 00 +R 00 00 01 00 00 07 01 00 +T BF 08 00 00 +R 00 00 01 00 +T BF 08 00 00 1E 08 CD D3 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T C8 08 00 00 74 F9 2A 00 00 00 00 23 22 +R 00 00 01 00 00 07 03 00 +T CF 08 00 00 00 00 00 00 2B 5E 16 00 CD +R 00 00 01 00 00 04 03 00 +T D6 08 00 00 47 0A 00 00 11 00 00 CD +R 00 00 01 00 00 04 01 00 +T DC 08 00 00 47 0A 00 00 DD 6E 02 DD 66 03 7E +R 00 00 01 00 00 04 01 00 +T E5 08 00 00 F6 03 77 23 7E F6 00 77 C3 +R 00 00 01 00 +T EE 08 00 00 CA 09 00 00 +R 00 00 01 00 00 04 01 00 +T F0 08 00 00 +R 00 00 01 00 +T F0 08 00 00 01 BE 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 03 00 +T F7 08 00 00 1B ED 53 00 00 00 00 3E +R 00 00 01 00 00 07 03 00 +T FD 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 02 09 00 00 00 00 00 00 DD 75 FC DD 74 FD 4D +R 00 00 01 00 02 04 00 00 +T 0B 09 00 00 44 21 00 00 CD 00 00 00 00 38 11 +R 00 00 01 00 02 09 0E 00 +T 14 09 00 00 +R 00 00 01 00 +T 14 09 00 00 11 CA 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 1A 09 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 20 09 00 00 00 00 C3 D0 09 00 00 +R 00 00 01 00 00 07 01 00 +T 25 09 00 00 +R 00 00 01 00 +T 25 09 00 00 DD 6E FC DD 66 FD ED 4B +R 00 00 01 00 +T 2D 09 00 00 00 00 00 00 09 46 DD 70 FE DD 4E +R 00 00 01 00 00 04 03 00 +T 36 09 00 00 FC DD 46 FD 21 01 00 CD +R 00 00 01 00 +T 3E 09 00 00 00 00 00 00 30 22 DD 7E FE FE 2A +R 00 00 01 00 02 04 0E 00 +T 47 09 00 00 28 0E DD 7E FE FE 2B 28 07 DD 7E +R 00 00 01 00 +T 52 09 00 00 FE FE 3F 20 0D +R 00 00 01 00 +T 57 09 00 00 +R 00 00 01 00 +T 57 09 00 00 +R 00 00 01 00 +T 57 09 00 00 +R 00 00 01 00 +T 57 09 00 00 +R 00 00 01 00 +T 57 09 00 00 +R 00 00 01 00 +T 57 09 00 00 DD 6E FC DD 66 FD 2B DD 75 FC DD +R 00 00 01 00 +T 62 09 00 00 74 FD +R 00 00 01 00 +T 64 09 00 00 +R 00 00 01 00 +T 64 09 00 00 DD 6E 02 DD 66 03 7E F6 01 77 23 +R 00 00 01 00 +T 6F 09 00 00 7E F6 00 77 3E 01 DD AE FC DD B6 +R 00 00 01 00 +T 7A 09 00 00 FD 20 0F +R 00 00 01 00 +T 7D 09 00 00 +R 00 00 01 00 +T 7D 09 00 00 DD 6E 02 DD 66 03 7E F6 02 77 23 +R 00 00 01 00 +T 88 09 00 00 7E F6 00 77 +R 00 00 01 00 +T 8C 09 00 00 +R 00 00 01 00 +T 8C 09 00 00 1E 08 CD D3 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T 95 09 00 00 74 F9 +R 00 00 01 00 +T 97 09 00 00 +R 00 00 01 00 +T 97 09 00 00 DD 4E FC DD 46 FD 21 00 00 CD +R 00 00 01 00 +T A1 09 00 00 00 00 00 00 30 1D +R 00 00 01 00 02 04 0E 00 +T A5 09 00 00 +R 00 00 01 00 +T A5 09 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T AC 09 00 00 2B 5E 16 00 CD 47 0A 00 00 DD 6E +R 00 00 01 00 00 09 01 00 +T B5 09 00 00 FC DD 66 FD 2B DD 75 FC DD 74 FD +R 00 00 01 00 +T C0 09 00 00 18 D5 +R 00 00 01 00 +T C2 09 00 00 +R 00 00 01 00 +T C2 09 00 00 11 00 00 CD 47 0A 00 00 18 00 +R 00 00 01 00 00 08 01 00 +T CA 09 00 00 +R 00 00 01 00 +T CA 09 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 +T D0 09 00 00 +R 00 00 01 00 +T D0 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T D3 09 00 00 +R 00 00 01 00 +T D3 09 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 0D 00 +T D9 09 00 00 05 00 00 00 DD 75 FC DD 74 FD 01 +R 00 00 01 00 00 04 03 00 +T E2 09 00 00 04 00 00 00 A7 ED 42 20 14 +R 00 00 01 00 00 04 03 00 +T E9 09 00 00 +R 00 00 01 00 +T E9 09 00 00 21 07 00 00 00 01 00 00 11 03 00 +R 00 00 01 00 00 05 03 00 +T F2 09 00 00 CD 00 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 08 00 +T FB 09 00 00 18 47 +R 00 00 01 00 +T FD 09 00 00 +R 00 00 01 00 +T FD 09 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 08 0A 00 00 FF 23 DD 75 FE DD 74 FF 2B DD 46 +R 00 00 01 00 +T 13 0A 00 00 02 70 DD 6E FE DD 66 FF 23 DD 75 +R 00 00 01 00 +T 1E 0A 00 00 FE DD 74 FF 2B 36 00 DD 6E FE DD +R 00 00 01 00 +T 29 0A 00 00 66 FF 23 DD 75 FE DD 74 FF 2B 36 +R 00 00 01 00 +T 34 0A 00 00 00 DD 6E FE DD 66 FF 22 +R 00 00 01 00 +T 3C 0A 00 00 05 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 00 04 03 00 +T 44 0A 00 00 +R 00 00 01 00 +T 44 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 47 0A 00 00 +R 00 00 01 00 +T 47 0A 00 00 CD 00 00 00 00 21 04 00 00 00 ED +R 00 00 01 00 02 05 0A 00 00 0A 03 00 +T 4E 0A 00 00 4B 05 00 00 00 A7 ED 42 28 0E +R 00 00 01 00 00 05 03 00 +T 56 0A 00 00 +R 00 00 01 00 +T 56 0A 00 00 DD 46 02 2A 05 00 00 00 23 22 +R 00 00 01 00 00 08 03 00 +T 5E 0A 00 00 05 00 00 00 2B 70 18 11 +R 00 00 01 00 00 04 03 00 +T 64 0A 00 00 +R 00 00 01 00 +T 64 0A 00 00 2A 07 00 00 00 ED 4B 09 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 6B 0A 00 00 CD 00 00 00 00 22 07 00 00 00 ED +R 00 00 01 00 02 05 03 00 00 0A 03 00 +T 72 0A 00 00 43 09 00 00 00 +R 00 00 01 00 00 05 03 00 +T 75 0A 00 00 +R 00 00 01 00 +T 75 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 78 0A 00 00 +R 00 00 01 00 +T 78 0A 00 00 CD 00 00 00 00 FA FF 21 +R 00 00 01 00 02 05 0D 00 +T 7E 0A 00 00 04 00 00 00 ED 5B 05 00 00 00 A7 +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 85 0A 00 00 ED 52 20 0F +R 00 00 01 00 +T 89 0A 00 00 +R 00 00 01 00 +T 89 0A 00 00 21 07 00 00 00 01 00 00 11 03 00 +R 00 00 01 00 00 05 03 00 +T 92 0A 00 00 CD 00 00 00 00 C3 19 0B 00 00 +R 00 00 01 00 02 05 08 00 00 0A 01 00 +T 98 0A 00 00 +R 00 00 01 00 +T 98 0A 00 00 2A 05 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 00 05 03 00 +T A1 0A 00 00 21 03 00 ED 4B 05 00 00 00 09 22 +R 00 00 01 00 00 09 03 00 +T AA 0A 00 00 05 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 00 04 03 00 +T B2 0A 00 00 +R 00 00 01 00 +T B2 0A 00 00 DD 4E FA DD 46 FB DD 6E 04 DD 66 +R 00 00 01 00 +T BD 0A 00 00 05 A7 ED 42 30 1E +R 00 00 01 00 +T C3 0A 00 00 +R 00 00 01 00 +T C3 0A 00 00 DD 6E FA DD 66 FB 2B DD 75 FA DD +R 00 00 01 00 +T CE 0A 00 00 74 FB 46 DD 6E FC DD 66 FD 2B DD +R 00 00 01 00 +T D9 0A 00 00 75 FC DD 74 FD 70 18 D1 +R 00 00 01 00 +T E1 0A 00 00 +R 00 00 01 00 +T E1 0A 00 00 DD 6E 04 DD 66 05 DD 75 FE DD 74 +R 00 00 01 00 +T EC 0A 00 00 FF 23 DD 75 FE DD 74 FF 2B DD 46 +R 00 00 01 00 +T F7 0A 00 00 02 70 DD 6E FE DD 66 FF 23 DD 75 +R 00 00 01 00 +T 02 0B 00 00 FE DD 74 FF 2B 36 00 DD 6E FE DD +R 00 00 01 00 +T 0D 0B 00 00 66 FF 23 DD 75 FE DD 74 FF 2B 36 +R 00 00 01 00 +T 18 0B 00 00 00 +R 00 00 01 00 +T 19 0B 00 00 +R 00 00 01 00 +T 19 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 1C 0B 00 00 +R 00 00 01 00 +T 1C 0B 00 00 CD 00 00 00 00 FA FF 21 +R 00 00 01 00 02 05 0D 00 +T 22 0B 00 00 04 00 00 00 DD 5E 02 DD 56 03 A7 +R 00 00 01 00 00 04 03 00 +T 2B 0B 00 00 ED 52 20 03 +R 00 00 01 00 +T 2F 0B 00 00 +R 00 00 01 00 +T 2F 0B 00 00 C3 BC 0B 00 00 +R 00 00 01 00 00 05 01 00 +T 32 0B 00 00 +R 00 00 01 00 +T 32 0B 00 00 DD 6E 02 DD 66 03 DD 75 FA DD 74 +R 00 00 01 00 +T 3D 0B 00 00 FB +R 00 00 01 00 +T 3E 0B 00 00 +R 00 00 01 00 +T 3E 0B 00 00 DD 5E FA DD 56 FB CD E9 12 00 00 +R 00 00 01 00 00 0B 01 00 +T 47 0B 00 00 DD 75 FC DD 74 FD 7D B4 20 02 +R 00 00 01 00 +T 51 0B 00 00 +R 00 00 01 00 +T 51 0B 00 00 18 0E +R 00 00 01 00 +T 53 0B 00 00 +R 00 00 01 00 +T 53 0B 00 00 DD 6E FC DD 66 FD DD 75 FA DD 74 +R 00 00 01 00 +T 5E 0B 00 00 FB 18 DD +R 00 00 01 00 +T 61 0B 00 00 +R 00 00 01 00 +T 61 0B 00 00 DD 6E FA DD 66 FB 7E FE 07 20 17 +R 00 00 01 00 +T 6C 0B 00 00 +R 00 00 01 00 +T 6C 0B 00 00 DD 4E 04 DD 46 05 DD 6E FA DD 66 +R 00 00 01 00 +T 77 0B 00 00 FB A7 ED 42 DD 75 FE DD 74 FF 18 +R 00 00 01 00 +T 82 0B 00 00 15 +R 00 00 01 00 +T 83 0B 00 00 +R 00 00 01 00 +T 83 0B 00 00 DD 4E FA DD 46 FB DD 6E 04 DD 66 +R 00 00 01 00 +T 8E 0B 00 00 05 A7 ED 42 DD 75 FE DD 74 FF +R 00 00 01 00 +T 98 0B 00 00 +R 00 00 01 00 +T 98 0B 00 00 06 08 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T A1 0B 00 00 00 00 00 00 7B E6 FF DD 6E FA DD +R 00 00 01 00 02 04 12 00 +T AA 0B 00 00 66 FB 23 77 DD 7E FE E6 FF DD 6E +R 00 00 01 00 +T B5 0B 00 00 FA DD 66 FB 23 23 77 +R 00 00 01 00 +T BC 0B 00 00 +R 00 00 01 00 +T BC 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T BF 0B 00 00 +R 00 00 01 00 +T BF 0B 00 00 CD 00 00 00 00 7B B2 28 19 21 +R 00 00 01 00 02 05 0A 00 +T C7 0B 00 00 04 00 00 00 DD 4E 02 DD 46 03 A7 +R 00 00 01 00 00 04 03 00 +T D0 0B 00 00 ED 42 28 0B DD 6E 02 DD 66 03 7E +R 00 00 01 00 +T DB 0B 00 00 FE 06 28 02 +R 00 00 01 00 +T DF 0B 00 00 +R 00 00 01 00 +T DF 0B 00 00 +R 00 00 01 00 +T DF 0B 00 00 +R 00 00 01 00 +T DF 0B 00 00 18 12 +R 00 00 01 00 +T E1 0B 00 00 +R 00 00 01 00 +T E1 0B 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T EC 0B 00 00 03 13 13 13 CD 1C 0B 00 00 +R 00 00 01 00 00 09 01 00 +T F3 0B 00 00 +R 00 00 01 00 +T F3 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T F6 0B 00 00 +R 00 00 01 00 +T F6 0B 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 0D 00 +T FF 0B 00 00 B6 03 28 08 DD 7E 04 DD B6 05 20 +R 00 00 01 00 +T 0A 0C 00 00 11 +R 00 00 01 00 +T 0B 0C 00 00 +R 00 00 01 00 +T 0B 0C 00 00 +R 00 00 01 00 +T 0B 0C 00 00 +R 00 00 01 00 +T 0B 0C 00 00 11 DC 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 11 0C 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 17 0C 00 00 00 00 C3 7F 0D 00 00 +R 00 00 01 00 00 07 01 00 +T 1C 0C 00 00 +R 00 00 01 00 +T 1C 0C 00 00 21 2E 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 27 0C 00 00 06 00 3E 9C A9 B0 28 11 +R 00 00 01 00 +T 2F 0C 00 00 +R 00 00 01 00 +T 2F 0C 00 00 11 EB 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 35 0C 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 3B 0C 00 00 00 00 C3 7F 0D 00 00 +R 00 00 01 00 00 07 01 00 +T 40 0C 00 00 +R 00 00 01 00 +T 40 0C 00 00 21 2A 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 4B 0C 00 00 23 B6 28 77 +R 00 00 01 00 +T 4F 0C 00 00 +R 00 00 01 00 +T 4F 0C 00 00 DD 6E 04 DD 66 05 DD 75 FE DD 74 +R 00 00 01 00 +T 5A 0C 00 00 FF +R 00 00 01 00 +T 5B 0C 00 00 +R 00 00 01 00 +T 5B 0C 00 00 21 2A 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 66 0C 00 00 23 66 6F 4E 06 00 DD 5E FE DD 56 +R 00 00 01 00 +T 71 0C 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 77 0C 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 00 00 +T 80 0C 00 00 7D B4 28 34 +R 00 00 01 00 +T 84 0C 00 00 +R 00 00 01 00 +T 84 0C 00 00 21 2C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 8F 0C 00 00 23 56 D5 21 2A 00 09 4E 23 46 DD +R 00 00 01 00 +T 9A 0C 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T A2 0C 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 01 00 02 09 00 00 +T A9 0C 00 00 B4 20 02 +R 00 00 01 00 +T AC 0C 00 00 +R 00 00 01 00 +T AC 0C 00 00 18 0A +R 00 00 01 00 +T AE 0C 00 00 +R 00 00 01 00 +T AE 0C 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T B6 0C 00 00 +R 00 00 01 00 +T B6 0C 00 00 18 A3 +R 00 00 01 00 +T B8 0C 00 00 +R 00 00 01 00 +T B8 0C 00 00 DD 7E FE DD B6 FF 20 06 +R 00 00 01 00 +T C0 0C 00 00 +R 00 00 01 00 +T C0 0C 00 00 21 00 00 C3 7F 0D 00 00 +R 00 00 01 00 00 08 01 00 +T C6 0C 00 00 +R 00 00 01 00 +T C6 0C 00 00 +R 00 00 01 00 +T C6 0C 00 00 DD 6E 04 DD 66 05 22 0D 00 00 00 +R 00 00 01 00 00 0B 03 00 +T CF 0C 00 00 21 29 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T DA 0C 00 00 B7 28 12 +R 00 00 01 00 +T DD 0C 00 00 +R 00 00 01 00 +T DD 0C 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T E8 0C 00 00 03 CD 82 0D 00 00 C3 7F 0D 00 00 +R 00 00 01 00 00 06 01 00 00 0B 01 00 +T EF 0C 00 00 +R 00 00 01 00 +T EF 0C 00 00 DD 6E 04 DD 66 05 DD 75 FE DD 74 +R 00 00 01 00 +T FA 0C 00 00 FF 21 28 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 05 0D 00 00 7E B7 28 49 +R 00 00 01 00 +T 09 0D 00 00 +R 00 00 01 00 +T 09 0D 00 00 +R 00 00 01 00 +T 09 0D 00 00 21 28 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 14 0D 00 00 06 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 1D 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 22 0D 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 2B 0D 00 00 B4 28 22 +R 00 00 01 00 +T 2E 0D 00 00 +R 00 00 01 00 +T 2E 0D 00 00 DD 4E FE DD 46 FF DD 5E 02 DD 56 +R 00 00 01 00 +T 39 0D 00 00 03 CD 82 0D 00 00 7D B4 28 05 +R 00 00 01 00 00 06 01 00 +T 41 0D 00 00 +R 00 00 01 00 +T 41 0D 00 00 21 01 00 18 39 +R 00 00 01 00 +T 46 0D 00 00 +R 00 00 01 00 +T 46 0D 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 4E 0D 00 00 +R 00 00 01 00 +T 4E 0D 00 00 18 B9 +R 00 00 01 00 +T 50 0D 00 00 +R 00 00 01 00 +T 50 0D 00 00 18 2A +R 00 00 01 00 +T 52 0D 00 00 +R 00 00 01 00 +T 52 0D 00 00 +R 00 00 01 00 +T 52 0D 00 00 DD 4E FE DD 46 FF DD 5E 02 DD 56 +R 00 00 01 00 +T 5D 0D 00 00 03 CD 82 0D 00 00 7D B4 28 05 +R 00 00 01 00 00 06 01 00 +T 65 0D 00 00 +R 00 00 01 00 +T 65 0D 00 00 21 01 00 18 15 +R 00 00 01 00 +T 6A 0D 00 00 +R 00 00 01 00 +T 6A 0D 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 75 0D 00 00 74 FF 2B 7E B7 20 D6 +R 00 00 01 00 +T 7C 0D 00 00 +R 00 00 01 00 +T 7C 0D 00 00 +R 00 00 01 00 +T 7C 0D 00 00 21 00 00 +R 00 00 01 00 +T 7F 0D 00 00 +R 00 00 01 00 +T 7F 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 82 0D 00 00 +R 00 00 01 00 +T 82 0D 00 00 CD 00 00 00 00 FA FF ED 43 +R 00 00 01 00 02 05 0D 00 +T 89 0D 00 00 0B 00 00 00 DD 6E 02 DD 66 03 22 +R 00 00 01 00 00 04 03 00 +T 92 0D 00 00 0F 00 00 00 21 14 00 DD 4E 02 DD +R 00 00 01 00 00 04 03 00 +T 9B 0D 00 00 46 03 09 22 11 00 00 00 DD 71 FC +R 00 00 01 00 00 08 03 00 +T A4 0D 00 00 DD 70 FD 21 14 00 DD 4E 02 DD 46 +R 00 00 01 00 +T AF 0D 00 00 03 09 DD 75 FE DD 74 FF DD 36 FA +R 00 00 01 00 +T BA 0D 00 00 0A DD 36 FB 00 +R 00 00 01 00 +T BF 0D 00 00 +R 00 00 01 00 +T BF 0D 00 00 DD 6E FA DD 66 FB 2B DD 75 FA DD +R 00 00 01 00 +T CA 0D 00 00 74 FB 23 7D B4 28 2A +R 00 00 01 00 +T D1 0D 00 00 +R 00 00 01 00 +T D1 0D 00 00 DD 6E FC DD 66 FD 4D 44 03 03 DD +R 00 00 01 00 +T DC 0D 00 00 71 FC DD 70 FD AF 77 23 77 DD 6E +R 00 00 01 00 +T E7 0D 00 00 FE DD 66 FF 4D 44 03 03 DD 71 FE +R 00 00 01 00 +T F2 0D 00 00 DD 70 FF AF 77 23 77 18 C4 +R 00 00 01 00 +T FB 0D 00 00 +R 00 00 01 00 +T FB 0D 00 00 21 2E 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 06 0E 00 00 13 CD 3B 0E 00 00 7D B4 28 27 +R 00 00 01 00 00 06 01 00 +T 0E 0E 00 00 +R 00 00 01 00 +T 0E 0E 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 19 0E 00 00 66 03 C1 71 23 70 21 14 00 DD 4E +R 00 00 01 00 +T 24 0E 00 00 02 DD 46 03 09 ED 4B 0B 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 2D 0E 00 00 71 23 70 21 01 00 18 03 +R 00 00 01 00 +T 35 0E 00 00 +R 00 00 01 00 +T 35 0E 00 00 21 00 00 +R 00 00 01 00 +T 38 0E 00 00 +R 00 00 01 00 +T 38 0E 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 3B 0E 00 00 +R 00 00 01 00 +T 3B 0E 00 00 CD 00 00 00 00 F4 FF DD 6E 02 DD +R 00 00 01 00 02 05 0D 00 +T 44 0E 00 00 66 03 DD 75 F4 DD 74 F5 +R 00 00 01 00 +T 4C 0E 00 00 +R 00 00 01 00 +T 4C 0E 00 00 DD 7E F4 DD B6 F5 CA B5 11 00 00 +R 00 00 01 00 00 0B 01 00 +T 55 0E 00 00 +R 00 00 01 00 +T 55 0E 00 00 DD 5E F4 DD 56 F5 CD E9 12 00 00 +R 00 00 01 00 00 0B 01 00 +T 5E 0E 00 00 DD 75 F6 DD 74 F7 DD 6E F4 DD 66 +R 00 00 01 00 +T 69 0E 00 00 F5 7E FE 01 20 15 +R 00 00 01 00 +T 6F 0E 00 00 +R 00 00 01 00 +T 6F 0E 00 00 2A 0D 00 00 00 ED 4B 0B 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 76 0E 00 00 A7 ED 42 28 06 +R 00 00 01 00 +T 7B 0E 00 00 +R 00 00 01 00 +T 7B 0E 00 00 21 00 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T 81 0E 00 00 +R 00 00 01 00 +T 81 0E 00 00 C3 A6 11 00 00 +R 00 00 01 00 00 05 01 00 +T 84 0E 00 00 +R 00 00 01 00 +T 84 0E 00 00 FE 02 20 10 2A 0B 00 00 00 AF B6 +R 00 00 01 00 00 09 03 00 +T 8D 0E 00 00 28 06 +R 00 00 01 00 +T 8F 0E 00 00 +R 00 00 01 00 +T 8F 0E 00 00 21 00 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T 95 0E 00 00 +R 00 00 01 00 +T 95 0E 00 00 C3 A6 11 00 00 +R 00 00 01 00 00 05 01 00 +T 98 0E 00 00 +R 00 00 01 00 +T 98 0E 00 00 FE 03 20 17 2A 0B 00 00 00 AF B6 +R 00 00 01 00 00 09 03 00 +T A1 0E 00 00 20 06 +R 00 00 01 00 +T A3 0E 00 00 +R 00 00 01 00 +T A3 0E 00 00 21 00 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T A9 0E 00 00 +R 00 00 01 00 +T A9 0E 00 00 2A 0B 00 00 00 23 22 0B 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T B0 0E 00 00 C3 A6 11 00 00 +R 00 00 01 00 00 05 01 00 +T B3 0E 00 00 +R 00 00 01 00 +T B3 0E 00 00 FE 08 20 77 DD 6E F4 DD 66 F5 23 +R 00 00 01 00 +T BE 0E 00 00 23 23 DD 75 FA DD 74 FB 2A +R 00 00 01 00 +T C7 0E 00 00 0B 00 00 00 E5 DD 6E FA DD 66 FB +R 00 00 01 00 00 04 03 00 +T D0 0E 00 00 7E E1 BE 28 06 +R 00 00 01 00 +T D5 0E 00 00 +R 00 00 01 00 +T D5 0E 00 00 21 00 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T DB 0E 00 00 +R 00 00 01 00 +T DB 0E 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T E3 0E 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T EA 0E 00 00 75 F8 DD 74 F9 4D 44 21 01 00 CD +R 00 00 01 00 +T F5 0E 00 00 00 00 00 00 30 24 DD 6E F8 DD 66 +R 00 00 01 00 02 04 0E 00 +T FE 0E 00 00 F9 E5 ED 4B 0B 00 00 00 DD 5E FA +R 00 00 01 00 00 08 03 00 +T 07 0F 00 00 DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 0D 0F 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 14 0F 00 00 B4 28 06 +R 00 00 01 00 +T 17 0F 00 00 +R 00 00 01 00 +T 17 0F 00 00 +R 00 00 01 00 +T 17 0F 00 00 +R 00 00 01 00 +T 17 0F 00 00 21 00 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T 1D 0F 00 00 +R 00 00 01 00 +T 1D 0F 00 00 DD 6E F8 DD 66 F9 ED 4B +R 00 00 01 00 +T 25 0F 00 00 0B 00 00 00 09 22 0B 00 00 00 C3 +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 2C 0F 00 00 A6 11 00 00 +R 00 00 01 00 00 04 01 00 +T 2E 0F 00 00 +R 00 00 01 00 +T 2E 0F 00 00 FE 04 20 32 2A 0B 00 00 00 AF B6 +R 00 00 01 00 00 09 03 00 +T 37 0F 00 00 28 1B 2A 0B 00 00 00 4E 06 00 DD +R 00 00 01 00 00 07 03 00 +T 40 0F 00 00 5E F4 DD 56 F5 13 13 13 3E +R 00 00 01 00 +T 49 0F 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 4E 0F 00 00 00 00 00 00 7D B4 20 06 +R 00 00 01 00 02 04 00 00 +T 54 0F 00 00 +R 00 00 01 00 +T 54 0F 00 00 +R 00 00 01 00 +T 54 0F 00 00 +R 00 00 01 00 +T 54 0F 00 00 21 00 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T 5A 0F 00 00 +R 00 00 01 00 +T 5A 0F 00 00 2A 0B 00 00 00 23 22 0B 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 61 0F 00 00 C3 A6 11 00 00 +R 00 00 01 00 00 05 01 00 +T 64 0F 00 00 +R 00 00 01 00 +T 64 0F 00 00 FE 05 20 32 2A 0B 00 00 00 AF B6 +R 00 00 01 00 00 09 03 00 +T 6D 0F 00 00 28 1B 2A 0B 00 00 00 4E 06 00 DD +R 00 00 01 00 00 07 03 00 +T 76 0F 00 00 5E F4 DD 56 F5 13 13 13 3E +R 00 00 01 00 +T 7F 0F 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 84 0F 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 00 00 +T 8A 0F 00 00 +R 00 00 01 00 +T 8A 0F 00 00 +R 00 00 01 00 +T 8A 0F 00 00 +R 00 00 01 00 +T 8A 0F 00 00 21 00 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T 90 0F 00 00 +R 00 00 01 00 +T 90 0F 00 00 2A 0B 00 00 00 23 22 0B 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 97 0F 00 00 C3 A6 11 00 00 +R 00 00 01 00 00 05 01 00 +T 9A 0F 00 00 +R 00 00 01 00 +T 9A 0F 00 00 FE 09 20 03 C3 A6 11 00 00 +R 00 00 01 00 00 09 01 00 +T A1 0F 00 00 +R 00 00 01 00 +T A1 0F 00 00 FE 07 20 03 C3 A6 11 00 00 +R 00 00 01 00 00 09 01 00 +T A8 0F 00 00 +R 00 00 01 00 +T A8 0F 00 00 FE 15 38 5F FE 1E 30 5B DD 6E F4 +R 00 00 01 00 +T B3 0F 00 00 DD 66 F5 4E 06 00 21 EC FF 09 DD +R 00 00 01 00 +T BE 0F 00 00 75 F8 DD 74 F9 2A 0B 00 00 00 DD +R 00 00 01 00 00 0A 03 00 +T C7 0F 00 00 75 FA DD 74 FB DD 5E F6 DD 56 F7 +R 00 00 01 00 +T D2 0F 00 00 CD 3B 0E 00 00 7D B4 28 2C +R 00 00 01 00 00 05 01 00 +T D9 0F 00 00 +R 00 00 01 00 +T D9 0F 00 00 DD 6E F8 DD 66 F9 29 ED 4B +R 00 00 01 00 +T E2 0F 00 00 0F 00 00 00 09 7E 23 B6 20 15 +R 00 00 01 00 00 04 03 00 +T EA 0F 00 00 +R 00 00 01 00 +T EA 0F 00 00 DD 6E F8 DD 66 F9 29 ED 4B +R 00 00 01 00 +T F3 0F 00 00 0F 00 00 00 09 DD 4E FA DD 46 FB +R 00 00 01 00 00 04 03 00 +T FC 0F 00 00 71 23 70 +R 00 00 01 00 +T FF 0F 00 00 +R 00 00 01 00 +T FF 0F 00 00 21 01 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T 05 10 00 00 +R 00 00 01 00 +T 05 10 00 00 21 00 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T 0B 10 00 00 +R 00 00 01 00 +T 0B 10 00 00 FE 1F 38 5F FE 28 30 5B DD 6E F4 +R 00 00 01 00 +T 16 10 00 00 DD 66 F5 4E 06 00 21 E2 FF 09 DD +R 00 00 01 00 +T 21 10 00 00 75 F8 DD 74 F9 2A 0B 00 00 00 DD +R 00 00 01 00 00 0A 03 00 +T 2A 10 00 00 75 FA DD 74 FB DD 5E F6 DD 56 F7 +R 00 00 01 00 +T 35 10 00 00 CD 3B 0E 00 00 7D B4 28 2C +R 00 00 01 00 00 05 01 00 +T 3C 10 00 00 +R 00 00 01 00 +T 3C 10 00 00 DD 6E F8 DD 66 F9 29 ED 4B +R 00 00 01 00 +T 45 10 00 00 11 00 00 00 09 7E 23 B6 20 15 +R 00 00 01 00 00 04 03 00 +T 4D 10 00 00 +R 00 00 01 00 +T 4D 10 00 00 DD 6E F8 DD 66 F9 29 ED 4B +R 00 00 01 00 +T 56 10 00 00 11 00 00 00 09 DD 4E FA DD 46 FB +R 00 00 01 00 00 04 03 00 +T 5F 10 00 00 71 23 70 +R 00 00 01 00 +T 62 10 00 00 +R 00 00 01 00 +T 62 10 00 00 21 01 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T 68 10 00 00 +R 00 00 01 00 +T 68 10 00 00 21 00 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T 6E 10 00 00 +R 00 00 01 00 +T 6E 10 00 00 FE 06 20 6B DD 6E F6 DD 66 F7 7E +R 00 00 01 00 +T 79 10 00 00 FE 06 28 11 +R 00 00 01 00 +T 7D 10 00 00 +R 00 00 01 00 +T 7D 10 00 00 DD 6E F4 DD 66 F5 23 23 23 DD 75 +R 00 00 01 00 +T 88 10 00 00 F6 DD 74 F7 18 4C +R 00 00 01 00 +T 8E 10 00 00 +R 00 00 01 00 +T 8E 10 00 00 +R 00 00 01 00 +T 8E 10 00 00 2A 0B 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 00 05 03 00 +T 97 10 00 00 DD 5E F4 DD 56 F5 13 13 13 CD +R 00 00 01 00 +T A1 10 00 00 3B 0E 00 00 7D B4 28 06 +R 00 00 01 00 00 04 01 00 +T A7 10 00 00 +R 00 00 01 00 +T A7 10 00 00 21 01 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T AD 10 00 00 +R 00 00 01 00 +T AD 10 00 00 DD 6E F8 DD 66 F9 22 0B 00 00 00 +R 00 00 01 00 00 0B 03 00 +T B6 10 00 00 DD 5E F4 DD 56 F5 CD E9 12 00 00 +R 00 00 01 00 00 0B 01 00 +T BF 10 00 00 DD 75 F4 DD 74 F5 7D B4 28 0B DD +R 00 00 01 00 +T CA 10 00 00 6E F4 DD 66 F5 7E FE 06 28 BA +R 00 00 01 00 +T D4 10 00 00 +R 00 00 01 00 +T D4 10 00 00 21 00 00 C3 C3 11 00 00 +R 00 00 01 00 00 08 01 00 +T DA 10 00 00 +R 00 00 01 00 +T DA 10 00 00 C3 A6 11 00 00 +R 00 00 01 00 00 05 01 00 +T DD 10 00 00 +R 00 00 01 00 +T DD 10 00 00 FE 0A DA 8D 11 00 00 FE 0C D2 +R 00 00 01 00 00 07 01 00 +T E5 10 00 00 8D 11 00 00 DD 36 F8 00 DD 6E F6 +R 00 00 01 00 00 04 01 00 +T EE 10 00 00 DD 66 F7 7E FE 08 20 0D +R 00 00 01 00 +T F6 10 00 00 +R 00 00 01 00 +T F6 10 00 00 DD 6E F6 DD 66 F7 23 23 23 46 DD +R 00 00 01 00 +T 01 11 00 00 70 F8 +R 00 00 01 00 +T 03 11 00 00 +R 00 00 01 00 +T 03 11 00 00 DD 6E F4 DD 66 F5 7E FE 0A 20 05 +R 00 00 01 00 +T 0E 11 00 00 21 00 00 18 03 +R 00 00 01 00 +T 13 11 00 00 +R 00 00 01 00 +T 13 11 00 00 21 01 00 +R 00 00 01 00 +T 16 11 00 00 +R 00 00 01 00 +T 16 11 00 00 DD 75 FD DD 74 FE 2A 0B 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 1F 11 00 00 DD 75 FB DD 74 FC DD 5E F4 DD 56 +R 00 00 01 00 +T 2A 11 00 00 F5 13 13 13 CD C6 11 00 00 DD 75 +R 00 00 01 00 00 09 01 00 +T 33 11 00 00 F9 DD 74 FA +R 00 00 01 00 +T 37 11 00 00 +R 00 00 01 00 +T 37 11 00 00 DD 4E FD DD 46 FE DD 6E F9 DD 66 +R 00 00 01 00 +T 42 11 00 00 FA CD 00 00 00 00 38 40 +R 00 00 01 00 02 06 0E 00 +T 48 11 00 00 +R 00 00 01 00 +T 48 11 00 00 AF DD B6 F8 28 09 2A 0B 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 51 11 00 00 7E DD BE F8 20 12 +R 00 00 01 00 +T 57 11 00 00 +R 00 00 01 00 +T 57 11 00 00 +R 00 00 01 00 +T 57 11 00 00 +R 00 00 01 00 +T 57 11 00 00 DD 5E F6 DD 56 F7 CD 3B 0E 00 00 +R 00 00 01 00 00 0B 01 00 +T 60 11 00 00 7D B4 28 05 +R 00 00 01 00 +T 64 11 00 00 +R 00 00 01 00 +T 64 11 00 00 21 01 00 18 5A +R 00 00 01 00 +T 69 11 00 00 +R 00 00 01 00 +T 69 11 00 00 +R 00 00 01 00 +T 69 11 00 00 DD 6E F9 DD 66 FA 2B DD 75 F9 DD +R 00 00 01 00 +T 74 11 00 00 74 FA DD 6E F9 DD 66 FA DD 4E FB +R 00 00 01 00 +T 7F 11 00 00 DD 46 FC 09 22 0B 00 00 00 18 AF +R 00 00 01 00 00 09 03 00 +T 88 11 00 00 +R 00 00 01 00 +T 88 11 00 00 21 00 00 18 36 +R 00 00 01 00 +T 8D 11 00 00 +R 00 00 01 00 +T 8D 11 00 00 FE 00 20 05 21 01 00 18 2D +R 00 00 01 00 +T 96 11 00 00 +R 00 00 01 00 +T 96 11 00 00 11 FD 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T 9C 11 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T A2 11 00 00 00 00 18 1D +R 00 00 01 00 +T A6 11 00 00 +R 00 00 01 00 +T A6 11 00 00 DD 6E F6 DD 66 F7 DD 75 F4 DD 74 +R 00 00 01 00 +T B1 11 00 00 F5 C3 4C 0E 00 00 +R 00 00 01 00 00 06 01 00 +T B5 11 00 00 +R 00 00 01 00 +T B5 11 00 00 11 0F 01 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T BB 11 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T C1 11 00 00 00 00 +R 00 00 01 00 +T C3 11 00 00 +R 00 00 01 00 +T C3 11 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T C6 11 00 00 +R 00 00 01 00 +T C6 11 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 0D 00 +T CF 11 00 00 DD 77 FB 2A 0B 00 00 00 DD 75 FC +R 00 00 01 00 00 08 03 00 +T D8 11 00 00 DD 74 FD DD 6E 02 DD 66 03 23 23 +R 00 00 01 00 +T E3 11 00 00 23 DD 75 FE DD 74 FF DD 6E 02 DD +R 00 00 01 00 +T EE 11 00 00 66 03 5E CD 00 00 00 00 04 00 03 +R 00 00 01 00 02 08 11 00 +T F7 11 00 00 04 05 08 C3 12 00 00 2A 12 00 00 +R 00 00 01 00 00 07 01 00 00 0B 01 00 +T FE 11 00 00 8A 12 00 00 51 12 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 02 12 00 00 04 12 00 00 +R 00 00 01 00 00 04 01 00 +T 04 12 00 00 +R 00 00 01 00 +T 04 12 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 0C 12 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 13 12 00 00 75 FA DD 74 FB 21 02 00 39 7E DD +R 00 00 01 00 +T 1E 12 00 00 86 FA 77 23 7E DD 8E FB 77 C3 +R 00 00 01 00 +T 28 12 00 00 D7 12 00 00 +R 00 00 01 00 00 04 01 00 +T 2A 12 00 00 +R 00 00 01 00 +T 2A 12 00 00 +R 00 00 01 00 +T 2A 12 00 00 DD 6E FC DD 66 FD E5 DD 6E FE DD +R 00 00 01 00 +T 35 12 00 00 66 FF 7E E1 BE 20 12 +R 00 00 01 00 +T 3C 12 00 00 +R 00 00 01 00 +T 3C 12 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 44 12 00 00 +R 00 00 01 00 +T 44 12 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 4C 12 00 00 +R 00 00 01 00 +T 4C 12 00 00 18 DC +R 00 00 01 00 +T 4E 12 00 00 +R 00 00 01 00 +T 4E 12 00 00 C3 D7 12 00 00 +R 00 00 01 00 00 05 01 00 +T 51 12 00 00 +R 00 00 01 00 +T 51 12 00 00 +R 00 00 01 00 +T 51 12 00 00 DD 6E FC DD 66 FD AF B6 28 2D DD +R 00 00 01 00 +T 5C 12 00 00 6E FC DD 66 FD 4E 06 00 DD 5E FE +R 00 00 01 00 +T 67 12 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T 6D 12 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 74 12 00 00 28 12 +R 00 00 01 00 +T 76 12 00 00 +R 00 00 01 00 +T 76 12 00 00 +R 00 00 01 00 +T 76 12 00 00 +R 00 00 01 00 +T 76 12 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 7E 12 00 00 +R 00 00 01 00 +T 7E 12 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 86 12 00 00 +R 00 00 01 00 +T 86 12 00 00 18 C9 +R 00 00 01 00 +T 88 12 00 00 +R 00 00 01 00 +T 88 12 00 00 18 4D +R 00 00 01 00 +T 8A 12 00 00 +R 00 00 01 00 +T 8A 12 00 00 +R 00 00 01 00 +T 8A 12 00 00 DD 6E FC DD 66 FD AF B6 28 2D DD +R 00 00 01 00 +T 95 12 00 00 6E FC DD 66 FD 4E 06 00 DD 5E FE +R 00 00 01 00 +T A0 12 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T A6 12 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T AD 12 00 00 20 12 +R 00 00 01 00 +T AF 12 00 00 +R 00 00 01 00 +T AF 12 00 00 +R 00 00 01 00 +T AF 12 00 00 +R 00 00 01 00 +T AF 12 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T B7 12 00 00 +R 00 00 01 00 +T B7 12 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T BF 12 00 00 +R 00 00 01 00 +T BF 12 00 00 18 C9 +R 00 00 01 00 +T C1 12 00 00 +R 00 00 01 00 +T C1 12 00 00 18 14 +R 00 00 01 00 +T C3 12 00 00 +R 00 00 01 00 +T C3 12 00 00 11 22 01 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 0B 00 +T C9 12 00 00 00 00 00 00 CD 00 00 00 00 AF DD +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T D0 12 00 00 77 FA DD 77 FB 18 00 +R 00 00 01 00 +T D7 12 00 00 +R 00 00 01 00 +T D7 12 00 00 DD 6E FC DD 66 FD 22 0B 00 00 00 +R 00 00 01 00 00 0B 03 00 +T E0 12 00 00 DD 6E FA DD 66 FB C3 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T E9 12 00 00 +R 00 00 01 00 +T E9 12 00 00 CD 00 00 00 00 FE FF 21 +R 00 00 01 00 02 05 0D 00 +T EF 12 00 00 04 00 00 00 DD 4E 02 DD 46 03 A7 +R 00 00 01 00 00 04 03 00 +T F8 12 00 00 ED 42 20 05 +R 00 00 01 00 +T FC 12 00 00 +R 00 00 01 00 +T FC 12 00 00 21 00 00 18 59 +R 00 00 01 00 +T 01 13 00 00 +R 00 00 01 00 +T 01 13 00 00 DD 6E 02 DD 66 03 23 7E E6 FF 4F +R 00 00 01 00 +T 0C 13 00 00 06 00 41 0E 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 17 13 00 00 23 23 7E E6 FF 5F 16 00 69 60 19 +R 00 00 01 00 +T 22 13 00 00 DD 75 FE DD 74 FF 7D B4 20 05 +R 00 00 01 00 +T 2C 13 00 00 +R 00 00 01 00 +T 2C 13 00 00 21 00 00 18 29 +R 00 00 01 00 +T 31 13 00 00 +R 00 00 01 00 +T 31 13 00 00 DD 6E 02 DD 66 03 7E FE 07 20 11 +R 00 00 01 00 +T 3C 13 00 00 +R 00 00 01 00 +T 3C 13 00 00 DD 4E FE DD 46 FF DD 6E 02 DD 66 +R 00 00 01 00 +T 47 13 00 00 03 A7 ED 42 18 0D +R 00 00 01 00 +T 4D 13 00 00 +R 00 00 01 00 +T 4D 13 00 00 DD 6E FE DD 66 FF DD 4E 02 DD 46 +R 00 00 01 00 +T 58 13 00 00 03 09 +R 00 00 01 00 +T 5A 13 00 00 +R 00 00 01 00 +T 5A 13 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4E 55 4C 4C 20 61 72 67 75 6D 65 +R 00 00 02 00 +T 0B 00 00 00 6E 74 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 72 65 67 65 78 70 20 74 6F 6F 20 +R 00 00 02 00 +T 19 00 00 00 62 69 67 00 +R 00 00 02 00 +T 1D 00 00 00 +R 00 00 02 00 +T 1D 00 00 00 6F 75 74 20 6F 66 20 73 70 61 63 +R 00 00 02 00 +T 28 00 00 00 65 00 +R 00 00 02 00 +T 2A 00 00 00 +R 00 00 02 00 +T 2A 00 00 00 74 6F 6F 20 6D 61 6E 79 20 28 29 +R 00 00 02 00 +T 35 00 00 00 00 +R 00 00 02 00 +T 36 00 00 00 +R 00 00 02 00 +T 36 00 00 00 75 6E 6D 61 74 63 68 65 64 20 28 +R 00 00 02 00 +T 41 00 00 00 29 00 +R 00 00 02 00 +T 43 00 00 00 +R 00 00 02 00 +T 43 00 00 00 6A 75 6E 6B 20 6F 6E 20 65 6E 64 +R 00 00 02 00 +T 4E 00 00 00 00 +R 00 00 02 00 +T 4F 00 00 00 +R 00 00 02 00 +T 4F 00 00 00 2A 2B 20 6F 70 65 72 61 6E 64 20 +R 00 00 02 00 +T 5A 00 00 00 63 6F 75 6C 64 20 62 65 20 65 6D +R 00 00 02 00 +T 65 00 00 00 70 74 79 00 +R 00 00 02 00 +T 69 00 00 00 +R 00 00 02 00 +T 69 00 00 00 6E 65 73 74 65 64 20 2A 3F 2B 00 +R 00 00 02 00 +T 74 00 00 00 +R 00 00 02 00 +T 74 00 00 00 69 6E 76 61 6C 69 64 20 5B 5D 20 +R 00 00 02 00 +T 7F 00 00 00 72 61 6E 67 65 00 +R 00 00 02 00 +T 85 00 00 00 +R 00 00 02 00 +T 85 00 00 00 75 6E 6D 61 74 63 68 65 64 20 5B +R 00 00 02 00 +T 90 00 00 00 5D 00 +R 00 00 02 00 +T 92 00 00 00 +R 00 00 02 00 +T 92 00 00 00 69 6E 74 65 72 6E 61 6C 20 75 72 +R 00 00 02 00 +T 9D 00 00 00 70 00 +R 00 00 02 00 +T 9F 00 00 00 +R 00 00 02 00 +T 9F 00 00 00 3F 2B 2A 20 66 6F 6C 6C 6F 77 73 +R 00 00 02 00 +T AA 00 00 00 20 6E 6F 74 68 69 6E 67 00 +R 00 00 02 00 +T B3 00 00 00 +R 00 00 02 00 +T B3 00 00 00 74 72 61 69 6C 69 6E 67 20 5C 00 +R 00 00 02 00 +T BE 00 00 00 +R 00 00 02 00 +T BE 00 00 00 5E 24 2E 5B 28 29 7C 3F 2B 2A 5C +R 00 00 02 00 +T C9 00 00 00 00 +R 00 00 02 00 +T CA 00 00 00 +R 00 00 02 00 +T CA 00 00 00 69 6E 74 65 72 6E 61 6C 20 64 69 +R 00 00 02 00 +T D5 00 00 00 73 61 73 74 65 72 00 +R 00 00 02 00 +T DC 00 00 00 +R 00 00 02 00 +T DC 00 00 00 4E 55 4C 4C 20 70 61 72 61 6D 65 +R 00 00 02 00 +T E7 00 00 00 74 65 72 00 +R 00 00 02 00 +T EB 00 00 00 +R 00 00 02 00 +T EB 00 00 00 63 6F 72 72 75 70 74 65 64 20 70 +R 00 00 02 00 +T F6 00 00 00 72 6F 67 72 61 6D 00 +R 00 00 02 00 +T FD 00 00 00 +R 00 00 02 00 +T FD 00 00 00 6D 65 6D 6F 72 79 20 63 6F 72 72 +R 00 00 02 00 +T 08 01 00 00 75 70 74 69 6F 6E 00 +R 00 00 02 00 +T 0F 01 00 00 +R 00 00 02 00 +T 0F 01 00 00 63 6F 72 72 75 70 74 65 64 20 70 +R 00 00 02 00 +T 1A 01 00 00 6F 69 6E 74 65 72 73 00 +R 00 00 02 00 +T 22 01 00 00 +R 00 00 02 00 +T 22 01 00 00 69 6E 74 65 72 6E 61 6C 20 66 6F +R 00 00 02 00 +T 2D 01 00 00 75 6C 75 70 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 05 00 00 00 +R 00 00 03 00 +T 05 00 00 00 +R 00 00 03 00 +T 07 00 00 00 +R 00 00 03 00 +T 07 00 00 00 +R 00 00 03 00 +T 0B 00 00 00 +R 00 00 03 00 +T 0B 00 00 00 +R 00 00 03 00 +T 0D 00 00 00 +R 00 00 03 00 +T 0D 00 00 00 +R 00 00 03 00 +T 0F 00 00 00 +R 00 00 03 00 +T 0F 00 00 00 +R 00 00 03 00 +T 11 00 00 00 +R 00 00 03 00 +T 11 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/regsub.rel b/src/nos/lib/crt_banked_lib/regsub.rel new file mode 100644 index 00000000..ea4232cd --- /dev/null +++ b/src/nos/lib/crt_banked_lib/regsub.rel @@ -0,0 +1,219 @@ +XL4 +H 3 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strncpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _regerror Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D2 flags 0 +S _regsub Def00000000 +A CSTR size 46 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 7E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 03 28 10 DD 7E 04 DD B6 05 28 +R 00 00 01 00 +T 14 00 00 00 08 DD 7E 0A DD B6 0B 20 0E +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 04 00 +T 23 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 29 00 00 00 CF 01 00 00 +R 00 00 01 00 00 04 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 2E 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 36 00 00 00 06 00 3E 9C A9 B0 28 0E +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 11 14 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 04 00 +T 44 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 4A 00 00 00 CF 01 00 00 +R 00 00 01 00 00 04 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 DD 6E 04 DD 66 05 DD 75 F6 DD 74 +R 00 00 01 00 +T 57 00 00 00 F7 DD 6E 0A DD 66 0B DD 75 F8 DD +R 00 00 01 00 +T 62 00 00 00 74 F9 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 6E F6 DD 66 F7 23 DD 75 F6 DD +R 00 00 01 00 +T 6F 00 00 00 74 F7 2B 46 DD 70 FA 04 05 CA +R 00 00 01 00 +T 79 00 00 00 BF 01 00 00 +R 00 00 01 00 00 04 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 DD 7E FA FE 26 20 09 +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 AF DD 77 FB DD 77 FC 18 42 +R 00 00 01 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 DD 7E FA FE 5C 20 33 DD 6E F6 DD +R 00 00 01 00 +T 96 00 00 00 66 F7 7E FE 30 38 28 DD 6E F6 DD +R 00 00 01 00 +T A1 00 00 00 66 F7 3E 39 BE 38 1D +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 DD 6E F6 DD 66 F7 23 DD 75 F6 DD +R 00 00 01 00 +T B3 00 00 00 74 F7 2B 4E 06 00 21 D0 FF 09 DD +R 00 00 01 00 +T BE 00 00 00 75 FB DD 74 FC 18 08 +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 DD 36 FB FF DD 36 FC FF +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 DD CB FC 7E 28 44 +R 00 00 01 00 +T D3 00 00 00 +R 00 00 01 00 +T D3 00 00 00 DD 7E FA FE 5C 20 28 DD 6E F6 DD +R 00 00 01 00 +T DE 00 00 00 66 F7 7E FE 5C 28 0B DD 6E F6 DD +R 00 00 01 00 +T E9 00 00 00 66 F7 7E FE 26 20 12 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 6E F6 DD 66 F7 23 DD 75 F6 DD +R 00 00 01 00 +T FB 00 00 00 74 F7 2B 46 DD 70 FA +R 00 00 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T 0D 01 00 00 74 F9 2B DD 46 FA 70 C3 +R 00 00 01 00 +T 15 01 00 00 BC 01 00 00 +R 00 00 01 00 00 04 01 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 DD 6E FB DD 66 FC 29 DD 4E 02 DD +R 00 00 01 00 +T 22 01 00 00 46 03 09 7E 23 B6 CA BC 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 2B 01 00 00 DD 6E FB DD 66 FC 29 DD 4E 02 DD +R 00 00 01 00 +T 36 01 00 00 46 03 09 01 14 00 09 7E 23 B6 28 +R 00 00 01 00 +T 41 01 00 00 7A +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 DD 6E FB DD 66 FC 29 DD 4E 02 DD +R 00 00 01 00 +T 4D 01 00 00 46 03 09 5E 23 56 DD 6E FB DD 66 +R 00 00 01 00 +T 58 01 00 00 FC 29 09 01 14 00 09 46 23 66 68 +R 00 00 01 00 +T 63 01 00 00 A7 ED 52 DD 75 FD DD 74 FE E5 DD +R 00 00 01 00 +T 6E 01 00 00 6E FB DD 66 FC 29 DD 4E 02 DD 46 +R 00 00 01 00 +T 79 01 00 00 03 09 4E 23 46 DD 5E F8 DD 56 F9 +R 00 00 01 00 +T 84 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 8A 01 00 00 00 00 00 00 F1 21 02 00 39 7E DD +R 00 00 01 00 02 04 00 00 +T 93 01 00 00 86 FD 77 23 7E DD 8E FE 77 DD 7E +R 00 00 01 00 +T 9E 01 00 00 FD DD B6 FE 28 18 DD 6E F8 DD 66 +R 00 00 01 00 +T A9 01 00 00 F9 2B 7E B7 20 0D +R 00 00 01 00 +T AF 01 00 00 +R 00 00 01 00 +T AF 01 00 00 +R 00 00 01 00 +T AF 01 00 00 +R 00 00 01 00 +T AF 01 00 00 11 31 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 04 00 +T B5 01 00 00 00 00 00 00 CD 00 00 00 00 18 13 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T BC 01 00 00 +R 00 00 01 00 +T BC 01 00 00 +R 00 00 01 00 +T BC 01 00 00 +R 00 00 01 00 +T BC 01 00 00 C3 64 00 00 00 +R 00 00 01 00 00 05 01 00 +T BF 01 00 00 +R 00 00 01 00 +T BF 01 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T CA 01 00 00 74 F9 2B 36 00 +R 00 00 01 00 +T CF 01 00 00 +R 00 00 01 00 +T CF 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4E 55 4C 4C 20 70 61 72 6D 20 74 +R 00 00 02 00 +T 0B 00 00 00 6F 20 72 65 67 73 75 62 00 +R 00 00 02 00 +T 14 00 00 00 +R 00 00 02 00 +T 14 00 00 00 64 61 6D 61 67 65 64 20 72 65 67 +R 00 00 02 00 +T 1F 00 00 00 65 78 70 20 66 65 64 20 74 6F 20 +R 00 00 02 00 +T 2A 00 00 00 72 65 67 73 75 62 00 +R 00 00 02 00 +T 31 00 00 00 +R 00 00 02 00 +T 31 00 00 00 64 61 6D 61 67 65 64 20 6D 61 74 +R 00 00 02 00 +T 3C 00 00 00 63 68 20 73 74 72 69 6E 67 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/rename.rel b/src/nos/lib/crt_banked_lib/rename.rel new file mode 100644 index 00000000..c69d2b38 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/rename.rel @@ -0,0 +1,36 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _unlink Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _link Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36 flags 0 +S _rename Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 28 08 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E FE DD 66 FF 18 0E +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 2D 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_banked_lib/rewind.rel b/src/nos/lib/crt_banked_lib/rewind.rel new file mode 100644 index 00000000..8c9a618a --- /dev/null +++ b/src/nos/lib/crt_banked_lib/rewind.rel @@ -0,0 +1,170 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _lseek Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1DD flags 0 +S _rewind Def00000000 +S _fseek Def00000030 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 E5 21 +R 00 00 01 00 02 05 06 00 +T 08 00 00 00 00 00 E5 21 00 00 E5 3E +R 00 00 01 00 +T 10 00 00 00 30 00 00 00 21 30 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 15 00 00 00 00 00 00 00 F1 F1 F1 21 0C 00 DD +R 00 00 01 00 02 04 00 00 +T 1E 00 00 00 4E 02 DD 46 03 09 7E E6 FF 77 23 +R 00 00 01 00 +T 29 00 00 00 7E E6 FC 77 C3 00 00 00 00 +R 00 00 01 00 02 09 02 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 CD 00 00 00 00 FC FF 21 0C 00 DD +R 00 00 01 00 02 05 08 00 +T 39 00 00 00 4E 02 DD 46 03 09 7E E6 40 4F 23 +R 00 00 01 00 +T 44 00 00 00 7E E6 04 47 3E 40 A9 B0 C2 +R 00 00 01 00 +T 4D 00 00 00 8E 01 00 00 DD 7E 0E DD B6 0F 28 +R 00 00 01 00 00 04 01 00 +T 56 00 00 00 0B 3E 01 DD AE 0E DD B6 0F C2 +R 00 00 01 00 +T 60 00 00 00 8E 01 00 00 +R 00 00 01 00 00 04 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 21 01 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 6D 00 00 00 E5 21 0A 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 78 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 7E 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 85 00 00 00 F1 DD 75 FC DD 74 FD DD 71 FE DD +R 00 00 01 00 +T 90 00 00 00 70 FF 7D A4 A1 A0 3C 20 06 +R 00 00 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 FF FF C3 DA 01 00 00 +R 00 00 01 00 00 08 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 3E 01 DD AE 0E DD B6 0F 20 46 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 AF DD 77 0E DD 77 0F 21 0E 00 39 +R 00 00 01 00 +T B4 00 00 00 E5 DD 4E 02 DD 46 03 03 03 69 60 +R 00 00 01 00 +T BF 00 00 00 4E 23 46 DD 6E 02 DD 66 03 56 23 +R 00 00 01 00 +T CA 00 00 00 66 6A A7 ED 42 EB 7A 07 9F 4F 41 +R 00 00 01 00 +T D5 00 00 00 C5 D5 DD 6E FC DD 66 FD C1 09 EB +R 00 00 01 00 +T E0 00 00 00 DD 6E FE DD 66 FF C1 ED 4A 4D 44 +R 00 00 01 00 +T EB 00 00 00 E1 CD 00 00 00 00 +R 00 00 01 00 02 06 04 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 DD 7E 0E DD B6 0F C2 8E 01 00 00 +R 00 00 01 00 00 0B 01 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD +R 00 00 01 00 +T 03 01 00 00 66 FD E5 DD 4E 0C DD 46 0D DD 6E +R 00 00 01 00 +T 0E 01 00 00 0A DD 66 0B CD 00 00 00 00 30 77 +R 00 00 01 00 02 09 07 00 +T 17 01 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 22 01 00 00 21 06 00 DD 5E 02 DD 56 03 19 56 +R 00 00 01 00 +T 2D 01 00 00 23 66 6A A7 ED 42 7C 07 9F 4F 41 +R 00 00 01 00 +T 38 01 00 00 C5 E5 DD 6E FC DD 66 FD C1 09 EB +R 00 00 01 00 +T 43 01 00 00 DD 6E FE DD 66 FF C1 ED 4A E5 D5 +R 00 00 01 00 +T 4E 01 00 00 DD 4E 0C DD 46 0D DD 6E 0A DD 66 +R 00 00 01 00 +T 59 01 00 00 0B CD 00 00 00 00 38 2F +R 00 00 01 00 02 06 07 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 DD 4E FC DD 46 FD DD 6E 0A DD 66 +R 00 00 01 00 +T 6A 01 00 00 0B A7 ED 42 E5 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 75 01 00 00 03 03 69 60 4E 23 46 E1 09 E5 DD +R 00 00 01 00 +T 80 01 00 00 6E 02 DD 66 03 C1 71 23 70 21 +R 00 00 01 00 +T 8A 01 00 00 00 00 18 4C +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 96 01 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 9D 01 00 00 A4 3C 28 31 DD 6E 0E DD 66 0F E5 +R 00 00 01 00 +T A8 01 00 00 DD 6E 0C DD 66 0D E5 DD 6E 0A DD +R 00 00 01 00 +T B3 01 00 00 66 0B E5 21 0A 00 DD 4E 02 DD 46 +R 00 00 01 00 +T BE 01 00 00 03 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T C6 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T CD 01 00 00 F1 CB 78 28 05 +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 21 FF FF 18 03 +R 00 00 01 00 +T D7 01 00 00 +R 00 00 01 00 +T D7 01 00 00 21 00 00 +R 00 00 01 00 +T DA 01 00 00 +R 00 00 01 00 +T DA 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_banked_lib/rewindir.rel b/src/nos/lib/crt_banked_lib/rewindir.rel new file mode 100644 index 00000000..42521e77 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/rewindir.rel @@ -0,0 +1,46 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _lseek Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 58 flags 0 +S _rewinddir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 1A 21 +R 00 00 01 00 02 05 04 00 +T 08 00 00 00 06 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 13 00 00 00 B6 28 0B DD 6E 02 DD 66 03 7E 23 +R 00 00 01 00 +T 1E 00 00 00 B6 20 08 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 0E 00 22 00 00 00 00 18 2C +R 00 00 01 00 02 08 05 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 6E 02 DD 66 03 23 23 AF 77 23 +R 00 00 01 00 +T 34 00 00 00 77 21 00 00 E5 21 00 00 E5 21 +R 00 00 01 00 +T 3E 00 00 00 00 00 E5 DD 6E 02 DD 66 03 5E 23 +R 00 00 01 00 +T 49 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 4F 00 00 00 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 05 00 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/rmdir.rel b/src/nos/lib/crt_banked_lib/rmdir.rel new file mode 100644 index 00000000..b2814671 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/rmdir.rel @@ -0,0 +1,201 @@ +XL4 +H 3 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _unlink Ref00000000 +S _strcat Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _close Ref00000000 +S _strlen Ref00000000 +S _strcmp Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S _strcpy Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17C flags 0 +S _rmdir Def00000000 +A CSTR size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D0 FE DD 5E 02 DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 14 00 00 00 04 00 09 4D 44 21 00 01 A7 ED 42 +R 00 00 01 00 +T 1F 00 00 00 30 09 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 24 00 22 00 00 00 00 C3 +R 00 00 01 00 02 08 0A 00 +T 28 00 00 00 71 01 00 00 +R 00 00 01 00 00 04 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 21 00 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 35 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 3B 00 00 00 CD 00 00 00 00 7D B4 28 03 +R 00 00 01 00 02 05 00 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 C3 71 01 00 00 +R 00 00 01 00 00 05 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 21 04 00 39 7E E6 00 47 23 7E E6 +R 00 00 01 00 +T 50 00 00 00 40 B0 20 09 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 21 14 00 22 00 00 00 00 C3 +R 00 00 01 00 02 08 0A 00 +T 5B 00 00 00 71 01 00 00 +R 00 00 01 00 00 04 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 21 00 00 E5 DD 6E 02 DD 66 03 E5 +R 00 00 01 00 +T 68 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T 6E 00 00 00 00 00 00 00 F1 F1 DD 75 FE DD 74 +R 00 00 01 00 02 04 00 00 +T 77 00 00 00 FF CB 7C 28 03 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 C3 71 01 00 00 +R 00 00 01 00 00 05 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 21 10 00 E5 21 20 01 39 4D 44 DD +R 00 00 01 00 +T 8A 00 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 92 00 00 00 00 00 00 00 CD 00 00 00 00 F1 3E +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 99 00 00 00 10 AD B4 20 55 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 DD 6E EE DD 66 EF 7D B4 28 30 01 +R 00 00 01 00 +T A9 00 00 00 00 00 00 00 21 1E 01 39 11 02 00 +R 00 00 01 00 00 04 02 00 +T B2 00 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T B7 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T BE 00 00 00 28 18 01 02 00 00 00 21 1E 01 39 +R 00 00 01 00 00 07 02 00 +T C7 00 00 00 11 02 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T CF 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T D6 00 00 00 20 02 +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 18 A5 +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T E2 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T E9 00 00 00 27 00 22 00 00 00 00 C3 +R 00 00 01 00 02 07 0A 00 +T EF 00 00 00 71 01 00 00 18 8C +R 00 00 01 00 00 04 01 00 +T F3 00 00 00 +R 00 00 01 00 +T F3 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T FB 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 02 01 00 00 4E 02 DD 46 03 21 1E 00 39 5D 54 +R 00 00 01 00 +T 0D 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 13 01 00 00 00 00 00 00 01 05 00 00 00 21 +R 00 00 01 00 02 04 00 00 00 09 02 00 +T 19 01 00 00 1E 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 21 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 27 01 00 00 1E 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 2F 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 36 01 00 00 28 02 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 18 37 +R 00 00 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 01 00 00 00 00 21 1E 00 39 5D 54 +R 00 00 01 00 00 05 02 00 +T 43 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 49 01 00 00 00 00 00 00 21 1E 00 39 5D 54 3E +R 00 00 01 00 02 04 00 00 +T 52 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 57 01 00 00 00 00 00 00 7D B4 28 02 +R 00 00 01 00 02 04 00 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 18 12 +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 67 01 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 6E 01 00 00 B4 28 05 +R 00 00 01 00 +T 71 01 00 00 +R 00 00 01 00 +T 71 01 00 00 +R 00 00 01 00 +T 71 01 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 21 00 00 +R 00 00 01 00 +T 79 01 00 00 +R 00 00 01 00 +T 79 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2E 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 2E 2E 00 +R 00 00 02 00 +T 05 00 00 00 +R 00 00 02 00 +T 05 00 00 00 2F 2E 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/scanf.rel b/src/nos/lib/crt_banked_lib/scanf.rel new file mode 100644 index 00000000..51f83677 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/scanf.rel @@ -0,0 +1,26 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _stdin Ref00000000 +S _vfscanf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2F flags 0 +S _scanf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0E 00 39 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 4E 0A DD 46 0B 11 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 1D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 23 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 2C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/setbuff.rel b/src/nos/lib/crt_banked_lib/setbuff.rel new file mode 100644 index 00000000..c2221c0f --- /dev/null +++ b/src/nos/lib/crt_banked_lib/setbuff.rel @@ -0,0 +1,72 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size CF flags 0 +S _setbuffer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 2B 0A 01 00 +T 06 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 0C 00 00 00 0C 00 DD 5E 02 DD 56 03 19 7E E6 +R 00 00 01 00 +T 17 00 00 00 04 28 15 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 25 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 2A 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 3A 00 00 00 E6 F8 77 23 7E E6 FF 77 DD 7E 04 +R 00 00 01 00 +T 45 00 00 00 DD B6 05 20 35 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 55 00 00 00 21 0E 00 09 EB E1 73 23 72 21 +R 00 00 01 00 +T 5F 00 00 00 08 00 09 E5 21 0E 00 09 11 08 00 +R 00 00 01 00 +T 6A 00 00 00 19 EB E1 73 23 72 21 0C 00 09 7E +R 00 00 01 00 +T 75 00 00 00 F6 02 77 23 7E F6 00 77 18 25 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 8A 00 00 00 5E 04 DD 56 05 73 23 72 21 08 00 +R 00 00 01 00 +T 95 00 00 00 09 E5 DD 6E 0A DD 66 0B 19 4D 44 +R 00 00 01 00 +T A0 00 00 00 E1 71 23 70 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 DD 6E 02 DD 66 03 23 23 E5 21 +R 00 00 01 00 +T AE 00 00 00 04 00 DD 4E 02 DD 46 03 09 E5 21 +R 00 00 01 00 +T B9 00 00 00 06 00 09 5E 23 56 E1 73 23 72 E1 +R 00 00 01 00 +T C4 00 00 00 73 23 72 69 60 73 23 72 C3 +R 00 00 01 00 +T CD 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/crt_banked_lib/setenv.rel b/src/nos/lib/crt_banked_lib/setenv.rel new file mode 100644 index 00000000..eda9b5e1 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/setenv.rel @@ -0,0 +1,296 @@ +XL4 +H 4 areas E global symbols +S _environ Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +S _memcmp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31C flags 0 +S _setenv Def00000000 +S _unsetenv Def0000027C +A IDATA0 size 2 flags 0 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF AF DD 77 F4 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 77 F5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 59 +R 00 00 01 00 02 04 01 00 +T 21 00 00 00 50 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 27 00 00 00 CD 00 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 05 01 00 +T 30 00 00 00 2A 00 00 00 00 DD 75 F2 DD 74 F3 +R 00 00 01 00 02 05 00 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 6E F2 DD 66 F3 4D 44 03 03 DD +R 00 00 01 00 +T 44 00 00 00 71 F2 DD 70 F3 46 23 66 68 DD 75 +R 00 00 01 00 +T 4F 00 00 00 FA DD 74 FB 7D B4 28 3E +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 6E F6 DD 66 F7 E5 DD 4E 02 DD +R 00 00 01 00 +T 62 00 00 00 46 03 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 6B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 70 00 00 00 00 00 00 00 F1 7D B4 20 14 DD 6E +R 00 00 01 00 02 04 01 00 +T 79 00 00 00 F6 DD 66 F7 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T 84 00 00 00 7E FE 3D 20 02 +R 00 00 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 18 0A +R 00 00 01 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 DD 34 F4 20 03 DD 34 F5 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 18 A4 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 DD 7E FA DD B6 FB C2 B1 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 DD 6E F4 DD 66 F5 23 23 29 EB 3E +R 00 00 01 00 +T A9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T AE 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 01 00 +T B7 00 00 00 B4 20 0C +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 21 0C 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 07 00 +T C3 00 00 00 C3 79 02 00 00 +R 00 00 01 00 00 05 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 DD 6E F4 DD 66 F5 29 E5 ED 4B +R 00 00 01 00 +T D0 00 00 00 00 00 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 02 04 00 00 +T D9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T DE 00 00 00 00 00 00 00 F1 DD 6E F8 DD 66 F9 +R 00 00 01 00 02 04 01 00 +T E7 00 00 00 DD 4E F6 DD 46 F7 09 EB 13 13 3E +R 00 00 01 00 +T F2 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T F7 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 01 00 +T 00 01 00 00 B4 20 10 +R 00 00 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 0B 01 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 12 01 00 00 A7 +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 6E F6 DD 66 F7 E5 DD 4E 02 DD +R 00 00 01 00 +T 1E 01 00 00 46 03 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 27 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 2C 01 00 00 00 00 00 00 F1 DD 6E F6 DD 66 F7 +R 00 00 01 00 02 04 01 00 +T 35 01 00 00 DD 4E FA DD 46 FB 09 36 3D DD 6E +R 00 00 01 00 +T 40 01 00 00 F8 DD 66 F9 23 E5 DD 4E 04 DD 46 +R 00 00 01 00 +T 4B 01 00 00 05 DD 6E F6 DD 66 F7 DD 5E FA DD +R 00 00 01 00 +T 56 01 00 00 56 FB 19 EB 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 5E 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 65 01 00 00 6E F4 DD 66 F5 29 DD 4E FC DD 46 +R 00 00 01 00 +T 70 01 00 00 FD 09 DD 5E FA DD 56 FB 73 23 72 +R 00 00 01 00 +T 7B 01 00 00 DD 6E F4 DD 66 F5 29 09 23 23 AF +R 00 00 01 00 +T 86 01 00 00 77 23 77 2A 00 00 00 00 7D B4 28 +R 00 00 01 00 00 08 02 00 +T 8F 01 00 00 0C +R 00 00 01 00 +T 90 01 00 00 +R 00 00 01 00 +T 90 01 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 02 00 2B 0B 06 00 +T 96 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 9C 01 00 00 +R 00 00 01 00 +T 9C 01 00 00 DD 6E FC DD 66 FD 22 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T A5 01 00 00 DD 6E FC DD 66 FD 22 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T AE 01 00 00 C3 76 02 00 00 +R 00 00 01 00 00 05 01 00 +T B1 01 00 00 +R 00 00 01 00 +T B1 01 00 00 DD 7E 0A DD B6 0B CA 76 02 00 00 +R 00 00 01 00 00 0B 01 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T C2 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T C9 01 00 00 75 FC DD 74 FD DD 6E F8 DD 66 F9 +R 00 00 01 00 +T D4 01 00 00 DD 4E F6 DD 46 F7 09 4D 44 03 DD +R 00 00 01 00 +T DF 01 00 00 6E FC DD 66 FD A7 ED 42 30 67 +R 00 00 01 00 +T E9 01 00 00 +R 00 00 01 00 +T E9 01 00 00 DD 6E F8 DD 66 F9 DD 4E F6 DD 46 +R 00 00 01 00 +T F4 01 00 00 F7 09 EB 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T FC 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 03 02 00 00 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 0B 02 00 00 +R 00 00 01 00 +T 0B 02 00 00 C3 BA 00 00 00 +R 00 00 01 00 00 05 01 00 +T 0E 02 00 00 +R 00 00 01 00 +T 0E 02 00 00 DD 6E F6 DD 66 F7 E5 DD 4E 02 DD +R 00 00 01 00 +T 19 02 00 00 46 03 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 22 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 27 02 00 00 00 00 00 00 F1 DD 6E F6 DD 66 F7 +R 00 00 01 00 02 04 01 00 +T 30 02 00 00 DD 4E FE DD 46 FF 09 36 3D DD 6E +R 00 00 01 00 +T 3B 02 00 00 F2 DD 66 F3 2B 2B DD 75 F2 DD 74 +R 00 00 01 00 +T 46 02 00 00 F3 DD 71 FA DD 70 FB 71 23 70 +R 00 00 01 00 +T 50 02 00 00 +R 00 00 01 00 +T 50 02 00 00 DD 6E F8 DD 66 F9 23 E5 DD 4E 04 +R 00 00 01 00 +T 5B 02 00 00 DD 46 05 DD 6E F6 DD 66 F7 DD 5E +R 00 00 01 00 +T 66 02 00 00 FA DD 56 FB 19 EB 13 3E +R 00 00 01 00 +T 6E 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 73 02 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T 76 02 00 00 +R 00 00 01 00 +T 76 02 00 00 +R 00 00 01 00 +T 76 02 00 00 21 00 00 +R 00 00 01 00 +T 79 02 00 00 +R 00 00 01 00 +T 79 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 7C 02 00 00 +R 00 00 01 00 +T 7C 02 00 00 CD 00 00 00 00 F8 FF DD 5E 02 DD +R 00 00 01 00 02 05 08 00 +T 85 02 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 8A 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 91 02 00 00 FE DD 74 FF 2A 00 00 00 00 DD 75 +R 00 00 01 00 02 09 00 00 +T 9A 02 00 00 F8 DD 74 F9 DD 75 FA DD 74 FB +R 00 00 01 00 +T A4 02 00 00 +R 00 00 01 00 +T A4 02 00 00 DD 6E F8 DD 66 F9 4D 44 03 03 DD +R 00 00 01 00 +T AF 02 00 00 71 F8 DD 70 F9 46 23 66 68 DD 75 +R 00 00 01 00 +T BA 02 00 00 FC DD 74 FD 7D B4 28 4D +R 00 00 01 00 +T C2 02 00 00 +R 00 00 01 00 +T C2 02 00 00 DD 6E FE DD 66 FF E5 DD 4E 02 DD +R 00 00 01 00 +T CD 02 00 00 46 03 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T D6 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T DB 02 00 00 00 00 00 00 F1 7D B4 20 12 DD 6E +R 00 00 01 00 02 04 01 00 +T E4 02 00 00 FE DD 66 FF DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T EF 02 00 00 7E FE 3D 28 19 +R 00 00 01 00 +T F4 02 00 00 +R 00 00 01 00 +T F4 02 00 00 +R 00 00 01 00 +T F4 02 00 00 +R 00 00 01 00 +T F4 02 00 00 DD 6E FA DD 66 FB 4D 44 03 03 DD +R 00 00 01 00 +T FF 02 00 00 71 FA DD 70 FB DD 4E FC DD 46 FD +R 00 00 01 00 +T 0A 03 00 00 71 23 70 +R 00 00 01 00 +T 0D 03 00 00 +R 00 00 01 00 +T 0D 03 00 00 18 95 +R 00 00 01 00 +T 0F 03 00 00 +R 00 00 01 00 +T 0F 03 00 00 DD 6E FA DD 66 FB AF 77 23 77 C3 +R 00 00 01 00 +T 1A 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/setgrent.rel b/src/nos/lib/crt_banked_lib/setgrent.rel new file mode 100644 index 00000000..dcd1ac27 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/setgrent.rel @@ -0,0 +1,86 @@ +XL4 +H 5 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _close Ref00000000 +S ___getgrent Ref00000000 +S .__.ABS. Def00000000 +S _open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6B flags 0 +S _endgrent Def0000002E +S _getgrent Def0000004D +S _setgrent Def00000000 +A CSTR size B flags 0 +A IDATA0 size 4 flags 0 +S __path_group Def00000002 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 2A 00 00 00 00 7D A4 3C 28 0C +R 00 00 01 00 00 06 03 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 02 00 +T 0F 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 00 80 E5 2A 02 00 00 00 E5 3E +R 00 00 01 00 00 09 03 00 +T 1E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 23 00 00 00 00 00 00 00 F1 F1 22 00 00 00 00 +R 00 00 01 00 02 04 00 00 00 0B 03 00 +T 2A 00 00 00 D1 C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 D5 2A 00 00 00 00 7D A4 3C 28 0C +R 00 00 01 00 00 06 03 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 02 00 +T 3D 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 21 FF FF 22 00 00 00 00 D1 C3 +R 00 00 01 00 00 08 03 00 +T 4B 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 D5 2A 00 00 00 00 7D A4 3C 20 05 +R 00 00 01 00 00 06 03 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 21 00 00 18 0C +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 03 00 +T 61 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 D1 C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 65 74 63 2F 67 72 6F 75 70 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 FF FF 00 00 00 00 +R 00 00 04 00 00 06 02 00 diff --git a/src/nos/lib/crt_banked_lib/setjmp.rel b/src/nos/lib/crt_banked_lib/setjmp.rel new file mode 100644 index 00000000..b3c7e8e4 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/setjmp.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 3 global symbols +S leave_entry Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 39 flags 0 +S _setjmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 04 00 39 EB 73 23 72 23 3A +R 00 00 01 00 +T 0A 00 00 00 FC 10 77 23 36 0F 23 71 23 70 23 +R 00 00 01 00 +T 15 00 00 00 DD E5 D1 73 23 72 23 FD E5 D1 73 +R 00 00 01 00 +T 20 00 00 00 23 72 23 EB E1 E3 EB 73 23 72 23 +R 00 00 01 00 +T 2B 00 00 00 EB E3 EB 73 23 72 21 00 00 E5 EB +R 00 00 01 00 +T 36 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/crt_banked_lib/setpwent.rel b/src/nos/lib/crt_banked_lib/setpwent.rel new file mode 100644 index 00000000..fbb7450c --- /dev/null +++ b/src/nos/lib/crt_banked_lib/setpwent.rel @@ -0,0 +1,112 @@ +XL4 +H 5 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _printf Ref00000000 +S _close Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ___getpwent Ref00000000 +S _open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 82 flags 0 +S _endpwent Def00000045 +S _getpwent Def00000064 +S _setpwent Def00000000 +A CSTR size 27 flags 0 +A IDATA0 size 4 flags 0 +S __path_passwd Def00000002 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 2A 00 00 00 00 7D A4 3C 28 0C +R 00 00 01 00 00 06 03 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 03 00 +T 0F 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 00 80 E5 2A 02 00 00 00 E5 3E +R 00 00 01 00 00 09 03 00 +T 1E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 23 00 00 00 00 00 00 00 F1 F1 22 00 00 00 00 +R 00 00 01 00 02 04 00 00 00 0B 03 00 +T 2A 00 00 00 7D A4 3C 20 12 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 2A 00 00 00 00 E5 21 0C 00 00 00 +R 00 00 01 00 02 05 05 00 00 0B 02 00 +T 36 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 3C 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 D1 C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 D5 2A 00 00 00 00 7D A4 3C 28 0C +R 00 00 01 00 00 06 03 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 03 00 +T 54 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 21 FF FF 22 00 00 00 00 D1 C3 +R 00 00 01 00 00 08 03 00 +T 62 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 D5 2A 00 00 00 00 7D A4 3C 28 0E +R 00 00 01 00 00 06 03 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 06 00 +T 73 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 7A 00 00 00 03 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 21 00 00 +R 00 00 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 D1 C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 65 74 63 2F 70 61 73 73 77 64 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 +T 0C 00 00 00 +R 00 00 02 00 +T 0C 00 00 00 45 52 52 4E 4F 20 25 64 20 6F 70 +R 00 00 02 00 +T 17 00 00 00 65 6E 69 6E 67 20 70 61 73 73 77 +R 00 00 02 00 +T 22 00 00 00 6F 72 64 0A 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 FF FF 00 00 00 00 +R 00 00 04 00 00 06 02 00 diff --git a/src/nos/lib/crt_banked_lib/setvbuff.rel b/src/nos/lib/crt_banked_lib/setvbuff.rel new file mode 100644 index 00000000..584eec25 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/setvbuff.rel @@ -0,0 +1,105 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11A flags 0 +S _setvbuf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 2B 0A 01 00 +T 06 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 0C 00 00 00 0C 00 DD 5E 02 DD 56 03 19 7E E6 +R 00 00 01 00 +T 17 00 00 00 04 28 15 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 25 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 2A 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 3A 00 00 00 E6 F8 77 23 7E E6 FF 77 21 06 00 +R 00 00 01 00 +T 45 00 00 00 09 E5 21 0E 00 09 EB E1 73 23 72 +R 00 00 01 00 +T 50 00 00 00 21 08 00 09 E5 21 0E 00 09 11 +R 00 00 01 00 +T 5A 00 00 00 08 00 19 EB E1 73 23 72 21 0C 00 +R 00 00 01 00 +T 65 00 00 00 09 7E F6 02 77 23 7E F6 00 77 DD +R 00 00 01 00 +T 70 00 00 00 7E 0A DD B6 0B 28 0A 3E 01 DD AE +R 00 00 01 00 +T 7B 00 00 00 0A DD B6 0B 20 6B +R 00 00 01 00 +T 81 00 00 00 +R 00 00 01 00 +T 81 00 00 00 +R 00 00 01 00 +T 81 00 00 00 +R 00 00 01 00 +T 81 00 00 00 DD 7E 0C DD B6 0D 20 08 +R 00 00 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 DD 36 0C 00 DD 36 0D 02 +R 00 00 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 DD 7E 04 DD B6 05 20 20 DD 4E 0C +R 00 00 01 00 +T 9C 00 00 00 DD 46 0D 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T A4 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T AB 00 00 00 75 04 DD 74 05 7D B4 20 05 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 21 FF FF 18 5E +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T C4 00 00 00 5E 04 DD 56 05 73 23 72 21 08 00 +R 00 00 01 00 +T CF 00 00 00 09 E5 DD 6E 0C DD 66 0D 19 EB E1 +R 00 00 01 00 +T DA 00 00 00 73 23 72 21 0C 00 09 7E DD B6 0A +R 00 00 01 00 +T E5 00 00 00 77 23 7E DD B6 0B 77 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 DD 6E 02 DD 66 03 23 23 E5 21 +R 00 00 01 00 +T F6 00 00 00 04 00 DD 4E 02 DD 46 03 09 E5 21 +R 00 00 01 00 +T 01 01 00 00 06 00 09 5E 23 56 E1 73 23 72 E1 +R 00 00 01 00 +T 0C 01 00 00 73 23 72 69 60 73 23 72 21 00 00 +R 00 00 01 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_banked_lib/sleep.rel b/src/nos/lib/crt_banked_lib/sleep.rel new file mode 100644 index 00000000..7f2ed5d7 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/sleep.rel @@ -0,0 +1,74 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _alarm Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _pause Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _signal Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BC flags 0 +S _sleep Def00000003 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 03 00 00 00 +R 00 00 01 00 +T 03 00 00 00 CD 00 00 00 00 FA FF 11 00 00 3E +R 00 00 01 00 02 05 06 00 +T 0C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 11 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 06 +R 00 00 01 00 02 04 00 00 +T 1A 00 00 00 00 11 00 00 00 00 0E 00 00 00 00 +R 00 00 01 00 00 06 01 00 29 0B 01 00 +T 20 00 00 00 C5 D5 11 0B 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 28 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 2F 00 00 00 DD 75 FC DD 74 FD DD 71 FE DD 70 +R 00 00 01 00 +T 3A 00 00 00 FF DD 7E FA DD B6 FB 28 2B +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 4E FA DD 46 FB DD 6E 02 DD 66 +R 00 00 01 00 +T 4E 00 00 00 03 A7 ED 42 38 05 21 01 00 18 0F +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 DD 4E 02 DD 46 03 DD 6E FA DD 66 +R 00 00 01 00 +T 64 00 00 00 FB A7 ED 42 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 76 00 00 00 21 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 7D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 82 00 00 00 00 00 00 00 DD 5E FA DD 56 FB 3E +R 00 00 01 00 02 04 00 00 +T 8B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 90 00 00 00 00 00 00 00 DD 75 02 DD 74 03 DD +R 00 00 01 00 02 04 00 00 +T 99 00 00 00 4E FE DD 46 FF C5 DD 4E FC DD 46 +R 00 00 01 00 +T A4 00 00 00 FD C5 11 0B 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T AC 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T B3 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 diff --git a/src/nos/lib/crt_banked_lib/sprintf.rel b/src/nos/lib/crt_banked_lib/sprintf.rel new file mode 100644 index 00000000..68fdbbd2 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/sprintf.rel @@ -0,0 +1,30 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___sputter Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___vprinter Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 47 flags 0 +S _sprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 10 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 6E 0C DD 66 0D E5 21 12 00 39 +R 00 00 01 00 +T 1F 00 00 00 E5 0E 00 00 00 00 11 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 25 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 2B 00 00 00 00 00 00 00 F1 F1 F1 DD 75 FE DD +R 00 00 01 00 02 04 00 00 +T 34 00 00 00 74 FF DD 6E 0A DD 66 0B 36 00 DD +R 00 00 01 00 +T 3F 00 00 00 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0A 01 00 diff --git a/src/nos/lib/crt_banked_lib/sputter.rel b/src/nos/lib/crt_banked_lib/sputter.rel new file mode 100644 index 00000000..02d859f5 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/sputter.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___sputter Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 4B 42 DD 6E 0A +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 66 0B 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 11 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 18 00 00 00 DD 6E 0A DD 66 0B 7E DD 86 04 77 +R 00 00 01 00 +T 23 00 00 00 23 7E DD 8E 05 77 DD 6E 04 DD 66 +R 00 00 01 00 +T 2E 00 00 00 05 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 diff --git a/src/nos/lib/crt_banked_lib/sscanf.rel b/src/nos/lib/crt_banked_lib/sscanf.rel new file mode 100644 index 00000000..761338f2 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/sscanf.rel @@ -0,0 +1,39 @@ +XL4 +H 4 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _vfscanf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 39 flags 0 +S _sscanf Def00000000 +A IDATA0 size 18 flags 0 +A CDATA0 size 18 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 10 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD DD +R 00 00 01 00 +T 14 00 00 00 4E 0A DD 46 0B ED 43 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 1D 00 00 00 E5 DD 4E 0C DD 46 0D 11 +R 00 00 01 00 +T 25 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 03 00 +T 2A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 31 00 00 00 75 FE DD 74 FF C3 00 00 00 00 +R 00 00 01 00 02 0A 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 FF FF 00 00 00 00 FF FF +R 00 00 03 00 +T 0A 00 00 00 FF FF 10 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 15 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/stdio0.rel b/src/nos/lib/crt_banked_lib/stdio0.rel new file mode 100644 index 00000000..b4ece6f3 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/stdio0.rel @@ -0,0 +1,145 @@ +XL4 +H 5 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _fflush Ref00000000 +S _atexit Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _close Ref00000000 +S _isatty Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A9 flags 0 +S ___stdio_init_vars Def0000006B +S ___stdio_close_all Def00000000 +A UDATA0 size 400 flags 0 +A IDATA0 size 4C flags 0 +S _stderr Def00000032 +S _stdin Def00000002 +S _stdout Def0000001A +S ___IO_list Def00000000 +A CDATA0 size 4C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 08 00 +T 06 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 11 +R 00 00 01 00 00 04 03 00 +T 0F 00 00 00 1A 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 02 00 +T 14 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 1A 00 00 00 32 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 02 00 +T 1F 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 DD 7E FE DD B6 FF 28 3C +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 34 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 3B 00 00 00 0A 00 DD 4E FE DD 46 FF 09 5E 23 +R 00 00 01 00 +T 46 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 4C 00 00 00 CD 00 00 00 00 21 0A 00 09 36 FF +R 00 00 01 00 02 05 00 00 +T 55 00 00 00 23 36 FF 21 16 00 09 56 23 66 6A +R 00 00 01 00 +T 60 00 00 00 DD 75 FE DD 74 FF 18 BC +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 C5 D5 2A 4A 00 00 00 7D B4 20 02 +R 00 00 01 00 00 07 03 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 18 2E +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 21 00 00 22 4A 00 00 00 11 01 00 +R 00 00 01 00 00 08 03 00 +T 7F 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 85 00 00 00 00 00 00 00 7D B4 28 0C +R 00 00 01 00 02 04 00 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 21 26 00 00 00 7E F6 01 77 23 7E +R 00 00 01 00 00 05 03 00 +T 94 00 00 00 F6 00 77 +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 0E 00 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 9D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T A2 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 D1 C1 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 02 00 00 +R 00 00 02 00 +T 00 02 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 1A 00 00 00 +R 00 00 03 00 +T 1A 00 00 00 +R 00 00 03 00 +T 32 00 00 00 +R 00 00 03 00 +T 32 00 00 00 +R 00 00 03 00 +T 4A 00 00 00 +R 00 00 03 00 +T 4A 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 00 06 02 00 00 0A 02 00 +T 06 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0A 00 00 00 00 02 00 00 00 00 10 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 13 00 00 00 00 00 00 00 00 00 00 00 02 00 00 +R 00 00 04 00 00 0B 02 00 +T 1C 00 00 00 00 02 00 00 00 02 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 20 00 00 00 00 02 00 00 00 04 00 00 01 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 26 00 00 00 20 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 31 00 00 00 00 40 00 00 00 40 00 00 00 +R 00 00 04 00 00 05 03 00 00 09 03 00 +T 36 00 00 00 40 00 00 00 40 00 00 00 +R 00 00 04 00 00 04 03 00 00 08 03 00 +T 3A 00 00 00 42 00 00 00 02 00 22 00 00 00 00 +R 00 00 04 00 00 04 03 00 +T 43 00 00 00 00 00 00 00 00 00 00 01 00 +R 00 00 04 00 diff --git a/src/nos/lib/crt_banked_lib/strcat.rel b/src/nos/lib/crt_banked_lib/strcat.rel new file mode 100644 index 00000000..71faf42b --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strcat.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S _strcat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D5 3E 00 00 00 00 +R 00 00 01 00 02 05 04 00 2B 0B 02 00 +T 06 00 00 00 21 00 00 00 00 CD 00 00 00 00 D1 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 0D 00 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 12 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 19 00 00 00 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 09 01 00 diff --git a/src/nos/lib/crt_banked_lib/strchr.rel b/src/nos/lib/crt_banked_lib/strchr.rel new file mode 100644 index 00000000..3f405fd4 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strchr.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3B flags 0 +S _strchr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 02 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 DD 6E 02 DD 66 03 46 DD 70 FE 48 +R 00 00 01 00 +T 10 00 00 00 06 00 DD 6E 04 DD 66 05 A7 ED 42 +R 00 00 01 00 +T 1B 00 00 00 20 08 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E 02 DD 66 03 18 09 +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 AF DD B6 FE 20 06 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 00 00 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 18 CA +R 00 00 01 00 diff --git a/src/nos/lib/crt_banked_lib/strcmp.rel b/src/nos/lib/crt_banked_lib/strcmp.rel new file mode 100644 index 00000000..bd753d6c --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strcmp.rel @@ -0,0 +1,43 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 57 flags 0 +S _strcmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 03 DD 75 FA DD 74 FB DD 71 FC +R 00 00 01 00 +T 14 00 00 00 DD 70 FD +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 22 00 00 00 74 FD 2B 46 DD 70 FF DD 6E FA DD +R 00 00 01 00 +T 2D 00 00 00 66 FB 23 DD 75 FA DD 74 FB 2B 4E +R 00 00 01 00 +T 38 00 00 00 DD 71 FE 79 B8 20 08 AF DD B6 FE +R 00 00 01 00 +T 43 00 00 00 28 02 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 18 D0 +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 4E FF 06 00 DD 6E FE 26 00 A7 +R 00 00 01 00 +T 52 00 00 00 ED 42 C3 00 00 00 00 +R 00 00 01 00 02 07 00 00 diff --git a/src/nos/lib/crt_banked_lib/strcpy.rel b/src/nos/lib/crt_banked_lib/strcpy.rel new file mode 100644 index 00000000..a4424973 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strcpy.rel @@ -0,0 +1,26 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27 flags 0 +S _strcpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 59 50 3E +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 0B 00 00 00 00 00 00 00 23 E5 DD 4E 04 DD 46 +R 00 00 01 00 02 04 00 00 +T 14 00 00 00 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 1C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 21 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 02 00 diff --git a/src/nos/lib/crt_banked_lib/strcspn.rel b/src/nos/lib/crt_banked_lib/strcspn.rel new file mode 100644 index 00000000..da330161 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strcspn.rel @@ -0,0 +1,43 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 52 flags 0 +S _strcspn Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E 02 DD 66 03 AF B6 28 25 DD +R 00 00 01 00 +T 1C 00 00 00 6E 02 DD 66 03 23 DD 75 02 DD 74 +R 00 00 01 00 +T 27 00 00 00 03 2B 4E 06 00 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 32 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 38 00 00 00 00 00 00 00 7D B4 20 02 +R 00 00 01 00 02 04 00 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 18 D1 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 DD 4E FE DD 46 FF DD 6E 02 DD 66 +R 00 00 01 00 +T 4B 00 00 00 03 A7 ED 42 C3 00 00 00 00 +R 00 00 01 00 02 09 01 00 diff --git a/src/nos/lib/crt_banked_lib/strdup.rel b/src/nos/lib/crt_banked_lib/strdup.rel new file mode 100644 index 00000000..8d78c24d --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strdup.rel @@ -0,0 +1,41 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 52 flags 0 +S _strdup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 23 DD +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 15 00 00 00 75 FC DD 74 FD EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 1D 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 24 00 00 00 75 FE DD 74 FF 7D B4 28 1C +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 DD 6E FC DD 66 FD E5 DD 4E 02 DD +R 00 00 01 00 +T 38 00 00 00 46 03 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 41 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 46 00 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 00 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_banked_lib/stricmp.rel b/src/nos/lib/crt_banked_lib/stricmp.rel new file mode 100644 index 00000000..c93e3193 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/stricmp.rel @@ -0,0 +1,84 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 80 flags 0 +S _stricmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 03 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 10 00 00 00 74 03 2B 46 DD 70 FE DD 6E 04 DD +R 00 00 01 00 +T 1B 00 00 00 66 05 23 DD 75 04 DD 74 05 2B 4E +R 00 00 01 00 +T 26 00 00 00 DD 71 FF 78 B9 28 43 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 DD 4E FF 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 02 00 +T 36 00 00 00 7E E6 02 28 08 DD 7E FF EE 20 47 +R 00 00 01 00 +T 41 00 00 00 18 03 +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 46 FF +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 C5 DD 4E FE 06 00 21 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 4F 00 00 00 09 7E E6 02 28 07 DD 7E FE EE 20 +R 00 00 01 00 +T 5A 00 00 00 18 03 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 7E FE +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 C1 B8 28 0B +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 DD 7E FE DD 96 FF 6F 26 00 18 0F +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 18 08 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 AF DD B6 FE 20 02 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 18 02 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 18 8B +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 21 00 00 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/crt_banked_lib/strlen.rel b/src/nos/lib/crt_banked_lib/strlen.rel new file mode 100644 index 00000000..6ca99df8 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strlen.rel @@ -0,0 +1,33 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S _strlen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E FE DD 66 FF AF B6 28 0A +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 18 EC +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 4E 02 DD 46 03 DD 6E FE DD 66 +R 00 00 01 00 +T 30 00 00 00 FF A7 ED 42 C3 00 00 00 00 +R 00 00 01 00 02 09 00 00 diff --git a/src/nos/lib/crt_banked_lib/strncat.rel b/src/nos/lib/crt_banked_lib/strncat.rel new file mode 100644 index 00000000..2c45f99a --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strncat.rel @@ -0,0 +1,59 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _memchr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9F flags 0 +S _strncat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 15 00 00 00 02 DD 56 03 19 DD 75 FC DD 74 FD +R 00 00 01 00 +T 20 00 00 00 DD 6E 0A DD 66 0B E5 01 00 00 DD +R 00 00 01 00 +T 2B 00 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 33 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 3A 00 00 00 75 FE DD 74 FF 7D B4 28 28 +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 4E 00 00 00 FF A7 ED 42 23 E5 DD 4E 04 DD 46 +R 00 00 01 00 +T 59 00 00 00 05 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 61 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 66 00 00 00 00 00 00 00 F1 18 2B +R 00 00 01 00 02 04 00 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 76 00 00 00 46 05 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 7F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 84 00 00 00 00 00 00 00 F1 DD 6E 0A DD 66 0B +R 00 00 01 00 02 04 00 00 +T 8D 00 00 00 DD 4E FC DD 46 FD 09 36 00 +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_banked_lib/strncmp.rel b/src/nos/lib/crt_banked_lib/strncmp.rel new file mode 100644 index 00000000..2e38ee83 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strncmp.rel @@ -0,0 +1,51 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 61 flags 0 +S _strncmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 36 FE 00 +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 DD 36 FF 00 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 18 00 00 00 74 0B 23 7D B4 28 32 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T 2A 00 00 00 74 05 2B 46 DD 70 FF DD 6E 02 DD +R 00 00 01 00 +T 35 00 00 00 66 03 23 DD 75 02 DD 74 03 2B 4E +R 00 00 01 00 +T 40 00 00 00 DD 71 FE 79 B8 20 06 AF DD B6 FE +R 00 00 01 00 +T 4B 00 00 00 20 02 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 18 02 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 18 BC +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 4E FF 06 00 DD 6E FE 26 00 A7 +R 00 00 01 00 +T 5C 00 00 00 ED 42 C3 00 00 00 00 +R 00 00 01 00 02 07 00 00 diff --git a/src/nos/lib/crt_banked_lib/strncpy.rel b/src/nos/lib/crt_banked_lib/strncpy.rel new file mode 100644 index 00000000..b0d2d080 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strncpy.rel @@ -0,0 +1,59 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7F flags 0 +S _strncpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 03 DD 75 FC DD 74 FD DD 71 FE +R 00 00 01 00 +T 14 00 00 00 DD 70 FF +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 7E 0A DD B6 0B 28 33 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 2A 00 00 00 74 0B DD 6E FE DD 66 FF 23 DD 75 +R 00 00 01 00 +T 35 00 00 00 FE DD 74 FF 2B 46 DD 6E FC DD 66 +R 00 00 01 00 +T 40 00 00 00 FD 23 DD 75 FC DD 74 FD 2B 70 04 +R 00 00 01 00 +T 4B 00 00 00 05 20 02 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 18 02 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 18 C5 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 5D 00 00 00 74 0B 23 7D B4 28 12 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 6F 00 00 00 74 FD 2B 36 00 18 DC +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 00 00 diff --git a/src/nos/lib/crt_banked_lib/strnicmp.rel b/src/nos/lib/crt_banked_lib/strnicmp.rel new file mode 100644 index 00000000..2ef5a438 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strnicmp.rel @@ -0,0 +1,90 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 93 flags 0 +S _strnicmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 03 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 10 00 00 00 74 0B 23 7D B4 28 76 +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 22 00 00 00 74 03 2B 46 DD 70 FE DD 6E 04 DD +R 00 00 01 00 +T 2D 00 00 00 66 05 23 DD 75 04 DD 74 05 2B 4E +R 00 00 01 00 +T 38 00 00 00 DD 71 FF 78 B9 28 43 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 4E FF 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 02 00 +T 48 00 00 00 7E E6 02 28 08 DD 7E FF EE 20 47 +R 00 00 01 00 +T 53 00 00 00 18 03 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 46 FF +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 C5 DD 4E FE 06 00 21 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 61 00 00 00 09 7E E6 02 28 07 DD 7E FE EE 20 +R 00 00 01 00 +T 6C 00 00 00 18 03 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 7E FE +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 C1 B8 28 0B +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 7E FE DD 96 FF 6F 26 00 18 10 +R 00 00 01 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 18 08 +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 AF DD B6 FE 20 02 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 18 03 +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 21 00 00 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/crt_banked_lib/strpbrk.rel b/src/nos/lib/crt_banked_lib/strpbrk.rel new file mode 100644 index 00000000..ba905d4d --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strpbrk.rel @@ -0,0 +1,51 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 40 flags 0 +S _strpbrk Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 03 00 00 00 +R 00 00 01 00 +T 03 00 00 00 +R 00 00 01 00 +T 03 00 00 00 DD 6E 02 DD 66 03 AF B6 28 2D +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 DD 6E 02 DD 66 03 4E 06 00 DD 5E +R 00 00 01 00 +T 18 00 00 00 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 1F 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 26 00 00 00 28 08 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 6E 02 DD 66 03 18 0D +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 18 C9 +R 00 00 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 21 00 00 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/strrchr.rel b/src/nos/lib/crt_banked_lib/strrchr.rel new file mode 100644 index 00000000..69b5cade --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strrchr.rel @@ -0,0 +1,59 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 68 flags 0 +S _strrchr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 15 00 00 00 02 DD 56 03 19 DD 75 FE DD 74 FF +R 00 00 01 00 +T 20 00 00 00 79 B0 20 08 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 DD 6E FE DD 66 FF 18 39 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 6E 02 DD 66 03 DD 4E FE DD 46 +R 00 00 01 00 +T 37 00 00 00 FF A7 ED 42 28 25 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 DD 6E FE DD 66 FF 2B DD 75 FE DD +R 00 00 01 00 +T 48 00 00 00 74 FF 4E 06 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 53 00 00 00 A7 ED 42 20 08 +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 DD 6E FE DD 66 FF 18 05 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 18 CA +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 21 00 00 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/strsep.rel b/src/nos/lib/crt_banked_lib/strsep.rel new file mode 100644 index 00000000..7346035b --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strsep.rel @@ -0,0 +1,53 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strpbrk Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6B flags 0 +S _strsep Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 03 56 23 66 6A DD 75 FC DD 74 +R 00 00 01 00 +T 14 00 00 00 FD 7D B4 20 05 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 21 00 00 18 4A +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 4E 04 DD 46 05 DD 5E FC DD 56 +R 00 00 01 00 +T 29 00 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 2F 00 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 00 00 +T 38 00 00 00 7D B4 28 1C +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 DD 6E FE DD 66 FF 23 E5 DD 6E 02 +R 00 00 01 00 +T 47 00 00 00 DD 66 03 C1 71 23 70 DD 6E FE DD +R 00 00 01 00 +T 52 00 00 00 66 FF 36 00 18 0A +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 DD 6E 02 DD 66 03 AF 77 23 77 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_banked_lib/strspn.rel b/src/nos/lib/crt_banked_lib/strspn.rel new file mode 100644 index 00000000..6cea6f58 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strspn.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7B flags 0 +S _strspn Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 03 DD 75 FA DD 74 FB AF DD 77 +R 00 00 01 00 +T 14 00 00 00 FE DD 77 FF +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 6E FA DD 66 FB AF B6 28 50 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 DD 6E 04 DD 66 05 DD 75 FC DD 74 +R 00 00 01 00 +T 2D 00 00 00 FD +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 6E FC DD 66 FD AF B6 28 1C DD +R 00 00 01 00 +T 39 00 00 00 6E FC DD 66 FD E5 DD 6E FA DD 66 +R 00 00 01 00 +T 44 00 00 00 FB 7E E1 BE 28 0A +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 18 DA +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 6E FC DD 66 FD AF B6 20 02 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 18 12 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 18 A6 +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 00 00 diff --git a/src/nos/lib/crt_banked_lib/strstr.rel b/src/nos/lib/crt_banked_lib/strstr.rel new file mode 100644 index 00000000..df31e27c --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strstr.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _memcmp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 86 flags 0 +S _strstr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 59 50 3E +R 00 00 01 00 02 05 05 00 +T 08 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 0D 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 00 00 +T 16 00 00 00 4E 02 DD 46 03 DD 71 FE DD 70 FF +R 00 00 01 00 +T 21 00 00 00 7D B4 20 08 +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E FE DD 66 FF 18 56 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 DD 6E 04 DD 66 05 4E 06 00 DD 5E +R 00 00 01 00 +T 38 00 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 3F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 46 00 00 00 FE DD 74 FF 7D B4 28 32 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 DD 6E FC DD 66 FD E5 DD 4E 04 DD +R 00 00 01 00 +T 59 00 00 00 46 05 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 62 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 67 00 00 00 00 00 00 00 F1 7D B4 20 08 +R 00 00 01 00 02 04 00 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 6E FE DD 66 FF 18 0D +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 18 AD +R 00 00 01 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 21 00 00 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_banked_lib/strtok.rel b/src/nos/lib/crt_banked_lib/strtok.rel new file mode 100644 index 00000000..a1aabb5b --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strtok.rel @@ -0,0 +1,86 @@ +XL4 +H 4 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strpbrk Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _strspn Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A1 flags 0 +S _strtok Def00000000 +A IDATA0 size 2 flags 0 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 03 20 16 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 2A 00 00 00 00 7D B4 20 06 +R 00 00 01 00 00 05 02 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 21 00 00 C3 9E 00 00 00 +R 00 00 01 00 00 08 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 2A 00 00 00 00 DD 75 02 DD 74 03 +R 00 00 01 00 00 05 02 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 2E 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 34 00 00 00 CD 00 00 00 00 4D 44 21 04 00 39 +R 00 00 01 00 02 05 00 00 +T 3D 00 00 00 7E 81 77 23 7E 88 77 DD 6E 02 DD +R 00 00 01 00 +T 48 00 00 00 66 03 AF B6 20 0B +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 21 00 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 00 08 02 00 +T 57 00 00 00 18 45 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 DD 6E 02 DD 66 03 DD 75 FE DD 74 +R 00 00 01 00 +T 64 00 00 00 FF DD 4E 04 DD 46 05 EB 3E +R 00 00 01 00 +T 6D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 72 00 00 00 00 00 00 00 DD 75 02 DD 74 03 7D +R 00 00 01 00 02 04 00 00 +T 7B 00 00 00 B4 20 08 +R 00 00 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 21 00 00 22 00 00 00 00 18 12 +R 00 00 01 00 00 08 02 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 DD 6E 02 DD 66 03 36 00 DD 6E 02 +R 00 00 01 00 +T 91 00 00 00 DD 66 03 23 22 00 00 00 00 +R 00 00 01 00 00 09 02 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/strtol.rel b/src/nos/lib/crt_banked_lib/strtol.rel new file mode 100644 index 00000000..59d47036 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strtol.rel @@ -0,0 +1,87 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?L_NEG_L03 Ref00000000 +S _strtoul Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A8 flags 0 +S _strtol Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 FC +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 77 FD DD 6E 02 DD 66 03 DD 75 +R 00 00 01 00 +T 14 00 00 00 FE DD 74 FF +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 6E FE DD 66 FF 4E 06 00 21 +R 00 00 01 00 +T 22 00 00 00 00 00 00 00 09 7E E6 10 28 0A +R 00 00 01 00 02 04 04 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 18 E4 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 6E FE DD 66 FF 7E FE 2D 20 12 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 18 13 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 6E FE DD 66 FF 7E FE 2B 20 08 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 6F 00 00 00 46 05 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 78 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 7D 00 00 00 00 00 00 00 F1 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 04 00 00 +T 86 00 00 00 DD 71 FA DD 70 FB DD 7E FC DD B6 +R 00 00 01 00 +T 91 00 00 00 FD 28 05 CD 00 00 00 00 18 0C +R 00 00 01 00 02 08 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 DD 4E FA DD 46 FB DD 6E F8 DD 66 +R 00 00 01 00 +T A4 00 00 00 F9 +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 diff --git a/src/nos/lib/crt_banked_lib/strtoul.rel b/src/nos/lib/crt_banked_lib/strtoul.rel new file mode 100644 index 00000000..afad50e5 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/strtoul.rel @@ -0,0 +1,218 @@ +XL4 +H 2 areas A global symbols +S ?L_MULASG_L03 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1DD flags 0 +S _strtoul Def00000086 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 36 FE FF +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 36 FF FF DD 5E 02 16 00 21 +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 19 7E E6 08 28 0F +R 00 00 01 00 02 04 04 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 4E 02 06 00 21 D0 FF 09 DD 75 +R 00 00 01 00 +T 26 00 00 00 FE DD 74 FF +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 4E 02 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 04 00 +T 33 00 00 00 7E E6 04 28 0F +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 4E 02 06 00 21 A9 FF 09 DD 75 +R 00 00 01 00 +T 43 00 00 00 FE DD 74 FF +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 4E 02 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 04 00 +T 50 00 00 00 7E E6 02 28 0F +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 4E 02 06 00 21 B0 FF 09 DD 75 +R 00 00 01 00 +T 60 00 00 00 FE DD 74 FF +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 6F 00 00 00 FF CD 00 00 00 00 38 08 +R 00 00 01 00 02 06 06 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 36 FE FF DD 36 FF FF +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 CD 00 00 00 00 FA FF 11 02 80 DD +R 00 00 01 00 02 05 05 00 +T 8F 00 00 00 6E 0A DD 66 0B 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 9A 00 00 00 38 0E DD 4E 0A DD 46 0B 21 24 00 +R 00 00 01 00 +T A5 00 00 00 CD 00 00 00 00 30 07 +R 00 00 01 00 02 05 06 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 AF DD 77 0A DD 77 0B +R 00 00 01 00 +T B1 00 00 00 +R 00 00 01 00 +T B1 00 00 00 +R 00 00 01 00 +T B1 00 00 00 DD 6E 02 DD 66 03 4E 06 00 21 +R 00 00 01 00 +T BB 00 00 00 00 00 00 00 09 7E E6 10 28 0A +R 00 00 01 00 02 04 04 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 18 E4 +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 DD 6E 02 DD 66 03 7E FE 2B 20 0A +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 18 6D +R 00 00 01 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 DD 7E 0A DD B6 0B 20 65 DD 6E 02 +R 00 00 01 00 +T ED 00 00 00 DD 66 03 7E FE 30 20 5A +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 DD 6E 02 DD 66 03 23 7E EE 20 FE +R 00 00 01 00 +T 00 01 00 00 58 20 17 +R 00 00 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 DD 36 0A 10 DD 36 0B 00 21 08 00 +R 00 00 01 00 +T 0E 01 00 00 39 7E C6 02 77 23 7E CE 00 77 18 +R 00 00 01 00 +T 19 01 00 00 35 +R 00 00 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 DD 6E 02 DD 66 03 23 7E EE 20 FE +R 00 00 01 00 +T 25 01 00 00 42 20 17 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 DD 36 0A 02 DD 36 0B 00 21 08 00 +R 00 00 01 00 +T 33 01 00 00 39 7E C6 02 77 23 7E CE 00 77 18 +R 00 00 01 00 +T 3E 01 00 00 10 +R 00 00 01 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 DD 36 0A 08 DD 36 0B 00 DD 34 02 +R 00 00 01 00 +T 4A 01 00 00 20 03 DD 34 03 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 DD 7E 0A DD B6 0B 20 08 +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 DD 36 0A 0A DD 36 0B 00 +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 AF DD 77 FA DD 77 FB DD 77 FC DD +R 00 00 01 00 +T 6A 01 00 00 77 FD +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 4E 0A DD 46 0B DD 6E 02 DD 66 +R 00 00 01 00 +T 77 01 00 00 03 5E CD 00 00 00 00 DD 75 FE DD +R 00 00 01 00 00 07 01 00 +T 80 01 00 00 74 FF 7D A4 3C 28 2E +R 00 00 01 00 +T 87 01 00 00 +R 00 00 01 00 +T 87 01 00 00 21 00 00 39 DD 5E 0A DD 56 0B 7A +R 00 00 01 00 +T 92 01 00 00 07 9F 4F 41 CD 00 00 00 00 21 +R 00 00 01 00 02 09 00 00 +T 9A 01 00 00 00 00 39 DD 5E FE DD 56 FF 7A 07 +R 00 00 01 00 +T A5 01 00 00 9F 4F 41 CD 00 00 00 00 DD 34 02 +R 00 00 01 00 02 08 02 00 +T AE 01 00 00 20 03 DD 34 03 +R 00 00 01 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 18 B7 +R 00 00 01 00 +T B5 01 00 00 +R 00 00 01 00 +T B5 01 00 00 DD 7E 04 DD B6 05 28 11 +R 00 00 01 00 +T BD 01 00 00 +R 00 00 01 00 +T BD 01 00 00 DD 6E 02 DD 66 03 E5 DD 6E 04 DD +R 00 00 01 00 +T C8 01 00 00 66 05 C1 71 23 70 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 DD 4E FC DD 46 FD DD 6E FA DD 66 +R 00 00 01 00 +T D9 01 00 00 FB C3 00 00 00 00 +R 00 00 01 00 02 06 08 00 diff --git a/src/nos/lib/crt_banked_lib/system.rel b/src/nos/lib/crt_banked_lib/system.rel new file mode 100644 index 00000000..a3797709 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/system.rel @@ -0,0 +1,165 @@ +XL4 +H 5 areas C global symbols +S _execve Ref00000000 +S _environ Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _abort Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _waitpid Ref00000000 +S _fork Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _signal Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16D flags 0 +S _system Def00000000 +A CSTR size E flags 0 +A IDATA0 size 8 flags 0 +A CDATA0 size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF DD 36 FE FF +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 36 FF FF DD 7E 02 DD B6 03 20 +R 00 00 01 00 +T 14 00 00 00 06 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 01 00 C3 6A 01 00 00 +R 00 00 01 00 00 08 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 21 00 00 E5 21 01 00 E5 11 03 00 +R 00 00 01 00 +T 26 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T 2C 00 00 00 00 00 00 00 F1 F1 DD 75 F2 DD 74 +R 00 00 01 00 02 04 02 00 +T 35 00 00 00 F3 DD 71 F4 DD 70 F5 21 00 00 E5 +R 00 00 01 00 +T 40 00 00 00 21 01 00 E5 11 02 00 3E +R 00 00 01 00 +T 48 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 4D 00 00 00 00 00 00 00 F1 F1 DD 75 F6 DD 74 +R 00 00 01 00 02 04 02 00 +T 56 00 00 00 F7 DD 71 F8 DD 70 F9 3E +R 00 00 01 00 +T 5E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 63 00 00 00 00 00 00 00 DD 75 FC DD 74 FD CB +R 00 00 01 00 02 04 02 00 +T 6C 00 00 00 7C 28 03 +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 C3 2E 01 00 00 +R 00 00 01 00 00 05 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 DD 7E FC DD B6 FD 20 4E +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 21 00 00 E5 21 00 00 E5 11 03 00 +R 00 00 01 00 +T 85 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T 8B 00 00 00 00 00 00 00 F1 F1 21 00 00 E5 21 +R 00 00 01 00 02 04 02 00 +T 94 00 00 00 00 00 E5 11 02 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 9C 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0A 00 02 0A 02 00 +T A3 00 00 00 F1 DD 6E 02 DD 66 03 22 +R 00 00 01 00 +T AB 00 00 00 04 00 00 00 2A 00 00 00 00 E5 01 +R 00 00 01 00 00 04 03 00 02 09 01 00 +T B2 00 00 00 00 00 00 00 11 06 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 09 02 00 +T B8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T BD 00 00 00 00 00 00 00 F1 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 0A 04 00 +T C3 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 02 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 21 00 00 E5 21 01 00 E5 11 03 00 +R 00 00 01 00 +T D3 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T D9 00 00 00 00 00 00 00 F1 F1 21 00 00 E5 21 +R 00 00 01 00 02 04 02 00 +T E2 00 00 00 01 00 E5 11 02 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T EA 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0A 00 02 0A 02 00 +T F1 00 00 00 F1 +R 00 00 01 00 +T F2 00 00 00 +R 00 00 01 00 +T F2 00 00 00 21 00 00 E5 21 0E 00 39 4D 44 11 +R 00 00 01 00 +T FD 00 00 00 FF FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T 02 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 07 00 02 09 02 00 +T 09 01 00 00 75 FA DD 74 FB 7D A4 3C 20 0A +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 36 FE FF DD 36 FF FF 18 11 +R 00 00 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 DD 6E FC DD 66 FD DD 4E FA DD 46 +R 00 00 01 00 +T 28 01 00 00 FB A7 ED 42 20 C4 +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 DD 6E F4 DD 66 F5 E5 DD 6E F2 DD +R 00 00 01 00 +T 39 01 00 00 66 F3 E5 11 03 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 41 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0A 00 02 0A 02 00 +T 48 01 00 00 F1 DD 6E F8 DD 66 F9 E5 DD 6E F6 +R 00 00 01 00 +T 53 01 00 00 DD 66 F7 E5 11 02 00 3E +R 00 00 01 00 +T 5B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 60 01 00 00 00 00 00 00 F1 F1 DD 6E FE DD 66 +R 00 00 01 00 02 04 02 00 +T 69 01 00 00 FF +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 73 68 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 2D 63 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 2F 62 69 6E 2F 73 68 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 03 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 06 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/crt_banked_lib/termcap.rel b/src/nos/lib/crt_banked_lib/termcap.rel new file mode 100644 index 00000000..18c8152b --- /dev/null +++ b/src/nos/lib/crt_banked_lib/termcap.rel @@ -0,0 +1,1432 @@ +XL4 +H 6 areas 22 global symbols +S ?S_LSHASG_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_MULASG_L02 Ref00000000 +S _getenv Ref00000000 +S _memcpy Ref00000000 +S ?SS_DIVASG_L02 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _lseek Ref00000000 +S _close Ref00000000 +S _strlen Ref00000000 +S _strcmp Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S _realloc Ref00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +S _exit Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D4A flags 0 +S _tputs Def000003D0 +S _tgetnum Def000000D1 +S _tgetstr Def00000142 +S _tgetflag Def0000010F +S _tgetent Def00000536 +A CSTR size 37 flags 0 +A UDATA0 size 7 flags 0 +S _ospeed Def00000002 +S _tputs_baud_rate Def00000004 +S _PC Def00000006 +A IDATA0 size 3C flags 0 +A CDATA0 size 3C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 21 19 00 E5 01 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 09 00 00 00 11 02 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 12 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 11 +R 00 00 01 00 02 04 12 00 02 09 01 00 +T 16 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 19 00 +T 1B 00 00 00 00 00 00 00 CD 00 00 00 00 D1 C1 +R 00 00 01 00 02 04 19 00 02 09 01 00 +T 22 00 00 00 C9 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 13 00 +T 2C 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 18 00 +T 31 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T 38 00 00 00 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 0B 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 13 00 +T 55 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 5A 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 61 00 00 00 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 0B 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 DD 6E 02 DD 66 03 AF B6 28 49 +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 6E 02 DD 66 03 7E FE 3A 20 34 +R 00 00 01 00 +T 8D 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 98 00 00 00 66 03 23 7E E1 BE 20 21 DD 6E 04 +R 00 00 01 00 +T A3 00 00 00 DD 66 05 23 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 +T AE 00 00 00 23 23 7E E1 BE 20 0C +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 18 +R 00 00 01 00 +T C0 00 00 00 0D +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 18 AD +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 21 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 CD 00 00 00 00 FE FF DD 4E 02 DD +R 00 00 01 00 02 05 13 00 +T DA 00 00 00 46 03 ED 5B 00 00 00 00 CD +R 00 00 01 00 00 08 03 00 +T E1 00 00 00 75 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 00 04 01 00 +T EA 00 00 00 B4 28 0C DD 6E FE DD 66 FF 2B 7E +R 00 00 01 00 +T F5 00 00 00 FE 23 28 05 +R 00 00 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 21 FF FF 18 0E +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 14 00 +T 06 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 14 00 02 0A 01 00 +T 0C 01 00 00 +R 00 00 01 00 +T 0C 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 CD 00 00 00 00 FE FF DD 4E 02 DD +R 00 00 01 00 02 05 13 00 +T 18 01 00 00 46 03 ED 5B 00 00 00 00 CD +R 00 00 01 00 00 08 03 00 +T 1F 01 00 00 75 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 00 04 01 00 +T 28 01 00 00 B4 28 11 DD 6E FE DD 66 FF 2B 7E +R 00 00 01 00 +T 33 01 00 00 FE 3A 20 05 21 01 00 18 03 +R 00 00 01 00 +T 3C 01 00 00 +R 00 00 01 00 +T 3C 01 00 00 21 00 00 +R 00 00 01 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 CD 00 00 00 00 FE FF DD 4E 02 DD +R 00 00 01 00 02 05 13 00 +T 4B 01 00 00 46 03 ED 5B 00 00 00 00 CD +R 00 00 01 00 00 08 03 00 +T 52 01 00 00 75 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 00 04 01 00 +T 5B 01 00 00 B4 28 18 DD 6E FE DD 66 FF 2B 7E +R 00 00 01 00 +T 66 01 00 00 FE 3D 28 11 DD 6E FE DD 66 FF 2B +R 00 00 01 00 +T 71 01 00 00 7E FE 7E 28 05 +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 21 00 00 18 0F +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 DD 4E 04 DD 46 05 DD 5E FE DD 56 +R 00 00 01 00 +T 86 01 00 00 FF CD 8D 01 00 00 +R 00 00 01 00 00 06 01 00 +T 8A 01 00 00 +R 00 00 01 00 +T 8A 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 CD 00 00 00 00 F4 FF DD 7E 02 DD +R 00 00 01 00 02 05 13 00 +T 96 01 00 00 B6 03 20 06 +R 00 00 01 00 +T 9A 01 00 00 +R 00 00 01 00 +T 9A 01 00 00 21 00 00 C3 CD 03 00 00 +R 00 00 01 00 00 08 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 DD 7E 04 DD B6 05 20 59 +R 00 00 01 00 +T A8 01 00 00 +R 00 00 01 00 +T A8 01 00 00 DD 6E 02 DD 66 03 DD 75 F4 DD 74 +R 00 00 01 00 +T B3 01 00 00 F5 +R 00 00 01 00 +T B4 01 00 00 +R 00 00 01 00 +T B4 01 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T BF 01 00 00 74 F5 2B 4E 06 00 DD 71 F8 DD 70 +R 00 00 01 00 +T CA 01 00 00 F9 79 B0 28 16 3E 3A DD AE F8 DD +R 00 00 01 00 +T D5 01 00 00 B6 F9 28 0C 3E 0A DD AE F8 DD B6 +R 00 00 01 00 +T E0 01 00 00 F9 28 02 +R 00 00 01 00 +T E3 01 00 00 +R 00 00 01 00 +T E3 01 00 00 +R 00 00 01 00 +T E3 01 00 00 +R 00 00 01 00 +T E3 01 00 00 18 CF +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 DD 4E 02 DD 46 03 DD 6E F4 DD 66 +R 00 00 01 00 +T F0 01 00 00 F5 A7 ED 42 EB 13 CD 23 00 00 00 +R 00 00 01 00 00 0B 01 00 +T F9 01 00 00 DD 75 FE DD 74 FF 18 10 +R 00 00 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 DD 6E 04 DD 66 05 46 23 66 68 DD +R 00 00 01 00 +T 0C 02 00 00 75 FE DD 74 FF +R 00 00 01 00 +T 11 02 00 00 +R 00 00 01 00 +T 11 02 00 00 DD 6E 02 DD 66 03 DD 75 F4 DD 74 +R 00 00 01 00 +T 1C 02 00 00 F5 DD 6E FE DD 66 FF DD 75 F6 DD +R 00 00 01 00 +T 27 02 00 00 74 F7 +R 00 00 01 00 +T 29 02 00 00 +R 00 00 01 00 +T 29 02 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T 34 02 00 00 74 F5 2B 4E 06 00 DD 71 F8 DD 70 +R 00 00 01 00 +T 3F 02 00 00 F9 79 B0 CA A5 03 00 00 3E 3A DD +R 00 00 01 00 00 08 01 00 +T 48 02 00 00 AE F8 DD B6 F9 CA A5 03 00 00 3E +R 00 00 01 00 00 0A 01 00 +T 51 02 00 00 0A DD AE F8 DD B6 F9 CA +R 00 00 01 00 +T 59 02 00 00 A5 03 00 00 +R 00 00 01 00 00 04 01 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 3E 5E DD AE F8 DD B6 F9 20 1D +R 00 00 01 00 +T 65 02 00 00 +R 00 00 01 00 +T 65 02 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T 70 02 00 00 74 F5 2B 7E E6 1F 4F 06 00 DD 71 +R 00 00 01 00 +T 7B 02 00 00 F8 DD 70 F9 C3 90 03 00 00 +R 00 00 01 00 00 09 01 00 +T 82 02 00 00 +R 00 00 01 00 +T 82 02 00 00 3E 5C DD AE F8 DD B6 F9 C2 +R 00 00 01 00 +T 8B 02 00 00 90 03 00 00 +R 00 00 01 00 00 04 01 00 +T 8D 02 00 00 +R 00 00 01 00 +T 8D 02 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T 98 02 00 00 74 F5 2B 4E 06 00 DD 71 F8 DD 70 +R 00 00 01 00 +T A3 02 00 00 F9 11 30 80 69 60 3E 80 AC 67 ED +R 00 00 01 00 +T AE 02 00 00 52 DA 43 03 00 00 DD 4E F8 DD 46 +R 00 00 01 00 00 06 01 00 +T B7 02 00 00 F9 21 37 00 CD 00 00 00 00 DA +R 00 00 01 00 02 09 15 00 +T BF 02 00 00 43 03 00 00 +R 00 00 01 00 00 04 01 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 21 04 00 39 7E D6 30 77 23 7E DE +R 00 00 01 00 +T CC 02 00 00 00 77 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T D5 02 00 00 +R 00 00 01 00 +T D5 02 00 00 DD 6E FA DD 66 FB 23 DD 75 FA DD +R 00 00 01 00 +T E0 02 00 00 74 FB 01 03 80 3E 80 AC 67 ED 42 +R 00 00 01 00 +T EB 02 00 00 30 54 DD 6E F4 DD 66 F5 4E 06 00 +R 00 00 01 00 +T F6 02 00 00 DD 71 FC DD 70 FD 69 60 01 30 80 +R 00 00 01 00 +T 01 03 00 00 3E 80 AC 67 ED 42 38 38 DD 4E FC +R 00 00 01 00 +T 0C 03 00 00 DD 46 FD 21 37 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 15 00 +T 15 03 00 00 38 2A +R 00 00 01 00 +T 17 03 00 00 +R 00 00 01 00 +T 17 03 00 00 +R 00 00 01 00 +T 17 03 00 00 +R 00 00 01 00 +T 17 03 00 00 21 04 00 39 06 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 20 03 00 00 21 D0 FF DD 4E FC DD 46 FD 09 4D +R 00 00 01 00 +T 2B 03 00 00 44 21 04 00 39 7E 81 77 23 7E 88 +R 00 00 01 00 +T 36 03 00 00 77 DD 34 F4 20 03 DD 34 F5 +R 00 00 01 00 +T 3F 03 00 00 +R 00 00 01 00 +T 3F 03 00 00 18 94 +R 00 00 01 00 +T 41 03 00 00 +R 00 00 01 00 +T 41 03 00 00 18 4D +R 00 00 01 00 +T 43 03 00 00 +R 00 00 01 00 +T 43 03 00 00 01 40 80 DD 6E F8 DD 66 F9 3E 80 +R 00 00 01 00 +T 4E 03 00 00 AC 67 ED 42 38 3C 01 80 80 DD 6E +R 00 00 01 00 +T 59 03 00 00 F8 DD 66 F9 3E 80 AC 67 ED 42 30 +R 00 00 01 00 +T 64 03 00 00 2B +R 00 00 01 00 +T 65 03 00 00 +R 00 00 01 00 +T 65 03 00 00 +R 00 00 01 00 +T 65 03 00 00 +R 00 00 01 00 +T 65 03 00 00 DD 7E F8 E6 DF 6F DD 7E F9 E6 FF +R 00 00 01 00 +T 70 03 00 00 67 01 C0 FF FF FF 09 4E 06 00 DD +R 00 00 01 00 00 06 04 00 +T 79 03 00 00 71 FC DD 70 FD 3E 20 A9 B0 28 0C +R 00 00 01 00 +T 84 03 00 00 +R 00 00 01 00 +T 84 03 00 00 DD 6E FC DD 66 FD DD 75 F8 DD 74 +R 00 00 01 00 +T 8F 03 00 00 F9 +R 00 00 01 00 +T 90 03 00 00 +R 00 00 01 00 +T 90 03 00 00 +R 00 00 01 00 +T 90 03 00 00 +R 00 00 01 00 +T 90 03 00 00 +R 00 00 01 00 +T 90 03 00 00 +R 00 00 01 00 +T 90 03 00 00 DD 46 F8 DD 6E F6 DD 66 F7 23 DD +R 00 00 01 00 +T 9B 03 00 00 75 F6 DD 74 F7 2B 70 C3 +R 00 00 01 00 +T A3 03 00 00 29 02 00 00 +R 00 00 01 00 00 04 01 00 +T A5 03 00 00 +R 00 00 01 00 +T A5 03 00 00 DD 6E F6 DD 66 F7 36 00 DD 7E 04 +R 00 00 01 00 +T B0 03 00 00 DD B6 05 28 12 +R 00 00 01 00 +T B5 03 00 00 +R 00 00 01 00 +T B5 03 00 00 DD 6E F6 DD 66 F7 23 E5 DD 6E 04 +R 00 00 01 00 +T C0 03 00 00 DD 66 05 C1 71 23 70 +R 00 00 01 00 +T C7 03 00 00 +R 00 00 01 00 +T C7 03 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T CD 03 00 00 +R 00 00 01 00 +T CD 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T D0 03 00 00 +R 00 00 01 00 +T D0 03 00 00 CD 00 00 00 00 FE FF AF DD 77 FE +R 00 00 01 00 02 05 13 00 +T D9 03 00 00 DD 77 FF DD 7E 02 DD B6 03 20 03 +R 00 00 01 00 +T E4 03 00 00 +R 00 00 01 00 +T E4 03 00 00 C3 33 05 00 00 +R 00 00 01 00 00 05 01 00 +T E7 03 00 00 +R 00 00 01 00 +T E7 03 00 00 +R 00 00 01 00 +T E7 03 00 00 DD 6E 02 DD 66 03 7E FE 30 38 39 +R 00 00 01 00 +T F2 03 00 00 DD 6E 02 DD 66 03 3E 39 BE 38 2E +R 00 00 01 00 +T FD 03 00 00 +R 00 00 01 00 +T FD 03 00 00 +R 00 00 01 00 +T FD 03 00 00 +R 00 00 01 00 +T FD 03 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 08 04 00 00 74 03 2B 4E 06 00 21 D0 FF 09 4D +R 00 00 01 00 +T 13 04 00 00 44 21 00 00 39 7E 81 77 23 7E 88 +R 00 00 01 00 +T 1E 04 00 00 77 21 00 00 39 01 0A 00 CD +R 00 00 01 00 +T 27 04 00 00 00 00 00 00 18 BC +R 00 00 01 00 02 04 02 00 +T 2B 04 00 00 +R 00 00 01 00 +T 2B 04 00 00 DD 6E 02 DD 66 03 7E FE 2E 20 2A +R 00 00 01 00 +T 36 04 00 00 +R 00 00 01 00 +T 36 04 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 3E 04 00 00 +R 00 00 01 00 +T 3E 04 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 49 04 00 00 74 03 2B 4E 06 00 21 D0 FF 09 4D +R 00 00 01 00 +T 54 04 00 00 44 21 00 00 39 7E 81 77 23 7E 88 +R 00 00 01 00 +T 5F 04 00 00 77 +R 00 00 01 00 +T 60 04 00 00 +R 00 00 01 00 +T 60 04 00 00 DD 6E 02 DD 66 03 7E FE 2A 20 15 +R 00 00 01 00 +T 6B 04 00 00 +R 00 00 01 00 +T 6B 04 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 73 04 00 00 +R 00 00 01 00 +T 73 04 00 00 21 00 00 39 DD 4E 04 DD 46 05 CD +R 00 00 01 00 +T 7E 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 80 04 00 00 +R 00 00 01 00 +T 80 04 00 00 +R 00 00 01 00 +T 80 04 00 00 DD 6E 02 DD 66 03 AF B6 28 1F +R 00 00 01 00 +T 8A 04 00 00 +R 00 00 01 00 +T 8A 04 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 95 04 00 00 74 03 2B 5E 16 00 DD 7E 0C DD 6E +R 00 00 01 00 +T A0 04 00 00 0A DD 66 0B CD 00 00 00 00 18 D7 +R 00 00 01 00 02 09 01 00 +T A9 04 00 00 +R 00 00 01 00 +T A9 04 00 00 2A 02 00 00 00 29 01 1C 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 04 00 +T B0 04 00 00 09 4E 23 46 21 00 00 39 CD +R 00 00 01 00 +T B9 04 00 00 00 00 00 00 21 00 00 39 7E C6 F4 +R 00 00 01 00 02 04 02 00 +T C2 04 00 00 77 23 7E CE 01 77 21 00 00 39 01 +R 00 00 01 00 +T CD 04 00 00 E8 03 CD 00 00 00 00 2A +R 00 00 01 00 02 07 05 00 +T D3 04 00 00 02 00 00 00 29 01 1C 00 00 00 09 +R 00 00 01 00 00 04 03 00 00 0A 04 00 +T DA 04 00 00 23 CB 7E 28 14 +R 00 00 01 00 +T DF 04 00 00 +R 00 00 01 00 +T DF 04 00 00 DD 4E FE DD 46 FF A7 21 00 00 ED +R 00 00 01 00 +T EA 04 00 00 42 DD 75 FE DD 74 FF 18 16 +R 00 00 01 00 +T F3 04 00 00 +R 00 00 01 00 +T F3 04 00 00 21 00 00 39 7E C6 32 77 30 02 23 +R 00 00 01 00 +T FE 04 00 00 34 +R 00 00 01 00 +T FF 04 00 00 +R 00 00 01 00 +T FF 04 00 00 21 00 00 39 01 64 00 CD +R 00 00 01 00 +T 07 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 +T 09 05 00 00 +R 00 00 01 00 +T 09 05 00 00 +R 00 00 01 00 +T 09 05 00 00 DD 4E FE DD 46 FF 0B DD 71 FE DD +R 00 00 01 00 +T 14 05 00 00 70 FF 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 15 00 +T 1D 05 00 00 30 14 +R 00 00 01 00 +T 1F 05 00 00 +R 00 00 01 00 +T 1F 05 00 00 ED 5B 06 00 00 00 16 00 DD 7E 0C +R 00 00 01 00 00 06 03 00 +T 28 05 00 00 DD 6E 0A DD 66 0B CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 31 05 00 00 18 D6 +R 00 00 01 00 +T 33 05 00 00 +R 00 00 01 00 +T 33 05 00 00 +R 00 00 01 00 +T 33 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 36 05 00 00 +R 00 00 01 00 +T 36 05 00 00 CD 00 00 00 00 E0 FF AF DD 77 F8 +R 00 00 01 00 02 05 13 00 +T 3F 05 00 00 DD 77 F9 11 1A 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T 46 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 4B 05 00 00 00 00 00 00 DD 75 FA DD 74 FB AF +R 00 00 01 00 02 04 01 00 +T 54 05 00 00 DD 77 FC DD 77 FD 7D B4 20 06 +R 00 00 01 00 +T 5E 05 00 00 +R 00 00 01 00 +T 5E 05 00 00 21 FF FF C3 EC 08 00 00 +R 00 00 01 00 00 08 01 00 +T 64 05 00 00 +R 00 00 01 00 +T 64 05 00 00 11 1F 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 03 00 +T 6A 05 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 71 05 00 00 E0 DD 74 E1 7D B4 28 11 DD 6E E0 +R 00 00 01 00 +T 7C 05 00 00 DD 66 E1 AF B6 20 07 +R 00 00 01 00 +T 83 05 00 00 +R 00 00 01 00 +T 83 05 00 00 +R 00 00 01 00 +T 83 05 00 00 +R 00 00 01 00 +T 83 05 00 00 AF DD 77 E0 DD 77 E1 +R 00 00 01 00 +T 8A 05 00 00 +R 00 00 01 00 +T 8A 05 00 00 DD 7E E0 DD B6 E1 28 10 DD 6E E0 +R 00 00 01 00 +T 95 05 00 00 DD 66 E1 7E FE 2F 20 05 21 01 00 +R 00 00 01 00 +T A0 05 00 00 18 03 +R 00 00 01 00 +T A2 05 00 00 +R 00 00 01 00 +T A2 05 00 00 21 00 00 +R 00 00 01 00 +T A5 05 00 00 +R 00 00 01 00 +T A5 05 00 00 DD 75 FE DD 74 FF DD 7E E0 DD B6 +R 00 00 01 00 +T B0 05 00 00 E1 28 7F DD 7E FE DD B6 FF 20 77 +R 00 00 01 00 +T BB 05 00 00 DD 4E FA DD 46 FB DD 5E 04 DD 56 +R 00 00 01 00 +T C6 05 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T CC 05 00 00 CD 00 00 00 00 7D B4 20 5F +R 00 00 01 00 02 05 01 00 +T D3 05 00 00 +R 00 00 01 00 +T D3 05 00 00 +R 00 00 01 00 +T D3 05 00 00 +R 00 00 01 00 +T D3 05 00 00 01 00 00 C5 01 27 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T DC 05 00 00 E0 DD 56 E1 CD 75 00 00 00 EB C1 +R 00 00 01 00 00 09 01 00 +T E5 05 00 00 CD 8D 01 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 00 05 01 00 +T EE 05 00 00 7D B4 20 2D +R 00 00 01 00 +T F2 05 00 00 +R 00 00 01 00 +T F2 05 00 00 DD 7E 02 DD B6 03 20 0E +R 00 00 01 00 +T FA 05 00 00 +R 00 00 01 00 +T FA 05 00 00 DD 6E E0 DD 66 E1 DD 75 02 DD 74 +R 00 00 01 00 +T 05 06 00 00 03 18 14 +R 00 00 01 00 +T 08 06 00 00 +R 00 00 01 00 +T 08 06 00 00 DD 4E E0 DD 46 E1 DD 5E 02 DD 56 +R 00 00 01 00 +T 13 06 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 11 00 02 0B 11 00 +T 19 06 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 1C 06 00 00 +R 00 00 01 00 +T 1C 06 00 00 C3 D0 08 00 00 +R 00 00 01 00 00 05 01 00 +T 1F 06 00 00 +R 00 00 01 00 +T 1F 06 00 00 DD 6E E0 DD 66 E1 DD 75 F6 DD 74 +R 00 00 01 00 +T 2A 06 00 00 F7 AF DD 77 E0 DD 77 E1 +R 00 00 01 00 +T 32 06 00 00 +R 00 00 01 00 +T 32 06 00 00 DD 7E E0 DD B6 E1 28 08 DD 7E FE +R 00 00 01 00 +T 3D 06 00 00 DD B6 FF 20 08 +R 00 00 01 00 +T 42 06 00 00 +R 00 00 01 00 +T 42 06 00 00 +R 00 00 01 00 +T 42 06 00 00 +R 00 00 01 00 +T 42 06 00 00 DD 36 E0 2A 00 00 00 DD 36 E1 +R 00 00 01 00 09 07 02 00 +T 49 06 00 00 2A 00 00 00 +R 00 00 01 00 89 04 02 00 +T 4A 06 00 00 +R 00 00 01 00 +T 4A 06 00 00 21 00 00 E5 DD 6E E0 DD 66 E1 E5 +R 00 00 01 00 +T 55 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T 5B 06 00 00 00 00 00 00 F1 F1 DD 75 E2 DD 74 +R 00 00 01 00 02 04 01 00 +T 64 06 00 00 E3 CB 7C 28 06 +R 00 00 01 00 +T 69 06 00 00 +R 00 00 01 00 +T 69 06 00 00 21 FF FF C3 EC 08 00 00 +R 00 00 01 00 00 08 01 00 +T 6F 06 00 00 +R 00 00 01 00 +T 6F 06 00 00 DD 36 E6 00 DD 36 E7 08 DD 5E E6 +R 00 00 01 00 +T 7A 06 00 00 DD 56 E7 13 CD 23 00 00 00 DD 75 +R 00 00 01 00 00 09 01 00 +T 83 06 00 00 E4 DD 74 E5 DD 7E F8 DD B6 F9 28 +R 00 00 01 00 +T 8E 06 00 00 08 DD 6E F8 DD 66 F9 18 06 +R 00 00 01 00 +T 97 06 00 00 +R 00 00 01 00 +T 97 06 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 9D 06 00 00 +R 00 00 01 00 +T 9D 06 00 00 DD 75 F2 DD 74 F3 DD 7E 02 DD B6 +R 00 00 01 00 +T A8 06 00 00 03 20 2F +R 00 00 01 00 +T AB 06 00 00 +R 00 00 01 00 +T AB 06 00 00 DD 7E F8 DD B6 F9 28 11 DD 5E F6 +R 00 00 01 00 +T B6 06 00 00 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T BC 06 00 00 00 00 00 00 CD 00 00 00 00 23 18 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T C3 06 00 00 06 +R 00 00 01 00 +T C4 06 00 00 +R 00 00 01 00 +T C4 06 00 00 DD 6E E6 DD 66 E7 +R 00 00 01 00 +T CA 06 00 00 +R 00 00 01 00 +T CA 06 00 00 DD 75 FC DD 74 FD EB CD +R 00 00 01 00 +T D2 06 00 00 23 00 00 00 DD 75 02 DD 74 03 +R 00 00 01 00 00 04 01 00 +T DA 06 00 00 +R 00 00 01 00 +T DA 06 00 00 DD 6E 02 DD 66 03 DD 75 EE DD 74 +R 00 00 01 00 +T E5 06 00 00 EF DD 7E F8 DD B6 F9 28 2F +R 00 00 01 00 +T EE 06 00 00 +R 00 00 01 00 +T EE 06 00 00 DD 4E F6 DD 46 F7 DD 5E 02 DD 56 +R 00 00 01 00 +T F9 06 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 11 00 02 0B 11 00 +T FF 06 00 00 CD 00 00 00 00 DD 5E F6 DD 56 F7 +R 00 00 01 00 02 05 01 00 +T 08 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 0E 07 00 00 00 00 00 00 4D 44 21 0E 00 39 7E +R 00 00 01 00 02 04 01 00 +T 17 07 00 00 81 77 23 7E 88 77 +R 00 00 01 00 +T 1D 07 00 00 +R 00 00 01 00 +T 1D 07 00 00 +R 00 00 01 00 +T 1D 07 00 00 DD 7E F2 DD B6 F3 CA 8B 08 00 00 +R 00 00 01 00 00 0B 01 00 +T 26 07 00 00 +R 00 00 01 00 +T 26 07 00 00 21 04 00 39 E5 DD 4E E2 DD 46 E3 +R 00 00 01 00 +T 31 07 00 00 DD 5E F2 DD 56 F3 CD EF 08 00 00 +R 00 00 01 00 00 0B 01 00 +T 3A 07 00 00 F1 7D B4 20 38 +R 00 00 01 00 +T 3F 07 00 00 +R 00 00 01 00 +T 3F 07 00 00 DD 5E E2 DD 56 E3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 47 07 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 08 00 02 0A 01 00 +T 4E 07 00 00 5E E4 DD 56 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 56 07 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T 5D 07 00 00 FC DD B6 FD 28 0E +R 00 00 01 00 +T 63 07 00 00 +R 00 00 01 00 +T 63 07 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 6B 07 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0F 00 02 0A 01 00 +T 71 07 00 00 +R 00 00 01 00 +T 71 07 00 00 21 00 00 C3 EC 08 00 00 +R 00 00 01 00 00 08 01 00 +T 77 07 00 00 +R 00 00 01 00 +T 77 07 00 00 DD 6E 04 DD 66 05 DD 4E F2 DD 46 +R 00 00 01 00 +T 82 07 00 00 F3 A7 ED 42 28 0E +R 00 00 01 00 +T 88 07 00 00 +R 00 00 01 00 +T 88 07 00 00 DD 5E F2 DD 56 F3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 90 07 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0F 00 02 0A 01 00 +T 96 07 00 00 +R 00 00 01 00 +T 96 07 00 00 DD 7E FC DD B6 FD 28 4F +R 00 00 01 00 +T 9E 07 00 00 +R 00 00 01 00 +T 9E 07 00 00 DD 4E 02 DD 46 03 DD 6E EE DD 66 +R 00 00 01 00 +T A9 07 00 00 EF A7 ED 42 DD 4E E6 DD 46 E7 09 +R 00 00 01 00 +T B4 07 00 00 DD 75 FC DD 74 FD 4D 44 DD 5E 02 +R 00 00 01 00 +T BF 07 00 00 DD 56 03 CD 4C 00 00 00 DD 75 E0 +R 00 00 01 00 00 08 01 00 +T C8 07 00 00 DD 74 E1 DD 4E 02 DD 46 03 A7 ED +R 00 00 01 00 +T D3 07 00 00 42 4D 44 21 0E 00 39 7E 81 77 23 +R 00 00 01 00 +T DE 07 00 00 7E 88 77 DD 6E E0 DD 66 E1 DD 75 +R 00 00 01 00 +T E9 07 00 00 02 DD 74 03 +R 00 00 01 00 +T ED 07 00 00 +R 00 00 01 00 +T ED 07 00 00 DD 6E EE DD 66 EF DD 75 F0 DD 74 +R 00 00 01 00 +T F8 07 00 00 F1 DD 6E E8 DD 66 E9 DD 75 E0 DD +R 00 00 01 00 +T 03 08 00 00 74 E1 +R 00 00 01 00 +T 05 08 00 00 +R 00 00 01 00 +T 05 08 00 00 DD 6E E0 DD 66 E1 23 DD 75 E0 DD +R 00 00 01 00 +T 10 08 00 00 74 E1 2B 4E 06 00 DD 71 F4 DD 70 +R 00 00 01 00 +T 1B 08 00 00 F5 DD 6E EE DD 66 EF 23 DD 75 EE +R 00 00 01 00 +T 26 08 00 00 DD 74 EF 2B 71 0C 0D 28 36 3E 0A +R 00 00 01 00 +T 31 08 00 00 DD AE F4 DD B6 F5 28 2C +R 00 00 01 00 +T 39 08 00 00 +R 00 00 01 00 +T 39 08 00 00 +R 00 00 01 00 +T 39 08 00 00 +R 00 00 01 00 +T 39 08 00 00 3E 5C DD AE F4 DD B6 F5 20 20 DD +R 00 00 01 00 +T 44 08 00 00 6E E0 DD 66 E1 7E FE 0A 20 15 +R 00 00 01 00 +T 4E 08 00 00 +R 00 00 01 00 +T 4E 08 00 00 +R 00 00 01 00 +T 4E 08 00 00 +R 00 00 01 00 +T 4E 08 00 00 DD 6E EE DD 66 EF 2B DD 75 EE DD +R 00 00 01 00 +T 59 08 00 00 74 EF DD 34 E0 20 03 DD 34 E1 +R 00 00 01 00 +T 63 08 00 00 +R 00 00 01 00 +T 63 08 00 00 +R 00 00 01 00 +T 63 08 00 00 18 A0 +R 00 00 01 00 +T 65 08 00 00 +R 00 00 01 00 +T 65 08 00 00 DD 6E EE DD 66 EF 36 00 01 00 00 +R 00 00 01 00 +T 70 08 00 00 C5 01 27 00 00 00 DD 5E F0 DD 56 +R 00 00 01 00 00 06 02 00 +T 79 08 00 00 F1 CD 75 00 00 00 EB C1 CD +R 00 00 01 00 00 06 01 00 +T 80 08 00 00 8D 01 00 00 DD 75 F2 DD 74 F3 C3 +R 00 00 01 00 00 04 01 00 +T 89 08 00 00 1D 07 00 00 +R 00 00 01 00 00 04 01 00 +T 8B 08 00 00 +R 00 00 01 00 +T 8B 08 00 00 DD 5E E2 DD 56 E3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 93 08 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 08 00 02 0A 01 00 +T 9A 08 00 00 5E E4 DD 56 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T A2 08 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T A9 08 00 00 FC DD B6 FD 28 21 +R 00 00 01 00 +T AF 08 00 00 +R 00 00 01 00 +T AF 08 00 00 DD 4E 02 DD 46 03 DD 6E EE DD 66 +R 00 00 01 00 +T BA 08 00 00 EF A7 ED 42 4D 44 03 DD 5E 02 DD +R 00 00 01 00 +T C5 08 00 00 56 03 CD 4C 00 00 00 DD 75 02 DD +R 00 00 01 00 00 07 01 00 +T CE 08 00 00 74 03 +R 00 00 01 00 +T D0 08 00 00 +R 00 00 01 00 +T D0 08 00 00 +R 00 00 01 00 +T D0 08 00 00 DD 6E 02 DD 66 03 22 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T D9 08 00 00 DD 7E FC DD B6 FD 28 08 +R 00 00 01 00 +T E1 08 00 00 +R 00 00 01 00 +T E1 08 00 00 DD 6E 02 DD 66 03 18 03 +R 00 00 01 00 +T E9 08 00 00 +R 00 00 01 00 +T E9 08 00 00 21 01 00 +R 00 00 01 00 +T EC 08 00 00 +R 00 00 01 00 +T EC 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T EF 08 00 00 +R 00 00 01 00 +T EF 08 00 00 CD 00 00 00 00 FE FF 21 04 00 DD +R 00 00 01 00 02 05 13 00 +T F8 08 00 00 5E 08 DD 56 09 19 E5 EB 5E 23 56 +R 00 00 01 00 +T 03 09 00 00 E1 73 23 72 21 08 00 DD 5E 08 DD +R 00 00 01 00 +T 0E 09 00 00 56 09 19 AF 77 23 77 21 06 00 19 +R 00 00 01 00 +T 19 09 00 00 AF 77 23 77 21 04 00 19 7E 23 66 +R 00 00 01 00 +T 24 09 00 00 6F 36 00 21 00 00 E5 21 00 00 E5 +R 00 00 01 00 +T 2F 09 00 00 21 00 00 E5 59 50 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 37 09 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T 3E 09 00 00 F1 F1 +R 00 00 01 00 +T 40 09 00 00 +R 00 00 01 00 +T 40 09 00 00 21 06 00 DD 4E 08 DD 46 09 09 7E +R 00 00 01 00 +T 4B 09 00 00 23 B6 C2 D8 09 00 00 +R 00 00 01 00 00 07 01 00 +T 50 09 00 00 +R 00 00 01 00 +T 50 09 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 57 09 00 00 +R 00 00 01 00 +T 57 09 00 00 DD 6E FE DD 66 FF E5 DD 4E 08 DD +R 00 00 01 00 +T 62 09 00 00 46 09 DD 5E 04 DD 56 05 CD +R 00 00 01 00 +T 6B 09 00 00 13 0B 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 00 04 01 00 +T 74 09 00 00 21 06 00 DD 4E 08 DD 46 09 09 7E +R 00 00 01 00 +T 7F 09 00 00 23 B6 20 0D DD 6E FE DD 66 FF 2B +R 00 00 01 00 +T 8A 09 00 00 2B 7E FE 5C 28 C7 +R 00 00 01 00 +T 90 09 00 00 +R 00 00 01 00 +T 90 09 00 00 21 04 00 DD 4E 08 DD 46 09 09 7E +R 00 00 01 00 +T 9B 09 00 00 23 66 6F 7E FE 23 28 1F DD 4E 02 +R 00 00 01 00 +T A6 09 00 00 DD 46 03 21 04 00 DD 5E 08 DD 56 +R 00 00 01 00 +T B1 09 00 00 09 19 5E 23 56 CD DE 09 00 00 7D +R 00 00 01 00 00 0A 01 00 +T BA 09 00 00 B4 28 05 +R 00 00 01 00 +T BD 09 00 00 +R 00 00 01 00 +T BD 09 00 00 +R 00 00 01 00 +T BD 09 00 00 +R 00 00 01 00 +T BD 09 00 00 21 01 00 18 19 +R 00 00 01 00 +T C2 09 00 00 +R 00 00 01 00 +T C2 09 00 00 21 04 00 DD 4E 08 DD 46 09 09 DD +R 00 00 01 00 +T CD 09 00 00 4E FE DD 46 FF 71 23 70 C3 +R 00 00 01 00 +T D6 09 00 00 40 09 00 00 +R 00 00 01 00 00 04 01 00 +T D8 09 00 00 +R 00 00 01 00 +T D8 09 00 00 21 00 00 +R 00 00 01 00 +T DB 09 00 00 +R 00 00 01 00 +T DB 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T DE 09 00 00 +R 00 00 01 00 +T DE 09 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 13 00 +T E7 09 00 00 56 03 CD 54 0A 00 00 7D B4 20 05 +R 00 00 01 00 00 07 01 00 +T F0 09 00 00 +R 00 00 01 00 +T F0 09 00 00 21 01 00 18 5C +R 00 00 01 00 +T F5 09 00 00 +R 00 00 01 00 +T F5 09 00 00 DD 6E 02 DD 66 03 DD 75 FE DD 74 +R 00 00 01 00 +T 00 0A 00 00 FF +R 00 00 01 00 +T 01 0A 00 00 +R 00 00 01 00 +T 01 0A 00 00 DD 6E FE DD 66 FF AF B6 28 43 DD +R 00 00 01 00 +T 0C 0A 00 00 6E FE DD 66 FF 7E FE 0A 28 38 DD +R 00 00 01 00 +T 17 0A 00 00 6E FE DD 66 FF 7E FE 3A 28 2D +R 00 00 01 00 +T 21 0A 00 00 +R 00 00 01 00 +T 21 0A 00 00 +R 00 00 01 00 +T 21 0A 00 00 +R 00 00 01 00 +T 21 0A 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 2C 0A 00 00 74 FF 2B 7E FE 7C 20 18 DD 4E 04 +R 00 00 01 00 +T 37 0A 00 00 DD 46 05 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 41 0A 00 00 54 0A 00 00 7D B4 20 05 +R 00 00 01 00 00 04 01 00 +T 47 0A 00 00 +R 00 00 01 00 +T 47 0A 00 00 +R 00 00 01 00 +T 47 0A 00 00 +R 00 00 01 00 +T 47 0A 00 00 21 01 00 18 05 +R 00 00 01 00 +T 4C 0A 00 00 +R 00 00 01 00 +T 4C 0A 00 00 18 B3 +R 00 00 01 00 +T 4E 0A 00 00 +R 00 00 01 00 +T 4E 0A 00 00 21 00 00 +R 00 00 01 00 +T 51 0A 00 00 +R 00 00 01 00 +T 51 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T 54 0A 00 00 +R 00 00 01 00 +T 54 0A 00 00 CD 00 00 00 00 FC FF +R 00 00 01 00 02 05 13 00 +T 59 0A 00 00 +R 00 00 01 00 +T 59 0A 00 00 +R 00 00 01 00 +T 59 0A 00 00 AF 3C CA 0D 0B 00 00 +R 00 00 01 00 00 07 01 00 +T 5E 0A 00 00 +R 00 00 01 00 +T 5E 0A 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 69 0A 00 00 74 03 2B 4E 06 00 DD 71 FC DD 70 +R 00 00 01 00 +T 74 0A 00 00 FD DD 6E 04 DD 66 05 23 DD 75 04 +R 00 00 01 00 +T 7F 0A 00 00 DD 74 05 2B 4E 06 00 DD 71 FE DD +R 00 00 01 00 +T 8A 0A 00 00 70 FF +R 00 00 01 00 +T 8C 0A 00 00 +R 00 00 01 00 +T 8C 0A 00 00 3E 5C DD AE FC DD B6 FD 20 3E DD +R 00 00 01 00 +T 97 0A 00 00 6E 02 DD 66 03 7E FE 0A 20 33 +R 00 00 01 00 +T A1 0A 00 00 +R 00 00 01 00 +T A1 0A 00 00 +R 00 00 01 00 +T A1 0A 00 00 +R 00 00 01 00 +T A1 0A 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T A9 0A 00 00 +R 00 00 01 00 +T A9 0A 00 00 +R 00 00 01 00 +T A9 0A 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T B4 0A 00 00 74 03 2B 4E 06 00 DD 71 FC DD 70 +R 00 00 01 00 +T BF 0A 00 00 FD 3E 20 A9 B0 28 0A 3E 09 DD AE +R 00 00 01 00 +T CA 0A 00 00 FC DD B6 FD 20 02 +R 00 00 01 00 +T D0 0A 00 00 +R 00 00 01 00 +T D0 0A 00 00 +R 00 00 01 00 +T D0 0A 00 00 +R 00 00 01 00 +T D0 0A 00 00 18 D7 +R 00 00 01 00 +T D2 0A 00 00 +R 00 00 01 00 +T D2 0A 00 00 18 B8 +R 00 00 01 00 +T D4 0A 00 00 +R 00 00 01 00 +T D4 0A 00 00 DD 7E FE DD B6 FF 20 1B +R 00 00 01 00 +T DC 0A 00 00 +R 00 00 01 00 +T DC 0A 00 00 3E 7C DD AE FC DD B6 FD 28 0A 3E +R 00 00 01 00 +T E7 0A 00 00 3A DD AE FC DD B6 FD 20 05 +R 00 00 01 00 +T F0 0A 00 00 +R 00 00 01 00 +T F0 0A 00 00 +R 00 00 01 00 +T F0 0A 00 00 +R 00 00 01 00 +T F0 0A 00 00 21 00 00 18 1B +R 00 00 01 00 +T F5 0A 00 00 +R 00 00 01 00 +T F5 0A 00 00 18 16 +R 00 00 01 00 +T F7 0A 00 00 +R 00 00 01 00 +T F7 0A 00 00 DD 6E FE DD 66 FF DD 4E FC DD 46 +R 00 00 01 00 +T 02 0B 00 00 FD A7 ED 42 28 02 +R 00 00 01 00 +T 08 0B 00 00 +R 00 00 01 00 +T 08 0B 00 00 18 03 +R 00 00 01 00 +T 0A 0B 00 00 +R 00 00 01 00 +T 0A 0B 00 00 C3 59 0A 00 00 +R 00 00 01 00 00 05 01 00 +T 0D 0B 00 00 +R 00 00 01 00 +T 0D 0B 00 00 21 01 00 +R 00 00 01 00 +T 10 0B 00 00 +R 00 00 01 00 +T 10 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T 13 0B 00 00 +R 00 00 01 00 +T 13 0B 00 00 CD 00 00 00 00 F8 FF 0A 6F 03 0A +R 00 00 01 00 02 05 13 00 +T 1C 0B 00 00 67 DD 75 FE DD 74 FF DD 7E 08 DD +R 00 00 01 00 +T 27 0B 00 00 B6 09 20 14 +R 00 00 01 00 +T 2B 0B 00 00 +R 00 00 01 00 +T 2B 0B 00 00 21 04 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T 36 0B 00 00 23 66 68 DD 75 08 DD 74 09 +R 00 00 01 00 +T 3F 0B 00 00 +R 00 00 01 00 +T 3F 0B 00 00 +R 00 00 01 00 +T 3F 0B 00 00 AF 3C CA 40 0D 00 00 +R 00 00 01 00 00 07 01 00 +T 44 0B 00 00 +R 00 00 01 00 +T 44 0B 00 00 DD 6E 08 DD 66 09 DD 75 FA DD 74 +R 00 00 01 00 +T 4F 0B 00 00 FB +R 00 00 01 00 +T 50 0B 00 00 +R 00 00 01 00 +T 50 0B 00 00 DD 6E FA DD 66 FB AF B6 28 15 DD +R 00 00 01 00 +T 5B 0B 00 00 6E FA DD 66 FB 7E FE 0A 28 0A +R 00 00 01 00 +T 65 0B 00 00 +R 00 00 01 00 +T 65 0B 00 00 +R 00 00 01 00 +T 65 0B 00 00 +R 00 00 01 00 +T 65 0B 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 6D 0B 00 00 +R 00 00 01 00 +T 6D 0B 00 00 18 E1 +R 00 00 01 00 +T 6F 0B 00 00 +R 00 00 01 00 +T 6F 0B 00 00 DD 6E FA DD 66 FB AF B6 28 03 +R 00 00 01 00 +T 79 0B 00 00 +R 00 00 01 00 +T 79 0B 00 00 C3 40 0D 00 00 +R 00 00 01 00 00 05 01 00 +T 7C 0B 00 00 +R 00 00 01 00 +T 7C 0B 00 00 21 06 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 87 0B 00 00 23 B6 28 18 +R 00 00 01 00 +T 8B 0B 00 00 +R 00 00 01 00 +T 8B 0B 00 00 21 08 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T 96 0B 00 00 23 66 68 DD 4E FE DD 46 FF 09 C3 +R 00 00 01 00 +T A1 0B 00 00 47 0D 00 00 +R 00 00 01 00 00 04 01 00 +T A3 0B 00 00 +R 00 00 01 00 +T A3 0B 00 00 21 04 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T AE 0B 00 00 23 66 68 DD 4E FE DD 46 FF A7 ED +R 00 00 01 00 +T B9 0B 00 00 42 C2 51 0C 00 00 +R 00 00 01 00 00 06 01 00 +T BD 0B 00 00 +R 00 00 01 00 +T BD 0B 00 00 21 08 00 DD 4E 04 DD 46 05 09 56 +R 00 00 01 00 +T C8 0B 00 00 23 66 6A E5 03 03 69 60 4E 23 46 +R 00 00 01 00 +T D3 0B 00 00 E1 A7 ED 42 20 76 +R 00 00 01 00 +T D9 0B 00 00 +R 00 00 01 00 +T D9 0B 00 00 DD 6E 04 DD 66 05 23 23 06 01 CD +R 00 00 01 00 +T E4 0B 00 00 00 00 00 00 DD 6E 04 DD 66 05 23 +R 00 00 01 00 02 04 00 00 +T ED 0B 00 00 23 4E 23 46 03 DD 5E FE DD 56 FF +R 00 00 01 00 +T F8 0B 00 00 CD 4C 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 00 05 01 00 +T 01 0C 00 00 21 04 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T 0C 0C 00 00 DD 5E FE DD 56 FF 21 04 00 09 7E +R 00 00 01 00 +T 17 0C 00 00 23 66 6F A7 ED 52 DD 5E FC DD 56 +R 00 00 01 00 +T 22 0C 00 00 FD 19 4D 44 E1 71 23 70 DD 4E FE +R 00 00 01 00 +T 2D 0C 00 00 DD 46 FF DD 6E 08 DD 66 09 A7 ED +R 00 00 01 00 +T 38 0C 00 00 42 19 DD 75 08 DD 74 09 DD 73 FE +R 00 00 01 00 +T 43 0C 00 00 DD 72 FF DD 6E 04 DD 66 05 73 23 +R 00 00 01 00 +T 4E 0C 00 00 72 +R 00 00 01 00 +T 4F 0C 00 00 +R 00 00 01 00 +T 4F 0C 00 00 18 6F +R 00 00 01 00 +T 51 0C 00 00 +R 00 00 01 00 +T 51 0C 00 00 DD 4E FE DD 46 FF 21 04 00 DD 5E +R 00 00 01 00 +T 5C 0C 00 00 04 DD 56 05 19 7E 23 66 6F A7 ED +R 00 00 01 00 +T 67 0C 00 00 42 4D 44 21 10 00 39 7E 91 77 23 +R 00 00 01 00 +T 72 0C 00 00 7E 98 77 DD 4E FE DD 46 FF 21 +R 00 00 01 00 +T 7C 0C 00 00 04 00 19 7E 23 66 6F A7 ED 42 4D +R 00 00 01 00 +T 87 0C 00 00 44 21 08 00 19 7E 91 77 23 7E 98 +R 00 00 01 00 +T 92 0C 00 00 77 2B 6E 67 E5 21 04 00 19 4E 23 +R 00 00 01 00 +T 9D 0C 00 00 46 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T A5 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T AA 0C 00 00 00 00 00 00 F1 21 04 00 DD 4E 04 +R 00 00 01 00 02 04 01 00 +T B3 0C 00 00 DD 46 05 09 DD 4E FE DD 46 FF 71 +R 00 00 01 00 +T BE 0C 00 00 23 70 +R 00 00 01 00 +T C0 0C 00 00 +R 00 00 01 00 +T C0 0C 00 00 21 08 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T CB 0C 00 00 23 56 03 03 0A 6F 03 0A 67 A7 ED +R 00 00 01 00 +T D6 0C 00 00 52 E5 21 08 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T E1 0C 00 00 09 46 23 66 68 DD 4E FE DD 46 FF +R 00 00 01 00 +T EC 0C 00 00 09 4D 44 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T F6 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T FB 0C 00 00 00 00 00 00 F1 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 04 01 00 +T 04 0D 00 00 7D B4 20 0F +R 00 00 01 00 +T 08 0D 00 00 +R 00 00 01 00 +T 08 0D 00 00 21 06 00 DD 4E 04 DD 46 05 09 36 +R 00 00 01 00 +T 13 0D 00 00 01 23 36 00 +R 00 00 01 00 +T 17 0D 00 00 +R 00 00 01 00 +T 17 0D 00 00 21 08 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 22 0D 00 00 DD 86 F8 77 23 7E DD 8E F9 77 21 +R 00 00 01 00 +T 2D 0D 00 00 08 00 09 46 23 66 68 DD 4E FE DD +R 00 00 01 00 +T 38 0D 00 00 46 FF 09 36 00 C3 3F 0B 00 00 +R 00 00 01 00 00 0A 01 00 +T 40 0D 00 00 +R 00 00 01 00 +T 40 0D 00 00 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T 47 0D 00 00 +R 00 00 01 00 +T 47 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 76 69 72 74 75 61 6C 20 6D 65 6D +R 00 00 02 00 +T 0B 00 00 00 6F 72 79 20 65 78 68 61 75 73 74 +R 00 00 02 00 +T 16 00 00 00 65 64 0A 00 +R 00 00 02 00 +T 1A 00 00 00 +R 00 00 02 00 +T 1A 00 00 00 54 45 52 4D 00 +R 00 00 02 00 +T 1F 00 00 00 +R 00 00 02 00 +T 1F 00 00 00 54 45 52 4D 43 41 50 00 +R 00 00 02 00 +T 27 00 00 00 +R 00 00 02 00 +T 27 00 00 00 74 63 00 +R 00 00 02 00 +T 2A 00 00 00 +R 00 00 02 00 +T 2A 00 00 00 2F 65 74 63 2F 74 65 72 6D 63 61 +R 00 00 02 00 +T 35 00 00 00 70 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 1C 00 00 00 +R 00 00 04 00 +T 1C 00 00 00 +R 00 00 04 00 +T 00 00 00 00 20 07 08 20 20 1B 0C 20 20 20 20 +R 00 00 05 00 +T 0B 00 00 00 20 20 20 0A 20 20 20 0D 20 20 20 +R 00 00 05 00 +T 16 00 00 00 0B 20 20 20 20 00 00 00 32 00 +R 00 00 05 00 +T 20 00 00 00 4B 00 6E 00 87 00 96 00 FE FF +R 00 00 05 00 +T 2A 00 00 00 FD FF FA FF F4 FF EE FF E8 FF +R 00 00 05 00 +T 34 00 00 00 D0 FF A0 FF 40 FF 80 FE +R 00 00 05 00 diff --git a/src/nos/lib/crt_banked_lib/tmpnam.rel b/src/nos/lib/crt_banked_lib/tmpnam.rel new file mode 100644 index 00000000..af5ce082 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/tmpnam.rel @@ -0,0 +1,87 @@ +XL4 +H 4 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ultoa Ref00000000 +S _strcpy Ref00000000 +S _access Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 95 flags 0 +S _tmpnam Def00000059 +A CSTR size 6 flags 0 +A UDATA0 size 44 flags 0 +S __tmpnum Def00000040 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 20 08 +R 00 00 01 00 02 05 06 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 DD 36 02 00 00 00 00 DD 36 03 +R 00 00 01 00 09 07 03 00 +T 0E 00 00 00 00 00 00 00 +R 00 00 01 00 89 04 03 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 01 00 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T 18 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 1E 00 00 00 00 00 00 00 21 0A 00 E5 DD 5E 02 +R 00 00 01 00 02 04 00 00 +T 27 00 00 00 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 2D 00 00 00 00 00 00 00 CD 00 00 00 00 DD 4E +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 34 00 00 00 02 DD 46 03 09 E5 DD 4E 0A DD 46 +R 00 00 01 00 +T 3F 00 00 00 0B DD 5E 08 DD 56 09 3E +R 00 00 01 00 +T 47 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 4C 00 00 00 00 00 00 00 F1 F1 DD 6E 02 DD 66 +R 00 00 01 00 02 04 00 00 +T 55 00 00 00 03 C3 00 00 00 00 +R 00 00 01 00 02 06 03 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 21 40 00 00 00 01 00 00 11 0D 00 +R 00 00 01 00 00 05 03 00 +T 65 00 00 00 CD 00 00 00 00 C5 D5 DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 6E 00 00 00 56 03 CD 00 00 00 00 F1 F1 DD 75 +R 00 00 01 00 00 07 01 00 +T 77 00 00 00 02 DD 74 03 01 00 00 EB 3E +R 00 00 01 00 +T 80 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 85 00 00 00 00 00 00 00 7D A4 3C 20 D0 +R 00 00 01 00 02 04 00 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 74 6D 70 2F 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 40 00 00 00 +R 00 00 03 00 +T 40 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/tparam.rel b/src/nos/lib/crt_banked_lib/tparam.rel new file mode 100644 index 00000000..bfff3efb --- /dev/null +++ b/src/nos/lib/crt_banked_lib/tparam.rel @@ -0,0 +1,701 @@ +XL4 +H 4 areas 1B global symbols +S ?S_LSHASG_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_MULASG_L02 Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _memcpy Ref00000000 +S ?SS_MODASG_L02 Ref00000000 +S ?SS_DIVASG_L02 Ref00000000 +S _strcat Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _realloc Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +S _exit Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6FA flags 0 +S _tparam Def00000075 +S _tgoto Def00000096 +A CSTR size 1A flags 0 +A UDATA0 size 36 flags 0 +S __UP Def00000002 +S __BC Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 21 19 00 E5 01 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 09 00 00 00 11 02 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 16 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 16 00 +T 1B 00 00 00 00 00 00 00 CD 00 00 00 00 D1 C1 +R 00 00 01 00 02 04 16 00 02 09 01 00 +T 22 00 00 00 C9 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 0F 00 +T 2C 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 15 00 +T 31 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 15 00 02 09 01 00 +T 38 00 00 00 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 0F 00 +T 55 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0C 00 +T 5A 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 61 00 00 00 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 CD 00 00 00 00 21 0C 00 39 E5 21 +R 00 00 01 00 02 05 0D 00 +T 7E 00 00 00 00 00 E5 21 00 00 E5 DD 6E 0A DD +R 00 00 01 00 +T 89 00 00 00 66 0B E5 CD E4 00 00 00 F1 F1 F1 +R 00 00 01 00 00 08 01 00 +T 92 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 08 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 0F 00 +T 9F 00 00 00 B6 03 20 05 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 21 00 00 18 39 +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 DD 6E 0A DD 66 0B DD 75 FC DD 74 +R 00 00 01 00 +T B3 00 00 00 FD DD 6E 04 DD 66 05 DD 75 FE DD +R 00 00 01 00 +T BE 00 00 00 74 FF 21 00 00 39 E5 2A +R 00 00 01 00 +T C6 00 00 00 00 00 00 00 E5 2A 02 00 00 00 E5 +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T CD 00 00 00 21 32 00 E5 01 04 00 00 00 DD 5E +R 00 00 01 00 00 09 03 00 +T D6 00 00 00 02 DD 56 03 CD E4 00 00 00 F1 F1 +R 00 00 01 00 00 09 01 00 +T DF 00 00 00 F1 F1 +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 CD 00 00 00 00 EC FF DD 6E 02 DD +R 00 00 01 00 02 05 0F 00 +T ED 00 00 00 66 03 DD 75 F0 DD 74 F1 DD 71 F2 +R 00 00 01 00 +T F8 00 00 00 DD 70 F3 DD 6E 0E DD 66 0F DD 75 +R 00 00 01 00 +T 03 01 00 00 F4 DD 74 F5 AF DD 77 F6 DD 77 F7 +R 00 00 01 00 +T 0E 01 00 00 AF DD 77 F8 DD 77 F9 AF DD 77 FA +R 00 00 01 00 +T 19 01 00 00 DD 77 FB DD 6E 08 DD 66 09 DD 4E +R 00 00 01 00 +T 24 01 00 00 04 DD 46 05 09 DD 75 FC DD 74 FD +R 00 00 01 00 +T 2F 01 00 00 +R 00 00 01 00 +T 2F 01 00 00 AF 3C CA 91 06 00 00 +R 00 00 01 00 00 07 01 00 +T 34 01 00 00 +R 00 00 01 00 +T 34 01 00 00 21 05 00 DD 4E F2 DD 46 F3 09 DD +R 00 00 01 00 +T 3F 01 00 00 4E FC DD 46 FD A7 ED 42 DA +R 00 00 01 00 +T 48 01 00 00 0D 02 00 00 +R 00 00 01 00 00 04 01 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 DD 7E F6 DD B6 F7 20 4E +R 00 00 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 21 28 00 DD 4E 08 DD 46 09 09 DD +R 00 00 01 00 +T 5D 01 00 00 75 F6 DD 74 F7 EB CD 23 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 66 01 00 00 DD 75 FE DD 74 FF 21 10 00 39 7E +R 00 00 01 00 +T 71 01 00 00 C6 28 77 23 7E CE 00 77 DD 4E 04 +R 00 00 01 00 +T 7C 01 00 00 DD 46 05 DD 6E F2 DD 66 F3 A7 ED +R 00 00 01 00 +T 87 01 00 00 42 E5 DD 4E 04 DD 46 05 DD 5E FE +R 00 00 01 00 +T 92 01 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 98 01 00 00 00 00 00 00 CD 00 00 00 00 F1 18 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 9F 01 00 00 29 +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 21 10 00 39 7E DD 86 F6 77 23 7E +R 00 00 01 00 +T AB 01 00 00 DD 8E F7 77 21 0A 00 39 06 01 CD +R 00 00 01 00 +T B6 01 00 00 00 00 00 00 4B 42 DD 5E 04 DD 56 +R 00 00 01 00 02 04 00 00 +T BF 01 00 00 05 CD 4C 00 00 00 DD 75 FE DD 74 +R 00 00 01 00 00 06 01 00 +T C8 01 00 00 FF +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T D4 01 00 00 FF A7 ED 42 4D 44 21 06 00 39 7E +R 00 00 01 00 +T DF 01 00 00 81 77 23 7E 88 77 DD 4E 04 DD 46 +R 00 00 01 00 +T EA 01 00 00 05 DD 6E FE DD 66 FF A7 ED 42 4D +R 00 00 01 00 +T F5 01 00 00 44 21 10 00 39 7E 81 77 23 7E 88 +R 00 00 01 00 +T 00 02 00 00 77 DD 6E FE DD 66 FF DD 75 04 DD +R 00 00 01 00 +T 0B 02 00 00 74 05 +R 00 00 01 00 +T 0D 02 00 00 +R 00 00 01 00 +T 0D 02 00 00 DD 6E F0 DD 66 F1 23 DD 75 F0 DD +R 00 00 01 00 +T 18 02 00 00 74 F1 2B 4E 06 00 DD 71 EC DD 70 +R 00 00 01 00 +T 23 02 00 00 ED 79 B0 20 03 +R 00 00 01 00 +T 28 02 00 00 +R 00 00 01 00 +T 28 02 00 00 C3 91 06 00 00 +R 00 00 01 00 00 05 01 00 +T 2B 02 00 00 +R 00 00 01 00 +T 2B 02 00 00 3E 25 DD AE EC DD B6 ED C2 +R 00 00 01 00 +T 34 02 00 00 7C 06 00 00 +R 00 00 01 00 00 04 01 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 DD 6E F0 DD 66 F1 23 DD 75 F0 DD +R 00 00 01 00 +T 41 02 00 00 74 F1 2B 4E 06 00 DD 71 EC DD 70 +R 00 00 01 00 +T 4C 02 00 00 ED DD 6E 0E DD 66 0F 56 23 66 6A +R 00 00 01 00 +T 57 02 00 00 DD 75 EE DD 74 EF 59 50 CD +R 00 00 01 00 +T 60 02 00 00 00 00 00 00 11 00 25 00 2B 00 +R 00 00 01 00 02 04 03 00 +T 68 02 00 00 2E 00 32 00 33 00 3E 00 42 00 +R 00 00 01 00 +T 72 02 00 00 43 00 44 00 61 00 62 00 64 00 +R 00 00 01 00 +T 7C 02 00 00 66 00 69 00 6D 00 6E 00 72 00 +R 00 00 01 00 +T 86 02 00 00 7A 06 00 00 8F 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8A 02 00 00 F6 05 00 00 18 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8E 02 00 00 D8 05 00 00 6C 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 92 02 00 00 AA 02 00 00 7C 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 96 02 00 00 07 05 00 00 5B 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 9A 02 00 00 75 03 00 00 3A 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 9E 02 00 00 C7 04 00 00 D1 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A2 02 00 00 25 03 00 00 C7 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A6 02 00 00 AB 03 00 00 F3 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T AA 02 00 00 +R 00 00 01 00 +T AA 02 00 00 01 0A 80 DD 6E EE DD 66 EF 3E 80 +R 00 00 01 00 +T B5 02 00 00 AC 67 ED 42 30 03 +R 00 00 01 00 +T BB 02 00 00 +R 00 00 01 00 +T BB 02 00 00 C3 47 03 00 00 +R 00 00 01 00 00 05 01 00 +T BE 02 00 00 +R 00 00 01 00 +T BE 02 00 00 01 64 80 DD 6E EE DD 66 EF 3E 80 +R 00 00 01 00 +T C9 02 00 00 AC 67 ED 42 30 02 +R 00 00 01 00 +T CF 02 00 00 +R 00 00 01 00 +T CF 02 00 00 18 54 +R 00 00 01 00 +T D1 02 00 00 +R 00 00 01 00 +T D1 02 00 00 +R 00 00 01 00 +T D1 02 00 00 DD 4E EE DD 46 EF 21 E7 03 CD +R 00 00 01 00 +T DB 02 00 00 00 00 00 00 30 28 +R 00 00 01 00 02 04 11 00 +T DF 02 00 00 +R 00 00 01 00 +T DF 02 00 00 01 E8 03 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T E9 02 00 00 00 00 00 00 7B C6 30 DD 6E F2 DD +R 00 00 01 00 02 04 13 00 +T F2 02 00 00 66 F3 23 DD 75 F2 DD 74 F3 2B 77 +R 00 00 01 00 +T FD 02 00 00 21 02 00 39 01 E8 03 CD +R 00 00 01 00 +T 05 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 +T 07 03 00 00 +R 00 00 01 00 +T 07 03 00 00 01 64 00 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T 11 03 00 00 00 00 00 00 7B C6 30 DD 6E F2 DD +R 00 00 01 00 02 04 13 00 +T 1A 03 00 00 66 F3 23 DD 75 F2 DD 74 F3 2B 77 +R 00 00 01 00 +T 25 03 00 00 +R 00 00 01 00 +T 25 03 00 00 +R 00 00 01 00 +T 25 03 00 00 21 02 00 39 01 64 00 CD +R 00 00 01 00 +T 2D 03 00 00 00 00 00 00 01 0A 00 CD +R 00 00 01 00 02 04 05 00 +T 33 03 00 00 00 00 00 00 7B C6 30 DD 6E F2 DD +R 00 00 01 00 02 04 13 00 +T 3C 03 00 00 66 F3 23 DD 75 F2 DD 74 F3 2B 77 +R 00 00 01 00 +T 47 03 00 00 +R 00 00 01 00 +T 47 03 00 00 01 0A 00 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T 51 03 00 00 00 00 00 00 7B C6 30 DD 6E F2 DD +R 00 00 01 00 02 04 12 00 +T 5A 03 00 00 66 F3 23 DD 75 F2 DD 74 F3 2B 77 +R 00 00 01 00 +T 65 03 00 00 DD 7E 0E C6 02 DD 77 0E 30 03 DD +R 00 00 01 00 +T 70 03 00 00 34 0F +R 00 00 01 00 +T 72 03 00 00 +R 00 00 01 00 +T 72 03 00 00 C3 7A 06 00 00 +R 00 00 01 00 00 05 01 00 +T 75 03 00 00 +R 00 00 01 00 +T 75 03 00 00 01 60 80 DD 6E EE DD 66 EF 3E 80 +R 00 00 01 00 +T 80 03 00 00 AC 67 ED 42 38 25 +R 00 00 01 00 +T 86 03 00 00 +R 00 00 01 00 +T 86 03 00 00 01 60 00 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T 90 03 00 00 00 00 00 00 DD 6E F2 DD 66 F3 23 +R 00 00 01 00 02 04 13 00 +T 99 03 00 00 DD 75 F2 DD 74 F3 2B 73 21 02 00 +R 00 00 01 00 +T A4 03 00 00 39 01 60 00 CD 00 00 00 00 +R 00 00 01 00 02 09 05 00 +T AB 03 00 00 +R 00 00 01 00 +T AB 03 00 00 +R 00 00 01 00 +T AB 03 00 00 DD 6E F0 DD 66 F1 23 DD 75 F0 DD +R 00 00 01 00 +T B6 03 00 00 74 F1 2B 4E 06 00 21 02 00 39 7E +R 00 00 01 00 +T C1 03 00 00 81 77 23 7E 88 77 +R 00 00 01 00 +T C7 03 00 00 +R 00 00 01 00 +T C7 03 00 00 DD 7E 0C DD B6 0D 28 7F +R 00 00 01 00 +T CF 03 00 00 +R 00 00 01 00 +T CF 03 00 00 +R 00 00 01 00 +T CF 03 00 00 DD 7E EE DD B6 EF 28 14 3E 0A DD +R 00 00 01 00 +T DA 03 00 00 AE EE DD B6 EF 28 0A 3E 09 DD AE +R 00 00 01 00 +T E5 03 00 00 EE DD B6 EF 20 63 +R 00 00 01 00 +T EB 03 00 00 +R 00 00 01 00 +T EB 03 00 00 +R 00 00 01 00 +T EB 03 00 00 +R 00 00 01 00 +T EB 03 00 00 DD 34 EE 20 03 DD 34 EF +R 00 00 01 00 +T F3 03 00 00 +R 00 00 01 00 +T F3 03 00 00 DD 6E F4 DD 66 F5 DD 4E 0E DD 46 +R 00 00 01 00 +T FE 03 00 00 0F A7 ED 42 20 25 +R 00 00 01 00 +T 04 04 00 00 +R 00 00 01 00 +T 04 04 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 0C 04 00 00 +R 00 00 01 00 +T 0C 04 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 14 04 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 1B 04 00 00 44 21 10 00 39 7E 91 77 23 7E 98 +R 00 00 01 00 +T 26 04 00 00 77 18 23 +R 00 00 01 00 +T 29 04 00 00 +R 00 00 01 00 +T 29 04 00 00 DD 34 F8 20 03 DD 34 F9 +R 00 00 01 00 +T 31 04 00 00 +R 00 00 01 00 +T 31 04 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 39 04 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 40 04 00 00 44 21 10 00 39 7E 91 77 23 7E 98 +R 00 00 01 00 +T 4B 04 00 00 77 +R 00 00 01 00 +T 4C 04 00 00 +R 00 00 01 00 +T 4C 04 00 00 18 81 +R 00 00 01 00 +T 4E 04 00 00 +R 00 00 01 00 +T 4E 04 00 00 +R 00 00 01 00 +T 4E 04 00 00 DD 7E EE DD B6 EF 28 05 DD 7E EE +R 00 00 01 00 +T 59 04 00 00 18 02 +R 00 00 01 00 +T 5B 04 00 00 +R 00 00 01 00 +T 5B 04 00 00 3E 80 +R 00 00 01 00 +T 5D 04 00 00 +R 00 00 01 00 +T 5D 04 00 00 DD 6E F2 DD 66 F3 23 DD 75 F2 DD +R 00 00 01 00 +T 68 04 00 00 74 F3 2B 77 +R 00 00 01 00 +T 6C 04 00 00 +R 00 00 01 00 +T 6C 04 00 00 DD 7E 0E C6 02 DD 77 0E 30 03 DD +R 00 00 01 00 +T 77 04 00 00 34 0F +R 00 00 01 00 +T 79 04 00 00 +R 00 00 01 00 +T 79 04 00 00 C3 7A 06 00 00 +R 00 00 01 00 00 05 01 00 +T 7C 04 00 00 +R 00 00 01 00 +T 7C 04 00 00 DD 7E 0E D6 02 DD 77 0E DD 7E 0F +R 00 00 01 00 +T 87 04 00 00 DE 00 DD 77 0F C3 7A 06 00 00 +R 00 00 01 00 00 0A 01 00 +T 8F 04 00 00 +R 00 00 01 00 +T 8F 04 00 00 DD 6E 0E DD 66 0F 23 23 46 23 66 +R 00 00 01 00 +T 9A 04 00 00 68 E5 DD 6E 0E DD 66 0F C1 71 23 +R 00 00 01 00 +T A5 04 00 00 70 DD 6E 0E DD 66 0F 23 23 DD 4E +R 00 00 01 00 +T B0 04 00 00 EE DD 46 EF 71 23 70 DD 7E F4 C6 +R 00 00 01 00 +T BB 04 00 00 02 DD 77 F4 30 03 DD 34 F5 +R 00 00 01 00 +T C4 04 00 00 +R 00 00 01 00 +T C4 04 00 00 C3 7A 06 00 00 +R 00 00 01 00 00 05 01 00 +T C7 04 00 00 +R 00 00 01 00 +T C7 04 00 00 DD 6E 0E DD 66 0F 4E 23 46 DD 6E +R 00 00 01 00 +T D2 04 00 00 F0 DD 66 F1 23 DD 75 F0 DD 74 F1 +R 00 00 01 00 +T DD 04 00 00 2B 6E 26 00 CD 00 00 00 00 30 16 +R 00 00 01 00 02 09 11 00 +T E6 04 00 00 +R 00 00 01 00 +T E6 04 00 00 DD 6E F0 DD 66 F1 4E 06 00 DD 6E +R 00 00 01 00 +T F1 04 00 00 0E DD 66 0F 7E 81 77 23 7E 88 77 +R 00 00 01 00 +T FC 04 00 00 +R 00 00 01 00 +T FC 04 00 00 DD 34 F0 20 03 DD 34 F1 +R 00 00 01 00 +T 04 05 00 00 +R 00 00 01 00 +T 04 05 00 00 C3 7A 06 00 00 +R 00 00 01 00 00 05 01 00 +T 07 05 00 00 +R 00 00 01 00 +T 07 05 00 00 DD 6E F0 DD 66 F1 23 23 7E E6 7F +R 00 00 01 00 +T 12 05 00 00 4F 06 00 DD 71 EE DD 70 EF DD 6E +R 00 00 01 00 +T 1D 05 00 00 F0 DD 66 F1 23 7E FE 70 20 1C +R 00 00 01 00 +T 27 05 00 00 +R 00 00 01 00 +T 27 05 00 00 DD 6E EE DD 66 EF 29 DD 4E 0E DD +R 00 00 01 00 +T 32 05 00 00 46 0F 09 01 80 FF 09 46 23 66 68 +R 00 00 01 00 +T 3D 05 00 00 DD 75 EE DD 74 EF +R 00 00 01 00 +T 43 05 00 00 +R 00 00 01 00 +T 43 05 00 00 DD 6E F0 DD 66 F1 7E FE 2D 20 13 +R 00 00 01 00 +T 4E 05 00 00 +R 00 00 01 00 +T 4E 05 00 00 DD 6E 0E DD 66 0F 7E DD 96 EE 77 +R 00 00 01 00 +T 59 05 00 00 23 7E DD 9E EF 77 18 67 +R 00 00 01 00 +T 61 05 00 00 +R 00 00 01 00 +T 61 05 00 00 DD 6E F0 DD 66 F1 7E FE 2B 20 13 +R 00 00 01 00 +T 6C 05 00 00 +R 00 00 01 00 +T 6C 05 00 00 DD 6E 0E DD 66 0F 7E DD 86 EE 77 +R 00 00 01 00 +T 77 05 00 00 23 7E DD 8E EF 77 18 49 +R 00 00 01 00 +T 7F 05 00 00 +R 00 00 01 00 +T 7F 05 00 00 DD 6E F0 DD 66 F1 7E FE 2A 20 11 +R 00 00 01 00 +T 8A 05 00 00 +R 00 00 01 00 +T 8A 05 00 00 DD 4E EE DD 46 EF DD 6E 0E DD 66 +R 00 00 01 00 +T 95 05 00 00 0F CD 00 00 00 00 18 2D +R 00 00 01 00 02 06 02 00 +T 9B 05 00 00 +R 00 00 01 00 +T 9B 05 00 00 DD 6E F0 DD 66 F1 7E FE 2F 20 11 +R 00 00 01 00 +T A6 05 00 00 +R 00 00 01 00 +T A6 05 00 00 DD 4E EE DD 46 EF DD 6E 0E DD 66 +R 00 00 01 00 +T B1 05 00 00 0F CD 00 00 00 00 18 11 +R 00 00 01 00 02 06 06 00 +T B7 05 00 00 +R 00 00 01 00 +T B7 05 00 00 DD 6E EE DD 66 EF E5 DD 6E 0E DD +R 00 00 01 00 +T C2 05 00 00 66 0F C1 71 23 70 +R 00 00 01 00 +T C8 05 00 00 +R 00 00 01 00 +T C8 05 00 00 +R 00 00 01 00 +T C8 05 00 00 +R 00 00 01 00 +T C8 05 00 00 +R 00 00 01 00 +T C8 05 00 00 21 04 00 39 7E C6 03 77 23 7E CE +R 00 00 01 00 +T D3 05 00 00 00 77 C3 7A 06 00 00 +R 00 00 01 00 00 07 01 00 +T D8 05 00 00 +R 00 00 01 00 +T D8 05 00 00 DD 6E 0E DD 66 0F 34 23 20 01 34 +R 00 00 01 00 +T E3 05 00 00 +R 00 00 01 00 +T E3 05 00 00 DD 6E 0E DD 66 0F 23 23 34 23 20 +R 00 00 01 00 +T EE 05 00 00 01 34 +R 00 00 01 00 +T F0 05 00 00 +R 00 00 01 00 +T F0 05 00 00 C3 7A 06 00 00 +R 00 00 01 00 00 05 01 00 +T F3 05 00 00 +R 00 00 01 00 +T F3 05 00 00 C3 7C 06 00 00 +R 00 00 01 00 00 05 01 00 +T F6 05 00 00 +R 00 00 01 00 +T F6 05 00 00 DD 6E 0E DD 66 0F 7E EE 60 77 23 +R 00 00 01 00 +T 01 06 00 00 7E EE 00 77 DD 6E 0E DD 66 0F 23 +R 00 00 01 00 +T 0C 06 00 00 23 7E EE 60 77 23 7E EE 00 77 18 +R 00 00 01 00 +T 17 06 00 00 62 +R 00 00 01 00 +T 18 06 00 00 +R 00 00 01 00 +T 18 06 00 00 DD 6E 0E DD 66 0F 7E EE 7F 77 23 +R 00 00 01 00 +T 23 06 00 00 7E EE 00 77 DD 6E 0E DD 66 0F 23 +R 00 00 01 00 +T 2E 06 00 00 23 7E EE 7F 77 23 7E EE 00 77 18 +R 00 00 01 00 +T 39 06 00 00 40 +R 00 00 01 00 +T 3A 06 00 00 +R 00 00 01 00 +T 3A 06 00 00 01 0A 00 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T 44 06 00 00 00 00 00 00 01 06 00 CD +R 00 00 01 00 02 04 13 00 +T 4A 06 00 00 00 00 00 00 DD 6E 0E DD 66 0F 7E +R 00 00 01 00 02 04 10 00 +T 53 06 00 00 83 77 23 7E 8A 77 18 1F +R 00 00 01 00 +T 5B 06 00 00 +R 00 00 01 00 +T 5B 06 00 00 01 10 00 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T 65 06 00 00 00 00 00 00 EB 29 4D 44 DD 6E 0E +R 00 00 01 00 02 04 12 00 +T 6E 06 00 00 DD 66 0F 7E 91 77 23 7E 98 77 18 +R 00 00 01 00 +T 79 06 00 00 00 +R 00 00 01 00 +T 7A 06 00 00 +R 00 00 01 00 +T 7A 06 00 00 18 12 +R 00 00 01 00 +T 7C 06 00 00 +R 00 00 01 00 +T 7C 06 00 00 +R 00 00 01 00 +T 7C 06 00 00 DD 46 EC DD 6E F2 DD 66 F3 23 DD +R 00 00 01 00 +T 87 06 00 00 75 F2 DD 74 F3 2B 70 +R 00 00 01 00 +T 8E 06 00 00 +R 00 00 01 00 +T 8E 06 00 00 C3 2F 01 00 00 +R 00 00 01 00 00 05 01 00 +T 91 06 00 00 +R 00 00 01 00 +T 91 06 00 00 DD 6E F2 DD 66 F3 36 00 +R 00 00 01 00 +T 99 06 00 00 +R 00 00 01 00 +T 99 06 00 00 DD 4E FA DD 46 FB 0B DD 71 FA DD +R 00 00 01 00 +T A4 06 00 00 70 FB 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 11 00 +T AD 06 00 00 30 16 +R 00 00 01 00 +T AF 06 00 00 +R 00 00 01 00 +T AF 06 00 00 DD 4E 0A DD 46 0B DD 5E F2 DD 56 +R 00 00 01 00 +T BA 06 00 00 F3 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T C0 06 00 00 CD 00 00 00 00 18 D4 +R 00 00 01 00 02 05 01 00 +T C5 06 00 00 +R 00 00 01 00 +T C5 06 00 00 +R 00 00 01 00 +T C5 06 00 00 DD 4E F8 DD 46 F9 0B DD 71 F8 DD +R 00 00 01 00 +T D0 06 00 00 70 F9 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 11 00 +T D9 06 00 00 30 16 +R 00 00 01 00 +T DB 06 00 00 +R 00 00 01 00 +T DB 06 00 00 DD 4E 0C DD 46 0D DD 5E F2 DD 56 +R 00 00 01 00 +T E6 06 00 00 F3 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T EC 06 00 00 CD 00 00 00 00 18 D4 +R 00 00 01 00 02 05 01 00 +T F1 06 00 00 +R 00 00 01 00 +T F1 06 00 00 DD 6E 04 DD 66 05 C3 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 76 69 72 74 75 61 6C 20 6D 65 6D +R 00 00 02 00 +T 0B 00 00 00 6F 72 79 20 65 78 68 61 75 73 74 +R 00 00 02 00 +T 16 00 00 00 65 64 0A 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/ttyname.rel b/src/nos/lib/crt_banked_lib/ttyname.rel new file mode 100644 index 00000000..784b2fdd --- /dev/null +++ b/src/nos/lib/crt_banked_lib/ttyname.rel @@ -0,0 +1,164 @@ +XL4 +H 6 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strcat Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _closedir Ref00000000 +S _strlen Ref00000000 +S _readdir Ref00000000 +S _isatty Ref00000000 +S .__.ABS. Def00000000 +S _fstat Ref00000000 +S _strcpy Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _opendir Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13A flags 0 +S _ttyname Def00000000 +A CSTR size 2 flags 0 +A UDATA0 size E flags 0 +A IDATA0 size 5 flags 0 +A CDATA0 size 5 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 BC FF AF DD 77 FA +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 DD 77 FB 2A 00 00 00 00 DD 75 FE +R 00 00 01 00 02 08 0A 00 +T 12 00 00 00 DD 74 FF 21 00 00 39 4D 44 DD 5E +R 00 00 01 00 +T 1D 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T 24 00 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 2B 00 00 00 28 06 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 C3 37 01 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 3B 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 42 00 00 00 B4 20 0C +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 21 19 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 0A 00 +T 4E 00 00 00 C3 37 01 00 00 +R 00 00 01 00 00 05 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 04 00 2B 0A 0C 00 +T 57 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 5E 00 00 00 FC DD 74 FD 7D B4 20 06 +R 00 00 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 21 00 00 C3 37 01 00 00 +R 00 00 01 00 00 08 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 01 00 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 00 05 04 00 00 0A 03 00 +T 73 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 78 00 00 00 00 00 00 00 01 00 00 00 00 11 +R 00 00 01 00 02 04 00 00 00 09 02 00 +T 7E 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 01 00 +T 83 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 90 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 97 00 00 00 75 F8 DD 74 F9 7D B4 28 7A +R 00 00 01 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 21 06 00 DD 4E F8 DD 46 F9 09 EB +R 00 00 01 00 +T AB 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T B1 00 00 00 00 00 00 00 4D 44 21 08 00 A7 ED +R 00 00 01 00 02 04 00 00 +T BA 00 00 00 42 30 02 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 18 C9 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 21 06 00 DD 4E F8 DD 46 F9 09 4D +R 00 00 01 00 +T CA 00 00 00 44 11 05 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 09 00 +T D0 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T D7 00 00 00 1E 00 39 4D 44 11 00 00 00 00 3E +R 00 00 01 00 00 0A 03 00 +T E0 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T E5 00 00 00 00 00 00 00 7D B4 20 2C DD 6E BC +R 00 00 01 00 02 04 00 00 +T EE 00 00 00 DD 66 BD DD 4E DA DD 46 DB A7 ED +R 00 00 01 00 +T F9 00 00 00 42 20 1B DD 6E BE DD 66 BF DD 4E +R 00 00 01 00 +T 04 01 00 00 DC DD 46 DD A7 ED 42 20 0A +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 DD 36 FA 00 00 00 00 DD 36 FB +R 00 00 01 00 09 07 03 00 +T 14 01 00 00 00 00 00 00 18 03 +R 00 00 01 00 89 04 03 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 C3 88 00 00 00 +R 00 00 01 00 00 05 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 22 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 29 01 00 00 6E FE DD 66 FF 22 00 00 00 00 DD +R 00 00 01 00 02 0A 0A 00 +T 32 01 00 00 6E FA DD 66 FB +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 2F 64 65 76 00 +R 00 00 05 00 diff --git a/src/nos/lib/crt_banked_lib/tzset.rel b/src/nos/lib/crt_banked_lib/tzset.rel new file mode 100644 index 00000000..17387925 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/tzset.rel @@ -0,0 +1,104 @@ +XL4 +H 6 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _getenv Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _atoi Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AA flags 0 +S _tzset Def00000000 +A CSTR size B flags 0 +A UDATA0 size 6 flags 0 +S _daylight Def00000000 +S _timezone Def00000002 +A IDATA0 size 4 flags 0 +S _tzname Def00000000 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 11 +R 00 00 01 00 02 05 06 00 +T 06 00 00 00 08 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 01 00 +T 0B 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 12 00 00 00 FC DD 74 FD 7D B4 20 23 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 03 00 E5 01 00 00 00 00 ED 5B +R 00 00 01 00 00 09 02 00 +T 23 00 00 00 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 02 00 +T 28 00 00 00 00 00 00 00 CD 00 00 00 00 F1 01 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 2F 00 00 00 00 00 21 30 2A 22 02 00 00 00 ED +R 00 00 01 00 00 0A 03 00 +T 38 00 00 00 43 04 00 00 00 18 6A +R 00 00 01 00 00 05 03 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 03 00 E5 DD 4E FC DD 46 FD ED +R 00 00 01 00 +T 48 00 00 00 5B 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 04 00 2B 0A 02 00 +T 4E 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 55 00 00 00 5E FC DD 56 FD 13 13 13 3E +R 00 00 01 00 +T 5E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 63 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 01 +R 00 00 01 00 02 04 00 00 +T 6C 00 00 00 64 00 EB CD 00 00 00 00 01 3C 00 +R 00 00 01 00 02 08 0A 00 +T 75 00 00 00 CD 00 00 00 00 D5 01 64 00 DD 5E +R 00 00 01 00 02 05 07 00 +T 7E 00 00 00 FE DD 56 FF CD 00 00 00 00 EB D1 +R 00 00 01 00 02 09 09 00 +T 87 00 00 00 19 EB AF 93 5F 3E 00 9A 57 7A 07 +R 00 00 01 00 +T 92 00 00 00 9F 4F 41 C5 D5 01 00 00 21 3C 00 +R 00 00 01 00 +T 9D 00 00 00 CD 00 00 00 00 22 02 00 00 00 ED +R 00 00 01 00 02 05 05 00 00 0A 03 00 +T A4 00 00 00 43 04 00 00 00 +R 00 00 01 00 00 05 03 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 47 4D 54 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 00 00 00 00 +R 00 00 02 00 +T 08 00 00 00 +R 00 00 02 00 +T 08 00 00 00 54 5A 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 00 00 04 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 diff --git a/src/nos/lib/crt_banked_lib/ultoa.rel b/src/nos/lib/crt_banked_lib/ultoa.rel new file mode 100644 index 00000000..ca3ad612 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/ultoa.rel @@ -0,0 +1,37 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___longtoa Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 55 flags 0 +S _ultoa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 36 FE 41 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD CB 0D 7E 28 16 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 DD 36 FE 61 DD 4E 0C DD 46 0D A7 +R 00 00 01 00 +T 1A 00 00 00 21 00 00 ED 42 DD 75 0C DD 74 0D +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E FE E5 0E 00 C5 DD 6E 0C DD +R 00 00 01 00 +T 30 00 00 00 66 0D E5 DD 6E 0A DD 66 0B E5 DD +R 00 00 01 00 +T 3B 00 00 00 4E 04 DD 46 05 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 46 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 4C 00 00 00 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T 53 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_banked_lib/ungetc.rel b/src/nos/lib/crt_banked_lib/ungetc.rel new file mode 100644 index 00000000..482a8606 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/ungetc.rel @@ -0,0 +1,77 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _ungetc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0C 00 09 7E E6 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 80 28 0E +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 14 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 0C 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 25 00 00 00 E6 10 4F 23 7E E6 02 47 3E 10 A9 +R 00 00 01 00 +T 30 00 00 00 B0 28 06 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 FF FF C3 BA 00 00 00 +R 00 00 01 00 00 08 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 21 0C 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 44 00 00 00 F6 00 77 23 7E F6 04 77 69 60 4E +R 00 00 01 00 +T 4F 00 00 00 23 46 21 06 00 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 5A 00 00 00 19 56 23 66 6A A7 ED 42 30 18 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 6E 04 DD 66 05 4E 23 46 0B 70 +R 00 00 01 00 +T 6F 00 00 00 2B 71 69 60 DD 46 02 70 68 26 00 +R 00 00 01 00 +T 7A 00 00 00 18 3E +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 6E 04 DD 66 05 23 23 46 23 66 +R 00 00 01 00 +T 87 00 00 00 68 E5 21 06 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 92 00 00 00 09 4E 23 46 E1 A7 ED 42 20 1B +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T A7 00 00 00 03 70 2B 71 0B 69 60 DD 46 02 70 +R 00 00 01 00 +T B2 00 00 00 68 26 00 18 03 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 21 FF FF +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_banked_lib/utsname.rel b/src/nos/lib/crt_banked_lib/utsname.rel new file mode 100644 index 00000000..e329f175 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/utsname.rel @@ -0,0 +1,69 @@ +XL4 +H 3 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _getfsys Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BE flags 0 +S _uname Def00000000 +A CSTR size C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C6 FF 21 00 00 39 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4D 44 11 F8 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 17 00 00 00 00 00 39 01 00 00 09 4D 44 DD 5E +R 00 00 01 00 +T 22 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T 29 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 2F 00 00 00 00 00 39 01 1E 00 09 4D 44 21 +R 00 00 01 00 +T 39 00 00 00 0E 00 DD 5E 02 DD 56 03 19 EB 3E +R 00 00 01 00 +T 44 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 49 00 00 00 00 00 00 00 21 00 00 39 01 16 00 +R 00 00 01 00 02 04 00 00 +T 52 00 00 00 09 4D 44 21 1C 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 5D 00 00 00 03 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 63 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 69 00 00 00 00 00 39 01 0E 00 09 4D 44 21 +R 00 00 01 00 +T 73 00 00 00 24 00 DD 5E 02 DD 56 03 19 EB 3E +R 00 00 01 00 +T 7E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 83 00 00 00 00 00 00 00 21 00 00 39 01 2C 00 +R 00 00 01 00 02 04 00 00 +T 8C 00 00 00 09 4D 44 21 2C 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 97 00 00 00 03 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 9D 00 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T A3 00 00 00 00 00 00 00 21 34 00 DD 5E 02 DD +R 00 00 01 00 00 04 02 00 +T AC 00 00 00 56 03 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T B3 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T B9 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 28 6C 6F 63 61 6C 68 6F 73 74 29 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/vfprintf.rel b/src/nos/lib/crt_banked_lib/vfprintf.rel new file mode 100644 index 00000000..e83ec859 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/vfprintf.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___fputter Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___vprinter Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F flags 0 +S _vfprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 E5 C5 D5 0E 00 00 00 00 11 +R 00 00 01 00 2B 08 01 00 +T 0F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 09 06 00 +T 14 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 1B 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 diff --git a/src/nos/lib/crt_banked_lib/vfscanf.rel b/src/nos/lib/crt_banked_lib/vfscanf.rel new file mode 100644 index 00000000..47f928e7 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/vfscanf.rel @@ -0,0 +1,952 @@ +XL4 +H 3 areas 11 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _ungetc Ref00000000 +S _fgetc Ref00000000 +S ?L_NEG_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S _strcpy Ref00000000 +S ?L_MUL_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8A1 flags 0 +S _vfscanf Def00000000 +A CSTR size 18 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 50 FF AF DD 77 FD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 DD 77 FE 79 B0 28 0A DD 6E 04 DD +R 00 00 01 00 +T 14 00 00 00 66 05 AF B6 20 06 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 00 00 C3 9E 08 00 00 +R 00 00 01 00 00 08 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 28 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 2F 00 00 00 75 F7 DD 74 F8 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 4E F7 DD 46 F8 21 00 00 CD +R 00 00 01 00 +T 3E 00 00 00 00 00 00 00 D2 65 08 00 00 +R 00 00 01 00 02 04 0D 00 00 09 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 AF DD 77 E9 DD 77 EA DD 6E 04 DD +R 00 00 01 00 +T 4E 00 00 00 66 05 7E FE 25 C2 E1 07 00 00 +R 00 00 01 00 00 0A 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 21 00 00 39 AF 77 23 77 23 77 23 +R 00 00 01 00 +T 61 00 00 00 77 DD 36 F9 FF DD 36 FA FF DD 36 +R 00 00 01 00 +T 6C 00 00 00 EF 01 DD 36 F0 00 DD 36 ED 0A DD +R 00 00 01 00 +T 77 00 00 00 36 EE 00 AF DD 77 FB DD 77 FC DD +R 00 00 01 00 +T 82 00 00 00 36 E9 01 DD 36 EA 00 DD 36 F1 01 +R 00 00 01 00 +T 8D 00 00 00 DD 36 F2 00 DD 36 EB FF DD 36 EC +R 00 00 01 00 +T 98 00 00 00 FF 01 00 00 00 00 21 06 00 39 5D +R 00 00 01 00 00 06 02 00 +T A1 00 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T A7 00 00 00 CD 00 00 00 00 01 07 00 00 00 21 +R 00 00 01 00 02 05 00 00 00 0A 02 00 +T AE 00 00 00 86 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T B6 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 09 00 02 09 00 00 +T BD 00 00 00 04 DD 66 05 23 7E FE 2A 20 16 +R 00 00 01 00 +T C7 00 00 00 +R 00 00 01 00 +T C7 00 00 00 AF DD 77 E9 DD 77 EA AF DD 77 F1 +R 00 00 01 00 +T D2 00 00 00 DD 77 F2 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T E8 00 00 00 74 05 4E 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 08 00 +T F1 00 00 00 7E E6 08 28 38 +R 00 00 01 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 DD 7E F9 DD A6 FA 3C 20 07 +R 00 00 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 AF DD 77 F9 DD 77 FA +R 00 00 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 DD 6E 04 DD 66 05 4E 06 00 21 +R 00 00 01 00 +T 10 01 00 00 D0 FF 09 01 0A 00 DD 5E F9 DD 56 +R 00 00 01 00 +T 1B 01 00 00 FA CD 00 00 00 00 19 DD 75 F9 DD +R 00 00 01 00 02 06 0C 00 +T 24 01 00 00 74 FA DD 75 EF DD 74 F0 18 AF +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 DD 6E 04 DD 66 05 2B DD 75 04 DD +R 00 00 01 00 +T 39 01 00 00 74 05 +R 00 00 01 00 +T 3B 01 00 00 +R 00 00 01 00 +T 3B 01 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T 43 01 00 00 +R 00 00 01 00 +T 43 01 00 00 DD 6E 04 DD 66 05 4E 06 00 21 +R 00 00 01 00 +T 4D 01 00 00 00 00 00 00 09 7E E6 02 28 0C DD +R 00 00 01 00 02 04 08 00 +T 56 01 00 00 6E 04 DD 66 05 7E EE 20 5F 18 07 +R 00 00 01 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 DD 6E 04 DD 66 05 5E +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 CD 00 00 00 00 0D 00 00 2A 5B 62 +R 00 00 01 00 02 05 0F 00 +T 71 01 00 00 63 64 68 69 6C 6F 73 75 78 +R 00 00 01 00 +T 7A 01 00 00 DD 07 00 00 D6 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7E 01 00 00 E7 01 00 00 77 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 82 01 00 00 CC 01 00 00 A6 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 86 01 00 00 B9 01 00 00 B0 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8A 01 00 00 E0 01 00 00 EF 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8E 01 00 00 C2 01 00 00 12 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 92 01 00 00 96 01 00 00 D0 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 96 01 00 00 +R 00 00 01 00 +T 96 01 00 00 AF DD 77 E9 DD 77 EA AF DD 77 F1 +R 00 00 01 00 +T A1 01 00 00 DD 77 F2 18 95 +R 00 00 01 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 DD 36 FB 01 DD 36 FC 00 18 8B +R 00 00 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 AF DD 77 FB DD 77 FC 18 82 +R 00 00 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 AF DD 77 ED DD 77 EE 18 25 +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 DD 36 ED 02 DD 36 EE 00 18 1B +R 00 00 01 00 +T CC 01 00 00 +R 00 00 01 00 +T CC 01 00 00 DD 36 ED 08 DD 36 EE 00 18 11 +R 00 00 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 DD 36 ED 10 DD 36 EE 00 18 07 +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 AF DD 77 EB DD 77 EC +R 00 00 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 DD 4E F7 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 08 00 +T F0 01 00 00 7E E6 10 28 23 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T FD 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 04 02 00 00 75 F7 DD 74 F8 4D 44 21 00 00 CD +R 00 00 01 00 +T 0F 02 00 00 00 00 00 00 38 03 +R 00 00 01 00 02 04 0D 00 +T 13 02 00 00 +R 00 00 01 00 +T 13 02 00 00 C3 65 08 00 00 +R 00 00 01 00 00 05 01 00 +T 16 02 00 00 +R 00 00 01 00 +T 16 02 00 00 18 CF +R 00 00 01 00 +T 18 02 00 00 +R 00 00 01 00 +T 18 02 00 00 DD 6E 04 DD 66 05 4E 06 00 21 +R 00 00 01 00 +T 22 02 00 00 00 00 00 00 09 7E E6 02 28 08 +R 00 00 01 00 02 04 08 00 +T 2A 02 00 00 +R 00 00 01 00 +T 2A 02 00 00 DD 36 FB 01 DD 36 FC 00 +R 00 00 01 00 +T 32 02 00 00 +R 00 00 01 00 +T 32 02 00 00 DD 7E ED DD B6 EE C2 DA 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 3B 02 00 00 +R 00 00 01 00 +T 3B 02 00 00 DD 36 ED 0A DD 36 EE 00 AF DD 77 +R 00 00 01 00 +T 46 02 00 00 EB DD 77 EC 3E 25 DD AE F7 DD B6 +R 00 00 01 00 +T 51 02 00 00 F8 20 0B +R 00 00 01 00 +T 54 02 00 00 +R 00 00 01 00 +T 54 02 00 00 DD 36 ED 02 DD 36 EE 00 C3 +R 00 00 01 00 +T 5D 02 00 00 12 03 00 00 +R 00 00 01 00 00 04 01 00 +T 5F 02 00 00 +R 00 00 01 00 +T 5F 02 00 00 3E 30 DD AE F7 DD B6 F8 20 71 +R 00 00 01 00 +T 69 02 00 00 +R 00 00 01 00 +T 69 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 71 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 78 02 00 00 75 F7 DD 74 F8 4D 44 21 00 00 CD +R 00 00 01 00 +T 83 02 00 00 00 00 00 00 38 03 +R 00 00 01 00 02 04 0D 00 +T 87 02 00 00 +R 00 00 01 00 +T 87 02 00 00 C3 5B 04 00 00 +R 00 00 01 00 00 05 01 00 +T 8A 02 00 00 +R 00 00 01 00 +T 8A 02 00 00 3E 62 DD AE F7 DD B6 F8 28 0A 3E +R 00 00 01 00 +T 95 02 00 00 42 DD AE F7 DD B6 F8 20 0F +R 00 00 01 00 +T 9E 02 00 00 +R 00 00 01 00 +T 9E 02 00 00 +R 00 00 01 00 +T 9E 02 00 00 +R 00 00 01 00 +T 9E 02 00 00 DD 36 ED 02 DD 36 EE 00 DD 36 D8 +R 00 00 01 00 +T A9 02 00 00 00 C3 1D 04 00 00 +R 00 00 01 00 00 06 01 00 +T AD 02 00 00 +R 00 00 01 00 +T AD 02 00 00 3E 78 DD AE F7 DD B6 F8 28 19 3E +R 00 00 01 00 +T B8 02 00 00 58 DD AE F7 DD B6 F8 28 0F +R 00 00 01 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 DD 36 ED 08 DD 36 EE 00 DD 36 DE +R 00 00 01 00 +T CC 02 00 00 00 C3 1D 04 00 00 +R 00 00 01 00 00 06 01 00 +T D0 02 00 00 +R 00 00 01 00 +T D0 02 00 00 DD 36 ED 10 DD 36 EE 00 18 38 +R 00 00 01 00 +T DA 02 00 00 +R 00 00 01 00 +T DA 02 00 00 +R 00 00 01 00 +T DA 02 00 00 DD 7E EB DD B6 EC 20 51 3E 0A DD +R 00 00 01 00 +T E5 02 00 00 AE ED DD B6 EE 20 47 3E 2D DD AE +R 00 00 01 00 +T F0 02 00 00 F7 DD B6 F8 20 04 0E 01 18 02 +R 00 00 01 00 +T FA 02 00 00 +R 00 00 01 00 +T FA 02 00 00 0E 00 +R 00 00 01 00 +T FC 02 00 00 +R 00 00 01 00 +T FC 02 00 00 06 00 DD 71 EB DD 70 EC 79 B0 20 +R 00 00 01 00 +T 07 03 00 00 0A 3E 2B DD AE F7 DD B6 F8 20 21 +R 00 00 01 00 +T 12 03 00 00 +R 00 00 01 00 +T 12 03 00 00 +R 00 00 01 00 +T 12 03 00 00 +R 00 00 01 00 +T 12 03 00 00 +R 00 00 01 00 +T 12 03 00 00 +R 00 00 01 00 +T 12 03 00 00 +R 00 00 01 00 +T 12 03 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 1A 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 21 03 00 00 75 F7 DD 74 F8 4D 44 21 00 00 CD +R 00 00 01 00 +T 2C 03 00 00 00 00 00 00 38 03 +R 00 00 01 00 02 04 0D 00 +T 30 03 00 00 +R 00 00 01 00 +T 30 03 00 00 C3 65 08 00 00 +R 00 00 01 00 00 05 01 00 +T 33 03 00 00 +R 00 00 01 00 +T 33 03 00 00 +R 00 00 01 00 +T 33 03 00 00 21 86 00 39 DD 4E ED DD 46 EE 09 +R 00 00 01 00 +T 3E 03 00 00 36 00 21 04 00 39 E5 DD 4E F7 06 +R 00 00 01 00 +T 49 03 00 00 00 21 00 00 00 00 09 7E E6 04 28 +R 00 00 01 00 02 06 08 00 +T 52 03 00 00 0E DD 7E F7 EE 20 4F DD 7E F8 EE +R 00 00 01 00 +T 5D 03 00 00 00 47 18 06 +R 00 00 01 00 +T 61 03 00 00 +R 00 00 01 00 +T 61 03 00 00 DD 4E F7 DD 46 F8 +R 00 00 01 00 +T 67 03 00 00 +R 00 00 01 00 +T 67 03 00 00 21 88 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 6F 03 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 76 03 00 00 44 E1 71 23 70 DD 7E F7 DD B6 F8 +R 00 00 01 00 +T 81 03 00 00 28 09 21 04 00 39 7E 23 B6 20 0B +R 00 00 01 00 +T 8C 03 00 00 +R 00 00 01 00 +T 8C 03 00 00 +R 00 00 01 00 +T 8C 03 00 00 DD 7E F9 DD B6 FA 28 03 +R 00 00 01 00 +T 94 03 00 00 +R 00 00 01 00 +T 94 03 00 00 +R 00 00 01 00 +T 94 03 00 00 +R 00 00 01 00 +T 94 03 00 00 C3 65 08 00 00 +R 00 00 01 00 00 05 01 00 +T 97 03 00 00 +R 00 00 01 00 +T 97 03 00 00 +R 00 00 01 00 +T 97 03 00 00 21 04 00 39 7E 23 B6 CA +R 00 00 01 00 +T 9F 03 00 00 5B 04 00 00 DD 6E F9 DD 66 FA 2B +R 00 00 01 00 00 04 01 00 +T A8 03 00 00 DD 75 F9 DD 74 FA 23 7D B4 CA +R 00 00 01 00 +T B2 03 00 00 5B 04 00 00 DD 7E F7 DD B6 F8 CA +R 00 00 01 00 00 04 01 00 +T BB 03 00 00 5B 04 00 00 +R 00 00 01 00 00 04 01 00 +T BD 03 00 00 +R 00 00 01 00 +T BD 03 00 00 +R 00 00 01 00 +T BD 03 00 00 +R 00 00 01 00 +T BD 03 00 00 21 86 00 39 4D 44 21 04 00 39 56 +R 00 00 01 00 +T C8 03 00 00 23 66 6A A7 ED 42 7C 07 9F 4F 41 +R 00 00 01 00 +T D3 03 00 00 C5 E5 DD 6E ED DD 66 EE 7C 07 9F +R 00 00 01 00 +T DE 03 00 00 4F 41 C5 E5 21 08 00 39 5E 23 56 +R 00 00 01 00 +T E9 03 00 00 23 4E 23 46 EB CD 00 00 00 00 59 +R 00 00 01 00 02 0A 0A 00 +T F2 03 00 00 50 C1 09 EB C1 ED 4A 4D 44 EB E5 +R 00 00 01 00 +T FD 03 00 00 21 02 00 39 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 08 04 00 00 70 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 10 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 15 04 00 00 00 00 00 00 DD 75 F7 DD 74 F8 +R 00 00 01 00 02 04 00 00 +T 1D 04 00 00 +R 00 00 01 00 +T 1D 04 00 00 21 04 00 39 E5 DD 4E F7 06 00 21 +R 00 00 01 00 +T 28 04 00 00 00 00 00 00 09 7E E6 04 28 0E DD +R 00 00 01 00 02 04 08 00 +T 31 04 00 00 7E F7 EE 20 4F DD 7E F8 EE 00 47 +R 00 00 01 00 +T 3C 04 00 00 18 06 +R 00 00 01 00 +T 3E 04 00 00 +R 00 00 01 00 +T 3E 04 00 00 DD 4E F7 DD 46 F8 +R 00 00 01 00 +T 44 04 00 00 +R 00 00 01 00 +T 44 04 00 00 21 88 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 4C 04 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 53 04 00 00 44 E1 71 23 70 C3 97 03 00 00 +R 00 00 01 00 00 0A 01 00 +T 5B 04 00 00 +R 00 00 01 00 +T 5B 04 00 00 +R 00 00 01 00 +T 5B 04 00 00 DD 7E E9 DD B6 EA CA EC 04 00 00 +R 00 00 01 00 00 0B 01 00 +T 64 04 00 00 +R 00 00 01 00 +T 64 04 00 00 3E 01 DD AE EB DD B6 EC 20 1C +R 00 00 01 00 +T 6E 04 00 00 +R 00 00 01 00 +T 6E 04 00 00 21 00 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 79 04 00 00 EB CD 00 00 00 00 E5 21 02 00 39 +R 00 00 01 00 02 06 04 00 +T 82 04 00 00 D1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 8A 04 00 00 +R 00 00 01 00 +T 8A 04 00 00 DD 7E FB DD B6 FC 28 2C +R 00 00 01 00 +T 92 04 00 00 +R 00 00 01 00 +T 92 04 00 00 21 BA 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T 9D 04 00 00 00 77 2B 6E 67 2B 2B 7E 23 66 6F +R 00 00 01 00 +T A8 04 00 00 E5 21 02 00 39 5E 23 56 23 4E 23 +R 00 00 01 00 +T B3 04 00 00 46 E1 73 23 72 23 71 23 70 18 26 +R 00 00 01 00 +T BE 04 00 00 +R 00 00 01 00 +T BE 04 00 00 21 BA 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T C9 04 00 00 00 77 2B 6E 67 2B 2B 7E 23 66 6F +R 00 00 01 00 +T D4 04 00 00 E5 21 02 00 39 5E 23 56 23 4E 23 +R 00 00 01 00 +T DF 04 00 00 46 E1 73 23 72 +R 00 00 01 00 +T E4 04 00 00 +R 00 00 01 00 +T E4 04 00 00 DD 34 FD 20 03 DD 34 FE +R 00 00 01 00 +T EC 04 00 00 +R 00 00 01 00 +T EC 04 00 00 +R 00 00 01 00 +T EC 04 00 00 C3 DF 07 00 00 +R 00 00 01 00 00 05 01 00 +T EF 04 00 00 +R 00 00 01 00 +T EF 04 00 00 DD 6E EF DD 66 F0 DD 75 F9 DD 74 +R 00 00 01 00 +T FA 04 00 00 FA AF DD 77 F1 DD 77 F2 AF DD 77 +R 00 00 01 00 +T 05 05 00 00 FB DD 77 FC 21 06 00 39 36 00 C3 +R 00 00 01 00 +T 10 05 00 00 AF 06 00 00 +R 00 00 01 00 00 04 01 00 +T 12 05 00 00 +R 00 00 01 00 +T 12 05 00 00 21 04 00 39 E5 21 08 00 39 4D 44 +R 00 00 01 00 +T 1D 05 00 00 E1 71 23 70 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T 28 05 00 00 DD 75 04 DD 74 05 7E FE 5E 20 11 +R 00 00 01 00 +T 33 05 00 00 +R 00 00 01 00 +T 33 05 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T 3B 05 00 00 +R 00 00 01 00 +T 3B 05 00 00 AF DD 77 FB DD 77 FC 18 08 +R 00 00 01 00 +T 44 05 00 00 +R 00 00 01 00 +T 44 05 00 00 DD 36 FB 01 DD 36 FC 00 +R 00 00 01 00 +T 4C 05 00 00 +R 00 00 01 00 +T 4C 05 00 00 DD 36 F3 02 DD 36 F4 00 DD 6E 04 +R 00 00 01 00 +T 57 05 00 00 DD 66 05 7E FE 5D 28 0B DD 6E 04 +R 00 00 01 00 +T 62 05 00 00 DD 66 05 7E FE 2D 20 24 +R 00 00 01 00 +T 6A 05 00 00 +R 00 00 01 00 +T 6A 05 00 00 +R 00 00 01 00 +T 6A 05 00 00 +R 00 00 01 00 +T 6A 05 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T 75 05 00 00 74 05 2B 46 21 04 00 39 5E 23 56 +R 00 00 01 00 +T 80 05 00 00 13 72 2B 73 1B EB 70 AF DD 77 F3 +R 00 00 01 00 +T 8B 05 00 00 DD 77 F4 +R 00 00 01 00 +T 8E 05 00 00 +R 00 00 01 00 +T 8E 05 00 00 +R 00 00 01 00 +T 8E 05 00 00 DD 6E 04 DD 66 05 7E FE 5D CA +R 00 00 01 00 +T 98 05 00 00 6B 06 00 00 +R 00 00 01 00 00 04 01 00 +T 9A 05 00 00 +R 00 00 01 00 +T 9A 05 00 00 DD 6E 04 DD 66 05 AF B6 20 03 +R 00 00 01 00 +T A4 05 00 00 +R 00 00 01 00 +T A4 05 00 00 C3 65 08 00 00 +R 00 00 01 00 00 05 01 00 +T A7 05 00 00 +R 00 00 01 00 +T A7 05 00 00 DD 5E F3 DD 56 F4 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T B0 05 00 00 00 00 03 00 4B 06 00 00 +R 00 00 01 00 00 08 01 00 +T B6 05 00 00 29 06 00 00 BC 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T BA 05 00 00 44 06 00 00 +R 00 00 01 00 00 04 01 00 +T BC 05 00 00 +R 00 00 01 00 +T BC 05 00 00 21 04 00 39 46 23 66 68 2B 2B 4E +R 00 00 01 00 +T C7 05 00 00 06 00 DD 71 F5 DD 70 F6 DD 6E 04 +R 00 00 01 00 +T D2 05 00 00 DD 66 05 6E 26 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0D 00 +T DB 05 00 00 38 4C +R 00 00 01 00 +T DD 05 00 00 +R 00 00 01 00 +T DD 05 00 00 21 04 00 39 7E D6 02 77 23 7E DE +R 00 00 01 00 +T E8 05 00 00 00 77 +R 00 00 01 00 +T EA 05 00 00 +R 00 00 01 00 +T EA 05 00 00 DD 6E 04 DD 66 05 4E 06 00 DD 6E +R 00 00 01 00 +T F5 05 00 00 F5 DD 66 F6 CD 00 00 00 00 30 21 +R 00 00 01 00 02 09 0D 00 +T FE 05 00 00 +R 00 00 01 00 +T FE 05 00 00 DD 6E F5 DD 66 F6 23 DD 75 F5 DD +R 00 00 01 00 +T 09 06 00 00 74 F6 2B E5 21 06 00 39 4E 23 46 +R 00 00 01 00 +T 14 06 00 00 03 70 2B 71 0B 69 60 C1 71 18 CB +R 00 00 01 00 +T 1F 06 00 00 +R 00 00 01 00 +T 1F 06 00 00 DD 36 F3 02 DD 36 F4 00 18 22 +R 00 00 01 00 +T 29 06 00 00 +R 00 00 01 00 +T 29 06 00 00 +R 00 00 01 00 +T 29 06 00 00 DD 6E 04 DD 66 05 7E FE 2D 20 04 +R 00 00 01 00 +T 34 06 00 00 0E 01 18 02 +R 00 00 01 00 +T 38 06 00 00 +R 00 00 01 00 +T 38 06 00 00 0E 00 +R 00 00 01 00 +T 3A 06 00 00 +R 00 00 01 00 +T 3A 06 00 00 06 00 DD 71 F3 DD 70 F4 18 07 +R 00 00 01 00 +T 44 06 00 00 +R 00 00 01 00 +T 44 06 00 00 AF DD 77 F3 DD 77 F4 +R 00 00 01 00 +T 4B 06 00 00 +R 00 00 01 00 +T 4B 06 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T 56 06 00 00 74 05 2B 46 21 04 00 39 5E 23 56 +R 00 00 01 00 +T 61 06 00 00 13 72 2B 73 1B EB 70 C3 +R 00 00 01 00 +T 69 06 00 00 8E 05 00 00 +R 00 00 01 00 00 04 01 00 +T 6B 06 00 00 +R 00 00 01 00 +T 6B 06 00 00 21 04 00 39 7E 23 66 6F 36 00 18 +R 00 00 01 00 +T 76 06 00 00 38 +R 00 00 01 00 +T 77 06 00 00 +R 00 00 01 00 +T 77 06 00 00 AF DD 77 FB DD 77 FC +R 00 00 01 00 +T 7E 06 00 00 +R 00 00 01 00 +T 7E 06 00 00 DD 4E F7 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 08 00 +T 87 06 00 00 7E E6 10 28 23 +R 00 00 01 00 +T 8C 06 00 00 +R 00 00 01 00 +T 8C 06 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 94 06 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 9B 06 00 00 75 F7 DD 74 F8 4D 44 21 00 00 CD +R 00 00 01 00 +T A6 06 00 00 00 00 00 00 38 03 +R 00 00 01 00 02 04 0D 00 +T AA 06 00 00 +R 00 00 01 00 +T AA 06 00 00 C3 65 08 00 00 +R 00 00 01 00 00 05 01 00 +T AD 06 00 00 +R 00 00 01 00 +T AD 06 00 00 18 CF +R 00 00 01 00 +T AF 06 00 00 +R 00 00 01 00 +T AF 06 00 00 +R 00 00 01 00 +T AF 06 00 00 21 04 00 39 E5 21 BC 00 39 7E C6 +R 00 00 01 00 +T BA 06 00 00 02 77 23 7E CE 00 77 2B 6E 67 2B +R 00 00 01 00 +T C5 06 00 00 2B 4E 23 46 E1 71 23 70 DD 7E F9 +R 00 00 01 00 +T D0 06 00 00 DD B6 FA 28 58 +R 00 00 01 00 +T D5 06 00 00 +R 00 00 01 00 +T D5 06 00 00 DD 4E F7 DD 46 F8 21 06 00 39 5D +R 00 00 01 00 +T E0 06 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T E6 06 00 00 CD 00 00 00 00 DD 75 E7 DD 74 E8 +R 00 00 01 00 02 05 00 00 +T EF 06 00 00 DD 4E F7 DD 46 F8 21 00 00 CD +R 00 00 01 00 +T F9 06 00 00 00 00 00 00 30 1B DD 7E E7 DD B6 +R 00 00 01 00 02 04 0D 00 +T 02 07 00 00 E8 20 04 0E 01 18 02 +R 00 00 01 00 +T 09 07 00 00 +R 00 00 01 00 +T 09 07 00 00 0E 00 +R 00 00 01 00 +T 0B 07 00 00 +R 00 00 01 00 +T 0B 07 00 00 06 00 DD 6E FB DD 66 FC A7 ED 42 +R 00 00 01 00 +T 16 07 00 00 20 15 +R 00 00 01 00 +T 18 07 00 00 +R 00 00 01 00 +T 18 07 00 00 +R 00 00 01 00 +T 18 07 00 00 +R 00 00 01 00 +T 18 07 00 00 DD 7E F1 DD B6 F2 28 0A +R 00 00 01 00 +T 20 07 00 00 +R 00 00 01 00 +T 20 07 00 00 21 04 00 39 7E 23 66 6F 36 00 +R 00 00 01 00 +T 2A 07 00 00 +R 00 00 01 00 +T 2A 07 00 00 C3 65 08 00 00 +R 00 00 01 00 00 05 01 00 +T 2D 07 00 00 +R 00 00 01 00 +T 2D 07 00 00 +R 00 00 01 00 +T 2D 07 00 00 +R 00 00 01 00 +T 2D 07 00 00 DD 7E E9 DD B6 EA 28 11 +R 00 00 01 00 +T 35 07 00 00 +R 00 00 01 00 +T 35 07 00 00 DD 46 F7 21 04 00 39 5E 23 56 13 +R 00 00 01 00 +T 40 07 00 00 72 2B 73 1B EB 70 +R 00 00 01 00 +T 46 07 00 00 +R 00 00 01 00 +T 46 07 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 4E 07 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 55 07 00 00 75 F7 DD 74 F8 4D 44 21 00 00 CD +R 00 00 01 00 +T 60 07 00 00 00 00 00 00 30 11 DD 6E F9 DD 66 +R 00 00 01 00 02 04 0D 00 +T 69 07 00 00 FA 2B DD 75 F9 DD 74 FA 7D B4 20 +R 00 00 01 00 +T 74 07 00 00 02 +R 00 00 01 00 +T 75 07 00 00 +R 00 00 01 00 +T 75 07 00 00 +R 00 00 01 00 +T 75 07 00 00 +R 00 00 01 00 +T 75 07 00 00 18 35 +R 00 00 01 00 +T 77 07 00 00 +R 00 00 01 00 +T 77 07 00 00 DD 4E F7 DD 46 F8 21 06 00 39 5D +R 00 00 01 00 +T 82 07 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 88 07 00 00 CD 00 00 00 00 DD 75 E7 DD 74 E8 +R 00 00 01 00 02 05 00 00 +T 91 07 00 00 7D B4 20 04 0E 01 18 02 +R 00 00 01 00 +T 99 07 00 00 +R 00 00 01 00 +T 99 07 00 00 0E 00 +R 00 00 01 00 +T 9B 07 00 00 +R 00 00 01 00 +T 9B 07 00 00 06 00 DD 6E FB DD 66 FC A7 ED 42 +R 00 00 01 00 +T A6 07 00 00 20 02 +R 00 00 01 00 +T A8 07 00 00 +R 00 00 01 00 +T A8 07 00 00 18 02 +R 00 00 01 00 +T AA 07 00 00 +R 00 00 01 00 +T AA 07 00 00 18 81 +R 00 00 01 00 +T AC 07 00 00 +R 00 00 01 00 +T AC 07 00 00 DD 7E E9 DD B6 EA 28 1A +R 00 00 01 00 +T B4 07 00 00 +R 00 00 01 00 +T B4 07 00 00 DD 7E F1 DD B6 F2 28 0A +R 00 00 01 00 +T BC 07 00 00 +R 00 00 01 00 +T BC 07 00 00 21 04 00 39 7E 23 66 6F 36 00 +R 00 00 01 00 +T C6 07 00 00 +R 00 00 01 00 +T C6 07 00 00 DD 34 FD 20 03 DD 34 FE +R 00 00 01 00 +T CE 07 00 00 +R 00 00 01 00 +T CE 07 00 00 +R 00 00 01 00 +T CE 07 00 00 18 0F +R 00 00 01 00 +T D0 07 00 00 +R 00 00 01 00 +T D0 07 00 00 DD 6E 04 DD 66 05 2B DD 75 04 DD +R 00 00 01 00 +T DB 07 00 00 74 05 +R 00 00 01 00 +T DD 07 00 00 +R 00 00 01 00 +T DD 07 00 00 18 46 +R 00 00 01 00 +T DF 07 00 00 +R 00 00 01 00 +T DF 07 00 00 18 6E +R 00 00 01 00 +T E1 07 00 00 +R 00 00 01 00 +T E1 07 00 00 DD 6E 04 DD 66 05 4E 06 00 21 +R 00 00 01 00 +T EB 07 00 00 00 00 00 00 09 7E E6 10 28 32 +R 00 00 01 00 02 04 08 00 +T F3 07 00 00 +R 00 00 01 00 +T F3 07 00 00 +R 00 00 01 00 +T F3 07 00 00 DD 4E F7 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 08 00 +T FC 07 00 00 7E E6 10 28 22 +R 00 00 01 00 +T 01 08 00 00 +R 00 00 01 00 +T 01 08 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 09 08 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 10 08 00 00 75 F7 DD 74 F8 4D 44 21 00 00 CD +R 00 00 01 00 +T 1B 08 00 00 00 00 00 00 38 02 +R 00 00 01 00 02 04 0D 00 +T 1F 08 00 00 +R 00 00 01 00 +T 1F 08 00 00 18 44 +R 00 00 01 00 +T 21 08 00 00 +R 00 00 01 00 +T 21 08 00 00 18 D0 +R 00 00 01 00 +T 23 08 00 00 +R 00 00 01 00 +T 23 08 00 00 18 2A +R 00 00 01 00 +T 25 08 00 00 +R 00 00 01 00 +T 25 08 00 00 +R 00 00 01 00 +T 25 08 00 00 DD 6E 04 DD 66 05 4E 06 00 DD 6E +R 00 00 01 00 +T 30 08 00 00 F7 DD 66 F8 A7 ED 42 28 02 +R 00 00 01 00 +T 39 08 00 00 +R 00 00 01 00 +T 39 08 00 00 18 2A +R 00 00 01 00 +T 3B 08 00 00 +R 00 00 01 00 +T 3B 08 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 43 08 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 4A 08 00 00 75 F7 DD 74 F8 +R 00 00 01 00 +T 4F 08 00 00 +R 00 00 01 00 +T 4F 08 00 00 +R 00 00 01 00 +T 4F 08 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T 5A 08 00 00 74 05 7E B7 20 02 +R 00 00 01 00 +T 60 08 00 00 +R 00 00 01 00 +T 60 08 00 00 18 03 +R 00 00 01 00 +T 62 08 00 00 +R 00 00 01 00 +T 62 08 00 00 C3 34 00 00 00 +R 00 00 01 00 00 05 01 00 +T 65 08 00 00 +R 00 00 01 00 +T 65 08 00 00 +R 00 00 01 00 +T 65 08 00 00 DD 7E F7 DD A6 F8 3C 20 0D DD 7E +R 00 00 01 00 +T 70 08 00 00 FD DD B6 FE 20 05 +R 00 00 01 00 +T 76 08 00 00 +R 00 00 01 00 +T 76 08 00 00 +R 00 00 01 00 +T 76 08 00 00 +R 00 00 01 00 +T 76 08 00 00 21 FF FF 18 23 +R 00 00 01 00 +T 7B 08 00 00 +R 00 00 01 00 +T 7B 08 00 00 DD 7E F7 DD A6 F8 3C 28 14 +R 00 00 01 00 +T 84 08 00 00 +R 00 00 01 00 +T 84 08 00 00 DD 4E 02 DD 46 03 DD 5E F7 DD 56 +R 00 00 01 00 +T 8F 08 00 00 F8 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 95 08 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 98 08 00 00 +R 00 00 01 00 +T 98 08 00 00 DD 6E FD DD 66 FE +R 00 00 01 00 +T 9E 08 00 00 +R 00 00 01 00 +T 9E 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 09 0A 0B 0C 0D 20 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 30 31 32 33 34 35 36 37 38 39 41 +R 00 00 02 00 +T 12 00 00 00 42 43 44 45 46 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/vprinter.rel b/src/nos/lib/crt_banked_lib/vprinter.rel new file mode 100644 index 00000000..72d15848 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/vprinter.rel @@ -0,0 +1,760 @@ +XL4 +H 3 areas F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_MULASG_L02 Ref00000000 +S _strcat Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _ultoa Ref00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _ltoa Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 745 flags 0 +S ___vprinter Def000001F2 +A CSTR size C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 B8 FF AF DD 77 B9 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 DD 77 BA DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 DD 75 BB DD 74 BC 21 +R 00 00 01 00 02 04 00 00 +T 21 00 00 00 05 00 39 DD 75 FD DD 74 FE DD 6E +R 00 00 01 00 +T 2C 00 00 00 0A DD 66 0B 7E FE 2D 20 14 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 DD 6E 0A DD 66 0B 23 DD 75 0A DD +R 00 00 01 00 +T 40 00 00 00 74 0B 2B 46 DD 70 0E 18 0E +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 AF DD B6 0E 28 08 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 DD 34 BB 20 03 DD 34 BC +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 7E 14 DD A6 15 3C 28 1D DD 4E +R 00 00 01 00 +T 62 00 00 00 BB DD 46 BC DD 6E 14 DD 66 15 CD +R 00 00 01 00 +T 6D 00 00 00 00 00 00 00 30 0C +R 00 00 01 00 02 04 0B 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 6E 14 DD 66 15 DD 75 BB DD 74 +R 00 00 01 00 +T 7C 00 00 00 BC +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 DD 4E BB DD 46 BC DD 6E 12 DD 66 +R 00 00 01 00 +T 88 00 00 00 13 CD 00 00 00 00 30 0C +R 00 00 01 00 02 06 0B 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 DD 6E BB DD 66 BC DD 75 12 DD 74 +R 00 00 01 00 +T 99 00 00 00 13 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 DD 6E 12 DD 66 13 DD 75 B9 DD 74 +R 00 00 01 00 +T A5 00 00 00 BA 21 5A 00 39 7E DD 96 BB 77 23 +R 00 00 01 00 +T B0 00 00 00 7E DD 9E BC 77 +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 DD 7E 12 DD B6 13 20 09 DD 7E BB +R 00 00 01 00 +T C0 00 00 00 DD B6 BC CA AF 01 00 00 +R 00 00 01 00 00 08 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 DD 7E 0C DD B6 0D 20 34 DD 7E 12 +R 00 00 01 00 +T D1 00 00 00 DD B6 13 28 2C +R 00 00 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 DD 7E BB DD B6 BC 28 0F AF DD B6 +R 00 00 01 00 +T E1 00 00 00 0E 28 09 DD 7E 10 FE 30 20 02 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 18 23 +R 00 00 01 00 +T ED 00 00 00 +R 00 00 01 00 +T ED 00 00 00 DD 46 10 DD 70 B8 DD 6E 12 DD 66 +R 00 00 01 00 +T F8 00 00 00 13 2B DD 75 12 DD 74 13 18 4E +R 00 00 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 DD 7E BB DD B6 BC 28 33 +R 00 00 01 00 +T 0A 01 00 00 +R 00 00 01 00 +T 0A 01 00 00 AF DD B6 0E 28 0C +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 DD 46 0E DD 70 B8 DD 36 0E 00 18 +R 00 00 01 00 +T 1B 01 00 00 12 +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 DD 6E 0A DD 66 0B 23 DD 75 0A DD +R 00 00 01 00 +T 27 01 00 00 74 0B 2B 46 DD 70 B8 +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 DD 6E BB DD 66 BC 2B DD 75 BB DD +R 00 00 01 00 +T 39 01 00 00 74 BC 18 13 +R 00 00 01 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 DD 46 10 DD 70 B8 DD 6E 12 DD 66 +R 00 00 01 00 +T 48 01 00 00 13 2B DD 75 12 DD 74 13 +R 00 00 01 00 +T 50 01 00 00 +R 00 00 01 00 +T 50 01 00 00 +R 00 00 01 00 +T 50 01 00 00 21 05 00 39 01 40 00 09 4D 44 DD +R 00 00 01 00 +T 5B 01 00 00 6E FD DD 66 FE A7 ED 42 38 35 +R 00 00 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 DD 6E 08 DD 66 09 E5 21 07 00 39 +R 00 00 01 00 +T 70 01 00 00 4D 44 DD 6E FD DD 66 FE A7 ED 42 +R 00 00 01 00 +T 7B 01 00 00 4D 44 21 07 00 39 5D 54 DD 7E 04 +R 00 00 01 00 +T 86 01 00 00 DD 6E 02 DD 66 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 8F 01 00 00 F1 21 05 00 39 DD 75 FD DD 74 FE +R 00 00 01 00 +T 9A 01 00 00 +R 00 00 01 00 +T 9A 01 00 00 DD 6E FD DD 66 FE 23 DD 75 FD DD +R 00 00 01 00 +T A5 01 00 00 74 FE 2B DD 46 B8 70 C3 +R 00 00 01 00 +T AD 01 00 00 B5 00 00 00 +R 00 00 01 00 00 04 01 00 +T AF 01 00 00 +R 00 00 01 00 +T AF 01 00 00 21 05 00 39 DD 4E FD DD 46 FE A7 +R 00 00 01 00 +T BA 01 00 00 ED 42 30 2B +R 00 00 01 00 +T BE 01 00 00 +R 00 00 01 00 +T BE 01 00 00 DD 6E 08 DD 66 09 E5 21 07 00 39 +R 00 00 01 00 +T C9 01 00 00 4D 44 DD 6E FD DD 66 FE A7 ED 42 +R 00 00 01 00 +T D4 01 00 00 4D 44 21 07 00 39 5D 54 DD 7E 04 +R 00 00 01 00 +T DF 01 00 00 DD 6E 02 DD 66 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T E8 01 00 00 F1 +R 00 00 01 00 +T E9 01 00 00 +R 00 00 01 00 +T E9 01 00 00 DD 6E B9 DD 66 BA C3 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 CD 00 00 00 00 A0 FF AF DD 77 AE +R 00 00 01 00 02 05 09 00 +T FB 01 00 00 DD 77 AF DD 6E 0C DD 66 0D DD 75 +R 00 00 01 00 +T 06 02 00 00 FD DD 74 FE +R 00 00 01 00 +T 0A 02 00 00 +R 00 00 01 00 +T 0A 02 00 00 DD 6E 0C DD 66 0D AF B6 CA +R 00 00 01 00 +T 13 02 00 00 F3 06 00 00 +R 00 00 01 00 00 04 01 00 +T 15 02 00 00 +R 00 00 01 00 +T 15 02 00 00 DD 6E 0C DD 66 0D 7E FE 25 C2 +R 00 00 01 00 +T 1F 02 00 00 E8 06 00 00 +R 00 00 01 00 00 04 01 00 +T 21 02 00 00 +R 00 00 01 00 +T 21 02 00 00 DD 4E 0C DD 46 0D DD 6E FD DD 66 +R 00 00 01 00 +T 2C 02 00 00 FE A7 ED 42 30 44 +R 00 00 01 00 +T 32 02 00 00 +R 00 00 01 00 +T 32 02 00 00 DD 6E 0A DD 66 0B E5 DD 4E FD DD +R 00 00 01 00 +T 3D 02 00 00 46 FE DD 6E 0C DD 66 0D A7 ED 42 +R 00 00 01 00 +T 48 02 00 00 4D 44 DD 5E FD DD 56 FE DD 7E 04 +R 00 00 01 00 +T 53 02 00 00 DD 6E 02 DD 66 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 5C 02 00 00 F1 4D 44 21 0E 00 39 7E 81 77 23 +R 00 00 01 00 +T 67 02 00 00 7E 88 77 DD 6E 0C DD 66 0D DD 75 +R 00 00 01 00 +T 72 02 00 00 FD DD 74 FE +R 00 00 01 00 +T 76 02 00 00 +R 00 00 01 00 +T 76 02 00 00 AF DD 77 A2 DD 77 A3 DD 36 B1 00 +R 00 00 01 00 +T 81 02 00 00 DD 36 B0 20 DD 36 AA FF DD 36 AB +R 00 00 01 00 +T 8C 02 00 00 FF AF DD 77 A8 DD 77 A9 DD 36 A6 +R 00 00 01 00 +T 97 02 00 00 FF DD 36 A7 FF DD 36 AC 0A DD 36 +R 00 00 01 00 +T A2 02 00 00 AD 00 21 1B 00 39 DD 75 B3 DD 74 +R 00 00 01 00 +T AD 02 00 00 B4 DD 36 B2 00 AF DD 77 A4 DD 77 +R 00 00 01 00 +T B8 02 00 00 A5 +R 00 00 01 00 +T B9 02 00 00 +R 00 00 01 00 +T B9 02 00 00 AF DD 77 A0 DD 77 A1 DD 34 0C 20 +R 00 00 01 00 +T C4 02 00 00 03 DD 34 0D +R 00 00 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 DD 6E 0C DD 66 0D 7E FE 30 38 0B +R 00 00 01 00 +T D3 02 00 00 DD 6E 0C DD 66 0D 3E 39 BE 30 02 +R 00 00 01 00 +T DE 02 00 00 +R 00 00 01 00 +T DE 02 00 00 +R 00 00 01 00 +T DE 02 00 00 +R 00 00 01 00 +T DE 02 00 00 18 65 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 21 00 00 39 01 0A 00 CD +R 00 00 01 00 +T E8 02 00 00 00 00 00 00 DD 6E 0C DD 66 0D 4E +R 00 00 01 00 02 04 01 00 +T F1 02 00 00 06 00 21 D0 FF 09 4D 44 21 00 00 +R 00 00 01 00 +T FC 02 00 00 39 7E 81 77 23 7E 88 77 DD 7E A8 +R 00 00 01 00 +T 07 03 00 00 DD B6 A9 28 0E +R 00 00 01 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 DD 6E A0 DD 66 A1 DD 75 A6 DD 74 +R 00 00 01 00 +T 17 03 00 00 A7 18 21 +R 00 00 01 00 +T 1A 03 00 00 +R 00 00 01 00 +T 1A 03 00 00 DD 7E A0 DD B6 A1 20 0D DD 7E B0 +R 00 00 01 00 +T 25 03 00 00 FE 20 20 06 +R 00 00 01 00 +T 29 03 00 00 +R 00 00 01 00 +T 29 03 00 00 +R 00 00 01 00 +T 29 03 00 00 +R 00 00 01 00 +T 29 03 00 00 DD 36 B0 30 18 8A +R 00 00 01 00 +T 2F 03 00 00 +R 00 00 01 00 +T 2F 03 00 00 DD 6E A0 DD 66 A1 DD 75 AA DD 74 +R 00 00 01 00 +T 3A 03 00 00 AB +R 00 00 01 00 +T 3B 03 00 00 +R 00 00 01 00 +T 3B 03 00 00 DD 34 0C 20 03 DD 34 0D +R 00 00 01 00 +T 43 03 00 00 +R 00 00 01 00 +T 43 03 00 00 18 83 +R 00 00 01 00 +T 45 03 00 00 +R 00 00 01 00 +T 45 03 00 00 DD 6E 0C DD 66 0D 5E CD +R 00 00 01 00 +T 4D 03 00 00 00 00 00 00 14 00 00 20 21 23 2A +R 00 00 01 00 02 04 0D 00 +T 56 03 00 00 2B 2D 2E 58 62 63 64 68 69 6C 6F +R 00 00 01 00 +T 61 03 00 00 70 73 75 78 CD 06 00 00 +R 00 00 01 00 00 08 01 00 +T 67 03 00 00 D1 04 00 00 D9 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6B 03 00 00 5C 06 00 00 AC 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6F 03 00 00 A2 04 00 00 28 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 73 03 00 00 3D 04 00 00 33 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 77 03 00 00 3D 04 00 00 19 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7B 03 00 00 98 04 00 00 C7 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7F 03 00 00 1D 04 00 00 9F 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 83 03 00 00 AA 03 00 00 BE 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 87 03 00 00 B7 03 00 00 FB 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8B 03 00 00 AA 03 00 00 8F 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8F 03 00 00 +R 00 00 01 00 +T 8F 03 00 00 DD 6E 0C DD 66 0D 2B DD 75 0C DD +R 00 00 01 00 +T 9A 03 00 00 74 0D C3 E8 06 00 00 +R 00 00 01 00 00 07 01 00 +T 9F 03 00 00 +R 00 00 01 00 +T 9F 03 00 00 DD 36 A2 01 DD 36 A3 00 C3 +R 00 00 01 00 +T A8 03 00 00 B9 02 00 00 +R 00 00 01 00 00 04 01 00 +T AA 03 00 00 +R 00 00 01 00 +T AA 03 00 00 DD 6E 0C DD 66 0D 46 DD 70 B1 C3 +R 00 00 01 00 +T B5 03 00 00 B9 02 00 00 +R 00 00 01 00 00 04 01 00 +T B7 03 00 00 +R 00 00 01 00 +T B7 03 00 00 DD 36 B2 01 C3 B9 02 00 00 +R 00 00 01 00 00 09 01 00 +T BE 03 00 00 +R 00 00 01 00 +T BE 03 00 00 21 6E 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T C9 03 00 00 00 77 2B 6E 67 2B 2B 46 23 66 68 +R 00 00 01 00 +T D4 03 00 00 DD 75 A0 DD 74 A1 DD 7E A8 DD B6 +R 00 00 01 00 +T DF 03 00 00 A9 28 0E +R 00 00 01 00 +T E2 03 00 00 +R 00 00 01 00 +T E2 03 00 00 DD 6E A0 DD 66 A1 DD 75 A6 DD 74 +R 00 00 01 00 +T ED 03 00 00 A7 18 2A +R 00 00 01 00 +T F0 03 00 00 +R 00 00 01 00 +T F0 03 00 00 DD 6E A0 DD 66 A1 DD 75 AA DD 74 +R 00 00 01 00 +T FB 03 00 00 AB CB 7C 28 1A +R 00 00 01 00 +T 00 04 00 00 +R 00 00 01 00 +T 00 04 00 00 DD 36 A2 01 DD 36 A3 00 DD 4E A0 +R 00 00 01 00 +T 0B 04 00 00 DD 46 A1 A7 21 00 00 ED 42 DD 75 +R 00 00 01 00 +T 16 04 00 00 AA DD 74 AB +R 00 00 01 00 +T 1A 04 00 00 +R 00 00 01 00 +T 1A 04 00 00 +R 00 00 01 00 +T 1A 04 00 00 C3 B9 02 00 00 +R 00 00 01 00 00 05 01 00 +T 1D 04 00 00 +R 00 00 01 00 +T 1D 04 00 00 DD 36 A8 01 DD 36 A9 00 C3 +R 00 00 01 00 +T 26 04 00 00 B9 02 00 00 +R 00 00 01 00 00 04 01 00 +T 28 04 00 00 +R 00 00 01 00 +T 28 04 00 00 DD 36 A4 01 DD 36 A5 00 C3 +R 00 00 01 00 +T 31 04 00 00 B9 02 00 00 +R 00 00 01 00 00 04 01 00 +T 33 04 00 00 +R 00 00 01 00 +T 33 04 00 00 AF DD 77 A4 DD 77 A5 C3 +R 00 00 01 00 +T 3B 04 00 00 B9 02 00 00 +R 00 00 01 00 00 04 01 00 +T 3D 04 00 00 +R 00 00 01 00 +T 3D 04 00 00 21 0A 00 E5 21 1D 00 39 E5 DD 7E +R 00 00 01 00 +T 48 04 00 00 A4 DD B6 A5 28 1D 21 72 00 39 7E +R 00 00 01 00 +T 53 04 00 00 C6 04 77 23 7E CE 00 77 2B 6E 67 +R 00 00 01 00 +T 5E 04 00 00 01 FC FF 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 69 04 00 00 18 1A +R 00 00 01 00 +T 6B 04 00 00 +R 00 00 01 00 +T 6B 04 00 00 21 72 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T 76 04 00 00 00 77 2B 6E 67 2B 2B 5E 23 56 7A +R 00 00 01 00 +T 81 04 00 00 07 9F 4F 41 +R 00 00 01 00 +T 85 04 00 00 +R 00 00 01 00 +T 85 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T 8B 04 00 00 00 00 00 00 F1 F1 DD 75 B3 DD 74 +R 00 00 01 00 02 04 00 00 +T 94 04 00 00 B4 C3 80 06 00 00 +R 00 00 01 00 00 06 01 00 +T 98 04 00 00 +R 00 00 01 00 +T 98 04 00 00 DD 36 AC 02 DD 36 AD 00 18 37 +R 00 00 01 00 +T A2 04 00 00 +R 00 00 01 00 +T A2 04 00 00 DD 36 AC 08 DD 36 AD 00 18 2D +R 00 00 01 00 +T AC 04 00 00 +R 00 00 01 00 +T AC 04 00 00 AF DD 77 A4 DD 77 A5 DD 36 B0 30 +R 00 00 01 00 +T B7 04 00 00 DD 36 AA 05 DD 36 AB 00 DD 36 A6 +R 00 00 01 00 +T C2 04 00 00 08 DD 36 A7 00 +R 00 00 01 00 +T C7 04 00 00 +R 00 00 01 00 +T C7 04 00 00 DD 36 AC 10 DD 36 AD 00 18 08 +R 00 00 01 00 +T D1 04 00 00 +R 00 00 01 00 +T D1 04 00 00 DD 36 AC F0 DD 36 AD FF +R 00 00 01 00 +T D9 04 00 00 +R 00 00 01 00 +T D9 04 00 00 +R 00 00 01 00 +T D9 04 00 00 DD 7E A4 DD B6 A5 28 1E 21 6E 00 +R 00 00 01 00 +T E4 04 00 00 39 7E C6 04 77 23 7E CE 00 77 2B +R 00 00 01 00 +T EF 04 00 00 6E 67 01 FC FF 09 5E 23 56 23 4E +R 00 00 01 00 +T FA 04 00 00 23 46 EB 18 19 +R 00 00 01 00 +T FF 04 00 00 +R 00 00 01 00 +T FF 04 00 00 21 6E 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T 0A 05 00 00 00 77 2B 6E 67 2B 2B 46 23 66 68 +R 00 00 01 00 +T 15 05 00 00 01 00 00 +R 00 00 01 00 +T 18 05 00 00 +R 00 00 01 00 +T 18 05 00 00 DD 75 B7 DD 74 B8 DD 71 B9 DD 70 +R 00 00 01 00 +T 23 05 00 00 BA DD 5E AC DD 56 AD D5 21 1D 00 +R 00 00 01 00 +T 2E 05 00 00 39 01 04 00 09 E5 DD 4E B9 DD 46 +R 00 00 01 00 +T 39 05 00 00 BA DD 5E B7 DD 56 B8 3E +R 00 00 01 00 +T 41 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 46 05 00 00 00 00 00 00 F1 F1 DD 75 B3 DD 74 +R 00 00 01 00 02 04 00 00 +T 4F 05 00 00 B4 DD 36 B5 00 00 00 00 DD 36 B6 +R 00 00 01 00 09 08 02 00 +T 57 05 00 00 00 00 00 00 AF DD B6 B2 CA +R 00 00 01 00 89 04 02 00 +T 5D 05 00 00 F8 05 00 00 +R 00 00 01 00 00 04 01 00 +T 5F 05 00 00 +R 00 00 01 00 +T 5F 05 00 00 3E 02 DD AE AC DD B6 AD 20 0A +R 00 00 01 00 +T 69 05 00 00 +R 00 00 01 00 +T 69 05 00 00 DD 36 B5 01 00 00 00 DD 36 B6 +R 00 00 01 00 09 07 02 00 +T 70 05 00 00 01 00 00 00 18 49 +R 00 00 01 00 89 04 02 00 +T 73 05 00 00 +R 00 00 01 00 +T 73 05 00 00 3E 08 DD AE AC DD B6 AD 20 18 +R 00 00 01 00 +T 7D 05 00 00 +R 00 00 01 00 +T 7D 05 00 00 DD 7E B7 DD B6 B8 DD B6 B9 DD B6 +R 00 00 01 00 +T 88 05 00 00 BA 28 08 +R 00 00 01 00 +T 8B 05 00 00 +R 00 00 01 00 +T 8B 05 00 00 DD 36 B5 04 00 00 00 DD 36 B6 +R 00 00 01 00 09 07 02 00 +T 92 05 00 00 04 00 00 00 +R 00 00 01 00 89 04 02 00 +T 93 05 00 00 +R 00 00 01 00 +T 93 05 00 00 18 27 +R 00 00 01 00 +T 95 05 00 00 +R 00 00 01 00 +T 95 05 00 00 3E 10 DD AE AC DD B6 AD 20 0A +R 00 00 01 00 +T 9F 05 00 00 +R 00 00 01 00 +T 9F 05 00 00 DD 36 B5 06 00 00 00 DD 36 B6 +R 00 00 01 00 09 07 02 00 +T A6 05 00 00 06 00 00 00 18 13 +R 00 00 01 00 89 04 02 00 +T A9 05 00 00 +R 00 00 01 00 +T A9 05 00 00 3E 0F DD AE AC DD A6 AD 3C 20 08 +R 00 00 01 00 +T B4 05 00 00 +R 00 00 01 00 +T B4 05 00 00 DD 36 B5 09 00 00 00 DD 36 B6 +R 00 00 01 00 09 07 02 00 +T BB 05 00 00 09 00 00 00 +R 00 00 01 00 89 04 02 00 +T BC 05 00 00 +R 00 00 01 00 +T BC 05 00 00 +R 00 00 01 00 +T BC 05 00 00 +R 00 00 01 00 +T BC 05 00 00 +R 00 00 01 00 +T BC 05 00 00 DD 6E B5 DD 66 B6 AF B6 28 32 +R 00 00 01 00 +T C6 05 00 00 +R 00 00 01 00 +T C6 05 00 00 DD 36 B0 00 DD 4E B5 DD 46 B6 21 +R 00 00 01 00 +T D1 05 00 00 1B 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T D9 05 00 00 00 00 00 00 CD 00 00 00 00 DD 4E +R 00 00 01 00 02 04 08 00 02 09 00 00 +T E0 05 00 00 B3 DD 46 B4 21 1B 00 39 5D 54 3E +R 00 00 01 00 +T EB 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T F0 05 00 00 00 00 00 00 DD 75 B3 DD 74 B4 +R 00 00 01 00 02 04 00 00 +T F8 05 00 00 +R 00 00 01 00 +T F8 05 00 00 +R 00 00 01 00 +T F8 05 00 00 C3 80 06 00 00 +R 00 00 01 00 00 05 01 00 +T FB 05 00 00 +R 00 00 01 00 +T FB 05 00 00 DD 6E 0C DD 66 0D 23 4E 06 00 DD +R 00 00 01 00 +T 06 06 00 00 71 A0 DD 70 A1 79 B0 28 08 +R 00 00 01 00 +T 0F 06 00 00 +R 00 00 01 00 +T 0F 06 00 00 DD 34 0C 20 03 DD 34 0D +R 00 00 01 00 +T 17 06 00 00 +R 00 00 01 00 +T 17 06 00 00 +R 00 00 01 00 +T 17 06 00 00 18 1C +R 00 00 01 00 +T 19 06 00 00 +R 00 00 01 00 +T 19 06 00 00 21 6E 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T 24 06 00 00 00 77 2B 6E 67 2B 2B 46 23 66 68 +R 00 00 01 00 +T 2F 06 00 00 DD 75 A0 DD 74 A1 +R 00 00 01 00 +T 35 06 00 00 +R 00 00 01 00 +T 35 06 00 00 DD 46 A0 DD 6E B3 DD 66 B4 70 DD +R 00 00 01 00 +T 40 06 00 00 6E B3 DD 66 B4 23 36 00 AF DD B6 +R 00 00 01 00 +T 4B 06 00 00 B2 28 0C +R 00 00 01 00 +T 4E 06 00 00 +R 00 00 01 00 +T 4E 06 00 00 DD 6E B3 DD 66 B4 46 DD 70 B0 18 +R 00 00 01 00 +T 59 06 00 00 22 +R 00 00 01 00 +T 5A 06 00 00 +R 00 00 01 00 +T 5A 06 00 00 18 1C +R 00 00 01 00 +T 5C 06 00 00 +R 00 00 01 00 +T 5C 06 00 00 21 6E 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T 67 06 00 00 00 77 2B 6E 67 2B 2B 46 23 66 68 +R 00 00 01 00 +T 72 06 00 00 DD 75 B3 DD 74 B4 +R 00 00 01 00 +T 78 06 00 00 +R 00 00 01 00 +T 78 06 00 00 DD 36 B0 20 +R 00 00 01 00 +T 7C 06 00 00 +R 00 00 01 00 +T 7C 06 00 00 DD 36 B1 00 +R 00 00 01 00 +T 80 06 00 00 +R 00 00 01 00 +T 80 06 00 00 DD 6E A6 DD 66 A7 E5 DD 6E AA DD +R 00 00 01 00 +T 8B 06 00 00 66 AB E5 DD 6E B0 E5 DD 6E B1 E5 +R 00 00 01 00 +T 96 06 00 00 DD 6E A2 DD 66 A3 E5 DD 6E B3 DD +R 00 00 01 00 +T A1 06 00 00 66 B4 E5 DD 6E 0A DD 66 0B E5 DD +R 00 00 01 00 +T AC 06 00 00 4E 04 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T B5 06 00 00 00 00 00 00 EB 21 0E 00 39 F9 EB +R 00 00 01 00 00 04 01 00 +T BE 06 00 00 4D 44 21 0E 00 39 7E 81 77 23 7E +R 00 00 01 00 +T C9 06 00 00 88 77 18 0E +R 00 00 01 00 +T CD 06 00 00 +R 00 00 01 00 +T CD 06 00 00 DD 6E 0C DD 66 0D DD 75 FD DD 74 +R 00 00 01 00 +T D8 06 00 00 FE 18 0D +R 00 00 01 00 +T DB 06 00 00 +R 00 00 01 00 +T DB 06 00 00 DD 6E 0C DD 66 0D 23 DD 75 FD DD +R 00 00 01 00 +T E6 06 00 00 74 FE +R 00 00 01 00 +T E8 06 00 00 +R 00 00 01 00 +T E8 06 00 00 +R 00 00 01 00 +T E8 06 00 00 DD 34 0C 20 03 DD 34 0D +R 00 00 01 00 +T F0 06 00 00 +R 00 00 01 00 +T F0 06 00 00 C3 0A 02 00 00 +R 00 00 01 00 00 05 01 00 +T F3 06 00 00 +R 00 00 01 00 +T F3 06 00 00 DD 4E 0C DD 46 0D DD 6E FD DD 66 +R 00 00 01 00 +T FE 06 00 00 FE A7 ED 42 30 38 +R 00 00 01 00 +T 04 07 00 00 +R 00 00 01 00 +T 04 07 00 00 DD 6E 0A DD 66 0B E5 DD 4E FD DD +R 00 00 01 00 +T 0F 07 00 00 46 FE DD 6E 0C DD 66 0D A7 ED 42 +R 00 00 01 00 +T 1A 07 00 00 4D 44 DD 5E FD DD 56 FE DD 7E 04 +R 00 00 01 00 +T 25 07 00 00 DD 6E 02 DD 66 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 2E 07 00 00 F1 4D 44 21 0E 00 39 7E 81 77 23 +R 00 00 01 00 +T 39 07 00 00 7E 88 77 +R 00 00 01 00 +T 3C 07 00 00 +R 00 00 01 00 +T 3C 07 00 00 DD 6E AE DD 66 AF C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 +T 01 00 00 00 +R 00 00 02 00 +T 01 00 00 00 30 62 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 30 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 30 78 00 +R 00 00 02 00 +T 09 00 00 00 +R 00 00 02 00 +T 09 00 00 00 30 58 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_banked_lib/vprintf.rel b/src/nos/lib/crt_banked_lib/vprintf.rel new file mode 100644 index 00000000..bb92862a --- /dev/null +++ b/src/nos/lib/crt_banked_lib/vprintf.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _stdout Ref00000000 +S _vfprintf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S _vprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 4B 42 11 +R 00 00 01 00 02 05 03 00 +T 07 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 2B 09 05 00 +T 0C 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 13 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_banked_lib/vscanf.rel b/src/nos/lib/crt_banked_lib/vscanf.rel new file mode 100644 index 00000000..29186bd8 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/vscanf.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _stdin Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _vfscanf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S _vscanf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 4B 42 11 +R 00 00 01 00 02 05 04 00 +T 07 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 2B 09 05 00 +T 0C 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 13 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_banked_lib/vsprintf.rel b/src/nos/lib/crt_banked_lib/vsprintf.rel new file mode 100644 index 00000000..8d409432 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/vsprintf.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___sputter Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___vprinter Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 39 flags 0 +S _vsprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B E5 C5 21 08 00 39 E5 0E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 18 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 1D 00 00 00 00 00 00 00 F1 F1 F1 DD 75 FE DD +R 00 00 01 00 02 04 00 00 +T 26 00 00 00 74 FF DD 6E 02 DD 66 03 36 00 DD +R 00 00 01 00 +T 31 00 00 00 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0A 01 00 diff --git a/src/nos/lib/crt_banked_lib/vsscanf.rel b/src/nos/lib/crt_banked_lib/vsscanf.rel new file mode 100644 index 00000000..e441f633 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/vsscanf.rel @@ -0,0 +1,35 @@ +XL4 +H 4 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _vfscanf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D flags 0 +S _vsscanf Def00000000 +A IDATA0 size 18 flags 0 +A CDATA0 size 18 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 ED 53 00 00 00 00 +R 00 00 01 00 02 05 03 00 00 0B 02 00 +T 07 00 00 00 DD 6E 0A DD 66 0B E5 11 +R 00 00 01 00 +T 0F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 04 00 +T 14 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 1B 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 FF FF 00 00 00 00 FF FF +R 00 00 03 00 +T 0A 00 00 00 FF FF 10 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 15 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_banked_lib/xitoa.rel b/src/nos/lib/crt_banked_lib/xitoa.rel new file mode 100644 index 00000000..fbafade3 --- /dev/null +++ b/src/nos/lib/crt_banked_lib/xitoa.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ltostr Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S __itoa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0A 00 E5 7A 07 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 9F 4F 41 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 16 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_banked_lib/xltoa.rel b/src/nos/lib/crt_banked_lib/xltoa.rel new file mode 100644 index 00000000..4a1e0ebc --- /dev/null +++ b/src/nos/lib/crt_banked_lib/xltoa.rel @@ -0,0 +1,29 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _ultostr Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ltostr Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S __ultoa Def00000000 +S __ltoa Def00000013 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0A 00 E5 3E +R 00 00 01 00 02 05 04 00 +T 08 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 0D 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 CD 00 00 00 00 21 0A 00 E5 3E +R 00 00 01 00 02 05 04 00 +T 1B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 20 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 01 00 diff --git a/src/nos/lib/crt_large.lib b/src/nos/lib/crt_large.lib new file mode 100644 index 00000000..242659c3 --- /dev/null +++ b/src/nos/lib/crt_large.lib @@ -0,0 +1,342 @@ +crt_large_lib/abort.rel + _abort +crt_large_lib/alloca.rel + _alloca +crt_large_lib/asctime.rel + ___asctime + _asctime +crt_large_lib/assert.rel + ___assert + ___errput +crt_large_lib/atexit.rel + _atexit + _on_exit + ___on_exit_table + ___on_exit_count +crt_large_lib/atoi.rel + _atoi +crt_large_lib/atol.rel + _atol +crt_large_lib/bsearch.rel + _bsearch + __bsearch +crt_large_lib/calloc.rel + _calloc +crt_large_lib/clock.rel + _clock +crt_large_lib/closedir.rel + _closedir +crt_large_lib/convtime.rel + _convtime +crt_large_lib/crypt.rel + _crypt +crt_large_lib/ctime.rel + _ctime +crt_large_lib/ctype.rel + _tolower + _toupper + ___ctype +crt_large_lib/difftime.rel + _difftime +crt_large_lib/error.rel + _strerror + ___sys_errlist + ___sys_nerr +crt_large_lib/etime.rel + _etime + _dout + _ediff +crt_large_lib/execl.rel + __findPath + _execl +crt_large_lib/execle.rel + _execle +crt_large_lib/execlp.rel + _execlp +crt_large_lib/execlpe.rel + _execlpe +crt_large_lib/exect.rel + _exect +crt_large_lib/execv.rel + _execv +crt_large_lib/execvp.rel + _execvp +crt_large_lib/execvpe.rel + _execvpe +crt_large_lib/exit.rel + _exit +crt_large_lib/fclose.rel + _fclose +crt_large_lib/fflush.rel + _fflush +crt_large_lib/fgetc.rel + _fgetc +crt_large_lib/fgetgren.rel + _fgetgrent +crt_large_lib/fgetpwen.rel + _fgetpwent +crt_large_lib/fgets.rel + _fgets +crt_large_lib/fopen.rel + ___fopen +crt_large_lib/fprintf.rel + _fprintf +crt_large_lib/fputc.rel + _fputc +crt_large_lib/fputs.rel + _fputs +crt_large_lib/fputter.rel + ___fputter +crt_large_lib/fread.rel + _fread +crt_large_lib/free.rel + _free +crt_large_lib/fscanf.rel + _fscanf +crt_large_lib/ftell.rel + _ftell +crt_large_lib/fwrite.rel + _fwrite +crt_large_lib/getcwd.rel + _getcwd +crt_large_lib/getenv.rel + _getenv +crt_large_lib/getgrent.rel + ___getgrent +crt_large_lib/getgrgid.rel + _getgrgid +crt_large_lib/getgrnam.rel + _getgrnam +crt_large_lib/getopt.rel + _getopt + _optarg + _optopt + _optind + _opterr +crt_large_lib/getpass.rel + _getpass +crt_large_lib/getpw.rel + _getpw +crt_large_lib/getpwent.rel + ___getpwent +crt_large_lib/getpwnam.rel + _getpwnam +crt_large_lib/getpwuid.rel + _getpwuid +crt_large_lib/gets.rel + _puts + _gets +crt_large_lib/gmtime.rel + _gmtime + ___tm_conv +crt_large_lib/initgrup.rel + _initgroups +crt_large_lib/isatty.rel + _isatty +crt_large_lib/itoa.rel + _itoa + ___longtoa +crt_large_lib/localtim.rel + _localtime +crt_large_lib/longjmp.rel + _longjmp +crt_large_lib/lsearch.rel + _lfind + _lsearch +crt_large_lib/lstat.rel + _lstat +crt_large_lib/ltoa.rel + _ltoa +crt_large_lib/ltostr.rel + _ultostr + _ltostr +crt_large_lib/malloc.rel + _malloc + ___malloc_last + ___malloc_head +crt_large_lib/memccpy.rel + _memccpy +crt_large_lib/memchr.rel + _memchr +crt_large_lib/memcmp.rel + _memcmp +crt_large_lib/memcpy.rel + _memcpy +crt_large_lib/memmove.rel + _memmove +crt_large_lib/memset.rel + _memset +crt_large_lib/mkdir.rel + _mkdir +crt_large_lib/mktime.rel + _mktime +crt_large_lib/opendir.rel + _opendir +crt_large_lib/perror.rel + _perror +crt_large_lib/popen.rel + _pclose + _popen +crt_large_lib/printf.rel + _printf +crt_large_lib/putenv.rel + _putenv +crt_large_lib/putgetch.rel + __putchar + __getchar +crt_large_lib/putpwent.rel + _putpwent +crt_large_lib/qsort.rel + _qsort +crt_large_lib/rand.rel + _srand + _rand +crt_large_lib/readdir.rel + _readdir +crt_large_lib/readlink.rel + _readlink +crt_large_lib/realloc.rel + _realloc +crt_large_lib/regerror.rel + _regerror +crt_large_lib/regexp.rel + _regexec + _regcomp +crt_large_lib/regsub.rel + _regsub +crt_large_lib/rename.rel + _rename +crt_large_lib/rewind.rel + _rewind + _fseek +crt_large_lib/rewindir.rel + _rewinddir +crt_large_lib/rmdir.rel + _rmdir +crt_large_lib/scanf.rel + _scanf +crt_large_lib/setbuff.rel + _setbuffer +crt_large_lib/setenv.rel + _setenv + _unsetenv +crt_large_lib/setgrent.rel + _endgrent + _getgrent + _setgrent + __path_group +crt_large_lib/setjmp.rel + _setjmp +crt_large_lib/setpwent.rel + _endpwent + _getpwent + _setpwent + __path_passwd +crt_large_lib/setvbuff.rel + _setvbuf +crt_large_lib/sleep.rel + _sleep +crt_large_lib/sprintf.rel + _sprintf +crt_large_lib/sputter.rel + ___sputter +crt_large_lib/sscanf.rel + _sscanf +crt_large_lib/stdio0.rel + ___stdio_init_vars + ___stdio_close_all + _stderr + _stdin + _stdout + ___IO_list +crt_large_lib/strcat.rel + _strcat +crt_large_lib/strchr.rel + _strchr +crt_large_lib/strcmp.rel + _strcmp +crt_large_lib/strcpy.rel + _strcpy +crt_large_lib/strcspn.rel + _strcspn +crt_large_lib/strdup.rel + _strdup +crt_large_lib/stricmp.rel + _stricmp +crt_large_lib/strlen.rel + _strlen +crt_large_lib/strncat.rel + _strncat +crt_large_lib/strncmp.rel + _strncmp +crt_large_lib/strncpy.rel + _strncpy +crt_large_lib/strnicmp.rel + _strnicmp +crt_large_lib/strpbrk.rel + _strpbrk +crt_large_lib/strrchr.rel + _strrchr +crt_large_lib/strsep.rel + _strsep +crt_large_lib/strspn.rel + _strspn +crt_large_lib/strstr.rel + _strstr +crt_large_lib/strtok.rel + _strtok +crt_large_lib/strtol.rel + _strtol +crt_large_lib/strtoul.rel + _strtoul +crt_large_lib/system.rel + _system +crt_large_lib/termcap.rel + _tputs + _tgetnum + _tgetstr + _tgetflag + _tgetent + _ospeed + _tputs_baud_rate + _PC +crt_large_lib/tmpnam.rel + _tmpnam + __tmpnum +crt_large_lib/tparam.rel + _tparam + _tgoto + __UP + __BC +crt_large_lib/ttyname.rel + _ttyname +crt_large_lib/tzset.rel + _tzset + _daylight + _timezone + _tzname +crt_large_lib/ultoa.rel + _ultoa +crt_large_lib/ungetc.rel + _ungetc +crt_large_lib/utsname.rel + _uname +crt_large_lib/vfprintf.rel + _vfprintf +crt_large_lib/vfscanf.rel + _vfscanf +crt_large_lib/vprinter.rel + ___vprinter +crt_large_lib/vprintf.rel + _vprintf +crt_large_lib/vscanf.rel + _vscanf +crt_large_lib/vsprintf.rel + _vsprintf +crt_large_lib/vsscanf.rel + _vsscanf +crt_large_lib/xitoa.rel + __itoa +crt_large_lib/xltoa.rel + __ultoa + __ltoa diff --git a/src/nos/lib/crt_large_lib/abort.rel b/src/nos/lib/crt_large_lib/abort.rel new file mode 100644 index 00000000..d4b7c65f --- /dev/null +++ b/src/nos/lib/crt_large_lib/abort.rel @@ -0,0 +1,30 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S __exit Ref00000000 +S _pause Ref00000000 +S .__.ABS. Def00000000 +S _kill Ref00000000 +S _getpid Ref00000000 +S _signal Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 44 flags 0 +S _abort Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 21 00 00 E5 21 00 00 E5 11 +R 00 00 01 00 +T 0B 00 00 00 06 00 CD 00 00 00 00 F1 F1 CD +R 00 00 01 00 02 07 06 00 +T 13 00 00 00 00 00 00 00 4D 44 11 06 00 CD +R 00 00 01 00 02 04 05 00 +T 1B 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 02 00 +T 21 00 00 00 00 00 E5 21 00 00 E5 11 09 00 CD +R 00 00 01 00 +T 2C 00 00 00 00 00 00 00 F1 F1 CD 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 0B 05 00 +T 33 00 00 00 4D 44 11 09 00 CD 00 00 00 00 11 +R 00 00 01 00 02 0A 04 00 +T 3C 00 00 00 FF 00 CD 00 00 00 00 D1 C1 C9 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/crt_large_lib/alloca.rel b/src/nos/lib/crt_large_lib/alloca.rel new file mode 100644 index 00000000..10939aae --- /dev/null +++ b/src/nos/lib/crt_large_lib/alloca.rel @@ -0,0 +1,93 @@ +XL4 +H 4 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _malloc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C4 flags 0 +S _alloca Def00000000 +A IDATA0 size 2 flags 0 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 2A +R 00 00 01 00 02 05 04 00 +T 06 00 00 00 00 00 00 00 DD 75 FB DD 74 FC +R 00 00 01 00 00 04 02 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 DD 7E FB DD B6 FC 28 44 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 21 00 00 39 4D 44 21 04 00 DD 5E +R 00 00 01 00 +T 21 00 00 00 FB DD 56 FC 19 56 23 66 6A A7 ED +R 00 00 01 00 +T 2C 00 00 00 42 30 27 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 6E FB DD 66 FC 46 23 66 68 DD +R 00 00 01 00 +T 3A 00 00 00 75 FD DD 74 FE DD 5E FB DD 56 FC +R 00 00 01 00 +T 45 00 00 00 CD 00 00 00 00 DD 6E FD DD 66 FE +R 00 00 01 00 02 05 03 00 +T 4E 00 00 00 DD 75 FB DD 74 FC 18 02 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 18 02 +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 18 B4 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 DD 6E FB DD 66 FC 22 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 63 00 00 00 DD 7E 02 DD B6 03 20 05 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 21 00 00 18 51 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 7B 00 00 00 CD 00 00 00 00 DD 75 FB DD 74 FC +R 00 00 01 00 02 05 05 00 +T 84 00 00 00 7D B4 20 08 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 6E FB DD 66 FC 18 31 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 2A 00 00 00 00 E5 DD 6E FB DD 66 +R 00 00 01 00 00 05 02 00 +T 99 00 00 00 FC C1 71 23 70 21 04 00 DD 4E FB +R 00 00 01 00 +T A4 00 00 00 DD 46 FC 09 E5 21 02 00 39 5D 54 +R 00 00 01 00 +T AF 00 00 00 E1 73 23 72 ED 43 00 00 00 00 21 +R 00 00 01 00 00 0A 02 00 +T B8 00 00 00 0C 00 DD 4E FB DD 46 FC 09 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/asctime.rel b/src/nos/lib/crt_large_lib/asctime.rel new file mode 100644 index 00000000..6b69442f --- /dev/null +++ b/src/nos/lib/crt_large_lib/asctime.rel @@ -0,0 +1,215 @@ +XL4 +H 6 areas D global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _memcpy Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24F flags 0 +S ___asctime Def0000001C +S _asctime Def00000231 +A CSTR size 1A flags 0 +A UDATA0 size 1A flags 0 +A IDATA0 size 3B flags 0 +A CDATA0 size 3B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 01 0A 00 DD 5E 04 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 56 05 CD 00 00 00 00 7B C6 30 +R 00 00 01 00 02 08 09 00 +T 12 00 00 00 DD 6E 02 DD 66 03 77 C3 +R 00 00 01 00 +T 1A 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 CD 00 00 00 00 FE FF 01 +R 00 00 01 00 02 05 06 00 +T 22 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 00 04 02 00 +T 2B 00 00 00 00 00 00 00 21 0C 00 DD 4E 04 DD +R 00 00 01 00 02 04 05 00 +T 34 00 00 00 46 05 09 23 CB 7E 20 3C 21 0C 00 +R 00 00 01 00 +T 3F 00 00 00 DD 4E 04 DD 46 05 09 4E 23 46 21 +R 00 00 01 00 +T 4A 00 00 00 06 00 CD 00 00 00 00 38 27 +R 00 00 01 00 02 07 08 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 21 03 00 E5 21 0C 00 DD 4E 04 DD +R 00 00 01 00 +T 5C 00 00 00 46 05 09 4E 23 46 11 03 00 CD +R 00 00 01 00 +T 66 00 00 00 00 00 00 00 21 00 00 00 00 19 4D +R 00 00 01 00 02 04 07 00 00 09 04 00 +T 6D 00 00 00 44 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 75 00 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 21 08 00 DD 4E 04 DD 46 05 09 23 +R 00 00 01 00 +T 83 00 00 00 CB 7E 20 41 21 08 00 DD 4E 04 DD +R 00 00 01 00 +T 8E 00 00 00 46 05 09 4E 23 46 21 0B 00 CD +R 00 00 01 00 +T 98 00 00 00 00 00 00 00 38 2C +R 00 00 01 00 02 04 08 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 21 03 00 E5 21 08 00 DD 4E 04 DD +R 00 00 01 00 +T A7 00 00 00 46 05 09 4E 23 46 11 03 00 CD +R 00 00 01 00 +T B1 00 00 00 00 00 00 00 21 16 00 00 00 19 4D +R 00 00 01 00 02 04 07 00 00 09 04 00 +T B8 00 00 00 44 21 04 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T C3 00 00 00 EB CD 00 00 00 00 F1 +R 00 00 01 00 02 06 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 21 0A 00 DD 4E 04 DD 46 05 09 56 +R 00 00 01 00 +T D3 00 00 00 23 66 6A 11 6C 07 19 DD 75 FE DD +R 00 00 01 00 +T DE 00 00 00 74 FF 21 06 00 09 5E 23 56 01 +R 00 00 01 00 +T E8 00 00 00 0A 00 CD 00 00 00 00 4B 42 21 +R 00 00 01 00 02 07 0A 00 +T F0 00 00 00 08 00 DD 5E 02 DD 56 03 19 EB CD +R 00 00 01 00 +T FB 00 00 00 00 00 00 00 21 06 00 DD 4E 04 DD +R 00 00 01 00 00 04 01 00 +T 04 01 00 00 46 05 09 4E 23 46 21 09 00 DD 5E +R 00 00 01 00 +T 0F 01 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 18 01 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 23 01 00 00 23 56 01 0A 00 CD 00 00 00 00 4B +R 00 00 01 00 02 0A 0A 00 +T 2C 01 00 00 42 21 0B 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 37 01 00 00 EB CD 00 00 00 00 21 04 00 DD 4E +R 00 00 01 00 00 06 01 00 +T 40 01 00 00 04 DD 46 05 09 4E 23 46 21 0C 00 +R 00 00 01 00 +T 4B 01 00 00 DD 5E 02 DD 56 03 19 EB CD +R 00 00 01 00 +T 54 01 00 00 00 00 00 00 DD 6E 04 DD 66 05 23 +R 00 00 01 00 00 04 01 00 +T 5D 01 00 00 23 5E 23 56 01 0A 00 CD +R 00 00 01 00 +T 65 01 00 00 00 00 00 00 4B 42 21 0E 00 DD 5E +R 00 00 01 00 02 04 0A 00 +T 6E 01 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 77 01 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 82 01 00 00 21 0F 00 DD 5E 02 DD 56 03 19 EB +R 00 00 01 00 +T 8D 01 00 00 CD 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 01 00 +T 96 01 00 00 5E 23 56 01 0A 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T 9F 01 00 00 4B 42 21 11 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T AA 01 00 00 19 EB CD 00 00 00 00 DD 6E 04 DD +R 00 00 01 00 00 07 01 00 +T B3 01 00 00 66 05 4E 23 46 21 12 00 DD 5E 02 +R 00 00 01 00 +T BE 01 00 00 DD 56 03 19 EB CD 00 00 00 00 01 +R 00 00 01 00 00 0A 01 00 +T C7 01 00 00 E8 03 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T D0 01 00 00 00 00 00 00 4B 42 21 14 00 DD 5E +R 00 00 01 00 02 04 0A 00 +T D9 01 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T E2 01 00 00 01 64 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T EC 01 00 00 00 00 00 00 4B 42 21 15 00 DD 5E +R 00 00 01 00 02 04 0A 00 +T F5 01 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T FE 01 00 00 01 0A 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 08 02 00 00 00 00 00 00 4B 42 21 16 00 DD 5E +R 00 00 01 00 02 04 0A 00 +T 11 02 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 1A 02 00 00 DD 4E FE DD 46 FF 21 17 00 DD 5E +R 00 00 01 00 +T 25 02 00 00 02 DD 56 03 19 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 2E 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 31 02 00 00 +R 00 00 01 00 +T 31 02 00 00 CD 00 00 00 00 7B B2 20 05 +R 00 00 01 00 02 05 04 00 +T 38 02 00 00 +R 00 00 01 00 +T 38 02 00 00 21 00 00 18 0F +R 00 00 01 00 +T 3D 02 00 00 +R 00 00 01 00 +T 3D 02 00 00 DD 4E 02 DD 46 03 11 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 46 02 00 00 CD 1C 00 00 00 21 00 00 00 00 +R 00 00 01 00 00 05 01 00 00 0A 03 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 45 72 72 20 45 72 72 20 2E 2E 20 +R 00 00 02 00 +T 0B 00 00 00 2E 2E 3A 2E 2E 3A 2E 2E 20 2E 2E +R 00 00 02 00 +T 16 00 00 00 2E 2E 0A 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 16 00 00 00 +R 00 00 04 00 +T 16 00 00 00 +R 00 00 04 00 +T 00 00 00 00 53 75 6E 4D 6F 6E 54 75 65 57 65 +R 00 00 05 00 +T 0B 00 00 00 64 54 68 75 46 72 69 53 61 74 00 +R 00 00 05 00 +T 16 00 00 00 4A 61 6E 46 65 62 4D 61 72 41 70 +R 00 00 05 00 +T 21 00 00 00 72 4D 61 79 4A 75 6E 4A 75 6C 41 +R 00 00 05 00 +T 2C 00 00 00 75 67 53 65 70 4F 63 74 4E 6F 76 +R 00 00 05 00 +T 37 00 00 00 44 65 63 00 +R 00 00 05 00 diff --git a/src/nos/lib/crt_large_lib/assert.rel b/src/nos/lib/crt_large_lib/assert.rel new file mode 100644 index 00000000..69fcfd76 --- /dev/null +++ b/src/nos/lib/crt_large_lib/assert.rel @@ -0,0 +1,59 @@ +XL4 +H 3 areas A global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S __itoa Ref00000000 +S _strlen Ref00000000 +S _abort Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _write Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 53 flags 0 +S ___assert Def00000017 +S ___errput Def00000000 +A CSTR size 1D flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 06 00 02 0A 02 00 +T 07 00 00 00 DD 4E 02 DD 46 03 11 02 00 CD +R 00 00 01 00 +T 11 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 07 00 02 0A 04 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 CD 00 00 00 00 11 00 00 00 00 CD +R 00 00 01 00 02 05 06 00 00 0A 02 00 +T 1E 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 00 04 01 00 +T 27 00 00 00 00 00 00 00 11 09 00 00 00 CD +R 00 00 01 00 00 04 01 00 00 09 02 00 +T 2D 00 00 00 00 00 00 00 59 50 CD 00 00 00 00 +R 00 00 01 00 00 04 01 00 00 0B 01 00 +T 34 00 00 00 11 12 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 00 05 02 00 00 0A 01 00 +T 3B 00 00 00 5E 08 DD 56 09 CD 00 00 00 00 EB +R 00 00 01 00 02 0A 01 00 +T 44 00 00 00 CD 00 00 00 00 11 1A 00 00 00 CD +R 00 00 01 00 00 05 01 00 00 0A 02 00 +T 4B 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 00 04 01 00 02 09 03 00 +T 51 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 46 61 69 6C 65 64 20 27 00 +R 00 00 02 00 +T 09 00 00 00 +R 00 00 02 00 +T 09 00 00 00 27 2C 20 66 69 6C 65 20 00 +R 00 00 02 00 +T 12 00 00 00 +R 00 00 02 00 +T 12 00 00 00 2C 20 6C 69 6E 65 20 00 +R 00 00 02 00 +T 1A 00 00 00 +R 00 00 02 00 +T 1A 00 00 00 2E 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/atexit.rel b/src/nos/lib/crt_large_lib/atexit.rel new file mode 100644 index 00000000..f1fe96af --- /dev/null +++ b/src/nos/lib/crt_large_lib/atexit.rel @@ -0,0 +1,115 @@ +XL4 +H 5 areas C global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S ___cleanup Ref00000000 +S ?CALL_IND_L09 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D5 flags 0 +S _atexit Def000000C9 +S _on_exit Def00000067 +A UDATA0 size 28 flags 0 +S ___on_exit_table Def00000000 +A IDATA0 size 2 flags 0 +S ___on_exit_count Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 07 00 +T 06 00 00 00 00 00 00 00 2B DD 75 FC DD 74 FD +R 00 00 01 00 00 04 03 00 +T 0F 00 00 00 21 FF FF 22 00 00 00 00 21 00 00 +R 00 00 01 00 00 08 03 00 +T 18 00 00 00 22 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD CB FD 7E 20 43 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 DD 6E FC DD 66 FD 29 29 01 +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 00 04 02 00 +T 33 00 00 00 FE DD 74 FF DD 6E FC DD 66 FD 29 +R 00 00 01 00 +T 3E 00 00 00 29 01 02 00 00 00 09 4E 23 46 DD +R 00 00 01 00 00 06 02 00 +T 47 00 00 00 5E 02 DD 56 03 DD 6E FE DD 66 FF +R 00 00 01 00 +T 52 00 00 00 CD 00 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 06 00 +T 5B 00 00 00 2B DD 75 FC DD 74 FD 18 B7 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 CD 00 00 00 00 2A 00 00 00 00 CB +R 00 00 01 00 02 05 03 00 00 0A 03 00 +T 6E 00 00 00 7C 20 0E 01 0A 80 2A 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 77 00 00 00 3E 80 AC 67 ED 42 38 0B +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 21 0C 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 88 00 00 00 18 3C +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 00 00 00 00 22 00 00 00 00 DD +R 00 00 01 00 00 05 01 00 02 0A 05 00 +T 91 00 00 00 7E 02 DD B6 03 28 2B +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 2A 00 00 00 00 29 29 01 +R 00 00 01 00 00 05 03 00 +T 9E 00 00 00 00 00 00 00 09 DD 4E 02 DD 46 03 +R 00 00 01 00 00 04 02 00 +T A7 00 00 00 71 23 70 2A 00 00 00 00 29 29 01 +R 00 00 01 00 00 08 03 00 +T B0 00 00 00 02 00 00 00 09 DD 4E 04 DD 46 05 +R 00 00 01 00 00 04 02 00 +T B9 00 00 00 71 23 70 2A 00 00 00 00 23 22 +R 00 00 01 00 00 08 03 00 +T C1 00 00 00 00 00 00 00 +R 00 00 01 00 00 04 03 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 21 00 00 +R 00 00 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 CD 00 00 00 00 01 00 00 CD +R 00 00 01 00 02 05 03 00 +T D0 00 00 00 67 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/crt_large_lib/atoi.rel b/src/nos/lib/crt_large_lib/atoi.rel new file mode 100644 index 00000000..76245e25 --- /dev/null +++ b/src/nos/lib/crt_large_lib/atoi.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strtol Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S _atoi Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0A 00 E5 01 +R 00 00 01 00 02 05 03 00 +T 08 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 07 04 00 +T 0F 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_large_lib/atol.rel b/src/nos/lib/crt_large_lib/atol.rel new file mode 100644 index 00000000..f0dc90b3 --- /dev/null +++ b/src/nos/lib/crt_large_lib/atol.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_32_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strtol Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S _atol Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0A 00 E5 01 +R 00 00 01 00 02 05 03 00 +T 08 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 07 04 00 +T 0F 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_large_lib/bsearch.rel b/src/nos/lib/crt_large_lib/bsearch.rel new file mode 100644 index 00000000..2507b655 --- /dev/null +++ b/src/nos/lib/crt_large_lib/bsearch.rel @@ -0,0 +1,94 @@ +XL4 +H 3 areas 9 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?CALL_IND_L09 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D1 flags 0 +S _bsearch Def00000000 +A UDATA0 size 2 flags 0 +S __bsearch Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 F8 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 77 F9 21 FF FF DD 5E 08 DD 56 +R 00 00 01 00 +T 14 00 00 00 09 19 DD 75 FA DD 74 FB +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 DD 4E F8 DD 46 F9 DD 6E FA DD 66 +R 00 00 01 00 +T 27 00 00 00 FB CD 00 00 00 00 DA C2 00 00 00 +R 00 00 01 00 02 06 06 00 00 0B 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 6E FA DD 66 FB DD 4E F8 DD 46 +R 00 00 01 00 +T 39 00 00 00 F9 09 CB 2C CB 1D DD 75 FC DD 74 +R 00 00 01 00 +T 44 00 00 00 FD DD 4E 02 DD 46 03 C5 EB DD 4E +R 00 00 01 00 +T 4F 00 00 00 0A DD 46 0B CD 00 00 00 00 DD 6E +R 00 00 01 00 02 09 05 00 +T 58 00 00 00 04 DD 66 05 19 EB DD 6E 0C DD 66 +R 00 00 01 00 +T 63 00 00 00 0D C1 CD 00 00 00 00 DD 75 FE DD +R 00 00 01 00 02 07 03 00 +T 6C 00 00 00 74 FF 7D B4 28 2C +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 DD 4E FE DD 46 FF 21 00 00 CD +R 00 00 01 00 +T 7C 00 00 00 00 00 00 00 30 0F +R 00 00 01 00 02 04 06 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 DD 6E FC DD 66 FD 2B DD 75 FA DD +R 00 00 01 00 +T 8B 00 00 00 74 FB 18 0D +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 6E FC DD 66 FD 23 DD 75 F8 DD +R 00 00 01 00 +T 9A 00 00 00 74 F9 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 18 21 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 DD 6E FC DD 66 FD 22 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T A7 00 00 00 DD 4E 0A DD 46 0B DD 5E FC DD 56 +R 00 00 01 00 +T B2 00 00 00 FD CD 00 00 00 00 DD 6E 04 DD 66 +R 00 00 01 00 02 06 05 00 +T BB 00 00 00 05 19 18 0F +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 C3 1C 00 00 00 +R 00 00 01 00 00 05 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 DD 6E FA DD 66 FB 22 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T CB 00 00 00 21 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/calloc.rel b/src/nos/lib/crt_large_lib/calloc.rel new file mode 100644 index 00000000..9171589e --- /dev/null +++ b/src/nos/lib/crt_large_lib/calloc.rel @@ -0,0 +1,32 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _memset Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _malloc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3E flags 0 +S _calloc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 CD 00 00 00 00 DD 73 FC DD +R 00 00 01 00 02 07 05 00 +T 12 00 00 00 72 FD CD 00 00 00 00 DD 75 FE DD +R 00 00 01 00 02 07 06 00 +T 1B 00 00 00 74 FF 7D B4 28 14 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 DD 6E FC DD 66 FD E5 01 00 00 DD +R 00 00 01 00 +T 2C 00 00 00 5E FE DD 56 FF CD 00 00 00 00 F1 +R 00 00 01 00 02 0A 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_large_lib/clock.rel b/src/nos/lib/crt_large_lib/clock.rel new file mode 100644 index 00000000..8fb2f741 --- /dev/null +++ b/src/nos/lib/crt_large_lib/clock.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_32_L09 Ref00000000 +S .__.ABS. Def00000000 +S _times Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D flags 0 +S _clock Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EC FF 21 00 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 5D 54 CD 00 00 00 00 21 00 00 39 +R 00 00 01 00 02 07 03 00 +T 12 00 00 00 5E 23 56 23 4E 23 46 EB C3 +R 00 00 01 00 +T 1B 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_large_lib/closedir.rel b/src/nos/lib/crt_large_lib/closedir.rel new file mode 100644 index 00000000..da79a095 --- /dev/null +++ b/src/nos/lib/crt_large_lib/closedir.rel @@ -0,0 +1,50 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _close Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 67 flags 0 +S _closedir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 1A 21 +R 00 00 01 00 02 05 05 00 +T 08 00 00 00 06 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 13 00 00 00 B6 28 0B DD 6E 02 DD 66 03 7E 23 +R 00 00 01 00 +T 1E 00 00 00 B6 20 0B +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 0E 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 06 00 +T 2A 00 00 00 18 38 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 6E 02 DD 66 03 5E 23 56 CD +R 00 00 01 00 +T 36 00 00 00 00 00 00 00 21 06 00 DD 4E 02 DD +R 00 00 01 00 02 04 01 00 +T 3F 00 00 00 46 03 09 5E 23 56 CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 48 00 00 00 69 60 AF 77 23 77 21 06 00 DD 4E +R 00 00 01 00 +T 53 00 00 00 02 DD 46 03 09 AF 77 23 77 59 50 +R 00 00 01 00 +T 5E 00 00 00 CD 00 00 00 00 21 00 00 +R 00 00 01 00 02 05 04 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/convtime.rel b/src/nos/lib/crt_large_lib/convtime.rel new file mode 100644 index 00000000..49f33e62 --- /dev/null +++ b/src/nos/lib/crt_large_lib/convtime.rel @@ -0,0 +1,191 @@ +XL4 +H 4 areas 9 global symbols +S ?US_RSH_L02 Ref00000000 +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_32_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +S _timezone Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2CE flags 0 +S _convtime Def00000000 +A IDATA0 size 18 flags 0 +A CDATA0 size 18 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D6 FF DD 6E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 66 03 23 23 7E E6 00 5F 23 7E E6 +R 00 00 01 00 +T 14 00 00 00 FE 57 06 09 CD 00 00 00 00 21 +R 00 00 01 00 02 09 00 00 +T 1C 00 00 00 BC 07 19 DD 75 D6 DD 74 D7 01 +R 00 00 01 00 +T 26 00 00 00 B4 07 A7 ED 42 30 0C +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 39 7E C6 64 77 30 02 23 +R 00 00 01 00 +T 38 00 00 00 34 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 6E 02 DD 66 03 23 23 7E E6 E0 +R 00 00 01 00 +T 44 00 00 00 5F 23 7E E6 01 57 06 05 CD +R 00 00 01 00 +T 4D 00 00 00 00 00 00 00 DD 73 D8 DD 72 D9 DD +R 00 00 01 00 02 04 00 00 +T 56 00 00 00 6E 02 DD 66 03 23 23 7E E6 1F 4F +R 00 00 01 00 +T 61 00 00 00 23 7E E6 00 47 DD 71 DA DD 70 DB +R 00 00 01 00 +T 6C 00 00 00 DD 6E 02 DD 66 03 7E E6 00 5F 23 +R 00 00 01 00 +T 77 00 00 00 7E E6 F8 57 06 0B CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 80 00 00 00 DD 73 DC DD 72 DD DD 6E 02 DD 66 +R 00 00 01 00 +T 8B 00 00 00 03 7E E6 E0 5F 23 7E E6 07 57 06 +R 00 00 01 00 +T 96 00 00 00 05 CD 00 00 00 00 DD 73 DE DD 72 +R 00 00 01 00 02 06 00 00 +T 9F 00 00 00 DF DD 6E 02 DD 66 03 7E E6 1F 4F +R 00 00 01 00 +T AA 00 00 00 23 7E E6 00 47 69 60 29 DD 75 E0 +R 00 00 01 00 +T B5 00 00 00 DD 74 E1 21 4E F8 DD 4E D6 DD 46 +R 00 00 01 00 +T C0 00 00 00 D7 09 DD 75 D6 DD 74 D7 CB 3C CB +R 00 00 01 00 +T CB 00 00 00 1D CB 3C CB 1D DD 75 E2 DD 74 E3 +R 00 00 01 00 +T D6 00 00 00 EB 01 00 00 C5 D5 01 00 00 21 +R 00 00 01 00 +T E0 00 00 00 18 00 CD 00 00 00 00 C5 E5 01 +R 00 00 01 00 02 07 04 00 +T E8 00 00 00 00 00 21 3C 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 04 00 +T F1 00 00 00 E5 01 00 00 21 3C 00 CD +R 00 00 01 00 +T F9 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 04 00 +T 02 01 00 00 71 FE DD 70 FF DD 7E D6 E6 03 47 +R 00 00 01 00 +T 0D 01 00 00 DD 7E D7 E6 00 B0 20 1B 01 03 00 +R 00 00 01 00 +T 18 01 00 00 DD 6E D8 DD 66 D9 A7 ED 42 30 0D +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 21 26 00 39 01 01 00 11 80 51 CD +R 00 00 01 00 +T 2E 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 07 00 +T 30 01 00 00 +R 00 00 01 00 +T 30 01 00 00 DD 6E D6 DD 66 D7 01 00 00 C5 E5 +R 00 00 01 00 +T 3B 01 00 00 01 00 00 21 6D 01 CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 44 01 00 00 C5 E5 01 00 00 21 18 00 CD +R 00 00 01 00 +T 4D 01 00 00 00 00 00 00 C5 E5 01 00 00 21 +R 00 00 01 00 02 04 04 00 +T 55 01 00 00 3C 00 CD 00 00 00 00 C5 E5 01 +R 00 00 01 00 02 07 04 00 +T 5D 01 00 00 00 00 21 3C 00 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 04 00 +T 66 01 00 00 75 E8 DD 74 E9 DD 71 EA DD 70 EB +R 00 00 01 00 +T 71 01 00 00 DD 6E D8 DD 66 D9 29 01 +R 00 00 01 00 +T 79 01 00 00 FE FF FF FF 09 46 23 66 68 DD 75 +R 00 00 01 00 00 04 02 00 +T 82 01 00 00 D8 DD 74 D9 EB 01 00 00 C5 D5 01 +R 00 00 01 00 +T 8D 01 00 00 00 00 21 18 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 04 00 +T 96 01 00 00 E5 01 00 00 21 3C 00 CD +R 00 00 01 00 +T 9E 01 00 00 00 00 00 00 C5 E5 01 00 00 21 +R 00 00 01 00 02 04 04 00 +T A6 01 00 00 3C 00 CD 00 00 00 00 DD 75 EC DD +R 00 00 01 00 02 07 04 00 +T AF 01 00 00 74 ED DD 71 EE DD 70 EF DD 5E DA +R 00 00 01 00 +T BA 01 00 00 DD 56 DB 01 00 00 C5 D5 01 00 00 +R 00 00 01 00 +T C5 01 00 00 21 18 00 CD 00 00 00 00 C5 E5 01 +R 00 00 01 00 02 08 04 00 +T CE 01 00 00 00 00 21 3C 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 04 00 +T D7 01 00 00 E5 01 00 00 21 3C 00 CD +R 00 00 01 00 +T DF 01 00 00 00 00 00 00 DD 75 F0 DD 74 F1 DD +R 00 00 01 00 02 04 04 00 +T E8 01 00 00 71 F2 DD 70 F3 DD 5E DC DD 56 DD +R 00 00 01 00 +T F3 01 00 00 01 00 00 C5 D5 01 00 00 21 3C 00 +R 00 00 01 00 +T FE 01 00 00 CD 00 00 00 00 C5 E5 01 00 00 21 +R 00 00 01 00 02 05 04 00 +T 07 02 00 00 3C 00 CD 00 00 00 00 DD 75 F4 DD +R 00 00 01 00 02 07 04 00 +T 10 02 00 00 74 F5 DD 71 F6 DD 70 F7 DD 5E DE +R 00 00 01 00 +T 1B 02 00 00 DD 56 DF 01 00 00 C5 D5 01 00 00 +R 00 00 01 00 +T 26 02 00 00 21 3C 00 CD 00 00 00 00 DD 75 F8 +R 00 00 01 00 02 08 04 00 +T 2F 02 00 00 DD 74 F9 DD 71 FA DD 70 FB C5 E5 +R 00 00 01 00 +T 3A 02 00 00 DD 6E E0 DD 66 E1 01 00 00 C5 E5 +R 00 00 01 00 +T 45 02 00 00 DD 6E FC DD 66 FD C1 09 EB DD 6E +R 00 00 01 00 +T 50 02 00 00 FE DD 66 FF C1 ED 4A E5 D5 DD 6E +R 00 00 01 00 +T 5B 02 00 00 E8 DD 66 E9 C1 09 EB DD 6E EA DD +R 00 00 01 00 +T 66 02 00 00 66 EB C1 ED 4A E5 D5 DD 6E EC DD +R 00 00 01 00 +T 71 02 00 00 66 ED C1 09 EB DD 6E EE DD 66 EF +R 00 00 01 00 +T 7C 02 00 00 C1 ED 4A E5 D5 DD 6E F0 DD 66 F1 +R 00 00 01 00 +T 87 02 00 00 C1 09 EB DD 6E F2 DD 66 F3 C1 ED +R 00 00 01 00 +T 92 02 00 00 4A E5 D5 DD 6E F4 DD 66 F5 C1 09 +R 00 00 01 00 +T 9D 02 00 00 EB DD 6E F6 DD 66 F7 C1 ED 4A EB +R 00 00 01 00 +T A8 02 00 00 C1 09 EB C1 ED 4A E5 D5 2A +R 00 00 01 00 +T B1 02 00 00 00 00 00 00 C1 09 EB 2A +R 00 00 01 00 02 04 05 00 +T B7 02 00 00 02 00 00 00 C1 ED 4A 4D 44 EB DD +R 00 00 01 00 02 04 05 00 +T C0 02 00 00 75 E4 DD 74 E5 DD 71 E6 DD 70 E7 +R 00 00 01 00 +T CB 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 1F 00 3B 00 5A 00 78 00 +R 00 00 03 00 +T 0A 00 00 00 97 00 B5 00 D4 00 F3 00 11 01 +R 00 00 03 00 +T 14 00 00 00 30 01 4E 01 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/crypt.rel b/src/nos/lib/crt_large_lib/crypt.rel new file mode 100644 index 00000000..440e344b --- /dev/null +++ b/src/nos/lib/crt_large_lib/crypt.rel @@ -0,0 +1,222 @@ +XL4 +H 3 areas D global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _memset Ref00000000 +S _memcpy Ref00000000 +S ?UL_RSHASG_L03 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_XOR_L03 Ref00000000 +S ?L_ORASG_L03 Ref00000000 +S ?UL_RSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29E flags 0 +S _crypt Def00000000 +A UDATA0 size 10 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DC FF DD 36 F8 B9 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 36 F9 79 DD 36 FA 37 DD 36 FB +R 00 00 01 00 +T 14 00 00 00 9E 21 10 00 E5 01 00 00 11 +R 00 00 01 00 +T 1D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 00 04 02 00 02 09 01 00 +T 24 00 00 00 02 00 E5 DD 4E 04 DD 46 05 11 +R 00 00 01 00 +T 2E 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 00 04 02 00 02 09 02 00 +T 35 00 00 00 36 FE 00 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 7E FE FE 0E 30 2E DD 4E FE 06 +R 00 00 01 00 +T 43 00 00 00 00 DD 6E 02 DD 66 03 09 7E B7 28 +R 00 00 01 00 +T 4E 00 00 00 1E +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 21 02 00 00 00 DD 4E FE 06 00 09 +R 00 00 01 00 00 05 02 00 +T 58 00 00 00 E5 DD 4E FE 06 00 DD 6E 02 DD 66 +R 00 00 01 00 +T 63 00 00 00 03 09 46 E1 70 DD 34 FE 18 CB +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 DD 4E FE 06 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 78 00 00 00 09 7E B7 28 18 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 DD 4E FE 06 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 88 00 00 00 09 3A 02 00 00 00 86 32 +R 00 00 01 00 00 06 02 00 +T 8E 00 00 00 02 00 00 00 DD 34 FE 18 D8 +R 00 00 01 00 00 04 02 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 10 00 E5 01 00 00 00 00 21 +R 00 00 01 00 00 09 02 00 +T 9D 00 00 00 0A 00 39 5D 54 CD 00 00 00 00 F1 +R 00 00 01 00 02 0A 02 00 +T A6 00 00 00 AF DD 77 F4 DD 77 F5 DD 77 F6 DD +R 00 00 01 00 +T B1 00 00 00 77 F7 AF DD 77 E0 DD 77 E1 DD 77 +R 00 00 01 00 +T BC 00 00 00 E2 DD 77 E3 AF DD 77 DC DD 77 DD +R 00 00 01 00 +T C7 00 00 00 DD 77 DE DD 77 DF DD 36 FE 40 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 AF DD B6 FE CA F3 01 00 00 +R 00 00 01 00 00 09 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 21 18 00 39 DD 4E FA DD 46 FB DD +R 00 00 01 00 +T E3 00 00 00 5E F8 DD 56 F9 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 05 00 +T EC 00 00 00 00 00 39 E5 21 06 00 39 5E 23 56 +R 00 00 01 00 +T F7 00 00 00 23 4E 23 46 EB 3E 05 CD +R 00 00 01 00 +T FF 00 00 00 00 00 00 00 C5 E5 DD 6E E8 DD 66 +R 00 00 01 00 02 04 0B 00 +T 08 01 00 00 E9 C1 09 EB DD 6E EA DD 66 EB C1 +R 00 00 01 00 +T 13 01 00 00 ED 4A E5 D5 DD 6E E2 DD 66 E3 E5 +R 00 00 01 00 +T 1E 01 00 00 DD 6E E0 DD 66 E1 E5 DD 6E F4 DD +R 00 00 01 00 +T 29 01 00 00 66 F5 C1 09 EB DD 6E F6 DD 66 F7 +R 00 00 01 00 +T 34 01 00 00 C1 ED 4A E5 D5 21 0E 00 39 5E 23 +R 00 00 01 00 +T 3F 01 00 00 56 23 4E 23 46 EB 3E 04 CD +R 00 00 01 00 +T 48 01 00 00 00 00 00 00 C5 E5 DD 6E E4 DD 66 +R 00 00 01 00 02 04 07 00 +T 51 01 00 00 E5 C1 09 EB DD 6E E6 DD 66 E7 C1 +R 00 00 01 00 +T 5C 01 00 00 ED 4A 4D 44 EB CD 00 00 00 00 CD +R 00 00 01 00 02 0A 09 00 +T 65 01 00 00 00 00 00 00 EB E1 CD 00 00 00 00 +R 00 00 01 00 02 04 09 00 02 0B 05 00 +T 6C 01 00 00 21 04 00 39 E5 21 02 00 39 5E 23 +R 00 00 01 00 +T 77 01 00 00 56 23 4E 23 46 EB 3E 05 CD +R 00 00 01 00 +T 80 01 00 00 00 00 00 00 C5 E5 DD 6E F0 DD 66 +R 00 00 01 00 02 04 0B 00 +T 89 01 00 00 F1 C1 09 EB DD 6E F2 DD 66 F3 C1 +R 00 00 01 00 +T 94 01 00 00 ED 4A E5 D5 DD 6E DE DD 66 DF E5 +R 00 00 01 00 +T 9F 01 00 00 DD 6E DC DD 66 DD E5 DD 6E F4 DD +R 00 00 01 00 +T AA 01 00 00 66 F5 C1 09 EB DD 6E F6 DD 66 F7 +R 00 00 01 00 +T B5 01 00 00 C1 ED 4A E5 D5 21 0A 00 39 5E 23 +R 00 00 01 00 +T C0 01 00 00 56 23 4E 23 46 EB 3E 04 CD +R 00 00 01 00 +T C9 01 00 00 00 00 00 00 C5 E5 DD 6E EC DD 66 +R 00 00 01 00 02 04 07 00 +T D2 01 00 00 ED C1 09 EB DD 6E EE DD 66 EF C1 +R 00 00 01 00 +T DD 01 00 00 ED 4A 4D 44 EB CD 00 00 00 00 CD +R 00 00 01 00 02 0A 09 00 +T E6 01 00 00 00 00 00 00 EB E1 CD 00 00 00 00 +R 00 00 01 00 02 04 09 00 02 0B 05 00 +T ED 01 00 00 DD 35 FE C3 D1 00 00 00 +R 00 00 01 00 00 08 01 00 +T F3 01 00 00 +R 00 00 01 00 +T F3 01 00 00 21 00 00 39 DD 75 FC DD 74 FD DD +R 00 00 01 00 +T FE 01 00 00 36 FE 02 +R 00 00 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 DD 7E FE FE 0D D2 94 02 00 00 +R 00 00 01 00 00 0A 01 00 +T 09 02 00 00 +R 00 00 01 00 +T 09 02 00 00 DD 7E FE FE 08 20 28 +R 00 00 01 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 21 00 00 39 E5 21 06 00 39 5E 23 +R 00 00 01 00 +T 1B 02 00 00 56 23 4E 23 46 EB 3E 1C CD +R 00 00 01 00 +T 24 02 00 00 00 00 00 00 EB E1 CD 00 00 00 00 +R 00 00 01 00 02 04 0B 00 02 0B 0A 00 +T 2B 02 00 00 DD 7E FC C6 04 DD 77 FC 30 03 DD +R 00 00 01 00 +T 36 02 00 00 34 FD +R 00 00 01 00 +T 38 02 00 00 +R 00 00 01 00 +T 38 02 00 00 +R 00 00 01 00 +T 38 02 00 00 DD 6E FC DD 66 FD 5E 23 56 23 4E +R 00 00 01 00 +T 43 02 00 00 23 46 EB 7D E6 3F DD 77 FF 3E 06 +R 00 00 01 00 +T 4E 02 00 00 DD 6E FC DD 66 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 57 02 00 00 DD 7E FF FE 0C 30 0A +R 00 00 01 00 +T 5E 02 00 00 +R 00 00 01 00 +T 5E 02 00 00 DD 7E FF C6 2E DD 77 FF 18 19 +R 00 00 01 00 +T 68 02 00 00 +R 00 00 01 00 +T 68 02 00 00 DD 7E FF FE 26 30 0A +R 00 00 01 00 +T 6F 02 00 00 +R 00 00 01 00 +T 6F 02 00 00 DD 7E FF C6 35 DD 77 FF 18 08 +R 00 00 01 00 +T 79 02 00 00 +R 00 00 01 00 +T 79 02 00 00 DD 7E FF C6 3B DD 77 FF +R 00 00 01 00 +T 81 02 00 00 +R 00 00 01 00 +T 81 02 00 00 +R 00 00 01 00 +T 81 02 00 00 DD 4E FE 06 00 21 00 00 00 00 09 +R 00 00 01 00 00 0A 02 00 +T 8A 02 00 00 DD 46 FF 70 DD 34 FE C3 +R 00 00 01 00 +T 92 02 00 00 01 02 00 00 +R 00 00 01 00 00 04 01 00 +T 94 02 00 00 +R 00 00 01 00 +T 94 02 00 00 AF 32 0D 00 00 00 21 00 00 00 00 +R 00 00 01 00 00 06 02 00 00 0B 02 00 +T 9B 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/ctime.rel b/src/nos/lib/crt_large_lib/ctime.rel new file mode 100644 index 00000000..d1964005 --- /dev/null +++ b/src/nos/lib/crt_large_lib/ctime.rel @@ -0,0 +1,17 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _asctime Ref00000000 +S _localtime Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D flags 0 +S _ctime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 03 00 02 0A 05 00 +T 07 00 00 00 CD 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0A 01 00 diff --git a/src/nos/lib/crt_large_lib/ctype.rel b/src/nos/lib/crt_large_lib/ctype.rel new file mode 100644 index 00000000..0de2dc96 --- /dev/null +++ b/src/nos/lib/crt_large_lib/ctype.rel @@ -0,0 +1,101 @@ +XL4 +H 4 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4A flags 0 +S _tolower Def00000025 +S _toupper Def00000000 +A IDATA0 size 100 flags 0 +S ___ctype Def00000000 +A CDATA0 size 100 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 16 00 21 +R 00 00 01 00 02 05 03 00 +T 06 00 00 00 00 00 00 00 19 7E E6 04 28 0E DD +R 00 00 01 00 00 04 02 00 +T 0F 00 00 00 7E 02 EE 20 6F DD 7E 03 EE 00 67 +R 00 00 01 00 +T 1A 00 00 00 18 06 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 CD 00 00 00 00 16 00 21 +R 00 00 01 00 02 05 03 00 +T 2B 00 00 00 00 00 00 00 19 7E E6 02 28 0E DD +R 00 00 01 00 00 04 02 00 +T 34 00 00 00 7E 02 EE 20 6F DD 7E 03 EE 00 67 +R 00 00 01 00 +T 3F 00 00 00 18 06 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 01 01 01 01 01 01 01 01 01 11 11 +R 00 00 03 00 +T 0B 00 00 00 11 11 11 01 01 01 01 01 01 01 01 +R 00 00 03 00 +T 16 00 00 00 01 01 01 01 01 01 01 01 01 01 10 +R 00 00 03 00 +T 21 00 00 00 20 20 20 20 20 20 20 20 20 20 20 +R 00 00 03 00 +T 2C 00 00 00 20 20 20 20 48 48 48 48 48 48 48 +R 00 00 03 00 +T 37 00 00 00 48 48 48 20 20 20 20 20 20 20 42 +R 00 00 03 00 +T 42 00 00 00 42 42 42 42 42 02 02 02 02 02 02 +R 00 00 03 00 +T 4D 00 00 00 02 02 02 02 02 02 02 02 02 02 02 +R 00 00 03 00 +T 58 00 00 00 02 02 02 20 20 20 20 20 20 44 44 +R 00 00 03 00 +T 63 00 00 00 44 44 44 44 04 04 04 04 04 04 04 +R 00 00 03 00 +T 6E 00 00 00 04 04 04 04 04 04 04 04 04 04 04 +R 00 00 03 00 +T 79 00 00 00 04 04 20 20 20 20 01 00 00 00 00 +R 00 00 03 00 +T 84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 8F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 9A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T A5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T BB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T C6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T D1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T DC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T E7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T F2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T FD 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/difftime.rel b/src/nos/lib/crt_large_lib/difftime.rel new file mode 100644 index 00000000..1622f949 --- /dev/null +++ b/src/nos/lib/crt_large_lib/difftime.rel @@ -0,0 +1,80 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_32_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ___tm_conv Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 148 flags 0 +S _difftime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D4 FF 21 00 00 E5 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 21 02 00 39 5D 54 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 12 00 00 00 E1 21 00 00 E5 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 1D 00 00 00 21 14 00 39 5D 54 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 26 00 00 00 E1 DD 4E D6 DD 46 D7 11 3C 00 CD +R 00 00 01 00 +T 31 00 00 00 00 00 00 00 D5 DD 4E D8 DD 46 D9 +R 00 00 01 00 02 04 05 00 +T 3A 00 00 00 11 10 0E CD 00 00 00 00 EB D1 19 +R 00 00 01 00 02 08 05 00 +T 43 00 00 00 7C 07 9F 4F 41 C5 E5 DD 6E E2 DD +R 00 00 01 00 +T 4E 00 00 00 66 E3 7C 07 9F 4F 41 C5 E5 01 +R 00 00 01 00 +T 58 00 00 00 01 00 21 80 51 CD 00 00 00 00 59 +R 00 00 01 00 02 0A 03 00 +T 61 00 00 00 50 C1 09 EB C1 ED 4A E5 D5 DD 6E +R 00 00 01 00 +T 6C 00 00 00 DE DD 66 DF 7C 07 9F 4F 41 C5 E5 +R 00 00 01 00 +T 77 00 00 00 01 EB 01 21 80 BF CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 80 00 00 00 59 50 C1 09 EB C1 ED 4A E5 D5 DD +R 00 00 01 00 +T 8B 00 00 00 6E D4 DD 66 D5 7C 07 9F 5F 53 C1 +R 00 00 01 00 +T 96 00 00 00 09 EB C1 ED 4A 4D 44 EB DD 75 F8 +R 00 00 01 00 +T A1 00 00 00 DD 74 F9 DD 71 FA DD 70 FB DD 5E +R 00 00 01 00 +T AC 00 00 00 E8 DD 56 E9 01 3C 00 CD +R 00 00 01 00 +T B4 00 00 00 00 00 00 00 D5 DD 4E EA DD 46 EB +R 00 00 01 00 02 04 05 00 +T BD 00 00 00 11 10 0E CD 00 00 00 00 EB D1 19 +R 00 00 01 00 02 08 05 00 +T C6 00 00 00 EB 7A 07 9F 4F 41 C5 D5 DD 6E F4 +R 00 00 01 00 +T D1 00 00 00 DD 66 F5 7C 07 9F 4F 41 C5 E5 01 +R 00 00 01 00 +T DC 00 00 00 01 00 21 80 51 CD 00 00 00 00 59 +R 00 00 01 00 02 0A 03 00 +T E5 00 00 00 50 C1 09 EB C1 ED 4A E5 D5 DD 6E +R 00 00 01 00 +T F0 00 00 00 F0 DD 66 F1 7C 07 9F 4F 41 C5 E5 +R 00 00 01 00 +T FB 00 00 00 01 EB 01 21 80 BF CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 04 01 00 00 59 50 C1 09 EB C1 ED 4A E5 D5 DD +R 00 00 01 00 +T 0F 01 00 00 6E E6 DD 66 E7 7C 07 9F 5F 53 C1 +R 00 00 01 00 +T 1A 01 00 00 09 EB C1 ED 4A 4D 44 EB DD 75 FC +R 00 00 01 00 +T 25 01 00 00 DD 74 FD DD 71 FE DD 70 FF 59 50 +R 00 00 01 00 +T 30 01 00 00 A7 DD 4E F8 DD 46 F9 ED 42 EB DD +R 00 00 01 00 +T 3B 01 00 00 4E FA DD 46 FB ED 42 4D 44 EB C3 +R 00 00 01 00 +T 46 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_large_lib/error.rel b/src/nos/lib/crt_large_lib/error.rel new file mode 100644 index 00000000..7b3af363 --- /dev/null +++ b/src/nos/lib/crt_large_lib/error.rel @@ -0,0 +1,230 @@ +XL4 +H 6 areas 10 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strchr Ref00000000 +S _close Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _itoa Ref00000000 +S _atoi Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _open Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18F flags 0 +S _strerror Def00000000 +A CSTR size 21 flags 0 +A UDATA0 size 50 flags 0 +A IDATA0 size 4 flags 0 +S ___sys_errlist Def00000000 +S ___sys_nerr Def00000002 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 76 FF AF DD 77 FE +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 77 FF 2A 02 00 00 00 7D B4 28 +R 00 00 01 00 00 08 04 00 +T 12 00 00 00 2B +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 DD CB 03 7E 20 0F ED 4B +R 00 00 01 00 +T 1B 00 00 00 02 00 00 00 DD 6E 02 DD 66 03 CD +R 00 00 01 00 00 04 04 00 +T 24 00 00 00 00 00 00 00 38 03 +R 00 00 01 00 02 04 0B 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 C3 66 01 00 00 +R 00 00 01 00 00 05 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 6E 02 DD 66 03 29 ED 4B +R 00 00 01 00 +T 34 00 00 00 00 00 00 00 09 46 23 66 68 C3 +R 00 00 01 00 00 04 04 00 +T 3C 00 00 00 8C 01 00 00 +R 00 00 01 00 00 04 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 DD 4E 02 DD 46 03 21 00 00 CD +R 00 00 01 00 +T 48 00 00 00 00 00 00 00 38 03 +R 00 00 01 00 02 04 0B 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 C3 66 01 00 00 +R 00 00 01 00 00 05 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 21 00 00 E5 21 00 00 00 00 E5 CD +R 00 00 01 00 00 09 02 00 +T 58 00 00 00 00 00 00 00 F1 F1 DD 75 FA DD 74 +R 00 00 01 00 02 04 0C 00 +T 61 00 00 00 FB CB 7C 28 03 +R 00 00 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 C3 66 01 00 00 +R 00 00 01 00 00 05 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 21 80 00 E5 21 04 00 39 4D 44 DD +R 00 00 01 00 +T 74 00 00 00 5E FA DD 56 FB CD 00 00 00 00 F1 +R 00 00 01 00 02 0A 05 00 +T 7D 00 00 00 DD 75 F8 DD 74 F9 4D 44 21 00 00 +R 00 00 01 00 +T 88 00 00 00 CD 00 00 00 00 D2 66 01 00 00 +R 00 00 01 00 02 05 0B 00 00 0A 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 DD 4E F8 DD 46 F9 DD 6E FC DD 66 +R 00 00 01 00 +T A0 00 00 00 FD A7 ED 42 D2 63 01 00 00 +R 00 00 01 00 00 09 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 21 02 00 39 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T B2 00 00 00 7E FE 0A 20 74 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 21 00 00 00 00 DD 4E FE DD 46 FF +R 00 00 01 00 00 05 03 00 +T C0 00 00 00 09 36 00 11 00 00 00 00 CD +R 00 00 01 00 00 08 03 00 +T C7 00 00 00 00 00 00 00 DD 4E 02 DD 46 03 A7 +R 00 00 01 00 02 04 0A 00 +T D0 00 00 00 ED 42 20 4E +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 21 00 00 39 E5 01 20 00 11 +R 00 00 01 00 +T DD 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 00 04 03 00 02 09 01 00 +T E4 00 00 00 E1 71 23 70 79 B0 20 0B +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 DD 5E FA DD 56 FB CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T F5 00 00 00 18 6F +R 00 00 01 00 +T F7 00 00 00 +R 00 00 01 00 +T F7 00 00 00 +R 00 00 01 00 +T F7 00 00 00 21 00 00 39 7E 23 66 6F 7E FE 20 +R 00 00 01 00 +T 02 01 00 00 20 0B +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 21 00 00 39 34 23 20 01 34 +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 18 E8 +R 00 00 01 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 DD 5E FA DD 56 FB CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 18 01 00 00 21 00 00 39 46 23 66 68 18 6A +R 00 00 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 AF DD 77 FE DD 77 FF 18 2D +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 01 4F 00 DD 6E FE DD 66 FF A7 ED +R 00 00 01 00 +T 36 01 00 00 42 30 1F +R 00 00 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 21 02 00 39 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T 44 01 00 00 46 DD 6E FE DD 66 FF 23 DD 75 FE +R 00 00 01 00 +T 4F 01 00 00 DD 74 FF 2B 11 00 00 00 00 19 70 +R 00 00 01 00 00 09 03 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 C3 95 00 00 00 +R 00 00 01 00 00 05 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 C3 69 00 00 00 +R 00 00 01 00 00 05 01 00 +T 66 01 00 00 +R 00 00 01 00 +T 66 01 00 00 +R 00 00 01 00 +T 66 01 00 00 01 12 00 00 00 11 00 00 00 00 CD +R 00 00 01 00 00 05 02 00 00 0A 03 00 +T 6D 01 00 00 00 00 00 00 21 0A 00 E5 11 +R 00 00 01 00 02 04 07 00 +T 74 01 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 00 04 03 00 02 09 03 00 +T 7A 01 00 00 00 00 00 00 09 4D 44 DD 5E 02 DD +R 00 00 01 00 00 04 03 00 +T 83 01 00 00 56 03 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 07 09 00 +T 8A 01 00 00 00 00 00 00 +R 00 00 01 00 00 04 03 00 +T 8C 01 00 00 +R 00 00 01 00 +T 8C 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 6C 69 62 2F 6C 69 62 65 72 72 +R 00 00 02 00 +T 0B 00 00 00 6F 72 2E 74 78 74 00 +R 00 00 02 00 +T 12 00 00 00 +R 00 00 02 00 +T 12 00 00 00 55 6E 6B 6E 6F 77 6E 20 65 72 72 +R 00 00 02 00 +T 1D 00 00 00 6F 72 20 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 00 00 +R 00 00 05 00 diff --git a/src/nos/lib/crt_large_lib/etime.rel b/src/nos/lib/crt_large_lib/etime.rel new file mode 100644 index 00000000..93aa0676 --- /dev/null +++ b/src/nos/lib/crt_large_lib/etime.rel @@ -0,0 +1,110 @@ +XL4 +H 3 areas D global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?SS_MODASG_L02 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?US_MOD_L02 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12B flags 0 +S _etime Def00000000 +S _dout Def0000008E +S _ediff Def000000C8 +A UDATA0 size 1A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 02 00 00 00 22 +R 00 00 01 00 02 05 04 00 00 0A 02 00 +T 07 00 00 00 00 00 00 00 13 13 EB 5E 23 56 01 +R 00 00 01 00 00 04 02 00 +T 10 00 00 00 3C 00 CD 00 00 00 00 CD +R 00 00 01 00 02 07 09 00 +T 16 00 00 00 8E 00 00 00 2A 00 00 00 00 23 22 +R 00 00 01 00 00 04 01 00 00 09 02 00 +T 1D 00 00 00 00 00 00 00 2B 36 3A DD 6E 02 DD +R 00 00 01 00 00 04 02 00 +T 26 00 00 00 66 03 23 23 5E 23 56 01 3C 00 CD +R 00 00 01 00 +T 31 00 00 00 00 00 00 00 CD 8E 00 00 00 2A +R 00 00 01 00 02 04 07 00 00 09 01 00 +T 37 00 00 00 00 00 00 00 23 22 00 00 00 00 2B +R 00 00 01 00 00 04 02 00 00 0A 02 00 +T 3E 00 00 00 36 3A DD 6E 02 DD 66 03 5E 23 56 +R 00 00 01 00 +T 49 00 00 00 01 32 00 CD 00 00 00 00 CD +R 00 00 01 00 02 08 09 00 +T 50 00 00 00 8E 00 00 00 2A 00 00 00 00 23 22 +R 00 00 01 00 00 04 01 00 00 09 02 00 +T 57 00 00 00 00 00 00 00 2B 36 2E DD 6E 02 DD +R 00 00 01 00 00 04 02 00 +T 60 00 00 00 66 03 5E 23 56 01 32 00 CD +R 00 00 01 00 +T 69 00 00 00 00 00 00 00 01 0A 00 CD +R 00 00 01 00 02 04 07 00 +T 6F 00 00 00 00 00 00 00 01 32 00 CD +R 00 00 01 00 02 04 05 00 +T 75 00 00 00 00 00 00 00 7B C6 30 2A +R 00 00 01 00 02 04 09 00 +T 7B 00 00 00 00 00 00 00 23 22 00 00 00 00 2B +R 00 00 01 00 00 04 02 00 00 0A 02 00 +T 82 00 00 00 77 2A 00 00 00 00 36 00 21 +R 00 00 01 00 00 06 02 00 +T 89 00 00 00 02 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 04 02 00 02 09 02 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 CD 00 00 00 00 21 02 00 39 01 +R 00 00 01 00 02 05 04 00 +T 96 00 00 00 64 00 CD 00 00 00 00 01 0A 00 CD +R 00 00 01 00 02 07 01 00 +T 9F 00 00 00 00 00 00 00 7B C6 30 2A +R 00 00 01 00 02 04 08 00 +T A5 00 00 00 00 00 00 00 23 22 00 00 00 00 2B +R 00 00 01 00 00 04 02 00 00 0A 02 00 +T AC 00 00 00 77 01 0A 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T B7 00 00 00 00 00 00 00 7B C6 30 2A +R 00 00 01 00 02 04 06 00 +T BD 00 00 00 00 00 00 00 23 22 00 00 00 00 2B +R 00 00 01 00 00 04 02 00 00 0A 02 00 +T C4 00 00 00 77 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 CD 00 00 00 00 69 60 4E 23 46 1A +R 00 00 01 00 02 05 04 00 +T D1 00 00 00 6F 13 1A 67 A7 ED 42 30 1E +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T E5 00 00 00 0B 70 2B 71 DD 6E 02 DD 66 03 7E +R 00 00 01 00 +T F0 00 00 00 C6 B8 77 23 7E CE 0B 77 +R 00 00 01 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 03 01 00 00 DD 6E 02 DD 66 03 23 23 7E 91 77 +R 00 00 01 00 +T 0E 01 00 00 23 7E 98 77 DD 6E 04 DD 66 05 4E +R 00 00 01 00 +T 19 01 00 00 23 46 DD 6E 02 DD 66 03 7E 91 77 +R 00 00 01 00 +T 24 01 00 00 23 7E 98 77 C3 00 00 00 00 +R 00 00 01 00 02 09 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/execl.rel b/src/nos/lib/crt_large_lib/execl.rel new file mode 100644 index 00000000..60a723f7 --- /dev/null +++ b/src/nos/lib/crt_large_lib/execl.rel @@ -0,0 +1,187 @@ +XL4 +H 4 areas D global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _execve Ref00000000 +S _environ Ref00000000 +S _getenv Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _access Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13A flags 0 +S __findPath Def00000000 +S _execl Def00000120 +A CSTR size 29 flags 0 +A UDATA0 size 101 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 66 03 7E FE 2F 28 0B DD 6E 02 DD +R 00 00 01 00 +T 14 00 00 00 66 03 7E FE 2E 20 09 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 6E 02 DD 66 03 C3 1D 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 11 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 00 05 02 00 02 0A 03 00 +T 2B 00 00 00 75 FE DD 74 FF 7D B4 20 08 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 36 FE 05 00 00 00 DD 36 FF +R 00 00 01 00 09 07 02 00 +T 3B 00 00 00 05 00 00 00 +R 00 00 01 00 89 04 02 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 DD 6E FE DD 66 FF AF B6 CA +R 00 00 01 00 +T 45 00 00 00 05 01 00 00 +R 00 00 01 00 00 04 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 36 FC 00 00 00 00 DD 36 FD +R 00 00 01 00 09 07 03 00 +T 4E 00 00 00 00 00 00 00 +R 00 00 01 00 89 04 03 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 DD 6E FE DD 66 FF AF B6 28 3B DD +R 00 00 01 00 +T 5A 00 00 00 6E FE DD 66 FF 23 DD 75 FE DD 74 +R 00 00 01 00 +T 65 00 00 00 FF 2B 46 DD 6E FC DD 66 FD 70 78 +R 00 00 01 00 +T 70 00 00 00 FE 3A 28 20 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 01 00 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 00 05 03 00 +T 7D 00 00 00 A7 ED 42 01 01 01 A7 ED 42 38 02 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 18 0A +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 18 BB +R 00 00 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 DD 6E FC DD 66 FD 2B DD 75 FC DD +R 00 00 01 00 +T 9F 00 00 00 74 FD 7E FE 2F 28 0F +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T B1 00 00 00 74 FD 36 2F +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 01 00 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 00 05 03 00 +T C6 00 00 00 A7 ED 42 E5 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T D1 00 00 00 00 00 00 00 4D 44 E1 09 01 01 01 +R 00 00 01 00 02 04 04 00 +T DA 00 00 00 A7 ED 42 38 02 +R 00 00 01 00 +T DF 00 00 00 +R 00 00 01 00 +T DF 00 00 00 18 24 +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 DD 4E 02 DD 46 03 DD 5E FC DD 56 +R 00 00 01 00 +T EC 00 00 00 FD CD 00 00 00 00 01 00 00 11 +R 00 00 01 00 02 06 08 00 +T F4 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 00 04 03 00 02 09 0A 00 +T FB 00 00 00 20 05 +R 00 00 01 00 +T FD 00 00 00 +R 00 00 01 00 +T FD 00 00 00 21 00 00 00 00 18 1B +R 00 00 01 00 00 05 03 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 C3 3C 00 00 00 +R 00 00 01 00 00 05 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 01 00 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 0F 01 00 00 00 00 00 00 7D B4 20 05 +R 00 00 01 00 02 04 0A 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 21 00 00 00 00 18 03 +R 00 00 01 00 00 05 03 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 21 00 00 +R 00 00 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 CD 00 00 00 00 2A 00 00 00 00 E5 +R 00 00 01 00 02 05 07 00 02 0A 02 00 +T 27 01 00 00 21 0C 00 39 4D 44 DD 5E 08 DD 56 +R 00 00 01 00 +T 32 01 00 00 09 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 06 01 00 +T 38 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 50 41 54 48 00 +R 00 00 02 00 +T 05 00 00 00 +R 00 00 02 00 +T 05 00 00 00 2E 3A 2F 62 69 6E 3A 2F 75 73 72 +R 00 00 02 00 +T 10 00 00 00 2F 62 69 6E 3A 2F 65 74 63 3A 2F +R 00 00 02 00 +T 1B 00 00 00 75 73 72 2F 6C 6F 63 61 6C 2F 62 +R 00 00 02 00 +T 26 00 00 00 69 6E 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/execle.rel b/src/nos/lib/crt_large_lib/execle.rel new file mode 100644 index 00000000..ff98c8d3 --- /dev/null +++ b/src/nos/lib/crt_large_lib/execle.rel @@ -0,0 +1,34 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _execve Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 43 flags 0 +S _execle Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0C 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 DD 6E FE DD 66 FF 4D 44 03 03 DD +R 00 00 01 00 +T 1A 00 00 00 71 FE DD 70 FF 7E 23 B6 28 02 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 18 E9 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 6E FE DD 66 FF 4E 23 46 C5 21 +R 00 00 01 00 +T 31 00 00 00 0E 00 39 4D 44 DD 5E 08 DD 56 09 +R 00 00 01 00 +T 3C 00 00 00 CD 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_large_lib/execlp.rel b/src/nos/lib/crt_large_lib/execlp.rel new file mode 100644 index 00000000..20d90760 --- /dev/null +++ b/src/nos/lib/crt_large_lib/execlp.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _execve Ref00000000 +S _environ Ref00000000 +S __findPath Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1E flags 0 +S _execlp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 2A 00 00 00 00 E5 +R 00 00 01 00 02 05 06 00 02 0A 02 00 +T 07 00 00 00 21 0C 00 39 4D 44 DD 5E 08 DD 56 +R 00 00 01 00 +T 12 00 00 00 09 CD 00 00 00 00 EB CD +R 00 00 01 00 02 06 03 00 +T 18 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0A 04 00 diff --git a/src/nos/lib/crt_large_lib/execlpe.rel b/src/nos/lib/crt_large_lib/execlpe.rel new file mode 100644 index 00000000..a8c8afcd --- /dev/null +++ b/src/nos/lib/crt_large_lib/execlpe.rel @@ -0,0 +1,37 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _execve Ref00000000 +S __findPath Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 47 flags 0 +S _execlpe Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0C 00 39 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 DD 6E FE DD 66 FF 4D 44 03 03 DD +R 00 00 01 00 +T 1A 00 00 00 71 FE DD 70 FF 7E 23 B6 28 02 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 18 E9 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 6E FE DD 66 FF 4E 23 46 C5 21 +R 00 00 01 00 +T 31 00 00 00 0E 00 39 4D 44 DD 5E 08 DD 56 09 +R 00 00 01 00 +T 3C 00 00 00 CD 00 00 00 00 EB CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0B 01 00 +T 43 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 03 00 diff --git a/src/nos/lib/crt_large_lib/exect.rel b/src/nos/lib/crt_large_lib/exect.rel new file mode 100644 index 00000000..2d93c76a --- /dev/null +++ b/src/nos/lib/crt_large_lib/exect.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _execve Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S _exect Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 08 DD 66 09 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 E5 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 06 01 00 +T 0F 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/crt_large_lib/execv.rel b/src/nos/lib/crt_large_lib/execv.rel new file mode 100644 index 00000000..da9bd918 --- /dev/null +++ b/src/nos/lib/crt_large_lib/execv.rel @@ -0,0 +1,17 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _execve Ref00000000 +S _environ Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E flags 0 +S _execv Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 2A 00 00 00 00 E5 +R 00 00 01 00 02 05 05 00 02 0A 02 00 +T 07 00 00 00 CD 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0B 03 00 diff --git a/src/nos/lib/crt_large_lib/execvp.rel b/src/nos/lib/crt_large_lib/execvp.rel new file mode 100644 index 00000000..5b10fca5 --- /dev/null +++ b/src/nos/lib/crt_large_lib/execvp.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _execve Ref00000000 +S _environ Ref00000000 +S __findPath Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S _execvp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 2A 00 00 00 00 E5 +R 00 00 01 00 02 05 06 00 02 0A 02 00 +T 07 00 00 00 CD 00 00 00 00 EB CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 01 00 +T 0E 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 04 00 diff --git a/src/nos/lib/crt_large_lib/execvpe.rel b/src/nos/lib/crt_large_lib/execvpe.rel new file mode 100644 index 00000000..7f4fc9b2 --- /dev/null +++ b/src/nos/lib/crt_large_lib/execvpe.rel @@ -0,0 +1,19 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _execve Ref00000000 +S __findPath Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S _execvpe Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 08 DD 66 09 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 E5 CD 00 00 00 00 EB CD +R 00 00 01 00 02 06 02 00 +T 0F 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0A 03 00 diff --git a/src/nos/lib/crt_large_lib/exit.rel b/src/nos/lib/crt_large_lib/exit.rel new file mode 100644 index 00000000..62cc9683 --- /dev/null +++ b/src/nos/lib/crt_large_lib/exit.rel @@ -0,0 +1,30 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S __exit Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___cleanup Ref00000000 +S ?CALL_IND_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S _exit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 2A 00 00 00 00 7D +R 00 00 01 00 02 05 04 00 02 0A 05 00 +T 07 00 00 00 B4 28 0F +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 01 00 00 DD 5E 02 DD 56 03 2A +R 00 00 01 00 +T 14 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 09 06 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 22 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/fclose.rel b/src/nos/lib/crt_large_lib/fclose.rel new file mode 100644 index 00000000..8d3ce2ed --- /dev/null +++ b/src/nos/lib/crt_large_lib/fclose.rel @@ -0,0 +1,144 @@ +XL4 +H 2 areas A global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fflush Ref00000000 +S _close Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___IO_list Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15D flags 0 +S _fclose Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 DD 77 FB DD 7E 02 DD B6 03 20 0C +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 06 00 +T 1D 00 00 00 C3 5A 01 00 00 +R 00 00 01 00 00 05 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 29 00 00 00 7D B4 28 06 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 FF FF C3 5A 01 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 3E 00 00 00 23 56 CD 00 00 00 00 7D B4 28 08 +R 00 00 01 00 02 07 02 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 36 FA FF DD 36 FB FF +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 5A 00 00 00 FF 23 36 FF 21 0C 00 09 7E E6 04 +R 00 00 01 00 +T 65 00 00 00 28 2F +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 72 00 00 00 23 56 CD 00 00 00 00 21 0C 00 09 +R 00 00 01 00 02 07 05 00 +T 7B 00 00 00 7E E6 FB 77 23 7E E6 FF 77 21 +R 00 00 01 00 +T 85 00 00 00 06 00 09 E5 21 08 00 09 AF 77 23 +R 00 00 01 00 +T 90 00 00 00 77 E1 AF 77 23 77 +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T A1 00 00 00 E6 08 CA 46 01 00 00 +R 00 00 01 00 00 07 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 2A 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 08 00 +T AF 00 00 00 AF DD 77 FE DD 77 FF 21 0C 00 DD +R 00 00 01 00 +T BA 00 00 00 4E 02 DD 46 03 09 AF 77 23 77 +R 00 00 01 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 DD 7E FC DD B6 FD 28 27 DD 6E 02 +R 00 00 01 00 +T CF 00 00 00 DD 66 03 DD 4E FC DD 46 FD A7 ED +R 00 00 01 00 +T DA 00 00 00 42 28 16 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 21 16 00 DD 4E FC DD 46 FD 09 56 +R 00 00 01 00 +T E8 00 00 00 23 66 6A DD 75 FC DD 74 FD 18 D1 +R 00 00 01 00 +T F3 00 00 00 +R 00 00 01 00 +T F3 00 00 00 DD 6E 02 DD 66 03 DD 4E FC DD 46 +R 00 00 01 00 +T FE 00 00 00 FD A7 ED 42 20 37 +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 DD 7E FE DD B6 FF 20 13 +R 00 00 01 00 +T 0C 01 00 00 +R 00 00 01 00 +T 0C 01 00 00 21 16 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 17 01 00 00 23 66 68 22 00 00 00 00 18 1C +R 00 00 01 00 02 08 08 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 21 16 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 2A 01 00 00 21 16 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 35 01 00 00 23 46 E1 71 23 70 +R 00 00 01 00 +T 3B 01 00 00 +R 00 00 01 00 +T 3B 01 00 00 +R 00 00 01 00 +T 3B 01 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 44 01 00 00 18 0E +R 00 00 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 AF +R 00 00 01 00 +T 51 01 00 00 77 23 77 +R 00 00 01 00 +T 54 01 00 00 +R 00 00 01 00 +T 54 01 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_large_lib/fflush.rel b/src/nos/lib/crt_large_lib/fflush.rel new file mode 100644 index 00000000..da5bba30 --- /dev/null +++ b/src/nos/lib/crt_large_lib/fflush.rel @@ -0,0 +1,195 @@ +XL4 +H 2 areas D global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _stderr Ref00000000 +S _lseek Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _stdin Ref00000000 +S _stdout Ref00000000 +S _errno Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ___IO_list Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F5 flags 0 +S _fflush Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 FE +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 DD 77 FF DD 7E 02 DD B6 03 20 64 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 11 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 05 00 00 0A 01 00 +T 1B 00 00 00 B4 20 14 11 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T 22 00 00 00 00 00 00 00 7D B4 20 0A 11 +R 00 00 01 00 00 04 01 00 +T 29 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T 30 00 00 00 28 06 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 FF FF C3 F2 01 00 00 +R 00 00 01 00 00 08 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 2A 00 00 00 00 DD 75 02 DD 74 03 +R 00 00 01 00 02 05 0B 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 7E 02 DD B6 03 28 29 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 52 00 00 00 7D B4 28 06 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 21 FF FF C3 F2 01 00 00 +R 00 00 01 00 00 08 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 21 16 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 67 00 00 00 23 66 6A DD 75 02 DD 74 03 18 CF +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 21 00 00 C3 F2 01 00 00 +R 00 00 01 00 00 08 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 83 00 00 00 E6 80 CA 4D 01 00 00 +R 00 00 01 00 00 07 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 93 00 00 00 23 56 0A 6F 03 0A 67 A7 ED 52 DD +R 00 00 01 00 +T 9E 00 00 00 75 FA DD 74 FB 7D B4 CA +R 00 00 01 00 +T A6 00 00 00 4B 01 00 00 +R 00 00 01 00 00 04 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T B3 00 00 00 23 66 68 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 DD 6E FA DD 66 FB E5 DD 4E F8 DD +R 00 00 01 00 +T C7 00 00 00 46 F9 21 0A 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T D2 00 00 00 19 5E 23 56 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 09 08 00 +T DB 00 00 00 75 FC DD 74 FD 4D 44 21 00 00 CD +R 00 00 01 00 +T E6 00 00 00 00 00 00 00 30 1E +R 00 00 01 00 02 04 0A 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 21 00 00 39 7E DD 86 FC 77 23 7E +R 00 00 01 00 +T F5 00 00 00 DD 8E FD 77 21 02 00 39 7E DD 96 +R 00 00 01 00 +T 00 01 00 00 FC 77 23 7E DD 9E FD 77 +R 00 00 01 00 +T 08 01 00 00 +R 00 00 01 00 +T 08 01 00 00 DD 4E FC DD 46 FD 21 00 00 CD +R 00 00 01 00 +T 12 01 00 00 00 00 00 00 38 A6 DD 7E FC DD A6 +R 00 00 01 00 02 04 0A 00 +T 1B 01 00 00 FD 3C 20 09 2A 00 00 00 00 3E 04 +R 00 00 01 00 02 09 07 00 +T 24 01 00 00 AD B4 28 94 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 DD 7E FA DD B6 FB 28 1B +R 00 00 01 00 +T 30 01 00 00 +R 00 00 01 00 +T 30 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 3B 01 00 00 F6 00 77 23 7E F6 02 77 DD 36 FE +R 00 00 01 00 +T 46 01 00 00 FF DD 36 FF FF +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 18 65 +R 00 00 01 00 +T 4D 01 00 00 +R 00 00 01 00 +T 4D 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 58 01 00 00 E6 40 28 56 +R 00 00 01 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 DD 6E 02 DD 66 03 4E 23 46 DD 6E +R 00 00 01 00 +T 67 01 00 00 02 DD 66 03 23 23 56 23 66 6A A7 +R 00 00 01 00 +T 72 01 00 00 ED 42 DD 75 FA DD 74 FB 4D 44 21 +R 00 00 01 00 +T 7D 01 00 00 00 00 CD 00 00 00 00 30 2E 21 +R 00 00 01 00 02 07 0A 00 +T 85 01 00 00 01 00 E5 DD 4E FA DD 46 FB A7 21 +R 00 00 01 00 +T 90 01 00 00 00 00 ED 42 7C 07 9F 4F 41 C5 E5 +R 00 00 01 00 +T 9B 01 00 00 21 0A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T A6 01 00 00 23 56 CD 00 00 00 00 F1 F1 F1 CB +R 00 00 01 00 02 07 02 00 +T AF 01 00 00 78 28 00 +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T BD 01 00 00 E6 3F 77 23 7E E6 FA 77 69 60 23 +R 00 00 01 00 +T C8 01 00 00 23 E5 21 04 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T D3 01 00 00 09 E5 21 06 00 09 56 23 66 6A E5 +R 00 00 01 00 +T DE 01 00 00 69 60 C1 71 23 70 E1 71 23 70 E1 +R 00 00 01 00 +T E9 01 00 00 71 23 70 DD 6E FE DD 66 FF +R 00 00 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_large_lib/fgetc.rel b/src/nos/lib/crt_large_lib/fgetc.rel new file mode 100644 index 00000000..798929b0 --- /dev/null +++ b/src/nos/lib/crt_large_lib/fgetc.rel @@ -0,0 +1,89 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fread Ref00000000 +S _fflush Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 106 flags 0 +S _fgetc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0C 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 7E E6 80 28 09 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 28 00 00 00 E6 10 4F 23 7E E6 03 47 3E 10 A9 +R 00 00 01 00 +T 33 00 00 00 B0 28 06 +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 21 FF FF C3 03 01 00 00 +R 00 00 01 00 00 08 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 47 00 00 00 DD 6E 02 DD 66 03 56 23 66 6A A7 +R 00 00 01 00 +T 52 00 00 00 ED 42 DA E9 00 00 00 +R 00 00 01 00 00 07 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 6E 02 DD 66 03 23 23 E5 21 +R 00 00 01 00 +T 61 00 00 00 06 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 6C 00 00 00 56 E1 73 23 72 69 60 73 23 72 DD +R 00 00 01 00 +T 77 00 00 00 6E 02 DD 66 03 E5 21 06 00 DD 4E +R 00 00 01 00 +T 82 00 00 00 02 DD 46 03 09 5E 23 56 21 08 00 +R 00 00 01 00 +T 8D 00 00 00 09 7E 23 66 6F A7 ED 52 E5 01 +R 00 00 01 00 +T 97 00 00 00 01 00 DD 6E 02 DD 66 03 5E 23 56 +R 00 00 01 00 +T A2 00 00 00 CD 00 00 00 00 F1 F1 DD 75 FE DD +R 00 00 01 00 02 05 01 00 +T AB 00 00 00 74 FF 7D B4 20 05 +R 00 00 01 00 +T B1 00 00 00 +R 00 00 01 00 +T B1 00 00 00 21 FF FF 18 4D +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 DD 6E 02 DD 66 03 23 23 7E DD 86 +R 00 00 01 00 +T C1 00 00 00 FE 77 23 7E DD 8E FF 77 21 0C 00 +R 00 00 01 00 +T CC 00 00 00 DD 4E 02 DD 46 03 09 7E F6 40 77 +R 00 00 01 00 +T D7 00 00 00 23 7E F6 00 77 21 0C 00 09 7E E6 +R 00 00 01 00 +T E2 00 00 00 FF 77 23 7E E6 FB 77 +R 00 00 01 00 +T E9 00 00 00 +R 00 00 01 00 +T E9 00 00 00 DD 6E 02 DD 66 03 4E 23 46 03 70 +R 00 00 01 00 +T F4 00 00 00 2B 71 0B 0A 4F 06 00 DD 71 FE DD +R 00 00 01 00 +T FF 00 00 00 70 FF 69 60 +R 00 00 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_large_lib/fgetgren.rel b/src/nos/lib/crt_large_lib/fgetgren.rel new file mode 100644 index 00000000..09f97136 --- /dev/null +++ b/src/nos/lib/crt_large_lib/fgetgren.rel @@ -0,0 +1,31 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___getgrent Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S _fgetgrent Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 20 0B +R 00 00 01 00 02 05 04 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 21 04 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 05 00 +T 10 00 00 00 18 10 +R 00 00 01 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1D 00 00 00 23 56 CD 00 00 00 00 +R 00 00 01 00 02 07 02 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/fgetpwen.rel b/src/nos/lib/crt_large_lib/fgetpwen.rel new file mode 100644 index 00000000..c930ea13 --- /dev/null +++ b/src/nos/lib/crt_large_lib/fgetpwen.rel @@ -0,0 +1,31 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S ___getpwent Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S _fgetpwent Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 20 0B +R 00 00 01 00 02 05 03 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 21 04 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 04 00 +T 10 00 00 00 18 10 +R 00 00 01 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1D 00 00 00 23 56 CD 00 00 00 00 +R 00 00 01 00 02 07 05 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/fgets.rel b/src/nos/lib/crt_large_lib/fgets.rel new file mode 100644 index 00000000..0ea415eb --- /dev/null +++ b/src/nos/lib/crt_large_lib/fgets.rel @@ -0,0 +1,80 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fgetc Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A0 flags 0 +S _fgets Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 71 FA DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 70 FB DD 6E 02 DD 66 03 DD 75 FE +R 00 00 01 00 +T 14 00 00 00 DD 74 FF +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E FA DD 66 FB 2B DD 75 FA DD +R 00 00 01 00 +T 22 00 00 00 74 FB 23 7D B4 28 4C +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 5E 08 DD 56 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 32 00 00 00 DD 75 FC DD 74 FD 7D A4 3C 20 18 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 DD 6E FE DD 66 FF DD 4E 02 DD 46 +R 00 00 01 00 +T 48 00 00 00 03 A7 ED 42 20 05 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 21 00 00 18 4A +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 18 20 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 46 FC DD 6E 02 DD 66 03 23 DD +R 00 00 01 00 +T 60 00 00 00 75 02 DD 74 03 2B 70 3E 0A DD AE +R 00 00 01 00 +T 6B 00 00 00 FC DD B6 FD 20 02 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 18 02 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 18 A2 +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 6E 02 DD 66 03 36 00 21 0C 00 +R 00 00 01 00 +T 80 00 00 00 DD 4E 08 DD 46 09 09 7E E6 00 47 +R 00 00 01 00 +T 8B 00 00 00 23 7E E6 02 B0 28 05 21 00 00 18 +R 00 00 01 00 +T 96 00 00 00 06 +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/fopen.rel b/src/nos/lib/crt_large_lib/fopen.rel new file mode 100644 index 00000000..6186bc0c --- /dev/null +++ b/src/nos/lib/crt_large_lib/fopen.rel @@ -0,0 +1,241 @@ +XL4 +H 2 areas D global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _isatty Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S ___IO_list Ref00000000 +S _open Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29B flags 0 +S ___fopen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FB AF DD 77 FC DD 77 FD AF +R 00 00 01 00 +T 14 00 00 00 DD 77 FE DD 77 FF DD 7E 08 DD B6 +R 00 00 01 00 +T 1F 00 00 00 09 28 30 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 0C 00 DD 4E 08 DD 46 09 09 7E +R 00 00 01 00 +T 2D 00 00 00 E6 0F 5F 23 7E E6 00 57 21 02 00 +R 00 00 01 00 +T 38 00 00 00 39 7E B3 77 23 7E B2 77 21 0C 00 +R 00 00 01 00 +T 43 00 00 00 09 7E E6 F3 77 23 7E E6 FF 77 59 +R 00 00 01 00 +T 4E 00 00 00 50 CD 00 00 00 00 +R 00 00 01 00 02 06 0B 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 6E 0A DD 66 0B AF B6 28 70 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 6E 0A DD 66 0B 23 DD 75 0A DD +R 00 00 01 00 +T 67 00 00 00 74 0B 2B 5E CD 00 00 00 00 04 00 +R 00 00 01 00 02 09 0A 00 +T 70 00 00 00 2B 61 72 77 CA 00 00 00 +R 00 00 01 00 00 08 01 00 +T 76 00 00 00 8D 00 00 00 7E 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7A 00 00 00 A4 00 00 00 BB 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 21 02 00 39 7E F6 10 77 23 7E F6 +R 00 00 01 00 +T 89 00 00 00 00 77 18 3D +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T 98 00 00 00 00 77 DD 36 FA 00 DD 36 FB 03 18 +R 00 00 01 00 +T A3 00 00 00 26 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 21 02 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T AF 00 00 00 00 77 DD 36 FA 00 DD 36 FB 21 18 +R 00 00 01 00 +T BA 00 00 00 0F +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 21 02 00 39 7E F6 30 77 23 7E F6 +R 00 00 01 00 +T C6 00 00 00 00 77 18 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 18 86 +R 00 00 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 DD 7E FC E6 30 4F DD 7E FD E6 00 +R 00 00 01 00 +T D7 00 00 00 47 79 B0 20 06 +R 00 00 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 21 00 00 C3 98 02 00 00 +R 00 00 01 00 00 08 01 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 3E 10 A9 B0 20 02 18 24 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 3E 20 A9 B0 20 0F 21 00 00 39 7E +R 00 00 01 00 +T F5 00 00 00 F6 01 77 23 7E F6 00 77 18 0F +R 00 00 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 21 00 00 39 7E F6 02 77 23 7E F6 +R 00 00 01 00 +T 0A 01 00 00 00 77 18 00 +R 00 00 01 00 +T 0E 01 00 00 +R 00 00 01 00 +T 0E 01 00 00 DD 7E 08 DD B6 09 20 19 01 18 00 +R 00 00 01 00 +T 19 01 00 00 11 01 00 CD 00 00 00 00 DD 75 FE +R 00 00 01 00 02 08 07 00 +T 22 01 00 00 DD 74 FF 7D B4 20 06 +R 00 00 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 21 00 00 C3 98 02 00 00 +R 00 00 01 00 00 08 01 00 +T 2F 01 00 00 +R 00 00 01 00 +T 2F 01 00 00 DD 7E 02 DD B6 03 28 1E +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 21 B6 01 E5 DD 6E FA DD 66 FB E5 +R 00 00 01 00 +T 42 01 00 00 DD 6E 02 DD 66 03 E5 CD +R 00 00 01 00 +T 4A 01 00 00 00 00 00 00 F1 F1 F1 DD 75 04 DD +R 00 00 01 00 02 04 09 00 +T 53 01 00 00 74 05 +R 00 00 01 00 +T 55 01 00 00 +R 00 00 01 00 +T 55 01 00 00 DD CB 05 7E 28 29 +R 00 00 01 00 +T 5B 01 00 00 +R 00 00 01 00 +T 5B 01 00 00 2A 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 05 00 +T 64 01 00 00 DD 7E FE DD B6 FF 28 09 +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 75 01 00 00 +R 00 00 01 00 +T 75 01 00 00 DD 6E FA DD 66 FB 22 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 7E 01 00 00 21 00 00 C3 98 02 00 00 +R 00 00 01 00 00 08 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 DD 7E 08 DD B6 09 C2 4C 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 DD 6E FE DD 66 FF DD 75 08 DD 74 +R 00 00 01 00 +T 98 01 00 00 09 01 16 00 09 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T A1 01 00 00 71 23 70 DD 6E 08 DD 66 09 22 +R 00 00 01 00 +T AB 01 00 00 00 00 00 00 21 0C 00 DD 4E 08 DD +R 00 00 01 00 02 04 08 00 +T B4 01 00 00 46 09 09 36 08 23 36 00 DD 5E 04 +R 00 00 01 00 +T BF 01 00 00 DD 56 05 CD 00 00 00 00 7D B4 28 +R 00 00 01 00 02 08 02 00 +T C8 01 00 00 13 +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 21 0C 00 DD 4E 08 DD 46 09 09 7E +R 00 00 01 00 +T D4 01 00 00 F6 01 77 23 7E F6 00 77 +R 00 00 01 00 +T DC 01 00 00 +R 00 00 01 00 +T DC 01 00 00 21 06 00 DD 4E 08 DD 46 09 09 E5 +R 00 00 01 00 +T E7 01 00 00 01 00 02 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T F0 01 00 00 4D 44 E1 71 23 70 79 B0 20 29 +R 00 00 01 00 +T FA 01 00 00 +R 00 00 01 00 +T FA 01 00 00 21 06 00 DD 4E 08 DD 46 09 09 E5 +R 00 00 01 00 +T 05 02 00 00 21 0E 00 09 EB E1 73 23 72 21 +R 00 00 01 00 +T 0F 02 00 00 08 00 09 E5 21 0E 00 09 01 08 00 +R 00 00 01 00 +T 1A 02 00 00 09 4D 44 E1 71 23 70 18 29 +R 00 00 01 00 +T 23 02 00 00 +R 00 00 01 00 +T 23 02 00 00 21 08 00 DD 4E 08 DD 46 09 09 E5 +R 00 00 01 00 +T 2E 02 00 00 21 06 00 09 56 23 66 6A 3E 02 84 +R 00 00 01 00 +T 39 02 00 00 67 EB E1 73 23 72 21 0C 00 09 7E +R 00 00 01 00 +T 44 02 00 00 F6 04 77 23 7E F6 00 77 +R 00 00 01 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 DD 6E 08 DD 66 09 23 23 E5 21 +R 00 00 01 00 +T 56 02 00 00 04 00 DD 4E 08 DD 46 09 09 E5 21 +R 00 00 01 00 +T 61 02 00 00 06 00 09 5E 23 56 E1 73 23 72 E1 +R 00 00 01 00 +T 6C 02 00 00 73 23 72 69 60 73 23 72 21 0C 00 +R 00 00 01 00 +T 77 02 00 00 DD 4E 08 DD 46 09 09 7E DD B6 FC +R 00 00 01 00 +T 82 02 00 00 77 23 7E DD B6 FD 77 21 0A 00 09 +R 00 00 01 00 +T 8D 02 00 00 DD 5E 04 DD 56 05 73 23 72 69 60 +R 00 00 01 00 +T 98 02 00 00 +R 00 00 01 00 +T 98 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/fprintf.rel b/src/nos/lib/crt_large_lib/fprintf.rel new file mode 100644 index 00000000..2fcc6df7 --- /dev/null +++ b/src/nos/lib/crt_large_lib/fprintf.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ___fputter Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___vprinter Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S _fprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0E 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 08 DD +R 00 00 01 00 +T 1F 00 00 00 46 09 11 00 00 00 00 CD +R 00 00 01 00 02 07 01 00 +T 25 00 00 00 00 00 00 00 F1 F1 DD 75 FE DD 74 +R 00 00 01 00 02 04 05 00 +T 2E 00 00 00 FF C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 diff --git a/src/nos/lib/crt_large_lib/fputc.rel b/src/nos/lib/crt_large_lib/fputc.rel new file mode 100644 index 00000000..bcb09949 --- /dev/null +++ b/src/nos/lib/crt_large_lib/fputc.rel @@ -0,0 +1,121 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fflush Ref00000000 +S ___stdio_init_vars Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size FE flags 0 +S _fputc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF CD +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 21 0C 00 09 46 23 66 +R 00 00 01 00 02 04 02 00 +T 0F 00 00 00 68 DD 75 FE DD 74 FF 7D E6 40 28 +R 00 00 01 00 +T 1A 00 00 00 13 DD 5E 04 DD 56 05 CD +R 00 00 01 00 +T 22 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 FF FF C3 FB 00 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 7E FE E6 20 6F DD 7E FF E6 03 +R 00 00 01 00 +T 39 00 00 00 67 3E 20 AD B4 28 06 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 FF FF C3 FB 00 00 00 +R 00 00 01 00 00 08 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 21 08 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 51 00 00 00 23 56 0A 6F 03 0A 67 A7 ED 52 38 +R 00 00 01 00 +T 5C 00 00 00 13 DD 5E 04 DD 56 05 CD +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 21 FF FF C3 FB 00 00 00 +R 00 00 01 00 00 08 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 DD 6E 04 DD 66 05 4E 23 46 03 70 +R 00 00 01 00 +T 7B 00 00 00 2B 71 0B 69 60 DD 46 02 70 21 +R 00 00 01 00 +T 85 00 00 00 0C 00 DD 4E 04 DD 46 05 09 7E F6 +R 00 00 01 00 +T 90 00 00 00 80 77 23 7E F6 00 77 3E 0A DD AE +R 00 00 01 00 +T 9B 00 00 00 02 DD B6 03 20 07 DD 7E FE E6 01 +R 00 00 01 00 +T A6 00 00 00 20 07 +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 DD 7E FE E6 02 28 12 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 DD 5E 04 DD 56 05 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T B8 00 00 00 7D B4 28 05 +R 00 00 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 21 FF FF 18 3A +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 DD 7E FE E6 03 28 18 +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T D3 00 00 00 21 06 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T DE 00 00 00 18 16 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T EB 00 00 00 21 08 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 DD 6E 02 26 00 +R 00 00 01 00 +T FB 00 00 00 +R 00 00 01 00 +T FB 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_large_lib/fputs.rel b/src/nos/lib/crt_large_lib/fputs.rel new file mode 100644 index 00000000..f267b1d6 --- /dev/null +++ b/src/nos/lib/crt_large_lib/fputs.rel @@ -0,0 +1,50 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _fputc Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 59 flags 0 +S _fputs Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FC +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 77 FD DD 6E 02 DD 66 03 DD 75 +R 00 00 01 00 +T 14 00 00 00 FE DD 74 FF +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 6E FE DD 66 FF AF B6 28 2E +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 2D 00 00 00 FF 23 DD 75 FE DD 74 FF 2B 5E 16 +R 00 00 01 00 +T 38 00 00 00 00 CD 00 00 00 00 7D A4 3C 20 05 +R 00 00 01 00 02 06 03 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 21 FF FF 18 10 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 18 C8 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/fputter.rel b/src/nos/lib/crt_large_lib/fputter.rel new file mode 100644 index 00000000..60b3a43d --- /dev/null +++ b/src/nos/lib/crt_large_lib/fputter.rel @@ -0,0 +1,85 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fflush Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _fputc Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D8 flags 0 +S ___fputter Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 0C 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 5E 08 DD 56 09 19 7E E6 03 4F 23 +R 00 00 01 00 +T 14 00 00 00 7E E6 00 47 DD 71 FD DD 70 FE 21 +R 00 00 01 00 +T 1F 00 00 00 0C 00 19 7E E6 FC 77 23 7E E6 FF +R 00 00 01 00 +T 2A 00 00 00 77 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 DD 4E 04 DD 46 05 DD 6E FA DD 66 +R 00 00 01 00 +T 3D 00 00 00 FB A7 ED 42 30 44 +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 6E 02 DD 66 03 46 DD 70 FC DD +R 00 00 01 00 +T 4E 00 00 00 4E 08 DD 46 09 DD 5E FC 16 00 CD +R 00 00 01 00 +T 59 00 00 00 00 00 00 00 DD 7E FC FE 0A 20 13 +R 00 00 01 00 02 04 04 00 +T 62 00 00 00 3E 01 DD AE FD DD B6 FE 20 09 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 5E 08 DD 56 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 18 AB +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 21 0C 00 DD 4E 08 DD 46 09 09 7E +R 00 00 01 00 +T 92 00 00 00 DD B6 FD 77 23 7E DD B6 FE 77 3E +R 00 00 01 00 +T 9D 00 00 00 02 DD AE FD DD B6 FE 20 09 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 DD 5E 08 DD 56 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 3E 01 DD AE FD DD B6 FE 20 16 +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 21 04 00 DD 4E 08 DD 46 09 09 E5 +R 00 00 01 00 +T C4 00 00 00 21 06 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 DD 6E FA DD 66 FB C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_large_lib/fread.rel b/src/nos/lib/crt_large_lib/fread.rel new file mode 100644 index 00000000..bfd434f4 --- /dev/null +++ b/src/nos/lib/crt_large_lib/fread.rel @@ -0,0 +1,146 @@ +XL4 +H 2 areas C global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fflush Ref00000000 +S _memcpy Ref00000000 +S ___stdio_init_vars Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 195 flags 0 +S _fread Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 FE +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 DD 77 FF CD 00 00 00 00 DD 7E 02 +R 00 00 01 00 02 08 03 00 +T 12 00 00 00 DD B6 03 28 18 DD 7E 04 DD B6 05 +R 00 00 01 00 +T 1D 00 00 00 28 10 DD 7E 08 DD B6 09 28 08 DD +R 00 00 01 00 +T 28 00 00 00 7E 0A DD B6 0B 20 06 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 21 00 00 C3 92 01 00 00 +R 00 00 01 00 00 08 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 46 +R 00 00 01 00 +T 40 00 00 00 23 66 68 DD 75 FA DD 74 FB 7D E6 +R 00 00 01 00 +T 4B 00 00 00 80 28 09 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 DD 5E 0A DD 56 0B CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 7E FA E6 10 6F DD 7E FB E6 03 +R 00 00 01 00 +T 62 00 00 00 67 3E 10 AD B4 28 06 +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 21 00 00 C3 92 01 00 00 +R 00 00 01 00 00 08 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 DD 4E 08 DD 46 09 DD 5E 04 DD 56 +R 00 00 01 00 +T 7A 00 00 00 05 CD 00 00 00 00 DD 73 FC DD 72 +R 00 00 01 00 02 06 08 00 +T 83 00 00 00 FD DD 6E 0A DD 66 0B 4E 23 46 DD +R 00 00 01 00 +T 8E 00 00 00 6E 0A DD 66 0B 23 23 7E 23 66 6F +R 00 00 01 00 +T 99 00 00 00 A7 ED 42 DD 75 F8 DD 74 F9 A7 ED +R 00 00 01 00 +T A4 00 00 00 52 38 34 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 DD 6E FC DD 66 FD E5 DD 6E 0A DD +R 00 00 01 00 +T B2 00 00 00 66 0B 4E 23 46 DD 5E 02 DD 56 03 +R 00 00 01 00 +T BD 00 00 00 CD 00 00 00 00 F1 DD 6E 0A DD 66 +R 00 00 01 00 02 05 02 00 +T C6 00 00 00 0B 7E DD 86 FC 77 23 7E DD 8E FD +R 00 00 01 00 +T D1 00 00 00 77 DD 6E FC DD 66 FD C3 +R 00 00 01 00 +T D9 00 00 00 92 01 00 00 +R 00 00 01 00 00 04 01 00 +T DB 00 00 00 +R 00 00 01 00 +T DB 00 00 00 DD 4E F8 DD 46 F9 21 00 00 CD +R 00 00 01 00 +T E5 00 00 00 00 00 00 00 30 26 +R 00 00 01 00 02 04 09 00 +T E9 00 00 00 +R 00 00 01 00 +T E9 00 00 00 DD 6E F8 DD 66 F9 E5 DD 6E 0A DD +R 00 00 01 00 +T F4 00 00 00 66 0B 4E 23 46 DD 5E 02 DD 56 03 +R 00 00 01 00 +T FF 00 00 00 CD 00 00 00 00 F1 DD 6E F8 DD 66 +R 00 00 01 00 02 05 02 00 +T 08 01 00 00 F9 DD 75 FE DD 74 FF +R 00 00 01 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 DD 4E FE DD 46 FF DD 6E FC DD 66 +R 00 00 01 00 +T 1A 01 00 00 FD A7 ED 42 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 25 01 00 00 09 4D 44 21 0A 00 DD 5E 0A DD 56 +R 00 00 01 00 +T 30 01 00 00 0B 19 5E 23 56 CD 00 00 00 00 F1 +R 00 00 01 00 02 0A 05 00 +T 39 01 00 00 DD 75 F8 DD 74 F9 CB 7C 28 1C +R 00 00 01 00 +T 43 01 00 00 +R 00 00 01 00 +T 43 01 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T 4E 01 00 00 F6 00 77 23 7E F6 02 77 AF DD 77 +R 00 00 01 00 +T 59 01 00 00 F8 DD 77 F9 18 1B +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 DD 7E F8 DD B6 F9 20 13 +R 00 00 01 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T 72 01 00 00 F6 00 77 23 7E F6 01 77 +R 00 00 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 DD 6E F8 DD 66 F9 DD 4E FE DD 46 +R 00 00 01 00 +T 85 01 00 00 FF 09 EB DD 4E 04 DD 46 05 CD +R 00 00 01 00 +T 8F 01 00 00 00 00 00 00 EB +R 00 00 01 00 02 04 0A 00 +T 92 01 00 00 +R 00 00 01 00 +T 92 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/crt_large_lib/free.rel b/src/nos/lib/crt_large_lib/free.rel new file mode 100644 index 00000000..7c693136 --- /dev/null +++ b/src/nos/lib/crt_large_lib/free.rel @@ -0,0 +1,88 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ___malloc_last Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DA flags 0 +S _free Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 FC FF DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4E 02 DD 46 03 09 DD 75 FE DD 74 +R 00 00 01 00 +T 14 00 00 00 FF 23 23 7E 23 B6 28 03 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 C3 D7 00 00 00 +R 00 00 01 00 00 05 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 2A 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 4E FC DD 46 FD DD 6E FE DD 66 +R 00 00 01 00 +T 33 00 00 00 FF A7 ED 42 38 17 DD 6E FC DD 66 +R 00 00 01 00 +T 3E 00 00 00 FD 23 23 46 23 66 68 DD 4E FE DD +R 00 00 01 00 +T 49 00 00 00 46 FF A7 ED 42 30 53 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 DD 6E FC DD 66 FD 23 23 4E 23 46 +R 00 00 01 00 +T 5B 00 00 00 DD 6E FC DD 66 FD A7 ED 42 38 29 +R 00 00 01 00 +T 66 00 00 00 DD 4E FE DD 46 FF DD 6E FC DD 66 +R 00 00 01 00 +T 71 00 00 00 FD A7 ED 42 38 16 DD 6E FC DD 66 +R 00 00 01 00 +T 7C 00 00 00 FD 23 23 4E 23 46 DD 6E FE DD 66 +R 00 00 01 00 +T 87 00 00 00 FF A7 ED 42 30 02 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 18 14 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T 9A 00 00 00 68 DD 75 FC DD 74 FD 18 85 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 DD 6E FE DD 66 FF 23 23 E5 DD 4E +R 00 00 01 00 +T AE 00 00 00 FC DD 46 FD 03 03 69 60 4E 23 46 +R 00 00 01 00 +T B9 00 00 00 E1 71 23 70 DD 6E FC DD 66 FD 23 +R 00 00 01 00 +T C4 00 00 00 23 DD 4E FE DD 46 FF 71 23 70 DD +R 00 00 01 00 +T CF 00 00 00 6E FC DD 66 FD 22 00 00 00 00 +R 00 00 01 00 02 0A 01 00 +T D7 00 00 00 +R 00 00 01 00 +T D7 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/fscanf.rel b/src/nos/lib/crt_large_lib/fscanf.rel new file mode 100644 index 00000000..f6bd297d --- /dev/null +++ b/src/nos/lib/crt_large_lib/fscanf.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _vfscanf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2D flags 0 +S _fscanf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0E 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 4E 0A DD 46 0B DD 5E 08 DD 56 +R 00 00 01 00 +T 1F 00 00 00 09 CD 00 00 00 00 F1 DD 75 FE DD +R 00 00 01 00 02 06 03 00 +T 28 00 00 00 74 FF C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/crt_large_lib/ftell.rel b/src/nos/lib/crt_large_lib/ftell.rel new file mode 100644 index 00000000..f3b80707 --- /dev/null +++ b/src/nos/lib/crt_large_lib/ftell.rel @@ -0,0 +1,33 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_32_L09 Ref00000000 +S _fflush Ref00000000 +S _lseek Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 35 flags 0 +S _ftell Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 05 00 02 0A 02 00 +T 07 00 00 00 A4 3C 20 08 +R 00 00 01 00 +T 0B 00 00 00 +R 00 00 01 00 +T 0B 00 00 00 01 FF FF 21 FF FF 18 1F +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 21 01 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 1E 00 00 00 E5 21 0A 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 29 00 00 00 5E 23 56 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 08 03 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/fwrite.rel b/src/nos/lib/crt_large_lib/fwrite.rel new file mode 100644 index 00000000..3de50e1d --- /dev/null +++ b/src/nos/lib/crt_large_lib/fwrite.rel @@ -0,0 +1,185 @@ +XL4 +H 2 areas D global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fflush Ref00000000 +S _memcpy Ref00000000 +S ___stdio_init_vars Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1FE flags 0 +S _fwrite Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF CD +R 00 00 01 00 02 05 08 00 +T 06 00 00 00 00 00 00 00 DD 7E 02 DD B6 03 28 +R 00 00 01 00 02 04 03 00 +T 0F 00 00 00 18 DD 7E 04 DD B6 05 28 10 DD 7E +R 00 00 01 00 +T 1A 00 00 00 08 DD B6 09 28 08 DD 7E 0A DD B6 +R 00 00 01 00 +T 25 00 00 00 0B 20 06 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 00 00 C3 FB 01 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 46 +R 00 00 01 00 +T 39 00 00 00 23 66 68 DD 75 FA DD 74 FB 7D E6 +R 00 00 01 00 +T 44 00 00 00 40 28 13 DD 5E 0A DD 56 0B CD +R 00 00 01 00 +T 4E 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 21 00 00 C3 FB 01 00 00 +R 00 00 01 00 00 08 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 DD 7E FA E6 20 6F DD 7E FB E6 03 +R 00 00 01 00 +T 65 00 00 00 67 3E 20 AD B4 28 06 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 21 00 00 C3 FB 01 00 00 +R 00 00 01 00 00 08 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 DD 4E 08 DD 46 09 DD 5E 04 DD 56 +R 00 00 01 00 +T 7D 00 00 00 05 CD 00 00 00 00 DD 73 FC DD 72 +R 00 00 01 00 02 06 09 00 +T 86 00 00 00 FD DD 6E 0A DD 66 0B 4E 23 46 21 +R 00 00 01 00 +T 91 00 00 00 08 00 DD 5E 0A DD 56 0B 19 56 23 +R 00 00 01 00 +T 9C 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T A7 00 00 00 DD 4E FC DD 46 FD A7 ED 42 30 13 +R 00 00 01 00 +T B2 00 00 00 DD 5E 0A DD 56 0B CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T BB 00 00 00 7D B4 28 06 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 21 00 00 C3 FB 01 00 00 +R 00 00 01 00 00 08 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 DD 6E 0A DD 66 0B 4E 23 46 21 +R 00 00 01 00 +T CF 00 00 00 08 00 DD 5E 0A DD 56 0B 19 56 23 +R 00 00 01 00 +T DA 00 00 00 66 6A A7 ED 42 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T E5 00 00 00 DD 4E FC DD 46 FD A7 ED 42 38 57 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T FB 00 00 00 F6 80 77 23 7E F6 00 77 DD 6E FC +R 00 00 01 00 +T 06 01 00 00 DD 66 FD E5 DD 4E 02 DD 46 03 DD +R 00 00 01 00 +T 11 01 00 00 6E 0A DD 66 0B 5E 23 56 CD +R 00 00 01 00 +T 1A 01 00 00 00 00 00 00 F1 DD 6E 0A DD 66 0B +R 00 00 01 00 02 04 02 00 +T 23 01 00 00 7E DD 86 FC 77 23 7E DD 8E FD 77 +R 00 00 01 00 +T 2E 01 00 00 DD 7E FA E6 03 28 09 +R 00 00 01 00 +T 35 01 00 00 +R 00 00 01 00 +T 35 01 00 00 DD 5E 0A DD 56 0B CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 3E 01 00 00 +R 00 00 01 00 +T 3E 01 00 00 DD 6E 08 DD 66 09 C3 FB 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 47 01 00 00 +R 00 00 01 00 +T 47 01 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 52 01 00 00 FF +R 00 00 01 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 DD 6E FC DD 66 FD E5 DD 4E 02 DD +R 00 00 01 00 +T 5E 01 00 00 46 03 21 0A 00 DD 5E 0A DD 56 0B +R 00 00 01 00 +T 69 01 00 00 19 5E 23 56 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 09 07 00 +T 72 01 00 00 75 F8 DD 74 F9 4D 44 21 00 00 CD +R 00 00 01 00 +T 7D 01 00 00 00 00 00 00 30 22 +R 00 00 01 00 02 04 0A 00 +T 81 01 00 00 +R 00 00 01 00 +T 81 01 00 00 DD 6E F8 DD 66 F9 DD 4E 02 DD 46 +R 00 00 01 00 +T 8C 01 00 00 03 09 DD 75 02 DD 74 03 21 04 00 +R 00 00 01 00 +T 97 01 00 00 39 7E DD 96 F8 77 23 7E DD 9E F9 +R 00 00 01 00 +T A2 01 00 00 77 +R 00 00 01 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 DD 4E F8 DD 46 F9 21 00 00 CD +R 00 00 01 00 +T AD 01 00 00 00 00 00 00 38 A2 DD 7E F8 DD A6 +R 00 00 01 00 02 04 0A 00 +T B6 01 00 00 F9 3C 20 09 2A 00 00 00 00 3E 04 +R 00 00 01 00 02 09 06 00 +T BF 01 00 00 AD B4 28 90 +R 00 00 01 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 DD CB F9 7E 28 13 +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 21 0C 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T D4 01 00 00 F6 00 77 23 7E F6 02 77 +R 00 00 01 00 +T DC 01 00 00 +R 00 00 01 00 +T DC 01 00 00 21 06 00 39 7E DD 96 FC 77 23 7E +R 00 00 01 00 +T E7 01 00 00 DD 9E FD 77 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T F2 01 00 00 5E FE DD 56 FF CD 00 00 00 00 EB +R 00 00 01 00 02 0A 0B 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/crt_large_lib/getcwd.rel b/src/nos/lib/crt_large_lib/getcwd.rel new file mode 100644 index 00000000..18d8df09 --- /dev/null +++ b/src/nos/lib/crt_large_lib/getcwd.rel @@ -0,0 +1,321 @@ +XL4 +H 4 areas F global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strcat Ref00000000 +S _closedir Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _readdir Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _opendir Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24F flags 0 +S _getcwd Def000001FC +A CSTR size 8 flags 0 +A UDATA0 size 26 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 36 FE 00 +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 01 08 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 10 00 00 00 CD 00 00 00 00 CB 7C 28 06 +R 00 00 01 00 02 05 0D 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 21 00 00 C3 60 01 00 00 +R 00 00 01 00 00 08 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 2A 08 00 00 00 DD 4E 02 DD 46 03 +R 00 00 01 00 00 05 03 00 +T 26 00 00 00 A7 ED 42 28 03 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 34 FE +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 03 00 +T 35 00 00 00 DD 75 FA DD 74 FB 2B ED 4B +R 00 00 01 00 +T 3E 00 00 00 00 00 00 00 09 DD 75 F8 DD 74 F9 +R 00 00 01 00 00 04 03 00 +T 47 00 00 00 7E FE 2F 28 37 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 DD 4E FA DD 46 FB 03 03 2A +R 00 00 01 00 +T 55 00 00 00 02 00 00 00 CD 00 00 00 00 30 0C +R 00 00 01 00 00 04 03 00 02 09 0B 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 21 22 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 09 00 +T 65 00 00 00 C3 60 01 00 00 +R 00 00 01 00 00 05 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 01 00 00 00 00 DD 5E F8 DD 56 F9 +R 00 00 01 00 00 05 02 00 +T 71 00 00 00 13 DD 73 F8 DD 72 F9 CD +R 00 00 01 00 +T 79 00 00 00 00 00 00 00 DD 34 FA 20 03 DD 34 +R 00 00 01 00 02 04 08 00 +T 82 00 00 00 FB +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 0C 00 +T 92 00 00 00 DD 75 FC DD 74 FD 7D B4 20 06 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 21 00 00 C3 60 01 00 00 +R 00 00 01 00 00 08 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 DD 5E FC DD 56 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T AB 00 00 00 DD 75 F6 DD 74 F7 7D B4 CA +R 00 00 01 00 +T B4 00 00 00 4E 01 00 00 +R 00 00 01 00 00 04 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 AF DD B6 FE 20 15 DD 6E F6 DD 66 +R 00 00 01 00 +T C1 00 00 00 F7 46 23 66 68 DD 4E 04 DD 46 05 +R 00 00 01 00 +T CC 00 00 00 A7 ED 42 20 7A +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 21 06 00 DD 4E F6 DD 46 F7 09 EB +R 00 00 01 00 +T DC 00 00 00 CD 00 00 00 00 DD 4E FA DD 46 FB +R 00 00 01 00 02 05 03 00 +T E5 00 00 00 09 4D 44 2A 02 00 00 00 A7 ED 42 +R 00 00 01 00 00 08 03 00 +T EE 00 00 00 30 0B +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 21 22 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 09 00 +T F9 00 00 00 18 65 +R 00 00 01 00 +T FB 00 00 00 +R 00 00 01 00 +T FB 00 00 00 21 06 00 DD 4E F6 DD 46 F7 09 4D +R 00 00 01 00 +T 06 01 00 00 44 DD 5E F8 DD 56 F9 13 CD +R 00 00 01 00 +T 0F 01 00 00 00 00 00 00 01 08 00 00 00 ED 5B +R 00 00 01 00 02 04 08 00 00 09 03 00 +T 16 01 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 00 04 03 00 02 09 0D 00 +T 1D 01 00 00 28 02 +R 00 00 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 18 81 +R 00 00 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 2A 0A 00 00 00 DD 4E 04 DD 46 05 +R 00 00 01 00 00 05 03 00 +T 2A 01 00 00 A7 ED 42 20 1C 2A 08 00 00 00 DD +R 00 00 01 00 00 0A 03 00 +T 33 01 00 00 4E 02 DD 46 03 A7 ED 42 20 0E +R 00 00 01 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 DD 5E FC DD 56 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 46 01 00 00 2A 00 00 00 00 18 15 +R 00 00 01 00 00 05 03 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 C3 A2 00 00 00 +R 00 00 01 00 00 05 01 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 DD 5E FC DD 56 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 57 01 00 00 21 02 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 09 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 CD 00 00 00 00 FC FF 01 +R 00 00 01 00 02 05 0A 00 +T 69 01 00 00 08 00 00 00 ED 5B 00 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 70 01 00 00 00 00 00 00 CB 7C 28 05 +R 00 00 01 00 02 04 0D 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 21 00 00 18 7E +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 2A 08 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 00 05 03 00 +T 84 01 00 00 ED 4B 0A 00 00 00 DD 71 FE DD 70 +R 00 00 01 00 00 06 03 00 +T 8D 01 00 00 FF ED 4B 04 00 00 00 A7 ED 42 20 +R 00 00 01 00 00 07 03 00 +T 96 01 00 00 1D 2A 06 00 00 00 DD 4E FE DD 46 +R 00 00 01 00 00 06 03 00 +T 9F 01 00 00 FF A7 ED 42 20 0F +R 00 00 01 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 01 00 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 03 00 +T AC 01 00 00 CD 00 00 00 00 2A 00 00 00 00 18 +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T B3 01 00 00 45 +R 00 00 01 00 +T B4 01 00 00 +R 00 00 01 00 +T B4 01 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 03 00 +T BB 01 00 00 01 04 00 09 4D 44 2A 02 00 00 00 +R 00 00 01 00 00 0B 03 00 +T C4 01 00 00 A7 ED 42 30 0B +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 21 22 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 09 00 +T D2 01 00 00 18 25 +R 00 00 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 01 02 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 03 00 +T DB 01 00 00 CD 00 00 00 00 CD 63 01 00 00 7D +R 00 00 01 00 02 05 01 00 00 0A 01 00 +T E2 01 00 00 B4 28 11 DD 4E FE DD 46 FF DD 5E +R 00 00 01 00 +T ED 01 00 00 FC DD 56 FD CD 00 00 00 00 18 03 +R 00 00 01 00 00 09 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 21 00 00 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 CD 00 00 00 00 ED 43 02 00 00 00 +R 00 00 01 00 02 05 07 00 00 0B 03 00 +T 03 02 00 00 69 60 01 03 80 3E 80 AC 67 ED 42 +R 00 00 01 00 +T 0E 02 00 00 30 0B +R 00 00 01 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 21 22 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 09 00 +T 19 02 00 00 18 31 +R 00 00 01 00 +T 1B 02 00 00 +R 00 00 01 00 +T 1B 02 00 00 01 06 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 00 05 02 00 +T 24 02 00 00 22 00 00 00 00 EB CD 00 00 00 00 +R 00 00 01 00 00 05 03 00 02 0B 08 00 +T 2B 02 00 00 01 08 00 00 00 11 00 00 00 00 CD +R 00 00 01 00 00 05 03 00 00 0A 02 00 +T 32 02 00 00 00 00 00 00 CB 7C 28 05 +R 00 00 01 00 02 04 0D 00 +T 38 02 00 00 +R 00 00 01 00 +T 38 02 00 00 21 00 00 18 0F +R 00 00 01 00 +T 3D 02 00 00 +R 00 00 01 00 +T 3D 02 00 00 2A 08 00 00 00 22 04 00 00 00 2A +R 00 00 01 00 00 05 03 00 00 0A 03 00 +T 44 02 00 00 0A 00 00 00 22 06 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 09 03 00 +T 4A 02 00 00 63 01 00 00 +R 00 00 01 00 00 04 01 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 2F 2E 2E 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 2E 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/getenv.rel b/src/nos/lib/crt_large_lib/getenv.rel new file mode 100644 index 00000000..5a37388b --- /dev/null +++ b/src/nos/lib/crt_large_lib/getenv.rel @@ -0,0 +1,78 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _environ Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _memcmp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A7 flags 0 +S _getenv Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 2A +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 01 00 +T 0F 00 00 00 5E 02 DD 56 03 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 02 00 +T 18 00 00 00 75 FE DD 74 FF DD 7E FC DD B6 FD +R 00 00 01 00 +T 23 00 00 00 28 08 DD 7E FE DD B6 FF 20 05 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 18 72 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 DD 6E FC DD 66 FD 4D 44 03 03 DD +R 00 00 01 00 +T 3D 00 00 00 71 FC DD 70 FD 46 23 66 68 DD 75 +R 00 00 01 00 +T 48 00 00 00 FA DD 74 FB 7D B4 28 51 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 DD 6E 02 DD 66 03 E5 DD 6E FA DD +R 00 00 01 00 +T 5B 00 00 00 66 FB 7E E1 BE 20 3D DD 6E FE DD +R 00 00 01 00 +T 66 00 00 00 66 FF DD 4E FA DD 46 FB 09 7E FE +R 00 00 01 00 +T 71 00 00 00 3D 20 2B DD 6E FE DD 66 FF E5 DD +R 00 00 01 00 +T 7C 00 00 00 4E FA DD 46 FB DD 5E 02 DD 56 03 +R 00 00 01 00 +T 87 00 00 00 CD 00 00 00 00 F1 7D B4 20 10 +R 00 00 01 00 02 05 06 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 6E FE DD 66 FF 23 DD 4E FA DD +R 00 00 01 00 +T 9A 00 00 00 46 FB 09 18 05 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 18 91 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 21 00 00 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_large_lib/getgrent.rel b/src/nos/lib/crt_large_lib/getgrent.rel new file mode 100644 index 00000000..47542d72 --- /dev/null +++ b/src/nos/lib/crt_large_lib/getgrent.rel @@ -0,0 +1,271 @@ +XL4 +H 3 areas A global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _lseek Ref00000000 +S _strchr Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S _strtol Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 292 flags 0 +S ___getgrent Def00000000 +A UDATA0 size F2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF +R 00 00 01 00 02 05 07 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 21 C8 00 E5 01 00 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T 0E 00 00 00 02 DD 56 03 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 09 04 00 +T 17 00 00 00 75 FC DD 74 FD 4D 44 21 00 00 CD +R 00 00 01 00 +T 22 00 00 00 00 00 00 00 38 06 +R 00 00 01 00 02 04 08 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 21 00 00 C3 8F 02 00 00 +R 00 00 01 00 00 08 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 01 0A 00 11 00 00 00 00 CD +R 00 00 01 00 00 08 02 00 +T 33 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 7D +R 00 00 01 00 02 04 02 00 +T 3C 00 00 00 B4 28 55 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 6E F6 DD 66 F7 23 DD 75 F6 DD +R 00 00 01 00 +T 4A 00 00 00 74 F7 2B 36 00 21 01 00 E5 01 +R 00 00 01 00 +T 54 00 00 00 00 00 00 00 DD 6E F6 DD 66 F7 A7 +R 00 00 01 00 00 04 02 00 +T 5D 00 00 00 ED 42 DD 4E FC DD 46 FD A7 ED 42 +R 00 00 01 00 +T 68 00 00 00 7C 07 9F 4F 41 C5 E5 DD 5E 02 DD +R 00 00 01 00 +T 73 00 00 00 56 03 CD 00 00 00 00 F1 F1 F1 DD +R 00 00 01 00 02 07 01 00 +T 7C 00 00 00 6E F6 DD 66 F7 2B 2B 7E FE 0D 20 +R 00 00 01 00 +T 87 00 00 00 0A +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 6E F6 DD 66 F7 2B 2B 36 00 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 18 6A +R 00 00 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 21 C8 00 E5 01 00 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T 9D 00 00 00 02 DD 56 03 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 09 04 00 +T A6 00 00 00 75 FC DD 74 FD 4D 44 21 00 00 CD +R 00 00 01 00 +T B1 00 00 00 00 00 00 00 38 06 +R 00 00 01 00 02 04 08 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 21 00 00 C3 8F 02 00 00 +R 00 00 01 00 00 08 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 01 0A 00 11 00 00 00 00 CD +R 00 00 01 00 00 08 02 00 +T C2 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 7D +R 00 00 01 00 02 04 02 00 +T CB 00 00 00 B4 28 C6 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 01 00 E5 01 00 00 00 00 DD 6E +R 00 00 01 00 00 09 02 00 +T D7 00 00 00 F6 DD 66 F7 A7 ED 42 DD 4E FC DD +R 00 00 01 00 +T E2 00 00 00 46 FD A7 ED 42 23 7C 07 9F 4F 41 +R 00 00 01 00 +T ED 00 00 00 C5 E5 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T F6 00 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T FC 00 00 00 05 00 00 00 +R 00 00 01 00 00 04 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 3A 00 00 00 00 FE 23 28 15 3A +R 00 00 01 00 00 05 02 00 +T 06 01 00 00 00 00 00 00 FE 20 28 0E 3A +R 00 00 01 00 00 04 02 00 +T 0D 01 00 00 00 00 00 00 FE 0A 28 07 3A +R 00 00 01 00 00 04 02 00 +T 14 01 00 00 00 00 00 00 FE 09 20 03 +R 00 00 01 00 00 04 02 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 21 00 00 00 00 22 EA 00 00 00 01 +R 00 00 01 00 00 05 02 00 00 0A 02 00 +T 24 01 00 00 3A 00 11 00 00 00 00 CD +R 00 00 01 00 00 07 02 00 +T 2A 01 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 02 00 +T 33 01 00 00 B4 20 03 +R 00 00 01 00 +T 36 01 00 00 +R 00 00 01 00 +T 36 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 44 01 00 00 74 FF 2B 36 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 4F 01 00 00 22 EC 00 00 00 01 3A 00 DD 5E FE +R 00 00 01 00 00 05 02 00 +T 58 01 00 00 DD 56 FF CD 00 00 00 00 DD 75 FE +R 00 00 01 00 02 08 02 00 +T 61 01 00 00 DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 6B 01 00 00 +R 00 00 01 00 +T 6B 01 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 76 01 00 00 74 FF 2B 36 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 81 01 00 00 DD 75 F6 DD 74 F7 01 3A 00 DD 5E +R 00 00 01 00 +T 8C 01 00 00 FE DD 56 FF CD 00 00 00 00 DD 75 +R 00 00 01 00 02 09 02 00 +T 95 01 00 00 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T AB 01 00 00 74 FF 2B 36 00 21 0A 00 E5 21 +R 00 00 01 00 +T B5 01 00 00 04 00 39 4D 44 DD 5E F6 DD 56 F7 +R 00 00 01 00 +T C0 01 00 00 CD 00 00 00 00 F1 22 EE 00 00 00 +R 00 00 01 00 02 05 06 00 00 0B 02 00 +T C7 01 00 00 DD 6E F8 DD 66 F9 AF B6 28 03 +R 00 00 01 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 DD 6E FE DD 66 FF DD 75 F6 DD 74 +R 00 00 01 00 +T DF 01 00 00 F7 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 01 2C 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T F1 01 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 02 00 +T FA 01 00 00 B4 28 4B +R 00 00 01 00 +T FD 01 00 00 +R 00 00 01 00 +T FD 01 00 00 DD 6E FE DD 66 FF 36 00 DD 34 FE +R 00 00 01 00 +T 08 02 00 00 20 03 DD 34 FF +R 00 00 01 00 +T 0D 02 00 00 +R 00 00 01 00 +T 0D 02 00 00 DD 6E FA DD 66 FB 29 01 +R 00 00 01 00 +T 15 02 00 00 C8 00 00 00 09 DD 4E F6 DD 46 F7 +R 00 00 01 00 00 04 02 00 +T 1E 02 00 00 71 23 70 DD 6E FE DD 66 FF DD 75 +R 00 00 01 00 +T 29 02 00 00 F6 DD 74 F7 01 10 80 DD 6E FA DD +R 00 00 01 00 +T 34 02 00 00 66 FB 3E 80 AC 67 ED 42 30 08 +R 00 00 01 00 +T 3E 02 00 00 +R 00 00 01 00 +T 3E 02 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 46 02 00 00 +R 00 00 01 00 +T 46 02 00 00 +R 00 00 01 00 +T 46 02 00 00 18 9F +R 00 00 01 00 +T 48 02 00 00 +R 00 00 01 00 +T 48 02 00 00 DD 6E F6 DD 66 F7 AF B6 20 11 +R 00 00 01 00 +T 52 02 00 00 +R 00 00 01 00 +T 52 02 00 00 DD 6E FA DD 66 FB 29 01 +R 00 00 01 00 +T 5A 02 00 00 C8 00 00 00 09 AF 77 23 77 18 23 +R 00 00 01 00 00 04 02 00 +T 63 02 00 00 +R 00 00 01 00 +T 63 02 00 00 DD 6E FA DD 66 FB 29 01 +R 00 00 01 00 +T 6B 02 00 00 C8 00 00 00 09 DD 4E F6 DD 46 F7 +R 00 00 01 00 00 04 02 00 +T 74 02 00 00 71 23 70 DD 6E FA DD 66 FB 29 01 +R 00 00 01 00 +T 7F 02 00 00 CA 00 00 00 09 AF 77 23 77 +R 00 00 01 00 00 04 02 00 +T 86 02 00 00 +R 00 00 01 00 +T 86 02 00 00 21 C8 00 00 00 22 F0 00 00 00 21 +R 00 00 01 00 00 05 02 00 00 0A 02 00 +T 8D 02 00 00 EA 00 00 00 +R 00 00 01 00 00 04 02 00 +T 8F 02 00 00 +R 00 00 01 00 +T 8F 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T C8 00 00 00 +R 00 00 02 00 +T C8 00 00 00 +R 00 00 02 00 +T EA 00 00 00 +R 00 00 02 00 +T EA 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/getgrgid.rel b/src/nos/lib/crt_large_lib/getgrgid.rel new file mode 100644 index 00000000..2e4e9f27 --- /dev/null +++ b/src/nos/lib/crt_large_lib/getgrgid.rel @@ -0,0 +1,46 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _endgrent Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _getgrent Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _setgrent Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3E flags 0 +S _getgrgid Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF CD +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 08 00 00 00 +R 00 00 01 00 +T 08 00 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 04 00 +T 11 00 00 00 7D B4 28 1D +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T 20 00 00 00 23 66 68 DD 4E 02 DD 46 03 A7 ED +R 00 00 01 00 +T 2B 00 00 00 42 20 02 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 18 02 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 18 D6 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 CD 00 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 02 05 01 00 +T 3B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/getgrnam.rel b/src/nos/lib/crt_large_lib/getgrnam.rel new file mode 100644 index 00000000..4c390ec1 --- /dev/null +++ b/src/nos/lib/crt_large_lib/getgrnam.rel @@ -0,0 +1,60 @@ +XL4 +H 2 areas A global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _endgrent Ref00000000 +S _strcmp Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _getgrent Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _setgrent Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4E flags 0 +S _getgrnam Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 B6 03 20 0B +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 16 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 06 00 +T 16 00 00 00 18 33 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 05 00 +T 24 00 00 00 7D B4 28 1A +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 4E 02 DD 46 03 DD 6E FE DD 66 +R 00 00 01 00 +T 33 00 00 00 FF 5E 23 56 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 09 02 00 +T 3C 00 00 00 20 02 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 18 02 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 18 D9 +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 CD 00 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 02 05 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_large_lib/getopt.rel b/src/nos/lib/crt_large_lib/getopt.rel new file mode 100644 index 00000000..923fc38d --- /dev/null +++ b/src/nos/lib/crt_large_lib/getopt.rel @@ -0,0 +1,269 @@ +XL4 +H 6 areas F global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _stderr Ref00000000 +S _strchr Ref00000000 +S _strcmp Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _fputc Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _fputs Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20B flags 0 +S _getopt Def00000000 +A CSTR size 3A flags 0 +A UDATA0 size 4 flags 0 +S _optarg Def00000002 +S _optopt Def00000000 +A IDATA0 size 6 flags 0 +S _optind Def00000002 +S _opterr Def00000000 +A CDATA0 size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 07 00 +T 06 00 00 00 04 00 00 00 3E 01 AD B4 20 61 +R 00 00 01 00 00 04 04 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 DD 4E 02 DD 46 03 2A 02 00 00 00 +R 00 00 01 00 00 0B 04 00 +T 17 00 00 00 CD 00 00 00 00 30 28 2A +R 00 00 01 00 02 05 08 00 +T 1D 00 00 00 02 00 00 00 29 DD 4E 04 DD 46 05 +R 00 00 01 00 00 04 04 00 +T 26 00 00 00 09 7E 23 66 6F 7E FE 2D 20 14 2A +R 00 00 01 00 +T 31 00 00 00 02 00 00 00 29 DD 4E 04 DD 46 05 +R 00 00 01 00 00 04 04 00 +T 3A 00 00 00 09 46 23 66 68 23 7E B7 20 06 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 FF FF C3 08 02 00 00 +R 00 00 01 00 00 08 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 01 00 00 00 00 2A 02 00 00 00 29 +R 00 00 01 00 00 05 02 00 00 0A 04 00 +T 51 00 00 00 DD 5E 04 DD 56 05 19 5E 23 56 CD +R 00 00 01 00 +T 5C 00 00 00 00 00 00 00 7D B4 20 0D +R 00 00 01 00 02 04 03 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 69 00 00 00 21 FF FF C3 08 02 00 00 +R 00 00 01 00 00 08 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T 78 00 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T 80 00 00 00 04 00 00 00 09 4E 06 00 DD 71 FC +R 00 00 01 00 00 04 04 00 +T 89 00 00 00 DD 70 FD ED 43 00 00 00 00 3E 3A +R 00 00 01 00 00 09 03 00 +T 92 00 00 00 DD AE FC DD B6 FD 28 19 DD 4E FC +R 00 00 01 00 +T 9D 00 00 00 DD 46 FD DD 5E 08 DD 56 09 CD +R 00 00 01 00 +T A7 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 02 00 +T B0 00 00 00 B4 20 64 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 2A 00 00 00 00 7D B4 28 2D +R 00 00 01 00 00 05 04 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 01 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 02 05 01 00 +T C3 00 00 00 5E 23 56 CD 00 00 00 00 01 +R 00 00 01 00 02 08 09 00 +T CA 00 00 00 00 00 00 00 11 03 00 00 00 CD +R 00 00 01 00 02 04 01 00 00 09 02 00 +T D0 00 00 00 00 00 00 00 01 00 00 00 00 DD 5E +R 00 00 01 00 02 04 09 00 02 09 01 00 +T D7 00 00 00 FC DD 56 FD CD 00 00 00 00 01 +R 00 00 01 00 02 09 06 00 +T DF 00 00 00 00 00 00 00 11 0A 00 CD +R 00 00 01 00 02 04 01 00 +T E5 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T F0 00 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T F8 00 00 00 04 00 00 00 03 ED 43 04 00 00 00 +R 00 00 01 00 00 04 04 00 00 0B 04 00 +T FF 00 00 00 09 7E B7 20 0D +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 0B 01 00 00 21 01 00 22 04 00 00 00 +R 00 00 01 00 00 08 04 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 21 3F 00 C3 08 02 00 00 +R 00 00 01 00 00 08 01 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 22 01 00 00 74 FF 7E FE 3A C2 D2 01 00 00 +R 00 00 01 00 00 0A 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T 33 01 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T 3B 01 00 00 04 00 00 00 09 23 7E B7 28 1F +R 00 00 01 00 00 04 04 00 +T 43 01 00 00 +R 00 00 01 00 +T 43 01 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 4A 01 00 00 2B 29 DD 4E 04 DD 46 05 09 46 23 +R 00 00 01 00 +T 55 01 00 00 66 68 ED 4B 04 00 00 00 09 23 22 +R 00 00 01 00 00 08 04 00 +T 5E 01 00 00 02 00 00 00 18 68 +R 00 00 01 00 00 04 03 00 +T 62 01 00 00 +R 00 00 01 00 +T 62 01 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 69 01 00 00 DD 4E 02 DD 46 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T 72 01 00 00 38 3F +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 2A 00 00 00 00 7D B4 28 2D +R 00 00 01 00 00 05 04 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 01 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 02 05 01 00 +T 84 01 00 00 5E 23 56 CD 00 00 00 00 01 +R 00 00 01 00 02 08 09 00 +T 8B 01 00 00 00 00 00 00 11 18 00 00 00 CD +R 00 00 01 00 02 04 01 00 00 09 02 00 +T 91 01 00 00 00 00 00 00 01 00 00 00 00 DD 5E +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 98 01 00 00 FC DD 56 FD CD 00 00 00 00 01 +R 00 00 01 00 02 09 06 00 +T A0 01 00 00 00 00 00 00 11 0A 00 CD +R 00 00 01 00 02 04 01 00 +T A6 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T A8 01 00 00 +R 00 00 01 00 +T A8 01 00 00 21 01 00 22 04 00 00 00 21 3F 00 +R 00 00 01 00 00 08 04 00 +T B1 01 00 00 18 55 +R 00 00 01 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T BA 01 00 00 2B 29 DD 4E 04 DD 46 05 09 46 23 +R 00 00 01 00 +T C5 01 00 00 66 68 22 02 00 00 00 +R 00 00 01 00 00 07 03 00 +T CA 01 00 00 +R 00 00 01 00 +T CA 01 00 00 21 01 00 22 04 00 00 00 18 30 +R 00 00 01 00 00 08 04 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T DB 01 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T E3 01 00 00 04 00 00 00 03 ED 43 04 00 00 00 +R 00 00 01 00 00 04 04 00 00 0B 04 00 +T EA 01 00 00 09 7E B7 20 0D +R 00 00 01 00 +T EF 01 00 00 +R 00 00 01 00 +T EF 01 00 00 21 01 00 22 04 00 00 00 2A +R 00 00 01 00 00 08 04 00 +T F6 01 00 00 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 04 04 00 00 0A 04 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 21 00 00 22 02 00 00 00 +R 00 00 01 00 00 08 03 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 08 02 00 00 +R 00 00 01 00 +T 08 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2D 2D 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 3A 20 69 6C 6C 65 67 61 6C 20 6F +R 00 00 02 00 +T 0E 00 00 00 70 74 69 6F 6E 20 2D 2D 20 00 +R 00 00 02 00 +T 18 00 00 00 +R 00 00 02 00 +T 18 00 00 00 3A 20 6F 70 74 69 6F 6E 20 72 65 +R 00 00 02 00 +T 23 00 00 00 71 75 69 72 65 73 20 61 6E 20 61 +R 00 00 02 00 +T 2E 00 00 00 72 67 75 6D 65 6E 74 20 2D 2D 20 +R 00 00 02 00 +T 39 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 04 00 00 00 +R 00 00 04 00 +T 04 00 00 00 +R 00 00 04 00 +T 00 00 00 00 01 00 01 00 01 00 +R 00 00 05 00 diff --git a/src/nos/lib/crt_large_lib/getpass.rel b/src/nos/lib/crt_large_lib/getpass.rel new file mode 100644 index 00000000..dcbe0cc3 --- /dev/null +++ b/src/nos/lib/crt_large_lib/getpass.rel @@ -0,0 +1,152 @@ +XL4 +H 3 areas B global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fflush Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _ioctl Ref00000000 +S .__.ABS. Def00000000 +S _stdout Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _fputs Ref00000000 +S __getchar Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 135 flags 0 +S _getpass Def000000A9 +A UDATA0 size 80 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FF +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 17 00 00 00 FF CD 00 00 00 00 30 78 +R 00 00 01 00 02 06 07 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 09 00 +T 26 00 00 00 7D A4 3C 20 0D DD 7E FE DD B6 FF +R 00 00 01 00 +T 31 00 00 00 20 05 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 00 00 18 6E +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 3E 43 DD AE FC DD B6 FD 20 04 3E +R 00 00 01 00 +T 43 00 00 00 01 18 01 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 AF +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 E6 1F 20 13 3E 5A DD AE FC DD B6 +R 00 00 01 00 +T 52 00 00 00 FD 20 04 3E 01 18 01 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 AF +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 E6 1F 28 05 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 00 00 18 43 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 3E 0A DD AE FC DD B6 FD 28 0A 3E +R 00 00 01 00 +T 6E 00 00 00 0D DD AE FC DD B6 FD 20 02 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 18 1C +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 84 00 00 00 74 FF 2B DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 8F 00 00 00 46 FC 70 C3 0C 00 00 00 +R 00 00 01 00 00 08 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 DD 6E FE DD 66 FF DD 4E 02 DD 46 +R 00 00 01 00 +T A0 00 00 00 03 09 36 00 69 60 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 CD 00 00 00 00 F8 FF 01 +R 00 00 01 00 02 05 06 00 +T AF 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 02 04 05 00 +T B8 00 00 00 00 00 00 00 11 00 00 00 00 CD +R 00 00 01 00 02 04 08 00 02 09 05 00 +T BE 00 00 00 00 00 00 00 21 00 00 39 E5 21 +R 00 00 01 00 02 04 01 00 +T C6 00 00 00 00 00 E5 21 00 00 E5 CD +R 00 00 01 00 +T CE 00 00 00 00 00 00 00 F1 F1 F1 DD 6E FC DD +R 00 00 01 00 02 04 03 00 +T D7 00 00 00 66 FD DD 75 FE DD 74 FF 21 04 00 +R 00 00 01 00 +T E2 00 00 00 39 7E E6 F7 77 23 7E E6 FF 77 21 +R 00 00 01 00 +T ED 00 00 00 00 00 39 E5 21 01 00 E5 21 00 00 +R 00 00 01 00 +T F8 00 00 00 E5 CD 00 00 00 00 F1 F1 F1 01 +R 00 00 01 00 02 06 03 00 +T 00 01 00 00 7F 00 11 00 00 00 00 CD +R 00 00 01 00 00 07 02 00 +T 06 01 00 00 00 00 00 00 7D B4 20 04 +R 00 00 01 00 00 04 01 00 +T 0C 01 00 00 +R 00 00 01 00 +T 0C 01 00 00 AF 32 00 00 00 00 +R 00 00 01 00 00 06 02 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 DD 6E FE DD 66 FF DD 75 FC DD 74 +R 00 00 01 00 +T 1B 01 00 00 FD 21 00 00 39 E5 21 01 00 E5 21 +R 00 00 01 00 +T 26 01 00 00 00 00 E5 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 08 03 00 +T 2F 01 00 00 21 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0A 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/getpw.rel b/src/nos/lib/crt_large_lib/getpw.rel new file mode 100644 index 00000000..46dcc175 --- /dev/null +++ b/src/nos/lib/crt_large_lib/getpw.rel @@ -0,0 +1,63 @@ +XL4 +H 3 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _sprintf Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S _getpwuid Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 87 flags 0 +S _getpw Def00000000 +A CSTR size 15 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 79 B0 20 0B +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 12 00 00 00 18 70 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 1D 00 00 00 DD 75 FE DD 74 FF 7D B4 20 05 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 21 FF FF 18 58 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 21 0C 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 37 00 00 00 23 56 D5 21 0A 00 09 5E 23 56 D5 +R 00 00 01 00 +T 42 00 00 00 21 08 00 09 5E 23 56 D5 21 06 00 +R 00 00 01 00 +T 4D 00 00 00 09 5E 23 56 D5 21 04 00 09 5E 23 +R 00 00 01 00 +T 58 00 00 00 56 D5 03 03 69 60 4E 23 46 C5 DD +R 00 00 01 00 +T 63 00 00 00 6E FE DD 66 FF 4E 23 46 C5 21 +R 00 00 01 00 +T 6D 00 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 00 04 02 00 +T 76 00 00 00 E5 CD 00 00 00 00 EB 21 12 00 39 +R 00 00 01 00 02 06 01 00 +T 7F 00 00 00 F9 EB 21 00 00 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 73 3A 25 73 3A 25 75 3A 25 75 +R 00 00 02 00 +T 0B 00 00 00 3A 25 73 3A 25 73 3A 25 73 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/getpwent.rel b/src/nos/lib/crt_large_lib/getpwent.rel new file mode 100644 index 00000000..376038c1 --- /dev/null +++ b/src/nos/lib/crt_large_lib/getpwent.rel @@ -0,0 +1,274 @@ +XL4 +H 3 areas B global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _lseek Ref00000000 +S _strchr Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _read Ref00000000 +S _strtoul Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25B flags 0 +S ___getpwent Def00000000 +A UDATA0 size 10E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF +R 00 00 01 00 02 05 08 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 21 00 01 E5 01 00 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T 0E 00 00 00 02 DD 56 03 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 09 05 00 +T 17 00 00 00 75 FE DD 74 FF 4D 44 21 00 00 CD +R 00 00 01 00 +T 22 00 00 00 00 00 00 00 38 06 +R 00 00 01 00 02 04 09 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 21 00 00 C3 58 02 00 00 +R 00 00 01 00 00 08 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 01 0A 00 11 00 00 00 00 CD +R 00 00 01 00 00 08 02 00 +T 33 00 00 00 00 00 00 00 DD 75 F4 DD 74 F5 7D +R 00 00 01 00 02 04 03 00 +T 3C 00 00 00 B4 28 56 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T 4A 00 00 00 74 F5 2B 36 00 21 01 00 E5 01 +R 00 00 01 00 +T 54 00 00 00 00 00 00 00 DD 6E F4 DD 66 F5 A7 +R 00 00 01 00 00 04 02 00 +T 5D 00 00 00 ED 42 DD 4E FE DD 46 FF A7 ED 42 +R 00 00 01 00 +T 68 00 00 00 7C 07 9F 4F 41 C5 E5 DD 5E 02 DD +R 00 00 01 00 +T 73 00 00 00 56 03 CD 00 00 00 00 F1 F1 F1 DD +R 00 00 01 00 02 07 02 00 +T 7C 00 00 00 6E F4 DD 66 F5 2B 2B 7E FE 0D 20 +R 00 00 01 00 +T 87 00 00 00 0A +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 6E F4 DD 66 F5 2B 2B 36 00 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 C3 18 01 00 00 +R 00 00 01 00 00 05 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 00 01 E5 01 00 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T 9E 00 00 00 02 DD 56 03 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 09 05 00 +T A7 00 00 00 75 FE DD 74 FF 4D 44 21 00 00 CD +R 00 00 01 00 +T B2 00 00 00 00 00 00 00 38 06 +R 00 00 01 00 02 04 09 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 21 00 00 C3 58 02 00 00 +R 00 00 01 00 00 08 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 01 0A 00 11 00 00 00 00 CD +R 00 00 01 00 00 08 02 00 +T C3 00 00 00 00 00 00 00 DD 75 F4 DD 74 F5 7D +R 00 00 01 00 02 04 03 00 +T CC 00 00 00 B4 28 C6 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 21 01 00 E5 DD 6E FE DD 66 FF 7C +R 00 00 01 00 +T DA 00 00 00 07 9F 5F 53 D5 E5 01 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T E3 00 00 00 DD 6E F4 DD 66 F5 A7 ED 42 7C 07 +R 00 00 01 00 +T EE 00 00 00 9F 5F 53 A7 C1 ED 42 EB C1 ED 42 +R 00 00 01 00 +T F9 00 00 00 E5 D5 21 01 00 C1 09 EB 21 00 00 +R 00 00 01 00 +T 04 01 00 00 C1 ED 4A E5 D5 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 0F 01 00 00 CD 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 05 02 00 +T 16 01 00 00 05 00 00 00 +R 00 00 01 00 00 04 01 00 +T 18 01 00 00 +R 00 00 01 00 +T 18 01 00 00 3A 00 00 00 00 FE 23 28 15 3A +R 00 00 01 00 00 05 02 00 +T 20 01 00 00 00 00 00 00 FE 20 28 0E 3A +R 00 00 01 00 00 04 02 00 +T 27 01 00 00 00 00 00 00 FE 0A 28 07 3A +R 00 00 01 00 00 04 02 00 +T 2E 01 00 00 00 00 00 00 FE 09 20 03 +R 00 00 01 00 00 04 02 00 +T 34 01 00 00 +R 00 00 01 00 +T 34 01 00 00 +R 00 00 01 00 +T 34 01 00 00 +R 00 00 01 00 +T 34 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 DD 36 F4 00 00 00 00 DD 36 F5 +R 00 00 01 00 09 07 02 00 +T 3E 01 00 00 00 00 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 89 04 02 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 01 07 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T 51 01 00 00 AC 67 ED 42 D2 0D 02 00 00 +R 00 00 01 00 00 09 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 DD 5E FC DD 56 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 61 01 00 00 00 00 07 00 C8 01 00 00 +R 00 00 01 00 00 08 01 00 +T 67 01 00 00 75 01 00 00 80 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6B 01 00 00 8B 01 00 00 99 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6F 01 00 00 A7 01 00 00 B2 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 73 01 00 00 BD 01 00 00 +R 00 00 01 00 00 04 01 00 +T 75 01 00 00 +R 00 00 01 00 +T 75 01 00 00 DD 6E F4 DD 66 F5 22 00 01 00 00 +R 00 00 01 00 00 0B 02 00 +T 7E 01 00 00 18 48 +R 00 00 01 00 +T 80 01 00 00 +R 00 00 01 00 +T 80 01 00 00 DD 6E F4 DD 66 F5 22 02 01 00 00 +R 00 00 01 00 00 0B 02 00 +T 89 01 00 00 18 3D +R 00 00 01 00 +T 8B 01 00 00 +R 00 00 01 00 +T 8B 01 00 00 DD 6E F4 DD 66 F5 DD 75 FA DD 74 +R 00 00 01 00 +T 96 01 00 00 FB 18 2F +R 00 00 01 00 +T 99 01 00 00 +R 00 00 01 00 +T 99 01 00 00 DD 6E F4 DD 66 F5 DD 75 F8 DD 74 +R 00 00 01 00 +T A4 01 00 00 F9 18 21 +R 00 00 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 DD 6E F4 DD 66 F5 22 08 01 00 00 +R 00 00 01 00 00 0B 02 00 +T B0 01 00 00 18 16 +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 DD 6E F4 DD 66 F5 22 0A 01 00 00 +R 00 00 01 00 00 0B 02 00 +T BB 01 00 00 18 0B +R 00 00 01 00 +T BD 01 00 00 +R 00 00 01 00 +T BD 01 00 00 DD 6E F4 DD 66 F5 22 0C 01 00 00 +R 00 00 01 00 00 0B 02 00 +T C6 01 00 00 18 00 +R 00 00 01 00 +T C8 01 00 00 +R 00 00 01 00 +T C8 01 00 00 01 06 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T D3 01 00 00 AC 67 ED 42 30 29 +R 00 00 01 00 +T D9 01 00 00 +R 00 00 01 00 +T D9 01 00 00 01 3A 00 DD 5E F4 DD 56 F5 CD +R 00 00 01 00 +T E3 01 00 00 00 00 00 00 DD 75 F4 DD 74 F5 7D +R 00 00 01 00 02 04 03 00 +T EC 01 00 00 B4 20 03 +R 00 00 01 00 +T EF 01 00 00 +R 00 00 01 00 +T EF 01 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T FD 01 00 00 74 F5 2B 36 00 +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 0A 02 00 00 +R 00 00 01 00 +T 0A 02 00 00 C3 46 01 00 00 +R 00 00 01 00 00 05 01 00 +T 0D 02 00 00 +R 00 00 01 00 +T 0D 02 00 00 21 0A 00 E5 21 04 00 39 4D 44 DD +R 00 00 01 00 +T 18 02 00 00 5E F8 DD 56 F9 CD 00 00 00 00 F1 +R 00 00 01 00 02 0A 06 00 +T 21 02 00 00 22 06 01 00 00 DD 6E F6 DD 66 F7 +R 00 00 01 00 00 05 02 00 +T 2A 02 00 00 AF B6 28 03 +R 00 00 01 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 31 02 00 00 +R 00 00 01 00 +T 31 02 00 00 21 0A 00 E5 21 04 00 39 4D 44 DD +R 00 00 01 00 +T 3C 02 00 00 5E FA DD 56 FB CD 00 00 00 00 F1 +R 00 00 01 00 02 0A 06 00 +T 45 02 00 00 22 04 01 00 00 DD 6E F6 DD 66 F7 +R 00 00 01 00 00 05 02 00 +T 4E 02 00 00 AF B6 28 03 +R 00 00 01 00 +T 52 02 00 00 +R 00 00 01 00 +T 52 02 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 55 02 00 00 +R 00 00 01 00 +T 55 02 00 00 21 00 01 00 00 +R 00 00 01 00 00 05 02 00 +T 58 02 00 00 +R 00 00 01 00 +T 58 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 01 00 00 +R 00 00 02 00 +T 00 01 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/getpwnam.rel b/src/nos/lib/crt_large_lib/getpwnam.rel new file mode 100644 index 00000000..5c7cde0e --- /dev/null +++ b/src/nos/lib/crt_large_lib/getpwnam.rel @@ -0,0 +1,60 @@ +XL4 +H 2 areas A global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strcmp Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _endpwent Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _getpwent Ref00000000 +S _setpwent Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4E flags 0 +S _getpwnam Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 B6 03 20 0B +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 16 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 05 00 +T 16 00 00 00 18 33 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 07 00 +T 24 00 00 00 7D B4 28 1A +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 4E 02 DD 46 03 DD 6E FE DD 66 +R 00 00 01 00 +T 33 00 00 00 FF 5E 23 56 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 09 01 00 +T 3C 00 00 00 20 02 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 18 02 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 18 D9 +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 CD 00 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 02 05 04 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/getpwuid.rel b/src/nos/lib/crt_large_lib/getpwuid.rel new file mode 100644 index 00000000..50c827ea --- /dev/null +++ b/src/nos/lib/crt_large_lib/getpwuid.rel @@ -0,0 +1,46 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _endpwent Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _getpwent Ref00000000 +S _setpwent Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3E flags 0 +S _getpwuid Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF CD +R 00 00 01 00 02 05 04 00 +T 06 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 08 00 00 00 +R 00 00 01 00 +T 08 00 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 05 00 +T 11 00 00 00 7D B4 28 1D +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T 20 00 00 00 23 66 68 DD 4E 02 DD 46 03 A7 ED +R 00 00 01 00 +T 2B 00 00 00 42 20 02 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 18 02 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 18 D6 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 CD 00 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 02 05 03 00 +T 3B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/gets.rel b/src/nos/lib/crt_large_lib/gets.rel new file mode 100644 index 00000000..5219a9eb --- /dev/null +++ b/src/nos/lib/crt_large_lib/gets.rel @@ -0,0 +1,89 @@ +XL4 +H 2 areas B global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fgetc Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _stdin Ref00000000 +S _fputc Ref00000000 +S _stdout Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _fputs Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AF flags 0 +S _puts Def00000070 +S _gets Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 11 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T 18 00 00 00 75 FC DD 74 FD 7D A4 3C 28 1E 3E +R 00 00 01 00 +T 23 00 00 00 0A DD AE FC DD B6 FD 28 14 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 46 FC DD 6E FE DD 66 FF 23 DD +R 00 00 01 00 +T 37 00 00 00 75 FE DD 74 FF 2B 70 18 D1 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 DD 6E FE DD 66 FF 36 00 DD 7E FC +R 00 00 01 00 +T 4B 00 00 00 DD A6 FD 3C 20 16 DD 6E 02 DD 66 +R 00 00 01 00 +T 56 00 00 00 03 DD 4E FE DD 46 FF A7 ED 42 20 +R 00 00 01 00 +T 61 00 00 00 05 21 00 00 18 06 +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 CD 00 00 00 00 FE FF 01 +R 00 00 01 00 02 05 07 00 +T 76 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 02 04 06 00 +T 7F 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 08 00 +T 88 00 00 00 A4 3C 28 0E 01 00 00 00 00 11 +R 00 00 01 00 02 09 06 00 +T 90 00 00 00 0A 00 CD 00 00 00 00 7D A4 3C 20 +R 00 00 01 00 02 07 05 00 +T 99 00 00 00 05 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 21 FF FF 18 0D +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T AA 00 00 00 74 FF +R 00 00 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/gmtime.rel b/src/nos/lib/crt_large_lib/gmtime.rel new file mode 100644 index 00000000..a974ee84 --- /dev/null +++ b/src/nos/lib/crt_large_lib/gmtime.rel @@ -0,0 +1,475 @@ +XL4 +H 5 areas C global symbols +S ?US_RSH_L02 Ref00000000 +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _timezone Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4F0 flags 0 +S _gmtime Def000004CB +S ___tm_conv Def00000000 +A UDATA0 size 12 flags 0 +A IDATA0 size 18 flags 0 +A CDATA0 size 18 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 0A 6F 03 0A +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 67 7D E6 1F 4F 7C E6 00 47 69 60 +R 00 00 01 00 +T 14 00 00 00 29 E5 DD 6E 02 DD 66 03 C1 71 23 +R 00 00 01 00 +T 1F 00 00 00 70 DD 6E 02 DD 66 03 23 23 E5 DD +R 00 00 01 00 +T 2A 00 00 00 6E 04 DD 66 05 5E 23 56 06 05 CD +R 00 00 01 00 +T 35 00 00 00 00 00 00 00 7B E6 3F 6F 7A E6 00 +R 00 00 01 00 02 04 00 00 +T 3E 00 00 00 67 DD 4E 08 DD 46 09 09 4D 44 E1 +R 00 00 01 00 +T 49 00 00 00 71 23 70 21 04 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 54 00 00 00 03 09 E5 DD 6E 04 DD 66 05 5E 23 +R 00 00 01 00 +T 5F 00 00 00 56 06 0B CD 00 00 00 00 7B E6 1F +R 00 00 01 00 02 08 00 00 +T 68 00 00 00 4F 7A E6 00 47 E1 71 23 70 21 +R 00 00 01 00 +T 72 00 00 00 06 00 DD 4E 02 DD 46 03 09 E5 DD +R 00 00 01 00 +T 7D 00 00 00 5E 04 DD 56 05 13 13 EB 5E 23 56 +R 00 00 01 00 +T 88 00 00 00 7B E6 1F 4F 7A E6 00 47 E1 71 23 +R 00 00 01 00 +T 93 00 00 00 70 21 08 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 9E 00 00 00 E5 DD 6E 04 DD 66 05 23 23 5E 23 +R 00 00 01 00 +T A9 00 00 00 56 06 05 CD 00 00 00 00 7B E6 0F +R 00 00 01 00 02 08 00 00 +T B2 00 00 00 6F 7A E6 00 67 01 FF FF 09 4D 44 +R 00 00 01 00 +T BD 00 00 00 E1 71 23 70 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T C8 00 00 00 23 5E 23 56 06 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T D1 00 00 00 7B E6 7F 6F 7A E6 00 67 01 BC 07 +R 00 00 01 00 +T DC 00 00 00 09 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 DD 6E 02 DD 66 03 23 23 23 CB 7E +R 00 00 01 00 +T EE 00 00 00 CA 0C 02 00 00 +R 00 00 01 00 00 05 01 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 DD 6E 02 DD 66 03 23 23 7E C6 3C +R 00 00 01 00 +T FC 00 00 00 77 30 02 23 34 +R 00 00 01 00 +T 01 01 00 00 +R 00 00 01 00 +T 01 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 0C 01 00 00 23 46 0B 70 2B 71 +R 00 00 01 00 +T 12 01 00 00 +R 00 00 01 00 +T 12 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 23 +R 00 00 01 00 +T 1D 01 00 00 CB 7E CA 09 02 00 00 +R 00 00 01 00 00 07 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 2D 01 00 00 C6 18 77 30 02 23 34 +R 00 00 01 00 +T 34 01 00 00 +R 00 00 01 00 +T 34 01 00 00 21 08 00 09 56 23 66 6A 29 11 +R 00 00 01 00 +T 3E 01 00 00 00 00 00 00 19 56 23 66 6A DD 75 +R 00 00 01 00 00 04 03 00 +T 47 01 00 00 FA DD 74 FB 21 08 00 09 3E 01 AE +R 00 00 01 00 +T 52 01 00 00 23 B6 20 38 01 04 00 DD 5E F8 DD +R 00 00 01 00 +T 5D 01 00 00 56 F9 CD 00 00 00 00 7B B2 20 28 +R 00 00 01 00 02 07 09 00 +T 66 01 00 00 01 64 00 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 70 01 00 00 00 00 00 00 7B B2 20 10 01 90 01 +R 00 00 01 00 02 04 09 00 +T 79 01 00 00 DD 5E F8 DD 56 F9 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 82 01 00 00 7B B2 20 08 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 21 06 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 99 01 00 00 23 46 0B 70 2B 71 +R 00 00 01 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 21 06 00 DD 4E 02 DD 46 03 09 23 +R 00 00 01 00 +T AA 01 00 00 CB 7E 28 58 +R 00 00 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T B9 01 00 00 DD 86 FA 77 23 7E DD 8E FB 77 21 +R 00 00 01 00 +T C4 01 00 00 08 00 09 4E 23 46 0B 70 2B 71 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T D9 01 00 00 23 46 21 00 00 CD 00 00 00 00 38 +R 00 00 01 00 02 0A 08 00 +T E2 01 00 00 21 +R 00 00 01 00 +T E3 01 00 00 +R 00 00 01 00 +T E3 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T EE 01 00 00 C6 0C 77 30 02 23 34 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 DD 6E F8 DD 66 F9 2B DD 75 F8 DD +R 00 00 01 00 +T 00 02 00 00 74 F9 18 CA +R 00 00 01 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 18 99 +R 00 00 01 00 +T 06 02 00 00 +R 00 00 01 00 +T 06 02 00 00 C3 12 01 00 00 +R 00 00 01 00 00 05 01 00 +T 09 02 00 00 +R 00 00 01 00 +T 09 02 00 00 C3 E3 00 00 00 +R 00 00 01 00 00 05 01 00 +T 0C 02 00 00 +R 00 00 01 00 +T 0C 02 00 00 +R 00 00 01 00 +T 0C 02 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 17 02 00 00 68 01 3C 80 3E 80 AC 67 ED 42 DA +R 00 00 01 00 +T 22 02 00 00 4E 03 00 00 +R 00 00 01 00 00 04 01 00 +T 24 02 00 00 +R 00 00 01 00 +T 24 02 00 00 DD 6E 02 DD 66 03 23 23 7E D6 3C +R 00 00 01 00 +T 2F 02 00 00 77 23 7E DE 00 77 21 04 00 DD 4E +R 00 00 01 00 +T 3A 02 00 00 02 DD 46 03 09 34 23 20 01 34 +R 00 00 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 21 04 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 4F 02 00 00 23 66 68 01 18 80 3E 80 AC 67 ED +R 00 00 01 00 +T 5A 02 00 00 42 DA 4B 03 00 00 +R 00 00 01 00 00 06 01 00 +T 5E 02 00 00 +R 00 00 01 00 +T 5E 02 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 69 02 00 00 D6 18 77 23 7E DE 00 77 21 08 00 +R 00 00 01 00 +T 74 02 00 00 09 56 23 66 6A 29 11 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 7D 02 00 00 19 56 23 66 6A DD 75 FA DD 74 FB +R 00 00 01 00 +T 88 02 00 00 21 08 00 09 3E 01 AE 23 B6 20 38 +R 00 00 01 00 +T 93 02 00 00 01 04 00 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 9D 02 00 00 00 00 00 00 7B B2 20 28 01 64 00 +R 00 00 01 00 02 04 09 00 +T A6 02 00 00 DD 5E F8 DD 56 F9 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T AF 02 00 00 7B B2 20 10 01 90 01 DD 5E F8 DD +R 00 00 01 00 +T BA 02 00 00 56 F9 CD 00 00 00 00 7B B2 20 08 +R 00 00 01 00 02 07 09 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 34 +R 00 00 01 00 +T D6 02 00 00 23 20 01 34 +R 00 00 01 00 +T DA 02 00 00 +R 00 00 01 00 +T DA 02 00 00 +R 00 00 01 00 +T DA 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T E5 02 00 00 23 46 DD 6E FA DD 66 FB CD +R 00 00 01 00 +T EE 02 00 00 00 00 00 00 30 56 +R 00 00 01 00 02 04 08 00 +T F2 02 00 00 +R 00 00 01 00 +T F2 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T FD 02 00 00 DD 96 FA 77 23 7E DD 9E FB 77 21 +R 00 00 01 00 +T 08 03 00 00 08 00 09 34 23 20 01 34 +R 00 00 01 00 +T 10 03 00 00 +R 00 00 01 00 +T 10 03 00 00 +R 00 00 01 00 +T 10 03 00 00 21 08 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 1B 03 00 00 23 66 68 01 0C 80 3E 80 AC 67 ED +R 00 00 01 00 +T 26 03 00 00 42 38 1D +R 00 00 01 00 +T 29 03 00 00 +R 00 00 01 00 +T 29 03 00 00 21 08 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 34 03 00 00 D6 0C 77 23 7E DE 00 77 DD 34 F8 +R 00 00 01 00 +T 3F 03 00 00 20 03 DD 34 F9 +R 00 00 01 00 +T 44 03 00 00 +R 00 00 01 00 +T 44 03 00 00 18 CA +R 00 00 01 00 +T 46 03 00 00 +R 00 00 01 00 +T 46 03 00 00 18 92 +R 00 00 01 00 +T 48 03 00 00 +R 00 00 01 00 +T 48 03 00 00 C3 44 02 00 00 +R 00 00 01 00 00 05 01 00 +T 4B 03 00 00 +R 00 00 01 00 +T 4B 03 00 00 C3 0C 02 00 00 +R 00 00 01 00 00 05 01 00 +T 4E 03 00 00 +R 00 00 01 00 +T 4E 03 00 00 21 0A 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 59 03 00 00 21 94 F8 DD 4E F8 DD 46 F9 09 EB +R 00 00 01 00 +T 64 03 00 00 E1 73 23 72 21 CC 07 CD +R 00 00 01 00 +T 6C 03 00 00 00 00 00 00 30 12 +R 00 00 01 00 02 04 08 00 +T 70 03 00 00 +R 00 00 01 00 +T 70 03 00 00 DD 36 FA CD DD 36 FB 07 DD 36 FC +R 00 00 01 00 +T 7B 03 00 00 02 DD 36 FD 00 18 10 +R 00 00 01 00 +T 82 03 00 00 +R 00 00 01 00 +T 82 03 00 00 DD 36 FA B2 DD 36 FB 07 DD 36 FC +R 00 00 01 00 +T 8D 03 00 00 03 DD 36 FD 00 +R 00 00 01 00 +T 92 03 00 00 +R 00 00 01 00 +T 92 03 00 00 +R 00 00 01 00 +T 92 03 00 00 DD 4E F8 DD 46 F9 DD 6E FA DD 66 +R 00 00 01 00 +T 9D 03 00 00 FB CD 00 00 00 00 30 4D +R 00 00 01 00 02 06 08 00 +T A3 03 00 00 +R 00 00 01 00 +T A3 03 00 00 01 04 00 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T AD 03 00 00 00 00 00 00 7B B2 20 25 01 64 00 +R 00 00 01 00 02 04 09 00 +T B6 03 00 00 DD 5E FA DD 56 FB CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T BF 03 00 00 7B B2 20 10 01 90 01 DD 5E FA DD +R 00 00 01 00 +T CA 03 00 00 56 FB CD 00 00 00 00 7B B2 20 05 +R 00 00 01 00 02 07 09 00 +T D3 03 00 00 +R 00 00 01 00 +T D3 03 00 00 11 02 00 18 03 +R 00 00 01 00 +T D8 03 00 00 +R 00 00 01 00 +T D8 03 00 00 11 01 00 +R 00 00 01 00 +T DB 03 00 00 +R 00 00 01 00 +T DB 03 00 00 21 04 00 39 7E 83 77 23 7E 8A 77 +R 00 00 01 00 +T E6 03 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T EE 03 00 00 +R 00 00 01 00 +T EE 03 00 00 18 A2 +R 00 00 01 00 +T F0 03 00 00 +R 00 00 01 00 +T F0 03 00 00 AF DD 77 FA DD 77 FB 21 06 00 DD +R 00 00 01 00 +T FB 03 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 06 04 00 00 75 FE DD 74 FF +R 00 00 01 00 +T 0B 04 00 00 +R 00 00 01 00 +T 0B 04 00 00 21 08 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 16 04 00 00 23 46 DD 6E FA DD 66 FB CD +R 00 00 01 00 +T 1F 04 00 00 00 00 00 00 30 65 +R 00 00 01 00 02 04 08 00 +T 23 04 00 00 +R 00 00 01 00 +T 23 04 00 00 DD 6E FA DD 66 FB 29 01 +R 00 00 01 00 +T 2B 04 00 00 00 00 00 00 09 4E 23 46 21 06 00 +R 00 00 01 00 00 04 03 00 +T 34 04 00 00 39 7E 81 77 23 7E 88 77 3E 01 DD +R 00 00 01 00 +T 3F 04 00 00 AE FA DD B6 FB 20 38 01 04 00 DD +R 00 00 01 00 +T 4A 04 00 00 5E FA DD 56 FB CD 00 00 00 00 7B +R 00 00 01 00 02 0A 09 00 +T 53 04 00 00 B2 20 28 01 64 00 DD 5E FA DD 56 +R 00 00 01 00 +T 5E 04 00 00 FB CD 00 00 00 00 7B B2 20 10 01 +R 00 00 01 00 02 06 09 00 +T 67 04 00 00 90 01 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 70 04 00 00 00 00 00 00 7B B2 20 08 +R 00 00 01 00 02 04 09 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 +R 00 00 01 00 +T 76 04 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 7E 04 00 00 +R 00 00 01 00 +T 7E 04 00 00 +R 00 00 01 00 +T 7E 04 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 86 04 00 00 +R 00 00 01 00 +T 86 04 00 00 18 83 +R 00 00 01 00 +T 88 04 00 00 +R 00 00 01 00 +T 88 04 00 00 21 0C 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 93 04 00 00 DD 6E FE DD 66 FF DD 5E FC DD 56 +R 00 00 01 00 +T 9E 04 00 00 FD 19 EB 01 07 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T A7 04 00 00 E1 73 23 72 21 0E 00 DD 4E 02 DD +R 00 00 01 00 +T B2 04 00 00 46 03 09 DD 5E FE DD 56 FF 13 73 +R 00 00 01 00 +T BD 04 00 00 23 72 21 10 00 09 36 FF 23 36 FF +R 00 00 01 00 +T C8 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T CB 04 00 00 +R 00 00 01 00 +T CB 04 00 00 CD 00 00 00 00 21 00 00 E5 21 +R 00 00 01 00 02 05 04 00 +T D3 04 00 00 3C 00 E5 ED 4B 02 00 00 00 2A +R 00 00 01 00 02 09 05 00 +T DB 04 00 00 00 00 00 00 CD 00 00 00 00 E5 4B +R 00 00 01 00 02 04 05 00 02 09 07 00 +T E2 04 00 00 42 11 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 02 00 00 0B 01 00 +T E9 04 00 00 E1 21 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 06 02 00 02 0B 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 1F 00 1C 00 1F 00 1E 00 1F 00 +R 00 00 04 00 +T 0A 00 00 00 1E 00 1F 00 1F 00 1E 00 1F 00 +R 00 00 04 00 +T 14 00 00 00 1E 00 1F 00 +R 00 00 04 00 diff --git a/src/nos/lib/crt_large_lib/initgrup.rel b/src/nos/lib/crt_large_lib/initgrup.rel new file mode 100644 index 00000000..46093e88 --- /dev/null +++ b/src/nos/lib/crt_large_lib/initgrup.rel @@ -0,0 +1,102 @@ +XL4 +H 2 areas A global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _endgrent Ref00000000 +S _strcmp Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _getgrent Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _setgroups Ref00000000 +S _setgrent Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E1 flags 0 +S _initgroups Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 BA FF AF DD 77 FE +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FF DD 6E FE DD 66 FF 29 E5 +R 00 00 01 00 +T 14 00 00 00 21 04 00 39 5D 54 E1 19 71 23 70 +R 00 00 01 00 +T 1F 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 01 20 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 2D 00 00 00 AC 67 ED 42 D2 CC 00 00 00 CD +R 00 00 01 00 00 09 01 00 +T 35 00 00 00 00 00 00 00 DD 75 BA DD 74 BB 7D +R 00 00 01 00 02 04 05 00 +T 3E 00 00 00 B4 CA CC 00 00 00 +R 00 00 01 00 00 06 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 21 04 00 DD 4E BA DD 46 BB 09 46 +R 00 00 01 00 +T 4D 00 00 00 23 66 68 DD 4E 04 DD 46 05 A7 ED +R 00 00 01 00 +T 58 00 00 00 42 28 6E +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 21 06 00 DD 4E BA DD 46 BB 09 46 +R 00 00 01 00 +T 66 00 00 00 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 DD 6E FC DD 66 FD 7E 23 B6 28 4F +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 DD 4E 02 DD 46 03 DD 6E FC DD 66 +R 00 00 01 00 +T 85 00 00 00 FD 5E 23 56 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 09 02 00 +T 8E 00 00 00 20 2A +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 DD 6E FE DD 66 FF 29 E5 21 04 00 +R 00 00 01 00 +T A3 00 00 00 39 4D 44 E1 09 E5 21 04 00 DD 4E +R 00 00 01 00 +T AE 00 00 00 BA DD 46 BB 09 4E 23 46 E1 71 23 +R 00 00 01 00 +T B9 00 00 00 70 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T C5 00 00 00 34 FD +R 00 00 01 00 +T C7 00 00 00 +R 00 00 01 00 +T C7 00 00 00 18 A6 +R 00 00 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 C3 22 00 00 00 +R 00 00 01 00 00 05 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 CD 00 00 00 00 21 02 00 39 4D 44 +R 00 00 01 00 02 05 01 00 +T D5 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T DE 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_large_lib/isatty.rel b/src/nos/lib/crt_large_lib/isatty.rel new file mode 100644 index 00000000..f46d76ba --- /dev/null +++ b/src/nos/lib/crt_large_lib/isatty.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _fstat Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36 flags 0 +S _isatty Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E2 FF 21 00 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4D 44 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 7D A4 3C 28 12 DD 7E +R 00 00 01 00 02 04 03 00 +T 1B 00 00 00 E6 E6 00 6F DD 7E E7 E6 F0 67 3E +R 00 00 01 00 +T 26 00 00 00 20 AC B5 28 05 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 00 00 18 03 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 21 01 00 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/itoa.rel b/src/nos/lib/crt_large_lib/itoa.rel new file mode 100644 index 00000000..34cf9a13 --- /dev/null +++ b/src/nos/lib/crt_large_lib/itoa.rel @@ -0,0 +1,190 @@ +XL4 +H 2 areas C global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?UL_DIVASG_L03 Ref00000000 +S ?L_NEG_L03 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?UL_MOD_L03 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_MOD_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F8 flags 0 +S _itoa Def00000194 +S ___longtoa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D6 FF DD 6E 08 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 09 DD 75 F8 DD 74 F9 21 00 00 +R 00 00 01 00 +T 14 00 00 00 39 DD 75 FA DD 74 FB 21 2C 00 39 +R 00 00 01 00 +T 1F 00 00 00 DD 75 FC DD 74 FD 21 38 00 39 7E +R 00 00 01 00 +T 2A 00 00 00 D6 0A 77 DD 4E 0A DD 46 0B 21 +R 00 00 01 00 +T 34 00 00 00 24 00 CD 00 00 00 00 38 11 01 +R 00 00 01 00 02 07 07 00 +T 3C 00 00 00 02 80 DD 6E 0A DD 66 0B 3E 80 AC +R 00 00 01 00 +T 47 00 00 00 67 ED 42 30 03 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 C3 83 01 00 00 +R 00 00 01 00 00 05 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 DD 6E FC DD 66 FD 23 23 7E E6 00 +R 00 00 01 00 +T 5A 00 00 00 47 23 7E E6 80 B0 28 31 AF DD B6 +R 00 00 01 00 +T 65 00 00 00 0C 28 2B +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T 73 00 00 00 74 F9 2B 36 2D DD 4E 04 DD 46 05 +R 00 00 01 00 +T 7E 00 00 00 DD 6E 02 DD 66 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 87 00 00 00 DD 75 02 DD 74 03 DD 71 04 DD 70 +R 00 00 01 00 +T 92 00 00 00 05 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 DD 6E FC DD 66 FD 23 23 7E 23 B6 +R 00 00 01 00 +T 9E 00 00 00 20 02 +R 00 00 01 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 18 4E +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 DD 6E 0A DD 66 0B 7C 07 9F 4F 41 +R 00 00 01 00 +T AD 00 00 00 C5 E5 DD 4E 04 DD 46 05 DD 6E 02 +R 00 00 01 00 +T B8 00 00 00 DD 66 03 CD 00 00 00 00 E5 DD 6E +R 00 00 01 00 02 08 06 00 +T C1 00 00 00 FA DD 66 FB 23 DD 75 FA DD 74 FB +R 00 00 01 00 +T CC 00 00 00 2B C1 71 21 2C 00 39 DD 5E 0A DD +R 00 00 01 00 +T D7 00 00 00 56 0B 7A 07 9F 4F 41 CD +R 00 00 01 00 +T DF 00 00 00 00 00 00 00 DD 6E FC DD 66 FD 23 +R 00 00 01 00 02 04 01 00 +T E8 00 00 00 23 7E 23 B6 20 B4 +R 00 00 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 18 30 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 5E 02 DD 56 03 DD 4E 0A DD 46 +R 00 00 01 00 +T FB 00 00 00 0B CD 00 00 00 00 DD 6E FA DD 66 +R 00 00 01 00 02 06 08 00 +T 04 01 00 00 FB 23 DD 75 FA DD 74 FB 2B 73 DD +R 00 00 01 00 +T 0F 01 00 00 5E 02 DD 56 03 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 09 00 +T 18 01 00 00 6E FC DD 66 FD 73 23 72 +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 DD 6E FC DD 66 FD 7E 23 B6 20 C5 +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 21 00 00 39 4D 44 DD 6E FA DD 66 +R 00 00 01 00 +T 36 01 00 00 FB A7 ED 42 DD 75 FF +R 00 00 01 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 AF DD B6 FF 28 40 +R 00 00 01 00 +T 43 01 00 00 +R 00 00 01 00 +T 43 01 00 00 DD 6E FA DD 66 FB 2B DD 75 FA DD +R 00 00 01 00 +T 4E 01 00 00 74 FB 46 DD 70 FE 78 FE 0A 30 0A +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 DD 7E FE C6 30 DD 77 FE 18 09 +R 00 00 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 DD 7E FE DD 86 0E DD 77 FE +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T 77 01 00 00 74 F9 2B DD 46 FE 70 DD 35 FF 18 +R 00 00 01 00 +T 82 01 00 00 BA +R 00 00 01 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 DD 6E F8 DD 66 F9 36 00 DD 6E 08 +R 00 00 01 00 +T 8E 01 00 00 DD 66 09 C3 00 00 00 00 +R 00 00 01 00 02 08 03 00 +T 94 01 00 00 +R 00 00 01 00 +T 94 01 00 00 CD 00 00 00 00 FE FF DD 36 FE 41 +R 00 00 01 00 02 05 05 00 +T 9D 01 00 00 DD CB 09 7E 28 16 +R 00 00 01 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 DD 36 FE 61 DD 4E 08 DD 46 09 A7 +R 00 00 01 00 +T AE 01 00 00 21 00 00 ED 42 DD 75 08 DD 74 09 +R 00 00 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 DD 6E FE E5 0E 01 C5 DD 6E 08 DD +R 00 00 01 00 +T C4 01 00 00 66 09 E5 DD 6E 04 DD 66 05 E5 3E +R 00 00 01 00 +T CF 01 00 00 0A DD AE 08 DD B6 09 20 0D DD 5E +R 00 00 01 00 +T DA 01 00 00 02 DD 56 03 7A 07 9F 4F 41 18 09 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 DD 5E 02 DD 56 03 01 00 00 +R 00 00 01 00 +T EE 01 00 00 +R 00 00 01 00 +T EE 01 00 00 CD 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 00 05 01 00 +T F6 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 diff --git a/src/nos/lib/crt_large_lib/localtim.rel b/src/nos/lib/crt_large_lib/localtim.rel new file mode 100644 index 00000000..8b32f92b --- /dev/null +++ b/src/nos/lib/crt_large_lib/localtim.rel @@ -0,0 +1,23 @@ +XL4 +H 3 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___tm_conv Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S _localtime Def00000000 +A UDATA0 size 12 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 E5 4B 42 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 11 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 00 05 02 00 02 0A 04 00 +T 10 00 00 00 21 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0A 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/longjmp.rel b/src/nos/lib/crt_large_lib/longjmp.rel new file mode 100644 index 00000000..57e7e6b0 --- /dev/null +++ b/src/nos/lib/crt_large_lib/longjmp.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S _longjmp Def00000000 +T 00 00 00 00 78 B1 20 01 03 EB 5E 23 56 23 EB +R 00 00 01 00 +T 0B 00 00 00 F9 EB C5 4E 23 46 23 5E 23 56 23 +R 00 00 01 00 +T 16 00 00 00 D5 DD E1 5E 23 56 23 D5 FD E1 5E +R 00 00 01 00 +T 21 00 00 00 23 56 E1 D5 C9 +R 00 00 01 00 diff --git a/src/nos/lib/crt_large_lib/lsearch.rel b/src/nos/lib/crt_large_lib/lsearch.rel new file mode 100644 index 00000000..fb4e926d --- /dev/null +++ b/src/nos/lib/crt_large_lib/lsearch.rel @@ -0,0 +1,87 @@ +XL4 +H 2 areas 9 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _memcpy Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?CALL_IND_L09 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DA flags 0 +S _lfind Def00000000 +S _lsearch Def00000063 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 08 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 09 56 23 66 6A DD 75 FE DD 74 +R 00 00 01 00 +T 14 00 00 00 FF +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 DD 6E FE DD 66 FF 2B DD 75 FE DD +R 00 00 01 00 +T 20 00 00 00 74 FF 23 7D B4 28 36 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 DD 4E 02 DD 46 03 DD 5E 04 DD 56 +R 00 00 01 00 +T 32 00 00 00 05 DD 6E 0C DD 66 0D CD +R 00 00 01 00 +T 3A 00 00 00 00 00 00 00 7D B4 20 08 +R 00 00 01 00 02 04 04 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 DD 6E 04 DD 66 05 18 18 +R 00 00 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 DD 6E 0A DD 66 0B DD 4E 04 DD 46 +R 00 00 01 00 +T 53 00 00 00 05 09 DD 75 04 DD 74 05 18 B8 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 21 00 00 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 CD 00 00 00 00 FE FF DD 6E 0C DD +R 00 00 01 00 02 05 05 00 +T 6C 00 00 00 66 0D E5 DD 6E 0A DD 66 0B E5 DD +R 00 00 01 00 +T 77 00 00 00 6E 08 DD 66 09 E5 DD 5E 02 DD 56 +R 00 00 01 00 +T 82 00 00 00 03 CD 00 00 00 00 F1 F1 F1 DD 75 +R 00 00 01 00 00 06 01 00 +T 8B 00 00 00 FE DD 74 FF 7D B4 20 3E +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 02 DD +R 00 00 01 00 +T 9E 00 00 00 46 03 C5 DD 6E 08 DD 66 09 5E 23 +R 00 00 01 00 +T A9 00 00 00 56 DD 4E 0A DD 46 0B CD +R 00 00 01 00 +T B1 00 00 00 00 00 00 00 DD 6E 04 DD 66 05 19 +R 00 00 01 00 02 04 06 00 +T BA 00 00 00 EB C1 CD 00 00 00 00 F1 DD 75 FE +R 00 00 01 00 02 07 01 00 +T C3 00 00 00 DD 74 FF DD 6E 08 DD 66 09 34 23 +R 00 00 01 00 +T CE 00 00 00 20 01 34 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_large_lib/lstat.rel b/src/nos/lib/crt_large_lib/lstat.rel new file mode 100644 index 00000000..ad98fb2a --- /dev/null +++ b/src/nos/lib/crt_large_lib/lstat.rel @@ -0,0 +1,45 @@ +XL4 +H 2 areas 9 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _close Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _fstat Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _open Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5D flags 0 +S _lstat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 00 08 E5 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 6E 02 DD 66 03 E5 CD +R 00 00 01 00 +T 11 00 00 00 00 00 00 00 F1 F1 DD 75 FE DD 74 +R 00 00 01 00 02 04 06 00 +T 1A 00 00 00 FF CB 7C 28 17 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 2A 00 00 00 03 CD 00 00 00 00 DD 75 FC DD 74 +R 00 00 01 00 02 06 07 00 +T 33 00 00 00 FD 18 1E +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 DD 4E 04 DD 46 05 DD 5E FE DD 56 +R 00 00 01 00 +T 41 00 00 00 FF CD 00 00 00 00 DD 75 FC DD 74 +R 00 00 01 00 02 06 04 00 +T 4A 00 00 00 FD DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 52 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_large_lib/ltoa.rel b/src/nos/lib/crt_large_lib/ltoa.rel new file mode 100644 index 00000000..5f660abb --- /dev/null +++ b/src/nos/lib/crt_large_lib/ltoa.rel @@ -0,0 +1,42 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___longtoa Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5E flags 0 +S _ltoa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 36 FE 41 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD CB 0B 7E 28 16 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 DD 36 FE 61 DD 4E 0A DD 46 0B A7 +R 00 00 01 00 +T 1A 00 00 00 21 00 00 ED 42 DD 75 0A DD 74 0B +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E FE E5 3E 0A DD AE 0A DD B6 +R 00 00 01 00 +T 30 00 00 00 0B 20 04 3E 01 18 01 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 AF +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 4F C5 DD 6E 0A DD 66 0B E5 DD 6E +R 00 00 01 00 +T 43 00 00 00 08 DD 66 09 E5 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 4E 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 57 00 00 00 F1 F1 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 09 01 00 diff --git a/src/nos/lib/crt_large_lib/ltostr.rel b/src/nos/lib/crt_large_lib/ltostr.rel new file mode 100644 index 00000000..49f59ffc --- /dev/null +++ b/src/nos/lib/crt_large_lib/ltostr.rel @@ -0,0 +1,33 @@ +XL4 +H 3 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ultoa Ref00000000 +S _ltoa Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2C flags 0 +S _ultostr Def00000000 +S _ltostr Def00000016 +A UDATA0 size 22 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 08 DD 66 09 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 E5 21 00 00 00 00 E5 CD +R 00 00 01 00 00 06 02 00 +T 0F 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 0B 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 CD 00 00 00 00 DD 6E 08 DD 66 09 +R 00 00 01 00 02 05 03 00 +T 1F 00 00 00 E5 21 00 00 00 00 E5 CD +R 00 00 01 00 00 06 02 00 +T 25 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 0B 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/malloc.rel b/src/nos/lib/crt_large_lib/malloc.rel new file mode 100644 index 00000000..f26a18cc --- /dev/null +++ b/src/nos/lib/crt_large_lib/malloc.rel @@ -0,0 +1,194 @@ +XL4 +H 3 areas 9 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sbrk Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 222 flags 0 +S _malloc Def00000000 +A UDATA0 size 6 flags 0 +S ___malloc_last Def00000004 +S ___malloc_head Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 03 23 23 23 CB 3C CB 1D CB 3C +R 00 00 01 00 +T 14 00 00 00 CB 1D 23 DD 75 FE DD 74 FF 2A +R 00 00 01 00 +T 1E 00 00 00 04 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 00 04 02 00 +T 27 00 00 00 B4 20 11 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 36 FC 00 00 00 00 DD 36 FD +R 00 00 01 00 09 07 02 00 +T 31 00 00 00 00 00 00 00 21 00 00 00 00 22 +R 00 00 01 00 89 04 02 00 00 09 02 00 +T 36 00 00 00 02 00 00 00 22 04 00 00 00 +R 00 00 01 00 00 04 02 00 00 09 02 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T 46 00 00 00 68 DD 75 FA DD 74 FB +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T 58 00 00 00 68 DD 4E FA DD 46 FB A7 ED 42 CA +R 00 00 01 00 +T 63 00 00 00 F0 00 00 00 DD 6E FA DD 66 FB 46 +R 00 00 01 00 00 04 01 00 +T 6C 00 00 00 23 66 68 29 29 DD 4E FA DD 46 FB +R 00 00 01 00 +T 77 00 00 00 09 E5 03 03 69 60 4E 23 46 E1 A7 +R 00 00 01 00 +T 82 00 00 00 ED 42 20 6A +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T 91 00 00 00 68 ED 4B 04 00 00 00 A7 ED 42 20 +R 00 00 01 00 00 07 02 00 +T 9A 00 00 00 15 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T A6 00 00 00 68 23 23 46 23 66 68 22 +R 00 00 01 00 +T AE 00 00 00 04 00 00 00 +R 00 00 01 00 00 04 02 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 DD 6E FA DD 66 FB 23 23 7E 23 66 +R 00 00 01 00 +T BB 00 00 00 6F 4E 23 46 DD 6E FA DD 66 FB 7E +R 00 00 01 00 +T C6 00 00 00 81 77 23 7E 88 77 DD 6E FA DD 66 +R 00 00 01 00 +T D1 00 00 00 FB 23 23 E5 DD 4E FA DD 46 FB 03 +R 00 00 01 00 +T DC 00 00 00 03 69 60 4E 23 46 03 03 69 60 4E +R 00 00 01 00 +T E7 00 00 00 23 46 E1 71 23 70 C3 4D 00 00 00 +R 00 00 01 00 00 0B 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T FB 00 00 00 4E FE DD 46 FF A7 ED 42 DA +R 00 00 01 00 +T 04 01 00 00 AE 01 00 00 +R 00 00 01 00 00 04 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T 11 01 00 00 4E FE DD 46 FF A7 ED 42 20 1C +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 DD 6E FC DD 66 FD 23 23 E5 DD 4E +R 00 00 01 00 +T 26 01 00 00 FA DD 46 FB 03 03 69 60 4E 23 46 +R 00 00 01 00 +T 31 01 00 00 E1 71 23 70 18 56 +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 DD 6E FE DD 66 FF 29 29 DD 4E FA +R 00 00 01 00 +T 42 01 00 00 DD 46 FB 09 22 04 00 00 00 DD 6E +R 00 00 01 00 00 09 02 00 +T 4B 01 00 00 FC DD 66 FD 23 23 ED 5B +R 00 00 01 00 +T 53 01 00 00 04 00 00 00 73 23 72 2A +R 00 00 01 00 00 04 02 00 +T 59 01 00 00 04 00 00 00 23 23 E5 03 03 69 60 +R 00 00 01 00 00 04 02 00 +T 62 01 00 00 4E 23 46 E1 71 23 70 DD 6E FA DD +R 00 00 01 00 +T 6D 01 00 00 66 FB 46 23 66 68 DD 4E FE DD 46 +R 00 00 01 00 +T 78 01 00 00 FF A7 ED 42 E5 2A 04 00 00 00 D1 +R 00 00 01 00 00 0A 02 00 +T 81 01 00 00 73 23 72 DD 6E FA DD 66 FB 71 23 +R 00 00 01 00 +T 8C 01 00 00 70 +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 DD 6E FC DD 66 FD 22 04 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 96 01 00 00 DD 6E FA DD 66 FB 23 23 AF 77 23 +R 00 00 01 00 +T A1 01 00 00 77 21 04 00 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T AC 01 00 00 18 22 +R 00 00 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 2A 04 00 00 00 DD 4E FA DD 46 FB +R 00 00 01 00 00 05 02 00 +T B7 01 00 00 A7 ED 42 20 45 +R 00 00 01 00 +T BC 01 00 00 +R 00 00 01 00 +T BC 01 00 00 11 00 04 CD 00 00 00 00 DD 75 FA +R 00 00 01 00 02 08 05 00 +T C5 01 00 00 DD 74 FB 7D A4 3C 20 06 +R 00 00 01 00 +T CD 01 00 00 +R 00 00 01 00 +T CD 01 00 00 21 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 DD 6E FA DD 66 FB 36 00 23 36 01 +R 00 00 01 00 +T DE 01 00 00 DD 6E FA DD 66 FB 23 23 AF 77 23 +R 00 00 01 00 +T E9 01 00 00 77 21 04 00 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T F4 01 00 00 EB CD 00 00 00 00 2A 04 00 00 00 +R 00 00 01 00 02 06 03 00 00 0B 02 00 +T FB 01 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 DD 6E FA DD 66 FB DD 75 FC DD 74 +R 00 00 01 00 +T 0C 02 00 00 FD DD 6E FA DD 66 FB 23 23 46 23 +R 00 00 01 00 +T 17 02 00 00 66 68 DD 75 FA DD 74 FB C3 +R 00 00 01 00 +T 20 02 00 00 4D 00 00 00 +R 00 00 01 00 00 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/memccpy.rel b/src/nos/lib/crt_large_lib/memccpy.rel new file mode 100644 index 00000000..11cf06f9 --- /dev/null +++ b/src/nos/lib/crt_large_lib/memccpy.rel @@ -0,0 +1,49 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 65 flags 0 +S _memccpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 66 03 DD 75 FC DD 74 FD DD 71 FE +R 00 00 01 00 +T 14 00 00 00 DD 70 FF +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 22 00 00 00 74 0B 23 7D B4 28 36 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 34 00 00 00 74 FF 2B 46 DD 6E FC DD 66 FD 23 +R 00 00 01 00 +T 3F 00 00 00 DD 75 FC DD 74 FD 2B 70 48 06 00 +R 00 00 01 00 +T 4A 00 00 00 DD 6E 08 DD 66 09 A7 ED 42 20 08 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 6E FC DD 66 FD 18 05 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 18 B8 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 21 00 00 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/memchr.rel b/src/nos/lib/crt_large_lib/memchr.rel new file mode 100644 index 00000000..fdfd603c --- /dev/null +++ b/src/nos/lib/crt_large_lib/memchr.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4F flags 0 +S _memchr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 1C 00 00 00 74 09 23 7D B4 28 26 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 DD 6E FE DD 66 FF 4E 06 00 DD 6E +R 00 00 01 00 +T 2E 00 00 00 04 DD 66 05 A7 ED 42 20 08 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 6E FE DD 66 FF 18 0D +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 18 C8 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 21 00 00 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/memcmp.rel b/src/nos/lib/crt_large_lib/memcmp.rel new file mode 100644 index 00000000..69497dfa --- /dev/null +++ b/src/nos/lib/crt_large_lib/memcmp.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6D flags 0 +S _memcmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 71 FA DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 70 FB DD 6E 02 DD 66 03 DD 75 FC +R 00 00 01 00 +T 14 00 00 00 DD 74 FD DD 36 FE 00 DD 36 FF 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 2A 00 00 00 74 09 23 7D B4 28 2C +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 3C 00 00 00 74 FD 2B 46 DD 70 FF DD 6E FA DD +R 00 00 01 00 +T 47 00 00 00 66 FB 23 DD 75 FA DD 74 FB 2B 4E +R 00 00 01 00 +T 52 00 00 00 DD 71 FE 79 B8 28 02 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 18 02 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 18 C2 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 DD 4E FF 06 00 DD 6E FE 26 00 A7 +R 00 00 01 00 +T 68 00 00 00 ED 42 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/crt_large_lib/memcpy.rel b/src/nos/lib/crt_large_lib/memcpy.rel new file mode 100644 index 00000000..fabbdbdb --- /dev/null +++ b/src/nos/lib/crt_large_lib/memcpy.rel @@ -0,0 +1,35 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 52 flags 0 +S _memcpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 66 03 DD 75 FC DD 74 FD DD 71 FE +R 00 00 01 00 +T 14 00 00 00 DD 70 FF +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 22 00 00 00 74 09 23 7D B4 28 20 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 34 00 00 00 74 FF 2B 46 DD 6E FC DD 66 FD 23 +R 00 00 01 00 +T 3F 00 00 00 DD 75 FC DD 74 FD 2B 70 18 CE +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 01 00 diff --git a/src/nos/lib/crt_large_lib/memmove.rel b/src/nos/lib/crt_large_lib/memmove.rel new file mode 100644 index 00000000..d734999f --- /dev/null +++ b/src/nos/lib/crt_large_lib/memmove.rel @@ -0,0 +1,58 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _memcpy Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 95 flags 0 +S _memmove Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 03 DD 75 FC DD 74 FD DD 71 FE +R 00 00 01 00 +T 14 00 00 00 DD 70 FF A7 ED 42 DD 4E 08 DD 46 +R 00 00 01 00 +T 1F 00 00 00 09 A7 ED 42 38 19 +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E 08 DD 66 09 E5 DD 4E 04 DD +R 00 00 01 00 +T 30 00 00 00 46 05 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 39 00 00 00 00 00 00 00 F1 18 54 +R 00 00 01 00 02 04 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 21 00 00 39 7E DD 86 08 77 23 7E +R 00 00 01 00 +T 49 00 00 00 DD 8E 09 77 21 02 00 39 7E DD 86 +R 00 00 01 00 +T 54 00 00 00 08 77 23 7E DD 8E 09 77 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 67 00 00 00 74 09 23 7D B4 28 1E +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 6E FE DD 66 FF 2B DD 75 FE DD +R 00 00 01 00 +T 79 00 00 00 74 FF 46 DD 6E FC DD 66 FD 2B DD +R 00 00 01 00 +T 84 00 00 00 75 FC DD 74 FD 70 18 D0 +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/memset.rel b/src/nos/lib/crt_large_lib/memset.rel new file mode 100644 index 00000000..da43361f --- /dev/null +++ b/src/nos/lib/crt_large_lib/memset.rel @@ -0,0 +1,31 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 40 flags 0 +S _memset Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 1C 00 00 00 74 09 23 7D B4 28 14 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 DD 46 04 DD 6E FE DD 66 FF 23 DD +R 00 00 01 00 +T 2E 00 00 00 75 FE DD 74 FF 2B 70 18 DA +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 01 00 diff --git a/src/nos/lib/crt_large_lib/mkdir.rel b/src/nos/lib/crt_large_lib/mkdir.rel new file mode 100644 index 00000000..0be2344a --- /dev/null +++ b/src/nos/lib/crt_large_lib/mkdir.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _mknod Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1E flags 0 +S _mkdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 E5 79 E6 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 FF 6F 78 E6 0F 67 7D F6 00 4F 7C +R 00 00 01 00 +T 14 00 00 00 F6 40 47 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 08 01 00 +T 1C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/crt_large_lib/mktime.rel b/src/nos/lib/crt_large_lib/mktime.rel new file mode 100644 index 00000000..b99ee0d3 --- /dev/null +++ b/src/nos/lib/crt_large_lib/mktime.rel @@ -0,0 +1,41 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_32_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9C flags 0 +S _mktime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 04 00 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 4E 02 DD 46 03 09 56 23 66 6A 65 +R 00 00 01 00 +T 14 00 00 00 2E 00 29 29 29 E5 03 03 0A 6F 03 +R 00 00 01 00 +T 1F 00 00 00 0A 67 29 29 29 29 29 4D 44 E1 7D +R 00 00 01 00 +T 2A 00 00 00 B1 5F 7C B0 57 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 35 00 00 00 46 23 66 68 CB 2C CB 1D 7B B5 4F +R 00 00 01 00 +T 40 00 00 00 7A B4 47 DD 71 FC DD 70 FD 21 +R 00 00 01 00 +T 4A 00 00 00 0A 00 DD 4E 02 DD 46 03 09 56 23 +R 00 00 01 00 +T 55 00 00 00 66 6A 11 B0 FF 19 65 2E 00 29 E5 +R 00 00 01 00 +T 60 00 00 00 21 08 00 09 56 23 66 6A 23 29 29 +R 00 00 01 00 +T 6B 00 00 00 29 29 29 EB E1 7D B3 4F 7C B2 47 +R 00 00 01 00 +T 76 00 00 00 21 06 00 DD 5E 02 DD 56 03 19 79 +R 00 00 01 00 +T 81 00 00 00 B6 5F 78 23 B6 57 DD 73 FE DD 72 +R 00 00 01 00 +T 8C 00 00 00 FF DD 4E FE DD 46 FF DD 6E FC DD +R 00 00 01 00 +T 97 00 00 00 66 FD C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/crt_large_lib/opendir.rel b/src/nos/lib/crt_large_lib/opendir.rel new file mode 100644 index 00000000..b74f4996 --- /dev/null +++ b/src/nos/lib/crt_large_lib/opendir.rel @@ -0,0 +1,88 @@ +XL4 +H 2 areas A global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S _open Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _opendir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 00 00 39 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4D 44 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 7D B4 28 03 +R 00 00 01 00 02 04 08 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 C3 AF 00 00 00 +R 00 00 01 00 00 05 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 7E E4 E6 00 47 DD 7E E5 E6 40 +R 00 00 01 00 +T 26 00 00 00 B0 20 08 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 14 00 22 00 00 00 00 18 7E +R 00 00 01 00 02 08 04 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 01 08 00 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 3A 00 00 00 DD 75 FE DD 74 FF 7D B4 20 08 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 0C 00 22 00 00 00 00 18 63 +R 00 00 01 00 02 08 04 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 21 06 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 57 00 00 00 01 15 00 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 60 00 00 00 4D 44 E1 71 23 70 79 B0 20 11 +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 73 00 00 00 21 0C 00 22 00 00 00 00 18 34 +R 00 00 01 00 02 08 04 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 21 00 80 E5 DD 6E 02 DD 66 03 E5 +R 00 00 01 00 +T 86 00 00 00 CD 00 00 00 00 F1 F1 E5 DD 6E FE +R 00 00 01 00 02 05 07 00 +T 8F 00 00 00 DD 66 FF C1 71 23 70 CB 78 28 1A +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 21 06 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T A5 00 00 00 23 56 CD 00 00 00 00 59 50 CD +R 00 00 01 00 02 07 03 00 +T AD 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 21 00 00 18 06 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/perror.rel b/src/nos/lib/crt_large_lib/perror.rel new file mode 100644 index 00000000..3bcbd031 --- /dev/null +++ b/src/nos/lib/crt_large_lib/perror.rel @@ -0,0 +1,78 @@ +XL4 +H 3 areas 9 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strerror Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7D flags 0 +S _perror Def00000045 +A CSTR size B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E FE DD 66 FF AF B6 28 0A +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 18 EC +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 4E 02 DD 46 03 DD 6E FE DD 66 +R 00 00 01 00 +T 30 00 00 00 FF A7 ED 42 E5 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 3B 00 00 00 11 02 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 08 06 00 +T 43 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 CD 00 00 00 00 7B B2 20 08 +R 00 00 01 00 02 05 04 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 DD 36 02 00 00 00 00 DD 36 03 +R 00 00 01 00 09 07 02 00 +T 53 00 00 00 00 00 00 00 +R 00 00 01 00 89 04 02 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 5D 00 00 00 11 06 00 00 00 CD 00 00 00 00 ED +R 00 00 01 00 00 05 02 00 00 0A 01 00 +T 64 00 00 00 5B 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T 6B 00 00 00 75 02 DD 74 03 EB CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 74 00 00 00 11 09 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 00 05 02 00 00 0A 01 00 +T 7B 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 65 72 72 6F 72 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 3A 20 00 +R 00 00 02 00 +T 09 00 00 00 +R 00 00 02 00 +T 09 00 00 00 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/popen.rel b/src/nos/lib/crt_large_lib/popen.rel new file mode 100644 index 00000000..d0e3cadf --- /dev/null +++ b/src/nos/lib/crt_large_lib/popen.rel @@ -0,0 +1,171 @@ +XL4 +H 5 areas 10 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _execve Ref00000000 +S _environ Ref00000000 +S _close Ref00000000 +S ___fopen Ref00000000 +S _abort Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _pipe Ref00000000 +S _waitpid Ref00000000 +S _fork Ref00000000 +S _dup2 Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16B flags 0 +S _pclose Def0000013A +S _popen Def00000000 +A CSTR size E flags 0 +A IDATA0 size 8 flags 0 +A CDATA0 size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF 21 00 00 39 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 5D 54 CD 00 00 00 00 CB 7C 28 06 +R 00 00 01 00 02 07 09 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 21 00 00 C3 37 01 00 00 +R 00 00 01 00 00 08 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 6E 04 DD 66 05 7E FE 72 20 04 +R 00 00 01 00 +T 23 00 00 00 0E 01 18 02 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 0E 00 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 06 00 DD 71 FC DD 70 FD 79 B0 20 +R 00 00 01 00 +T 34 00 00 00 04 0E 01 18 02 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 0E 00 +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 06 00 DD 71 FE DD 70 FF CD +R 00 00 01 00 +T 44 00 00 00 00 00 00 00 DD 75 FA DD 74 FB CB +R 00 00 01 00 02 04 0B 00 +T 4D 00 00 00 7C 28 18 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 DD 5E F6 DD 56 F7 CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 59 00 00 00 DD 5E F8 DD 56 F9 CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 62 00 00 00 21 00 00 C3 37 01 00 00 +R 00 00 01 00 00 08 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 DD 7E FA DD B6 FB C2 FB 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 6E FE DD 66 FF 29 E5 21 02 00 +R 00 00 01 00 +T 7C 00 00 00 39 4D 44 E1 09 5E 23 56 CD +R 00 00 01 00 +T 85 00 00 00 00 00 00 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 02 04 03 00 +T 8E 00 00 00 00 00 00 00 DD 6E FC DD 66 FD 29 +R 00 00 01 00 02 04 03 00 +T 97 00 00 00 E5 21 02 00 39 4D 44 E1 09 46 23 +R 00 00 01 00 +T A2 00 00 00 66 68 DD 4E FC DD 46 FD A7 ED 42 +R 00 00 01 00 +T AD 00 00 00 28 32 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 DD 4E FC DD 46 FD DD 6E FC DD 66 +R 00 00 01 00 +T BA 00 00 00 FD 29 E5 21 02 00 39 5D 54 E1 19 +R 00 00 01 00 +T C5 00 00 00 5E 23 56 CD 00 00 00 00 DD 6E FC +R 00 00 01 00 02 08 0C 00 +T CE 00 00 00 DD 66 FD 29 E5 21 02 00 39 4D 44 +R 00 00 01 00 +T D9 00 00 00 E1 09 5E 23 56 CD 00 00 00 00 +R 00 00 01 00 02 0A 03 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 DD 6E 02 DD 66 03 22 04 00 00 00 +R 00 00 01 00 00 0B 03 00 +T EA 00 00 00 2A 00 00 00 00 E5 01 00 00 00 00 +R 00 00 01 00 02 05 02 00 00 0B 03 00 +T F1 00 00 00 11 06 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 00 05 02 00 02 0A 01 00 +T F8 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T FB 00 00 00 +R 00 00 01 00 +T FB 00 00 00 DD 6E FC DD 66 FD 29 E5 21 02 00 +R 00 00 01 00 +T 06 01 00 00 39 4D 44 E1 09 5E 23 56 CD +R 00 00 01 00 +T 0F 01 00 00 00 00 00 00 DD 6E 04 DD 66 05 E5 +R 00 00 01 00 02 04 03 00 +T 18 01 00 00 21 00 00 E5 DD 6E FE DD 66 FF 29 +R 00 00 01 00 +T 23 01 00 00 E5 21 06 00 39 4D 44 E1 09 4E 23 +R 00 00 01 00 +T 2E 01 00 00 46 11 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 09 04 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 08 00 +T 43 01 00 00 56 03 CD 00 00 00 00 7D B4 28 05 +R 00 00 01 00 02 07 0D 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 21 FF FF 18 17 +R 00 00 01 00 +T 51 01 00 00 +R 00 00 01 00 +T 51 01 00 00 21 00 00 E5 21 02 00 39 4D 44 11 +R 00 00 01 00 +T 5C 01 00 00 FF FF CD 00 00 00 00 F1 DD 6E FE +R 00 00 01 00 02 07 0A 00 +T 65 01 00 00 DD 66 FF +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 73 68 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 2D 63 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 2F 62 69 6E 2F 73 68 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 03 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 06 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/crt_large_lib/printf.rel b/src/nos/lib/crt_large_lib/printf.rel new file mode 100644 index 00000000..ab1b113f --- /dev/null +++ b/src/nos/lib/crt_large_lib/printf.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _stdout Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _vfprintf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2A flags 0 +S _printf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0C 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 4E 08 DD 46 09 11 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 1D 00 00 00 CD 00 00 00 00 F1 DD 75 FE DD 74 +R 00 00 01 00 02 05 05 00 +T 26 00 00 00 FF C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/crt_large_lib/putenv.rel b/src/nos/lib/crt_large_lib/putenv.rel new file mode 100644 index 00000000..a52a4fc6 --- /dev/null +++ b/src/nos/lib/crt_large_lib/putenv.rel @@ -0,0 +1,189 @@ +XL4 +H 4 areas D global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _environ Ref00000000 +S _memcpy Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _malloc Ref00000000 +S _memcmp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1B7 flags 0 +S _putenv Def00000000 +A IDATA0 size 4 flags 0 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF 01 3D 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 5E 02 DD 56 03 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 03 00 +T 12 00 00 00 75 FA DD 74 FB 7D B4 20 11 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 24 00 00 00 DD 75 FE DD 74 FF 18 15 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 4E 02 DD 46 03 DD 6E FA DD 66 +R 00 00 01 00 +T 37 00 00 00 FB A7 ED 42 DD 75 FE DD 74 FF +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 2A 00 00 00 00 DD 75 F6 DD 74 F7 +R 00 00 01 00 02 05 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 DD 6E F6 DD 66 F7 46 23 66 68 DD +R 00 00 01 00 +T 55 00 00 00 75 FC DD 74 FD 7D B4 CA +R 00 00 01 00 +T 5D 00 00 00 E1 00 00 00 +R 00 00 01 00 00 04 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E 02 DD 66 03 E5 DD 6E FC DD +R 00 00 01 00 +T 6A 00 00 00 66 FD 7E E1 BE 20 60 DD 6E FE DD +R 00 00 01 00 +T 75 00 00 00 66 FF DD 4E FC DD 46 FD 09 7E FE +R 00 00 01 00 +T 80 00 00 00 3D 20 4E DD 6E FE DD 66 FF E5 DD +R 00 00 01 00 +T 8B 00 00 00 4E FC DD 46 FD DD 5E 02 DD 56 03 +R 00 00 01 00 +T 96 00 00 00 CD 00 00 00 00 F1 7D B4 20 33 +R 00 00 01 00 02 05 0B 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 DD 6E F6 DD 66 F7 23 23 46 23 66 +R 00 00 01 00 +T A9 00 00 00 68 E5 DD 6E F6 DD 66 F7 C1 71 23 +R 00 00 01 00 +T B4 00 00 00 70 79 B0 28 0F +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 DD 7E F6 C6 02 DD 77 F6 30 03 DD +R 00 00 01 00 +T C4 00 00 00 34 F7 +R 00 00 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 18 D6 +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 02 00 +T CF 00 00 00 18 10 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 7E F6 C6 02 DD 77 F6 30 03 DD +R 00 00 01 00 +T DC 00 00 00 34 F7 +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 C3 4A 00 00 00 +R 00 00 01 00 00 05 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 DD 7E FA DD B6 FB 20 06 +R 00 00 01 00 +T E9 00 00 00 +R 00 00 01 00 +T E9 00 00 00 21 00 00 C3 B4 01 00 00 +R 00 00 01 00 00 08 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 ED 4B 02 00 00 00 21 00 00 CD +R 00 00 01 00 00 06 02 00 +T F7 00 00 00 00 00 00 00 DA 87 01 00 00 +R 00 00 01 00 02 04 09 00 00 09 01 00 +T FC 00 00 00 +R 00 00 01 00 +T FC 00 00 00 ED 4B 00 00 00 00 DD 6E F6 DD 66 +R 00 00 01 00 02 06 01 00 +T 05 01 00 00 F7 A7 ED 42 CB 2C CB 1D 01 05 00 +R 00 00 01 00 +T 10 01 00 00 09 29 EB CD 00 00 00 00 DD 75 F8 +R 00 00 01 00 02 08 0A 00 +T 19 01 00 00 DD 74 F9 7D B4 20 06 +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 21 FF FF C3 B4 01 00 00 +R 00 00 01 00 00 08 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 ED 4B 00 00 00 00 DD 6E F6 DD 66 +R 00 00 01 00 02 06 01 00 +T 2F 01 00 00 F7 A7 ED 42 CB 2C CB 1D 23 29 E5 +R 00 00 01 00 +T 3A 01 00 00 ED 4B 00 00 00 00 DD 5E F8 DD 56 +R 00 00 01 00 02 06 01 00 +T 43 01 00 00 F9 CD 00 00 00 00 F1 ED 4B +R 00 00 01 00 02 06 02 00 +T 4A 01 00 00 00 00 00 00 DD 6E F6 DD 66 F7 A7 +R 00 00 01 00 02 04 01 00 +T 53 01 00 00 ED 42 CB 2C CB 1D 29 DD 4E F8 DD +R 00 00 01 00 +T 5E 01 00 00 46 F9 09 DD 75 F6 DD 74 F7 21 +R 00 00 01 00 +T 68 01 00 00 04 00 22 02 00 00 00 2A +R 00 00 01 00 00 07 02 00 +T 6E 01 00 00 00 00 00 00 7D B4 28 07 +R 00 00 01 00 00 04 02 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 02 00 02 0B 07 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 DD 6E F8 DD 66 F9 22 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 84 01 00 00 22 00 00 00 00 +R 00 00 01 00 00 05 02 00 +T 87 01 00 00 +R 00 00 01 00 +T 87 01 00 00 DD 6E F6 DD 66 F7 4D 44 03 03 DD +R 00 00 01 00 +T 92 01 00 00 71 F6 DD 70 F7 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 9D 01 00 00 71 23 70 DD 6E F6 DD 66 F7 AF 77 +R 00 00 01 00 +T A8 01 00 00 23 77 2A 02 00 00 00 2B 22 +R 00 00 01 00 00 07 02 00 +T AF 01 00 00 02 00 00 00 21 00 00 +R 00 00 01 00 00 04 02 00 +T B4 01 00 00 +R 00 00 01 00 +T B4 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/putgetch.rel b/src/nos/lib/crt_large_lib/putgetch.rel new file mode 100644 index 00000000..d76679df --- /dev/null +++ b/src/nos/lib/crt_large_lib/putgetch.rel @@ -0,0 +1,41 @@ +XL4 +H 2 areas 9 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 40 flags 0 +S __putchar Def00000000 +S __getchar Def00000017 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 01 00 E5 21 +R 00 00 01 00 02 05 04 00 +T 08 00 00 00 04 00 39 4D 44 11 01 00 CD +R 00 00 01 00 +T 11 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 0A 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 CD 00 00 00 00 FE FF 21 01 00 E5 +R 00 00 01 00 02 05 06 00 +T 20 00 00 00 21 02 00 39 4D 44 11 00 00 CD +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 F1 3E 01 AD B4 20 07 +R 00 00 01 00 02 04 02 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 DD 6E FE 26 00 18 03 +R 00 00 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 21 FF FF +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/putpwent.rel b/src/nos/lib/crt_large_lib/putpwent.rel new file mode 100644 index 00000000..610dd1f8 --- /dev/null +++ b/src/nos/lib/crt_large_lib/putpwent.rel @@ -0,0 +1,66 @@ +XL4 +H 3 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S _fprintf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7E flags 0 +S _putpwent Def00000000 +A CSTR size 16 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 08 DD 7E +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 04 DD B6 05 20 0B +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 18 00 00 00 18 61 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 25 00 00 00 23 56 D5 21 0A 00 09 5E 23 56 D5 +R 00 00 01 00 +T 30 00 00 00 21 08 00 09 5E 23 56 D5 21 06 00 +R 00 00 01 00 +T 3B 00 00 00 09 5E 23 56 D5 21 04 00 09 5E 23 +R 00 00 01 00 +T 46 00 00 00 56 D5 03 03 69 60 4E 23 46 C5 DD +R 00 00 01 00 +T 51 00 00 00 6E 02 DD 66 03 4E 23 46 C5 21 +R 00 00 01 00 +T 5B 00 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 00 04 02 00 +T 64 00 00 00 E5 CD 00 00 00 00 EB 21 12 00 39 +R 00 00 01 00 02 06 05 00 +T 6D 00 00 00 F9 EB CB 7C 28 05 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 21 00 00 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 73 3A 25 73 3A 25 75 3A 25 75 +R 00 00 02 00 +T 0B 00 00 00 3A 25 73 3A 25 73 3A 25 73 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/qsort.rel b/src/nos/lib/crt_large_lib/qsort.rel new file mode 100644 index 00000000..af75f0af --- /dev/null +++ b/src/nos/lib/crt_large_lib/qsort.rel @@ -0,0 +1,305 @@ +XL4 +H 3 areas A global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CALL_IND_L09 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?US_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 372 flags 0 +S _qsort Def0000032E +A UDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF +R 00 00 01 00 02 05 05 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 DD 4E 04 DD 46 05 DD 6E 02 DD 66 +R 00 00 01 00 +T 10 00 00 00 03 A7 ED 42 38 03 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 DD 6E 02 DD 66 03 DD 75 F6 DD 74 +R 00 00 01 00 +T 24 00 00 00 F7 DD 6E 04 DD 66 05 DD 75 F8 DD +R 00 00 01 00 +T 2F 00 00 00 74 F9 DD 4E 02 DD 46 03 DD 6E 04 +R 00 00 01 00 +T 3A 00 00 00 DD 66 05 A7 ED 42 DD 4E 08 DD 46 +R 00 00 01 00 +T 45 00 00 00 09 09 EB 69 60 29 4D 44 CD +R 00 00 01 00 +T 4E 00 00 00 00 00 00 00 DD 4E 08 DD 46 09 CD +R 00 00 01 00 02 04 08 00 +T 57 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 19 +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 DD 75 FC DD 74 FD DD 75 FA DD 74 +R 00 00 01 00 +T 6B 00 00 00 FB +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 4E FA DD 46 FB DD 6E F6 DD 66 +R 00 00 01 00 +T 77 00 00 00 F7 A7 ED 42 30 61 DD 4E FA DD 46 +R 00 00 01 00 +T 82 00 00 00 FB DD 5E F6 DD 56 F7 2A +R 00 00 01 00 +T 8A 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 00 04 02 00 02 09 04 00 +T 91 00 00 00 FE DD 74 FF 4D 44 21 00 00 CD +R 00 00 01 00 +T 9B 00 00 00 00 00 00 00 38 3F +R 00 00 01 00 02 04 07 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 DD CB FF 7E 28 11 +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 21 00 00 39 7E DD 86 08 77 23 7E +R 00 00 01 00 +T B0 00 00 00 DD 8E 09 77 18 26 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 21 04 00 39 7E DD 96 08 77 23 7E +R 00 00 01 00 +T C1 00 00 00 DD 9E 09 77 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T CC 00 00 00 DD 4E FA DD 46 FB DD 5E F6 DD 56 +R 00 00 01 00 +T D7 00 00 00 F7 CD 78 02 00 00 E1 +R 00 00 01 00 00 06 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 18 8E +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 DD 4E F8 DD 46 F9 DD 6E FC DD 66 +R 00 00 01 00 +T E9 00 00 00 FD A7 ED 42 D2 E3 01 00 00 +R 00 00 01 00 00 09 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 4E FC DD 46 FD DD 5E F8 DD 56 +R 00 00 01 00 +T FB 00 00 00 F9 2A 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 02 00 02 0B 04 00 +T 02 01 00 00 DD 75 FE DD 74 FF CB 7C CA +R 00 00 01 00 +T 0B 01 00 00 A1 01 00 00 +R 00 00 01 00 00 04 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 DD 4E FA DD 46 FB DD 6E F6 DD 66 +R 00 00 01 00 +T 18 01 00 00 F7 A7 ED 42 30 38 +R 00 00 01 00 +T 1E 01 00 00 +R 00 00 01 00 +T 1E 01 00 00 DD 6E 08 DD 66 09 E5 DD 4E F8 DD +R 00 00 01 00 +T 29 01 00 00 46 F9 DD 5E F6 DD 56 F7 CD +R 00 00 01 00 +T 32 01 00 00 78 02 00 00 E1 21 00 00 39 7E DD +R 00 00 01 00 00 04 01 00 +T 3B 01 00 00 86 08 77 23 7E DD 8E 09 77 21 +R 00 00 01 00 +T 45 01 00 00 02 00 39 7E DD 96 08 77 23 7E DD +R 00 00 01 00 +T 50 01 00 00 9E 09 77 C3 6C 00 00 00 +R 00 00 01 00 00 08 01 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 21 06 00 39 7E DD 86 08 77 23 7E +R 00 00 01 00 +T 61 01 00 00 DD 8E 09 77 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T 6C 01 00 00 DD 6E F8 DD 66 F9 E5 DD 4E FC DD +R 00 00 01 00 +T 77 01 00 00 46 FD DD 5E F6 DD 56 F7 CD +R 00 00 01 00 +T 80 01 00 00 C8 02 00 00 E1 E1 21 04 00 39 7E +R 00 00 01 00 00 04 01 00 +T 89 01 00 00 DD 86 08 77 23 7E DD 8E 09 77 DD +R 00 00 01 00 +T 94 01 00 00 6E FA DD 66 FB DD 75 F6 DD 74 F7 +R 00 00 01 00 +T 9F 01 00 00 18 3F +R 00 00 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 DD 7E FE DD B6 FF 20 28 +R 00 00 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 21 06 00 39 7E DD 86 08 77 23 7E +R 00 00 01 00 +T B4 01 00 00 DD 8E 09 77 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T BF 01 00 00 DD 4E FC DD 46 FD DD 5E F8 DD 56 +R 00 00 01 00 +T CA 01 00 00 F9 CD 78 02 00 00 E1 18 0F +R 00 00 01 00 00 06 01 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 21 02 00 39 7E DD 96 08 77 23 7E +R 00 00 01 00 +T DC 01 00 00 DD 9E 09 77 +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 C3 DE 00 00 00 +R 00 00 01 00 00 05 01 00 +T E3 01 00 00 +R 00 00 01 00 +T E3 01 00 00 DD 4E FA DD 46 FB DD 6E F6 DD 66 +R 00 00 01 00 +T EE 01 00 00 F7 A7 ED 42 30 4C +R 00 00 01 00 +T F4 01 00 00 +R 00 00 01 00 +T F4 01 00 00 21 04 00 39 7E DD 96 08 77 23 7E +R 00 00 01 00 +T FF 01 00 00 DD 9E 09 77 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T 0A 02 00 00 DD 6E F6 DD 66 F7 E5 DD 4E FA DD +R 00 00 01 00 +T 15 02 00 00 46 FB DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 1E 02 00 00 C8 02 00 00 E1 E1 21 06 00 39 7E +R 00 00 01 00 00 04 01 00 +T 27 02 00 00 DD 96 08 77 23 7E DD 9E 09 77 DD +R 00 00 01 00 +T 32 02 00 00 6E FC DD 66 FD DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 3D 02 00 00 C3 6C 00 00 00 +R 00 00 01 00 00 05 01 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 DD 6E 08 DD 66 09 E5 DD 4E 08 DD +R 00 00 01 00 +T 4B 02 00 00 46 09 DD 6E FA DD 66 FB A7 ED 42 +R 00 00 01 00 +T 56 02 00 00 4D 44 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 5F 02 00 00 00 00 00 00 E1 DD 6E 08 DD 66 09 +R 00 00 01 00 00 04 01 00 +T 68 02 00 00 DD 4E FC DD 46 FD 09 DD 75 02 DD +R 00 00 01 00 +T 73 02 00 00 74 03 C3 05 00 00 00 +R 00 00 01 00 00 07 01 00 +T 78 02 00 00 +R 00 00 01 00 +T 78 02 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 05 00 +T 7D 02 00 00 +R 00 00 01 00 +T 7D 02 00 00 +R 00 00 01 00 +T 7D 02 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 88 02 00 00 74 09 23 7D B4 28 36 +R 00 00 01 00 +T 8F 02 00 00 +R 00 00 01 00 +T 8F 02 00 00 DD 6E 02 DD 66 03 4E 06 00 DD 71 +R 00 00 01 00 +T 9A 02 00 00 FE DD 70 FF DD 6E 04 DD 66 05 56 +R 00 00 01 00 +T A5 02 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T B0 02 00 00 74 03 2B 72 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T BB 02 00 00 DD 75 04 DD 74 05 2B 71 18 B8 +R 00 00 01 00 +T C5 02 00 00 +R 00 00 01 00 +T C5 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 05 00 +T CD 02 00 00 +R 00 00 01 00 +T CD 02 00 00 +R 00 00 01 00 +T CD 02 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T D8 02 00 00 74 0B 23 7D B4 28 4C +R 00 00 01 00 +T DF 02 00 00 +R 00 00 01 00 +T DF 02 00 00 DD 6E 02 DD 66 03 4E 06 00 DD 71 +R 00 00 01 00 +T EA 02 00 00 FE DD 70 FF DD 6E 08 DD 66 09 56 +R 00 00 01 00 +T F5 02 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 00 03 00 00 74 03 2B 72 DD 6E 04 DD 66 05 56 +R 00 00 01 00 +T 0B 03 00 00 DD 6E 08 DD 66 09 23 DD 75 08 DD +R 00 00 01 00 +T 16 03 00 00 74 09 2B 72 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T 21 03 00 00 DD 75 04 DD 74 05 2B 71 18 A2 +R 00 00 01 00 +T 2B 03 00 00 +R 00 00 01 00 +T 2B 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 2E 03 00 00 +R 00 00 01 00 +T 2E 03 00 00 CD 00 00 00 00 79 B0 20 02 +R 00 00 01 00 02 05 03 00 +T 35 03 00 00 +R 00 00 01 00 +T 35 03 00 00 18 38 +R 00 00 01 00 +T 37 03 00 00 +R 00 00 01 00 +T 37 03 00 00 DD 6E 0A DD 66 0B 22 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 40 03 00 00 DD 6E 08 DD 66 09 E5 21 FF FF DD +R 00 00 01 00 +T 4B 03 00 00 4E 04 DD 46 05 09 4D 44 DD 5E 08 +R 00 00 01 00 +T 56 03 00 00 DD 56 09 CD 00 00 00 00 DD 6E 02 +R 00 00 01 00 02 08 06 00 +T 5F 03 00 00 DD 66 03 19 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 6A 03 00 00 03 CD 00 00 00 00 E1 +R 00 00 01 00 00 06 01 00 +T 6F 03 00 00 +R 00 00 01 00 +T 6F 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/rand.rel b/src/nos/lib/crt_large_lib/rand.rel new file mode 100644 index 00000000..1669265f --- /dev/null +++ b/src/nos/lib/crt_large_lib/rand.rel @@ -0,0 +1,126 @@ +XL4 +H 4 areas A global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?US_MOD_L02 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13E flags 0 +S _srand Def000000F8 +S _rand Def00000000 +A IDATA0 size 6 flags 0 +A CDATA0 size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 01 CE 00 ED +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 5B 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 00 05 02 00 02 0A 07 00 +T 10 00 00 00 73 FE DD 72 FF 01 1F 00 CD +R 00 00 01 00 +T 19 00 00 00 00 00 00 00 D5 01 CE 00 DD 5E FE +R 00 00 01 00 02 04 05 00 +T 22 00 00 00 DD 56 FF CD 00 00 00 00 2A +R 00 00 01 00 02 08 05 00 +T 29 00 00 00 00 00 00 00 A7 ED 52 4D 44 11 +R 00 00 01 00 00 04 02 00 +T 31 00 00 00 9D 00 CD 00 00 00 00 EB D1 A7 ED +R 00 00 01 00 02 07 05 00 +T 3A 00 00 00 52 22 00 00 00 00 CB 7C 28 0B +R 00 00 01 00 00 06 02 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 21 6B 7E ED 4B 00 00 00 00 09 22 +R 00 00 01 00 00 09 02 00 +T 4B 00 00 00 00 00 00 00 +R 00 00 01 00 00 04 02 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 01 D9 00 ED 5B 02 00 00 00 CD +R 00 00 01 00 00 09 02 00 +T 55 00 00 00 00 00 00 00 DD 73 FE DD 72 FF 01 +R 00 00 01 00 02 04 07 00 +T 5E 00 00 00 2D 00 CD 00 00 00 00 D5 01 D9 00 +R 00 00 01 00 02 07 05 00 +T 67 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 70 00 00 00 2A 02 00 00 00 A7 ED 52 4D 44 11 +R 00 00 01 00 00 05 02 00 +T 79 00 00 00 92 00 CD 00 00 00 00 EB D1 A7 ED +R 00 00 01 00 02 07 05 00 +T 82 00 00 00 52 22 02 00 00 00 CB 7C 28 0B +R 00 00 01 00 00 06 02 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 EF 7B ED 4B 02 00 00 00 09 22 +R 00 00 01 00 00 09 02 00 +T 93 00 00 00 02 00 00 00 +R 00 00 01 00 00 04 02 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 01 DE 00 ED 5B 04 00 00 00 CD +R 00 00 01 00 00 09 02 00 +T 9D 00 00 00 00 00 00 00 DD 73 FE DD 72 FF 01 +R 00 00 01 00 02 04 07 00 +T A6 00 00 00 85 00 CD 00 00 00 00 D5 01 DE 00 +R 00 00 01 00 02 07 05 00 +T AF 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T B8 00 00 00 2A 04 00 00 00 A7 ED 52 4D 44 11 +R 00 00 01 00 00 05 02 00 +T C1 00 00 00 8E 00 CD 00 00 00 00 EB D1 A7 ED +R 00 00 01 00 02 07 05 00 +T CA 00 00 00 52 22 04 00 00 00 CB 7C 28 0B +R 00 00 01 00 00 06 02 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 21 A9 7B ED 4B 04 00 00 00 09 22 +R 00 00 01 00 00 09 02 00 +T DB 00 00 00 04 00 00 00 +R 00 00 01 00 00 04 02 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 2A 00 00 00 00 ED 4B 02 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 02 00 +T E4 00 00 00 7D A9 5F 7C A8 57 2A 04 00 00 00 +R 00 00 01 00 00 0B 02 00 +T ED 00 00 00 7B AD 4F 7A AC 47 69 60 C3 +R 00 00 01 00 +T F6 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 CD 00 00 00 00 21 02 00 39 7E E6 +R 00 00 01 00 02 05 03 00 +T 01 01 00 00 FF 77 23 7E E6 7F 77 01 6A 7E DD +R 00 00 01 00 +T 0C 01 00 00 5E 02 DD 56 03 CD 00 00 00 00 13 +R 00 00 01 00 02 0A 06 00 +T 15 01 00 00 ED 53 00 00 00 00 01 EE 7B DD 5E +R 00 00 01 00 00 06 02 00 +T 1E 01 00 00 02 DD 56 03 CD 00 00 00 00 13 ED +R 00 00 01 00 02 09 06 00 +T 27 01 00 00 53 02 00 00 00 01 A8 7B DD 5E 02 +R 00 00 01 00 00 05 02 00 +T 30 01 00 00 DD 56 03 CD 00 00 00 00 13 ED 53 +R 00 00 01 00 02 08 06 00 +T 39 01 00 00 04 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 04 02 00 02 09 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 00 00 00 00 01 00 01 00 01 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/readdir.rel b/src/nos/lib/crt_large_lib/readdir.rel new file mode 100644 index 00000000..735017be --- /dev/null +++ b/src/nos/lib/crt_large_lib/readdir.rel @@ -0,0 +1,87 @@ +XL4 +H 2 areas 9 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strncpy Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D4 flags 0 +S _readdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EE FF DD 7E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 B6 03 28 1A 21 06 00 DD 4E 02 DD +R 00 00 01 00 +T 14 00 00 00 46 03 09 7E 23 B6 28 0B DD 6E 02 +R 00 00 01 00 +T 1F 00 00 00 DD 66 03 7E 23 B6 20 0C +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 21 0E 00 22 00 00 00 00 +R 00 00 01 00 02 08 06 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 C3 D1 00 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 DD 36 F0 00 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 7E F0 B7 20 21 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 10 00 E5 21 02 00 39 4D 44 DD +R 00 00 01 00 +T 48 00 00 00 6E 02 DD 66 03 5E 23 56 CD +R 00 00 01 00 +T 51 00 00 00 00 00 00 00 F1 3E 10 AD B4 28 02 +R 00 00 01 00 02 04 04 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 18 D1 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 18 D9 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 69 00 00 00 23 66 6A DD 75 FE DD 74 FF DD 5E +R 00 00 01 00 +T 74 00 00 00 EE DD 56 EF 73 23 72 DD 6E FE DD +R 00 00 01 00 +T 7F 00 00 00 66 FF 23 23 E5 69 60 23 23 4E 23 +R 00 00 01 00 +T 8A 00 00 00 46 03 70 2B 71 0B E1 71 23 70 21 +R 00 00 01 00 +T 95 00 00 00 0E 00 E5 21 02 00 39 01 02 00 09 +R 00 00 01 00 +T A0 00 00 00 4D 44 21 06 00 DD 5E FE DD 56 FF +R 00 00 01 00 +T AB 00 00 00 19 EB CD 00 00 00 00 F1 21 14 00 +R 00 00 01 00 02 07 01 00 +T B4 00 00 00 DD 4E FE DD 46 FF 09 36 00 21 +R 00 00 01 00 +T BE 00 00 00 04 00 09 E5 21 06 00 09 EB CD +R 00 00 01 00 +T C8 00 00 00 00 00 00 00 EB E1 73 23 72 69 60 +R 00 00 01 00 02 04 02 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_large_lib/readlink.rel b/src/nos/lib/crt_large_lib/readlink.rel new file mode 100644 index 00000000..b2bcf8fc --- /dev/null +++ b/src/nos/lib/crt_large_lib/readlink.rel @@ -0,0 +1,42 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _close Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _open Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 53 flags 0 +S _readlink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 00 08 E5 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 6E 02 DD 66 03 E5 CD +R 00 00 01 00 +T 11 00 00 00 00 00 00 00 F1 F1 DD 75 FE DD 74 +R 00 00 01 00 02 04 06 00 +T 1A 00 00 00 FF CB 7C 28 05 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 FF FF 18 2C +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 DD 6E 08 DD 66 09 E5 DD 4E 04 DD +R 00 00 01 00 +T 2F 00 00 00 46 05 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 38 00 00 00 00 00 00 00 F1 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 03 00 +T 41 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 4A 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/realloc.rel b/src/nos/lib/crt_large_lib/realloc.rel new file mode 100644 index 00000000..ff22582f --- /dev/null +++ b/src/nos/lib/crt_large_lib/realloc.rel @@ -0,0 +1,54 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _memcpy Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _malloc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7F flags 0 +S _realloc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 FC FF DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 5E 02 DD 56 03 19 7E 23 66 6F 01 +R 00 00 01 00 +T 14 00 00 00 FF FF 09 29 29 DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 CD 00 00 00 00 DD 5E 04 DD 56 05 +R 00 00 01 00 02 05 04 00 +T 28 00 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 06 00 +T 31 00 00 00 7D B4 28 41 DD 6E 02 DD 66 03 DD +R 00 00 01 00 +T 3C 00 00 00 4E FC DD 46 FD A7 ED 42 28 30 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 51 00 00 00 FF A7 ED 42 30 08 DD 6E FE DD 66 +R 00 00 01 00 +T 5C 00 00 00 FF 18 06 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 E5 DD 4E 02 DD 46 03 DD 5E FC DD +R 00 00 01 00 +T 70 00 00 00 56 FD CD 00 00 00 00 F1 +R 00 00 01 00 02 07 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/crt_large_lib/regerror.rel b/src/nos/lib/crt_large_lib/regerror.rel new file mode 100644 index 00000000..608fe319 --- /dev/null +++ b/src/nos/lib/crt_large_lib/regerror.rel @@ -0,0 +1,29 @@ +XL4 +H 3 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _stderr Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _fprintf Ref00000000 +S _exit Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1B flags 0 +S _regerror Def00000000 +A CSTR size E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D5 21 00 00 00 00 +R 00 00 01 00 02 05 04 00 00 0B 02 00 +T 07 00 00 00 E5 21 00 00 00 00 E5 CD +R 00 00 01 00 02 06 01 00 +T 0D 00 00 00 00 00 00 00 F1 F1 F1 11 01 00 CD +R 00 00 01 00 02 04 05 00 +T 16 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 09 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 65 67 65 78 70 28 33 29 3A 20 +R 00 00 02 00 +T 0B 00 00 00 25 73 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/regexp.rel b/src/nos/lib/crt_large_lib/regexp.rel new file mode 100644 index 00000000..aaba7951 --- /dev/null +++ b/src/nos/lib/crt_large_lib/regexp.rel @@ -0,0 +1,2147 @@ +XL4 +H 4 areas 13 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strncmp Ref00000000 +S _strcspn Ref00000000 +S ?L_INC_L03 Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _regerror Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _malloc Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12B2 flags 0 +S _regexec Def00000B97 +S _regcomp Def00000000 +A CSTR size 132 flags 0 +A UDATA0 size 13 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 7E 02 DD +R 00 00 01 00 02 05 0C 00 +T 09 00 00 00 B6 03 20 0C +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 11 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 14 00 00 00 00 00 C3 DE 01 00 00 +R 00 00 01 00 00 07 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 DD 6E 02 DD 66 03 22 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 22 00 00 00 21 01 00 22 02 00 00 00 01 00 00 +R 00 00 01 00 00 08 03 00 +T 2B 00 00 00 21 00 00 22 07 00 00 00 ED 43 +R 00 00 01 00 00 08 03 00 +T 33 00 00 00 09 00 00 00 21 04 00 00 00 22 +R 00 00 01 00 00 04 03 00 00 09 03 00 +T 39 00 00 00 05 00 00 00 11 9C 00 CD +R 00 00 01 00 00 04 03 00 +T 3F 00 00 00 E8 09 00 00 21 08 00 39 4D 44 11 +R 00 00 01 00 00 04 01 00 +T 48 00 00 00 00 00 CD E1 01 00 00 7D B4 20 06 +R 00 00 01 00 00 07 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 21 00 00 C3 DE 01 00 00 +R 00 00 01 00 00 08 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 00 00 E5 21 FF 7F E5 ED 4B +R 00 00 01 00 +T 61 00 00 00 09 00 00 00 2A 07 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 09 03 00 +T 67 00 00 00 00 00 00 00 38 0C +R 00 00 01 00 02 04 0B 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 11 0E 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 72 00 00 00 00 00 C3 DE 01 00 00 +R 00 00 01 00 00 07 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 2A 07 00 00 00 01 2F 00 09 EB CD +R 00 00 01 00 00 05 03 00 +T 80 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 7D +R 00 00 01 00 02 04 0E 00 +T 89 00 00 00 B4 20 0C +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 11 1D 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 93 00 00 00 00 00 C3 DE 01 00 00 +R 00 00 01 00 00 07 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 DD 6E 02 DD 66 03 22 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T A1 00 00 00 21 01 00 22 02 00 00 00 21 2E 00 +R 00 00 01 00 00 08 03 00 +T AA 00 00 00 DD 4E F6 DD 46 F7 09 22 +R 00 00 01 00 +T B2 00 00 00 05 00 00 00 11 9C 00 CD +R 00 00 01 00 00 04 03 00 +T B8 00 00 00 E8 09 00 00 21 08 00 39 4D 44 11 +R 00 00 01 00 00 04 01 00 +T C1 00 00 00 00 00 CD E1 01 00 00 7D B4 20 06 +R 00 00 01 00 00 07 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 21 00 00 C3 DE 01 00 00 +R 00 00 01 00 00 08 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 21 28 00 DD 4E F6 DD 46 F7 09 36 +R 00 00 01 00 +T DB 00 00 00 00 21 29 00 09 36 00 21 2A 00 09 +R 00 00 01 00 +T E6 00 00 00 AF 77 23 77 21 2C 00 09 AF 77 23 +R 00 00 01 00 +T F1 00 00 00 77 21 2E 00 09 23 DD 75 F8 DD 74 +R 00 00 01 00 +T FC 00 00 00 F9 EB CD 3E 12 00 00 7E B7 C2 +R 00 00 01 00 00 07 01 00 +T 04 01 00 00 D8 01 00 00 +R 00 00 01 00 00 04 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 DD 6E F8 DD 66 F9 23 23 23 DD 75 +R 00 00 01 00 +T 11 01 00 00 F8 DD 74 F9 7E FE 08 20 17 +R 00 00 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 DD 6E F8 DD 66 F9 23 23 23 46 21 +R 00 00 01 00 +T 25 01 00 00 28 00 DD 5E F6 DD 56 F7 19 70 18 +R 00 00 01 00 +T 30 01 00 00 15 +R 00 00 01 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 DD 6E F8 DD 66 F9 46 05 20 0B +R 00 00 01 00 +T 3B 01 00 00 +R 00 00 01 00 +T 3B 01 00 00 21 29 00 DD 4E F6 DD 46 F7 09 34 +R 00 00 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 DD 7E FE E6 04 CA D8 01 00 00 +R 00 00 01 00 00 0A 01 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 AF DD 77 FA DD 77 FB AF DD 77 FC +R 00 00 01 00 +T 59 01 00 00 DD 77 FD +R 00 00 01 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 DD 7E F8 DD B6 F9 28 54 +R 00 00 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 DD 6E F8 DD 66 F9 7E FE 08 20 38 +R 00 00 01 00 +T 6F 01 00 00 DD 5E F8 DD 56 F9 13 13 13 CD +R 00 00 01 00 +T 79 01 00 00 00 00 00 00 DD 4E FC DD 46 FD A7 +R 00 00 01 00 02 04 05 00 +T 82 01 00 00 ED 42 38 21 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 DD 6E F8 DD 66 F9 23 23 23 DD 75 +R 00 00 01 00 +T 91 01 00 00 FA DD 74 FB DD 5E F8 DD 56 F9 13 +R 00 00 01 00 +T 9C 01 00 00 13 13 CD 00 00 00 00 DD 75 FC DD +R 00 00 01 00 02 07 05 00 +T A5 01 00 00 74 FD +R 00 00 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 DD 5E F8 DD 56 F9 CD 3E 12 00 00 +R 00 00 01 00 00 0B 01 00 +T B0 01 00 00 DD 75 F8 DD 74 F9 18 A4 +R 00 00 01 00 +T B8 01 00 00 +R 00 00 01 00 +T B8 01 00 00 21 2A 00 DD 4E F6 DD 46 F7 09 DD +R 00 00 01 00 +T C3 01 00 00 5E FA DD 56 FB 73 23 72 21 2C 00 +R 00 00 01 00 +T CE 01 00 00 09 DD 4E FC DD 46 FD 71 23 70 +R 00 00 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 DD 6E F6 DD 66 F7 +R 00 00 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T E1 01 00 00 +R 00 00 01 00 +T E1 01 00 00 CD 00 00 00 00 F6 FF 69 60 36 01 +R 00 00 01 00 02 05 0C 00 +T EA 01 00 00 23 36 00 DD 7E 02 DD B6 03 28 3B +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 01 0A 80 2A 02 00 00 00 3E 80 AC +R 00 00 01 00 00 08 03 00 +T FE 01 00 00 67 ED 42 38 0C +R 00 00 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 11 2A 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 0A 02 00 00 00 00 C3 CB 03 00 00 +R 00 00 01 00 00 07 01 00 +T 0F 02 00 00 +R 00 00 01 00 +T 0F 02 00 00 2A 02 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 00 05 03 00 +T 18 02 00 00 ED 4B 02 00 00 00 03 ED 43 +R 00 00 01 00 00 06 03 00 +T 1F 02 00 00 02 00 00 00 7D C6 14 5F CD +R 00 00 01 00 00 04 03 00 +T 26 02 00 00 74 09 00 00 DD 75 F6 DD 74 F7 18 +R 00 00 01 00 00 04 01 00 +T 2F 02 00 00 07 +R 00 00 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 AF DD 77 F6 DD 77 F7 +R 00 00 01 00 +T 37 02 00 00 +R 00 00 01 00 +T 37 02 00 00 21 08 00 39 5D 54 CD CE 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 40 02 00 00 DD 75 F8 DD 74 F9 7D B4 20 06 +R 00 00 01 00 +T 4A 02 00 00 +R 00 00 01 00 +T 4A 02 00 00 21 00 00 C3 CB 03 00 00 +R 00 00 01 00 00 08 01 00 +T 50 02 00 00 +R 00 00 01 00 +T 50 02 00 00 DD 7E F6 DD B6 F7 28 11 +R 00 00 01 00 +T 58 02 00 00 +R 00 00 01 00 +T 58 02 00 00 DD 4E F8 DD 46 F9 DD 5E F6 DD 56 +R 00 00 01 00 +T 63 02 00 00 F7 CD BD 0A 00 00 18 0C +R 00 00 01 00 00 06 01 00 +T 69 02 00 00 +R 00 00 01 00 +T 69 02 00 00 DD 6E F8 DD 66 F9 DD 75 F6 DD 74 +R 00 00 01 00 +T 74 02 00 00 F7 +R 00 00 01 00 +T 75 02 00 00 +R 00 00 01 00 +T 75 02 00 00 DD 7E FE E6 01 47 DD 7E FF E6 00 +R 00 00 01 00 +T 80 02 00 00 B0 20 0F +R 00 00 01 00 +T 83 02 00 00 +R 00 00 01 00 +T 83 02 00 00 DD 6E 04 DD 66 05 7E E6 FE 77 23 +R 00 00 01 00 +T 8E 02 00 00 7E E6 FF 77 +R 00 00 01 00 +T 92 02 00 00 +R 00 00 01 00 +T 92 02 00 00 DD 7E FE E6 04 4F DD 7E FF E6 00 +R 00 00 01 00 +T 9D 02 00 00 47 DD 6E 04 DD 66 05 7E B1 77 23 +R 00 00 01 00 +T A8 02 00 00 7E B0 77 +R 00 00 01 00 +T AB 02 00 00 +R 00 00 01 00 +T AB 02 00 00 2A 00 00 00 00 7E FE 7C 20 67 +R 00 00 01 00 00 05 03 00 +T B3 02 00 00 +R 00 00 01 00 +T B3 02 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T BA 02 00 00 21 08 00 39 5D 54 CD CE 03 00 00 +R 00 00 01 00 00 0B 01 00 +T C3 02 00 00 DD 75 F8 DD 74 F9 7D B4 20 06 +R 00 00 01 00 +T CD 02 00 00 +R 00 00 01 00 +T CD 02 00 00 21 00 00 C3 CB 03 00 00 +R 00 00 01 00 00 08 01 00 +T D3 02 00 00 +R 00 00 01 00 +T D3 02 00 00 DD 4E F8 DD 46 F9 DD 5E F6 DD 56 +R 00 00 01 00 +T DE 02 00 00 F7 CD BD 0A 00 00 DD 7E FE E6 01 +R 00 00 01 00 00 06 01 00 +T E7 02 00 00 47 DD 7E FF E6 00 B0 20 0F +R 00 00 01 00 +T F0 02 00 00 +R 00 00 01 00 +T F0 02 00 00 DD 6E 04 DD 66 05 7E E6 FE 77 23 +R 00 00 01 00 +T FB 02 00 00 7E E6 FF 77 +R 00 00 01 00 +T FF 02 00 00 +R 00 00 01 00 +T FF 02 00 00 DD 7E FE E6 04 4F DD 7E FF E6 00 +R 00 00 01 00 +T 0A 03 00 00 47 DD 6E 04 DD 66 05 7E B1 77 23 +R 00 00 01 00 +T 15 03 00 00 7E B0 77 18 91 +R 00 00 01 00 +T 1A 03 00 00 +R 00 00 01 00 +T 1A 03 00 00 DD 7E 02 DD B6 03 28 08 DD 7E FC +R 00 00 01 00 +T 25 03 00 00 C6 1E 5F 18 02 +R 00 00 01 00 +T 2A 03 00 00 +R 00 00 01 00 +T 2A 03 00 00 1E 00 +R 00 00 01 00 +T 2C 03 00 00 +R 00 00 01 00 +T 2C 03 00 00 CD 74 09 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 00 05 01 00 +T 35 03 00 00 4D 44 DD 5E F6 DD 56 F7 CD +R 00 00 01 00 +T 3E 03 00 00 BD 0A 00 00 DD 6E F6 DD 66 F7 DD +R 00 00 01 00 00 04 01 00 +T 47 03 00 00 75 F8 DD 74 F9 +R 00 00 01 00 +T 4C 03 00 00 +R 00 00 01 00 +T 4C 03 00 00 DD 7E F8 DD B6 F9 28 20 +R 00 00 01 00 +T 54 03 00 00 +R 00 00 01 00 +T 54 03 00 00 DD 4E FA DD 46 FB DD 5E F8 DD 56 +R 00 00 01 00 +T 5F 03 00 00 F9 CD 60 0B 00 00 DD 5E F8 DD 56 +R 00 00 01 00 00 06 01 00 +T 68 03 00 00 F9 CD 3E 12 00 00 DD 75 F8 DD 74 +R 00 00 01 00 00 06 01 00 +T 71 03 00 00 F9 18 D8 +R 00 00 01 00 +T 74 03 00 00 +R 00 00 01 00 +T 74 03 00 00 DD 7E 02 DD B6 03 28 1A 2A +R 00 00 01 00 +T 7D 03 00 00 00 00 00 00 23 22 00 00 00 00 2B +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 84 03 00 00 7E FE 29 28 0D +R 00 00 01 00 +T 89 03 00 00 +R 00 00 01 00 +T 89 03 00 00 +R 00 00 01 00 +T 89 03 00 00 +R 00 00 01 00 +T 89 03 00 00 11 36 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 90 03 00 00 00 00 18 37 18 2F +R 00 00 01 00 +T 96 03 00 00 +R 00 00 01 00 +T 96 03 00 00 DD 7E 02 DD B6 03 20 27 2A +R 00 00 01 00 +T 9F 03 00 00 00 00 00 00 AF B6 28 20 +R 00 00 01 00 00 04 03 00 +T A5 03 00 00 +R 00 00 01 00 +T A5 03 00 00 +R 00 00 01 00 +T A5 03 00 00 +R 00 00 01 00 +T A5 03 00 00 2A 00 00 00 00 7E FE 29 20 0D +R 00 00 01 00 00 05 03 00 +T AD 03 00 00 +R 00 00 01 00 +T AD 03 00 00 11 36 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T B4 03 00 00 00 00 18 13 18 0B +R 00 00 01 00 +T BA 03 00 00 +R 00 00 01 00 +T BA 03 00 00 11 43 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T C1 03 00 00 00 00 18 06 +R 00 00 01 00 +T C5 03 00 00 +R 00 00 01 00 +T C5 03 00 00 +R 00 00 01 00 +T C5 03 00 00 +R 00 00 01 00 +T C5 03 00 00 DD 6E F6 DD 66 F7 +R 00 00 01 00 +T CB 03 00 00 +R 00 00 01 00 +T CB 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T CE 03 00 00 +R 00 00 01 00 +T CE 03 00 00 CD 00 00 00 00 F8 FF DD 6E 02 DD +R 00 00 01 00 02 05 0C 00 +T D7 03 00 00 66 03 AF 77 23 77 1E 06 CD +R 00 00 01 00 +T E0 03 00 00 74 09 00 00 DD 75 F8 DD 74 F9 AF +R 00 00 01 00 00 04 01 00 +T E9 03 00 00 DD 77 FA DD 77 FB +R 00 00 01 00 +T EF 03 00 00 +R 00 00 01 00 +T EF 03 00 00 2A 00 00 00 00 AF B6 CA +R 00 00 01 00 00 05 03 00 +T F5 03 00 00 79 04 00 00 2A 00 00 00 00 7E FE +R 00 00 01 00 00 04 01 00 00 09 03 00 +T FC 03 00 00 7C 28 7A 2A 00 00 00 00 7E FE 29 +R 00 00 01 00 00 08 03 00 +T 05 04 00 00 28 72 +R 00 00 01 00 +T 07 04 00 00 +R 00 00 01 00 +T 07 04 00 00 +R 00 00 01 00 +T 07 04 00 00 +R 00 00 01 00 +T 07 04 00 00 21 06 00 39 5D 54 CD 8F 04 00 00 +R 00 00 01 00 00 0B 01 00 +T 10 04 00 00 DD 75 FC DD 74 FD 7D B4 20 05 +R 00 00 01 00 +T 1A 04 00 00 +R 00 00 01 00 +T 1A 04 00 00 21 00 00 18 6D +R 00 00 01 00 +T 1F 04 00 00 +R 00 00 01 00 +T 1F 04 00 00 DD 7E FE E6 01 4F DD 7E FF E6 00 +R 00 00 01 00 +T 2A 04 00 00 47 DD 6E 02 DD 66 03 7E B1 77 23 +R 00 00 01 00 +T 35 04 00 00 7E B0 77 DD 7E FA DD B6 FB 20 1B +R 00 00 01 00 +T 40 04 00 00 +R 00 00 01 00 +T 40 04 00 00 DD 7E FE E6 04 4F DD 7E FF E6 00 +R 00 00 01 00 +T 4B 04 00 00 47 DD 6E 02 DD 66 03 7E B1 77 23 +R 00 00 01 00 +T 56 04 00 00 7E B0 77 18 0F +R 00 00 01 00 +T 5B 04 00 00 +R 00 00 01 00 +T 5B 04 00 00 DD 4E FC DD 46 FD DD 5E FA DD 56 +R 00 00 01 00 +T 66 04 00 00 FB CD BD 0A 00 00 +R 00 00 01 00 00 06 01 00 +T 6A 04 00 00 +R 00 00 01 00 +T 6A 04 00 00 DD 6E FC DD 66 FD DD 75 FA DD 74 +R 00 00 01 00 +T 75 04 00 00 FB C3 EF 03 00 00 +R 00 00 01 00 00 06 01 00 +T 79 04 00 00 +R 00 00 01 00 +T 79 04 00 00 DD 7E FA DD B6 FB 20 05 +R 00 00 01 00 +T 81 04 00 00 +R 00 00 01 00 +T 81 04 00 00 1E 09 CD 74 09 00 00 +R 00 00 01 00 00 07 01 00 +T 86 04 00 00 +R 00 00 01 00 +T 86 04 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 +T 8C 04 00 00 +R 00 00 01 00 +T 8C 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 8F 04 00 00 +R 00 00 01 00 +T 8F 04 00 00 CD 00 00 00 00 F8 FF 21 05 00 39 +R 00 00 01 00 02 05 0C 00 +T 98 04 00 00 5D 54 CD 70 06 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T A1 04 00 00 74 F9 7D B4 20 06 +R 00 00 01 00 +T A7 04 00 00 +R 00 00 01 00 +T A7 04 00 00 21 00 00 C3 6D 06 00 00 +R 00 00 01 00 00 08 01 00 +T AD 04 00 00 +R 00 00 01 00 +T AD 04 00 00 2A 00 00 00 00 46 DD 70 FA 78 FE +R 00 00 01 00 00 05 03 00 +T B6 04 00 00 2A 28 28 DD 7E FA FE 2B 28 21 DD +R 00 00 01 00 +T C1 04 00 00 7E FA FE 3F 28 1A +R 00 00 01 00 +T C7 04 00 00 +R 00 00 01 00 +T C7 04 00 00 DD 6E FD DD 66 FE E5 DD 6E 02 DD +R 00 00 01 00 +T D2 04 00 00 66 03 C1 71 23 70 DD 6E F8 DD 66 +R 00 00 01 00 +T DD 04 00 00 F9 C3 6D 06 00 00 +R 00 00 01 00 00 06 01 00 +T E1 04 00 00 +R 00 00 01 00 +T E1 04 00 00 DD 7E FD E6 01 47 DD 7E FE E6 00 +R 00 00 01 00 +T EC 04 00 00 B0 20 13 DD 7E FA FE 3F 28 0C +R 00 00 01 00 +T F6 04 00 00 +R 00 00 01 00 +T F6 04 00 00 +R 00 00 01 00 +T F6 04 00 00 +R 00 00 01 00 +T F6 04 00 00 11 4F 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T FD 04 00 00 00 00 C3 6D 06 00 00 +R 00 00 01 00 00 07 01 00 +T 02 05 00 00 +R 00 00 01 00 +T 02 05 00 00 DD 7E FA FE 2B 28 05 21 04 00 18 +R 00 00 01 00 +T 0D 05 00 00 03 +R 00 00 01 00 +T 0E 05 00 00 +R 00 00 01 00 +T 0E 05 00 00 21 01 00 +R 00 00 01 00 +T 11 05 00 00 +R 00 00 01 00 +T 11 05 00 00 E5 DD 6E 02 DD 66 03 C1 71 23 70 +R 00 00 01 00 +T 1C 05 00 00 DD 7E FA FE 2A 20 15 DD 7E FD E6 +R 00 00 01 00 +T 27 05 00 00 02 28 0E +R 00 00 01 00 +T 2A 05 00 00 +R 00 00 01 00 +T 2A 05 00 00 +R 00 00 01 00 +T 2A 05 00 00 +R 00 00 01 00 +T 2A 05 00 00 DD 4E F8 DD 46 F9 1E 0A CD +R 00 00 01 00 +T 33 05 00 00 19 0A 00 00 C3 3D 06 00 00 +R 00 00 01 00 00 04 01 00 00 09 01 00 +T 38 05 00 00 +R 00 00 01 00 +T 38 05 00 00 DD 7E FA FE 2A 20 4D +R 00 00 01 00 +T 3F 05 00 00 +R 00 00 01 00 +T 3F 05 00 00 DD 4E F8 DD 46 F9 1E 06 CD +R 00 00 01 00 +T 48 05 00 00 19 0A 00 00 1E 07 CD 74 09 00 00 +R 00 00 01 00 00 04 01 00 00 0B 01 00 +T 4F 05 00 00 4D 44 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 58 05 00 00 60 0B 00 00 DD 4E F8 DD 46 F9 DD +R 00 00 01 00 00 04 01 00 +T 61 05 00 00 5E F8 DD 56 F9 CD 60 0B 00 00 1E +R 00 00 01 00 00 0A 01 00 +T 6A 05 00 00 06 CD 74 09 00 00 4D 44 DD 5E F8 +R 00 00 01 00 00 06 01 00 +T 73 05 00 00 DD 56 F9 CD BD 0A 00 00 1E 09 CD +R 00 00 01 00 00 08 01 00 +T 7C 05 00 00 74 09 00 00 4D 44 DD 5E F8 DD 56 +R 00 00 01 00 00 04 01 00 +T 85 05 00 00 F9 CD BD 0A 00 00 C3 3D 06 00 00 +R 00 00 01 00 00 06 01 00 00 0B 01 00 +T 8C 05 00 00 +R 00 00 01 00 +T 8C 05 00 00 DD 7E FA FE 2B 20 15 DD 7E FD E6 +R 00 00 01 00 +T 97 05 00 00 02 28 0E +R 00 00 01 00 +T 9A 05 00 00 +R 00 00 01 00 +T 9A 05 00 00 +R 00 00 01 00 +T 9A 05 00 00 +R 00 00 01 00 +T 9A 05 00 00 DD 4E F8 DD 46 F9 1E 0B CD +R 00 00 01 00 +T A3 05 00 00 19 0A 00 00 C3 3D 06 00 00 +R 00 00 01 00 00 04 01 00 00 09 01 00 +T A8 05 00 00 +R 00 00 01 00 +T A8 05 00 00 DD 7E FA FE 2B 20 47 +R 00 00 01 00 +T AF 05 00 00 +R 00 00 01 00 +T AF 05 00 00 1E 06 CD 74 09 00 00 DD 75 FB DD +R 00 00 01 00 00 07 01 00 +T B8 05 00 00 74 FC 4D 44 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T C3 05 00 00 BD 0A 00 00 DD 4E F8 DD 46 F9 1E +R 00 00 01 00 00 04 01 00 +T CC 05 00 00 07 CD 74 09 00 00 EB CD +R 00 00 01 00 00 06 01 00 +T D2 05 00 00 BD 0A 00 00 1E 06 CD 74 09 00 00 +R 00 00 01 00 00 04 01 00 00 0B 01 00 +T D9 05 00 00 4D 44 DD 5E FB DD 56 FC CD +R 00 00 01 00 +T E2 05 00 00 BD 0A 00 00 1E 09 CD 74 09 00 00 +R 00 00 01 00 00 04 01 00 00 0B 01 00 +T E9 05 00 00 4D 44 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T F2 05 00 00 BD 0A 00 00 18 47 +R 00 00 01 00 00 04 01 00 +T F6 05 00 00 +R 00 00 01 00 +T F6 05 00 00 DD 7E FA FE 3F 20 40 +R 00 00 01 00 +T FD 05 00 00 +R 00 00 01 00 +T FD 05 00 00 DD 4E F8 DD 46 F9 1E 06 CD +R 00 00 01 00 +T 06 06 00 00 19 0A 00 00 1E 06 CD 74 09 00 00 +R 00 00 01 00 00 04 01 00 00 0B 01 00 +T 0D 06 00 00 4D 44 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 16 06 00 00 BD 0A 00 00 1E 09 CD 74 09 00 00 +R 00 00 01 00 00 04 01 00 00 0B 01 00 +T 1D 06 00 00 DD 75 FB DD 74 FC 4D 44 DD 5E F8 +R 00 00 01 00 +T 28 06 00 00 DD 56 F9 CD BD 0A 00 00 DD 4E FB +R 00 00 01 00 00 08 01 00 +T 31 06 00 00 DD 46 FC DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 3B 06 00 00 60 0B 00 00 +R 00 00 01 00 00 04 01 00 +T 3D 06 00 00 +R 00 00 01 00 +T 3D 06 00 00 +R 00 00 01 00 +T 3D 06 00 00 +R 00 00 01 00 +T 3D 06 00 00 +R 00 00 01 00 +T 3D 06 00 00 +R 00 00 01 00 +T 3D 06 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 44 06 00 00 2A 00 00 00 00 7E FE 2A 28 10 2A +R 00 00 01 00 00 05 03 00 +T 4D 06 00 00 00 00 00 00 7E FE 2B 28 08 2A +R 00 00 01 00 00 04 03 00 +T 55 06 00 00 00 00 00 00 7E FE 3F 20 0B +R 00 00 01 00 00 04 03 00 +T 5C 06 00 00 +R 00 00 01 00 +T 5C 06 00 00 +R 00 00 01 00 +T 5C 06 00 00 +R 00 00 01 00 +T 5C 06 00 00 11 69 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 63 06 00 00 00 00 18 06 +R 00 00 01 00 +T 67 06 00 00 +R 00 00 01 00 +T 67 06 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 +T 6D 06 00 00 +R 00 00 01 00 +T 6D 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 70 06 00 00 +R 00 00 01 00 +T 70 06 00 00 CD 00 00 00 00 F8 FF DD 6E 02 DD +R 00 00 01 00 02 05 0C 00 +T 79 06 00 00 66 03 AF 77 23 77 2A 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 82 06 00 00 23 22 00 00 00 00 2B 5E CD +R 00 00 01 00 00 06 03 00 +T 89 06 00 00 00 00 00 00 0C 00 00 24 28 29 2A +R 00 00 01 00 02 04 0F 00 +T 92 06 00 00 2B 2E 3F 5B 5C 5E 7C 9B 08 00 00 +R 00 00 01 00 00 0B 01 00 +T 9B 06 00 00 3F 08 00 00 B3 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 9F 06 00 00 57 08 00 00 EC 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A3 06 00 00 4B 08 00 00 CF 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A7 06 00 00 4B 08 00 00 4B 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T AB 06 00 00 3F 08 00 00 07 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T AF 06 00 00 C1 06 00 00 3F 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B3 06 00 00 +R 00 00 01 00 +T B3 06 00 00 1E 01 CD 74 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T BC 06 00 00 74 F9 C3 6B 09 00 00 +R 00 00 01 00 00 07 01 00 +T C1 06 00 00 +R 00 00 01 00 +T C1 06 00 00 1E 02 CD 74 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T CA 06 00 00 74 F9 C3 6B 09 00 00 +R 00 00 01 00 00 07 01 00 +T CF 06 00 00 +R 00 00 01 00 +T CF 06 00 00 1E 03 CD 74 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T D8 06 00 00 74 F9 DD 6E 02 DD 66 03 7E F6 03 +R 00 00 01 00 +T E3 06 00 00 77 23 7E F6 00 77 C3 6B 09 00 00 +R 00 00 01 00 00 0B 01 00 +T EC 06 00 00 +R 00 00 01 00 +T EC 06 00 00 2A 00 00 00 00 7E FE 5E 20 14 +R 00 00 01 00 00 05 03 00 +T F4 06 00 00 +R 00 00 01 00 +T F4 06 00 00 1E 05 CD 74 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T FD 06 00 00 74 F9 2A 00 00 00 00 23 22 +R 00 00 01 00 00 07 03 00 +T 04 07 00 00 00 00 00 00 18 0B +R 00 00 01 00 00 04 03 00 +T 08 07 00 00 +R 00 00 01 00 +T 08 07 00 00 1E 04 CD 74 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T 11 07 00 00 74 F9 +R 00 00 01 00 +T 13 07 00 00 +R 00 00 01 00 +T 13 07 00 00 2A 00 00 00 00 7E FE 5D 28 08 2A +R 00 00 01 00 00 05 03 00 +T 1C 07 00 00 00 00 00 00 7E FE 2D 20 0E +R 00 00 01 00 00 04 03 00 +T 23 07 00 00 +R 00 00 01 00 +T 23 07 00 00 +R 00 00 01 00 +T 23 07 00 00 +R 00 00 01 00 +T 23 07 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 2A 07 00 00 2B 5E 16 00 CD E8 09 00 00 +R 00 00 01 00 00 09 01 00 +T 31 07 00 00 +R 00 00 01 00 +T 31 07 00 00 +R 00 00 01 00 +T 31 07 00 00 2A 00 00 00 00 AF B6 CA +R 00 00 01 00 00 05 03 00 +T 37 07 00 00 D4 07 00 00 2A 00 00 00 00 7E FE +R 00 00 01 00 00 04 01 00 00 09 03 00 +T 3E 07 00 00 5D CA D4 07 00 00 +R 00 00 01 00 00 06 01 00 +T 42 07 00 00 +R 00 00 01 00 +T 42 07 00 00 +R 00 00 01 00 +T 42 07 00 00 +R 00 00 01 00 +T 42 07 00 00 2A 00 00 00 00 7E FE 2D 20 79 +R 00 00 01 00 00 05 03 00 +T 4A 07 00 00 +R 00 00 01 00 +T 4A 07 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 51 07 00 00 2A 00 00 00 00 7E FE 5D 28 07 2A +R 00 00 01 00 00 05 03 00 +T 5A 07 00 00 00 00 00 00 AF B6 20 08 +R 00 00 01 00 00 04 03 00 +T 60 07 00 00 +R 00 00 01 00 +T 60 07 00 00 +R 00 00 01 00 +T 60 07 00 00 +R 00 00 01 00 +T 60 07 00 00 11 2D 00 CD E8 09 00 00 18 59 +R 00 00 01 00 00 08 01 00 +T 68 07 00 00 +R 00 00 01 00 +T 68 07 00 00 2A 00 00 00 00 2B 2B 4E 06 00 03 +R 00 00 01 00 00 05 03 00 +T 71 07 00 00 DD 71 FC DD 70 FD 2A 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 7A 07 00 00 5E 16 00 DD 73 FE DD 72 FF EB 23 +R 00 00 01 00 +T 85 07 00 00 CD 00 00 00 00 30 0C +R 00 00 01 00 02 05 0D 00 +T 8A 07 00 00 +R 00 00 01 00 +T 8A 07 00 00 11 74 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 91 07 00 00 00 00 C3 71 09 00 00 +R 00 00 01 00 00 07 01 00 +T 96 07 00 00 +R 00 00 01 00 +T 96 07 00 00 +R 00 00 01 00 +T 96 07 00 00 DD 4E FC DD 46 FD DD 6E FE DD 66 +R 00 00 01 00 +T A1 07 00 00 FF CD 00 00 00 00 38 13 +R 00 00 01 00 02 06 0D 00 +T A7 07 00 00 +R 00 00 01 00 +T A7 07 00 00 DD 5E FC DD 56 FD 13 DD 73 FC DD +R 00 00 01 00 +T B2 07 00 00 72 FD 1B CD E8 09 00 00 18 DC +R 00 00 01 00 00 08 01 00 +T BA 07 00 00 +R 00 00 01 00 +T BA 07 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T C1 07 00 00 +R 00 00 01 00 +T C1 07 00 00 18 0E +R 00 00 01 00 +T C3 07 00 00 +R 00 00 01 00 +T C3 07 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T CA 07 00 00 2B 5E 16 00 CD E8 09 00 00 +R 00 00 01 00 00 09 01 00 +T D1 07 00 00 +R 00 00 01 00 +T D1 07 00 00 C3 31 07 00 00 +R 00 00 01 00 00 05 01 00 +T D4 07 00 00 +R 00 00 01 00 +T D4 07 00 00 11 00 00 CD E8 09 00 00 2A +R 00 00 01 00 00 08 01 00 +T DB 07 00 00 00 00 00 00 7E FE 5D 28 0C +R 00 00 01 00 00 04 03 00 +T E2 07 00 00 +R 00 00 01 00 +T E2 07 00 00 11 85 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T E9 07 00 00 00 00 C3 71 09 00 00 +R 00 00 01 00 00 07 01 00 +T EE 07 00 00 +R 00 00 01 00 +T EE 07 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T F5 07 00 00 DD 6E 02 DD 66 03 7E F6 03 77 23 +R 00 00 01 00 +T 00 08 00 00 7E F6 00 77 C3 6B 09 00 00 +R 00 00 01 00 00 09 01 00 +T 07 08 00 00 +R 00 00 01 00 +T 07 08 00 00 21 02 00 39 4D 44 11 01 00 CD +R 00 00 01 00 +T 11 08 00 00 E1 01 00 00 DD 75 F8 DD 74 F9 7D +R 00 00 01 00 00 04 01 00 +T 1A 08 00 00 B4 20 06 +R 00 00 01 00 +T 1D 08 00 00 +R 00 00 01 00 +T 1D 08 00 00 21 00 00 C3 71 09 00 00 +R 00 00 01 00 00 08 01 00 +T 23 08 00 00 +R 00 00 01 00 +T 23 08 00 00 DD 7E FA E6 05 4F DD 7E FB E6 00 +R 00 00 01 00 +T 2E 08 00 00 47 DD 6E 02 DD 66 03 7E B1 77 23 +R 00 00 01 00 +T 39 08 00 00 7E B0 77 C3 6B 09 00 00 +R 00 00 01 00 00 08 01 00 +T 3F 08 00 00 +R 00 00 01 00 +T 3F 08 00 00 11 92 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 46 08 00 00 00 00 C3 71 09 00 00 +R 00 00 01 00 00 07 01 00 +T 4B 08 00 00 +R 00 00 01 00 +T 4B 08 00 00 11 9F 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 52 08 00 00 00 00 C3 71 09 00 00 +R 00 00 01 00 00 07 01 00 +T 57 08 00 00 +R 00 00 01 00 +T 57 08 00 00 2A 00 00 00 00 AF B6 20 0C +R 00 00 01 00 00 05 03 00 +T 5E 08 00 00 +R 00 00 01 00 +T 5E 08 00 00 11 B3 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 65 08 00 00 00 00 C3 71 09 00 00 +R 00 00 01 00 00 07 01 00 +T 6A 08 00 00 +R 00 00 01 00 +T 6A 08 00 00 1E 08 CD 74 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T 73 08 00 00 74 F9 2A 00 00 00 00 23 22 +R 00 00 01 00 00 07 03 00 +T 7A 08 00 00 00 00 00 00 2B 5E 16 00 CD +R 00 00 01 00 00 04 03 00 +T 81 08 00 00 E8 09 00 00 11 00 00 CD +R 00 00 01 00 00 04 01 00 +T 87 08 00 00 E8 09 00 00 DD 6E 02 DD 66 03 7E +R 00 00 01 00 00 04 01 00 +T 90 08 00 00 F6 03 77 23 7E F6 00 77 C3 +R 00 00 01 00 +T 99 08 00 00 6B 09 00 00 +R 00 00 01 00 00 04 01 00 +T 9B 08 00 00 +R 00 00 01 00 +T 9B 08 00 00 01 BE 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 03 00 +T A2 08 00 00 1B ED 53 00 00 00 00 CD +R 00 00 01 00 00 07 03 00 +T A8 08 00 00 00 00 00 00 DD 75 FC DD 74 FD 4D +R 00 00 01 00 02 04 02 00 +T B1 08 00 00 44 21 00 00 CD 00 00 00 00 38 0C +R 00 00 01 00 02 09 0D 00 +T BA 08 00 00 +R 00 00 01 00 +T BA 08 00 00 11 CA 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T C1 08 00 00 00 00 C3 71 09 00 00 +R 00 00 01 00 00 07 01 00 +T C6 08 00 00 +R 00 00 01 00 +T C6 08 00 00 DD 6E FC DD 66 FD ED 4B +R 00 00 01 00 +T CE 08 00 00 00 00 00 00 09 46 DD 70 FE DD 4E +R 00 00 01 00 00 04 03 00 +T D7 08 00 00 FC DD 46 FD 21 01 00 CD +R 00 00 01 00 +T DF 08 00 00 00 00 00 00 30 22 DD 7E FE FE 2A +R 00 00 01 00 02 04 0D 00 +T E8 08 00 00 28 0E DD 7E FE FE 2B 28 07 DD 7E +R 00 00 01 00 +T F3 08 00 00 FE FE 3F 20 0D +R 00 00 01 00 +T F8 08 00 00 +R 00 00 01 00 +T F8 08 00 00 +R 00 00 01 00 +T F8 08 00 00 +R 00 00 01 00 +T F8 08 00 00 +R 00 00 01 00 +T F8 08 00 00 +R 00 00 01 00 +T F8 08 00 00 DD 6E FC DD 66 FD 2B DD 75 FC DD +R 00 00 01 00 +T 03 09 00 00 74 FD +R 00 00 01 00 +T 05 09 00 00 +R 00 00 01 00 +T 05 09 00 00 DD 6E 02 DD 66 03 7E F6 01 77 23 +R 00 00 01 00 +T 10 09 00 00 7E F6 00 77 3E 01 DD AE FC DD B6 +R 00 00 01 00 +T 1B 09 00 00 FD 20 0F +R 00 00 01 00 +T 1E 09 00 00 +R 00 00 01 00 +T 1E 09 00 00 DD 6E 02 DD 66 03 7E F6 02 77 23 +R 00 00 01 00 +T 29 09 00 00 7E F6 00 77 +R 00 00 01 00 +T 2D 09 00 00 +R 00 00 01 00 +T 2D 09 00 00 1E 08 CD 74 09 00 00 DD 75 F8 DD +R 00 00 01 00 00 07 01 00 +T 36 09 00 00 74 F9 +R 00 00 01 00 +T 38 09 00 00 +R 00 00 01 00 +T 38 09 00 00 DD 4E FC DD 46 FD 21 00 00 CD +R 00 00 01 00 +T 42 09 00 00 00 00 00 00 30 1D +R 00 00 01 00 02 04 0D 00 +T 46 09 00 00 +R 00 00 01 00 +T 46 09 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 4D 09 00 00 2B 5E 16 00 CD E8 09 00 00 DD 6E +R 00 00 01 00 00 09 01 00 +T 56 09 00 00 FC DD 66 FD 2B DD 75 FC DD 74 FD +R 00 00 01 00 +T 61 09 00 00 18 D5 +R 00 00 01 00 +T 63 09 00 00 +R 00 00 01 00 +T 63 09 00 00 11 00 00 CD E8 09 00 00 18 00 +R 00 00 01 00 00 08 01 00 +T 6B 09 00 00 +R 00 00 01 00 +T 6B 09 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 +T 71 09 00 00 +R 00 00 01 00 +T 71 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 74 09 00 00 +R 00 00 01 00 +T 74 09 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 0C 00 +T 7A 09 00 00 05 00 00 00 DD 75 FC DD 74 FD 01 +R 00 00 01 00 00 04 03 00 +T 83 09 00 00 04 00 00 00 A7 ED 42 20 14 +R 00 00 01 00 00 04 03 00 +T 8A 09 00 00 +R 00 00 01 00 +T 8A 09 00 00 21 07 00 00 00 01 00 00 11 03 00 +R 00 00 01 00 00 05 03 00 +T 93 09 00 00 CD 00 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 07 00 +T 9C 09 00 00 18 47 +R 00 00 01 00 +T 9E 09 00 00 +R 00 00 01 00 +T 9E 09 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T A9 09 00 00 FF 23 DD 75 FE DD 74 FF 2B DD 46 +R 00 00 01 00 +T B4 09 00 00 02 70 DD 6E FE DD 66 FF 23 DD 75 +R 00 00 01 00 +T BF 09 00 00 FE DD 74 FF 2B 36 00 DD 6E FE DD +R 00 00 01 00 +T CA 09 00 00 66 FF 23 DD 75 FE DD 74 FF 2B 36 +R 00 00 01 00 +T D5 09 00 00 00 DD 6E FE DD 66 FF 22 +R 00 00 01 00 +T DD 09 00 00 05 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 00 04 03 00 +T E5 09 00 00 +R 00 00 01 00 +T E5 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T E8 09 00 00 +R 00 00 01 00 +T E8 09 00 00 CD 00 00 00 00 21 04 00 00 00 ED +R 00 00 01 00 02 05 09 00 00 0A 03 00 +T EF 09 00 00 4B 05 00 00 00 A7 ED 42 28 0E +R 00 00 01 00 00 05 03 00 +T F7 09 00 00 +R 00 00 01 00 +T F7 09 00 00 DD 46 02 2A 05 00 00 00 23 22 +R 00 00 01 00 00 08 03 00 +T FF 09 00 00 05 00 00 00 2B 70 18 11 +R 00 00 01 00 00 04 03 00 +T 05 0A 00 00 +R 00 00 01 00 +T 05 0A 00 00 2A 07 00 00 00 ED 4B 09 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 0C 0A 00 00 CD 00 00 00 00 22 07 00 00 00 ED +R 00 00 01 00 02 05 03 00 00 0A 03 00 +T 13 0A 00 00 43 09 00 00 00 +R 00 00 01 00 00 05 03 00 +T 16 0A 00 00 +R 00 00 01 00 +T 16 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 19 0A 00 00 +R 00 00 01 00 +T 19 0A 00 00 CD 00 00 00 00 FA FF 21 +R 00 00 01 00 02 05 0C 00 +T 1F 0A 00 00 04 00 00 00 ED 5B 05 00 00 00 A7 +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 26 0A 00 00 ED 52 20 0F +R 00 00 01 00 +T 2A 0A 00 00 +R 00 00 01 00 +T 2A 0A 00 00 21 07 00 00 00 01 00 00 11 03 00 +R 00 00 01 00 00 05 03 00 +T 33 0A 00 00 CD 00 00 00 00 C3 BA 0A 00 00 +R 00 00 01 00 02 05 07 00 00 0A 01 00 +T 39 0A 00 00 +R 00 00 01 00 +T 39 0A 00 00 2A 05 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 00 05 03 00 +T 42 0A 00 00 21 03 00 ED 4B 05 00 00 00 09 22 +R 00 00 01 00 00 09 03 00 +T 4B 0A 00 00 05 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 00 04 03 00 +T 53 0A 00 00 +R 00 00 01 00 +T 53 0A 00 00 DD 4E FA DD 46 FB DD 6E 04 DD 66 +R 00 00 01 00 +T 5E 0A 00 00 05 A7 ED 42 30 1E +R 00 00 01 00 +T 64 0A 00 00 +R 00 00 01 00 +T 64 0A 00 00 DD 6E FA DD 66 FB 2B DD 75 FA DD +R 00 00 01 00 +T 6F 0A 00 00 74 FB 46 DD 6E FC DD 66 FD 2B DD +R 00 00 01 00 +T 7A 0A 00 00 75 FC DD 74 FD 70 18 D1 +R 00 00 01 00 +T 82 0A 00 00 +R 00 00 01 00 +T 82 0A 00 00 DD 6E 04 DD 66 05 DD 75 FE DD 74 +R 00 00 01 00 +T 8D 0A 00 00 FF 23 DD 75 FE DD 74 FF 2B DD 46 +R 00 00 01 00 +T 98 0A 00 00 02 70 DD 6E FE DD 66 FF 23 DD 75 +R 00 00 01 00 +T A3 0A 00 00 FE DD 74 FF 2B 36 00 DD 6E FE DD +R 00 00 01 00 +T AE 0A 00 00 66 FF 23 DD 75 FE DD 74 FF 2B 36 +R 00 00 01 00 +T B9 0A 00 00 00 +R 00 00 01 00 +T BA 0A 00 00 +R 00 00 01 00 +T BA 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T BD 0A 00 00 +R 00 00 01 00 +T BD 0A 00 00 CD 00 00 00 00 FA FF 21 +R 00 00 01 00 02 05 0C 00 +T C3 0A 00 00 04 00 00 00 DD 5E 02 DD 56 03 A7 +R 00 00 01 00 00 04 03 00 +T CC 0A 00 00 ED 52 20 03 +R 00 00 01 00 +T D0 0A 00 00 +R 00 00 01 00 +T D0 0A 00 00 C3 5D 0B 00 00 +R 00 00 01 00 00 05 01 00 +T D3 0A 00 00 +R 00 00 01 00 +T D3 0A 00 00 DD 6E 02 DD 66 03 DD 75 FA DD 74 +R 00 00 01 00 +T DE 0A 00 00 FB +R 00 00 01 00 +T DF 0A 00 00 +R 00 00 01 00 +T DF 0A 00 00 DD 5E FA DD 56 FB CD 3E 12 00 00 +R 00 00 01 00 00 0B 01 00 +T E8 0A 00 00 DD 75 FC DD 74 FD 7D B4 20 02 +R 00 00 01 00 +T F2 0A 00 00 +R 00 00 01 00 +T F2 0A 00 00 18 0E +R 00 00 01 00 +T F4 0A 00 00 +R 00 00 01 00 +T F4 0A 00 00 DD 6E FC DD 66 FD DD 75 FA DD 74 +R 00 00 01 00 +T FF 0A 00 00 FB 18 DD +R 00 00 01 00 +T 02 0B 00 00 +R 00 00 01 00 +T 02 0B 00 00 DD 6E FA DD 66 FB 7E FE 07 20 17 +R 00 00 01 00 +T 0D 0B 00 00 +R 00 00 01 00 +T 0D 0B 00 00 DD 4E 04 DD 46 05 DD 6E FA DD 66 +R 00 00 01 00 +T 18 0B 00 00 FB A7 ED 42 DD 75 FE DD 74 FF 18 +R 00 00 01 00 +T 23 0B 00 00 15 +R 00 00 01 00 +T 24 0B 00 00 +R 00 00 01 00 +T 24 0B 00 00 DD 4E FA DD 46 FB DD 6E 04 DD 66 +R 00 00 01 00 +T 2F 0B 00 00 05 A7 ED 42 DD 75 FE DD 74 FF +R 00 00 01 00 +T 39 0B 00 00 +R 00 00 01 00 +T 39 0B 00 00 06 08 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 42 0B 00 00 00 00 00 00 7B E6 FF DD 6E FA DD +R 00 00 01 00 02 04 10 00 +T 4B 0B 00 00 66 FB 23 77 DD 7E FE E6 FF DD 6E +R 00 00 01 00 +T 56 0B 00 00 FA DD 66 FB 23 23 77 +R 00 00 01 00 +T 5D 0B 00 00 +R 00 00 01 00 +T 5D 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 60 0B 00 00 +R 00 00 01 00 +T 60 0B 00 00 CD 00 00 00 00 7B B2 28 19 21 +R 00 00 01 00 02 05 09 00 +T 68 0B 00 00 04 00 00 00 DD 4E 02 DD 46 03 A7 +R 00 00 01 00 00 04 03 00 +T 71 0B 00 00 ED 42 28 0B DD 6E 02 DD 66 03 7E +R 00 00 01 00 +T 7C 0B 00 00 FE 06 28 02 +R 00 00 01 00 +T 80 0B 00 00 +R 00 00 01 00 +T 80 0B 00 00 +R 00 00 01 00 +T 80 0B 00 00 +R 00 00 01 00 +T 80 0B 00 00 18 12 +R 00 00 01 00 +T 82 0B 00 00 +R 00 00 01 00 +T 82 0B 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 8D 0B 00 00 03 13 13 13 CD BD 0A 00 00 +R 00 00 01 00 00 09 01 00 +T 94 0B 00 00 +R 00 00 01 00 +T 94 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 97 0B 00 00 +R 00 00 01 00 +T 97 0B 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 0C 00 +T A0 0B 00 00 B6 03 28 08 DD 7E 04 DD B6 05 20 +R 00 00 01 00 +T AB 0B 00 00 0C +R 00 00 01 00 +T AC 0B 00 00 +R 00 00 01 00 +T AC 0B 00 00 +R 00 00 01 00 +T AC 0B 00 00 +R 00 00 01 00 +T AC 0B 00 00 11 DC 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T B3 0B 00 00 00 00 C3 07 0D 00 00 +R 00 00 01 00 00 07 01 00 +T B8 0B 00 00 +R 00 00 01 00 +T B8 0B 00 00 21 2E 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T C3 0B 00 00 06 00 3E 9C A9 B0 28 0C +R 00 00 01 00 +T CB 0B 00 00 +R 00 00 01 00 +T CB 0B 00 00 11 EB 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T D2 0B 00 00 00 00 C3 07 0D 00 00 +R 00 00 01 00 00 07 01 00 +T D7 0B 00 00 +R 00 00 01 00 +T D7 0B 00 00 21 2A 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T E2 0B 00 00 23 B6 28 6D +R 00 00 01 00 +T E6 0B 00 00 +R 00 00 01 00 +T E6 0B 00 00 DD 6E 04 DD 66 05 DD 75 FE DD 74 +R 00 00 01 00 +T F1 0B 00 00 FF +R 00 00 01 00 +T F2 0B 00 00 +R 00 00 01 00 +T F2 0B 00 00 21 2A 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T FD 0B 00 00 23 66 6F 4E 06 00 DD 5E FE DD 56 +R 00 00 01 00 +T 08 0C 00 00 FF CD 00 00 00 00 DD 75 FE DD 74 +R 00 00 01 00 02 06 04 00 +T 11 0C 00 00 FF 7D B4 28 2F +R 00 00 01 00 +T 16 0C 00 00 +R 00 00 01 00 +T 16 0C 00 00 21 2C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 21 0C 00 00 23 56 D5 21 2A 00 09 4E 23 46 DD +R 00 00 01 00 +T 2C 0C 00 00 5E FE DD 56 FF CD 00 00 00 00 F1 +R 00 00 01 00 02 0A 01 00 +T 35 0C 00 00 7D B4 20 02 +R 00 00 01 00 +T 39 0C 00 00 +R 00 00 01 00 +T 39 0C 00 00 18 0A +R 00 00 01 00 +T 3B 0C 00 00 +R 00 00 01 00 +T 3B 0C 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 43 0C 00 00 +R 00 00 01 00 +T 43 0C 00 00 18 AD +R 00 00 01 00 +T 45 0C 00 00 +R 00 00 01 00 +T 45 0C 00 00 DD 7E FE DD B6 FF 20 06 +R 00 00 01 00 +T 4D 0C 00 00 +R 00 00 01 00 +T 4D 0C 00 00 21 00 00 C3 07 0D 00 00 +R 00 00 01 00 00 08 01 00 +T 53 0C 00 00 +R 00 00 01 00 +T 53 0C 00 00 +R 00 00 01 00 +T 53 0C 00 00 DD 6E 04 DD 66 05 22 0D 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 5C 0C 00 00 21 29 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 67 0C 00 00 B7 28 12 +R 00 00 01 00 +T 6A 0C 00 00 +R 00 00 01 00 +T 6A 0C 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 75 0C 00 00 03 CD 0A 0D 00 00 C3 07 0D 00 00 +R 00 00 01 00 00 06 01 00 00 0B 01 00 +T 7C 0C 00 00 +R 00 00 01 00 +T 7C 0C 00 00 DD 6E 04 DD 66 05 DD 75 FE DD 74 +R 00 00 01 00 +T 87 0C 00 00 FF 21 28 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 92 0C 00 00 7E B7 28 44 +R 00 00 01 00 +T 96 0C 00 00 +R 00 00 01 00 +T 96 0C 00 00 +R 00 00 01 00 +T 96 0C 00 00 21 28 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T A1 0C 00 00 06 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T AA 0C 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 04 00 +T B3 0C 00 00 B4 28 22 +R 00 00 01 00 +T B6 0C 00 00 +R 00 00 01 00 +T B6 0C 00 00 DD 4E FE DD 46 FF DD 5E 02 DD 56 +R 00 00 01 00 +T C1 0C 00 00 03 CD 0A 0D 00 00 7D B4 28 05 +R 00 00 01 00 00 06 01 00 +T C9 0C 00 00 +R 00 00 01 00 +T C9 0C 00 00 21 01 00 18 39 +R 00 00 01 00 +T CE 0C 00 00 +R 00 00 01 00 +T CE 0C 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T D6 0C 00 00 +R 00 00 01 00 +T D6 0C 00 00 18 BE +R 00 00 01 00 +T D8 0C 00 00 +R 00 00 01 00 +T D8 0C 00 00 18 2A +R 00 00 01 00 +T DA 0C 00 00 +R 00 00 01 00 +T DA 0C 00 00 +R 00 00 01 00 +T DA 0C 00 00 DD 4E FE DD 46 FF DD 5E 02 DD 56 +R 00 00 01 00 +T E5 0C 00 00 03 CD 0A 0D 00 00 7D B4 28 05 +R 00 00 01 00 00 06 01 00 +T ED 0C 00 00 +R 00 00 01 00 +T ED 0C 00 00 21 01 00 18 15 +R 00 00 01 00 +T F2 0C 00 00 +R 00 00 01 00 +T F2 0C 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T FD 0C 00 00 74 FF 2B 7E B7 20 D6 +R 00 00 01 00 +T 04 0D 00 00 +R 00 00 01 00 +T 04 0D 00 00 +R 00 00 01 00 +T 04 0D 00 00 21 00 00 +R 00 00 01 00 +T 07 0D 00 00 +R 00 00 01 00 +T 07 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 0A 0D 00 00 +R 00 00 01 00 +T 0A 0D 00 00 CD 00 00 00 00 FA FF ED 43 +R 00 00 01 00 02 05 0C 00 +T 11 0D 00 00 0B 00 00 00 DD 6E 02 DD 66 03 22 +R 00 00 01 00 00 04 03 00 +T 1A 0D 00 00 0F 00 00 00 21 14 00 DD 4E 02 DD +R 00 00 01 00 00 04 03 00 +T 23 0D 00 00 46 03 09 22 11 00 00 00 DD 71 FC +R 00 00 01 00 00 08 03 00 +T 2C 0D 00 00 DD 70 FD 21 14 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 37 0D 00 00 03 09 DD 75 FE DD 74 FF DD 36 FA +R 00 00 01 00 +T 42 0D 00 00 0A DD 36 FB 00 +R 00 00 01 00 +T 47 0D 00 00 +R 00 00 01 00 +T 47 0D 00 00 DD 6E FA DD 66 FB 2B DD 75 FA DD +R 00 00 01 00 +T 52 0D 00 00 74 FB 23 7D B4 28 2A +R 00 00 01 00 +T 59 0D 00 00 +R 00 00 01 00 +T 59 0D 00 00 DD 6E FC DD 66 FD 4D 44 03 03 DD +R 00 00 01 00 +T 64 0D 00 00 71 FC DD 70 FD AF 77 23 77 DD 6E +R 00 00 01 00 +T 6F 0D 00 00 FE DD 66 FF 4D 44 03 03 DD 71 FE +R 00 00 01 00 +T 7A 0D 00 00 DD 70 FF AF 77 23 77 18 C4 +R 00 00 01 00 +T 83 0D 00 00 +R 00 00 01 00 +T 83 0D 00 00 21 2E 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 8E 0D 00 00 13 CD C3 0D 00 00 7D B4 28 27 +R 00 00 01 00 00 06 01 00 +T 96 0D 00 00 +R 00 00 01 00 +T 96 0D 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T A1 0D 00 00 66 03 C1 71 23 70 21 14 00 DD 4E +R 00 00 01 00 +T AC 0D 00 00 02 DD 46 03 09 ED 4B 0B 00 00 00 +R 00 00 01 00 00 0B 03 00 +T B5 0D 00 00 71 23 70 21 01 00 18 03 +R 00 00 01 00 +T BD 0D 00 00 +R 00 00 01 00 +T BD 0D 00 00 21 00 00 +R 00 00 01 00 +T C0 0D 00 00 +R 00 00 01 00 +T C0 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T C3 0D 00 00 +R 00 00 01 00 +T C3 0D 00 00 CD 00 00 00 00 F4 FF DD 6E 02 DD +R 00 00 01 00 02 05 0C 00 +T CC 0D 00 00 66 03 DD 75 F4 DD 74 F5 +R 00 00 01 00 +T D4 0D 00 00 +R 00 00 01 00 +T D4 0D 00 00 DD 7E F4 DD B6 F5 CA 24 11 00 00 +R 00 00 01 00 00 0B 01 00 +T DD 0D 00 00 +R 00 00 01 00 +T DD 0D 00 00 DD 5E F4 DD 56 F5 CD 3E 12 00 00 +R 00 00 01 00 00 0B 01 00 +T E6 0D 00 00 DD 75 F6 DD 74 F7 DD 6E F4 DD 66 +R 00 00 01 00 +T F1 0D 00 00 F5 7E FE 01 20 15 +R 00 00 01 00 +T F7 0D 00 00 +R 00 00 01 00 +T F7 0D 00 00 2A 0D 00 00 00 ED 4B 0B 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T FE 0D 00 00 A7 ED 42 28 06 +R 00 00 01 00 +T 03 0E 00 00 +R 00 00 01 00 +T 03 0E 00 00 21 00 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T 09 0E 00 00 +R 00 00 01 00 +T 09 0E 00 00 C3 15 11 00 00 +R 00 00 01 00 00 05 01 00 +T 0C 0E 00 00 +R 00 00 01 00 +T 0C 0E 00 00 FE 02 20 10 2A 0B 00 00 00 AF B6 +R 00 00 01 00 00 09 03 00 +T 15 0E 00 00 28 06 +R 00 00 01 00 +T 17 0E 00 00 +R 00 00 01 00 +T 17 0E 00 00 21 00 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T 1D 0E 00 00 +R 00 00 01 00 +T 1D 0E 00 00 C3 15 11 00 00 +R 00 00 01 00 00 05 01 00 +T 20 0E 00 00 +R 00 00 01 00 +T 20 0E 00 00 FE 03 20 17 2A 0B 00 00 00 AF B6 +R 00 00 01 00 00 09 03 00 +T 29 0E 00 00 20 06 +R 00 00 01 00 +T 2B 0E 00 00 +R 00 00 01 00 +T 2B 0E 00 00 21 00 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T 31 0E 00 00 +R 00 00 01 00 +T 31 0E 00 00 2A 0B 00 00 00 23 22 0B 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 38 0E 00 00 C3 15 11 00 00 +R 00 00 01 00 00 05 01 00 +T 3B 0E 00 00 +R 00 00 01 00 +T 3B 0E 00 00 FE 08 20 6D DD 6E F4 DD 66 F5 23 +R 00 00 01 00 +T 46 0E 00 00 23 23 DD 75 FA DD 74 FB 2A +R 00 00 01 00 +T 4F 0E 00 00 0B 00 00 00 E5 DD 6E FA DD 66 FB +R 00 00 01 00 00 04 03 00 +T 58 0E 00 00 7E E1 BE 28 06 +R 00 00 01 00 +T 5D 0E 00 00 +R 00 00 01 00 +T 5D 0E 00 00 21 00 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T 63 0E 00 00 +R 00 00 01 00 +T 63 0E 00 00 DD 5E FA DD 56 FB CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 6C 0E 00 00 DD 75 F8 DD 74 F9 4D 44 21 01 00 +R 00 00 01 00 +T 77 0E 00 00 CD 00 00 00 00 30 1F DD 6E F8 DD +R 00 00 01 00 02 05 0D 00 +T 80 0E 00 00 66 F9 E5 ED 4B 0B 00 00 00 DD 5E +R 00 00 01 00 00 09 03 00 +T 89 0E 00 00 FA DD 56 FB CD 00 00 00 00 F1 7D +R 00 00 01 00 02 09 01 00 +T 92 0E 00 00 B4 28 06 +R 00 00 01 00 +T 95 0E 00 00 +R 00 00 01 00 +T 95 0E 00 00 +R 00 00 01 00 +T 95 0E 00 00 +R 00 00 01 00 +T 95 0E 00 00 21 00 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T 9B 0E 00 00 +R 00 00 01 00 +T 9B 0E 00 00 DD 6E F8 DD 66 F9 ED 4B +R 00 00 01 00 +T A3 0E 00 00 0B 00 00 00 09 22 0B 00 00 00 C3 +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T AA 0E 00 00 15 11 00 00 +R 00 00 01 00 00 04 01 00 +T AC 0E 00 00 +R 00 00 01 00 +T AC 0E 00 00 FE 04 20 2D 2A 0B 00 00 00 AF B6 +R 00 00 01 00 00 09 03 00 +T B5 0E 00 00 28 16 2A 0B 00 00 00 4E 06 00 DD +R 00 00 01 00 00 07 03 00 +T BE 0E 00 00 5E F4 DD 56 F5 13 13 13 CD +R 00 00 01 00 +T C7 0E 00 00 00 00 00 00 7D B4 20 06 +R 00 00 01 00 02 04 04 00 +T CD 0E 00 00 +R 00 00 01 00 +T CD 0E 00 00 +R 00 00 01 00 +T CD 0E 00 00 +R 00 00 01 00 +T CD 0E 00 00 21 00 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T D3 0E 00 00 +R 00 00 01 00 +T D3 0E 00 00 2A 0B 00 00 00 23 22 0B 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T DA 0E 00 00 C3 15 11 00 00 +R 00 00 01 00 00 05 01 00 +T DD 0E 00 00 +R 00 00 01 00 +T DD 0E 00 00 FE 05 20 2D 2A 0B 00 00 00 AF B6 +R 00 00 01 00 00 09 03 00 +T E6 0E 00 00 28 16 2A 0B 00 00 00 4E 06 00 DD +R 00 00 01 00 00 07 03 00 +T EF 0E 00 00 5E F4 DD 56 F5 13 13 13 CD +R 00 00 01 00 +T F8 0E 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 04 00 +T FE 0E 00 00 +R 00 00 01 00 +T FE 0E 00 00 +R 00 00 01 00 +T FE 0E 00 00 +R 00 00 01 00 +T FE 0E 00 00 21 00 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T 04 0F 00 00 +R 00 00 01 00 +T 04 0F 00 00 2A 0B 00 00 00 23 22 0B 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 0B 0F 00 00 C3 15 11 00 00 +R 00 00 01 00 00 05 01 00 +T 0E 0F 00 00 +R 00 00 01 00 +T 0E 0F 00 00 FE 09 20 03 C3 15 11 00 00 +R 00 00 01 00 00 09 01 00 +T 15 0F 00 00 +R 00 00 01 00 +T 15 0F 00 00 FE 07 20 03 C3 15 11 00 00 +R 00 00 01 00 00 09 01 00 +T 1C 0F 00 00 +R 00 00 01 00 +T 1C 0F 00 00 FE 15 38 5F FE 1E 30 5B DD 6E F4 +R 00 00 01 00 +T 27 0F 00 00 DD 66 F5 4E 06 00 21 EC FF 09 DD +R 00 00 01 00 +T 32 0F 00 00 75 F8 DD 74 F9 2A 0B 00 00 00 DD +R 00 00 01 00 00 0A 03 00 +T 3B 0F 00 00 75 FA DD 74 FB DD 5E F6 DD 56 F7 +R 00 00 01 00 +T 46 0F 00 00 CD C3 0D 00 00 7D B4 28 2C +R 00 00 01 00 00 05 01 00 +T 4D 0F 00 00 +R 00 00 01 00 +T 4D 0F 00 00 DD 6E F8 DD 66 F9 29 ED 4B +R 00 00 01 00 +T 56 0F 00 00 0F 00 00 00 09 7E 23 B6 20 15 +R 00 00 01 00 00 04 03 00 +T 5E 0F 00 00 +R 00 00 01 00 +T 5E 0F 00 00 DD 6E F8 DD 66 F9 29 ED 4B +R 00 00 01 00 +T 67 0F 00 00 0F 00 00 00 09 DD 4E FA DD 46 FB +R 00 00 01 00 00 04 03 00 +T 70 0F 00 00 71 23 70 +R 00 00 01 00 +T 73 0F 00 00 +R 00 00 01 00 +T 73 0F 00 00 21 01 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T 79 0F 00 00 +R 00 00 01 00 +T 79 0F 00 00 21 00 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T 7F 0F 00 00 +R 00 00 01 00 +T 7F 0F 00 00 FE 1F 38 5F FE 28 30 5B DD 6E F4 +R 00 00 01 00 +T 8A 0F 00 00 DD 66 F5 4E 06 00 21 E2 FF 09 DD +R 00 00 01 00 +T 95 0F 00 00 75 F8 DD 74 F9 2A 0B 00 00 00 DD +R 00 00 01 00 00 0A 03 00 +T 9E 0F 00 00 75 FA DD 74 FB DD 5E F6 DD 56 F7 +R 00 00 01 00 +T A9 0F 00 00 CD C3 0D 00 00 7D B4 28 2C +R 00 00 01 00 00 05 01 00 +T B0 0F 00 00 +R 00 00 01 00 +T B0 0F 00 00 DD 6E F8 DD 66 F9 29 ED 4B +R 00 00 01 00 +T B9 0F 00 00 11 00 00 00 09 7E 23 B6 20 15 +R 00 00 01 00 00 04 03 00 +T C1 0F 00 00 +R 00 00 01 00 +T C1 0F 00 00 DD 6E F8 DD 66 F9 29 ED 4B +R 00 00 01 00 +T CA 0F 00 00 11 00 00 00 09 DD 4E FA DD 46 FB +R 00 00 01 00 00 04 03 00 +T D3 0F 00 00 71 23 70 +R 00 00 01 00 +T D6 0F 00 00 +R 00 00 01 00 +T D6 0F 00 00 21 01 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T DC 0F 00 00 +R 00 00 01 00 +T DC 0F 00 00 21 00 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T E2 0F 00 00 +R 00 00 01 00 +T E2 0F 00 00 FE 06 20 6B DD 6E F6 DD 66 F7 7E +R 00 00 01 00 +T ED 0F 00 00 FE 06 28 11 +R 00 00 01 00 +T F1 0F 00 00 +R 00 00 01 00 +T F1 0F 00 00 DD 6E F4 DD 66 F5 23 23 23 DD 75 +R 00 00 01 00 +T FC 0F 00 00 F6 DD 74 F7 18 4C +R 00 00 01 00 +T 02 10 00 00 +R 00 00 01 00 +T 02 10 00 00 +R 00 00 01 00 +T 02 10 00 00 2A 0B 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 00 05 03 00 +T 0B 10 00 00 DD 5E F4 DD 56 F5 13 13 13 CD +R 00 00 01 00 +T 15 10 00 00 C3 0D 00 00 7D B4 28 06 +R 00 00 01 00 00 04 01 00 +T 1B 10 00 00 +R 00 00 01 00 +T 1B 10 00 00 21 01 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T 21 10 00 00 +R 00 00 01 00 +T 21 10 00 00 DD 6E F8 DD 66 F9 22 0B 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 2A 10 00 00 DD 5E F4 DD 56 F5 CD 3E 12 00 00 +R 00 00 01 00 00 0B 01 00 +T 33 10 00 00 DD 75 F4 DD 74 F5 7D B4 28 0B DD +R 00 00 01 00 +T 3E 10 00 00 6E F4 DD 66 F5 7E FE 06 28 BA +R 00 00 01 00 +T 48 10 00 00 +R 00 00 01 00 +T 48 10 00 00 21 00 00 C3 2D 11 00 00 +R 00 00 01 00 00 08 01 00 +T 4E 10 00 00 +R 00 00 01 00 +T 4E 10 00 00 C3 15 11 00 00 +R 00 00 01 00 00 05 01 00 +T 51 10 00 00 +R 00 00 01 00 +T 51 10 00 00 FE 0A DA 01 11 00 00 FE 0C D2 +R 00 00 01 00 00 07 01 00 +T 59 10 00 00 01 11 00 00 DD 36 F8 00 DD 6E F6 +R 00 00 01 00 00 04 01 00 +T 62 10 00 00 DD 66 F7 7E FE 08 20 0D +R 00 00 01 00 +T 6A 10 00 00 +R 00 00 01 00 +T 6A 10 00 00 DD 6E F6 DD 66 F7 23 23 23 46 DD +R 00 00 01 00 +T 75 10 00 00 70 F8 +R 00 00 01 00 +T 77 10 00 00 +R 00 00 01 00 +T 77 10 00 00 DD 6E F4 DD 66 F5 7E FE 0A 20 05 +R 00 00 01 00 +T 82 10 00 00 21 00 00 18 03 +R 00 00 01 00 +T 87 10 00 00 +R 00 00 01 00 +T 87 10 00 00 21 01 00 +R 00 00 01 00 +T 8A 10 00 00 +R 00 00 01 00 +T 8A 10 00 00 DD 75 FD DD 74 FE 2A 0B 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 93 10 00 00 DD 75 FB DD 74 FC DD 5E F4 DD 56 +R 00 00 01 00 +T 9E 10 00 00 F5 13 13 13 CD 30 11 00 00 DD 75 +R 00 00 01 00 00 09 01 00 +T A7 10 00 00 F9 DD 74 FA +R 00 00 01 00 +T AB 10 00 00 +R 00 00 01 00 +T AB 10 00 00 DD 4E FD DD 46 FE DD 6E F9 DD 66 +R 00 00 01 00 +T B6 10 00 00 FA CD 00 00 00 00 38 40 +R 00 00 01 00 02 06 0D 00 +T BC 10 00 00 +R 00 00 01 00 +T BC 10 00 00 AF DD B6 F8 28 09 2A 0B 00 00 00 +R 00 00 01 00 00 0B 03 00 +T C5 10 00 00 7E DD BE F8 20 12 +R 00 00 01 00 +T CB 10 00 00 +R 00 00 01 00 +T CB 10 00 00 +R 00 00 01 00 +T CB 10 00 00 +R 00 00 01 00 +T CB 10 00 00 DD 5E F6 DD 56 F7 CD C3 0D 00 00 +R 00 00 01 00 00 0B 01 00 +T D4 10 00 00 7D B4 28 05 +R 00 00 01 00 +T D8 10 00 00 +R 00 00 01 00 +T D8 10 00 00 21 01 00 18 50 +R 00 00 01 00 +T DD 10 00 00 +R 00 00 01 00 +T DD 10 00 00 +R 00 00 01 00 +T DD 10 00 00 DD 6E F9 DD 66 FA 2B DD 75 F9 DD +R 00 00 01 00 +T E8 10 00 00 74 FA DD 6E F9 DD 66 FA DD 4E FB +R 00 00 01 00 +T F3 10 00 00 DD 46 FC 09 22 0B 00 00 00 18 AF +R 00 00 01 00 00 09 03 00 +T FC 10 00 00 +R 00 00 01 00 +T FC 10 00 00 21 00 00 18 2C +R 00 00 01 00 +T 01 11 00 00 +R 00 00 01 00 +T 01 11 00 00 FE 00 20 05 21 01 00 18 23 +R 00 00 01 00 +T 0A 11 00 00 +R 00 00 01 00 +T 0A 11 00 00 11 FD 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 11 11 00 00 00 00 18 18 +R 00 00 01 00 +T 15 11 00 00 +R 00 00 01 00 +T 15 11 00 00 DD 6E F6 DD 66 F7 DD 75 F4 DD 74 +R 00 00 01 00 +T 20 11 00 00 F5 C3 D4 0D 00 00 +R 00 00 01 00 00 06 01 00 +T 24 11 00 00 +R 00 00 01 00 +T 24 11 00 00 11 0F 01 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 2B 11 00 00 00 00 +R 00 00 01 00 +T 2D 11 00 00 +R 00 00 01 00 +T 2D 11 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 30 11 00 00 +R 00 00 01 00 +T 30 11 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 0C 00 +T 39 11 00 00 DD 77 FB 2A 0B 00 00 00 DD 75 FC +R 00 00 01 00 00 08 03 00 +T 42 11 00 00 DD 74 FD DD 6E 02 DD 66 03 23 23 +R 00 00 01 00 +T 4D 11 00 00 23 DD 75 FE DD 74 FF DD 6E 02 DD +R 00 00 01 00 +T 58 11 00 00 66 03 5E CD 00 00 00 00 04 00 03 +R 00 00 01 00 02 08 0F 00 +T 61 11 00 00 04 05 08 1D 12 00 00 8F 11 00 00 +R 00 00 01 00 00 07 01 00 00 0B 01 00 +T 68 11 00 00 E9 11 00 00 B5 11 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6C 11 00 00 6E 11 00 00 +R 00 00 01 00 00 04 01 00 +T 6E 11 00 00 +R 00 00 01 00 +T 6E 11 00 00 DD 5E FC DD 56 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 77 11 00 00 DD 75 FA DD 74 FB 21 02 00 39 7E +R 00 00 01 00 +T 82 11 00 00 DD 86 FA 77 23 7E DD 8E FB 77 C3 +R 00 00 01 00 +T 8D 11 00 00 2C 12 00 00 +R 00 00 01 00 00 04 01 00 +T 8F 11 00 00 +R 00 00 01 00 +T 8F 11 00 00 +R 00 00 01 00 +T 8F 11 00 00 DD 6E FC DD 66 FD E5 DD 6E FE DD +R 00 00 01 00 +T 9A 11 00 00 66 FF 7E E1 BE 20 12 +R 00 00 01 00 +T A1 11 00 00 +R 00 00 01 00 +T A1 11 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T A9 11 00 00 +R 00 00 01 00 +T A9 11 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T B1 11 00 00 +R 00 00 01 00 +T B1 11 00 00 18 DC +R 00 00 01 00 +T B3 11 00 00 +R 00 00 01 00 +T B3 11 00 00 18 77 +R 00 00 01 00 +T B5 11 00 00 +R 00 00 01 00 +T B5 11 00 00 +R 00 00 01 00 +T B5 11 00 00 DD 6E FC DD 66 FD AF B6 28 28 DD +R 00 00 01 00 +T C0 11 00 00 6E FC DD 66 FD 4E 06 00 DD 5E FE +R 00 00 01 00 +T CB 11 00 00 DD 56 FF CD 00 00 00 00 7D B4 28 +R 00 00 01 00 02 08 04 00 +T D4 11 00 00 12 +R 00 00 01 00 +T D5 11 00 00 +R 00 00 01 00 +T D5 11 00 00 +R 00 00 01 00 +T D5 11 00 00 +R 00 00 01 00 +T D5 11 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T DD 11 00 00 +R 00 00 01 00 +T DD 11 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T E5 11 00 00 +R 00 00 01 00 +T E5 11 00 00 18 CE +R 00 00 01 00 +T E7 11 00 00 +R 00 00 01 00 +T E7 11 00 00 18 43 +R 00 00 01 00 +T E9 11 00 00 +R 00 00 01 00 +T E9 11 00 00 +R 00 00 01 00 +T E9 11 00 00 DD 6E FC DD 66 FD AF B6 28 28 DD +R 00 00 01 00 +T F4 11 00 00 6E FC DD 66 FD 4E 06 00 DD 5E FE +R 00 00 01 00 +T FF 11 00 00 DD 56 FF CD 00 00 00 00 7D B4 20 +R 00 00 01 00 02 08 04 00 +T 08 12 00 00 12 +R 00 00 01 00 +T 09 12 00 00 +R 00 00 01 00 +T 09 12 00 00 +R 00 00 01 00 +T 09 12 00 00 +R 00 00 01 00 +T 09 12 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 11 12 00 00 +R 00 00 01 00 +T 11 12 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 19 12 00 00 +R 00 00 01 00 +T 19 12 00 00 18 CE +R 00 00 01 00 +T 1B 12 00 00 +R 00 00 01 00 +T 1B 12 00 00 18 0F +R 00 00 01 00 +T 1D 12 00 00 +R 00 00 01 00 +T 1D 12 00 00 11 22 01 00 00 CD 00 00 00 00 AF +R 00 00 01 00 00 05 02 00 02 0A 0A 00 +T 24 12 00 00 DD 77 FA DD 77 FB 18 00 +R 00 00 01 00 +T 2C 12 00 00 +R 00 00 01 00 +T 2C 12 00 00 DD 6E FC DD 66 FD 22 0B 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 35 12 00 00 DD 6E FA DD 66 FB C3 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 3E 12 00 00 +R 00 00 01 00 +T 3E 12 00 00 CD 00 00 00 00 FE FF 21 +R 00 00 01 00 02 05 0C 00 +T 44 12 00 00 04 00 00 00 DD 4E 02 DD 46 03 A7 +R 00 00 01 00 00 04 03 00 +T 4D 12 00 00 ED 42 20 05 +R 00 00 01 00 +T 51 12 00 00 +R 00 00 01 00 +T 51 12 00 00 21 00 00 18 59 +R 00 00 01 00 +T 56 12 00 00 +R 00 00 01 00 +T 56 12 00 00 DD 6E 02 DD 66 03 23 7E E6 FF 4F +R 00 00 01 00 +T 61 12 00 00 06 00 41 0E 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 6C 12 00 00 23 23 7E E6 FF 5F 16 00 69 60 19 +R 00 00 01 00 +T 77 12 00 00 DD 75 FE DD 74 FF 7D B4 20 05 +R 00 00 01 00 +T 81 12 00 00 +R 00 00 01 00 +T 81 12 00 00 21 00 00 18 29 +R 00 00 01 00 +T 86 12 00 00 +R 00 00 01 00 +T 86 12 00 00 DD 6E 02 DD 66 03 7E FE 07 20 11 +R 00 00 01 00 +T 91 12 00 00 +R 00 00 01 00 +T 91 12 00 00 DD 4E FE DD 46 FF DD 6E 02 DD 66 +R 00 00 01 00 +T 9C 12 00 00 03 A7 ED 42 18 0D +R 00 00 01 00 +T A2 12 00 00 +R 00 00 01 00 +T A2 12 00 00 DD 6E FE DD 66 FF DD 4E 02 DD 46 +R 00 00 01 00 +T AD 12 00 00 03 09 +R 00 00 01 00 +T AF 12 00 00 +R 00 00 01 00 +T AF 12 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4E 55 4C 4C 20 61 72 67 75 6D 65 +R 00 00 02 00 +T 0B 00 00 00 6E 74 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 72 65 67 65 78 70 20 74 6F 6F 20 +R 00 00 02 00 +T 19 00 00 00 62 69 67 00 +R 00 00 02 00 +T 1D 00 00 00 +R 00 00 02 00 +T 1D 00 00 00 6F 75 74 20 6F 66 20 73 70 61 63 +R 00 00 02 00 +T 28 00 00 00 65 00 +R 00 00 02 00 +T 2A 00 00 00 +R 00 00 02 00 +T 2A 00 00 00 74 6F 6F 20 6D 61 6E 79 20 28 29 +R 00 00 02 00 +T 35 00 00 00 00 +R 00 00 02 00 +T 36 00 00 00 +R 00 00 02 00 +T 36 00 00 00 75 6E 6D 61 74 63 68 65 64 20 28 +R 00 00 02 00 +T 41 00 00 00 29 00 +R 00 00 02 00 +T 43 00 00 00 +R 00 00 02 00 +T 43 00 00 00 6A 75 6E 6B 20 6F 6E 20 65 6E 64 +R 00 00 02 00 +T 4E 00 00 00 00 +R 00 00 02 00 +T 4F 00 00 00 +R 00 00 02 00 +T 4F 00 00 00 2A 2B 20 6F 70 65 72 61 6E 64 20 +R 00 00 02 00 +T 5A 00 00 00 63 6F 75 6C 64 20 62 65 20 65 6D +R 00 00 02 00 +T 65 00 00 00 70 74 79 00 +R 00 00 02 00 +T 69 00 00 00 +R 00 00 02 00 +T 69 00 00 00 6E 65 73 74 65 64 20 2A 3F 2B 00 +R 00 00 02 00 +T 74 00 00 00 +R 00 00 02 00 +T 74 00 00 00 69 6E 76 61 6C 69 64 20 5B 5D 20 +R 00 00 02 00 +T 7F 00 00 00 72 61 6E 67 65 00 +R 00 00 02 00 +T 85 00 00 00 +R 00 00 02 00 +T 85 00 00 00 75 6E 6D 61 74 63 68 65 64 20 5B +R 00 00 02 00 +T 90 00 00 00 5D 00 +R 00 00 02 00 +T 92 00 00 00 +R 00 00 02 00 +T 92 00 00 00 69 6E 74 65 72 6E 61 6C 20 75 72 +R 00 00 02 00 +T 9D 00 00 00 70 00 +R 00 00 02 00 +T 9F 00 00 00 +R 00 00 02 00 +T 9F 00 00 00 3F 2B 2A 20 66 6F 6C 6C 6F 77 73 +R 00 00 02 00 +T AA 00 00 00 20 6E 6F 74 68 69 6E 67 00 +R 00 00 02 00 +T B3 00 00 00 +R 00 00 02 00 +T B3 00 00 00 74 72 61 69 6C 69 6E 67 20 5C 00 +R 00 00 02 00 +T BE 00 00 00 +R 00 00 02 00 +T BE 00 00 00 5E 24 2E 5B 28 29 7C 3F 2B 2A 5C +R 00 00 02 00 +T C9 00 00 00 00 +R 00 00 02 00 +T CA 00 00 00 +R 00 00 02 00 +T CA 00 00 00 69 6E 74 65 72 6E 61 6C 20 64 69 +R 00 00 02 00 +T D5 00 00 00 73 61 73 74 65 72 00 +R 00 00 02 00 +T DC 00 00 00 +R 00 00 02 00 +T DC 00 00 00 4E 55 4C 4C 20 70 61 72 61 6D 65 +R 00 00 02 00 +T E7 00 00 00 74 65 72 00 +R 00 00 02 00 +T EB 00 00 00 +R 00 00 02 00 +T EB 00 00 00 63 6F 72 72 75 70 74 65 64 20 70 +R 00 00 02 00 +T F6 00 00 00 72 6F 67 72 61 6D 00 +R 00 00 02 00 +T FD 00 00 00 +R 00 00 02 00 +T FD 00 00 00 6D 65 6D 6F 72 79 20 63 6F 72 72 +R 00 00 02 00 +T 08 01 00 00 75 70 74 69 6F 6E 00 +R 00 00 02 00 +T 0F 01 00 00 +R 00 00 02 00 +T 0F 01 00 00 63 6F 72 72 75 70 74 65 64 20 70 +R 00 00 02 00 +T 1A 01 00 00 6F 69 6E 74 65 72 73 00 +R 00 00 02 00 +T 22 01 00 00 +R 00 00 02 00 +T 22 01 00 00 69 6E 74 65 72 6E 61 6C 20 66 6F +R 00 00 02 00 +T 2D 01 00 00 75 6C 75 70 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 05 00 00 00 +R 00 00 03 00 +T 05 00 00 00 +R 00 00 03 00 +T 07 00 00 00 +R 00 00 03 00 +T 07 00 00 00 +R 00 00 03 00 +T 0B 00 00 00 +R 00 00 03 00 +T 0B 00 00 00 +R 00 00 03 00 +T 0D 00 00 00 +R 00 00 03 00 +T 0D 00 00 00 +R 00 00 03 00 +T 0F 00 00 00 +R 00 00 03 00 +T 0F 00 00 00 +R 00 00 03 00 +T 11 00 00 00 +R 00 00 03 00 +T 11 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/regsub.rel b/src/nos/lib/crt_large_lib/regsub.rel new file mode 100644 index 00000000..3d2c6a2b --- /dev/null +++ b/src/nos/lib/crt_large_lib/regsub.rel @@ -0,0 +1,212 @@ +XL4 +H 3 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strncpy Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _regerror Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1BE flags 0 +S _regsub Def00000000 +A CSTR size 46 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 7E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 03 28 10 DD 7E 04 DD B6 05 28 +R 00 00 01 00 +T 14 00 00 00 08 DD 7E 08 DD B6 09 20 09 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 11 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 00 05 02 00 02 0A 04 00 +T 24 00 00 00 BB 01 00 00 +R 00 00 01 00 00 04 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 21 2E 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 31 00 00 00 06 00 3E 9C A9 B0 28 09 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 11 14 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 00 05 02 00 02 0A 04 00 +T 40 00 00 00 BB 01 00 00 +R 00 00 01 00 00 04 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 DD 6E 04 DD 66 05 DD 75 F6 DD 74 +R 00 00 01 00 +T 4D 00 00 00 F7 DD 6E 08 DD 66 09 DD 75 F8 DD +R 00 00 01 00 +T 58 00 00 00 74 F9 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 DD 6E F6 DD 66 F7 23 DD 75 F6 DD +R 00 00 01 00 +T 65 00 00 00 74 F7 2B 46 DD 70 FA 04 05 CA +R 00 00 01 00 +T 6F 00 00 00 AB 01 00 00 +R 00 00 01 00 00 04 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 7E FA FE 26 20 09 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 AF DD 77 FB DD 77 FC 18 42 +R 00 00 01 00 +T 81 00 00 00 +R 00 00 01 00 +T 81 00 00 00 DD 7E FA FE 5C 20 33 DD 6E F6 DD +R 00 00 01 00 +T 8C 00 00 00 66 F7 7E FE 30 38 28 DD 6E F6 DD +R 00 00 01 00 +T 97 00 00 00 66 F7 3E 39 BE 38 1D +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 DD 6E F6 DD 66 F7 23 DD 75 F6 DD +R 00 00 01 00 +T A9 00 00 00 74 F7 2B 4E 06 00 21 D0 FF 09 DD +R 00 00 01 00 +T B4 00 00 00 75 FB DD 74 FC 18 08 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 DD 36 FB FF DD 36 FC FF +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 DD CB FC 7E 28 44 +R 00 00 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 DD 7E FA FE 5C 20 28 DD 6E F6 DD +R 00 00 01 00 +T D4 00 00 00 66 F7 7E FE 5C 28 0B DD 6E F6 DD +R 00 00 01 00 +T DF 00 00 00 66 F7 7E FE 26 20 12 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 DD 6E F6 DD 66 F7 23 DD 75 F6 DD +R 00 00 01 00 +T F1 00 00 00 74 F7 2B 46 DD 70 FA +R 00 00 01 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T 03 01 00 00 74 F9 2B DD 46 FA 70 C3 +R 00 00 01 00 +T 0B 01 00 00 A8 01 00 00 +R 00 00 01 00 00 04 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 DD 6E FB DD 66 FC 29 DD 4E 02 DD +R 00 00 01 00 +T 18 01 00 00 46 03 09 7E 23 B6 CA A8 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 21 01 00 00 DD 6E FB DD 66 FC 29 DD 4E 02 DD +R 00 00 01 00 +T 2C 01 00 00 46 03 09 01 14 00 09 7E 23 B6 28 +R 00 00 01 00 +T 37 01 00 00 70 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 DD 6E FB DD 66 FC 29 DD 4E 02 DD +R 00 00 01 00 +T 43 01 00 00 46 03 09 5E 23 56 DD 6E FB DD 66 +R 00 00 01 00 +T 4E 01 00 00 FC 29 09 01 14 00 09 46 23 66 68 +R 00 00 01 00 +T 59 01 00 00 A7 ED 52 DD 75 FD DD 74 FE E5 DD +R 00 00 01 00 +T 64 01 00 00 6E FB DD 66 FC 29 DD 4E 02 DD 46 +R 00 00 01 00 +T 6F 01 00 00 03 09 4E 23 46 DD 5E F8 DD 56 F9 +R 00 00 01 00 +T 7A 01 00 00 CD 00 00 00 00 F1 21 02 00 39 7E +R 00 00 01 00 02 05 01 00 +T 83 01 00 00 DD 86 FD 77 23 7E DD 8E FE 77 DD +R 00 00 01 00 +T 8E 01 00 00 7E FD DD B6 FE 28 13 DD 6E F8 DD +R 00 00 01 00 +T 99 01 00 00 66 F9 2B 7E B7 20 08 +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 11 31 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 00 05 02 00 02 0A 04 00 +T A7 01 00 00 13 +R 00 00 01 00 +T A8 01 00 00 +R 00 00 01 00 +T A8 01 00 00 +R 00 00 01 00 +T A8 01 00 00 +R 00 00 01 00 +T A8 01 00 00 C3 5A 00 00 00 +R 00 00 01 00 00 05 01 00 +T AB 01 00 00 +R 00 00 01 00 +T AB 01 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T B6 01 00 00 74 F9 2B 36 00 +R 00 00 01 00 +T BB 01 00 00 +R 00 00 01 00 +T BB 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4E 55 4C 4C 20 70 61 72 6D 20 74 +R 00 00 02 00 +T 0B 00 00 00 6F 20 72 65 67 73 75 62 00 +R 00 00 02 00 +T 14 00 00 00 +R 00 00 02 00 +T 14 00 00 00 64 61 6D 61 67 65 64 20 72 65 67 +R 00 00 02 00 +T 1F 00 00 00 65 78 70 20 66 65 64 20 74 6F 20 +R 00 00 02 00 +T 2A 00 00 00 72 65 67 73 75 62 00 +R 00 00 02 00 +T 31 00 00 00 +R 00 00 02 00 +T 31 00 00 00 64 61 6D 61 67 65 64 20 6D 61 74 +R 00 00 02 00 +T 3C 00 00 00 63 68 20 73 74 72 69 6E 67 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/rename.rel b/src/nos/lib/crt_large_lib/rename.rel new file mode 100644 index 00000000..c154e069 --- /dev/null +++ b/src/nos/lib/crt_large_lib/rename.rel @@ -0,0 +1,31 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _unlink Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _link Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2C flags 0 +S _rename Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 CD 00 00 00 00 DD 75 FE DD +R 00 00 01 00 02 07 05 00 +T 12 00 00 00 74 FF 7D B4 28 08 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 6E FE DD 66 FF 18 09 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/rewind.rel b/src/nos/lib/crt_large_lib/rewind.rel new file mode 100644 index 00000000..c6bc5b5b --- /dev/null +++ b/src/nos/lib/crt_large_lib/rewind.rel @@ -0,0 +1,161 @@ +XL4 +H 2 areas B global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fflush Ref00000000 +S _lseek Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1C9 flags 0 +S _rewind Def00000000 +S _fseek Def0000002B +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 E5 21 +R 00 00 01 00 02 05 06 00 +T 08 00 00 00 00 00 E5 21 00 00 E5 CD +R 00 00 01 00 +T 10 00 00 00 2B 00 00 00 F1 F1 F1 21 0C 00 DD +R 00 00 01 00 00 04 01 00 +T 19 00 00 00 4E 02 DD 46 03 09 7E E6 FF 77 23 +R 00 00 01 00 +T 24 00 00 00 7E E6 FC 77 C3 00 00 00 00 +R 00 00 01 00 02 09 03 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 CD 00 00 00 00 FC FF 21 0C 00 DD +R 00 00 01 00 02 05 08 00 +T 34 00 00 00 4E 02 DD 46 03 09 7E E6 40 4F 23 +R 00 00 01 00 +T 3F 00 00 00 7E E6 04 47 3E 40 A9 B0 C2 +R 00 00 01 00 +T 48 00 00 00 84 01 00 00 DD 7E 0C DD B6 0D 28 +R 00 00 01 00 00 04 01 00 +T 51 00 00 00 0B 3E 01 DD AE 0C DD B6 0D C2 +R 00 00 01 00 +T 5B 00 00 00 84 01 00 00 +R 00 00 01 00 00 04 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 21 01 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 68 00 00 00 E5 21 0A 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 73 00 00 00 5E 23 56 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 08 02 00 +T 7C 00 00 00 DD 75 FC DD 74 FD DD 71 FE DD 70 +R 00 00 01 00 +T 87 00 00 00 FF 7D A4 A1 A0 3C 20 06 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 21 FF FF C3 C6 01 00 00 +R 00 00 01 00 00 08 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 3E 01 DD AE 0C DD B6 0D 20 46 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 AF DD 77 0C DD 77 0D 21 0C 00 39 +R 00 00 01 00 +T AA 00 00 00 E5 DD 4E 02 DD 46 03 03 03 69 60 +R 00 00 01 00 +T B5 00 00 00 4E 23 46 DD 6E 02 DD 66 03 56 23 +R 00 00 01 00 +T C0 00 00 00 66 6A A7 ED 42 EB 7A 07 9F 4F 41 +R 00 00 01 00 +T CB 00 00 00 C5 D5 DD 6E FC DD 66 FD C1 09 EB +R 00 00 01 00 +T D6 00 00 00 DD 6E FE DD 66 FF C1 ED 4A 4D 44 +R 00 00 01 00 +T E1 00 00 00 E1 CD 00 00 00 00 +R 00 00 01 00 02 06 04 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 DD 7E 0C DD B6 0D C2 84 01 00 00 +R 00 00 01 00 00 0B 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD +R 00 00 01 00 +T F9 00 00 00 66 FD E5 DD 4E 0A DD 46 0B DD 6E +R 00 00 01 00 +T 04 01 00 00 08 DD 66 09 CD 00 00 00 00 30 77 +R 00 00 01 00 02 09 07 00 +T 0D 01 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 18 01 00 00 21 06 00 DD 5E 02 DD 56 03 19 56 +R 00 00 01 00 +T 23 01 00 00 23 66 6A A7 ED 42 7C 07 9F 4F 41 +R 00 00 01 00 +T 2E 01 00 00 C5 E5 DD 6E FC DD 66 FD C1 09 EB +R 00 00 01 00 +T 39 01 00 00 DD 6E FE DD 66 FF C1 ED 4A E5 D5 +R 00 00 01 00 +T 44 01 00 00 DD 4E 0A DD 46 0B DD 6E 08 DD 66 +R 00 00 01 00 +T 4F 01 00 00 09 CD 00 00 00 00 38 2F +R 00 00 01 00 02 06 07 00 +T 55 01 00 00 +R 00 00 01 00 +T 55 01 00 00 +R 00 00 01 00 +T 55 01 00 00 +R 00 00 01 00 +T 55 01 00 00 DD 4E FC DD 46 FD DD 6E 08 DD 66 +R 00 00 01 00 +T 60 01 00 00 09 A7 ED 42 E5 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 6B 01 00 00 03 03 69 60 4E 23 46 E1 09 E5 DD +R 00 00 01 00 +T 76 01 00 00 6E 02 DD 66 03 C1 71 23 70 21 +R 00 00 01 00 +T 80 01 00 00 00 00 18 42 +R 00 00 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 8D 01 00 00 7D A4 3C 28 2C DD 6E 0C DD 66 0D +R 00 00 01 00 +T 98 01 00 00 E5 DD 6E 0A DD 66 0B E5 DD 6E 08 +R 00 00 01 00 +T A3 01 00 00 DD 66 09 E5 21 0A 00 DD 4E 02 DD +R 00 00 01 00 +T AE 01 00 00 46 03 09 5E 23 56 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T B7 01 00 00 F1 F1 F1 CB 78 28 05 +R 00 00 01 00 +T BE 01 00 00 +R 00 00 01 00 +T BE 01 00 00 +R 00 00 01 00 +T BE 01 00 00 +R 00 00 01 00 +T BE 01 00 00 21 FF FF 18 03 +R 00 00 01 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 21 00 00 +R 00 00 01 00 +T C6 01 00 00 +R 00 00 01 00 +T C6 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_large_lib/rewindir.rel b/src/nos/lib/crt_large_lib/rewindir.rel new file mode 100644 index 00000000..26ffd9a2 --- /dev/null +++ b/src/nos/lib/crt_large_lib/rewindir.rel @@ -0,0 +1,43 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _lseek Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 53 flags 0 +S _rewinddir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 1A 21 +R 00 00 01 00 02 05 04 00 +T 08 00 00 00 06 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 13 00 00 00 B6 28 0B DD 6E 02 DD 66 03 7E 23 +R 00 00 01 00 +T 1E 00 00 00 B6 20 08 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 0E 00 22 00 00 00 00 18 27 +R 00 00 01 00 02 08 05 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 6E 02 DD 66 03 23 23 AF 77 23 +R 00 00 01 00 +T 34 00 00 00 77 21 00 00 E5 21 00 00 E5 21 +R 00 00 01 00 +T 3E 00 00 00 00 00 E5 DD 6E 02 DD 66 03 5E 23 +R 00 00 01 00 +T 49 00 00 00 56 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 06 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/rmdir.rel b/src/nos/lib/crt_large_lib/rmdir.rel new file mode 100644 index 00000000..c689ad5d --- /dev/null +++ b/src/nos/lib/crt_large_lib/rmdir.rel @@ -0,0 +1,170 @@ +XL4 +H 3 areas F global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _unlink Ref00000000 +S _strcat Ref00000000 +S _close Ref00000000 +S _strlen Ref00000000 +S _strcmp Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S _strcpy Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _open Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 135 flags 0 +S _rmdir Def00000000 +A CSTR size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D0 FE DD 5E 02 DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 56 03 CD 00 00 00 00 01 04 00 09 +R 00 00 01 00 02 07 04 00 +T 12 00 00 00 4D 44 21 00 01 A7 ED 42 30 09 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 24 00 22 00 00 00 00 C3 +R 00 00 01 00 02 08 0A 00 +T 23 00 00 00 2A 01 00 00 +R 00 00 01 00 00 04 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 21 00 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 30 00 00 00 03 CD 00 00 00 00 7D B4 28 03 +R 00 00 01 00 02 06 0D 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 C3 2A 01 00 00 +R 00 00 01 00 00 05 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 21 04 00 39 7E E6 00 47 23 7E E6 +R 00 00 01 00 +T 46 00 00 00 40 B0 20 09 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 21 14 00 22 00 00 00 00 C3 +R 00 00 01 00 02 08 0A 00 +T 51 00 00 00 2A 01 00 00 +R 00 00 01 00 00 04 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 21 00 00 E5 DD 6E 02 DD 66 03 E5 +R 00 00 01 00 +T 5E 00 00 00 CD 00 00 00 00 F1 F1 DD 75 FE DD +R 00 00 01 00 02 05 0C 00 +T 67 00 00 00 74 FF CB 7C 28 03 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 C3 2A 01 00 00 +R 00 00 01 00 00 05 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 21 10 00 E5 21 20 01 39 4D 44 DD +R 00 00 01 00 +T 7B 00 00 00 5E FE DD 56 FF CD 00 00 00 00 F1 +R 00 00 01 00 02 0A 07 00 +T 84 00 00 00 3E 10 AD B4 20 45 +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 DD 6E EE DD 66 EF 7D B4 28 26 01 +R 00 00 01 00 +T 95 00 00 00 00 00 00 00 21 1E 01 39 11 02 00 +R 00 00 01 00 00 04 02 00 +T 9E 00 00 00 19 EB CD 00 00 00 00 7D B4 28 13 +R 00 00 01 00 02 07 05 00 +T A7 00 00 00 01 02 00 00 00 21 1E 01 39 11 +R 00 00 01 00 00 05 02 00 +T AF 00 00 00 02 00 19 EB CD 00 00 00 00 7D B4 +R 00 00 01 00 02 09 05 00 +T B8 00 00 00 20 02 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 18 B4 +R 00 00 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T C5 00 00 00 21 27 00 22 00 00 00 00 18 5D 18 +R 00 00 01 00 02 08 0A 00 +T CE 00 00 00 A1 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T D8 00 00 00 DD 4E 02 DD 46 03 21 1E 00 39 5D +R 00 00 01 00 +T E3 00 00 00 54 CD 00 00 00 00 01 05 00 00 00 +R 00 00 01 00 02 06 09 00 00 0B 02 00 +T EA 00 00 00 21 1E 00 39 5D 54 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T F3 00 00 00 21 1E 00 39 5D 54 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T FC 00 00 00 7D B4 28 02 +R 00 00 01 00 +T 00 01 00 00 +R 00 00 01 00 +T 00 01 00 00 18 28 +R 00 00 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 01 00 00 00 00 21 1E 00 39 5D 54 +R 00 00 01 00 00 05 02 00 +T 0B 01 00 00 CD 00 00 00 00 21 1E 00 39 5D 54 +R 00 00 01 00 02 05 02 00 +T 14 01 00 00 CD 00 00 00 00 7D B4 28 02 +R 00 00 01 00 02 05 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 18 0D +R 00 00 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 26 01 00 00 7D B4 28 05 +R 00 00 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 2F 01 00 00 +R 00 00 01 00 +T 2F 01 00 00 21 00 00 +R 00 00 01 00 +T 32 01 00 00 +R 00 00 01 00 +T 32 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2E 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 2E 2E 00 +R 00 00 02 00 +T 05 00 00 00 +R 00 00 02 00 +T 05 00 00 00 2F 2E 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/scanf.rel b/src/nos/lib/crt_large_lib/scanf.rel new file mode 100644 index 00000000..fbc3040e --- /dev/null +++ b/src/nos/lib/crt_large_lib/scanf.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _stdin Ref00000000 +S _vfscanf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2A flags 0 +S _scanf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0C 00 39 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 4E 08 DD 46 09 11 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 1D 00 00 00 CD 00 00 00 00 F1 DD 75 FE DD 74 +R 00 00 01 00 02 05 04 00 +T 26 00 00 00 FF C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/crt_large_lib/setbuff.rel b/src/nos/lib/crt_large_lib/setbuff.rel new file mode 100644 index 00000000..193ca238 --- /dev/null +++ b/src/nos/lib/crt_large_lib/setbuff.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fflush Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C5 flags 0 +S _setbuffer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T 07 00 00 00 0C 00 DD 5E 02 DD 56 03 19 7E E6 +R 00 00 01 00 +T 12 00 00 00 04 28 10 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 20 00 00 00 23 56 CD 00 00 00 00 +R 00 00 01 00 02 07 04 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 30 00 00 00 E6 F8 77 23 7E E6 FF 77 DD 7E 04 +R 00 00 01 00 +T 3B 00 00 00 DD B6 05 20 35 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 4B 00 00 00 21 0E 00 09 EB E1 73 23 72 21 +R 00 00 01 00 +T 55 00 00 00 08 00 09 E5 21 0E 00 09 11 08 00 +R 00 00 01 00 +T 60 00 00 00 19 EB E1 73 23 72 21 0C 00 09 7E +R 00 00 01 00 +T 6B 00 00 00 F6 02 77 23 7E F6 00 77 18 25 +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 80 00 00 00 5E 04 DD 56 05 73 23 72 21 08 00 +R 00 00 01 00 +T 8B 00 00 00 09 E5 DD 6E 08 DD 66 09 19 4D 44 +R 00 00 01 00 +T 96 00 00 00 E1 71 23 70 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 DD 6E 02 DD 66 03 23 23 E5 21 +R 00 00 01 00 +T A4 00 00 00 04 00 DD 4E 02 DD 46 03 09 E5 21 +R 00 00 01 00 +T AF 00 00 00 06 00 09 5E 23 56 E1 73 23 72 E1 +R 00 00 01 00 +T BA 00 00 00 73 23 72 69 60 73 23 72 C3 +R 00 00 01 00 +T C3 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/crt_large_lib/setenv.rel b/src/nos/lib/crt_large_lib/setenv.rel new file mode 100644 index 00000000..a3f38456 --- /dev/null +++ b/src/nos/lib/crt_large_lib/setenv.rel @@ -0,0 +1,265 @@ +XL4 +H 4 areas D global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _environ Ref00000000 +S _memcpy Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _malloc Ref00000000 +S _memcmp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2CC flags 0 +S _setenv Def00000000 +S _unsetenv Def00000236 +A IDATA0 size 2 flags 0 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF AF DD 77 F4 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 77 F5 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 59 +R 00 00 01 00 02 04 03 00 +T 1C 00 00 00 50 CD 00 00 00 00 DD 75 F8 DD 74 +R 00 00 01 00 02 06 03 00 +T 25 00 00 00 F9 2A 00 00 00 00 DD 75 F2 DD 74 +R 00 00 01 00 02 06 01 00 +T 2E 00 00 00 F3 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 6E F2 DD 66 F3 4D 44 03 03 DD +R 00 00 01 00 +T 3A 00 00 00 71 F2 DD 70 F3 46 23 66 68 DD 75 +R 00 00 01 00 +T 45 00 00 00 FA DD 74 FB 7D B4 28 39 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 6E F6 DD 66 F7 E5 DD 4E 02 DD +R 00 00 01 00 +T 58 00 00 00 46 03 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 61 00 00 00 00 00 00 00 F1 7D B4 20 14 DD 6E +R 00 00 01 00 02 04 0A 00 +T 6A 00 00 00 F6 DD 66 F7 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T 75 00 00 00 7E FE 3D 20 02 +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 18 0A +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 34 F4 20 03 DD 34 F5 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 18 A9 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 DD 7E FA DD B6 FB C2 7F 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 6E F4 DD 66 F5 23 23 29 EB CD +R 00 00 01 00 +T 9A 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 09 00 +T A3 00 00 00 B4 20 0C +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 21 0C 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 07 00 +T AF 00 00 00 C3 33 02 00 00 +R 00 00 01 00 00 05 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 DD 6E F4 DD 66 F5 29 E5 ED 4B +R 00 00 01 00 +T BC 00 00 00 00 00 00 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 02 04 01 00 +T C5 00 00 00 00 00 00 00 F1 DD 6E F8 DD 66 F9 +R 00 00 01 00 02 04 02 00 +T CE 00 00 00 DD 4E F6 DD 46 F7 09 EB 13 13 CD +R 00 00 01 00 +T D9 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 09 00 +T E2 00 00 00 B4 20 0B +R 00 00 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 DD 5E FC DD 56 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T EE 00 00 00 18 B6 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 6E F6 DD 66 F7 E5 DD 4E 02 DD +R 00 00 01 00 +T FB 00 00 00 46 03 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 04 01 00 00 00 00 00 00 F1 DD 6E F6 DD 66 F7 +R 00 00 01 00 02 04 02 00 +T 0D 01 00 00 DD 4E FA DD 46 FB 09 36 3D DD 6E +R 00 00 01 00 +T 18 01 00 00 F8 DD 66 F9 23 E5 DD 4E 04 DD 46 +R 00 00 01 00 +T 23 01 00 00 05 DD 6E F6 DD 66 F7 DD 5E FA DD +R 00 00 01 00 +T 2E 01 00 00 56 FB 19 EB 13 CD 00 00 00 00 F1 +R 00 00 01 00 02 0A 02 00 +T 37 01 00 00 DD 6E F4 DD 66 F5 29 DD 4E FC DD +R 00 00 01 00 +T 42 01 00 00 46 FD 09 DD 5E FA DD 56 FB 73 23 +R 00 00 01 00 +T 4D 01 00 00 72 DD 6E F4 DD 66 F5 29 09 23 23 +R 00 00 01 00 +T 58 01 00 00 AF 77 23 77 2A 00 00 00 00 7D B4 +R 00 00 01 00 00 09 02 00 +T 61 01 00 00 28 07 +R 00 00 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 02 00 02 0B 06 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 DD 6E FC DD 66 FD 22 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 73 01 00 00 DD 6E FC DD 66 FD 22 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 7C 01 00 00 C3 30 02 00 00 +R 00 00 01 00 00 05 01 00 +T 7F 01 00 00 +R 00 00 01 00 +T 7F 01 00 00 DD 7E 08 DD B6 09 CA 30 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 88 01 00 00 +R 00 00 01 00 +T 88 01 00 00 DD 5E FA DD 56 FB CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 91 01 00 00 DD 75 FC DD 74 FD DD 6E F8 DD 66 +R 00 00 01 00 +T 9C 01 00 00 F9 DD 4E F6 DD 46 F7 09 4D 44 03 +R 00 00 01 00 +T A7 01 00 00 DD 6E FC DD 66 FD A7 ED 42 30 5D +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 DD 6E F8 DD 66 F9 DD 4E F6 DD 46 +R 00 00 01 00 +T BD 01 00 00 F7 09 EB 13 13 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 09 00 +T C6 01 00 00 75 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T CF 01 00 00 +R 00 00 01 00 +T CF 01 00 00 C3 A6 00 00 00 +R 00 00 01 00 00 05 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 DD 6E F6 DD 66 F7 E5 DD 4E 02 DD +R 00 00 01 00 +T DD 01 00 00 46 03 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T E6 01 00 00 00 00 00 00 F1 DD 6E F6 DD 66 F7 +R 00 00 01 00 02 04 02 00 +T EF 01 00 00 DD 4E FE DD 46 FF 09 36 3D DD 6E +R 00 00 01 00 +T FA 01 00 00 F2 DD 66 F3 2B 2B DD 75 F2 DD 74 +R 00 00 01 00 +T 05 02 00 00 F3 DD 71 FA DD 70 FB 71 23 70 +R 00 00 01 00 +T 0F 02 00 00 +R 00 00 01 00 +T 0F 02 00 00 DD 6E F8 DD 66 F9 23 E5 DD 4E 04 +R 00 00 01 00 +T 1A 02 00 00 DD 46 05 DD 6E F6 DD 66 F7 DD 5E +R 00 00 01 00 +T 25 02 00 00 FA DD 56 FB 19 EB 13 CD +R 00 00 01 00 +T 2D 02 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 02 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 21 00 00 +R 00 00 01 00 +T 33 02 00 00 +R 00 00 01 00 +T 33 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 CD 00 00 00 00 F8 FF DD 5E 02 DD +R 00 00 01 00 02 05 08 00 +T 3F 02 00 00 56 03 CD 00 00 00 00 DD 75 FE DD +R 00 00 01 00 02 07 03 00 +T 48 02 00 00 74 FF 2A 00 00 00 00 DD 75 F8 DD +R 00 00 01 00 02 07 01 00 +T 51 02 00 00 74 F9 DD 75 FA DD 74 FB +R 00 00 01 00 +T 59 02 00 00 +R 00 00 01 00 +T 59 02 00 00 DD 6E F8 DD 66 F9 4D 44 03 03 DD +R 00 00 01 00 +T 64 02 00 00 71 F8 DD 70 F9 46 23 66 68 DD 75 +R 00 00 01 00 +T 6F 02 00 00 FC DD 74 FD 7D B4 28 48 +R 00 00 01 00 +T 77 02 00 00 +R 00 00 01 00 +T 77 02 00 00 DD 6E FE DD 66 FF E5 DD 4E 02 DD +R 00 00 01 00 +T 82 02 00 00 46 03 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 8B 02 00 00 00 00 00 00 F1 7D B4 20 12 DD 6E +R 00 00 01 00 02 04 0A 00 +T 94 02 00 00 FE DD 66 FF DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T 9F 02 00 00 7E FE 3D 28 19 +R 00 00 01 00 +T A4 02 00 00 +R 00 00 01 00 +T A4 02 00 00 +R 00 00 01 00 +T A4 02 00 00 +R 00 00 01 00 +T A4 02 00 00 DD 6E FA DD 66 FB 4D 44 03 03 DD +R 00 00 01 00 +T AF 02 00 00 71 FA DD 70 FB DD 4E FC DD 46 FD +R 00 00 01 00 +T BA 02 00 00 71 23 70 +R 00 00 01 00 +T BD 02 00 00 +R 00 00 01 00 +T BD 02 00 00 18 9A +R 00 00 01 00 +T BF 02 00 00 +R 00 00 01 00 +T BF 02 00 00 DD 6E FA DD 66 FB AF 77 23 77 C3 +R 00 00 01 00 +T CA 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/setgrent.rel b/src/nos/lib/crt_large_lib/setgrent.rel new file mode 100644 index 00000000..a6ecb7ae --- /dev/null +++ b/src/nos/lib/crt_large_lib/setgrent.rel @@ -0,0 +1,74 @@ +XL4 +H 5 areas 9 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _close Ref00000000 +S ___getgrent Ref00000000 +S .__.ABS. Def00000000 +S _open Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 51 flags 0 +S _endgrent Def00000022 +S _getgrent Def0000003A +S _setgrent Def00000000 +A CSTR size B flags 0 +A IDATA0 size 4 flags 0 +S __path_group Def00000002 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 2A 00 00 00 00 7D A4 3C 28 07 +R 00 00 01 00 00 06 03 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 01 00 +T 10 00 00 00 +R 00 00 01 00 +T 10 00 00 00 21 00 80 E5 2A 02 00 00 00 E5 CD +R 00 00 01 00 00 09 03 00 +T 19 00 00 00 00 00 00 00 F1 F1 22 00 00 00 00 +R 00 00 01 00 02 04 04 00 00 0B 03 00 +T 20 00 00 00 D1 C9 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 D5 2A 00 00 00 00 7D A4 3C 28 07 +R 00 00 01 00 00 06 03 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 FF FF 22 00 00 00 00 D1 C9 +R 00 00 01 00 00 08 03 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 D5 2A 00 00 00 00 7D A4 3C 20 05 +R 00 00 01 00 00 06 03 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 21 00 00 18 07 +R 00 00 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 02 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 D1 C9 +R 00 00 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 65 74 63 2F 67 72 6F 75 70 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 FF FF 00 00 00 00 +R 00 00 04 00 00 06 02 00 diff --git a/src/nos/lib/crt_large_lib/setjmp.rel b/src/nos/lib/crt_large_lib/setjmp.rel new file mode 100644 index 00000000..a4900051 --- /dev/null +++ b/src/nos/lib/crt_large_lib/setjmp.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S _setjmp Def00000000 +T 00 00 00 00 21 02 00 39 EB 73 23 72 23 71 23 +R 00 00 01 00 +T 0B 00 00 00 70 23 DD E5 D1 73 23 72 23 FD E5 +R 00 00 01 00 +T 16 00 00 00 D1 73 23 72 23 D1 D5 73 23 72 21 +R 00 00 01 00 +T 21 00 00 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/crt_large_lib/setpwent.rel b/src/nos/lib/crt_large_lib/setpwent.rel new file mode 100644 index 00000000..2bf9c9fd --- /dev/null +++ b/src/nos/lib/crt_large_lib/setpwent.rel @@ -0,0 +1,98 @@ +XL4 +H 5 areas B global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _printf Ref00000000 +S _close Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ___getpwent Ref00000000 +S _open Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 63 flags 0 +S _endpwent Def00000034 +S _getpwent Def0000004C +S _setpwent Def00000000 +A CSTR size 27 flags 0 +A IDATA0 size 4 flags 0 +S __path_passwd Def00000002 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 2A 00 00 00 00 7D A4 3C 28 07 +R 00 00 01 00 00 06 03 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 02 00 +T 10 00 00 00 +R 00 00 01 00 +T 10 00 00 00 21 00 80 E5 2A 02 00 00 00 E5 CD +R 00 00 01 00 00 09 03 00 +T 19 00 00 00 00 00 00 00 F1 F1 22 00 00 00 00 +R 00 00 01 00 02 04 06 00 00 0B 03 00 +T 20 00 00 00 7D A4 3C 20 0D +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 2A 00 00 00 00 E5 21 0C 00 00 00 +R 00 00 01 00 02 05 04 00 00 0B 02 00 +T 2C 00 00 00 E5 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 06 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 D1 C9 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 D5 2A 00 00 00 00 7D A4 3C 28 07 +R 00 00 01 00 00 06 03 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 02 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 FF FF 22 00 00 00 00 D1 C9 +R 00 00 01 00 00 08 03 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 D5 2A 00 00 00 00 7D A4 3C 28 09 +R 00 00 01 00 00 06 03 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 05 00 +T 5C 00 00 00 18 03 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 00 00 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 D1 C9 +R 00 00 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 65 74 63 2F 70 61 73 73 77 64 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 +T 0C 00 00 00 +R 00 00 02 00 +T 0C 00 00 00 45 52 52 4E 4F 20 25 64 20 6F 70 +R 00 00 02 00 +T 17 00 00 00 65 6E 69 6E 67 20 70 61 73 73 77 +R 00 00 02 00 +T 22 00 00 00 6F 72 64 0A 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 FF FF 00 00 00 00 +R 00 00 04 00 00 06 02 00 diff --git a/src/nos/lib/crt_large_lib/setvbuff.rel b/src/nos/lib/crt_large_lib/setvbuff.rel new file mode 100644 index 00000000..908ef38d --- /dev/null +++ b/src/nos/lib/crt_large_lib/setvbuff.rel @@ -0,0 +1,98 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fflush Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10B flags 0 +S _setvbuf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T 07 00 00 00 0C 00 DD 5E 02 DD 56 03 19 7E E6 +R 00 00 01 00 +T 12 00 00 00 04 28 10 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 20 00 00 00 23 56 CD 00 00 00 00 +R 00 00 01 00 02 07 04 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 30 00 00 00 E6 F8 77 23 7E E6 FF 77 21 06 00 +R 00 00 01 00 +T 3B 00 00 00 09 E5 21 0E 00 09 EB E1 73 23 72 +R 00 00 01 00 +T 46 00 00 00 21 08 00 09 E5 21 0E 00 09 11 +R 00 00 01 00 +T 50 00 00 00 08 00 19 EB E1 73 23 72 21 0C 00 +R 00 00 01 00 +T 5B 00 00 00 09 7E F6 02 77 23 7E F6 00 77 DD +R 00 00 01 00 +T 66 00 00 00 7E 08 DD B6 09 28 0A 3E 01 DD AE +R 00 00 01 00 +T 71 00 00 00 08 DD B6 09 20 66 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 DD 7E 0A DD B6 0B 20 08 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 DD 36 0A 00 DD 36 0B 02 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 DD 7E 04 DD B6 05 20 1B DD 4E 0A +R 00 00 01 00 +T 92 00 00 00 DD 46 0B 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 9B 00 00 00 DD 75 04 DD 74 05 7D B4 20 05 +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 21 FF FF 18 5E +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T B5 00 00 00 5E 04 DD 56 05 73 23 72 21 08 00 +R 00 00 01 00 +T C0 00 00 00 09 E5 DD 6E 0A DD 66 0B 19 EB E1 +R 00 00 01 00 +T CB 00 00 00 73 23 72 21 0C 00 09 7E DD B6 08 +R 00 00 01 00 +T D6 00 00 00 77 23 7E DD B6 09 77 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 DD 6E 02 DD 66 03 23 23 E5 21 +R 00 00 01 00 +T E7 00 00 00 04 00 DD 4E 02 DD 46 03 09 E5 21 +R 00 00 01 00 +T F2 00 00 00 06 00 09 5E 23 56 E1 73 23 72 E1 +R 00 00 01 00 +T FD 00 00 00 73 23 72 69 60 73 23 72 21 00 00 +R 00 00 01 00 +T 08 01 00 00 +R 00 00 01 00 +T 08 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/sleep.rel b/src/nos/lib/crt_large_lib/sleep.rel new file mode 100644 index 00000000..bf0f05cc --- /dev/null +++ b/src/nos/lib/crt_large_lib/sleep.rel @@ -0,0 +1,62 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _alarm Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _pause Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _signal Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _sleep Def00000001 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C9 +R 00 00 01 00 +T 01 00 00 00 +R 00 00 01 00 +T 01 00 00 00 CD 00 00 00 00 FA FF 11 00 00 CD +R 00 00 01 00 02 05 05 00 +T 0A 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 21 +R 00 00 01 00 02 04 01 00 +T 13 00 00 00 00 00 00 00 01 00 00 C5 E5 11 +R 00 00 01 00 00 04 01 00 +T 1B 00 00 00 0B 00 CD 00 00 00 00 F1 F1 DD 75 +R 00 00 01 00 02 07 06 00 +T 24 00 00 00 FC DD 74 FD DD 71 FE DD 70 FF DD +R 00 00 01 00 +T 2F 00 00 00 7E FA DD B6 FB 28 2B +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 DD 4E FA DD 46 FB DD 6E 02 DD 66 +R 00 00 01 00 +T 41 00 00 00 03 A7 ED 42 38 05 21 01 00 18 0F +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 DD 4E 02 DD 46 03 DD 6E FA DD 66 +R 00 00 01 00 +T 57 00 00 00 FB A7 ED 42 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 6A 00 00 00 CD 00 00 00 00 DD 5E FA DD 56 FB +R 00 00 01 00 02 05 03 00 +T 73 00 00 00 CD 00 00 00 00 DD 75 02 DD 74 03 +R 00 00 01 00 02 05 01 00 +T 7C 00 00 00 DD 4E FE DD 46 FF C5 DD 4E FC DD +R 00 00 01 00 +T 87 00 00 00 46 FD C5 11 0B 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 90 00 00 00 F1 F1 DD 6E 02 DD 66 03 C3 +R 00 00 01 00 +T 99 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/crt_large_lib/sprintf.rel b/src/nos/lib/crt_large_lib/sprintf.rel new file mode 100644 index 00000000..428b4a00 --- /dev/null +++ b/src/nos/lib/crt_large_lib/sprintf.rel @@ -0,0 +1,27 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ___sputter Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___vprinter Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 40 flags 0 +S _sprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0E 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 6E 0A DD 66 0B E5 21 10 00 39 +R 00 00 01 00 +T 1F 00 00 00 4D 44 11 00 00 00 00 CD +R 00 00 01 00 02 07 01 00 +T 25 00 00 00 00 00 00 00 F1 F1 DD 75 FE DD 74 +R 00 00 01 00 02 04 05 00 +T 2E 00 00 00 FF DD 6E 08 DD 66 09 36 00 DD 6E +R 00 00 01 00 +T 39 00 00 00 FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 09 02 00 diff --git a/src/nos/lib/crt_large_lib/sputter.rel b/src/nos/lib/crt_large_lib/sputter.rel new file mode 100644 index 00000000..1567634f --- /dev/null +++ b/src/nos/lib/crt_large_lib/sputter.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _memcpy Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2D flags 0 +S ___sputter Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 4B 42 DD 6E 08 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 66 09 5E 23 56 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 12 00 00 00 F1 DD 6E 08 DD 66 09 7E DD 86 04 +R 00 00 01 00 +T 1D 00 00 00 77 23 7E DD 8E 05 77 DD 6E 04 DD +R 00 00 01 00 +T 28 00 00 00 66 05 C3 00 00 00 00 +R 00 00 01 00 02 07 02 00 diff --git a/src/nos/lib/crt_large_lib/sscanf.rel b/src/nos/lib/crt_large_lib/sscanf.rel new file mode 100644 index 00000000..237203b2 --- /dev/null +++ b/src/nos/lib/crt_large_lib/sscanf.rel @@ -0,0 +1,36 @@ +XL4 +H 4 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _vfscanf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 34 flags 0 +S _sscanf Def00000000 +A IDATA0 size 18 flags 0 +A CDATA0 size 18 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0E 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD DD +R 00 00 01 00 +T 14 00 00 00 4E 08 DD 46 09 ED 43 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 1D 00 00 00 E5 DD 4E 0A DD 46 0B 11 +R 00 00 01 00 +T 25 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 00 04 02 00 02 09 03 00 +T 2C 00 00 00 75 FE DD 74 FF C3 00 00 00 00 +R 00 00 01 00 02 0A 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 FF FF 00 00 00 00 FF FF +R 00 00 03 00 +T 0A 00 00 00 FF FF 10 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 15 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/stdio0.rel b/src/nos/lib/crt_large_lib/stdio0.rel new file mode 100644 index 00000000..51d3623d --- /dev/null +++ b/src/nos/lib/crt_large_lib/stdio0.rel @@ -0,0 +1,129 @@ +XL4 +H 5 areas E global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fflush Ref00000000 +S _atexit Ref00000000 +S _close Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _isatty Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 85 flags 0 +S ___stdio_init_vars Def00000057 +S ___stdio_close_all Def00000000 +A UDATA0 size 400 flags 0 +A IDATA0 size 4C flags 0 +S _stderr Def00000032 +S _stdin Def00000002 +S _stdout Def0000001A +S ___IO_list Def00000000 +A CDATA0 size 4C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 07 00 +T 06 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 11 +R 00 00 01 00 00 04 03 00 +T 0F 00 00 00 1A 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 00 04 03 00 02 09 01 00 +T 15 00 00 00 32 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 04 03 00 02 09 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 7E FE DD B6 FF 28 32 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 2B 00 00 00 21 0A 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 36 00 00 00 23 56 CD 00 00 00 00 21 0A 00 09 +R 00 00 01 00 02 07 03 00 +T 3F 00 00 00 36 FF 23 36 FF 21 16 00 09 56 23 +R 00 00 01 00 +T 4A 00 00 00 66 6A DD 75 FE DD 74 FF 18 C6 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 D5 2A 4A 00 00 00 7D B4 20 02 +R 00 00 01 00 00 06 03 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 18 22 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 21 00 00 22 4A 00 00 00 11 01 00 +R 00 00 01 00 00 08 03 00 +T 6A 00 00 00 CD 00 00 00 00 7D B4 28 0C +R 00 00 01 00 02 05 05 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 21 26 00 00 00 7E F6 01 77 23 7E +R 00 00 01 00 00 05 03 00 +T 7A 00 00 00 F6 00 77 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 11 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 02 0A 02 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 D1 C9 +R 00 00 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 02 00 00 +R 00 00 02 00 +T 00 02 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 1A 00 00 00 +R 00 00 03 00 +T 1A 00 00 00 +R 00 00 03 00 +T 32 00 00 00 +R 00 00 03 00 +T 32 00 00 00 +R 00 00 03 00 +T 4A 00 00 00 +R 00 00 03 00 +T 4A 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 00 06 02 00 00 0A 02 00 +T 06 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0A 00 00 00 00 02 00 00 00 00 10 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 13 00 00 00 00 00 00 00 00 00 00 00 02 00 00 +R 00 00 04 00 00 0B 02 00 +T 1C 00 00 00 00 02 00 00 00 02 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 20 00 00 00 00 02 00 00 00 04 00 00 01 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 26 00 00 00 20 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 31 00 00 00 00 40 00 00 00 40 00 00 00 +R 00 00 04 00 00 05 03 00 00 09 03 00 +T 36 00 00 00 40 00 00 00 40 00 00 00 +R 00 00 04 00 00 04 03 00 00 08 03 00 +T 3A 00 00 00 42 00 00 00 02 00 22 00 00 00 00 +R 00 00 04 00 00 04 03 00 +T 43 00 00 00 00 00 00 00 00 00 00 01 00 +R 00 00 04 00 diff --git a/src/nos/lib/crt_large_lib/strcat.rel b/src/nos/lib/crt_large_lib/strcat.rel new file mode 100644 index 00000000..c3f886d6 --- /dev/null +++ b/src/nos/lib/crt_large_lib/strcat.rel @@ -0,0 +1,19 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S _strcat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D5 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0B 01 00 +T 07 00 00 00 D1 19 EB CD 00 00 00 00 DD 6E 02 +R 00 00 01 00 02 08 05 00 +T 10 00 00 00 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 08 02 00 diff --git a/src/nos/lib/crt_large_lib/strchr.rel b/src/nos/lib/crt_large_lib/strchr.rel new file mode 100644 index 00000000..7840bc32 --- /dev/null +++ b/src/nos/lib/crt_large_lib/strchr.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3B flags 0 +S _strchr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 03 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 DD 6E 02 DD 66 03 46 DD 70 FE 48 +R 00 00 01 00 +T 10 00 00 00 06 00 DD 6E 04 DD 66 05 A7 ED 42 +R 00 00 01 00 +T 1B 00 00 00 20 08 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E 02 DD 66 03 18 09 +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 AF DD B6 FE 20 06 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 00 00 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 18 CA +R 00 00 01 00 diff --git a/src/nos/lib/crt_large_lib/strcmp.rel b/src/nos/lib/crt_large_lib/strcmp.rel new file mode 100644 index 00000000..28356baf --- /dev/null +++ b/src/nos/lib/crt_large_lib/strcmp.rel @@ -0,0 +1,43 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 57 flags 0 +S _strcmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 02 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 66 03 DD 75 FA DD 74 FB DD 71 FC +R 00 00 01 00 +T 14 00 00 00 DD 70 FD +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 22 00 00 00 74 FD 2B 46 DD 70 FF DD 6E FA DD +R 00 00 01 00 +T 2D 00 00 00 66 FB 23 DD 75 FA DD 74 FB 2B 4E +R 00 00 01 00 +T 38 00 00 00 DD 71 FE 79 B8 20 08 AF DD B6 FE +R 00 00 01 00 +T 43 00 00 00 28 02 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 18 D0 +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 4E FF 06 00 DD 6E FE 26 00 A7 +R 00 00 01 00 +T 52 00 00 00 ED 42 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/crt_large_lib/strcpy.rel b/src/nos/lib/crt_large_lib/strcpy.rel new file mode 100644 index 00000000..8ea814db --- /dev/null +++ b/src/nos/lib/crt_large_lib/strcpy.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _memcpy Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D flags 0 +S _strcpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 59 50 CD +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 23 E5 DD 4E 04 DD 46 +R 00 00 01 00 02 04 02 00 +T 0F 00 00 00 05 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 17 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0A 03 00 diff --git a/src/nos/lib/crt_large_lib/strcspn.rel b/src/nos/lib/crt_large_lib/strcspn.rel new file mode 100644 index 00000000..c20f8e8b --- /dev/null +++ b/src/nos/lib/crt_large_lib/strcspn.rel @@ -0,0 +1,40 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strchr Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4D flags 0 +S _strcspn Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E 02 DD 66 03 AF B6 28 20 DD +R 00 00 01 00 +T 1C 00 00 00 6E 02 DD 66 03 23 DD 75 02 DD 74 +R 00 00 01 00 +T 27 00 00 00 03 2B 4E 06 00 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 32 00 00 00 CD 00 00 00 00 7D B4 20 02 +R 00 00 01 00 02 05 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 18 D6 +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 DD 4E FE DD 46 FF DD 6E 02 DD 66 +R 00 00 01 00 +T 46 00 00 00 03 A7 ED 42 C3 00 00 00 00 +R 00 00 01 00 02 09 02 00 diff --git a/src/nos/lib/crt_large_lib/strdup.rel b/src/nos/lib/crt_large_lib/strdup.rel new file mode 100644 index 00000000..e6bf710d --- /dev/null +++ b/src/nos/lib/crt_large_lib/strdup.rel @@ -0,0 +1,34 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _memcpy Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _malloc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 43 flags 0 +S _strdup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 56 03 CD 00 00 00 00 23 DD 75 FC +R 00 00 01 00 02 07 02 00 +T 12 00 00 00 DD 74 FD EB CD 00 00 00 00 DD 75 +R 00 00 01 00 02 09 06 00 +T 1B 00 00 00 FE DD 74 FF 7D B4 28 17 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 DD 6E FC DD 66 FD E5 DD 4E 02 DD +R 00 00 01 00 +T 2E 00 00 00 46 03 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 37 00 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 diff --git a/src/nos/lib/crt_large_lib/stricmp.rel b/src/nos/lib/crt_large_lib/stricmp.rel new file mode 100644 index 00000000..8da2c9f9 --- /dev/null +++ b/src/nos/lib/crt_large_lib/stricmp.rel @@ -0,0 +1,84 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 80 flags 0 +S _stricmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 04 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 10 00 00 00 74 03 2B 46 DD 70 FE DD 6E 04 DD +R 00 00 01 00 +T 1B 00 00 00 66 05 23 DD 75 04 DD 74 05 2B 4E +R 00 00 01 00 +T 26 00 00 00 DD 71 FF 78 B9 28 43 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 DD 4E FF 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 03 00 +T 36 00 00 00 7E E6 02 28 08 DD 7E FF EE 20 47 +R 00 00 01 00 +T 41 00 00 00 18 03 +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 46 FF +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 C5 DD 4E FE 06 00 21 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 4F 00 00 00 09 7E E6 02 28 07 DD 7E FE EE 20 +R 00 00 01 00 +T 5A 00 00 00 18 03 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 7E FE +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 C1 B8 28 0B +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 DD 7E FE DD 96 FF 6F 26 00 18 0F +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 18 08 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 AF DD B6 FE 20 02 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 18 02 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 18 8B +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 21 00 00 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/strlen.rel b/src/nos/lib/crt_large_lib/strlen.rel new file mode 100644 index 00000000..1ae0d63d --- /dev/null +++ b/src/nos/lib/crt_large_lib/strlen.rel @@ -0,0 +1,33 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S _strlen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E FE DD 66 FF AF B6 28 0A +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 18 EC +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 4E 02 DD 46 03 DD 6E FE DD 66 +R 00 00 01 00 +T 30 00 00 00 FF A7 ED 42 C3 00 00 00 00 +R 00 00 01 00 02 09 01 00 diff --git a/src/nos/lib/crt_large_lib/strncat.rel b/src/nos/lib/crt_large_lib/strncat.rel new file mode 100644 index 00000000..61a9580c --- /dev/null +++ b/src/nos/lib/crt_large_lib/strncat.rel @@ -0,0 +1,50 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _memcpy Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _memchr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8B flags 0 +S _strncat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 56 03 CD 00 00 00 00 DD 5E 02 DD +R 00 00 01 00 02 07 02 00 +T 12 00 00 00 56 03 19 DD 75 FC DD 74 FD DD 6E +R 00 00 01 00 +T 1D 00 00 00 08 DD 66 09 E5 01 00 00 DD 5E 04 +R 00 00 01 00 +T 28 00 00 00 DD 56 05 CD 00 00 00 00 F1 DD 75 +R 00 00 01 00 02 08 06 00 +T 31 00 00 00 FE DD 74 FF 7D B4 28 23 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 44 00 00 00 FF A7 ED 42 23 E5 DD 4E 04 DD 46 +R 00 00 01 00 +T 4F 00 00 00 05 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 F1 18 26 +R 00 00 01 00 02 04 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 6E 08 DD 66 09 E5 DD 4E 04 DD +R 00 00 01 00 +T 67 00 00 00 46 05 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 70 00 00 00 00 00 00 00 F1 DD 6E 08 DD 66 09 +R 00 00 01 00 02 04 01 00 +T 79 00 00 00 DD 4E FC DD 46 FD 09 36 00 +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 diff --git a/src/nos/lib/crt_large_lib/strncmp.rel b/src/nos/lib/crt_large_lib/strncmp.rel new file mode 100644 index 00000000..f86542d4 --- /dev/null +++ b/src/nos/lib/crt_large_lib/strncmp.rel @@ -0,0 +1,51 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 61 flags 0 +S _strncmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 36 FE 00 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD 36 FF 00 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 18 00 00 00 74 09 23 7D B4 28 32 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T 2A 00 00 00 74 05 2B 46 DD 70 FF DD 6E 02 DD +R 00 00 01 00 +T 35 00 00 00 66 03 23 DD 75 02 DD 74 03 2B 4E +R 00 00 01 00 +T 40 00 00 00 DD 71 FE 79 B8 20 06 AF DD B6 FE +R 00 00 01 00 +T 4B 00 00 00 20 02 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 18 02 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 18 BC +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 4E FF 06 00 DD 6E FE 26 00 A7 +R 00 00 01 00 +T 5C 00 00 00 ED 42 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/crt_large_lib/strncpy.rel b/src/nos/lib/crt_large_lib/strncpy.rel new file mode 100644 index 00000000..358a3982 --- /dev/null +++ b/src/nos/lib/crt_large_lib/strncpy.rel @@ -0,0 +1,59 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7F flags 0 +S _strncpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 66 03 DD 75 FC DD 74 FD DD 71 FE +R 00 00 01 00 +T 14 00 00 00 DD 70 FF +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 7E 08 DD B6 09 28 33 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 2A 00 00 00 74 09 DD 6E FE DD 66 FF 23 DD 75 +R 00 00 01 00 +T 35 00 00 00 FE DD 74 FF 2B 46 DD 6E FC DD 66 +R 00 00 01 00 +T 40 00 00 00 FD 23 DD 75 FC DD 74 FD 2B 70 04 +R 00 00 01 00 +T 4B 00 00 00 05 20 02 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 18 02 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 18 C5 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 5D 00 00 00 74 09 23 7D B4 28 12 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 6F 00 00 00 74 FD 2B 36 00 18 DC +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 01 00 diff --git a/src/nos/lib/crt_large_lib/strnicmp.rel b/src/nos/lib/crt_large_lib/strnicmp.rel new file mode 100644 index 00000000..198c9f16 --- /dev/null +++ b/src/nos/lib/crt_large_lib/strnicmp.rel @@ -0,0 +1,90 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 93 flags 0 +S _strnicmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 04 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 10 00 00 00 74 09 23 7D B4 28 76 +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 22 00 00 00 74 03 2B 46 DD 70 FE DD 6E 04 DD +R 00 00 01 00 +T 2D 00 00 00 66 05 23 DD 75 04 DD 74 05 2B 4E +R 00 00 01 00 +T 38 00 00 00 DD 71 FF 78 B9 28 43 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 4E FF 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 03 00 +T 48 00 00 00 7E E6 02 28 08 DD 7E FF EE 20 47 +R 00 00 01 00 +T 53 00 00 00 18 03 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 46 FF +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 C5 DD 4E FE 06 00 21 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 61 00 00 00 09 7E E6 02 28 07 DD 7E FE EE 20 +R 00 00 01 00 +T 6C 00 00 00 18 03 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 7E FE +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 C1 B8 28 0B +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 7E FE DD 96 FF 6F 26 00 18 10 +R 00 00 01 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 18 08 +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 AF DD B6 FE 20 02 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 18 03 +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 21 00 00 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/strpbrk.rel b/src/nos/lib/crt_large_lib/strpbrk.rel new file mode 100644 index 00000000..c0566564 --- /dev/null +++ b/src/nos/lib/crt_large_lib/strpbrk.rel @@ -0,0 +1,48 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strchr Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3B flags 0 +S _strpbrk Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 03 00 00 00 +R 00 00 01 00 +T 03 00 00 00 +R 00 00 01 00 +T 03 00 00 00 DD 6E 02 DD 66 03 AF B6 28 28 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 DD 6E 02 DD 66 03 4E 06 00 DD 5E +R 00 00 01 00 +T 18 00 00 00 04 DD 56 05 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 09 01 00 +T 21 00 00 00 28 08 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 DD 6E 02 DD 66 03 18 0D +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 18 CE +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 21 00 00 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/strrchr.rel b/src/nos/lib/crt_large_lib/strrchr.rel new file mode 100644 index 00000000..30147e42 --- /dev/null +++ b/src/nos/lib/crt_large_lib/strrchr.rel @@ -0,0 +1,56 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 63 flags 0 +S _strrchr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 CD 00 00 00 00 DD 5E 02 DD +R 00 00 01 00 02 07 01 00 +T 12 00 00 00 56 03 19 DD 75 FE DD 74 FF 79 B0 +R 00 00 01 00 +T 1D 00 00 00 20 08 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E FE DD 66 FF 18 39 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 DD 6E 02 DD 66 03 DD 4E FE DD 46 +R 00 00 01 00 +T 32 00 00 00 FF A7 ED 42 28 25 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 6E FE DD 66 FF 2B DD 75 FE DD +R 00 00 01 00 +T 43 00 00 00 74 FF 4E 06 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 4E 00 00 00 A7 ED 42 20 08 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 DD 6E FE DD 66 FF 18 05 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 18 CA +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 21 00 00 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/strsep.rel b/src/nos/lib/crt_large_lib/strsep.rel new file mode 100644 index 00000000..d97b41f5 --- /dev/null +++ b/src/nos/lib/crt_large_lib/strsep.rel @@ -0,0 +1,50 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strpbrk Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 66 flags 0 +S _strsep Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 03 56 23 66 6A DD 75 FC DD 74 +R 00 00 01 00 +T 14 00 00 00 FD 7D B4 20 05 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 21 00 00 18 45 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 4E 04 DD 46 05 DD 5E FC DD 56 +R 00 00 01 00 +T 29 00 00 00 FD CD 00 00 00 00 DD 75 FE DD 74 +R 00 00 01 00 02 06 01 00 +T 32 00 00 00 FF 7D B4 28 1C +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 6E FE DD 66 FF 23 E5 DD 6E 02 +R 00 00 01 00 +T 42 00 00 00 DD 66 03 C1 71 23 70 DD 6E FE DD +R 00 00 01 00 +T 4D 00 00 00 66 FF 36 00 18 0A +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 DD 6E 02 DD 66 03 AF 77 23 77 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/strspn.rel b/src/nos/lib/crt_large_lib/strspn.rel new file mode 100644 index 00000000..6b8d87d6 --- /dev/null +++ b/src/nos/lib/crt_large_lib/strspn.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas 5 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7B flags 0 +S _strspn Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 02 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 66 03 DD 75 FA DD 74 FB AF DD 77 +R 00 00 01 00 +T 14 00 00 00 FE DD 77 FF +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 6E FA DD 66 FB AF B6 28 50 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 DD 6E 04 DD 66 05 DD 75 FC DD 74 +R 00 00 01 00 +T 2D 00 00 00 FD +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 6E FC DD 66 FD AF B6 28 1C DD +R 00 00 01 00 +T 39 00 00 00 6E FC DD 66 FD E5 DD 6E FA DD 66 +R 00 00 01 00 +T 44 00 00 00 FB 7E E1 BE 28 0A +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 18 DA +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 6E FC DD 66 FD AF B6 20 02 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 18 12 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 18 A6 +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 01 00 diff --git a/src/nos/lib/crt_large_lib/strstr.rel b/src/nos/lib/crt_large_lib/strstr.rel new file mode 100644 index 00000000..42a9410d --- /dev/null +++ b/src/nos/lib/crt_large_lib/strstr.rel @@ -0,0 +1,64 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _memcmp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 77 flags 0 +S _strstr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 59 50 CD +R 00 00 01 00 02 05 05 00 +T 08 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 02 00 +T 11 00 00 00 4E 02 DD 46 03 DD 71 FE DD 70 FF +R 00 00 01 00 +T 1C 00 00 00 7D B4 20 08 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 6E FE DD 66 FF 18 4C +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 6E 04 DD 66 05 4E 06 00 DD 5E +R 00 00 01 00 +T 33 00 00 00 FE DD 56 FF CD 00 00 00 00 DD 75 +R 00 00 01 00 02 09 01 00 +T 3C 00 00 00 FE DD 74 FF 7D B4 28 2D +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 DD 6E FC DD 66 FD E5 DD 4E 04 DD +R 00 00 01 00 +T 4F 00 00 00 46 05 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 58 00 00 00 00 00 00 00 F1 7D B4 20 08 +R 00 00 01 00 02 04 06 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E FE DD 66 FF 18 0D +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 18 B7 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 21 00 00 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/crt_large_lib/strtok.rel b/src/nos/lib/crt_large_lib/strtok.rel new file mode 100644 index 00000000..d74fc977 --- /dev/null +++ b/src/nos/lib/crt_large_lib/strtok.rel @@ -0,0 +1,81 @@ +XL4 +H 4 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strpbrk Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _strspn Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 96 flags 0 +S _strtok Def00000000 +A IDATA0 size 2 flags 0 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 03 20 15 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 2A 00 00 00 00 7D B4 20 05 +R 00 00 01 00 00 05 02 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 21 00 00 18 7A +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 2A 00 00 00 00 DD 75 02 DD 74 03 +R 00 00 01 00 00 05 02 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 2D 00 00 00 03 CD 00 00 00 00 4D 44 21 04 00 +R 00 00 01 00 02 06 04 00 +T 36 00 00 00 39 7E 81 77 23 7E 88 77 DD 6E 02 +R 00 00 01 00 +T 41 00 00 00 DD 66 03 AF B6 20 0B +R 00 00 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 21 00 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 00 08 02 00 +T 51 00 00 00 18 40 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 DD 6E 02 DD 66 03 DD 75 FE DD 74 +R 00 00 01 00 +T 5E 00 00 00 FF DD 4E 04 DD 46 05 EB CD +R 00 00 01 00 +T 67 00 00 00 00 00 00 00 DD 75 02 DD 74 03 7D +R 00 00 01 00 02 04 01 00 +T 70 00 00 00 B4 20 08 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 21 00 00 22 00 00 00 00 18 12 +R 00 00 01 00 00 08 02 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 DD 6E 02 DD 66 03 36 00 DD 6E 02 +R 00 00 01 00 +T 86 00 00 00 DD 66 03 23 22 00 00 00 00 +R 00 00 01 00 00 09 02 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/strtol.rel b/src/nos/lib/crt_large_lib/strtol.rel new file mode 100644 index 00000000..6d40fdd3 --- /dev/null +++ b/src/nos/lib/crt_large_lib/strtol.rel @@ -0,0 +1,84 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_32_L09 Ref00000000 +S ?L_NEG_L03 Ref00000000 +S _strtoul Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A3 flags 0 +S _strtol Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 FC +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FD DD 6E 02 DD 66 03 DD 75 +R 00 00 01 00 +T 14 00 00 00 FE DD 74 FF +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 6E FE DD 66 FF 4E 06 00 21 +R 00 00 01 00 +T 22 00 00 00 00 00 00 00 09 7E E6 10 28 0A +R 00 00 01 00 02 04 05 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 18 E4 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 6E FE DD 66 FF 7E FE 2D 20 12 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 18 13 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 6E FE DD 66 FF 7E FE 2B 20 08 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 6E 08 DD 66 09 E5 DD 4E 04 DD +R 00 00 01 00 +T 6F 00 00 00 46 05 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 78 00 00 00 00 00 00 00 F1 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 04 03 00 +T 81 00 00 00 DD 71 FA DD 70 FB DD 7E FC DD B6 +R 00 00 01 00 +T 8C 00 00 00 FD 28 05 CD 00 00 00 00 18 0C +R 00 00 01 00 02 08 02 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 DD 4E FA DD 46 FB DD 6E F8 DD 66 +R 00 00 01 00 +T 9F 00 00 00 F9 +R 00 00 01 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/crt_large_lib/strtoul.rel b/src/nos/lib/crt_large_lib/strtoul.rel new file mode 100644 index 00000000..913ae25f --- /dev/null +++ b/src/nos/lib/crt_large_lib/strtoul.rel @@ -0,0 +1,218 @@ +XL4 +H 2 areas A global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?L_MULASG_L03 Ref00000000 +S ?LEAVE_32_L09 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1DD flags 0 +S _strtoul Def00000086 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 36 FE FF +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 DD 36 FF FF DD 5E 02 16 00 21 +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 19 7E E6 08 28 0F +R 00 00 01 00 02 04 06 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 4E 02 06 00 21 D0 FF 09 DD 75 +R 00 00 01 00 +T 26 00 00 00 FE DD 74 FF +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 4E 02 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 06 00 +T 33 00 00 00 7E E6 04 28 0F +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 4E 02 06 00 21 A9 FF 09 DD 75 +R 00 00 01 00 +T 43 00 00 00 FE DD 74 FF +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 4E 02 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 06 00 +T 50 00 00 00 7E E6 02 28 0F +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 4E 02 06 00 21 B0 FF 09 DD 75 +R 00 00 01 00 +T 60 00 00 00 FE DD 74 FF +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 6F 00 00 00 FF CD 00 00 00 00 38 08 +R 00 00 01 00 02 06 08 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 36 FE FF DD 36 FF FF +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 CD 00 00 00 00 FA FF 11 02 80 DD +R 00 00 01 00 02 05 07 00 +T 8F 00 00 00 6E 08 DD 66 09 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 9A 00 00 00 38 0E DD 4E 08 DD 46 09 21 24 00 +R 00 00 01 00 +T A5 00 00 00 CD 00 00 00 00 30 07 +R 00 00 01 00 02 05 08 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 AF DD 77 08 DD 77 09 +R 00 00 01 00 +T B1 00 00 00 +R 00 00 01 00 +T B1 00 00 00 +R 00 00 01 00 +T B1 00 00 00 DD 6E 02 DD 66 03 4E 06 00 21 +R 00 00 01 00 +T BB 00 00 00 00 00 00 00 09 7E E6 10 28 0A +R 00 00 01 00 02 04 06 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 18 E4 +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 DD 6E 02 DD 66 03 7E FE 2B 20 0A +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 18 6D +R 00 00 01 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 DD 7E 08 DD B6 09 20 65 DD 6E 02 +R 00 00 01 00 +T ED 00 00 00 DD 66 03 7E FE 30 20 5A +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 DD 6E 02 DD 66 03 23 7E EE 20 FE +R 00 00 01 00 +T 00 01 00 00 58 20 17 +R 00 00 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 DD 36 08 10 DD 36 09 00 21 08 00 +R 00 00 01 00 +T 0E 01 00 00 39 7E C6 02 77 23 7E CE 00 77 18 +R 00 00 01 00 +T 19 01 00 00 35 +R 00 00 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 DD 6E 02 DD 66 03 23 7E EE 20 FE +R 00 00 01 00 +T 25 01 00 00 42 20 17 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 DD 36 08 02 DD 36 09 00 21 08 00 +R 00 00 01 00 +T 33 01 00 00 39 7E C6 02 77 23 7E CE 00 77 18 +R 00 00 01 00 +T 3E 01 00 00 10 +R 00 00 01 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 DD 36 08 08 DD 36 09 00 DD 34 02 +R 00 00 01 00 +T 4A 01 00 00 20 03 DD 34 03 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 DD 7E 08 DD B6 09 20 08 +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 DD 36 08 0A DD 36 09 00 +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 AF DD 77 FA DD 77 FB DD 77 FC DD +R 00 00 01 00 +T 6A 01 00 00 77 FD +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 4E 08 DD 46 09 DD 6E 02 DD 66 +R 00 00 01 00 +T 77 01 00 00 03 5E CD 00 00 00 00 DD 75 FE DD +R 00 00 01 00 00 07 01 00 +T 80 01 00 00 74 FF 7D A4 3C 28 2E +R 00 00 01 00 +T 87 01 00 00 +R 00 00 01 00 +T 87 01 00 00 21 00 00 39 DD 5E 08 DD 56 09 7A +R 00 00 01 00 +T 92 01 00 00 07 9F 4F 41 CD 00 00 00 00 21 +R 00 00 01 00 02 09 01 00 +T 9A 01 00 00 00 00 39 DD 5E FE DD 56 FF 7A 07 +R 00 00 01 00 +T A5 01 00 00 9F 4F 41 CD 00 00 00 00 DD 34 02 +R 00 00 01 00 02 08 04 00 +T AE 01 00 00 20 03 DD 34 03 +R 00 00 01 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 18 B7 +R 00 00 01 00 +T B5 01 00 00 +R 00 00 01 00 +T B5 01 00 00 DD 7E 04 DD B6 05 28 11 +R 00 00 01 00 +T BD 01 00 00 +R 00 00 01 00 +T BD 01 00 00 DD 6E 02 DD 66 03 E5 DD 6E 04 DD +R 00 00 01 00 +T C8 01 00 00 66 05 C1 71 23 70 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 DD 4E FC DD 46 FD DD 6E FA DD 66 +R 00 00 01 00 +T D9 01 00 00 FB C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 diff --git a/src/nos/lib/crt_large_lib/system.rel b/src/nos/lib/crt_large_lib/system.rel new file mode 100644 index 00000000..5e4dff2b --- /dev/null +++ b/src/nos/lib/crt_large_lib/system.rel @@ -0,0 +1,140 @@ +XL4 +H 5 areas B global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _execve Ref00000000 +S _environ Ref00000000 +S _abort Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _waitpid Ref00000000 +S _fork Ref00000000 +S _signal Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 131 flags 0 +S _system Def00000000 +A CSTR size E flags 0 +A IDATA0 size 8 flags 0 +A CDATA0 size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF DD 36 FE FF +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 36 FF FF DD 7E 02 DD B6 03 20 +R 00 00 01 00 +T 14 00 00 00 06 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 01 00 C3 2E 01 00 00 +R 00 00 01 00 00 08 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 21 00 00 E5 21 01 00 E5 11 03 00 +R 00 00 01 00 +T 26 00 00 00 CD 00 00 00 00 F1 F1 DD 75 F2 DD +R 00 00 01 00 02 05 09 00 +T 2F 00 00 00 74 F3 DD 71 F4 DD 70 F5 21 00 00 +R 00 00 01 00 +T 3A 00 00 00 E5 21 01 00 E5 11 02 00 CD +R 00 00 01 00 +T 43 00 00 00 00 00 00 00 F1 F1 DD 75 F6 DD 74 +R 00 00 01 00 02 04 09 00 +T 4C 00 00 00 F7 DD 71 F8 DD 70 F9 CD +R 00 00 01 00 +T 54 00 00 00 00 00 00 00 DD 75 FC DD 74 FD CB +R 00 00 01 00 02 04 08 00 +T 5D 00 00 00 7C 28 03 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 C3 FC 00 00 00 +R 00 00 01 00 00 05 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 DD 7E FC DD B6 FD 20 3A +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 21 00 00 E5 21 00 00 E5 11 03 00 +R 00 00 01 00 +T 76 00 00 00 CD 00 00 00 00 F1 F1 21 00 00 E5 +R 00 00 01 00 02 05 09 00 +T 7F 00 00 00 21 00 00 E5 11 02 00 CD +R 00 00 01 00 +T 87 00 00 00 00 00 00 00 F1 F1 DD 6E 02 DD 66 +R 00 00 01 00 02 04 09 00 +T 90 00 00 00 03 22 04 00 00 00 2A 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 02 00 +T 97 00 00 00 E5 01 00 00 00 00 11 06 00 00 00 +R 00 00 01 00 00 06 03 00 00 0B 02 00 +T 9E 00 00 00 CD 00 00 00 00 F1 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0B 03 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 21 00 00 E5 21 01 00 E5 11 03 00 +R 00 00 01 00 +T B0 00 00 00 CD 00 00 00 00 F1 F1 21 00 00 E5 +R 00 00 01 00 02 05 09 00 +T B9 00 00 00 21 01 00 E5 11 02 00 CD +R 00 00 01 00 +T C1 00 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 09 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 21 00 00 E5 21 0E 00 39 4D 44 11 +R 00 00 01 00 +T D0 00 00 00 FF FF CD 00 00 00 00 F1 DD 75 FA +R 00 00 01 00 02 07 07 00 +T D9 00 00 00 DD 74 FB 7D A4 3C 20 0A +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 DD 36 FE FF DD 36 FF FF 18 11 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 DD 6E FC DD 66 FD DD 4E FA DD 46 +R 00 00 01 00 +T F6 00 00 00 FB A7 ED 42 20 C9 +R 00 00 01 00 +T FC 00 00 00 +R 00 00 01 00 +T FC 00 00 00 +R 00 00 01 00 +T FC 00 00 00 DD 6E F4 DD 66 F5 E5 DD 6E F2 DD +R 00 00 01 00 +T 07 01 00 00 66 F3 E5 11 03 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 10 01 00 00 F1 F1 DD 6E F8 DD 66 F9 E5 DD 6E +R 00 00 01 00 +T 1B 01 00 00 F6 DD 66 F7 E5 11 02 00 CD +R 00 00 01 00 +T 24 01 00 00 00 00 00 00 F1 F1 DD 6E FE DD 66 +R 00 00 01 00 02 04 09 00 +T 2D 01 00 00 FF +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 73 68 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 2D 63 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 2F 62 69 6E 2F 73 68 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 03 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 06 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/crt_large_lib/termcap.rel b/src/nos/lib/crt_large_lib/termcap.rel new file mode 100644 index 00000000..76b76681 --- /dev/null +++ b/src/nos/lib/crt_large_lib/termcap.rel @@ -0,0 +1,1381 @@ +XL4 +H 6 areas 21 global symbols +S ?S_LSHASG_L02 Ref00000000 +S ?CL64180L_4_06_L00 Ref00000000 +S ?S_MULASG_L02 Ref00000000 +S _getenv Ref00000000 +S _memcpy Ref00000000 +S ?SS_DIVASG_L02 Ref00000000 +S _lseek Ref00000000 +S _close Ref00000000 +S _strlen Ref00000000 +S _strcmp Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _read Ref00000000 +S .__.ABS. Def00000000 +S _realloc Ref00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S ?CALL_IND_L09 Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _open Ref00000000 +S _malloc Ref00000000 +S _exit Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size CD6 flags 0 +S _tputs Def000003B7 +S _tgetnum Def000000BD +S _tgetstr Def00000129 +S _tgetflag Def000000F6 +S _tgetent Def00000517 +A CSTR size 37 flags 0 +A UDATA0 size 7 flags 0 +S _ospeed Def00000002 +S _tputs_baud_rate Def00000004 +S _PC Def00000006 +A IDATA0 size 3C flags 0 +A CDATA0 size 3C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 21 19 00 E5 01 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 09 00 00 00 11 02 00 CD 00 00 00 00 F1 11 +R 00 00 01 00 02 08 12 00 +T 11 00 00 00 01 00 CD 00 00 00 00 D1 C1 C9 +R 00 00 01 00 02 07 18 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 13 00 +T 22 00 00 00 56 03 CD 00 00 00 00 DD 75 FE DD +R 00 00 01 00 02 07 17 00 +T 2B 00 00 00 74 FF 7D B4 20 03 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 13 00 +T 46 00 00 00 56 03 CD 00 00 00 00 DD 75 FE DD +R 00 00 01 00 02 07 0D 00 +T 4F 00 00 00 74 FF 7D B4 20 03 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0F 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 6E 02 DD 66 03 AF B6 28 49 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 6E 02 DD 66 03 7E FE 3A 20 34 +R 00 00 01 00 +T 79 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 84 00 00 00 66 03 23 7E E1 BE 20 21 DD 6E 04 +R 00 00 01 00 +T 8F 00 00 00 DD 66 05 23 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 9A 00 00 00 23 23 7E E1 BE 20 0C +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 18 +R 00 00 01 00 +T AC 00 00 00 0D +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 18 AD +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 21 00 00 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 CD 00 00 00 00 FE FF DD 4E 02 DD +R 00 00 01 00 02 05 13 00 +T C6 00 00 00 46 03 ED 5B 00 00 00 00 CD +R 00 00 01 00 00 08 03 00 +T CD 00 00 00 61 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 00 04 01 00 +T D6 00 00 00 B4 28 0C DD 6E FE DD 66 FF 2B 7E +R 00 00 01 00 +T E1 00 00 00 FE 23 28 05 +R 00 00 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 21 FF FF 18 09 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 14 00 +T F3 00 00 00 +R 00 00 01 00 +T F3 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 CD 00 00 00 00 FE FF DD 4E 02 DD +R 00 00 01 00 02 05 13 00 +T FF 00 00 00 46 03 ED 5B 00 00 00 00 CD +R 00 00 01 00 00 08 03 00 +T 06 01 00 00 61 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 00 04 01 00 +T 0F 01 00 00 B4 28 11 DD 6E FE DD 66 FF 2B 7E +R 00 00 01 00 +T 1A 01 00 00 FE 3A 20 05 21 01 00 18 03 +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 21 00 00 +R 00 00 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 CD 00 00 00 00 FE FF DD 4E 02 DD +R 00 00 01 00 02 05 13 00 +T 32 01 00 00 46 03 ED 5B 00 00 00 00 CD +R 00 00 01 00 00 08 03 00 +T 39 01 00 00 61 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 00 04 01 00 +T 42 01 00 00 B4 28 18 DD 6E FE DD 66 FF 2B 7E +R 00 00 01 00 +T 4D 01 00 00 FE 3D 28 11 DD 6E FE DD 66 FF 2B +R 00 00 01 00 +T 58 01 00 00 7E FE 7E 28 05 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 21 00 00 18 0F +R 00 00 01 00 +T 62 01 00 00 +R 00 00 01 00 +T 62 01 00 00 DD 4E 04 DD 46 05 DD 5E FE DD 56 +R 00 00 01 00 +T 6D 01 00 00 FF CD 74 01 00 00 +R 00 00 01 00 00 06 01 00 +T 71 01 00 00 +R 00 00 01 00 +T 71 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 CD 00 00 00 00 F4 FF DD 7E 02 DD +R 00 00 01 00 02 05 13 00 +T 7D 01 00 00 B6 03 20 06 +R 00 00 01 00 +T 81 01 00 00 +R 00 00 01 00 +T 81 01 00 00 21 00 00 C3 B4 03 00 00 +R 00 00 01 00 00 08 01 00 +T 87 01 00 00 +R 00 00 01 00 +T 87 01 00 00 DD 7E 04 DD B6 05 20 59 +R 00 00 01 00 +T 8F 01 00 00 +R 00 00 01 00 +T 8F 01 00 00 DD 6E 02 DD 66 03 DD 75 F4 DD 74 +R 00 00 01 00 +T 9A 01 00 00 F5 +R 00 00 01 00 +T 9B 01 00 00 +R 00 00 01 00 +T 9B 01 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T A6 01 00 00 74 F5 2B 4E 06 00 DD 71 F8 DD 70 +R 00 00 01 00 +T B1 01 00 00 F9 79 B0 28 16 3E 3A DD AE F8 DD +R 00 00 01 00 +T BC 01 00 00 B6 F9 28 0C 3E 0A DD AE F8 DD B6 +R 00 00 01 00 +T C7 01 00 00 F9 28 02 +R 00 00 01 00 +T CA 01 00 00 +R 00 00 01 00 +T CA 01 00 00 +R 00 00 01 00 +T CA 01 00 00 +R 00 00 01 00 +T CA 01 00 00 18 CF +R 00 00 01 00 +T CC 01 00 00 +R 00 00 01 00 +T CC 01 00 00 DD 4E 02 DD 46 03 DD 6E F4 DD 66 +R 00 00 01 00 +T D7 01 00 00 F5 A7 ED 42 EB 13 CD 19 00 00 00 +R 00 00 01 00 00 0B 01 00 +T E0 01 00 00 DD 75 FE DD 74 FF 18 10 +R 00 00 01 00 +T E8 01 00 00 +R 00 00 01 00 +T E8 01 00 00 DD 6E 04 DD 66 05 46 23 66 68 DD +R 00 00 01 00 +T F3 01 00 00 75 FE DD 74 FF +R 00 00 01 00 +T F8 01 00 00 +R 00 00 01 00 +T F8 01 00 00 DD 6E 02 DD 66 03 DD 75 F4 DD 74 +R 00 00 01 00 +T 03 02 00 00 F5 DD 6E FE DD 66 FF DD 75 F6 DD +R 00 00 01 00 +T 0E 02 00 00 74 F7 +R 00 00 01 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T 1B 02 00 00 74 F5 2B 4E 06 00 DD 71 F8 DD 70 +R 00 00 01 00 +T 26 02 00 00 F9 79 B0 CA 8C 03 00 00 3E 3A DD +R 00 00 01 00 00 08 01 00 +T 2F 02 00 00 AE F8 DD B6 F9 CA 8C 03 00 00 3E +R 00 00 01 00 00 0A 01 00 +T 38 02 00 00 0A DD AE F8 DD B6 F9 CA +R 00 00 01 00 +T 40 02 00 00 8C 03 00 00 +R 00 00 01 00 00 04 01 00 +T 42 02 00 00 +R 00 00 01 00 +T 42 02 00 00 +R 00 00 01 00 +T 42 02 00 00 +R 00 00 01 00 +T 42 02 00 00 3E 5E DD AE F8 DD B6 F9 20 1D +R 00 00 01 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T 57 02 00 00 74 F5 2B 7E E6 1F 4F 06 00 DD 71 +R 00 00 01 00 +T 62 02 00 00 F8 DD 70 F9 C3 77 03 00 00 +R 00 00 01 00 00 09 01 00 +T 69 02 00 00 +R 00 00 01 00 +T 69 02 00 00 3E 5C DD AE F8 DD B6 F9 C2 +R 00 00 01 00 +T 72 02 00 00 77 03 00 00 +R 00 00 01 00 00 04 01 00 +T 74 02 00 00 +R 00 00 01 00 +T 74 02 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T 7F 02 00 00 74 F5 2B 4E 06 00 DD 71 F8 DD 70 +R 00 00 01 00 +T 8A 02 00 00 F9 11 30 80 69 60 3E 80 AC 67 ED +R 00 00 01 00 +T 95 02 00 00 52 DA 2A 03 00 00 DD 4E F8 DD 46 +R 00 00 01 00 00 06 01 00 +T 9E 02 00 00 F9 21 37 00 CD 00 00 00 00 DA +R 00 00 01 00 02 09 15 00 +T A6 02 00 00 2A 03 00 00 +R 00 00 01 00 00 04 01 00 +T A8 02 00 00 +R 00 00 01 00 +T A8 02 00 00 +R 00 00 01 00 +T A8 02 00 00 +R 00 00 01 00 +T A8 02 00 00 21 04 00 39 7E D6 30 77 23 7E DE +R 00 00 01 00 +T B3 02 00 00 00 77 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T BC 02 00 00 +R 00 00 01 00 +T BC 02 00 00 DD 6E FA DD 66 FB 23 DD 75 FA DD +R 00 00 01 00 +T C7 02 00 00 74 FB 01 03 80 3E 80 AC 67 ED 42 +R 00 00 01 00 +T D2 02 00 00 30 54 DD 6E F4 DD 66 F5 4E 06 00 +R 00 00 01 00 +T DD 02 00 00 DD 71 FC DD 70 FD 69 60 01 30 80 +R 00 00 01 00 +T E8 02 00 00 3E 80 AC 67 ED 42 38 38 DD 4E FC +R 00 00 01 00 +T F3 02 00 00 DD 46 FD 21 37 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 15 00 +T FC 02 00 00 38 2A +R 00 00 01 00 +T FE 02 00 00 +R 00 00 01 00 +T FE 02 00 00 +R 00 00 01 00 +T FE 02 00 00 +R 00 00 01 00 +T FE 02 00 00 21 04 00 39 06 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 07 03 00 00 21 D0 FF DD 4E FC DD 46 FD 09 4D +R 00 00 01 00 +T 12 03 00 00 44 21 04 00 39 7E 81 77 23 7E 88 +R 00 00 01 00 +T 1D 03 00 00 77 DD 34 F4 20 03 DD 34 F5 +R 00 00 01 00 +T 26 03 00 00 +R 00 00 01 00 +T 26 03 00 00 18 94 +R 00 00 01 00 +T 28 03 00 00 +R 00 00 01 00 +T 28 03 00 00 18 4D +R 00 00 01 00 +T 2A 03 00 00 +R 00 00 01 00 +T 2A 03 00 00 01 40 80 DD 6E F8 DD 66 F9 3E 80 +R 00 00 01 00 +T 35 03 00 00 AC 67 ED 42 38 3C 01 80 80 DD 6E +R 00 00 01 00 +T 40 03 00 00 F8 DD 66 F9 3E 80 AC 67 ED 42 30 +R 00 00 01 00 +T 4B 03 00 00 2B +R 00 00 01 00 +T 4C 03 00 00 +R 00 00 01 00 +T 4C 03 00 00 +R 00 00 01 00 +T 4C 03 00 00 +R 00 00 01 00 +T 4C 03 00 00 DD 7E F8 E6 DF 6F DD 7E F9 E6 FF +R 00 00 01 00 +T 57 03 00 00 67 01 C0 FF FF FF 09 4E 06 00 DD +R 00 00 01 00 00 06 04 00 +T 60 03 00 00 71 FC DD 70 FD 3E 20 A9 B0 28 0C +R 00 00 01 00 +T 6B 03 00 00 +R 00 00 01 00 +T 6B 03 00 00 DD 6E FC DD 66 FD DD 75 F8 DD 74 +R 00 00 01 00 +T 76 03 00 00 F9 +R 00 00 01 00 +T 77 03 00 00 +R 00 00 01 00 +T 77 03 00 00 +R 00 00 01 00 +T 77 03 00 00 +R 00 00 01 00 +T 77 03 00 00 +R 00 00 01 00 +T 77 03 00 00 +R 00 00 01 00 +T 77 03 00 00 DD 46 F8 DD 6E F6 DD 66 F7 23 DD +R 00 00 01 00 +T 82 03 00 00 75 F6 DD 74 F7 2B 70 C3 +R 00 00 01 00 +T 8A 03 00 00 10 02 00 00 +R 00 00 01 00 00 04 01 00 +T 8C 03 00 00 +R 00 00 01 00 +T 8C 03 00 00 DD 6E F6 DD 66 F7 36 00 DD 7E 04 +R 00 00 01 00 +T 97 03 00 00 DD B6 05 28 12 +R 00 00 01 00 +T 9C 03 00 00 +R 00 00 01 00 +T 9C 03 00 00 DD 6E F6 DD 66 F7 23 E5 DD 6E 04 +R 00 00 01 00 +T A7 03 00 00 DD 66 05 C1 71 23 70 +R 00 00 01 00 +T AE 03 00 00 +R 00 00 01 00 +T AE 03 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T B4 03 00 00 +R 00 00 01 00 +T B4 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T B7 03 00 00 +R 00 00 01 00 +T B7 03 00 00 CD 00 00 00 00 FE FF AF DD 77 FE +R 00 00 01 00 02 05 13 00 +T C0 03 00 00 DD 77 FF DD 7E 02 DD B6 03 20 03 +R 00 00 01 00 +T CB 03 00 00 +R 00 00 01 00 +T CB 03 00 00 C3 14 05 00 00 +R 00 00 01 00 00 05 01 00 +T CE 03 00 00 +R 00 00 01 00 +T CE 03 00 00 +R 00 00 01 00 +T CE 03 00 00 DD 6E 02 DD 66 03 7E FE 30 38 39 +R 00 00 01 00 +T D9 03 00 00 DD 6E 02 DD 66 03 3E 39 BE 38 2E +R 00 00 01 00 +T E4 03 00 00 +R 00 00 01 00 +T E4 03 00 00 +R 00 00 01 00 +T E4 03 00 00 +R 00 00 01 00 +T E4 03 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T EF 03 00 00 74 03 2B 4E 06 00 21 D0 FF 09 4D +R 00 00 01 00 +T FA 03 00 00 44 21 00 00 39 7E 81 77 23 7E 88 +R 00 00 01 00 +T 05 04 00 00 77 21 00 00 39 01 0A 00 CD +R 00 00 01 00 +T 0E 04 00 00 00 00 00 00 18 BC +R 00 00 01 00 02 04 02 00 +T 12 04 00 00 +R 00 00 01 00 +T 12 04 00 00 DD 6E 02 DD 66 03 7E FE 2E 20 2A +R 00 00 01 00 +T 1D 04 00 00 +R 00 00 01 00 +T 1D 04 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 25 04 00 00 +R 00 00 01 00 +T 25 04 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 30 04 00 00 74 03 2B 4E 06 00 21 D0 FF 09 4D +R 00 00 01 00 +T 3B 04 00 00 44 21 00 00 39 7E 81 77 23 7E 88 +R 00 00 01 00 +T 46 04 00 00 77 +R 00 00 01 00 +T 47 04 00 00 +R 00 00 01 00 +T 47 04 00 00 DD 6E 02 DD 66 03 7E FE 2A 20 15 +R 00 00 01 00 +T 52 04 00 00 +R 00 00 01 00 +T 52 04 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 5A 04 00 00 +R 00 00 01 00 +T 5A 04 00 00 21 00 00 39 DD 4E 04 DD 46 05 CD +R 00 00 01 00 +T 65 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 67 04 00 00 +R 00 00 01 00 +T 67 04 00 00 +R 00 00 01 00 +T 67 04 00 00 DD 6E 02 DD 66 03 AF B6 28 1C +R 00 00 01 00 +T 71 04 00 00 +R 00 00 01 00 +T 71 04 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 7C 04 00 00 74 03 2B 5E 16 00 DD 6E 08 DD 66 +R 00 00 01 00 +T 87 04 00 00 09 CD 00 00 00 00 18 DA +R 00 00 01 00 02 06 11 00 +T 8D 04 00 00 +R 00 00 01 00 +T 8D 04 00 00 2A 02 00 00 00 29 01 1C 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 04 00 +T 94 04 00 00 09 4E 23 46 21 00 00 39 CD +R 00 00 01 00 +T 9D 04 00 00 00 00 00 00 21 00 00 39 7E C6 F4 +R 00 00 01 00 02 04 02 00 +T A6 04 00 00 77 23 7E CE 01 77 21 00 00 39 01 +R 00 00 01 00 +T B1 04 00 00 E8 03 CD 00 00 00 00 2A +R 00 00 01 00 02 07 05 00 +T B7 04 00 00 02 00 00 00 29 01 1C 00 00 00 09 +R 00 00 01 00 00 04 03 00 00 0A 04 00 +T BE 04 00 00 23 CB 7E 28 14 +R 00 00 01 00 +T C3 04 00 00 +R 00 00 01 00 +T C3 04 00 00 DD 4E FE DD 46 FF A7 21 00 00 ED +R 00 00 01 00 +T CE 04 00 00 42 DD 75 FE DD 74 FF 18 16 +R 00 00 01 00 +T D7 04 00 00 +R 00 00 01 00 +T D7 04 00 00 21 00 00 39 7E C6 32 77 30 02 23 +R 00 00 01 00 +T E2 04 00 00 34 +R 00 00 01 00 +T E3 04 00 00 +R 00 00 01 00 +T E3 04 00 00 21 00 00 39 01 64 00 CD +R 00 00 01 00 +T EB 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 +T ED 04 00 00 +R 00 00 01 00 +T ED 04 00 00 +R 00 00 01 00 +T ED 04 00 00 DD 4E FE DD 46 FF 0B DD 71 FE DD +R 00 00 01 00 +T F8 04 00 00 70 FF 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 15 00 +T 01 05 00 00 30 11 +R 00 00 01 00 +T 03 05 00 00 +R 00 00 01 00 +T 03 05 00 00 ED 5B 06 00 00 00 16 00 DD 6E 08 +R 00 00 01 00 00 06 03 00 +T 0C 05 00 00 DD 66 09 CD 00 00 00 00 18 D9 +R 00 00 01 00 02 08 11 00 +T 14 05 00 00 +R 00 00 01 00 +T 14 05 00 00 +R 00 00 01 00 +T 14 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 17 05 00 00 +R 00 00 01 00 +T 17 05 00 00 CD 00 00 00 00 E0 FF AF DD 77 F8 +R 00 00 01 00 02 05 13 00 +T 20 05 00 00 DD 77 F9 11 1A 00 00 00 CD +R 00 00 01 00 00 08 02 00 +T 27 05 00 00 00 00 00 00 DD 75 FA DD 74 FB AF +R 00 00 01 00 02 04 03 00 +T 30 05 00 00 DD 77 FC DD 77 FD 7D B4 20 06 +R 00 00 01 00 +T 3A 05 00 00 +R 00 00 01 00 +T 3A 05 00 00 21 FF FF C3 87 08 00 00 +R 00 00 01 00 00 08 01 00 +T 40 05 00 00 +R 00 00 01 00 +T 40 05 00 00 11 1F 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 00 05 02 00 02 0A 03 00 +T 47 05 00 00 75 E0 DD 74 E1 7D B4 28 11 DD 6E +R 00 00 01 00 +T 52 05 00 00 E0 DD 66 E1 AF B6 20 07 +R 00 00 01 00 +T 5A 05 00 00 +R 00 00 01 00 +T 5A 05 00 00 +R 00 00 01 00 +T 5A 05 00 00 +R 00 00 01 00 +T 5A 05 00 00 AF DD 77 E0 DD 77 E1 +R 00 00 01 00 +T 61 05 00 00 +R 00 00 01 00 +T 61 05 00 00 DD 7E E0 DD B6 E1 28 10 DD 6E E0 +R 00 00 01 00 +T 6C 05 00 00 DD 66 E1 7E FE 2F 20 05 21 01 00 +R 00 00 01 00 +T 77 05 00 00 18 03 +R 00 00 01 00 +T 79 05 00 00 +R 00 00 01 00 +T 79 05 00 00 21 00 00 +R 00 00 01 00 +T 7C 05 00 00 +R 00 00 01 00 +T 7C 05 00 00 DD 75 FE DD 74 FF DD 7E E0 DD B6 +R 00 00 01 00 +T 87 05 00 00 E1 28 75 DD 7E FE DD B6 FF 20 6D +R 00 00 01 00 +T 92 05 00 00 DD 4E FA DD 46 FB DD 5E 04 DD 56 +R 00 00 01 00 +T 9D 05 00 00 05 CD 00 00 00 00 7D B4 20 5A +R 00 00 01 00 02 06 09 00 +T A5 05 00 00 +R 00 00 01 00 +T A5 05 00 00 +R 00 00 01 00 +T A5 05 00 00 +R 00 00 01 00 +T A5 05 00 00 01 00 00 C5 01 27 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T AE 05 00 00 E0 DD 56 E1 CD 61 00 00 00 EB C1 +R 00 00 01 00 00 09 01 00 +T B7 05 00 00 CD 74 01 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 00 05 01 00 +T C0 05 00 00 7D B4 20 28 +R 00 00 01 00 +T C4 05 00 00 +R 00 00 01 00 +T C4 05 00 00 DD 7E 02 DD B6 03 20 0E +R 00 00 01 00 +T CC 05 00 00 +R 00 00 01 00 +T CC 05 00 00 DD 6E E0 DD 66 E1 DD 75 02 DD 74 +R 00 00 01 00 +T D7 05 00 00 03 18 0F +R 00 00 01 00 +T DA 05 00 00 +R 00 00 01 00 +T DA 05 00 00 DD 4E E0 DD 46 E1 DD 5E 02 DD 56 +R 00 00 01 00 +T E5 05 00 00 03 CD 00 00 00 00 +R 00 00 01 00 02 06 10 00 +T E9 05 00 00 +R 00 00 01 00 +T E9 05 00 00 C3 6B 08 00 00 +R 00 00 01 00 00 05 01 00 +T EC 05 00 00 +R 00 00 01 00 +T EC 05 00 00 DD 6E E0 DD 66 E1 DD 75 F6 DD 74 +R 00 00 01 00 +T F7 05 00 00 F7 AF DD 77 E0 DD 77 E1 +R 00 00 01 00 +T FF 05 00 00 +R 00 00 01 00 +T FF 05 00 00 DD 7E E0 DD B6 E1 28 08 DD 7E FE +R 00 00 01 00 +T 0A 06 00 00 DD B6 FF 20 08 +R 00 00 01 00 +T 0F 06 00 00 +R 00 00 01 00 +T 0F 06 00 00 +R 00 00 01 00 +T 0F 06 00 00 +R 00 00 01 00 +T 0F 06 00 00 DD 36 E0 2A 00 00 00 DD 36 E1 +R 00 00 01 00 09 07 02 00 +T 16 06 00 00 2A 00 00 00 +R 00 00 01 00 89 04 02 00 +T 17 06 00 00 +R 00 00 01 00 +T 17 06 00 00 21 00 00 E5 DD 6E E0 DD 66 E1 E5 +R 00 00 01 00 +T 22 06 00 00 CD 00 00 00 00 F1 F1 DD 75 E2 DD +R 00 00 01 00 02 05 16 00 +T 2B 06 00 00 74 E3 CB 7C 28 06 +R 00 00 01 00 +T 31 06 00 00 +R 00 00 01 00 +T 31 06 00 00 21 FF FF C3 87 08 00 00 +R 00 00 01 00 00 08 01 00 +T 37 06 00 00 +R 00 00 01 00 +T 37 06 00 00 DD 36 E6 00 DD 36 E7 08 DD 5E E6 +R 00 00 01 00 +T 42 06 00 00 DD 56 E7 13 CD 19 00 00 00 DD 75 +R 00 00 01 00 00 09 01 00 +T 4B 06 00 00 E4 DD 74 E5 DD 7E F8 DD B6 F9 28 +R 00 00 01 00 +T 56 06 00 00 08 DD 6E F8 DD 66 F9 18 06 +R 00 00 01 00 +T 5F 06 00 00 +R 00 00 01 00 +T 5F 06 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 65 06 00 00 +R 00 00 01 00 +T 65 06 00 00 DD 75 F2 DD 74 F3 DD 7E 02 DD B6 +R 00 00 01 00 +T 70 06 00 00 03 20 2A +R 00 00 01 00 +T 73 06 00 00 +R 00 00 01 00 +T 73 06 00 00 DD 7E F8 DD B6 F9 28 0C DD 5E F6 +R 00 00 01 00 +T 7E 06 00 00 DD 56 F7 CD 00 00 00 00 23 18 06 +R 00 00 01 00 02 08 08 00 +T 87 06 00 00 +R 00 00 01 00 +T 87 06 00 00 DD 6E E6 DD 66 E7 +R 00 00 01 00 +T 8D 06 00 00 +R 00 00 01 00 +T 8D 06 00 00 DD 75 FC DD 74 FD EB CD +R 00 00 01 00 +T 95 06 00 00 19 00 00 00 DD 75 02 DD 74 03 +R 00 00 01 00 00 04 01 00 +T 9D 06 00 00 +R 00 00 01 00 +T 9D 06 00 00 DD 6E 02 DD 66 03 DD 75 EE DD 74 +R 00 00 01 00 +T A8 06 00 00 EF DD 7E F8 DD B6 F9 28 25 +R 00 00 01 00 +T B1 06 00 00 +R 00 00 01 00 +T B1 06 00 00 DD 4E F6 DD 46 F7 DD 5E 02 DD 56 +R 00 00 01 00 +T BC 06 00 00 03 CD 00 00 00 00 DD 5E F6 DD 56 +R 00 00 01 00 02 06 10 00 +T C5 06 00 00 F7 CD 00 00 00 00 4D 44 21 0E 00 +R 00 00 01 00 02 06 08 00 +T CE 06 00 00 39 7E 81 77 23 7E 88 77 +R 00 00 01 00 +T D6 06 00 00 +R 00 00 01 00 +T D6 06 00 00 +R 00 00 01 00 +T D6 06 00 00 DD 7E F2 DD B6 F3 CA 30 08 00 00 +R 00 00 01 00 00 0B 01 00 +T DF 06 00 00 +R 00 00 01 00 +T DF 06 00 00 21 04 00 39 E5 DD 4E E2 DD 46 E3 +R 00 00 01 00 +T EA 06 00 00 DD 5E F2 DD 56 F3 CD 8A 08 00 00 +R 00 00 01 00 00 0B 01 00 +T F3 06 00 00 F1 7D B4 20 29 +R 00 00 01 00 +T F8 06 00 00 +R 00 00 01 00 +T F8 06 00 00 DD 5E E2 DD 56 E3 CD 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 01 07 00 00 DD 5E E4 DD 56 E5 CD 00 00 00 00 +R 00 00 01 00 02 0B 0E 00 +T 0A 07 00 00 DD 7E FC DD B6 FD 28 09 +R 00 00 01 00 +T 12 07 00 00 +R 00 00 01 00 +T 12 07 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 0E 00 +T 1B 07 00 00 +R 00 00 01 00 +T 1B 07 00 00 21 00 00 C3 87 08 00 00 +R 00 00 01 00 00 08 01 00 +T 21 07 00 00 +R 00 00 01 00 +T 21 07 00 00 DD 6E 04 DD 66 05 DD 4E F2 DD 46 +R 00 00 01 00 +T 2C 07 00 00 F3 A7 ED 42 28 09 +R 00 00 01 00 +T 32 07 00 00 +R 00 00 01 00 +T 32 07 00 00 DD 5E F2 DD 56 F3 CD 00 00 00 00 +R 00 00 01 00 02 0B 0E 00 +T 3B 07 00 00 +R 00 00 01 00 +T 3B 07 00 00 DD 7E FC DD B6 FD 28 4F +R 00 00 01 00 +T 43 07 00 00 +R 00 00 01 00 +T 43 07 00 00 DD 4E 02 DD 46 03 DD 6E EE DD 66 +R 00 00 01 00 +T 4E 07 00 00 EF A7 ED 42 DD 4E E6 DD 46 E7 09 +R 00 00 01 00 +T 59 07 00 00 DD 75 FC DD 74 FD 4D 44 DD 5E 02 +R 00 00 01 00 +T 64 07 00 00 DD 56 03 CD 3D 00 00 00 DD 75 E0 +R 00 00 01 00 00 08 01 00 +T 6D 07 00 00 DD 74 E1 DD 4E 02 DD 46 03 A7 ED +R 00 00 01 00 +T 78 07 00 00 42 4D 44 21 0E 00 39 7E 81 77 23 +R 00 00 01 00 +T 83 07 00 00 7E 88 77 DD 6E E0 DD 66 E1 DD 75 +R 00 00 01 00 +T 8E 07 00 00 02 DD 74 03 +R 00 00 01 00 +T 92 07 00 00 +R 00 00 01 00 +T 92 07 00 00 DD 6E EE DD 66 EF DD 75 F0 DD 74 +R 00 00 01 00 +T 9D 07 00 00 F1 DD 6E E8 DD 66 E9 DD 75 E0 DD +R 00 00 01 00 +T A8 07 00 00 74 E1 +R 00 00 01 00 +T AA 07 00 00 +R 00 00 01 00 +T AA 07 00 00 DD 6E E0 DD 66 E1 23 DD 75 E0 DD +R 00 00 01 00 +T B5 07 00 00 74 E1 2B 4E 06 00 DD 71 F4 DD 70 +R 00 00 01 00 +T C0 07 00 00 F5 DD 6E EE DD 66 EF 23 DD 75 EE +R 00 00 01 00 +T CB 07 00 00 DD 74 EF 2B 71 0C 0D 28 36 3E 0A +R 00 00 01 00 +T D6 07 00 00 DD AE F4 DD B6 F5 28 2C +R 00 00 01 00 +T DE 07 00 00 +R 00 00 01 00 +T DE 07 00 00 +R 00 00 01 00 +T DE 07 00 00 +R 00 00 01 00 +T DE 07 00 00 3E 5C DD AE F4 DD B6 F5 20 20 DD +R 00 00 01 00 +T E9 07 00 00 6E E0 DD 66 E1 7E FE 0A 20 15 +R 00 00 01 00 +T F3 07 00 00 +R 00 00 01 00 +T F3 07 00 00 +R 00 00 01 00 +T F3 07 00 00 +R 00 00 01 00 +T F3 07 00 00 DD 6E EE DD 66 EF 2B DD 75 EE DD +R 00 00 01 00 +T FE 07 00 00 74 EF DD 34 E0 20 03 DD 34 E1 +R 00 00 01 00 +T 08 08 00 00 +R 00 00 01 00 +T 08 08 00 00 +R 00 00 01 00 +T 08 08 00 00 18 A0 +R 00 00 01 00 +T 0A 08 00 00 +R 00 00 01 00 +T 0A 08 00 00 DD 6E EE DD 66 EF 36 00 01 00 00 +R 00 00 01 00 +T 15 08 00 00 C5 01 27 00 00 00 DD 5E F0 DD 56 +R 00 00 01 00 00 06 02 00 +T 1E 08 00 00 F1 CD 61 00 00 00 EB C1 CD +R 00 00 01 00 00 06 01 00 +T 25 08 00 00 74 01 00 00 DD 75 F2 DD 74 F3 C3 +R 00 00 01 00 00 04 01 00 +T 2E 08 00 00 D6 06 00 00 +R 00 00 01 00 00 04 01 00 +T 30 08 00 00 +R 00 00 01 00 +T 30 08 00 00 DD 5E E2 DD 56 E3 CD 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 39 08 00 00 DD 5E E4 DD 56 E5 CD 00 00 00 00 +R 00 00 01 00 02 0B 0E 00 +T 42 08 00 00 DD 7E FC DD B6 FD 28 21 +R 00 00 01 00 +T 4A 08 00 00 +R 00 00 01 00 +T 4A 08 00 00 DD 4E 02 DD 46 03 DD 6E EE DD 66 +R 00 00 01 00 +T 55 08 00 00 EF A7 ED 42 4D 44 03 DD 5E 02 DD +R 00 00 01 00 +T 60 08 00 00 56 03 CD 3D 00 00 00 DD 75 02 DD +R 00 00 01 00 00 07 01 00 +T 69 08 00 00 74 03 +R 00 00 01 00 +T 6B 08 00 00 +R 00 00 01 00 +T 6B 08 00 00 +R 00 00 01 00 +T 6B 08 00 00 DD 6E 02 DD 66 03 22 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 74 08 00 00 DD 7E FC DD B6 FD 28 08 +R 00 00 01 00 +T 7C 08 00 00 +R 00 00 01 00 +T 7C 08 00 00 DD 6E 02 DD 66 03 18 03 +R 00 00 01 00 +T 84 08 00 00 +R 00 00 01 00 +T 84 08 00 00 21 01 00 +R 00 00 01 00 +T 87 08 00 00 +R 00 00 01 00 +T 87 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 8A 08 00 00 +R 00 00 01 00 +T 8A 08 00 00 CD 00 00 00 00 FE FF 21 04 00 DD +R 00 00 01 00 02 05 13 00 +T 93 08 00 00 5E 08 DD 56 09 19 E5 EB 5E 23 56 +R 00 00 01 00 +T 9E 08 00 00 E1 73 23 72 21 08 00 DD 5E 08 DD +R 00 00 01 00 +T A9 08 00 00 56 09 19 AF 77 23 77 21 06 00 19 +R 00 00 01 00 +T B4 08 00 00 AF 77 23 77 21 04 00 19 7E 23 66 +R 00 00 01 00 +T BF 08 00 00 6F 36 00 21 00 00 E5 21 00 00 E5 +R 00 00 01 00 +T CA 08 00 00 21 00 00 E5 59 50 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T D3 08 00 00 F1 F1 F1 +R 00 00 01 00 +T D6 08 00 00 +R 00 00 01 00 +T D6 08 00 00 21 06 00 DD 4E 08 DD 46 09 09 7E +R 00 00 01 00 +T E1 08 00 00 23 B6 C2 6E 09 00 00 +R 00 00 01 00 00 07 01 00 +T E6 08 00 00 +R 00 00 01 00 +T E6 08 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T ED 08 00 00 +R 00 00 01 00 +T ED 08 00 00 DD 6E FE DD 66 FF E5 DD 4E 08 DD +R 00 00 01 00 +T F8 08 00 00 46 09 DD 5E 04 DD 56 05 CD +R 00 00 01 00 +T 01 09 00 00 A9 0A 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 00 04 01 00 +T 0A 09 00 00 21 06 00 DD 4E 08 DD 46 09 09 7E +R 00 00 01 00 +T 15 09 00 00 23 B6 20 0D DD 6E FE DD 66 FF 2B +R 00 00 01 00 +T 20 09 00 00 2B 7E FE 5C 28 C7 +R 00 00 01 00 +T 26 09 00 00 +R 00 00 01 00 +T 26 09 00 00 21 04 00 DD 4E 08 DD 46 09 09 7E +R 00 00 01 00 +T 31 09 00 00 23 66 6F 7E FE 23 28 1F DD 4E 02 +R 00 00 01 00 +T 3C 09 00 00 DD 46 03 21 04 00 DD 5E 08 DD 56 +R 00 00 01 00 +T 47 09 00 00 09 19 5E 23 56 CD 74 09 00 00 7D +R 00 00 01 00 00 0A 01 00 +T 50 09 00 00 B4 28 05 +R 00 00 01 00 +T 53 09 00 00 +R 00 00 01 00 +T 53 09 00 00 +R 00 00 01 00 +T 53 09 00 00 +R 00 00 01 00 +T 53 09 00 00 21 01 00 18 19 +R 00 00 01 00 +T 58 09 00 00 +R 00 00 01 00 +T 58 09 00 00 21 04 00 DD 4E 08 DD 46 09 09 DD +R 00 00 01 00 +T 63 09 00 00 4E FE DD 46 FF 71 23 70 C3 +R 00 00 01 00 +T 6C 09 00 00 D6 08 00 00 +R 00 00 01 00 00 04 01 00 +T 6E 09 00 00 +R 00 00 01 00 +T 6E 09 00 00 21 00 00 +R 00 00 01 00 +T 71 09 00 00 +R 00 00 01 00 +T 71 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 74 09 00 00 +R 00 00 01 00 +T 74 09 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 13 00 +T 7D 09 00 00 56 03 CD EA 09 00 00 7D B4 20 05 +R 00 00 01 00 00 07 01 00 +T 86 09 00 00 +R 00 00 01 00 +T 86 09 00 00 21 01 00 18 5C +R 00 00 01 00 +T 8B 09 00 00 +R 00 00 01 00 +T 8B 09 00 00 DD 6E 02 DD 66 03 DD 75 FE DD 74 +R 00 00 01 00 +T 96 09 00 00 FF +R 00 00 01 00 +T 97 09 00 00 +R 00 00 01 00 +T 97 09 00 00 DD 6E FE DD 66 FF AF B6 28 43 DD +R 00 00 01 00 +T A2 09 00 00 6E FE DD 66 FF 7E FE 0A 28 38 DD +R 00 00 01 00 +T AD 09 00 00 6E FE DD 66 FF 7E FE 3A 28 2D +R 00 00 01 00 +T B7 09 00 00 +R 00 00 01 00 +T B7 09 00 00 +R 00 00 01 00 +T B7 09 00 00 +R 00 00 01 00 +T B7 09 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T C2 09 00 00 74 FF 2B 7E FE 7C 20 18 DD 4E 04 +R 00 00 01 00 +T CD 09 00 00 DD 46 05 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T D7 09 00 00 EA 09 00 00 7D B4 20 05 +R 00 00 01 00 00 04 01 00 +T DD 09 00 00 +R 00 00 01 00 +T DD 09 00 00 +R 00 00 01 00 +T DD 09 00 00 +R 00 00 01 00 +T DD 09 00 00 21 01 00 18 05 +R 00 00 01 00 +T E2 09 00 00 +R 00 00 01 00 +T E2 09 00 00 18 B3 +R 00 00 01 00 +T E4 09 00 00 +R 00 00 01 00 +T E4 09 00 00 21 00 00 +R 00 00 01 00 +T E7 09 00 00 +R 00 00 01 00 +T E7 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T EA 09 00 00 +R 00 00 01 00 +T EA 09 00 00 CD 00 00 00 00 FC FF +R 00 00 01 00 02 05 13 00 +T EF 09 00 00 +R 00 00 01 00 +T EF 09 00 00 +R 00 00 01 00 +T EF 09 00 00 AF 3C CA A3 0A 00 00 +R 00 00 01 00 00 07 01 00 +T F4 09 00 00 +R 00 00 01 00 +T F4 09 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T FF 09 00 00 74 03 2B 4E 06 00 DD 71 FC DD 70 +R 00 00 01 00 +T 0A 0A 00 00 FD DD 6E 04 DD 66 05 23 DD 75 04 +R 00 00 01 00 +T 15 0A 00 00 DD 74 05 2B 4E 06 00 DD 71 FE DD +R 00 00 01 00 +T 20 0A 00 00 70 FF +R 00 00 01 00 +T 22 0A 00 00 +R 00 00 01 00 +T 22 0A 00 00 3E 5C DD AE FC DD B6 FD 20 3E DD +R 00 00 01 00 +T 2D 0A 00 00 6E 02 DD 66 03 7E FE 0A 20 33 +R 00 00 01 00 +T 37 0A 00 00 +R 00 00 01 00 +T 37 0A 00 00 +R 00 00 01 00 +T 37 0A 00 00 +R 00 00 01 00 +T 37 0A 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 3F 0A 00 00 +R 00 00 01 00 +T 3F 0A 00 00 +R 00 00 01 00 +T 3F 0A 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 4A 0A 00 00 74 03 2B 4E 06 00 DD 71 FC DD 70 +R 00 00 01 00 +T 55 0A 00 00 FD 3E 20 A9 B0 28 0A 3E 09 DD AE +R 00 00 01 00 +T 60 0A 00 00 FC DD B6 FD 20 02 +R 00 00 01 00 +T 66 0A 00 00 +R 00 00 01 00 +T 66 0A 00 00 +R 00 00 01 00 +T 66 0A 00 00 +R 00 00 01 00 +T 66 0A 00 00 18 D7 +R 00 00 01 00 +T 68 0A 00 00 +R 00 00 01 00 +T 68 0A 00 00 18 B8 +R 00 00 01 00 +T 6A 0A 00 00 +R 00 00 01 00 +T 6A 0A 00 00 DD 7E FE DD B6 FF 20 1B +R 00 00 01 00 +T 72 0A 00 00 +R 00 00 01 00 +T 72 0A 00 00 3E 7C DD AE FC DD B6 FD 28 0A 3E +R 00 00 01 00 +T 7D 0A 00 00 3A DD AE FC DD B6 FD 20 05 +R 00 00 01 00 +T 86 0A 00 00 +R 00 00 01 00 +T 86 0A 00 00 +R 00 00 01 00 +T 86 0A 00 00 +R 00 00 01 00 +T 86 0A 00 00 21 00 00 18 1B +R 00 00 01 00 +T 8B 0A 00 00 +R 00 00 01 00 +T 8B 0A 00 00 18 16 +R 00 00 01 00 +T 8D 0A 00 00 +R 00 00 01 00 +T 8D 0A 00 00 DD 6E FE DD 66 FF DD 4E FC DD 46 +R 00 00 01 00 +T 98 0A 00 00 FD A7 ED 42 28 02 +R 00 00 01 00 +T 9E 0A 00 00 +R 00 00 01 00 +T 9E 0A 00 00 18 03 +R 00 00 01 00 +T A0 0A 00 00 +R 00 00 01 00 +T A0 0A 00 00 C3 EF 09 00 00 +R 00 00 01 00 00 05 01 00 +T A3 0A 00 00 +R 00 00 01 00 +T A3 0A 00 00 21 01 00 +R 00 00 01 00 +T A6 0A 00 00 +R 00 00 01 00 +T A6 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T A9 0A 00 00 +R 00 00 01 00 +T A9 0A 00 00 CD 00 00 00 00 F8 FF 0A 6F 03 0A +R 00 00 01 00 02 05 13 00 +T B2 0A 00 00 67 DD 75 FE DD 74 FF DD 7E 08 DD +R 00 00 01 00 +T BD 0A 00 00 B6 09 20 14 +R 00 00 01 00 +T C1 0A 00 00 +R 00 00 01 00 +T C1 0A 00 00 21 04 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T CC 0A 00 00 23 66 68 DD 75 08 DD 74 09 +R 00 00 01 00 +T D5 0A 00 00 +R 00 00 01 00 +T D5 0A 00 00 +R 00 00 01 00 +T D5 0A 00 00 AF 3C CA CC 0C 00 00 +R 00 00 01 00 00 07 01 00 +T DA 0A 00 00 +R 00 00 01 00 +T DA 0A 00 00 DD 6E 08 DD 66 09 DD 75 FA DD 74 +R 00 00 01 00 +T E5 0A 00 00 FB +R 00 00 01 00 +T E6 0A 00 00 +R 00 00 01 00 +T E6 0A 00 00 DD 6E FA DD 66 FB AF B6 28 15 DD +R 00 00 01 00 +T F1 0A 00 00 6E FA DD 66 FB 7E FE 0A 28 0A +R 00 00 01 00 +T FB 0A 00 00 +R 00 00 01 00 +T FB 0A 00 00 +R 00 00 01 00 +T FB 0A 00 00 +R 00 00 01 00 +T FB 0A 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 03 0B 00 00 +R 00 00 01 00 +T 03 0B 00 00 18 E1 +R 00 00 01 00 +T 05 0B 00 00 +R 00 00 01 00 +T 05 0B 00 00 DD 6E FA DD 66 FB AF B6 28 03 +R 00 00 01 00 +T 0F 0B 00 00 +R 00 00 01 00 +T 0F 0B 00 00 C3 CC 0C 00 00 +R 00 00 01 00 00 05 01 00 +T 12 0B 00 00 +R 00 00 01 00 +T 12 0B 00 00 21 06 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 1D 0B 00 00 23 B6 28 18 +R 00 00 01 00 +T 21 0B 00 00 +R 00 00 01 00 +T 21 0B 00 00 21 08 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T 2C 0B 00 00 23 66 68 DD 4E FE DD 46 FF 09 C3 +R 00 00 01 00 +T 37 0B 00 00 D3 0C 00 00 +R 00 00 01 00 00 04 01 00 +T 39 0B 00 00 +R 00 00 01 00 +T 39 0B 00 00 21 04 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T 44 0B 00 00 23 66 68 DD 4E FE DD 46 FF A7 ED +R 00 00 01 00 +T 4F 0B 00 00 42 C2 E7 0B 00 00 +R 00 00 01 00 00 06 01 00 +T 53 0B 00 00 +R 00 00 01 00 +T 53 0B 00 00 21 08 00 DD 4E 04 DD 46 05 09 56 +R 00 00 01 00 +T 5E 0B 00 00 23 66 6A E5 03 03 69 60 4E 23 46 +R 00 00 01 00 +T 69 0B 00 00 E1 A7 ED 42 20 76 +R 00 00 01 00 +T 6F 0B 00 00 +R 00 00 01 00 +T 6F 0B 00 00 DD 6E 04 DD 66 05 23 23 06 01 CD +R 00 00 01 00 +T 7A 0B 00 00 00 00 00 00 DD 6E 04 DD 66 05 23 +R 00 00 01 00 02 04 00 00 +T 83 0B 00 00 23 4E 23 46 03 DD 5E FE DD 56 FF +R 00 00 01 00 +T 8E 0B 00 00 CD 3D 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 00 05 01 00 +T 97 0B 00 00 21 04 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T A2 0B 00 00 DD 5E FE DD 56 FF 21 04 00 09 7E +R 00 00 01 00 +T AD 0B 00 00 23 66 6F A7 ED 52 DD 5E FC DD 56 +R 00 00 01 00 +T B8 0B 00 00 FD 19 4D 44 E1 71 23 70 DD 4E FE +R 00 00 01 00 +T C3 0B 00 00 DD 46 FF DD 6E 08 DD 66 09 A7 ED +R 00 00 01 00 +T CE 0B 00 00 42 19 DD 75 08 DD 74 09 DD 73 FE +R 00 00 01 00 +T D9 0B 00 00 DD 72 FF DD 6E 04 DD 66 05 73 23 +R 00 00 01 00 +T E4 0B 00 00 72 +R 00 00 01 00 +T E5 0B 00 00 +R 00 00 01 00 +T E5 0B 00 00 18 6A +R 00 00 01 00 +T E7 0B 00 00 +R 00 00 01 00 +T E7 0B 00 00 DD 4E FE DD 46 FF 21 04 00 DD 5E +R 00 00 01 00 +T F2 0B 00 00 04 DD 56 05 19 7E 23 66 6F A7 ED +R 00 00 01 00 +T FD 0B 00 00 42 4D 44 21 10 00 39 7E 91 77 23 +R 00 00 01 00 +T 08 0C 00 00 7E 98 77 DD 4E FE DD 46 FF 21 +R 00 00 01 00 +T 12 0C 00 00 04 00 19 7E 23 66 6F A7 ED 42 4D +R 00 00 01 00 +T 1D 0C 00 00 44 21 08 00 19 7E 91 77 23 7E 98 +R 00 00 01 00 +T 28 0C 00 00 77 2B 6E 67 E5 21 04 00 19 4E 23 +R 00 00 01 00 +T 33 0C 00 00 46 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 3B 0C 00 00 00 00 00 00 F1 21 04 00 DD 4E 04 +R 00 00 01 00 02 04 04 00 +T 44 0C 00 00 DD 46 05 09 DD 4E FE DD 46 FF 71 +R 00 00 01 00 +T 4F 0C 00 00 23 70 +R 00 00 01 00 +T 51 0C 00 00 +R 00 00 01 00 +T 51 0C 00 00 21 08 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 5C 0C 00 00 23 56 03 03 0A 6F 03 0A 67 A7 ED +R 00 00 01 00 +T 67 0C 00 00 52 E5 21 08 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 72 0C 00 00 09 46 23 66 68 DD 4E FE DD 46 FF +R 00 00 01 00 +T 7D 0C 00 00 09 4D 44 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 87 0C 00 00 00 00 00 00 F1 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 04 0B 00 +T 90 0C 00 00 7D B4 20 0F +R 00 00 01 00 +T 94 0C 00 00 +R 00 00 01 00 +T 94 0C 00 00 21 06 00 DD 4E 04 DD 46 05 09 36 +R 00 00 01 00 +T 9F 0C 00 00 01 23 36 00 +R 00 00 01 00 +T A3 0C 00 00 +R 00 00 01 00 +T A3 0C 00 00 21 08 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T AE 0C 00 00 DD 86 F8 77 23 7E DD 8E F9 77 21 +R 00 00 01 00 +T B9 0C 00 00 08 00 09 46 23 66 68 DD 4E FE DD +R 00 00 01 00 +T C4 0C 00 00 46 FF 09 36 00 C3 D5 0A 00 00 +R 00 00 01 00 00 0A 01 00 +T CC 0C 00 00 +R 00 00 01 00 +T CC 0C 00 00 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T D3 0C 00 00 +R 00 00 01 00 +T D3 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 76 69 72 74 75 61 6C 20 6D 65 6D +R 00 00 02 00 +T 0B 00 00 00 6F 72 79 20 65 78 68 61 75 73 74 +R 00 00 02 00 +T 16 00 00 00 65 64 0A 00 +R 00 00 02 00 +T 1A 00 00 00 +R 00 00 02 00 +T 1A 00 00 00 54 45 52 4D 00 +R 00 00 02 00 +T 1F 00 00 00 +R 00 00 02 00 +T 1F 00 00 00 54 45 52 4D 43 41 50 00 +R 00 00 02 00 +T 27 00 00 00 +R 00 00 02 00 +T 27 00 00 00 74 63 00 +R 00 00 02 00 +T 2A 00 00 00 +R 00 00 02 00 +T 2A 00 00 00 2F 65 74 63 2F 74 65 72 6D 63 61 +R 00 00 02 00 +T 35 00 00 00 70 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 1C 00 00 00 +R 00 00 04 00 +T 1C 00 00 00 +R 00 00 04 00 +T 00 00 00 00 20 07 08 20 20 1B 0C 20 20 20 20 +R 00 00 05 00 +T 0B 00 00 00 20 20 20 0A 20 20 20 0D 20 20 20 +R 00 00 05 00 +T 16 00 00 00 0B 20 20 20 20 00 00 00 32 00 +R 00 00 05 00 +T 20 00 00 00 4B 00 6E 00 87 00 96 00 FE FF +R 00 00 05 00 +T 2A 00 00 00 FD FF FA FF F4 FF EE FF E8 FF +R 00 00 05 00 +T 34 00 00 00 D0 FF A0 FF 40 FF 80 FE +R 00 00 05 00 diff --git a/src/nos/lib/crt_large_lib/tmpnam.rel b/src/nos/lib/crt_large_lib/tmpnam.rel new file mode 100644 index 00000000..60bd9fc5 --- /dev/null +++ b/src/nos/lib/crt_large_lib/tmpnam.rel @@ -0,0 +1,77 @@ +XL4 +H 4 areas B global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ultoa Ref00000000 +S _strcpy Ref00000000 +S _access Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 81 flags 0 +S _tmpnam Def0000004A +A CSTR size 6 flags 0 +A UDATA0 size 44 flags 0 +S __tmpnum Def00000040 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 20 08 +R 00 00 01 00 02 05 05 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 DD 36 02 00 00 00 00 DD 36 03 +R 00 00 01 00 09 07 03 00 +T 0E 00 00 00 00 00 00 00 +R 00 00 01 00 89 04 03 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 01 00 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T 18 00 00 00 CD 00 00 00 00 21 0A 00 E5 DD 5E +R 00 00 01 00 02 05 07 00 +T 21 00 00 00 02 DD 56 03 CD 00 00 00 00 DD 4E +R 00 00 01 00 02 09 01 00 +T 2A 00 00 00 02 DD 46 03 09 E5 DD 4E 0A DD 46 +R 00 00 01 00 +T 35 00 00 00 0B DD 5E 08 DD 56 09 CD +R 00 00 01 00 +T 3D 00 00 00 00 00 00 00 F1 F1 DD 6E 02 DD 66 +R 00 00 01 00 02 04 06 00 +T 46 00 00 00 03 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 21 40 00 00 00 01 00 00 11 0D 00 +R 00 00 01 00 00 05 03 00 +T 56 00 00 00 CD 00 00 00 00 C5 D5 DD 5E 02 DD +R 00 00 01 00 02 05 03 00 +T 5F 00 00 00 56 03 CD 00 00 00 00 F1 F1 DD 75 +R 00 00 01 00 00 07 01 00 +T 68 00 00 00 02 DD 74 03 01 00 00 EB CD +R 00 00 01 00 +T 71 00 00 00 00 00 00 00 7D A4 3C 20 D5 +R 00 00 01 00 02 04 08 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 74 6D 70 2F 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 40 00 00 00 +R 00 00 03 00 +T 40 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/tparam.rel b/src/nos/lib/crt_large_lib/tparam.rel new file mode 100644 index 00000000..cb45e2e6 --- /dev/null +++ b/src/nos/lib/crt_large_lib/tparam.rel @@ -0,0 +1,677 @@ +XL4 +H 4 areas 19 global symbols +S ?S_LSHASG_L02 Ref00000000 +S ?CL64180L_4_06_L00 Ref00000000 +S ?S_MULASG_L02 Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _memcpy Ref00000000 +S ?SS_MODASG_L02 Ref00000000 +S ?SS_DIVASG_L02 Ref00000000 +S _strcat Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _realloc Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S _malloc Ref00000000 +S _exit Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6CD flags 0 +S _tparam Def00000061 +S _tgoto Def00000082 +A CSTR size 1A flags 0 +A UDATA0 size 36 flags 0 +S __UP Def00000002 +S __BC Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 21 19 00 E5 01 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 09 00 00 00 11 02 00 CD 00 00 00 00 F1 11 +R 00 00 01 00 02 08 0D 00 +T 11 00 00 00 01 00 CD 00 00 00 00 D1 C1 C9 +R 00 00 01 00 02 07 14 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 0E 00 +T 22 00 00 00 56 03 CD 00 00 00 00 DD 75 FE DD +R 00 00 01 00 02 07 13 00 +T 2B 00 00 00 74 FF 7D B4 20 03 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 0E 00 +T 46 00 00 00 56 03 CD 00 00 00 00 DD 75 FE DD +R 00 00 01 00 02 07 0B 00 +T 4F 00 00 00 74 FF 7D B4 20 03 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 CD 00 00 00 00 21 0A 00 39 E5 21 +R 00 00 01 00 02 05 0C 00 +T 6A 00 00 00 00 00 E5 21 00 00 E5 DD 6E 08 DD +R 00 00 01 00 +T 75 00 00 00 66 09 E5 CD D0 00 00 00 F1 F1 F1 +R 00 00 01 00 00 08 01 00 +T 7E 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 09 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 0E 00 +T 8B 00 00 00 B6 03 20 05 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 21 00 00 18 39 +R 00 00 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 DD 6E 08 DD 66 09 DD 75 FC DD 74 +R 00 00 01 00 +T 9F 00 00 00 FD DD 6E 04 DD 66 05 DD 75 FE DD +R 00 00 01 00 +T AA 00 00 00 74 FF 21 00 00 39 E5 2A +R 00 00 01 00 +T B2 00 00 00 00 00 00 00 E5 2A 02 00 00 00 E5 +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T B9 00 00 00 21 32 00 E5 01 04 00 00 00 DD 5E +R 00 00 01 00 00 09 03 00 +T C2 00 00 00 02 DD 56 03 CD D0 00 00 00 F1 F1 +R 00 00 01 00 00 09 01 00 +T CB 00 00 00 F1 F1 +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 09 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 CD 00 00 00 00 EC FF DD 6E 02 DD +R 00 00 01 00 02 05 0E 00 +T D9 00 00 00 66 03 DD 75 F0 DD 74 F1 DD 71 F2 +R 00 00 01 00 +T E4 00 00 00 DD 70 F3 DD 6E 0E DD 66 0F DD 75 +R 00 00 01 00 +T EF 00 00 00 F4 DD 74 F5 AF DD 77 F6 DD 77 F7 +R 00 00 01 00 +T FA 00 00 00 AF DD 77 F8 DD 77 F9 AF DD 77 FA +R 00 00 01 00 +T 05 01 00 00 DD 77 FB DD 6E 08 DD 66 09 DD 4E +R 00 00 01 00 +T 10 01 00 00 04 DD 46 05 09 DD 75 FC DD 74 FD +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 AF 3C CA 6E 06 00 00 +R 00 00 01 00 00 07 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 21 05 00 DD 4E F2 DD 46 F3 09 DD +R 00 00 01 00 +T 2B 01 00 00 4E FC DD 46 FD A7 ED 42 DA +R 00 00 01 00 +T 34 01 00 00 F4 01 00 00 +R 00 00 01 00 00 04 01 00 +T 36 01 00 00 +R 00 00 01 00 +T 36 01 00 00 DD 7E F6 DD B6 F7 20 49 +R 00 00 01 00 +T 3E 01 00 00 +R 00 00 01 00 +T 3E 01 00 00 21 28 00 DD 4E 08 DD 46 09 09 DD +R 00 00 01 00 +T 49 01 00 00 75 F6 DD 74 F7 EB CD 19 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 52 01 00 00 DD 75 FE DD 74 FF 21 10 00 39 7E +R 00 00 01 00 +T 5D 01 00 00 C6 28 77 23 7E CE 00 77 DD 4E 04 +R 00 00 01 00 +T 68 01 00 00 DD 46 05 DD 6E F2 DD 66 F3 A7 ED +R 00 00 01 00 +T 73 01 00 00 42 E5 DD 4E 04 DD 46 05 DD 5E FE +R 00 00 01 00 +T 7E 01 00 00 DD 56 FF CD 00 00 00 00 F1 18 29 +R 00 00 01 00 02 08 04 00 +T 87 01 00 00 +R 00 00 01 00 +T 87 01 00 00 21 10 00 39 7E DD 86 F6 77 23 7E +R 00 00 01 00 +T 92 01 00 00 DD 8E F7 77 21 0A 00 39 06 01 CD +R 00 00 01 00 +T 9D 01 00 00 00 00 00 00 4B 42 DD 5E 04 DD 56 +R 00 00 01 00 02 04 00 00 +T A6 01 00 00 05 CD 3D 00 00 00 DD 75 FE DD 74 +R 00 00 01 00 00 06 01 00 +T AF 01 00 00 FF +R 00 00 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T BB 01 00 00 FF A7 ED 42 4D 44 21 06 00 39 7E +R 00 00 01 00 +T C6 01 00 00 81 77 23 7E 88 77 DD 4E 04 DD 46 +R 00 00 01 00 +T D1 01 00 00 05 DD 6E FE DD 66 FF A7 ED 42 4D +R 00 00 01 00 +T DC 01 00 00 44 21 10 00 39 7E 81 77 23 7E 88 +R 00 00 01 00 +T E7 01 00 00 77 DD 6E FE DD 66 FF DD 75 04 DD +R 00 00 01 00 +T F2 01 00 00 74 05 +R 00 00 01 00 +T F4 01 00 00 +R 00 00 01 00 +T F4 01 00 00 DD 6E F0 DD 66 F1 23 DD 75 F0 DD +R 00 00 01 00 +T FF 01 00 00 74 F1 2B 4E 06 00 DD 71 EC DD 70 +R 00 00 01 00 +T 0A 02 00 00 ED 79 B0 20 03 +R 00 00 01 00 +T 0F 02 00 00 +R 00 00 01 00 +T 0F 02 00 00 C3 6E 06 00 00 +R 00 00 01 00 00 05 01 00 +T 12 02 00 00 +R 00 00 01 00 +T 12 02 00 00 3E 25 DD AE EC DD B6 ED C2 +R 00 00 01 00 +T 1B 02 00 00 59 06 00 00 +R 00 00 01 00 00 04 01 00 +T 1D 02 00 00 +R 00 00 01 00 +T 1D 02 00 00 DD 6E F0 DD 66 F1 23 DD 75 F0 DD +R 00 00 01 00 +T 28 02 00 00 74 F1 2B 4E 06 00 DD 71 EC DD 70 +R 00 00 01 00 +T 33 02 00 00 ED DD 6E 0E DD 66 0F 56 23 66 6A +R 00 00 01 00 +T 3E 02 00 00 DD 75 EE DD 74 EF 59 50 CD +R 00 00 01 00 +T 47 02 00 00 00 00 00 00 11 00 25 00 2B 00 +R 00 00 01 00 02 04 03 00 +T 4F 02 00 00 2E 00 32 00 33 00 3E 00 42 00 +R 00 00 01 00 +T 59 02 00 00 43 00 44 00 61 00 62 00 64 00 +R 00 00 01 00 +T 63 02 00 00 66 00 69 00 6D 00 6E 00 72 00 +R 00 00 01 00 +T 6D 02 00 00 57 06 00 00 6C 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 71 02 00 00 D3 05 00 00 F5 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 75 02 00 00 B5 05 00 00 49 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 79 02 00 00 91 02 00 00 59 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7D 02 00 00 E4 04 00 00 38 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 81 02 00 00 5C 03 00 00 17 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 85 02 00 00 A4 04 00 00 B8 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 89 02 00 00 0C 03 00 00 AE 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8D 02 00 00 92 03 00 00 D0 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 91 02 00 00 +R 00 00 01 00 +T 91 02 00 00 01 0A 80 DD 6E EE DD 66 EF 3E 80 +R 00 00 01 00 +T 9C 02 00 00 AC 67 ED 42 30 03 +R 00 00 01 00 +T A2 02 00 00 +R 00 00 01 00 +T A2 02 00 00 C3 2E 03 00 00 +R 00 00 01 00 00 05 01 00 +T A5 02 00 00 +R 00 00 01 00 +T A5 02 00 00 01 64 80 DD 6E EE DD 66 EF 3E 80 +R 00 00 01 00 +T B0 02 00 00 AC 67 ED 42 30 02 +R 00 00 01 00 +T B6 02 00 00 +R 00 00 01 00 +T B6 02 00 00 18 54 +R 00 00 01 00 +T B8 02 00 00 +R 00 00 01 00 +T B8 02 00 00 +R 00 00 01 00 +T B8 02 00 00 DD 4E EE DD 46 EF 21 E7 03 CD +R 00 00 01 00 +T C2 02 00 00 00 00 00 00 30 28 +R 00 00 01 00 02 04 10 00 +T C6 02 00 00 +R 00 00 01 00 +T C6 02 00 00 01 E8 03 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T D0 02 00 00 00 00 00 00 7B C6 30 DD 6E F2 DD +R 00 00 01 00 02 04 12 00 +T D9 02 00 00 66 F3 23 DD 75 F2 DD 74 F3 2B 77 +R 00 00 01 00 +T E4 02 00 00 21 02 00 39 01 E8 03 CD +R 00 00 01 00 +T EC 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 +T EE 02 00 00 +R 00 00 01 00 +T EE 02 00 00 01 64 00 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T F8 02 00 00 00 00 00 00 7B C6 30 DD 6E F2 DD +R 00 00 01 00 02 04 12 00 +T 01 03 00 00 66 F3 23 DD 75 F2 DD 74 F3 2B 77 +R 00 00 01 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 21 02 00 39 01 64 00 CD +R 00 00 01 00 +T 14 03 00 00 00 00 00 00 01 0A 00 CD +R 00 00 01 00 02 04 05 00 +T 1A 03 00 00 00 00 00 00 7B C6 30 DD 6E F2 DD +R 00 00 01 00 02 04 12 00 +T 23 03 00 00 66 F3 23 DD 75 F2 DD 74 F3 2B 77 +R 00 00 01 00 +T 2E 03 00 00 +R 00 00 01 00 +T 2E 03 00 00 01 0A 00 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T 38 03 00 00 00 00 00 00 7B C6 30 DD 6E F2 DD +R 00 00 01 00 02 04 11 00 +T 41 03 00 00 66 F3 23 DD 75 F2 DD 74 F3 2B 77 +R 00 00 01 00 +T 4C 03 00 00 DD 7E 0E C6 02 DD 77 0E 30 03 DD +R 00 00 01 00 +T 57 03 00 00 34 0F +R 00 00 01 00 +T 59 03 00 00 +R 00 00 01 00 +T 59 03 00 00 C3 57 06 00 00 +R 00 00 01 00 00 05 01 00 +T 5C 03 00 00 +R 00 00 01 00 +T 5C 03 00 00 01 60 80 DD 6E EE DD 66 EF 3E 80 +R 00 00 01 00 +T 67 03 00 00 AC 67 ED 42 38 25 +R 00 00 01 00 +T 6D 03 00 00 +R 00 00 01 00 +T 6D 03 00 00 01 60 00 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T 77 03 00 00 00 00 00 00 DD 6E F2 DD 66 F3 23 +R 00 00 01 00 02 04 12 00 +T 80 03 00 00 DD 75 F2 DD 74 F3 2B 73 21 02 00 +R 00 00 01 00 +T 8B 03 00 00 39 01 60 00 CD 00 00 00 00 +R 00 00 01 00 02 09 05 00 +T 92 03 00 00 +R 00 00 01 00 +T 92 03 00 00 +R 00 00 01 00 +T 92 03 00 00 DD 6E F0 DD 66 F1 23 DD 75 F0 DD +R 00 00 01 00 +T 9D 03 00 00 74 F1 2B 4E 06 00 21 02 00 39 7E +R 00 00 01 00 +T A8 03 00 00 81 77 23 7E 88 77 +R 00 00 01 00 +T AE 03 00 00 +R 00 00 01 00 +T AE 03 00 00 DD 7E 0C DD B6 0D 28 75 +R 00 00 01 00 +T B6 03 00 00 +R 00 00 01 00 +T B6 03 00 00 +R 00 00 01 00 +T B6 03 00 00 DD 7E EE DD B6 EF 28 14 3E 0A DD +R 00 00 01 00 +T C1 03 00 00 AE EE DD B6 EF 28 0A 3E 09 DD AE +R 00 00 01 00 +T CC 03 00 00 EE DD B6 EF 20 59 +R 00 00 01 00 +T D2 03 00 00 +R 00 00 01 00 +T D2 03 00 00 +R 00 00 01 00 +T D2 03 00 00 +R 00 00 01 00 +T D2 03 00 00 DD 34 EE 20 03 DD 34 EF +R 00 00 01 00 +T DA 03 00 00 +R 00 00 01 00 +T DA 03 00 00 DD 6E F4 DD 66 F5 DD 4E 0E DD 46 +R 00 00 01 00 +T E5 03 00 00 0F A7 ED 42 20 20 +R 00 00 01 00 +T EB 03 00 00 +R 00 00 01 00 +T EB 03 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T F3 03 00 00 +R 00 00 01 00 +T F3 03 00 00 DD 5E 0A DD 56 0B CD 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T FC 03 00 00 4D 44 21 10 00 39 7E 91 77 23 7E +R 00 00 01 00 +T 07 04 00 00 98 77 18 1E +R 00 00 01 00 +T 0B 04 00 00 +R 00 00 01 00 +T 0B 04 00 00 DD 34 F8 20 03 DD 34 F9 +R 00 00 01 00 +T 13 04 00 00 +R 00 00 01 00 +T 13 04 00 00 DD 5E 0C DD 56 0D CD 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T 1C 04 00 00 4D 44 21 10 00 39 7E 91 77 23 7E +R 00 00 01 00 +T 27 04 00 00 98 77 +R 00 00 01 00 +T 29 04 00 00 +R 00 00 01 00 +T 29 04 00 00 18 8B +R 00 00 01 00 +T 2B 04 00 00 +R 00 00 01 00 +T 2B 04 00 00 +R 00 00 01 00 +T 2B 04 00 00 DD 7E EE DD B6 EF 28 05 DD 7E EE +R 00 00 01 00 +T 36 04 00 00 18 02 +R 00 00 01 00 +T 38 04 00 00 +R 00 00 01 00 +T 38 04 00 00 3E 80 +R 00 00 01 00 +T 3A 04 00 00 +R 00 00 01 00 +T 3A 04 00 00 DD 6E F2 DD 66 F3 23 DD 75 F2 DD +R 00 00 01 00 +T 45 04 00 00 74 F3 2B 77 +R 00 00 01 00 +T 49 04 00 00 +R 00 00 01 00 +T 49 04 00 00 DD 7E 0E C6 02 DD 77 0E 30 03 DD +R 00 00 01 00 +T 54 04 00 00 34 0F +R 00 00 01 00 +T 56 04 00 00 +R 00 00 01 00 +T 56 04 00 00 C3 57 06 00 00 +R 00 00 01 00 00 05 01 00 +T 59 04 00 00 +R 00 00 01 00 +T 59 04 00 00 DD 7E 0E D6 02 DD 77 0E DD 7E 0F +R 00 00 01 00 +T 64 04 00 00 DE 00 DD 77 0F C3 57 06 00 00 +R 00 00 01 00 00 0A 01 00 +T 6C 04 00 00 +R 00 00 01 00 +T 6C 04 00 00 DD 6E 0E DD 66 0F 23 23 46 23 66 +R 00 00 01 00 +T 77 04 00 00 68 E5 DD 6E 0E DD 66 0F C1 71 23 +R 00 00 01 00 +T 82 04 00 00 70 DD 6E 0E DD 66 0F 23 23 DD 4E +R 00 00 01 00 +T 8D 04 00 00 EE DD 46 EF 71 23 70 DD 7E F4 C6 +R 00 00 01 00 +T 98 04 00 00 02 DD 77 F4 30 03 DD 34 F5 +R 00 00 01 00 +T A1 04 00 00 +R 00 00 01 00 +T A1 04 00 00 C3 57 06 00 00 +R 00 00 01 00 00 05 01 00 +T A4 04 00 00 +R 00 00 01 00 +T A4 04 00 00 DD 6E 0E DD 66 0F 4E 23 46 DD 6E +R 00 00 01 00 +T AF 04 00 00 F0 DD 66 F1 23 DD 75 F0 DD 74 F1 +R 00 00 01 00 +T BA 04 00 00 2B 6E 26 00 CD 00 00 00 00 30 16 +R 00 00 01 00 02 09 10 00 +T C3 04 00 00 +R 00 00 01 00 +T C3 04 00 00 DD 6E F0 DD 66 F1 4E 06 00 DD 6E +R 00 00 01 00 +T CE 04 00 00 0E DD 66 0F 7E 81 77 23 7E 88 77 +R 00 00 01 00 +T D9 04 00 00 +R 00 00 01 00 +T D9 04 00 00 DD 34 F0 20 03 DD 34 F1 +R 00 00 01 00 +T E1 04 00 00 +R 00 00 01 00 +T E1 04 00 00 C3 57 06 00 00 +R 00 00 01 00 00 05 01 00 +T E4 04 00 00 +R 00 00 01 00 +T E4 04 00 00 DD 6E F0 DD 66 F1 23 23 7E E6 7F +R 00 00 01 00 +T EF 04 00 00 4F 06 00 DD 71 EE DD 70 EF DD 6E +R 00 00 01 00 +T FA 04 00 00 F0 DD 66 F1 23 7E FE 70 20 1C +R 00 00 01 00 +T 04 05 00 00 +R 00 00 01 00 +T 04 05 00 00 DD 6E EE DD 66 EF 29 DD 4E 0E DD +R 00 00 01 00 +T 0F 05 00 00 46 0F 09 01 80 FF 09 46 23 66 68 +R 00 00 01 00 +T 1A 05 00 00 DD 75 EE DD 74 EF +R 00 00 01 00 +T 20 05 00 00 +R 00 00 01 00 +T 20 05 00 00 DD 6E F0 DD 66 F1 7E FE 2D 20 13 +R 00 00 01 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 DD 6E 0E DD 66 0F 7E DD 96 EE 77 +R 00 00 01 00 +T 36 05 00 00 23 7E DD 9E EF 77 18 67 +R 00 00 01 00 +T 3E 05 00 00 +R 00 00 01 00 +T 3E 05 00 00 DD 6E F0 DD 66 F1 7E FE 2B 20 13 +R 00 00 01 00 +T 49 05 00 00 +R 00 00 01 00 +T 49 05 00 00 DD 6E 0E DD 66 0F 7E DD 86 EE 77 +R 00 00 01 00 +T 54 05 00 00 23 7E DD 8E EF 77 18 49 +R 00 00 01 00 +T 5C 05 00 00 +R 00 00 01 00 +T 5C 05 00 00 DD 6E F0 DD 66 F1 7E FE 2A 20 11 +R 00 00 01 00 +T 67 05 00 00 +R 00 00 01 00 +T 67 05 00 00 DD 4E EE DD 46 EF DD 6E 0E DD 66 +R 00 00 01 00 +T 72 05 00 00 0F CD 00 00 00 00 18 2D +R 00 00 01 00 02 06 02 00 +T 78 05 00 00 +R 00 00 01 00 +T 78 05 00 00 DD 6E F0 DD 66 F1 7E FE 2F 20 11 +R 00 00 01 00 +T 83 05 00 00 +R 00 00 01 00 +T 83 05 00 00 DD 4E EE DD 46 EF DD 6E 0E DD 66 +R 00 00 01 00 +T 8E 05 00 00 0F CD 00 00 00 00 18 11 +R 00 00 01 00 02 06 06 00 +T 94 05 00 00 +R 00 00 01 00 +T 94 05 00 00 DD 6E EE DD 66 EF E5 DD 6E 0E DD +R 00 00 01 00 +T 9F 05 00 00 66 0F C1 71 23 70 +R 00 00 01 00 +T A5 05 00 00 +R 00 00 01 00 +T A5 05 00 00 +R 00 00 01 00 +T A5 05 00 00 +R 00 00 01 00 +T A5 05 00 00 +R 00 00 01 00 +T A5 05 00 00 21 04 00 39 7E C6 03 77 23 7E CE +R 00 00 01 00 +T B0 05 00 00 00 77 C3 57 06 00 00 +R 00 00 01 00 00 07 01 00 +T B5 05 00 00 +R 00 00 01 00 +T B5 05 00 00 DD 6E 0E DD 66 0F 34 23 20 01 34 +R 00 00 01 00 +T C0 05 00 00 +R 00 00 01 00 +T C0 05 00 00 DD 6E 0E DD 66 0F 23 23 34 23 20 +R 00 00 01 00 +T CB 05 00 00 01 34 +R 00 00 01 00 +T CD 05 00 00 +R 00 00 01 00 +T CD 05 00 00 C3 57 06 00 00 +R 00 00 01 00 00 05 01 00 +T D0 05 00 00 +R 00 00 01 00 +T D0 05 00 00 C3 59 06 00 00 +R 00 00 01 00 00 05 01 00 +T D3 05 00 00 +R 00 00 01 00 +T D3 05 00 00 DD 6E 0E DD 66 0F 7E EE 60 77 23 +R 00 00 01 00 +T DE 05 00 00 7E EE 00 77 DD 6E 0E DD 66 0F 23 +R 00 00 01 00 +T E9 05 00 00 23 7E EE 60 77 23 7E EE 00 77 18 +R 00 00 01 00 +T F4 05 00 00 62 +R 00 00 01 00 +T F5 05 00 00 +R 00 00 01 00 +T F5 05 00 00 DD 6E 0E DD 66 0F 7E EE 7F 77 23 +R 00 00 01 00 +T 00 06 00 00 7E EE 00 77 DD 6E 0E DD 66 0F 23 +R 00 00 01 00 +T 0B 06 00 00 23 7E EE 7F 77 23 7E EE 00 77 18 +R 00 00 01 00 +T 16 06 00 00 40 +R 00 00 01 00 +T 17 06 00 00 +R 00 00 01 00 +T 17 06 00 00 01 0A 00 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T 21 06 00 00 00 00 00 00 01 06 00 CD +R 00 00 01 00 02 04 12 00 +T 27 06 00 00 00 00 00 00 DD 6E 0E DD 66 0F 7E +R 00 00 01 00 02 04 0F 00 +T 30 06 00 00 83 77 23 7E 8A 77 18 1F +R 00 00 01 00 +T 38 06 00 00 +R 00 00 01 00 +T 38 06 00 00 01 10 00 DD 5E EE DD 56 EF CD +R 00 00 01 00 +T 42 06 00 00 00 00 00 00 EB 29 4D 44 DD 6E 0E +R 00 00 01 00 02 04 11 00 +T 4B 06 00 00 DD 66 0F 7E 91 77 23 7E 98 77 18 +R 00 00 01 00 +T 56 06 00 00 00 +R 00 00 01 00 +T 57 06 00 00 +R 00 00 01 00 +T 57 06 00 00 18 12 +R 00 00 01 00 +T 59 06 00 00 +R 00 00 01 00 +T 59 06 00 00 +R 00 00 01 00 +T 59 06 00 00 DD 46 EC DD 6E F2 DD 66 F3 23 DD +R 00 00 01 00 +T 64 06 00 00 75 F2 DD 74 F3 2B 70 +R 00 00 01 00 +T 6B 06 00 00 +R 00 00 01 00 +T 6B 06 00 00 C3 1B 01 00 00 +R 00 00 01 00 00 05 01 00 +T 6E 06 00 00 +R 00 00 01 00 +T 6E 06 00 00 DD 6E F2 DD 66 F3 36 00 +R 00 00 01 00 +T 76 06 00 00 +R 00 00 01 00 +T 76 06 00 00 DD 4E FA DD 46 FB 0B DD 71 FA DD +R 00 00 01 00 +T 81 06 00 00 70 FB 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 10 00 +T 8A 06 00 00 30 11 +R 00 00 01 00 +T 8C 06 00 00 +R 00 00 01 00 +T 8C 06 00 00 DD 4E 0A DD 46 0B DD 5E F2 DD 56 +R 00 00 01 00 +T 97 06 00 00 F3 CD 00 00 00 00 18 D9 +R 00 00 01 00 02 06 07 00 +T 9D 06 00 00 +R 00 00 01 00 +T 9D 06 00 00 +R 00 00 01 00 +T 9D 06 00 00 DD 4E F8 DD 46 F9 0B DD 71 F8 DD +R 00 00 01 00 +T A8 06 00 00 70 F9 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 10 00 +T B1 06 00 00 30 11 +R 00 00 01 00 +T B3 06 00 00 +R 00 00 01 00 +T B3 06 00 00 DD 4E 0C DD 46 0D DD 5E F2 DD 56 +R 00 00 01 00 +T BE 06 00 00 F3 CD 00 00 00 00 18 D9 +R 00 00 01 00 02 06 07 00 +T C4 06 00 00 +R 00 00 01 00 +T C4 06 00 00 DD 6E 04 DD 66 05 C3 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 76 69 72 74 75 61 6C 20 6D 65 6D +R 00 00 02 00 +T 0B 00 00 00 6F 72 79 20 65 78 68 61 75 73 74 +R 00 00 02 00 +T 16 00 00 00 65 64 0A 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/ttyname.rel b/src/nos/lib/crt_large_lib/ttyname.rel new file mode 100644 index 00000000..cfe847bc --- /dev/null +++ b/src/nos/lib/crt_large_lib/ttyname.rel @@ -0,0 +1,143 @@ +XL4 +H 6 areas F global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _strcat Ref00000000 +S _closedir Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _readdir Ref00000000 +S _isatty Ref00000000 +S .__.ABS. Def00000000 +S _fstat Ref00000000 +S _strcpy Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _opendir Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 107 flags 0 +S _ttyname Def00000000 +A CSTR size 2 flags 0 +A UDATA0 size E flags 0 +A IDATA0 size 5 flags 0 +A CDATA0 size 5 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 BC FF AF DD 77 FA +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 DD 77 FB 2A 00 00 00 00 DD 75 FE +R 00 00 01 00 02 08 0A 00 +T 12 00 00 00 DD 74 FF 21 00 00 39 4D 44 DD 5E +R 00 00 01 00 +T 1D 00 00 00 02 DD 56 03 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 09 08 00 +T 26 00 00 00 28 06 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 00 00 C3 04 01 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 37 00 00 00 7D B4 20 0C +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 21 19 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 0A 00 +T 44 00 00 00 C3 04 01 00 00 +R 00 00 01 00 00 05 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 11 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 00 05 04 00 02 0A 0C 00 +T 4E 00 00 00 75 FC DD 74 FD 7D B4 20 06 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 00 00 C3 04 01 00 00 +R 00 00 01 00 00 08 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 01 00 00 00 00 11 00 00 00 00 CD +R 00 00 01 00 00 05 04 00 00 0A 03 00 +T 64 00 00 00 00 00 00 00 01 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 00 09 02 00 +T 6A 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 04 03 00 02 09 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 DD 5E FC DD 56 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 78 00 00 00 DD 75 F8 DD 74 F9 7D B4 28 6A +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 21 06 00 DD 4E F8 DD 46 F9 09 EB +R 00 00 01 00 +T 8D 00 00 00 CD 00 00 00 00 4D 44 21 08 00 A7 +R 00 00 01 00 02 05 03 00 +T 96 00 00 00 ED 42 30 02 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 18 D3 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 21 06 00 DD 4E F8 DD 46 F9 09 4D +R 00 00 01 00 +T A7 00 00 00 44 11 05 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 09 00 +T AE 00 00 00 21 1E 00 39 4D 44 11 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T B7 00 00 00 CD 00 00 00 00 7D B4 20 2C DD 6E +R 00 00 01 00 02 05 0D 00 +T C0 00 00 00 BC DD 66 BD DD 4E DA DD 46 DB A7 +R 00 00 01 00 +T CB 00 00 00 ED 42 20 1B DD 6E BE DD 66 BF DD +R 00 00 01 00 +T D6 00 00 00 4E DC DD 46 DD A7 ED 42 20 0A +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 DD 36 FA 00 00 00 00 DD 36 FB +R 00 00 01 00 09 07 03 00 +T E7 00 00 00 00 00 00 00 18 02 +R 00 00 01 00 89 04 03 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 18 83 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 DD 5E FC DD 56 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T F5 00 00 00 DD 6E FE DD 66 FF 22 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T FE 00 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 2F 64 65 76 00 +R 00 00 05 00 diff --git a/src/nos/lib/crt_large_lib/tzset.rel b/src/nos/lib/crt_large_lib/tzset.rel new file mode 100644 index 00000000..ce0197b5 --- /dev/null +++ b/src/nos/lib/crt_large_lib/tzset.rel @@ -0,0 +1,95 @@ +XL4 +H 6 areas F global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _getenv Ref00000000 +S _memcpy Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _atoi Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 96 flags 0 +S _tzset Def00000000 +A CSTR size B flags 0 +A UDATA0 size 6 flags 0 +S _daylight Def00000000 +S _timezone Def00000002 +A IDATA0 size 4 flags 0 +S _tzname Def00000000 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 11 +R 00 00 01 00 02 05 06 00 +T 06 00 00 00 08 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 00 04 02 00 02 09 01 00 +T 0D 00 00 00 FC DD 74 FD 7D B4 20 1E +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 03 00 E5 01 00 00 00 00 ED 5B +R 00 00 01 00 00 09 02 00 +T 1E 00 00 00 02 00 00 00 CD 00 00 00 00 F1 01 +R 00 00 01 00 00 04 04 00 02 09 02 00 +T 25 00 00 00 00 00 21 30 2A 22 02 00 00 00 ED +R 00 00 01 00 00 0A 03 00 +T 2E 00 00 00 43 04 00 00 00 18 60 +R 00 00 01 00 00 05 03 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 03 00 E5 DD 4E FC DD 46 FD ED +R 00 00 01 00 +T 3E 00 00 00 5B 02 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 00 05 04 00 02 0A 02 00 +T 45 00 00 00 DD 5E FC DD 56 FD 13 13 13 CD +R 00 00 01 00 +T 4F 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 01 +R 00 00 01 00 02 04 08 00 +T 58 00 00 00 64 00 EB CD 00 00 00 00 01 3C 00 +R 00 00 01 00 02 08 0A 00 +T 61 00 00 00 CD 00 00 00 00 D5 01 64 00 DD 5E +R 00 00 01 00 02 05 07 00 +T 6A 00 00 00 FE DD 56 FF CD 00 00 00 00 EB D1 +R 00 00 01 00 02 09 09 00 +T 73 00 00 00 19 EB AF 93 5F 3E 00 9A 57 7A 07 +R 00 00 01 00 +T 7E 00 00 00 9F 4F 41 C5 D5 01 00 00 21 3C 00 +R 00 00 01 00 +T 89 00 00 00 CD 00 00 00 00 22 02 00 00 00 ED +R 00 00 01 00 02 05 05 00 00 0A 03 00 +T 90 00 00 00 43 04 00 00 00 +R 00 00 01 00 00 05 03 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 47 4D 54 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 00 00 00 00 +R 00 00 02 00 +T 08 00 00 00 +R 00 00 02 00 +T 08 00 00 00 54 5A 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 00 00 04 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 diff --git a/src/nos/lib/crt_large_lib/ultoa.rel b/src/nos/lib/crt_large_lib/ultoa.rel new file mode 100644 index 00000000..26949ccd --- /dev/null +++ b/src/nos/lib/crt_large_lib/ultoa.rel @@ -0,0 +1,34 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___longtoa Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 50 flags 0 +S _ultoa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 36 FE 41 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD CB 0B 7E 28 16 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 DD 36 FE 61 DD 4E 0A DD 46 0B A7 +R 00 00 01 00 +T 1A 00 00 00 21 00 00 ED 42 DD 75 0A DD 74 0B +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E FE E5 0E 00 C5 DD 6E 0A DD +R 00 00 01 00 +T 30 00 00 00 66 0B E5 DD 6E 08 DD 66 09 E5 DD +R 00 00 01 00 +T 3B 00 00 00 4E 04 DD 46 05 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 46 00 00 00 CD 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 05 04 00 +T 4E 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_large_lib/ungetc.rel b/src/nos/lib/crt_large_lib/ungetc.rel new file mode 100644 index 00000000..527b891f --- /dev/null +++ b/src/nos/lib/crt_large_lib/ungetc.rel @@ -0,0 +1,74 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _fflush Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B8 flags 0 +S _ungetc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0C 00 09 7E E6 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 80 28 09 +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 DD 5E 04 DD 56 05 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 0C 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 20 00 00 00 E6 10 4F 23 7E E6 02 47 3E 10 A9 +R 00 00 01 00 +T 2B 00 00 00 B0 28 06 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 21 FF FF C3 B5 00 00 00 +R 00 00 01 00 00 08 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 21 0C 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 3F 00 00 00 F6 00 77 23 7E F6 04 77 69 60 4E +R 00 00 01 00 +T 4A 00 00 00 23 46 21 06 00 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 55 00 00 00 19 56 23 66 6A A7 ED 42 30 18 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E 04 DD 66 05 4E 23 46 0B 70 +R 00 00 01 00 +T 6A 00 00 00 2B 71 69 60 DD 46 02 70 68 26 00 +R 00 00 01 00 +T 75 00 00 00 18 3E +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 DD 6E 04 DD 66 05 23 23 46 23 66 +R 00 00 01 00 +T 82 00 00 00 68 E5 21 06 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 8D 00 00 00 09 4E 23 46 E1 A7 ED 42 20 1B +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T A2 00 00 00 03 70 2B 71 0B 69 60 DD 46 02 70 +R 00 00 01 00 +T AD 00 00 00 68 26 00 18 03 +R 00 00 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 21 FF FF +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/crt_large_lib/utsname.rel b/src/nos/lib/crt_large_lib/utsname.rel new file mode 100644 index 00000000..41d2d456 --- /dev/null +++ b/src/nos/lib/crt_large_lib/utsname.rel @@ -0,0 +1,54 @@ +XL4 +H 3 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S _getfsys Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _uname Def00000000 +A CSTR size C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C6 FF 21 00 00 39 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4D 44 11 F8 FF CD 00 00 00 00 21 +R 00 00 01 00 02 0A 01 00 +T 12 00 00 00 00 00 39 01 00 00 09 4D 44 DD 5E +R 00 00 01 00 +T 1D 00 00 00 02 DD 56 03 CD 00 00 00 00 21 +R 00 00 01 00 02 09 04 00 +T 25 00 00 00 00 00 39 01 1E 00 09 4D 44 21 +R 00 00 01 00 +T 2F 00 00 00 0E 00 DD 5E 02 DD 56 03 19 EB CD +R 00 00 01 00 +T 3A 00 00 00 00 00 00 00 21 00 00 39 01 16 00 +R 00 00 01 00 02 04 04 00 +T 43 00 00 00 09 4D 44 21 1C 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 4E 00 00 00 03 19 EB CD 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 04 00 +T 57 00 00 00 39 01 0E 00 09 4D 44 21 24 00 DD +R 00 00 01 00 +T 62 00 00 00 5E 02 DD 56 03 19 EB CD +R 00 00 01 00 +T 6A 00 00 00 00 00 00 00 21 00 00 39 01 2C 00 +R 00 00 01 00 02 04 04 00 +T 73 00 00 00 09 4D 44 21 2C 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 7E 00 00 00 03 19 EB CD 00 00 00 00 01 +R 00 00 01 00 02 08 04 00 +T 85 00 00 00 00 00 00 00 21 34 00 DD 5E 02 DD +R 00 00 01 00 00 04 02 00 +T 8E 00 00 00 56 03 19 EB CD 00 00 00 00 21 +R 00 00 01 00 02 09 04 00 +T 96 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 28 6C 6F 63 61 6C 68 6F 73 74 29 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/vfprintf.rel b/src/nos/lib/crt_large_lib/vfprintf.rel new file mode 100644 index 00000000..f60c2b40 --- /dev/null +++ b/src/nos/lib/crt_large_lib/vfprintf.rel @@ -0,0 +1,19 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ___fputter Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___vprinter Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S _vfprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 08 DD 66 09 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 E5 C5 4B 42 11 00 00 00 00 CD +R 00 00 01 00 02 09 01 00 +T 11 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 0B 02 00 diff --git a/src/nos/lib/crt_large_lib/vfscanf.rel b/src/nos/lib/crt_large_lib/vfscanf.rel new file mode 100644 index 00000000..6bf92492 --- /dev/null +++ b/src/nos/lib/crt_large_lib/vfscanf.rel @@ -0,0 +1,923 @@ +XL4 +H 3 areas 10 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _ungetc Ref00000000 +S _fgetc Ref00000000 +S ?L_NEG_L03 Ref00000000 +S _strchr Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S _strcpy Ref00000000 +S ?L_MUL_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 851 flags 0 +S _vfscanf Def00000000 +A CSTR size 18 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 50 FF AF DD 77 FD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 DD 77 FE 79 B0 28 0A DD 6E 04 DD +R 00 00 01 00 +T 14 00 00 00 66 05 AF B6 20 06 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 00 00 C3 4E 08 00 00 +R 00 00 01 00 00 08 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 29 00 00 00 DD 75 F7 DD 74 F8 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 4E F7 DD 46 F8 21 00 00 CD +R 00 00 01 00 +T 39 00 00 00 00 00 00 00 D2 1A 08 00 00 +R 00 00 01 00 02 04 0D 00 00 09 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 AF DD 77 E9 DD 77 EA DD 6E 04 DD +R 00 00 01 00 +T 49 00 00 00 66 05 7E FE 25 C2 A0 07 00 00 +R 00 00 01 00 00 0A 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 21 00 00 39 AF 77 23 77 23 77 23 +R 00 00 01 00 +T 5C 00 00 00 77 DD 36 F9 FF DD 36 FA FF DD 36 +R 00 00 01 00 +T 67 00 00 00 EF 01 DD 36 F0 00 DD 36 ED 0A DD +R 00 00 01 00 +T 72 00 00 00 36 EE 00 AF DD 77 FB DD 77 FC DD +R 00 00 01 00 +T 7D 00 00 00 36 E9 01 DD 36 EA 00 DD 36 F1 01 +R 00 00 01 00 +T 88 00 00 00 DD 36 F2 00 DD 36 EB FF DD 36 EC +R 00 00 01 00 +T 93 00 00 00 FF 01 00 00 00 00 21 06 00 39 5D +R 00 00 01 00 00 06 02 00 +T 9C 00 00 00 54 CD 00 00 00 00 01 07 00 00 00 +R 00 00 01 00 02 06 09 00 00 0B 02 00 +T A3 00 00 00 21 86 00 39 5D 54 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T AC 00 00 00 DD 6E 04 DD 66 05 23 7E FE 2A 20 +R 00 00 01 00 +T B7 00 00 00 16 +R 00 00 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 AF DD 77 E9 DD 77 EA AF DD 77 F1 +R 00 00 01 00 +T C3 00 00 00 DD 77 F2 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T D9 00 00 00 74 05 4E 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 08 00 +T E2 00 00 00 7E E6 08 28 38 +R 00 00 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 DD 7E F9 DD A6 FA 3C 20 07 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 AF DD 77 F9 DD 77 FA +R 00 00 01 00 +T F7 00 00 00 +R 00 00 01 00 +T F7 00 00 00 DD 6E 04 DD 66 05 4E 06 00 21 +R 00 00 01 00 +T 01 01 00 00 D0 FF 09 01 0A 00 DD 5E F9 DD 56 +R 00 00 01 00 +T 0C 01 00 00 FA CD 00 00 00 00 19 DD 75 F9 DD +R 00 00 01 00 02 06 0C 00 +T 15 01 00 00 74 FA DD 75 EF DD 74 F0 18 AF +R 00 00 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 DD 6E 04 DD 66 05 2B DD 75 04 DD +R 00 00 01 00 +T 2A 01 00 00 74 05 +R 00 00 01 00 +T 2C 01 00 00 +R 00 00 01 00 +T 2C 01 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T 34 01 00 00 +R 00 00 01 00 +T 34 01 00 00 DD 6E 04 DD 66 05 4E 06 00 21 +R 00 00 01 00 +T 3E 01 00 00 00 00 00 00 09 7E E6 02 28 0C DD +R 00 00 01 00 02 04 08 00 +T 47 01 00 00 6E 04 DD 66 05 7E EE 20 5F 18 07 +R 00 00 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 DD 6E 04 DD 66 05 5E +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 CD 00 00 00 00 0D 00 00 2A 5B 62 +R 00 00 01 00 02 05 0E 00 +T 62 01 00 00 63 64 68 69 6C 6F 73 75 78 +R 00 00 01 00 +T 6B 01 00 00 9C 07 00 00 C7 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6F 01 00 00 D8 01 00 00 4A 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 73 01 00 00 BD 01 00 00 97 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 77 01 00 00 AA 01 00 00 A1 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7B 01 00 00 D1 01 00 00 C2 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7F 01 00 00 B3 01 00 00 E5 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 83 01 00 00 87 01 00 00 8F 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 87 01 00 00 +R 00 00 01 00 +T 87 01 00 00 AF DD 77 E9 DD 77 EA AF DD 77 F1 +R 00 00 01 00 +T 92 01 00 00 DD 77 F2 18 95 +R 00 00 01 00 +T 97 01 00 00 +R 00 00 01 00 +T 97 01 00 00 DD 36 FB 01 DD 36 FC 00 18 8B +R 00 00 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 AF DD 77 FB DD 77 FC 18 82 +R 00 00 01 00 +T AA 01 00 00 +R 00 00 01 00 +T AA 01 00 00 AF DD 77 ED DD 77 EE 18 25 +R 00 00 01 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 DD 36 ED 02 DD 36 EE 00 18 1B +R 00 00 01 00 +T BD 01 00 00 +R 00 00 01 00 +T BD 01 00 00 DD 36 ED 08 DD 36 EE 00 18 11 +R 00 00 01 00 +T C7 01 00 00 +R 00 00 01 00 +T C7 01 00 00 DD 36 ED 10 DD 36 EE 00 18 07 +R 00 00 01 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 AF DD 77 EB DD 77 EC +R 00 00 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 DD 4E F7 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 08 00 +T E1 01 00 00 7E E6 10 28 1E +R 00 00 01 00 +T E6 01 00 00 +R 00 00 01 00 +T E6 01 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T EF 01 00 00 DD 75 F7 DD 74 F8 4D 44 21 00 00 +R 00 00 01 00 +T FA 01 00 00 CD 00 00 00 00 38 03 +R 00 00 01 00 02 05 0D 00 +T FF 01 00 00 +R 00 00 01 00 +T FF 01 00 00 C3 1A 08 00 00 +R 00 00 01 00 00 05 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 18 D4 +R 00 00 01 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 DD 6E 04 DD 66 05 4E 06 00 21 +R 00 00 01 00 +T 0E 02 00 00 00 00 00 00 09 7E E6 02 28 08 +R 00 00 01 00 02 04 08 00 +T 16 02 00 00 +R 00 00 01 00 +T 16 02 00 00 DD 36 FB 01 DD 36 FC 00 +R 00 00 01 00 +T 1E 02 00 00 +R 00 00 01 00 +T 1E 02 00 00 DD 7E ED DD B6 EE C2 C1 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 DD 36 ED 0A DD 36 EE 00 AF DD 77 +R 00 00 01 00 +T 32 02 00 00 EB DD 77 EC 3E 25 DD AE F7 DD B6 +R 00 00 01 00 +T 3D 02 00 00 F8 20 0B +R 00 00 01 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 DD 36 ED 02 DD 36 EE 00 C3 +R 00 00 01 00 +T 49 02 00 00 F9 02 00 00 +R 00 00 01 00 00 04 01 00 +T 4B 02 00 00 +R 00 00 01 00 +T 4B 02 00 00 3E 30 DD AE F7 DD B6 F8 20 6C +R 00 00 01 00 +T 55 02 00 00 +R 00 00 01 00 +T 55 02 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 5E 02 00 00 DD 75 F7 DD 74 F8 4D 44 21 00 00 +R 00 00 01 00 +T 69 02 00 00 CD 00 00 00 00 38 03 +R 00 00 01 00 02 05 0D 00 +T 6E 02 00 00 +R 00 00 01 00 +T 6E 02 00 00 C3 2E 04 00 00 +R 00 00 01 00 00 05 01 00 +T 71 02 00 00 +R 00 00 01 00 +T 71 02 00 00 3E 62 DD AE F7 DD B6 F8 28 0A 3E +R 00 00 01 00 +T 7C 02 00 00 42 DD AE F7 DD B6 F8 20 0F +R 00 00 01 00 +T 85 02 00 00 +R 00 00 01 00 +T 85 02 00 00 +R 00 00 01 00 +T 85 02 00 00 +R 00 00 01 00 +T 85 02 00 00 DD 36 ED 02 DD 36 EE 00 DD 36 D8 +R 00 00 01 00 +T 90 02 00 00 00 C3 F5 03 00 00 +R 00 00 01 00 00 06 01 00 +T 94 02 00 00 +R 00 00 01 00 +T 94 02 00 00 3E 78 DD AE F7 DD B6 F8 28 19 3E +R 00 00 01 00 +T 9F 02 00 00 58 DD AE F7 DD B6 F8 28 0F +R 00 00 01 00 +T A8 02 00 00 +R 00 00 01 00 +T A8 02 00 00 +R 00 00 01 00 +T A8 02 00 00 +R 00 00 01 00 +T A8 02 00 00 DD 36 ED 08 DD 36 EE 00 DD 36 DE +R 00 00 01 00 +T B3 02 00 00 00 C3 F5 03 00 00 +R 00 00 01 00 00 06 01 00 +T B7 02 00 00 +R 00 00 01 00 +T B7 02 00 00 DD 36 ED 10 DD 36 EE 00 18 38 +R 00 00 01 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 DD 7E EB DD B6 EC 20 4C 3E 0A DD +R 00 00 01 00 +T CC 02 00 00 AE ED DD B6 EE 20 42 3E 2D DD AE +R 00 00 01 00 +T D7 02 00 00 F7 DD B6 F8 20 04 0E 01 18 02 +R 00 00 01 00 +T E1 02 00 00 +R 00 00 01 00 +T E1 02 00 00 0E 00 +R 00 00 01 00 +T E3 02 00 00 +R 00 00 01 00 +T E3 02 00 00 06 00 DD 71 EB DD 70 EC 79 B0 20 +R 00 00 01 00 +T EE 02 00 00 0A 3E 2B DD AE F7 DD B6 F8 20 1C +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 02 03 00 00 DD 75 F7 DD 74 F8 4D 44 21 00 00 +R 00 00 01 00 +T 0D 03 00 00 CD 00 00 00 00 38 03 +R 00 00 01 00 02 05 0D 00 +T 12 03 00 00 +R 00 00 01 00 +T 12 03 00 00 C3 1A 08 00 00 +R 00 00 01 00 00 05 01 00 +T 15 03 00 00 +R 00 00 01 00 +T 15 03 00 00 +R 00 00 01 00 +T 15 03 00 00 21 86 00 39 DD 4E ED DD 46 EE 09 +R 00 00 01 00 +T 20 03 00 00 36 00 21 04 00 39 E5 DD 4E F7 06 +R 00 00 01 00 +T 2B 03 00 00 00 21 00 00 00 00 09 7E E6 04 28 +R 00 00 01 00 02 06 08 00 +T 34 03 00 00 0E DD 7E F7 EE 20 4F DD 7E F8 EE +R 00 00 01 00 +T 3F 03 00 00 00 47 18 06 +R 00 00 01 00 +T 43 03 00 00 +R 00 00 01 00 +T 43 03 00 00 DD 4E F7 DD 46 F8 +R 00 00 01 00 +T 49 03 00 00 +R 00 00 01 00 +T 49 03 00 00 21 88 00 39 5D 54 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 52 03 00 00 4D 44 E1 71 23 70 DD 7E F7 DD B6 +R 00 00 01 00 +T 5D 03 00 00 F8 28 09 21 04 00 39 7E 23 B6 20 +R 00 00 01 00 +T 68 03 00 00 0B +R 00 00 01 00 +T 69 03 00 00 +R 00 00 01 00 +T 69 03 00 00 +R 00 00 01 00 +T 69 03 00 00 DD 7E F9 DD B6 FA 28 03 +R 00 00 01 00 +T 71 03 00 00 +R 00 00 01 00 +T 71 03 00 00 +R 00 00 01 00 +T 71 03 00 00 +R 00 00 01 00 +T 71 03 00 00 C3 1A 08 00 00 +R 00 00 01 00 00 05 01 00 +T 74 03 00 00 +R 00 00 01 00 +T 74 03 00 00 +R 00 00 01 00 +T 74 03 00 00 21 04 00 39 7E 23 B6 CA +R 00 00 01 00 +T 7C 03 00 00 2E 04 00 00 DD 6E F9 DD 66 FA 2B +R 00 00 01 00 00 04 01 00 +T 85 03 00 00 DD 75 F9 DD 74 FA 23 7D B4 CA +R 00 00 01 00 +T 8F 03 00 00 2E 04 00 00 DD 7E F7 DD B6 F8 CA +R 00 00 01 00 00 04 01 00 +T 98 03 00 00 2E 04 00 00 +R 00 00 01 00 00 04 01 00 +T 9A 03 00 00 +R 00 00 01 00 +T 9A 03 00 00 +R 00 00 01 00 +T 9A 03 00 00 +R 00 00 01 00 +T 9A 03 00 00 21 86 00 39 4D 44 21 04 00 39 56 +R 00 00 01 00 +T A5 03 00 00 23 66 6A A7 ED 42 7C 07 9F 4F 41 +R 00 00 01 00 +T B0 03 00 00 C5 E5 DD 6E ED DD 66 EE 7C 07 9F +R 00 00 01 00 +T BB 03 00 00 4F 41 C5 E5 21 08 00 39 5E 23 56 +R 00 00 01 00 +T C6 03 00 00 23 4E 23 46 EB CD 00 00 00 00 59 +R 00 00 01 00 02 0A 0A 00 +T CF 03 00 00 50 C1 09 EB C1 ED 4A 4D 44 EB E5 +R 00 00 01 00 +T DA 03 00 00 21 02 00 39 D1 73 23 72 23 71 23 +R 00 00 01 00 +T E5 03 00 00 70 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T ED 03 00 00 00 00 00 00 DD 75 F7 DD 74 F8 +R 00 00 01 00 02 04 03 00 +T F5 03 00 00 +R 00 00 01 00 +T F5 03 00 00 21 04 00 39 E5 DD 4E F7 06 00 21 +R 00 00 01 00 +T 00 04 00 00 00 00 00 00 09 7E E6 04 28 0E DD +R 00 00 01 00 02 04 08 00 +T 09 04 00 00 7E F7 EE 20 4F DD 7E F8 EE 00 47 +R 00 00 01 00 +T 14 04 00 00 18 06 +R 00 00 01 00 +T 16 04 00 00 +R 00 00 01 00 +T 16 04 00 00 DD 4E F7 DD 46 F8 +R 00 00 01 00 +T 1C 04 00 00 +R 00 00 01 00 +T 1C 04 00 00 21 88 00 39 5D 54 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 25 04 00 00 4D 44 E1 71 23 70 C3 74 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 2E 04 00 00 +R 00 00 01 00 +T 2E 04 00 00 +R 00 00 01 00 +T 2E 04 00 00 DD 7E E9 DD B6 EA CA BF 04 00 00 +R 00 00 01 00 00 0B 01 00 +T 37 04 00 00 +R 00 00 01 00 +T 37 04 00 00 3E 01 DD AE EB DD B6 EC 20 1C +R 00 00 01 00 +T 41 04 00 00 +R 00 00 01 00 +T 41 04 00 00 21 00 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 4C 04 00 00 EB CD 00 00 00 00 E5 21 02 00 39 +R 00 00 01 00 02 06 04 00 +T 55 04 00 00 D1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 5D 04 00 00 +R 00 00 01 00 +T 5D 04 00 00 DD 7E FB DD B6 FC 28 2C +R 00 00 01 00 +T 65 04 00 00 +R 00 00 01 00 +T 65 04 00 00 21 B8 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T 70 04 00 00 00 77 2B 6E 67 2B 2B 7E 23 66 6F +R 00 00 01 00 +T 7B 04 00 00 E5 21 02 00 39 5E 23 56 23 4E 23 +R 00 00 01 00 +T 86 04 00 00 46 E1 73 23 72 23 71 23 70 18 26 +R 00 00 01 00 +T 91 04 00 00 +R 00 00 01 00 +T 91 04 00 00 21 B8 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T 9C 04 00 00 00 77 2B 6E 67 2B 2B 7E 23 66 6F +R 00 00 01 00 +T A7 04 00 00 E5 21 02 00 39 5E 23 56 23 4E 23 +R 00 00 01 00 +T B2 04 00 00 46 E1 73 23 72 +R 00 00 01 00 +T B7 04 00 00 +R 00 00 01 00 +T B7 04 00 00 DD 34 FD 20 03 DD 34 FE +R 00 00 01 00 +T BF 04 00 00 +R 00 00 01 00 +T BF 04 00 00 +R 00 00 01 00 +T BF 04 00 00 C3 9E 07 00 00 +R 00 00 01 00 00 05 01 00 +T C2 04 00 00 +R 00 00 01 00 +T C2 04 00 00 DD 6E EF DD 66 F0 DD 75 F9 DD 74 +R 00 00 01 00 +T CD 04 00 00 FA AF DD 77 F1 DD 77 F2 AF DD 77 +R 00 00 01 00 +T D8 04 00 00 FB DD 77 FC 21 06 00 39 36 00 C3 +R 00 00 01 00 +T E3 04 00 00 7D 06 00 00 +R 00 00 01 00 00 04 01 00 +T E5 04 00 00 +R 00 00 01 00 +T E5 04 00 00 21 04 00 39 E5 21 08 00 39 4D 44 +R 00 00 01 00 +T F0 04 00 00 E1 71 23 70 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T FB 04 00 00 DD 75 04 DD 74 05 7E FE 5E 20 11 +R 00 00 01 00 +T 06 05 00 00 +R 00 00 01 00 +T 06 05 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T 0E 05 00 00 +R 00 00 01 00 +T 0E 05 00 00 AF DD 77 FB DD 77 FC 18 08 +R 00 00 01 00 +T 17 05 00 00 +R 00 00 01 00 +T 17 05 00 00 DD 36 FB 01 DD 36 FC 00 +R 00 00 01 00 +T 1F 05 00 00 +R 00 00 01 00 +T 1F 05 00 00 DD 36 F3 02 DD 36 F4 00 DD 6E 04 +R 00 00 01 00 +T 2A 05 00 00 DD 66 05 7E FE 5D 28 0B DD 6E 04 +R 00 00 01 00 +T 35 05 00 00 DD 66 05 7E FE 2D 20 24 +R 00 00 01 00 +T 3D 05 00 00 +R 00 00 01 00 +T 3D 05 00 00 +R 00 00 01 00 +T 3D 05 00 00 +R 00 00 01 00 +T 3D 05 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T 48 05 00 00 74 05 2B 46 21 04 00 39 5E 23 56 +R 00 00 01 00 +T 53 05 00 00 13 72 2B 73 1B EB 70 AF DD 77 F3 +R 00 00 01 00 +T 5E 05 00 00 DD 77 F4 +R 00 00 01 00 +T 61 05 00 00 +R 00 00 01 00 +T 61 05 00 00 +R 00 00 01 00 +T 61 05 00 00 DD 6E 04 DD 66 05 7E FE 5D CA +R 00 00 01 00 +T 6B 05 00 00 3E 06 00 00 +R 00 00 01 00 00 04 01 00 +T 6D 05 00 00 +R 00 00 01 00 +T 6D 05 00 00 DD 6E 04 DD 66 05 AF B6 20 03 +R 00 00 01 00 +T 77 05 00 00 +R 00 00 01 00 +T 77 05 00 00 C3 1A 08 00 00 +R 00 00 01 00 00 05 01 00 +T 7A 05 00 00 +R 00 00 01 00 +T 7A 05 00 00 DD 5E F3 DD 56 F4 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 83 05 00 00 00 00 03 00 1E 06 00 00 +R 00 00 01 00 00 08 01 00 +T 89 05 00 00 FC 05 00 00 8F 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8D 05 00 00 17 06 00 00 +R 00 00 01 00 00 04 01 00 +T 8F 05 00 00 +R 00 00 01 00 +T 8F 05 00 00 21 04 00 39 46 23 66 68 2B 2B 4E +R 00 00 01 00 +T 9A 05 00 00 06 00 DD 71 F5 DD 70 F6 DD 6E 04 +R 00 00 01 00 +T A5 05 00 00 DD 66 05 6E 26 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0D 00 +T AE 05 00 00 38 4C +R 00 00 01 00 +T B0 05 00 00 +R 00 00 01 00 +T B0 05 00 00 21 04 00 39 7E D6 02 77 23 7E DE +R 00 00 01 00 +T BB 05 00 00 00 77 +R 00 00 01 00 +T BD 05 00 00 +R 00 00 01 00 +T BD 05 00 00 DD 6E 04 DD 66 05 4E 06 00 DD 6E +R 00 00 01 00 +T C8 05 00 00 F5 DD 66 F6 CD 00 00 00 00 30 21 +R 00 00 01 00 02 09 0D 00 +T D1 05 00 00 +R 00 00 01 00 +T D1 05 00 00 DD 6E F5 DD 66 F6 23 DD 75 F5 DD +R 00 00 01 00 +T DC 05 00 00 74 F6 2B E5 21 06 00 39 4E 23 46 +R 00 00 01 00 +T E7 05 00 00 03 70 2B 71 0B 69 60 C1 71 18 CB +R 00 00 01 00 +T F2 05 00 00 +R 00 00 01 00 +T F2 05 00 00 DD 36 F3 02 DD 36 F4 00 18 22 +R 00 00 01 00 +T FC 05 00 00 +R 00 00 01 00 +T FC 05 00 00 +R 00 00 01 00 +T FC 05 00 00 DD 6E 04 DD 66 05 7E FE 2D 20 04 +R 00 00 01 00 +T 07 06 00 00 0E 01 18 02 +R 00 00 01 00 +T 0B 06 00 00 +R 00 00 01 00 +T 0B 06 00 00 0E 00 +R 00 00 01 00 +T 0D 06 00 00 +R 00 00 01 00 +T 0D 06 00 00 06 00 DD 71 F3 DD 70 F4 18 07 +R 00 00 01 00 +T 17 06 00 00 +R 00 00 01 00 +T 17 06 00 00 AF DD 77 F3 DD 77 F4 +R 00 00 01 00 +T 1E 06 00 00 +R 00 00 01 00 +T 1E 06 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T 29 06 00 00 74 05 2B 46 21 04 00 39 5E 23 56 +R 00 00 01 00 +T 34 06 00 00 13 72 2B 73 1B EB 70 C3 +R 00 00 01 00 +T 3C 06 00 00 61 05 00 00 +R 00 00 01 00 00 04 01 00 +T 3E 06 00 00 +R 00 00 01 00 +T 3E 06 00 00 21 04 00 39 7E 23 66 6F 36 00 18 +R 00 00 01 00 +T 49 06 00 00 33 +R 00 00 01 00 +T 4A 06 00 00 +R 00 00 01 00 +T 4A 06 00 00 AF DD 77 FB DD 77 FC +R 00 00 01 00 +T 51 06 00 00 +R 00 00 01 00 +T 51 06 00 00 DD 4E F7 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 08 00 +T 5A 06 00 00 7E E6 10 28 1E +R 00 00 01 00 +T 5F 06 00 00 +R 00 00 01 00 +T 5F 06 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 68 06 00 00 DD 75 F7 DD 74 F8 4D 44 21 00 00 +R 00 00 01 00 +T 73 06 00 00 CD 00 00 00 00 38 03 +R 00 00 01 00 02 05 0D 00 +T 78 06 00 00 +R 00 00 01 00 +T 78 06 00 00 C3 1A 08 00 00 +R 00 00 01 00 00 05 01 00 +T 7B 06 00 00 +R 00 00 01 00 +T 7B 06 00 00 18 D4 +R 00 00 01 00 +T 7D 06 00 00 +R 00 00 01 00 +T 7D 06 00 00 +R 00 00 01 00 +T 7D 06 00 00 21 04 00 39 E5 21 BA 00 39 7E C6 +R 00 00 01 00 +T 88 06 00 00 02 77 23 7E CE 00 77 2B 6E 67 2B +R 00 00 01 00 +T 93 06 00 00 2B 4E 23 46 E1 71 23 70 DD 7E F9 +R 00 00 01 00 +T 9E 06 00 00 DD B6 FA 28 53 +R 00 00 01 00 +T A3 06 00 00 +R 00 00 01 00 +T A3 06 00 00 DD 4E F7 DD 46 F8 21 06 00 39 5D +R 00 00 01 00 +T AE 06 00 00 54 CD 00 00 00 00 DD 75 E7 DD 74 +R 00 00 01 00 02 06 05 00 +T B7 06 00 00 E8 DD 4E F7 DD 46 F8 21 00 00 CD +R 00 00 01 00 +T C2 06 00 00 00 00 00 00 30 1B DD 7E E7 DD B6 +R 00 00 01 00 02 04 0D 00 +T CB 06 00 00 E8 20 04 0E 01 18 02 +R 00 00 01 00 +T D2 06 00 00 +R 00 00 01 00 +T D2 06 00 00 0E 00 +R 00 00 01 00 +T D4 06 00 00 +R 00 00 01 00 +T D4 06 00 00 06 00 DD 6E FB DD 66 FC A7 ED 42 +R 00 00 01 00 +T DF 06 00 00 20 15 +R 00 00 01 00 +T E1 06 00 00 +R 00 00 01 00 +T E1 06 00 00 +R 00 00 01 00 +T E1 06 00 00 +R 00 00 01 00 +T E1 06 00 00 DD 7E F1 DD B6 F2 28 0A +R 00 00 01 00 +T E9 06 00 00 +R 00 00 01 00 +T E9 06 00 00 21 04 00 39 7E 23 66 6F 36 00 +R 00 00 01 00 +T F3 06 00 00 +R 00 00 01 00 +T F3 06 00 00 C3 1A 08 00 00 +R 00 00 01 00 00 05 01 00 +T F6 06 00 00 +R 00 00 01 00 +T F6 06 00 00 +R 00 00 01 00 +T F6 06 00 00 +R 00 00 01 00 +T F6 06 00 00 DD 7E E9 DD B6 EA 28 11 +R 00 00 01 00 +T FE 06 00 00 +R 00 00 01 00 +T FE 06 00 00 DD 46 F7 21 04 00 39 5E 23 56 13 +R 00 00 01 00 +T 09 07 00 00 72 2B 73 1B EB 70 +R 00 00 01 00 +T 0F 07 00 00 +R 00 00 01 00 +T 0F 07 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 18 07 00 00 DD 75 F7 DD 74 F8 4D 44 21 00 00 +R 00 00 01 00 +T 23 07 00 00 CD 00 00 00 00 30 11 DD 6E F9 DD +R 00 00 01 00 02 05 0D 00 +T 2C 07 00 00 66 FA 2B DD 75 F9 DD 74 FA 7D B4 +R 00 00 01 00 +T 37 07 00 00 20 02 +R 00 00 01 00 +T 39 07 00 00 +R 00 00 01 00 +T 39 07 00 00 +R 00 00 01 00 +T 39 07 00 00 +R 00 00 01 00 +T 39 07 00 00 18 30 +R 00 00 01 00 +T 3B 07 00 00 +R 00 00 01 00 +T 3B 07 00 00 DD 4E F7 DD 46 F8 21 06 00 39 5D +R 00 00 01 00 +T 46 07 00 00 54 CD 00 00 00 00 DD 75 E7 DD 74 +R 00 00 01 00 02 06 05 00 +T 4F 07 00 00 E8 7D B4 20 04 0E 01 18 02 +R 00 00 01 00 +T 58 07 00 00 +R 00 00 01 00 +T 58 07 00 00 0E 00 +R 00 00 01 00 +T 5A 07 00 00 +R 00 00 01 00 +T 5A 07 00 00 06 00 DD 6E FB DD 66 FC A7 ED 42 +R 00 00 01 00 +T 65 07 00 00 20 02 +R 00 00 01 00 +T 67 07 00 00 +R 00 00 01 00 +T 67 07 00 00 18 02 +R 00 00 01 00 +T 69 07 00 00 +R 00 00 01 00 +T 69 07 00 00 18 8B +R 00 00 01 00 +T 6B 07 00 00 +R 00 00 01 00 +T 6B 07 00 00 DD 7E E9 DD B6 EA 28 1A +R 00 00 01 00 +T 73 07 00 00 +R 00 00 01 00 +T 73 07 00 00 DD 7E F1 DD B6 F2 28 0A +R 00 00 01 00 +T 7B 07 00 00 +R 00 00 01 00 +T 7B 07 00 00 21 04 00 39 7E 23 66 6F 36 00 +R 00 00 01 00 +T 85 07 00 00 +R 00 00 01 00 +T 85 07 00 00 DD 34 FD 20 03 DD 34 FE +R 00 00 01 00 +T 8D 07 00 00 +R 00 00 01 00 +T 8D 07 00 00 +R 00 00 01 00 +T 8D 07 00 00 18 0F +R 00 00 01 00 +T 8F 07 00 00 +R 00 00 01 00 +T 8F 07 00 00 DD 6E 04 DD 66 05 2B DD 75 04 DD +R 00 00 01 00 +T 9A 07 00 00 74 05 +R 00 00 01 00 +T 9C 07 00 00 +R 00 00 01 00 +T 9C 07 00 00 18 41 +R 00 00 01 00 +T 9E 07 00 00 +R 00 00 01 00 +T 9E 07 00 00 18 64 +R 00 00 01 00 +T A0 07 00 00 +R 00 00 01 00 +T A0 07 00 00 DD 6E 04 DD 66 05 4E 06 00 21 +R 00 00 01 00 +T AA 07 00 00 00 00 00 00 09 7E E6 10 28 2D +R 00 00 01 00 02 04 08 00 +T B2 07 00 00 +R 00 00 01 00 +T B2 07 00 00 +R 00 00 01 00 +T B2 07 00 00 DD 4E F7 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 08 00 +T BB 07 00 00 7E E6 10 28 1D +R 00 00 01 00 +T C0 07 00 00 +R 00 00 01 00 +T C0 07 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T C9 07 00 00 DD 75 F7 DD 74 F8 4D 44 21 00 00 +R 00 00 01 00 +T D4 07 00 00 CD 00 00 00 00 38 02 +R 00 00 01 00 02 05 0D 00 +T D9 07 00 00 +R 00 00 01 00 +T D9 07 00 00 18 3F +R 00 00 01 00 +T DB 07 00 00 +R 00 00 01 00 +T DB 07 00 00 18 D5 +R 00 00 01 00 +T DD 07 00 00 +R 00 00 01 00 +T DD 07 00 00 18 25 +R 00 00 01 00 +T DF 07 00 00 +R 00 00 01 00 +T DF 07 00 00 +R 00 00 01 00 +T DF 07 00 00 DD 6E 04 DD 66 05 4E 06 00 DD 6E +R 00 00 01 00 +T EA 07 00 00 F7 DD 66 F8 A7 ED 42 28 02 +R 00 00 01 00 +T F3 07 00 00 +R 00 00 01 00 +T F3 07 00 00 18 25 +R 00 00 01 00 +T F5 07 00 00 +R 00 00 01 00 +T F5 07 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T FE 07 00 00 DD 75 F7 DD 74 F8 +R 00 00 01 00 +T 04 08 00 00 +R 00 00 01 00 +T 04 08 00 00 +R 00 00 01 00 +T 04 08 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T 0F 08 00 00 74 05 7E B7 20 02 +R 00 00 01 00 +T 15 08 00 00 +R 00 00 01 00 +T 15 08 00 00 18 03 +R 00 00 01 00 +T 17 08 00 00 +R 00 00 01 00 +T 17 08 00 00 C3 2F 00 00 00 +R 00 00 01 00 00 05 01 00 +T 1A 08 00 00 +R 00 00 01 00 +T 1A 08 00 00 +R 00 00 01 00 +T 1A 08 00 00 DD 7E F7 DD A6 F8 3C 20 0D DD 7E +R 00 00 01 00 +T 25 08 00 00 FD DD B6 FE 20 05 +R 00 00 01 00 +T 2B 08 00 00 +R 00 00 01 00 +T 2B 08 00 00 +R 00 00 01 00 +T 2B 08 00 00 +R 00 00 01 00 +T 2B 08 00 00 21 FF FF 18 1E +R 00 00 01 00 +T 30 08 00 00 +R 00 00 01 00 +T 30 08 00 00 DD 7E F7 DD A6 F8 3C 28 0F +R 00 00 01 00 +T 39 08 00 00 +R 00 00 01 00 +T 39 08 00 00 DD 4E 02 DD 46 03 DD 5E F7 DD 56 +R 00 00 01 00 +T 44 08 00 00 F8 CD 00 00 00 00 +R 00 00 01 00 02 06 02 00 +T 48 08 00 00 +R 00 00 01 00 +T 48 08 00 00 DD 6E FD DD 66 FE +R 00 00 01 00 +T 4E 08 00 00 +R 00 00 01 00 +T 4E 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 09 0A 0B 0C 0D 20 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 30 31 32 33 34 35 36 37 38 39 41 +R 00 00 02 00 +T 12 00 00 00 42 43 44 45 46 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/vprinter.rel b/src/nos/lib/crt_large_lib/vprinter.rel new file mode 100644 index 00000000..91a8e1ea --- /dev/null +++ b/src/nos/lib/crt_large_lib/vprinter.rel @@ -0,0 +1,743 @@ +XL4 +H 3 areas E global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?S_MULASG_L02 Ref00000000 +S _strcat Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _ultoa Ref00000000 +S _strcpy Ref00000000 +S ?CALL_IND_L09 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _ltoa Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 71C flags 0 +S ___vprinter Def000001E7 +A CSTR size C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 B8 FF AF DD 77 B9 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 DD 77 BA DD 5E 08 DD 56 09 CD +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 DD 75 BB DD 74 BC 21 +R 00 00 01 00 02 04 03 00 +T 1C 00 00 00 05 00 39 DD 75 FD DD 74 FE DD 6E +R 00 00 01 00 +T 27 00 00 00 08 DD 66 09 7E FE 2D 20 14 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 6E 08 DD 66 09 23 DD 75 08 DD +R 00 00 01 00 +T 3B 00 00 00 74 09 2B 46 DD 70 0C 18 0E +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 AF DD B6 0C 28 08 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 DD 34 BB 20 03 DD 34 BC +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 7E 12 DD A6 13 3C 28 1D DD 4E +R 00 00 01 00 +T 5D 00 00 00 BB DD 46 BC DD 6E 12 DD 66 13 CD +R 00 00 01 00 +T 68 00 00 00 00 00 00 00 30 0C +R 00 00 01 00 02 04 0B 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 6E 12 DD 66 13 DD 75 BB DD 74 +R 00 00 01 00 +T 77 00 00 00 BC +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 DD 4E BB DD 46 BC DD 6E 10 DD 66 +R 00 00 01 00 +T 83 00 00 00 11 CD 00 00 00 00 30 0C +R 00 00 01 00 02 06 0B 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 DD 6E BB DD 66 BC DD 75 10 DD 74 +R 00 00 01 00 +T 94 00 00 00 11 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 DD 6E 10 DD 66 11 DD 75 B9 DD 74 +R 00 00 01 00 +T A0 00 00 00 BA 21 58 00 39 7E DD 96 BB 77 23 +R 00 00 01 00 +T AB 00 00 00 7E DD 9E BC 77 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 DD 7E 10 DD B6 11 20 09 DD 7E BB +R 00 00 01 00 +T BB 00 00 00 DD B6 BC CA A7 01 00 00 +R 00 00 01 00 00 08 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 DD 7E 0A DD B6 0B 20 34 DD 7E 10 +R 00 00 01 00 +T CC 00 00 00 DD B6 11 28 2C +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 7E BB DD B6 BC 28 0F AF DD B6 +R 00 00 01 00 +T DC 00 00 00 0C 28 09 DD 7E 0E FE 30 20 02 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 18 23 +R 00 00 01 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 DD 46 0E DD 70 B8 DD 6E 10 DD 66 +R 00 00 01 00 +T F3 00 00 00 11 2B DD 75 10 DD 74 11 18 4E +R 00 00 01 00 +T FD 00 00 00 +R 00 00 01 00 +T FD 00 00 00 DD 7E BB DD B6 BC 28 33 +R 00 00 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 AF DD B6 0C 28 0C +R 00 00 01 00 +T 0B 01 00 00 +R 00 00 01 00 +T 0B 01 00 00 +R 00 00 01 00 +T 0B 01 00 00 DD 46 0C DD 70 B8 DD 36 0C 00 18 +R 00 00 01 00 +T 16 01 00 00 12 +R 00 00 01 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 DD 6E 08 DD 66 09 23 DD 75 08 DD +R 00 00 01 00 +T 22 01 00 00 74 09 2B 46 DD 70 B8 +R 00 00 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 DD 6E BB DD 66 BC 2B DD 75 BB DD +R 00 00 01 00 +T 34 01 00 00 74 BC 18 13 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 DD 46 0E DD 70 B8 DD 6E 10 DD 66 +R 00 00 01 00 +T 43 01 00 00 11 2B DD 75 10 DD 74 11 +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 21 05 00 39 01 40 00 09 4D 44 DD +R 00 00 01 00 +T 56 01 00 00 6E FD DD 66 FE A7 ED 42 38 32 +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 DD 6E 04 DD 66 05 E5 21 07 00 39 +R 00 00 01 00 +T 6B 01 00 00 4D 44 DD 6E FD DD 66 FE A7 ED 42 +R 00 00 01 00 +T 76 01 00 00 4D 44 21 07 00 39 5D 54 DD 6E 02 +R 00 00 01 00 +T 81 01 00 00 DD 66 03 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 08 08 00 +T 89 01 00 00 05 00 39 DD 75 FD DD 74 FE +R 00 00 01 00 +T 92 01 00 00 +R 00 00 01 00 +T 92 01 00 00 DD 6E FD DD 66 FE 23 DD 75 FD DD +R 00 00 01 00 +T 9D 01 00 00 74 FE 2B DD 46 B8 70 C3 +R 00 00 01 00 +T A5 01 00 00 B0 00 00 00 +R 00 00 01 00 00 04 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 21 05 00 39 DD 4E FD DD 46 FE A7 +R 00 00 01 00 +T B2 01 00 00 ED 42 30 28 +R 00 00 01 00 +T B6 01 00 00 +R 00 00 01 00 +T B6 01 00 00 DD 6E 04 DD 66 05 E5 21 07 00 39 +R 00 00 01 00 +T C1 01 00 00 4D 44 DD 6E FD DD 66 FE A7 ED 42 +R 00 00 01 00 +T CC 01 00 00 4D 44 21 07 00 39 5D 54 DD 6E 02 +R 00 00 01 00 +T D7 01 00 00 DD 66 03 CD 00 00 00 00 F1 +R 00 00 01 00 02 08 08 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 DD 6E B9 DD 66 BA C3 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 CD 00 00 00 00 A0 FF AF DD 77 AE +R 00 00 01 00 02 05 09 00 +T F0 01 00 00 DD 77 AF DD 6E 08 DD 66 09 DD 75 +R 00 00 01 00 +T FB 01 00 00 FD DD 74 FE +R 00 00 01 00 +T FF 01 00 00 +R 00 00 01 00 +T FF 01 00 00 DD 6E 08 DD 66 09 AF B6 CA +R 00 00 01 00 +T 08 02 00 00 CD 06 00 00 +R 00 00 01 00 00 04 01 00 +T 0A 02 00 00 +R 00 00 01 00 +T 0A 02 00 00 DD 6E 08 DD 66 09 7E FE 25 C2 +R 00 00 01 00 +T 14 02 00 00 C2 06 00 00 +R 00 00 01 00 00 04 01 00 +T 16 02 00 00 +R 00 00 01 00 +T 16 02 00 00 DD 4E 08 DD 46 09 DD 6E FD DD 66 +R 00 00 01 00 +T 21 02 00 00 FE A7 ED 42 30 41 +R 00 00 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 DD 6E 04 DD 66 05 E5 DD 4E FD DD +R 00 00 01 00 +T 32 02 00 00 46 FE DD 6E 08 DD 66 09 A7 ED 42 +R 00 00 01 00 +T 3D 02 00 00 4D 44 DD 5E FD DD 56 FE DD 6E 02 +R 00 00 01 00 +T 48 02 00 00 DD 66 03 CD 00 00 00 00 F1 4D 44 +R 00 00 01 00 02 08 08 00 +T 51 02 00 00 21 0E 00 39 7E 81 77 23 7E 88 77 +R 00 00 01 00 +T 5C 02 00 00 DD 6E 08 DD 66 09 DD 75 FD DD 74 +R 00 00 01 00 +T 67 02 00 00 FE +R 00 00 01 00 +T 68 02 00 00 +R 00 00 01 00 +T 68 02 00 00 AF DD 77 A2 DD 77 A3 DD 36 B1 00 +R 00 00 01 00 +T 73 02 00 00 DD 36 B0 20 DD 36 AA FF DD 36 AB +R 00 00 01 00 +T 7E 02 00 00 FF AF DD 77 A8 DD 77 A9 DD 36 A6 +R 00 00 01 00 +T 89 02 00 00 FF DD 36 A7 FF DD 36 AC 0A DD 36 +R 00 00 01 00 +T 94 02 00 00 AD 00 21 1B 00 39 DD 75 B3 DD 74 +R 00 00 01 00 +T 9F 02 00 00 B4 DD 36 B2 00 AF DD 77 A4 DD 77 +R 00 00 01 00 +T AA 02 00 00 A5 +R 00 00 01 00 +T AB 02 00 00 +R 00 00 01 00 +T AB 02 00 00 AF DD 77 A0 DD 77 A1 DD 34 08 20 +R 00 00 01 00 +T B6 02 00 00 03 DD 34 09 +R 00 00 01 00 +T BA 02 00 00 +R 00 00 01 00 +T BA 02 00 00 +R 00 00 01 00 +T BA 02 00 00 DD 6E 08 DD 66 09 7E FE 30 38 0B +R 00 00 01 00 +T C5 02 00 00 DD 6E 08 DD 66 09 3E 39 BE 30 02 +R 00 00 01 00 +T D0 02 00 00 +R 00 00 01 00 +T D0 02 00 00 +R 00 00 01 00 +T D0 02 00 00 +R 00 00 01 00 +T D0 02 00 00 18 65 +R 00 00 01 00 +T D2 02 00 00 +R 00 00 01 00 +T D2 02 00 00 21 00 00 39 01 0A 00 CD +R 00 00 01 00 +T DA 02 00 00 00 00 00 00 DD 6E 08 DD 66 09 4E +R 00 00 01 00 02 04 01 00 +T E3 02 00 00 06 00 21 D0 FF 09 4D 44 21 00 00 +R 00 00 01 00 +T EE 02 00 00 39 7E 81 77 23 7E 88 77 DD 7E A8 +R 00 00 01 00 +T F9 02 00 00 DD B6 A9 28 0E +R 00 00 01 00 +T FE 02 00 00 +R 00 00 01 00 +T FE 02 00 00 DD 6E A0 DD 66 A1 DD 75 A6 DD 74 +R 00 00 01 00 +T 09 03 00 00 A7 18 21 +R 00 00 01 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 DD 7E A0 DD B6 A1 20 0D DD 7E B0 +R 00 00 01 00 +T 17 03 00 00 FE 20 20 06 +R 00 00 01 00 +T 1B 03 00 00 +R 00 00 01 00 +T 1B 03 00 00 +R 00 00 01 00 +T 1B 03 00 00 +R 00 00 01 00 +T 1B 03 00 00 DD 36 B0 30 18 8A +R 00 00 01 00 +T 21 03 00 00 +R 00 00 01 00 +T 21 03 00 00 DD 6E A0 DD 66 A1 DD 75 AA DD 74 +R 00 00 01 00 +T 2C 03 00 00 AB +R 00 00 01 00 +T 2D 03 00 00 +R 00 00 01 00 +T 2D 03 00 00 DD 34 08 20 03 DD 34 09 +R 00 00 01 00 +T 35 03 00 00 +R 00 00 01 00 +T 35 03 00 00 18 83 +R 00 00 01 00 +T 37 03 00 00 +R 00 00 01 00 +T 37 03 00 00 DD 6E 08 DD 66 09 5E CD +R 00 00 01 00 +T 3F 03 00 00 00 00 00 00 14 00 00 20 21 23 2A +R 00 00 01 00 02 04 0C 00 +T 48 03 00 00 2B 2D 2E 58 62 63 64 68 69 6C 6F +R 00 00 01 00 +T 53 03 00 00 70 73 75 78 A7 06 00 00 +R 00 00 01 00 00 08 01 00 +T 59 03 00 00 BE 04 00 00 C6 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 5D 03 00 00 3A 06 00 00 99 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 61 03 00 00 8F 04 00 00 1A 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 65 03 00 00 2F 04 00 00 25 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 69 03 00 00 2F 04 00 00 F7 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6D 03 00 00 85 04 00 00 B4 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 71 03 00 00 0F 04 00 00 91 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 75 03 00 00 9C 03 00 00 B0 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 79 03 00 00 A9 03 00 00 D9 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7D 03 00 00 9C 03 00 00 81 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 81 03 00 00 +R 00 00 01 00 +T 81 03 00 00 DD 6E 08 DD 66 09 2B DD 75 08 DD +R 00 00 01 00 +T 8C 03 00 00 74 09 C3 C2 06 00 00 +R 00 00 01 00 00 07 01 00 +T 91 03 00 00 +R 00 00 01 00 +T 91 03 00 00 DD 36 A2 01 DD 36 A3 00 C3 +R 00 00 01 00 +T 9A 03 00 00 AB 02 00 00 +R 00 00 01 00 00 04 01 00 +T 9C 03 00 00 +R 00 00 01 00 +T 9C 03 00 00 DD 6E 08 DD 66 09 46 DD 70 B1 C3 +R 00 00 01 00 +T A7 03 00 00 AB 02 00 00 +R 00 00 01 00 00 04 01 00 +T A9 03 00 00 +R 00 00 01 00 +T A9 03 00 00 DD 36 B2 01 C3 AB 02 00 00 +R 00 00 01 00 00 09 01 00 +T B0 03 00 00 +R 00 00 01 00 +T B0 03 00 00 21 6A 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T BB 03 00 00 00 77 2B 6E 67 2B 2B 46 23 66 68 +R 00 00 01 00 +T C6 03 00 00 DD 75 A0 DD 74 A1 DD 7E A8 DD B6 +R 00 00 01 00 +T D1 03 00 00 A9 28 0E +R 00 00 01 00 +T D4 03 00 00 +R 00 00 01 00 +T D4 03 00 00 DD 6E A0 DD 66 A1 DD 75 A6 DD 74 +R 00 00 01 00 +T DF 03 00 00 A7 18 2A +R 00 00 01 00 +T E2 03 00 00 +R 00 00 01 00 +T E2 03 00 00 DD 6E A0 DD 66 A1 DD 75 AA DD 74 +R 00 00 01 00 +T ED 03 00 00 AB CB 7C 28 1A +R 00 00 01 00 +T F2 03 00 00 +R 00 00 01 00 +T F2 03 00 00 DD 36 A2 01 DD 36 A3 00 DD 4E A0 +R 00 00 01 00 +T FD 03 00 00 DD 46 A1 A7 21 00 00 ED 42 DD 75 +R 00 00 01 00 +T 08 04 00 00 AA DD 74 AB +R 00 00 01 00 +T 0C 04 00 00 +R 00 00 01 00 +T 0C 04 00 00 +R 00 00 01 00 +T 0C 04 00 00 C3 AB 02 00 00 +R 00 00 01 00 00 05 01 00 +T 0F 04 00 00 +R 00 00 01 00 +T 0F 04 00 00 DD 36 A8 01 DD 36 A9 00 C3 +R 00 00 01 00 +T 18 04 00 00 AB 02 00 00 +R 00 00 01 00 00 04 01 00 +T 1A 04 00 00 +R 00 00 01 00 +T 1A 04 00 00 DD 36 A4 01 DD 36 A5 00 C3 +R 00 00 01 00 +T 23 04 00 00 AB 02 00 00 +R 00 00 01 00 00 04 01 00 +T 25 04 00 00 +R 00 00 01 00 +T 25 04 00 00 AF DD 77 A4 DD 77 A5 C3 +R 00 00 01 00 +T 2D 04 00 00 AB 02 00 00 +R 00 00 01 00 00 04 01 00 +T 2F 04 00 00 +R 00 00 01 00 +T 2F 04 00 00 21 0A 00 E5 21 1D 00 39 E5 DD 7E +R 00 00 01 00 +T 3A 04 00 00 A4 DD B6 A5 28 1D 21 6E 00 39 7E +R 00 00 01 00 +T 45 04 00 00 C6 04 77 23 7E CE 00 77 2B 6E 67 +R 00 00 01 00 +T 50 04 00 00 01 FC FF 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 5B 04 00 00 18 1A +R 00 00 01 00 +T 5D 04 00 00 +R 00 00 01 00 +T 5D 04 00 00 21 6E 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T 68 04 00 00 00 77 2B 6E 67 2B 2B 5E 23 56 7A +R 00 00 01 00 +T 73 04 00 00 07 9F 4F 41 +R 00 00 01 00 +T 77 04 00 00 +R 00 00 01 00 +T 77 04 00 00 CD 00 00 00 00 F1 F1 DD 75 B3 DD +R 00 00 01 00 02 05 0A 00 +T 80 04 00 00 74 B4 C3 5E 06 00 00 +R 00 00 01 00 00 07 01 00 +T 85 04 00 00 +R 00 00 01 00 +T 85 04 00 00 DD 36 AC 02 DD 36 AD 00 18 37 +R 00 00 01 00 +T 8F 04 00 00 +R 00 00 01 00 +T 8F 04 00 00 DD 36 AC 08 DD 36 AD 00 18 2D +R 00 00 01 00 +T 99 04 00 00 +R 00 00 01 00 +T 99 04 00 00 AF DD 77 A4 DD 77 A5 DD 36 B0 30 +R 00 00 01 00 +T A4 04 00 00 DD 36 AA 05 DD 36 AB 00 DD 36 A6 +R 00 00 01 00 +T AF 04 00 00 08 DD 36 A7 00 +R 00 00 01 00 +T B4 04 00 00 +R 00 00 01 00 +T B4 04 00 00 DD 36 AC 10 DD 36 AD 00 18 08 +R 00 00 01 00 +T BE 04 00 00 +R 00 00 01 00 +T BE 04 00 00 DD 36 AC F0 DD 36 AD FF +R 00 00 01 00 +T C6 04 00 00 +R 00 00 01 00 +T C6 04 00 00 +R 00 00 01 00 +T C6 04 00 00 DD 7E A4 DD B6 A5 28 1E 21 6A 00 +R 00 00 01 00 +T D1 04 00 00 39 7E C6 04 77 23 7E CE 00 77 2B +R 00 00 01 00 +T DC 04 00 00 6E 67 01 FC FF 09 5E 23 56 23 4E +R 00 00 01 00 +T E7 04 00 00 23 46 EB 18 19 +R 00 00 01 00 +T EC 04 00 00 +R 00 00 01 00 +T EC 04 00 00 21 6A 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T F7 04 00 00 00 77 2B 6E 67 2B 2B 46 23 66 68 +R 00 00 01 00 +T 02 05 00 00 01 00 00 +R 00 00 01 00 +T 05 05 00 00 +R 00 00 01 00 +T 05 05 00 00 DD 75 B7 DD 74 B8 DD 71 B9 DD 70 +R 00 00 01 00 +T 10 05 00 00 BA DD 5E AC DD 56 AD D5 21 1D 00 +R 00 00 01 00 +T 1B 05 00 00 39 01 04 00 09 E5 DD 4E B9 DD 46 +R 00 00 01 00 +T 26 05 00 00 BA DD 5E B7 DD 56 B8 CD +R 00 00 01 00 +T 2E 05 00 00 00 00 00 00 F1 F1 DD 75 B3 DD 74 +R 00 00 01 00 02 04 06 00 +T 37 05 00 00 B4 DD 36 B5 00 00 00 00 DD 36 B6 +R 00 00 01 00 09 08 02 00 +T 3F 05 00 00 00 00 00 00 AF DD B6 B2 CA +R 00 00 01 00 89 04 02 00 +T 45 05 00 00 D6 05 00 00 +R 00 00 01 00 00 04 01 00 +T 47 05 00 00 +R 00 00 01 00 +T 47 05 00 00 3E 02 DD AE AC DD B6 AD 20 0A +R 00 00 01 00 +T 51 05 00 00 +R 00 00 01 00 +T 51 05 00 00 DD 36 B5 01 00 00 00 DD 36 B6 +R 00 00 01 00 09 07 02 00 +T 58 05 00 00 01 00 00 00 18 49 +R 00 00 01 00 89 04 02 00 +T 5B 05 00 00 +R 00 00 01 00 +T 5B 05 00 00 3E 08 DD AE AC DD B6 AD 20 18 +R 00 00 01 00 +T 65 05 00 00 +R 00 00 01 00 +T 65 05 00 00 DD 7E B7 DD B6 B8 DD B6 B9 DD B6 +R 00 00 01 00 +T 70 05 00 00 BA 28 08 +R 00 00 01 00 +T 73 05 00 00 +R 00 00 01 00 +T 73 05 00 00 DD 36 B5 04 00 00 00 DD 36 B6 +R 00 00 01 00 09 07 02 00 +T 7A 05 00 00 04 00 00 00 +R 00 00 01 00 89 04 02 00 +T 7B 05 00 00 +R 00 00 01 00 +T 7B 05 00 00 18 27 +R 00 00 01 00 +T 7D 05 00 00 +R 00 00 01 00 +T 7D 05 00 00 3E 10 DD AE AC DD B6 AD 20 0A +R 00 00 01 00 +T 87 05 00 00 +R 00 00 01 00 +T 87 05 00 00 DD 36 B5 06 00 00 00 DD 36 B6 +R 00 00 01 00 09 07 02 00 +T 8E 05 00 00 06 00 00 00 18 13 +R 00 00 01 00 89 04 02 00 +T 91 05 00 00 +R 00 00 01 00 +T 91 05 00 00 3E 0F DD AE AC DD A6 AD 3C 20 08 +R 00 00 01 00 +T 9C 05 00 00 +R 00 00 01 00 +T 9C 05 00 00 DD 36 B5 09 00 00 00 DD 36 B6 +R 00 00 01 00 09 07 02 00 +T A3 05 00 00 09 00 00 00 +R 00 00 01 00 89 04 02 00 +T A4 05 00 00 +R 00 00 01 00 +T A4 05 00 00 +R 00 00 01 00 +T A4 05 00 00 +R 00 00 01 00 +T A4 05 00 00 +R 00 00 01 00 +T A4 05 00 00 DD 6E B5 DD 66 B6 AF B6 28 28 +R 00 00 01 00 +T AE 05 00 00 +R 00 00 01 00 +T AE 05 00 00 DD 36 B0 00 DD 4E B5 DD 46 B6 21 +R 00 00 01 00 +T B9 05 00 00 1B 00 39 5D 54 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 07 00 +T C2 05 00 00 4E B3 DD 46 B4 21 1B 00 39 5D 54 +R 00 00 01 00 +T CD 05 00 00 CD 00 00 00 00 DD 75 B3 DD 74 B4 +R 00 00 01 00 02 05 02 00 +T D6 05 00 00 +R 00 00 01 00 +T D6 05 00 00 +R 00 00 01 00 +T D6 05 00 00 C3 5E 06 00 00 +R 00 00 01 00 00 05 01 00 +T D9 05 00 00 +R 00 00 01 00 +T D9 05 00 00 DD 6E 08 DD 66 09 23 4E 06 00 DD +R 00 00 01 00 +T E4 05 00 00 71 A0 DD 70 A1 79 B0 28 08 +R 00 00 01 00 +T ED 05 00 00 +R 00 00 01 00 +T ED 05 00 00 DD 34 08 20 03 DD 34 09 +R 00 00 01 00 +T F5 05 00 00 +R 00 00 01 00 +T F5 05 00 00 +R 00 00 01 00 +T F5 05 00 00 18 1C +R 00 00 01 00 +T F7 05 00 00 +R 00 00 01 00 +T F7 05 00 00 21 6A 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T 02 06 00 00 00 77 2B 6E 67 2B 2B 46 23 66 68 +R 00 00 01 00 +T 0D 06 00 00 DD 75 A0 DD 74 A1 +R 00 00 01 00 +T 13 06 00 00 +R 00 00 01 00 +T 13 06 00 00 DD 46 A0 DD 6E B3 DD 66 B4 70 DD +R 00 00 01 00 +T 1E 06 00 00 6E B3 DD 66 B4 23 36 00 AF DD B6 +R 00 00 01 00 +T 29 06 00 00 B2 28 0C +R 00 00 01 00 +T 2C 06 00 00 +R 00 00 01 00 +T 2C 06 00 00 DD 6E B3 DD 66 B4 46 DD 70 B0 18 +R 00 00 01 00 +T 37 06 00 00 22 +R 00 00 01 00 +T 38 06 00 00 +R 00 00 01 00 +T 38 06 00 00 18 1C +R 00 00 01 00 +T 3A 06 00 00 +R 00 00 01 00 +T 3A 06 00 00 21 6A 00 39 7E C6 02 77 23 7E CE +R 00 00 01 00 +T 45 06 00 00 00 77 2B 6E 67 2B 2B 46 23 66 68 +R 00 00 01 00 +T 50 06 00 00 DD 75 B3 DD 74 B4 +R 00 00 01 00 +T 56 06 00 00 +R 00 00 01 00 +T 56 06 00 00 DD 36 B0 20 +R 00 00 01 00 +T 5A 06 00 00 +R 00 00 01 00 +T 5A 06 00 00 DD 36 B1 00 +R 00 00 01 00 +T 5E 06 00 00 +R 00 00 01 00 +T 5E 06 00 00 DD 6E A6 DD 66 A7 E5 DD 6E AA DD +R 00 00 01 00 +T 69 06 00 00 66 AB E5 DD 6E B0 E5 DD 6E B1 E5 +R 00 00 01 00 +T 74 06 00 00 DD 6E A2 DD 66 A3 E5 DD 6E B3 DD +R 00 00 01 00 +T 7F 06 00 00 66 B4 E5 DD 4E 04 DD 46 05 DD 5E +R 00 00 01 00 +T 8A 06 00 00 02 DD 56 03 CD 00 00 00 00 EB 21 +R 00 00 01 00 00 09 01 00 +T 93 06 00 00 0C 00 39 F9 EB 4D 44 21 0E 00 39 +R 00 00 01 00 +T 9E 06 00 00 7E 81 77 23 7E 88 77 18 0E +R 00 00 01 00 +T A7 06 00 00 +R 00 00 01 00 +T A7 06 00 00 DD 6E 08 DD 66 09 DD 75 FD DD 74 +R 00 00 01 00 +T B2 06 00 00 FE 18 0D +R 00 00 01 00 +T B5 06 00 00 +R 00 00 01 00 +T B5 06 00 00 DD 6E 08 DD 66 09 23 DD 75 FD DD +R 00 00 01 00 +T C0 06 00 00 74 FE +R 00 00 01 00 +T C2 06 00 00 +R 00 00 01 00 +T C2 06 00 00 +R 00 00 01 00 +T C2 06 00 00 DD 34 08 20 03 DD 34 09 +R 00 00 01 00 +T CA 06 00 00 +R 00 00 01 00 +T CA 06 00 00 C3 FF 01 00 00 +R 00 00 01 00 00 05 01 00 +T CD 06 00 00 +R 00 00 01 00 +T CD 06 00 00 DD 4E 08 DD 46 09 DD 6E FD DD 66 +R 00 00 01 00 +T D8 06 00 00 FE A7 ED 42 30 35 +R 00 00 01 00 +T DE 06 00 00 +R 00 00 01 00 +T DE 06 00 00 DD 6E 04 DD 66 05 E5 DD 4E FD DD +R 00 00 01 00 +T E9 06 00 00 46 FE DD 6E 08 DD 66 09 A7 ED 42 +R 00 00 01 00 +T F4 06 00 00 4D 44 DD 5E FD DD 56 FE DD 6E 02 +R 00 00 01 00 +T FF 06 00 00 DD 66 03 CD 00 00 00 00 F1 4D 44 +R 00 00 01 00 02 08 08 00 +T 08 07 00 00 21 0E 00 39 7E 81 77 23 7E 88 77 +R 00 00 01 00 +T 13 07 00 00 +R 00 00 01 00 +T 13 07 00 00 DD 6E AE DD 66 AF C3 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 +T 01 00 00 00 +R 00 00 02 00 +T 01 00 00 00 30 62 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 30 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 30 78 00 +R 00 00 02 00 +T 09 00 00 00 +R 00 00 02 00 +T 09 00 00 00 30 58 00 +R 00 00 02 00 diff --git a/src/nos/lib/crt_large_lib/vprintf.rel b/src/nos/lib/crt_large_lib/vprintf.rel new file mode 100644 index 00000000..1a29ad65 --- /dev/null +++ b/src/nos/lib/crt_large_lib/vprintf.rel @@ -0,0 +1,19 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _stdout Ref00000000 +S _vfprintf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S _vprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 4B 42 11 +R 00 00 01 00 02 05 03 00 +T 07 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 04 00 02 09 05 00 +T 0E 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_large_lib/vscanf.rel b/src/nos/lib/crt_large_lib/vscanf.rel new file mode 100644 index 00000000..09a93972 --- /dev/null +++ b/src/nos/lib/crt_large_lib/vscanf.rel @@ -0,0 +1,19 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _stdin Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _vfscanf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S _vscanf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 4B 42 11 +R 00 00 01 00 02 05 04 00 +T 07 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 03 00 02 09 05 00 +T 0E 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_large_lib/vsprintf.rel b/src/nos/lib/crt_large_lib/vsprintf.rel new file mode 100644 index 00000000..793fa157 --- /dev/null +++ b/src/nos/lib/crt_large_lib/vsprintf.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 7 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ___sputter Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___vprinter Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S _vsprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 08 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 09 E5 C5 21 08 00 39 4D 44 11 +R 00 00 01 00 +T 14 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 05 00 +T 1B 00 00 00 DD 75 FE DD 74 FF DD 6E 02 DD 66 +R 00 00 01 00 +T 26 00 00 00 03 36 00 DD 6E FE DD 66 FF C3 +R 00 00 01 00 +T 30 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/crt_large_lib/vsscanf.rel b/src/nos/lib/crt_large_lib/vsscanf.rel new file mode 100644 index 00000000..b1320c97 --- /dev/null +++ b/src/nos/lib/crt_large_lib/vsscanf.rel @@ -0,0 +1,32 @@ +XL4 +H 4 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _vfscanf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S _vsscanf Def00000000 +A IDATA0 size 18 flags 0 +A CDATA0 size 18 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 ED 53 00 00 00 00 +R 00 00 01 00 02 05 03 00 00 0B 02 00 +T 07 00 00 00 DD 6E 08 DD 66 09 E5 11 +R 00 00 01 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 00 04 02 00 02 09 04 00 +T 16 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 FF FF 00 00 00 00 FF FF +R 00 00 03 00 +T 0A 00 00 00 FF FF 10 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 15 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/crt_large_lib/xitoa.rel b/src/nos/lib/crt_large_lib/xitoa.rel new file mode 100644 index 00000000..fc21c1e2 --- /dev/null +++ b/src/nos/lib/crt_large_lib/xitoa.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 6 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ltostr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S __itoa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0A 00 E5 7A 07 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 9F 4F 41 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 08 04 00 +T 11 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/crt_large_lib/xltoa.rel b/src/nos/lib/crt_large_lib/xltoa.rel new file mode 100644 index 00000000..9eb5214b --- /dev/null +++ b/src/nos/lib/crt_large_lib/xltoa.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 8 global symbols +S ?CL64180L_4_06_L00 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _ultostr Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ltostr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1C flags 0 +S __ultoa Def00000000 +S __ltoa Def0000000E +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0A 00 E5 CD +R 00 00 01 00 02 05 04 00 +T 08 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 0A 01 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 CD 00 00 00 00 21 0A 00 E5 CD +R 00 00 01 00 02 05 04 00 +T 16 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 0A 01 00 diff --git a/src/nos/lib/dump.lib b/src/nos/lib/dump.lib new file mode 100644 index 00000000..ac9a672f --- /dev/null +++ b/src/nos/lib/dump.lib @@ -0,0 +1,20 @@ +dump_lib/icmpdump.rel + _icmp_dump +dump_lib/ipdump.rel + _ipip_dump + _dumpip + _ip_dump + _ipldump +dump_lib/tcpdump.rel + _tcp_dump +dump_lib/trace.rel + _tprintf + _shuttrace + _hex_dump + _raw_dump + _dotrace + _trace_log + _dump + _Tracecmd +dump_lib/udpdump.rel + _udp_dump diff --git a/src/nos/lib/dump_lib/icmpdump.rel b/src/nos/lib/dump_lib/icmpdump.rel new file mode 100644 index 00000000..e24760b4 --- /dev/null +++ b/src/nos/lib/dump_lib/icmpdump.rel @@ -0,0 +1,253 @@ +XL4 +H 2 areas 1B global symbols +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___00c4_2537__20new_20gateway_20 Ref00000000 +S _Unreach Ref00000000 +S ___00d6_ac0a__20pointer_20_25u Ref00000000 +S _Said_icmp Ref00000000 +S ___0076_269f__20_25s Ref00000000 +S _len_p Ref00000000 +S _Exceed Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___00b4_1813__20code_20_25s Ref00000000 +S ___00bf_20f7__20id_20_25u_20seq_ Ref00000000 +S __fprintf Ref00000000 +S ___008c_d667__20CHECKSUM_20ERROR Ref00000000 +S .__.ABS. Def00000000 +S _ntohicmp Ref00000000 +S _fputc Ref00000000 +S _cksum Ref00000000 +S ___036a_0cd3_Returned_20 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _ip_dump Ref00000000 +S ___028e_6b85_ICMP_3a_20type_20_2 Ref00000000 +S _Redirect Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _smsg Ref00000000 +S _Icmptypes Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 283 flags 0 +S _icmp_dump Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 79 B0 28 0B +R 00 00 01 00 02 05 13 00 +T 09 00 00 00 DD 6E 04 DD 66 05 7E 23 B6 20 03 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 C3 80 02 00 00 +R 00 00 01 00 00 05 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T 21 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 26 00 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 01 00 +T 2F 00 00 00 4E 23 46 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 37 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 11 00 02 0A 01 00 +T 3E 00 00 00 DD 75 FE DD 74 FF DD 4E 04 DD 46 +R 00 00 01 00 +T 49 00 00 00 05 21 00 00 39 5D 54 3E +R 00 00 01 00 +T 51 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 56 00 00 00 00 00 00 00 DD 4E F8 06 00 C5 01 +R 00 00 01 00 02 04 01 00 +T 5F 00 00 00 14 00 11 00 00 00 00 3E +R 00 00 01 00 02 07 19 00 +T 65 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T 6A 00 00 00 00 00 00 00 F1 E5 0E 00 00 00 00 +R 00 00 01 00 02 04 01 00 2B 0B 15 00 +T 70 00 00 00 C5 21 00 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 02 06 15 00 +T 79 00 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T 7F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 86 00 00 00 F1 F1 DD 7E F8 FE 03 20 33 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 4E F9 06 00 C5 01 0E 00 11 +R 00 00 01 00 +T 99 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 2B 09 18 00 +T 9E 00 00 00 00 00 00 00 CD 00 00 00 00 F1 E5 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T A5 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T AB 00 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T B4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T B9 00 00 00 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T C0 00 00 00 F5 01 00 00 +R 00 00 01 00 00 04 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 FE 05 20 61 DD 4E F9 06 00 C5 01 +R 00 00 01 00 +T CD 00 00 00 03 00 11 00 00 00 00 3E +R 00 00 01 00 02 07 16 00 +T D3 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T D8 00 00 00 00 00 00 00 F1 E5 0E 00 00 00 00 +R 00 00 01 00 02 04 01 00 2B 0B 0A 00 +T DE 00 00 00 C5 21 00 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 02 06 0A 00 +T E7 00 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T ED 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T F4 00 00 00 F1 F1 21 02 00 39 5E 23 56 23 4E +R 00 00 01 00 +T FF 00 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T 04 01 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 0B 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 02 00 02 0A 02 00 +T 11 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 19 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 1E 01 00 00 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T 25 01 00 00 F5 01 00 00 +R 00 00 01 00 00 04 01 00 +T 27 01 00 00 +R 00 00 01 00 +T 27 01 00 00 FE 0B 20 33 DD 4E F9 06 00 C5 01 +R 00 00 01 00 +T 32 01 00 00 02 00 11 00 00 00 00 3E +R 00 00 01 00 02 07 08 00 +T 38 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T 3D 01 00 00 00 00 00 00 F1 E5 0E 00 00 00 00 +R 00 00 01 00 02 04 01 00 2B 0B 0A 00 +T 43 01 00 00 C5 21 00 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 02 06 0A 00 +T 4C 01 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T 52 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 59 01 00 00 F1 F1 C3 F5 01 00 00 +R 00 00 01 00 00 07 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 FE 0C 20 22 DD 4E FA 06 00 C5 0E +R 00 00 01 00 +T 69 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 04 00 02 0A 04 00 +T 6F 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 77 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 7C 01 00 00 00 00 00 00 F1 F1 F1 F1 18 71 +R 00 00 01 00 02 04 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 FE 00 28 0C FE 08 28 08 FE 0D 38 +R 00 00 01 00 +T 8F 01 00 00 2F FE 11 30 2B +R 00 00 01 00 +T 94 01 00 00 +R 00 00 01 00 +T 94 01 00 00 DD 6E FC DD 66 FD E5 DD 6E FA DD +R 00 00 01 00 +T 9F 01 00 00 66 FB E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0B 00 +T A6 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 0B 00 +T AF 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T B5 01 00 00 CD 00 00 00 00 F1 F1 F1 F1 F1 18 +R 00 00 01 00 02 05 01 00 +T BE 01 00 00 36 +R 00 00 01 00 +T BF 01 00 00 +R 00 00 01 00 +T BF 01 00 00 FE 13 20 32 DD 4E F9 06 00 C5 01 +R 00 00 01 00 +T CA 01 00 00 03 00 11 00 00 00 00 3E +R 00 00 01 00 02 07 05 00 +T D0 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T D5 01 00 00 00 00 00 00 F1 E5 0E 00 00 00 00 +R 00 00 01 00 02 04 01 00 2B 0B 06 00 +T DB 01 00 00 C5 21 00 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 02 06 06 00 +T E4 01 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T EA 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T F1 01 00 00 F1 F1 18 00 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 DD 7E 12 DD B6 13 28 29 DD 7E FE +R 00 00 01 00 +T 00 02 00 00 DD B6 FF 28 21 +R 00 00 01 00 +T 05 02 00 00 +R 00 00 01 00 +T 05 02 00 00 +R 00 00 01 00 +T 05 02 00 00 +R 00 00 01 00 +T 05 02 00 00 DD 6E FE DD 66 FF E5 0E +R 00 00 01 00 +T 0D 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0D 00 02 0A 0D 00 +T 13 02 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 1B 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 20 02 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 26 02 00 00 +R 00 00 01 00 +T 26 02 00 00 DD 4E 02 DD 46 03 11 0A 00 3E +R 00 00 01 00 +T 30 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 35 02 00 00 00 00 00 00 DD 7E F8 FE 03 38 42 +R 00 00 01 00 02 04 01 00 +T 3E 02 00 00 FE 06 38 0C FE 0B 38 3A FE 0D 38 +R 00 00 01 00 +T 49 02 00 00 04 FE 13 20 32 +R 00 00 01 00 +T 4E 02 00 00 +R 00 00 01 00 +T 4E 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 12 00 02 0B 12 00 +T 54 02 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 5D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 62 02 00 00 00 00 00 00 F1 F1 F1 21 00 00 E5 +R 00 00 01 00 02 04 01 00 +T 6B 02 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 76 02 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 14 00 02 0B 14 00 +T 7C 02 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 01 00 +T 80 02 00 00 +R 00 00 01 00 +T 80 02 00 00 +R 00 00 01 00 +T 80 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 09 00 diff --git a/src/nos/lib/dump_lib/ipdump.rel b/src/nos/lib/dump_lib/ipdump.rel new file mode 100644 index 00000000..355b11a2 --- /dev/null +++ b/src/nos/lib/dump_lib/ipdump.rel @@ -0,0 +1,468 @@ +XL4 +H 2 areas 26 global symbols +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _trim_mbuf Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S ___0076_269f__20_25s Ref00000000 +S ___0097_eb24__20MF Ref00000000 +S _len_p Ref00000000 +S _ntohip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___00df_0bfc__20tos_20_25u Ref00000000 +S _dup_p Ref00000000 +S __fprintf Ref00000000 +S ___04ac_289f_ip_5fsend_0a Ref00000000 +S ___00dd_c067__20spi_20_25lx Ref00000000 +S .__.ABS. Def00000000 +S _fputc Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _cksum Ref00000000 +S ___0296_4543_IP_3a_20len_20_25u Ref00000000 +S _Iplink Ref00000000 +S ___00bd_3119__20id_20_25u_20offs Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ___008b_43af__20CE Ref00000000 +S ___008e_3c3c__20DF Ref00000000 +S _free_p Ref00000000 +S ___0294_88e0_IP_3a_20CHECKSUM_20 Ref00000000 +S ___04ab_d229_ip_5frecv_28_25s_29 Ref00000000 +S ___0295_03a7_IP_3a_20bad_20heade Ref00000000 +S ___0190_589d__2d_3e_25s_20ihl_20 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___00d8_0187__20prot_20_25u_0a Ref00000000 +S ___00d7_5557__20prot_20_25s_0a Ref00000000 +S _Command Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 52F flags 0 +S _ipip_dump Def000000DF +S _dumpip Def00000400 +S _ip_dump Def00000000 +S _ipldump Def000000F5 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 BC FF 79 B0 28 0B +R 00 00 01 00 02 05 15 00 +T 09 00 00 00 DD 6E 04 DD 66 05 7E 23 B6 20 03 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 C3 DC 00 00 00 +R 00 00 01 00 00 05 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 22 00 00 00 0A 00 09 7E 23 66 6F 7E E6 0F 6F +R 00 00 01 00 +T 2D 00 00 00 26 00 29 29 DD 75 FB DD 74 FC 01 +R 00 00 01 00 +T 38 00 00 00 14 00 A7 ED 42 30 1C +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1C 00 02 0B 1C 00 +T 45 00 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 4E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 53 00 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T 59 00 00 00 DC 00 00 00 +R 00 00 01 00 00 04 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 DD 7E 0A DD B6 0B 28 41 DD 6E FB +R 00 00 01 00 +T 66 00 00 00 DD 66 FC E5 DD 6E 04 DD 66 05 4E +R 00 00 01 00 +T 71 00 00 00 23 46 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 11 00 +T 79 00 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 11 00 02 09 01 00 +T 80 00 00 00 B4 28 21 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 DD 6E FD DD 66 FE E5 0E +R 00 00 01 00 +T 8B 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 1A 00 02 0A 1A 00 +T 91 00 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 99 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 9E 00 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 DD 4E 04 DD 46 05 21 00 00 39 5D +R 00 00 01 00 +T AF 00 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T B5 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 01 00 +T BE 00 00 00 E5 DD 6E 04 DD 66 05 E5 21 04 00 +R 00 00 01 00 +T C9 00 00 00 39 4D 44 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T D3 00 00 00 F5 00 00 00 21 F5 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T D8 00 00 00 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T DF 00 00 00 +R 00 00 01 00 +T DF 00 00 00 CD 00 00 00 00 DD 6E 12 DD 66 13 +R 00 00 01 00 02 05 10 00 +T E8 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T EE 00 00 00 CD 00 00 00 00 E1 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0B 08 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 CD 00 00 00 00 FC FF 21 16 00 09 +R 00 00 01 00 02 05 15 00 +T FE 00 00 00 5E 16 00 21 14 00 19 EB 21 08 00 +R 00 00 01 00 +T 09 01 00 00 09 7E 23 66 6F A7 ED 52 DD 75 FC +R 00 00 01 00 +T 14 01 00 00 DD 74 FD 4D 44 DD 5E 0A DD 56 0B +R 00 00 01 00 +T 1F 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 25 01 00 00 00 00 00 00 21 08 00 DD 4E 04 DD +R 00 00 01 00 02 04 01 00 +T 2E 01 00 00 46 05 09 5E 23 56 D5 1E +R 00 00 01 00 +T 36 01 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 12 00 02 0A 12 00 +T 3C 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 44 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 49 01 00 00 00 00 00 00 F1 F1 F1 F1 69 60 5E +R 00 00 01 00 02 04 01 00 +T 52 01 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 5A 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 61 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 04 00 02 0B 04 00 +T 67 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 70 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 75 01 00 00 00 00 00 00 F1 F1 F1 F1 21 14 00 +R 00 00 01 00 02 04 01 00 +T 7E 01 00 00 DD 4E 04 DD 46 05 09 5E 16 00 D5 +R 00 00 01 00 +T 89 01 00 00 21 16 00 09 5E 16 00 21 14 00 19 +R 00 00 01 00 +T 94 01 00 00 E5 21 04 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 9F 01 00 00 46 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T A5 01 00 00 CD 00 00 00 00 E5 0E 00 00 00 00 +R 00 00 01 00 02 05 01 00 2B 0B 1D 00 +T AB 01 00 00 C5 21 00 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 02 06 1D 00 +T B4 01 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0B 00 +T BA 01 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0B 00 02 09 01 00 +T C1 01 00 00 0C 00 39 F9 EB 21 13 00 DD 4E 04 +R 00 00 01 00 +T CC 01 00 00 DD 46 05 09 7E B7 28 28 +R 00 00 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 21 13 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T DF 01 00 00 06 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 09 00 +T E6 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 09 00 +T EF 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T F5 01 00 00 CD 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 05 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 21 0C 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 07 02 00 00 23 B6 20 15 21 10 00 DD 4E 04 DD +R 00 00 01 00 +T 12 02 00 00 46 05 09 7E E6 04 47 23 7E E6 00 +R 00 00 01 00 +T 1D 02 00 00 B0 28 31 +R 00 00 01 00 +T 20 02 00 00 +R 00 00 01 00 +T 20 02 00 00 +R 00 00 01 00 +T 20 02 00 00 +R 00 00 01 00 +T 20 02 00 00 21 0C 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 2B 02 00 00 23 56 D5 21 0A 00 09 4E 23 46 C5 +R 00 00 01 00 +T 36 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 14 00 02 0B 14 00 +T 3C 02 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 45 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4A 02 00 00 00 00 00 00 F1 F1 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 51 02 00 00 +R 00 00 01 00 +T 51 02 00 00 21 10 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 5C 02 00 00 E6 02 47 23 7E E6 00 B0 28 19 +R 00 00 01 00 +T 66 02 00 00 +R 00 00 01 00 +T 66 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 18 00 02 0B 18 00 +T 6C 02 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 75 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 7A 02 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 7F 02 00 00 +R 00 00 01 00 +T 7F 02 00 00 21 10 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 8A 02 00 00 E6 04 47 23 7E E6 00 B0 28 20 +R 00 00 01 00 +T 94 02 00 00 +R 00 00 01 00 +T 94 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T 9A 02 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T A3 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T A8 02 00 00 00 00 00 00 F1 F1 F1 AF DD 77 0C +R 00 00 01 00 02 04 01 00 +T B1 02 00 00 DD 77 0D +R 00 00 01 00 +T B4 02 00 00 +R 00 00 01 00 +T B4 02 00 00 21 10 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T BF 02 00 00 E6 01 47 23 7E E6 00 B0 28 19 +R 00 00 01 00 +T C9 02 00 00 +R 00 00 01 00 +T C9 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 17 00 02 0B 17 00 +T CF 02 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T D8 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T DD 02 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T E2 02 00 00 +R 00 00 01 00 +T E2 02 00 00 21 0C 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T ED 02 00 00 23 B6 28 14 +R 00 00 01 00 +T F1 02 00 00 +R 00 00 01 00 +T F1 02 00 00 DD 4E 02 DD 46 03 11 0A 00 3E +R 00 00 01 00 +T FB 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 00 03 00 00 00 00 00 00 C3 FD 03 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T 05 03 00 00 +R 00 00 01 00 +T 05 03 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 01 09 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 16 03 00 00 00 00 00 00 21 00 00 00 00 19 7E +R 00 00 01 00 02 04 16 00 02 09 13 00 +T 1D 03 00 00 B7 CA D5 03 00 00 +R 00 00 01 00 00 06 01 00 +T 21 03 00 00 +R 00 00 01 00 +T 21 03 00 00 21 15 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T 2C 03 00 00 01 09 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 36 03 00 00 00 00 00 00 21 00 00 00 00 19 7E +R 00 00 01 00 02 04 16 00 02 09 13 00 +T 3D 03 00 00 E1 BE C2 CA 03 00 00 +R 00 00 01 00 00 07 01 00 +T 42 03 00 00 +R 00 00 01 00 +T 42 03 00 00 01 09 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 4C 03 00 00 00 00 00 00 21 01 00 00 00 19 4E +R 00 00 01 00 02 04 16 00 02 09 13 00 +T 53 03 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 20 00 +T 5A 03 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 20 00 +T 63 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 69 03 00 00 CD 00 00 00 00 F1 F1 F1 F1 DD 6E +R 00 00 01 00 02 05 01 00 +T 72 03 00 00 0C DD 66 0D E5 21 04 00 DD 4E 04 +R 00 00 01 00 +T 7D 03 00 00 DD 46 05 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 88 03 00 00 C5 D5 DD 6E 04 DD 66 05 4E 23 46 +R 00 00 01 00 +T 93 03 00 00 23 5E 23 56 D5 C5 DD 4E 0A DD 46 +R 00 00 01 00 +T 9E 03 00 00 0B C5 DD 5E 02 DD 56 03 D5 01 +R 00 00 01 00 +T A8 03 00 00 09 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T B1 03 00 00 00 00 00 00 21 06 00 00 00 19 4E +R 00 00 01 00 02 04 16 00 02 09 13 00 +T B8 03 00 00 23 46 23 7E 69 60 D1 C1 CD +R 00 00 01 00 +T C1 03 00 00 00 00 00 00 E1 E1 E1 E1 E1 18 33 +R 00 00 01 00 02 04 01 00 +T CA 03 00 00 +R 00 00 01 00 +T CA 03 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T D2 03 00 00 +R 00 00 01 00 +T D2 03 00 00 C3 0C 03 00 00 +R 00 00 01 00 00 05 01 00 +T D5 03 00 00 +R 00 00 01 00 +T D5 03 00 00 21 15 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T E0 03 00 00 06 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 1F 00 +T E7 03 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 1F 00 +T F0 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T F6 03 00 00 CD 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 05 01 00 +T FD 03 00 00 +R 00 00 01 00 +T FD 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 00 04 00 00 +R 00 00 01 00 +T 00 04 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 15 00 +T 09 04 00 00 B6 03 CA 95 04 00 00 +R 00 00 01 00 00 07 01 00 +T 0E 04 00 00 +R 00 00 01 00 +T 0E 04 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 19 04 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 1B 00 +T 1E 04 00 00 00 00 00 00 E5 21 1B 00 ED 4B +R 00 00 01 00 02 04 1B 00 +T 26 04 00 00 00 00 00 00 09 4E 23 46 C5 3E +R 00 00 01 00 02 04 21 00 +T 2E 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 33 04 00 00 00 00 00 00 F1 F1 F1 F1 DD 7E 0C +R 00 00 01 00 02 04 01 00 +T 3C 04 00 00 DD B6 0D DD B6 0E DD B6 0F 28 2E +R 00 00 01 00 +T 47 04 00 00 +R 00 00 01 00 +T 47 04 00 00 DD 6E 0E DD 66 0F E5 DD 6E 0C DD +R 00 00 01 00 +T 52 04 00 00 66 0D E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0D 00 +T 59 04 00 00 00 00 00 00 E5 21 1B 00 ED 4B +R 00 00 01 00 02 04 0D 00 +T 61 04 00 00 00 00 00 00 09 4E 23 46 C5 3E +R 00 00 01 00 02 04 21 00 +T 69 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 6E 04 00 00 00 00 00 00 F1 F1 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 75 04 00 00 +R 00 00 01 00 +T 75 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 7B 04 00 00 E5 21 1B 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 21 00 +T 84 04 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 8B 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0B 00 02 09 01 00 +T 92 04 00 00 F1 18 1E +R 00 00 01 00 +T 95 04 00 00 +R 00 00 01 00 +T 95 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0C 00 02 0B 0C 00 +T 9B 04 00 00 E5 21 1B 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 21 00 +T A4 04 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T AB 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0B 00 02 09 01 00 +T B2 04 00 00 F1 +R 00 00 01 00 +T B3 04 00 00 +R 00 00 01 00 +T B3 04 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T BB 04 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T C2 04 00 00 21 00 00 E5 DD 4E 0A DD 46 0B 21 +R 00 00 01 00 +T CD 04 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T D5 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T DC 04 00 00 21 01 00 E5 21 02 00 39 E5 DD 4E +R 00 00 01 00 +T E7 04 00 00 04 DD 46 05 21 1B 00 ED 5B +R 00 00 01 00 +T F0 04 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 21 00 +T F7 04 00 00 F5 00 00 00 21 F5 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T FC 04 00 00 00 00 00 00 E1 E1 21 00 00 39 5D +R 00 00 01 00 02 04 01 00 +T 05 05 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 19 00 02 0B 19 00 +T 0B 05 00 00 CD 00 00 00 00 0E 00 00 00 00 C5 +R 00 00 01 00 02 05 01 00 2B 0A 03 00 +T 11 05 00 00 21 00 00 00 00 E5 21 1B 00 ED 4B +R 00 00 01 00 02 05 03 00 +T 1A 05 00 00 00 00 00 00 09 4E 23 46 C5 3E +R 00 00 01 00 02 04 21 00 +T 22 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 27 05 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T 2D 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 08 00 diff --git a/src/nos/lib/dump_lib/tcpdump.rel b/src/nos/lib/dump_lib/tcpdump.rel new file mode 100644 index 00000000..d9d5e477 --- /dev/null +++ b/src/nos/lib/dump_lib/tcpdump.rel @@ -0,0 +1,410 @@ +XL4 +H 5 areas 15 global symbols +S _ntohtcp Ref00000000 +S ___00ab_1d25__20Wnd_20_25u Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0076_269f__20_25s Ref00000000 +S _len_p Ref00000000 +S ___00a6_5a85__20UP_20x_25x Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S ___008c_d667__20CHECKSUM_20ERROR Ref00000000 +S .__.ABS. Def00000000 +S ___00a3_2dcc__20TSTAMP_20_25lu_2 Ref00000000 +S ___0099_c5ed__20MSS_20_25u Ref00000000 +S ___00aa_a984__20WSCALE_20_25u Ref00000000 +S _fputc Ref00000000 +S _cksum Ref00000000 +S ___0089_2da0__20Ack_20x_25lx Ref00000000 +S ___0398_7267_TCP_3a_20_25u_2d_3e Ref00000000 +S ___008f_26b0__20Data_20_25u Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3D7 flags 0 +S _tcp_dump Def00000000 +A CSTR size 1B flags 0 +A IDATA0 size E flags 0 +A CDATA0 size E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D2 FF 79 B0 28 0B +R 00 00 01 00 02 05 12 00 +T 09 00 00 00 DD 6E 04 DD 66 05 7E 23 B6 20 03 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 C3 D4 03 00 00 +R 00 00 01 00 00 05 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 4E 0C DD 46 0D DD 6E 0A DD 66 +R 00 00 01 00 +T 22 00 00 00 0B DD 75 F1 DD 74 F2 DD 71 F3 DD +R 00 00 01 00 +T 2D 00 00 00 70 F4 DD 4E 10 DD 46 11 DD 6E 0E +R 00 00 01 00 +T 38 00 00 00 DD 66 0F DD 75 F5 DD 74 F6 DD 71 +R 00 00 01 00 +T 43 00 00 00 F7 DD 70 F8 DD 36 F9 06 DD 6E 04 +R 00 00 01 00 +T 4E 00 00 00 DD 66 05 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 56 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 02 00 +T 5D 00 00 00 75 FA DD 74 FB DD 6E FA DD 66 FB +R 00 00 01 00 +T 68 00 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 21 +R 00 00 01 00 +T 73 00 00 00 21 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T 7B 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0E 00 02 09 02 00 +T 82 00 00 00 75 FC DD 74 FD DD 4E 04 DD 46 05 +R 00 00 01 00 +T 8D 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 95 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 00 00 02 0A 02 00 +T 9C 00 00 00 6E DC DD 66 DD E5 DD 6E DA DD 66 +R 00 00 01 00 +T A7 00 00 00 DB E5 DD 6E D8 DD 66 D9 E5 DD 6E +R 00 00 01 00 +T B2 00 00 00 D6 DD 66 D7 E5 DD 6E D4 DD 66 D5 +R 00 00 01 00 +T BD 00 00 00 E5 DD 6E D2 DD 66 D3 E5 0E +R 00 00 01 00 +T C6 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 10 00 02 0A 10 00 +T CC 00 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T D4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T D9 00 00 00 00 00 00 00 EB 21 12 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T E2 00 00 00 DD 7E EF E6 04 47 DD 7E F0 E6 00 +R 00 00 01 00 +T ED 00 00 00 B0 28 29 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 6E DC DD 66 DD E5 DD 6E DA DD +R 00 00 01 00 +T FB 00 00 00 66 DB E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0F 00 +T 02 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 0F 00 +T 0B 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 11 01 00 00 CD 00 00 00 00 F1 F1 F1 F1 F1 +R 00 00 01 00 02 05 02 00 +T 19 01 00 00 +R 00 00 01 00 +T 19 01 00 00 DD 7E EF E6 01 47 DD 7E F0 E6 00 +R 00 00 01 00 +T 24 01 00 00 B0 28 21 +R 00 00 01 00 +T 27 01 00 00 +R 00 00 01 00 +T 27 01 00 00 21 0C 00 00 00 4E 23 46 C5 0E +R 00 00 01 00 00 05 03 00 +T 2F 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T 35 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 3D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 42 01 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 DD 7E EF E6 02 47 DD 7E F0 E6 00 +R 00 00 01 00 +T 53 01 00 00 B0 28 21 +R 00 00 01 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 21 0A 00 00 00 4E 23 46 C5 0E +R 00 00 01 00 00 05 03 00 +T 5E 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T 64 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 6C 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 71 01 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T 77 01 00 00 +R 00 00 01 00 +T 77 01 00 00 DD 7E EF E6 04 47 DD 7E F0 E6 00 +R 00 00 01 00 +T 82 01 00 00 B0 28 21 +R 00 00 01 00 +T 85 01 00 00 +R 00 00 01 00 +T 85 01 00 00 21 08 00 00 00 4E 23 46 C5 0E +R 00 00 01 00 00 05 03 00 +T 8D 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T 93 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 9B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T A0 01 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 DD 7E EF E6 08 47 DD 7E F0 E6 00 +R 00 00 01 00 +T B1 01 00 00 B0 28 21 +R 00 00 01 00 +T B4 01 00 00 +R 00 00 01 00 +T B4 01 00 00 21 06 00 00 00 4E 23 46 C5 0E +R 00 00 01 00 00 05 03 00 +T BC 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T C2 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T CA 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T CF 01 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T D5 01 00 00 +R 00 00 01 00 +T D5 01 00 00 DD 7E EF E6 10 47 DD 7E F0 E6 00 +R 00 00 01 00 +T E0 01 00 00 B0 28 21 +R 00 00 01 00 +T E3 01 00 00 +R 00 00 01 00 +T E3 01 00 00 21 04 00 00 00 4E 23 46 C5 0E +R 00 00 01 00 00 05 03 00 +T EB 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T F1 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T F9 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T FE 01 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 DD 7E EF E6 20 47 DD 7E F0 E6 00 +R 00 00 01 00 +T 0F 02 00 00 B0 28 21 +R 00 00 01 00 +T 12 02 00 00 +R 00 00 01 00 +T 12 02 00 00 21 02 00 00 00 4E 23 46 C5 0E +R 00 00 01 00 00 05 03 00 +T 1A 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T 20 02 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 28 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 2D 02 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T 33 02 00 00 +R 00 00 01 00 +T 33 02 00 00 DD 7E EF E6 40 47 DD 7E F0 E6 00 +R 00 00 01 00 +T 3E 02 00 00 B0 28 21 +R 00 00 01 00 +T 41 02 00 00 +R 00 00 01 00 +T 41 02 00 00 21 00 00 00 00 4E 23 46 C5 0E +R 00 00 01 00 00 05 03 00 +T 49 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T 4F 02 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 57 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 5C 02 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T 62 02 00 00 +R 00 00 01 00 +T 62 02 00 00 DD 6E DE DD 66 DF E5 0E +R 00 00 01 00 +T 6A 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 01 00 02 0A 01 00 +T 70 02 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 78 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 7D 02 00 00 00 00 00 00 F1 F1 F1 F1 DD 7E EF +R 00 00 01 00 02 04 02 00 +T 86 02 00 00 E6 02 47 DD 7E F0 E6 00 B0 28 21 +R 00 00 01 00 +T 91 02 00 00 +R 00 00 01 00 +T 91 02 00 00 DD 6E E2 DD 66 E3 E5 0E +R 00 00 01 00 +T 99 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T 9F 02 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T A7 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T AC 02 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T B2 02 00 00 +R 00 00 01 00 +T B2 02 00 00 DD 7E EF E6 80 47 DD 7E F0 E6 00 +R 00 00 01 00 +T BD 02 00 00 B0 28 21 +R 00 00 01 00 +T C0 02 00 00 +R 00 00 01 00 +T C0 02 00 00 DD 6E E4 DD 66 E5 E5 0E +R 00 00 01 00 +T C8 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0B 00 02 0A 0B 00 +T CE 02 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T D6 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T DB 02 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T E1 02 00 00 +R 00 00 01 00 +T E1 02 00 00 DD 7E EF E6 00 47 DD 7E F0 E6 01 +R 00 00 01 00 +T EC 02 00 00 B0 28 20 +R 00 00 01 00 +T EF 02 00 00 +R 00 00 01 00 +T EF 02 00 00 DD 4E E6 06 00 C5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T F7 02 00 00 C5 21 00 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 02 06 0C 00 +T 00 03 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 06 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 02 00 +T 0D 03 00 00 F1 F1 +R 00 00 01 00 +T 0F 03 00 00 +R 00 00 01 00 +T 0F 03 00 00 DD 7E EF E6 00 47 DD 7E F0 E6 02 +R 00 00 01 00 +T 1A 03 00 00 B0 28 39 +R 00 00 01 00 +T 1D 03 00 00 +R 00 00 01 00 +T 1D 03 00 00 DD 6E ED DD 66 EE E5 DD 6E EB DD +R 00 00 01 00 +T 28 03 00 00 66 EC E5 DD 6E E9 DD 66 EA E5 DD +R 00 00 01 00 +T 33 03 00 00 6E E7 DD 66 E8 E5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 3B 03 00 00 C5 21 00 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 02 06 0A 00 +T 44 03 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 4A 03 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 07 00 02 09 02 00 +T 51 03 00 00 0E 00 39 F9 EB +R 00 00 01 00 +T 56 03 00 00 +R 00 00 01 00 +T 56 03 00 00 DD 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T 60 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 65 03 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 02 00 +T 6E 03 00 00 B4 28 21 +R 00 00 01 00 +T 71 03 00 00 +R 00 00 01 00 +T 71 03 00 00 DD 6E FE DD 66 FF E5 0E +R 00 00 01 00 +T 79 03 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 11 00 02 0A 11 00 +T 7F 03 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 87 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 8C 03 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T 92 03 00 00 +R 00 00 01 00 +T 92 03 00 00 DD 7E 12 DD B6 13 28 29 DD 7E FC +R 00 00 01 00 +T 9D 03 00 00 DD B6 FD 28 21 +R 00 00 01 00 +T A2 03 00 00 +R 00 00 01 00 +T A2 03 00 00 +R 00 00 01 00 +T A2 03 00 00 +R 00 00 01 00 +T A2 03 00 00 DD 6E FC DD 66 FD E5 0E +R 00 00 01 00 +T AA 03 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 08 00 02 0A 08 00 +T B0 03 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T B8 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T BD 03 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T C3 03 00 00 +R 00 00 01 00 +T C3 03 00 00 DD 4E 02 DD 46 03 11 0A 00 3E +R 00 00 01 00 +T CD 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T D2 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T D4 03 00 00 +R 00 00 01 00 +T D4 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 46 49 4E 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 53 59 4E 00 +R 00 00 02 00 +T 08 00 00 00 +R 00 00 02 00 +T 08 00 00 00 52 53 54 00 +R 00 00 02 00 +T 0C 00 00 00 +R 00 00 02 00 +T 0C 00 00 00 50 53 48 00 +R 00 00 02 00 +T 10 00 00 00 +R 00 00 02 00 +T 10 00 00 00 41 43 4B 00 +R 00 00 02 00 +T 14 00 00 00 +R 00 00 02 00 +T 14 00 00 00 55 52 47 00 +R 00 00 02 00 +T 18 00 00 00 +R 00 00 02 00 +T 18 00 00 00 43 45 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 04 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 04 00 00 00 08 00 00 00 0C 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 08 00 00 00 10 00 00 00 14 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0C 00 00 00 18 00 00 00 +R 00 00 04 00 00 04 02 00 diff --git a/src/nos/lib/dump_lib/trace.rel b/src/nos/lib/dump_lib/trace.rel new file mode 100644 index 00000000..832b22ac --- /dev/null +++ b/src/nos/lib/dump_lib/trace.rel @@ -0,0 +1,1264 @@ +XL4 +H 5 areas 41 global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___00cd_8a3d__20output Ref00000000 +S _strncmp Ref00000000 +S _if_lookup Ref00000000 +S ___0087_ace7__20_2d_20no_20broad Ref00000000 +S _fgetc Ref00000000 +S ___02a9_6e91_Interface_20_25s_20 Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S _rip Ref00000000 +S _memset Ref00000000 +S _Ifaces Ref00000000 +S _newsession Ref00000000 +S _len_p Ref00000000 +S ___0080_3f71__20_28ASCII_20dump_ Ref00000000 +S _fwrite Ref00000000 +S _ctime Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _dup_p Ref00000000 +S __fprintf Ref00000000 +S ___013f_b8b7__25s_20_2d_20 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___009e_78a4__20Raw_20output Ref00000000 +S ___0025_da94__0a_25s_20_2d_20_25 Ref00000000 +S ___0474_7366_empty_20packet_21_2 Ref00000000 +S ___0083_ef5f__20_28headers_20onl Ref00000000 +S ___0187_b489__2a_2a_2a_2a_2a_2a_ Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ___0081_05b3__20_28Hex_2fASCII_2 Ref00000000 +S _pullup Ref00000000 +S _fputc Ref00000000 +S ___00e0_e1c5__20trace_20file_3a_ Ref00000000 +S ___0029_2592__0a_2a_2a_2a_2a_2a_ Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___ctype Ref00000000 +S _freesession Ref00000000 +S ___0218_c0f9_Can_27t_20write_20t Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _vfprintf Ref00000000 +S _time Ref00000000 +S _freopen Ref00000000 +S ___0153_47c0__25s_3a Ref00000000 +S ___0026_e088__0a_25s_20_2d_20_25 Ref00000000 +S _free_p Ref00000000 +S __printf Ref00000000 +S _htoi Ref00000000 +S _pull8 Ref00000000 +S ___00c1_7166__20input Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0110_3773__2504x_20_20 Ref00000000 +S _fpname Ref00000000 +S _fprintf Ref00000000 +S ___00e1_ca97__20tracing_20off_0a Ref00000000 +S _fclose Ref00000000 +S _Cmdline Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BF8 flags 0 +S _tprintf Def00000BA4 +S _shuttrace Def00000AB5 +S _hex_dump Def000003B0 +S _raw_dump Def000002E0 +S _dotrace Def0000065E +S _trace_log Def00000AF8 +S _dump Def00000000 +A CSTR size 61 flags 0 +A IDATA0 size 71 flags 0 +S _Tracecmd Def0000000C +A CDATA0 size 71 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF DD 7E 02 DD +R 00 00 01 00 02 05 27 00 +T 09 00 00 00 B6 03 28 2F 21 12 00 DD 4E 02 DD +R 00 00 01 00 +T 14 00 00 00 46 03 09 7E DD A6 04 47 23 7E DD +R 00 00 01 00 +T 1F 00 00 00 A6 05 B0 28 18 21 14 00 DD 4E 02 +R 00 00 01 00 +T 2A 00 00 00 DD 46 03 09 46 23 66 68 DD 75 FE +R 00 00 01 00 +T 35 00 00 00 DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 C3 DD 02 00 00 +R 00 00 01 00 00 05 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 21 3D 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 4A 00 00 00 23 66 68 DD 75 FC DD 74 FD DD 4E +R 00 00 01 00 +T 55 00 00 00 04 DD 46 05 3E 10 A9 B0 C2 +R 00 00 01 00 +T 5E 00 00 00 0F 01 00 00 +R 00 00 01 00 00 04 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 6B 00 00 00 E6 00 47 23 7E E6 10 B0 28 42 DD +R 00 00 01 00 +T 76 00 00 00 7E FC DD B6 FD 28 3A 21 15 00 DD +R 00 00 01 00 +T 81 00 00 00 4E FC DD 46 FD 09 7E 23 B6 23 B6 +R 00 00 01 00 +T 8C 00 00 00 28 29 DD 4E 0A DD 46 0B C5 DD 5E +R 00 00 01 00 +T 97 00 00 00 02 DD 56 03 21 15 00 DD 4E FC DD +R 00 00 01 00 +T A2 00 00 00 46 FD 09 4E 23 46 23 7E 69 60 C1 +R 00 00 01 00 +T AD 00 00 00 CD 00 00 00 00 7D B4 20 03 +R 00 00 01 00 02 05 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 C3 DD 02 00 00 +R 00 00 01 00 00 05 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 21 04 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 29 00 +T BF 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 29 00 02 0A 01 00 +T C6 00 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T CE 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T D5 00 00 00 FA DD 74 FB 01 18 00 09 36 00 DD +R 00 00 01 00 +T E0 00 00 00 6E 02 DD 66 03 23 23 4E 23 46 C5 +R 00 00 01 00 +T EB 00 00 00 DD 6E FA DD 66 FB E5 0E +R 00 00 01 00 +T F3 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 18 00 02 0A 18 00 +T F9 00 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 01 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T 06 01 00 00 00 00 00 00 F1 F1 F1 F1 F1 18 5E +R 00 00 01 00 02 04 01 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 3E 01 A9 B0 20 58 21 04 00 39 5D +R 00 00 01 00 +T 1A 01 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 29 00 02 0B 29 00 +T 20 01 00 00 CD 00 00 00 00 21 04 00 39 5D 54 +R 00 00 01 00 02 05 01 00 +T 29 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T 2F 01 00 00 00 00 00 00 DD 75 FA DD 74 FB 01 +R 00 00 01 00 02 04 01 00 +T 38 01 00 00 18 00 09 36 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 43 01 00 00 23 23 4E 23 46 C5 DD 6E FA DD 66 +R 00 00 01 00 +T 4E 01 00 00 FB E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 07 2C 00 +T 54 01 00 00 00 00 00 00 E5 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 2C 00 +T 5D 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 14 00 02 0B 14 00 +T 63 01 00 00 CD 00 00 00 00 F1 F1 F1 F1 F1 18 +R 00 00 01 00 02 05 01 00 +T 6C 01 00 00 00 +R 00 00 01 00 +T 6D 01 00 00 +R 00 00 01 00 +T 6D 01 00 00 DD 7E 0A DD B6 0B 28 18 DD 5E 0A +R 00 00 01 00 +T 78 01 00 00 DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0D 00 +T 7E 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 85 01 00 00 F4 DD 74 F5 7D B4 20 1C +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 19 00 02 0B 19 00 +T 93 01 00 00 E5 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 9C 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T A1 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T A7 01 00 00 DD 02 00 00 +R 00 00 01 00 00 04 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 DD 6E F4 DD 66 F5 E5 21 00 00 E5 +R 00 00 01 00 +T B4 01 00 00 DD 4E 0A DD 46 0B 21 04 00 39 5D +R 00 00 01 00 +T BF 01 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 13 00 02 0B 13 00 +T C5 01 00 00 CD 00 00 00 00 F1 F1 DD 7E F2 DD +R 00 00 01 00 02 05 01 00 +T CE 01 00 00 B6 F3 20 18 +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 21 00 00 00 00 E5 DD 6E FE DD 66 +R 00 00 01 00 00 05 03 00 +T DB 01 00 00 FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 35 00 +T E0 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 35 00 02 09 01 00 +T E7 01 00 00 C3 DD 02 00 00 +R 00 00 01 00 00 05 01 00 +T EA 01 00 00 +R 00 00 01 00 +T EA 01 00 00 DD 7E FC DD B6 FD 28 38 21 18 00 +R 00 00 01 00 +T F5 01 00 00 DD 4E FC DD 46 FD 09 7E 23 B6 23 +R 00 00 01 00 +T 00 02 00 00 B6 28 27 +R 00 00 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 21 01 00 E5 21 02 00 39 4D 44 C5 +R 00 00 01 00 +T 0E 02 00 00 DD 5E FE DD 56 FF 21 18 00 DD 4E +R 00 00 01 00 +T 19 02 00 00 FC DD 46 FD 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 24 02 00 00 60 C1 CD 00 00 00 00 E1 +R 00 00 01 00 02 07 01 00 +T 2A 02 00 00 +R 00 00 01 00 +T 2A 02 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 35 02 00 00 E6 00 47 23 7E E6 01 B0 28 11 +R 00 00 01 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 21 00 00 39 4D 44 DD 5E FE DD 56 +R 00 00 01 00 +T 4A 02 00 00 FF CD 29 04 00 00 18 7F +R 00 00 01 00 00 06 01 00 +T 50 02 00 00 +R 00 00 01 00 +T 50 02 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 5B 02 00 00 E6 00 47 23 7E E6 02 B0 28 6A +R 00 00 01 00 +T 65 02 00 00 +R 00 00 01 00 +T 65 02 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2D 00 +T 6D 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 2D 00 02 0A 01 00 +T 74 02 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T 7C 02 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 83 02 00 00 00 00 E5 DD 4E 0A DD 46 0B 21 +R 00 00 01 00 +T 8D 02 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 13 00 +T 95 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 01 00 +T 9C 02 00 00 DD 7E F2 DD B6 F3 28 16 +R 00 00 01 00 +T A4 02 00 00 +R 00 00 01 00 +T A4 02 00 00 21 00 00 39 4D 44 DD 5E FE DD 56 +R 00 00 01 00 +T AF 02 00 00 FF 3E B0 03 00 00 21 B0 03 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T B5 02 00 00 CD 00 00 00 00 18 15 +R 00 00 01 00 02 05 01 00 +T BA 02 00 00 +R 00 00 01 00 +T BA 02 00 00 21 00 00 00 00 E5 DD 6E FE DD 66 +R 00 00 01 00 00 05 03 00 +T C3 02 00 00 FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 35 00 +T C8 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 35 00 02 09 01 00 +T CF 02 00 00 +R 00 00 01 00 +T CF 02 00 00 +R 00 00 01 00 +T CF 02 00 00 +R 00 00 01 00 +T CF 02 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2D 00 +T D7 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 2D 00 02 0A 01 00 +T DD 02 00 00 +R 00 00 01 00 +T DD 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 CD 00 00 00 00 FC FF 21 14 00 DD +R 00 00 01 00 02 05 27 00 +T E9 02 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T F4 02 00 00 75 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T FD 02 00 00 +R 00 00 01 00 +T FD 02 00 00 C3 AD 03 00 00 +R 00 00 01 00 00 05 01 00 +T 00 03 00 00 +R 00 00 01 00 +T 00 03 00 00 DD 7E 04 E6 01 28 05 21 +R 00 00 01 00 +T 08 03 00 00 54 00 00 00 18 03 +R 00 00 01 00 00 04 02 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 21 59 00 00 00 +R 00 00 01 00 00 05 02 00 +T 0F 03 00 00 +R 00 00 01 00 +T 0F 03 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 22 00 +T 14 03 00 00 00 00 00 00 E5 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 22 00 +T 1D 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 14 00 02 0B 14 00 +T 23 03 00 00 CD 00 00 00 00 F1 F1 F1 F1 DD 5E +R 00 00 01 00 02 05 01 00 +T 2C 03 00 00 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0D 00 +T 33 03 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 3A 03 00 00 00 00 E5 DD 4E 0A DD 46 0B 21 +R 00 00 01 00 +T 44 03 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 13 00 +T 4C 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 01 00 +T 53 03 00 00 DD 7E FC DD B6 FD 28 16 +R 00 00 01 00 +T 5B 03 00 00 +R 00 00 01 00 +T 5B 03 00 00 21 00 00 39 4D 44 DD 5E FE DD 56 +R 00 00 01 00 +T 66 03 00 00 FF 3E B0 03 00 00 21 B0 03 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T 6C 03 00 00 CD 00 00 00 00 18 15 +R 00 00 01 00 02 05 01 00 +T 71 03 00 00 +R 00 00 01 00 +T 71 03 00 00 21 00 00 00 00 E5 DD 6E FE DD 66 +R 00 00 01 00 00 05 03 00 +T 7A 03 00 00 FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 35 00 +T 7F 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 35 00 02 09 01 00 +T 86 03 00 00 +R 00 00 01 00 +T 86 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1B 00 02 0B 1B 00 +T 8C 03 00 00 E5 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 95 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T 9A 03 00 00 00 00 00 00 F1 F1 F1 21 00 00 39 +R 00 00 01 00 02 04 01 00 +T A3 03 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2D 00 +T A8 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 2D 00 02 09 01 00 +T AD 03 00 00 +R 00 00 01 00 +T AD 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T B0 03 00 00 +R 00 00 01 00 +T B0 03 00 00 CD 00 00 00 00 EC FF 79 B0 28 13 +R 00 00 01 00 02 05 27 00 +T B9 03 00 00 DD 6E 04 DD 66 05 7E 23 B6 28 08 +R 00 00 01 00 +T C4 03 00 00 DD 7E 02 DD B6 03 20 02 +R 00 00 01 00 +T CC 03 00 00 +R 00 00 01 00 +T CC 03 00 00 +R 00 00 01 00 +T CC 03 00 00 +R 00 00 01 00 +T CC 03 00 00 18 58 +R 00 00 01 00 +T CE 03 00 00 +R 00 00 01 00 +T CE 03 00 00 AF DD 77 EE DD 77 EF +R 00 00 01 00 +T D5 03 00 00 +R 00 00 01 00 +T D5 03 00 00 21 10 00 E5 21 06 00 39 4D 44 DD +R 00 00 01 00 +T E0 03 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1F 00 +T E8 03 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 1F 00 02 09 01 00 +T EF 03 00 00 75 EC DD 74 ED 7D B4 28 2E +R 00 00 01 00 +T F8 03 00 00 +R 00 00 01 00 +T F8 03 00 00 DD 6E EC DD 66 ED E5 21 06 00 39 +R 00 00 01 00 +T 03 04 00 00 E5 DD 4E EE DD 46 EF DD 5E 02 DD +R 00 00 01 00 +T 0E 04 00 00 56 03 CD 1C 05 00 00 E1 E1 21 +R 00 00 01 00 00 07 01 00 +T 16 04 00 00 02 00 39 7E DD 86 EC 77 23 7E DD +R 00 00 01 00 +T 21 04 00 00 8E ED 77 18 AF +R 00 00 01 00 +T 26 04 00 00 +R 00 00 01 00 +T 26 04 00 00 +R 00 00 01 00 +T 26 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T 29 04 00 00 +R 00 00 01 00 +T 29 04 00 00 CD 00 00 00 00 FC FF 79 B0 28 13 +R 00 00 01 00 02 05 27 00 +T 32 04 00 00 DD 6E 04 DD 66 05 7E 23 B6 28 08 +R 00 00 01 00 +T 3D 04 00 00 DD 7E 02 DD B6 03 20 03 +R 00 00 01 00 +T 45 04 00 00 +R 00 00 01 00 +T 45 04 00 00 +R 00 00 01 00 +T 45 04 00 00 +R 00 00 01 00 +T 45 04 00 00 C3 19 05 00 00 +R 00 00 01 00 00 05 01 00 +T 48 04 00 00 +R 00 00 01 00 +T 48 04 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 4F 04 00 00 +R 00 00 01 00 +T 4F 04 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 30 00 +T 57 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 30 00 02 0A 01 00 +T 5E 04 00 00 75 FC DD 74 FD 7D A4 3C CA +R 00 00 01 00 +T 67 04 00 00 F2 04 00 00 +R 00 00 01 00 00 04 01 00 +T 69 04 00 00 +R 00 00 01 00 +T 69 04 00 00 DD 7E FE E6 3F 47 DD 7E FF E6 00 +R 00 00 01 00 +T 74 04 00 00 B0 20 21 +R 00 00 01 00 +T 77 04 00 00 +R 00 00 01 00 +T 77 04 00 00 DD 6E FE DD 66 FF E5 0E +R 00 00 01 00 +T 7F 04 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 33 00 02 0A 33 00 +T 85 04 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 8D 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T 92 04 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 98 04 00 00 +R 00 00 01 00 +T 98 04 00 00 DD 4E 02 DD 46 03 DD 5E FC 16 00 +R 00 00 01 00 +T A3 04 00 00 21 00 00 00 00 19 7E E6 01 20 08 +R 00 00 01 00 02 05 24 00 +T AC 04 00 00 DD 5E FC DD 56 FD 18 03 +R 00 00 01 00 +T B4 04 00 00 +R 00 00 01 00 +T B4 04 00 00 11 2E 00 +R 00 00 01 00 +T B7 04 00 00 +R 00 00 01 00 +T B7 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 20 00 02 0A 20 00 +T BD 04 00 00 00 00 00 00 DD 6E FE DD 66 FF 23 +R 00 00 01 00 02 04 01 00 +T C6 04 00 00 DD 75 FE DD 74 FF 7D E6 3F 47 7C +R 00 00 01 00 +T D1 04 00 00 E6 00 B0 20 19 +R 00 00 01 00 +T D6 04 00 00 +R 00 00 01 00 +T D6 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 08 00 02 0B 08 00 +T DC 04 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T E5 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T EA 04 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T EF 04 00 00 +R 00 00 01 00 +T EF 04 00 00 C3 4F 04 00 00 +R 00 00 01 00 00 05 01 00 +T F2 04 00 00 +R 00 00 01 00 +T F2 04 00 00 DD 7E FE E6 3F 47 DD 7E FF E6 00 +R 00 00 01 00 +T FD 04 00 00 B0 28 19 +R 00 00 01 00 +T 00 05 00 00 +R 00 00 01 00 +T 00 05 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 08 00 02 0B 08 00 +T 06 05 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 0F 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T 14 05 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 19 05 00 00 +R 00 00 01 00 +T 19 05 00 00 +R 00 00 01 00 +T 19 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 16 00 +T 1C 05 00 00 +R 00 00 01 00 +T 1C 05 00 00 CD 00 00 00 00 AA FF 21 50 00 E5 +R 00 00 01 00 02 05 27 00 +T 25 05 00 00 01 20 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 2F 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 34 05 00 00 00 00 00 00 F1 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 01 00 +T 3D 05 00 00 6C 26 00 4D 06 00 21 00 00 39 5D +R 00 00 01 00 +T 48 05 00 00 54 CD 19 06 00 00 DD 4E 04 06 00 +R 00 00 01 00 00 06 01 00 +T 51 05 00 00 21 00 00 39 11 02 00 19 EB CD +R 00 00 01 00 +T 5B 05 00 00 19 06 00 00 21 00 00 39 01 06 00 +R 00 00 01 00 00 04 01 00 +T 64 05 00 00 09 DD 75 FA DD 74 FB 21 00 00 39 +R 00 00 01 00 +T 6F 05 00 00 01 37 00 09 DD 75 FC DD 74 FD +R 00 00 01 00 +T 79 05 00 00 +R 00 00 01 00 +T 79 05 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 84 05 00 00 74 0B 23 7D B4 28 51 +R 00 00 01 00 +T 8B 05 00 00 +R 00 00 01 00 +T 8B 05 00 00 DD 6E 08 DD 66 09 23 DD 75 08 DD +R 00 00 01 00 +T 96 05 00 00 74 09 2B 46 DD 70 FE 48 06 00 DD +R 00 00 01 00 +T A1 05 00 00 5E FA DD 56 FB CD 19 06 00 00 21 +R 00 00 01 00 00 0A 01 00 +T AA 05 00 00 50 00 39 7E C6 03 77 23 7E CE 00 +R 00 00 01 00 +T B5 05 00 00 77 DD 4E FE 06 00 21 00 00 00 00 +R 00 00 01 00 02 0B 24 00 +T BE 05 00 00 09 7E E6 01 20 05 DD 7E FE 18 02 +R 00 00 01 00 +T C9 05 00 00 +R 00 00 01 00 +T C9 05 00 00 3E 2E +R 00 00 01 00 +T CB 05 00 00 +R 00 00 01 00 +T CB 05 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T D6 05 00 00 74 FD 2B 77 18 9D +R 00 00 01 00 +T DC 05 00 00 +R 00 00 01 00 +T DC 05 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T E7 05 00 00 74 FD 2B 36 0A DD 6E 02 DD 66 03 +R 00 00 01 00 +T F2 05 00 00 E5 21 02 00 39 4D 44 DD 6E FC DD +R 00 00 01 00 +T FD 05 00 00 66 FD A7 ED 42 E5 01 01 00 21 +R 00 00 01 00 +T 07 06 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 0F 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T 16 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 16 00 +T 19 06 00 00 +R 00 00 01 00 +T 19 06 00 00 CD 00 00 00 00 06 04 DD 5E 04 DD +R 00 00 01 00 02 05 23 00 +T 22 06 00 00 56 05 CD 00 00 00 00 7B E6 0F 6F +R 00 00 01 00 02 07 00 00 +T 2B 06 00 00 7A E6 00 67 01 60 00 00 00 09 46 +R 00 00 01 00 00 09 03 00 +T 34 06 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 3F 06 00 00 74 03 2B 70 DD 7E 04 E6 0F 6F DD +R 00 00 01 00 +T 4A 06 00 00 7E 05 E6 00 67 01 60 00 00 00 09 +R 00 00 01 00 00 0A 03 00 +T 53 06 00 00 46 DD 6E 02 DD 66 03 70 C3 +R 00 00 01 00 +T 5C 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 16 00 +T 5E 06 00 00 +R 00 00 01 00 +T 5E 06 00 00 CD 00 00 00 00 FA FF 11 02 80 DD +R 00 00 01 00 02 05 27 00 +T 67 06 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 72 06 00 00 30 32 +R 00 00 01 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 2A 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 0B 00 +T 7D 06 00 00 +R 00 00 01 00 +T 7D 06 00 00 DD 7E FA DD B6 FB 28 1B +R 00 00 01 00 +T 85 06 00 00 +R 00 00 01 00 +T 85 06 00 00 DD 5E FA DD 56 FB CD 16 09 00 00 +R 00 00 01 00 00 0B 01 00 +T 8E 06 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T 99 06 00 00 75 FA DD 74 FB 18 DD +R 00 00 01 00 +T A0 06 00 00 +R 00 00 01 00 +T A0 06 00 00 21 00 00 C3 13 09 00 00 +R 00 00 01 00 00 08 01 00 +T A6 06 00 00 +R 00 00 01 00 +T A6 06 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T B1 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T B7 06 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 01 00 +T C0 06 00 00 B4 20 24 +R 00 00 01 00 +T C3 06 00 00 +R 00 00 01 00 +T C3 06 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T CE 06 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 07 00 +T D3 06 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 2B 0A 2E 00 +T D9 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2E 00 02 09 01 00 +T E0 06 00 00 F1 21 01 00 C3 13 09 00 00 +R 00 00 01 00 00 09 01 00 +T E7 06 00 00 +R 00 00 01 00 +T E7 06 00 00 3E 02 DD AE 02 DD B6 03 20 0F +R 00 00 01 00 +T F1 06 00 00 +R 00 00 01 00 +T F1 06 00 00 DD 5E FA DD 56 FB CD 16 09 00 00 +R 00 00 01 00 00 0B 01 00 +T FA 06 00 00 21 00 00 C3 13 09 00 00 +R 00 00 01 00 00 08 01 00 +T 00 07 00 00 +R 00 00 01 00 +T 00 07 00 00 01 03 80 DD 6E 02 DD 66 03 3E 80 +R 00 00 01 00 +T 0B 07 00 00 AC 67 ED 42 DA DA 07 00 00 +R 00 00 01 00 00 09 01 00 +T 12 07 00 00 +R 00 00 01 00 +T 12 07 00 00 DD 36 FC 0C 00 00 00 DD 36 FD +R 00 00 01 00 09 07 03 00 +T 19 07 00 00 0C 00 00 00 +R 00 00 01 00 89 04 03 00 +T 1A 07 00 00 +R 00 00 01 00 +T 1A 07 00 00 DD 6E FC DD 66 FD 7E 23 B6 28 44 +R 00 00 01 00 +T 25 07 00 00 +R 00 00 01 00 +T 25 07 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 30 07 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 12 00 +T 35 07 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 12 00 02 09 01 00 +T 3C 07 00 00 04 00 09 4E 23 46 DD 6E FC DD 66 +R 00 00 01 00 +T 47 07 00 00 FD 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 4E 07 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 55 07 00 00 B4 20 02 +R 00 00 01 00 +T 58 07 00 00 +R 00 00 01 00 +T 58 07 00 00 18 0F +R 00 00 01 00 +T 5A 07 00 00 +R 00 00 01 00 +T 5A 07 00 00 DD 7E FC C6 06 DD 77 FC 30 03 DD +R 00 00 01 00 +T 65 07 00 00 34 FD +R 00 00 01 00 +T 67 07 00 00 +R 00 00 01 00 +T 67 07 00 00 18 B1 +R 00 00 01 00 +T 69 07 00 00 +R 00 00 01 00 +T 69 07 00 00 DD 6E FC DD 66 FD 7E 23 B6 28 40 +R 00 00 01 00 +T 74 07 00 00 +R 00 00 01 00 +T 74 07 00 00 21 12 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T 7F 07 00 00 21 12 00 09 E5 21 04 00 DD 4E FC +R 00 00 01 00 +T 8A 07 00 00 DD 46 FD 09 5E 23 56 7B 2F 5F 7A +R 00 00 01 00 +T 95 07 00 00 2F 57 E1 7E A3 4F 23 7E A2 47 DD +R 00 00 01 00 +T A0 07 00 00 6E FC DD 66 FD 23 23 79 B6 5F 78 +R 00 00 01 00 +T AB 07 00 00 23 B6 57 E1 73 23 72 18 26 +R 00 00 01 00 +T B4 07 00 00 +R 00 00 01 00 +T B4 07 00 00 21 12 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T BF 07 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T CA 07 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2F 00 +T CF 07 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 2F 00 02 09 01 00 +T D6 07 00 00 E1 71 23 70 +R 00 00 01 00 +T DA 07 00 00 +R 00 00 01 00 +T DA 07 00 00 +R 00 00 01 00 +T DA 07 00 00 21 14 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T E5 07 00 00 23 B6 28 1D +R 00 00 01 00 +T E9 07 00 00 +R 00 00 01 00 +T E9 07 00 00 21 14 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T F4 07 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 37 00 +T F9 07 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 37 00 02 09 01 00 +T FF 07 00 00 14 00 09 AF 77 23 77 +R 00 00 01 00 +T 06 08 00 00 +R 00 00 01 00 +T 06 08 00 00 01 04 80 DD 6E 02 DD 66 03 3E 80 +R 00 00 01 00 +T 11 08 00 00 AC 67 ED 42 38 55 +R 00 00 01 00 +T 17 08 00 00 +R 00 00 01 00 +T 17 08 00 00 21 14 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T 22 08 00 00 01 00 00 C5 01 5E 00 00 00 21 +R 00 00 01 00 00 09 02 00 +T 2A 08 00 00 06 00 DD 5E 04 DD 56 05 19 5E 23 +R 00 00 01 00 +T 35 08 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2A 00 02 0B 2A 00 +T 3B 08 00 00 CD 00 00 00 00 F1 4D 44 E1 71 23 +R 00 00 01 00 02 05 01 00 +T 44 08 00 00 70 79 B0 20 20 +R 00 00 01 00 +T 49 08 00 00 +R 00 00 01 00 +T 49 08 00 00 21 06 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 54 08 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 26 00 +T 5B 08 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 26 00 2B 0A 2E 00 +T 61 08 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2E 00 02 09 01 00 +T 68 08 00 00 F1 +R 00 00 01 00 +T 69 08 00 00 +R 00 00 01 00 +T 69 08 00 00 C3 10 09 00 00 +R 00 00 01 00 00 05 01 00 +T 6C 08 00 00 +R 00 00 01 00 +T 6C 08 00 00 21 12 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 77 08 00 00 23 B6 CA 10 09 00 00 +R 00 00 01 00 00 07 01 00 +T 7C 08 00 00 +R 00 00 01 00 +T 7C 08 00 00 21 01 00 E5 01 0E 00 ED 5B +R 00 00 01 00 +T 85 08 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 38 00 2B 09 0C 00 +T 8A 08 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 91 08 00 00 75 FE DD 74 FF 01 05 00 09 AF 77 +R 00 00 01 00 +T 9C 08 00 00 23 77 21 07 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T A7 08 00 00 09 E5 21 09 00 09 E5 21 0B 00 09 +R 00 00 01 00 +T B2 08 00 00 AF 77 23 77 E1 AF 77 23 77 E1 AF +R 00 00 01 00 +T BD 08 00 00 77 23 77 21 14 00 DD 5E FA DD 56 +R 00 00 01 00 +T C8 08 00 00 FB 19 E5 21 1B 00 09 4E 23 46 E1 +R 00 00 01 00 +T D3 08 00 00 71 23 70 CD 16 09 00 00 21 3E 00 +R 00 00 01 00 00 08 01 00 +T DC 08 00 00 ED 4B 00 00 00 00 09 5E 23 56 3E +R 00 00 01 00 02 06 1C 00 +T E5 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T EA 08 00 00 00 00 00 00 21 12 00 DD 4E FA DD +R 00 00 01 00 02 04 01 00 +T F3 08 00 00 46 FB 09 AF 77 23 77 21 14 00 09 +R 00 00 01 00 +T FE 08 00 00 AF 77 23 77 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 09 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 25 00 02 09 25 00 +T 0E 09 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 10 09 00 00 +R 00 00 01 00 +T 10 09 00 00 +R 00 00 01 00 +T 10 09 00 00 21 00 00 +R 00 00 01 00 +T 13 09 00 00 +R 00 00 01 00 +T 13 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T 16 09 00 00 +R 00 00 01 00 +T 16 09 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 27 00 +T 1F 09 00 00 B6 03 20 03 +R 00 00 01 00 +T 23 09 00 00 +R 00 00 01 00 +T 23 09 00 00 C3 B2 0A 00 00 +R 00 00 01 00 00 05 01 00 +T 26 09 00 00 +R 00 00 01 00 +T 26 09 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 31 09 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 2B 00 +T 36 09 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 2B 00 2B 0A 2E 00 +T 3C 09 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2E 00 02 09 01 00 +T 43 09 00 00 F1 21 12 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 4E 09 00 00 7E E6 11 47 23 7E E6 20 B0 CA +R 00 00 01 00 +T 58 09 00 00 A1 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 5A 09 00 00 +R 00 00 01 00 +T 5A 09 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 65 09 00 00 E6 10 28 11 +R 00 00 01 00 +T 69 09 00 00 +R 00 00 01 00 +T 69 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 31 00 02 0B 31 00 +T 6F 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2E 00 02 0B 2E 00 +T 75 09 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 01 00 +T 7A 09 00 00 +R 00 00 01 00 +T 7A 09 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 85 09 00 00 E6 01 28 11 +R 00 00 01 00 +T 89 09 00 00 +R 00 00 01 00 +T 89 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 02 00 02 0B 02 00 +T 8F 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2E 00 02 0B 2E 00 +T 95 09 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 01 00 +T 9A 09 00 00 +R 00 00 01 00 +T 9A 09 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T A5 09 00 00 E6 00 47 23 7E E6 10 B0 28 11 +R 00 00 01 00 +T AF 09 00 00 +R 00 00 01 00 +T AF 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T B5 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2E 00 02 0B 2E 00 +T BB 09 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 01 00 +T C0 09 00 00 +R 00 00 01 00 +T C0 09 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T CB 09 00 00 E6 00 47 23 7E E6 02 B0 28 13 +R 00 00 01 00 +T D5 09 00 00 +R 00 00 01 00 +T D5 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1E 00 02 0B 1E 00 +T DB 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2E 00 02 0B 2E 00 +T E1 09 00 00 CD 00 00 00 00 F1 F1 18 39 +R 00 00 01 00 02 05 01 00 +T E8 09 00 00 +R 00 00 01 00 +T E8 09 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T F3 09 00 00 E6 00 47 23 7E E6 01 B0 28 13 +R 00 00 01 00 +T FD 09 00 00 +R 00 00 01 00 +T FD 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0E 00 02 0B 0E 00 +T 03 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2E 00 02 0B 2E 00 +T 09 0A 00 00 CD 00 00 00 00 F1 F1 18 11 +R 00 00 01 00 02 05 01 00 +T 10 0A 00 00 +R 00 00 01 00 +T 10 0A 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1A 00 02 0B 1A 00 +T 16 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2E 00 02 0B 2E 00 +T 1C 0A 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 01 00 +T 21 0A 00 00 +R 00 00 01 00 +T 21 0A 00 00 +R 00 00 01 00 +T 21 0A 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 2C 0A 00 00 E6 00 47 23 7E E6 20 B0 28 11 +R 00 00 01 00 +T 36 0A 00 00 +R 00 00 01 00 +T 36 0A 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 17 00 02 0B 17 00 +T 3C 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2E 00 02 0B 2E 00 +T 42 0A 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 01 00 +T 47 0A 00 00 +R 00 00 01 00 +T 47 0A 00 00 21 14 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 52 0A 00 00 23 B6 28 38 21 14 00 DD 4E 02 DD +R 00 00 01 00 +T 5D 0A 00 00 46 03 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 34 00 +T 65 0A 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 34 00 02 0A 01 00 +T 6C 0A 00 00 75 FE DD 74 FF 7D B4 28 19 +R 00 00 01 00 +T 75 0A 00 00 +R 00 00 01 00 +T 75 0A 00 00 +R 00 00 01 00 +T 75 0A 00 00 +R 00 00 01 00 +T 75 0A 00 00 DD 6E FE DD 66 FF E5 0E +R 00 00 01 00 +T 7D 0A 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 21 00 02 0A 21 00 +T 83 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2E 00 02 0A 2E 00 +T 89 0A 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 8E 0A 00 00 +R 00 00 01 00 +T 8E 0A 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 08 00 02 0B 08 00 +T 94 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2E 00 02 0B 2E 00 +T 9A 0A 00 00 CD 00 00 00 00 F1 F1 18 11 +R 00 00 01 00 02 05 01 00 +T A1 0A 00 00 +R 00 00 01 00 +T A1 0A 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 36 00 02 0B 36 00 +T A7 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2E 00 02 0B 2E 00 +T AD 0A 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 01 00 +T B2 0A 00 00 +R 00 00 01 00 +T B2 0A 00 00 +R 00 00 01 00 +T B2 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 16 00 +T B5 0A 00 00 +R 00 00 01 00 +T B5 0A 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 27 00 +T BB 0A 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 0B 00 +T C3 0A 00 00 +R 00 00 01 00 +T C3 0A 00 00 DD 7E FE DD B6 FF 28 2A +R 00 00 01 00 +T CB 0A 00 00 +R 00 00 01 00 +T CB 0A 00 00 21 14 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T D6 0A 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 37 00 +T DB 0A 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 37 00 02 09 01 00 +T E1 0A 00 00 14 00 09 AF 77 23 77 0A 6F 03 0A +R 00 00 01 00 +T EC 0A 00 00 67 DD 75 FE DD 74 FF 18 CE +R 00 00 01 00 +T F5 0A 00 00 +R 00 00 01 00 +T F5 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T F8 0A 00 00 +R 00 00 01 00 +T F8 0A 00 00 CD 00 00 00 00 F6 FF 21 14 00 DD +R 00 00 01 00 02 05 27 00 +T 01 0B 00 00 4E 0A DD 46 0B 09 46 23 66 68 DD +R 00 00 01 00 +T 0C 0B 00 00 75 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 15 0B 00 00 +R 00 00 01 00 +T 15 0B 00 00 C3 A1 0B 00 00 +R 00 00 01 00 00 05 01 00 +T 18 0B 00 00 +R 00 00 01 00 +T 18 0B 00 00 21 04 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 29 00 +T 20 0B 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 29 00 02 0A 01 00 +T 27 0B 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T 2F 0B 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 36 0B 00 00 F8 DD 74 F9 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T 3E 0B 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 45 0B 00 00 F8 DD 66 F9 E5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 15 00 +T 4D 0B 00 00 21 00 00 00 00 E5 DD 6E FE DD 66 +R 00 00 01 00 02 05 15 00 +T 56 0B 00 00 FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 14 00 +T 5B 0B 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 14 00 02 09 01 00 +T 62 0B 00 00 F1 F1 21 16 00 39 01 02 00 09 DD +R 00 00 01 00 +T 6D 0B 00 00 75 F6 DD 74 F7 E5 DD 4E 0C DD 46 +R 00 00 01 00 +T 78 0B 00 00 0D DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 80 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 28 00 02 09 28 00 +T 85 0B 00 00 00 00 00 00 F1 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 01 00 2B 0A 08 00 +T 8B 0B 00 00 21 00 00 00 00 E5 DD 6E FE DD 66 +R 00 00 01 00 02 05 08 00 +T 94 0B 00 00 FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 14 00 +T 99 0B 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 14 00 02 09 01 00 +T A0 0B 00 00 F1 +R 00 00 01 00 +T A1 0B 00 00 +R 00 00 01 00 +T A1 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T A4 0B 00 00 +R 00 00 01 00 +T A4 0B 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 27 00 +T AD 0B 00 00 DD 77 FF 21 14 00 DD 4E 0A DD 46 +R 00 00 01 00 +T B8 0B 00 00 0B 09 7E 23 B6 20 05 +R 00 00 01 00 +T BF 0B 00 00 +R 00 00 01 00 +T BF 0B 00 00 21 FF FF 18 31 +R 00 00 01 00 +T C4 0B 00 00 +R 00 00 01 00 +T C4 0B 00 00 21 10 00 39 01 02 00 09 DD 75 FC +R 00 00 01 00 +T CF 0B 00 00 DD 74 FD E5 DD 4E 0C DD 46 0D 21 +R 00 00 01 00 +T DA 0B 00 00 14 00 DD 5E 0A DD 56 0B 19 5E 23 +R 00 00 01 00 +T E5 0B 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 28 00 02 0B 28 00 +T EB 0B 00 00 CD 00 00 00 00 F1 DD 75 FE DD 74 +R 00 00 01 00 02 05 01 00 +T F4 0B 00 00 FF +R 00 00 01 00 +T F5 0B 00 00 +R 00 00 01 00 +T F5 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 6E 70 75 74 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 2D 69 6E 70 75 74 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 6F 75 74 70 75 74 00 +R 00 00 02 00 +T 14 00 00 00 +R 00 00 02 00 +T 14 00 00 00 2D 6F 75 74 70 75 74 00 +R 00 00 02 00 +T 1C 00 00 00 +R 00 00 02 00 +T 1C 00 00 00 62 72 6F 61 64 63 61 73 74 00 +R 00 00 02 00 +T 26 00 00 00 +R 00 00 02 00 +T 26 00 00 00 2D 62 72 6F 61 64 63 61 73 74 00 +R 00 00 02 00 +T 31 00 00 00 +R 00 00 02 00 +T 31 00 00 00 72 61 77 00 +R 00 00 02 00 +T 35 00 00 00 +R 00 00 02 00 +T 35 00 00 00 2D 72 61 77 00 +R 00 00 02 00 +T 3A 00 00 00 +R 00 00 02 00 +T 3A 00 00 00 61 73 63 69 69 00 +R 00 00 02 00 +T 40 00 00 00 +R 00 00 02 00 +T 40 00 00 00 2D 61 73 63 69 69 00 +R 00 00 02 00 +T 47 00 00 00 +R 00 00 02 00 +T 47 00 00 00 68 65 78 00 +R 00 00 02 00 +T 4B 00 00 00 +R 00 00 02 00 +T 4B 00 00 00 2D 68 65 78 00 +R 00 00 02 00 +T 50 00 00 00 +R 00 00 02 00 +T 50 00 00 00 6F 66 66 00 +R 00 00 02 00 +T 54 00 00 00 +R 00 00 02 00 +T 54 00 00 00 73 65 6E 64 00 +R 00 00 02 00 +T 59 00 00 00 +R 00 00 02 00 +T 59 00 00 00 72 65 63 76 00 +R 00 00 02 00 +T 5E 00 00 00 +R 00 00 02 00 +T 5E 00 00 00 61 2B 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 0C 00 00 00 +R 00 00 03 00 +T 0C 00 00 00 +R 00 00 03 00 +T 60 00 00 00 +R 00 00 03 00 +T 60 00 00 00 +R 00 00 03 00 +T 00 00 00 00 4E 6F 20 73 70 61 63 65 21 21 0A +R 00 00 04 00 +T 0B 00 00 00 00 00 00 00 00 10 00 10 00 +R 00 00 04 00 00 05 02 00 +T 12 00 00 00 06 00 00 00 00 00 10 00 +R 00 00 04 00 00 04 02 00 +T 18 00 00 00 0D 00 00 00 01 00 01 00 +R 00 00 04 00 00 04 02 00 +T 1E 00 00 00 14 00 00 00 00 00 01 00 +R 00 00 04 00 00 04 02 00 +T 24 00 00 00 1C 00 00 00 00 00 00 10 +R 00 00 04 00 00 04 02 00 +T 2A 00 00 00 26 00 00 00 00 10 00 10 +R 00 00 04 00 00 04 02 00 +T 30 00 00 00 31 00 00 00 00 20 00 20 +R 00 00 04 00 00 04 02 00 +T 36 00 00 00 35 00 00 00 00 00 00 20 +R 00 00 04 00 00 04 02 00 +T 3C 00 00 00 3A 00 00 00 00 01 00 03 +R 00 00 04 00 00 04 02 00 +T 42 00 00 00 40 00 00 00 00 00 00 03 +R 00 00 04 00 00 04 02 00 +T 48 00 00 00 47 00 00 00 00 02 00 03 +R 00 00 04 00 00 04 02 00 +T 4E 00 00 00 4B 00 00 00 00 01 00 03 +R 00 00 04 00 00 04 02 00 +T 54 00 00 00 50 00 00 00 00 00 FF FF 00 00 +R 00 00 04 00 00 04 02 00 +T 5C 00 00 00 00 00 00 00 30 31 32 33 34 35 36 +R 00 00 04 00 +T 67 00 00 00 37 38 39 61 62 63 64 65 66 00 +R 00 00 04 00 diff --git a/src/nos/lib/dump_lib/udpdump.rel b/src/nos/lib/dump_lib/udpdump.rel new file mode 100644 index 00000000..3acfeb3a --- /dev/null +++ b/src/nos/lib/dump_lib/udpdump.rel @@ -0,0 +1,150 @@ +XL4 +H 2 areas 10 global symbols +S _ntohudp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S ___008c_d667__20CHECKSUM_20ERROR Ref00000000 +S .__.ABS. Def00000000 +S _fputc Ref00000000 +S _cksum Ref00000000 +S ___03c0_9059_UDP_3a Ref00000000 +S ___008f_26b0__20Data_20_25u Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___00c2_6c92__20len_20_25u Ref00000000 +S ___007c_5984__20_25u_2d_3e_25u Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18A flags 0 +S _udp_dump Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EA FF 79 B0 28 0B +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 DD 6E 04 DD 66 05 7E 23 B6 20 03 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 C3 87 01 00 00 +R 00 00 01 00 00 05 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 09 00 02 0B 09 00 +T 1D 00 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 26 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 2B 00 00 00 00 00 00 00 F1 F1 F1 DD 4E 0C DD +R 00 00 01 00 02 04 01 00 +T 34 00 00 00 46 0D DD 6E 0A DD 66 0B DD 75 F2 +R 00 00 01 00 +T 3F 00 00 00 DD 74 F3 DD 71 F4 DD 70 F5 DD 4E +R 00 00 01 00 +T 4A 00 00 00 10 DD 46 11 DD 6E 0E DD 66 0F DD +R 00 00 01 00 +T 55 00 00 00 75 F6 DD 74 F7 DD 71 F8 DD 70 F9 +R 00 00 01 00 +T 60 00 00 00 DD 36 FA 11 DD 6E 04 DD 66 05 5E +R 00 00 01 00 +T 6B 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 70 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 77 00 00 00 FB DD 74 FC DD 6E FB DD 66 FC E5 +R 00 00 01 00 +T 82 00 00 00 DD 6E 04 DD 66 05 4E 23 46 21 +R 00 00 01 00 +T 8C 00 00 00 0A 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 94 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 08 00 02 09 01 00 +T 9B 00 00 00 75 FD DD 74 FE 7D B4 20 07 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 AF DD 77 12 DD 77 13 +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 DD 4E 04 DD 46 05 21 00 00 39 5D +R 00 00 01 00 +T B6 00 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T BC 00 00 00 CD 00 00 00 00 DD 6E EE DD 66 EF +R 00 00 01 00 02 05 01 00 +T C5 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 0C 00 +T CA 00 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 0C 00 +T D3 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T D9 00 00 00 CD 00 00 00 00 F1 F1 F1 F1 DD 6E +R 00 00 01 00 02 05 01 00 +T E2 00 00 00 EC DD 66 ED E5 DD 6E EA DD 66 EB +R 00 00 01 00 +T ED 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 0D 00 +T F2 00 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 0D 00 +T FB 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 01 01 00 00 CD 00 00 00 00 F1 F1 F1 F1 F1 DD +R 00 00 01 00 02 05 01 00 +T 0A 01 00 00 4E EE DD 46 EF 21 08 00 A7 ED 42 +R 00 00 01 00 +T 15 01 00 00 30 25 +R 00 00 01 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 DD 6E EE DD 66 EF 01 F8 FF 09 E5 +R 00 00 01 00 +T 22 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T 28 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 31 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 36 01 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 3C 01 00 00 +R 00 00 01 00 +T 3C 01 00 00 DD 6E F0 DD 66 F1 7D B4 20 07 +R 00 00 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 AF DD 77 12 DD 77 13 +R 00 00 01 00 +T 4D 01 00 00 +R 00 00 01 00 +T 4D 01 00 00 DD 7E 12 DD B6 13 28 21 +R 00 00 01 00 +T 55 01 00 00 +R 00 00 01 00 +T 55 01 00 00 DD 6E FD DD 66 FE E5 0E +R 00 00 01 00 +T 5D 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T 63 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 6B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 70 01 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 DD 4E 02 DD 46 03 11 0A 00 3E +R 00 00 01 00 +T 80 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 85 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 87 01 00 00 +R 00 00 01 00 +T 87 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys.lib b/src/nos/lib/filesys.lib new file mode 100644 index 00000000..2282c14b --- /dev/null +++ b/src/nos/lib/filesys.lib @@ -0,0 +1,505 @@ +filesys_lib/Bufpool.rel + _Bufpool +filesys_lib/Devtab.rel + _Devtab +filesys_lib/bufclock.rel + _bufclock +filesys_lib/buf_hits.rel + _buf_hits +filesys_lib/buf_miss.rel + _buf_miss +filesys_lib/buf_flsh.rel + _buf_flsh +filesys_lib/bufinit.rel + _bufinit + _devio_garbage +filesys_lib/bread.rel + _bread +filesys_lib/bfree.rel + _bfree +filesys_lib/zerobuf.rel + _zerobuf +filesys_lib/bufsync.rel + _bufsync +filesys_lib/bfind.rel + _bfind +filesys_lib/freebuf.rel + _freebuf +filesys_lib/bufdump.rel + _bufdump +filesys_lib/validdev.rel + _validdev +filesys_lib/bdreadwrite.rel + _bdreadwrite +filesys_lib/cdreadwrite.rel + _cdreadwrite +filesys_lib/d_openclose.rel + _d_openclose +filesys_lib/d_ioctl.rel + _d_ioctl +filesys_lib/d_init.rel + _d_init +filesys_lib/ok.rel + _ok +filesys_lib/ok_rdwr.rel + _ok_rdwr +filesys_lib/nogood.rel + _nogood +filesys_lib/nogood_rdwr.rel + _nogood_rdwr +filesys_lib/nogood_ioctl.rel + _nogood_ioctl +filesys_lib/sys_execve.rel + _sys_execve +filesys_lib/wargs.rel + _wargs +filesys_lib/rargs.rel + _rargs +filesys_lib/root_dev.rel + _root_dev +filesys_lib/root_ino.rel + _root_ino +filesys_lib/Fstab.rel + _Fstab +filesys_lib/Inotab.rel + _Inotab +filesys_lib/Oftab.rel + _Oftab +filesys_lib/dirty_mask.rel + _dirty_mask +filesys_lib/Badinomsg.rel + _Badinomsg +filesys_lib/Baddevmsg.rel + _Baddevmsg +filesys_lib/Badfsmsg.rel + _Badfsmsg +filesys_lib/Refstoinode.rel + _Refstoinode +filesys_lib/Gtinobadoft.rel + _Gtinobadoft +filesys_lib/fs_init.rel + _fs_init +filesys_lib/findfs.rel + _findfs +filesys_lib/getfs.rel + _getfs +filesys_lib/wr_inode.rel + _wr_inode +filesys_lib/i_ref.rel + _i_ref +filesys_lib/i_deref.rel + _i_deref +filesys_lib/i_free.rel + _i_free +filesys_lib/_namei.rel + __namei +filesys_lib/namei.rel + _namei +filesys_lib/srch_dir.rel + _srch_dir +filesys_lib/srch_mt.rel + _srch_mt +filesys_lib/i_init.rel + _filesys_garbage + _i_init +filesys_lib/i_open.rel + _i_open +filesys_lib/ch_link.rel + _ch_link +filesys_lib/filename.rel + _filename +filesys_lib/namecomp.rel + _namecomp +filesys_lib/newfile.rel + _newfile +filesys_lib/filesys_doclose.rel + _filesys_doclose +filesys_lib/i_alloc.rel + _i_alloc +filesys_lib/blk_alloc.rel + _blk_alloc +filesys_lib/blk_free.rel + _blk_free +filesys_lib/oft_alloc.rel + _oft_alloc +filesys_lib/oft_deref.rel + _oft_deref +filesys_lib/uf_alloc.rel + _uf_alloc +filesys_lib/isdevice.rel + _isdevice +filesys_lib/freeblk.rel + _freeblk +filesys_lib/f_trunc.rel + _f_trunc +filesys_lib/bmap.rel + _bmap +filesys_lib/validblk.rel + _validblk +filesys_lib/getinode.rel + _getinode +filesys_lib/getperm.rel + _getperm +filesys_lib/setftim.rel + _setftim +filesys_lib/fmount.rel + _fmount +filesys_lib/magic.rel + _magic +filesys_lib/i_sync.rel + _i_sync +filesys_lib/fs_sync.rel + _fs_sync +filesys_lib/max_int.rel + _max_int +filesys_lib/max_long.rel + _max_long +filesys_lib/max_uint.rel + _max_uint +filesys_lib/max_ulong.rel + _max_ulong +filesys_lib/min_int.rel + _min_int +filesys_lib/min_long.rel + _min_long +filesys_lib/min_uint.rel + _min_uint +filesys_lib/min_ulong.rel + _min_ulong +filesys_lib/Ptab.rel + _Ptab +filesys_lib/udata.rel + _udata_p +filesys_lib/p_init.rel + _p_init +filesys_lib/panic.rel + _panic +filesys_lib/_panic.rel + __panic +filesys_lib/valadr.rel + _valadr +filesys_lib/dprintf.rel + _dprintf +filesys_lib/vdprintf.rel + _vdprintf +filesys_lib/rdtime.rel + _rdtime +filesys_lib/sttime.rel + _sttime +filesys_lib/ibuf.rel + _ibuf +filesys_lib/kbuf.rel + _kbuf +filesys_lib/sys_NONE.rel + _sys_NONE +filesys_lib/sys_sync.rel + _sys_sync +filesys_lib/sys_utime.rel + _sys_utime +filesys_lib/sys_close.rel + _sys_close +filesys_lib/truncateto0.rel + _truncateto0 +filesys_lib/sys_open.rel + _sys_open +filesys_lib/sys_link.rel + _sys_link +filesys_lib/sys_symlink.rel + _sys_symlink +filesys_lib/sys_unlink.rel + _sys_unlink +filesys_lib/sys_readwrite.rel + _sys_readwrite +filesys_lib/sys_lseek.rel + _sys_lseek +filesys_lib/sys_chdir.rel + _sys_chdir +filesys_lib/sys_chroot.rel + _sys_chroot +filesys_lib/sys_mknod.rel + _sys_mknod + _sys_access +filesys_lib/chany.rel + _chany +filesys_lib/sys_chmod.rel + _sys_chmod +filesys_lib/sys_chown.rel + _sys_chown +filesys_lib/stcpy.rel + _stcpy +filesys_lib/sys_statfstat.rel + _sys_statfstat +filesys_lib/sys_falign.rel + _sys_falign +filesys_lib/sys_dup.rel + _sys_dup +filesys_lib/sys_dup2.rel + _sys_dup2 +filesys_lib/sys_getfsys.rel + _sys_getfsys +filesys_lib/sys_ioctl.rel + _sys_ioctl +filesys_lib/sys_mountumount.rel + _sys_mountumount +filesys_lib/sys_time.rel + _sys_time +filesys_lib/n_creat.rel + _n_creat +filesys_lib/readwritei.rel + _readwritei +filesys_lib/rwsetup.rel + _rwsetup +filesys_lib/scall1_getfsys.rel + _scall1_getfsys +filesys_lib/findprocess.rel + _findprocess +filesys_lib/filldesc.rel + _filldesc +filesys_lib/sys_pipe.rel + _sys_pipe +filesys_lib/sys_stime.rel + _sys_stime +filesys_lib/sys_times.rel + _sys_times +filesys_lib/sys_brk.rel + _sys_brk +filesys_lib/sys_sbrk.rel + _sys_sbrk +filesys_lib/sys_waitpid.rel + _sys_waitpid +filesys_lib/sys__exit.rel + _sys__exit +filesys_lib/doexit.rel + _doexit +filesys_lib/sys_fork.rel + _sys_fork +filesys_lib/sys_pause.rel + _sys_pause +filesys_lib/sys_signal.rel + _sys_signal +filesys_lib/sys_kill.rel + _sys_kill +filesys_lib/sys_alarm.rel + _sys_alarm +filesys_lib/sys_reboot.rel + _sys_reboot +filesys_lib/sys_getset.rel + _sys_getset +filesys_lib/systrace_table.rel + _systrace_table + _systrace_limit +filesys_lib/syserror_table.rel + _syserror_limit + _syserror_table +filesys_lib/systrace_entry.rel + _systrace_entry +filesys_lib/systrace_exit.rel + _systrace_exit +filesys_lib/systrace_dump.rel + _systrace_dump +filesys_lib/usrget.rel + _usrget +filesys_lib/usrget_str.rel + _usrget_str +filesys_lib/usrget_int.rel + _usrget_int +filesys_lib/usrput.rel + _usrput +filesys_lib/usrput_int.rel + _usrput_int +filesys_lib/xfs_init.rel + _xfs_init +filesys_lib/xfs_end.rel + _xfs_end +filesys_lib/xfs_open.rel + _xfs_open +filesys_lib/xfs_close.rel + _xfs_close +filesys_lib/xfs_creat.rel + _xfs_creat +filesys_lib/xfs_link.rel + _xfs_link +filesys_lib/xfs_symlink.rel + _xfs_symlink +filesys_lib/xfs_unlink.rel + _xfs_unlink +filesys_lib/xfs_read.rel + _xfs_read +filesys_lib/xfs_write.rel + _xfs_write +filesys_lib/xfs_lseek.rel + _xfs_lseek +filesys_lib/xfs_chdir.rel + _xfs_chdir +filesys_lib/xfs_mknod.rel + _xfs_mknod +filesys_lib/xfs_sync.rel + _xfs_sync +filesys_lib/xfs_access.rel + _xfs_access +filesys_lib/xfs_chmod.rel + _xfs_chmod +filesys_lib/xfs_chown.rel + _xfs_chown +filesys_lib/xfs_stat.rel + _xfs_stat +filesys_lib/xfs_fstat.rel + _xfs_fstat +filesys_lib/xfs_falign.rel + _xfs_falign +filesys_lib/xfs_dup.rel + _xfs_dup +filesys_lib/xfs_dup2.rel + _xfs_dup2 +filesys_lib/xfs_umask.rel + _xfs_umask +filesys_lib/xfs_sysdebug.rel + _xfs_sysdebug +filesys_lib/xfs_systrace.rel + _xfs_systrace +filesys_lib/xfs_getfsys.rel + _xfs_getfsys +filesys_lib/xfs_ioctl.rel + _xfs_ioctl +filesys_lib/xfs_mount.rel + _xfs_mount +filesys_lib/xfs_umount.rel + _xfs_umount +filesys_lib/xfs_time.rel + _xfs_time +filesys_lib/open.rel + _open +filesys_lib/close.rel + _close +filesys_lib/creat.rel + _creat +filesys_lib/link.rel + _link +filesys_lib/symlink.rel + _symlink +filesys_lib/unlink.rel + _unlink +filesys_lib/read.rel + _read +filesys_lib/write.rel + _write +filesys_lib/lseek.rel + _lseek +filesys_lib/chdir.rel + _chdir +filesys_lib/mknod.rel + _mknod +filesys_lib/sync.rel + _sync +filesys_lib/access.rel + _access +filesys_lib/chmod.rel + _chmod +filesys_lib/chown.rel + _chown +filesys_lib/stat.rel + _stat +filesys_lib/fstat.rel + _fstat +filesys_lib/falign.rel + _falign +filesys_lib/dup.rel + _dup +filesys_lib/dup2.rel + _dup2 +filesys_lib/umask.rel + _umask +filesys_lib/sysdebug.rel + _sysdebug +filesys_lib/systrace.rel + _systrace +filesys_lib/getfsys.rel + _getfsys +filesys_lib/ioctl.rel + _ioctl +filesys_lib/mount.rel + _mount +filesys_lib/umount.rel + _umount +filesys_lib/time.rel + _time +filesys_lib/_open.rel + __open +filesys_lib/_close.rel + __close +filesys_lib/_creat.rel + __creat +filesys_lib/_link.rel + __link +filesys_lib/_symlink.rel + __symlink +filesys_lib/_unlink.rel + __unlink +filesys_lib/_read.rel + __read +filesys_lib/_write.rel + __write +filesys_lib/_lseek.rel + __lseek +filesys_lib/_chdir.rel + __chdir +filesys_lib/_mknod.rel + __mknod +filesys_lib/_sync.rel + __sync +filesys_lib/_access.rel + __access +filesys_lib/_chmod.rel + __chmod +filesys_lib/_chown.rel + __chown +filesys_lib/_stat.rel + __stat +filesys_lib/_fstat.rel + __fstat +filesys_lib/_falign.rel + __falign +filesys_lib/_dup.rel + __dup +filesys_lib/_dup2.rel + __dup2 +filesys_lib/_umask.rel + __umask +filesys_lib/_sysdebug.rel + __sysdebug +filesys_lib/_systrace.rel + __systrace +filesys_lib/_getfsys.rel + __getfsys +filesys_lib/_ioctl.rel + __ioctl +filesys_lib/_mount.rel + __mount +filesys_lib/_umount.rel + __umount +filesys_lib/_time.rel + __time +filesys_lib/xip_align.rel + _xip_align +filesys_lib/xip_ualign.rel + _xip_ualign +filesys_lib/xip_examine.rel + _xip_examine +filesys_lib/xip_align_chase.rel + _xip_align_chase +filesys_lib/xip_align_bmap.rel + _xip_align_bmap +filesys_lib/xip_align_reverse.rel + _xip_align_reverse +filesys_lib/xip_align_recurse.rel + _xip_align_recurse +filesys_lib/xip_search.rel + _xip_search +filesys_lib/xip_reserve.rel + _xip_reserve +filesys_lib/xip_find.rel + _xip_find +filesys_lib/xip_get.rel + _xip_get +filesys_lib/xip_set.rel + _xip_set diff --git a/src/nos/lib/filesys_lib/Baddevmsg.rel b/src/nos/lib/filesys_lib/Baddevmsg.rel new file mode 100644 index 00000000..998fc1f3 --- /dev/null +++ b/src/nos/lib/filesys_lib/Baddevmsg.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___015c_0cde__25s_3a_20bad_20dev Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Baddevmsg Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/filesys_lib/Badfsmsg.rel b/src/nos/lib/filesys_lib/Badfsmsg.rel new file mode 100644 index 00000000..aa8dc66b --- /dev/null +++ b/src/nos/lib/filesys_lib/Badfsmsg.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___015f_d157__25s_3a_20fs_20of_2 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Badfsmsg Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/filesys_lib/Badinomsg.rel b/src/nos/lib/filesys_lib/Badinomsg.rel new file mode 100644 index 00000000..5daf176a --- /dev/null +++ b/src/nos/lib/filesys_lib/Badinomsg.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___015d_5351__25s_3a_20bad_20ino Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Badinomsg Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/filesys_lib/Bufpool.rel b/src/nos/lib/filesys_lib/Bufpool.rel new file mode 100644 index 00000000..5f01965c --- /dev/null +++ b/src/nos/lib/filesys_lib/Bufpool.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 6 flags 0 +S _Bufpool Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/Devtab.rel b/src/nos/lib/filesys_lib/Devtab.rel new file mode 100644 index 00000000..24680563 --- /dev/null +++ b/src/nos/lib/filesys_lib/Devtab.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 6 flags 0 +S _Devtab Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/Fstab.rel b/src/nos/lib/filesys_lib/Fstab.rel new file mode 100644 index 00000000..d7422881 --- /dev/null +++ b/src/nos/lib/filesys_lib/Fstab.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _Fstab Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/Gtinobadoft.rel b/src/nos/lib/filesys_lib/Gtinobadoft.rel new file mode 100644 index 00000000..b6c57a0e --- /dev/null +++ b/src/nos/lib/filesys_lib/Gtinobadoft.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___0497_631b_getinode_3a_20bad_2 Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Gtinobadoft Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/filesys_lib/Inotab.rel b/src/nos/lib/filesys_lib/Inotab.rel new file mode 100644 index 00000000..89c2d4bd --- /dev/null +++ b/src/nos/lib/filesys_lib/Inotab.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size A flags 0 +S _Inotab Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/Oftab.rel b/src/nos/lib/filesys_lib/Oftab.rel new file mode 100644 index 00000000..d991736d --- /dev/null +++ b/src/nos/lib/filesys_lib/Oftab.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 1E flags 0 +S _Oftab Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/Ptab.rel b/src/nos/lib/filesys_lib/Ptab.rel new file mode 100644 index 00000000..0f999259 --- /dev/null +++ b/src/nos/lib/filesys_lib/Ptab.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _Ptab Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/Refstoinode.rel b/src/nos/lib/filesys_lib/Refstoinode.rel new file mode 100644 index 00000000..74020177 --- /dev/null +++ b/src/nos/lib/filesys_lib/Refstoinode.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___0149_b314__25s_20refs_20to_20 Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Refstoinode Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/filesys_lib/_access.rel b/src/nos/lib/filesys_lib/_access.rel new file mode 100644 index 00000000..025adaa4 --- /dev/null +++ b/src/nos/lib/filesys_lib/_access.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_access Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A4 flags 0 +S __access Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T 55 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 60 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 69 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 72 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7F 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 8F 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T 9E 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_chdir.rel b/src/nos/lib/filesys_lib/_chdir.rel new file mode 100644 index 00000000..19a54b1e --- /dev/null +++ b/src/nos/lib/filesys_lib/_chdir.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_chdir Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S __chdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 03 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 03 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/_chmod.rel b/src/nos/lib/filesys_lib/_chmod.rel new file mode 100644 index 00000000..717509a2 --- /dev/null +++ b/src/nos/lib/filesys_lib/_chmod.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_chmod Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S __chmod Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 04 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/_chown.rel b/src/nos/lib/filesys_lib/_chown.rel new file mode 100644 index 00000000..7d8255f5 --- /dev/null +++ b/src/nos/lib/filesys_lib/_chown.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_chown Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S __chown Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_close.rel b/src/nos/lib/filesys_lib/_close.rel new file mode 100644 index 00000000..58db5683 --- /dev/null +++ b/src/nos/lib/filesys_lib/_close.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_close Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S __close Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 06 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 05 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_creat.rel b/src/nos/lib/filesys_lib/_creat.rel new file mode 100644 index 00000000..0511e8ef --- /dev/null +++ b/src/nos/lib/filesys_lib/_creat.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B9 flags 0 +S __creat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 36 01 23 36 +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 03 21 0E 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 DD 5E 04 DD 56 05 73 23 72 2A +R 00 00 01 00 +T 60 00 00 00 00 00 00 00 23 23 23 36 14 3E +R 00 00 01 00 02 04 05 00 +T 68 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 6D 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 09 00 +T 72 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 79 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 05 00 +T 8B 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 91 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 98 00 00 00 3C 20 0F +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T A4 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T B3 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_dup.rel b/src/nos/lib/filesys_lib/_dup.rel new file mode 100644 index 00000000..3993c876 --- /dev/null +++ b/src/nos/lib/filesys_lib/_dup.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _sys_dup Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S __dup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 08 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 02 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/_dup2.rel b/src/nos/lib/filesys_lib/_dup2.rel new file mode 100644 index 00000000..b1ab87de --- /dev/null +++ b/src/nos/lib/filesys_lib/_dup2.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _sys_dup2 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S __dup2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 23 23 36 09 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_falign.rel b/src/nos/lib/filesys_lib/_falign.rel new file mode 100644 index 00000000..157c64ff --- /dev/null +++ b/src/nos/lib/filesys_lib/_falign.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_falign Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S __falign Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 23 23 36 28 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_fstat.rel b/src/nos/lib/filesys_lib/_fstat.rel new file mode 100644 index 00000000..2f01afad --- /dev/null +++ b/src/nos/lib/filesys_lib/_fstat.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_statfstat Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S __fstat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 0D 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_getfsys.rel b/src/nos/lib/filesys_lib/_getfsys.rel new file mode 100644 index 00000000..990bc768 --- /dev/null +++ b/src/nos/lib/filesys_lib/_getfsys.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_getfsys Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S __getfsys Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 0E 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/_ioctl.rel b/src/nos/lib/filesys_lib/_ioctl.rel new file mode 100644 index 00000000..01a3a909 --- /dev/null +++ b/src/nos/lib/filesys_lib/_ioctl.rel @@ -0,0 +1,77 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_ioctl Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DC flags 0 +S __ioctl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 06 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 04 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 0A DD 56 0B 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 0C DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 0D 73 23 72 21 2E 00 39 01 +R 00 00 01 00 +T 57 00 00 00 02 00 09 DD 75 E0 DD 74 E1 21 +R 00 00 01 00 +T 61 00 00 00 0E 00 ED 4B 00 00 00 00 09 E5 21 +R 00 00 01 00 02 08 06 00 +T 6A 00 00 00 04 00 39 7E C6 02 77 23 7E CE 00 +R 00 00 01 00 +T 75 00 00 00 77 2B 6E 67 2B 2B 5E 23 56 E1 73 +R 00 00 01 00 +T 80 00 00 00 23 72 2A 00 00 00 00 23 23 23 36 +R 00 00 01 00 02 07 06 00 +T 89 00 00 00 0F 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 8F 00 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 00 00 2B 0A 05 00 +T 95 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 9C 00 00 00 DE DD 74 DF 21 04 00 ED 4B +R 00 00 01 00 +T A5 00 00 00 00 00 00 00 09 DD 4E DE DD 46 DF +R 00 00 01 00 02 04 06 00 +T AE 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T B4 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T BB 00 00 00 3C 20 0F +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T C7 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 21 00 00 22 00 00 00 00 DD 6E DE +R 00 00 01 00 02 08 06 00 +T D6 00 00 00 DD 66 DF C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_link.rel b/src/nos/lib/filesys_lib/_link.rel new file mode 100644 index 00000000..bdd2b542 --- /dev/null +++ b/src/nos/lib/filesys_lib/_link.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_link Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S __link Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 23 23 36 11 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_lseek.rel b/src/nos/lib/filesys_lib/_lseek.rel new file mode 100644 index 00000000..e22bbe80 --- /dev/null +++ b/src/nos/lib/filesys_lib/_lseek.rel @@ -0,0 +1,84 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S _sys_lseek Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F2 flags 0 +S __lseek Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 0A DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 0B 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 E5 3E 10 DD 4E 0C +R 00 00 01 00 02 04 05 00 +T 60 00 00 00 DD 46 0D DD 6E 0A DD 66 0B CD +R 00 00 01 00 +T 6A 00 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 0A 00 +T 72 00 00 00 10 00 ED 4B 00 00 00 00 09 DD 5E +R 00 00 01 00 02 08 05 00 +T 7B 00 00 00 0E DD 56 0F 73 23 72 2A +R 00 00 01 00 +T 83 00 00 00 00 00 00 00 23 23 23 36 19 3E +R 00 00 01 00 02 04 05 00 +T 8B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 90 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 04 00 +T 95 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 9C 00 00 00 FB DD 74 FC DD 71 FD DD 70 FE 21 +R 00 00 01 00 +T A7 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T B0 00 00 00 FB DD 46 FC 71 23 70 3E +R 00 00 01 00 +T B8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T BD 00 00 00 00 00 00 00 DD 7E FB DD A6 FC DD +R 00 00 01 00 02 04 00 00 +T C6 00 00 00 A6 FD DD A6 FE 3C 20 0F +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T D7 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 21 00 00 22 00 00 00 00 DD 4E FD +R 00 00 01 00 02 08 05 00 +T E6 00 00 00 DD 46 FE DD 6E FB DD 66 FC C3 +R 00 00 01 00 +T F0 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0B 00 diff --git a/src/nos/lib/filesys_lib/_mknod.rel b/src/nos/lib/filesys_lib/_mknod.rel new file mode 100644 index 00000000..340df23f --- /dev/null +++ b/src/nos/lib/filesys_lib/_mknod.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_mknod Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S __mknod Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 12 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_mount.rel b/src/nos/lib/filesys_lib/_mount.rel new file mode 100644 index 00000000..a34fb2ac --- /dev/null +++ b/src/nos/lib/filesys_lib/_mount.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_mountumount Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S __mount Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_namei.rel b/src/nos/lib/filesys_lib/_namei.rel new file mode 100644 index 00000000..c7d6add2 --- /dev/null +++ b/src/nos/lib/filesys_lib/_namei.rel @@ -0,0 +1,230 @@ +XL4 +H 3 areas F global symbols +S _magic Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _i_ref Ref00000000 +S _srch_dir Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _root_dev Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _srch_mt Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _findfs Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21E flags 0 +S __namei Def00000000 +A CSTR size 7 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 0A DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF DD 75 FC +R 00 00 01 00 +T 14 00 00 00 DD 74 FD DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 23 00 00 00 00 00 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 02 04 01 00 +T 2C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 31 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 DD 7E FC DD B6 FD 28 25 +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 01 00 00 00 00 DD 5E FC DD 56 FD +R 00 00 01 00 00 05 02 00 +T 44 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T 4A 00 00 00 00 00 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 02 04 01 00 +T 53 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 58 00 00 00 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 6E 02 DD 66 03 7E FE 2F 20 0A +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 18 EB +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 6E 02 DD 66 03 AF B6 20 03 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 C3 D6 01 00 00 +R 00 00 01 00 00 05 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 7E FC DD B6 FD 20 10 +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 93 00 00 00 02 23 36 00 C3 00 02 00 00 +R 00 00 01 00 00 09 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 21 0A 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T A5 00 00 00 E6 00 4F 23 7E E6 F0 47 3E 90 A8 +R 00 00 01 00 +T B0 00 00 00 B1 20 03 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 C3 D6 01 00 00 +R 00 00 01 00 00 05 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T BE 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T C5 00 00 00 6E FC DD 66 FD DD 75 FE DD 74 FF +R 00 00 01 00 +T D0 00 00 00 01 0A 00 09 7E E6 00 4F 23 7E E6 +R 00 00 01 00 +T DB 00 00 00 F0 47 3E 40 A8 B1 28 10 +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T EC 00 00 00 14 23 36 00 C3 00 02 00 00 +R 00 00 01 00 00 09 01 00 +T F3 00 00 00 +R 00 00 01 00 +T F3 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T FB 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0B 00 02 0A 01 00 +T 02 01 00 00 E6 01 47 7C E6 00 B0 20 10 +R 00 00 01 00 +T 0B 01 00 00 +R 00 00 01 00 +T 0B 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 14 01 00 00 01 23 36 00 C3 00 02 00 00 +R 00 00 01 00 00 09 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 21 05 00 DD 4E FE DD 46 FF 09 3E +R 00 00 01 00 +T 26 01 00 00 01 AE 23 B6 20 67 DD 6E FE DD 66 +R 00 00 01 00 +T 31 01 00 00 FF 23 23 23 46 23 66 68 ED 4B +R 00 00 01 00 +T 3B 01 00 00 00 00 00 00 A7 ED 42 28 51 DD 6E +R 00 00 01 00 02 04 08 00 +T 44 01 00 00 02 DD 66 03 23 7E FE 2E 20 45 +R 00 00 01 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 DD 6E FE DD 66 FF 23 23 23 5E 23 +R 00 00 01 00 +T 59 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 5F 01 00 00 CD 00 00 00 00 01 1A 00 09 46 23 +R 00 00 01 00 02 05 01 00 +T 68 01 00 00 66 68 DD 75 FA DD 74 FB DD 5E FE +R 00 00 01 00 +T 73 01 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 79 01 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 80 01 00 00 FA DD 66 FB DD 75 FE DD 74 FF EB +R 00 00 01 00 +T 8B 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 91 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 DD 4E 02 DD 46 03 DD 5E FE DD 56 +R 00 00 01 00 +T 9E 01 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T A4 01 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 01 00 +T AD 01 00 00 7D A4 3C 20 02 +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 18 4C +R 00 00 01 00 +T B4 01 00 00 +R 00 00 01 00 +T B4 01 00 00 +R 00 00 01 00 +T B4 01 00 00 DD 6E 02 DD 66 03 AF B6 28 15 DD +R 00 00 01 00 +T BF 01 00 00 6E 02 DD 66 03 7E FE 2F 28 0A +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 18 E1 +R 00 00 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 C3 33 00 00 00 +R 00 00 01 00 00 05 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 DD 6E FE DD 66 FF E5 DD 6E 0C DD +R 00 00 01 00 +T E1 01 00 00 66 0D C1 71 23 70 DD 6E 02 DD 66 +R 00 00 01 00 +T EC 01 00 00 03 E5 DD 6E 04 DD 66 05 C1 71 23 +R 00 00 01 00 +T F7 01 00 00 70 DD 6E FC DD 66 FD 18 1B +R 00 00 01 00 +T 00 02 00 00 +R 00 00 01 00 +T 00 02 00 00 DD 6E 0C DD 66 0D AF 77 23 77 DD +R 00 00 01 00 +T 0B 02 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 13 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 19 02 00 00 00 00 +R 00 00 01 00 +T 1B 02 00 00 +R 00 00 01 00 +T 1B 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 5F 6E 61 6D 65 69 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/_open.rel b/src/nos/lib/filesys_lib/_open.rel new file mode 100644 index 00000000..87e4a2ff --- /dev/null +++ b/src/nos/lib/filesys_lib/_open.rel @@ -0,0 +1,91 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F8 flags 0 +S __open Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 06 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 04 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 0A DD 56 0B 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 4E 0C DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 46 0D 71 23 70 DD 7E 0C E6 00 47 +R 00 00 01 00 +T 58 00 00 00 DD 7E 0D E6 01 B0 28 32 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 21 2E 00 39 01 02 00 09 DD 75 E0 +R 00 00 01 00 +T 6B 00 00 00 DD 74 E1 21 0E 00 ED 4B +R 00 00 01 00 +T 73 00 00 00 00 00 00 00 09 E5 21 04 00 39 7E +R 00 00 01 00 02 04 05 00 +T 7C 00 00 00 C6 02 77 23 7E CE 00 77 2B 6E 67 +R 00 00 01 00 +T 87 00 00 00 2B 2B 4E 23 46 E1 71 23 70 18 0C +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 21 0E 00 ED 4B 00 00 00 00 09 AF +R 00 00 01 00 02 09 05 00 +T 9B 00 00 00 77 23 77 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 2A 00 00 00 00 23 23 23 36 14 3E +R 00 00 01 00 02 05 05 00 +T A7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T AC 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 09 00 +T B1 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T B8 00 00 00 DE DD 74 DF 21 04 00 ED 4B +R 00 00 01 00 +T C1 00 00 00 00 00 00 00 09 DD 4E DE DD 46 DF +R 00 00 01 00 02 04 05 00 +T CA 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T D0 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T D7 00 00 00 3C 20 0F +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T E3 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T E9 00 00 00 +R 00 00 01 00 +T E9 00 00 00 21 00 00 22 00 00 00 00 DD 6E DE +R 00 00 01 00 02 08 05 00 +T F2 00 00 00 DD 66 DF C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_panic.rel b/src/nos/lib/filesys_lib/_panic.rel new file mode 100644 index 00000000..91e25944 --- /dev/null +++ b/src/nos/lib/filesys_lib/_panic.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___002d_e8fc__0apanic_3a_20 Ref00000000 +S __vdprintf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __dprintf Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _exit Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 51 flags 0 +S __panic Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 0E +R 00 00 01 00 02 05 06 00 +T 06 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 01 00 02 0A 01 00 +T 0C 00 00 00 21 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T 13 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 1A 00 00 00 F1 21 0C 00 39 01 04 00 09 DD 75 +R 00 00 01 00 +T 25 00 00 00 FE DD 74 FF E5 DD 6E 0C E5 DD 6E +R 00 00 01 00 +T 30 00 00 00 0A DD 66 0B E5 11 00 00 3E +R 00 00 01 00 +T 39 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 3E 00 00 00 00 00 00 00 F1 F1 F1 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 47 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 4C 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 03 00 diff --git a/src/nos/lib/filesys_lib/_read.rel b/src/nos/lib/filesys_lib/_read.rel new file mode 100644 index 00000000..85c70cb5 --- /dev/null +++ b/src/nos/lib/filesys_lib/_read.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_readwrite Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S __read Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 17 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/_stat.rel b/src/nos/lib/filesys_lib/_stat.rel new file mode 100644 index 00000000..b7a6faa4 --- /dev/null +++ b/src/nos/lib/filesys_lib/_stat.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_statfstat Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S __stat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 1B 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_symlink.rel b/src/nos/lib/filesys_lib/_symlink.rel new file mode 100644 index 00000000..5e91da58 --- /dev/null +++ b/src/nos/lib/filesys_lib/_symlink.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_symlink Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S __symlink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 26 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/_sync.rel b/src/nos/lib/filesys_lib/_sync.rel new file mode 100644 index 00000000..6e3c7b6f --- /dev/null +++ b/src/nos/lib/filesys_lib/_sync.rel @@ -0,0 +1,48 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _sys_sync Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 65 flags 0 +S __sync Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E2 FF 21 1D 00 E5 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 2A 00 00 00 00 23 23 23 36 1D 3E +R 00 00 01 00 02 05 05 00 +T 39 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 3E 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 09 00 +T 43 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 49 00 00 00 04 00 ED 4B 00 00 00 00 09 AF 77 +R 00 00 01 00 02 08 05 00 +T 52 00 00 00 23 77 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 57 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 5D 00 00 00 00 00 22 00 00 00 00 C3 +R 00 00 01 00 02 07 05 00 +T 63 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 diff --git a/src/nos/lib/filesys_lib/_sysdebug.rel b/src/nos/lib/filesys_lib/_sysdebug.rel new file mode 100644 index 00000000..92052831 --- /dev/null +++ b/src/nos/lib/filesys_lib/_sysdebug.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_getset Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A8 flags 0 +S __sysdebug Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 0C 23 36 00 21 0C 00 ED 4B +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 09 DD 5E 02 DD 56 03 +R 00 00 01 00 02 04 06 00 +T 4B 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 54 00 00 00 36 07 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 64 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 6D 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 76 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 83 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 93 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A2 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/_systrace.rel b/src/nos/lib/filesys_lib/_systrace.rel new file mode 100644 index 00000000..aa907603 --- /dev/null +++ b/src/nos/lib/filesys_lib/_systrace.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_getset Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A8 flags 0 +S __systrace Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 0B 23 36 00 21 0C 00 ED 4B +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 09 DD 5E 02 DD 56 03 +R 00 00 01 00 02 04 06 00 +T 4B 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 54 00 00 00 36 07 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 64 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 6D 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 76 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 83 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 93 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A2 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/_time.rel b/src/nos/lib/filesys_lib/_time.rel new file mode 100644 index 00000000..300a8a23 --- /dev/null +++ b/src/nos/lib/filesys_lib/_time.rel @@ -0,0 +1,69 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_time Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B1 flags 0 +S __time Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 04 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 04 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 04 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 1E 3E +R 00 00 01 00 02 04 04 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 08 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 5B 00 00 00 FB DD 74 FC DD 71 FD DD 70 FE 21 +R 00 00 01 00 +T 66 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 04 00 +T 6F 00 00 00 FB DD 46 FC 71 23 70 3E +R 00 00 01 00 +T 77 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7C 00 00 00 00 00 00 00 DD 7E FB DD A6 FC DD +R 00 00 01 00 02 04 00 00 +T 85 00 00 00 A6 FD DD A6 FE 3C 20 0F +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 04 00 +T 96 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 06 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 21 00 00 22 00 00 00 00 DD 4E FD +R 00 00 01 00 02 08 04 00 +T A5 00 00 00 DD 46 FE DD 6E FB DD 66 FC C3 +R 00 00 01 00 +T AF 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0A 00 diff --git a/src/nos/lib/filesys_lib/_umask.rel b/src/nos/lib/filesys_lib/_umask.rel new file mode 100644 index 00000000..f1d3ea84 --- /dev/null +++ b/src/nos/lib/filesys_lib/_umask.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_getset Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A8 flags 0 +S __umask Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 0A 23 36 00 21 0C 00 ED 4B +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 09 DD 5E 02 DD 56 03 +R 00 00 01 00 02 04 06 00 +T 4B 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 54 00 00 00 36 07 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 64 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 6D 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 76 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 83 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 93 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A2 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/_umount.rel b/src/nos/lib/filesys_lib/_umount.rel new file mode 100644 index 00000000..210bd3ee --- /dev/null +++ b/src/nos/lib/filesys_lib/_umount.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_mountumount Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S __umount Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 20 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 05 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/_unlink.rel b/src/nos/lib/filesys_lib/_unlink.rel new file mode 100644 index 00000000..56b8790d --- /dev/null +++ b/src/nos/lib/filesys_lib/_unlink.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S _sys_unlink Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S __unlink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 21 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 04 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/_write.rel b/src/nos/lib/filesys_lib/_write.rel new file mode 100644 index 00000000..3ab5f965 --- /dev/null +++ b/src/nos/lib/filesys_lib/_write.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_readwrite Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S __write Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 24 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/access.rel b/src/nos/lib/filesys_lib/access.rel new file mode 100644 index 00000000..6255cb37 --- /dev/null +++ b/src/nos/lib/filesys_lib/access.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_access Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A4 flags 0 +S _access Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T 55 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 60 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 69 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 72 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7F 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 8F 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T 9E 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/bdreadwrite.rel b/src/nos/lib/filesys_lib/bdreadwrite.rel new file mode 100644 index 00000000..24921326 --- /dev/null +++ b/src/nos/lib/filesys_lib/bdreadwrite.rel @@ -0,0 +1,67 @@ +XL4 +H 3 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _validdev Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8B flags 0 +S _bdreadwrite Def00000000 +A CSTR size F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 03 3E 02 84 67 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FC DD 74 FD 0C 0D 20 05 01 +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 18 03 +R 00 00 01 00 00 04 02 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 01 07 00 00 00 +R 00 00 01 00 00 05 02 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 2D 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 34 00 00 00 75 FE DD 74 FF 21 1A 00 ED 4B +R 00 00 01 00 +T 3E 00 00 00 00 00 00 00 09 DD 4E 02 DD 46 03 +R 00 00 01 00 02 04 03 00 +T 47 00 00 00 71 23 70 AF DD B6 04 28 1D +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 0E 00 C5 DD 5E FC 21 0D 00 DD 4E +R 00 00 01 00 +T 5B 00 00 00 FE DD 46 FF 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 66 00 00 00 60 C1 CD 00 00 00 00 18 1B +R 00 00 01 00 02 07 00 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 0E 00 C5 DD 5E FC 21 0A 00 DD 4E +R 00 00 01 00 +T 78 00 00 00 FE DD 46 FF 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 83 00 00 00 60 C1 CD 00 00 00 00 +R 00 00 01 00 02 07 00 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 62 64 72 65 61 64 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 62 64 77 72 69 74 65 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/bfind.rel b/src/nos/lib/filesys_lib/bfind.rel new file mode 100644 index 00000000..35517c20 --- /dev/null +++ b/src/nos/lib/filesys_lib/bfind.rel @@ -0,0 +1,64 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Bufpool Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7E flags 0 +S _bfind Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 36 FC +R 00 00 01 00 02 05 03 00 +T 08 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 01 00 8B 0B 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 01 06 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 01 00 +T 16 00 00 00 A7 ED 42 30 5D +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 26 00 00 00 75 FE DD 74 FF 7D B4 28 3A DD 6E +R 00 00 01 00 +T 31 00 00 00 FE DD 66 FF 3E 02 84 67 46 23 66 +R 00 00 01 00 +T 3C 00 00 00 68 DD 4E 02 DD 46 03 A7 ED 42 20 +R 00 00 01 00 +T 47 00 00 00 21 21 02 02 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T 52 00 00 00 46 23 66 68 DD 4E 04 DD 46 05 A7 +R 00 00 01 00 +T 5D 00 00 00 ED 42 20 08 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 6E FE DD 66 FF 18 12 +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T 74 00 00 00 34 FD +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 18 95 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 21 00 00 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/filesys_lib/bfree.rel b/src/nos/lib/filesys_lib/bfree.rel new file mode 100644 index 00000000..d5500634 --- /dev/null +++ b/src/nos/lib/filesys_lib/bfree.rel @@ -0,0 +1,86 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0413_7943_attempt_20to_20writ Ref00000000 +S _bdreadwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Bufpool Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ksignal Ref00000000 +S __panic Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A2 flags 0 +S _bfree Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 04 02 19 7E B1 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 77 21 05 02 19 36 00 21 04 02 19 +R 00 00 01 00 +T 14 00 00 00 7E B7 28 21 DD 6E 02 DD 66 03 3E +R 00 00 01 00 +T 1F 00 00 00 02 84 67 7E 23 A6 3C 20 11 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 2E 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 34 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 21 04 02 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 44 00 00 00 FE 02 38 38 +R 00 00 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 0E 01 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 51 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 56 00 00 00 00 00 00 00 CB 7C 28 12 +R 00 00 01 00 02 04 00 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 65 00 00 00 05 23 36 00 21 FF FF 18 31 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 21 04 02 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 79 00 00 00 00 21 06 02 09 36 00 +R 00 00 01 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 21 06 02 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 8B 00 00 00 B7 20 0E +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 01 00 00 11 00 00 00 00 3E +R 00 00 01 00 02 08 04 00 +T 95 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 9A 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 21 00 00 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/blk_alloc.rel b/src/nos/lib/filesys_lib/blk_alloc.rel new file mode 100644 index 00000000..410545a7 --- /dev/null +++ b/src/nos/lib/filesys_lib/blk_alloc.rel @@ -0,0 +1,151 @@ +XL4 +H 3 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _validblk Ref00000000 +S _xip_find Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __dprintf Ref00000000 +S _getfs Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _Badfsmsg Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 166 flags 0 +S _blk_alloc Def00000000 +A CSTR size A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 5E 02 DD +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 11 19 00 19 7E B7 28 +R 00 00 01 00 +T 20 00 00 00 10 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 2A 00 00 00 1E 23 36 00 C3 60 01 00 00 +R 00 00 01 00 00 09 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 21 14 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 3C 00 00 00 23 56 D5 21 12 00 09 5E 23 56 D5 +R 00 00 01 00 +T 47 00 00 00 21 01 00 E5 21 00 00 E5 01 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 5A 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 61 00 00 00 F1 F1 F1 DD 75 FC DD 74 FD 21 +R 00 00 01 00 +T 6B 00 00 00 04 00 DD 4E FE DD 46 FF 09 56 23 +R 00 00 01 00 +T 76 00 00 00 66 6A E5 03 03 69 60 4E 23 46 E1 +R 00 00 01 00 +T 81 00 00 00 09 4D 44 DD 6E FC DD 66 FD A7 ED +R 00 00 01 00 +T 8C 00 00 00 42 38 18 21 06 00 DD 4E FE DD 46 +R 00 00 01 00 +T 97 00 00 00 FF 09 4E 23 46 DD 6E FC DD 66 FD +R 00 00 01 00 +T A2 00 00 00 A7 ED 42 38 03 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 C3 53 01 00 00 +R 00 00 01 00 00 05 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 DD 4E FC DD 46 FD DD 5E 02 DD 56 +R 00 00 01 00 +T B5 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T BB 00 00 00 CD 00 00 00 00 21 08 00 DD 4E FE +R 00 00 01 00 02 05 00 00 +T C4 00 00 00 DD 46 FF 09 7E 23 B6 20 02 +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 18 54 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 21 08 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T DA 00 00 00 23 46 0B 70 2B 71 0E 02 C5 DD 4E +R 00 00 01 00 +T E5 00 00 00 FC DD 46 FD DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T F0 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T F5 00 00 00 00 00 00 00 F1 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 00 00 +T FE 00 00 00 7D B4 20 02 +R 00 00 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 18 4F +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 DD 4E 04 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 0E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 13 01 00 00 00 00 00 00 CB 7C 28 02 +R 00 00 01 00 02 04 00 00 +T 19 01 00 00 +R 00 00 01 00 +T 19 01 00 00 18 38 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 DD 6E FC DD 66 FD 18 40 +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T 2B 01 00 00 00 00 00 00 E5 3A 02 00 00 00 4F +R 00 00 01 00 00 04 02 00 02 0A 09 00 +T 32 01 00 00 C5 2A 00 00 00 00 E5 21 00 00 E5 +R 00 00 01 00 02 06 09 00 +T 3B 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 41 01 00 00 00 00 00 00 F1 F1 F1 F1 F1 DD 6E +R 00 00 01 00 02 04 00 00 +T 4A 01 00 00 FE DD 66 FF 36 39 23 36 CE +R 00 00 01 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 5C 01 00 00 1C 23 36 00 +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 21 00 00 +R 00 00 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 62 6C 6B 5F 61 6C 6C 6F 63 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/blk_free.rel b/src/nos/lib/filesys_lib/blk_free.rel new file mode 100644 index 00000000..a02a4afe --- /dev/null +++ b/src/nos/lib/filesys_lib/blk_free.rel @@ -0,0 +1,89 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _validblk Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _getfs Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _xip_set Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C4 flags 0 +S _blk_free Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF DD 5E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 11 19 00 19 7E B7 20 +R 00 00 01 00 +T 20 00 00 00 08 DD 7E 04 DD B6 05 20 03 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 C3 C1 00 00 00 +R 00 00 01 00 00 05 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 37 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 3D 00 00 00 CD 00 00 00 00 21 14 00 DD 4E FE +R 00 00 01 00 02 05 00 00 +T 46 00 00 00 DD 46 FF 09 5E 23 56 D5 21 12 00 +R 00 00 01 00 +T 51 00 00 00 09 4E 23 46 C5 21 00 00 E5 DD 4E +R 00 00 01 00 +T 5C 00 00 00 04 DD 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 67 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 6C 00 00 00 00 00 00 00 F1 F1 F1 3E 01 AD B4 +R 00 00 01 00 02 04 00 00 +T 75 00 00 00 28 02 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 18 B0 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 21 16 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 84 00 00 00 23 56 D5 21 14 00 09 4E 23 46 C5 +R 00 00 01 00 +T 8F 00 00 00 21 00 00 E5 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T 9A 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T A2 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T A9 00 00 00 F1 7D A4 3C 20 03 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 C3 29 00 00 00 +R 00 00 01 00 00 05 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 21 08 00 DD 4E FE DD 46 FF 09 34 +R 00 00 01 00 +T BD 00 00 00 23 20 01 34 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/bmap.rel b/src/nos/lib/filesys_lib/bmap.rel new file mode 100644 index 00000000..1b38f375 --- /dev/null +++ b/src/nos/lib/filesys_lib/bmap.rel @@ -0,0 +1,255 @@ +XL4 +H 2 areas B global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _isdevice Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _blk_alloc Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26C flags 0 +S _bmap Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF DD 5E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 2C 2D +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 15 00 00 00 28 09 +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E 04 DD 66 05 C3 69 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 6E 02 DD 66 03 23 23 23 46 23 +R 00 00 01 00 +T 2B 00 00 00 66 68 DD 75 F4 DD 74 F5 01 12 00 +R 00 00 01 00 +T 36 00 00 00 DD 6E 04 DD 66 05 A7 ED 42 30 67 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 6E 04 DD 66 05 29 DD 4E 02 DD +R 00 00 01 00 +T 4C 00 00 00 46 03 09 01 22 00 09 DD 75 FC DD +R 00 00 01 00 +T 57 00 00 00 74 FD 46 23 66 68 DD 75 FE DD 74 +R 00 00 01 00 +T 62 00 00 00 FF 7D B4 20 3E +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 AF DD B6 0A 20 1A 0E 01 DD 5E F4 +R 00 00 01 00 +T 72 00 00 00 DD 56 F5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 06 00 +T 78 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 7F 00 00 00 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 C3 8E 01 00 00 +R 00 00 01 00 00 05 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD +R 00 00 01 00 +T 95 00 00 00 66 FD C1 71 23 70 DD 6E 02 DD 66 +R 00 00 01 00 +T A0 00 00 00 03 23 23 36 01 +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 C3 63 02 00 00 +R 00 00 01 00 00 05 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 21 10 00 39 7E D6 12 77 23 7E DE +R 00 00 01 00 +T B3 00 00 00 00 77 AF DD 77 FA DD 77 FB DD 36 +R 00 00 01 00 +T BE 00 00 00 F8 02 DD 36 F9 00 01 00 01 DD 6E +R 00 00 01 00 +T C9 00 00 00 04 DD 66 05 A7 ED 42 38 22 +R 00 00 01 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 DD 36 FA 08 DD 36 FB 00 21 10 00 +R 00 00 01 00 +T DD 00 00 00 39 7E D6 00 77 23 7E DE 01 77 21 +R 00 00 01 00 +T E8 00 00 00 04 00 39 7E D6 01 77 23 7E DE 00 +R 00 00 01 00 +T F3 00 00 00 77 +R 00 00 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 DD 4E F8 DD 46 F9 21 14 00 A7 ED +R 00 00 01 00 +T FF 00 00 00 42 29 DD 4E 02 DD 46 03 09 01 +R 00 00 01 00 +T 09 01 00 00 22 00 09 DD 75 FC DD 74 FD 46 23 +R 00 00 01 00 +T 14 01 00 00 66 68 DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 1F 01 00 00 3D +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 AF DD B6 0A 20 1A 0E 02 DD 5E F4 +R 00 00 01 00 +T 2B 01 00 00 DD 56 F5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 06 00 +T 31 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 38 01 00 00 FE DD 74 FF 7D B4 20 02 +R 00 00 01 00 +T 40 01 00 00 +R 00 00 01 00 +T 40 01 00 00 +R 00 00 01 00 +T 40 01 00 00 +R 00 00 01 00 +T 40 01 00 00 18 4C +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD +R 00 00 01 00 +T 4D 01 00 00 66 FD C1 71 23 70 DD 6E 02 DD 66 +R 00 00 01 00 +T 58 01 00 00 03 23 23 36 01 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 DD 4E F8 DD 46 F9 21 02 00 A7 ED +R 00 00 01 00 +T 68 01 00 00 42 DA 63 02 00 00 +R 00 00 01 00 00 06 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 0E 00 C5 DD 4E FE DD 46 FF DD 5E +R 00 00 01 00 +T 77 01 00 00 F4 DD 56 F5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 7E 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 85 01 00 00 75 FC DD 74 FD 7D B4 20 06 +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 21 FF FF C3 69 02 00 00 +R 00 00 01 00 00 08 01 00 +T 94 01 00 00 +R 00 00 01 00 +T 94 01 00 00 DD 46 FA DD 5E 04 DD 56 05 CD +R 00 00 01 00 +T 9E 01 00 00 00 00 00 00 7B E6 FF 6F 7A E6 00 +R 00 00 01 00 02 04 00 00 +T A7 01 00 00 67 DD 75 F6 DD 74 F7 29 DD 4E FC +R 00 00 01 00 +T B2 01 00 00 DD 46 FD 09 46 23 66 68 DD 75 FE +R 00 00 01 00 +T BD 01 00 00 DD 74 FF 7D B4 28 18 +R 00 00 01 00 +T C4 01 00 00 +R 00 00 01 00 +T C4 01 00 00 0E 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T CD 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T D2 01 00 00 00 00 00 00 CB 7C 28 02 +R 00 00 01 00 02 04 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 18 B4 +R 00 00 01 00 +T DA 01 00 00 +R 00 00 01 00 +T DA 01 00 00 18 6F +R 00 00 01 00 +T DC 01 00 00 +R 00 00 01 00 +T DC 01 00 00 AF DD B6 0A 20 28 3E 02 DD AE F8 +R 00 00 01 00 +T E7 01 00 00 DD B6 F9 20 04 0E 01 18 02 +R 00 00 01 00 +T F0 01 00 00 +R 00 00 01 00 +T F0 01 00 00 0E 02 +R 00 00 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 DD 5E F4 DD 56 F5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T FA 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 01 02 00 00 75 FE DD 74 FF 7D B4 20 13 +R 00 00 01 00 +T 0A 02 00 00 +R 00 00 01 00 +T 0A 02 00 00 +R 00 00 01 00 +T 0A 02 00 00 +R 00 00 01 00 +T 0A 02 00 00 0E 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 13 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 18 02 00 00 00 00 00 00 C3 8E 01 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T 1D 02 00 00 +R 00 00 01 00 +T 1D 02 00 00 DD 6E F6 DD 66 F7 29 DD 4E FC DD +R 00 00 01 00 +T 28 02 00 00 46 FD 09 DD 5E FE DD 56 FF 73 23 +R 00 00 01 00 +T 33 02 00 00 72 0E 01 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 3D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 42 02 00 00 00 00 00 00 CB 7C 28 03 +R 00 00 01 00 02 04 01 00 +T 48 02 00 00 +R 00 00 01 00 +T 48 02 00 00 C3 8E 01 00 00 +R 00 00 01 00 00 05 01 00 +T 4B 02 00 00 +R 00 00 01 00 +T 4B 02 00 00 +R 00 00 01 00 +T 4B 02 00 00 21 06 00 39 7E D6 08 77 23 7E DE +R 00 00 01 00 +T 56 02 00 00 00 77 DD 34 F8 20 03 DD 34 F9 +R 00 00 01 00 +T 60 02 00 00 +R 00 00 01 00 +T 60 02 00 00 C3 5D 01 00 00 +R 00 00 01 00 00 05 01 00 +T 63 02 00 00 +R 00 00 01 00 +T 63 02 00 00 +R 00 00 01 00 +T 63 02 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 69 02 00 00 +R 00 00 01 00 +T 69 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/bread.rel b/src/nos/lib/filesys_lib/bread.rel new file mode 100644 index 00000000..f47683d6 --- /dev/null +++ b/src/nos/lib/filesys_lib/bread.rel @@ -0,0 +1,132 @@ +XL4 +H 2 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfind Ref00000000 +S ___05e0_674e_want_20busy_20block Ref00000000 +S _bufclock Ref00000000 +S _memset Ref00000000 +S _bdreadwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _buf_hits Ref00000000 +S _buf_miss Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _freebuf Ref00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10E flags 0 +S _bread Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 0D 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 28 38 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 05 02 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 28 00 00 00 B7 28 21 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 6E 02 DD 66 03 E5 DD 6E 04 DD +R 00 00 01 00 +T 36 00 00 00 66 05 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 02 00 +T 3D 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 0A 0C 00 +T 43 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 4A 00 00 00 F1 F1 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 02 05 07 00 02 0B 07 00 +T 53 00 00 00 18 7C +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 02 05 08 00 02 0B 08 00 +T 5C 00 00 00 1E 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 61 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 68 00 00 00 FE DD 74 FF 7D B4 20 02 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 18 5A +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 DD 6E FE DD 66 FF 3E 02 84 67 DD +R 00 00 01 00 +T 7D 00 00 00 4E 02 DD 46 03 71 23 70 21 02 02 +R 00 00 01 00 +T 88 00 00 00 DD 4E FE DD 46 FF 09 DD 4E 04 DD +R 00 00 01 00 +T 93 00 00 00 46 05 71 23 70 AF DD B6 0A 20 33 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 0E 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T A7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T AC 00 00 00 00 00 00 00 CB 7C 28 1F +R 00 00 01 00 02 04 00 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 21 08 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 09 00 +T BB 00 00 00 23 B6 20 0D +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 09 00 +T C8 00 00 00 05 23 36 00 +R 00 00 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 21 00 00 18 3A +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 3E 01 DD BE 0A 30 16 +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 21 00 02 E5 01 00 00 DD 5E FE DD +R 00 00 01 00 +T E3 00 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T E8 00 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 21 05 02 DD 4E FE DD 46 FF 09 34 +R 00 00 01 00 +T F9 00 00 00 21 07 02 09 ED 5B 00 00 00 00 13 +R 00 00 01 00 02 0A 03 00 +T 02 01 00 00 ED 53 00 00 00 00 73 23 72 69 60 +R 00 00 01 00 02 06 03 00 +T 0B 01 00 00 +R 00 00 01 00 +T 0B 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/filesys_lib/buf_flsh.rel b/src/nos/lib/filesys_lib/buf_flsh.rel new file mode 100644 index 00000000..fcd957b5 --- /dev/null +++ b/src/nos/lib/filesys_lib/buf_flsh.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _buf_flsh Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/buf_hits.rel b/src/nos/lib/filesys_lib/buf_hits.rel new file mode 100644 index 00000000..8833dc4c --- /dev/null +++ b/src/nos/lib/filesys_lib/buf_hits.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _buf_hits Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/buf_miss.rel b/src/nos/lib/filesys_lib/buf_miss.rel new file mode 100644 index 00000000..36b8aa51 --- /dev/null +++ b/src/nos/lib/filesys_lib/buf_miss.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _buf_miss Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/bufclock.rel b/src/nos/lib/filesys_lib/bufclock.rel new file mode 100644 index 00000000..9f506027 --- /dev/null +++ b/src/nos/lib/filesys_lib/bufclock.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _bufclock Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/bufdump.rel b/src/nos/lib/filesys_lib/bufdump.rel new file mode 100644 index 00000000..a03d2bd3 --- /dev/null +++ b/src/nos/lib/filesys_lib/bufdump.rel @@ -0,0 +1,112 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___01f7_de82_Buf_20hits_2fmiss_2 Ref00000000 +S _bufclock Ref00000000 +S _buf_flsh Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _buf_hits Ref00000000 +S _Bufpool Ref00000000 +S _buf_miss Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___000a_1c3a__09_25p_09_25u_09_2 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F0 flags 0 +S _bufdump Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 09 00 +T 06 00 00 00 00 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 02 04 02 00 02 0A 03 00 +T 0D 00 00 00 2A 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 02 05 07 00 02 0B 05 00 +T 14 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 01 00 +T 19 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 0B 00 +T 1F 00 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 26 00 00 00 0C 00 39 F9 EB DD 36 FC +R 00 00 01 00 +T 2E 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 06 00 8B 0B 06 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 01 06 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 06 00 +T 3C 00 00 00 A7 ED 42 D2 E1 00 00 00 +R 00 00 01 00 00 08 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 4D 00 00 00 75 FE DD 74 FF 7D B4 28 7B +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 21 07 02 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 61 00 00 00 23 56 D5 21 06 02 09 7E B7 28 05 +R 00 00 01 00 +T 6C 00 00 00 21 70 00 18 03 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 21 2D 00 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 E5 21 05 02 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T 7F 00 00 00 7E B7 28 05 21 62 00 18 03 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 21 2D 00 +R 00 00 01 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 E5 21 04 02 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T 96 00 00 00 7E B7 28 05 21 64 00 18 03 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 2D 00 +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 E5 21 02 02 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T AD 00 00 00 5E 23 56 D5 3E 02 80 47 69 60 4E +R 00 00 01 00 +T B8 00 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0A 00 +T BF 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 0A 0B 00 +T C5 00 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T CC 00 00 00 10 00 39 F9 EB +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T DC 00 00 00 34 FD +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 C3 33 00 00 00 +R 00 00 01 00 00 05 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 21 00 00 22 00 00 00 00 22 +R 00 00 01 00 02 08 03 00 +T E8 00 00 00 00 00 00 00 22 00 00 00 00 C3 +R 00 00 01 00 02 04 05 00 02 09 07 00 +T EE 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 diff --git a/src/nos/lib/filesys_lib/bufinit.rel b/src/nos/lib/filesys_lib/bufinit.rel new file mode 100644 index 00000000..7fa6da2c --- /dev/null +++ b/src/nos/lib/filesys_lib/bufinit.rel @@ -0,0 +1,128 @@ +XL4 +H 2 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0413_7943_attempt_20to_20writ Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _buf_flsh Ref00000000 +S _bdreadwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __dprintf Ref00000000 +S _Bufpool Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0459_3f12_devio_5fgarbage_3a_ Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E9 flags 0 +S _bufinit Def00000000 +S _devio_garbage Def00000003 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 03 00 00 00 +R 00 00 01 00 +T 03 00 00 00 CD 00 00 00 00 FC FF DD 36 FC +R 00 00 01 00 02 05 0B 00 +T 0B 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 07 00 8B 0B 07 00 +T 10 00 00 00 +R 00 00 01 00 +T 10 00 00 00 01 06 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 07 00 +T 19 00 00 00 A7 ED 42 D2 E6 00 00 00 +R 00 00 01 00 00 08 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 2A 00 00 00 75 FE DD 74 FF 7D B4 CA +R 00 00 01 00 +T 32 00 00 00 D6 00 00 00 21 05 02 DD 4E FE DD +R 00 00 01 00 00 04 01 00 +T 3B 00 00 00 46 FF 09 7E B7 C2 D6 00 00 00 21 +R 00 00 01 00 00 0A 01 00 +T 44 00 00 00 06 02 DD 4E FE DD 46 FF 09 7E B7 +R 00 00 01 00 +T 4F 00 00 00 C2 D6 00 00 00 +R 00 00 01 00 00 05 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 21 04 02 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 5D 00 00 00 B7 28 5E +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 7E 02 DD B6 03 20 02 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 18 6C +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 DD 6E FE DD 66 FF 3E 02 84 67 7E +R 00 00 01 00 +T 75 00 00 00 23 A6 3C 20 11 +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 80 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 86 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 03 00 +T 92 00 00 00 0E 01 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 9B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T A0 00 00 00 00 00 00 00 CB 7C 28 18 +R 00 00 01 00 02 04 00 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0D 00 02 0B 0D 00 +T AC 00 00 00 E5 21 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T B4 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T BB 00 00 00 F1 18 18 +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T C6 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T CD 00 00 00 6E FC DD 66 FD AF 77 23 77 +R 00 00 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T E1 00 00 00 34 FD +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 C3 10 00 00 00 +R 00 00 01 00 00 05 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/filesys_lib/bufsync.rel b/src/nos/lib/filesys_lib/bufsync.rel new file mode 100644 index 00000000..7df2b279 --- /dev/null +++ b/src/nos/lib/filesys_lib/bufsync.rel @@ -0,0 +1,72 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bdreadwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Bufpool Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8D flags 0 +S _bufsync Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 36 FC +R 00 00 01 00 02 05 05 00 +T 08 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 03 00 8B 0B 03 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 01 06 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 03 00 +T 16 00 00 00 A7 ED 42 30 6F +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 26 00 00 00 75 FE DD 74 FF 7D B4 28 4C DD 6E +R 00 00 01 00 +T 31 00 00 00 FE DD 66 FF 3E 02 84 67 7E 23 A6 +R 00 00 01 00 +T 3C 00 00 00 3C 28 3C 21 04 02 DD 4E FE DD 46 +R 00 00 01 00 +T 47 00 00 00 FF 09 7E B7 28 2E 21 06 02 DD 4E +R 00 00 01 00 +T 52 00 00 00 FE DD 46 FF 09 7E B7 20 20 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 0E 01 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 69 00 00 00 00 00 00 00 7D B4 20 0C +R 00 00 01 00 02 04 00 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 21 04 02 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T 7A 00 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T 86 00 00 00 34 FD +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 18 83 +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/cdreadwrite.rel b/src/nos/lib/filesys_lib/cdreadwrite.rel new file mode 100644 index 00000000..f12586c3 --- /dev/null +++ b/src/nos/lib/filesys_lib/cdreadwrite.rel @@ -0,0 +1,58 @@ +XL4 +H 3 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _validdev Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 66 flags 0 +S _cdreadwrite Def00000000 +A CSTR size F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 0C 0D 20 05 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 00 00 00 00 18 03 +R 00 00 01 00 00 05 02 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 01 07 00 00 00 +R 00 00 01 00 00 05 02 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 19 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 20 00 00 00 75 FE DD 74 FF AF DD B6 04 28 1D +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 0E 01 C5 DD 5E 02 21 0D 00 DD 4E +R 00 00 01 00 +T 36 00 00 00 FE DD 46 FF 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 41 00 00 00 60 C1 CD 00 00 00 00 18 1B +R 00 00 01 00 02 07 00 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 0E 01 C5 DD 5E 02 21 0A 00 DD 4E +R 00 00 01 00 +T 53 00 00 00 FE DD 46 FF 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 5E 00 00 00 60 C1 CD 00 00 00 00 +R 00 00 01 00 02 07 00 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 63 64 72 65 61 64 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 63 64 77 72 69 74 65 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/ch_link.rel b/src/nos/lib/filesys_lib/ch_link.rel new file mode 100644 index 00000000..142e8d9a --- /dev/null +++ b/src/nos/lib/filesys_lib/ch_link.rel @@ -0,0 +1,210 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _namecomp Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?L_ANDASG_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _readwritei Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setftim Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20B flags 0 +S _ch_link Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EE FF DD 5E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 7D E6 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 15 00 00 00 02 57 7C E6 00 B2 20 10 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T 26 00 00 00 01 23 36 00 C3 AE 01 00 00 +R 00 00 01 00 00 09 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 16 00 ED 4B 00 00 00 00 09 AF +R 00 00 01 00 02 09 04 00 +T 36 00 00 00 77 23 77 23 77 23 77 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 12 00 ED 4B 00 00 00 00 09 E5 +R 00 00 01 00 02 09 04 00 +T 46 00 00 00 21 02 00 39 5D 54 E1 73 23 72 21 +R 00 00 01 00 +T 51 00 00 00 14 00 ED 4B 00 00 00 00 09 36 10 +R 00 00 01 00 02 08 04 00 +T 5A 00 00 00 23 36 00 21 1C 00 ED 4B +R 00 00 01 00 +T 62 00 00 00 00 00 00 00 09 36 01 DD 4E 02 DD +R 00 00 01 00 02 04 04 00 +T 6B 00 00 00 46 03 1E 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T 72 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 78 00 00 00 14 00 ED 4B 00 00 00 00 09 7E 23 +R 00 00 01 00 02 08 04 00 +T 81 00 00 00 B6 28 1C 21 00 00 39 01 02 00 09 +R 00 00 01 00 +T 8C 00 00 00 4D 44 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 95 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 9A 00 00 00 00 00 00 00 7D B4 28 02 +R 00 00 01 00 02 04 00 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 18 02 +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 18 99 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 21 14 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 04 00 +T AD 00 00 00 23 B6 20 1A DD 6E 04 DD 66 05 AF +R 00 00 01 00 +T B8 00 00 00 B6 28 10 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T C4 00 00 00 02 23 36 00 C3 AE 01 00 00 +R 00 00 01 00 00 09 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 21 00 00 39 01 02 00 09 DD 75 04 +R 00 00 01 00 +T D6 00 00 00 DD 74 05 DD 36 FE 0E DD 36 FF 00 +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 DD 6E FE DD 66 FF 2B DD 75 FE DD +R 00 00 01 00 +T EC 00 00 00 74 FF CB 7C 20 24 +R 00 00 01 00 +T F2 00 00 00 +R 00 00 01 00 +T F2 00 00 00 DD 6E 0A DD 66 0B 46 DD 6E 04 DD +R 00 00 01 00 +T FD 00 00 00 66 05 23 DD 75 04 DD 74 05 2B 70 +R 00 00 01 00 +T 08 01 00 00 04 05 28 08 +R 00 00 01 00 +T 0C 01 00 00 +R 00 00 01 00 +T 0C 01 00 00 DD 34 0A 20 03 DD 34 0B +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 18 CB +R 00 00 01 00 +T 16 01 00 00 +R 00 00 01 00 +T 16 01 00 00 DD 7E 0C DD B6 0D 28 10 21 05 00 +R 00 00 01 00 +T 21 01 00 00 DD 4E 0C DD 46 0D 09 46 23 66 68 +R 00 00 01 00 +T 2C 01 00 00 18 03 +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 21 00 00 +R 00 00 01 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 DD 75 EE DD 74 EF 21 14 00 ED 4B +R 00 00 01 00 +T 3C 01 00 00 00 00 00 00 09 7E 23 B6 28 17 +R 00 00 01 00 02 04 04 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 21 16 00 ED 4B 00 00 00 00 09 E5 +R 00 00 01 00 02 09 04 00 +T 4D 01 00 00 21 14 00 09 5E 23 56 01 00 00 E1 +R 00 00 01 00 +T 58 01 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0C 00 +T 5B 01 00 00 +R 00 00 01 00 +T 5B 01 00 00 21 12 00 ED 4B 00 00 00 00 09 E5 +R 00 00 01 00 02 09 04 00 +T 64 01 00 00 21 02 00 39 5D 54 E1 73 23 72 21 +R 00 00 01 00 +T 6F 01 00 00 14 00 ED 4B 00 00 00 00 09 36 10 +R 00 00 01 00 02 08 04 00 +T 78 01 00 00 23 36 00 21 08 00 ED 4B +R 00 00 01 00 +T 80 01 00 00 00 00 00 00 09 AF 77 23 77 21 +R 00 00 01 00 02 04 04 00 +T 88 01 00 00 1C 00 ED 4B 00 00 00 00 09 36 01 +R 00 00 01 00 02 08 04 00 +T 91 01 00 00 DD 4E 02 DD 46 03 1E 01 3E +R 00 00 01 00 +T 9A 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 9F 01 00 00 00 00 00 00 21 08 00 ED 4B +R 00 00 01 00 02 04 00 00 +T A6 01 00 00 00 00 00 00 09 7E 23 B6 28 05 +R 00 00 01 00 02 04 04 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 21 00 00 18 55 +R 00 00 01 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 21 12 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T BE 01 00 00 23 56 23 4E 23 46 EB 7D E6 FF 47 +R 00 00 01 00 +T C9 01 00 00 7C E6 01 B0 28 26 +R 00 00 01 00 +T CF 01 00 00 +R 00 00 01 00 +T CF 01 00 00 21 12 00 DD 4E 02 DD 46 03 09 01 +R 00 00 01 00 +T DA 01 00 00 FF FF 11 00 FE CD 00 00 00 00 21 +R 00 00 01 00 02 0A 06 00 +T E3 01 00 00 12 00 DD 4E 02 DD 46 03 09 01 +R 00 00 01 00 +T ED 01 00 00 00 00 11 00 02 CD 00 00 00 00 +R 00 00 01 00 02 0A 03 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 0E 07 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T FE 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 03 02 00 00 00 00 00 00 21 01 00 +R 00 00 01 00 02 04 00 00 +T 08 02 00 00 +R 00 00 01 00 +T 08 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/chany.rel b/src/nos/lib/filesys_lib/chany.rel new file mode 100644 index 00000000..d7f4adaa --- /dev/null +++ b/src/nos/lib/filesys_lib/chany.rel @@ -0,0 +1,102 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _namei Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setftim Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F8 flags 0 +S _chany Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 1E 01 D5 01 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 17 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 7D B4 20 02 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 18 4E +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 04 00 +T 2E 00 00 00 1D 00 09 46 23 66 68 E5 21 0E 00 +R 00 00 01 00 +T 39 00 00 00 DD 4E FE DD 46 FF 09 4E 23 46 E1 +R 00 00 01 00 +T 44 00 00 00 A7 ED 42 28 30 2A 00 00 00 00 46 +R 00 00 01 00 02 0A 04 00 +T 4D 00 00 00 23 66 68 01 1D 00 09 7E 23 B6 28 +R 00 00 01 00 +T 58 00 00 00 20 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 61 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 68 00 00 00 08 00 ED 4B 00 00 00 00 09 36 01 +R 00 00 01 00 02 08 04 00 +T 71 00 00 00 23 36 00 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 21 FF FF 18 7C +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 AF DD B6 0C 28 35 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 21 0A 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 8A 00 00 00 E6 00 77 23 7E E6 F0 77 21 0A 00 +R 00 00 01 00 +T 95 00 00 00 09 E5 21 0A 00 09 DD 7E 04 E6 FF +R 00 00 01 00 +T A0 00 00 00 4F DD 7E 05 E6 0F 47 7E B1 5F 23 +R 00 00 01 00 +T AB 00 00 00 7E B0 57 E1 73 23 72 18 20 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 21 0E 00 DD 4E FE DD 46 FF 09 DD +R 00 00 01 00 +T BF 00 00 00 5E 04 DD 56 05 73 23 72 21 10 00 +R 00 00 01 00 +T CA 00 00 00 09 DD 4E 0A DD 46 0B 71 23 70 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 0E 04 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T DD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T E2 00 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 02 04 00 00 +T EB 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T F0 00 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 00 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/chdir.rel b/src/nos/lib/filesys_lib/chdir.rel new file mode 100644 index 00000000..28d3fb40 --- /dev/null +++ b/src/nos/lib/filesys_lib/chdir.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_chdir Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _chdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 03 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 03 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/chmod.rel b/src/nos/lib/filesys_lib/chmod.rel new file mode 100644 index 00000000..b836d9ab --- /dev/null +++ b/src/nos/lib/filesys_lib/chmod.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_chmod Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _chmod Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 04 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/chown.rel b/src/nos/lib/filesys_lib/chown.rel new file mode 100644 index 00000000..8ca413ad --- /dev/null +++ b/src/nos/lib/filesys_lib/chown.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_chown Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _chown Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/close.rel b/src/nos/lib/filesys_lib/close.rel new file mode 100644 index 00000000..5629806e --- /dev/null +++ b/src/nos/lib/filesys_lib/close.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_close Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _close Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 06 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 05 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/creat.rel b/src/nos/lib/filesys_lib/creat.rel new file mode 100644 index 00000000..5f88c9f8 --- /dev/null +++ b/src/nos/lib/filesys_lib/creat.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B9 flags 0 +S _creat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 36 01 23 36 +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 03 21 0E 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 DD 5E 04 DD 56 05 73 23 72 2A +R 00 00 01 00 +T 60 00 00 00 00 00 00 00 23 23 23 36 14 3E +R 00 00 01 00 02 04 05 00 +T 68 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 6D 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 09 00 +T 72 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 79 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 05 00 +T 8B 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 91 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 98 00 00 00 3C 20 0F +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T A4 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T B3 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/d_init.rel b/src/nos/lib/filesys_lib/d_init.rel new file mode 100644 index 00000000..45a366b8 --- /dev/null +++ b/src/nos/lib/filesys_lib/d_init.rel @@ -0,0 +1,254 @@ +XL4 +H 2 areas 12 global symbols +S _nogood_ioctl Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _nogood Ref00000000 +S ___044d_62af_d_5finit_28_29 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Devtab Ref00000000 +S _ok Ref00000000 +S _udata_p Ref00000000 +S ___044e_5a9b_d_5finit_28_29_20ma Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _nogood_rdwr Ref00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _copyr Ref00000000 +S _calloc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29F flags 0 +S _d_init Def00000110 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF 21 1A 00 ED +R 00 00 01 00 02 05 0D 00 +T 09 00 00 00 5B 00 00 00 00 19 46 23 66 68 11 +R 00 00 01 00 02 05 07 00 +T 12 00 00 00 02 02 19 46 23 66 68 DD 75 F6 DD +R 00 00 01 00 +T 1D 00 00 00 74 F7 11 00 06 A7 ED 52 38 05 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 21 FF FF 18 59 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 6E F6 DD 66 F7 3E 02 84 67 01 +R 00 00 01 00 +T 37 00 00 00 00 00 3E 09 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 09 0A 00 +T 40 00 00 00 FC DD 74 FD DD 71 FE DD 70 FF 21 +R 00 00 01 00 +T 4B 00 00 00 1A 00 ED 4B 00 00 00 00 09 46 23 +R 00 00 01 00 02 08 07 00 +T 54 00 00 00 66 68 01 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 5F 00 00 00 DD 71 FA DD 70 FB 11 00 02 D5 C5 +R 00 00 01 00 +T 6A 00 00 00 E5 DD 4E FE DD 46 FF DD 5E FC DD +R 00 00 01 00 +T 75 00 00 00 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 7A 00 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 81 00 00 00 E1 21 00 00 +R 00 00 01 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 CD 00 00 00 00 F6 FF 21 1A 00 ED +R 00 00 01 00 02 05 0D 00 +T 91 00 00 00 5B 00 00 00 00 19 46 23 66 68 11 +R 00 00 01 00 02 05 07 00 +T 9A 00 00 00 02 02 19 46 23 66 68 DD 75 F6 DD +R 00 00 01 00 +T A5 00 00 00 74 F7 11 00 06 A7 ED 52 38 05 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 21 FF FF 18 59 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 21 1A 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 07 00 +T BD 00 00 00 23 66 68 01 00 00 DD 75 FC DD 74 +R 00 00 01 00 +T C8 00 00 00 FD DD 71 FE DD 70 FF DD 6E F6 DD +R 00 00 01 00 +T D3 00 00 00 66 F7 3E 02 84 67 01 00 00 3E 09 +R 00 00 01 00 +T DE 00 00 00 CD 00 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 05 0A 00 +T E7 00 00 00 DD 71 FA DD 70 FB 11 00 02 D5 C5 +R 00 00 01 00 +T F2 00 00 00 E5 DD 4E FE DD 46 FF DD 5E FC DD +R 00 00 01 00 +T FD 00 00 00 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 02 01 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 09 01 00 00 E1 21 00 00 +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 CD 00 00 00 00 FA FF DD 36 FA +R 00 00 01 00 02 05 0D 00 +T 18 01 00 00 00 00 00 00 DD 36 FB 00 00 00 00 +R 00 00 01 00 0B 04 05 00 8B 0B 05 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 01 06 00 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 02 05 05 00 +T 26 01 00 00 A7 ED 42 D2 BF 01 00 00 +R 00 00 01 00 00 08 01 00 +T 2C 01 00 00 +R 00 00 01 00 +T 2C 01 00 00 01 01 00 11 13 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 34 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0F 00 02 0A 01 00 +T 3B 01 00 00 75 FC DD 74 FD 7D B4 20 11 +R 00 00 01 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 4A 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 50 01 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 01 00 +T 55 01 00 00 +R 00 00 01 00 +T 55 01 00 00 DD 6E FC DD 66 FD 23 36 +R 00 00 01 00 +T 5D 01 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 02 00 8B 0A 02 00 +T 62 01 00 00 36 00 00 00 00 21 04 00 DD 4E FC +R 00 00 01 00 2B 05 02 00 +T 6A 01 00 00 DD 46 FD 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 09 02 00 +T 72 01 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 02 00 2B 0A 02 00 +T 77 01 00 00 07 00 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 08 02 00 +T 7E 01 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 02 00 2B 0A 02 00 +T 83 01 00 00 0A 00 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 08 0B 00 +T 8A 01 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 0B 00 2B 0A 0B 00 +T 8F 01 00 00 0D 00 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 08 0B 00 +T 96 01 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 0B 00 2B 0A 0B 00 +T 9B 01 00 00 10 00 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 08 00 00 +T A2 01 00 00 00 00 00 00 23 36 00 00 00 00 DD +R 00 00 01 00 8B 04 00 00 2B 0A 00 00 +T A7 01 00 00 6E FA DD 66 FB 71 23 70 DD 7E FA +R 00 00 01 00 +T B2 01 00 00 C6 02 DD 77 FA 30 03 DD 34 FB +R 00 00 01 00 +T BC 01 00 00 +R 00 00 01 00 +T BC 01 00 00 C3 1D 01 00 00 +R 00 00 01 00 00 05 01 00 +T BF 01 00 00 +R 00 00 01 00 +T BF 01 00 00 2A 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 05 00 +T C8 01 00 00 36 01 DD 6E FC DD 66 FD 23 36 +R 00 00 01 00 +T D2 01 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 06 00 8B 0A 06 00 +T D7 01 00 00 36 00 00 00 00 21 04 00 DD 4E FC +R 00 00 01 00 2B 05 06 00 +T DF 01 00 00 DD 46 FD 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 09 06 00 +T E7 01 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 06 00 2B 0A 06 00 +T EC 01 00 00 07 00 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 08 06 00 +T F3 01 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 06 00 2B 0A 06 00 +T F8 01 00 00 0A 00 09 36 00 00 00 00 23 36 +R 00 00 01 00 09 08 01 00 +T FF 01 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 89 04 01 00 29 0A 01 00 +T 04 02 00 00 0D 00 09 36 88 00 00 00 23 36 +R 00 00 01 00 09 08 01 00 +T 0B 02 00 00 88 00 00 00 23 36 88 00 00 00 DD +R 00 00 01 00 89 04 01 00 29 0A 01 00 +T 10 02 00 00 36 FA 00 00 00 00 DD 36 FB +R 00 00 01 00 0B 06 05 00 +T 16 02 00 00 00 00 00 00 +R 00 00 01 00 8B 04 05 00 +T 17 02 00 00 +R 00 00 01 00 +T 17 02 00 00 01 06 00 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 02 05 05 00 +T 20 02 00 00 A7 ED 42 30 77 +R 00 00 01 00 +T 25 02 00 00 +R 00 00 01 00 +T 25 02 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T 30 02 00 00 75 FC DD 74 FD DD 36 FE 00 +R 00 00 01 00 +T 39 02 00 00 +R 00 00 01 00 +T 39 02 00 00 DD 6E FC DD 66 FD DD 7E FE BE 30 +R 00 00 01 00 +T 44 02 00 00 47 +R 00 00 01 00 +T 45 02 00 00 +R 00 00 01 00 +T 45 02 00 00 DD 5E FE DD 6E FC DD 66 FD 23 4E +R 00 00 01 00 +T 50 02 00 00 23 46 23 7E 69 60 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 59 02 00 00 7D B4 28 2A +R 00 00 01 00 +T 5D 02 00 00 +R 00 00 01 00 +T 5D 02 00 00 DD 4E FE 06 00 C5 01 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 66 02 00 00 DD 6E FA DD 66 FB A7 ED 42 CB 2C +R 00 00 01 00 +T 71 02 00 00 CB 1D E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 08 00 +T 78 02 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 2B 0A 0C 00 +T 7E 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 85 02 00 00 F1 F1 +R 00 00 01 00 +T 87 02 00 00 +R 00 00 01 00 +T 87 02 00 00 DD 34 FE 18 AD +R 00 00 01 00 +T 8C 02 00 00 +R 00 00 01 00 +T 8C 02 00 00 DD 7E FA C6 02 DD 77 FA 30 03 DD +R 00 00 01 00 +T 97 02 00 00 34 FB +R 00 00 01 00 +T 99 02 00 00 +R 00 00 01 00 +T 99 02 00 00 C3 17 02 00 00 +R 00 00 01 00 00 05 01 00 +T 9C 02 00 00 +R 00 00 01 00 +T 9C 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/d_ioctl.rel b/src/nos/lib/filesys_lib/d_ioctl.rel new file mode 100644 index 00000000..b8b01b12 --- /dev/null +++ b/src/nos/lib/filesys_lib/d_ioctl.rel @@ -0,0 +1,58 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _validdev Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 72 flags 0 +S _d_ioctl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 01 00 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 18 00 00 00 FE DD 74 FF 7D B4 20 0F +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 03 00 +T 29 00 00 00 06 23 36 00 18 38 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 3A 00 00 00 46 05 C5 DD 5E 02 21 10 00 DD 4E +R 00 00 01 00 +T 45 00 00 00 FE DD 46 FF 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 50 00 00 00 60 C1 CD 00 00 00 00 F1 7D B4 28 +R 00 00 01 00 02 07 00 00 +T 59 00 00 00 12 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 03 00 +T 63 00 00 00 16 23 36 00 +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 21 00 00 +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/d_openclose.rel b/src/nos/lib/filesys_lib/d_openclose.rel new file mode 100644 index 00000000..46fc88f3 --- /dev/null +++ b/src/nos/lib/filesys_lib/d_openclose.rel @@ -0,0 +1,62 @@ +XL4 +H 3 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _validdev Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 67 flags 0 +S _d_openclose Def00000000 +A CSTR size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 0C 0D 28 05 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 00 00 18 03 +R 00 00 01 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 01 00 00 00 00 +R 00 00 01 00 00 05 02 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 19 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 20 00 00 00 75 FE DD 74 FF 7D B4 20 05 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 FF FF 18 36 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 AF DD B6 04 28 19 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 5E 02 21 04 00 DD 4E FE DD 46 +R 00 00 01 00 +T 3F 00 00 00 FF 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 49 00 00 00 00 00 00 00 18 17 +R 00 00 01 00 02 04 00 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 5E 02 21 07 00 DD 4E FE DD 46 +R 00 00 01 00 +T 58 00 00 00 FF 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 62 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 64 5F 63 6C 6F 73 65 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/dirty_mask.rel b/src/nos/lib/filesys_lib/dirty_mask.rel new file mode 100644 index 00000000..c42d437f --- /dev/null +++ b/src/nos/lib/filesys_lib/dirty_mask.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 1 flags 0 +S _dirty_mask Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/doexit.rel b/src/nos/lib/filesys_lib/doexit.rel new file mode 100644 index 00000000..ca3d3b71 --- /dev/null +++ b/src/nos/lib/filesys_lib/doexit.rel @@ -0,0 +1,179 @@ +XL4 +H 2 areas 13 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _filesys_doclose Ref00000000 +S _Ptab Ref00000000 +S _memcpy Ref00000000 +S _i_deref Ref00000000 +S _swapin Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _disable Ref00000000 +S _addtick Ref00000000 +S ___0469_041c_doexit_3a_20won_27t Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _enable Ref00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _getproc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _sys_sync Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D6 flags 0 +S _doexit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 0E 00 +T 09 00 00 00 DD 77 FB +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 01 0A 80 DD 6E FA DD 66 FB 3E 80 +R 00 00 01 00 +T 17 00 00 00 AC 67 ED 42 30 2F +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 2A 00 00 00 00 46 23 66 68 DD 4E +R 00 00 01 00 02 05 0A 00 +T 26 00 00 00 FA DD 46 FB 09 01 71 00 09 7E E6 +R 00 00 01 00 +T 31 00 00 00 80 20 0E +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 3C 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 18 C0 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 11 00 02 0A 11 00 +T 52 00 00 00 00 00 00 00 2A 00 00 00 00 46 23 +R 00 00 01 00 02 04 00 00 02 09 0A 00 +T 59 00 00 00 66 68 01 09 00 09 E5 DD 4E 02 DD +R 00 00 01 00 +T 64 00 00 00 46 03 41 0E 00 DD 7E 04 E6 FF 5F +R 00 00 01 00 +T 6F 00 00 00 DD 7E 05 E6 00 57 79 B3 6F 78 B2 +R 00 00 01 00 +T 7A 00 00 00 67 4D 44 E1 71 23 70 2A +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 46 23 66 68 01 6B 00 +R 00 00 01 00 02 04 0A 00 +T 8B 00 00 00 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T 92 00 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 98 00 00 00 00 00 00 00 46 23 66 68 01 27 00 +R 00 00 01 00 02 04 0A 00 +T A1 00 00 00 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T A8 00 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 04 00 02 09 00 00 +T AE 00 00 00 00 00 00 00 46 23 66 68 01 63 00 +R 00 00 01 00 02 04 0A 00 +T B7 00 00 00 09 4D 44 2A 00 00 00 00 56 23 66 +R 00 00 01 00 02 08 0A 00 +T C0 00 00 00 6A 11 5B 00 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T C8 00 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T CF 00 00 00 00 00 00 00 46 23 66 68 01 67 00 +R 00 00 01 00 02 04 0A 00 +T D8 00 00 00 09 4D 44 2A 00 00 00 00 56 23 66 +R 00 00 01 00 02 08 0A 00 +T E1 00 00 00 6A 11 5F 00 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T E9 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T F0 00 00 00 08 00 E5 2A 00 00 00 00 46 23 66 +R 00 00 01 00 02 08 0A 00 +T F9 00 00 00 68 01 5B 00 09 4D 44 2A +R 00 00 01 00 +T 01 01 00 00 00 00 00 00 56 23 66 6A 11 0B 00 +R 00 00 01 00 02 04 0A 00 +T 0A 01 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0F 01 00 00 00 00 00 00 CD 00 00 00 00 F1 3E +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 16 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 1B 01 00 00 00 00 00 00 DD 36 FC 00 00 00 00 +R 00 00 01 00 02 04 00 00 0B 0B 02 00 +T 21 01 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 8B 07 02 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 01 02 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 02 00 +T 2E 01 00 00 A7 ED 42 30 6D +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 3E 01 00 00 75 FE DD 74 FF AF B6 28 4A 21 +R 00 00 01 00 +T 48 01 00 00 05 00 DD 4E FE DD 46 FF 09 46 23 +R 00 00 01 00 +T 53 01 00 00 66 68 E5 2A 00 00 00 00 4E 23 46 +R 00 00 01 00 02 08 0A 00 +T 5C 01 00 00 E1 A7 ED 42 20 2F 2A 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T 65 01 00 00 46 23 66 68 DD 4E FE DD 46 FF A7 +R 00 00 01 00 +T 70 01 00 00 ED 42 28 1D +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 21 05 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 7F 01 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 0A 00 +T 87 01 00 00 05 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 91 01 00 00 +R 00 00 01 00 +T 91 01 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T 9C 01 00 00 34 FD +R 00 00 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 18 85 +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T A6 01 00 00 00 00 00 00 2A 00 00 00 00 7E 23 +R 00 00 01 00 02 04 00 00 02 09 0A 00 +T AD 01 00 00 66 6F 36 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0F 00 +T B4 01 00 00 00 00 00 00 CD 00 00 00 00 EB 3E +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T BB 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T C0 01 00 00 00 00 00 00 0E 00 00 00 00 C5 21 +R 00 00 01 00 02 04 00 00 2B 09 09 00 +T C6 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 2B 0A 0D 00 +T CC 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T D3 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/filesys_lib/dprintf.rel b/src/nos/lib/filesys_lib/dprintf.rel new file mode 100644 index 00000000..9733fc6b --- /dev/null +++ b/src/nos/lib/filesys_lib/dprintf.rel @@ -0,0 +1,58 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Ptab Ref00000000 +S _dputter Ref00000000 +S _chkstk Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _Stkchk Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___vprinter Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 62 flags 0 +S _dprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 07 00 +T 06 00 00 00 00 00 00 00 7D B4 28 08 +R 00 00 01 00 02 04 06 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 12 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 2A 00 00 00 00 01 6F 00 09 46 23 +R 00 00 01 00 02 05 01 00 +T 1D 00 00 00 66 68 DD 4E 0A DD 46 0B CD +R 00 00 01 00 +T 26 00 00 00 00 00 00 00 30 05 +R 00 00 01 00 02 04 08 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 21 00 00 18 30 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 21 10 00 39 01 02 00 09 DD 75 FC +R 00 00 01 00 +T 3A 00 00 00 DD 74 FD E5 DD 6E 0C DD 66 0D E5 +R 00 00 01 00 +T 45 00 00 00 21 00 00 E5 0E 00 00 00 00 11 +R 00 00 01 00 2B 09 02 00 +T 4C 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 09 0A 00 +T 51 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 58 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/dup.rel b/src/nos/lib/filesys_lib/dup.rel new file mode 100644 index 00000000..d45b9650 --- /dev/null +++ b/src/nos/lib/filesys_lib/dup.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _sys_dup Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _dup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 08 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 02 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/dup2.rel b/src/nos/lib/filesys_lib/dup2.rel new file mode 100644 index 00000000..ed27cc47 --- /dev/null +++ b/src/nos/lib/filesys_lib/dup2.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _sys_dup2 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _dup2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 23 23 36 09 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/f_trunc.rel b/src/nos/lib/filesys_lib/f_trunc.rel new file mode 100644 index 00000000..f4c40fc8 --- /dev/null +++ b/src/nos/lib/filesys_lib/f_trunc.rel @@ -0,0 +1,68 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _freeblk Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D8 flags 0 +S _f_trunc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 0A 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 DD 75 FA DD 74 +R 00 00 01 00 +T 14 00 00 00 FB 11 18 00 19 DD 75 FC DD 74 FD +R 00 00 01 00 +T 1F 00 00 00 1E 02 D5 11 26 00 19 4E 23 46 DD +R 00 00 01 00 +T 2A 00 00 00 6E 02 DD 66 03 23 23 23 5E 23 56 +R 00 00 01 00 +T 35 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 3B 00 00 00 00 00 00 00 E1 0E 01 C5 21 24 00 +R 00 00 01 00 02 04 00 00 +T 44 00 00 00 DD 4E FC DD 46 FD 09 4E 23 46 DD +R 00 00 01 00 +T 4F 00 00 00 6E 02 DD 66 03 23 23 23 5E 23 56 +R 00 00 01 00 +T 5A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 60 00 00 00 00 00 00 00 E1 DD 36 FE 00 +R 00 00 01 00 02 04 00 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 DD 7E FE FE 12 28 30 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 0E 00 C5 DD 6E FC DD 66 FD 4D 44 +R 00 00 01 00 +T 79 00 00 00 03 03 DD 71 FC DD 70 FD 4E 23 46 +R 00 00 01 00 +T 84 00 00 00 DD 6E 02 DD 66 03 23 23 23 5E 23 +R 00 00 01 00 +T 8F 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 95 00 00 00 CD 00 00 00 00 E1 DD 34 FE 18 C9 +R 00 00 01 00 02 05 00 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 21 28 00 E5 01 00 00 21 18 00 DD +R 00 00 01 00 +T A9 00 00 00 5E FA DD 56 FB 19 EB 3E +R 00 00 01 00 +T B1 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T B6 00 00 00 00 00 00 00 F1 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 00 00 +T BF 00 00 00 23 23 36 01 21 08 00 DD 4E FA DD +R 00 00 01 00 +T CA 00 00 00 46 FB 09 AF 77 23 77 23 77 23 77 +R 00 00 01 00 +T D5 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/falign.rel b/src/nos/lib/filesys_lib/falign.rel new file mode 100644 index 00000000..29f05812 --- /dev/null +++ b/src/nos/lib/filesys_lib/falign.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_falign Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _falign Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 23 23 36 28 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/filename.rel b/src/nos/lib/filesys_lib/filename.rel new file mode 100644 index 00000000..a0b4a47f --- /dev/null +++ b/src/nos/lib/filesys_lib/filename.rel @@ -0,0 +1,98 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _memcpy Ref00000000 +S _usrget_str Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _zerobuf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C1 flags 0 +S _filename Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 1E 01 3E +R 00 00 01 00 02 05 06 00 +T 08 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 0D 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 11 +R 00 00 01 00 02 04 00 00 +T 16 00 00 00 00 02 D5 DD 4E 02 DD 46 03 EB 3E +R 00 00 01 00 +T 21 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 26 00 00 00 00 00 00 00 F1 7D B4 28 1A +R 00 00 01 00 02 04 00 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 0E 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 36 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 3B 00 00 00 00 00 00 00 DD 6E 04 DD 66 05 36 +R 00 00 01 00 02 04 00 00 +T 44 00 00 00 00 18 77 +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 52 00 00 00 FF +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 DD 6E FE DD 66 FF AF B6 28 0A +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 18 EC +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 DD 6E FE DD 66 FF 7E FE 2F 28 1B +R 00 00 01 00 +T 72 00 00 00 DD 4E FE DD 46 FF 0B DD 71 FE DD +R 00 00 01 00 +T 7D 00 00 00 70 FF 03 DD 6E FC DD 66 FD A7 ED +R 00 00 01 00 +T 88 00 00 00 42 30 02 +R 00 00 01 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 18 DA +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 0E 00 E5 DD 4E FE DD 46 FF DD +R 00 00 01 00 +T A0 00 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T A8 00 00 00 00 00 00 00 CD 00 00 00 00 F1 0E +R 00 00 01 00 02 04 02 00 02 09 00 00 +T AF 00 00 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T B7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T BC 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/filesys_doclose.rel b/src/nos/lib/filesys_lib/filesys_doclose.rel new file mode 100644 index 00000000..9ce732c9 --- /dev/null +++ b/src/nos/lib/filesys_lib/filesys_doclose.rel @@ -0,0 +1,78 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _d_openclose Ref00000000 +S _isdevice Ref00000000 +S _getinode Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Oftab Ref00000000 +S _oft_deref Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AE flags 0 +S _filesys_doclose Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 7D B4 20 06 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 FF FF C3 AB 00 00 00 +R 00 00 01 00 00 08 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 2A 00 00 00 00 46 23 66 68 DD 4E +R 00 00 01 00 02 05 05 00 +T 2C 00 00 00 02 DD 46 03 09 01 71 00 09 46 DD +R 00 00 01 00 +T 37 00 00 00 70 FE DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 40 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 45 00 00 00 00 00 00 00 2C 2D 28 3E 21 07 00 +R 00 00 01 00 02 04 00 00 +T 4E 00 00 00 DD 4E FC DD 46 FD 09 3E 01 AE 23 +R 00 00 01 00 +T 59 00 00 00 B6 20 2D DD 6E FE 26 00 29 01 +R 00 00 01 00 +T 63 00 00 00 00 00 00 00 09 46 23 66 68 01 +R 00 00 01 00 02 04 08 00 +T 6B 00 00 00 07 00 09 46 05 20 17 +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 0E 00 21 22 00 DD 5E FC DD 56 FD +R 00 00 01 00 +T 7D 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 84 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 2A 00 00 00 00 46 23 66 68 DD 4E +R 00 00 01 00 02 05 05 00 +T 92 00 00 00 02 DD 46 03 09 01 71 00 09 36 FF +R 00 00 01 00 +T 9D 00 00 00 DD 5E FE 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T A3 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T A9 00 00 00 00 00 +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/filldesc.rel b/src/nos/lib/filesys_lib/filldesc.rel new file mode 100644 index 00000000..3a0e603c --- /dev/null +++ b/src/nos/lib/filesys_lib/filldesc.rel @@ -0,0 +1,26 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Oftab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3F flags 0 +S _filldesc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 26 +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 00 29 11 00 00 00 00 19 46 23 66 +R 00 00 01 00 02 07 03 00 +T 12 00 00 00 68 DD 75 FE DD 74 FF AF 77 23 77 +R 00 00 01 00 +T 1D 00 00 00 23 77 23 77 21 04 00 DD 5E FE DD +R 00 00 01 00 +T 28 00 00 00 56 FF 19 DD 4E 0A DD 46 0B 71 23 +R 00 00 01 00 +T 33 00 00 00 70 21 06 00 19 DD 46 04 70 C3 +R 00 00 01 00 +T 3D 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/filesys_lib/findfs.rel b/src/nos/lib/filesys_lib/findfs.rel new file mode 100644 index 00000000..6ed4c52a --- /dev/null +++ b/src/nos/lib/filesys_lib/findfs.rel @@ -0,0 +1,85 @@ +XL4 +H 3 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Fstab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dprintf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _findfs Def00000000 +A CSTR size 22 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 36 FC +R 00 00 01 00 02 05 03 00 +T 08 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 04 00 8B 0B 04 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 01 02 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 04 00 +T 16 00 00 00 A7 ED 42 30 7A +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 26 00 00 00 75 FE DD 74 FF 01 1C 00 09 4E 23 +R 00 00 01 00 +T 31 00 00 00 46 C5 DD 6E FE DD 66 FF 4E 23 46 +R 00 00 01 00 +T 3C 00 00 00 C5 DD 6E FE DD 66 FF E5 21 +R 00 00 01 00 +T 45 00 00 00 00 00 00 00 E5 21 03 00 E5 3E +R 00 00 01 00 00 04 02 00 +T 4D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 52 00 00 00 00 00 00 00 F1 F1 F1 F1 F1 DD 6E +R 00 00 01 00 02 04 00 00 +T 5B 00 00 00 FE DD 66 FF 7E 23 B6 28 21 21 +R 00 00 01 00 +T 65 00 00 00 1C 00 DD 4E FE DD 46 FF 09 46 23 +R 00 00 01 00 +T 70 00 00 00 66 68 DD 4E 02 DD 46 03 A7 ED 42 +R 00 00 01 00 +T 7B 00 00 00 20 08 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 DD 6E FE DD 66 FF 18 13 +R 00 00 01 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T 90 00 00 00 34 FD +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 C3 0D 00 00 00 +R 00 00 01 00 00 05 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 00 00 +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 66 73 70 20 30 78 25 78 20 73 5F +R 00 00 02 00 +T 0B 00 00 00 6D 6F 75 6E 74 65 64 20 30 78 25 +R 00 00 02 00 +T 16 00 00 00 78 20 73 5F 64 65 76 20 25 64 0A +R 00 00 02 00 +T 21 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/findprocess.rel b/src/nos/lib/filesys_lib/findprocess.rel new file mode 100644 index 00000000..b6db558b --- /dev/null +++ b/src/nos/lib/filesys_lib/findprocess.rel @@ -0,0 +1,98 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Ptab Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _disable Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _enable Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size CF flags 0 +S _findprocess Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 36 FC +R 00 00 01 00 02 05 07 00 +T 08 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 01 00 8B 0B 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 01 02 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 01 00 +T 16 00 00 00 A7 ED 42 D2 BC 00 00 00 +R 00 00 01 00 00 08 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 27 00 00 00 75 FE DD 74 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 2F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 36 00 00 00 FE DD 66 FF 23 46 23 66 68 DD 4E +R 00 00 01 00 +T 41 00 00 00 02 DD 46 03 A7 ED 42 20 5A +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 2A 00 00 00 00 46 23 66 68 23 23 +R 00 00 01 00 02 05 04 00 +T 53 00 00 00 23 46 23 66 68 E5 DD 4E FE DD 46 +R 00 00 01 00 +T 5E 00 00 00 FF 03 03 03 69 60 4E 23 46 E1 A7 +R 00 00 01 00 +T 69 00 00 00 ED 42 28 10 2A 00 00 00 00 46 23 +R 00 00 01 00 02 09 04 00 +T 72 00 00 00 66 68 01 1D 00 09 7E 23 B6 20 10 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 83 00 00 00 00 00 00 00 DD 6E FE DD 66 FF 18 +R 00 00 01 00 02 04 00 00 +T 8C 00 00 00 3F +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 93 00 00 00 00 00 00 00 21 08 00 ED 4B +R 00 00 01 00 02 04 00 00 +T 9A 00 00 00 00 00 00 00 09 36 01 23 36 00 18 +R 00 00 01 00 02 04 04 00 +T A3 00 00 00 25 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T AA 00 00 00 00 00 00 00 DD 7E FC C6 02 DD 77 +R 00 00 01 00 02 04 00 00 +T B3 00 00 00 FC 30 03 DD 34 FD +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 C3 0D 00 00 00 +R 00 00 01 00 00 05 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T C5 00 00 00 16 23 36 00 +R 00 00 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 21 00 00 +R 00 00 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/fmount.rel b/src/nos/lib/filesys_lib/fmount.rel new file mode 100644 index 00000000..66a55831 --- /dev/null +++ b/src/nos/lib/filesys_lib/fmount.rel @@ -0,0 +1,242 @@ +XL4 +H 2 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _i_ref Ref00000000 +S _memcpy Ref00000000 +S _d_openclose Ref00000000 +S _validdev Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ___0485_dc8b_fmount_3a_20can_27t Ref00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Fstab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21A flags 0 +S _fmount Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 01 00 00 DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 18 00 00 00 20 10 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 23 00 00 00 13 23 36 00 C3 EA 01 00 00 +R 00 00 01 00 00 09 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 6E 02 DD 66 03 6C 26 00 7D FE +R 00 00 01 00 +T 35 00 00 00 02 38 03 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 C3 DD 01 00 00 +R 00 00 01 00 00 05 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 DD 36 FC 00 00 00 00 DD 36 FD +R 00 00 01 00 0B 07 0C 00 +T 42 00 00 00 00 00 00 00 +R 00 00 01 00 8B 04 0C 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 01 02 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 0C 00 +T 4C 00 00 00 A7 ED 42 30 4D +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 5C 00 00 00 75 FE DD 74 FF 7E 23 B6 28 29 21 +R 00 00 01 00 +T 67 00 00 00 1C 00 DD 4E FE DD 46 FF 09 46 23 +R 00 00 01 00 +T 72 00 00 00 66 68 DD 4E 02 DD 46 03 A7 ED 42 +R 00 00 01 00 +T 7D 00 00 00 20 10 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 88 00 00 00 10 23 36 00 C3 EA 01 00 00 +R 00 00 01 00 00 09 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T 9A 00 00 00 34 FD +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 18 A5 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 DD 36 FC 00 00 00 00 DD 36 FD +R 00 00 01 00 0B 07 0C 00 +T A5 00 00 00 00 00 00 00 +R 00 00 01 00 8B 04 0C 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 01 02 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 0C 00 +T AF 00 00 00 A7 ED 42 30 26 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T BF 00 00 00 75 FE DD 74 FF 7E 23 B6 20 02 +R 00 00 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 18 1F +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T D6 00 00 00 34 FD +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 18 CC +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T E3 00 00 00 0C 23 36 00 C3 EA 01 00 00 +R 00 00 01 00 00 09 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 DD 6E FE DD 66 FF 36 39 23 36 CE +R 00 00 01 00 +T F5 00 00 00 21 1C 00 DD 4E FE DD 46 FF 09 DD +R 00 00 01 00 +T 00 01 00 00 4E 02 DD 46 03 71 23 70 0E 01 DD +R 00 00 01 00 +T 0B 01 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 13 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 1A 01 00 00 28 19 +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 DD 6E 02 DD 66 03 E5 0E +R 00 00 01 00 +T 24 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 09 00 02 0A 09 00 +T 2A 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T 30 01 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 35 01 00 00 +R 00 00 01 00 +T 35 01 00 00 0E 00 C5 01 04 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 40 01 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 46 01 00 00 CD 00 00 00 00 F1 DD 75 FA DD 74 +R 00 00 01 00 02 05 00 00 +T 4F 01 00 00 FB 7D B4 20 03 +R 00 00 01 00 +T 54 01 00 00 +R 00 00 01 00 +T 54 01 00 00 C3 EA 01 00 00 +R 00 00 01 00 00 05 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 21 1E 00 E5 DD 4E FA DD 46 FB DD +R 00 00 01 00 +T 62 01 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 6A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 71 01 00 00 19 00 DD 4E FE DD 46 FF 09 DD 56 +R 00 00 01 00 +T 7C 01 00 00 0A 72 21 1C 00 09 DD 5E 02 DD 56 +R 00 00 01 00 +T 87 01 00 00 03 73 23 72 21 18 00 09 36 00 0E +R 00 00 01 00 +T 92 01 00 00 00 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 9A 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 9F 01 00 00 00 00 00 00 CB 7C 28 02 +R 00 00 01 00 02 04 00 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 18 43 +R 00 00 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 DD 6E FE DD 66 FF 46 23 66 68 01 +R 00 00 01 00 +T B2 01 00 00 C6 31 A7 ED 42 20 1A 21 06 00 DD +R 00 00 01 00 +T BD 01 00 00 4E FE DD 46 FF 09 5E 23 56 21 +R 00 00 01 00 +T C7 01 00 00 04 00 09 46 23 66 68 A7 ED 52 38 +R 00 00 01 00 +T D2 01 00 00 1C +R 00 00 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 DD 6E FE DD 66 FF AF 77 23 77 +R 00 00 01 00 +T DD 01 00 00 +R 00 00 01 00 +T DD 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T E6 01 00 00 0F 23 36 00 +R 00 00 01 00 +T EA 01 00 00 +R 00 00 01 00 +T EA 01 00 00 21 FF FF 18 28 +R 00 00 01 00 +T EF 01 00 00 +R 00 00 01 00 +T EF 01 00 00 21 1A 00 DD 4E FE DD 46 FF 09 DD +R 00 00 01 00 +T FA 01 00 00 4E 04 DD 46 05 71 23 70 79 B0 28 +R 00 00 01 00 +T 05 02 00 00 0E +R 00 00 01 00 +T 06 02 00 00 +R 00 00 01 00 +T 06 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 0E 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 14 02 00 00 +R 00 00 01 00 +T 14 02 00 00 21 00 00 +R 00 00 01 00 +T 17 02 00 00 +R 00 00 01 00 +T 17 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/filesys_lib/freeblk.rel b/src/nos/lib/filesys_lib/freeblk.rel new file mode 100644 index 00000000..8d145d1a --- /dev/null +++ b/src/nos/lib/filesys_lib/freeblk.rel @@ -0,0 +1,77 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _blk_free Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 99 flags 0 +S _freeblk Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 79 B0 CA +R 00 00 01 00 02 05 04 00 +T 08 00 00 00 96 00 00 00 +R 00 00 01 00 00 04 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 AF DD B6 0A 28 72 +R 00 00 01 00 +T 10 00 00 00 +R 00 00 01 00 +T 10 00 00 00 0E 00 C5 DD 4E 04 DD 46 05 DD 5E +R 00 00 01 00 +T 1B 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T 22 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 29 00 00 00 75 FC DD 74 FD DD 35 0A 7D B4 28 +R 00 00 01 00 +T 34 00 00 00 4D +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 DD 36 FE 00 DD 36 FF 01 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 DD 7E FE DD B6 FF 28 2D +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 6E 0A E5 DD 6E FE DD 66 FF 2B +R 00 00 01 00 +T 50 00 00 00 DD 75 FE DD 74 FF 29 DD 4E FC DD +R 00 00 01 00 +T 5B 00 00 00 46 FD 09 4E 23 46 DD 5E 02 DD 56 +R 00 00 01 00 +T 66 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T 6C 00 00 00 CD 00 00 00 00 E1 18 CB +R 00 00 01 00 02 05 00 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 0E 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 7B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 80 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 8D 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 93 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/freebuf.rel b/src/nos/lib/filesys_lib/freebuf.rel new file mode 100644 index 00000000..1f1334cf --- /dev/null +++ b/src/nos/lib/filesys_lib/freebuf.rel @@ -0,0 +1,273 @@ +XL4 +H 2 areas F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0413_7943_attempt_20to_20writ Ref00000000 +S _bufclock Ref00000000 +S _buf_flsh Ref00000000 +S _bdreadwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Bufpool Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 241 flags 0 +S _freebuf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF AF DD 77 FC +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 DD 77 FD AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 AF 3C CA D0 01 00 00 +R 00 00 01 00 00 07 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 36 F8 00 00 00 00 DD 36 F9 +R 00 00 01 00 0B 07 06 00 +T 1F 00 00 00 00 00 00 00 +R 00 00 01 00 8B 04 06 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 01 06 00 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 02 05 06 00 +T 29 00 00 00 A7 ED 42 D2 B9 00 00 00 +R 00 00 01 00 00 08 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 6E F8 DD 66 F9 46 23 66 68 DD +R 00 00 01 00 +T 3A 00 00 00 75 FA DD 74 FB 7D B4 28 66 21 +R 00 00 01 00 +T 44 00 00 00 05 02 DD 4E FA DD 46 FB 09 7E B7 +R 00 00 01 00 +T 4F 00 00 00 20 58 21 06 02 DD 4E FA DD 46 FB +R 00 00 01 00 +T 5A 00 00 00 09 7E B7 20 4A 21 04 02 DD 4E FA +R 00 00 01 00 +T 65 00 00 00 DD 46 FB 09 7E B7 20 3C +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 21 07 02 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T 78 00 00 00 23 46 2A 00 00 00 00 A7 ED 42 DD +R 00 00 01 00 02 07 02 00 +T 81 00 00 00 75 F6 DD 74 F7 DD 4E FE DD 46 FF +R 00 00 01 00 +T 8C 00 00 00 A7 ED 42 38 18 +R 00 00 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 DD 6E FA DD 66 FB DD 75 FC DD 74 +R 00 00 01 00 +T 9C 00 00 00 FD DD 6E F6 DD 66 F7 DD 75 FE DD +R 00 00 01 00 +T A7 00 00 00 74 FF +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 DD 7E F8 C6 02 DD 77 F8 30 03 DD +R 00 00 01 00 +T B4 00 00 00 34 F9 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 C3 20 00 00 00 +R 00 00 01 00 00 05 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 DD 7E FC DD B6 FD 28 03 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 C3 D0 01 00 00 +R 00 00 01 00 00 05 01 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 DD 36 F8 00 00 00 00 DD 36 F9 +R 00 00 01 00 0B 07 06 00 +T CB 00 00 00 00 00 00 00 +R 00 00 01 00 8B 04 06 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 01 06 00 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 02 05 06 00 +T D5 00 00 00 A7 ED 42 30 7C +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 DD 6E F8 DD 66 F9 46 23 66 68 DD +R 00 00 01 00 +T E5 00 00 00 75 FA DD 74 FB 7D B4 28 58 21 +R 00 00 01 00 +T EF 00 00 00 05 02 DD 4E FA DD 46 FB 09 7E B7 +R 00 00 01 00 +T FA 00 00 00 20 4A 21 06 02 DD 4E FA DD 46 FB +R 00 00 01 00 +T 05 01 00 00 09 7E B7 20 3C +R 00 00 01 00 +T 0A 01 00 00 +R 00 00 01 00 +T 0A 01 00 00 +R 00 00 01 00 +T 0A 01 00 00 +R 00 00 01 00 +T 0A 01 00 00 21 07 02 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T 15 01 00 00 23 46 2A 00 00 00 00 A7 ED 42 DD +R 00 00 01 00 02 07 02 00 +T 1E 01 00 00 75 F6 DD 74 F7 DD 4E FE DD 46 FF +R 00 00 01 00 +T 29 01 00 00 A7 ED 42 38 18 +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 DD 6E FA DD 66 FB DD 75 FC DD 74 +R 00 00 01 00 +T 39 01 00 00 FD DD 6E F6 DD 66 F7 DD 75 FE DD +R 00 00 01 00 +T 44 01 00 00 74 FF +R 00 00 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 DD 7E F8 C6 02 DD 77 F8 30 03 DD +R 00 00 01 00 +T 51 01 00 00 34 F9 +R 00 00 01 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 C3 CC 00 00 00 +R 00 00 01 00 00 05 01 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 DD 7E FC DD B6 FD 28 02 +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 18 70 +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 DD 36 F8 00 00 00 00 DD 36 F9 +R 00 00 01 00 0B 07 06 00 +T 67 01 00 00 00 00 00 00 +R 00 00 01 00 8B 04 06 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 01 06 00 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 02 05 06 00 +T 71 01 00 00 A7 ED 42 30 44 +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 DD 6E F8 DD 66 F9 46 23 66 68 DD +R 00 00 01 00 +T 81 01 00 00 75 FA DD 74 FB 7D B4 20 21 +R 00 00 01 00 +T 8A 01 00 00 +R 00 00 01 00 +T 8A 01 00 00 01 01 00 11 09 02 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 92 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T 99 01 00 00 75 FC DD 74 FD E5 DD 6E F8 DD 66 +R 00 00 01 00 +T A4 01 00 00 F9 C1 71 23 70 18 25 +R 00 00 01 00 +T AB 01 00 00 +R 00 00 01 00 +T AB 01 00 00 DD 7E F8 C6 02 DD 77 F8 30 03 DD +R 00 00 01 00 +T B6 01 00 00 34 F9 +R 00 00 01 00 +T B8 01 00 00 +R 00 00 01 00 +T B8 01 00 00 18 AE +R 00 00 01 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 AF DD B6 02 20 02 +R 00 00 01 00 +T C0 01 00 00 +R 00 00 01 00 +T C0 01 00 00 18 65 +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 2B 0A 09 00 +T C8 01 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T CE 01 00 00 13 00 00 00 +R 00 00 01 00 00 04 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 21 04 02 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T DB 01 00 00 B7 28 5A +R 00 00 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 DD 6E FC DD 66 FD 3E 02 84 67 7E +R 00 00 01 00 +T E9 01 00 00 23 A6 3C 20 11 +R 00 00 01 00 +T EE 01 00 00 +R 00 00 01 00 +T EE 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T F4 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T FA 01 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T FF 01 00 00 +R 00 00 01 00 +T FF 01 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 03 00 +T 06 02 00 00 0E 01 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 0F 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 14 02 00 00 00 00 00 00 CB 7C 28 12 +R 00 00 01 00 02 04 00 00 +T 1A 02 00 00 +R 00 00 01 00 +T 1A 02 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 23 02 00 00 05 23 36 00 +R 00 00 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 21 00 00 18 12 +R 00 00 01 00 +T 2C 02 00 00 +R 00 00 01 00 +T 2C 02 00 00 21 04 02 DD 4E FC DD 46 FD 09 36 +R 00 00 01 00 +T 37 02 00 00 00 +R 00 00 01 00 +T 38 02 00 00 +R 00 00 01 00 +T 38 02 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 3E 02 00 00 +R 00 00 01 00 +T 3E 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/filesys_lib/fs_init.rel b/src/nos/lib/filesys_lib/fs_init.rel new file mode 100644 index 00000000..4386149d --- /dev/null +++ b/src/nos/lib/filesys_lib/fs_init.rel @@ -0,0 +1,58 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___048d_2208_fs_5finit_28_29 Ref00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S _Fstab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 67 flags 0 +S _fs_init Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 36 FC +R 00 00 01 00 02 05 05 00 +T 08 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 07 00 8B 0B 07 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 01 02 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 07 00 +T 16 00 00 00 A7 ED 42 30 49 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 01 01 00 11 1E 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 23 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 2A 00 00 00 75 FE DD 74 FF 7D B4 20 11 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 39 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 3F 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD +R 00 00 01 00 +T 4F 00 00 00 66 FD C1 71 23 70 DD 7E FC C6 02 +R 00 00 01 00 +T 5A 00 00 00 DD 77 FC 30 03 DD 34 FD +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 18 A9 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/filesys_lib/fs_sync.rel b/src/nos/lib/filesys_lib/fs_sync.rel new file mode 100644 index 00000000..ae03b28b --- /dev/null +++ b/src/nos/lib/filesys_lib/fs_sync.rel @@ -0,0 +1,95 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Fstab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _bufsync Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BF flags 0 +S _fs_sync Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 36 FA +R 00 00 01 00 02 05 05 00 +T 08 00 00 00 00 00 00 00 DD 36 FB 00 00 00 00 +R 00 00 01 00 0B 04 06 00 8B 0B 06 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 01 02 00 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 02 05 06 00 +T 16 00 00 00 A7 ED 42 D2 B4 00 00 00 +R 00 00 01 00 00 08 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T 27 00 00 00 75 FC DD 74 FD 7E 23 B6 28 73 21 +R 00 00 01 00 +T 32 00 00 00 18 00 DD 4E FC DD 46 FD 09 7E B7 +R 00 00 01 00 +T 3D 00 00 00 28 65 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 0E 00 C5 01 04 00 21 1C 00 DD 5E +R 00 00 01 00 +T 4A 00 00 00 FC DD 56 FD 19 5E 23 56 3E +R 00 00 01 00 +T 53 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 58 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 61 00 00 00 7D B4 28 3F +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 18 00 DD 4E FC DD 46 FD 09 36 +R 00 00 01 00 +T 70 00 00 00 00 21 1E 00 E5 DD 5E FE DD 56 FF +R 00 00 01 00 +T 7B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 81 00 00 00 00 00 00 00 F1 0E 01 DD 5E FE DD +R 00 00 01 00 02 04 00 00 +T 8A 00 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 8F 00 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 96 00 00 00 28 0C +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 21 18 00 DD 4E FC DD 46 FD 09 36 +R 00 00 01 00 +T A3 00 00 00 01 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 DD 7E FA C6 02 DD 77 FA 30 03 DD +R 00 00 01 00 +T AF 00 00 00 34 FB +R 00 00 01 00 +T B1 00 00 00 +R 00 00 01 00 +T B1 00 00 00 C3 0D 00 00 00 +R 00 00 01 00 00 05 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T BA 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 03 00 diff --git a/src/nos/lib/filesys_lib/fstat.rel b/src/nos/lib/filesys_lib/fstat.rel new file mode 100644 index 00000000..2b17f64e --- /dev/null +++ b/src/nos/lib/filesys_lib/fstat.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_statfstat Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _fstat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 0D 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/getfs.rel b/src/nos/lib/filesys_lib/getfs.rel new file mode 100644 index 00000000..716a8497 --- /dev/null +++ b/src/nos/lib/filesys_lib/getfs.rel @@ -0,0 +1,51 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _rdtime Ref00000000 +S _Baddevmsg Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _findfs Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5B flags 0 +S _getfs Def00000000 +A CSTR size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 20 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T 25 00 00 00 00 00 00 00 E5 3A 02 00 00 00 4F +R 00 00 01 00 00 04 02 00 02 0A 02 00 +T 2C 00 00 00 C5 2A 00 00 00 00 E5 3E +R 00 00 01 00 02 06 02 00 +T 32 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 37 00 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 0C 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T 48 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 4E 00 00 00 00 00 00 00 21 18 00 09 36 01 69 +R 00 00 01 00 02 04 00 00 +T 57 00 00 00 60 C3 00 00 00 00 +R 00 00 01 00 02 06 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 67 65 74 66 73 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/getfsys.rel b/src/nos/lib/filesys_lib/getfsys.rel new file mode 100644 index 00000000..38bde6a8 --- /dev/null +++ b/src/nos/lib/filesys_lib/getfsys.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_getfsys Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _getfsys Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 0E 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/getinode.rel b/src/nos/lib/filesys_lib/getinode.rel new file mode 100644 index 00000000..41493676 --- /dev/null +++ b/src/nos/lib/filesys_lib/getinode.rel @@ -0,0 +1,86 @@ +XL4 +H 3 areas B global symbols +S _magic Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Oftab Ref00000000 +S _Gtinobadoft Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A1 flags 0 +S _getinode Def00000000 +A CSTR size E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 01 0A 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 6E 02 DD 66 03 A7 ED 42 38 02 +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 18 49 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 2A 00 00 00 00 46 23 66 68 DD 4E +R 00 00 01 00 02 05 03 00 +T 1E 00 00 00 02 DD 46 03 09 01 71 00 09 46 DD +R 00 00 01 00 +T 29 00 00 00 70 FE 78 FE 0F 38 27 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T 38 00 00 00 00 00 00 00 E5 DD 4E FE 06 00 C5 +R 00 00 01 00 00 04 02 00 +T 41 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 08 00 +T 47 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 2B 0A 05 00 +T 4D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 54 00 00 00 F1 F1 F1 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 7E FE E6 80 28 12 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 03 00 +T 67 00 00 00 09 23 36 00 21 00 00 18 2E +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 DD 6E FE 26 00 29 01 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 79 00 00 00 09 46 23 66 68 01 04 00 09 46 23 +R 00 00 01 00 +T 84 00 00 00 66 68 DD 75 FC DD 74 FD 01 +R 00 00 01 00 +T 8D 00 00 00 05 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 00 00 +T 93 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 9A 00 00 00 FC DD 66 FD +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 66 6F 72 00 +R 00 00 02 00 +T 05 00 00 00 +R 00 00 02 00 +T 05 00 00 00 67 65 74 69 6E 6F 64 65 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/getperm.rel b/src/nos/lib/filesys_lib/getperm.rel new file mode 100644 index 00000000..1fa46ee6 --- /dev/null +++ b/src/nos/lib/filesys_lib/getperm.rel @@ -0,0 +1,94 @@ +XL4 +H 2 areas 8 global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?US_RSHASG_L02 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E9 flags 0 +S _getperm Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0A 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 2A 00 00 00 00 46 +R 00 00 01 00 02 0A 03 00 +T 1D 00 00 00 23 66 68 01 1D 00 09 7E 23 B6 20 +R 00 00 01 00 +T 28 00 00 00 57 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 7E FE E6 00 6F DD 7E FF E6 F0 +R 00 00 01 00 +T 34 00 00 00 67 3E 20 AC B5 28 12 DD 7E FE E6 +R 00 00 01 00 +T 3F 00 00 00 00 6F DD 7E FF E6 F0 67 3E 60 AC +R 00 00 01 00 +T 4A 00 00 00 B5 20 23 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 06 03 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 56 00 00 00 00 00 00 00 D5 06 06 DD 5E FE DD +R 00 00 01 00 02 04 00 00 +T 5F 00 00 00 56 FF CD 00 00 00 00 EB D1 7B B5 +R 00 00 01 00 02 07 00 00 +T 68 00 00 00 4F 7A B4 47 59 50 18 03 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 11 07 00 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 21 00 00 39 7E B3 77 23 7E B2 77 +R 00 00 01 00 +T 7E 00 00 00 18 5A +R 00 00 01 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T 88 00 00 00 1D 00 09 46 23 66 68 E5 21 0E 00 +R 00 00 01 00 +T 93 00 00 00 DD 4E 02 DD 46 03 09 4E 23 46 E1 +R 00 00 01 00 +T 9E 00 00 00 A7 ED 42 20 0B +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 21 00 00 39 06 06 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T AC 00 00 00 18 2C +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T B6 00 00 00 1F 00 09 46 23 66 68 E5 21 10 00 +R 00 00 01 00 +T C1 00 00 00 DD 4E 02 DD 46 03 09 4E 23 46 E1 +R 00 00 01 00 +T CC 00 00 00 A7 ED 42 20 09 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 21 00 00 39 06 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 DD 7E FE E6 07 6F DD 7E FF E6 00 +R 00 00 01 00 +T E5 00 00 00 67 C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/filesys_lib/i_alloc.rel b/src/nos/lib/filesys_lib/i_alloc.rel new file mode 100644 index 00000000..a3afb2d3 --- /dev/null +++ b/src/nos/lib/filesys_lib/i_alloc.rel @@ -0,0 +1,132 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _xip_find Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __dprintf Ref00000000 +S _getfs Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _Badfsmsg Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 130 flags 0 +S _i_alloc Def00000000 +A CSTR size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF DD 5E 02 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 01 19 00 09 7E B7 28 +R 00 00 01 00 +T 20 00 00 00 10 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 2A 00 00 00 1E 23 36 00 C3 2A 01 00 00 +R 00 00 01 00 00 09 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 21 12 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 3C 00 00 00 23 56 D5 21 10 00 09 4E 23 46 C5 +R 00 00 01 00 +T 47 00 00 00 21 01 00 E5 21 00 00 E5 01 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 5A 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 61 00 00 00 F1 F1 F1 DD 75 F4 DD 74 F5 4D 44 +R 00 00 01 00 +T 6C 00 00 00 21 01 00 A7 ED 42 30 1E 21 04 00 +R 00 00 01 00 +T 77 00 00 00 DD 4E FE DD 46 FF 09 46 23 66 68 +R 00 00 01 00 +T 82 00 00 00 29 29 29 4D 44 DD 6E F4 DD 66 F5 +R 00 00 01 00 +T 8D 00 00 00 A7 ED 42 38 03 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 C3 1D 01 00 00 +R 00 00 01 00 00 05 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 0A 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T A0 00 00 00 23 B6 20 02 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 18 47 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 DD 4E F4 DD 46 F5 21 01 00 A7 ED +R 00 00 01 00 +T B1 00 00 00 42 30 1E 21 04 00 DD 4E FE DD 46 +R 00 00 01 00 +T BC 00 00 00 FF 09 46 23 66 68 29 29 29 4D 44 +R 00 00 01 00 +T C7 00 00 00 DD 6E F4 DD 66 F5 A7 ED 42 38 02 +R 00 00 01 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 18 19 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 21 0A 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T DF 00 00 00 23 46 0B 70 2B 71 DD 6E F4 DD 66 +R 00 00 01 00 +T EA 00 00 00 F5 18 40 +R 00 00 01 00 +T ED 00 00 00 +R 00 00 01 00 +T ED 00 00 00 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T F5 00 00 00 00 00 00 00 E5 3A 02 00 00 00 4F +R 00 00 01 00 00 04 02 00 02 0A 07 00 +T FC 00 00 00 C5 2A 00 00 00 00 E5 21 00 00 E5 +R 00 00 01 00 02 06 07 00 +T 05 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 0B 01 00 00 00 00 00 00 F1 F1 F1 F1 F1 DD 6E +R 00 00 01 00 02 04 00 00 +T 14 01 00 00 FE DD 66 FF 36 39 23 36 CE +R 00 00 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 26 01 00 00 1C 23 36 00 +R 00 00 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 21 00 00 +R 00 00 01 00 +T 2D 01 00 00 +R 00 00 01 00 +T 2D 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 5F 61 6C 6C 6F 63 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/i_deref.rel b/src/nos/lib/filesys_lib/i_deref.rel new file mode 100644 index 00000000..4048e442 --- /dev/null +++ b/src/nos/lib/filesys_lib/i_deref.rel @@ -0,0 +1,112 @@ +XL4 +H 3 areas D global symbols +S _magic Ref00000000 +S _Refstoinode Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _wr_inode Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ksignal Ref00000000 +S _i_free Ref00000000 +S __panic Ref00000000 +S _f_trunc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size ED flags 0 +S _i_deref Def00000000 +A CSTR size B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 01 00 00 00 00 3E +R 00 00 01 00 02 05 06 00 00 0A 02 00 +T 07 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 0C 00 00 00 00 00 00 00 21 07 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 15 00 00 00 46 03 09 7E 23 B6 20 20 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T 25 00 00 00 08 00 00 00 E5 3A 02 00 00 00 4F +R 00 00 01 00 00 04 02 00 02 0A 01 00 +T 2C 00 00 00 C5 2A 00 00 00 00 E5 3E +R 00 00 01 00 02 06 01 00 +T 32 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 37 00 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 48 00 00 00 E6 00 4F 23 7E E6 F0 47 3E 10 A8 +R 00 00 01 00 +T 53 00 00 00 B1 20 11 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 01 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 60 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 65 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 21 07 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 72 00 00 00 23 46 0B 70 2B 71 79 B0 20 6E +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 87 00 00 00 23 B6 20 45 +R 00 00 01 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 21 12 00 DD 4E 02 DD 46 03 09 AF +R 00 00 01 00 +T 96 00 00 00 77 23 77 23 77 23 77 59 50 3E +R 00 00 01 00 +T A0 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T A5 00 00 00 00 00 00 00 21 0A 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T AE 00 00 00 46 03 09 AF 77 23 77 21 05 00 09 +R 00 00 01 00 +T B9 00 00 00 4E 23 46 DD 6E 02 DD 66 03 23 23 +R 00 00 01 00 +T C4 00 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T CB 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 08 00 02 09 02 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 DD 6E 02 DD 66 03 23 23 7E B7 28 +R 00 00 01 00 +T DB 00 00 00 0E +R 00 00 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T E4 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0A 02 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 5F 64 65 72 65 66 00 +R 00 00 02 00 +T 08 00 00 00 +R 00 00 02 00 +T 08 00 00 00 6E 6F 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/i_free.rel b/src/nos/lib/filesys_lib/i_free.rel new file mode 100644 index 00000000..8bd8463a --- /dev/null +++ b/src/nos/lib/filesys_lib/i_free.rel @@ -0,0 +1,81 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Badinomsg Ref00000000 +S _getfs Ref00000000 +S .__.ABS. Def00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _xip_set Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AA flags 0 +S _i_free Def00000000 +A CSTR size 7 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 21 01 00 A7 ED 42 30 +R 00 00 01 00 +T 20 00 00 00 1E 21 04 00 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T 2B 00 00 00 46 23 66 68 29 29 29 4D 44 DD 6E +R 00 00 01 00 +T 36 00 00 00 04 DD 66 05 A7 ED 42 38 20 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 6E 04 DD 66 05 E5 21 +R 00 00 01 00 +T 47 00 00 00 00 00 00 00 E5 3A 02 00 00 00 4F +R 00 00 01 00 00 04 02 00 02 0A 02 00 +T 4E 00 00 00 C5 2A 00 00 00 00 E5 3E +R 00 00 01 00 02 06 02 00 +T 54 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 59 00 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 21 12 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 6A 00 00 00 23 56 D5 21 10 00 09 4E 23 46 C5 +R 00 00 01 00 +T 75 00 00 00 21 00 00 E5 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T 80 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 88 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 8F 00 00 00 F1 3E 01 AD B4 28 02 +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 18 0F +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 21 0A 00 DD 4E FE DD 46 FF 09 34 +R 00 00 01 00 +T A3 00 00 00 23 20 01 34 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 5F 66 72 65 65 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/i_init.rel b/src/nos/lib/filesys_lib/i_init.rel new file mode 100644 index 00000000..7c874ea9 --- /dev/null +++ b/src/nos/lib/filesys_lib/i_init.rel @@ -0,0 +1,64 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Inotab Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 61 flags 0 +S _filesys_garbage Def00000003 +S _i_init Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 03 00 00 00 +R 00 00 01 00 +T 03 00 00 00 CD 00 00 00 00 FC FF DD 36 FC +R 00 00 01 00 02 05 06 00 +T 0B 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 03 00 8B 0B 03 00 +T 10 00 00 00 +R 00 00 01 00 +T 10 00 00 00 01 0A 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 03 00 +T 19 00 00 00 A7 ED 42 30 40 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 29 00 00 00 75 FE DD 74 FF 7D B4 28 1D 21 +R 00 00 01 00 +T 33 00 00 00 07 00 DD 4E FE DD 46 FF 09 7E 23 +R 00 00 01 00 +T 3E 00 00 00 B6 20 0E +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 49 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T 5A 00 00 00 34 FD +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 18 B2 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/i_open.rel b/src/nos/lib/filesys_lib/i_open.rel new file mode 100644 index 00000000..e2d6a5a9 --- /dev/null +++ b/src/nos/lib/filesys_lib/i_open.rel @@ -0,0 +1,378 @@ +XL4 +H 5 areas 15 global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _i_ref Ref00000000 +S _memcpy Ref00000000 +S _Baddevmsg Ref00000000 +S _i_alloc Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Badinomsg Ref00000000 +S __dprintf Ref00000000 +S _Inotab Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _findfs Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 333 flags 0 +S _i_open Def00000000 +A CSTR size 15 flags 0 +A IDATA0 size 2 flags 0 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF DD 5E 02 DD +R 00 00 01 00 02 05 0F 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 12 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 12 00 02 09 01 00 +T 15 00 00 00 F4 DD 74 F5 7D B4 20 20 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T 25 00 00 00 00 00 00 00 E5 3A 02 00 00 00 4F +R 00 00 01 00 00 04 02 00 02 0A 05 00 +T 2C 00 00 00 C5 2A 00 00 00 00 E5 3E +R 00 00 01 00 02 06 05 00 +T 32 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 37 00 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 DD 36 FD 00 DD 7E 04 DD B6 05 20 +R 00 00 01 00 +T 48 00 00 00 1E +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 51 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 58 00 00 00 75 04 DD 74 05 7D B4 20 03 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 C3 2D 03 00 00 +R 00 00 01 00 00 05 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 34 FD +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 01 01 00 DD 6E 04 DD 66 05 A7 ED +R 00 00 01 00 +T 72 00 00 00 42 38 1E 21 04 00 DD 4E F4 DD 46 +R 00 00 01 00 +T 7D 00 00 00 F5 09 46 23 66 68 29 29 29 4D 44 +R 00 00 01 00 +T 88 00 00 00 DD 6E 04 DD 66 05 A7 ED 42 38 28 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 DD 6E 04 DD 66 05 E5 21 +R 00 00 01 00 +T 9B 00 00 00 00 00 00 00 E5 3A 02 00 00 00 4F +R 00 00 01 00 00 04 02 00 02 0A 08 00 +T A2 00 00 00 C5 2A 00 00 00 00 E5 21 00 00 E5 +R 00 00 01 00 02 06 08 00 +T AB 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T B1 00 00 00 00 00 00 00 F1 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T B9 00 00 00 2D 03 00 00 +R 00 00 01 00 00 04 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 AF DD 77 FA DD 77 FB DD 36 FC 00 +R 00 00 01 00 +T C6 00 00 00 DD 36 FC 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 DD 7E FC FE 05 D2 61 01 00 00 +R 00 00 01 00 00 0A 01 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 2A 00 00 00 00 4D 44 03 03 ED 43 +R 00 00 01 00 00 05 03 00 +T DB 00 00 00 00 00 00 00 46 23 66 68 DD 75 F8 +R 00 00 01 00 00 04 03 00 +T E4 00 00 00 DD 74 F9 01 0A 00 00 00 2A +R 00 00 01 00 02 08 0A 00 +T EB 00 00 00 00 00 00 00 A7 ED 42 38 06 +R 00 00 01 00 00 04 03 00 +T F2 00 00 00 +R 00 00 01 00 +T F2 00 00 00 21 00 00 00 00 22 00 00 00 00 +R 00 00 01 00 02 05 0A 00 00 0A 03 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 DD 7E F8 DD B6 F9 28 5B +R 00 00 01 00 +T 00 01 00 00 +R 00 00 01 00 +T 00 01 00 00 21 07 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 0B 01 00 00 23 B6 20 0C +R 00 00 01 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 DD 6E F8 DD 66 F9 DD 75 FA DD 74 +R 00 00 01 00 +T 1A 01 00 00 FB +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 DD 6E F8 DD 66 F9 23 23 23 46 23 +R 00 00 01 00 +T 26 01 00 00 66 68 DD 4E 02 DD 46 03 A7 ED 42 +R 00 00 01 00 +T 31 01 00 00 20 28 21 05 00 DD 4E F8 DD 46 F9 +R 00 00 01 00 +T 3C 01 00 00 09 46 23 66 68 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 47 01 00 00 A7 ED 42 20 0F +R 00 00 01 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 DD 6E F8 DD 66 F9 DD 75 FA DD 74 +R 00 00 01 00 +T 57 01 00 00 FB C3 8B 02 00 00 +R 00 00 01 00 00 06 01 00 +T 5B 01 00 00 +R 00 00 01 00 +T 5B 01 00 00 +R 00 00 01 00 +T 5B 01 00 00 DD 34 FC C3 CA 00 00 00 +R 00 00 01 00 00 08 01 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 DD 7E FA DD B6 FB 20 48 +R 00 00 01 00 +T 69 01 00 00 +R 00 00 01 00 +T 69 01 00 00 DD 36 FC 00 +R 00 00 01 00 +T 6D 01 00 00 +R 00 00 01 00 +T 6D 01 00 00 DD 7E FC FE 05 30 3D +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 DD 6E FC 26 00 29 01 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T 7D 01 00 00 09 7E 23 B6 20 29 +R 00 00 01 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 01 01 00 11 4A 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T 8B 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 10 00 02 0A 01 00 +T 92 01 00 00 75 FA DD 74 FB DD 6E FC 26 00 29 +R 00 00 01 00 +T 9D 01 00 00 01 00 00 00 00 09 DD 4E FA DD 46 +R 00 00 01 00 02 05 0A 00 +T A6 01 00 00 FB 71 23 70 18 05 +R 00 00 01 00 +T AC 01 00 00 +R 00 00 01 00 +T AC 01 00 00 DD 34 FC 18 BC +R 00 00 01 00 +T B1 01 00 00 +R 00 00 01 00 +T B1 01 00 00 +R 00 00 01 00 +T B1 01 00 00 DD 7E FA DD B6 FB 20 10 +R 00 00 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 0B 00 +T C2 01 00 00 17 23 36 00 C3 2D 03 00 00 +R 00 00 01 00 00 09 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 0E 00 C5 DD 6E F4 DD 66 F5 23 23 +R 00 00 01 00 +T D4 01 00 00 46 23 66 68 06 03 DD 5E 04 DD 56 +R 00 00 01 00 +T DF 01 00 00 05 CD 00 00 00 00 19 4D 44 DD 5E +R 00 00 01 00 02 06 00 00 +T E8 01 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T EF 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 13 00 02 09 01 00 +T F6 01 00 00 75 F6 DD 74 F7 7D B4 20 03 +R 00 00 01 00 +T FF 01 00 00 +R 00 00 01 00 +T FF 01 00 00 C3 2D 03 00 00 +R 00 00 01 00 00 05 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 21 40 00 E5 DD 7E 04 E6 07 5F DD +R 00 00 01 00 +T 0D 02 00 00 7E 05 E6 00 57 06 06 CD +R 00 00 01 00 +T 15 02 00 00 00 00 00 00 DD 6E F6 DD 66 F7 19 +R 00 00 01 00 02 04 0D 00 +T 1E 02 00 00 4D 44 21 0A 00 DD 5E FA DD 56 FB +R 00 00 01 00 +T 29 02 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 2E 02 00 00 00 00 00 00 CD 00 00 00 00 F1 0E +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 35 02 00 00 00 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T 3D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 42 02 00 00 00 00 00 00 CB 7C 28 03 +R 00 00 01 00 02 04 01 00 +T 48 02 00 00 +R 00 00 01 00 +T 48 02 00 00 C3 2D 03 00 00 +R 00 00 01 00 00 05 01 00 +T 4B 02 00 00 +R 00 00 01 00 +T 4B 02 00 00 DD 6E FA DD 66 FB 36 91 23 36 60 +R 00 00 01 00 +T 56 02 00 00 DD 6E FA DD 66 FB 23 23 23 DD 4E +R 00 00 01 00 +T 61 02 00 00 02 DD 46 03 71 23 70 21 05 00 DD +R 00 00 01 00 +T 6C 02 00 00 4E FA DD 46 FB 09 DD 5E 04 DD 56 +R 00 00 01 00 +T 77 02 00 00 05 73 23 72 21 19 00 DD 5E F4 DD +R 00 00 01 00 +T 82 02 00 00 56 F5 19 56 21 09 00 09 72 +R 00 00 01 00 +T 8B 02 00 00 +R 00 00 01 00 +T 8B 02 00 00 21 0A 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 96 02 00 00 E6 00 57 23 7E E6 F0 B2 20 04 3E +R 00 00 01 00 +T A1 02 00 00 01 18 01 +R 00 00 01 00 +T A4 02 00 00 +R 00 00 01 00 +T A4 02 00 00 AF +R 00 00 01 00 +T A5 02 00 00 +R 00 00 01 00 +T A5 02 00 00 DD 77 FE 21 07 00 DD 4E FA DD 46 +R 00 00 01 00 +T B0 02 00 00 FB 09 7E 23 B6 20 13 21 0C 00 DD +R 00 00 01 00 +T BB 02 00 00 4E FA DD 46 FB 09 7E 23 B6 20 04 +R 00 00 01 00 +T C6 02 00 00 3E 01 18 01 +R 00 00 01 00 +T CA 02 00 00 +R 00 00 01 00 +T CA 02 00 00 AF +R 00 00 01 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 DD 77 FF AF DD B6 FD 28 10 +R 00 00 01 00 +T D4 02 00 00 +R 00 00 01 00 +T D4 02 00 00 AF DD B6 FF 28 06 AF DD B6 FE 20 +R 00 00 01 00 +T DF 02 00 00 02 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 18 26 +R 00 00 01 00 +T E2 02 00 00 +R 00 00 01 00 +T E2 02 00 00 18 0E +R 00 00 01 00 +T E4 02 00 00 +R 00 00 01 00 +T E4 02 00 00 AF DD B6 FF 20 06 AF DD B6 FE 28 +R 00 00 01 00 +T EF 02 00 00 02 +R 00 00 01 00 +T F0 02 00 00 +R 00 00 01 00 +T F0 02 00 00 +R 00 00 01 00 +T F0 02 00 00 +R 00 00 01 00 +T F0 02 00 00 18 16 +R 00 00 01 00 +T F2 02 00 00 +R 00 00 01 00 +T F2 02 00 00 +R 00 00 01 00 +T F2 02 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T FA 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 01 03 00 00 6E FA DD 66 FB 18 28 +R 00 00 01 00 +T 08 03 00 00 +R 00 00 01 00 +T 08 03 00 00 DD 6E 04 DD 66 05 E5 21 +R 00 00 01 00 +T 10 03 00 00 07 00 00 00 E5 3A 02 00 00 00 4F +R 00 00 01 00 00 04 02 00 02 0A 08 00 +T 17 03 00 00 C5 2A 00 00 00 00 E5 21 00 00 E5 +R 00 00 01 00 02 06 08 00 +T 20 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 26 03 00 00 00 00 00 00 F1 F1 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 2D 03 00 00 +R 00 00 01 00 +T 2D 03 00 00 21 00 00 +R 00 00 01 00 +T 30 03 00 00 +R 00 00 01 00 +T 30 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 5F 6F 70 65 6E 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 69 5F 6F 70 65 6E 20 28 64 69 73 +R 00 00 02 00 +T 12 00 00 00 6B 29 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 +R 00 00 04 00 02 04 0A 00 diff --git a/src/nos/lib/filesys_lib/i_ref.rel b/src/nos/lib/filesys_lib/i_ref.rel new file mode 100644 index 00000000..82fb4e0e --- /dev/null +++ b/src/nos/lib/filesys_lib/i_ref.rel @@ -0,0 +1,50 @@ +XL4 +H 3 areas 9 global symbols +S _magic Ref00000000 +S _Refstoinode Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S __panic Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4C flags 0 +S _i_ref Def00000000 +A CSTR size F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 01 00 00 00 00 3E +R 00 00 01 00 02 05 05 00 00 0A 02 00 +T 07 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 0C 00 00 00 00 00 00 00 21 07 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 15 00 00 00 46 03 09 4E 23 46 03 70 2B 71 69 +R 00 00 01 00 +T 20 00 00 00 60 01 3C 00 A7 ED 42 38 20 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T 31 00 00 00 06 00 00 00 E5 3A 02 00 00 00 4F +R 00 00 01 00 00 04 02 00 02 0A 01 00 +T 38 00 00 00 C5 2A 00 00 00 00 E5 3E +R 00 00 01 00 02 06 01 00 +T 3E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 43 00 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 5F 72 65 66 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 74 6F 6F 20 6D 61 6E 79 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/i_sync.rel b/src/nos/lib/filesys_lib/i_sync.rel new file mode 100644 index 00000000..3279b2f1 --- /dev/null +++ b/src/nos/lib/filesys_lib/i_sync.rel @@ -0,0 +1,70 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _wr_inode Ref00000000 +S _Inotab Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dirty_mask Ref00000000 +S _bufsync Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8C flags 0 +S _i_sync Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 34 DD 36 FC +R 00 00 01 00 02 04 07 00 +T 0C 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 03 00 8B 0B 03 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 01 0A 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 03 00 +T 1A 00 00 00 A7 ED 42 30 5E +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 2A 00 00 00 75 FE DD 74 FF 7D B4 28 3B DD 6E +R 00 00 01 00 +T 35 00 00 00 FE DD 66 FF 46 23 66 68 01 91 60 +R 00 00 01 00 +T 40 00 00 00 A7 ED 42 20 29 DD 6E FE DD 66 FF +R 00 00 01 00 +T 4B 00 00 00 23 23 7E B7 28 1D 21 07 00 DD 4E +R 00 00 01 00 +T 56 00 00 00 FE DD 46 FF 09 7E 23 B6 28 0E +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 68 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T 79 00 00 00 34 FD +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 18 94 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 00 00 00 00 35 3E 00 00 00 00 +R 00 00 01 00 02 05 07 00 2B 0B 08 00 +T 83 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T 8A 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/filesys_lib/ibuf.rel b/src/nos/lib/filesys_lib/ibuf.rel new file mode 100644 index 00000000..74002732 --- /dev/null +++ b/src/nos/lib/filesys_lib/ibuf.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 5 flags 0 +S _ibuf Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/ioctl.rel b/src/nos/lib/filesys_lib/ioctl.rel new file mode 100644 index 00000000..941b510a --- /dev/null +++ b/src/nos/lib/filesys_lib/ioctl.rel @@ -0,0 +1,77 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_ioctl Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DC flags 0 +S _ioctl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 06 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 04 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 0A DD 56 0B 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 0C DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 0D 73 23 72 21 2E 00 39 01 +R 00 00 01 00 +T 57 00 00 00 02 00 09 DD 75 E0 DD 74 E1 21 +R 00 00 01 00 +T 61 00 00 00 0E 00 ED 4B 00 00 00 00 09 E5 21 +R 00 00 01 00 02 08 06 00 +T 6A 00 00 00 04 00 39 7E C6 02 77 23 7E CE 00 +R 00 00 01 00 +T 75 00 00 00 77 2B 6E 67 2B 2B 5E 23 56 E1 73 +R 00 00 01 00 +T 80 00 00 00 23 72 2A 00 00 00 00 23 23 23 36 +R 00 00 01 00 02 07 06 00 +T 89 00 00 00 0F 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 8F 00 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 00 00 2B 0A 05 00 +T 95 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 9C 00 00 00 DE DD 74 DF 21 04 00 ED 4B +R 00 00 01 00 +T A5 00 00 00 00 00 00 00 09 DD 4E DE DD 46 DF +R 00 00 01 00 02 04 06 00 +T AE 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T B4 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T BB 00 00 00 3C 20 0F +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T C7 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 21 00 00 22 00 00 00 00 DD 6E DE +R 00 00 01 00 02 08 06 00 +T D6 00 00 00 DD 66 DF C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/isdevice.rel b/src/nos/lib/filesys_lib/isdevice.rel new file mode 100644 index 00000000..67e14761 --- /dev/null +++ b/src/nos/lib/filesys_lib/isdevice.rel @@ -0,0 +1,29 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 38 flags 0 +S _isdevice Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0A 00 19 7E E6 +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 00 4F 23 7E E6 F0 47 3E 20 A8 B1 +R 00 00 01 00 +T 14 00 00 00 28 1D 21 0A 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 1F 00 00 00 09 7E E6 00 4F 23 7E E6 F0 47 3E +R 00 00 01 00 +T 2A 00 00 00 60 A8 B1 28 04 2E 00 18 02 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 2E 01 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/filesys_lib/kbuf.rel b/src/nos/lib/filesys_lib/kbuf.rel new file mode 100644 index 00000000..7592f9e9 --- /dev/null +++ b/src/nos/lib/filesys_lib/kbuf.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 38 flags 0 +S _kbuf Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/link.rel b/src/nos/lib/filesys_lib/link.rel new file mode 100644 index 00000000..47791aa7 --- /dev/null +++ b/src/nos/lib/filesys_lib/link.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_link Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _link Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 23 23 36 11 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/lseek.rel b/src/nos/lib/filesys_lib/lseek.rel new file mode 100644 index 00000000..d26a1f75 --- /dev/null +++ b/src/nos/lib/filesys_lib/lseek.rel @@ -0,0 +1,84 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S _sys_lseek Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F2 flags 0 +S _lseek Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 0A DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 0B 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 E5 3E 10 DD 4E 0C +R 00 00 01 00 02 04 05 00 +T 60 00 00 00 DD 46 0D DD 6E 0A DD 66 0B CD +R 00 00 01 00 +T 6A 00 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 0A 00 +T 72 00 00 00 10 00 ED 4B 00 00 00 00 09 DD 5E +R 00 00 01 00 02 08 05 00 +T 7B 00 00 00 0E DD 56 0F 73 23 72 2A +R 00 00 01 00 +T 83 00 00 00 00 00 00 00 23 23 23 36 19 3E +R 00 00 01 00 02 04 05 00 +T 8B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 90 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 04 00 +T 95 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 9C 00 00 00 FB DD 74 FC DD 71 FD DD 70 FE 21 +R 00 00 01 00 +T A7 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T B0 00 00 00 FB DD 46 FC 71 23 70 3E +R 00 00 01 00 +T B8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T BD 00 00 00 00 00 00 00 DD 7E FB DD A6 FC DD +R 00 00 01 00 02 04 00 00 +T C6 00 00 00 A6 FD DD A6 FE 3C 20 0F +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T D7 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 21 00 00 22 00 00 00 00 DD 4E FD +R 00 00 01 00 02 08 05 00 +T E6 00 00 00 DD 46 FE DD 6E FB DD 66 FC C3 +R 00 00 01 00 +T F0 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0B 00 diff --git a/src/nos/lib/filesys_lib/magic.rel b/src/nos/lib/filesys_lib/magic.rel new file mode 100644 index 00000000..41048fb2 --- /dev/null +++ b/src/nos/lib/filesys_lib/magic.rel @@ -0,0 +1,34 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___015e_8c96__25s_3a_20corrupted Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S __panic Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 34 flags 0 +S _magic Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 1A 6F 13 1A 67 11 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 91 60 A7 ED 52 28 21 +R 00 00 01 00 +T 10 00 00 00 +R 00 00 01 00 +T 10 00 00 00 DD 6E 02 DD 66 03 E5 DD 6E 04 DD +R 00 00 01 00 +T 1B 00 00 00 66 05 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 01 00 +T 22 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 05 00 +T 28 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 2F 00 00 00 F1 F1 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/max_int.rel b/src/nos/lib/filesys_lib/max_int.rel new file mode 100644 index 00000000..f39fc2ed --- /dev/null +++ b/src/nos/lib/filesys_lib/max_int.rel @@ -0,0 +1,26 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D flags 0 +S _max_int Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 4B 42 DD 6E 04 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 05 CD 00 00 00 00 30 04 69 60 +R 00 00 01 00 02 07 03 00 +T 12 00 00 00 18 06 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/filesys_lib/max_long.rel b/src/nos/lib/filesys_lib/max_long.rel new file mode 100644 index 00000000..2955d3b4 --- /dev/null +++ b/src/nos/lib/filesys_lib/max_long.rel @@ -0,0 +1,30 @@ +XL4 +H 2 areas 6 global symbols +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 33 flags 0 +S _max_long Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 D5 DD 4E 0C DD +R 00 00 01 00 02 05 01 00 +T 09 00 00 00 46 0D DD 6E 0A DD 66 0B CD +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 30 0E DD 4E 04 DD 46 +R 00 00 01 00 02 04 02 00 +T 1B 00 00 00 05 DD 6E 02 DD 66 03 18 0C +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 DD 4E 0C DD 46 0D DD 6E 0A DD 66 +R 00 00 01 00 +T 2F 00 00 00 0B +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/max_uint.rel b/src/nos/lib/filesys_lib/max_uint.rel new file mode 100644 index 00000000..ded7a164 --- /dev/null +++ b/src/nos/lib/filesys_lib/max_uint.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S _max_uint Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 69 60 A7 ED 52 30 +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 03 EB 18 06 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/filesys_lib/max_ulong.rel b/src/nos/lib/filesys_lib/max_ulong.rel new file mode 100644 index 00000000..bd29065f --- /dev/null +++ b/src/nos/lib/filesys_lib/max_ulong.rel @@ -0,0 +1,29 @@ +XL4 +H 2 areas 5 global symbols +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S _max_ulong Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 D5 A7 DD 6E 0A +R 00 00 01 00 02 05 01 00 +T 09 00 00 00 DD 66 0B C1 ED 42 DD 6E 0C DD 66 +R 00 00 01 00 +T 14 00 00 00 0D C1 ED 42 30 0E DD 4E 04 DD 46 +R 00 00 01 00 +T 1F 00 00 00 05 DD 6E 02 DD 66 03 18 0C +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 4E 0C DD 46 0D DD 6E 0A DD 66 +R 00 00 01 00 +T 33 00 00 00 0B +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/min_int.rel b/src/nos/lib/filesys_lib/min_int.rel new file mode 100644 index 00000000..0a344b8b --- /dev/null +++ b/src/nos/lib/filesys_lib/min_int.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1A flags 0 +S _min_int Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EB CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0B 03 00 +T 07 00 00 00 30 08 DD 6E 02 DD 66 03 18 06 +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/filesys_lib/min_long.rel b/src/nos/lib/filesys_lib/min_long.rel new file mode 100644 index 00000000..8dde464f --- /dev/null +++ b/src/nos/lib/filesys_lib/min_long.rel @@ -0,0 +1,30 @@ +XL4 +H 2 areas 6 global symbols +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 34 flags 0 +S _min_long Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0C DD 66 0D +R 00 00 01 00 02 05 01 00 +T 09 00 00 00 E5 DD 6E 0A DD 66 0B E5 EB CD +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 30 0E DD 4E 04 DD 46 +R 00 00 01 00 02 04 02 00 +T 1C 00 00 00 05 DD 6E 02 DD 66 03 18 0C +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 4E 0C DD 46 0D DD 6E 0A DD 66 +R 00 00 01 00 +T 30 00 00 00 0B +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/min_uint.rel b/src/nos/lib/filesys_lib/min_uint.rel new file mode 100644 index 00000000..f2883205 --- /dev/null +++ b/src/nos/lib/filesys_lib/min_uint.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1A flags 0 +S _min_uint Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EB A7 ED 42 30 08 +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 DD 6E 02 DD 66 03 18 06 +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/filesys_lib/min_ulong.rel b/src/nos/lib/filesys_lib/min_ulong.rel new file mode 100644 index 00000000..bcce0b0f --- /dev/null +++ b/src/nos/lib/filesys_lib/min_ulong.rel @@ -0,0 +1,29 @@ +XL4 +H 2 areas 5 global symbols +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S _min_ulong Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EB 59 50 A7 DD 4E +R 00 00 01 00 02 05 01 00 +T 09 00 00 00 0A DD 46 0B ED 42 EB DD 4E 0C DD +R 00 00 01 00 +T 14 00 00 00 46 0D ED 42 30 0E DD 4E 04 DD 46 +R 00 00 01 00 +T 1F 00 00 00 05 DD 6E 02 DD 66 03 18 0C +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 4E 0C DD 46 0D DD 6E 0A DD 66 +R 00 00 01 00 +T 33 00 00 00 0B +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/mknod.rel b/src/nos/lib/filesys_lib/mknod.rel new file mode 100644 index 00000000..578c5907 --- /dev/null +++ b/src/nos/lib/filesys_lib/mknod.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_mknod Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _mknod Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 12 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/mount.rel b/src/nos/lib/filesys_lib/mount.rel new file mode 100644 index 00000000..95c4d6d7 --- /dev/null +++ b/src/nos/lib/filesys_lib/mount.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_mountumount Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _mount Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/n_creat.rel b/src/nos/lib/filesys_lib/n_creat.rel new file mode 100644 index 00000000..126592ca --- /dev/null +++ b/src/nos/lib/filesys_lib/n_creat.rel @@ -0,0 +1,225 @@ +XL4 +H 3 areas 10 global symbols +S _filename Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _namei Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _wr_inode Ref00000000 +S _ch_link Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _newfile Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _truncateto0 Ref00000000 +S _setftim Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1EB flags 0 +S _n_creat Def00000000 +A CSTR size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EC FF AF DD 77 EE +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 DD 77 EF 1E 01 D5 21 04 00 39 4D +R 00 00 01 00 +T 14 00 00 00 44 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 1C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 21 00 00 00 00 00 00 00 F1 DD 75 EC DD 74 ED +R 00 00 01 00 02 04 01 00 +T 2A 00 00 00 7D B4 CA B5 00 00 00 +R 00 00 01 00 00 07 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 AF DD B6 04 28 10 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 3E 00 00 00 11 23 36 00 C3 C1 01 00 00 +R 00 00 01 00 00 09 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 5E EE DD 56 EF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 4D 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 54 00 00 00 0A 00 DD 4E EC DD 46 ED 09 7E E6 +R 00 00 01 00 +T 5F 00 00 00 00 4F 23 7E E6 F0 47 3E 40 A8 B1 +R 00 00 01 00 +T 6A 00 00 00 20 10 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 75 00 00 00 15 23 36 00 C3 CF 01 00 00 +R 00 00 01 00 00 09 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 5E EC DD 56 ED 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 84 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0B 00 02 0A 01 00 +T 8B 00 00 00 E6 02 47 7C E6 00 B0 20 10 +R 00 00 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 9D 00 00 00 0D 23 36 00 C3 CF 01 00 00 +R 00 00 01 00 00 09 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 DD 5E EC DD 56 ED 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T AC 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T B3 00 00 00 A5 01 00 00 +R 00 00 01 00 00 04 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 DD 7E EE DD B6 EF 20 03 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 C3 CF 01 00 00 +R 00 00 01 00 00 05 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 21 04 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T CB 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T D1 00 00 00 CD 00 00 00 00 21 04 00 39 4D 44 +R 00 00 01 00 02 05 01 00 +T DA 00 00 00 DD 5E EE DD 56 EF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T E2 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T E9 00 00 00 75 EC DD 74 ED 7D B4 20 03 +R 00 00 01 00 +T F2 00 00 00 +R 00 00 01 00 +T F2 00 00 00 C3 CF 01 00 00 +R 00 00 01 00 00 05 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 21 0A 00 DD 4E EC DD 46 ED 09 DD +R 00 00 01 00 +T 00 01 00 00 5E 0A DD 56 0B 73 23 72 0E 07 DD +R 00 00 01 00 +T 0B 01 00 00 5E EC DD 56 ED 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T 13 01 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 1A 01 00 00 0A E6 00 6F DD 7E 0B E6 F0 67 3E +R 00 00 01 00 +T 25 01 00 00 40 AC B5 20 7B +R 00 00 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 DD 6E EC DD 66 ED E5 21 +R 00 00 01 00 +T 32 01 00 00 01 00 00 00 E5 01 00 00 00 00 DD +R 00 00 01 00 00 04 02 00 00 0A 02 00 +T 39 01 00 00 5E EC DD 56 ED 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 41 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 48 01 00 00 7D B4 28 22 DD 6E EE DD 66 EF E5 +R 00 00 01 00 +T 53 01 00 00 21 03 00 00 00 E5 01 00 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 02 00 +T 5A 01 00 00 DD 5E EC DD 56 ED 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 62 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 69 01 00 00 F1 7D B4 20 02 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 18 51 +R 00 00 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 21 12 00 DD 4E EC DD 46 ED 09 AF +R 00 00 01 00 +T 7B 01 00 00 36 20 23 77 23 77 23 77 21 0C 00 +R 00 00 01 00 +T 86 01 00 00 09 34 23 20 01 34 +R 00 00 01 00 +T 8C 01 00 00 +R 00 00 01 00 +T 8C 01 00 00 21 0C 00 DD 4E EE DD 46 EF 09 34 +R 00 00 01 00 +T 97 01 00 00 23 20 01 34 +R 00 00 01 00 +T 9B 01 00 00 +R 00 00 01 00 +T 9B 01 00 00 DD 6E EE DD 66 EF 23 23 36 01 +R 00 00 01 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 DD 5E EC DD 56 ED 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T AD 01 00 00 21 00 00 00 00 CD 00 00 00 00 CB +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T B4 01 00 00 7C 28 02 +R 00 00 01 00 +T B7 01 00 00 +R 00 00 01 00 +T B7 01 00 00 18 16 +R 00 00 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 DD 6E EC DD 66 ED 18 27 +R 00 00 01 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 DD 5E EE DD 56 EF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T C9 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T CF 01 00 00 +R 00 00 01 00 +T CF 01 00 00 DD 7E EC DD B6 ED 28 0E +R 00 00 01 00 +T D7 01 00 00 +R 00 00 01 00 +T D7 01 00 00 DD 5E EC DD 56 ED 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T DF 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 21 00 00 +R 00 00 01 00 +T E8 01 00 00 +R 00 00 01 00 +T E8 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 +T 01 00 00 00 +R 00 00 02 00 +T 01 00 00 00 2E 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 2E 2E 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/namecomp.rel b/src/nos/lib/filesys_lib/namecomp.rel new file mode 100644 index 00000000..b7ea5abd --- /dev/null +++ b/src/nos/lib/filesys_lib/namecomp.rel @@ -0,0 +1,73 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 73 flags 0 +S _namecomp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 36 FE 0E +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 DD 6E 02 DD 66 03 AF B6 28 40 DD +R 00 00 01 00 +T 14 00 00 00 6E 02 DD 66 03 7E FE 2F 28 35 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T 29 00 00 00 74 05 2B E5 DD 6E 02 DD 66 03 23 +R 00 00 01 00 +T 34 00 00 00 DD 75 02 DD 74 03 2B 7E E1 BE 28 +R 00 00 01 00 +T 3F 00 00 00 02 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 18 2B +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 DD 35 FE DD 46 FE 04 05 20 05 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 21 FF FF 18 1F +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 18 B6 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 DD 6E 04 DD 66 05 AF B6 28 0B DD +R 00 00 01 00 +T 5E 00 00 00 6E 04 DD 66 05 7E FE 2F 20 05 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 21 01 00 18 03 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 21 00 00 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/filesys_lib/namei.rel b/src/nos/lib/filesys_lib/namei.rel new file mode 100644 index 00000000..ec752e6a --- /dev/null +++ b/src/nos/lib/filesys_lib/namei.rel @@ -0,0 +1,414 @@ +XL4 +H 3 areas F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _i_deref Ref00000000 +S _usrget_str Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _root_ino Ref00000000 +S __namei Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _readwritei Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _zerobuf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3E2 flags 0 +S _namei Def00000000 +A CSTR size 1 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EC FF AF DD 77 F2 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 DD 77 F3 AF DD 77 F4 DD 77 F5 DD +R 00 00 01 00 +T 14 00 00 00 36 FA 00 1E 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T 1C 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 23 00 00 00 FB DD 74 FC DD 75 FD DD 74 FE 11 +R 00 00 01 00 +T 2E 00 00 00 00 02 D5 DD 4E 02 DD 46 03 EB 3E +R 00 00 01 00 +T 39 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 3E 00 00 00 00 00 00 00 F1 21 08 00 ED 4B +R 00 00 01 00 02 04 00 00 +T 46 00 00 00 00 00 00 00 09 AF 77 23 77 DD 6E +R 00 00 01 00 02 04 05 00 +T 4F 00 00 00 FD DD 66 FE 7E FE 2F 20 11 2A +R 00 00 01 00 +T 59 00 00 00 00 00 00 00 46 23 66 68 01 6B 00 +R 00 00 01 00 02 04 05 00 +T 62 00 00 00 09 46 23 66 68 18 0F +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 05 00 +T 71 00 00 00 27 00 09 46 23 66 68 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 DD 75 F0 DD 74 F1 +R 00 00 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 21 02 00 39 E5 DD 6E F0 DD 66 F1 +R 00 00 01 00 +T 89 00 00 00 E5 21 0E 00 39 4D 44 DD 5E FD DD +R 00 00 01 00 +T 94 00 00 00 56 FE 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 99 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T A0 00 00 00 DD 75 EC DD 74 ED 7D B4 CA +R 00 00 01 00 +T A9 00 00 00 38 03 00 00 +R 00 00 01 00 00 04 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 21 0A 00 DD 4E EC DD 46 ED 09 7E +R 00 00 01 00 +T B6 00 00 00 E6 00 4F 23 7E E6 F0 47 3E 90 A8 +R 00 00 01 00 +T C1 00 00 00 B1 20 10 DD 6E F6 DD 66 F7 AF B6 +R 00 00 01 00 +T CC 00 00 00 20 32 AF DD B6 0A 20 2C +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 DD 7E 04 DD B6 05 28 13 +R 00 00 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 DD 6E EE DD 66 EF E5 DD 6E 04 DD +R 00 00 01 00 +T E7 00 00 00 66 05 C1 71 23 70 18 0E +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 DD 5E EE DD 56 EF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T F7 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T FD 00 00 00 +R 00 00 01 00 +T FD 00 00 00 C3 83 03 00 00 +R 00 00 01 00 00 05 01 00 +T 00 01 00 00 +R 00 00 01 00 +T 00 01 00 00 DD 5E EC DD 56 ED 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 08 01 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 0F 01 00 00 E6 04 47 7C E6 00 B0 20 33 +R 00 00 01 00 +T 18 01 00 00 +R 00 00 01 00 +T 18 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 21 01 00 00 01 23 36 00 +R 00 00 01 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 DD 5E EE DD 56 EF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 2D 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 34 01 00 00 5E EC DD 56 ED 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 3C 01 00 00 00 00 00 00 CD 00 00 00 00 AF DD +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 43 01 00 00 77 EC DD 77 ED C3 83 03 00 00 +R 00 00 01 00 00 0A 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 DD 7E F2 DD B6 F3 20 16 +R 00 00 01 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 1E 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0D 00 +T 58 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 5F 01 00 00 F2 DD 74 F3 7D B4 20 02 +R 00 00 01 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 18 2A +R 00 00 01 00 +T 69 01 00 00 +R 00 00 01 00 +T 69 01 00 00 +R 00 00 01 00 +T 69 01 00 00 DD 6E F6 DD 66 F7 AF B6 28 6E +R 00 00 01 00 +T 73 01 00 00 +R 00 00 01 00 +T 73 01 00 00 DD 7E F4 DD B6 F5 20 10 +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 1E 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0D 00 +T 80 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 87 01 00 00 F4 DD 74 F5 +R 00 00 01 00 +T 8B 01 00 00 +R 00 00 01 00 +T 8B 01 00 00 DD 7E F4 DD B6 F5 20 10 +R 00 00 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 9C 01 00 00 0C 23 36 00 C3 83 03 00 00 +R 00 00 01 00 00 09 01 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 DD 6E F4 DD 66 F5 DD 75 F8 DD 74 +R 00 00 01 00 +T AE 01 00 00 F9 +R 00 00 01 00 +T AF 01 00 00 +R 00 00 01 00 +T AF 01 00 00 DD 6E F6 DD 66 F7 23 DD 75 F6 DD +R 00 00 01 00 +T BA 01 00 00 74 F7 2B 46 DD 6E F8 DD 66 F9 23 +R 00 00 01 00 +T C5 01 00 00 DD 75 F8 DD 74 F9 2B 70 04 05 28 +R 00 00 01 00 +T D0 01 00 00 02 +R 00 00 01 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 18 DC +R 00 00 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 DD 6E F4 DD 66 F5 DD 75 F6 DD 74 +R 00 00 01 00 +T DE 01 00 00 F7 18 08 +R 00 00 01 00 +T E1 01 00 00 +R 00 00 01 00 +T E1 01 00 00 DD 36 F6 00 00 00 00 DD 36 F7 +R 00 00 01 00 09 07 02 00 +T E8 01 00 00 00 00 00 00 +R 00 00 01 00 89 04 02 00 +T E9 01 00 00 +R 00 00 01 00 +T E9 01 00 00 21 14 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T F2 01 00 00 00 23 36 02 21 12 00 ED 4B +R 00 00 01 00 +T FB 01 00 00 00 00 00 00 09 DD 5E F2 DD 56 F3 +R 00 00 01 00 02 04 05 00 +T 04 02 00 00 73 23 72 21 16 00 ED 4B +R 00 00 01 00 +T 0C 02 00 00 00 00 00 00 09 AF 77 23 77 23 77 +R 00 00 01 00 02 04 05 00 +T 15 02 00 00 23 77 21 1C 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 1E 02 00 00 09 36 01 DD 4E EC DD 46 ED 1E 00 +R 00 00 01 00 +T 29 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T 2F 02 00 00 00 00 00 00 DD 6E F6 DD 66 F7 DD +R 00 00 01 00 02 04 00 00 +T 38 02 00 00 75 F8 DD 74 F9 +R 00 00 01 00 +T 3D 02 00 00 +R 00 00 01 00 +T 3D 02 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T 48 02 00 00 74 F9 2B 7E B7 28 02 +R 00 00 01 00 +T 4F 02 00 00 +R 00 00 01 00 +T 4F 02 00 00 18 EC +R 00 00 01 00 +T 51 02 00 00 +R 00 00 01 00 +T 51 02 00 00 DD 4E F6 DD 46 F7 DD 6E F8 DD 66 +R 00 00 01 00 +T 5C 02 00 00 F9 A7 ED 42 E5 21 14 00 ED 4B +R 00 00 01 00 +T 66 02 00 00 00 00 00 00 09 4E 23 46 E1 09 01 +R 00 00 01 00 02 04 05 00 +T 6F 02 00 00 FF 01 A7 ED 42 38 10 +R 00 00 01 00 +T 76 02 00 00 +R 00 00 01 00 +T 76 02 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 7F 02 00 00 0C 23 36 00 C3 25 01 00 00 +R 00 00 01 00 00 09 01 00 +T 86 02 00 00 +R 00 00 01 00 +T 86 02 00 00 21 14 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 8F 02 00 00 23 66 68 DD 4E F2 DD 46 F3 09 DD +R 00 00 01 00 +T 9A 02 00 00 75 F8 DD 74 F9 DD 6E F6 DD 66 F7 +R 00 00 01 00 +T A5 02 00 00 AF B6 28 10 +R 00 00 01 00 +T A9 02 00 00 +R 00 00 01 00 +T A9 02 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T B4 02 00 00 74 F9 2B 36 2F +R 00 00 01 00 +T B9 02 00 00 +R 00 00 01 00 +T B9 02 00 00 +R 00 00 01 00 +T B9 02 00 00 DD 6E F6 DD 66 F7 23 DD 75 F6 DD +R 00 00 01 00 +T C4 02 00 00 74 F7 2B 46 DD 6E F8 DD 66 F9 23 +R 00 00 01 00 +T CF 02 00 00 DD 75 F8 DD 74 F9 2B 70 04 05 28 +R 00 00 01 00 +T DA 02 00 00 02 +R 00 00 01 00 +T DB 02 00 00 +R 00 00 01 00 +T DB 02 00 00 18 DC +R 00 00 01 00 +T DD 02 00 00 +R 00 00 01 00 +T DD 02 00 00 DD 6E F2 DD 66 F3 DD 75 FD DD 74 +R 00 00 01 00 +T E8 02 00 00 FE 7E FE 2F 20 05 2A 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T F1 02 00 00 18 06 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 DD 6E EE DD 66 EF +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 DD 75 F0 DD 74 F1 DD 34 FA DD 7E +R 00 00 01 00 +T 04 03 00 00 FA FE 0D 20 10 +R 00 00 01 00 +T 09 03 00 00 +R 00 00 01 00 +T 09 03 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 12 03 00 00 28 23 36 00 C3 25 01 00 00 +R 00 00 01 00 00 09 01 00 +T 19 03 00 00 +R 00 00 01 00 +T 19 03 00 00 DD 5E EE DD 56 EF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 21 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 28 03 00 00 5E EC DD 56 ED 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 30 03 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 36 03 00 00 7E 00 00 00 +R 00 00 01 00 00 04 01 00 +T 38 03 00 00 +R 00 00 01 00 +T 38 03 00 00 DD 7E 04 DD B6 05 28 13 +R 00 00 01 00 +T 40 03 00 00 +R 00 00 01 00 +T 40 03 00 00 DD 6E EE DD 66 EF E5 DD 6E 04 DD +R 00 00 01 00 +T 4B 03 00 00 66 05 C1 71 23 70 18 30 +R 00 00 01 00 +T 53 03 00 00 +R 00 00 01 00 +T 53 03 00 00 DD 7E EE DD B6 EF 28 0E +R 00 00 01 00 +T 5B 03 00 00 +R 00 00 01 00 +T 5B 03 00 00 DD 5E EE DD 56 EF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 63 03 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 69 03 00 00 +R 00 00 01 00 +T 69 03 00 00 21 08 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 05 00 +T 72 03 00 00 23 B6 20 0D +R 00 00 01 00 +T 76 03 00 00 +R 00 00 01 00 +T 76 03 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 7F 03 00 00 02 23 36 00 +R 00 00 01 00 +T 83 03 00 00 +R 00 00 01 00 +T 83 03 00 00 +R 00 00 01 00 +T 83 03 00 00 +R 00 00 01 00 +T 83 03 00 00 DD 7E F2 DD B6 F3 28 1B +R 00 00 01 00 +T 8B 03 00 00 +R 00 00 01 00 +T 8B 03 00 00 0E 00 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T 94 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 99 03 00 00 00 00 00 00 CB 7C 28 07 +R 00 00 01 00 02 04 00 00 +T 9F 03 00 00 +R 00 00 01 00 +T 9F 03 00 00 AF DD 77 EC DD 77 ED +R 00 00 01 00 +T A6 03 00 00 +R 00 00 01 00 +T A6 03 00 00 +R 00 00 01 00 +T A6 03 00 00 DD 7E F4 DD B6 F5 28 1B +R 00 00 01 00 +T AE 03 00 00 +R 00 00 01 00 +T AE 03 00 00 0E 00 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T B7 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T BC 03 00 00 00 00 00 00 CB 7C 28 07 +R 00 00 01 00 02 04 00 00 +T C2 03 00 00 +R 00 00 01 00 +T C2 03 00 00 AF DD 77 EC DD 77 ED +R 00 00 01 00 +T C9 03 00 00 +R 00 00 01 00 +T C9 03 00 00 +R 00 00 01 00 +T C9 03 00 00 0E 00 DD 5E FB DD 56 FC 3E +R 00 00 01 00 +T D2 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T D7 03 00 00 00 00 00 00 DD 6E EC DD 66 ED C3 +R 00 00 01 00 02 04 00 00 +T E0 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/newfile.rel b/src/nos/lib/filesys_lib/newfile.rel new file mode 100644 index 00000000..ecd06abe --- /dev/null +++ b/src/nos/lib/filesys_lib/newfile.rel @@ -0,0 +1,112 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memset Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _wr_inode Ref00000000 +S _ch_link Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _i_open Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11A flags 0 +S _newfile Def00000000 +A CSTR size 1 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 7D E6 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 15 00 00 00 02 57 7C E6 00 B2 20 13 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 26 00 00 00 01 23 36 00 21 00 00 C3 +R 00 00 01 00 +T 2E 00 00 00 17 01 00 00 +R 00 00 01 00 00 04 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 01 00 00 DD 6E 02 DD 66 03 23 23 +R 00 00 01 00 +T 3B 00 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 42 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 49 00 00 00 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 C3 03 01 00 00 +R 00 00 01 00 00 05 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 21 40 00 E5 01 00 00 21 0A 00 DD +R 00 00 01 00 +T 5F 00 00 00 5E FE DD 56 FF 19 EB 3E +R 00 00 01 00 +T 67 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 6C 00 00 00 00 00 00 00 F1 21 0A 00 DD 4E FE +R 00 00 01 00 02 04 00 00 +T 75 00 00 00 DD 46 FF 09 36 00 23 36 80 21 +R 00 00 01 00 +T 7F 00 00 00 0C 00 09 36 01 23 36 00 21 0E 00 +R 00 00 01 00 +T 8A 00 00 00 09 E5 2A 00 00 00 00 56 23 66 6A +R 00 00 01 00 02 07 06 00 +T 93 00 00 00 11 1D 00 19 5E 23 56 E1 73 23 72 +R 00 00 01 00 +T 9E 00 00 00 21 10 00 09 E5 2A 00 00 00 00 56 +R 00 00 01 00 02 0A 06 00 +T A7 00 00 00 23 66 6A 11 1F 00 19 5E 23 56 E1 +R 00 00 01 00 +T B2 00 00 00 73 23 72 69 60 23 23 36 01 DD 5E +R 00 00 01 00 +T BD 00 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T C4 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 04 00 02 09 00 00 +T CB 00 00 00 FE DD 66 FF E5 DD 6E 04 DD 66 05 +R 00 00 01 00 +T D6 00 00 00 E5 01 00 00 00 00 DD 5E 02 DD 56 +R 00 00 01 00 00 06 02 00 +T DF 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T E5 00 00 00 CD 00 00 00 00 F1 F1 7D B4 20 15 +R 00 00 01 00 02 05 00 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T F6 00 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T FD 00 00 00 DD 77 FE DD 77 FF +R 00 00 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 0B 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 12 01 00 00 6E FE DD 66 FF +R 00 00 01 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/nogood.rel b/src/nos/lib/filesys_lib/nogood.rel new file mode 100644 index 00000000..38470e1a --- /dev/null +++ b/src/nos/lib/filesys_lib/nogood.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S _nogood Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 05 02 00 +T 07 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/filesys_lib/nogood_ioctl.rel b/src/nos/lib/filesys_lib/nogood_ioctl.rel new file mode 100644 index 00000000..f3d9e82c --- /dev/null +++ b/src/nos/lib/filesys_lib/nogood_ioctl.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S _nogood_ioctl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 05 02 00 +T 07 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/filesys_lib/nogood_rdwr.rel b/src/nos/lib/filesys_lib/nogood_rdwr.rel new file mode 100644 index 00000000..ecc1d24d --- /dev/null +++ b/src/nos/lib/filesys_lib/nogood_rdwr.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S _nogood_rdwr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 05 02 00 +T 07 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/filesys_lib/oft_alloc.rel b/src/nos/lib/filesys_lib/oft_alloc.rel new file mode 100644 index 00000000..b87d2b16 --- /dev/null +++ b/src/nos/lib/filesys_lib/oft_alloc.rel @@ -0,0 +1,96 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _callocw Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Oftab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size CC flags 0 +S _oft_alloc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 36 FE 00 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 DD 7E FE FE 0F 30 51 +R 00 00 01 00 +T 10 00 00 00 +R 00 00 01 00 +T 10 00 00 00 DD 6E FE 26 00 29 01 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 19 00 00 00 09 46 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 24 00 00 00 7D B4 28 34 21 07 00 DD 4E FC DD +R 00 00 01 00 +T 2F 00 00 00 46 FD 09 7E B7 20 26 +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 21 08 00 E5 01 00 00 DD 5E FC DD +R 00 00 01 00 +T 41 00 00 00 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 46 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 4D 00 00 00 07 00 DD 4E FC DD 46 FD 09 34 DD +R 00 00 01 00 +T 58 00 00 00 6E FE 18 6D +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 34 FE 18 A8 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 36 FE 00 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 DD 7E FE FE 0F 30 4E +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 6E FE 26 00 29 01 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 75 00 00 00 09 46 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 80 00 00 00 7D B4 20 31 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 01 01 00 11 08 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 8C 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 93 00 00 00 75 FC DD 74 FD 01 07 00 09 34 DD +R 00 00 01 00 +T 9E 00 00 00 6E FE 26 00 29 01 00 00 00 00 09 +R 00 00 01 00 02 0A 07 00 +T A7 00 00 00 DD 4E FC DD 46 FD 71 23 70 DD 6E +R 00 00 01 00 +T B2 00 00 00 FE 18 14 +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 DD 34 FE 18 AB +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 03 00 +T C3 00 00 00 17 23 36 00 2E FF +R 00 00 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/oft_deref.rel b/src/nos/lib/filesys_lib/oft_deref.rel new file mode 100644 index 00000000..72fdb455 --- /dev/null +++ b/src/nos/lib/filesys_lib/oft_deref.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Oftab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 62 flags 0 +S _oft_deref Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 26 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 00 29 01 00 00 00 00 09 46 23 66 +R 00 00 01 00 02 07 06 00 +T 12 00 00 00 68 DD 75 FE DD 74 FF 01 07 00 09 +R 00 00 01 00 +T 1D 00 00 00 35 46 04 05 20 3C 21 04 00 DD 4E +R 00 00 01 00 +T 28 00 00 00 FE DD 46 FF 09 7E 23 B6 28 2D +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 3D 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 42 00 00 00 00 00 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 49 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 4F 00 00 00 00 00 00 00 DD 6E 02 26 00 29 01 +R 00 00 01 00 02 04 00 00 +T 58 00 00 00 00 00 00 00 09 AF 77 23 77 +R 00 00 01 00 02 04 06 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/ok.rel b/src/nos/lib/filesys_lib/ok.rel new file mode 100644 index 00000000..27dde8f2 --- /dev/null +++ b/src/nos/lib/filesys_lib/ok.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S _ok Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 02 00 +T 07 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/filesys_lib/ok_rdwr.rel b/src/nos/lib/filesys_lib/ok_rdwr.rel new file mode 100644 index 00000000..52396e8c --- /dev/null +++ b/src/nos/lib/filesys_lib/ok_rdwr.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S _ok_rdwr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 02 00 +T 07 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/filesys_lib/open.rel b/src/nos/lib/filesys_lib/open.rel new file mode 100644 index 00000000..7b14be3e --- /dev/null +++ b/src/nos/lib/filesys_lib/open.rel @@ -0,0 +1,91 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F8 flags 0 +S _open Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 06 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 04 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 0A DD 56 0B 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 4E 0C DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 46 0D 71 23 70 DD 7E 0C E6 00 47 +R 00 00 01 00 +T 58 00 00 00 DD 7E 0D E6 01 B0 28 32 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 21 2E 00 39 01 02 00 09 DD 75 E0 +R 00 00 01 00 +T 6B 00 00 00 DD 74 E1 21 0E 00 ED 4B +R 00 00 01 00 +T 73 00 00 00 00 00 00 00 09 E5 21 04 00 39 7E +R 00 00 01 00 02 04 05 00 +T 7C 00 00 00 C6 02 77 23 7E CE 00 77 2B 6E 67 +R 00 00 01 00 +T 87 00 00 00 2B 2B 4E 23 46 E1 71 23 70 18 0C +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 21 0E 00 ED 4B 00 00 00 00 09 AF +R 00 00 01 00 02 09 05 00 +T 9B 00 00 00 77 23 77 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 2A 00 00 00 00 23 23 23 36 14 3E +R 00 00 01 00 02 05 05 00 +T A7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T AC 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 09 00 +T B1 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T B8 00 00 00 DE DD 74 DF 21 04 00 ED 4B +R 00 00 01 00 +T C1 00 00 00 00 00 00 00 09 DD 4E DE DD 46 DF +R 00 00 01 00 02 04 05 00 +T CA 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T D0 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T D7 00 00 00 3C 20 0F +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T E3 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T E9 00 00 00 +R 00 00 01 00 +T E9 00 00 00 21 00 00 22 00 00 00 00 DD 6E DE +R 00 00 01 00 02 08 05 00 +T F2 00 00 00 DD 66 DF C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/p_init.rel b/src/nos/lib/filesys_lib/p_init.rel new file mode 100644 index 00000000..3024f319 --- /dev/null +++ b/src/nos/lib/filesys_lib/p_init.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0517_2f09_p_5finit_28_29 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A2 flags 0 +S _p_init Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 36 FC +R 00 00 01 00 02 05 06 00 +T 08 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 01 00 8B 0B 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 01 02 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 01 00 +T 16 00 00 00 A7 ED 42 30 49 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 01 01 00 11 7B 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 23 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 2A 00 00 00 75 FE DD 74 FF 7D B4 20 11 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 09 00 02 0B 09 00 +T 39 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 3F 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD +R 00 00 01 00 +T 4F 00 00 00 66 FD C1 71 23 70 DD 7E FC C6 02 +R 00 00 01 00 +T 5A 00 00 00 DD 77 FC 30 03 DD 34 FD +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 18 A9 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 2A 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 01 00 +T 6D 00 00 00 36 03 21 13 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T 78 00 00 00 09 36 04 21 21 00 09 36 12 23 36 +R 00 00 01 00 +T 83 00 00 00 00 21 0A 00 E5 01 FF FF 21 71 00 +R 00 00 01 00 +T 8E 00 00 00 DD 5E FE DD 56 FF 19 EB 3E +R 00 00 01 00 +T 97 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 9C 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 03 00 diff --git a/src/nos/lib/filesys_lib/panic.rel b/src/nos/lib/filesys_lib/panic.rel new file mode 100644 index 00000000..4dfa3601 --- /dev/null +++ b/src/nos/lib/filesys_lib/panic.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___002d_e8fc__0apanic_3a_20 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __dprintf Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _vdprintf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _exit Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4A flags 0 +S _panic Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 0E +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 01 00 02 0A 01 00 +T 0C 00 00 00 21 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 13 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 1A 00 00 00 F1 21 0C 00 39 01 02 00 09 DD 75 +R 00 00 01 00 +T 25 00 00 00 FE DD 74 FF E5 DD 4E 0A DD 46 0B +R 00 00 01 00 +T 30 00 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 06 00 +T 36 00 00 00 00 00 00 00 CD 00 00 00 00 F1 11 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 3D 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 42 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 48 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/filesys_lib/rargs.rel b/src/nos/lib/filesys_lib/rargs.rel new file mode 100644 index 00000000..51ccb67b --- /dev/null +++ b/src/nos/lib/filesys_lib/rargs.rel @@ -0,0 +1,90 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _usrput_int Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _usrput Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E2 flags 0 +S _rargs Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 06 00 09 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 75 FE DD 74 FF 0A 6F 03 0A 67 +R 00 00 01 00 +T 14 00 00 00 DD 75 FA DD 74 FB DD 4E 02 DD 46 +R 00 00 01 00 +T 1F 00 00 00 03 DD 71 FC DD 70 FD 23 29 4D 44 +R 00 00 01 00 +T 2A 00 00 00 21 08 00 39 7E 81 77 23 7E 88 77 +R 00 00 01 00 +T 35 00 00 00 DD 6E 04 DD 66 05 23 23 7E 23 B6 +R 00 00 01 00 +T 40 00 00 00 28 21 +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 4D 00 00 00 C5 DD 4E FE DD 46 FF DD 5E 02 DD +R 00 00 01 00 +T 58 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 DD 7E 0A DD B6 0B 28 11 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 DD 6E FA DD 66 FB E5 DD 6E 0A DD +R 00 00 01 00 +T 76 00 00 00 66 0B C1 71 23 70 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 6E FA DD 66 FB 2B DD 75 FA DD +R 00 00 01 00 +T 87 00 00 00 74 FB 23 7D B4 28 3A +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 DD 4E 02 DD 46 03 DD 6E FC DD 66 +R 00 00 01 00 +T 99 00 00 00 FD 5D 54 23 23 DD 75 FC DD 74 FD +R 00 00 01 00 +T A4 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T AA 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T BF 00 00 00 74 FF 2B 7E B7 20 E6 +R 00 00 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 18 B4 +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 01 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T D2 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T D7 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 C3 +R 00 00 01 00 02 04 00 00 +T E0 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/filesys_lib/rdtime.rel b/src/nos/lib/filesys_lib/rdtime.rel new file mode 100644 index 00000000..04f6d4b4 --- /dev/null +++ b/src/nos/lib/filesys_lib/rdtime.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Clock Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S _rdtime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 ED 4B 02 00 00 00 +R 00 00 01 00 02 05 02 00 02 0B 03 00 +T 07 00 00 00 2A 00 00 00 00 E5 EB D1 73 23 72 +R 00 00 01 00 02 05 03 00 +T 10 00 00 00 23 71 23 70 C3 00 00 00 00 +R 00 00 01 00 02 09 00 00 diff --git a/src/nos/lib/filesys_lib/read.rel b/src/nos/lib/filesys_lib/read.rel new file mode 100644 index 00000000..941c8733 --- /dev/null +++ b/src/nos/lib/filesys_lib/read.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_readwrite Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _read Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 17 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/readwritei.rel b/src/nos/lib/filesys_lib/readwritei.rel new file mode 100644 index 00000000..320011bb --- /dev/null +++ b/src/nos/lib/filesys_lib/readwritei.rel @@ -0,0 +1,636 @@ +XL4 +H 2 areas 18 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _memcpy Ref00000000 +S _isdevice Ref00000000 +S _cdreadwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _usrget Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _bmap Ref00000000 +S ?L_ANDASG_L03 Ref00000000 +S _ksignal Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _min_int Ref00000000 +S _usrput Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S _zerobuf Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 68E flags 0 +S _readwritei Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EE FF AF DD 77 F6 +R 00 00 01 00 02 05 10 00 +T 09 00 00 00 DD 77 F7 03 03 03 0A 6F 03 0A 67 +R 00 00 01 00 +T 14 00 00 00 DD 75 FC DD 74 FD DD 36 FE 00 AF +R 00 00 01 00 +T 1F 00 00 00 DD B6 02 28 1E 21 09 00 DD 4E 04 +R 00 00 01 00 +T 2A 00 00 00 DD 46 05 09 7E B7 28 10 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 09 00 +T 3B 00 00 00 1E 23 36 00 C3 8B 06 00 00 +R 00 00 01 00 00 09 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 21 0A 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 4D 00 00 00 E6 00 5F 23 7E E6 F0 57 CD +R 00 00 01 00 +T 56 00 00 00 00 00 00 00 07 00 00 10 00 20 +R 00 00 01 00 02 04 02 00 +T 5E 00 00 00 00 40 00 60 00 80 00 90 00 A0 +R 00 00 01 00 +T 68 00 00 00 6B 06 00 00 EE 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6C 00 00 00 E5 00 00 00 EE 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 70 00 00 00 B2 02 00 00 EE 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 74 00 00 00 78 00 00 00 BD 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 21 14 00 ED 4B 00 00 00 00 09 E5 +R 00 00 01 00 02 09 09 00 +T 81 00 00 00 AF DD B6 02 28 1A 0E 01 21 22 00 +R 00 00 01 00 +T 8C 00 00 00 DD 5E 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 97 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 9C 00 00 00 00 00 00 00 EB 18 18 +R 00 00 01 00 02 04 00 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 0E 00 21 22 00 DD 5E 04 DD 56 05 +R 00 00 01 00 +T AC 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T B3 00 00 00 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 04 05 00 02 09 00 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 E1 73 23 72 21 14 00 ED 4B +R 00 00 01 00 +T C2 00 00 00 00 00 00 00 09 7E 23 A6 3C 28 17 +R 00 00 01 00 02 04 09 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 21 16 00 ED 4B 00 00 00 00 09 E5 +R 00 00 01 00 02 09 09 00 +T D4 00 00 00 21 14 00 09 5E 23 56 01 00 00 E1 +R 00 00 01 00 +T DF 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 C3 8B 06 00 00 +R 00 00 01 00 00 05 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 AF DD B6 02 28 03 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 C3 6B 06 00 00 +R 00 00 01 00 00 05 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 21 14 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 09 00 +T F7 00 00 00 23 66 68 DD 75 F0 DD 74 F1 AF DD +R 00 00 01 00 +T 02 01 00 00 B6 02 C2 BA 01 00 00 +R 00 00 01 00 00 07 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 21 12 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 12 01 00 00 23 46 23 5E 23 56 D5 C5 21 16 00 +R 00 00 01 00 +T 1D 01 00 00 ED 4B 00 00 00 00 09 4E 23 46 23 +R 00 00 01 00 02 06 09 00 +T 26 01 00 00 5E 23 56 69 60 A7 C1 ED 42 EB C1 +R 00 00 01 00 +T 31 01 00 00 ED 42 38 0F +R 00 00 01 00 +T 35 01 00 00 +R 00 00 01 00 +T 35 01 00 00 21 14 00 ED 4B 00 00 00 00 09 AF +R 00 00 01 00 02 09 09 00 +T 3E 01 00 00 77 23 77 C3 8B 06 00 00 +R 00 00 01 00 00 08 01 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 21 16 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 09 00 +T 4D 01 00 00 23 46 23 5E 23 56 D5 C5 DD 6E F0 +R 00 00 01 00 +T 58 01 00 00 DD 66 F1 11 00 00 C1 09 EB C1 ED +R 00 00 01 00 +T 63 01 00 00 4A E5 D5 21 12 00 DD 4E 04 DD 46 +R 00 00 01 00 +T 6E 01 00 00 05 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 79 01 00 00 00 00 00 00 30 2C +R 00 00 01 00 02 04 0F 00 +T 7D 01 00 00 +R 00 00 01 00 +T 7D 01 00 00 21 16 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 09 00 +T 86 01 00 00 23 56 23 4E 23 46 D5 21 12 00 DD +R 00 00 01 00 +T 91 01 00 00 4E 04 DD 46 05 09 5E 23 56 23 4E +R 00 00 01 00 +T 9C 01 00 00 23 46 EB D1 A7 ED 52 DD 75 F0 DD +R 00 00 01 00 +T A7 01 00 00 74 F1 +R 00 00 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 21 14 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 09 00 +T B2 01 00 00 4E F0 DD 46 F1 71 23 70 +R 00 00 01 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 C3 D8 02 00 00 +R 00 00 01 00 00 05 01 00 +T BD 01 00 00 +R 00 00 01 00 +T BD 01 00 00 DD 34 FE AF DD B6 02 28 73 +R 00 00 01 00 +T C6 01 00 00 +R 00 00 01 00 +T C6 01 00 00 +R 00 00 01 00 +T C6 01 00 00 21 14 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 09 00 +T CF 01 00 00 23 66 68 DD 75 F0 DD 74 F1 4D 44 +R 00 00 01 00 +T DA 01 00 00 C5 21 12 00 DD 5E 04 DD 56 05 19 +R 00 00 01 00 +T E5 01 00 00 5E 23 56 23 4E 23 46 21 00 24 A7 +R 00 00 01 00 +T F0 01 00 00 ED 52 C1 A7 ED 42 30 3E +R 00 00 01 00 +T F8 01 00 00 +R 00 00 01 00 +T F8 01 00 00 21 07 00 DD 4E 04 DD 46 05 09 3E +R 00 00 01 00 +T 03 02 00 00 01 AE 23 B6 20 1D +R 00 00 01 00 +T 09 02 00 00 +R 00 00 01 00 +T 09 02 00 00 21 14 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 09 00 +T 12 02 00 00 FF 23 36 FF 21 08 00 ED 4B +R 00 00 01 00 +T 1B 02 00 00 00 00 00 00 09 36 20 23 36 00 C3 +R 00 00 01 00 02 04 09 00 +T 24 02 00 00 8B 06 00 00 +R 00 00 01 00 00 04 01 00 +T 26 02 00 00 +R 00 00 01 00 +T 26 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 2E 02 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 35 02 00 00 90 +R 00 00 01 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 C3 D8 02 00 00 +R 00 00 01 00 00 05 01 00 +T 39 02 00 00 +R 00 00 01 00 +T 39 02 00 00 +R 00 00 01 00 +T 39 02 00 00 21 12 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 44 02 00 00 23 56 23 4E 23 46 EB 7D B4 20 23 +R 00 00 01 00 +T 4F 02 00 00 +R 00 00 01 00 +T 4F 02 00 00 21 07 00 DD 4E 04 DD 46 05 09 3E +R 00 00 01 00 +T 5A 02 00 00 01 AE 23 B6 20 02 +R 00 00 01 00 +T 60 02 00 00 +R 00 00 01 00 +T 60 02 00 00 18 10 +R 00 00 01 00 +T 62 02 00 00 +R 00 00 01 00 +T 62 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 6A 02 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 71 02 00 00 C7 +R 00 00 01 00 +T 72 02 00 00 +R 00 00 01 00 +T 72 02 00 00 21 12 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 7D 02 00 00 23 56 23 4E 23 46 EB 4D 44 21 +R 00 00 01 00 +T 87 02 00 00 14 00 ED 5B 00 00 00 00 19 5E 23 +R 00 00 01 00 02 08 09 00 +T 90 02 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 11 00 02 0B 11 00 +T 96 02 00 00 CD 00 00 00 00 DD 75 F0 DD 74 F1 +R 00 00 01 00 02 05 00 00 +T 9F 02 00 00 21 14 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 09 00 +T A8 02 00 00 4E F0 DD 46 F1 71 23 70 18 26 +R 00 00 01 00 +T B2 02 00 00 +R 00 00 01 00 +T B2 02 00 00 21 22 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T BD 02 00 00 23 66 68 DD 75 FC DD 74 FD 21 +R 00 00 01 00 +T C7 02 00 00 14 00 ED 4B 00 00 00 00 09 46 23 +R 00 00 01 00 02 08 09 00 +T D0 02 00 00 66 68 DD 75 F0 DD 74 F1 +R 00 00 01 00 +T D8 02 00 00 +R 00 00 01 00 +T D8 02 00 00 +R 00 00 01 00 +T D8 02 00 00 DD 7E F0 DD B6 F1 CA F7 05 00 00 +R 00 00 01 00 00 0B 01 00 +T E1 02 00 00 +R 00 00 01 00 +T E1 02 00 00 21 16 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 09 00 +T EA 02 00 00 23 56 23 4E 23 46 EB 3E 09 CD +R 00 00 01 00 +T F4 02 00 00 00 00 00 00 DD 75 F2 DD 74 F3 21 +R 00 00 01 00 02 04 14 00 +T FD 02 00 00 16 00 ED 4B 00 00 00 00 09 5E 23 +R 00 00 01 00 02 08 09 00 +T 06 03 00 00 56 23 4E 23 46 EB 7D E6 FF 4F 7C +R 00 00 01 00 +T 11 03 00 00 E6 01 47 DD 71 F4 DD 70 F5 AF DD +R 00 00 01 00 +T 1C 03 00 00 B6 02 28 03 AF 18 02 +R 00 00 01 00 +T 23 03 00 00 +R 00 00 01 00 +T 23 03 00 00 3E 01 +R 00 00 01 00 +T 25 03 00 00 +R 00 00 01 00 +T 25 03 00 00 4F C5 DD 4E F2 DD 46 F3 DD 5E 04 +R 00 00 01 00 +T 30 03 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T 36 03 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 3D 03 00 00 75 FA DD 74 FB AF DD B6 02 20 67 +R 00 00 01 00 +T 48 03 00 00 +R 00 00 01 00 +T 48 03 00 00 DD 7E FA DD A6 FB 3C 20 1E DD 5E +R 00 00 01 00 +T 53 03 00 00 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T 5A 03 00 00 00 00 00 00 CD 00 00 00 00 2C 2D +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 61 03 00 00 20 0C 1E 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 15 00 +T 68 03 00 00 00 00 00 00 CD 00 00 00 00 18 18 +R 00 00 01 00 02 04 15 00 02 09 00 00 +T 6F 03 00 00 +R 00 00 01 00 +T 6F 03 00 00 0E 00 C5 DD 4E FA DD 46 FB DD 5E +R 00 00 01 00 +T 7A 03 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 16 00 +T 81 03 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 16 00 02 09 00 00 +T 87 03 00 00 +R 00 00 01 00 +T 87 03 00 00 DD 75 F8 DD 74 F9 7D B4 20 1E +R 00 00 01 00 +T 91 03 00 00 +R 00 00 01 00 +T 91 03 00 00 21 08 00 ED 4B 00 00 00 00 09 3E +R 00 00 01 00 02 09 09 00 +T 9A 03 00 00 0E AE 23 B6 20 0C +R 00 00 01 00 +T A0 03 00 00 +R 00 00 01 00 +T A0 03 00 00 21 08 00 ED 4B 00 00 00 00 09 AF +R 00 00 01 00 02 09 09 00 +T A9 03 00 00 77 23 77 +R 00 00 01 00 +T AC 03 00 00 +R 00 00 01 00 +T AC 03 00 00 C3 8B 06 00 00 +R 00 00 01 00 00 05 01 00 +T AF 03 00 00 +R 00 00 01 00 +T AF 03 00 00 +R 00 00 01 00 +T AF 03 00 00 DD 4E F4 DD 46 F5 21 00 02 A7 ED +R 00 00 01 00 +T BA 03 00 00 42 4D 44 DD 5E F0 DD 56 F1 3E +R 00 00 01 00 +T C4 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T C9 03 00 00 00 00 00 00 DD 75 EE DD 74 EF AF +R 00 00 01 00 02 04 00 00 +T D2 03 00 00 DD B6 02 CA B7 04 00 00 +R 00 00 01 00 00 08 01 00 +T D8 03 00 00 +R 00 00 01 00 +T D8 03 00 00 DD 7E FA DD A6 FB 3C 20 15 DD 5E +R 00 00 01 00 +T E3 03 00 00 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T EA 03 00 00 00 00 00 00 CD 00 00 00 00 2C 2D +R 00 00 01 00 02 04 04 00 02 09 00 00 +T F1 03 00 00 20 03 +R 00 00 01 00 +T F3 03 00 00 +R 00 00 01 00 +T F3 03 00 00 +R 00 00 01 00 +T F3 03 00 00 +R 00 00 01 00 +T F3 03 00 00 C3 8B 06 00 00 +R 00 00 01 00 00 05 01 00 +T F6 03 00 00 +R 00 00 01 00 +T F6 03 00 00 3E 02 DD AE EF DD B6 EE 20 04 3E +R 00 00 01 00 +T 01 04 00 00 01 18 01 +R 00 00 01 00 +T 04 04 00 00 +R 00 00 01 00 +T 04 04 00 00 AF +R 00 00 01 00 +T 05 04 00 00 +R 00 00 01 00 +T 05 04 00 00 4F C5 DD 4E FA DD 46 FB DD 5E FC +R 00 00 01 00 +T 10 04 00 00 DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 16 00 +T 16 04 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 16 00 02 09 00 00 +T 1D 04 00 00 75 F8 DD 74 F9 7D B4 20 03 +R 00 00 01 00 +T 26 04 00 00 +R 00 00 01 00 +T 26 04 00 00 C3 8B 06 00 00 +R 00 00 01 00 00 05 01 00 +T 29 04 00 00 +R 00 00 01 00 +T 29 04 00 00 21 1C 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 09 00 +T 32 04 00 00 B7 20 14 21 12 00 ED 4B +R 00 00 01 00 +T 3A 04 00 00 00 00 00 00 09 46 23 66 68 01 +R 00 00 01 00 02 04 09 00 +T 42 04 00 00 00 80 A7 ED 42 30 2B +R 00 00 01 00 +T 49 04 00 00 +R 00 00 01 00 +T 49 04 00 00 +R 00 00 01 00 +T 49 04 00 00 +R 00 00 01 00 +T 49 04 00 00 DD 6E EE DD 66 EF E5 21 12 00 ED +R 00 00 01 00 +T 54 04 00 00 4B 00 00 00 00 09 4E 23 46 DD 6E +R 00 00 01 00 02 05 09 00 +T 5D 04 00 00 F4 DD 66 F5 DD 5E F8 DD 56 F9 19 +R 00 00 01 00 +T 68 04 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 6E 04 00 00 CD 00 00 00 00 F1 18 29 +R 00 00 01 00 02 05 00 00 +T 74 04 00 00 +R 00 00 01 00 +T 74 04 00 00 DD 6E EE DD 66 EF E5 21 12 00 ED +R 00 00 01 00 +T 7F 04 00 00 4B 00 00 00 00 09 4E 23 46 DD 6E +R 00 00 01 00 02 05 09 00 +T 88 04 00 00 F4 DD 66 F5 DD 5E F8 DD 56 F9 19 +R 00 00 01 00 +T 93 04 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 99 04 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 00 00 +T 9D 04 00 00 +R 00 00 01 00 +T 9D 04 00 00 0E 02 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T A6 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T AB 04 00 00 00 00 00 00 CB 7C 28 03 +R 00 00 01 00 02 04 00 00 +T B1 04 00 00 +R 00 00 01 00 +T B1 04 00 00 C3 8B 06 00 00 +R 00 00 01 00 00 05 01 00 +T B4 04 00 00 +R 00 00 01 00 +T B4 04 00 00 C3 44 05 00 00 +R 00 00 01 00 00 05 01 00 +T B7 04 00 00 +R 00 00 01 00 +T B7 04 00 00 21 1C 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 09 00 +T C0 04 00 00 B7 20 14 21 12 00 ED 4B +R 00 00 01 00 +T C8 04 00 00 00 00 00 00 09 46 23 66 68 01 +R 00 00 01 00 02 04 09 00 +T D0 04 00 00 00 80 A7 ED 42 30 2C +R 00 00 01 00 +T D7 04 00 00 +R 00 00 01 00 +T D7 04 00 00 +R 00 00 01 00 +T D7 04 00 00 +R 00 00 01 00 +T D7 04 00 00 DD 6E EE DD 66 EF E5 DD 6E F4 DD +R 00 00 01 00 +T E2 04 00 00 66 F5 DD 4E F8 DD 46 F9 09 4D 44 +R 00 00 01 00 +T ED 04 00 00 21 12 00 ED 5B 00 00 00 00 19 5E +R 00 00 01 00 02 09 09 00 +T F6 04 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T FB 04 00 00 00 00 00 00 CD 00 00 00 00 F1 18 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 02 05 00 00 2A +R 00 00 01 00 +T 03 05 00 00 +R 00 00 01 00 +T 03 05 00 00 DD 6E EE DD 66 EF E5 DD 6E F4 DD +R 00 00 01 00 +T 0E 05 00 00 66 F5 DD 4E F8 DD 46 F9 09 4D 44 +R 00 00 01 00 +T 19 05 00 00 21 12 00 ED 5B 00 00 00 00 19 5E +R 00 00 01 00 02 09 09 00 +T 22 05 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 12 00 +T 27 05 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 2D 05 00 00 +R 00 00 01 00 +T 2D 05 00 00 0E 00 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T 36 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 3B 05 00 00 00 00 00 00 CB 7C 28 03 +R 00 00 01 00 02 04 00 00 +T 41 05 00 00 +R 00 00 01 00 +T 41 05 00 00 C3 8B 06 00 00 +R 00 00 01 00 00 05 01 00 +T 44 05 00 00 +R 00 00 01 00 +T 44 05 00 00 +R 00 00 01 00 +T 44 05 00 00 21 12 00 ED 4B 00 00 00 00 09 E5 +R 00 00 01 00 02 09 09 00 +T 4D 05 00 00 21 12 00 09 56 23 66 6A DD 5E EE +R 00 00 01 00 +T 58 05 00 00 DD 56 EF 19 4D 44 E1 71 23 70 21 +R 00 00 01 00 +T 63 05 00 00 08 00 39 7E 83 77 23 7E 8A 77 21 +R 00 00 01 00 +T 6E 05 00 00 16 00 ED 4B 00 00 00 00 09 DD 5E +R 00 00 01 00 02 08 09 00 +T 77 05 00 00 EE DD 56 EF 01 00 00 CD +R 00 00 01 00 +T 7F 05 00 00 00 00 00 00 21 02 00 39 7E DD 96 +R 00 00 01 00 02 04 08 00 +T 88 05 00 00 EE 77 23 7E DD 9E EF 77 AF DD B6 +R 00 00 01 00 +T 93 05 00 00 FE 28 5E +R 00 00 01 00 +T 96 05 00 00 +R 00 00 01 00 +T 96 05 00 00 01 12 00 DD 6E F2 DD 66 F3 A7 ED +R 00 00 01 00 +T A1 05 00 00 42 38 11 +R 00 00 01 00 +T A4 05 00 00 +R 00 00 01 00 +T A4 05 00 00 21 16 00 ED 4B 00 00 00 00 09 01 +R 00 00 01 00 02 09 09 00 +T AD 05 00 00 00 00 11 FF 01 CD 00 00 00 00 +R 00 00 01 00 02 0A 0D 00 +T B5 05 00 00 +R 00 00 01 00 +T B5 05 00 00 21 12 00 DD 4E 04 DD 46 05 09 AF +R 00 00 01 00 +T C0 05 00 00 DD B6 02 28 0B DD 5E EE DD 56 EF +R 00 00 01 00 +T CB 05 00 00 01 00 00 18 10 +R 00 00 01 00 +T D0 05 00 00 +R 00 00 01 00 +T D0 05 00 00 DD 5E EE DD 56 EF AF 93 5F 3E 00 +R 00 00 01 00 +T DB 05 00 00 9A 57 01 00 00 +R 00 00 01 00 +T E0 05 00 00 +R 00 00 01 00 +T E0 05 00 00 CD 00 00 00 00 01 00 00 DD 5E 04 +R 00 00 01 00 02 05 08 00 +T E9 05 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T EF 05 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T F4 05 00 00 +R 00 00 01 00 +T F4 05 00 00 C3 D8 02 00 00 +R 00 00 01 00 00 05 01 00 +T F7 05 00 00 +R 00 00 01 00 +T F7 05 00 00 21 14 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 09 00 +T 00 06 00 00 4E F6 DD 46 F7 71 23 70 AF DD B6 +R 00 00 01 00 +T 0B 06 00 00 02 28 5B AF DD B6 FE 20 55 +R 00 00 01 00 +T 14 06 00 00 +R 00 00 01 00 +T 14 06 00 00 +R 00 00 01 00 +T 14 06 00 00 +R 00 00 01 00 +T 14 06 00 00 21 16 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 09 00 +T 1D 06 00 00 23 46 23 5E 23 56 D5 C5 21 12 00 +R 00 00 01 00 +T 28 06 00 00 DD 4E 04 DD 46 05 09 5E 23 56 23 +R 00 00 01 00 +T 33 06 00 00 4E 23 46 EB CD 00 00 00 00 30 2D +R 00 00 01 00 02 09 0F 00 +T 3C 06 00 00 +R 00 00 01 00 +T 3C 06 00 00 21 16 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 09 00 +T 45 06 00 00 23 56 23 4E 23 46 EB E5 21 12 00 +R 00 00 01 00 +T 50 06 00 00 DD 5E 04 DD 56 05 19 D1 73 23 72 +R 00 00 01 00 +T 5B 06 00 00 23 71 23 70 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T 66 06 00 00 23 36 01 +R 00 00 01 00 +T 69 06 00 00 +R 00 00 01 00 +T 69 06 00 00 +R 00 00 01 00 +T 69 06 00 00 18 20 +R 00 00 01 00 +T 6B 06 00 00 +R 00 00 01 00 +T 6B 06 00 00 +R 00 00 01 00 +T 6B 06 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 09 00 +T 74 06 00 00 13 23 36 00 AF DD B6 02 20 0D +R 00 00 01 00 +T 7E 06 00 00 +R 00 00 01 00 +T 7E 06 00 00 21 14 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 09 00 +T 87 06 00 00 FF 23 36 FF +R 00 00 01 00 +T 8B 06 00 00 +R 00 00 01 00 +T 8B 06 00 00 +R 00 00 01 00 +T 8B 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 8E 06 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/filesys_lib/root_dev.rel b/src/nos/lib/filesys_lib/root_dev.rel new file mode 100644 index 00000000..55c90ad1 --- /dev/null +++ b/src/nos/lib/filesys_lib/root_dev.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _root_dev Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/root_ino.rel b/src/nos/lib/filesys_lib/root_ino.rel new file mode 100644 index 00000000..6c8bd502 --- /dev/null +++ b/src/nos/lib/filesys_lib/root_ino.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _root_ino Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/rwsetup.rel b/src/nos/lib/filesys_lib/rwsetup.rel new file mode 100644 index 00000000..5d7fcddd --- /dev/null +++ b/src/nos/lib/filesys_lib/rwsetup.rel @@ -0,0 +1,94 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _getinode Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Oftab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setftim Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DB flags 0 +S _rwsetup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 16 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 0F 00 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 00 00 +T 18 00 00 00 7D B4 20 06 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 00 00 C3 D8 00 00 00 +R 00 00 01 00 00 08 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 2A 00 00 00 00 46 23 66 68 DD 4E +R 00 00 01 00 02 05 03 00 +T 2B 00 00 00 02 06 00 09 01 71 00 09 6E 26 00 +R 00 00 01 00 +T 36 00 00 00 29 01 00 00 00 00 09 46 23 66 68 +R 00 00 01 00 02 06 06 00 +T 3F 00 00 00 DD 75 FE DD 74 FF AF DD B6 0C 28 +R 00 00 01 00 +T 4A 00 00 00 04 06 01 18 02 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 06 00 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 21 06 00 DD 5E FE DD 56 FF 19 7E +R 00 00 01 00 +T 5C 00 00 00 B8 20 0F +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 03 00 +T 68 00 00 00 0D 23 36 00 18 AE +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 AF DD B6 0C 28 04 0E 01 18 02 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 0E 03 +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 82 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T 89 00 00 00 16 00 ED 4B 00 00 00 00 09 E5 DD +R 00 00 01 00 02 08 03 00 +T 92 00 00 00 6E FE DD 66 FF 5E 23 56 23 4E 23 +R 00 00 01 00 +T 9D 00 00 00 46 E1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T A7 00 00 00 12 00 ED 4B 00 00 00 00 09 DD 5E +R 00 00 01 00 02 08 03 00 +T B0 00 00 00 04 DD 56 05 73 23 72 21 14 00 ED +R 00 00 01 00 +T BB 00 00 00 4B 00 00 00 00 09 DD 5E 0A DD 56 +R 00 00 01 00 02 05 03 00 +T C4 00 00 00 0B 73 23 72 21 1C 00 ED 4B +R 00 00 01 00 +T CD 00 00 00 00 00 00 00 09 36 00 DD 6E FC DD +R 00 00 01 00 02 04 03 00 +T D6 00 00 00 66 FD +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/scall1_getfsys.rel b/src/nos/lib/filesys_lib/scall1_getfsys.rel new file mode 100644 index 00000000..615f8d34 --- /dev/null +++ b/src/nos/lib/filesys_lib/scall1_getfsys.rel @@ -0,0 +1,189 @@ +XL4 +H 3 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _Ptab Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Bufpool Ref00000000 +S _Inotab Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _ibuf Ref00000000 +S _kbuf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Fstab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _findfs Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1A0 flags 0 +S _scall1_getfsys Def00000000 +A CSTR size 22 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 5E 02 DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 15 00 00 00 FA DD 74 FB DD 75 FC DD 74 FD DD +R 00 00 01 00 +T 20 00 00 00 36 FE 1E DD 36 FF 00 DD 7E FA DD +R 00 00 01 00 +T 2B 00 00 00 B6 FB C2 78 01 00 00 +R 00 00 01 00 00 07 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 39 00 00 00 F8 FF 08 00 44 01 00 00 +R 00 00 01 00 00 08 01 00 +T 3F 00 00 00 C7 00 00 00 44 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 43 00 00 00 AF 00 00 00 9B 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 47 00 00 00 4F 00 00 00 75 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 4B 00 00 00 62 00 00 00 88 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 DD 36 FE 01 DD 36 FF 00 DD 36 FC +R 00 00 01 00 +T 5A 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 0C 00 8B 0B 0C 00 +T 5F 00 00 00 C3 56 01 00 00 +R 00 00 01 00 00 05 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 DD 36 FE 05 DD 36 FF 00 DD 36 FC +R 00 00 01 00 +T 6D 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 06 00 8B 0B 06 00 +T 72 00 00 00 C3 56 01 00 00 +R 00 00 01 00 00 05 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 36 FE 03 DD 36 FF 00 DD 36 FC +R 00 00 01 00 +T 80 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 05 00 8B 0B 05 00 +T 85 00 00 00 C3 56 01 00 00 +R 00 00 01 00 00 05 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 36 FE 01 DD 36 FF 00 DD 36 FC +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 02 00 8B 0B 02 00 +T 98 00 00 00 C3 56 01 00 00 +R 00 00 01 00 00 05 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 DD 36 FE 01 DD 36 FF 00 2A +R 00 00 01 00 +T A4 00 00 00 00 00 00 00 DD 75 FC DD 74 FD C3 +R 00 00 01 00 02 04 07 00 +T AD 00 00 00 56 01 00 00 +R 00 00 01 00 00 04 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 DD 36 FE 01 DD 36 FF 00 2A +R 00 00 01 00 +T B8 00 00 00 00 00 00 00 46 23 66 68 DD 75 FC +R 00 00 01 00 02 04 07 00 +T C1 00 00 00 DD 74 FD C3 56 01 00 00 +R 00 00 01 00 00 08 01 00 +T C7 00 00 00 +R 00 00 01 00 +T C7 00 00 00 21 0E 00 E5 01 00 00 00 00 11 +R 00 00 01 00 00 09 02 00 +T CF 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 09 03 00 +T D4 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T DB 00 00 00 08 00 E5 01 05 00 00 00 11 +R 00 00 01 00 00 08 02 00 +T E2 00 00 00 0E 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 09 03 00 +T E7 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T EE 00 00 00 08 00 E5 01 0D 00 00 00 11 +R 00 00 01 00 00 08 02 00 +T F5 00 00 00 16 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 09 03 00 +T FA 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 01 01 00 00 0E 00 E5 01 15 00 00 00 11 +R 00 00 01 00 00 08 02 00 +T 08 01 00 00 1E 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 09 03 00 +T 0D 01 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 14 01 00 00 08 00 E5 01 1A 00 00 00 11 +R 00 00 01 00 00 08 02 00 +T 1B 01 00 00 2C 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 09 03 00 +T 20 01 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 27 01 00 00 00 01 22 34 00 00 00 21 38 00 22 +R 00 00 01 00 02 07 0A 00 +T 30 01 00 00 36 00 00 00 DD 36 FE 38 DD 36 FF +R 00 00 01 00 02 04 0A 00 +T 39 01 00 00 00 DD 36 FC 00 00 00 00 DD 36 FD +R 00 00 01 00 0B 08 0A 00 +T 41 01 00 00 00 00 00 00 18 34 +R 00 00 01 00 8B 04 0A 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 4D 01 00 00 06 23 36 00 21 FF FF 18 47 +R 00 00 01 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 DD 6E FE DD 66 FF 22 01 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 5F 01 00 00 DD 6E FC DD 66 FD 22 03 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 68 01 00 00 DD 36 FE 05 DD 36 FF 00 DD 36 FC +R 00 00 01 00 +T 73 01 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 09 00 8B 0B 09 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 DD 6E 04 DD 66 05 23 DD 4E FE DD +R 00 00 01 00 +T 83 01 00 00 46 FF 71 23 70 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 8E 01 00 00 23 23 23 DD 4E FC DD 46 FD 71 23 +R 00 00 01 00 +T 99 01 00 00 70 21 00 00 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 55 5A 49 58 00 +R 00 00 02 00 +T 05 00 00 00 +R 00 00 02 00 +T 05 00 00 00 56 45 52 53 49 4F 4E 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 52 45 4C 45 41 53 45 00 +R 00 00 02 00 +T 15 00 00 00 +R 00 00 02 00 +T 15 00 00 00 48 4F 53 54 00 +R 00 00 02 00 +T 1A 00 00 00 +R 00 00 02 00 +T 1A 00 00 00 4D 41 43 48 49 4E 45 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/setftim.rel b/src/nos/lib/filesys_lib/setftim.rel new file mode 100644 index 00000000..7b0a7ad8 --- /dev/null +++ b/src/nos/lib/filesys_lib/setftim.rel @@ -0,0 +1,62 @@ +XL4 +H 3 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _rdtime Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 79 flags 0 +S _setftim Def00000000 +A UDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 02 05 04 00 00 0A 02 00 +T 07 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 0C 00 00 00 00 00 00 00 79 E6 01 28 19 +R 00 00 01 00 02 04 00 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 21 16 00 DD 4E 02 DD 46 03 09 ED +R 00 00 01 00 +T 1E 00 00 00 4B 02 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 02 00 +T 25 00 00 00 73 23 72 23 71 23 70 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 7E 04 E6 02 28 19 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 1A 00 DD 4E 02 DD 46 03 09 ED +R 00 00 01 00 +T 3E 00 00 00 4B 02 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 02 00 +T 45 00 00 00 73 23 72 23 71 23 70 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 DD 7E 04 E6 04 28 19 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 21 1E 00 DD 4E 02 DD 46 03 09 ED +R 00 00 01 00 +T 5E 00 00 00 4B 02 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 02 00 +T 65 00 00 00 73 23 72 23 71 23 70 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 6E 02 DD 66 03 23 23 36 01 C3 +R 00 00 01 00 +T 77 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/srch_dir.rel b/src/nos/lib/filesys_lib/srch_dir.rel new file mode 100644 index 00000000..7a218930 --- /dev/null +++ b/src/nos/lib/filesys_lib/srch_dir.rel @@ -0,0 +1,166 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _namecomp Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _bmap Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S _i_open Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16A flags 0 +S _srch_dir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF 21 12 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 5E 02 DD 56 03 19 5E 23 56 23 4E +R 00 00 01 00 +T 14 00 00 00 23 46 EB 3E 09 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 08 00 +T 1D 00 00 00 75 FA DD 74 FB 21 12 00 DD 4E 02 +R 00 00 01 00 +T 28 00 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 33 00 00 00 EB 7D E6 FF 47 7C E6 01 B0 28 08 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 AF DD 77 F6 DD 77 F7 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 6E FA DD 66 FB DD 4E F6 DD 46 +R 00 00 01 00 +T 58 00 00 00 F7 A7 ED 42 CA 64 01 00 00 +R 00 00 01 00 00 09 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 0E 01 C5 DD 4E F6 DD 46 F7 DD 5E +R 00 00 01 00 +T 6A 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T 71 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 78 00 00 00 75 F4 DD 74 F5 7D A4 3C 20 03 +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 C3 64 01 00 00 +R 00 00 01 00 00 05 01 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 0E 00 C5 DD 4E F4 DD 46 F5 DD 6E +R 00 00 01 00 +T 90 00 00 00 02 DD 66 03 23 23 23 5E 23 56 3E +R 00 00 01 00 +T 9B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T A0 00 00 00 00 00 00 00 F1 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 00 00 +T A9 00 00 00 DD 75 FE DD 74 FF 7D B4 20 06 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 21 FF FF C3 67 01 00 00 +R 00 00 01 00 00 08 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 AF DD 77 F8 DD 77 F9 +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 01 20 00 DD 6E F8 DD 66 F9 A7 ED +R 00 00 01 00 +T CB 00 00 00 42 30 74 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 DD 4E FC DD 46 FD 03 03 DD 5E 04 +R 00 00 01 00 +T D9 00 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T DF 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T E6 00 00 00 28 42 +R 00 00 01 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T F3 00 00 00 75 F2 DD 74 F3 0E 00 DD 5E FE DD +R 00 00 01 00 +T FE 00 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 03 01 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 0A 01 00 00 28 02 +R 00 00 01 00 +T 0C 01 00 00 +R 00 00 01 00 +T 0C 01 00 00 18 A5 +R 00 00 01 00 +T 0E 01 00 00 +R 00 00 01 00 +T 0E 01 00 00 DD 4E F2 DD 46 F3 DD 6E 02 DD 66 +R 00 00 01 00 +T 19 01 00 00 03 23 23 23 5E 23 56 3E +R 00 00 01 00 +T 21 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 26 01 00 00 00 00 00 00 18 3D +R 00 00 01 00 02 04 00 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 DD 34 F8 20 03 DD 34 F9 +R 00 00 01 00 +T 32 01 00 00 +R 00 00 01 00 +T 32 01 00 00 DD 7E FC C6 10 DD 77 FC 30 03 DD +R 00 00 01 00 +T 3D 01 00 00 34 FD +R 00 00 01 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 C3 C0 00 00 00 +R 00 00 01 00 00 05 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 0E 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 4B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 50 01 00 00 00 00 00 00 CB 7C 28 03 +R 00 00 01 00 02 04 00 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 C3 B3 00 00 00 +R 00 00 01 00 00 05 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 DD 34 F6 20 03 DD 34 F7 +R 00 00 01 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 C3 4D 00 00 00 +R 00 00 01 00 00 05 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 21 00 00 +R 00 00 01 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/srch_mt.rel b/src/nos/lib/filesys_lib/srch_mt.rel new file mode 100644 index 00000000..20d6691d --- /dev/null +++ b/src/nos/lib/filesys_lib/srch_mt.rel @@ -0,0 +1,69 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Fstab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _i_open Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8F flags 0 +S _srch_mt Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 36 FC +R 00 00 01 00 02 05 04 00 +T 08 00 00 00 00 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 0B 04 05 00 8B 0B 05 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 01 02 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 05 00 +T 16 00 00 00 A7 ED 42 30 6B +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 26 00 00 00 75 FE DD 74 FF 7E 23 B6 28 47 21 +R 00 00 01 00 +T 31 00 00 00 1A 00 DD 4E FE DD 46 FF 09 46 23 +R 00 00 01 00 +T 3C 00 00 00 66 68 DD 4E 02 DD 46 03 A7 ED 42 +R 00 00 01 00 +T 47 00 00 00 20 2E +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 51 00 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 58 00 00 00 01 00 21 1C 00 DD 5E FE DD 56 FF +R 00 00 01 00 +T 63 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T 6A 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 71 00 00 00 02 DD 74 03 18 0F +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T 82 00 00 00 34 FD +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 18 87 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/filesys_lib/stat.rel b/src/nos/lib/filesys_lib/stat.rel new file mode 100644 index 00000000..f5cd3e27 --- /dev/null +++ b/src/nos/lib/filesys_lib/stat.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_statfstat Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _stat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 1B 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/stcpy.rel b/src/nos/lib/filesys_lib/stcpy.rel new file mode 100644 index 00000000..d1341370 --- /dev/null +++ b/src/nos/lib/filesys_lib/stcpy.rel @@ -0,0 +1,142 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _usrput_int Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _usrput Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21B flags 0 +S _stcpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 2A 00 00 00 00 23 +R 00 00 01 00 02 05 06 00 02 0A 04 00 +T 07 00 00 00 23 7E B7 CA F9 00 00 00 +R 00 00 01 00 00 08 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 DD 6E 02 DD 66 03 23 23 23 46 23 +R 00 00 01 00 +T 18 00 00 00 66 68 E5 DD 6E 04 DD 66 05 C1 71 +R 00 00 01 00 +T 23 00 00 00 23 70 DD 6E 04 DD 66 05 23 23 E5 +R 00 00 01 00 +T 2E 00 00 00 21 05 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 39 00 00 00 23 56 E1 73 23 72 21 04 00 DD 5E +R 00 00 01 00 +T 44 00 00 00 04 DD 56 05 19 E5 21 0A 00 09 4E +R 00 00 01 00 +T 4F 00 00 00 23 46 E1 71 23 70 21 06 00 19 E5 +R 00 00 01 00 +T 5A 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 65 00 00 00 23 46 E1 71 23 70 21 08 00 19 E5 +R 00 00 01 00 +T 70 00 00 00 21 0E 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 7B 00 00 00 23 46 E1 71 23 70 21 0A 00 19 E5 +R 00 00 01 00 +T 86 00 00 00 21 10 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 91 00 00 00 23 46 E1 71 23 70 21 0C 00 19 E5 +R 00 00 01 00 +T 9C 00 00 00 21 22 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T A7 00 00 00 23 46 E1 71 23 70 21 12 00 DD 4E +R 00 00 01 00 +T B2 00 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T BD 00 00 00 46 EB E5 21 0E 00 DD 5E 04 DD 56 +R 00 00 01 00 +T C8 00 00 00 05 19 D1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T D3 00 00 00 0C 00 E5 21 16 00 DD 4E 02 DD 46 +R 00 00 01 00 +T DE 00 00 00 03 09 4D 44 21 12 00 DD 5E 04 DD +R 00 00 01 00 +T E9 00 00 00 56 05 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T F0 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T F7 00 00 00 18 02 00 00 +R 00 00 01 00 00 04 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 DD 6E 02 DD 66 03 23 23 23 4E 23 +R 00 00 01 00 +T 04 01 00 00 46 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 0C 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 11 01 00 00 00 00 00 00 21 05 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 1A 01 00 00 46 03 09 4E 23 46 DD 5E 04 DD 56 +R 00 00 01 00 +T 25 01 00 00 05 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 2B 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 31 01 00 00 0A 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 3C 01 00 00 46 21 04 00 DD 5E 04 DD 56 05 19 +R 00 00 01 00 +T 47 01 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 4D 01 00 00 CD 00 00 00 00 21 0C 00 DD 4E 02 +R 00 00 01 00 02 05 00 00 +T 56 01 00 00 DD 46 03 09 4E 23 46 21 06 00 DD +R 00 00 01 00 +T 61 01 00 00 5E 04 DD 56 05 19 EB 3E +R 00 00 01 00 +T 69 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 6E 01 00 00 00 00 00 00 21 0E 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 77 01 00 00 46 03 09 4E 23 46 21 08 00 DD 5E +R 00 00 01 00 +T 82 01 00 00 04 DD 56 05 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 8A 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 91 01 00 00 10 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 9C 01 00 00 46 21 0A 00 DD 5E 04 DD 56 05 19 +R 00 00 01 00 +T A7 01 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T AD 01 00 00 CD 00 00 00 00 21 22 00 DD 4E 02 +R 00 00 01 00 02 05 00 00 +T B6 01 00 00 DD 46 03 09 4E 23 46 21 0C 00 DD +R 00 00 01 00 +T C1 01 00 00 5E 04 DD 56 05 19 EB 3E +R 00 00 01 00 +T C9 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T CE 01 00 00 00 00 00 00 21 04 00 E5 21 12 00 +R 00 00 01 00 02 04 00 00 +T D7 01 00 00 DD 4E 02 DD 46 03 09 4D 44 21 +R 00 00 01 00 +T E1 01 00 00 0E 00 DD 5E 04 DD 56 05 19 EB 3E +R 00 00 01 00 +T EC 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T F1 01 00 00 00 00 00 00 F1 21 0C 00 E5 21 +R 00 00 01 00 02 04 00 00 +T F9 01 00 00 16 00 DD 4E 02 DD 46 03 09 4D 44 +R 00 00 01 00 +T 04 02 00 00 21 12 00 DD 5E 04 DD 56 05 19 EB +R 00 00 01 00 +T 0F 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 15 02 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 00 00 +T 18 02 00 00 +R 00 00 01 00 +T 18 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/sttime.rel b/src/nos/lib/filesys_lib/sttime.rel new file mode 100644 index 00000000..a99ec6c7 --- /dev/null +++ b/src/nos/lib/filesys_lib/sttime.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Clock Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S _sttime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EB 5E 23 56 23 4E +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 23 46 EB 22 00 00 00 00 ED 43 +R 00 00 01 00 02 08 03 00 +T 11 00 00 00 02 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 03 00 02 09 00 00 diff --git a/src/nos/lib/filesys_lib/symlink.rel b/src/nos/lib/filesys_lib/symlink.rel new file mode 100644 index 00000000..128d0189 --- /dev/null +++ b/src/nos/lib/filesys_lib/symlink.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_symlink Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _symlink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 26 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/sync.rel b/src/nos/lib/filesys_lib/sync.rel new file mode 100644 index 00000000..1677da46 --- /dev/null +++ b/src/nos/lib/filesys_lib/sync.rel @@ -0,0 +1,48 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _sys_sync Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 65 flags 0 +S _sync Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E2 FF 21 1D 00 E5 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 2A 00 00 00 00 23 23 23 36 1D 3E +R 00 00 01 00 02 05 05 00 +T 39 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 3E 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 09 00 +T 43 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 49 00 00 00 04 00 ED 4B 00 00 00 00 09 AF 77 +R 00 00 01 00 02 08 05 00 +T 52 00 00 00 23 77 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 57 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 5D 00 00 00 00 00 22 00 00 00 00 C3 +R 00 00 01 00 02 07 05 00 +T 63 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 diff --git a/src/nos/lib/filesys_lib/sys_NONE.rel b/src/nos/lib/filesys_lib/sys_NONE.rel new file mode 100644 index 00000000..2a088cbc --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_NONE.rel @@ -0,0 +1,17 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S _sys_NONE Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 21 08 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 01 00 +T 09 00 00 00 36 26 23 36 00 21 FF FF C1 C3 +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/filesys_lib/sys__exit.rel b/src/nos/lib/filesys_lib/sys__exit.rel new file mode 100644 index 00000000..7e42874a --- /dev/null +++ b/src/nos/lib/filesys_lib/sys__exit.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _doexit Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S _sys__exit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 01 00 00 21 0A 00 ED 5B +R 00 00 01 00 +T 0A 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 03 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 16 00 00 00 00 00 00 00 21 FF FF D1 C1 C3 +R 00 00 01 00 02 04 00 00 +T 1E 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/filesys_lib/sys_alarm.rel b/src/nos/lib/filesys_lib/sys_alarm.rel new file mode 100644 index 00000000..73cf6a52 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_alarm.rel @@ -0,0 +1,35 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _disable Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _enable Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4E flags 0 +S _sys_alarm Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 3E +R 00 00 01 00 02 05 06 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 0B 00 00 00 00 00 00 00 2A 00 00 00 00 46 23 +R 00 00 01 00 02 04 00 00 02 09 03 00 +T 12 00 00 00 66 68 01 07 00 09 46 23 66 68 DD +R 00 00 01 00 +T 1D 00 00 00 75 FE DD 74 FF 2A 00 00 00 00 46 +R 00 00 01 00 02 0A 03 00 +T 26 00 00 00 23 66 68 01 07 00 09 E5 21 0A 00 +R 00 00 01 00 +T 31 00 00 00 ED 4B 00 00 00 00 09 4E 23 46 E1 +R 00 00 01 00 02 06 03 00 +T 3A 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T 40 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 47 00 00 00 FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 09 01 00 diff --git a/src/nos/lib/filesys_lib/sys_brk.rel b/src/nos/lib/filesys_lib/sys_brk.rel new file mode 100644 index 00000000..acdefc92 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_brk.rel @@ -0,0 +1,37 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 49 flags 0 +S _sys_brk Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 21 0A 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 01 00 +T 09 00 00 00 46 23 66 68 01 00 11 A7 ED 42 30 +R 00 00 01 00 +T 14 00 00 00 12 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 01 00 +T 1E 00 00 00 0C 23 36 00 21 FF FF 18 1E +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 01 00 +T 2F 00 00 00 19 00 09 E5 21 0A 00 ED 4B +R 00 00 01 00 +T 38 00 00 00 00 00 00 00 09 4E 23 46 E1 71 23 +R 00 00 01 00 02 04 01 00 +T 41 00 00 00 70 21 00 00 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 C1 C3 00 00 00 00 +R 00 00 01 00 02 06 00 00 diff --git a/src/nos/lib/filesys_lib/sys_chdir.rel b/src/nos/lib/filesys_lib/sys_chdir.rel new file mode 100644 index 00000000..d44f43d7 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_chdir.rel @@ -0,0 +1,82 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _namei Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BC flags 0 +S _sys_chdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 0E 01 C5 01 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 00 00 21 0A 00 ED 5B 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 12 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 19 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 20 00 00 00 75 FE DD 74 FF 7D B4 20 06 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 FF FF C3 B9 00 00 00 +R 00 00 01 00 00 08 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 21 0A 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 3A 00 00 00 E6 00 4F 23 7E E6 F0 47 3E 40 A8 +R 00 00 01 00 +T 45 00 00 00 B1 28 1D +R 00 00 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 50 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 57 00 00 00 08 00 ED 4B 00 00 00 00 09 36 14 +R 00 00 01 00 02 08 04 00 +T 60 00 00 00 23 36 00 18 C4 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 6D 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 74 00 00 00 E6 01 47 7C E6 00 B0 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T 86 00 00 00 01 23 36 00 18 9D +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 04 00 +T 94 00 00 00 27 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 9C 00 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T A3 00 00 00 00 00 00 00 46 23 66 68 01 27 00 +R 00 00 01 00 02 04 04 00 +T AC 00 00 00 09 DD 4E FE DD 46 FF 71 23 70 21 +R 00 00 01 00 +T B7 00 00 00 00 00 +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/sys_chmod.rel b/src/nos/lib/filesys_lib/sys_chmod.rel new file mode 100644 index 00000000..dc83e004 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_chmod.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _chany Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2E flags 0 +S _sys_chmod Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 0E 01 C5 21 00 00 E5 21 +R 00 00 01 00 +T 0A 00 00 00 0C 00 ED 4B 00 00 00 00 09 4E 23 +R 00 00 01 00 02 08 03 00 +T 13 00 00 00 46 21 0A 00 ED 5B 00 00 00 00 19 +R 00 00 01 00 02 0A 03 00 +T 1C 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 22 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 29 00 00 00 D1 C1 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/filesys_lib/sys_chown.rel b/src/nos/lib/filesys_lib/sys_chown.rel new file mode 100644 index 00000000..82f6a47f --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_chown.rel @@ -0,0 +1,27 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _chany Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S _sys_chown Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 0E 00 C5 21 0E 00 ED 4B +R 00 00 01 00 +T 0A 00 00 00 00 00 00 00 09 5E 16 00 D5 21 +R 00 00 01 00 02 04 03 00 +T 12 00 00 00 0C 00 09 4E 06 00 21 0A 00 ED 5B +R 00 00 01 00 +T 1D 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 03 00 +T 24 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 29 00 00 00 00 00 00 00 F1 F1 D1 C1 C3 +R 00 00 01 00 02 04 00 00 +T 30 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/filesys_lib/sys_chroot.rel b/src/nos/lib/filesys_lib/sys_chroot.rel new file mode 100644 index 00000000..45ff1a14 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_chroot.rel @@ -0,0 +1,51 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _i_ref Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _sys_chdir Ref00000000 +S _i_deref Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 65 flags 0 +S _sys_chroot Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 05 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 0C 00 00 00 20 4F +R 00 00 01 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 05 00 +T 16 00 00 00 6B 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 1E 00 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 25 00 00 00 00 00 00 00 46 23 66 68 01 6B 00 +R 00 00 01 00 02 04 05 00 +T 2E 00 00 00 09 E5 2A 00 00 00 00 46 23 66 68 +R 00 00 01 00 02 07 05 00 +T 37 00 00 00 01 27 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 42 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 05 00 +T 4A 00 00 00 6B 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 52 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 59 00 00 00 00 00 18 03 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 21 FF FF +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 D1 C1 C3 00 00 00 00 +R 00 00 01 00 02 07 02 00 diff --git a/src/nos/lib/filesys_lib/sys_close.rel b/src/nos/lib/filesys_lib/sys_close.rel new file mode 100644 index 00000000..fb899260 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_close.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _filesys_doclose Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1A flags 0 +S _sys_close Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 21 0A 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 09 00 00 00 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 10 00 00 00 00 00 00 00 CD 00 00 00 00 D1 C1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 17 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/filesys_lib/sys_dup.rel b/src/nos/lib/filesys_lib/sys_dup.rel new file mode 100644 index 00000000..9c7e54d3 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_dup.rel @@ -0,0 +1,56 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _uf_alloc Ref00000000 +S _getinode Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Oftab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 78 flags 0 +S _sys_dup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0A 00 ED +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 4B 00 00 00 00 09 5E 16 00 3E +R 00 00 01 00 02 05 04 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 16 00 00 00 00 00 00 00 7D B4 28 0E 3E +R 00 00 01 00 02 04 00 00 +T 1D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 22 00 00 00 00 00 00 00 DD 75 FE 2C 20 05 +R 00 00 01 00 02 04 00 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 21 FF FF 18 46 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 04 00 +T 38 00 00 00 16 00 0A 6F 03 0A 67 19 01 71 00 +R 00 00 01 00 +T 43 00 00 00 09 46 DD 70 FF 2A 00 00 00 00 4E +R 00 00 01 00 02 0A 04 00 +T 4C 00 00 00 23 66 69 DD 4E FE 06 00 09 01 +R 00 00 01 00 +T 56 00 00 00 71 00 09 DD 46 FF 70 DD 6E FF 26 +R 00 00 01 00 +T 61 00 00 00 00 29 01 00 00 00 00 09 46 23 66 +R 00 00 01 00 02 07 07 00 +T 6A 00 00 00 68 01 07 00 09 34 DD 6E FE 26 00 +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/sys_dup2.rel b/src/nos/lib/filesys_lib/sys_dup2.rel new file mode 100644 index 00000000..ef3f3c76 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_dup2.rel @@ -0,0 +1,83 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _filesys_doclose Ref00000000 +S _getinode Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _Oftab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C4 flags 0 +S _sys_dup2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 21 0A 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 09 00 00 00 09 5E 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 10 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 17 00 00 00 20 02 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 18 1A +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 04 00 +T 24 00 00 00 FE 0A 38 13 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T 31 00 00 00 09 23 36 00 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 21 FF FF C3 BF 00 00 00 +R 00 00 01 00 00 08 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 04 00 +T 44 00 00 00 16 00 0A 6F 03 0A 67 19 01 71 00 +R 00 00 01 00 +T 4F 00 00 00 09 7E E6 80 20 13 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 04 00 +T 5E 00 00 00 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 63 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 04 00 +T 71 00 00 00 16 00 0A 6F 03 0A 67 19 01 71 00 +R 00 00 01 00 +T 7C 00 00 00 09 46 C5 21 0C 00 ED 5B +R 00 00 01 00 +T 84 00 00 00 00 00 00 00 19 4E 06 00 1A 6F 13 +R 00 00 01 00 02 04 04 00 +T 8D 00 00 00 1A 67 09 01 71 00 09 C1 70 21 +R 00 00 01 00 +T 97 00 00 00 0A 00 ED 4B 00 00 00 00 09 5E 16 +R 00 00 01 00 02 08 04 00 +T A0 00 00 00 00 0A 6F 03 0A 67 19 01 71 00 09 +R 00 00 01 00 +T AB 00 00 00 6E 26 00 29 01 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T B4 00 00 00 23 66 68 01 07 00 09 34 21 00 00 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 D1 C1 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/filesys_lib/sys_execve.rel b/src/nos/lib/filesys_lib/sys_execve.rel new file mode 100644 index 00000000..5e12f9e0 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_execve.rel @@ -0,0 +1,615 @@ +XL4 +H 2 areas 1D global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _namei Ref00000000 +S _memset Ref00000000 +S _di Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _xip_examine Ref00000000 +S _getfs Ref00000000 +S _usrput_int Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _rargs Ref00000000 +S _bmap Ref00000000 +S _wargs Ref00000000 +S _enable Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _min_int Ref00000000 +S _uputc Ref00000000 +S _usrput Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _doexec Ref00000000 +S _setftim Ref00000000 +S _zerobuf Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 74E flags 0 +S _sys_execve Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D6 FF AF DD 77 FA +R 00 00 01 00 02 05 12 00 +T 09 00 00 00 DD 77 FB 0E 01 C5 01 00 00 21 +R 00 00 01 00 +T 13 00 00 00 0A 00 ED 5B 00 00 00 00 19 5E 23 +R 00 00 01 00 02 08 0B 00 +T 1C 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 22 00 00 00 CD 00 00 00 00 F1 DD 75 D8 DD 74 +R 00 00 01 00 02 05 01 00 +T 2B 00 00 00 D9 7D B4 20 06 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 21 FF FF C3 4B 07 00 00 +R 00 00 01 00 00 08 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 DD 5E D8 DD 56 D9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 16 00 +T 3E 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 16 00 02 0A 01 00 +T 45 00 00 00 E6 01 47 7C E6 00 B0 28 15 21 +R 00 00 01 00 +T 4F 00 00 00 0A 00 DD 4E D8 DD 46 D9 09 7E E6 +R 00 00 01 00 +T 5A 00 00 00 49 47 23 7E E6 00 B0 20 10 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 0B 00 +T 6C 00 00 00 0D 23 36 00 C3 3A 07 00 00 +R 00 00 01 00 00 09 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 21 0A 00 DD 4E D8 DD 46 D9 09 7E +R 00 00 01 00 +T 7E 00 00 00 E6 00 4F 23 7E E6 F0 47 3E 80 A8 +R 00 00 01 00 +T 89 00 00 00 B1 28 29 21 0A 00 DD 4E D8 DD 46 +R 00 00 01 00 +T 94 00 00 00 D9 09 7E E6 00 4F 23 7E E6 F0 47 +R 00 00 01 00 +T 9F 00 00 00 3E A0 A8 B1 28 10 +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 0B 00 +T AE 00 00 00 2D 23 36 00 C3 3A 07 00 00 +R 00 00 01 00 00 09 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 0E 01 DD 5E D8 DD 56 D9 3E +R 00 00 01 00 +T BE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T C3 00 00 00 00 00 00 00 0E 00 C5 0E 01 C5 01 +R 00 00 01 00 02 04 01 00 +T CC 00 00 00 00 00 DD 5E D8 DD 56 D9 3E +R 00 00 01 00 +T D5 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T DA 00 00 00 00 00 00 00 F1 4D 44 DD 6E D8 DD +R 00 00 01 00 02 04 01 00 +T E3 00 00 00 66 D9 23 23 23 5E 23 56 3E +R 00 00 01 00 +T EC 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T F1 00 00 00 00 00 00 00 F1 DD 75 DA DD 74 DB +R 00 00 01 00 02 04 01 00 +T FA 00 00 00 4E 23 46 21 C9 A6 A7 ED 42 20 02 +R 00 00 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 18 28 +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 21 23 21 A7 ED 42 20 10 21 08 00 +R 00 00 01 00 +T 12 01 00 00 ED 4B 00 00 00 00 09 36 29 23 36 +R 00 00 01 00 02 06 0B 00 +T 1B 01 00 00 00 C3 12 07 00 00 +R 00 00 01 00 00 06 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 0B 00 +T 28 01 00 00 08 23 36 00 C3 12 07 00 00 +R 00 00 01 00 00 09 01 00 +T 2F 01 00 00 +R 00 00 01 00 +T 2F 01 00 00 DD 6E DA DD 66 DB 23 23 46 23 66 +R 00 00 01 00 +T 3A 01 00 00 68 DD 75 EA DD 74 EB 4D 44 3E 01 +R 00 00 01 00 +T 45 01 00 00 A9 B0 20 02 +R 00 00 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 18 7C +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 3E 02 A9 B0 20 66 DD 6E D8 DD 66 +R 00 00 01 00 +T 56 01 00 00 D9 23 23 23 46 23 66 68 DD 75 F4 +R 00 00 01 00 +T 61 01 00 00 DD 74 F5 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 68 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 6F 01 00 00 F2 DD 74 F3 21 28 00 39 E5 21 +R 00 00 01 00 +T 79 01 00 00 28 00 39 E5 21 12 00 DD 4E D8 DD +R 00 00 01 00 +T 84 01 00 00 46 D9 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 8F 01 00 00 D5 DD 4E D8 DD 46 D9 DD 5E F2 DD +R 00 00 01 00 +T 9A 01 00 00 56 F3 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 9F 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 01 00 +T A6 01 00 00 F1 F1 DD 75 FA DD 74 FB 7D B4 20 +R 00 00 01 00 +T B1 01 00 00 03 +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 C3 12 07 00 00 +R 00 00 01 00 00 05 01 00 +T B5 01 00 00 +R 00 00 01 00 +T B5 01 00 00 18 10 +R 00 00 01 00 +T B7 01 00 00 +R 00 00 01 00 +T B7 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 0B 00 +T C0 01 00 00 08 23 36 00 C3 12 07 00 00 +R 00 00 01 00 00 09 01 00 +T C7 01 00 00 +R 00 00 01 00 +T C7 01 00 00 21 04 00 DD 4E DA DD 46 DB 09 4E +R 00 00 01 00 +T D2 01 00 00 23 46 23 5E 23 56 D5 C5 21 12 00 +R 00 00 01 00 +T DD 01 00 00 DD 4E D8 DD 46 D9 09 5E 23 56 23 +R 00 00 01 00 +T E8 01 00 00 4E 23 46 EB CD 00 00 00 00 30 10 +R 00 00 01 00 02 09 11 00 +T F1 01 00 00 +R 00 00 01 00 +T F1 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 0B 00 +T FA 01 00 00 2C 23 36 00 C3 12 07 00 00 +R 00 00 01 00 00 09 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 21 08 00 DD 4E DA DD 46 DB 09 46 +R 00 00 01 00 +T 0C 02 00 00 23 66 68 01 00 02 A7 ED 42 38 10 +R 00 00 01 00 +T 17 02 00 00 +R 00 00 01 00 +T 17 02 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 0B 00 +T 20 02 00 00 08 23 36 00 C3 12 07 00 00 +R 00 00 01 00 00 09 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 1E 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1A 00 +T 2C 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1A 00 02 09 01 00 +T 33 02 00 00 E2 DD 74 E3 1E 01 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1A 00 +T 3B 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 1A 00 02 0A 01 00 +T 42 02 00 00 75 E4 DD 74 E5 DD 4E E2 DD 46 E3 +R 00 00 01 00 +T 4D 02 00 00 21 0C 00 ED 5B 00 00 00 00 19 5E +R 00 00 01 00 02 09 0B 00 +T 56 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0F 00 +T 5B 02 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T 62 02 00 00 20 1D DD 4E E4 DD 46 E5 21 0E 00 +R 00 00 01 00 +T 6D 02 00 00 ED 5B 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 06 0B 00 +T 76 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 7B 02 00 00 00 00 00 00 7D B4 28 03 +R 00 00 01 00 02 04 01 00 +T 81 02 00 00 +R 00 00 01 00 +T 81 02 00 00 +R 00 00 01 00 +T 81 02 00 00 +R 00 00 01 00 +T 81 02 00 00 C3 F2 06 00 00 +R 00 00 01 00 00 05 01 00 +T 84 02 00 00 +R 00 00 01 00 +T 84 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 8A 02 00 00 00 00 00 00 21 0A 00 DD 4E D8 DD +R 00 00 01 00 02 04 01 00 +T 93 02 00 00 46 D9 09 7E E6 00 47 23 7E E6 08 +R 00 00 01 00 +T 9E 02 00 00 B0 28 1D +R 00 00 01 00 +T A1 02 00 00 +R 00 00 01 00 +T A1 02 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 0B 00 +T A9 02 00 00 1D 00 09 E5 21 0E 00 DD 4E D8 DD +R 00 00 01 00 +T B4 02 00 00 46 D9 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T BE 02 00 00 +R 00 00 01 00 +T BE 02 00 00 21 0A 00 DD 4E D8 DD 46 D9 09 7E +R 00 00 01 00 +T C9 02 00 00 E6 00 47 23 7E E6 04 B0 28 1D +R 00 00 01 00 +T D3 02 00 00 +R 00 00 01 00 +T D3 02 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 0B 00 +T DB 02 00 00 1F 00 09 E5 21 10 00 DD 4E D8 DD +R 00 00 01 00 +T E6 02 00 00 46 D9 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T F0 02 00 00 +R 00 00 01 00 +T F0 02 00 00 21 12 00 DD 4E DA DD 46 DB 09 56 +R 00 00 01 00 +T FB 02 00 00 23 66 6A DD 75 DE DD 74 DF 21 +R 00 00 01 00 +T 05 03 00 00 00 00 39 E5 DD 4E E2 DD 46 E3 DD +R 00 00 01 00 +T 10 03 00 00 5E DE DD 56 DF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T 18 03 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 1F 03 00 00 75 E0 DD 74 E1 0E 00 DD 5E E2 DD +R 00 00 01 00 +T 2A 03 00 00 56 E3 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 2F 03 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 35 03 00 00 00 00 00 00 46 23 66 68 01 19 00 +R 00 00 01 00 02 04 0B 00 +T 3E 03 00 00 09 E5 01 00 00 C5 DD 4E E4 DD 46 +R 00 00 01 00 +T 49 03 00 00 E5 DD 5E E0 DD 56 E1 3E +R 00 00 01 00 +T 51 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 56 03 00 00 00 00 00 00 F1 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 01 00 +T 5F 03 00 00 21 0E 00 DD 4E DA DD 46 DB 09 56 +R 00 00 01 00 +T 6A 03 00 00 23 66 6A DD 75 E8 DD 74 E9 21 +R 00 00 01 00 +T 74 03 00 00 0E 00 09 4E 23 46 DD 6E DE DD 66 +R 00 00 01 00 +T 7F 03 00 00 DF A7 ED 42 DD 75 EE DD 74 EF 21 +R 00 00 01 00 +T 8A 03 00 00 00 02 E5 01 00 00 DD 5E E4 DD 56 +R 00 00 01 00 +T 95 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 9B 03 00 00 CD 00 00 00 00 F1 21 00 01 E5 DD +R 00 00 01 00 02 05 01 00 +T A4 03 00 00 4E E4 DD 46 E5 11 00 10 3E +R 00 00 01 00 +T AD 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T B2 03 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T B5 03 00 00 +R 00 00 01 00 +T B5 03 00 00 DD 7E EE DD B6 EF 28 4D +R 00 00 01 00 +T BD 03 00 00 +R 00 00 01 00 +T BD 03 00 00 01 00 02 DD 5E EE DD 56 EF 3E +R 00 00 01 00 +T C7 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T CC 03 00 00 00 00 00 00 DD 75 EC DD 74 ED E5 +R 00 00 01 00 02 04 01 00 +T D5 03 00 00 DD 4E E4 DD 46 E5 DD 5E E8 DD 56 +R 00 00 01 00 +T E0 03 00 00 E9 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 15 00 02 0B 15 00 +T E6 03 00 00 CD 00 00 00 00 F1 21 12 00 39 7E +R 00 00 01 00 02 05 01 00 +T EF 03 00 00 DD 86 EC 77 23 7E DD 8E ED 77 21 +R 00 00 01 00 +T FA 03 00 00 18 00 39 7E DD 96 EC 77 23 7E DD +R 00 00 01 00 +T 05 04 00 00 9E ED 77 18 AB +R 00 00 01 00 +T 0A 04 00 00 +R 00 00 01 00 +T 0A 04 00 00 0E 00 DD 5E E4 DD 56 E5 3E +R 00 00 01 00 +T 13 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 18 04 00 00 00 00 00 00 DD 4E D6 DD 46 D7 21 +R 00 00 01 00 02 04 01 00 +T 21 04 00 00 FA FF DD 5E DE DD 56 DF 19 EB 3E +R 00 00 01 00 +T 2C 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 31 04 00 00 00 00 00 00 DD 4E DE DD 46 DF 21 +R 00 00 01 00 02 04 01 00 +T 3A 04 00 00 FC FF DD 5E DE DD 56 DF 19 EB 3E +R 00 00 01 00 +T 45 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 4A 04 00 00 00 00 00 00 DD 4E E0 DD 46 E1 DD +R 00 00 01 00 02 04 01 00 +T 53 04 00 00 5E DE DD 56 DF 1B 1B 3E +R 00 00 01 00 +T 5B 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 60 04 00 00 00 00 00 00 2A 00 00 00 00 46 23 +R 00 00 01 00 02 04 01 00 02 09 0B 00 +T 67 04 00 00 66 68 01 29 00 09 E5 21 FA FF DD +R 00 00 01 00 +T 72 04 00 00 4E DE DD 46 DF 09 4D 44 E1 71 23 +R 00 00 01 00 +T 7D 04 00 00 70 3E 02 DD AE EA DD B6 EB 20 71 +R 00 00 01 00 +T 88 04 00 00 +R 00 00 01 00 +T 88 04 00 00 DD 36 E8 00 DD 36 E9 80 AF DD 77 +R 00 00 01 00 +T 93 04 00 00 F6 DD 77 F7 +R 00 00 01 00 +T 97 04 00 00 +R 00 00 01 00 +T 97 04 00 00 DD 4E FC DD 46 FD DD 6E F6 DD 66 +R 00 00 01 00 +T A2 04 00 00 F7 A7 ED 42 30 3D +R 00 00 01 00 +T A8 04 00 00 +R 00 00 01 00 +T A8 04 00 00 DD 4E E8 DD 46 E9 03 DD 71 E8 DD +R 00 00 01 00 +T B3 04 00 00 70 E9 0B C5 DD 6E F6 DD 66 F7 29 +R 00 00 01 00 +T BE 04 00 00 DD 5E FA DD 56 FB 19 5E 23 56 06 +R 00 00 01 00 +T C9 04 00 00 03 CD 00 00 00 00 21 3C 00 19 EB +R 00 00 01 00 02 06 00 00 +T D2 04 00 00 3E 00 00 00 00 21 00 00 00 00 C1 +R 00 00 01 00 2B 05 14 00 02 0A 14 00 +T D8 04 00 00 CD 00 00 00 00 DD 34 F6 20 03 DD +R 00 00 01 00 02 05 01 00 +T E1 04 00 00 34 F7 +R 00 00 01 00 +T E3 04 00 00 +R 00 00 01 00 +T E3 04 00 00 18 B2 +R 00 00 01 00 +T E5 04 00 00 +R 00 00 01 00 +T E5 04 00 00 0E 00 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T EE 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T F3 04 00 00 00 00 00 00 CB 7C 28 00 +R 00 00 01 00 02 04 01 00 +T F9 04 00 00 +R 00 00 01 00 +T F9 04 00 00 +R 00 00 01 00 +T F9 04 00 00 +R 00 00 01 00 +T F9 04 00 00 21 0C 00 DD 4E DA DD 46 DB 09 56 +R 00 00 01 00 +T 04 05 00 00 23 66 6A DD 75 EA DD 74 EB 21 +R 00 00 01 00 +T 0E 05 00 00 0A 00 09 56 23 66 6A DD 75 E8 DD +R 00 00 01 00 +T 19 05 00 00 74 E9 21 08 00 09 56 23 66 6A DD +R 00 00 01 00 +T 24 05 00 00 75 F0 DD 74 F1 DD 5E E8 DD 56 E9 +R 00 00 01 00 +T 2F 05 00 00 21 0E 00 09 46 23 66 68 A7 ED 52 +R 00 00 01 00 +T 3A 05 00 00 DD 75 EE DD 74 EF 7D B4 28 5F +R 00 00 01 00 +T 44 05 00 00 +R 00 00 01 00 +T 44 05 00 00 DD 4E F0 DD 46 F1 21 00 02 A7 ED +R 00 00 01 00 +T 4F 05 00 00 42 4D 44 DD 5E EE DD 56 EF 3E +R 00 00 01 00 +T 59 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 5E 05 00 00 00 00 00 00 DD 75 EC DD 74 ED E5 +R 00 00 01 00 02 04 01 00 +T 67 05 00 00 DD 6E F0 DD 66 F1 DD 4E DA DD 46 +R 00 00 01 00 +T 72 05 00 00 DB 09 4D 44 DD 5E E8 DD 56 E9 3E +R 00 00 01 00 +T 7D 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 82 05 00 00 00 00 00 00 F1 21 12 00 39 7E DD +R 00 00 01 00 02 04 01 00 +T 8B 05 00 00 86 EC 77 23 7E DD 8E ED 77 21 +R 00 00 01 00 +T 95 05 00 00 18 00 39 7E DD 96 EC 77 23 7E DD +R 00 00 01 00 +T A0 05 00 00 9E ED 77 +R 00 00 01 00 +T A3 05 00 00 +R 00 00 01 00 +T A3 05 00 00 0E 00 DD 5E DA DD 56 DB 3E +R 00 00 01 00 +T AC 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T B1 05 00 00 00 00 00 00 DD 36 DC 01 DD 36 DD +R 00 00 01 00 02 04 01 00 +T BA 05 00 00 00 +R 00 00 01 00 +T BB 05 00 00 +R 00 00 01 00 +T BB 05 00 00 DD 7E EE DD B6 EF CA 62 06 00 00 +R 00 00 01 00 00 0B 01 00 +T C4 05 00 00 +R 00 00 01 00 +T C4 05 00 00 0E 00 C5 0E 01 C5 DD 4E DC DD 46 +R 00 00 01 00 +T CF 05 00 00 DD 03 DD 71 DC DD 70 DD 0B DD 5E +R 00 00 01 00 +T DA 05 00 00 D8 DD 56 D9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T E1 05 00 00 00 00 00 00 CD 00 00 00 00 F1 4D +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T E8 05 00 00 44 DD 6E D8 DD 66 D9 23 23 23 5E +R 00 00 01 00 +T F3 05 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1B 00 +T F8 05 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 1B 00 02 09 01 00 +T FF 05 00 00 75 DA DD 74 DB 01 00 02 DD 5E EE +R 00 00 01 00 +T 0A 06 00 00 DD 56 EF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 13 00 +T 10 06 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 13 00 02 09 01 00 +T 17 06 00 00 EC DD 74 ED E5 DD 4E DA DD 46 DB +R 00 00 01 00 +T 22 06 00 00 DD 5E E8 DD 56 E9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T 2A 06 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 15 00 02 0A 01 00 +T 31 06 00 00 21 12 00 39 7E DD 86 EC 77 23 7E +R 00 00 01 00 +T 3C 06 00 00 DD 8E ED 77 21 18 00 39 7E DD 96 +R 00 00 01 00 +T 47 06 00 00 EC 77 23 7E DD 9E ED 77 0E 00 DD +R 00 00 01 00 +T 52 06 00 00 5E DA DD 56 DB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 5A 06 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 60 06 00 00 BB 05 00 00 +R 00 00 01 00 00 04 01 00 +T 62 06 00 00 +R 00 00 01 00 +T 62 06 00 00 DD 5E D8 DD 56 D9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 6A 06 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 71 06 00 00 00 00 00 00 46 23 66 68 01 2B 00 +R 00 00 01 00 02 04 0B 00 +T 7A 06 00 00 09 DD 75 E6 DD 74 E7 +R 00 00 01 00 +T 81 06 00 00 +R 00 00 01 00 +T 81 06 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 0B 00 +T 89 06 00 00 2B 00 09 01 30 00 09 4D 44 DD 6E +R 00 00 01 00 +T 94 06 00 00 E6 DD 66 E7 A7 ED 42 30 31 +R 00 00 01 00 +T 9D 06 00 00 +R 00 00 01 00 +T 9D 06 00 00 DD 6E E6 DD 66 E7 5E 23 56 23 4E +R 00 00 01 00 +T A8 06 00 00 EB 06 00 3E 01 AD B4 B1 B0 28 0C +R 00 00 01 00 +T B3 06 00 00 +R 00 00 01 00 +T B3 06 00 00 DD 6E E6 DD 66 E7 AF 77 23 77 23 +R 00 00 01 00 +T BE 06 00 00 77 +R 00 00 01 00 +T BF 06 00 00 +R 00 00 01 00 +T BF 06 00 00 DD 7E E6 C6 03 DD 77 E6 30 03 DD +R 00 00 01 00 +T CA 06 00 00 34 E7 +R 00 00 01 00 +T CC 06 00 00 +R 00 00 01 00 +T CC 06 00 00 18 B3 +R 00 00 01 00 +T CE 06 00 00 +R 00 00 01 00 +T CE 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T D4 06 00 00 00 00 00 00 DD 4E EA DD 46 EB 2A +R 00 00 01 00 02 04 01 00 +T DD 06 00 00 00 00 00 00 56 23 66 6A 11 29 00 +R 00 00 01 00 02 04 0B 00 +T E6 06 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 18 00 +T ED 06 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T F2 06 00 00 +R 00 00 01 00 +T F2 06 00 00 0E 00 DD 5E E2 DD 56 E3 3E +R 00 00 01 00 +T FB 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 00 07 00 00 00 00 00 00 0E 00 DD 5E E4 DD 56 +R 00 00 01 00 02 04 01 00 +T 09 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 0F 07 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 12 07 00 00 +R 00 00 01 00 +T 12 07 00 00 DD 7E FA DD B6 FB 28 10 +R 00 00 01 00 +T 1A 07 00 00 +R 00 00 01 00 +T 1A 07 00 00 0E 00 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 23 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 28 07 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 2A 07 00 00 +R 00 00 01 00 +T 2A 07 00 00 0E 00 DD 5E DA DD 56 DB 3E +R 00 00 01 00 +T 33 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 38 07 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 3A 07 00 00 +R 00 00 01 00 +T 3A 07 00 00 DD 5E D8 DD 56 D9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 42 07 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 49 07 00 00 FF FF +R 00 00 01 00 +T 4B 07 00 00 +R 00 00 01 00 +T 4B 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 diff --git a/src/nos/lib/filesys_lib/sys_falign.rel b/src/nos/lib/filesys_lib/sys_falign.rel new file mode 100644 index 00000000..4715ae64 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_falign.rel @@ -0,0 +1,68 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _getinode Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _bitmap_ualign Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _bitmap_align Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8C flags 0 +S _sys_falign Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0A 00 ED +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 4B 00 00 00 00 09 5E 16 00 3E +R 00 00 01 00 02 05 04 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 16 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 1F 00 00 00 B4 20 05 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 FF FF 18 62 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 04 00 +T 30 00 00 00 23 46 79 B0 20 25 +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 21 12 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 41 00 00 00 23 56 23 4E 23 46 C5 D5 DD 5E FE +R 00 00 01 00 +T 4C 00 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 06 00 +T 52 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 59 00 00 00 18 2E +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 3E 01 A9 B0 20 25 21 12 00 DD 4E +R 00 00 01 00 +T 66 00 00 00 FE DD 46 FF 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 71 00 00 00 46 C5 D5 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 7B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 80 00 00 00 00 00 00 00 F1 F1 18 03 +R 00 00 01 00 02 04 00 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 21 FF FF +R 00 00 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/sys_fork.rel b/src/nos/lib/filesys_lib/sys_fork.rel new file mode 100644 index 00000000..0a205b82 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_fork.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _dofork Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B flags 0 +S _sys_fork Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 06 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 02 00 diff --git a/src/nos/lib/filesys_lib/sys_getfsys.rel b/src/nos/lib/filesys_lib/sys_getfsys.rel new file mode 100644 index 00000000..a1f799fd --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_getfsys.rel @@ -0,0 +1,60 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _scall1_getfsys Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _usrput Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _valadr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 70 flags 0 +S _sys_getfsys Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 00 00 39 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4D 44 21 0A 00 ED 5B 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 12 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T 19 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 20 00 00 00 28 05 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 FF FF 18 46 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 DD 4E FB DD 46 FC 21 0C 00 ED 5B +R 00 00 01 00 +T 32 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 02 00 +T 39 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 3E 00 00 00 00 00 00 00 7D B4 20 05 +R 00 00 01 00 02 04 00 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 FF FF 18 24 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 6E FB DD 66 FC E5 DD 4E FD DD +R 00 00 01 00 +T 54 00 00 00 46 FE 21 0C 00 ED 5B 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 5D 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 06 00 +T 64 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 6B 00 00 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/filesys_lib/sys_getset.rel b/src/nos/lib/filesys_lib/sys_getset.rel new file mode 100644 index 00000000..6b1c7caa --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_getset.rel @@ -0,0 +1,300 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _findprocess Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _min_int Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30A flags 0 +S _sys_getset Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 0A 00 ED +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 4B 00 00 00 00 09 5E 23 56 CD +R 00 00 01 00 02 05 03 00 +T 11 00 00 00 00 00 00 00 00 00 0D 00 +R 00 00 01 00 02 04 01 00 +T 17 00 00 00 F2 02 00 00 33 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 1B 00 00 00 42 00 00 00 59 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 1F 00 00 00 6A 00 00 00 D5 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 23 00 00 00 E7 00 00 00 D6 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 27 00 00 00 B3 01 00 00 C5 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 2B 00 00 00 F9 00 00 00 43 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 2F 00 00 00 82 02 00 00 BA 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 2A 00 00 00 00 46 23 66 68 23 46 +R 00 00 01 00 02 05 03 00 +T 3C 00 00 00 23 66 68 C3 07 03 00 00 +R 00 00 01 00 00 08 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T 4A 00 00 00 05 00 09 46 23 66 68 23 46 23 66 +R 00 00 01 00 +T 55 00 00 00 68 C3 07 03 00 00 +R 00 00 01 00 00 06 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 2A 00 00 00 00 46 23 66 68 23 23 +R 00 00 01 00 02 05 03 00 +T 62 00 00 00 23 46 23 66 68 C3 07 03 00 00 +R 00 00 01 00 00 0A 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T 72 00 00 00 1D 00 09 7E 23 B6 28 20 2A +R 00 00 01 00 +T 7B 00 00 00 00 00 00 00 46 23 66 68 23 23 23 +R 00 00 01 00 02 04 03 00 +T 84 00 00 00 46 23 66 68 E5 21 0C 00 ED 4B +R 00 00 01 00 +T 8E 00 00 00 00 00 00 00 09 4E 23 46 E1 A7 ED +R 00 00 01 00 02 04 03 00 +T 97 00 00 00 42 20 38 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 2A 00 00 00 00 46 23 66 68 23 23 +R 00 00 01 00 02 05 03 00 +T A3 00 00 00 23 E5 21 0C 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T AC 00 00 00 09 5E 23 56 E1 73 23 72 2A +R 00 00 01 00 +T B5 00 00 00 00 00 00 00 46 23 66 68 01 1D 00 +R 00 00 01 00 02 04 03 00 +T BE 00 00 00 09 E5 21 0C 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T C7 00 00 00 09 4E 23 46 E1 71 23 70 C3 +R 00 00 01 00 +T D0 00 00 00 04 03 00 00 +R 00 00 01 00 00 04 01 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 C3 F2 02 00 00 +R 00 00 01 00 00 05 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T DD 00 00 00 1D 00 09 46 23 66 68 C3 +R 00 00 01 00 +T E5 00 00 00 07 03 00 00 +R 00 00 01 00 00 04 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T EF 00 00 00 1B 00 09 46 23 66 68 C3 +R 00 00 01 00 +T F7 00 00 00 07 03 00 00 +R 00 00 01 00 00 04 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 03 00 +T 02 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 07 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 0E 01 00 00 FC DD 74 FD 7D B4 20 03 +R 00 00 01 00 +T 16 01 00 00 +R 00 00 01 00 +T 16 01 00 00 C3 FF 02 00 00 +R 00 00 01 00 00 05 01 00 +T 19 01 00 00 +R 00 00 01 00 +T 19 01 00 00 01 13 00 21 0E 00 ED 5B +R 00 00 01 00 +T 21 01 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 03 00 +T 28 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 2D 01 00 00 00 00 00 00 DD 75 FE 7D EE 80 FE +R 00 00 01 00 02 04 00 00 +T 36 01 00 00 6C 30 04 +R 00 00 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 36 FE EC +R 00 00 01 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T 45 01 00 00 1D 00 09 7E 23 B6 28 0A +R 00 00 01 00 +T 4D 01 00 00 +R 00 00 01 00 +T 4D 01 00 00 DD CB FE 7E 28 04 +R 00 00 01 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 DD 36 FE 00 +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 21 14 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 62 01 00 00 56 FE 72 DD 7E FE EE 80 FE 81 30 +R 00 00 01 00 +T 6D 01 00 00 1F DD 5E FE 7B 07 9F 57 AF 93 5F +R 00 00 01 00 +T 78 01 00 00 3E 00 9A 57 01 2E 00 CD +R 00 00 01 00 +T 80 01 00 00 00 00 00 00 01 14 00 CD +R 00 00 01 00 02 04 07 00 +T 86 01 00 00 00 00 00 00 7B C6 04 18 18 +R 00 00 01 00 02 04 09 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 DD 4E FE 79 07 9F 47 21 13 00 A7 +R 00 00 01 00 +T 98 01 00 00 ED 42 29 29 EB 01 13 00 CD +R 00 00 01 00 +T A1 01 00 00 00 00 00 00 7B 3C +R 00 00 01 00 02 04 09 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 21 13 00 DD 4E FC DD 46 FD 09 77 +R 00 00 01 00 +T B0 01 00 00 C3 04 03 00 00 +R 00 00 01 00 00 05 01 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T BB 01 00 00 1F 00 09 46 23 66 68 C3 +R 00 00 01 00 +T C3 01 00 00 07 03 00 00 +R 00 00 01 00 00 04 01 00 +T C5 01 00 00 +R 00 00 01 00 +T C5 01 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T CD 01 00 00 13 00 09 6E 26 00 C3 07 03 00 00 +R 00 00 01 00 00 0B 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T DE 01 00 00 1D 00 09 7E 23 B6 28 21 2A +R 00 00 01 00 +T E7 01 00 00 00 00 00 00 46 23 66 68 01 1B 00 +R 00 00 01 00 02 04 03 00 +T F0 01 00 00 09 46 23 66 68 E5 21 0C 00 ED 4B +R 00 00 01 00 +T FB 01 00 00 00 00 00 00 09 4E 23 46 E1 A7 ED +R 00 00 01 00 02 04 03 00 +T 04 02 00 00 42 20 39 +R 00 00 01 00 +T 07 02 00 00 +R 00 00 01 00 +T 07 02 00 00 +R 00 00 01 00 +T 07 02 00 00 +R 00 00 01 00 +T 07 02 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T 0F 02 00 00 1B 00 09 E5 21 0C 00 ED 4B +R 00 00 01 00 +T 18 02 00 00 00 00 00 00 09 5E 23 56 E1 73 23 +R 00 00 01 00 02 04 03 00 +T 21 02 00 00 72 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 06 03 00 +T 2A 02 00 00 1F 00 09 E5 21 0C 00 ED 4B +R 00 00 01 00 +T 33 02 00 00 00 00 00 00 09 4E 23 46 E1 71 23 +R 00 00 01 00 02 04 03 00 +T 3C 02 00 00 70 C3 04 03 00 00 +R 00 00 01 00 00 06 01 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 C3 F2 02 00 00 +R 00 00 01 00 00 05 01 00 +T 43 02 00 00 +R 00 00 01 00 +T 43 02 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T 4B 02 00 00 21 00 09 46 23 66 68 DD 75 FA DD +R 00 00 01 00 +T 56 02 00 00 74 FB 2A 00 00 00 00 46 23 66 68 +R 00 00 01 00 02 07 03 00 +T 5F 02 00 00 01 21 00 09 E5 21 0C 00 ED 4B +R 00 00 01 00 +T 69 02 00 00 00 00 00 00 09 7E E6 FF 4F 23 7E +R 00 00 01 00 02 04 03 00 +T 72 02 00 00 E6 0F 47 E1 71 23 70 DD 6E FA DD +R 00 00 01 00 +T 7D 02 00 00 66 FB C3 07 03 00 00 +R 00 00 01 00 00 07 01 00 +T 82 02 00 00 +R 00 00 01 00 +T 82 02 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T 8A 02 00 00 6D 00 09 46 23 66 68 DD 75 FA DD +R 00 00 01 00 +T 95 02 00 00 74 FB 2A 00 00 00 00 46 23 66 68 +R 00 00 01 00 02 07 03 00 +T 9E 02 00 00 01 6D 00 09 E5 21 0C 00 ED 4B +R 00 00 01 00 +T A8 02 00 00 00 00 00 00 09 4E 23 46 E1 71 23 +R 00 00 01 00 02 04 03 00 +T B1 02 00 00 70 DD 6E FA DD 66 FB 18 4D +R 00 00 01 00 +T BA 02 00 00 +R 00 00 01 00 +T BA 02 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 03 00 +T C2 02 00 00 6F 00 09 46 23 66 68 DD 75 FA DD +R 00 00 01 00 +T CD 02 00 00 74 FB 2A 00 00 00 00 46 23 66 68 +R 00 00 01 00 02 07 03 00 +T D6 02 00 00 01 6F 00 09 E5 21 0C 00 ED 4B +R 00 00 01 00 +T E0 02 00 00 00 00 00 00 09 4E 23 46 E1 71 23 +R 00 00 01 00 02 04 03 00 +T E9 02 00 00 70 DD 6E FA DD 66 FB 18 15 +R 00 00 01 00 +T F2 02 00 00 +R 00 00 01 00 +T F2 02 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 03 00 +T FB 02 00 00 01 23 36 00 +R 00 00 01 00 +T FF 02 00 00 +R 00 00 01 00 +T FF 02 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 04 03 00 00 +R 00 00 01 00 +T 04 03 00 00 21 00 00 +R 00 00 01 00 +T 07 03 00 00 +R 00 00 01 00 +T 07 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/sys_ioctl.rel b/src/nos/lib/filesys_lib/sys_ioctl.rel new file mode 100644 index 00000000..e42ffa64 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_ioctl.rel @@ -0,0 +1,91 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _isdevice Ref00000000 +S _getinode Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S _d_ioctl Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B1 flags 0 +S _sys_ioctl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0A 00 ED +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 4B 00 00 00 00 09 5E 16 00 3E +R 00 00 01 00 02 05 04 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 16 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 1F 00 00 00 B4 20 0F +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T 2B 00 00 00 09 23 36 00 18 7A +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 39 00 00 00 21 00 00 00 00 CD 00 00 00 00 2C +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 40 00 00 00 2D 20 0F +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T 4C 00 00 00 13 23 36 00 18 59 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 5A 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T 61 00 00 00 E6 02 47 7C E6 00 B0 20 0F +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T 73 00 00 00 01 23 36 00 18 32 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 21 0E 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 04 00 +T 82 00 00 00 23 56 D5 21 0C 00 09 4E 23 46 21 +R 00 00 01 00 +T 8D 00 00 00 22 00 DD 5E FE DD 56 FF 19 5E 23 +R 00 00 01 00 +T 98 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 9E 00 00 00 CD 00 00 00 00 F1 7D B4 20 05 +R 00 00 01 00 02 05 00 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 21 00 00 18 03 +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 21 FF FF +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/sys_kill.rel b/src/nos/lib/filesys_lib/sys_kill.rel new file mode 100644 index 00000000..5d097d53 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_kill.rel @@ -0,0 +1,66 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _findprocess Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sendsig Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 85 flags 0 +S _sys_kill Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0C 00 ED +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4B 00 00 00 00 09 7E 23 B6 28 20 +R 00 00 01 00 02 05 02 00 +T 12 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 02 00 +T 1B 00 00 00 FE 10 30 13 21 0A 00 ED 4B +R 00 00 01 00 +T 24 00 00 00 00 00 00 00 09 4E 23 46 21 01 00 +R 00 00 01 00 02 04 02 00 +T 2D 00 00 00 CD 00 00 00 00 38 12 +R 00 00 01 00 02 05 07 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 02 00 +T 3B 00 00 00 16 23 36 00 21 FF FF 18 3E +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 02 00 +T 4D 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 52 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 59 00 00 00 FE DD 74 FF 7D B4 20 05 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 21 FF FF 18 1C +R 00 00 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 02 00 +T 6F 00 00 00 23 46 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 78 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 7D 00 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/filesys_lib/sys_link.rel b/src/nos/lib/filesys_lib/sys_link.rel new file mode 100644 index 00000000..f72a9c62 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_link.rel @@ -0,0 +1,171 @@ +XL4 +H 3 areas E global symbols +S _filename Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _namei Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _wr_inode Ref00000000 +S _ch_link Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setftim Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 185 flags 0 +S _sys_link Def00000000 +A CSTR size 1 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E8 FF AF DD 77 EC +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 DD 77 ED DD 36 EE FF DD 36 EF FF +R 00 00 01 00 +T 14 00 00 00 0E 01 C5 01 00 00 21 0A 00 ED 5B +R 00 00 01 00 +T 1F 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 07 00 +T 26 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 2B 00 00 00 00 00 00 00 F1 DD 75 E8 DD 74 E9 +R 00 00 01 00 02 04 01 00 +T 34 00 00 00 7D B4 20 03 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 C3 7C 01 00 00 +R 00 00 01 00 00 05 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 DD 5E E8 DD 56 E9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 43 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0A 00 02 0A 01 00 +T 4A 00 00 00 E6 02 47 7C E6 00 B0 20 10 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 5C 00 00 00 01 23 36 00 C3 58 01 00 00 +R 00 00 01 00 00 09 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 0E 01 C5 21 06 00 39 4D 44 21 +R 00 00 01 00 +T 6D 00 00 00 0C 00 ED 5B 00 00 00 00 19 5E 23 +R 00 00 01 00 02 08 07 00 +T 76 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 7C 00 00 00 CD 00 00 00 00 F1 DD 75 EA DD 74 +R 00 00 01 00 02 05 01 00 +T 85 00 00 00 EB 7D B4 28 1E +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 DD 5E EA DD 56 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 92 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 99 00 00 00 08 00 ED 4B 00 00 00 00 09 36 11 +R 00 00 01 00 02 08 07 00 +T A2 00 00 00 23 36 00 C3 58 01 00 00 +R 00 00 01 00 00 08 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 DD 7E EC DD B6 ED 20 03 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 C3 58 01 00 00 +R 00 00 01 00 00 05 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 DD 6E E8 DD 66 E9 23 23 23 46 23 +R 00 00 01 00 +T BE 00 00 00 66 68 E5 DD 4E EC DD 46 ED 03 03 +R 00 00 01 00 +T C9 00 00 00 03 69 60 4E 23 46 E1 A7 ED 42 28 +R 00 00 01 00 +T D4 00 00 00 0F +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T DE 00 00 00 12 23 36 00 18 74 +R 00 00 01 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 21 08 00 39 4D 44 21 0C 00 ED 5B +R 00 00 01 00 +T EF 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 07 00 +T F6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T FB 00 00 00 00 00 00 00 DD 6E E8 DD 66 E9 E5 +R 00 00 01 00 02 04 01 00 +T 04 01 00 00 21 0A 00 39 E5 01 00 00 00 00 DD +R 00 00 01 00 00 0A 02 00 +T 0D 01 00 00 5E EC DD 56 ED 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 15 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 1C 01 00 00 7D B4 20 02 +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 18 36 +R 00 00 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 21 0C 00 DD 4E E8 DD 46 E9 09 34 +R 00 00 01 00 +T 2D 01 00 00 23 20 01 34 +R 00 00 01 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 59 50 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 36 01 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 3D 01 00 00 28 02 +R 00 00 01 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 18 17 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 0E 04 DD 5E E8 DD 56 E9 3E +R 00 00 01 00 +T 4A 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 4F 01 00 00 00 00 00 00 AF DD 77 EE DD 77 EF +R 00 00 01 00 02 04 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 DD 7E EC DD B6 ED 28 0E +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 DD 5E EC DD 56 ED 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 68 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 DD 5E E8 DD 56 E9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 76 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 7C 01 00 00 +R 00 00 01 00 +T 7C 01 00 00 DD 6E EE DD 66 EF C3 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/sys_lseek.rel b/src/nos/lib/filesys_lib/sys_lseek.rel new file mode 100644 index 00000000..165d743a --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_lseek.rel @@ -0,0 +1,121 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _getinode Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Oftab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 155 flags 0 +S _sys_lseek Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0A 00 ED +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 4B 00 00 00 00 09 5E 16 00 3E +R 00 00 01 00 02 05 04 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 16 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 1F 00 00 00 B4 20 16 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 06 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T 2B 00 00 00 FF 23 36 FF 01 FF FF 21 FF FF C3 +R 00 00 01 00 +T 36 00 00 00 52 01 00 00 +R 00 00 01 00 00 04 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 21 0A 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 43 00 00 00 E6 00 4F 23 7E E6 F0 47 3E 10 A8 +R 00 00 01 00 +T 4E 00 00 00 B1 20 0F +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T 5A 00 00 00 1D 23 36 00 18 C2 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 04 00 +T 69 00 00 00 16 00 0A 6F 03 0A 67 19 01 71 00 +R 00 00 01 00 +T 74 00 00 00 09 6E 26 00 29 01 00 00 00 00 09 +R 00 00 01 00 02 0A 07 00 +T 7D 00 00 00 46 23 66 68 DD 75 FC DD 74 FD 21 +R 00 00 01 00 +T 88 00 00 00 10 00 ED 4B 00 00 00 00 09 5E 23 +R 00 00 01 00 02 08 04 00 +T 91 00 00 00 56 CD 00 00 00 00 00 00 03 00 +R 00 00 01 00 02 06 01 00 +T 99 00 00 00 1A 01 00 00 A1 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 9D 00 00 00 C2 00 00 00 DC 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 04 00 +T AA 00 00 00 23 56 23 4E 23 46 EB E5 DD 6E FC +R 00 00 01 00 +T B5 00 00 00 DD 66 FD D1 73 23 72 23 71 23 70 +R 00 00 01 00 +T C0 00 00 00 18 68 +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 04 00 +T CB 00 00 00 23 56 23 4E 23 46 DD 6E FC DD 66 +R 00 00 01 00 +T D6 00 00 00 FD CD 00 00 00 00 18 4E +R 00 00 01 00 02 06 03 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 04 00 +T E5 00 00 00 23 46 23 5E 23 56 D5 C5 21 12 00 +R 00 00 01 00 +T F0 00 00 00 DD 4E FE DD 46 FF 09 4E 23 46 23 +R 00 00 01 00 +T FB 00 00 00 5E 23 56 69 60 C1 09 EB C1 ED 4A +R 00 00 01 00 +T 06 01 00 00 4D 44 EB E5 DD 6E FC DD 66 FD D1 +R 00 00 01 00 +T 11 01 00 00 73 23 72 23 71 23 70 18 10 +R 00 00 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T 23 01 00 00 16 23 36 00 C3 22 00 00 00 +R 00 00 01 00 00 09 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 21 06 00 ED 4B 00 00 00 00 09 E5 +R 00 00 01 00 02 09 04 00 +T 33 01 00 00 DD 4E FC DD 46 FD 03 03 69 60 4E +R 00 00 01 00 +T 3E 01 00 00 23 46 E1 71 23 70 DD 6E FC DD 66 +R 00 00 01 00 +T 49 01 00 00 FD 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 09 00 diff --git a/src/nos/lib/filesys_lib/sys_mknod.rel b/src/nos/lib/filesys_lib/sys_mknod.rel new file mode 100644 index 00000000..63875c4f --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_mknod.rel @@ -0,0 +1,235 @@ +XL4 +H 2 areas F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _usrget_int Ref00000000 +S _namei Ref00000000 +S _isdevice Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _wr_inode Ref00000000 +S _n_creat Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26F flags 0 +S _sys_mknod Def00000000 +S _sys_access Def00000121 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 0A 00 +T 06 00 00 00 00 00 00 00 46 23 66 68 01 21 00 +R 00 00 01 00 02 04 08 00 +T 0F 00 00 00 09 46 23 66 68 7D 2F 6F 7C 2F 67 +R 00 00 01 00 +T 1A 00 00 00 7D E6 FF 4F 7C E6 0F 47 79 F6 00 +R 00 00 01 00 +T 25 00 00 00 5F 78 F6 F0 57 21 0C 00 ED 4B +R 00 00 01 00 +T 2F 00 00 00 00 00 00 00 09 7E A3 77 23 7E A2 +R 00 00 01 00 02 04 08 00 +T 38 00 00 00 77 21 0C 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 08 00 +T 41 00 00 00 7E E6 00 4F 23 7E E6 F0 47 3E 20 +R 00 00 01 00 +T 4C 00 00 00 A8 B1 28 17 21 0C 00 ED 4B +R 00 00 01 00 +T 55 00 00 00 00 00 00 00 09 7E E6 00 4F 23 7E +R 00 00 01 00 02 04 08 00 +T 5E 00 00 00 E6 F0 47 3E 60 A8 B1 20 23 +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 08 00 +T 6F 00 00 00 1D 00 09 7E 23 B6 28 13 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 08 00 +T 80 00 00 00 01 23 36 00 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 21 FF FF C3 1E 01 00 00 +R 00 00 01 00 00 08 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 08 00 +T 93 00 00 00 23 56 D5 0E 01 21 0A 00 ED 5B +R 00 00 01 00 +T 9D 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 08 00 +T A4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T A9 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T B2 00 00 00 7D B4 20 02 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 18 CC +R 00 00 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T C0 00 00 00 21 00 00 00 00 CD 00 00 00 00 2C +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T C7 00 00 00 2D 28 20 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 21 22 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T D5 00 00 00 21 0E 00 ED 5B 00 00 00 00 19 5E +R 00 00 01 00 02 09 08 00 +T DE 00 00 00 23 56 E1 73 23 72 69 60 23 23 36 +R 00 00 01 00 +T E9 00 00 00 01 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T F2 00 00 00 21 00 00 00 00 CD 00 00 00 00 CB +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T F9 00 00 00 7C 28 11 +R 00 00 01 00 +T FC 00 00 00 +R 00 00 01 00 +T FC 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 04 01 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 0B 01 00 00 84 00 00 00 +R 00 00 01 00 00 04 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 15 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 1C 01 00 00 00 00 +R 00 00 01 00 +T 1E 01 00 00 +R 00 00 01 00 +T 1E 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 CD 00 00 00 00 FA FF DD 36 FC FF +R 00 00 01 00 02 05 0A 00 +T 2A 01 00 00 DD 36 FD FF 21 0C 00 ED 4B +R 00 00 01 00 +T 33 01 00 00 00 00 00 00 09 7E E6 07 77 23 7E +R 00 00 01 00 02 04 08 00 +T 3C 01 00 00 E6 00 77 2B B6 28 2D 21 0A 00 ED +R 00 00 01 00 +T 47 01 00 00 4B 00 00 00 00 09 5E 23 56 3E +R 00 00 01 00 02 05 08 00 +T 4F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 54 01 00 00 00 00 00 00 7D E6 FF 47 7C E6 00 +R 00 00 01 00 02 04 00 00 +T 5D 01 00 00 B0 20 10 +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 08 00 +T 69 01 00 00 02 23 36 00 C3 66 02 00 00 +R 00 00 01 00 00 09 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 08 00 +T 78 01 00 00 1D 00 09 46 DD 70 FE 2A +R 00 00 01 00 +T 80 01 00 00 00 00 00 00 46 23 66 68 01 1F 00 +R 00 00 01 00 02 04 08 00 +T 89 01 00 00 09 46 DD 70 FF 2A 00 00 00 00 46 +R 00 00 01 00 02 0A 08 00 +T 92 01 00 00 23 66 68 01 1D 00 09 E5 2A +R 00 00 01 00 +T 9B 01 00 00 00 00 00 00 46 23 66 68 23 23 23 +R 00 00 01 00 02 04 08 00 +T A4 01 00 00 4E 23 46 E1 71 23 70 2A +R 00 00 01 00 +T AC 01 00 00 00 00 00 00 46 23 66 68 01 1F 00 +R 00 00 01 00 02 04 08 00 +T B5 01 00 00 09 E5 2A 00 00 00 00 46 23 66 68 +R 00 00 01 00 02 07 08 00 +T BE 01 00 00 01 1B 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T C9 01 00 00 0E 01 C5 01 00 00 21 0A 00 ED 5B +R 00 00 01 00 +T D4 01 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 08 00 +T DB 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T E0 01 00 00 00 00 00 00 F1 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 00 00 +T E9 01 00 00 7D B4 20 02 +R 00 00 01 00 +T ED 01 00 00 +R 00 00 01 00 +T ED 01 00 00 18 51 +R 00 00 01 00 +T EF 01 00 00 +R 00 00 01 00 +T EF 01 00 00 AF DD 77 FC DD 77 FD DD 5E FA DD +R 00 00 01 00 +T FA 01 00 00 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T FF 01 00 00 00 00 00 00 CD 00 00 00 00 7D 2F +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 06 02 00 00 6F 7C 2F 67 E5 21 0C 00 ED 4B +R 00 00 01 00 +T 10 02 00 00 00 00 00 00 09 C1 79 A6 57 78 23 +R 00 00 01 00 02 04 08 00 +T 19 02 00 00 A6 B2 28 15 +R 00 00 01 00 +T 1D 02 00 00 +R 00 00 01 00 +T 1D 02 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 08 00 +T 26 02 00 00 01 23 36 00 DD 36 FC FF DD 36 FD +R 00 00 01 00 +T 31 02 00 00 FF +R 00 00 01 00 +T 32 02 00 00 +R 00 00 01 00 +T 32 02 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 3A 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 08 00 +T 48 02 00 00 1D 00 09 DD 4E FE 06 00 71 23 70 +R 00 00 01 00 +T 53 02 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 08 00 +T 5B 02 00 00 1F 00 09 DD 4E FF 06 00 71 23 70 +R 00 00 01 00 +T 66 02 00 00 +R 00 00 01 00 +T 66 02 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 05 00 diff --git a/src/nos/lib/filesys_lib/sys_mountumount.rel b/src/nos/lib/filesys_lib/sys_mountumount.rel new file mode 100644 index 00000000..8adfd1c7 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_mountumount.rel @@ -0,0 +1,319 @@ +XL4 +H 2 areas F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _namei Ref00000000 +S _d_openclose Ref00000000 +S _i_deref Ref00000000 +S _validdev Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fmount Ref00000000 +S _Inotab Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _findfs Ref00000000 +S _sys_sync Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2CA flags 0 +S _sys_mountumount Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF DD 36 FC FF +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 DD 36 FD FF 2A 00 00 00 00 46 23 +R 00 00 01 00 02 09 08 00 +T 12 00 00 00 66 68 01 1D 00 09 7E 23 B6 28 10 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 08 00 +T 26 00 00 00 01 23 36 00 C3 C1 02 00 00 +R 00 00 01 00 00 09 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 0E 01 C5 01 00 00 21 0A 00 ED 5B +R 00 00 01 00 +T 38 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 08 00 +T 3F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 44 00 00 00 00 00 00 00 F1 DD 75 F4 DD 74 F5 +R 00 00 01 00 02 04 00 00 +T 4D 00 00 00 7D B4 20 03 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 C3 C1 02 00 00 +R 00 00 01 00 00 05 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 2A 00 00 00 00 23 23 23 7E FE 13 +R 00 00 01 00 02 05 08 00 +T 5D 00 00 00 20 35 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 0E 01 C5 01 00 00 21 0C 00 ED 5B +R 00 00 01 00 +T 6A 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 08 00 +T 71 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 76 00 00 00 00 00 00 00 F1 DD 75 F6 DD 74 F7 +R 00 00 01 00 02 04 00 00 +T 7F 00 00 00 7D B4 20 11 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 DD 5E F4 DD 56 F5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 8B 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 92 00 00 00 C1 02 00 00 +R 00 00 01 00 00 04 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 21 0A 00 DD 4E F4 DD 46 F5 09 7E +R 00 00 01 00 +T 9F 00 00 00 E6 00 4F 23 7E E6 F0 47 3E 60 A8 +R 00 00 01 00 +T AA 00 00 00 B1 28 10 +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 08 00 +T B6 00 00 00 0F 23 36 00 C3 9A 02 00 00 +R 00 00 01 00 00 09 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 2A 00 00 00 00 23 23 23 7E FE 13 +R 00 00 01 00 02 05 08 00 +T C6 00 00 00 28 28 +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 01 00 00 21 22 00 DD 5E F4 DD 56 +R 00 00 01 00 +T D3 00 00 00 F5 19 56 23 66 6A DD 75 FA DD 74 +R 00 00 01 00 +T DE 00 00 00 FB EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T E3 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T EA 00 00 00 20 02 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 18 4E +R 00 00 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 18 6C +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 21 0A 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T FB 00 00 00 E6 00 4F 23 7E E6 F0 47 3E 40 A8 +R 00 00 01 00 +T 06 01 00 00 B1 28 10 +R 00 00 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 08 00 +T 12 01 00 00 14 23 36 00 C3 9A 02 00 00 +R 00 00 01 00 00 09 01 00 +T 19 01 00 00 +R 00 00 01 00 +T 19 01 00 00 0E 01 21 22 00 DD 5E F4 DD 56 F5 +R 00 00 01 00 +T 24 01 00 00 19 46 23 66 68 DD 75 FA DD 74 FB +R 00 00 01 00 +T 2F 01 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 35 01 00 00 CD 00 00 00 00 7D B4 28 10 +R 00 00 01 00 02 05 00 00 +T 3C 01 00 00 +R 00 00 01 00 +T 3C 01 00 00 +R 00 00 01 00 +T 3C 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 08 00 +T 45 01 00 00 06 23 36 00 C3 9A 02 00 00 +R 00 00 01 00 00 09 01 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 0E 00 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 55 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 5A 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 64 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T 6B 01 00 00 75 FE DD 74 FF 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 08 00 +T 74 01 00 00 23 23 7E FE 13 28 7D +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 DD 7E FE DD B6 FF 28 0B DD 6E FE +R 00 00 01 00 +T 86 01 00 00 DD 66 FF 7E 23 B6 20 10 +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 08 00 +T 97 01 00 00 16 23 36 00 C3 9A 02 00 00 +R 00 00 01 00 00 09 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 DD 36 F8 00 00 00 00 DD 36 F9 +R 00 00 01 00 0B 07 07 00 +T A5 01 00 00 00 00 00 00 +R 00 00 01 00 8B 04 07 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 01 0A 00 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 02 05 07 00 +T AF 01 00 00 A7 ED 42 30 42 +R 00 00 01 00 +T B4 01 00 00 +R 00 00 01 00 +T B4 01 00 00 DD 6E F8 DD 66 F9 46 23 66 68 DD +R 00 00 01 00 +T BF 01 00 00 75 F6 DD 74 F7 01 07 00 09 7E 23 +R 00 00 01 00 +T CA 01 00 00 B6 28 1A DD 6E F6 DD 66 F7 23 23 +R 00 00 01 00 +T D5 01 00 00 23 46 23 66 68 DD 4E FA DD 46 FB +R 00 00 01 00 +T E0 01 00 00 A7 ED 42 20 02 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 18 3B +R 00 00 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 DD 7E F8 C6 02 DD 77 F8 30 03 DD +R 00 00 01 00 +T F2 01 00 00 34 F9 +R 00 00 01 00 +T F4 01 00 00 +R 00 00 01 00 +T F4 01 00 00 18 B0 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 18 39 +R 00 00 01 00 +T F8 01 00 00 +R 00 00 01 00 +T F8 01 00 00 DD 7E FE DD B6 FF 20 22 21 07 00 +R 00 00 01 00 +T 03 02 00 00 DD 4E F6 DD 46 F7 09 3E 01 AE 23 +R 00 00 01 00 +T 0E 02 00 00 B6 20 11 21 05 00 DD 4E F6 DD 46 +R 00 00 01 00 +T 19 02 00 00 F7 09 3E 01 AE 23 B6 20 0F +R 00 00 01 00 +T 22 02 00 00 +R 00 00 01 00 +T 22 02 00 00 +R 00 00 01 00 +T 22 02 00 00 +R 00 00 01 00 +T 22 02 00 00 +R 00 00 01 00 +T 22 02 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 08 00 +T 2B 02 00 00 10 23 36 00 18 69 +R 00 00 01 00 +T 31 02 00 00 +R 00 00 01 00 +T 31 02 00 00 +R 00 00 01 00 +T 31 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T 37 02 00 00 00 00 00 00 2A 00 00 00 00 23 23 +R 00 00 01 00 02 04 00 00 02 09 08 00 +T 3E 02 00 00 23 7E FE 13 28 28 +R 00 00 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 DD 6E FE DD 66 FF AF 77 23 77 21 +R 00 00 01 00 +T 4F 02 00 00 1A 00 DD 4E FE DD 46 FF 09 5E 23 +R 00 00 01 00 +T 5A 02 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 60 02 00 00 CD 00 00 00 00 AF DD 77 FC DD 77 +R 00 00 01 00 02 05 00 00 +T 69 02 00 00 FD 18 2E +R 00 00 01 00 +T 6C 02 00 00 +R 00 00 01 00 +T 6C 02 00 00 21 0E 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 08 00 +T 75 02 00 00 C5 DD 4E F6 DD 46 F7 DD 5E FA DD +R 00 00 01 00 +T 80 02 00 00 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 85 02 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 8C 02 00 00 B4 20 09 +R 00 00 01 00 +T 8F 02 00 00 +R 00 00 01 00 +T 8F 02 00 00 AF DD 77 FC DD 77 FD 18 02 +R 00 00 01 00 +T 98 02 00 00 +R 00 00 01 00 +T 98 02 00 00 18 88 +R 00 00 01 00 +T 9A 02 00 00 +R 00 00 01 00 +T 9A 02 00 00 +R 00 00 01 00 +T 9A 02 00 00 +R 00 00 01 00 +T 9A 02 00 00 2A 00 00 00 00 23 23 23 7E FE 13 +R 00 00 01 00 02 05 08 00 +T A3 02 00 00 20 0E +R 00 00 01 00 +T A5 02 00 00 +R 00 00 01 00 +T A5 02 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T AD 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T B3 02 00 00 +R 00 00 01 00 +T B3 02 00 00 DD 5E F4 DD 56 F5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T BB 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 05 00 diff --git a/src/nos/lib/filesys_lib/sys_open.rel b/src/nos/lib/filesys_lib/sys_open.rel new file mode 100644 index 00000000..ef806c03 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_open.rel @@ -0,0 +1,379 @@ +XL4 +H 2 areas 13 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _uf_alloc Ref00000000 +S _namei Ref00000000 +S _d_openclose Ref00000000 +S _isdevice Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _n_creat Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Oftab Ref00000000 +S _oft_deref Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _oft_alloc Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _truncateto0 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3A5 flags 0 +S _sys_open Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF 21 0C 00 ED +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 4B 00 00 00 00 09 56 23 66 6A DD +R 00 00 01 00 02 05 07 00 +T 12 00 00 00 75 FA DD 74 FB 21 0C 00 09 7E E6 +R 00 00 01 00 +T 1D 00 00 00 FF 77 23 7E E6 00 77 2B 6E 67 4D +R 00 00 01 00 +T 28 00 00 00 44 21 02 00 CD 00 00 00 00 30 10 +R 00 00 01 00 02 09 0D 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 3A 00 00 00 16 23 36 00 C3 9F 03 00 00 +R 00 00 01 00 00 09 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 7E FA E6 00 47 DD 7E FB E6 08 +R 00 00 01 00 +T 4C 00 00 00 B0 28 08 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 DD 36 FA 00 DD 36 FB 08 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 5D 00 00 00 00 00 00 00 DD 75 FE 2C 28 0E 3E +R 00 00 01 00 02 04 00 00 +T 66 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 6B 00 00 00 00 00 00 00 DD 75 FD 2C 20 03 +R 00 00 01 00 02 04 00 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 C3 9F 03 00 00 +R 00 00 01 00 00 05 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 DD 7E FA E6 00 47 DD 7E FB E6 04 +R 00 00 01 00 +T 81 00 00 00 B0 20 37 DD 7E FA E6 00 47 DD 7E +R 00 00 01 00 +T 8C 00 00 00 FB E6 08 B0 20 04 3E 01 18 01 +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 AF +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 4F C5 01 00 00 21 0A 00 ED 5B +R 00 00 01 00 +T A1 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 07 00 +T A8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T AD 00 00 00 00 00 00 00 F1 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 04 00 00 +T B6 00 00 00 7D B4 C2 54 01 00 00 +R 00 00 01 00 00 07 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 DD 7E FA E6 00 47 DD 7E FB E6 01 +R 00 00 01 00 +T C6 00 00 00 B0 20 03 +R 00 00 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 C3 94 03 00 00 +R 00 00 01 00 00 05 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 21 0E 00 ED 4B 00 00 00 00 09 E5 +R 00 00 01 00 02 09 07 00 +T D5 00 00 00 21 0E 00 09 7E E6 FF 5F 23 7E E6 +R 00 00 01 00 +T E0 00 00 00 0F 57 0A 6F 03 0A 67 01 21 00 09 +R 00 00 01 00 +T EB 00 00 00 46 23 66 68 7D 2F 6F 7C 2F 67 7B +R 00 00 01 00 +T F6 00 00 00 A5 4F 7A A4 47 79 F6 00 5F 78 F6 +R 00 00 01 00 +T 01 01 00 00 80 57 E1 73 23 72 21 08 00 ED 4B +R 00 00 01 00 +T 0C 01 00 00 00 00 00 00 09 AF 77 23 77 21 +R 00 00 01 00 02 04 07 00 +T 14 01 00 00 0E 00 ED 4B 00 00 00 00 09 5E 23 +R 00 00 01 00 02 08 07 00 +T 1D 01 00 00 56 D5 DD 7E FA E6 00 57 DD 7E FB +R 00 00 01 00 +T 28 01 00 00 E6 04 B2 28 04 0E 01 18 02 +R 00 00 01 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 0E 00 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 21 0A 00 ED 5B 00 00 00 00 19 5E +R 00 00 01 00 02 09 07 00 +T 3C 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 41 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 48 01 00 00 75 F8 DD 74 F9 7D B4 20 03 +R 00 00 01 00 +T 51 01 00 00 +R 00 00 01 00 +T 51 01 00 00 C3 94 03 00 00 +R 00 00 01 00 00 05 01 00 +T 54 01 00 00 +R 00 00 01 00 +T 54 01 00 00 +R 00 00 01 00 +T 54 01 00 00 DD 6E FD 26 00 29 01 00 00 00 00 +R 00 00 01 00 02 0B 0B 00 +T 5D 01 00 00 09 46 23 66 68 DD 75 F4 DD 74 F5 +R 00 00 01 00 +T 68 01 00 00 01 04 00 09 DD 4E F8 DD 46 F9 71 +R 00 00 01 00 +T 73 01 00 00 23 70 59 50 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0F 00 +T 7A 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 81 01 00 00 FC 21 0C 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 07 00 +T 8A 01 00 00 AF B6 28 0D 21 0C 00 ED 4B +R 00 00 01 00 +T 93 01 00 00 00 00 00 00 09 46 05 05 20 07 +R 00 00 01 00 02 04 07 00 +T 9B 01 00 00 +R 00 00 01 00 +T 9B 01 00 00 +R 00 00 01 00 +T 9B 01 00 00 DD 7E FC E6 04 28 20 +R 00 00 01 00 +T A2 01 00 00 +R 00 00 01 00 +T A2 01 00 00 +R 00 00 01 00 +T A2 01 00 00 21 0C 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 07 00 +T AB 01 00 00 05 28 0D 21 0C 00 ED 4B +R 00 00 01 00 +T B3 01 00 00 00 00 00 00 09 46 05 05 20 17 +R 00 00 01 00 02 04 07 00 +T BB 01 00 00 +R 00 00 01 00 +T BB 01 00 00 +R 00 00 01 00 +T BB 01 00 00 DD 7E FC E6 02 20 10 +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T CB 01 00 00 01 23 36 00 C3 94 03 00 00 +R 00 00 01 00 00 09 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 21 0C 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 07 00 +T DB 01 00 00 05 28 0D 21 0C 00 ED 4B +R 00 00 01 00 +T E3 01 00 00 00 00 00 00 09 46 05 05 20 1E +R 00 00 01 00 02 04 07 00 +T EB 01 00 00 +R 00 00 01 00 +T EB 01 00 00 +R 00 00 01 00 +T EB 01 00 00 21 09 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T F6 01 00 00 B7 28 10 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 02 02 00 00 1E 23 36 00 C3 94 03 00 00 +R 00 00 01 00 00 09 01 00 +T 09 02 00 00 +R 00 00 01 00 +T 09 02 00 00 DD 7E FA E6 00 47 DD 7E FB E6 08 +R 00 00 01 00 +T 14 02 00 00 B0 28 29 21 0A 00 DD 4E F8 DD 46 +R 00 00 01 00 +T 1F 02 00 00 F9 09 7E E6 00 4F 23 7E E6 F0 47 +R 00 00 01 00 +T 2A 02 00 00 3E 90 A8 B1 28 10 +R 00 00 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 39 02 00 00 03 23 36 00 C3 94 03 00 00 +R 00 00 01 00 00 09 01 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 21 0A 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 4B 02 00 00 E6 00 4F 23 7E E6 F0 47 3E 40 A8 +R 00 00 01 00 +T 56 02 00 00 B1 20 1D 21 0C 00 ED 4B +R 00 00 01 00 +T 5E 02 00 00 00 00 00 00 09 7E 23 B6 28 10 +R 00 00 01 00 02 04 07 00 +T 66 02 00 00 +R 00 00 01 00 +T 66 02 00 00 +R 00 00 01 00 +T 66 02 00 00 +R 00 00 01 00 +T 66 02 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 6F 02 00 00 15 23 36 00 C3 94 03 00 00 +R 00 00 01 00 00 09 01 00 +T 76 02 00 00 +R 00 00 01 00 +T 76 02 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 7E 02 00 00 21 00 00 00 00 CD 00 00 00 00 2C +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 85 02 00 00 2D 28 3C 21 07 00 DD 4E F8 DD 46 +R 00 00 01 00 +T 90 02 00 00 F9 09 3E 01 AE 23 B6 20 2B 0E 01 +R 00 00 01 00 +T 9B 02 00 00 21 22 00 DD 5E F8 DD 56 F9 19 5E +R 00 00 01 00 +T A6 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T AB 02 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T B2 02 00 00 28 10 +R 00 00 01 00 +T B4 02 00 00 +R 00 00 01 00 +T B4 02 00 00 +R 00 00 01 00 +T B4 02 00 00 +R 00 00 01 00 +T B4 02 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T BD 02 00 00 06 23 36 00 C3 94 03 00 00 +R 00 00 01 00 00 09 01 00 +T C4 02 00 00 +R 00 00 01 00 +T C4 02 00 00 2A 00 00 00 00 46 23 66 68 DD 4E +R 00 00 01 00 02 05 07 00 +T CD 02 00 00 FE 06 00 09 01 71 00 09 DD 46 FD +R 00 00 01 00 +T D8 02 00 00 70 DD 6E F4 DD 66 F5 DD 75 F6 DD +R 00 00 01 00 +T E3 02 00 00 74 F7 DD 7E FA E6 00 47 DD 7E FB +R 00 00 01 00 +T EE 02 00 00 E6 20 B0 28 23 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 21 12 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T FE 02 00 00 23 56 23 4E 23 46 EB E5 DD 6E F6 +R 00 00 01 00 +T 09 03 00 00 DD 66 F7 D1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 14 03 00 00 18 0E +R 00 00 01 00 +T 16 03 00 00 +R 00 00 01 00 +T 16 03 00 00 DD 6E F6 DD 66 F7 AF 77 23 77 23 +R 00 00 01 00 +T 21 03 00 00 77 23 77 +R 00 00 01 00 +T 24 03 00 00 +R 00 00 01 00 +T 24 03 00 00 DD 7E FA E6 00 6F DD 7E FB E6 03 +R 00 00 01 00 +T 2F 03 00 00 67 3E 03 AC B5 20 0E +R 00 00 01 00 +T 36 03 00 00 +R 00 00 01 00 +T 36 03 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 3E 03 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 44 03 00 00 +R 00 00 01 00 +T 44 03 00 00 21 0C 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 07 00 +T 4D 03 00 00 21 06 00 DD 5E F4 DD 56 F5 19 70 +R 00 00 01 00 +T 58 03 00 00 21 0A 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 63 03 00 00 E6 00 4F 23 7E E6 F0 47 3E 10 A8 +R 00 00 01 00 +T 6E 03 00 00 B1 20 1C 21 07 00 DD 4E F4 DD 46 +R 00 00 01 00 +T 79 03 00 00 F5 09 46 05 20 0E +R 00 00 01 00 +T 7F 03 00 00 +R 00 00 01 00 +T 7F 03 00 00 +R 00 00 01 00 +T 7F 03 00 00 +R 00 00 01 00 +T 7F 03 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 87 03 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 8D 03 00 00 +R 00 00 01 00 +T 8D 03 00 00 DD 6E FE 26 00 18 0E +R 00 00 01 00 +T 94 03 00 00 +R 00 00 01 00 +T 94 03 00 00 DD 5E FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T 9A 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 9F 03 00 00 +R 00 00 01 00 +T 9F 03 00 00 21 FF FF +R 00 00 01 00 +T A2 03 00 00 +R 00 00 01 00 +T A2 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/filesys_lib/sys_pause.rel b/src/nos/lib/filesys_lib/sys_pause.rel new file mode 100644 index 00000000..1f6a2be6 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_pause.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S _sys_pause Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 08 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 0E 00 00 00 08 00 ED 4B 00 00 00 00 09 36 04 +R 00 00 01 00 02 08 02 00 +T 17 00 00 00 23 36 00 21 FF FF D1 C1 C3 +R 00 00 01 00 +T 20 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/filesys_lib/sys_pipe.rel b/src/nos/lib/filesys_lib/sys_pipe.rel new file mode 100644 index 00000000..b5edae2e --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_pipe.rel @@ -0,0 +1,158 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _uf_alloc Ref00000000 +S _filldesc Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _usrput_int Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _root_dev Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _oft_deref Ref00000000 +S _oft_alloc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _i_open Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 174 flags 0 +S _sys_pipe Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 36 FC FF +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 36 FD FF 01 00 00 ED 5B +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 2B 09 0C 00 +T 17 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 1E 00 00 00 FE DD 74 FF 7D B4 20 10 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 2F 00 00 00 0C 23 36 00 C3 6E 01 00 00 +R 00 00 01 00 00 09 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 3C 00 00 00 00 00 00 00 DD 75 FA 2C 28 0E 3E +R 00 00 01 00 02 04 00 00 +T 45 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 4A 00 00 00 00 00 00 00 DD 75 FC 2C 20 10 +R 00 00 01 00 02 04 00 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 5B 00 00 00 02 23 36 00 C3 5D 01 00 00 +R 00 00 01 00 00 09 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 2A 00 00 00 00 46 23 66 68 DD 4E +R 00 00 01 00 02 05 05 00 +T 6B 00 00 00 FA 06 00 09 01 71 00 09 DD 46 FC +R 00 00 01 00 +T 76 00 00 00 70 DD 6E FE DD 66 FF E5 0E 00 DD +R 00 00 01 00 +T 81 00 00 00 5E FC 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 86 00 00 00 00 00 00 00 CD 00 00 00 00 E1 3E +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 8D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 92 00 00 00 00 00 00 00 DD 75 FB 2C 28 0E 3E +R 00 00 01 00 02 04 00 00 +T 9B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T A0 00 00 00 00 00 00 00 DD 75 FD 2C 20 23 +R 00 00 01 00 02 04 00 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 2A 00 00 00 00 46 23 66 68 DD 4E +R 00 00 01 00 02 05 05 00 +T B1 00 00 00 FA 06 00 09 01 71 00 09 36 FF 21 +R 00 00 01 00 +T BC 00 00 00 08 00 ED 4B 00 00 00 00 09 36 02 +R 00 00 01 00 02 08 05 00 +T C5 00 00 00 23 36 00 C3 4C 01 00 00 +R 00 00 01 00 00 08 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 2A 00 00 00 00 46 23 66 68 DD 4E +R 00 00 01 00 02 05 05 00 +T D4 00 00 00 FB 06 00 09 01 71 00 09 DD 46 FD +R 00 00 01 00 +T DF 00 00 00 70 DD 6E FE DD 66 FF E5 0E 01 DD +R 00 00 01 00 +T EA 00 00 00 5E FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T EF 00 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T F6 00 00 00 0A 00 DD 4E FE DD 46 FF 09 36 FF +R 00 00 01 00 +T 01 01 00 00 23 36 11 21 0C 00 09 AF 77 23 77 +R 00 00 01 00 +T 0C 01 00 00 21 07 00 09 34 23 20 01 34 +R 00 00 01 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 DD 4E FA 06 00 21 0A 00 ED 5B +R 00 00 01 00 +T 1F 01 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 05 00 +T 26 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 2B 01 00 00 00 00 00 00 DD 4E FB 06 00 21 +R 00 00 01 00 02 04 00 00 +T 33 01 00 00 0A 00 ED 5B 00 00 00 00 19 5E 23 +R 00 00 01 00 02 08 05 00 +T 3C 01 00 00 56 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 42 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 48 01 00 00 00 00 18 25 +R 00 00 01 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 DD 46 FD 04 28 0B +R 00 00 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 DD 5E FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T 58 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 DD 46 FC 04 28 0B +R 00 00 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 DD 5E FC 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T 69 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 21 FF FF +R 00 00 01 00 +T 71 01 00 00 +R 00 00 01 00 +T 71 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/sys_readwrite.rel b/src/nos/lib/filesys_lib/sys_readwrite.rel new file mode 100644 index 00000000..3e2c6f1c --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_readwrite.rel @@ -0,0 +1,96 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _rwsetup Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Oftab Ref00000000 +S _readwritei Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D2 flags 0 +S _sys_readwrite Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 23 23 23 7E FE 17 20 +R 00 00 01 00 02 04 03 00 +T 0F 00 00 00 04 3E 01 18 01 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 AF +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 4F C5 21 0E 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 1E 00 00 00 09 5E 23 56 D5 21 0C 00 09 4E 23 +R 00 00 01 00 +T 29 00 00 00 46 21 0A 00 ED 5B 00 00 00 00 19 +R 00 00 01 00 02 0A 03 00 +T 32 00 00 00 5E 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 38 00 00 00 CD 00 00 00 00 F1 F1 DD 75 FE DD +R 00 00 01 00 02 05 00 00 +T 41 00 00 00 74 FF 7D B4 20 06 +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 21 FF FF C3 CF 00 00 00 +R 00 00 01 00 00 08 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 21 0E 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 03 00 +T 56 00 00 00 23 B6 28 2D +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 2A 00 00 00 00 23 23 23 7E FE 17 +R 00 00 01 00 02 05 03 00 +T 63 00 00 00 20 12 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 DD 4E FE DD 46 FF 1E 00 3E +R 00 00 01 00 +T 6E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 73 00 00 00 00 00 00 00 18 10 +R 00 00 01 00 02 04 00 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 DD 4E FE DD 46 FF 1E 01 3E +R 00 00 01 00 +T 80 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 85 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 56 +R 00 00 01 00 02 09 03 00 +T 90 00 00 00 23 66 6A E5 69 60 4E 23 46 E1 09 +R 00 00 01 00 +T 9B 00 00 00 01 71 00 09 6E 26 00 29 01 +R 00 00 01 00 +T A4 00 00 00 00 00 00 00 09 7E 23 66 6F E5 21 +R 00 00 01 00 02 04 06 00 +T AD 00 00 00 16 00 ED 4B 00 00 00 00 09 5E 23 +R 00 00 01 00 02 08 03 00 +T B6 00 00 00 56 23 4E 23 46 E1 73 23 72 23 71 +R 00 00 01 00 +T C1 00 00 00 23 70 21 14 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T CA 00 00 00 09 46 23 66 68 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/filesys_lib/sys_reboot.rel b/src/nos/lib/filesys_lib/sys_reboot.rel new file mode 100644 index 00000000..b0526082 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_reboot.rel @@ -0,0 +1,49 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _abort Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 59 flags 0 +S _sys_reboot Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 06 03 00 +T 09 00 00 00 1D 00 09 7E 23 B6 28 12 21 08 00 +R 00 00 01 00 +T 14 00 00 00 ED 4B 00 00 00 00 09 36 01 23 36 +R 00 00 01 00 02 06 03 00 +T 1D 00 00 00 00 21 FF FF 18 32 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 03 00 +T 2C 00 00 00 FE 6D 20 15 21 0C 00 ED 4B +R 00 00 01 00 +T 35 00 00 00 00 00 00 00 09 7E FE 65 20 08 +R 00 00 01 00 02 04 03 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 43 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 03 00 +T 4E 00 00 00 16 23 36 00 21 FF FF +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 C1 C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/filesys_lib/sys_sbrk.rel b/src/nos/lib/filesys_lib/sys_sbrk.rel new file mode 100644 index 00000000..932cc979 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_sbrk.rel @@ -0,0 +1,58 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _sys_brk Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6B flags 0 +S _sys_sbrk Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 04 00 +T 06 00 00 00 00 00 00 00 46 23 66 68 01 19 00 +R 00 00 01 00 02 04 02 00 +T 0F 00 00 00 09 46 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T 1A 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 02 00 +T 23 00 00 00 23 B6 28 3B +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 02 00 +T 30 00 00 00 DD 86 FE 77 23 7E DD 8E FF 77 21 +R 00 00 01 00 +T 3B 00 00 00 0A 00 ED 4B 00 00 00 00 09 46 23 +R 00 00 01 00 02 08 02 00 +T 44 00 00 00 66 68 DD 4E FE DD 46 FF A7 ED 42 +R 00 00 01 00 +T 4F 00 00 00 38 0C 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 5B 00 00 00 28 05 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 21 FF FF 18 06 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/filesys_lib/sys_signal.rel b/src/nos/lib/filesys_lib/sys_signal.rel new file mode 100644 index 00000000..84e13e39 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_signal.rel @@ -0,0 +1,117 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _disable Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +S _enable Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 168 flags 0 +S _sys_signal Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF 06 FF DD 70 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 F4 DD 70 F5 DD 70 F6 DD 70 F7 3E +R 00 00 01 00 +T 14 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 19 00 00 00 00 00 00 00 21 0A 00 ED 4B +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 09 7E 23 B6 28 22 21 +R 00 00 01 00 02 04 02 00 +T 29 00 00 00 0A 00 ED 4B 00 00 00 00 09 3E 09 +R 00 00 01 00 02 08 02 00 +T 32 00 00 00 AE 23 B6 28 13 21 0A 00 ED 4B +R 00 00 01 00 +T 3C 00 00 00 00 00 00 00 09 4E 23 46 21 10 00 +R 00 00 01 00 02 04 02 00 +T 45 00 00 00 A7 ED 42 30 10 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 02 00 +T 53 00 00 00 16 23 36 00 C3 40 01 00 00 +R 00 00 01 00 00 09 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 3E +R 00 00 01 00 02 09 02 00 +T 63 00 00 00 01 AE 23 B6 23 B6 23 B6 20 26 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 02 00 +T 76 00 00 00 C6 FF 47 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 7F 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 02 00 +T 87 00 00 00 17 00 09 7E B3 77 23 7E B2 77 18 +R 00 00 01 00 +T 92 00 00 00 2A +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 02 00 +T 9C 00 00 00 C6 FF 47 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T A5 00 00 00 7B 2F 5F 7A 2F 57 2A 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T AE 00 00 00 46 23 66 68 01 17 00 09 7E A3 77 +R 00 00 01 00 +T B9 00 00 00 23 7E A2 77 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 02 00 +T C6 00 00 00 23 56 01 03 00 CD 00 00 00 00 2A +R 00 00 01 00 02 0A 07 00 +T CF 00 00 00 00 00 00 00 46 23 66 68 19 01 +R 00 00 01 00 02 04 02 00 +T D7 00 00 00 28 00 09 5E 23 56 23 4E EB 06 00 +R 00 00 01 00 +T E2 00 00 00 DD 75 F4 DD 74 F5 DD 71 F6 DD 70 +R 00 00 01 00 +T ED 00 00 00 F7 21 0A 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 02 00 +T F6 00 00 00 56 23 66 6A DD 75 F8 DD 74 F9 EB +R 00 00 01 00 +T 01 01 00 00 1B 01 03 00 CD 00 00 00 00 2A +R 00 00 01 00 02 09 07 00 +T 09 01 00 00 00 00 00 00 46 23 66 68 01 2B 00 +R 00 00 01 00 02 04 02 00 +T 12 01 00 00 09 19 DD 75 FD DD 74 FE 21 0C 00 +R 00 00 01 00 +T 1D 01 00 00 ED 4B 00 00 00 00 09 5E 23 56 23 +R 00 00 01 00 02 06 02 00 +T 26 01 00 00 4E 23 46 EB DD 75 FA DD 74 FB DD +R 00 00 01 00 +T 31 01 00 00 71 FC E5 DD 6E FD DD 66 FE D1 73 +R 00 00 01 00 +T 3C 01 00 00 23 72 23 71 +R 00 00 01 00 +T 40 01 00 00 +R 00 00 01 00 +T 40 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 46 01 00 00 00 00 00 00 21 06 00 ED 4B +R 00 00 01 00 02 04 00 00 +T 4D 01 00 00 00 00 00 00 09 DD 4E F6 DD 46 F7 +R 00 00 01 00 02 04 02 00 +T 56 01 00 00 71 23 70 DD 4E F6 DD 46 F7 DD 6E +R 00 00 01 00 +T 61 01 00 00 F4 DD 66 F5 C3 00 00 00 00 +R 00 00 01 00 02 09 09 00 diff --git a/src/nos/lib/filesys_lib/sys_statfstat.rel b/src/nos/lib/filesys_lib/sys_statfstat.rel new file mode 100644 index 00000000..d4e555d6 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_statfstat.rel @@ -0,0 +1,86 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _namei Ref00000000 +S _i_deref Ref00000000 +S _getinode Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _stcpy Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _valadr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A2 flags 0 +S _sys_statfstat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 01 1E 00 21 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 0C 00 ED 5B 00 00 00 00 19 5E 23 +R 00 00 01 00 02 08 05 00 +T 12 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 18 00 00 00 CD 00 00 00 00 7D B4 20 02 +R 00 00 01 00 02 05 00 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 18 44 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 2A 00 00 00 00 23 23 23 7E FE 1B +R 00 00 01 00 02 05 05 00 +T 2A 00 00 00 20 1C 0E 01 C5 01 00 00 21 0A 00 +R 00 00 01 00 +T 35 00 00 00 ED 5B 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 06 05 00 +T 3E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 43 00 00 00 00 00 00 00 F1 18 13 +R 00 00 01 00 02 04 00 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 05 00 +T 51 00 00 00 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 56 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 DD 75 FE DD 74 FF 7D B4 20 05 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 FF FF 18 35 +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 21 0C 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 05 00 +T 73 00 00 00 23 46 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 7C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 81 00 00 00 00 00 00 00 2A 00 00 00 00 23 23 +R 00 00 01 00 02 04 00 00 02 09 05 00 +T 88 00 00 00 23 7E FE 1B 20 0E +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 96 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 21 00 00 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/sys_stime.rel b/src/nos/lib/filesys_lib/sys_stime.rel new file mode 100644 index 00000000..d06451e0 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_stime.rel @@ -0,0 +1,45 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sttime Ref00000000 +S _usrget Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 59 flags 0 +S _sys_stime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 06 00 +T 06 00 00 00 00 00 00 00 46 23 66 68 01 1D 00 +R 00 00 01 00 02 04 04 00 +T 0F 00 00 00 09 7E 23 B6 28 12 21 08 00 ED 4B +R 00 00 01 00 +T 1A 00 00 00 00 00 00 00 09 36 01 23 36 00 21 +R 00 00 01 00 02 04 04 00 +T 23 00 00 00 FF FF 18 2F +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 21 04 00 E5 21 0A 00 ED 4B +R 00 00 01 00 +T 30 00 00 00 00 00 00 00 09 4E 23 46 21 02 00 +R 00 00 01 00 02 04 04 00 +T 39 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 3F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 46 00 00 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 4E 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 54 00 00 00 00 00 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/filesys_lib/sys_symlink.rel b/src/nos/lib/filesys_lib/sys_symlink.rel new file mode 100644 index 00000000..925b1336 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_symlink.rel @@ -0,0 +1,124 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _usrget_int Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _wr_inode Ref00000000 +S _n_creat Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _readwritei Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 144 flags 0 +S _sys_symlink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 F8 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 77 F9 DD 36 FA FF DD 36 FB FF +R 00 00 01 00 +T 14 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 06 00 +T 1C 00 00 00 21 00 09 46 23 66 68 7D 2F 6F 7C +R 00 00 01 00 +T 27 00 00 00 2F 67 7D E6 B6 4F 7C E6 01 47 79 +R 00 00 01 00 +T 32 00 00 00 F6 00 6F 78 F6 80 67 DD 75 FC DD +R 00 00 01 00 +T 3D 00 00 00 74 FD E5 0E 01 21 0C 00 ED 5B +R 00 00 01 00 +T 47 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 06 00 +T 4E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 53 00 00 00 00 00 00 00 F1 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 04 00 00 +T 5C 00 00 00 7D B4 20 03 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 C3 25 01 00 00 +R 00 00 01 00 00 05 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 21 16 00 ED 4B 00 00 00 00 09 AF +R 00 00 01 00 02 09 06 00 +T 6C 00 00 00 77 23 77 23 77 23 77 21 14 00 ED +R 00 00 01 00 +T 77 00 00 00 4B 00 00 00 00 09 AF 77 23 77 21 +R 00 00 01 00 02 05 06 00 +T 80 00 00 00 12 00 ED 4B 00 00 00 00 09 E5 21 +R 00 00 01 00 02 08 06 00 +T 89 00 00 00 0A 00 09 5E 23 56 E1 73 23 72 21 +R 00 00 01 00 +T 94 00 00 00 0A 00 ED 4B 00 00 00 00 09 46 23 +R 00 00 01 00 02 08 06 00 +T 9D 00 00 00 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T AD 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T B4 00 00 00 E6 FF 28 17 +R 00 00 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 21 14 00 ED 4B 00 00 00 00 09 34 +R 00 00 01 00 02 09 06 00 +T C9 00 00 00 23 20 01 34 +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 18 D6 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 21 1C 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T D8 00 00 00 00 DD 4E F8 DD 46 F9 1E 01 3E +R 00 00 01 00 +T E2 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T E7 00 00 00 00 00 00 00 21 0A 00 DD 4E F8 DD +R 00 00 01 00 02 04 00 00 +T F0 00 00 00 46 F9 09 DD 7E FC E6 FF 5F DD 7E +R 00 00 01 00 +T FB 00 00 00 FD E6 0F 57 7B F6 00 4F 7A F6 90 +R 00 00 01 00 +T 06 01 00 00 47 71 23 70 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T 11 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 16 01 00 00 00 00 00 00 CB 7C 28 02 +R 00 00 01 00 02 04 00 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 18 07 +R 00 00 01 00 +T 1E 01 00 00 +R 00 00 01 00 +T 1E 01 00 00 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 DD 7E F8 DD B6 F9 28 0E +R 00 00 01 00 +T 2D 01 00 00 +R 00 00 01 00 +T 2D 01 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 35 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 3B 01 00 00 +R 00 00 01 00 +T 3B 01 00 00 DD 6E FA DD 66 FB C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 diff --git a/src/nos/lib/filesys_lib/sys_sync.rel b/src/nos/lib/filesys_lib/sys_sync.rel new file mode 100644 index 00000000..5cdde4f9 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_sync.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _i_sync Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S .__.ABS. Def00000000 +S _fs_sync Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S _sys_sync Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 06 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 04 00 +T 0B 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 11 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 02 00 diff --git a/src/nos/lib/filesys_lib/sys_time.rel b/src/nos/lib/filesys_lib/sys_time.rel new file mode 100644 index 00000000..eb14a71c --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_time.rel @@ -0,0 +1,33 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _rdtime Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _usrput Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 40 flags 0 +S _sys_time Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 00 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 14 00 00 00 04 00 E5 21 02 00 39 4D 44 21 +R 00 00 01 00 +T 1E 00 00 00 0A 00 ED 5B 00 00 00 00 19 5E 23 +R 00 00 01 00 02 08 02 00 +T 27 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 2D 00 00 00 CD 00 00 00 00 F1 DD 4E FE DD 46 +R 00 00 01 00 02 05 00 00 +T 36 00 00 00 FF DD 6E FC DD 66 FD C3 +R 00 00 01 00 +T 3E 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 07 00 diff --git a/src/nos/lib/filesys_lib/sys_times.rel b/src/nos/lib/filesys_lib/sys_times.rel new file mode 100644 index 00000000..64156dc5 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_times.rel @@ -0,0 +1,90 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _memcpy Ref00000000 +S _disable Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _enable Ref00000000 +S _Clock Ref00000000 +S _usrput Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _valadr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D1 flags 0 +S _sys_times Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 01 14 00 21 0A 00 ED 5B +R 00 00 01 00 +T 0A 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 04 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 16 00 00 00 00 00 00 00 7D B4 CA C9 00 00 00 +R 00 00 01 00 02 04 00 00 00 0B 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 23 00 00 00 00 00 00 00 2A 00 00 00 00 23 23 +R 00 00 01 00 02 04 00 00 02 09 04 00 +T 2A 00 00 00 7E B7 28 48 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 21 10 00 E5 2A 00 00 00 00 46 23 +R 00 00 01 00 02 09 04 00 +T 37 00 00 00 66 68 01 5B 00 09 4D 44 21 0A 00 +R 00 00 01 00 +T 42 00 00 00 ED 5B 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 06 04 00 +T 4B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 50 00 00 00 00 00 00 00 F1 21 04 00 E5 01 +R 00 00 01 00 02 04 00 00 +T 58 00 00 00 00 00 00 00 21 0A 00 ED 5B +R 00 00 01 00 02 04 07 00 +T 5F 00 00 00 00 00 00 00 19 56 23 66 6A 11 +R 00 00 01 00 02 04 04 00 +T 67 00 00 00 10 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 F1 18 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 75 00 00 00 46 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 21 10 00 E5 2A 00 00 00 00 46 23 +R 00 00 01 00 02 09 04 00 +T 7F 00 00 00 66 68 01 5B 00 09 4D 44 21 0A 00 +R 00 00 01 00 +T 8A 00 00 00 ED 5B 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 06 04 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 98 00 00 00 00 00 00 00 F1 21 04 00 E5 01 +R 00 00 01 00 02 04 00 00 +T A0 00 00 00 00 00 00 00 21 0A 00 ED 5B +R 00 00 01 00 02 04 07 00 +T A7 00 00 00 00 00 00 00 19 56 23 66 6A 11 +R 00 00 01 00 02 04 04 00 +T AF 00 00 00 10 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T B6 00 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T C2 00 00 00 00 00 00 00 21 00 00 18 03 +R 00 00 01 00 02 04 00 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 21 FF FF +R 00 00 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 D1 C1 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/filesys_lib/sys_unlink.rel b/src/nos/lib/filesys_lib/sys_unlink.rel new file mode 100644 index 00000000..5124754e --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_unlink.rel @@ -0,0 +1,140 @@ +XL4 +H 3 areas F global symbols +S _filename Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _namei Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _ch_link Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S _getperm Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___03f5_79de__5funlink_3a_20bad_ Ref00000000 +S _setftim Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 140 flags 0 +S _sys_unlink Def00000000 +A CSTR size 1 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EA FF 0E 00 C5 21 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 02 00 39 4D 44 21 0A 00 ED 5B +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 06 00 +T 1A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 1F 00 00 00 00 00 00 00 F1 DD 75 EC DD 74 ED +R 00 00 01 00 02 04 01 00 +T 28 00 00 00 DD 36 EE FF DD 36 EF FF DD 7E EA +R 00 00 01 00 +T 33 00 00 00 DD B6 EB 28 08 DD 7E EC DD B6 ED +R 00 00 01 00 +T 3E 00 00 00 20 10 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 49 00 00 00 02 23 36 00 C3 0B 01 00 00 +R 00 00 01 00 00 09 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 DD 5E EC DD 56 ED 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 58 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0A 00 02 0A 01 00 +T 5F 00 00 00 E6 02 47 7C E6 00 B0 20 10 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 71 00 00 00 01 23 36 00 C3 0B 01 00 00 +R 00 00 01 00 00 09 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 21 06 00 39 4D 44 21 0A 00 ED 5B +R 00 00 01 00 +T 83 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 06 00 +T 8A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 8F 00 00 00 00 00 00 00 21 00 00 E5 21 +R 00 00 01 00 02 04 01 00 +T 96 00 00 00 00 00 00 00 E5 21 0A 00 39 4D 44 +R 00 00 01 00 00 04 02 00 +T 9F 00 00 00 DD 5E EA DD 56 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T A7 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T AE 00 00 00 F1 7D B4 20 02 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 18 56 +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 21 0C 00 DD 4E EC DD 46 ED 09 4E +R 00 00 01 00 +T C0 00 00 00 23 46 0B 70 2B 71 03 79 B0 20 29 +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 21 0C 00 DD 4E EC DD 46 ED 09 7E +R 00 00 01 00 +T D6 00 00 00 C6 02 77 23 7E CE 00 77 2B 6E 67 +R 00 00 01 00 +T E1 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 0C 00 +T E6 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0C 00 2B 0A 09 00 +T EC 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T F3 00 00 00 F1 +R 00 00 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 0E 04 DD 5E EC DD 56 ED 3E +R 00 00 01 00 +T FD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 02 01 00 00 00 00 00 00 AF DD 77 EE DD 77 EF +R 00 00 01 00 02 04 01 00 +T 0B 01 00 00 +R 00 00 01 00 +T 0B 01 00 00 DD 7E EA DD B6 EB 28 0E +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 5E EA DD 56 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 1B 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 DD 7E EC DD B6 ED 28 0E +R 00 00 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 DD 5E EC DD 56 ED 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 31 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 DD 6E EE DD 66 EF C3 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/sys_utime.rel b/src/nos/lib/filesys_lib/sys_utime.rel new file mode 100644 index 00000000..f1dc2f85 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_utime.rel @@ -0,0 +1,154 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _rdtime Ref00000000 +S _namei Ref00000000 +S _memcpy Ref00000000 +S _i_deref Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _usrget Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 186 flags 0 +S _sys_utime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF 21 0C 00 ED +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 4B 00 00 00 00 09 56 23 66 6A DD +R 00 00 01 00 02 05 07 00 +T 12 00 00 00 75 FC DD 74 FD 21 0A 00 09 7E 23 +R 00 00 01 00 +T 1D 00 00 00 B6 20 13 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 29 00 00 00 0E 23 36 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 FF FF C3 83 01 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 DD 7E FC DD B6 FD 20 33 +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 21 00 00 39 DD 75 FC DD 74 FD EB +R 00 00 01 00 +T 46 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 4C 00 00 00 00 00 00 00 21 04 00 E5 DD 4E FC +R 00 00 01 00 02 04 00 00 +T 55 00 00 00 DD 46 FD 21 04 00 DD 5E FC DD 56 +R 00 00 01 00 +T 60 00 00 00 FD 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 66 00 00 00 00 00 00 00 CD 00 00 00 00 F1 18 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 6D 00 00 00 23 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 21 08 00 E5 DD 4E FC DD 46 FD 21 +R 00 00 01 00 +T 79 00 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 81 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 88 00 00 00 00 00 39 DD 75 FC DD 74 FD +R 00 00 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 0E 01 C5 01 00 00 21 0A 00 ED 5B +R 00 00 01 00 +T 9C 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 07 00 +T A3 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T A8 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T B1 00 00 00 7D B4 20 03 +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 C3 2D 00 00 00 +R 00 00 01 00 00 05 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 2A 00 00 00 00 46 23 66 68 01 +R 00 00 01 00 02 05 07 00 +T C0 00 00 00 1D 00 09 46 23 66 68 E5 21 0E 00 +R 00 00 01 00 +T CB 00 00 00 DD 4E FE DD 46 FF 09 4E 23 46 E1 +R 00 00 01 00 +T D6 00 00 00 A7 ED 42 28 1F 2A 00 00 00 00 46 +R 00 00 01 00 02 0A 07 00 +T DF 00 00 00 23 66 68 01 1D 00 09 7E 23 B6 28 +R 00 00 01 00 +T EA 00 00 00 0F +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T F4 00 00 00 01 23 36 00 18 1B +R 00 00 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 21 09 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 05 01 00 00 B7 28 1E +R 00 00 01 00 +T 08 01 00 00 +R 00 00 01 00 +T 08 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 11 01 00 00 1E 23 36 00 +R 00 00 01 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 1D 01 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 24 01 00 00 2D 00 00 00 +R 00 00 01 00 00 04 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 21 04 00 E5 DD 4E FC DD 46 FD 21 +R 00 00 01 00 +T 31 01 00 00 16 00 DD 5E FE DD 56 FF 19 EB 3E +R 00 00 01 00 +T 3C 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 41 01 00 00 00 00 00 00 F1 21 04 00 E5 21 +R 00 00 01 00 02 04 00 00 +T 49 01 00 00 04 00 DD 4E FC DD 46 FD 09 4D 44 +R 00 00 01 00 +T 54 01 00 00 21 1A 00 DD 5E FE DD 56 FF 19 EB +R 00 00 01 00 +T 5F 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 65 01 00 00 00 00 00 00 F1 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 00 00 +T 6E 01 00 00 23 23 36 01 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 79 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 7E 01 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 00 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/filesys_lib/sys_waitpid.rel b/src/nos/lib/filesys_lib/sys_waitpid.rel new file mode 100644 index 00000000..29bb61c1 --- /dev/null +++ b/src/nos/lib/filesys_lib/sys_waitpid.rel @@ -0,0 +1,100 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Ptab Ref00000000 +S _dowait Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _disable Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _enable Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _valadr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size CA flags 0 +S _sys_waitpid Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 01 02 00 21 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 0C 00 ED 5B 00 00 00 00 19 5E 23 +R 00 00 01 00 02 08 05 00 +T 12 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 18 00 00 00 CD 00 00 00 00 7D B4 20 10 +R 00 00 01 00 02 05 00 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 28 00 00 00 0E 23 36 00 C3 C4 00 00 00 +R 00 00 01 00 00 09 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 35 00 00 00 00 00 00 00 DD 36 FC 00 00 00 00 +R 00 00 01 00 02 04 00 00 0B 0B 01 00 +T 3B 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 8B 07 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 01 02 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 01 00 +T 48 00 00 00 A7 ED 42 30 62 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 58 00 00 00 75 FE DD 74 FF AF B6 28 3F 21 +R 00 00 01 00 +T 62 00 00 00 05 00 DD 4E FE DD 46 FF 09 46 23 +R 00 00 01 00 +T 6D 00 00 00 66 68 E5 2A 00 00 00 00 4E 23 46 +R 00 00 01 00 02 08 05 00 +T 76 00 00 00 E1 A7 ED 42 20 24 2A 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 7F 00 00 00 46 23 66 68 DD 4E FE DD 46 FF A7 +R 00 00 01 00 +T 8A 00 00 00 ED 42 28 12 +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 94 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 02 00 +T 99 00 00 00 00 00 00 00 CD 00 00 00 00 18 27 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T AB 00 00 00 34 FD +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 18 90 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T B5 00 00 00 00 00 00 00 21 08 00 ED 4B +R 00 00 01 00 02 04 00 00 +T BC 00 00 00 00 00 00 00 09 36 0A 23 36 00 +R 00 00 01 00 02 04 05 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 21 FF FF +R 00 00 01 00 +T C7 00 00 00 +R 00 00 01 00 +T C7 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/sysdebug.rel b/src/nos/lib/filesys_lib/sysdebug.rel new file mode 100644 index 00000000..1f9617a9 --- /dev/null +++ b/src/nos/lib/filesys_lib/sysdebug.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_getset Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A8 flags 0 +S _sysdebug Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 0C 23 36 00 21 0C 00 ED 4B +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 09 DD 5E 02 DD 56 03 +R 00 00 01 00 02 04 06 00 +T 4B 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 54 00 00 00 36 07 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 64 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 6D 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 76 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 83 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 93 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A2 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/syserror_table.rel b/src/nos/lib/filesys_lib/syserror_table.rel new file mode 100644 index 00000000..7482e198 --- /dev/null +++ b/src/nos/lib/filesys_lib/syserror_table.rel @@ -0,0 +1,102 @@ +XL4 +H 4 areas 2E global symbols +S ___0246_4299_EDOM Ref00000000 +S ___0259_42c4_ENOMEM Ref00000000 +S ___0257_a107_ENOEXEC Ref00000000 +S ___0252_983a_EMLINK Ref00000000 +S ___0245_cd2b_EDEADLK Ref00000000 +S ___0260_4485_EPERM Ref00000000 +S ___025c_f683_ENOTDIR Ref00000000 +S ___0254_8396_ENFILE Ref00000000 +S ___0000_ffff_ Ref00000000 +S ___026a_b33c_ESRCH Ref00000000 +S ___024e_2d75_EIO Ref00000000 +S ___025e_81a3_ENOTTY Ref00000000 +S ___0263_0587_EROFS Ref00000000 +S ___0261_5ede_EPIPE Ref00000000 +S ___0253_0607_ENAMETOOLONG Ref00000000 +S .__.ABS. Def00000000 +S ___0255_7088_ENODEV Ref00000000 +S ___0249_9ed8_EFBIG Ref00000000 +S ___023f_56e8_EACCES Ref00000000 +S ___026c_8d4a_EXDEV Ref00000000 +S ___0256_edee_ENOENT Ref00000000 +S ___026b_194a_ETXTBSY Ref00000000 +S ___024b_eb47_EINTR Ref00000000 +S ___024f_fb45_EISDIR Ref00000000 +S ___025a_d51d_ENOSPC Ref00000000 +S ___0251_9e5a_EMFILE Ref00000000 +S ___0262_7f6a_ERANGE Ref00000000 +S ___0248_afa9_EFAULT Ref00000000 +S ___025b_d3a2_ENOTBLK Ref00000000 +S ___0240_f378_EAGAIN Ref00000000 +S ___025d_83de_ENOTEMPTY Ref00000000 +S ___025f_01a7_ENXIO Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0269_ffa8_ESPIPE Ref00000000 +S ___0250_8de7_ELOOP Ref00000000 +S ___024c_b479_EINVAL Ref00000000 +S ___0268_dd82_ESHELL Ref00000000 +S ___0243_74ba_EBUSY Ref00000000 +S ___0242_a2a1_EBADF Ref00000000 +S ___0258_29fe_ENOLCK Ref00000000 +S ___0247_bec8_EEXIST Ref00000000 +S ___024d_21d8_EINVFNC Ref00000000 +S ___0244_4029_ECHILD Ref00000000 +S ___023e_b671_E2BIG Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 80 flags 0 +S _syserror_limit Def0000007E +S _syserror_table Def00000000 +A CDATA0 size 80 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 7E 00 00 00 +R 00 00 02 00 +T 7E 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 08 00 4A 08 05 00 +T 06 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 14 00 4A 08 09 00 +T 0C 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 16 00 4A 08 0A 00 +T 12 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 1F 00 4A 08 2B 00 +T 18 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 02 00 4A 08 26 00 +T 1E 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 2A 00 4A 08 1D 00 +T 24 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 4A 08 12 00 +T 2A 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 1B 00 4A 08 1C 00 +T 30 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 25 00 4A 08 28 00 +T 36 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 13 00 4A 08 10 00 +T 3C 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 06 00 4A 08 17 00 +T 42 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 23 00 4A 08 07 00 +T 48 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 19 00 4A 08 0B 00 +T 4E 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 15 00 4A 08 11 00 +T 54 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 18 00 4A 08 21 00 +T 5A 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0C 00 4A 08 03 00 +T 60 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0D 00 4A 08 00 00 +T 66 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 1A 00 4A 08 04 00 +T 6C 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0E 00 4A 08 27 00 +T 72 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 29 00 4A 08 1E 00 +T 78 00 00 00 00 00 00 00 00 00 00 00 2A 00 +R 00 00 03 00 4A 04 22 00 4A 08 24 00 diff --git a/src/nos/lib/filesys_lib/systrace.rel b/src/nos/lib/filesys_lib/systrace.rel new file mode 100644 index 00000000..bb8da83f --- /dev/null +++ b/src/nos/lib/filesys_lib/systrace.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_getset Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A8 flags 0 +S _systrace Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 0B 23 36 00 21 0C 00 ED 4B +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 09 DD 5E 02 DD 56 03 +R 00 00 01 00 02 04 06 00 +T 4B 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 54 00 00 00 36 07 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 64 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 6D 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 76 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 83 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 93 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A2 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/systrace_dump.rel b/src/nos/lib/filesys_lib/systrace_dump.rel new file mode 100644 index 00000000..4bbea8fc --- /dev/null +++ b/src/nos/lib/filesys_lib/systrace_dump.rel @@ -0,0 +1,268 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _usrget_int Ref00000000 +S ___05e5_dd6d_x_25x Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _abyte Ref00000000 +S __dprintf Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___012d_8811__25d Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___019c_ab8d_0x_25x Ref00000000 +S ___0197_79e7_0_25o Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 207 flags 0 +S _systrace_dump Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 36 FC 20 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 DD 36 FD 01 DD 5E 0A CD +R 00 00 01 00 +T 11 00 00 00 00 00 00 00 01 05 00 04 02 00 00 +R 00 00 01 00 02 04 09 00 00 0B 01 00 +T 18 00 00 00 22 00 00 00 3E 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 1C 00 00 00 68 01 00 00 A6 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 20 00 00 00 C6 01 00 00 +R 00 00 01 00 00 04 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 DD 36 FC 08 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T 2D 00 00 00 08 00 A7 ED 42 38 0A +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 46 04 DD 70 FC DD 36 FD 00 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 1E 22 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 43 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 4A 00 00 00 02 DD 66 03 DD 75 FE DD 74 FF DD +R 00 00 01 00 +T 55 00 00 00 36 FA 00 +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 DD 7E FA DD BE FC D2 37 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 5E FE DD 56 FF 13 DD 73 FE DD +R 00 00 01 00 +T 6C 00 00 00 72 FF 1B 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 72 00 00 00 00 00 00 00 CD 00 00 00 00 7D E6 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 79 00 00 00 FF DD 77 FB B7 20 0E 3E 10 DD BE +R 00 00 01 00 +T 84 00 00 00 FC 30 07 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 DD 36 FD 00 C3 37 01 00 00 +R 00 00 01 00 00 09 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 DD 7E FB FE 20 38 07 DD 7E FB FE +R 00 00 01 00 +T 99 00 00 00 80 38 72 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 1E 5C 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T A1 00 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 04 00 02 09 00 00 +T A8 00 00 00 FB FE 09 30 10 +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 DD 7E FB C6 30 5F 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T B5 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T BC 00 00 00 4F +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 FE 09 20 0C 1E 74 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T C5 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T CC 00 00 00 3F +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 FE 0A 20 0C 1E 6E 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T D5 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T DC 00 00 00 2F +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 FE 0D 20 0C 1E 72 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T E5 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T EC 00 00 00 1F +R 00 00 01 00 +T ED 00 00 00 +R 00 00 01 00 +T ED 00 00 00 DD 4E FB 06 00 C5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T F5 00 00 00 C5 21 00 00 00 00 E5 21 00 00 E5 +R 00 00 01 00 02 06 02 00 +T FE 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 04 01 00 00 00 00 00 00 F1 F1 F1 F1 18 00 +R 00 00 01 00 02 04 00 00 +T 0C 01 00 00 +R 00 00 01 00 +T 0C 01 00 00 18 23 +R 00 00 01 00 +T 0E 01 00 00 +R 00 00 01 00 +T 0E 01 00 00 DD 7E FB FE 5C 28 07 DD 7E FB FE +R 00 00 01 00 +T 19 01 00 00 22 20 0A +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 1E 5C 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 21 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 DD 5E FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 2C 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 DD 34 FA C3 58 00 00 00 +R 00 00 01 00 00 08 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 AF DD B6 FD 28 1E +R 00 00 01 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 1E 2E 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 42 01 00 00 00 00 00 00 CD 00 00 00 00 1E 2E +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 49 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 4F 01 00 00 00 00 00 00 1E 2E 3E 00 00 00 00 +R 00 00 01 00 02 04 00 00 2B 0B 04 00 +T 55 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 5B 01 00 00 +R 00 00 01 00 +T 5B 01 00 00 1E 22 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 60 01 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 66 01 00 00 04 02 00 00 +R 00 00 01 00 00 04 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 01 08 00 DD 6E 02 DD 66 03 A7 ED +R 00 00 01 00 +T 73 01 00 00 42 30 10 +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 DD 7E 02 C6 30 5F 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 7E 01 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 85 01 00 00 1E +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 DD 6E 02 DD 66 03 E5 0E +R 00 00 01 00 +T 8E 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0C 00 02 0A 0C 00 +T 94 01 00 00 21 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T 9B 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T A2 01 00 00 F1 F1 +R 00 00 01 00 +T A4 01 00 00 +R 00 00 01 00 +T A4 01 00 00 18 5E +R 00 00 01 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 DD 6E 02 DD 66 03 E5 0E +R 00 00 01 00 +T AE 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 08 00 02 0A 08 00 +T B4 01 00 00 21 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T BB 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T C2 01 00 00 F1 F1 18 3E +R 00 00 01 00 +T C6 01 00 00 +R 00 00 01 00 +T C6 01 00 00 01 0A 00 DD 6E 02 DD 66 03 A7 ED +R 00 00 01 00 +T D1 01 00 00 42 30 10 +R 00 00 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 DD 7E 02 C6 30 5F 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T DC 01 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T E3 01 00 00 1E +R 00 00 01 00 +T E4 01 00 00 +R 00 00 01 00 +T E4 01 00 00 DD 6E 02 DD 66 03 E5 0E +R 00 00 01 00 +T EC 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0B 00 02 0A 0B 00 +T F2 01 00 00 21 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T F9 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 00 02 00 00 F1 F1 +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 18 00 +R 00 00 01 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/systrace_entry.rel b/src/nos/lib/filesys_lib/systrace_entry.rel new file mode 100644 index 00000000..8bd7200e --- /dev/null +++ b/src/nos/lib/filesys_lib/systrace_entry.rel @@ -0,0 +1,151 @@ +XL4 +H 2 areas 11 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_dump Ref00000000 +S _acrlf Ref00000000 +S ___042c_f4b4_can_27t_20trace_20i Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _systrace_table Ref00000000 +S _abyte Ref00000000 +S __dprintf Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _systrace_limit Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0021_efeb__09pid_20_25d_2c_20 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 154 flags 0 +S _systrace_entry Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 2A +R 00 00 01 00 02 05 0B 00 +T 06 00 00 00 00 00 00 00 46 23 66 68 01 6D 00 +R 00 00 01 00 02 04 08 00 +T 0F 00 00 00 09 7E 23 B6 20 03 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 C3 51 01 00 00 +R 00 00 01 00 00 05 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 2A 00 00 00 00 23 23 23 4E 06 00 +R 00 00 01 00 02 05 08 00 +T 21 00 00 00 C5 2A 00 00 00 00 46 23 66 68 23 +R 00 00 01 00 02 06 08 00 +T 2A 00 00 00 4E 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 0F 00 +T 32 00 00 00 00 00 00 00 E5 21 00 00 E5 3E +R 00 00 01 00 02 04 0F 00 +T 3A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 3F 00 00 00 00 00 00 00 F1 F1 F1 F1 F1 2A +R 00 00 01 00 02 04 00 00 +T 47 00 00 00 00 00 00 00 23 23 23 6E 26 00 ED +R 00 00 01 00 02 04 08 00 +T 50 00 00 00 4B 00 00 00 00 CD 00 00 00 00 38 +R 00 00 01 00 02 05 0C 00 02 0A 0D 00 +T 57 00 00 00 11 +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 5E 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 64 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 1E 2C 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 1E 20 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 75 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 7B 00 00 00 00 00 00 00 2A 00 00 00 00 23 23 +R 00 00 01 00 02 04 00 00 02 09 08 00 +T 82 00 00 00 23 6E 26 00 29 29 29 01 +R 00 00 01 00 +T 8A 00 00 00 01 00 00 00 09 23 23 4E C5 2B 46 +R 00 00 01 00 02 04 05 00 +T 93 00 00 00 2B 4E C5 21 00 00 E5 3E +R 00 00 01 00 +T 9B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T A0 00 00 00 00 00 00 00 F1 F1 F1 1E 28 3E +R 00 00 01 00 02 04 00 00 +T A8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T AD 00 00 00 00 00 00 00 21 0A 00 ED 4B +R 00 00 01 00 02 04 00 00 +T B4 00 00 00 00 00 00 00 09 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 08 00 +T BD 00 00 00 DD 36 FC 00 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 DD 7E FC FE 04 30 77 +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 2A 00 00 00 00 23 23 23 6E 26 00 +R 00 00 01 00 02 05 08 00 +T D1 00 00 00 29 29 29 DD 4E FC 06 00 09 01 +R 00 00 01 00 +T DB 00 00 00 04 00 00 00 09 46 DD 70 FF 04 05 +R 00 00 01 00 02 04 05 00 +T E4 00 00 00 20 02 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 18 57 +R 00 00 01 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 AF DD B6 FC 28 14 +R 00 00 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 1E 2C 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T F3 00 00 00 00 00 00 00 CD 00 00 00 00 1E 20 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T FA 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 00 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 DD 6E FA DD 66 FB 4D 44 03 03 DD +R 00 00 01 00 +T 0D 01 00 00 71 FA DD 70 FB 46 23 66 68 DD 75 +R 00 00 01 00 +T 18 01 00 00 FD DD 74 FE DD 4E FF C5 21 0E 00 +R 00 00 01 00 +T 23 01 00 00 ED 4B 00 00 00 00 09 4E 23 46 DD +R 00 00 01 00 02 06 08 00 +T 2C 01 00 00 5E FD DD 56 FE 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 34 01 00 00 00 00 00 00 CD 00 00 00 00 E1 DD +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 3B 01 00 00 34 FC 18 82 +R 00 00 01 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 1E 29 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 44 01 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 4A 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 4F 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 51 01 00 00 +R 00 00 01 00 +T 51 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/systrace_exit.rel b/src/nos/lib/filesys_lib/systrace_exit.rel new file mode 100644 index 00000000..eff02723 --- /dev/null +++ b/src/nos/lib/filesys_lib/systrace_exit.rel @@ -0,0 +1,184 @@ +XL4 +H 2 areas 12 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_dump Ref00000000 +S _syserror_limit Ref00000000 +S _acrlf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _systrace_table Ref00000000 +S _abyte Ref00000000 +S __dprintf Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _syserror_table Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ___0189_1a71__2c_20err_20_25d Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0005_7313__09_09pid_20_25d_2c Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1BB flags 0 +S _systrace_exit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 0A 00 +T 06 00 00 00 00 00 00 00 46 23 66 68 01 6D 00 +R 00 00 01 00 02 04 08 00 +T 0F 00 00 00 09 7E 23 B6 20 03 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 C3 B8 01 00 00 +R 00 00 01 00 00 05 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 2A 00 00 00 00 23 23 23 4E 06 00 +R 00 00 01 00 02 05 08 00 +T 21 00 00 00 C5 2A 00 00 00 00 46 23 66 68 23 +R 00 00 01 00 02 06 08 00 +T 2A 00 00 00 4E 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 10 00 +T 32 00 00 00 00 00 00 00 E5 21 00 00 E5 3E +R 00 00 01 00 02 04 10 00 +T 3A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 3F 00 00 00 00 00 00 00 F1 F1 F1 F1 F1 2A +R 00 00 01 00 02 04 00 00 +T 47 00 00 00 00 00 00 00 23 23 23 7E FE 17 20 +R 00 00 01 00 02 04 08 00 +T 50 00 00 00 43 21 08 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 08 00 +T 59 00 00 00 7E 23 B6 20 36 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 0E 01 C5 21 04 00 ED 4B +R 00 00 01 00 +T 66 00 00 00 00 00 00 00 09 4E 23 46 21 0C 00 +R 00 00 01 00 02 04 08 00 +T 6F 00 00 00 ED 5B 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 06 08 00 +T 78 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7D 00 00 00 00 00 00 00 E1 1E 2C 3E +R 00 00 01 00 02 04 00 00 +T 83 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 88 00 00 00 00 00 00 00 1E 20 3E 00 00 00 00 +R 00 00 01 00 02 04 00 00 2B 0B 06 00 +T 8E 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 2A 00 00 00 00 23 23 23 6E 26 00 +R 00 00 01 00 02 05 08 00 +T 9D 00 00 00 29 29 29 01 00 00 00 00 09 46 DD +R 00 00 01 00 02 08 05 00 +T A6 00 00 00 70 FE 48 C5 01 00 00 21 04 00 ED +R 00 00 01 00 +T B1 00 00 00 5B 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 05 08 00 +T B9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T BE 00 00 00 00 00 00 00 E1 2A 00 00 00 00 23 +R 00 00 01 00 02 04 00 00 02 0A 08 00 +T C5 00 00 00 23 23 7E FE 19 28 16 2A +R 00 00 01 00 +T CD 00 00 00 00 00 00 00 23 23 23 7E FE 1A 28 +R 00 00 01 00 02 04 08 00 +T D6 00 00 00 0B 2A 00 00 00 00 23 23 23 7E FE +R 00 00 01 00 02 06 08 00 +T DF 00 00 00 1E 20 3C +R 00 00 01 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 21 08 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 08 00 +T EB 00 00 00 23 B6 20 2F +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 1E 2C 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T F4 00 00 00 00 00 00 00 CD 00 00 00 00 1E 20 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T FB 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 01 01 00 00 00 00 00 00 DD 6E FE E5 01 00 00 +R 00 00 01 00 02 04 00 00 +T 0A 01 00 00 21 06 00 ED 5B 00 00 00 00 19 5E +R 00 00 01 00 02 09 08 00 +T 13 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 18 01 00 00 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 1E 01 00 00 +R 00 00 01 00 +T 1E 01 00 00 21 08 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 08 00 +T 27 01 00 00 23 56 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 08 0E 00 +T 2E 01 00 00 00 00 00 00 E5 21 00 00 E5 3E +R 00 00 01 00 02 04 0E 00 +T 36 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 3B 01 00 00 00 00 00 00 F1 F1 F1 F1 21 08 00 +R 00 00 01 00 02 04 00 00 +T 44 01 00 00 09 4E 23 46 21 00 00 CD +R 00 00 01 00 +T 4C 01 00 00 00 00 00 00 30 60 21 08 00 ED 4B +R 00 00 01 00 02 04 0D 00 +T 55 01 00 00 00 00 00 00 09 46 23 66 68 ED 4B +R 00 00 01 00 02 04 08 00 +T 5E 01 00 00 00 00 00 00 CD 00 00 00 00 30 4B +R 00 00 01 00 02 04 02 00 02 09 0D 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 1E 20 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 6A 01 00 00 00 00 00 00 CD 00 00 00 00 1E 28 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 71 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 77 01 00 00 00 00 00 00 21 08 00 ED 4B +R 00 00 01 00 02 04 00 00 +T 7E 01 00 00 00 00 00 00 09 4E 23 46 11 03 00 +R 00 00 01 00 02 04 08 00 +T 87 01 00 00 CD 00 00 00 00 21 00 00 00 00 19 +R 00 00 01 00 02 05 0B 00 02 0A 0C 00 +T 8E 01 00 00 23 23 4E C5 2B 46 2B 4E C5 21 +R 00 00 01 00 +T 98 01 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 9E 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T A5 01 00 00 F1 1E 29 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 06 00 +T AB 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T B6 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T B8 01 00 00 +R 00 00 01 00 +T B8 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/systrace_table.rel b/src/nos/lib/filesys_lib/systrace_table.rel new file mode 100644 index 00000000..30b65856 --- /dev/null +++ b/src/nos/lib/filesys_lib/systrace_table.rel @@ -0,0 +1,141 @@ +XL4 +H 4 areas 2D global symbols +S ___05c5_5caf_umount Ref00000000 +S ___048e_7fbc_fstat Ref00000000 +S ___0471_b319_dup2 Ref00000000 +S ___04a9_3fa5_ioctl Ref00000000 +S ___0526_0458_pipe Ref00000000 +S ___04c2_634b_lseek Ref00000000 +S ___0438_23aa_close Ref00000000 +S ___04b1_a61c_kill Ref00000000 +S ___03f8_2cfc_access Ref00000000 +S ___05b6_c82f_times Ref00000000 +S ___053c_054d_read Ref00000000 +S ___0430_743f_chdir Ref00000000 +S ___0496_60c5_getfsys Ref00000000 +S ___0486_8074_fork Ref00000000 +S ___05e4_4cc8_write Ref00000000 +S ___0433_c946_chmod Ref00000000 +S ___04e6_b5d1_mount Ref00000000 +S ___059c_ceb7_sync Ref00000000 +S ___05c9_acee_unlink Ref00000000 +S .__.ABS. Def00000000 +S ___0567_d2fd_sbrk Ref00000000 +S ___0436_87a8_chroot Ref00000000 +S ___0593_68cb_stime Ref00000000 +S ___04e0_6257_mknod Ref00000000 +S ___0424_9767_brk Ref00000000 +S ___04b6_b632_link Ref00000000 +S ___05b1_535d_time Ref00000000 +S ___0522_f746_pause Ref00000000 +S ___05df_e988_waitpid Ref00000000 +S ___047f_086a_falign Ref00000000 +S ___05d5_5353_utime Ref00000000 +S ___0579_3faf_signal Ref00000000 +S ___0435_88f5_chown Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0590_d63e_stat Ref00000000 +S ___047b_59b0_execve Ref00000000 +S ___059b_420b_symlink Ref00000000 +S ___053e_7ee6_reboot Ref00000000 +S ___050d_3971_open Ref00000000 +S ___0402_b0a9_alarm Ref00000000 +S ___0498_7dac_getset Ref00000000 +S ___0470_a2e4_dup Ref00000000 +S ___03f3_1951__5fexit Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 14A flags 0 +S _systrace_table Def00000000 +S _systrace_limit Def00000148 +A CDATA0 size 14A flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 48 01 00 00 +R 00 00 02 00 +T 48 01 00 00 +R 00 00 02 00 +T 00 00 00 00 04 00 00 00 00 02 03 00 00 04 +R 00 00 03 00 4A 05 08 00 +T 09 00 00 00 00 00 00 00 04 00 00 00 05 +R 00 00 03 00 4A 04 27 00 +T 11 00 00 00 00 00 00 00 05 00 00 00 04 +R 00 00 03 00 4A 04 18 00 +T 19 00 00 00 00 00 00 00 02 00 00 00 04 +R 00 00 03 00 4A 04 0B 00 +T 21 00 00 00 00 00 00 00 02 03 00 00 04 +R 00 00 03 00 4A 04 0F 00 +T 29 00 00 00 00 00 00 00 02 04 04 00 04 +R 00 00 03 00 4A 04 20 00 +T 31 00 00 00 00 00 00 00 04 00 00 00 04 +R 00 00 03 00 4A 04 06 00 +T 39 00 00 00 00 00 00 00 05 05 05 00 04 +R 00 00 03 00 4A 04 28 00 +T 41 00 00 00 00 00 00 00 04 00 00 00 04 +R 00 00 03 00 4A 04 29 00 +T 49 00 00 00 00 00 00 00 04 04 00 00 04 +R 00 00 03 00 4A 04 02 00 +T 51 00 00 00 00 00 00 00 02 05 05 00 04 +R 00 00 03 00 4A 04 23 00 +T 59 00 00 00 00 00 00 00 04 00 00 00 04 +R 00 00 03 00 4A 04 2A 00 +T 61 00 00 00 00 00 00 00 00 00 00 00 04 +R 00 00 03 00 4A 04 0D 00 +T 69 00 00 00 00 00 00 00 04 05 00 00 04 +R 00 00 03 00 4A 04 01 00 +T 71 00 00 00 00 00 00 00 05 05 00 00 05 +R 00 00 03 00 4A 04 0C 00 +T 79 00 00 00 00 00 00 00 04 05 05 00 04 +R 00 00 03 00 4A 04 03 00 +T 81 00 00 00 00 00 00 00 04 04 00 00 04 +R 00 00 03 00 4A 04 07 00 +T 89 00 00 00 00 00 00 00 02 02 00 00 04 +R 00 00 03 00 4A 04 19 00 +T 91 00 00 00 00 00 00 00 02 03 00 00 04 +R 00 00 03 00 4A 04 17 00 +T 99 00 00 00 00 00 00 00 02 02 00 00 04 +R 00 00 03 00 4A 04 10 00 +T A1 00 00 00 00 00 00 00 02 05 03 00 04 +R 00 00 03 00 4A 04 26 00 +T A9 00 00 00 00 00 00 00 00 00 00 00 04 +R 00 00 03 00 4A 04 1B 00 +T B1 00 00 00 00 00 00 00 05 00 00 00 05 +R 00 00 03 00 4A 04 04 00 +T B9 00 00 00 00 00 00 00 04 05 05 00 05 +R 00 00 03 00 4A 04 0A 00 +T C1 00 00 00 00 00 00 00 05 00 00 00 05 +R 00 00 03 00 4A 04 14 00 +T C9 00 00 00 00 00 00 00 04 05 05 04 05 +R 00 00 03 00 4A 04 05 00 +T D1 00 00 00 00 00 00 00 04 05 05 00 04 +R 00 00 03 00 4A 04 1F 00 +T D9 00 00 00 00 00 00 00 02 05 00 00 04 +R 00 00 03 00 4A 04 22 00 +T E1 00 00 00 00 00 00 00 05 00 00 00 04 +R 00 00 03 00 4A 04 16 00 +T E9 00 00 00 00 00 00 00 00 00 00 00 05 +R 00 00 03 00 4A 04 11 00 +T F1 00 00 00 00 00 00 00 05 00 00 00 04 +R 00 00 03 00 4A 04 1A 00 +T F9 00 00 00 00 00 00 00 05 00 00 00 04 +R 00 00 03 00 4A 04 09 00 +T 01 01 00 00 00 00 00 00 02 00 00 00 04 +R 00 00 03 00 4A 04 00 00 +T 09 01 00 00 00 00 00 00 02 00 00 00 04 +R 00 00 03 00 4A 04 12 00 +T 11 01 00 00 00 00 00 00 02 05 00 00 04 +R 00 00 03 00 4A 04 1E 00 +T 19 01 00 00 00 00 00 00 04 05 05 00 05 +R 00 00 03 00 4A 04 1C 00 +T 21 01 00 00 00 00 00 00 04 01 05 00 04 +R 00 00 03 00 4A 04 0E 00 +T 29 01 00 00 00 00 00 00 05 05 00 00 04 +R 00 00 03 00 4A 04 25 00 +T 31 01 00 00 00 00 00 00 02 02 00 00 04 +R 00 00 03 00 4A 04 24 00 +T 39 01 00 00 00 00 00 00 02 00 00 00 04 +R 00 00 03 00 4A 04 15 00 +T 41 01 00 00 00 00 00 00 04 04 00 00 29 00 +R 00 00 03 00 4A 04 1D 00 diff --git a/src/nos/lib/filesys_lib/time.rel b/src/nos/lib/filesys_lib/time.rel new file mode 100644 index 00000000..f847c287 --- /dev/null +++ b/src/nos/lib/filesys_lib/time.rel @@ -0,0 +1,69 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_time Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B1 flags 0 +S _time Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 04 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 04 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 04 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 1E 3E +R 00 00 01 00 02 04 04 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 08 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 5B 00 00 00 FB DD 74 FC DD 71 FD DD 70 FE 21 +R 00 00 01 00 +T 66 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 04 00 +T 6F 00 00 00 FB DD 46 FC 71 23 70 3E +R 00 00 01 00 +T 77 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7C 00 00 00 00 00 00 00 DD 7E FB DD A6 FC DD +R 00 00 01 00 02 04 00 00 +T 85 00 00 00 A6 FD DD A6 FE 3C 20 0F +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 04 00 +T 96 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 06 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 21 00 00 22 00 00 00 00 DD 4E FD +R 00 00 01 00 02 08 04 00 +T A5 00 00 00 DD 46 FE DD 6E FB DD 66 FC C3 +R 00 00 01 00 +T AF 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0A 00 diff --git a/src/nos/lib/filesys_lib/truncateto0.rel b/src/nos/lib/filesys_lib/truncateto0.rel new file mode 100644 index 00000000..0c12ce00 --- /dev/null +++ b/src/nos/lib/filesys_lib/truncateto0.rel @@ -0,0 +1,80 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Oftab Ref00000000 +S _f_trunc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _truncateto0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0A 00 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 4E 02 DD 46 03 09 7E E6 00 4F 23 +R 00 00 01 00 +T 14 00 00 00 7E E6 F0 47 3E 80 A8 B1 28 19 21 +R 00 00 01 00 +T 1F 00 00 00 0A 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T 2A 00 00 00 00 4F 23 7E E6 F0 47 3E A0 A8 B1 +R 00 00 01 00 +T 35 00 00 00 20 72 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 21 12 00 DD 4E 02 DD 46 03 09 AF +R 00 00 01 00 +T 42 00 00 00 77 23 77 23 77 23 77 59 50 3E +R 00 00 01 00 +T 4C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 51 00 00 00 00 00 00 00 DD 36 FC 00 00 00 00 +R 00 00 01 00 02 04 00 00 0B 0B 04 00 +T 57 00 00 00 DD 36 FD 00 00 00 00 +R 00 00 01 00 8B 07 04 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 01 1E 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 05 04 00 +T 64 00 00 00 A7 ED 42 30 40 +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 74 00 00 00 75 FE DD 74 FF 01 04 00 09 46 23 +R 00 00 01 00 +T 7F 00 00 00 66 68 DD 4E 02 DD 46 03 A7 ED 42 +R 00 00 01 00 +T 8A 00 00 00 20 0E +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 DD 6E FE DD 66 FF AF 77 23 77 23 +R 00 00 01 00 +T 97 00 00 00 77 23 77 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 DD 7E FC C6 02 DD 77 FC 30 03 DD +R 00 00 01 00 +T A5 00 00 00 34 FD +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 18 B2 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/filesys_lib/udata.rel b/src/nos/lib/filesys_lib/udata.rel new file mode 100644 index 00000000..c43186c3 --- /dev/null +++ b/src/nos/lib/filesys_lib/udata.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _udata_p Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/uf_alloc.rel b/src/nos/lib/filesys_lib/uf_alloc.rel new file mode 100644 index 00000000..72be4093 --- /dev/null +++ b/src/nos/lib/filesys_lib/uf_alloc.rel @@ -0,0 +1,48 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 50 flags 0 +S _uf_alloc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 03 00 +T 06 00 00 00 00 00 00 00 46 23 66 68 01 71 00 +R 00 00 01 00 02 04 01 00 +T 0F 00 00 00 09 DD 75 FD DD 74 FE DD 36 FC 00 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 7E FC FE 0A 30 1D +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 DD 6E FD DD 66 FE 7E E6 80 28 05 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 6E FC 18 1C +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 34 FD 20 03 DD 34 FE +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 34 FC 18 DC +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 01 00 +T 47 00 00 00 17 23 36 00 2E FF +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/filesys_lib/umask.rel b/src/nos/lib/filesys_lib/umask.rel new file mode 100644 index 00000000..6757562a --- /dev/null +++ b/src/nos/lib/filesys_lib/umask.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_getset Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A8 flags 0 +S _umask Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 0A 23 36 00 21 0C 00 ED 4B +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 09 DD 5E 02 DD 56 03 +R 00 00 01 00 02 04 06 00 +T 4B 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 54 00 00 00 36 07 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 64 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 6D 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 76 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 83 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 93 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A2 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/umount.rel b/src/nos/lib/filesys_lib/umount.rel new file mode 100644 index 00000000..de4d8402 --- /dev/null +++ b/src/nos/lib/filesys_lib/umount.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_mountumount Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _umount Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 20 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 05 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/unlink.rel b/src/nos/lib/filesys_lib/unlink.rel new file mode 100644 index 00000000..4c570def --- /dev/null +++ b/src/nos/lib/filesys_lib/unlink.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S _sys_unlink Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _unlink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 21 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 04 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/usrget.rel b/src/nos/lib/filesys_lib/usrget.rel new file mode 100644 index 00000000..49f214b8 --- /dev/null +++ b/src/nos/lib/filesys_lib/usrget.rel @@ -0,0 +1,19 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S _usrget Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 0F 00 00 00 CD 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 02 0B 02 00 diff --git a/src/nos/lib/filesys_lib/usrget_int.rel b/src/nos/lib/filesys_lib/usrget_int.rel new file mode 100644 index 00000000..01211d33 --- /dev/null +++ b/src/nos/lib/filesys_lib/usrget_int.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _usrget Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27 flags 0 +S _usrget_int Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 02 00 E5 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 4E 02 DD 46 03 21 02 00 39 5D +R 00 00 01 00 +T 14 00 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 1A 00 00 00 CD 00 00 00 00 F1 DD 6E FE DD 66 +R 00 00 01 00 02 05 00 00 +T 23 00 00 00 FF C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/filesys_lib/usrget_str.rel b/src/nos/lib/filesys_lib/usrget_str.rel new file mode 100644 index 00000000..c40901e6 --- /dev/null +++ b/src/nos/lib/filesys_lib/usrget_str.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _memccpy Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1B flags 0 +S _usrget_str Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 E5 21 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 18 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/filesys_lib/usrput.rel b/src/nos/lib/filesys_lib/usrput.rel new file mode 100644 index 00000000..0119f457 --- /dev/null +++ b/src/nos/lib/filesys_lib/usrput.rel @@ -0,0 +1,19 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S _usrput Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 0F 00 00 00 CD 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 02 0B 02 00 diff --git a/src/nos/lib/filesys_lib/usrput_int.rel b/src/nos/lib/filesys_lib/usrput_int.rel new file mode 100644 index 00000000..5ec18b4f --- /dev/null +++ b/src/nos/lib/filesys_lib/usrput_int.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _usrput Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S _usrput_int Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 02 00 E5 21 +R 00 00 01 00 02 05 03 00 +T 08 00 00 00 06 00 39 4D 44 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 10 00 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 17 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/filesys_lib/valadr.rel b/src/nos/lib/filesys_lib/valadr.rel new file mode 100644 index 00000000..60409782 --- /dev/null +++ b/src/nos/lib/filesys_lib/valadr.rel @@ -0,0 +1,50 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 59 flags 0 +S _valadr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 11 00 11 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 6E 02 DD 66 03 A7 ED 52 30 02 +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 18 2C +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 DD 6E 02 DD 66 03 DD 4E 04 DD 46 +R 00 00 01 00 +T 20 00 00 00 05 09 DD 75 FE DD 74 FF DD 4E 02 +R 00 00 01 00 +T 2B 00 00 00 DD 46 03 A7 ED 42 38 0E DD 4E FE +R 00 00 01 00 +T 36 00 00 00 DD 46 FF 21 00 F0 A7 ED 42 30 12 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 01 00 +T 4A 00 00 00 0E 23 36 00 21 00 00 18 03 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 21 01 00 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/filesys_lib/validblk.rel b/src/nos/lib/filesys_lib/validblk.rel new file mode 100644 index 00000000..a412f071 --- /dev/null +++ b/src/nos/lib/filesys_lib/validblk.rel @@ -0,0 +1,66 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___05d8_74cf_validblk_3a_20inval Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___05d7_a0e5_validblk_3a_20dev_2 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _findfs Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 93 flags 0 +S _validblk Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 19 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E FE DD 66 FF E5 0E +R 00 00 01 00 +T 25 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 06 00 02 0A 06 00 +T 2B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 31 00 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 DD 6E FE DD 66 FF 23 23 46 23 66 +R 00 00 01 00 +T 41 00 00 00 68 E5 21 04 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T 4C 00 00 00 09 4E 23 46 E1 09 4D 44 DD 6E 04 +R 00 00 01 00 +T 57 00 00 00 DD 66 05 A7 ED 42 38 18 21 06 00 +R 00 00 01 00 +T 62 00 00 00 DD 4E FE DD 46 FF 09 4E 23 46 DD +R 00 00 01 00 +T 6D 00 00 00 6E 04 DD 66 05 A7 ED 42 38 19 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T 7F 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 01 00 02 0A 01 00 +T 85 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 8B 00 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/validdev.rel b/src/nos/lib/filesys_lib/validdev.rel new file mode 100644 index 00000000..318c150e --- /dev/null +++ b/src/nos/lib/filesys_lib/validdev.rel @@ -0,0 +1,62 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Baddevmsg Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Devtab Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 75 flags 0 +S _validdev Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 66 03 6C 26 00 DD 75 FC 7D FE 03 +R 00 00 01 00 +T 14 00 00 00 30 22 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 6E FC 26 00 29 01 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 1F 00 00 00 09 46 23 66 68 DD 75 FD DD 74 FE +R 00 00 01 00 +T 2A 00 00 00 DD 7E 02 BE 30 08 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 6E FD DD 66 FE 18 3A +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 7E 04 DD B6 05 28 22 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 DD 4E FC 06 00 C5 DD 6E 04 DD 66 +R 00 00 01 00 +T 4B 00 00 00 05 E5 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 07 01 00 +T 53 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 06 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 60 00 00 00 F1 F1 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T 6B 00 00 00 13 23 36 00 21 00 00 +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/vdprintf.rel b/src/nos/lib/filesys_lib/vdprintf.rel new file mode 100644 index 00000000..9e2e5d74 --- /dev/null +++ b/src/nos/lib/filesys_lib/vdprintf.rel @@ -0,0 +1,56 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Ptab Ref00000000 +S _dputter Ref00000000 +S _chkstk Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Stkchk Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___vprinter Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 52 flags 0 +S _vdprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 2A 00 00 00 00 7D +R 00 00 01 00 02 05 06 00 02 0A 07 00 +T 07 00 00 00 B4 28 08 +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 10 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 2A 00 00 00 00 01 6F 00 09 46 23 +R 00 00 01 00 02 05 01 00 +T 1B 00 00 00 66 68 DD 4E 02 DD 46 03 CD +R 00 00 01 00 +T 24 00 00 00 00 00 00 00 30 05 +R 00 00 01 00 02 04 08 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 00 00 18 22 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 DD 6E 0A DD 66 0B E5 DD 6E 04 DD +R 00 00 01 00 +T 38 00 00 00 66 05 E5 21 00 00 E5 0E +R 00 00 01 00 +T 40 00 00 00 00 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 45 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 4A 00 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/wargs.rel b/src/nos/lib/filesys_lib/wargs.rel new file mode 100644 index 00000000..9c06b6ec --- /dev/null +++ b/src/nos/lib/filesys_lib/wargs.rel @@ -0,0 +1,83 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _usrget_int Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _ugetc Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D7 flags 0 +S _wargs Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 69 60 AF 77 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 23 77 21 06 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 14 00 00 00 09 DD 75 FE DD 74 FF +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 6E 02 DD 66 03 5D 54 23 23 DD +R 00 00 01 00 +T 26 00 00 00 75 02 DD 74 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 2E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 35 00 00 00 FA DD 74 FB 7D B4 28 70 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 DD 6E 04 DD 66 05 34 23 20 01 34 +R 00 00 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 DD 5E FA DD 56 FB 13 DD 73 FA DD +R 00 00 01 00 +T 53 00 00 00 72 FB 1B 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 26 00 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 60 00 00 00 DD 75 FC DD 74 FD E5 DD 6E FE DD +R 00 00 01 00 +T 6B 00 00 00 66 FF 23 DD 75 FE DD 74 FF 2B C1 +R 00 00 01 00 +T 76 00 00 00 71 21 06 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T 81 00 00 00 01 F4 01 09 DD 4E FE DD 46 FF A7 +R 00 00 01 00 +T 8C 00 00 00 ED 42 30 12 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 04 00 +T 99 00 00 00 07 23 36 00 21 01 00 18 32 +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 DD 7E FC DD B6 FD 20 9E +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 C3 1B 00 00 00 +R 00 00 01 00 00 05 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 DD 6E 04 DD 66 05 23 23 E5 21 +R 00 00 01 00 +T B7 00 00 00 06 00 DD 4E 04 DD 46 05 09 4D 44 +R 00 00 01 00 +T C2 00 00 00 DD 6E FE DD 66 FF A7 ED 42 4D 44 +R 00 00 01 00 +T CD 00 00 00 E1 71 23 70 21 00 00 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/filesys_lib/wr_inode.rel b/src/nos/lib/filesys_lib/wr_inode.rel new file mode 100644 index 00000000..da0248fa --- /dev/null +++ b/src/nos/lib/filesys_lib/wr_inode.rel @@ -0,0 +1,117 @@ +XL4 +H 3 areas E global symbols +S ?US_RSH_L02 Ref00000000 +S _magic Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dirty_mask Ref00000000 +S _findfs Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F5 flags 0 +S _wr_inode Def00000000 +A CSTR size 9 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 01 +R 00 00 01 00 02 05 08 00 +T 06 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 00 04 02 00 +T 0F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 14 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 02 00 +T 1D 00 00 00 23 7E B7 CA E5 00 00 00 21 09 00 +R 00 00 01 00 00 08 01 00 +T 26 00 00 00 DD 4E 02 DD 46 03 09 7E B7 C2 +R 00 00 01 00 +T 30 00 00 00 E5 00 00 00 +R 00 00 01 00 00 04 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 0E 00 C5 DD 6E 02 DD 66 03 23 23 +R 00 00 01 00 +T 3D 00 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 44 00 00 00 00 00 00 00 CD 00 00 00 00 23 23 +R 00 00 01 00 02 04 0B 00 02 09 02 00 +T 4B 00 00 00 46 23 66 68 E5 21 05 00 DD 4E 02 +R 00 00 01 00 +T 56 00 00 00 DD 46 03 09 5E 23 56 06 03 CD +R 00 00 01 00 +T 60 00 00 00 00 00 00 00 E1 19 4D 44 DD 6E 02 +R 00 00 01 00 02 04 00 00 +T 69 00 00 00 DD 66 03 23 23 23 5E 23 56 3E +R 00 00 01 00 +T 73 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 78 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 02 00 +T 81 00 00 00 7D B4 20 05 +R 00 00 01 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 21 FF FF 18 68 +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 40 00 E5 21 0A 00 DD 4E 02 DD +R 00 00 01 00 +T 95 00 00 00 46 03 09 4D 44 C5 21 05 00 DD 5E +R 00 00 01 00 +T A0 00 00 00 02 DD 56 03 19 7E E6 07 5F 23 7E +R 00 00 01 00 +T AB 00 00 00 E6 00 57 06 06 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 07 00 +T B4 00 00 00 6E FE DD 66 FF 19 EB 3E +R 00 00 01 00 +T BC 00 00 00 00 00 00 00 21 00 00 00 00 C1 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T C2 00 00 00 00 00 00 00 F1 3A 00 00 00 00 B7 +R 00 00 01 00 02 04 02 00 02 0A 0A 00 +T C9 00 00 00 28 04 0E 01 18 02 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 0E 02 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T D9 00 00 00 21 00 00 00 00 CD 00 00 00 00 CB +R 00 00 01 00 02 05 03 00 02 0A 02 00 +T E0 00 00 00 7C 28 02 +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 18 A0 +R 00 00 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 DD 6E 02 DD 66 03 23 23 36 00 21 +R 00 00 01 00 +T F0 00 00 00 00 00 +R 00 00 01 00 +T F2 00 00 00 +R 00 00 01 00 +T F2 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 77 72 5F 69 6E 6F 64 65 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/write.rel b/src/nos/lib/filesys_lib/write.rel new file mode 100644 index 00000000..86ad0387 --- /dev/null +++ b/src/nos/lib/filesys_lib/write.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_readwrite Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _write Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 24 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_access.rel b/src/nos/lib/filesys_lib/xfs_access.rel new file mode 100644 index 00000000..0a6ab519 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_access.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_access Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A4 flags 0 +S _xfs_access Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T 55 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 60 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 69 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 72 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7F 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 8F 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T 9E 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_chdir.rel b/src/nos/lib/filesys_lib/xfs_chdir.rel new file mode 100644 index 00000000..063bea86 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_chdir.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_chdir Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _xfs_chdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 03 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 03 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_chmod.rel b/src/nos/lib/filesys_lib/xfs_chmod.rel new file mode 100644 index 00000000..8e2229ef --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_chmod.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_chmod Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _xfs_chmod Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 04 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_chown.rel b/src/nos/lib/filesys_lib/xfs_chown.rel new file mode 100644 index 00000000..35b1814d --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_chown.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_chown Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _xfs_chown Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_close.rel b/src/nos/lib/filesys_lib/xfs_close.rel new file mode 100644 index 00000000..4bda8de5 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_close.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_close Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _xfs_close Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 06 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 05 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_creat.rel b/src/nos/lib/filesys_lib/xfs_creat.rel new file mode 100644 index 00000000..b2ccf608 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_creat.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B9 flags 0 +S _xfs_creat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 36 01 23 36 +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 03 21 0E 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 DD 5E 04 DD 56 05 73 23 72 2A +R 00 00 01 00 +T 60 00 00 00 00 00 00 00 23 23 23 36 14 3E +R 00 00 01 00 02 04 05 00 +T 68 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 6D 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 09 00 +T 72 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 79 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 05 00 +T 8B 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 91 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 98 00 00 00 3C 20 0F +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T A4 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T B3 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_dup.rel b/src/nos/lib/filesys_lib/xfs_dup.rel new file mode 100644 index 00000000..03effddc --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_dup.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _sys_dup Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _xfs_dup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 08 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 02 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_dup2.rel b/src/nos/lib/filesys_lib/xfs_dup2.rel new file mode 100644 index 00000000..71ec6de5 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_dup2.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _sys_dup2 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _xfs_dup2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 23 23 36 09 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_end.rel b/src/nos/lib/filesys_lib/xfs_end.rel new file mode 100644 index 00000000..0df988f6 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_end.rel @@ -0,0 +1,60 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _filesys_doclose Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _xfs_sync Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 74 flags 0 +S _xfs_end Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 AF DD 77 FD DD 77 FE +R 00 00 01 00 02 04 04 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 01 0A 80 DD 6E FD DD 66 FE 3E 80 +R 00 00 01 00 +T 34 00 00 00 AC 67 ED 42 30 2F +R 00 00 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 2A 00 00 00 00 46 23 66 68 DD 4E +R 00 00 01 00 02 05 04 00 +T 43 00 00 00 FD DD 46 FE 09 01 71 00 09 7E E6 +R 00 00 01 00 +T 4E 00 00 00 80 20 0E +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 5E FD DD 56 FE 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 59 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 34 FD 20 03 DD 34 FE +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 18 C0 +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 6F 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 03 00 diff --git a/src/nos/lib/filesys_lib/xfs_falign.rel b/src/nos/lib/filesys_lib/xfs_falign.rel new file mode 100644 index 00000000..0193635b --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_falign.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_falign Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _xfs_falign Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 23 23 36 28 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_fstat.rel b/src/nos/lib/filesys_lib/xfs_fstat.rel new file mode 100644 index 00000000..3d9bf1c4 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_fstat.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_statfstat Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _xfs_fstat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 0D 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_getfsys.rel b/src/nos/lib/filesys_lib/xfs_getfsys.rel new file mode 100644 index 00000000..f165a4fe --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_getfsys.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_getfsys Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _xfs_getfsys Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 0E 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_init.rel b/src/nos/lib/filesys_lib/xfs_init.rel new file mode 100644 index 00000000..421481d3 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_init.rel @@ -0,0 +1,112 @@ +XL4 +H 2 areas 16 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _rdtime Ref00000000 +S _i_ref Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0502_a7f6_no_20filesys Ref00000000 +S _fmount Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _root_dev Ref00000000 +S _root_ino Ref00000000 +S __panic Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _fs_init Ref00000000 +S _bufinit Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0503_7405_no_20root Ref00000000 +S _d_init Ref00000000 +S _i_open Ref00000000 +S _i_init Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E0 flags 0 +S _xfs_init Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E2 FF 21 1D 00 E5 +R 00 00 01 00 02 05 0D 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 2B 09 0F 00 +T 25 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 2B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 30 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 14 00 +T 35 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 14 00 02 09 00 00 +T 3B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 40 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 22 +R 00 00 01 00 02 04 00 00 +T 49 00 00 00 00 00 00 00 7D A4 3C 28 77 +R 00 00 01 00 02 04 0A 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 0E 00 C5 01 00 00 ED 5B +R 00 00 01 00 +T 58 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 09 07 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 64 00 00 00 B4 28 11 +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 06 00 02 0B 06 00 +T 6D 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 73 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 01 01 00 ED 5B 00 00 00 00 3E +R 00 00 01 00 02 09 0A 00 +T 80 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 85 00 00 00 00 00 00 00 22 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 0B 00 +T 8C 00 00 00 20 11 +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 11 00 02 0B 11 00 +T 94 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 9A 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 2A 00 00 00 00 01 27 00 09 ED 4B +R 00 00 01 00 02 05 03 00 +T A8 00 00 00 00 00 00 00 71 23 70 2A +R 00 00 01 00 02 04 0B 00 +T AE 00 00 00 00 00 00 00 01 6B 00 09 ED 4B +R 00 00 01 00 02 04 03 00 +T B6 00 00 00 00 00 00 00 71 23 70 ED 5B +R 00 00 01 00 02 04 0B 00 +T BD 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 2B 09 02 00 +T C2 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T C7 00 00 00 +R 00 00 01 00 +T C7 00 00 00 2A 00 00 00 00 01 23 00 09 EB 3E +R 00 00 01 00 02 05 03 00 +T D0 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T D5 00 00 00 00 00 00 00 21 00 00 22 +R 00 00 01 00 02 04 00 00 +T DB 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 08 00 02 09 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_ioctl.rel b/src/nos/lib/filesys_lib/xfs_ioctl.rel new file mode 100644 index 00000000..e69ec40c --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_ioctl.rel @@ -0,0 +1,77 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_ioctl Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DC flags 0 +S _xfs_ioctl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 06 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 04 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 0A DD 56 0B 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 0C DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 0D 73 23 72 21 2E 00 39 01 +R 00 00 01 00 +T 57 00 00 00 02 00 09 DD 75 E0 DD 74 E1 21 +R 00 00 01 00 +T 61 00 00 00 0E 00 ED 4B 00 00 00 00 09 E5 21 +R 00 00 01 00 02 08 06 00 +T 6A 00 00 00 04 00 39 7E C6 02 77 23 7E CE 00 +R 00 00 01 00 +T 75 00 00 00 77 2B 6E 67 2B 2B 5E 23 56 E1 73 +R 00 00 01 00 +T 80 00 00 00 23 72 2A 00 00 00 00 23 23 23 36 +R 00 00 01 00 02 07 06 00 +T 89 00 00 00 0F 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 8F 00 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 00 00 2B 0A 05 00 +T 95 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 9C 00 00 00 DE DD 74 DF 21 04 00 ED 4B +R 00 00 01 00 +T A5 00 00 00 00 00 00 00 09 DD 4E DE DD 46 DF +R 00 00 01 00 02 04 06 00 +T AE 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T B4 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T BB 00 00 00 3C 20 0F +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T C7 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 21 00 00 22 00 00 00 00 DD 6E DE +R 00 00 01 00 02 08 06 00 +T D6 00 00 00 DD 66 DF C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_link.rel b/src/nos/lib/filesys_lib/xfs_link.rel new file mode 100644 index 00000000..5d24d1f7 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_link.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_link Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _xfs_link Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 05 00 +T 56 00 00 00 23 23 36 11 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 05 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_lseek.rel b/src/nos/lib/filesys_lib/xfs_lseek.rel new file mode 100644 index 00000000..f7137576 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_lseek.rel @@ -0,0 +1,84 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S _sys_lseek Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F2 flags 0 +S _xfs_lseek Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 0A DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 56 0B 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 E5 3E 10 DD 4E 0C +R 00 00 01 00 02 04 05 00 +T 60 00 00 00 DD 46 0D DD 6E 0A DD 66 0B CD +R 00 00 01 00 +T 6A 00 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 0A 00 +T 72 00 00 00 10 00 ED 4B 00 00 00 00 09 DD 5E +R 00 00 01 00 02 08 05 00 +T 7B 00 00 00 0E DD 56 0F 73 23 72 2A +R 00 00 01 00 +T 83 00 00 00 00 00 00 00 23 23 23 36 19 3E +R 00 00 01 00 02 04 05 00 +T 8B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 90 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 04 00 +T 95 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 9C 00 00 00 FB DD 74 FC DD 71 FD DD 70 FE 21 +R 00 00 01 00 +T A7 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 05 00 +T B0 00 00 00 FB DD 46 FC 71 23 70 3E +R 00 00 01 00 +T B8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T BD 00 00 00 00 00 00 00 DD 7E FB DD A6 FC DD +R 00 00 01 00 02 04 00 00 +T C6 00 00 00 A6 FD DD A6 FE 3C 20 0F +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T D7 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 21 00 00 22 00 00 00 00 DD 4E FD +R 00 00 01 00 02 08 05 00 +T E6 00 00 00 DD 46 FE DD 6E FB DD 66 FC C3 +R 00 00 01 00 +T F0 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0B 00 diff --git a/src/nos/lib/filesys_lib/xfs_mknod.rel b/src/nos/lib/filesys_lib/xfs_mknod.rel new file mode 100644 index 00000000..8f9bfb59 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_mknod.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_mknod Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _xfs_mknod Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 12 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_mount.rel b/src/nos/lib/filesys_lib/xfs_mount.rel new file mode 100644 index 00000000..4e1e9864 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_mount.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_mountumount Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _xfs_mount Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_open.rel b/src/nos/lib/filesys_lib/xfs_open.rel new file mode 100644 index 00000000..1b3afcf7 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_open.rel @@ -0,0 +1,91 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_open Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F8 flags 0 +S _xfs_open Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 01 00 00 21 06 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 04 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 05 00 +T 39 00 00 00 5E 0A DD 56 0B 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 4E 0C DD +R 00 00 01 00 02 06 05 00 +T 4D 00 00 00 46 0D 71 23 70 DD 7E 0C E6 00 47 +R 00 00 01 00 +T 58 00 00 00 DD 7E 0D E6 01 B0 28 32 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 21 2E 00 39 01 02 00 09 DD 75 E0 +R 00 00 01 00 +T 6B 00 00 00 DD 74 E1 21 0E 00 ED 4B +R 00 00 01 00 +T 73 00 00 00 00 00 00 00 09 E5 21 04 00 39 7E +R 00 00 01 00 02 04 05 00 +T 7C 00 00 00 C6 02 77 23 7E CE 00 77 2B 6E 67 +R 00 00 01 00 +T 87 00 00 00 2B 2B 4E 23 46 E1 71 23 70 18 0C +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 21 0E 00 ED 4B 00 00 00 00 09 AF +R 00 00 01 00 02 09 05 00 +T 9B 00 00 00 77 23 77 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 2A 00 00 00 00 23 23 23 36 14 3E +R 00 00 01 00 02 05 05 00 +T A7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T AC 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 09 00 +T B1 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T B8 00 00 00 DE DD 74 DF 21 04 00 ED 4B +R 00 00 01 00 +T C1 00 00 00 00 00 00 00 09 DD 4E DE DD 46 DF +R 00 00 01 00 02 04 05 00 +T CA 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T D0 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T D7 00 00 00 3C 20 0F +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 05 00 +T E3 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T E9 00 00 00 +R 00 00 01 00 +T E9 00 00 00 21 00 00 22 00 00 00 00 DD 6E DE +R 00 00 01 00 02 08 05 00 +T F2 00 00 00 DD 66 DF C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_read.rel b/src/nos/lib/filesys_lib/xfs_read.rel new file mode 100644 index 00000000..1ae0fd2b --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_read.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_readwrite Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _xfs_read Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 17 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_stat.rel b/src/nos/lib/filesys_lib/xfs_stat.rel new file mode 100644 index 00000000..07598657 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_stat.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_statfstat Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _xfs_stat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 1B 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_symlink.rel b/src/nos/lib/filesys_lib/xfs_symlink.rel new file mode 100644 index 00000000..7dc84ea0 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_symlink.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_symlink Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _xfs_symlink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 2A 00 00 00 00 23 +R 00 00 01 00 02 0A 06 00 +T 56 00 00 00 23 23 36 26 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 5D 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 68 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 7A 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 87 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 97 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A6 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_sync.rel b/src/nos/lib/filesys_lib/xfs_sync.rel new file mode 100644 index 00000000..0c9939bd --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_sync.rel @@ -0,0 +1,48 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _sys_sync Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 65 flags 0 +S _xfs_sync Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E2 FF 21 1D 00 E5 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 05 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 05 00 +T 30 00 00 00 2A 00 00 00 00 23 23 23 36 1D 3E +R 00 00 01 00 02 05 05 00 +T 39 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 3E 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 09 00 +T 43 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 49 00 00 00 04 00 ED 4B 00 00 00 00 09 AF 77 +R 00 00 01 00 02 08 05 00 +T 52 00 00 00 23 77 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 57 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 5D 00 00 00 00 00 22 00 00 00 00 C3 +R 00 00 01 00 02 07 05 00 +T 63 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_sysdebug.rel b/src/nos/lib/filesys_lib/xfs_sysdebug.rel new file mode 100644 index 00000000..14b29815 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_sysdebug.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_getset Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A8 flags 0 +S _xfs_sysdebug Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 0C 23 36 00 21 0C 00 ED 4B +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 09 DD 5E 02 DD 56 03 +R 00 00 01 00 02 04 06 00 +T 4B 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 54 00 00 00 36 07 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 64 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 6D 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 76 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 83 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 93 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A2 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_systrace.rel b/src/nos/lib/filesys_lib/xfs_systrace.rel new file mode 100644 index 00000000..e862cdc5 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_systrace.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_getset Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A8 flags 0 +S _xfs_systrace Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 0B 23 36 00 21 0C 00 ED 4B +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 09 DD 5E 02 DD 56 03 +R 00 00 01 00 02 04 06 00 +T 4B 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 54 00 00 00 36 07 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 64 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 6D 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 76 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 83 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 93 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A2 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_time.rel b/src/nos/lib/filesys_lib/xfs_time.rel new file mode 100644 index 00000000..6c570b76 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_time.rel @@ -0,0 +1,69 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _sys_time Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B1 flags 0 +S _xfs_time Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF 21 1D 00 E5 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 04 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 04 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 04 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 1E 3E +R 00 00 01 00 02 04 04 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 08 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 5B 00 00 00 FB DD 74 FC DD 71 FD DD 70 FE 21 +R 00 00 01 00 +T 66 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 04 00 +T 6F 00 00 00 FB DD 46 FC 71 23 70 3E +R 00 00 01 00 +T 77 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7C 00 00 00 00 00 00 00 DD 7E FB DD A6 FC DD +R 00 00 01 00 02 04 00 00 +T 85 00 00 00 A6 FD DD A6 FE 3C 20 0F +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 04 00 +T 96 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 06 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 21 00 00 22 00 00 00 00 DD 4E FD +R 00 00 01 00 02 08 04 00 +T A5 00 00 00 DD 46 FE DD 6E FB DD 66 FC C3 +R 00 00 01 00 +T AF 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0A 00 diff --git a/src/nos/lib/filesys_lib/xfs_umask.rel b/src/nos/lib/filesys_lib/xfs_umask.rel new file mode 100644 index 00000000..c93972f0 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_umask.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _sys_getset Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A8 flags 0 +S _xfs_umask Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 0A 23 36 00 21 0C 00 ED 4B +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 09 DD 5E 02 DD 56 03 +R 00 00 01 00 02 04 06 00 +T 4B 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 54 00 00 00 36 07 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 5F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 64 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 6D 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 76 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 7E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 83 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 93 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T A2 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_umount.rel b/src/nos/lib/filesys_lib/xfs_umount.rel new file mode 100644 index 00000000..ae8fb68f --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_umount.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _sys_mountumount Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _xfs_umount Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 20 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 05 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 diff --git a/src/nos/lib/filesys_lib/xfs_unlink.rel b/src/nos/lib/filesys_lib/xfs_unlink.rel new file mode 100644 index 00000000..147df4f9 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_unlink.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S _sys_unlink Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9B flags 0 +S _xfs_unlink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 02 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 2A +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 23 23 23 36 21 3E +R 00 00 01 00 02 04 06 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 04 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 5B 00 00 00 FD DD 74 FE 21 04 00 ED 4B +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 09 DD 4E FD DD 46 FE +R 00 00 01 00 02 04 06 00 +T 6D 00 00 00 71 23 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 79 A0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7A 00 00 00 3C 20 0F +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T 86 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T 95 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xfs_write.rel b/src/nos/lib/filesys_lib/xfs_write.rel new file mode 100644 index 00000000..ae1a2715 --- /dev/null +++ b/src/nos/lib/filesys_lib/xfs_write.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sys_readwrite Ref00000000 +S _systrace_exit Ref00000000 +S _Ptab Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _systrace_entry Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _xfs_write Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 1D 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 22 +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 00 00 00 00 ED 4B 00 00 00 00 71 +R 00 00 01 00 02 04 06 00 02 0A 03 00 +T 27 00 00 00 23 70 2A 00 00 00 00 23 23 36 01 +R 00 00 01 00 02 07 06 00 +T 30 00 00 00 21 0A 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 02 09 06 00 +T 39 00 00 00 5E 02 DD 56 03 73 23 72 21 0C 00 +R 00 00 01 00 +T 44 00 00 00 ED 4B 00 00 00 00 09 DD 5E 04 DD +R 00 00 01 00 02 06 06 00 +T 4D 00 00 00 56 05 73 23 72 21 0E 00 ED 4B +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 09 DD 5E 0A DD 56 0B +R 00 00 01 00 02 04 06 00 +T 60 00 00 00 73 23 72 2A 00 00 00 00 23 23 23 +R 00 00 01 00 02 08 06 00 +T 69 00 00 00 36 24 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 79 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 04 00 ED 4B 00 00 00 00 09 DD 4E +R 00 00 01 00 02 08 06 00 +T 8B 00 00 00 FD DD 46 FE 71 23 70 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 98 00 00 00 00 00 00 00 79 A0 3C 20 0F +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 06 00 +T A8 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 00 00 22 00 00 00 00 DD 6E FD +R 00 00 01 00 02 08 06 00 +T B7 00 00 00 DD 66 FE C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/filesys_lib/xip_align.rel b/src/nos/lib/filesys_lib/xip_align.rel new file mode 100644 index 00000000..5820adff --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_align.rel @@ -0,0 +1,655 @@ +XL4 +H 2 areas 15 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _i_sync Ref00000000 +S _i_deref Ref00000000 +S _xip_find Ref00000000 +S _xip_align_recurse Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _getfs Ref00000000 +S _xip_align_chase Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _xip_search Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _xip_reserve Ref00000000 +S _min_int Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S _i_open Ref00000000 +S _xip_set Ref00000000 +S _zerobuf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 745 flags 0 +S _xip_align Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E2 FF DD 6E 02 DD +R 00 00 01 00 02 05 0C 00 +T 09 00 00 00 66 03 23 23 23 46 23 66 68 DD 75 +R 00 00 01 00 +T 14 00 00 00 F6 DD 74 F7 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 1C 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 23 00 00 00 F4 DD 74 F5 01 16 00 09 4E 23 46 +R 00 00 01 00 +T 2E 00 00 00 21 14 00 DD 5E F4 DD 56 F5 19 56 +R 00 00 01 00 +T 39 00 00 00 23 66 6A A7 ED 42 38 13 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 09 00 +T 4A 00 00 00 2E 23 36 00 21 FF FF C3 +R 00 00 01 00 +T 52 00 00 00 42 07 00 00 +R 00 00 01 00 00 04 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 5F 00 00 00 E6 00 4F 23 7E E6 F0 47 3E A0 A8 +R 00 00 01 00 +T 6A 00 00 00 B1 20 13 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 09 00 +T 76 00 00 00 2A 23 36 00 21 FF FF C3 +R 00 00 01 00 +T 7E 00 00 00 42 07 00 00 +R 00 00 01 00 00 04 01 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 8B 00 00 00 E6 00 4F 23 7E E6 F0 47 3E 80 A8 +R 00 00 01 00 +T 96 00 00 00 B1 28 13 +R 00 00 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 09 00 +T A2 00 00 00 2D 23 36 00 21 FF FF C3 +R 00 00 01 00 +T AA 00 00 00 42 07 00 00 +R 00 00 01 00 00 04 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 21 00 00 E5 21 FF 3F E5 DD 6E 0A +R 00 00 01 00 +T B7 00 00 00 DD 66 0B C1 09 EB DD 6E 0C DD 66 +R 00 00 01 00 +T C2 00 00 00 0D C1 ED 4A 4D 44 EB 3E 0E CD +R 00 00 01 00 +T CC 00 00 00 00 00 00 00 DD 75 F0 DD 74 F1 4D +R 00 00 01 00 02 04 10 00 +T D5 00 00 00 44 21 00 01 A7 ED 42 30 13 +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 09 00 +T E7 00 00 00 1C 23 36 00 21 FF FF C3 +R 00 00 01 00 +T EF 00 00 00 42 07 00 00 +R 00 00 01 00 00 04 01 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 1E 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 13 00 +T F6 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T FD 00 00 00 EE DD 74 EF 21 00 00 E5 21 FF 01 +R 00 00 01 00 +T 08 01 00 00 E5 DD 6E 0A DD 66 0B C1 09 EB DD +R 00 00 01 00 +T 13 01 00 00 6E 0C DD 66 0D C1 ED 4A 4D 44 EB +R 00 00 01 00 +T 1E 01 00 00 3E 09 CD 00 00 00 00 DD 75 F2 DD +R 00 00 01 00 02 07 10 00 +T 27 01 00 00 74 F3 AF DD 77 EA DD 77 EB AF DD +R 00 00 01 00 +T 32 01 00 00 77 E2 DD 77 E3 +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 DD 4E F0 DD 46 F1 DD 6E E2 DD 66 +R 00 00 01 00 +T 42 01 00 00 E3 A7 ED 42 D2 37 02 00 00 +R 00 00 01 00 00 09 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 01 20 00 DD 5E EA DD 56 EB DD 6E +R 00 00 01 00 +T 54 01 00 00 F2 DD 66 F3 A7 ED 52 EB 3E +R 00 00 01 00 +T 5D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 62 01 00 00 00 00 00 00 DD 75 E6 DD 74 E7 21 +R 00 00 01 00 02 04 00 00 +T 6B 01 00 00 16 00 DD 4E F4 DD 46 F5 09 5E 23 +R 00 00 01 00 +T 76 01 00 00 56 D5 21 14 00 09 4E 23 46 C5 DD +R 00 00 01 00 +T 81 01 00 00 4E E6 DD 46 E7 DD 5E F6 DD 56 F7 +R 00 00 01 00 +T 8C 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0B 00 02 0A 0B 00 +T 92 01 00 00 00 00 00 00 F1 F1 DD 75 E4 DD 74 +R 00 00 01 00 02 04 00 00 +T 9B 01 00 00 E5 7D A4 3C 20 1C +R 00 00 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 09 00 +T AA 01 00 00 1C 23 36 00 DD 6E E2 DD 66 E3 DD +R 00 00 01 00 +T B5 01 00 00 75 F0 DD 74 F1 C3 A1 06 00 00 +R 00 00 01 00 00 0A 01 00 +T BD 01 00 00 +R 00 00 01 00 +T BD 01 00 00 DD 6E E2 DD 66 E3 29 DD 4E EE DD +R 00 00 01 00 +T C8 01 00 00 46 EF 09 DD 4E E4 DD 46 E5 71 23 +R 00 00 01 00 +T D3 01 00 00 70 21 16 00 DD 5E F4 DD 56 F5 19 +R 00 00 01 00 +T DE 01 00 00 4E 23 46 C5 21 14 00 19 4E 23 46 +R 00 00 01 00 +T E9 01 00 00 C5 21 01 00 E5 DD 6E E6 DD 66 E7 +R 00 00 01 00 +T F4 01 00 00 E5 DD 4E E4 DD 46 E5 DD 5E F6 DD +R 00 00 01 00 +T FF 01 00 00 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0D 00 +T 04 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 0B 02 00 00 F1 F1 7D B4 28 0F +R 00 00 01 00 +T 11 02 00 00 +R 00 00 01 00 +T 11 02 00 00 DD 6E E2 DD 66 E3 DD 75 F0 DD 74 +R 00 00 01 00 +T 1C 02 00 00 F1 C3 A1 06 00 00 +R 00 00 01 00 00 06 01 00 +T 20 02 00 00 +R 00 00 01 00 +T 20 02 00 00 21 08 00 39 7E C6 20 77 30 02 23 +R 00 00 01 00 +T 2B 02 00 00 34 +R 00 00 01 00 +T 2C 02 00 00 +R 00 00 01 00 +T 2C 02 00 00 DD 34 E2 20 03 DD 34 E3 +R 00 00 01 00 +T 34 02 00 00 +R 00 00 01 00 +T 34 02 00 00 C3 37 01 00 00 +R 00 00 01 00 00 05 01 00 +T 37 02 00 00 +R 00 00 01 00 +T 37 02 00 00 AF DD 77 EA DD 77 EB AF DD 77 E2 +R 00 00 01 00 +T 42 02 00 00 DD 77 E3 +R 00 00 01 00 +T 45 02 00 00 +R 00 00 01 00 +T 45 02 00 00 DD 4E F0 DD 46 F1 DD 6E E2 DD 66 +R 00 00 01 00 +T 50 02 00 00 E3 A7 ED 42 D2 9B 03 00 00 +R 00 00 01 00 00 09 01 00 +T 57 02 00 00 +R 00 00 01 00 +T 57 02 00 00 01 20 00 DD 5E EA DD 56 EB DD 6E +R 00 00 01 00 +T 62 02 00 00 F2 DD 66 F3 A7 ED 52 EB 3E +R 00 00 01 00 +T 6B 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 70 02 00 00 00 00 00 00 DD 75 E6 DD 74 E7 DD +R 00 00 01 00 02 04 00 00 +T 79 02 00 00 6E E2 DD 66 E3 29 DD 4E EE DD 46 +R 00 00 01 00 +T 84 02 00 00 EF 09 46 23 66 68 DD 75 E8 DD 74 +R 00 00 01 00 +T 8F 02 00 00 E9 AF DD 77 E4 DD 77 E5 +R 00 00 01 00 +T 97 02 00 00 +R 00 00 01 00 +T 97 02 00 00 DD 4E E6 DD 46 E7 DD 6E E4 DD 66 +R 00 00 01 00 +T A2 02 00 00 E5 A7 ED 42 D2 90 03 00 00 +R 00 00 01 00 00 09 01 00 +T A9 02 00 00 +R 00 00 01 00 +T A9 02 00 00 21 14 00 DD 4E F4 DD 46 F5 09 5E +R 00 00 01 00 +T B4 02 00 00 23 56 D5 21 12 00 09 4E 23 46 C5 +R 00 00 01 00 +T BF 02 00 00 21 01 00 E5 DD 4E E8 DD 46 E9 DD +R 00 00 01 00 +T CA 02 00 00 5E F6 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 12 00 +T D2 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T D9 02 00 00 F1 DD 75 FA DD 74 FB 7D A4 3C 20 +R 00 00 01 00 +T E4 02 00 00 03 +R 00 00 01 00 +T E5 02 00 00 +R 00 00 01 00 +T E5 02 00 00 C3 A1 06 00 00 +R 00 00 01 00 00 05 01 00 +T E8 02 00 00 +R 00 00 01 00 +T E8 02 00 00 DD 7E FA DD B6 FB C2 75 03 00 00 +R 00 00 01 00 00 0B 01 00 +T F1 02 00 00 +R 00 00 01 00 +T F1 02 00 00 DD 6E F2 DD 66 F3 E5 DD 6E F0 DD +R 00 00 01 00 +T FC 02 00 00 66 F1 E5 DD 6E EE DD 66 EF E5 DD +R 00 00 01 00 +T 07 03 00 00 6E EA DD 66 EB E5 DD 6E E8 DD 66 +R 00 00 01 00 +T 12 03 00 00 E9 E5 DD 4E 02 DD 46 03 DD 5E F4 +R 00 00 01 00 +T 1D 03 00 00 DD 56 F5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 23 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 2A 03 00 00 F1 F1 F1 DD 75 EC DD 74 ED 7D A4 +R 00 00 01 00 +T 35 03 00 00 3C 20 03 +R 00 00 01 00 +T 38 03 00 00 +R 00 00 01 00 +T 38 03 00 00 C3 A1 06 00 00 +R 00 00 01 00 00 05 01 00 +T 3B 03 00 00 +R 00 00 01 00 +T 3B 03 00 00 21 14 00 DD 4E F4 DD 46 F5 09 5E +R 00 00 01 00 +T 46 03 00 00 23 56 D5 21 12 00 09 4E 23 46 C5 +R 00 00 01 00 +T 51 03 00 00 21 00 00 E5 DD 4E EC DD 46 ED DD +R 00 00 01 00 +T 5C 03 00 00 5E F6 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 12 00 +T 64 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 6B 03 00 00 F1 3E 01 AD B4 28 03 +R 00 00 01 00 +T 72 03 00 00 +R 00 00 01 00 +T 72 03 00 00 C3 A1 06 00 00 +R 00 00 01 00 00 05 01 00 +T 75 03 00 00 +R 00 00 01 00 +T 75 03 00 00 +R 00 00 01 00 +T 75 03 00 00 DD 34 E8 20 03 DD 34 E9 +R 00 00 01 00 +T 7D 03 00 00 +R 00 00 01 00 +T 7D 03 00 00 DD 34 EA 20 03 DD 34 EB +R 00 00 01 00 +T 85 03 00 00 +R 00 00 01 00 +T 85 03 00 00 DD 34 E4 20 03 DD 34 E5 +R 00 00 01 00 +T 8D 03 00 00 +R 00 00 01 00 +T 8D 03 00 00 C3 97 02 00 00 +R 00 00 01 00 00 05 01 00 +T 90 03 00 00 +R 00 00 01 00 +T 90 03 00 00 DD 34 E2 20 03 DD 34 E3 +R 00 00 01 00 +T 98 03 00 00 +R 00 00 01 00 +T 98 03 00 00 C3 45 02 00 00 +R 00 00 01 00 00 05 01 00 +T 9B 03 00 00 +R 00 00 01 00 +T 9B 03 00 00 21 04 00 DD 4E F4 DD 46 F5 09 46 +R 00 00 01 00 +T A6 03 00 00 23 66 68 29 29 29 DD 75 E6 DD 74 +R 00 00 01 00 +T B1 03 00 00 E7 DD 36 E4 01 DD 36 E5 00 +R 00 00 01 00 +T BA 03 00 00 +R 00 00 01 00 +T BA 03 00 00 DD 4E E6 DD 46 E7 DD 6E E4 DD 66 +R 00 00 01 00 +T C5 03 00 00 E5 A7 ED 42 D2 8D 06 00 00 +R 00 00 01 00 00 09 01 00 +T CC 03 00 00 +R 00 00 01 00 +T CC 03 00 00 21 12 00 DD 4E F4 DD 46 F5 09 5E +R 00 00 01 00 +T D7 03 00 00 23 56 D5 21 10 00 09 4E 23 46 C5 +R 00 00 01 00 +T E2 03 00 00 21 00 00 E5 21 01 00 E5 DD 4E E4 +R 00 00 01 00 +T ED 03 00 00 DD 46 E5 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T F7 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T FC 03 00 00 00 00 00 00 F1 F1 F1 F1 DD 75 E4 +R 00 00 01 00 02 04 00 00 +T 05 04 00 00 DD 74 E5 7D A4 3C 20 03 +R 00 00 01 00 +T 0D 04 00 00 +R 00 00 01 00 +T 0D 04 00 00 C3 A1 06 00 00 +R 00 00 01 00 00 05 01 00 +T 10 04 00 00 +R 00 00 01 00 +T 10 04 00 00 01 01 00 DD 6E E4 DD 66 E5 A7 ED +R 00 00 01 00 +T 1B 04 00 00 42 38 11 DD 4E E6 DD 46 E7 DD 6E +R 00 00 01 00 +T 26 04 00 00 E4 DD 66 E5 A7 ED 42 38 03 +R 00 00 01 00 +T 2F 04 00 00 +R 00 00 01 00 +T 2F 04 00 00 +R 00 00 01 00 +T 2F 04 00 00 +R 00 00 01 00 +T 2F 04 00 00 C3 8D 06 00 00 +R 00 00 01 00 00 05 01 00 +T 32 04 00 00 +R 00 00 01 00 +T 32 04 00 00 DD 4E E4 DD 46 E5 DD 5E F6 DD 56 +R 00 00 01 00 +T 3D 04 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 11 00 02 0B 11 00 +T 43 04 00 00 CD 00 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 05 00 00 +T 4C 04 00 00 7D B4 20 03 +R 00 00 01 00 +T 50 04 00 00 +R 00 00 01 00 +T 50 04 00 00 C3 A1 06 00 00 +R 00 00 01 00 00 05 01 00 +T 53 04 00 00 +R 00 00 01 00 +T 53 04 00 00 21 0A 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 5E 04 00 00 E6 00 4F 23 7E E6 F0 47 DD 71 FA +R 00 00 01 00 +T 69 04 00 00 DD 70 FB 3E A0 A8 B1 28 43 3E 80 +R 00 00 01 00 +T 74 04 00 00 DD AE FB DD B6 FA 28 39 3E 40 DD +R 00 00 01 00 +T 7F 04 00 00 AE FB DD B6 FA 28 2F 3E 90 DD AE +R 00 00 01 00 +T 8A 04 00 00 FB DD B6 FA 28 25 3E 60 DD AE FB +R 00 00 01 00 +T 95 04 00 00 DD B6 FA 28 1B 3E 20 DD AE FB DD +R 00 00 01 00 +T A0 04 00 00 B6 FA 28 11 +R 00 00 01 00 +T A4 04 00 00 +R 00 00 01 00 +T A4 04 00 00 +R 00 00 01 00 +T A4 04 00 00 +R 00 00 01 00 +T A4 04 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T AC 04 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T B3 04 00 00 82 06 00 00 +R 00 00 01 00 00 04 01 00 +T B5 04 00 00 +R 00 00 01 00 +T B5 04 00 00 3E A0 DD AE FB DD B6 FA 28 1F 3E +R 00 00 01 00 +T C0 04 00 00 80 DD AE FB DD B6 FA 28 15 3E 40 +R 00 00 01 00 +T CB 04 00 00 DD AE FB DD B6 FA 28 0B 3E 90 DD +R 00 00 01 00 +T D6 04 00 00 AE FB DD B6 FA C2 74 06 00 00 +R 00 00 01 00 00 0A 01 00 +T DE 04 00 00 +R 00 00 01 00 +T DE 04 00 00 +R 00 00 01 00 +T DE 04 00 00 +R 00 00 01 00 +T DE 04 00 00 AF DD 77 FE DD 77 FF DD 6E F8 DD +R 00 00 01 00 +T E9 04 00 00 66 F9 DD 4E 02 DD 46 03 A7 ED 42 +R 00 00 01 00 +T F4 04 00 00 20 05 21 02 00 18 12 +R 00 00 01 00 +T FB 04 00 00 +R 00 00 01 00 +T FB 04 00 00 3E A0 DD AE FB DD B6 FA 20 04 2E +R 00 00 01 00 +T 06 05 00 00 01 18 02 +R 00 00 01 00 +T 09 05 00 00 +R 00 00 01 00 +T 09 05 00 00 2E 00 +R 00 00 01 00 +T 0B 05 00 00 +R 00 00 01 00 +T 0B 05 00 00 26 00 +R 00 00 01 00 +T 0D 05 00 00 +R 00 00 01 00 +T 0D 05 00 00 DD 75 FC DD 74 FD 3E 01 AD B4 20 +R 00 00 01 00 +T 18 05 00 00 05 21 12 00 18 03 +R 00 00 01 00 +T 1E 05 00 00 +R 00 00 01 00 +T 1E 05 00 00 21 00 00 +R 00 00 01 00 +T 21 05 00 00 +R 00 00 01 00 +T 21 05 00 00 DD 75 E2 DD 74 E3 +R 00 00 01 00 +T 27 05 00 00 +R 00 00 01 00 +T 27 05 00 00 DD 4E E2 DD 46 E3 21 13 00 A7 ED +R 00 00 01 00 +T 32 05 00 00 42 DA 74 06 00 00 +R 00 00 01 00 00 06 01 00 +T 36 05 00 00 +R 00 00 01 00 +T 36 05 00 00 3E 12 DD AE E2 DD B6 E3 20 0A +R 00 00 01 00 +T 40 05 00 00 +R 00 00 01 00 +T 40 05 00 00 DD 36 FE 01 DD 36 FF 00 18 12 +R 00 00 01 00 +T 4A 05 00 00 +R 00 00 01 00 +T 4A 05 00 00 3E 13 DD AE E2 DD B6 E3 20 08 +R 00 00 01 00 +T 54 05 00 00 +R 00 00 01 00 +T 54 05 00 00 DD 36 FE 02 DD 36 FF 00 +R 00 00 01 00 +T 5C 05 00 00 +R 00 00 01 00 +T 5C 05 00 00 +R 00 00 01 00 +T 5C 05 00 00 DD 6E E2 DD 66 E3 29 DD 4E F8 DD +R 00 00 01 00 +T 67 05 00 00 46 F9 09 01 22 00 09 46 23 66 68 +R 00 00 01 00 +T 72 05 00 00 DD 75 E8 DD 74 E9 7D B4 CA +R 00 00 01 00 +T 7B 05 00 00 69 06 00 00 +R 00 00 01 00 00 04 01 00 +T 7D 05 00 00 +R 00 00 01 00 +T 7D 05 00 00 DD 6E F2 DD 66 F3 E5 DD 6E F0 DD +R 00 00 01 00 +T 88 05 00 00 66 F1 E5 DD 6E EE DD 66 EF E5 DD +R 00 00 01 00 +T 93 05 00 00 6E FE DD 66 FF E5 DD 6E F8 DD 66 +R 00 00 01 00 +T 9E 05 00 00 F9 23 23 E5 DD 6E E2 DD 66 E3 29 +R 00 00 01 00 +T A9 05 00 00 DD 4E F8 DD 46 F9 09 01 22 00 09 +R 00 00 01 00 +T B4 05 00 00 E5 DD 6E FC DD 66 FD E5 DD 4E 02 +R 00 00 01 00 +T BF 05 00 00 DD 46 03 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T C9 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T CE 05 00 00 00 00 00 00 EB 21 0E 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T D7 05 00 00 DD 75 EA DD 74 EB DD 7E EA DD A6 +R 00 00 01 00 +T E2 05 00 00 EB 3C CA 69 06 00 00 +R 00 00 01 00 00 07 01 00 +T E7 05 00 00 +R 00 00 01 00 +T E7 05 00 00 DD 6E F2 DD 66 F3 E5 DD 6E F0 DD +R 00 00 01 00 +T F2 05 00 00 66 F1 E5 DD 6E EE DD 66 EF E5 DD +R 00 00 01 00 +T FD 05 00 00 6E EA DD 66 EB E5 DD 6E E8 DD 66 +R 00 00 01 00 +T 08 06 00 00 E9 E5 DD 4E 02 DD 46 03 DD 5E F4 +R 00 00 01 00 +T 13 06 00 00 DD 56 F5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 19 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 20 06 00 00 F1 F1 F1 DD 75 E8 DD 74 E9 7D A4 +R 00 00 01 00 +T 2B 06 00 00 3C 20 02 +R 00 00 01 00 +T 2E 06 00 00 +R 00 00 01 00 +T 2E 06 00 00 18 44 +R 00 00 01 00 +T 30 06 00 00 +R 00 00 01 00 +T 30 06 00 00 21 14 00 DD 4E F4 DD 46 F5 09 5E +R 00 00 01 00 +T 3B 06 00 00 23 56 D5 21 12 00 09 4E 23 46 C5 +R 00 00 01 00 +T 46 06 00 00 21 00 00 E5 DD 4E E8 DD 46 E9 DD +R 00 00 01 00 +T 51 06 00 00 5E F6 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 12 00 +T 59 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 60 06 00 00 F1 3E 01 AD B4 28 02 +R 00 00 01 00 +T 67 06 00 00 +R 00 00 01 00 +T 67 06 00 00 18 0B +R 00 00 01 00 +T 69 06 00 00 +R 00 00 01 00 +T 69 06 00 00 +R 00 00 01 00 +T 69 06 00 00 +R 00 00 01 00 +T 69 06 00 00 DD 34 E2 20 03 DD 34 E3 +R 00 00 01 00 +T 71 06 00 00 +R 00 00 01 00 +T 71 06 00 00 C3 27 05 00 00 +R 00 00 01 00 00 05 01 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 7C 06 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 82 06 00 00 +R 00 00 01 00 +T 82 06 00 00 DD 34 E4 20 03 DD 34 E5 +R 00 00 01 00 +T 8A 06 00 00 +R 00 00 01 00 +T 8A 06 00 00 C3 BA 03 00 00 +R 00 00 01 00 00 05 01 00 +T 8D 06 00 00 +R 00 00 01 00 +T 8D 06 00 00 0E 00 DD 5E EE DD 56 EF 3E +R 00 00 01 00 +T 96 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 9B 06 00 00 00 00 00 00 CB 7C 28 68 +R 00 00 01 00 02 04 00 00 +T A1 06 00 00 +R 00 00 01 00 +T A1 06 00 00 +R 00 00 01 00 +T A1 06 00 00 AF DD 77 E2 DD 77 E3 +R 00 00 01 00 +T A8 06 00 00 +R 00 00 01 00 +T A8 06 00 00 DD 4E F0 DD 46 F1 DD 6E E2 DD 66 +R 00 00 01 00 +T B3 06 00 00 E3 A7 ED 42 30 4B +R 00 00 01 00 +T B9 06 00 00 +R 00 00 01 00 +T B9 06 00 00 21 16 00 DD 4E F4 DD 46 F5 09 5E +R 00 00 01 00 +T C4 06 00 00 23 56 D5 21 14 00 09 4E 23 46 C5 +R 00 00 01 00 +T CF 06 00 00 21 00 00 E5 21 20 00 E5 DD 6E E2 +R 00 00 01 00 +T DA 06 00 00 DD 66 E3 29 DD 4E EE DD 46 EF 09 +R 00 00 01 00 +T E5 06 00 00 4E 23 46 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T EF 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T F4 06 00 00 00 00 00 00 F1 F1 F1 F1 DD 34 E2 +R 00 00 01 00 02 04 00 00 +T FD 06 00 00 20 03 DD 34 E3 +R 00 00 01 00 +T 02 07 00 00 +R 00 00 01 00 +T 02 07 00 00 18 A4 +R 00 00 01 00 +T 04 07 00 00 +R 00 00 01 00 +T 04 07 00 00 21 FF FF 18 39 +R 00 00 01 00 +T 09 07 00 00 +R 00 00 01 00 +T 09 07 00 00 21 0A 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 14 07 00 00 21 0A 00 09 7E E6 FF 5F 23 7E E6 +R 00 00 01 00 +T 1F 07 00 00 0F 57 7B F6 00 4F 7A F6 A0 47 E1 +R 00 00 01 00 +T 2A 07 00 00 71 23 70 DD 6E 02 DD 66 03 23 23 +R 00 00 01 00 +T 35 07 00 00 36 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 3A 07 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 40 07 00 00 00 00 +R 00 00 01 00 +T 42 07 00 00 +R 00 00 01 00 +T 42 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/filesys_lib/xip_align_bmap.rel b/src/nos/lib/filesys_lib/xip_align_bmap.rel new file mode 100644 index 00000000..341f7fe0 --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_align_bmap.rel @@ -0,0 +1,257 @@ +XL4 +H 2 areas B global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfind Ref00000000 +S _bfree Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2CB flags 0 +S _xip_align_bmap Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF DD 6E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 66 03 23 23 23 56 23 66 6A DD 75 +R 00 00 01 00 +T 14 00 00 00 F2 DD 74 F3 11 12 00 DD 6E 0A DD +R 00 00 01 00 +T 1F 00 00 00 66 0B A7 ED 52 30 47 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 6E 0A DD 66 0B 29 DD 4E 02 DD +R 00 00 01 00 +T 31 00 00 00 46 03 09 01 22 00 09 46 23 66 68 +R 00 00 01 00 +T 3C 00 00 00 DD 75 FA DD 74 FB 7D B4 20 03 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 C3 B9 01 00 00 +R 00 00 01 00 00 05 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 6E 0A DD 66 0B 29 DD 4E 02 DD +R 00 00 01 00 +T 54 00 00 00 46 03 09 11 22 00 19 DD 5E 04 DD +R 00 00 01 00 +T 5F 00 00 00 56 05 73 23 72 69 60 23 23 36 01 +R 00 00 01 00 +T 6A 00 00 00 C3 3C 02 00 00 +R 00 00 01 00 00 05 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 21 18 00 39 7E D6 12 77 23 7E DE +R 00 00 01 00 +T 78 00 00 00 00 77 AF DD 77 F8 DD 77 F9 DD 36 +R 00 00 01 00 +T 83 00 00 00 F6 02 DD 36 F7 00 01 00 01 DD 6E +R 00 00 01 00 +T 8E 00 00 00 0A DD 66 0B A7 ED 42 38 22 +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 DD 36 F8 08 DD 36 F9 00 21 18 00 +R 00 00 01 00 +T A2 00 00 00 39 7E D6 00 77 23 7E DE 01 77 21 +R 00 00 01 00 +T AD 00 00 00 04 00 39 7E D6 01 77 23 7E DE 00 +R 00 00 01 00 +T B8 00 00 00 77 +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 DD 4E F6 DD 46 F7 21 14 00 A7 ED +R 00 00 01 00 +T C4 00 00 00 42 29 DD 4E 02 DD 46 03 09 01 +R 00 00 01 00 +T CE 00 00 00 22 00 09 46 23 66 68 DD 75 FA DD +R 00 00 01 00 +T D9 00 00 00 74 FB 7D B4 20 10 +R 00 00 01 00 +T DF 00 00 00 +R 00 00 01 00 +T DF 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T E8 00 00 00 2C 23 36 00 C3 B9 01 00 00 +R 00 00 01 00 00 09 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 01 02 80 DD 6E F6 DD 66 F7 3E 80 +R 00 00 01 00 +T FA 00 00 00 AC 67 ED 42 D2 97 01 00 00 +R 00 00 01 00 00 09 01 00 +T 01 01 00 00 +R 00 00 01 00 +T 01 01 00 00 0E 00 C5 DD 4E FA DD 46 FB DD 5E +R 00 00 01 00 +T 0C 01 00 00 F2 DD 56 F3 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 13 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 1A 01 00 00 75 FC DD 74 FD 7D B4 20 03 +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 C3 B9 01 00 00 +R 00 00 01 00 00 05 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 DD 46 F8 DD 5E 0A DD 56 0B CD +R 00 00 01 00 +T 30 01 00 00 00 00 00 00 7B E6 FF 6F 7A E6 00 +R 00 00 01 00 02 04 00 00 +T 39 01 00 00 67 DD 75 F4 DD 74 F5 29 DD 4E FC +R 00 00 01 00 +T 44 01 00 00 DD 46 FD 09 56 23 66 6A DD 75 FA +R 00 00 01 00 +T 4F 01 00 00 DD 74 FB 0E 00 DD 5E FC DD 56 FD +R 00 00 01 00 +T 5A 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 60 01 00 00 00 00 00 00 CB 7C 28 02 +R 00 00 01 00 02 04 01 00 +T 66 01 00 00 +R 00 00 01 00 +T 66 01 00 00 18 51 +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 DD 7E FA DD B6 FB 20 0F +R 00 00 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T 79 01 00 00 2C 23 36 00 18 3A +R 00 00 01 00 +T 7F 01 00 00 +R 00 00 01 00 +T 7F 01 00 00 21 06 00 39 7E D6 08 77 23 7E DE +R 00 00 01 00 +T 8A 01 00 00 00 77 DD 34 F6 20 03 DD 34 F7 +R 00 00 01 00 +T 94 01 00 00 +R 00 00 01 00 +T 94 01 00 00 C3 EF 00 00 00 +R 00 00 01 00 00 05 01 00 +T 97 01 00 00 +R 00 00 01 00 +T 97 01 00 00 0E 00 C5 DD 4E FA DD 46 FB DD 5E +R 00 00 01 00 +T A2 01 00 00 F2 DD 56 F3 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T A9 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 09 00 02 09 01 00 +T B0 01 00 00 75 FC DD 74 FD 7D B4 20 06 +R 00 00 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 21 FF FF C3 C8 02 00 00 +R 00 00 01 00 00 08 01 00 +T BF 01 00 00 +R 00 00 01 00 +T BF 01 00 00 DD 46 F8 DD 5E 0A DD 56 0B CD +R 00 00 01 00 +T C9 01 00 00 00 00 00 00 7B E6 FF 6F 7A E6 00 +R 00 00 01 00 02 04 00 00 +T D2 01 00 00 67 DD 75 F4 DD 74 F5 29 DD 4E FC +R 00 00 01 00 +T DD 01 00 00 DD 46 FD 09 46 23 66 68 DD 75 FA +R 00 00 01 00 +T E8 01 00 00 DD 74 FB 7D B4 20 1F +R 00 00 01 00 +T EF 01 00 00 +R 00 00 01 00 +T EF 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 05 00 +T F8 01 00 00 2C 23 36 00 0E 00 DD 5E FC DD 56 +R 00 00 01 00 +T 03 02 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 09 02 00 00 CD 00 00 00 00 18 AB +R 00 00 01 00 02 05 01 00 +T 0E 02 00 00 +R 00 00 01 00 +T 0E 02 00 00 DD 6E F4 DD 66 F5 29 DD 4E FC DD +R 00 00 01 00 +T 19 02 00 00 46 FD 09 DD 5E 04 DD 56 05 73 23 +R 00 00 01 00 +T 24 02 00 00 72 0E 01 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 2E 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 33 02 00 00 00 00 00 00 CB 7C 28 03 +R 00 00 01 00 02 04 01 00 +T 39 02 00 00 +R 00 00 01 00 +T 39 02 00 00 C3 B9 01 00 00 +R 00 00 01 00 00 05 01 00 +T 3C 02 00 00 +R 00 00 01 00 +T 3C 02 00 00 +R 00 00 01 00 +T 3C 02 00 00 0E 00 C5 DD 4E FA DD 46 FB DD 5E +R 00 00 01 00 +T 47 02 00 00 F2 DD 56 F3 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 4E 02 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 55 02 00 00 75 FC DD 74 FD 7D B4 20 03 +R 00 00 01 00 +T 5E 02 00 00 +R 00 00 01 00 +T 5E 02 00 00 C3 B9 01 00 00 +R 00 00 01 00 00 05 01 00 +T 61 02 00 00 +R 00 00 01 00 +T 61 02 00 00 DD 4E 04 DD 46 05 DD 5E F2 DD 56 +R 00 00 01 00 +T 6C 02 00 00 F3 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 72 02 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 01 00 +T 7B 02 00 00 7D B4 28 19 +R 00 00 01 00 +T 7F 02 00 00 +R 00 00 01 00 +T 7F 02 00 00 21 02 02 DD 4E FE DD 46 FF 09 DD +R 00 00 01 00 +T 8A 02 00 00 5E FA DD 56 FB 73 23 72 21 04 02 +R 00 00 01 00 +T 95 02 00 00 09 36 00 +R 00 00 01 00 +T 98 02 00 00 +R 00 00 01 00 +T 98 02 00 00 21 02 02 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T A3 02 00 00 5E 04 DD 56 05 73 23 72 0E 01 DD +R 00 00 01 00 +T AE 02 00 00 5E FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T B6 02 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 03 00 02 09 01 00 +T BD 02 00 00 28 03 +R 00 00 01 00 +T BF 02 00 00 +R 00 00 01 00 +T BF 02 00 00 C3 B9 01 00 00 +R 00 00 01 00 00 05 01 00 +T C2 02 00 00 +R 00 00 01 00 +T C2 02 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/xip_align_chase.rel b/src/nos/lib/filesys_lib/xip_align_chase.rel new file mode 100644 index 00000000..0fc7b372 --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_align_chase.rel @@ -0,0 +1,161 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _xip_align_reverse Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dprintf Ref00000000 +S _xip_align_bmap Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 173 flags 0 +S _xip_align_chase Def00000000 +A CSTR size 64 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 21 04 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 5E 02 DD 56 03 19 7E 23 66 6F E5 +R 00 00 01 00 +T 14 00 00 00 13 13 EB 5E 23 56 E1 19 EB DD 6E +R 00 00 01 00 +T 1F 00 00 00 0A DD 66 0B A7 ED 52 38 18 21 +R 00 00 01 00 +T 29 00 00 00 06 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 34 00 00 00 46 DD 6E 0A DD 66 0B A7 ED 42 38 +R 00 00 01 00 +T 3F 00 00 00 44 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 03 00 +T 49 00 00 00 2F 23 36 00 DD 6E 0C DD 66 0D E5 +R 00 00 01 00 +T 54 00 00 00 DD 6E 0A DD 66 0B E5 21 05 00 DD +R 00 00 01 00 +T 5F 00 00 00 4E 04 DD 46 05 09 4E 23 46 C5 21 +R 00 00 01 00 +T 6A 00 00 00 00 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 00 04 02 00 +T 72 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 77 00 00 00 00 00 00 00 F1 F1 F1 F1 F1 21 +R 00 00 01 00 02 04 00 00 +T 7F 00 00 00 FF FF C3 70 01 00 00 +R 00 00 01 00 00 07 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 AF 3C CA 70 01 00 00 +R 00 00 01 00 00 07 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 DD 6E 0C DD 66 0D E5 DD 4E 0A DD +R 00 00 01 00 +T 94 00 00 00 46 0B DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 9D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T A2 00 00 00 00 00 00 00 F1 DD 75 0A DD 74 0B +R 00 00 01 00 02 04 00 00 +T AB 00 00 00 7D A4 3C 20 06 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 21 FF FF C3 70 01 00 00 +R 00 00 01 00 00 08 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T C1 00 00 00 23 66 6A E5 03 03 69 60 4E 23 46 +R 00 00 01 00 +T CC 00 00 00 E1 09 4D 44 DD 6E 0A DD 66 0B A7 +R 00 00 01 00 +T D7 00 00 00 ED 42 38 18 21 06 00 DD 4E 02 DD +R 00 00 01 00 +T E2 00 00 00 46 03 09 4E 23 46 DD 6E 0A DD 66 +R 00 00 01 00 +T ED 00 00 00 0B A7 ED 42 38 43 +R 00 00 01 00 +T F3 00 00 00 +R 00 00 01 00 +T F3 00 00 00 +R 00 00 01 00 +T F3 00 00 00 +R 00 00 01 00 +T F3 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 03 00 +T FC 00 00 00 2F 23 36 00 DD 6E 0C DD 66 0D E5 +R 00 00 01 00 +T 07 01 00 00 DD 6E 0A DD 66 0B E5 21 05 00 DD +R 00 00 01 00 +T 12 01 00 00 4E 04 DD 46 05 09 4E 23 46 C5 21 +R 00 00 01 00 +T 1D 01 00 00 32 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 00 04 02 00 +T 25 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 2A 01 00 00 00 00 00 00 F1 F1 F1 F1 F1 21 +R 00 00 01 00 02 04 00 00 +T 32 01 00 00 FF FF 18 3A +R 00 00 01 00 +T 36 01 00 00 +R 00 00 01 00 +T 36 01 00 00 DD 6E 12 DD 66 13 E5 DD 6E 10 DD +R 00 00 01 00 +T 41 01 00 00 66 11 E5 DD 4E 0E DD 46 0F DD 5E +R 00 00 01 00 +T 4C 01 00 00 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 53 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 5A 01 00 00 DD 75 0C DD 74 0D 7D A4 3C 20 08 +R 00 00 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 DD 6E 0A DD 66 0B 18 03 +R 00 00 01 00 +T 6D 01 00 00 +R 00 00 01 00 +T 6D 01 00 00 C3 84 00 00 00 +R 00 00 01 00 00 05 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 78 69 70 5F 61 6C 69 67 6E 5F 63 +R 00 00 02 00 +T 0B 00 00 00 68 61 73 65 28 29 20 31 20 69 6E +R 00 00 02 00 +T 16 00 00 00 6F 20 3D 20 25 64 2C 20 62 6C 6B +R 00 00 02 00 +T 21 00 00 00 20 3D 20 25 64 2C 20 70 6F 73 20 +R 00 00 02 00 +T 2C 00 00 00 3D 20 25 64 0A 00 +R 00 00 02 00 +T 32 00 00 00 +R 00 00 02 00 +T 32 00 00 00 78 69 70 5F 61 6C 69 67 6E 5F 63 +R 00 00 02 00 +T 3D 00 00 00 68 61 73 65 28 29 20 32 20 69 6E +R 00 00 02 00 +T 48 00 00 00 6F 20 3D 20 25 64 2C 20 62 6C 6B +R 00 00 02 00 +T 53 00 00 00 20 3D 20 25 64 2C 20 70 6F 73 20 +R 00 00 02 00 +T 5E 00 00 00 3D 20 25 64 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/xip_align_recurse.rel b/src/nos/lib/filesys_lib/xip_align_recurse.rel new file mode 100644 index 00000000..bd8748c7 --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_align_recurse.rel @@ -0,0 +1,457 @@ +XL4 +H 3 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfind Ref00000000 +S _bfree Ref00000000 +S _xip_find Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _xip_align_reverse Ref00000000 +S _xip_align_chase Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dprintf Ref00000000 +S _xip_set Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4F0 flags 0 +S _xip_align_recurse Def00000000 +A CSTR size 40 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E8 FF DD 6E 0C DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 66 0D 56 23 66 6A DD 75 EE DD 74 +R 00 00 01 00 +T 14 00 00 00 EF 21 04 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 1F 00 00 00 7E 23 66 6F E5 13 13 EB 5E 23 56 +R 00 00 01 00 +T 2A 00 00 00 E1 19 EB DD 6E EE DD 66 EF A7 ED +R 00 00 01 00 +T 35 00 00 00 52 38 18 21 06 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 40 00 00 00 03 09 4E 23 46 DD 6E EE DD 66 EF +R 00 00 01 00 +T 4B 00 00 00 A7 ED 42 38 4D +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 59 00 00 00 2F 23 36 00 DD 6E 0C DD 66 0D E5 +R 00 00 01 00 +T 64 00 00 00 DD 6E 10 DD 66 11 E5 DD 6E EE DD +R 00 00 01 00 +T 6F 00 00 00 66 EF E5 21 05 00 DD 4E 04 DD 46 +R 00 00 01 00 +T 7A 00 00 00 05 09 4E 23 46 C5 21 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 83 00 00 00 E5 21 01 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0C 00 +T 8B 00 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 92 00 00 00 0C 00 39 F9 EB 21 FF FF C3 +R 00 00 01 00 +T 9B 00 00 00 ED 04 00 00 +R 00 00 01 00 00 04 01 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 DD 6E 16 DD 66 17 E5 DD 6E 14 DD +R 00 00 01 00 +T A8 00 00 00 66 15 E5 DD 4E 12 DD 46 13 DD 5E +R 00 00 01 00 +T B3 00 00 00 EE DD 56 EF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T BA 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T C1 00 00 00 DD 75 FD DD 74 FE 7D A4 3C 28 04 +R 00 00 01 00 +T CC 00 00 00 0E 01 18 02 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 0E 00 +R 00 00 01 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 06 00 DD 71 F6 DD 70 F7 79 B0 20 +R 00 00 01 00 +T DD 00 00 00 0E DD 7E 10 DD B6 11 20 06 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 21 FF FF C3 ED 04 00 00 +R 00 00 01 00 00 08 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 21 1C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T F7 00 00 00 23 66 68 DD 75 E8 DD 74 E9 0E 00 +R 00 00 01 00 +T 02 01 00 00 C5 DD 4E EE DD 46 EF EB 3E +R 00 00 01 00 +T 0B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 10 01 00 00 00 00 00 00 F1 DD 75 F2 DD 74 F3 +R 00 00 01 00 02 04 00 00 +T 19 01 00 00 7D B4 20 06 +R 00 00 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 21 FF FF C3 ED 04 00 00 +R 00 00 01 00 00 08 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 DD 7E 10 DD B6 11 CA B2 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 2C 01 00 00 3E 01 DD AE 0A DD B6 0B 20 0F DD +R 00 00 01 00 +T 37 01 00 00 4E 10 DD 46 11 21 01 00 CD +R 00 00 01 00 +T 40 01 00 00 00 00 00 00 D2 B2 03 00 00 +R 00 00 01 00 02 04 0A 00 00 09 01 00 +T 45 01 00 00 +R 00 00 01 00 +T 45 01 00 00 +R 00 00 01 00 +T 45 01 00 00 +R 00 00 01 00 +T 45 01 00 00 +R 00 00 01 00 +T 45 01 00 00 +R 00 00 01 00 +T 45 01 00 00 AF DD 77 EA DD 77 EB +R 00 00 01 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 01 00 81 DD 6E EA DD 66 EB 3E 80 +R 00 00 01 00 +T 57 01 00 00 AC 67 ED 42 D2 B2 03 00 00 +R 00 00 01 00 00 09 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 DD 6E EA DD 66 EB 29 DD 4E F2 DD +R 00 00 01 00 +T 69 01 00 00 46 F3 09 46 23 66 68 DD 75 F0 DD +R 00 00 01 00 +T 74 01 00 00 74 F1 7D B4 CA A7 03 00 00 +R 00 00 01 00 00 09 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 3E 02 DD AE 0A DD B6 0B C2 +R 00 00 01 00 +T 84 01 00 00 57 02 00 00 +R 00 00 01 00 00 04 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 DD 6E F0 DD 66 F1 DD 75 F8 DD 74 +R 00 00 01 00 +T 91 01 00 00 F9 DD 36 FA 00 21 04 02 DD 4E F2 +R 00 00 01 00 +T 9C 01 00 00 DD 46 F3 09 4E DD 5E F2 DD 56 F3 +R 00 00 01 00 +T A7 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T AD 01 00 00 00 00 00 00 CB 7C 28 06 +R 00 00 01 00 02 04 00 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 21 FF FF C3 ED 04 00 00 +R 00 00 01 00 00 08 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 DD 6E 16 DD 66 17 E5 DD 6E 14 DD +R 00 00 01 00 +T C4 01 00 00 66 15 E5 DD 6E 12 DD 66 13 E5 DD +R 00 00 01 00 +T CF 01 00 00 6E 10 DD 66 11 2B E5 21 1A 00 39 +R 00 00 01 00 +T DA 01 00 00 E5 21 1A 00 39 E5 DD 6E 0A DD 66 +R 00 00 01 00 +T E5 01 00 00 0B E5 DD 4E 04 DD 46 05 DD 5E 02 +R 00 00 01 00 +T F0 01 00 00 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 29 08 01 00 +T F6 01 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 00 04 01 00 02 09 00 00 +T FD 01 00 00 0E 00 39 F9 EB DD 75 FB DD 74 FC +R 00 00 01 00 +T 08 02 00 00 0E 00 C5 DD 4E EE DD 46 EF DD 5E +R 00 00 01 00 +T 13 02 00 00 E8 DD 56 E9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 1A 02 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 21 02 00 00 75 F2 DD 74 F3 7D B4 20 06 +R 00 00 01 00 +T 2A 02 00 00 +R 00 00 01 00 +T 2A 02 00 00 21 FF FF C3 ED 04 00 00 +R 00 00 01 00 00 08 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 AF DD B6 FA 28 1F +R 00 00 01 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 DD 6E EA DD 66 EB 29 DD 4E F2 DD +R 00 00 01 00 +T 41 02 00 00 46 F3 09 DD 5E F8 DD 56 F9 73 23 +R 00 00 01 00 +T 4C 02 00 00 72 21 04 02 09 DD 46 FA 70 +R 00 00 01 00 +T 55 02 00 00 +R 00 00 01 00 +T 55 02 00 00 18 59 +R 00 00 01 00 +T 57 02 00 00 +R 00 00 01 00 +T 57 02 00 00 DD 6E 16 DD 66 17 E5 DD 6E 14 DD +R 00 00 01 00 +T 62 02 00 00 66 15 E5 DD 6E 12 DD 66 13 E5 DD +R 00 00 01 00 +T 6D 02 00 00 6E 10 DD 66 11 2B E5 21 04 02 DD +R 00 00 01 00 +T 78 02 00 00 4E F2 DD 46 F3 09 E5 DD 6E EA DD +R 00 00 01 00 +T 83 02 00 00 66 EB 29 09 E5 DD 6E 0A DD 66 0B +R 00 00 01 00 +T 8E 02 00 00 E5 DD 4E 04 DD 46 05 DD 5E 02 DD +R 00 00 01 00 +T 99 02 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 29 07 01 00 +T 9E 02 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 00 04 01 00 02 09 00 00 +T A5 02 00 00 0E 00 39 F9 EB DD 75 FB DD 74 FC +R 00 00 01 00 +T B0 02 00 00 +R 00 00 01 00 +T B0 02 00 00 DD 7E FB DD A6 FC 3C CA +R 00 00 01 00 +T B8 02 00 00 A7 03 00 00 +R 00 00 01 00 00 04 01 00 +T BA 02 00 00 +R 00 00 01 00 +T BA 02 00 00 3E 02 DD AE 0A DD B6 0B 20 23 +R 00 00 01 00 +T C4 02 00 00 +R 00 00 01 00 +T C4 02 00 00 21 04 02 DD 4E F2 DD 46 F3 09 4E +R 00 00 01 00 +T CF 02 00 00 DD 5E F2 DD 56 F3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T D7 02 00 00 21 00 00 00 00 CD 00 00 00 00 CB +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T DE 02 00 00 7C 28 06 +R 00 00 01 00 +T E1 02 00 00 +R 00 00 01 00 +T E1 02 00 00 21 FF FF C3 ED 04 00 00 +R 00 00 01 00 00 08 01 00 +T E7 02 00 00 +R 00 00 01 00 +T E7 02 00 00 +R 00 00 01 00 +T E7 02 00 00 DD 6E 16 DD 66 17 E5 DD 6E 14 DD +R 00 00 01 00 +T F2 02 00 00 66 15 E5 DD 6E 12 DD 66 13 E5 DD +R 00 00 01 00 +T FD 02 00 00 6E FB DD 66 FC E5 DD 6E F0 DD 66 +R 00 00 01 00 +T 08 03 00 00 F1 E5 DD 4E 04 DD 46 05 DD 5E 02 +R 00 00 01 00 +T 13 03 00 00 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 06 00 +T 19 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 20 03 00 00 F1 F1 F1 DD 75 F0 DD 74 F1 3E 02 +R 00 00 01 00 +T 2B 03 00 00 DD AE 0A DD B6 0B 20 28 +R 00 00 01 00 +T 33 03 00 00 +R 00 00 01 00 +T 33 03 00 00 0E 00 C5 DD 4E EE DD 46 EF DD 5E +R 00 00 01 00 +T 3E 03 00 00 E8 DD 56 E9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 45 03 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 4C 03 00 00 75 F2 DD 74 F3 7D B4 20 06 +R 00 00 01 00 +T 55 03 00 00 +R 00 00 01 00 +T 55 03 00 00 21 FF FF C3 ED 04 00 00 +R 00 00 01 00 00 08 01 00 +T 5B 03 00 00 +R 00 00 01 00 +T 5B 03 00 00 +R 00 00 01 00 +T 5B 03 00 00 DD 7E F0 DD A6 F1 3C 20 06 +R 00 00 01 00 +T 64 03 00 00 +R 00 00 01 00 +T 64 03 00 00 21 FF FF C3 ED 04 00 00 +R 00 00 01 00 00 08 01 00 +T 6A 03 00 00 +R 00 00 01 00 +T 6A 03 00 00 21 14 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 75 03 00 00 23 56 D5 21 12 00 09 4E 23 46 C5 +R 00 00 01 00 +T 80 03 00 00 21 00 00 E5 DD 4E F0 DD 46 F1 DD +R 00 00 01 00 +T 8B 03 00 00 5E E8 DD 56 E9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T 93 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 9A 03 00 00 F1 3E 01 AD B4 28 06 +R 00 00 01 00 +T A1 03 00 00 +R 00 00 01 00 +T A1 03 00 00 21 FF FF C3 ED 04 00 00 +R 00 00 01 00 00 08 01 00 +T A7 03 00 00 +R 00 00 01 00 +T A7 03 00 00 +R 00 00 01 00 +T A7 03 00 00 +R 00 00 01 00 +T A7 03 00 00 DD 34 EA 20 03 DD 34 EB +R 00 00 01 00 +T AF 03 00 00 +R 00 00 01 00 +T AF 03 00 00 C3 4C 01 00 00 +R 00 00 01 00 00 05 01 00 +T B2 03 00 00 +R 00 00 01 00 +T B2 03 00 00 +R 00 00 01 00 +T B2 03 00 00 DD 7E F6 DD B6 F7 CA C8 04 00 00 +R 00 00 01 00 00 0B 01 00 +T BB 03 00 00 +R 00 00 01 00 +T BB 03 00 00 21 14 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T C6 03 00 00 23 56 D5 21 12 00 09 5E 23 56 D5 +R 00 00 01 00 +T D1 03 00 00 21 01 00 E5 21 00 00 E5 01 00 00 +R 00 00 01 00 +T DC 03 00 00 DD 5E E8 DD 56 E9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T E4 03 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T EB 03 00 00 F1 F1 F1 DD 75 F0 DD 74 F1 21 +R 00 00 01 00 +T F5 03 00 00 04 00 DD 4E 02 DD 46 03 09 56 23 +R 00 00 01 00 +T 00 04 00 00 66 6A E5 03 03 69 60 4E 23 46 E1 +R 00 00 01 00 +T 0B 04 00 00 09 4D 44 DD 6E F0 DD 66 F1 A7 ED +R 00 00 01 00 +T 16 04 00 00 42 38 18 21 06 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 21 04 00 00 03 09 4E 23 46 DD 6E F0 DD 66 F1 +R 00 00 01 00 +T 2C 04 00 00 A7 ED 42 38 13 +R 00 00 01 00 +T 31 04 00 00 +R 00 00 01 00 +T 31 04 00 00 +R 00 00 01 00 +T 31 04 00 00 +R 00 00 01 00 +T 31 04 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 07 00 +T 3A 04 00 00 1C 23 36 00 21 FF FF C3 +R 00 00 01 00 +T 42 04 00 00 ED 04 00 00 +R 00 00 01 00 00 04 01 00 +T 44 04 00 00 +R 00 00 01 00 +T 44 04 00 00 DD 6E F0 DD 66 F1 E5 DD 6E 0C DD +R 00 00 01 00 +T 4F 04 00 00 66 0D C1 71 23 70 DD 6E 0E DD 66 +R 00 00 01 00 +T 5A 04 00 00 0F 36 01 DD 4E F0 DD 46 F1 DD 5E +R 00 00 01 00 +T 65 04 00 00 E8 DD 56 E9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 6C 04 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 73 04 00 00 F4 DD 74 F5 7D B4 28 19 +R 00 00 01 00 +T 7B 04 00 00 +R 00 00 01 00 +T 7B 04 00 00 21 02 02 DD 4E F4 DD 46 F5 09 DD +R 00 00 01 00 +T 86 04 00 00 5E EE DD 56 EF 73 23 72 21 04 02 +R 00 00 01 00 +T 91 04 00 00 09 36 00 +R 00 00 01 00 +T 94 04 00 00 +R 00 00 01 00 +T 94 04 00 00 21 02 02 DD 4E F2 DD 46 F3 09 DD +R 00 00 01 00 +T 9F 04 00 00 5E F0 DD 56 F1 73 23 72 0E 02 DD +R 00 00 01 00 +T AA 04 00 00 5E F2 DD 56 F3 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T B2 04 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 02 00 02 09 00 00 +T B9 04 00 00 28 05 +R 00 00 01 00 +T BB 04 00 00 +R 00 00 01 00 +T BB 04 00 00 21 FF FF 18 2D +R 00 00 01 00 +T C0 04 00 00 +R 00 00 01 00 +T C0 04 00 00 DD 6E FD DD 66 FE 18 25 +R 00 00 01 00 +T C8 04 00 00 +R 00 00 01 00 +T C8 04 00 00 21 04 02 DD 4E F2 DD 46 F3 09 4E +R 00 00 01 00 +T D3 04 00 00 DD 5E F2 DD 56 F3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T DB 04 00 00 21 00 00 00 00 CD 00 00 00 00 CB +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T E2 04 00 00 7C 28 05 +R 00 00 01 00 +T E5 04 00 00 +R 00 00 01 00 +T E5 04 00 00 21 FF FF 18 03 +R 00 00 01 00 +T EA 04 00 00 +R 00 00 01 00 +T EA 04 00 00 21 FF FF +R 00 00 01 00 +T ED 04 00 00 +R 00 00 01 00 +T ED 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 78 69 70 5F 61 6C 69 67 6E 5F 72 +R 00 00 02 00 +T 0B 00 00 00 65 63 75 72 73 65 28 29 20 69 6E +R 00 00 02 00 +T 16 00 00 00 6F 20 3D 20 25 64 2C 20 62 6C 6B +R 00 00 02 00 +T 21 00 00 00 20 3D 20 25 64 2C 20 69 6E 64 20 +R 00 00 02 00 +T 2C 00 00 00 3D 20 25 64 2C 20 70 61 72 20 3D +R 00 00 02 00 +T 37 00 00 00 20 30 78 25 30 34 78 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/filesys_lib/xip_align_reverse.rel b/src/nos/lib/filesys_lib/xip_align_reverse.rel new file mode 100644 index 00000000..8a4a55b9 --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_align_reverse.rel @@ -0,0 +1,83 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _min_int Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D4 flags 0 +S _xip_align_reverse Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FE +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD 77 FF AF DD 77 FA DD 77 FB +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 DD 4E 0A DD 46 0B DD 6E FA DD 66 +R 00 00 01 00 +T 1E 00 00 00 FB A7 ED 42 D2 CE 00 00 00 +R 00 00 01 00 00 09 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 01 20 00 DD 5E FE DD 56 FF DD 6E +R 00 00 01 00 +T 30 00 00 00 0C DD 66 0D A7 ED 52 EB 3E +R 00 00 01 00 +T 39 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 3E 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 00 00 +T 47 00 00 00 6E FA DD 66 FB 29 DD 4E 04 DD 46 +R 00 00 01 00 +T 52 00 00 00 05 09 4E 23 46 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 5D 00 00 00 A7 ED 42 38 55 DD 6E FA DD 66 FB +R 00 00 01 00 +T 68 00 00 00 29 DD 4E 04 DD 46 05 09 46 23 66 +R 00 00 01 00 +T 73 00 00 00 68 DD 4E FC DD 46 FD 09 4D 44 DD +R 00 00 01 00 +T 7E 00 00 00 6E 02 DD 66 03 A7 ED 42 30 2F +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 6E FA DD 66 FB 29 DD 4E 04 DD +R 00 00 01 00 +T 93 00 00 00 46 05 09 4E 23 46 DD 6E 02 DD 66 +R 00 00 01 00 +T 9E 00 00 00 03 A7 ED 42 4D 44 21 04 00 39 7E +R 00 00 01 00 +T A9 00 00 00 81 77 23 7E 88 77 DD 6E FE DD 66 +R 00 00 01 00 +T B4 00 00 00 FF 18 1A +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 21 04 00 39 7E C6 20 77 30 02 23 +R 00 00 01 00 +T C2 00 00 00 34 +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 C3 13 00 00 00 +R 00 00 01 00 00 05 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 FF FF +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/filesys_lib/xip_examine.rel b/src/nos/lib/filesys_lib/xip_examine.rel new file mode 100644 index 00000000..40af8ada --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_examine.rel @@ -0,0 +1,215 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _udata_p Ref00000000 +S .__.ABS. Def00000000 +S _bmap Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _min_int Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S _zerobuf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24A flags 0 +S _xip_examine Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EE FF 21 16 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 5E 02 DD 56 03 19 4E 23 46 21 +R 00 00 01 00 +T 13 00 00 00 14 00 19 56 23 66 6A A7 ED 42 38 +R 00 00 01 00 +T 1E 00 00 00 13 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 02 00 +T 28 00 00 00 2E 23 36 00 21 00 00 C3 +R 00 00 01 00 +T 30 00 00 00 47 02 00 00 +R 00 00 01 00 00 04 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 0A 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 3D 00 00 00 E6 00 4F 23 7E E6 F0 47 3E 80 A8 +R 00 00 01 00 +T 48 00 00 00 B1 20 13 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 02 00 +T 54 00 00 00 2B 23 36 00 21 00 00 C3 +R 00 00 01 00 +T 5C 00 00 00 47 02 00 00 +R 00 00 01 00 00 04 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 0A 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 69 00 00 00 E6 00 4F 23 7E E6 F0 47 3E A0 A8 +R 00 00 01 00 +T 74 00 00 00 B1 28 13 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 02 00 +T 80 00 00 00 2D 23 36 00 21 00 00 C3 +R 00 00 01 00 +T 88 00 00 00 47 02 00 00 +R 00 00 01 00 00 04 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 21 00 00 E5 21 FF 3F E5 DD 6E 0A +R 00 00 01 00 +T 95 00 00 00 DD 66 0B C1 09 EB DD 6E 0C DD 66 +R 00 00 01 00 +T A0 00 00 00 0D C1 ED 4A 4D 44 EB 3E 0E CD +R 00 00 01 00 +T AA 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 4D +R 00 00 01 00 02 04 08 00 +T B3 00 00 00 44 21 00 01 A7 ED 42 30 13 +R 00 00 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 02 00 +T C5 00 00 00 1C 23 36 00 21 00 00 C3 +R 00 00 01 00 +T CD 00 00 00 47 02 00 00 +R 00 00 01 00 00 04 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 1E 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T D4 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T DB 00 00 00 FA DD 74 FB 21 00 00 E5 21 FF 01 +R 00 00 01 00 +T E6 00 00 00 E5 DD 6E 0A DD 66 0B C1 09 EB DD +R 00 00 01 00 +T F1 00 00 00 6E 0C DD 66 0D C1 ED 4A 4D 44 EB +R 00 00 01 00 +T FC 00 00 00 3E 09 CD 00 00 00 00 DD 75 FE DD +R 00 00 01 00 02 07 08 00 +T 05 01 00 00 74 FF AF DD 77 F6 DD 77 F7 AF DD +R 00 00 01 00 +T 10 01 00 00 77 EE DD 77 EF +R 00 00 01 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 DD 4E FC DD 46 FD DD 6E EE DD 66 +R 00 00 01 00 +T 20 01 00 00 EF A7 ED 42 D2 1F 02 00 00 +R 00 00 01 00 00 09 01 00 +T 27 01 00 00 +R 00 00 01 00 +T 27 01 00 00 01 20 00 DD 5E F6 DD 56 F7 DD 6E +R 00 00 01 00 +T 32 01 00 00 FE DD 66 FF A7 ED 52 EB 3E +R 00 00 01 00 +T 3B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 40 01 00 00 00 00 00 00 DD 75 F2 DD 74 F3 0E +R 00 00 01 00 02 04 00 00 +T 49 01 00 00 01 C5 DD 4E F6 DD 46 F7 DD 5E 04 +R 00 00 01 00 +T 54 01 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 5A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 61 01 00 00 75 F4 DD 74 F5 7D E6 07 20 09 DD +R 00 00 01 00 +T 6C 01 00 00 7E F4 DD A6 F5 3C 20 13 +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 02 00 +T 7D 01 00 00 2B 23 36 00 21 00 00 C3 +R 00 00 01 00 +T 85 01 00 00 47 02 00 00 +R 00 00 01 00 00 04 01 00 +T 87 01 00 00 +R 00 00 01 00 +T 87 01 00 00 DD 6E EE DD 66 EF 29 DD 4E FA DD +R 00 00 01 00 +T 92 01 00 00 46 FB 09 DD 4E F4 DD 46 F5 71 23 +R 00 00 01 00 +T 9D 01 00 00 70 DD 34 F6 20 03 DD 34 F7 +R 00 00 01 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 DD 36 F0 01 DD 36 F1 00 +R 00 00 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 DD 4E F2 DD 46 F3 DD 6E F0 DD 66 +R 00 00 01 00 +T B9 01 00 00 F1 A7 ED 42 30 55 +R 00 00 01 00 +T BF 01 00 00 +R 00 00 01 00 +T BF 01 00 00 DD 34 F4 20 03 DD 34 F5 +R 00 00 01 00 +T C7 01 00 00 +R 00 00 01 00 +T C7 01 00 00 0E 01 C5 DD 4E F6 DD 46 F7 DD 5E +R 00 00 01 00 +T D2 01 00 00 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T D9 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 04 00 02 09 00 00 +T E0 01 00 00 75 F8 DD 74 F9 DD 4E F4 DD 46 F5 +R 00 00 01 00 +T EB 01 00 00 A7 ED 42 28 12 +R 00 00 01 00 +T F0 01 00 00 +R 00 00 01 00 +T F0 01 00 00 21 08 00 ED 4B 00 00 00 00 09 36 +R 00 00 01 00 02 09 02 00 +T F9 01 00 00 2B 23 36 00 21 00 00 18 45 +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 DD 34 F6 20 03 DD 34 F7 +R 00 00 01 00 +T 0A 02 00 00 +R 00 00 01 00 +T 0A 02 00 00 DD 34 F0 20 03 DD 34 F1 +R 00 00 01 00 +T 12 02 00 00 +R 00 00 01 00 +T 12 02 00 00 18 9A +R 00 00 01 00 +T 14 02 00 00 +R 00 00 01 00 +T 14 02 00 00 DD 34 EE 20 03 DD 34 EF +R 00 00 01 00 +T 1C 02 00 00 +R 00 00 01 00 +T 1C 02 00 00 C3 15 01 00 00 +R 00 00 01 00 00 05 01 00 +T 1F 02 00 00 +R 00 00 01 00 +T 1F 02 00 00 DD 6E FC DD 66 FD E5 DD 6E 0E DD +R 00 00 01 00 +T 2A 02 00 00 66 0F C1 71 23 70 DD 6E FE DD 66 +R 00 00 01 00 +T 35 02 00 00 FF E5 DD 6E 10 DD 66 11 C1 71 23 +R 00 00 01 00 +T 40 02 00 00 70 DD 6E FA DD 66 FB +R 00 00 01 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/filesys_lib/xip_find.rel b/src/nos/lib/filesys_lib/xip_find.rel new file mode 100644 index 00000000..a5e8b2f5 --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_find.rel @@ -0,0 +1,211 @@ +XL4 +H 2 areas B global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?C_LSH_L01 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _min_int Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F3 flags 0 +S _xip_find Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF DD 7E 0A DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 B6 0B 28 03 AF 18 02 +R 00 00 01 00 +T 10 00 00 00 +R 00 00 01 00 +T 10 00 00 00 3E FF +R 00 00 01 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 DD 77 F8 DD 7E 04 E6 07 47 3E 01 +R 00 00 01 00 +T 1D 00 00 00 CD 00 00 00 00 C6 FF 2F DD 77 F3 +R 00 00 01 00 02 05 04 00 +T 26 00 00 00 06 03 DD 5E 04 DD 56 05 CD +R 00 00 01 00 +T 2F 00 00 00 00 00 00 00 DD 6E 0E DD 66 0F 19 +R 00 00 01 00 02 04 00 00 +T 38 00 00 00 DD 75 FB DD 74 FC +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 DD 4E 10 DD 46 11 DD 6E FB DD 66 +R 00 00 01 00 +T 49 00 00 00 FC A7 ED 42 D2 D8 01 00 00 +R 00 00 01 00 00 09 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 DD 4E 10 DD 46 11 DD 6E FB DD 66 +R 00 00 01 00 +T 5B 00 00 00 FC 3E 02 84 67 7D E6 00 5F 7C E6 +R 00 00 01 00 +T 66 00 00 00 FE 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T 6B 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 72 00 00 00 FD DD 74 FE 0E 00 C5 06 09 DD 5E +R 00 00 01 00 +T 7D 00 00 00 FB DD 56 FC CD 00 00 00 00 4B 42 +R 00 00 01 00 02 09 00 00 +T 86 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 8E 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 95 00 00 00 DD 75 F4 DD 74 F5 7D B4 20 06 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 FF FF C3 F0 01 00 00 +R 00 00 01 00 00 08 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 DD 7E FB E6 FF 6F DD 7E FC E6 01 +R 00 00 01 00 +T B0 00 00 00 67 DD 4E F4 DD 46 F5 09 DD 75 F6 +R 00 00 01 00 +T BB 00 00 00 DD 74 F7 DD 6E FB DD 66 FC DD 75 +R 00 00 01 00 +T C6 00 00 00 F9 DD 74 FA +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 DD 4E FD DD 46 FE DD 6E F9 DD 66 +R 00 00 01 00 +T D5 00 00 00 FA A7 ED 42 D2 B0 01 00 00 +R 00 00 01 00 00 09 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 DD 6E F6 DD 66 F7 7E DD AE F8 DD +R 00 00 01 00 +T E7 00 00 00 A6 F3 DD 77 F2 DD 36 F3 FF B7 CA +R 00 00 01 00 +T F2 00 00 00 9D 01 00 00 +R 00 00 01 00 00 04 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 DD 4E 0E DD 46 0F DD 6E F9 DD 66 +R 00 00 01 00 +T FF 00 00 00 FA A7 ED 42 29 29 29 DD 75 04 DD +R 00 00 01 00 +T 0A 01 00 00 74 05 AF DD 77 F9 DD 77 FA +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 01 07 00 DD 6E F9 DD 66 FA A7 ED +R 00 00 01 00 +T 1E 01 00 00 42 30 19 +R 00 00 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 DD 46 F9 3E 01 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 04 00 +T 2A 01 00 00 A6 F2 28 02 +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 18 0A +R 00 00 01 00 +T 30 01 00 00 +R 00 00 01 00 +T 30 01 00 00 DD 34 F9 20 03 DD 34 FA +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 18 D9 +R 00 00 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 21 12 00 39 7E DD 86 F9 77 23 7E +R 00 00 01 00 +T 45 01 00 00 DD 8E FA 77 DD 7E 0C DD B6 0D 28 +R 00 00 01 00 +T 50 01 00 00 2B +R 00 00 01 00 +T 51 01 00 00 +R 00 00 01 00 +T 51 01 00 00 DD 6E F6 DD 66 F7 DD 46 F9 3E 01 +R 00 00 01 00 +T 5C 01 00 00 CD 00 00 00 00 AE 77 0E 01 DD 5E +R 00 00 01 00 02 05 04 00 +T 65 01 00 00 F4 DD 56 F5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 6C 01 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 73 01 00 00 28 05 +R 00 00 01 00 +T 75 01 00 00 +R 00 00 01 00 +T 75 01 00 00 21 FF FF 18 76 +R 00 00 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 18 19 +R 00 00 01 00 +T 7C 01 00 00 +R 00 00 01 00 +T 7C 01 00 00 0E 00 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 85 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 8A 01 00 00 00 00 00 00 CB 7C 28 05 +R 00 00 01 00 02 04 01 00 +T 90 01 00 00 +R 00 00 01 00 +T 90 01 00 00 21 FF FF 18 5B +R 00 00 01 00 +T 95 01 00 00 +R 00 00 01 00 +T 95 01 00 00 +R 00 00 01 00 +T 95 01 00 00 DD 6E 04 DD 66 05 18 53 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 DD 34 F6 20 03 DD 34 F7 +R 00 00 01 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 DD 34 F9 20 03 DD 34 FA +R 00 00 01 00 +T AD 01 00 00 +R 00 00 01 00 +T AD 01 00 00 C3 CA 00 00 00 +R 00 00 01 00 00 05 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 0E 00 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T B9 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T BE 01 00 00 00 00 00 00 CB 7C 28 05 +R 00 00 01 00 02 04 01 00 +T C4 01 00 00 +R 00 00 01 00 +T C4 01 00 00 21 FF FF 18 27 +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 DD 6E FD DD 66 FE DD 75 FB DD 74 +R 00 00 01 00 +T D4 01 00 00 FC C3 3E 00 00 00 +R 00 00 01 00 00 06 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 DD 4E 0E DD 46 0F DD 6E FB DD 66 +R 00 00 01 00 +T E3 01 00 00 FC A7 ED 42 29 29 29 DD 75 04 DD +R 00 00 01 00 +T EE 01 00 00 74 05 +R 00 00 01 00 +T F0 01 00 00 +R 00 00 01 00 +T F0 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/xip_get.rel b/src/nos/lib/filesys_lib/xip_get.rel new file mode 100644 index 00000000..d9ccaf65 --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_get.rel @@ -0,0 +1,84 @@ +XL4 +H 2 areas A global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BD flags 0 +S _xip_get Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 06 03 DD 5E +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 04 DD 56 05 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 09 00 00 +T 12 00 00 00 0A DD 66 0B 19 DD 75 FA DD 74 FB +R 00 00 01 00 +T 1D 00 00 00 DD 4E 0C DD 46 0D A7 ED 42 38 06 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 FF FF C3 BA 00 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 7E 04 E6 07 47 11 01 00 CD +R 00 00 01 00 +T 38 00 00 00 00 00 00 00 DD 73 F8 DD 72 F9 0E +R 00 00 01 00 02 04 05 00 +T 41 00 00 00 00 C5 06 09 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 4C 00 00 00 00 00 00 00 4B 42 DD 5E 02 DD 56 +R 00 00 01 00 02 04 00 00 +T 55 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 5B 00 00 00 CD 00 00 00 00 F1 DD 75 FC DD 74 +R 00 00 01 00 02 05 01 00 +T 64 00 00 00 FD 7D B4 20 05 +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 21 FF FF 18 4C +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 7E FA E6 FF 6F DD 7E FB E6 01 +R 00 00 01 00 +T 79 00 00 00 67 DD 4E FC DD 46 FD 09 DD 75 FE +R 00 00 01 00 +T 84 00 00 00 DD 74 FF 7E DD A6 F8 28 04 0E 01 +R 00 00 01 00 +T 8F 00 00 00 18 02 +R 00 00 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 0E 00 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 06 00 DD 71 F8 DD 70 F9 0E 00 DD +R 00 00 01 00 +T 9E 00 00 00 5E FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T A6 00 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 02 00 02 09 01 00 +T AD 00 00 00 28 05 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 21 FF FF 18 06 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/xip_reserve.rel b/src/nos/lib/filesys_lib/xip_reserve.rel new file mode 100644 index 00000000..6f3ba8bc --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_reserve.rel @@ -0,0 +1,190 @@ +XL4 +H 2 areas C global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?C_LSH_L01 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _min_int Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D6 flags 0 +S _xip_reserve Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF 06 03 DD 5E +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 04 DD 56 05 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 09 00 00 +T 12 00 00 00 0E DD 66 0F 19 DD 75 F6 DD 74 F7 +R 00 00 01 00 +T 1D 00 00 00 DD 4E 10 DD 46 11 A7 ED 42 38 06 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 FF FF C3 D3 01 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 0E 00 C5 06 09 DD 5E F6 DD 56 F7 +R 00 00 01 00 +T 39 00 00 00 CD 00 00 00 00 4B 42 DD 5E 02 DD +R 00 00 01 00 02 05 00 00 +T 42 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T 47 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 4E 00 00 00 75 FA DD 74 FB 7D B4 20 06 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 FF FF C3 D3 01 00 00 +R 00 00 01 00 00 08 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 DD 7E F6 E6 FF 6F DD 7E F7 E6 01 +R 00 00 01 00 +T 68 00 00 00 67 DD 4E FA DD 46 FB 09 DD 75 FC +R 00 00 01 00 +T 73 00 00 00 DD 74 FD DD 4E 10 DD 46 11 DD 6E +R 00 00 01 00 +T 7E 00 00 00 F6 DD 66 F7 3E 02 84 67 7D E6 00 +R 00 00 01 00 +T 89 00 00 00 5F 7C E6 FE 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 91 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 98 00 00 00 F8 DD 74 F9 DD 7E 0C DD B6 0D 28 +R 00 00 01 00 +T A3 00 00 00 04 3E FF 18 01 +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 AF +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 DD 77 FE +R 00 00 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 DD 4E 0A DD 46 0B 21 08 00 CD +R 00 00 01 00 +T B6 00 00 00 00 00 00 00 D2 89 01 00 00 +R 00 00 01 00 02 04 08 00 00 09 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T C6 00 00 00 74 FD 2B DD 46 FE 70 DD 34 F6 20 +R 00 00 01 00 +T D1 00 00 00 03 DD 34 F7 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 DD 4E F8 DD 46 F9 DD 6E F6 DD 66 +R 00 00 01 00 +T E0 00 00 00 F7 A7 ED 42 DA 79 01 00 00 +R 00 00 01 00 00 09 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 DD 4E 10 DD 46 11 DD 6E F6 DD 66 +R 00 00 01 00 +T F2 00 00 00 F7 A7 ED 42 38 06 +R 00 00 01 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 21 FF FF C3 D3 01 00 00 +R 00 00 01 00 00 08 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 0E 01 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 07 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 0C 01 00 00 00 00 00 00 CB 7C 28 06 +R 00 00 01 00 02 04 01 00 +T 12 01 00 00 +R 00 00 01 00 +T 12 01 00 00 21 FF FF C3 D3 01 00 00 +R 00 00 01 00 00 08 01 00 +T 18 01 00 00 +R 00 00 01 00 +T 18 01 00 00 0E 00 C5 06 09 DD 5E F6 DD 56 F7 +R 00 00 01 00 +T 23 01 00 00 CD 00 00 00 00 4B 42 DD 5E 02 DD +R 00 00 01 00 02 05 00 00 +T 2C 01 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T 31 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 38 01 00 00 75 FA DD 74 FB 7D B4 20 06 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 21 FF FF C3 D3 01 00 00 +R 00 00 01 00 00 08 01 00 +T 47 01 00 00 +R 00 00 01 00 +T 47 01 00 00 DD 6E FA DD 66 FB DD 75 FC DD 74 +R 00 00 01 00 +T 52 01 00 00 FD DD 4E 10 DD 46 11 DD 6E F6 DD +R 00 00 01 00 +T 5D 01 00 00 66 F7 3E 02 84 67 7D E6 00 5F 7C +R 00 00 01 00 +T 68 01 00 00 E6 FE 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 6E 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 75 01 00 00 F8 DD 74 F9 +R 00 00 01 00 +T 79 01 00 00 +R 00 00 01 00 +T 79 01 00 00 21 16 00 39 7E D6 08 77 23 7E DE +R 00 00 01 00 +T 84 01 00 00 00 77 C3 AC 00 00 00 +R 00 00 01 00 00 07 01 00 +T 89 01 00 00 +R 00 00 01 00 +T 89 01 00 00 DD 46 0A 3E 01 CD 00 00 00 00 C6 +R 00 00 01 00 02 0A 04 00 +T 92 01 00 00 FF DD 77 FE DD 7E 0C DD B6 0D 28 +R 00 00 01 00 +T 9D 01 00 00 0D +R 00 00 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 DD 6E FC DD 66 FD 7E DD B6 FE 77 +R 00 00 01 00 +T A9 01 00 00 18 0C +R 00 00 01 00 +T AB 01 00 00 +R 00 00 01 00 +T AB 01 00 00 DD 6E FC DD 66 FD DD 7E FE 2F A6 +R 00 00 01 00 +T B6 01 00 00 77 +R 00 00 01 00 +T B7 01 00 00 +R 00 00 01 00 +T B7 01 00 00 0E 01 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T C0 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T C5 01 00 00 00 00 00 00 CB 7C 28 05 +R 00 00 01 00 02 04 01 00 +T CB 01 00 00 +R 00 00 01 00 +T CB 01 00 00 21 FF FF 18 03 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 21 00 00 +R 00 00 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/xip_search.rel b/src/nos/lib/filesys_lib/xip_search.rel new file mode 100644 index 00000000..fcbcb724 --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_search.rel @@ -0,0 +1,190 @@ +XL4 +H 2 areas E global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S ?L_AND_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_OR_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _min_int Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F8 flags 0 +S _xip_search Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EC FF 11 01 80 69 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 60 3E 80 AC 67 ED 52 38 0E DD 4E +R 00 00 01 00 +T 14 00 00 00 04 DD 46 05 21 20 00 CD +R 00 00 01 00 +T 1C 00 00 00 00 00 00 00 30 06 +R 00 00 01 00 02 04 0A 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 FF FF C3 F5 01 00 00 +R 00 00 01 00 00 08 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 01 20 80 DD 6E 04 DD 66 05 3E 80 +R 00 00 01 00 +T 31 00 00 00 AC 67 ED 42 30 2B +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 7E 04 01 00 00 21 01 00 CD +R 00 00 01 00 +T 41 00 00 00 00 00 00 00 C5 E5 21 FF FF C1 09 +R 00 00 01 00 02 04 07 00 +T 4A 00 00 00 EB 21 FF FF C1 ED 4A 4D 44 EB DD +R 00 00 01 00 +T 55 00 00 00 75 FC DD 74 FD DD 71 FE DD 70 FF +R 00 00 01 00 +T 60 00 00 00 18 0E +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 06 FF DD 70 FC DD 70 FD DD 70 FE +R 00 00 01 00 +T 6D 00 00 00 DD 70 FF +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 06 FF DD 70 F8 DD 70 F9 DD 70 FA +R 00 00 01 00 +T 7B 00 00 00 DD 70 FB DD 6E 0A DD 66 0B DD 75 +R 00 00 01 00 +T 86 00 00 00 F2 DD 74 F3 +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 DD 4E 0C DD 46 0D DD 6E F2 DD 66 +R 00 00 01 00 +T 95 00 00 00 F3 A7 ED 42 D2 F2 01 00 00 +R 00 00 01 00 00 09 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 DD 4E 0C DD 46 0D DD 6E F2 DD 66 +R 00 00 01 00 +T A7 00 00 00 F3 3E 02 84 67 7D E6 00 5F 7C E6 +R 00 00 01 00 +T B2 00 00 00 FE 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T B7 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T BE 00 00 00 F4 DD 74 F5 0E 00 C5 06 09 DD 5E +R 00 00 01 00 +T C9 00 00 00 F2 DD 56 F3 CD 00 00 00 00 4B 42 +R 00 00 01 00 02 09 00 00 +T D2 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T DA 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0C 00 02 0A 01 00 +T E1 00 00 00 DD 75 EC DD 74 ED 7D B4 20 06 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 21 FF FF C3 F5 01 00 00 +R 00 00 01 00 00 08 01 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 DD 7E F2 E6 FF 6F DD 7E F3 E6 01 +R 00 00 01 00 +T FC 00 00 00 67 DD 4E EC DD 46 ED 09 DD 75 EE +R 00 00 01 00 +T 07 01 00 00 DD 74 EF DD 6E F2 DD 66 F3 DD 75 +R 00 00 01 00 +T 12 01 00 00 F0 DD 74 F1 +R 00 00 01 00 +T 16 01 00 00 +R 00 00 01 00 +T 16 01 00 00 DD 4E F4 DD 46 F5 DD 6E F0 DD 66 +R 00 00 01 00 +T 21 01 00 00 F1 A7 ED 42 D2 CA 01 00 00 +R 00 00 01 00 00 09 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 DD 6E EE DD 66 EF 6E 01 00 00 61 +R 00 00 01 00 +T 33 01 00 00 45 2E 00 65 4D C5 E5 DD 4E FA DD +R 00 00 01 00 +T 3E 01 00 00 46 FB DD 6E F8 DD 66 F9 6C 61 48 +R 00 00 01 00 +T 49 01 00 00 06 00 CD 00 00 00 00 DD 75 F8 DD +R 00 00 01 00 02 07 05 00 +T 52 01 00 00 74 F9 DD 71 FA DD 70 FB DD 5E FE +R 00 00 01 00 +T 5D 01 00 00 DD 56 FF D5 DD 5E FC DD 56 FD D5 +R 00 00 01 00 +T 68 01 00 00 CD 00 00 00 00 7D B4 B1 B0 20 3D +R 00 00 01 00 02 05 03 00 +T 71 01 00 00 +R 00 00 01 00 +T 71 01 00 00 DD 4E 0A DD 46 0B DD 6E F0 DD 66 +R 00 00 01 00 +T 7C 01 00 00 F1 A7 ED 42 29 29 29 01 E8 FF 09 +R 00 00 01 00 +T 87 01 00 00 DD 75 F6 DD 74 F7 0E 00 DD 5E EC +R 00 00 01 00 +T 92 01 00 00 DD 56 ED 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 98 01 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 9F 01 00 00 28 05 +R 00 00 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 21 FF FF 18 4F +R 00 00 01 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 DD 6E F6 DD 66 F7 18 47 +R 00 00 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 21 02 00 39 7E C6 01 77 23 7E CE +R 00 00 01 00 +T B9 01 00 00 00 77 21 04 00 39 7E C6 01 77 30 +R 00 00 01 00 +T C4 01 00 00 02 23 34 +R 00 00 01 00 +T C7 01 00 00 +R 00 00 01 00 +T C7 01 00 00 C3 16 01 00 00 +R 00 00 01 00 00 05 01 00 +T CA 01 00 00 +R 00 00 01 00 +T CA 01 00 00 0E 00 DD 5E EC DD 56 ED 3E +R 00 00 01 00 +T D3 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T D8 01 00 00 00 00 00 00 CB 7C 28 05 +R 00 00 01 00 02 04 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 21 FF FF 18 12 +R 00 00 01 00 +T E3 01 00 00 +R 00 00 01 00 +T E3 01 00 00 DD 6E F4 DD 66 F5 DD 75 F2 DD 74 +R 00 00 01 00 +T EE 01 00 00 F3 C3 8A 00 00 00 +R 00 00 01 00 00 06 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 21 FF FF +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/filesys_lib/xip_set.rel b/src/nos/lib/filesys_lib/xip_set.rel new file mode 100644 index 00000000..2d535a0c --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_set.rel @@ -0,0 +1,120 @@ +XL4 +H 2 areas A global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?C_LSH_L01 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _bread Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 107 flags 0 +S _xip_set Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF 06 03 DD 5E +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 04 DD 56 05 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 09 00 00 +T 12 00 00 00 0C DD 66 0D 19 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 1D 00 00 00 DD 4E 0E DD 46 0F A7 ED 42 38 06 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 FF FF C3 04 01 00 00 +R 00 00 01 00 00 08 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 7E 04 E6 07 47 3E 01 CD +R 00 00 01 00 +T 37 00 00 00 00 00 00 00 DD 77 FE 0E 00 C5 06 +R 00 00 01 00 02 04 04 00 +T 40 00 00 00 09 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 48 00 00 00 00 00 00 00 4B 42 DD 5E 02 DD 56 +R 00 00 01 00 02 04 00 00 +T 51 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 57 00 00 00 CD 00 00 00 00 F1 DD 75 FA DD 74 +R 00 00 01 00 02 05 01 00 +T 60 00 00 00 FB 7D B4 20 06 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 FF FF C3 04 01 00 00 +R 00 00 01 00 00 08 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 DD 7E F8 E6 FF 6F DD 7E F9 E6 01 +R 00 00 01 00 +T 76 00 00 00 67 DD 4E FA DD 46 FB 09 DD 75 FC +R 00 00 01 00 +T 81 00 00 00 DD 74 FD DD 7E 0A DD B6 0B 28 04 +R 00 00 01 00 +T 8C 00 00 00 0E 01 18 02 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 0E 00 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 06 00 DD 71 F6 DD 70 F7 DD 6E FC +R 00 00 01 00 +T 9D 00 00 00 DD 66 FD 7E DD A6 FE 28 04 0E 01 +R 00 00 01 00 +T A8 00 00 00 18 02 +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 0E 00 +R 00 00 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 06 00 DD 71 F8 DD 70 F9 DD 6E F6 +R 00 00 01 00 +T B7 00 00 00 DD 66 F7 A7 ED 42 28 26 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 DD 6E FC DD 66 FD 7E DD AE FE 77 +R 00 00 01 00 +T CA 00 00 00 0E 01 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T D3 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T D8 00 00 00 00 00 00 00 CB 7C 28 05 +R 00 00 01 00 02 04 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 21 FF FF 18 21 +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 18 19 +R 00 00 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 0E 00 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T EE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T F3 00 00 00 00 00 00 00 CB 7C 28 05 +R 00 00 01 00 02 04 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 21 FF FF 18 06 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/xip_ualign.rel b/src/nos/lib/filesys_lib/xip_ualign.rel new file mode 100644 index 00000000..59288761 --- /dev/null +++ b/src/nos/lib/filesys_lib/xip_ualign.rel @@ -0,0 +1,130 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bfree Ref00000000 +S _i_sync Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _xip_examine Ref00000000 +S _getfs Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _xip_reserve Ref00000000 +S _min_int Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15C flags 0 +S _xip_ualign Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F0 FF DD 6E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 66 03 23 23 23 46 23 66 68 DD 75 +R 00 00 01 00 +T 14 00 00 00 FE DD 74 FF EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 1C 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 23 00 00 00 FC DD 74 FD 21 0A 00 39 E5 21 +R 00 00 01 00 +T 2D 00 00 00 0A 00 39 E5 DD 6E 0C DD 66 0D E5 +R 00 00 01 00 +T 38 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 02 DD +R 00 00 01 00 +T 43 00 00 00 46 03 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 4C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 51 00 00 00 00 00 00 00 F1 F1 F1 F1 DD 75 F6 +R 00 00 01 00 02 04 00 00 +T 5A 00 00 00 DD 74 F7 7D B4 20 06 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 21 FF FF C3 59 01 00 00 +R 00 00 01 00 00 08 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 AF DD 77 F4 DD 77 F5 AF DD 77 F0 +R 00 00 01 00 +T 72 00 00 00 DD 77 F1 +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 4E F8 DD 46 F9 DD 6E F0 DD 66 +R 00 00 01 00 +T 80 00 00 00 F1 A7 ED 42 D2 0C 01 00 00 +R 00 00 01 00 00 09 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 01 20 00 DD 5E F4 DD 56 F5 DD 6E +R 00 00 01 00 +T 92 00 00 00 FA DD 66 FB A7 ED 52 EB 3E +R 00 00 01 00 +T 9B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T A0 00 00 00 00 00 00 00 DD 75 F2 DD 74 F3 21 +R 00 00 01 00 02 04 00 00 +T A9 00 00 00 16 00 DD 4E FC DD 46 FD 09 5E 23 +R 00 00 01 00 +T B4 00 00 00 56 D5 21 14 00 09 4E 23 46 C5 21 +R 00 00 01 00 +T BF 00 00 00 00 00 E5 DD 6E F2 DD 66 F3 E5 DD +R 00 00 01 00 +T CA 00 00 00 6E F0 DD 66 F1 29 DD 4E F6 DD 46 +R 00 00 01 00 +T D5 00 00 00 F7 09 4E 23 46 DD 5E FE DD 56 FF +R 00 00 01 00 +T E0 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T E6 00 00 00 00 00 00 00 F1 F1 F1 F1 7D B4 28 +R 00 00 01 00 02 04 00 00 +T EF 00 00 00 05 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 21 FF FF 18 64 +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 21 04 00 39 7E C6 20 77 30 02 23 +R 00 00 01 00 +T 00 01 00 00 34 +R 00 00 01 00 +T 01 01 00 00 +R 00 00 01 00 +T 01 01 00 00 DD 34 F0 20 03 DD 34 F1 +R 00 00 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 C3 75 00 00 00 +R 00 00 01 00 00 05 01 00 +T 0C 01 00 00 +R 00 00 01 00 +T 0C 01 00 00 0E 00 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T 15 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 1A 01 00 00 00 00 00 00 CB 7C 28 00 +R 00 00 01 00 02 04 00 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 21 0A 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 2B 01 00 00 21 0A 00 09 7E E6 FF 5F 23 7E E6 +R 00 00 01 00 +T 36 01 00 00 0F 57 7B F6 00 4F 7A F6 80 47 E1 +R 00 00 01 00 +T 41 01 00 00 71 23 70 DD 6E 02 DD 66 03 23 23 +R 00 00 01 00 +T 4C 01 00 00 36 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 51 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 57 01 00 00 00 00 +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/filesys_lib/zerobuf.rel b/src/nos/lib/filesys_lib/zerobuf.rel new file mode 100644 index 00000000..55509102 --- /dev/null +++ b/src/nos/lib/filesys_lib/zerobuf.rel @@ -0,0 +1,61 @@ +XL4 +H 4 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _bufclock Ref00000000 +S _memset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _freebuf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 79 flags 0 +S _zerobuf Def00000000 +A IDATA0 size 2 flags 0 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 3E +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 0E 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 17 00 00 00 B4 28 59 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 6E FE DD 66 FF 3E 02 84 67 36 +R 00 00 01 00 +T 25 00 00 00 FF 23 36 FF 21 02 02 DD 4E FE DD +R 00 00 01 00 +T 30 00 00 00 46 FF 09 ED 5B 00 00 00 00 13 ED +R 00 00 01 00 00 09 02 00 +T 39 00 00 00 53 00 00 00 00 73 23 72 21 05 02 +R 00 00 01 00 00 05 02 00 +T 42 00 00 00 09 36 01 21 07 02 09 ED 5B +R 00 00 01 00 +T 4B 00 00 00 00 00 00 00 13 ED 53 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0B 01 00 +T 52 00 00 00 73 23 72 21 00 02 E5 01 00 00 DD +R 00 00 01 00 +T 5D 00 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 65 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 6C 00 00 00 6E FE DD 66 FF 18 03 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 21 00 00 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/iar.lib b/src/nos/lib/iar.lib new file mode 100644 index 00000000..b17b21b3 --- /dev/null +++ b/src/nos/lib/iar.lib @@ -0,0 +1,400 @@ +iar_lib/BANKCALLDIRECT.rel + ?BANK_CALL_DIRECT_L08 + ?BANK_CALL_DIRECT_EXAF_L08 +iar_lib/BANKLEAVE32.rel + ?BANK_LEAVE_32_L08 +iar_lib/BANKLEAVEDIRECT.rel + ?BANK_FAST_LEAVE_L08 + ?BANK_LEAVE_DIRECT_L08 + leave_entry +iar_lib/BFCANDASG.rel + ?BF_C_ANDASG_L10 +iar_lib/BFCLSHASG.rel + ?BF_C_LSHASG_L10 +iar_lib/BFCMULASG.rel + ?BF_C_MULASG_L10 +iar_lib/BFCORASG.rel + ?BF_C_ORASG_L10 +iar_lib/BFCRETVAL.rel + ?BF_C_RET_VAL_L10 +iar_lib/BFCSHIFTUP.rel + ?BF_C_SHIFT_UP_L10 +iar_lib/BFCXORASG.rel + ?BF_C_XORASG_L10 +iar_lib/BFMASKEDLD.rel + ?BF_MASKED_LD_L10 +iar_lib/BFMASKEDST.rel + ?BF_MASKED_ST_L10 +iar_lib/BFSADDASG.rel + ?BF_S_ADDASG_L10 +iar_lib/BFSANDASG.rel + ?BF_S_ANDASG_L10 +iar_lib/BFSCDIVASG.rel + ?BF_SC_DIVASG_L10 +iar_lib/BFSCEXT.rel + ?BF_SC_EXT_L10 +iar_lib/BFSCLDSHIFTDOWN.rel + ?BF_SC_LD_SHIFT_DOWN_L10 +iar_lib/BFSCMODASG.rel + ?BF_SC_MODASG_L10 +iar_lib/BFSCRSHASG.rel + ?BF_SC_RSHASG_L10 +iar_lib/BFSLSHASG.rel + ?BF_S_LSHASG_L10 +iar_lib/BFSMULASG.rel + ?BF_S_MULASG_L10 +iar_lib/BFSNEGASG.rel + ?BF_S_NEGASG_L10 +iar_lib/BFSORASG.rel + ?BF_S_ORASG_L10 +iar_lib/BFSPOSTDEC.rel + ?BF_S_POST_DEC_L10 +iar_lib/BFSPOSTINC.rel + ?BF_S_POST_INC_L10 +iar_lib/BFSPREDEC.rel + ?BF_S_PRE_DEC_L10 +iar_lib/BFSPREINC.rel + ?BF_S_PRE_INC_L10 +iar_lib/BFSRETVAL.rel + ?BF_S_RET_VAL2_L10 + ?BF_S_RET_VAL_L10 +iar_lib/BFSSDIVASG.rel + ?BF_SS_DIVASG_L10 +iar_lib/BFSSEXT.rel + ?BF_SS_EXT_L10 +iar_lib/BFSSHIFTUP.rel + ?BF_S_SHIFT_UP_L10 +iar_lib/BFSSLDSHIFTDOWN.rel + ?BF_SS_LD_SHIFT_DOWN_L10 +iar_lib/BFSSMODASG.rel + ?BF_SS_MODASG_L10 +iar_lib/BFSSRSHASG.rel + ?BF_SS_RSHASG_L10 +iar_lib/BFSSUBASG.rel + ?BF_S_SUBASG_L10 +iar_lib/BFSXORASG.rel + ?BF_S_XORASG_L10 +iar_lib/BFUCDIVASG.rel + ?BF_UC_DIVASG_L10 +iar_lib/BFUCLDSHIFTDOWN.rel + ?BF_UC_LD_SHIFT_DOWN_L10 +iar_lib/BFUCMODASG.rel + ?BF_UC_MODASG_L10 +iar_lib/BFUCRSHASG.rel + ?BF_UC_RSHASG_L10 +iar_lib/BFUSDIVASG.rel + ?BF_US_DIVASG_L10 +iar_lib/BFUSLDSHIFTDOWN.rel + ?BF_US_LD_SHIFT_DOWN_L10 +iar_lib/BFUSMODASG.rel + ?BF_US_MODASG_L10 +iar_lib/BFUSRSHASG.rel + ?BF_US_RSHASG_L10 +iar_lib/CALLIND.rel + ?CALL_IND_L09 +iar_lib/CDIVMOD.rel + ?C_DIVMOD_L01 +iar_lib/CFINDSIGN.rel + ?C_FIND_SIGN_L01 +iar_lib/CLSH.rel + ?C_LSH_L01 +iar_lib/CLSHASG.rel + ?C_LSHASG_L01 +iar_lib/CMUL.rel + ?C_MUL_L01 +iar_lib/CMULASG.rel + ?C_MULASG_L01 +iar_lib/CSSWITCH.rel + ?C_S_SWITCH_L06 +iar_lib/CVSWITCH.rel + ?C_V_SWITCH_L06 +iar_lib/ENTAUTODIRECT.rel + ?ENT_AUTO_DIRECT_L09 +iar_lib/ENTPARMDIRECT.rel + ?ENT_PARM_DIRECT_L09 +iar_lib/FADDASG.rel + ?F_ADDASG_L04 +iar_lib/FADDSUB.rel + ?F_SUB_L04 + ?F_ADD_L04 +iar_lib/FCMP.rel + ?F_CMP_L04 +iar_lib/FDEC.rel + ?F_DEC_L04 +iar_lib/FDECASG.rel + ?F_DECASG_L04 +iar_lib/FDIV.rel + ?F_DIV_L04 +iar_lib/FDIVASG.rel + ?F_DIVASG_L04 +iar_lib/FENDASG2.rel + ?F_END_ASG2_L04 +iar_lib/FINC.rel + ?F_INC_L04 +iar_lib/FINCASG.rel + ?F_INCASG_L04 +iar_lib/FMUL.rel + ?F_MUL_L04 +iar_lib/FMULASG.rel + ?F_MULASG_L04 +iar_lib/FNEGASG.rel + ?F_NEGASG_L04 +iar_lib/FPACK.rel + ?F_NO_PACK_L04 + ?F_PACK_L04 + ?F_UNDERFLOW2_L04 + ?F_OVERFLOW_L04 + ?F_UNDERFLOW_L04 +iar_lib/FROUND.rel + ?F_ROUND_L04 + ?F_UP_ROUND_L04 +iar_lib/FSUBASG.rel + ?F_SUBASG_L04 +iar_lib/FTOL.rel + ?F_TO_L_L04 +iar_lib/FUNPACK.rel + ?F_UNPACK_L04 +iar_lib/LADDASG.rel + ?L_ADDASG_L03 +iar_lib/LAND.rel + ?L_AND_L03 +iar_lib/LANDASG.rel + ?L_ANDASG_L03 +iar_lib/LDEC.rel + ?L_DEC_L03 +iar_lib/LDECASG.rel + ?L_DECASG_L03 +iar_lib/LDIVMOD.rel + ?L_DIVMOD_L03 +iar_lib/LEAVE32.rel + ?LEAVE_32_L09 +iar_lib/LEAVEDIRECT.rel + ?LEAVE_DIRECT_L09 +iar_lib/LENDASG.rel + ?L_END_ASG_L03 +iar_lib/LENDMULDIVASG.rel + ?L_END_MULDIVASG_L03 +iar_lib/LFINDSIGN.rel + ?L_FIND_SIGN_L03 +iar_lib/LIBVERSION.rel + ?CL64180L_4_06_L00 + ?CL64180B_4_06_L00 +iar_lib/LINC.rel + ?L_INC_L03 +iar_lib/LINCASG.rel + ?L_INCASG_L03 +iar_lib/LLSH.rel + ?L_LSH_L03 +iar_lib/LLSHASG.rel + ?L_LSHASG_L03 +iar_lib/LMUL.rel + ?L_MUL_L03 +iar_lib/LMULASG.rel + ?L_MULASG_L03 +iar_lib/LNEG.rel + ?L_NEG_L03 +iar_lib/LNEGASG.rel + ?L_NEGASG_L03 +iar_lib/LNOT.rel + ?L_NOT_L03 +iar_lib/LNOTASG.rel + ?L_NOTASG_L03 +iar_lib/LOR.rel + ?L_OR_L03 +iar_lib/LORASG.rel + ?L_ORASG_L03 +iar_lib/LSSWITCH.rel + ?L_S_SWITCH_L06 +iar_lib/LSUBASG.rel + ?L_SUBASG_L03 +iar_lib/LTOF.rel + ?SL_TO_F_L04 + ?UL_TO_F_L04 +iar_lib/LVSWITCH.rel + ?L_V_SWITCH_L06 +iar_lib/LXOR.rel + ?L_XOR_L03 +iar_lib/LXORASG.rel + ?L_XORASG_L03 +iar_lib/MEMCMP.rel + ?MEMCMP_L11 +iar_lib/MEMSET.rel + ?MEMSET_L11 +iar_lib/MONITORBANKLEAVE.rel + ?MONITOR_BANK_LEAVE_L09 +iar_lib/MONITORBANKLEAVE32.rel + ?MONITOR_BANK_LEAVE_32_L09 +iar_lib/MONITORBANKLEAVEIX.rel + ?MONITOR_BANK_LEAVE_IX_L09 +iar_lib/MONITORBANKLEAVEPOP.rel + ?MONITOR_BANK_LEAVE_POP_L09 +iar_lib/MONITORLEAVE.rel + ?MONITOR_LEAVE_L09 +iar_lib/MONITORLEAVE32.rel + ?MONITOR_LEAVE_32_L09 +iar_lib/MONITORLEAVEIX.rel + ?MONITOR_LEAVE_IX_L09 +iar_lib/MONITORLEAVEIXPA.rel + ?MONITOR_LEAVE_IX_PA_L09 +iar_lib/MONITORLEAVEPA.rel + ?MONITOR_LEAVE_PA_L09 +iar_lib/MONITORLEAVEPOP.rel + ?MONITOR_LEAVE_POP_L09 +iar_lib/SCDIV.rel + ?SC_DIV_L01 +iar_lib/SCMOD.rel + ?SC_MOD_L01 +iar_lib/SCRSH.rel + ?SC_RSH_L01 +iar_lib/SCRSHASG.rel + ?SC_RSHASG_L01 +iar_lib/SDIVMOD.rel + ?S_DIVMOD_L02 +iar_lib/SFINDSIGN.rel + ?S_FIND_SIGN_L02 +iar_lib/SLCMP.rel + ?SL_CMP_L03 +iar_lib/SLDIV.rel + ?SL_DIV_L03 +iar_lib/SLDIVASG.rel + ?SL_DIVASG_L03 +iar_lib/SLMOD.rel + ?SL_MOD_L03 +iar_lib/SLMODASG.rel + ?SL_MODASG_L03 +iar_lib/SLRSH.rel + ?SL_RSH_L03 +iar_lib/SLRSHASG.rel + ?SL_RSHASG_L03 +iar_lib/SLSH.rel + ?S_LSH_L02 +iar_lib/SLSHASG.rel + ?S_LSHASG_L02 +iar_lib/SLSHASGBCprim.rel + ?S_LSHASG_BC_prim_L12 +iar_lib/SLSHASGDEprim.rel + ?S_LSHASG_DE_prim_L12 +iar_lib/SMUL.rel + ?S_MUL_L02 +iar_lib/SMULASG.rel + ?S_MULASG_L02 +iar_lib/SMULASGBCprim.rel + ?S_MULASG_BC_prim_L12 +iar_lib/SMULASGDEprim.rel + ?S_MULASG_DE_prim_L12 +iar_lib/SMULASGIX.rel + ?S_MULASG_IX_L12 +iar_lib/SMULASGIY.rel + ?S_MULASG_IY_L12 +iar_lib/SSCMP.rel + ?SS_CMP_L02 +iar_lib/SSDIV.rel + ?SS_DIV_L02 +iar_lib/SSDIVASG.rel + ?SS_DIVASG_L02 +iar_lib/SSDIVASGBCprim.rel + ?SS_DIVASG_BC_prim_L12 +iar_lib/SSDIVASGDEprim.rel + ?SS_DIVASG_DE_prim_L12 +iar_lib/SSDIVASGIX.rel + ?SS_DIVASG_IX_L12 +iar_lib/SSDIVASGIY.rel + ?SS_DIVASG_IY_L12 +iar_lib/SSMOD.rel + ?SS_MOD_L02 +iar_lib/SSMODASG.rel + ?SS_MODASG_L02 +iar_lib/SSMODASGBCprim.rel + ?SS_MODASG_BC_prim_L12 +iar_lib/SSMODASGDEprim.rel + ?SS_MODASG_DE_prim_L12 +iar_lib/SSMODASGIX.rel + ?SS_MODASG_IX_L12 +iar_lib/SSMODASGIY.rel + ?SS_MODASG_IY_L12 +iar_lib/SSRSH.rel + ?SS_RSH_L02 +iar_lib/SSRSHASG.rel + ?SS_RSHASG_L02 +iar_lib/SSRSHASGBCprim.rel + ?SS_RSHASG_BC_prim_L12 +iar_lib/SSRSHASGDEprim.rel + ?SS_RSHASG_DE_prim_L12 +iar_lib/SSRSHASGIX.rel + ?SS_RSHASG_IX_L12 +iar_lib/SSRSHASGIY.rel + ?SS_RSHASG_IY_L12 +iar_lib/SSSWITCH.rel + ?S_S_SWITCH_L06 +iar_lib/SSWITCHEND.rel + ?S_SWITCH_END_L06 +iar_lib/STRCAT.rel + ?STRCAT_L11 +iar_lib/STRCHR.rel + ?STRCHR_L11 +iar_lib/STRCMP.rel + ?STRCMP_L11 +iar_lib/STRCPY.rel + ?STRCPY_L11 +iar_lib/STRLEN.rel + ?STRLEN_L11 +iar_lib/SVSWITCH.rel + ?S_V_SWITCH_L06 +iar_lib/UCDIV.rel + ?UC_DIV_L01 +iar_lib/UCMOD.rel + ?UC_MOD_L01 +iar_lib/UCRSH.rel + ?UC_RSH_L01 +iar_lib/UCRSHASG.rel + ?UC_RSHASG_L01 +iar_lib/ULDIV.rel + ?UL_DIV_L03 +iar_lib/ULDIVASG.rel + ?UL_DIVASG_L03 +iar_lib/ULMOD.rel + ?UL_MOD_L03 +iar_lib/ULMODASG.rel + ?UL_MODASG_L03 +iar_lib/ULRSH.rel + ?UL_RSH_L03 +iar_lib/ULRSHASG.rel + ?UL_RSHASG_L03 +iar_lib/USDIV.rel + ?US_DIV_L02 +iar_lib/USDIVASG.rel + ?US_DIVASG_L02 +iar_lib/USDIVASGBCprim.rel + ?US_DIVASG_BC_prim_L12 +iar_lib/USDIVASGDEprim.rel + ?US_DIVASG_DE_prim_L12 +iar_lib/USDIVASGIX.rel + ?US_DIVASG_IX_L12 +iar_lib/USDIVASGIY.rel + ?US_DIVASG_IY_L12 +iar_lib/USMOD.rel + ?US_MOD_L02 +iar_lib/USMODASG.rel + ?US_MODASG_L02 +iar_lib/USMODASGBCprim.rel + ?US_MODASG_BC_prim_L12 +iar_lib/USMODASGDEprim.rel + ?US_MODASG_DE_prim_L12 +iar_lib/USMODASGIX.rel + ?US_MODASG_IX_L12 +iar_lib/USMODASGIY.rel + ?US_MODASG_IY_L12 +iar_lib/USRSH.rel + ?US_RSH_L02 +iar_lib/USRSHASG.rel + ?US_RSHASG_L02 +iar_lib/USRSHASGBCprim.rel + ?US_RSHASG_BC_prim_L12 +iar_lib/USRSHASGDEprim.rel + ?US_RSHASG_DE_prim_L12 +iar_lib/USRSHASGIX.rel + ?US_RSHASG_IX_L12 +iar_lib/USRSHASGIY.rel + ?US_RSHASG_IY_L12 +iar_lib/VSWITCHEND.rel + ?V_SWITCH_END_L06 diff --git a/src/nos/lib/iar_lib/BANKCALLDIRECT.rel b/src/nos/lib/iar_lib/BANKCALLDIRECT.rel new file mode 100644 index 00000000..48d36069 --- /dev/null +++ b/src/nos/lib/iar_lib/BANKCALLDIRECT.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?BANK_CALL_DIRECT_L08 Def00000000 +S ?BANK_CALL_DIRECT_EXAF_L08 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E5 2A FE 10 E5 6F 7E ED 39 38 22 +R 00 00 01 00 +T 0B 00 00 00 FE 10 E1 E3 E9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/BANKLEAVE32.rel b/src/nos/lib/iar_lib/BANKLEAVE32.rel new file mode 100644 index 00000000..b463817d --- /dev/null +++ b/src/nos/lib/iar_lib/BANKLEAVE32.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 11 flags 0 +S ?BANK_LEAVE_32_L08 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 DD F9 DD E1 D1 33 33 E3 7E ED 39 +R 00 00 01 00 +T 0B 00 00 00 38 22 FE 10 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/BANKLEAVEDIRECT.rel b/src/nos/lib/iar_lib/BANKLEAVEDIRECT.rel new file mode 100644 index 00000000..fd89cb87 --- /dev/null +++ b/src/nos/lib/iar_lib/BANKLEAVEDIRECT.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 4 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?BANK_FAST_LEAVE_L08 Def00000006 +S ?BANK_LEAVE_DIRECT_L08 Def00000000 +S leave_entry Def00000007 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 DD F9 DD E1 D1 C1 +R 00 00 01 00 +T 06 00 00 00 +R 00 00 01 00 +T 06 00 00 00 E3 +R 00 00 01 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 7E ED 39 38 22 FE 10 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/BFCANDASG.rel b/src/nos/lib/iar_lib/BFCANDASG.rel new file mode 100644 index 00000000..994c74ea --- /dev/null +++ b/src/nos/lib/iar_lib/BFCANDASG.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_C_RET_VAL_L10 Ref00000000 +S ?BF_C_SHIFT_UP_L10 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 13 flags 0 +S ?BF_C_ANDASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 C5 D5 5E 23 56 23 E3 F5 CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 47 7E A0 C3 +R 00 00 01 00 02 04 01 00 +T 11 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFCLSHASG.rel b/src/nos/lib/iar_lib/BFCLSHASG.rel new file mode 100644 index 00000000..094ebec1 --- /dev/null +++ b/src/nos/lib/iar_lib/BFCLSHASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_C_RET_VAL_L10 Ref00000000 +S ?C_LSH_L01 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 12 flags 0 +S ?BF_C_LSHASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 C5 D5 5E 23 56 23 E3 F5 7E +R 00 00 01 00 +T 0B 00 00 00 A2 CD 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 02 0B 00 00 diff --git a/src/nos/lib/iar_lib/BFCMULASG.rel b/src/nos/lib/iar_lib/BFCMULASG.rel new file mode 100644 index 00000000..8a128a93 --- /dev/null +++ b/src/nos/lib/iar_lib/BFCMULASG.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_C_RET_VAL_L10 Ref00000000 +S ?C_MUL_L01 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 13 flags 0 +S ?BF_C_MULASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 C5 D5 5E 23 56 23 E3 F5 47 +R 00 00 01 00 +T 0B 00 00 00 7E A2 CD 00 00 00 00 C3 +R 00 00 01 00 02 07 01 00 +T 11 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFCORASG.rel b/src/nos/lib/iar_lib/BFCORASG.rel new file mode 100644 index 00000000..ed3d6faa --- /dev/null +++ b/src/nos/lib/iar_lib/BFCORASG.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_C_RET_VAL_L10 Ref00000000 +S ?BF_C_SHIFT_UP_L10 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 13 flags 0 +S ?BF_C_ORASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 C5 D5 5E 23 56 23 E3 F5 CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 47 7E B0 C3 +R 00 00 01 00 02 04 01 00 +T 11 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFCRETVAL.rel b/src/nos/lib/iar_lib/BFCRETVAL.rel new file mode 100644 index 00000000..6c346bc5 --- /dev/null +++ b/src/nos/lib/iar_lib/BFCRETVAL.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 5 global symbols +S ?BF_SC_EXT_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?SC_RSH_L01 Ref00000000 +S ?UC_RSH_L01 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 2E flags 0 +S ?BF_C_RET_VAL_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 A2 4F 7A 2F A6 B1 77 CB 7B 28 1C +R 00 00 01 00 +T 0B 00 00 00 CB 73 C4 00 00 00 00 7B E6 07 47 +R 00 00 01 00 02 07 00 00 +T 14 00 00 00 79 CB 73 28 07 CD 00 00 00 00 D1 +R 00 00 01 00 02 0A 02 00 +T 1D 00 00 00 C3 28 00 00 00 CD 00 00 00 00 D1 +R 00 00 01 00 00 05 01 00 02 0A 03 00 +T 24 00 00 00 C3 28 00 00 00 F1 D1 C1 EB E3 EB +R 00 00 01 00 00 05 01 00 +T 2D 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/BFCSHIFTUP.rel b/src/nos/lib/iar_lib/BFCSHIFTUP.rel new file mode 100644 index 00000000..915f4410 --- /dev/null +++ b/src/nos/lib/iar_lib/BFCSHIFTUP.rel @@ -0,0 +1,11 @@ +XL4 +H 2 areas 3 global symbols +S ?C_LSH_L01 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 9 flags 0 +S ?BF_C_SHIFT_UP_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 4F 7B E6 07 47 79 C3 00 00 00 00 +R 00 00 01 00 02 0B 00 00 diff --git a/src/nos/lib/iar_lib/BFCXORASG.rel b/src/nos/lib/iar_lib/BFCXORASG.rel new file mode 100644 index 00000000..2ebf9a97 --- /dev/null +++ b/src/nos/lib/iar_lib/BFCXORASG.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_C_RET_VAL_L10 Ref00000000 +S ?BF_C_SHIFT_UP_L10 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 13 flags 0 +S ?BF_C_XORASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 C5 D5 5E 23 56 23 E3 F5 CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 47 7E A8 C3 +R 00 00 01 00 02 04 01 00 +T 11 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFMASKEDLD.rel b/src/nos/lib/iar_lib/BFMASKEDLD.rel new file mode 100644 index 00000000..ba0906ce --- /dev/null +++ b/src/nos/lib/iar_lib/BFMASKEDLD.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size C flags 0 +S ?BF_MASKED_LD_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 7E DD A6 01 5F 23 7E DD A6 02 57 +R 00 00 01 00 +T 0B 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/BFMASKEDST.rel b/src/nos/lib/iar_lib/BFMASKEDST.rel new file mode 100644 index 00000000..f7665996 --- /dev/null +++ b/src/nos/lib/iar_lib/BFMASKEDST.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 18 flags 0 +S ?BF_MASKED_ST_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 DD 4E 01 DD 46 02 7B A1 5F 7A A0 +R 00 00 01 00 +T 0B 00 00 00 57 78 2F A6 B2 77 2B 79 2F A6 B3 +R 00 00 01 00 +T 16 00 00 00 77 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/BFSADDASG.rel b/src/nos/lib/iar_lib/BFSADDASG.rel new file mode 100644 index 00000000..7b7507ad --- /dev/null +++ b/src/nos/lib/iar_lib/BFSADDASG.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1E flags 0 +S ?BF_S_ADDASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 50 59 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 14 00 00 00 7E 83 5F 23 7E 8A 57 C3 +R 00 00 01 00 +T 1C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFSANDASG.rel b/src/nos/lib/iar_lib/BFSANDASG.rel new file mode 100644 index 00000000..b1254a8b --- /dev/null +++ b/src/nos/lib/iar_lib/BFSANDASG.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1E flags 0 +S ?BF_S_ANDASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 50 59 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 14 00 00 00 7E A3 5F 23 7E A2 57 C3 +R 00 00 01 00 +T 1C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFSCDIVASG.rel b/src/nos/lib/iar_lib/BFSCDIVASG.rel new file mode 100644 index 00000000..6885786e --- /dev/null +++ b/src/nos/lib/iar_lib/BFSCDIVASG.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 6 global symbols +S ?BF_C_RET_VAL_L10 Ref00000000 +S ?BF_C_SHIFT_UP_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?SC_DIV_L01 Ref00000000 +S ?BF_SC_LD_SHIFT_DOWN_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 16 flags 0 +S ?BF_SC_DIVASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 C5 D5 5E 23 56 23 E3 F5 CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 CD 00 00 00 00 CD +R 00 00 01 00 02 04 04 00 02 09 03 00 +T 11 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/BFSCEXT.rel b/src/nos/lib/iar_lib/BFSCEXT.rel new file mode 100644 index 00000000..7942e9c6 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSCEXT.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 11 flags 0 +S ?BF_SC_EXT_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 80 7A A0 20 04 CB 28 18 F8 79 +R 00 00 01 00 +T 0B 00 00 00 A0 C8 79 B0 4F C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/BFSCLDSHIFTDOWN.rel b/src/nos/lib/iar_lib/BFSCLDSHIFTDOWN.rel new file mode 100644 index 00000000..4678fe54 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSCLDSHIFTDOWN.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_SC_EXT_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?SC_RSH_L01 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 12 flags 0 +S ?BF_SC_LD_SHIFT_DOWN_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 47 C5 7E A2 4F CD 00 00 00 00 7B +R 00 00 01 00 02 0A 00 00 +T 09 00 00 00 E6 07 47 79 CD 00 00 00 00 C1 C9 +R 00 00 01 00 02 09 02 00 diff --git a/src/nos/lib/iar_lib/BFSCMODASG.rel b/src/nos/lib/iar_lib/BFSCMODASG.rel new file mode 100644 index 00000000..4172105d --- /dev/null +++ b/src/nos/lib/iar_lib/BFSCMODASG.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 6 global symbols +S ?BF_C_RET_VAL_L10 Ref00000000 +S ?BF_C_SHIFT_UP_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?SC_MOD_L01 Ref00000000 +S ?BF_SC_LD_SHIFT_DOWN_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 16 flags 0 +S ?BF_SC_MODASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 C5 D5 5E 23 56 23 E3 F5 CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 CD 00 00 00 00 CD +R 00 00 01 00 02 04 04 00 02 09 03 00 +T 11 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/BFSCRSHASG.rel b/src/nos/lib/iar_lib/BFSCRSHASG.rel new file mode 100644 index 00000000..ee7632ed --- /dev/null +++ b/src/nos/lib/iar_lib/BFSCRSHASG.rel @@ -0,0 +1,17 @@ +XL4 +H 2 areas 5 global symbols +S ?BF_C_RET_VAL_L10 Ref00000000 +S ?BF_SC_EXT_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?SC_RSH_L01 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 18 flags 0 +S ?BF_SC_RSHASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 C5 D5 5E 23 56 23 E3 F5 C5 +R 00 00 01 00 +T 0B 00 00 00 7E A2 4F CD 00 00 00 00 C1 CD +R 00 00 01 00 02 08 01 00 +T 13 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 03 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/BFSLSHASG.rel b/src/nos/lib/iar_lib/BFSLSHASG.rel new file mode 100644 index 00000000..75add840 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSLSHASG.rel @@ -0,0 +1,17 @@ +XL4 +H 2 areas 5 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S ?BF_MASKED_LD_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 18 flags 0 +S ?BF_S_LSHASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 CD 00 00 00 00 CD +R 00 00 01 00 02 09 01 00 +T 13 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 03 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/BFSMULASG.rel b/src/nos/lib/iar_lib/BFSMULASG.rel new file mode 100644 index 00000000..cba8b556 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSMULASG.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?S_MUL_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 20 flags 0 +S ?BF_S_MULASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 7E DD A6 01 5F 23 7E +R 00 00 01 00 +T 16 00 00 00 DD A6 02 57 CD 00 00 00 00 C3 +R 00 00 01 00 02 09 02 00 +T 1E 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFSNEGASG.rel b/src/nos/lib/iar_lib/BFSNEGASG.rel new file mode 100644 index 00000000..8b1ac30d --- /dev/null +++ b/src/nos/lib/iar_lib/BFSNEGASG.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 21 flags 0 +S ?BF_S_NEGASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 11 01 00 CD +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 7E 2F 83 5F 23 7E 2F +R 00 00 01 00 02 04 02 00 +T 1C 00 00 00 8A 57 C3 00 00 00 00 +R 00 00 01 00 02 07 00 00 diff --git a/src/nos/lib/iar_lib/BFSORASG.rel b/src/nos/lib/iar_lib/BFSORASG.rel new file mode 100644 index 00000000..2b2d1765 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSORASG.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1E flags 0 +S ?BF_S_ORASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 50 59 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 14 00 00 00 7E B3 5F 23 7E B2 57 C3 +R 00 00 01 00 +T 1C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFSPOSTDEC.rel b/src/nos/lib/iar_lib/BFSPOSTDEC.rel new file mode 100644 index 00000000..448a4fdd --- /dev/null +++ b/src/nos/lib/iar_lib/BFSPOSTDEC.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_S_RET_VAL2_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 22 flags 0 +S ?BF_S_POST_DEC_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 11 01 00 CD +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 4E 23 46 C5 79 93 5F +R 00 00 01 00 02 04 02 00 +T 1C 00 00 00 78 9A 57 C3 00 00 00 00 +R 00 00 01 00 02 08 00 00 diff --git a/src/nos/lib/iar_lib/BFSPOSTINC.rel b/src/nos/lib/iar_lib/BFSPOSTINC.rel new file mode 100644 index 00000000..7c2f51f4 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSPOSTINC.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_S_RET_VAL2_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 22 flags 0 +S ?BF_S_POST_INC_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 11 01 00 CD +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 4E 23 46 C5 79 83 5F +R 00 00 01 00 02 04 02 00 +T 1C 00 00 00 78 8A 57 C3 00 00 00 00 +R 00 00 01 00 02 08 00 00 diff --git a/src/nos/lib/iar_lib/BFSPREDEC.rel b/src/nos/lib/iar_lib/BFSPREDEC.rel new file mode 100644 index 00000000..8450b198 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSPREDEC.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1F flags 0 +S ?BF_S_PRE_DEC_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 11 01 00 CD +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 7E 93 5F 23 7E 9A 57 +R 00 00 01 00 02 04 02 00 +T 1C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/iar_lib/BFSPREINC.rel b/src/nos/lib/iar_lib/BFSPREINC.rel new file mode 100644 index 00000000..e478d754 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSPREINC.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1F flags 0 +S ?BF_S_PRE_INC_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 11 01 00 CD +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 7E 83 5F 23 7E 8A 57 +R 00 00 01 00 02 04 02 00 +T 1C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/iar_lib/BFSRETVAL.rel b/src/nos/lib/iar_lib/BFSRETVAL.rel new file mode 100644 index 00000000..4f236251 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSRETVAL.rel @@ -0,0 +1,29 @@ +XL4 +H 2 areas 7 global symbols +S ?US_RSH_L02 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_SS_EXT_L10 Ref00000000 +S ?BF_MASKED_ST_L10 Ref00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 3D flags 0 +S ?BF_S_RET_VAL2_L10 Def00000000 +S ?BF_S_RET_VAL_L10 Def0000000C +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D1 7B A1 5F 7A A0 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 57 18 03 CD 00 00 00 00 DD 4E 00 +R 00 00 01 00 02 08 03 00 +T 12 00 00 00 CB 79 28 1D 79 E6 0F 47 CB 71 28 +R 00 00 01 00 +T 1D 00 00 00 0C CD 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 06 02 00 02 0B 04 00 +T 24 00 00 00 42 4B E1 C3 34 00 00 00 CD +R 00 00 01 00 00 08 01 00 +T 2B 00 00 00 00 00 00 00 42 4B E1 C3 +R 00 00 01 00 02 04 00 00 +T 31 00 00 00 34 00 00 00 C1 F1 E1 D1 DD E1 EB +R 00 00 01 00 00 04 01 00 +T 3A 00 00 00 E3 EB C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/BFSSDIVASG.rel b/src/nos/lib/iar_lib/BFSSDIVASG.rel new file mode 100644 index 00000000..aa4dc483 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSSDIVASG.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 6 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?BF_SS_LD_SHIFT_DOWN_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1B flags 0 +S ?BF_SS_DIVASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T 13 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 03 00 02 09 02 00 +T 19 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFSSEXT.rel b/src/nos/lib/iar_lib/BFSSEXT.rel new file mode 100644 index 00000000..72534701 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSSEXT.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 2D flags 0 +S ?BF_SS_EXT_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E5 C5 DD 6E 01 DD 66 02 06 80 0E +R 00 00 01 00 +T 0B 00 00 00 00 7C A0 20 0A 7D A1 20 06 CB 28 +R 00 00 01 00 +T 16 00 00 00 CB 19 18 F2 7A A4 A0 20 08 7B A5 +R 00 00 01 00 +T 21 00 00 00 A1 28 06 7B B1 5F 7A B0 57 C1 E1 +R 00 00 01 00 +T 2C 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/BFSSHIFTUP.rel b/src/nos/lib/iar_lib/BFSSHIFTUP.rel new file mode 100644 index 00000000..66ae7b6c --- /dev/null +++ b/src/nos/lib/iar_lib/BFSSHIFTUP.rel @@ -0,0 +1,11 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 9 flags 0 +S ?BF_S_SHIFT_UP_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 DD 7E 00 E6 0F 47 C3 00 00 00 00 +R 00 00 01 00 02 0B 01 00 diff --git a/src/nos/lib/iar_lib/BFSSLDSHIFTDOWN.rel b/src/nos/lib/iar_lib/BFSSLDSHIFTDOWN.rel new file mode 100644 index 00000000..bf11f5f0 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSSLDSHIFTDOWN.rel @@ -0,0 +1,17 @@ +XL4 +H 2 areas 5 global symbols +S ?BF_MASKED_LD_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_SS_EXT_L10 Ref00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 12 flags 0 +S ?BF_SS_LD_SHIFT_DOWN_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 CD 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 06 00 00 02 0B 02 00 +T 07 00 00 00 DD 7E 00 E6 0F 47 CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 10 00 00 00 C1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/BFSSMODASG.rel b/src/nos/lib/iar_lib/BFSSMODASG.rel new file mode 100644 index 00000000..ae525788 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSSMODASG.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 6 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?BF_SS_LD_SHIFT_DOWN_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1B flags 0 +S ?BF_SS_MODASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T 13 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 03 00 02 09 02 00 +T 19 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFSSRSHASG.rel b/src/nos/lib/iar_lib/BFSSRSHASG.rel new file mode 100644 index 00000000..808f9874 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSSRSHASG.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 6 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S ?BF_MASKED_LD_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_SS_EXT_L10 Ref00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1B flags 0 +S ?BF_SS_RSHASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 CD 00 00 00 00 CD +R 00 00 01 00 02 09 01 00 +T 13 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 03 00 02 09 04 00 +T 19 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFSSUBASG.rel b/src/nos/lib/iar_lib/BFSSUBASG.rel new file mode 100644 index 00000000..0f5d3de5 --- /dev/null +++ b/src/nos/lib/iar_lib/BFSSUBASG.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1E flags 0 +S ?BF_S_SUBASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 50 59 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 14 00 00 00 7E 93 5F 23 7E 9A 57 C3 +R 00 00 01 00 +T 1C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFSXORASG.rel b/src/nos/lib/iar_lib/BFSXORASG.rel new file mode 100644 index 00000000..d164b6aa --- /dev/null +++ b/src/nos/lib/iar_lib/BFSXORASG.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1E flags 0 +S ?BF_S_XORASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 50 59 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 14 00 00 00 7E AB 5F 23 7E AA 57 C3 +R 00 00 01 00 +T 1C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFUCDIVASG.rel b/src/nos/lib/iar_lib/BFUCDIVASG.rel new file mode 100644 index 00000000..b49d6546 --- /dev/null +++ b/src/nos/lib/iar_lib/BFUCDIVASG.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 6 global symbols +S ?BF_C_RET_VAL_L10 Ref00000000 +S ?BF_C_SHIFT_UP_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?UC_DIV_L01 Ref00000000 +S ?BF_UC_LD_SHIFT_DOWN_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 16 flags 0 +S ?BF_UC_DIVASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 C5 D5 5E 23 56 23 E3 F5 CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 CD 00 00 00 00 CD +R 00 00 01 00 02 04 04 00 02 09 03 00 +T 11 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/BFUCLDSHIFTDOWN.rel b/src/nos/lib/iar_lib/BFUCLDSHIFTDOWN.rel new file mode 100644 index 00000000..9120b60c --- /dev/null +++ b/src/nos/lib/iar_lib/BFUCLDSHIFTDOWN.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?UC_RSH_L01 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F flags 0 +S ?BF_UC_LD_SHIFT_DOWN_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 47 C5 7E A2 4F 7B E6 07 47 79 CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 C1 C9 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/iar_lib/BFUCMODASG.rel b/src/nos/lib/iar_lib/BFUCMODASG.rel new file mode 100644 index 00000000..00b79dd8 --- /dev/null +++ b/src/nos/lib/iar_lib/BFUCMODASG.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 6 global symbols +S ?BF_C_RET_VAL_L10 Ref00000000 +S ?BF_C_SHIFT_UP_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?UC_MOD_L01 Ref00000000 +S ?BF_UC_LD_SHIFT_DOWN_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 16 flags 0 +S ?BF_UC_MODASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 C5 D5 5E 23 56 23 E3 F5 CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 CD 00 00 00 00 CD +R 00 00 01 00 02 04 04 00 02 09 03 00 +T 11 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/BFUCRSHASG.rel b/src/nos/lib/iar_lib/BFUCRSHASG.rel new file mode 100644 index 00000000..36b393a7 --- /dev/null +++ b/src/nos/lib/iar_lib/BFUCRSHASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?BF_C_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?UC_RSH_L01 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 12 flags 0 +S ?BF_UC_RSHASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 C5 D5 5E 23 56 23 E3 F5 7E +R 00 00 01 00 +T 0B 00 00 00 A2 CD 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 02 0B 00 00 diff --git a/src/nos/lib/iar_lib/BFUSDIVASG.rel b/src/nos/lib/iar_lib/BFUSDIVASG.rel new file mode 100644 index 00000000..e7310913 --- /dev/null +++ b/src/nos/lib/iar_lib/BFUSDIVASG.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 6 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?BF_US_LD_SHIFT_DOWN_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1B flags 0 +S ?BF_US_DIVASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T 13 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 03 00 02 09 02 00 +T 19 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFUSLDSHIFTDOWN.rel b/src/nos/lib/iar_lib/BFUSLDSHIFTDOWN.rel new file mode 100644 index 00000000..97cb74a5 --- /dev/null +++ b/src/nos/lib/iar_lib/BFUSLDSHIFTDOWN.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?US_RSH_L02 Ref00000000 +S ?BF_MASKED_LD_L10 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F flags 0 +S ?BF_US_LD_SHIFT_DOWN_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 CD 00 00 00 00 DD 7E 00 E6 0F +R 00 00 01 00 02 06 01 00 +T 09 00 00 00 47 CD 00 00 00 00 C1 C9 +R 00 00 01 00 02 06 00 00 diff --git a/src/nos/lib/iar_lib/BFUSMODASG.rel b/src/nos/lib/iar_lib/BFUSMODASG.rel new file mode 100644 index 00000000..5ba0e285 --- /dev/null +++ b/src/nos/lib/iar_lib/BFUSMODASG.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 6 global symbols +S ?BF_S_RET_VAL_L10 Ref00000000 +S .__.ABS. Def00000000 +S ?BF_S_SHIFT_UP_L10 Ref00000000 +S ?US_MOD_L02 Ref00000000 +S ?BF_US_LD_SHIFT_DOWN_L10 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1B flags 0 +S ?BF_US_MODASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T 13 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 03 00 02 09 02 00 +T 19 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/BFUSRSHASG.rel b/src/nos/lib/iar_lib/BFUSRSHASG.rel new file mode 100644 index 00000000..8a8de119 --- /dev/null +++ b/src/nos/lib/iar_lib/BFUSRSHASG.rel @@ -0,0 +1,17 @@ +XL4 +H 2 areas 5 global symbols +S ?US_RSH_L02 Ref00000000 +S ?BF_S_RET_VAL_L10 Ref00000000 +S ?BF_MASKED_LD_L10 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 18 flags 0 +S ?BF_US_RSHASG_L10 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 D5 E5 DD E1 23 23 23 +R 00 00 01 00 +T 0B 00 00 00 E3 E5 F5 C5 CD 00 00 00 00 CD +R 00 00 01 00 02 09 02 00 +T 13 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 diff --git a/src/nos/lib/iar_lib/CALLIND.rel b/src/nos/lib/iar_lib/CALLIND.rel new file mode 100644 index 00000000..f538d303 --- /dev/null +++ b/src/nos/lib/iar_lib/CALLIND.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1 flags 0 +S ?CALL_IND_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/CDIVMOD.rel b/src/nos/lib/iar_lib/CDIVMOD.rel new file mode 100644 index 00000000..98d53cb8 --- /dev/null +++ b/src/nos/lib/iar_lib/CDIVMOD.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?C_DIVMOD_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 09 00 CB 11 1D C8 CB 12 7A 90 +R 00 00 01 00 +T 0B 00 00 00 38 F6 57 18 F3 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/CFINDSIGN.rel b/src/nos/lib/iar_lib/CFINDSIGN.rel new file mode 100644 index 00000000..081c4671 --- /dev/null +++ b/src/nos/lib/iar_lib/CFINDSIGN.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 14 flags 0 +S ?C_FIND_SIGN_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CB 78 28 05 AF 90 47 3E 01 CB 79 +R 00 00 01 00 +T 0B 00 00 00 C8 F5 AF 91 4F F1 EE 01 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/CLSH.rel b/src/nos/lib/iar_lib/CLSH.rel new file mode 100644 index 00000000..5abf2728 --- /dev/null +++ b/src/nos/lib/iar_lib/CLSH.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 7 flags 0 +S ?C_LSH_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 05 C8 87 10 FD C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/CLSHASG.rel b/src/nos/lib/iar_lib/CLSHASG.rel new file mode 100644 index 00000000..27a9bd07 --- /dev/null +++ b/src/nos/lib/iar_lib/CLSHASG.rel @@ -0,0 +1,11 @@ +XL4 +H 2 areas 3 global symbols +S ?C_LSH_L01 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 6 flags 0 +S ?C_LSHASG_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 7E CD 00 00 00 00 77 C9 +R 00 00 01 00 02 06 00 00 diff --git a/src/nos/lib/iar_lib/CMUL.rel b/src/nos/lib/iar_lib/CMUL.rel new file mode 100644 index 00000000..4686c84b --- /dev/null +++ b/src/nos/lib/iar_lib/CMUL.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 7 flags 0 +S ?C_MUL_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 4F ED 4C 79 C1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/CMULASG.rel b/src/nos/lib/iar_lib/CMULASG.rel new file mode 100644 index 00000000..09c84e87 --- /dev/null +++ b/src/nos/lib/iar_lib/CMULASG.rel @@ -0,0 +1,11 @@ +XL4 +H 2 areas 3 global symbols +S ?C_MUL_L01 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 9 flags 0 +S ?C_MULASG_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 47 7E CD 00 00 00 00 77 C1 C9 +R 00 00 01 00 02 08 00 00 diff --git a/src/nos/lib/iar_lib/CSSWITCH.rel b/src/nos/lib/iar_lib/CSSWITCH.rel new file mode 100644 index 00000000..42996aa2 --- /dev/null +++ b/src/nos/lib/iar_lib/CSSWITCH.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1C flags 0 +S ?C_S_SWITCH_L06 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E3 F5 D5 16 00 7B 96 23 5F 96 23 +R 00 00 01 00 +T 0B 00 00 00 7A 9E 23 30 04 EB 23 29 19 5E 23 +R 00 00 01 00 +T 16 00 00 00 56 EB D1 F1 E3 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/CVSWITCH.rel b/src/nos/lib/iar_lib/CVSWITCH.rel new file mode 100644 index 00000000..6437032f --- /dev/null +++ b/src/nos/lib/iar_lib/CVSWITCH.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S ?V_SWITCH_END_L06 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 12 flags 0 +S ?C_V_SWITCH_L06 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E3 F5 C5 4E 23 46 23 7B ED B1 20 +R 00 00 01 00 +T 0B 00 00 00 02 23 23 09 C3 00 00 00 00 +R 00 00 01 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/ENTAUTODIRECT.rel b/src/nos/lib/iar_lib/ENTAUTODIRECT.rel new file mode 100644 index 00000000..1d59e0e9 --- /dev/null +++ b/src/nos/lib/iar_lib/ENTAUTODIRECT.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 14 flags 0 +S ?ENT_AUTO_DIRECT_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E1 C5 D5 DD E5 DD 21 00 00 DD 39 +R 00 00 01 00 +T 0B 00 00 00 5E 23 56 23 EB 39 F9 EB E9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/ENTPARMDIRECT.rel b/src/nos/lib/iar_lib/ENTPARMDIRECT.rel new file mode 100644 index 00000000..5fabf2ce --- /dev/null +++ b/src/nos/lib/iar_lib/ENTPARMDIRECT.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size C flags 0 +S ?ENT_PARM_DIRECT_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E1 C5 D5 DD E5 DD 21 00 00 DD 39 +R 00 00 01 00 +T 0B 00 00 00 E9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/FADDASG.rel b/src/nos/lib/iar_lib/FADDASG.rel new file mode 100644 index 00000000..331381b1 --- /dev/null +++ b/src/nos/lib/iar_lib/FADDASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S .__.ABS. Def00000000 +S ?F_END_ASG2_L04 Ref00000000 +S ?F_ADD_L04 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?F_ADDASG_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 01 00 diff --git a/src/nos/lib/iar_lib/FADDSUB.rel b/src/nos/lib/iar_lib/FADDSUB.rel new file mode 100644 index 00000000..f27ea92b --- /dev/null +++ b/src/nos/lib/iar_lib/FADDSUB.rel @@ -0,0 +1,73 @@ +XL4 +H 2 areas 9 global symbols +S ?F_NO_PACK_L04 Ref00000000 +S ?F_PACK_L04 Ref00000000 +S .__.ABS. Def00000000 +S ?F_OVERFLOW_L04 Ref00000000 +S ?F_UNDERFLOW_L04 Ref00000000 +S ?F_UNPACK_L04 Ref00000000 +S ?F_ROUND_L04 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 123 flags 0 +S ?F_SUB_L04 Def00000000 +S ?F_ADD_L04 Def00000014 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 DD 21 02 00 DD 39 E5 +R 00 00 01 00 +T 0B 00 00 00 F5 DD 7E 05 EE 80 6F 18 0F EB E3 +R 00 00 01 00 +T 16 00 00 00 DD E5 DD 21 02 00 DD 39 E5 F5 DD +R 00 00 01 00 +T 21 00 00 00 6E 05 78 E6 7F B1 20 15 45 DD 4E +R 00 00 01 00 +T 2C 00 00 00 04 DD 56 03 DD 5E 02 7D E6 7F 6F +R 00 00 01 00 +T 37 00 00 00 B1 20 01 45 C3 00 00 00 00 7D E6 +R 00 00 01 00 02 09 00 00 +T 40 00 00 00 7F DD B6 04 CA 00 00 00 00 C5 D5 +R 00 00 01 00 02 09 00 00 +T 49 00 00 00 78 E6 7F 67 DD 75 05 7D E6 7F 47 +R 00 00 01 00 +T 54 00 00 00 69 DD 4E 04 ED 42 20 09 EB DD 46 +R 00 00 01 00 +T 5F 00 00 00 03 DD 4E 02 ED 42 D1 38 1D E1 DD +R 00 00 01 00 +T 6A 00 00 00 7E 03 DD 72 03 57 DD 7E 02 DD 73 +R 00 00 01 00 +T 75 00 00 00 02 5F DD 46 05 DD 74 05 DD 4E 04 +R 00 00 01 00 +T 80 00 00 00 DD 75 04 18 01 C1 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 89 00 00 00 F5 7C 95 FE 1A 38 0F DD 46 05 DD +R 00 00 01 00 +T 94 00 00 00 4E 04 DD 56 03 DD 5E 02 C3 +R 00 00 01 00 +T 9D 00 00 00 00 00 00 00 FE 08 38 10 D6 08 6F +R 00 00 01 00 02 04 01 00 +T A6 00 00 00 AF BB 5A 28 02 CB C3 51 48 47 7D +R 00 00 01 00 +T B1 00 00 00 18 EC B7 28 0F CB 38 CB 19 CB 1A +R 00 00 01 00 +T BC 00 00 00 CB 1B 30 02 CB C3 3D 20 F1 DD CB +R 00 00 01 00 +T C7 00 00 00 F9 56 20 29 DD 7E 02 83 5F DD 7E +R 00 00 01 00 +T D2 00 00 00 03 8A 57 DD 7E 04 89 4F DD 7E 05 +R 00 00 01 00 +T DD 00 00 00 88 47 30 10 CB 18 CB 19 CB 1A CB +R 00 00 01 00 +T E8 00 00 00 1B 30 02 CB C3 24 CA 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T F1 00 00 00 C3 00 00 00 00 DD 7E 02 93 5F DD +R 00 00 01 00 02 05 06 00 +T FA 00 00 00 7E 03 9A 57 DD 7E 04 99 4F DD 7E +R 00 00 01 00 +T 05 01 00 00 05 98 47 B1 B2 B3 CA 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 0E 01 00 00 CB 78 20 0E 25 CA 00 00 00 00 CB +R 00 00 01 00 02 0A 04 00 +T 17 01 00 00 23 CB 12 CB 11 CB 10 18 EE C3 +R 00 00 01 00 +T 21 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 diff --git a/src/nos/lib/iar_lib/FCMP.rel b/src/nos/lib/iar_lib/FCMP.rel new file mode 100644 index 00000000..1b803510 --- /dev/null +++ b/src/nos/lib/iar_lib/FCMP.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 54 flags 0 +S ?F_CMP_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 DD 21 02 00 DD 39 E5 +R 00 00 01 00 +T 0B 00 00 00 67 DD 7E 05 CB 78 28 19 CB 7F 28 +R 00 00 01 00 +T 16 00 00 00 15 90 20 2B DD 7E 04 91 20 25 DD +R 00 00 01 00 +T 21 00 00 00 7E 03 92 20 1F DD 7E 02 93 18 19 +R 00 00 01 00 +T 2C 00 00 00 EE 80 6F 78 EE 80 95 20 10 79 DD +R 00 00 01 00 +T 37 00 00 00 96 04 20 0A 7A DD 96 03 20 04 7B +R 00 00 01 00 +T 42 00 00 00 DD 96 02 7C E1 DD 75 04 DD 74 05 +R 00 00 01 00 +T 4D 00 00 00 DD E1 E1 EB 33 33 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/FDEC.rel b/src/nos/lib/iar_lib/FDEC.rel new file mode 100644 index 00000000..a022104c --- /dev/null +++ b/src/nos/lib/iar_lib/FDEC.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?F_ADD_L04 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size C flags 0 +S ?F_DEC_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 E5 01 80 BF 21 00 00 CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 C9 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/iar_lib/FDECASG.rel b/src/nos/lib/iar_lib/FDECASG.rel new file mode 100644 index 00000000..fcc5eeb6 --- /dev/null +++ b/src/nos/lib/iar_lib/FDECASG.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?F_DEC_L04 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 14 flags 0 +S ?F_DECASG_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 EB 70 2B 71 2B 72 2B +R 00 00 01 00 02 04 01 00 +T 12 00 00 00 73 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/FDIV.rel b/src/nos/lib/iar_lib/FDIV.rel new file mode 100644 index 00000000..c0af472b --- /dev/null +++ b/src/nos/lib/iar_lib/FDIV.rel @@ -0,0 +1,52 @@ +XL4 +H 2 areas 8 global symbols +S ?F_PACK_L04 Ref00000000 +S ?F_UNDERFLOW2_L04 Ref00000000 +S .__.ABS. Def00000000 +S ?F_OVERFLOW_L04 Ref00000000 +S ?F_UNDERFLOW_L04 Ref00000000 +S ?F_UNPACK_L04 Ref00000000 +S ?F_UP_ROUND_L04 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size B7 flags 0 +S ?F_DIV_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 DD 21 02 00 DD 39 E5 +R 00 00 01 00 +T 0B 00 00 00 F5 CD 00 00 00 00 1F 1F F5 AF BD +R 00 00 01 00 02 06 05 00 +T 14 00 00 00 CA 00 00 00 00 B4 CA 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0B 03 00 +T 1B 00 00 00 D6 7F D2 28 00 00 00 ED 44 85 DA +R 00 00 01 00 00 07 01 00 +T 24 00 00 00 00 00 00 00 18 09 67 7D 94 DA +R 00 00 01 00 02 04 03 00 +T 2C 00 00 00 00 00 00 00 CA 00 00 00 00 F5 6A +R 00 00 01 00 02 04 04 00 02 09 04 00 +T 33 00 00 00 61 48 06 00 DD 56 04 DD 5E 03 A7 +R 00 00 01 00 +T 3E 00 00 00 ED 52 79 DD 9E 05 30 0F DD 35 F7 +R 00 00 01 00 +T 49 00 00 00 CA 00 00 00 00 CB 25 CB 14 17 19 +R 00 00 01 00 02 05 01 00 +T 52 00 00 00 DD 8E 05 4F DD 36 F6 17 CB 25 CB +R 00 00 01 00 +T 5D 00 00 00 14 CB 11 CB 10 ED 52 79 DD 9E 05 +R 00 00 01 00 +T 68 00 00 00 4F 78 DE 00 47 30 08 19 79 DD 8E +R 00 00 01 00 +T 73 00 00 00 05 4F 06 00 DD CB 02 16 DD CB 03 +R 00 00 01 00 +T 7E 00 00 00 16 DD CB 04 16 DD 35 F6 20 D2 79 +R 00 00 01 00 +T 89 00 00 00 CB 25 CB 14 17 CB 10 20 07 DD 96 +R 00 00 01 00 +T 94 00 00 00 05 20 02 ED 52 DD 7E 04 2F 47 DD +R 00 00 01 00 +T 9F 00 00 00 7E 03 2F 4F DD 7E 02 2F 57 1E 00 +R 00 00 01 00 +T AA 00 00 00 E1 38 07 20 02 CB 42 C2 +R 00 00 01 00 +T B2 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/FDIVASG.rel b/src/nos/lib/iar_lib/FDIVASG.rel new file mode 100644 index 00000000..cae4fdbe --- /dev/null +++ b/src/nos/lib/iar_lib/FDIVASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?F_DIV_L04 Ref00000000 +S .__.ABS. Def00000000 +S ?F_END_ASG2_L04 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?F_DIVASG_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 02 00 diff --git a/src/nos/lib/iar_lib/FENDASG2.rel b/src/nos/lib/iar_lib/FENDASG2.rel new file mode 100644 index 00000000..3da85b13 --- /dev/null +++ b/src/nos/lib/iar_lib/FENDASG2.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 9 flags 0 +S ?F_END_ASG2_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB 70 2B 71 2B 72 2B 73 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/FINC.rel b/src/nos/lib/iar_lib/FINC.rel new file mode 100644 index 00000000..ee2f9611 --- /dev/null +++ b/src/nos/lib/iar_lib/FINC.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?F_ADD_L04 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size C flags 0 +S ?F_INC_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 E5 01 80 3F 21 00 00 CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 C9 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/iar_lib/FINCASG.rel b/src/nos/lib/iar_lib/FINCASG.rel new file mode 100644 index 00000000..07036197 --- /dev/null +++ b/src/nos/lib/iar_lib/FINCASG.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 3 global symbols +S ?F_INC_L04 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 14 flags 0 +S ?F_INCASG_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 EB 70 2B 71 2B 72 2B +R 00 00 01 00 02 04 00 00 +T 12 00 00 00 73 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/FMUL.rel b/src/nos/lib/iar_lib/FMUL.rel new file mode 100644 index 00000000..45bf4f3e --- /dev/null +++ b/src/nos/lib/iar_lib/FMUL.rel @@ -0,0 +1,62 @@ +XL4 +H 2 areas 6 global symbols +S .__.ABS. Def00000000 +S ?F_OVERFLOW_L04 Ref00000000 +S ?F_UNDERFLOW_L04 Ref00000000 +S ?F_UNPACK_L04 Ref00000000 +S ?F_ROUND_L04 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F0 flags 0 +S ?F_MUL_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 DD E5 DD 21 02 00 DD 39 E5 +R 00 00 01 00 +T 0B 00 00 00 F5 CD 00 00 00 00 CB 3F CB 3F F5 +R 00 00 01 00 02 06 03 00 +T 14 00 00 00 AF BD CA 00 00 00 00 B4 CA +R 00 00 01 00 02 07 02 00 +T 1B 00 00 00 00 00 00 00 D6 7F 38 06 85 DA +R 00 00 01 00 02 04 02 00 +T 23 00 00 00 00 00 00 00 18 04 85 D2 +R 00 00 01 00 02 04 01 00 +T 29 00 00 00 00 00 00 00 67 3E 80 A8 B1 B2 20 +R 00 00 01 00 02 04 02 00 +T 32 00 00 00 0B DD 46 05 DD 4E 04 DD 56 03 18 +R 00 00 01 00 +T 3D 00 00 00 29 3E 80 DD AE 05 DD B6 04 DD B6 +R 00 00 01 00 +T 48 00 00 00 03 28 1C 7C C5 D5 CD 6A 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 51 00 00 00 F1 F1 CB 3D 30 10 24 CA +R 00 00 01 00 +T 59 00 00 00 00 00 00 00 CB 18 CB 19 CB 1A CB +R 00 00 01 00 02 04 01 00 +T 62 00 00 00 1B 30 02 CB C3 C3 00 00 00 00 F5 +R 00 00 01 00 02 0A 04 00 +T 6B 00 00 00 60 DD 56 05 6A ED 6C E5 60 DD 6E +R 00 00 01 00 +T 76 00 00 00 04 ED 6C 59 ED 5C AF 19 CE 00 F5 +R 00 00 01 00 +T 81 00 00 00 E5 60 DD 6E 03 ED 6C 59 DD 56 04 +R 00 00 01 00 +T 8C 00 00 00 ED 5C AF 19 CE 00 DD 46 F5 50 DD +R 00 00 01 00 +T 97 00 00 00 5E 05 ED 5C 19 CE 00 F5 E5 69 DD +R 00 00 01 00 +T A2 00 00 00 66 03 ED 6C 50 DD 5E 04 ED 5C AF +R 00 00 01 00 +T AD 00 00 00 19 CE 00 DD 4E 03 ED 4C DD 71 02 +R 00 00 01 00 +T B8 00 00 00 48 06 00 09 DD 75 F4 4C CE 00 47 +R 00 00 01 00 +T C3 00 00 00 E1 09 4D D1 7A CE 00 57 5C E1 19 +R 00 00 01 00 +T CE 00 00 00 45 D1 7A CE 00 57 5C E1 19 E5 C5 +R 00 00 01 00 +T D9 00 00 00 D1 C1 E1 CB 13 CB 12 CB 11 CB 10 +R 00 00 01 00 +T E4 00 00 00 CB 15 DD 7E F4 DD B6 02 C8 CB C3 +R 00 00 01 00 +T EF 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/FMULASG.rel b/src/nos/lib/iar_lib/FMULASG.rel new file mode 100644 index 00000000..5ff406de --- /dev/null +++ b/src/nos/lib/iar_lib/FMULASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S .__.ABS. Def00000000 +S ?F_MUL_L04 Ref00000000 +S ?F_END_ASG2_L04 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?F_MULASG_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 02 00 diff --git a/src/nos/lib/iar_lib/FNEGASG.rel b/src/nos/lib/iar_lib/FNEGASG.rel new file mode 100644 index 00000000..d9270ad8 --- /dev/null +++ b/src/nos/lib/iar_lib/FNEGASG.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 16 flags 0 +S ?F_NEGASG_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 5E 23 56 23 4E 23 46 79 B0 28 +R 00 00 01 00 +T 0B 00 00 00 05 78 EE 80 47 70 2B 2B 2B F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/FPACK.rel b/src/nos/lib/iar_lib/FPACK.rel new file mode 100644 index 00000000..e115ea0f --- /dev/null +++ b/src/nos/lib/iar_lib/FPACK.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 6 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 3A flags 0 +S ?F_NO_PACK_L04 Def0000002B +S ?F_PACK_L04 Def00000015 +S ?F_UNDERFLOW2_L04 Def0000000D +S ?F_OVERFLOW_L04 Def00000000 +S ?F_UNDERFLOW_L04 Def0000000E +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 FF 48 50 58 DD CB F9 1E CB 18 +R 00 00 01 00 +T 0B 00 00 00 18 1D C1 06 00 48 50 58 18 15 7C +R 00 00 01 00 +T 16 00 00 00 B7 28 F5 3C 28 E4 5A 51 48 44 DD +R 00 00 01 00 +T 21 00 00 00 CB F9 1E CB 18 38 02 CB B9 F1 F1 +R 00 00 01 00 +T 2C 00 00 00 E1 DD 75 04 DD 74 05 DD E1 E1 EB +R 00 00 01 00 +T 37 00 00 00 33 33 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/FROUND.rel b/src/nos/lib/iar_lib/FROUND.rel new file mode 100644 index 00000000..549d39f8 --- /dev/null +++ b/src/nos/lib/iar_lib/FROUND.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 6 global symbols +S ?F_PACK_L04 Ref00000000 +S .__.ABS. Def00000000 +S ?F_OVERFLOW_L04 Ref00000000 +S ?F_UNDERFLOW_L04 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 27 flags 0 +S ?F_ROUND_L04 Def00000000 +S ?F_UP_ROUND_L04 Def00000010 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 7C B7 CA 00 00 00 00 7B 17 30 1B +R 00 00 01 00 02 07 03 00 +T 09 00 00 00 B7 20 04 CB 42 28 14 7A C6 01 57 +R 00 00 01 00 +T 14 00 00 00 79 CE 00 4F 78 CE 00 47 30 06 CB +R 00 00 01 00 +T 1F 00 00 00 18 24 CA 00 00 00 00 C3 +R 00 00 01 00 02 07 02 00 +T 25 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/FSUBASG.rel b/src/nos/lib/iar_lib/FSUBASG.rel new file mode 100644 index 00000000..2304dcf7 --- /dev/null +++ b/src/nos/lib/iar_lib/FSUBASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?F_SUB_L04 Ref00000000 +S .__.ABS. Def00000000 +S ?F_END_ASG2_L04 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?F_SUBASG_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 02 00 diff --git a/src/nos/lib/iar_lib/FTOL.rel b/src/nos/lib/iar_lib/FTOL.rel new file mode 100644 index 00000000..d4d0c72a --- /dev/null +++ b/src/nos/lib/iar_lib/FTOL.rel @@ -0,0 +1,30 @@ +XL4 +H 2 areas 4 global symbols +S ?L_INC_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_NOT_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 5E flags 0 +S ?F_TO_L_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 D5 CB 20 CB 13 CB 79 28 02 CB +R 00 00 01 00 +T 0B 00 00 00 C0 CB F9 78 D6 7F 30 07 01 00 00 +R 00 00 01 00 +T 16 00 00 00 60 69 18 41 FE 20 38 0D 01 00 80 +R 00 00 01 00 +T 21 00 00 00 61 69 CB 43 20 34 0B 2B 18 30 47 +R 00 00 01 00 +T 2C 00 00 00 3E 1F 90 51 4C 65 2E 00 28 1A D6 +R 00 00 01 00 +T 37 00 00 00 08 38 07 6C 61 4A 16 00 18 F5 C6 +R 00 00 01 00 +T 42 00 00 00 08 28 0B 47 CB 3A CB 19 CB 1C CB +R 00 00 01 00 +T 4D 00 00 00 1D 10 F6 42 CB 43 28 06 CD +R 00 00 01 00 +T 56 00 00 00 00 00 00 00 CD 00 00 00 00 D1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 5D 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/FUNPACK.rel b/src/nos/lib/iar_lib/FUNPACK.rel new file mode 100644 index 00000000..fc5ed72d --- /dev/null +++ b/src/nos/lib/iar_lib/FUNPACK.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 40 flags 0 +S ?F_UNPACK_L04 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 AF 67 CB 21 CB 10 17 37 CB 19 68 +R 00 00 01 00 +T 0B 00 00 00 41 4A 53 1E 00 C5 D5 DD 5E 02 DD +R 00 00 01 00 +T 16 00 00 00 56 03 DD 4E 04 DD 46 05 CB 21 CB +R 00 00 01 00 +T 21 00 00 00 10 CB 14 37 CB 19 DD 71 05 DD 72 +R 00 00 01 00 +T 2C 00 00 00 04 DD 73 03 DD 36 02 00 4F AC CB +R 00 00 01 00 +T 37 00 00 00 19 17 CB 1C 17 60 D1 C1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LADDASG.rel b/src/nos/lib/iar_lib/LADDASG.rel new file mode 100644 index 00000000..7c1e6d79 --- /dev/null +++ b/src/nos/lib/iar_lib/LADDASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 19 flags 0 +S ?L_ADDASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 7E 83 77 5F 23 7E 8A 77 57 23 +R 00 00 01 00 +T 0B 00 00 00 7E 89 77 4F 23 7E 88 77 47 2B 2B +R 00 00 01 00 +T 16 00 00 00 2B F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LAND.rel b/src/nos/lib/iar_lib/LAND.rel new file mode 100644 index 00000000..b9cc5f5e --- /dev/null +++ b/src/nos/lib/iar_lib/LAND.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1E flags 0 +S ?L_AND_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 F5 E5 21 06 00 39 7E A3 77 +R 00 00 01 00 +T 0B 00 00 00 23 7E A2 77 D1 23 7E 73 A1 4F 23 +R 00 00 01 00 +T 16 00 00 00 7E 72 A0 47 F1 D1 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LANDASG.rel b/src/nos/lib/iar_lib/LANDASG.rel new file mode 100644 index 00000000..b94fa91d --- /dev/null +++ b/src/nos/lib/iar_lib/LANDASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 19 flags 0 +S ?L_ANDASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 7E A3 77 5F 23 7E A2 77 57 23 +R 00 00 01 00 +T 0B 00 00 00 7E A1 77 4F 23 7E A0 77 47 2B 2B +R 00 00 01 00 +T 16 00 00 00 2B F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LDEC.rel b/src/nos/lib/iar_lib/LDEC.rel new file mode 100644 index 00000000..dfaf2115 --- /dev/null +++ b/src/nos/lib/iar_lib/LDEC.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 9 flags 0 +S ?L_DEC_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 7D B4 2B 20 01 0B F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LDECASG.rel b/src/nos/lib/iar_lib/LDECASG.rel new file mode 100644 index 00000000..936567fe --- /dev/null +++ b/src/nos/lib/iar_lib/LDECASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_DEC_L03 Ref00000000 +S ?L_END_ASG_L03 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?L_DECASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 diff --git a/src/nos/lib/iar_lib/LDIVMOD.rel b/src/nos/lib/iar_lib/LDIVMOD.rel new file mode 100644 index 00000000..b8e88819 --- /dev/null +++ b/src/nos/lib/iar_lib/LDIVMOD.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 58 flags 0 +S ?L_DIVMOD_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 21 00 00 01 00 00 DD 36 F8 21 +R 00 00 01 00 +T 0B 00 00 00 18 02 19 37 DD CB FC 16 DD CB FD +R 00 00 01 00 +T 16 00 00 00 16 DD CB FE 16 DD CB FF 16 DD 35 +R 00 00 01 00 +T 21 00 00 00 F8 28 2E CB 11 CB 10 CB 15 CB 14 +R 00 00 01 00 +T 2C 00 00 00 ED 52 38 DD 20 10 78 DD 96 07 38 +R 00 00 01 00 +T 37 00 00 00 D5 20 08 79 DD 96 06 38 CD 18 04 +R 00 00 01 00 +T 42 00 00 00 79 DD 96 06 4F 78 DD 9E 07 47 30 +R 00 00 01 00 +T 4D 00 00 00 C1 2B A7 18 BD F1 E5 60 69 C1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LEAVE32.rel b/src/nos/lib/iar_lib/LEAVE32.rel new file mode 100644 index 00000000..fabda197 --- /dev/null +++ b/src/nos/lib/iar_lib/LEAVE32.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 8 flags 0 +S ?LEAVE_32_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 DD F9 DD E1 D1 33 33 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LEAVEDIRECT.rel b/src/nos/lib/iar_lib/LEAVEDIRECT.rel new file mode 100644 index 00000000..866c0bbe --- /dev/null +++ b/src/nos/lib/iar_lib/LEAVEDIRECT.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 7 flags 0 +S ?LEAVE_DIRECT_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 DD F9 DD E1 D1 C1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LENDASG.rel b/src/nos/lib/iar_lib/LENDASG.rel new file mode 100644 index 00000000..497bb7b8 --- /dev/null +++ b/src/nos/lib/iar_lib/LENDASG.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 9 flags 0 +S ?L_END_ASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB 70 2B 71 2B 72 2B 73 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LENDMULDIVASG.rel b/src/nos/lib/iar_lib/LENDMULDIVASG.rel new file mode 100644 index 00000000..8cc650df --- /dev/null +++ b/src/nos/lib/iar_lib/LENDMULDIVASG.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 9 flags 0 +S ?L_END_MULDIVASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB 70 2B 71 2B 72 2B 73 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LFINDSIGN.rel b/src/nos/lib/iar_lib/LFINDSIGN.rel new file mode 100644 index 00000000..230f64c4 --- /dev/null +++ b/src/nos/lib/iar_lib/LFINDSIGN.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 4 global symbols +S ?L_INC_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_NOT_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 44 flags 0 +S ?L_FIND_SIGN_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CB 7A 28 18 42 4B DD 66 07 DD 6E +R 00 00 01 00 +T 0B 00 00 00 06 CD 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 06 02 00 02 0B 00 00 +T 12 00 00 00 50 59 DD 74 07 DD 75 06 3E 01 DD +R 00 00 01 00 +T 1D 00 00 00 CB FF 7E C8 F5 DD 46 FF DD 4E FE +R 00 00 01 00 +T 28 00 00 00 DD 66 FD DD 6E FC CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 31 00 00 00 CD 00 00 00 00 DD 70 FF DD 71 FE +R 00 00 01 00 02 05 00 00 +T 3A 00 00 00 DD 74 FD DD 75 FC F1 EE 01 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LIBVERSION.rel b/src/nos/lib/iar_lib/LIBVERSION.rel new file mode 100644 index 00000000..200dba25 --- /dev/null +++ b/src/nos/lib/iar_lib/LIBVERSION.rel @@ -0,0 +1,6 @@ +XL4 +H 1 areas 3 global symbols +S ?CL64180L_4_06_L00 Def00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Def00000000 +A _DEFAULT size 0 flags 0 diff --git a/src/nos/lib/iar_lib/LINC.rel b/src/nos/lib/iar_lib/LINC.rel new file mode 100644 index 00000000..52f25f0c --- /dev/null +++ b/src/nos/lib/iar_lib/LINC.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 8 flags 0 +S ?L_INC_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2C C0 24 C0 0C C0 04 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LINCASG.rel b/src/nos/lib/iar_lib/LINCASG.rel new file mode 100644 index 00000000..6149976a --- /dev/null +++ b/src/nos/lib/iar_lib/LINCASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_END_ASG_L03 Ref00000000 +S ?L_INC_L03 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?L_INCASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/LLSH.rel b/src/nos/lib/iar_lib/LLSH.rel new file mode 100644 index 00000000..1275699a --- /dev/null +++ b/src/nos/lib/iar_lib/LLSH.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 18 flags 0 +S ?L_LSH_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 B7 C8 FE 08 38 09 41 4C 65 2E 00 +R 00 00 01 00 +T 0B 00 00 00 D6 08 18 F2 29 CB 11 CB 10 3D 20 +R 00 00 01 00 +T 16 00 00 00 F8 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LLSHASG.rel b/src/nos/lib/iar_lib/LLSHASG.rel new file mode 100644 index 00000000..0e6f9bac --- /dev/null +++ b/src/nos/lib/iar_lib/LLSHASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_END_ASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?L_LSHASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/LMUL.rel b/src/nos/lib/iar_lib/LMUL.rel new file mode 100644 index 00000000..97e5ebc3 --- /dev/null +++ b/src/nos/lib/iar_lib/LMUL.rel @@ -0,0 +1,32 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 84 flags 0 +S ?L_MUL_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E3 D5 DD E5 DD 21 00 00 DD 39 DD +R 00 00 01 00 +T 0B 00 00 00 56 09 DD 74 09 DD 5E 08 DD 75 08 +R 00 00 01 00 +T 16 00 00 00 D5 C5 F5 DD 6E 04 62 ED 6C DD 56 +R 00 00 01 00 +T 21 00 00 00 05 ED 5C 19 59 DD 56 07 ED 5C 19 +R 00 00 01 00 +T 2C 00 00 00 DD 5E 06 50 ED 5C 19 E5 DD 5E 04 +R 00 00 01 00 +T 37 00 00 00 DD 56 FE ED 5C DD 6E 05 DD 66 07 +R 00 00 01 00 +T 42 00 00 00 ED 6C 19 DD 46 06 ED 4C 09 E5 DD +R 00 00 01 00 +T 4D 00 00 00 5E 04 DD 56 07 ED 5C DD 6E 05 DD +R 00 00 01 00 +T 58 00 00 00 66 06 ED 6C AF 19 17 F5 DD 5E 04 +R 00 00 01 00 +T 63 00 00 00 DD 56 06 ED 5C 4A 06 00 AF 09 17 +R 00 00 01 00 +T 6E 00 00 00 55 C1 4C E1 09 84 C1 81 4D 47 EB +R 00 00 01 00 +T 79 00 00 00 F1 D1 D1 DD E1 D1 33 33 33 33 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LMULASG.rel b/src/nos/lib/iar_lib/LMULASG.rel new file mode 100644 index 00000000..fca710c8 --- /dev/null +++ b/src/nos/lib/iar_lib/LMULASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_END_MULDIVASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?L_MULASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/LNEG.rel b/src/nos/lib/iar_lib/LNEG.rel new file mode 100644 index 00000000..32769b23 --- /dev/null +++ b/src/nos/lib/iar_lib/LNEG.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 12 flags 0 +S ?L_NEG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 AF 95 6F 3E 00 9C 67 3E 00 99 +R 00 00 01 00 +T 0B 00 00 00 4F 3E 00 98 47 F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LNEGASG.rel b/src/nos/lib/iar_lib/LNEGASG.rel new file mode 100644 index 00000000..360e7f2f --- /dev/null +++ b/src/nos/lib/iar_lib/LNEGASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_END_ASG_L03 Ref00000000 +S ?L_NEG_L03 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?L_NEGASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/LNOT.rel b/src/nos/lib/iar_lib/LNOT.rel new file mode 100644 index 00000000..54f5a4b8 --- /dev/null +++ b/src/nos/lib/iar_lib/LNOT.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F flags 0 +S ?L_NOT_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 7D 2F 6F 7C 2F 67 79 2F 4F 78 +R 00 00 01 00 +T 0B 00 00 00 2F 47 F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LNOTASG.rel b/src/nos/lib/iar_lib/LNOTASG.rel new file mode 100644 index 00000000..d64b1769 --- /dev/null +++ b/src/nos/lib/iar_lib/LNOTASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_END_ASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_NOT_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?L_NOTASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/LOR.rel b/src/nos/lib/iar_lib/LOR.rel new file mode 100644 index 00000000..1ec97ded --- /dev/null +++ b/src/nos/lib/iar_lib/LOR.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1E flags 0 +S ?L_OR_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 F5 E5 21 06 00 39 7E B3 77 +R 00 00 01 00 +T 0B 00 00 00 23 7E B2 77 D1 23 7E 73 B1 4F 23 +R 00 00 01 00 +T 16 00 00 00 7E 72 B0 47 F1 D1 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LORASG.rel b/src/nos/lib/iar_lib/LORASG.rel new file mode 100644 index 00000000..30c846a4 --- /dev/null +++ b/src/nos/lib/iar_lib/LORASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 19 flags 0 +S ?L_ORASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 7E B3 77 5F 23 7E B2 77 57 23 +R 00 00 01 00 +T 0B 00 00 00 7E B1 77 4F 23 7E B0 77 47 2B 2B +R 00 00 01 00 +T 16 00 00 00 2B F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LSSWITCH.rel b/src/nos/lib/iar_lib/LSSWITCH.rel new file mode 100644 index 00000000..3070b7ee --- /dev/null +++ b/src/nos/lib/iar_lib/LSSWITCH.rel @@ -0,0 +1,17 @@ +XL4 +H 2 areas 3 global symbols +S ?S_SWITCH_END_L06 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 24 flags 0 +S ?L_S_SWITCH_L06 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E3 F5 D5 C5 7B 96 23 5F 7A 9E 23 +R 00 00 01 00 +T 0B 00 00 00 57 79 9E 23 4F 78 9E 23 47 7B 96 +R 00 00 01 00 +T 16 00 00 00 23 7A 9E 23 79 DE 00 78 DE 00 C1 +R 00 00 01 00 +T 21 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/iar_lib/LSUBASG.rel b/src/nos/lib/iar_lib/LSUBASG.rel new file mode 100644 index 00000000..bde48db8 --- /dev/null +++ b/src/nos/lib/iar_lib/LSUBASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 19 flags 0 +S ?L_SUBASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 7E 93 77 5F 23 7E 9A 77 57 23 +R 00 00 01 00 +T 0B 00 00 00 7E 99 77 4F 23 7E 98 77 47 2B 2B +R 00 00 01 00 +T 16 00 00 00 2B F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LTOF.rel b/src/nos/lib/iar_lib/LTOF.rel new file mode 100644 index 00000000..45b3773a --- /dev/null +++ b/src/nos/lib/iar_lib/LTOF.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 5 global symbols +S ?L_INC_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_NOT_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 43 flags 0 +S ?SL_TO_F_L04 Def00000000 +S ?UL_TO_F_L04 Def00000016 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 D5 78 B1 B4 B5 28 38 AF CB 78 +R 00 00 01 00 +T 0B 00 00 00 28 07 CD 00 00 00 00 CD +R 00 00 01 00 02 07 02 00 +T 11 00 00 00 00 00 00 00 3C 18 09 F5 D5 78 B1 +R 00 00 01 00 02 04 00 00 +T 1A 00 00 00 B4 B5 28 22 AF 58 06 1F CB 7B 20 +R 00 00 01 00 +T 25 00 00 00 0A CB 25 CB 14 CB 11 CB 13 10 F2 +R 00 00 01 00 +T 30 00 00 00 57 78 C6 7F 47 6C 61 4B CB 1A CB +R 00 00 01 00 +T 3B 00 00 00 18 38 02 CB B9 D1 F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LVSWITCH.rel b/src/nos/lib/iar_lib/LVSWITCH.rel new file mode 100644 index 00000000..55a7550d --- /dev/null +++ b/src/nos/lib/iar_lib/LVSWITCH.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 3 global symbols +S ?V_SWITCH_END_L06 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 3B flags 0 +S ?L_V_SWITCH_L06 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E3 F5 C5 DD E5 DD 21 00 00 DD 39 +R 00 00 01 00 +T 0B 00 00 00 4E 23 46 18 02 23 23 23 78 B1 28 +R 00 00 01 00 +T 16 00 00 00 1B 0B 7B 96 23 20 F3 7A 96 20 EF +R 00 00 01 00 +T 21 00 00 00 23 DD 7E 02 96 23 20 E9 DD 7E 03 +R 00 00 01 00 +T 2C 00 00 00 96 20 E3 23 23 23 09 09 09 09 DD +R 00 00 01 00 +T 37 00 00 00 E1 C3 00 00 00 00 +R 00 00 01 00 02 06 00 00 diff --git a/src/nos/lib/iar_lib/LXOR.rel b/src/nos/lib/iar_lib/LXOR.rel new file mode 100644 index 00000000..fa6fe5fc --- /dev/null +++ b/src/nos/lib/iar_lib/LXOR.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1E flags 0 +S ?L_XOR_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 F5 E5 21 06 00 39 7E AB 77 +R 00 00 01 00 +T 0B 00 00 00 23 7E AA 77 D1 23 7E 73 A9 4F 23 +R 00 00 01 00 +T 16 00 00 00 7E 72 A8 47 F1 D1 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/LXORASG.rel b/src/nos/lib/iar_lib/LXORASG.rel new file mode 100644 index 00000000..c0d44d17 --- /dev/null +++ b/src/nos/lib/iar_lib/LXORASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 19 flags 0 +S ?L_XORASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 7E AB 77 5F 23 7E AA 77 57 23 +R 00 00 01 00 +T 0B 00 00 00 7E A9 77 4F 23 7E A8 77 47 2B 2B +R 00 00 01 00 +T 16 00 00 00 2B F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/MEMCMP.rel b/src/nos/lib/iar_lib/MEMCMP.rel new file mode 100644 index 00000000..371d30f1 --- /dev/null +++ b/src/nos/lib/iar_lib/MEMCMP.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1E flags 0 +S ?MEMCMP_L11 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 C5 D5 79 B0 28 09 1A ED A1 20 +R 00 00 01 00 +T 0B 00 00 00 09 13 EA 07 00 00 00 21 00 00 18 +R 00 00 01 00 00 07 01 00 +T 14 00 00 00 05 2B 96 6F 9F 67 D1 C1 F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/MEMSET.rel b/src/nos/lib/iar_lib/MEMSET.rel new file mode 100644 index 00000000..d32de006 --- /dev/null +++ b/src/nos/lib/iar_lib/MEMSET.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 17 flags 0 +S ?MEMSET_L11 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 E5 D5 78 B1 28 0C 7D 12 0B 78 +R 00 00 01 00 +T 0B 00 00 00 B1 28 05 6B 62 13 ED B0 D1 E1 F1 +R 00 00 01 00 +T 16 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/MONITORBANKLEAVE.rel b/src/nos/lib/iar_lib/MONITORBANKLEAVE.rel new file mode 100644 index 00000000..c1fe44af --- /dev/null +++ b/src/nos/lib/iar_lib/MONITORBANKLEAVE.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 8 flags 0 +S ?MONITOR_BANK_LEAVE_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F1 E2 00 00 00 00 FB C3 +R 00 00 01 00 02 06 00 00 +T 06 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/iar_lib/MONITORBANKLEAVE32.rel b/src/nos/lib/iar_lib/MONITORBANKLEAVE32.rel new file mode 100644 index 00000000..ec7dd97d --- /dev/null +++ b/src/nos/lib/iar_lib/MONITORBANKLEAVE32.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F flags 0 +S ?MONITOR_BANK_LEAVE_32_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F1 DD F9 DD E1 D1 33 33 E2 +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 FB C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 00 00 diff --git a/src/nos/lib/iar_lib/MONITORBANKLEAVEIX.rel b/src/nos/lib/iar_lib/MONITORBANKLEAVEIX.rel new file mode 100644 index 00000000..4e32dd5a --- /dev/null +++ b/src/nos/lib/iar_lib/MONITORBANKLEAVEIX.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size C flags 0 +S ?MONITOR_BANK_LEAVE_IX_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F1 DD F9 DD E1 E2 00 00 00 00 FB +R 00 00 01 00 02 0A 00 00 +T 09 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/iar_lib/MONITORBANKLEAVEPOP.rel b/src/nos/lib/iar_lib/MONITORBANKLEAVEPOP.rel new file mode 100644 index 00000000..0eb055e8 --- /dev/null +++ b/src/nos/lib/iar_lib/MONITORBANKLEAVEPOP.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?MONITOR_BANK_LEAVE_POP_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F1 DD F9 DD E1 D1 C1 E2 +R 00 00 01 00 +T 08 00 00 00 00 00 00 00 FB C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 00 00 diff --git a/src/nos/lib/iar_lib/MONITORLEAVE.rel b/src/nos/lib/iar_lib/MONITORLEAVE.rel new file mode 100644 index 00000000..ffd76de4 --- /dev/null +++ b/src/nos/lib/iar_lib/MONITORLEAVE.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 4 flags 0 +S ?MONITOR_LEAVE_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F1 E0 FB C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/MONITORLEAVE32.rel b/src/nos/lib/iar_lib/MONITORLEAVE32.rel new file mode 100644 index 00000000..e02e6e31 --- /dev/null +++ b/src/nos/lib/iar_lib/MONITORLEAVE32.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size B flags 0 +S ?MONITOR_LEAVE_32_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F1 DD F9 DD E1 D1 33 33 E0 FB C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/MONITORLEAVEIX.rel b/src/nos/lib/iar_lib/MONITORLEAVEIX.rel new file mode 100644 index 00000000..961e889f --- /dev/null +++ b/src/nos/lib/iar_lib/MONITORLEAVEIX.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 8 flags 0 +S ?MONITOR_LEAVE_IX_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F1 DD F9 DD E1 E0 FB C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/MONITORLEAVEIXPA.rel b/src/nos/lib/iar_lib/MONITORLEAVEIXPA.rel new file mode 100644 index 00000000..e9cea805 --- /dev/null +++ b/src/nos/lib/iar_lib/MONITORLEAVEIXPA.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?MONITOR_LEAVE_IX_PA_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 67 F1 7C DD F9 DD E1 E0 FB C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/MONITORLEAVEPA.rel b/src/nos/lib/iar_lib/MONITORLEAVEPA.rel new file mode 100644 index 00000000..d24f2e00 --- /dev/null +++ b/src/nos/lib/iar_lib/MONITORLEAVEPA.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 6 flags 0 +S ?MONITOR_LEAVE_PA_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 67 F1 7C E0 FB C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/MONITORLEAVEPOP.rel b/src/nos/lib/iar_lib/MONITORLEAVEPOP.rel new file mode 100644 index 00000000..d267291f --- /dev/null +++ b/src/nos/lib/iar_lib/MONITORLEAVEPOP.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size C flags 0 +S ?MONITOR_LEAVE_POP_L09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5F F1 7B DD F9 DD E1 D1 C1 E0 FB +R 00 00 01 00 +T 0B 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SCDIV.rel b/src/nos/lib/iar_lib/SCDIV.rel new file mode 100644 index 00000000..e93f9488 --- /dev/null +++ b/src/nos/lib/iar_lib/SCDIV.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 4 global symbols +S ?C_FIND_SIGN_L01 Ref00000000 +S .__.ABS. Def00000000 +S ?C_DIVMOD_L01 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 18 flags 0 +S ?SC_DIV_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 4F AF CD 00 00 00 00 F5 CD +R 00 00 01 00 02 09 00 00 +T 09 00 00 00 00 00 00 00 F1 B7 79 28 03 3C 18 +R 00 00 01 00 02 04 02 00 +T 12 00 00 00 02 EE FF D1 C1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SCMOD.rel b/src/nos/lib/iar_lib/SCMOD.rel new file mode 100644 index 00000000..98a85002 --- /dev/null +++ b/src/nos/lib/iar_lib/SCMOD.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 4 global symbols +S ?C_FIND_SIGN_L01 Ref00000000 +S .__.ABS. Def00000000 +S ?C_DIVMOD_L01 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 16 flags 0 +S ?SC_MOD_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 4F 3E 01 CD 00 00 00 00 F5 +R 00 00 01 00 02 0A 00 00 +T 09 00 00 00 CD 00 00 00 00 F1 B7 7A 20 02 ED +R 00 00 01 00 02 05 02 00 +T 12 00 00 00 44 D1 C1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SCRSH.rel b/src/nos/lib/iar_lib/SCRSH.rel new file mode 100644 index 00000000..c8330ffb --- /dev/null +++ b/src/nos/lib/iar_lib/SCRSH.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 8 flags 0 +S ?SC_RSH_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 05 C8 CB 2F 10 FC C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SCRSHASG.rel b/src/nos/lib/iar_lib/SCRSHASG.rel new file mode 100644 index 00000000..f684f16e --- /dev/null +++ b/src/nos/lib/iar_lib/SCRSHASG.rel @@ -0,0 +1,11 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SC_RSH_L01 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 6 flags 0 +S ?SC_RSHASG_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 7E CD 00 00 00 00 77 C9 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/iar_lib/SDIVMOD.rel b/src/nos/lib/iar_lib/SDIVMOD.rel new file mode 100644 index 00000000..08accb7d --- /dev/null +++ b/src/nos/lib/iar_lib/SDIVMOD.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 16 flags 0 +S ?S_DIVMOD_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 00 3E 11 CB 13 CB 12 3D C8 +R 00 00 01 00 +T 0B 00 00 00 CB 15 CB 14 ED 42 30 F2 09 18 EF +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SFINDSIGN.rel b/src/nos/lib/iar_lib/SFINDSIGN.rel new file mode 100644 index 00000000..29efc0c7 --- /dev/null +++ b/src/nos/lib/iar_lib/SFINDSIGN.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1C flags 0 +S ?S_FIND_SIGN_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CB 78 28 09 AF 91 4F 3E 00 98 47 +R 00 00 01 00 +T 0B 00 00 00 3E 01 CB 7A C8 F5 AF 93 5F 3E 00 +R 00 00 01 00 +T 16 00 00 00 9A 57 F1 EE 01 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SLCMP.rel b/src/nos/lib/iar_lib/SLCMP.rel new file mode 100644 index 00000000..97c75094 --- /dev/null +++ b/src/nos/lib/iar_lib/SLCMP.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 31 flags 0 +S ?SL_CMP_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 D5 C5 F5 D5 C5 EB 21 0F 00 +R 00 00 01 00 +T 0B 00 00 00 39 7E EE 80 47 72 2B 4E 73 EB E1 +R 00 00 01 00 +T 16 00 00 00 7C EE 80 67 ED 42 E1 20 0A EB 2B +R 00 00 01 00 +T 21 00 00 00 7E 2B 6E 67 EB A7 ED 52 C1 78 C1 +R 00 00 01 00 +T 2C 00 00 00 E1 D1 33 33 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SLDIV.rel b/src/nos/lib/iar_lib/SLDIV.rel new file mode 100644 index 00000000..64f704b3 --- /dev/null +++ b/src/nos/lib/iar_lib/SLDIV.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 6 global symbols +S ?L_INC_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_NOT_L03 Ref00000000 +S ?L_FIND_SIGN_L03 Ref00000000 +S ?L_DIVMOD_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 30 flags 0 +S ?SL_DIV_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 F5 DD E5 DD 21 00 00 DD 39 +R 00 00 01 00 +T 0B 00 00 00 C5 D5 DD 56 09 DD 74 09 DD 5E 08 +R 00 00 01 00 +T 16 00 00 00 DD 75 08 AF CD 00 00 00 00 CD +R 00 00 01 00 02 09 03 00 +T 1E 00 00 00 00 00 00 00 E1 C1 B7 CC +R 00 00 01 00 02 04 04 00 +T 24 00 00 00 00 00 00 00 C4 00 00 00 00 DD E1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 2B 00 00 00 F1 D1 33 33 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SLDIVASG.rel b/src/nos/lib/iar_lib/SLDIVASG.rel new file mode 100644 index 00000000..cc272f75 --- /dev/null +++ b/src/nos/lib/iar_lib/SLDIVASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_END_MULDIVASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?SL_DIV_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?SL_DIVASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/SLMOD.rel b/src/nos/lib/iar_lib/SLMOD.rel new file mode 100644 index 00000000..df46fd85 --- /dev/null +++ b/src/nos/lib/iar_lib/SLMOD.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 6 global symbols +S ?L_INC_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_NOT_L03 Ref00000000 +S ?L_FIND_SIGN_L03 Ref00000000 +S ?L_DIVMOD_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 33 flags 0 +S ?SL_MOD_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 F5 DD E5 DD 21 00 00 DD 39 +R 00 00 01 00 +T 0B 00 00 00 C5 D5 DD 56 09 DD 74 09 DD 5E 08 +R 00 00 01 00 +T 16 00 00 00 DD 75 08 3E 01 CD 00 00 00 00 CD +R 00 00 01 00 02 0A 03 00 +T 1F 00 00 00 00 00 00 00 B7 20 06 CD +R 00 00 01 00 02 04 04 00 +T 25 00 00 00 00 00 00 00 CD 00 00 00 00 DD F9 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 2C 00 00 00 DD E1 F1 D1 33 33 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SLMODASG.rel b/src/nos/lib/iar_lib/SLMODASG.rel new file mode 100644 index 00000000..98412721 --- /dev/null +++ b/src/nos/lib/iar_lib/SLMODASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_END_MULDIVASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?SL_MOD_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?SL_MODASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/SLRSH.rel b/src/nos/lib/iar_lib/SLRSH.rel new file mode 100644 index 00000000..0c9ca77d --- /dev/null +++ b/src/nos/lib/iar_lib/SLRSH.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?SL_RSH_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 B7 C8 CB 28 CB 19 CB 1C CB 1D 3D +R 00 00 01 00 +T 0B 00 00 00 20 F5 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SLRSHASG.rel b/src/nos/lib/iar_lib/SLRSHASG.rel new file mode 100644 index 00000000..e90b6d58 --- /dev/null +++ b/src/nos/lib/iar_lib/SLRSHASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_END_ASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?SL_RSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?SL_RSHASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/SLSH.rel b/src/nos/lib/iar_lib/SLSH.rel new file mode 100644 index 00000000..913abba2 --- /dev/null +++ b/src/nos/lib/iar_lib/SLSH.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 9 flags 0 +S ?S_LSH_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 05 C8 EB 29 10 FD EB C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SLSHASG.rel b/src/nos/lib/iar_lib/SLSHASG.rel new file mode 100644 index 00000000..e03f779c --- /dev/null +++ b/src/nos/lib/iar_lib/SLSHASG.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?S_LSHASG_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 CD 00 00 00 00 72 2B 73 +R 00 00 01 00 02 08 01 00 +T 09 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SLSHASGBCprim.rel b/src/nos/lib/iar_lib/SLSHASGBCprim.rel new file mode 100644 index 00000000..2567b0f0 --- /dev/null +++ b/src/nos/lib/iar_lib/SLSHASGBCprim.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F flags 0 +S ?S_LSHASG_BC_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D9 B7 28 07 CB 21 CB 10 3D 20 F9 +R 00 00 01 00 +T 0B 00 00 00 C5 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SLSHASGDEprim.rel b/src/nos/lib/iar_lib/SLSHASGDEprim.rel new file mode 100644 index 00000000..e86a69b5 --- /dev/null +++ b/src/nos/lib/iar_lib/SLSHASGDEprim.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?S_LSHASG_DE_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D9 B7 28 06 EB 29 3D 20 FC EB D5 +R 00 00 01 00 +T 0B 00 00 00 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SMUL.rel b/src/nos/lib/iar_lib/SMUL.rel new file mode 100644 index 00000000..5e105efd --- /dev/null +++ b/src/nos/lib/iar_lib/SMUL.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 16 flags 0 +S ?S_MUL_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 C5 E5 78 42 51 67 6B ED 4C ED +R 00 00 01 00 +T 0B 00 00 00 6C ED 5C 79 85 82 57 E1 C1 F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SMULASG.rel b/src/nos/lib/iar_lib/SMULASG.rel new file mode 100644 index 00000000..f3e39ba9 --- /dev/null +++ b/src/nos/lib/iar_lib/SMULASG.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?S_MUL_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?S_MULASG_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 CD 00 00 00 00 72 2B 73 +R 00 00 01 00 02 08 01 00 +T 09 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SMULASGBCprim.rel b/src/nos/lib/iar_lib/SMULASGBCprim.rel new file mode 100644 index 00000000..e8fcbb67 --- /dev/null +++ b/src/nos/lib/iar_lib/SMULASGBCprim.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?S_MUL_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F flags 0 +S ?S_MULASG_BC_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D9 EB E3 EB CD 00 00 00 00 42 +R 00 00 01 00 02 0A 01 00 +T 09 00 00 00 4B D1 C5 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SMULASGDEprim.rel b/src/nos/lib/iar_lib/SMULASGDEprim.rel new file mode 100644 index 00000000..c3a683bf --- /dev/null +++ b/src/nos/lib/iar_lib/SMULASGDEprim.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?S_MUL_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?S_MULASG_DE_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D9 E1 C5 44 4D CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 09 00 00 00 C1 D5 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SMULASGIX.rel b/src/nos/lib/iar_lib/SMULASGIX.rel new file mode 100644 index 00000000..dfdd3af1 --- /dev/null +++ b/src/nos/lib/iar_lib/SMULASGIX.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?S_MUL_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?S_MULASG_IX_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 DD E5 D1 CD 00 00 00 00 D5 EB +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 DD E1 D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SMULASGIY.rel b/src/nos/lib/iar_lib/SMULASGIY.rel new file mode 100644 index 00000000..ab2c1b70 --- /dev/null +++ b/src/nos/lib/iar_lib/SMULASGIY.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?S_MUL_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?S_MULASG_IY_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 FD E5 D1 CD 00 00 00 00 D5 EB +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 FD E1 D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSCMP.rel b/src/nos/lib/iar_lib/SSCMP.rel new file mode 100644 index 00000000..279002e5 --- /dev/null +++ b/src/nos/lib/iar_lib/SSCMP.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 12 flags 0 +S ?SS_CMP_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 E5 F5 7C EE 80 67 78 EE 80 47 +R 00 00 01 00 +T 0B 00 00 00 F1 A7 ED 42 E1 C1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSDIV.rel b/src/nos/lib/iar_lib/SSDIV.rel new file mode 100644 index 00000000..da26abb3 --- /dev/null +++ b/src/nos/lib/iar_lib/SSDIV.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 4 global symbols +S ?S_DIVMOD_L02 Ref00000000 +S .__.ABS. Def00000000 +S ?S_FIND_SIGN_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1C flags 0 +S ?SS_DIV_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 C5 E5 AF CD 00 00 00 00 F5 CD +R 00 00 01 00 02 09 02 00 +T 09 00 00 00 00 00 00 00 F1 B7 28 03 13 18 06 +R 00 00 01 00 02 04 00 00 +T 12 00 00 00 7B 2F 5F 7A 2F 57 E1 C1 F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSDIVASG.rel b/src/nos/lib/iar_lib/SSDIVASG.rel new file mode 100644 index 00000000..c785432b --- /dev/null +++ b/src/nos/lib/iar_lib/SSDIVASG.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?SS_DIVASG_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 CD 00 00 00 00 72 2B 73 +R 00 00 01 00 02 08 01 00 +T 09 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSDIVASGBCprim.rel b/src/nos/lib/iar_lib/SSDIVASGBCprim.rel new file mode 100644 index 00000000..d4a95f24 --- /dev/null +++ b/src/nos/lib/iar_lib/SSDIVASGBCprim.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 12 flags 0 +S ?SS_DIVASG_BC_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D9 EB E3 50 59 44 4D CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 42 4B D1 C5 D9 E1 C9 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/iar_lib/SSDIVASGDEprim.rel b/src/nos/lib/iar_lib/SSDIVASGDEprim.rel new file mode 100644 index 00000000..b40b2a15 --- /dev/null +++ b/src/nos/lib/iar_lib/SSDIVASGDEprim.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?SS_DIVASG_DE_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D9 E1 C5 44 4D CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 09 00 00 00 C1 D5 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSDIVASGIX.rel b/src/nos/lib/iar_lib/SSDIVASGIX.rel new file mode 100644 index 00000000..98e5e08a --- /dev/null +++ b/src/nos/lib/iar_lib/SSDIVASGIX.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?SS_DIVASG_IX_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 DD E5 D1 CD 00 00 00 00 D5 EB +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 DD E1 D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSDIVASGIY.rel b/src/nos/lib/iar_lib/SSDIVASGIY.rel new file mode 100644 index 00000000..f6eed03f --- /dev/null +++ b/src/nos/lib/iar_lib/SSDIVASGIY.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?SS_DIVASG_IY_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 FD E5 D1 CD 00 00 00 00 D5 EB +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 FD E1 D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSMOD.rel b/src/nos/lib/iar_lib/SSMOD.rel new file mode 100644 index 00000000..9d9a39c0 --- /dev/null +++ b/src/nos/lib/iar_lib/SSMOD.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 4 global symbols +S ?S_DIVMOD_L02 Ref00000000 +S .__.ABS. Def00000000 +S ?S_FIND_SIGN_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1C flags 0 +S ?SS_MOD_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 E5 C5 3E 01 CD 00 00 00 00 F5 +R 00 00 01 00 02 0A 02 00 +T 09 00 00 00 CD 00 00 00 00 F1 EB B7 20 07 AF +R 00 00 01 00 02 05 00 00 +T 12 00 00 00 93 5F 3E 00 9A 57 C1 E1 F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSMODASG.rel b/src/nos/lib/iar_lib/SSMODASG.rel new file mode 100644 index 00000000..933175a1 --- /dev/null +++ b/src/nos/lib/iar_lib/SSMODASG.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_MOD_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?SS_MODASG_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 CD 00 00 00 00 72 2B 73 +R 00 00 01 00 02 08 01 00 +T 09 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSMODASGBCprim.rel b/src/nos/lib/iar_lib/SSMODASGBCprim.rel new file mode 100644 index 00000000..ca948555 --- /dev/null +++ b/src/nos/lib/iar_lib/SSMODASGBCprim.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_MOD_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 12 flags 0 +S ?SS_MODASG_BC_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D9 EB E3 50 59 44 4D CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 42 4B D1 C5 D9 E1 C9 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/iar_lib/SSMODASGDEprim.rel b/src/nos/lib/iar_lib/SSMODASGDEprim.rel new file mode 100644 index 00000000..fd946b9c --- /dev/null +++ b/src/nos/lib/iar_lib/SSMODASGDEprim.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_MOD_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?SS_MODASG_DE_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D9 E1 C5 44 4D CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 09 00 00 00 C1 D5 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSMODASGIX.rel b/src/nos/lib/iar_lib/SSMODASGIX.rel new file mode 100644 index 00000000..9110108f --- /dev/null +++ b/src/nos/lib/iar_lib/SSMODASGIX.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_MOD_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?SS_MODASG_IX_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 DD E5 D1 CD 00 00 00 00 D5 EB +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 DD E1 D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSMODASGIY.rel b/src/nos/lib/iar_lib/SSMODASGIY.rel new file mode 100644 index 00000000..4fabc533 --- /dev/null +++ b/src/nos/lib/iar_lib/SSMODASGIY.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_MOD_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?SS_MODASG_IY_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 FD E5 D1 CD 00 00 00 00 D5 EB +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 FD E1 D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSRSH.rel b/src/nos/lib/iar_lib/SSRSH.rel new file mode 100644 index 00000000..d824a57f --- /dev/null +++ b/src/nos/lib/iar_lib/SSRSH.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?SS_RSH_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 05 C8 CB 2A CB 1B 10 FA C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSRSHASG.rel b/src/nos/lib/iar_lib/SSRSHASG.rel new file mode 100644 index 00000000..5a615cd9 --- /dev/null +++ b/src/nos/lib/iar_lib/SSRSHASG.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?SS_RSHASG_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 CD 00 00 00 00 72 2B 73 +R 00 00 01 00 02 08 01 00 +T 09 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSRSHASGBCprim.rel b/src/nos/lib/iar_lib/SSRSHASGBCprim.rel new file mode 100644 index 00000000..0c11c812 --- /dev/null +++ b/src/nos/lib/iar_lib/SSRSHASGBCprim.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F flags 0 +S ?SS_RSHASG_BC_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D9 B7 28 07 CB 28 CB 19 3D 20 F9 +R 00 00 01 00 +T 0B 00 00 00 C5 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSRSHASGDEprim.rel b/src/nos/lib/iar_lib/SSRSHASGDEprim.rel new file mode 100644 index 00000000..4535fca7 --- /dev/null +++ b/src/nos/lib/iar_lib/SSRSHASGDEprim.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F flags 0 +S ?SS_RSHASG_DE_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D9 B7 28 07 CB 2A CB 1B 3D 20 F9 +R 00 00 01 00 +T 0B 00 00 00 D5 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSRSHASGIX.rel b/src/nos/lib/iar_lib/SSRSHASGIX.rel new file mode 100644 index 00000000..dc62aecf --- /dev/null +++ b/src/nos/lib/iar_lib/SSRSHASGIX.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?SS_RSHASG_IX_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 DD E5 D1 CD 00 00 00 00 D5 DD +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 E1 EB D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSRSHASGIY.rel b/src/nos/lib/iar_lib/SSRSHASGIY.rel new file mode 100644 index 00000000..24310672 --- /dev/null +++ b/src/nos/lib/iar_lib/SSRSHASGIY.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?SS_RSHASG_IY_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 FD E5 D1 CD 00 00 00 00 D5 FD +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 E1 EB D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SSSWITCH.rel b/src/nos/lib/iar_lib/SSSWITCH.rel new file mode 100644 index 00000000..45dd07b8 --- /dev/null +++ b/src/nos/lib/iar_lib/SSSWITCH.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S ?S_SWITCH_END_L06 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 14 flags 0 +S ?S_S_SWITCH_L06 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E3 F5 D5 7B 96 23 5F 7A 9E 23 57 +R 00 00 01 00 +T 0B 00 00 00 7B 96 23 7A 9E 23 C3 00 00 00 00 +R 00 00 01 00 02 0B 00 00 diff --git a/src/nos/lib/iar_lib/SSWITCHEND.rel b/src/nos/lib/iar_lib/SSWITCHEND.rel new file mode 100644 index 00000000..830ecc43 --- /dev/null +++ b/src/nos/lib/iar_lib/SSWITCHEND.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?S_SWITCH_END_L06 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 04 EB 23 29 19 5E 23 56 EB D1 +R 00 00 01 00 +T 0B 00 00 00 F1 E3 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/STRCAT.rel b/src/nos/lib/iar_lib/STRCAT.rel new file mode 100644 index 00000000..954d84e7 --- /dev/null +++ b/src/nos/lib/iar_lib/STRCAT.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 15 flags 0 +S ?STRCAT_L11 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E5 D5 C5 F5 AF 47 4F ED B1 2B EB +R 00 00 01 00 +T 0B 00 00 00 BE ED A0 20 FB F1 C1 D1 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/STRCHR.rel b/src/nos/lib/iar_lib/STRCHR.rel new file mode 100644 index 00000000..64140449 --- /dev/null +++ b/src/nos/lib/iar_lib/STRCHR.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size B flags 0 +S ?STRCHR_L11 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 7E BB C8 B7 23 20 F9 21 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/STRCMP.rel b/src/nos/lib/iar_lib/STRCMP.rel new file mode 100644 index 00000000..e01a93df --- /dev/null +++ b/src/nos/lib/iar_lib/STRCMP.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 14 flags 0 +S ?STRCMP_L11 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 D5 1A BE 20 09 13 23 B7 20 F7 +R 00 00 01 00 +T 0B 00 00 00 21 00 00 11 CB 1C D1 F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/STRCPY.rel b/src/nos/lib/iar_lib/STRCPY.rel new file mode 100644 index 00000000..42ee8830 --- /dev/null +++ b/src/nos/lib/iar_lib/STRCPY.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?STRCPY_L11 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 E5 D5 C5 AF EB BE ED A0 20 FB +R 00 00 01 00 +T 0B 00 00 00 C1 D1 E1 F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/STRLEN.rel b/src/nos/lib/iar_lib/STRLEN.rel new file mode 100644 index 00000000..661d7785 --- /dev/null +++ b/src/nos/lib/iar_lib/STRLEN.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F flags 0 +S ?STRLEN_L11 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 F5 AF 47 4F ED B1 21 FF FF ED +R 00 00 01 00 +T 0B 00 00 00 42 F1 C1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/SVSWITCH.rel b/src/nos/lib/iar_lib/SVSWITCH.rel new file mode 100644 index 00000000..7865684d --- /dev/null +++ b/src/nos/lib/iar_lib/SVSWITCH.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 3 global symbols +S ?V_SWITCH_END_L06 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1D flags 0 +S ?S_V_SWITCH_L06 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 E3 F5 C5 4E 23 46 23 78 B1 28 0D +R 00 00 01 00 +T 0B 00 00 00 0B 7B 96 23 20 F5 7A 96 20 F1 23 +R 00 00 01 00 +T 16 00 00 00 23 23 09 09 C3 00 00 00 00 +R 00 00 01 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/UCDIV.rel b/src/nos/lib/iar_lib/UCDIV.rel new file mode 100644 index 00000000..2782ceea --- /dev/null +++ b/src/nos/lib/iar_lib/UCDIV.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?C_DIVMOD_L01 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size C flags 0 +S ?UC_DIV_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 4F CD 00 00 00 00 79 EE FF +R 00 00 01 00 02 08 01 00 +T 09 00 00 00 D1 C1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/UCMOD.rel b/src/nos/lib/iar_lib/UCMOD.rel new file mode 100644 index 00000000..c454bacd --- /dev/null +++ b/src/nos/lib/iar_lib/UCMOD.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?C_DIVMOD_L01 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?UC_MOD_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 4F CD 00 00 00 00 7A D1 C1 +R 00 00 01 00 02 08 01 00 +T 09 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/UCRSH.rel b/src/nos/lib/iar_lib/UCRSH.rel new file mode 100644 index 00000000..0f2779e7 --- /dev/null +++ b/src/nos/lib/iar_lib/UCRSH.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 8 flags 0 +S ?UC_RSH_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 05 C8 CB 3F 10 FC C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/UCRSHASG.rel b/src/nos/lib/iar_lib/UCRSHASG.rel new file mode 100644 index 00000000..43686966 --- /dev/null +++ b/src/nos/lib/iar_lib/UCRSHASG.rel @@ -0,0 +1,11 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?UC_RSH_L01 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 6 flags 0 +S ?UC_RSHASG_L01 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 7E CD 00 00 00 00 77 C9 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/iar_lib/ULDIV.rel b/src/nos/lib/iar_lib/ULDIV.rel new file mode 100644 index 00000000..4e98a2aa --- /dev/null +++ b/src/nos/lib/iar_lib/ULDIV.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 4 global symbols +S .__.ABS. Def00000000 +S ?L_NOT_L03 Ref00000000 +S ?L_DIVMOD_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 28 flags 0 +S ?UL_DIV_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 F5 DD E5 DD 21 00 00 DD 39 +R 00 00 01 00 +T 0B 00 00 00 C5 D5 DD 56 09 DD 74 09 DD 5E 08 +R 00 00 01 00 +T 16 00 00 00 DD 75 08 CD 00 00 00 00 E1 C1 CD +R 00 00 01 00 02 08 02 00 +T 1F 00 00 00 00 00 00 00 DD E1 F1 D1 33 33 C9 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/iar_lib/ULDIVASG.rel b/src/nos/lib/iar_lib/ULDIVASG.rel new file mode 100644 index 00000000..cb664f3d --- /dev/null +++ b/src/nos/lib/iar_lib/ULDIVASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_END_MULDIVASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?UL_DIV_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?UL_DIVASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/ULMOD.rel b/src/nos/lib/iar_lib/ULMOD.rel new file mode 100644 index 00000000..e28e8d71 --- /dev/null +++ b/src/nos/lib/iar_lib/ULMOD.rel @@ -0,0 +1,17 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?L_DIVMOD_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 25 flags 0 +S ?UL_MOD_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB E3 F5 DD E5 DD 21 00 00 DD 39 +R 00 00 01 00 +T 0B 00 00 00 C5 D5 DD 56 09 DD 74 09 DD 5E 08 +R 00 00 01 00 +T 16 00 00 00 DD 75 08 CD 00 00 00 00 DD F9 DD +R 00 00 01 00 02 08 01 00 +T 1F 00 00 00 E1 F1 D1 33 33 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/ULMODASG.rel b/src/nos/lib/iar_lib/ULMODASG.rel new file mode 100644 index 00000000..acda4028 --- /dev/null +++ b/src/nos/lib/iar_lib/ULMODASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_END_MULDIVASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?UL_MOD_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 10 flags 0 +S ?UL_MODASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 0B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/ULRSH.rel b/src/nos/lib/iar_lib/ULRSH.rel new file mode 100644 index 00000000..b0ae8850 --- /dev/null +++ b/src/nos/lib/iar_lib/ULRSH.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1B flags 0 +S ?UL_RSH_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 B7 C8 FE 08 38 09 6C 61 48 06 00 +R 00 00 01 00 +T 0B 00 00 00 D6 08 18 F2 CB 38 CB 19 CB 1C CB +R 00 00 01 00 +T 16 00 00 00 1D 3D 20 F5 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/ULRSHASG.rel b/src/nos/lib/iar_lib/ULRSHASG.rel new file mode 100644 index 00000000..e7619be4 --- /dev/null +++ b/src/nos/lib/iar_lib/ULRSHASG.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 4 global symbols +S ?L_END_ASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?UL_RSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?UL_RSHASG_L03 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 diff --git a/src/nos/lib/iar_lib/USDIV.rel b/src/nos/lib/iar_lib/USDIV.rel new file mode 100644 index 00000000..78f52dd3 --- /dev/null +++ b/src/nos/lib/iar_lib/USDIV.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S ?S_DIVMOD_L02 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?US_DIV_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 E5 CD 00 00 00 00 7B 2F 5F 7A +R 00 00 01 00 02 07 00 00 +T 09 00 00 00 2F 57 E1 F1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USDIVASG.rel b/src/nos/lib/iar_lib/USDIVASG.rel new file mode 100644 index 00000000..2b966b69 --- /dev/null +++ b/src/nos/lib/iar_lib/USDIVASG.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?US_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?US_DIVASG_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 CD 00 00 00 00 72 2B 73 +R 00 00 01 00 02 08 01 00 +T 09 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USDIVASGBCprim.rel b/src/nos/lib/iar_lib/USDIVASGBCprim.rel new file mode 100644 index 00000000..ffa747e5 --- /dev/null +++ b/src/nos/lib/iar_lib/USDIVASGBCprim.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?US_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 12 flags 0 +S ?US_DIVASG_BC_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D9 EB E3 50 59 44 4D CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 42 4B D1 C5 D9 E1 C9 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/iar_lib/USDIVASGDEprim.rel b/src/nos/lib/iar_lib/USDIVASGDEprim.rel new file mode 100644 index 00000000..ca3dccb0 --- /dev/null +++ b/src/nos/lib/iar_lib/USDIVASGDEprim.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?US_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?US_DIVASG_DE_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D9 E1 C5 44 4D CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 09 00 00 00 C1 D5 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USDIVASGIX.rel b/src/nos/lib/iar_lib/USDIVASGIX.rel new file mode 100644 index 00000000..25dcf72d --- /dev/null +++ b/src/nos/lib/iar_lib/USDIVASGIX.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?US_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?US_DIVASG_IX_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 DD E5 D1 CD 00 00 00 00 D5 EB +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 DD E1 D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USDIVASGIY.rel b/src/nos/lib/iar_lib/USDIVASGIY.rel new file mode 100644 index 00000000..9d67ca9e --- /dev/null +++ b/src/nos/lib/iar_lib/USDIVASGIY.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?US_DIV_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?US_DIVASG_IY_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 FD E5 D1 CD 00 00 00 00 D5 EB +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 FD E1 D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USMOD.rel b/src/nos/lib/iar_lib/USMOD.rel new file mode 100644 index 00000000..e3dbb08b --- /dev/null +++ b/src/nos/lib/iar_lib/USMOD.rel @@ -0,0 +1,11 @@ +XL4 +H 2 areas 3 global symbols +S ?S_DIVMOD_L02 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 9 flags 0 +S ?US_MOD_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F5 E5 CD 00 00 00 00 EB E1 F1 C9 +R 00 00 01 00 02 07 00 00 diff --git a/src/nos/lib/iar_lib/USMODASG.rel b/src/nos/lib/iar_lib/USMODASG.rel new file mode 100644 index 00000000..0d82fda7 --- /dev/null +++ b/src/nos/lib/iar_lib/USMODASG.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?US_MOD_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?US_MODASG_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 CD 00 00 00 00 72 2B 73 +R 00 00 01 00 02 08 01 00 +T 09 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USMODASGBCprim.rel b/src/nos/lib/iar_lib/USMODASGBCprim.rel new file mode 100644 index 00000000..c8a10822 --- /dev/null +++ b/src/nos/lib/iar_lib/USMODASGBCprim.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?US_MOD_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 12 flags 0 +S ?US_MODASG_BC_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D9 EB E3 50 59 44 4D CD +R 00 00 01 00 +T 09 00 00 00 00 00 00 00 42 4B D1 C5 D9 E1 C9 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/iar_lib/USMODASGDEprim.rel b/src/nos/lib/iar_lib/USMODASGDEprim.rel new file mode 100644 index 00000000..11847a0e --- /dev/null +++ b/src/nos/lib/iar_lib/USMODASGDEprim.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?US_MOD_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size E flags 0 +S ?US_MODASG_DE_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D9 E1 C5 44 4D CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 09 00 00 00 C1 D5 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USMODASGIX.rel b/src/nos/lib/iar_lib/USMODASGIX.rel new file mode 100644 index 00000000..35a294f6 --- /dev/null +++ b/src/nos/lib/iar_lib/USMODASGIX.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?US_MOD_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?US_MODASG_IX_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 DD E5 D1 CD 00 00 00 00 D5 EB +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 DD E1 D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USMODASGIY.rel b/src/nos/lib/iar_lib/USMODASGIY.rel new file mode 100644 index 00000000..a134027b --- /dev/null +++ b/src/nos/lib/iar_lib/USMODASGIY.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S .__.ABS. Def00000000 +S ?US_MOD_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?US_MODASG_IY_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 FD E5 D1 CD 00 00 00 00 D5 EB +R 00 00 01 00 02 09 01 00 +T 09 00 00 00 FD E1 D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USRSH.rel b/src/nos/lib/iar_lib/USRSH.rel new file mode 100644 index 00000000..b4481ed7 --- /dev/null +++ b/src/nos/lib/iar_lib/USRSH.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?US_RSH_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 05 C8 CB 3A CB 1B 10 FA C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USRSHASG.rel b/src/nos/lib/iar_lib/USRSHASG.rel new file mode 100644 index 00000000..51378d18 --- /dev/null +++ b/src/nos/lib/iar_lib/USRSHASG.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S ?US_RSH_L02 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?US_RSHASG_L02 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 5E 23 56 CD 00 00 00 00 72 2B 73 +R 00 00 01 00 02 08 00 00 +T 09 00 00 00 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USRSHASGBCprim.rel b/src/nos/lib/iar_lib/USRSHASGBCprim.rel new file mode 100644 index 00000000..907f455b --- /dev/null +++ b/src/nos/lib/iar_lib/USRSHASGBCprim.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F flags 0 +S ?US_RSHASG_BC_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D9 B7 28 07 CB 38 CB 19 3D 20 F9 +R 00 00 01 00 +T 0B 00 00 00 C5 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USRSHASGDEprim.rel b/src/nos/lib/iar_lib/USRSHASGDEprim.rel new file mode 100644 index 00000000..a7dcaaf9 --- /dev/null +++ b/src/nos/lib/iar_lib/USRSHASGDEprim.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size F flags 0 +S ?US_RSHASG_DE_prim_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D9 B7 28 07 CB 3A CB 1B 3D 20 F9 +R 00 00 01 00 +T 0B 00 00 00 D5 D9 E1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USRSHASGIX.rel b/src/nos/lib/iar_lib/USRSHASGIX.rel new file mode 100644 index 00000000..43eacbff --- /dev/null +++ b/src/nos/lib/iar_lib/USRSHASGIX.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S ?US_RSH_L02 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?US_RSHASG_IX_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 DD E5 D1 CD 00 00 00 00 D5 DD +R 00 00 01 00 02 09 00 00 +T 09 00 00 00 E1 EB D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/USRSHASGIY.rel b/src/nos/lib/iar_lib/USRSHASGIY.rel new file mode 100644 index 00000000..df04f6ec --- /dev/null +++ b/src/nos/lib/iar_lib/USRSHASGIY.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 3 global symbols +S ?US_RSH_L02 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size D flags 0 +S ?US_RSHASG_IY_L12 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 D5 FD E5 D1 CD 00 00 00 00 D5 FD +R 00 00 01 00 02 09 00 00 +T 09 00 00 00 E1 EB D1 C9 +R 00 00 01 00 diff --git a/src/nos/lib/iar_lib/VSWITCHEND.rel b/src/nos/lib/iar_lib/VSWITCHEND.rel new file mode 100644 index 00000000..8669edc4 --- /dev/null +++ b/src/nos/lib/iar_lib/VSWITCHEND.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size A flags 0 +S ?V_SWITCH_END_L06 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 09 7E 23 66 6F C1 F1 E3 C9 +R 00 00 01 00 diff --git a/src/nos/lib/internet.lib b/src/nos/lib/internet.lib new file mode 100644 index 00000000..e889140c --- /dev/null +++ b/src/nos/lib/internet.lib @@ -0,0 +1,361 @@ +internet_lib/Dcache.rel + _Dcache +internet_lib/Dcache_size.rel + _Dcache_size +internet_lib/Dcache_time.rel + _Dcache_time +internet_lib/Dfile_clean.rel + _Dfile_clean +internet_lib/Dfile_reading.rel + _Dfile_reading +internet_lib/Dfile_writing.rel + _Dfile_writing +internet_lib/Dfile_updater.rel + _Dfile_updater +internet_lib/Dfile_wait_absolute.rel + _Dfile_wait_absolute +internet_lib/Dfile_wait_relative.rel + _Dfile_wait_relative +internet_lib/Dservers.rel + _Dservers +internet_lib/Dserver_retries.rel + _Dserver_retries +internet_lib/Dsuffix.rel + _Dsuffix +internet_lib/Dtrace.rel + _Dtrace +internet_lib/Dtypes.rel + _Dtypes +internet_lib/Ndtypes.rel + _Ndtypes +internet_lib/delim.rel + _delim +internet_lib/Dcmds.rel + _Dcmds +internet_lib/Dcachecmds.rel + _Dcachecmds +internet_lib/dodomain.rel + _dodomain +internet_lib/docache.rel + _docache +internet_lib/dosuffix.rel + _dosuffix +internet_lib/docacheclean.rel + _docacheclean +internet_lib/docachelist.rel + _docachelist +internet_lib/docachesize.rel + _docachesize +internet_lib/docachewait.rel + _docachewait +internet_lib/dlist_add.rel + _dlist_add +internet_lib/dlist_drop.rel + _dlist_drop +internet_lib/dodnsadd.rel + _dodnsadd +internet_lib/add_nameserver.rel + _add_nameserver +internet_lib/dodnsdrop.rel + _dodnsdrop +internet_lib/dodnslist.rel + _dodnslist +internet_lib/dodnsquery.rel + _dodnsquery +internet_lib/dodnsretry.rel + _dodnsretry +internet_lib/dodnstrace.rel + _dodnstrace +internet_lib/dtype.rel + _dtype +internet_lib/check_ttl.rel + _check_ttl +internet_lib/compare_rr.rel + _compare_rr +internet_lib/compare_rr_list.rel + _compare_rr_list +internet_lib/copy_rr.rel + _copy_rr +internet_lib/copy_rr_list.rel + _copy_rr_list +internet_lib/free_rr.rel + _free_rr +internet_lib/make_rr.rel + _make_rr +internet_lib/dcache_add.rel + _dcache_add +internet_lib/dcache_drop.rel + _dcache_drop +internet_lib/dcache_search.rel + _dcache_search +internet_lib/dcache_update.rel + _dcache_update +internet_lib/get_rr.rel + _get_rr +internet_lib/put_rr.rel + _put_rr +internet_lib/dfile_search.rel + _dfile_search +internet_lib/dfile_update.rel + _dfile_update +internet_lib/dumpdomain.rel + _dumpdomain +internet_lib/dns_makequery.rel + _dns_makequery +internet_lib/dns_query.rel + _dns_query +internet_lib/isaddr.rel + _isaddr +internet_lib/checksuffix.rel + _checksuffix +internet_lib/resolver.rel + _resolver +internet_lib/inverse_a.rel + _inverse_a +internet_lib/resolve_rr.rel + _resolve_rr +internet_lib/resolve_a.rel + _resolve_a +internet_lib/resolve.rel + _resolve +internet_lib/resolve_mx.rel + _resolve_mx +internet_lib/resolve_mailb.rel + _resolve_mailb +internet_lib/domhdr.rel + _ntohdomain +internet_lib/hop.rel + _dohop +internet_lib/icmp.rel + _icmp_input + _icmp_output + _Icmp_mib +internet_lib/icmpcmd.rel + _doicmp + _Icmp_trace + _Icmp_echo +internet_lib/icmphdr.rel + _ntohicmp + _htonicmp +internet_lib/icmpmsg.rel + _Unreach + _Said_icmp + _Exceed + _Redirect + _Icmptypes +internet_lib/Ip_mib.rel + _Ip_mib +internet_lib/Reasmq.rel + _Reasmq +internet_lib/Id_cntr.rel + _Id_cntr +internet_lib/Rawip.rel + _Rawip +internet_lib/Ip_trace.rel + _Ip_trace +internet_lib/ip_send.rel + _ip_send +internet_lib/ip_recv.rel + _ip_recv +internet_lib/ipip_recv.rel + _ipip_recv +internet_lib/fraghandle.rel + _fraghandle +internet_lib/raw_ip.rel + _raw_ip +internet_lib/del_ip.rel + _del_ip +internet_lib/lookup_reasm.rel + _lookup_reasm +internet_lib/creat_reasm.rel + _creat_reasm +internet_lib/free_reasm.rel + _free_reasm +internet_lib/ip_timeout.rel + _ip_timeout +internet_lib/newfrag.rel + _newfrag +internet_lib/freefrag.rel + _freefrag +internet_lib/ip_garbage.rel + _ip_garbage +internet_lib/ttldec.rel + _ttldec +internet_lib/rquench.rel + _rquench +internet_lib/ipcmd.rel + _doroute + _doip + _Ip_addr +internet_lib/iphdr.rel + _ntohip + _htonip + _cksum + _eac +internet_lib/Routes.rel + _Routes +internet_lib/route.rel + _R_default +internet_lib/Rt_cache.rel + _Rt_cache +internet_lib/Rtlookups.rel + _Rtlookups +internet_lib/Rtchits.rel + _Rtchits +internet_lib/ipinit.rel + _ipinit +internet_lib/ip_route.rel + _ip_route +internet_lib/q_pkt.rel + _q_pkt +internet_lib/ip_proc.rel + _ip_proc +internet_lib/ip_encap.rel + _ip_encap +internet_lib/rt_add.rel + _rt_add +internet_lib/rt_drop.rel + _rt_drop +internet_lib/ip_mtu.rel + _ip_mtu +internet_lib/locaddr.rel + _locaddr +internet_lib/rt_lookup.rel + _rt_lookup +internet_lib/rt_blookup.rel + _rt_blookup +internet_lib/rt_merge.rel + _rt_merge +internet_lib/rt_timeout.rel + _rt_timeout +internet_lib/ipsock.rel + _so_ip_close + _ippsocket + _so_ip_send + _so_ip_conn + _so_ip_sock + _so_ip_recv + _so_ip_qlen + _checkipaddr + _Inet_eol +internet_lib/netuser.rel + _inet_ntoa + _pinet + _aton + _htol + _Net_error +internet_lib/ping.rel + _pingem + _doping + _echo_proc +internet_lib/sim.rel + _dosim + _net_sim + _Simctl +internet_lib/tcpcmd.rel + _st_tcp + _dotcp + _Tcp_tstamps +internet_lib/tcphdr.rel + _ntohtcp + _htontcp +internet_lib/tcp_input.rel + _tcp_input +internet_lib/tcp_icmp.rel + _tcp_icmp +internet_lib/reset.rel + _reset +internet_lib/update.rel + _update +internet_lib/in_window.rel + _in_window +internet_lib/proc_syn.rel + _proc_syn +internet_lib/send_syn.rel + _send_syn +internet_lib/add_reseq.rel + _add_reseq +internet_lib/get_reseq.rel + _get_reseq +internet_lib/trim.rel + _trim +internet_lib/tcpout.rel + _tcp_output +internet_lib/tcpsock.rel + _so_tcp + _so_tcp_kick + _so_tcp_send + _start_tcp + _so_tcp_conn + _so_tcp_recv + _so_tcp_qlen + _so_tcp_stat + _tcpstate + _so_tcp_shut + _stop_tcp + _so_tcp_listen + _so_tcp_close + _Inet_list + _Lport +internet_lib/tcpsubr.rel + _seq_gt + _seq_lt + _create_tcb + _close_self + _rtt_add + _tcp_garbage + _lookup_tcb + _settcpstate + _seq_ge + _rtt_get + _seq_within + _Tcbs + _Tcp_trace + _Tcp_rtt + _Tcp_syndata + _Tcp_irtt + _Tcp_mss + _Tcpreasons + _Tcpstates + _Tcp_mib +internet_lib/tcptimer.rel + _backoff + _tcp_timeout +internet_lib/tcpuser.rel + _kick_tcp + _reset_tcp + _tcpval + _send_tcp + _recv_tcp + _open_tcp + _del_tcp + _kick + _reset_all + _close_tcp + _Tcp_window +internet_lib/udp.rel + _send_udp + _udp_input + _recv_udp + _open_udp + _del_udp + _udp_garbage + _Udps + _Udp_mib +internet_lib/udpcmd.rel + _st_udp + _doudp +internet_lib/udphdr.rel + _ntohudp + _htonudp + _udpcksum +internet_lib/udpsock.rel + _so_udp_bind + _so_udp + _so_udp_send + _so_udp_conn + _so_udp_recv + _so_udp_qlen + _so_udp_stat + _so_udp_shut + _so_udp_close diff --git a/src/nos/lib/internet_lib/Dcache.rel b/src/nos/lib/internet_lib/Dcache.rel new file mode 100644 index 00000000..2a7ebb03 --- /dev/null +++ b/src/nos/lib/internet_lib/Dcache.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Dcache Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dcache_size.rel b/src/nos/lib/internet_lib/Dcache_size.rel new file mode 100644 index 00000000..ea77bd86 --- /dev/null +++ b/src/nos/lib/internet_lib/Dcache_size.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Dcache_size Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 14 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dcache_time.rel b/src/nos/lib/internet_lib/Dcache_time.rel new file mode 100644 index 00000000..442203c5 --- /dev/null +++ b/src/nos/lib/internet_lib/Dcache_time.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 4 flags 0 +S _Dcache_time Def00000000 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dcachecmds.rel b/src/nos/lib/internet_lib/Dcachecmds.rel new file mode 100644 index 00000000..380b3dca --- /dev/null +++ b/src/nos/lib/internet_lib/Dcachecmds.rel @@ -0,0 +1,37 @@ +XL4 +H 4 areas B global symbols +S _docachesize Ref00000000 +S _docachelist Ref00000000 +S _docacheclean Ref00000000 +S ___05dd_d63a_wait Ref00000000 +S ___04b8_7bad_list Ref00000000 +S ___057a_dce5_size Ref00000000 +S ___0437_4822_clean Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _docachewait Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 41 flags 0 +S _Dcachecmds Def00000000 +A CDATA0 size 41 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 06 00 4A 08 02 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 04 00 +T 10 00 00 00 00 00 00 00 00 02 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 +T 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 05 00 4A 08 00 00 +T 22 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 03 00 +T 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 09 00 +T 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 3F 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dcmds.rel b/src/nos/lib/internet_lib/Dcmds.rel new file mode 100644 index 00000000..6478ef15 --- /dev/null +++ b/src/nos/lib/internet_lib/Dcmds.rel @@ -0,0 +1,60 @@ +XL4 +H 4 areas 16 global symbols +S _dodnsadd Ref00000000 +S _docache Ref00000000 +S ___042a_7cbf_cache Ref00000000 +S _dodnsdrop Ref00000000 +S _dodnsretry Ref00000000 +S _dodnsquery Ref00000000 +S _dodnslist Ref00000000 +S ___0552_0acb_retry Ref00000000 +S ___04b8_7bad_list Ref00000000 +S ___0536_0bef_query Ref00000000 +S .__.ABS. Def00000000 +S _dodnstrace Ref00000000 +S _dosuffix Ref00000000 +S ___0537_6646_query_20_3chostid_3 Ref00000000 +S ___05bd_4f5f_trace Ref00000000 +S ___059a_bec3_suffix Ref00000000 +S ___046f_e7cf_dropserver Ref00000000 +S ___046e_0532_drop_20_3chostid_3e Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___03fe_d8a3_add_20_3chostid_3e Ref00000000 +S ___0401_2c42_addserver Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 75 flags 0 +S _Dcmds Def00000000 +A CDATA0 size 75 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 14 00 4A 08 00 00 +T 08 00 00 00 02 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 06 13 00 4A 0A 10 00 +T 10 00 00 00 00 00 00 00 00 00 02 00 +R 00 00 03 00 4A 04 03 00 +T 17 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 11 00 4A 08 08 00 +T 1D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 06 00 +T 27 00 00 00 00 00 00 00 00 00 00 00 00 02 +R 00 00 03 00 4A 04 09 00 4A 08 05 00 +T 2F 00 00 00 02 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 06 0D 00 4A 0A 07 00 +T 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 04 00 +T 41 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0F 00 4A 08 0C 00 +T 49 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 0E 00 +T 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0B 00 +T 5B 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 02 00 4A 08 01 00 +T 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 6E 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dfile_clean.rel b/src/nos/lib/internet_lib/Dfile_clean.rel new file mode 100644 index 00000000..b9e86cf7 --- /dev/null +++ b/src/nos/lib/internet_lib/Dfile_clean.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Dfile_clean Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dfile_reading.rel b/src/nos/lib/internet_lib/Dfile_reading.rel new file mode 100644 index 00000000..ed4dcf18 --- /dev/null +++ b/src/nos/lib/internet_lib/Dfile_reading.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Dfile_reading Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dfile_updater.rel b/src/nos/lib/internet_lib/Dfile_updater.rel new file mode 100644 index 00000000..c499395a --- /dev/null +++ b/src/nos/lib/internet_lib/Dfile_updater.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Dfile_updater Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dfile_wait_absolute.rel b/src/nos/lib/internet_lib/Dfile_wait_absolute.rel new file mode 100644 index 00000000..cc09ba24 --- /dev/null +++ b/src/nos/lib/internet_lib/Dfile_wait_absolute.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 4 flags 0 +S _Dfile_wait_absolute Def00000000 +A CDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dfile_wait_relative.rel b/src/nos/lib/internet_lib/Dfile_wait_relative.rel new file mode 100644 index 00000000..e4285932 --- /dev/null +++ b/src/nos/lib/internet_lib/Dfile_wait_relative.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Dfile_wait_relative Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2C 01 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dfile_writing.rel b/src/nos/lib/internet_lib/Dfile_writing.rel new file mode 100644 index 00000000..17261946 --- /dev/null +++ b/src/nos/lib/internet_lib/Dfile_writing.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Dfile_writing Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dserver_retries.rel b/src/nos/lib/internet_lib/Dserver_retries.rel new file mode 100644 index 00000000..e0470326 --- /dev/null +++ b/src/nos/lib/internet_lib/Dserver_retries.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Dserver_retries Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 02 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dservers.rel b/src/nos/lib/internet_lib/Dservers.rel new file mode 100644 index 00000000..b733e32c --- /dev/null +++ b/src/nos/lib/internet_lib/Dservers.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Dservers Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dsuffix.rel b/src/nos/lib/internet_lib/Dsuffix.rel new file mode 100644 index 00000000..6c741231 --- /dev/null +++ b/src/nos/lib/internet_lib/Dsuffix.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Dsuffix Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dtrace.rel b/src/nos/lib/internet_lib/Dtrace.rel new file mode 100644 index 00000000..16253d53 --- /dev/null +++ b/src/nos/lib/internet_lib/Dtrace.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Dtrace Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Dtypes.rel b/src/nos/lib/internet_lib/Dtypes.rel new file mode 100644 index 00000000..3bc31d0d --- /dev/null +++ b/src/nos/lib/internet_lib/Dtypes.rel @@ -0,0 +1,100 @@ +XL4 +H 5 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size 3F flags 0 +A IDATA0 size 22 flags 0 +S _Dtypes Def00000000 +A CDATA0 size 22 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 +T 01 00 00 00 +R 00 00 02 00 +T 01 00 00 00 41 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 4E 53 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 4D 44 00 +R 00 00 02 00 +T 09 00 00 00 +R 00 00 02 00 +T 09 00 00 00 4D 46 00 +R 00 00 02 00 +T 0C 00 00 00 +R 00 00 02 00 +T 0C 00 00 00 43 4E 41 4D 45 00 +R 00 00 02 00 +T 12 00 00 00 +R 00 00 02 00 +T 12 00 00 00 53 4F 41 00 +R 00 00 02 00 +T 16 00 00 00 +R 00 00 02 00 +T 16 00 00 00 4D 42 00 +R 00 00 02 00 +T 19 00 00 00 +R 00 00 02 00 +T 19 00 00 00 4D 47 00 +R 00 00 02 00 +T 1C 00 00 00 +R 00 00 02 00 +T 1C 00 00 00 4D 52 00 +R 00 00 02 00 +T 1F 00 00 00 +R 00 00 02 00 +T 1F 00 00 00 4E 55 4C 4C 00 +R 00 00 02 00 +T 24 00 00 00 +R 00 00 02 00 +T 24 00 00 00 57 4B 53 00 +R 00 00 02 00 +T 28 00 00 00 +R 00 00 02 00 +T 28 00 00 00 50 54 52 00 +R 00 00 02 00 +T 2C 00 00 00 +R 00 00 02 00 +T 2C 00 00 00 48 49 4E 46 4F 00 +R 00 00 02 00 +T 32 00 00 00 +R 00 00 02 00 +T 32 00 00 00 4D 49 4E 46 4F 00 +R 00 00 02 00 +T 38 00 00 00 +R 00 00 02 00 +T 38 00 00 00 4D 58 00 +R 00 00 02 00 +T 3B 00 00 00 +R 00 00 02 00 +T 3B 00 00 00 54 58 54 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 01 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 04 00 00 00 03 00 00 00 06 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 08 00 00 00 09 00 00 00 0C 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0C 00 00 00 12 00 00 00 16 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 10 00 00 00 19 00 00 00 1C 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 14 00 00 00 1F 00 00 00 24 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 18 00 00 00 28 00 00 00 2C 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 1C 00 00 00 32 00 00 00 38 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 20 00 00 00 3B 00 00 00 +R 00 00 04 00 00 04 02 00 diff --git a/src/nos/lib/internet_lib/Id_cntr.rel b/src/nos/lib/internet_lib/Id_cntr.rel new file mode 100644 index 00000000..4a8f5f93 --- /dev/null +++ b/src/nos/lib/internet_lib/Id_cntr.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Id_cntr Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Ip_mib.rel b/src/nos/lib/internet_lib/Ip_mib.rel new file mode 100644 index 00000000..2b03f6fc --- /dev/null +++ b/src/nos/lib/internet_lib/Ip_mib.rel @@ -0,0 +1,168 @@ +XL4 +H 5 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size 103 flags 0 +A IDATA0 size 78 flags 0 +S _Ip_mib Def00000000 +A CDATA0 size 78 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 +T 01 00 00 00 +R 00 00 02 00 +T 01 00 00 00 69 70 46 6F 72 77 61 72 64 69 6E +R 00 00 02 00 +T 0C 00 00 00 67 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 69 70 44 65 66 61 75 6C 74 54 54 +R 00 00 02 00 +T 19 00 00 00 4C 00 +R 00 00 02 00 +T 1B 00 00 00 +R 00 00 02 00 +T 1B 00 00 00 69 70 49 6E 52 65 63 65 69 76 65 +R 00 00 02 00 +T 26 00 00 00 73 00 +R 00 00 02 00 +T 28 00 00 00 +R 00 00 02 00 +T 28 00 00 00 69 70 49 6E 48 64 72 45 72 72 6F +R 00 00 02 00 +T 33 00 00 00 72 73 00 +R 00 00 02 00 +T 36 00 00 00 +R 00 00 02 00 +T 36 00 00 00 69 70 49 6E 41 64 64 72 45 72 72 +R 00 00 02 00 +T 41 00 00 00 6F 72 73 00 +R 00 00 02 00 +T 45 00 00 00 +R 00 00 02 00 +T 45 00 00 00 69 70 46 6F 72 77 44 61 74 61 67 +R 00 00 02 00 +T 50 00 00 00 72 61 6D 73 00 +R 00 00 02 00 +T 55 00 00 00 +R 00 00 02 00 +T 55 00 00 00 69 70 49 6E 55 6E 6B 6E 6F 77 6E +R 00 00 02 00 +T 60 00 00 00 50 72 6F 74 6F 73 00 +R 00 00 02 00 +T 67 00 00 00 +R 00 00 02 00 +T 67 00 00 00 69 70 49 6E 44 69 73 63 61 72 64 +R 00 00 02 00 +T 72 00 00 00 73 00 +R 00 00 02 00 +T 74 00 00 00 +R 00 00 02 00 +T 74 00 00 00 69 70 49 6E 44 65 6C 69 76 65 72 +R 00 00 02 00 +T 7F 00 00 00 73 00 +R 00 00 02 00 +T 81 00 00 00 +R 00 00 02 00 +T 81 00 00 00 69 70 4F 75 74 52 65 71 75 65 73 +R 00 00 02 00 +T 8C 00 00 00 74 73 00 +R 00 00 02 00 +T 8F 00 00 00 +R 00 00 02 00 +T 8F 00 00 00 69 70 4F 75 74 44 69 73 63 61 72 +R 00 00 02 00 +T 9A 00 00 00 64 73 00 +R 00 00 02 00 +T 9D 00 00 00 +R 00 00 02 00 +T 9D 00 00 00 69 70 4F 75 74 4E 6F 52 6F 75 74 +R 00 00 02 00 +T A8 00 00 00 65 73 00 +R 00 00 02 00 +T AB 00 00 00 +R 00 00 02 00 +T AB 00 00 00 69 70 52 65 61 73 6D 54 69 6D 65 +R 00 00 02 00 +T B6 00 00 00 6F 75 74 00 +R 00 00 02 00 +T BA 00 00 00 +R 00 00 02 00 +T BA 00 00 00 69 70 52 65 61 73 6D 52 65 71 64 +R 00 00 02 00 +T C5 00 00 00 73 00 +R 00 00 02 00 +T C7 00 00 00 +R 00 00 02 00 +T C7 00 00 00 69 70 52 65 61 73 6D 4F 4B 73 00 +R 00 00 02 00 +T D2 00 00 00 +R 00 00 02 00 +T D2 00 00 00 69 70 52 65 61 73 6D 46 61 69 6C +R 00 00 02 00 +T DD 00 00 00 73 00 +R 00 00 02 00 +T DF 00 00 00 +R 00 00 02 00 +T DF 00 00 00 69 70 46 72 61 67 4F 4B 73 00 +R 00 00 02 00 +T E9 00 00 00 +R 00 00 02 00 +T E9 00 00 00 69 70 46 72 61 67 46 61 69 6C 73 +R 00 00 02 00 +T F4 00 00 00 00 +R 00 00 02 00 +T F5 00 00 00 +R 00 00 02 00 +T F5 00 00 00 69 70 46 72 61 67 43 72 65 61 74 +R 00 00 02 00 +T 00 01 00 00 65 73 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 06 00 00 00 01 00 00 00 01 00 00 00 +R 00 00 04 00 00 04 02 00 +T 0C 00 00 00 0E 00 00 00 FF 00 00 00 +R 00 00 04 00 00 04 02 00 +T 12 00 00 00 1B 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 18 00 00 00 28 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 1E 00 00 00 36 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 24 00 00 00 45 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 2A 00 00 00 55 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 30 00 00 00 67 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 36 00 00 00 74 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 3C 00 00 00 81 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 42 00 00 00 8F 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 48 00 00 00 9D 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 4E 00 00 00 AB 00 00 00 1E 00 00 00 +R 00 00 04 00 00 04 02 00 +T 54 00 00 00 BA 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 5A 00 00 00 C7 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 60 00 00 00 D2 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 66 00 00 00 DF 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 6C 00 00 00 E9 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 72 00 00 00 F5 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 diff --git a/src/nos/lib/internet_lib/Ip_trace.rel b/src/nos/lib/internet_lib/Ip_trace.rel new file mode 100644 index 00000000..f5790b82 --- /dev/null +++ b/src/nos/lib/internet_lib/Ip_trace.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Ip_trace Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Ndtypes.rel b/src/nos/lib/internet_lib/Ndtypes.rel new file mode 100644 index 00000000..9d6ff4e4 --- /dev/null +++ b/src/nos/lib/internet_lib/Ndtypes.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Ndtypes Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 11 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/Rawip.rel b/src/nos/lib/internet_lib/Rawip.rel new file mode 100644 index 00000000..eebec1d8 --- /dev/null +++ b/src/nos/lib/internet_lib/Rawip.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _Rawip Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/Reasmq.rel b/src/nos/lib/internet_lib/Reasmq.rel new file mode 100644 index 00000000..4758162f --- /dev/null +++ b/src/nos/lib/internet_lib/Reasmq.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _Reasmq Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/Routes.rel b/src/nos/lib/internet_lib/Routes.rel new file mode 100644 index 00000000..ef5a717a --- /dev/null +++ b/src/nos/lib/internet_lib/Routes.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 1C0 flags 0 +S _Routes Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/Rt_cache.rel b/src/nos/lib/internet_lib/Rt_cache.rel new file mode 100644 index 00000000..ece78a4b --- /dev/null +++ b/src/nos/lib/internet_lib/Rt_cache.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2A flags 0 +S _Rt_cache Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/Rtchits.rel b/src/nos/lib/internet_lib/Rtchits.rel new file mode 100644 index 00000000..1af1c2aa --- /dev/null +++ b/src/nos/lib/internet_lib/Rtchits.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 4 flags 0 +S _Rtchits Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/Rtlookups.rel b/src/nos/lib/internet_lib/Rtlookups.rel new file mode 100644 index 00000000..f8e822cc --- /dev/null +++ b/src/nos/lib/internet_lib/Rtlookups.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 4 flags 0 +S _Rtlookups Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/add_nameserver.rel b/src/nos/lib/internet_lib/add_nameserver.rel new file mode 100644 index 00000000..0e8c23cf --- /dev/null +++ b/src/nos/lib/internet_lib/add_nameserver.rel @@ -0,0 +1,52 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _callocw Ref00000000 +S _dlist_add Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B5 flags 0 +S _add_nameserver Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 01 1C 00 11 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 01 04 00 09 DD 4E 04 +R 00 00 01 00 +T 20 00 00 00 DD 46 05 DD 5E 02 DD 56 03 73 23 +R 00 00 01 00 +T 2B 00 00 00 72 23 71 23 70 21 0C 00 DD 4E FE +R 00 00 01 00 +T 36 00 00 00 DD 46 FF 09 AF 36 D0 23 36 07 23 +R 00 00 01 00 +T 41 00 00 00 77 23 77 21 10 00 09 AF 77 23 77 +R 00 00 01 00 +T 4C 00 00 00 23 77 23 77 21 10 00 09 4E 23 46 +R 00 00 01 00 +T 57 00 00 00 23 5E 23 56 69 60 29 CB 13 CB 12 +R 00 00 01 00 +T 62 00 00 00 D5 E5 21 0C 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T 6D 00 00 00 09 4E 23 46 23 5E 23 56 69 60 C1 +R 00 00 01 00 +T 78 00 00 00 09 EB C1 ED 4A E5 D5 21 03 00 C1 +R 00 00 01 00 +T 83 00 00 00 09 EB 21 00 00 C1 ED 4A 4D 44 EB +R 00 00 01 00 +T 8E 00 00 00 E5 21 08 00 DD 5E FE DD 56 FF 19 +R 00 00 01 00 +T 99 00 00 00 D1 73 23 72 23 71 23 70 DD 5E FE +R 00 00 01 00 +T A4 00 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T AA 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T B0 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/internet_lib/add_reseq.rel b/src/nos/lib/internet_lib/add_reseq.rel new file mode 100644 index 00000000..42559a98 --- /dev/null +++ b/src/nos/lib/internet_lib/add_reseq.rel @@ -0,0 +1,123 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _seq_lt Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 163 flags 0 +S _add_reseq Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 11 26 00 3E +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 0E 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 00 00 +T 17 00 00 00 B4 20 11 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 22 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 29 00 00 00 60 01 00 00 +R 00 00 01 00 00 04 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 5E FC DD 56 FD 13 13 DD 6E 0A +R 00 00 01 00 +T 36 00 00 00 DD 66 0B 01 1F 00 ED B0 21 25 00 +R 00 00 01 00 +T 41 00 00 00 DD 4E FC DD 46 FD 09 DD 56 04 72 +R 00 00 01 00 +T 4C 00 00 00 21 21 00 09 E5 DD 6E 0C DD 66 0D +R 00 00 01 00 +T 57 00 00 00 5E 23 56 E1 73 23 72 DD 6E 0C DD +R 00 00 01 00 +T 62 00 00 00 66 0D AF 77 23 77 21 23 00 09 DD +R 00 00 01 00 +T 6D 00 00 00 4E 0E DD 46 0F 71 23 70 21 80 00 +R 00 00 01 00 +T 78 00 00 00 DD 4E 02 DD 46 03 09 46 23 66 68 +R 00 00 01 00 +T 83 00 00 00 DD 75 FE DD 74 FF 7D B4 28 32 21 +R 00 00 01 00 +T 8E 00 00 00 06 00 DD 4E FE DD 46 FF 09 4E 23 +R 00 00 01 00 +T 99 00 00 00 46 23 5E 23 56 D5 C5 21 04 00 DD +R 00 00 01 00 +T A4 00 00 00 4E 0A DD 46 0B 09 5E 23 56 23 4E +R 00 00 01 00 +T AF 00 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T B4 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T BB 00 00 00 7D B4 28 26 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD +R 00 00 01 00 +T CA 00 00 00 66 FD C1 71 23 70 21 80 00 DD 4E +R 00 00 01 00 +T D5 00 00 00 02 DD 46 03 09 DD 4E FC DD 46 FD +R 00 00 01 00 +T E0 00 00 00 71 23 70 18 7B +R 00 00 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 DD 6E FE DD 66 FF 7E 23 B6 28 36 +R 00 00 01 00 +T F0 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 01 +R 00 00 01 00 +T FB 00 00 00 06 00 09 4E 23 46 23 5E 23 56 D5 +R 00 00 01 00 +T 06 01 00 00 C5 21 04 00 DD 4E 0A DD 46 0B 09 +R 00 00 01 00 +T 11 01 00 00 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 19 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 1E 01 00 00 00 00 00 00 F1 F1 7D B4 28 28 +R 00 00 01 00 02 04 00 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 DD 6E FE DD 66 FF 46 23 66 68 E5 +R 00 00 01 00 +T 31 01 00 00 DD 6E FC DD 66 FD C1 71 23 70 DD +R 00 00 01 00 +T 3C 01 00 00 6E FC DD 66 FD E5 DD 6E FE DD 66 +R 00 00 01 00 +T 47 01 00 00 FF C1 71 23 70 18 12 +R 00 00 01 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T 59 01 00 00 75 FE DD 74 FF 18 85 +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/internet_lib/check_ttl.rel b/src/nos/lib/internet_lib/check_ttl.rel new file mode 100644 index 00000000..2c8d1273 --- /dev/null +++ b/src/nos/lib/internet_lib/check_ttl.rel @@ -0,0 +1,41 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4C flags 0 +S _check_ttl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF AF DD 77 FE +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 DD 77 FF +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 DD 7E 02 DD B6 03 28 2F +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 21 09 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 1F 00 00 00 23 B6 23 B6 23 B6 20 08 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 3A 00 00 00 68 DD 75 02 DD 74 03 18 C9 +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 00 00 diff --git a/src/nos/lib/internet_lib/checksuffix.rel b/src/nos/lib/internet_lib/checksuffix.rel new file mode 100644 index 00000000..9e854fb7 --- /dev/null +++ b/src/nos/lib/internet_lib/checksuffix.rel @@ -0,0 +1,114 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sprintf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S _strdupw Ref00000000 +S _Dsuffix Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10B flags 0 +S _checksuffix Def00000000 +A CSTR size A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 01 2E 00 EB 3E +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 23 00 00 00 00 00 00 00 7D B4 20 6E 2A +R 00 00 01 00 02 04 00 00 +T 2A 00 00 00 00 00 00 00 7D B4 28 67 +R 00 00 01 00 02 04 06 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 06 00 2B 0B 04 00 +T 36 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 3D 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 45 00 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 4C 00 00 00 44 E1 09 EB 13 13 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 54 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 5B 00 00 00 75 FE DD 74 FF ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 64 00 00 00 C5 DD 4E FC DD 46 FD C5 01 +R 00 00 01 00 +T 6D 00 00 00 00 00 00 00 C5 E5 3E 00 00 00 00 +R 00 00 01 00 00 04 02 00 2B 0B 01 00 +T 73 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 7A 00 00 00 F1 F1 F1 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 84 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 89 00 00 00 00 00 00 00 DD 6E FE DD 66 FF DD +R 00 00 01 00 02 04 00 00 +T 92 00 00 00 75 FC DD 74 FD +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 9F 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T A6 00 00 00 4E FC DD 46 FD 09 2B 7E FE 2E 28 +R 00 00 01 00 +T B1 00 00 00 50 +R 00 00 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T BA 00 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T C1 00 00 00 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T C6 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T CD 00 00 00 FE DD 74 FF DD 4E FC DD 46 FD C5 +R 00 00 01 00 +T D8 00 00 00 01 06 00 00 00 C5 E5 3E +R 00 00 01 00 00 05 02 00 +T DE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T E3 00 00 00 00 00 00 00 F1 F1 F1 DD 5E FC DD +R 00 00 01 00 02 04 00 00 +T EC 00 00 00 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T F1 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 08 00 02 09 00 00 +T F8 00 00 00 FE DD 66 FF DD 75 FC DD 74 FD +R 00 00 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 73 2E 25 73 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 25 73 2E 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/compare_rr.rel b/src/nos/lib/internet_lib/compare_rr.rel new file mode 100644 index 00000000..4e9ab982 --- /dev/null +++ b/src/nos/lib/internet_lib/compare_rr.rel @@ -0,0 +1,317 @@ +XL4 +H 2 areas B global symbols +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _strcmp Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _strnicmp Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31D flags 0 +S _compare_rr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 B6 03 28 08 DD 7E 04 DD B6 05 20 +R 00 00 01 00 +T 14 00 00 00 06 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 03 80 C3 1A 03 00 00 +R 00 00 01 00 00 08 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 21 0D 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 26 00 00 00 23 66 68 E5 21 0D 00 DD 4E 04 DD +R 00 00 01 00 +T 31 00 00 00 46 05 09 4E 23 46 E1 A7 ED 42 28 +R 00 00 01 00 +T 3C 00 00 00 06 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 05 80 C3 1A 03 00 00 +R 00 00 01 00 00 08 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 21 0F 00 DD 4E 02 DD 46 03 09 3E +R 00 00 01 00 +T 4E 00 00 00 FF AE 23 B6 28 59 21 0F 00 DD 4E +R 00 00 01 00 +T 59 00 00 00 02 DD 46 03 09 46 23 66 68 E5 21 +R 00 00 01 00 +T 64 00 00 00 0F 00 DD 4E 04 DD 46 05 09 4E 23 +R 00 00 01 00 +T 6F 00 00 00 46 E1 A7 ED 42 28 37 21 04 00 DD +R 00 00 01 00 +T 7A 00 00 00 4E 02 DD 46 03 09 7E FE 08 20 22 +R 00 00 01 00 +T 85 00 00 00 21 0F 00 DD 4E 04 DD 46 05 09 3E +R 00 00 01 00 +T 90 00 00 00 05 AE 23 B6 28 17 21 0F 00 DD 4E +R 00 00 01 00 +T 9B 00 00 00 04 DD 46 05 09 3E 0C AE 23 B6 28 +R 00 00 01 00 +T A6 00 00 00 06 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 21 07 80 C3 1A 03 00 00 +R 00 00 01 00 00 08 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T B8 00 00 00 FE 09 CA 4E 01 00 00 +R 00 00 01 00 00 07 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 21 07 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T C8 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T CD 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T D4 00 00 00 FE DD 74 FF E5 21 07 00 DD 4E 04 +R 00 00 01 00 +T DF 00 00 00 DD 46 05 09 5E 23 56 3E +R 00 00 01 00 +T E7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T EC 00 00 00 00 00 00 00 4D 44 E1 A7 ED 42 28 +R 00 00 01 00 02 04 01 00 +T F5 00 00 00 06 +R 00 00 01 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 21 09 80 C3 1A 03 00 00 +R 00 00 01 00 00 08 01 00 +T FC 00 00 00 +R 00 00 01 00 +T FC 00 00 00 DD 6E FE DD 66 FF E5 21 07 00 DD +R 00 00 01 00 +T 07 01 00 00 4E 04 DD 46 05 09 4E 23 46 21 +R 00 00 01 00 +T 11 01 00 00 07 00 DD 5E 02 DD 56 03 19 5E 23 +R 00 00 01 00 +T 1C 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 22 01 00 00 CD 00 00 00 00 F1 DD 75 FE DD 74 +R 00 00 01 00 02 05 01 00 +T 2B 01 00 00 FF 7D B4 28 09 +R 00 00 01 00 +T 30 01 00 00 +R 00 00 01 00 +T 30 01 00 00 DD 6E FE DD 66 FF C3 1A 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 21 11 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 44 01 00 00 23 B6 20 06 +R 00 00 01 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 21 00 00 C3 1A 03 00 00 +R 00 00 01 00 00 08 01 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 59 01 00 00 FE 08 20 06 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 21 00 00 C3 1A 03 00 00 +R 00 00 01 00 00 08 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 21 11 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 6E 01 00 00 23 B6 20 06 +R 00 00 01 00 +T 72 01 00 00 +R 00 00 01 00 +T 72 01 00 00 21 0B 80 C3 1A 03 00 00 +R 00 00 01 00 00 08 01 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 83 01 00 00 FE 09 28 19 +R 00 00 01 00 +T 87 01 00 00 +R 00 00 01 00 +T 87 01 00 00 21 09 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 92 01 00 00 23 B6 23 B6 23 B6 20 06 +R 00 00 01 00 +T 9A 01 00 00 +R 00 00 01 00 +T 9A 01 00 00 21 00 00 C3 1A 03 00 00 +R 00 00 01 00 00 08 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 21 0F 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T AB 01 00 00 23 56 CD 00 00 00 00 01 00 10 00 +R 00 00 01 00 02 07 02 00 +T B4 01 00 00 0C 03 00 00 D6 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B8 01 00 00 19 02 00 00 0C 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T BC 01 00 00 0C 03 00 00 19 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T C0 01 00 00 CA 02 00 00 19 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T C4 01 00 00 19 02 00 00 19 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T C8 01 00 00 0C 03 00 00 0C 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T CC 01 00 00 19 02 00 00 44 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T D0 01 00 00 0C 03 00 00 A0 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T D4 01 00 00 19 02 00 00 +R 00 00 01 00 00 04 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 21 13 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T E1 01 00 00 23 46 23 5E 23 56 D5 C5 21 13 00 +R 00 00 01 00 +T EC 01 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T F7 01 00 00 5E 23 56 69 60 C1 A7 ED 42 C1 20 +R 00 00 01 00 +T 02 02 00 00 05 EB ED 42 28 04 +R 00 00 01 00 +T 08 02 00 00 +R 00 00 01 00 +T 08 02 00 00 0E 01 18 02 +R 00 00 01 00 +T 0C 02 00 00 +R 00 00 01 00 +T 0C 02 00 00 0E 00 +R 00 00 01 00 +T 0E 02 00 00 +R 00 00 01 00 +T 0E 02 00 00 06 00 DD 71 FE DD 70 FF C3 +R 00 00 01 00 +T 17 02 00 00 14 03 00 00 +R 00 00 01 00 00 04 01 00 +T 19 02 00 00 +R 00 00 01 00 +T 19 02 00 00 21 13 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 24 02 00 00 23 46 21 13 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 2F 02 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 00 00 +T 36 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 3D 02 00 00 FE DD 74 FF C3 14 03 00 00 +R 00 00 01 00 00 09 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 21 13 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 4F 02 00 00 23 46 21 13 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 5A 02 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T 61 02 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 68 02 00 00 20 2B 21 15 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 73 02 00 00 09 4E 23 46 21 15 00 DD 5E 02 DD +R 00 00 01 00 +T 7E 02 00 00 56 03 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 86 02 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T 8D 02 00 00 B4 20 05 21 00 00 18 03 +R 00 00 01 00 +T 95 02 00 00 +R 00 00 01 00 +T 95 02 00 00 21 01 00 +R 00 00 01 00 +T 98 02 00 00 +R 00 00 01 00 +T 98 02 00 00 DD 75 FE DD 74 FF 18 74 +R 00 00 01 00 +T A0 02 00 00 +R 00 00 01 00 +T A0 02 00 00 21 15 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T AB 02 00 00 23 46 21 15 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T B6 02 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 00 00 +T BD 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T C4 02 00 00 FE DD 74 FF 18 4A +R 00 00 01 00 +T CA 02 00 00 +R 00 00 01 00 +T CA 02 00 00 21 17 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T D5 02 00 00 23 46 23 5E 23 56 D5 C5 21 17 00 +R 00 00 01 00 +T E0 02 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T EB 02 00 00 5E 23 56 69 60 C1 A7 ED 42 C1 20 +R 00 00 01 00 +T F6 02 00 00 05 EB ED 42 28 04 +R 00 00 01 00 +T FC 02 00 00 +R 00 00 01 00 +T FC 02 00 00 0E 01 18 02 +R 00 00 01 00 +T 00 03 00 00 +R 00 00 01 00 +T 00 03 00 00 0E 00 +R 00 00 01 00 +T 02 03 00 00 +R 00 00 01 00 +T 02 03 00 00 06 00 DD 71 FE DD 70 FF 18 08 +R 00 00 01 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 DD 36 FE 0D DD 36 FF 80 +R 00 00 01 00 +T 14 03 00 00 +R 00 00 01 00 +T 14 03 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 1A 03 00 00 +R 00 00 01 00 +T 1A 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/internet_lib/compare_rr_list.rel b/src/nos/lib/internet_lib/compare_rr_list.rel new file mode 100644 index 00000000..eb7fb888 --- /dev/null +++ b/src/nos/lib/internet_lib/compare_rr_list.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _compare_rr Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 42 flags 0 +S _compare_rr_list Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 03 00 00 00 +R 00 00 01 00 +T 03 00 00 00 +R 00 00 01 00 +T 03 00 00 00 DD 7E 02 DD B6 03 28 31 +R 00 00 01 00 +T 0B 00 00 00 +R 00 00 01 00 +T 0B 00 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 16 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 1C 00 00 00 CD 00 00 00 00 7D B4 20 05 +R 00 00 01 00 02 05 00 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 21 00 00 18 17 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 33 00 00 00 68 DD 75 02 DD 74 03 18 C7 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 21 01 80 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/internet_lib/copy_rr.rel b/src/nos/lib/internet_lib/copy_rr.rel new file mode 100644 index 00000000..2acfa2ff --- /dev/null +++ b/src/nos/lib/internet_lib/copy_rr.rel @@ -0,0 +1,211 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strdupw Ref00000000 +S .__.ABS. Def00000000 +S _callocw Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2FA flags 0 +S _copy_rr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 B6 03 20 06 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 00 00 C3 F7 02 00 00 +R 00 00 01 00 00 08 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 01 2B 00 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 1B 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 22 00 00 00 75 FE DD 74 FF 21 04 00 DD 4E 02 +R 00 00 01 00 +T 2D 00 00 00 DD 46 03 09 56 21 04 00 DD 4E FE +R 00 00 01 00 +T 38 00 00 00 DD 46 FF 09 72 21 07 00 09 E5 21 +R 00 00 01 00 +T 43 00 00 00 07 00 DD 5E 02 DD 56 03 19 5E 23 +R 00 00 01 00 +T 4E 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 54 00 00 00 CD 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 05 00 00 +T 5D 00 00 00 0F 00 09 E5 21 0F 00 DD 5E 02 DD +R 00 00 01 00 +T 68 00 00 00 56 03 19 4E 23 46 E1 71 23 70 21 +R 00 00 01 00 +T 73 00 00 00 0D 00 DD 4E FE DD 46 FF 09 E5 21 +R 00 00 01 00 +T 7E 00 00 00 0D 00 19 4E 23 46 E1 71 23 70 21 +R 00 00 01 00 +T 89 00 00 00 09 00 19 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 94 00 00 00 E5 21 09 00 DD 5E FE DD 56 FF 19 +R 00 00 01 00 +T 9F 00 00 00 D1 73 23 72 23 71 23 70 21 11 00 +R 00 00 01 00 +T AA 00 00 00 DD 4E FE DD 46 FF 09 E5 21 11 00 +R 00 00 01 00 +T B5 00 00 00 DD 4E 02 DD 46 03 09 4E 23 46 E1 +R 00 00 01 00 +T C0 00 00 00 71 23 70 79 B0 20 09 +R 00 00 01 00 +T C7 00 00 00 +R 00 00 01 00 +T C7 00 00 00 DD 6E FE DD 66 FF C3 F7 02 00 00 +R 00 00 01 00 00 0B 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 21 0F 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T DB 00 00 00 23 56 CD 00 00 00 00 01 00 10 00 +R 00 00 01 00 02 07 01 00 +T E4 00 00 00 F1 02 00 00 06 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T E8 00 00 00 2E 01 00 00 F1 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T EC 00 00 00 F1 02 00 00 2E 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T F0 00 00 00 DE 01 00 00 2E 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T F4 00 00 00 2E 01 00 00 2E 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T F8 00 00 00 F1 02 00 00 F1 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T FC 00 00 00 2E 01 00 00 57 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 00 01 00 00 F1 02 00 00 9F 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 04 01 00 00 2E 01 00 00 +R 00 00 01 00 00 04 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 21 13 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 11 01 00 00 23 56 23 4E 23 46 EB E5 21 13 00 +R 00 00 01 00 +T 1C 01 00 00 DD 5E FE DD 56 FF 19 D1 73 23 72 +R 00 00 01 00 +T 27 01 00 00 23 71 23 70 C3 F1 02 00 00 +R 00 00 01 00 00 09 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 21 13 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 39 01 00 00 21 13 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 44 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 49 01 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 50 01 00 00 E1 71 23 70 C3 F1 02 00 00 +R 00 00 01 00 00 09 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 21 13 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 62 01 00 00 21 13 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 6D 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 72 01 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 79 01 00 00 73 23 72 21 15 00 09 E5 21 15 00 +R 00 00 01 00 +T 84 01 00 00 DD 4E 02 DD 46 03 09 5E 23 56 3E +R 00 00 01 00 +T 8F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 94 01 00 00 00 00 00 00 4D 44 E1 71 23 70 C3 +R 00 00 01 00 02 04 00 00 +T 9D 01 00 00 F1 02 00 00 +R 00 00 01 00 00 04 01 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 21 13 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T AA 01 00 00 21 13 00 DD 5E 02 DD 56 03 19 4E +R 00 00 01 00 +T B5 01 00 00 23 46 E1 71 23 70 21 15 00 DD 4E +R 00 00 01 00 +T C0 01 00 00 FE DD 46 FF 09 E5 21 15 00 19 5E +R 00 00 01 00 +T CB 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T D0 01 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T D7 01 00 00 E1 71 23 70 C3 F1 02 00 00 +R 00 00 01 00 00 09 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 21 13 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T E9 01 00 00 21 13 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T F4 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T F9 01 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 00 02 00 00 73 23 72 21 15 00 09 E5 21 15 00 +R 00 00 01 00 +T 0B 02 00 00 DD 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 16 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 1B 02 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 00 00 +T 23 02 00 00 17 00 DD 5E 02 DD 56 03 19 4E 23 +R 00 00 01 00 +T 2E 02 00 00 46 23 5E 23 56 69 60 E5 21 17 00 +R 00 00 01 00 +T 39 02 00 00 DD 4E FE DD 46 FF 09 C1 D5 59 50 +R 00 00 01 00 +T 44 02 00 00 C1 73 23 72 23 71 23 70 21 1B 00 +R 00 00 01 00 +T 4F 02 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T 5A 02 00 00 5E 23 56 69 60 E5 21 1B 00 DD 4E +R 00 00 01 00 +T 65 02 00 00 FE DD 46 FF 09 C1 D5 59 50 C1 73 +R 00 00 01 00 +T 70 02 00 00 23 72 23 71 23 70 21 1F 00 DD 4E +R 00 00 01 00 +T 7B 02 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 86 02 00 00 56 69 60 E5 21 1F 00 DD 4E FE DD +R 00 00 01 00 +T 91 02 00 00 46 FF 09 C1 D5 59 50 C1 73 23 72 +R 00 00 01 00 +T 9C 02 00 00 23 71 23 70 21 23 00 DD 4E 02 DD +R 00 00 01 00 +T A7 02 00 00 46 03 09 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T B2 02 00 00 60 E5 21 23 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T BD 02 00 00 09 C1 D5 59 50 C1 73 23 72 23 71 +R 00 00 01 00 +T C8 02 00 00 23 70 21 27 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T D3 02 00 00 09 5E 23 56 23 4E 23 46 EB E5 21 +R 00 00 01 00 +T DE 02 00 00 27 00 DD 5E FE DD 56 FF 19 D1 73 +R 00 00 01 00 +T E9 02 00 00 23 72 23 71 23 70 18 00 +R 00 00 01 00 +T F1 02 00 00 +R 00 00 01 00 +T F1 02 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T F7 02 00 00 +R 00 00 01 00 +T F7 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/internet_lib/copy_rr_list.rel b/src/nos/lib/internet_lib/copy_rr_list.rel new file mode 100644 index 00000000..59b9050f --- /dev/null +++ b/src/nos/lib/internet_lib/copy_rr_list.rel @@ -0,0 +1,43 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _copy_rr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 69 flags 0 +S _copy_rr_list Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 02 00 39 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 DD 7E 02 DD B6 03 28 3F +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 1F 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 26 00 00 00 DD 6E FC DD 66 FD C1 71 23 70 DD +R 00 00 01 00 +T 31 00 00 00 6E FC DD 66 FD 46 23 66 68 23 23 +R 00 00 01 00 +T 3C 00 00 00 DD 75 FC DD 74 FD DD 6E 02 DD 66 +R 00 00 01 00 +T 47 00 00 00 03 23 23 46 23 66 68 DD 75 02 DD +R 00 00 01 00 +T 52 00 00 00 74 03 18 B9 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 DD 6E FC DD 66 FD AF 77 23 77 DD +R 00 00 01 00 +T 61 00 00 00 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0A 01 00 diff --git a/src/nos/lib/internet_lib/creat_reasm.rel b/src/nos/lib/internet_lib/creat_reasm.rel new file mode 100644 index 00000000..486c62e9 --- /dev/null +++ b/src/nos/lib/internet_lib/creat_reasm.rel @@ -0,0 +1,80 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _set_timer Ref00000000 +S _Ip_mib Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +S _Reasmq Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _ip_timeout Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size FA flags 0 +S _creat_reasm Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 01 21 00 11 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 09 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E FE DD 66 FF C3 F7 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 21 16 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 31 00 00 00 DD 6E 02 DD 66 03 5E 23 56 23 4E +R 00 00 01 00 +T 3C 00 00 00 23 46 E1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T 47 00 00 00 04 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 52 00 00 00 46 23 5E 23 56 69 60 E5 21 1A 00 +R 00 00 01 00 +T 5D 00 00 00 DD 4E FE DD 46 FF 09 C1 D5 59 50 +R 00 00 01 00 +T 68 00 00 00 C1 73 23 72 23 71 23 70 21 1E 00 +R 00 00 01 00 +T 73 00 00 00 DD 4E FE DD 46 FF 09 E5 21 0A 00 +R 00 00 01 00 +T 7E 00 00 00 DD 5E 02 DD 56 03 19 5E 23 56 E1 +R 00 00 01 00 +T 89 00 00 00 73 23 72 21 15 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 94 00 00 00 03 19 56 21 20 00 09 72 21 +R 00 00 01 00 +T 9D 00 00 00 50 00 00 00 5E 23 56 23 4E 23 46 +R 00 00 01 00 02 04 02 00 +T A6 00 00 00 C5 D5 01 00 00 21 E8 03 CD +R 00 00 01 00 +T AF 00 00 00 00 00 00 00 C5 E5 DD 5E FE DD 56 +R 00 00 01 00 02 04 05 00 +T B8 00 00 00 FF 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T BE 00 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T C5 00 00 00 21 0C 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T D0 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 0A 00 8B 0A 0A 00 +T D5 00 00 00 36 00 00 00 00 21 0F 00 09 71 23 +R 00 00 01 00 2B 05 0A 00 +T DD 00 00 00 70 2A 00 00 00 00 E5 69 60 C1 71 +R 00 00 01 00 02 06 06 00 +T E6 00 00 00 23 70 DD 6E FE DD 66 FF 22 +R 00 00 01 00 +T EF 00 00 00 00 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 06 00 +T F7 00 00 00 +R 00 00 01 00 +T F7 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/internet_lib/dcache_add.rel b/src/nos/lib/internet_lib/dcache_add.rel new file mode 100644 index 00000000..8cd41e4f --- /dev/null +++ b/src/nos/lib/internet_lib/dcache_add.rel @@ -0,0 +1,64 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Dcache Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8B flags 0 +S _dcache_add Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 B6 03 20 02 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 18 79 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 DD 6E 02 DD 66 03 DD 75 FE DD 74 +R 00 00 01 00 +T 1A 00 00 00 FF AF DD 77 FC DD 77 FD +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 DD 7E 02 DD B6 03 28 31 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 6E FC DD 66 FD E5 DD 6E 02 DD +R 00 00 01 00 +T 35 00 00 00 66 03 C1 71 23 70 DD 6E 02 DD 66 +R 00 00 01 00 +T 40 00 00 00 03 DD 75 FC DD 74 FD DD 6E 02 DD +R 00 00 01 00 +T 4B 00 00 00 66 03 23 23 46 23 66 68 DD 75 02 +R 00 00 01 00 +T 56 00 00 00 DD 74 03 18 C7 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 DD 6E FC DD 66 FD 23 23 ED 4B +R 00 00 01 00 +T 65 00 00 00 00 00 00 00 71 23 70 2A +R 00 00 01 00 02 04 04 00 +T 6B 00 00 00 00 00 00 00 7D B4 28 0E +R 00 00 01 00 02 04 04 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 6E FC DD 66 FD E5 2A +R 00 00 01 00 +T 79 00 00 00 00 00 00 00 C1 71 23 70 +R 00 00 01 00 02 04 04 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 DD 6E FE DD 66 FF 22 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/internet_lib/dcache_drop.rel b/src/nos/lib/internet_lib/dcache_drop.rel new file mode 100644 index 00000000..6f81ca33 --- /dev/null +++ b/src/nos/lib/internet_lib/dcache_drop.rel @@ -0,0 +1,52 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Dcache Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 79 flags 0 +S _dcache_drop Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EB 7E 23 B6 EB 28 +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 20 +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 DD 6E 02 DD 66 03 46 23 66 68 23 +R 00 00 01 00 +T 15 00 00 00 23 E5 DD 4E 02 DD 46 03 03 03 69 +R 00 00 01 00 +T 20 00 00 00 60 4E 23 46 E1 71 23 70 18 0F +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 35 00 00 00 68 22 00 00 00 00 +R 00 00 01 00 02 06 04 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 6E 02 DD 66 03 23 23 7E 23 B6 +R 00 00 01 00 +T 44 00 00 00 28 1A +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 DD 6E 02 DD 66 03 23 23 7E 23 66 +R 00 00 01 00 +T 51 00 00 00 6F E5 DD 6E 02 DD 66 03 4E 23 46 +R 00 00 01 00 +T 5C 00 00 00 E1 71 23 70 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 6E 02 DD 66 03 23 23 AF 77 23 +R 00 00 01 00 +T 6B 00 00 00 77 DD 6E 02 DD 66 03 AF 77 23 77 +R 00 00 01 00 +T 76 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/internet_lib/dcache_search.rel b/src/nos/lib/internet_lib/dcache_search.rel new file mode 100644 index 00000000..9f3bfea2 --- /dev/null +++ b/src/nos/lib/internet_lib/dcache_search.rel @@ -0,0 +1,138 @@ +XL4 +H 2 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _compare_rr_list Ref00000000 +S _Dcache_time Ref00000000 +S _Dcache_size Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free_rr Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _dcache_drop Ref00000000 +S _time Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Dcache Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 174 flags 0 +S _dcache_search Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EE FF AF DD 77 FE +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 77 FF 21 0C 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 18 00 00 00 00 00 00 00 59 50 A7 ED 4B +R 00 00 01 00 02 04 00 00 +T 1F 00 00 00 00 00 00 00 ED 42 EB ED 4B +R 00 00 01 00 02 04 02 00 +T 26 00 00 00 02 00 00 00 ED 42 4D 44 EB DD 75 +R 00 00 01 00 02 04 02 00 +T 2F 00 00 00 F6 DD 74 F7 DD 71 F8 DD 70 F9 DD +R 00 00 01 00 +T 3A 00 00 00 4E FC DD 46 FD DD 6E FA DD 66 FB +R 00 00 01 00 +T 45 00 00 00 22 00 00 00 00 ED 43 02 00 00 00 +R 00 00 01 00 02 05 02 00 02 0B 02 00 +T 4C 00 00 00 21 06 00 39 DD 75 F2 DD 74 F3 2A +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 DD 75 EE DD 74 EF +R 00 00 01 00 02 04 0D 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E EE DD 66 EF DD 75 F0 DD 74 +R 00 00 01 00 +T 6A 00 00 00 F1 7D B4 CA 61 01 00 00 +R 00 00 01 00 00 08 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 DD 6E EE DD 66 EF 23 23 46 23 66 +R 00 00 01 00 +T 7B 00 00 00 68 DD 75 EE DD 74 EF 21 09 00 DD +R 00 00 01 00 +T 86 00 00 00 4E F0 DD 46 F1 09 4E 23 46 23 5E +R 00 00 01 00 +T 91 00 00 00 23 56 D5 C5 01 00 00 21 00 00 CD +R 00 00 01 00 +T 9C 00 00 00 00 00 00 00 30 38 21 09 00 DD 4E +R 00 00 01 00 02 04 07 00 +T A5 00 00 00 F0 DD 46 F1 09 DD 4E F8 DD 46 F9 +R 00 00 01 00 +T B0 00 00 00 DD 5E F6 DD 56 F7 CD 00 00 00 00 +R 00 00 01 00 02 0B 0E 00 +T B9 00 00 00 C5 D5 01 00 00 21 00 00 CD +R 00 00 01 00 +T C2 00 00 00 00 00 00 00 38 12 +R 00 00 01 00 02 04 07 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 21 09 00 DD 4E F0 DD 46 F1 09 AF +R 00 00 01 00 +T D1 00 00 00 77 23 77 23 77 23 77 +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 DD 4E F0 DD 46 F1 DD 5E 02 DD 56 +R 00 00 01 00 +T E3 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T E9 00 00 00 CD 00 00 00 00 7D B4 20 2F +R 00 00 01 00 02 05 00 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 6E F0 DD 66 F1 E5 DD 6E F2 DD +R 00 00 01 00 +T FB 00 00 00 66 F3 C1 71 23 70 59 50 3E +R 00 00 01 00 +T 04 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 09 01 00 00 00 00 00 00 DD 6E F2 DD 66 F3 46 +R 00 00 01 00 02 04 00 00 +T 12 01 00 00 23 66 68 23 23 DD 75 F2 DD 74 F3 +R 00 00 01 00 +T 1D 01 00 00 18 3F +R 00 00 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 21 04 00 DD 4E F0 DD 46 F1 09 46 +R 00 00 01 00 +T 2A 01 00 00 05 20 31 DD 4E FE DD 46 FF 03 DD +R 00 00 01 00 +T 35 01 00 00 71 FE DD 70 FF 2A 00 00 00 00 CD +R 00 00 01 00 02 0A 03 00 +T 3E 01 00 00 00 00 00 00 30 1C +R 00 00 01 00 02 04 0B 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 DD 5E F0 DD 56 F1 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 4A 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 51 01 00 00 5E F0 DD 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 59 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 C3 5F 00 00 00 +R 00 00 01 00 00 05 01 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 DD 6E F2 DD 66 F3 AF 77 23 77 DD +R 00 00 01 00 +T 6C 01 00 00 6E F4 DD 66 F5 C3 00 00 00 00 +R 00 00 01 00 02 0A 04 00 diff --git a/src/nos/lib/internet_lib/dcache_update.rel b/src/nos/lib/internet_lib/dcache_update.rel new file mode 100644 index 00000000..85baee3c --- /dev/null +++ b/src/nos/lib/internet_lib/dcache_update.rel @@ -0,0 +1,39 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _dcache_add Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _free_rr Ref00000000 +S _dcache_search Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S _dcache_update Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 20 02 +R 00 00 01 00 02 05 04 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 18 25 +R 00 00 01 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 11 00 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 18 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 1E 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 00 00 +T 27 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 2C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/internet_lib/del_ip.rel b/src/nos/lib/internet_lib/del_ip.rel new file mode 100644 index 00000000..73ee50fe --- /dev/null +++ b/src/nos/lib/internet_lib/del_ip.rel @@ -0,0 +1,85 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Rawip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_q Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A5 flags 0 +S _del_ip Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FC +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 77 FD 2A 00 00 00 00 DD 75 FE +R 00 00 01 00 02 08 01 00 +T 12 00 00 00 DD 74 FF +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 DD 7E FE DD B6 FF 28 31 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E 02 DD 66 03 DD 4E FE DD 46 +R 00 00 01 00 +T 28 00 00 00 FF A7 ED 42 20 02 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 18 1E +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 6E FE DD 66 FF DD 75 FC DD 74 +R 00 00 01 00 +T 3B 00 00 00 FD DD 6E FE DD 66 FF 46 23 66 68 +R 00 00 01 00 +T 46 00 00 00 DD 75 FE DD 74 FF 18 C7 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 DD 7E FE DD B6 FF 20 02 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 18 4A +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 DD 7E FC DD B6 FD 28 17 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 E5 +R 00 00 01 00 +T 6B 00 00 00 DD 6E FC DD 66 FD C1 71 23 70 18 +R 00 00 01 00 +T 76 00 00 00 0D +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 22 +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 DD 5E FE DD 56 FF 13 13 3E +R 00 00 01 00 +T 8D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 92 00 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 02 04 00 00 +T 9B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T A0 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/internet_lib/delim.rel b/src/nos/lib/internet_lib/delim.rel new file mode 100644 index 00000000..5d92a2a6 --- /dev/null +++ b/src/nos/lib/internet_lib/delim.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 5 flags 0 +S _delim Def00000000 +A CDATA0 size 5 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 09 0D 0A 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/dfile_search.rel b/src/nos/lib/internet_lib/dfile_search.rel new file mode 100644 index 00000000..c6f7087c --- /dev/null +++ b/src/nos/lib/internet_lib/dfile_search.rel @@ -0,0 +1,277 @@ +XL4 +H 3 areas 1A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _get_rr Ref00000000 +S _compare_rr_list Ref00000000 +S _Dcache_time Ref00000000 +S _Dfile_writing Ref00000000 +S ?L_NEG_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Dfile_reading Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _fstat Ref00000000 +S _Dfile Ref00000000 +S _free_rr Ref00000000 +S _ksignal Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ___045a_0f61_dfile_5fsearch_3a_2 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _freopen Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fclose Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _main_exit Ref00000000 +S _copy_rr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 298 flags 0 +S _dfile_search Def00000000 +A CSTR size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D4 FF +R 00 00 01 00 02 05 10 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 ED 4B 00 00 00 00 21 00 00 CD +R 00 00 01 00 02 06 04 00 +T 0D 00 00 00 00 00 00 00 30 0D +R 00 00 01 00 02 04 12 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 07 00 2B 0A 09 00 +T 17 00 00 00 00 00 00 00 CD 00 00 00 00 18 E7 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 02 05 07 00 02 0B 07 00 +T 25 00 00 00 21 00 00 E5 01 00 00 00 00 ED 5B +R 00 00 01 00 00 09 02 00 +T 2E 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 2B 09 11 00 +T 33 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 3A 00 00 00 75 E0 DD 74 E1 7D B4 20 0D +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 2A 00 00 00 00 2B 22 00 00 00 00 +R 00 00 01 00 02 05 07 00 02 0B 07 00 +T 4A 00 00 00 21 00 00 C3 95 02 00 00 +R 00 00 01 00 00 08 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 21 0E 00 39 4D 44 DD 7E E0 DD B6 +R 00 00 01 00 +T 5B 00 00 00 E1 28 0F 21 08 00 DD 5E E0 DD 56 +R 00 00 01 00 +T 66 00 00 00 E1 19 5E 23 56 18 03 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 11 FF FF +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T 76 00 00 00 00 00 00 00 7D B4 28 2C +R 00 00 01 00 02 04 00 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0F 00 02 0B 0F 00 +T 82 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 13 00 02 0B 13 00 +T 88 00 00 00 CD 00 00 00 00 F1 F1 DD 5E E0 DD +R 00 00 01 00 02 05 00 00 +T 91 00 00 00 56 E1 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 15 00 +T 96 00 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 15 00 02 09 00 00 +T 9C 00 00 00 00 00 00 00 2B 22 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 02 0A 07 00 +T A3 00 00 00 00 00 C3 95 02 00 00 +R 00 00 01 00 00 07 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 A7 2A 00 00 00 00 DD 4E FC DD 46 +R 00 00 01 00 02 06 03 00 +T B1 00 00 00 FD ED 42 EB 2A 02 00 00 00 DD 4E +R 00 00 01 00 02 09 03 00 +T BA 00 00 00 FE DD 46 FF ED 42 4D 44 EB DD 75 +R 00 00 01 00 +T C5 00 00 00 DC DD 74 DD DD 71 DE DD 70 DF CB +R 00 00 01 00 +T D0 00 00 00 78 28 1B +R 00 00 01 00 +T D3 00 00 00 +R 00 00 01 00 +T D3 00 00 00 DD 4E DE DD 46 DF DD 6E DC DD 66 +R 00 00 01 00 +T DE 00 00 00 DD CD 00 00 00 00 DD 75 DC DD 74 +R 00 00 01 00 02 06 05 00 +T E7 00 00 00 DD DD 71 DE DD 70 DF +R 00 00 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 AF DD 77 D8 DD 77 D9 AF DD 77 DA +R 00 00 01 00 +T F9 00 00 00 DD 77 DB 21 04 00 39 DD 75 D6 DD +R 00 00 01 00 +T 04 01 00 00 74 D7 +R 00 00 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 DD 4E DA DD 46 DB DD 5E E0 DD 56 +R 00 00 01 00 +T 11 01 00 00 E1 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 17 01 00 00 CD 00 00 00 00 DD 75 D4 DD 74 D5 +R 00 00 01 00 02 05 00 00 +T 20 01 00 00 7D B4 CA 44 02 00 00 +R 00 00 01 00 00 07 01 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 DD 5E DA DD 56 DB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 2D 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T 34 01 00 00 0F 00 DD 4E D4 DD 46 D5 09 7E 23 +R 00 00 01 00 +T 3F 01 00 00 B6 CA FB 01 00 00 21 11 00 DD 4E +R 00 00 01 00 00 06 01 00 +T 48 01 00 00 D4 DD 46 D5 09 7E 23 B6 CA +R 00 00 01 00 +T 51 01 00 00 FB 01 00 00 DD 4E D4 DD 46 D5 DD +R 00 00 01 00 00 04 01 00 +T 5A 01 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 62 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 69 01 00 00 C2 FB 01 00 00 +R 00 00 01 00 00 05 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 21 09 00 DD 4E D4 DD 46 D5 09 4E +R 00 00 01 00 +T 77 01 00 00 23 46 23 5E 23 56 D5 C5 01 00 00 +R 00 00 01 00 +T 82 01 00 00 21 00 00 CD 00 00 00 00 30 38 21 +R 00 00 01 00 02 08 0E 00 +T 8B 01 00 00 09 00 DD 4E D4 DD 46 D5 09 DD 4E +R 00 00 01 00 +T 96 01 00 00 DE DD 46 DF DD 5E DC DD 56 DD CD +R 00 00 01 00 +T A1 01 00 00 00 00 00 00 C5 D5 01 00 00 21 +R 00 00 01 00 02 04 16 00 +T A9 01 00 00 00 00 CD 00 00 00 00 38 12 +R 00 00 01 00 02 07 0E 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 21 09 00 DD 4E D4 DD 46 D5 09 AF +R 00 00 01 00 +T BB 01 00 00 77 23 77 23 77 23 77 +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 DD 6E D4 DD 66 D5 E5 DD 6E D6 DD +R 00 00 01 00 +T CD 01 00 00 66 D7 C1 71 23 70 DD 6E D6 DD 66 +R 00 00 01 00 +T D8 01 00 00 D7 46 23 66 68 23 23 DD 75 D6 DD +R 00 00 01 00 +T E3 01 00 00 74 D7 DD 5E D4 DD 56 D5 3E +R 00 00 01 00 +T EC 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T F1 01 00 00 00 00 00 00 DD 75 DA DD 74 DB 18 +R 00 00 01 00 02 04 00 00 +T FA 01 00 00 34 +R 00 00 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 DD 6E D4 DD 66 D5 DD 75 DA DD 74 +R 00 00 01 00 +T 06 02 00 00 DB 21 0F 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 11 02 00 00 3E FF AE 23 B6 28 17 DD 6E 02 DD +R 00 00 01 00 +T 1C 02 00 00 66 03 23 23 7E 23 B6 20 0A DD 7E +R 00 00 01 00 +T 27 02 00 00 D8 DD B6 D9 28 02 +R 00 00 01 00 +T 2D 02 00 00 +R 00 00 01 00 +T 2D 02 00 00 +R 00 00 01 00 +T 2D 02 00 00 +R 00 00 01 00 +T 2D 02 00 00 18 15 +R 00 00 01 00 +T 2F 02 00 00 +R 00 00 01 00 +T 2F 02 00 00 +R 00 00 01 00 +T 2F 02 00 00 2A 00 00 00 00 7D B4 20 0B +R 00 00 01 00 02 05 17 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T 3C 02 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 41 02 00 00 +R 00 00 01 00 +T 41 02 00 00 C3 06 01 00 00 +R 00 00 01 00 00 05 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 DD 5E DA DD 56 DB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 4C 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T 53 02 00 00 6E D6 DD 66 D7 AF 77 23 77 DD 5E +R 00 00 01 00 +T 5E 02 00 00 E0 DD 56 E1 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 15 00 +T 65 02 00 00 00 00 00 00 CD 00 00 00 00 ED 4B +R 00 00 01 00 02 04 15 00 02 09 00 00 +T 6C 02 00 00 00 00 00 00 0B ED 43 00 00 00 00 +R 00 00 01 00 02 04 07 00 02 0B 07 00 +T 73 02 00 00 21 00 00 CD 00 00 00 00 38 14 +R 00 00 01 00 02 08 12 00 +T 7B 02 00 00 +R 00 00 01 00 +T 7B 02 00 00 21 00 00 22 00 00 00 00 01 00 00 +R 00 00 01 00 02 08 07 00 +T 84 02 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 2B 0A 0D 00 +T 8A 02 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 8F 02 00 00 +R 00 00 01 00 +T 8F 02 00 00 DD 6E D8 DD 66 D9 +R 00 00 01 00 +T 95 02 00 00 +R 00 00 01 00 +T 95 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/dfile_update.rel b/src/nos/lib/internet_lib/dfile_update.rel new file mode 100644 index 00000000..0c0b5db6 --- /dev/null +++ b/src/nos/lib/internet_lib/dfile_update.rel @@ -0,0 +1,592 @@ +XL4 +H 3 areas 31 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _get_rr Ref00000000 +S _compare_rr_list Ref00000000 +S _Dfile_clean Ref00000000 +S _secclock Ref00000000 +S _Dfile_writing Ref00000000 +S _logmsg Ref00000000 +S _unlink Ref00000000 +S ?L_NEG_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S ___045b_4eba_dfile_5fupdate_3a_2 Ref00000000 +S _strdupw Ref00000000 +S ___05ce_c5a3_update_20Domain_2et Ref00000000 +S _put_rr Ref00000000 +S _Dfile_reading Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _fstat Ref00000000 +S _free Ref00000000 +S _Dfile Ref00000000 +S _strcpy Ref00000000 +S _free_rr Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _ksignal Ref00000000 +S ___05cd_0b09_update_20Domain_2et Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _dcache_search Ref00000000 +S ___05cc_5c27_update_20Domain_2et Ref00000000 +S _freopen Ref00000000 +S _fdup Ref00000000 +S ___045d_ef06_dfile_5fupdate_3a_2 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S _Cmdpp Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Dfile_wait_absolute Ref00000000 +S _rename Ref00000000 +S _kalarm Ref00000000 +S _Dfile_updater Ref00000000 +S _Dcache Ref00000000 +S _fclose Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _main_exit Ref00000000 +S _copy_rr Ref00000000 +S ___045c_5b47_dfile_5fupdate_3a_2 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5D6 flags 0 +S _dfile_update Def00000000 +A CSTR size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 B2 FF 1E +R 00 00 01 00 02 05 1C 00 +T 06 00 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0D 00 02 0A 0D 00 +T 0C 00 00 00 21 FF FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 06 00 +T 13 00 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 1A 00 00 00 E1 21 3E 00 ED 5B 00 00 00 00 19 +R 00 00 01 00 02 0A 10 00 +T 23 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 2B 00 +T 29 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 2B 00 02 09 00 00 +T 2F 00 00 00 3E 00 ED 5B 00 00 00 00 19 E5 21 +R 00 00 01 00 02 08 10 00 +T 38 00 00 00 3E 00 ED 4B 00 00 00 00 09 5E 23 +R 00 00 01 00 02 08 24 00 +T 41 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 20 00 02 0B 20 00 +T 47 00 00 00 CD 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 05 00 00 +T 50 00 00 00 40 00 ED 4B 00 00 00 00 09 5E 23 +R 00 00 01 00 02 08 10 00 +T 59 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2B 00 02 0B 2B 00 +T 5F 00 00 00 CD 00 00 00 00 21 40 00 09 E5 21 +R 00 00 01 00 02 05 00 00 +T 68 00 00 00 40 00 ED 4B 00 00 00 00 09 5E 23 +R 00 00 01 00 02 08 24 00 +T 71 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 20 00 02 0B 20 00 +T 77 00 00 00 CD 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 05 00 00 +T 80 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 15 00 2B 0B 0C 00 +T 86 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T 8D 00 00 00 75 B8 DD 74 B9 01 00 00 00 00 E5 +R 00 00 01 00 00 0A 02 00 +T 96 00 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T 9B 00 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T A2 00 00 00 19 EB 1B 1B 1B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 16 00 +T AA 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 16 00 02 09 00 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 2A 00 00 00 00 7D B4 2A +R 00 00 01 00 02 05 26 00 +T B5 00 00 00 02 00 00 00 B5 B4 CA A9 05 00 00 +R 00 00 01 00 02 04 26 00 00 0B 01 00 +T BC 00 00 00 2A 00 00 00 00 7D B4 C2 +R 00 00 01 00 02 05 2D 00 +T C2 00 00 00 A9 05 00 00 +R 00 00 01 00 00 04 01 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 2A 00 00 00 00 7D B4 2A +R 00 00 01 00 02 05 26 00 +T CA 00 00 00 02 00 00 00 B5 B4 CA 64 01 00 00 +R 00 00 01 00 02 04 26 00 00 0B 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T D7 00 00 00 00 00 00 00 59 50 4D 44 2A +R 00 00 01 00 02 04 00 00 +T DE 00 00 00 00 00 00 00 A7 ED 42 4D 44 2A +R 00 00 01 00 02 04 26 00 +T E6 00 00 00 02 00 00 00 ED 52 E5 69 60 C1 DD +R 00 00 01 00 02 04 26 00 +T EF 00 00 00 75 FC DD 74 FD DD 71 FE DD 70 FF +R 00 00 01 00 +T FA 00 00 00 01 00 00 11 00 00 ED 53 +R 00 00 01 00 +T 02 01 00 00 00 00 00 00 ED 43 02 00 00 00 DD +R 00 00 01 00 02 04 26 00 02 0A 26 00 +T 09 01 00 00 6E FE DD 66 FF E5 DD 6E FC DD 66 +R 00 00 01 00 +T 14 01 00 00 FD E5 01 00 00 21 00 00 CD +R 00 00 01 00 +T 1D 01 00 00 00 00 00 00 30 40 2A 00 00 00 00 +R 00 00 01 00 02 04 1B 00 02 0B 2D 00 +T 24 01 00 00 7D B4 20 39 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 21 00 00 E5 21 E8 03 E5 DD 4E FE +R 00 00 01 00 +T 33 01 00 00 DD 46 FF DD 6E FC DD 66 FD CD +R 00 00 01 00 +T 3D 01 00 00 00 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 02 04 18 00 2B 0A 28 00 +T 43 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 28 00 02 09 00 00 +T 49 01 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 26 00 2B 09 12 00 +T 4E 01 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 54 01 00 00 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 28 00 +T 5C 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 28 00 02 09 00 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 C3 C4 00 00 00 +R 00 00 01 00 00 05 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1E 00 02 0B 1E 00 +T 6A 01 00 00 E5 21 FF FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 72 01 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 79 01 00 00 E1 21 00 00 E5 01 04 00 00 00 DD +R 00 00 01 00 00 0A 02 00 +T 82 01 00 00 5E B8 DD 56 B9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1F 00 +T 8A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 1F 00 02 09 00 00 +T 91 01 00 00 75 BC DD 74 BD 7D B4 20 1C +R 00 00 01 00 +T 9A 01 00 00 +R 00 00 01 00 +T 9A 01 00 00 DD 6E B8 DD 66 B9 E5 0E +R 00 00 01 00 +T A2 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0B 00 02 0A 0B 00 +T A8 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 23 00 02 0A 23 00 +T AE 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T B4 01 00 00 A9 05 00 00 +R 00 00 01 00 00 04 01 00 +T B6 01 00 00 +R 00 00 01 00 +T B6 01 00 00 21 2A 00 39 4D 44 DD 7E BC DD B6 +R 00 00 01 00 +T C1 01 00 00 BD 28 0F 21 08 00 DD 5E BC DD 56 +R 00 00 01 00 +T CC 01 00 00 BD 19 5E 23 56 18 03 +R 00 00 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 11 FF FF +R 00 00 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T DC 01 00 00 00 00 00 00 7D B4 28 22 +R 00 00 01 00 02 04 00 00 +T E2 01 00 00 +R 00 00 01 00 +T E2 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 2F 00 02 0B 2F 00 +T E8 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 23 00 02 0B 23 00 +T EE 01 00 00 CD 00 00 00 00 F1 F1 DD 5E BC DD +R 00 00 01 00 02 05 00 00 +T F7 01 00 00 56 BD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2B 00 +T FC 01 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 2B 00 02 09 00 00 +T 02 02 00 00 A9 05 00 00 +R 00 00 01 00 00 04 01 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 12 00 +T 0A 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 10 02 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1D 00 +T 15 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1D 00 02 09 00 00 +T 1B 02 00 00 02 00 39 DD 75 B2 DD 74 B3 2A +R 00 00 01 00 +T 25 02 00 00 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 2A 00 +T 2D 02 00 00 +R 00 00 01 00 +T 2D 02 00 00 DD 7E FA DD B6 FB CA C9 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 21 04 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 41 02 00 00 FE 04 38 6F FE 08 30 6B +R 00 00 01 00 +T 49 02 00 00 +R 00 00 01 00 +T 49 02 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2E 00 +T 51 02 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 2E 00 02 0A 00 00 +T 58 02 00 00 DD 6E B2 DD 66 B3 C1 71 23 70 21 +R 00 00 01 00 +T 63 02 00 00 0F 00 DD 4E FA DD 46 FB 09 7E 23 +R 00 00 01 00 +T 6E 02 00 00 B6 28 23 21 11 00 DD 4E FA DD 46 +R 00 00 01 00 +T 79 02 00 00 FB 09 7E 23 B6 28 14 +R 00 00 01 00 +T 80 02 00 00 +R 00 00 01 00 +T 80 02 00 00 +R 00 00 01 00 +T 80 02 00 00 +R 00 00 01 00 +T 80 02 00 00 DD 4E FA DD 46 FB DD 5E BC DD 56 +R 00 00 01 00 +T 8B 02 00 00 BD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 91 02 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 94 02 00 00 +R 00 00 01 00 +T 94 02 00 00 DD 6E B2 DD 66 B3 46 23 66 68 23 +R 00 00 01 00 +T 9F 02 00 00 23 DD 75 B2 DD 74 B3 21 04 00 DD +R 00 00 01 00 +T AA 02 00 00 4E FA DD 46 FB 09 36 01 18 00 +R 00 00 01 00 +T B4 02 00 00 +R 00 00 01 00 +T B4 02 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T BF 02 00 00 68 DD 75 FA DD 74 FB C3 +R 00 00 01 00 +T C7 02 00 00 2D 02 00 00 +R 00 00 01 00 00 04 01 00 +T C9 02 00 00 +R 00 00 01 00 +T C9 02 00 00 DD 6E B2 DD 66 B3 AF 77 23 77 21 +R 00 00 01 00 +T D4 02 00 00 00 00 E5 01 06 00 00 00 ED 5B +R 00 00 01 00 00 08 02 00 +T DC 02 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 15 00 2B 09 1F 00 +T E1 02 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 1F 00 02 09 00 00 +T E8 02 00 00 75 BA DD 74 BB 7D B4 20 31 +R 00 00 01 00 +T F1 02 00 00 +R 00 00 01 00 +T F1 02 00 00 DD 5E BC DD 56 BD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2B 00 +T F9 02 00 00 21 00 00 00 00 CD 00 00 00 00 ED +R 00 00 01 00 02 05 2B 00 02 0A 00 00 +T 00 03 00 00 4B 00 00 00 00 DD 5E B8 DD 56 B9 +R 00 00 01 00 02 05 15 00 +T 09 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 27 00 02 0A 27 00 +T 0F 03 00 00 00 00 00 00 DD 5E B4 DD 56 B5 3E +R 00 00 01 00 02 04 00 00 +T 18 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T 1D 03 00 00 00 00 00 00 C3 A9 05 00 00 +R 00 00 01 00 02 04 00 00 00 09 01 00 +T 22 03 00 00 +R 00 00 01 00 +T 22 03 00 00 21 0C 00 39 4D 44 DD 7E BA DD B6 +R 00 00 01 00 +T 2D 03 00 00 BB 28 0F 21 08 00 DD 5E BA DD 56 +R 00 00 01 00 +T 38 03 00 00 BB 19 5E 23 56 18 03 +R 00 00 01 00 +T 3F 03 00 00 +R 00 00 01 00 +T 3F 03 00 00 11 FF FF +R 00 00 01 00 +T 42 03 00 00 +R 00 00 01 00 +T 42 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 48 03 00 00 00 00 00 00 7D B4 28 3E +R 00 00 01 00 02 04 00 00 +T 4E 03 00 00 +R 00 00 01 00 +T 4E 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 21 00 02 0B 21 00 +T 54 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 23 00 02 0B 23 00 +T 5A 03 00 00 CD 00 00 00 00 F1 F1 DD 5E BC DD +R 00 00 01 00 02 05 00 00 +T 63 03 00 00 56 BD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2B 00 +T 68 03 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 2B 00 02 09 00 00 +T 6F 03 00 00 BA DD 56 BB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 2B 00 +T 76 03 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 2B 00 02 09 00 00 +T 7D 03 00 00 B4 DD 56 B5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 17 00 +T 84 03 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 17 00 02 09 00 00 +T 8A 03 00 00 A9 05 00 00 +R 00 00 01 00 00 04 01 00 +T 8C 03 00 00 +R 00 00 01 00 +T 8C 03 00 00 A7 DD 6E F6 DD 66 F7 DD 4E D8 DD +R 00 00 01 00 +T 97 03 00 00 46 D9 ED 42 EB DD 6E F8 DD 66 F9 +R 00 00 01 00 +T A2 03 00 00 DD 4E DA DD 46 DB ED 42 4D 44 EB +R 00 00 01 00 +T AD 03 00 00 DD 75 FC DD 74 FD DD 71 FE DD 70 +R 00 00 01 00 +T B8 03 00 00 FF CB 78 28 1B +R 00 00 01 00 +T BD 03 00 00 +R 00 00 01 00 +T BD 03 00 00 DD 4E FE DD 46 FF DD 6E FC DD 66 +R 00 00 01 00 +T C8 03 00 00 FD CD 00 00 00 00 DD 75 FC DD 74 +R 00 00 01 00 02 06 08 00 +T D1 03 00 00 FD DD 71 FE DD 70 FF +R 00 00 01 00 +T D8 03 00 00 +R 00 00 01 00 +T D8 03 00 00 AF DD 77 B6 DD 77 B7 +R 00 00 01 00 +T DF 03 00 00 +R 00 00 01 00 +T DF 03 00 00 DD 4E B6 DD 46 B7 DD 5E BA DD 56 +R 00 00 01 00 +T EA 03 00 00 BB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T F0 03 00 00 CD 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 00 00 +T F9 03 00 00 7D B4 CA 1C 05 00 00 +R 00 00 01 00 00 07 01 00 +T FE 03 00 00 +R 00 00 01 00 +T FE 03 00 00 DD 5E B6 DD 56 B7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 17 00 +T 06 04 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 17 00 02 0A 00 00 +T 0D 04 00 00 07 00 DD 4E FA DD 46 FB 09 7E 23 +R 00 00 01 00 +T 18 04 00 00 B6 20 23 21 05 00 DD 4E FA DD 46 +R 00 00 01 00 +T 23 04 00 00 FB 09 7E 23 B6 28 14 +R 00 00 01 00 +T 2A 04 00 00 +R 00 00 01 00 +T 2A 04 00 00 +R 00 00 01 00 +T 2A 04 00 00 +R 00 00 01 00 +T 2A 04 00 00 DD 4E FA DD 46 FB DD 5E BC DD 56 +R 00 00 01 00 +T 35 04 00 00 BD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 3B 04 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 3E 04 00 00 +R 00 00 01 00 +T 3E 04 00 00 21 0F 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 49 04 00 00 23 B6 CA FB 04 00 00 21 11 00 DD +R 00 00 01 00 00 07 01 00 +T 52 04 00 00 4E FA DD 46 FB 09 7E 23 B6 CA +R 00 00 01 00 +T 5C 04 00 00 FB 04 00 00 DD 4E FA DD 46 FB DD +R 00 00 01 00 00 04 01 00 +T 65 04 00 00 5E B4 DD 56 B5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 6D 04 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 74 04 00 00 CA FB 04 00 00 +R 00 00 01 00 00 05 01 00 +T 77 04 00 00 +R 00 00 01 00 +T 77 04 00 00 +R 00 00 01 00 +T 77 04 00 00 +R 00 00 01 00 +T 77 04 00 00 21 09 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T 82 04 00 00 23 46 23 5E 23 56 D5 C5 01 00 00 +R 00 00 01 00 +T 8D 04 00 00 21 00 00 CD 00 00 00 00 30 38 21 +R 00 00 01 00 02 08 1B 00 +T 96 04 00 00 09 00 DD 4E FA DD 46 FB 09 DD 4E +R 00 00 01 00 +T A1 04 00 00 FE DD 46 FF DD 5E FC DD 56 FD CD +R 00 00 01 00 +T AC 04 00 00 00 00 00 00 C5 D5 01 00 00 21 +R 00 00 01 00 02 04 2C 00 +T B4 04 00 00 00 00 CD 00 00 00 00 38 12 +R 00 00 01 00 02 07 1B 00 +T BB 04 00 00 +R 00 00 01 00 +T BB 04 00 00 +R 00 00 01 00 +T BB 04 00 00 +R 00 00 01 00 +T BB 04 00 00 21 09 00 DD 4E FA DD 46 FB 09 AF +R 00 00 01 00 +T C6 04 00 00 77 23 77 23 77 23 77 +R 00 00 01 00 +T CD 04 00 00 +R 00 00 01 00 +T CD 04 00 00 21 09 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T D8 04 00 00 23 B6 23 B6 23 B6 20 07 2A +R 00 00 01 00 +T E1 04 00 00 00 00 00 00 7D B4 20 14 +R 00 00 01 00 02 04 03 00 +T E7 04 00 00 +R 00 00 01 00 +T E7 04 00 00 +R 00 00 01 00 +T E7 04 00 00 +R 00 00 01 00 +T E7 04 00 00 DD 4E FA DD 46 FB DD 5E BC DD 56 +R 00 00 01 00 +T F2 04 00 00 BD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T F8 04 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T FB 04 00 00 +R 00 00 01 00 +T FB 04 00 00 +R 00 00 01 00 +T FB 04 00 00 DD 6E FA DD 66 FB DD 75 B6 DD 74 +R 00 00 01 00 +T 06 05 00 00 B7 2A 00 00 00 00 7D B4 20 0B +R 00 00 01 00 02 06 2D 00 +T 0E 05 00 00 +R 00 00 01 00 +T 0E 05 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 12 00 +T 14 05 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 19 05 00 00 +R 00 00 01 00 +T 19 05 00 00 C3 DF 03 00 00 +R 00 00 01 00 00 05 01 00 +T 1C 05 00 00 +R 00 00 01 00 +T 1C 05 00 00 DD 5E B6 DD 56 B7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 17 00 +T 24 05 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 17 00 02 0A 00 00 +T 2B 05 00 00 5E BC DD 56 BD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 2B 00 +T 33 05 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 2B 00 02 09 00 00 +T 3A 05 00 00 BA DD 56 BB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 2B 00 +T 41 05 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 2B 00 02 09 00 00 +T 48 05 00 00 B4 DD 56 B5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 17 00 +T 4F 05 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 17 00 02 09 00 00 +T 55 05 00 00 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 0A 05 00 +T 5B 05 00 00 +R 00 00 01 00 +T 5B 05 00 00 ED 4B 00 00 00 00 21 00 00 CD +R 00 00 01 00 02 06 0F 00 +T 63 05 00 00 00 00 00 00 30 0D +R 00 00 01 00 02 04 22 00 +T 67 05 00 00 +R 00 00 01 00 +T 67 05 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 2B 0A 12 00 +T 6D 05 00 00 00 00 00 00 CD 00 00 00 00 18 E7 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 74 05 00 00 +R 00 00 01 00 +T 74 05 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 15 00 2B 0B 07 00 +T 7A 05 00 00 21 00 00 00 00 CD 00 00 00 00 ED +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 81 05 00 00 4B 00 00 00 00 DD 5E B8 DD 56 B9 +R 00 00 01 00 02 05 15 00 +T 8A 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 27 00 02 0A 27 00 +T 90 05 00 00 00 00 00 00 21 00 00 22 +R 00 00 01 00 02 04 00 00 +T 96 05 00 00 00 00 00 00 01 00 00 11 +R 00 00 01 00 02 04 05 00 +T 9C 05 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0F 00 2B 09 19 00 +T A1 05 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 19 00 02 09 00 00 +T A7 05 00 00 AF 00 00 00 +R 00 00 01 00 00 04 01 00 +T A9 05 00 00 +R 00 00 01 00 +T A9 05 00 00 DD 5E B8 DD 56 B9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 14 00 +T B1 05 00 00 21 00 00 00 00 CD 00 00 00 00 0E +R 00 00 01 00 02 05 14 00 02 0A 00 00 +T B8 05 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 1A 00 02 0A 1A 00 +T BE 05 00 00 21 FF FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 06 00 +T C5 05 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T CC 05 00 00 E1 21 00 00 22 00 00 00 00 C3 +R 00 00 01 00 02 09 29 00 +T D4 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 09 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 74 6D 70 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 77 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 72 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/dlist_add.rel b/src/nos/lib/internet_lib/dlist_add.rel new file mode 100644 index 00000000..13afe464 --- /dev/null +++ b/src/nos/lib/internet_lib/dlist_add.rel @@ -0,0 +1,32 @@ +XL4 +H 2 areas 6 global symbols +S _Dservers Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 38 flags 0 +S _dlist_add Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EB AF 77 23 77 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 6E 02 DD 66 03 23 23 ED 4B +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 71 23 70 2A +R 00 00 01 00 02 04 00 00 +T 18 00 00 00 00 00 00 00 7D B4 28 0E +R 00 00 01 00 02 04 00 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 6E 02 DD 66 03 E5 2A +R 00 00 01 00 +T 26 00 00 00 00 00 00 00 C1 71 23 70 +R 00 00 01 00 02 04 00 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 6E 02 DD 66 03 22 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 35 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/internet_lib/dlist_drop.rel b/src/nos/lib/internet_lib/dlist_drop.rel new file mode 100644 index 00000000..b9c52099 --- /dev/null +++ b/src/nos/lib/internet_lib/dlist_drop.rel @@ -0,0 +1,48 @@ +XL4 +H 2 areas 6 global symbols +S _Dservers Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 63 flags 0 +S _dlist_drop Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EB 7E 23 B6 EB 28 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 20 +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 DD 6E 02 DD 66 03 46 23 66 68 23 +R 00 00 01 00 +T 15 00 00 00 23 E5 DD 4E 02 DD 46 03 03 03 69 +R 00 00 01 00 +T 20 00 00 00 60 4E 23 46 E1 71 23 70 18 0F +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 35 00 00 00 68 22 00 00 00 00 +R 00 00 01 00 02 06 00 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 6E 02 DD 66 03 23 23 7E 23 B6 +R 00 00 01 00 +T 44 00 00 00 28 1A +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 DD 6E 02 DD 66 03 23 23 7E 23 66 +R 00 00 01 00 +T 51 00 00 00 6F E5 DD 6E 02 DD 66 03 4E 23 46 +R 00 00 01 00 +T 5C 00 00 00 E1 71 23 70 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/internet_lib/dns_makequery.rel b/src/nos/lib/internet_lib/dns_makequery.rel new file mode 100644 index 00000000..ad8f0a05 --- /dev/null +++ b/src/nos/lib/internet_lib/dns_makequery.rel @@ -0,0 +1,166 @@ +XL4 +H 2 areas E global symbols +S _put16 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strncpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S _strdupw Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?S_LSH_L02 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _msclock Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F1 flags 0 +S _dns_makequery Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF DD 6E 0A DD +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 66 0B DD 75 F2 DD 74 F3 3E +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 17 00 00 00 00 00 00 00 4D 44 DD 5E F2 DD 56 +R 00 00 01 00 02 04 01 00 +T 20 00 00 00 F3 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 26 00 00 00 CD 00 00 00 00 DD 75 F2 DD 74 F3 +R 00 00 01 00 02 05 01 00 +T 2F 00 00 00 06 0B DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 38 00 00 00 00 00 00 00 7B F6 00 4F 7A F6 01 +R 00 00 01 00 02 04 09 00 +T 41 00 00 00 47 DD 71 FA DD 70 FB EB 3E +R 00 00 01 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 4F 00 00 00 00 00 00 00 DD 75 F2 DD 74 F3 01 +R 00 00 01 00 02 04 01 00 +T 58 00 00 00 01 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T 5E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 65 00 00 00 F2 DD 74 F3 01 00 00 EB 3E +R 00 00 01 00 +T 6E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 73 00 00 00 00 00 00 00 DD 75 F2 DD 74 F3 01 +R 00 00 01 00 02 04 01 00 +T 7C 00 00 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T 82 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 89 00 00 00 F2 DD 74 F3 01 00 00 EB 3E +R 00 00 01 00 +T 92 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 97 00 00 00 00 00 00 00 DD 75 F2 DD 74 F3 21 +R 00 00 01 00 02 04 01 00 +T A0 00 00 00 07 00 DD 4E 04 DD 46 05 09 5E 23 +R 00 00 01 00 +T AB 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T B1 00 00 00 CD 00 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 05 01 00 +T BA 00 00 00 DD 75 F6 DD 74 F7 EB 3E +R 00 00 01 00 +T C2 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T C7 00 00 00 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 01 2E 00 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T D9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T DE 00 00 00 00 00 00 00 DD 75 F4 DD 74 F5 7D +R 00 00 01 00 02 04 01 00 +T E7 00 00 00 B4 28 17 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 DD 4E F6 DD 46 F7 DD 6E F4 DD 66 +R 00 00 01 00 +T F5 00 00 00 F5 A7 ED 42 DD 75 FE DD 74 FF 18 +R 00 00 01 00 +T 00 01 00 00 0C +R 00 00 01 00 +T 01 01 00 00 +R 00 00 01 00 +T 01 01 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 0C 01 00 00 FF +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 DD 46 FE DD 6E F2 DD 66 F3 23 DD +R 00 00 01 00 +T 18 01 00 00 75 F2 DD 74 F3 2B 70 DD 7E FE DD +R 00 00 01 00 +T 23 01 00 00 B6 FF 20 02 +R 00 00 01 00 +T 27 01 00 00 +R 00 00 01 00 +T 27 01 00 00 18 6C +R 00 00 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 DD 6E FE DD 66 FF E5 DD 4E F6 DD +R 00 00 01 00 +T 34 01 00 00 46 F7 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T 3D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 42 01 00 00 00 00 00 00 F1 21 00 00 39 7E DD +R 00 00 01 00 02 04 01 00 +T 4B 01 00 00 86 FE 77 23 7E DD 8E FF 77 DD 7E +R 00 00 01 00 +T 56 01 00 00 F4 DD B6 F5 20 12 +R 00 00 01 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 DD 6E F2 DD 66 F3 23 DD 75 F2 DD +R 00 00 01 00 +T 67 01 00 00 74 F3 2B 36 00 18 27 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 DD 4E FE DD 46 FF 03 21 04 00 39 +R 00 00 01 00 +T 79 01 00 00 7E 81 77 23 7E 88 77 DD 4E FE DD +R 00 00 01 00 +T 84 01 00 00 46 FF 03 21 0A 00 39 7E 91 77 23 +R 00 00 01 00 +T 8F 01 00 00 7E 98 77 C3 CF 00 00 00 +R 00 00 01 00 00 08 01 00 +T 95 01 00 00 +R 00 00 01 00 +T 95 01 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 9D 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 08 00 02 0A 01 00 +T A4 01 00 00 0F 00 DD 4E 04 DD 46 05 09 4E 23 +R 00 00 01 00 +T AF 01 00 00 46 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T B7 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T BC 01 00 00 00 00 00 00 DD 75 F2 DD 74 F3 21 +R 00 00 01 00 02 04 01 00 +T C5 01 00 00 0D 00 DD 4E 04 DD 46 05 09 4E 23 +R 00 00 01 00 +T D0 01 00 00 46 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T D8 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T DD 01 00 00 00 00 00 00 DD 75 F2 DD 74 F3 DD +R 00 00 01 00 02 04 01 00 +T E6 01 00 00 4E 0A DD 46 0B A7 ED 42 C3 +R 00 00 01 00 +T EF 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 diff --git a/src/nos/lib/internet_lib/dns_query.rel b/src/nos/lib/internet_lib/dns_query.rel new file mode 100644 index 00000000..ffa4d6ca --- /dev/null +++ b/src/nos/lib/internet_lib/dns_query.rel @@ -0,0 +1,546 @@ +XL4 +H 3 areas 2B global symbols +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _secclock Ref00000000 +S _socket Ref00000000 +S _sendto Ref00000000 +S _Dservers Ref00000000 +S _Dtrace Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _perror Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _free Ref00000000 +S _free_rr Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _errno Ref00000000 +S _dfile_update Ref00000000 +S _dlist_add Ref00000000 +S _close_s Ref00000000 +S ___0467_8f79_dns_5fquery_3a_20qu Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _msclock Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _dumpdomain Ref00000000 +S _mallocw Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _ntohdomain Ref00000000 +S __printf Ref00000000 +S _Dfile_wait_relative Ref00000000 +S _dlist_drop Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Dfile_wait_absolute Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S _kalarm Ref00000000 +S _dns_makequery Ref00000000 +S _Dserver_retries Ref00000000 +S _Dfile_updater Ref00000000 +S _recv_mbuf Ref00000000 +S ?L_LSHASG_L03 Ref00000000 +S _dcache_update Ref00000000 +S _newproc Ref00000000 +S ___0468_6da5_dns_5fquery_3a_20re Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 633 flags 0 +S _dns_query Def00000000 +A CSTR size 26 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D8 FF AF DD 77 E6 +R 00 00 01 00 02 05 14 00 +T 09 00 00 00 DD 77 E7 2A 00 00 00 00 DD 75 DC +R 00 00 01 00 02 08 05 00 +T 12 00 00 00 DD 74 DD 7D B4 20 06 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 21 FF FF C3 30 06 00 00 +R 00 00 01 00 00 08 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 14 00 DD 4E DC DD 46 DD 09 CD +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 21 00 00 E5 01 01 00 +R 00 00 01 00 02 04 16 00 +T 33 00 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 39 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 40 00 00 00 75 FC DD 74 FD AF DD 77 EC DD 77 +R 00 00 01 00 +T 4B 00 00 00 ED DD 36 EE 35 DD 36 EF 00 21 +R 00 00 01 00 +T 55 00 00 00 04 00 DD 4E DC DD 46 DD 09 5E 23 +R 00 00 01 00 +T 60 00 00 00 56 23 4E 23 46 EB DD 75 F0 DD 74 +R 00 00 01 00 +T 6B 00 00 00 F1 DD 71 F2 DD 70 F3 2A +R 00 00 01 00 +T 73 00 00 00 00 00 00 00 7D B4 28 3B +R 00 00 01 00 02 04 06 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 21 07 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 84 00 00 00 23 46 C5 21 04 00 DD 4E DC DD 46 +R 00 00 01 00 +T 8F 00 00 00 DD 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 99 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 9E 00 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 01 00 2B 0A 12 00 +T A4 00 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 12 00 2B 0B 1B 00 +T AA 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 1B 00 02 0A 01 00 +T B1 00 00 00 F1 F1 F1 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 11 00 02 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 18 00 +T BA 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T C1 00 00 00 E8 DD 74 E9 01 00 02 C5 E5 DD 4E +R 00 00 01 00 +T CC 00 00 00 02 DD 46 03 11 00 00 3E +R 00 00 01 00 +T D4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 22 00 02 09 22 00 +T D9 00 00 00 00 00 00 00 F1 F1 DD 75 EA DD 74 +R 00 00 01 00 02 04 01 00 +T E2 00 00 00 EB 01 10 00 C5 21 16 00 39 E5 21 +R 00 00 01 00 +T ED 00 00 00 00 00 E5 DD 6E EA DD 66 EB E5 DD +R 00 00 01 00 +T F8 00 00 00 4E E8 DD 46 E9 DD 5E FC DD 56 FD +R 00 00 01 00 +T 03 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 09 01 00 00 00 00 00 00 F1 F1 F1 F1 7D A4 3C +R 00 00 01 00 02 04 01 00 +T 12 01 00 00 20 0B +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 08 00 +T 1A 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 08 00 02 09 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 DD 5E E8 DD 56 E9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 27 01 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 0B 00 02 0A 01 00 +T 2E 01 00 00 DD 77 E8 DD 77 E9 21 08 00 DD 4E +R 00 00 01 00 +T 39 01 00 00 DC DD 46 DD 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 44 01 00 00 46 C5 D5 01 00 00 21 64 00 CD +R 00 00 01 00 +T 4E 01 00 00 00 00 00 00 30 13 21 08 00 DD 4E +R 00 00 01 00 02 04 13 00 +T 57 01 00 00 DC DD 46 DD 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 62 01 00 00 46 18 06 +R 00 00 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 01 00 00 11 64 00 +R 00 00 01 00 +T 6B 01 00 00 +R 00 00 01 00 +T 6B 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 21 00 02 0A 21 00 +T 71 01 00 00 00 00 00 00 21 00 00 E5 21 00 00 +R 00 00 01 00 02 04 01 00 +T 7A 01 00 00 E5 21 00 00 E5 21 06 00 39 4D 44 +R 00 00 01 00 +T 85 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 25 00 +T 8D 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 25 00 02 0A 01 00 +T 94 01 00 00 F1 F1 DD 75 FE DD 74 FF 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 21 00 +T A5 01 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 21 00 02 09 01 00 +T AC 01 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T B3 01 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 11 00 02 09 01 00 +T B9 01 00 00 00 00 00 00 7D B4 28 2D +R 00 00 01 00 02 04 06 00 +T BF 01 00 00 +R 00 00 01 00 +T BF 01 00 00 2A 00 00 00 00 7D B4 20 1B +R 00 00 01 00 02 05 0E 00 +T C6 01 00 00 +R 00 00 01 00 +T C6 01 00 00 DD 6E FE DD 66 FF E5 0E +R 00 00 01 00 +T CE 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 29 00 02 0A 29 00 +T D4 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1B 00 02 0A 1B 00 +T DA 01 00 00 00 00 00 00 F1 F1 F1 18 0B +R 00 00 01 00 02 04 01 00 +T E1 01 00 00 +R 00 00 01 00 +T E1 01 00 00 11 0E 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 08 00 +T E7 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 08 00 02 09 01 00 +T EC 01 00 00 +R 00 00 01 00 +T EC 01 00 00 +R 00 00 01 00 +T EC 01 00 00 DD 4E FE DD 46 FF 21 00 00 CD +R 00 00 01 00 +T F6 01 00 00 00 00 00 00 30 02 +R 00 00 01 00 02 04 19 00 +T FA 01 00 00 +R 00 00 01 00 +T FA 01 00 00 18 67 +R 00 00 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 2A 00 00 00 00 3E 6B AD B4 20 06 +R 00 00 01 00 02 05 0E 00 +T 05 02 00 00 +R 00 00 01 00 +T 05 02 00 00 21 FF FF C3 30 06 00 00 +R 00 00 01 00 00 08 01 00 +T 0B 02 00 00 +R 00 00 01 00 +T 0B 02 00 00 21 08 00 DD 4E DC DD 46 DD 09 3E +R 00 00 01 00 +T 16 02 00 00 01 CD 00 00 00 00 DD 6E DC DD 66 +R 00 00 01 00 02 06 26 00 +T 1F 02 00 00 DD 23 23 46 23 66 68 DD 75 DC DD +R 00 00 01 00 +T 2A 02 00 00 74 DD 7D B4 20 30 +R 00 00 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 2A 00 00 00 00 DD 75 DC DD 74 DD +R 00 00 01 00 02 05 05 00 +T 39 02 00 00 ED 4B 00 00 00 00 21 00 00 CD +R 00 00 01 00 02 06 23 00 +T 41 02 00 00 00 00 00 00 30 1B DD 4E E6 DD 46 +R 00 00 01 00 02 04 19 00 +T 4A 02 00 00 E7 03 DD 71 E6 DD 70 E7 2A +R 00 00 01 00 +T 53 02 00 00 00 00 00 00 CD 00 00 00 00 30 06 +R 00 00 01 00 02 04 23 00 02 09 19 00 +T 5A 02 00 00 +R 00 00 01 00 +T 5A 02 00 00 +R 00 00 01 00 +T 5A 02 00 00 +R 00 00 01 00 +T 5A 02 00 00 21 FF FF C3 30 06 00 00 +R 00 00 01 00 00 08 01 00 +T 60 02 00 00 +R 00 00 01 00 +T 60 02 00 00 +R 00 00 01 00 +T 60 02 00 00 C3 1F 00 00 00 +R 00 00 01 00 00 05 01 00 +T 63 02 00 00 +R 00 00 01 00 +T 63 02 00 00 21 18 00 DD 4E DC DD 46 DD 09 CD +R 00 00 01 00 +T 6E 02 00 00 00 00 00 00 11 19 00 3E +R 00 00 01 00 02 04 16 00 +T 74 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T 79 02 00 00 00 00 00 00 DD 75 DA DD 74 DB 21 +R 00 00 01 00 02 04 01 00 +T 82 02 00 00 00 00 39 4D 44 DD 5E DA DD 56 DB +R 00 00 01 00 +T 8D 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T 93 02 00 00 00 00 00 00 DD 6E DA DD 66 DB 4E +R 00 00 01 00 02 04 01 00 +T 9C 02 00 00 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 15 00 +T A2 02 00 00 00 00 00 00 CD 00 00 00 00 C1 A7 +R 00 00 01 00 02 04 15 00 02 09 01 00 +T A9 02 00 00 ED 42 01 00 00 DD 75 DE DD 74 DF +R 00 00 01 00 +T B4 02 00 00 DD 71 E0 DD 70 E1 C5 E5 21 0C 00 +R 00 00 01 00 +T BF 02 00 00 DD 4E DC DD 46 DD 09 5E 23 56 23 +R 00 00 01 00 +T CA 02 00 00 4E 23 46 EB CD 00 00 00 00 30 2E +R 00 00 01 00 02 09 13 00 +T D3 02 00 00 21 0C 00 DD 4E DC DD 46 DD 09 4E +R 00 00 01 00 +T DE 02 00 00 23 46 23 5E 23 56 69 60 4D 44 DD +R 00 00 01 00 +T E9 02 00 00 6E DE DD 66 DF A7 ED 42 4D 44 DD +R 00 00 01 00 +T F4 02 00 00 6E E0 DD 66 E1 ED 52 E5 69 60 C1 +R 00 00 01 00 +T FF 02 00 00 18 28 +R 00 00 01 00 +T 01 03 00 00 +R 00 00 01 00 +T 01 03 00 00 21 0C 00 DD 4E DC DD 46 DD 09 4E +R 00 00 01 00 +T 0C 03 00 00 23 46 23 5E 23 56 69 60 A7 DD 4E +R 00 00 01 00 +T 17 03 00 00 DE DD 46 DF ED 42 EB DD 4E E0 DD +R 00 00 01 00 +T 22 03 00 00 46 E1 ED 42 4D 44 EB +R 00 00 01 00 +T 29 03 00 00 +R 00 00 01 00 +T 29 03 00 00 DD 75 E2 DD 74 E3 DD 71 E4 DD 70 +R 00 00 01 00 +T 34 03 00 00 E5 21 0C 00 DD 4E DC DD 46 DD 09 +R 00 00 01 00 +T 3F 03 00 00 5E 23 56 23 4E 23 46 C5 D5 01 +R 00 00 01 00 +T 49 03 00 00 00 00 21 07 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 0D 00 +T 52 03 00 00 E5 DD 6E DE DD 66 DF C1 09 EB DD +R 00 00 01 00 +T 5D 03 00 00 6E E0 DD 66 E1 C1 ED 4A E5 D5 21 +R 00 00 01 00 +T 68 03 00 00 04 00 C1 09 EB 21 00 00 C1 ED 4A +R 00 00 01 00 +T 73 03 00 00 4D 44 EB 3E 03 CD 00 00 00 00 E5 +R 00 00 01 00 02 0A 20 00 +T 7C 03 00 00 21 0C 00 DD 5E DC DD 56 DD 19 D1 +R 00 00 01 00 +T 87 03 00 00 73 23 72 23 71 23 70 21 10 00 DD +R 00 00 01 00 +T 92 03 00 00 4E DC DD 46 DD 09 5E 23 56 23 4E +R 00 00 01 00 +T 9D 03 00 00 23 46 C5 D5 01 00 00 21 03 00 CD +R 00 00 01 00 +T A8 03 00 00 00 00 00 00 C5 E5 DD 6E E2 DD 66 +R 00 00 01 00 02 04 0D 00 +T B1 03 00 00 E3 C1 09 EB DD 6E E4 DD 66 E5 C1 +R 00 00 01 00 +T BC 03 00 00 ED 4A E5 D5 21 02 00 C1 09 EB 21 +R 00 00 01 00 +T C7 03 00 00 00 00 C1 ED 4A 4D 44 EB 3E 02 CD +R 00 00 01 00 +T D2 03 00 00 00 00 00 00 E5 21 10 00 DD 5E DC +R 00 00 01 00 02 04 20 00 +T DB 03 00 00 DD 56 DD 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T E6 03 00 00 70 21 10 00 DD 4E DC DD 46 DD 09 +R 00 00 01 00 +T F1 03 00 00 5E 23 56 23 4E 23 46 EB 3E 02 CD +R 00 00 01 00 +T FC 03 00 00 00 00 00 00 C5 E5 21 0C 00 DD 4E +R 00 00 01 00 02 04 0A 00 +T 05 04 00 00 DC DD 46 DD 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 10 04 00 00 56 69 60 C1 09 EB C1 ED 4A 4D 44 +R 00 00 01 00 +T 1B 04 00 00 EB E5 21 08 00 DD 5E DC DD 56 DD +R 00 00 01 00 +T 26 04 00 00 19 D1 73 23 72 23 71 23 70 DD 6E +R 00 00 01 00 +T 31 04 00 00 DC DD 66 DD 7E 23 B6 28 1C +R 00 00 01 00 +T 3A 04 00 00 +R 00 00 01 00 +T 3A 04 00 00 DD 5E DC DD 56 DD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 42 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 1D 00 02 0A 01 00 +T 49 04 00 00 5E DC DD 56 DD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T 51 04 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 56 04 00 00 +R 00 00 01 00 +T 56 04 00 00 2A 00 00 00 00 7D B4 28 1E +R 00 00 01 00 02 05 06 00 +T 5D 04 00 00 +R 00 00 01 00 +T 5D 04 00 00 DD 6E E0 DD 66 E1 E5 DD 6E DE DD +R 00 00 01 00 +T 68 04 00 00 66 DF E5 DD 5E DA DD 56 DB 3E +R 00 00 01 00 +T 72 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T 77 04 00 00 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 01 00 +T 7B 04 00 00 +R 00 00 01 00 +T 7B 04 00 00 21 04 00 DD 4E DA DD 46 DB 09 7E +R 00 00 01 00 +T 86 04 00 00 B7 CA 66 05 00 00 21 08 00 DD 4E +R 00 00 01 00 00 06 01 00 +T 8F 04 00 00 DA DD 46 DB 09 7E FE 03 28 10 21 +R 00 00 01 00 +T 9A 04 00 00 0B 00 DD 4E DA DD 46 DB 09 7E 23 +R 00 00 01 00 +T A5 04 00 00 B6 C2 66 05 00 00 +R 00 00 01 00 00 06 01 00 +T A9 04 00 00 +R 00 00 01 00 +T A9 04 00 00 +R 00 00 01 00 +T A9 04 00 00 +R 00 00 01 00 +T A9 04 00 00 +R 00 00 01 00 +T A9 04 00 00 +R 00 00 01 00 +T A9 04 00 00 AF DD 36 EA 58 DD 36 EB 02 DD 77 +R 00 00 01 00 +T B4 04 00 00 EC DD 77 ED 21 15 00 DD 4E DA DD +R 00 00 01 00 +T BF 04 00 00 46 DB 09 46 23 66 68 DD 75 E8 DD +R 00 00 01 00 +T CA 04 00 00 74 E9 +R 00 00 01 00 +T CC 04 00 00 +R 00 00 01 00 +T CC 04 00 00 DD 7E E8 DD B6 E9 28 43 +R 00 00 01 00 +T D4 04 00 00 +R 00 00 01 00 +T D4 04 00 00 21 0F 00 DD 4E E8 DD 46 E9 09 3E +R 00 00 01 00 +T DF 04 00 00 06 AE 23 B6 20 1E +R 00 00 01 00 +T E5 04 00 00 +R 00 00 01 00 +T E5 04 00 00 21 09 00 DD 4E E8 DD 46 E9 09 5E +R 00 00 01 00 +T F0 04 00 00 23 56 23 4E 23 46 EB DD 75 EA DD +R 00 00 01 00 +T FB 04 00 00 74 EB DD 71 EC DD 70 ED +R 00 00 01 00 +T 03 05 00 00 +R 00 00 01 00 +T 03 05 00 00 DD 6E E8 DD 66 E9 23 23 46 23 66 +R 00 00 01 00 +T 0E 05 00 00 68 DD 75 E8 DD 74 E9 18 B5 +R 00 00 01 00 +T 17 05 00 00 +R 00 00 01 00 +T 17 05 00 00 21 11 00 DD 4E DA DD 46 DB 09 46 +R 00 00 01 00 +T 22 05 00 00 23 66 68 DD 75 E8 DD 74 E9 +R 00 00 01 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 DD 7E E8 DD B6 E9 28 31 +R 00 00 01 00 +T 33 05 00 00 +R 00 00 01 00 +T 33 05 00 00 21 09 00 DD 4E E8 DD 46 E9 09 DD +R 00 00 01 00 +T 3E 05 00 00 4E EC DD 46 ED DD 5E EA DD 56 EB +R 00 00 01 00 +T 49 05 00 00 73 23 72 23 71 23 70 DD 6E E8 DD +R 00 00 01 00 +T 54 05 00 00 66 E9 23 23 46 23 66 68 DD 75 E8 +R 00 00 01 00 +T 5F 05 00 00 DD 74 E9 18 C7 +R 00 00 01 00 +T 64 05 00 00 +R 00 00 01 00 +T 64 05 00 00 18 1D +R 00 00 01 00 +T 66 05 00 00 +R 00 00 01 00 +T 66 05 00 00 21 11 00 DD 4E DA DD 46 DB 09 5E +R 00 00 01 00 +T 71 05 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0C 00 +T 76 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 7C 05 00 00 11 00 09 AF 77 23 77 +R 00 00 01 00 +T 83 05 00 00 +R 00 00 01 00 +T 83 05 00 00 21 17 00 DD 4E DA DD 46 DB 09 5E +R 00 00 01 00 +T 8E 05 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 27 00 +T 93 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 27 00 02 09 01 00 +T 99 05 00 00 15 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 27 00 +T A1 05 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 27 00 02 0A 01 00 +T A8 05 00 00 13 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 27 00 +T B0 05 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 27 00 02 0A 01 00 +T B7 05 00 00 11 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 27 00 +T BF 05 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 27 00 02 0A 01 00 +T C6 05 00 00 00 00 00 00 7C 07 9F 4F 41 C5 E5 +R 00 00 01 00 02 04 1C 00 +T CF 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T D5 05 00 00 00 00 00 00 59 50 C1 09 EB C1 ED +R 00 00 01 00 02 04 01 00 +T DE 05 00 00 4A 4D 44 EB 22 00 00 00 00 ED 43 +R 00 00 01 00 02 09 1F 00 +T E7 05 00 00 02 00 00 00 2A 00 00 00 00 7D B4 +R 00 00 01 00 02 04 1F 00 02 09 24 00 +T EE 05 00 00 20 2F +R 00 00 01 00 +T F0 05 00 00 +R 00 00 01 00 +T F0 05 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T FB 05 00 00 E5 21 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 0F 00 +T 03 06 00 00 21 00 00 00 00 E5 01 00 02 11 +R 00 00 01 00 02 05 0F 00 +T 0B 06 00 00 18 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 28 00 +T 10 06 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 28 00 02 09 01 00 +T 17 06 00 00 0C 00 39 F9 EB 22 00 00 00 00 +R 00 00 01 00 02 0A 24 00 +T 1F 06 00 00 +R 00 00 01 00 +T 1F 06 00 00 DD 5E DA DD 56 DB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 27 06 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 01 00 +T 2E 06 00 00 00 00 +R 00 00 01 00 +T 30 06 00 00 +R 00 00 01 00 +T 30 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 64 6F 6D 61 69 6E 20 73 65 6E 64 +R 00 00 02 00 +T 0B 00 00 00 74 6F 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 64 6E 73 5F 71 75 65 72 79 00 +R 00 00 02 00 +T 18 00 00 00 +R 00 00 02 00 +T 18 00 00 00 64 6F 6D 61 69 6E 20 75 70 64 61 +R 00 00 02 00 +T 23 00 00 00 74 65 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/docache.rel b/src/nos/lib/internet_lib/docache.rel new file mode 100644 index 00000000..fb68c774 --- /dev/null +++ b/src/nos/lib/internet_lib/docache.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _Dcachecmds Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D flags 0 +S _docache Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 E5 C5 4B 42 11 00 00 00 00 3E +R 00 00 01 00 02 09 03 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 16 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0B 01 00 diff --git a/src/nos/lib/internet_lib/docacheclean.rel b/src/nos/lib/internet_lib/docacheclean.rel new file mode 100644 index 00000000..c510ae30 --- /dev/null +++ b/src/nos/lib/internet_lib/docacheclean.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Dfile_clean Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___0464_684a_discard_20expired_2 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setbool Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1E flags 0 +S _docacheclean Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 04 00 +T 06 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T 0C 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 01 00 2B 0A 07 00 +T 12 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 19 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 02 00 diff --git a/src/nos/lib/internet_lib/docachelist.rel b/src/nos/lib/internet_lib/docachelist.rel new file mode 100644 index 00000000..5b109215 --- /dev/null +++ b/src/nos/lib/internet_lib/docachelist.rel @@ -0,0 +1,135 @@ +XL4 +H 3 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _newsession Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _put_rr Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _freesession Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _dcache_search Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Dcache Ref00000000 +S _Cmdline Ref00000000 +S _keywait Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 123 flags 0 +S _docachelist Def00000000 +A CSTR size 9 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 36 FE 19 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 DD 36 FF 00 21 01 00 E5 01 0D 00 +R 00 00 01 00 +T 14 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 0D 00 2B 0B 03 00 +T 1A 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 21 00 00 00 DD 75 FC DD 74 FD 7D B4 20 06 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 FF FF C3 20 01 00 00 +R 00 00 01 00 00 08 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0A 00 +T 37 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 3D 00 00 00 17 00 DD 4E FC DD 46 FD 09 CB 8E +R 00 00 01 00 +T 48 00 00 00 21 17 00 09 CB 86 2A 00 00 00 00 +R 00 00 01 00 02 0B 0C 00 +T 51 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 7E FA DD B6 FB CA EE 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 4E FA DD 46 FB 21 40 00 ED 5B +R 00 00 01 00 +T 6B 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 06 00 +T 72 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 77 00 00 00 00 00 00 00 DD 6E FE DD 66 FF 2B +R 00 00 01 00 02 04 00 00 +T 80 00 00 00 DD 75 FE DD 74 FF 7D B4 20 4F +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 01 00 00 11 00 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T 91 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 96 00 00 00 00 00 00 00 DD 75 FE DD 74 FF EB +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 CD 00 00 00 00 06 00 0A 00 0D 00 +R 00 00 01 00 02 05 02 00 +T A8 00 00 00 20 00 51 00 71 00 FF FF +R 00 00 01 00 +T B0 00 00 00 D1 00 00 00 BE 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B4 00 00 00 BE 00 00 00 BE 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B8 00 00 00 D1 00 00 00 C7 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T BC 00 00 00 C7 00 00 00 +R 00 00 01 00 00 04 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 AF DD 77 FA DD 77 FB 18 12 +R 00 00 01 00 +T C7 00 00 00 +R 00 00 01 00 +T C7 00 00 00 DD 36 FE 01 DD 36 FF 00 18 08 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 36 FE 19 DD 36 FF 00 +R 00 00 01 00 +T D9 00 00 00 +R 00 00 01 00 +T D9 00 00 00 +R 00 00 01 00 +T D9 00 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T E4 00 00 00 68 DD 75 FA DD 74 FB C3 +R 00 00 01 00 +T EC 00 00 00 57 00 00 00 +R 00 00 01 00 00 04 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 21 40 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 06 00 +T F7 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T FC 00 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 02 01 00 00 01 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T 0A 01 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 11 01 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T 18 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 1E 01 00 00 00 00 +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2D 2D 4D 6F 72 65 2D 2D 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/docachesize.rel b/src/nos/lib/internet_lib/docachesize.rel new file mode 100644 index 00000000..8e68b8f7 --- /dev/null +++ b/src/nos/lib/internet_lib/docachesize.rel @@ -0,0 +1,55 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Dcache_size Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___04d5_69ba_memory_20cache_20si Ref00000000 +S _setint Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _dcache_search Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 77 flags 0 +S _docachesize Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 2A +R 00 00 01 00 02 05 06 00 +T 06 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 01 00 +T 0F 00 00 00 75 FA DD 74 FB C5 DD 4E 02 DD 46 +R 00 00 01 00 +T 1A 00 00 00 03 C5 0E 00 00 00 00 C5 01 +R 00 00 01 00 2B 07 03 00 +T 20 00 00 00 00 00 00 00 C5 21 08 00 39 5D 54 +R 00 00 01 00 02 04 03 00 +T 29 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 2F 00 00 00 00 00 00 00 F1 F1 F1 F1 DD 75 FE +R 00 00 01 00 02 04 00 00 +T 38 00 00 00 DD 74 FF DD 4E FA DD 46 FB 21 +R 00 00 01 00 +T 42 00 00 00 00 00 CD 00 00 00 00 30 25 +R 00 00 01 00 02 07 08 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 6E FA DD 66 FB 22 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 52 00 00 00 DD 4E FC DD 46 FD DD 6E FA DD 66 +R 00 00 01 00 +T 5D 00 00 00 FB CD 00 00 00 00 30 0B +R 00 00 01 00 02 06 08 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 69 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/internet_lib/docachewait.rel b/src/nos/lib/internet_lib/docachewait.rel new file mode 100644 index 00000000..b422c767 --- /dev/null +++ b/src/nos/lib/internet_lib/docachewait.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___05b2_43a3_time_20before_20fil Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _setint Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Dfile_wait_relative Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1E flags 0 +S _docachewait Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 01 00 02 0A 01 00 +T 0C 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 2B 0A 03 00 +T 12 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 19 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 02 00 diff --git a/src/nos/lib/internet_lib/dodnsadd.rel b/src/nos/lib/internet_lib/dodnsadd.rel new file mode 100644 index 00000000..57d8015a --- /dev/null +++ b/src/nos/lib/internet_lib/dodnsadd.rel @@ -0,0 +1,50 @@ +XL4 +H 2 areas A global symbols +S _resolve Ref00000000 +S _add_nameserver Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___0366_4784_Resolver_20_25s_20u Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 60 flags 0 +S _dodnsadd Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 03 03 0A 5F +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 03 0A 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 16 00 00 00 FC DD 74 FD DD 71 FE DD 70 FF 7D +R 00 00 01 00 +T 21 00 00 00 B4 B1 B0 20 23 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 31 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 05 00 +T 36 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 2B 0A 07 00 +T 3C 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 02 00 +T 43 00 00 00 F1 21 01 00 18 14 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 4E FE DD 46 FF DD 5E FC DD 56 +R 00 00 01 00 +T 54 00 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 5A 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/internet_lib/dodnsdrop.rel b/src/nos/lib/internet_lib/dodnsdrop.rel new file mode 100644 index 00000000..ffad999b --- /dev/null +++ b/src/nos/lib/internet_lib/dodnsdrop.rel @@ -0,0 +1,82 @@ +XL4 +H 2 areas C global symbols +S _resolve Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Dservers Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ___0316_ee7e_Not_20found_0a Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S _dlist_drop Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B0 flags 0 +S _dodnsdrop Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 03 03 0A 5F +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 03 0A 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 16 00 00 00 FC DD 74 FD DD 71 FE DD 70 FF 2A +R 00 00 01 00 +T 21 00 00 00 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 02 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 7E FA DD B6 FB 28 3F +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 21 04 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T 3C 00 00 00 23 46 23 5E 23 56 69 60 DD 4E FC +R 00 00 01 00 +T 47 00 00 00 DD 46 FD A7 ED 42 20 0D EB DD 4E +R 00 00 01 00 +T 52 00 00 00 FE DD 46 FF ED 42 20 02 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 18 14 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T 67 00 00 00 68 DD 75 FA DD 74 FB 18 B9 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 DD 7E FA DD B6 FB 20 16 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 06 00 02 0B 06 00 +T 7E 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 84 00 00 00 CD 00 00 00 00 F1 F1 21 01 00 18 +R 00 00 01 00 02 05 01 00 +T 8D 00 00 00 1F +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 96 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 9D 00 00 00 5E FA DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T A5 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T AB 00 00 00 00 00 +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/internet_lib/dodnslist.rel b/src/nos/lib/internet_lib/dodnslist.rel new file mode 100644 index 00000000..1a613d18 --- /dev/null +++ b/src/nos/lib/internet_lib/dodnslist.rel @@ -0,0 +1,73 @@ +XL4 +H 2 areas B global symbols +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Dservers Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___0100_e920__25_2d20s_258lu_258 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___0381_afab_Server_20address_20 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D2 flags 0 +S _dodnslist Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 1E +R 00 00 01 00 02 05 06 00 +T 06 00 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 07 00 02 0A 07 00 +T 0C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 12 00 00 00 00 00 00 00 F1 F1 2A 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0B 02 00 +T 19 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 7E FE DD B6 FF CA CC 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 18 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 33 00 00 00 23 56 23 4E 23 46 C5 D5 21 14 00 +R 00 00 01 00 +T 3E 00 00 00 DD 4E FE DD 46 FF 09 5E 23 56 23 +R 00 00 01 00 +T 49 00 00 00 4E 23 46 C5 D5 21 08 00 DD 4E FE +R 00 00 01 00 +T 54 00 00 00 DD 46 FF 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 5F 00 00 00 C5 D5 21 10 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T 6A 00 00 00 09 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 75 00 00 00 0C 00 DD 4E FE DD 46 FF 09 5E 23 +R 00 00 01 00 +T 80 00 00 00 56 23 4E 23 46 C5 D5 21 04 00 DD +R 00 00 01 00 +T 8B 00 00 00 4E FE DD 46 FF 09 5E 23 56 23 4E +R 00 00 01 00 +T 96 00 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T 9B 00 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 00 00 02 09 01 00 +T A2 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T A8 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T AE 00 00 00 00 00 00 00 EB 21 1A 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T B7 00 00 00 DD 6E FE DD 66 FF 23 23 46 23 66 +R 00 00 01 00 +T C2 00 00 00 68 DD 75 FE DD 74 FF C3 +R 00 00 01 00 +T CA 00 00 00 1F 00 00 00 +R 00 00 01 00 00 04 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 03 00 diff --git a/src/nos/lib/internet_lib/dodnsquery.rel b/src/nos/lib/internet_lib/dodnsquery.rel new file mode 100644 index 00000000..fa8c0c8b --- /dev/null +++ b/src/nos/lib/internet_lib/dodnsquery.rel @@ -0,0 +1,200 @@ +XL4 +H 3 areas 17 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _newsession Ref00000000 +S _checksuffix Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _dns_query Ref00000000 +S _put_rr Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _make_rr Ref00000000 +S _free Ref00000000 +S _free_rr Ref00000000 +S _freesession Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _dcache_search Ref00000000 +S _aton Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _isaddr Ref00000000 +S _inverse_a Ref00000000 +S _Cmdline Ref00000000 +S _keywait Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F5 flags 0 +S _dodnsquery Def00000000 +A CSTR size 9 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 36 FE 19 +R 00 00 01 00 02 05 0E 00 +T 09 00 00 00 DD 36 FF 00 21 01 00 E5 01 0C 00 +R 00 00 01 00 +T 14 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 14 00 2B 0B 03 00 +T 1A 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 21 00 00 00 DD 75 FC DD 74 FD 7D B4 20 06 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 FF FF C3 F2 01 00 00 +R 00 00 01 00 00 08 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 3C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T 42 00 00 00 00 00 00 00 7D B4 28 25 +R 00 00 01 00 02 04 00 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 53 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T 59 00 00 00 00 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 0A 13 00 +T 5F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 66 00 00 00 F8 DD 74 F9 C3 FD 00 00 00 +R 00 00 01 00 00 09 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 78 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 7E 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 01 +R 00 00 01 00 02 04 00 00 +T 87 00 00 00 00 00 C5 01 00 00 C5 01 00 00 C5 +R 00 00 01 00 +T 92 00 00 00 01 00 00 C5 01 FF 00 C5 01 01 00 +R 00 00 01 00 +T 9D 00 00 00 C5 4D 44 11 08 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T A5 00 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T AC 00 00 00 21 0C 00 39 F9 EB DD 75 F6 DD 74 +R 00 00 01 00 +T B7 00 00 00 F7 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T BF 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T C4 00 00 00 00 00 00 00 AF DD 77 FA DD 77 FB +R 00 00 01 00 02 04 00 00 +T CD 00 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T D5 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T DC 00 00 00 5E F6 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T E4 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T EB 00 00 00 F8 DD 74 F9 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T F6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T FB 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T FD 00 00 00 +R 00 00 01 00 +T FD 00 00 00 21 17 00 DD 4E FC DD 46 FD 09 CB +R 00 00 01 00 +T 08 01 00 00 8E 21 17 00 09 CB 86 DD 6E F8 DD +R 00 00 01 00 +T 13 01 00 00 66 F9 DD 75 F6 DD 74 F7 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 DD 7E F6 DD B6 F7 CA B2 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 DD 4E F6 DD 46 F7 21 40 00 ED 5B +R 00 00 01 00 +T 2F 01 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 08 00 +T 36 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 3B 01 00 00 00 00 00 00 DD 6E FE DD 66 FF 2B +R 00 00 01 00 02 04 00 00 +T 44 01 00 00 DD 75 FE DD 74 FF 7D B4 20 4F +R 00 00 01 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 01 00 00 11 00 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T 55 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 5A 01 00 00 00 00 00 00 DD 75 FE DD 74 FF EB +R 00 00 01 00 02 04 00 00 +T 63 01 00 00 CD 00 00 00 00 06 00 0A 00 0D 00 +R 00 00 01 00 02 05 02 00 +T 6C 01 00 00 20 00 51 00 71 00 FF FF +R 00 00 01 00 +T 74 01 00 00 95 01 00 00 82 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 78 01 00 00 82 01 00 00 82 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7C 01 00 00 95 01 00 00 8B 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 80 01 00 00 8B 01 00 00 +R 00 00 01 00 00 04 01 00 +T 82 01 00 00 +R 00 00 01 00 +T 82 01 00 00 AF DD 77 F6 DD 77 F7 18 12 +R 00 00 01 00 +T 8B 01 00 00 +R 00 00 01 00 +T 8B 01 00 00 DD 36 FE 01 DD 36 FF 00 18 08 +R 00 00 01 00 +T 95 01 00 00 +R 00 00 01 00 +T 95 01 00 00 +R 00 00 01 00 +T 95 01 00 00 DD 36 FE 19 DD 36 FF 00 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 DD 6E F6 DD 66 F7 23 23 46 23 66 +R 00 00 01 00 +T A8 01 00 00 68 DD 75 F6 DD 74 F7 C3 +R 00 00 01 00 +T B0 01 00 00 1B 01 00 00 +R 00 00 01 00 00 04 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 21 40 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 08 00 +T BB 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T C0 01 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 01 00 02 09 00 00 +T C7 01 00 00 F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0C 00 +T CE 01 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T D4 01 00 00 01 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 15 00 +T DC 01 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 15 00 02 09 00 00 +T E3 01 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0D 00 +T EA 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T F0 01 00 00 00 00 +R 00 00 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2D 2D 4D 6F 72 65 2D 2D 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/dodnsretry.rel b/src/nos/lib/internet_lib/dodnsretry.rel new file mode 100644 index 00000000..b72f70a4 --- /dev/null +++ b/src/nos/lib/internet_lib/dodnsretry.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _setint Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___0574_6f48_server_20retries Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Dserver_retries Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1E flags 0 +S _dodnsretry Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 04 00 +T 06 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T 0C 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 07 00 2B 0A 02 00 +T 12 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 19 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/internet_lib/dodnstrace.rel b/src/nos/lib/internet_lib/dodnstrace.rel new file mode 100644 index 00000000..7c61567b --- /dev/null +++ b/src/nos/lib/internet_lib/dodnstrace.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0575_f0af_server_20trace Ref00000000 +S _Dtrace Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setbool Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1E flags 0 +S _dodnstrace Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 01 00 02 0A 01 00 +T 0C 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 02 00 2B 0A 07 00 +T 12 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 19 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 03 00 diff --git a/src/nos/lib/internet_lib/dodomain.rel b/src/nos/lib/internet_lib/dodomain.rel new file mode 100644 index 00000000..ce1e9fdd --- /dev/null +++ b/src/nos/lib/internet_lib/dodomain.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Dcmds Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D flags 0 +S _dodomain Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 E5 C5 4B 42 11 00 00 00 00 3E +R 00 00 01 00 02 09 04 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 16 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0B 01 00 diff --git a/src/nos/lib/internet_lib/domhdr.rel b/src/nos/lib/internet_lib/domhdr.rel new file mode 100644 index 00000000..26038251 --- /dev/null +++ b/src/nos/lib/internet_lib/domhdr.rel @@ -0,0 +1,969 @@ +XL4 +H 2 areas 15 global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _memset Ref00000000 +S _memcpy Ref00000000 +S _len_p Ref00000000 +S _strncpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _strdupw Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _free Ref00000000 +S _get32 Ref00000000 +S _callocw Ref00000000 +S _get16 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C97 flags 0 +S _ntohdomain Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF 0A 5F 03 0A +R 00 00 01 00 02 05 11 00 +T 09 00 00 00 57 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 0F 00 00 00 CD 00 00 00 00 DD 75 F6 DD 74 F7 +R 00 00 01 00 02 05 01 00 +T 18 00 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T 1E 00 00 00 CD 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 01 00 +T 27 00 00 00 DD 4E F6 DD 46 F7 C5 4D 44 DD 5E +R 00 00 01 00 +T 32 00 00 00 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0C 00 +T 39 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 40 00 00 00 19 00 E5 01 00 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 4B 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 51 00 00 00 CD 00 00 00 00 F1 DD 5E FA DD 56 +R 00 00 01 00 02 05 01 00 +T 5A 00 00 00 FB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 60 00 00 00 CD 00 00 00 00 E5 DD 6E 02 DD 66 +R 00 00 01 00 02 05 01 00 +T 69 00 00 00 03 C1 71 23 70 DD 5E FA DD 56 FB +R 00 00 01 00 +T 74 00 00 00 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 10 00 +T 79 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 80 00 00 00 F4 DD 74 F5 7D E6 00 47 7C E6 80 +R 00 00 01 00 +T 8B 00 00 00 B0 28 0A +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 DD 6E 02 DD 66 03 23 23 36 01 +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 06 0B DD 5E F4 DD 56 F5 CD +R 00 00 01 00 +T A1 00 00 00 00 00 00 00 7B E6 0F DD 6E 02 DD +R 00 00 01 00 02 04 00 00 +T AA 00 00 00 66 03 23 23 23 77 DD 7E F4 E6 00 +R 00 00 01 00 +T B5 00 00 00 47 DD 7E F5 E6 04 B0 28 0C +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T C9 00 00 00 01 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 DD 7E F4 E6 00 47 DD 7E F5 E6 02 +R 00 00 01 00 +T D5 00 00 00 B0 28 0C +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 21 05 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T E3 00 00 00 01 +R 00 00 01 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 DD 7E F4 E6 00 47 DD 7E F5 E6 01 +R 00 00 01 00 +T EF 00 00 00 B0 28 0C +R 00 00 01 00 +T F2 00 00 00 +R 00 00 01 00 +T F2 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T FD 00 00 00 01 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 DD 7E F4 E6 80 28 0C +R 00 00 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 21 07 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 10 01 00 00 01 +R 00 00 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 DD 7E F4 E6 0F 21 08 00 DD 4E 02 +R 00 00 01 00 +T 1C 01 00 00 DD 46 03 09 77 21 09 00 09 E5 21 +R 00 00 01 00 +T 27 01 00 00 04 00 DD 5E FA DD 56 FB 19 EB 3E +R 00 00 01 00 +T 32 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 37 01 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T 3F 01 00 00 0B 00 09 E5 21 06 00 DD 5E FA DD +R 00 00 01 00 +T 4A 01 00 00 56 FB 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 10 00 +T 51 01 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 58 01 00 00 73 23 72 21 0D 00 09 E5 21 08 00 +R 00 00 01 00 +T 63 01 00 00 DD 5E FA DD 56 FB 19 EB 3E +R 00 00 01 00 +T 6C 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 71 01 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T 79 01 00 00 0F 00 09 E5 21 0A 00 DD 5E FA DD +R 00 00 01 00 +T 84 01 00 00 56 FB 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 10 00 +T 8B 01 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 92 01 00 00 73 23 72 21 0C 00 DD 5E FA DD 56 +R 00 00 01 00 +T 9D 01 00 00 FB 19 DD 75 FC DD 74 FD 21 11 00 +R 00 00 01 00 +T A8 01 00 00 09 DD 75 FE DD 74 FF AF DD 77 F8 +R 00 00 01 00 +T B3 01 00 00 DD 77 F9 +R 00 00 01 00 +T B6 01 00 00 +R 00 00 01 00 +T B6 01 00 00 21 09 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T C1 01 00 00 23 46 DD 6E F8 DD 66 F9 A7 ED 42 +R 00 00 01 00 +T CC 01 00 00 30 61 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 DD 6E FC DD 66 FD E5 DD 4E FA DD +R 00 00 01 00 +T D9 01 00 00 46 FB DD 5E FE DD 56 FF CD +R 00 00 01 00 +T E2 01 00 00 1A 04 00 00 F1 DD 75 FC DD 74 FD +R 00 00 01 00 00 04 01 00 +T EB 01 00 00 7D B4 20 14 +R 00 00 01 00 +T EF 01 00 00 +R 00 00 01 00 +T EF 01 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T F7 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T FE 01 00 00 FF FF C3 17 04 00 00 +R 00 00 01 00 00 07 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 DD 6E FE DD 66 FF 46 23 66 68 01 +R 00 00 01 00 +T 0E 02 00 00 04 00 09 36 04 DD 6E FE DD 66 FF +R 00 00 01 00 +T 19 02 00 00 46 23 66 68 23 23 DD 75 FE DD 74 +R 00 00 01 00 +T 24 02 00 00 FF DD 34 F8 20 03 DD 34 F9 +R 00 00 01 00 +T 2D 02 00 00 +R 00 00 01 00 +T 2D 02 00 00 18 87 +R 00 00 01 00 +T 2F 02 00 00 +R 00 00 01 00 +T 2F 02 00 00 DD 6E FE DD 66 FF AF 77 23 77 21 +R 00 00 01 00 +T 3A 02 00 00 13 00 DD 4E 02 DD 46 03 09 DD 75 +R 00 00 01 00 +T 45 02 00 00 FE DD 74 FF AF DD 77 F8 DD 77 F9 +R 00 00 01 00 +T 50 02 00 00 +R 00 00 01 00 +T 50 02 00 00 21 0B 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 5B 02 00 00 23 46 DD 6E F8 DD 66 F9 A7 ED 42 +R 00 00 01 00 +T 66 02 00 00 30 61 +R 00 00 01 00 +T 68 02 00 00 +R 00 00 01 00 +T 68 02 00 00 DD 6E FC DD 66 FD E5 DD 4E FA DD +R 00 00 01 00 +T 73 02 00 00 46 FB DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 7C 02 00 00 2B 05 00 00 F1 DD 75 FC DD 74 FD +R 00 00 01 00 00 04 01 00 +T 85 02 00 00 7D B4 20 14 +R 00 00 01 00 +T 89 02 00 00 +R 00 00 01 00 +T 89 02 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 91 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T 98 02 00 00 FF FF C3 17 04 00 00 +R 00 00 01 00 00 07 01 00 +T 9D 02 00 00 +R 00 00 01 00 +T 9D 02 00 00 DD 6E FE DD 66 FF 46 23 66 68 01 +R 00 00 01 00 +T A8 02 00 00 04 00 09 36 05 DD 6E FE DD 66 FF +R 00 00 01 00 +T B3 02 00 00 46 23 66 68 23 23 DD 75 FE DD 74 +R 00 00 01 00 +T BE 02 00 00 FF DD 34 F8 20 03 DD 34 F9 +R 00 00 01 00 +T C7 02 00 00 +R 00 00 01 00 +T C7 02 00 00 18 87 +R 00 00 01 00 +T C9 02 00 00 +R 00 00 01 00 +T C9 02 00 00 DD 6E FE DD 66 FF AF 77 23 77 21 +R 00 00 01 00 +T D4 02 00 00 15 00 DD 4E 02 DD 46 03 09 DD 75 +R 00 00 01 00 +T DF 02 00 00 FE DD 74 FF AF DD 77 F8 DD 77 F9 +R 00 00 01 00 +T EA 02 00 00 +R 00 00 01 00 +T EA 02 00 00 21 0D 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T F5 02 00 00 23 46 DD 6E F8 DD 66 F9 A7 ED 42 +R 00 00 01 00 +T 00 03 00 00 30 61 +R 00 00 01 00 +T 02 03 00 00 +R 00 00 01 00 +T 02 03 00 00 DD 6E FC DD 66 FD E5 DD 4E FA DD +R 00 00 01 00 +T 0D 03 00 00 46 FB DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 16 03 00 00 2B 05 00 00 F1 DD 75 FC DD 74 FD +R 00 00 01 00 00 04 01 00 +T 1F 03 00 00 7D B4 20 14 +R 00 00 01 00 +T 23 03 00 00 +R 00 00 01 00 +T 23 03 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 2B 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T 32 03 00 00 FF FF C3 17 04 00 00 +R 00 00 01 00 00 07 01 00 +T 37 03 00 00 +R 00 00 01 00 +T 37 03 00 00 DD 6E FE DD 66 FF 46 23 66 68 01 +R 00 00 01 00 +T 42 03 00 00 04 00 09 36 06 DD 6E FE DD 66 FF +R 00 00 01 00 +T 4D 03 00 00 46 23 66 68 23 23 DD 75 FE DD 74 +R 00 00 01 00 +T 58 03 00 00 FF DD 34 F8 20 03 DD 34 F9 +R 00 00 01 00 +T 61 03 00 00 +R 00 00 01 00 +T 61 03 00 00 18 87 +R 00 00 01 00 +T 63 03 00 00 +R 00 00 01 00 +T 63 03 00 00 DD 6E FE DD 66 FF AF 77 23 77 21 +R 00 00 01 00 +T 6E 03 00 00 17 00 DD 4E 02 DD 46 03 09 DD 75 +R 00 00 01 00 +T 79 03 00 00 FE DD 74 FF AF DD 77 F8 DD 77 F9 +R 00 00 01 00 +T 84 03 00 00 +R 00 00 01 00 +T 84 03 00 00 21 0F 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 8F 03 00 00 23 46 DD 6E F8 DD 66 F9 A7 ED 42 +R 00 00 01 00 +T 9A 03 00 00 30 60 +R 00 00 01 00 +T 9C 03 00 00 +R 00 00 01 00 +T 9C 03 00 00 DD 6E FC DD 66 FD E5 DD 4E FA DD +R 00 00 01 00 +T A7 03 00 00 46 FB DD 5E FE DD 56 FF CD +R 00 00 01 00 +T B0 03 00 00 2B 05 00 00 F1 DD 75 FC DD 74 FD +R 00 00 01 00 00 04 01 00 +T B9 03 00 00 7D B4 20 13 +R 00 00 01 00 +T BD 03 00 00 +R 00 00 01 00 +T BD 03 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T C5 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T CC 03 00 00 FF FF 18 47 +R 00 00 01 00 +T D0 03 00 00 +R 00 00 01 00 +T D0 03 00 00 DD 6E FE DD 66 FF 46 23 66 68 01 +R 00 00 01 00 +T DB 03 00 00 04 00 09 36 07 DD 6E FE DD 66 FF +R 00 00 01 00 +T E6 03 00 00 46 23 66 68 23 23 DD 75 FE DD 74 +R 00 00 01 00 +T F1 03 00 00 FF DD 34 F8 20 03 DD 34 F9 +R 00 00 01 00 +T FA 03 00 00 +R 00 00 01 00 +T FA 03 00 00 18 88 +R 00 00 01 00 +T FC 03 00 00 +R 00 00 01 00 +T FC 03 00 00 DD 6E FE DD 66 FF AF 77 23 77 DD +R 00 00 01 00 +T 07 04 00 00 5E FA DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T 0F 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 15 04 00 00 00 00 +R 00 00 01 00 +T 17 04 00 00 +R 00 00 01 00 +T 17 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 1A 04 00 00 +R 00 00 01 00 +T 1A 04 00 00 CD 00 00 00 00 FA FF 01 2B 00 11 +R 00 00 01 00 02 05 11 00 +T 23 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0F 00 +T 28 04 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T 2F 04 00 00 FA DD 74 FB E5 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 3A 04 00 00 C1 71 23 70 11 00 02 3E +R 00 00 01 00 +T 42 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 47 04 00 00 00 00 00 00 DD 75 FE DD 74 FF 01 +R 00 00 01 00 02 04 01 00 +T 50 04 00 00 00 02 C5 E5 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T 5B 04 00 00 01 00 00 DD 5E 04 DD 56 05 CD +R 00 00 01 00 +T 65 04 00 00 0F 0B 00 00 F1 F1 F1 DD 75 FC DD +R 00 00 01 00 00 04 01 00 +T 6E 04 00 00 74 FD 7D A4 3C 20 14 +R 00 00 01 00 +T 75 04 00 00 +R 00 00 01 00 +T 75 04 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 7D 04 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T 84 04 00 00 00 00 C3 28 05 00 00 +R 00 00 01 00 00 07 01 00 +T 89 04 00 00 +R 00 00 01 00 +T 89 04 00 00 21 0E 00 39 7E DD 86 FC 77 23 7E +R 00 00 01 00 +T 94 04 00 00 DD 8E FD 77 21 07 00 DD 4E FA DD +R 00 00 01 00 +T 9F 04 00 00 46 FB 09 E5 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T AA 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T AF 04 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T B7 04 00 00 0F 00 09 E5 DD 5E 08 DD 56 09 3E +R 00 00 01 00 +T C2 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T C7 04 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T CF 04 00 00 0E 00 39 7E C6 02 77 23 7E CE 00 +R 00 00 01 00 +T DA 04 00 00 77 21 0D 00 09 E5 DD 5E 08 DD 56 +R 00 00 01 00 +T E5 04 00 00 09 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T EB 04 00 00 CD 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 05 01 00 +T F4 04 00 00 0E 00 39 7E C6 02 77 23 7E CE 00 +R 00 00 01 00 +T FF 04 00 00 77 21 09 00 09 AF 77 23 77 23 77 +R 00 00 01 00 +T 0A 05 00 00 23 77 21 11 00 09 AF 77 23 77 DD +R 00 00 01 00 +T 15 05 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T 1D 05 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 24 05 00 00 08 DD 66 09 +R 00 00 01 00 +T 28 05 00 00 +R 00 00 01 00 +T 28 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 CD 00 00 00 00 FA FF 01 2B 00 11 +R 00 00 01 00 02 05 11 00 +T 34 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0F 00 +T 39 05 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T 40 05 00 00 FA DD 74 FB E5 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 4B 05 00 00 C1 71 23 70 11 00 02 3E +R 00 00 01 00 +T 53 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 58 05 00 00 00 00 00 00 DD 75 FE DD 74 FF 01 +R 00 00 01 00 02 04 01 00 +T 61 05 00 00 00 02 C5 E5 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T 6C 05 00 00 01 00 00 DD 5E 04 DD 56 05 CD +R 00 00 01 00 +T 76 05 00 00 0F 0B 00 00 F1 F1 F1 DD 75 FC DD +R 00 00 01 00 00 04 01 00 +T 7F 05 00 00 74 FD 7D A4 3C 20 14 +R 00 00 01 00 +T 86 05 00 00 +R 00 00 01 00 +T 86 05 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 8E 05 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T 95 05 00 00 00 00 C3 0C 0B 00 00 +R 00 00 01 00 00 07 01 00 +T 9A 05 00 00 +R 00 00 01 00 +T 9A 05 00 00 21 0E 00 39 7E DD 86 FC 77 23 7E +R 00 00 01 00 +T A5 05 00 00 DD 8E FD 77 21 07 00 DD 4E FA DD +R 00 00 01 00 +T B0 05 00 00 46 FB 09 E5 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T BB 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T C0 05 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T C8 05 00 00 0F 00 09 E5 DD 5E 08 DD 56 09 3E +R 00 00 01 00 +T D3 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T D8 05 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T E0 05 00 00 0E 00 39 7E C6 02 77 23 7E CE 00 +R 00 00 01 00 +T EB 05 00 00 77 21 0D 00 09 E5 DD 5E 08 DD 56 +R 00 00 01 00 +T F6 05 00 00 09 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T FC 05 00 00 CD 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 05 01 00 +T 05 06 00 00 0E 00 39 7E C6 02 77 23 7E CE 00 +R 00 00 01 00 +T 10 06 00 00 77 DD 5E 08 DD 56 09 3E +R 00 00 01 00 +T 18 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 1D 06 00 00 00 00 00 00 E5 21 09 00 DD 5E FA +R 00 00 01 00 02 04 01 00 +T 26 06 00 00 DD 56 FB 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 31 06 00 00 70 21 0E 00 39 7E C6 04 77 23 7E +R 00 00 01 00 +T 3C 06 00 00 CE 00 77 21 11 00 DD 4E FA DD 46 +R 00 00 01 00 +T 47 06 00 00 FB 09 E5 DD 5E 08 DD 56 09 3E +R 00 00 01 00 +T 51 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 56 06 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T 5E 06 00 00 0E 00 39 7E C6 02 77 23 7E CE 00 +R 00 00 01 00 +T 69 06 00 00 77 21 0F 00 09 5E 23 56 CD +R 00 00 01 00 +T 72 06 00 00 00 00 00 00 01 00 10 00 +R 00 00 01 00 02 04 02 00 +T 78 06 00 00 DE 0A 00 00 9A 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7C 06 00 00 CB 06 00 00 DE 0A 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 80 06 00 00 DE 0A 00 00 CB 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 84 06 00 00 BE 08 00 00 CB 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 88 06 00 00 CB 06 00 00 CB 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8C 06 00 00 DE 0A 00 00 DE 0A 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 90 06 00 00 CB 06 00 00 54 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 94 06 00 00 DE 0A 00 00 21 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 98 06 00 00 81 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 9A 06 00 00 +R 00 00 01 00 +T 9A 06 00 00 DD 5E 08 DD 56 09 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T A2 06 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 0E 00 02 0A 01 00 +T A9 06 00 00 21 13 00 DD 5E FA DD 56 FB 19 D1 +R 00 00 01 00 +T B4 06 00 00 73 23 72 23 71 23 70 21 0E 00 39 +R 00 00 01 00 +T BF 06 00 00 7E C6 04 77 23 7E CE 00 77 C3 +R 00 00 01 00 +T C9 06 00 00 F8 0A 00 00 +R 00 00 01 00 00 04 01 00 +T CB 06 00 00 +R 00 00 01 00 +T CB 06 00 00 21 00 02 E5 DD 6E FE DD 66 FF E5 +R 00 00 01 00 +T D6 06 00 00 DD 6E 08 DD 66 09 E5 01 00 00 DD +R 00 00 01 00 +T E1 06 00 00 5E 04 DD 56 05 CD 0F 0B 00 00 F1 +R 00 00 01 00 00 0A 01 00 +T EA 06 00 00 F1 F1 DD 75 FC DD 74 FD 7D A4 3C +R 00 00 01 00 +T F5 06 00 00 20 14 +R 00 00 01 00 +T F7 06 00 00 +R 00 00 01 00 +T F7 06 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T FF 06 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T 06 07 00 00 00 00 C3 0C 0B 00 00 +R 00 00 01 00 00 07 01 00 +T 0B 07 00 00 +R 00 00 01 00 +T 0B 07 00 00 21 13 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T 16 07 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 1E 07 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 25 07 00 00 E1 73 23 72 21 11 00 09 E5 DD 5E +R 00 00 01 00 +T 30 07 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T 37 07 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 08 00 02 09 01 00 +T 3E 07 00 00 E1 71 23 70 21 0E 00 39 7E DD 86 +R 00 00 01 00 +T 49 07 00 00 FC 77 23 7E DD 8E FD 77 C3 +R 00 00 01 00 +T 52 07 00 00 F8 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 54 07 00 00 +R 00 00 01 00 +T 54 07 00 00 DD 6E 08 DD 66 09 23 DD 75 08 DD +R 00 00 01 00 +T 5F 07 00 00 74 09 2B 4E 06 00 DD 71 FC DD 70 +R 00 00 01 00 +T 6A 07 00 00 FD 21 13 00 DD 5E FA DD 56 FB 19 +R 00 00 01 00 +T 75 07 00 00 E5 59 50 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 12 00 +T 7C 07 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 12 00 02 09 01 00 +T 83 07 00 00 E1 71 23 70 DD 6E FC DD 66 FD E5 +R 00 00 01 00 +T 8E 07 00 00 DD 4E 08 DD 46 09 21 13 00 DD 5E +R 00 00 01 00 +T 99 07 00 00 FA DD 56 FB 19 5E 23 56 3E +R 00 00 01 00 +T A2 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T A7 07 00 00 00 00 00 00 F1 21 0E 00 39 7E DD +R 00 00 01 00 02 04 01 00 +T B0 07 00 00 86 FC 77 23 7E DD 8E FD 77 DD 6E +R 00 00 01 00 +T BB 07 00 00 08 DD 66 09 23 DD 75 08 DD 74 09 +R 00 00 01 00 +T C6 07 00 00 2B 4E 06 00 DD 71 FC DD 70 FD 21 +R 00 00 01 00 +T D1 07 00 00 15 00 DD 5E FA DD 56 FB 19 E5 59 +R 00 00 01 00 +T DC 07 00 00 50 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 12 00 +T E1 07 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 12 00 02 09 01 00 +T E8 07 00 00 E1 71 23 70 DD 6E FC DD 66 FD E5 +R 00 00 01 00 +T F3 07 00 00 DD 4E 08 DD 46 09 21 15 00 DD 5E +R 00 00 01 00 +T FE 07 00 00 FA DD 56 FB 19 5E 23 56 3E +R 00 00 01 00 +T 07 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 0C 08 00 00 00 00 00 00 F1 21 0E 00 39 7E DD +R 00 00 01 00 02 04 01 00 +T 15 08 00 00 86 FC 77 23 7E DD 8E FD 77 C3 +R 00 00 01 00 +T 1F 08 00 00 F8 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 21 08 00 00 +R 00 00 01 00 +T 21 08 00 00 21 13 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T 2C 08 00 00 DD 5E 08 DD 56 09 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T 34 08 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 10 00 02 0A 01 00 +T 3B 08 00 00 44 E1 71 23 70 21 0E 00 39 7E C6 +R 00 00 01 00 +T 46 08 00 00 02 77 23 7E CE 00 77 21 00 02 E5 +R 00 00 01 00 +T 51 08 00 00 DD 6E FE DD 66 FF E5 DD 6E 08 DD +R 00 00 01 00 +T 5C 08 00 00 66 09 E5 01 00 00 DD 5E 04 DD 56 +R 00 00 01 00 +T 67 08 00 00 05 CD 0F 0B 00 00 F1 F1 F1 DD 75 +R 00 00 01 00 00 06 01 00 +T 70 08 00 00 FC DD 74 FD 7D A4 3C 20 14 +R 00 00 01 00 +T 79 08 00 00 +R 00 00 01 00 +T 79 08 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 81 08 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T 88 08 00 00 00 00 C3 0C 0B 00 00 +R 00 00 01 00 00 07 01 00 +T 8D 08 00 00 +R 00 00 01 00 +T 8D 08 00 00 21 15 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T 98 08 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T A0 08 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T A7 08 00 00 44 E1 71 23 70 21 0E 00 39 7E DD +R 00 00 01 00 +T B2 08 00 00 86 FC 77 23 7E DD 8E FD 77 C3 +R 00 00 01 00 +T BC 08 00 00 F8 0A 00 00 +R 00 00 01 00 00 04 01 00 +T BE 08 00 00 +R 00 00 01 00 +T BE 08 00 00 21 00 02 E5 DD 6E FE DD 66 FF E5 +R 00 00 01 00 +T C9 08 00 00 DD 6E 08 DD 66 09 E5 01 00 00 DD +R 00 00 01 00 +T D4 08 00 00 5E 04 DD 56 05 CD 0F 0B 00 00 F1 +R 00 00 01 00 00 0A 01 00 +T DD 08 00 00 F1 F1 DD 75 FC DD 74 FD 7D A4 3C +R 00 00 01 00 +T E8 08 00 00 20 14 +R 00 00 01 00 +T EA 08 00 00 +R 00 00 01 00 +T EA 08 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T F2 08 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T F9 08 00 00 00 00 C3 0C 0B 00 00 +R 00 00 01 00 00 07 01 00 +T FE 08 00 00 +R 00 00 01 00 +T FE 08 00 00 21 13 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T 09 09 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 11 09 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 18 09 00 00 44 E1 71 23 70 21 0E 00 39 7E DD +R 00 00 01 00 +T 23 09 00 00 86 FC 77 23 7E DD 8E FD 77 21 +R 00 00 01 00 +T 2D 09 00 00 00 02 E5 DD 6E FE DD 66 FF E5 DD +R 00 00 01 00 +T 38 09 00 00 6E 08 DD 66 09 E5 01 00 00 DD 5E +R 00 00 01 00 +T 43 09 00 00 04 DD 56 05 CD 0F 0B 00 00 F1 F1 +R 00 00 01 00 00 09 01 00 +T 4C 09 00 00 F1 DD 75 FC DD 74 FD 7D A4 3C 20 +R 00 00 01 00 +T 57 09 00 00 14 +R 00 00 01 00 +T 58 09 00 00 +R 00 00 01 00 +T 58 09 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 60 09 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T 67 09 00 00 00 00 C3 0C 0B 00 00 +R 00 00 01 00 00 07 01 00 +T 6C 09 00 00 +R 00 00 01 00 +T 6C 09 00 00 21 15 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T 77 09 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 7F 09 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 86 09 00 00 E1 73 23 72 21 0E 00 39 7E DD 86 +R 00 00 01 00 +T 91 09 00 00 FC 77 23 7E DD 8E FD 77 DD 5E 08 +R 00 00 01 00 +T 9C 09 00 00 DD 56 09 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T A2 09 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T A9 09 00 00 17 00 DD 5E FA DD 56 FB 19 D1 73 +R 00 00 01 00 +T B4 09 00 00 23 72 23 71 23 70 21 0E 00 39 7E +R 00 00 01 00 +T BF 09 00 00 C6 04 77 23 7E CE 00 77 DD 5E 08 +R 00 00 01 00 +T CA 09 00 00 DD 56 09 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T D0 09 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T D7 09 00 00 1B 00 DD 5E FA DD 56 FB 19 D1 73 +R 00 00 01 00 +T E2 09 00 00 23 72 23 71 23 70 21 0E 00 39 7E +R 00 00 01 00 +T ED 09 00 00 C6 04 77 23 7E CE 00 77 DD 5E 08 +R 00 00 01 00 +T F8 09 00 00 DD 56 09 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T FE 09 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 05 0A 00 00 1F 00 DD 5E FA DD 56 FB 19 D1 73 +R 00 00 01 00 +T 10 0A 00 00 23 72 23 71 23 70 21 0E 00 39 7E +R 00 00 01 00 +T 1B 0A 00 00 C6 04 77 23 7E CE 00 77 DD 5E 08 +R 00 00 01 00 +T 26 0A 00 00 DD 56 09 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T 2C 0A 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 33 0A 00 00 23 00 DD 5E FA DD 56 FB 19 D1 73 +R 00 00 01 00 +T 3E 0A 00 00 23 72 23 71 23 70 21 0E 00 39 7E +R 00 00 01 00 +T 49 0A 00 00 C6 04 77 23 7E CE 00 77 DD 5E 08 +R 00 00 01 00 +T 54 0A 00 00 DD 56 09 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T 5A 0A 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 61 0A 00 00 27 00 DD 5E FA DD 56 FB 19 D1 73 +R 00 00 01 00 +T 6C 0A 00 00 23 72 23 71 23 70 21 0E 00 39 7E +R 00 00 01 00 +T 77 0A 00 00 C6 04 77 23 7E CE 00 77 18 77 +R 00 00 01 00 +T 81 0A 00 00 +R 00 00 01 00 +T 81 0A 00 00 21 13 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T 8C 0A 00 00 21 11 00 09 5E 23 56 3E +R 00 00 01 00 +T 94 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 99 0A 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T A1 0A 00 00 11 00 09 5E 23 56 D5 DD 4E 08 DD +R 00 00 01 00 +T AC 0A 00 00 46 09 21 13 00 DD 5E FA DD 56 FB +R 00 00 01 00 +T B7 0A 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T BE 0A 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T C5 0A 00 00 11 00 DD 4E FA DD 46 FB 09 4E 23 +R 00 00 01 00 +T D0 0A 00 00 46 21 0E 00 39 7E 81 77 23 7E 88 +R 00 00 01 00 +T DB 0A 00 00 77 18 1A +R 00 00 01 00 +T DE 0A 00 00 +R 00 00 01 00 +T DE 0A 00 00 21 11 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T E9 0A 00 00 23 46 21 0E 00 39 7E 81 77 23 7E +R 00 00 01 00 +T F4 0A 00 00 88 77 18 00 +R 00 00 01 00 +T F8 0A 00 00 +R 00 00 01 00 +T F8 0A 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 00 0B 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T 07 0B 00 00 6E 08 DD 66 09 +R 00 00 01 00 +T 0C 0B 00 00 +R 00 00 01 00 +T 0C 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 0F 0B 00 00 +R 00 00 01 00 +T 0F 0B 00 00 CD 00 00 00 00 F6 FF AF DD 77 FA +R 00 00 01 00 02 05 11 00 +T 18 0B 00 00 DD 77 FB AF DD 77 FC DD 77 FD AF +R 00 00 01 00 +T 23 0B 00 00 DD 77 FE DD 77 FF DD 6E 08 DD 66 +R 00 00 01 00 +T 2E 0B 00 00 09 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 35 0B 00 00 +R 00 00 01 00 +T 35 0B 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T 40 0B 00 00 74 F9 2B 4E 06 00 DD 71 F6 DD 70 +R 00 00 01 00 +T 4B 0B 00 00 F7 DD 7E FC DD B6 FD 20 08 +R 00 00 01 00 +T 54 0B 00 00 +R 00 00 01 00 +T 54 0B 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 5C 0B 00 00 +R 00 00 01 00 +T 5C 0B 00 00 +R 00 00 01 00 +T 5C 0B 00 00 DD 7E F6 E6 C0 6F DD 7E F7 E6 00 +R 00 00 01 00 +T 67 0B 00 00 67 3E C0 AD B4 20 51 +R 00 00 01 00 +T 6E 0B 00 00 +R 00 00 01 00 +T 6E 0B 00 00 DD 7E FC DD B6 FD 20 08 +R 00 00 01 00 +T 76 0B 00 00 +R 00 00 01 00 +T 76 0B 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 7E 0B 00 00 +R 00 00 01 00 +T 7E 0B 00 00 +R 00 00 01 00 +T 7E 0B 00 00 DD 36 FC 01 DD 36 FD 00 DD 7E F6 +R 00 00 01 00 +T 89 0B 00 00 E6 3F 6F DD 7E F7 E6 00 67 65 2E +R 00 00 01 00 +T 94 0B 00 00 00 E5 DD 6E F8 DD 66 F9 4E 06 00 +R 00 00 01 00 +T 9F 0B 00 00 E1 09 DD 4E 02 DD 46 03 09 DD 75 +R 00 00 01 00 +T AA 0B 00 00 F8 DD 74 F9 23 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T B5 0B 00 00 2B 4E 06 00 DD 71 F6 DD 70 F7 +R 00 00 01 00 +T BF 0B 00 00 +R 00 00 01 00 +T BF 0B 00 00 DD 7E F6 DD B6 F7 20 03 +R 00 00 01 00 +T C7 0B 00 00 +R 00 00 01 00 +T C7 0B 00 00 C3 4C 0C 00 00 +R 00 00 01 00 00 05 01 00 +T CA 0B 00 00 +R 00 00 01 00 +T CA 0B 00 00 DD 4E F6 DD 46 F7 03 21 16 00 39 +R 00 00 01 00 +T D5 0B 00 00 7E 91 77 23 7E 98 77 DD CB 0D 7E +R 00 00 01 00 +T E0 0B 00 00 28 06 +R 00 00 01 00 +T E2 0B 00 00 +R 00 00 01 00 +T E2 0B 00 00 21 FF FF C3 94 0C 00 00 +R 00 00 01 00 00 08 01 00 +T E8 0B 00 00 +R 00 00 01 00 +T E8 0B 00 00 DD 7E FC DD B6 FD 20 0F +R 00 00 01 00 +T F0 0B 00 00 +R 00 00 01 00 +T F0 0B 00 00 21 04 00 39 7E DD 86 F6 77 23 7E +R 00 00 01 00 +T FB 0B 00 00 DD 8E F7 77 +R 00 00 01 00 +T FF 0B 00 00 +R 00 00 01 00 +T FF 0B 00 00 +R 00 00 01 00 +T FF 0B 00 00 DD 6E F6 DD 66 F7 2B DD 75 F6 DD +R 00 00 01 00 +T 0A 0C 00 00 74 F7 23 7D B4 28 20 +R 00 00 01 00 +T 11 0C 00 00 +R 00 00 01 00 +T 11 0C 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T 1C 0C 00 00 74 F9 2B 46 DD 6E 0A DD 66 0B 23 +R 00 00 01 00 +T 27 0C 00 00 DD 75 0A DD 74 0B 2B 70 18 CE +R 00 00 01 00 +T 31 0C 00 00 +R 00 00 01 00 +T 31 0C 00 00 DD 6E 0A DD 66 0B 23 DD 75 0A DD +R 00 00 01 00 +T 3C 0C 00 00 74 0B 2B 36 2E DD 34 FE 20 03 DD +R 00 00 01 00 +T 47 0C 00 00 34 FF +R 00 00 01 00 +T 49 0C 00 00 +R 00 00 01 00 +T 49 0C 00 00 C3 35 0B 00 00 +R 00 00 01 00 00 05 01 00 +T 4C 0C 00 00 +R 00 00 01 00 +T 4C 0C 00 00 DD 7E FE DD B6 FF 20 1D +R 00 00 01 00 +T 54 0C 00 00 +R 00 00 01 00 +T 54 0C 00 00 DD 6E 0A DD 66 0B 23 DD 75 0A DD +R 00 00 01 00 +T 5F 0C 00 00 74 0B 2B 36 2E DD 6E 0C DD 66 0D +R 00 00 01 00 +T 6A 0C 00 00 2B DD 75 0C DD 74 0D +R 00 00 01 00 +T 71 0C 00 00 +R 00 00 01 00 +T 71 0C 00 00 DD 6E 0A DD 66 0B 23 DD 75 0A DD +R 00 00 01 00 +T 7C 0C 00 00 74 0B 2B 36 00 DD 6E 0C DD 66 0D +R 00 00 01 00 +T 87 0C 00 00 2B DD 75 0C DD 74 0D DD 6E FA DD +R 00 00 01 00 +T 92 0C 00 00 66 FB +R 00 00 01 00 +T 94 0C 00 00 +R 00 00 01 00 +T 94 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 diff --git a/src/nos/lib/internet_lib/dosuffix.rel b/src/nos/lib/internet_lib/dosuffix.rel new file mode 100644 index 00000000..eee470b0 --- /dev/null +++ b/src/nos/lib/internet_lib/dosuffix.rel @@ -0,0 +1,57 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0137_7643__25s_0a Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strdupw Ref00000000 +S _Dsuffix Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 59 flags 0 +S _dosuffix Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 01 02 80 EB 3E 80 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 AC 67 ED 42 30 22 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 2A 00 00 00 00 7D B4 28 16 +R 00 00 01 00 02 05 04 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 2A 00 00 00 00 E5 0E 00 00 00 00 +R 00 00 01 00 02 05 04 00 2B 0B 01 00 +T 1C 00 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 01 00 +T 22 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 27 00 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 21 00 00 18 25 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 04 00 2B 0B 06 00 +T 37 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 3E 00 00 00 6E 04 DD 66 05 23 23 5E 23 56 3E +R 00 00 01 00 +T 49 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 4E 00 00 00 00 00 00 00 22 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 02 09 04 00 +T 54 00 00 00 00 00 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/internet_lib/dtype.rel b/src/nos/lib/internet_lib/dtype.rel new file mode 100644 index 00000000..089bde56 --- /dev/null +++ b/src/nos/lib/internet_lib/dtype.rel @@ -0,0 +1,52 @@ +XL4 +H 4 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sprintf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Ndtypes Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Dtypes Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3E flags 0 +S _dtype Def00000000 +A CSTR size 5 flags 0 +A UDATA0 size A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0B 05 00 +T 07 00 00 00 EB CD 00 00 00 00 30 11 +R 00 00 01 00 02 06 06 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 DD 6E 02 DD 66 03 29 01 +R 00 00 01 00 +T 15 00 00 00 00 00 00 00 09 46 23 66 68 18 1D +R 00 00 01 00 02 04 08 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T 26 00 00 00 00 00 00 00 E5 21 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 00 0A 03 00 +T 2D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 33 00 00 00 00 00 00 00 F1 F1 F1 21 +R 00 00 01 00 02 04 00 00 +T 39 00 00 00 00 00 00 00 +R 00 00 01 00 00 04 03 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 7B 25 64 7D 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/dumpdomain.rel b/src/nos/lib/internet_lib/dumpdomain.rel new file mode 100644 index 00000000..21516ac2 --- /dev/null +++ b/src/nos/lib/internet_lib/dumpdomain.rel @@ -0,0 +1,194 @@ +XL4 +H 2 areas 12 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___014c_243b__25s_20type_20_25s_ Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _put_rr Ref00000000 +S ___054f_c3ce_response_20id_20_25 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ___0171_b843__25u_20questions_3a Ref00000000 +S ___0170_7c48__25u_20authority_3a Ref00000000 +S _dtype Ref00000000 +S ___016f_7db0__25u_20answers_3a_0 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___016e_c0bd__25u_20additional_3 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24B flags 0 +S _dumpdomain Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 08 00 DD +R 00 00 01 00 02 05 0C 00 +T 09 00 00 00 4E 02 DD 46 03 09 5E 16 00 D5 21 +R 00 00 01 00 +T 14 00 00 00 07 00 09 5E 16 00 D5 21 06 00 09 +R 00 00 01 00 +T 1F 00 00 00 5E 16 00 D5 21 05 00 09 5E 16 00 +R 00 00 01 00 +T 2A 00 00 00 D5 21 04 00 09 5E 16 00 D5 69 60 +R 00 00 01 00 +T 35 00 00 00 23 23 23 4E 06 00 C5 DD 6E 02 DD +R 00 00 01 00 +T 40 00 00 00 66 03 23 23 4E 06 00 C5 21 00 00 +R 00 00 01 00 +T 4B 00 00 00 E5 21 E8 03 E5 DD 4E 0C DD 46 0D +R 00 00 01 00 +T 56 00 00 00 DD 6E 0A DD 66 0B CD 00 00 00 00 +R 00 00 01 00 02 0B 0D 00 +T 5F 00 00 00 C5 E5 DD 6E 02 DD 66 03 4E 23 46 +R 00 00 01 00 +T 6A 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 05 00 +T 6F 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 2B 0A 0E 00 +T 75 00 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 7C 00 00 00 18 00 39 F9 EB 21 09 00 DD 4E 02 +R 00 00 01 00 +T 87 00 00 00 DD 46 03 09 5E 23 56 D5 1E +R 00 00 01 00 +T 90 00 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 08 00 02 0A 08 00 +T 96 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0E 00 02 0A 0E 00 +T 9C 00 00 00 00 00 00 00 F1 F1 F1 21 11 00 09 +R 00 00 01 00 02 04 00 00 +T A5 00 00 00 46 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 DD 7E FC DD B6 FD 28 55 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 21 0F 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T C2 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T C7 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T CE 00 00 00 FE DD 74 FF 21 0D 00 09 5E 23 56 +R 00 00 01 00 +T D9 00 00 00 D5 DD 6E FE DD 66 FF E5 21 07 00 +R 00 00 01 00 +T E4 00 00 00 09 5E 23 56 D5 1E 00 00 00 00 D5 +R 00 00 01 00 2B 0A 01 00 +T EC 00 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 01 00 2B 0B 0E 00 +T F2 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T F9 00 00 00 F1 F1 F1 F1 03 03 0A 6F 03 0A 67 +R 00 00 01 00 +T 04 01 00 00 DD 75 FC DD 74 FD 18 A3 +R 00 00 01 00 +T 0C 01 00 00 +R 00 00 01 00 +T 0C 01 00 00 21 0B 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 17 01 00 00 23 56 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 08 0B 00 +T 1E 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 2B 0A 0E 00 +T 24 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 2B 01 00 00 F1 21 13 00 09 46 23 66 68 DD 75 +R 00 00 01 00 +T 36 01 00 00 FC DD 74 FD +R 00 00 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 DD 7E FC DD B6 FD 28 2D +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 DD 4E FC DD 46 FD 21 40 00 ED 5B +R 00 00 01 00 +T 4D 01 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 06 00 +T 54 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 59 01 00 00 00 00 00 00 DD 6E FC DD 66 FD 23 +R 00 00 01 00 02 04 00 00 +T 62 01 00 00 23 46 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 6D 01 00 00 18 CB +R 00 00 01 00 +T 6F 01 00 00 +R 00 00 01 00 +T 6F 01 00 00 21 0D 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 7A 01 00 00 23 56 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 08 09 00 +T 81 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 2B 0A 0E 00 +T 87 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 8E 01 00 00 F1 21 15 00 09 46 23 66 68 DD 75 +R 00 00 01 00 +T 99 01 00 00 FC DD 74 FD +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 DD 7E FC DD B6 FD 28 2D +R 00 00 01 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 DD 4E FC DD 46 FD 21 40 00 ED 5B +R 00 00 01 00 +T B0 01 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 06 00 +T B7 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T BC 01 00 00 00 00 00 00 DD 6E FC DD 66 FD 23 +R 00 00 01 00 02 04 00 00 +T C5 01 00 00 23 46 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T D0 01 00 00 18 CB +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 21 0F 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T DD 01 00 00 23 56 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 08 10 00 +T E4 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 10 00 2B 0A 0E 00 +T EA 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T F1 01 00 00 F1 21 17 00 09 46 23 66 68 DD 75 +R 00 00 01 00 +T FC 01 00 00 FC DD 74 FD +R 00 00 01 00 +T 00 02 00 00 +R 00 00 01 00 +T 00 02 00 00 DD 7E FC DD B6 FD 28 2D +R 00 00 01 00 +T 08 02 00 00 +R 00 00 01 00 +T 08 02 00 00 DD 4E FC DD 46 FD 21 40 00 ED 5B +R 00 00 01 00 +T 13 02 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 06 00 +T 1A 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 1F 02 00 00 00 00 00 00 DD 6E FC DD 66 FD 23 +R 00 00 01 00 02 04 00 00 +T 28 02 00 00 23 46 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 33 02 00 00 18 CB +R 00 00 01 00 +T 35 02 00 00 +R 00 00 01 00 +T 35 02 00 00 21 40 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 06 00 +T 3E 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 43 02 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 49 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 diff --git a/src/nos/lib/internet_lib/fraghandle.rel b/src/nos/lib/internet_lib/fraghandle.rel new file mode 100644 index 00000000..bce222d8 --- /dev/null +++ b/src/nos/lib/internet_lib/fraghandle.rel @@ -0,0 +1,529 @@ +XL4 +H 2 areas 13 global symbols +S _freefrag Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _stop_timer Ref00000000 +S _creat_reasm Ref00000000 +S _Ip_mib Ref00000000 +S _lookup_reasm Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _free_reasm Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _newfrag Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _start_timer Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _append Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 66C flags 0 +S _fraghandle Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF 21 16 00 DD +R 00 00 01 00 02 05 0D 00 +T 09 00 00 00 5E 02 DD 56 03 19 6E 26 00 01 +R 00 00 01 00 +T 13 00 00 00 14 00 09 4D 44 21 08 00 19 7E 23 +R 00 00 01 00 +T 1E 00 00 00 66 6F E5 21 0C 00 19 5E 23 56 E1 +R 00 00 01 00 +T 29 00 00 00 19 A7 ED 42 DD 75 FE DD 74 FF DD +R 00 00 01 00 +T 34 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 3C 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 43 00 00 00 F2 DD 74 F3 21 0C 00 DD 4E 02 DD +R 00 00 01 00 +T 4E 00 00 00 46 03 09 7E 23 B6 20 4D 21 10 00 +R 00 00 01 00 +T 59 00 00 00 DD 4E 02 DD 46 03 09 7E E6 04 47 +R 00 00 01 00 +T 64 00 00 00 23 7E E6 00 B0 20 38 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 DD 7E F2 DD B6 F3 28 1F +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 DD 5E F2 DD 56 F3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 7B 00 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 82 00 00 00 5C 00 00 00 ED 4B 5E 00 00 00 CD +R 00 00 01 00 02 04 05 00 02 0A 05 00 +T 89 00 00 00 00 00 00 00 22 5C 00 00 00 ED 43 +R 00 00 01 00 02 04 07 00 02 09 05 00 +T 90 00 00 00 5E 00 00 00 +R 00 00 01 00 02 04 05 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 9D 00 00 00 23 66 68 C3 69 06 00 00 +R 00 00 01 00 00 08 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 2A 56 00 00 00 ED 4B 58 00 00 00 +R 00 00 01 00 02 05 05 00 02 0B 05 00 +T AA 00 00 00 CD 00 00 00 00 22 56 00 00 00 ED +R 00 00 01 00 02 05 07 00 02 0A 05 00 +T B1 00 00 00 43 58 00 00 00 DD 7E F2 DD B6 F3 +R 00 00 01 00 02 05 05 00 +T BA 00 00 00 20 3D +R 00 00 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T C4 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T CB 00 00 00 75 F2 DD 74 F3 7D B4 20 25 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 2A 62 00 00 00 ED 4B 64 00 00 00 +R 00 00 01 00 02 05 05 00 02 0B 05 00 +T DB 00 00 00 CD 00 00 00 00 22 62 00 00 00 ED +R 00 00 01 00 02 05 07 00 02 0A 05 00 +T E2 00 00 00 43 64 00 00 00 DD 5E 04 DD 56 05 +R 00 00 01 00 02 05 05 00 +T EB 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0F 00 02 0A 0F 00 +T F1 00 00 00 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 01 00 +T F7 00 00 00 69 06 00 00 +R 00 00 01 00 00 04 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 DD 5E F2 DD 56 F3 13 13 3E +R 00 00 01 00 +T 02 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 07 01 00 00 00 00 00 00 DD 5E F2 DD 56 F3 13 +R 00 00 01 00 02 04 01 00 +T 10 01 00 00 13 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 16 01 00 00 CD 00 00 00 00 21 10 00 DD 4E 02 +R 00 00 01 00 02 05 01 00 +T 1F 01 00 00 DD 46 03 09 7E E6 04 47 23 7E E6 +R 00 00 01 00 +T 2A 01 00 00 00 B0 20 13 +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 21 14 00 DD 4E F2 DD 46 F3 09 DD +R 00 00 01 00 +T 39 01 00 00 4E FE DD 46 FF 71 23 70 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 AF DD 77 F4 DD 77 F5 21 12 00 DD +R 00 00 01 00 +T 4C 01 00 00 4E F2 DD 46 F3 09 46 23 66 68 DD +R 00 00 01 00 +T 57 01 00 00 75 F6 DD 74 F7 +R 00 00 01 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 DD 7E F6 DD B6 F7 28 42 +R 00 00 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 21 06 00 DD 4E F6 DD 46 F7 09 4E +R 00 00 01 00 +T 6F 01 00 00 23 46 21 0C 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 7A 01 00 00 19 56 23 66 6A A7 ED 42 30 02 +R 00 00 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 18 20 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 DD 6E F6 DD 66 F7 DD 75 F4 DD 74 +R 00 00 01 00 +T 91 01 00 00 F5 DD 6E F6 DD 66 F7 23 23 46 23 +R 00 00 01 00 +T 9C 01 00 00 66 68 DD 75 F6 DD 74 F7 18 B6 +R 00 00 01 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 DD 7E F4 DD B6 F5 28 7D 21 08 00 +R 00 00 01 00 +T B1 01 00 00 DD 4E F4 DD 46 F5 09 4E 23 46 21 +R 00 00 01 00 +T BC 01 00 00 0C 00 DD 5E 02 DD 56 03 19 56 23 +R 00 00 01 00 +T C7 01 00 00 66 6A A7 ED 42 30 5D +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T D9 01 00 00 23 46 21 08 00 DD 5E F4 DD 56 F5 +R 00 00 01 00 +T E4 01 00 00 19 56 23 66 6A A7 ED 42 DD 75 FC +R 00 00 01 00 +T EF 01 00 00 DD 74 FD E5 01 00 00 DD 5E 04 DD +R 00 00 01 00 +T FA 01 00 00 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T FF 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0B 00 02 09 01 00 +T 06 02 00 00 6E 04 DD 66 05 7E 23 B6 20 06 +R 00 00 01 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 21 FF FF C3 69 06 00 00 +R 00 00 01 00 00 08 01 00 +T 16 02 00 00 +R 00 00 01 00 +T 16 02 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 21 02 00 00 DD 86 FC 77 23 7E DD 8E FD 77 +R 00 00 01 00 +T 2B 02 00 00 +R 00 00 01 00 +T 2B 02 00 00 +R 00 00 01 00 +T 2B 02 00 00 DD 7E F6 DD B6 F7 CA 45 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 34 02 00 00 +R 00 00 01 00 +T 34 02 00 00 DD 6E F6 DD 66 F7 23 23 46 23 66 +R 00 00 01 00 +T 3F 02 00 00 68 DD 75 F8 DD 74 F9 21 06 00 DD +R 00 00 01 00 +T 4A 02 00 00 4E F6 DD 46 F7 09 46 23 66 68 DD +R 00 00 01 00 +T 55 02 00 00 4E FE DD 46 FF A7 ED 42 38 03 +R 00 00 01 00 +T 5F 02 00 00 +R 00 00 01 00 +T 5F 02 00 00 C3 45 03 00 00 +R 00 00 01 00 00 05 01 00 +T 62 02 00 00 +R 00 00 01 00 +T 62 02 00 00 21 06 00 DD 4E F6 DD 46 F7 09 5E +R 00 00 01 00 +T 6D 02 00 00 23 56 DD 6E FE DD 66 FF A7 ED 52 +R 00 00 01 00 +T 78 02 00 00 DD 75 FC DD 74 FD E5 01 00 00 21 +R 00 00 01 00 +T 83 02 00 00 04 00 DD 5E F6 DD 56 F7 19 EB 3E +R 00 00 01 00 +T 8E 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 93 02 00 00 00 00 00 00 F1 21 04 00 DD 4E F6 +R 00 00 01 00 02 04 01 00 +T 9C 02 00 00 DD 46 F7 09 7E 23 B6 20 7E +R 00 00 01 00 +T A5 02 00 00 +R 00 00 01 00 +T A5 02 00 00 DD 6E F6 DD 66 F7 7E 23 B6 28 20 +R 00 00 01 00 +T B0 02 00 00 +R 00 00 01 00 +T B0 02 00 00 DD 6E F6 DD 66 F7 46 23 66 68 23 +R 00 00 01 00 +T BB 02 00 00 23 E5 DD 4E F6 DD 46 F7 03 03 69 +R 00 00 01 00 +T C6 02 00 00 60 4E 23 46 E1 71 23 70 18 1C +R 00 00 01 00 +T D0 02 00 00 +R 00 00 01 00 +T D0 02 00 00 21 12 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T DB 02 00 00 DD 4E F6 DD 46 F7 03 03 69 60 4E +R 00 00 01 00 +T E6 02 00 00 23 46 E1 71 23 70 +R 00 00 01 00 +T EC 02 00 00 +R 00 00 01 00 +T EC 02 00 00 DD 6E F8 DD 66 F9 23 23 7E 23 B6 +R 00 00 01 00 +T F7 02 00 00 28 1A +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 DD 6E F6 DD 66 F7 23 23 7E 23 66 +R 00 00 01 00 +T 04 03 00 00 6F E5 DD 6E F6 DD 66 F7 4E 23 46 +R 00 00 01 00 +T 0F 03 00 00 E1 71 23 70 +R 00 00 01 00 +T 13 03 00 00 +R 00 00 01 00 +T 13 03 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 1B 03 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 22 03 00 00 13 +R 00 00 01 00 +T 23 03 00 00 +R 00 00 01 00 +T 23 03 00 00 21 06 00 DD 4E F6 DD 46 F7 09 DD +R 00 00 01 00 +T 2E 03 00 00 4E FE DD 46 FF 71 23 70 +R 00 00 01 00 +T 36 03 00 00 +R 00 00 01 00 +T 36 03 00 00 DD 6E F8 DD 66 F9 DD 75 F6 DD 74 +R 00 00 01 00 +T 41 03 00 00 F7 C3 2B 02 00 00 +R 00 00 01 00 00 06 01 00 +T 45 03 00 00 +R 00 00 01 00 +T 45 03 00 00 AF DD 77 FC DD 77 FD DD 7E F4 DD +R 00 00 01 00 +T 50 03 00 00 B6 F5 28 2F 21 08 00 DD 4E F4 DD +R 00 00 01 00 +T 5B 03 00 00 46 F5 09 46 23 66 68 E5 21 0C 00 +R 00 00 01 00 +T 66 03 00 00 DD 4E 02 DD 46 03 09 4E 23 46 E1 +R 00 00 01 00 +T 71 03 00 00 A7 ED 42 20 0D +R 00 00 01 00 +T 76 03 00 00 +R 00 00 01 00 +T 76 03 00 00 +R 00 00 01 00 +T 76 03 00 00 +R 00 00 01 00 +T 76 03 00 00 21 0A 00 39 7E F6 01 77 23 7E F6 +R 00 00 01 00 +T 81 03 00 00 00 77 +R 00 00 01 00 +T 83 03 00 00 +R 00 00 01 00 +T 83 03 00 00 DD 7E F6 DD B6 F7 28 26 21 06 00 +R 00 00 01 00 +T 8E 03 00 00 DD 4E F6 DD 46 F7 09 46 23 66 68 +R 00 00 01 00 +T 99 03 00 00 DD 4E FE DD 46 FF A7 ED 42 20 0D +R 00 00 01 00 +T A4 03 00 00 +R 00 00 01 00 +T A4 03 00 00 +R 00 00 01 00 +T A4 03 00 00 +R 00 00 01 00 +T A4 03 00 00 21 0A 00 39 7E F6 02 77 23 7E F6 +R 00 00 01 00 +T AF 03 00 00 00 77 +R 00 00 01 00 +T B1 03 00 00 +R 00 00 01 00 +T B1 03 00 00 DD 5E FC DD 56 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T BA 03 00 00 00 00 04 00 87 05 00 00 +R 00 00 01 00 00 08 01 00 +T C0 03 00 00 C8 03 00 00 51 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T C4 03 00 00 80 04 00 00 E5 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T C8 03 00 00 +R 00 00 01 00 +T C8 03 00 00 DD 6E 04 DD 66 05 E5 DD 4E FE DD +R 00 00 01 00 +T D3 03 00 00 46 FF 21 0C 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T DE 03 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0C 00 +T E5 03 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T EC 03 00 00 75 F8 DD 74 F9 DD 4E F4 DD 46 F5 +R 00 00 01 00 +T F7 03 00 00 71 23 70 DD 6E F8 DD 66 F9 23 23 +R 00 00 01 00 +T 02 04 00 00 DD 5E F6 DD 56 F7 73 23 72 79 B0 +R 00 00 01 00 +T 0D 04 00 00 28 13 +R 00 00 01 00 +T 0F 04 00 00 +R 00 00 01 00 +T 0F 04 00 00 DD 6E F4 DD 66 F5 23 23 DD 4E F8 +R 00 00 01 00 +T 1A 04 00 00 DD 46 F9 71 23 70 18 13 +R 00 00 01 00 +T 22 04 00 00 +R 00 00 01 00 +T 22 04 00 00 21 12 00 DD 4E F2 DD 46 F3 09 DD +R 00 00 01 00 +T 2D 04 00 00 4E F8 DD 46 F9 71 23 70 +R 00 00 01 00 +T 35 04 00 00 +R 00 00 01 00 +T 35 04 00 00 DD 7E F6 DD B6 F7 28 11 +R 00 00 01 00 +T 3D 04 00 00 +R 00 00 01 00 +T 3D 04 00 00 DD 6E F8 DD 66 F9 E5 DD 6E F6 DD +R 00 00 01 00 +T 48 04 00 00 66 F7 C1 71 23 70 +R 00 00 01 00 +T 4E 04 00 00 +R 00 00 01 00 +T 4E 04 00 00 C3 87 05 00 00 +R 00 00 01 00 00 05 01 00 +T 51 04 00 00 +R 00 00 01 00 +T 51 04 00 00 DD 4E 04 DD 46 05 21 04 00 DD 5E +R 00 00 01 00 +T 5C 04 00 00 F4 DD 56 F5 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 64 04 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 11 00 02 0A 01 00 +T 6B 04 00 00 08 00 DD 4E F4 DD 46 F5 09 DD 4E +R 00 00 01 00 +T 76 04 00 00 FE DD 46 FF 71 23 70 C3 +R 00 00 01 00 +T 7E 04 00 00 87 05 00 00 +R 00 00 01 00 00 04 01 00 +T 80 04 00 00 +R 00 00 01 00 +T 80 04 00 00 21 04 00 DD 4E F6 DD 46 F7 09 56 +R 00 00 01 00 +T 8B 04 00 00 23 66 6A DD 75 FA DD 74 FB 21 +R 00 00 01 00 +T 95 04 00 00 04 00 09 E5 DD 6E 04 DD 66 05 5E +R 00 00 01 00 +T A0 04 00 00 23 56 E1 73 23 72 AF DD 77 04 DD +R 00 00 01 00 +T AB 04 00 00 77 05 21 08 00 39 4D 44 21 04 00 +R 00 00 01 00 +T B6 04 00 00 DD 5E F6 DD 56 F7 19 EB 3E +R 00 00 01 00 +T BF 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T C4 04 00 00 00 00 00 00 21 06 00 DD 4E F6 DD +R 00 00 01 00 02 04 01 00 +T CD 04 00 00 46 F7 09 E5 21 0C 00 DD 4E 02 DD +R 00 00 01 00 +T D8 04 00 00 46 03 09 4E 23 46 E1 71 23 70 C3 +R 00 00 01 00 +T E3 04 00 00 87 05 00 00 +R 00 00 01 00 00 04 01 00 +T E5 04 00 00 +R 00 00 01 00 +T E5 04 00 00 DD 4E 04 DD 46 05 21 04 00 DD 5E +R 00 00 01 00 +T F0 04 00 00 F4 DD 56 F5 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T F8 04 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 11 00 02 0A 01 00 +T FF 04 00 00 04 00 DD 4E F6 DD 46 F7 09 4D 44 +R 00 00 01 00 +T 0A 05 00 00 21 04 00 DD 5E F4 DD 56 F5 19 EB +R 00 00 01 00 +T 15 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 11 00 02 0A 11 00 +T 1B 05 00 00 00 00 00 00 21 04 00 DD 4E F6 DD +R 00 00 01 00 02 04 01 00 +T 24 05 00 00 46 F7 09 AF 77 23 77 21 08 00 DD +R 00 00 01 00 +T 2F 05 00 00 5E F4 DD 56 F5 19 E5 21 08 00 09 +R 00 00 01 00 +T 3A 05 00 00 5E 23 56 E1 73 23 72 DD 6E F4 DD +R 00 00 01 00 +T 45 05 00 00 66 F5 23 23 E5 03 03 69 60 4E 23 +R 00 00 01 00 +T 50 05 00 00 46 E1 71 23 70 DD 6E F6 DD 66 F7 +R 00 00 01 00 +T 5B 05 00 00 23 23 7E 23 B6 28 15 +R 00 00 01 00 +T 62 05 00 00 +R 00 00 01 00 +T 62 05 00 00 DD 6E F6 DD 66 F7 23 23 7E 23 66 +R 00 00 01 00 +T 6D 05 00 00 6F DD 4E F4 DD 46 F5 71 23 70 +R 00 00 01 00 +T 77 05 00 00 +R 00 00 01 00 +T 77 05 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 7F 05 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 86 05 00 00 00 +R 00 00 01 00 +T 87 05 00 00 +R 00 00 01 00 +T 87 05 00 00 21 12 00 DD 4E F2 DD 46 F3 09 46 +R 00 00 01 00 +T 92 05 00 00 23 66 68 01 06 00 09 7E 23 B6 C2 +R 00 00 01 00 +T 9D 05 00 00 66 06 00 00 21 12 00 DD 4E F2 DD +R 00 00 01 00 00 04 01 00 +T A6 05 00 00 46 F3 09 46 23 66 68 23 23 7E 23 +R 00 00 01 00 +T B1 05 00 00 B6 C2 66 06 00 00 21 14 00 DD 4E +R 00 00 01 00 00 06 01 00 +T BA 05 00 00 F2 DD 46 F3 09 7E 23 B6 CA +R 00 00 01 00 +T C3 05 00 00 66 06 00 00 +R 00 00 01 00 00 04 01 00 +T C5 05 00 00 +R 00 00 01 00 +T C5 05 00 00 +R 00 00 01 00 +T C5 05 00 00 +R 00 00 01 00 +T C5 05 00 00 21 12 00 DD 4E F2 DD 46 F3 09 56 +R 00 00 01 00 +T D0 05 00 00 23 66 6A 11 04 00 19 56 23 66 6A +R 00 00 01 00 +T DB 05 00 00 E5 DD 6E 04 DD 66 05 D1 73 23 72 +R 00 00 01 00 +T E6 05 00 00 21 12 00 09 56 23 66 6A 11 04 00 +R 00 00 01 00 +T F1 05 00 00 19 AF 77 23 77 21 08 00 DD 5E 02 +R 00 00 01 00 +T FC 05 00 00 DD 56 03 19 E5 21 16 00 19 6E 26 +R 00 00 01 00 +T 07 06 00 00 00 01 14 00 09 E5 21 14 00 DD 4E +R 00 00 01 00 +T 12 06 00 00 F2 DD 46 F3 09 4E 23 46 E1 09 4D +R 00 00 01 00 +T 1D 06 00 00 44 E1 71 23 70 DD 5E F2 DD 56 F3 +R 00 00 01 00 +T 28 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 2E 06 00 00 00 00 00 00 2A 5C 00 00 00 ED 4B +R 00 00 01 00 02 04 01 00 02 09 05 00 +T 35 06 00 00 5E 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 04 05 00 02 09 07 00 +T 3B 06 00 00 5C 00 00 00 ED 43 5E 00 00 00 21 +R 00 00 01 00 02 04 05 00 02 0A 05 00 +T 42 06 00 00 0C 00 DD 4E 02 DD 46 03 09 AF 77 +R 00 00 01 00 +T 4D 06 00 00 23 77 21 10 00 09 7E E6 FB 77 23 +R 00 00 01 00 +T 58 06 00 00 7E E6 FF 77 21 08 00 09 46 23 66 +R 00 00 01 00 +T 63 06 00 00 68 18 03 +R 00 00 01 00 +T 66 06 00 00 +R 00 00 01 00 +T 66 06 00 00 21 FF FF +R 00 00 01 00 +T 69 06 00 00 +R 00 00 01 00 +T 69 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 diff --git a/src/nos/lib/internet_lib/free_reasm.rel b/src/nos/lib/internet_lib/free_reasm.rel new file mode 100644 index 00000000..6597623a --- /dev/null +++ b/src/nos/lib/internet_lib/free_reasm.rel @@ -0,0 +1,112 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _stop_timer Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _Reasmq Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F9 flags 0 +S _free_reasm Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FC +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FD 2A 00 00 00 00 DD 75 FA +R 00 00 01 00 02 08 05 00 +T 12 00 00 00 DD 74 FB +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 DD 7E FA DD B6 FB 28 31 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E FA DD 66 FB DD 4E 02 DD 46 +R 00 00 01 00 +T 28 00 00 00 03 A7 ED 42 20 02 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 18 1E +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 6E FA DD 66 FB DD 75 FC DD 74 +R 00 00 01 00 +T 3B 00 00 00 FD DD 6E FA DD 66 FB 46 23 66 68 +R 00 00 01 00 +T 46 00 00 00 DD 75 FA DD 74 FB 18 C7 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 DD 7E FA DD B6 FB 20 03 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 C3 F6 00 00 00 +R 00 00 01 00 00 05 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 DD 5E FA DD 56 FB 13 13 3E +R 00 00 01 00 +T 62 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 67 00 00 00 00 00 00 00 DD 7E FC DD B6 FD 28 +R 00 00 01 00 02 04 00 00 +T 70 00 00 00 17 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 6E FA DD 66 FB 46 23 66 68 E5 +R 00 00 01 00 +T 7C 00 00 00 DD 6E FC DD 66 FD C1 71 23 70 18 +R 00 00 01 00 +T 87 00 00 00 0D +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 6E FA DD 66 FB 46 23 66 68 22 +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 12 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T A0 00 00 00 23 66 68 DD 75 FE DD 74 FF 7D B4 +R 00 00 01 00 +T AB 00 00 00 28 3B +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 21 12 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T B8 00 00 00 DD 4E FE DD 46 FF 03 03 69 60 4E +R 00 00 01 00 +T C3 00 00 00 23 46 E1 71 23 70 21 04 00 DD 4E +R 00 00 01 00 +T CE 00 00 00 FE DD 46 FF 09 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T D6 00 00 00 21 00 00 00 00 CD 00 00 00 00 59 +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T DD 00 00 00 50 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T E3 00 00 00 CD 00 00 00 00 18 AD +R 00 00 01 00 02 05 00 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T F0 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/internet_lib/free_rr.rel b/src/nos/lib/internet_lib/free_rr.rel new file mode 100644 index 00000000..06ae9b9d --- /dev/null +++ b/src/nos/lib/internet_lib/free_rr.rel @@ -0,0 +1,128 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11C flags 0 +S _free_rr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 05 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 DD 6E 02 DD 66 03 DD 75 FE DD 74 +R 00 00 01 00 +T 10 00 00 00 FF 7D B4 CA 19 01 00 00 +R 00 00 01 00 00 08 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 21 00 00 00 68 DD 75 02 DD 74 03 21 05 00 DD +R 00 00 01 00 +T 2C 00 00 00 4E FE DD 46 FF 09 5E 23 56 3E +R 00 00 01 00 +T 36 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 3B 00 00 00 00 00 00 00 21 07 00 09 5E 23 56 +R 00 00 01 00 02 04 00 00 +T 44 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 4A 00 00 00 00 00 00 00 21 11 00 09 7E 23 B6 +R 00 00 01 00 02 04 00 00 +T 53 00 00 00 CA 08 01 00 00 +R 00 00 01 00 00 05 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 21 0F 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 61 00 00 00 23 56 CD 00 00 00 00 01 00 10 00 +R 00 00 01 00 02 07 01 00 +T 6A 00 00 00 08 01 00 00 8C 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6E 00 00 00 8E 00 00 00 08 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 72 00 00 00 08 01 00 00 8E 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 76 00 00 00 E2 00 00 00 8E 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7A 00 00 00 8E 00 00 00 8E 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7E 00 00 00 08 01 00 00 08 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 82 00 00 00 8E 00 00 00 A5 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 86 00 00 00 08 01 00 00 CB 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8A 00 00 00 8E 00 00 00 +R 00 00 01 00 00 04 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 18 7A +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 13 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 99 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 9E 00 00 00 00 00 00 00 CD 00 00 00 00 18 63 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 21 13 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T B0 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T B5 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T BB 00 00 00 15 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T C3 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T CA 00 00 00 3D +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 21 15 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T D6 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T DB 00 00 00 00 00 00 00 CD 00 00 00 00 18 26 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 21 13 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T ED 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T F2 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T F8 00 00 00 15 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 00 01 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 07 01 00 00 00 +R 00 00 01 00 +T 08 01 00 00 +R 00 00 01 00 +T 08 01 00 00 +R 00 00 01 00 +T 08 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 10 01 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 17 01 00 00 05 00 00 00 +R 00 00 01 00 00 04 01 00 +T 19 01 00 00 +R 00 00 01 00 +T 19 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/internet_lib/freefrag.rel b/src/nos/lib/internet_lib/freefrag.rel new file mode 100644 index 00000000..03b1dd1c --- /dev/null +++ b/src/nos/lib/internet_lib/freefrag.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S _freefrag Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 04 00 19 EB 3E +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 0E 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 00 00 +T 17 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 1C 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 diff --git a/src/nos/lib/internet_lib/get_reseq.rel b/src/nos/lib/internet_lib/get_reseq.rel new file mode 100644 index 00000000..f8e04f00 --- /dev/null +++ b/src/nos/lib/internet_lib/get_reseq.rel @@ -0,0 +1,51 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 91 flags 0 +S _get_reseq Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 80 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 7D B4 20 02 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 18 6F +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 80 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 2A 00 00 00 DD 6E FE DD 66 FF 4E 23 46 E1 71 +R 00 00 01 00 +T 35 00 00 00 23 70 21 25 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T 40 00 00 00 09 56 DD 6E 04 DD 66 05 72 69 60 +R 00 00 01 00 +T 4B 00 00 00 23 23 DD 5E 0A DD 56 0B 01 1F 00 +R 00 00 01 00 +T 56 00 00 00 ED B0 21 21 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T 61 00 00 00 09 56 23 66 6A E5 DD 6E 0C DD 66 +R 00 00 01 00 +T 6C 00 00 00 0D D1 73 23 72 21 23 00 09 56 23 +R 00 00 01 00 +T 77 00 00 00 66 6A E5 DD 6E 0E DD 66 0F D1 73 +R 00 00 01 00 +T 82 00 00 00 23 72 59 50 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 89 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/internet_lib/get_rr.rel b/src/nos/lib/internet_lib/get_rr.rel new file mode 100644 index 00000000..f01ef160 --- /dev/null +++ b/src/nos/lib/internet_lib/get_rr.rel @@ -0,0 +1,662 @@ +XL4 +H 3 areas 19 global symbols +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _delim Ref00000000 +S _strcat Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _strdupw Ref00000000 +S _fgets Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ___ctype Ref00000000 +S _strcpy Ref00000000 +S _callocw Ref00000000 +S _strtok Ref00000000 +S _Ndtypes Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S _mallocw Ref00000000 +S _atol Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _aton Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Dtypes Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 76C flags 0 +S _get_rr Def00000000 +A CSTR size 7 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EE FF 11 00 01 3E +R 00 00 01 00 02 05 10 00 +T 09 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 0E 00 00 00 00 00 00 00 DD 75 EE DD 74 EF DD +R 00 00 01 00 02 04 01 00 +T 17 00 00 00 5E 02 DD 56 03 D5 01 00 01 EB 3E +R 00 00 01 00 +T 22 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 27 00 00 00 00 00 00 00 F1 7D B4 20 14 +R 00 00 01 00 02 04 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 5E EE DD 56 EF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 36 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 01 00 +T 3D 00 00 00 00 00 C3 69 07 00 00 +R 00 00 01 00 00 07 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 01 2B 00 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 4A 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T 51 00 00 00 75 F2 DD 74 F3 01 04 00 09 36 01 +R 00 00 01 00 +T 5C 00 00 00 DD 6E EE DD 66 EF AF B6 28 16 DD +R 00 00 01 00 +T 67 00 00 00 6E EE DD 66 EF 7E FE 23 28 0B DD +R 00 00 01 00 +T 72 00 00 00 6E EE DD 66 EF 7E FE 3B 20 18 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 21 05 00 DD 4E F2 DD 46 F3 09 DD +R 00 00 01 00 +T 87 00 00 00 5E EE DD 56 EF 73 23 72 69 60 C3 +R 00 00 01 00 +T 92 00 00 00 69 07 00 00 +R 00 00 01 00 00 04 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 DD 6E EE DD 66 EF 4E 06 00 21 +R 00 00 01 00 +T 9E 00 00 00 00 00 00 00 09 7E E6 10 28 08 DD +R 00 00 01 00 02 04 0B 00 +T A7 00 00 00 7E 04 DD B6 05 20 20 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 01 00 00 00 00 DD 5E EE DD 56 EF +R 00 00 01 00 02 05 03 00 +T B7 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0E 00 02 0A 0E 00 +T BD 00 00 00 00 00 00 00 DD 75 F4 DD 74 F5 AF +R 00 00 01 00 02 04 01 00 +T C6 00 00 00 DD 77 F0 DD 77 F1 18 20 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 07 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T D9 00 00 00 23 66 68 DD 75 F4 DD 74 F5 DD 6E +R 00 00 01 00 +T E4 00 00 00 EE DD 66 EF DD 75 F0 DD 74 F1 +R 00 00 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 DD 7E F4 DD B6 F5 28 18 DD 5E F4 +R 00 00 01 00 +T F9 00 00 00 DD 56 F5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 06 00 +T FF 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 06 01 00 00 FE DD 74 FF 7D B4 20 2E +R 00 00 01 00 +T 0E 01 00 00 +R 00 00 01 00 +T 0E 01 00 00 +R 00 00 01 00 +T 0E 01 00 00 +R 00 00 01 00 +T 0E 01 00 00 21 05 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T 19 01 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 07 00 +T 1F 01 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 26 01 00 00 73 23 72 DD 5E EE DD 56 EF 3E +R 00 00 01 00 +T 30 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 35 01 00 00 00 00 00 00 69 60 C3 69 07 00 00 +R 00 00 01 00 02 04 01 00 00 0B 01 00 +T 3C 01 00 00 +R 00 00 01 00 +T 3C 01 00 00 DD 6E FE DD 66 FF DD 4E F4 DD 46 +R 00 00 01 00 +T 47 01 00 00 F5 09 2B 7E FE 2E 28 55 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 21 07 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T 5A 01 00 00 DD 5E FE DD 56 FF 13 13 3E +R 00 00 01 00 +T 63 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 68 01 00 00 00 00 00 00 EB E1 73 23 72 DD 4E +R 00 00 01 00 02 04 01 00 +T 71 01 00 00 F4 DD 46 F5 21 07 00 DD 5E F2 DD +R 00 00 01 00 +T 7C 01 00 00 56 F3 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 84 01 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 0C 00 02 0A 01 00 +T 8B 01 00 00 02 00 00 00 21 07 00 DD 5E F2 DD +R 00 00 01 00 00 04 02 00 +T 94 01 00 00 56 F3 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 9C 01 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T A3 01 00 00 1F +R 00 00 01 00 +T A4 01 00 00 +R 00 00 01 00 +T A4 01 00 00 21 07 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T AF 01 00 00 DD 5E F4 DD 56 F5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T B7 01 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T BE 01 00 00 44 E1 71 23 70 +R 00 00 01 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 01 00 00 00 00 DD 5E F0 DD 56 F1 +R 00 00 01 00 02 05 03 00 +T CC 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0E 00 02 0A 0E 00 +T D2 01 00 00 00 00 00 00 DD 75 F6 DD 74 F7 7D +R 00 00 01 00 02 04 01 00 +T DB 01 00 00 B4 28 1D DD 6E F6 DD 66 F7 4E 06 +R 00 00 01 00 +T E6 01 00 00 00 21 00 00 00 00 09 7E E6 08 20 +R 00 00 01 00 02 06 0B 00 +T EF 01 00 00 2C DD 6E F6 DD 66 F7 7E FE 2D 28 +R 00 00 01 00 +T FA 01 00 00 21 +R 00 00 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 21 09 00 DD 4E F2 DD 46 F3 09 AF +R 00 00 01 00 +T 06 02 00 00 77 23 77 23 77 23 36 80 DD 6E F6 +R 00 00 01 00 +T 11 02 00 00 DD 66 F7 DD 75 F8 DD 74 F9 18 35 +R 00 00 01 00 +T 1C 02 00 00 +R 00 00 01 00 +T 1C 02 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 13 00 +T 24 02 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 13 00 02 0A 01 00 +T 2B 02 00 00 21 09 00 DD 5E F2 DD 56 F3 19 D1 +R 00 00 01 00 +T 36 02 00 00 73 23 72 23 71 23 70 01 +R 00 00 01 00 +T 3E 02 00 00 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 04 03 00 +T 44 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 49 02 00 00 00 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 04 01 00 +T 51 02 00 00 +R 00 00 01 00 +T 51 02 00 00 DD 7E F8 DD B6 F9 20 1D +R 00 00 01 00 +T 59 02 00 00 +R 00 00 01 00 +T 59 02 00 00 21 0D 00 DD 4E F2 DD 46 F3 09 AF +R 00 00 01 00 +T 64 02 00 00 77 23 77 DD 6E F8 DD 66 F9 DD 75 +R 00 00 01 00 +T 6F 02 00 00 FA DD 74 FB C3 0C 03 00 00 +R 00 00 01 00 00 09 01 00 +T 76 02 00 00 +R 00 00 01 00 +T 76 02 00 00 DD 6E F8 DD 66 F9 7E FE 3C 20 36 +R 00 00 01 00 +T 81 02 00 00 +R 00 00 01 00 +T 81 02 00 00 21 0D 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T 8C 02 00 00 DD 5E F8 DD 56 F9 13 3E +R 00 00 01 00 +T 94 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 99 02 00 00 00 00 00 00 4D 44 E1 71 23 70 01 +R 00 00 01 00 02 04 01 00 +T A2 02 00 00 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 04 03 00 +T A8 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T AD 02 00 00 00 00 00 00 DD 75 FA DD 74 FB 18 +R 00 00 01 00 02 04 01 00 +T B6 02 00 00 55 +R 00 00 01 00 +T B7 02 00 00 +R 00 00 01 00 +T B7 02 00 00 01 04 00 00 00 DD 5E F8 DD 56 F9 +R 00 00 01 00 00 05 02 00 +T C0 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T C6 02 00 00 00 00 00 00 7D B4 20 25 +R 00 00 01 00 02 04 01 00 +T CC 02 00 00 +R 00 00 01 00 +T CC 02 00 00 21 0D 00 DD 4E F2 DD 46 F3 09 36 +R 00 00 01 00 +T D7 02 00 00 01 23 36 00 01 00 00 00 00 11 +R 00 00 01 00 02 09 03 00 +T DF 02 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T E4 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T EB 02 00 00 FA DD 74 FB 18 1B +R 00 00 01 00 +T F1 02 00 00 +R 00 00 01 00 +T F1 02 00 00 21 0D 00 DD 4E F2 DD 46 F3 09 36 +R 00 00 01 00 +T FC 02 00 00 01 23 36 00 DD 6E F8 DD 66 F9 DD +R 00 00 01 00 +T 07 03 00 00 75 FA DD 74 FB +R 00 00 01 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 DD 7E FA DD B6 FB 20 1D +R 00 00 01 00 +T 14 03 00 00 +R 00 00 01 00 +T 14 03 00 00 21 0F 00 DD 4E F2 DD 46 F3 09 AF +R 00 00 01 00 +T 1F 03 00 00 77 23 77 DD 6E FA DD 66 FB DD 75 +R 00 00 01 00 +T 2A 03 00 00 FC DD 74 FD C3 EA 03 00 00 +R 00 00 01 00 00 09 01 00 +T 31 03 00 00 +R 00 00 01 00 +T 31 03 00 00 DD 6E FA DD 66 FB 7E FE 7B 20 36 +R 00 00 01 00 +T 3C 03 00 00 +R 00 00 01 00 +T 3C 03 00 00 21 0F 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T 47 03 00 00 DD 5E F8 DD 56 F9 13 3E +R 00 00 01 00 +T 4F 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 54 03 00 00 00 00 00 00 4D 44 E1 71 23 70 01 +R 00 00 01 00 02 04 01 00 +T 5D 03 00 00 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 04 03 00 +T 63 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 68 03 00 00 00 00 00 00 DD 75 FC DD 74 FD 18 +R 00 00 01 00 02 04 01 00 +T 71 03 00 00 78 +R 00 00 01 00 +T 72 03 00 00 +R 00 00 01 00 +T 72 03 00 00 21 0F 00 DD 4E F2 DD 46 F3 09 AF +R 00 00 01 00 +T 7D 03 00 00 77 23 77 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 88 03 00 00 +R 00 00 01 00 +T 88 03 00 00 ED 4B 00 00 00 00 DD 6E FE DD 66 +R 00 00 01 00 02 06 0F 00 +T 91 03 00 00 FF CD 00 00 00 00 30 53 +R 00 00 01 00 02 06 14 00 +T 97 03 00 00 +R 00 00 01 00 +T 97 03 00 00 DD 6E FE DD 66 FF 29 01 +R 00 00 01 00 +T 9F 03 00 00 00 00 00 00 09 4E 23 46 DD 5E FA +R 00 00 01 00 02 04 17 00 +T A8 03 00 00 DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T AE 03 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T B5 03 00 00 20 29 +R 00 00 01 00 +T B7 03 00 00 +R 00 00 01 00 +T B7 03 00 00 21 0F 00 DD 4E F2 DD 46 F3 09 DD +R 00 00 01 00 +T C2 03 00 00 4E FE DD 46 FF 71 23 70 01 +R 00 00 01 00 +T CB 03 00 00 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 04 03 00 +T D1 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T D6 03 00 00 00 00 00 00 DD 75 FC DD 74 FD 18 +R 00 00 01 00 02 04 01 00 +T DF 03 00 00 0A +R 00 00 01 00 +T E0 03 00 00 +R 00 00 01 00 +T E0 03 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T E8 03 00 00 +R 00 00 01 00 +T E8 03 00 00 18 9E +R 00 00 01 00 +T EA 03 00 00 +R 00 00 01 00 +T EA 03 00 00 +R 00 00 01 00 +T EA 03 00 00 +R 00 00 01 00 +T EA 03 00 00 21 0F 00 DD 4E F2 DD 46 F3 09 7E +R 00 00 01 00 +T F5 03 00 00 23 B6 20 07 +R 00 00 01 00 +T F9 03 00 00 +R 00 00 01 00 +T F9 03 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 +T 00 04 00 00 +R 00 00 01 00 +T 00 04 00 00 DD 7E FC DD B6 FD 20 17 +R 00 00 01 00 +T 08 04 00 00 +R 00 00 01 00 +T 08 04 00 00 DD 5E EE DD 56 EF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 10 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0A 00 02 0A 01 00 +T 17 04 00 00 6E F2 DD 66 F3 C3 69 07 00 00 +R 00 00 01 00 00 0A 01 00 +T 1F 04 00 00 +R 00 00 01 00 +T 1F 04 00 00 21 0F 00 DD 4E F2 DD 46 F3 09 5E +R 00 00 01 00 +T 2A 04 00 00 23 56 CD 00 00 00 00 01 00 10 00 +R 00 00 01 00 02 07 02 00 +T 33 04 00 00 55 07 00 00 55 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 37 04 00 00 88 04 00 00 55 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 3B 04 00 00 55 07 00 00 88 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 3F 04 00 00 CA 05 00 00 88 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 43 04 00 00 88 04 00 00 88 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 47 04 00 00 55 07 00 00 55 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 4B 04 00 00 88 04 00 00 C2 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 4F 04 00 00 55 07 00 00 4E 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 53 04 00 00 88 04 00 00 +R 00 00 01 00 00 04 01 00 +T 55 04 00 00 +R 00 00 01 00 +T 55 04 00 00 21 11 00 DD 4E F2 DD 46 F3 09 36 +R 00 00 01 00 +T 60 04 00 00 04 23 36 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 6B 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 70 04 00 00 00 00 00 00 E5 21 13 00 DD 5E F2 +R 00 00 01 00 02 04 01 00 +T 79 04 00 00 DD 56 F3 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 84 04 00 00 70 C3 55 07 00 00 +R 00 00 01 00 00 06 01 00 +T 88 04 00 00 +R 00 00 01 00 +T 88 04 00 00 21 11 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T 93 04 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 9B 04 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T A2 04 00 00 E1 73 23 72 21 13 00 09 E5 DD 5E +R 00 00 01 00 +T AD 04 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T B4 04 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T BB 04 00 00 E1 71 23 70 C3 55 07 00 00 +R 00 00 01 00 00 09 01 00 +T C2 04 00 00 +R 00 00 01 00 +T C2 04 00 00 21 11 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T CD 04 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T D5 04 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T DC 04 00 00 E1 73 23 72 21 13 00 09 E5 DD 5E +R 00 00 01 00 +T E7 04 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T EE 04 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T F5 04 00 00 E1 71 23 70 01 00 00 00 00 11 +R 00 00 01 00 02 09 03 00 +T FD 04 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 02 05 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 09 05 00 00 FC DD 74 FD 7D B4 28 3A +R 00 00 01 00 +T 11 05 00 00 +R 00 00 01 00 +T 11 05 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 19 05 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 20 05 00 00 44 21 11 00 DD 5E F2 DD 56 F3 19 +R 00 00 01 00 +T 2B 05 00 00 7E 81 77 23 7E 88 77 21 15 00 19 +R 00 00 01 00 +T 36 05 00 00 E5 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 3E 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 43 05 00 00 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 01 00 +T 4B 05 00 00 +R 00 00 01 00 +T 4B 05 00 00 C3 55 07 00 00 +R 00 00 01 00 00 05 01 00 +T 4E 05 00 00 +R 00 00 01 00 +T 4E 05 00 00 21 13 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T 59 05 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 61 05 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 11 00 02 0A 01 00 +T 68 05 00 00 E1 73 23 72 21 11 00 09 36 02 23 +R 00 00 01 00 +T 73 05 00 00 36 00 01 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 07 03 00 +T 7C 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 81 05 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 01 00 +T 8A 05 00 00 B4 28 3A +R 00 00 01 00 +T 8D 05 00 00 +R 00 00 01 00 +T 8D 05 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 95 05 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 9C 05 00 00 44 21 11 00 DD 5E F2 DD 56 F3 19 +R 00 00 01 00 +T A7 05 00 00 7E 81 77 23 7E 88 77 21 15 00 19 +R 00 00 01 00 +T B2 05 00 00 E5 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T BA 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T BF 05 00 00 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 01 00 +T C7 05 00 00 +R 00 00 01 00 +T C7 05 00 00 C3 55 07 00 00 +R 00 00 01 00 00 05 01 00 +T CA 05 00 00 +R 00 00 01 00 +T CA 05 00 00 21 11 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T D5 05 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T DD 05 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T E4 05 00 00 E1 73 23 72 21 13 00 09 E5 DD 5E +R 00 00 01 00 +T EF 05 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T F6 05 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T FD 05 00 00 E1 71 23 70 01 00 00 00 00 11 +R 00 00 01 00 02 09 03 00 +T 05 06 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 0A 06 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 11 06 00 00 FC DD 74 FD 7D B4 28 38 +R 00 00 01 00 +T 19 06 00 00 +R 00 00 01 00 +T 19 06 00 00 21 15 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T 24 06 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 2C 06 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T 33 06 00 00 E1 73 23 72 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 3E 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 43 06 00 00 00 00 00 00 EB 21 11 00 09 7E 83 +R 00 00 01 00 02 04 01 00 +T 4C 06 00 00 77 23 7E 8A 77 +R 00 00 01 00 +T 51 06 00 00 +R 00 00 01 00 +T 51 06 00 00 01 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 05 03 00 +T 58 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 5D 06 00 00 00 00 00 00 DD 75 FC DD 74 FD EB +R 00 00 01 00 02 04 01 00 +T 66 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 6C 06 00 00 00 00 00 00 E5 21 17 00 DD 5E F2 +R 00 00 01 00 02 04 01 00 +T 75 06 00 00 DD 56 F3 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 80 06 00 00 70 01 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 06 03 00 +T 88 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 8D 06 00 00 00 00 00 00 DD 75 FC DD 74 FD EB +R 00 00 01 00 02 04 01 00 +T 96 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 9C 06 00 00 00 00 00 00 E5 21 1B 00 DD 5E F2 +R 00 00 01 00 02 04 01 00 +T A5 06 00 00 DD 56 F3 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T B0 06 00 00 70 01 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 06 03 00 +T B8 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T BD 06 00 00 00 00 00 00 DD 75 FC DD 74 FD EB +R 00 00 01 00 02 04 01 00 +T C6 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T CC 06 00 00 00 00 00 00 E5 21 1F 00 DD 5E F2 +R 00 00 01 00 02 04 01 00 +T D5 06 00 00 DD 56 F3 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T E0 06 00 00 70 01 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 06 03 00 +T E8 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T ED 06 00 00 00 00 00 00 DD 75 FC DD 74 FD EB +R 00 00 01 00 02 04 01 00 +T F6 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T FC 06 00 00 00 00 00 00 E5 21 23 00 DD 5E F2 +R 00 00 01 00 02 04 01 00 +T 05 07 00 00 DD 56 F3 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 10 07 00 00 70 01 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 06 03 00 +T 18 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 1D 07 00 00 00 00 00 00 DD 75 FC DD 74 FD EB +R 00 00 01 00 02 04 01 00 +T 26 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 2C 07 00 00 00 00 00 00 E5 21 27 00 DD 5E F2 +R 00 00 01 00 02 04 01 00 +T 35 07 00 00 DD 56 F3 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 40 07 00 00 70 21 11 00 DD 4E F2 DD 46 F3 09 +R 00 00 01 00 +T 4B 07 00 00 7E C6 14 77 30 02 23 34 +R 00 00 01 00 +T 53 07 00 00 +R 00 00 01 00 +T 53 07 00 00 18 00 +R 00 00 01 00 +T 55 07 00 00 +R 00 00 01 00 +T 55 07 00 00 DD 5E EE DD 56 EF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 5D 07 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0A 00 02 0A 01 00 +T 64 07 00 00 6E F2 DD 66 F3 +R 00 00 01 00 +T 69 07 00 00 +R 00 00 01 00 +T 69 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 0A 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 2E 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 49 4E 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/hop.rel b/src/nos/lib/internet_lib/hop.rel new file mode 100644 index 00000000..1280918c --- /dev/null +++ b/src/nos/lib/internet_lib/hop.rel @@ -0,0 +1,1239 @@ +XL4 +H 5 areas 58 global symbols +S _resolve Ref00000000 +S ___006d_9a7d__20_25_2d15s Ref00000000 +S _inet_ntoa Ref00000000 +S ___05d1_6f25_user_20abort_0a Ref00000000 +S ___03b3_2057_Too_20many_20sessio Ref00000000 +S _ntohudp Ref00000000 +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0201_0003_Can_27t_20create_20 Ref00000000 +S _Unreach Ref00000000 +S _socket Ref00000000 +S _logmsg Ref00000000 +S ___017f_c1c3__28hopcheck_29_20IC Ref00000000 +S ___007d_98a5__20_28_25ld_20ms_29 Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S ___0076_269f__20_25s Ref00000000 +S ___00f1_60ae__23_20queries_20eac Ref00000000 +S ___00ef_ef2d__21_21_20maximum_20 Ref00000000 +S ___04cd_7203_maxttl Ref00000000 +S _optind Ref00000000 +S _newsession Ref00000000 +S ___0085_ac28__20_2a_2a_2a Ref00000000 +S ___0065_c997__20_21_3f Ref00000000 +S _Exceed Ref00000000 +S ___0066_536e__20_21A Ref00000000 +S ___0067_27d1__20_21F Ref00000000 +S ___0281_9570_HOPCHECK_20start_20 Ref00000000 +S ___00ee_f9eb__21_21_20_25s_20_25 Ref00000000 +S ___0069_ab99__20_21N Ref00000000 +S _send_udp Ref00000000 +S _ntohip Ref00000000 +S ___021e_b471_Connect_20failed_0a Ref00000000 +S _getopt Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _close Ref00000000 +S _alert Ref00000000 +S ___006a_5266__20_21P Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___02d8_362b_Must_20be_20_200_20 Ref00000000 +S ___00f2_1acc__23_20secs_20to_20w Ref00000000 +S .__.ABS. Def00000000 +S ___04ce_e017_maxwait Ref00000000 +S ___02d9_2da0_Must_20be_20_3e_3d_ Ref00000000 +S _ntohicmp Ref00000000 +S ___0119_1703__253d_3a Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Current Ref00000000 +S ___0204_d5bc_Can_27t_20create_20 Ref00000000 +S ___0068_ceaf__20_21H Ref00000000 +S _free_rr Ref00000000 +S ___02d7_9a86_Must_20be_20_200_20 Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _freesession Ref00000000 +S _errno Ref00000000 +S ___0432_40b3_check_20_3chost_3e Ref00000000 +S ___0368_200a_Resolving_20_25s_2e Ref00000000 +S _connect Ref00000000 +S ___05bd_4f5f_trace Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _msclock Ref00000000 +S ___02ce_dcca_Max_20attempts_20to Ref00000000 +S ___0282_8ef4_HOPCHECK_20to_20_25 Ref00000000 +S _free_p Ref00000000 +S __printf Ref00000000 +S ___0431_5ed3_check Ref00000000 +S ___0535_0be6_queries Ref00000000 +S ___0139_f81b__25s_20 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Icmp_trace Ref00000000 +S _setbool Ref00000000 +S _kalarm Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S _recv_mbuf Ref00000000 +S _psocket Ref00000000 +S ___05c6_5c70_unknown_0a Ref00000000 +S ___006b_60fd__20_21S Ref00000000 +S _setshort Ref00000000 +S _itop Ref00000000 +S _inverse_a Ref00000000 +S ___05be_3bce_traceroute_20done_3 Ref00000000 +S _Cmdline Ref00000000 +S ___0023_f279__0a_20_20_20_20 Ref00000000 +S _subcmd Ref00000000 +S _keywait Ref00000000 +S ___0283_c794_HOPCHECK_20tracing Ref00000000 +S _Icmptypes Ref00000000 +S ___050a_29c2_normal_20_28_25s_20 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BE0 flags 0 +S _dohop Def00000000 +A CSTR size 2 flags 0 +A IDATA0 size 58 flags 0 +A CDATA0 size 58 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 2D 00 +T 09 00 00 00 E5 C5 4B 42 11 0A 00 00 00 3E +R 00 00 01 00 00 09 03 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 52 00 02 09 52 00 +T 16 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 07 00 02 0B 21 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 3A 00 +T 23 00 00 00 08 00 00 00 DD 75 FE DD 74 FF C5 +R 00 00 01 00 00 04 03 00 +T 2C 00 00 00 DD 4E 02 DD 46 03 C5 0E +R 00 00 01 00 +T 34 00 00 00 00 00 00 00 C5 01 00 00 00 00 C5 +R 00 00 01 00 2B 04 10 00 02 0A 10 00 +T 3A 00 00 00 21 0A 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 4C 00 +T 42 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 4C 00 02 0A 07 00 +T 49 00 00 00 F1 F1 F1 DD 75 FC DD 74 FD DD 7E +R 00 00 01 00 +T 54 00 00 00 FE DD B6 FF 28 0E DD 4E FE DD 46 +R 00 00 01 00 +T 5F 00 00 00 FF 21 05 00 A7 ED 42 30 1B +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 21 05 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 32 00 +T 70 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 32 00 2B 0A 3F 00 +T 76 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 3F 00 02 09 07 00 +T 7D 00 00 00 F1 21 00 00 18 0F +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 DD 6E FE DD 66 FF 22 08 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 8C 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 21 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 2D 00 +T 9B 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 54 00 02 0A 54 00 +T A1 00 00 00 11 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 03 00 2B 0A 45 00 +T A7 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 45 00 02 09 07 00 +T AE 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 21 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 3A 00 +T B9 00 00 00 04 00 00 00 DD 75 FE DD 74 FF C5 +R 00 00 01 00 00 04 03 00 +T C2 00 00 00 DD 4E 02 DD 46 03 C5 0E +R 00 00 01 00 +T CA 00 00 00 00 00 00 00 C5 01 00 00 00 00 C5 +R 00 00 01 00 2B 04 3C 00 02 0A 3C 00 +T D0 00 00 00 21 0A 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 4C 00 +T D8 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 4C 00 02 0A 07 00 +T DF 00 00 00 F1 F1 F1 DD 75 FC DD 74 FD DD 7E +R 00 00 01 00 +T EA 00 00 00 FE DD B6 FF 28 0E DD 4E FE DD 46 +R 00 00 01 00 +T F5 00 00 00 FF 21 FF 00 A7 ED 42 30 16 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 26 00 02 0B 26 00 +T 04 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 0A 01 00 00 CD 00 00 00 00 F1 F1 21 00 00 18 +R 00 00 01 00 02 05 07 00 +T 13 01 00 00 0F +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 DD 6E FE DD 66 FF 22 04 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 1D 01 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 21 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 3A 00 +T 2C 01 00 00 06 00 00 00 DD 75 FE DD 74 FF C5 +R 00 00 01 00 00 04 03 00 +T 35 01 00 00 DD 4E 02 DD 46 03 C5 0E +R 00 00 01 00 +T 3D 01 00 00 00 00 00 00 C5 01 00 00 00 00 C5 +R 00 00 01 00 2B 04 27 00 02 0A 27 00 +T 43 01 00 00 21 0A 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 4C 00 +T 4B 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 4C 00 02 0A 07 00 +T 52 01 00 00 F1 F1 F1 DD 75 FC DD 74 FD DD 7E +R 00 00 01 00 +T 5D 01 00 00 FE DD B6 FF 20 16 +R 00 00 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 2A 00 02 0B 2A 00 +T 69 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 6F 01 00 00 CD 00 00 00 00 F1 F1 21 00 00 18 +R 00 00 01 00 02 05 07 00 +T 78 01 00 00 0F +R 00 00 01 00 +T 79 01 00 00 +R 00 00 01 00 +T 79 01 00 00 DD 6E FE DD 66 FF 22 06 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 82 01 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 88 01 00 00 +R 00 00 01 00 +T 88 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 21 00 +T 8B 01 00 00 +R 00 00 01 00 +T 8B 01 00 00 CD 00 00 00 00 B8 FF AF DD 77 EE +R 00 00 01 00 02 05 3A 00 +T 94 01 00 00 DD 77 EF DD 36 F0 01 DD 36 F1 00 +R 00 00 01 00 +T 9F 01 00 00 AF DD 77 F8 DD 77 F9 21 01 00 22 +R 00 00 01 00 +T AA 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 13 00 +T AC 01 00 00 +R 00 00 01 00 +T AC 01 00 00 21 00 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T B5 01 00 00 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T BD 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 20 00 02 09 20 00 +T C2 01 00 00 00 00 00 00 F1 DD 75 F2 DD 74 F3 +R 00 00 01 00 02 04 07 00 +T CB 01 00 00 7D A4 3C 28 17 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 DD 4E F2 DD 46 F3 3E 6E A9 B0 20 +R 00 00 01 00 +T DB 01 00 00 09 +R 00 00 01 00 +T DC 01 00 00 +R 00 00 01 00 +T DC 01 00 00 AF DD 77 F0 DD 77 F1 18 00 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 18 C5 +R 00 00 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 2A 00 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 02 05 13 00 +T F0 01 00 00 05 09 46 23 66 68 DD 75 F4 DD 74 +R 00 00 01 00 +T FB 01 00 00 F5 21 01 00 E5 01 08 00 ED 5B +R 00 00 01 00 +T 05 02 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 50 00 2B 09 14 00 +T 0A 02 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 14 00 02 09 07 00 +T 11 02 00 00 75 B8 DD 74 B9 7D B4 20 25 +R 00 00 01 00 +T 1A 02 00 00 +R 00 00 01 00 +T 1A 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 04 00 02 0B 04 00 +T 20 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 26 02 00 00 CD 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 05 07 00 +T 2F 02 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 53 00 +T 34 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 53 00 02 09 07 00 +T 3A 02 00 00 01 00 C3 85 0A 00 00 +R 00 00 01 00 00 07 01 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 21 20 00 DD 4E B8 DD 46 B9 09 36 +R 00 00 01 00 +T 4A 02 00 00 88 0A 00 00 23 36 88 0A 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T 4F 02 00 00 36 88 0A 00 00 DD 36 BA FF DD 36 +R 00 00 01 00 29 05 01 00 +T 57 02 00 00 BB FF AF DD 77 D8 DD 77 D9 2A +R 00 00 01 00 +T 61 02 00 00 00 00 00 00 DD 75 DA DD 74 DB DD +R 00 00 01 00 00 04 03 00 +T 6A 02 00 00 6E F4 DD 66 F5 E5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 37 00 +T 72 02 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 37 00 +T 78 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3F 00 02 09 3F 00 +T 7D 02 00 00 00 00 00 00 F1 F1 F1 DD 5E F4 DD +R 00 00 01 00 02 04 07 00 +T 86 02 00 00 56 F5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T 8B 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 07 00 +T 92 02 00 00 DC DD 74 DD DD 71 DE DD 70 DF 7D +R 00 00 01 00 +T 9D 02 00 00 B4 B1 B0 20 3B +R 00 00 01 00 +T A2 02 00 00 +R 00 00 01 00 +T A2 02 00 00 DD 6E F4 DD 66 F5 E5 0E +R 00 00 01 00 +T AA 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 4A 00 02 0A 4A 00 +T B0 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 3F 00 02 0A 3F 00 +T B6 02 00 00 00 00 00 00 F1 F1 F1 01 01 00 11 +R 00 00 01 00 02 04 07 00 +T BF 02 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 53 00 +T C4 02 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 53 00 02 09 07 00 +T CB 02 00 00 B8 DD 56 B9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 34 00 +T D2 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 34 00 02 09 07 00 +T D8 02 00 00 01 00 C3 85 0A 00 00 +R 00 00 01 00 00 07 01 00 +T DD 02 00 00 +R 00 00 01 00 +T DD 02 00 00 21 20 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 49 00 +T E5 02 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 49 00 02 0A 07 00 +T EC 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 42 00 02 0B 42 00 +T F2 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T F8 02 00 00 CD 00 00 00 00 F1 F1 F1 21 00 00 +R 00 00 01 00 02 05 07 00 +T 01 03 00 00 E5 01 01 00 11 00 00 3E +R 00 00 01 00 +T 09 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 0E 03 00 00 00 00 00 00 F1 DD 75 BA DD 74 BB +R 00 00 01 00 02 04 07 00 +T 17 03 00 00 7D A4 3C 20 33 +R 00 00 01 00 +T 1C 03 00 00 +R 00 00 01 00 +T 1C 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 2F 00 02 0B 2F 00 +T 22 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 28 03 00 00 CD 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 05 07 00 +T 31 03 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 53 00 +T 36 03 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 53 00 02 09 07 00 +T 3D 03 00 00 B8 DD 56 B9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 34 00 +T 44 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 34 00 02 09 07 00 +T 4A 03 00 00 01 00 C3 85 0A 00 00 +R 00 00 01 00 00 07 01 00 +T 4F 03 00 00 +R 00 00 01 00 +T 4F 03 00 00 21 10 00 E5 21 22 00 39 4D 44 DD +R 00 00 01 00 +T 5A 03 00 00 5E BA DD 56 BB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 38 00 +T 62 03 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 38 00 02 09 07 00 +T 69 03 00 00 A4 3C 20 33 +R 00 00 01 00 +T 6D 03 00 00 +R 00 00 01 00 +T 6D 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1F 00 02 0B 1F 00 +T 73 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 79 03 00 00 CD 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 05 07 00 +T 82 03 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 53 00 +T 87 03 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 53 00 02 09 07 00 +T 8E 03 00 00 B8 DD 56 B9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 34 00 +T 95 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 34 00 02 09 07 00 +T 9B 03 00 00 01 00 C3 85 0A 00 00 +R 00 00 01 00 00 07 01 00 +T A0 03 00 00 +R 00 00 01 00 +T A0 03 00 00 21 01 00 E5 01 02 00 11 00 00 3E +R 00 00 01 00 +T AB 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T B0 03 00 00 00 00 00 00 F1 DD 75 BC DD 74 BD +R 00 00 01 00 02 04 07 00 +T B9 03 00 00 7D A4 3C 20 41 +R 00 00 01 00 +T BE 03 00 00 +R 00 00 01 00 +T BE 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 08 00 02 0B 08 00 +T C4 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T CA 03 00 00 CD 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 05 07 00 +T D3 03 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 53 00 +T D8 03 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 53 00 02 09 07 00 +T DF 03 00 00 BA DD 56 BB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 22 00 +T E6 03 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 22 00 02 09 07 00 +T ED 03 00 00 B8 DD 56 B9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 34 00 +T F4 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 34 00 02 09 07 00 +T FA 03 00 00 01 00 C3 85 0A 00 00 +R 00 00 01 00 00 07 01 00 +T FF 03 00 00 +R 00 00 01 00 +T FF 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0E 00 02 0B 0E 00 +T 05 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 0B 04 00 00 CD 00 00 00 00 F1 F1 2A +R 00 00 01 00 02 05 07 00 +T 11 04 00 00 00 00 00 00 DD 75 F6 DD 74 F7 21 +R 00 00 01 00 02 04 44 00 +T 1A 04 00 00 00 00 22 00 00 00 00 DD 5E BA DD +R 00 00 01 00 02 07 44 00 +T 23 04 00 00 56 BB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 4D 00 +T 28 04 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 4D 00 02 09 07 00 +T 2F 04 00 00 E8 DD 74 E9 01 0E 00 09 46 23 66 +R 00 00 01 00 +T 3A 04 00 00 68 DD 75 EA DD 74 EB 01 04 00 09 +R 00 00 01 00 +T 45 04 00 00 5E 23 56 23 4E 23 46 EB DD 75 BE +R 00 00 01 00 +T 50 04 00 00 DD 74 BF DD 71 C0 DD 70 C1 DD 6E +R 00 00 01 00 +T 5B 04 00 00 EA DD 66 EB 23 23 46 23 66 68 DD +R 00 00 01 00 +T 66 04 00 00 75 C2 DD 74 C3 21 12 00 DD 4E E8 +R 00 00 01 00 +T 71 04 00 00 DD 46 E9 09 46 23 66 68 DD 75 EA +R 00 00 01 00 +T 7C 04 00 00 DD 74 EB 01 04 00 09 5E 23 56 23 +R 00 00 01 00 +T 87 04 00 00 4E 23 46 EB DD 75 C4 DD 74 C5 DD +R 00 00 01 00 +T 92 04 00 00 71 C6 DD 70 C7 2A 02 00 00 00 7D +R 00 00 01 00 00 0A 03 00 +T 9B 04 00 00 B4 28 27 +R 00 00 01 00 +T 9E 04 00 00 +R 00 00 01 00 +T 9E 04 00 00 DD 6E B8 DD 66 B9 23 23 23 4E 23 +R 00 00 01 00 +T A9 04 00 00 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 07 1A 00 +T AF 04 00 00 00 00 00 00 E5 DD 6E BA DD 66 BB +R 00 00 01 00 02 04 1A 00 +T B8 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T BE 04 00 00 CD 00 00 00 00 E1 E1 E1 E1 +R 00 00 01 00 02 05 07 00 +T C5 04 00 00 +R 00 00 01 00 +T C5 04 00 00 DD 36 EC 01 +R 00 00 01 00 +T C9 04 00 00 +R 00 00 01 00 +T C9 04 00 00 DD 6E EC 26 00 ED 4B 04 00 00 00 +R 00 00 01 00 00 0B 03 00 +T D2 04 00 00 A7 ED 42 D2 1B 09 00 00 +R 00 00 01 00 00 08 01 00 +T D8 04 00 00 +R 00 00 01 00 +T D8 04 00 00 DD 6E EA DD 66 EB 23 23 46 23 66 +R 00 00 01 00 +T E3 04 00 00 68 DD 75 C8 DD 74 C9 DD 4E EC 06 +R 00 00 01 00 +T EE 04 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 07 2C 00 +T F4 04 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 2C 00 2B 0A 3F 00 +T FA 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 3F 00 02 09 07 00 +T 01 05 00 00 F1 AF DD 77 D4 DD 77 D5 DD 77 D6 +R 00 00 01 00 +T 0C 05 00 00 DD 77 D7 DD 36 ED 00 +R 00 00 01 00 +T 13 05 00 00 +R 00 00 01 00 +T 13 05 00 00 DD 6E ED 26 00 ED 4B 08 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 1C 05 00 00 A7 ED 42 D2 DF 08 00 00 +R 00 00 01 00 00 08 01 00 +T 22 05 00 00 +R 00 00 01 00 +T 22 05 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 06 00 +T 28 05 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 07 00 +T 2F 05 00 00 FA DD 74 FB 0E 00 C5 01 00 00 C5 +R 00 00 01 00 +T 3A 05 00 00 01 00 00 C5 21 48 00 39 E5 DD 6E +R 00 00 01 00 +T 45 05 00 00 EC E5 0E 00 C5 21 18 00 39 4D 44 +R 00 00 01 00 +T 50 05 00 00 21 12 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 58 05 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 1D 00 02 0A 07 00 +T 5F 05 00 00 21 0C 00 39 F9 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3B 00 +T 67 05 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 3B 00 02 0A 07 00 +T 6E 05 00 00 75 CA DD 74 CB DD 71 CC DD 70 CD +R 00 00 01 00 +T 79 05 00 00 2A 06 00 00 00 01 00 00 C5 E5 01 +R 00 00 01 00 00 05 03 00 +T 82 05 00 00 00 00 21 E8 03 CD 00 00 00 00 EB +R 00 00 01 00 02 0A 33 00 +T 8B 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 46 00 02 0A 46 00 +T 91 05 00 00 00 00 00 00 21 1B 00 39 E5 21 +R 00 00 01 00 02 04 07 00 +T 99 05 00 00 1C 00 39 E5 21 1A 00 39 E5 DD 6E +R 00 00 01 00 +T A4 05 00 00 C8 DD 66 C9 E5 DD 4E C2 DD 46 C3 +R 00 00 01 00 +T AF 05 00 00 DD 5E BC DD 56 BD CD B2 0A 00 00 +R 00 00 01 00 00 0B 01 00 +T B8 05 00 00 F1 F1 F1 F1 7D A4 3C 20 28 +R 00 00 01 00 +T C1 05 00 00 +R 00 00 01 00 +T C1 05 00 00 2A 00 00 00 00 3E 6A AD B4 28 0B +R 00 00 01 00 02 05 35 00 +T CA 05 00 00 +R 00 00 01 00 +T CA 05 00 00 DD 36 F8 01 DD 36 F9 00 C3 +R 00 00 01 00 +T D3 05 00 00 1B 09 00 00 +R 00 00 01 00 00 04 01 00 +T D5 05 00 00 +R 00 00 01 00 +T D5 05 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 15 00 02 0B 15 00 +T DB 05 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T E1 05 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 07 00 +T E7 05 00 00 D9 08 00 00 +R 00 00 01 00 00 04 01 00 +T E9 05 00 00 +R 00 00 01 00 +T E9 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 3B 00 02 0A 3B 00 +T EF 05 00 00 00 00 00 00 59 50 A7 DD 4E CA DD +R 00 00 01 00 02 04 07 00 +T F8 05 00 00 46 CB ED 42 EB DD 4E CC DD 46 CD +R 00 00 01 00 +T 03 06 00 00 ED 42 4D 44 EB DD 75 CA DD 74 CB +R 00 00 01 00 +T 0E 06 00 00 DD 71 CC DD 70 CD DD 6E CE DD 66 +R 00 00 01 00 +T 19 06 00 00 CF DD 4E D4 DD 46 D5 A7 ED 42 20 +R 00 00 01 00 +T 24 06 00 00 11 DD 6E D0 DD 66 D1 DD 4E D6 DD +R 00 00 01 00 +T 2F 06 00 00 46 D7 ED 42 CA 55 07 00 00 +R 00 00 01 00 00 09 01 00 +T 36 06 00 00 +R 00 00 01 00 +T 36 06 00 00 +R 00 00 01 00 +T 36 06 00 00 DD 7E D4 DD B6 D5 DD B6 D6 DD B6 +R 00 00 01 00 +T 41 06 00 00 D7 28 11 +R 00 00 01 00 +T 44 06 00 00 +R 00 00 01 00 +T 44 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 51 00 02 0B 51 00 +T 4A 06 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 50 06 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 07 00 +T 55 06 00 00 +R 00 00 01 00 +T 55 06 00 00 DD 4E D0 DD 46 D1 DD 5E CE DD 56 +R 00 00 01 00 +T 60 06 00 00 CF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 66 06 00 00 CD 00 00 00 00 E5 0E 00 00 00 00 +R 00 00 01 00 02 05 07 00 2B 0B 01 00 +T 6C 06 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 01 00 +T 72 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3F 00 02 09 3F 00 +T 77 06 00 00 00 00 00 00 F1 F1 F1 DD 7E F0 DD +R 00 00 01 00 02 04 07 00 +T 80 06 00 00 B6 F1 CA 3D 07 00 00 +R 00 00 01 00 00 07 01 00 +T 85 06 00 00 +R 00 00 01 00 +T 85 06 00 00 DD 4E D0 DD 46 D1 DD 5E CE DD 56 +R 00 00 01 00 +T 90 06 00 00 CF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 4E 00 02 0B 4E 00 +T 96 06 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 07 00 +T 9F 06 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 +T A5 06 00 00 +R 00 00 01 00 +T A5 06 00 00 DD 7E FE DD B6 FF CA 2F 07 00 00 +R 00 00 01 00 00 0B 01 00 +T AE 06 00 00 +R 00 00 01 00 +T AE 06 00 00 21 11 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T B9 06 00 00 23 B6 28 5D +R 00 00 01 00 +T BD 06 00 00 +R 00 00 01 00 +T BD 06 00 00 21 0F 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T C8 06 00 00 23 46 3E 0C A9 B0 20 22 +R 00 00 01 00 +T D0 06 00 00 +R 00 00 01 00 +T D0 06 00 00 21 13 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T DB 06 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0F 00 +T E2 06 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0F 00 2B 0A 3F 00 +T E8 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 3F 00 02 09 07 00 +T EF 06 00 00 F1 18 3D +R 00 00 01 00 +T F2 06 00 00 +R 00 00 01 00 +T F2 06 00 00 3E 01 A9 B0 20 22 21 07 00 DD 4E +R 00 00 01 00 +T FD 06 00 00 FE DD 46 FF 09 4E 23 46 C5 0E +R 00 00 01 00 +T 07 07 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0F 00 02 0A 0F 00 +T 0D 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 3F 00 02 0A 3F 00 +T 13 07 00 00 00 00 00 00 F1 F1 F1 18 15 +R 00 00 01 00 02 04 07 00 +T 1A 07 00 00 +R 00 00 01 00 +T 1A 07 00 00 +R 00 00 01 00 +T 1A 07 00 00 DD 6E FE DD 66 FF 23 23 46 23 66 +R 00 00 01 00 +T 25 07 00 00 68 DD 75 FE DD 74 FF C3 +R 00 00 01 00 +T 2D 07 00 00 A5 06 00 00 +R 00 00 01 00 00 04 01 00 +T 2F 07 00 00 +R 00 00 01 00 +T 2F 07 00 00 +R 00 00 01 00 +T 2F 07 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 31 00 +T 37 07 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 31 00 02 0A 07 00 +T 3D 07 00 00 +R 00 00 01 00 +T 3D 07 00 00 DD 4E D0 DD 46 D1 DD 6E CE DD 66 +R 00 00 01 00 +T 48 07 00 00 CF DD 75 D4 DD 74 D5 DD 71 D6 DD +R 00 00 01 00 +T 53 07 00 00 70 D7 +R 00 00 01 00 +T 55 07 00 00 +R 00 00 01 00 +T 55 07 00 00 DD 6E CC DD 66 CD E5 DD 6E CA DD +R 00 00 01 00 +T 60 07 00 00 66 CB E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0D 00 +T 67 07 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0D 00 2B 0A 3F 00 +T 6D 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 3F 00 02 09 07 00 +T 74 07 00 00 F1 F1 2A 02 00 00 00 7D B4 28 72 +R 00 00 01 00 00 07 03 00 +T 7D 07 00 00 +R 00 00 01 00 +T 7D 07 00 00 DD 7E D2 FE 0B 20 10 DD 6E D3 26 +R 00 00 01 00 +T 88 07 00 00 00 29 01 00 00 00 00 09 46 23 66 +R 00 00 01 00 02 07 17 00 +T 91 07 00 00 68 18 0E +R 00 00 01 00 +T 94 07 00 00 +R 00 00 01 00 +T 94 07 00 00 DD 6E D3 26 00 29 01 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 9D 07 00 00 09 46 23 66 68 +R 00 00 01 00 +T A2 07 00 00 +R 00 00 01 00 +T A2 07 00 00 E5 DD 6E D2 26 00 29 01 +R 00 00 01 00 +T AA 07 00 00 00 00 00 00 09 4E 23 46 C5 DD 6E +R 00 00 01 00 02 04 55 00 +T B3 07 00 00 CC DD 66 CD E5 DD 6E CA DD 66 CB +R 00 00 01 00 +T BE 07 00 00 E5 DD 4E D0 DD 46 D1 DD 5E CE DD +R 00 00 01 00 +T C9 07 00 00 56 CF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T CE 07 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 02 00 02 09 07 00 +T D5 07 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0C 00 02 0A 0C 00 +T DB 07 00 00 DD 6E BA DD 66 BB E5 3E +R 00 00 01 00 +T E3 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T E8 07 00 00 00 00 00 00 21 10 00 39 F9 +R 00 00 01 00 02 04 07 00 +T EF 07 00 00 +R 00 00 01 00 +T EF 07 00 00 DD 7E D2 FE 0B 20 03 +R 00 00 01 00 +T F6 07 00 00 +R 00 00 01 00 +T F6 07 00 00 C3 D9 08 00 00 +R 00 00 01 00 00 05 01 00 +T F9 07 00 00 +R 00 00 01 00 +T F9 07 00 00 DD 5E D3 CD 00 00 00 00 07 00 00 +R 00 00 01 00 02 08 47 00 +T 02 08 00 00 01 02 03 04 05 0D C6 08 00 00 +R 00 00 01 00 00 0A 01 00 +T 0A 08 00 00 AB 08 00 00 90 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 0E 08 00 00 75 08 00 00 18 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 12 08 00 00 5A 08 00 00 3F 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 16 08 00 00 23 08 00 00 +R 00 00 01 00 00 04 01 00 +T 18 08 00 00 +R 00 00 01 00 +T 18 08 00 00 DD 34 EE 20 03 DD 34 EF +R 00 00 01 00 +T 20 08 00 00 +R 00 00 01 00 +T 20 08 00 00 C3 D9 08 00 00 +R 00 00 01 00 00 05 01 00 +T 23 08 00 00 +R 00 00 01 00 +T 23 08 00 00 DD 34 EE 20 03 DD 34 EF +R 00 00 01 00 +T 2B 08 00 00 +R 00 00 01 00 +T 2B 08 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1C 00 02 0B 1C 00 +T 31 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 37 08 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 07 00 +T 3D 08 00 00 D9 08 00 00 +R 00 00 01 00 00 04 01 00 +T 3F 08 00 00 +R 00 00 01 00 +T 3F 08 00 00 DD 34 EE 20 03 DD 34 EF +R 00 00 01 00 +T 47 08 00 00 +R 00 00 01 00 +T 47 08 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 30 00 02 0B 30 00 +T 4D 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 53 08 00 00 CD 00 00 00 00 F1 F1 18 7F +R 00 00 01 00 02 05 07 00 +T 5A 08 00 00 +R 00 00 01 00 +T 5A 08 00 00 DD 34 EE 20 03 DD 34 EF +R 00 00 01 00 +T 62 08 00 00 +R 00 00 01 00 +T 62 08 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 24 00 02 0B 24 00 +T 68 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 6E 08 00 00 CD 00 00 00 00 F1 F1 18 64 +R 00 00 01 00 02 05 07 00 +T 75 08 00 00 +R 00 00 01 00 +T 75 08 00 00 DD 34 EE 20 03 DD 34 EF +R 00 00 01 00 +T 7D 08 00 00 +R 00 00 01 00 +T 7D 08 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 19 00 02 0B 19 00 +T 83 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 89 08 00 00 CD 00 00 00 00 F1 F1 18 49 +R 00 00 01 00 02 05 07 00 +T 90 08 00 00 +R 00 00 01 00 +T 90 08 00 00 DD 34 EE 20 03 DD 34 EF +R 00 00 01 00 +T 98 08 00 00 +R 00 00 01 00 +T 98 08 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 4B 00 02 0B 4B 00 +T 9E 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T A4 08 00 00 CD 00 00 00 00 F1 F1 18 2E +R 00 00 01 00 02 05 07 00 +T AB 08 00 00 +R 00 00 01 00 +T AB 08 00 00 DD 34 EE 20 03 DD 34 EF +R 00 00 01 00 +T B3 08 00 00 +R 00 00 01 00 +T B3 08 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 18 00 02 0B 18 00 +T B9 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T BF 08 00 00 CD 00 00 00 00 F1 F1 18 13 +R 00 00 01 00 02 05 07 00 +T C6 08 00 00 +R 00 00 01 00 +T C6 08 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 16 00 02 0B 16 00 +T CC 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T D2 08 00 00 CD 00 00 00 00 F1 F1 18 00 +R 00 00 01 00 02 05 07 00 +T D9 08 00 00 +R 00 00 01 00 +T D9 08 00 00 +R 00 00 01 00 +T D9 08 00 00 DD 34 ED C3 13 05 00 00 +R 00 00 01 00 00 08 01 00 +T DF 08 00 00 +R 00 00 01 00 +T DF 08 00 00 01 00 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 46 00 +T E7 08 00 00 21 00 00 00 00 CD 00 00 00 00 0E +R 00 00 01 00 02 05 46 00 02 0A 07 00 +T EE 08 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0E 00 02 0A 0E 00 +T F4 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 3F 00 02 0A 3F 00 +T FA 08 00 00 00 00 00 00 F1 F1 DD 7E EE DD B6 +R 00 00 01 00 02 04 07 00 +T 03 09 00 00 EF 28 02 +R 00 00 01 00 +T 06 09 00 00 +R 00 00 01 00 +T 06 09 00 00 18 13 +R 00 00 01 00 +T 08 09 00 00 +R 00 00 01 00 +T 08 09 00 00 DD 34 EC DD 6E EA DD 66 EB 23 23 +R 00 00 01 00 +T 13 09 00 00 34 23 20 01 34 +R 00 00 01 00 +T 18 09 00 00 +R 00 00 01 00 +T 18 09 00 00 C3 C9 04 00 00 +R 00 00 01 00 00 05 01 00 +T 1B 09 00 00 +R 00 00 01 00 +T 1B 09 00 00 +R 00 00 01 00 +T 1B 09 00 00 DD 5E BA DD 56 BB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 22 00 +T 23 09 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 22 00 02 0A 07 00 +T 2A 09 00 00 36 BA FF DD 36 BB FF DD 5E BC DD +R 00 00 01 00 +T 35 09 00 00 56 BD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 22 00 +T 3A 09 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 22 00 02 09 07 00 +T 41 09 00 00 F8 DD B6 F9 28 11 +R 00 00 01 00 +T 47 09 00 00 +R 00 00 01 00 +T 47 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0E 00 02 0B 0E 00 +T 4D 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 53 09 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 07 00 +T 58 09 00 00 +R 00 00 01 00 +T 58 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 4F 00 02 0B 4F 00 +T 5E 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 64 09 00 00 CD 00 00 00 00 F1 F1 DD 6E F6 DD +R 00 00 01 00 02 05 07 00 +T 6D 09 00 00 66 F7 22 00 00 00 00 DD 7E F8 DD +R 00 00 01 00 02 07 44 00 +T 76 09 00 00 B6 F9 28 14 +R 00 00 01 00 +T 7A 09 00 00 +R 00 00 01 00 +T 7A 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 80 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T 86 09 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 07 00 +T 8C 09 00 00 38 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 8E 09 00 00 +R 00 00 01 00 +T 8E 09 00 00 DD 6E EC 26 00 ED 4B 04 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 97 09 00 00 A7 ED 42 38 14 +R 00 00 01 00 +T 9C 09 00 00 +R 00 00 01 00 +T 9C 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 11 00 02 0B 11 00 +T A2 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 3F 00 02 0B 3F 00 +T A8 09 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 07 00 +T AE 09 00 00 38 0A 00 00 +R 00 00 01 00 00 04 01 00 +T B0 09 00 00 +R 00 00 01 00 +T B0 09 00 00 DD 6E CE DD 66 CF DD 4E C4 DD 46 +R 00 00 01 00 +T BB 09 00 00 C5 A7 ED 42 20 48 DD 6E D0 DD 66 +R 00 00 01 00 +T C6 09 00 00 D1 DD 4E C6 DD 46 C7 ED 42 20 38 +R 00 00 01 00 +T D1 09 00 00 DD 7E D3 FE 03 20 31 +R 00 00 01 00 +T D8 09 00 00 +R 00 00 01 00 +T D8 09 00 00 +R 00 00 01 00 +T D8 09 00 00 +R 00 00 01 00 +T D8 09 00 00 DD 6E D3 26 00 29 01 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T E1 09 00 00 09 4E 23 46 C5 DD 6E D2 26 00 29 +R 00 00 01 00 +T EC 09 00 00 01 00 00 00 00 09 4E 23 46 C5 0E +R 00 00 01 00 02 05 55 00 +T F5 09 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 56 00 02 0A 56 00 +T FB 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 3F 00 02 0A 3F 00 +T 01 0A 00 00 00 00 00 00 F1 F1 F1 F1 18 2F +R 00 00 01 00 02 04 07 00 +T 09 0A 00 00 +R 00 00 01 00 +T 09 0A 00 00 DD 6E D3 26 00 29 01 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 12 0A 00 00 09 4E 23 46 C5 DD 6E D2 26 00 29 +R 00 00 01 00 +T 1D 0A 00 00 01 00 00 00 00 09 4E 23 46 C5 0E +R 00 00 01 00 02 05 55 00 +T 26 0A 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 1B 00 02 0A 1B 00 +T 2C 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 3F 00 02 0A 3F 00 +T 32 0A 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 07 00 +T 38 0A 00 00 +R 00 00 01 00 +T 38 0A 00 00 +R 00 00 01 00 +T 38 0A 00 00 +R 00 00 01 00 +T 38 0A 00 00 2A 02 00 00 00 7D B4 28 27 +R 00 00 01 00 00 05 03 00 +T 3F 0A 00 00 +R 00 00 01 00 +T 3F 0A 00 00 DD 6E B8 DD 66 B9 23 23 23 4E 23 +R 00 00 01 00 +T 4A 0A 00 00 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 07 3D 00 +T 50 0A 00 00 00 00 00 00 E5 DD 6E BA DD 66 BB +R 00 00 01 00 02 04 3D 00 +T 59 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 5F 0A 00 00 CD 00 00 00 00 E1 E1 E1 E1 +R 00 00 01 00 02 05 07 00 +T 66 0A 00 00 +R 00 00 01 00 +T 66 0A 00 00 01 01 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 53 00 +T 6E 0A 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 53 00 02 0A 07 00 +T 75 0A 00 00 5E B8 DD 56 B9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 34 00 +T 7D 0A 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 34 00 02 09 07 00 +T 83 0A 00 00 00 00 +R 00 00 01 00 +T 85 0A 00 00 +R 00 00 01 00 +T 85 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 21 00 +T 88 0A 00 00 +R 00 00 01 00 +T 88 0A 00 00 CD 00 00 00 00 3E 03 AB B2 20 1B +R 00 00 01 00 02 05 2D 00 +T 91 0A 00 00 +R 00 00 01 00 +T 91 0A 00 00 01 6B 00 21 07 00 ED 5B +R 00 00 01 00 +T 99 0A 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 2E 00 +T A0 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 23 00 02 09 23 00 +T A5 0A 00 00 00 00 00 00 21 00 00 18 03 +R 00 00 01 00 02 04 07 00 +T AC 0A 00 00 +R 00 00 01 00 +T AC 0A 00 00 21 01 00 +R 00 00 01 00 +T AF 0A 00 00 +R 00 00 01 00 +T AF 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 21 00 +T B2 0A 00 00 +R 00 00 01 00 +T B2 0A 00 00 CD 00 00 00 00 9E FF +R 00 00 01 00 02 05 3A 00 +T B7 0A 00 00 +R 00 00 01 00 +T B7 0A 00 00 +R 00 00 01 00 +T B7 0A 00 00 DD 36 9E 10 DD 36 9F 00 21 00 00 +R 00 00 01 00 +T C2 0A 00 00 39 E5 21 53 00 39 E5 21 00 00 E5 +R 00 00 01 00 +T CD 0A 00 00 21 55 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T D8 0A 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T DE 0A 00 00 CD 00 00 00 00 F1 F1 F1 7D A4 3C +R 00 00 01 00 02 05 07 00 +T E7 0A 00 00 20 06 +R 00 00 01 00 +T E9 0A 00 00 +R 00 00 01 00 +T E9 0A 00 00 21 FF FF C3 DA 0B 00 00 +R 00 00 01 00 00 08 01 00 +T EF 0A 00 00 +R 00 00 01 00 +T EF 0A 00 00 21 4F 00 39 4D 44 21 02 00 39 5D +R 00 00 01 00 +T FA 0A 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2B 00 02 0B 2B 00 +T 00 0B 00 00 CD 00 00 00 00 DD 7E A0 FE 0B 20 +R 00 00 01 00 02 05 07 00 +T 09 0B 00 00 06 DD 7E A1 B7 28 17 +R 00 00 01 00 +T 10 0B 00 00 +R 00 00 01 00 +T 10 0B 00 00 +R 00 00 01 00 +T 10 0B 00 00 DD 7E A0 FE 03 28 10 +R 00 00 01 00 +T 17 0B 00 00 +R 00 00 01 00 +T 17 0B 00 00 +R 00 00 01 00 +T 17 0B 00 00 +R 00 00 01 00 +T 17 0B 00 00 21 4F 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3E 00 +T 1F 0B 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 3E 00 02 0A 07 00 +T 26 0B 00 00 90 +R 00 00 01 00 +T 27 0B 00 00 +R 00 00 01 00 +T 27 0B 00 00 21 4F 00 39 4D 44 21 08 00 39 5D +R 00 00 01 00 +T 32 0B 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1E 00 02 0B 1E 00 +T 38 0B 00 00 CD 00 00 00 00 DD 7E BB FE 11 28 +R 00 00 01 00 02 05 07 00 +T 41 0B 00 00 11 +R 00 00 01 00 +T 42 0B 00 00 +R 00 00 01 00 +T 42 0B 00 00 21 4F 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3E 00 +T 4A 0B 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 3E 00 02 0A 07 00 +T 51 0B 00 00 B7 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 53 0B 00 00 +R 00 00 01 00 +T 53 0B 00 00 21 4F 00 39 4D 44 21 47 00 39 5D +R 00 00 01 00 +T 5E 0B 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 64 0B 00 00 CD 00 00 00 00 DD 6E E7 DD 66 E8 +R 00 00 01 00 02 05 07 00 +T 6D 0B 00 00 DD 4E 08 DD 46 09 A7 ED 42 20 11 +R 00 00 01 00 +T 78 0B 00 00 DD 6E E5 DD 66 E6 DD 4E 04 DD 46 +R 00 00 01 00 +T 83 0B 00 00 05 A7 ED 42 28 11 +R 00 00 01 00 +T 89 0B 00 00 +R 00 00 01 00 +T 89 0B 00 00 +R 00 00 01 00 +T 89 0B 00 00 +R 00 00 01 00 +T 89 0B 00 00 21 4F 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3E 00 +T 91 0B 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 3E 00 02 0A 07 00 +T 98 0B 00 00 B7 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 9A 0B 00 00 +R 00 00 01 00 +T 9A 0B 00 00 21 55 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T A5 0B 00 00 EB E5 DD 6E 0A DD 66 0B D1 73 23 +R 00 00 01 00 +T B0 0B 00 00 72 23 71 23 70 DD 46 A0 DD 6E 0C +R 00 00 01 00 +T BB 0B 00 00 DD 66 0D 70 DD 46 A1 DD 6E 0E DD +R 00 00 01 00 +T C6 0B 00 00 66 0F 70 21 4F 00 39 5D 54 3E +R 00 00 01 00 +T D0 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3E 00 02 09 3E 00 +T D5 0B 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 07 00 +T DA 0B 00 00 +R 00 00 01 00 +T DA 0B 00 00 C3 00 00 00 00 C3 B7 0A 00 00 +R 00 00 01 00 02 05 25 00 00 0A 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6E 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 +T 0A 00 00 00 +R 00 00 03 00 +T 0A 00 00 00 +R 00 00 03 00 +T 00 00 00 00 9A 82 00 00 1E 00 05 00 03 00 +R 00 00 04 00 +T 0A 00 00 00 00 00 00 00 8B 01 00 00 00 08 +R 00 00 04 00 4A 04 40 00 48 08 01 00 +T 12 00 00 00 02 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 06 36 00 4A 0A 12 00 +T 1A 00 00 00 B3 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 48 04 01 00 +T 24 00 00 00 00 00 00 00 26 01 00 00 00 00 +R 00 00 04 00 4A 04 29 00 48 08 01 00 +T 2C 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 09 41 00 +T 34 00 00 00 1D 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 48 04 01 00 +T 3E 00 00 00 00 00 00 00 95 00 00 00 00 00 +R 00 00 04 00 4A 04 39 00 48 08 01 00 +T 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 51 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/internet_lib/icmp.rel b/src/nos/lib/internet_lib/icmp.rel new file mode 100644 index 00000000..a1305d3c --- /dev/null +++ b/src/nos/lib/internet_lib/icmp.rel @@ -0,0 +1,954 @@ +XL4 +H 5 areas 23 global symbols +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _Unreach Ref00000000 +S _Said_icmp Ref00000000 +S _len_p Ref00000000 +S _Exceed Ref00000000 +S ___028c_db6d_ICMP_20from_20_25s_ Ref00000000 +S ?L_INC_L03 Ref00000000 +S _ntohip Ref00000000 +S _htonip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _dup_p Ref00000000 +S ___00b6_e3a3__20dest_20_25s_20_2 Ref00000000 +S .__.ABS. Def00000000 +S ___00c5_ea43__20new_20gateway_20 Ref00000000 +S _ntohicmp Ref00000000 +S _ip_send Ref00000000 +S _htonicmp Ref00000000 +S _cksum Ref00000000 +S ___007b_97d2__20_25u_0a Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___0077_c302__20_25s_0a Ref00000000 +S _free_p Ref00000000 +S _echo_proc Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Icmplink Ref00000000 +S _Icmp_trace Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S _smsg Ref00000000 +S _Icmptypes Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7BA flags 0 +S _icmp_input Def00000000 +S _icmp_output Def000004EB +A CSTR size 1AC flags 0 +A IDATA0 size A2 flags 0 +S _Icmp_mib Def00000000 +A CDATA0 size A2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 B4 FF 2A +R 00 00 01 00 02 05 15 00 +T 06 00 00 00 08 00 00 00 ED 4B 0A 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 0D 00 00 00 00 00 00 00 22 08 00 00 00 ED 43 +R 00 00 01 00 02 04 08 00 00 09 03 00 +T 14 00 00 00 0A 00 00 00 DD 7E 0C DD B6 0D 28 +R 00 00 01 00 00 04 03 00 +T 1D 00 00 00 22 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 2A 0E 00 00 00 ED 4B 10 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 25 00 00 00 CD 00 00 00 00 22 0E 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 2C 00 00 00 43 10 00 00 00 DD 5E 0A DD 56 0B +R 00 00 01 00 00 05 03 00 +T 35 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T 3B 00 00 00 00 00 00 00 C3 E8 04 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 16 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 4B 00 00 00 16 00 21 08 00 09 46 23 66 68 A7 +R 00 00 01 00 +T 56 00 00 00 ED 52 01 EC FF 09 DD 75 FD DD 74 +R 00 00 01 00 +T 61 00 00 00 FE E5 DD 6E 0A DD 66 0B 4E 23 46 +R 00 00 01 00 +T 6C 00 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 13 00 +T 72 00 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 13 00 02 09 01 00 +T 79 00 00 00 B4 28 22 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 2A 0E 00 00 00 ED 4B 10 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 83 00 00 00 CD 00 00 00 00 22 0E 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 8A 00 00 00 43 10 00 00 00 DD 5E 0A DD 56 0B +R 00 00 01 00 00 05 03 00 +T 93 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T 99 00 00 00 00 00 00 00 C3 E8 04 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 DD 4E 0A DD 46 0B 21 02 00 39 5D +R 00 00 01 00 +T A9 00 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T AF 00 00 00 CD 00 00 00 00 DD 4E B6 06 00 DD +R 00 00 01 00 02 05 01 00 +T B8 00 00 00 71 FB DD 70 FC 59 50 CD +R 00 00 01 00 +T C0 00 00 00 00 00 00 00 00 00 14 00 +R 00 00 01 00 02 04 02 00 +T C6 00 00 00 DA 04 00 00 65 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T CA 00 00 00 DA 04 00 00 DA 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T CE 00 00 00 F0 00 00 00 F0 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T D2 00 00 00 96 03 00 00 DA 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T D6 00 00 00 DA 04 00 00 07 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T DA 00 00 00 DA 04 00 00 DA 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T DE 00 00 00 F0 00 00 00 52 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T E2 00 00 00 B0 04 00 00 C3 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T E6 00 00 00 D6 04 00 00 D8 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T EA 00 00 00 DA 04 00 00 DA 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T EE 00 00 00 F0 00 00 00 +R 00 00 01 00 00 04 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 4E FB DD 46 FC 3E 0B A9 B0 20 +R 00 00 01 00 +T FB 00 00 00 13 +R 00 00 01 00 +T FC 00 00 00 +R 00 00 01 00 +T FC 00 00 00 2A 1A 00 00 00 ED 4B 1C 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 03 01 00 00 CD 00 00 00 00 22 1A 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 0A 01 00 00 43 1C 00 00 00 18 32 +R 00 00 01 00 00 05 03 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 3E 03 A9 B0 20 13 2A 14 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 18 01 00 00 ED 4B 16 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 08 00 +T 1F 01 00 00 22 14 00 00 00 ED 43 16 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 26 01 00 00 18 19 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 3E 04 A9 B0 20 13 2A 26 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 31 01 00 00 ED 4B 28 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 08 00 +T 38 01 00 00 22 26 00 00 00 ED 43 28 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 3F 01 00 00 18 00 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 DD 4E 0A DD 46 0B 21 08 00 39 5D +R 00 00 01 00 +T 4C 01 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 52 01 00 00 CD 00 00 00 00 2A 00 00 00 00 7D +R 00 00 01 00 02 05 01 00 02 0A 1C 00 +T 59 01 00 00 B4 CA 73 02 00 00 +R 00 00 01 00 00 06 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 DD 6E 04 DD 66 05 5E 23 56 23 4E +R 00 00 01 00 +T 68 01 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T 6D 01 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 74 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 07 00 02 0A 07 00 +T 7A 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 19 00 02 0A 19 00 +T 80 01 00 00 00 00 00 00 F1 F1 F1 DD 6E FB DD +R 00 00 01 00 02 04 01 00 +T 89 01 00 00 66 FC E5 01 14 00 11 00 00 00 00 +R 00 00 01 00 02 0B 1F 00 +T 92 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1E 00 02 0A 1E 00 +T 98 01 00 00 00 00 00 00 F1 E5 21 0E 00 39 5E +R 00 00 01 00 02 04 01 00 +T A1 01 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T A9 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T B0 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0D 00 02 0B 0D 00 +T B6 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 19 00 02 0B 19 00 +T BC 01 00 00 CD 00 00 00 00 F1 F1 F1 F1 DD 4E +R 00 00 01 00 02 05 01 00 +T C5 01 00 00 FB DD 46 FC 3E 0B A9 B0 20 2A +R 00 00 01 00 +T CF 01 00 00 +R 00 00 01 00 +T CF 01 00 00 DD 4E B7 06 00 C5 01 02 00 11 +R 00 00 01 00 +T D9 01 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 2B 09 1E 00 +T DE 01 00 00 00 00 00 00 CD 00 00 00 00 F1 E5 +R 00 00 01 00 02 04 1E 00 02 09 01 00 +T E5 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 16 00 02 0B 16 00 +T EB 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 19 00 02 0B 19 00 +T F1 01 00 00 CD 00 00 00 00 F1 F1 F1 18 7A +R 00 00 01 00 02 05 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 3E 03 A9 B0 20 2A DD 4E B7 06 00 +R 00 00 01 00 +T 04 02 00 00 C5 01 0E 00 11 00 00 00 00 3E +R 00 00 01 00 02 09 03 00 +T 0C 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1E 00 02 09 1E 00 +T 11 02 00 00 00 00 00 00 F1 E5 0E 00 00 00 00 +R 00 00 01 00 02 04 01 00 2B 0B 16 00 +T 17 02 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 16 00 +T 1D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T 22 02 00 00 00 00 00 00 F1 F1 F1 18 4A +R 00 00 01 00 02 04 01 00 +T 29 02 00 00 +R 00 00 01 00 +T 29 02 00 00 3E 13 A9 B0 20 2A DD 4E B7 06 00 +R 00 00 01 00 +T 34 02 00 00 C5 01 03 00 11 00 00 00 00 3E +R 00 00 01 00 02 09 04 00 +T 3C 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1E 00 02 09 1E 00 +T 41 02 00 00 00 00 00 00 F1 E5 0E 00 00 00 00 +R 00 00 01 00 02 04 01 00 2B 0B 16 00 +T 47 02 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 16 00 +T 4D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T 52 02 00 00 00 00 00 00 F1 F1 F1 18 1A +R 00 00 01 00 02 04 01 00 +T 59 02 00 00 +R 00 00 01 00 +T 59 02 00 00 DD 4E B7 06 00 C5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 14 00 +T 61 02 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 14 00 +T 67 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T 6C 02 00 00 00 00 00 00 F1 F1 F1 18 00 +R 00 00 01 00 02 04 01 00 +T 73 02 00 00 +R 00 00 01 00 +T 73 02 00 00 +R 00 00 01 00 +T 73 02 00 00 DD 36 B4 00 00 00 00 DD 36 B5 +R 00 00 01 00 0B 07 1B 00 +T 7A 02 00 00 00 00 00 00 +R 00 00 01 00 8B 04 1B 00 +T 7B 02 00 00 +R 00 00 01 00 +T 7B 02 00 00 DD 6E B4 DD 66 B5 23 7E 23 B6 23 +R 00 00 01 00 +T 86 02 00 00 B6 28 1D +R 00 00 01 00 +T 89 02 00 00 +R 00 00 01 00 +T 89 02 00 00 DD 6E B4 DD 66 B5 7E DD BE D1 20 +R 00 00 01 00 +T 94 02 00 00 02 +R 00 00 01 00 +T 95 02 00 00 +R 00 00 01 00 +T 95 02 00 00 18 0F +R 00 00 01 00 +T 97 02 00 00 +R 00 00 01 00 +T 97 02 00 00 DD 7E B4 C6 04 DD 77 B4 30 03 DD +R 00 00 01 00 +T A2 02 00 00 34 B5 +R 00 00 01 00 +T A4 02 00 00 +R 00 00 01 00 +T A4 02 00 00 18 D5 +R 00 00 01 00 +T A6 02 00 00 +R 00 00 01 00 +T A6 02 00 00 DD 6E B4 DD 66 B5 23 7E 23 B6 23 +R 00 00 01 00 +T B1 02 00 00 B6 28 50 +R 00 00 01 00 +T B4 02 00 00 +R 00 00 01 00 +T B4 02 00 00 DD 6E 0A DD 66 0B E5 DD 6E B7 E5 +R 00 00 01 00 +T BF 02 00 00 DD 6E B6 E5 DD 6E C2 DD 66 C3 E5 +R 00 00 01 00 +T CA 02 00 00 DD 6E C0 DD 66 C1 E5 DD 6E BE DD +R 00 00 01 00 +T D5 02 00 00 66 BF E5 DD 6E BC DD 66 BD E5 DD +R 00 00 01 00 +T E0 02 00 00 6E 04 DD 66 05 5E 23 56 23 4E 23 +R 00 00 01 00 +T EB 02 00 00 46 C5 DD 6E B4 DD 66 B5 23 4E 23 +R 00 00 01 00 +T F6 02 00 00 46 23 7E 69 60 C1 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T FF 02 00 00 21 0E 00 39 F9 +R 00 00 01 00 +T 04 03 00 00 +R 00 00 01 00 +T 04 03 00 00 C3 DA 04 00 00 +R 00 00 01 00 00 05 01 00 +T 07 03 00 00 +R 00 00 01 00 +T 07 03 00 00 2A 32 00 00 00 ED 4B 34 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 0E 03 00 00 CD 00 00 00 00 22 32 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 15 03 00 00 43 34 00 00 00 DD 36 B6 00 DD 4E +R 00 00 01 00 00 05 03 00 +T 1E 03 00 00 0A DD 46 0B 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 29 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 2E 03 00 00 00 00 00 00 2A 86 00 00 00 ED 4B +R 00 00 01 00 02 04 01 00 00 09 03 00 +T 35 03 00 00 88 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 03 00 02 09 08 00 +T 3B 03 00 00 86 00 00 00 ED 43 88 00 00 00 0E +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 42 03 00 00 00 C5 21 00 00 E5 DD 6E FD DD 66 +R 00 00 01 00 +T 4D 03 00 00 FE E5 DD 6E 0A DD 66 0B E5 0E 00 +R 00 00 01 00 +T 58 03 00 00 C5 21 13 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T 63 03 00 00 5E D5 1E 01 D5 69 60 4E 23 46 23 +R 00 00 01 00 +T 6E 03 00 00 5E 23 56 D5 C5 21 04 00 DD 4E 04 +R 00 00 01 00 +T 79 03 00 00 DD 46 05 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 84 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 11 00 02 0A 11 00 +T 8A 03 00 00 00 00 00 00 EB 21 12 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T 93 03 00 00 C3 E8 04 00 00 +R 00 00 01 00 00 05 01 00 +T 96 03 00 00 +R 00 00 01 00 +T 96 03 00 00 2A 2C 00 00 00 ED 4B 2E 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 9D 03 00 00 CD 00 00 00 00 22 2C 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T A4 03 00 00 43 2E 00 00 00 DD 4E 0A DD 46 0B +R 00 00 01 00 00 05 03 00 +T AD 03 00 00 21 08 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T B5 03 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T BC 03 00 00 00 00 00 00 7D B4 CA 4F 04 00 00 +R 00 00 01 00 02 04 1C 00 00 0B 01 00 +T C3 03 00 00 +R 00 00 01 00 +T C3 03 00 00 DD 6E 04 DD 66 05 5E 23 56 23 4E +R 00 00 01 00 +T CE 03 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T D3 03 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 00 00 02 09 01 00 +T DA 03 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 07 00 02 0A 07 00 +T E0 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 19 00 02 0A 19 00 +T E6 03 00 00 00 00 00 00 F1 F1 F1 DD 6E FB DD +R 00 00 01 00 02 04 01 00 +T EF 03 00 00 66 FC E5 01 14 00 11 00 00 00 00 +R 00 00 01 00 02 0B 1F 00 +T F8 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1E 00 02 0A 1E 00 +T FE 03 00 00 00 00 00 00 F1 E5 21 0E 00 39 5E +R 00 00 01 00 02 04 01 00 +T 07 04 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 0F 04 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 16 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0D 00 02 0B 0D 00 +T 1C 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 19 00 02 0B 19 00 +T 22 04 00 00 CD 00 00 00 00 F1 F1 F1 F1 21 +R 00 00 01 00 02 05 01 00 +T 2A 04 00 00 04 00 39 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 35 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 3A 04 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 01 00 2B 0A 0F 00 +T 40 04 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 0F 00 2B 0B 19 00 +T 46 04 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 19 00 02 0A 01 00 +T 4D 04 00 00 F1 F1 +R 00 00 01 00 +T 4F 04 00 00 +R 00 00 01 00 +T 4F 04 00 00 C3 DA 04 00 00 +R 00 00 01 00 00 05 01 00 +T 52 04 00 00 +R 00 00 01 00 +T 52 04 00 00 2A 20 00 00 00 ED 4B 22 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 59 04 00 00 CD 00 00 00 00 22 20 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 60 04 00 00 43 22 00 00 00 18 75 +R 00 00 01 00 00 05 03 00 +T 65 04 00 00 +R 00 00 01 00 +T 65 04 00 00 2A 38 00 00 00 ED 4B 3A 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 6C 04 00 00 CD 00 00 00 00 22 38 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 73 04 00 00 43 3A 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 00 05 03 00 +T 7C 04 00 00 E5 21 04 00 39 E5 21 04 00 DD 4E +R 00 00 01 00 +T 87 04 00 00 04 DD 46 05 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 92 04 00 00 46 C5 D5 DD 6E 04 DD 66 05 5E 23 +R 00 00 01 00 +T 9D 04 00 00 56 23 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 18 00 +T A5 04 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T AC 04 00 00 E1 E1 18 2A +R 00 00 01 00 +T B0 04 00 00 +R 00 00 01 00 +T B0 04 00 00 2A 3E 00 00 00 ED 4B 40 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T B7 04 00 00 CD 00 00 00 00 22 3E 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T BE 04 00 00 43 40 00 00 00 18 17 +R 00 00 01 00 00 05 03 00 +T C3 04 00 00 +R 00 00 01 00 +T C3 04 00 00 2A 44 00 00 00 ED 4B 46 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T CA 04 00 00 CD 00 00 00 00 22 44 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T D1 04 00 00 43 46 00 00 00 18 04 +R 00 00 01 00 00 05 03 00 +T D6 04 00 00 +R 00 00 01 00 +T D6 04 00 00 18 02 +R 00 00 01 00 +T D8 04 00 00 +R 00 00 01 00 +T D8 04 00 00 18 00 +R 00 00 01 00 +T DA 04 00 00 +R 00 00 01 00 +T DA 04 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 17 00 +T E2 04 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 17 00 02 0A 01 00 +T E8 04 00 00 +R 00 00 01 00 +T E8 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T EB 04 00 00 +R 00 00 01 00 +T EB 04 00 00 CD 00 00 00 00 F4 FF DD 7E 02 DD +R 00 00 01 00 02 05 15 00 +T F4 04 00 00 B6 03 20 06 +R 00 00 01 00 +T F8 04 00 00 +R 00 00 01 00 +T F8 04 00 00 21 FF FF C3 B7 07 00 00 +R 00 00 01 00 00 08 01 00 +T FE 04 00 00 +R 00 00 01 00 +T FE 04 00 00 21 15 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 09 05 00 00 05 20 27 +R 00 00 01 00 +T 0C 05 00 00 +R 00 00 01 00 +T 0C 05 00 00 21 0A 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 17 05 00 00 23 66 6F 7E FE 00 28 0C FE 08 28 +R 00 00 01 00 +T 22 05 00 00 08 FE 0D 38 06 FE 11 30 02 +R 00 00 01 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 18 06 +R 00 00 01 00 +T 2D 05 00 00 +R 00 00 01 00 +T 2D 05 00 00 21 FF FF C3 B7 07 00 00 +R 00 00 01 00 00 08 01 00 +T 33 05 00 00 +R 00 00 01 00 +T 33 05 00 00 +R 00 00 01 00 +T 33 05 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 3B 05 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T 42 05 00 00 44 21 08 00 A7 ED 42 30 05 21 +R 00 00 01 00 +T 4C 05 00 00 08 00 18 0E +R 00 00 01 00 +T 50 05 00 00 +R 00 00 01 00 +T 50 05 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 58 05 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T 5E 05 00 00 +R 00 00 01 00 +T 5E 05 00 00 DD 75 FC DD 74 FD E5 21 16 00 DD +R 00 00 01 00 +T 69 05 00 00 4E 02 DD 46 03 09 4E 06 00 E1 09 +R 00 00 01 00 +T 74 05 00 00 01 1C 00 09 DD 75 FE DD 74 FF DD +R 00 00 01 00 +T 7F 05 00 00 7E 04 DD B6 05 28 2B DD 6E FC DD +R 00 00 01 00 +T 8A 05 00 00 66 FD E5 21 00 00 E5 DD 4E 04 DD +R 00 00 01 00 +T 95 05 00 00 46 05 21 04 00 39 5D 54 3E +R 00 00 01 00 +T 9E 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T A3 05 00 00 00 00 00 00 F1 F1 7D B4 20 06 +R 00 00 01 00 02 04 01 00 +T AB 05 00 00 +R 00 00 01 00 +T AB 05 00 00 +R 00 00 01 00 +T AB 05 00 00 +R 00 00 01 00 +T AB 05 00 00 21 FF FF C3 B7 07 00 00 +R 00 00 01 00 00 08 01 00 +T B1 05 00 00 +R 00 00 01 00 +T B1 05 00 00 21 00 00 E5 21 02 00 39 4D 44 DD +R 00 00 01 00 +T BC 05 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T C4 05 00 00 00 00 00 00 CD 00 00 00 00 E1 DD +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T CB 05 00 00 46 0A DD 70 F6 DD 46 0C DD 70 F7 +R 00 00 01 00 +T D6 05 00 00 AF DD 77 F8 DD 77 F9 DD 77 FA DD +R 00 00 01 00 +T E1 05 00 00 77 FB DD 5E F6 CD 00 00 00 00 +R 00 00 01 00 02 0A 1D 00 +T E9 05 00 00 0D 00 00 03 04 05 08 0B 0C 0D 0E +R 00 00 01 00 +T F4 05 00 00 0F 10 11 12 4D 07 00 00 +R 00 00 01 00 00 08 01 00 +T FA 05 00 00 EA 06 00 00 D7 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T FE 05 00 00 8B 06 00 00 88 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 02 06 00 00 A2 06 00 00 8E 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 06 06 00 00 14 06 00 00 27 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 0A 06 00 00 60 06 00 00 32 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 0E 06 00 00 3A 07 00 00 FD 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 12 06 00 00 74 06 00 00 +R 00 00 01 00 00 04 01 00 +T 14 06 00 00 +R 00 00 01 00 +T 14 06 00 00 2A 6E 00 00 00 ED 4B 70 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 1B 06 00 00 CD 00 00 00 00 22 6E 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 22 06 00 00 43 70 00 00 00 DD 6E 0E DD 66 0F +R 00 00 01 00 00 05 03 00 +T 2B 06 00 00 46 DD 70 F8 C3 4D 07 00 00 +R 00 00 01 00 00 09 01 00 +T 32 06 00 00 +R 00 00 01 00 +T 32 06 00 00 2A 7A 00 00 00 ED 4B 7C 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 39 06 00 00 CD 00 00 00 00 22 7A 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 40 06 00 00 43 7C 00 00 00 DD 6E 0E DD 66 0F +R 00 00 01 00 00 05 03 00 +T 49 06 00 00 5E 23 56 23 4E 23 46 EB DD 75 F8 +R 00 00 01 00 +T 54 06 00 00 DD 74 F9 DD 71 FA DD 70 FB C3 +R 00 00 01 00 +T 5E 06 00 00 4D 07 00 00 +R 00 00 01 00 00 04 01 00 +T 60 06 00 00 +R 00 00 01 00 +T 60 06 00 00 2A 80 00 00 00 ED 4B 82 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 67 06 00 00 CD 00 00 00 00 22 80 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 6E 06 00 00 43 82 00 00 00 C3 4D 07 00 00 +R 00 00 01 00 00 05 03 00 00 0A 01 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 2A 86 00 00 00 ED 4B 88 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 7B 06 00 00 CD 00 00 00 00 22 86 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 82 06 00 00 43 88 00 00 00 C3 4D 07 00 00 +R 00 00 01 00 00 05 03 00 00 0A 01 00 +T 88 06 00 00 +R 00 00 01 00 +T 88 06 00 00 C3 4D 07 00 00 +R 00 00 01 00 00 05 01 00 +T 8B 06 00 00 +R 00 00 01 00 +T 8B 06 00 00 C3 4D 07 00 00 +R 00 00 01 00 00 05 01 00 +T 8E 06 00 00 +R 00 00 01 00 +T 8E 06 00 00 2A 8C 00 00 00 ED 4B 8E 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 95 06 00 00 CD 00 00 00 00 22 8C 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 9C 06 00 00 43 8E 00 00 00 C3 4D 07 00 00 +R 00 00 01 00 00 05 03 00 00 0A 01 00 +T A2 06 00 00 +R 00 00 01 00 +T A2 06 00 00 2A 92 00 00 00 ED 4B 94 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T A9 06 00 00 CD 00 00 00 00 22 92 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T B0 06 00 00 43 94 00 00 00 DD 6E 0E DD 66 0F +R 00 00 01 00 00 05 03 00 +T B9 06 00 00 46 23 66 68 DD 75 F8 DD 74 F9 DD +R 00 00 01 00 +T C4 06 00 00 6E 0E DD 66 0F 23 23 46 23 66 68 +R 00 00 01 00 +T CF 06 00 00 DD 75 FA DD 74 FB 18 76 +R 00 00 01 00 +T D7 06 00 00 +R 00 00 01 00 +T D7 06 00 00 2A 98 00 00 00 ED 4B 9A 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T DE 06 00 00 CD 00 00 00 00 22 98 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T E5 06 00 00 43 9A 00 00 00 18 63 +R 00 00 01 00 00 05 03 00 +T EA 06 00 00 +R 00 00 01 00 +T EA 06 00 00 2A 9E 00 00 00 ED 4B A0 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T F1 06 00 00 CD 00 00 00 00 22 9E 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T F8 06 00 00 43 A0 00 00 00 18 50 +R 00 00 01 00 00 05 03 00 +T FD 06 00 00 +R 00 00 01 00 +T FD 06 00 00 DD 7E F7 FE 04 20 10 +R 00 00 01 00 +T 04 07 00 00 +R 00 00 01 00 +T 04 07 00 00 DD 6E 0E DD 66 0F 46 23 66 68 DD +R 00 00 01 00 +T 0F 07 00 00 75 F8 DD 74 F9 +R 00 00 01 00 +T 14 07 00 00 +R 00 00 01 00 +T 14 07 00 00 2A 62 00 00 00 ED 4B 64 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 1B 07 00 00 CD 00 00 00 00 22 62 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 22 07 00 00 43 64 00 00 00 18 26 +R 00 00 01 00 00 05 03 00 +T 27 07 00 00 +R 00 00 01 00 +T 27 07 00 00 2A 68 00 00 00 ED 4B 6A 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 2E 07 00 00 CD 00 00 00 00 22 68 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 35 07 00 00 43 6A 00 00 00 18 13 +R 00 00 01 00 00 05 03 00 +T 3A 07 00 00 +R 00 00 01 00 +T 3A 07 00 00 2A 74 00 00 00 ED 4B 76 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 41 07 00 00 CD 00 00 00 00 22 74 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 48 07 00 00 43 76 00 00 00 18 00 +R 00 00 01 00 00 05 03 00 +T 4D 07 00 00 +R 00 00 01 00 +T 4D 07 00 00 2A 56 00 00 00 ED 4B 58 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 54 07 00 00 CD 00 00 00 00 22 56 00 00 00 ED +R 00 00 01 00 02 05 08 00 00 0A 03 00 +T 5B 07 00 00 43 58 00 00 00 21 00 00 39 4D 44 +R 00 00 01 00 00 05 03 00 +T 64 07 00 00 21 02 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T 6C 07 00 00 21 00 00 00 00 CD 00 00 00 00 0E +R 00 00 01 00 02 05 12 00 02 0A 01 00 +T 73 07 00 00 00 C5 21 00 00 E5 DD 6E FE DD 66 +R 00 00 01 00 +T 7E 07 00 00 FF E5 21 06 00 39 E5 0E 00 C5 21 +R 00 00 01 00 +T 89 07 00 00 13 00 DD 4E 02 DD 46 03 09 5E D5 +R 00 00 01 00 +T 94 07 00 00 1E 01 D5 69 60 4E 23 46 23 5E 23 +R 00 00 01 00 +T 9F 07 00 00 56 D5 C5 01 00 00 11 00 00 3E +R 00 00 01 00 +T A9 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T AE 07 00 00 00 00 00 00 EB 21 12 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T B7 07 00 00 +R 00 00 01 00 +T B7 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 +T 01 00 00 00 +R 00 00 02 00 +T 01 00 00 00 69 63 6D 70 49 6E 4D 73 67 73 00 +R 00 00 02 00 +T 0C 00 00 00 +R 00 00 02 00 +T 0C 00 00 00 69 63 6D 70 49 6E 45 72 72 6F 72 +R 00 00 02 00 +T 17 00 00 00 73 00 +R 00 00 02 00 +T 19 00 00 00 +R 00 00 02 00 +T 19 00 00 00 69 63 6D 70 49 6E 44 65 73 74 55 +R 00 00 02 00 +T 24 00 00 00 6E 72 65 61 63 68 73 00 +R 00 00 02 00 +T 2C 00 00 00 +R 00 00 02 00 +T 2C 00 00 00 69 63 6D 70 49 6E 54 69 6D 65 45 +R 00 00 02 00 +T 37 00 00 00 78 63 64 73 00 +R 00 00 02 00 +T 3C 00 00 00 +R 00 00 02 00 +T 3C 00 00 00 69 63 6D 70 49 6E 50 61 72 6D 50 +R 00 00 02 00 +T 47 00 00 00 72 6F 62 73 00 +R 00 00 02 00 +T 4C 00 00 00 +R 00 00 02 00 +T 4C 00 00 00 69 63 6D 70 49 6E 53 72 63 51 75 +R 00 00 02 00 +T 57 00 00 00 65 6E 63 68 73 00 +R 00 00 02 00 +T 5D 00 00 00 +R 00 00 02 00 +T 5D 00 00 00 69 63 6D 70 49 6E 52 65 64 69 72 +R 00 00 02 00 +T 68 00 00 00 65 63 74 73 00 +R 00 00 02 00 +T 6D 00 00 00 +R 00 00 02 00 +T 6D 00 00 00 69 63 6D 70 49 6E 45 63 68 6F 73 +R 00 00 02 00 +T 78 00 00 00 00 +R 00 00 02 00 +T 79 00 00 00 +R 00 00 02 00 +T 79 00 00 00 69 63 6D 70 49 6E 45 63 68 6F 52 +R 00 00 02 00 +T 84 00 00 00 65 70 73 00 +R 00 00 02 00 +T 88 00 00 00 +R 00 00 02 00 +T 88 00 00 00 69 63 6D 70 49 6E 54 69 6D 65 73 +R 00 00 02 00 +T 93 00 00 00 74 61 6D 70 73 00 +R 00 00 02 00 +T 99 00 00 00 +R 00 00 02 00 +T 99 00 00 00 69 63 6D 70 49 6E 54 69 6D 65 73 +R 00 00 02 00 +T A4 00 00 00 74 61 6D 70 52 65 70 73 00 +R 00 00 02 00 +T AD 00 00 00 +R 00 00 02 00 +T AD 00 00 00 69 63 6D 70 49 6E 41 64 64 72 4D +R 00 00 02 00 +T B8 00 00 00 61 73 6B 73 00 +R 00 00 02 00 +T BD 00 00 00 +R 00 00 02 00 +T BD 00 00 00 69 63 6D 70 49 6E 41 64 64 72 4D +R 00 00 02 00 +T C8 00 00 00 61 73 6B 52 65 70 73 00 +R 00 00 02 00 +T D0 00 00 00 +R 00 00 02 00 +T D0 00 00 00 69 63 6D 70 4F 75 74 4D 73 67 73 +R 00 00 02 00 +T DB 00 00 00 00 +R 00 00 02 00 +T DC 00 00 00 +R 00 00 02 00 +T DC 00 00 00 69 63 6D 70 4F 75 74 45 72 72 6F +R 00 00 02 00 +T E7 00 00 00 72 73 00 +R 00 00 02 00 +T EA 00 00 00 +R 00 00 02 00 +T EA 00 00 00 69 63 6D 70 4F 75 74 44 65 73 74 +R 00 00 02 00 +T F5 00 00 00 55 6E 72 65 61 63 68 73 00 +R 00 00 02 00 +T FE 00 00 00 +R 00 00 02 00 +T FE 00 00 00 69 63 6D 70 4F 75 74 54 69 6D 65 +R 00 00 02 00 +T 09 01 00 00 45 78 63 64 73 00 +R 00 00 02 00 +T 0F 01 00 00 +R 00 00 02 00 +T 0F 01 00 00 69 63 6D 70 4F 75 74 50 61 72 6D +R 00 00 02 00 +T 1A 01 00 00 50 72 6F 62 73 00 +R 00 00 02 00 +T 20 01 00 00 +R 00 00 02 00 +T 20 01 00 00 69 63 6D 70 4F 75 74 53 72 63 51 +R 00 00 02 00 +T 2B 01 00 00 75 65 6E 63 68 73 00 +R 00 00 02 00 +T 32 01 00 00 +R 00 00 02 00 +T 32 01 00 00 69 63 6D 70 4F 75 74 52 65 64 69 +R 00 00 02 00 +T 3D 01 00 00 72 65 63 74 73 00 +R 00 00 02 00 +T 43 01 00 00 +R 00 00 02 00 +T 43 01 00 00 69 63 6D 70 4F 75 74 45 63 68 6F +R 00 00 02 00 +T 4E 01 00 00 73 00 +R 00 00 02 00 +T 50 01 00 00 +R 00 00 02 00 +T 50 01 00 00 69 63 6D 70 4F 75 74 45 63 68 6F +R 00 00 02 00 +T 5B 01 00 00 52 65 70 73 00 +R 00 00 02 00 +T 60 01 00 00 +R 00 00 02 00 +T 60 01 00 00 69 63 6D 70 4F 75 74 54 69 6D 65 +R 00 00 02 00 +T 6B 01 00 00 73 74 61 6D 70 73 00 +R 00 00 02 00 +T 72 01 00 00 +R 00 00 02 00 +T 72 01 00 00 69 63 6D 70 4F 75 74 54 69 6D 65 +R 00 00 02 00 +T 7D 01 00 00 73 74 61 6D 70 52 65 70 73 00 +R 00 00 02 00 +T 87 01 00 00 +R 00 00 02 00 +T 87 01 00 00 69 63 6D 70 4F 75 74 41 64 64 72 +R 00 00 02 00 +T 92 01 00 00 4D 61 73 6B 73 00 +R 00 00 02 00 +T 98 01 00 00 +R 00 00 02 00 +T 98 01 00 00 69 63 6D 70 4F 75 74 41 64 64 72 +R 00 00 02 00 +T A3 01 00 00 4D 61 73 6B 52 65 70 73 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 06 00 00 00 01 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 0C 00 00 00 0C 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 12 00 00 00 19 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 18 00 00 00 2C 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 1E 00 00 00 3C 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 24 00 00 00 4C 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 2A 00 00 00 5D 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 30 00 00 00 6D 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 36 00 00 00 79 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 3C 00 00 00 88 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 42 00 00 00 99 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 48 00 00 00 AD 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 4E 00 00 00 BD 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 54 00 00 00 D0 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 5A 00 00 00 DC 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 60 00 00 00 EA 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 66 00 00 00 FE 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 6C 00 00 00 0F 01 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 72 00 00 00 20 01 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 78 00 00 00 32 01 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 7E 00 00 00 43 01 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 84 00 00 00 50 01 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 8A 00 00 00 60 01 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 90 00 00 00 72 01 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 96 00 00 00 87 01 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 9C 00 00 00 98 01 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 diff --git a/src/nos/lib/internet_lib/icmpcmd.rel b/src/nos/lib/internet_lib/icmpcmd.rel new file mode 100644 index 00000000..11a5f6cb --- /dev/null +++ b/src/nos/lib/internet_lib/icmpcmd.rel @@ -0,0 +1,151 @@ +XL4 +H 5 areas 16 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0591_5069_status Ref00000000 +S ___0473_2edf_echo Ref00000000 +S ___028b_df4f_ICMP_20echo_20respo Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___028d_abbc_ICMP_20tracing Ref00000000 +S .__.ABS. Def00000000 +S _Icmp_mib Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___05bd_4f5f_trace Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ___017a_ba4c__28_252u_29_25_2d20 Ref00000000 +S ___0048_0e60__20_20_20_20_20_28_ Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setbool Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13B flags 0 +S _doicmp Def00000000 +A UDATA0 size 2 flags 0 +S _Icmp_trace Def00000000 +A IDATA0 size 36 flags 0 +S _Icmp_echo Def00000034 +A CDATA0 size 36 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 E5 C5 4B 42 11 00 00 00 00 3E +R 00 00 01 00 00 09 03 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 16 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0B 04 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 CD 00 00 00 00 FC FF DD 36 FE 0D +R 00 00 01 00 02 05 0A 00 +T 26 00 00 00 DD 36 FF 00 DD 36 FC 01 DD 36 FD +R 00 00 01 00 +T 31 00 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 DD 4E FC DD 46 FD DD 6E FE DD 66 +R 00 00 01 00 +T 3D 00 00 00 FF CD 00 00 00 00 DA F9 00 00 00 +R 00 00 01 00 02 06 0E 00 00 0B 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 01 06 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 4E 00 00 00 00 00 00 00 21 02 00 00 00 19 4E +R 00 00 01 00 02 04 0B 00 02 09 07 00 +T 55 00 00 00 23 46 23 5E 23 56 D5 C5 01 06 00 +R 00 00 01 00 +T 60 00 00 00 DD 5E FC DD 56 FD CD 00 00 00 00 +R 00 00 01 00 02 0B 0B 00 +T 69 00 00 00 21 00 00 00 00 19 4E 23 46 C5 DD +R 00 00 01 00 02 05 07 00 +T 72 00 00 00 6E FC DD 66 FD E5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 7A 00 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 0C 00 +T 80 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 85 00 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T 8E 00 00 00 DD 6E FE DD 66 FF DD 4E FC DD 46 +R 00 00 01 00 +T 99 00 00 00 FD 09 EB 01 06 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0B 00 +T A2 00 00 00 21 02 00 00 00 19 4E 23 46 23 5E +R 00 00 01 00 02 05 07 00 +T AB 00 00 00 23 56 D5 C5 DD 6E FE DD 66 FF DD +R 00 00 01 00 +T B6 00 00 00 4E FC DD 46 FD 09 EB 01 06 00 CD +R 00 00 01 00 +T C1 00 00 00 00 00 00 00 21 00 00 00 00 19 4E +R 00 00 01 00 02 04 0B 00 02 09 07 00 +T C8 00 00 00 23 46 C5 DD 6E FE DD 66 FF DD 4E +R 00 00 01 00 +T D3 00 00 00 FC DD 46 FD 09 E5 1E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T DB 00 00 00 D5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 0D 00 +T E1 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T E6 00 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T EF 00 00 00 03 DD 71 FC DD 70 FD C3 +R 00 00 01 00 +T F7 00 00 00 32 00 00 00 +R 00 00 01 00 00 04 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 08 00 +T 05 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T 0B 01 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 11 00 +T 11 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 18 01 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 04 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 08 00 +T 23 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T 29 01 00 00 11 34 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 03 00 2B 0A 11 00 +T 2F 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 36 01 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 34 00 00 00 +R 00 00 03 00 +T 34 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 1D 01 00 00 00 00 +R 00 00 04 00 4A 04 02 00 48 08 01 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 09 01 00 +T 10 00 00 00 1D 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 48 04 01 00 +T 1A 00 00 00 00 00 00 00 FF 00 00 00 00 00 +R 00 00 04 00 4A 04 09 00 48 08 01 00 +T 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 2D 00 00 00 00 00 00 00 00 00 00 01 00 +R 00 00 04 00 diff --git a/src/nos/lib/internet_lib/icmphdr.rel b/src/nos/lib/internet_lib/icmphdr.rel new file mode 100644 index 00000000..8318a8fa --- /dev/null +++ b/src/nos/lib/internet_lib/icmphdr.rel @@ -0,0 +1,279 @@ +XL4 +H 2 areas F global symbols +S _put16 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _cksum Ref00000000 +S _get32 Ref00000000 +S _get16 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pushdown Ref00000000 +S _put32 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 348 flags 0 +S _ntohicmp Def0000022D +S _htonicmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 08 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 18 00 00 00 00 00 00 00 E1 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 01 00 +T 21 00 00 00 46 23 66 68 01 0A 00 09 46 23 66 +R 00 00 01 00 +T 2C 00 00 00 68 DD 75 FC DD 74 FD DD 6E 02 DD +R 00 00 01 00 +T 37 00 00 00 66 03 46 DD 6E FC DD 66 FD 23 DD +R 00 00 01 00 +T 42 00 00 00 75 FC DD 74 FD 2B 70 DD 6E 02 DD +R 00 00 01 00 +T 4D 00 00 00 66 03 23 46 DD 6E FC DD 66 FD 23 +R 00 00 01 00 +T 58 00 00 00 DD 75 FC DD 74 FD 2B 70 01 00 00 +R 00 00 01 00 +T 63 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 6B 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 72 00 00 00 75 FC DD 74 FD DD 6E 02 DD 66 03 +R 00 00 01 00 +T 7D 00 00 00 7E FE 03 20 67 +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 6E 02 DD 66 03 23 7E FE 04 20 +R 00 00 01 00 +T 8D 00 00 00 3A +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 01 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 98 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 9D 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 01 00 +T A6 00 00 00 4E 02 DD 46 03 03 03 69 60 4E 23 +R 00 00 01 00 +T B1 00 00 00 46 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T B9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T BE 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 18 +R 00 00 01 00 02 04 01 00 +T C7 00 00 00 1E +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 21 00 00 E5 21 00 00 E5 DD 5E FC +R 00 00 01 00 +T D3 00 00 00 DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T D9 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T E0 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 C3 CE 01 00 00 +R 00 00 01 00 00 05 01 00 +T E9 00 00 00 +R 00 00 01 00 +T E9 00 00 00 FE 0C 20 42 DD 6E 02 DD 66 03 23 +R 00 00 01 00 +T F4 00 00 00 23 46 DD 6E FC DD 66 FD 23 DD 75 +R 00 00 01 00 +T FF 00 00 00 FC DD 74 FD 2B 70 DD 6E FC DD 66 +R 00 00 01 00 +T 0A 01 00 00 FD 23 DD 75 FC DD 74 FD 2B 36 00 +R 00 00 01 00 +T 15 01 00 00 01 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 1F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 24 01 00 00 00 00 00 00 DD 75 FC DD 74 FD C3 +R 00 00 01 00 02 04 01 00 +T 2D 01 00 00 CE 01 00 00 +R 00 00 01 00 00 04 01 00 +T 2F 01 00 00 +R 00 00 01 00 +T 2F 01 00 00 FE 05 20 29 DD 6E 02 DD 66 03 23 +R 00 00 01 00 +T 3A 01 00 00 23 4E 23 46 23 5E 23 56 D5 C5 DD +R 00 00 01 00 +T 45 01 00 00 5E FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0C 00 +T 4D 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 54 01 00 00 DD 75 FC DD 74 FD 18 72 +R 00 00 01 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 FE 00 28 0C FE 08 28 08 FE 0D 38 +R 00 00 01 00 +T 67 01 00 00 46 FE 11 30 42 +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 77 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 7F 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 86 01 00 00 75 FC DD 74 FD 21 04 00 DD 4E 02 +R 00 00 01 00 +T 91 01 00 00 DD 46 03 09 4E 23 46 DD 5E FC DD +R 00 00 01 00 +T 9C 01 00 00 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T A1 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T A8 01 00 00 FC DD 74 FD 18 20 +R 00 00 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 21 00 00 E5 21 00 00 E5 DD 5E FC +R 00 00 01 00 +T B9 01 00 00 DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T BF 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T C6 01 00 00 DD 75 FC DD 74 FD 18 00 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 DD 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T D8 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T DD 01 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 01 00 +T E6 01 00 00 4E 23 46 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T EE 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T F5 01 00 00 DD 75 FE DD 74 FF DD 6E 04 DD 66 +R 00 00 01 00 +T 00 02 00 00 05 46 23 66 68 01 0A 00 09 46 23 +R 00 00 01 00 +T 0B 02 00 00 66 68 23 23 DD 75 FC DD 74 FD DD +R 00 00 01 00 +T 16 02 00 00 4E FE DD 46 FF EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 1E 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 25 02 00 00 75 FC DD 74 FD C3 00 00 00 00 +R 00 00 01 00 02 0A 03 00 +T 2D 02 00 00 +R 00 00 01 00 +T 2D 02 00 00 CD 00 00 00 00 F8 FF DD 7E 02 DD +R 00 00 01 00 02 05 09 00 +T 36 02 00 00 B6 03 20 06 +R 00 00 01 00 +T 3A 02 00 00 +R 00 00 01 00 +T 3A 02 00 00 21 FF FF C3 45 03 00 00 +R 00 00 01 00 00 08 01 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 21 08 00 E5 21 02 00 39 4D 44 DD +R 00 00 01 00 +T 4B 02 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 53 02 00 00 00 00 00 00 CD 00 00 00 00 F1 3E +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 5A 02 00 00 08 AD B4 28 06 +R 00 00 01 00 +T 5F 02 00 00 +R 00 00 01 00 +T 5F 02 00 00 21 FF FF C3 45 03 00 00 +R 00 00 01 00 00 08 01 00 +T 65 02 00 00 +R 00 00 01 00 +T 65 02 00 00 DD 46 F8 DD 6E 02 DD 66 03 70 DD +R 00 00 01 00 +T 70 02 00 00 6E 02 DD 66 03 23 DD 46 F9 70 DD +R 00 00 01 00 +T 7B 02 00 00 6E 02 DD 66 03 7E FE 03 20 2F +R 00 00 01 00 +T 85 02 00 00 +R 00 00 01 00 +T 85 02 00 00 DD 6E 02 DD 66 03 23 7E FE 04 20 +R 00 00 01 00 +T 90 02 00 00 20 +R 00 00 01 00 +T 91 02 00 00 +R 00 00 01 00 +T 91 02 00 00 DD 6E 02 DD 66 03 23 23 E5 21 +R 00 00 01 00 +T 9B 02 00 00 02 00 39 01 06 00 09 EB 3E +R 00 00 01 00 +T A4 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T A9 02 00 00 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 01 00 +T B1 02 00 00 +R 00 00 01 00 +T B1 02 00 00 C3 42 03 00 00 +R 00 00 01 00 00 05 01 00 +T B4 02 00 00 +R 00 00 01 00 +T B4 02 00 00 FE 0C 20 0E DD 6E 02 DD 66 03 23 +R 00 00 01 00 +T BF 02 00 00 23 DD 46 FC 70 18 7C +R 00 00 01 00 +T C6 02 00 00 +R 00 00 01 00 +T C6 02 00 00 FE 05 20 24 21 00 00 39 01 04 00 +R 00 00 01 00 +T D1 02 00 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T D6 02 00 00 00 00 00 00 CD 00 00 00 00 E5 DD +R 00 00 01 00 02 04 07 00 02 09 01 00 +T DD 02 00 00 6E 02 DD 66 03 23 23 D1 73 23 72 +R 00 00 01 00 +T E8 02 00 00 23 71 23 70 18 54 +R 00 00 01 00 +T EE 02 00 00 +R 00 00 01 00 +T EE 02 00 00 FE 00 28 0C FE 08 28 08 FE 0D 38 +R 00 00 01 00 +T F9 02 00 00 48 FE 11 30 44 +R 00 00 01 00 +T FE 02 00 00 +R 00 00 01 00 +T FE 02 00 00 DD 6E 02 DD 66 03 23 23 E5 21 +R 00 00 01 00 +T 08 03 00 00 02 00 39 01 04 00 09 EB 3E +R 00 00 01 00 +T 11 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 16 03 00 00 00 00 00 00 4D 44 E1 71 23 70 21 +R 00 00 01 00 02 04 01 00 +T 1F 03 00 00 04 00 DD 4E 02 DD 46 03 09 E5 21 +R 00 00 01 00 +T 2A 03 00 00 02 00 39 01 06 00 09 EB 3E +R 00 00 01 00 +T 33 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 38 03 00 00 00 00 00 00 4D 44 E1 71 23 70 18 +R 00 00 01 00 02 04 01 00 +T 41 03 00 00 00 +R 00 00 01 00 +T 42 03 00 00 +R 00 00 01 00 +T 42 03 00 00 21 00 00 +R 00 00 01 00 +T 45 03 00 00 +R 00 00 01 00 +T 45 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/internet_lib/icmpmsg.rel b/src/nos/lib/internet_lib/icmpmsg.rel new file mode 100644 index 00000000..3bc6e10e --- /dev/null +++ b/src/nos/lib/internet_lib/icmpmsg.rel @@ -0,0 +1,266 @@ +XL4 +H 5 areas 7 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size 201 flags 0 +A IDATA0 size 56 flags 0 +S _Unreach Def00000028 +S _Said_icmp Def00000050 +S _Exceed Def00000044 +S _Redirect Def00000048 +S _Icmptypes Def00000000 +A CDATA0 size 56 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 45 63 68 6F 20 52 65 70 6C 79 00 +R 00 00 02 00 +T 0B 00 00 00 +R 00 00 02 00 +T 0B 00 00 00 55 6E 72 65 61 63 68 61 62 6C 65 +R 00 00 02 00 +T 16 00 00 00 00 +R 00 00 02 00 +T 17 00 00 00 +R 00 00 02 00 +T 17 00 00 00 53 6F 75 72 63 65 20 51 75 65 6E +R 00 00 02 00 +T 22 00 00 00 63 68 00 +R 00 00 02 00 +T 25 00 00 00 +R 00 00 02 00 +T 25 00 00 00 52 65 64 69 72 65 63 74 00 +R 00 00 02 00 +T 2E 00 00 00 +R 00 00 02 00 +T 2E 00 00 00 45 63 68 6F 20 52 65 71 75 65 73 +R 00 00 02 00 +T 39 00 00 00 74 00 +R 00 00 02 00 +T 3B 00 00 00 +R 00 00 02 00 +T 3B 00 00 00 54 69 6D 65 20 45 78 63 65 65 64 +R 00 00 02 00 +T 46 00 00 00 65 64 00 +R 00 00 02 00 +T 49 00 00 00 +R 00 00 02 00 +T 49 00 00 00 50 61 72 61 6D 65 74 65 72 20 50 +R 00 00 02 00 +T 54 00 00 00 72 6F 62 6C 65 6D 00 +R 00 00 02 00 +T 5B 00 00 00 +R 00 00 02 00 +T 5B 00 00 00 54 69 6D 65 73 74 61 6D 70 00 +R 00 00 02 00 +T 65 00 00 00 +R 00 00 02 00 +T 65 00 00 00 54 69 6D 65 73 74 61 6D 70 20 52 +R 00 00 02 00 +T 70 00 00 00 65 70 6C 79 00 +R 00 00 02 00 +T 75 00 00 00 +R 00 00 02 00 +T 75 00 00 00 49 6E 66 6F 72 6D 61 74 69 6F 6E +R 00 00 02 00 +T 80 00 00 00 20 52 65 71 75 65 73 74 00 +R 00 00 02 00 +T 89 00 00 00 +R 00 00 02 00 +T 89 00 00 00 49 6E 66 6F 72 6D 61 74 69 6F 6E +R 00 00 02 00 +T 94 00 00 00 20 52 65 70 6C 79 00 +R 00 00 02 00 +T 9B 00 00 00 +R 00 00 02 00 +T 9B 00 00 00 41 64 64 72 65 73 73 20 6D 61 73 +R 00 00 02 00 +T A6 00 00 00 6B 20 72 65 71 75 65 73 74 00 +R 00 00 02 00 +T B0 00 00 00 +R 00 00 02 00 +T B0 00 00 00 41 64 64 72 65 73 73 20 6D 61 73 +R 00 00 02 00 +T BB 00 00 00 6B 20 72 65 70 6C 79 00 +R 00 00 02 00 +T C3 00 00 00 +R 00 00 02 00 +T C3 00 00 00 53 65 63 75 72 69 74 79 20 41 73 +R 00 00 02 00 +T CE 00 00 00 73 6F 63 69 61 74 69 6F 6E 00 +R 00 00 02 00 +T D8 00 00 00 +R 00 00 02 00 +T D8 00 00 00 4E 65 74 77 6F 72 6B 00 +R 00 00 02 00 +T E0 00 00 00 +R 00 00 02 00 +T E0 00 00 00 48 6F 73 74 00 +R 00 00 02 00 +T E5 00 00 00 +R 00 00 02 00 +T E5 00 00 00 50 72 6F 74 6F 63 6F 6C 00 +R 00 00 02 00 +T EE 00 00 00 +R 00 00 02 00 +T EE 00 00 00 50 6F 72 74 00 +R 00 00 02 00 +T F3 00 00 00 +R 00 00 02 00 +T F3 00 00 00 46 72 61 67 6D 65 6E 74 61 74 69 +R 00 00 02 00 +T FE 00 00 00 6F 6E 00 +R 00 00 02 00 +T 01 01 00 00 +R 00 00 02 00 +T 01 01 00 00 53 6F 75 72 63 65 20 72 6F 75 74 +R 00 00 02 00 +T 0C 01 00 00 65 00 +R 00 00 02 00 +T 0E 01 00 00 +R 00 00 02 00 +T 0E 01 00 00 44 65 73 74 20 6E 65 74 20 75 6E +R 00 00 02 00 +T 19 01 00 00 6B 6E 6F 77 6E 00 +R 00 00 02 00 +T 1F 01 00 00 +R 00 00 02 00 +T 1F 01 00 00 44 65 73 74 20 68 6F 73 74 20 75 +R 00 00 02 00 +T 2A 01 00 00 6E 6B 6E 6F 77 6E 00 +R 00 00 02 00 +T 31 01 00 00 +R 00 00 02 00 +T 31 01 00 00 53 6F 75 72 63 65 20 68 6F 73 74 +R 00 00 02 00 +T 3C 01 00 00 20 69 73 6F 6C 61 74 65 64 00 +R 00 00 02 00 +T 46 01 00 00 +R 00 00 02 00 +T 46 01 00 00 4E 65 74 20 70 72 6F 68 69 62 69 +R 00 00 02 00 +T 51 01 00 00 74 65 64 00 +R 00 00 02 00 +T 55 01 00 00 +R 00 00 02 00 +T 55 01 00 00 48 6F 73 74 20 70 72 6F 68 69 62 +R 00 00 02 00 +T 60 01 00 00 69 74 65 64 00 +R 00 00 02 00 +T 65 01 00 00 +R 00 00 02 00 +T 65 01 00 00 4E 65 74 20 54 4F 53 00 +R 00 00 02 00 +T 6D 01 00 00 +R 00 00 02 00 +T 6D 01 00 00 48 6F 73 74 20 54 4F 53 00 +R 00 00 02 00 +T 76 01 00 00 +R 00 00 02 00 +T 76 01 00 00 41 64 6D 69 6E 69 73 74 72 61 74 +R 00 00 02 00 +T 81 01 00 00 69 76 65 6C 79 20 50 72 6F 68 69 +R 00 00 02 00 +T 8C 01 00 00 62 69 74 65 64 00 +R 00 00 02 00 +T 92 01 00 00 +R 00 00 02 00 +T 92 01 00 00 54 69 6D 65 2D 74 6F 2D 6C 69 76 +R 00 00 02 00 +T 9D 01 00 00 65 00 +R 00 00 02 00 +T 9F 01 00 00 +R 00 00 02 00 +T 9F 01 00 00 46 72 61 67 6D 65 6E 74 20 72 65 +R 00 00 02 00 +T AA 01 00 00 61 73 73 65 6D 62 6C 79 00 +R 00 00 02 00 +T B3 01 00 00 +R 00 00 02 00 +T B3 01 00 00 54 4F 53 20 26 20 4E 65 74 77 6F +R 00 00 02 00 +T BE 01 00 00 72 6B 00 +R 00 00 02 00 +T C1 01 00 00 +R 00 00 02 00 +T C1 01 00 00 54 4F 53 20 26 20 48 6F 73 74 00 +R 00 00 02 00 +T CC 01 00 00 +R 00 00 02 00 +T CC 01 00 00 55 6E 6B 6E 6F 77 6E 20 53 41 49 +R 00 00 02 00 +T D7 01 00 00 44 00 +R 00 00 02 00 +T D9 01 00 00 +R 00 00 02 00 +T D9 01 00 00 41 75 74 68 65 6E 74 69 63 61 74 +R 00 00 02 00 +T E4 01 00 00 69 6F 6E 20 66 61 69 6C 65 64 00 +R 00 00 02 00 +T EF 01 00 00 +R 00 00 02 00 +T EF 01 00 00 44 65 63 72 79 70 74 69 6F 6E 20 +R 00 00 02 00 +T FA 01 00 00 66 61 69 6C 65 64 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 28 00 00 00 +R 00 00 03 00 +T 28 00 00 00 +R 00 00 03 00 +T 44 00 00 00 +R 00 00 03 00 +T 44 00 00 00 +R 00 00 03 00 +T 48 00 00 00 +R 00 00 03 00 +T 48 00 00 00 +R 00 00 03 00 +T 50 00 00 00 +R 00 00 03 00 +T 50 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 06 00 00 00 0B 00 00 00 17 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0A 00 00 00 25 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 10 00 00 00 2E 00 00 00 00 00 00 00 +R 00 00 04 00 00 04 02 00 +T 16 00 00 00 3B 00 00 00 49 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 1A 00 00 00 5B 00 00 00 65 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 1E 00 00 00 75 00 00 00 89 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 22 00 00 00 9B 00 00 00 B0 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 26 00 00 00 C3 00 00 00 D8 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 2A 00 00 00 E0 00 00 00 E5 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 2E 00 00 00 EE 00 00 00 F3 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 32 00 00 00 01 01 00 00 0E 01 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 36 00 00 00 1F 01 00 00 31 01 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 3A 00 00 00 46 01 00 00 55 01 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 3E 00 00 00 65 01 00 00 6D 01 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 42 00 00 00 76 01 00 00 92 01 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 46 00 00 00 9F 01 00 00 D8 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 4A 00 00 00 E0 00 00 00 B3 01 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 4E 00 00 00 C1 01 00 00 CC 01 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 52 00 00 00 D9 01 00 00 EF 01 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 diff --git a/src/nos/lib/internet_lib/in_window.rel b/src/nos/lib/internet_lib/in_window.rel new file mode 100644 index 00000000..f6fbdef5 --- /dev/null +++ b/src/nos/lib/internet_lib/in_window.rel @@ -0,0 +1,35 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _seq_within Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 67 flags 0 +S _in_window Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 43 00 19 4E 23 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 46 23 5E 23 56 D5 C5 21 3F 00 DD +R 00 00 01 00 +T 14 00 00 00 4E 02 DD 46 03 09 4E 23 46 23 5E +R 00 00 01 00 +T 1F 00 00 00 23 56 69 60 C1 09 EB C1 ED 4A E5 +R 00 00 01 00 +T 2A 00 00 00 D5 21 FF FF C1 09 EB 21 FF FF C1 +R 00 00 01 00 +T 35 00 00 00 ED 4A E5 D5 21 3F 00 DD 4E 02 DD +R 00 00 01 00 +T 40 00 00 00 46 03 09 4E 23 46 23 5E 23 56 D5 +R 00 00 01 00 +T 4B 00 00 00 C5 DD 4E 0C DD 46 0D DD 5E 0A DD +R 00 00 01 00 +T 56 00 00 00 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 5B 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 62 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/internet_lib/inverse_a.rel b/src/nos/lib/internet_lib/inverse_a.rel new file mode 100644 index 00000000..53eb0a09 --- /dev/null +++ b/src/nos/lib/internet_lib/inverse_a.rel @@ -0,0 +1,94 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sprintf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _make_rr Ref00000000 +S _free_rr Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _resolver Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10C flags 0 +S _inverse_a Def00000000 +A CSTR size 1A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DE FF DD 7E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 B6 03 DD B6 04 DD B6 05 20 06 +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 21 00 00 C3 09 01 00 00 +R 00 00 01 00 00 08 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 3E 10 DD 4E 04 DD 46 05 DD 6E 02 +R 00 00 01 00 +T 24 00 00 00 DD 66 03 CD 00 00 00 00 6C 26 00 +R 00 00 01 00 02 08 09 00 +T 2D 00 00 00 26 00 E5 3E 10 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 38 00 00 00 DD 6E 02 DD 66 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 41 00 00 00 26 00 E5 DD 6E 02 DD 66 03 6C 26 +R 00 00 01 00 +T 4C 00 00 00 00 26 00 E5 DD 4E 02 06 00 C5 21 +R 00 00 01 00 +T 57 00 00 00 00 00 00 00 E5 21 0E 00 39 E5 3E +R 00 00 01 00 00 04 02 00 +T 60 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 65 00 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T 6E 00 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 79 00 00 00 E5 21 00 00 E5 21 0C 00 E5 21 +R 00 00 01 00 +T 83 00 00 00 01 00 E5 21 10 00 39 4D 44 11 +R 00 00 01 00 +T 8D 00 00 00 08 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 92 00 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 99 00 00 00 0C 00 39 F9 EB DD 75 DE DD 74 DF +R 00 00 01 00 +T A4 00 00 00 DD 6E DE DD 66 DF 23 23 E5 21 +R 00 00 01 00 +T AE 00 00 00 26 00 39 E5 21 04 00 E5 21 00 00 +R 00 00 01 00 +T B9 00 00 00 E5 21 00 00 E5 21 01 00 E5 21 +R 00 00 01 00 +T C3 00 00 00 01 00 E5 01 00 00 11 09 00 3E +R 00 00 01 00 +T CD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T D2 00 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T DB 00 00 00 4D 44 E1 71 23 70 DD 5E DE DD 56 +R 00 00 01 00 +T E6 00 00 00 DF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T EC 00 00 00 CD 00 00 00 00 DD 75 E0 DD 74 E1 +R 00 00 01 00 02 05 00 00 +T F5 00 00 00 DD 5E DE DD 56 DF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T FD 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 04 01 00 00 6E E0 DD 66 E1 +R 00 00 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 75 2E 25 75 2E 25 75 2E 25 75 +R 00 00 02 00 +T 0B 00 00 00 2E 49 4E 2D 41 44 44 52 2E 41 52 +R 00 00 02 00 +T 16 00 00 00 50 41 2E 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/ip_encap.rel b/src/nos/lib/internet_lib/ip_encap.rel new file mode 100644 index 00000000..ca3109f3 --- /dev/null +++ b/src/nos/lib/internet_lib/ip_encap.rel @@ -0,0 +1,88 @@ +XL4 +H 2 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _secclock Ref00000000 +S _Ip_mib Ref00000000 +S ?L_INC_L03 Ref00000000 +S _ntohip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _ip_send Ref00000000 +S _Encap Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dump Ref00000000 +S _icmp_output Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size FA flags 0 +S _ip_encap Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C0 FF DD 6E 02 DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 66 03 5E 23 56 D5 01 01 00 DD 5E +R 00 00 01 00 +T 14 00 00 00 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0D 00 +T 1B 00 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 22 00 00 00 55 00 DD 4E 04 DD 46 05 09 CD +R 00 00 01 00 +T 2C 00 00 00 00 00 00 00 21 61 00 DD 4E 04 DD +R 00 00 01 00 02 04 0A 00 +T 35 00 00 00 46 05 09 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 3C 00 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 43 00 00 00 73 23 72 23 71 23 70 DD 7E 0A DD +R 00 00 01 00 +T 4E 00 00 00 B6 0B DD B6 0C DD B6 0D 20 5C +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 DD 4E 02 DD 46 03 21 00 00 39 5D +R 00 00 01 00 +T 63 00 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 69 00 00 00 CD 00 00 00 00 21 00 00 E5 0E 01 +R 00 00 01 00 02 05 00 00 +T 72 00 00 00 C5 0E 03 C5 DD 6E 02 DD 66 03 4E +R 00 00 01 00 +T 7D 00 00 00 23 46 21 06 00 39 5D 54 3E +R 00 00 01 00 +T 86 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 8B 00 00 00 00 00 00 00 F1 F1 F1 DD 5E 02 DD +R 00 00 01 00 02 04 00 00 +T 94 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 99 00 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 9F 00 00 00 4A 00 00 00 ED 4B 4C 00 00 00 CD +R 00 00 01 00 02 04 02 00 02 0A 02 00 +T A6 00 00 00 00 00 00 00 22 4A 00 00 00 ED 43 +R 00 00 01 00 02 04 03 00 02 09 02 00 +T AD 00 00 00 4C 00 00 00 21 FF FF 18 43 +R 00 00 01 00 02 04 02 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 0E 00 C5 21 00 00 E5 21 00 00 E5 +R 00 00 01 00 +T BF 00 00 00 DD 6E 02 DD 66 03 E5 0E 00 C5 DD +R 00 00 01 00 +T CA 00 00 00 6E 0E E5 0E 5E C5 DD 6E 0C DD 66 +R 00 00 01 00 +T D5 00 00 00 0D E5 DD 6E 0A DD 66 0B E5 21 +R 00 00 01 00 +T DF 00 00 00 04 00 00 00 5E 23 56 23 4E 23 46 +R 00 00 01 00 02 04 08 00 +T E8 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T EE 00 00 00 00 00 00 00 EB 21 12 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T F7 00 00 00 +R 00 00 01 00 +T F7 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/internet_lib/ip_garbage.rel b/src/nos/lib/internet_lib/ip_garbage.rel new file mode 100644 index 00000000..8ac84308 --- /dev/null +++ b/src/nos/lib/internet_lib/ip_garbage.rel @@ -0,0 +1,115 @@ +XL4 +H 2 areas D global symbols +S _ttldec Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Rawip Ref00000000 +S _Ifaces Ref00000000 +S _mbuf_crunch Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _free_reasm Ref00000000 +S .__.ABS. Def00000000 +S _Reasmq Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _rquench Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 105 flags 0 +S _ip_garbage Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF 2A +R 00 00 01 00 02 05 09 00 +T 06 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 +R 00 00 01 00 02 04 08 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 DD 7E F6 DD B6 F7 28 74 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 6E F6 DD 66 F7 46 23 66 68 DD +R 00 00 01 00 +T 21 00 00 00 75 F8 DD 74 F9 DD 7E 02 DD B6 03 +R 00 00 01 00 +T 2C 00 00 00 28 10 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 36 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 3D 00 00 00 3E +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 21 12 00 DD 4E F6 DD 46 F7 09 46 +R 00 00 01 00 +T 49 00 00 00 23 66 68 DD 75 FA DD 74 FB +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 7E FA DD B6 FB 28 22 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 21 04 00 DD 4E FA DD 46 FB 09 EB +R 00 00 01 00 +T 65 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 6B 00 00 00 00 00 00 00 03 03 0A 6F 03 0A 67 +R 00 00 01 00 02 04 01 00 +T 74 00 00 00 DD 75 FA DD 74 FB 18 D6 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 6E F8 DD 66 F9 DD 75 F6 DD 74 +R 00 00 01 00 +T 87 00 00 00 F7 18 84 +R 00 00 01 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 2A 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 02 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 DD 7E FC DD B6 FD 28 22 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 DD 5E FC DD 56 FD 13 13 3E +R 00 00 01 00 +T A4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T A9 00 00 00 00 00 00 00 DD 6E FC DD 66 FD 46 +R 00 00 01 00 02 04 01 00 +T B2 00 00 00 23 66 68 DD 75 FC DD 74 FD 18 D6 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 2A 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 03 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 DD 7E FE DD B6 FF 28 34 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T D6 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T DD 00 00 00 4E 02 DD 46 03 DD 5E FE DD 56 FF +R 00 00 01 00 +T E8 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0B 00 02 0A 0B 00 +T EE 00 00 00 00 00 00 00 DD 6E FE DD 66 FF 46 +R 00 00 01 00 02 04 01 00 +T F7 00 00 00 23 66 68 DD 75 FE DD 74 FF 18 C4 +R 00 00 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/internet_lib/ip_mtu.rel b/src/nos/lib/internet_lib/ip_mtu.rel new file mode 100644 index 00000000..48d0d499 --- /dev/null +++ b/src/nos/lib/internet_lib/ip_mtu.rel @@ -0,0 +1,78 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _rt_lookup Ref00000000 +S _Encap Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B2 flags 0 +S _ip_mtu Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 4E 04 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 17 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 00 00 +T 20 00 00 00 B4 28 0F 21 12 00 DD 4E FC DD 46 +R 00 00 01 00 +T 2B 00 00 00 FD 09 7E 23 B6 20 05 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 00 00 18 78 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 21 12 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 42 00 00 00 23 66 68 01 00 00 00 00 A7 ED 42 +R 00 00 01 00 02 08 04 00 +T 4B 00 00 00 20 1F +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 21 0A 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 58 00 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 29 0B 01 00 +T 60 00 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 00 05 01 00 02 0A 00 00 +T 67 00 00 00 EC FF 09 18 43 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 21 12 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 77 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 81 00 00 00 16 00 09 7E 23 B6 28 18 +R 00 00 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 21 16 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T 94 00 00 00 23 66 68 01 10 00 09 46 23 66 68 +R 00 00 01 00 +T 9F 00 00 00 18 0E +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 21 10 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T AC 00 00 00 23 66 68 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/internet_lib/ip_proc.rel b/src/nos/lib/internet_lib/ip_proc.rel new file mode 100644 index 00000000..46a2b78f --- /dev/null +++ b/src/nos/lib/internet_lib/ip_proc.rel @@ -0,0 +1,19 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ip_route Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S _ip_proc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 E5 3E +R 00 00 01 00 02 05 03 00 +T 08 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 0D 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 01 00 diff --git a/src/nos/lib/internet_lib/ip_recv.rel b/src/nos/lib/internet_lib/ip_recv.rel new file mode 100644 index 00000000..7f2fe58f --- /dev/null +++ b/src/nos/lib/internet_lib/ip_recv.rel @@ -0,0 +1,256 @@ +XL4 +H 2 areas 14 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Rawip Ref00000000 +S _trim_mbuf Ref00000000 +S _fraghandle Ref00000000 +S _len_p Ref00000000 +S _dumpip Ref00000000 +S _Ip_mib Ref00000000 +S ?L_INC_L03 Ref00000000 +S _htonip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _dup_p Ref00000000 +S .__.ABS. Def00000000 +S _Iplink Ref00000000 +S _Ip_trace Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _enqueue Ref00000000 +S _icmp_output Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27D flags 0 +S _ip_recv Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 FC +R 00 00 01 00 02 05 0E 00 +T 09 00 00 00 DD 77 FD DD 7E 0A DD B6 0B 28 19 +R 00 00 01 00 +T 14 00 00 00 DD 4E 0A DD 46 0B DD 5E 04 DD 56 +R 00 00 01 00 +T 1F 00 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 25 00 00 00 CD 00 00 00 00 7D A4 3C 20 03 +R 00 00 01 00 02 05 00 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 C3 7A 02 00 00 +R 00 00 01 00 00 05 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 21 16 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 3B 00 00 00 16 00 21 14 00 19 EB 21 08 00 09 +R 00 00 01 00 +T 46 00 00 00 46 23 66 68 A7 ED 52 4D 44 DD 5E +R 00 00 01 00 +T 51 00 00 00 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 58 00 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 5E 00 00 00 38 00 00 00 ED 4B 3A 00 00 00 CD +R 00 00 01 00 02 04 06 00 02 0A 06 00 +T 65 00 00 00 00 00 00 00 22 38 00 00 00 ED 43 +R 00 00 01 00 02 04 07 00 02 09 06 00 +T 6C 00 00 00 3A 00 00 00 2A 00 00 00 00 7D B4 +R 00 00 01 00 02 04 06 00 02 09 0D 00 +T 73 00 00 00 28 2F +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 6E 10 DD 66 11 E5 DD 6E 0E DD +R 00 00 01 00 +T 80 00 00 00 66 0F E5 DD 6E 0A DD 66 0B 4E 23 +R 00 00 01 00 +T 8B 00 00 00 46 C5 DD 4E 04 DD 46 05 DD 5E 02 +R 00 00 01 00 +T 96 00 00 00 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T 9C 00 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T A3 00 00 00 E1 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 2A 00 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 05 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 DD 7E F8 DD B6 F9 CA 95 01 00 00 +R 00 00 01 00 00 0B 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 21 15 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T C1 00 00 00 06 00 21 07 00 DD 5E F8 DD 56 F9 +R 00 00 01 00 +T CC 00 00 00 19 56 23 66 6A A7 ED 42 28 03 +R 00 00 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 C3 82 01 00 00 +R 00 00 01 00 00 05 01 00 +T D9 00 00 00 +R 00 00 01 00 +T D9 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 DD 6E 0A DD 66 0B 5E 23 56 3E +R 00 00 01 00 +T EB 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T F0 00 00 00 00 00 00 00 E5 21 00 00 E5 DD 6E +R 00 00 01 00 02 04 00 00 +T F9 00 00 00 0A DD 66 0B 4E 23 46 21 06 00 39 +R 00 00 01 00 +T 04 01 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T 09 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 10 01 00 00 DD 7E FA DD B6 FB 28 5C +R 00 00 01 00 +T 18 01 00 00 +R 00 00 01 00 +T 18 01 00 00 21 01 00 E5 21 04 00 39 4D 44 DD +R 00 00 01 00 +T 23 01 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 2B 01 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 32 01 00 00 02 00 39 4D 44 DD 5E F8 DD 56 F9 +R 00 00 01 00 +T 3D 01 00 00 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 42 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 48 01 00 00 04 00 DD 4E F8 DD 46 F9 09 7E 23 +R 00 00 01 00 +T 53 01 00 00 B6 23 B6 28 1A +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 DD 5E F8 DD 56 F9 21 04 00 DD 4E +R 00 00 01 00 +T 63 01 00 00 F8 DD 46 F9 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 6E 01 00 00 60 CD 00 00 00 00 +R 00 00 01 00 02 06 00 00 +T 72 01 00 00 +R 00 00 01 00 +T 72 01 00 00 18 0E +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 21 02 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 7C 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T 82 01 00 00 +R 00 00 01 00 +T 82 01 00 00 +R 00 00 01 00 +T 82 01 00 00 DD 6E F8 DD 66 F9 46 23 66 68 DD +R 00 00 01 00 +T 8D 01 00 00 75 F8 DD 74 F9 C3 AD 00 00 00 +R 00 00 01 00 00 0A 01 00 +T 95 01 00 00 +R 00 00 01 00 +T 95 01 00 00 DD 36 FE 00 00 00 00 DD 36 FF +R 00 00 01 00 0B 07 0C 00 +T 9C 01 00 00 00 00 00 00 +R 00 00 01 00 8B 04 0C 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 DD 6E FE DD 66 FF 23 23 23 7E 23 +R 00 00 01 00 +T A8 01 00 00 B6 23 B6 28 27 +R 00 00 01 00 +T AD 01 00 00 +R 00 00 01 00 +T AD 01 00 00 21 15 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T B8 01 00 00 DD 6E FE DD 66 FF 7E E1 BE 20 02 +R 00 00 01 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 18 0F +R 00 00 01 00 +T C5 01 00 00 +R 00 00 01 00 +T C5 01 00 00 DD 7E FE C6 09 DD 77 FE 30 03 DD +R 00 00 01 00 +T D0 01 00 00 34 FF +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 18 C9 +R 00 00 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 DD 6E FE DD 66 FF 23 23 23 7E 23 +R 00 00 01 00 +T DF 01 00 00 B6 23 B6 28 43 +R 00 00 01 00 +T E4 01 00 00 +R 00 00 01 00 +T E4 01 00 00 DD 6E 10 DD 66 11 E5 DD 6E 0E DD +R 00 00 01 00 +T EF 01 00 00 66 0F E5 DD 6E 0C DD 66 0D E5 DD +R 00 00 01 00 +T FA 01 00 00 6E 0A DD 66 0B E5 DD 4E 04 DD 46 +R 00 00 01 00 +T 05 02 00 00 05 C5 DD 5E 02 DD 56 03 DD 6E FE +R 00 00 01 00 +T 10 02 00 00 DD 66 FF 23 23 23 4E 23 46 23 7E +R 00 00 01 00 +T 1B 02 00 00 69 60 C1 CD 00 00 00 00 E1 E1 E1 +R 00 00 01 00 02 08 00 00 +T 24 02 00 00 E1 18 53 +R 00 00 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 DD 7E FC DD B6 FD 20 3D +R 00 00 01 00 +T 2F 02 00 00 +R 00 00 01 00 +T 2F 02 00 00 2A 2C 00 00 00 ED 4B 2E 00 00 00 +R 00 00 01 00 02 05 06 00 02 0B 06 00 +T 36 02 00 00 CD 00 00 00 00 22 2C 00 00 00 ED +R 00 00 01 00 02 05 07 00 02 0A 06 00 +T 3D 02 00 00 43 2E 00 00 00 DD 7E 0C DD B6 0D +R 00 00 01 00 02 05 06 00 +T 46 02 00 00 20 24 +R 00 00 01 00 +T 48 02 00 00 +R 00 00 01 00 +T 48 02 00 00 21 00 00 E5 0E 02 C5 0E 03 C5 DD +R 00 00 01 00 +T 53 02 00 00 6E 0A DD 66 0B 4E 23 46 DD 5E 04 +R 00 00 01 00 +T 5E 02 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 12 00 +T 64 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 6B 02 00 00 F1 +R 00 00 01 00 +T 6C 02 00 00 +R 00 00 01 00 +T 6C 02 00 00 +R 00 00 01 00 +T 6C 02 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 74 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T 7A 02 00 00 +R 00 00 01 00 +T 7A 02 00 00 +R 00 00 01 00 +T 7A 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 09 00 diff --git a/src/nos/lib/internet_lib/ip_route.rel b/src/nos/lib/internet_lib/ip_route.rel new file mode 100644 index 00000000..4c79a4a2 --- /dev/null +++ b/src/nos/lib/internet_lib/ip_route.rel @@ -0,0 +1,836 @@ +XL4 +H 2 areas 1A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _availmem Ref00000000 +S _len_p Ref00000000 +S _Ip_mib Ref00000000 +S ?L_INC_L03 Ref00000000 +S _ntohip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _dup_p Ref00000000 +S _locaddr Ref00000000 +S _ismyaddr Ref00000000 +S _WantBootp Ref00000000 +S .__.ABS. Def00000000 +S _rt_lookup Ref00000000 +S _q_pkt Ref00000000 +S _cksum Ref00000000 +S _get32 Ref00000000 +S _ip_recv Ref00000000 +S _bootp_validPacket Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _icmp_output Ref00000000 +S _put32 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 991 flags 0 +S _ip_route Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 A0 FF AF DD 77 EF +R 00 00 01 00 02 05 12 00 +T 09 00 00 00 DD 77 F0 DD 36 F7 01 DD 36 F8 00 +R 00 00 01 00 +T 14 00 00 00 DD 7E 02 DD B6 03 28 1E +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 2A 14 00 00 00 ED 4B 16 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 03 00 +T 23 00 00 00 CD 00 00 00 00 22 14 00 00 00 ED +R 00 00 01 00 02 05 04 00 02 0A 03 00 +T 2A 00 00 00 43 16 00 00 00 21 59 00 DD 4E 02 +R 00 00 01 00 02 05 03 00 +T 33 00 00 00 DD 46 03 09 CD 00 00 00 00 +R 00 00 01 00 02 09 13 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 DD 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T 44 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 49 00 00 00 00 00 00 00 01 14 00 A7 ED 42 30 +R 00 00 01 00 02 04 00 00 +T 52 00 00 00 25 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 2A 1A 00 00 00 ED 4B 1C 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 03 00 +T 5A 00 00 00 CD 00 00 00 00 22 1A 00 00 00 ED +R 00 00 01 00 02 05 04 00 02 0A 03 00 +T 61 00 00 00 43 1C 00 00 00 DD 5E 04 DD 56 05 +R 00 00 01 00 02 05 03 00 +T 6A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 15 00 02 0A 15 00 +T 70 00 00 00 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 00 00 +T 76 00 00 00 8E 09 00 00 +R 00 00 01 00 00 04 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 83 00 00 00 0A 00 09 7E 23 66 6F 7E E6 0F 6F +R 00 00 01 00 +T 8E 00 00 00 26 00 29 29 DD 75 DF DD 74 E0 01 +R 00 00 01 00 +T 99 00 00 00 14 00 A7 ED 42 30 25 +R 00 00 01 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 2A 1A 00 00 00 ED 4B 1C 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 03 00 +T A7 00 00 00 CD 00 00 00 00 22 1A 00 00 00 ED +R 00 00 01 00 02 05 04 00 02 0A 03 00 +T AE 00 00 00 43 1C 00 00 00 DD 5E 04 DD 56 05 +R 00 00 01 00 02 05 03 00 +T B7 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 15 00 02 0A 15 00 +T BD 00 00 00 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 00 00 +T C3 00 00 00 8E 09 00 00 +R 00 00 01 00 00 04 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 DD 6E DF DD 66 E0 E5 DD 6E 04 DD +R 00 00 01 00 +T D0 00 00 00 66 05 4E 23 46 11 00 00 3E +R 00 00 01 00 +T D9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T DE 00 00 00 00 00 00 00 F1 7D B4 28 25 +R 00 00 01 00 02 04 00 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 2A 1A 00 00 00 ED 4B 1C 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 03 00 +T EC 00 00 00 CD 00 00 00 00 22 1A 00 00 00 ED +R 00 00 01 00 02 05 04 00 02 0A 03 00 +T F3 00 00 00 43 1C 00 00 00 DD 5E 04 DD 56 05 +R 00 00 01 00 02 05 03 00 +T FC 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 15 00 02 0A 15 00 +T 02 01 00 00 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 00 00 +T 08 01 00 00 8E 09 00 00 +R 00 00 01 00 00 04 01 00 +T 0A 01 00 00 +R 00 00 01 00 +T 0A 01 00 00 DD 4E 04 DD 46 05 21 00 00 39 5D +R 00 00 01 00 +T 15 01 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 1B 01 00 00 CD 00 00 00 00 DD 7E B2 FE 04 28 +R 00 00 01 00 02 05 00 00 +T 24 01 00 00 25 +R 00 00 01 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 2A 1A 00 00 00 ED 4B 1C 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 03 00 +T 2C 01 00 00 CD 00 00 00 00 22 1A 00 00 00 ED +R 00 00 01 00 02 05 04 00 02 0A 03 00 +T 33 01 00 00 43 1C 00 00 00 DD 5E 04 DD 56 05 +R 00 00 01 00 02 05 03 00 +T 3C 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 15 00 02 0A 15 00 +T 42 01 00 00 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 00 00 +T 48 01 00 00 8E 09 00 00 +R 00 00 01 00 00 04 01 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 DD 7E 0A DD B6 0B 20 30 3E +R 00 00 01 00 +T 53 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 58 01 00 00 00 00 00 00 7D B4 28 24 +R 00 00 01 00 02 04 00 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 21 00 00 E5 0E 00 C5 0E 04 C5 DD +R 00 00 01 00 +T 69 01 00 00 6E 04 DD 66 05 4E 23 46 21 06 00 +R 00 00 01 00 +T 74 01 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 17 00 +T 7A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 17 00 02 09 00 00 +T 81 01 00 00 F1 +R 00 00 01 00 +T 82 01 00 00 +R 00 00 01 00 +T 82 01 00 00 AF DD 77 EF DD 77 F0 AF DD 77 F5 +R 00 00 01 00 +T 8D 01 00 00 DD 77 F6 +R 00 00 01 00 +T 90 01 00 00 +R 00 00 01 00 +T 90 01 00 00 DD 4E B6 06 00 DD 6E F5 DD 66 F6 +R 00 00 01 00 +T 9B 01 00 00 CD 00 00 00 00 D2 B0 04 00 00 +R 00 00 01 00 02 05 14 00 00 0A 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 21 00 00 39 01 17 00 09 DD 4E F5 +R 00 00 01 00 +T AC 01 00 00 DD 46 F6 09 7E E6 1F FE 00 20 03 +R 00 00 01 00 +T B7 01 00 00 +R 00 00 01 00 +T B7 01 00 00 C3 B0 04 00 00 +R 00 00 01 00 00 05 01 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 FE 01 20 0B DD 36 F1 01 DD 36 F2 +R 00 00 01 00 +T C5 01 00 00 00 C3 9E 04 00 00 +R 00 00 01 00 00 06 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 DD 6E B6 26 00 DD 4E F5 DD 46 F6 +R 00 00 01 00 +T D4 01 00 00 A7 ED 42 01 02 80 3E 80 AC 67 ED +R 00 00 01 00 +T DF 01 00 00 42 38 3B 21 00 00 39 01 18 00 09 +R 00 00 01 00 +T EA 01 00 00 DD 4E F5 DD 46 F6 09 4E 06 00 DD +R 00 00 01 00 +T F5 01 00 00 71 F1 DD 70 F2 69 60 01 02 00 A7 +R 00 00 01 00 +T 00 02 00 00 ED 42 38 19 DD 6E B6 26 00 DD 4E +R 00 00 01 00 +T 0B 02 00 00 F5 DD 46 F6 A7 ED 42 DD 4E F1 DD +R 00 00 01 00 +T 16 02 00 00 46 F2 A7 ED 42 30 49 +R 00 00 01 00 +T 1D 02 00 00 +R 00 00 01 00 +T 1D 02 00 00 +R 00 00 01 00 +T 1D 02 00 00 +R 00 00 01 00 +T 1D 02 00 00 DD 7E 0A DD B6 0B 20 2D +R 00 00 01 00 +T 25 02 00 00 +R 00 00 01 00 +T 25 02 00 00 DD 7E F5 C6 14 DD 77 FB 21 5B 00 +R 00 00 01 00 +T 30 02 00 00 39 E5 0E 00 C5 0E 0C C5 DD 6E 04 +R 00 00 01 00 +T 3B 02 00 00 DD 66 05 4E 23 46 21 06 00 39 5D +R 00 00 01 00 +T 46 02 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 17 00 02 0B 17 00 +T 4C 02 00 00 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 05 00 00 +T 52 02 00 00 +R 00 00 01 00 +T 52 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T 5A 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 15 00 02 0A 00 00 +T 61 02 00 00 FF FF C3 8E 09 00 00 +R 00 00 01 00 00 07 01 00 +T 66 02 00 00 +R 00 00 01 00 +T 66 02 00 00 21 00 00 39 01 17 00 09 DD 4E F5 +R 00 00 01 00 +T 71 02 00 00 DD 46 F6 09 DD 75 F3 DD 74 F4 7E +R 00 00 01 00 +T 7C 02 00 00 E6 1F FE 03 28 0D FE 09 C2 +R 00 00 01 00 +T 85 02 00 00 86 03 00 00 +R 00 00 01 00 00 04 01 00 +T 87 02 00 00 +R 00 00 01 00 +T 87 02 00 00 DD 36 EF 01 DD 36 F0 00 +R 00 00 01 00 +T 8F 02 00 00 +R 00 00 01 00 +T 8F 02 00 00 01 03 00 DD 6E F1 DD 66 F2 A7 ED +R 00 00 01 00 +T 9A 02 00 00 42 30 49 +R 00 00 01 00 +T 9D 02 00 00 +R 00 00 01 00 +T 9D 02 00 00 DD 7E 0A DD B6 0B 20 2D +R 00 00 01 00 +T A5 02 00 00 +R 00 00 01 00 +T A5 02 00 00 DD 7E F5 C6 14 DD 77 FB 21 5B 00 +R 00 00 01 00 +T B0 02 00 00 39 E5 0E 00 C5 0E 0C C5 DD 6E 04 +R 00 00 01 00 +T BB 02 00 00 DD 66 05 4E 23 46 21 06 00 39 5D +R 00 00 01 00 +T C6 02 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 17 00 02 0B 17 00 +T CC 02 00 00 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 05 00 00 +T D2 02 00 00 +R 00 00 01 00 +T D2 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T DA 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 15 00 02 0A 00 00 +T E1 02 00 00 FF FF C3 8E 09 00 00 +R 00 00 01 00 00 07 01 00 +T E6 02 00 00 +R 00 00 01 00 +T E6 02 00 00 21 04 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T F1 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T F7 02 00 00 00 00 00 00 7D B4 20 03 +R 00 00 01 00 02 04 00 00 +T FD 02 00 00 +R 00 00 01 00 +T FD 02 00 00 C3 9E 04 00 00 +R 00 00 01 00 00 05 01 00 +T 00 03 00 00 +R 00 00 01 00 +T 00 03 00 00 DD 6E F3 DD 66 F4 23 23 4E 06 00 +R 00 00 01 00 +T 0B 03 00 00 DD 71 F9 DD 70 FA 21 04 00 09 4D +R 00 00 01 00 +T 16 03 00 00 44 DD 6E F1 DD 66 F2 A7 ED 42 30 +R 00 00 01 00 +T 21 03 00 00 03 +R 00 00 01 00 +T 22 03 00 00 +R 00 00 01 00 +T 22 03 00 00 C3 9E 04 00 00 +R 00 00 01 00 00 05 01 00 +T 25 03 00 00 +R 00 00 01 00 +T 25 03 00 00 DD 6E F9 DD 66 FA DD 4E F3 DD 46 +R 00 00 01 00 +T 30 03 00 00 F4 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0F 00 +T 36 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 3D 03 00 00 A4 DD 74 A5 DD 71 A6 DD 70 A7 21 +R 00 00 01 00 +T 48 03 00 00 04 00 39 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 53 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 58 03 00 00 00 00 00 00 C5 E5 DD 6E F9 DD 66 +R 00 00 01 00 02 04 00 00 +T 61 03 00 00 FA DD 4E F3 DD 46 F4 09 EB 3E +R 00 00 01 00 +T 6B 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T 70 03 00 00 00 00 00 00 F1 F1 69 60 23 23 7E +R 00 00 01 00 02 04 00 00 +T 79 03 00 00 C6 04 77 AF DD 77 F7 DD 77 F8 C3 +R 00 00 01 00 +T 84 03 00 00 9E 04 00 00 +R 00 00 01 00 00 04 01 00 +T 86 03 00 00 +R 00 00 01 00 +T 86 03 00 00 FE 07 C2 9E 04 00 00 01 03 00 DD +R 00 00 01 00 00 07 01 00 +T 8F 03 00 00 6E F1 DD 66 F2 A7 ED 42 30 49 +R 00 00 01 00 +T 99 03 00 00 +R 00 00 01 00 +T 99 03 00 00 DD 7E 0A DD B6 0B 20 2D +R 00 00 01 00 +T A1 03 00 00 +R 00 00 01 00 +T A1 03 00 00 DD 7E F5 C6 14 DD 77 FB 21 5B 00 +R 00 00 01 00 +T AC 03 00 00 39 E5 0E 00 C5 0E 0C C5 DD 6E 04 +R 00 00 01 00 +T B7 03 00 00 DD 66 05 4E 23 46 21 06 00 39 5D +R 00 00 01 00 +T C2 03 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 17 00 02 0B 17 00 +T C8 03 00 00 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 05 00 00 +T CE 03 00 00 +R 00 00 01 00 +T CE 03 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T D6 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 15 00 02 0A 00 00 +T DD 03 00 00 FF FF C3 8E 09 00 00 +R 00 00 01 00 00 07 01 00 +T E2 03 00 00 +R 00 00 01 00 +T E2 03 00 00 DD 6E F3 DD 66 F4 23 23 4E 06 00 +R 00 00 01 00 +T ED 03 00 00 DD 71 F9 DD 70 FA 21 04 00 09 4D +R 00 00 01 00 +T F8 03 00 00 44 DD 6E F1 DD 66 F2 A7 ED 42 30 +R 00 00 01 00 +T 03 04 00 00 5C +R 00 00 01 00 +T 04 04 00 00 +R 00 00 01 00 +T 04 04 00 00 DD 7E 0A DD B6 0B 20 2D +R 00 00 01 00 +T 0C 04 00 00 +R 00 00 01 00 +T 0C 04 00 00 DD 7E F5 C6 14 DD 77 FB 21 5B 00 +R 00 00 01 00 +T 17 04 00 00 39 E5 0E 00 C5 0E 0C C5 DD 6E 04 +R 00 00 01 00 +T 22 04 00 00 DD 66 05 4E 23 46 21 06 00 39 5D +R 00 00 01 00 +T 2D 04 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 17 00 02 0B 17 00 +T 33 04 00 00 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 05 00 00 +T 39 04 00 00 +R 00 00 01 00 +T 39 04 00 00 DD 6E F1 DD 66 F2 DD 4E F9 DD 46 +R 00 00 01 00 +T 44 04 00 00 FA A7 ED 42 28 14 +R 00 00 01 00 +T 4A 04 00 00 +R 00 00 01 00 +T 4A 04 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T 52 04 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 15 00 02 0A 00 00 +T 59 04 00 00 FF FF C3 8E 09 00 00 +R 00 00 01 00 00 07 01 00 +T 5E 04 00 00 +R 00 00 01 00 +T 5E 04 00 00 18 3C +R 00 00 01 00 +T 60 04 00 00 +R 00 00 01 00 +T 60 04 00 00 21 04 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 6B 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 71 04 00 00 00 00 00 00 C5 E5 DD 6E F9 DD 66 +R 00 00 01 00 02 04 00 00 +T 7A 04 00 00 FA DD 4E F3 DD 46 F4 09 EB 3E +R 00 00 01 00 +T 84 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T 89 04 00 00 00 00 00 00 F1 F1 69 60 23 23 7E +R 00 00 01 00 02 04 00 00 +T 92 04 00 00 C6 04 77 AF DD 77 F7 DD 77 F8 +R 00 00 01 00 +T 9C 04 00 00 +R 00 00 01 00 +T 9C 04 00 00 18 00 +R 00 00 01 00 +T 9E 04 00 00 +R 00 00 01 00 +T 9E 04 00 00 +R 00 00 01 00 +T 9E 04 00 00 21 55 00 39 7E DD 86 F1 77 23 7E +R 00 00 01 00 +T A9 04 00 00 DD 8E F2 77 C3 90 01 00 00 +R 00 00 01 00 00 09 01 00 +T B0 04 00 00 +R 00 00 01 00 +T B0 04 00 00 +R 00 00 01 00 +T B0 04 00 00 21 04 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T BB 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T C1 04 00 00 00 00 00 00 7D B4 20 2A DD 7E 0A +R 00 00 01 00 02 04 00 00 +T CA 04 00 00 DD B6 0B 20 22 2A 00 00 00 00 7D +R 00 00 01 00 02 0A 0A 00 +T D3 04 00 00 B4 28 4F DD 6E 04 DD 66 05 4E 23 +R 00 00 01 00 +T DE 04 00 00 46 21 00 00 39 5D 54 3E +R 00 00 01 00 +T E6 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T EB 04 00 00 00 00 00 00 7D B4 28 34 +R 00 00 01 00 02 04 00 00 +T F1 04 00 00 +R 00 00 01 00 +T F1 04 00 00 +R 00 00 01 00 +T F1 04 00 00 +R 00 00 01 00 +T F1 04 00 00 +R 00 00 01 00 +T F1 04 00 00 +R 00 00 01 00 +T F1 04 00 00 21 00 00 E5 21 00 00 E5 DD 6E 0A +R 00 00 01 00 +T FC 04 00 00 DD 66 0B E5 DD 6E 04 DD 66 05 E5 +R 00 00 01 00 +T 07 05 00 00 21 08 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 12 05 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 18 05 00 00 CD 00 00 00 00 E1 E1 E1 E1 21 +R 00 00 01 00 02 05 00 00 +T 20 05 00 00 00 00 C3 8E 09 00 00 +R 00 00 01 00 00 07 01 00 +T 25 05 00 00 +R 00 00 01 00 +T 25 05 00 00 DD 7E 02 DD B6 03 28 11 +R 00 00 01 00 +T 2D 05 00 00 +R 00 00 01 00 +T 2D 05 00 00 2A 26 00 00 00 ED 4B 28 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 03 00 +T 34 05 00 00 CD 00 00 00 00 22 26 00 00 00 ED +R 00 00 01 00 02 05 04 00 02 0A 03 00 +T 3B 05 00 00 43 28 00 00 00 +R 00 00 01 00 02 05 03 00 +T 3E 05 00 00 +R 00 00 01 00 +T 3E 05 00 00 3E 01 DD 86 AF DD 77 AF DD 7E AE +R 00 00 01 00 +T 49 05 00 00 E6 00 47 DD 7E AF E6 FF B0 20 08 +R 00 00 01 00 +T 54 05 00 00 +R 00 00 01 00 +T 54 05 00 00 DD 34 AE 20 03 DD 34 AF +R 00 00 01 00 +T 5C 05 00 00 +R 00 00 01 00 +T 5C 05 00 00 +R 00 00 01 00 +T 5C 05 00 00 DD 35 B4 DD 46 B4 04 05 20 49 +R 00 00 01 00 +T 66 05 00 00 +R 00 00 01 00 +T 66 05 00 00 21 00 00 E5 0E 00 C5 0E 0B C5 DD +R 00 00 01 00 +T 71 05 00 00 6E 04 DD 66 05 4E 23 46 21 06 00 +R 00 00 01 00 +T 7C 05 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 17 00 +T 82 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 17 00 02 09 00 00 +T 89 05 00 00 F1 2A 1A 00 00 00 ED 4B +R 00 00 01 00 02 06 03 00 +T 8F 05 00 00 1C 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 04 03 00 02 09 04 00 +T 95 05 00 00 1A 00 00 00 ED 43 1C 00 00 00 DD +R 00 00 01 00 02 04 03 00 02 0A 03 00 +T 9C 05 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 15 00 +T A4 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 15 00 02 09 00 00 +T AA 05 00 00 FF FF C3 8E 09 00 00 +R 00 00 01 00 00 07 01 00 +T AF 05 00 00 +R 00 00 01 00 +T AF 05 00 00 21 04 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T BA 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T C0 05 00 00 00 00 00 00 DD 75 E7 DD 74 E8 7D +R 00 00 01 00 02 04 00 00 +T C9 05 00 00 B4 20 49 +R 00 00 01 00 +T CC 05 00 00 +R 00 00 01 00 +T CC 05 00 00 21 00 00 E5 0E 01 C5 0E 03 C5 DD +R 00 00 01 00 +T D7 05 00 00 6E 04 DD 66 05 4E 23 46 21 06 00 +R 00 00 01 00 +T E2 05 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 17 00 +T E8 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 17 00 02 09 00 00 +T EF 05 00 00 F1 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T F7 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T FC 05 00 00 00 00 00 00 2A 4A 00 00 00 ED 4B +R 00 00 01 00 02 04 00 00 02 09 03 00 +T 03 06 00 00 4C 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 04 03 00 02 09 04 00 +T 09 06 00 00 4A 00 00 00 ED 43 4C 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 0A 03 00 +T 10 06 00 00 FF FF C3 8E 09 00 00 +R 00 00 01 00 00 07 01 00 +T 15 06 00 00 +R 00 00 01 00 +T 15 06 00 00 21 26 00 DD 4E E7 DD 46 E8 09 CD +R 00 00 01 00 +T 20 06 00 00 00 00 00 00 21 12 00 DD 4E E7 DD +R 00 00 01 00 02 04 13 00 +T 29 06 00 00 46 E8 09 46 23 66 68 DD 75 E9 DD +R 00 00 01 00 +T 34 06 00 00 74 EA 01 16 00 09 7E 23 B6 28 14 +R 00 00 01 00 +T 3F 06 00 00 +R 00 00 01 00 +T 3F 06 00 00 21 16 00 DD 4E E9 DD 46 EA 09 56 +R 00 00 01 00 +T 4A 06 00 00 23 66 6A DD 75 E9 DD 74 EA +R 00 00 01 00 +T 53 06 00 00 +R 00 00 01 00 +T 53 06 00 00 21 0A 00 DD 4E E7 DD 46 E8 09 7E +R 00 00 01 00 +T 5E 06 00 00 23 B6 23 B6 23 B6 20 1A +R 00 00 01 00 +T 66 06 00 00 +R 00 00 01 00 +T 66 06 00 00 21 04 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 71 06 00 00 EB DD 75 E3 DD 74 E4 DD 71 E5 DD +R 00 00 01 00 +T 7C 06 00 00 70 E6 18 1E +R 00 00 01 00 +T 80 06 00 00 +R 00 00 01 00 +T 80 06 00 00 21 0A 00 DD 4E E7 DD 46 E8 09 5E +R 00 00 01 00 +T 8B 06 00 00 23 56 23 4E 23 46 EB DD 75 E3 DD +R 00 00 01 00 +T 96 06 00 00 74 E4 DD 71 E5 DD 70 E6 +R 00 00 01 00 +T 9E 06 00 00 +R 00 00 01 00 +T 9E 06 00 00 DD 7E EF DD B6 F0 28 6A DD 6E E3 +R 00 00 01 00 +T A9 06 00 00 DD 66 E4 DD 4E A4 DD 46 A5 A7 ED +R 00 00 01 00 +T B4 06 00 00 42 20 10 DD 6E E5 DD 66 E6 DD 4E +R 00 00 01 00 +T BF 06 00 00 A6 DD 46 A7 ED 42 28 49 +R 00 00 01 00 +T C7 06 00 00 +R 00 00 01 00 +T C7 06 00 00 +R 00 00 01 00 +T C7 06 00 00 +R 00 00 01 00 +T C7 06 00 00 +R 00 00 01 00 +T C7 06 00 00 21 00 00 E5 0E 05 C5 0E 03 C5 DD +R 00 00 01 00 +T D2 06 00 00 6E 04 DD 66 05 4E 23 46 21 06 00 +R 00 00 01 00 +T DD 06 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 17 00 +T E3 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 17 00 02 09 00 00 +T EA 06 00 00 F1 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T F2 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T F7 06 00 00 00 00 00 00 2A 4A 00 00 00 ED 4B +R 00 00 01 00 02 04 00 00 02 09 03 00 +T FE 06 00 00 4C 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 04 03 00 02 09 04 00 +T 04 07 00 00 4A 00 00 00 ED 43 4C 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 0A 03 00 +T 0B 07 00 00 FF FF C3 8E 09 00 00 +R 00 00 01 00 00 07 01 00 +T 10 07 00 00 +R 00 00 01 00 +T 10 07 00 00 DD 4E A8 DD 46 A9 21 10 00 DD 5E +R 00 00 01 00 +T 1B 07 00 00 E9 DD 56 EA 19 56 23 66 6A A7 ED +R 00 00 01 00 +T 26 07 00 00 42 38 37 +R 00 00 01 00 +T 29 07 00 00 +R 00 00 01 00 +T 29 07 00 00 DD 6E F7 DD 66 F8 E5 DD 6E 04 DD +R 00 00 01 00 +T 34 07 00 00 66 05 E5 21 04 00 39 E5 DD 6E E5 +R 00 00 01 00 +T 3F 07 00 00 DD 66 E6 E5 DD 6E E3 DD 66 E4 E5 +R 00 00 01 00 +T 4A 07 00 00 DD 5E E9 DD 56 EA 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 52 07 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0D 00 02 0A 00 00 +T 59 07 00 00 F1 F1 F1 F1 C3 8E 09 00 00 +R 00 00 01 00 00 09 01 00 +T 60 07 00 00 +R 00 00 01 00 +T 60 07 00 00 DD 7E B0 E6 02 47 DD 7E B1 E6 00 +R 00 00 01 00 +T 6B 07 00 00 B0 28 5E +R 00 00 01 00 +T 6E 07 00 00 +R 00 00 01 00 +T 6E 07 00 00 21 10 00 DD 4E E9 DD 46 EA 09 46 +R 00 00 01 00 +T 79 07 00 00 23 66 68 DD 75 FB DD 74 FC 21 +R 00 00 01 00 +T 83 07 00 00 5B 00 39 E5 0E 04 C5 0E 03 C5 DD +R 00 00 01 00 +T 8E 07 00 00 6E 04 DD 66 05 4E 23 46 21 06 00 +R 00 00 01 00 +T 99 07 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 17 00 +T 9F 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 17 00 02 09 00 00 +T A6 07 00 00 F1 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T AE 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T B3 07 00 00 00 00 00 00 2A 6E 00 00 00 ED 4B +R 00 00 01 00 02 04 00 00 02 09 03 00 +T BA 07 00 00 70 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 04 03 00 02 09 04 00 +T C0 07 00 00 6E 00 00 00 ED 43 70 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 0A 03 00 +T C7 07 00 00 FF FF C3 8E 09 00 00 +R 00 00 01 00 00 07 01 00 +T CC 07 00 00 +R 00 00 01 00 +T CC 07 00 00 DD 6E AC DD 66 AD DD 75 EB DD 74 +R 00 00 01 00 +T D7 07 00 00 EC DD 7E B0 0F 0F E6 01 26 00 6F +R 00 00 01 00 +T E2 07 00 00 DD 75 ED DD 74 EE DD 6E A8 DD 66 +R 00 00 01 00 +T ED 07 00 00 A9 DD 4E DF DD 46 E0 A7 ED 42 DD +R 00 00 01 00 +T F8 07 00 00 75 E1 DD 74 E2 +R 00 00 01 00 +T FD 07 00 00 +R 00 00 01 00 +T FD 07 00 00 DD 7E E1 DD B6 E2 CA 6C 09 00 00 +R 00 00 01 00 00 0B 01 00 +T 06 08 00 00 +R 00 00 01 00 +T 06 08 00 00 DD 6E DF DD 66 E0 DD 4E E1 DD 46 +R 00 00 01 00 +T 11 08 00 00 E2 09 4D 44 21 10 00 DD 5E E9 DD +R 00 00 01 00 +T 1C 08 00 00 56 EA 19 56 23 66 6A A7 ED 42 38 +R 00 00 01 00 +T 27 08 00 00 1E +R 00 00 01 00 +T 28 08 00 00 +R 00 00 01 00 +T 28 08 00 00 DD 6E E1 DD 66 E2 DD 75 FB DD 74 +R 00 00 01 00 +T 33 08 00 00 FC DD CB ED 46 28 06 DD CB B0 D6 +R 00 00 01 00 +T 3E 08 00 00 18 04 +R 00 00 01 00 +T 40 08 00 00 +R 00 00 01 00 +T 40 08 00 00 DD CB B0 96 +R 00 00 01 00 +T 44 08 00 00 +R 00 00 01 00 +T 44 08 00 00 18 32 +R 00 00 01 00 +T 46 08 00 00 +R 00 00 01 00 +T 46 08 00 00 21 10 00 DD 4E E9 DD 46 EA 09 46 +R 00 00 01 00 +T 51 08 00 00 23 66 68 DD 4E DF DD 46 E0 A7 ED +R 00 00 01 00 +T 5C 08 00 00 42 7D E6 F8 4F 7C E6 FF 47 DD 71 +R 00 00 01 00 +T 67 08 00 00 FB DD 70 FC 21 10 00 39 7E F6 04 +R 00 00 01 00 +T 72 08 00 00 77 23 7E F6 00 77 +R 00 00 01 00 +T 78 08 00 00 +R 00 00 01 00 +T 78 08 00 00 DD 6E DF DD 66 E0 DD 4E FB DD 46 +R 00 00 01 00 +T 83 08 00 00 FC 09 DD 75 A8 DD 74 A9 C5 DD 6E +R 00 00 01 00 +T 8E 08 00 00 AC DD 66 AD DD 4E EB DD 46 EC A7 +R 00 00 01 00 +T 99 08 00 00 ED 42 E5 DD 6E 04 DD 66 05 4E 23 +R 00 00 01 00 +T A4 08 00 00 46 21 61 00 39 5D 54 3E +R 00 00 01 00 +T AC 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T B1 08 00 00 00 00 00 00 F1 F1 DD 7E FD DD B6 +R 00 00 01 00 02 04 00 00 +T BA 08 00 00 FE 20 25 +R 00 00 01 00 +T BD 08 00 00 +R 00 00 01 00 +T BD 08 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T C5 08 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 15 00 02 0A 00 00 +T CC 08 00 00 6E 00 00 00 ED 4B 70 00 00 00 CD +R 00 00 01 00 02 04 03 00 02 0A 03 00 +T D3 08 00 00 00 00 00 00 22 6E 00 00 00 ED 43 +R 00 00 01 00 02 04 04 00 02 09 03 00 +T DA 08 00 00 70 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 03 00 +T E0 08 00 00 8E 09 00 00 +R 00 00 01 00 00 04 01 00 +T E2 08 00 00 +R 00 00 01 00 +T E2 08 00 00 21 00 00 E5 21 5F 00 39 E5 21 +R 00 00 01 00 +T EC 08 00 00 04 00 39 E5 DD 6E E5 DD 66 E6 E5 +R 00 00 01 00 +T F7 08 00 00 DD 6E E3 DD 66 E4 E5 DD 5E E9 DD +R 00 00 01 00 +T 02 09 00 00 56 EA 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0D 00 +T 07 09 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 0E 09 00 00 F1 F1 F1 7D A4 3C 20 24 +R 00 00 01 00 +T 16 09 00 00 +R 00 00 01 00 +T 16 09 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T 1E 09 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 15 00 02 0A 00 00 +T 25 09 00 00 6E 00 00 00 ED 4B 70 00 00 00 CD +R 00 00 01 00 02 04 03 00 02 0A 03 00 +T 2C 09 00 00 00 00 00 00 22 6E 00 00 00 ED 43 +R 00 00 01 00 02 04 04 00 02 09 03 00 +T 33 09 00 00 70 00 00 00 21 FF FF 18 54 +R 00 00 01 00 02 04 03 00 +T 3A 09 00 00 +R 00 00 01 00 +T 3A 09 00 00 2A 74 00 00 00 ED 4B 76 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 03 00 +T 41 09 00 00 CD 00 00 00 00 22 74 00 00 00 ED +R 00 00 01 00 02 05 04 00 02 0A 03 00 +T 48 09 00 00 43 76 00 00 00 21 0C 00 39 7E DD +R 00 00 01 00 02 05 03 00 +T 51 09 00 00 86 FB 77 23 7E DD 8E FC 77 21 +R 00 00 01 00 +T 5B 09 00 00 41 00 39 7E DD 96 FB 77 23 7E DD +R 00 00 01 00 +T 66 09 00 00 9E FC 77 C3 FD 07 00 00 +R 00 00 01 00 00 08 01 00 +T 6C 09 00 00 +R 00 00 01 00 +T 6C 09 00 00 2A 68 00 00 00 ED 4B 6A 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 03 00 +T 73 09 00 00 CD 00 00 00 00 22 68 00 00 00 ED +R 00 00 01 00 02 05 04 00 02 0A 03 00 +T 7A 09 00 00 43 6A 00 00 00 DD 5E 04 DD 56 05 +R 00 00 01 00 02 05 03 00 +T 83 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 15 00 02 0A 15 00 +T 89 09 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 00 00 +T 8E 09 00 00 +R 00 00 01 00 +T 8E 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/internet_lib/ip_send.rel b/src/nos/lib/internet_lib/ip_send.rel new file mode 100644 index 00000000..8768edc6 --- /dev/null +++ b/src/nos/lib/internet_lib/ip_send.rel @@ -0,0 +1,194 @@ +XL4 +H 2 areas 12 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Id_cntr Ref00000000 +S _secclock Ref00000000 +S _len_p Ref00000000 +S _dumpip Ref00000000 +S _Ip_mib Ref00000000 +S ?L_INC_L03 Ref00000000 +S _htonip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _net_route Ref00000000 +S _locaddr Ref00000000 +S _ismyaddr Ref00000000 +S .__.ABS. Def00000000 +S _Ip_trace Ref00000000 +S _Loopback Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F0 flags 0 +S _ip_send Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C0 FF 2A +R 00 00 01 00 02 05 0F 00 +T 06 00 00 00 3E 00 00 00 ED 4B 40 00 00 00 CD +R 00 00 01 00 02 04 05 00 02 0A 05 00 +T 0D 00 00 00 00 00 00 00 22 3E 00 00 00 ED 43 +R 00 00 01 00 02 04 06 00 02 09 05 00 +T 14 00 00 00 40 00 00 00 DD 7E 14 DD B6 15 20 +R 00 00 01 00 02 04 05 00 +T 1D 00 00 00 06 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 21 FF FF C3 ED 01 00 00 +R 00 00 01 00 00 08 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 DD 7E 02 DD B6 03 DD B6 04 DD B6 +R 00 00 01 00 +T 2F 00 00 00 05 20 20 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 DD 4E 0C DD 46 0D DD 5E 0A DD 56 +R 00 00 01 00 +T 3D 00 00 00 0B 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 43 00 00 00 CD 00 00 00 00 DD 75 02 DD 74 03 +R 00 00 01 00 02 05 00 00 +T 4C 00 00 00 DD 71 04 DD 70 05 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 7E 16 DD B6 17 20 22 DD 6E 14 +R 00 00 01 00 +T 5D 00 00 00 DD 66 15 7E 23 B6 28 17 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 DD 6E 14 DD 66 15 5E 23 56 3E +R 00 00 01 00 +T 6F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 74 00 00 00 00 00 00 00 DD 75 16 DD 74 17 +R 00 00 01 00 02 04 00 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 DD 7E 18 DD B6 19 20 0E +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0B 01 00 +T 8B 00 00 00 2B DD 75 18 DD 74 19 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 AF DD B6 12 20 06 +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 3A 0E 00 00 00 DD 77 12 +R 00 00 01 00 02 05 05 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 DD 36 D2 04 DD 46 10 DD 70 D3 21 +R 00 00 01 00 +T A9 00 00 00 14 00 DD 4E 16 DD 46 17 09 DD 75 +R 00 00 01 00 +T B4 00 00 00 C8 DD 74 C9 DD 6E 18 DD 66 19 DD +R 00 00 01 00 +T BF 00 00 00 75 CA DD 74 CB AF DD 77 CC DD 77 +R 00 00 01 00 +T CA 00 00 00 CD 21 10 00 39 7E E6 FB 77 23 7E +R 00 00 01 00 +T D5 00 00 00 E6 FF 77 DD 4E 1A 06 00 CB 41 28 +R 00 00 01 00 +T E0 00 00 00 06 DD CB D0 CE 18 04 +R 00 00 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 DD CB D0 8E +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 21 10 00 39 7E E6 FE 77 23 7E E6 +R 00 00 01 00 +T F6 00 00 00 FF 77 DD 46 12 DD 70 D4 DD 46 0E +R 00 00 01 00 +T 01 01 00 00 DD 70 D5 DD 4E 04 DD 46 05 DD 6E +R 00 00 01 00 +T 0C 01 00 00 02 DD 66 03 DD 75 C0 DD 74 C1 DD +R 00 00 01 00 +T 17 01 00 00 71 C2 DD 70 C3 DD 4E 0C DD 46 0D +R 00 00 01 00 +T 22 01 00 00 DD 6E 0A DD 66 0B DD 75 C4 DD 74 +R 00 00 01 00 +T 2D 01 00 00 C5 DD 71 C6 DD 70 C7 DD 36 D6 00 +R 00 00 01 00 +T 38 01 00 00 2A 00 00 00 00 7D B4 28 26 +R 00 00 01 00 02 05 0D 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 21 00 00 E5 21 00 00 E5 DD 6E 14 +R 00 00 01 00 +T 4A 01 00 00 DD 66 15 4E 23 46 C5 21 06 00 39 +R 00 00 01 00 +T 55 01 00 00 4D 44 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 5D 01 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 64 01 00 00 E1 +R 00 00 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 21 00 00 E5 DD 4E 14 DD 46 15 21 +R 00 00 01 00 +T 70 01 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 78 01 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 7F 01 00 00 04 00 39 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 8A 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 8F 01 00 00 00 00 00 00 7D B4 28 44 +R 00 00 01 00 02 04 00 00 +T 95 01 00 00 +R 00 00 01 00 +T 95 01 00 00 DD 4E 14 DD 46 15 11 00 00 00 00 +R 00 00 01 00 02 0B 0E 00 +T 9E 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T A4 01 00 00 00 00 00 00 2A 51 00 00 00 ED 4B +R 00 00 01 00 02 04 00 00 02 09 0E 00 +T AB 01 00 00 53 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 04 0E 00 02 09 06 00 +T B1 01 00 00 51 00 00 00 ED 43 53 00 00 00 2A +R 00 00 01 00 02 04 0E 00 02 0A 0E 00 +T B8 01 00 00 55 00 00 00 ED 4B 57 00 00 00 CD +R 00 00 01 00 02 04 0E 00 02 0A 0E 00 +T BF 01 00 00 00 00 00 00 22 55 00 00 00 ED 43 +R 00 00 01 00 02 04 06 00 02 09 0E 00 +T C6 01 00 00 57 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 2B 09 02 00 +T CB 01 00 00 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T D1 01 00 00 61 00 00 00 ED 43 63 00 00 00 18 +R 00 00 01 00 02 04 0E 00 02 0A 0E 00 +T D8 01 00 00 11 +R 00 00 01 00 +T D9 01 00 00 +R 00 00 01 00 +T D9 01 00 00 DD 4E 14 DD 46 15 11 00 00 3E +R 00 00 01 00 +T E3 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T E8 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T EA 01 00 00 +R 00 00 01 00 +T EA 01 00 00 21 00 00 +R 00 00 01 00 +T ED 01 00 00 +R 00 00 01 00 +T ED 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 diff --git a/src/nos/lib/internet_lib/ip_timeout.rel b/src/nos/lib/internet_lib/ip_timeout.rel new file mode 100644 index 00000000..355e5bfa --- /dev/null +++ b/src/nos/lib/internet_lib/ip_timeout.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Ip_mib Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _free_reasm Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F flags 0 +S _ip_timeout Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 2B 0A 04 00 +T 06 00 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 0C 00 00 00 62 00 00 00 ED 4B 64 00 00 00 CD +R 00 00 01 00 02 04 01 00 02 0A 01 00 +T 13 00 00 00 00 00 00 00 22 62 00 00 00 ED 43 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 1A 00 00 00 64 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 03 00 diff --git a/src/nos/lib/internet_lib/ipcmd.rel b/src/nos/lib/internet_lib/ipcmd.rel new file mode 100644 index 00000000..ff41226a --- /dev/null +++ b/src/nos/lib/internet_lib/ipcmd.rel @@ -0,0 +1,1155 @@ +XL4 +H 6 areas 4F global symbols +S _resolve Ref00000000 +S _inet_ntoa Ref00000000 +S ___036c_9b70_Routing_20lookups_3 Ref00000000 +S ___0293_5f88_IP_20rx_20tracing Ref00000000 +S _Routes Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0591_5069_status Ref00000000 +S ___0561_a5ec_route_20lookup_20_3 Ref00000000 +S ___046d_4853_drop Ref00000000 +S ___0137_7643__25s_0a Ref00000000 +S ___010b_90e5__25_2d7lu Ref00000000 +S _Badhost Ref00000000 +S _strncmp Ref00000000 +S _if_lookup Ref00000000 +S ___05c0_e444_ttl Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S ___0132_63ed__25lu_0a Ref00000000 +S ___00ff_1455__25_2d17s Ref00000000 +S ___03fd_41b5_add Ref00000000 +S ___00b5_ad83__20dest_20_25s Ref00000000 +S _Ip_mib Ref00000000 +S ___0587_61f2_src_20_25s Ref00000000 +S ___0287_9144_Host_20_25s_20_28_2 Ref00000000 +S _printf Ref00000000 +S _Rtlookups Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___01fd_daf3_Can_27t_20add_20rou Ref00000000 +S ___055f_bbd2_route_20drop_20_3cd Ref00000000 +S ___0288_862c_Host_20_25s_20unkno Ref00000000 +S _strchr Ref00000000 +S _R_default Ref00000000 +S ___00be_8f2f__20id_20_25u_20pctl Ref00000000 +S _strcmp Ref00000000 +S ___04c0_8f77_lookup Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___0563_2c09_rtimer Ref00000000 +S _read_timer Ref00000000 +S .__.ABS. Def00000000 +S _rt_lookup Ref00000000 +S ___00f9_7335__25_2d13s Ref00000000 +S _Rtchits Ref00000000 +S ___0290_5812_IP_20Time_2dto_2dli Ref00000000 +S ___0126_6d8a__25c_20 Ref00000000 +S ___0109_eb89__25_2d4u Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?L_MUL_L03 Ref00000000 +S ___03ff_6783_addprivate Ref00000000 +S _Ip_trace Ref00000000 +S ___02a2_42ac_Interface_20_22_25s Ref00000000 +S ___00fb_0d8d__25_2d16s Ref00000000 +S _Reasmq Ref00000000 +S ___05bd_4f5f_trace Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ___017a_ba4c__28_252u_29_25_2d20 Ref00000000 +S _atoi Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _rt_add Ref00000000 +S ___010d_da22__25_2d8lu Ref00000000 +S _atol Ref00000000 +S ___055e_d581_route_20addprivate_ Ref00000000 +S ___0292_8cdb_IP_20reasm_20timeou Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S __printf Ref00000000 +S ___0484_28f4_flush Ref00000000 +S ___035d_1ee5_Reassembly_20fragme Ref00000000 +S ___0032_de40__20_20_20_20_20 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setbool Ref00000000 +S ___055c_ea02_route_20add_20_3cde Ref00000000 +S ___0400_9712_address Ref00000000 +S _rt_drop Ref00000000 +S _setlong Ref00000000 +S ___00c7_826b__20offset_20_25u_20 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC7 flags 0 +S _doroute Def0000010F +S _doip Def00000000 +A CSTR size 56 flags 0 +A UDATA0 size 4 flags 0 +S _Ip_addr Def00000000 +A IDATA0 size 9C flags 0 +A CDATA0 size 9C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 2C 00 +T 09 00 00 00 E5 C5 4B 42 11 00 00 00 00 3E +R 00 00 01 00 00 09 04 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 4B 00 02 09 4B 00 +T 16 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 0B 19 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 2C 00 +T 23 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T 29 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 2F 00 2B 0A 45 00 +T 2F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 45 00 02 09 05 00 +T 36 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 19 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 CD 00 00 00 00 FC FF 11 02 80 DD +R 00 00 01 00 02 05 34 00 +T 44 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 4F 00 00 00 30 25 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 ED 4B 02 00 00 00 ED 5B +R 00 00 01 00 00 06 03 00 +T 57 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 01 00 +T 5C 00 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 01 00 02 09 05 00 +T 63 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 09 00 02 0A 09 00 +T 69 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 40 00 02 0A 40 00 +T 6F 00 00 00 00 00 00 00 F1 F1 F1 18 57 +R 00 00 01 00 02 04 05 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 81 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T 87 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 05 00 +T 90 00 00 00 71 FE DD 70 FF 7D B4 B1 B0 20 1F +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T A6 00 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 0B 00 +T AC 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T B1 00 00 00 00 00 00 00 F1 F1 21 01 00 18 16 +R 00 00 01 00 02 04 05 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 DD 4E FE DD 46 FF DD 6E FC DD 66 +R 00 00 01 00 +T C5 00 00 00 FD 22 00 00 00 00 ED 43 +R 00 00 01 00 00 06 03 00 +T CB 00 00 00 02 00 00 00 +R 00 00 01 00 00 04 03 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 21 00 00 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T D3 00 00 00 +R 00 00 01 00 +T D3 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 2C 00 +T D9 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 3D 00 02 0A 3D 00 +T DF 00 00 00 11 50 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 14 00 2B 0A 49 00 +T E5 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 49 00 02 09 05 00 +T EC 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 19 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 2C 00 +T F7 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 29 00 02 0A 29 00 +T FD 00 00 00 11 0E 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 14 00 2B 0A 49 00 +T 03 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 49 00 02 09 05 00 +T 0A 01 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 19 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 CD 00 00 00 00 FA FF 11 02 80 DD +R 00 00 01 00 02 05 34 00 +T 18 01 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 23 01 00 00 38 24 +R 00 00 01 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 DD 6E 0A DD 66 0B E5 DD 6E 04 DD +R 00 00 01 00 +T 30 01 00 00 66 05 E5 DD 4E 02 DD 46 03 11 +R 00 00 01 00 +T 3A 01 00 00 4E 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 4B 00 +T 3F 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 4B 00 02 09 05 00 +T 46 01 00 00 C3 F8 01 00 00 +R 00 00 01 00 00 05 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 17 00 +T 4F 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 17 00 02 0A 05 00 +T 56 01 00 00 DD 36 FC 1F DD 36 FD 00 +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 DD CB FD 7E C2 E8 01 00 00 +R 00 00 01 00 00 09 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 01 07 80 DD 6E FA DD 66 FB 3E 80 +R 00 00 01 00 +T 77 01 00 00 AC 67 ED 42 30 5B +R 00 00 01 00 +T 7D 01 00 00 +R 00 00 01 00 +T 7D 01 00 00 01 0E 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 87 01 00 00 00 00 00 00 DD 6E FA DD 66 FB 29 +R 00 00 01 00 02 04 35 00 +T 90 01 00 00 19 01 00 00 00 00 09 46 23 66 68 +R 00 00 01 00 02 06 04 00 +T 99 01 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 DD 7E FE DD B6 FF 28 27 +R 00 00 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 DD 5E FE DD 56 FF CD 0E 06 00 00 +R 00 00 01 00 00 0B 01 00 +T B0 01 00 00 7D A4 3C 20 05 +R 00 00 01 00 +T B5 01 00 00 +R 00 00 01 00 +T B5 01 00 00 21 00 00 18 3E +R 00 00 01 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 DD 6E FE DD 66 FF 23 23 46 23 66 +R 00 00 01 00 +T C5 01 00 00 68 DD 75 FE DD 74 FF 18 D1 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 18 94 +R 00 00 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 DD 6E FC DD 66 FD 2B DD 75 FC DD +R 00 00 01 00 +T E3 01 00 00 74 FD C3 5E 01 00 00 +R 00 00 01 00 00 07 01 00 +T E8 01 00 00 +R 00 00 01 00 +T E8 01 00 00 2A 12 00 00 00 7D B4 28 06 +R 00 00 01 00 02 05 1E 00 +T EF 01 00 00 +R 00 00 01 00 +T EF 01 00 00 11 00 00 00 00 CD 0E 06 00 00 +R 00 00 01 00 02 05 1E 00 00 0A 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 21 00 00 +R 00 00 01 00 +T F8 01 00 00 +R 00 00 01 00 +T F8 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 CD 00 00 00 00 EC FF 21 04 00 E5 +R 00 00 01 00 02 05 34 00 +T 04 02 00 00 01 48 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 0D 02 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T 13 02 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 0C 00 02 09 05 00 +T 1A 02 00 00 B4 20 06 +R 00 00 01 00 +T 1D 02 00 00 +R 00 00 01 00 +T 1D 02 00 00 DD 36 FE 01 18 04 +R 00 00 01 00 +T 23 02 00 00 +R 00 00 01 00 +T 23 02 00 00 DD 36 FE 00 +R 00 00 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 01 4D 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 30 02 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 20 00 +T 38 02 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 20 00 02 09 05 00 +T 3F 02 00 00 20 17 +R 00 00 01 00 +T 41 02 00 00 +R 00 00 01 00 +T 41 02 00 00 AF DD 77 EE DD 77 EF DD 77 F0 DD +R 00 00 01 00 +T 4C 02 00 00 77 F1 AF DD 77 F6 DD 77 F7 C3 +R 00 00 01 00 +T 56 02 00 00 EB 02 00 00 +R 00 00 01 00 00 04 01 00 +T 58 02 00 00 +R 00 00 01 00 +T 58 02 00 00 01 2F 00 DD 6E 04 DD 66 05 23 23 +R 00 00 01 00 +T 63 02 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 1D 00 +T 69 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1D 00 02 09 05 00 +T 70 02 00 00 F8 DD 74 F9 7D B4 28 26 +R 00 00 01 00 +T 78 02 00 00 +R 00 00 01 00 +T 78 02 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T 83 02 00 00 74 F9 2B 36 00 DD 5E F8 DD 56 F9 +R 00 00 01 00 +T 8E 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 37 00 02 0A 37 00 +T 94 02 00 00 00 00 00 00 DD 75 F6 DD 74 F7 18 +R 00 00 01 00 02 04 05 00 +T 9D 02 00 00 08 +R 00 00 01 00 +T 9E 02 00 00 +R 00 00 01 00 +T 9E 02 00 00 DD 36 F6 20 DD 36 F7 00 +R 00 00 01 00 +T A6 02 00 00 +R 00 00 01 00 +T A6 02 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T B1 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T B7 02 00 00 00 00 00 00 DD 75 EE DD 74 EF DD +R 00 00 01 00 02 04 05 00 +T C0 02 00 00 71 F0 DD 70 F1 7D B4 B1 B0 20 20 +R 00 00 01 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T D6 02 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 0B 00 +T DC 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T E1 02 00 00 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 04 05 00 +T E9 02 00 00 3E 04 00 00 +R 00 00 01 00 00 04 01 00 +T EB 02 00 00 +R 00 00 01 00 +T EB 02 00 00 +R 00 00 01 00 +T EB 02 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T F6 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0D 00 +T FB 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0D 00 02 09 05 00 +T 02 03 00 00 EC DD 74 ED 7D B4 20 26 +R 00 00 01 00 +T 0A 03 00 00 +R 00 00 01 00 +T 0A 03 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 15 03 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 30 00 +T 1C 03 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 30 00 2B 0A 40 00 +T 22 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 40 00 02 09 05 00 +T 29 03 00 00 F1 21 01 00 C3 3E 04 00 00 +R 00 00 01 00 00 09 01 00 +T 30 03 00 00 +R 00 00 01 00 +T 30 03 00 00 DD 4E 02 DD 46 03 21 03 00 CD +R 00 00 01 00 +T 3A 03 00 00 00 00 00 00 30 4B +R 00 00 01 00 02 04 3E 00 +T 3E 03 00 00 +R 00 00 01 00 +T 3E 03 00 00 21 06 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 49 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T 4E 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 05 00 +T 55 03 00 00 F2 DD 74 F3 DD 71 F4 DD 70 F5 7D +R 00 00 01 00 +T 60 03 00 00 B4 B1 B0 20 22 +R 00 00 01 00 +T 65 03 00 00 +R 00 00 01 00 +T 65 03 00 00 21 06 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 70 03 00 00 23 46 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 08 0B 00 +T 78 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T 7D 03 00 00 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 04 05 00 +T 85 03 00 00 3E 04 00 00 +R 00 00 01 00 00 04 01 00 +T 87 03 00 00 +R 00 00 01 00 +T 87 03 00 00 18 0D +R 00 00 01 00 +T 89 03 00 00 +R 00 00 01 00 +T 89 03 00 00 AF DD 77 F2 DD 77 F3 DD 77 F4 DD +R 00 00 01 00 +T 94 03 00 00 77 F5 +R 00 00 01 00 +T 96 03 00 00 +R 00 00 01 00 +T 96 03 00 00 DD 4E 02 DD 46 03 21 04 00 CD +R 00 00 01 00 +T A0 03 00 00 00 00 00 00 30 23 +R 00 00 01 00 02 04 3E 00 +T A4 03 00 00 +R 00 00 01 00 +T A4 03 00 00 21 08 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T AF 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 3B 00 +T B4 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 3B 00 02 09 05 00 +T BB 03 00 00 FA DD 74 FB DD 71 FC DD 70 FD 18 +R 00 00 01 00 +T C6 03 00 00 0E +R 00 00 01 00 +T C7 03 00 00 +R 00 00 01 00 +T C7 03 00 00 AF DD 36 FA 01 DD 77 FB DD 77 FC +R 00 00 01 00 +T D2 03 00 00 DD 77 FD +R 00 00 01 00 +T D5 03 00 00 +R 00 00 01 00 +T D5 03 00 00 DD 6E FE E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T E0 03 00 00 E5 DD 6E FC DD 66 FD E5 DD 6E FA +R 00 00 01 00 +T EB 03 00 00 DD 66 FB E5 DD 6E EC DD 66 ED E5 +R 00 00 01 00 +T F6 03 00 00 DD 6E F4 DD 66 F5 E5 DD 6E F2 DD +R 00 00 01 00 +T 01 04 00 00 66 F3 E5 DD 6E F6 DD 66 F7 E5 DD +R 00 00 01 00 +T 0C 04 00 00 4E F0 DD 46 F1 DD 5E EE DD 56 EF +R 00 00 01 00 +T 17 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 39 00 02 0A 39 00 +T 1D 04 00 00 00 00 00 00 EB 21 12 00 39 F9 EB +R 00 00 01 00 02 04 05 00 +T 26 04 00 00 7D B4 20 11 +R 00 00 01 00 +T 2A 04 00 00 +R 00 00 01 00 +T 2A 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1A 00 02 0B 1A 00 +T 30 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 40 00 02 0B 40 00 +T 36 04 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 05 00 +T 3B 04 00 00 +R 00 00 01 00 +T 3B 04 00 00 21 00 00 +R 00 00 01 00 +T 3E 04 00 00 +R 00 00 01 00 +T 3E 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T 41 04 00 00 +R 00 00 01 00 +T 41 04 00 00 CD 00 00 00 00 F8 FF 01 +R 00 00 01 00 02 05 34 00 +T 47 04 00 00 4D 00 00 00 DD 6E 04 DD 66 05 23 +R 00 00 01 00 00 04 02 00 +T 50 04 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 20 00 +T 57 04 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 20 00 02 09 05 00 +T 5E 04 00 00 20 17 +R 00 00 01 00 +T 60 04 00 00 +R 00 00 01 00 +T 60 04 00 00 AF DD 77 FC DD 77 FD DD 77 FE DD +R 00 00 01 00 +T 6B 04 00 00 77 FF AF DD 77 FA DD 77 FB C3 +R 00 00 01 00 +T 75 04 00 00 09 05 00 00 +R 00 00 01 00 00 04 01 00 +T 77 04 00 00 +R 00 00 01 00 +T 77 04 00 00 01 2F 00 DD 6E 04 DD 66 05 23 23 +R 00 00 01 00 +T 82 04 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 1D 00 +T 88 04 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1D 00 02 09 05 00 +T 8F 04 00 00 F8 DD 74 F9 7D B4 28 26 +R 00 00 01 00 +T 97 04 00 00 +R 00 00 01 00 +T 97 04 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T A2 04 00 00 74 F9 2B 36 00 DD 5E F8 DD 56 F9 +R 00 00 01 00 +T AD 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 37 00 02 0A 37 00 +T B3 04 00 00 00 00 00 00 DD 75 FA DD 74 FB 18 +R 00 00 01 00 02 04 05 00 +T BC 04 00 00 08 +R 00 00 01 00 +T BD 04 00 00 +R 00 00 01 00 +T BD 04 00 00 DD 36 FA 20 DD 36 FB 00 +R 00 00 01 00 +T C5 04 00 00 +R 00 00 01 00 +T C5 04 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T D0 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T D6 04 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 05 00 +T DF 04 00 00 71 FE DD 70 FF 7D B4 B1 B0 20 1F +R 00 00 01 00 +T EA 04 00 00 +R 00 00 01 00 +T EA 04 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T F5 04 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 0B 00 +T FB 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T 00 05 00 00 00 00 00 00 F1 F1 21 01 00 18 1C +R 00 00 01 00 02 04 05 00 +T 09 05 00 00 +R 00 00 01 00 +T 09 05 00 00 +R 00 00 01 00 +T 09 05 00 00 DD 6E FA DD 66 FB E5 DD 4E FE DD +R 00 00 01 00 +T 14 05 00 00 46 FF DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 1D 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 48 00 02 09 48 00 +T 22 05 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 05 00 +T 25 05 00 00 +R 00 00 01 00 +T 25 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T 28 05 00 00 +R 00 00 01 00 +T 28 05 00 00 CD 00 00 00 00 F8 FF 3A +R 00 00 01 00 02 05 34 00 +T 2E 05 00 00 25 00 00 00 3D 20 13 +R 00 00 01 00 02 04 1E 00 +T 33 05 00 00 +R 00 00 01 00 +T 33 05 00 00 21 00 00 E5 01 00 00 11 00 00 3E +R 00 00 01 00 +T 3E 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 48 00 02 09 48 00 +T 43 05 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 05 00 +T 46 05 00 00 +R 00 00 01 00 +T 46 05 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 +T 4D 05 00 00 +R 00 00 01 00 +T 4D 05 00 00 01 07 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T 58 05 00 00 AC 67 ED 42 D2 08 06 00 00 +R 00 00 01 00 00 09 01 00 +T 5F 05 00 00 +R 00 00 01 00 +T 5F 05 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 66 05 00 00 +R 00 00 01 00 +T 66 05 00 00 01 20 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 71 05 00 00 AC 67 ED 42 D2 FD 05 00 00 +R 00 00 01 00 00 09 01 00 +T 78 05 00 00 +R 00 00 01 00 +T 78 05 00 00 01 0E 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 82 05 00 00 00 00 00 00 DD 6E FC DD 66 FD 29 +R 00 00 01 00 02 04 35 00 +T 8B 05 00 00 19 01 00 00 00 00 09 46 23 66 68 +R 00 00 01 00 02 06 04 00 +T 94 05 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 9A 05 00 00 +R 00 00 01 00 +T 9A 05 00 00 DD 7E F8 DD B6 F9 28 50 +R 00 00 01 00 +T A2 05 00 00 +R 00 00 01 00 +T A2 05 00 00 DD 6E F8 DD 66 F9 23 23 46 23 66 +R 00 00 01 00 +T AD 05 00 00 68 DD 75 FA DD 74 FB 21 25 00 DD +R 00 00 01 00 +T B8 05 00 00 4E F8 DD 46 F9 09 46 05 20 22 +R 00 00 01 00 +T C2 05 00 00 +R 00 00 01 00 +T C2 05 00 00 21 08 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T CD 05 00 00 23 56 D5 21 04 00 09 5E 23 56 23 +R 00 00 01 00 +T D8 05 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 48 00 +T DE 05 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T E4 05 00 00 +R 00 00 01 00 +T E4 05 00 00 DD 6E FA DD 66 FB DD 75 F8 DD 74 +R 00 00 01 00 +T EF 05 00 00 F9 18 A8 +R 00 00 01 00 +T F2 05 00 00 +R 00 00 01 00 +T F2 05 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T FA 05 00 00 +R 00 00 01 00 +T FA 05 00 00 C3 66 05 00 00 +R 00 00 01 00 00 05 01 00 +T FD 05 00 00 +R 00 00 01 00 +T FD 05 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 05 06 00 00 +R 00 00 01 00 +T 05 06 00 00 C3 4D 05 00 00 +R 00 00 01 00 00 05 01 00 +T 08 06 00 00 +R 00 00 01 00 +T 08 06 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 19 00 +T 0E 06 00 00 +R 00 00 01 00 +T 0E 06 00 00 CD 00 00 00 00 FE FF 21 04 00 DD +R 00 00 01 00 02 05 34 00 +T 17 06 00 00 4E 02 DD 46 03 09 7E 23 B6 23 B6 +R 00 00 01 00 +T 22 06 00 00 23 B6 28 21 +R 00 00 01 00 +T 26 06 00 00 +R 00 00 01 00 +T 26 06 00 00 21 04 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 31 06 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 39 06 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 05 00 +T 40 06 00 00 75 FE DD 74 FF 18 08 +R 00 00 01 00 +T 47 06 00 00 +R 00 00 01 00 +T 47 06 00 00 DD 36 FE 4D 00 00 00 DD 36 FF +R 00 00 01 00 09 07 02 00 +T 4E 06 00 00 4D 00 00 00 +R 00 00 01 00 89 04 02 00 +T 4F 06 00 00 +R 00 00 01 00 +T 4F 06 00 00 DD 6E FE DD 66 FF E5 0E +R 00 00 01 00 +T 57 06 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 31 00 02 0A 31 00 +T 5D 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 40 00 02 0A 40 00 +T 63 06 00 00 00 00 00 00 F1 F1 F1 21 08 00 DD +R 00 00 01 00 02 04 05 00 +T 6C 06 00 00 4E 02 DD 46 03 09 5E 23 56 D5 1E +R 00 00 01 00 +T 77 06 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 2B 00 02 0A 2B 00 +T 7D 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 40 00 02 0A 40 00 +T 83 06 00 00 00 00 00 00 F1 F1 F1 21 12 00 09 +R 00 00 01 00 02 04 05 00 +T 8C 06 00 00 56 23 66 6A 23 23 5E 23 56 D5 1E +R 00 00 01 00 +T 97 06 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 27 00 02 0A 27 00 +T 9D 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 40 00 02 0A 40 00 +T A3 06 00 00 00 00 00 00 F1 F1 F1 21 0A 00 09 +R 00 00 01 00 02 04 05 00 +T AC 06 00 00 7E 23 B6 23 B6 23 B6 28 21 +R 00 00 01 00 +T B5 06 00 00 +R 00 00 01 00 +T B5 06 00 00 21 0A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T C0 06 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T C8 06 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 05 00 +T CF 06 00 00 75 FE DD 74 FF 18 08 +R 00 00 01 00 +T D6 06 00 00 +R 00 00 01 00 +T D6 06 00 00 DD 36 FE 55 00 00 00 DD 36 FF +R 00 00 01 00 09 07 02 00 +T DD 06 00 00 55 00 00 00 +R 00 00 01 00 89 04 02 00 +T DE 06 00 00 +R 00 00 01 00 +T DE 06 00 00 DD 6E FE DD 66 FF E5 0E +R 00 00 01 00 +T E6 06 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 11 00 02 0A 11 00 +T EC 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 40 00 02 0A 40 00 +T F2 06 00 00 00 00 00 00 F1 F1 F1 21 0E 00 DD +R 00 00 01 00 02 04 05 00 +T FB 06 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 06 07 00 00 23 46 C5 D5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 3A 00 +T 0E 07 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 3A 00 2B 0A 40 00 +T 14 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 40 00 02 09 05 00 +T 1B 07 00 00 F1 F1 21 14 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 26 07 00 00 09 7E E6 01 57 23 7E E6 00 B2 28 +R 00 00 01 00 +T 31 07 00 00 05 21 50 00 18 03 +R 00 00 01 00 +T 37 07 00 00 +R 00 00 01 00 +T 37 07 00 00 21 20 00 +R 00 00 01 00 +T 3A 07 00 00 +R 00 00 01 00 +T 3A 07 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 2A 00 +T 3F 07 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 2A 00 2B 0A 40 00 +T 45 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 40 00 02 09 05 00 +T 4C 07 00 00 F1 21 00 00 E5 21 E8 03 E5 21 +R 00 00 01 00 +T 56 07 00 00 16 00 DD 4E 02 DD 46 03 09 EB 3E +R 00 00 01 00 +T 61 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T 66 07 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 05 00 02 09 38 00 +T 6D 07 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T 73 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 40 00 02 0B 40 00 +T 79 07 00 00 CD 00 00 00 00 F1 F1 F1 F1 21 +R 00 00 01 00 02 05 05 00 +T 81 07 00 00 26 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 8C 07 00 00 46 23 5E 23 56 D5 C5 0E +R 00 00 01 00 +T 94 07 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 10 00 02 0A 10 00 +T 9A 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 40 00 02 0A 40 00 +T A0 07 00 00 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 05 00 +T A7 07 00 00 00 00 00 00 +R 00 00 01 00 02 04 22 00 +T A9 07 00 00 +R 00 00 01 00 +T A9 07 00 00 CD 00 00 00 00 FA FF 03 03 0A 5F +R 00 00 01 00 02 05 34 00 +T B2 07 00 00 03 0A 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T B8 07 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 05 00 +T BF 07 00 00 FC DD 74 FD DD 71 FE DD 70 FF 7D +R 00 00 01 00 +T CA 07 00 00 B4 B1 B0 20 23 +R 00 00 01 00 +T CF 07 00 00 +R 00 00 01 00 +T CF 07 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T DA 07 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 1C 00 +T DF 07 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 1C 00 2B 0A 40 00 +T E5 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 40 00 02 09 05 00 +T EC 07 00 00 F1 21 01 00 18 63 +R 00 00 01 00 +T F2 07 00 00 +R 00 00 01 00 +T F2 07 00 00 DD 4E FE DD 46 FF DD 5E FC DD 56 +R 00 00 01 00 +T FD 07 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 26 00 02 0B 26 00 +T 03 08 00 00 CD 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 05 00 +T 0C 08 00 00 7D B4 20 39 +R 00 00 01 00 +T 10 08 00 00 +R 00 00 01 00 +T 10 08 00 00 DD 4E FE DD 46 FF DD 5E FC DD 56 +R 00 00 01 00 +T 1B 08 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 21 08 00 00 CD 00 00 00 00 E5 DD 6E 04 DD 66 +R 00 00 01 00 02 05 05 00 +T 2A 08 00 00 05 23 23 4E 23 46 C5 0E +R 00 00 01 00 +T 32 08 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 16 00 02 0A 16 00 +T 38 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 40 00 02 0A 40 00 +T 3E 08 00 00 00 00 00 00 F1 F1 F1 F1 21 01 00 +R 00 00 01 00 02 04 05 00 +T 47 08 00 00 18 0C +R 00 00 01 00 +T 49 08 00 00 +R 00 00 01 00 +T 49 08 00 00 DD 5E FA DD 56 FB CD 0E 06 00 00 +R 00 00 01 00 00 0B 01 00 +T 52 08 00 00 21 00 00 +R 00 00 01 00 +T 55 08 00 00 +R 00 00 01 00 +T 55 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T 58 08 00 00 +R 00 00 01 00 +T 58 08 00 00 CD 00 00 00 00 FA FF DD 36 FE 01 +R 00 00 01 00 02 05 34 00 +T 61 08 00 00 DD 36 FF 00 +R 00 00 01 00 +T 65 08 00 00 +R 00 00 01 00 +T 65 08 00 00 DD 4E FE DD 46 FF 21 13 00 CD +R 00 00 01 00 +T 6F 08 00 00 00 00 00 00 DA FD 08 00 00 +R 00 00 01 00 02 04 3E 00 00 09 01 00 +T 74 08 00 00 +R 00 00 01 00 +T 74 08 00 00 01 06 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 7E 08 00 00 00 00 00 00 21 02 00 00 00 19 4E +R 00 00 01 00 02 04 35 00 02 09 14 00 +T 85 08 00 00 23 46 23 5E 23 56 D5 C5 01 06 00 +R 00 00 01 00 +T 90 08 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 35 00 +T 99 08 00 00 21 00 00 00 00 19 4E 23 46 C5 DD +R 00 00 01 00 02 05 14 00 +T A2 08 00 00 6E FE DD 66 FF E5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 36 00 +T AA 08 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 36 00 +T B0 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 40 00 02 09 40 00 +T B5 08 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 05 00 +T BE 08 00 00 01 02 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T C8 08 00 00 00 00 00 00 7B B2 28 13 +R 00 00 01 00 02 04 3F 00 +T CE 08 00 00 +R 00 00 01 00 +T CE 08 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 43 00 02 0B 43 00 +T D4 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 40 00 02 0B 40 00 +T DA 08 00 00 CD 00 00 00 00 F1 F1 18 11 +R 00 00 01 00 02 05 05 00 +T E1 08 00 00 +R 00 00 01 00 +T E1 08 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0F 00 02 0B 0F 00 +T E7 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 40 00 02 0B 40 00 +T ED 08 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 05 00 +T F2 08 00 00 +R 00 00 01 00 +T F2 08 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T FA 08 00 00 +R 00 00 01 00 +T FA 08 00 00 C3 65 08 00 00 +R 00 00 01 00 00 05 01 00 +T FD 08 00 00 +R 00 00 01 00 +T FD 08 00 00 01 02 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 07 09 00 00 00 00 00 00 7B B2 20 11 +R 00 00 01 00 02 04 3F 00 +T 0D 09 00 00 +R 00 00 01 00 +T 0D 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0F 00 02 0B 0F 00 +T 13 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 40 00 02 0B 40 00 +T 19 09 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 05 00 +T 1E 09 00 00 +R 00 00 01 00 +T 1E 09 00 00 2A 00 00 00 00 7D B4 2A +R 00 00 01 00 02 05 18 00 +T 24 09 00 00 02 00 00 00 B5 B4 28 3E 2A +R 00 00 01 00 02 04 18 00 +T 2B 09 00 00 02 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 02 04 18 00 02 0A 18 00 +T 32 09 00 00 21 00 00 E5 21 02 00 E5 ED 4B +R 00 00 01 00 +T 3C 09 00 00 02 00 00 00 2A 00 00 00 00 CD +R 00 00 01 00 02 04 18 00 02 09 18 00 +T 42 09 00 00 00 00 00 00 C5 E5 21 00 00 E5 21 +R 00 00 01 00 02 04 38 00 +T 4B 09 00 00 64 00 E5 ED 4B 02 00 00 00 2A +R 00 00 01 00 02 09 28 00 +T 53 09 00 00 00 00 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 02 04 28 00 02 09 2D 00 +T 5A 09 00 00 C1 09 EB C1 ED 4A 4D 44 EB CD +R 00 00 01 00 +T 64 09 00 00 00 00 00 00 18 06 +R 00 00 01 00 02 04 38 00 +T 68 09 00 00 +R 00 00 01 00 +T 68 09 00 00 01 00 00 21 00 00 +R 00 00 01 00 +T 6E 09 00 00 +R 00 00 01 00 +T 6E 09 00 00 C5 E5 2A 02 00 00 00 E5 2A +R 00 00 01 00 02 07 28 00 +T 75 09 00 00 00 00 00 00 E5 2A 02 00 00 00 E5 +R 00 00 01 00 02 04 28 00 02 0A 18 00 +T 7C 09 00 00 2A 00 00 00 00 E5 0E 00 00 00 00 +R 00 00 01 00 02 05 18 00 2B 0B 02 00 +T 82 09 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 02 00 +T 88 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 40 00 02 09 40 00 +T 8D 09 00 00 00 00 00 00 EB 21 10 00 39 F9 EB +R 00 00 01 00 02 04 05 00 +T 96 09 00 00 2A 00 00 00 00 7D B4 28 11 +R 00 00 01 00 02 05 32 00 +T 9D 09 00 00 +R 00 00 01 00 +T 9D 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 42 00 02 0B 42 00 +T A3 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 40 00 02 0B 40 00 +T A9 09 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 05 00 +T AE 09 00 00 +R 00 00 01 00 +T AE 09 00 00 2A 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 32 00 +T B7 09 00 00 +R 00 00 01 00 +T B7 09 00 00 DD 7E FA DD B6 FB CA C1 0A 00 00 +R 00 00 01 00 00 0B 01 00 +T C0 09 00 00 +R 00 00 01 00 +T C0 09 00 00 21 16 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T CB 09 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T D3 09 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 05 00 +T DA 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 15 00 02 0B 15 00 +T E0 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 40 00 02 0B 40 00 +T E6 09 00 00 CD 00 00 00 00 F1 F1 F1 21 1A 00 +R 00 00 01 00 02 05 05 00 +T EF 09 00 00 DD 4E FA DD 46 FB 09 5E 23 56 23 +R 00 00 01 00 +T FA 09 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 00 0A 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 01 00 02 09 05 00 +T 07 0A 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 13 00 02 0A 13 00 +T 0D 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 40 00 02 0A 40 00 +T 13 0A 00 00 00 00 00 00 F1 F1 F1 21 14 00 DD +R 00 00 01 00 02 04 05 00 +T 1C 0A 00 00 4E FA DD 46 FB 09 5E 23 56 D5 59 +R 00 00 01 00 +T 27 0A 00 00 50 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 24 00 +T 2D 0A 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 24 00 02 09 05 00 +T 34 0A 00 00 21 20 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T 3F 0A 00 00 16 00 D5 21 1E 00 09 5E 23 56 D5 +R 00 00 01 00 +T 4A 0A 00 00 1E 00 00 00 00 D5 21 00 00 00 00 +R 00 00 01 00 2B 05 1F 00 02 0B 1F 00 +T 50 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 40 00 02 0B 40 00 +T 56 0A 00 00 CD 00 00 00 00 EB 21 0E 00 39 F9 +R 00 00 01 00 02 05 05 00 +T 5F 0A 00 00 EB 21 12 00 09 46 23 66 68 DD 75 +R 00 00 01 00 +T 6A 0A 00 00 FC DD 74 FD +R 00 00 01 00 +T 6E 0A 00 00 +R 00 00 01 00 +T 6E 0A 00 00 DD 7E FC DD B6 FD 28 38 +R 00 00 01 00 +T 76 0A 00 00 +R 00 00 01 00 +T 76 0A 00 00 21 08 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 81 0A 00 00 23 56 D5 21 06 00 09 5E 23 56 D5 +R 00 00 01 00 +T 8C 0A 00 00 1E 00 00 00 00 D5 21 00 00 00 00 +R 00 00 01 00 2B 05 4A 00 02 0B 4A 00 +T 92 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 40 00 02 0B 40 00 +T 98 0A 00 00 CD 00 00 00 00 F1 F1 F1 F1 03 03 +R 00 00 01 00 02 05 05 00 +T A1 0A 00 00 0A 6F 03 0A 67 DD 75 FC DD 74 FD +R 00 00 01 00 +T AC 0A 00 00 18 C0 +R 00 00 01 00 +T AE 0A 00 00 +R 00 00 01 00 +T AE 0A 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T B9 0A 00 00 75 FA DD 74 FB C3 B7 09 00 00 +R 00 00 01 00 00 0A 01 00 +T C1 0A 00 00 +R 00 00 01 00 +T C1 0A 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 19 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 44 65 73 74 20 20 20 20 20 20 20 +R 00 00 02 00 +T 0B 00 00 00 20 20 20 20 20 4C 65 6E 20 49 6E +R 00 00 02 00 +T 16 00 00 00 74 65 72 66 61 63 65 20 20 20 20 +R 00 00 02 00 +T 21 00 00 00 47 61 74 65 77 61 79 20 20 20 20 +R 00 00 02 00 +T 2C 00 00 00 20 20 20 20 20 20 4D 65 74 72 69 +R 00 00 02 00 +T 37 00 00 00 63 20 20 50 20 54 69 6D 65 72 20 +R 00 00 02 00 +T 42 00 00 00 20 55 73 65 0A 00 +R 00 00 02 00 +T 48 00 00 00 +R 00 00 02 00 +T 48 00 00 00 61 64 64 70 00 +R 00 00 02 00 +T 4D 00 00 00 +R 00 00 02 00 +T 4D 00 00 00 64 65 66 61 75 6C 74 00 +R 00 00 02 00 +T 55 00 00 00 +R 00 00 02 00 +T 55 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 4E 00 00 00 +R 00 00 04 00 +T 4E 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 00 00 3B 00 00 00 00 00 +R 00 00 05 00 4A 04 47 00 48 08 01 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 23 00 +T 10 00 00 00 D3 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T 1A 00 00 00 00 00 00 00 58 08 00 00 00 00 +R 00 00 05 00 4A 04 06 00 48 08 01 00 +T 22 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 33 00 +T 2A 00 00 00 1D 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T 34 00 00 00 00 00 00 00 F1 00 00 00 00 00 +R 00 00 05 00 4A 04 0E 00 48 08 01 00 +T 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 47 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 0B 12 00 +T 51 00 00 00 FB 01 00 00 00 00 03 00 +R 00 00 05 00 48 04 01 00 +T 58 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 04 46 00 4A 08 2E 00 +T 5E 00 00 00 FB 01 00 00 00 00 03 00 +R 00 00 05 00 48 04 01 00 +T 65 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 04 3C 00 4A 08 08 00 +T 6B 00 00 00 41 04 00 00 00 00 02 00 +R 00 00 05 00 48 04 01 00 +T 72 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 04 1B 00 4A 08 41 00 +T 78 00 00 00 28 05 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T 82 00 00 00 00 00 00 00 A9 07 00 00 00 00 +R 00 00 05 00 4A 04 21 00 48 08 01 00 +T 8A 00 00 00 02 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 06 07 00 +T 94 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 diff --git a/src/nos/lib/internet_lib/iphdr.rel b/src/nos/lib/internet_lib/iphdr.rel new file mode 100644 index 00000000..9d1ad30e --- /dev/null +++ b/src/nos/lib/internet_lib/iphdr.rel @@ -0,0 +1,680 @@ +XL4 +H 2 areas 16 global symbols +S ?US_RSH_L02 Ref00000000 +S _put16 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?L_AND_L03 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _lcsum Ref00000000 +S _get32 Ref00000000 +S _get16 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?UC_RSH_L01 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S _pushdown Ref00000000 +S _put32 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 855 flags 0 +S _ntohip Def000002CF +S _htonip Def00000000 +S _cksum Def00000555 +S _eac Def000004ED +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 79 B0 20 03 +R 00 00 01 00 02 05 0C 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 C3 CC 02 00 00 +R 00 00 01 00 00 05 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 21 16 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 17 00 00 00 06 00 21 14 00 09 DD 75 FA DD 74 +R 00 00 01 00 +T 22 00 00 00 FB 4D 44 21 3C 00 A7 ED 42 30 08 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 DD 36 FA 3C DD 36 FB 00 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 DD 6E FA DD 66 FB E5 01 00 00 DD +R 00 00 01 00 +T 40 00 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T 48 00 00 00 00 00 00 00 CD 00 00 00 00 E1 DD +R 00 00 01 00 02 04 10 00 02 09 02 00 +T 4F 00 00 00 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 59 00 00 00 0A 00 09 46 23 66 68 DD 75 FC DD +R 00 00 01 00 +T 64 00 00 00 74 FD 21 12 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 6F 00 00 00 09 7E 87 87 87 87 DD 6E FA DD 66 +R 00 00 01 00 +T 7A 00 00 00 FB CB 3C CB 1D CB 3C CB 1D B5 DD +R 00 00 01 00 +T 85 00 00 00 6E FC DD 66 FD 23 DD 75 FC DD 74 +R 00 00 01 00 +T 90 00 00 00 FD 2B 77 21 13 00 09 56 DD 6E FC +R 00 00 01 00 +T 9B 00 00 00 DD 66 FD 23 DD 75 FC DD 74 FD 2B +R 00 00 01 00 +T A6 00 00 00 72 21 08 00 09 4E 23 46 DD 5E FC +R 00 00 01 00 +T B1 00 00 00 DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T B7 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 02 00 +T BE 00 00 00 FC DD 74 FD 21 0A 00 DD 4E 02 DD +R 00 00 01 00 +T C9 00 00 00 46 03 09 4E 23 46 DD 5E FC DD 56 +R 00 00 01 00 +T D4 00 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T DA 00 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 02 00 +T E3 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T EE 00 00 00 23 56 06 03 CD 00 00 00 00 DD 73 +R 00 00 01 00 02 09 00 00 +T F7 00 00 00 FE DD 72 FF 21 10 00 DD 4E 02 DD +R 00 00 01 00 +T 02 01 00 00 46 03 09 7E E6 01 47 23 7E E6 00 +R 00 00 01 00 +T 0D 01 00 00 B0 28 0D +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 21 04 00 39 7E F6 00 77 23 7E F6 +R 00 00 01 00 +T 1B 01 00 00 80 77 +R 00 00 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 21 10 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 28 01 00 00 E6 02 47 23 7E E6 00 B0 28 0D +R 00 00 01 00 +T 32 01 00 00 +R 00 00 01 00 +T 32 01 00 00 21 04 00 39 7E F6 00 77 23 7E F6 +R 00 00 01 00 +T 3D 01 00 00 40 77 +R 00 00 01 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 21 10 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 4A 01 00 00 E6 04 47 23 7E E6 00 B0 28 0D +R 00 00 01 00 +T 54 01 00 00 +R 00 00 01 00 +T 54 01 00 00 21 04 00 39 7E F6 00 77 23 7E F6 +R 00 00 01 00 +T 5F 01 00 00 20 77 +R 00 00 01 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 DD 4E FE DD 46 FF DD 5E FC DD 56 +R 00 00 01 00 +T 6C 01 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 72 01 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 02 00 +T 7B 01 00 00 21 14 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 86 01 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 91 01 00 00 74 FD 2B 72 21 15 00 09 46 DD 6E +R 00 00 01 00 +T 9C 01 00 00 FC DD 66 FD 23 DD 75 FC DD 74 FD +R 00 00 01 00 +T A7 01 00 00 2B 70 DD 7E 0A DD B6 0B 28 23 +R 00 00 01 00 +T B1 01 00 00 +R 00 00 01 00 +T B1 01 00 00 21 0E 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T BC 01 00 00 23 46 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T C5 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T CA 01 00 00 00 00 00 00 DD 75 FC DD 74 FD 18 +R 00 00 01 00 02 04 02 00 +T D3 01 00 00 20 +R 00 00 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T DF 01 00 00 74 FD 2B 36 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T EA 01 00 00 23 DD 75 FC DD 74 FD 2B 36 00 +R 00 00 01 00 +T F4 01 00 00 +R 00 00 01 00 +T F4 01 00 00 DD 6E 02 DD 66 03 4E 23 46 23 5E +R 00 00 01 00 +T FF 01 00 00 23 56 D5 C5 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 0A 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 0F 02 00 00 00 00 00 00 F1 F1 DD 75 FC DD 74 +R 00 00 01 00 02 04 02 00 +T 18 02 00 00 FD 21 04 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 23 02 00 00 5E 23 56 23 4E 23 46 C5 D5 DD 5E +R 00 00 01 00 +T 2E 02 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 35 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 11 00 02 09 02 00 +T 3C 02 00 00 DD 75 FC DD 74 FD 21 16 00 DD 4E +R 00 00 01 00 +T 47 02 00 00 02 DD 46 03 09 7E B7 28 37 +R 00 00 01 00 +T 50 02 00 00 +R 00 00 01 00 +T 50 02 00 00 21 16 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 5B 02 00 00 FE 28 30 09 21 16 00 09 6E 26 00 +R 00 00 01 00 +T 66 02 00 00 18 03 +R 00 00 01 00 +T 68 02 00 00 +R 00 00 01 00 +T 68 02 00 00 21 28 00 +R 00 00 01 00 +T 6B 02 00 00 +R 00 00 01 00 +T 6B 02 00 00 E5 21 17 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 76 02 00 00 4D 44 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 7F 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 84 02 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 02 00 +T 87 02 00 00 +R 00 00 01 00 +T 87 02 00 00 DD 7E 0A DD B6 0B 20 3D +R 00 00 01 00 +T 8F 02 00 00 +R 00 00 01 00 +T 8F 02 00 00 DD 6E FA DD 66 FB E5 DD 6E 04 DD +R 00 00 01 00 +T 9A 02 00 00 66 05 4E 23 46 11 00 00 3E +R 00 00 01 00 +T A3 02 00 00 55 05 00 00 21 55 05 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T A8 02 00 00 00 00 00 00 F1 4D 44 DD 6E 04 DD +R 00 00 01 00 02 04 02 00 +T B1 02 00 00 66 05 56 23 66 6A 11 0A 00 19 56 +R 00 00 01 00 +T BC 02 00 00 23 66 6A 11 0A 00 19 EB 3E +R 00 00 01 00 +T C5 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T CA 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T CC 02 00 00 +R 00 00 01 00 +T CC 02 00 00 +R 00 00 01 00 +T CC 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T CF 02 00 00 +R 00 00 01 00 +T CF 02 00 00 CD 00 00 00 00 E8 FF 21 14 00 E5 +R 00 00 01 00 02 05 0C 00 +T D8 02 00 00 21 06 00 39 4D 44 DD 5E 04 DD 56 +R 00 00 01 00 +T E3 02 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T E9 02 00 00 CD 00 00 00 00 F1 3E 14 AD B4 28 +R 00 00 01 00 02 05 02 00 +T F2 02 00 00 06 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 21 FF FF C3 EA 04 00 00 +R 00 00 01 00 00 08 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 DD 7E EC 06 04 CD 00 00 00 00 E6 +R 00 00 01 00 02 0A 0D 00 +T 02 03 00 00 0F 21 12 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 0D 03 00 00 77 21 13 00 09 DD 56 ED 72 21 +R 00 00 01 00 +T 17 03 00 00 08 00 09 E5 21 06 00 39 11 02 00 +R 00 00 01 00 +T 22 03 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 27 03 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 0B 00 02 09 02 00 +T 2E 03 00 00 73 23 72 21 0A 00 09 E5 21 06 00 +R 00 00 01 00 +T 39 03 00 00 39 11 04 00 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 41 03 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 0B 00 02 0A 02 00 +T 48 03 00 00 E1 73 23 72 21 04 00 39 11 06 00 +R 00 00 01 00 +T 53 03 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 58 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0B 00 02 09 02 00 +T 5F 03 00 00 EA DD 74 EB 21 0C 00 09 E5 DD 7E +R 00 00 01 00 +T 6A 03 00 00 EA E6 FF 6F DD 7E EB E6 1F 67 29 +R 00 00 01 00 +T 75 03 00 00 29 29 EB E1 73 23 72 DD 7E EA E6 +R 00 00 01 00 +T 80 03 00 00 00 57 DD 7E EB E6 20 B2 28 05 11 +R 00 00 01 00 +T 8B 03 00 00 01 00 18 03 +R 00 00 01 00 +T 8F 03 00 00 +R 00 00 01 00 +T 8F 03 00 00 11 00 00 +R 00 00 01 00 +T 92 03 00 00 +R 00 00 01 00 +T 92 03 00 00 21 10 00 DD 4E 02 DD 46 03 09 CB +R 00 00 01 00 +T 9D 03 00 00 43 28 04 CB D6 18 02 +R 00 00 01 00 +T A4 03 00 00 +R 00 00 01 00 +T A4 03 00 00 CB 96 +R 00 00 01 00 +T A6 03 00 00 +R 00 00 01 00 +T A6 03 00 00 DD 7E EA E6 00 47 DD 7E EB E6 40 +R 00 00 01 00 +T B1 03 00 00 B0 28 05 11 01 00 18 03 +R 00 00 01 00 +T B9 03 00 00 +R 00 00 01 00 +T B9 03 00 00 11 00 00 +R 00 00 01 00 +T BC 03 00 00 +R 00 00 01 00 +T BC 03 00 00 21 10 00 DD 4E 02 DD 46 03 09 CB +R 00 00 01 00 +T C7 03 00 00 43 28 04 CB CE 18 02 +R 00 00 01 00 +T CE 03 00 00 +R 00 00 01 00 +T CE 03 00 00 CB 8E +R 00 00 01 00 +T D0 03 00 00 +R 00 00 01 00 +T D0 03 00 00 DD 7E EA E6 00 47 DD 7E EB E6 80 +R 00 00 01 00 +T DB 03 00 00 B0 28 05 11 01 00 18 03 +R 00 00 01 00 +T E3 03 00 00 +R 00 00 01 00 +T E3 03 00 00 11 00 00 +R 00 00 01 00 +T E6 03 00 00 +R 00 00 01 00 +T E6 03 00 00 21 10 00 DD 4E 02 DD 46 03 09 CB +R 00 00 01 00 +T F1 03 00 00 43 28 04 CB C6 18 02 +R 00 00 01 00 +T F8 03 00 00 +R 00 00 01 00 +T F8 03 00 00 CB 86 +R 00 00 01 00 +T FA 03 00 00 +R 00 00 01 00 +T FA 03 00 00 21 14 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 05 04 00 00 56 F4 72 21 15 00 09 DD 56 F5 72 +R 00 00 01 00 +T 10 04 00 00 21 0E 00 09 E5 21 06 00 39 11 +R 00 00 01 00 +T 1A 04 00 00 0A 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 21 04 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 0B 00 02 09 02 00 +T 28 04 00 00 73 23 72 21 04 00 39 11 0C 00 19 +R 00 00 01 00 +T 33 04 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 39 04 00 00 CD 00 00 00 00 E5 DD 6E 02 DD 66 +R 00 00 01 00 02 05 02 00 +T 42 04 00 00 03 D1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T 4C 04 00 00 04 00 39 01 10 00 09 EB 3E +R 00 00 01 00 +T 55 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 5A 04 00 00 00 00 00 00 E5 21 04 00 DD 5E 02 +R 00 00 01 00 02 04 02 00 +T 63 04 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 6E 04 00 00 70 DD 7E EC E6 0F 6F 26 00 29 29 +R 00 00 01 00 +T 79 04 00 00 DD 75 E8 DD 74 E9 01 14 80 3E 80 +R 00 00 01 00 +T 84 04 00 00 AC 67 ED 42 30 11 +R 00 00 01 00 +T 8A 04 00 00 +R 00 00 01 00 +T 8A 04 00 00 21 16 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 95 04 00 00 00 21 FF FF 18 4F +R 00 00 01 00 +T 9B 04 00 00 +R 00 00 01 00 +T 9B 04 00 00 DD 7E E8 C6 EC 21 16 00 DD 4E 02 +R 00 00 01 00 +T A6 04 00 00 DD 46 03 09 77 B7 28 36 +R 00 00 01 00 +T AE 04 00 00 +R 00 00 01 00 +T AE 04 00 00 21 16 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T B9 04 00 00 16 00 D5 21 16 00 09 6E 26 00 E5 +R 00 00 01 00 +T C4 04 00 00 21 17 00 09 4D 44 DD 5E 04 DD 56 +R 00 00 01 00 +T CF 04 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T D5 04 00 00 CD 00 00 00 00 F1 D1 A7 ED 52 30 +R 00 00 01 00 02 05 02 00 +T DE 04 00 00 05 +R 00 00 01 00 +T DF 04 00 00 +R 00 00 01 00 +T DF 04 00 00 21 FF FF 18 06 +R 00 00 01 00 +T E4 04 00 00 +R 00 00 01 00 +T E4 04 00 00 +R 00 00 01 00 +T E4 04 00 00 DD 6E E8 DD 66 E9 +R 00 00 01 00 +T EA 04 00 00 +R 00 00 01 00 +T EA 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T ED 04 00 00 +R 00 00 01 00 +T ED 04 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 0C 00 +T F2 04 00 00 +R 00 00 01 00 +T F2 04 00 00 +R 00 00 01 00 +T F2 04 00 00 3E 10 DD 4E 04 DD 46 05 DD 6E 02 +R 00 00 01 00 +T FD 04 00 00 DD 66 03 CD 00 00 00 00 DD 75 FE +R 00 00 01 00 02 08 0F 00 +T 06 05 00 00 DD 74 FF 7D B4 28 39 +R 00 00 01 00 +T 0D 05 00 00 +R 00 00 01 00 +T 0D 05 00 00 21 00 00 E5 21 FF FF E5 DD 4E 04 +R 00 00 01 00 +T 18 05 00 00 DD 46 05 DD 6E 02 DD 66 03 CD +R 00 00 01 00 +T 22 05 00 00 00 00 00 00 C5 E5 DD 6E FE DD 66 +R 00 00 01 00 02 04 03 00 +T 2B 05 00 00 FF 11 00 00 C1 09 EB C1 ED 4A 4D +R 00 00 01 00 +T 36 05 00 00 44 EB DD 75 02 DD 74 03 DD 71 04 +R 00 00 01 00 +T 41 05 00 00 DD 70 05 18 AC +R 00 00 01 00 +T 46 05 00 00 +R 00 00 01 00 +T 46 05 00 00 DD 7E 02 E6 FF 6F DD 7E 03 E6 FF +R 00 00 01 00 +T 51 05 00 00 67 C3 00 00 00 00 +R 00 00 01 00 02 06 05 00 +T 55 05 00 00 +R 00 00 01 00 +T 55 05 00 00 CD 00 00 00 00 EE FF AF DD 77 FE +R 00 00 01 00 02 05 0C 00 +T 5E 05 00 00 DD 77 FF AF DD 77 F2 DD 77 F3 DD +R 00 00 01 00 +T 69 05 00 00 77 F4 DD 77 F5 DD 7E 02 DD B6 03 +R 00 00 01 00 +T 74 05 00 00 CA 24 06 00 00 +R 00 00 01 00 00 05 01 00 +T 77 05 00 00 +R 00 00 01 00 +T 77 05 00 00 DD 6E 02 DD 66 03 5E 23 56 23 4E +R 00 00 01 00 +T 82 05 00 00 23 46 EB 3E 10 CD 00 00 00 00 01 +R 00 00 01 00 02 0A 0F 00 +T 8B 05 00 00 00 00 DD 75 F2 DD 74 F3 DD 71 F4 +R 00 00 01 00 +T 96 05 00 00 DD 70 F5 21 04 00 39 E5 DD 6E 02 +R 00 00 01 00 +T A1 05 00 00 DD 66 03 5E 23 56 23 4E 23 46 01 +R 00 00 01 00 +T AC 05 00 00 00 00 E1 CD 00 00 00 00 21 04 00 +R 00 00 01 00 02 08 06 00 +T B5 05 00 00 39 E5 21 04 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T C0 05 00 00 09 5E 23 56 23 4E 23 46 EB 3E 10 +R 00 00 01 00 +T CB 05 00 00 CD 00 00 00 00 EB 01 00 00 E1 CD +R 00 00 01 00 02 05 0F 00 +T D4 05 00 00 00 00 00 00 21 04 00 39 E5 21 +R 00 00 01 00 02 04 06 00 +T DC 05 00 00 04 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T E7 05 00 00 56 23 4E 23 46 01 00 00 E1 CD +R 00 00 01 00 +T F1 05 00 00 00 00 00 00 21 04 00 39 E5 21 +R 00 00 01 00 02 04 06 00 +T F9 05 00 00 08 00 DD 4E 02 DD 46 03 09 5E 01 +R 00 00 01 00 +T 04 06 00 00 00 00 51 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 06 00 +T 0C 06 00 00 04 00 39 E5 21 09 00 DD 4E 02 DD +R 00 00 01 00 +T 17 06 00 00 46 03 09 5E 23 56 01 00 00 E1 CD +R 00 00 01 00 +T 22 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 24 06 00 00 +R 00 00 01 00 +T 24 06 00 00 AF DD 77 F0 DD 77 F1 +R 00 00 01 00 +T 2B 06 00 00 +R 00 00 01 00 +T 2B 06 00 00 DD 7E 04 DD B6 05 CA 2E 08 00 00 +R 00 00 01 00 00 0B 01 00 +T 34 06 00 00 DD 4E 0A DD 46 0B DD 6E F0 DD 66 +R 00 00 01 00 +T 3F 06 00 00 F1 A7 ED 42 D2 2E 08 00 00 +R 00 00 01 00 00 09 01 00 +T 46 06 00 00 +R 00 00 01 00 +T 46 06 00 00 +R 00 00 01 00 +T 46 06 00 00 +R 00 00 01 00 +T 46 06 00 00 DD 4E F0 DD 46 F1 DD 6E 0A DD 66 +R 00 00 01 00 +T 51 06 00 00 0B A7 ED 42 EB 21 0C 00 DD 4E 04 +R 00 00 01 00 +T 5C 06 00 00 DD 46 05 09 7E 23 66 6F A7 ED 52 +R 00 00 01 00 +T 67 06 00 00 30 0A 21 0C 00 09 56 23 66 6A 18 +R 00 00 01 00 +T 72 06 00 00 0F +R 00 00 01 00 +T 73 06 00 00 +R 00 00 01 00 +T 73 06 00 00 DD 4E F0 DD 46 F1 DD 6E 0A DD 66 +R 00 00 01 00 +T 7E 06 00 00 0B A7 ED 42 +R 00 00 01 00 +T 82 06 00 00 +R 00 00 01 00 +T 82 06 00 00 DD 75 EE DD 74 EF 21 0A 00 DD 4E +R 00 00 01 00 +T 8D 06 00 00 04 DD 46 05 09 46 23 66 68 DD 75 +R 00 00 01 00 +T 98 06 00 00 FA DD 74 FB AF DD 77 F6 DD 77 F7 +R 00 00 01 00 +T A3 06 00 00 DD 77 F8 DD 77 F9 01 00 00 7D E6 +R 00 00 01 00 +T AE 06 00 00 01 28 71 +R 00 00 01 00 +T B1 06 00 00 +R 00 00 01 00 +T B1 06 00 00 DD 7E FE DD B6 FF 28 21 +R 00 00 01 00 +T B9 06 00 00 +R 00 00 01 00 +T B9 06 00 00 DD 6E FA DD 66 FB 23 DD 75 FA DD +R 00 00 01 00 +T C4 06 00 00 74 FB 2B 6E 01 00 00 61 DD 75 F6 +R 00 00 01 00 +T CF 06 00 00 DD 74 F7 DD 71 F8 DD 70 F9 18 25 +R 00 00 01 00 +T DA 06 00 00 +R 00 00 01 00 +T DA 06 00 00 DD 6E FA DD 66 FB 23 DD 75 FA DD +R 00 00 01 00 +T E5 06 00 00 74 FB 2B 4E 06 00 41 0E 00 69 60 +R 00 00 01 00 +T F0 06 00 00 01 00 00 DD 75 F6 DD 74 F7 DD 71 +R 00 00 01 00 +T FB 06 00 00 F8 DD 70 F9 +R 00 00 01 00 +T FF 06 00 00 +R 00 00 01 00 +T FF 06 00 00 DD 6E EE DD 66 EF 2B DD 75 EE DD +R 00 00 01 00 +T 0A 07 00 00 74 EF DD 7E FE DD B6 FF 20 04 0E +R 00 00 01 00 +T 15 07 00 00 01 18 02 +R 00 00 01 00 +T 18 07 00 00 +R 00 00 01 00 +T 18 07 00 00 0E 00 +R 00 00 01 00 +T 1A 07 00 00 +R 00 00 01 00 +T 1A 07 00 00 06 00 DD 71 FE DD 70 FF +R 00 00 01 00 +T 22 07 00 00 +R 00 00 01 00 +T 22 07 00 00 DD 4E EE DD 46 EF 21 01 00 A7 ED +R 00 00 01 00 +T 2D 07 00 00 42 30 54 +R 00 00 01 00 +T 30 07 00 00 +R 00 00 01 00 +T 30 07 00 00 DD 4E EE DD 46 EF CB 38 CB 19 DD +R 00 00 01 00 +T 3B 07 00 00 5E FA DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T 43 07 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 02 00 +T 4A 07 00 00 FC DD 74 FD DD 7E FE DD B6 FF 28 +R 00 00 01 00 +T 55 07 00 00 1E +R 00 00 01 00 +T 56 07 00 00 +R 00 00 01 00 +T 56 07 00 00 DD 6E FC DD 66 FD 65 2E 00 DD 4E +R 00 00 01 00 +T 61 07 00 00 FC DD 46 FD 48 06 00 7D B1 5F 7C +R 00 00 01 00 +T 6C 07 00 00 B0 57 DD 73 FC DD 72 FD +R 00 00 01 00 +T 74 07 00 00 +R 00 00 01 00 +T 74 07 00 00 21 08 00 39 DD 5E FC DD 56 FD 01 +R 00 00 01 00 +T 7F 07 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 07 06 00 +T 84 07 00 00 +R 00 00 01 00 +T 84 07 00 00 DD 7E EE E6 01 28 6A +R 00 00 01 00 +T 8B 07 00 00 +R 00 00 01 00 +T 8B 07 00 00 DD 7E FE DD B6 FF 28 24 +R 00 00 01 00 +T 93 07 00 00 +R 00 00 01 00 +T 93 07 00 00 21 08 00 39 E5 DD 6E EE DD 66 EF +R 00 00 01 00 +T 9E 07 00 00 2B DD 75 EE DD 74 EF DD 4E FA DD +R 00 00 01 00 +T A9 07 00 00 46 FB 09 5E 01 00 00 51 E1 CD +R 00 00 01 00 +T B3 07 00 00 00 00 00 00 18 28 +R 00 00 01 00 02 04 06 00 +T B7 07 00 00 +R 00 00 01 00 +T B7 07 00 00 21 08 00 39 E5 DD 6E EE DD 66 EF +R 00 00 01 00 +T C2 07 00 00 2B DD 75 EE DD 74 EF DD 4E FA DD +R 00 00 01 00 +T CD 07 00 00 46 FB 09 4E 06 00 41 0E 00 59 50 +R 00 00 01 00 +T D8 07 00 00 01 00 00 E1 CD 00 00 00 00 +R 00 00 01 00 02 09 06 00 +T DF 07 00 00 +R 00 00 01 00 +T DF 07 00 00 DD 7E FE DD B6 FF 20 04 0E 01 18 +R 00 00 01 00 +T EA 07 00 00 02 +R 00 00 01 00 +T EB 07 00 00 +R 00 00 01 00 +T EB 07 00 00 0E 00 +R 00 00 01 00 +T ED 07 00 00 +R 00 00 01 00 +T ED 07 00 00 06 00 DD 71 FE DD 70 FF +R 00 00 01 00 +T F5 07 00 00 +R 00 00 01 00 +T F5 07 00 00 21 04 00 39 DD 4E F8 DD 46 F9 DD +R 00 00 01 00 +T 00 08 00 00 5E F6 DD 56 F7 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 06 00 +T 09 08 00 00 0C 00 DD 4E 04 DD 46 05 09 5E 23 +R 00 00 01 00 +T 14 08 00 00 56 21 02 00 39 7E 83 77 23 7E 8A +R 00 00 01 00 +T 1F 08 00 00 77 0A 6F 03 0A 67 DD 75 04 DD 74 +R 00 00 01 00 +T 2A 08 00 00 05 C3 2B 06 00 00 +R 00 00 01 00 00 06 01 00 +T 2E 08 00 00 +R 00 00 01 00 +T 2E 08 00 00 DD 4E F4 DD 46 F5 DD 5E F2 DD 56 +R 00 00 01 00 +T 39 08 00 00 F3 3E ED 04 00 00 21 ED 04 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T 3F 08 00 00 CD 00 00 00 00 7D 2F 6F 7C 2F 67 +R 00 00 01 00 02 05 02 00 +T 48 08 00 00 7D E6 FF 4F 7C E6 FF 47 69 60 C3 +R 00 00 01 00 +T 53 08 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 diff --git a/src/nos/lib/internet_lib/ipinit.rel b/src/nos/lib/internet_lib/ipinit.rel new file mode 100644 index 00000000..4b8ef335 --- /dev/null +++ b/src/nos/lib/internet_lib/ipinit.rel @@ -0,0 +1,37 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Hashtab Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 40 flags 0 +S _ipinit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF AF DD 77 FE +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 DD 77 FF +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 01 00 81 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 17 00 00 00 AC 67 ED 42 30 20 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 01 07 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 27 00 00 00 00 00 00 00 21 00 00 00 00 DD 4E +R 00 00 01 00 02 04 03 00 02 09 05 00 +T 2E 00 00 00 FE DD 46 FF 09 73 03 DD 71 FE DD +R 00 00 01 00 +T 39 00 00 00 70 FF 18 CF +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/internet_lib/ipip_recv.rel b/src/nos/lib/internet_lib/ipip_recv.rel new file mode 100644 index 00000000..4a9fa52d --- /dev/null +++ b/src/nos/lib/internet_lib/ipip_recv.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _net_route Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Encap Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S _ipip_recv Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 4E 0A DD 46 0B +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 2B 0A 02 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 15 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/internet_lib/ipsock.rel b/src/nos/lib/internet_lib/ipsock.rel new file mode 100644 index 00000000..d5f8d6d0 --- /dev/null +++ b/src/nos/lib/internet_lib/ipsock.rel @@ -0,0 +1,399 @@ +XL4 +H 5 areas 20 global symbols +S _raw_ip Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S _len_q Ref00000000 +S _Lport Ref00000000 +S _ntohip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _bind Ref00000000 +S .__.ABS. Def00000000 +S _pinet Ref00000000 +S _kwait Ref00000000 +S _ip_send Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S _errno Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _del_ip Ref00000000 +S _dequeue Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3F5 flags 0 +S _so_ip_close Def000002D5 +S _ippsocket Def00000399 +S _so_ip_send Def000001A7 +S _so_ip_conn Def0000005E +S _so_ip_sock Def00000000 +S _so_ip_recv Def00000079 +S _so_ip_qlen Def00000291 +S _checkipaddr Def000002ED +A UDATA0 size 1E flags 0 +A IDATA0 size 3 flags 0 +S _Inet_eol Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 11 00 +T 09 00 00 00 66 03 56 23 66 6A DD 75 FE DD 74 +R 00 00 01 00 +T 14 00 00 00 FF 21 0C 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 1F 00 00 00 E5 0E 18 03 00 00 C5 01 +R 00 00 01 00 29 06 01 00 +T 24 00 00 00 18 03 00 00 C5 DD 5E 04 DD 56 05 +R 00 00 01 00 00 04 01 00 +T 2D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T 33 00 00 00 00 00 00 00 F1 F1 4D 44 E1 71 23 +R 00 00 01 00 02 04 01 00 +T 3C 00 00 00 70 21 0C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 47 00 00 00 46 23 66 68 01 09 00 09 DD 4E FE +R 00 00 01 00 +T 52 00 00 00 DD 46 FF 71 23 70 21 00 00 C3 +R 00 00 01 00 +T 5C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 CD 00 00 00 00 21 0E 00 19 7E 23 +R 00 00 01 00 02 05 0D 00 +T 67 00 00 00 B6 20 09 +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 DD 5E 02 DD 56 03 CD 44 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 06 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 CD 00 00 00 00 BA FF +R 00 00 01 00 02 05 11 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 89 00 00 00 23 66 68 DD 75 BA DD 74 BB 7D B4 +R 00 00 01 00 +T 94 00 00 00 28 44 DD 6E BA DD 66 BB 23 23 7E +R 00 00 01 00 +T 9F 00 00 00 23 B6 20 37 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T AE 00 00 00 B7 28 0C +R 00 00 01 00 +T B1 00 00 00 +R 00 00 01 00 +T B1 00 00 00 21 64 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 0F 00 +T BA 00 00 00 C3 A4 01 00 00 +R 00 00 01 00 00 05 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T C5 00 00 00 21 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 05 0B 00 02 0A 01 00 +T CC 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 0F 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 21 FF FF C3 A4 01 00 00 +R 00 00 01 00 00 08 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 18 A4 +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 DD 7E BA DD B6 BB 20 0C +R 00 00 01 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 21 65 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 0F 00 +T EB 00 00 00 C3 A4 01 00 00 +R 00 00 01 00 00 05 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 DD 5E BA DD 56 BB 13 13 3E +R 00 00 01 00 +T F7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T FC 00 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 01 00 +T 05 01 00 00 C1 71 23 70 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T 10 01 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 18 01 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 1F 01 00 00 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T 27 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 2C 01 00 00 00 00 00 00 DD 75 FD DD 74 FE DD +R 00 00 01 00 02 04 01 00 +T 35 01 00 00 7E 0A DD B6 0B 28 62 DD 7E 0C DD +R 00 00 01 00 +T 40 01 00 00 B6 0D 28 5A DD 6E 0C DD 66 0D 46 +R 00 00 01 00 +T 4B 01 00 00 23 66 68 01 10 80 3E 80 AC 67 ED +R 00 00 01 00 +T 56 01 00 00 42 38 45 +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 DD 6E 0A DD 66 0B DD 75 BC DD 74 +R 00 00 01 00 +T 64 01 00 00 BD AF 77 23 77 21 04 00 DD 4E BC +R 00 00 01 00 +T 6F 01 00 00 DD 46 BD 09 E5 21 06 00 39 5E 23 +R 00 00 01 00 +T 7A 01 00 00 56 23 4E 23 46 E1 73 23 72 23 71 +R 00 00 01 00 +T 85 01 00 00 23 70 DD 6E BC DD 66 BD 23 23 AF +R 00 00 01 00 +T 90 01 00 00 77 23 77 DD 6E 0C DD 66 0D 36 10 +R 00 00 01 00 +T 9B 01 00 00 23 36 00 +R 00 00 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 DD 6E FD DD 66 FE +R 00 00 01 00 +T A4 01 00 00 +R 00 00 01 00 +T A4 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 CD 00 00 00 00 FC FF 21 0E 00 DD +R 00 00 01 00 02 05 11 00 +T B0 01 00 00 5E 02 DD 56 03 19 7E 23 B6 20 09 +R 00 00 01 00 +T BB 01 00 00 +R 00 00 01 00 +T BB 01 00 00 DD 5E 02 DD 56 03 CD 44 03 00 00 +R 00 00 01 00 00 0B 01 00 +T C4 01 00 00 +R 00 00 01 00 +T C4 01 00 00 21 0E 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T CF 01 00 00 23 66 68 DD 75 FC DD 74 FD DD 7E +R 00 00 01 00 +T DA 01 00 00 0A DD B6 0B 28 0E +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 DD 6E 0A DD 66 0B DD 75 FE DD 74 +R 00 00 01 00 +T EB 01 00 00 FF 18 3E +R 00 00 01 00 +T EE 01 00 00 +R 00 00 01 00 +T EE 01 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T F9 01 00 00 23 B6 28 16 +R 00 00 01 00 +T FD 01 00 00 +R 00 00 01 00 +T FD 01 00 00 21 12 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 08 02 00 00 23 66 68 DD 75 FE DD 74 FF 18 19 +R 00 00 01 00 +T 13 02 00 00 +R 00 00 01 00 +T 13 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 14 00 +T 1B 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 14 00 02 0A 01 00 +T 22 02 00 00 65 00 22 00 00 00 00 21 FF FF 18 +R 00 00 01 00 02 07 0F 00 +T 2B 02 00 00 62 +R 00 00 01 00 +T 2C 02 00 00 +R 00 00 01 00 +T 2C 02 00 00 +R 00 00 01 00 +T 2C 02 00 00 0E 00 C5 21 00 00 E5 21 00 00 E5 +R 00 00 01 00 +T 37 02 00 00 DD 6E 04 DD 66 05 E5 0E 00 C5 0E +R 00 00 01 00 +T 42 02 00 00 00 C5 21 0C 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 4D 02 00 00 09 46 23 66 68 01 07 00 09 4E C5 +R 00 00 01 00 +T 58 02 00 00 21 04 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 63 02 00 00 23 46 23 5E 23 56 D5 C5 21 04 00 +R 00 00 01 00 +T 6E 02 00 00 DD 4E FC DD 46 FD 09 5E 23 56 23 +R 00 00 01 00 +T 79 02 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T 7F 02 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 86 02 00 00 12 00 39 F9 EB 21 00 00 +R 00 00 01 00 +T 8E 02 00 00 +R 00 00 01 00 +T 8E 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 91 02 00 00 +R 00 00 01 00 +T 91 02 00 00 CD 00 00 00 00 FE FF 79 B0 20 23 +R 00 00 01 00 02 05 11 00 +T 9A 02 00 00 +R 00 00 01 00 +T 9A 02 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T A5 02 00 00 23 66 68 23 23 5E 23 56 3E +R 00 00 01 00 +T AE 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T B3 02 00 00 00 00 00 00 DD 75 FE DD 74 FF 18 +R 00 00 01 00 02 04 01 00 +T BC 02 00 00 0F +R 00 00 01 00 +T BD 02 00 00 +R 00 00 01 00 +T BD 02 00 00 3E 01 A9 B0 20 09 AF DD 77 FE DD +R 00 00 01 00 +T C8 02 00 00 77 FF 18 00 +R 00 00 01 00 +T CC 02 00 00 +R 00 00 01 00 +T CC 02 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T D5 02 00 00 +R 00 00 01 00 +T D5 02 00 00 CD 00 00 00 00 21 0C 00 19 5E 23 +R 00 00 01 00 02 05 0D 00 +T DE 02 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T E4 02 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 01 00 +T EB 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T ED 02 00 00 +R 00 00 01 00 +T ED 02 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 11 00 +T F6 02 00 00 66 03 DD 75 FE DD 74 FF 7E 23 B6 +R 00 00 01 00 +T 01 03 00 00 20 0A 3E 10 DD AE 04 DD B6 05 28 +R 00 00 01 00 +T 0C 03 00 00 05 +R 00 00 01 00 +T 0D 03 00 00 +R 00 00 01 00 +T 0D 03 00 00 +R 00 00 01 00 +T 0D 03 00 00 +R 00 00 01 00 +T 0D 03 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 12 03 00 00 +R 00 00 01 00 +T 12 03 00 00 21 00 00 +R 00 00 01 00 +T 15 03 00 00 +R 00 00 01 00 +T 15 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 18 03 00 00 +R 00 00 01 00 +T 18 03 00 00 CD 00 00 00 00 01 01 00 21 09 00 +R 00 00 01 00 02 05 0D 00 +T 21 03 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 16 00 +T 28 03 00 00 00 00 00 00 CD 00 00 00 00 EB 3E +R 00 00 01 00 02 04 16 00 02 09 01 00 +T 2F 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 34 03 00 00 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 04 01 00 +T 3A 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 3F 03 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 06 00 +T 44 03 00 00 +R 00 00 01 00 +T 44 03 00 00 CD 00 00 00 00 EE FF DD 6E 02 DD +R 00 00 01 00 02 05 11 00 +T 4D 03 00 00 66 03 46 23 66 68 DD 75 FE DD 74 +R 00 00 01 00 +T 58 03 00 00 FF AF DD 77 EE DD 77 EF AF DD 77 +R 00 00 01 00 +T 63 03 00 00 F2 DD 77 F3 DD 77 F4 DD 77 F5 ED +R 00 00 01 00 +T 6E 03 00 00 4B 00 00 00 00 03 ED 43 +R 00 00 01 00 02 05 04 00 +T 74 03 00 00 00 00 00 00 0B DD 71 F0 DD 70 F1 +R 00 00 01 00 02 04 04 00 +T 7D 03 00 00 01 10 00 C5 21 02 00 39 4D 44 DD +R 00 00 01 00 +T 88 03 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 90 03 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 08 00 02 09 01 00 +T 97 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 07 00 +T 99 03 00 00 +R 00 00 01 00 +T 99 03 00 00 CD 00 00 00 00 F8 FF DD 6E 02 DD +R 00 00 01 00 02 05 11 00 +T A2 03 00 00 66 03 DD 75 F8 DD 74 F9 01 04 00 +R 00 00 01 00 +T AD 03 00 00 09 5E 23 56 23 4E 23 46 EB DD 75 +R 00 00 01 00 +T B8 03 00 00 FA DD 74 FB DD 71 FC DD 70 FD DD +R 00 00 01 00 +T C3 03 00 00 6E F8 DD 66 F9 23 23 46 23 66 68 +R 00 00 01 00 +T CE 03 00 00 DD 75 FE DD 74 FF 21 02 00 39 5D +R 00 00 01 00 +T D9 03 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T DF 03 00 00 CD 00 00 00 00 4D 44 11 +R 00 00 01 00 02 05 01 00 +T E5 03 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 0E 00 +T EA 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T F0 03 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 04 02 00 02 09 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 0D 0A 00 +R 00 00 04 00 diff --git a/src/nos/lib/internet_lib/isaddr.rel b/src/nos/lib/internet_lib/isaddr.rel new file mode 100644 index 00000000..ade075dc --- /dev/null +++ b/src/nos/lib/internet_lib/isaddr.rel @@ -0,0 +1,58 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 58 flags 0 +S _isaddr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 B6 03 20 05 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 01 00 18 43 +R 00 00 01 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 1D 00 00 00 74 03 2B 46 DD 70 FE 04 05 28 2A +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 7E FE FE 5B 28 21 DD 7E FE FE +R 00 00 01 00 +T 33 00 00 00 5D 28 1A DD 4E FE 06 00 21 +R 00 00 01 00 +T 3C 00 00 00 00 00 00 00 09 7E E6 08 20 0C DD +R 00 00 01 00 02 04 02 00 +T 45 00 00 00 7E FE FE 2E 28 05 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 21 00 00 18 05 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 18 C0 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 21 01 00 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/internet_lib/locaddr.rel b/src/nos/lib/internet_lib/locaddr.rel new file mode 100644 index 00000000..c8ae72c0 --- /dev/null +++ b/src/nos/lib/internet_lib/locaddr.rel @@ -0,0 +1,155 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Ifaces Ref00000000 +S _ismyaddr Ref00000000 +S .__.ABS. Def00000000 +S _rt_lookup Ref00000000 +S _Encap Ref00000000 +S _Loopback Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15C flags 0 +S _locaddr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 4E 04 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 17 00 00 00 00 00 00 00 7D B4 28 0F +R 00 00 01 00 02 04 00 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 4E 04 DD 46 05 DD 6E 02 DD 66 +R 00 00 01 00 +T 28 00 00 00 03 C3 59 01 00 00 +R 00 00 01 00 00 06 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 37 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 3D 00 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 00 00 +T 46 00 00 00 7D B4 28 16 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 21 12 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 55 00 00 00 23 66 68 DD 75 FE DD 74 FF 18 07 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 21 00 00 00 00 DD 4E FE DD 46 FF +R 00 00 01 00 02 05 05 00 +T 70 00 00 00 A7 ED 42 20 40 +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 21 0A 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 80 00 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 88 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 8F 00 00 00 75 FC DD 74 FD 7D B4 28 16 +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 21 12 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T A3 00 00 00 23 66 68 DD 75 FE DD 74 FF 18 07 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 DD 7E FE DD B6 FF 20 41 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 2A 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 DD 7E FE DD B6 FF 28 30 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 00 00 00 00 DD 4E FE DD 46 FF +R 00 00 01 00 02 05 06 00 +T D7 00 00 00 A7 ED 42 28 10 21 00 00 00 00 DD +R 00 00 01 00 02 0A 05 00 +T E0 00 00 00 4E FE DD 46 FF A7 ED 42 28 02 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 18 12 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T F7 00 00 00 75 FE DD 74 FF 18 C8 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 DD 7E FE DD B6 FF 28 0E 21 +R 00 00 01 00 +T 07 01 00 00 00 00 00 00 DD 4E FE DD 46 FF A7 +R 00 00 01 00 02 04 06 00 +T 10 01 00 00 ED 42 20 08 +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 01 00 00 21 00 00 18 3D +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 21 16 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 27 01 00 00 23 B6 28 1C +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 21 16 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T 36 01 00 00 23 66 68 01 04 00 09 5E 23 56 23 +R 00 00 01 00 +T 41 01 00 00 4E 23 46 EB 18 12 +R 00 00 01 00 +T 47 01 00 00 +R 00 00 01 00 +T 47 01 00 00 21 04 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 52 01 00 00 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 09 00 diff --git a/src/nos/lib/internet_lib/lookup_reasm.rel b/src/nos/lib/internet_lib/lookup_reasm.rel new file mode 100644 index 00000000..54ade4a4 --- /dev/null +++ b/src/nos/lib/internet_lib/lookup_reasm.rel @@ -0,0 +1,96 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _Reasmq Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11E flags 0 +S _lookup_reasm Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD 77 FF 2A 00 00 00 00 DD 75 FC +R 00 00 01 00 02 08 02 00 +T 12 00 00 00 DD 74 FD +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 DD 7E FC DD B6 FD CA 18 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 29 00 00 00 23 66 68 E5 21 1E 00 DD 4E FC DD +R 00 00 01 00 +T 34 00 00 00 46 FD 09 4E 23 46 E1 A7 ED 42 C2 +R 00 00 01 00 +T 3F 00 00 00 F9 00 00 00 21 16 00 DD 4E FC DD +R 00 00 01 00 00 04 01 00 +T 48 00 00 00 46 FD 09 4E 23 46 23 5E 23 56 D5 +R 00 00 01 00 +T 53 00 00 00 C5 DD 6E 02 DD 66 03 4E 23 46 23 +R 00 00 01 00 +T 5E 00 00 00 5E 23 56 69 60 C1 A7 ED 42 C1 C2 +R 00 00 01 00 +T 69 00 00 00 F9 00 00 00 EB ED 42 C2 +R 00 00 01 00 00 04 01 00 +T 6F 00 00 00 F9 00 00 00 21 1A 00 DD 4E FC DD +R 00 00 01 00 00 04 01 00 +T 78 00 00 00 46 FD 09 4E 23 46 23 5E 23 56 D5 +R 00 00 01 00 +T 83 00 00 00 C5 21 04 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 8E 00 00 00 4E 23 46 23 5E 23 56 69 60 C1 A7 +R 00 00 01 00 +T 99 00 00 00 ED 42 C1 20 5B EB ED 42 20 56 21 +R 00 00 01 00 +T A4 00 00 00 20 00 DD 4E FC DD 46 FD 09 E5 21 +R 00 00 01 00 +T AF 00 00 00 15 00 DD 4E 02 DD 46 03 09 7E E1 +R 00 00 01 00 +T BA 00 00 00 BE 20 3C +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 DD 7E FE DD B6 FF 28 2C +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 E5 +R 00 00 01 00 +T D0 00 00 00 DD 6E FE DD 66 FF C1 71 23 70 2A +R 00 00 01 00 +T DB 00 00 00 00 00 00 00 E5 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 02 00 +T E4 00 00 00 C1 71 23 70 DD 6E FC DD 66 FD 22 +R 00 00 01 00 +T EF 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 DD 6E FC DD 66 FD 18 22 +R 00 00 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 04 01 00 00 FF DD 6E FC DD 66 FD 46 23 66 68 +R 00 00 01 00 +T 0F 01 00 00 DD 75 FC DD 74 FD C3 15 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 18 01 00 00 +R 00 00 01 00 +T 18 01 00 00 21 00 00 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/internet_lib/make_rr.rel b/src/nos/lib/internet_lib/make_rr.rel new file mode 100644 index 00000000..6e6db343 --- /dev/null +++ b/src/nos/lib/internet_lib/make_rr.rel @@ -0,0 +1,197 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strdupw Ref00000000 +S .__.ABS. Def00000000 +S _callocw Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2CA flags 0 +S _make_rr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 01 2B 00 11 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 01 04 00 09 DD 46 02 +R 00 00 01 00 +T 20 00 00 00 70 21 07 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T 2B 00 00 00 E5 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 33 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 38 00 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 00 00 +T 40 00 00 00 0D 00 09 DD 5E 0A DD 56 0B 73 23 +R 00 00 01 00 +T 4B 00 00 00 72 21 0F 00 09 DD 5E 0C DD 56 0D +R 00 00 01 00 +T 56 00 00 00 73 23 72 21 09 00 09 DD 4E 10 DD +R 00 00 01 00 +T 61 00 00 00 46 11 DD 5E 0E DD 56 0F 73 23 72 +R 00 00 01 00 +T 6C 00 00 00 23 71 23 70 21 11 00 DD 4E FC DD +R 00 00 01 00 +T 77 00 00 00 46 FD 09 DD 4E 12 DD 46 13 71 23 +R 00 00 01 00 +T 82 00 00 00 70 79 B0 20 09 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 DD 6E FC DD 66 FD C3 C7 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 DD 5E 0C DD 56 0D CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 99 00 00 00 01 00 10 00 C1 02 00 00 +R 00 00 01 00 00 08 01 00 +T 9F 00 00 00 BF 00 00 00 EE 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A3 00 00 00 C1 02 00 00 C1 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A7 00 00 00 EE 00 00 00 A7 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T AB 00 00 00 EE 00 00 00 EE 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T AF 00 00 00 EE 00 00 00 C1 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B3 00 00 00 C1 02 00 00 EE 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B7 00 00 00 10 01 00 00 C1 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T BB 00 00 00 60 01 00 00 EE 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 DD 6E 14 DD 66 15 DD 75 FE DD 74 +R 00 00 01 00 +T CA 00 00 00 FF 21 13 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T D5 00 00 00 E5 DD 6E FE DD 66 FF 5E 23 56 23 +R 00 00 01 00 +T E0 00 00 00 4E 23 46 E1 73 23 72 23 71 23 70 +R 00 00 01 00 +T EB 00 00 00 C3 C1 02 00 00 +R 00 00 01 00 00 05 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 21 13 00 DD 4E FC DD 46 FD 09 E5 +R 00 00 01 00 +T F9 00 00 00 DD 5E 14 DD 56 15 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 01 01 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 08 01 00 00 44 E1 71 23 70 C3 C1 02 00 00 +R 00 00 01 00 00 0A 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 DD 6E 14 DD 66 15 DD 75 FE DD 74 +R 00 00 01 00 +T 1B 01 00 00 FF 21 13 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T 26 01 00 00 E5 DD 6E FE DD 66 FF 5E 23 56 3E +R 00 00 01 00 +T 31 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 36 01 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 00 00 +T 3E 01 00 00 15 00 09 E5 DD 4E FE DD 46 FF 03 +R 00 00 01 00 +T 49 01 00 00 03 0A 5F 03 0A 57 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 51 01 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 58 01 00 00 44 E1 71 23 70 C3 C1 02 00 00 +R 00 00 01 00 00 0A 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 DD 6E 14 DD 66 15 DD 75 FE DD 74 +R 00 00 01 00 +T 6B 01 00 00 FF 21 13 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T 76 01 00 00 E5 DD 6E FE DD 66 FF 5E 23 56 E1 +R 00 00 01 00 +T 81 01 00 00 73 23 72 21 15 00 09 E5 DD 4E FE +R 00 00 01 00 +T 8C 01 00 00 DD 46 FF 03 03 0A 5F 03 0A 57 3E +R 00 00 01 00 +T 97 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 9C 01 00 00 00 00 00 00 4D 44 E1 71 23 70 C3 +R 00 00 01 00 02 04 00 00 +T A5 01 00 00 C1 02 00 00 +R 00 00 01 00 00 04 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 DD 6E 14 DD 66 15 DD 75 FE DD 74 +R 00 00 01 00 +T B2 01 00 00 FF 21 13 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T BD 01 00 00 E5 DD 6E FE DD 66 FF 5E 23 56 3E +R 00 00 01 00 +T C8 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T CD 01 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 00 00 +T D5 01 00 00 15 00 09 E5 DD 5E FE DD 56 FF 13 +R 00 00 01 00 +T E0 01 00 00 13 EB 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T E8 01 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T EF 01 00 00 73 23 72 21 04 00 DD 5E FE DD 56 +R 00 00 01 00 +T FA 01 00 00 FF 19 4E 23 46 23 5E 23 56 69 60 +R 00 00 01 00 +T 05 02 00 00 E5 21 17 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T 10 02 00 00 C1 D5 59 50 C1 73 23 72 23 71 23 +R 00 00 01 00 +T 1B 02 00 00 70 21 08 00 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T 26 02 00 00 4E 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T 31 02 00 00 1B 00 DD 4E FC DD 46 FD 09 C1 D5 +R 00 00 01 00 +T 3C 02 00 00 59 50 C1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T 47 02 00 00 0C 00 DD 4E FE DD 46 FF 09 4E 23 +R 00 00 01 00 +T 52 02 00 00 46 23 5E 23 56 69 60 E5 21 1F 00 +R 00 00 01 00 +T 5D 02 00 00 DD 4E FC DD 46 FD 09 C1 D5 59 50 +R 00 00 01 00 +T 68 02 00 00 C1 73 23 72 23 71 23 70 21 10 00 +R 00 00 01 00 +T 73 02 00 00 DD 4E FE DD 46 FF 09 4E 23 46 23 +R 00 00 01 00 +T 7E 02 00 00 5E 23 56 69 60 E5 21 23 00 DD 4E +R 00 00 01 00 +T 89 02 00 00 FC DD 46 FD 09 C1 D5 59 50 C1 73 +R 00 00 01 00 +T 94 02 00 00 23 72 23 71 23 70 21 14 00 DD 4E +R 00 00 01 00 +T 9F 02 00 00 FE DD 46 FF 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T AA 02 00 00 46 EB E5 21 27 00 DD 5E FC DD 56 +R 00 00 01 00 +T B5 02 00 00 FD 19 D1 73 23 72 23 71 23 70 18 +R 00 00 01 00 +T C0 02 00 00 00 +R 00 00 01 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T C7 02 00 00 +R 00 00 01 00 +T C7 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/internet_lib/netuser.rel b/src/nos/lib/internet_lib/netuser.rel new file mode 100644 index 00000000..3e1b8950 --- /dev/null +++ b/src/nos/lib/internet_lib/netuser.rel @@ -0,0 +1,293 @@ +XL4 +H 4 areas 13 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sprintf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___ctype Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S ?L_ORASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27C flags 0 +S _inet_ntoa Def000000CD +S _pinet Def00000246 +S _aton Def00000000 +S _htol Def00000127 +A CSTR size 12 flags 0 +A UDATA0 size 30 flags 0 +S _Net_error Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 77 FB DD 77 FC DD 77 FD DD 7E +R 00 00 01 00 +T 14 00 00 00 02 DD B6 03 20 09 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 01 00 00 21 00 00 C3 CA 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 DD 36 FE 18 DD 36 FF 00 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD CB FF 7E C2 BE 00 00 00 +R 00 00 01 00 00 09 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 DD 6E 02 DD 66 03 AF B6 28 1C DD +R 00 00 01 00 +T 3D 00 00 00 6E 02 DD 66 03 4E 06 00 21 +R 00 00 01 00 +T 46 00 00 00 00 00 00 00 09 7E E6 08 20 0A +R 00 00 01 00 02 04 07 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 18 DA +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 DD 6E 02 DD 66 03 AF B6 20 02 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 18 5A +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 21 00 00 39 E5 DD 7E FE F5 DD 5E +R 00 00 01 00 +T 6F 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 76 00 00 00 00 00 00 00 CD 00 00 00 00 7C 07 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 7D 00 00 00 9F 4F 41 F1 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 09 05 00 +T 86 00 00 00 CD 00 00 00 00 01 2E 00 DD 5E 02 +R 00 00 01 00 02 05 0A 00 +T 8F 00 00 00 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 95 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 9C 00 00 00 02 DD 74 03 7D B4 20 02 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 18 18 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 04 00 39 7E D6 08 77 23 7E DE +R 00 00 01 00 +T B9 00 00 00 00 77 C3 2B 00 00 00 +R 00 00 01 00 00 07 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 DD 4E FC DD 46 FD DD 6E FA DD 66 +R 00 00 01 00 +T C9 00 00 00 FB +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0D 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 CD 00 00 00 00 16 00 D5 DD 6E 02 +R 00 00 01 00 02 05 06 00 +T D6 00 00 00 DD 66 03 6C 26 00 26 00 E5 3E 10 +R 00 00 01 00 +T E1 00 00 00 DD 4E 04 DD 46 05 DD 6E 02 DD 66 +R 00 00 01 00 +T EC 00 00 00 03 CD 00 00 00 00 26 00 E5 3E 10 +R 00 00 01 00 02 06 0C 00 +T F5 00 00 00 DD 4E 04 DD 46 05 DD 6E 02 DD 66 +R 00 00 01 00 +T 00 01 00 00 03 CD 00 00 00 00 6C 26 00 26 00 +R 00 00 01 00 02 06 0C 00 +T 09 01 00 00 E5 21 00 00 00 00 E5 21 +R 00 00 01 00 00 06 02 00 +T 0F 01 00 00 02 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 0A 01 00 +T 15 01 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 1C 01 00 00 0C 00 39 F9 EB 21 02 00 00 00 C3 +R 00 00 01 00 00 0A 03 00 +T 25 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 27 01 00 00 +R 00 00 01 00 +T 27 01 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 08 00 +T 30 01 00 00 DD 77 FB DD 77 FC DD 77 FD +R 00 00 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 44 01 00 00 74 03 2B 46 DD 70 FE 04 05 CA +R 00 00 01 00 +T 4E 01 00 00 37 02 00 00 +R 00 00 01 00 00 04 01 00 +T 50 01 00 00 +R 00 00 01 00 +T 50 01 00 00 DD 7E FE FE 78 20 02 +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 18 E0 +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 DD 7E FE FE 30 38 42 3E 39 DD BE +R 00 00 01 00 +T 64 01 00 00 FE 38 3B +R 00 00 01 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 DD 4E FE 06 00 21 D0 FF 09 7C 07 +R 00 00 01 00 +T 72 01 00 00 9F 4F 41 C5 E5 3E 04 DD 4E FC DD +R 00 00 01 00 +T 7D 01 00 00 46 FD DD 6E FA DD 66 FB CD +R 00 00 01 00 +T 86 01 00 00 00 00 00 00 59 50 C1 09 EB C1 ED +R 00 00 01 00 02 04 05 00 +T 8F 01 00 00 4A 4D 44 EB DD 75 FA DD 74 FB DD +R 00 00 01 00 +T 9A 01 00 00 71 FC DD 70 FD C3 34 02 00 00 +R 00 00 01 00 00 0A 01 00 +T A2 01 00 00 +R 00 00 01 00 +T A2 01 00 00 DD 7E FE FE 61 38 41 3E 66 DD BE +R 00 00 01 00 +T AD 01 00 00 FE 38 3A +R 00 00 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 DD 4E FE 06 00 21 A9 FF 09 7C 07 +R 00 00 01 00 +T BB 01 00 00 9F 4F 41 C5 E5 3E 04 DD 4E FC DD +R 00 00 01 00 +T C6 01 00 00 46 FD DD 6E FA DD 66 FB CD +R 00 00 01 00 +T CF 01 00 00 00 00 00 00 59 50 C1 09 EB C1 ED +R 00 00 01 00 02 04 05 00 +T D8 01 00 00 4A 4D 44 EB DD 75 FA DD 74 FB DD +R 00 00 01 00 +T E3 01 00 00 71 FC DD 70 FD 18 4A +R 00 00 01 00 +T EA 01 00 00 +R 00 00 01 00 +T EA 01 00 00 DD 7E FE FE 41 38 41 3E 46 DD BE +R 00 00 01 00 +T F5 01 00 00 FE 38 3A +R 00 00 01 00 +T F8 01 00 00 +R 00 00 01 00 +T F8 01 00 00 +R 00 00 01 00 +T F8 01 00 00 +R 00 00 01 00 +T F8 01 00 00 DD 4E FE 06 00 21 C9 FF 09 7C 07 +R 00 00 01 00 +T 03 02 00 00 9F 4F 41 C5 E5 3E 04 DD 4E FC DD +R 00 00 01 00 +T 0E 02 00 00 46 FD DD 6E FA DD 66 FB CD +R 00 00 01 00 +T 17 02 00 00 00 00 00 00 59 50 C1 09 EB C1 ED +R 00 00 01 00 02 04 05 00 +T 20 02 00 00 4A 4D 44 EB DD 75 FA DD 74 FB DD +R 00 00 01 00 +T 2B 02 00 00 71 FC DD 70 FD 18 02 +R 00 00 01 00 +T 32 02 00 00 +R 00 00 01 00 +T 32 02 00 00 18 03 +R 00 00 01 00 +T 34 02 00 00 +R 00 00 01 00 +T 34 02 00 00 +R 00 00 01 00 +T 34 02 00 00 +R 00 00 01 00 +T 34 02 00 00 C3 39 01 00 00 +R 00 00 01 00 00 05 01 00 +T 37 02 00 00 +R 00 00 01 00 +T 37 02 00 00 DD 4E FC DD 46 FD DD 6E FA DD 66 +R 00 00 01 00 +T 42 02 00 00 FB C3 00 00 00 00 +R 00 00 01 00 02 06 0D 00 +T 46 02 00 00 +R 00 00 01 00 +T 46 02 00 00 CD 00 00 00 00 21 04 00 19 4E 23 +R 00 00 01 00 02 05 06 00 +T 4F 02 00 00 46 C5 EB 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 5A 02 00 00 CD 00 00 00 21 CD 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 5F 02 00 00 00 00 00 00 E5 21 0C 00 00 00 E5 +R 00 00 01 00 02 04 00 00 00 0A 02 00 +T 66 02 00 00 21 12 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 03 00 2B 0B 01 00 +T 6C 02 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 73 02 00 00 F1 F1 F1 21 12 00 00 00 C3 +R 00 00 01 00 00 08 03 00 +T 7A 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 75 2E 25 75 2E 25 75 2E 25 75 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 +T 0C 00 00 00 +R 00 00 02 00 +T 0C 00 00 00 25 73 3A 25 75 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 12 00 00 00 +R 00 00 03 00 +T 12 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/newfrag.rel b/src/nos/lib/internet_lib/newfrag.rel new file mode 100644 index 00000000..619062a2 --- /dev/null +++ b/src/nos/lib/internet_lib/newfrag.rel @@ -0,0 +1,48 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 71 flags 0 +S _newfrag Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 01 0A 00 11 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 13 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 25 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 2C 00 00 00 00 00 18 3E +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 3B 00 00 00 DD 6E 0A DD 66 0B 5E 23 56 E1 73 +R 00 00 01 00 +T 46 00 00 00 23 72 DD 6E 0A DD 66 0B AF 77 23 +R 00 00 01 00 +T 51 00 00 00 77 21 06 00 09 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 5C 00 00 00 73 23 72 21 08 00 09 DD 5E 04 DD +R 00 00 01 00 +T 67 00 00 00 56 05 73 23 72 69 60 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/internet_lib/ping.rel b/src/nos/lib/internet_lib/ping.rel new file mode 100644 index 00000000..87330460 --- /dev/null +++ b/src/nos/lib/internet_lib/ping.rel @@ -0,0 +1,974 @@ +XL4 +H 3 areas 41 global symbols +S _resolve Ref00000000 +S _inet_ntoa Ref00000000 +S ___03b3_2057_Too_20many_20sessio Ref00000000 +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?L_DEC_L03 Ref00000000 +S _Icmp_echo Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _socket Ref00000000 +S _memset Ref00000000 +S _memcpy Ref00000000 +S _ppause Ref00000000 +S _newsession Ref00000000 +S ___0115_2875__2510lu_2510lu_255l Ref00000000 +S ?L_INC_L03 Ref00000000 +S _setjmp Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0343_7fa9_Pinging_20suspended Ref00000000 +S _close Ref00000000 +S _alert Ref00000000 +S __fprintf Ref00000000 +S ___0342_94a5_Pinging_20resumed_0 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___0046_da1e__20_20_20_20_20_20s Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _killproc Ref00000000 +S _Icmp_mib Ref00000000 +S _pullup Ref00000000 +S _ntohicmp Ref00000000 +S _htonicmp Ref00000000 +S ___0367_ae52_Resolving_20_25s_2e Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Current Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _freesession Ref00000000 +S _ksignal Ref00000000 +S ___0202_ef8c_Can_27t_20create_20 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?SL_MOD_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _msclock Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _atoi Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S ___0341_7bc8_Pinging_20_25s_0a Ref00000000 +S _atol Ref00000000 +S ___03f1_699f__5eC_0a Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S __printf Ref00000000 +S _send_mbuf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S _recv_mbuf Ref00000000 +S ___05c6_5c70_unknown_0a Ref00000000 +S _shutdown Ref00000000 +S _Cmdline Ref00000000 +S _newproc Ref00000000 +S _keywait Ref00000000 +S ___0164_04ae__25s_3a_20rtt_20_25 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BE7 flags 0 +S _pingem Def000008F4 +S _doping Def00000000 +S _echo_proc Def00000771 +A CSTR size 7 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 AE FF 21 28 00 E5 +R 00 00 01 00 02 05 29 00 +T 09 00 00 00 01 00 00 21 2A 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 18 00 00 00 00 00 00 00 F1 21 01 00 E5 01 +R 00 00 01 00 02 04 04 00 +T 20 00 00 00 04 00 ED 5B 00 00 00 00 3E +R 00 00 01 00 02 08 3A 00 +T 27 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 2C 00 00 00 00 00 00 00 F1 DD 75 D6 DD 74 D7 +R 00 00 01 00 02 04 04 00 +T 35 00 00 00 DD 75 FE DD 74 FF 7D B4 20 17 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 02 00 02 0B 02 00 +T 45 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 33 00 02 0B 33 00 +T 4B 00 00 00 CD 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 05 04 00 +T 54 00 00 00 0F 07 00 00 +R 00 00 01 00 00 04 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 21 01 00 E5 01 02 00 11 00 00 3E +R 00 00 01 00 +T 61 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 66 00 00 00 00 00 00 00 F1 DD 75 D2 DD 74 D3 +R 00 00 01 00 02 04 04 00 +T 6F 00 00 00 DD 75 D8 DD 74 D9 7D A4 3C 20 33 +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 26 00 02 0B 26 00 +T 80 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 33 00 02 0B 33 00 +T 86 00 00 00 CD 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 05 04 00 +T 8F 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 3C 00 +T 94 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 3C 00 02 09 04 00 +T 9B 00 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 24 00 +T A2 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 24 00 02 09 04 00 +T A8 00 00 00 01 00 C3 0F 07 00 00 +R 00 00 01 00 00 07 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 21 20 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T B8 00 00 00 12 07 00 00 23 36 12 07 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T BD 00 00 00 36 12 07 00 00 21 04 00 ED 4B +R 00 00 01 00 29 05 01 00 +T C4 00 00 00 00 00 00 00 09 7E F6 08 77 23 7E +R 00 00 01 00 02 04 18 00 +T CD 00 00 00 F6 00 77 21 22 00 ED 4B +R 00 00 01 00 +T D5 00 00 00 00 00 00 00 09 36 6B 23 36 00 21 +R 00 00 01 00 02 04 18 00 +T DE 00 00 00 14 00 ED 4B 00 00 00 00 09 EB 3E +R 00 00 01 00 02 08 18 00 +T E7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T EC 00 00 00 00 00 00 00 7D B4 28 22 +R 00 00 01 00 02 04 04 00 +T F2 00 00 00 +R 00 00 01 00 +T F2 00 00 00 01 01 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3C 00 +T FA 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 3C 00 02 0A 04 00 +T 01 01 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 24 00 +T 09 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 24 00 02 09 04 00 +T 0F 01 00 00 01 00 C3 0F 07 00 00 +R 00 00 01 00 00 07 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 1F 01 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 20 00 +T 24 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 20 00 2B 0A 33 00 +T 2A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 33 00 02 09 04 00 +T 31 01 00 00 F1 DD 6E 04 DD 66 05 23 23 5E 23 +R 00 00 01 00 +T 3C 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 42 01 00 00 CD 00 00 00 00 DD 75 DA DD 74 DB +R 00 00 01 00 02 05 04 00 +T 4B 01 00 00 DD 71 DC DD 70 DD 7D B4 B1 B0 20 +R 00 00 01 00 +T 56 01 00 00 33 +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 38 00 02 0B 38 00 +T 5D 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 33 00 02 0B 33 00 +T 63 01 00 00 CD 00 00 00 00 F1 F1 01 01 00 11 +R 00 00 01 00 02 05 04 00 +T 6C 01 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 3C 00 +T 71 01 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 3C 00 02 09 04 00 +T 78 01 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 24 00 +T 7F 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 24 00 02 09 04 00 +T 85 01 00 00 01 00 C3 0F 07 00 00 +R 00 00 01 00 00 07 01 00 +T 8A 01 00 00 +R 00 00 01 00 +T 8A 01 00 00 21 2C 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 95 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 9B 01 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 04 00 2B 0A 2E 00 +T A1 01 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 2E 00 2B 0B 33 00 +T A7 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 33 00 02 0A 04 00 +T AE 01 00 00 F1 F1 21 05 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T B9 01 00 00 09 E5 21 2A 00 39 4D 44 E1 71 23 +R 00 00 01 00 +T C4 01 00 00 70 DD 4E 02 DD 46 03 21 02 00 CD +R 00 00 01 00 +T CF 01 00 00 00 00 00 00 30 1B +R 00 00 01 00 02 04 31 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T DE 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2C 00 +T E3 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 2C 00 02 09 04 00 +T EA 01 00 00 FC DD 74 FD +R 00 00 01 00 +T EE 01 00 00 +R 00 00 01 00 +T EE 01 00 00 DD 4E 02 DD 46 03 21 03 00 CD +R 00 00 01 00 +T F8 01 00 00 00 00 00 00 30 21 +R 00 00 01 00 02 04 31 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 21 06 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 07 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2F 00 +T 0C 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 2F 00 02 09 04 00 +T 13 02 00 00 F8 DD 74 F9 DD 71 FA DD 70 FB +R 00 00 01 00 +T 1D 02 00 00 +R 00 00 01 00 +T 1D 02 00 00 DD 4E 02 DD 46 03 21 04 00 CD +R 00 00 01 00 +T 27 02 00 00 00 00 00 00 30 08 +R 00 00 01 00 02 04 31 00 +T 2B 02 00 00 +R 00 00 01 00 +T 2B 02 00 00 DD 36 DE 01 DD 36 DF 00 +R 00 00 01 00 +T 33 02 00 00 +R 00 00 01 00 +T 33 02 00 00 21 4A 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 3E 02 00 00 EB 7D B4 B1 B0 28 43 +R 00 00 01 00 +T 45 02 00 00 +R 00 00 01 00 +T 45 02 00 00 21 09 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 50 02 00 00 01 00 00 C5 01 00 00 C5 21 2E 00 +R 00 00 01 00 +T 5B 02 00 00 39 E5 DD 6E D2 DD 66 D3 E5 0E +R 00 00 01 00 +T 65 02 00 00 20 08 00 00 C5 21 20 08 00 00 E5 +R 00 00 01 00 29 04 01 00 00 0A 01 00 +T 6B 02 00 00 01 2C 01 11 00 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T 72 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3B 00 02 09 3B 00 +T 77 02 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 04 00 +T 80 02 00 00 4D 44 E1 71 23 70 18 5D +R 00 00 01 00 +T 88 02 00 00 +R 00 00 01 00 +T 88 02 00 00 DD 6E FC DD 66 FD E5 21 FF FF E5 +R 00 00 01 00 +T 93 02 00 00 21 00 00 E5 DD 6E DC DD 66 DD E5 +R 00 00 01 00 +T 9E 02 00 00 DD 6E DA DD 66 DB E5 DD 5E D2 DD +R 00 00 01 00 +T A9 02 00 00 56 D3 3E F4 08 00 00 21 +R 00 00 01 00 29 07 01 00 +T AE 02 00 00 F4 08 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 00 04 01 00 02 09 04 00 +T B5 02 00 00 F1 F1 F1 DD 5E D2 DD 56 D3 3E +R 00 00 01 00 +T BF 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T C4 02 00 00 00 00 00 00 11 40 00 3E +R 00 00 01 00 02 04 04 00 +T CA 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T CF 02 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 02 04 04 00 +T D8 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T DD 02 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 04 00 +T E3 02 00 00 0F 07 00 00 +R 00 00 01 00 00 04 01 00 +T E5 02 00 00 +R 00 00 01 00 +T E5 02 00 00 21 20 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T F0 02 00 00 46 0A 00 00 23 36 46 0A 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T F5 02 00 00 36 46 0A 00 00 21 28 00 39 4D 44 +R 00 00 01 00 29 05 01 00 +T FD 02 00 00 DD 5E FE DD 56 FF CD 5A 07 00 00 +R 00 00 01 00 00 0B 01 00 +T 06 03 00 00 +R 00 00 01 00 +T 06 03 00 00 DD 36 D4 10 DD 36 D5 00 21 26 00 +R 00 00 01 00 +T 11 03 00 00 39 E5 21 02 00 39 E5 21 00 00 E5 +R 00 00 01 00 +T 1C 03 00 00 21 1C 00 39 4D 44 DD 5E D2 DD 56 +R 00 00 01 00 +T 27 03 00 00 D3 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 37 00 02 0B 37 00 +T 2D 03 00 00 CD 00 00 00 00 F1 F1 F1 7D A4 3C +R 00 00 01 00 02 05 04 00 +T 36 03 00 00 20 03 +R 00 00 01 00 +T 38 03 00 00 +R 00 00 01 00 +T 38 03 00 00 C3 B6 06 00 00 +R 00 00 01 00 00 05 01 00 +T 3B 03 00 00 +R 00 00 01 00 +T 3B 03 00 00 21 16 00 39 4D 44 21 10 00 39 5D +R 00 00 01 00 +T 46 03 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1E 00 02 0B 1E 00 +T 4C 03 00 00 CD 00 00 00 00 DD 7E BE B7 20 11 +R 00 00 01 00 02 05 04 00 +T 55 03 00 00 DD 6E C0 DD 66 C1 DD 4E D2 DD 46 +R 00 00 01 00 +T 60 03 00 00 D3 A7 ED 42 28 10 +R 00 00 01 00 +T 66 03 00 00 +R 00 00 01 00 +T 66 03 00 00 +R 00 00 01 00 +T 66 03 00 00 +R 00 00 01 00 +T 66 03 00 00 21 16 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 32 00 +T 6E 03 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 32 00 02 0A 04 00 +T 75 03 00 00 90 +R 00 00 01 00 +T 76 03 00 00 +R 00 00 01 00 +T 76 03 00 00 21 04 00 E5 21 1A 00 39 4D 44 21 +R 00 00 01 00 +T 81 03 00 00 18 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1D 00 +T 89 03 00 00 00 00 00 00 CD 00 00 00 00 F1 3E +R 00 00 01 00 02 04 1D 00 02 09 04 00 +T 90 03 00 00 04 AD B4 28 11 +R 00 00 01 00 +T 95 03 00 00 +R 00 00 01 00 +T 95 03 00 00 21 16 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 32 00 +T 9D 03 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 32 00 02 0A 04 00 +T A4 03 00 00 06 03 00 00 +R 00 00 01 00 00 04 01 00 +T A6 03 00 00 +R 00 00 01 00 +T A6 03 00 00 21 16 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 32 00 +T AE 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 32 00 02 0A 04 00 +T B5 03 00 00 6E F4 DD 66 F5 DD 4E F6 DD 46 F7 +R 00 00 01 00 +T C0 03 00 00 CD 00 00 00 00 DD 75 F4 DD 74 F5 +R 00 00 01 00 02 05 0E 00 +T C9 03 00 00 DD 71 F6 DD 70 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2A 00 +T D1 03 00 00 21 00 00 00 00 CD 00 00 00 00 59 +R 00 00 01 00 02 05 2A 00 02 0A 04 00 +T D8 03 00 00 50 A7 DD 4E C6 DD 46 C7 ED 42 EB +R 00 00 01 00 +T E3 03 00 00 DD 4E C8 DD 46 C9 ED 42 4D 44 EB +R 00 00 01 00 +T EE 03 00 00 DD 75 CA DD 74 CB DD 71 CC DD 70 +R 00 00 01 00 +T F9 03 00 00 CD C5 E5 21 3A 00 39 5E 23 56 23 +R 00 00 01 00 +T 04 04 00 00 4E 23 46 EB CD 00 00 00 00 30 23 +R 00 00 01 00 02 09 27 00 +T 0D 04 00 00 A7 DD 6E CA DD 66 CB DD 4E E4 DD +R 00 00 01 00 +T 18 04 00 00 46 E5 ED 42 EB DD 6E CC DD 66 CD +R 00 00 01 00 +T 23 04 00 00 DD 4E E6 DD 46 E7 ED 42 4D 44 EB +R 00 00 01 00 +T 2E 04 00 00 18 21 +R 00 00 01 00 +T 30 04 00 00 +R 00 00 01 00 +T 30 04 00 00 A7 DD 6E E4 DD 66 E5 DD 4E CA DD +R 00 00 01 00 +T 3B 04 00 00 46 CB ED 42 EB DD 6E E6 DD 66 E7 +R 00 00 01 00 +T 46 04 00 00 DD 4E CC DD 46 CD ED 42 4D 44 EB +R 00 00 01 00 +T 51 04 00 00 +R 00 00 01 00 +T 51 04 00 00 DD 75 CE DD 74 CF DD 71 D0 DD 70 +R 00 00 01 00 +T 5C 04 00 00 D1 3E 01 DD AE F4 DD B6 F5 DD B6 +R 00 00 01 00 +T 67 04 00 00 F6 DD B6 F7 20 4C +R 00 00 01 00 +T 6D 04 00 00 +R 00 00 01 00 +T 6D 04 00 00 DD 4E CC DD 46 CD DD 6E CA DD 66 +R 00 00 01 00 +T 78 04 00 00 CB DD 75 E4 DD 74 E5 DD 71 E6 DD +R 00 00 01 00 +T 83 04 00 00 70 E7 AF DD 77 E8 DD 77 E9 DD 77 +R 00 00 01 00 +T 8E 04 00 00 EA DD 77 EB DD 4E CC DD 46 CD DD +R 00 00 01 00 +T 99 04 00 00 6E CA DD 66 CB DD 75 F0 DD 74 F1 +R 00 00 01 00 +T A4 04 00 00 DD 71 F2 DD 70 F3 DD 75 EC DD 74 +R 00 00 01 00 +T AF 04 00 00 ED DD 71 EE DD 70 EF C3 +R 00 00 01 00 +T B7 04 00 00 C1 05 00 00 +R 00 00 01 00 00 04 01 00 +T B9 04 00 00 +R 00 00 01 00 +T B9 04 00 00 DD 6E E6 DD 66 E7 E5 DD 6E E4 DD +R 00 00 01 00 +T C4 04 00 00 66 E5 E5 01 00 00 21 07 00 CD +R 00 00 01 00 +T CE 04 00 00 00 00 00 00 C5 E5 DD 6E CA DD 66 +R 00 00 01 00 02 04 23 00 +T D7 04 00 00 CB C1 09 EB DD 6E CC DD 66 CD C1 +R 00 00 01 00 +T E2 04 00 00 ED 4A E5 D5 21 04 00 C1 09 EB 21 +R 00 00 01 00 +T ED 04 00 00 00 00 C1 ED 4A 4D 44 EB 3E 03 CD +R 00 00 01 00 +T F8 04 00 00 00 00 00 00 DD 75 E4 DD 74 E5 DD +R 00 00 01 00 02 04 36 00 +T 01 05 00 00 71 E6 DD 70 E7 DD 6E EA DD 66 EB +R 00 00 01 00 +T 0C 05 00 00 E5 DD 6E E8 DD 66 E9 E5 01 00 00 +R 00 00 01 00 +T 17 05 00 00 21 03 00 CD 00 00 00 00 C5 E5 DD +R 00 00 01 00 02 08 23 00 +T 20 05 00 00 6E CE DD 66 CF C1 09 EB DD 6E D0 +R 00 00 01 00 +T 2B 05 00 00 DD 66 D1 C1 ED 4A E5 D5 21 02 00 +R 00 00 01 00 +T 36 05 00 00 C1 09 EB 21 00 00 C1 ED 4A 4D 44 +R 00 00 01 00 +T 41 05 00 00 EB 3E 02 CD 00 00 00 00 DD 75 E8 +R 00 00 01 00 02 08 36 00 +T 4A 05 00 00 DD 74 E9 DD 71 EA DD 70 EB DD 6E +R 00 00 01 00 +T 55 05 00 00 CC DD 66 CD E5 DD 6E CA DD 66 CB +R 00 00 01 00 +T 60 05 00 00 E5 21 42 00 39 5E 23 56 23 4E 23 +R 00 00 01 00 +T 6B 05 00 00 46 EB CD 00 00 00 00 30 18 +R 00 00 01 00 02 07 27 00 +T 72 05 00 00 +R 00 00 01 00 +T 72 05 00 00 DD 4E CC DD 46 CD DD 6E CA DD 66 +R 00 00 01 00 +T 7D 05 00 00 CB DD 75 EC DD 74 ED DD 71 EE DD +R 00 00 01 00 +T 88 05 00 00 70 EF +R 00 00 01 00 +T 8A 05 00 00 +R 00 00 01 00 +T 8A 05 00 00 DD 6E F2 DD 66 F3 E5 DD 6E F0 DD +R 00 00 01 00 +T 95 05 00 00 66 F1 E5 DD 4E CC DD 46 CD DD 6E +R 00 00 01 00 +T A0 05 00 00 CA DD 66 CB CD 00 00 00 00 30 18 +R 00 00 01 00 02 09 27 00 +T A9 05 00 00 +R 00 00 01 00 +T A9 05 00 00 DD 4E CC DD 46 CD DD 6E CA DD 66 +R 00 00 01 00 +T B4 05 00 00 CB DD 75 F0 DD 74 F1 DD 71 F2 DD +R 00 00 01 00 +T BF 05 00 00 70 F3 +R 00 00 01 00 +T C1 05 00 00 +R 00 00 01 00 +T C1 05 00 00 +R 00 00 01 00 +T C1 05 00 00 21 00 00 E5 21 14 00 E5 21 4A 00 +R 00 00 01 00 +T CC 05 00 00 39 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T D6 05 00 00 00 00 00 00 7D B4 B1 B0 20 0F +R 00 00 01 00 02 04 28 00 +T DE 05 00 00 +R 00 00 01 00 +T DE 05 00 00 21 28 00 39 4D 44 DD 5E FE DD 56 +R 00 00 01 00 +T E9 05 00 00 FF CD 5A 07 00 00 +R 00 00 01 00 00 06 01 00 +T ED 05 00 00 +R 00 00 01 00 +T ED 05 00 00 DD 6E F2 DD 66 F3 E5 DD 6E F0 DD +R 00 00 01 00 +T F8 05 00 00 66 F1 E5 DD 6E EE DD 66 EF E5 DD +R 00 00 01 00 +T 03 06 00 00 6E EC DD 66 ED E5 DD 6E EA DD 66 +R 00 00 01 00 +T 0E 06 00 00 EB E5 DD 6E E8 DD 66 E9 E5 DD 6E +R 00 00 01 00 +T 19 06 00 00 E6 DD 66 E7 E5 DD 6E E4 DD 66 E5 +R 00 00 01 00 +T 24 06 00 00 E5 DD 6E CC DD 66 CD E5 DD 6E CA +R 00 00 01 00 +T 2F 06 00 00 DD 66 CB E5 DD 6E E2 DD 66 E3 E5 +R 00 00 01 00 +T 3A 06 00 00 DD 6E E0 DD 66 E1 E5 21 00 00 E5 +R 00 00 01 00 +T 45 06 00 00 21 02 00 E5 21 4E 00 39 5E 23 56 +R 00 00 01 00 +T 50 06 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 2D 00 +T 59 06 00 00 E5 DD 6E F6 DD 66 F7 E5 DD 6E F4 +R 00 00 01 00 +T 64 06 00 00 DD 66 F5 E5 01 00 00 21 64 00 CD +R 00 00 01 00 +T 6F 06 00 00 00 00 00 00 59 50 C1 09 EB C1 ED +R 00 00 01 00 02 04 23 00 +T 78 06 00 00 4A 4D 44 EB CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 09 2D 00 +T 81 06 00 00 DD 6E F6 DD 66 F7 E5 DD 6E F4 DD +R 00 00 01 00 +T 8C 06 00 00 66 F5 E5 DD 6E E2 DD 66 E3 E5 DD +R 00 00 01 00 +T 97 06 00 00 6E E0 DD 66 E1 E5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 9F 06 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 0D 00 +T A5 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 33 00 02 09 33 00 +T AA 06 00 00 00 00 00 00 EB 21 24 00 39 F9 EB +R 00 00 01 00 02 04 04 00 +T B3 06 00 00 C3 06 03 00 00 +R 00 00 01 00 00 05 01 00 +T B6 06 00 00 +R 00 00 01 00 +T B6 06 00 00 21 09 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T C1 06 00 00 23 B6 28 1D +R 00 00 01 00 +T C5 06 00 00 +R 00 00 01 00 +T C5 06 00 00 21 09 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T D0 06 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1B 00 +T D5 06 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1B 00 02 09 04 00 +T DB 06 00 00 09 00 09 AF 77 23 77 +R 00 00 01 00 +T E2 06 00 00 +R 00 00 01 00 +T E2 06 00 00 DD 5E D2 DD 56 D3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T EA 06 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 12 00 02 0A 04 00 +T F1 06 00 00 01 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 3C 00 +T F9 06 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 3C 00 02 09 04 00 +T 00 07 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 24 00 +T 07 07 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 24 00 02 09 04 00 +T 0D 07 00 00 00 00 +R 00 00 01 00 +T 0F 07 00 00 +R 00 00 01 00 +T 0F 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 12 07 00 00 +R 00 00 01 00 +T 12 07 00 00 CD 00 00 00 00 3E 03 AB B2 28 05 +R 00 00 01 00 02 05 21 00 +T 1B 07 00 00 +R 00 00 01 00 +T 1B 07 00 00 21 01 00 18 37 +R 00 00 01 00 +T 20 07 00 00 +R 00 00 01 00 +T 20 07 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 30 00 02 0B 30 00 +T 26 07 00 00 E5 21 1B 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 22 00 +T 2F 07 00 00 5E 23 56 D5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 14 00 +T 36 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 14 00 02 09 04 00 +T 3D 07 00 00 F1 01 6B 00 21 07 00 ED 5B +R 00 00 01 00 +T 46 07 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 22 00 +T 4D 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 52 07 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 04 00 +T 57 07 00 00 +R 00 00 01 00 +T 57 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 5A 07 00 00 +R 00 00 01 00 +T 5A 07 00 00 CD 00 00 00 00 2E 00 00 00 00 E5 +R 00 00 01 00 02 05 21 00 2B 0A 17 00 +T 60 07 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 17 00 2B 0B 33 00 +T 66 07 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 33 00 02 0A 04 00 +T 6D 07 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 16 00 +T 71 07 00 00 +R 00 00 01 00 +T 71 07 00 00 CD 00 00 00 00 F8 FF 2A +R 00 00 01 00 02 05 29 00 +T 77 07 00 00 00 00 00 00 7D B4 CA 01 08 00 00 +R 00 00 01 00 02 04 06 00 00 0B 01 00 +T 7E 07 00 00 DD 6E 0E DD 66 0F 23 23 7E 23 A6 +R 00 00 01 00 +T 89 07 00 00 3C 20 75 21 04 00 E5 21 02 00 39 +R 00 00 01 00 +T 94 07 00 00 4D 44 DD 5E 10 DD 56 11 3E +R 00 00 01 00 +T 9D 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T A2 07 00 00 00 00 00 00 F1 3E 04 AD B4 20 56 +R 00 00 01 00 02 04 04 00 +T AB 07 00 00 +R 00 00 01 00 +T AB 07 00 00 +R 00 00 01 00 +T AB 07 00 00 +R 00 00 01 00 +T AB 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2A 00 02 0A 2A 00 +T B1 07 00 00 00 00 00 00 59 50 A7 DD 4E F8 DD +R 00 00 01 00 02 04 04 00 +T BA 07 00 00 46 F9 ED 42 EB DD 4E FA DD 46 FB +R 00 00 01 00 +T C5 07 00 00 ED 42 4D 44 EB DD 75 FC DD 74 FD +R 00 00 01 00 +T D0 07 00 00 DD 71 FE DD 70 FF C5 E5 DD 4E 04 +R 00 00 01 00 +T DB 07 00 00 DD 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T E5 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T EA 07 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 04 00 2B 0A 3D 00 +T F0 07 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 3D 00 2B 0B 33 00 +T F6 07 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 33 00 02 0A 04 00 +T FD 07 00 00 F1 F1 F1 F1 +R 00 00 01 00 +T 01 08 00 00 +R 00 00 01 00 +T 01 08 00 00 DD 5E 10 DD 56 11 3E 00 00 00 00 +R 00 00 01 00 2B 0B 32 00 +T 09 08 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 32 00 02 0A 04 00 +T 10 08 00 00 00 00 11 40 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 25 00 +T 18 08 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 25 00 02 09 04 00 +T 1E 08 00 00 00 00 00 00 +R 00 00 01 00 02 04 10 00 +T 20 08 00 00 +R 00 00 01 00 +T 20 08 00 00 CD 00 00 00 00 FE FF DD 71 FE DD +R 00 00 01 00 02 05 29 00 +T 29 08 00 00 70 FF 21 08 00 09 7E 23 B6 28 5E +R 00 00 01 00 +T 34 08 00 00 +R 00 00 01 00 +T 34 08 00 00 +R 00 00 01 00 +T 34 08 00 00 21 26 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 3F 08 00 00 23 56 D5 21 FF FF E5 21 00 00 E5 +R 00 00 01 00 +T 4A 08 00 00 21 04 00 09 CD 00 00 00 00 EB CD +R 00 00 01 00 02 09 2B 00 +T 53 08 00 00 00 00 00 00 C5 E5 DD 5E 02 DD 56 +R 00 00 01 00 02 04 05 00 +T 5C 08 00 00 03 3E F4 08 00 00 21 F4 08 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T 62 08 00 00 CD 00 00 00 00 F1 F1 F1 F1 F1 21 +R 00 00 01 00 02 05 04 00 +T 6B 08 00 00 0A 00 DD 4E FE DD 46 FF 09 CD +R 00 00 01 00 +T 75 08 00 00 00 00 00 00 21 22 00 DD 4E FE DD +R 00 00 01 00 02 04 2B 00 +T 7E 08 00 00 46 FF 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 89 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 8E 08 00 00 00 00 00 00 18 A2 +R 00 00 01 00 02 04 04 00 +T 92 08 00 00 +R 00 00 01 00 +T 92 08 00 00 +R 00 00 01 00 +T 92 08 00 00 21 26 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 9D 08 00 00 23 56 D5 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T A8 08 00 00 0A 00 09 CD 00 00 00 00 EB CD +R 00 00 01 00 02 08 2B 00 +T B0 08 00 00 00 00 00 00 E5 21 04 00 DD 4E FE +R 00 00 01 00 02 04 05 00 +T B9 08 00 00 DD 46 FF 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T C4 08 00 00 C5 D5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T CD 08 00 00 F4 08 00 00 21 F4 08 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T D2 08 00 00 00 00 00 00 F1 F1 F1 F1 F1 21 +R 00 00 01 00 02 04 04 00 +T DA 08 00 00 22 00 DD 4E FE DD 46 FF 09 5E 23 +R 00 00 01 00 +T E5 08 00 00 56 23 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T ED 08 00 00 00 00 00 00 CD 00 00 00 00 18 9E +R 00 00 01 00 02 04 0B 00 02 09 04 00 +T F4 08 00 00 +R 00 00 01 00 +T F4 08 00 00 CD 00 00 00 00 E0 FF 3E +R 00 00 01 00 02 05 29 00 +T FA 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2A 00 02 09 2A 00 +T FF 08 00 00 00 00 00 00 DD 75 F8 DD 74 F9 DD +R 00 00 01 00 02 04 04 00 +T 08 09 00 00 71 FA DD 70 FB 21 04 00 DD 4E 12 +R 00 00 01 00 +T 13 09 00 00 DD 46 13 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 1B 09 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 04 00 +T 22 09 00 00 E0 DD 74 E1 11 0C 00 19 E5 21 +R 00 00 01 00 +T 2C 09 00 00 04 00 09 4D 44 E1 71 23 70 21 +R 00 00 01 00 +T 36 09 00 00 0A 00 DD 4E E0 DD 46 E1 09 46 23 +R 00 00 01 00 +T 41 09 00 00 66 68 01 04 00 09 DD 75 FE DD 74 +R 00 00 01 00 +T 4C 09 00 00 FF AF DD 77 FC DD 77 FD +R 00 00 01 00 +T 54 09 00 00 +R 00 00 01 00 +T 54 09 00 00 DD 6E 12 DD 66 13 2B DD 75 12 DD +R 00 00 01 00 +T 5F 09 00 00 74 13 23 7D B4 28 21 +R 00 00 01 00 +T 66 09 00 00 +R 00 00 01 00 +T 66 09 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 71 09 00 00 74 FD 2B E5 DD 6E FE DD 66 FF 23 +R 00 00 01 00 +T 7C 09 00 00 DD 75 FE DD 74 FF 2B C1 71 18 CD +R 00 00 01 00 +T 87 09 00 00 +R 00 00 01 00 +T 87 09 00 00 21 04 00 E5 21 1A 00 39 4D 44 21 +R 00 00 01 00 +T 92 09 00 00 0A 00 DD 5E E0 DD 56 E1 19 5E 23 +R 00 00 01 00 +T 9D 09 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T A3 09 00 00 CD 00 00 00 00 F1 2A 80 00 00 00 +R 00 00 01 00 02 05 04 00 02 0B 1C 00 +T AA 09 00 00 ED 4B 82 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 06 1C 00 02 0B 0E 00 +T B1 09 00 00 22 80 00 00 00 ED 43 82 00 00 00 +R 00 00 01 00 02 05 1C 00 02 0B 1C 00 +T B8 09 00 00 2A 56 00 00 00 ED 4B 58 00 00 00 +R 00 00 01 00 02 05 1C 00 02 0B 1C 00 +T BF 09 00 00 CD 00 00 00 00 22 56 00 00 00 ED +R 00 00 01 00 02 05 0E 00 02 0A 1C 00 +T C6 09 00 00 43 58 00 00 00 DD 36 E2 08 DD 36 +R 00 00 01 00 02 05 1C 00 +T CF 09 00 00 E3 00 DD 6E 0E DD 66 0F DD 75 E6 +R 00 00 01 00 +T DA 09 00 00 DD 74 E7 DD 6E 10 DD 66 11 DD 75 +R 00 00 01 00 +T E5 09 00 00 E4 DD 74 E5 21 00 00 39 4D 44 21 +R 00 00 01 00 +T F0 09 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1F 00 +T F8 09 00 00 00 00 00 00 CD 00 00 00 00 AF DD +R 00 00 01 00 02 04 1F 00 02 09 04 00 +T FF 09 00 00 77 E8 DD 77 E9 DD 4E 0C DD 46 0D +R 00 00 01 00 +T 0A 0A 00 00 DD 6E 0A DD 66 0B DD 75 EC DD 74 +R 00 00 01 00 +T 15 0A 00 00 ED DD 71 EE DD 70 EF 21 10 00 E5 +R 00 00 01 00 +T 20 0A 00 00 21 0A 00 39 E5 21 00 00 E5 21 +R 00 00 01 00 +T 2A 0A 00 00 06 00 39 4D 44 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 35 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 34 00 02 0A 34 00 +T 3B 0A 00 00 00 00 00 00 F1 F1 F1 21 00 00 C3 +R 00 00 01 00 02 04 04 00 +T 44 0A 00 00 00 00 00 00 +R 00 00 01 00 02 04 10 00 +T 46 0A 00 00 +R 00 00 01 00 +T 46 0A 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 29 00 +T 4C 0A 00 00 00 00 00 00 DD 75 FE DD 74 FF 01 +R 00 00 01 00 02 04 22 00 +T 55 0A 00 00 05 00 09 46 23 66 68 DD 75 FC DD +R 00 00 01 00 +T 60 0A 00 00 74 FD 23 23 7E 23 A6 3C 20 06 +R 00 00 01 00 +T 6A 0A 00 00 +R 00 00 01 00 +T 6A 0A 00 00 21 01 00 C3 E4 0B 00 00 +R 00 00 01 00 00 08 01 00 +T 70 0A 00 00 +R 00 00 01 00 +T 70 0A 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 79 0A 00 00 05 00 03 00 1B 00 20 00 51 00 +R 00 00 01 00 +T 83 0A 00 00 71 00 E1 0B 00 00 91 0A 00 00 +R 00 00 01 00 00 06 01 00 00 0A 01 00 +T 89 0A 00 00 91 0A 00 00 F9 0A 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8D 0A 00 00 91 0A 00 00 91 0A 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 91 0A 00 00 +R 00 00 01 00 +T 91 0A 00 00 01 6B 00 21 07 00 DD 5E FE DD 56 +R 00 00 01 00 +T 9C 0A 00 00 FF 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 13 00 +T A4 0A 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 13 00 02 09 04 00 +T AA 0A 00 00 09 00 ED 4B 00 00 00 00 09 7E 23 +R 00 00 01 00 02 08 22 00 +T B3 0A 00 00 B6 28 1D +R 00 00 01 00 +T B6 0A 00 00 +R 00 00 01 00 +T B6 0A 00 00 21 09 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T C1 0A 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1B 00 +T C6 0A 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1B 00 02 09 04 00 +T CC 0A 00 00 09 00 09 AF 77 23 77 +R 00 00 01 00 +T D3 0A 00 00 +R 00 00 01 00 +T D3 0A 00 00 01 02 00 DD 6E FC DD 66 FD 23 23 +R 00 00 01 00 +T DE 0A 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 39 00 +T E4 0A 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 39 00 02 09 04 00 +T EB 0A 00 00 FC DD 66 FD 23 23 36 FF 23 36 FF +R 00 00 01 00 +T F6 0A 00 00 C3 E1 0B 00 00 +R 00 00 01 00 00 05 01 00 +T F9 0A 00 00 +R 00 00 01 00 +T F9 0A 00 00 21 09 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 04 0B 00 00 23 B6 28 55 +R 00 00 01 00 +T 08 0B 00 00 +R 00 00 01 00 +T 08 0B 00 00 21 09 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 13 0B 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1B 00 +T 18 0B 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1B 00 02 09 04 00 +T 1E 0B 00 00 09 00 09 AF 77 23 77 21 0A 00 DD +R 00 00 01 00 +T 29 0B 00 00 5E FC DD 56 FD 19 5E 23 56 23 4E +R 00 00 01 00 +T 34 0B 00 00 23 46 C5 D5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 11 00 +T 3C 0B 00 00 00 00 00 00 E5 21 1B 00 DD 4E FE +R 00 00 01 00 02 04 11 00 +T 45 0B 00 00 DD 46 FF 09 4E 23 46 C5 3E +R 00 00 01 00 +T 4E 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T 53 0B 00 00 00 00 00 00 F1 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 04 00 +T 5B 0B 00 00 DF 0B 00 00 +R 00 00 01 00 00 04 01 00 +T 5D 0B 00 00 +R 00 00 01 00 +T 5D 0B 00 00 21 1E 00 DD 4E FC DD 46 FD 09 AF +R 00 00 01 00 +T 68 0B 00 00 77 23 77 23 77 23 77 21 0A 00 09 +R 00 00 01 00 +T 73 0B 00 00 AF 77 23 77 23 77 23 77 21 09 00 +R 00 00 01 00 +T 7E 0B 00 00 DD 5E FE DD 56 FF 19 E5 11 00 00 +R 00 00 01 00 +T 89 0B 00 00 D5 11 00 00 D5 C5 DD 4E FC DD 46 +R 00 00 01 00 +T 94 0B 00 00 FD 03 03 69 60 4E 23 46 C5 0E +R 00 00 01 00 +T 9E 0B 00 00 20 08 00 00 C5 21 20 08 00 00 E5 +R 00 00 01 00 29 04 01 00 00 0A 01 00 +T A4 0B 00 00 01 2C 01 11 00 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T AB 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3B 00 02 09 3B 00 +T B0 0B 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 04 00 +T B9 0B 00 00 4D 44 E1 71 23 70 0E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T C1 0B 00 00 C5 21 00 00 00 00 E5 21 1B 00 DD +R 00 00 01 00 02 06 15 00 +T CA 0B 00 00 4E FE DD 46 FF 09 4E 23 46 C5 3E +R 00 00 01 00 +T D5 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T DA 0B 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 04 00 +T DF 0B 00 00 +R 00 00 01 00 +T DF 0B 00 00 18 00 +R 00 00 01 00 +T E1 0B 00 00 +R 00 00 01 00 +T E1 0B 00 00 21 00 00 +R 00 00 01 00 +T E4 0B 00 00 +R 00 00 01 00 +T E4 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 70 69 6E 67 74 78 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/proc_syn.rel b/src/nos/lib/internet_lib/proc_syn.rel new file mode 100644 index 00000000..7c9872dd --- /dev/null +++ b/src/nos/lib/internet_lib/proc_syn.rel @@ -0,0 +1,211 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ip_mtu Ref00000000 +S _Tcp_tstamps Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?UC_RSH_L01 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _rtt_get Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2D4 flags 0 +S _proc_syn Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 6F 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 5E 02 DD 56 03 19 7E F6 01 77 23 +R 00 00 01 00 +T 14 00 00 00 7E F6 00 77 06 05 79 CD +R 00 00 01 00 +T 1C 00 00 00 00 00 00 00 E6 07 47 C5 21 71 00 +R 00 00 01 00 02 04 07 00 +T 25 00 00 00 19 7E 06 05 CD 00 00 00 00 E6 07 +R 00 00 01 00 02 09 07 00 +T 2E 00 00 00 C1 B8 30 0E +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 71 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 3D 00 00 00 46 04 70 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 04 00 DD 4E 0A DD 46 0B 09 5E +R 00 00 01 00 +T 4B 00 00 00 23 56 23 4E 23 46 C5 D5 21 01 00 +R 00 00 01 00 +T 56 00 00 00 C1 09 EB 21 00 00 C1 ED 4A 4D 44 +R 00 00 01 00 +T 61 00 00 00 EB E5 21 3F 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 6C 00 00 00 19 D1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T 76 00 00 00 04 00 DD 4E 0A DD 46 0B 09 4E 23 +R 00 00 01 00 +T 81 00 00 00 46 23 5E 23 56 69 60 E5 21 52 00 +R 00 00 01 00 +T 8C 00 00 00 DD 4E 02 DD 46 03 09 C1 D5 59 50 +R 00 00 01 00 +T 97 00 00 00 C1 73 23 72 23 71 23 70 C5 21 +R 00 00 01 00 +T A1 00 00 00 1E 00 DD 4E 02 DD 46 03 09 C1 73 +R 00 00 01 00 +T AC 00 00 00 23 72 23 71 23 70 21 0C 00 DD 4E +R 00 00 01 00 +T B7 00 00 00 0A DD 46 0B 09 56 23 66 6A 01 +R 00 00 01 00 +T C1 00 00 00 00 00 E5 21 26 00 DD 5E 02 DD 56 +R 00 00 01 00 +T CC 00 00 00 03 19 D1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T D7 00 00 00 1D 00 DD 4E 0A DD 46 0B 09 7E E6 +R 00 00 01 00 +T E2 00 00 00 80 47 23 7E E6 00 B0 28 24 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 21 12 00 DD 4E 0A DD 46 0B 09 46 +R 00 00 01 00 +T F6 00 00 00 23 66 68 01 00 00 E5 21 5A 00 DD +R 00 00 01 00 +T 01 01 00 00 5E 02 DD 56 03 19 D1 73 23 72 23 +R 00 00 01 00 +T 0C 01 00 00 71 23 70 +R 00 00 01 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 21 1D 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T 1A 01 00 00 E6 00 47 23 7E E6 01 B0 28 29 +R 00 00 01 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 21 14 00 DD 4E 0A DD 46 0B 09 46 +R 00 00 01 00 +T 2F 01 00 00 21 2C 00 DD 5E 02 DD 56 03 19 70 +R 00 00 01 00 +T 3A 01 00 00 21 49 00 19 36 00 21 6F 00 19 7E +R 00 00 01 00 +T 45 01 00 00 F6 00 77 23 7E F6 01 77 +R 00 00 01 00 +T 4D 01 00 00 +R 00 00 01 00 +T 4D 01 00 00 21 1D 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T 58 01 00 00 E6 00 47 23 7E E6 02 B0 28 44 2A +R 00 00 01 00 +T 63 01 00 00 00 00 00 00 7D B4 28 3D +R 00 00 01 00 02 04 02 00 +T 69 01 00 00 +R 00 00 01 00 +T 69 01 00 00 +R 00 00 01 00 +T 69 01 00 00 +R 00 00 01 00 +T 69 01 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 74 01 00 00 F6 80 77 23 7E F6 00 77 21 15 00 +R 00 00 01 00 +T 7F 01 00 00 DD 5E 0A DD 56 0B 19 4E 23 46 23 +R 00 00 01 00 +T 8A 01 00 00 5E 23 56 69 60 E5 21 4E 00 DD 4E +R 00 00 01 00 +T 95 01 00 00 02 DD 46 03 09 C1 D5 59 50 C1 73 +R 00 00 01 00 +T A0 01 00 00 23 72 23 71 23 70 +R 00 00 01 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T B1 01 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T B9 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T C0 01 00 00 75 FC DD 74 FD 7D B4 CA +R 00 00 01 00 +T C8 01 00 00 5F 02 00 00 +R 00 00 01 00 00 04 01 00 +T CA 01 00 00 +R 00 00 01 00 +T CA 01 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T D5 01 00 00 E6 80 47 23 7E E6 00 B0 28 0F +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 21 00 00 39 7E D6 34 77 23 7E DE +R 00 00 01 00 +T EA 01 00 00 00 77 18 0D +R 00 00 01 00 +T EE 01 00 00 +R 00 00 01 00 +T EE 01 00 00 21 00 00 39 7E D6 28 77 23 7E DE +R 00 00 01 00 +T F9 01 00 00 00 77 +R 00 00 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 21 5A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 06 02 00 00 23 56 23 4E 23 46 C5 D5 DD 6E FC +R 00 00 01 00 +T 11 02 00 00 DD 66 FD 01 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 1A 02 00 00 30 0B DD 6E FC DD 66 FD 01 00 00 +R 00 00 01 00 +T 25 02 00 00 18 12 +R 00 00 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 21 5A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 32 02 00 00 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 39 02 00 00 +R 00 00 01 00 +T 39 02 00 00 E5 21 5A 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 44 02 00 00 D1 73 23 72 23 71 23 70 C5 21 +R 00 00 01 00 +T 4E 02 00 00 35 00 DD 4E 02 DD 46 03 09 C1 73 +R 00 00 01 00 +T 59 02 00 00 23 72 23 71 23 70 +R 00 00 01 00 +T 5F 02 00 00 +R 00 00 01 00 +T 5F 02 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 6A 02 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 72 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 79 02 00 00 75 FE DD 74 FF 7D B4 28 4F +R 00 00 01 00 +T 82 02 00 00 +R 00 00 01 00 +T 82 02 00 00 21 04 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 8D 02 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T 97 02 00 00 9E 00 DD 4E 02 DD 46 03 09 C1 D5 +R 00 00 01 00 +T A2 02 00 00 59 50 C1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T AD 02 00 00 08 00 DD 4E FE DD 46 FF 09 5E 23 +R 00 00 01 00 +T B8 02 00 00 56 23 4E 23 46 EB E5 21 A2 00 DD +R 00 00 01 00 +T C3 02 00 00 5E 02 DD 56 03 19 D1 73 23 72 23 +R 00 00 01 00 +T CE 02 00 00 71 23 70 +R 00 00 01 00 +T D1 02 00 00 +R 00 00 01 00 +T D1 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/internet_lib/put_rr.rel b/src/nos/lib/internet_lib/put_rr.rel new file mode 100644 index 00000000..cf0747ae --- /dev/null +++ b/src/nos/lib/internet_lib/put_rr.rel @@ -0,0 +1,292 @@ +XL4 +H 2 areas 14 global symbols +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S ___000b_b9ba__09_25s Ref00000000 +S ___000d_1d7d__09_25s_09_25s_0a Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S ___0011_d62d__09_3c_25u_3e Ref00000000 +S ___000e_b532__09_25s_0a Ref00000000 +S .__.ABS. Def00000000 +S ___0136_ec2f__25s Ref00000000 +S _dtype Ref00000000 +S ___0012_9f29__09IN Ref00000000 +S ___000f_26e5__09_25u_09_25s_0a Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___0009_2913__09_25ld Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___000c_21cf__09_25s_09_25s_09_2 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32A flags 0 +S _put_rr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 0F 00 +T 09 00 00 00 B6 03 28 08 DD 7E 04 DD B6 05 20 +R 00 00 01 00 +T 14 00 00 00 03 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 C3 27 03 00 00 +R 00 00 01 00 00 05 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 21 07 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 23 00 00 00 23 B6 20 3A 21 05 00 DD 4E 04 DD +R 00 00 01 00 +T 2E 00 00 00 46 05 09 7E 23 B6 28 2B +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 21 05 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 41 00 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0B 00 +T 48 00 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 0B 00 +T 51 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 57 00 00 00 CD 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 05 01 00 +T 5F 00 00 00 27 03 00 00 +R 00 00 01 00 00 04 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 21 07 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 6C 00 00 00 23 56 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 08 0B 00 +T 73 00 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 0B 00 +T 7C 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 82 00 00 00 CD 00 00 00 00 F1 F1 F1 F1 21 +R 00 00 01 00 02 05 01 00 +T 8A 00 00 00 09 00 09 3E 80 23 23 23 AE 2B B6 +R 00 00 01 00 +T 95 00 00 00 2B B6 2B B6 28 2E +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 21 09 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T A6 00 00 00 23 46 23 5E 23 56 D5 C5 0E +R 00 00 01 00 +T AF 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 10 00 02 0A 10 00 +T B5 00 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T BD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T C2 00 00 00 00 00 00 00 F1 F1 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 21 0D 00 DD 4E 04 DD 46 05 09 3E +R 00 00 01 00 +T D4 00 00 00 01 AE 23 B6 20 1B +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0D 00 02 0B 0D 00 +T E0 00 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T E9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T EE 00 00 00 00 00 00 00 F1 F1 F1 18 28 +R 00 00 01 00 02 04 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 21 0D 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 00 01 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 08 00 +T 07 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 08 00 +T 10 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 16 01 00 00 CD 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 05 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 21 0F 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 28 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0C 00 +T 2D 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 34 01 00 00 FE DD 74 FF E5 1E 00 00 00 00 D5 +R 00 00 01 00 2B 0A 04 00 +T 3C 01 00 00 21 00 00 00 00 E5 DD 6E 02 DD 66 +R 00 00 01 00 02 05 04 00 +T 45 01 00 00 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T 4A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 51 01 00 00 F1 F1 21 11 00 09 7E 23 B6 20 1C +R 00 00 01 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 62 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 6B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 70 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T 76 01 00 00 27 03 00 00 +R 00 00 01 00 00 04 01 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 21 0F 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 83 01 00 00 23 56 CD 00 00 00 00 01 00 10 00 +R 00 00 01 00 02 07 02 00 +T 8C 01 00 00 0C 03 00 00 AE 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 90 01 00 00 E5 01 00 00 0C 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 94 01 00 00 0C 03 00 00 E5 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 98 01 00 00 78 02 00 00 E5 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 9C 01 00 00 E5 01 00 00 E5 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A0 01 00 00 0C 03 00 00 0C 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A4 01 00 00 E5 01 00 00 10 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A8 01 00 00 0C 03 00 00 44 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T AC 01 00 00 E5 01 00 00 +R 00 00 01 00 00 04 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 21 13 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T B9 01 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T C1 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T C8 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 09 00 02 0B 09 00 +T CE 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T D7 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T DC 01 00 00 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T E3 01 00 00 27 03 00 00 +R 00 00 01 00 00 04 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 21 13 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T F0 01 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 09 00 +T F7 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 09 00 +T 00 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 06 02 00 00 CD 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 05 01 00 +T 0E 02 00 00 27 03 00 00 +R 00 00 01 00 00 04 01 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 21 15 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 1B 02 00 00 23 56 D5 21 13 00 09 4E 23 46 C5 +R 00 00 01 00 +T 26 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T 2C 02 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 35 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 3A 02 00 00 00 00 00 00 F1 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T 42 02 00 00 27 03 00 00 +R 00 00 01 00 00 04 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 21 15 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 4F 02 00 00 23 56 D5 21 13 00 09 4E 23 46 C5 +R 00 00 01 00 +T 5A 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0E 00 02 0B 0E 00 +T 60 02 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 69 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 6E 02 00 00 00 00 00 00 F1 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T 76 02 00 00 27 03 00 00 +R 00 00 01 00 00 04 01 00 +T 78 02 00 00 +R 00 00 01 00 +T 78 02 00 00 21 27 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 83 02 00 00 23 56 23 4E 23 46 C5 D5 21 23 00 +R 00 00 01 00 +T 8E 02 00 00 DD 4E 04 DD 46 05 09 5E 23 56 23 +R 00 00 01 00 +T 99 02 00 00 4E 23 46 C5 D5 21 1F 00 DD 4E 04 +R 00 00 01 00 +T A4 02 00 00 DD 46 05 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T AF 02 00 00 C5 D5 21 1B 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T BA 02 00 00 09 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T C5 02 00 00 17 00 DD 4E 04 DD 46 05 09 5E 23 +R 00 00 01 00 +T D0 02 00 00 56 23 4E 23 46 C5 D5 21 15 00 DD +R 00 00 01 00 +T DB 02 00 00 4E 04 DD 46 05 09 5E 23 56 D5 21 +R 00 00 01 00 +T E6 02 00 00 13 00 09 4E 23 46 C5 0E +R 00 00 01 00 +T EE 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 12 00 02 0A 12 00 +T F4 02 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T FC 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 01 03 00 00 00 00 00 00 EB 21 1E 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T 0A 03 00 00 18 1B +R 00 00 01 00 +T 0C 03 00 00 +R 00 00 01 00 +T 0C 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 12 03 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 1B 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 20 03 00 00 00 00 00 00 F1 F1 F1 18 00 +R 00 00 01 00 02 04 01 00 +T 27 03 00 00 +R 00 00 01 00 +T 27 03 00 00 +R 00 00 01 00 +T 27 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/internet_lib/q_pkt.rel b/src/nos/lib/internet_lib/q_pkt.rel new file mode 100644 index 00000000..20fe839e --- /dev/null +++ b/src/nos/lib/internet_lib/q_pkt.rel @@ -0,0 +1,247 @@ +XL4 +H 2 areas 11 global symbols +S _ntohtcp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S _len_q Ref00000000 +S _htonip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _dup_p Ref00000000 +S .__.ABS. Def00000000 +S _Tcp_interact Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _rquench Ref00000000 +S _pushdown Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2B8 flags 0 +S _q_pkt Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D0 FF 21 51 00 DD +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 4E 02 DD 46 03 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 0B 00 +T 12 00 00 00 DD 6E 12 DD 66 13 E5 DD 4E 10 DD +R 00 00 01 00 +T 1D 00 00 00 46 11 DD 5E 0E DD 56 0F 3E +R 00 00 01 00 +T 26 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 2B 00 00 00 00 00 00 00 E1 21 13 00 DD 4E 0E +R 00 00 01 00 02 04 01 00 +T 34 00 00 00 DD 46 0F 09 7E E6 FC DD 77 F3 DD +R 00 00 01 00 +T 3F 00 00 00 4E 0C DD 46 0D DD 6E 0A DD 66 0B +R 00 00 01 00 +T 4A 00 00 00 DD 75 F4 DD 74 F5 DD 71 F6 DD 70 +R 00 00 01 00 +T 55 00 00 00 F7 21 1E 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 60 00 00 00 7E 23 B6 20 3E +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 05 00 E5 21 25 00 39 4D 44 DD +R 00 00 01 00 +T 70 00 00 00 5E 10 DD 56 11 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 78 00 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T 7F 00 00 00 1E 00 DD 4E 02 DD 46 03 09 E5 DD +R 00 00 01 00 +T 8A 00 00 00 6E 10 DD 66 11 4E 23 46 E1 71 23 +R 00 00 01 00 +T 95 00 00 00 70 DD 6E 10 DD 66 11 AF 77 23 77 +R 00 00 01 00 +T A0 00 00 00 C3 59 02 00 00 +R 00 00 01 00 00 05 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 21 15 00 DD 4E 0E DD 46 0F 09 7E +R 00 00 01 00 +T AE 00 00 00 FE 06 C2 7C 01 00 00 21 0C 00 DD +R 00 00 01 00 00 07 01 00 +T B7 00 00 00 4E 0E DD 46 0F 09 7E 23 B6 C2 +R 00 00 01 00 +T C1 00 00 00 7C 01 00 00 +R 00 00 01 00 00 04 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 21 3C 00 E5 21 16 00 DD 4E 0E DD +R 00 00 01 00 +T CE 00 00 00 46 0F 09 4E 06 00 21 19 00 09 E5 +R 00 00 01 00 +T D9 00 00 00 DD 6E 10 DD 66 11 4E 23 46 21 +R 00 00 01 00 +T E3 00 00 00 06 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T EB 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T F2 00 00 00 01 14 00 A7 ED 42 38 74 +R 00 00 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 21 02 00 39 4D 44 21 04 00 39 5D +R 00 00 01 00 +T 05 01 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 0B 01 00 00 CD 00 00 00 00 AF DD 77 FD DD 77 +R 00 00 01 00 02 05 01 00 +T 14 01 00 00 FE +R 00 00 01 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 DD 6E FD DD 66 FE 29 01 +R 00 00 01 00 +T 1D 01 00 00 00 00 00 00 09 7E 23 A6 3C 28 48 +R 00 00 01 00 02 04 08 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 DD 6E FD DD 66 FE 29 01 +R 00 00 01 00 +T 2E 01 00 00 00 00 00 00 09 46 23 66 68 DD 4E +R 00 00 01 00 02 04 08 00 +T 37 01 00 00 D4 DD 46 D5 A7 ED 42 28 1A DD 6E +R 00 00 01 00 +T 42 01 00 00 FD DD 66 FE 29 01 00 00 00 00 09 +R 00 00 01 00 02 0A 08 00 +T 4B 01 00 00 46 23 66 68 DD 4E D6 DD 46 D7 A7 +R 00 00 01 00 +T 56 01 00 00 ED 42 20 0A +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 DD 7E F3 F6 01 DD 77 F3 18 0A +R 00 00 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 DD 34 FD 20 03 DD 34 FE +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 18 A7 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 21 02 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 76 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0C 00 02 0A 01 00 +T 7C 01 00 00 +R 00 00 01 00 +T 7C 01 00 00 21 05 00 E5 21 25 00 39 4D 44 DD +R 00 00 01 00 +T 87 01 00 00 5E 10 DD 56 11 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 8F 01 00 00 00 00 00 00 CD 00 00 00 00 E1 AF +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T 96 01 00 00 DD 77 D0 DD 77 D1 21 1E 00 DD 4E +R 00 00 01 00 +T A1 01 00 00 02 DD 46 03 09 46 23 66 68 DD 75 +R 00 00 01 00 +T AC 01 00 00 D2 DD 74 D3 +R 00 00 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 DD 7E D2 DD B6 D3 28 4A +R 00 00 01 00 +T B8 01 00 00 +R 00 00 01 00 +T B8 01 00 00 21 05 00 E5 21 0A 00 DD 4E D2 DD +R 00 00 01 00 +T C3 01 00 00 46 D3 09 4E 23 46 21 2A 00 39 5D +R 00 00 01 00 +T CE 01 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T D4 01 00 00 CD 00 00 00 00 F1 DD 7E F8 DD BE +R 00 00 01 00 02 05 01 00 +T DD 01 00 00 F3 30 02 +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 18 20 +R 00 00 01 00 +T E2 01 00 00 +R 00 00 01 00 +T E2 01 00 00 DD 6E D2 DD 66 D3 DD 75 D0 DD 74 +R 00 00 01 00 +T ED 01 00 00 D1 DD 6E D2 DD 66 D3 23 23 46 23 +R 00 00 01 00 +T F8 01 00 00 66 68 DD 75 D2 DD 74 D3 18 AE +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 DD 6E 10 DD 66 11 46 23 66 68 23 +R 00 00 01 00 +T 0D 02 00 00 23 DD 4E D2 DD 46 D3 71 23 70 DD +R 00 00 01 00 +T 18 02 00 00 7E D0 DD B6 D1 20 1A +R 00 00 01 00 +T 1F 02 00 00 +R 00 00 01 00 +T 1F 02 00 00 21 1E 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 2A 02 00 00 DD 6E 10 DD 66 11 4E 23 46 E1 71 +R 00 00 01 00 +T 35 02 00 00 23 70 18 16 +R 00 00 01 00 +T 39 02 00 00 +R 00 00 01 00 +T 39 02 00 00 DD 6E D0 DD 66 D1 23 23 E5 DD 6E +R 00 00 01 00 +T 44 02 00 00 10 DD 66 11 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 4F 02 00 00 +R 00 00 01 00 +T 4F 02 00 00 DD 6E 10 DD 66 11 AF 77 23 77 +R 00 00 01 00 +T 59 02 00 00 +R 00 00 01 00 +T 59 02 00 00 01 01 00 21 1E 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 64 02 00 00 03 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T 6A 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 70 02 00 00 20 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 7B 02 00 00 B6 28 34 21 20 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 86 02 00 00 03 09 5E 23 56 D5 21 1E 00 09 5E +R 00 00 01 00 +T 91 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 96 02 00 00 00 00 00 00 CD 00 00 00 00 D1 A7 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 9D 02 00 00 ED 52 38 11 +R 00 00 01 00 +T A1 02 00 00 +R 00 00 01 00 +T A1 02 00 00 +R 00 00 01 00 +T A1 02 00 00 +R 00 00 01 00 +T A1 02 00 00 01 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T AB 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T B0 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T B2 02 00 00 +R 00 00 01 00 +T B2 02 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 05 00 diff --git a/src/nos/lib/internet_lib/raw_ip.rel b/src/nos/lib/internet_lib/raw_ip.rel new file mode 100644 index 00000000..ee5eeeff --- /dev/null +++ b/src/nos/lib/internet_lib/raw_ip.rel @@ -0,0 +1,34 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Rawip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _callocw Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5A flags 0 +S _raw_ip Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 01 0B 00 11 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 01 07 00 09 DD 4E 02 +R 00 00 01 00 +T 20 00 00 00 DD 46 03 71 23 70 21 04 00 DD 4E +R 00 00 01 00 +T 2B 00 00 00 FE DD 46 FF 09 DD 7E 0C DD 5E 0A +R 00 00 01 00 +T 36 00 00 00 DD 56 0B 73 23 72 23 77 2A +R 00 00 01 00 +T 3F 00 00 00 00 00 00 00 E5 69 60 C1 71 23 70 +R 00 00 01 00 02 04 01 00 +T 48 00 00 00 DD 6E FE DD 66 FF 22 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 51 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/internet_lib/reset.rel b/src/nos/lib/internet_lib/reset.rel new file mode 100644 index 00000000..49ef3740 --- /dev/null +++ b/src/nos/lib/internet_lib/reset.rel @@ -0,0 +1,159 @@ +XL4 +H 2 areas D global symbols +S _htontcp Ref00000000 +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _ip_send Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Tcp_mib Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25D flags 0 +S _reset Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 1D 00 09 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 7E E6 10 47 23 7E E6 00 B0 28 03 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 C3 5A 02 00 00 +R 00 00 01 00 00 05 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 DD +R 00 00 01 00 +T 22 00 00 00 75 FE DD 74 FF DD 4E 04 DD 46 05 +R 00 00 01 00 +T 2D 00 00 00 03 03 69 60 4E 23 46 DD 6E 04 DD +R 00 00 01 00 +T 38 00 00 00 66 05 71 23 70 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 43 00 00 00 23 23 DD 4E FE DD 46 FF 71 23 70 +R 00 00 01 00 +T 4E 00 00 00 21 1D 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 59 00 00 00 E6 04 47 23 7E E6 00 B0 28 4B +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 21 1D 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 6E 00 00 00 E6 FB 77 23 7E E6 FF 77 21 08 00 +R 00 00 01 00 +T 79 00 00 00 09 4E 23 46 23 5E 23 56 69 60 E5 +R 00 00 01 00 +T 84 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 C1 +R 00 00 01 00 +T 8F 00 00 00 D5 59 50 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 9A 00 00 00 21 08 00 DD 4E 04 DD 46 05 09 AF +R 00 00 01 00 +T A5 00 00 00 77 23 77 23 77 23 77 18 65 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 21 1D 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T B9 00 00 00 F6 04 77 23 7E F6 00 77 21 04 00 +R 00 00 01 00 +T C4 00 00 00 09 4E 23 46 23 5E 23 56 69 60 E5 +R 00 00 01 00 +T CF 00 00 00 21 08 00 DD 4E 04 DD 46 05 09 C1 +R 00 00 01 00 +T DA 00 00 00 D5 59 50 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T E5 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 AF +R 00 00 01 00 +T F0 00 00 00 77 23 77 23 77 23 77 21 1D 00 09 +R 00 00 01 00 +T FB 00 00 00 7E E6 20 47 23 7E E6 00 B0 28 0D +R 00 00 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 21 08 00 DD 4E 04 DD 46 05 09 CD +R 00 00 01 00 +T 11 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 09 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 21 1D 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 1E 01 00 00 E6 FD 77 23 7E E6 FF 77 21 1D 00 +R 00 00 01 00 +T 29 01 00 00 09 7E E6 F7 77 23 7E E6 FF 77 21 +R 00 00 01 00 +T 34 01 00 00 1D 00 09 7E F6 10 77 23 7E F6 00 +R 00 00 01 00 +T 3F 01 00 00 77 21 1D 00 09 7E E6 DF 77 23 7E +R 00 00 01 00 +T 4A 01 00 00 E6 FF 77 21 1D 00 09 7E E6 BF 77 +R 00 00 01 00 +T 55 01 00 00 23 7E E6 FF 77 21 1D 00 09 7E E6 +R 00 00 01 00 +T 60 01 00 00 7F 77 23 7E E6 FF 77 21 1D 00 09 +R 00 00 01 00 +T 6B 01 00 00 7E E6 FF 77 23 7E E6 FE 77 21 +R 00 00 01 00 +T 75 01 00 00 1D 00 09 7E E6 FF 77 23 7E E6 FD +R 00 00 01 00 +T 80 01 00 00 77 21 0C 00 09 AF 77 23 77 21 +R 00 00 01 00 +T 8A 01 00 00 10 00 09 AF 77 23 77 21 0E 00 09 +R 00 00 01 00 +T 95 01 00 00 AF 77 23 77 11 46 00 3E +R 00 00 01 00 +T 9D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T A2 01 00 00 00 00 00 00 DD 75 FC DD 74 FD 11 +R 00 00 01 00 02 04 02 00 +T AB 01 00 00 0A 00 19 7E C6 46 77 23 7E CE 00 +R 00 00 01 00 +T B6 01 00 00 77 DD 6E 02 DD 66 03 5E 23 56 23 +R 00 00 01 00 +T C1 01 00 00 4E 23 46 C5 D5 21 04 00 DD 4E 02 +R 00 00 01 00 +T CC 01 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T D7 01 00 00 C5 D5 21 08 00 39 4D 44 DD 5E 04 +R 00 00 01 00 +T E2 01 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T E8 01 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T EF 01 00 00 E1 E1 0E 00 C5 21 00 00 E5 DD 5E +R 00 00 01 00 +T FA 01 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 01 02 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 03 00 02 09 02 00 +T 08 02 00 00 06 00 39 E5 0E 00 C5 21 13 00 DD +R 00 00 01 00 +T 13 02 00 00 4E 02 DD 46 03 09 5E D5 1E 06 D5 +R 00 00 01 00 +T 1E 02 00 00 69 60 4E 23 46 23 5E 23 56 D5 C5 +R 00 00 01 00 +T 29 02 00 00 21 04 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 34 02 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 3C 02 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 07 00 02 0A 02 00 +T 43 02 00 00 21 12 00 39 F9 EB 2A 5C 00 00 00 +R 00 00 01 00 02 0B 0B 00 +T 4C 02 00 00 ED 4B 5E 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 06 0B 00 02 0B 04 00 +T 53 02 00 00 22 5C 00 00 00 ED 43 5E 00 00 00 +R 00 00 01 00 02 05 0B 00 02 0B 0B 00 +T 5A 02 00 00 +R 00 00 01 00 +T 5A 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/internet_lib/resolve.rel b/src/nos/lib/internet_lib/resolve.rel new file mode 100644 index 00000000..585c41a9 --- /dev/null +++ b/src/nos/lib/internet_lib/resolve.rel @@ -0,0 +1,148 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _resolve_rr Ref00000000 +S .__.ABS. Def00000000 +S _rt_lookup Ref00000000 +S _free_rr Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _aton Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _isaddr Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17D flags 0 +S _resolve Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF AF DD 77 F6 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 F7 DD 77 F8 DD 77 F9 DD 7E +R 00 00 01 00 +T 14 00 00 00 02 DD B6 03 20 09 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 01 00 00 21 00 00 C3 7A 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 2B 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 32 00 00 00 B4 28 11 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 3D 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 44 00 00 00 7A 01 00 00 +R 00 00 01 00 00 04 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 01 01 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 50 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 55 00 00 00 00 00 00 00 DD 75 F4 DD 74 F5 7D +R 00 00 01 00 02 04 00 00 +T 5E 00 00 00 B4 28 2D 21 11 00 DD 4E F4 DD 46 +R 00 00 01 00 +T 69 00 00 00 F5 09 7E 23 B6 28 1E +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 21 13 00 DD 4E F4 DD 46 F5 09 5E +R 00 00 01 00 +T 7B 00 00 00 23 56 23 4E 23 46 EB DD 75 F6 DD +R 00 00 01 00 +T 86 00 00 00 74 F7 DD 71 F8 DD 70 F9 +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 DD 7E F4 DD B6 F5 CA 60 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 97 00 00 00 DD 6E F4 DD 66 F5 23 23 7E 23 B6 +R 00 00 01 00 +T A2 00 00 00 CA 60 01 00 00 +R 00 00 01 00 00 05 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 DD 36 FE FF DD 36 FF FF DD 6E F4 +R 00 00 01 00 +T B0 00 00 00 DD 66 F5 DD 75 FA DD 74 FB +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 DD 7E FA DD B6 FB CA 60 01 00 00 +R 00 00 01 00 00 0B 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 21 11 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T CD 00 00 00 23 B6 28 7A 21 13 00 DD 4E FA DD +R 00 00 01 00 +T D8 00 00 00 46 FB 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T E3 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T E8 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 00 00 +T F1 00 00 00 B4 28 57 21 0E 00 DD 4E FC DD 46 +R 00 00 01 00 +T FC 00 00 00 FD 09 4E 23 46 23 5E 23 56 D5 C5 +R 00 00 01 00 +T 07 01 00 00 DD 6E FE DD 66 FF 01 00 00 CD +R 00 00 01 00 +T 11 01 00 00 00 00 00 00 38 36 +R 00 00 01 00 02 04 05 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 21 13 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T 20 01 00 00 23 56 23 4E 23 46 EB DD 75 F6 DD +R 00 00 01 00 +T 2B 01 00 00 74 F7 DD 71 F8 DD 70 F9 21 0E 00 +R 00 00 01 00 +T 36 01 00 00 DD 4E FC DD 46 FD 09 5E 23 56 23 +R 00 00 01 00 +T 41 01 00 00 4E 23 46 EB DD 75 FE DD 74 FF +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T 56 01 00 00 68 DD 75 FA DD 74 FB C3 +R 00 00 01 00 +T 5E 01 00 00 B9 00 00 00 +R 00 00 01 00 00 04 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 DD 5E F4 DD 56 F5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 68 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 6F 01 00 00 4E F8 DD 46 F9 DD 6E F6 DD 66 F7 +R 00 00 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 diff --git a/src/nos/lib/internet_lib/resolve_a.rel b/src/nos/lib/internet_lib/resolve_a.rel new file mode 100644 index 00000000..05884459 --- /dev/null +++ b/src/nos/lib/internet_lib/resolve_a.rel @@ -0,0 +1,140 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strcspn Ref00000000 +S _strncpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strdupw Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _free_rr Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inverse_a Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 144 flags 0 +S _resolve_a Def00000000 +A CSTR size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF AF DD 77 FA +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 77 FB DD 4E 04 DD 46 05 DD 5E +R 00 00 01 00 +T 14 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 1B 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 22 00 00 00 F6 DD 74 F7 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 7E F8 DD B6 F9 28 7F DD 7E FA +R 00 00 01 00 +T 37 00 00 00 DD B6 FB 20 77 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 21 11 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 47 00 00 00 23 B6 28 53 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 21 0F 00 DD 4E F8 DD 46 F9 09 4E +R 00 00 01 00 +T 56 00 00 00 23 46 3E 0C A9 B0 20 1D +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 13 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T 69 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 6E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 75 00 00 00 FA DD 74 FB 18 23 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 3E 01 A9 B0 20 1D 21 07 00 DD 4E +R 00 00 01 00 +T 86 00 00 00 F8 DD 46 F9 09 5E 23 56 3E +R 00 00 01 00 +T 8F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 94 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 18 +R 00 00 01 00 02 04 00 00 +T 9D 00 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 DD 6E F8 DD 66 F9 23 23 46 23 66 +R 00 00 01 00 +T A9 00 00 00 68 DD 75 F8 DD 74 F9 C3 +R 00 00 01 00 +T B1 00 00 00 2C 00 00 00 +R 00 00 01 00 00 04 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T BB 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T C2 00 00 00 7E FA DD B6 FB 28 72 DD 7E 0A DD +R 00 00 01 00 +T CD 00 00 00 B6 0B 28 6A +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 01 00 00 00 00 DD 5E FA DD 56 FB +R 00 00 01 00 00 05 02 00 +T DA 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T E0 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 00 00 +T E9 00 00 00 B4 20 4F +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 DD 5E FC DD 56 FD 13 3E +R 00 00 01 00 +T F4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T F9 00 00 00 00 00 00 00 DD 75 FE DD 74 FF DD +R 00 00 01 00 02 04 00 00 +T 02 01 00 00 4E FC DD 46 FD C5 DD 4E FA DD 46 +R 00 00 01 00 +T 0D 01 00 00 FB EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 12 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 19 01 00 00 6E FC DD 66 FD DD 4E FE DD 46 FF +R 00 00 01 00 +T 24 01 00 00 09 36 00 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 2E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 33 01 00 00 00 00 00 00 DD 71 FA DD 70 FB +R 00 00 01 00 02 04 00 00 +T 3B 01 00 00 +R 00 00 01 00 +T 3B 01 00 00 +R 00 00 01 00 +T 3B 01 00 00 DD 6E FA DD 66 FB C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2E 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/resolve_mailb.rel b/src/nos/lib/internet_lib/resolve_mailb.rel new file mode 100644 index 00000000..348ea4b3 --- /dev/null +++ b/src/nos/lib/internet_lib/resolve_mailb.rel @@ -0,0 +1,198 @@ +XL4 +H 3 areas 11 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sprintf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _dfile_search Ref00000000 +S _copy_rr_list Ref00000000 +S _Dsuffix Ref00000000 +S .__.ABS. Def00000000 +S _dcache_add Ref00000000 +S _make_rr Ref00000000 +S _free Ref00000000 +S _free_rr Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _dcache_search Ref00000000 +S _mallocw Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 245 flags 0 +S _resolve_mailb Def00000000 +A CSTR size A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 5E 02 DD +R 00 00 01 00 02 05 0C 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 EB 13 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 15 00 00 00 13 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 1B 00 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 00 00 +T 24 00 00 00 DD 4E 02 DD 46 03 C5 01 +R 00 00 01 00 +T 2C 00 00 00 00 00 00 00 C5 E5 3E 00 00 00 00 +R 00 00 01 00 00 04 02 00 2B 0B 01 00 +T 32 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 39 00 00 00 F1 F1 21 00 00 E5 21 00 00 E5 21 +R 00 00 01 00 +T 44 00 00 00 00 00 E5 21 00 00 E5 21 07 00 E5 +R 00 00 01 00 +T 4F 00 00 00 21 01 00 E5 DD 4E FE DD 46 FF 11 +R 00 00 01 00 +T 5A 00 00 00 08 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 5F 00 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 66 00 00 00 0C 00 39 F9 EB DD 75 FC DD 74 FD +R 00 00 01 00 +T 71 00 00 00 DD 6E FC DD 66 FD 23 23 E5 01 +R 00 00 01 00 +T 7B 00 00 00 00 00 C5 01 00 00 C5 01 00 00 C5 +R 00 00 01 00 +T 86 00 00 00 01 00 00 C5 01 08 00 C5 01 01 00 +R 00 00 01 00 +T 91 00 00 00 C5 DD 4E FE DD 46 FF 11 08 00 3E +R 00 00 01 00 +T 9C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T A1 00 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T AA 00 00 00 4D 44 E1 71 23 70 DD 6E FC DD 66 +R 00 00 01 00 +T B5 00 00 00 FD 23 23 46 23 66 68 23 23 E5 01 +R 00 00 01 00 +T C0 00 00 00 00 00 C5 01 00 00 C5 01 00 00 C5 +R 00 00 01 00 +T CB 00 00 00 01 00 00 C5 01 09 00 C5 01 01 00 +R 00 00 01 00 +T D6 00 00 00 C5 DD 4E FE DD 46 FF 11 08 00 3E +R 00 00 01 00 +T E1 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T E6 00 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T EF 00 00 00 4D 44 E1 71 23 70 DD 5E FE DD 56 +R 00 00 01 00 +T FA 00 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 00 01 00 00 CD 00 00 00 00 AF DD 77 FE DD 77 +R 00 00 01 00 02 05 00 00 +T 09 01 00 00 FF DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 11 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 16 01 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 00 00 +T 1F 01 00 00 B4 20 14 +R 00 00 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 2A 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 31 01 00 00 75 FA DD 74 FB +R 00 00 01 00 +T 36 01 00 00 +R 00 00 01 00 +T 36 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 3E 01 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 45 01 00 00 00 00 00 00 7D B4 CA 25 02 00 00 +R 00 00 01 00 02 04 06 00 00 0B 01 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 DD 6E FA DD 66 FB DD 75 FC DD 74 +R 00 00 01 00 +T 57 01 00 00 FD +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 DD 7E FC DD B6 FD CA 25 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 21 11 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 6C 01 00 00 23 B6 CA 10 02 00 00 21 13 00 DD +R 00 00 01 00 00 07 01 00 +T 75 01 00 00 4E FC DD 46 FD 09 56 23 66 6A E5 +R 00 00 01 00 +T 80 01 00 00 21 11 00 09 4E 23 46 E1 09 2B 7E +R 00 00 01 00 +T 8B 01 00 00 FE 2E CA 10 02 00 00 +R 00 00 01 00 00 07 01 00 +T 90 01 00 00 +R 00 00 01 00 +T 90 01 00 00 +R 00 00 01 00 +T 90 01 00 00 +R 00 00 01 00 +T 90 01 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 06 00 2B 0B 03 00 +T 96 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 9D 01 00 00 21 11 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T A8 01 00 00 23 56 E1 19 EB 13 13 3E +R 00 00 01 00 +T B0 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T B5 01 00 00 00 00 00 00 DD 75 FE DD 74 FF ED +R 00 00 01 00 02 04 00 00 +T BE 01 00 00 5B 00 00 00 00 D5 21 13 00 09 5E +R 00 00 01 00 02 05 06 00 +T C7 01 00 00 23 56 D5 21 04 00 00 00 E5 DD 6E +R 00 00 01 00 00 08 02 00 +T D0 01 00 00 FE DD 66 FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T D8 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T DF 01 00 00 F1 F1 21 13 00 09 5E 23 56 3E +R 00 00 01 00 +T E9 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T EE 01 00 00 00 00 00 00 21 13 00 09 DD 5E FE +R 00 00 01 00 02 04 00 00 +T F7 01 00 00 DD 56 FF 73 23 72 21 11 00 09 E5 +R 00 00 01 00 +T 02 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 08 02 00 00 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 00 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T 1B 02 00 00 68 DD 75 FC DD 74 FD C3 +R 00 00 01 00 +T 23 02 00 00 58 01 00 00 +R 00 00 01 00 00 04 01 00 +T 25 02 00 00 +R 00 00 01 00 +T 25 02 00 00 +R 00 00 01 00 +T 25 02 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 2D 02 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 34 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 3A 02 00 00 00 00 00 00 DD 6E FA DD 66 FB C3 +R 00 00 01 00 02 04 00 00 +T 43 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 73 2E 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 25 73 2E 25 73 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/resolve_mx.rel b/src/nos/lib/internet_lib/resolve_mx.rel new file mode 100644 index 00000000..7ac78dd2 --- /dev/null +++ b/src/nos/lib/internet_lib/resolve_mx.rel @@ -0,0 +1,209 @@ +XL4 +H 3 areas 12 global symbols +S _resolve_a Ref00000000 +S _resolve Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _resolve_rr Ref00000000 +S _sprintf Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S _strdupw Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _free_rr Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S _aton Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _isaddr Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1FB flags 0 +S _resolve_mx Def00000000 +A CSTR size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EC FF AF DD 77 FA +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 DD 77 FB DD 77 FC DD 77 FD DD 36 +R 00 00 01 00 +T 14 00 00 00 FE FF DD 36 FF FF DD 7E 02 DD B6 +R 00 00 01 00 +T 1F 00 00 00 03 20 09 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 01 00 00 21 00 00 C3 F8 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 33 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0F 00 02 0A 02 00 +T 3A 00 00 00 B4 28 31 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 00 00 E5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 48 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 4D 00 00 00 00 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 0A 00 00 +T 53 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 5A 00 00 00 75 F0 DD 74 F1 7D B4 20 09 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 01 00 00 21 00 00 C3 F8 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 18 14 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 76 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 07 00 02 0A 02 00 +T 7D 00 00 00 75 F0 DD 74 F1 +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 6E F0 DD 66 F1 DD 75 F4 DD 74 +R 00 00 01 00 +T 8D 00 00 00 F5 +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 AF 3C CA DE 01 00 00 +R 00 00 01 00 00 07 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 01 0F 00 DD 5E F0 DD 56 F1 3E +R 00 00 01 00 +T 9D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T A2 00 00 00 00 00 00 00 DD 75 EE DD 74 EF DD +R 00 00 01 00 02 04 02 00 +T AB 00 00 00 75 EC DD 74 ED +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 DD 7E EC DD B6 ED CA 48 01 00 00 +R 00 00 01 00 00 0B 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 21 11 00 DD 4E EC DD 46 ED 09 7E +R 00 00 01 00 +T C4 00 00 00 23 B6 28 6B 21 13 00 DD 4E EC DD +R 00 00 01 00 +T CF 00 00 00 46 ED 09 4E 23 46 DD 6E FE DD 66 +R 00 00 01 00 +T DA 00 00 00 FF A7 ED 42 38 53 21 15 00 DD 4E +R 00 00 01 00 +T E5 00 00 00 EC DD 46 ED 09 5E 23 56 3E +R 00 00 01 00 +T EE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T F3 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 DD +R 00 00 01 00 02 04 02 00 +T FC 00 00 00 71 F8 DD 70 F9 7D B4 B1 B0 28 2C +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 21 13 00 DD 4E EC DD 46 ED 09 46 +R 00 00 01 00 +T 12 01 00 00 23 66 68 DD 75 FE DD 74 FF DD 4E +R 00 00 01 00 +T 1D 01 00 00 F8 DD 46 F9 DD 6E F6 DD 66 F7 DD +R 00 00 01 00 +T 28 01 00 00 75 FA DD 74 FB DD 71 FC DD 70 FD +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 DD 6E EC DD 66 ED 23 23 46 23 66 +R 00 00 01 00 +T 3E 01 00 00 68 DD 75 EC DD 74 ED C3 +R 00 00 01 00 +T 46 01 00 00 B0 00 00 00 +R 00 00 01 00 00 04 01 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 DD 5E EE DD 56 EF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 50 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0A 00 02 0A 02 00 +T 57 01 00 00 7E FA DD B6 FB DD B6 FC DD B6 FD +R 00 00 01 00 +T 62 01 00 00 28 02 +R 00 00 01 00 +T 64 01 00 00 +R 00 00 01 00 +T 64 01 00 00 18 78 +R 00 00 01 00 +T 66 01 00 00 +R 00 00 01 00 +T 66 01 00 00 01 2E 00 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 70 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 75 01 00 00 00 00 00 00 DD 75 F4 DD 74 F5 7D +R 00 00 01 00 02 04 02 00 +T 7E 01 00 00 B4 20 02 +R 00 00 01 00 +T 81 01 00 00 +R 00 00 01 00 +T 81 01 00 00 18 5B +R 00 00 01 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 DD 5E F4 DD 56 F5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 8B 01 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 06 00 02 0A 02 00 +T 92 01 00 00 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0C 00 +T 97 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0C 00 02 09 02 00 +T 9E 01 00 00 F2 DD 74 F3 DD 4E F4 DD 46 F5 C5 +R 00 00 01 00 +T A9 01 00 00 01 00 00 00 00 C5 E5 3E +R 00 00 01 00 00 05 02 00 +T AF 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T B4 01 00 00 00 00 00 00 F1 F1 F1 DD 5E F0 DD +R 00 00 01 00 02 04 02 00 +T BD 01 00 00 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T C2 01 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 09 00 02 09 02 00 +T C9 01 00 00 F2 DD 66 F3 DD 75 F0 DD 74 F1 23 +R 00 00 01 00 +T D4 01 00 00 23 DD 75 F4 DD 74 F5 C3 +R 00 00 01 00 +T DC 01 00 00 8E 00 00 00 +R 00 00 01 00 00 04 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 DD 5E F0 DD 56 F1 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T E6 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 02 00 +T ED 01 00 00 4E FC DD 46 FD DD 6E FA DD 66 FB +R 00 00 01 00 +T F8 01 00 00 +R 00 00 01 00 +T F8 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2A 25 73 00 +R 00 00 02 00 diff --git a/src/nos/lib/internet_lib/resolve_rr.rel b/src/nos/lib/internet_lib/resolve_rr.rel new file mode 100644 index 00000000..990e6af2 --- /dev/null +++ b/src/nos/lib/internet_lib/resolve_rr.rel @@ -0,0 +1,117 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _checksuffix Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strdupw Ref00000000 +S .__.ABS. Def00000000 +S _make_rr Ref00000000 +S _free Ref00000000 +S _free_rr Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _resolver Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 127 flags 0 +S _resolve_rr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF DD 36 FE 0A +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 36 FF 00 DD 7E 02 DD B6 03 20 +R 00 00 01 00 +T 14 00 00 00 06 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 00 00 C3 24 01 00 00 +R 00 00 01 00 00 08 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 23 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 2A 00 00 00 75 FC DD 74 FD 01 00 00 C5 01 +R 00 00 01 00 +T 34 00 00 00 00 00 C5 01 00 00 C5 01 00 00 C5 +R 00 00 01 00 +T 3F 00 00 00 DD 4E 04 DD 46 05 C5 01 01 00 C5 +R 00 00 01 00 +T 4A 00 00 00 4D 44 11 08 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 52 00 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 59 00 00 00 0C 00 39 F9 EB DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 64 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 6C 00 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 73 00 00 00 DD 77 FC DD 77 FD +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 DD 4E FE DD 46 FF 21 00 00 CD +R 00 00 01 00 +T 83 00 00 00 00 00 00 00 D2 10 01 00 00 +R 00 00 01 00 02 04 09 00 00 09 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 90 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 97 00 00 00 75 FA DD 74 FB 7D B4 28 19 21 +R 00 00 01 00 +T A1 00 00 00 0F 00 DD 4E FA DD 46 FB 09 46 23 +R 00 00 01 00 +T AC 00 00 00 66 68 DD 4E 04 DD 46 05 A7 ED 42 +R 00 00 01 00 +T B7 00 00 00 20 02 +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 18 55 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 21 07 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T C6 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T CB 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T D1 00 00 00 07 00 09 E5 21 13 00 DD 4E FA DD +R 00 00 01 00 +T DC 00 00 00 46 FB 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T E4 00 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T EB 00 00 00 E1 73 23 72 59 50 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T F3 00 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T FA 00 00 00 DD 77 FA DD 77 FB DD 6E FE DD 66 +R 00 00 01 00 +T 05 01 00 00 FF 2B DD 75 FE DD 74 FF C3 +R 00 00 01 00 +T 0E 01 00 00 79 00 00 00 +R 00 00 01 00 00 04 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 18 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 1F 01 00 00 6E FA DD 66 FB +R 00 00 01 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/internet_lib/resolver.rel b/src/nos/lib/internet_lib/resolver.rel new file mode 100644 index 00000000..4ce2a5b9 --- /dev/null +++ b/src/nos/lib/internet_lib/resolver.rel @@ -0,0 +1,86 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _dfile_search Ref00000000 +S _copy_rr_list Ref00000000 +S _dns_query Ref00000000 +S .__.ABS. Def00000000 +S _dcache_add Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _dcache_search Ref00000000 +S _check_ttl Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A5 flags 0 +S _resolver Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 14 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 25 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 2C 00 00 00 75 FE DD 74 FF +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 7E FE DD B6 FF 28 12 DD 5E FE +R 00 00 01 00 +T 3C 00 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T 42 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 49 00 00 00 28 3A +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 53 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 5A 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 62 00 00 00 00 00 00 00 CD 00 00 00 00 7D A4 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 69 00 00 00 3C 20 05 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 21 00 00 18 31 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 79 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T 80 00 00 00 75 FE DD 74 FF +R 00 00 01 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 8D 00 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 94 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 9A 00 00 00 00 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 00 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/internet_lib/route.rel b/src/nos/lib/internet_lib/route.rel new file mode 100644 index 00000000..9dfa4345 --- /dev/null +++ b/src/nos/lib/internet_lib/route.rel @@ -0,0 +1,21 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2A flags 0 +S _R_default Def00000000 +A CDATA0 size 2A flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 0A 00 00 00 00 00 00 00 10 00 00 00 00 00 00 +R 00 00 03 00 +T 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 20 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/rquench.rel b/src/nos/lib/internet_lib/rquench.rel new file mode 100644 index 00000000..fda125ba --- /dev/null +++ b/src/nos/lib/internet_lib/rquench.rel @@ -0,0 +1,151 @@ +XL4 +H 2 areas F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S _len_q Ref00000000 +S _ntohip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _dup_p Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _urandom Ref00000000 +S _icmp_output Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 184 flags 0 +S _rquench Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 B4 FF 21 1E 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 18 00 00 00 00 00 00 00 DD 75 B8 DD 74 B9 7D +R 00 00 01 00 02 04 00 00 +T 21 00 00 00 B4 20 03 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 C3 81 01 00 00 +R 00 00 01 00 00 05 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 DD 5E B8 DD 56 B9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 2F 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T 36 00 00 00 75 B8 DD 74 B9 AF DD 77 B6 DD 77 +R 00 00 01 00 +T 41 00 00 00 B7 21 1E 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 4C 00 00 00 46 23 66 68 DD 75 B4 DD 74 B5 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 DD 7E B4 DD B6 B5 28 3B DD 4E B8 +R 00 00 01 00 +T 61 00 00 00 DD 46 B9 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 6A 00 00 00 30 2D +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 6E B8 DD 66 B9 2B DD 75 B8 DD +R 00 00 01 00 +T 77 00 00 00 74 B9 DD 6E B4 DD 66 B5 DD 75 B6 +R 00 00 01 00 +T 82 00 00 00 DD 74 B7 DD 6E B4 DD 66 B5 23 23 +R 00 00 01 00 +T 8D 00 00 00 46 23 66 68 DD 75 B4 DD 74 B5 18 +R 00 00 01 00 +T 98 00 00 00 BD +R 00 00 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 DD 7E B4 DD B6 B5 20 03 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 C3 81 01 00 00 +R 00 00 01 00 00 05 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 DD 5E B4 DD 56 B5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T AC 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T B3 00 00 00 21 00 00 E5 DD 4E B4 DD 46 B5 21 +R 00 00 01 00 +T BE 00 00 00 4E 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T C6 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T CD 00 00 00 21 05 00 E5 21 08 00 39 4D 44 21 +R 00 00 01 00 +T D8 00 00 00 4C 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T E0 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T E7 00 00 00 4A 00 39 4D 44 21 0B 00 39 5D 54 +R 00 00 01 00 +T F2 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T F8 00 00 00 00 00 00 00 21 00 00 E5 0E 00 C5 +R 00 00 01 00 02 04 00 00 +T 01 01 00 00 0E 04 C5 DD 4E FE DD 46 FF 21 +R 00 00 01 00 +T 0B 01 00 00 11 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T 13 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 1A 01 00 00 F1 21 4A 00 39 5D 54 3E +R 00 00 01 00 +T 22 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 27 01 00 00 00 00 00 00 DD 7E 04 DD B6 05 20 +R 00 00 01 00 02 04 00 00 +T 30 01 00 00 02 +R 00 00 01 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 18 4E +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 DD 7E B6 DD B6 B7 28 1C +R 00 00 01 00 +T 3B 01 00 00 +R 00 00 01 00 +T 3B 01 00 00 DD 6E B6 DD 66 B7 23 23 E5 DD 4E +R 00 00 01 00 +T 46 01 00 00 B4 DD 46 B5 03 03 69 60 4E 23 46 +R 00 00 01 00 +T 51 01 00 00 E1 71 23 70 18 1C +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 21 1E 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 62 01 00 00 DD 4E B4 DD 46 B5 03 03 69 60 4E +R 00 00 01 00 +T 6D 01 00 00 23 46 E1 71 23 70 +R 00 00 01 00 +T 73 01 00 00 +R 00 00 01 00 +T 73 01 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 7B 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 81 01 00 00 +R 00 00 01 00 +T 81 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/internet_lib/rt_add.rel b/src/nos/lib/internet_lib/rt_add.rel new file mode 100644 index 00000000..18049e36 --- /dev/null +++ b/src/nos/lib/internet_lib/rt_add.rel @@ -0,0 +1,246 @@ +XL4 +H 2 areas 16 global symbols +S _rt_blookup Ref00000000 +S _Routes Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _stop_timer Ref00000000 +S _set_timer Ref00000000 +S _rt_timeout Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _R_default Ref00000000 +S _Rt_cache Ref00000000 +S _hash_ip Ref00000000 +S _ismyaddr Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _callocw Ref00000000 +S ?L_ANDASG_L03 Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _Encap Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _start_timer Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2A5 flags 0 +S _rt_add Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 7E 10 DD +R 00 00 01 00 02 05 11 00 +T 09 00 00 00 B6 11 20 06 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 00 00 C3 A2 02 00 00 +R 00 00 01 00 00 08 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 DD 4E 0A DD 46 0B 21 20 00 A7 ED +R 00 00 01 00 +T 1E 00 00 00 42 30 08 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 DD 36 0A 20 DD 36 0B 00 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 3E 20 DD AE 0A DD B6 0B 20 1E DD +R 00 00 01 00 +T 34 00 00 00 4E 04 DD 46 05 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 3F 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T 45 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 02 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 21 00 00 C3 A2 02 00 00 +R 00 00 01 00 00 08 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 21 08 00 39 E5 3E 20 DD 96 0A 01 +R 00 00 01 00 +T 5C 00 00 00 FF FF 21 FF FF CD 00 00 00 00 EB +R 00 00 01 00 02 0A 0C 00 +T 65 00 00 00 E1 CD 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 02 06 0E 00 02 0B 10 00 +T 6C 00 00 00 DD 4E 10 DD 46 11 A7 ED 42 20 2C +R 00 00 01 00 +T 77 00 00 00 DD 7E 0C DD B6 0D DD B6 0E DD B6 +R 00 00 01 00 +T 82 00 00 00 0F 28 18 DD 4E 0E DD 46 0F DD 5E +R 00 00 01 00 +T 8D 00 00 00 0C DD 56 0D 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T 94 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0A 00 02 09 02 00 +T 9B 00 00 00 28 06 +R 00 00 01 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 00 00 C3 A2 02 00 00 +R 00 00 01 00 00 08 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 01 07 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T B5 00 00 00 AC 67 ED 42 30 1E +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 01 06 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T C5 00 00 00 00 00 00 00 21 04 00 00 00 19 AF +R 00 00 01 00 02 04 12 00 02 09 08 00 +T CC 00 00 00 77 23 77 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T D7 00 00 00 +R 00 00 01 00 +T D7 00 00 00 18 D1 +R 00 00 01 00 +T D9 00 00 00 +R 00 00 01 00 +T D9 00 00 00 DD 7E 0A DD B6 0B 20 0A +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 DD 36 FA 00 00 00 00 DD 36 FB +R 00 00 01 00 0B 07 07 00 +T E8 00 00 00 00 00 00 00 18 22 +R 00 00 01 00 8B 04 07 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T F6 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T FF 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 04 01 00 00 00 00 00 00 F1 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 02 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 DD 7E FA DD B6 FB C2 B5 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 16 01 00 00 +R 00 00 01 00 +T 16 01 00 00 01 2A 00 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 1E 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0D 00 02 0A 02 00 +T 25 01 00 00 75 FA DD 74 FB AF 77 23 77 DD 4E +R 00 00 01 00 +T 30 01 00 00 04 DD 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 3B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 40 01 00 00 00 00 00 00 29 01 0E 00 DD 5E 0A +R 00 00 01 00 02 04 02 00 +T 49 01 00 00 DD 56 0B CD 00 00 00 00 19 01 +R 00 00 01 00 02 08 12 00 +T 51 01 00 00 F2 FF FF FF 09 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 01 00 +T 5A 01 00 00 DD 6E FA DD 66 FB 23 23 E5 DD 6E +R 00 00 01 00 +T 65 01 00 00 FC DD 66 FD 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 70 01 00 00 DD 6E FA DD 66 FB 23 23 7E 23 B6 +R 00 00 01 00 +T 7B 01 00 00 28 15 +R 00 00 01 00 +T 7D 01 00 00 +R 00 00 01 00 +T 7D 01 00 00 DD 6E FA DD 66 FB 23 23 7E 23 66 +R 00 00 01 00 +T 88 01 00 00 6F DD 4E FA DD 46 FB 71 23 70 +R 00 00 01 00 +T 92 01 00 00 +R 00 00 01 00 +T 92 01 00 00 DD 6E FA DD 66 FB E5 DD 6E FC DD +R 00 00 01 00 +T 9D 01 00 00 66 FD C1 71 23 70 21 26 00 DD 4E +R 00 00 01 00 +T A8 01 00 00 FA DD 46 FB 09 AF 77 23 77 23 77 +R 00 00 01 00 +T B3 01 00 00 23 77 +R 00 00 01 00 +T B5 01 00 00 +R 00 00 01 00 +T B5 01 00 00 21 04 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T C0 01 00 00 4E 04 DD 46 05 DD 5E 02 DD 56 03 +R 00 00 01 00 +T CB 01 00 00 73 23 72 23 71 23 70 21 08 00 DD +R 00 00 01 00 +T D6 01 00 00 4E FA DD 46 FB 09 DD 5E 0A DD 56 +R 00 00 01 00 +T E1 01 00 00 0B 73 23 72 21 0A 00 09 DD 4E 0E +R 00 00 01 00 +T EC 01 00 00 DD 46 0F DD 5E 0C DD 56 0D 73 23 +R 00 00 01 00 +T F7 01 00 00 72 23 71 23 70 21 0E 00 DD 4E FA +R 00 00 01 00 +T 02 02 00 00 DD 46 FB 09 DD 4E 14 DD 46 15 DD +R 00 00 01 00 +T 0D 02 00 00 5E 12 DD 56 13 73 23 72 23 71 23 +R 00 00 01 00 +T 18 02 00 00 70 21 12 00 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T 23 02 00 00 DD 5E 10 DD 56 11 73 23 72 21 +R 00 00 01 00 +T 2D 02 00 00 14 00 09 DD 5E 1A 16 00 CB 43 28 +R 00 00 01 00 +T 38 02 00 00 04 CB C6 18 02 +R 00 00 01 00 +T 3D 02 00 00 +R 00 00 01 00 +T 3D 02 00 00 CB 86 +R 00 00 01 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 21 20 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T 4A 02 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 05 00 8B 0A 05 00 +T 4F 02 00 00 36 00 00 00 00 21 23 00 09 71 23 +R 00 00 01 00 2B 05 05 00 +T 57 02 00 00 70 21 00 00 E5 21 E8 03 E5 DD 4E +R 00 00 01 00 +T 62 02 00 00 18 DD 46 19 DD 6E 16 DD 66 17 CD +R 00 00 01 00 +T 6D 02 00 00 00 00 00 00 C5 E5 21 16 00 DD 4E +R 00 00 01 00 02 04 0F 00 +T 76 02 00 00 FA DD 46 FB 09 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 7E 02 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 04 00 02 0A 02 00 +T 85 02 00 00 E1 21 16 00 09 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 8D 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 02 0A 02 00 +T 94 02 00 00 16 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T 9B 02 00 00 00 00 00 00 CD 00 00 00 00 69 60 +R 00 00 01 00 02 04 13 00 02 09 02 00 +T A2 02 00 00 +R 00 00 01 00 +T A2 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/internet_lib/rt_blookup.rel b/src/nos/lib/internet_lib/rt_blookup.rel new file mode 100644 index 00000000..75085bd7 --- /dev/null +++ b/src/nos/lib/internet_lib/rt_blookup.rel @@ -0,0 +1,82 @@ +XL4 +H 2 areas C global symbols +S _Routes Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _R_default Ref00000000 +S _hash_ip Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?L_ANDASG_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AF flags 0 +S _rt_blookup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 0A DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 B6 0B 20 13 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 2A 12 00 00 00 7D B4 28 06 +R 00 00 01 00 02 05 03 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 21 00 00 00 00 C3 AC 00 00 00 +R 00 00 01 00 02 05 03 00 00 0A 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 00 00 C3 AC 00 00 00 +R 00 00 01 00 00 08 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 04 00 39 E5 3E 20 DD 96 0A 01 +R 00 00 01 00 +T 2B 00 00 00 FF FF 21 FF FF CD 00 00 00 00 EB +R 00 00 01 00 02 0A 06 00 +T 34 00 00 00 E1 CD 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 07 00 2B 0B 04 00 +T 3A 00 00 00 21 00 00 00 00 CD 00 00 00 00 29 +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T 41 00 00 00 01 0E 00 DD 5E 0A DD 56 0B CD +R 00 00 01 00 +T 4B 00 00 00 00 00 00 00 19 01 F2 FF FF FF 09 +R 00 00 01 00 02 04 09 00 02 0A 00 00 +T 52 00 00 00 46 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 7E FE DD B6 FF 28 45 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 6F 00 00 00 23 46 23 5E 23 56 69 60 DD 4E 02 +R 00 00 01 00 +T 7A 00 00 00 DD 46 03 A7 ED 42 20 13 EB DD 4E +R 00 00 01 00 +T 85 00 00 00 04 DD 46 05 ED 42 20 08 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 DD 6E FE DD 66 FF 18 17 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 DD 6E FE DD 66 FF 23 23 46 23 66 +R 00 00 01 00 +T A0 00 00 00 68 DD 75 FE DD 74 FF 18 B3 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 21 00 00 +R 00 00 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/internet_lib/rt_drop.rel b/src/nos/lib/internet_lib/rt_drop.rel new file mode 100644 index 00000000..cbca025a --- /dev/null +++ b/src/nos/lib/internet_lib/rt_drop.rel @@ -0,0 +1,173 @@ +XL4 +H 2 areas F global symbols +S _Routes Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _stop_timer Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _R_default Ref00000000 +S _Rt_cache Ref00000000 +S _hash_ip Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _free Ref00000000 +S ?L_ANDASG_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1AE flags 0 +S _rt_drop Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 DD 77 FF +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 01 07 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 17 00 00 00 AC 67 ED 42 30 1E +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 01 06 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 27 00 00 00 00 00 00 00 21 04 00 00 00 19 AF +R 00 00 01 00 02 04 0C 00 02 09 05 00 +T 2E 00 00 00 77 23 77 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 18 D1 +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 DD 7E 0A DD B6 0B 20 17 +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 11 16 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 2B 0A 02 00 +T 49 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 4F 00 00 00 00 00 22 12 00 00 00 21 00 00 C3 +R 00 00 01 00 02 07 04 00 +T 58 00 00 00 AB 01 00 00 +R 00 00 01 00 00 04 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 DD 4E 0A DD 46 0B 21 20 00 A7 ED +R 00 00 01 00 +T 65 00 00 00 42 30 08 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 DD 36 0A 20 DD 36 0B 00 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 21 06 00 39 E5 3E 20 DD 96 0A 01 +R 00 00 01 00 +T 7B 00 00 00 FF FF 21 FF FF CD 00 00 00 00 EB +R 00 00 01 00 02 0A 08 00 +T 84 00 00 00 E1 CD 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 0A 00 2B 0B 06 00 +T 8A 00 00 00 21 00 00 00 00 CD 00 00 00 00 29 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 91 00 00 00 01 0E 00 DD 5E 0A DD 56 0B CD +R 00 00 01 00 +T 9B 00 00 00 00 00 00 00 19 01 F2 FF FF FF 09 +R 00 00 01 00 02 04 0C 00 02 0A 00 00 +T A2 00 00 00 46 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 DD 7E FC DD B6 FD 28 3F +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 21 04 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T BF 00 00 00 23 46 23 5E 23 56 69 60 DD 4E 02 +R 00 00 01 00 +T CA 00 00 00 DD 46 03 A7 ED 42 20 0D EB DD 4E +R 00 00 01 00 +T D5 00 00 00 04 DD 46 05 ED 42 20 02 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 18 14 +R 00 00 01 00 +T DF 00 00 00 +R 00 00 01 00 +T DF 00 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T EA 00 00 00 68 DD 75 FC DD 74 FD 18 B9 +R 00 00 01 00 +T F3 00 00 00 +R 00 00 01 00 +T F3 00 00 00 DD 7E FC DD B6 FD 20 06 +R 00 00 01 00 +T FB 00 00 00 +R 00 00 01 00 +T FB 00 00 00 21 FF FF C3 AB 01 00 00 +R 00 00 01 00 00 08 01 00 +T 01 01 00 00 +R 00 00 01 00 +T 01 01 00 00 21 16 00 DD 4E FC DD 46 FD 09 EB +R 00 00 01 00 +T 0C 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 12 01 00 00 00 00 00 00 03 03 69 60 7E 23 B6 +R 00 00 01 00 02 04 01 00 +T 1B 01 00 00 28 1A +R 00 00 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 DD 6E FC DD 66 FD 23 23 7E 23 66 +R 00 00 01 00 +T 28 01 00 00 6F E5 DD 6E FC DD 66 FD 4E 23 46 +R 00 00 01 00 +T 33 01 00 00 E1 71 23 70 +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 DD 6E FC DD 66 FD 7E 23 B6 28 20 +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 DD 6E FC DD 66 FD 46 23 66 68 23 +R 00 00 01 00 +T 4D 01 00 00 23 E5 DD 4E FC DD 46 FD 03 03 69 +R 00 00 01 00 +T 58 01 00 00 60 4E 23 46 E1 71 23 70 18 38 +R 00 00 01 00 +T 62 01 00 00 +R 00 00 01 00 +T 62 01 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 6D 01 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 73 01 00 00 CD 00 00 00 00 29 01 0E 00 DD 5E +R 00 00 01 00 02 05 01 00 +T 7C 01 00 00 0A DD 56 0B CD 00 00 00 00 19 01 +R 00 00 01 00 02 09 0C 00 +T 85 01 00 00 F2 FF FF FF 09 E5 DD 4E FC DD 46 +R 00 00 01 00 02 04 00 00 +T 8E 01 00 00 FD 03 03 69 60 4E 23 46 E1 71 23 +R 00 00 01 00 +T 99 01 00 00 70 +R 00 00 01 00 +T 9A 01 00 00 +R 00 00 01 00 +T 9A 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T A2 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T A9 01 00 00 00 00 +R 00 00 01 00 +T AB 01 00 00 +R 00 00 01 00 +T AB 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/internet_lib/rt_lookup.rel b/src/nos/lib/internet_lib/rt_lookup.rel new file mode 100644 index 00000000..cc62a38e --- /dev/null +++ b/src/nos/lib/internet_lib/rt_lookup.rel @@ -0,0 +1,187 @@ +XL4 +H 2 areas 11 global symbols +S _Routes Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?L_INC_L03 Ref00000000 +S _Rtlookups Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _R_default Ref00000000 +S _Rt_cache Ref00000000 +S _hash_ip Ref00000000 +S .__.ABS. Def00000000 +S _Rtchits Ref00000000 +S ?L_ANDASG_L03 Ref00000000 +S _Encap Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?L_LSHASG_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 208 flags 0 +S _rt_lookup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF 2A +R 00 00 01 00 02 05 0C 00 +T 06 00 00 00 00 00 00 00 ED 4B 02 00 00 00 CD +R 00 00 01 00 02 04 03 00 02 0A 03 00 +T 0D 00 00 00 00 00 00 00 22 00 00 00 00 ED 43 +R 00 00 01 00 02 04 02 00 02 09 03 00 +T 14 00 00 00 02 00 00 00 DD 4E 04 DD 46 05 DD +R 00 00 01 00 02 04 03 00 +T 1D 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 25 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 2C 00 00 00 11 06 00 CD 00 00 00 00 21 +R 00 00 01 00 02 08 0D 00 +T 33 00 00 00 00 00 00 00 19 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 06 00 +T 3C 00 00 00 4E 23 46 23 5E 23 56 69 60 DD 4E +R 00 00 01 00 +T 47 00 00 00 02 DD 46 03 A7 ED 42 20 3D EB DD +R 00 00 01 00 +T 52 00 00 00 4E 04 DD 46 05 ED 42 20 32 21 +R 00 00 01 00 +T 5C 00 00 00 04 00 DD 4E FE DD 46 FF 09 46 23 +R 00 00 01 00 +T 67 00 00 00 66 68 DD 75 F2 DD 74 F3 7D B4 28 +R 00 00 01 00 +T 72 00 00 00 1A +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 2A 00 00 00 00 ED 4B 02 00 00 00 +R 00 00 01 00 02 05 09 00 02 0B 09 00 +T 7A 00 00 00 CD 00 00 00 00 22 00 00 00 00 ED +R 00 00 01 00 02 05 02 00 02 0A 09 00 +T 81 00 00 00 43 02 00 00 00 DD 6E F2 DD 66 F3 +R 00 00 01 00 02 05 09 00 +T 8A 00 00 00 C3 05 02 00 00 +R 00 00 01 00 00 05 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 DD 4E 04 DD 46 05 DD 6E 02 DD 66 +R 00 00 01 00 +T 98 00 00 00 03 DD 75 F6 DD 74 F7 DD 71 F8 DD +R 00 00 01 00 +T A3 00 00 00 70 F9 06 FF DD 70 FA DD 70 FB DD +R 00 00 01 00 +T AE 00 00 00 70 FC DD 70 FD DD 36 F4 1F DD 36 +R 00 00 01 00 +T B9 00 00 00 F5 00 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 DD CB F5 7E C2 CC 01 00 00 +R 00 00 01 00 00 09 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 21 10 00 39 DD 4E FC DD 46 FD DD +R 00 00 01 00 +T CD 00 00 00 5E FA DD 56 FB CD 00 00 00 00 3E +R 00 00 01 00 02 0A 0A 00 +T D6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T DB 00 00 00 00 00 00 00 29 01 0E 00 DD 5E F4 +R 00 00 01 00 02 04 01 00 +T E4 00 00 00 DD 56 F5 CD 00 00 00 00 19 01 +R 00 00 01 00 02 08 0D 00 +T EC 00 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 02 04 00 00 +T F5 00 00 00 F2 DD 74 F3 +R 00 00 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 DD 7E F2 DD B6 F3 CA B3 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 21 04 00 DD 4E F2 DD 46 F3 09 4E +R 00 00 01 00 +T 0D 01 00 00 23 46 23 5E 23 56 69 60 DD 4E 02 +R 00 00 01 00 +T 18 01 00 00 DD 46 03 A7 ED 42 20 4A EB DD 4E +R 00 00 01 00 +T 23 01 00 00 04 DD 46 05 ED 42 20 3F 21 12 00 +R 00 00 01 00 +T 2E 01 00 00 DD 4E F2 DD 46 F3 09 46 23 66 68 +R 00 00 01 00 +T 39 01 00 00 01 00 00 00 00 A7 ED 42 20 2B 21 +R 00 00 01 00 02 05 0B 00 +T 42 01 00 00 0A 00 DD 4E F2 DD 46 F3 09 4E 23 +R 00 00 01 00 +T 4D 01 00 00 46 23 5E 23 56 69 60 DD 4E F6 DD +R 00 00 01 00 +T 58 01 00 00 46 F7 A7 ED 42 20 0D EB DD 4E F8 +R 00 00 01 00 +T 63 01 00 00 DD 46 F9 ED 42 20 02 +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 18 32 +R 00 00 01 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 4E F8 DD 46 F9 DD 6E F6 DD 66 +R 00 00 01 00 +T 77 01 00 00 F7 E5 DD 6E FE DD 66 FF D1 73 23 +R 00 00 01 00 +T 82 01 00 00 72 23 71 23 70 21 04 00 DD 4E FE +R 00 00 01 00 +T 8D 01 00 00 DD 46 FF 09 DD 4E F2 DD 46 F3 71 +R 00 00 01 00 +T 98 01 00 00 23 70 69 60 18 67 +R 00 00 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 DD 6E F2 DD 66 F3 23 23 46 23 66 +R 00 00 01 00 +T A9 01 00 00 68 DD 75 F2 DD 74 F3 C3 +R 00 00 01 00 +T B1 01 00 00 F9 00 00 00 +R 00 00 01 00 00 04 01 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 21 08 00 39 3E 01 CD 00 00 00 00 +R 00 00 01 00 02 0B 0F 00 +T BC 01 00 00 DD 6E F4 DD 66 F5 2B DD 75 F4 DD +R 00 00 01 00 +T C7 01 00 00 74 F5 C3 BB 00 00 00 +R 00 00 01 00 00 07 01 00 +T CC 01 00 00 +R 00 00 01 00 +T CC 01 00 00 2A 12 00 00 00 7D B4 28 2F +R 00 00 01 00 02 05 05 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 DD 4E F8 DD 46 F9 DD 6E F6 DD 66 +R 00 00 01 00 +T DE 01 00 00 F7 E5 DD 6E FE DD 66 FF D1 73 23 +R 00 00 01 00 +T E9 01 00 00 72 23 71 23 70 21 04 00 DD 4E FE +R 00 00 01 00 +T F4 01 00 00 DD 46 FF 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 09 05 00 +T FC 01 00 00 00 00 00 00 21 00 00 00 00 18 03 +R 00 00 01 00 8B 04 05 00 02 09 05 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 21 00 00 +R 00 00 01 00 +T 05 02 00 00 +R 00 00 01 00 +T 05 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/internet_lib/rt_merge.rel b/src/nos/lib/internet_lib/rt_merge.rel new file mode 100644 index 00000000..a0a6bc62 --- /dev/null +++ b/src/nos/lib/internet_lib/rt_merge.rel @@ -0,0 +1,164 @@ +XL4 +H 2 areas E global symbols +S _rt_blookup Ref00000000 +S _inet_ntoa Ref00000000 +S _Routes Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___04d7_649e_merge_20_25s_20_25d Ref00000000 +S _rt_drop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1AB flags 0 +S _rt_merge Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF DD 36 F4 20 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 36 F5 00 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 DD 4E F4 DD 46 F5 21 00 00 CD +R 00 00 01 00 +T 17 00 00 00 00 00 00 00 D2 A8 01 00 00 +R 00 00 01 00 02 04 08 00 00 09 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 AF DD 77 F6 DD 77 F7 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 01 07 80 DD 6E F6 DD 66 F7 3E 80 +R 00 00 01 00 +T 2E 00 00 00 AC 67 ED 42 D2 98 01 00 00 +R 00 00 01 00 00 09 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 01 0E 00 DD 5E F4 DD 56 F5 CD +R 00 00 01 00 +T 3F 00 00 00 00 00 00 00 DD 6E F6 DD 66 F7 29 +R 00 00 01 00 02 04 07 00 +T 48 00 00 00 19 01 F2 FF FF FF 09 46 23 66 68 +R 00 00 01 00 02 06 02 00 +T 51 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 7E FA DD B6 FB CA 8D 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T 6B 00 00 00 68 DD 75 FC DD 74 FD DD 6E F4 DD +R 00 00 01 00 +T 76 00 00 00 66 F5 2B DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 DD CB F9 7E C2 7E 01 00 00 +R 00 00 01 00 00 09 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 DD 6E F8 DD 66 F9 E5 21 04 00 DD +R 00 00 01 00 +T 91 00 00 00 4E FA DD 46 FB 09 5E 23 56 23 4E +R 00 00 01 00 +T 9C 00 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T A1 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 00 00 02 09 03 00 +T A8 00 00 00 75 FE DD 74 FF 7D B4 CA +R 00 00 01 00 +T B0 00 00 00 6E 01 00 00 21 12 00 DD 4E FE DD +R 00 00 01 00 00 04 01 00 +T B9 00 00 00 46 FF 09 46 23 66 68 E5 21 12 00 +R 00 00 01 00 +T C4 00 00 00 DD 4E FA DD 46 FB 09 4E 23 46 E1 +R 00 00 01 00 +T CF 00 00 00 A7 ED 42 C2 6E 01 00 00 21 0A 00 +R 00 00 01 00 00 08 01 00 +T D8 00 00 00 DD 4E FA DD 46 FB 09 4E 23 46 23 +R 00 00 01 00 +T E3 00 00 00 5E 23 56 D5 C5 21 0A 00 DD 4E FE +R 00 00 01 00 +T EE 00 00 00 DD 46 FF 09 4E 23 46 23 5E 23 56 +R 00 00 01 00 +T F9 00 00 00 69 60 C1 A7 ED 42 C1 20 6C EB ED +R 00 00 01 00 +T 04 01 00 00 42 20 67 +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 DD 4E 02 DD 46 03 21 01 00 CD +R 00 00 01 00 +T 11 01 00 00 00 00 00 00 30 35 +R 00 00 01 00 02 04 08 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 21 08 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T 20 01 00 00 23 56 D5 21 04 00 09 5E 23 56 23 +R 00 00 01 00 +T 2B 01 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 31 01 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 01 00 02 09 03 00 +T 38 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0B 00 02 0A 0B 00 +T 3E 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 44 01 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 03 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 21 08 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T 55 01 00 00 23 56 D5 21 04 00 09 5E 23 56 23 +R 00 00 01 00 +T 60 01 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T 66 01 00 00 00 00 00 00 CD 00 00 00 00 F1 18 +R 00 00 01 00 02 04 0C 00 02 09 03 00 +T 6D 01 00 00 10 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 DD 6E F8 DD 66 F9 2B DD 75 F8 DD +R 00 00 01 00 +T 79 01 00 00 74 F9 C3 7F 00 00 00 +R 00 00 01 00 00 07 01 00 +T 7E 01 00 00 +R 00 00 01 00 +T 7E 01 00 00 DD 6E FC DD 66 FD DD 75 FA DD 74 +R 00 00 01 00 +T 89 01 00 00 FB C3 57 00 00 00 +R 00 00 01 00 00 06 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 DD 34 F6 20 03 DD 34 F7 +R 00 00 01 00 +T 95 01 00 00 +R 00 00 01 00 +T 95 01 00 00 C3 23 00 00 00 +R 00 00 01 00 00 05 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 DD 6E F4 DD 66 F5 2B DD 75 F4 DD +R 00 00 01 00 +T A3 01 00 00 74 F5 C3 0D 00 00 00 +R 00 00 01 00 00 07 01 00 +T A8 01 00 00 +R 00 00 01 00 +T A8 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/internet_lib/rt_timeout.rel b/src/nos/lib/internet_lib/rt_timeout.rel new file mode 100644 index 00000000..22842246 --- /dev/null +++ b/src/nos/lib/internet_lib/rt_timeout.rel @@ -0,0 +1,101 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _stop_timer Ref00000000 +S _set_timer Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _start_timer Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _rt_drop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 125 flags 0 +S _rt_timeout Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF 01 16 00 +R 00 00 01 00 +T 14 00 00 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 19 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 1F 00 00 00 00 00 E5 21 10 00 E5 21 0E 00 DD +R 00 00 01 00 +T 2A 00 00 00 4E FE DD 46 FF 09 5E 23 56 23 4E +R 00 00 01 00 +T 35 00 00 00 23 46 EB CD 00 00 00 00 D2 +R 00 00 01 00 02 08 06 00 +T 3C 00 00 00 00 01 00 00 +R 00 00 01 00 00 04 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 21 0E 00 DD 4E FE DD 46 FF 09 AF +R 00 00 01 00 +T 49 00 00 00 36 10 23 77 23 77 23 77 21 16 00 +R 00 00 01 00 +T 54 00 00 00 09 23 23 4E 23 46 23 5E 23 56 D5 +R 00 00 01 00 +T 5F 00 00 00 C5 01 00 00 21 37 00 CD +R 00 00 01 00 +T 67 00 00 00 00 00 00 00 7D B4 B1 B0 20 1D +R 00 00 01 00 02 04 05 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 21 03 00 E5 21 80 A9 E5 21 16 00 +R 00 00 01 00 +T 7A 00 00 00 DD 4E FE DD 46 FF 09 EB 3E +R 00 00 01 00 +T 83 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 88 00 00 00 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 00 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 00 00 E5 21 03 00 E5 21 16 00 +R 00 00 01 00 +T 97 00 00 00 DD 4E FE DD 46 FF 09 23 23 5E 23 +R 00 00 01 00 +T A2 00 00 00 56 23 4E 23 46 C5 D5 01 00 00 21 +R 00 00 01 00 +T AD 00 00 00 37 00 CD 00 00 00 00 29 CB 11 CB +R 00 00 01 00 02 07 05 00 +T B6 00 00 00 10 CD 00 00 00 00 C5 E5 21 16 00 +R 00 00 01 00 02 06 08 00 +T BF 00 00 00 DD 4E FE DD 46 FF 09 EB 3E +R 00 00 01 00 +T C8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T CD 00 00 00 00 00 00 00 E1 E1 21 20 00 09 36 +R 00 00 01 00 02 04 00 00 +T D6 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T DB 00 00 00 36 00 00 00 00 21 23 00 09 71 23 +R 00 00 01 00 29 05 01 00 +T E3 00 00 00 70 21 16 00 09 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T EB 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T F2 00 00 00 14 00 09 7E F6 02 77 23 7E F6 00 +R 00 00 01 00 +T FD 00 00 00 77 18 22 +R 00 00 01 00 +T 00 01 00 00 +R 00 00 01 00 +T 00 01 00 00 21 08 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 0B 01 00 00 23 56 D5 21 04 00 09 5E 23 56 23 +R 00 00 01 00 +T 16 01 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0B 00 +T 1C 01 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/internet_lib/send_syn.rel b/src/nos/lib/internet_lib/send_syn.rel new file mode 100644 index 00000000..13d131f4 --- /dev/null +++ b/src/nos/lib/internet_lib/send_syn.rel @@ -0,0 +1,57 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _msclock Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size CE flags 0 +S _send_syn Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 2D 00 19 E5 3E +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 0E 00 00 00 00 00 00 00 3E 0C CD 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0B 03 00 +T 15 00 00 00 EB E1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T 1F 00 00 00 2D 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 2A 00 00 00 46 23 5E 23 56 69 60 E5 21 12 00 +R 00 00 01 00 +T 35 00 00 00 DD 4E 02 DD 46 03 09 C1 D5 59 50 +R 00 00 01 00 +T 40 00 00 00 C1 73 23 72 23 71 23 70 C5 21 +R 00 00 01 00 +T 4A 00 00 00 22 00 DD 4E 02 DD 46 03 09 C1 73 +R 00 00 01 00 +T 55 00 00 00 23 72 23 71 23 70 C5 21 96 00 DD +R 00 00 01 00 +T 60 00 00 00 4E 02 DD 46 03 09 C1 73 23 72 23 +R 00 00 01 00 +T 6B 00 00 00 71 23 70 21 96 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 76 00 00 00 03 09 4E 23 46 23 5E 23 56 69 60 +R 00 00 01 00 +T 81 00 00 00 E5 21 16 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 8C 00 00 00 C1 D5 59 50 C1 73 23 72 23 71 23 +R 00 00 01 00 +T 97 00 00 00 70 C5 21 1A 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T A2 00 00 00 09 C1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T AC 00 00 00 7C 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T B6 00 00 00 00 00 00 00 21 6F 00 DD 4E 02 DD +R 00 00 01 00 02 04 06 00 +T BF 00 00 00 46 03 09 7E F6 01 77 23 7E F6 00 +R 00 00 01 00 +T CA 00 00 00 77 C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/internet_lib/sim.rel b/src/nos/lib/internet_lib/sim.rel new file mode 100644 index 00000000..206d7c5d --- /dev/null +++ b/src/nos/lib/internet_lib/sim.rel @@ -0,0 +1,222 @@ +XL4 +H 4 areas 1A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _stop_timer Ref00000000 +S _set_timer Ref00000000 +S ___051a_a8e1_packet_20lost_0a Ref00000000 +S _len_p Ref00000000 +S ___0518_76ec_packet_20delayed_20 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _net_route Ref00000000 +S ___0519_8504_packet_20duped_0a Ref00000000 +S _dup_p Ref00000000 +S __fprintf Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _Loopback Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _start_timer Ref00000000 +S _mallocw Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _urandom Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 217 flags 0 +S _dosim Def00000000 +S _net_sim Def00000009 +A IDATA0 size 10 flags 0 +S _Simctl Def00000000 +A CDATA0 size 10 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 0D 00 +T 07 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 CD 00 00 00 00 F8 FF ED 4B +R 00 00 01 00 02 05 10 00 +T 10 00 00 00 0E 00 00 00 11 E8 03 3E +R 00 00 01 00 00 04 02 00 +T 16 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T 1B 00 00 00 00 00 00 00 CD 00 00 00 00 30 31 +R 00 00 01 00 02 04 00 00 02 09 13 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 2A 14 00 00 00 7D B4 28 19 +R 00 00 01 00 02 05 0F 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 2F 00 00 00 E5 21 14 00 00 00 4E 23 46 C5 3E +R 00 00 01 00 02 06 0F 00 +T 38 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 3D 00 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 21 0A 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 14 00 +T 4A 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 14 00 02 0A 00 00 +T 51 00 00 00 C5 01 00 00 +R 00 00 01 00 00 04 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 ED 4B 0C 00 00 00 11 E8 03 3E +R 00 00 01 00 00 06 02 00 +T 5B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T 60 00 00 00 00 00 00 00 CD 00 00 00 00 30 57 +R 00 00 01 00 02 04 00 00 02 09 13 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 2A 14 00 00 00 7D B4 28 19 +R 00 00 01 00 02 05 0F 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 08 00 02 0B 08 00 +T 74 00 00 00 E5 21 14 00 00 00 4E 23 46 C5 3E +R 00 00 01 00 02 06 0F 00 +T 7D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 82 00 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 8F 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 96 00 00 00 21 00 00 E5 DD 4E 02 DD 46 03 21 +R 00 00 01 00 +T A1 00 00 00 0A 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T A9 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T B0 00 00 00 DD 5E FE DD 56 FF 3E 09 00 00 00 +R 00 00 01 00 29 0B 01 00 +T B8 00 00 00 21 09 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 02 0A 00 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T C6 00 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T CD 00 00 00 00 00 C5 E5 21 04 00 00 00 5E 23 +R 00 00 01 00 00 09 02 00 +T D6 00 00 00 56 23 4E 23 46 EB CD 00 00 00 00 +R 00 00 01 00 02 0B 0E 00 +T DF 00 00 00 C5 E5 ED 5B 08 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T E6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T EB 00 00 00 00 00 00 00 7C 07 9F 5F 53 C1 09 +R 00 00 01 00 02 04 00 00 +T F4 00 00 00 EB C1 ED 4A E5 D5 2A 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T FD 00 00 00 C1 09 EB 2A 02 00 00 00 C1 ED 4A +R 00 00 01 00 00 08 02 00 +T 06 01 00 00 4D 44 EB DD 75 FA DD 74 FB DD 71 +R 00 00 01 00 +T 11 01 00 00 FC DD 70 FD 2A 14 00 00 00 7D B4 +R 00 00 01 00 02 09 0F 00 +T 1A 01 00 00 28 29 +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 DD 6E FC DD 66 FD E5 DD 6E FA DD +R 00 00 01 00 +T 27 01 00 00 66 FB E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 05 00 +T 2E 01 00 00 00 00 00 00 E5 21 14 00 00 00 4E +R 00 00 01 00 02 04 05 00 02 0A 0F 00 +T 35 01 00 00 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0A 00 +T 3B 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 42 01 00 00 F1 F1 F1 +R 00 00 01 00 +T 45 01 00 00 +R 00 00 01 00 +T 45 01 00 00 DD 7E FA DD B6 FB DD B6 FC DD B6 +R 00 00 01 00 +T 50 01 00 00 FD 20 13 +R 00 00 01 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 21 0A 00 39 4D 44 11 00 00 00 00 +R 00 00 01 00 02 0B 0F 00 +T 5C 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 62 01 00 00 00 00 00 00 18 5F +R 00 00 01 00 02 04 00 00 +T 66 01 00 00 +R 00 00 01 00 +T 66 01 00 00 11 12 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 12 00 +T 6C 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 73 01 00 00 F8 DD 74 F9 01 10 00 09 DD 4E 02 +R 00 00 01 00 +T 7E 01 00 00 DD 46 03 71 23 70 DD 6E FC DD 66 +R 00 00 01 00 +T 89 01 00 00 FD E5 DD 6E FA DD 66 FB E5 DD 5E +R 00 00 01 00 +T 94 01 00 00 F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 9B 01 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T A2 01 00 00 21 0A 00 DD 4E F8 DD 46 F9 09 36 +R 00 00 01 00 +T AD 01 00 00 C8 01 00 00 23 36 C8 01 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T B2 01 00 00 36 C8 01 00 00 21 0D 00 09 71 23 +R 00 00 01 00 29 05 01 00 +T BA 01 00 00 70 59 50 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 11 00 +T C0 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T C5 01 00 00 +R 00 00 01 00 +T C5 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T C8 01 00 00 +R 00 00 01 00 +T C8 01 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 10 00 +T D1 01 00 00 66 03 DD 75 FC DD 74 FD 01 10 00 +R 00 00 01 00 +T DC 01 00 00 09 46 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T E7 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T EF 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T F6 01 00 00 02 00 39 4D 44 11 00 00 00 00 3E +R 00 00 01 00 02 0A 0F 00 +T FF 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 04 02 00 00 00 00 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 02 04 00 00 +T 0D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 12 02 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 08 00 00 00 E8 03 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/tcp_icmp.rel b/src/nos/lib/internet_lib/tcp_icmp.rel new file mode 100644 index 00000000..9ae3d164 --- /dev/null +++ b/src/nos/lib/internet_lib/tcp_icmp.rel @@ -0,0 +1,136 @@ +XL4 +H 2 areas C global symbols +S _ntohtcp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _lookup_tcb Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _seq_within Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1BF flags 0 +S _tcp_icmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D2 FF DD 4E 16 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 46 17 21 00 00 39 5D 54 3E +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 17 00 00 00 00 00 00 00 DD 6E D2 DD 66 D3 DD +R 00 00 01 00 02 04 01 00 +T 20 00 00 00 75 F5 DD 74 F6 DD 6E D4 DD 66 D5 +R 00 00 01 00 +T 2B 00 00 00 DD 75 FB DD 74 FC DD 4E 0C DD 46 +R 00 00 01 00 +T 36 00 00 00 0D DD 6E 0A DD 66 0B DD 75 F1 DD +R 00 00 01 00 +T 41 00 00 00 74 F2 DD 71 F3 DD 70 F4 DD 4E 10 +R 00 00 01 00 +T 4C 00 00 00 DD 46 11 DD 6E 0E DD 66 0F DD 75 +R 00 00 01 00 +T 57 00 00 00 F7 DD 74 F8 DD 71 F9 DD 70 FA 21 +R 00 00 01 00 +T 62 00 00 00 1F 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 6A 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 01 00 +T 71 00 00 00 FD DD 74 FE 7D B4 20 03 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 C3 BC 01 00 00 +R 00 00 01 00 00 05 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 21 16 00 DD 4E FD DD 46 FE 09 5E +R 00 00 01 00 +T 87 00 00 00 23 56 23 4E 23 46 C5 D5 21 12 00 +R 00 00 01 00 +T 92 00 00 00 DD 4E FD DD 46 FE 09 4E 23 46 23 +R 00 00 01 00 +T 9D 00 00 00 5E 23 56 D5 C5 21 0C 00 39 5E 23 +R 00 00 01 00 +T A8 00 00 00 56 23 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T B0 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T B7 00 00 00 F1 F1 7D B4 20 03 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 C3 BC 01 00 00 +R 00 00 01 00 00 05 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 DD 7E 12 FE 03 28 04 FE 0B 20 20 +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 21 10 00 DD 4E FD DD 46 FE 09 DD +R 00 00 01 00 +T D6 00 00 00 56 12 72 21 11 00 09 DD 56 14 72 +R 00 00 01 00 +T E1 00 00 00 21 B0 00 09 CD 00 00 00 00 C3 +R 00 00 01 00 02 09 06 00 +T E9 00 00 00 BC 01 00 00 +R 00 00 01 00 00 04 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 FE 04 C2 BC 01 00 00 21 00 00 E5 +R 00 00 01 00 00 07 01 00 +T F4 00 00 00 21 02 00 E5 21 35 00 DD 4E FD DD +R 00 00 01 00 +T FF 00 00 00 46 FE 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 0A 01 00 00 CD 00 00 00 00 E5 21 39 00 DD 5E +R 00 00 01 00 02 05 07 00 +T 13 01 00 00 FD DD 56 FE 19 D1 73 23 72 23 71 +R 00 00 01 00 +T 1E 01 00 00 23 70 21 39 00 DD 4E FD DD 46 FE +R 00 00 01 00 +T 29 01 00 00 09 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 34 01 00 00 5A 00 DD 4E FD DD 46 FE 09 5E 23 +R 00 00 01 00 +T 3F 01 00 00 56 23 4E 23 46 EB CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 48 01 00 00 30 14 21 39 00 DD 4E FD DD 46 FE +R 00 00 01 00 +T 53 01 00 00 09 5E 23 56 23 4E 23 46 EB 18 12 +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 21 5A 00 DD 4E FD DD 46 FE 09 5E +R 00 00 01 00 +T 69 01 00 00 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 E5 21 39 00 DD 5E FD DD 56 FE 19 +R 00 00 01 00 +T 7B 01 00 00 D1 73 23 72 23 71 23 70 21 5A 00 +R 00 00 01 00 +T 86 01 00 00 DD 4E FD DD 46 FE 09 4E 23 46 23 +R 00 00 01 00 +T 91 01 00 00 5E 23 56 69 60 E5 21 35 00 DD 4E +R 00 00 01 00 +T 9C 01 00 00 FD DD 46 FE 09 C1 D5 59 50 C1 73 +R 00 00 01 00 +T A7 01 00 00 23 72 23 71 23 70 21 AC 00 DD 4E +R 00 00 01 00 +T B2 01 00 00 FD DD 46 FE 09 CD 00 00 00 00 18 +R 00 00 01 00 02 0A 06 00 +T BB 01 00 00 00 +R 00 00 01 00 +T BC 01 00 00 +R 00 00 01 00 +T BC 01 00 00 +R 00 00 01 00 +T BC 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/internet_lib/tcp_input.rel b/src/nos/lib/internet_lib/tcp_input.rel new file mode 100644 index 00000000..e5ba5ca2 --- /dev/null +++ b/src/nos/lib/internet_lib/tcp_input.rel @@ -0,0 +1,1217 @@ +XL4 +H 2 areas 25 global symbols +S _ntohtcp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _update Ref00000000 +S _set_timer Ref00000000 +S _Tcbs Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _tcp_output Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _close_self Ref00000000 +S _send_syn Ref00000000 +S _reset Ref00000000 +S _cksum Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _add_reseq Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _msclock Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _proc_syn Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _start_timer Ref00000000 +S _mallocw Ref00000000 +S _free_p Ref00000000 +S _lookup_tcb Ref00000000 +S _settcpstate Ref00000000 +S _seq_ge Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _append Ref00000000 +S _seq_within Ref00000000 +S _trim Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _Tcp_mib Ref00000000 +S _get_reseq Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DCD flags 0 +S _tcp_input Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 BE FF DD 7E 0A DD +R 00 00 01 00 02 05 11 00 +T 09 00 00 00 B6 0B 28 0B DD 6E 0A DD 66 0B 7E +R 00 00 01 00 +T 14 00 00 00 23 B6 20 03 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 C3 CA 0D 00 00 +R 00 00 01 00 00 05 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 2A 3E 00 00 00 ED 4B 40 00 00 00 +R 00 00 01 00 02 05 22 00 02 0B 22 00 +T 22 00 00 00 CD 00 00 00 00 22 3E 00 00 00 ED +R 00 00 01 00 02 05 05 00 02 0A 22 00 +T 29 00 00 00 43 40 00 00 00 DD 7E 0C DD B6 0D +R 00 00 01 00 02 05 22 00 +T 32 00 00 00 28 11 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 3C 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T 43 00 00 00 CA 0D 00 00 +R 00 00 01 00 00 04 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 21 16 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 50 00 00 00 16 00 21 08 00 09 7E 23 66 6F A7 +R 00 00 01 00 +T 5B 00 00 00 ED 52 11 EC FF 19 DD 75 FA DD 74 +R 00 00 01 00 +T 66 00 00 00 FB 69 60 5E 23 56 23 4E 23 46 DD +R 00 00 01 00 +T 71 00 00 00 73 ED DD 72 EE DD 71 EF DD 70 F0 +R 00 00 01 00 +T 7C 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 87 00 00 00 23 46 23 5E 23 56 69 60 DD 75 F1 +R 00 00 01 00 +T 92 00 00 00 DD 74 F2 DD 73 F3 DD 72 F4 21 +R 00 00 01 00 +T 9C 00 00 00 15 00 DD 4E 04 DD 46 05 09 46 DD +R 00 00 01 00 +T A7 00 00 00 70 F5 DD 6E FA DD 66 FB DD 75 F6 +R 00 00 01 00 +T B2 00 00 00 DD 74 F7 DD 6E FA DD 66 FB E5 DD +R 00 00 01 00 +T BD 00 00 00 6E 0A DD 66 0B 4E 23 46 21 31 00 +R 00 00 01 00 +T C8 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0D 00 +T CE 00 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T D5 00 00 00 B4 28 22 +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 2A 56 00 00 00 ED 4B 58 00 00 00 +R 00 00 01 00 02 05 22 00 02 0B 22 00 +T DF 00 00 00 CD 00 00 00 00 22 56 00 00 00 ED +R 00 00 01 00 02 05 05 00 02 0A 22 00 +T E6 00 00 00 43 58 00 00 00 DD 5E 0A DD 56 0B +R 00 00 01 00 02 05 22 00 +T EF 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 18 00 02 0A 18 00 +T F5 00 00 00 00 00 00 00 C3 CA 0D 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 DD 4E 0A DD 46 0B 21 04 00 39 5D +R 00 00 01 00 +T 05 01 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 0B 01 00 00 CD 00 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 05 01 00 +T 14 01 00 00 CB 7C 28 11 +R 00 00 01 00 +T 18 01 00 00 +R 00 00 01 00 +T 18 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 20 01 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T 27 01 00 00 CA 0D 00 00 +R 00 00 01 00 00 04 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 21 3C 00 39 7E DD 96 F8 77 23 7E +R 00 00 01 00 +T 34 01 00 00 DD 9E F9 77 21 04 00 DD 4E 04 DD +R 00 00 01 00 +T 3F 01 00 00 46 05 09 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T 4A 01 00 00 60 DD 75 E1 DD 74 E2 DD 73 E3 DD +R 00 00 01 00 +T 55 01 00 00 72 E4 DD 6E C4 DD 66 C5 DD 75 E5 +R 00 00 01 00 +T 60 01 00 00 DD 74 E6 DD 6E 04 DD 66 05 5E 23 +R 00 00 01 00 +T 6B 01 00 00 56 23 4E 23 46 EB DD 75 E7 DD 74 +R 00 00 01 00 +T 76 01 00 00 E8 DD 71 E9 DD 70 EA DD 6E C2 DD +R 00 00 01 00 +T 81 01 00 00 66 C3 DD 75 EB DD 74 EC 21 23 00 +R 00 00 01 00 +T 8C 01 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 19 00 +T 92 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 19 00 02 09 01 00 +T 99 01 00 00 C0 DD 74 C1 7D B4 C2 09 03 00 00 +R 00 00 01 00 00 0B 01 00 +T A2 01 00 00 +R 00 00 01 00 +T A2 01 00 00 DD 7E DF E6 20 47 DD 7E E0 E6 00 +R 00 00 01 00 +T AD 01 00 00 B0 20 25 +R 00 00 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T B8 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T BF 01 00 00 04 00 39 4D 44 DD 5E 04 DD 56 05 +R 00 00 01 00 +T CA 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T D0 01 00 00 00 00 00 00 C3 CA 0D 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T D5 01 00 00 +R 00 00 01 00 +T D5 01 00 00 AF DD 77 E7 DD 77 E8 DD 77 E9 DD +R 00 00 01 00 +T E0 01 00 00 77 EA AF DD 77 EB DD 77 EC 21 +R 00 00 01 00 +T EA 01 00 00 23 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 19 00 +T F2 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 19 00 02 09 01 00 +T F9 01 00 00 C0 DD 74 C1 7D B4 20 4A +R 00 00 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 AF DD 77 E1 DD 77 E2 DD 77 E3 DD +R 00 00 01 00 +T 0C 02 00 00 77 E4 21 23 00 39 5D 54 3E +R 00 00 01 00 +T 15 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T 1A 02 00 00 00 00 00 00 DD 75 C0 DD 74 C1 7D +R 00 00 01 00 02 04 01 00 +T 23 02 00 00 B4 20 25 +R 00 00 01 00 +T 26 02 00 00 +R 00 00 01 00 +T 26 02 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 2E 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T 35 02 00 00 04 00 39 4D 44 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 40 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T 46 02 00 00 00 00 00 00 C3 CA 0D 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T 4B 02 00 00 +R 00 00 01 00 +T 4B 02 00 00 +R 00 00 01 00 +T 4B 02 00 00 21 6F 00 DD 4E C0 DD 46 C1 09 7E +R 00 00 01 00 +T 56 02 00 00 E6 02 47 23 7E E6 00 B0 28 4E +R 00 00 01 00 +T 60 02 00 00 +R 00 00 01 00 +T 60 02 00 00 11 C8 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 17 00 +T 66 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 17 00 02 09 01 00 +T 6D 02 00 00 BE DD 74 BF DD 6E C0 DD 66 C1 DD +R 00 00 01 00 +T 78 02 00 00 5E BE DD 56 BF 01 C8 00 ED B0 DD +R 00 00 01 00 +T 83 02 00 00 6E BE DD 66 BF DD 75 C0 DD 74 C1 +R 00 00 01 00 +T 8E 02 00 00 01 8F 00 09 DD 4E C0 DD 46 C1 71 +R 00 00 01 00 +T 99 02 00 00 23 70 2A 00 00 00 00 E5 69 60 C1 +R 00 00 01 00 02 07 04 00 +T A2 02 00 00 71 23 70 DD 6E C0 DD 66 C1 22 +R 00 00 01 00 +T AC 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 +T AE 02 00 00 +R 00 00 01 00 +T AE 02 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T B9 02 00 00 23 46 23 5E 23 56 69 60 E5 DD 6E +R 00 00 01 00 +T C4 02 00 00 C0 DD 66 C1 23 23 C1 D5 59 50 C1 +R 00 00 01 00 +T CF 02 00 00 73 23 72 23 71 23 70 21 08 00 DD +R 00 00 01 00 +T DA 02 00 00 4E C0 DD 46 C1 09 E5 DD 6E 04 DD +R 00 00 01 00 +T E5 02 00 00 66 05 5E 23 56 23 4E 23 46 E1 73 +R 00 00 01 00 +T F0 02 00 00 23 72 23 71 23 70 21 0C 00 DD 4E +R 00 00 01 00 +T FB 02 00 00 C0 DD 46 C1 09 DD 4E C2 DD 46 C3 +R 00 00 01 00 +T 06 03 00 00 71 23 70 +R 00 00 01 00 +T 09 03 00 00 +R 00 00 01 00 +T 09 03 00 00 21 10 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 14 03 00 00 E6 01 06 00 4F 21 6F 00 DD 5E C0 +R 00 00 01 00 +T 1F 03 00 00 DD 56 C1 19 CB 41 28 04 CB F6 18 +R 00 00 01 00 +T 2A 03 00 00 02 +R 00 00 01 00 +T 2B 03 00 00 +R 00 00 01 00 +T 2B 03 00 00 CB B6 +R 00 00 01 00 +T 2D 03 00 00 +R 00 00 01 00 +T 2D 03 00 00 21 0E 00 DD 4E C0 DD 46 C1 09 7E +R 00 00 01 00 +T 38 03 00 00 FE 01 20 25 +R 00 00 01 00 +T 3C 03 00 00 +R 00 00 01 00 +T 3C 03 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 44 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T 4B 03 00 00 04 00 39 4D 44 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 56 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T 5C 03 00 00 00 00 00 00 C3 CA 0D 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T 61 03 00 00 +R 00 00 01 00 +T 61 03 00 00 FE 02 C2 3B 04 00 00 DD 7E DF E6 +R 00 00 01 00 00 07 01 00 +T 6A 03 00 00 10 47 DD 7E E0 E6 00 B0 28 11 +R 00 00 01 00 +T 74 03 00 00 +R 00 00 01 00 +T 74 03 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 7C 03 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T 83 03 00 00 CA 0D 00 00 +R 00 00 01 00 00 04 01 00 +T 85 03 00 00 +R 00 00 01 00 +T 85 03 00 00 DD 7E DF E6 04 47 DD 7E E0 E6 00 +R 00 00 01 00 +T 90 03 00 00 B0 28 25 +R 00 00 01 00 +T 93 03 00 00 +R 00 00 01 00 +T 93 03 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 9B 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T A2 03 00 00 04 00 39 4D 44 DD 5E 04 DD 56 05 +R 00 00 01 00 +T AD 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T B3 03 00 00 00 00 00 00 C3 CA 0D 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T B8 03 00 00 +R 00 00 01 00 +T B8 03 00 00 DD 7E DF E6 20 47 DD 7E E0 E6 00 +R 00 00 01 00 +T C3 03 00 00 B0 28 64 +R 00 00 01 00 +T C6 03 00 00 +R 00 00 01 00 +T C6 03 00 00 21 04 00 39 E5 21 13 00 DD 4E 04 +R 00 00 01 00 +T D1 03 00 00 DD 46 05 09 4E DD 5E C0 DD 56 C1 +R 00 00 01 00 +T DC 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 14 00 02 0A 14 00 +T E2 03 00 00 00 00 00 00 E1 DD 5E C0 DD 56 C1 +R 00 00 01 00 02 04 01 00 +T EB 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0B 00 02 0A 0B 00 +T F1 03 00 00 00 00 00 00 0E 04 DD 5E C0 DD 56 +R 00 00 01 00 02 04 01 00 +T FA 03 00 00 C1 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 00 04 00 00 CD 00 00 00 00 DD 7E FA DD B6 FB +R 00 00 01 00 02 05 01 00 +T 09 04 00 00 20 0E DD 7E DF E6 40 47 DD 7E E0 +R 00 00 01 00 +T 14 04 00 00 E6 00 B0 28 03 +R 00 00 01 00 +T 19 04 00 00 +R 00 00 01 00 +T 19 04 00 00 +R 00 00 01 00 +T 19 04 00 00 +R 00 00 01 00 +T 19 04 00 00 C3 B3 05 00 00 +R 00 00 01 00 00 05 01 00 +T 1C 04 00 00 +R 00 00 01 00 +T 1C 04 00 00 DD 5E C0 DD 56 C1 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 24 04 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T 2A 04 00 00 +R 00 00 01 00 +T 2A 04 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 32 04 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T 39 04 00 00 CA 0D 00 00 +R 00 00 01 00 00 04 01 00 +T 3B 04 00 00 +R 00 00 01 00 +T 3B 04 00 00 FE 03 C2 B3 05 00 00 DD 7E DF E6 +R 00 00 01 00 00 07 01 00 +T 44 04 00 00 04 47 DD 7E E0 E6 00 B0 28 74 +R 00 00 01 00 +T 4E 04 00 00 +R 00 00 01 00 +T 4E 04 00 00 21 16 00 DD 4E C0 DD 46 C1 09 5E +R 00 00 01 00 +T 59 04 00 00 23 56 23 4E 23 46 C5 D5 21 2D 00 +R 00 00 01 00 +T 64 04 00 00 DD 4E C0 DD 46 C1 09 4E 23 46 23 +R 00 00 01 00 +T 6F 04 00 00 5E 23 56 D5 C5 21 01 00 C1 09 EB +R 00 00 01 00 +T 7A 04 00 00 21 00 00 C1 ED 4A E5 D5 21 14 00 +R 00 00 01 00 +T 85 04 00 00 39 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 8E 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T 93 04 00 00 00 00 00 00 F1 F1 F1 F1 7D B4 20 +R 00 00 01 00 02 04 01 00 +T 9C 04 00 00 25 +R 00 00 01 00 +T 9D 04 00 00 +R 00 00 01 00 +T 9D 04 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T A5 04 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T AC 04 00 00 04 00 39 4D 44 DD 5E 04 DD 56 05 +R 00 00 01 00 +T B7 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T BD 04 00 00 00 00 00 00 C3 CA 0D 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T C2 04 00 00 +R 00 00 01 00 +T C2 04 00 00 +R 00 00 01 00 +T C2 04 00 00 DD 7E DF E6 10 47 DD 7E E0 E6 00 +R 00 00 01 00 +T CD 04 00 00 B0 28 30 +R 00 00 01 00 +T D0 04 00 00 +R 00 00 01 00 +T D0 04 00 00 DD 7E DF E6 04 47 DD 7E E0 E6 00 +R 00 00 01 00 +T DB 04 00 00 B0 28 11 +R 00 00 01 00 +T DE 04 00 00 +R 00 00 01 00 +T DE 04 00 00 01 01 00 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T E8 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T ED 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T EF 04 00 00 +R 00 00 01 00 +T EF 04 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T F7 04 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T FE 04 00 00 CA 0D 00 00 +R 00 00 01 00 00 04 01 00 +T 00 05 00 00 +R 00 00 01 00 +T 00 05 00 00 DD 7E DF E6 20 47 DD 7E E0 E6 00 +R 00 00 01 00 +T 0B 05 00 00 B0 CA A2 05 00 00 +R 00 00 01 00 00 06 01 00 +T 0F 05 00 00 +R 00 00 01 00 +T 0F 05 00 00 21 04 00 39 E5 21 13 00 DD 4E 04 +R 00 00 01 00 +T 1A 05 00 00 DD 46 05 09 4E DD 5E C0 DD 56 C1 +R 00 00 01 00 +T 25 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 14 00 02 0A 14 00 +T 2B 05 00 00 00 00 00 00 E1 DD 7E DF E6 04 47 +R 00 00 01 00 02 04 01 00 +T 34 05 00 00 DD 7E E0 E6 00 B0 28 2E +R 00 00 01 00 +T 3C 05 00 00 +R 00 00 01 00 +T 3C 05 00 00 DD 6E FA DD 66 FB E5 21 06 00 39 +R 00 00 01 00 +T 47 05 00 00 4D 44 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T 50 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 55 05 00 00 00 00 00 00 E1 0E 05 DD 5E C0 DD +R 00 00 01 00 02 04 01 00 +T 5E 05 00 00 56 C1 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1A 00 +T 63 05 00 00 00 00 00 00 CD 00 00 00 00 18 10 +R 00 00 01 00 02 04 1A 00 02 09 01 00 +T 6A 05 00 00 +R 00 00 01 00 +T 6A 05 00 00 0E 04 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T 73 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T 78 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 7A 05 00 00 +R 00 00 01 00 +T 7A 05 00 00 DD 7E FA DD B6 FB 20 0E DD 7E DF +R 00 00 01 00 +T 85 05 00 00 E6 40 47 DD 7E E0 E6 00 B0 28 02 +R 00 00 01 00 +T 90 05 00 00 +R 00 00 01 00 +T 90 05 00 00 +R 00 00 01 00 +T 90 05 00 00 +R 00 00 01 00 +T 90 05 00 00 18 21 +R 00 00 01 00 +T 92 05 00 00 +R 00 00 01 00 +T 92 05 00 00 DD 5E C0 DD 56 C1 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 9A 05 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T A1 05 00 00 0E +R 00 00 01 00 +T A2 05 00 00 +R 00 00 01 00 +T A2 05 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T AA 05 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T B0 05 00 00 +R 00 00 01 00 +T B0 05 00 00 C3 CA 0D 00 00 +R 00 00 01 00 00 05 01 00 +T B3 05 00 00 +R 00 00 01 00 +T B3 05 00 00 21 3C 00 39 E5 DD 6E 0A DD 66 0B +R 00 00 01 00 +T BE 05 00 00 E5 21 08 00 39 4D 44 DD 5E C0 DD +R 00 00 01 00 +T C9 05 00 00 56 C1 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 20 00 +T CE 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 20 00 02 09 01 00 +T D5 05 00 00 7D A4 3C 20 67 +R 00 00 01 00 +T DA 05 00 00 +R 00 00 01 00 +T DA 05 00 00 DD 7E DF E6 10 47 DD 7E E0 E6 00 +R 00 00 01 00 +T E5 05 00 00 B0 20 56 +R 00 00 01 00 +T E8 05 00 00 +R 00 00 01 00 +T E8 05 00 00 21 0E 00 DD 4E C0 DD 46 C1 09 7E +R 00 00 01 00 +T F3 05 00 00 FE 04 20 2A +R 00 00 01 00 +T F7 05 00 00 +R 00 00 01 00 +T F7 05 00 00 21 12 00 DD 4E C0 DD 46 C1 09 4E +R 00 00 01 00 +T 02 06 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T 0C 06 00 00 1A 00 DD 4E C0 DD 46 C1 09 C1 D5 +R 00 00 01 00 +T 17 06 00 00 59 50 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 21 06 00 00 +R 00 00 01 00 +T 21 06 00 00 21 6F 00 DD 4E C0 DD 46 C1 09 7E +R 00 00 01 00 +T 2C 06 00 00 F6 01 77 23 7E F6 00 77 59 50 3E +R 00 00 01 00 +T 37 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 3C 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 3E 06 00 00 +R 00 00 01 00 +T 3E 06 00 00 C3 CA 0D 00 00 +R 00 00 01 00 00 05 01 00 +T 41 06 00 00 +R 00 00 01 00 +T 41 06 00 00 21 3F 00 DD 4E C0 DD 46 C1 09 4E +R 00 00 01 00 +T 4C 06 00 00 23 46 23 5E 23 56 69 60 DD 4E C6 +R 00 00 01 00 +T 57 06 00 00 DD 46 C7 A7 ED 42 20 0C EB DD 4E +R 00 00 01 00 +T 62 06 00 00 C8 DD 46 C9 ED 42 CA FC 06 00 00 +R 00 00 01 00 00 0B 01 00 +T 6B 06 00 00 +R 00 00 01 00 +T 6B 06 00 00 DD 7E FA DD B6 FB 20 1C DD 7E DF +R 00 00 01 00 +T 76 06 00 00 E6 20 47 DD 7E E0 E6 00 B0 20 0E +R 00 00 01 00 +T 81 06 00 00 DD 7E DF E6 40 47 DD 7E E0 E6 00 +R 00 00 01 00 +T 8C 06 00 00 B0 28 6D +R 00 00 01 00 +T 8F 06 00 00 +R 00 00 01 00 +T 8F 06 00 00 +R 00 00 01 00 +T 8F 06 00 00 +R 00 00 01 00 +T 8F 06 00 00 +R 00 00 01 00 +T 8F 06 00 00 +R 00 00 01 00 +T 8F 06 00 00 DD 6E FA DD 66 FB E5 DD 6E 0A DD +R 00 00 01 00 +T 9A 06 00 00 66 0B E5 21 08 00 39 E5 21 13 00 +R 00 00 01 00 +T A5 06 00 00 DD 4E 04 DD 46 05 09 4E DD 5E C0 +R 00 00 01 00 +T B0 06 00 00 DD 56 C1 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0F 00 +T B6 06 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T BD 06 00 00 E1 DD 7E DF E6 04 47 DD 7E E0 E6 +R 00 00 01 00 +T C8 06 00 00 00 B0 28 21 DD 7E DF E6 10 47 DD +R 00 00 01 00 +T D3 06 00 00 7E E0 E6 00 B0 20 13 +R 00 00 01 00 +T DA 06 00 00 +R 00 00 01 00 +T DA 06 00 00 +R 00 00 01 00 +T DA 06 00 00 +R 00 00 01 00 +T DA 06 00 00 21 6F 00 DD 4E C0 DD 46 C1 09 7E +R 00 00 01 00 +T E5 06 00 00 F6 01 77 23 7E F6 00 77 +R 00 00 01 00 +T ED 06 00 00 +R 00 00 01 00 +T ED 06 00 00 DD CB DF B6 DD CB DF AE AF DD 77 +R 00 00 01 00 +T F8 06 00 00 FA DD 77 FB +R 00 00 01 00 +T FC 06 00 00 +R 00 00 01 00 +T FC 06 00 00 +R 00 00 01 00 +T FC 06 00 00 DD 7E DF E6 10 47 DD 7E E0 E6 00 +R 00 00 01 00 +T 07 07 00 00 B0 28 6D +R 00 00 01 00 +T 0A 07 00 00 +R 00 00 01 00 +T 0A 07 00 00 21 0E 00 DD 4E C0 DD 46 C1 09 7E +R 00 00 01 00 +T 15 07 00 00 FE 04 20 3C 21 6F 00 DD 4E C0 DD +R 00 00 01 00 +T 20 07 00 00 46 C1 09 7E E6 02 47 23 7E E6 00 +R 00 00 01 00 +T 2B 07 00 00 B0 20 27 21 6F 00 DD 4E C0 DD 46 +R 00 00 01 00 +T 36 07 00 00 C1 09 7E E6 08 47 23 7E E6 00 B0 +R 00 00 01 00 +T 41 07 00 00 20 12 +R 00 00 01 00 +T 43 07 00 00 +R 00 00 01 00 +T 43 07 00 00 +R 00 00 01 00 +T 43 07 00 00 +R 00 00 01 00 +T 43 07 00 00 0E 02 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T 4C 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T 51 07 00 00 00 00 00 00 18 11 +R 00 00 01 00 02 04 01 00 +T 55 07 00 00 +R 00 00 01 00 +T 55 07 00 00 01 01 00 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T 5F 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 64 07 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 66 07 00 00 +R 00 00 01 00 +T 66 07 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 6E 07 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T 75 07 00 00 CA 0D 00 00 +R 00 00 01 00 00 04 01 00 +T 77 07 00 00 +R 00 00 01 00 +T 77 07 00 00 DD 7E DF E6 20 47 DD 7E E0 E6 00 +R 00 00 01 00 +T 82 07 00 00 B0 28 25 +R 00 00 01 00 +T 85 07 00 00 +R 00 00 01 00 +T 85 07 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 8D 07 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T 94 07 00 00 04 00 39 4D 44 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 9F 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T A5 07 00 00 00 00 00 00 C3 CA 0D 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T AA 07 00 00 +R 00 00 01 00 +T AA 07 00 00 DD 7E DF E6 00 47 DD 7E E0 E6 02 +R 00 00 01 00 +T B5 07 00 00 B0 28 6C DD 6E C8 DD 66 C9 E5 DD +R 00 00 01 00 +T C0 07 00 00 6E C6 DD 66 C7 E5 DD 6E FA DD 66 +R 00 00 01 00 +T CB 07 00 00 FB 11 00 00 C1 09 EB C1 ED 4A E5 +R 00 00 01 00 +T D6 07 00 00 D5 DD 6E C8 DD 66 C9 E5 DD 6E C6 +R 00 00 01 00 +T E1 07 00 00 DD 66 C7 E5 21 4A 00 DD 4E C0 DD +R 00 00 01 00 +T EC 07 00 00 46 C1 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T F7 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T FC 07 00 00 00 00 00 00 F1 F1 F1 F1 7D B4 28 +R 00 00 01 00 02 04 01 00 +T 05 08 00 00 1E +R 00 00 01 00 +T 06 08 00 00 +R 00 00 01 00 +T 06 08 00 00 +R 00 00 01 00 +T 06 08 00 00 +R 00 00 01 00 +T 06 08 00 00 21 4E 00 DD 4E C0 DD 46 C1 09 E5 +R 00 00 01 00 +T 11 08 00 00 21 1B 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 1C 08 00 00 E1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 24 08 00 00 +R 00 00 01 00 +T 24 08 00 00 DD 7E DF E6 04 47 DD 7E E0 E6 00 +R 00 00 01 00 +T 2F 08 00 00 B0 20 11 +R 00 00 01 00 +T 32 08 00 00 +R 00 00 01 00 +T 32 08 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 3A 08 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T 41 08 00 00 CA 0D 00 00 +R 00 00 01 00 00 04 01 00 +T 43 08 00 00 +R 00 00 01 00 +T 43 08 00 00 21 0E 00 DD 4E C0 DD 46 C1 09 5E +R 00 00 01 00 +T 4E 08 00 00 CD 00 00 00 00 04 08 00 +R 00 00 01 00 02 05 1C 00 +T 54 08 00 00 31 0A 00 00 66 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 58 08 00 00 0B 09 00 00 2A 09 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 5C 08 00 00 0B 09 00 00 0B 09 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 60 08 00 00 D7 09 00 00 6C 09 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 64 08 00 00 1C 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 66 08 00 00 +R 00 00 01 00 +T 66 08 00 00 21 16 00 DD 4E C0 DD 46 C1 09 5E +R 00 00 01 00 +T 71 08 00 00 23 56 23 4E 23 46 C5 D5 21 12 00 +R 00 00 01 00 +T 7C 08 00 00 DD 4E C0 DD 46 C1 09 4E 23 46 23 +R 00 00 01 00 +T 87 08 00 00 5E 23 56 D5 C5 21 01 00 C1 09 EB +R 00 00 01 00 +T 92 08 00 00 21 00 00 C1 ED 4A E5 D5 21 14 00 +R 00 00 01 00 +T 9D 08 00 00 39 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T A6 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T AB 08 00 00 00 00 00 00 F1 F1 F1 F1 7D B4 28 +R 00 00 01 00 02 04 01 00 +T B4 08 00 00 2E +R 00 00 01 00 +T B5 08 00 00 +R 00 00 01 00 +T B5 08 00 00 DD 6E FA DD 66 FB E5 21 06 00 39 +R 00 00 01 00 +T C0 08 00 00 4D 44 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T C9 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T CE 08 00 00 00 00 00 00 E1 0E 05 DD 5E C0 DD +R 00 00 01 00 02 04 01 00 +T D7 08 00 00 56 C1 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1A 00 +T DC 08 00 00 00 00 00 00 CD 00 00 00 00 18 25 +R 00 00 01 00 02 04 1A 00 02 09 01 00 +T E3 08 00 00 +R 00 00 01 00 +T E3 08 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T EB 08 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T F2 08 00 00 04 00 39 4D 44 DD 5E 04 DD 56 05 +R 00 00 01 00 +T FD 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T 03 09 00 00 00 00 00 00 C3 CA 0D 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T 08 09 00 00 +R 00 00 01 00 +T 08 09 00 00 C3 31 0A 00 00 +R 00 00 01 00 00 05 01 00 +T 0B 09 00 00 +R 00 00 01 00 +T 0B 09 00 00 DD 6E FA DD 66 FB E5 21 06 00 39 +R 00 00 01 00 +T 16 09 00 00 4D 44 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T 1F 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 24 09 00 00 00 00 00 00 E1 C3 31 0A 00 00 +R 00 00 01 00 02 04 01 00 00 0A 01 00 +T 2A 09 00 00 +R 00 00 01 00 +T 2A 09 00 00 DD 6E FA DD 66 FB E5 21 06 00 39 +R 00 00 01 00 +T 35 09 00 00 4D 44 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T 3E 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 43 09 00 00 00 00 00 00 E1 21 7C 00 DD 4E C0 +R 00 00 01 00 02 04 01 00 +T 4C 09 00 00 DD 46 C1 09 7E 23 B6 23 B6 23 B6 +R 00 00 01 00 +T 57 09 00 00 20 10 +R 00 00 01 00 +T 59 09 00 00 +R 00 00 01 00 +T 59 09 00 00 0E 07 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T 62 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T 67 09 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 69 09 00 00 +R 00 00 01 00 +T 69 09 00 00 C3 31 0A 00 00 +R 00 00 01 00 00 05 01 00 +T 6C 09 00 00 +R 00 00 01 00 +T 6C 09 00 00 DD 6E FA DD 66 FB E5 21 06 00 39 +R 00 00 01 00 +T 77 09 00 00 4D 44 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T 80 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 85 09 00 00 00 00 00 00 E1 21 7C 00 DD 4E C0 +R 00 00 01 00 02 04 01 00 +T 8E 09 00 00 DD 46 C1 09 7E 23 B6 23 B6 23 B6 +R 00 00 01 00 +T 99 09 00 00 20 3A +R 00 00 01 00 +T 9B 09 00 00 +R 00 00 01 00 +T 9B 09 00 00 0E 0B DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T A4 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T A9 09 00 00 00 00 00 00 21 00 00 E5 21 30 75 +R 00 00 01 00 02 04 01 00 +T B2 09 00 00 E5 21 82 00 DD 4E C0 DD 46 C1 09 +R 00 00 01 00 +T BD 09 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T C3 09 00 00 CD 00 00 00 00 E1 E1 21 82 00 09 +R 00 00 01 00 02 05 01 00 +T CC 09 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T D2 09 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T D5 09 00 00 +R 00 00 01 00 +T D5 09 00 00 18 5A +R 00 00 01 00 +T D7 09 00 00 +R 00 00 01 00 +T D7 09 00 00 DD 6E FA DD 66 FB E5 21 06 00 39 +R 00 00 01 00 +T E2 09 00 00 4D 44 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T EB 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T F0 09 00 00 00 00 00 00 E1 21 7C 00 DD 4E C0 +R 00 00 01 00 02 04 01 00 +T F9 09 00 00 DD 46 C1 09 7E 23 B6 23 B6 23 B6 +R 00 00 01 00 +T 04 0A 00 00 20 14 +R 00 00 01 00 +T 06 0A 00 00 +R 00 00 01 00 +T 06 0A 00 00 01 00 00 DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T 10 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 15 0A 00 00 00 00 00 00 C3 CA 0D 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T 1A 0A 00 00 +R 00 00 01 00 +T 1A 0A 00 00 18 15 +R 00 00 01 00 +T 1C 0A 00 00 +R 00 00 01 00 +T 1C 0A 00 00 21 82 00 DD 4E C0 DD 46 C1 09 EB +R 00 00 01 00 +T 27 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T 2D 0A 00 00 00 00 00 00 18 00 +R 00 00 01 00 02 04 01 00 +T 31 0A 00 00 +R 00 00 01 00 +T 31 0A 00 00 DD 7E FA DD B6 FB CA A7 0B 00 00 +R 00 00 01 00 00 0B 01 00 +T 3A 0A 00 00 +R 00 00 01 00 +T 3A 0A 00 00 21 0E 00 DD 4E C0 DD 46 C1 09 7E +R 00 00 01 00 +T 45 0A 00 00 FE 04 DA 97 0B 00 00 FE 08 D2 +R 00 00 01 00 00 07 01 00 +T 4D 0A 00 00 97 0B 00 00 +R 00 00 01 00 00 04 01 00 +T 4F 0A 00 00 +R 00 00 01 00 +T 4F 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T 55 0A 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 01 00 +T 5E 0A 00 00 71 FE DD 70 FF C5 E5 21 C0 00 DD +R 00 00 01 00 +T 69 0A 00 00 4E C0 DD 46 C1 09 5E 23 56 23 4E +R 00 00 01 00 +T 74 0A 00 00 23 46 EB CD 00 00 00 00 30 71 +R 00 00 01 00 02 08 10 00 +T 7C 0A 00 00 +R 00 00 01 00 +T 7C 0A 00 00 21 C0 00 DD 4E C0 DD 46 C1 09 4E +R 00 00 01 00 +T 87 0A 00 00 23 46 23 5E 23 56 69 60 4D 44 DD +R 00 00 01 00 +T 92 0A 00 00 6E FC DD 66 FD A7 ED 42 4D 44 DD +R 00 00 01 00 +T 9D 0A 00 00 6E FE DD 66 FF ED 52 E5 C5 DD 6E +R 00 00 01 00 +T A8 0A 00 00 FA DD 66 FB 01 00 00 C5 E5 01 +R 00 00 01 00 +T B2 0A 00 00 00 00 21 E8 03 CD 00 00 00 00 CD +R 00 00 01 00 02 0A 0E 00 +T BB 0A 00 00 00 00 00 00 E5 21 C4 00 DD 5E C0 +R 00 00 01 00 02 04 15 00 +T C4 0A 00 00 DD 56 C1 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T CF 0A 00 00 70 21 C0 00 DD 4E C0 DD 46 C1 09 +R 00 00 01 00 +T DA 0A 00 00 DD 4E FE DD 46 FF DD 5E FC DD 56 +R 00 00 01 00 +T E5 0A 00 00 FD 73 23 72 23 71 23 70 +R 00 00 01 00 +T ED 0A 00 00 +R 00 00 01 00 +T ED 0A 00 00 DD 4E 0A DD 46 0B 21 74 00 DD 5E +R 00 00 01 00 +T F8 0A 00 00 C0 DD 56 C1 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1E 00 +T 00 0B 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 1E 00 02 0A 01 00 +T 07 0B 00 00 78 00 DD 4E C0 DD 46 C1 09 DD 5E +R 00 00 01 00 +T 12 0B 00 00 FA DD 56 FB 01 00 00 CD +R 00 00 01 00 +T 1A 0B 00 00 00 00 00 00 21 3F 00 DD 4E C0 DD +R 00 00 01 00 02 04 08 00 +T 23 0B 00 00 46 C1 09 DD 5E FA DD 56 FB 01 +R 00 00 01 00 +T 2D 0B 00 00 00 00 CD 00 00 00 00 21 43 00 DD +R 00 00 01 00 02 07 08 00 +T 36 0B 00 00 4E C0 DD 46 C1 09 DD 5E FA DD 56 +R 00 00 01 00 +T 41 0B 00 00 FB 01 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 09 21 00 +T 49 0B 00 00 6F 00 DD 4E C0 DD 46 C1 09 7E F6 +R 00 00 01 00 +T 54 0B 00 00 01 77 23 7E F6 00 77 21 66 00 09 +R 00 00 01 00 +T 5F 0B 00 00 7E 23 B6 23 B6 28 2F +R 00 00 01 00 +T 66 0B 00 00 +R 00 00 01 00 +T 66 0B 00 00 21 78 00 DD 4E C0 DD 46 C1 09 5E +R 00 00 01 00 +T 71 0B 00 00 23 56 23 4E 23 46 C5 D5 DD 5E C0 +R 00 00 01 00 +T 7C 0B 00 00 DD 56 C1 21 66 00 DD 4E C0 DD 46 +R 00 00 01 00 +T 87 0B 00 00 C1 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 91 0B 00 00 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 01 00 +T 95 0B 00 00 +R 00 00 01 00 +T 95 0B 00 00 18 10 +R 00 00 01 00 +T 97 0B 00 00 +R 00 00 01 00 +T 97 0B 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 9F 0B 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T A6 0B 00 00 00 +R 00 00 01 00 +T A7 0B 00 00 +R 00 00 01 00 +T A7 0B 00 00 +R 00 00 01 00 +T A7 0B 00 00 DD 7E DF E6 40 47 DD 7E E0 E6 00 +R 00 00 01 00 +T B2 0B 00 00 B0 CA 14 0D 00 00 +R 00 00 01 00 00 06 01 00 +T B6 0B 00 00 +R 00 00 01 00 +T B6 0B 00 00 21 6F 00 DD 4E C0 DD 46 C1 09 7E +R 00 00 01 00 +T C1 0B 00 00 F6 01 77 23 7E F6 00 77 21 0E 00 +R 00 00 01 00 +T CC 0B 00 00 09 5E CD 00 00 00 00 04 08 00 +R 00 00 01 00 02 07 1C 00 +T D4 0B 00 00 D4 0C 00 00 E6 0B 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T D8 0B 00 00 E6 0B 00 00 06 0C 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T DC 0B 00 00 74 0C 00 00 BD 0C 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T E0 0B 00 00 BD 0C 00 00 BD 0C 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T E4 0B 00 00 BF 0C 00 00 +R 00 00 01 00 00 04 01 00 +T E6 0B 00 00 +R 00 00 01 00 +T E6 0B 00 00 21 3F 00 DD 4E C0 DD 46 C1 09 CD +R 00 00 01 00 +T F1 0B 00 00 00 00 00 00 0E 08 DD 5E C0 DD 56 +R 00 00 01 00 02 04 13 00 +T FA 0B 00 00 C1 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 00 0C 00 00 CD 00 00 00 00 C3 D4 0C 00 00 +R 00 00 01 00 02 05 01 00 00 0A 01 00 +T 06 0C 00 00 +R 00 00 01 00 +T 06 0C 00 00 21 3F 00 DD 4E C0 DD 46 C1 09 CD +R 00 00 01 00 +T 11 0C 00 00 00 00 00 00 21 7C 00 DD 4E C0 DD +R 00 00 01 00 02 04 13 00 +T 1A 0C 00 00 46 C1 09 7E 23 B6 23 B6 23 B6 20 +R 00 00 01 00 +T 25 0C 00 00 3C +R 00 00 01 00 +T 26 0C 00 00 +R 00 00 01 00 +T 26 0C 00 00 0E 0B DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T 2F 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T 34 0C 00 00 00 00 00 00 21 00 00 E5 21 30 75 +R 00 00 01 00 02 04 01 00 +T 3D 0C 00 00 E5 21 82 00 DD 4E C0 DD 46 C1 09 +R 00 00 01 00 +T 48 0C 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 4E 0C 00 00 CD 00 00 00 00 E1 E1 21 82 00 09 +R 00 00 01 00 02 05 01 00 +T 57 0C 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 5D 0C 00 00 CD 00 00 00 00 18 10 +R 00 00 01 00 02 05 01 00 +T 62 0C 00 00 +R 00 00 01 00 +T 62 0C 00 00 0E 0A DD 5E C0 DD 56 C1 3E +R 00 00 01 00 +T 6B 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T 70 0C 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 72 0C 00 00 +R 00 00 01 00 +T 72 0C 00 00 18 60 +R 00 00 01 00 +T 74 0C 00 00 +R 00 00 01 00 +T 74 0C 00 00 21 3F 00 DD 4E C0 DD 46 C1 09 CD +R 00 00 01 00 +T 7F 0C 00 00 00 00 00 00 0E 0B DD 5E C0 DD 56 +R 00 00 01 00 02 04 13 00 +T 88 0C 00 00 C1 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 8E 0C 00 00 CD 00 00 00 00 21 00 00 E5 21 +R 00 00 01 00 02 05 01 00 +T 96 0C 00 00 30 75 E5 21 82 00 DD 4E C0 DD 46 +R 00 00 01 00 +T A1 0C 00 00 C1 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T A7 0C 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T AE 0C 00 00 21 82 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 16 00 +T B6 0C 00 00 00 00 00 00 CD 00 00 00 00 18 17 +R 00 00 01 00 02 04 16 00 02 09 01 00 +T BD 0C 00 00 +R 00 00 01 00 +T BD 0C 00 00 18 15 +R 00 00 01 00 +T BF 0C 00 00 +R 00 00 01 00 +T BF 0C 00 00 21 82 00 DD 4E C0 DD 46 C1 09 EB +R 00 00 01 00 +T CA 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T D0 0C 00 00 00 00 00 00 18 00 +R 00 00 01 00 02 04 01 00 +T D4 0C 00 00 +R 00 00 01 00 +T D4 0C 00 00 21 66 00 DD 4E C0 DD 46 C1 09 7E +R 00 00 01 00 +T DF 0C 00 00 23 B6 23 B6 28 2F +R 00 00 01 00 +T E5 0C 00 00 +R 00 00 01 00 +T E5 0C 00 00 21 78 00 DD 4E C0 DD 46 C1 09 5E +R 00 00 01 00 +T F0 0C 00 00 23 56 23 4E 23 46 C5 D5 DD 5E C0 +R 00 00 01 00 +T FB 0C 00 00 DD 56 C1 21 66 00 DD 4E C0 DD 46 +R 00 00 01 00 +T 06 0D 00 00 C1 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 10 0D 00 00 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 01 00 +T 14 0D 00 00 +R 00 00 01 00 +T 14 0D 00 00 +R 00 00 01 00 +T 14 0D 00 00 +R 00 00 01 00 +T 14 0D 00 00 21 80 00 DD 4E C0 DD 46 C1 09 7E +R 00 00 01 00 +T 1F 0D 00 00 23 B6 CA B7 0D 00 00 21 80 00 DD +R 00 00 01 00 00 07 01 00 +T 28 0D 00 00 4E C0 DD 46 C1 09 56 23 66 6A 11 +R 00 00 01 00 +T 33 0D 00 00 06 00 19 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 3E 0D 00 00 D5 21 3F 00 DD 4E C0 DD 46 C1 09 +R 00 00 01 00 +T 49 0D 00 00 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 51 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T 56 0D 00 00 00 00 00 00 F1 F1 7D B4 28 59 +R 00 00 01 00 02 04 01 00 +T 5E 0D 00 00 +R 00 00 01 00 +T 5E 0D 00 00 +R 00 00 01 00 +T 5E 0D 00 00 +R 00 00 01 00 +T 5E 0D 00 00 21 3C 00 39 E5 DD 6E 0A DD 66 0B +R 00 00 01 00 +T 69 0D 00 00 E5 21 08 00 39 E5 21 13 00 DD 4E +R 00 00 01 00 +T 74 0D 00 00 04 DD 46 05 09 4D 44 DD 5E C0 DD +R 00 00 01 00 +T 7F 0D 00 00 56 C1 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 23 00 +T 84 0D 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 23 00 02 09 01 00 +T 8B 0D 00 00 E1 21 3C 00 39 E5 DD 6E 0A DD 66 +R 00 00 01 00 +T 96 0D 00 00 0B E5 21 08 00 39 4D 44 DD 5E C0 +R 00 00 01 00 +T A1 0D 00 00 DD 56 C1 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 20 00 +T A7 0D 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 20 00 02 09 01 00 +T AE 0D 00 00 7D B4 20 02 +R 00 00 01 00 +T B2 0D 00 00 +R 00 00 01 00 +T B2 0D 00 00 18 05 +R 00 00 01 00 +T B4 0D 00 00 +R 00 00 01 00 +T B4 0D 00 00 C3 14 0D 00 00 +R 00 00 01 00 00 05 01 00 +T B7 0D 00 00 +R 00 00 01 00 +T B7 0D 00 00 18 03 +R 00 00 01 00 +T B9 0D 00 00 +R 00 00 01 00 +T B9 0D 00 00 C3 FC 06 00 00 +R 00 00 01 00 00 05 01 00 +T BC 0D 00 00 +R 00 00 01 00 +T BC 0D 00 00 DD 5E C0 DD 56 C1 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T C4 0D 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T CA 0D 00 00 +R 00 00 01 00 +T CA 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/internet_lib/tcpcmd.rel b/src/nos/lib/internet_lib/tcpcmd.rel new file mode 100644 index 00000000..6fcfc2e7 --- /dev/null +++ b/src/nos/lib/internet_lib/tcpcmd.rel @@ -0,0 +1,1244 @@ +XL4 +H 5 areas 67 global symbols +S ___0072_cad1__20_2510lu_2510lu_2 Ref00000000 +S _inet_ntoa Ref00000000 +S ___03b3_2057_Too_20many_20sessio Ref00000000 +S ___02b8_5ce5_Local_3a_20_25s Ref00000000 +S ___0165_db35__25s_3a_20srtt_20_2 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0591_5069_status Ref00000000 +S ?L_DEC_L03 Ref00000000 +S ___05aa_bb94_tcp_20rtt_20_3ctcb_ Ref00000000 +S ___047d_bd2b_expired Ref00000000 +S ___0362_2a15_Recv_3a_20_20_20_20 Ref00000000 +S _kick_tcp Ref00000000 +S ___0597_301d_stopped Ref00000000 +S ___005b_2da2__20_20_20_25s_0a Ref00000000 +S ___003a_f37c__20_20_20_20_20_20_ Ref00000000 +S _reset_tcp Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S _Tcp_irtt Ref00000000 +S _tcpval Ref00000000 +S ___0395_b0d7_TCP_20syn_2bdata_20 Ref00000000 +S ___010e_d1e2__25_2ds Ref00000000 +S _Tcbs Ref00000000 +S _ppause Ref00000000 +S _newsession Ref00000000 +S ___012c_086d__25c_5b2J Ref00000000 +S ___0391_fa23_TCP_20MSS Ref00000000 +S ___004c_a271__20_20_20_20_20INF Ref00000000 +S ___0397_5b74_TCP_20window Ref00000000 +S ___04b0_516b_kick Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0564_ae54_rtt Ref00000000 +S ___0176_c497__26TCB_20_20_20_20_ Ref00000000 +S ___011c_4a96__258lu Ref00000000 +S ___0103_9c51__25_2d23s Ref00000000 +S ___009f_a393__20Remote_3a_20_25s Ref00000000 +S _Tcp_trace Ref00000000 +S ___05a8_e483_tcp_20kick_20_3ctcb Ref00000000 +S _alert Ref00000000 +S __fprintf Ref00000000 +S ___04af_f4c1_irtt Ref00000000 +S ___0380_c1d8_Send_3a_20_2508lx_2 Ref00000000 +S ___05ab_f363_tcp_20stat_20_3ctcb Ref00000000 +S _Tcp_mss Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___05a9_a12c_tcp_20reset_20_3ctc Ref00000000 +S ___0082_0cd7__20_28S_29 Ref00000000 +S _read_timer Ref00000000 +S ___054e_85b2_reset Ref00000000 +S _Tcp_window Ref00000000 +S .__.ABS. Def00000000 +S _pinet Ref00000000 +S _Tcp_rtt Ref00000000 +S ___059d_bb66_syndata Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Current Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _freesession Ref00000000 +S ___05e2_9158_window Ref00000000 +S ___0396_43bd_TCP_20timestamps Ref00000000 +S ___0392_70e7_TCP_20default_20irt Ref00000000 +S ___05bd_4f5f_trace Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ___017a_ba4c__28_252u_29_25_2d20 Ref00000000 +S ___0064_ccb1__20_20seq_20x_25lx_ Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _atol Ref00000000 +S ___03f1_699f__5eC_0a Ref00000000 +S ___0394_c668_TCP_20state_20traci Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S __printf Ref00000000 +S ___0032_de40__20_20_20_20_20 Ref00000000 +S ___0124_482b__259p_256u_256u_20_ Ref00000000 +S ___00a0_d7c2__20Retry Ref00000000 +S _Notval Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___023c_b7f4_Dup_20acks_20_20_20 Ref00000000 +S ___011f_3341__258u_2510u_2511lu_ Ref00000000 +S _htol Ref00000000 +S ___03a7_1db3_Timer_20_20_20_20_2 Ref00000000 +S ___00a1_d322__20State_3a_20_25s_ Ref00000000 +S _setbool Ref00000000 +S ___0565_02fc_running Ref00000000 +S ___05b7_223a_timestamps Ref00000000 +S ___04ea_58b1_mss Ref00000000 +S _Tcp_syndata Ref00000000 +S ___035e_fbe9_Reassembly_20queue_ Ref00000000 +S _Tcpstates Ref00000000 +S _setshort Ref00000000 +S _setlong Ref00000000 +S _Cmdline Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _subcmd Ref00000000 +S _newproc Ref00000000 +S _keywait Ref00000000 +S _Tcp_mib Ref00000000 +S _ltop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size CD5 flags 0 +S _st_tcp Def00000669 +S _dotcp Def00000000 +A CSTR size 21 flags 0 +A IDATA0 size 91 flags 0 +S _Tcp_tstamps Def00000000 +A CDATA0 size 91 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 36 00 +T 09 00 00 00 E5 C5 4B 42 11 02 00 00 00 3E +R 00 00 01 00 00 09 03 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 5F 00 02 09 5F 00 +T 16 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 0B 1E 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 36 00 +T 23 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 45 00 02 0A 45 00 +T 29 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 24 00 2B 0A 54 00 +T 2F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 54 00 02 09 05 00 +T 36 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 1E 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 36 00 +T 41 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 3B 00 02 0A 3B 00 +T 47 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 03 00 2B 0A 54 00 +T 4D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 54 00 02 09 05 00 +T 54 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 1E 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 CD 00 00 00 00 FE FF 03 03 0A 5F +R 00 00 01 00 02 05 3E 00 +T 62 00 00 00 03 0A 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 51 00 +T 68 00 00 00 00 00 00 00 CD 00 00 00 00 EB 3E +R 00 00 01 00 02 04 51 00 02 09 05 00 +T 6F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 63 00 02 09 63 00 +T 74 00 00 00 00 00 00 00 DD 75 FE DD 74 FF EB +R 00 00 01 00 02 04 05 00 +T 7D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T 83 00 00 00 00 00 00 00 7D B4 20 12 +R 00 00 01 00 02 04 05 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 4C 00 2B 0B 1D 00 +T 8F 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 1D 00 02 0A 05 00 +T 96 00 00 00 21 01 00 18 11 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T A3 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0F 00 02 0A 05 00 +T AA 00 00 00 00 00 +R 00 00 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1E 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 CD 00 00 00 00 FE FF C5 DD 6E 02 +R 00 00 01 00 02 05 3E 00 +T B8 00 00 00 DD 66 03 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 3C 00 +T C0 00 00 00 00 00 00 00 E5 11 00 00 00 00 3E +R 00 00 01 00 02 04 3C 00 02 0A 11 00 +T C7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 5C 00 02 09 5C 00 +T CC 00 00 00 00 00 00 00 F1 F1 F1 F1 01 02 80 +R 00 00 01 00 02 04 05 00 +T D5 00 00 00 DD 6E 02 DD 66 03 3E 80 AC 67 ED +R 00 00 01 00 +T E0 00 00 00 42 D2 6A 01 00 00 +R 00 00 01 00 00 06 01 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 DD 36 FE 00 00 00 00 DD 36 FF +R 00 00 01 00 0B 07 34 00 +T EB 00 00 00 00 00 00 00 +R 00 00 01 00 8B 04 34 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 01 C0 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 02 05 34 00 +T F5 00 00 00 A7 ED 42 30 70 +R 00 00 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 DD 6E FE DD 66 FF 7E 23 B6 23 B6 +R 00 00 01 00 +T 05 01 00 00 23 B6 28 52 +R 00 00 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 21 08 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 14 01 00 00 23 56 23 4E 23 46 C5 D5 21 04 00 +R 00 00 01 00 +T 1F 01 00 00 DD 4E FE DD 46 FF 09 5E 23 56 23 +R 00 00 01 00 +T 2A 01 00 00 4E 23 46 C5 D5 DD 6E FE DD 66 FF +R 00 00 01 00 +T 35 01 00 00 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 3D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 42 01 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 05 00 2B 0A 04 00 +T 48 01 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 04 00 2B 0B 48 00 +T 4E 01 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 48 00 02 0A 05 00 +T 55 01 00 00 21 0E 00 39 F9 EB +R 00 00 01 00 +T 5B 01 00 00 +R 00 00 01 00 +T 5B 01 00 00 DD 7E FE C6 0C DD 77 FE 30 03 DD +R 00 00 01 00 +T 66 01 00 00 34 FF +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 18 82 +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 1E 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 CD 00 00 00 00 FE FF 03 03 0A 5F +R 00 00 01 00 02 05 3E 00 +T 79 01 00 00 03 0A 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 51 00 +T 7F 01 00 00 00 00 00 00 CD 00 00 00 00 EB 3E +R 00 00 01 00 02 04 51 00 02 09 05 00 +T 86 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 63 00 02 09 63 00 +T 8B 01 00 00 00 00 00 00 DD 75 FE DD 74 FF EB +R 00 00 01 00 02 04 05 00 +T 94 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T 9A 01 00 00 00 00 00 00 7D B4 20 12 +R 00 00 01 00 02 04 05 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 4C 00 2B 0B 1D 00 +T A6 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 1D 00 02 0A 05 00 +T AD 01 00 00 21 01 00 18 2B +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T BD 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 43 00 +T C2 01 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 43 00 02 09 05 00 +T C9 01 00 00 9E 00 DD 5E FE DD 56 FF 19 D1 73 +R 00 00 01 00 +T D4 01 00 00 23 72 23 71 23 70 21 00 00 +R 00 00 01 00 +T DD 01 00 00 +R 00 00 01 00 +T DD 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1E 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 CD 00 00 00 00 FE FF 03 03 0A 5F +R 00 00 01 00 02 05 3E 00 +T E9 01 00 00 03 0A 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 51 00 +T EF 01 00 00 00 00 00 00 CD 00 00 00 00 EB 3E +R 00 00 01 00 02 04 51 00 02 09 05 00 +T F6 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 63 00 02 09 63 00 +T FB 01 00 00 00 00 00 00 DD 75 FE DD 74 FF EB +R 00 00 01 00 02 04 05 00 +T 04 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0B 00 02 0A 0B 00 +T 0A 02 00 00 00 00 00 00 7D A4 3C 20 12 +R 00 00 01 00 02 04 05 00 +T 11 02 00 00 +R 00 00 01 00 +T 11 02 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 4C 00 2B 0B 1D 00 +T 17 02 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 1D 00 02 0A 05 00 +T 1E 02 00 00 21 01 00 18 03 +R 00 00 01 00 +T 23 02 00 00 +R 00 00 01 00 +T 23 02 00 00 21 00 00 +R 00 00 01 00 +T 26 02 00 00 +R 00 00 01 00 +T 26 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1E 00 +T 29 02 00 00 +R 00 00 01 00 +T 29 02 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 36 00 +T 2F 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 19 00 02 0A 19 00 +T 35 02 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 2B 00 2B 0A 5B 00 +T 3B 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 5B 00 02 09 05 00 +T 42 02 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 1E 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 36 00 +T 4D 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 1B 00 02 0A 1B 00 +T 53 02 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 31 00 2B 0A 5B 00 +T 59 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 5B 00 02 09 05 00 +T 60 02 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 1E 00 +T 65 02 00 00 +R 00 00 01 00 +T 65 02 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 36 00 +T 6B 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 13 00 02 0A 13 00 +T 71 02 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 58 00 2B 0A 54 00 +T 77 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 54 00 02 09 05 00 +T 7E 02 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 1E 00 +T 83 02 00 00 +R 00 00 01 00 +T 83 02 00 00 CD 00 00 00 00 FA FF AF DD 77 FC +R 00 00 01 00 02 05 3E 00 +T 8C 02 00 00 DD 77 FD DD 77 FE DD 77 FF 11 +R 00 00 01 00 +T 96 02 00 00 02 80 DD 6E 02 DD 66 03 3E 80 AC +R 00 00 01 00 +T A1 02 00 00 67 ED 52 30 09 +R 00 00 01 00 +T A6 02 00 00 +R 00 00 01 00 +T A6 02 00 00 CD 51 04 00 00 21 00 00 C3 +R 00 00 01 00 00 05 01 00 +T AD 02 00 00 75 03 00 00 +R 00 00 01 00 00 04 01 00 +T AF 02 00 00 +R 00 00 01 00 +T AF 02 00 00 DD 4E 02 DD 46 03 21 02 00 CD +R 00 00 01 00 +T B9 02 00 00 00 00 00 00 30 21 +R 00 00 01 00 02 04 46 00 +T BD 02 00 00 +R 00 00 01 00 +T BD 02 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T C8 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 43 00 +T CD 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 43 00 02 09 05 00 +T D4 02 00 00 FC DD 74 FD DD 71 FE DD 70 FF +R 00 00 01 00 +T DE 02 00 00 +R 00 00 01 00 +T DE 02 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T E9 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 51 00 02 0A 51 00 +T EF 02 00 00 00 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 2B 0A 63 00 +T F5 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 63 00 02 09 05 00 +T FC 02 00 00 FA DD 74 FB EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 12 00 +T 04 03 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 12 00 02 09 05 00 +T 0B 03 00 00 20 12 +R 00 00 01 00 +T 0D 03 00 00 +R 00 00 01 00 +T 0D 03 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 4C 00 2B 0B 1D 00 +T 13 03 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 1D 00 02 0A 05 00 +T 1A 03 00 00 21 01 00 18 56 +R 00 00 01 00 +T 1F 03 00 00 +R 00 00 01 00 +T 1F 03 00 00 DD 7E FC DD B6 FD DD B6 FE DD B6 +R 00 00 01 00 +T 2A 03 00 00 FF 20 13 +R 00 00 01 00 +T 2D 03 00 00 +R 00 00 01 00 +T 2D 03 00 00 DD 5E FA DD 56 FB 3E 69 06 00 00 +R 00 00 01 00 29 0B 01 00 +T 35 03 00 00 21 69 06 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 01 00 02 0A 05 00 +T 3C 03 00 00 00 00 18 35 +R 00 00 01 00 +T 40 03 00 00 +R 00 00 01 00 +T 40 03 00 00 21 00 00 E5 21 00 00 E5 DD 6E FA +R 00 00 01 00 +T 4B 03 00 00 DD 66 FB E5 DD 6E FC DD 66 FD E5 +R 00 00 01 00 +T 56 03 00 00 0E 78 03 00 00 C5 21 78 03 00 00 +R 00 00 01 00 29 05 01 00 00 0B 01 00 +T 5C 03 00 00 E5 01 00 02 11 00 00 00 00 3E +R 00 00 01 00 00 09 02 00 +T 64 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 60 00 02 09 60 00 +T 69 03 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 05 00 +T 72 03 00 00 21 00 00 +R 00 00 01 00 +T 75 03 00 00 +R 00 00 01 00 +T 75 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1E 00 +T 78 03 00 00 +R 00 00 01 00 +T 78 03 00 00 CD 00 00 00 00 FC FF DD 71 FC DD +R 00 00 01 00 02 05 3E 00 +T 81 03 00 00 70 FD 21 01 00 E5 01 0F 00 ED 5B +R 00 00 01 00 +T 8C 03 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 5D 00 2B 09 17 00 +T 91 03 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 17 00 02 09 05 00 +T 98 03 00 00 75 FE DD 74 FF 7D B4 20 14 +R 00 00 01 00 +T A1 03 00 00 +R 00 00 01 00 +T A1 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 02 00 02 0B 02 00 +T A7 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T AD 03 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 05 00 +T B3 03 00 00 4E 04 00 00 +R 00 00 01 00 00 04 01 00 +T B5 03 00 00 +R 00 00 01 00 +T B5 03 00 00 21 20 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T C0 03 00 00 7F 0C 00 00 23 36 7F 0C 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T C5 03 00 00 36 7F 0C 00 00 +R 00 00 01 00 29 05 01 00 +T C7 03 00 00 +R 00 00 01 00 +T C7 03 00 00 21 20 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T D2 03 00 00 23 46 23 7E 69 60 0E 7F 0C 00 00 +R 00 00 01 00 29 0B 01 00 +T DA 03 00 00 11 7F 0C 00 00 B9 20 52 ED 52 20 +R 00 00 01 00 00 05 01 00 +T E3 03 00 00 4E +R 00 00 01 00 +T E4 03 00 00 +R 00 00 01 00 +T E4 03 00 00 21 1B 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 18 00 +T EC 03 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 18 00 2B 0A 48 00 +T F2 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T F9 03 00 00 F1 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 01 04 00 00 69 06 00 00 21 69 06 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 06 04 00 00 00 00 00 00 21 0E 00 DD 4E FC DD +R 00 00 01 00 02 04 05 00 +T 0F 04 00 00 46 FD 09 46 05 28 18 DD 5E 02 DD +R 00 00 01 00 +T 1A 04 00 00 56 03 7A 07 9F 4F 41 3E +R 00 00 01 00 +T 22 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T 27 04 00 00 00 00 00 00 7D A4 3C 20 02 +R 00 00 01 00 02 04 05 00 +T 2E 04 00 00 +R 00 00 01 00 +T 2E 04 00 00 +R 00 00 01 00 +T 2E 04 00 00 +R 00 00 01 00 +T 2E 04 00 00 18 02 +R 00 00 01 00 +T 30 04 00 00 +R 00 00 01 00 +T 30 04 00 00 18 95 +R 00 00 01 00 +T 32 04 00 00 +R 00 00 01 00 +T 32 04 00 00 01 01 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 61 00 +T 3A 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 61 00 02 0A 05 00 +T 41 04 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 39 00 +T 49 04 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 39 00 02 09 05 00 +T 4E 04 00 00 +R 00 00 01 00 +T 4E 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1E 00 +T 51 04 00 00 +R 00 00 01 00 +T 51 04 00 00 CD 00 00 00 00 FA FF DD 36 FA 01 +R 00 00 01 00 02 05 3E 00 +T 5A 04 00 00 DD 36 FB 00 DD 36 FE 01 DD 36 FF +R 00 00 01 00 +T 65 04 00 00 00 +R 00 00 01 00 +T 66 04 00 00 +R 00 00 01 00 +T 66 04 00 00 DD 4E FA DD 46 FB 21 0F 00 CD +R 00 00 01 00 +T 70 04 00 00 00 00 00 00 DA 1E 05 00 00 +R 00 00 01 00 02 04 46 00 00 09 01 00 +T 75 04 00 00 +R 00 00 01 00 +T 75 04 00 00 01 06 00 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 7F 04 00 00 00 00 00 00 21 00 00 00 00 19 7E +R 00 00 01 00 02 04 3F 00 02 09 62 00 +T 86 04 00 00 23 B6 20 03 +R 00 00 01 00 +T 8A 04 00 00 +R 00 00 01 00 +T 8A 04 00 00 C3 13 05 00 00 +R 00 00 01 00 00 05 01 00 +T 8D 04 00 00 +R 00 00 01 00 +T 8D 04 00 00 01 06 00 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 97 04 00 00 00 00 00 00 21 02 00 00 00 19 4E +R 00 00 01 00 02 04 3F 00 02 09 62 00 +T 9E 04 00 00 23 46 23 5E 23 56 D5 C5 01 06 00 +R 00 00 01 00 +T A9 04 00 00 DD 5E FA DD 56 FB CD 00 00 00 00 +R 00 00 01 00 02 0B 3F 00 +T B2 04 00 00 21 00 00 00 00 19 4E 23 46 C5 DD +R 00 00 01 00 02 05 62 00 +T BB 04 00 00 6E FA DD 66 FB E5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 40 00 +T C3 04 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 40 00 +T C9 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 48 00 02 09 48 00 +T CE 04 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 05 00 +T D7 04 00 00 DD 5E FE DD 56 FF 13 DD 73 FE DD +R 00 00 01 00 +T E2 04 00 00 72 FF 1B 01 02 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 47 00 +T EB 04 00 00 7B B2 28 13 +R 00 00 01 00 +T EF 04 00 00 +R 00 00 01 00 +T EF 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 49 00 02 0B 49 00 +T F5 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T FB 04 00 00 CD 00 00 00 00 F1 F1 18 11 +R 00 00 01 00 02 05 05 00 +T 02 05 00 00 +R 00 00 01 00 +T 02 05 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 10 00 02 0B 10 00 +T 08 05 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T 0E 05 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 05 00 +T 13 05 00 00 +R 00 00 01 00 +T 13 05 00 00 +R 00 00 01 00 +T 13 05 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 1B 05 00 00 +R 00 00 01 00 +T 1B 05 00 00 C3 66 04 00 00 +R 00 00 01 00 00 05 01 00 +T 1E 05 00 00 +R 00 00 01 00 +T 1E 05 00 00 01 02 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 28 05 00 00 00 00 00 00 7B B2 20 11 +R 00 00 01 00 02 04 47 00 +T 2E 05 00 00 +R 00 00 01 00 +T 2E 05 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 10 00 02 0B 10 00 +T 34 05 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T 3A 05 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 05 00 +T 3F 05 00 00 +R 00 00 01 00 +T 3F 05 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 20 00 02 0B 20 00 +T 45 05 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T 4B 05 00 00 CD 00 00 00 00 F1 F1 2A +R 00 00 01 00 02 05 05 00 +T 51 05 00 00 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 15 00 +T 59 05 00 00 +R 00 00 01 00 +T 59 05 00 00 DD 7E FC DD B6 FD CA 63 06 00 00 +R 00 00 01 00 00 0B 01 00 +T 62 05 00 00 +R 00 00 01 00 +T 62 05 00 00 21 7C 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 6D 05 00 00 23 56 23 4E 23 46 C5 D5 21 78 00 +R 00 00 01 00 +T 78 05 00 00 DD 4E FC DD 46 FD 09 5E 23 56 23 +R 00 00 01 00 +T 83 05 00 00 4E 23 46 C5 D5 DD 6E FC DD 66 FD +R 00 00 01 00 +T 8E 05 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 4A 00 +T 93 05 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 4A 00 2B 0A 48 00 +T 99 05 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T A0 05 00 00 0E 00 39 F9 EB DD 5E FC DD 56 FD +R 00 00 01 00 +T AB 05 00 00 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 33 00 +T B0 05 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 33 00 02 09 05 00 +T B7 05 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 22 00 02 0A 22 00 +T BD 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 48 00 02 0A 48 00 +T C3 05 00 00 00 00 00 00 F1 F1 F1 21 08 00 DD +R 00 00 01 00 02 04 05 00 +T CC 05 00 00 4E FC DD 46 FD 09 EB 3E +R 00 00 01 00 +T D4 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 33 00 02 09 33 00 +T D9 05 00 00 00 00 00 00 E5 1E 00 00 00 00 D5 +R 00 00 01 00 02 04 05 00 2B 0A 22 00 +T DF 05 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 22 00 2B 0B 48 00 +T E5 05 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 48 00 02 0A 05 00 +T EC 05 00 00 F1 F1 21 0E 00 09 6E 26 00 29 11 +R 00 00 01 00 +T F7 05 00 00 00 00 00 00 19 5E 23 56 D5 1E +R 00 00 01 00 02 04 5A 00 +T FF 05 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 14 00 02 0A 14 00 +T 05 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 48 00 02 0A 48 00 +T 0B 06 00 00 00 00 00 00 F1 F1 F1 21 0E 00 09 +R 00 00 01 00 02 04 05 00 +T 14 06 00 00 46 05 05 20 26 21 6F 00 DD 4E FC +R 00 00 01 00 +T 1F 06 00 00 DD 46 FD 09 7E E6 02 47 23 7E E6 +R 00 00 01 00 +T 2A 06 00 00 00 B0 28 11 +R 00 00 01 00 +T 2E 06 00 00 +R 00 00 01 00 +T 2E 06 00 00 +R 00 00 01 00 +T 2E 06 00 00 +R 00 00 01 00 +T 2E 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 2E 00 02 0B 2E 00 +T 34 06 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T 3A 06 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 05 00 +T 3F 06 00 00 +R 00 00 01 00 +T 3F 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 10 00 02 0B 10 00 +T 45 06 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T 4B 06 00 00 CD 00 00 00 00 F1 F1 DD 6E FC DD +R 00 00 01 00 02 05 05 00 +T 54 06 00 00 66 FD 46 23 66 68 DD 75 FC DD 74 +R 00 00 01 00 +T 5F 06 00 00 FD C3 59 05 00 00 +R 00 00 01 00 00 06 01 00 +T 63 06 00 00 +R 00 00 01 00 +T 63 06 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 2C 00 +T 69 06 00 00 +R 00 00 01 00 +T 69 06 00 00 CD 00 00 00 00 F6 FF DD 7E 02 DD +R 00 00 01 00 02 05 3E 00 +T 72 06 00 00 B6 03 20 03 +R 00 00 01 00 +T 76 06 00 00 +R 00 00 01 00 +T 76 06 00 00 C3 7C 0C 00 00 +R 00 00 01 00 00 05 01 00 +T 79 06 00 00 +R 00 00 01 00 +T 79 06 00 00 21 2D 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 84 06 00 00 23 46 23 5E 23 56 69 60 D5 E5 21 +R 00 00 01 00 +T 8F 06 00 00 12 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 9A 06 00 00 46 23 5E 23 56 69 60 A7 C1 ED 42 +R 00 00 01 00 +T A5 06 00 00 EB C1 ED 42 4D 44 EB DD 75 F6 DD +R 00 00 01 00 +T B0 06 00 00 74 F7 DD 71 F8 DD 70 F9 21 52 00 +R 00 00 01 00 +T BB 06 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T C6 06 00 00 5E 23 56 69 60 D5 E5 21 3F 00 DD +R 00 00 01 00 +T D1 06 00 00 4E 02 DD 46 03 09 4E 23 46 23 5E +R 00 00 01 00 +T DC 06 00 00 23 56 69 60 A7 C1 ED 42 EB C1 ED +R 00 00 01 00 +T E7 06 00 00 42 4D 44 EB DD 75 FA DD 74 FB DD +R 00 00 01 00 +T F2 06 00 00 71 FC DD 70 FD 21 0E 00 DD 4E 02 +R 00 00 01 00 +T FD 06 00 00 DD 46 03 09 5E CD 00 00 00 00 02 +R 00 00 01 00 02 0A 4D 00 +T 06 07 00 00 0A 00 0E 08 00 00 1E 07 00 00 +R 00 00 01 00 00 06 01 00 00 0A 01 00 +T 0C 07 00 00 1E 07 00 00 3B 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 10 07 00 00 66 07 00 00 66 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 14 07 00 00 9E 07 00 00 C8 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 18 07 00 00 C8 07 00 00 C8 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 1C 07 00 00 F2 07 00 00 +R 00 00 01 00 00 04 01 00 +T 1E 07 00 00 +R 00 00 01 00 +T 1E 07 00 00 AF DD 77 FA DD 77 FB DD 77 FC DD +R 00 00 01 00 +T 29 07 00 00 77 FD AF DD 77 F6 DD 77 F7 DD 77 +R 00 00 01 00 +T 34 07 00 00 F8 DD 77 F9 C3 0E 08 00 00 +R 00 00 01 00 00 09 01 00 +T 3B 07 00 00 +R 00 00 01 00 +T 3B 07 00 00 DD 6E FA DD 66 FB DD 4E FC DD 46 +R 00 00 01 00 +T 46 07 00 00 FD CD 00 00 00 00 DD 75 FA DD 74 +R 00 00 01 00 02 06 07 00 +T 4F 07 00 00 FB DD 71 FC DD 70 FD AF DD 77 F6 +R 00 00 01 00 +T 5A 07 00 00 DD 77 F7 DD 77 F8 DD 77 F9 C3 +R 00 00 01 00 +T 64 07 00 00 0E 08 00 00 +R 00 00 01 00 00 04 01 00 +T 66 07 00 00 +R 00 00 01 00 +T 66 07 00 00 DD 6E F6 DD 66 F7 DD 4E F8 DD 46 +R 00 00 01 00 +T 71 07 00 00 F9 CD 00 00 00 00 DD 75 F6 DD 74 +R 00 00 01 00 02 06 07 00 +T 7A 07 00 00 F7 DD 71 F8 DD 70 F9 DD 6E FA DD +R 00 00 01 00 +T 85 07 00 00 66 FB DD 4E FC DD 46 FD CD +R 00 00 01 00 +T 8E 07 00 00 00 00 00 00 DD 75 FA DD 74 FB DD +R 00 00 01 00 02 04 07 00 +T 97 07 00 00 71 FC DD 70 FD 18 70 +R 00 00 01 00 +T 9E 07 00 00 +R 00 00 01 00 +T 9E 07 00 00 21 00 00 39 01 00 00 11 02 00 CD +R 00 00 01 00 +T A9 07 00 00 00 00 00 00 DD 6E FA DD 66 FB DD +R 00 00 01 00 02 04 5E 00 +T B2 07 00 00 4E FC DD 46 FD CD 00 00 00 00 DD +R 00 00 01 00 02 0A 07 00 +T BB 07 00 00 75 FA DD 74 FB DD 71 FC DD 70 FD +R 00 00 01 00 +T C6 07 00 00 18 46 +R 00 00 01 00 +T C8 07 00 00 +R 00 00 01 00 +T C8 07 00 00 DD 6E F6 DD 66 F7 DD 4E F8 DD 46 +R 00 00 01 00 +T D3 07 00 00 F9 CD 00 00 00 00 DD 75 F6 DD 74 +R 00 00 01 00 02 06 07 00 +T DC 07 00 00 F7 DD 71 F8 DD 70 F9 21 04 00 39 +R 00 00 01 00 +T E7 07 00 00 01 00 00 11 02 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 5E 00 +T F0 07 00 00 18 1C +R 00 00 01 00 +T F2 07 00 00 +R 00 00 01 00 +T F2 07 00 00 21 00 00 39 01 00 00 11 02 00 CD +R 00 00 01 00 +T FD 07 00 00 00 00 00 00 21 04 00 39 01 00 00 +R 00 00 01 00 02 04 5E 00 +T 06 08 00 00 11 02 00 CD 00 00 00 00 18 00 +R 00 00 01 00 02 08 5E 00 +T 0E 08 00 00 +R 00 00 01 00 +T 0E 08 00 00 DD 5E 02 DD 56 03 13 13 3E +R 00 00 01 00 +T 17 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 33 00 02 09 33 00 +T 1C 08 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 05 00 2B 0A 03 00 +T 22 08 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 03 00 2B 0B 48 00 +T 28 08 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 48 00 02 0A 05 00 +T 2F 08 00 00 F1 F1 21 08 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 3A 08 00 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 33 00 +T 3F 08 00 00 00 00 00 00 CD 00 00 00 00 E5 1E +R 00 00 01 00 02 04 33 00 02 09 05 00 +T 46 08 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 23 00 02 0A 23 00 +T 4C 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 48 00 02 0A 48 00 +T 52 08 00 00 00 00 00 00 F1 F1 F1 21 0E 00 09 +R 00 00 01 00 02 04 05 00 +T 5B 08 00 00 6E 26 00 29 11 00 00 00 00 19 5E +R 00 00 01 00 02 09 5A 00 +T 64 08 00 00 23 56 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 08 53 00 +T 6B 08 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 53 00 2B 0A 48 00 +T 71 08 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T 78 08 00 00 F1 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 06 0E 00 +T 7D 08 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 2B 0A 48 00 +T 83 08 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T 8A 08 00 00 DD 6E F8 DD 66 F9 E5 DD 6E F6 DD +R 00 00 01 00 +T 95 08 00 00 66 F7 E5 21 BC 00 09 5E 23 56 23 +R 00 00 01 00 +T A0 08 00 00 4E 23 46 C5 D5 21 7C 00 DD 4E 02 +R 00 00 01 00 +T AB 08 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T B6 08 00 00 C5 D5 21 5A 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T C1 08 00 00 09 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T CC 08 00 00 26 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T D7 08 00 00 56 23 4E 23 46 C5 D5 21 39 00 DD +R 00 00 01 00 +T E2 08 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T ED 08 00 00 23 46 C5 D5 21 35 00 DD 4E 02 DD +R 00 00 01 00 +T F8 08 00 00 46 03 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 03 09 00 00 D5 21 31 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 0E 09 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 18 09 00 00 16 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 23 09 00 00 56 23 4E 23 46 C5 D5 21 12 00 DD +R 00 00 01 00 +T 2E 09 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 39 09 00 00 23 46 C5 D5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 29 00 +T 41 09 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 29 00 2B 0A 48 00 +T 47 09 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T 4E 09 00 00 2C 00 39 F9 EB DD 6E FC DD 66 FD +R 00 00 01 00 +T 59 09 00 00 E5 DD 6E FA DD 66 FB E5 21 C4 00 +R 00 00 01 00 +T 64 09 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 6F 09 00 00 4E 23 46 C5 D5 21 78 00 DD 4E 02 +R 00 00 01 00 +T 7A 09 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 85 09 00 00 C5 D5 21 43 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 90 09 00 00 09 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 9B 09 00 00 56 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T A6 09 00 00 56 23 4E 23 46 C5 D5 21 3F 00 DD +R 00 00 01 00 +T B1 09 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T BC 09 00 00 23 46 C5 D5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 0A 00 +T C4 09 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 0A 48 00 +T CA 09 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T D1 09 00 00 1C 00 39 F9 EB 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 4F 00 +T D9 09 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 4F 00 2B 0B 48 00 +T DF 09 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 48 00 02 0A 05 00 +T E6 09 00 00 F1 21 B0 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T F1 09 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T FB 09 00 00 AC 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 06 0A 00 00 56 23 4E 23 46 C5 D5 21 B4 00 DD +R 00 00 01 00 +T 11 0A 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 1C 0A 00 00 23 46 C5 D5 21 72 00 DD 4E 02 DD +R 00 00 01 00 +T 27 0A 00 00 46 03 09 5E 23 56 D5 21 3D 00 09 +R 00 00 01 00 +T 32 0A 00 00 5E 23 56 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 09 50 00 +T 3A 0A 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 50 00 2B 0A 48 00 +T 40 0A 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T 47 0A 00 00 14 00 39 F9 EB 21 9E 00 09 7E 23 +R 00 00 01 00 +T 52 0A 00 00 B6 23 B6 23 B6 28 49 +R 00 00 01 00 +T 59 0A 00 00 +R 00 00 01 00 +T 59 0A 00 00 21 9E 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 64 0A 00 00 23 56 23 4E 23 46 C5 D5 21 BC 00 +R 00 00 01 00 +T 6F 0A 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T 7A 0A 00 00 5E 23 56 D5 C5 01 00 00 21 E8 03 +R 00 00 01 00 +T 85 0A 00 00 CD 00 00 00 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 05 38 00 02 0A 42 00 +T 8C 0A 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 21 00 +T 91 0A 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 21 00 2B 0A 48 00 +T 97 0A 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T 9E 0A 00 00 F1 F1 18 11 +R 00 00 01 00 +T A2 0A 00 00 +R 00 00 01 00 +T A2 0A 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1A 00 02 0B 1A 00 +T A8 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T AE 0A 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 05 00 +T B3 0A 00 00 +R 00 00 01 00 +T B3 0A 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T BE 0A 00 00 E6 04 47 23 7E E6 00 B0 28 11 +R 00 00 01 00 +T C8 0A 00 00 +R 00 00 01 00 +T C8 0A 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 4B 00 02 0B 4B 00 +T CE 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T D4 0A 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 05 00 +T D9 0A 00 00 +R 00 00 01 00 +T D9 0A 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 10 00 02 0B 10 00 +T DF 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T E5 0A 00 00 CD 00 00 00 00 F1 F1 0E +R 00 00 01 00 02 05 05 00 +T EB 0A 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 52 00 02 0A 52 00 +T F1 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 48 00 02 0A 48 00 +T F7 0A 00 00 00 00 00 00 F1 F1 21 91 00 DD 4E +R 00 00 01 00 02 04 05 00 +T 00 0B 00 00 02 DD 46 03 09 7E FE 00 20 13 +R 00 00 01 00 +T 0A 0B 00 00 +R 00 00 01 00 +T 0A 0B 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0C 00 02 0B 0C 00 +T 10 0B 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T 16 0B 00 00 CD 00 00 00 00 F1 F1 18 2E +R 00 00 01 00 02 05 05 00 +T 1D 0B 00 00 +R 00 00 01 00 +T 1D 0B 00 00 FE 01 20 13 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 55 00 +T 25 0B 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 55 00 2B 0A 48 00 +T 2B 0B 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T 32 0B 00 00 18 17 +R 00 00 01 00 +T 34 0B 00 00 +R 00 00 01 00 +T 34 0B 00 00 FE 02 20 13 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 09 00 +T 3C 0B 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 2B 0A 48 00 +T 42 0B 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T 49 0B 00 00 18 00 +R 00 00 01 00 +T 4B 0B 00 00 +R 00 00 01 00 +T 4B 0B 00 00 21 A2 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 56 0B 00 00 23 56 23 4E 23 46 C5 D5 21 9E 00 +R 00 00 01 00 +T 61 0B 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 6C 0B 00 00 4E 23 46 C5 D5 21 A6 00 DD 4E 02 +R 00 00 01 00 +T 77 0B 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 82 0B 00 00 C5 D5 21 82 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 8D 0B 00 00 09 23 23 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 98 0B 00 00 D5 01 00 00 21 37 00 CD +R 00 00 01 00 +T A0 0B 00 00 00 00 00 00 C5 E5 21 82 00 DD 4E +R 00 00 01 00 02 04 38 00 +T A9 0B 00 00 02 DD 46 03 09 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2F 00 +T B1 0B 00 00 21 00 00 00 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 05 2F 00 02 0A 05 00 +T B8 0B 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 00 00 +T BD 0B 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 0A 48 00 +T C3 0B 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T CA 0B 00 00 18 00 39 F9 EB 21 6F 00 DD 4E 02 +R 00 00 01 00 +T D5 0B 00 00 DD 46 03 09 7E E6 80 57 23 7E E6 +R 00 00 01 00 +T E0 0B 00 00 00 B2 28 05 21 0D 00 00 00 18 03 +R 00 00 01 00 00 09 02 00 +T E9 0B 00 00 +R 00 00 01 00 +T E9 0B 00 00 21 18 00 00 00 +R 00 00 01 00 00 05 02 00 +T EC 0B 00 00 +R 00 00 01 00 +T EC 0B 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 0D 00 +T F1 0B 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0D 00 2B 0A 48 00 +T F7 0B 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 48 00 02 09 05 00 +T FE 0B 00 00 F1 21 80 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 09 0C 00 00 7E 23 B6 28 6E +R 00 00 01 00 +T 0E 0C 00 00 +R 00 00 01 00 +T 0E 0C 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 59 00 02 0B 59 00 +T 14 0C 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 48 00 02 0B 48 00 +T 1A 0C 00 00 CD 00 00 00 00 F1 F1 21 80 00 DD +R 00 00 01 00 02 05 05 00 +T 23 0C 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 2E 0C 00 00 75 FE DD 74 FF +R 00 00 01 00 +T 33 0C 00 00 +R 00 00 01 00 +T 33 0C 00 00 DD 7E FE DD B6 FF 28 41 +R 00 00 01 00 +T 3B 0C 00 00 +R 00 00 01 00 +T 3B 0C 00 00 21 23 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 46 0C 00 00 23 56 D5 21 06 00 09 5E 23 56 23 +R 00 00 01 00 +T 51 0C 00 00 4E 23 46 C5 D5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 41 00 +T 59 0C 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 41 00 2B 0B 48 00 +T 5F 0C 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 48 00 02 0A 05 00 +T 66 0C 00 00 F1 F1 F1 F1 DD 6E FE DD 66 FF 46 +R 00 00 01 00 +T 71 0C 00 00 23 66 68 DD 75 FE DD 74 FF 18 B7 +R 00 00 01 00 +T 7C 0C 00 00 +R 00 00 01 00 +T 7C 0C 00 00 +R 00 00 01 00 +T 7C 0C 00 00 +R 00 00 01 00 +T 7C 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1E 00 +T 7F 0C 00 00 +R 00 00 01 00 +T 7F 0C 00 00 CD 00 00 00 00 3E 03 AB B2 28 05 +R 00 00 01 00 02 05 36 00 +T 88 0C 00 00 +R 00 00 01 00 +T 88 0C 00 00 21 01 00 18 45 +R 00 00 01 00 +T 8D 0C 00 00 +R 00 00 01 00 +T 8D 0C 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 44 00 02 0B 44 00 +T 93 0C 00 00 E5 21 1B 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 37 00 +T 9C 0C 00 00 5E 23 56 D5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 27 00 +T A3 0C 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 27 00 02 09 05 00 +T AA 0C 00 00 F1 01 6B 00 21 07 00 ED 5B +R 00 00 01 00 +T B3 0C 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 37 00 +T BA 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 26 00 02 09 26 00 +T BF 0C 00 00 00 00 00 00 21 20 00 ED 4B +R 00 00 01 00 02 04 05 00 +T C6 0C 00 00 00 00 00 00 09 AF 77 23 77 23 77 +R 00 00 01 00 02 04 37 00 +T CF 0C 00 00 21 00 00 +R 00 00 01 00 +T D2 0C 00 00 +R 00 00 01 00 +T D2 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1E 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 65 70 20 74 63 70 20 73 74 61 +R 00 00 02 00 +T 0B 00 00 00 74 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 74 69 6D 65 73 74 61 6D 70 73 00 +R 00 00 02 00 +T 18 00 00 00 +R 00 00 02 00 +T 18 00 00 00 73 74 61 6E 64 61 72 64 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 01 00 00 00 00 00 AF 00 00 00 +R 00 00 04 00 4A 06 28 00 48 0A 01 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 0B 1C 00 +T 12 00 00 00 E0 01 00 00 00 00 02 00 +R 00 00 04 00 48 04 01 00 +T 19 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 25 00 4A 08 57 00 +T 1F 00 00 00 29 02 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 48 04 01 00 +T 29 00 00 00 00 00 00 00 59 00 00 00 00 00 +R 00 00 04 00 4A 04 30 00 48 08 01 00 +T 31 00 00 00 02 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 06 2D 00 4A 0A 1F 00 +T 39 00 00 00 70 01 00 00 00 00 03 00 +R 00 00 04 00 48 04 01 00 +T 40 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 08 00 4A 08 06 00 +T 46 00 00 00 83 02 00 00 00 00 00 00 +R 00 00 04 00 48 04 01 00 +T 4D 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 2A 00 4A 08 35 00 +T 53 00 00 00 65 02 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 48 04 01 00 +T 5D 00 00 00 00 00 00 00 3B 00 00 00 00 00 +R 00 00 04 00 4A 04 56 00 48 08 01 00 +T 65 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 09 3D 00 +T 6D 00 00 00 1D 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 48 04 01 00 +T 77 00 00 00 00 00 00 00 47 02 00 00 00 00 +R 00 00 04 00 4A 04 3A 00 48 08 01 00 +T 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 8A 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/internet_lib/tcphdr.rel b/src/nos/lib/internet_lib/tcphdr.rel new file mode 100644 index 00000000..7dcfbdc2 --- /dev/null +++ b/src/nos/lib/internet_lib/tcphdr.rel @@ -0,0 +1,747 @@ +XL4 +H 2 areas 11 global symbols +S _put16 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memset Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _cksum Ref00000000 +S _get32 Ref00000000 +S _get16 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pushdown Ref00000000 +S _put32 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8D6 flags 0 +S _ntohtcp Def00000481 +S _htontcp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F0 FF 79 B0 20 03 +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 C3 7E 04 00 00 +R 00 00 01 00 00 05 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 DD 36 F0 14 DD 36 F1 00 21 1D 00 +R 00 00 01 00 +T 17 00 00 00 DD 4E 02 DD 46 03 09 7E E6 80 47 +R 00 00 01 00 +T 22 00 00 00 23 7E E6 00 B0 28 0C +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 00 00 39 7E C6 04 77 30 02 23 +R 00 00 01 00 +T 34 00 00 00 34 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 21 1D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 40 00 00 00 E6 00 47 23 7E E6 02 B0 28 0C +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 21 00 00 39 7E C6 0A 77 30 02 23 +R 00 00 01 00 +T 55 00 00 00 34 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 21 1D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 61 00 00 00 E6 00 47 23 7E E6 01 B0 28 0C +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 21 00 00 39 7E C6 03 77 30 02 23 +R 00 00 01 00 +T 76 00 00 00 34 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 DD 6E F0 DD 66 F1 23 23 23 7D E6 +R 00 00 01 00 +T 82 00 00 00 FC 4F 7C E6 00 47 DD 71 F0 DD 70 +R 00 00 01 00 +T 8D 00 00 00 F1 C5 01 00 00 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 98 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T 9E 00 00 00 00 00 00 00 E1 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 01 00 +T A7 00 00 00 46 23 66 68 01 0A 00 09 46 23 66 +R 00 00 01 00 +T B2 00 00 00 68 DD 75 F2 DD 74 F3 DD 4E F0 DD +R 00 00 01 00 +T BD 00 00 00 46 F1 C5 01 00 00 EB 3E +R 00 00 01 00 +T C5 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T CA 00 00 00 00 00 00 00 F1 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 01 00 +T D3 00 00 00 4E 23 46 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T DD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T E2 00 00 00 00 00 00 00 DD 75 F2 DD 74 F3 DD +R 00 00 01 00 02 04 01 00 +T EB 00 00 00 4E 02 DD 46 03 03 03 69 60 4E 23 +R 00 00 01 00 +T F6 00 00 00 46 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T FE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 03 01 00 00 00 00 00 00 DD 75 F2 DD 74 F3 21 +R 00 00 01 00 02 04 01 00 +T 0C 01 00 00 04 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 17 01 00 00 56 23 4E 23 46 C5 D5 DD 5E F2 DD +R 00 00 01 00 +T 22 01 00 00 56 F3 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 27 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 2E 01 00 00 DD 75 F2 DD 74 F3 21 08 00 DD 4E +R 00 00 01 00 +T 39 01 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 44 01 00 00 46 C5 D5 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T 4E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 53 01 00 00 00 00 00 00 F1 F1 DD 75 F2 DD 74 +R 00 00 01 00 02 04 01 00 +T 5C 01 00 00 F3 DD 7E F0 87 87 23 DD 75 F2 DD +R 00 00 01 00 +T 67 01 00 00 74 F3 2B 77 DD 6E F2 DD 66 F3 36 +R 00 00 01 00 +T 72 01 00 00 00 21 1D 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 7D 01 00 00 7E E6 01 47 23 7E E6 00 B0 28 0A +R 00 00 01 00 +T 88 01 00 00 +R 00 00 01 00 +T 88 01 00 00 DD 6E F2 DD 66 F3 7E F6 40 77 +R 00 00 01 00 +T 92 01 00 00 +R 00 00 01 00 +T 92 01 00 00 21 1D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 9D 01 00 00 E6 02 47 23 7E E6 00 B0 28 0A +R 00 00 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 DD 6E F2 DD 66 F3 7E F6 20 77 +R 00 00 01 00 +T B1 01 00 00 +R 00 00 01 00 +T B1 01 00 00 21 1D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T BC 01 00 00 E6 04 47 23 7E E6 00 B0 28 0A +R 00 00 01 00 +T C6 01 00 00 +R 00 00 01 00 +T C6 01 00 00 DD 6E F2 DD 66 F3 7E F6 10 77 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 21 1D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T DB 01 00 00 E6 08 47 23 7E E6 00 B0 28 0A +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 DD 6E F2 DD 66 F3 7E F6 08 77 +R 00 00 01 00 +T EF 01 00 00 +R 00 00 01 00 +T EF 01 00 00 21 1D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T FA 01 00 00 E6 10 47 23 7E E6 00 B0 28 0A +R 00 00 01 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 DD 6E F2 DD 66 F3 7E F6 04 77 +R 00 00 01 00 +T 0E 02 00 00 +R 00 00 01 00 +T 0E 02 00 00 21 1D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 19 02 00 00 E6 20 47 23 7E E6 00 B0 28 0A +R 00 00 01 00 +T 23 02 00 00 +R 00 00 01 00 +T 23 02 00 00 DD 6E F2 DD 66 F3 7E F6 02 77 +R 00 00 01 00 +T 2D 02 00 00 +R 00 00 01 00 +T 2D 02 00 00 21 1D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 38 02 00 00 E6 40 47 23 7E E6 00 B0 28 0A +R 00 00 01 00 +T 42 02 00 00 +R 00 00 01 00 +T 42 02 00 00 DD 6E F2 DD 66 F3 7E F6 01 77 +R 00 00 01 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 DD 34 F2 20 03 DD 34 F3 +R 00 00 01 00 +T 54 02 00 00 +R 00 00 01 00 +T 54 02 00 00 21 0C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 5F 02 00 00 23 46 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T 68 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 6D 02 00 00 00 00 00 00 DD 75 F2 DD 74 F3 21 +R 00 00 01 00 02 04 01 00 +T 76 02 00 00 0E 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 81 02 00 00 46 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T 89 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 8E 02 00 00 00 00 00 00 DD 75 F2 DD 74 F3 21 +R 00 00 01 00 02 04 01 00 +T 97 02 00 00 10 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T A2 02 00 00 46 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T AA 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T AF 02 00 00 00 00 00 00 DD 75 F2 DD 74 F3 21 +R 00 00 01 00 02 04 01 00 +T B8 02 00 00 1D 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T C3 02 00 00 80 47 23 7E E6 00 B0 28 41 +R 00 00 01 00 +T CC 02 00 00 +R 00 00 01 00 +T CC 02 00 00 DD 6E F2 DD 66 F3 23 DD 75 F2 DD +R 00 00 01 00 +T D7 02 00 00 74 F3 2B 36 02 DD 6E F2 DD 66 F3 +R 00 00 01 00 +T E2 02 00 00 23 DD 75 F2 DD 74 F3 2B 36 04 21 +R 00 00 01 00 +T ED 02 00 00 12 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T F8 02 00 00 46 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T 00 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 05 03 00 00 00 00 00 00 DD 75 F2 DD 74 F3 +R 00 00 01 00 02 04 01 00 +T 0D 03 00 00 +R 00 00 01 00 +T 0D 03 00 00 21 1D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 18 03 00 00 E6 00 47 23 7E E6 02 B0 28 72 +R 00 00 01 00 +T 22 03 00 00 +R 00 00 01 00 +T 22 03 00 00 DD 6E F2 DD 66 F3 23 DD 75 F2 DD +R 00 00 01 00 +T 2D 03 00 00 74 F3 2B 36 08 DD 6E F2 DD 66 F3 +R 00 00 01 00 +T 38 03 00 00 23 DD 75 F2 DD 74 F3 2B 36 0A 21 +R 00 00 01 00 +T 43 03 00 00 15 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 4E 03 00 00 56 23 4E 23 46 C5 D5 DD 5E F2 DD +R 00 00 01 00 +T 59 03 00 00 56 F3 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 5E 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 65 03 00 00 DD 75 F2 DD 74 F3 21 19 00 DD 4E +R 00 00 01 00 +T 70 03 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 7B 03 00 00 56 D5 C5 DD 5E F2 DD 56 F3 3E +R 00 00 01 00 +T 85 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 8A 03 00 00 00 00 00 00 F1 F1 DD 75 F2 DD 74 +R 00 00 01 00 02 04 01 00 +T 93 03 00 00 F3 +R 00 00 01 00 +T 94 03 00 00 +R 00 00 01 00 +T 94 03 00 00 21 1D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 9F 03 00 00 E6 00 47 23 7E E6 01 B0 28 3A +R 00 00 01 00 +T A9 03 00 00 +R 00 00 01 00 +T A9 03 00 00 DD 6E F2 DD 66 F3 23 DD 75 F2 DD +R 00 00 01 00 +T B4 03 00 00 74 F3 2B 36 03 DD 6E F2 DD 66 F3 +R 00 00 01 00 +T BF 03 00 00 23 DD 75 F2 DD 74 F3 2B 36 03 21 +R 00 00 01 00 +T CA 03 00 00 14 00 DD 4E 02 DD 46 03 09 46 DD +R 00 00 01 00 +T D5 03 00 00 6E F2 DD 66 F3 23 DD 75 F2 DD 74 +R 00 00 01 00 +T E0 03 00 00 F3 2B 70 +R 00 00 01 00 +T E3 03 00 00 +R 00 00 01 00 +T E3 03 00 00 21 0E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T EE 03 00 00 23 B6 C2 7E 04 00 00 +R 00 00 01 00 00 07 01 00 +T F3 03 00 00 +R 00 00 01 00 +T F3 03 00 00 DD 4E 0C DD 46 0D DD 6E 0A DD 66 +R 00 00 01 00 +T FE 03 00 00 0B DD 75 F4 DD 74 F5 DD 71 F6 DD +R 00 00 01 00 +T 09 04 00 00 70 F7 DD 4E 10 DD 46 11 DD 6E 0E +R 00 00 01 00 +T 14 04 00 00 DD 66 0F DD 75 F8 DD 74 F9 DD 71 +R 00 00 01 00 +T 1F 04 00 00 FA DD 70 FB DD 36 FC 06 DD 6E 04 +R 00 00 01 00 +T 2A 04 00 00 DD 66 05 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 32 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 39 04 00 00 75 FD DD 74 FE DD 6E FD DD 66 FE +R 00 00 01 00 +T 44 04 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 21 +R 00 00 01 00 +T 4F 04 00 00 06 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 57 04 00 00 00 00 00 00 CD 00 00 00 00 F1 4D +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 5E 04 00 00 44 DD 6E 04 DD 66 05 56 23 66 6A +R 00 00 01 00 +T 69 04 00 00 11 0A 00 19 56 23 66 6A 11 10 00 +R 00 00 01 00 +T 74 04 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T 79 04 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 7E 04 00 00 +R 00 00 01 00 +T 7E 04 00 00 +R 00 00 01 00 +T 7E 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 81 04 00 00 +R 00 00 01 00 +T 81 04 00 00 CD 00 00 00 00 B8 FF 21 1F 00 E5 +R 00 00 01 00 02 05 0A 00 +T 8A 04 00 00 01 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 94 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 99 04 00 00 00 00 00 00 F1 21 14 00 E5 21 +R 00 00 01 00 02 04 01 00 +T A1 04 00 00 0C 00 39 4D 44 DD 5E 04 DD 56 05 +R 00 00 01 00 +T AC 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T B2 04 00 00 00 00 00 00 F1 DD 75 BA DD 74 BB +R 00 00 01 00 02 04 01 00 +T BB 04 00 00 21 0A 00 39 01 00 00 09 EB 3E +R 00 00 01 00 +T C5 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T CA 04 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 01 00 +T D3 04 00 00 C1 71 23 70 DD 6E 02 DD 66 03 23 +R 00 00 01 00 +T DE 04 00 00 23 E5 21 0C 00 39 01 02 00 09 EB +R 00 00 01 00 +T E9 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T EF 04 00 00 00 00 00 00 4D 44 E1 71 23 70 21 +R 00 00 01 00 02 04 01 00 +T F8 04 00 00 0A 00 39 01 04 00 09 EB 3E +R 00 00 01 00 +T 01 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 06 05 00 00 00 00 00 00 E5 21 04 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 0F 05 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 1A 05 00 00 70 21 0A 00 39 01 08 00 09 EB 3E +R 00 00 01 00 +T 25 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 2A 05 00 00 00 00 00 00 E5 21 08 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 33 05 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 3E 05 00 00 70 DD 7E CE E6 F0 4F CB 39 CB 39 +R 00 00 01 00 +T 49 05 00 00 06 00 DD 71 B8 DD 70 B9 DD 5E CF +R 00 00 01 00 +T 54 05 00 00 16 00 DD 73 C0 DD 72 C1 7B E6 40 +R 00 00 01 00 +T 5F 05 00 00 28 05 11 01 00 18 03 +R 00 00 01 00 +T 66 05 00 00 +R 00 00 01 00 +T 66 05 00 00 11 00 00 +R 00 00 01 00 +T 69 05 00 00 +R 00 00 01 00 +T 69 05 00 00 21 1D 00 DD 4E 02 DD 46 03 09 CB +R 00 00 01 00 +T 74 05 00 00 43 28 04 CB C6 18 02 +R 00 00 01 00 +T 7B 05 00 00 +R 00 00 01 00 +T 7B 05 00 00 CB 86 +R 00 00 01 00 +T 7D 05 00 00 +R 00 00 01 00 +T 7D 05 00 00 DD 7E C0 E6 20 28 05 11 01 00 18 +R 00 00 01 00 +T 88 05 00 00 03 +R 00 00 01 00 +T 89 05 00 00 +R 00 00 01 00 +T 89 05 00 00 11 00 00 +R 00 00 01 00 +T 8C 05 00 00 +R 00 00 01 00 +T 8C 05 00 00 21 1D 00 DD 4E 02 DD 46 03 09 CB +R 00 00 01 00 +T 97 05 00 00 43 28 04 CB CE 18 02 +R 00 00 01 00 +T 9E 05 00 00 +R 00 00 01 00 +T 9E 05 00 00 CB 8E +R 00 00 01 00 +T A0 05 00 00 +R 00 00 01 00 +T A0 05 00 00 DD 7E C0 E6 10 28 05 11 01 00 18 +R 00 00 01 00 +T AB 05 00 00 03 +R 00 00 01 00 +T AC 05 00 00 +R 00 00 01 00 +T AC 05 00 00 11 00 00 +R 00 00 01 00 +T AF 05 00 00 +R 00 00 01 00 +T AF 05 00 00 21 1D 00 DD 4E 02 DD 46 03 09 CB +R 00 00 01 00 +T BA 05 00 00 43 28 04 CB D6 18 02 +R 00 00 01 00 +T C1 05 00 00 +R 00 00 01 00 +T C1 05 00 00 CB 96 +R 00 00 01 00 +T C3 05 00 00 +R 00 00 01 00 +T C3 05 00 00 DD 7E C0 E6 08 28 05 11 01 00 18 +R 00 00 01 00 +T CE 05 00 00 03 +R 00 00 01 00 +T CF 05 00 00 +R 00 00 01 00 +T CF 05 00 00 11 00 00 +R 00 00 01 00 +T D2 05 00 00 +R 00 00 01 00 +T D2 05 00 00 21 1D 00 DD 4E 02 DD 46 03 09 CB +R 00 00 01 00 +T DD 05 00 00 43 28 04 CB DE 18 02 +R 00 00 01 00 +T E4 05 00 00 +R 00 00 01 00 +T E4 05 00 00 CB 9E +R 00 00 01 00 +T E6 05 00 00 +R 00 00 01 00 +T E6 05 00 00 DD 7E C0 E6 04 28 05 11 01 00 18 +R 00 00 01 00 +T F1 05 00 00 03 +R 00 00 01 00 +T F2 05 00 00 +R 00 00 01 00 +T F2 05 00 00 11 00 00 +R 00 00 01 00 +T F5 05 00 00 +R 00 00 01 00 +T F5 05 00 00 21 1D 00 DD 4E 02 DD 46 03 09 CB +R 00 00 01 00 +T 00 06 00 00 43 28 04 CB E6 18 02 +R 00 00 01 00 +T 07 06 00 00 +R 00 00 01 00 +T 07 06 00 00 CB A6 +R 00 00 01 00 +T 09 06 00 00 +R 00 00 01 00 +T 09 06 00 00 DD 7E C0 E6 02 28 05 11 01 00 18 +R 00 00 01 00 +T 14 06 00 00 03 +R 00 00 01 00 +T 15 06 00 00 +R 00 00 01 00 +T 15 06 00 00 11 00 00 +R 00 00 01 00 +T 18 06 00 00 +R 00 00 01 00 +T 18 06 00 00 21 1D 00 DD 4E 02 DD 46 03 09 CB +R 00 00 01 00 +T 23 06 00 00 43 28 04 CB EE 18 02 +R 00 00 01 00 +T 2A 06 00 00 +R 00 00 01 00 +T 2A 06 00 00 CB AE +R 00 00 01 00 +T 2C 06 00 00 +R 00 00 01 00 +T 2C 06 00 00 DD 7E C0 E6 01 28 05 11 01 00 18 +R 00 00 01 00 +T 37 06 00 00 03 +R 00 00 01 00 +T 38 06 00 00 +R 00 00 01 00 +T 38 06 00 00 11 00 00 +R 00 00 01 00 +T 3B 06 00 00 +R 00 00 01 00 +T 3B 06 00 00 21 1D 00 DD 4E 02 DD 46 03 09 CB +R 00 00 01 00 +T 46 06 00 00 43 28 04 CB F6 18 02 +R 00 00 01 00 +T 4D 06 00 00 +R 00 00 01 00 +T 4D 06 00 00 CB B6 +R 00 00 01 00 +T 4F 06 00 00 +R 00 00 01 00 +T 4F 06 00 00 21 0C 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 5A 06 00 00 21 0C 00 39 11 0E 00 19 EB 3E +R 00 00 01 00 +T 64 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 69 06 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T 71 06 00 00 0E 00 09 E5 21 0C 00 39 11 10 00 +R 00 00 01 00 +T 7C 06 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 81 06 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 88 06 00 00 73 23 72 21 10 00 09 E5 21 0C 00 +R 00 00 01 00 +T 93 06 00 00 39 01 12 00 09 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 9B 06 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T A2 06 00 00 44 E1 71 23 70 21 EC FF DD 4E B8 +R 00 00 01 00 +T AD 06 00 00 DD 46 B9 09 DD 75 BC DD 74 BD 01 +R 00 00 01 00 +T B8 06 00 00 14 80 DD 6E BA DD 66 BB 3E 80 AC +R 00 00 01 00 +T C3 06 00 00 67 ED 42 38 11 01 14 80 DD 6E B8 +R 00 00 01 00 +T CE 06 00 00 DD 66 B9 3E 80 AC 67 ED 42 30 06 +R 00 00 01 00 +T D9 06 00 00 +R 00 00 01 00 +T D9 06 00 00 +R 00 00 01 00 +T D9 06 00 00 +R 00 00 01 00 +T D9 06 00 00 21 FF FF C3 D3 08 00 00 +R 00 00 01 00 00 08 01 00 +T DF 06 00 00 +R 00 00 01 00 +T DF 06 00 00 DD 7E BC DD B6 BD 20 09 +R 00 00 01 00 +T E7 06 00 00 +R 00 00 01 00 +T E7 06 00 00 DD 6E B8 DD 66 B9 C3 D3 08 00 00 +R 00 00 01 00 00 0B 01 00 +T F0 06 00 00 +R 00 00 01 00 +T F0 06 00 00 DD 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T FA 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T FF 06 00 00 00 00 00 00 DD 4E BC DD 46 BD A7 +R 00 00 01 00 02 04 01 00 +T 08 07 00 00 ED 42 30 06 +R 00 00 01 00 +T 0C 07 00 00 +R 00 00 01 00 +T 0C 07 00 00 21 FF FF C3 D3 08 00 00 +R 00 00 01 00 00 08 01 00 +T 12 07 00 00 +R 00 00 01 00 +T 12 07 00 00 DD 6E BC DD 66 BD E5 21 22 00 39 +R 00 00 01 00 +T 1D 07 00 00 4D 44 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 26 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 2B 07 00 00 00 00 00 00 F1 21 20 00 39 DD 75 +R 00 00 01 00 02 04 01 00 +T 34 07 00 00 D6 DD 74 D7 DD 6E BC DD 66 BD DD +R 00 00 01 00 +T 3F 07 00 00 75 BA DD 74 BB +R 00 00 01 00 +T 44 07 00 00 +R 00 00 01 00 +T 44 07 00 00 DD 4E BA DD 46 BB 21 00 00 CD +R 00 00 01 00 +T 4E 07 00 00 00 00 00 00 D2 CD 08 00 00 +R 00 00 01 00 02 04 0B 00 00 09 01 00 +T 53 07 00 00 +R 00 00 01 00 +T 53 07 00 00 DD 6E D6 DD 66 D7 23 DD 75 D6 DD +R 00 00 01 00 +T 5E 07 00 00 74 D7 2B 4E 06 00 DD 71 BE DD 70 +R 00 00 01 00 +T 69 07 00 00 BF DD 6E BA DD 66 BB 2B DD 75 BA +R 00 00 01 00 +T 74 07 00 00 DD 74 BB 79 B0 20 09 +R 00 00 01 00 +T 7B 07 00 00 +R 00 00 01 00 +T 7B 07 00 00 DD 6E B8 DD 66 B9 C3 D3 08 00 00 +R 00 00 01 00 00 0B 01 00 +T 84 07 00 00 +R 00 00 01 00 +T 84 07 00 00 3E 01 A9 B0 20 02 18 B8 +R 00 00 01 00 +T 8C 07 00 00 +R 00 00 01 00 +T 8C 07 00 00 DD 6E D6 DD 66 D7 23 DD 75 D6 DD +R 00 00 01 00 +T 97 07 00 00 74 D7 2B 4E 06 00 DD 71 BC DD 70 +R 00 00 01 00 +T A2 07 00 00 BD DD 4E BE DD 46 BF 3E 02 A9 B0 +R 00 00 01 00 +T AD 07 00 00 20 38 +R 00 00 01 00 +T AF 07 00 00 +R 00 00 01 00 +T AF 07 00 00 3E 04 DD AE BC DD B6 BD 20 2B +R 00 00 01 00 +T B9 07 00 00 +R 00 00 01 00 +T B9 07 00 00 21 12 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T C4 07 00 00 DD 5E D6 DD 56 D7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T CC 07 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T D3 07 00 00 E1 73 23 72 21 1D 00 09 7E F6 80 +R 00 00 01 00 +T DE 07 00 00 77 23 7E F6 00 77 +R 00 00 01 00 +T E4 07 00 00 +R 00 00 01 00 +T E4 07 00 00 C3 86 08 00 00 +R 00 00 01 00 00 05 01 00 +T E7 07 00 00 +R 00 00 01 00 +T E7 07 00 00 3E 03 A9 B0 20 2D 3E 03 DD AE BC +R 00 00 01 00 +T F2 07 00 00 DD B6 BD 20 21 +R 00 00 01 00 +T F7 07 00 00 +R 00 00 01 00 +T F7 07 00 00 21 14 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 02 08 00 00 DD 6E D6 DD 66 D7 56 E1 72 21 +R 00 00 01 00 +T 0C 08 00 00 1D 00 09 7E F6 00 77 23 7E F6 01 +R 00 00 01 00 +T 17 08 00 00 77 +R 00 00 01 00 +T 18 08 00 00 +R 00 00 01 00 +T 18 08 00 00 18 6C +R 00 00 01 00 +T 1A 08 00 00 +R 00 00 01 00 +T 1A 08 00 00 3E 08 A9 B0 20 66 3E 0A DD AE BC +R 00 00 01 00 +T 25 08 00 00 DD B6 BD 20 5A +R 00 00 01 00 +T 2A 08 00 00 +R 00 00 01 00 +T 2A 08 00 00 DD 5E D6 DD 56 D7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 32 08 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 08 00 02 0A 01 00 +T 39 08 00 00 21 15 00 DD 5E 02 DD 56 03 19 D1 +R 00 00 01 00 +T 44 08 00 00 73 23 72 23 71 23 70 21 04 00 DD +R 00 00 01 00 +T 4F 08 00 00 4E D6 DD 46 D7 09 EB 3E +R 00 00 01 00 +T 57 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 5C 08 00 00 00 00 00 00 E5 21 19 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 65 08 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 70 08 00 00 70 21 1D 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 7B 08 00 00 7E F6 00 77 23 7E F6 02 77 +R 00 00 01 00 +T 84 08 00 00 +R 00 00 01 00 +T 84 08 00 00 18 00 +R 00 00 01 00 +T 86 08 00 00 +R 00 00 01 00 +T 86 08 00 00 01 02 80 DD 6E BC DD 66 BD 3E 80 +R 00 00 01 00 +T 91 08 00 00 AC 67 ED 42 30 05 21 02 00 18 06 +R 00 00 01 00 +T 9C 08 00 00 +R 00 00 01 00 +T 9C 08 00 00 DD 6E BC DD 66 BD +R 00 00 01 00 +T A2 08 00 00 +R 00 00 01 00 +T A2 08 00 00 DD 75 BC DD 74 BD 21 02 00 39 7E +R 00 00 01 00 +T AD 08 00 00 DD 96 BC 77 23 7E DD 9E BD 77 DD +R 00 00 01 00 +T B8 08 00 00 4E BC DD 46 BD 0B 0B 21 1E 00 39 +R 00 00 01 00 +T C3 08 00 00 7E 81 77 23 7E 88 77 C3 +R 00 00 01 00 +T CB 08 00 00 44 07 00 00 +R 00 00 01 00 00 04 01 00 +T CD 08 00 00 +R 00 00 01 00 +T CD 08 00 00 DD 6E B8 DD 66 B9 +R 00 00 01 00 +T D3 08 00 00 +R 00 00 01 00 +T D3 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/internet_lib/tcpout.rel b/src/nos/lib/internet_lib/tcpout.rel new file mode 100644 index 00000000..f2ea5c84 --- /dev/null +++ b/src/nos/lib/internet_lib/tcpout.rel @@ -0,0 +1,794 @@ +XL4 +H 2 areas 1E global symbols +S _htontcp Ref00000000 +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _seq_gt Ref00000000 +S ?L_DEC_L03 Ref00000000 +S _memset Ref00000000 +S _set_timer Ref00000000 +S _backoff Ref00000000 +S _len_p Ref00000000 +S ?L_INC_L03 Ref00000000 +S _Tcp_tstamps Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Tcp_mss Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _ip_send Ref00000000 +S _min_uint Ref00000000 +S ?L_MUL_L03 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _msclock Ref00000000 +S _start_timer Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S _Tcp_syndata Ref00000000 +S _extract Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _Tcp_mib Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A24 flags 0 +S _tcp_output Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 CA FF DD 7E 02 DD +R 00 00 01 00 02 05 14 00 +T 09 00 00 00 B6 03 20 03 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 C3 21 0A 00 00 +R 00 00 01 00 00 05 01 00 +T 10 00 00 00 +R 00 00 01 00 +T 10 00 00 00 21 0E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 1B 00 00 00 FE 01 38 07 FE 03 30 03 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 C3 21 0A 00 00 +R 00 00 01 00 00 05 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 21 1F 00 E5 01 00 00 21 04 00 39 +R 00 00 01 00 +T 31 00 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 36 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 3D 00 00 00 12 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 48 00 00 00 46 23 5E 23 56 69 60 D5 E5 21 +R 00 00 01 00 +T 52 00 00 00 1A 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 5D 00 00 00 46 23 5E 23 56 69 60 A7 C1 ED 42 +R 00 00 01 00 +T 68 00 00 00 EB C1 ED 42 4D 44 EB DD 75 F3 DD +R 00 00 01 00 +T 73 00 00 00 74 F4 DD 71 F5 DD 70 F6 21 35 00 +R 00 00 01 00 +T 7E 00 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 89 00 00 00 4E 23 46 C5 D5 21 26 00 DD 4E 02 +R 00 00 01 00 +T 94 00 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 9F 00 00 00 EB CD 00 00 00 00 30 14 21 26 00 +R 00 00 01 00 02 06 13 00 +T A8 00 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T B3 00 00 00 4E 23 46 EB 18 12 +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 21 35 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T C4 00 00 00 23 56 23 4E 23 46 EB +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 DD 75 EF DD 74 F0 DD 71 F1 DD 70 +R 00 00 01 00 +T D6 00 00 00 F2 C5 E5 DD 4E F5 DD 46 F6 DD 6E +R 00 00 01 00 +T E1 00 00 00 F3 DD 66 F4 CD 00 00 00 00 30 15 +R 00 00 01 00 02 09 13 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 21 25 00 39 DD 4E F5 DD 46 F6 DD +R 00 00 01 00 +T F5 00 00 00 5E F3 DD 56 F4 CD 00 00 00 00 18 +R 00 00 01 00 02 0A 1B 00 +T FE 00 00 00 39 +R 00 00 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 DD 7E EF DD B6 F0 DD B6 F1 DD B6 +R 00 00 01 00 +T 0A 01 00 00 F2 20 1E DD 7E F3 DD B6 F4 DD B6 +R 00 00 01 00 +T 15 01 00 00 F5 DD B6 F6 20 10 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 AF DD 36 EF 01 DD 77 F0 DD 77 F1 +R 00 00 01 00 +T 26 01 00 00 DD 77 F2 18 0D +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 AF DD 77 EF DD 77 F0 DD 77 F1 DD +R 00 00 01 00 +T 36 01 00 00 77 F2 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 DD 6E F1 DD 66 F2 E5 DD 6E EF DD +R 00 00 01 00 +T 43 01 00 00 66 F0 E5 21 7C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 4E 01 00 00 03 09 4E 23 46 23 5E 23 56 69 60 +R 00 00 01 00 +T 59 01 00 00 A7 DD 4E F3 DD 46 F4 ED 42 EB DD +R 00 00 01 00 +T 64 01 00 00 4E F5 DD 46 F6 ED 42 4D 44 EB CD +R 00 00 01 00 +T 6F 01 00 00 00 00 00 00 30 20 DD 4E F3 DD 46 +R 00 00 01 00 02 04 13 00 +T 78 01 00 00 F4 C5 21 7C 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 83 01 00 00 19 4E 23 46 23 5E 23 56 69 60 C1 +R 00 00 01 00 +T 8E 01 00 00 A7 ED 42 18 06 +R 00 00 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 DD 6E EF DD 66 F0 +R 00 00 01 00 +T 99 01 00 00 +R 00 00 01 00 +T 99 01 00 00 DD 75 EB DD 74 EC 21 5A 00 DD 4E +R 00 00 01 00 +T A4 01 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T AF 01 00 00 46 C5 D5 DD 6E EB DD 66 EC 01 +R 00 00 01 00 +T B9 01 00 00 00 00 CD 00 00 00 00 30 08 DD 6E +R 00 00 01 00 02 07 13 00 +T C2 01 00 00 EB DD 66 EC 18 13 +R 00 00 01 00 +T C8 01 00 00 +R 00 00 01 00 +T C8 01 00 00 21 5A 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T D3 01 00 00 23 46 23 5E 23 56 69 60 +R 00 00 01 00 +T DB 01 00 00 +R 00 00 01 00 +T DB 01 00 00 DD 75 EB DD 74 EC 21 6F 00 DD 4E +R 00 00 01 00 +T E6 01 00 00 02 DD 46 03 09 7E E6 01 47 23 7E +R 00 00 01 00 +T F1 01 00 00 E6 00 B0 C2 79 02 00 00 DD 7E F3 +R 00 00 01 00 00 08 01 00 +T FA 01 00 00 DD B6 F4 DD B6 F5 DD B6 F6 28 74 +R 00 00 01 00 +T 05 02 00 00 21 5A 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 10 02 00 00 23 46 23 5E 23 56 D5 C5 DD 6E EB +R 00 00 01 00 +T 1B 02 00 00 DD 66 EC 01 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 13 00 +T 24 02 00 00 30 53 21 0E 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 2F 02 00 00 09 7E FE 06 20 3D DD 6E EB DD 66 +R 00 00 01 00 +T 3A 02 00 00 EC 01 00 00 C5 E5 21 7C 00 DD 4E +R 00 00 01 00 +T 45 02 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 50 02 00 00 56 69 60 A7 DD 4E F3 DD 46 F4 ED +R 00 00 01 00 +T 5B 02 00 00 42 EB DD 4E F5 DD 46 F6 ED 42 EB +R 00 00 01 00 +T 66 02 00 00 C1 A7 ED 42 C1 20 05 EB ED 42 28 +R 00 00 01 00 +T 71 02 00 00 07 +R 00 00 01 00 +T 72 02 00 00 +R 00 00 01 00 +T 72 02 00 00 +R 00 00 01 00 +T 72 02 00 00 +R 00 00 01 00 +T 72 02 00 00 AF DD 77 EB DD 77 EC +R 00 00 01 00 +T 79 02 00 00 +R 00 00 01 00 +T 79 02 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 84 02 00 00 E6 10 47 23 7E E6 00 B0 20 61 2A +R 00 00 01 00 +T 8F 02 00 00 00 00 00 00 7D B4 20 5A +R 00 00 01 00 02 04 19 00 +T 95 02 00 00 +R 00 00 01 00 +T 95 02 00 00 +R 00 00 01 00 +T 95 02 00 00 +R 00 00 01 00 +T 95 02 00 00 21 2D 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T A0 02 00 00 23 56 23 4E 23 46 C5 D5 21 1A 00 +R 00 00 01 00 +T AB 02 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T B6 02 00 00 5E 23 56 69 60 C1 A7 ED 42 C1 20 +R 00 00 01 00 +T C1 02 00 00 26 EB ED 42 20 21 +R 00 00 01 00 +T C7 02 00 00 +R 00 00 01 00 +T C7 02 00 00 DD 4E EB DD 46 EC 21 01 00 A7 ED +R 00 00 01 00 +T D2 02 00 00 42 30 05 21 01 00 18 06 +R 00 00 01 00 +T DA 02 00 00 +R 00 00 01 00 +T DA 02 00 00 DD 6E EB DD 66 EC +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 DD 75 EB DD 74 EC 18 07 +R 00 00 01 00 +T E8 02 00 00 +R 00 00 01 00 +T E8 02 00 00 AF DD 77 EB DD 77 EC +R 00 00 01 00 +T EF 02 00 00 +R 00 00 01 00 +T EF 02 00 00 +R 00 00 01 00 +T EF 02 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T FA 02 00 00 E6 01 47 23 7E E6 00 B0 28 39 21 +R 00 00 01 00 +T 05 03 00 00 16 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 10 03 00 00 56 23 4E 23 46 C5 D5 21 1A 00 DD +R 00 00 01 00 +T 1B 03 00 00 4E 02 DD 46 03 09 4E 23 46 23 5E +R 00 00 01 00 +T 26 03 00 00 23 56 69 60 C1 A7 ED 42 C1 20 05 +R 00 00 01 00 +T 31 03 00 00 EB ED 42 28 07 +R 00 00 01 00 +T 36 03 00 00 +R 00 00 01 00 +T 36 03 00 00 +R 00 00 01 00 +T 36 03 00 00 +R 00 00 01 00 +T 36 03 00 00 +R 00 00 01 00 +T 36 03 00 00 AF DD 77 EB DD 77 EC +R 00 00 01 00 +T 3D 03 00 00 +R 00 00 01 00 +T 3D 03 00 00 DD 7E EB DD B6 EC 20 18 21 6F 00 +R 00 00 01 00 +T 48 03 00 00 DD 4E 02 DD 46 03 09 7E E6 01 47 +R 00 00 01 00 +T 53 03 00 00 23 7E E6 00 B0 20 03 +R 00 00 01 00 +T 5A 03 00 00 +R 00 00 01 00 +T 5A 03 00 00 +R 00 00 01 00 +T 5A 03 00 00 +R 00 00 01 00 +T 5A 03 00 00 C3 21 0A 00 00 +R 00 00 01 00 00 05 01 00 +T 5D 03 00 00 +R 00 00 01 00 +T 5D 03 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 68 03 00 00 E6 FE 77 23 7E E6 FF 77 21 06 00 +R 00 00 01 00 +T 73 03 00 00 09 56 23 66 6A DD 75 CC DD 74 CD +R 00 00 01 00 +T 7E 03 00 00 21 0C 00 09 56 23 66 6A DD 75 CE +R 00 00 01 00 +T 89 03 00 00 DD 74 CF 21 1F 00 39 7E F6 04 77 +R 00 00 01 00 +T 94 03 00 00 23 7E F6 00 77 21 6F 00 09 7E 07 +R 00 00 01 00 +T 9F 03 00 00 07 E6 01 16 00 5F CB 43 28 06 DD +R 00 00 01 00 +T AA 03 00 00 CB E9 C6 18 04 +R 00 00 01 00 +T AF 03 00 00 +R 00 00 01 00 +T AF 03 00 00 DD CB E9 86 +R 00 00 01 00 +T B3 03 00 00 +R 00 00 01 00 +T B3 03 00 00 21 0E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T BE 03 00 00 FE 03 20 0D +R 00 00 01 00 +T C2 03 00 00 +R 00 00 01 00 +T C2 03 00 00 21 1F 00 39 7E E6 FB 77 23 7E E6 +R 00 00 01 00 +T CD 03 00 00 FF 77 +R 00 00 01 00 +T CF 03 00 00 +R 00 00 01 00 +T CF 03 00 00 DD 6E EB DD 66 EC DD 75 ED DD 74 +R 00 00 01 00 +T DA 03 00 00 EE 21 6F 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T E5 03 00 00 7E E6 10 47 23 7E E6 00 B0 C2 +R 00 00 01 00 +T EF 03 00 00 8C 04 00 00 21 2D 00 DD 4E 02 DD +R 00 00 01 00 00 04 01 00 +T F8 03 00 00 46 03 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 03 04 00 00 D5 21 1A 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 0E 04 00 00 4E 23 46 23 5E 23 56 69 60 C1 A7 +R 00 00 01 00 +T 19 04 00 00 ED 42 C1 20 6E EB ED 42 20 69 +R 00 00 01 00 +T 23 04 00 00 +R 00 00 01 00 +T 23 04 00 00 +R 00 00 01 00 +T 23 04 00 00 +R 00 00 01 00 +T 23 04 00 00 21 1F 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T 2E 04 00 00 00 77 DD 6E ED DD 66 EE 2B DD 75 +R 00 00 01 00 +T 39 04 00 00 ED DD 74 EE 2A 00 00 00 00 DD 75 +R 00 00 01 00 02 09 0C 00 +T 42 04 00 00 DE DD 74 DF 21 1F 00 39 7E F6 80 +R 00 00 01 00 +T 4D 04 00 00 77 23 7E F6 00 77 DD 36 E0 00 21 +R 00 00 01 00 +T 58 04 00 00 1F 00 39 7E F6 00 77 23 7E F6 01 +R 00 00 01 00 +T 63 04 00 00 77 2A 00 00 00 00 7D B4 28 21 +R 00 00 01 00 02 06 0A 00 +T 6B 04 00 00 +R 00 00 01 00 +T 6B 04 00 00 21 1F 00 39 7E F6 00 77 23 7E F6 +R 00 00 01 00 +T 76 04 00 00 02 77 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 15 00 +T 7B 04 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 15 00 02 09 02 00 +T 82 04 00 00 E1 DD 74 E2 DD 71 E3 DD 70 E4 +R 00 00 01 00 +T 8C 04 00 00 +R 00 00 01 00 +T 8C 04 00 00 +R 00 00 01 00 +T 8C 04 00 00 DD 7E EB DD B6 EC 20 20 +R 00 00 01 00 +T 94 04 00 00 +R 00 00 01 00 +T 94 04 00 00 21 16 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 9F 04 00 00 23 56 23 4E 23 46 EB DD 75 D0 DD +R 00 00 01 00 +T AA 04 00 00 74 D1 DD 71 D2 DD 70 D3 18 1E +R 00 00 01 00 +T B4 04 00 00 +R 00 00 01 00 +T B4 04 00 00 21 1A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T BF 04 00 00 23 56 23 4E 23 46 EB DD 75 D0 DD +R 00 00 01 00 +T CA 04 00 00 74 D1 DD 71 D2 DD 70 D3 +R 00 00 01 00 +T D2 04 00 00 +R 00 00 01 00 +T D2 04 00 00 21 3F 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T DD 04 00 00 23 46 23 5E 23 56 69 60 DD 75 D4 +R 00 00 01 00 +T E8 04 00 00 DD 74 D5 DD 73 D6 DD 72 D7 E5 21 +R 00 00 01 00 +T F3 04 00 00 4A 00 DD 4E 02 DD 46 03 09 C1 D5 +R 00 00 01 00 +T FE 04 00 00 59 50 C1 73 23 72 23 71 23 70 DD +R 00 00 01 00 +T 09 05 00 00 7E E9 E6 20 47 DD 7E EA E6 00 B0 +R 00 00 01 00 +T 14 05 00 00 20 15 21 6F 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 1F 05 00 00 09 7E E6 00 47 23 7E E6 01 B0 20 +R 00 00 01 00 +T 2A 05 00 00 1A +R 00 00 01 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 21 43 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 36 05 00 00 23 56 23 4E 23 46 EB DD 75 D8 DD +R 00 00 01 00 +T 41 05 00 00 74 D9 18 20 +R 00 00 01 00 +T 45 05 00 00 +R 00 00 01 00 +T 45 05 00 00 21 49 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 50 05 00 00 21 43 00 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 5B 05 00 00 EB CD 00 00 00 00 DD 75 D8 DD 74 +R 00 00 01 00 02 06 18 00 +T 64 05 00 00 D9 +R 00 00 01 00 +T 65 05 00 00 +R 00 00 01 00 +T 65 05 00 00 21 46 00 DD 4E ED DD 46 EE 09 EB +R 00 00 01 00 +T 70 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 76 05 00 00 00 00 00 00 DD 75 CA DD 74 CB 11 +R 00 00 01 00 02 04 02 00 +T 7F 05 00 00 0A 00 19 7E C6 46 77 23 7E CE 00 +R 00 00 01 00 +T 8A 05 00 00 77 79 B0 CA 56 06 00 00 +R 00 00 01 00 00 08 01 00 +T 90 05 00 00 +R 00 00 01 00 +T 90 05 00 00 DD 4E F5 DD 46 F6 DD 6E F3 DD 66 +R 00 00 01 00 +T 9B 05 00 00 F4 DD 75 FB DD 74 FC DD 71 FD DD +R 00 00 01 00 +T A6 05 00 00 70 FE 21 6F 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T B1 05 00 00 09 7E E6 10 47 23 7E E6 00 B0 20 +R 00 00 01 00 +T BC 05 00 00 29 DD 7E F3 DD B6 F4 DD B6 F5 DD +R 00 00 01 00 +T C7 05 00 00 B6 F6 28 1B +R 00 00 01 00 +T CB 05 00 00 +R 00 00 01 00 +T CB 05 00 00 +R 00 00 01 00 +T CB 05 00 00 +R 00 00 01 00 +T CB 05 00 00 DD 6E FB DD 66 FC DD 4E FD DD 46 +R 00 00 01 00 +T D6 05 00 00 FE CD 00 00 00 00 DD 75 FB DD 74 +R 00 00 01 00 02 06 04 00 +T DF 05 00 00 FC DD 71 FD DD 70 FE +R 00 00 01 00 +T E6 05 00 00 +R 00 00 01 00 +T E6 05 00 00 21 0C 00 DD 4E CA DD 46 CB 09 E5 +R 00 00 01 00 +T F1 05 00 00 DD 5E ED DD 56 EE D5 21 0A 00 09 +R 00 00 01 00 +T FC 05 00 00 5E 23 56 D5 DD 4E FB DD 46 FC 21 +R 00 00 01 00 +T 07 06 00 00 76 00 DD 5E 02 DD 56 03 19 5E 23 +R 00 00 01 00 +T 12 06 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 18 06 00 00 CD 00 00 00 00 F1 F1 4D 44 E1 71 +R 00 00 01 00 02 05 02 00 +T 21 06 00 00 23 70 21 0C 00 DD 4E CA DD 46 CB +R 00 00 01 00 +T 2C 06 00 00 09 46 23 66 68 DD 4E ED DD 46 EE +R 00 00 01 00 +T 37 06 00 00 A7 ED 42 28 1A +R 00 00 01 00 +T 3C 06 00 00 +R 00 00 01 00 +T 3C 06 00 00 21 1F 00 39 7E F6 40 77 23 7E F6 +R 00 00 01 00 +T 47 06 00 00 00 77 DD 6E ED DD 66 EE 2B DD 75 +R 00 00 01 00 +T 52 06 00 00 ED DD 74 EE +R 00 00 01 00 +T 56 06 00 00 +R 00 00 01 00 +T 56 06 00 00 +R 00 00 01 00 +T 56 06 00 00 DD 7E ED DD B6 EE 28 4A 21 7C 00 +R 00 00 01 00 +T 61 06 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T 6C 06 00 00 5E 23 56 D5 C5 DD 6E EB DD 66 EC +R 00 00 01 00 +T 77 06 00 00 01 00 00 C5 E5 DD 6E F3 DD 66 F4 +R 00 00 01 00 +T 82 06 00 00 C1 09 EB DD 6E F5 DD 66 F6 C1 ED +R 00 00 01 00 +T 8D 06 00 00 4A EB C1 A7 ED 42 C1 20 12 EB ED +R 00 00 01 00 +T 98 06 00 00 42 20 0D +R 00 00 01 00 +T 9B 06 00 00 +R 00 00 01 00 +T 9B 06 00 00 +R 00 00 01 00 +T 9B 06 00 00 +R 00 00 01 00 +T 9B 06 00 00 21 1F 00 39 7E F6 08 77 23 7E F6 +R 00 00 01 00 +T A6 06 00 00 00 77 +R 00 00 01 00 +T A8 06 00 00 +R 00 00 01 00 +T A8 06 00 00 21 16 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T B3 06 00 00 23 56 23 4E 23 46 C5 D5 21 1A 00 +R 00 00 01 00 +T BE 06 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T C9 06 00 00 4E 23 46 EB CD 00 00 00 00 30 4C +R 00 00 01 00 02 09 13 00 +T D2 06 00 00 +R 00 00 01 00 +T D2 06 00 00 21 31 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T DD 06 00 00 DD 4E EB DD 46 EC C5 21 1A 00 DD +R 00 00 01 00 +T E8 06 00 00 5E 02 DD 56 03 19 5E 23 56 23 4E +R 00 00 01 00 +T F3 06 00 00 23 46 D5 21 16 00 DD 4E 02 DD 46 +R 00 00 01 00 +T FE 06 00 00 03 09 5E 23 56 23 4E 23 46 EB D1 +R 00 00 01 00 +T 09 07 00 00 A7 ED 52 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 10 07 00 00 00 00 00 00 C1 CD 00 00 00 00 EB +R 00 00 01 00 02 04 11 00 02 0A 02 00 +T 17 07 00 00 01 00 00 E1 CD 00 00 00 00 +R 00 00 01 00 02 09 0D 00 +T 1E 07 00 00 +R 00 00 01 00 +T 1E 07 00 00 21 1A 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 29 07 00 00 5E EB DD 56 EC 01 00 00 CD +R 00 00 01 00 +T 32 07 00 00 00 00 00 00 21 16 00 DD 4E 02 DD +R 00 00 01 00 02 04 0D 00 +T 3B 07 00 00 46 03 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 46 07 00 00 D5 21 1A 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 51 07 00 00 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 59 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 5E 07 00 00 00 00 00 00 F1 F1 7D B4 28 2A +R 00 00 01 00 02 04 02 00 +T 66 07 00 00 +R 00 00 01 00 +T 66 07 00 00 21 1A 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 71 07 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T 7B 07 00 00 16 00 DD 4E 02 DD 46 03 09 C1 D5 +R 00 00 01 00 +T 86 07 00 00 59 50 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 90 07 00 00 +R 00 00 01 00 +T 90 07 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 9B 07 00 00 E6 80 47 23 7E E6 00 B0 28 4D DD +R 00 00 01 00 +T A6 07 00 00 7E E9 E6 04 47 DD 7E EA E6 00 B0 +R 00 00 01 00 +T B1 07 00 00 28 3F +R 00 00 01 00 +T B3 07 00 00 +R 00 00 01 00 +T B3 07 00 00 +R 00 00 01 00 +T B3 07 00 00 +R 00 00 01 00 +T B3 07 00 00 21 1F 00 39 7E F6 00 77 23 7E F6 +R 00 00 01 00 +T BE 07 00 00 02 77 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 15 00 +T C3 07 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 15 00 02 09 02 00 +T CA 07 00 00 E1 DD 74 E2 DD 71 E3 DD 70 E4 21 +R 00 00 01 00 +T D5 07 00 00 4E 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T E0 07 00 00 56 23 4E 23 46 EB DD 75 E5 DD 74 +R 00 00 01 00 +T EB 07 00 00 E6 DD 71 E7 DD 70 E8 +R 00 00 01 00 +T F2 07 00 00 +R 00 00 01 00 +T F2 07 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T FD 07 00 00 23 56 23 4E 23 46 C5 D5 DD 6E 02 +R 00 00 01 00 +T 08 08 00 00 DD 66 03 23 23 4E 23 46 23 5E 23 +R 00 00 01 00 +T 13 08 00 00 56 D5 C5 21 08 00 39 4D 44 21 +R 00 00 01 00 +T 1D 08 00 00 0A 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 00 00 +T 25 08 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 2C 08 00 00 E1 E1 DD 7E EB DD B6 EC CA +R 00 00 01 00 +T 35 08 00 00 8D 09 00 00 +R 00 00 01 00 00 04 01 00 +T 37 08 00 00 +R 00 00 01 00 +T 37 08 00 00 21 A2 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 42 08 00 00 23 56 23 4E 23 46 EB 3E 02 CD +R 00 00 01 00 +T 4C 08 00 00 00 00 00 00 C5 E5 21 9E 00 DD 4E +R 00 00 01 00 02 04 0F 00 +T 55 08 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 60 08 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T 6B 08 00 00 21 72 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 76 08 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T 7B 08 00 00 00 00 00 00 CD 00 00 00 00 CD +R 00 00 01 00 02 04 07 00 02 09 02 00 +T 81 08 00 00 00 00 00 00 DD 75 F7 DD 74 F8 DD +R 00 00 01 00 02 04 12 00 +T 8A 08 00 00 71 F9 DD 70 FA 11 00 00 D5 11 +R 00 00 01 00 +T 94 08 00 00 F4 01 D5 CD 00 00 00 00 30 08 01 +R 00 00 01 00 02 08 13 00 +T 9D 08 00 00 00 00 21 F4 01 18 0C +R 00 00 01 00 +T A4 08 00 00 +R 00 00 01 00 +T A4 08 00 00 DD 4E F9 DD 46 FA DD 6E F7 DD 66 +R 00 00 01 00 +T AF 08 00 00 F8 +R 00 00 01 00 +T B0 08 00 00 +R 00 00 01 00 +T B0 08 00 00 C5 E5 21 82 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T BB 08 00 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T C0 08 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 06 00 02 09 02 00 +T C7 08 00 00 21 82 00 09 01 0F 00 09 46 05 28 +R 00 00 01 00 +T D2 08 00 00 13 +R 00 00 01 00 +T D3 08 00 00 +R 00 00 01 00 +T D3 08 00 00 21 82 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T DE 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T E4 08 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T E6 08 00 00 +R 00 00 01 00 +T E6 08 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T F1 08 00 00 E6 80 47 23 7E E6 00 B0 20 15 21 +R 00 00 01 00 +T FC 08 00 00 6F 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T 07 09 00 00 20 47 23 7E E6 00 B0 20 7D +R 00 00 01 00 +T 10 09 00 00 +R 00 00 01 00 +T 10 09 00 00 +R 00 00 01 00 +T 10 09 00 00 +R 00 00 01 00 +T 10 09 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 1B 09 00 00 F6 20 77 23 7E F6 00 77 21 92 00 +R 00 00 01 00 +T 26 09 00 00 09 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 15 00 +T 2B 09 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 15 00 02 09 02 00 +T 32 09 00 00 73 23 72 23 71 23 70 21 1A 00 DD +R 00 00 01 00 +T 3D 09 00 00 4E 02 DD 46 03 09 4E 23 46 23 5E +R 00 00 01 00 +T 48 09 00 00 23 56 69 60 E5 21 96 00 DD 4E 02 +R 00 00 01 00 +T 53 09 00 00 DD 46 03 09 C1 D5 59 50 C1 73 23 +R 00 00 01 00 +T 5E 09 00 00 72 23 71 23 70 21 12 00 DD 4E 02 +R 00 00 01 00 +T 69 09 00 00 DD 46 03 09 4E 23 46 23 5E 23 56 +R 00 00 01 00 +T 74 09 00 00 69 60 E5 21 9A 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 7F 09 00 00 03 09 C1 D5 59 50 C1 73 23 72 23 +R 00 00 01 00 +T 8A 09 00 00 71 23 70 +R 00 00 01 00 +T 8D 09 00 00 +R 00 00 01 00 +T 8D 09 00 00 +R 00 00 01 00 +T 8D 09 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 98 09 00 00 E6 04 47 23 7E E6 00 B0 28 13 +R 00 00 01 00 +T A2 09 00 00 +R 00 00 01 00 +T A2 09 00 00 2A 4A 00 00 00 ED 4B 4C 00 00 00 +R 00 00 01 00 02 05 1C 00 02 0B 1C 00 +T A9 09 00 00 CD 00 00 00 00 22 4A 00 00 00 ED +R 00 00 01 00 02 05 09 00 02 0A 1C 00 +T B0 09 00 00 43 4C 00 00 00 18 11 +R 00 00 01 00 02 05 1C 00 +T B5 09 00 00 +R 00 00 01 00 +T B5 09 00 00 2A 44 00 00 00 ED 4B 46 00 00 00 +R 00 00 01 00 02 05 1C 00 02 0B 1C 00 +T BC 09 00 00 CD 00 00 00 00 22 44 00 00 00 ED +R 00 00 01 00 02 05 09 00 02 0A 1C 00 +T C3 09 00 00 43 46 00 00 00 +R 00 00 01 00 02 05 1C 00 +T C6 09 00 00 +R 00 00 01 00 +T C6 09 00 00 0E 00 C5 21 00 00 E5 DD 5E CA DD +R 00 00 01 00 +T D1 09 00 00 56 CB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T D6 09 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 08 00 02 09 02 00 +T DD 09 00 00 06 00 39 E5 0E 00 C5 21 71 00 DD +R 00 00 01 00 +T E8 09 00 00 4E 02 DD 46 03 09 5E D5 1E 06 D5 +R 00 00 01 00 +T F3 09 00 00 21 08 00 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T FE 09 00 00 C5 D5 DD 6E 02 DD 66 03 23 23 5E +R 00 00 01 00 +T 09 0A 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T 11 0A 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 10 00 02 0A 02 00 +T 18 0A 00 00 21 12 00 39 F9 EB C3 26 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 21 0A 00 00 +R 00 00 01 00 +T 21 0A 00 00 +R 00 00 01 00 +T 21 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 diff --git a/src/nos/lib/internet_lib/tcpsock.rel b/src/nos/lib/internet_lib/tcpsock.rel new file mode 100644 index 00000000..ac8ddd8f --- /dev/null +++ b/src/nos/lib/internet_lib/tcpsock.rel @@ -0,0 +1,1157 @@ +XL4 +H 5 areas 30 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _kick_tcp Ref00000000 +S _socket Ref00000000 +S _reset_tcp Ref00000000 +S _memcpy Ref00000000 +S _st_tcp Ref00000000 +S _send_tcp Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _recv_tcp Ref00000000 +S _open_tcp Ref00000000 +S _strdupw Ref00000000 +S _locaddr Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _del_tcp Ref00000000 +S _bind Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S _ksignal Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S _mallocw Ref00000000 +S _free_p Ref00000000 +S _checkipaddr Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Tcpstates Ref00000000 +S _itop Ref00000000 +S _close_tcp Ref00000000 +S _newproc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D73 flags 0 +S _so_tcp Def00000000 +S _so_tcp_kick Def00000511 +S _so_tcp_send Def000003CB +S _start_tcp Def000009B5 +S _so_tcp_conn Def000000D8 +S _so_tcp_recv Def000002E5 +S _so_tcp_qlen Def000004B5 +S _so_tcp_stat Def0000099D +S _tcpstate Def0000096B +S _so_tcp_shut Def00000529 +S _stop_tcp Def00000CA2 +S _so_tcp_listen Def0000000F +S _so_tcp_close Def00000595 +A UDATA0 size 2 flags 0 +S _Inet_list Def00000000 +A IDATA0 size 2 flags 0 +S _Lport Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 07 00 19 36 01 +R 00 00 01 00 02 05 13 00 +T 09 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 CD 00 00 00 00 F8 FF 21 0E 00 DD +R 00 00 01 00 02 05 17 00 +T 18 00 00 00 5E 02 DD 56 03 19 7E 23 B6 20 09 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 DD 5E 02 DD 56 03 CD 25 09 00 00 +R 00 00 01 00 00 0B 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 21 0E 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 37 00 00 00 23 66 6A DD 75 F8 DD 74 F9 11 +R 00 00 01 00 +T 41 00 00 00 04 00 19 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T 4C 00 00 00 60 DD 75 FA DD 74 FB DD 73 FC DD +R 00 00 01 00 +T 57 00 00 00 72 FD DD 6E F8 DD 66 F9 23 23 46 +R 00 00 01 00 +T 62 00 00 00 23 66 68 DD 75 FE DD 74 FF 21 +R 00 00 01 00 +T 6C 00 00 00 0C 00 DD 4E 02 DD 46 03 09 E5 69 +R 00 00 01 00 +T 77 00 00 00 60 4E 23 46 C5 21 1A 00 DD 4E 02 +R 00 00 01 00 +T 82 00 00 00 DD 46 03 09 4E 06 00 C5 0E +R 00 00 01 00 +T 8B 00 00 00 39 06 00 00 C5 21 39 06 00 00 E5 +R 00 00 01 00 29 04 01 00 00 0A 01 00 +T 91 00 00 00 0E 0D 06 00 00 C5 21 0D 06 00 00 +R 00 00 01 00 29 05 01 00 00 0B 01 00 +T 97 00 00 00 E5 0E E1 05 00 00 C5 21 +R 00 00 01 00 29 06 01 00 +T 9C 00 00 00 E1 05 00 00 E5 21 00 00 E5 DD 7E +R 00 00 01 00 00 04 01 00 +T A5 00 00 00 04 DD B6 05 28 05 21 02 00 18 03 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 21 00 00 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 E5 01 00 00 21 18 00 39 5D 54 3E +R 00 00 01 00 +T BE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T C3 00 00 00 00 00 00 00 EB 21 14 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T CC 00 00 00 4D 44 E1 71 23 70 21 00 00 C3 +R 00 00 01 00 +T D6 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 08 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 CD 00 00 00 00 EC FF 21 0E 00 DD +R 00 00 01 00 02 05 17 00 +T E1 00 00 00 4E 02 DD 46 03 09 7E 23 B6 20 09 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 DD 5E 02 DD 56 03 CD 25 09 00 00 +R 00 00 01 00 00 0B 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 21 14 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 00 01 00 00 23 46 21 12 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 0B 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 1B 00 +T 12 01 00 00 00 00 00 00 CD 00 00 00 00 7D A4 +R 00 00 01 00 02 04 1B 00 02 09 00 00 +T 19 01 00 00 3C 20 0C +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 21 67 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 14 00 +T 25 01 00 00 C3 E2 02 00 00 +R 00 00 01 00 00 05 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T 33 01 00 00 75 EC DD 74 ED 21 0E 00 DD 4E 02 +R 00 00 01 00 +T 3E 01 00 00 DD 46 03 09 56 23 66 6A DD 75 FC +R 00 00 01 00 +T 49 01 00 00 DD 74 FD 21 12 00 09 46 23 66 68 +R 00 00 01 00 +T 54 01 00 00 DD 75 FE DD 74 FF 21 04 00 DD 4E +R 00 00 01 00 +T 5F 01 00 00 FC DD 46 FD 09 7E 23 B6 23 B6 23 +R 00 00 01 00 +T 6A 01 00 00 B6 20 2C +R 00 00 01 00 +T 6D 01 00 00 +R 00 00 01 00 +T 6D 01 00 00 21 04 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 78 01 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 80 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T 87 01 00 00 21 04 00 DD 5E FC DD 56 FD 19 D1 +R 00 00 01 00 +T 92 01 00 00 73 23 72 23 71 23 70 +R 00 00 01 00 +T 99 01 00 00 +R 00 00 01 00 +T 99 01 00 00 21 04 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T A4 01 00 00 23 46 23 5E 23 56 69 60 DD 75 F0 +R 00 00 01 00 +T AF 01 00 00 DD 74 F1 DD 73 F2 DD 72 F3 DD 6E +R 00 00 01 00 +T BA 01 00 00 FC DD 66 FD 23 23 46 23 66 68 DD +R 00 00 01 00 +T C5 01 00 00 75 F4 DD 74 F5 21 04 00 DD 4E FE +R 00 00 01 00 +T D0 01 00 00 DD 46 FF 09 4E 23 46 23 5E 23 56 +R 00 00 01 00 +T DB 01 00 00 69 60 DD 75 F6 DD 74 F7 DD 73 F8 +R 00 00 01 00 +T E6 01 00 00 DD 72 F9 DD 6E FE DD 66 FF 23 23 +R 00 00 01 00 +T F1 01 00 00 46 23 66 68 DD 75 FA DD 74 FB 21 +R 00 00 01 00 +T FC 01 00 00 0C 00 DD 4E 02 DD 46 03 09 E5 DD +R 00 00 01 00 +T 07 02 00 00 5E EC DD 56 ED D5 21 1A 00 09 4E +R 00 00 01 00 +T 12 02 00 00 06 00 C5 0E 39 06 00 00 C5 21 +R 00 00 01 00 29 08 01 00 +T 19 02 00 00 39 06 00 00 E5 0E 0D 06 00 00 C5 +R 00 00 01 00 00 04 01 00 29 0A 01 00 +T 1F 02 00 00 21 0D 06 00 00 E5 0E E1 05 00 00 +R 00 00 01 00 00 05 01 00 29 0B 01 00 +T 25 02 00 00 C5 21 E1 05 00 00 E5 21 00 00 E5 +R 00 00 01 00 00 06 01 00 +T 2E 02 00 00 21 01 00 E5 21 20 00 39 4D 44 21 +R 00 00 01 00 +T 39 02 00 00 1A 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T 41 02 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 48 02 00 00 14 00 39 F9 EB 4D 44 E1 71 23 70 +R 00 00 01 00 +T 53 02 00 00 +R 00 00 01 00 +T 53 02 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 5E 02 00 00 23 66 68 DD 75 EE DD 74 EF 7D B4 +R 00 00 01 00 +T 69 02 00 00 28 44 21 0E 00 DD 4E EE DD 46 EF +R 00 00 01 00 +T 74 02 00 00 09 7E FE 05 28 35 +R 00 00 01 00 +T 7A 02 00 00 +R 00 00 01 00 +T 7A 02 00 00 +R 00 00 01 00 +T 7A 02 00 00 +R 00 00 01 00 +T 7A 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 85 02 00 00 B7 28 0B +R 00 00 01 00 +T 88 02 00 00 +R 00 00 01 00 +T 88 02 00 00 21 64 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 14 00 +T 91 02 00 00 18 4F +R 00 00 01 00 +T 93 02 00 00 +R 00 00 01 00 +T 93 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 9B 02 00 00 21 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T A2 02 00 00 00 00 00 00 7D B4 28 05 +R 00 00 01 00 02 04 14 00 +T A8 02 00 00 +R 00 00 01 00 +T A8 02 00 00 21 FF FF 18 35 +R 00 00 01 00 +T AD 02 00 00 +R 00 00 01 00 +T AD 02 00 00 18 A4 +R 00 00 01 00 +T AF 02 00 00 +R 00 00 01 00 +T AF 02 00 00 DD 7E EE DD B6 EF 20 28 +R 00 00 01 00 +T B7 02 00 00 +R 00 00 01 00 +T B7 02 00 00 21 12 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T C2 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 12 00 +T C7 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T CD 02 00 00 12 00 09 AF 77 23 77 21 6D 00 22 +R 00 00 01 00 +T D8 02 00 00 00 00 00 00 21 FF FF 18 03 +R 00 00 01 00 02 04 14 00 +T DF 02 00 00 +R 00 00 01 00 +T DF 02 00 00 21 00 00 +R 00 00 01 00 +T E2 02 00 00 +R 00 00 01 00 +T E2 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T E5 02 00 00 +R 00 00 01 00 +T E5 02 00 00 CD 00 00 00 00 FA FF +R 00 00 01 00 02 05 17 00 +T EA 02 00 00 +R 00 00 01 00 +T EA 02 00 00 +R 00 00 01 00 +T EA 02 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T F5 02 00 00 23 66 68 DD 75 FE DD 74 FF 7D B4 +R 00 00 01 00 +T 00 03 00 00 CA 87 03 00 00 21 66 00 DD 4E FE +R 00 00 01 00 00 05 01 00 +T 09 03 00 00 DD 46 FF 09 4E 23 46 23 7E 69 60 +R 00 00 01 00 +T 14 03 00 00 0E EB 08 00 00 11 EB 08 00 00 B9 +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 1A 03 00 00 20 04 ED 52 28 67 +R 00 00 01 00 +T 20 03 00 00 +R 00 00 01 00 +T 20 03 00 00 21 00 00 E5 21 00 00 E5 DD 4E 04 +R 00 00 01 00 +T 2B 03 00 00 DD 46 05 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 35 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 3A 03 00 00 00 00 00 00 F1 F1 DD 75 FA DD 74 +R 00 00 01 00 02 04 00 00 +T 43 03 00 00 FB DD 71 FC DD 70 FD 7D A4 A1 A0 +R 00 00 01 00 +T 4E 03 00 00 3C 20 36 +R 00 00 01 00 +T 51 03 00 00 +R 00 00 01 00 +T 51 03 00 00 +R 00 00 01 00 +T 51 03 00 00 +R 00 00 01 00 +T 51 03 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 5C 03 00 00 B7 28 0B +R 00 00 01 00 +T 5F 03 00 00 +R 00 00 01 00 +T 5F 03 00 00 21 64 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 14 00 +T 68 03 00 00 18 5E +R 00 00 01 00 +T 6A 03 00 00 +R 00 00 01 00 +T 6A 03 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 72 03 00 00 21 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 79 03 00 00 00 00 00 00 7D B4 28 05 +R 00 00 01 00 02 04 14 00 +T 7F 03 00 00 +R 00 00 01 00 +T 7F 03 00 00 21 FF FF 18 44 +R 00 00 01 00 +T 84 03 00 00 +R 00 00 01 00 +T 84 03 00 00 C3 EA 02 00 00 +R 00 00 01 00 00 05 01 00 +T 87 03 00 00 +R 00 00 01 00 +T 87 03 00 00 DD 7E FE DD B6 FF 20 0B +R 00 00 01 00 +T 8F 03 00 00 +R 00 00 01 00 +T 8F 03 00 00 21 65 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 14 00 +T 98 03 00 00 18 2E +R 00 00 01 00 +T 9A 03 00 00 +R 00 00 01 00 +T 9A 03 00 00 21 66 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T A5 03 00 00 23 46 23 7E 69 60 0E EB 08 00 00 +R 00 00 01 00 29 0B 01 00 +T AD 03 00 00 11 EB 08 00 00 B9 20 0F ED 52 20 +R 00 00 01 00 00 05 01 00 +T B6 03 00 00 0B +R 00 00 01 00 +T B7 03 00 00 +R 00 00 01 00 +T B7 03 00 00 21 65 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 14 00 +T C0 03 00 00 18 06 +R 00 00 01 00 +T C2 03 00 00 +R 00 00 01 00 +T C2 03 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 +T C8 03 00 00 +R 00 00 01 00 +T C8 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T CB 03 00 00 +R 00 00 01 00 +T CB 03 00 00 CD 00 00 00 00 FA FF 21 0C 00 DD +R 00 00 01 00 02 05 17 00 +T D4 03 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T DF 03 00 00 75 FA DD 74 FB 7D B4 20 1A +R 00 00 01 00 +T E8 03 00 00 +R 00 00 01 00 +T E8 03 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1A 00 +T F0 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 1A 00 02 0A 00 00 +T F7 03 00 00 65 00 22 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 07 14 00 +T 00 04 00 00 B2 04 00 00 +R 00 00 01 00 00 04 01 00 +T 02 04 00 00 +R 00 00 01 00 +T 02 04 00 00 DD 4E 04 DD 46 05 DD 5E FA DD 56 +R 00 00 01 00 +T 0D 04 00 00 FB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 13 04 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 00 00 +T 1C 04 00 00 DD 71 FE DD 70 FF +R 00 00 01 00 +T 22 04 00 00 +R 00 00 01 00 +T 22 04 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 2D 04 00 00 23 66 68 DD 75 FA DD 74 FB 7D B4 +R 00 00 01 00 +T 38 04 00 00 28 5F 21 7C 00 DD 4E FA DD 46 FB +R 00 00 01 00 +T 43 04 00 00 09 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 4E 04 00 00 5E 00 DD 4E FA DD 46 FB 09 5E 23 +R 00 00 01 00 +T 59 04 00 00 56 23 4E 23 46 EB CD 00 00 00 00 +R 00 00 01 00 02 0B 16 00 +T 62 04 00 00 30 35 +R 00 00 01 00 +T 64 04 00 00 +R 00 00 01 00 +T 64 04 00 00 +R 00 00 01 00 +T 64 04 00 00 +R 00 00 01 00 +T 64 04 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 6F 04 00 00 B7 28 0B +R 00 00 01 00 +T 72 04 00 00 +R 00 00 01 00 +T 72 04 00 00 21 64 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 14 00 +T 7B 04 00 00 18 35 +R 00 00 01 00 +T 7D 04 00 00 +R 00 00 01 00 +T 7D 04 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 85 04 00 00 21 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 8C 04 00 00 00 00 00 00 7D B4 28 05 +R 00 00 01 00 02 04 14 00 +T 92 04 00 00 +R 00 00 01 00 +T 92 04 00 00 21 FF FF 18 1B +R 00 00 01 00 +T 97 04 00 00 +R 00 00 01 00 +T 97 04 00 00 18 89 +R 00 00 01 00 +T 99 04 00 00 +R 00 00 01 00 +T 99 04 00 00 DD 7E FA DD B6 FB 20 0B +R 00 00 01 00 +T A1 04 00 00 +R 00 00 01 00 +T A1 04 00 00 21 65 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 14 00 +T AA 04 00 00 18 06 +R 00 00 01 00 +T AC 04 00 00 +R 00 00 01 00 +T AC 04 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T B2 04 00 00 +R 00 00 01 00 +T B2 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T B5 04 00 00 +R 00 00 01 00 +T B5 04 00 00 CD 00 00 00 00 FE FF 79 B0 20 22 +R 00 00 01 00 02 05 17 00 +T BE 04 00 00 +R 00 00 01 00 +T BE 04 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T C9 04 00 00 23 66 68 01 78 00 09 5E 23 56 23 +R 00 00 01 00 +T D4 04 00 00 4E 23 46 EB DD 75 FE DD 74 FF 18 +R 00 00 01 00 +T DF 04 00 00 28 +R 00 00 01 00 +T E0 04 00 00 +R 00 00 01 00 +T E0 04 00 00 3E 01 A9 B0 20 22 21 0C 00 DD 4E +R 00 00 01 00 +T EB 04 00 00 02 DD 46 03 09 46 23 66 68 01 +R 00 00 01 00 +T F5 04 00 00 7C 00 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 00 05 00 00 DD 75 FE DD 74 FF 18 00 +R 00 00 01 00 +T 08 05 00 00 +R 00 00 01 00 +T 08 05 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T 11 05 00 00 +R 00 00 01 00 +T 11 05 00 00 CD 00 00 00 00 21 0C 00 19 5E 23 +R 00 00 01 00 02 05 13 00 +T 1A 05 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 20 05 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 00 00 +T 27 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 08 00 +T 29 05 00 00 +R 00 00 01 00 +T 29 05 00 00 CD 00 00 00 00 59 50 CD +R 00 00 01 00 02 05 13 00 +T 2F 05 00 00 00 00 00 00 00 00 03 00 +R 00 00 01 00 02 04 01 00 +T 35 05 00 00 8F 05 00 00 3D 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 39 05 00 00 59 05 00 00 70 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 3D 05 00 00 +R 00 00 01 00 +T 3D 05 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 48 05 00 00 23 66 68 01 66 00 09 36 +R 00 00 01 00 +T 50 05 00 00 EB 08 00 00 23 36 EB 08 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T 55 05 00 00 36 EB 08 00 00 18 36 +R 00 00 01 00 29 05 01 00 +T 59 05 00 00 +R 00 00 01 00 +T 59 05 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 64 05 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1F 00 +T 69 05 00 00 00 00 00 00 CD 00 00 00 00 18 1F +R 00 00 01 00 02 04 1F 00 02 09 00 00 +T 70 05 00 00 +R 00 00 01 00 +T 70 05 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 7B 05 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 80 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 86 05 00 00 0C 00 09 AF 77 23 77 18 00 +R 00 00 01 00 +T 8F 05 00 00 +R 00 00 01 00 +T 8F 05 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T 95 05 00 00 +R 00 00 01 00 +T 95 05 00 00 CD 00 00 00 00 21 0C 00 19 7E 23 +R 00 00 01 00 02 05 13 00 +T 9E 05 00 00 B6 28 3A +R 00 00 01 00 +T A1 05 00 00 +R 00 00 01 00 +T A1 05 00 00 21 0C 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T AC 05 00 00 23 66 6A 11 66 00 19 36 +R 00 00 01 00 +T B4 05 00 00 EB 08 00 00 23 36 EB 08 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T B9 05 00 00 36 EB 08 00 00 21 0C 00 09 56 23 +R 00 00 01 00 29 05 01 00 +T C1 05 00 00 66 6A 11 AA 00 19 36 FF 23 36 FF +R 00 00 01 00 +T CC 05 00 00 21 0C 00 09 5E 23 56 3E +R 00 00 01 00 +T D4 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T D9 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T DB 05 00 00 +R 00 00 01 00 +T DB 05 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 08 00 +T E1 05 00 00 +R 00 00 01 00 +T E1 05 00 00 CD 00 00 00 00 01 01 00 21 AA 00 +R 00 00 01 00 02 05 13 00 +T EA 05 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 1E 00 +T F1 05 00 00 00 00 00 00 CD 00 00 00 00 EB 3E +R 00 00 01 00 02 04 1E 00 02 09 00 00 +T F8 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T FD 05 00 00 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 04 00 00 +T 03 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 08 06 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 08 00 +T 0D 06 00 00 +R 00 00 01 00 +T 0D 06 00 00 CD 00 00 00 00 01 01 00 21 AA 00 +R 00 00 01 00 02 05 13 00 +T 16 06 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 1E 00 +T 1D 06 00 00 00 00 00 00 CD 00 00 00 00 EB 3E +R 00 00 01 00 02 04 1E 00 02 09 00 00 +T 24 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 29 06 00 00 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 04 00 00 +T 2F 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 34 06 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 08 00 +T 39 06 00 00 +R 00 00 01 00 +T 39 06 00 00 CD 00 00 00 00 F4 FF 21 AA 00 DD +R 00 00 01 00 02 05 17 00 +T 42 06 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 4D 06 00 00 75 F4 DD 74 F5 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1E 00 +T 55 06 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 1E 00 02 0A 00 00 +T 5C 06 00 00 75 F8 DD 74 F9 DD 75 FC DD 74 FD +R 00 00 01 00 +T 67 06 00 00 DD 5E 0A DD 56 0B 3E 01 AB B2 20 +R 00 00 01 00 +T 72 06 00 00 60 +R 00 00 01 00 +T 73 06 00 00 +R 00 00 01 00 +T 73 06 00 00 DD 7E F8 DD B6 F9 28 47 +R 00 00 01 00 +T 7B 06 00 00 +R 00 00 01 00 +T 7B 06 00 00 21 0C 00 DD 4E F8 DD 46 F9 09 AF +R 00 00 01 00 +T 86 06 00 00 77 23 77 21 0F 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 91 06 00 00 03 19 66 E5 21 16 00 09 F1 77 21 +R 00 00 01 00 +T 9C 06 00 00 10 00 19 66 E5 21 17 00 09 F1 77 +R 00 00 01 00 +T A7 06 00 00 21 11 00 19 56 21 18 00 09 72 01 +R 00 00 01 00 +T B2 06 00 00 00 00 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T BB 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T C0 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T C2 06 00 00 +R 00 00 01 00 +T C2 06 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T CA 06 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T D1 06 00 00 D7 08 00 00 +R 00 00 01 00 00 04 01 00 +T D3 06 00 00 +R 00 00 01 00 +T D3 06 00 00 3E 04 AB B2 C2 D5 08 00 00 21 +R 00 00 01 00 00 09 01 00 +T DB 06 00 00 6F 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T E6 06 00 00 02 47 23 7E E6 00 B0 CA +R 00 00 01 00 +T EE 06 00 00 AD 07 00 00 +R 00 00 01 00 00 04 01 00 +T F0 06 00 00 +R 00 00 01 00 +T F0 06 00 00 21 00 00 E5 01 00 00 11 00 00 3E +R 00 00 01 00 +T FB 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 00 07 00 00 00 00 00 00 F1 DD 75 F6 DD 74 F7 +R 00 00 01 00 02 04 00 00 +T 09 07 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1E 00 02 0B 1E 00 +T 0F 07 00 00 CD 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 05 00 00 +T 18 07 00 00 DD 6E F8 DD 66 F9 DD 5E FA DD 56 +R 00 00 01 00 +T 23 07 00 00 FB 01 1D 00 ED B0 21 AA 00 DD 4E +R 00 00 01 00 +T 2E 07 00 00 02 DD 46 03 09 DD 5E F6 DD 56 F7 +R 00 00 01 00 +T 39 07 00 00 73 23 72 21 0C 00 DD 4E FA DD 46 +R 00 00 01 00 +T 44 07 00 00 FB 09 DD 5E 02 DD 56 03 73 23 72 +R 00 00 01 00 +T 4F 07 00 00 21 0E 00 09 E5 11 10 00 3E +R 00 00 01 00 +T 58 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T 5D 07 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 00 00 +T 65 07 00 00 12 00 09 E5 11 10 00 3E +R 00 00 01 00 +T 6D 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T 72 07 00 00 00 00 00 00 EB E1 73 23 72 DD 6E +R 00 00 01 00 02 04 00 00 +T 7B 07 00 00 F6 DD 66 F7 E5 69 60 C1 71 23 70 +R 00 00 01 00 +T 86 07 00 00 21 0A 00 DD 4E F8 DD 46 F9 09 DD +R 00 00 01 00 +T 91 07 00 00 5E F6 DD 56 F7 73 23 72 DD 6E FA +R 00 00 01 00 +T 9C 07 00 00 DD 66 FB DD 75 F8 DD 74 F9 DD 73 +R 00 00 01 00 +T A7 07 00 00 F4 DD 72 F5 18 28 +R 00 00 01 00 +T AD 07 00 00 +R 00 00 01 00 +T AD 07 00 00 21 12 00 DD 4E F8 DD 46 F9 09 E5 +R 00 00 01 00 +T B8 07 00 00 11 10 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 19 00 +T BE 07 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 19 00 02 09 00 00 +T C5 07 00 00 73 23 72 21 0A 00 09 DD 4E F4 DD +R 00 00 01 00 +T D0 07 00 00 46 F5 71 23 70 +R 00 00 01 00 +T D5 07 00 00 +R 00 00 01 00 +T D5 07 00 00 21 0E 00 DD 4E F8 DD 46 F9 09 56 +R 00 00 01 00 +T E0 07 00 00 23 66 6A DD 75 FE DD 74 FF DD 6E +R 00 00 01 00 +T EB 07 00 00 FE DD 66 FF AF 77 23 77 21 0C 00 +R 00 00 01 00 +T F6 07 00 00 09 56 23 66 6A 23 23 4E 23 46 23 +R 00 00 01 00 +T 01 08 00 00 5E 23 56 69 60 E5 DD 6E FE DD 66 +R 00 00 01 00 +T 0C 08 00 00 FF 01 04 00 09 C1 D5 59 50 C1 73 +R 00 00 01 00 +T 17 08 00 00 23 72 23 71 23 70 DD 6E FE DD 66 +R 00 00 01 00 +T 22 08 00 00 FF 23 23 E5 21 0C 00 DD 4E F8 DD +R 00 00 01 00 +T 2D 08 00 00 46 F9 09 56 23 66 6A 11 06 00 19 +R 00 00 01 00 +T 38 08 00 00 5E 23 56 E1 73 23 72 21 10 00 09 +R 00 00 01 00 +T 43 08 00 00 36 10 23 36 00 21 12 00 09 56 23 +R 00 00 01 00 +T 4E 08 00 00 66 6A DD 75 FE DD 74 FF DD 6E FE +R 00 00 01 00 +T 59 08 00 00 DD 66 FF AF 77 23 77 21 0C 00 09 +R 00 00 01 00 +T 64 08 00 00 56 23 66 6A 11 08 00 19 4E 23 46 +R 00 00 01 00 +T 6F 08 00 00 23 5E 23 56 69 60 E5 DD 6E FE DD +R 00 00 01 00 +T 7A 08 00 00 66 FF 01 04 00 09 C1 D5 59 50 C1 +R 00 00 01 00 +T 85 08 00 00 73 23 72 23 71 23 70 DD 6E FE DD +R 00 00 01 00 +T 90 08 00 00 66 FF 23 23 E5 21 0C 00 DD 4E F8 +R 00 00 01 00 +T 9B 08 00 00 DD 46 F9 09 56 23 66 6A 11 0C 00 +R 00 00 01 00 +T A6 08 00 00 19 5E 23 56 E1 73 23 72 21 14 00 +R 00 00 01 00 +T B1 08 00 00 09 36 10 23 36 00 01 01 00 DD 5E +R 00 00 01 00 +T BC 08 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 15 00 +T C3 08 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 15 00 02 09 00 00 +T C9 08 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T CE 08 00 00 00 00 00 00 CD 00 00 00 00 18 02 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T D5 08 00 00 +R 00 00 01 00 +T D5 08 00 00 18 00 +R 00 00 01 00 +T D7 08 00 00 +R 00 00 01 00 +T D7 08 00 00 01 00 00 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T E1 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T E6 08 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 08 00 +T EB 08 00 00 +R 00 00 01 00 +T EB 08 00 00 CD 00 00 00 00 FE FF DD 6E 0C DD +R 00 00 01 00 02 05 17 00 +T F4 08 00 00 66 0D E5 DD 6E 0A DD 66 0B E5 21 +R 00 00 01 00 +T FF 08 00 00 04 00 39 4D 44 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 0A 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 10 09 00 00 00 00 00 00 F1 F1 21 00 00 39 5D +R 00 00 01 00 02 04 00 00 +T 19 09 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 1F 09 00 00 CD 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 02 0A 08 00 +T 25 09 00 00 +R 00 00 01 00 +T 25 09 00 00 CD 00 00 00 00 F0 FF AF DD 77 F0 +R 00 00 01 00 02 05 17 00 +T 2E 09 00 00 DD 77 F1 AF DD 77 F4 DD 77 F5 DD +R 00 00 01 00 +T 39 09 00 00 77 F6 DD 77 F7 2A 00 00 00 00 23 +R 00 00 01 00 00 0A 03 00 +T 42 09 00 00 22 00 00 00 00 2B DD 75 F2 DD 74 +R 00 00 01 00 00 05 03 00 +T 4B 09 00 00 F3 21 10 00 E5 21 02 00 39 4D 44 +R 00 00 01 00 +T 56 09 00 00 DD 6E 02 DD 66 03 5E 23 56 3E +R 00 00 01 00 +T 60 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 65 09 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 0D 00 +T 6B 09 00 00 +R 00 00 01 00 +T 6B 09 00 00 CD 00 00 00 00 21 0C 00 19 7E 23 +R 00 00 01 00 02 05 13 00 +T 74 09 00 00 B6 20 05 +R 00 00 01 00 +T 77 09 00 00 +R 00 00 01 00 +T 77 09 00 00 21 00 00 18 1E +R 00 00 01 00 +T 7C 09 00 00 +R 00 00 01 00 +T 7C 09 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 87 09 00 00 23 66 68 01 0E 00 09 6E 26 00 29 +R 00 00 01 00 +T 92 09 00 00 01 00 00 00 00 09 46 23 66 68 +R 00 00 01 00 02 05 1D 00 +T 9A 09 00 00 +R 00 00 01 00 +T 9A 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 9D 09 00 00 +R 00 00 01 00 +T 9D 09 00 00 CD 00 00 00 00 21 0C 00 19 5E 23 +R 00 00 01 00 02 05 13 00 +T A6 09 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T AC 09 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 00 00 +T B3 09 00 00 00 00 00 00 +R 00 00 01 00 02 04 08 00 +T B5 09 00 00 +R 00 00 01 00 +T B5 09 00 00 CD 00 00 00 00 F8 FF 01 0B 00 11 +R 00 00 01 00 02 05 17 00 +T BE 09 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 18 00 +T C3 09 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 18 00 02 09 00 00 +T CA 09 00 00 F8 DD 74 F9 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T D5 09 00 00 DD 77 FC DD 77 FD DD 4E 02 DD 46 +R 00 00 01 00 +T E0 09 00 00 03 DD 71 FE DD 70 FF 23 23 E5 01 +R 00 00 01 00 +T EB 09 00 00 FF FF C5 01 00 00 C5 0E +R 00 00 01 00 +T F3 09 00 00 A3 0A 00 00 C5 01 A3 0A 00 00 C5 +R 00 00 01 00 29 04 01 00 00 0A 01 00 +T F9 09 00 00 0E 00 C5 01 00 00 C5 0E 00 C5 01 +R 00 00 01 00 +T 04 0A 00 00 00 00 C5 01 00 00 C5 01 02 00 C5 +R 00 00 01 00 +T 0F 0A 00 00 01 00 00 21 18 00 39 5D 54 3E +R 00 00 01 00 +T 19 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 1E 0A 00 00 00 00 00 00 EB 21 14 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T 27 0A 00 00 4D 44 E1 71 23 70 DD 6E F8 DD 66 +R 00 00 01 00 +T 32 0A 00 00 F9 23 23 7E 23 B6 20 13 +R 00 00 01 00 +T 3A 0A 00 00 +R 00 00 01 00 +T 3A 0A 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T 42 0A 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 12 00 02 0A 00 00 +T 49 0A 00 00 FF FF 18 53 +R 00 00 01 00 +T 4D 0A 00 00 +R 00 00 01 00 +T 4D 0A 00 00 21 06 00 DD 4E F8 DD 46 F9 09 DD +R 00 00 01 00 +T 58 0A 00 00 5E 0E DD 56 0F 73 23 72 21 08 00 +R 00 00 01 00 +T 63 0A 00 00 09 DD 7E 0C DD 5E 0A DD 56 0B 73 +R 00 00 01 00 +T 6E 0A 00 00 23 72 23 77 21 04 00 09 E5 DD 5E +R 00 00 01 00 +T 79 0A 00 00 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 80 0A 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 87 0A 00 00 73 23 72 2A 00 00 00 00 E5 69 60 +R 00 00 01 00 00 08 02 00 +T 90 0A 00 00 C1 71 23 70 DD 6E F8 DD 66 F9 22 +R 00 00 01 00 +T 9B 0A 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 00 04 02 00 +T A0 0A 00 00 +R 00 00 01 00 +T A0 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T A3 0A 00 00 +R 00 00 01 00 +T A3 0A 00 00 CD 00 00 00 00 EA FF 3E 02 A9 B0 +R 00 00 01 00 02 05 17 00 +T AC 0A 00 00 28 03 +R 00 00 01 00 +T AE 0A 00 00 +R 00 00 01 00 +T AE 0A 00 00 C3 9F 0C 00 00 +R 00 00 01 00 00 05 01 00 +T B1 0A 00 00 +R 00 00 01 00 +T B1 0A 00 00 3E 01 DD AE 0A DD B6 0B 20 11 +R 00 00 01 00 +T BB 0A 00 00 +R 00 00 01 00 +T BB 0A 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T C3 0A 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T CA 0A 00 00 9F 0C 00 00 +R 00 00 01 00 00 04 01 00 +T CC 0A 00 00 +R 00 00 01 00 +T CC 0A 00 00 2A 00 00 00 00 DD 75 EA DD 74 EB +R 00 00 01 00 00 05 02 00 +T D5 0A 00 00 +R 00 00 01 00 +T D5 0A 00 00 DD 7E EA DD B6 EB 28 3C +R 00 00 01 00 +T DD 0A 00 00 +R 00 00 01 00 +T DD 0A 00 00 DD 6E EA DD 66 EB 23 23 46 23 66 +R 00 00 01 00 +T E8 0A 00 00 68 01 06 00 09 46 23 66 68 E5 21 +R 00 00 01 00 +T F3 0A 00 00 06 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T FE 0A 00 00 46 E1 A7 ED 42 20 02 +R 00 00 01 00 +T 05 0B 00 00 +R 00 00 01 00 +T 05 0B 00 00 18 12 +R 00 00 01 00 +T 07 0B 00 00 +R 00 00 01 00 +T 07 0B 00 00 DD 6E EA DD 66 EB 46 23 66 68 DD +R 00 00 01 00 +T 12 0B 00 00 75 EA DD 74 EB 18 BC +R 00 00 01 00 +T 19 0B 00 00 +R 00 00 01 00 +T 19 0B 00 00 DD 7E EA DD B6 EB 20 03 +R 00 00 01 00 +T 21 0B 00 00 +R 00 00 01 00 +T 21 0B 00 00 C3 9F 0C 00 00 +R 00 00 01 00 00 05 01 00 +T 24 0B 00 00 +R 00 00 01 00 +T 24 0B 00 00 21 00 00 E5 01 00 00 11 00 00 3E +R 00 00 01 00 +T 2F 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 34 0B 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 3D 0B 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1E 00 02 0B 1E 00 +T 43 0B 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 00 00 +T 4C 0B 00 00 AF DD 77 EC DD 77 ED DD 4E 02 DD +R 00 00 01 00 +T 57 0B 00 00 46 03 03 03 69 60 5E 23 56 23 4E +R 00 00 01 00 +T 62 0B 00 00 23 46 DD 73 F0 DD 72 F1 DD 71 F2 +R 00 00 01 00 +T 6D 0B 00 00 DD 70 F3 21 06 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 78 0B 00 00 03 09 56 23 66 6A DD 75 EE DD 74 +R 00 00 01 00 +T 83 0B 00 00 EF 21 10 00 E5 21 04 00 39 4D 44 +R 00 00 01 00 +T 8E 0B 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 96 0B 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T 9D 0B 00 00 21 08 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T A8 0B 00 00 23 46 23 5E 23 56 69 60 DD 75 F0 +R 00 00 01 00 +T B3 0B 00 00 DD 74 F1 DD 73 F2 DD 72 F3 21 +R 00 00 01 00 +T BD 0B 00 00 0C 00 DD 4E 02 DD 46 03 09 56 23 +R 00 00 01 00 +T C8 0B 00 00 66 6A DD 75 EE DD 74 EF 21 14 00 +R 00 00 01 00 +T D3 0B 00 00 DD 5E FC DD 56 FD 19 36 10 23 36 +R 00 00 01 00 +T DE 0B 00 00 00 21 12 00 19 E5 21 14 00 19 5E +R 00 00 01 00 +T E9 0B 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 19 00 +T EE 0B 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 19 00 02 09 00 00 +T F5 0B 00 00 73 23 72 21 10 00 E5 21 04 00 39 +R 00 00 01 00 +T 00 0C 00 00 4D 44 21 12 00 DD 5E FC DD 56 FD +R 00 00 01 00 +T 0B 0C 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T 12 0C 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 19 0C 00 00 0C 00 DD 4E FC DD 46 FD 09 DD 4E +R 00 00 01 00 +T 24 0C 00 00 02 DD 46 03 71 23 70 21 AA 00 09 +R 00 00 01 00 +T 2F 0C 00 00 DD 5E FE DD 56 FF 73 23 72 21 +R 00 00 01 00 +T 39 0C 00 00 66 00 09 36 E1 05 00 00 23 36 +R 00 00 01 00 09 08 01 00 +T 40 0C 00 00 E1 05 00 00 23 36 E1 05 00 00 21 +R 00 00 01 00 89 04 01 00 29 0A 01 00 +T 45 0C 00 00 69 00 09 36 0D 06 00 00 23 36 +R 00 00 01 00 09 08 01 00 +T 4C 0C 00 00 0D 06 00 00 23 36 0D 06 00 00 21 +R 00 00 01 00 89 04 01 00 29 0A 01 00 +T 51 0C 00 00 6C 00 09 36 39 06 00 00 23 36 +R 00 00 01 00 09 08 01 00 +T 58 0C 00 00 39 06 00 00 23 36 39 06 00 00 21 +R 00 00 01 00 89 04 01 00 29 0A 01 00 +T 5D 0C 00 00 00 00 E5 21 00 00 E5 21 00 00 E5 +R 00 00 01 00 +T 68 0C 00 00 D5 21 08 00 DD 4E EA DD 46 EB 09 +R 00 00 01 00 +T 73 0C 00 00 23 23 5E D5 2B 56 2B 5E D5 21 +R 00 00 01 00 +T 7D 0C 00 00 06 00 09 4E 23 46 21 04 00 DD 5E +R 00 00 01 00 +T 88 0C 00 00 EA DD 56 EB 19 5E 23 56 3E +R 00 00 01 00 +T 91 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 20 00 02 09 20 00 +T 96 0C 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T 9F 0C 00 00 +R 00 00 01 00 +T 9F 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T A2 0C 00 00 +R 00 00 01 00 +T A2 0C 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 17 00 +T AB 0C 00 00 DD 77 FF 2A 00 00 00 00 DD 75 FC +R 00 00 01 00 00 08 02 00 +T B4 0C 00 00 DD 74 FD +R 00 00 01 00 +T B7 0C 00 00 +R 00 00 01 00 +T B7 0C 00 00 DD 7E FC DD B6 FD 28 3F +R 00 00 01 00 +T BF 0C 00 00 +R 00 00 01 00 +T BF 0C 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T CA 0C 00 00 68 01 06 00 09 46 23 66 68 DD 4E +R 00 00 01 00 +T D5 0C 00 00 02 DD 46 03 A7 ED 42 20 02 +R 00 00 01 00 +T DE 0C 00 00 +R 00 00 01 00 +T DE 0C 00 00 18 1E +R 00 00 01 00 +T E0 0C 00 00 +R 00 00 01 00 +T E0 0C 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T EB 0C 00 00 FF DD 6E FC DD 66 FD 46 23 66 68 +R 00 00 01 00 +T F6 0C 00 00 DD 75 FC DD 74 FD 18 B9 +R 00 00 01 00 +T FE 0C 00 00 +R 00 00 01 00 +T FE 0C 00 00 DD 7E FC DD B6 FD 20 05 +R 00 00 01 00 +T 06 0D 00 00 +R 00 00 01 00 +T 06 0D 00 00 21 FF FF 18 65 +R 00 00 01 00 +T 0B 0D 00 00 +R 00 00 01 00 +T 0B 0D 00 00 DD 6E FC DD 66 FD 23 23 5E 23 56 +R 00 00 01 00 +T 16 0D 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1F 00 02 0A 1F 00 +T 1C 0D 00 00 00 00 00 00 21 04 00 DD 4E FC DD +R 00 00 01 00 02 04 00 00 +T 25 0D 00 00 46 FD 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T 2D 0D 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 12 00 02 0A 00 00 +T 34 0D 00 00 7E FE DD B6 FF 28 17 +R 00 00 01 00 +T 3B 0D 00 00 +R 00 00 01 00 +T 3B 0D 00 00 DD 6E FC DD 66 FD 46 23 66 68 E5 +R 00 00 01 00 +T 46 0D 00 00 DD 6E FE DD 66 FF C1 71 23 70 18 +R 00 00 01 00 +T 51 0D 00 00 0D +R 00 00 01 00 +T 52 0D 00 00 +R 00 00 01 00 +T 52 0D 00 00 DD 6E FC DD 66 FD 46 23 66 68 22 +R 00 00 01 00 +T 5D 0D 00 00 00 00 00 00 +R 00 00 01 00 00 04 02 00 +T 5F 0D 00 00 +R 00 00 01 00 +T 5F 0D 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T 67 0D 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 12 00 02 0A 00 00 +T 6E 0D 00 00 00 00 +R 00 00 01 00 +T 70 0D 00 00 +R 00 00 01 00 +T 70 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 04 +R 00 00 04 00 diff --git a/src/nos/lib/internet_lib/tcpsubr.rel b/src/nos/lib/internet_lib/tcpsubr.rel new file mode 100644 index 00000000..6b3140c4 --- /dev/null +++ b/src/nos/lib/internet_lib/tcpsubr.rel @@ -0,0 +1,1062 @@ +XL4 +H 6 areas 2A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?L_DEC_L03 Ref00000000 +S _stop_timer Ref00000000 +S _set_timer Ref00000000 +S _mbuf_crunch Ref00000000 +S ___038f_7f7b_TCB_20_25p_20_25s_2 Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _callocw Ref00000000 +S ?L_MUL_L03 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _tcp_timeout Ref00000000 +S _free_p Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 93D flags 0 +S _seq_gt Def00000402 +S _seq_lt Def000003DB +S _create_tcb Def00000123 +S _close_self Def0000028E +S _rtt_add Def00000631 +S _tcp_garbage Def0000086C +S _lookup_tcb Def00000000 +S _settcpstate Def00000459 +S _seq_ge Def00000432 +S _rtt_get Def0000080B +S _seq_within Def0000032B +A CSTR size 132 flags 0 +A UDATA0 size C6 flags 0 +S _Tcbs Def00000000 +S _Tcp_trace Def00000002 +S _Tcp_rtt Def00000006 +S _Tcp_syndata Def00000004 +A IDATA0 size 86 flags 0 +S _Tcp_irtt Def00000022 +S _Tcp_mss Def00000020 +S _Tcpreasons Def00000018 +S _Tcpstates Def00000000 +S _Tcp_mib Def00000026 +A CDATA0 size 86 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 0E 00 +T 09 00 00 00 DD 77 FF 2A 00 00 00 00 DD 75 FC +R 00 00 01 00 00 08 03 00 +T 12 00 00 00 DD 74 FD +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 DD 7E FC DD B6 FD CA 1D 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 29 00 00 00 23 66 68 E5 21 0C 00 DD 4E FC DD +R 00 00 01 00 +T 34 00 00 00 46 FD 09 4E 23 46 E1 A7 ED 42 C2 +R 00 00 01 00 +T 3F 00 00 00 FE 00 00 00 21 04 00 DD 4E 02 DD +R 00 00 01 00 00 04 01 00 +T 48 00 00 00 46 03 09 46 23 66 68 E5 21 06 00 +R 00 00 01 00 +T 53 00 00 00 DD 4E FC DD 46 FD 09 4E 23 46 E1 +R 00 00 01 00 +T 5E 00 00 00 A7 ED 42 C2 FE 00 00 00 21 08 00 +R 00 00 01 00 00 08 01 00 +T 67 00 00 00 DD 4E FC DD 46 FD 09 4E 23 46 23 +R 00 00 01 00 +T 72 00 00 00 5E 23 56 D5 C5 21 06 00 DD 4E 02 +R 00 00 01 00 +T 7D 00 00 00 DD 46 03 09 4E 23 46 23 5E 23 56 +R 00 00 01 00 +T 88 00 00 00 69 60 C1 A7 ED 42 C1 20 6D EB ED +R 00 00 01 00 +T 93 00 00 00 42 20 68 DD 6E FC DD 66 FD 23 23 +R 00 00 01 00 +T 9E 00 00 00 4E 23 46 23 5E 23 56 D5 C5 DD 6E +R 00 00 01 00 +T A9 00 00 00 02 DD 66 03 4E 23 46 23 5E 23 56 +R 00 00 01 00 +T B4 00 00 00 69 60 C1 A7 ED 42 C1 20 41 EB ED +R 00 00 01 00 +T BF 00 00 00 42 20 3C +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 DD 7E FE DD B6 FF 28 2C +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 E5 +R 00 00 01 00 +T D5 00 00 00 DD 6E FE DD 66 FF C1 71 23 70 2A +R 00 00 01 00 +T E0 00 00 00 00 00 00 00 E5 DD 6E FC DD 66 FD +R 00 00 01 00 00 04 03 00 +T E9 00 00 00 C1 71 23 70 DD 6E FC DD 66 FD 22 +R 00 00 01 00 +T F4 00 00 00 00 00 00 00 +R 00 00 01 00 00 04 03 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 DD 6E FC DD 66 FD 18 22 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 09 01 00 00 FF DD 6E FC DD 66 FD 46 23 66 68 +R 00 00 01 00 +T 14 01 00 00 DD 75 FC DD 74 FD C3 15 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 21 00 00 +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 0E 00 +T 2C 01 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 29 07 01 00 +T 31 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 00 04 01 00 02 09 00 00 +T 38 01 00 00 FC DD 74 FD 7D B4 28 09 +R 00 00 01 00 +T 40 01 00 00 +R 00 00 01 00 +T 40 01 00 00 DD 6E FC DD 66 FD C3 8B 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 01 C8 00 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 51 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 58 01 00 00 75 FC DD 74 FD EB 13 13 DD 6E 02 +R 00 00 01 00 +T 63 01 00 00 DD 66 03 01 0C 00 ED B0 21 0E 00 +R 00 00 01 00 +T 6E 01 00 00 DD 4E FC DD 46 FD 09 36 01 21 +R 00 00 01 00 +T 78 01 00 00 5A 00 09 ED 5B 20 00 00 00 01 +R 00 00 01 00 00 09 04 00 +T 80 01 00 00 00 00 73 23 72 23 71 23 70 C5 21 +R 00 00 01 00 +T 8B 01 00 00 35 00 DD 4E FC DD 46 FD 09 C1 73 +R 00 00 01 00 +T 96 01 00 00 23 72 23 71 23 70 21 39 00 DD 4E +R 00 00 01 00 +T A1 01 00 00 FC DD 46 FD 09 AF 36 FF 23 36 FF +R 00 00 01 00 +T AC 01 00 00 23 77 23 77 21 08 00 09 5E 23 56 +R 00 00 01 00 +T B7 01 00 00 23 4E 23 46 3E 0B 08 00 00 21 +R 00 00 01 00 29 09 01 00 +T BE 01 00 00 0B 08 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 00 04 01 00 02 09 00 00 +T C5 01 00 00 FE DD 74 FF 7D B4 28 51 +R 00 00 01 00 +T CD 01 00 00 +R 00 00 01 00 +T CD 01 00 00 21 04 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T D8 01 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T E2 01 00 00 9E 00 DD 4E FC DD 46 FD 09 C1 D5 +R 00 00 01 00 +T ED 01 00 00 59 50 C1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T F8 01 00 00 08 00 DD 4E FE DD 46 FF 09 5E 23 +R 00 00 01 00 +T 03 02 00 00 56 23 4E 23 46 EB E5 21 A2 00 DD +R 00 00 01 00 +T 0E 02 00 00 5E FC DD 56 FD 19 D1 73 23 72 23 +R 00 00 01 00 +T 19 02 00 00 71 23 70 18 19 +R 00 00 01 00 +T 1E 02 00 00 +R 00 00 01 00 +T 1E 02 00 00 21 9E 00 DD 4E FC DD 46 FD 09 ED +R 00 00 01 00 +T 29 02 00 00 4B 24 00 00 00 ED 5B 22 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 30 02 00 00 73 23 72 23 71 23 70 +R 00 00 01 00 +T 37 02 00 00 +R 00 00 01 00 +T 37 02 00 00 21 9E 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 42 02 00 00 23 56 23 4E 23 46 C5 D5 21 82 00 +R 00 00 01 00 +T 4D 02 00 00 DD 4E FC DD 46 FD 09 EB 3E +R 00 00 01 00 +T 56 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 5B 02 00 00 00 00 00 00 E1 E1 21 8C 00 09 36 +R 00 00 01 00 02 04 00 00 +T 64 02 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 10 00 8B 0A 10 00 +T 69 02 00 00 36 00 00 00 00 21 8F 00 09 71 23 +R 00 00 01 00 2B 05 10 00 +T 71 02 00 00 70 2A 00 00 00 00 E5 69 60 C1 71 +R 00 00 01 00 00 06 03 00 +T 7A 02 00 00 23 70 DD 6E FC DD 66 FD 22 +R 00 00 01 00 +T 83 02 00 00 00 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 00 04 03 00 +T 8B 02 00 00 +R 00 00 01 00 +T 8B 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 8E 02 00 00 +R 00 00 01 00 +T 8E 02 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 0E 00 +T 97 02 00 00 B6 03 20 03 +R 00 00 01 00 +T 9B 02 00 00 +R 00 00 01 00 +T 9B 02 00 00 C3 28 03 00 00 +R 00 00 01 00 00 05 01 00 +T 9E 02 00 00 +R 00 00 01 00 +T 9E 02 00 00 21 82 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T A9 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T AF 02 00 00 00 00 00 00 21 0F 00 09 DD 56 04 +R 00 00 01 00 02 04 00 00 +T B8 02 00 00 72 21 80 00 09 46 23 66 68 DD 75 +R 00 00 01 00 +T C3 02 00 00 FE DD 74 FF +R 00 00 01 00 +T C7 02 00 00 +R 00 00 01 00 +T C7 02 00 00 DD 7E FE DD B6 FF 28 3B +R 00 00 01 00 +T CF 02 00 00 +R 00 00 01 00 +T CF 02 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T DA 02 00 00 75 FC DD 74 FD 21 21 00 DD 4E FE +R 00 00 01 00 +T E5 02 00 00 DD 46 FF 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 11 00 +T ED 02 00 00 00 00 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T F4 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T FA 02 00 00 00 00 00 00 DD 6E FC DD 66 FD DD +R 00 00 01 00 02 04 00 00 +T 03 03 00 00 75 FE DD 74 FF 18 BD +R 00 00 01 00 +T 0A 03 00 00 +R 00 00 01 00 +T 0A 03 00 00 21 80 00 DD 4E 02 DD 46 03 09 AF +R 00 00 01 00 +T 15 03 00 00 77 23 77 0E 01 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 20 03 00 00 3E 59 04 00 00 21 59 04 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 26 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 28 03 00 00 +R 00 00 01 00 +T 28 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 2B 03 00 00 +R 00 00 01 00 +T 2B 03 00 00 CD 00 00 00 00 DD 6E 0C DD 66 0D +R 00 00 01 00 02 05 0A 00 +T 34 03 00 00 E5 DD 6E 0A DD 66 0B E5 DD 4E 10 +R 00 00 01 00 +T 3F 03 00 00 DD 46 11 DD 6E 0E DD 66 0F CD +R 00 00 01 00 +T 49 03 00 00 00 00 00 00 38 45 +R 00 00 01 00 02 04 0D 00 +T 4D 03 00 00 +R 00 00 01 00 +T 4D 03 00 00 DD 6E 0C DD 66 0D E5 DD 6E 0A DD +R 00 00 01 00 +T 58 03 00 00 66 0B E5 DD 4E 04 DD 46 05 DD 6E +R 00 00 01 00 +T 63 03 00 00 02 DD 66 03 CD 00 00 00 00 38 24 +R 00 00 01 00 02 09 0D 00 +T 6C 03 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 77 03 00 00 66 03 E5 DD 4E 10 DD 46 11 DD 6E +R 00 00 01 00 +T 82 03 00 00 0E DD 66 0F CD 00 00 00 00 38 05 +R 00 00 01 00 02 09 0D 00 +T 8B 03 00 00 +R 00 00 01 00 +T 8B 03 00 00 +R 00 00 01 00 +T 8B 03 00 00 +R 00 00 01 00 +T 8B 03 00 00 21 01 00 18 48 +R 00 00 01 00 +T 90 03 00 00 +R 00 00 01 00 +T 90 03 00 00 18 43 +R 00 00 01 00 +T 92 03 00 00 +R 00 00 01 00 +T 92 03 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 9D 03 00 00 66 03 E5 DD 4E 0C DD 46 0D DD 6E +R 00 00 01 00 +T A8 03 00 00 0A DD 66 0B CD 00 00 00 00 38 24 +R 00 00 01 00 02 09 0D 00 +T B1 03 00 00 DD 6E 10 DD 66 11 E5 DD 6E 0E DD +R 00 00 01 00 +T BC 03 00 00 66 0F E5 DD 4E 04 DD 46 05 DD 6E +R 00 00 01 00 +T C7 03 00 00 02 DD 66 03 CD 00 00 00 00 38 05 +R 00 00 01 00 02 09 0D 00 +T D0 03 00 00 +R 00 00 01 00 +T D0 03 00 00 +R 00 00 01 00 +T D0 03 00 00 +R 00 00 01 00 +T D0 03 00 00 21 01 00 18 03 +R 00 00 01 00 +T D5 03 00 00 +R 00 00 01 00 +T D5 03 00 00 +R 00 00 01 00 +T D5 03 00 00 21 00 00 +R 00 00 01 00 +T D8 03 00 00 +R 00 00 01 00 +T D8 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T DB 03 00 00 +R 00 00 01 00 +T DB 03 00 00 CD 00 00 00 00 EB 59 50 A7 DD 4E +R 00 00 01 00 02 05 0A 00 +T E4 03 00 00 0A DD 46 0B ED 42 EB DD 4E 0C DD +R 00 00 01 00 +T EF 03 00 00 46 0D ED 42 CB 7C 28 04 2E 01 18 +R 00 00 01 00 +T FA 03 00 00 02 +R 00 00 01 00 +T FB 03 00 00 +R 00 00 01 00 +T FB 03 00 00 2E 00 +R 00 00 01 00 +T FD 03 00 00 +R 00 00 01 00 +T FD 03 00 00 26 00 C3 00 00 00 00 +R 00 00 01 00 02 07 07 00 +T 02 04 00 00 +R 00 00 01 00 +T 02 04 00 00 CD 00 00 00 00 EB 59 50 A7 DD 4E +R 00 00 01 00 02 05 0A 00 +T 0B 04 00 00 0A DD 46 0B ED 42 EB DD 4E 0C DD +R 00 00 01 00 +T 16 04 00 00 46 0D ED 42 E5 D5 01 00 00 21 +R 00 00 01 00 +T 20 04 00 00 00 00 CD 00 00 00 00 30 04 2E 01 +R 00 00 01 00 02 07 0D 00 +T 29 04 00 00 18 02 +R 00 00 01 00 +T 2B 04 00 00 +R 00 00 01 00 +T 2B 04 00 00 2E 00 +R 00 00 01 00 +T 2D 04 00 00 +R 00 00 01 00 +T 2D 04 00 00 26 00 C3 00 00 00 00 +R 00 00 01 00 02 07 07 00 +T 32 04 00 00 +R 00 00 01 00 +T 32 04 00 00 CD 00 00 00 00 EB 59 50 A7 DD 4E +R 00 00 01 00 02 05 0A 00 +T 3B 04 00 00 0A DD 46 0B ED 42 EB DD 4E 0C DD +R 00 00 01 00 +T 46 04 00 00 46 0D ED 42 CB 7C 20 04 2E 01 18 +R 00 00 01 00 +T 51 04 00 00 02 +R 00 00 01 00 +T 52 04 00 00 +R 00 00 01 00 +T 52 04 00 00 2E 00 +R 00 00 01 00 +T 54 04 00 00 +R 00 00 01 00 +T 54 04 00 00 26 00 C3 00 00 00 00 +R 00 00 01 00 02 07 07 00 +T 59 04 00 00 +R 00 00 01 00 +T 59 04 00 00 CD 00 00 00 00 FE FF 21 0E 00 DD +R 00 00 01 00 02 05 0E 00 +T 62 04 00 00 5E 02 DD 56 03 19 46 DD 70 FE 21 +R 00 00 01 00 +T 6D 04 00 00 0E 00 19 71 2A 02 00 00 00 7D B4 +R 00 00 01 00 00 09 03 00 +T 76 04 00 00 28 37 +R 00 00 01 00 +T 78 04 00 00 +R 00 00 01 00 +T 78 04 00 00 DD 6E 04 26 00 29 01 00 00 00 00 +R 00 00 01 00 00 0B 04 00 +T 81 04 00 00 09 4E 23 46 C5 DD 6E FE 26 00 29 +R 00 00 01 00 +T 8C 04 00 00 01 00 00 00 00 09 4E 23 46 C5 DD +R 00 00 01 00 00 05 04 00 +T 95 04 00 00 6E 02 DD 66 03 E5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 9D 04 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 05 00 +T A3 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T A8 04 00 00 00 00 00 00 F1 F1 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T AF 04 00 00 +R 00 00 01 00 +T AF 04 00 00 DD 5E FE CD 00 00 00 00 06 00 01 +R 00 00 01 00 02 08 15 00 +T B8 04 00 00 02 03 04 05 08 6A 05 00 00 +R 00 00 01 00 00 09 01 00 +T BF 04 00 00 39 05 00 00 39 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T C3 04 00 00 19 05 00 00 00 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T C7 04 00 00 E6 04 00 00 CB 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T CB 04 00 00 +R 00 00 01 00 +T CB 04 00 00 DD 7E 04 FE 03 20 11 +R 00 00 01 00 +T D2 04 00 00 +R 00 00 01 00 +T D2 04 00 00 2A 46 00 00 00 ED 4B 48 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T D9 04 00 00 CD 00 00 00 00 22 46 00 00 00 ED +R 00 00 01 00 02 05 06 00 00 0A 04 00 +T E0 04 00 00 43 48 00 00 00 +R 00 00 01 00 00 05 04 00 +T E3 04 00 00 +R 00 00 01 00 +T E3 04 00 00 C3 6A 05 00 00 +R 00 00 01 00 00 05 01 00 +T E6 04 00 00 +R 00 00 01 00 +T E6 04 00 00 DD 7E 04 FE 04 20 11 +R 00 00 01 00 +T ED 04 00 00 +R 00 00 01 00 +T ED 04 00 00 2A 4C 00 00 00 ED 4B 4E 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T F4 04 00 00 CD 00 00 00 00 22 4C 00 00 00 ED +R 00 00 01 00 02 05 06 00 00 0A 04 00 +T FB 04 00 00 43 4E 00 00 00 +R 00 00 01 00 00 05 04 00 +T FE 04 00 00 +R 00 00 01 00 +T FE 04 00 00 18 6A +R 00 00 01 00 +T 00 05 00 00 +R 00 00 01 00 +T 00 05 00 00 DD 46 04 05 20 11 +R 00 00 01 00 +T 06 05 00 00 +R 00 00 01 00 +T 06 05 00 00 2A 52 00 00 00 ED 4B 54 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 0D 05 00 00 CD 00 00 00 00 22 52 00 00 00 ED +R 00 00 01 00 02 05 06 00 00 0A 04 00 +T 14 05 00 00 43 54 00 00 00 +R 00 00 01 00 00 05 04 00 +T 17 05 00 00 +R 00 00 01 00 +T 17 05 00 00 18 51 +R 00 00 01 00 +T 19 05 00 00 +R 00 00 01 00 +T 19 05 00 00 DD 7E 04 FE 01 38 17 FE 03 30 13 +R 00 00 01 00 +T 24 05 00 00 +R 00 00 01 00 +T 24 05 00 00 2A 52 00 00 00 ED 4B 54 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 2B 05 00 00 CD 00 00 00 00 22 52 00 00 00 ED +R 00 00 01 00 02 05 06 00 00 0A 04 00 +T 32 05 00 00 43 54 00 00 00 18 00 +R 00 00 01 00 00 05 04 00 +T 37 05 00 00 +R 00 00 01 00 +T 37 05 00 00 18 31 +R 00 00 01 00 +T 39 05 00 00 +R 00 00 01 00 +T 39 05 00 00 DD 7E 04 FE 01 38 17 FE 03 30 13 +R 00 00 01 00 +T 44 05 00 00 +R 00 00 01 00 +T 44 05 00 00 2A 58 00 00 00 ED 4B 5A 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 4B 05 00 00 CD 00 00 00 00 22 58 00 00 00 ED +R 00 00 01 00 02 05 06 00 00 0A 04 00 +T 52 05 00 00 43 5A 00 00 00 18 00 +R 00 00 01 00 00 05 04 00 +T 57 05 00 00 +R 00 00 01 00 +T 57 05 00 00 2A 5E 00 00 00 ED 4B 60 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 5E 05 00 00 CD 00 00 00 00 22 5E 00 00 00 ED +R 00 00 01 00 02 05 01 00 00 0A 04 00 +T 65 05 00 00 43 60 00 00 00 18 00 +R 00 00 01 00 00 05 04 00 +T 6A 05 00 00 +R 00 00 01 00 +T 6A 05 00 00 DD 7E 04 FE 05 28 07 DD 7E 04 FE +R 00 00 01 00 +T 75 05 00 00 08 20 11 +R 00 00 01 00 +T 78 05 00 00 +R 00 00 01 00 +T 78 05 00 00 +R 00 00 01 00 +T 78 05 00 00 +R 00 00 01 00 +T 78 05 00 00 2A 5E 00 00 00 ED 4B 60 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 7F 05 00 00 CD 00 00 00 00 22 5E 00 00 00 ED +R 00 00 01 00 02 05 06 00 00 0A 04 00 +T 86 05 00 00 43 60 00 00 00 +R 00 00 01 00 00 05 04 00 +T 89 05 00 00 +R 00 00 01 00 +T 89 05 00 00 21 6C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 94 05 00 00 23 B6 23 B6 28 28 +R 00 00 01 00 +T 9A 05 00 00 +R 00 00 01 00 +T 9A 05 00 00 DD 4E 04 06 00 C5 DD 4E FE 06 00 +R 00 00 01 00 +T A5 05 00 00 C5 DD 5E 02 DD 56 03 21 6C 00 DD +R 00 00 01 00 +T B0 05 00 00 4E 02 DD 46 03 09 4E 23 46 23 7E +R 00 00 01 00 +T BB 05 00 00 69 60 C1 CD 00 00 00 00 E1 +R 00 00 01 00 02 08 00 00 +T C2 05 00 00 +R 00 00 01 00 +T C2 05 00 00 DD 7E 04 FE 04 38 65 FE 06 30 61 +R 00 00 01 00 +T CD 05 00 00 +R 00 00 01 00 +T CD 05 00 00 21 69 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T D8 05 00 00 23 B6 23 B6 28 4E +R 00 00 01 00 +T DE 05 00 00 +R 00 00 01 00 +T DE 05 00 00 21 7C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T E9 05 00 00 23 46 23 5E 23 56 69 60 D5 E5 21 +R 00 00 01 00 +T F4 05 00 00 5E 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T FF 05 00 00 46 23 5E 23 56 69 60 A7 C1 ED 42 +R 00 00 01 00 +T 0A 06 00 00 EB C1 ED 42 E5 D5 DD 5E 02 DD 56 +R 00 00 01 00 +T 15 06 00 00 03 21 69 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 20 06 00 00 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 28 06 00 00 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 00 00 +T 2C 06 00 00 +R 00 00 01 00 +T 2C 06 00 00 18 00 +R 00 00 01 00 +T 2E 06 00 00 +R 00 00 01 00 +T 2E 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 31 06 00 00 +R 00 00 01 00 +T 31 06 00 00 CD 00 00 00 00 FA FF DD 7E 02 DD +R 00 00 01 00 02 05 0E 00 +T 3A 06 00 00 B6 03 DD B6 04 DD B6 05 20 03 +R 00 00 01 00 +T 44 06 00 00 +R 00 00 01 00 +T 44 06 00 00 C3 08 08 00 00 +R 00 00 01 00 00 05 01 00 +T 47 06 00 00 +R 00 00 01 00 +T 47 06 00 00 DD 7E 02 E6 0F 4F DD 7E 03 E6 00 +R 00 00 01 00 +T 52 06 00 00 47 11 0C 00 CD 00 00 00 00 21 +R 00 00 01 00 02 09 0F 00 +T 5A 06 00 00 06 00 00 00 19 DD 75 FA DD 74 FB +R 00 00 01 00 00 04 03 00 +T 63 06 00 00 4E 23 46 23 5E 23 56 69 60 DD 4E +R 00 00 01 00 +T 6E 06 00 00 02 DD 46 03 A7 ED 42 20 0B EB DD +R 00 00 01 00 +T 79 06 00 00 4E 04 DD 46 05 ED 42 28 4D +R 00 00 01 00 +T 82 06 00 00 +R 00 00 01 00 +T 82 06 00 00 +R 00 00 01 00 +T 82 06 00 00 DD 4E 04 DD 46 05 DD 6E 02 DD 66 +R 00 00 01 00 +T 8D 06 00 00 03 E5 DD 6E FA DD 66 FB D1 73 23 +R 00 00 01 00 +T 98 06 00 00 72 23 71 23 70 21 04 00 DD 4E FA +R 00 00 01 00 +T A3 06 00 00 DD 46 FB 09 DD 4E 0C DD 46 0D DD +R 00 00 01 00 +T AE 06 00 00 5E 0A DD 56 0B 73 23 72 23 71 23 +R 00 00 01 00 +T B9 06 00 00 70 21 08 00 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T C4 06 00 00 AF 77 23 77 23 77 23 77 C3 +R 00 00 01 00 +T CD 06 00 00 08 08 00 00 +R 00 00 01 00 00 04 01 00 +T CF 06 00 00 +R 00 00 01 00 +T CF 06 00 00 DD 6E 0C DD 66 0D E5 DD 6E 0A DD +R 00 00 01 00 +T DA 06 00 00 66 0B E5 21 04 00 DD 4E FA DD 46 +R 00 00 01 00 +T E5 06 00 00 FB 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T F0 06 00 00 00 00 00 00 30 2E 21 04 00 DD 4E +R 00 00 01 00 02 04 0D 00 +T F9 06 00 00 FA DD 46 FB 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 04 07 00 00 56 69 60 4D 44 DD 6E 0A DD 66 0B +R 00 00 01 00 +T 0F 07 00 00 A7 ED 42 4D 44 DD 6E 0C DD 66 0D +R 00 00 01 00 +T 1A 07 00 00 ED 52 E5 69 60 C1 18 28 +R 00 00 01 00 +T 22 07 00 00 +R 00 00 01 00 +T 22 07 00 00 21 04 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T 2D 07 00 00 23 46 23 5E 23 56 69 60 A7 DD 4E +R 00 00 01 00 +T 38 07 00 00 0A DD 46 0B ED 42 EB DD 4E 0C DD +R 00 00 01 00 +T 43 07 00 00 46 0D ED 42 4D 44 EB +R 00 00 01 00 +T 4A 07 00 00 +R 00 00 01 00 +T 4A 07 00 00 DD 75 FC DD 74 FD DD 71 FE DD 70 +R 00 00 01 00 +T 55 07 00 00 FF 21 04 00 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T 60 07 00 00 5E 23 56 23 4E 23 46 C5 D5 01 +R 00 00 01 00 +T 6A 07 00 00 00 00 21 07 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 0C 00 +T 73 07 00 00 E5 DD 6E 0A DD 66 0B C1 09 EB DD +R 00 00 01 00 +T 7E 07 00 00 6E 0C DD 66 0D C1 ED 4A E5 D5 21 +R 00 00 01 00 +T 89 07 00 00 04 00 C1 09 EB 21 00 00 C1 ED 4A +R 00 00 01 00 +T 94 07 00 00 4D 44 EB 3E 03 CD 00 00 00 00 E5 +R 00 00 01 00 02 0A 14 00 +T 9D 07 00 00 21 04 00 DD 5E FA DD 56 FB 19 D1 +R 00 00 01 00 +T A8 07 00 00 73 23 72 23 71 23 70 21 08 00 DD +R 00 00 01 00 +T B3 07 00 00 4E FA DD 46 FB 09 5E 23 56 23 4E +R 00 00 01 00 +T BE 07 00 00 23 46 C5 D5 01 00 00 21 03 00 CD +R 00 00 01 00 +T C9 07 00 00 00 00 00 00 C5 E5 DD 6E FC DD 66 +R 00 00 01 00 02 04 0C 00 +T D2 07 00 00 FD C1 09 EB DD 6E FE DD 66 FF C1 +R 00 00 01 00 +T DD 07 00 00 ED 4A E5 D5 21 02 00 C1 09 EB 21 +R 00 00 01 00 +T E8 07 00 00 00 00 C1 ED 4A 4D 44 EB 3E 02 CD +R 00 00 01 00 +T F3 07 00 00 00 00 00 00 E5 21 08 00 DD 5E FA +R 00 00 01 00 02 04 14 00 +T FC 07 00 00 DD 56 FB 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 07 08 00 00 70 +R 00 00 01 00 +T 08 08 00 00 +R 00 00 01 00 +T 08 08 00 00 +R 00 00 01 00 +T 08 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 0B 08 00 00 +R 00 00 01 00 +T 0B 08 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 0E 00 +T 14 08 00 00 B6 03 DD B6 04 DD B6 05 20 05 +R 00 00 01 00 +T 1E 08 00 00 +R 00 00 01 00 +T 1E 08 00 00 21 00 00 18 46 +R 00 00 01 00 +T 23 08 00 00 +R 00 00 01 00 +T 23 08 00 00 DD 7E 02 E6 0F 4F DD 7E 03 E6 00 +R 00 00 01 00 +T 2E 08 00 00 47 11 0C 00 CD 00 00 00 00 21 +R 00 00 01 00 02 09 0F 00 +T 36 08 00 00 06 00 00 00 19 DD 75 FE DD 74 FF +R 00 00 01 00 00 04 03 00 +T 3F 08 00 00 4E 23 46 23 5E 23 56 69 60 DD 4E +R 00 00 01 00 +T 4A 08 00 00 02 DD 46 03 A7 ED 42 20 0B EB DD +R 00 00 01 00 +T 55 08 00 00 4E 04 DD 46 05 ED 42 28 05 +R 00 00 01 00 +T 5E 08 00 00 +R 00 00 01 00 +T 5E 08 00 00 +R 00 00 01 00 +T 5E 08 00 00 21 00 00 18 06 +R 00 00 01 00 +T 63 08 00 00 +R 00 00 01 00 +T 63 08 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 69 08 00 00 +R 00 00 01 00 +T 69 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 6C 08 00 00 +R 00 00 01 00 +T 6C 08 00 00 CD 00 00 00 00 FA FF 2A +R 00 00 01 00 02 05 0E 00 +T 72 08 00 00 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 00 04 03 00 +T 7A 08 00 00 +R 00 00 01 00 +T 7A 08 00 00 DD 7E FA DD B6 FB CA 3A 09 00 00 +R 00 00 01 00 00 0B 01 00 +T 83 08 00 00 +R 00 00 01 00 +T 83 08 00 00 21 74 00 DD 4E FA DD 46 FB 09 EB +R 00 00 01 00 +T 8E 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 94 08 00 00 00 00 00 00 21 76 00 09 EB 3E +R 00 00 01 00 02 04 00 00 +T 9C 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T A1 08 00 00 00 00 00 00 21 80 00 09 46 23 66 +R 00 00 01 00 02 04 00 00 +T AA 08 00 00 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T B1 08 00 00 +R 00 00 01 00 +T B1 08 00 00 DD 7E FC DD B6 FD 28 58 +R 00 00 01 00 +T B9 08 00 00 +R 00 00 01 00 +T B9 08 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T C4 08 00 00 75 FE DD 74 FF DD 7E 02 DD B6 03 +R 00 00 01 00 +T CF 08 00 00 28 1F +R 00 00 01 00 +T D1 08 00 00 +R 00 00 01 00 +T D1 08 00 00 21 21 00 DD 4E FC DD 46 FD 09 EB +R 00 00 01 00 +T DC 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 11 00 02 0A 11 00 +T E2 08 00 00 00 00 00 00 59 50 3E 00 00 00 00 +R 00 00 01 00 02 04 00 00 2B 0B 09 00 +T E8 08 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T EF 08 00 00 13 +R 00 00 01 00 +T F0 08 00 00 +R 00 00 01 00 +T F0 08 00 00 21 21 00 DD 4E FC DD 46 FD 09 EB +R 00 00 01 00 +T FB 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 01 09 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 03 09 00 00 +R 00 00 01 00 +T 03 09 00 00 DD 6E FE DD 66 FF DD 75 FC DD 74 +R 00 00 01 00 +T 0E 09 00 00 FD 18 A0 +R 00 00 01 00 +T 11 09 00 00 +R 00 00 01 00 +T 11 09 00 00 DD 7E 02 DD B6 03 28 0E +R 00 00 01 00 +T 19 09 00 00 +R 00 00 01 00 +T 19 09 00 00 21 80 00 DD 4E FA DD 46 FB 09 AF +R 00 00 01 00 +T 24 09 00 00 77 23 77 +R 00 00 01 00 +T 27 09 00 00 +R 00 00 01 00 +T 27 09 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T 32 09 00 00 75 FA DD 74 FB C3 7A 08 00 00 +R 00 00 01 00 00 0A 01 00 +T 3A 09 00 00 +R 00 00 01 00 +T 3A 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 +T 01 00 00 00 +R 00 00 02 00 +T 01 00 00 00 43 6C 6F 73 65 64 00 +R 00 00 02 00 +T 08 00 00 00 +R 00 00 02 00 +T 08 00 00 00 4C 69 73 74 65 6E 00 +R 00 00 02 00 +T 0F 00 00 00 +R 00 00 02 00 +T 0F 00 00 00 53 59 4E 20 73 65 6E 74 00 +R 00 00 02 00 +T 18 00 00 00 +R 00 00 02 00 +T 18 00 00 00 53 59 4E 20 72 65 63 76 00 +R 00 00 02 00 +T 21 00 00 00 +R 00 00 02 00 +T 21 00 00 00 45 73 74 61 62 00 +R 00 00 02 00 +T 27 00 00 00 +R 00 00 02 00 +T 27 00 00 00 46 49 4E 77 61 69 74 31 00 +R 00 00 02 00 +T 30 00 00 00 +R 00 00 02 00 +T 30 00 00 00 46 49 4E 77 61 69 74 32 00 +R 00 00 02 00 +T 39 00 00 00 +R 00 00 02 00 +T 39 00 00 00 43 6C 6F 73 65 77 61 69 74 00 +R 00 00 02 00 +T 43 00 00 00 +R 00 00 02 00 +T 43 00 00 00 4C 61 73 74 20 41 43 4B 00 +R 00 00 02 00 +T 4C 00 00 00 +R 00 00 02 00 +T 4C 00 00 00 43 6C 6F 73 69 6E 67 00 +R 00 00 02 00 +T 54 00 00 00 +R 00 00 02 00 +T 54 00 00 00 54 69 6D 65 77 61 69 74 00 +R 00 00 02 00 +T 5D 00 00 00 +R 00 00 02 00 +T 5D 00 00 00 4E 6F 72 6D 61 6C 00 +R 00 00 02 00 +T 64 00 00 00 +R 00 00 02 00 +T 64 00 00 00 52 65 73 65 74 2F 52 65 66 75 73 +R 00 00 02 00 +T 6F 00 00 00 65 64 00 +R 00 00 02 00 +T 72 00 00 00 +R 00 00 02 00 +T 72 00 00 00 54 69 6D 65 6F 75 74 00 +R 00 00 02 00 +T 7A 00 00 00 +R 00 00 02 00 +T 7A 00 00 00 49 43 4D 50 00 +R 00 00 02 00 +T 7F 00 00 00 +R 00 00 02 00 +T 7F 00 00 00 74 63 70 52 74 6F 41 6C 67 6F 72 +R 00 00 02 00 +T 8A 00 00 00 69 74 68 6D 00 +R 00 00 02 00 +T 8F 00 00 00 +R 00 00 02 00 +T 8F 00 00 00 74 63 70 52 74 6F 4D 69 6E 00 +R 00 00 02 00 +T 99 00 00 00 +R 00 00 02 00 +T 99 00 00 00 74 63 70 52 74 6F 4D 61 78 00 +R 00 00 02 00 +T A3 00 00 00 +R 00 00 02 00 +T A3 00 00 00 74 63 70 4D 61 78 43 6F 6E 6E 00 +R 00 00 02 00 +T AE 00 00 00 +R 00 00 02 00 +T AE 00 00 00 74 63 70 41 63 74 69 76 65 4F 70 +R 00 00 02 00 +T B9 00 00 00 65 6E 73 00 +R 00 00 02 00 +T BD 00 00 00 +R 00 00 02 00 +T BD 00 00 00 74 63 70 50 61 73 73 69 76 65 4F +R 00 00 02 00 +T C8 00 00 00 70 65 6E 73 00 +R 00 00 02 00 +T CD 00 00 00 +R 00 00 02 00 +T CD 00 00 00 74 63 70 41 74 74 65 6D 70 74 46 +R 00 00 02 00 +T D8 00 00 00 61 69 6C 73 00 +R 00 00 02 00 +T DD 00 00 00 +R 00 00 02 00 +T DD 00 00 00 74 63 70 45 73 74 61 62 52 65 73 +R 00 00 02 00 +T E8 00 00 00 65 74 73 00 +R 00 00 02 00 +T EC 00 00 00 +R 00 00 02 00 +T EC 00 00 00 74 63 70 43 75 72 72 45 73 74 61 +R 00 00 02 00 +T F7 00 00 00 62 00 +R 00 00 02 00 +T F9 00 00 00 +R 00 00 02 00 +T F9 00 00 00 74 63 70 49 6E 53 65 67 73 00 +R 00 00 02 00 +T 03 01 00 00 +R 00 00 02 00 +T 03 01 00 00 74 63 70 4F 75 74 53 65 67 73 00 +R 00 00 02 00 +T 0E 01 00 00 +R 00 00 02 00 +T 0E 01 00 00 74 63 70 52 65 74 72 61 6E 73 53 +R 00 00 02 00 +T 19 01 00 00 65 67 73 00 +R 00 00 02 00 +T 1D 01 00 00 +R 00 00 02 00 +T 1D 01 00 00 74 63 70 49 6E 45 72 72 73 00 +R 00 00 02 00 +T 27 01 00 00 +R 00 00 02 00 +T 27 01 00 00 74 63 70 4F 75 74 52 73 74 73 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 18 00 00 00 +R 00 00 04 00 +T 18 00 00 00 +R 00 00 04 00 +T 20 00 00 00 +R 00 00 04 00 +T 20 00 00 00 +R 00 00 04 00 +T 22 00 00 00 +R 00 00 04 00 +T 22 00 00 00 +R 00 00 04 00 +T 26 00 00 00 +R 00 00 04 00 +T 26 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 00 00 01 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 04 00 00 00 08 00 00 00 0F 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 08 00 00 00 18 00 00 00 21 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 0C 00 00 00 27 00 00 00 30 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 10 00 00 00 39 00 00 00 43 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 14 00 00 00 4C 00 00 00 54 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 18 00 00 00 5D 00 00 00 64 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 1C 00 00 00 72 00 00 00 7A 00 00 00 00 02 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 22 00 00 00 88 13 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 2C 00 00 00 7F 00 00 00 04 00 00 00 +R 00 00 05 00 00 04 02 00 +T 32 00 00 00 8F 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 38 00 00 00 99 00 00 00 FF FF FF FF +R 00 00 05 00 00 04 02 00 +T 3E 00 00 00 A3 00 00 00 FF FF FF FF +R 00 00 05 00 00 04 02 00 +T 44 00 00 00 AE 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 4A 00 00 00 BD 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 50 00 00 00 CD 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 56 00 00 00 DD 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 5C 00 00 00 EC 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 62 00 00 00 F9 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 68 00 00 00 03 01 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 6E 00 00 00 0E 01 00 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 76 00 00 00 00 00 00 00 1D 01 00 00 +R 00 00 05 00 00 08 02 00 +T 7C 00 00 00 00 00 00 00 27 01 00 00 +R 00 00 05 00 00 08 02 00 +T 82 00 00 00 00 00 00 00 +R 00 00 05 00 diff --git a/src/nos/lib/internet_lib/tcptimer.rel b/src/nos/lib/internet_lib/tcptimer.rel new file mode 100644 index 00000000..1abb52f6 --- /dev/null +++ b/src/nos/lib/internet_lib/tcptimer.rel @@ -0,0 +1,147 @@ +XL4 +H 2 areas 11 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _stop_timer Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _tcp_output Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _close_self Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1C3 flags 0 +S _backoff Def0000019F +S _tcp_timeout Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 02 DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 66 03 DD 75 FA DD 74 FB 7D B4 20 +R 00 00 01 00 +T 14 00 00 00 03 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 C3 9C 01 00 00 +R 00 00 01 00 00 05 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 21 82 00 DD 4E FA DD 46 FB 09 EB +R 00 00 01 00 +T 23 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 29 00 00 00 00 00 00 00 21 0E 00 09 7E FE 0B +R 00 00 01 00 02 04 00 00 +T 32 00 00 00 20 14 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 01 00 00 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 3E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 43 00 00 00 00 00 00 00 C3 9C 01 00 00 +R 00 00 01 00 02 04 00 00 00 09 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 21 B4 00 DD 4E FA DD 46 FB 09 CD +R 00 00 01 00 +T 53 00 00 00 00 00 00 00 21 6F 00 DD 4E FA DD +R 00 00 01 00 02 04 0A 00 +T 5C 00 00 00 46 FB 09 7E F6 04 77 23 7E F6 00 +R 00 00 01 00 +T 67 00 00 00 77 21 72 00 09 34 23 20 01 34 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 21 00 00 E5 21 02 00 E5 21 35 00 +R 00 00 01 00 +T 7C 00 00 00 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 86 00 00 00 00 00 00 00 E5 21 39 00 DD 5E FA +R 00 00 01 00 02 04 0B 00 +T 8F 00 00 00 DD 56 FB 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 9A 00 00 00 70 21 39 00 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T A5 00 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T AF 00 00 00 5A 00 DD 4E FA DD 46 FB 09 5E 23 +R 00 00 01 00 +T BA 00 00 00 56 23 4E 23 46 EB CD 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T C3 00 00 00 30 14 21 39 00 DD 4E FA DD 46 FB +R 00 00 01 00 +T CE 00 00 00 09 5E 23 56 23 4E 23 46 EB 18 12 +R 00 00 01 00 +T D9 00 00 00 +R 00 00 01 00 +T D9 00 00 00 21 5A 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T E4 00 00 00 23 56 23 4E 23 46 EB +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 E5 21 39 00 DD 5E FA DD 56 FB 19 +R 00 00 01 00 +T F6 00 00 00 D1 73 23 72 23 71 23 70 21 5A 00 +R 00 00 01 00 +T 01 01 00 00 DD 4E FA DD 46 FB 09 4E 23 46 23 +R 00 00 01 00 +T 0C 01 00 00 5E 23 56 69 60 E5 21 35 00 DD 4E +R 00 00 01 00 +T 17 01 00 00 FA DD 46 FB 09 C1 D5 59 50 C1 73 +R 00 00 01 00 +T 22 01 00 00 23 72 23 71 23 70 21 1A 00 DD 4E +R 00 00 01 00 +T 2D 01 00 00 FA DD 46 FB 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 38 01 00 00 56 69 60 DD 75 FC DD 74 FD DD 73 +R 00 00 01 00 +T 43 01 00 00 FE DD 72 FF 21 12 00 DD 4E FA DD +R 00 00 01 00 +T 4E 01 00 00 46 FB 09 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T 59 01 00 00 60 E5 21 1A 00 DD 4E FA DD 46 FB +R 00 00 01 00 +T 64 01 00 00 09 C1 D5 59 50 C1 73 23 72 23 71 +R 00 00 01 00 +T 6F 01 00 00 23 70 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 78 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 7D 01 00 00 00 00 00 00 21 1A 00 DD 4E FA DD +R 00 00 01 00 02 04 00 00 +T 86 01 00 00 46 FB 09 DD 4E FE DD 46 FF DD 5E +R 00 00 01 00 +T 91 01 00 00 FC DD 56 FD 73 23 72 23 71 23 70 +R 00 00 01 00 +T 9C 01 00 00 +R 00 00 01 00 +T 9C 01 00 00 +R 00 00 01 00 +T 9C 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 CD 00 00 00 00 4B 42 21 1F 00 CD +R 00 00 01 00 02 05 07 00 +T A8 01 00 00 00 00 00 00 30 08 +R 00 00 01 00 02 04 0C 00 +T AC 01 00 00 +R 00 00 01 00 +T AC 01 00 00 DD 36 02 1F DD 36 03 00 +R 00 00 01 00 +T B4 01 00 00 +R 00 00 01 00 +T B4 01 00 00 DD 7E 02 01 00 00 21 01 00 CD +R 00 00 01 00 +T BE 01 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 09 0E 00 diff --git a/src/nos/lib/internet_lib/tcpuser.rel b/src/nos/lib/internet_lib/tcpuser.rel new file mode 100644 index 00000000..3a7cd246 --- /dev/null +++ b/src/nos/lib/internet_lib/tcpuser.rel @@ -0,0 +1,963 @@ +XL4 +H 4 areas 2B global symbols +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _stop_timer Ref00000000 +S _memset Ref00000000 +S _create_tcb Ref00000000 +S _Tcbs Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _tcp_output Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _close_self Ref00000000 +S _kwait Ref00000000 +S _pullup Ref00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _send_syn Ref00000000 +S _reset Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _tcp_timeout Ref00000000 +S _Net_error Ref00000000 +S _free_p Ref00000000 +S _lookup_tcb Ref00000000 +S _settcpstate Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _append Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A81 flags 0 +S _kick_tcp Def0000084C +S _reset_tcp Def00000952 +S _tcpval Def000007FB +S _send_tcp Def00000232 +S _recv_tcp Def000003C6 +S _open_tcp Def00000000 +S _del_tcp Def000006D1 +S _kick Def0000088B +S _reset_all Def00000902 +S _close_tcp Def000005ED +A IDATA0 size 2 flags 0 +S _Tcp_window Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF DD 7E 02 DD +R 00 00 01 00 02 05 14 00 +T 09 00 00 00 B6 03 20 0C +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 07 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 17 00 +T 16 00 00 00 C3 2F 02 00 00 +R 00 00 01 00 00 05 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 DD 6E 02 DD 66 03 5E 23 56 23 4E +R 00 00 01 00 +T 24 00 00 00 23 46 EB DD 75 F2 DD 74 F3 DD 71 +R 00 00 01 00 +T 2F 00 00 00 F4 DD 70 F5 21 04 00 DD 4E 02 DD +R 00 00 01 00 +T 3A 00 00 00 46 03 09 46 23 66 68 DD 75 F6 DD +R 00 00 01 00 +T 45 00 00 00 74 F7 DD 7E 04 DD B6 05 28 30 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 DD 6E 04 DD 66 05 5E 23 56 23 4E +R 00 00 01 00 +T 5A 00 00 00 23 46 EB DD 75 F8 DD 74 F9 DD 71 +R 00 00 01 00 +T 65 00 00 00 FA DD 70 FB 21 04 00 DD 4E 04 DD +R 00 00 01 00 +T 70 00 00 00 46 05 09 46 23 66 68 DD 75 FC DD +R 00 00 01 00 +T 7B 00 00 00 74 FD 18 14 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 AF DD 77 F8 DD 77 F9 DD 77 FA DD +R 00 00 01 00 +T 8A 00 00 00 77 FB AF DD 77 FC DD 77 FD +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 19 00 +T 9B 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 19 00 02 0A 01 00 +T A2 00 00 00 75 FE DD 74 FF 7D B4 20 26 +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T B3 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T BA 00 00 00 75 FE DD 74 FF 7D B4 20 0C +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 21 04 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 17 00 +T CC 00 00 00 C3 2F 02 00 00 +R 00 00 01 00 00 05 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 18 1B +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 21 0E 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T DC 00 00 00 05 05 28 0C +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 21 01 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 17 00 +T E9 00 00 00 C3 2F 02 00 00 +R 00 00 01 00 00 05 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 21 AA 00 DD 4E FE DD 46 FF 09 DD +R 00 00 01 00 +T F7 00 00 00 4E 1C DD 46 1D 71 23 70 DD 7E 0C +R 00 00 01 00 +T 02 01 00 00 DD B6 0D 28 2F +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 21 43 00 DD 4E FE DD 46 FF 09 DD +R 00 00 01 00 +T 12 01 00 00 5E 0C DD 56 0D 01 00 00 73 23 72 +R 00 00 01 00 +T 1D 01 00 00 23 71 23 70 C5 21 5E 00 DD 4E FE +R 00 00 01 00 +T 28 01 00 00 DD 46 FF 09 C1 73 23 72 23 71 23 +R 00 00 01 00 +T 33 01 00 00 70 18 2B +R 00 00 01 00 +T 36 01 00 00 +R 00 00 01 00 +T 36 01 00 00 21 43 00 DD 4E FE DD 46 FF 09 ED +R 00 00 01 00 +T 41 01 00 00 5B 00 00 00 00 01 00 00 73 23 72 +R 00 00 01 00 00 05 02 00 +T 4A 01 00 00 23 71 23 70 C5 21 5E 00 DD 4E FE +R 00 00 01 00 +T 55 01 00 00 DD 46 FF 09 C1 73 23 72 23 71 23 +R 00 00 01 00 +T 60 01 00 00 70 +R 00 00 01 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 21 26 00 DD 4E FE DD 46 FF 09 AF +R 00 00 01 00 +T 6C 01 00 00 36 01 23 77 23 77 23 77 21 66 00 +R 00 00 01 00 +T 77 01 00 00 09 DD 7E 10 DD 5E 0E DD 56 0F 73 +R 00 00 01 00 +T 82 01 00 00 23 72 23 77 21 69 00 09 DD 7E 14 +R 00 00 01 00 +T 8D 01 00 00 DD 5E 12 DD 56 13 73 23 72 23 77 +R 00 00 01 00 +T 98 01 00 00 21 6C 00 09 DD 7E 18 DD 5E 16 DD +R 00 00 01 00 +T A3 01 00 00 56 17 73 23 72 23 77 21 71 00 09 +R 00 00 01 00 +T AE 01 00 00 DD 46 1A 70 DD 5E 0A DD 56 0B CD +R 00 00 01 00 +T B9 01 00 00 00 00 00 00 00 00 03 00 +R 00 00 01 00 02 04 02 00 +T BF 01 00 00 29 02 00 00 DA 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T C3 01 00 00 EC 01 00 00 C7 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T C7 01 00 00 +R 00 00 01 00 +T C7 01 00 00 21 6F 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T D2 01 00 00 F6 02 77 23 7E F6 00 77 +R 00 00 01 00 +T DA 01 00 00 +R 00 00 01 00 +T DA 01 00 00 0E 02 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T E3 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T E8 01 00 00 00 00 00 00 18 3D +R 00 00 01 00 02 04 01 00 +T EC 01 00 00 +R 00 00 01 00 +T EC 01 00 00 21 6F 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T F7 01 00 00 F6 08 77 23 7E F6 00 77 59 50 3E +R 00 00 01 00 +T 02 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 07 02 00 00 00 00 00 00 0E 03 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 10 02 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 16 02 00 00 CD 00 00 00 00 DD 5E FE DD 56 FF +R 00 00 01 00 02 05 01 00 +T 1F 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 25 02 00 00 00 00 00 00 18 00 +R 00 00 01 00 02 04 01 00 +T 29 02 00 00 +R 00 00 01 00 +T 29 02 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 2F 02 00 00 +R 00 00 01 00 +T 2F 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 32 02 00 00 +R 00 00 01 00 +T 32 02 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 14 00 +T 3B 02 00 00 B6 03 28 13 DD 7E 04 DD B6 05 28 +R 00 00 01 00 +T 46 02 00 00 0B DD 6E 04 DD 66 05 7E 23 B6 20 +R 00 00 01 00 +T 51 02 00 00 1D +R 00 00 01 00 +T 52 02 00 00 +R 00 00 01 00 +T 52 02 00 00 +R 00 00 01 00 +T 52 02 00 00 +R 00 00 01 00 +T 52 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 5A 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T 61 02 00 00 07 00 22 00 00 00 00 01 FF FF 21 +R 00 00 01 00 02 07 17 00 +T 6A 02 00 00 FF FF C3 C3 03 00 00 +R 00 00 01 00 00 07 01 00 +T 6F 02 00 00 +R 00 00 01 00 +T 6F 02 00 00 DD 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T 79 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 7E 02 00 00 00 00 00 00 01 00 00 DD 75 FC DD +R 00 00 01 00 02 04 01 00 +T 87 02 00 00 74 FD DD 71 FE DD 70 FF 21 0E 00 +R 00 00 01 00 +T 92 02 00 00 DD 4E 02 DD 46 03 09 5E CD +R 00 00 01 00 +T 9B 02 00 00 00 00 00 00 01 0B 00 B7 03 00 00 +R 00 00 01 00 02 04 1B 00 00 0B 01 00 +T A2 02 00 00 B8 02 00 00 D5 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A6 02 00 00 59 03 00 00 59 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T AA 02 00 00 59 03 00 00 9B 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T AE 02 00 00 9B 03 00 00 59 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B2 02 00 00 9B 03 00 00 9B 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B6 02 00 00 9B 03 00 00 +R 00 00 01 00 00 04 01 00 +T B8 02 00 00 +R 00 00 01 00 +T B8 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T C0 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T C7 02 00 00 02 00 22 00 00 00 00 01 FF FF 21 +R 00 00 01 00 02 07 17 00 +T D0 02 00 00 FF FF C3 C3 03 00 00 +R 00 00 01 00 00 07 01 00 +T D5 02 00 00 +R 00 00 01 00 +T D5 02 00 00 21 08 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T E0 02 00 00 23 B6 23 B6 23 B6 20 44 21 0C 00 +R 00 00 01 00 +T EB 02 00 00 DD 4E 02 DD 46 03 09 7E 23 B6 20 +R 00 00 01 00 +T F6 02 00 00 35 +R 00 00 01 00 +T F7 02 00 00 +R 00 00 01 00 +T F7 02 00 00 +R 00 00 01 00 +T F7 02 00 00 +R 00 00 01 00 +T F7 02 00 00 DD 4E 04 DD 46 05 21 76 00 DD 5E +R 00 00 01 00 +T 02 03 00 00 02 DD 56 03 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 0A 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 1D 00 02 0A 01 00 +T 11 03 00 00 7C 00 DD 4E 02 DD 46 03 09 DD 4E +R 00 00 01 00 +T 1C 03 00 00 FE DD 46 FF DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 27 03 00 00 00 00 00 00 C3 B7 03 00 00 +R 00 00 01 00 02 04 0A 00 00 09 01 00 +T 2C 03 00 00 +R 00 00 01 00 +T 2C 03 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 37 03 00 00 F6 08 77 23 7E F6 00 77 59 50 3E +R 00 00 01 00 +T 42 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 47 03 00 00 00 00 00 00 0E 03 DD 5E 02 DD 56 +R 00 00 01 00 02 04 01 00 +T 50 03 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 56 03 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 59 03 00 00 +R 00 00 01 00 +T 59 03 00 00 DD 4E 04 DD 46 05 21 76 00 DD 5E +R 00 00 01 00 +T 64 03 00 00 02 DD 56 03 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 6C 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 1D 00 02 0A 01 00 +T 73 03 00 00 7C 00 DD 4E 02 DD 46 03 09 DD 4E +R 00 00 01 00 +T 7E 03 00 00 FE DD 46 FF DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 89 03 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 0A 00 +T 92 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 97 03 00 00 00 00 00 00 18 1C +R 00 00 01 00 02 04 01 00 +T 9B 03 00 00 +R 00 00 01 00 +T 9B 03 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T A3 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T AA 03 00 00 03 00 22 00 00 00 00 01 FF FF 21 +R 00 00 01 00 02 07 17 00 +T B3 03 00 00 FF FF 18 0C +R 00 00 01 00 +T B7 03 00 00 +R 00 00 01 00 +T B7 03 00 00 DD 4E FE DD 46 FF DD 6E FC DD 66 +R 00 00 01 00 +T C2 03 00 00 FD +R 00 00 01 00 +T C3 03 00 00 +R 00 00 01 00 +T C3 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1F 00 +T C6 03 00 00 +R 00 00 01 00 +T C6 03 00 00 CD 00 00 00 00 7B B2 28 08 DD 7E +R 00 00 01 00 02 05 10 00 +T CF 03 00 00 04 DD B6 05 20 0F +R 00 00 01 00 +T D5 03 00 00 +R 00 00 01 00 +T D5 03 00 00 +R 00 00 01 00 +T D5 03 00 00 +R 00 00 01 00 +T D5 03 00 00 21 07 00 22 00 00 00 00 01 FF FF +R 00 00 01 00 02 08 17 00 +T DE 03 00 00 21 FF FF C3 EA 05 00 00 +R 00 00 01 00 00 08 01 00 +T E4 03 00 00 +R 00 00 01 00 +T E4 03 00 00 21 78 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T EF 03 00 00 23 B6 23 B6 23 B6 20 41 +R 00 00 01 00 +T F7 03 00 00 +R 00 00 01 00 +T F7 03 00 00 21 0E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 02 04 00 00 FE 02 38 13 FE 08 30 0F +R 00 00 01 00 +T 0A 04 00 00 +R 00 00 01 00 +T 0A 04 00 00 21 05 00 22 00 00 00 00 01 FF FF +R 00 00 01 00 02 08 17 00 +T 13 04 00 00 21 FF FF C3 EA 05 00 00 +R 00 00 01 00 00 08 01 00 +T 19 04 00 00 +R 00 00 01 00 +T 19 04 00 00 FE 01 28 08 FE 08 38 17 FE 0C 30 +R 00 00 01 00 +T 24 04 00 00 13 +R 00 00 01 00 +T 25 04 00 00 +R 00 00 01 00 +T 25 04 00 00 DD 6E 04 DD 66 05 AF 77 23 77 01 +R 00 00 01 00 +T 30 04 00 00 00 00 21 00 00 C3 EA 05 00 00 +R 00 00 01 00 00 0A 01 00 +T 38 04 00 00 +R 00 00 01 00 +T 38 04 00 00 +R 00 00 01 00 +T 38 04 00 00 DD 7E 0A DD B6 0B DD B6 0C DD B6 +R 00 00 01 00 +T 43 04 00 00 0D 20 1E +R 00 00 01 00 +T 46 04 00 00 +R 00 00 01 00 +T 46 04 00 00 21 78 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 51 04 00 00 23 56 23 4E 23 46 EB DD 75 0A DD +R 00 00 01 00 +T 5C 04 00 00 74 0B DD 71 0C DD 70 0D +R 00 00 01 00 +T 64 04 00 00 +R 00 00 01 00 +T 64 04 00 00 21 78 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 6F 04 00 00 23 46 23 5E 23 56 D5 C5 DD 4E 0C +R 00 00 01 00 +T 7A 04 00 00 DD 46 0D DD 6E 0A DD 66 0B CD +R 00 00 01 00 +T 84 04 00 00 00 00 00 00 38 42 +R 00 00 01 00 02 04 13 00 +T 88 04 00 00 +R 00 00 01 00 +T 88 04 00 00 21 78 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 93 04 00 00 23 46 23 5E 23 56 69 60 DD 75 0A +R 00 00 01 00 +T 9E 04 00 00 DD 74 0B DD 73 0C DD 72 0D 21 +R 00 00 01 00 +T A8 04 00 00 74 00 DD 4E 02 DD 46 03 09 56 23 +R 00 00 01 00 +T B3 04 00 00 66 6A E5 DD 6E 04 DD 66 05 D1 73 +R 00 00 01 00 +T BE 04 00 00 23 72 21 74 00 09 AF 77 23 77 18 +R 00 00 01 00 +T C9 04 00 00 5C +R 00 00 01 00 +T CA 04 00 00 +R 00 00 01 00 +T CA 04 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T D2 04 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T D9 04 00 00 DD 6E 04 DD 66 05 C1 71 23 70 DD +R 00 00 01 00 +T E4 04 00 00 6E 0A DD 66 0B E5 DD 6E 04 DD 66 +R 00 00 01 00 +T EF 04 00 00 05 46 23 66 68 01 0A 00 09 4E 23 +R 00 00 01 00 +T FA 04 00 00 46 21 74 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 05 05 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 0B 05 00 00 CD 00 00 00 00 F1 DD 6E 04 DD 66 +R 00 00 01 00 02 05 01 00 +T 14 05 00 00 05 46 23 66 68 01 0C 00 09 DD 4E +R 00 00 01 00 +T 1F 05 00 00 0A DD 46 0B 71 23 70 +R 00 00 01 00 +T 26 05 00 00 +R 00 00 01 00 +T 26 05 00 00 21 78 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 31 05 00 00 4E 0C DD 46 0D DD 5E 0A DD 56 0B +R 00 00 01 00 +T 3C 05 00 00 CD 00 00 00 00 21 43 00 DD 4E 02 +R 00 00 01 00 02 05 1E 00 +T 45 05 00 00 DD 46 03 09 DD 4E 0C DD 46 0D DD +R 00 00 01 00 +T 50 05 00 00 5E 0A DD 56 0B CD 00 00 00 00 21 +R 00 00 01 00 02 0A 0A 00 +T 59 05 00 00 43 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 64 05 00 00 56 23 4E 23 46 C5 D5 21 5A 00 DD +R 00 00 01 00 +T 6F 05 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 7A 05 00 00 23 46 EB CD 00 00 00 00 30 5D 21 +R 00 00 01 00 02 08 13 00 +T 83 05 00 00 5A 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 8E 05 00 00 56 23 4E 23 46 C5 D5 21 43 00 DD +R 00 00 01 00 +T 99 05 00 00 4E 02 DD 46 03 09 4E 23 46 23 5E +R 00 00 01 00 +T A4 05 00 00 23 56 69 60 A7 DD 4E 0A DD 46 0B +R 00 00 01 00 +T AF 05 00 00 ED 42 EB DD 4E 0C DD 46 0D ED 42 +R 00 00 01 00 +T BA 05 00 00 4D 44 EB CD 00 00 00 00 30 1D +R 00 00 01 00 02 08 13 00 +T C2 05 00 00 +R 00 00 01 00 +T C2 05 00 00 +R 00 00 01 00 +T C2 05 00 00 +R 00 00 01 00 +T C2 05 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T CD 05 00 00 F6 01 77 23 7E F6 00 77 59 50 3E +R 00 00 01 00 +T D8 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T DD 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T DF 05 00 00 +R 00 00 01 00 +T DF 05 00 00 DD 6E 0A DD 66 0B 7C 07 9F 4F 41 +R 00 00 01 00 +T EA 05 00 00 +R 00 00 01 00 +T EA 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1F 00 +T ED 05 00 00 +R 00 00 01 00 +T ED 05 00 00 CD 00 00 00 00 7B B2 20 0C +R 00 00 01 00 02 05 10 00 +T F4 05 00 00 +R 00 00 01 00 +T F4 05 00 00 21 07 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 17 00 +T FD 05 00 00 C3 CE 06 00 00 +R 00 00 01 00 00 05 01 00 +T 00 06 00 00 +R 00 00 01 00 +T 00 06 00 00 21 0E 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 0B 06 00 00 CD 00 00 00 00 01 0B 00 +R 00 00 01 00 02 05 1B 00 +T 11 06 00 00 CB 06 00 00 29 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 15 06 00 00 2F 06 00 00 2F 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 19 06 00 00 46 06 00 00 46 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 1D 06 00 00 C0 06 00 00 C0 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 21 06 00 00 83 06 00 00 C0 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 25 06 00 00 C0 06 00 00 C0 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 29 06 00 00 +R 00 00 01 00 +T 29 06 00 00 21 00 00 C3 CE 06 00 00 +R 00 00 01 00 00 08 01 00 +T 2F 06 00 00 +R 00 00 01 00 +T 2F 06 00 00 01 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 39 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 3E 06 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 01 00 +T 44 06 00 00 CE 06 00 00 +R 00 00 01 00 00 04 01 00 +T 46 06 00 00 +R 00 00 01 00 +T 46 06 00 00 21 7C 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 51 06 00 00 00 00 00 00 21 16 00 DD 4E 02 DD +R 00 00 01 00 02 04 15 00 +T 5A 06 00 00 46 03 09 CD 00 00 00 00 0E 06 DD +R 00 00 01 00 02 08 15 00 +T 63 06 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1A 00 +T 6B 06 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 1A 00 02 09 01 00 +T 72 06 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 79 06 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 7F 06 00 00 00 00 18 4B +R 00 00 01 00 +T 83 06 00 00 +R 00 00 01 00 +T 83 06 00 00 21 7C 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 8E 06 00 00 00 00 00 00 21 16 00 DD 4E 02 DD +R 00 00 01 00 02 04 15 00 +T 97 06 00 00 46 03 09 CD 00 00 00 00 0E 09 DD +R 00 00 01 00 02 08 15 00 +T A0 06 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1A 00 +T A8 06 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 1A 00 02 09 01 00 +T AF 06 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T B6 06 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T BC 06 00 00 00 00 18 0E +R 00 00 01 00 +T C0 06 00 00 +R 00 00 01 00 +T C0 06 00 00 21 03 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 17 00 +T C9 06 00 00 18 03 +R 00 00 01 00 +T CB 06 00 00 +R 00 00 01 00 +T CB 06 00 00 21 FF FF +R 00 00 01 00 +T CE 06 00 00 +R 00 00 01 00 +T CE 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T D1 06 00 00 +R 00 00 01 00 +T D1 06 00 00 CD 00 00 00 00 F8 FF AF DD 77 FA +R 00 00 01 00 02 05 14 00 +T DA 06 00 00 DD 77 FB 2A 00 00 00 00 DD 75 F8 +R 00 00 01 00 02 08 06 00 +T E3 06 00 00 DD 74 F9 +R 00 00 01 00 +T E6 06 00 00 +R 00 00 01 00 +T E6 06 00 00 DD 7E F8 DD B6 F9 28 31 +R 00 00 01 00 +T EE 06 00 00 +R 00 00 01 00 +T EE 06 00 00 DD 6E 02 DD 66 03 DD 4E F8 DD 46 +R 00 00 01 00 +T F9 06 00 00 F9 A7 ED 42 20 02 +R 00 00 01 00 +T FF 06 00 00 +R 00 00 01 00 +T FF 06 00 00 18 1E +R 00 00 01 00 +T 01 07 00 00 +R 00 00 01 00 +T 01 07 00 00 DD 6E F8 DD 66 F9 DD 75 FA DD 74 +R 00 00 01 00 +T 0C 07 00 00 FB DD 6E F8 DD 66 F9 46 23 66 68 +R 00 00 01 00 +T 17 07 00 00 DD 75 F8 DD 74 F9 18 C7 +R 00 00 01 00 +T 1F 07 00 00 +R 00 00 01 00 +T 1F 07 00 00 DD 7E F8 DD B6 F9 20 0C +R 00 00 01 00 +T 27 07 00 00 +R 00 00 01 00 +T 27 07 00 00 21 07 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 17 00 +T 30 07 00 00 C3 F8 07 00 00 +R 00 00 01 00 00 05 01 00 +T 33 07 00 00 +R 00 00 01 00 +T 33 07 00 00 DD 7E FA DD B6 FB 28 17 +R 00 00 01 00 +T 3B 07 00 00 +R 00 00 01 00 +T 3B 07 00 00 DD 6E F8 DD 66 F9 46 23 66 68 E5 +R 00 00 01 00 +T 46 07 00 00 DD 6E FA DD 66 FB C1 71 23 70 18 +R 00 00 01 00 +T 51 07 00 00 0D +R 00 00 01 00 +T 52 07 00 00 +R 00 00 01 00 +T 52 07 00 00 DD 6E F8 DD 66 F9 46 23 66 68 22 +R 00 00 01 00 +T 5D 07 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 5F 07 00 00 +R 00 00 01 00 +T 5F 07 00 00 21 82 00 DD 4E F8 DD 46 F9 09 EB +R 00 00 01 00 +T 6A 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 70 07 00 00 00 00 00 00 21 80 00 09 46 23 66 +R 00 00 01 00 02 04 01 00 +T 79 07 00 00 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 80 07 00 00 +R 00 00 01 00 +T 80 07 00 00 DD 7E FC DD B6 FD 28 3B +R 00 00 01 00 +T 88 07 00 00 +R 00 00 01 00 +T 88 07 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 93 07 00 00 75 FE DD 74 FF 21 21 00 DD 4E FC +R 00 00 01 00 +T 9E 07 00 00 DD 46 FD 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 18 00 +T A6 07 00 00 00 00 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T AD 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0F 00 02 0A 0F 00 +T B3 07 00 00 00 00 00 00 DD 6E FE DD 66 FF DD +R 00 00 01 00 02 04 01 00 +T BC 07 00 00 75 FC DD 74 FD 18 BD +R 00 00 01 00 +T C3 07 00 00 +R 00 00 01 00 +T C3 07 00 00 21 80 00 DD 4E F8 DD 46 F9 09 AF +R 00 00 01 00 +T CE 07 00 00 77 23 77 21 74 00 09 EB 3E +R 00 00 01 00 +T D7 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T DC 07 00 00 00 00 00 00 21 76 00 09 EB 3E +R 00 00 01 00 02 04 01 00 +T E4 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T E9 07 00 00 00 00 00 00 59 50 3E 00 00 00 00 +R 00 00 01 00 02 04 01 00 2B 0B 0F 00 +T EF 07 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0F 00 02 0A 01 00 +T F6 07 00 00 00 00 +R 00 00 01 00 +T F8 07 00 00 +R 00 00 01 00 +T F8 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T FB 07 00 00 +R 00 00 01 00 +T FB 07 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 14 00 +T 04 08 00 00 B6 03 20 05 +R 00 00 01 00 +T 08 08 00 00 +R 00 00 01 00 +T 08 08 00 00 21 00 00 18 3C +R 00 00 01 00 +T 0D 08 00 00 +R 00 00 01 00 +T 0D 08 00 00 2A 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 06 00 +T 16 08 00 00 +R 00 00 01 00 +T 16 08 00 00 DD 7E FE DD B6 FF 28 28 +R 00 00 01 00 +T 1E 08 00 00 +R 00 00 01 00 +T 1E 08 00 00 DD 6E 02 DD 66 03 DD 4E FE DD 46 +R 00 00 01 00 +T 29 08 00 00 FF A7 ED 42 20 05 +R 00 00 01 00 +T 2F 08 00 00 +R 00 00 01 00 +T 2F 08 00 00 21 01 00 18 15 +R 00 00 01 00 +T 34 08 00 00 +R 00 00 01 00 +T 34 08 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T 3F 08 00 00 75 FE DD 74 FF 18 D0 +R 00 00 01 00 +T 46 08 00 00 +R 00 00 01 00 +T 46 08 00 00 21 00 00 +R 00 00 01 00 +T 49 08 00 00 +R 00 00 01 00 +T 49 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 4C 08 00 00 +R 00 00 01 00 +T 4C 08 00 00 CD 00 00 00 00 3E FB 07 00 00 21 +R 00 00 01 00 02 05 10 00 29 0A 01 00 +T 52 08 00 00 FB 07 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 59 08 00 00 20 05 +R 00 00 01 00 +T 5B 08 00 00 +R 00 00 01 00 +T 5B 08 00 00 21 FF FF 18 28 +R 00 00 01 00 +T 60 08 00 00 +R 00 00 01 00 +T 60 08 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 6B 08 00 00 F6 01 77 23 7E F6 00 77 21 72 00 +R 00 00 01 00 +T 76 08 00 00 09 AF 77 23 77 59 50 3E +R 00 00 01 00 +T 7E 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T 83 08 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 01 00 +T 88 08 00 00 +R 00 00 01 00 +T 88 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 8B 08 00 00 +R 00 00 01 00 +T 8B 08 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 14 00 +T 94 08 00 00 DD 77 FF 2A 00 00 00 00 DD 75 FC +R 00 00 01 00 02 08 06 00 +T 9D 08 00 00 DD 74 FD +R 00 00 01 00 +T A0 08 00 00 +R 00 00 01 00 +T A0 08 00 00 DD 7E FC DD B6 FD 28 51 +R 00 00 01 00 +T A8 08 00 00 +R 00 00 01 00 +T A8 08 00 00 21 08 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T B3 08 00 00 23 46 23 5E 23 56 69 60 DD 4E 02 +R 00 00 01 00 +T BE 08 00 00 DD 46 03 A7 ED 42 20 21 EB DD 4E +R 00 00 01 00 +T C9 08 00 00 04 DD 46 05 ED 42 20 16 +R 00 00 01 00 +T D1 08 00 00 +R 00 00 01 00 +T D1 08 00 00 DD 5E FC DD 56 FD 3E 4C 08 00 00 +R 00 00 01 00 29 0B 01 00 +T D9 08 00 00 21 4C 08 00 00 CD 00 00 00 00 DD +R 00 00 01 00 00 05 01 00 02 0A 01 00 +T E0 08 00 00 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T E7 08 00 00 +R 00 00 01 00 +T E7 08 00 00 +R 00 00 01 00 +T E7 08 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T F2 08 00 00 75 FC DD 74 FD 18 A7 +R 00 00 01 00 +T F9 08 00 00 +R 00 00 01 00 +T F9 08 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T 02 09 00 00 +R 00 00 01 00 +T 02 09 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 14 00 +T 08 09 00 00 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 06 00 +T 10 09 00 00 +R 00 00 01 00 +T 10 09 00 00 DD 7E FC DD B6 FD 28 2C +R 00 00 01 00 +T 18 09 00 00 +R 00 00 01 00 +T 18 09 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 23 09 00 00 75 FE DD 74 FF DD 5E FC DD 56 FD +R 00 00 01 00 +T 2E 09 00 00 3E 52 09 00 00 21 52 09 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 34 09 00 00 00 00 00 00 DD 6E FE DD 66 FF DD +R 00 00 01 00 02 04 01 00 +T 3D 09 00 00 75 FC DD 74 FD 18 CC +R 00 00 01 00 +T 44 09 00 00 +R 00 00 01 00 +T 44 09 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0D 00 +T 4A 09 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 50 09 00 00 00 00 00 00 +R 00 00 01 00 02 04 08 00 +T 52 09 00 00 +R 00 00 01 00 +T 52 09 00 00 CD 00 00 00 00 A2 FF DD 7E 02 DD +R 00 00 01 00 02 05 14 00 +T 5B 09 00 00 B6 03 20 03 +R 00 00 01 00 +T 5F 09 00 00 +R 00 00 01 00 +T 5F 09 00 00 C3 7E 0A 00 00 +R 00 00 01 00 00 05 01 00 +T 62 09 00 00 +R 00 00 01 00 +T 62 09 00 00 21 0E 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 6D 09 00 00 05 05 CA 6D 0A 00 00 +R 00 00 01 00 00 07 01 00 +T 72 09 00 00 +R 00 00 01 00 +T 72 09 00 00 21 1F 00 E5 01 00 00 21 02 00 39 +R 00 00 01 00 +T 7D 09 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 82 09 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 89 09 00 00 3F 00 E5 01 00 00 21 21 00 39 5D +R 00 00 01 00 +T 94 09 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 9A 09 00 00 CD 00 00 00 00 F1 21 06 00 DD 4E +R 00 00 01 00 02 05 01 00 +T A3 09 00 00 02 DD 46 03 09 56 23 66 6A DD 75 +R 00 00 01 00 +T AE 09 00 00 A4 DD 74 A5 21 0C 00 09 56 23 66 +R 00 00 01 00 +T B9 09 00 00 6A DD 75 A2 DD 74 A3 21 1D 00 39 +R 00 00 01 00 +T C4 09 00 00 7E F6 04 77 23 7E F6 00 77 21 +R 00 00 01 00 +T CE 09 00 00 26 00 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T D9 09 00 00 D5 21 16 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T E4 09 00 00 4E 23 46 23 5E 23 56 69 60 C1 09 +R 00 00 01 00 +T EF 09 00 00 EB C1 ED 4A E5 D5 21 FF FF C1 09 +R 00 00 01 00 +T FA 09 00 00 EB 21 FF FF C1 ED 4A 4D 44 EB DD +R 00 00 01 00 +T 05 0A 00 00 75 AA DD 74 AB DD 71 AC DD 70 AD +R 00 00 01 00 +T 10 0A 00 00 DD 6E 02 DD 66 03 23 23 5E 23 56 +R 00 00 01 00 +T 1B 0A 00 00 23 4E 23 46 EB DD 75 C5 DD 74 C6 +R 00 00 01 00 +T 26 0A 00 00 DD 71 C7 DD 70 C8 21 08 00 DD 4E +R 00 00 01 00 +T 31 0A 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 3C 0A 00 00 56 69 60 DD 75 C1 DD 74 C2 DD 73 +R 00 00 01 00 +T 47 0A 00 00 C3 DD 72 C4 21 71 00 DD 4E 02 DD +R 00 00 01 00 +T 52 0A 00 00 46 03 09 46 DD 70 D4 21 00 00 39 +R 00 00 01 00 +T 5D 0A 00 00 4D 44 21 1F 00 39 5D 54 3E +R 00 00 01 00 +T 66 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 6B 0A 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 6D 0A 00 00 +R 00 00 01 00 +T 6D 0A 00 00 01 01 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 77 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 7C 0A 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 7E 0A 00 00 +R 00 00 01 00 +T 7E 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 08 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/trim.rel b/src/nos/lib/internet_lib/trim.rel new file mode 100644 index 00000000..40648e2e --- /dev/null +++ b/src/nos/lib/internet_lib/trim.rel @@ -0,0 +1,313 @@ +XL4 +H 2 areas F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?L_DEC_L03 Ref00000000 +S _trim_mbuf Ref00000000 +S _in_window Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _seq_within Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3EA flags 0 +S _trim Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF DD 36 FE 00 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 DD 6E 0C DD 66 0D 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 FC DD 74 FD 21 1D 00 09 7E E6 +R 00 00 01 00 +T 1F 00 00 00 20 47 23 7E E6 00 B0 28 08 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 21 1D 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 3B 00 00 00 E6 40 47 23 7E E6 00 B0 28 08 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 21 43 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 58 00 00 00 23 B6 23 B6 23 B6 20 76 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 7E FC DD B6 FD 20 68 21 5E 00 +R 00 00 01 00 +T 6B 00 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 76 00 00 00 4E 23 46 C5 D5 21 3F 00 DD 4E 02 +R 00 00 01 00 +T 81 00 00 00 DD 46 03 09 4E 23 46 23 5E 23 56 +R 00 00 01 00 +T 8C 00 00 00 69 60 C1 09 EB C1 ED 4A E5 D5 21 +R 00 00 01 00 +T 97 00 00 00 3F 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T A2 00 00 00 46 23 5E 23 56 D5 C5 21 04 00 DD +R 00 00 01 00 +T AD 00 00 00 4E 04 DD 46 05 09 5E 23 56 23 4E +R 00 00 01 00 +T B8 00 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0D 00 +T BD 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T C4 00 00 00 F1 F1 7D B4 28 06 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 21 00 00 C3 E7 03 00 00 +R 00 00 01 00 00 08 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 21 FF FF C3 E7 03 00 00 +R 00 00 01 00 00 08 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 21 43 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T E1 00 00 00 23 46 23 5E 23 56 D5 C5 01 00 00 +R 00 00 01 00 +T EC 00 00 00 21 00 00 CD 00 00 00 00 D2 +R 00 00 01 00 02 08 08 00 +T F3 00 00 00 DA 01 00 00 +R 00 00 01 00 00 04 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 00 01 00 00 23 46 23 5E 23 56 D5 C5 DD 5E 02 +R 00 00 01 00 +T 0B 01 00 00 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 11 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 18 01 00 00 7D B4 28 06 +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 DD 34 FE C3 DA 01 00 00 +R 00 00 01 00 00 08 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 DD 7E FC DD B6 FD CA DA 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 36 01 00 00 23 46 23 5E 23 56 D5 C5 DD 6E FC +R 00 00 01 00 +T 41 01 00 00 DD 66 FD 11 00 00 C1 09 EB C1 ED +R 00 00 01 00 +T 4C 01 00 00 4A E5 D5 21 FF FF C1 09 EB 21 +R 00 00 01 00 +T 56 01 00 00 FF FF C1 ED 4A E5 D5 DD 5E 02 DD +R 00 00 01 00 +T 61 01 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 66 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 6D 01 00 00 7D B4 20 66 21 04 00 DD 4E 04 DD +R 00 00 01 00 +T 78 01 00 00 46 05 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 83 01 00 00 D5 DD 6E FC DD 66 FD 11 00 00 C1 +R 00 00 01 00 +T 8E 01 00 00 09 EB C1 ED 4A E5 D5 21 FF FF C1 +R 00 00 01 00 +T 99 01 00 00 09 EB 21 FF FF C1 ED 4A E5 D5 21 +R 00 00 01 00 +T A4 01 00 00 04 00 DD 4E 04 DD 46 05 09 4E 23 +R 00 00 01 00 +T AF 01 00 00 46 23 5E 23 56 D5 C5 21 3F 00 DD +R 00 00 01 00 +T BA 01 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T C5 01 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0D 00 +T CA 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T D1 01 00 00 F1 F1 7D B4 28 03 +R 00 00 01 00 +T D7 01 00 00 +R 00 00 01 00 +T D7 01 00 00 +R 00 00 01 00 +T D7 01 00 00 +R 00 00 01 00 +T D7 01 00 00 DD 34 FE +R 00 00 01 00 +T DA 01 00 00 +R 00 00 01 00 +T DA 01 00 00 +R 00 00 01 00 +T DA 01 00 00 +R 00 00 01 00 +T DA 01 00 00 +R 00 00 01 00 +T DA 01 00 00 AF DD B6 FE 20 2A +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 21 56 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T EB 01 00 00 5E FC DD 56 FD 01 00 00 CD +R 00 00 01 00 +T F4 01 00 00 00 00 00 00 DD 5E 0A DD 56 0B 3E +R 00 00 01 00 02 04 05 00 +T FD 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 02 02 00 00 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 00 00 +T 08 02 00 00 E7 03 00 00 +R 00 00 01 00 00 04 01 00 +T 0A 02 00 00 +R 00 00 01 00 +T 0A 02 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 15 02 00 00 23 46 23 5E 23 56 69 60 D5 E5 21 +R 00 00 01 00 +T 20 02 00 00 3F 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 2B 02 00 00 46 23 5E 23 56 69 60 A7 C1 ED 42 +R 00 00 01 00 +T 36 02 00 00 EB C1 ED 42 4D 44 EB DD 75 F4 DD +R 00 00 01 00 +T 41 02 00 00 74 F5 DD 71 F6 DD 70 F7 C5 E5 01 +R 00 00 01 00 +T 4C 02 00 00 00 00 21 00 00 CD 00 00 00 00 D2 +R 00 00 01 00 02 0A 08 00 +T 55 02 00 00 16 03 00 00 +R 00 00 01 00 00 04 01 00 +T 57 02 00 00 +R 00 00 01 00 +T 57 02 00 00 21 56 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 62 02 00 00 4E F6 DD 46 F7 DD 5E F4 DD 56 F5 +R 00 00 01 00 +T 6D 02 00 00 CD 00 00 00 00 21 1D 00 DD 4E 04 +R 00 00 01 00 02 05 05 00 +T 76 02 00 00 DD 46 05 09 7E E6 20 47 23 7E E6 +R 00 00 01 00 +T 81 02 00 00 00 B0 28 35 +R 00 00 01 00 +T 85 02 00 00 +R 00 00 01 00 +T 85 02 00 00 21 1D 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 90 02 00 00 E6 DF 77 23 7E E6 FF 77 21 04 00 +R 00 00 01 00 +T 9B 02 00 00 09 CD 00 00 00 00 DD 6E F4 DD 66 +R 00 00 01 00 02 06 0A 00 +T A4 02 00 00 F5 DD 4E F6 DD 46 F7 CD +R 00 00 01 00 +T AC 02 00 00 00 00 00 00 DD 75 F4 DD 74 F5 DD +R 00 00 01 00 02 04 01 00 +T B5 02 00 00 71 F6 DD 70 F7 +R 00 00 01 00 +T BA 02 00 00 +R 00 00 01 00 +T BA 02 00 00 DD 6E F6 DD 66 F7 E5 DD 6E F4 DD +R 00 00 01 00 +T C5 02 00 00 66 F5 E5 01 00 00 21 00 00 CD +R 00 00 01 00 +T CF 02 00 00 00 00 00 00 30 43 +R 00 00 01 00 02 04 08 00 +T D3 02 00 00 +R 00 00 01 00 +T D3 02 00 00 DD 6E F4 DD 66 F5 E5 01 00 00 DD +R 00 00 01 00 +T DE 02 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T E6 02 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T ED 02 00 00 04 00 DD 4E 04 DD 46 05 09 DD 4E +R 00 00 01 00 +T F8 02 00 00 F6 DD 46 F7 DD 5E F4 DD 56 F5 CD +R 00 00 01 00 +T 03 03 00 00 00 00 00 00 DD 6E 0C DD 66 0D 7E +R 00 00 01 00 02 04 05 00 +T 0C 03 00 00 DD 96 F4 77 23 7E DD 9E F5 77 +R 00 00 01 00 +T 16 03 00 00 +R 00 00 01 00 +T 16 03 00 00 +R 00 00 01 00 +T 16 03 00 00 21 43 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 21 03 00 00 23 56 23 4E 23 46 C5 D5 21 3F 00 +R 00 00 01 00 +T 2C 03 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T 37 03 00 00 5E 23 56 69 60 C1 09 EB C1 ED 4A +R 00 00 01 00 +T 42 03 00 00 EB D5 E5 21 04 00 DD 4E 04 DD 46 +R 00 00 01 00 +T 4D 03 00 00 05 09 4E 23 46 23 5E 23 56 D5 C5 +R 00 00 01 00 +T 58 03 00 00 DD 6E 0C DD 66 0D 46 23 66 68 11 +R 00 00 01 00 +T 63 03 00 00 00 00 C1 09 EB C1 ED 4A EB A7 C1 +R 00 00 01 00 +T 6E 03 00 00 ED 42 EB C1 ED 42 4D 44 EB DD 75 +R 00 00 01 00 +T 79 03 00 00 F8 DD 74 F9 DD 71 FA DD 70 FB C5 +R 00 00 01 00 +T 84 03 00 00 E5 01 00 00 21 00 00 CD +R 00 00 01 00 +T 8C 03 00 00 00 00 00 00 30 54 +R 00 00 01 00 02 04 08 00 +T 90 03 00 00 +R 00 00 01 00 +T 90 03 00 00 21 56 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 9B 03 00 00 4E FA DD 46 FB DD 5E F8 DD 56 F9 +R 00 00 01 00 +T A6 03 00 00 CD 00 00 00 00 DD 6E 0C DD 66 0D +R 00 00 01 00 02 05 05 00 +T AF 03 00 00 7E DD 96 F8 77 23 7E DD 9E F9 77 +R 00 00 01 00 +T BA 03 00 00 DD 6E 0C DD 66 0D 4E 23 46 DD 5E +R 00 00 01 00 +T C5 03 00 00 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T CC 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T D2 03 00 00 1D 00 DD 4E 04 DD 46 05 09 7E E6 +R 00 00 01 00 +T DD 03 00 00 BF 77 23 7E E6 FF 77 +R 00 00 01 00 +T E4 03 00 00 +R 00 00 01 00 +T E4 03 00 00 21 00 00 +R 00 00 01 00 +T E7 03 00 00 +R 00 00 01 00 +T E7 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/internet_lib/ttldec.rel b/src/nos/lib/internet_lib/ttldec.rel new file mode 100644 index 00000000..c0088716 --- /dev/null +++ b/src/nos/lib/internet_lib/ttldec.rel @@ -0,0 +1,130 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ntohip Ref00000000 +S _htonip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pushdown Ref00000000 +S _icmp_output Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16C flags 0 +S _ttldec Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 B6 FF AF DD 77 B8 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 B9 21 1E 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 14 00 00 00 03 09 46 23 66 68 DD 75 B6 DD 74 +R 00 00 01 00 +T 1F 00 00 00 B7 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 7E B6 DD B6 B7 CA 69 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 6E B6 DD 66 B7 23 23 46 23 66 +R 00 00 01 00 +T 34 00 00 00 68 DD 75 BA DD 74 BB 21 05 00 E5 +R 00 00 01 00 +T 3F 00 00 00 21 08 00 39 4D 44 21 02 00 39 5D +R 00 00 01 00 +T 4A 00 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 50 00 00 00 CD 00 00 00 00 F1 21 00 00 39 4D +R 00 00 01 00 02 05 00 00 +T 59 00 00 00 44 21 0B 00 39 5D 54 3E +R 00 00 01 00 +T 61 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 66 00 00 00 00 00 00 00 DD 35 D5 DD 46 D5 04 +R 00 00 01 00 02 04 00 00 +T 6F 00 00 00 05 20 6B +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 21 00 00 E5 0E 00 C5 0E 0B C5 DD +R 00 00 01 00 +T 7D 00 00 00 4E B6 DD 46 B7 21 11 00 39 5D 54 +R 00 00 01 00 +T 88 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T 8E 00 00 00 00 00 00 00 F1 F1 F1 DD 7E B8 DD +R 00 00 01 00 02 04 00 00 +T 97 00 00 00 B6 B9 20 15 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 21 1E 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T A6 00 00 00 4E BA DD 46 BB 71 23 70 18 11 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 DD 6E B8 DD 66 B9 23 23 DD 4E BA +R 00 00 01 00 +T BB 00 00 00 DD 46 BB 71 23 70 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T C9 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T D0 00 00 00 6E B8 DD 66 B9 DD 75 B6 DD 74 B7 +R 00 00 01 00 +T DB 00 00 00 18 71 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 21 00 00 E5 21 02 00 39 4D 44 21 +R 00 00 01 00 +T E8 00 00 00 0D 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T F0 00 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T F7 00 00 00 05 00 E5 21 08 00 39 4D 44 21 +R 00 00 01 00 +T 01 01 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T 09 01 00 00 00 00 00 00 CD 00 00 00 00 E1 DD +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 10 01 00 00 7E B8 DD B6 B9 20 15 +R 00 00 01 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 21 1E 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 22 01 00 00 4E B6 DD 46 B7 71 23 70 18 11 +R 00 00 01 00 +T 2C 01 00 00 +R 00 00 01 00 +T 2C 01 00 00 DD 6E B8 DD 66 B9 23 23 DD 4E B6 +R 00 00 01 00 +T 37 01 00 00 DD 46 B7 71 23 70 +R 00 00 01 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 DD 6E B6 DD 66 B7 23 23 DD 4E BA +R 00 00 01 00 +T 48 01 00 00 DD 46 BB 71 23 70 +R 00 00 01 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 DD 6E B6 DD 66 B7 DD 75 B8 DD 74 +R 00 00 01 00 +T 59 01 00 00 B9 DD 6E BA DD 66 BB DD 75 B6 DD +R 00 00 01 00 +T 64 01 00 00 74 B7 C3 20 00 00 00 +R 00 00 01 00 00 07 01 00 +T 69 01 00 00 +R 00 00 01 00 +T 69 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/internet_lib/udp.rel b/src/nos/lib/internet_lib/udp.rel new file mode 100644 index 00000000..ced92a29 --- /dev/null +++ b/src/nos/lib/internet_lib/udp.rel @@ -0,0 +1,735 @@ +XL4 +H 6 areas 21 global symbols +S _ntohudp Ref00000000 +S _htonudp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _trim_mbuf Ref00000000 +S _mbuf_crunch Ref00000000 +S _len_p Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _locaddr Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _ip_send Ref00000000 +S _free Ref00000000 +S _cksum Ref00000000 +S _callocw Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _udpcksum Ref00000000 +S _dequeue Ref00000000 +S _Net_error Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pushdown Ref00000000 +S _enqueue Ref00000000 +S _icmp_output Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7CF flags 0 +S _send_udp Def00000099 +S _udp_input Def00000410 +S _recv_udp Def0000022D +S _open_udp Def00000000 +S _del_udp Def0000031A +S _udp_garbage Def00000796 +A CSTR size 37 flags 0 +A UDATA0 size 2 flags 0 +S _Udps Def00000000 +A IDATA0 size 1E flags 0 +S _Udp_mib Def00000000 +A CDATA0 size 1E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 10 00 +T 09 00 00 00 56 03 CD B8 06 00 00 DD 75 FE DD +R 00 00 01 00 00 07 01 00 +T 12 00 00 00 74 FF 7D B4 28 0B +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 21 01 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 13 00 +T 21 00 00 00 18 73 +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 01 11 00 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 2B 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0F 00 02 0A 02 00 +T 32 00 00 00 75 FE DD 74 FF 23 23 E5 DD 6E 02 +R 00 00 01 00 +T 3D 00 00 00 DD 66 03 5E 23 56 23 4E 23 46 E1 +R 00 00 01 00 +T 48 00 00 00 73 23 72 23 71 23 70 21 06 00 DD +R 00 00 01 00 +T 53 00 00 00 4E FE DD 46 FF 09 E5 21 04 00 DD +R 00 00 01 00 +T 5E 00 00 00 5E 02 DD 56 03 19 5E 23 56 E1 73 +R 00 00 01 00 +T 69 00 00 00 23 72 21 08 00 09 DD 7E 0C DD 5E +R 00 00 01 00 +T 74 00 00 00 0A DD 56 0B 73 23 72 23 77 2A +R 00 00 01 00 +T 7E 00 00 00 00 00 00 00 E5 69 60 C1 71 23 70 +R 00 00 01 00 00 04 03 00 +T 87 00 00 00 DD 6E FE DD 66 FF 22 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 90 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 CD 00 00 00 00 E8 FF DD 7E 0E DD +R 00 00 01 00 02 05 10 00 +T A2 00 00 00 B6 0F 20 06 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 21 FF FF C3 2A 02 00 00 +R 00 00 01 00 00 08 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 DD 7E 10 DD B6 11 28 21 DD 6E 0E +R 00 00 01 00 +T B7 00 00 00 DD 66 0F 7E 23 B6 28 16 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 DD 4E 10 DD 46 11 DD 5E 0E DD 56 +R 00 00 01 00 +T CA 00 00 00 0F 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T D0 00 00 00 CD 00 00 00 00 18 17 +R 00 00 01 00 02 05 02 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 DD 6E 0E DD 66 0F 5E 23 56 3E +R 00 00 01 00 +T DF 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T E4 00 00 00 00 00 00 00 DD 75 10 DD 74 11 +R 00 00 01 00 02 04 02 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 21 28 00 39 7E C6 08 77 30 02 23 +R 00 00 01 00 +T F7 00 00 00 34 +R 00 00 01 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 DD 6E 02 DD 66 03 5E 23 56 23 4E +R 00 00 01 00 +T 03 01 00 00 23 46 EB DD 75 FB DD 74 FC DD 71 +R 00 00 01 00 +T 0E 01 00 00 FD DD 70 FE 7D B4 B1 B0 20 21 +R 00 00 01 00 +T 18 01 00 00 +R 00 00 01 00 +T 18 01 00 00 DD 6E 04 DD 66 05 5E 23 56 23 4E +R 00 00 01 00 +T 23 01 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 28 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 02 00 +T 2F 01 00 00 FB DD 74 FC DD 71 FD DD 70 FE +R 00 00 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 44 01 00 00 23 66 68 DD 75 F3 DD 74 F4 21 +R 00 00 01 00 +T 4E 01 00 00 04 00 DD 4E 04 DD 46 05 09 56 23 +R 00 00 01 00 +T 59 01 00 00 66 6A DD 75 F5 DD 74 F6 DD 6E 10 +R 00 00 01 00 +T 64 01 00 00 DD 66 11 DD 75 F7 DD 74 F8 DD 6E +R 00 00 01 00 +T 6F 01 00 00 10 DD 66 11 DD 75 F1 DD 74 F2 DD +R 00 00 01 00 +T 7A 01 00 00 5E FD DD 56 FE DD 6E FB DD 66 FC +R 00 00 01 00 +T 85 01 00 00 DD 75 E8 DD 74 E9 DD 73 EA DD 72 +R 00 00 01 00 +T 90 01 00 00 EB 69 60 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 9B 01 00 00 DD 75 EC DD 74 ED DD 71 EE DD 70 +R 00 00 01 00 +T A6 01 00 00 EF DD 36 F0 11 21 00 00 39 E5 DD +R 00 00 01 00 +T B1 01 00 00 4E 0E DD 46 0F 21 0D 00 39 5D 54 +R 00 00 01 00 +T BC 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T C2 01 00 00 00 00 00 00 E1 2A 1A 00 00 00 ED +R 00 00 01 00 02 04 02 00 00 0A 04 00 +T C9 01 00 00 4B 1C 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 05 04 00 02 0A 06 00 +T D0 01 00 00 1A 00 00 00 ED 43 1C 00 00 00 DD +R 00 00 01 00 00 04 04 00 00 0A 04 00 +T D7 01 00 00 6E 14 E5 DD 6E 12 DD 66 13 E5 DD +R 00 00 01 00 +T E2 01 00 00 6E 10 DD 66 11 E5 DD 6E 0E DD 66 +R 00 00 01 00 +T ED 01 00 00 0F E5 DD 6E 0C E5 DD 6E 0A E5 0E +R 00 00 01 00 +T F8 01 00 00 11 C5 DD 6E 04 DD 66 05 4E 23 46 +R 00 00 01 00 +T 03 02 00 00 23 5E 23 56 D5 C5 DD 4E FD DD 46 +R 00 00 01 00 +T 0E 02 00 00 FE DD 5E FB DD 56 FC 3E +R 00 00 01 00 +T 16 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 1B 02 00 00 00 00 00 00 EB 21 12 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T 24 02 00 00 DD 6E 10 DD 66 11 +R 00 00 01 00 +T 2A 02 00 00 +R 00 00 01 00 +T 2A 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 2D 02 00 00 +R 00 00 01 00 +T 2D 02 00 00 CD 00 00 00 00 F6 FF DD 7E 02 DD +R 00 00 01 00 02 05 10 00 +T 36 02 00 00 B6 03 20 0C +R 00 00 01 00 +T 3A 02 00 00 +R 00 00 01 00 +T 3A 02 00 00 21 02 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 13 00 +T 43 02 00 00 C3 17 03 00 00 +R 00 00 01 00 00 05 01 00 +T 46 02 00 00 +R 00 00 01 00 +T 46 02 00 00 21 0D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 51 02 00 00 23 B6 20 0C +R 00 00 01 00 +T 55 02 00 00 +R 00 00 01 00 +T 55 02 00 00 21 05 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 13 00 +T 5E 02 00 00 C3 17 03 00 00 +R 00 00 01 00 00 05 01 00 +T 61 02 00 00 +R 00 00 01 00 +T 61 02 00 00 21 0B 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 6C 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T 72 02 00 00 00 00 00 00 DD 75 FC DD 74 FD 21 +R 00 00 01 00 02 04 02 00 +T 7B 02 00 00 0D 00 09 4E 23 46 0B 70 2B 71 21 +R 00 00 01 00 +T 86 02 00 00 06 00 E5 21 02 00 39 4D 44 21 +R 00 00 01 00 +T 90 02 00 00 08 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T 98 02 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0B 00 02 09 02 00 +T 9F 02 00 00 7E 04 DD B6 05 28 2E +R 00 00 01 00 +T A6 02 00 00 +R 00 00 01 00 +T A6 02 00 00 21 00 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T B1 02 00 00 EB E5 DD 6E 04 DD 66 05 D1 73 23 +R 00 00 01 00 +T BC 02 00 00 72 23 71 23 70 21 04 00 DD 4E 04 +R 00 00 01 00 +T C7 02 00 00 DD 46 05 09 DD 4E FA DD 46 FB 71 +R 00 00 01 00 +T D2 02 00 00 23 70 +R 00 00 01 00 +T D4 02 00 00 +R 00 00 01 00 +T D4 02 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T DC 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 02 00 +T E3 02 00 00 75 FE DD 74 FF DD 7E 0A DD B6 0B +R 00 00 01 00 +T EE 02 00 00 28 13 +R 00 00 01 00 +T F0 02 00 00 +R 00 00 01 00 +T F0 02 00 00 DD 6E FC DD 66 FD E5 DD 6E 0A DD +R 00 00 01 00 +T FB 02 00 00 66 0B C1 71 23 70 18 0E +R 00 00 01 00 +T 03 03 00 00 +R 00 00 01 00 +T 03 03 00 00 21 06 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 14 00 +T 0B 03 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 14 00 02 0A 02 00 +T 11 03 00 00 +R 00 00 01 00 +T 11 03 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 17 03 00 00 +R 00 00 01 00 +T 17 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 1A 03 00 00 +R 00 00 01 00 +T 1A 03 00 00 CD 00 00 00 00 FA FF AF DD 77 FE +R 00 00 01 00 02 05 10 00 +T 23 03 00 00 DD 77 FF 2A 00 00 00 00 DD 75 FC +R 00 00 01 00 00 08 03 00 +T 2C 03 00 00 DD 74 FD +R 00 00 01 00 +T 2F 03 00 00 +R 00 00 01 00 +T 2F 03 00 00 DD 7E FC DD B6 FD 28 31 +R 00 00 01 00 +T 37 03 00 00 +R 00 00 01 00 +T 37 03 00 00 DD 6E 02 DD 66 03 DD 4E FC DD 46 +R 00 00 01 00 +T 42 03 00 00 FD A7 ED 42 20 02 +R 00 00 01 00 +T 48 03 00 00 +R 00 00 01 00 +T 48 03 00 00 18 1E +R 00 00 01 00 +T 4A 03 00 00 +R 00 00 01 00 +T 4A 03 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 55 03 00 00 FF DD 6E FC DD 66 FD 46 23 66 68 +R 00 00 01 00 +T 60 03 00 00 DD 75 FC DD 74 FD 18 C7 +R 00 00 01 00 +T 68 03 00 00 +R 00 00 01 00 +T 68 03 00 00 DD 7E FC DD B6 FD 20 0C +R 00 00 01 00 +T 70 03 00 00 +R 00 00 01 00 +T 70 03 00 00 21 07 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 13 00 +T 79 03 00 00 C3 0D 04 00 00 +R 00 00 01 00 00 05 01 00 +T 7C 03 00 00 +R 00 00 01 00 +T 7C 03 00 00 +R 00 00 01 00 +T 7C 03 00 00 21 0D 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 87 03 00 00 23 B6 28 45 +R 00 00 01 00 +T 8B 03 00 00 +R 00 00 01 00 +T 8B 03 00 00 21 0B 00 DD 4E FC DD 46 FD 09 56 +R 00 00 01 00 +T 96 03 00 00 23 66 6A DD 75 FA DD 74 FB 21 +R 00 00 01 00 +T A0 03 00 00 0B 00 09 E5 21 0B 00 09 56 23 66 +R 00 00 01 00 +T AB 03 00 00 6A 23 23 5E 23 56 E1 73 23 72 21 +R 00 00 01 00 +T B6 03 00 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 14 00 +T BE 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 14 00 02 09 02 00 +T C4 03 00 00 0D 00 09 4E 23 46 0B 70 2B 71 18 +R 00 00 01 00 +T CF 03 00 00 AC +R 00 00 01 00 +T D0 03 00 00 +R 00 00 01 00 +T D0 03 00 00 DD 7E FE DD B6 FF 28 17 +R 00 00 01 00 +T D8 03 00 00 +R 00 00 01 00 +T D8 03 00 00 DD 6E FC DD 66 FD 46 23 66 68 E5 +R 00 00 01 00 +T E3 03 00 00 DD 6E FE DD 66 FF C1 71 23 70 18 +R 00 00 01 00 +T EE 03 00 00 0D +R 00 00 01 00 +T EF 03 00 00 +R 00 00 01 00 +T EF 03 00 00 DD 6E FC DD 66 FD 46 23 66 68 22 +R 00 00 01 00 +T FA 03 00 00 00 00 00 00 +R 00 00 01 00 00 04 03 00 +T FC 03 00 00 +R 00 00 01 00 +T FC 03 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 04 04 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0D 00 02 0A 02 00 +T 0B 04 00 00 00 00 +R 00 00 01 00 +T 0D 04 00 00 +R 00 00 01 00 +T 0D 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 10 04 00 00 +R 00 00 01 00 +T 10 04 00 00 CD 00 00 00 00 DC FF DD 7E 0A DD +R 00 00 01 00 02 05 10 00 +T 19 04 00 00 B6 0B 28 0B DD 6E 0A DD 66 0B 7E +R 00 00 01 00 +T 24 04 00 00 23 B6 20 03 +R 00 00 01 00 +T 28 04 00 00 +R 00 00 01 00 +T 28 04 00 00 +R 00 00 01 00 +T 28 04 00 00 +R 00 00 01 00 +T 28 04 00 00 C3 B5 06 00 00 +R 00 00 01 00 00 05 01 00 +T 2B 04 00 00 +R 00 00 01 00 +T 2B 04 00 00 DD 6E 04 DD 66 05 5E 23 56 23 4E +R 00 00 01 00 +T 36 04 00 00 23 46 EB DD 75 DC DD 74 DD DD 71 +R 00 00 01 00 +T 41 04 00 00 DE DD 70 DF 21 04 00 DD 4E 04 DD +R 00 00 01 00 +T 4C 04 00 00 46 05 09 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T 57 04 00 00 60 DD 75 E0 DD 74 E1 DD 73 E2 DD +R 00 00 01 00 +T 62 04 00 00 72 E3 21 15 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 6D 04 00 00 09 56 DD 72 E4 21 16 00 09 5E 16 +R 00 00 01 00 +T 78 04 00 00 00 21 08 00 09 46 23 66 68 A7 ED +R 00 00 01 00 +T 83 04 00 00 52 01 EC FF 09 DD 75 FD DD 74 FE +R 00 00 01 00 +T 8E 04 00 00 DD 75 E5 DD 74 E6 DD 6E 0A DD 66 +R 00 00 01 00 +T 99 04 00 00 0B 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T A0 04 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 11 00 02 09 02 00 +T A7 04 00 00 ED DD 74 EE DD 6E ED DD 66 EE 7D +R 00 00 01 00 +T B2 04 00 00 B4 28 45 DD 6E FD DD 66 FE E5 DD +R 00 00 01 00 +T BD 04 00 00 6E 0A DD 66 0B 4E 23 46 21 02 00 +R 00 00 01 00 +T C8 04 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T CE 04 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 0E 00 02 09 02 00 +T D5 04 00 00 B4 28 22 +R 00 00 01 00 +T D8 04 00 00 +R 00 00 01 00 +T D8 04 00 00 +R 00 00 01 00 +T D8 04 00 00 +R 00 00 01 00 +T D8 04 00 00 2A 14 00 00 00 ED 4B 16 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T DF 04 00 00 CD 00 00 00 00 22 14 00 00 00 ED +R 00 00 01 00 02 05 06 00 00 0A 04 00 +T E6 04 00 00 43 16 00 00 00 DD 5E 0A DD 56 0B +R 00 00 01 00 00 05 04 00 +T EF 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 14 00 02 0A 14 00 +T F5 04 00 00 00 00 00 00 C3 B5 06 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T FA 04 00 00 +R 00 00 01 00 +T FA 04 00 00 DD 4E 0A DD 46 0B 21 0B 00 39 5D +R 00 00 01 00 +T 05 05 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 0B 05 00 00 CD 00 00 00 00 7D B4 28 22 +R 00 00 01 00 02 05 02 00 +T 12 05 00 00 +R 00 00 01 00 +T 12 05 00 00 2A 14 00 00 00 ED 4B 16 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 19 05 00 00 CD 00 00 00 00 22 14 00 00 00 ED +R 00 00 01 00 02 05 06 00 00 0A 04 00 +T 20 05 00 00 43 16 00 00 00 DD 5E 0A DD 56 0B +R 00 00 01 00 00 05 04 00 +T 29 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 14 00 02 0A 14 00 +T 2F 05 00 00 00 00 00 00 C3 B5 06 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T 34 05 00 00 +R 00 00 01 00 +T 34 05 00 00 DD 7E 0C DD B6 0D 28 20 +R 00 00 01 00 +T 3C 05 00 00 +R 00 00 01 00 +T 3C 05 00 00 21 04 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 47 05 00 00 23 56 23 4E 23 46 EB DD 75 F1 DD +R 00 00 01 00 +T 52 05 00 00 74 F2 DD 71 F3 DD 70 F4 18 1E +R 00 00 01 00 +T 5C 05 00 00 +R 00 00 01 00 +T 5C 05 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 67 05 00 00 23 56 23 4E 23 46 EB DD 75 F1 DD +R 00 00 01 00 +T 72 05 00 00 74 F2 DD 71 F3 DD 70 F4 +R 00 00 01 00 +T 7A 05 00 00 +R 00 00 01 00 +T 7A 05 00 00 DD 6E E9 DD 66 EA DD 75 F5 DD 74 +R 00 00 01 00 +T 85 05 00 00 F6 21 15 00 39 5D 54 CD +R 00 00 01 00 +T 8D 05 00 00 B8 06 00 00 DD 75 EF DD 74 F0 7D +R 00 00 01 00 00 04 01 00 +T 96 05 00 00 B4 20 68 +R 00 00 01 00 +T 99 05 00 00 +R 00 00 01 00 +T 99 05 00 00 DD 7E 0C DD B6 0D 20 3E +R 00 00 01 00 +T A1 05 00 00 +R 00 00 01 00 +T A1 05 00 00 21 00 00 39 E5 DD 4E 0A DD 46 0B +R 00 00 01 00 +T AC 05 00 00 21 0D 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T B4 05 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 01 00 02 0A 02 00 +T BB 05 00 00 21 00 00 E5 0E 03 C5 0E 03 C5 DD +R 00 00 01 00 +T C6 05 00 00 6E 0A DD 66 0B 4E 23 46 DD 5E 04 +R 00 00 01 00 +T D1 05 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 18 00 +T D7 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 18 00 02 09 02 00 +T DE 05 00 00 F1 +R 00 00 01 00 +T DF 05 00 00 +R 00 00 01 00 +T DF 05 00 00 2A 0E 00 00 00 ED 4B 10 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T E6 05 00 00 CD 00 00 00 00 22 0E 00 00 00 ED +R 00 00 01 00 02 05 06 00 00 0A 04 00 +T ED 05 00 00 43 10 00 00 00 DD 5E 0A DD 56 0B +R 00 00 01 00 00 05 04 00 +T F6 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 14 00 02 0A 14 00 +T FC 05 00 00 00 00 00 00 C3 B5 06 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T 01 06 00 00 +R 00 00 01 00 +T 01 06 00 00 DD 6E 04 DD 66 05 5E 23 56 23 4E +R 00 00 01 00 +T 0C 06 00 00 23 46 EB DD 75 F7 DD 74 F8 DD 71 +R 00 00 01 00 +T 17 06 00 00 F9 DD 70 FA DD 6E E7 DD 66 E8 DD +R 00 00 01 00 +T 22 06 00 00 75 FB DD 74 FC 21 06 00 E5 21 +R 00 00 01 00 +T 2C 06 00 00 1D 00 39 4D 44 DD 5E 0A DD 56 0B +R 00 00 01 00 +T 37 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T 3D 06 00 00 00 00 00 00 E1 DD 4E 0A DD 46 0B +R 00 00 01 00 02 04 02 00 +T 46 06 00 00 21 0B 00 DD 5E EF DD 56 F0 19 EB +R 00 00 01 00 +T 51 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T 57 06 00 00 00 00 00 00 21 0D 00 DD 4E EF DD +R 00 00 01 00 02 04 02 00 +T 60 06 00 00 46 F0 09 34 23 20 01 34 +R 00 00 01 00 +T 68 06 00 00 +R 00 00 01 00 +T 68 06 00 00 2A 08 00 00 00 ED 4B 0A 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 6F 06 00 00 CD 00 00 00 00 22 08 00 00 00 ED +R 00 00 01 00 02 05 06 00 00 0A 04 00 +T 76 06 00 00 43 0A 00 00 00 21 08 00 DD 4E EF +R 00 00 01 00 00 05 04 00 +T 7F 06 00 00 DD 46 F0 09 7E 23 B6 23 B6 28 2B +R 00 00 01 00 +T 8A 06 00 00 +R 00 00 01 00 +T 8A 06 00 00 21 0D 00 DD 4E EF DD 46 F0 09 5E +R 00 00 01 00 +T 95 06 00 00 23 56 D5 C5 DD 5E 02 DD 56 03 21 +R 00 00 01 00 +T A0 06 00 00 08 00 DD 4E EF DD 46 F0 09 4E 23 +R 00 00 01 00 +T AB 06 00 00 46 23 7E 69 60 C1 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T B4 06 00 00 E1 +R 00 00 01 00 +T B5 06 00 00 +R 00 00 01 00 +T B5 06 00 00 +R 00 00 01 00 +T B5 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T B8 06 00 00 +R 00 00 01 00 +T B8 06 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 10 00 +T C1 06 00 00 DD 77 FF 2A 00 00 00 00 DD 75 FC +R 00 00 01 00 00 08 03 00 +T CA 06 00 00 DD 74 FD +R 00 00 01 00 +T CD 06 00 00 +R 00 00 01 00 +T CD 06 00 00 DD 7E FC DD B6 FD CA 90 07 00 00 +R 00 00 01 00 00 0B 01 00 +T D6 06 00 00 +R 00 00 01 00 +T D6 06 00 00 21 04 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T E1 06 00 00 23 66 68 E5 21 06 00 DD 4E FC DD +R 00 00 01 00 +T EC 06 00 00 46 FD 09 4E 23 46 E1 A7 ED 42 20 +R 00 00 01 00 +T F7 06 00 00 79 DD 6E FC DD 66 FD 23 23 4E 23 +R 00 00 01 00 +T 02 07 00 00 46 23 5E 23 56 D5 C5 DD 6E 02 DD +R 00 00 01 00 +T 0D 07 00 00 66 03 4E 23 46 23 5E 23 56 69 60 +R 00 00 01 00 +T 18 07 00 00 C1 A7 ED 42 C1 20 05 EB ED 42 28 +R 00 00 01 00 +T 23 07 00 00 11 +R 00 00 01 00 +T 24 07 00 00 +R 00 00 01 00 +T 24 07 00 00 DD 6E FC DD 66 FD 23 23 7E 23 B6 +R 00 00 01 00 +T 2F 07 00 00 23 B6 23 B6 20 3C +R 00 00 01 00 +T 35 07 00 00 +R 00 00 01 00 +T 35 07 00 00 +R 00 00 01 00 +T 35 07 00 00 +R 00 00 01 00 +T 35 07 00 00 +R 00 00 01 00 +T 35 07 00 00 +R 00 00 01 00 +T 35 07 00 00 DD 7E FE DD B6 FF 28 2C +R 00 00 01 00 +T 3D 07 00 00 +R 00 00 01 00 +T 3D 07 00 00 DD 6E FC DD 66 FD 46 23 66 68 E5 +R 00 00 01 00 +T 48 07 00 00 DD 6E FE DD 66 FF C1 71 23 70 2A +R 00 00 01 00 +T 53 07 00 00 00 00 00 00 E5 DD 6E FC DD 66 FD +R 00 00 01 00 00 04 03 00 +T 5C 07 00 00 C1 71 23 70 DD 6E FC DD 66 FD 22 +R 00 00 01 00 +T 67 07 00 00 00 00 00 00 +R 00 00 01 00 00 04 03 00 +T 69 07 00 00 +R 00 00 01 00 +T 69 07 00 00 DD 6E FC DD 66 FD 18 22 +R 00 00 01 00 +T 71 07 00 00 +R 00 00 01 00 +T 71 07 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 7C 07 00 00 FF DD 6E FC DD 66 FD 46 23 66 68 +R 00 00 01 00 +T 87 07 00 00 DD 75 FC DD 74 FD C3 CD 06 00 00 +R 00 00 01 00 00 0B 01 00 +T 90 07 00 00 +R 00 00 01 00 +T 90 07 00 00 21 00 00 +R 00 00 01 00 +T 93 07 00 00 +R 00 00 01 00 +T 93 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 09 00 +T 96 07 00 00 +R 00 00 01 00 +T 96 07 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 10 00 +T 9C 07 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 00 04 03 00 +T A4 07 00 00 +R 00 00 01 00 +T A4 07 00 00 DD 7E FE DD B6 FF 28 20 +R 00 00 01 00 +T AC 07 00 00 +R 00 00 01 00 +T AC 07 00 00 21 0B 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T B7 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T BD 07 00 00 00 00 00 00 0A 6F 03 0A 67 DD 75 +R 00 00 01 00 02 04 02 00 +T C6 07 00 00 FE DD 74 FF 18 D8 +R 00 00 01 00 +T CC 07 00 00 +R 00 00 01 00 +T CC 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 +T 01 00 00 00 +R 00 00 02 00 +T 01 00 00 00 75 64 70 49 6E 44 61 74 61 67 72 +R 00 00 02 00 +T 0C 00 00 00 61 6D 73 00 +R 00 00 02 00 +T 10 00 00 00 +R 00 00 02 00 +T 10 00 00 00 75 64 70 4E 6F 50 6F 72 74 73 00 +R 00 00 02 00 +T 1B 00 00 00 +R 00 00 02 00 +T 1B 00 00 00 75 64 70 49 6E 45 72 72 6F 72 73 +R 00 00 02 00 +T 26 00 00 00 00 +R 00 00 02 00 +T 27 00 00 00 +R 00 00 02 00 +T 27 00 00 00 75 64 70 4F 75 74 44 61 74 61 67 +R 00 00 02 00 +T 32 00 00 00 72 61 6D 73 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 06 00 00 00 01 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 0C 00 00 00 10 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 12 00 00 00 1B 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 +T 18 00 00 00 27 00 00 00 00 00 00 00 +R 00 00 05 00 00 04 02 00 diff --git a/src/nos/lib/internet_lib/udpcmd.rel b/src/nos/lib/internet_lib/udpcmd.rel new file mode 100644 index 00000000..e9722630 --- /dev/null +++ b/src/nos/lib/internet_lib/udpcmd.rel @@ -0,0 +1,193 @@ +XL4 +H 4 areas 17 global symbols +S _Udp_mib Ref00000000 +S ___0177_f73b__26UCB_20_20_20_20_ Ref00000000 +S ___0056_f7f3__20_20_20_20_26UCB_ Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0591_5069_status Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Udps Ref00000000 +S .__.ABS. Def00000000 +S _pinet Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ___017a_ba4c__28_252u_29_25_2d20 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S __printf Ref00000000 +S ___0123_1260__259p_256u_20_20_25 Ref00000000 +S ___0032_de40__20_20_20_20_20 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 187 flags 0 +S _st_udp Def0000001D +S _doudp Def00000000 +A IDATA0 size 1A flags 0 +A CDATA0 size 1A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 E5 C5 4B 42 11 00 00 00 00 3E +R 00 00 01 00 00 09 02 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T 16 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 03 00 02 0B 06 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 CD 00 00 00 00 79 B0 20 11 +R 00 00 01 00 02 05 0A 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 2A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 30 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 03 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 DD 5E 02 DD 56 03 13 13 3E +R 00 00 01 00 +T 3E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 43 00 00 00 00 00 00 00 E5 21 0D 00 DD 4E 02 +R 00 00 01 00 02 04 03 00 +T 4C 00 00 00 DD 46 03 09 5E 23 56 D5 C5 0E +R 00 00 01 00 +T 56 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 11 00 02 0A 11 00 +T 5C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T 62 00 00 00 00 00 00 00 F1 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 03 00 +T 6A 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 CD 00 00 00 00 FC FF DD 36 FE 01 +R 00 00 01 00 02 05 0B 00 +T 75 00 00 00 DD 36 FF 00 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 DD 4E FE DD 46 FF 21 04 00 CD +R 00 00 01 00 +T 83 00 00 00 00 00 00 00 DA 11 01 00 00 +R 00 00 01 00 02 04 0E 00 00 09 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 01 06 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 92 00 00 00 00 00 00 00 21 02 00 00 00 19 4E +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 99 00 00 00 23 46 23 5E 23 56 D5 C5 01 06 00 +R 00 00 01 00 +T A4 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 0C 00 +T AD 00 00 00 21 00 00 00 00 19 4E 23 46 C5 DD +R 00 00 01 00 02 05 00 00 +T B6 00 00 00 6E FE DD 66 FF E5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T BE 00 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 0D 00 +T C4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T C9 00 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 03 00 +T D2 00 00 00 01 02 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T DC 00 00 00 00 00 00 00 7B B2 28 13 +R 00 00 01 00 02 04 0F 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 12 00 02 0B 12 00 +T E8 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T EE 00 00 00 CD 00 00 00 00 F1 F1 18 11 +R 00 00 01 00 02 05 03 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T FB 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 01 01 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 03 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 0E 01 00 00 +R 00 00 01 00 +T 0E 01 00 00 C3 79 00 00 00 +R 00 00 01 00 00 05 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 01 02 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 1B 01 00 00 00 00 00 00 7B B2 20 11 +R 00 00 01 00 02 04 0F 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T 27 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 2D 01 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 03 00 +T 32 01 00 00 +R 00 00 01 00 +T 32 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 02 00 02 0B 02 00 +T 38 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 3E 01 00 00 CD 00 00 00 00 F1 F1 2A +R 00 00 01 00 02 05 03 00 +T 44 01 00 00 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 07 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 DD 7E FC DD B6 FD 28 2D +R 00 00 01 00 +T 54 01 00 00 +R 00 00 01 00 +T 54 01 00 00 01 01 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 5E 01 00 00 1D 00 00 00 21 1D 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 63 01 00 00 00 00 00 00 7D A4 3C 20 05 +R 00 00 01 00 02 04 03 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 21 00 00 18 15 +R 00 00 01 00 +T 6F 01 00 00 +R 00 00 01 00 +T 6F 01 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 7A 01 00 00 75 FC DD 74 FD 18 CB +R 00 00 01 00 +T 81 01 00 00 +R 00 00 01 00 +T 81 01 00 00 21 00 00 +R 00 00 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 6C 00 00 00 00 00 +R 00 00 03 00 4A 04 04 00 48 08 01 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 13 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/internet_lib/udphdr.rel b/src/nos/lib/internet_lib/udphdr.rel new file mode 100644 index 00000000..f4c787d6 --- /dev/null +++ b/src/nos/lib/internet_lib/udphdr.rel @@ -0,0 +1,161 @@ +XL4 +H 2 areas F global symbols +S _put16 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _dup_p Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _cksum Ref00000000 +S _pull16 Ref00000000 +S _get16 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pushdown Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1E2 flags 0 +S _ntohudp Def000000FB +S _htonudp Def00000000 +S _udpcksum Def000001A3 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 08 00 E5 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 01 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 18 00 00 00 00 00 00 00 E1 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 01 00 +T 21 00 00 00 46 23 66 68 01 0A 00 09 46 23 66 +R 00 00 01 00 +T 2C 00 00 00 68 DD 75 FC DD 74 FD DD 6E 02 DD +R 00 00 01 00 +T 37 00 00 00 66 03 4E 23 46 DD 5E FC DD 56 FD +R 00 00 01 00 +T 42 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T 48 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 01 00 +T 51 00 00 00 4E 02 DD 46 03 03 03 69 60 4E 23 +R 00 00 01 00 +T 5C 00 00 00 46 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 69 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 21 +R 00 00 01 00 02 04 01 00 +T 72 00 00 00 04 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 7D 00 00 00 46 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 85 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 8A 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 23 +R 00 00 01 00 02 04 01 00 +T 93 00 00 00 DD 75 FC DD 74 FD 2B 36 00 DD 6E +R 00 00 01 00 +T 9E 00 00 00 FC DD 66 FD 2B DD 75 FC DD 74 FD +R 00 00 01 00 +T A9 00 00 00 23 36 00 21 09 00 DD 4E 0A DD 46 +R 00 00 01 00 +T B4 00 00 00 0B 09 5E 23 56 D5 DD 6E 04 DD 66 +R 00 00 01 00 +T BF 00 00 00 05 4E 23 46 DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T CA 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T CF 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 01 00 +T D8 00 00 00 7D B4 20 08 +R 00 00 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 DD 36 FE FF DD 36 FF FF +R 00 00 01 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 DD 4E FE DD 46 FF DD 5E FC DD 56 +R 00 00 01 00 +T EF 00 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T F5 00 00 00 CD 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 02 00 +T FB 00 00 00 +R 00 00 01 00 +T FB 00 00 00 CD 00 00 00 00 F8 FF 21 08 00 E5 +R 00 00 01 00 02 05 09 00 +T 04 01 00 00 21 02 00 39 4D 44 DD 5E 04 DD 56 +R 00 00 01 00 +T 0F 01 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 15 01 00 00 CD 00 00 00 00 F1 3E 08 AD B4 28 +R 00 00 01 00 02 05 01 00 +T 1E 01 00 00 05 +R 00 00 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 21 FF FF 18 7C +R 00 00 01 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 21 00 00 39 01 00 00 09 EB 3E +R 00 00 01 00 +T 2E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 33 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 01 00 +T 3C 01 00 00 C1 71 23 70 DD 6E 02 DD 66 03 23 +R 00 00 01 00 +T 47 01 00 00 23 E5 21 02 00 39 01 02 00 09 EB +R 00 00 01 00 +T 52 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 58 01 00 00 00 00 00 00 4D 44 E1 71 23 70 21 +R 00 00 01 00 02 04 01 00 +T 61 01 00 00 04 00 DD 4E 02 DD 46 03 09 E5 21 +R 00 00 01 00 +T 6C 01 00 00 02 00 39 11 04 00 19 EB 3E +R 00 00 01 00 +T 75 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 7A 01 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T 82 01 00 00 06 00 09 E5 21 02 00 39 01 06 00 +R 00 00 01 00 +T 8D 01 00 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 92 01 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 08 00 02 09 01 00 +T 99 01 00 00 E1 71 23 70 21 00 00 +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 CD 00 00 00 00 FE FF 21 02 00 E5 +R 00 00 01 00 02 05 09 00 +T AC 01 00 00 21 06 00 E5 DD 4E 02 DD 46 03 21 +R 00 00 01 00 +T B7 01 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T BF 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T C6 01 00 00 3E 02 AD B4 28 05 +R 00 00 01 00 +T CC 01 00 00 +R 00 00 01 00 +T CC 01 00 00 21 00 00 18 0E +R 00 00 01 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T D9 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/internet_lib/udpsock.rel b/src/nos/lib/internet_lib/udpsock.rel new file mode 100644 index 00000000..5c200c99 --- /dev/null +++ b/src/nos/lib/internet_lib/udpsock.rel @@ -0,0 +1,375 @@ +XL4 +H 2 areas 1D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _st_udp Ref00000000 +S _Lport Ref00000000 +S _send_udp Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _recv_udp Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _open_udp Ref00000000 +S _del_udp Ref00000000 +S _bind Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S _close_s Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 40E flags 0 +S _so_udp_bind Def00000009 +S _so_udp Def00000000 +S _so_udp_send Def000001C0 +S _so_udp_conn Def0000009F +S _so_udp_recv Def000000BA +S _so_udp_qlen Def000002E2 +S _so_udp_stat Def000003F3 +S _so_udp_shut Def00000348 +S _so_udp_close Def00000321 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 0C 00 +T 07 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 CD 00 00 00 00 F6 FF DD 6E 02 DD +R 00 00 01 00 02 05 10 00 +T 12 00 00 00 66 03 46 23 66 68 DD 75 F6 DD 74 +R 00 00 01 00 +T 1D 00 00 00 F7 21 0E 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 28 00 00 00 56 23 66 6A DD 75 F8 DD 74 F9 11 +R 00 00 01 00 +T 33 00 00 00 04 00 19 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T 3E 00 00 00 60 DD 75 FA DD 74 FB DD 73 FC DD +R 00 00 01 00 +T 49 00 00 00 72 FD DD 6E F8 DD 66 F9 23 23 46 +R 00 00 01 00 +T 54 00 00 00 23 66 68 DD 75 FE DD 74 FF 21 +R 00 00 01 00 +T 5E 00 00 00 0C 00 DD 4E 02 DD 46 03 09 E5 1E +R 00 00 01 00 +T 69 00 00 00 6C 03 00 00 D5 11 6C 03 00 00 D5 +R 00 00 01 00 29 04 01 00 00 0A 01 00 +T 6F 00 00 00 21 0A 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 77 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 7E 00 00 00 F1 EB E1 73 23 72 21 0C 00 09 46 +R 00 00 01 00 +T 89 00 00 00 23 66 68 01 0F 00 09 DD 4E F6 DD +R 00 00 01 00 +T 94 00 00 00 46 F7 71 23 70 21 00 00 C3 +R 00 00 01 00 +T 9D 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 CD 00 00 00 00 21 0E 00 19 7E 23 +R 00 00 01 00 02 05 0C 00 +T A8 00 00 00 B6 20 09 +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 DD 5E 02 DD 56 03 CD 9E 03 00 00 +R 00 00 01 00 00 0B 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 CD 00 00 00 00 F4 FF +R 00 00 01 00 02 05 10 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T CA 00 00 00 23 66 68 DD 75 F6 DD 74 F7 7D B4 +R 00 00 01 00 +T D5 00 00 00 28 5E DD 6E 04 DD 66 05 E5 21 +R 00 00 01 00 +T DF 00 00 00 08 00 39 4D 44 DD 5E F6 DD 56 F7 +R 00 00 01 00 +T EA 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T F0 00 00 00 00 00 00 00 F1 DD 75 F4 DD 74 F5 +R 00 00 01 00 02 04 00 00 +T F9 00 00 00 7D A4 3C 20 37 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 09 01 00 00 B7 28 0C +R 00 00 01 00 +T 0C 01 00 00 +R 00 00 01 00 +T 0C 01 00 00 21 64 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 0D 00 +T 15 01 00 00 C3 BD 01 00 00 +R 00 00 01 00 00 05 01 00 +T 18 01 00 00 +R 00 00 01 00 +T 18 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 20 01 00 00 21 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 27 01 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 0D 00 +T 2D 01 00 00 +R 00 00 01 00 +T 2D 01 00 00 21 FF FF C3 BD 01 00 00 +R 00 00 01 00 00 08 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 18 8A +R 00 00 01 00 +T 35 01 00 00 +R 00 00 01 00 +T 35 01 00 00 DD 7E F6 DD B6 F7 20 0B +R 00 00 01 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 21 65 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 0D 00 +T 46 01 00 00 18 75 +R 00 00 01 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 DD 7E 0A DD B6 0B 28 67 DD 7E 0C +R 00 00 01 00 +T 53 01 00 00 DD B6 0D 28 5F DD 6E 0C DD 66 0D +R 00 00 01 00 +T 5E 01 00 00 46 23 66 68 01 10 80 3E 80 AC 67 +R 00 00 01 00 +T 69 01 00 00 ED 42 38 4A +R 00 00 01 00 +T 6D 01 00 00 +R 00 00 01 00 +T 6D 01 00 00 +R 00 00 01 00 +T 6D 01 00 00 +R 00 00 01 00 +T 6D 01 00 00 DD 6E 0A DD 66 0B DD 75 F8 DD 74 +R 00 00 01 00 +T 78 01 00 00 F9 AF 77 23 77 21 04 00 DD 4E F8 +R 00 00 01 00 +T 83 01 00 00 DD 46 F9 09 E5 21 08 00 39 5E 23 +R 00 00 01 00 +T 8E 01 00 00 56 23 4E 23 46 E1 73 23 72 23 71 +R 00 00 01 00 +T 99 01 00 00 23 70 DD 6E F8 DD 66 F9 23 23 DD +R 00 00 01 00 +T A4 01 00 00 4E FE DD 46 FF 71 23 70 DD 6E 0C +R 00 00 01 00 +T AF 01 00 00 DD 66 0D 36 10 23 36 00 +R 00 00 01 00 +T B7 01 00 00 +R 00 00 01 00 +T B7 01 00 00 DD 6E F4 DD 66 F5 +R 00 00 01 00 +T BD 01 00 00 +R 00 00 01 00 +T BD 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T C0 01 00 00 +R 00 00 01 00 +T C0 01 00 00 CD 00 00 00 00 F0 FF 21 0E 00 DD +R 00 00 01 00 02 05 10 00 +T C9 01 00 00 5E 02 DD 56 03 19 7E 23 B6 20 09 +R 00 00 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 DD 5E 02 DD 56 03 CD 9E 03 00 00 +R 00 00 01 00 00 0B 01 00 +T DD 01 00 00 +R 00 00 01 00 +T DD 01 00 00 21 0E 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T E8 01 00 00 23 66 68 DD 75 F0 DD 74 F1 01 +R 00 00 01 00 +T F2 01 00 00 04 00 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T FD 01 00 00 DD 75 F4 DD 74 F5 DD 71 F6 DD 70 +R 00 00 01 00 +T 08 02 00 00 F7 DD 6E F0 DD 66 F1 23 23 46 23 +R 00 00 01 00 +T 13 02 00 00 66 68 DD 75 F8 DD 74 F9 DD 7E 0A +R 00 00 01 00 +T 1E 02 00 00 DD B6 0B 28 0E +R 00 00 01 00 +T 23 02 00 00 +R 00 00 01 00 +T 23 02 00 00 DD 6E 0A DD 66 0B DD 75 F2 DD 74 +R 00 00 01 00 +T 2E 02 00 00 F3 18 3E +R 00 00 01 00 +T 31 02 00 00 +R 00 00 01 00 +T 31 02 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 3C 02 00 00 23 B6 28 16 +R 00 00 01 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 21 12 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 4B 02 00 00 23 66 68 DD 75 F2 DD 74 F3 18 19 +R 00 00 01 00 +T 56 02 00 00 +R 00 00 01 00 +T 56 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 5E 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 65 02 00 00 65 00 22 00 00 00 00 21 FF FF 18 +R 00 00 01 00 02 07 0D 00 +T 6E 02 00 00 70 +R 00 00 01 00 +T 6F 02 00 00 +R 00 00 01 00 +T 6F 02 00 00 +R 00 00 01 00 +T 6F 02 00 00 21 04 00 DD 4E F2 DD 46 F3 09 4E +R 00 00 01 00 +T 7A 02 00 00 23 46 23 5E 23 56 69 60 DD 75 FA +R 00 00 01 00 +T 85 02 00 00 DD 74 FB DD 73 FC DD 72 FD DD 6E +R 00 00 01 00 +T 90 02 00 00 F2 DD 66 F3 23 23 46 23 66 68 DD +R 00 00 01 00 +T 9B 02 00 00 75 FE DD 74 FF 0E 00 C5 21 00 00 +R 00 00 01 00 +T A6 02 00 00 E5 21 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 +T B1 02 00 00 E5 0E 00 C5 21 1A 00 DD 4E 02 DD +R 00 00 01 00 +T BC 02 00 00 46 03 09 4E C5 21 16 00 39 4D 44 +R 00 00 01 00 +T C7 02 00 00 21 10 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T CF 02 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T D6 02 00 00 21 0C 00 39 F9 EB 21 00 00 +R 00 00 01 00 +T DF 02 00 00 +R 00 00 01 00 +T DF 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T E2 02 00 00 +R 00 00 01 00 +T E2 02 00 00 CD 00 00 00 00 FE FF 79 B0 20 1E +R 00 00 01 00 02 05 10 00 +T EB 02 00 00 +R 00 00 01 00 +T EB 02 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T F6 02 00 00 23 66 68 01 0D 00 09 46 23 66 68 +R 00 00 01 00 +T 01 03 00 00 DD 75 FE DD 74 FF 18 0F +R 00 00 01 00 +T 09 03 00 00 +R 00 00 01 00 +T 09 03 00 00 3E 01 A9 B0 20 09 AF DD 77 FE DD +R 00 00 01 00 +T 14 03 00 00 77 FF 18 00 +R 00 00 01 00 +T 18 03 00 00 +R 00 00 01 00 +T 18 03 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 21 03 00 00 +R 00 00 01 00 +T 21 03 00 00 CD 00 00 00 00 21 0C 00 19 7E 23 +R 00 00 01 00 02 05 0C 00 +T 2A 03 00 00 B6 28 15 +R 00 00 01 00 +T 2D 03 00 00 +R 00 00 01 00 +T 2D 03 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 38 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 3D 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 42 03 00 00 +R 00 00 01 00 +T 42 03 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 04 00 +T 48 03 00 00 +R 00 00 01 00 +T 48 03 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 10 00 +T 51 03 00 00 66 03 56 23 66 6A DD 75 FE DD 74 +R 00 00 01 00 +T 5C 03 00 00 FF EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 61 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 67 03 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 04 00 +T 6C 03 00 00 +R 00 00 01 00 +T 6C 03 00 00 CD 00 00 00 00 01 01 00 21 0F 00 +R 00 00 01 00 02 05 0C 00 +T 75 03 00 00 DD 5E 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 80 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 85 03 00 00 00 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 0A 0F 00 +T 8B 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 91 03 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 96 03 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 9C 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 04 00 +T 9E 03 00 00 +R 00 00 01 00 +T 9E 03 00 00 CD 00 00 00 00 EE FF DD 6E 02 DD +R 00 00 01 00 02 05 10 00 +T A7 03 00 00 66 03 46 23 66 68 DD 75 FE DD 74 +R 00 00 01 00 +T B2 03 00 00 FF AF DD 77 EE DD 77 EF AF DD 77 +R 00 00 01 00 +T BD 03 00 00 F2 DD 77 F3 DD 77 F4 DD 77 F5 ED +R 00 00 01 00 +T C8 03 00 00 4B 00 00 00 00 03 ED 43 +R 00 00 01 00 02 05 02 00 +T CE 03 00 00 00 00 00 00 0B DD 71 F0 DD 70 F1 +R 00 00 01 00 02 04 02 00 +T D7 03 00 00 01 10 00 C5 21 02 00 39 4D 44 DD +R 00 00 01 00 +T E2 03 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T EA 03 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T F1 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T F3 03 00 00 +R 00 00 01 00 +T F3 03 00 00 CD 00 00 00 00 01 00 00 21 0C 00 +R 00 00 01 00 02 05 0C 00 +T FC 03 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 03 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 09 04 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 04 00 diff --git a/src/nos/lib/internet_lib/update.rel b/src/nos/lib/internet_lib/update.rel new file mode 100644 index 00000000..465b9e48 --- /dev/null +++ b/src/nos/lib/internet_lib/update.rel @@ -0,0 +1,920 @@ +XL4 +H 2 areas 18 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _seq_gt Ref00000000 +S ?L_DEC_L03 Ref00000000 +S _stop_timer Ref00000000 +S _seq_lt Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _tcp_output Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _rtt_add Ref00000000 +S _pullup Ref00000000 +S ?S_LSH_L02 Ref00000000 +S ?L_MUL_L03 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _msclock Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _start_timer Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _seq_ge Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D5C flags 0 +S _update Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EA FF AF DD 77 EE +R 00 00 01 00 02 05 0E 00 +T 09 00 00 00 DD 77 EF AF DD 77 EA DD 77 EB DD +R 00 00 01 00 +T 14 00 00 00 77 EC DD 77 ED 21 16 00 DD 5E 02 +R 00 00 01 00 +T 1F 00 00 00 DD 56 03 19 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 2A 00 00 00 C5 D5 21 08 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 35 00 00 00 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 3E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 43 00 00 00 00 00 00 00 F1 F1 7D B4 28 16 +R 00 00 01 00 02 04 00 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 56 00 00 00 F6 01 77 23 7E F6 00 77 C3 +R 00 00 01 00 +T 5F 00 00 00 59 0D 00 00 +R 00 00 01 00 00 04 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 21 1E 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 6C 00 00 00 23 46 23 5E 23 56 D5 C5 21 04 00 +R 00 00 01 00 +T 77 00 00 00 DD 4E 04 DD 46 05 09 5E 23 56 23 +R 00 00 01 00 +T 82 00 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 88 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 8F 00 00 00 7D B4 20 67 21 1E 00 DD 4E 02 DD +R 00 00 01 00 +T 9A 00 00 00 46 03 09 4E 23 46 23 5E 23 56 D5 +R 00 00 01 00 +T A5 00 00 00 C5 21 04 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T B0 00 00 00 4E 23 46 23 5E 23 56 69 60 C1 A7 +R 00 00 01 00 +T BB 00 00 00 ED 42 C1 C2 44 02 00 00 EB ED 42 +R 00 00 01 00 00 08 01 00 +T C4 00 00 00 C2 44 02 00 00 21 22 00 DD 4E 02 +R 00 00 01 00 00 05 01 00 +T CD 00 00 00 DD 46 03 09 4E 23 46 23 5E 23 56 +R 00 00 01 00 +T D8 00 00 00 D5 C5 21 08 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T E3 00 00 00 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T EC 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T F1 00 00 00 00 00 00 00 F1 F1 7D B4 CA +R 00 00 01 00 02 04 00 00 +T F8 00 00 00 44 02 00 00 +R 00 00 01 00 00 04 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 21 1D 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 05 01 00 00 E6 20 47 23 7E E6 00 B0 20 15 21 +R 00 00 01 00 +T 10 01 00 00 6F 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T 1B 01 00 00 00 47 23 7E E6 01 B0 20 1F +R 00 00 01 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 21 0C 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T 2F 01 00 00 23 66 68 01 00 00 DD 75 F0 DD 74 +R 00 00 01 00 +T 3A 01 00 00 F1 DD 71 F2 DD 70 F3 18 2B +R 00 00 01 00 +T 43 01 00 00 +R 00 00 01 00 +T 43 01 00 00 21 0C 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 4E 01 00 00 23 56 21 2C 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 59 01 00 00 09 46 CD 00 00 00 00 EB 01 00 00 +R 00 00 01 00 02 07 0B 00 +T 62 01 00 00 DD 75 F0 DD 74 F1 DD 71 F2 DD 70 +R 00 00 01 00 +T 6D 01 00 00 F3 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 DD 6E F2 DD 66 F3 E5 DD 6E F0 DD +R 00 00 01 00 +T 79 01 00 00 66 F1 E5 21 26 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 84 01 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 8F 01 00 00 00 00 00 00 30 45 +R 00 00 01 00 02 04 0D 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 DD 36 EE 01 DD 36 EF 00 21 26 00 +R 00 00 01 00 +T 9E 01 00 00 DD 4E 02 DD 46 03 09 7E 23 B6 23 +R 00 00 01 00 +T A9 01 00 00 B6 23 B6 20 2A +R 00 00 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 21 12 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T B9 01 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T C3 01 00 00 1A 00 DD 4E 02 DD 46 03 09 C1 D5 +R 00 00 01 00 +T CE 01 00 00 59 50 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 21 26 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T E3 01 00 00 4E F2 DD 46 F3 DD 5E F0 DD 56 F1 +R 00 00 01 00 +T EE 01 00 00 73 23 72 23 71 23 70 21 04 00 DD +R 00 00 01 00 +T F9 01 00 00 4E 04 DD 46 05 09 4E 23 46 23 5E +R 00 00 01 00 +T 04 02 00 00 23 56 69 60 E5 21 1E 00 DD 4E 02 +R 00 00 01 00 +T 0F 02 00 00 DD 46 03 09 C1 D5 59 50 C1 73 23 +R 00 00 01 00 +T 1A 02 00 00 72 23 71 23 70 21 08 00 DD 4E 04 +R 00 00 01 00 +T 25 02 00 00 DD 46 05 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 30 02 00 00 EB E5 21 22 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 3B 02 00 00 19 D1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 21 12 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 4F 02 00 00 23 46 23 5E 23 56 D5 C5 21 08 00 +R 00 00 01 00 +T 5A 02 00 00 DD 4E 04 DD 46 05 09 5E 23 56 23 +R 00 00 01 00 +T 65 02 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 6B 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 72 02 00 00 7D B4 28 03 +R 00 00 01 00 +T 76 02 00 00 +R 00 00 01 00 +T 76 02 00 00 C3 59 0D 00 00 +R 00 00 01 00 00 05 01 00 +T 79 02 00 00 +R 00 00 01 00 +T 79 02 00 00 21 12 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 84 02 00 00 23 46 23 5E 23 56 D5 C5 21 08 00 +R 00 00 01 00 +T 8F 02 00 00 DD 4E 04 DD 46 05 09 4E 23 46 23 +R 00 00 01 00 +T 9A 02 00 00 5E 23 56 69 60 C1 A7 ED 42 C1 C2 +R 00 00 01 00 +T A5 02 00 00 8D 05 00 00 EB ED 42 C2 +R 00 00 01 00 00 04 01 00 +T AB 02 00 00 8D 05 00 00 +R 00 00 01 00 00 04 01 00 +T AD 02 00 00 +R 00 00 01 00 +T AD 02 00 00 21 7C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T B8 02 00 00 23 B6 23 B6 23 B6 28 3A DD 7E EE +R 00 00 01 00 +T C3 02 00 00 DD B6 EF 20 32 DD 7E 0A DD B6 0B +R 00 00 01 00 +T CE 02 00 00 20 2A 21 1D 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T D9 02 00 00 09 7E E6 20 47 23 7E E6 00 B0 20 +R 00 00 01 00 +T E4 02 00 00 15 21 1D 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T EF 02 00 00 7E E6 40 47 23 7E E6 00 B0 28 03 +R 00 00 01 00 +T FA 02 00 00 +R 00 00 01 00 +T FA 02 00 00 +R 00 00 01 00 +T FA 02 00 00 +R 00 00 01 00 +T FA 02 00 00 C3 59 0D 00 00 +R 00 00 01 00 00 05 01 00 +T FD 02 00 00 +R 00 00 01 00 +T FD 02 00 00 21 3D 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 08 03 00 00 23 46 03 70 2B 71 3E 03 A9 B0 C2 +R 00 00 01 00 +T 13 03 00 00 95 04 00 00 +R 00 00 01 00 00 04 01 00 +T 15 03 00 00 +R 00 00 01 00 +T 15 03 00 00 21 00 00 E5 21 02 00 E5 21 35 00 +R 00 00 01 00 +T 20 03 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 2B 03 00 00 4E 23 46 EB CD 00 00 00 00 E5 21 +R 00 00 01 00 02 09 10 00 +T 34 03 00 00 39 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 3F 03 00 00 23 72 23 71 23 70 21 39 00 DD 4E +R 00 00 01 00 +T 4A 03 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 55 03 00 00 46 C5 D5 21 5A 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 60 03 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 6B 03 00 00 00 00 00 00 30 14 21 39 00 DD 4E +R 00 00 01 00 02 04 0D 00 +T 74 03 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 7F 03 00 00 46 EB 18 12 +R 00 00 01 00 +T 83 03 00 00 +R 00 00 01 00 +T 83 03 00 00 21 5A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 8E 03 00 00 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 95 03 00 00 +R 00 00 01 00 +T 95 03 00 00 E5 21 39 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T A0 03 00 00 D1 73 23 72 23 71 23 70 21 1A 00 +R 00 00 01 00 +T AB 03 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T B6 03 00 00 5E 23 56 69 60 DD 75 FC DD 74 FD +R 00 00 01 00 +T C1 03 00 00 DD 73 FE DD 72 FF 21 12 00 DD 4E +R 00 00 01 00 +T CC 03 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T D7 03 00 00 56 69 60 E5 21 1A 00 DD 4E 02 DD +R 00 00 01 00 +T E2 03 00 00 46 03 09 C1 D5 59 50 C1 73 23 72 +R 00 00 01 00 +T ED 03 00 00 23 71 23 70 21 5A 00 DD 4E 02 DD +R 00 00 01 00 +T F8 03 00 00 46 03 09 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T 03 04 00 00 60 E5 21 35 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 0E 04 00 00 09 C1 D5 59 50 C1 73 23 72 23 71 +R 00 00 01 00 +T 19 04 00 00 23 70 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 22 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 27 04 00 00 00 00 00 00 21 1A 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 30 04 00 00 46 03 09 DD 4E FE DD 46 FF DD 5E +R 00 00 01 00 +T 3B 04 00 00 FC DD 56 FD 73 23 72 23 71 23 70 +R 00 00 01 00 +T 46 04 00 00 21 5A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 51 04 00 00 23 56 23 4E 23 46 C5 D5 01 00 00 +R 00 00 01 00 +T 5C 04 00 00 21 03 00 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 08 0C 00 +T 65 04 00 00 39 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 70 04 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T 7B 04 00 00 ED 4A 4D 44 EB E5 21 35 00 DD 5E +R 00 00 01 00 +T 86 04 00 00 02 DD 56 03 19 D1 73 23 72 23 71 +R 00 00 01 00 +T 91 04 00 00 23 70 18 2F +R 00 00 01 00 +T 95 04 00 00 +R 00 00 01 00 +T 95 04 00 00 21 3D 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T A0 04 00 00 23 46 21 03 00 CD 00 00 00 00 30 +R 00 00 01 00 02 0A 12 00 +T A9 04 00 00 1A +R 00 00 01 00 +T AA 04 00 00 +R 00 00 01 00 +T AA 04 00 00 21 35 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T B5 04 00 00 21 5A 00 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T C0 04 00 00 E1 CD 00 00 00 00 +R 00 00 01 00 02 06 07 00 +T C4 04 00 00 +R 00 00 01 00 +T C4 04 00 00 +R 00 00 01 00 +T C4 04 00 00 21 7C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T CF 04 00 00 23 56 23 4E 23 46 C5 D5 21 35 00 +R 00 00 01 00 +T DA 04 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T E5 04 00 00 4E 23 46 EB CD 00 00 00 00 30 14 +R 00 00 01 00 02 09 0D 00 +T EE 04 00 00 21 35 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T F9 04 00 00 23 56 23 4E 23 46 EB 18 12 +R 00 00 01 00 +T 02 05 00 00 +R 00 00 01 00 +T 02 05 00 00 21 7C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 0D 05 00 00 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 14 05 00 00 +R 00 00 01 00 +T 14 05 00 00 E5 21 35 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 1F 05 00 00 D1 73 23 72 23 71 23 70 21 35 00 +R 00 00 01 00 +T 2A 05 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 35 05 00 00 4E 23 46 C5 D5 21 5A 00 DD 4E 02 +R 00 00 01 00 +T 40 05 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 4B 05 00 00 EB CD 00 00 00 00 30 14 21 35 00 +R 00 00 01 00 02 06 0D 00 +T 54 05 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 5F 05 00 00 4E 23 46 EB 18 12 +R 00 00 01 00 +T 65 05 00 00 +R 00 00 01 00 +T 65 05 00 00 21 5A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 70 05 00 00 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 77 05 00 00 +R 00 00 01 00 +T 77 05 00 00 E5 21 35 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 82 05 00 00 D1 73 23 72 23 71 23 70 C3 +R 00 00 01 00 +T 8B 05 00 00 59 0D 00 00 +R 00 00 01 00 00 04 01 00 +T 8D 05 00 00 +R 00 00 01 00 +T 8D 05 00 00 21 3D 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 98 05 00 00 23 66 68 01 03 80 3E 80 AC 67 ED +R 00 00 01 00 +T A3 05 00 00 42 38 54 21 35 00 DD 4E 02 DD 46 +R 00 00 01 00 +T AE 05 00 00 03 09 5E 23 56 23 4E 23 46 C5 D5 +R 00 00 01 00 +T B9 05 00 00 21 39 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T C4 05 00 00 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T CC 05 00 00 00 00 00 00 30 2A +R 00 00 01 00 02 04 0D 00 +T D0 05 00 00 +R 00 00 01 00 +T D0 05 00 00 +R 00 00 01 00 +T D0 05 00 00 +R 00 00 01 00 +T D0 05 00 00 21 39 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T DB 05 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T E5 05 00 00 35 00 DD 4E 02 DD 46 03 09 C1 D5 +R 00 00 01 00 +T F0 05 00 00 59 50 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T FA 05 00 00 +R 00 00 01 00 +T FA 05 00 00 21 3D 00 DD 4E 02 DD 46 03 09 AF +R 00 00 01 00 +T 05 06 00 00 77 23 77 21 12 00 09 4E 23 46 23 +R 00 00 01 00 +T 10 06 00 00 5E 23 56 69 60 D5 E5 21 08 00 DD +R 00 00 01 00 +T 1B 06 00 00 4E 04 DD 46 05 09 4E 23 46 23 5E +R 00 00 01 00 +T 26 06 00 00 23 56 69 60 A7 C1 ED 42 EB C1 ED +R 00 00 01 00 +T 31 06 00 00 42 4D 44 EB DD 75 EA DD 74 EB DD +R 00 00 01 00 +T 3C 06 00 00 71 EC DD 70 ED 21 26 00 DD 4E 02 +R 00 00 01 00 +T 47 06 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 52 06 00 00 C5 D5 21 35 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 5D 06 00 00 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 67 06 00 00 00 00 00 00 D2 96 07 00 00 21 +R 00 00 01 00 02 04 0D 00 00 09 01 00 +T 6D 06 00 00 6F 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T 78 06 00 00 04 47 23 7E E6 00 B0 C2 +R 00 00 01 00 +T 80 06 00 00 96 07 00 00 +R 00 00 01 00 00 04 01 00 +T 82 06 00 00 +R 00 00 01 00 +T 82 06 00 00 +R 00 00 01 00 +T 82 06 00 00 +R 00 00 01 00 +T 82 06 00 00 21 39 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 8D 06 00 00 23 56 23 4E 23 46 C5 D5 21 35 00 +R 00 00 01 00 +T 98 06 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T A3 06 00 00 4E 23 46 EB CD 00 00 00 00 30 4E +R 00 00 01 00 02 09 0D 00 +T AC 06 00 00 +R 00 00 01 00 +T AC 06 00 00 21 35 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T B7 06 00 00 21 5A 00 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T C2 06 00 00 C5 D5 DD 4E EC DD 46 ED DD 6E EA +R 00 00 01 00 +T CD 06 00 00 DD 66 EB CD 00 00 00 00 30 0E DD +R 00 00 01 00 02 08 0D 00 +T D6 06 00 00 4E EC DD 46 ED DD 5E EA DD 56 EB +R 00 00 01 00 +T E1 06 00 00 18 11 +R 00 00 01 00 +T E3 06 00 00 +R 00 00 01 00 +T E3 06 00 00 21 5A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T EE 06 00 00 23 56 23 4E 23 46 +R 00 00 01 00 +T F4 06 00 00 +R 00 00 01 00 +T F4 06 00 00 E1 CD 00 00 00 00 18 48 +R 00 00 01 00 02 06 07 00 +T FA 06 00 00 +R 00 00 01 00 +T FA 06 00 00 21 35 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 05 07 00 00 21 35 00 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 10 07 00 00 C5 D5 21 5A 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 1B 07 00 00 09 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 26 07 00 00 5A 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 31 07 00 00 56 23 4E 23 46 EB CD 00 00 00 00 +R 00 00 01 00 02 0B 0C 00 +T 3A 07 00 00 CD 00 00 00 00 EB E1 CD +R 00 00 01 00 02 05 10 00 +T 40 07 00 00 00 00 00 00 +R 00 00 01 00 02 04 07 00 +T 42 07 00 00 +R 00 00 01 00 +T 42 07 00 00 21 35 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 4D 07 00 00 23 56 23 4E 23 46 C5 D5 21 26 00 +R 00 00 01 00 +T 58 07 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 63 07 00 00 4E 23 46 EB CD 00 00 00 00 30 2A +R 00 00 01 00 02 09 0D 00 +T 6C 07 00 00 +R 00 00 01 00 +T 6C 07 00 00 21 26 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 77 07 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T 81 07 00 00 35 00 DD 4E 02 DD 46 03 09 C1 D5 +R 00 00 01 00 +T 8C 07 00 00 59 50 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 96 07 00 00 +R 00 00 01 00 +T 96 07 00 00 +R 00 00 01 00 +T 96 07 00 00 21 7C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T A1 07 00 00 23 56 23 4E 23 46 C5 D5 21 35 00 +R 00 00 01 00 +T AC 07 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T B7 07 00 00 4E 23 46 EB CD 00 00 00 00 30 14 +R 00 00 01 00 02 09 0D 00 +T C0 07 00 00 21 35 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T CB 07 00 00 23 56 23 4E 23 46 EB 18 12 +R 00 00 01 00 +T D4 07 00 00 +R 00 00 01 00 +T D4 07 00 00 21 7C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T DF 07 00 00 23 56 23 4E 23 46 EB +R 00 00 01 00 +T E6 07 00 00 +R 00 00 01 00 +T E6 07 00 00 E5 21 35 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T F1 07 00 00 D1 73 23 72 23 71 23 70 21 35 00 +R 00 00 01 00 +T FC 07 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 07 08 00 00 4E 23 46 C5 D5 21 5A 00 DD 4E 02 +R 00 00 01 00 +T 12 08 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 1D 08 00 00 EB CD 00 00 00 00 30 14 21 35 00 +R 00 00 01 00 02 06 0D 00 +T 26 08 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 31 08 00 00 4E 23 46 EB 18 12 +R 00 00 01 00 +T 37 08 00 00 +R 00 00 01 00 +T 37 08 00 00 21 5A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 42 08 00 00 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 49 08 00 00 +R 00 00 01 00 +T 49 08 00 00 E5 21 35 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 54 08 00 00 D1 73 23 72 23 71 23 70 06 FF DD +R 00 00 01 00 +T 5F 08 00 00 70 F4 DD 70 F5 DD 70 F6 DD 70 F7 +R 00 00 01 00 +T 6A 08 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 75 08 00 00 E6 80 47 23 7E E6 00 B0 28 4E 21 +R 00 00 01 00 +T 80 08 00 00 1D 00 DD 4E 04 DD 46 05 09 7E E6 +R 00 00 01 00 +T 8B 08 00 00 00 47 23 7E E6 02 B0 28 39 +R 00 00 01 00 +T 94 08 00 00 +R 00 00 01 00 +T 94 08 00 00 +R 00 00 01 00 +T 94 08 00 00 +R 00 00 01 00 +T 94 08 00 00 21 19 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 9F 08 00 00 23 46 23 5E 23 56 69 60 D5 E5 3E +R 00 00 01 00 +T AA 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T AF 08 00 00 00 00 00 00 59 50 A7 C1 ED 42 EB +R 00 00 01 00 02 04 00 00 +T B8 08 00 00 C1 ED 42 4D 44 EB DD 75 F4 DD 74 +R 00 00 01 00 +T C3 08 00 00 F5 DD 71 F6 DD 70 F7 C3 +R 00 00 01 00 +T CB 08 00 00 6D 09 00 00 +R 00 00 01 00 00 04 01 00 +T CD 08 00 00 +R 00 00 01 00 +T CD 08 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T D8 08 00 00 E6 20 47 23 7E E6 00 B0 CA +R 00 00 01 00 +T E1 08 00 00 6D 09 00 00 21 96 00 DD 4E 02 DD +R 00 00 01 00 00 04 01 00 +T EA 08 00 00 46 03 09 4E 23 46 23 5E 23 56 D5 +R 00 00 01 00 +T F5 08 00 00 C5 21 08 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T 00 09 00 00 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 08 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 0D 09 00 00 00 00 00 00 F1 F1 7D B4 28 58 +R 00 00 01 00 02 04 00 00 +T 15 09 00 00 +R 00 00 01 00 +T 15 09 00 00 +R 00 00 01 00 +T 15 09 00 00 +R 00 00 01 00 +T 15 09 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 20 09 00 00 E6 DF 77 23 7E E6 FF 77 21 6F 00 +R 00 00 01 00 +T 2B 09 00 00 09 7E E6 04 47 23 7E E6 00 B0 20 +R 00 00 01 00 +T 36 09 00 00 36 +R 00 00 01 00 +T 37 09 00 00 +R 00 00 01 00 +T 37 09 00 00 21 92 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 42 09 00 00 23 46 23 5E 23 56 69 60 D5 E5 3E +R 00 00 01 00 +T 4D 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 52 09 00 00 00 00 00 00 59 50 A7 C1 ED 42 EB +R 00 00 01 00 02 04 00 00 +T 5B 09 00 00 C1 ED 42 4D 44 EB DD 75 F4 DD 74 +R 00 00 01 00 +T 66 09 00 00 F5 DD 71 F6 DD 70 F7 +R 00 00 01 00 +T 6D 09 00 00 +R 00 00 01 00 +T 6D 09 00 00 +R 00 00 01 00 +T 6D 09 00 00 +R 00 00 01 00 +T 6D 09 00 00 DD CB F7 7E C2 6E 0B 00 00 +R 00 00 01 00 00 09 01 00 +T 74 09 00 00 +R 00 00 01 00 +T 74 09 00 00 21 A6 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 7F 09 00 00 4E F6 DD 46 F7 DD 5E F4 DD 56 F5 +R 00 00 01 00 +T 8A 09 00 00 73 23 72 23 71 23 70 DD 6E F6 DD +R 00 00 01 00 +T 95 09 00 00 66 F7 E5 DD 6E F4 DD 66 F5 E5 21 +R 00 00 01 00 +T A0 09 00 00 9E 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T AB 09 00 00 56 23 4E 23 46 EB CD 00 00 00 00 +R 00 00 01 00 02 0B 0D 00 +T B4 09 00 00 30 2E 21 9E 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T BF 09 00 00 09 4E 23 46 23 5E 23 56 69 60 4D +R 00 00 01 00 +T CA 09 00 00 44 DD 6E F4 DD 66 F5 A7 ED 42 4D +R 00 00 01 00 +T D5 09 00 00 44 DD 6E F6 DD 66 F7 ED 52 E5 69 +R 00 00 01 00 +T E0 09 00 00 60 C1 18 28 +R 00 00 01 00 +T E4 09 00 00 +R 00 00 01 00 +T E4 09 00 00 21 9E 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T EF 09 00 00 23 46 23 5E 23 56 69 60 A7 DD 4E +R 00 00 01 00 +T FA 09 00 00 F4 DD 46 F5 ED 42 EB DD 4E F6 DD +R 00 00 01 00 +T 05 0A 00 00 46 F7 ED 42 4D 44 EB +R 00 00 01 00 +T 0C 0A 00 00 +R 00 00 01 00 +T 0C 0A 00 00 DD 75 F8 DD 74 F9 DD 71 FA DD 70 +R 00 00 01 00 +T 17 0A 00 00 FB 21 9E 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 22 0A 00 00 5E 23 56 23 4E 23 46 C5 D5 01 +R 00 00 01 00 +T 2C 0A 00 00 00 00 21 07 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 0C 00 +T 35 0A 00 00 E5 DD 6E F4 DD 66 F5 C1 09 EB DD +R 00 00 01 00 +T 40 0A 00 00 6E F6 DD 66 F7 C1 ED 4A E5 D5 21 +R 00 00 01 00 +T 4B 0A 00 00 04 00 C1 09 EB 21 00 00 C1 ED 4A +R 00 00 01 00 +T 56 0A 00 00 4D 44 EB 3E 03 CD 00 00 00 00 E5 +R 00 00 01 00 02 0A 15 00 +T 5F 0A 00 00 21 9E 00 DD 5E 02 DD 56 03 19 D1 +R 00 00 01 00 +T 6A 0A 00 00 73 23 72 23 71 23 70 21 A2 00 DD +R 00 00 01 00 +T 75 0A 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 80 0A 00 00 23 46 C5 D5 01 00 00 21 03 00 CD +R 00 00 01 00 +T 8B 0A 00 00 00 00 00 00 C5 E5 DD 6E F8 DD 66 +R 00 00 01 00 02 04 0C 00 +T 94 0A 00 00 F9 C1 09 EB DD 6E FA DD 66 FB C1 +R 00 00 01 00 +T 9F 0A 00 00 ED 4A E5 D5 21 02 00 C1 09 EB 21 +R 00 00 01 00 +T AA 0A 00 00 00 00 C1 ED 4A 4D 44 EB 3E 02 CD +R 00 00 01 00 +T B5 0A 00 00 00 00 00 00 E5 21 A2 00 DD 5E 02 +R 00 00 01 00 02 04 15 00 +T BE 0A 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T C9 0A 00 00 70 DD 6E F6 DD 66 F7 E5 DD 6E F4 +R 00 00 01 00 +T D4 0A 00 00 DD 66 F5 E5 21 08 00 DD 4E 02 DD +R 00 00 01 00 +T DF 0A 00 00 46 03 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T EA 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T EF 0A 00 00 00 00 00 00 E1 E1 21 72 00 DD 4E +R 00 00 01 00 02 04 00 00 +T F8 0A 00 00 02 DD 46 03 09 AF 77 23 77 DD 7E +R 00 00 01 00 +T 03 0B 00 00 F4 DD B6 F5 DD B6 F6 DD B6 F7 28 +R 00 00 01 00 +T 0E 0B 00 00 5F +R 00 00 01 00 +T 0F 0B 00 00 +R 00 00 01 00 +T 0F 0B 00 00 DD 6E F6 DD 66 F7 E5 DD 6E F4 DD +R 00 00 01 00 +T 1A 0B 00 00 66 F5 E5 21 9A 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 25 0B 00 00 03 09 4E 23 46 23 5E 23 56 69 60 +R 00 00 01 00 +T 30 0B 00 00 D5 E5 21 08 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 3B 0B 00 00 09 4E 23 46 23 5E 23 56 69 60 A7 +R 00 00 01 00 +T 46 0B 00 00 C1 ED 42 EB C1 ED 42 E5 D5 01 +R 00 00 01 00 +T 50 0B 00 00 00 00 21 E8 03 CD 00 00 00 00 CD +R 00 00 01 00 02 0A 0C 00 +T 59 0B 00 00 00 00 00 00 E5 21 BC 00 DD 5E 02 +R 00 00 01 00 02 04 10 00 +T 62 0B 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 6D 0B 00 00 70 +R 00 00 01 00 +T 6E 0B 00 00 +R 00 00 01 00 +T 6E 0B 00 00 +R 00 00 01 00 +T 6E 0B 00 00 21 7C 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 79 0B 00 00 4E EC DD 46 ED DD 5E EA DD 56 EB +R 00 00 01 00 +T 84 0B 00 00 CD 00 00 00 00 21 08 00 DD 4E 04 +R 00 00 01 00 02 05 16 00 +T 8D 0B 00 00 DD 46 05 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 98 0B 00 00 EB E5 21 12 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T A3 0B 00 00 19 D1 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T AD 0B 00 00 6F 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T B8 0B 00 00 10 47 23 7E E6 00 B0 20 2E +R 00 00 01 00 +T C1 0B 00 00 +R 00 00 01 00 +T C1 0B 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T CC 0B 00 00 F6 10 77 23 7E F6 00 77 DD 6E EA +R 00 00 01 00 +T D7 0B 00 00 DD 66 EB DD 4E EC DD 46 ED CD +R 00 00 01 00 +T E1 0B 00 00 00 00 00 00 DD 75 EA DD 74 EB DD +R 00 00 01 00 02 04 02 00 +T EA 0B 00 00 71 EC DD 70 ED +R 00 00 01 00 +T EF 0B 00 00 +R 00 00 01 00 +T EF 0B 00 00 DD 6E EA DD 66 EB E5 01 00 00 21 +R 00 00 01 00 +T FA 0B 00 00 76 00 DD 5E 02 DD 56 03 19 EB 3E +R 00 00 01 00 +T 05 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 0A 0C 00 00 00 00 00 00 F1 21 82 00 DD 4E 02 +R 00 00 01 00 02 04 00 00 +T 13 0C 00 00 DD 46 03 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 1B 0C 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 21 0C 00 00 16 00 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 2C 0C 00 00 D5 21 12 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 37 0C 00 00 4E 23 46 23 5E 23 56 69 60 C1 A7 +R 00 00 01 00 +T 42 0C 00 00 ED 42 C1 20 05 EB ED 42 28 13 +R 00 00 01 00 +T 4C 0C 00 00 +R 00 00 01 00 +T 4C 0C 00 00 +R 00 00 01 00 +T 4C 0C 00 00 21 82 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 57 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 11 00 02 0A 11 00 +T 5D 0C 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 5F 0C 00 00 +R 00 00 01 00 +T 5F 0C 00 00 21 12 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 6A 0C 00 00 23 56 23 4E 23 46 C5 D5 21 1A 00 +R 00 00 01 00 +T 75 0C 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 80 0C 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 86 0C 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 8D 0C 00 00 7D B4 28 2A +R 00 00 01 00 +T 91 0C 00 00 +R 00 00 01 00 +T 91 0C 00 00 21 12 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 9C 0C 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T A6 0C 00 00 1A 00 DD 4E 02 DD 46 03 09 C1 D5 +R 00 00 01 00 +T B1 0C 00 00 59 50 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T BB 0C 00 00 +R 00 00 01 00 +T BB 0C 00 00 21 6F 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T C6 0C 00 00 E6 FB 77 23 7E E6 FF 77 DD 7E EA +R 00 00 01 00 +T D1 0C 00 00 DD B6 EB DD B6 EC DD B6 ED 28 7D +R 00 00 01 00 +T DC 0C 00 00 21 69 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T E7 0C 00 00 23 B6 23 B6 28 6C 21 0E 00 DD 4E +R 00 00 01 00 +T F2 0C 00 00 02 DD 46 03 09 7E FE 05 28 0F 21 +R 00 00 01 00 +T FD 0C 00 00 0E 00 DD 4E 02 DD 46 03 09 7E FE +R 00 00 01 00 +T 08 0D 00 00 08 20 4E +R 00 00 01 00 +T 0B 0D 00 00 +R 00 00 01 00 +T 0B 0D 00 00 +R 00 00 01 00 +T 0B 0D 00 00 +R 00 00 01 00 +T 0B 0D 00 00 +R 00 00 01 00 +T 0B 0D 00 00 +R 00 00 01 00 +T 0B 0D 00 00 21 7C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 16 0D 00 00 23 46 23 5E 23 56 69 60 D5 E5 21 +R 00 00 01 00 +T 21 0D 00 00 5E 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 2C 0D 00 00 46 23 5E 23 56 69 60 A7 C1 ED 42 +R 00 00 01 00 +T 37 0D 00 00 EB C1 ED 42 E5 D5 DD 5E 02 DD 56 +R 00 00 01 00 +T 42 0D 00 00 03 21 69 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 4D 0D 00 00 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 55 0D 00 00 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 00 00 +T 59 0D 00 00 +R 00 00 01 00 +T 59 0D 00 00 +R 00 00 01 00 +T 59 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/intl.lib b/src/nos/lib/intl.lib new file mode 100644 index 00000000..1960829f --- /dev/null +++ b/src/nos/lib/intl.lib @@ -0,0 +1,34 @@ +intl_lib/gettext.rel + __gettext +intl_lib/__failtext.rel + ___failtext +intl_lib/__dgetfail.rel + ___dgetfail +intl_lib/__fgetfail.rel + ___fgetfail +intl_lib/__getfail.rel + ___getfail +intl_lib/_dprintf.rel + __dprintf +intl_lib/_vdprintf.rel + __vdprintf +intl_lib/_fprintf.rel + __fprintf +intl_lib/_vfprintf.rel + __vfprintf +intl_lib/_fputs.rel + __fputs +intl_lib/_printf.rel + __printf +intl_lib/_vprintf.rel + __vprintf +intl_lib/_puts.rel + __puts +intl_lib/_strcpy.rel + __strcpy +intl_lib/_strlen.rel + __strlen +intl_lib/_strncmp.rel + __strncmp +intl_lib/_strncpy.rel + __strncpy diff --git a/src/nos/lib/intl_lib/__dgetfail.rel b/src/nos/lib/intl_lib/__dgetfail.rel new file mode 100644 index 00000000..87a51d1a --- /dev/null +++ b/src/nos/lib/intl_lib/__dgetfail.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___failtext Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dprintf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___dgetfail Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 4E 0C DD 6E 0A +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 66 0B 06 00 C5 E5 21 +R 00 00 01 00 +T 11 00 00 00 00 00 00 00 E5 D5 3E 00 00 00 00 +R 00 00 01 00 02 04 03 00 2B 0B 06 00 +T 17 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 1E 00 00 00 F1 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 08 01 00 diff --git a/src/nos/lib/intl_lib/__failtext.rel b/src/nos/lib/intl_lib/__failtext.rel new file mode 100644 index 00000000..c06fc986 --- /dev/null +++ b/src/nos/lib/intl_lib/__failtext.rel @@ -0,0 +1,19 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 19 flags 0 +S ___failtext Def00000000 +A CDATA0 size 19 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 5F 67 65 74 74 65 78 74 28 25 30 +R 00 00 03 00 +T 0B 00 00 00 36 6C 78 29 20 66 61 69 6C 75 72 +R 00 00 03 00 +T 16 00 00 00 65 0A 00 +R 00 00 03 00 diff --git a/src/nos/lib/intl_lib/__fgetfail.rel b/src/nos/lib/intl_lib/__fgetfail.rel new file mode 100644 index 00000000..45b60721 --- /dev/null +++ b/src/nos/lib/intl_lib/__fgetfail.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___failtext Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fprintf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___fgetfail Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 4E 0C DD 6E 0A +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 66 0B 06 00 C5 E5 21 +R 00 00 01 00 +T 11 00 00 00 00 00 00 00 E5 D5 3E 00 00 00 00 +R 00 00 01 00 02 04 03 00 2B 0B 06 00 +T 17 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 1E 00 00 00 F1 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 08 01 00 diff --git a/src/nos/lib/intl_lib/__getfail.rel b/src/nos/lib/intl_lib/__getfail.rel new file mode 100644 index 00000000..105632a3 --- /dev/null +++ b/src/nos/lib/intl_lib/__getfail.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___failtext Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1B flags 0 +S ___getfail Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 6B 62 06 00 C5 E5 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 04 00 2B 0B 01 00 +T 0F 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 16 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 02 00 diff --git a/src/nos/lib/intl_lib/_dprintf.rel b/src/nos/lib/intl_lib/_dprintf.rel new file mode 100644 index 00000000..4b24743f --- /dev/null +++ b/src/nos/lib/intl_lib/_dprintf.rel @@ -0,0 +1,27 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __vdprintf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 39 flags 0 +S __dprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 10 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 04 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 6E 0E E5 DD 6E 0C DD 66 0D E5 +R 00 00 01 00 +T 1F 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 27 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 2E 00 00 00 F1 F1 DD 75 FE DD 74 FF C3 +R 00 00 01 00 +T 37 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/intl_lib/_fprintf.rel b/src/nos/lib/intl_lib/_fprintf.rel new file mode 100644 index 00000000..fbefc09c --- /dev/null +++ b/src/nos/lib/intl_lib/_fprintf.rel @@ -0,0 +1,27 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __vfprintf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 39 flags 0 +S __fprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 10 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 04 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 6E 0E E5 DD 6E 0C DD 66 0D E5 +R 00 00 01 00 +T 1F 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 27 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 2E 00 00 00 F1 F1 DD 75 FE DD 74 FF C3 +R 00 00 01 00 +T 37 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/intl_lib/_fputs.rel b/src/nos/lib/intl_lib/_fputs.rel new file mode 100644 index 00000000..a7daaee0 --- /dev/null +++ b/src/nos/lib/intl_lib/_fputs.rel @@ -0,0 +1,52 @@ +XL4 +H 2 areas A global symbols +S ___fgetfail Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S __gettext Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _fputs Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6E flags 0 +S __fputs Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 4E 04 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 18 00 00 00 FC DD 74 FD 7D B4 20 1D +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 6E 04 E5 DD 6E 02 DD 66 03 E5 +R 00 00 01 00 +T 2B 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 33 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 3A 00 00 00 F1 18 2E +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 DD 4E 0A DD 46 0B DD 5E FC DD 56 +R 00 00 01 00 +T 48 00 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 4E 00 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 01 00 +T 57 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 5F 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T 66 00 00 00 6E FE DD 66 FF +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/intl_lib/_printf.rel b/src/nos/lib/intl_lib/_printf.rel new file mode 100644 index 00000000..b35b5dd3 --- /dev/null +++ b/src/nos/lib/intl_lib/_printf.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S __vprintf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2F flags 0 +S __printf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0E 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 04 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 4E 0C DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 23 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 2C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/intl_lib/_puts.rel b/src/nos/lib/intl_lib/_puts.rel new file mode 100644 index 00000000..fa392606 --- /dev/null +++ b/src/nos/lib/intl_lib/_puts.rel @@ -0,0 +1,48 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _puts Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___getfail Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S __gettext Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5E flags 0 +S __puts Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 4E 04 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 18 00 00 00 FC DD 74 FD 7D B4 20 13 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 4E 04 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 2F 00 00 00 00 00 00 00 18 28 +R 00 00 01 00 02 04 00 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 3B 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 42 00 00 00 75 FE DD 74 FF DD 5E FC DD 56 FD +R 00 00 01 00 +T 4D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 53 00 00 00 00 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 00 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/intl_lib/_strcpy.rel b/src/nos/lib/intl_lib/_strcpy.rel new file mode 100644 index 00000000..80741b13 --- /dev/null +++ b/src/nos/lib/intl_lib/_strcpy.rel @@ -0,0 +1,50 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___getfail Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S __gettext Ref00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6C flags 0 +S __strcpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 4E 0C DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 18 00 00 00 FE DD 74 FF 7D B4 20 21 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 4E 0C DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 2F 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 36 +R 00 00 01 00 02 04 00 00 +T 38 00 00 00 00 DD 6E 02 DD 66 03 18 28 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 4E FE DD 46 FF DD 5E 02 DD 56 +R 00 00 01 00 +T 4C 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 52 00 00 00 CD 00 00 00 00 DD 5E FE DD 56 FF +R 00 00 01 00 02 05 00 00 +T 5B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 61 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 00 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/intl_lib/_strlen.rel b/src/nos/lib/intl_lib/_strlen.rel new file mode 100644 index 00000000..b6463f91 --- /dev/null +++ b/src/nos/lib/intl_lib/_strlen.rel @@ -0,0 +1,48 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S ___getfail Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S __gettext Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 61 flags 0 +S __strlen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 4E 04 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 18 00 00 00 FE DD 74 FF 7D B4 20 16 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 4E 04 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 2F 00 00 00 00 00 00 00 21 00 00 18 28 +R 00 00 01 00 02 04 00 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 3E 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 45 00 00 00 75 FC DD 74 FD DD 5E FE DD 56 FF +R 00 00 01 00 +T 50 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 56 00 00 00 00 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 00 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/intl_lib/_strncmp.rel b/src/nos/lib/intl_lib/_strncmp.rel new file mode 100644 index 00000000..2d82ae1a --- /dev/null +++ b/src/nos/lib/intl_lib/_strncmp.rel @@ -0,0 +1,62 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strncmp Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___getfail Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S __gettext Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7E flags 0 +S __strncmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 4E 0C DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 18 00 00 00 FE DD 74 FF 7D B4 20 25 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 4E 0C DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 2F 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 AF +R 00 00 01 00 02 04 00 00 +T 38 00 00 00 B6 28 05 21 01 00 18 03 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 00 00 +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 18 36 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 6E 0E DD 66 0F E5 DD 4E FE DD +R 00 00 01 00 +T 50 00 00 00 46 FF DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 59 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 5E 00 00 00 00 00 00 00 F1 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 00 00 +T 67 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 6F 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 76 00 00 00 6E FC DD 66 FD +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/intl_lib/_strncpy.rel b/src/nos/lib/intl_lib/_strncpy.rel new file mode 100644 index 00000000..5be01167 --- /dev/null +++ b/src/nos/lib/intl_lib/_strncpy.rel @@ -0,0 +1,59 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memset Ref00000000 +S _strncpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___getfail Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S __gettext Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 85 flags 0 +S __strncpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 4E 0C DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 18 00 00 00 FE DD 74 FF 7D B4 20 32 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 4E 0C DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 2F 00 00 00 00 00 00 00 DD 6E 0E DD 66 0F E5 +R 00 00 01 00 02 04 00 00 +T 38 00 00 00 01 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 47 00 00 00 00 00 00 00 F1 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 00 00 +T 50 00 00 00 18 30 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 6E 0E DD 66 0F E5 DD 4E FE DD +R 00 00 01 00 +T 5D 00 00 00 46 FF DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 66 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 6B 00 00 00 00 00 00 00 F1 DD 5E FE DD 56 FF +R 00 00 01 00 02 04 00 00 +T 74 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 7A 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/intl_lib/_vdprintf.rel b/src/nos/lib/intl_lib/_vdprintf.rel new file mode 100644 index 00000000..aab6e727 --- /dev/null +++ b/src/nos/lib/intl_lib/_vdprintf.rel @@ -0,0 +1,54 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S __gettext Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _vdprintf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___dgetfail Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 76 flags 0 +S __vdprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 4E 0C DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 18 00 00 00 FC DD 74 FD 7D B4 20 1D +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 6E 0C E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T 2B 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 33 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T 3A 00 00 00 F1 18 36 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 DD 6E 0E DD 66 0F E5 DD 4E FC DD +R 00 00 01 00 +T 48 00 00 00 46 FD DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 51 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 56 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 5F 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 67 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 6E 00 00 00 6E FE DD 66 FF +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/intl_lib/_vfprintf.rel b/src/nos/lib/intl_lib/_vfprintf.rel new file mode 100644 index 00000000..77f4559c --- /dev/null +++ b/src/nos/lib/intl_lib/_vfprintf.rel @@ -0,0 +1,54 @@ +XL4 +H 2 areas A global symbols +S ___fgetfail Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S __gettext Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _vfprintf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 76 flags 0 +S __vfprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 4E 0C DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 18 00 00 00 FC DD 74 FD 7D B4 20 1D +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 6E 0C E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T 2B 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 33 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 3A 00 00 00 F1 18 36 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 DD 6E 0E DD 66 0F E5 DD 4E FC DD +R 00 00 01 00 +T 48 00 00 00 46 FD DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 51 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 56 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 01 00 +T 5F 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 67 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T 6E 00 00 00 6E FE DD 66 FF +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/intl_lib/_vprintf.rel b/src/nos/lib/intl_lib/_vprintf.rel new file mode 100644 index 00000000..4768bac8 --- /dev/null +++ b/src/nos/lib/intl_lib/_vprintf.rel @@ -0,0 +1,50 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _vprintf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___getfail Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S __gettext Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 64 flags 0 +S __vprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 4E 04 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 18 00 00 00 FC DD 74 FD 7D B4 20 13 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 4E 04 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 2F 00 00 00 00 00 00 00 18 2E +R 00 00 01 00 02 04 00 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 DD 4E 0A DD 46 0B DD 5E FC DD 56 +R 00 00 01 00 +T 3E 00 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 44 00 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 00 00 +T 4D 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 55 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 5C 00 00 00 6E FE DD 66 FF +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/intl_lib/gettext.rel b/src/nos/lib/intl_lib/gettext.rel new file mode 100644 index 00000000..62d5f988 --- /dev/null +++ b/src/nos/lib/intl_lib/gettext.rel @@ -0,0 +1,42 @@ +XL4 +H 3 areas 5 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _malloc Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 1A flags 0 +A CODE size 2F flags 0 +S __gettext Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 ED 39 38 4E 23 46 23 FD 7E 00 ED +R 00 00 01 00 +T 0B 00 00 00 39 38 C9 +R 00 00 01 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 ED 39 38 ED B0 FD 7E 00 ED 39 38 +R 00 00 01 00 +T 19 00 00 00 C9 +R 00 00 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 FD E5 2A FE 10 E5 FD E1 69 7E EB +R 00 00 02 00 +T 0B 00 00 00 CD 00 00 00 00 1A E5 F5 59 50 21 +R 00 00 02 00 00 05 01 00 +T 14 00 00 00 00 00 00 00 3E 00 00 00 00 CD +R 00 00 02 00 02 04 02 00 2B 09 02 00 +T 19 00 00 00 00 00 00 00 7D B4 28 0D 5D 54 F1 +R 00 00 02 00 02 04 00 00 +T 22 00 00 00 E3 CD 0E 00 00 00 E1 +R 00 00 02 00 00 06 01 00 +T 27 00 00 00 +R 00 00 02 00 +T 27 00 00 00 FD E1 C3 00 00 00 00 +R 00 00 02 00 02 07 01 00 +T 2C 00 00 00 +R 00 00 02 00 +T 2C 00 00 00 F1 18 F8 +R 00 00 02 00 diff --git a/src/nos/lib/messages.lib b/src/nos/lib/messages.lib new file mode 100644 index 00000000..6cf19571 --- /dev/null +++ b/src/nos/lib/messages.lib @@ -0,0 +1,3032 @@ +messages_lib/0000_ffff_.rel + ___0000_ffff_ +messages_lib/0001_508a__08_20_08.rel + ___0001_508a__08_20_08 +messages_lib/0002_17d6__09_09_20MRU_09_20A.rel + ___0002_17d6__09_09_20MRU_09_20A +messages_lib/0003_002f__09_09_256u_20Lcp_2.rel + ___0003_002f__09_09_256u_20Lcp_2 +messages_lib/0004_14b3__09_09_256u_20Lcp_2.rel + ___0004_14b3__09_09_256u_20Lcp_2 +messages_lib/0005_7313__09_09pid_20_25d_2c.rel + ___0005_7313__09_09pid_20_25d_2c +messages_lib/0006_bdbf__09_2510ld_20Cmp_2c.rel + ___0006_bdbf__09_2510ld_20Cmp_2c +messages_lib/0007_d27a__09_2510ld_20Cmp_2c.rel + ___0007_d27a__09_2510ld_20Cmp_2c +messages_lib/0008_c900__09_2510ld_20Search.rel + ___0008_c900__09_2510ld_20Search +messages_lib/0009_2913__09_25ld.rel + ___0009_2913__09_25ld +messages_lib/000a_1c3a__09_25p_09_25u_09_2.rel + ___000a_1c3a__09_25p_09_25u_09_2 +messages_lib/000b_b9ba__09_25s.rel + ___000b_b9ba__09_25s +messages_lib/000c_21cf__09_25s_09_25s_09_2.rel + ___000c_21cf__09_25s_09_25s_09_2 +messages_lib/000d_1d7d__09_25s_09_25s_0a.rel + ___000d_1d7d__09_25s_09_25s_0a +messages_lib/000e_b532__09_25s_0a.rel + ___000e_b532__09_25s_0a +messages_lib/000f_26e5__09_25u_09_25s_0a.rel + ___000f_26e5__09_25u_09_25s_0a +messages_lib/0010_7e01__09_28open_20for_20.rel + ___0010_7e01__09_28open_20for_20 +messages_lib/0011_d62d__09_3c_25u_3e.rel + ___0011_d62d__09_3c_25u_3e +messages_lib/0012_9f29__09IN.rel + ___0012_9f29__09IN +messages_lib/0013_53f6__09Local_3a_09.rel + ___0013_53f6__09Local_3a_09 +messages_lib/0014_a684__09Remote_3a_09.rel + ___0014_a684__09Remote_3a_09 +messages_lib/0015_e0e0__09Urgent_20pointer.rel + ___0015_e0e0__09Urgent_20pointer +messages_lib/0016_c0f0__09changes_3a_200x_.rel + ___0016_c0f0__09changes_3a_200x_ +messages_lib/0017_6a8d__09connection_200x_.rel + ___0017_6a8d__09connection_200x_ +messages_lib/0018_a28a__09connection_20ID_.rel + ___0018_a28a__09connection_20ID_ +messages_lib/0019_cf72__09delta_20ACK_20an.rel + ___0019_cf72__09delta_20ACK_20an +messages_lib/001a_8077__09delta_20ACK_3a_2.rel + ___001a_8077__09delta_20ACK_3a_2 +messages_lib/001b_4a2b__09delta_20ID_3a_20.rel + ___001b_4a2b__09delta_20ID_3a_20 +messages_lib/001c_7710__09delta_20SEQ_20im.rel + ___001c_7710__09delta_20SEQ_20im +messages_lib/001d_a966__09delta_20SEQ_3a_2.rel + ___001d_a966__09delta_20SEQ_3a_2 +messages_lib/001e_f05a__09delta_20WINDOW_3.rel + ___001e_f05a__09delta_20WINDOW_3 +messages_lib/001f_ad18__09increment_20ID_0.rel + ___001f_ad18__09increment_20ID_0 +messages_lib/0020_13bc__09local_20IP_20add.rel + ___0020_13bc__09local_20IP_20add +messages_lib/0021_efeb__09pid_20_25d_2c_20.rel + ___0021_efeb__09pid_20_25d_2c_20 +messages_lib/0022_a0dd__0a.rel + ___0022_a0dd__0a +messages_lib/0023_f279__0a_20_20_20_20.rel + ___0023_f279__0a_20_20_20_20 +messages_lib/0024_f170__0a_20_20_20_20_20_.rel + ___0024_f170__0a_20_20_20_20_20_ +messages_lib/0025_da94__0a_25s_20_2d_20_25.rel + ___0025_da94__0a_25s_20_2d_20_25 +messages_lib/0026_e088__0a_25s_20_2d_20_25.rel + ___0026_e088__0a_25s_20_2d_20_25 +messages_lib/0027_c061__0a_2a_2a_2a_20Loca.rel + ___0027_c061__0a_2a_2a_2a_20Loca +messages_lib/0028_932c__0a_2a_2a_2a_20Unab.rel + ___0028_932c__0a_2a_2a_2a_20Unab +messages_lib/0029_2592__0a_2a_2a_2a_2a_2a_.rel + ___0029_2592__0a_2a_2a_2a_2a_2a_ +messages_lib/002a_0887__0aCurrent_20remote.rel + ___002a_0887__0aCurrent_20remote +messages_lib/002b_ebd8__0aReclaimation_20a.rel + ___002b_ebd8__0aReclaimation_20a +messages_lib/002c_c546__0aUsed_20address_2.rel + ___002c_c546__0aUsed_20address_2 +messages_lib/002d_e8fc__0apanic_3a_20.rel + ___002d_e8fc__0apanic_3a_20 +messages_lib/002e_4403__20_0aend_0asize_20.rel + ___002e_4403__20_0aend_0asize_20 +messages_lib/002f_f289__20_20.rel + ___002f_f289__20_20 +messages_lib/0030_3839__20_20_20.rel + ___0030_3839__20_20_20 +messages_lib/0031_8d78__20_20_20_20.rel + ___0031_8d78__20_20_20_20 +messages_lib/0032_de40__20_20_20_20_20.rel + ___0032_de40__20_20_20_20_20 +messages_lib/0033_3e02__20_20_20_20_20_20_.rel + ___0033_3e02__20_20_20_20_20_20_ +messages_lib/0034_0534__20_20_20_20_20_20_.rel + ___0034_0534__20_20_20_20_20_20_ +messages_lib/0035_3fef__20_20_20_20_20_20_.rel + ___0035_3fef__20_20_20_20_20_20_ +messages_lib/0036_3164__20_20_20_20_20_20_.rel + ___0036_3164__20_20_20_20_20_20_ +messages_lib/0037_c6d7__20_20_20_20_20_20_.rel + ___0037_c6d7__20_20_20_20_20_20_ +messages_lib/0038_9d57__20_20_20_20_20_20_.rel + ___0038_9d57__20_20_20_20_20_20_ +messages_lib/0039_d46e__20_20_20_20_20_20_.rel + ___0039_d46e__20_20_20_20_20_20_ +messages_lib/003a_f37c__20_20_20_20_20_20_.rel + ___003a_f37c__20_20_20_20_20_20_ +messages_lib/003b_5dd1__20_20_20_20_20_20_.rel + ___003b_5dd1__20_20_20_20_20_20_ +messages_lib/003c_0406__20_20_20_20_20_20_.rel + ___003c_0406__20_20_20_20_20_20_ +messages_lib/003d_da67__20_20_20_20_20_20_.rel + ___003d_da67__20_20_20_20_20_20_ +messages_lib/003e_f638__20_20_20_20_20_20_.rel + ___003e_f638__20_20_20_20_20_20_ +messages_lib/003f_74c7__20_20_20_20_20_20_.rel + ___003f_74c7__20_20_20_20_20_20_ +messages_lib/0040_f10d__20_20_20_20_20_20_.rel + ___0040_f10d__20_20_20_20_20_20_ +messages_lib/0041_d02b__20_20_20_20_20_20_.rel + ___0041_d02b__20_20_20_20_20_20_ +messages_lib/0042_0105__20_20_20_20_20_20_.rel + ___0042_0105__20_20_20_20_20_20_ +messages_lib/0043_c46d__20_20_20_20_20_20_.rel + ___0043_c46d__20_20_20_20_20_20_ +messages_lib/0044_3a28__20_20_20_20_20_20_.rel + ___0044_3a28__20_20_20_20_20_20_ +messages_lib/0045_48df__20_20_20_20_20_20_.rel + ___0045_48df__20_20_20_20_20_20_ +messages_lib/0046_da1e__20_20_20_20_20_20s.rel + ___0046_da1e__20_20_20_20_20_20s +messages_lib/0047_3800__20_20_20_20_20_26A.rel + ___0047_3800__20_20_20_20_20_26A +messages_lib/0048_0e60__20_20_20_20_20_28_.rel + ___0048_0e60__20_20_20_20_20_28_ +messages_lib/0049_d7d4__20_20_20_20_20Broa.rel + ___0049_d7d4__20_20_20_20_20Broa +messages_lib/004a_f5a8__20_20_20_20_20Defa.rel + ___004a_f5a8__20_20_20_20_20Defa +messages_lib/004b_de7b__20_20_20_20_20Host.rel + ___004b_de7b__20_20_20_20_20Host +messages_lib/004c_a271__20_20_20_20_20INF.rel + ___004c_a271__20_20_20_20_20INF +messages_lib/004d_1775__20_20_20_20_20IP_2.rel + ___004d_1775__20_20_20_20_20IP_2 +messages_lib/004e_7765__20_20_20_20_20Name.rel + ___004e_7765__20_20_20_20_20Name +messages_lib/004f_6879__20_20_20_20_20Subn.rel + ___004f_6879__20_20_20_20_20Subn +messages_lib/0050_dac6__20_20_20_20_25_2d4.rel + ___0050_dac6__20_20_20_20_25_2d4 +messages_lib/0051_b576__20_20_20_20_2512s.rel + ___0051_b576__20_20_20_20_2512s +messages_lib/0052_e5e6__20_20_20_20_253u_0.rel + ___0052_e5e6__20_20_20_20_253u_0 +messages_lib/0053_ed50__20_20_20_20_25s_20.rel + ___0053_ed50__20_20_20_20_25s_20 +messages_lib/0054_3528__20_20_20_20_25s_20.rel + ___0054_3528__20_20_20_20_25s_20 +messages_lib/0055_cbdf__20_20_20_20_25s_20.rel + ___0055_cbdf__20_20_20_20_25s_20 +messages_lib/0056_f7f3__20_20_20_20_26UCB_.rel + ___0056_f7f3__20_20_20_20_26UCB_ +messages_lib/0057_9bd9__20_20_20_20In_09TC.rel + ___0057_9bd9__20_20_20_20In_09TC +messages_lib/0058_7788__20_20_20_20Out_09T.rel + ___0058_7788__20_20_20_20Out_09T +messages_lib/0059_8f4d__20_20_20_20Record_.rel + ___0059_8f4d__20_20_20_20Record_ +messages_lib/005a_eacd__20_20_20_20Upload_.rel + ___005a_eacd__20_20_20_20Upload_ +messages_lib/005b_2da2__20_20_20_25s_0a.rel + ___005b_2da2__20_20_20_25s_0a +messages_lib/005c_ad66__20_20_20PUSH.rel + ___005c_ad66__20_20_20PUSH +messages_lib/005d_9f3a__20_20_20TCP_20chec.rel + ___005d_9f3a__20_20_20TCP_20chec +messages_lib/005e_5946__20_20_20connection.rel + ___005e_5946__20_20_20connection +messages_lib/005f_f01f__20_20_3d_3d_3d_3d_.rel + ___005f_f01f__20_20_3d_3d_3d_3d_ +messages_lib/0060_cfff__20_20_3d_3d_3d_3d_.rel + ___0060_cfff__20_20_3d_3d_3d_3d_ +messages_lib/0061_8181__20_20SR_20_5bnumbe.rel + ___0061_8181__20_20SR_20_5bnumbe +messages_lib/0062_1149__20_20S_5bF_5d_20na.rel + ___0062_1149__20_20S_5bF_5d_20na +messages_lib/0063_47af__20_20remote_20IP_2.rel + ___0063_47af__20_20remote_20IP_2 +messages_lib/0064_ccb1__20_20seq_20x_25lx_.rel + ___0064_ccb1__20_20seq_20x_25lx_ +messages_lib/0065_c997__20_21_3f.rel + ___0065_c997__20_21_3f +messages_lib/0066_536e__20_21A.rel + ___0066_536e__20_21A +messages_lib/0067_27d1__20_21F.rel + ___0067_27d1__20_21F +messages_lib/0068_ceaf__20_21H.rel + ___0068_ceaf__20_21H +messages_lib/0069_ab99__20_21N.rel + ___0069_ab99__20_21N +messages_lib/006a_5266__20_21P.rel + ___006a_5266__20_21P +messages_lib/006b_60fd__20_21S.rel + ___006b_60fd__20_21S +messages_lib/006c_bac3__20_23_20_20S_23_20.rel + ___006c_bac3__20_23_20_20S_23_20 +messages_lib/006d_9a7d__20_25_2d15s.rel + ___006d_9a7d__20_25_2d15s +messages_lib/006e_85f4__20_25_2d3d_20.rel + ___006e_85f4__20_25_2d3d_20 +messages_lib/006f_a413__20_2502u_2f_2502u.rel + ___006f_a413__20_2502u_2f_2502u +messages_lib/0070_d8f4__20_2502u_2f_2502u_.rel + ___0070_d8f4__20_2502u_2f_2502u_ +messages_lib/0071_4d6e__20_2502x.rel + ___0071_4d6e__20_2502x +messages_lib/0072_cad1__20_2510lu_2510lu_2.rel + ___0072_cad1__20_2510lu_2510lu_2 +messages_lib/0073_43b6__20_254d_20_254d.rel + ___0073_43b6__20_254d_20_254d +messages_lib/0074_78a4__20_258s_20_20_20_2.rel + ___0074_78a4__20_258s_20_20_20_2 +messages_lib/0075_6904__20_25lu_20bps_0a.rel + ___0075_6904__20_25lu_20bps_0a +messages_lib/0076_269f__20_25s.rel + ___0076_269f__20_25s +messages_lib/0077_c302__20_25s_0a.rel + ___0077_c302__20_25s_0a +messages_lib/0078_10eb__20_25s_20_25s_20_2.rel + ___0078_10eb__20_25s_20_25s_20_2 +messages_lib/0079_c236__20_25s_25s.rel + ___0079_c236__20_25s_25s +messages_lib/007a_3c84__20_25s_2b_25x.rel + ___007a_3c84__20_25s_2b_25x +messages_lib/007b_97d2__20_25u_0a.rel + ___007b_97d2__20_25u_0a +messages_lib/007c_5984__20_25u_2d_3e_25u.rel + ___007c_5984__20_25u_2d_3e_25u +messages_lib/007d_98a5__20_28_25ld_20ms_29.rel + ___007d_98a5__20_28_25ld_20ms_29 +messages_lib/007e_9556__20_28_25s_20seek_3.rel + ___007e_9556__20_28_25s_20seek_3 +messages_lib/007f_6268__20_28_25s_29_0a.rel + ___007f_6268__20_28_25s_29_0a +messages_lib/0080_3f71__20_28ASCII_20dump_.rel + ___0080_3f71__20_28ASCII_20dump_ +messages_lib/0081_05b3__20_28Hex_2fASCII_2.rel + ___0081_05b3__20_28Hex_2fASCII_2 +messages_lib/0082_0cd7__20_28S_29.rel + ___0082_0cd7__20_28S_29 +messages_lib/0083_ef5f__20_28headers_20onl.rel + ___0083_ef5f__20_28headers_20onl +messages_lib/0084_c04d__20_28published_29.rel + ___0084_c04d__20_28published_29 +messages_lib/0085_ac28__20_2a_2a_2a.rel + ___0085_ac28__20_2a_2a_2a +messages_lib/0086_8841__20_2d_20.rel + ___0086_8841__20_2d_20 +messages_lib/0087_ace7__20_2d_20no_20broad.rel + ___0087_ace7__20_2d_20no_20broad +messages_lib/0088_01a0__20APND.rel + ___0088_01a0__20APND +messages_lib/0089_2da0__20Ack_20x_25lx.rel + ___0089_2da0__20Ack_20x_25lx +messages_lib/008a_f35d__20BUSY.rel + ___008a_f35d__20BUSY +messages_lib/008b_43af__20CE.rel + ___008b_43af__20CE +messages_lib/008c_d667__20CHECKSUM_20ERROR.rel + ___008c_d667__20CHECKSUM_20ERROR +messages_lib/008d_5947__20CHOKE.rel + ___008d_5947__20CHOKE +messages_lib/008e_3c3c__20DF.rel + ___008e_3c3c__20DF +messages_lib/008f_26b0__20Data_20_25u.rel + ___008f_26b0__20Data_20_25u +messages_lib/0090_5125__20EOF.rel + ___0090_5125__20EOF +messages_lib/0091_2269__20ERR.rel + ___0091_2269__20ERR +messages_lib/0092_869e__20IPaddr_20_25s.rel + ___0092_869e__20IPaddr_20_25s +messages_lib/0093_d267__20Illegal_20I_2dfi.rel + ___0093_d267__20Illegal_20I_2dfi +messages_lib/0094_d316__20Invalid_20contro.rel + ___0094_d316__20Invalid_20contro +messages_lib/0095_1e4f__20Invalid_20seq_20.rel + ___0095_1e4f__20Invalid_20seq_20 +messages_lib/0096_fd02__20MC_3a_20int_20_2.rel + ___0096_fd02__20MC_3a_20int_20_2 +messages_lib/0097_eb24__20MF.rel + ___0097_eb24__20MF +messages_lib/0098_747e__20MORE.rel + ___0098_747e__20MORE +messages_lib/0099_c5ed__20MSS_20_25u.rel + ___0099_c5ed__20MSS_20_25u +messages_lib/009a_3976__20NAK.rel + ___009a_3976__20NAK +messages_lib/009b_c092__20NR_3d_25d.rel + ___009b_c092__20NR_3d_25d +messages_lib/009c_dc29__20NS_3d_25d.rel + ___009c_dc29__20NS_3d_25d +messages_lib/009d_df24__20RX_3a_20int_20_2.rel + ___009d_df24__20RX_3a_20int_20_2 +messages_lib/009e_78a4__20Raw_20output.rel + ___009e_78a4__20Raw_20output +messages_lib/009f_a393__20Remote_3a_20_25s.rel + ___009f_a393__20Remote_3a_20_25s +messages_lib/00a0_d7c2__20Retry.rel + ___00a0_d7c2__20Retry +messages_lib/00a1_d322__20State_3a_20_25s_.rel + ___00a1_d322__20State_3a_20_25s_ +messages_lib/00a2_c86b__20TMP.rel + ___00a2_c86b__20TMP +messages_lib/00a3_2dcc__20TSTAMP_20_25lu_2.rel + ___00a3_2dcc__20TSTAMP_20_25lu_2 +messages_lib/00a4_e8c1__20TX_3a_20int_20_2.rel + ___00a4_e8c1__20TX_3a_20int_20_2 +messages_lib/00a5_d70d__20Too_2dlong_20I_2.rel + ___00a5_d70d__20Too_2dlong_20I_2 +messages_lib/00a6_5a85__20UP_20x_25x.rel + ___00a6_5a85__20UP_20x_25x +messages_lib/00a7_2210__20Unack_3a_20_25_2.rel + ___00a7_2210__20Unack_3a_20_25_2 +messages_lib/00a8_3a68__20Unknown_20passwo.rel + ___00a8_3a68__20Unknown_20passwo +messages_lib/00a9_23f3__20Vr_20_3d_20_25d_.rel + ___00a9_23f3__20Vr_20_3d_20_25d_ +messages_lib/00aa_a984__20WSCALE_20_25u.rel + ___00aa_a984__20WSCALE_20_25u +messages_lib/00ab_1d25__20Wnd_20_25u.rel + ___00ab_1d25__20Wnd_20_25u +messages_lib/00ac_e77d__20_5b_25s_5d_20_25.rel + ___00ac_e77d__20_5b_25s_5d_20_25 +messages_lib/00ad_7762__20_5bcts_20flow_20.rel + ___00ad_7762__20_5bcts_20flow_20 +messages_lib/00ae_2f4d__20_5brlsd_20line_2.rel + ___00ae_2f4d__20_5brlsd_20line_2 +messages_lib/00af_db59__20_5btrigger_200x_.rel + ___00af_db59__20_5btrigger_200x_ +messages_lib/00b0_bc24__20asy_20.rel + ___00b0_bc24__20asy_20 +messages_lib/00b1_c96a__20bad_20header_21_.rel + ___00b1_c96a__20bad_20header_21_ +messages_lib/00b2_0acc__20bad_20packet_0a.rel + ___00b2_0acc__20bad_20packet_0a +messages_lib/00b3_d795__20cmd_20_25u.rel + ___00b3_d795__20cmd_20_25u +messages_lib/00b4_1813__20code_20_25s.rel + ___00b4_1813__20code_20_25s +messages_lib/00b5_ad83__20dest_20_25s.rel + ___00b5_ad83__20dest_20_25s +messages_lib/00b6_e3a3__20dest_20_25s_20_2.rel + ___00b6_e3a3__20dest_20_25s_20_2 +messages_lib/00b7_4976__20diag.rel + ___00b7_4976__20diag +messages_lib/00b8_e36a__20file.rel + ___00b8_e36a__20file +messages_lib/00b9_5e9d__20full.rel + ___00b9_5e9d__20full +messages_lib/00ba_4c62__20hwaddr_20_25s_0a.rel + ___00ba_4c62__20hwaddr_20_25s_0a +messages_lib/00bb_ed56__20hwlen_20_25u.rel + ___00bb_ed56__20hwlen_20_25u +messages_lib/00bc_2971__20hwtype_20_25s.rel + ___00bc_2971__20hwtype_20_25s +messages_lib/00bd_3119__20id_20_25u_20offs.rel + ___00bd_3119__20id_20_25u_20offs +messages_lib/00be_8f2f__20id_20_25u_20pctl.rel + ___00be_8f2f__20id_20_25u_20pctl +messages_lib/00bf_20f7__20id_20_25u_20seq_.rel + ___00bf_20f7__20id_20_25u_20seq_ +messages_lib/00c0_8c07__20idle_20timer_20_.rel + ___00c0_8c07__20idle_20timer_20_ +messages_lib/00c1_7166__20input.rel + ___00c1_7166__20input +messages_lib/00c2_6c92__20len_20_25u.rel + ___00c2_6c92__20len_20_25u +messages_lib/00c3_0c74__20line.rel + ___00c3_0c74__20line +messages_lib/00c4_2537__20new_20gateway_20.rel + ___00c4_2537__20new_20gateway_20 +messages_lib/00c5_ea43__20new_20gateway_20.rel + ___00c5_ea43__20new_20gateway_20 +messages_lib/00c6_e3db__20none.rel + ___00c6_e3db__20none +messages_lib/00c7_826b__20offset_20_25u_20.rel + ___00c7_826b__20offset_20_25u_20 +messages_lib/00c8_6680__20op_20_25u.rel + ___00c8_6680__20op_20_25u +messages_lib/00c9_f7d5__20op_20REPLY.rel + ___00c9_f7d5__20op_20REPLY +messages_lib/00ca_5e3d__20op_20REQUEST.rel + ___00ca_5e3d__20op_20REQUEST +messages_lib/00cb_9500__20op_20REVERSE_20R.rel + ___00cb_9500__20op_20REVERSE_20R +messages_lib/00cc_3faa__20op_20REVERSE_20R.rel + ___00cc_3faa__20op_20REVERSE_20R +messages_lib/00cd_8a3d__20output.rel + ___00cd_8a3d__20output +messages_lib/00ce_5896__20pid_3d0x_25x_0a.rel + ___00ce_5896__20pid_3d0x_25x_0a +messages_lib/00cf_aba6__20pid_3dARP_0a.rel + ___00cf_aba6__20pid_3dARP_0a +messages_lib/00d0_d4e9__20pid_3dIP_0a.rel + ___00d0_d4e9__20pid_3dIP_0a +messages_lib/00d1_a349__20pid_3dNET_2fROM_.rel + ___00d1_a349__20pid_3dNET_2fROM_ +messages_lib/00d2_932f__20pid_3dTEXNET_0a.rel + ___00d2_932f__20pid_3dTEXNET_0a +messages_lib/00d3_4927__20pid_3dText_0a.rel + ___00d3_4927__20pid_3dText_0a +messages_lib/00d4_c207__20pid_3dX_2e25_0a.rel + ___00d4_c207__20pid_3dX_2e25_0a +messages_lib/00d5_5760__20pipe.rel + ___00d5_5760__20pipe +messages_lib/00d6_ac0a__20pointer_20_25u.rel + ___00d6_ac0a__20pointer_20_25u +messages_lib/00d7_5557__20prot_20_25s_0a.rel + ___00d7_5557__20prot_20_25s_0a +messages_lib/00d8_0187__20prot_20_25u_0a.rel + ___00d8_0187__20prot_20_25u_0a +messages_lib/00d9_75a2__20prot_200x_25x_20.rel + ___00d9_75a2__20prot_200x_25x_20 +messages_lib/00da_3541__20prot_20IP.rel + ___00da_3541__20prot_20IP +messages_lib/00db_1888__20receive_20_20_2d.rel + ___00db_1888__20receive_20_20_2d +messages_lib/00dc_f2f3__20sock.rel + ___00dc_f2f3__20sock +messages_lib/00dd_c067__20spi_20_25lx.rel + ___00dd_c067__20spi_20_25lx +messages_lib/00de_2902__20sw_20over_20_25l.rel + ___00de_2902__20sw_20over_20_25l +messages_lib/00df_0bfc__20tos_20_25u.rel + ___00df_0bfc__20tos_20_25u +messages_lib/00e0_e1c5__20trace_20file_3a_.rel + ___00e0_e1c5__20trace_20file_3a_ +messages_lib/00e1_ca97__20tracing_20off_0a.rel + ___00e1_ca97__20tracing_20off_0a +messages_lib/00e2_be19__20transmit_20_2d_2.rel + ___00e2_be19__20transmit_20_2d_2 +messages_lib/00e3_afd2__20ttl_20_25d_0a.rel + ___00e3_afd2__20ttl_20_25d_0a +messages_lib/00e4_6f53__20txseq_20_25d_20r.rel + ___00e4_6f53__20txseq_20_25d_20r +messages_lib/00e5_c8f3__20type_200x_25x_0a.rel + ___00e5_c8f3__20type_200x_25x_0a +messages_lib/00e6_6772__20type_20ARP_0a.rel + ___00e6_6772__20type_20ARP_0a +messages_lib/00e7_5c83__20type_20IP_0a.rel + ___00e7_5c83__20type_20IP_0a +messages_lib/00e8_f937__20type_20REVARP_0a.rel + ___00e8_f937__20type_20REVARP_0a +messages_lib/00e9_c53a__20v.rel + ___00e9_c53a__20v +messages_lib/00ea_9158__20vers_20_25u_20en.rel + ___00ea_9158__20vers_20_25u_20en +messages_lib/00eb_994d__20wnd_20_25d.rel + ___00eb_994d__20wnd_20_25d +messages_lib/00ec_426e__20_7c_20.rel + ___00ec_426e__20_7c_20 +messages_lib/00ed_3f0c__21.rel + ___00ed_3f0c__21 +messages_lib/00ee_f9eb__21_21_20_25s_20_25.rel + ___00ee_f9eb__21_21_20_25s_20_25 +messages_lib/00ef_ef2d__21_21_20maximum_20.rel + ___00ef_ef2d__21_21_20maximum_20 +messages_lib/00f0_55d7__22_25s_22_20_2d_20.rel + ___00f0_55d7__22_25s_22_20_2d_20 +messages_lib/00f1_60ae__23_20queries_20eac.rel + ___00f1_60ae__23_20queries_20eac +messages_lib/00f2_1acc__23_20secs_20to_20w.rel + ___00f2_1acc__23_20secs_20to_20w +messages_lib/00f3_fb95__25_2d10_2e10s_20_2.rel + ___00f3_fb95__25_2d10_2e10s_20_2 +messages_lib/00f4_3035__25_2d10s_20IP_20ad.rel + ___00f4_3035__25_2d10s_20IP_20ad +messages_lib/00f5_01be__25_2d10s_25_2d17s.rel + ___00f5_01be__25_2d10s_25_2d17s +messages_lib/00f6_4da0__25_2d10s_25_2d17s_.rel + ___00f6_4da0__25_2d10s_25_2d17s_ +messages_lib/00f7_ff4a__25_2d10s_25_2d6s.rel + ___00f7_ff4a__25_2d10s_25_2d6s +messages_lib/00f8_e1c2__25_2d11s_25_2d9s_2.rel + ___00f8_e1c2__25_2d11s_25_2d9s_2 +messages_lib/00f9_7335__25_2d13s.rel + ___00f9_7335__25_2d13s +messages_lib/00fa_27e5__25_2d15s.rel + ___00fa_27e5__25_2d15s +messages_lib/00fb_0d8d__25_2d16s.rel + ___00fb_0d8d__25_2d16s +messages_lib/00fc_e560__25_2d16s_20_20.rel + ___00fc_e560__25_2d16s_20_20 +messages_lib/00fd_f903__25_2d16s_25_2d3u_2.rel + ___00fd_f903__25_2d16s_25_2d3u_2 +messages_lib/00fe_2609__25_2d16s_25_2d9lu_.rel + ___00fe_2609__25_2d16s_25_2d9lu_ +messages_lib/00ff_1455__25_2d17s.rel + ___00ff_1455__25_2d17s +messages_lib/0100_e920__25_2d20s_258lu_258.rel + ___0100_e920__25_2d20s_258lu_258 +messages_lib/0101_8589__25_2d22s.rel + ___0101_8589__25_2d22s +messages_lib/0102_b616__25_2d22s_0a.rel + ___0102_b616__25_2d22s_0a +messages_lib/0103_9c51__25_2d23s.rel + ___0103_9c51__25_2d23s +messages_lib/0104_bf59__25_2d2u.rel + ___0104_bf59__25_2d2u +messages_lib/0105_6601__25_2d32s_20_28_25l.rel + ___0105_6601__25_2d32s_20_28_25l +messages_lib/0106_a681__25_2d3u.rel + ___0106_a681__25_2d3u +messages_lib/0107_ea81__25_2d4d.rel + ___0107_ea81__25_2d4d +messages_lib/0108_6f94__25_2d4d_255d_20_25.rel + ___0108_6f94__25_2d4d_255d_20_25 +messages_lib/0109_eb89__25_2d4u.rel + ___0109_eb89__25_2d4u +messages_lib/010a_2455__25_2d5ld.rel + ___010a_2455__25_2d5ld +messages_lib/010b_90e5__25_2d7lu.rel + ___010b_90e5__25_2d7lu +messages_lib/010c_8982__25_2d7s_20_25_2d8s.rel + ___010c_8982__25_2d7s_20_25_2d8s +messages_lib/010d_da22__25_2d8lu.rel + ___010d_da22__25_2d8lu +messages_lib/010e_d1e2__25_2ds.rel + ___010e_d1e2__25_2ds +messages_lib/010f_1e56__2502x.rel + ___010f_1e56__2502x +messages_lib/0110_3773__2504x_20_20.rel + ___0110_3773__2504x_20_20 +messages_lib/0111_6df9__2504x_20_20_2504x_.rel + ___0111_6df9__2504x_20_20_2504x_ +messages_lib/0112_aa0a__2504x_3a_2504x.rel + ___0112_aa0a__2504x_3a_2504x +messages_lib/0113_83ad__2510lu_20In_2c_20_.rel + ___0113_83ad__2510lu_20In_2c_20_ +messages_lib/0114_cbd3__2510lu_20Out_2c_20.rel + ___0114_cbd3__2510lu_20Out_2c_20 +messages_lib/0115_2875__2510lu_2510lu_255l.rel + ___0115_2875__2510lu_2510lu_255l +messages_lib/0116_a689__251s_20_253d_20_20.rel + ___0116_a689__251s_20_253d_20_20 +messages_lib/0117_e9b8__252d_20_25_2d6s_20.rel + ___0117_e9b8__252d_20_25_2d6s_20 +messages_lib/0118_b620__252d_20_25_2d6s_20.rel + ___0118_b620__252d_20_25_2d6s_20 +messages_lib/0119_1703__253d_3a.rel + ___0119_1703__253d_3a +messages_lib/011a_b932__254d_20_25_2d8s_25.rel + ___011a_b932__254d_20_25_2d8s_25 +messages_lib/011b_936b__254s.rel + ___011b_936b__254s +messages_lib/011c_4a96__258lu.rel + ___011c_4a96__258lu +messages_lib/011d_5eaf__258lu_0a.rel + ___011d_5eaf__258lu_0a +messages_lib/011e_3acb__258s.rel + ___011e_3acb__258s +messages_lib/011f_3341__258u_2510u_2511lu_.rel + ___011f_3341__258u_2510u_2511lu_ +messages_lib/0120_fd73__259p_20_20_20_253d.rel + ___0120_fd73__259p_20_20_20_253d +messages_lib/0121_b8a6__259p_20_25_2d8d_25.rel + ___0121_b8a6__259p_20_25_2d8d_25 +messages_lib/0122_1719__259p_20_25_2d9s_25.rel + ___0122_1719__259p_20_25_2d9s_25 +messages_lib/0123_1260__259p_256u_20_20_25.rel + ___0123_1260__259p_256u_20_20_25 +messages_lib/0124_482b__259p_256u_256u_20_.rel + ___0124_482b__259p_256u_256u_20_ +messages_lib/0125_fcae__25c.rel + ___0125_fcae__25c +messages_lib/0126_6d8a__25c_20.rel + ___0126_6d8a__25c_20 +messages_lib/0127_3d14__25c_20_257s_20_257.rel + ___0127_3d14__25c_20_257s_20_257 +messages_lib/0128_22d3__25c_25c_25c.rel + ___0128_22d3__25c_25c_25c +messages_lib/0129_4b6e__25c_25c_25c_0a.rel + ___0129_4b6e__25c_25c_25c_0a +messages_lib/012a_2970__25c_25c_25c_253d_2.rel + ___012a_2970__25c_25c_25c_253d_2 +messages_lib/012b_8514__25c_25s_0a.rel + ___012b_8514__25c_25s_0a +messages_lib/012c_086d__25c_5b2J.rel + ___012c_086d__25c_5b2J +messages_lib/012d_8811__25d.rel + ___012d_8811__25d +messages_lib/012e_aeda__25d_0a.rel + ___012e_aeda__25d_0a +messages_lib/012f_cd50__25d_20message_25s_.rel + ___012f_cd50__25d_20message_25s_ +messages_lib/0130_ea62__25ld.rel + ___0130_ea62__25ld +messages_lib/0131_eb6a__25lu.rel + ___0131_eb6a__25lu +messages_lib/0132_63ed__25lu_0a.rel + ___0132_63ed__25lu_0a +messages_lib/0133_f325__25lu_2f_25lu_0a.rel + ___0133_f325__25lu_2f_25lu_0a +messages_lib/0134_d273__25p_20.rel + ___0134_d273__25p_20 +messages_lib/0135_1c93__25p_20_256lu.rel + ___0135_1c93__25p_20_256lu +messages_lib/0136_ec2f__25s.rel + ___0136_ec2f__25s +messages_lib/0137_7643__25s_0a.rel + ___0137_7643__25s_0a +messages_lib/0138_0276__25s_0a_25s_0a.rel + ___0138_0276__25s_0a_25s_0a +messages_lib/0139_f81b__25s_20.rel + ___0139_f81b__25s_20 +messages_lib/013a_8b7d__25s_20_2502d_2502d.rel + ___013a_8b7d__25s_20_2502d_2502d +messages_lib/013b_7be3__25s_20_25p_0a.rel + ___013b_7be3__25s_20_25p_0a +messages_lib/013c_518b__25s_20_25s_0a.rel + ___013c_518b__25s_20_25s_0a +messages_lib/013d_ca49__25s_20_25s_3a_20_2.rel + ___013d_ca49__25s_20_25s_3a_20_2 +messages_lib/013e_43c6__25s_20_25s_3a_20Er.rel + ___013e_43c6__25s_20_25s_3a_20Er +messages_lib/013f_b8b7__25s_20_2d_20.rel + ___013f_b8b7__25s_20_2d_20 +messages_lib/0140_1170__25s_20_2d_20Differ.rel + ___0140_1170__25s_20_2d_20Differ +messages_lib/0141_d4cc__25s_20_2d_20Remote.rel + ___0141_d4cc__25s_20_2d_20Remote +messages_lib/0142_4968__25s_20_2d_20Same_0.rel + ___0142_4968__25s_20_2d_20Same_0 +messages_lib/0143_ace2__25s_20dialer_3a_20.rel + ___0143_ace2__25s_20dialer_3a_20 +messages_lib/0144_933b__25s_20errno_20_25d.rel + ___0144_933b__25s_20errno_20_25d +messages_lib/0145_f768__25s_20file_25s_2e_.rel + ___0145_f768__25s_20file_25s_2e_ +messages_lib/0146_c691__25s_20is_20unreach.rel + ___0146_c691__25s_20is_20unreach +messages_lib/0147_a4a4__25s_20logged_20in.rel + ___0147_a4a4__25s_20logged_20in +messages_lib/0148_a64e__25s_20logged_20in_.rel + ___0148_a64e__25s_20logged_20in_ +messages_lib/0149_b314__25s_20refs_20to_20.rel + ___0149_b314__25s_20refs_20to_20 +messages_lib/014a_bd91__25s_20remain_20_25.rel + ___014a_bd91__25s_20remain_20_25 +messages_lib/014b_bf9e__25s_20thru_20.rel + ___014b_bf9e__25s_20thru_20 +messages_lib/014c_243b__25s_20type_20_25s_.rel + ___014c_243b__25s_20type_20_25s_ +messages_lib/014d_7d69__25s_25_25_25s_2ebb.rel + ___014d_7d69__25s_25_25_25s_2ebb +messages_lib/014e_d324__25s_25c_0a.rel + ___014e_d324__25s_25c_0a +messages_lib/014f_ce9c__25s_25c_25c_25c.rel + ___014f_ce9c__25s_25c_25c_25c +messages_lib/0150_910e__25s_25s.rel + ___0150_910e__25s_25s +messages_lib/0151_46b5__25s_25s_0a.rel + ___0151_46b5__25s_25s_0a +messages_lib/0152_4d3a__25s_25s_0a_0a.rel + ___0152_4d3a__25s_25s_0a_0a +messages_lib/0153_47c0__25s_3a.rel + ___0153_47c0__25s_3a +messages_lib/0154_6911__25s_3a_0a.rel + ___0154_6911__25s_3a_0a +messages_lib/0155_e749__25s_3a_20.rel + ___0155_e749__25s_3a_20 +messages_lib/0156_650d__25s_3a_20_25d_20me.rel + ___0156_650d__25s_3a_20_25d_20me +messages_lib/0157_86f5__25s_3a_20_25ld_0a.rel + ___0157_86f5__25s_3a_20_25ld_0a +messages_lib/0158_7189__25s_3a_20_25s_0a.rel + ___0158_7189__25s_3a_20_25s_0a +messages_lib/0159_35bd__25s_3a_20_25s_2c.rel + ___0159_35bd__25s_3a_20_25s_2c +messages_lib/015a_adab__25s_3a_20Interface.rel + ___015a_adab__25s_3a_20Interface +messages_lib/015b_5f8a__25s_3a_20PPP_2fPAP.rel + ___015b_5f8a__25s_3a_20PPP_2fPAP +messages_lib/015c_0cde__25s_3a_20bad_20dev.rel + ___015c_0cde__25s_3a_20bad_20dev +messages_lib/015d_5351__25s_3a_20bad_20ino.rel + ___015d_5351__25s_3a_20bad_20ino +messages_lib/015e_8c96__25s_3a_20corrupted.rel + ___015e_8c96__25s_3a_20corrupted +messages_lib/015f_d157__25s_3a_20fs_20of_2.rel + ___015f_d157__25s_3a_20fs_20of_2 +messages_lib/0160_1d98__25s_3a_20local_20n.rel + ___0160_1d98__25s_3a_20local_20n +messages_lib/0161_bba5__25s_3a_20mode_20_2.rel + ___0161_bba5__25s_3a_20mode_20_2 +messages_lib/0162_60cc__25s_3a_20not_20a_2.rel + ___0162_60cc__25s_3a_20not_20a_2 +messages_lib/0163_4ed5__25s_3a_20release_5.rel + ___0163_4ed5__25s_3a_20release_5 +messages_lib/0164_04ae__25s_3a_20rtt_20_25.rel + ___0164_04ae__25s_3a_20rtt_20_25 +messages_lib/0165_db35__25s_3a_20srtt_20_2.rel + ___0165_db35__25s_3a_20srtt_20_2 +messages_lib/0166_65f3__25s_3c_25ld_40_25s.rel + ___0166_65f3__25s_3c_25ld_40_25s +messages_lib/0167_6e45__25s_3e_20_25s_20_2.rel + ___0167_6e45__25s_3e_20_25s_20_2 +messages_lib/0168_205d__25s_3e_20Invalid_2.rel + ___0168_205d__25s_3e_20Invalid_2 +messages_lib/0169_c86f__25s_40_25s_0a.rel + ___0169_c86f__25s_40_25s_0a +messages_lib/016a_82c1__25s_40_25s_3a_0a.rel + ___016a_82c1__25s_40_25s_3a_0a +messages_lib/016b_9fa6__25sMAILER_2dDAEMON.rel + ___016b_9fa6__25sMAILER_2dDAEMON +messages_lib/016c_c284__25sR_0a.rel + ___016c_c284__25sR_0a +messages_lib/016d_2293__25u_0a.rel + ___016d_2293__25u_0a +messages_lib/016e_c0bd__25u_20additional_3.rel + ___016e_c0bd__25u_20additional_3 +messages_lib/016f_7db0__25u_20answers_3a_0.rel + ___016f_7db0__25u_20answers_3a_0 +messages_lib/0170_7c48__25u_20authority_3a.rel + ___0170_7c48__25u_20authority_3a +messages_lib/0171_b843__25u_20questions_3a.rel + ___0171_b843__25u_20questions_3a +messages_lib/0172_af86__25u_3a_20calls_20_.rel + ___0172_af86__25u_3a_20calls_20_ +messages_lib/0173_52fc__25x.rel + ___0173_52fc__25x +messages_lib/0174_b099__26AXB_20_20_20_20_.rel + ___0174_b099__26AXB_20_20_20_20_ +messages_lib/0175_7bf6__26CB_20_20_20_20_2.rel + ___0175_7bf6__26CB_20_20_20_20_2 +messages_lib/0176_c497__26TCB_20_20_20_20_.rel + ___0176_c497__26TCB_20_20_20_20_ +messages_lib/0177_f73b__26UCB_20_20_20_20_.rel + ___0177_f73b__26UCB_20_20_20_20_ +messages_lib/0178_aa89__27_25c_27_0a.rel + ___0178_aa89__27_25c_27_0a +messages_lib/0179_a2cd__28.rel + ___0179_a2cd__28 +messages_lib/017a_ba4c__28_252u_29_25_2d20.rel + ___017a_ba4c__28_252u_29_25_2d20 +messages_lib/017b_52bf__28F_29.rel + ___017b_52bf__28F_29 +messages_lib/017c_93fe__28P_29.rel + ___017c_93fe__28P_29 +messages_lib/017d_38a6__28P_2fF_29.rel + ___017d_38a6__28P_2fF_29 +messages_lib/017e_7b70__28compressed_20ALL.rel + ___017e_7b70__28compressed_20ALL +messages_lib/017f_c1c3__28hopcheck_29_20IC.rel + ___017f_c1c3__28hopcheck_29_20IC +messages_lib/0180_565f__28missing_20UI_21_.rel + ___0180_565f__28missing_20UI_21_ +messages_lib/0181_f935__28not_20odd_21_29_.rel + ___0181_f935__28not_20odd_21_29_ +messages_lib/0182_abc9__29_0a.rel + ___0182_abc9__29_0a +messages_lib/0183_bfa2__2a_2a_20smtp_3a_20.rel + ___0183_bfa2__2a_2a_20smtp_3a_20 +messages_lib/0184_1969__2a_2a_2a.rel + ___0184_1969__2a_2a_2a +messages_lib/0185_a448__2a_2a_2a_20Done_0a.rel + ___0185_a448__2a_2a_2a_20Done_0a +messages_lib/0186_c993__2a_2a_2a_20Unable_.rel + ___0186_c993__2a_2a_2a_20Unable_ +messages_lib/0187_b489__2a_2a_2a_2a_2a_2a_.rel + ___0187_b489__2a_2a_2a_2a_2a_2a_ +messages_lib/0188_5b29__2c_20.rel + ___0188_5b29__2c_20 +messages_lib/0189_1a71__2c_20err_20_25d.rel + ___0189_1a71__2c_20err_20_25d +messages_lib/018a_099c__2d_2d_2d_2d_2d_20E.rel + ___018a_099c__2d_2d_2d_2d_2d_20E +messages_lib/018b_01ea__2d_2d_2d_2d_2d_20F.rel + ___018b_01ea__2d_2d_2d_2d_2d_20F +messages_lib/018c_04ae__2d_2d_2d_2d_2d_2d_.rel + ___018c_04ae__2d_2d_2d_2d_2d_2d_ +messages_lib/018d_1b54__2d_2d_2d_2d_2d_2d_.rel + ___018d_1b54__2d_2d_2d_2d_2d_2d_ +messages_lib/018e_3d1a__2d_2d_2d_2d_2d_2d_.rel + ___018e_3d1a__2d_2d_2d_2d_2d_2d_ +messages_lib/018f_8ddf__2d_3e_25s.rel + ___018f_8ddf__2d_3e_25s +messages_lib/0190_589d__2d_3e_25s_20ihl_20.rel + ___0190_589d__2d_3e_25s_20ihl_20 +messages_lib/0191_e6c1__2e_0a.rel + ___0191_e6c1__2e_0a +messages_lib/0192_ed84__2f_25lu_20ms.rel + ___0192_ed84__2f_25lu_20ms +messages_lib/0193_6d9b__2f_25lu_20ms_0a.rel + ___0193_6d9b__2f_25lu_20ms_0a +messages_lib/0194_a44f__2f_25lu_20ms_3b_20.rel + ___0194_a44f__2f_25lu_20ms_3b_20 +messages_lib/0195_096e__2f_25u.rel + ___0195_096e__2f_25u +messages_lib/0196_96dc__2fEX.rel + ___0196_96dc__2fEX +messages_lib/0197_79e7_0_25o.rel + ___0197_79e7_0_25o +messages_lib/0198_8157_007Incoming_20_25s_.rel + ___0198_8157_007Incoming_20_25s_ +messages_lib/0199_b04e_0x_2503x_20_20_20_2.rel + ___0199_b04e_0x_2503x_20_20_20_2 +messages_lib/019a_3f3a_0x_2504x_0a.rel + ___019a_3f3a_0x_2504x_0a +messages_lib/019b_8308_0x_2508lx_0a.rel + ___019b_8308_0x_2508lx_0a +messages_lib/019c_ab8d_0x_25x.rel + ___019c_ab8d_0x_25x +messages_lib/019d_6f63_0x_25x_09_09_25ld_0.rel + ___019d_6f63_0x_25x_09_09_25ld_0 +messages_lib/019e_fea8_0x_25x_09_09_25ld_0.rel + ___019e_fea8_0x_25x_09_09_25ld_0 +messages_lib/019f_f01c_0x_25x_0a.rel + ___019f_f01c_0x_25x_0a +messages_lib/01a0_d635_100_20Warning_3a_20.rel + ___01a0_d635_100_20Warning_3a_20 +messages_lib/01a1_3f47_150_20Opening_20dat.rel + ___01a1_3f47_150_20Opening_20dat +messages_lib/01a2_67ab_200_20.rel + ___01a2_67ab_200_20 +messages_lib/01a3_cc8d_200_20MKD_20ok_0a.rel + ___01a3_cc8d_200_20MKD_20ok_0a +messages_lib/01a4_6c3a_200_20Ok_0a.rel + ___01a4_6c3a_200_20Ok_0a +messages_lib/01a5_ba32_200_20Port_20comman.rel + ___01a5_ba32_200_20Port_20comman +messages_lib/01a6_1db7_200_20Type_20_25s_2.rel + ___01a6_1db7_200_20Type_20_25s_2 +messages_lib/01a7_1192_215_20_25s_20Type_3.rel + ___01a7_1192_215_20_25s_20Type_3 +messages_lib/01a8_01fe_220_20_25s_20FTP_20.rel + ___01a8_01fe_220_20_25s_20FTP_20 +messages_lib/01a9_7804_221_20Goodbye_21_0a.rel + ___01a9_7804_221_20Goodbye_21_0a +messages_lib/01aa_3f54_226_20File_20receiv.rel + ___01aa_3f54_226_20File_20receiv +messages_lib/01ab_caea_226_20File_20sent_2.rel + ___01ab_caea_226_20File_20sent_2 +messages_lib/01ac_9fe8_230_20Logged_20in_0.rel + ___01ac_9fe8_230_20Logged_20in_0 +messages_lib/01ad_55db_250_20_25s_0a.rel + ___01ad_55db_250_20_25s_0a +messages_lib/01ae_c720_250_20File_20delete.rel + ___01ae_c720_250_20File_20delete +messages_lib/01af_de54_250_2d_25s_0a.rel + ___01af_de54_250_2d_25s_0a +messages_lib/01b0_9400_257_20_22_25s_22_20.rel + ___01b0_9400_257_20_22_25s_22_20 +messages_lib/01b1_24f1_331_20Enter_20PASS_.rel + ___01b1_24f1_331_20Enter_20PASS_ +messages_lib/01b2_273f_421_20System_20over.rel + ___01b2_273f_421_20System_20over +messages_lib/01b3_e43d_425_20Data_20connec.rel + ___01b3_e43d_425_20Data_20connec +messages_lib/01b4_7e66_500_20Unknown_20com.rel + ___01b4_7e66_500_20Unknown_20com +messages_lib/01b5_3d39_500_20Unsupported_2.rel + ___01b5_3d39_500_20Unsupported_2 +messages_lib/01b6_fe7e_501_20Bad_20port_20.rel + ___01b6_fe7e_501_20Bad_20port_20 +messages_lib/01b7_065e_501_20Only_20logica.rel + ___01b7_065e_501_20Only_20logica +messages_lib/01b8_a2bf_501_20Unknown_20typ.rel + ___01b8_a2bf_501_20Unknown_20typ +messages_lib/01b9_41cf_502_20Command_20not.rel + ___01b9_41cf_502_20Command_20not +messages_lib/01ba_f576_503_20Login_20with_.rel + ___01ba_f576_503_20Login_20with_ +messages_lib/01bb_7dc2_530_20Please_20log_.rel + ___01bb_7dc2_530_20Please_20log_ +messages_lib/01bc_c53a_550_20Can_27t_20rea.rel + ___01bc_c53a_550_20Can_27t_20rea +messages_lib/01bd_4770_550_20Delete_20fail.rel + ___01bd_4770_550_20Delete_20fail +messages_lib/01be_38c3_550_20Permission_20.rel + ___01be_38c3_550_20Permission_20 +messages_lib/01bf_95c1_552_20Write_20error.rel + ___01bf_95c1_552_20Write_20error +messages_lib/01c0_7eaf_553_20Can_27t_20cre.rel + ___01c0_7eaf_553_20Can_27t_20cre +messages_lib/01c1_f0b2_553_20Can_27t_20rea.rel + ___01c1_f0b2_553_20Can_27t_20rea +messages_lib/01c2_b04b__3a_20_25d_0a.rel + ___01c2_b04b__3a_20_25d_0a +messages_lib/01c3_6aba__3a_20_25ld_0a.rel + ___01c3_6aba__3a_20_25ld_0a +messages_lib/01c4_8cd1__3a_20_25s.rel + ___01c4_8cd1__3a_20_25s +messages_lib/01c5_68d2__3a_20_25s_0a.rel + ___01c5_68d2__3a_20_25s_0a +messages_lib/01c6_3c02__3a_20_25u_0a.rel + ___01c6_3c02__3a_20_25u_0a +messages_lib/01c7_6692__3b_20Tries_3a_20_2.rel + ___01c7_6692__3b_20Tries_3a_20_2 +messages_lib/01c8_697b__3c_25ld_40_25s_3e_.rel + ___01c8_697b__3c_25ld_40_25s_3e_ +messages_lib/01c9_2587__3c_25s_40_25s_2ebb.rel + ___01c9_2587__3c_25s_40_25s_2ebb +messages_lib/01ca_3152__3c_3d_3d_25s.rel + ___01ca_3152__3c_3d_3d_25s +messages_lib/01cb_defc__3c_3d_3d_25s_0a.rel + ___01cb_defc__3c_3d_3d_25s_0a +messages_lib/01cc_016b__3d_3d_3eARTICLE_20.rel + ___01cc_016b__3d_3d_3eARTICLE_20 +messages_lib/01cd_c133__3d_3d_3eNEWNEWS_20.rel + ___01cd_c133__3d_3d_3eNEWNEWS_20 +messages_lib/01ce_696c__3d_3d_3eQUIT_0a.rel + ___01ce_696c__3d_3d_3eQUIT_0a +messages_lib/01cf_396e__3d_3dNo_20response.rel + ___01cf_396e__3d_3dNo_20response +messages_lib/01d0_c6f3__3f.rel + ___01d0_c6f3__3f +messages_lib/01d1_4d83__40.rel + ___01d1_4d83__40 +messages_lib/01d2_23d2__40_25s.rel + ___01d2_23d2__40_25s +messages_lib/01d3_7f61_ARP_3a_20len_20_25d.rel + ___01d3_7f61_ARP_3a_20len_20_25d +messages_lib/01d4_124c_ARTICLE_20_25s.rel + ___01d4_124c_ARTICLE_20_25s +messages_lib/01d5_109d_AX25_20receive_20wi.rel + ___01d5_109d_AX25_20receive_20wi +messages_lib/01d6_f4e0_AX25_20version.rel + ___01d6_f4e0_AX25_20version +messages_lib/01d7_818f_AX25_3a_20.rel + ___01d7_818f_AX25_3a_20 +messages_lib/01d8_f05c_Abort_0d_0a.rel + ___01d8_f05c_Abort_0d_0a +messages_lib/01d9_6caf_Aborted_2e.rel + ___01d9_6caf_Aborted_2e +messages_lib/01da_f2cb_Aborted_2e_0a.rel + ___01da_f2cb_Aborted_2e_0a +messages_lib/01db_537a_Accept_0a.rel + ___01db_537a_Accept_0a +messages_lib/01dc_b988_Ack_20delay_20time_.rel + ___01dc_b988_Ack_20delay_20time_ +messages_lib/01dd_fccc_Active_20RIP_20outp.rel + ___01dd_fccc_Active_20RIP_20outp +messages_lib/01de_e216_Address_2fControl_2.rel + ___01de_e216_Address_2fControl_2 +messages_lib/01df_1fbc_All_20groups_20are_.rel + ___01df_1fbc_All_20groups_20are_ +messages_lib/01e0_4a0c_Allow_20ACCM.rel + ___01e0_4a0c_Allow_20ACCM +messages_lib/01e1_8e02_Allow_20Address.rel + ___01e1_8e02_Allow_20Address +messages_lib/01e2_7b21_Allow_20Address_2fC.rel + ___01e2_7b21_Allow_20Address_2fC +messages_lib/01e3_5003_Allow_20Authenticat.rel + ___01e3_5003_Allow_20Authenticat +messages_lib/01e4_081e_Allow_20Compression.rel + ___01e4_081e_Allow_20Compression +messages_lib/01e5_14d8_Allow_20MRU.rel + ___01e5_14d8_Allow_20MRU +messages_lib/01e6_5c94_Allow_20Magic_20Num.rel + ___01e6_5c94_Allow_20Magic_20Num +messages_lib/01e7_33ea_Allow_20Protocol_20.rel + ___01e7_33ea_Allow_20Protocol_20 +messages_lib/01e8_a5f9_Already_20have_20_2.rel + ___01e8_a5f9_Already_20have_20_2 +messages_lib/01e9_8eaf_Arcnet_3a_20len_20_.rel + ___01e9_8eaf_Arcnet_3a_20len_20_ +messages_lib/01ea_52c7_Argument_20missing_.rel + ___01ea_52c7_Argument_20missing_ +messages_lib/01eb_3ed8_Ascii_0a.rel + ___01eb_3ed8_Ascii_0a +messages_lib/01ec_7cb2_Attach_20device_20f.rel + ___01ec_7cb2_Attach_20device_20f +messages_lib/01ed_ec38_Attach_20netrom_20i.rel + ___01ed_ec38_Attach_20netrom_20i +messages_lib/01ee_ee22_Attended_20flag.rel + ___01ee_ee22_Attended_20flag +messages_lib/01ef_0443_Available_20areas_2.rel + ___01ef_0443_Available_20areas_2 +messages_lib/01f0_6999_Backoff_20Level_20_.rel + ___01f0_6999_Backoff_20Level_20_ +messages_lib/01f1_9716_Bad_20digipeater_20.rel + ___01f1_9716_Bad_20digipeater_20 +messages_lib/01f2_0b9f_Bad_20syntax_2e_0a.rel + ___01f2_0b9f_Bad_20syntax_2e_0a +messages_lib/01f3_e884_Bad_20target_20_25s.rel + ___01f3_e884_Bad_20target_20_25s +messages_lib/01f4_822a_Bad_20user_20or_20h.rel + ___01f4_822a_Bad_20user_20or_20h +messages_lib/01f5_61f7_Base_20Addr_09Rxint.rel + ___01f5_61f7_Base_20Addr_09Rxint +messages_lib/01f6_929a_Base_20Addr_20_20Rx.rel + ___01f6_929a_Base_20Addr_20_20Rx +messages_lib/01f7_de82_Buf_20hits_2fmiss_2.rel + ___01f7_de82_Buf_20hits_2fmiss_2 +messages_lib/01f8_ae0c_CTRL_2d_25c_0a.rel + ___01f8_ae0c_CTRL_2d_25c_0a +messages_lib/01f9_6c46_CWD_20_25s_0a.rel + ___01f9_6c46_CWD_20_25s_0a +messages_lib/01fa_0e64_Calls_20originated_.rel + ___01fa_0e64_Calls_20originated_ +messages_lib/01fb_9777_Calls_20timed_20out.rel + ___01fb_9777_Calls_20timed_20out +messages_lib/01fc_e911_Can_27t_20NLST_20_2.rel + ___01fc_e911_Can_27t_20NLST_20_2 +messages_lib/01fd_daf3_Can_27t_20add_20rou.rel + ___01fd_daf3_Can_27t_20add_20rou +messages_lib/01fe_6db7_Can_27t_20attach_20.rel + ___01fe_6db7_Can_27t_20attach_20 +messages_lib/01ff_79e8_Can_27t_20change_20.rel + ___01ff_79e8_Can_27t_20change_20 +messages_lib/0200_3bb8_Can_27t_20create_20.rel + ___0200_3bb8_Can_27t_20create_20 +messages_lib/0201_0003_Can_27t_20create_20.rel + ___0201_0003_Can_27t_20create_20 +messages_lib/0202_ef8c_Can_27t_20create_20.rel + ___0202_ef8c_Can_27t_20create_20 +messages_lib/0203_28e0_Can_27t_20create_20.rel + ___0203_28e0_Can_27t_20create_20 +messages_lib/0204_d5bc_Can_27t_20create_20.rel + ___0204_d5bc_Can_27t_20create_20 +messages_lib/0205_c7fb_Can_27t_20delete_20.rel + ___0205_c7fb_Can_27t_20delete_20 +messages_lib/0206_d5d6_Can_27t_20detach_20.rel + ___0206_d5d6_Can_27t_20detach_20 +messages_lib/0207_5d65_Can_27t_20find_20he.rel + ___0207_5d65_Can_27t_20find_20he +messages_lib/0208_3eee_Can_27t_20list_20lo.rel + ___0208_3eee_Can_27t_20list_20lo +messages_lib/0209_c1c1_Can_27t_20open_20_2.rel + ___0209_c1c1_Can_27t_20open_20_2 +messages_lib/020a_fedd_Can_27t_20open_20_2.rel + ___020a_fedd_Can_27t_20open_20_2 +messages_lib/020b_fb2a_Can_27t_20open_20_2.rel + ___020b_fb2a_Can_27t_20open_20_2 +messages_lib/020c_d8a5_Can_27t_20open_20in.rel + ___020c_d8a5_Can_27t_20open_20in +messages_lib/020d_0616_Can_27t_20read_20_2.rel + ___020d_0616_Can_27t_20read_20_2 +messages_lib/020e_4a10_Can_27t_20read_20_2.rel + ___020e_4a10_Can_27t_20read_20_2 +messages_lib/020f_8468_Can_27t_20read_20co.rel + ___020f_8468_Can_27t_20read_20co +messages_lib/0210_4327_Can_27t_20read_20di.rel + ___0210_4327_Can_27t_20read_20di +messages_lib/0211_5fb2_Can_27t_20read_20lo.rel + ___0211_5fb2_Can_27t_20read_20lo +messages_lib/0212_36d4_Can_27t_20read_20pa.rel + ___0212_36d4_Can_27t_20read_20pa +messages_lib/0213_5e43_Can_27t_20rename_20.rel + ___0213_5e43_Can_27t_20rename_20 +messages_lib/0214_4bfe_Can_27t_20rewrite_2.rel + ___0214_4bfe_Can_27t_20rewrite_2 +messages_lib/0215_24ca_Can_27t_20set_20lin.rel + ___0215_24ca_Can_27t_20set_20lin +messages_lib/0216_5e82_Can_27t_20write_20_.rel + ___0216_5e82_Can_27t_20write_20_ +messages_lib/0217_988b_Can_27t_20write_20l.rel + ___0217_988b_Can_27t_20write_20l +messages_lib/0218_c0f9_Can_27t_20write_20t.rel + ___0218_c0f9_Can_27t_20write_20t +messages_lib/0219_5055_Ch_20Iface_20_20_20.rel + ___0219_5055_Ch_20Iface_20_20_20 +messages_lib/021a_eff3_Channel_20_2d_20_25.rel + ___021a_eff3_Channel_20_2d_20_25 +messages_lib/021b_1b09_Choke_20timeout_20_.rel + ___021b_1b09_Choke_20timeout_20_ +messages_lib/021c_f95c_Closed_3a_20_25s_0a.rel + ___021c_f95c_Closed_3a_20_25s_0a +messages_lib/021d_e508_Command_20batching.rel + ___021d_e508_Command_20batching +messages_lib/021e_b471_Connect_20failed_0a.rel + ___021e_b471_Connect_20failed_0a +messages_lib/021f_bb2f_Connect_20failed_3a.rel + ___021f_bb2f_Connect_20failed_3a +messages_lib/0220_85e9_Connect_20to_20mail.rel + ___0220_85e9_Connect_20to_20mail +messages_lib/0221_6930_Connected_0a.rel + ___0221_6930_Connected_0a +messages_lib/0222_5189_Connected_20to_20_2.rel + ___0222_5189_Connected_20to_20_2 +messages_lib/0223_771a_Connected_20to_20ma.rel + ___0223_771a_Connected_20to_20ma +messages_lib/0224_0e16_Connected_2e.rel + ___0224_0e16_Connected_2e +messages_lib/0225_3e79_Connection_20closed.rel + ___0225_3e79_Connection_20closed +messages_lib/0226_faa9_Connection_20failed.rel + ___0226_faa9_Connection_20failed +messages_lib/0227_3676_Could_20not_20creat.rel + ___0227_3676_Could_20not_20creat +messages_lib/0228_d95b_Couldn_27t_20queue_.rel + ___0228_d95b_Couldn_27t_20queue_ +messages_lib/0229_68a6_Current_20message_2.rel + ___0229_68a6_Current_20message_2 +messages_lib/022a_23ad_Currently_20enabled.rel + ___022a_23ad_Currently_20enabled +messages_lib/022b_1cf7_DELE_20_25s.rel + ___022b_1cf7_DELE_20_25s +messages_lib/022c_5fad_DISASTER_21_20Out_2.rel + ___022c_5fad_DISASTER_21_20Out_2 +messages_lib/022d_7ce2_DRSI_20Board_20Stat.rel + ___022d_7ce2_DRSI_20Board_20Stat +messages_lib/022e_2f52_D_5bU_5d_20filename.rel + ___022e_2f52_D_5bU_5d_20filename +messages_lib/022f_698b_Data_0a.rel + ___022f_698b_Data_0a +messages_lib/0230_cb1c_Data_20outside_20he.rel + ___0230_cb1c_Data_20outside_20he +messages_lib/0231_01be_Data_20pointer_20_2.rel + ___0231_01be_Data_20pointer_20_2 +messages_lib/0232_3cbb_Data_20pointer_20be.rel + ___0232_3cbb_Data_20pointer_20be +messages_lib/0233_bd70_Defaulting_20to_20b.rel + ___0233_bd70_Defaulting_20to_20b +messages_lib/0234_2d19_Del_5fconst_20_3d_2.rel + ___0234_2d19_Del_5fconst_20_3d_2 +messages_lib/0235_6255_Dest_20Addr_20_20_2.rel + ___0235_6255_Dest_20Addr_20_20_2 +messages_lib/0236_3894_Dialing_20not_20sup.rel + ___0236_3894_Dialing_20not_20sup +messages_lib/0237_26a3_Different_0a.rel + ___0237_26a3_Different_0a +messages_lib/0238_ae33_Digipeat.rel + ___0238_ae33_Digipeat +messages_lib/0239_af35_Directory_20table_2.rel + ___0239_af35_Directory_20table_2 +messages_lib/023a_c1bb_Disconnected_20.rel + ___023a_c1bb_Disconnected_20 +messages_lib/023b_2cc5_Disconnecting_2e.rel + ___023b_2cc5_Disconnecting_2e +messages_lib/023c_b7f4_Dup_20acks_20_20_20.rel + ___023c_b7f4_Dup_20acks_20_20_20 +messages_lib/023d_3ed4_Duplex_3a_20_25s_0a.rel + ___023d_3ed4_Duplex_3a_20_25s_0a +messages_lib/023e_b671_E2BIG.rel + ___023e_b671_E2BIG +messages_lib/023f_56e8_EACCES.rel + ___023f_56e8_EACCES +messages_lib/0240_f378_EAGAIN.rel + ___0240_f378_EAGAIN +messages_lib/0241_0483_EAGLE_20Board_20Sta.rel + ___0241_0483_EAGLE_20Board_20Sta +messages_lib/0242_a2a1_EBADF.rel + ___0242_a2a1_EBADF +messages_lib/0243_74ba_EBUSY.rel + ___0243_74ba_EBUSY +messages_lib/0244_4029_ECHILD.rel + ___0244_4029_ECHILD +messages_lib/0245_cd2b_EDEADLK.rel + ___0245_cd2b_EDEADLK +messages_lib/0246_4299_EDOM.rel + ___0246_4299_EDOM +messages_lib/0247_bec8_EEXIST.rel + ___0247_bec8_EEXIST +messages_lib/0248_afa9_EFAULT.rel + ___0248_afa9_EFAULT +messages_lib/0249_9ed8_EFBIG.rel + ___0249_9ed8_EFBIG +messages_lib/024a_28f7_EGATTACH_3a_20No_20.rel + ___024a_28f7_EGATTACH_3a_20No_20 +messages_lib/024b_eb47_EINTR.rel + ___024b_eb47_EINTR +messages_lib/024c_b479_EINVAL.rel + ___024c_b479_EINVAL +messages_lib/024d_21d8_EINVFNC.rel + ___024d_21d8_EINVFNC +messages_lib/024e_2d75_EIO.rel + ___024e_2d75_EIO +messages_lib/024f_fb45_EISDIR.rel + ___024f_fb45_EISDIR +messages_lib/0250_8de7_ELOOP.rel + ___0250_8de7_ELOOP +messages_lib/0251_9e5a_EMFILE.rel + ___0251_9e5a_EMFILE +messages_lib/0252_983a_EMLINK.rel + ___0252_983a_EMLINK +messages_lib/0253_0607_ENAMETOOLONG.rel + ___0253_0607_ENAMETOOLONG +messages_lib/0254_8396_ENFILE.rel + ___0254_8396_ENFILE +messages_lib/0255_7088_ENODEV.rel + ___0255_7088_ENODEV +messages_lib/0256_edee_ENOENT.rel + ___0256_edee_ENOENT +messages_lib/0257_a107_ENOEXEC.rel + ___0257_a107_ENOEXEC +messages_lib/0258_29fe_ENOLCK.rel + ___0258_29fe_ENOLCK +messages_lib/0259_42c4_ENOMEM.rel + ___0259_42c4_ENOMEM +messages_lib/025a_d51d_ENOSPC.rel + ___025a_d51d_ENOSPC +messages_lib/025b_d3a2_ENOTBLK.rel + ___025b_d3a2_ENOTBLK +messages_lib/025c_f683_ENOTDIR.rel + ___025c_f683_ENOTDIR +messages_lib/025d_83de_ENOTEMPTY.rel + ___025d_83de_ENOTEMPTY +messages_lib/025e_81a3_ENOTTY.rel + ___025e_81a3_ENOTTY +messages_lib/025f_01a7_ENXIO.rel + ___025f_01a7_ENXIO +messages_lib/0260_4485_EPERM.rel + ___0260_4485_EPERM +messages_lib/0261_5ede_EPIPE.rel + ___0261_5ede_EPIPE +messages_lib/0262_7f6a_ERANGE.rel + ___0262_7f6a_ERANGE +messages_lib/0263_0587_EROFS.rel + ___0263_0587_EROFS +messages_lib/0264_6b3a_ESCC_20channel_20_2.rel + ___0264_6b3a_ESCC_20channel_20_2 +messages_lib/0265_6d38_ESCC_20channel_20_2.rel + ___0265_6d38_ESCC_20channel_20_2 +messages_lib/0266_0a8a_ESCC_20driver_20alr.rel + ___0266_0a8a_ESCC_20driver_20alr +messages_lib/0267_d89e_ESCC_20driver_20not.rel + ___0267_d89e_ESCC_20driver_20not +messages_lib/0268_dd82_ESHELL.rel + ___0268_dd82_ESHELL +messages_lib/0269_ffa8_ESPIPE.rel + ___0269_ffa8_ESPIPE +messages_lib/026a_b33c_ESRCH.rel + ___026a_b33c_ESRCH +messages_lib/026b_194a_ETXTBSY.rel + ___026b_194a_ETXTBSY +messages_lib/026c_8d4a_EXDEV.rel + ___026c_8d4a_EXDEV +messages_lib/026d_4f54_Encapsulation_20mod.rel + ___026d_4f54_Encapsulation_20mod +messages_lib/026e_0f4a_Enqued_20_20_2d_20_.rel + ___026e_0f4a_Enqued_20_20_2d_20_ +messages_lib/026f_de30_Enter_20message_2e_.rel + ___026f_de30_Enter_20message_2e_ +messages_lib/0270_3a50_Error_20in_20respon.rel + ___0270_3a50_Error_20in_20respon +messages_lib/0271_d568_Error_20updating_20.rel + ___0271_d568_Error_20updating_20 +messages_lib/0272_69fc_Error_20writing_20m.rel + ___0272_69fc_Error_20writing_20m +messages_lib/0273_9664_Escape_20character_.rel + ___0273_9664_Escape_20character_ +messages_lib/0274_8c2d_Ether_3a_20len_20_2.rel + ___0274_8c2d_Ether_3a_20len_20_2 +messages_lib/0275_3af3_F_3e.rel + ___0275_3af3_F_3e +messages_lib/0276_0046_Failed_0a.rel + ___0276_0046_Failed_0a +messages_lib/0277_4a7b_First_20init_20ESCC.rel + ___0277_4a7b_First_20init_20ESCC +messages_lib/0278_0954_Forwarding_20timer_.rel + ___0278_0954_Forwarding_20timer_ +messages_lib/0279_95bb_Free_20address_20qu.rel + ___0279_95bb_Free_20address_20qu +messages_lib/027a_fee7_Free_20cache_3a_20s.rel + ___027a_fee7_Free_20cache_3a_20s +messages_lib/027b_8dc1_Free_20memory_20thr.rel + ___027b_8dc1_Free_20memory_20thr +messages_lib/027c_1be2_From_20_25s_20_25s.rel + ___027c_1be2_From_20_25s_20_25s +messages_lib/027d_d837_From_3a_20_25s_0a.rel + ___027d_d837_From_3a_20_25s_0a +messages_lib/027e_b9a0_Garbage_20bp_20_25l.rel + ___027e_b9a0_Garbage_20bp_20_25l +messages_lib/027f_7731_Group_20list_20too_.rel + ___027f_7731_Group_20list_20too_ +messages_lib/0280_ccdf_HAPN_20_25d_3a_20_2.rel + ___0280_ccdf_HAPN_20_25d_3a_20_2 +messages_lib/0281_9570_HOPCHECK_20start_20.rel + ___0281_9570_HOPCHECK_20start_20 +messages_lib/0282_8ef4_HOPCHECK_20to_20_25.rel + ___0282_8ef4_HOPCHECK_20to_20_25 +messages_lib/0283_c794_HOPCHECK_20tracing.rel + ___0283_c794_HOPCHECK_20tracing +messages_lib/0284_4952_HS_3a_20Warning_3a_.rel + ___0284_4952_HS_3a_20Warning_3a_ +messages_lib/0285_10ba_Hardware_20_25u_0a.rel + ___0285_10ba_Hardware_20_25u_0a +messages_lib/0286_32e9_Heap_20debugging.rel + ___0286_32e9_Heap_20debugging +messages_lib/0287_9144_Host_20_25s_20_28_2.rel + ___0287_9144_Host_20_25s_20_28_2 +messages_lib/0288_862c_Host_20_25s_20unkno.rel + ___0288_862c_Host_20_25s_20unkno +messages_lib/0289_f216_Hostname_20set_20to.rel + ___0289_f216_Hostname_20set_20to +messages_lib/028a_28fb_Hytech_20KA9Q_20NOS.rel + ___028a_28fb_Hytech_20KA9Q_20NOS +messages_lib/028b_df4f_ICMP_20echo_20respo.rel + ___028b_df4f_ICMP_20echo_20respo +messages_lib/028c_db6d_ICMP_20from_20_25s_.rel + ___028c_db6d_ICMP_20from_20_25s_ +messages_lib/028d_abbc_ICMP_20tracing.rel + ___028d_abbc_ICMP_20tracing +messages_lib/028e_6b85_ICMP_3a_20type_20_2.rel + ___028e_6b85_ICMP_3a_20type_20_2 +messages_lib/028f_dff6_IP_0a.rel + ___028f_dff6_IP_0a +messages_lib/0290_5812_IP_20Time_2dto_2dli.rel + ___0290_5812_IP_20Time_2dto_2dli +messages_lib/0291_0e41_IP_20addr_20_20_20_.rel + ___0291_0e41_IP_20addr_20_20_20_ +messages_lib/0292_8cdb_IP_20reasm_20timeou.rel + ___0292_8cdb_IP_20reasm_20timeou +messages_lib/0293_5f88_IP_20rx_20tracing.rel + ___0293_5f88_IP_20rx_20tracing +messages_lib/0294_88e0_IP_3a_20CHECKSUM_20.rel + ___0294_88e0_IP_3a_20CHECKSUM_20 +messages_lib/0295_03a7_IP_3a_20bad_20heade.rel + ___0295_03a7_IP_3a_20bad_20heade +messages_lib/0296_4543_IP_3a_20len_20_25u.rel + ___0296_4543_IP_3a_20len_20_25u +messages_lib/0297_e067_IPCP_0a.rel + ___0297_e067_IPCP_0a +messages_lib/0298_7c5c_IPCP_20_25s_0a.rel + ___0298_7c5c_IPCP_20_25s_0a +messages_lib/0299_a490_IRQ_20_25u_20out_20.rel + ___0299_a490_IRQ_20_25u_20out_20 +messages_lib/029a_925d_Idle_20poll_20timer.rel + ___029a_925d_Idle_20poll_20timer +messages_lib/029b_4ab5_Image_0a.rel + ___029b_4ab5_Image_0a +messages_lib/029c_7e58_Initial_20RTT_20_28.rel + ___029c_7e58_Initial_20RTT_20_28 +messages_lib/029d_bd38_Inqlen_3a_20_25d_20.rel + ___029d_bd38_Inqlen_3a_20_25d_20 +messages_lib/029e_c7f6_Insufficient_20args.rel + ___029e_c7f6_Insufficient_20args +messages_lib/029f_fcf9_Interface_20_20_20R.rel + ___029f_fcf9_Interface_20_20_20R +messages_lib/02a0_b903_Interface_20_22_25s.rel + ___02a0_b903_Interface_20_22_25s +messages_lib/02a1_4daf_Interface_20_22_25s.rel + ___02a1_4daf_Interface_20_22_25s +messages_lib/02a2_42ac_Interface_20_22_25s.rel + ___02a2_42ac_Interface_20_22_25s +messages_lib/02a3_5a50_Interface_20_25s_20.rel + ___02a3_5a50_Interface_20_25s_20 +messages_lib/02a4_1298_Interface_20_25s_20.rel + ___02a4_1298_Interface_20_25s_20 +messages_lib/02a5_24cb_Interface_20_25s_20.rel + ___02a5_24cb_Interface_20_25s_20 +messages_lib/02a6_c749_Interface_20_25s_20.rel + ___02a6_c749_Interface_20_25s_20 +messages_lib/02a7_63a0_Interface_20_25s_20.rel + ___02a7_63a0_Interface_20_25s_20 +messages_lib/02a8_8880_Interface_20_25s_20.rel + ___02a8_8880_Interface_20_25s_20 +messages_lib/02a9_6e91_Interface_20_25s_20.rel + ___02a9_6e91_Interface_20_25s_20 +messages_lib/02aa_103c_Interface_20address.rel + ___02aa_103c_Interface_20address +messages_lib/02ab_c429_Interface_3a_20.rel + ___02ab_c429_Interface_3a_20 +messages_lib/02ac_d726_Invalid_20magic_20c.rel + ___02ac_d726_Invalid_20magic_20c +messages_lib/02ad_42d9_Invalid_20range_2e_.rel + ___02ad_42d9_Invalid_20range_2e_ +messages_lib/02ae_89c0_Invalid_20type_20_2.rel + ___02ae_89c0_Invalid_20type_20_2 +messages_lib/02af_62ed_Invalid_20user_20na.rel + ___02af_62ed_Invalid_20user_20na +messages_lib/02b0_be0b_Job_20id_20_25s_20n.rel + ___02b0_be0b_Job_20id_20_25s_20n +messages_lib/02b1_87a9_K_20numbers.rel + ___02b1_87a9_K_20numbers +messages_lib/02b2_414e_KISS_3a_20.rel + ___02b2_414e_KISS_3a_20 +messages_lib/02b3_1668_Known_20users_20on_.rel + ___02b3_1668_Known_20users_20on_ +messages_lib/02b4_171d_LCP_0a.rel + ___02b4_171d_LCP_0a +messages_lib/02b5_befe_LCP_20_25s_0a.rel + ___02b5_befe_LCP_20_25s_0a +messages_lib/02b6_1d45_Last_20message_0a.rel + ___02b6_1d45_Last_20message_0a +messages_lib/02b7_a317_Loc_20.rel + ___02b7_a317_Loc_20 +messages_lib/02b8_5ce5_Local_3a_20_25s.rel + ___02b8_5ce5_Local_3a_20_25s +messages_lib/02b9_0926_Local_3a_20_25s_20_.rel + ___02b9_0926_Local_3a_20_25s_20_ +messages_lib/02ba_6210_Lock_20directory_20.rel + ___02ba_6210_Lock_20directory_20 +messages_lib/02bb_f59a_Logging_20off_0a.rel + ___02bb_f59a_Logging_20off_0a +messages_lib/02bc_1bd9_Logging_20to_20_25s.rel + ___02bc_1bd9_Logging_20to_20_25s +messages_lib/02bd_4a5a_Logical_20bytesize_.rel + ___02bd_4a5a_Logical_20bytesize_ +messages_lib/02be_4f93_Login_20incorrect_0.rel + ___02be_4f93_Login_20incorrect_0 +messages_lib/02bf_8ac2_MBOX_20Zap_3a_20_25.rel + ___02bf_8ac2_MBOX_20Zap_3a_20_25 +messages_lib/02c0_1dc7_MBOX_20bbs_20mail_2.rel + ___02c0_1dc7_MBOX_20bbs_20mail_2 +messages_lib/02c1_37c2_MBOX_20bbs_20mail_2.rel + ___02c1_37c2_MBOX_20bbs_20mail_2 +messages_lib/02c2_f88f_MBOX_20forward_20fa.rel + ___02c2_f88f_MBOX_20forward_20fa +messages_lib/02c3_9bd4_MBOX_20forwarding_2.rel + ___02c3_9bd4_MBOX_20forwarding_2 +messages_lib/02c4_d1e8_MBOX_20login_3a_20_.rel + ___02c4_d1e8_MBOX_20login_3a_20_ +messages_lib/02c5_dd2e_MBOX_20login_3a_20_.rel + ___02c5_dd2e_MBOX_20login_3a_20_ +messages_lib/02c6_e920_MBOX_20sysop_3a_20_.rel + ___02c6_e920_MBOX_20sysop_3a_20_ +messages_lib/02c7_a30c_MBOX_20upload_3a_20.rel + ___02c7_a30c_MBOX_20upload_3a_20 +messages_lib/02c8_c247_MKD_20_25s.rel + ___02c8_c247_MKD_20_25s +messages_lib/02c9_53a6_MRU_20_25s_20_28_25.rel + ___02c9_53a6_MRU_20_25s_20_28_25 +messages_lib/02ca_f9a6_Magic_20Number.rel + ___02ca_f9a6_Magic_20Number +messages_lib/02cb_d070_Mail_20area_3a_20_2.rel + ___02cb_d070_Mail_20area_3a_20_2 +messages_lib/02cc_0103_Mail_20box_20full_3.rel + ___02cc_0103_Mail_20box_20full_3 +messages_lib/02cd_523a_Main_20commands_3a_.rel + ___02cd_523a_Main_20commands_3a_ +messages_lib/02ce_dcca_Max_20attempts_20to.rel + ___02ce_dcca_Max_20attempts_20to +messages_lib/02cf_0279_Max_20clients.rel + ___02cf_0279_Max_20clients +messages_lib/02d0_3cd5_Max_20frame_20lengt.rel + ___02d0_3cd5_Max_20frame_20lengt +messages_lib/02d1_d96d_Maximum_20messages_.rel + ___02d1_d96d_Maximum_20messages_ +messages_lib/02d2_488d_Mbuf_20sizes_3a_0a.rel + ___02d2_488d_Mbuf_20sizes_3a_0a +messages_lib/02d3_ee8f_Message_20_23_25d_2.rel + ___02d3_ee8f_Message_20_23_25d_2 +messages_lib/02d4_b5f9_Mode_20_25s_20unkno.rel + ___02d4_b5f9_Mode_20_25s_20unkno +messages_lib/02d5_aa15_Mode_20_25s_20unkno.rel + ___02d5_aa15_Mode_20_25s_20unkno +messages_lib/02d6_ac3e_Msg_20_25d_20Killed.rel + ___02d6_ac3e_Msg_20_25d_20Killed +messages_lib/02d7_9a86_Must_20be_20_200_20.rel + ___02d7_9a86_Must_20be_20_200_20 +messages_lib/02d8_362b_Must_20be_20_200_20.rel + ___02d8_362b_Must_20be_20_200_20 +messages_lib/02d9_2da0_Must_20be_20_3e_3d_.rel + ___02d9_2da0_Must_20be_20_3e_3d_ +messages_lib/02da_06a9_Must_20set_20_27r_2.rel + ___02da_06a9_Must_20set_20_27r_2 +messages_lib/02db_d814_N_3e_3d_255u_3a_257.rel + ___02db_d814_N_3e_3d_255u_3a_257 +messages_lib/02dc_7868_NET_2fROM_20Routing.rel + ___02dc_7868_NET_2fROM_20Routing +messages_lib/02dd_ae07_NET_2fROM_20not_20a.rel + ___02dd_ae07_NET_2fROM_20not_20a +messages_lib/02de_d0e9_NET_2fROM_3a_20_25s.rel + ___02de_d0e9_NET_2fROM_3a_20_25s +messages_lib/02df_73b0_NEWNEWS_20_25s_20_2.rel + ___02df_73b0_NEWNEWS_20_25s_20_2 +messages_lib/02e0_c191_NNTP_20_25s_20Canno.rel + ___02e0_c191_NNTP_20_25s_20Canno +messages_lib/02e1_7ed2_NNTP_20_25s_20Canno.rel + ___02e1_7ed2_NNTP_20_25s_20Canno +messages_lib/02e2_bcd0_NNTP_20_25s_20Conne.rel + ___02e2_bcd0_NNTP_20_25s_20Conne +messages_lib/02e3_796b_NNTP_20_25s_20Conne.rel + ___02e3_796b_NNTP_20_25s_20Conne +messages_lib/02e4_4193_NNTP_20_25s_20Conne.rel + ___02e4_4193_NNTP_20_25s_20Conne +messages_lib/02e5_0909_NNTP_20_25s_20Conne.rel + ___02e5_0909_NNTP_20_25s_20Conne +messages_lib/02e6_3814_NNTP_20_25s_20Conne.rel + ___02e6_3814_NNTP_20_25s_20Conne +messages_lib/02e7_b5ec_NNTP_20_25s_20Could.rel + ___02e7_b5ec_NNTP_20_25s_20Could +messages_lib/02e8_8531_NNTP_20_25s_20Could.rel + ___02e8_8531_NNTP_20_25s_20Could +messages_lib/02e9_8fd5_NNTP_20_25s_20Could.rel + ___02e9_8fd5_NNTP_20_25s_20Could +messages_lib/02ea_0d83_NNTP_20_25s_20Givin.rel + ___02ea_0d83_NNTP_20_25s_20Givin +messages_lib/02eb_19c4_NNTP_20_25s_20Givin.rel + ___02eb_19c4_NNTP_20_25s_20Givin +messages_lib/02ec_213a_NNTP_20_25s_20bad_2.rel + ___02ec_213a_NNTP_20_25s_20bad_2 +messages_lib/02ed_31a2_NNTP_20_25s_20bad_2.rel + ___02ed_31a2_NNTP_20_25s_20bad_2 +messages_lib/02ee_df3f_NNTP_20_25s_20givin.rel + ___02ee_df3f_NNTP_20_25s_20givin +messages_lib/02ef_791c_NNTP_20_25s_20givin.rel + ___02ef_791c_NNTP_20_25s_20givin +messages_lib/02f0_75ce_NNTP_20_25s_20givin.rel + ___02f0_75ce_NNTP_20_25s_20givin +messages_lib/02f1_7eb6_NNTP_20_25s_20proto.rel + ___02f1_7eb6_NNTP_20_25s_20proto +messages_lib/02f2_7f99_NNTP_20_25s_20proto.rel + ___02f2_7f99_NNTP_20_25s_20proto +messages_lib/02f3_a517_NNTP_20Cannot_20ope.rel + ___02f3_a517_NNTP_20Cannot_20ope +messages_lib/02f4_fc8f_NNTP_20can_27t_20re.rel + ___02f4_fc8f_NNTP_20can_27t_20re +messages_lib/02f5_2c2a_NNTP_20daemon_20ent.rel + ___02f5_2c2a_NNTP_20daemon_20ent +messages_lib/02f6_f2a9_NNTP_20daemon_20exi.rel + ___02f6_f2a9_NNTP_20daemon_20exi +messages_lib/02f7_cbc7_NNTP_20daemon_20qui.rel + ___02f7_cbc7_NNTP_20daemon_20qui +messages_lib/02f8_0fa8_NNTP_20group_20_27_.rel + ___02f8_0fa8_NNTP_20group_20_27_ +messages_lib/02f9_0e76_NNTP_20receive_20er.rel + ___02f9_0e76_NNTP_20receive_20er +messages_lib/02fa_a47f_NNTP_20received_20_.rel + ___02fa_a47f_NNTP_20received_20_ +messages_lib/02fb_0916_NNTP_20tracing.rel + ___02fb_0916_NNTP_20tracing +messages_lib/02fc_b065_NNTP_20window_20to_.rel + ___02fc_b065_NNTP_20window_20to_ +messages_lib/02fd_852e_NO_20_2d_20.rel + ___02fd_852e_NO_20_2d_20 +messages_lib/02fe_e182_NO_20_2d_20bad_20ad.rel + ___02fe_e182_NO_20_2d_20bad_20ad +messages_lib/02ff_7ccb_NO_20_2d_20syntax_2.rel + ___02ff_7ccb_NO_20_2d_20syntax_2 +messages_lib/0300_2df6_NOS_20log_20closed.rel + ___0300_2df6_NOS_20log_20closed +messages_lib/0301_e1c8_NOS_20was_20started.rel + ___0301_e1c8_NOS_20was_20started +messages_lib/0302_cfbe_NOS_20was_20stopped.rel + ___0302_cfbe_NOS_20was_20stopped +messages_lib/0303_998c_NULL_20BUFFER_0a.rel + ___0303_998c_NULL_20BUFFER_0a +messages_lib/0304_89a8_Net_3e_20.rel + ___0304_89a8_Net_3e_20 +messages_lib/0305_e0c6_Network_20_25s_20co.rel + ___0305_e0c6_Network_20_25s_20co +messages_lib/0306_4009_New_20mail_20arrive.rel + ___0306_4009_New_20mail_20arrive +messages_lib/0307_fbfc_New_20mail_20arrive.rel + ___0307_fbfc_New_20mail_20arrive +messages_lib/0308_d0a7_New_20news_20arrive.rel + ___0308_d0a7_New_20news_20arrive +messages_lib/0309_e9a0_No_20HAPN_20adaptor.rel + ___0309_e9a0_No_20HAPN_20adaptor +messages_lib/030a_87bb_No_20current_20sess.rel + ___030a_87bb_No_20current_20sess +messages_lib/030b_7f27_No_20dialer_20activ.rel + ___030b_7f27_No_20dialer_20activ +messages_lib/030c_cd1f_No_20finger_20infor.rel + ___030c_cd1f_No_20finger_20infor +messages_lib/030d_2a2e_No_20help_20availab.rel + ___030d_2a2e_No_20help_20availab +messages_lib/030e_7cc9_No_20packet_20drive.rel + ___030e_7cc9_No_20packet_20drive +messages_lib/030f_4e0c_No_20such_20message.rel + ___030f_4e0c_No_20such_20message +messages_lib/0310_2a80_No_20such_20server_.rel + ___0310_2a80_No_20such_20server_ +messages_lib/0311_0cda_Nodetimer_20_25lu_2.rel + ___0311_0cda_Nodetimer_20_25lu_2 +messages_lib/0312_3fb0_None.rel + ___0312_3fb0_None +messages_lib/0313_1aee_None_0a.rel + ___0313_1aee_None_0a +messages_lib/0314_f8e2_Not_20a_20valid_20s.rel + ___0314_f8e2_Not_20a_20valid_20s +messages_lib/0315_b4ba_Not_20an_20FTP_20se.rel + ___0315_b4ba_Not_20an_20FTP_20se +messages_lib/0316_ee7e_Not_20found_0a.rel + ___0316_ee7e_Not_20found_0a +messages_lib/0317_533e_Not_20in_20table_0a.rel + ___0317_533e_Not_20in_20table_0a +messages_lib/0318_c7b9_Not_20supported_0a.rel + ___0318_c7b9_Not_20supported_0a +messages_lib/0319_9692_Obsotimer_20_25lu_2.rel + ___0319_9692_Obsotimer_20_25lu_2 +messages_lib/031a_ff96_Oh_2c_20hello_20_25.rel + ___031a_ff96_Oh_2c_20hello_20_25 +messages_lib/031b_0948_Only_20_25d_20DRSI_.rel + ___031b_0948_Only_20_25d_20DRSI_ +messages_lib/031c_8edb_Only_20_25d_20net_2.rel + ___031c_8edb_Only_20_25d_20net_2 +messages_lib/031d_f9f0_Only_201_20EAGLE_20.rel + ___031d_f9f0_Only_201_20EAGLE_20 +messages_lib/031e_1514_Outqlen_3a_20_25d_2.rel + ___031e_1514_Outqlen_3a_20_25d_2 +messages_lib/031f_5b48_PANIC_3a_20Timer_20.rel + ___031f_5b48_PANIC_3a_20Timer_20 +messages_lib/0320_281b_PANIC_3a_20buffer_2.rel + ___0320_281b_PANIC_3a_20buffer_2 +messages_lib/0321_f630_PAP_0a.rel + ___0321_f630_PAP_0a +messages_lib/0322_b2fb_PAP_20_25s_0a.rel + ___0322_b2fb_PAP_20_25s_0a +messages_lib/0323_8063_PASS_20_25s.rel + ___0323_8063_PASS_20_25s +messages_lib/0324_2320_PI_20Board_20Statis.rel + ___0324_2320_PI_20Board_20Statis +messages_lib/0325_73f1_PI_3a_20DMA_20_25d_.rel + ___0325_73f1_PI_3a_20DMA_20_25d_ +messages_lib/0326_5841_PI_3a_20DMA_20chann.rel + ___0326_5841_PI_3a_20DMA_20chann +messages_lib/0327_3992_PI_3a_20IRQ_20_25u_.rel + ___0327_3992_PI_3a_20IRQ_20_25u_ +messages_lib/0328_4ca4_PI_3a_20Interface_2.rel + ___0328_4ca4_PI_3a_20Interface_2 +messages_lib/0329_d856_PI_3a_20Maximum_20o.rel + ___0329_d856_PI_3a_20Maximum_20o +messages_lib/032a_9098_PI_3a_20Mode_20_25s.rel + ___032a_9098_PI_3a_20Mode_20_25s +messages_lib/032b_de39_PI_3a_20No_20IP_20a.rel + ___032b_de39_PI_3a_20No_20IP_20a +messages_lib/032c_02ea_PI_3a_20No_20memory.rel + ___032c_02ea_PI_3a_20No_20memory +messages_lib/032d_c0d0_PI_3a_20No_20memory.rel + ___032d_c0d0_PI_3a_20No_20memory +messages_lib/032e_94ca_PI_3a_20No_20memory.rel + ___032e_94ca_PI_3a_20No_20memory +messages_lib/032f_c698_PI_3a_20No_20memory.rel + ___032f_c698_PI_3a_20No_20memory +messages_lib/0330_d61f_PI_3a_20Set_20mycal.rel + ___0330_d61f_PI_3a_20Set_20mycal +messages_lib/0331_68d4_PID_20_20_20CS_3aIP.rel + ___0331_68d4_PID_20_20_20CS_3aIP +messages_lib/0332_3c62_POP_20access_20DENI.rel + ___0332_3c62_POP_20access_20DENI +messages_lib/0333_f3cf_POP_20access_20gran.rel + ___0333_f3cf_POP_20access_20gran +messages_lib/0334_639f_POP_20client_20retr.rel + ___0334_639f_POP_20client_20retr +messages_lib/0335_e9bb_POP_20quiet.rel + ___0335_e9bb_POP_20quiet +messages_lib/0336_1231_POP_20users_20file_.rel + ___0336_1231_POP_20users_20file_ +messages_lib/0337_e126_PORT_20_25u_2c_25u_.rel + ___0337_e126_PORT_20_25u_2c_25u_ +messages_lib/0338_b459_PPP_20tracing.rel + ___0338_b459_PPP_20tracing +messages_lib/0339_b660_PPP_3a_20len_20_253.rel + ___0339_b660_PPP_3a_20len_20_253 +messages_lib/033a_8c73_Packet_20driver_20h.rel + ___033a_8c73_Packet_20driver_20h +messages_lib/033b_d638_Pap_0a.rel + ___033b_d638_Pap_0a +messages_lib/033c_8165_Parameter_20_25s_20.rel + ___033c_8165_Parameter_20_25s_20 +messages_lib/033d_85d2_Password_3a_20.rel + ___033d_85d2_Password_3a_20 +messages_lib/033e_cb37_Password_3a_20_25c_.rel + ___033e_cb37_Password_3a_20_25c_ +messages_lib/033f_6310_Path_3a_20.rel + ___033f_6310_Path_3a_20 +messages_lib/0340_f75b_Persistence_3a_20_2.rel + ___0340_f75b_Persistence_3a_20_2 +messages_lib/0341_7bc8_Pinging_20_25s_0a.rel + ___0341_7bc8_Pinging_20_25s_0a +messages_lib/0342_94a5_Pinging_20resumed_0.rel + ___0342_94a5_Pinging_20resumed_0 +messages_lib/0343_7fa9_Pinging_20suspended.rel + ___0343_7fa9_Pinging_20suspended +messages_lib/0344_220f_Please_20hang_20up_.rel + ___0344_220f_Please_20hang_20up_ +messages_lib/0345_4304_Poll_20threshold_20.rel + ___0345_4304_Poll_20threshold_20 +messages_lib/0346_f8a0_Pool_20count_20_25s.rel + ___0346_f8a0_Pool_20count_20_25s +messages_lib/0347_dd4d_Protocol_20Field_20.rel + ___0347_dd4d_Protocol_20Field_20 +messages_lib/0348_744a_QUIT_0a.rel + ___0348_744a_QUIT_0a +messages_lib/0349_43c0_Quality_20cannot_20.rel + ___0349_43c0_Quality_20cannot_20 +messages_lib/034a_b523_Queue_20limit_20_28.rel + ___034a_b523_Queue_20limit_20_28 +messages_lib/034b_4a0a_R_20numbers.rel + ___034b_4a0a_R_20numbers +messages_lib/034c_db0e_R_3a_25s_20_40_25s_.rel + ___034c_db0e_R_3a_25s_20_40_25s_ +messages_lib/034d_373f_REQUEST.rel + ___034d_373f_REQUEST +messages_lib/034e_19a4_RESPONSE.rel + ___034e_19a4_RESPONSE +messages_lib/034f_8b13_RETR_20_25s.rel + ___034f_8b13_RETR_20_25s +messages_lib/0350_86e9_RETURN_0a.rel + ___0350_86e9_RETURN_0a +messages_lib/0351_bbdb_RFrames_20_2d_20_25.rel + ___0351_bbdb_RFrames_20_2d_20_25 +messages_lib/0352_f9d6_RIP_20merging.rel + ___0352_f9d6_RIP_20merging +messages_lib/0353_3211_RIP_20refused_20fro.rel + ___0353_3211_RIP_20refused_20fro +messages_lib/0354_8827_RIP_20tracing.rel + ___0354_8827_RIP_20tracing +messages_lib/0355_5585_RIP_3a_20.rel + ___0355_5585_RIP_3a_20 +messages_lib/0356_fd1d_RIP_3a_20sent_20_25.rel + ___0356_fd1d_RIP_3a_20sent_20_25 +messages_lib/0357_6b7c_RIPCMD_3a_20Unknown.rel + ___0357_6b7c_RIPCMD_3a_20Unknown +messages_lib/0358_5f5f_RIPCMD_5fREQUEST_0a.rel + ___0358_5f5f_RIPCMD_5fREQUEST_0a +messages_lib/0359_07f6_RIPCMD_5fRESPONSE_2.rel + ___0359_07f6_RIPCMD_5fRESPONSE_2 +messages_lib/035a_eb71_RIP_5frx_3a_20Not_2.rel + ___035a_eb71_RIP_5frx_3a_20Not_2 +messages_lib/035b_86e6_RMD_20_25s.rel + ___035b_86e6_RMD_20_25s +messages_lib/035c_8005_Range_20for_20inter.rel + ___035c_8005_Range_20for_20inter +messages_lib/035d_1ee5_Reassembly_20fragme.rel + ___035d_1ee5_Reassembly_20fragme +messages_lib/035e_fbe9_Reassembly_20queue_.rel + ___035e_fbe9_Reassembly_20queue_ +messages_lib/035f_5eb3_Received_3a_20.rel + ___035f_5eb3_Received_3a_20 +messages_lib/0360_9fbc_Recording_20into_20.rel + ___0360_9fbc_Recording_20into_20 +messages_lib/0361_aa80_Recording_20off_0a.rel + ___0361_aa80_Recording_20off_0a +messages_lib/0362_2a15_Recv_3a_20_20_20_20.rel + ___0362_2a15_Recv_3a_20_20_20_20 +messages_lib/0363_d0ff_Refuse_0a.rel + ___0363_d0ff_Refuse_0a +messages_lib/0364_42c0_Refusing_20announce.rel + ___0364_42c0_Refusing_20announce +messages_lib/0365_6bd1_Requesting_2e_2e_2e.rel + ___0365_6bd1_Requesting_2e_2e_2e +messages_lib/0366_4784_Resolver_20_25s_20u.rel + ___0366_4784_Resolver_20_25s_20u +messages_lib/0367_ae52_Resolving_20_25s_2e.rel + ___0367_ae52_Resolving_20_25s_2e +messages_lib/0368_200a_Resolving_20_25s_2e.rel + ___0368_200a_Resolving_20_25s_2e +messages_lib/0369_cacc_Retry_20limit.rel + ___0369_cacc_Retry_20limit +messages_lib/036a_0cd3_Returned_20.rel + ___036a_0cd3_Returned_20 +messages_lib/036b_85af_Route_20add_20faile.rel + ___036b_85af_Route_20add_20faile +messages_lib/036c_9b70_Routing_20lookups_3.rel + ___036c_9b70_Routing_20lookups_3 +messages_lib/036d_9c01_Rxints_20_20_2d_20_.rel + ___036d_9c01_Rxints_20_20_2d_20_ +messages_lib/036e_ccf6_S_20_20_20_20_20Job.rel + ___036e_ccf6_S_20_20_20_20_20Job +messages_lib/036f_df6d_S_20command_20synta.rel + ___036f_df6d_S_20command_20synta +messages_lib/0370_4fbb_S_23_20_20_20Type_2.rel + ___0370_4fbb_S_23_20_20_20Type_2 +messages_lib/0371_bf54_SMTP_20_25s_20Conne.rel + ___0371_bf54_SMTP_20_25s_20Conne +messages_lib/0372_cbb7_SMTP_20batching.rel + ___0372_cbb7_SMTP_20batching +messages_lib/0373_e45f_SMTP_20client_20Try.rel + ___0373_e45f_SMTP_20client_20Try +messages_lib/0374_797a_SMTP_20sent_20job_2.rel + ___0374_797a_SMTP_20sent_20job_2 +messages_lib/0375_68b2_SMTP_20tracing.rel + ___0375_68b2_SMTP_20tracing +messages_lib/0376_e7a4_SP_20_3d_20_25p_2c_.rel + ___0376_e7a4_SP_20_3d_20_25p_2c_ +messages_lib/0377_a1f1_STOR_20_25s.rel + ___0377_a1f1_STOR_20_25s +messages_lib/0378_49fd_STOR_20_25s_0a.rel + ___0378_49fd_STOR_20_25s_0a +messages_lib/0379_38ea_STOR_20_25s_3a_20_2.rel + ___0379_38ea_STOR_20_25s_3a_20_2 +messages_lib/037a_12cc_STOR_20_25s_3a_20Er.rel + ___037a_12cc_STOR_20_25s_3a_20Er +messages_lib/037b_cfe9_SUBCMD_20_2d_20Don_.rel + ___037b_cfe9_SUBCMD_20_2d_20Don_ +messages_lib/037c_0319_SYST_0a.rel + ___037c_0319_SYST_0a +messages_lib/037d_93fc_Same_0a.rel + ___037d_93fc_Same_0a +messages_lib/037e_3c55_Scroll_20file_20siz.rel + ___037e_3c55_Scroll_20file_20siz +messages_lib/037f_e255_Send_20file_2c_20_2.rel + ___037f_e255_Send_20file_2c_20_2 +messages_lib/0380_c1d8_Send_3a_20_2508lx_2.rel + ___0380_c1d8_Send_3a_20_2508lx_2 +messages_lib/0381_afab_Server_20address_20.rel + ___0381_afab_Server_20address_20 +messages_lib/0382_36ef_Session_20_25s_20no.rel + ___0382_36ef_Session_20_25s_20no +messages_lib/0383_0845_Slot_20time_3a_20_2.rel + ___0383_0845_Slot_20time_3a_20_2 +messages_lib/0384_6556_Socket_20not_20in_2.rel + ___0384_6556_Socket_20not_20in_2 +messages_lib/0385_a061_Sorry_20_2d_20the_2.rel + ___0385_a061_Sorry_20_2d_20the_2 +messages_lib/0386_8034_Stack_20violation_2.rel + ___0386_8034_Stack_20violation_2 +messages_lib/0387_6414_Station_20_20_20Las.rel + ___0387_6414_Station_20_20_20Las +messages_lib/0388_5bef_Station_20_20_20Las.rel + ___0388_5bef_Station_20_20_20Las +messages_lib/0389_9aef_Subject_3a_20_25s_0.rel + ___0389_9aef_Subject_3a_20_25s_0 +messages_lib/038a_0cac_System_20is_20overl.rel + ___038a_0cac_System_20is_20overl +messages_lib/038b_63e9_T_20hostname.rel + ___038b_63e9_T_20hostname +messages_lib/038c_1279_T1_3a_20.rel + ___038c_1279_T1_3a_20 +messages_lib/038d_a7c1_T3_3a_20.rel + ___038d_a7c1_T3_3a_20 +messages_lib/038e_e4a1_TACK_3a_20.rel + ___038e_e4a1_TACK_3a_20 +messages_lib/038f_7f7b_TCB_20_25p_20_25s_2.rel + ___038f_7f7b_TCB_20_25p_20_25s_2 +messages_lib/0390_5447_TCD_3a_20.rel + ___0390_5447_TCD_3a_20 +messages_lib/0391_fa23_TCP_20MSS.rel + ___0391_fa23_TCP_20MSS +messages_lib/0392_70e7_TCP_20default_20irt.rel + ___0392_70e7_TCP_20default_20irt +messages_lib/0393_5ac7_TCP_20header_20comp.rel + ___0393_5ac7_TCP_20header_20comp +messages_lib/0394_c668_TCP_20state_20traci.rel + ___0394_c668_TCP_20state_20traci +messages_lib/0395_b0d7_TCP_20syn_2bdata_20.rel + ___0395_b0d7_TCP_20syn_2bdata_20 +messages_lib/0396_43bd_TCP_20timestamps.rel + ___0396_43bd_TCP_20timestamps +messages_lib/0397_5b74_TCP_20window.rel + ___0397_5b74_TCP_20window +messages_lib/0398_7267_TCP_3a_20_25u_2d_3e.rel + ___0398_7267_TCP_3a_20_25u_2d_3e +messages_lib/0399_59c4_TChoke_3a_20.rel + ___0399_59c4_TChoke_3a_20 +messages_lib/039a_2ced_TX_20Delay_3a_20_25.rel + ___039a_2ced_TX_20Delay_3a_20_25 +messages_lib/039b_6a23_TX_20Tail_20time_3a.rel + ___039b_6a23_TX_20Tail_20time_3a +messages_lib/039c_d175_TX_20queue_20limit.rel + ___039c_d175_TX_20queue_20limit +messages_lib/039d_f579_TYPE_20A_0a.rel + ___039d_f579_TYPE_20A_0a +messages_lib/039e_3bb9_TYPE_20I_0a.rel + ___039e_3bb9_TYPE_20I_0a +messages_lib/039f_a616_TYPE_20L_20_25d_0a.rel + ___039f_a616_TYPE_20L_20_25d_0a +messages_lib/03a0_f6fb_Target_20_20_20_20T.rel + ___03a0_f6fb_Target_20_20_20_20T +messages_lib/03a1_950b_Telnet_20option_20t.rel + ___03a1_950b_Telnet_20option_20t +messages_lib/03a2_4517_Thank_20you_20_25s_.rel + ___03a2_4517_Thank_20you_20_25s_ +messages_lib/03a3_70f0_The_20escape_20char.rel + ___03a3_70f0_The_20escape_20char +messages_lib/03a4_6de0_Time_20for_201000_2.rel + ___03a4_6de0_Time_20for_201000_2 +messages_lib/03a5_601a_Time_20to_20live.rel + ___03a5_601a_Time_20to_20live +messages_lib/03a6_e505_Timeout_20value_20_.rel + ___03a6_e505_Timeout_20value_20_ +messages_lib/03a7_1db3_Timer_20_20_20_20_2.rel + ___03a7_1db3_Timer_20_20_20_20_2 +messages_lib/03a8_d78a_Tip_20connection_20.rel + ___03a8_d78a_Tip_20connection_20 +messages_lib/03a9_c093_Tip_20session_20alr.rel + ___03a9_c093_Tip_20session_20alr +messages_lib/03aa_8c54_To_3a_20_25s_0a.rel + ___03aa_8c54_To_3a_20_25s_0a +messages_lib/03ab_2a55_Too_20many_20HAPN_2.rel + ___03ab_2a55_Too_20many_20HAPN_2 +messages_lib/03ac_76b7_Too_20many_20asynch.rel + ___03ac_76b7_Too_20many_20asynch +messages_lib/03ad_58f2_Too_20many_20digipe.rel + ___03ad_58f2_Too_20many_20digipe +messages_lib/03ae_2d53_Too_20many_20hs_20c.rel + ___03ae_2d53_Too_20many_20hs_20c +messages_lib/03af_286c_Too_20many_20mailbo.rel + ___03af_286c_Too_20many_20mailbo +messages_lib/03b0_4c9a_Too_20many_20nrs_20.rel + ___03b0_4c9a_Too_20many_20nrs_20 +messages_lib/03b1_7103_Too_20many_20packet.rel + ___03b1_7103_Too_20many_20packet +messages_lib/03b2_d8c3_Too_20many_20pc100_.rel + ___03b2_d8c3_Too_20many_20pc100_ +messages_lib/03b3_2057_Too_20many_20sessio.rel + ___03b3_2057_Too_20many_20sessio +messages_lib/03b4_447c_Too_20many_20slip_2.rel + ___03b4_447c_Too_20many_20slip_2 +messages_lib/03b5_0d8c_Try_20to_20bounce_2.rel + ___03b5_0d8c_Try_20to_20bounce_2 +messages_lib/03b6_2030_Trying_20_25s_2e_2e.rel + ___03b6_2030_Trying_20_25s_2e_2e +messages_lib/03b7_cee2_Trying_20_25s_2e_2e.rel + ___03b7_cee2_Trying_20_25s_2e_2e +messages_lib/03b8_be29_Trying_20Connection.rel + ___03b8_be29_Trying_20Connection +messages_lib/03b9_9c56_Tstate_20_3d_20_25s.rel + ___03b9_9c56_Tstate_20_3d_20_25s +messages_lib/03ba_6afe_Turn_20off_20local_.rel + ___03ba_6afe_Turn_20off_20local_ +messages_lib/03bb_c801_Tx_20state_20_20_25.rel + ___03bb_c801_Tx_20state_20_20_25 +messages_lib/03bc_be1b_Tx_20state_20_20_25.rel + ___03bc_be1b_Tx_20state_20_20_25 +messages_lib/03bd_e1f6_TxBuffers_3a_20_20S.rel + ___03bd_e1f6_TxBuffers_3a_20_20S +messages_lib/03be_5cfe_Txdefer_20_2d_20_25.rel + ___03be_5cfe_Txdefer_20_2d_20_25 +messages_lib/03bf_e733_U_20filename.rel + ___03bf_e733_U_20filename +messages_lib/03c0_9059_UDP_3a.rel + ___03c0_9059_UDP_3a +messages_lib/03c1_a945_USER_20_25s.rel + ___03c1_a945_USER_20_25s +messages_lib/03c2_41aa_Unknown_20command.rel + ___03c2_41aa_Unknown_20command +messages_lib/03c3_e21a_Unknown_20command_2.rel + ___03c3_e21a_Unknown_20command_2 +messages_lib/03c4_b975_Unknown_20command_3.rel + ___03c4_b975_Unknown_20command_3 +messages_lib/03c5_d2a4_Unknown_20encapsula.rel + ___03c5_d2a4_Unknown_20encapsula +messages_lib/03c6_8cf4_Unknown_20parameter.rel + ___03c6_8cf4_Unknown_20parameter +messages_lib/03c7_eb24_Update_20with_20MD5.rel + ___03c7_eb24_Update_20with_20MD5 +messages_lib/03c8_7d7d_Uploading_20_25s_0a.rel + ___03c8_7d7d_Uploading_20_25s_0a +messages_lib/03c9_bd81_Uploading_20off_0a.rel + ___03c9_bd81_Uploading_20off_0a +messages_lib/03ca_6d70_Uptime_20_25s_20Sta.rel + ___03ca_6d70_Uptime_20_25s_20Sta +messages_lib/03cb_0a8d_Usage_3a_20.rel + ___03cb_0a8d_Usage_3a_20 +messages_lib/03cc_125c_Usage_3a_20_25s_20_.rel + ___03cc_125c_Usage_3a_20_25s_20_ +messages_lib/03cd_6ae1_Usage_3a_20F_20user.rel + ___03cd_6ae1_Usage_3a_20F_20user +messages_lib/03ce_7dd1_Usage_3a_20ax25_20r.rel + ___03ce_7dd1_Usage_3a_20ax25_20r +messages_lib/03cf_f8b8_Usage_3a_20dial_20_.rel + ___03cf_f8b8_Usage_3a_20dial_20_ +messages_lib/03d0_a375_Usage_3a_20mbox_20m.rel + ___03d0_a375_Usage_3a_20mbox_20m +messages_lib/03d1_8cfb_Usage_3a_20pop_20us.rel + ___03d1_8cfb_Usage_3a_20pop_20us +messages_lib/03d2_a2c0_Usage_3a_20smtp_20m.rel + ___03d2_a2c0_Usage_3a_20smtp_20m +messages_lib/03d3_9654_Use_20the_20ax25_20.rel + ___03d3_9654_Use_20the_20ax25_20 +messages_lib/03d4_4893_User_20_20_20_20_20.rel + ___03d4_4893_User_20_20_20_20_20 +messages_lib/03d5_633f_User_20_25s_20not_2.rel + ___03d5_633f_User_20_25s_20not_2 +messages_lib/03d6_75ef_V_20numbers.rel + ___03d6_75ef_V_20numbers +messages_lib/03d7_4b9d_VJ_20Compressed_20T.rel + ___03d7_4b9d_VJ_20Compressed_20T +messages_lib/03d8_2be9_VJ_20Uncompressed_2.rel + ___03d8_2be9_VJ_20Uncompressed_2 +messages_lib/03d9_3d32_Valid_20options_3a.rel + ___03d9_3d32_Valid_20options_3a +messages_lib/03da_8007_Value_20_25s_20_28_.rel + ___03da_8007_Value_20_25s_20_28_ +messages_lib/03db_c8df_Verbose.rel + ___03db_c8df_Verbose +messages_lib/03dc_32ff_Verbose_20flag.rel + ___03dc_32ff_Verbose_20flag +messages_lib/03dd_b110_WARNING_3a_20Locati.rel + ___03dd_b110_WARNING_3a_20Locati +messages_lib/03de_eddf_Warning_21_20Interf.rel + ___03de_eddf_Warning_21_20Interf +messages_lib/03df_4457_Warning_3a_20type_2.rel + ___03df_4457_Warning_3a_20type_2 +messages_lib/03e0_85a8_Window_20_28frames_.rel + ___03e0_85a8_Window_20_28frames_ +messages_lib/03e1_9331_Window_20size_20_28.rel + ___03e1_9331_Window_20size_20_28 +messages_lib/03e2_613d_Window_3a_20_25_2d5.rel + ___03e2_613d_Window_3a_20_25_2d5 +messages_lib/03e3_25a6_Wink_20DTR_3f_20.rel + ___03e3_25a6_Wink_20DTR_3f_20 +messages_lib/03e4_75b2_Writing_20article_2.rel + ___03e4_75b2_Writing_20article_2 +messages_lib/03e5_3999_XMD5_20_25s.rel + ___03e5_3999_XMD5_20_25s +messages_lib/03e6_a62b_XMD5_20_25s_0a.rel + ___03e6_a62b_XMD5_20_25s_0a +messages_lib/03e7_8515_XMKD_20_25s_0a.rel + ___03e7_8515_XMKD_20_25s_0a +messages_lib/03e8_31d2_XRMD_20_25s_0a.rel + ___03e8_31d2_XRMD_20_25s_0a +messages_lib/03e9_71c6_You_20have_20.rel + ___03e9_71c6_You_20have_20 +messages_lib/03ea_1e66_You_20have_20new_20.rel + ___03ea_1e66_You_20have_20new_20 +messages_lib/03eb_4583_You_27re_20using_20.rel + ___03eb_4583_You_27re_20using_20 +messages_lib/03ec_4aef_Z_20filename.rel + ___03ec_4aef_Z_20filename +messages_lib/03ed_5fd7_Zap_20failed_3a_20_.rel + ___03ed_5fd7_Zap_20failed_3a_20_ +messages_lib/03ee_e3d1__5b.rel + ___03ee_e3d1__5b +messages_lib/03ef_9d9c__5bNET_2dHMR_24_5d.rel + ___03ef_9d9c__5bNET_2dHMR_24_5d +messages_lib/03f0_f8e4__5bunknown_5d.rel + ___03f0_f8e4__5bunknown_5d +messages_lib/03f1_699f__5eC_0a.rel + ___03f1_699f__5eC_0a +messages_lib/03f2_e5d6__5eR_0a.rel + ___03f2_e5d6__5eR_0a +messages_lib/03f3_1951__5fexit.rel + ___03f3_1951__5fexit +messages_lib/03f4_a314__5ffcreat_3a_20WARN.rel + ___03f4_a314__5ffcreat_3a_20WARN +messages_lib/03f5_79de__5funlink_3a_20bad_.rel + ___03f5_79de__5funlink_3a_20bad_ +messages_lib/03f6_722b_accept.rel + ___03f6_722b_accept +messages_lib/03f7_30f9_accept_0a.rel + ___03f7_30f9_accept_0a +messages_lib/03f8_2cfc_access.rel + ___03f8_2cfc_access +messages_lib/03f9_9b89_accm.rel + ___03f9_9b89_accm +messages_lib/03fa_16c9_acct.rel + ___03fa_16c9_acct +messages_lib/03fb_0c4f_acfc.rel + ___03fb_0c4f_acfc +messages_lib/03fc_7530_acktime.rel + ___03fc_7530_acktime +messages_lib/03fd_41b5_add.rel + ___03fd_41b5_add +messages_lib/03fe_d8a3_add_20_3chostid_3e.rel + ___03fe_d8a3_add_20_3chostid_3e +messages_lib/03ff_6783_addprivate.rel + ___03ff_6783_addprivate +messages_lib/0400_9712_address.rel + ___0400_9712_address +messages_lib/0401_2c42_addserver.rel + ___0401_2c42_addserver +messages_lib/0402_b0a9_alarm.rel + ___0402_b0a9_alarm +messages_lib/0403_9965_allocs_20_25lu_20fr.rel + ___0403_9965_allocs_20_25lu_20fr +messages_lib/0404_8e82_allow_20pap_20none_.rel + ___0404_8e82_allow_20pap_20none_ +messages_lib/0405_ba08_allow_20tcp_20none_.rel + ___0405_ba08_allow_20tcp_20none_ +messages_lib/0406_94f6_anext_20pointer_20o.rel + ___0406_94f6_anext_20pointer_20o +messages_lib/0407_c2a0_answer_20script_3a_.rel + ___0407_c2a0_answer_20script_3a_ +messages_lib/0408_da7c_area.rel + ___0408_da7c_area +messages_lib/0409_1dde_arp_20add_20_3chost.rel + ___0409_1dde_arp_20add_20_3chost +messages_lib/040a_96ce_arp_20drop_20_3chos.rel + ___040a_96ce_arp_20drop_20_3chos +messages_lib/040b_0018_arp_20publish_20_3c.rel + ___040b_0018_arp_20publish_20_3c +messages_lib/040c_5838_asci.rel + ___040c_5838_asci +messages_lib/040d_4354_ascii.rel + ___040d_4354_ascii +messages_lib/040e_3914_ascistat.rel + ___040e_3914_ascistat +messages_lib/040f_6442_attach.rel + ___040f_6442_attach +messages_lib/0410_39bc_attach_20_3chardwar.rel + ___0410_39bc_attach_20_3chardwar +messages_lib/0411_fe98_attach_20asci_20_3c.rel + ___0411_fe98_attach_20asci_20_3c +messages_lib/0412_342d_attach_20escc_20_3c.rel + ___0412_342d_attach_20escc_20_3c +messages_lib/0413_7943_attempt_20to_20writ.rel + ___0413_7943_attempt_20to_20writ +messages_lib/0414_7d37_attend.rel + ___0414_7d37_attend +messages_lib/0415_c133_authenticate.rel + ___0415_c133_authenticate +messages_lib/0416_fd47_ax25_20kick_20_3cax.rel + ___0416_fd47_ax25_20kick_20_3cax +messages_lib/0417_0003_ax25_20reset_20_3ca.rel + ___0417_0003_ax25_20reset_20_3ca +messages_lib/0418_ca0a_bad_20destination_2.rel + ___0418_ca0a_bad_20destination_2 +messages_lib/0419_60d3_bad_20internet_20ad.rel + ___0419_60d3_bad_20internet_20ad +messages_lib/041a_0a79_bad_20neighbor_20ca.rel + ___041a_0a79_bad_20neighbor_20ca +messages_lib/041b_4126_batch.rel + ___041b_4126_batch +messages_lib/041c_bcb6_bcnodes.rel + ___041c_bcb6_bcnodes +messages_lib/041d_0c93_begin_20_2503o_20_2.rel + ___041d_0c93_begin_20_2503o_20_2 +messages_lib/041e_3245_binary.rel + ___041e_3245_binary +messages_lib/041f_4c4f_blimit.rel + ___041f_4c4f_blimit +messages_lib/0420_ff8d_bootp_20_5bnet_5fna.rel + ___0420_ff8d_bootp_20_5bnet_5fna +messages_lib/0421_0e8f_bootp_3a_20Net_5fer.rel + ___0421_0e8f_bootp_3a_20Net_5fer +messages_lib/0422_f5d9_bootp_3a_20timed_20.rel + ___0422_f5d9_bootp_3a_20timed_20 +messages_lib/0423_72d6_bp_20_25lx_20tot_20.rel + ___0423_72d6_bp_20_25lx_20tot_20 +messages_lib/0424_9767_brk.rel + ___0424_9767_brk +messages_lib/0425_f951_broadcast.rel + ___0425_f951_broadcast +messages_lib/0426_03ff_bsr.rel + ___0426_03ff_bsr +messages_lib/0427_83e6_by_20_25s_20_28_25s.rel + ___0427_83e6_by_20_25s_20_28_25s +messages_lib/0428_69f3_by_20_25s_20with_20.rel + ___0428_69f3_by_20_25s_20with_20 +messages_lib/0429_9ab1_bye.rel + ___0429_9ab1_bye +messages_lib/042a_7cbf_cache.rel + ___042a_7cbf_cache +messages_lib/042b_a3a9_can_27t_20read_20_2.rel + ___042b_a3a9_can_27t_20read_20_2 +messages_lib/042c_f4b4_can_27t_20trace_20i.rel + ___042c_f4b4_can_27t_20trace_20i +messages_lib/042d_9aa7_cd.rel + ___042d_9aa7_cd +messages_lib/042e_42c2_cd_20_3cdirectory_3.rel + ___042e_42c2_cd_20_3cdirectory_3 +messages_lib/042f_35a9_chat.rel + ___042f_35a9_chat +messages_lib/0430_743f_chdir.rel + ___0430_743f_chdir +messages_lib/0431_5ed3_check.rel + ___0431_5ed3_check +messages_lib/0432_40b3_check_20_3chost_3e.rel + ___0432_40b3_check_20_3chost_3e +messages_lib/0433_c946_chmod.rel + ___0433_c946_chmod +messages_lib/0434_b786_choketime.rel + ___0434_b786_choketime +messages_lib/0435_88f5_chown.rel + ___0435_88f5_chown +messages_lib/0436_87a8_chroot.rel + ___0436_87a8_chroot +messages_lib/0437_4822_clean.rel + ___0437_4822_clean +messages_lib/0438_23aa_close.rel + ___0438_23aa_close +messages_lib/0439_2b22_close_20FTP.rel + ___0439_2b22_close_20FTP +messages_lib/043a_f93d_close_20Finger.rel + ___043a_f93d_close_20Finger +messages_lib/043b_0957_close_20POP.rel + ___043b_0957_close_20POP +messages_lib/043c_b85c_close_20POP_20_2d_2.rel + ___043c_b85c_close_20POP_20_2d_2 +messages_lib/043d_83a3_close_20SMTP.rel + ___043d_83a3_close_20SMTP +messages_lib/043e_b949_close_20SMTP_20_2d_.rel + ___043e_b949_close_20SMTP_20_2d_ +messages_lib/043f_423c_close_20discard.rel + ___043f_423c_close_20discard +messages_lib/0440_419d_close_20echo.rel + ___0440_419d_close_20echo +messages_lib/0441_03ad_close_20term.rel + ___0441_03ad_close_20term +messages_lib/0442_83dc_code_20_25u_20arg_2.rel + ___0442_83dc_code_20_25u_20arg_2 +messages_lib/0443_ea90_compare.rel + ___0443_ea90_compare +messages_lib/0444_a613_compare_20_3cremote.rel + ___0444_a613_compare_20_3cremote +messages_lib/0445_fbc2_compress.rel + ___0445_fbc2_compress +messages_lib/0446_3845_compressed_20.rel + ___0446_3845_compressed_20 +messages_lib/0447_26b1_configure.rel + ___0447_26b1_configure +messages_lib/0448_749f_connect.rel + ___0448_749f_connect +messages_lib/0449_5769_control.rel + ___0449_5769_control +messages_lib/044a_941e_control_20up_20_7c_.rel + ___044a_941e_control_20up_20_7c_ +messages_lib/044b_2aba_control_3a_20_25s_0.rel + ___044b_2aba_control_3a_20_25s_0 +messages_lib/044c_4bf4_cwd.rel + ___044c_4bf4_cwd +messages_lib/044d_62af_d_5finit_28_29.rel + ___044d_62af_d_5finit_28_29 +messages_lib/044e_5a9b_d_5finit_28_29_20ma.rel + ___044e_5a9b_d_5finit_28_29_20ma +messages_lib/044f_62a8_debug.rel + ___044f_62a8_debug +messages_lib/0450_740d_default.rel + ___0450_740d_default +messages_lib/0451_db45_defaultfile.rel + ___0451_db45_defaultfile +messages_lib/0452_818b_delay_20_25lu_0a.rel + ___0452_818b_delay_20_25lu_0a +messages_lib/0453_2c87_dele.rel + ___0453_2c87_dele +messages_lib/0454_89a5_delete.rel + ___0454_89a5_delete +messages_lib/0455_3919_delete_20_3cfile_3e.rel + ___0455_3919_delete_20_3cfile_3e +messages_lib/0456_6466_destlist.rel + ___0456_6466_destlist +messages_lib/0457_cfc1_detach.rel + ___0457_cfc1_detach +messages_lib/0458_26f3_detach_20_3cinterfa.rel + ___0458_26f3_detach_20_3cinterfa +messages_lib/0459_3f12_devio_5fgarbage_3a_.rel + ___0459_3f12_devio_5fgarbage_3a_ +messages_lib/045a_0f61_dfile_5fsearch_3a_2.rel + ___045a_0f61_dfile_5fsearch_3a_2 +messages_lib/045b_4eba_dfile_5fupdate_3a_2.rel + ___045b_4eba_dfile_5fupdate_3a_2 +messages_lib/045c_5b47_dfile_5fupdate_3a_2.rel + ___045c_5b47_dfile_5fupdate_3a_2 +messages_lib/045d_ef06_dfile_5fupdate_3a_2.rel + ___045d_ef06_dfile_5fupdate_3a_2 +messages_lib/045e_0173_dialer.rel + ___045e_0173_dialer +messages_lib/045f_8d0b_dialer_20_3ciface_3.rel + ___045f_8d0b_dialer_20_3ciface_3 +messages_lib/0460_18c3_digipeat.rel + ___0460_18c3_digipeat +messages_lib/0461_bdc7_dir.rel + ___0461_bdc7_dir +messages_lib/0462_5c0a_directory.rel + ___0462_5c0a_directory +messages_lib/0463_176f_discard.rel + ___0463_176f_discard +messages_lib/0464_684a_discard_20expired_2.rel + ___0464_684a_discard_20expired_2 +messages_lib/0465_f701_disconnect.rel + ___0465_f701_disconnect +messages_lib/0466_e146_dns.rel + ___0466_e146_dns +messages_lib/0467_8f79_dns_5fquery_3a_20qu.rel + ___0467_8f79_dns_5fquery_3a_20qu +messages_lib/0468_6da5_dns_5fquery_3a_20re.rel + ___0468_6da5_dns_5fquery_3a_20re +messages_lib/0469_041c_doexit_3a_20won_27t.rel + ___0469_041c_doexit_3a_20won_27t +messages_lib/046a_21ed_domain.rel + ___046a_21ed_domain +messages_lib/046b_e0fd_down_20script_3a_20.rel + ___046b_e0fd_down_20script_3a_20 +messages_lib/046c_050c_download.rel + ___046c_050c_download +messages_lib/046d_4853_drop.rel + ___046d_4853_drop +messages_lib/046e_0532_drop_20_3chostid_3e.rel + ___046e_0532_drop_20_3chostid_3e +messages_lib/046f_e7cf_dropserver.rel + ___046f_e7cf_dropserver +messages_lib/0470_a2e4_dup.rel + ___0470_a2e4_dup +messages_lib/0471_b319_dup2.rel + ___0471_b319_dup2 +messages_lib/0472_cb91_dynip.rel + ___0472_cb91_dynip +messages_lib/0473_2edf_echo.rel + ___0473_2edf_echo +messages_lib/0474_7366_empty_20packet_21_2.rel + ___0474_7366_empty_20packet_21_2 +messages_lib/0475_48fd_encapsulation.rel + ___0475_48fd_encapsulation +messages_lib/0476_4a34_eol.rel + ___0476_4a34_eol +messages_lib/0477_b4ae_escape.rel + ___0477_b4ae_escape +messages_lib/0478_858e_escc.rel + ___0478_858e_escc +messages_lib/0479_d50a_escc_25d_3a_20No_20.rel + ___0479_d50a_escc_25d_3a_20No_20 +messages_lib/047a_6362_esccstat.rel + ___047a_6362_esccstat +messages_lib/047b_59b0_execve.rel + ___047b_59b0_execve +messages_lib/047c_3566_exit.rel + ___047c_3566_exit +messages_lib/047d_bd2b_expired.rel + ___047d_bd2b_expired +messages_lib/047e_bce0_failure.rel + ___047e_bce0_failure +messages_lib/047f_086a_falign.rel + ___047f_086a_falign +messages_lib/0480_303b_files.rel + ___0480_303b_files +messages_lib/0481_d6a7_filter_20mode_20is_.rel + ___0481_d6a7_filter_20mode_20is_ +messages_lib/0482_927a_finger.rel + ___0482_927a_finger +messages_lib/0483_8ea1_finger_20name_40hos.rel + ___0483_8ea1_finger_20name_40hos +messages_lib/0484_28f4_flush.rel + ___0484_28f4_flush +messages_lib/0485_dc8b_fmount_3a_20can_27t.rel + ___0485_dc8b_fmount_3a_20can_27t +messages_lib/0486_8074_fork.rel + ___0486_8074_fork +messages_lib/0487_8227_forward.rel + ___0487_8227_forward +messages_lib/0488_c066_fp_20_20_20_20_20_2.rel + ___0488_c066_fp_20_20_20_20_20_2 +messages_lib/0489_9a2a_free_3a_20WARNING_2.rel + ___0489_9a2a_free_3a_20WARNING_2 +messages_lib/048a_f896_freelist.rel + ___048a_f896_freelist +messages_lib/048b_bd4f_from_20_25s_20.rel + ___048b_bd4f_from_20_25s_20 +messages_lib/048c_5b02_from_20_25s_2ebbs_2.rel + ___048c_5b02_from_20_25s_2ebbs_2 +messages_lib/048d_2208_fs_5finit_28_29.rel + ___048d_2208_fs_5finit_28_29 +messages_lib/048e_7fbc_fstat.rel + ___048e_7fbc_fstat +messages_lib/048f_0e84_ftp.rel + ___048f_0e84_ftp +messages_lib/0490_bafd_ftp_20_3caddress_3e.rel + ___0490_bafd_ftp_20_3caddress_3e +messages_lib/0491_f999_ftp_3e_20syst_0a.rel + ___0491_f999_ftp_3e_20syst_0a +messages_lib/0492_51ba_garbage_20collectio.rel + ___0492_51ba_garbage_20collectio +messages_lib/0493_c2ce_gateway.rel + ___0493_c2ce_gateway +messages_lib/0494_9e35_get.rel + ___0494_9e35_get +messages_lib/0495_c7c0_get_20_3cremotefile.rel + ___0495_c7c0_get_20_3cremotefile +messages_lib/0496_60c5_getfsys.rel + ___0496_60c5_getfsys +messages_lib/0497_631b_getinode_3a_20bad_2.rel + ___0497_631b_getinode_3a_20bad_2 +messages_lib/0498_7dac_getset.rel + ___0498_7dac_getset +messages_lib/0499_b3cb_groups.rel + ___0499_b3cb_groups +messages_lib/049a_156e_hash.rel + ___049a_156e_hash +messages_lib/049b_5bc8_heap_20size_20_25lu.rel + ___049b_5bc8_heap_20size_20_25lu +messages_lib/049c_856f_heard.rel + ___049c_856f_heard +messages_lib/049d_fc9f_help.rel + ___049d_fc9f_help +messages_lib/049e_1d5e_homedir.rel + ___049e_1d5e_homedir +messages_lib/049f_6fa6_hop.rel + ___049f_6fa6_hop +messages_lib/04a0_df98_host.rel + ___04a0_df98_host +messages_lib/04a1_476e_hostname.rel + ___04a1_476e_hostname +messages_lib/04a2_2f25_icmp.rel + ___04a2_2f25_icmp +messages_lib/04a3_dd41_ident.rel + ___04a3_dd41_ident +messages_lib/04a4_fe83_ifconfig.rel + ___04a4_fe83_ifconfig +messages_lib/04a5_6196_ignored_20_28hold_2.rel + ___04a5_6196_ignored_20_28hold_2 +messages_lib/04a6_dc84_info.rel + ___04a6_dc84_info +messages_lib/04a7_0500_input_20line_3a_20_.rel + ___04a7_0500_input_20line_3a_20_ +messages_lib/04a8_9677_interface.rel + ___04a8_9677_interface +messages_lib/04a9_3fa5_ioctl.rel + ___04a9_3fa5_ioctl +messages_lib/04aa_3172_ip.rel + ___04aa_3172_ip +messages_lib/04ab_d229_ip_5frecv_28_25s_29.rel + ___04ab_d229_ip_5frecv_28_25s_29 +messages_lib/04ac_289f_ip_5fsend_0a.rel + ___04ac_289f_ip_5fsend_0a +messages_lib/04ad_0191_ipaddress.rel + ___04ad_0191_ipaddress +messages_lib/04ae_dfc4_ipcp.rel + ___04ae_dfc4_ipcp +messages_lib/04af_f4c1_irtt.rel + ___04af_f4c1_irtt +messages_lib/04b0_516b_kick.rel + ___04b0_516b_kick +messages_lib/04b1_a61c_kill.rel + ___04b1_a61c_kill +messages_lib/04b2_ff9f_kill_20_3cjobnumber.rel + ___04b2_ff9f_kill_20_3cjobnumber +messages_lib/04b3_5e27_ksigs_20_25lu_20que.rel + ___04b3_5e27_ksigs_20_25lu_20que +messages_lib/04b4_1bbe_kwaits_20_25lu_20no.rel + ___04b4_1bbe_kwaits_20_25lu_20no +messages_lib/04b5_a567_lcp.rel + ___04b5_a567_lcp +messages_lib/04b6_b632_link.rel + ___04b6_b632_link +messages_lib/04b7_dfe4_linkaddress.rel + ___04b7_dfe4_linkaddress +messages_lib/04b8_7bad_list.rel + ___04b8_7bad_list +messages_lib/04b9_4346_listen.rel + ___04b9_4346_listen +messages_lib/04ba_a5dd_listservers.rel + ___04ba_a5dd_listservers +messages_lib/04bb_f2d8_local.rel + ___04bb_f2d8_local +messages_lib/04bc_68f9_log.rel + ___04bc_68f9_log +messages_lib/04bd_feb4_logfile.rel + ___04bd_feb4_logfile +messages_lib/04be_52c6_login_3a_20.rel + ___04be_52c6_login_3a_20 +messages_lib/04bf_a516_logscreen.rel + ___04bf_a516_logscreen +messages_lib/04c0_8f77_lookup.rel + ___04c0_8f77_lookup +messages_lib/04c1_7d51_ls.rel + ___04c1_7d51_ls +messages_lib/04c2_634b_lseek.rel + ___04c2_634b_lseek +messages_lib/04c3_0288_magic.rel + ___04c3_0288_magic +messages_lib/04c4_868b_maibox_20name_20not.rel + ___04c4_868b_maibox_20name_20not +messages_lib/04c5_2d7f_mailbox.rel + ___04c5_2d7f_mailbox +messages_lib/04c6_2084_mailbox_20name_20no.rel + ___04c6_2084_mailbox_20name_20no +messages_lib/04c7_86f8_mailhost.rel + ___04c7_86f8_mailhost +messages_lib/04c8_63b8_mailhost_20not_20de.rel + ___04c8_63b8_mailhost_20not_20de +messages_lib/04c9_139d_maxclients.rel + ___04c9_139d_maxclients +messages_lib/04ca_8d56_maxframe.rel + ___04ca_8d56_maxframe +messages_lib/04cb_d5aa_maximum_20route_20q.rel + ___04cb_d5aa_maximum_20route_20q +messages_lib/04cc_9853_maxmsg.rel + ___04cc_9853_maxmsg +messages_lib/04cd_7203_maxttl.rel + ___04cd_7203_maxttl +messages_lib/04ce_e017_maxwait.rel + ___04ce_e017_maxwait +messages_lib/04cf_e57a_mbuf_20allocs_20_25.rel + ___04cf_e57a_mbuf_20allocs_20_25 +messages_lib/04d0_8c4f_mcompare.rel + ___04d0_8c4f_mcompare +messages_lib/04d1_f47e_mcompare_20_3cfile_.rel + ___04d1_f47e_mcompare_20_3cfile_ +messages_lib/04d2_a71a_md5.rel + ___04d2_a71a_md5 +messages_lib/04d3_cc78_md5_20_3cfile_3e.rel + ___04d3_cc78_md5_20_3cfile_3e +messages_lib/04d4_4d2a_memory.rel + ___04d4_4d2a_memory +messages_lib/04d5_69ba_memory_20cache_20si.rel + ___04d5_69ba_memory_20cache_20si +messages_lib/04d6_336a_merge.rel + ___04d6_336a_merge +messages_lib/04d7_649e_merge_20_25s_20_25d.rel + ___04d7_649e_merge_20_25s_20_25d +messages_lib/04d8_460c_metric_20better_3a_.rel + ___04d8_460c_metric_20better_3a_ +messages_lib/04d9_3694_metric_20change_3a_.rel + ___04d9_3694_metric_20change_3a_ +messages_lib/04da_44b0_metric_20not_20bett.rel + ___04da_44b0_metric_20not_20bett +messages_lib/04db_b64c_mget.rel + ___04db_b64c_mget +messages_lib/04dc_8d01_mget_20_3cfile_3e_2.rel + ___04dc_8d01_mget_20_3cfile_3e_2 +messages_lib/04dd_1e96_mkd_20.rel + ___04dd_1e96_mkd_20 +messages_lib/04de_304a_mkdir.rel + ___04de_304a_mkdir +messages_lib/04df_7d04_mkdir_20_3cdirector.rel + ___04df_7d04_mkdir_20_3cdirector +messages_lib/04e0_6257_mknod.rel + ___04e0_6257_mknod +messages_lib/04e1_685e_mode.rel + ___04e1_685e_mode +messages_lib/04e2_9335_modes_20are_3a_20no.rel + ___04e2_9335_modes_20are_3a_20no +messages_lib/04e3_a91f_more.rel + ___04e3_a91f_more +messages_lib/04e4_5384_more_20_3cfilename_.rel + ___04e4_5384_more_20_3cfilename_ +messages_lib/04e5_ec46_motd.rel + ___04e5_ec46_motd +messages_lib/04e6_b5d1_mount.rel + ___04e6_b5d1_mount +messages_lib/04e7_2a4d_mput.rel + ___04e7_2a4d_mput +messages_lib/04e8_312f_mput_20_3cfile_3e_2.rel + ___04e8_312f_mput_20_3cfile_3e_2 +messages_lib/04e9_245f_mru.rel + ___04e9_245f_mru +messages_lib/04ea_58b1_mss.rel + ___04ea_58b1_mss +messages_lib/04eb_708f_mtu.rel + ___04eb_708f_mtu +messages_lib/04ec_78ae_mycall.rel + ___04ec_78ae_mycall +messages_lib/04ed_8a90_name.rel + ___04ed_8a90_name +messages_lib/04ee_b07d_netmask.rel + ___04ee_b07d_netmask +messages_lib/04ef_4d2c_netrom_20bcnodes_20.rel + ___04ef_4d2c_netrom_20bcnodes_20 +messages_lib/04f0_c5dc_netrom_20connect_20.rel + ___04f0_c5dc_netrom_20connect_20 +messages_lib/04f1_925a_netrom_20interface_.rel + ___04f1_925a_netrom_20interface_ +messages_lib/04f2_a510_netrom_20interface_.rel + ___04f2_a510_netrom_20interface_ +messages_lib/04f3_b271_netrom_20kick_20_3c.rel + ___04f3_b271_netrom_20kick_20_3c +messages_lib/04f4_5334_netrom_20nodefilter.rel + ___04f4_5334_netrom_20nodefilter +messages_lib/04f5_6bfe_netrom_20nodefilter.rel + ___04f5_6bfe_netrom_20nodefilter +messages_lib/04f6_328e_netrom_20reset_20_3.rel + ___04f6_328e_netrom_20reset_20_3 +messages_lib/04f7_18c8_netrom_20route_20ad.rel + ___04f7_18c8_netrom_20route_20ad +messages_lib/04f8_fff3_netrom_20route_20dr.rel + ___04f8_fff3_netrom_20route_20dr +messages_lib/04f9_e8da_netrom_20route_20in.rel + ___04f9_e8da_netrom_20route_20in +messages_lib/04fa_2254_newproc_20_22_25s_2.rel + ___04fa_2254_newproc_20_22_25s_2 +messages_lib/04fb_4db6_newsession_3a_20WAR.rel + ___04fb_4db6_newsession_3a_20WAR +messages_lib/04fc_5ab5_newsession_3a_20WAR.rel + ___04fc_5ab5_newsession_3a_20WAR +messages_lib/04fd_7718_next_20pointer_20ou.rel + ___04fd_7718_next_20pointer_20ou +messages_lib/04fe_7b66_nlst.rel + ___04fe_7b66_nlst +messages_lib/04ff_0ca7_nntp_20addserver_20.rel + ___04ff_0ca7_nntp_20addserver_20 +messages_lib/0500_fea0_nntp_20dropserver_2.rel + ___0500_fea0_nntp_20dropserver_2 +messages_lib/0501_a821_nntp_20kick_20_3cnn.rel + ___0501_a821_nntp_20kick_20_3cnn +messages_lib/0502_a7f6_no_20filesys.rel + ___0502_a7f6_no_20filesys +messages_lib/0503_7405_no_20root.rel + ___0503_7405_no_20root +messages_lib/0504_b518_no_20such_20route_0.rel + ___0504_b518_no_20such_20route_0 +messages_lib/0505_3fb4_nodefilter.rel + ___0505_3fb4_nodefilter +messages_lib/0506_bac4_nodefilter_20subcom.rel + ___0506_bac4_nodefilter_20subcom +messages_lib/0507_e743_nodes.rel + ___0507_e743_nodes +messages_lib/0508_57cf_nodetimer.rel + ___0508_57cf_nodetimer +messages_lib/0509_7a7f_none_0a.rel + ___0509_7a7f_none_0a +messages_lib/050a_29c2_normal_20_28_25s_20.rel + ___050a_29c2_normal_20_28_25s_20 +messages_lib/050b_07d0_null_0a.rel + ___050b_07d0_null_0a +messages_lib/050c_fb30_obsotimer.rel + ___050c_fb30_obsotimer +messages_lib/050d_3971_open.rel + ___050d_3971_open +messages_lib/050e_a412_open_20_25s.rel + ___050e_a412_open_20_25s +messages_lib/050f_e5a0_open_20FTP.rel + ___050f_e5a0_open_20FTP +messages_lib/0510_10d3_open_20Finger.rel + ___0510_10d3_open_20Finger +messages_lib/0511_fe22_open_20MBOX.rel + ___0511_fe22_open_20MBOX +messages_lib/0512_c7d5_open_20POP.rel + ___0512_c7d5_open_20POP +messages_lib/0513_2477_open_20SMTP.rel + ___0513_2477_open_20SMTP +messages_lib/0514_4ca5_open_20discard.rel + ___0514_4ca5_open_20discard +messages_lib/0515_e649_open_20echo.rel + ___0515_e649_open_20echo +messages_lib/0516_a479_open_20term.rel + ___0516_a479_open_20term +messages_lib/0517_2f09_p_5finit_28_29.rel + ___0517_2f09_p_5finit_28_29 +messages_lib/0518_76ec_packet_20delayed_20.rel + ___0518_76ec_packet_20delayed_20 +messages_lib/0519_8504_packet_20duped_0a.rel + ___0519_8504_packet_20duped_0a +messages_lib/051a_a8e1_packet_20lost_0a.rel + ___051a_a8e1_packet_20lost_0a +messages_lib/051b_ead4_paclen.rel + ___051b_ead4_paclen +messages_lib/051c_1a03_page.rel + ___051c_1a03_page +messages_lib/051d_dd11_page_20_3ccommand_3.rel + ___051d_dd11_page_20_3ccommand_3 +messages_lib/051e_b6e1_pap.rel + ___051e_b6e1_pap +messages_lib/051f_512a_param.rel + ___051f_512a_param +messages_lib/0520_d362_param_20_3cinterfac.rel + ___0520_d362_param_20_3cinterfac +messages_lib/0521_9d45_pass.rel + ___0521_9d45_pass +messages_lib/0522_f746_pause.rel + ___0522_f746_pause +messages_lib/0523_d9f3_pfc.rel + ___0523_d9f3_pfc +messages_lib/0524_28cb_ping.rel + ___0524_28cb_ping +messages_lib/0525_d85a_ping_20_3chostid_3e.rel + ___0525_d85a_ping_20_3chostid_3e +messages_lib/0526_0458_pipe.rel + ___0526_0458_pipe +messages_lib/0527_5919_pool.rel + ___0527_5919_pool +messages_lib/0528_e039_port.rel + ___0528_e039_port +messages_lib/0529_a9d2_port_20_25d_3a_20tx.rel + ___0529_a9d2_port_20_25d_3a_20tx +messages_lib/052a_3aa8_ppp.rel + ___052a_3aa8_ppp +messages_lib/052b_8304_ppp_5fproc_3a_20mis.rel + ___052b_8304_ppp_5fproc_3a_20mis +messages_lib/052c_3dc2_protocol_3a_20.rel + ___052c_3dc2_protocol_3a_20 +messages_lib/052d_4160_ps.rel + ___052d_4160_ps +messages_lib/052e_26dc_pthresh.rel + ___052e_26dc_pthresh +messages_lib/052f_a61f_publish.rel + ___052f_a61f_publish +messages_lib/0530_274c_pushdown_20calls_20.rel + ___0530_274c_pushdown_20calls_20 +messages_lib/0531_0234_put.rel + ___0531_0234_put +messages_lib/0532_8f3b_put_20_3clocalfile_.rel + ___0532_8f3b_put_20_3clocalfile_ +messages_lib/0533_2105_pwd.rel + ___0533_2105_pwd +messages_lib/0534_0282_qlimit.rel + ___0534_0282_qlimit +messages_lib/0535_0be6_queries.rel + ___0535_0be6_queries +messages_lib/0536_0bef_query.rel + ___0536_0bef_query +messages_lib/0537_6646_query_20_3chostid_3.rel + ___0537_6646_query_20_3chostid_3 +messages_lib/0538_27c8_queue_20job_20_25s_.rel + ___0538_27c8_queue_20job_20_25s_ +messages_lib/0539_1196_quick.rel + ___0539_1196_quick +messages_lib/053a_ad30_quiet.rel + ___053a_ad30_quiet +messages_lib/053b_7b54_quit.rel + ___053b_7b54_quit +messages_lib/053c_054d_read.rel + ___053c_054d_read +messages_lib/053d_c7a9_read_20_3cremotefil.rel + ___053d_c7a9_read_20_3cremotefil +messages_lib/053e_7ee6_reboot.rel + ___053e_7ee6_reboot +messages_lib/053f_1c64_received_20_25u_20b.rel + ___053f_1c64_received_20_25u_20b +messages_lib/0540_5735_record.rel + ___0540_5735_record +messages_lib/0541_18c5_recv_3a_20do_20.rel + ___0541_18c5_recv_3a_20do_20 +messages_lib/0542_8810_recv_3a_20dont_20.rel + ___0542_8810_recv_3a_20dont_20 +messages_lib/0543_84ef_recv_3a_20will_20.rel + ___0543_84ef_recv_3a_20will_20 +messages_lib/0544_219c_recv_3a_20wont_20.rel + ___0544_219c_recv_3a_20wont_20 +messages_lib/0545_c7dc_refuse.rel + ___0545_c7dc_refuse +messages_lib/0546_0e31_reject_0a.rel + ___0546_0e31_reject_0a +messages_lib/0547_bc2e_remote.rel + ___0547_bc2e_remote +messages_lib/0548_4ff0_remote_20_5b_2dp_20.rel + ___0548_4ff0_remote_20_5b_2dp_20 +messages_lib/0549_cb71_rename.rel + ___0549_cb71_rename +messages_lib/054a_a493_rename_20_3coldfile.rel + ___054a_a493_rename_20_3coldfile +messages_lib/054b_6d5b_repeat.rel + ___054b_6d5b_repeat +messages_lib/054c_01b9_repeat_20_3cinterva.rel + ___054c_01b9_repeat_20_3cinterva +messages_lib/054d_3f14_request.rel + ___054d_3f14_request +messages_lib/054e_85b2_reset.rel + ___054e_85b2_reset +messages_lib/054f_c3ce_response_20id_20_25.rel + ___054f_c3ce_response_20id_20_25 +messages_lib/0550_9bd3_retr.rel + ___0550_9bd3_retr +messages_lib/0551_5e3c_retries.rel + ___0551_5e3c_retries +messages_lib/0552_0acb_retry.rel + ___0552_0acb_retry +messages_lib/0553_7f96_rip_20accept_20_3cg.rel + ___0553_7f96_rip_20accept_20_3cg +messages_lib/0554_764e_rip_20add_20_3cdest.rel + ___0554_764e_rip_20add_20_3cdest +messages_lib/0555_3030_rip_20drop_20_3cdes.rel + ___0555_3030_rip_20drop_20_3cdes +messages_lib/0556_8661_rip_20refuse_20_3cg.rel + ___0556_8661_rip_20refuse_20_3cg +messages_lib/0557_b917_rmd_20.rel + ___0557_b917_rmd_20 +messages_lib/0558_a56c_rmdir.rel + ___0558_a56c_rmdir +messages_lib/0559_b9e3_rmdir_20_3cdirector.rel + ___0559_b9e3_rmdir_20_3cdirector +messages_lib/055a_c459_rmhost.rel + ___055a_c459_rmhost +messages_lib/055b_0284_route.rel + ___055b_0284_route +messages_lib/055c_ea02_route_20add_20_3cde.rel + ___055c_ea02_route_20add_20_3cde +messages_lib/055d_f461_route_20add_20_5b_2.rel + ___055d_f461_route_20add_20_5b_2 +messages_lib/055e_d581_route_20addprivate_.rel + ___055e_d581_route_20addprivate_ +messages_lib/055f_bbd2_route_20drop_20_3cd.rel + ___055f_bbd2_route_20drop_20_3cd +messages_lib/0560_103e_route_20drop_20_5b_.rel + ___0560_103e_route_20drop_20_5b_ +messages_lib/0561_a5ec_route_20lookup_20_3.rel + ___0561_a5ec_route_20lookup_20_3 +messages_lib/0562_ae23_route_20to_20self_3.rel + ___0562_ae23_route_20to_20self_3 +messages_lib/0563_2c09_rtimer.rel + ___0563_2c09_rtimer +messages_lib/0564_ae54_rtt.rel + ___0564_ae54_rtt +messages_lib/0565_02fc_running.rel + ___0565_02fc_running +messages_lib/0566_b4d7_rxbuf.rel + ___0566_b4d7_rxbuf +messages_lib/0567_d2fd_sbrk.rel + ___0567_d2fd_sbrk +messages_lib/0568_3365_scrollback.rel + ___0568_3365_scrollback +messages_lib/0569_9a3e_send.rel + ___0569_9a3e_send +messages_lib/056a_e397_send_20_22string_22.rel + ___056a_e397_send_20_22string_22 +messages_lib/056b_5c19_sender.rel + ___056b_5c19_sender +messages_lib/056c_efea_sending_20job_20_25.rel + ___056c_efea_sending_20job_20_25 +messages_lib/056d_7321_sent_3a_20do_20.rel + ___056d_7321_sent_3a_20do_20 +messages_lib/056e_db3c_sent_3a_20dont_20.rel + ___056e_db3c_sent_3a_20dont_20 +messages_lib/056f_d7c3_sent_3a_20will_20.rel + ___056f_d7c3_sent_3a_20will_20 +messages_lib/0570_72b0_sent_3a_20wont_20.rel + ___0570_72b0_sent_3a_20wont_20 +messages_lib/0571_2d5d_serial_20line_20IP_.rel + ___0571_2d5d_serial_20line_20IP_ +messages_lib/0572_f33e_serial_20line_20VJ_.rel + ___0572_f33e_serial_20line_20VJ_ +messages_lib/0573_6f7f_serial_20line_20VJ_.rel + ___0573_6f7f_serial_20line_20VJ_ +messages_lib/0574_6f48_server_20retries.rel + ___0574_6f48_server_20retries +messages_lib/0575_f0af_server_20trace.rel + ___0575_f0af_server_20trace +messages_lib/0576_db9a_session.rel + ___0576_db9a_session +messages_lib/0577_3031_set_20mycall_20firs.rel + ___0577_3031_set_20mycall_20firs +messages_lib/0578_1de4_shell.rel + ___0578_1de4_shell +messages_lib/0579_3faf_signal.rel + ___0579_3faf_signal +messages_lib/057a_dce5_size.rel + ___057a_dce5_size +messages_lib/057b_f163_sizes.rel + ___057b_f163_sizes +messages_lib/057c_4046_smtp_20daemon_20ent.rel + ___057c_4046_smtp_20daemon_20ent +messages_lib/057d_8e2a_smtp_20daemon_3a_20.rel + ___057d_8e2a_smtp_20daemon_3a_20 +messages_lib/057e_23e1_smtp_20job_20_25s_2.rel + ___057e_23e1_smtp_20job_20_25s_2 +messages_lib/057f_ed89_smtp_20mode_3a_20_2.rel + ___057f_ed89_smtp_20mode_3a_20_2 +messages_lib/0580_2b33_smtp_20recv_3a_20_2.rel + ___0580_2b33_smtp_20recv_3a_20_2 +messages_lib/0581_928b_smtp_20sent_3a_20.rel + ___0581_928b_smtp_20sent_3a_20 +messages_lib/0582_b4cf_socket.rel + ___0582_b4cf_socket +messages_lib/0583_6b20_some_20strange_2c_2.rel + ___0583_6b20_some_20strange_2c_2 +messages_lib/0584_60cd_speed.rel + ___0584_60cd_speed +messages_lib/0585_9785_speed_20_3cbps_3e.rel + ___0585_9785_speed_20_3cbps_3e +messages_lib/0586_1861_spool_3a_20_25s_0a.rel + ___0586_1861_spool_3a_20_25s_0a +messages_lib/0587_61f2_src_20_25s.rel + ___0587_61f2_src_20_25s +messages_lib/0588_4e06_srtt_20_3d_20_25lu_.rel + ___0588_4e06_srtt_20_3d_20_25lu_ +messages_lib/0589_795f_stack_20test.rel + ___0589_795f_stack_20test +messages_lib/058a_45e3_stacktest.rel + ___058a_45e3_stacktest +messages_lib/058b_be0b_stacktest_20_5bon_7.rel + ___058b_be0b_stacktest_20_5bon_7 +messages_lib/058c_fcc6_standard_0a.rel + ___058c_fcc6_standard_0a +messages_lib/058d_b958_start.rel + ___058d_b958_start +messages_lib/058e_4b5d_start_20_3cserverna.rel + ___058e_4b5d_start_20_3cserverna +messages_lib/058f_9324_start_20bsr_20_3cin.rel + ___058f_9324_start_20bsr_20_3cin +messages_lib/0590_d63e_stat.rel + ___0590_d63e_stat +messages_lib/0591_5069_status.rel + ___0591_5069_status +messages_lib/0592_7dfc_status_20up_20_7c_2.rel + ___0592_7dfc_status_20up_20_7c_2 +messages_lib/0593_68cb_stime.rel + ___0593_68cb_stime +messages_lib/0594_4875_stktrace_20from_20p.rel + ___0594_4875_stktrace_20from_20p +messages_lib/0595_0a0a_stop.rel + ___0595_0a0a_stop +messages_lib/0596_6ec0_stop_20_3cservernam.rel + ___0596_6ec0_stop_20_3cservernam +messages_lib/0597_301d_stopped.rel + ___0597_301d_stopped +messages_lib/0598_2918_stor.rel + ___0598_2918_stor +messages_lib/0599_784e_stru.rel + ___0599_784e_stru +messages_lib/059a_bec3_suffix.rel + ___059a_bec3_suffix +messages_lib/059b_420b_symlink.rel + ___059b_420b_symlink +messages_lib/059c_ceb7_sync.rel + ___059c_ceb7_sync +messages_lib/059d_bb66_syndata.rel + ___059d_bb66_syndata +messages_lib/059e_b50c_sysdebug.rel + ___059e_b50c_sysdebug +messages_lib/059f_be35_sysdebug_20_5bon_7c.rel + ___059f_be35_sysdebug_20_5bon_7c +messages_lib/05a0_8f60_syst.rel + ___05a0_8f60_syst +messages_lib/05a1_f3f3_system_20call_20tra.rel + ___05a1_f3f3_system_20call_20tra +messages_lib/05a2_a612_system_20kernel_20d.rel + ___05a2_a612_system_20kernel_20d +messages_lib/05a3_98fb_systrace.rel + ___05a3_98fb_systrace +messages_lib/05a4_71e3_systrace_20_5bon_7c.rel + ___05a4_71e3_systrace_20_5bon_7c +messages_lib/05a5_6404_t3.rel + ___05a5_6404_t3 +messages_lib/05a6_b31f_target.rel + ___05a6_b31f_target +messages_lib/05a7_e630_tcp.rel + ___05a7_e630_tcp +messages_lib/05a8_e483_tcp_20kick_20_3ctcb.rel + ___05a8_e483_tcp_20kick_20_3ctcb +messages_lib/05a9_a12c_tcp_20reset_20_3ctc.rel + ___05a9_a12c_tcp_20reset_20_3ctc +messages_lib/05aa_bb94_tcp_20rtt_20_3ctcb_.rel + ___05aa_bb94_tcp_20rtt_20_3ctcb_ +messages_lib/05ab_f363_tcp_20stat_20_3ctcb.rel + ___05ab_f363_tcp_20stat_20_3ctcb +messages_lib/05ac_6ff2_telnet.rel + ___05ac_6ff2_telnet +messages_lib/05ad_2114_telnet_20_3caddress.rel + ___05ad_2114_telnet_20_3caddress +messages_lib/05ae_6cef_term.rel + ___05ae_6cef_term +messages_lib/05af_7425_terminate.rel + ___05af_7425_terminate +messages_lib/05b0_4c6f_thresh.rel + ___05b0_4c6f_thresh +messages_lib/05b1_535d_time.rel + ___05b1_535d_time +messages_lib/05b2_43a3_time_20before_20fil.rel + ___05b2_43a3_time_20before_20fil +messages_lib/05b3_7156_timeout.rel + ___05b3_7156_timeout +messages_lib/05b4_d9a6_timer.rel + ___05b4_d9a6_timer +messages_lib/05b5_d29c_timer_3a_20ints_20w.rel + ___05b5_d29c_timer_3a_20ints_20w +messages_lib/05b6_c82f_times.rel + ___05b6_c82f_times +messages_lib/05b7_223a_timestamps.rel + ___05b7_223a_timestamps +messages_lib/05b8_004c_tip_20or_20dialer_2.rel + ___05b8_004c_tip_20or_20dialer_2 +messages_lib/05b9_aa4a_tiptimeout.rel + ___05b9_aa4a_tiptimeout +messages_lib/05ba_aa76_tmp_20file_20wiping.rel + ___05ba_aa76_tmp_20file_20wiping +messages_lib/05bb_2645_tmp_20file_3a_20_25.rel + ___05bb_2645_tmp_20file_3a_20_25 +messages_lib/05bc_a165_topt.rel + ___05bc_a165_topt +messages_lib/05bd_4f5f_trace.rel + ___05bd_4f5f_trace +messages_lib/05be_3bce_traceroute_20done_3.rel + ___05be_3bce_traceroute_20done_3 +messages_lib/05bf_f7b8_try.rel + ___05bf_f7b8_try +messages_lib/05c0_e444_ttl.rel + ___05c0_e444_ttl +messages_lib/05c1_299c_ttylink.rel + ___05c1_299c_ttylink +messages_lib/05c2_e58b_txqlen.rel + ___05c2_e58b_txqlen +messages_lib/05c3_f321_type.rel + ___05c3_f321_type +messages_lib/05c4_f1e4_udp.rel + ___05c4_f1e4_udp +messages_lib/05c5_5caf_umount.rel + ___05c5_5caf_umount +messages_lib/05c6_5c70_unknown_0a.rel + ___05c6_5c70_unknown_0a +messages_lib/05c7_bc4f_unknown_200x_2504x_.rel + ___05c7_bc4f_unknown_200x_2504x_ +messages_lib/05c8_5194_unknown_20hardware_.rel + ___05c8_5194_unknown_20hardware_ +messages_lib/05c9_acee_unlink.rel + ___05c9_acee_unlink +messages_lib/05ca_f303_up_20script_3a_20_2.rel + ___05ca_f303_up_20script_3a_20_2 +messages_lib/05cb_db93_update.rel + ___05cb_db93_update +messages_lib/05cc_5c27_update_20Domain_2et.rel + ___05cc_5c27_update_20Domain_2et +messages_lib/05cd_0b09_update_20Domain_2et.rel + ___05cd_0b09_update_20Domain_2et +messages_lib/05ce_c5a3_update_20Domain_2et.rel + ___05ce_c5a3_update_20Domain_2et +messages_lib/05cf_d4f0_upload.rel + ___05cf_d4f0_upload +messages_lib/05d0_13f7_user.rel + ___05d0_13f7_user +messages_lib/05d1_6f25_user_20abort_0a.rel + ___05d1_6f25_user_20abort_0a +messages_lib/05d2_1b49_userdata.rel + ___05d2_1b49_userdata +messages_lib/05d3_3967_username_20not_20de.rel + ___05d3_3967_username_20not_20de +messages_lib/05d4_c23f_users.rel + ___05d4_c23f_users +messages_lib/05d5_5353_utime.rel + ___05d5_5353_utime +messages_lib/05d6_d261_valid_20subcommands.rel + ___05d6_d261_valid_20subcommands +messages_lib/05d7_a0e5_validblk_3a_20dev_2.rel + ___05d7_a0e5_validblk_3a_20dev_2 +messages_lib/05d8_74cf_validblk_3a_20inval.rel + ___05d8_74cf_validblk_3a_20inval +messages_lib/05d9_ab5c_verbose.rel + ___05d9_ab5c_verbose +messages_lib/05da_207d_version.rel + ___05da_207d_version +messages_lib/05db_9778_view.rel + ___05db_9778_view +messages_lib/05dc_23f1_view_20_3cfilename_.rel + ___05dc_23f1_view_20_3cfilename_ +messages_lib/05dd_d63a_wait.rel + ___05dd_d63a_wait +messages_lib/05de_2887_wait_20_3cmilliseco.rel + ___05de_2887_wait_20_3cmilliseco +messages_lib/05df_e988_waitpid.rel + ___05df_e988_waitpid +messages_lib/05e0_674e_want_20busy_20block.rel + ___05e0_674e_want_20busy_20block +messages_lib/05e1_84e4_what.rel + ___05e1_84e4_what +messages_lib/05e2_9158_window.rel + ___05e2_9158_window +messages_lib/05e3_5379_wipe.rel + ___05e3_5379_wipe +messages_lib/05e4_4cc8_write.rel + ___05e4_4cc8_write +messages_lib/05e5_dd6d_x_25x.rel + ___05e5_dd6d_x_25x +messages_lib/05e6_ce7b_xcwd.rel + ___05e6_ce7b_xcwd +messages_lib/05e7_2295_xmd5.rel + ___05e7_2295_xmd5 +messages_lib/05e8_e251_xmkd.rel + ___05e8_e251_xmkd +messages_lib/05e9_a48a_xpwd.rel + ___05e9_a48a_xpwd +messages_lib/05ea_79d3_xrmd.rel + ___05ea_79d3_xrmd +messages_lib/05eb_c59b_zap.rel + ___05eb_c59b_zap diff --git a/src/nos/lib/messages_lib/0000_ffff_.rel b/src/nos/lib/messages_lib/0000_ffff_.rel new file mode 100644 index 00000000..a8fd0580 --- /dev/null +++ b/src/nos/lib/messages_lib/0000_ffff_.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3 flags 0 +S ___0000_ffff_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 01 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0001_508a__08_20_08.rel b/src/nos/lib/messages_lib/0001_508a__08_20_08.rel new file mode 100644 index 00000000..1a461740 --- /dev/null +++ b/src/nos/lib/messages_lib/0001_508a__08_20_08.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0001_508a__08_20_08 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 08 20 08 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0002_17d6__09_09_20MRU_09_20A.rel b/src/nos/lib/messages_lib/0002_17d6__09_09_20MRU_09_20A.rel new file mode 100644 index 00000000..3ba5dc6a --- /dev/null +++ b/src/nos/lib/messages_lib/0002_17d6__09_09_20MRU_09_20A.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S ___0002_17d6__09_09_20MRU_09_20A Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 24 00 09 09 20 4d 52 55 09 20 41 +R 00 00 01 00 +T 0b 00 00 00 43 43 4d 09 09 20 41 50 09 20 50 +R 00 00 01 00 +T 16 00 00 00 46 43 20 20 41 43 46 43 20 4d 61 +R 00 00 01 00 +T 21 00 00 00 67 69 63 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0003_002f__09_09_256u_20Lcp_2.rel b/src/nos/lib/messages_lib/0003_002f__09_09_256u_20Lcp_2.rel new file mode 100644 index 00000000..5eb6fc64 --- /dev/null +++ b/src/nos/lib/messages_lib/0003_002f__09_09_256u_20Lcp_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___0003_002f__09_09_256u_20Lcp_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 09 09 25 36 75 20 4c 63 70 +R 00 00 01 00 +T 0b 00 00 00 2c 25 36 75 20 50 61 70 2c 25 36 +R 00 00 01 00 +T 16 00 00 00 75 20 49 50 63 70 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0004_14b3__09_09_256u_20Lcp_2.rel b/src/nos/lib/messages_lib/0004_14b3__09_09_256u_20Lcp_2.rel new file mode 100644 index 00000000..e2d251eb --- /dev/null +++ b/src/nos/lib/messages_lib/0004_14b3__09_09_256u_20Lcp_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___0004_14b3__09_09_256u_20Lcp_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 09 09 25 36 75 20 4c 63 70 +R 00 00 01 00 +T 0b 00 00 00 2c 25 36 75 20 50 61 70 2c 25 36 +R 00 00 01 00 +T 16 00 00 00 75 20 49 50 63 70 2c 25 36 75 20 +R 00 00 01 00 +T 21 00 00 00 55 6e 6b 6e 6f 77 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0005_7313__09_09pid_20_25d_2c.rel b/src/nos/lib/messages_lib/0005_7313__09_09pid_20_25d_2c.rel new file mode 100644 index 00000000..be19a126 --- /dev/null +++ b/src/nos/lib/messages_lib/0005_7313__09_09pid_20_25d_2c.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0005_7313__09_09pid_20_25d_2c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 09 09 70 69 64 20 25 64 2c +R 00 00 01 00 +T 0b 00 00 00 20 63 61 6c 6c 20 25 64 2c 20 72 +R 00 00 01 00 +T 16 00 00 00 65 74 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0006_bdbf__09_2510ld_20Cmp_2c.rel b/src/nos/lib/messages_lib/0006_bdbf__09_2510ld_20Cmp_2c.rel new file mode 100644 index 00000000..fb971a1a --- /dev/null +++ b/src/nos/lib/messages_lib/0006_bdbf__09_2510ld_20Cmp_2c.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 35 flags 0 +S ___0006_bdbf__09_2510ld_20Cmp_2c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 33 00 09 25 31 30 6c 64 20 43 6d +R 00 00 01 00 +T 0b 00 00 00 70 2c 20 25 31 30 6c 64 20 55 6e +R 00 00 01 00 +T 16 00 00 00 63 6d 70 2c 20 25 31 30 6c 64 20 +R 00 00 01 00 +T 21 00 00 00 41 73 49 73 2c 20 25 31 30 6c 64 +R 00 00 01 00 +T 2c 00 00 00 20 4e 6f 74 54 43 50 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0007_d27a__09_2510ld_20Cmp_2c.rel b/src/nos/lib/messages_lib/0007_d27a__09_2510ld_20Cmp_2c.rel new file mode 100644 index 00000000..8bd83b8c --- /dev/null +++ b/src/nos/lib/messages_lib/0007_d27a__09_2510ld_20Cmp_2c.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 35 flags 0 +S ___0007_d27a__09_2510ld_20Cmp_2c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 33 00 09 25 31 30 6c 64 20 43 6d +R 00 00 01 00 +T 0b 00 00 00 70 2c 20 25 31 30 6c 64 20 55 6e +R 00 00 01 00 +T 16 00 00 00 63 6d 70 2c 20 25 31 30 6c 64 20 +R 00 00 01 00 +T 21 00 00 00 42 61 64 2c 20 20 25 31 30 6c 64 +R 00 00 01 00 +T 2c 00 00 00 20 54 6f 73 73 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0008_c900__09_2510ld_20Search.rel b/src/nos/lib/messages_lib/0008_c900__09_2510ld_20Search.rel new file mode 100644 index 00000000..76cf5e86 --- /dev/null +++ b/src/nos/lib/messages_lib/0008_c900__09_2510ld_20Search.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___0008_c900__09_2510ld_20Search Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 09 25 31 30 6c 64 20 53 65 +R 00 00 01 00 +T 0b 00 00 00 61 72 63 68 65 73 2c 20 25 31 30 +R 00 00 01 00 +T 16 00 00 00 6c 64 20 4d 69 73 73 65 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0009_2913__09_25ld.rel b/src/nos/lib/messages_lib/0009_2913__09_25ld.rel new file mode 100644 index 00000000..a8b0770d --- /dev/null +++ b/src/nos/lib/messages_lib/0009_2913__09_25ld.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0009_2913__09_25ld Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 09 25 6c 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/000a_1c3a__09_25p_09_25u_09_2.rel b/src/nos/lib/messages_lib/000a_1c3a__09_25p_09_25u_09_2.rel new file mode 100644 index 00000000..2279cc0f --- /dev/null +++ b/src/nos/lib/messages_lib/000a_1c3a__09_25p_09_25u_09_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___000a_1c3a__09_25p_09_25u_09_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 09 25 70 09 25 75 09 25 63 +R 00 00 01 00 +T 0b 00 00 00 25 63 25 63 09 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/000b_b9ba__09_25s.rel b/src/nos/lib/messages_lib/000b_b9ba__09_25s.rel new file mode 100644 index 00000000..7b1fdf28 --- /dev/null +++ b/src/nos/lib/messages_lib/000b_b9ba__09_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___000b_b9ba__09_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 09 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/000c_21cf__09_25s_09_25s_09_2.rel b/src/nos/lib/messages_lib/000c_21cf__09_25s_09_25s_09_2.rel new file mode 100644 index 00000000..a31ec976 --- /dev/null +++ b/src/nos/lib/messages_lib/000c_21cf__09_25s_09_25s_09_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___000c_21cf__09_25s_09_25s_09_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 09 25 73 09 25 73 09 25 6c +R 00 00 01 00 +T 0b 00 00 00 75 09 25 6c 75 09 25 6c 75 09 25 +R 00 00 01 00 +T 16 00 00 00 6c 75 09 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/000d_1d7d__09_25s_09_25s_0a.rel b/src/nos/lib/messages_lib/000d_1d7d__09_25s_09_25s_0a.rel new file mode 100644 index 00000000..db0a25a8 --- /dev/null +++ b/src/nos/lib/messages_lib/000d_1d7d__09_25s_09_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___000d_1d7d__09_25s_09_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 09 25 73 09 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/000e_b532__09_25s_0a.rel b/src/nos/lib/messages_lib/000e_b532__09_25s_0a.rel new file mode 100644 index 00000000..1e0e2ec0 --- /dev/null +++ b/src/nos/lib/messages_lib/000e_b532__09_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___000e_b532__09_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 09 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/000f_26e5__09_25u_09_25s_0a.rel b/src/nos/lib/messages_lib/000f_26e5__09_25u_09_25s_0a.rel new file mode 100644 index 00000000..0ea5581a --- /dev/null +++ b/src/nos/lib/messages_lib/000f_26e5__09_25u_09_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___000f_26e5__09_25u_09_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 09 25 75 09 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0010_7e01__09_28open_20for_20.rel b/src/nos/lib/messages_lib/0010_7e01__09_28open_20for_20.rel new file mode 100644 index 00000000..cac9853c --- /dev/null +++ b/src/nos/lib/messages_lib/0010_7e01__09_28open_20for_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0010_7e01__09_28open_20for_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 09 28 6f 70 65 6e 20 66 6f +R 00 00 01 00 +T 0b 00 00 00 72 20 25 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0011_d62d__09_3c_25u_3e.rel b/src/nos/lib/messages_lib/0011_d62d__09_3c_25u_3e.rel new file mode 100644 index 00000000..0bfb5cc8 --- /dev/null +++ b/src/nos/lib/messages_lib/0011_d62d__09_3c_25u_3e.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0011_d62d__09_3c_25u_3e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 09 3c 25 75 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0012_9f29__09IN.rel b/src/nos/lib/messages_lib/0012_9f29__09IN.rel new file mode 100644 index 00000000..645d7bb4 --- /dev/null +++ b/src/nos/lib/messages_lib/0012_9f29__09IN.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0012_9f29__09IN Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 09 49 4e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0013_53f6__09Local_3a_09.rel b/src/nos/lib/messages_lib/0013_53f6__09Local_3a_09.rel new file mode 100644 index 00000000..324c1343 --- /dev/null +++ b/src/nos/lib/messages_lib/0013_53f6__09Local_3a_09.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0013_53f6__09Local_3a_09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 09 4c 6f 63 61 6c 3a 09 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0014_a684__09Remote_3a_09.rel b/src/nos/lib/messages_lib/0014_a684__09Remote_3a_09.rel new file mode 100644 index 00000000..7169e83e --- /dev/null +++ b/src/nos/lib/messages_lib/0014_a684__09Remote_3a_09.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0014_a684__09Remote_3a_09 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 09 52 65 6d 6f 74 65 3a 09 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0015_e0e0__09Urgent_20pointer.rel b/src/nos/lib/messages_lib/0015_e0e0__09Urgent_20pointer.rel new file mode 100644 index 00000000..ec506f6b --- /dev/null +++ b/src/nos/lib/messages_lib/0015_e0e0__09Urgent_20pointer.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0015_e0e0__09Urgent_20pointer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 09 55 72 67 65 6e 74 20 70 +R 00 00 01 00 +T 0b 00 00 00 6f 69 6e 74 65 72 3a 20 30 78 25 +R 00 00 01 00 +T 16 00 00 00 30 32 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0016_c0f0__09changes_3a_200x_.rel b/src/nos/lib/messages_lib/0016_c0f0__09changes_3a_200x_.rel new file mode 100644 index 00000000..5b60f80f --- /dev/null +++ b/src/nos/lib/messages_lib/0016_c0f0__09changes_3a_200x_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0016_c0f0__09changes_3a_200x_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 09 63 68 61 6e 67 65 73 3a +R 00 00 01 00 +T 0b 00 00 00 20 30 78 25 30 32 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0017_6a8d__09connection_200x_.rel b/src/nos/lib/messages_lib/0017_6a8d__09connection_200x_.rel new file mode 100644 index 00000000..9451da56 --- /dev/null +++ b/src/nos/lib/messages_lib/0017_6a8d__09connection_200x_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___0017_6a8d__09connection_200x_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 09 63 6f 6e 6e 65 63 74 69 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 20 30 78 25 30 32 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0018_a28a__09connection_20ID_.rel b/src/nos/lib/messages_lib/0018_a28a__09connection_20ID_.rel new file mode 100644 index 00000000..5b4d7a48 --- /dev/null +++ b/src/nos/lib/messages_lib/0018_a28a__09connection_20ID_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0018_a28a__09connection_20ID_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 09 63 6f 6e 6e 65 63 74 69 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 20 49 44 20 3d 20 25 64 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0019_cf72__09delta_20ACK_20an.rel b/src/nos/lib/messages_lib/0019_cf72__09delta_20ACK_20an.rel new file mode 100644 index 00000000..cf07318c --- /dev/null +++ b/src/nos/lib/messages_lib/0019_cf72__09delta_20ACK_20an.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36 flags 0 +S ___0019_cf72__09delta_20ACK_20an Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 34 00 09 64 65 6c 74 61 20 41 43 +R 00 00 01 00 +T 0b 00 00 00 4b 20 61 6e 64 20 64 65 6c 74 61 +R 00 00 01 00 +T 16 00 00 00 20 53 45 51 20 69 6d 70 6c 69 65 +R 00 00 01 00 +T 21 00 00 00 64 20 62 79 20 6c 65 6e 67 74 68 +R 00 00 01 00 +T 2c 00 00 00 20 6f 66 20 64 61 74 61 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/001a_8077__09delta_20ACK_3a_2.rel b/src/nos/lib/messages_lib/001a_8077__09delta_20ACK_3a_2.rel new file mode 100644 index 00000000..09cabfc9 --- /dev/null +++ b/src/nos/lib/messages_lib/001a_8077__09delta_20ACK_3a_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___001a_8077__09delta_20ACK_3a_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 09 64 65 6c 74 61 20 41 43 +R 00 00 01 00 +T 0b 00 00 00 4b 3a 20 30 78 25 30 32 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/001b_4a2b__09delta_20ID_3a_20.rel b/src/nos/lib/messages_lib/001b_4a2b__09delta_20ID_3a_20.rel new file mode 100644 index 00000000..80225c22 --- /dev/null +++ b/src/nos/lib/messages_lib/001b_4a2b__09delta_20ID_3a_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___001b_4a2b__09delta_20ID_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 09 64 65 6c 74 61 20 49 44 +R 00 00 01 00 +T 0b 00 00 00 3a 20 30 78 25 30 32 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/001c_7710__09delta_20SEQ_20im.rel b/src/nos/lib/messages_lib/001c_7710__09delta_20SEQ_20im.rel new file mode 100644 index 00000000..5b0d63ff --- /dev/null +++ b/src/nos/lib/messages_lib/001c_7710__09delta_20SEQ_20im.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___001c_7710__09delta_20SEQ_20im Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 09 64 65 6c 74 61 20 53 45 +R 00 00 01 00 +T 0b 00 00 00 51 20 69 6d 70 6c 69 65 64 20 62 +R 00 00 01 00 +T 16 00 00 00 79 20 6c 65 6e 67 74 68 20 6f 66 +R 00 00 01 00 +T 21 00 00 00 20 64 61 74 61 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/001d_a966__09delta_20SEQ_3a_2.rel b/src/nos/lib/messages_lib/001d_a966__09delta_20SEQ_3a_2.rel new file mode 100644 index 00000000..0ae54f73 --- /dev/null +++ b/src/nos/lib/messages_lib/001d_a966__09delta_20SEQ_3a_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___001d_a966__09delta_20SEQ_3a_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 09 64 65 6c 74 61 20 53 45 +R 00 00 01 00 +T 0b 00 00 00 51 3a 20 30 78 25 30 32 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/001e_f05a__09delta_20WINDOW_3.rel b/src/nos/lib/messages_lib/001e_f05a__09delta_20WINDOW_3.rel new file mode 100644 index 00000000..ac941064 --- /dev/null +++ b/src/nos/lib/messages_lib/001e_f05a__09delta_20WINDOW_3.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___001e_f05a__09delta_20WINDOW_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 09 64 65 6c 74 61 20 57 49 +R 00 00 01 00 +T 0b 00 00 00 4e 44 4f 57 3a 20 30 78 25 30 32 +R 00 00 01 00 +T 16 00 00 00 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/001f_ad18__09increment_20ID_0.rel b/src/nos/lib/messages_lib/001f_ad18__09increment_20ID_0.rel new file mode 100644 index 00000000..63c7418a --- /dev/null +++ b/src/nos/lib/messages_lib/001f_ad18__09increment_20ID_0.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___001f_ad18__09increment_20ID_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 09 69 6e 63 72 65 6d 65 6e +R 00 00 01 00 +T 0b 00 00 00 74 20 49 44 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0020_13bc__09local_20IP_20add.rel b/src/nos/lib/messages_lib/0020_13bc__09local_20IP_20add.rel new file mode 100644 index 00000000..bbb051a5 --- /dev/null +++ b/src/nos/lib/messages_lib/0020_13bc__09local_20IP_20add.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___0020_13bc__09local_20IP_20add Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 09 6c 6f 63 61 6c 20 49 50 +R 00 00 01 00 +T 0b 00 00 00 20 61 64 64 72 65 73 73 3a 20 25 +R 00 00 01 00 +T 16 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0021_efeb__09pid_20_25d_2c_20.rel b/src/nos/lib/messages_lib/0021_efeb__09pid_20_25d_2c_20.rel new file mode 100644 index 00000000..54180da0 --- /dev/null +++ b/src/nos/lib/messages_lib/0021_efeb__09pid_20_25d_2c_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0021_efeb__09pid_20_25d_2c_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 09 70 69 64 20 25 64 2c 20 +R 00 00 01 00 +T 0b 00 00 00 63 61 6c 6c 20 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0022_a0dd__0a.rel b/src/nos/lib/messages_lib/0022_a0dd__0a.rel new file mode 100644 index 00000000..1c7fafbb --- /dev/null +++ b/src/nos/lib/messages_lib/0022_a0dd__0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4 flags 0 +S ___0022_a0dd__0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 02 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0023_f279__0a_20_20_20_20.rel b/src/nos/lib/messages_lib/0023_f279__0a_20_20_20_20.rel new file mode 100644 index 00000000..6ee5b2ea --- /dev/null +++ b/src/nos/lib/messages_lib/0023_f279__0a_20_20_20_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0023_f279__0a_20_20_20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 0a 20 20 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0024_f170__0a_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0024_f170__0a_20_20_20_20_20_.rel new file mode 100644 index 00000000..23b02ea9 --- /dev/null +++ b/src/nos/lib/messages_lib/0024_f170__0a_20_20_20_20_20_.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0024_f170__0a_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 0a 20 20 20 20 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0025_da94__0a_25s_20_2d_20_25.rel b/src/nos/lib/messages_lib/0025_da94__0a_25s_20_2d_20_25.rel new file mode 100644 index 00000000..ac01e65b --- /dev/null +++ b/src/nos/lib/messages_lib/0025_da94__0a_25s_20_2d_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0025_da94__0a_25s_20_2d_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 0a 25 73 20 2d 20 25 73 20 +R 00 00 01 00 +T 0b 00 00 00 72 65 63 76 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0026_e088__0a_25s_20_2d_20_25.rel b/src/nos/lib/messages_lib/0026_e088__0a_25s_20_2d_20_25.rel new file mode 100644 index 00000000..4f49dc46 --- /dev/null +++ b/src/nos/lib/messages_lib/0026_e088__0a_25s_20_2d_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0026_e088__0a_25s_20_2d_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 0a 25 73 20 2d 20 25 73 20 +R 00 00 01 00 +T 0b 00 00 00 73 65 6e 74 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0027_c061__0a_2a_2a_2a_20Loca.rel b/src/nos/lib/messages_lib/0027_c061__0a_2a_2a_2a_20Loca.rel new file mode 100644 index 00000000..c70e717d --- /dev/null +++ b/src/nos/lib/messages_lib/0027_c061__0a_2a_2a_2a_20Loca.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___0027_c061__0a_2a_2a_2a_20Loca Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 00 0a 2a 2a 2a 20 4c 6f 63 61 +R 00 00 01 00 +T 0b 00 00 00 6c 20 6d 61 69 6c 62 6f 78 20 6c +R 00 00 01 00 +T 16 00 00 00 6f 63 6b 65 64 2c 20 6e 65 77 20 +R 00 00 01 00 +T 21 00 00 00 6d 61 69 6c 20 69 6e 20 66 69 6c +R 00 00 01 00 +T 2c 00 00 00 65 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0028_932c__0a_2a_2a_2a_20Unab.rel b/src/nos/lib/messages_lib/0028_932c__0a_2a_2a_2a_20Unab.rel new file mode 100644 index 00000000..d2e28131 --- /dev/null +++ b/src/nos/lib/messages_lib/0028_932c__0a_2a_2a_2a_20Unab.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3a flags 0 +S ___0028_932c__0a_2a_2a_2a_20Unab Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 38 00 0a 2a 2a 2a 20 55 6e 61 62 +R 00 00 01 00 +T 0b 00 00 00 6c 65 20 74 6f 20 6f 70 65 6e 20 +R 00 00 01 00 +T 16 00 00 00 6c 6f 63 61 6c 20 6d 61 69 6c 62 +R 00 00 01 00 +T 21 00 00 00 6f 78 2c 20 6e 65 77 20 6d 61 69 +R 00 00 01 00 +T 2c 00 00 00 6c 20 69 6e 20 66 69 6c 65 20 25 +R 00 00 01 00 +T 37 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0029_2592__0a_2a_2a_2a_2a_2a_.rel b/src/nos/lib/messages_lib/0029_2592__0a_2a_2a_2a_2a_2a_.rel new file mode 100644 index 00000000..3686149f --- /dev/null +++ b/src/nos/lib/messages_lib/0029_2592__0a_2a_2a_2a_2a_2a_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___0029_2592__0a_2a_2a_2a_2a_2a_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 0a 2a 2a 2a 2a 2a 2a 2a 20 +R 00 00 01 00 +T 0b 00 00 00 72 61 77 20 70 61 63 6b 65 74 20 +R 00 00 01 00 +T 16 00 00 00 64 75 6d 70 20 28 25 73 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/002a_0887__0aCurrent_20remote.rel b/src/nos/lib/messages_lib/002a_0887__0aCurrent_20remote.rel new file mode 100644 index 00000000..c50e92c6 --- /dev/null +++ b/src/nos/lib/messages_lib/002a_0887__0aCurrent_20remote.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___002a_0887__0aCurrent_20remote Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 0a 43 75 72 72 65 6e 74 20 +R 00 00 01 00 +T 0b 00 00 00 72 65 6d 6f 74 65 20 75 73 65 72 +R 00 00 01 00 +T 16 00 00 00 73 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/002b_ebd8__0aReclaimation_20a.rel b/src/nos/lib/messages_lib/002b_ebd8__0aReclaimation_20a.rel new file mode 100644 index 00000000..c252fc4a --- /dev/null +++ b/src/nos/lib/messages_lib/002b_ebd8__0aReclaimation_20a.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___002b_ebd8__0aReclaimation_20a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 0a 52 65 63 6c 61 69 6d 61 +R 00 00 01 00 +T 0b 00 00 00 74 69 6f 6e 20 61 64 64 72 65 73 +R 00 00 01 00 +T 16 00 00 00 73 20 71 75 65 75 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/002c_c546__0aUsed_20address_2.rel b/src/nos/lib/messages_lib/002c_c546__0aUsed_20address_2.rel new file mode 100644 index 00000000..bc83237b --- /dev/null +++ b/src/nos/lib/messages_lib/002c_c546__0aUsed_20address_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___002c_c546__0aUsed_20address_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 0a 55 73 65 64 20 61 64 64 +R 00 00 01 00 +T 0b 00 00 00 72 65 73 73 20 71 75 65 75 65 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/002d_e8fc__0apanic_3a_20.rel b/src/nos/lib/messages_lib/002d_e8fc__0apanic_3a_20.rel new file mode 100644 index 00000000..f389ebae --- /dev/null +++ b/src/nos/lib/messages_lib/002d_e8fc__0apanic_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___002d_e8fc__0apanic_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 0a 70 61 6e 69 63 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/002e_4403__20_0aend_0asize_20.rel b/src/nos/lib/messages_lib/002e_4403__20_0aend_0asize_20.rel new file mode 100644 index 00000000..addea193 --- /dev/null +++ b/src/nos/lib/messages_lib/002e_4403__20_0aend_0asize_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___002e_4403__20_0aend_0asize_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 20 0a 65 6e 64 0a 73 69 7a +R 00 00 01 00 +T 0b 00 00 00 65 20 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/002f_f289__20_20.rel b/src/nos/lib/messages_lib/002f_f289__20_20.rel new file mode 100644 index 00000000..dcf11139 --- /dev/null +++ b/src/nos/lib/messages_lib/002f_f289__20_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___002f_f289__20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0030_3839__20_20_20.rel b/src/nos/lib/messages_lib/0030_3839__20_20_20.rel new file mode 100644 index 00000000..37bbc5ea --- /dev/null +++ b/src/nos/lib/messages_lib/0030_3839__20_20_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0030_3839__20_20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0031_8d78__20_20_20_20.rel b/src/nos/lib/messages_lib/0031_8d78__20_20_20_20.rel new file mode 100644 index 00000000..085fe682 --- /dev/null +++ b/src/nos/lib/messages_lib/0031_8d78__20_20_20_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0031_8d78__20_20_20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 20 20 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0032_de40__20_20_20_20_20.rel b/src/nos/lib/messages_lib/0032_de40__20_20_20_20_20.rel new file mode 100644 index 00000000..392e8c8a --- /dev/null +++ b/src/nos/lib/messages_lib/0032_de40__20_20_20_20_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0032_de40__20_20_20_20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 20 20 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0033_3e02__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0033_3e02__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..eef94809 --- /dev/null +++ b/src/nos/lib/messages_lib/0033_3e02__20_20_20_20_20_20_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27 flags 0 +S ___0033_3e02__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 25 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 20 25 33 75 20 20 20 25 33 +R 00 00 01 00 +T 16 00 00 00 64 20 20 25 35 64 20 20 25 6c 75 +R 00 00 01 00 +T 21 00 00 00 2f 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0034_0534__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0034_0534__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..9fe08421 --- /dev/null +++ b/src/nos/lib/messages_lib/0034_0534__20_20_20_20_20_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0034_0534__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 4c 69 6e 6b 20 61 64 64 72 +R 00 00 01 00 +T 16 00 00 00 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0035_3fef__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0035_3fef__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..a0d10f37 --- /dev/null +++ b/src/nos/lib/messages_lib/0035_3fef__20_20_20_20_20_20_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___0035_3fef__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 6f 75 74 70 75 74 20 66 6f +R 00 00 01 00 +T 16 00 00 00 72 77 61 72 64 20 74 6f 20 25 73 +R 00 00 01 00 +T 21 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0036_3164__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0036_3164__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..6880536e --- /dev/null +++ b/src/nos/lib/messages_lib/0036_3164__20_20_20_20_20_20_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2b flags 0 +S ___0036_3164__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 29 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 72 65 63 76 3a 20 69 70 20 +R 00 00 01 00 +T 16 00 00 00 25 6c 75 20 74 6f 74 20 25 6c 75 +R 00 00 01 00 +T 21 00 00 00 20 69 64 6c 65 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0037_c6d7__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0037_c6d7__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..b98c75ce --- /dev/null +++ b/src/nos/lib/messages_lib/0037_c6d7__20_20_20_20_20_20_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___0037_c6d7__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 73 65 6e 74 3a 20 69 70 20 +R 00 00 01 00 +T 16 00 00 00 25 6c 75 20 74 6f 74 20 25 6c 75 +R 00 00 01 00 +T 21 00 00 00 20 69 64 6c 65 20 25 73 20 71 6c +R 00 00 01 00 +T 2c 00 00 00 65 6e 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0038_9d57__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0038_9d57__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..b580fc5d --- /dev/null +++ b/src/nos/lib/messages_lib/0038_9d57__20_20_20_20_20_20_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36 flags 0 +S ___0038_9d57__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 34 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 74 72 61 63 65 20 30 78 25 +R 00 00 01 00 +T 16 00 00 00 78 20 6e 65 74 6d 61 73 6b 20 30 +R 00 00 01 00 +T 21 00 00 00 78 25 30 38 6c 78 20 62 72 6f 61 +R 00 00 01 00 +T 2c 00 00 00 64 63 61 73 74 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0039_d46e__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0039_d46e__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..cba07d45 --- /dev/null +++ b/src/nos/lib/messages_lib/0039_d46e__20_20_20_20_20_20_.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3a flags 0 +S ___0039_d46e__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 38 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 2d 20 74 6f 6f 62 69 67 3a 20 +R 00 00 01 00 +T 16 00 00 00 20 25 2d 35 64 20 20 64 63 64 6c +R 00 00 01 00 +T 21 00 00 00 6f 73 73 3a 20 25 2d 35 64 20 20 +R 00 00 01 00 +T 2c 00 00 00 72 78 6f 72 75 6e 3a 20 25 2d 35 +R 00 00 01 00 +T 37 00 00 00 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/003a_f37c__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/003a_f37c__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..6a03ae33 --- /dev/null +++ b/src/nos/lib/messages_lib/003a_f37c__20_20_20_20_20_20_.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 53 flags 0 +S ___003a_f37c__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 51 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 55 6e 61 63 6b 20 20 20 20 20 4e +R 00 00 01 00 +T 16 00 00 00 65 78 74 20 52 65 73 65 6e 74 20 +R 00 00 01 00 +T 21 00 00 00 43 57 69 6e 64 20 54 68 72 73 68 +R 00 00 01 00 +T 2c 00 00 00 20 20 57 69 6e 64 20 20 4d 53 53 +R 00 00 01 00 +T 37 00 00 00 20 51 75 65 75 65 20 20 54 68 72 +R 00 00 01 00 +T 42 00 00 00 75 70 75 74 20 20 20 20 20 20 54 +R 00 00 01 00 +T 4d 00 00 00 6f 74 61 6c 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/003b_5dd1__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/003b_5dd1__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..eb76d8e2 --- /dev/null +++ b/src/nos/lib/messages_lib/003b_5dd1__20_20_20_20_20_20_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2f flags 0 +S ___003b_5dd1__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2d 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 63 6f 6e 6e 20 61 63 6b 3a 20 75 +R 00 00 01 00 +T 16 00 00 00 72 20 63 6b 74 20 25 64 2f 25 64 +R 00 00 01 00 +T 21 00 00 00 20 6d 79 20 63 6b 74 20 25 64 2f +R 00 00 01 00 +T 2c 00 00 00 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/003c_0406__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/003c_0406__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..8e3fec75 --- /dev/null +++ b/src/nos/lib/messages_lib/003c_0406__20_20_20_20_20_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___003c_0406__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 63 6f 6e 6e 20 72 71 73 74 3a 20 +R 00 00 01 00 +T 16 00 00 00 63 6b 74 20 25 64 2f 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/003d_da67__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/003d_da67__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..c6c99043 --- /dev/null +++ b/src/nos/lib/messages_lib/003d_da67__20_20_20_20_20_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___003d_da67__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 64 69 73 63 20 61 63 6b 3a 20 63 +R 00 00 01 00 +T 16 00 00 00 6b 74 20 25 64 2f 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/003e_f638__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/003e_f638__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..1eac21d0 --- /dev/null +++ b/src/nos/lib/messages_lib/003e_f638__20_20_20_20_20_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___003e_f638__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 64 69 73 63 3a 20 63 6b 74 20 25 +R 00 00 01 00 +T 16 00 00 00 64 2f 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/003f_74c7__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/003f_74c7__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..bccc0a4b --- /dev/null +++ b/src/nos/lib/messages_lib/003f_74c7__20_20_20_20_20_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___003f_74c7__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 69 6e 66 6f 20 61 63 6b 3a 20 63 +R 00 00 01 00 +T 16 00 00 00 6b 74 20 25 64 2f 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0040_f10d__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0040_f10d__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..7ec69dd9 --- /dev/null +++ b/src/nos/lib/messages_lib/0040_f10d__20_20_20_20_20_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0040_f10d__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 69 6e 66 6f 3a 20 63 6b 74 20 25 +R 00 00 01 00 +T 16 00 00 00 64 2f 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0041_d02b__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0041_d02b__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..56ec08a0 --- /dev/null +++ b/src/nos/lib/messages_lib/0041_d02b__20_20_20_20_20_20_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___0041_d02b__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 70 72 6f 74 6f 63 6f 6c 20 66 61 +R 00 00 01 00 +T 16 00 00 00 6d 69 6c 79 20 25 78 2c 20 70 72 +R 00 00 01 00 +T 21 00 00 00 6f 74 6f 20 25 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0042_0105__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0042_0105__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..ae8166e6 --- /dev/null +++ b/src/nos/lib/messages_lib/0042_0105__20_20_20_20_20_20_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___0042_0105__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 75 6e 6b 6e 6f 77 6e 20 74 72 61 +R 00 00 01 00 +T 16 00 00 00 6e 73 70 6f 72 74 20 74 79 70 65 +R 00 00 01 00 +T 21 00 00 00 20 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0043_c46d__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0043_c46d__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..ed64ddd3 --- /dev/null +++ b/src/nos/lib/messages_lib/0043_c46d__20_20_20_20_20_20_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0043_c46d__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 20 20 20 20 20 20 20 20 25 +R 00 00 01 00 +T 0b 00 00 00 31 32 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0044_3a28__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0044_3a28__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..062c657a --- /dev/null +++ b/src/nos/lib/messages_lib/0044_3a28__20_20_20_20_20_20_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___0044_3a28__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 20 20 20 20 20 20 20 61 78 +R 00 00 01 00 +T 0b 00 00 00 32 35 20 72 6f 75 74 65 20 64 72 +R 00 00 01 00 +T 16 00 00 00 6f 70 20 3c 74 61 72 67 65 74 3e +R 00 00 01 00 +T 21 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0045_48df__20_20_20_20_20_20_.rel b/src/nos/lib/messages_lib/0045_48df__20_20_20_20_20_20_.rel new file mode 100644 index 00000000..fd253423 --- /dev/null +++ b/src/nos/lib/messages_lib/0045_48df__20_20_20_20_20_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0045_48df__20_20_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 20 20 20 20 20 20 20 64 69 +R 00 00 01 00 +T 0b 00 00 00 61 6c 20 3c 69 66 61 63 65 3e 20 +R 00 00 01 00 +T 16 00 00 00 30 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0046_da1e__20_20_20_20_20_20s.rel b/src/nos/lib/messages_lib/0046_da1e__20_20_20_20_20_20s.rel new file mode 100644 index 00000000..c489cb14 --- /dev/null +++ b/src/nos/lib/messages_lib/0046_da1e__20_20_20_20_20_20s.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 45 flags 0 +S ___0046_da1e__20_20_20_20_20_20s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 43 00 20 20 20 20 20 20 73 65 6e +R 00 00 01 00 +T 0b 00 00 00 74 20 20 20 20 20 20 72 63 76 64 +R 00 00 01 00 +T 16 00 00 00 20 20 20 20 25 20 20 20 20 20 72 +R 00 00 01 00 +T 21 00 00 00 74 74 20 20 20 20 20 61 76 67 20 +R 00 00 01 00 +T 2c 00 00 00 20 20 20 6d 64 65 76 20 20 20 20 +R 00 00 01 00 +T 37 00 00 00 20 6d 61 78 20 20 20 20 20 6d 69 +R 00 00 01 00 +T 42 00 00 00 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0047_3800__20_20_20_20_20_26A.rel b/src/nos/lib/messages_lib/0047_3800__20_20_20_20_20_26A.rel new file mode 100644 index 00000000..f96f5ba4 --- /dev/null +++ b/src/nos/lib/messages_lib/0047_3800__20_20_20_20_20_26A.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S ___0047_3800__20_20_20_20_20_26A Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 35 00 20 20 20 20 20 26 41 58 42 +R 00 00 01 00 +T 0b 00 00 00 20 52 65 6d 6f 74 65 20 20 20 52 +R 00 00 01 00 +T 16 00 00 00 42 20 56 28 53 29 20 56 28 52 29 +R 00 00 01 00 +T 21 00 00 00 20 55 6e 61 63 6b 20 50 20 52 65 +R 00 00 01 00 +T 2c 00 00 00 74 72 79 20 53 74 61 74 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0048_0e60__20_20_20_20_20_28_.rel b/src/nos/lib/messages_lib/0048_0e60__20_20_20_20_20_28_.rel new file mode 100644 index 00000000..ad4cdef7 --- /dev/null +++ b/src/nos/lib/messages_lib/0048_0e60__20_20_20_20_20_28_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___0048_0e60__20_20_20_20_20_28_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 20 20 20 20 20 28 25 32 75 +R 00 00 01 00 +T 0b 00 00 00 29 25 2d 32 30 73 25 31 30 6c 75 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0049_d7d4__20_20_20_20_20Broa.rel b/src/nos/lib/messages_lib/0049_d7d4__20_20_20_20_20Broa.rel new file mode 100644 index 00000000..da7cf6fc --- /dev/null +++ b/src/nos/lib/messages_lib/0049_d7d4__20_20_20_20_20Broa.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___0049_d7d4__20_20_20_20_20Broa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 20 20 20 20 20 42 72 6f 61 +R 00 00 01 00 +T 0b 00 00 00 64 63 61 73 74 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/004a_f5a8__20_20_20_20_20Defa.rel b/src/nos/lib/messages_lib/004a_f5a8__20_20_20_20_20Defa.rel new file mode 100644 index 00000000..188d81d7 --- /dev/null +++ b/src/nos/lib/messages_lib/004a_f5a8__20_20_20_20_20Defa.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___004a_f5a8__20_20_20_20_20Defa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 20 20 20 20 20 44 65 66 61 +R 00 00 01 00 +T 0b 00 00 00 75 6c 74 20 67 61 74 65 77 61 79 +R 00 00 01 00 +T 16 00 00 00 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/004b_de7b__20_20_20_20_20Host.rel b/src/nos/lib/messages_lib/004b_de7b__20_20_20_20_20Host.rel new file mode 100644 index 00000000..c7945bdb --- /dev/null +++ b/src/nos/lib/messages_lib/004b_de7b__20_20_20_20_20Host.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___004b_de7b__20_20_20_20_20Host Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 20 20 20 20 20 48 6f 73 74 +R 00 00 01 00 +T 0b 00 00 00 6e 61 6d 65 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/004c_a271__20_20_20_20_20INF.rel b/src/nos/lib/messages_lib/004c_a271__20_20_20_20_20INF.rel new file mode 100644 index 00000000..8d200708 --- /dev/null +++ b/src/nos/lib/messages_lib/004c_a271__20_20_20_20_20INF.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___004c_a271__20_20_20_20_20INF Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 20 20 20 20 20 49 4e 46 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/004d_1775__20_20_20_20_20IP_2.rel b/src/nos/lib/messages_lib/004d_1775__20_20_20_20_20IP_2.rel new file mode 100644 index 00000000..a80ec815 --- /dev/null +++ b/src/nos/lib/messages_lib/004d_1775__20_20_20_20_20IP_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___004d_1775__20_20_20_20_20IP_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 20 20 20 20 20 49 50 20 61 +R 00 00 01 00 +T 0b 00 00 00 64 64 72 65 73 73 3a 20 25 73 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/004e_7765__20_20_20_20_20Name.rel b/src/nos/lib/messages_lib/004e_7765__20_20_20_20_20Name.rel new file mode 100644 index 00000000..961dc09e --- /dev/null +++ b/src/nos/lib/messages_lib/004e_7765__20_20_20_20_20Name.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___004e_7765__20_20_20_20_20Name Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 20 20 20 20 20 4e 61 6d 65 +R 00 00 01 00 +T 0b 00 00 00 73 65 72 76 65 72 3a 20 25 73 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/004f_6879__20_20_20_20_20Subn.rel b/src/nos/lib/messages_lib/004f_6879__20_20_20_20_20Subn.rel new file mode 100644 index 00000000..3acaf5fd --- /dev/null +++ b/src/nos/lib/messages_lib/004f_6879__20_20_20_20_20Subn.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___004f_6879__20_20_20_20_20Subn Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 20 20 20 20 20 53 75 62 6e +R 00 00 01 00 +T 0b 00 00 00 65 74 20 6d 61 73 6b 3a 20 25 73 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0050_dac6__20_20_20_20_25_2d4.rel b/src/nos/lib/messages_lib/0050_dac6__20_20_20_20_25_2d4.rel new file mode 100644 index 00000000..4b2fe78d --- /dev/null +++ b/src/nos/lib/messages_lib/0050_dac6__20_20_20_20_25_2d4.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___0050_dac6__20_20_20_20_25_2d4 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 20 20 20 20 25 2d 34 64 25 +R 00 00 01 00 +T 0b 00 00 00 35 64 20 25 2d 31 30 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0051_b576__20_20_20_20_2512s.rel b/src/nos/lib/messages_lib/0051_b576__20_20_20_20_2512s.rel new file mode 100644 index 00000000..f258ff73 --- /dev/null +++ b/src/nos/lib/messages_lib/0051_b576__20_20_20_20_2512s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0051_b576__20_20_20_20_2512s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 20 20 20 20 25 31 32 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0052_e5e6__20_20_20_20_253u_0.rel b/src/nos/lib/messages_lib/0052_e5e6__20_20_20_20_253u_0.rel new file mode 100644 index 00000000..2a60168c --- /dev/null +++ b/src/nos/lib/messages_lib/0052_e5e6__20_20_20_20_253u_0.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0052_e5e6__20_20_20_20_253u_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 20 20 20 20 25 33 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0053_ed50__20_20_20_20_25s_20.rel b/src/nos/lib/messages_lib/0053_ed50__20_20_20_20_25s_20.rel new file mode 100644 index 00000000..5db979d4 --- /dev/null +++ b/src/nos/lib/messages_lib/0053_ed50__20_20_20_20_25s_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___0053_ed50__20_20_20_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 20 20 20 20 25 73 20 20 69 +R 00 00 01 00 +T 0b 00 00 00 6e 20 75 73 65 20 62 79 20 25 73 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0054_3528__20_20_20_20_25s_20.rel b/src/nos/lib/messages_lib/0054_3528__20_20_20_20_25s_20.rel new file mode 100644 index 00000000..11e2684a --- /dev/null +++ b/src/nos/lib/messages_lib/0054_3528__20_20_20_20_25s_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0054_3528__20_20_20_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 20 20 20 20 25 73 20 20 69 +R 00 00 01 00 +T 0b 00 00 00 6e 20 75 73 65 20 62 79 20 25 73 +R 00 00 01 00 +T 16 00 00 00 3f 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0055_cbdf__20_20_20_20_25s_20.rel b/src/nos/lib/messages_lib/0055_cbdf__20_20_20_20_25s_20.rel new file mode 100644 index 00000000..86b2882c --- /dev/null +++ b/src/nos/lib/messages_lib/0055_cbdf__20_20_20_20_25s_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0055_cbdf__20_20_20_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 20 20 20 20 25 73 20 20 6c +R 00 00 01 00 +T 0b 00 00 00 61 73 74 20 75 73 65 64 20 62 79 +R 00 00 01 00 +T 16 00 00 00 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0056_f7f3__20_20_20_20_26UCB_.rel b/src/nos/lib/messages_lib/0056_f7f3__20_20_20_20_26UCB_.rel new file mode 100644 index 00000000..ea863009 --- /dev/null +++ b/src/nos/lib/messages_lib/0056_f7f3__20_20_20_20_26UCB_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___0056_f7f3__20_20_20_20_26UCB_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 20 20 20 20 26 55 43 42 20 +R 00 00 01 00 +T 0b 00 00 00 52 63 76 2d 51 20 20 4c 6f 63 61 +R 00 00 01 00 +T 16 00 00 00 6c 20 73 6f 63 6b 65 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0057_9bd9__20_20_20_20In_09TC.rel b/src/nos/lib/messages_lib/0057_9bd9__20_20_20_20In_09TC.rel new file mode 100644 index 00000000..46807cd1 --- /dev/null +++ b/src/nos/lib/messages_lib/0057_9bd9__20_20_20_20In_09TC.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 44 flags 0 +S ___0057_9bd9__20_20_20_20In_09TC Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 42 00 20 20 20 20 49 6e 09 54 43 +R 00 00 01 00 +T 0b 00 00 00 50 20 68 65 61 64 65 72 20 63 6f +R 00 00 01 00 +T 16 00 00 00 6d 70 72 65 73 73 69 6f 6e 20 65 +R 00 00 01 00 +T 21 00 00 00 6e 61 62 6c 65 64 3a 20 73 6c 6f +R 00 00 01 00 +T 2c 00 00 00 74 73 20 3d 20 25 64 2c 20 66 6c +R 00 00 01 00 +T 37 00 00 00 61 67 20 3d 20 30 78 25 30 32 78 +R 00 00 01 00 +T 42 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0058_7788__20_20_20_20Out_09T.rel b/src/nos/lib/messages_lib/0058_7788__20_20_20_20Out_09T.rel new file mode 100644 index 00000000..990c3bcd --- /dev/null +++ b/src/nos/lib/messages_lib/0058_7788__20_20_20_20Out_09T.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 45 flags 0 +S ___0058_7788__20_20_20_20Out_09T Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 43 00 20 20 20 20 4f 75 74 09 54 +R 00 00 01 00 +T 0b 00 00 00 43 50 20 68 65 61 64 65 72 20 63 +R 00 00 01 00 +T 16 00 00 00 6f 6d 70 72 65 73 73 69 6f 6e 20 +R 00 00 01 00 +T 21 00 00 00 65 6e 61 62 6c 65 64 3a 20 73 6c +R 00 00 01 00 +T 2c 00 00 00 6f 74 73 20 3d 20 25 64 2c 20 66 +R 00 00 01 00 +T 37 00 00 00 6c 61 67 20 3d 20 30 78 25 30 32 +R 00 00 01 00 +T 42 00 00 00 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0059_8f4d__20_20_20_20Record_.rel b/src/nos/lib/messages_lib/0059_8f4d__20_20_20_20Record_.rel new file mode 100644 index 00000000..e84a8948 --- /dev/null +++ b/src/nos/lib/messages_lib/0059_8f4d__20_20_20_20Record_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0059_8f4d__20_20_20_20Record_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 20 20 20 20 52 65 63 6f 72 +R 00 00 01 00 +T 0b 00 00 00 64 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/005a_eacd__20_20_20_20Upload_.rel b/src/nos/lib/messages_lib/005a_eacd__20_20_20_20Upload_.rel new file mode 100644 index 00000000..e0822d46 --- /dev/null +++ b/src/nos/lib/messages_lib/005a_eacd__20_20_20_20Upload_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___005a_eacd__20_20_20_20Upload_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 20 20 20 20 55 70 6c 6f 61 +R 00 00 01 00 +T 0b 00 00 00 64 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/005b_2da2__20_20_20_25s_0a.rel b/src/nos/lib/messages_lib/005b_2da2__20_20_20_25s_0a.rel new file mode 100644 index 00000000..c18a6f00 --- /dev/null +++ b/src/nos/lib/messages_lib/005b_2da2__20_20_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___005b_2da2__20_20_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 20 20 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/005c_ad66__20_20_20PUSH.rel b/src/nos/lib/messages_lib/005c_ad66__20_20_20PUSH.rel new file mode 100644 index 00000000..42bcef3f --- /dev/null +++ b/src/nos/lib/messages_lib/005c_ad66__20_20_20PUSH.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___005c_ad66__20_20_20PUSH Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 20 20 20 50 55 53 48 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/005d_9f3a__20_20_20TCP_20chec.rel b/src/nos/lib/messages_lib/005d_9f3a__20_20_20TCP_20chec.rel new file mode 100644 index 00000000..e1777e7b --- /dev/null +++ b/src/nos/lib/messages_lib/005d_9f3a__20_20_20TCP_20chec.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___005d_9f3a__20_20_20TCP_20chec Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 20 20 20 54 43 50 20 63 68 +R 00 00 01 00 +T 0b 00 00 00 65 63 6b 73 75 6d 3a 20 30 78 25 +R 00 00 01 00 +T 16 00 00 00 30 34 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/005e_5946__20_20_20connection.rel b/src/nos/lib/messages_lib/005e_5946__20_20_20connection.rel new file mode 100644 index 00000000..f368b0c4 --- /dev/null +++ b/src/nos/lib/messages_lib/005e_5946__20_20_20connection.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___005e_5946__20_20_20connection Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 20 20 20 63 6f 6e 6e 65 63 +R 00 00 01 00 +T 0b 00 00 00 74 69 6f 6e 3a 20 30 78 25 30 32 +R 00 00 01 00 +T 16 00 00 00 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/005f_f01f__20_20_3d_3d_3d_3d_.rel b/src/nos/lib/messages_lib/005f_f01f__20_20_3d_3d_3d_3d_.rel new file mode 100644 index 00000000..0a7a1075 --- /dev/null +++ b/src/nos/lib/messages_lib/005f_f01f__20_20_3d_3d_3d_3d_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___005f_f01f__20_20_3d_3d_3d_3d_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 20 20 3d 3d 3d 3d 3d 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 20 66 6f 6c 6c 6f 77 73 20 3d +R 00 00 01 00 +T 16 00 00 00 3d 3d 3d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0060_cfff__20_20_3d_3d_3d_3d_.rel b/src/nos/lib/messages_lib/0060_cfff__20_20_3d_3d_3d_3d_.rel new file mode 100644 index 00000000..8d21348f --- /dev/null +++ b/src/nos/lib/messages_lib/0060_cfff__20_20_3d_3d_3d_3d_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___0060_cfff__20_20_3d_3d_3d_3d_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 20 20 3d 3d 3d 3d 3d 20 74 +R 00 00 01 00 +T 0b 00 00 00 72 61 6e 73 63 72 69 70 74 20 66 +R 00 00 01 00 +T 16 00 00 00 6f 6c 6c 6f 77 73 20 3d 3d 3d 3d +R 00 00 01 00 +T 21 00 00 00 3d 0a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0061_8181__20_20SR_20_5bnumbe.rel b/src/nos/lib/messages_lib/0061_8181__20_20SR_20_5bnumbe.rel new file mode 100644 index 00000000..cafd92df --- /dev/null +++ b/src/nos/lib/messages_lib/0061_8181__20_20SR_20_5bnumbe.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0061_8181__20_20SR_20_5bnumbe Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 20 20 53 52 20 5b 6e 75 6d +R 00 00 01 00 +T 0b 00 00 00 62 65 72 5d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0062_1149__20_20S_5bF_5d_20na.rel b/src/nos/lib/messages_lib/0062_1149__20_20S_5bF_5d_20na.rel new file mode 100644 index 00000000..f2315837 --- /dev/null +++ b/src/nos/lib/messages_lib/0062_1149__20_20S_5bF_5d_20na.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 35 flags 0 +S ___0062_1149__20_20S_5bF_5d_20na Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 33 00 20 20 53 5b 46 5d 20 6e 61 +R 00 00 01 00 +T 0b 00 00 00 6d 65 20 5b 40 20 68 6f 73 74 5d +R 00 00 01 00 +T 16 00 00 00 20 5b 3c 20 66 72 6f 6d 5f 61 64 +R 00 00 01 00 +T 21 00 00 00 64 72 5d 20 5b 24 62 75 6c 6c 65 +R 00 00 01 00 +T 2c 00 00 00 74 69 6e 5f 69 64 5d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0063_47af__20_20remote_20IP_2.rel b/src/nos/lib/messages_lib/0063_47af__20_20remote_20IP_2.rel new file mode 100644 index 00000000..f9b508c7 --- /dev/null +++ b/src/nos/lib/messages_lib/0063_47af__20_20remote_20IP_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0063_47af__20_20remote_20IP_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 20 20 72 65 6d 6f 74 65 20 +R 00 00 01 00 +T 0b 00 00 00 49 50 20 61 64 64 72 65 73 73 3a +R 00 00 01 00 +T 16 00 00 00 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0064_ccb1__20_20seq_20x_25lx_.rel b/src/nos/lib/messages_lib/0064_ccb1__20_20seq_20x_25lx_.rel new file mode 100644 index 00000000..cafe0948 --- /dev/null +++ b/src/nos/lib/messages_lib/0064_ccb1__20_20seq_20x_25lx_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0064_ccb1__20_20seq_20x_25lx_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 20 20 73 65 71 20 78 25 6c +R 00 00 01 00 +T 0b 00 00 00 78 20 25 75 20 62 79 74 65 73 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0065_c997__20_21_3f.rel b/src/nos/lib/messages_lib/0065_c997__20_21_3f.rel new file mode 100644 index 00000000..c8c0abf5 --- /dev/null +++ b/src/nos/lib/messages_lib/0065_c997__20_21_3f.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0065_c997__20_21_3f Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 21 3f 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0066_536e__20_21A.rel b/src/nos/lib/messages_lib/0066_536e__20_21A.rel new file mode 100644 index 00000000..94f88a84 --- /dev/null +++ b/src/nos/lib/messages_lib/0066_536e__20_21A.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0066_536e__20_21A Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 21 41 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0067_27d1__20_21F.rel b/src/nos/lib/messages_lib/0067_27d1__20_21F.rel new file mode 100644 index 00000000..735073de --- /dev/null +++ b/src/nos/lib/messages_lib/0067_27d1__20_21F.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0067_27d1__20_21F Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 21 46 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0068_ceaf__20_21H.rel b/src/nos/lib/messages_lib/0068_ceaf__20_21H.rel new file mode 100644 index 00000000..b366b69d --- /dev/null +++ b/src/nos/lib/messages_lib/0068_ceaf__20_21H.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0068_ceaf__20_21H Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 21 48 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0069_ab99__20_21N.rel b/src/nos/lib/messages_lib/0069_ab99__20_21N.rel new file mode 100644 index 00000000..8eb3e32d --- /dev/null +++ b/src/nos/lib/messages_lib/0069_ab99__20_21N.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0069_ab99__20_21N Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 21 4e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/006a_5266__20_21P.rel b/src/nos/lib/messages_lib/006a_5266__20_21P.rel new file mode 100644 index 00000000..aaced678 --- /dev/null +++ b/src/nos/lib/messages_lib/006a_5266__20_21P.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___006a_5266__20_21P Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 21 50 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/006b_60fd__20_21S.rel b/src/nos/lib/messages_lib/006b_60fd__20_21S.rel new file mode 100644 index 00000000..97234bb1 --- /dev/null +++ b/src/nos/lib/messages_lib/006b_60fd__20_21S.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___006b_60fd__20_21S Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 21 53 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/006c_bac3__20_23_20_20S_23_20.rel b/src/nos/lib/messages_lib/006c_bac3__20_23_20_20S_23_20.rel new file mode 100644 index 00000000..1f73fc9c --- /dev/null +++ b/src/nos/lib/messages_lib/006c_bac3__20_23_20_20S_23_20.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 39 flags 0 +S ___006c_bac3__20_23_20_20S_23_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 37 00 20 23 20 20 53 23 20 20 53 +R 00 00 01 00 +T 0b 00 00 00 6e 64 2d 51 20 53 74 61 74 65 20 +R 00 00 01 00 +T 16 00 00 00 20 20 20 20 52 65 6d 6f 74 65 20 +R 00 00 01 00 +T 21 00 00 00 73 6f 63 6b 65 74 20 20 20 20 20 +R 00 00 01 00 +T 2c 00 00 00 20 20 20 20 43 6f 6d 6d 61 6e 64 +R 00 00 01 00 +T 37 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/006d_9a7d__20_25_2d15s.rel b/src/nos/lib/messages_lib/006d_9a7d__20_25_2d15s.rel new file mode 100644 index 00000000..37c2c1d9 --- /dev/null +++ b/src/nos/lib/messages_lib/006d_9a7d__20_25_2d15s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___006d_9a7d__20_25_2d15s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 20 25 2d 31 35 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/006e_85f4__20_25_2d3d_20.rel b/src/nos/lib/messages_lib/006e_85f4__20_25_2d3d_20.rel new file mode 100644 index 00000000..0e4aab43 --- /dev/null +++ b/src/nos/lib/messages_lib/006e_85f4__20_25_2d3d_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___006e_85f4__20_25_2d3d_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 20 25 2d 33 64 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/006f_a413__20_2502u_2f_2502u.rel b/src/nos/lib/messages_lib/006f_a413__20_2502u_2f_2502u.rel new file mode 100644 index 00000000..cf69a3a7 --- /dev/null +++ b/src/nos/lib/messages_lib/006f_a413__20_2502u_2f_2502u.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___006f_a413__20_2502u_2f_2502u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 20 25 30 32 75 2f 25 30 32 +R 00 00 01 00 +T 0b 00 00 00 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0070_d8f4__20_2502u_2f_2502u_.rel b/src/nos/lib/messages_lib/0070_d8f4__20_2502u_2f_2502u_.rel new file mode 100644 index 00000000..9ec576e8 --- /dev/null +++ b/src/nos/lib/messages_lib/0070_d8f4__20_2502u_2f_2502u_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0070_d8f4__20_2502u_2f_2502u_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 20 25 30 32 75 2f 25 30 32 +R 00 00 01 00 +T 0b 00 00 00 75 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0071_4d6e__20_2502x.rel b/src/nos/lib/messages_lib/0071_4d6e__20_2502x.rel new file mode 100644 index 00000000..104e53f6 --- /dev/null +++ b/src/nos/lib/messages_lib/0071_4d6e__20_2502x.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0071_4d6e__20_2502x Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 25 30 32 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0072_cad1__20_2510lu_2510lu_2.rel b/src/nos/lib/messages_lib/0072_cad1__20_2510lu_2510lu_2.rel new file mode 100644 index 00000000..fdb18a65 --- /dev/null +++ b/src/nos/lib/messages_lib/0072_cad1__20_2510lu_2510lu_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___0072_cad1__20_2510lu_2510lu_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 20 25 31 30 6c 75 25 31 30 +R 00 00 01 00 +T 0b 00 00 00 6c 75 25 31 30 6c 75 25 31 30 6c +R 00 00 01 00 +T 16 00 00 00 75 25 31 30 6c 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0073_43b6__20_254d_20_254d.rel b/src/nos/lib/messages_lib/0073_43b6__20_254d_20_254d.rel new file mode 100644 index 00000000..020a01c7 --- /dev/null +++ b/src/nos/lib/messages_lib/0073_43b6__20_254d_20_254d.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0073_43b6__20_254d_20_254d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 20 25 34 64 20 25 34 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0074_78a4__20_258s_20_20_20_2.rel b/src/nos/lib/messages_lib/0074_78a4__20_258s_20_20_20_2.rel new file mode 100644 index 00000000..10a94d5c --- /dev/null +++ b/src/nos/lib/messages_lib/0074_78a4__20_258s_20_20_20_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___0074_78a4__20_258s_20_20_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 20 25 38 73 20 20 20 25 34 +R 00 00 01 00 +T 0b 00 00 00 64 20 20 20 25 31 30 6c 75 20 20 +R 00 00 01 00 +T 16 00 00 00 25 31 30 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0075_6904__20_25lu_20bps_0a.rel b/src/nos/lib/messages_lib/0075_6904__20_25lu_20bps_0a.rel new file mode 100644 index 00000000..40520fbf --- /dev/null +++ b/src/nos/lib/messages_lib/0075_6904__20_25lu_20bps_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0075_6904__20_25lu_20bps_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 20 25 6c 75 20 62 70 73 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0076_269f__20_25s.rel b/src/nos/lib/messages_lib/0076_269f__20_25s.rel new file mode 100644 index 00000000..f7054ff6 --- /dev/null +++ b/src/nos/lib/messages_lib/0076_269f__20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0076_269f__20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0077_c302__20_25s_0a.rel b/src/nos/lib/messages_lib/0077_c302__20_25s_0a.rel new file mode 100644 index 00000000..abdd1db2 --- /dev/null +++ b/src/nos/lib/messages_lib/0077_c302__20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0077_c302__20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0078_10eb__20_25s_20_25s_20_2.rel b/src/nos/lib/messages_lib/0078_10eb__20_25s_20_25s_20_2.rel new file mode 100644 index 00000000..7a67b848 --- /dev/null +++ b/src/nos/lib/messages_lib/0078_10eb__20_25s_20_25s_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0078_10eb__20_25s_20_25s_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 20 25 73 20 25 73 20 25 6c +R 00 00 01 00 +T 0b 00 00 00 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0079_c236__20_25s_25s.rel b/src/nos/lib/messages_lib/0079_c236__20_25s_25s.rel new file mode 100644 index 00000000..a56c1df6 --- /dev/null +++ b/src/nos/lib/messages_lib/0079_c236__20_25s_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0079_c236__20_25s_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 25 73 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/007a_3c84__20_25s_2b_25x.rel b/src/nos/lib/messages_lib/007a_3c84__20_25s_2b_25x.rel new file mode 100644 index 00000000..1ede644e --- /dev/null +++ b/src/nos/lib/messages_lib/007a_3c84__20_25s_2b_25x.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___007a_3c84__20_25s_2b_25x Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 20 25 73 2b 25 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/007b_97d2__20_25u_0a.rel b/src/nos/lib/messages_lib/007b_97d2__20_25u_0a.rel new file mode 100644 index 00000000..aa1e4314 --- /dev/null +++ b/src/nos/lib/messages_lib/007b_97d2__20_25u_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___007b_97d2__20_25u_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 20 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/007c_5984__20_25u_2d_3e_25u.rel b/src/nos/lib/messages_lib/007c_5984__20_25u_2d_3e_25u.rel new file mode 100644 index 00000000..806d843f --- /dev/null +++ b/src/nos/lib/messages_lib/007c_5984__20_25u_2d_3e_25u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___007c_5984__20_25u_2d_3e_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 20 25 75 2d 3e 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/007d_98a5__20_28_25ld_20ms_29.rel b/src/nos/lib/messages_lib/007d_98a5__20_28_25ld_20ms_29.rel new file mode 100644 index 00000000..d7c2231b --- /dev/null +++ b/src/nos/lib/messages_lib/007d_98a5__20_28_25ld_20ms_29.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___007d_98a5__20_28_25ld_20ms_29 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 20 28 25 6c 64 20 6d 73 29 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/007e_9556__20_28_25s_20seek_3.rel b/src/nos/lib/messages_lib/007e_9556__20_28_25s_20seek_3.rel new file mode 100644 index 00000000..ddd19687 --- /dev/null +++ b/src/nos/lib/messages_lib/007e_9556__20_28_25s_20seek_3.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___007e_9556__20_28_25s_20seek_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 20 28 25 73 20 73 65 65 6b +R 00 00 01 00 +T 0b 00 00 00 3d 25 6c 75 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/007f_6268__20_28_25s_29_0a.rel b/src/nos/lib/messages_lib/007f_6268__20_28_25s_29_0a.rel new file mode 100644 index 00000000..407af19a --- /dev/null +++ b/src/nos/lib/messages_lib/007f_6268__20_28_25s_29_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___007f_6268__20_28_25s_29_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 20 28 25 73 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0080_3f71__20_28ASCII_20dump_.rel b/src/nos/lib/messages_lib/0080_3f71__20_28ASCII_20dump_.rel new file mode 100644 index 00000000..556c9268 --- /dev/null +++ b/src/nos/lib/messages_lib/0080_3f71__20_28ASCII_20dump_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0080_3f71__20_28ASCII_20dump_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 20 28 41 53 43 49 49 20 64 +R 00 00 01 00 +T 0b 00 00 00 75 6d 70 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0081_05b3__20_28Hex_2fASCII_2.rel b/src/nos/lib/messages_lib/0081_05b3__20_28Hex_2fASCII_2.rel new file mode 100644 index 00000000..620f4ffa --- /dev/null +++ b/src/nos/lib/messages_lib/0081_05b3__20_28Hex_2fASCII_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___0081_05b3__20_28Hex_2fASCII_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 20 28 48 65 78 2f 41 53 43 +R 00 00 01 00 +T 0b 00 00 00 49 49 20 64 75 6d 70 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0082_0cd7__20_28S_29.rel b/src/nos/lib/messages_lib/0082_0cd7__20_28S_29.rel new file mode 100644 index 00000000..19a09bf2 --- /dev/null +++ b/src/nos/lib/messages_lib/0082_0cd7__20_28S_29.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0082_0cd7__20_28S_29 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 20 28 53 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0083_ef5f__20_28headers_20onl.rel b/src/nos/lib/messages_lib/0083_ef5f__20_28headers_20onl.rel new file mode 100644 index 00000000..c2a62681 --- /dev/null +++ b/src/nos/lib/messages_lib/0083_ef5f__20_28headers_20onl.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0083_ef5f__20_28headers_20onl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 20 28 68 65 61 64 65 72 73 +R 00 00 01 00 +T 0b 00 00 00 20 6f 6e 6c 79 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0084_c04d__20_28published_29.rel b/src/nos/lib/messages_lib/0084_c04d__20_28published_29.rel new file mode 100644 index 00000000..333536aa --- /dev/null +++ b/src/nos/lib/messages_lib/0084_c04d__20_28published_29.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0084_c04d__20_28published_29 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 20 28 70 75 62 6c 69 73 68 +R 00 00 01 00 +T 0b 00 00 00 65 64 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0085_ac28__20_2a_2a_2a.rel b/src/nos/lib/messages_lib/0085_ac28__20_2a_2a_2a.rel new file mode 100644 index 00000000..a9e12c6e --- /dev/null +++ b/src/nos/lib/messages_lib/0085_ac28__20_2a_2a_2a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0085_ac28__20_2a_2a_2a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 20 2a 2a 2a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0086_8841__20_2d_20.rel b/src/nos/lib/messages_lib/0086_8841__20_2d_20.rel new file mode 100644 index 00000000..c0335acd --- /dev/null +++ b/src/nos/lib/messages_lib/0086_8841__20_2d_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0086_8841__20_2d_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 2d 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0087_ace7__20_2d_20no_20broad.rel b/src/nos/lib/messages_lib/0087_ace7__20_2d_20no_20broad.rel new file mode 100644 index 00000000..fc8ee2bd --- /dev/null +++ b/src/nos/lib/messages_lib/0087_ace7__20_2d_20no_20broad.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0087_ace7__20_2d_20no_20broad Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 20 2d 20 6e 6f 20 62 72 6f +R 00 00 01 00 +T 0b 00 00 00 61 64 63 61 73 74 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0088_01a0__20APND.rel b/src/nos/lib/messages_lib/0088_01a0__20APND.rel new file mode 100644 index 00000000..30165160 --- /dev/null +++ b/src/nos/lib/messages_lib/0088_01a0__20APND.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0088_01a0__20APND Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 41 50 4e 44 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0089_2da0__20Ack_20x_25lx.rel b/src/nos/lib/messages_lib/0089_2da0__20Ack_20x_25lx.rel new file mode 100644 index 00000000..f8611442 --- /dev/null +++ b/src/nos/lib/messages_lib/0089_2da0__20Ack_20x_25lx.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0089_2da0__20Ack_20x_25lx Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 20 41 63 6b 20 78 25 6c 78 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/008a_f35d__20BUSY.rel b/src/nos/lib/messages_lib/008a_f35d__20BUSY.rel new file mode 100644 index 00000000..b76bd829 --- /dev/null +++ b/src/nos/lib/messages_lib/008a_f35d__20BUSY.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___008a_f35d__20BUSY Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 42 55 53 59 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/008b_43af__20CE.rel b/src/nos/lib/messages_lib/008b_43af__20CE.rel new file mode 100644 index 00000000..c709ea4d --- /dev/null +++ b/src/nos/lib/messages_lib/008b_43af__20CE.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___008b_43af__20CE Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 43 45 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/008c_d667__20CHECKSUM_20ERROR.rel b/src/nos/lib/messages_lib/008c_d667__20CHECKSUM_20ERROR.rel new file mode 100644 index 00000000..d43d4b82 --- /dev/null +++ b/src/nos/lib/messages_lib/008c_d667__20CHECKSUM_20ERROR.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___008c_d667__20CHECKSUM_20ERROR Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 20 43 48 45 43 4b 53 55 4d +R 00 00 01 00 +T 0b 00 00 00 20 45 52 52 4f 52 20 28 25 75 29 +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/008d_5947__20CHOKE.rel b/src/nos/lib/messages_lib/008d_5947__20CHOKE.rel new file mode 100644 index 00000000..9883b0ca --- /dev/null +++ b/src/nos/lib/messages_lib/008d_5947__20CHOKE.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___008d_5947__20CHOKE Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 20 43 48 4f 4b 45 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/008e_3c3c__20DF.rel b/src/nos/lib/messages_lib/008e_3c3c__20DF.rel new file mode 100644 index 00000000..1e9162c7 --- /dev/null +++ b/src/nos/lib/messages_lib/008e_3c3c__20DF.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___008e_3c3c__20DF Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 44 46 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/008f_26b0__20Data_20_25u.rel b/src/nos/lib/messages_lib/008f_26b0__20Data_20_25u.rel new file mode 100644 index 00000000..f470170f --- /dev/null +++ b/src/nos/lib/messages_lib/008f_26b0__20Data_20_25u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___008f_26b0__20Data_20_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 20 44 61 74 61 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0090_5125__20EOF.rel b/src/nos/lib/messages_lib/0090_5125__20EOF.rel new file mode 100644 index 00000000..aad7e1c5 --- /dev/null +++ b/src/nos/lib/messages_lib/0090_5125__20EOF.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0090_5125__20EOF Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 20 45 4f 46 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0091_2269__20ERR.rel b/src/nos/lib/messages_lib/0091_2269__20ERR.rel new file mode 100644 index 00000000..38609cca --- /dev/null +++ b/src/nos/lib/messages_lib/0091_2269__20ERR.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0091_2269__20ERR Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 20 45 52 52 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0092_869e__20IPaddr_20_25s.rel b/src/nos/lib/messages_lib/0092_869e__20IPaddr_20_25s.rel new file mode 100644 index 00000000..1351ecc6 --- /dev/null +++ b/src/nos/lib/messages_lib/0092_869e__20IPaddr_20_25s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0092_869e__20IPaddr_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 20 49 50 61 64 64 72 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0093_d267__20Illegal_20I_2dfi.rel b/src/nos/lib/messages_lib/0093_d267__20Illegal_20I_2dfi.rel new file mode 100644 index 00000000..e34160a8 --- /dev/null +++ b/src/nos/lib/messages_lib/0093_d267__20Illegal_20I_2dfi.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0093_d267__20Illegal_20I_2dfi Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 20 49 6c 6c 65 67 61 6c 20 +R 00 00 01 00 +T 0b 00 00 00 49 2d 66 69 65 6c 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0094_d316__20Invalid_20contro.rel b/src/nos/lib/messages_lib/0094_d316__20Invalid_20contro.rel new file mode 100644 index 00000000..3ac7e7c1 --- /dev/null +++ b/src/nos/lib/messages_lib/0094_d316__20Invalid_20contro.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0094_d316__20Invalid_20contro Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 20 49 6e 76 61 6c 69 64 20 +R 00 00 01 00 +T 0b 00 00 00 63 6f 6e 74 72 6f 6c 20 66 69 65 +R 00 00 01 00 +T 16 00 00 00 6c 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0095_1e4f__20Invalid_20seq_20.rel b/src/nos/lib/messages_lib/0095_1e4f__20Invalid_20seq_20.rel new file mode 100644 index 00000000..1f602b8f --- /dev/null +++ b/src/nos/lib/messages_lib/0095_1e4f__20Invalid_20seq_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___0095_1e4f__20Invalid_20seq_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 20 49 6e 76 61 6c 69 64 20 +R 00 00 01 00 +T 0b 00 00 00 73 65 71 20 6e 75 6d 62 65 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0096_fd02__20MC_3a_20int_20_2.rel b/src/nos/lib/messages_lib/0096_fd02__20MC_3a_20int_20_2.rel new file mode 100644 index 00000000..a8fb6b62 --- /dev/null +++ b/src/nos/lib/messages_lib/0096_fd02__20MC_3a_20int_20_2.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3d flags 0 +S ___0096_fd02__20MC_3a_20int_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 3b 00 20 4d 43 3a 20 69 6e 74 20 +R 00 00 01 00 +T 0b 00 00 00 25 6c 75 20 44 54 52 20 25 73 20 +R 00 00 01 00 +T 16 00 00 00 20 52 54 53 20 25 73 20 20 43 54 +R 00 00 01 00 +T 21 00 00 00 53 20 25 73 20 20 44 53 52 20 25 +R 00 00 01 00 +T 2c 00 00 00 73 20 20 52 49 20 25 73 20 20 43 +R 00 00 01 00 +T 37 00 00 00 44 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0097_eb24__20MF.rel b/src/nos/lib/messages_lib/0097_eb24__20MF.rel new file mode 100644 index 00000000..de17cbeb --- /dev/null +++ b/src/nos/lib/messages_lib/0097_eb24__20MF.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0097_eb24__20MF Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 4d 46 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0098_747e__20MORE.rel b/src/nos/lib/messages_lib/0098_747e__20MORE.rel new file mode 100644 index 00000000..9622103b --- /dev/null +++ b/src/nos/lib/messages_lib/0098_747e__20MORE.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0098_747e__20MORE Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 4d 4f 52 45 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0099_c5ed__20MSS_20_25u.rel b/src/nos/lib/messages_lib/0099_c5ed__20MSS_20_25u.rel new file mode 100644 index 00000000..fd1e38ca --- /dev/null +++ b/src/nos/lib/messages_lib/0099_c5ed__20MSS_20_25u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0099_c5ed__20MSS_20_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 20 4d 53 53 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/009a_3976__20NAK.rel b/src/nos/lib/messages_lib/009a_3976__20NAK.rel new file mode 100644 index 00000000..11a6d37b --- /dev/null +++ b/src/nos/lib/messages_lib/009a_3976__20NAK.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___009a_3976__20NAK Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 20 4e 41 4b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/009b_c092__20NR_3d_25d.rel b/src/nos/lib/messages_lib/009b_c092__20NR_3d_25d.rel new file mode 100644 index 00000000..aee55808 --- /dev/null +++ b/src/nos/lib/messages_lib/009b_c092__20NR_3d_25d.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___009b_c092__20NR_3d_25d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 20 4e 52 3d 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/009c_dc29__20NS_3d_25d.rel b/src/nos/lib/messages_lib/009c_dc29__20NS_3d_25d.rel new file mode 100644 index 00000000..b4eef5af --- /dev/null +++ b/src/nos/lib/messages_lib/009c_dc29__20NS_3d_25d.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___009c_dc29__20NS_3d_25d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 20 4e 53 3d 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/009d_df24__20RX_3a_20int_20_2.rel b/src/nos/lib/messages_lib/009d_df24__20RX_3a_20int_20_2.rel new file mode 100644 index 00000000..4aca695f --- /dev/null +++ b/src/nos/lib/messages_lib/009d_df24__20RX_3a_20int_20_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2f flags 0 +S ___009d_df24__20RX_3a_20int_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2d 00 20 52 58 3a 20 69 6e 74 20 +R 00 00 01 00 +T 0b 00 00 00 25 6c 75 20 63 68 61 72 73 20 25 +R 00 00 01 00 +T 16 00 00 00 6c 75 20 68 77 20 6f 76 65 72 20 +R 00 00 01 00 +T 21 00 00 00 25 6c 75 20 68 77 20 68 69 20 25 +R 00 00 01 00 +T 2c 00 00 00 6c 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/009e_78a4__20Raw_20output.rel b/src/nos/lib/messages_lib/009e_78a4__20Raw_20output.rel new file mode 100644 index 00000000..f8fa8bff --- /dev/null +++ b/src/nos/lib/messages_lib/009e_78a4__20Raw_20output.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___009e_78a4__20Raw_20output Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 20 52 61 77 20 6f 75 74 70 +R 00 00 01 00 +T 0b 00 00 00 75 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/009f_a393__20Remote_3a_20_25s.rel b/src/nos/lib/messages_lib/009f_a393__20Remote_3a_20_25s.rel new file mode 100644 index 00000000..8d40b90a --- /dev/null +++ b/src/nos/lib/messages_lib/009f_a393__20Remote_3a_20_25s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___009f_a393__20Remote_3a_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 20 52 65 6d 6f 74 65 3a 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00a0_d7c2__20Retry.rel b/src/nos/lib/messages_lib/00a0_d7c2__20Retry.rel new file mode 100644 index 00000000..cafd8bab --- /dev/null +++ b/src/nos/lib/messages_lib/00a0_d7c2__20Retry.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___00a0_d7c2__20Retry Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 20 52 65 74 72 79 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00a1_d322__20State_3a_20_25s_.rel b/src/nos/lib/messages_lib/00a1_d322__20State_3a_20_25s_.rel new file mode 100644 index 00000000..eea7f037 --- /dev/null +++ b/src/nos/lib/messages_lib/00a1_d322__20State_3a_20_25s_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___00a1_d322__20State_3a_20_25s_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 20 53 74 61 74 65 3a 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00a2_c86b__20TMP.rel b/src/nos/lib/messages_lib/00a2_c86b__20TMP.rel new file mode 100644 index 00000000..e0c5ea3b --- /dev/null +++ b/src/nos/lib/messages_lib/00a2_c86b__20TMP.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___00a2_c86b__20TMP Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 20 54 4d 50 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00a3_2dcc__20TSTAMP_20_25lu_2.rel b/src/nos/lib/messages_lib/00a3_2dcc__20TSTAMP_20_25lu_2.rel new file mode 100644 index 00000000..51d19d03 --- /dev/null +++ b/src/nos/lib/messages_lib/00a3_2dcc__20TSTAMP_20_25lu_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___00a3_2dcc__20TSTAMP_20_25lu_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 20 54 53 54 41 4d 50 20 25 +R 00 00 01 00 +T 0b 00 00 00 6c 75 20 54 53 45 43 48 4f 20 25 +R 00 00 01 00 +T 16 00 00 00 6c 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00a4_e8c1__20TX_3a_20int_20_2.rel b/src/nos/lib/messages_lib/00a4_e8c1__20TX_3a_20int_20_2.rel new file mode 100644 index 00000000..1514d65c --- /dev/null +++ b/src/nos/lib/messages_lib/00a4_e8c1__20TX_3a_20int_20_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___00a4_e8c1__20TX_3a_20int_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 20 54 58 3a 20 69 6e 74 20 +R 00 00 01 00 +T 0b 00 00 00 25 6c 75 20 63 68 61 72 73 20 25 +R 00 00 01 00 +T 16 00 00 00 6c 75 20 54 44 52 45 20 54 4f 20 +R 00 00 01 00 +T 21 00 00 00 25 6c 75 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00a5_d70d__20Too_2dlong_20I_2.rel b/src/nos/lib/messages_lib/00a5_d70d__20Too_2dlong_20I_2.rel new file mode 100644 index 00000000..a975dddf --- /dev/null +++ b/src/nos/lib/messages_lib/00a5_d70d__20Too_2dlong_20I_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___00a5_d70d__20Too_2dlong_20I_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 20 54 6f 6f 2d 6c 6f 6e 67 +R 00 00 01 00 +T 0b 00 00 00 20 49 2d 66 69 65 6c 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00a6_5a85__20UP_20x_25x.rel b/src/nos/lib/messages_lib/00a6_5a85__20UP_20x_25x.rel new file mode 100644 index 00000000..7bb6add9 --- /dev/null +++ b/src/nos/lib/messages_lib/00a6_5a85__20UP_20x_25x.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___00a6_5a85__20UP_20x_25x Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 20 55 50 20 78 25 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00a7_2210__20Unack_3a_20_25_2.rel b/src/nos/lib/messages_lib/00a7_2210__20Unack_3a_20_25_2.rel new file mode 100644 index 00000000..94a50cd3 --- /dev/null +++ b/src/nos/lib/messages_lib/00a7_2210__20Unack_3a_20_25_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S ___00a7_2210__20Unack_3a_20_25_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 35 00 20 55 6e 61 63 6b 3a 20 25 +R 00 00 01 00 +T 0b 00 00 00 2d 35 75 20 54 78 70 65 63 74 3a +R 00 00 01 00 +T 16 00 00 00 20 25 2d 35 75 20 54 78 4e 65 78 +R 00 00 01 00 +T 21 00 00 00 74 3a 20 25 2d 35 75 20 54 78 51 +R 00 00 01 00 +T 2c 00 00 00 3a 20 25 2d 35 64 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00a8_3a68__20Unknown_20passwo.rel b/src/nos/lib/messages_lib/00a8_3a68__20Unknown_20passwo.rel new file mode 100644 index 00000000..2dea4a7c --- /dev/null +++ b/src/nos/lib/messages_lib/00a8_3a68__20Unknown_20passwo.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___00a8_3a68__20Unknown_20passwo Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 20 55 6e 6b 6e 6f 77 6e 20 +R 00 00 01 00 +T 0b 00 00 00 70 61 73 73 77 6f 72 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00a9_23f3__20Vr_20_3d_20_25d_.rel b/src/nos/lib/messages_lib/00a9_23f3__20Vr_20_3d_20_25d_.rel new file mode 100644 index 00000000..09f82cae --- /dev/null +++ b/src/nos/lib/messages_lib/00a9_23f3__20Vr_20_3d_20_25d_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___00a9_23f3__20Vr_20_3d_20_25d_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 20 56 72 20 3d 20 25 64 20 +R 00 00 01 00 +T 0b 00 00 00 56 73 20 3d 20 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00aa_a984__20WSCALE_20_25u.rel b/src/nos/lib/messages_lib/00aa_a984__20WSCALE_20_25u.rel new file mode 100644 index 00000000..55151934 --- /dev/null +++ b/src/nos/lib/messages_lib/00aa_a984__20WSCALE_20_25u.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___00aa_a984__20WSCALE_20_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 20 57 53 43 41 4c 45 20 25 +R 00 00 01 00 +T 0b 00 00 00 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ab_1d25__20Wnd_20_25u.rel b/src/nos/lib/messages_lib/00ab_1d25__20Wnd_20_25u.rel new file mode 100644 index 00000000..a4219b1b --- /dev/null +++ b/src/nos/lib/messages_lib/00ab_1d25__20Wnd_20_25u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___00ab_1d25__20Wnd_20_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 20 57 6e 64 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ac_e77d__20_5b_25s_5d_20_25.rel b/src/nos/lib/messages_lib/00ac_e77d__20_5b_25s_5d_20_25.rel new file mode 100644 index 00000000..0ab63bc5 --- /dev/null +++ b/src/nos/lib/messages_lib/00ac_e77d__20_5b_25s_5d_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___00ac_e77d__20_5b_25s_5d_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 20 5b 25 73 5d 20 25 75 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ad_7762__20_5bcts_20flow_20.rel b/src/nos/lib/messages_lib/00ad_7762__20_5bcts_20flow_20.rel new file mode 100644 index 00000000..34175388 --- /dev/null +++ b/src/nos/lib/messages_lib/00ad_7762__20_5bcts_20flow_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___00ad_7762__20_5bcts_20flow_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 20 5b 63 74 73 20 66 6c 6f +R 00 00 01 00 +T 0b 00 00 00 77 20 63 6f 6e 74 72 6f 6c 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ae_2f4d__20_5brlsd_20line_2.rel b/src/nos/lib/messages_lib/00ae_2f4d__20_5brlsd_20line_2.rel new file mode 100644 index 00000000..372ed55c --- /dev/null +++ b/src/nos/lib/messages_lib/00ae_2f4d__20_5brlsd_20line_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___00ae_2f4d__20_5brlsd_20line_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 20 5b 72 6c 73 64 20 6c 69 +R 00 00 01 00 +T 0b 00 00 00 6e 65 20 63 6f 6e 74 72 6f 6c 5d +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00af_db59__20_5btrigger_200x_.rel b/src/nos/lib/messages_lib/00af_db59__20_5btrigger_200x_.rel new file mode 100644 index 00000000..0f20e287 --- /dev/null +++ b/src/nos/lib/messages_lib/00af_db59__20_5btrigger_200x_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___00af_db59__20_5btrigger_200x_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 20 5b 74 72 69 67 67 65 72 +R 00 00 01 00 +T 0b 00 00 00 20 30 78 25 30 32 78 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00b0_bc24__20asy_20.rel b/src/nos/lib/messages_lib/00b0_bc24__20asy_20.rel new file mode 100644 index 00000000..f0a0702e --- /dev/null +++ b/src/nos/lib/messages_lib/00b0_bc24__20asy_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00b0_bc24__20asy_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 61 73 79 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00b1_c96a__20bad_20header_21_.rel b/src/nos/lib/messages_lib/00b1_c96a__20bad_20header_21_.rel new file mode 100644 index 00000000..3ea044e5 --- /dev/null +++ b/src/nos/lib/messages_lib/00b1_c96a__20bad_20header_21_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___00b1_c96a__20bad_20header_21_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 20 62 61 64 20 68 65 61 64 +R 00 00 01 00 +T 0b 00 00 00 65 72 21 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00b2_0acc__20bad_20packet_0a.rel b/src/nos/lib/messages_lib/00b2_0acc__20bad_20packet_0a.rel new file mode 100644 index 00000000..c7866d69 --- /dev/null +++ b/src/nos/lib/messages_lib/00b2_0acc__20bad_20packet_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___00b2_0acc__20bad_20packet_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 20 62 61 64 20 70 61 63 6b +R 00 00 01 00 +T 0b 00 00 00 65 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00b3_d795__20cmd_20_25u.rel b/src/nos/lib/messages_lib/00b3_d795__20cmd_20_25u.rel new file mode 100644 index 00000000..7980f47b --- /dev/null +++ b/src/nos/lib/messages_lib/00b3_d795__20cmd_20_25u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___00b3_d795__20cmd_20_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 20 63 6d 64 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00b4_1813__20code_20_25s.rel b/src/nos/lib/messages_lib/00b4_1813__20code_20_25s.rel new file mode 100644 index 00000000..ea141f2f --- /dev/null +++ b/src/nos/lib/messages_lib/00b4_1813__20code_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___00b4_1813__20code_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 20 63 6f 64 65 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00b5_ad83__20dest_20_25s.rel b/src/nos/lib/messages_lib/00b5_ad83__20dest_20_25s.rel new file mode 100644 index 00000000..117770a2 --- /dev/null +++ b/src/nos/lib/messages_lib/00b5_ad83__20dest_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___00b5_ad83__20dest_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 20 64 65 73 74 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00b6_e3a3__20dest_20_25s_20_2.rel b/src/nos/lib/messages_lib/00b6_e3a3__20dest_20_25s_20_2.rel new file mode 100644 index 00000000..ab4275a1 --- /dev/null +++ b/src/nos/lib/messages_lib/00b6_e3a3__20dest_20_25s_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___00b6_e3a3__20dest_20_25s_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 20 64 65 73 74 20 25 73 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00b7_4976__20diag.rel b/src/nos/lib/messages_lib/00b7_4976__20diag.rel new file mode 100644 index 00000000..a4befe1c --- /dev/null +++ b/src/nos/lib/messages_lib/00b7_4976__20diag.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00b7_4976__20diag Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 64 69 61 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00b8_e36a__20file.rel b/src/nos/lib/messages_lib/00b8_e36a__20file.rel new file mode 100644 index 00000000..a52dfe98 --- /dev/null +++ b/src/nos/lib/messages_lib/00b8_e36a__20file.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00b8_e36a__20file Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 66 69 6c 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00b9_5e9d__20full.rel b/src/nos/lib/messages_lib/00b9_5e9d__20full.rel new file mode 100644 index 00000000..7be0b09b --- /dev/null +++ b/src/nos/lib/messages_lib/00b9_5e9d__20full.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00b9_5e9d__20full Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 66 75 6c 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ba_4c62__20hwaddr_20_25s_0a.rel b/src/nos/lib/messages_lib/00ba_4c62__20hwaddr_20_25s_0a.rel new file mode 100644 index 00000000..490e30a5 --- /dev/null +++ b/src/nos/lib/messages_lib/00ba_4c62__20hwaddr_20_25s_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___00ba_4c62__20hwaddr_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 20 68 77 61 64 64 72 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00bb_ed56__20hwlen_20_25u.rel b/src/nos/lib/messages_lib/00bb_ed56__20hwlen_20_25u.rel new file mode 100644 index 00000000..3becbe97 --- /dev/null +++ b/src/nos/lib/messages_lib/00bb_ed56__20hwlen_20_25u.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___00bb_ed56__20hwlen_20_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 20 68 77 6c 65 6e 20 25 75 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00bc_2971__20hwtype_20_25s.rel b/src/nos/lib/messages_lib/00bc_2971__20hwtype_20_25s.rel new file mode 100644 index 00000000..64454a40 --- /dev/null +++ b/src/nos/lib/messages_lib/00bc_2971__20hwtype_20_25s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___00bc_2971__20hwtype_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 20 68 77 74 79 70 65 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00bd_3119__20id_20_25u_20offs.rel b/src/nos/lib/messages_lib/00bd_3119__20id_20_25u_20offs.rel new file mode 100644 index 00000000..7b010886 --- /dev/null +++ b/src/nos/lib/messages_lib/00bd_3119__20id_20_25u_20offs.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___00bd_3119__20id_20_25u_20offs Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 20 69 64 20 25 75 20 6f 66 +R 00 00 01 00 +T 0b 00 00 00 66 73 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00be_8f2f__20id_20_25u_20pctl.rel b/src/nos/lib/messages_lib/00be_8f2f__20id_20_25u_20pctl.rel new file mode 100644 index 00000000..60fbe4e2 --- /dev/null +++ b/src/nos/lib/messages_lib/00be_8f2f__20id_20_25u_20pctl.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___00be_8f2f__20id_20_25u_20pctl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 20 69 64 20 25 75 20 70 63 +R 00 00 01 00 +T 0b 00 00 00 74 6c 20 25 75 20 74 69 6d 65 20 +R 00 00 01 00 +T 16 00 00 00 25 6c 75 20 6c 65 6e 20 25 75 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00bf_20f7__20id_20_25u_20seq_.rel b/src/nos/lib/messages_lib/00bf_20f7__20id_20_25u_20seq_.rel new file mode 100644 index 00000000..4e682f35 --- /dev/null +++ b/src/nos/lib/messages_lib/00bf_20f7__20id_20_25u_20seq_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___00bf_20f7__20id_20_25u_20seq_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 20 69 64 20 25 75 20 73 65 +R 00 00 01 00 +T 0b 00 00 00 71 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00c0_8c07__20idle_20timer_20_.rel b/src/nos/lib/messages_lib/00c0_8c07__20idle_20timer_20_.rel new file mode 100644 index 00000000..e020d311 --- /dev/null +++ b/src/nos/lib/messages_lib/00c0_8c07__20idle_20timer_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___00c0_8c07__20idle_20timer_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 20 69 64 6c 65 20 74 69 6d +R 00 00 01 00 +T 0b 00 00 00 65 72 20 25 6c 75 2f 25 6c 75 20 +R 00 00 01 00 +T 16 00 00 00 73 65 63 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00c1_7166__20input.rel b/src/nos/lib/messages_lib/00c1_7166__20input.rel new file mode 100644 index 00000000..0b01aede --- /dev/null +++ b/src/nos/lib/messages_lib/00c1_7166__20input.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___00c1_7166__20input Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 20 69 6e 70 75 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00c2_6c92__20len_20_25u.rel b/src/nos/lib/messages_lib/00c2_6c92__20len_20_25u.rel new file mode 100644 index 00000000..b3f063bd --- /dev/null +++ b/src/nos/lib/messages_lib/00c2_6c92__20len_20_25u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___00c2_6c92__20len_20_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 20 6c 65 6e 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00c3_0c74__20line.rel b/src/nos/lib/messages_lib/00c3_0c74__20line.rel new file mode 100644 index 00000000..e18689d8 --- /dev/null +++ b/src/nos/lib/messages_lib/00c3_0c74__20line.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00c3_0c74__20line Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 6c 69 6e 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00c4_2537__20new_20gateway_20.rel b/src/nos/lib/messages_lib/00c4_2537__20new_20gateway_20.rel new file mode 100644 index 00000000..86c4f43f --- /dev/null +++ b/src/nos/lib/messages_lib/00c4_2537__20new_20gateway_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___00c4_2537__20new_20gateway_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 20 6e 65 77 20 67 61 74 65 +R 00 00 01 00 +T 0b 00 00 00 77 61 79 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00c5_ea43__20new_20gateway_20.rel b/src/nos/lib/messages_lib/00c5_ea43__20new_20gateway_20.rel new file mode 100644 index 00000000..e513de79 --- /dev/null +++ b/src/nos/lib/messages_lib/00c5_ea43__20new_20gateway_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___00c5_ea43__20new_20gateway_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 20 6e 65 77 20 67 61 74 65 +R 00 00 01 00 +T 0b 00 00 00 77 61 79 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00c6_e3db__20none.rel b/src/nos/lib/messages_lib/00c6_e3db__20none.rel new file mode 100644 index 00000000..14dbce86 --- /dev/null +++ b/src/nos/lib/messages_lib/00c6_e3db__20none.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00c6_e3db__20none Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 6e 6f 6e 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00c7_826b__20offset_20_25u_20.rel b/src/nos/lib/messages_lib/00c7_826b__20offset_20_25u_20.rel new file mode 100644 index 00000000..606b7b78 --- /dev/null +++ b/src/nos/lib/messages_lib/00c7_826b__20offset_20_25u_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___00c7_826b__20offset_20_25u_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 20 6f 66 66 73 65 74 20 25 +R 00 00 01 00 +T 0b 00 00 00 75 20 6c 61 73 74 20 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00c8_6680__20op_20_25u.rel b/src/nos/lib/messages_lib/00c8_6680__20op_20_25u.rel new file mode 100644 index 00000000..9bca0fa1 --- /dev/null +++ b/src/nos/lib/messages_lib/00c8_6680__20op_20_25u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___00c8_6680__20op_20_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 20 6f 70 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00c9_f7d5__20op_20REPLY.rel b/src/nos/lib/messages_lib/00c9_f7d5__20op_20REPLY.rel new file mode 100644 index 00000000..4e7858fc --- /dev/null +++ b/src/nos/lib/messages_lib/00c9_f7d5__20op_20REPLY.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___00c9_f7d5__20op_20REPLY Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 20 6f 70 20 52 45 50 4c 59 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ca_5e3d__20op_20REQUEST.rel b/src/nos/lib/messages_lib/00ca_5e3d__20op_20REQUEST.rel new file mode 100644 index 00000000..41ccd1af --- /dev/null +++ b/src/nos/lib/messages_lib/00ca_5e3d__20op_20REQUEST.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___00ca_5e3d__20op_20REQUEST Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 20 6f 70 20 52 45 51 55 45 +R 00 00 01 00 +T 0b 00 00 00 53 54 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00cb_9500__20op_20REVERSE_20R.rel b/src/nos/lib/messages_lib/00cb_9500__20op_20REVERSE_20R.rel new file mode 100644 index 00000000..8b9fae65 --- /dev/null +++ b/src/nos/lib/messages_lib/00cb_9500__20op_20REVERSE_20R.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___00cb_9500__20op_20REVERSE_20R Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 20 6f 70 20 52 45 56 45 52 +R 00 00 01 00 +T 0b 00 00 00 53 45 20 52 45 50 4c 59 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00cc_3faa__20op_20REVERSE_20R.rel b/src/nos/lib/messages_lib/00cc_3faa__20op_20REVERSE_20R.rel new file mode 100644 index 00000000..c77622da --- /dev/null +++ b/src/nos/lib/messages_lib/00cc_3faa__20op_20REVERSE_20R.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___00cc_3faa__20op_20REVERSE_20R Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 20 6f 70 20 52 45 56 45 52 +R 00 00 01 00 +T 0b 00 00 00 53 45 20 52 45 51 55 45 53 54 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00cd_8a3d__20output.rel b/src/nos/lib/messages_lib/00cd_8a3d__20output.rel new file mode 100644 index 00000000..cf292a30 --- /dev/null +++ b/src/nos/lib/messages_lib/00cd_8a3d__20output.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___00cd_8a3d__20output Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 20 6f 75 74 70 75 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ce_5896__20pid_3d0x_25x_0a.rel b/src/nos/lib/messages_lib/00ce_5896__20pid_3d0x_25x_0a.rel new file mode 100644 index 00000000..0f2edecc --- /dev/null +++ b/src/nos/lib/messages_lib/00ce_5896__20pid_3d0x_25x_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___00ce_5896__20pid_3d0x_25x_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 20 70 69 64 3d 30 78 25 78 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00cf_aba6__20pid_3dARP_0a.rel b/src/nos/lib/messages_lib/00cf_aba6__20pid_3dARP_0a.rel new file mode 100644 index 00000000..18bbea8b --- /dev/null +++ b/src/nos/lib/messages_lib/00cf_aba6__20pid_3dARP_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___00cf_aba6__20pid_3dARP_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 20 70 69 64 3d 41 52 50 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00d0_d4e9__20pid_3dIP_0a.rel b/src/nos/lib/messages_lib/00d0_d4e9__20pid_3dIP_0a.rel new file mode 100644 index 00000000..0102b69e --- /dev/null +++ b/src/nos/lib/messages_lib/00d0_d4e9__20pid_3dIP_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___00d0_d4e9__20pid_3dIP_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 20 70 69 64 3d 49 50 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00d1_a349__20pid_3dNET_2fROM_.rel b/src/nos/lib/messages_lib/00d1_a349__20pid_3dNET_2fROM_.rel new file mode 100644 index 00000000..ddd42cf9 --- /dev/null +++ b/src/nos/lib/messages_lib/00d1_a349__20pid_3dNET_2fROM_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___00d1_a349__20pid_3dNET_2fROM_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 20 70 69 64 3d 4e 45 54 2f +R 00 00 01 00 +T 0b 00 00 00 52 4f 4d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00d2_932f__20pid_3dTEXNET_0a.rel b/src/nos/lib/messages_lib/00d2_932f__20pid_3dTEXNET_0a.rel new file mode 100644 index 00000000..4f47decb --- /dev/null +++ b/src/nos/lib/messages_lib/00d2_932f__20pid_3dTEXNET_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___00d2_932f__20pid_3dTEXNET_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 20 70 69 64 3d 54 45 58 4e +R 00 00 01 00 +T 0b 00 00 00 45 54 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00d3_4927__20pid_3dText_0a.rel b/src/nos/lib/messages_lib/00d3_4927__20pid_3dText_0a.rel new file mode 100644 index 00000000..8c3cf646 --- /dev/null +++ b/src/nos/lib/messages_lib/00d3_4927__20pid_3dText_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___00d3_4927__20pid_3dText_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 20 70 69 64 3d 54 65 78 74 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00d4_c207__20pid_3dX_2e25_0a.rel b/src/nos/lib/messages_lib/00d4_c207__20pid_3dX_2e25_0a.rel new file mode 100644 index 00000000..1af41643 --- /dev/null +++ b/src/nos/lib/messages_lib/00d4_c207__20pid_3dX_2e25_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___00d4_c207__20pid_3dX_2e25_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 20 70 69 64 3d 58 2e 32 35 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00d5_5760__20pipe.rel b/src/nos/lib/messages_lib/00d5_5760__20pipe.rel new file mode 100644 index 00000000..d403eca4 --- /dev/null +++ b/src/nos/lib/messages_lib/00d5_5760__20pipe.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00d5_5760__20pipe Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 70 69 70 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00d6_ac0a__20pointer_20_25u.rel b/src/nos/lib/messages_lib/00d6_ac0a__20pointer_20_25u.rel new file mode 100644 index 00000000..f6ae1e7c --- /dev/null +++ b/src/nos/lib/messages_lib/00d6_ac0a__20pointer_20_25u.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___00d6_ac0a__20pointer_20_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 20 70 6f 69 6e 74 65 72 20 +R 00 00 01 00 +T 0b 00 00 00 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00d7_5557__20prot_20_25s_0a.rel b/src/nos/lib/messages_lib/00d7_5557__20prot_20_25s_0a.rel new file mode 100644 index 00000000..f8e1b8ef --- /dev/null +++ b/src/nos/lib/messages_lib/00d7_5557__20prot_20_25s_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___00d7_5557__20prot_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 20 70 72 6f 74 20 25 73 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00d8_0187__20prot_20_25u_0a.rel b/src/nos/lib/messages_lib/00d8_0187__20prot_20_25u_0a.rel new file mode 100644 index 00000000..9934c5f3 --- /dev/null +++ b/src/nos/lib/messages_lib/00d8_0187__20prot_20_25u_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___00d8_0187__20prot_20_25u_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 20 70 72 6f 74 20 25 75 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00d9_75a2__20prot_200x_25x_20.rel b/src/nos/lib/messages_lib/00d9_75a2__20prot_200x_25x_20.rel new file mode 100644 index 00000000..79f30ea7 --- /dev/null +++ b/src/nos/lib/messages_lib/00d9_75a2__20prot_200x_25x_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___00d9_75a2__20prot_200x_25x_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 20 70 72 6f 74 20 30 78 25 +R 00 00 01 00 +T 0b 00 00 00 78 20 70 72 6c 65 6e 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00da_3541__20prot_20IP.rel b/src/nos/lib/messages_lib/00da_3541__20prot_20IP.rel new file mode 100644 index 00000000..1566f048 --- /dev/null +++ b/src/nos/lib/messages_lib/00da_3541__20prot_20IP.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___00da_3541__20prot_20IP Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 20 70 72 6f 74 20 49 50 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00db_1888__20receive_20_20_2d.rel b/src/nos/lib/messages_lib/00db_1888__20receive_20_20_2d.rel new file mode 100644 index 00000000..fff86267 --- /dev/null +++ b/src/nos/lib/messages_lib/00db_1888__20receive_20_20_2d.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 49 flags 0 +S ___00db_1888__20receive_20_20_2d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 47 00 20 72 65 63 65 69 76 65 20 +R 00 00 01 00 +T 0b 00 00 00 20 2d 20 66 72 61 6d 65 73 3a 20 +R 00 00 01 00 +T 16 00 00 00 20 25 2d 35 64 20 20 63 72 63 65 +R 00 00 01 00 +T 21 00 00 00 72 72 73 3a 20 25 2d 35 64 20 20 +R 00 00 01 00 +T 2c 00 00 00 61 62 6f 72 74 73 3a 20 25 2d 35 +R 00 00 01 00 +T 37 00 00 00 64 20 20 64 6d 61 6f 72 75 6e 3a +R 00 00 01 00 +T 42 00 00 00 20 25 2d 35 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00dc_f2f3__20sock.rel b/src/nos/lib/messages_lib/00dc_f2f3__20sock.rel new file mode 100644 index 00000000..3dd95393 --- /dev/null +++ b/src/nos/lib/messages_lib/00dc_f2f3__20sock.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00dc_f2f3__20sock Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 20 73 6f 63 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00dd_c067__20spi_20_25lx.rel b/src/nos/lib/messages_lib/00dd_c067__20spi_20_25lx.rel new file mode 100644 index 00000000..aa064c8c --- /dev/null +++ b/src/nos/lib/messages_lib/00dd_c067__20spi_20_25lx.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___00dd_c067__20spi_20_25lx Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 20 73 70 69 20 25 6c 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00de_2902__20sw_20over_20_25l.rel b/src/nos/lib/messages_lib/00de_2902__20sw_20over_20_25l.rel new file mode 100644 index 00000000..13795014 --- /dev/null +++ b/src/nos/lib/messages_lib/00de_2902__20sw_20over_20_25l.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___00de_2902__20sw_20over_20_25l Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 20 73 77 20 6f 76 65 72 20 +R 00 00 01 00 +T 0b 00 00 00 25 6c 75 20 73 77 20 68 69 20 25 +R 00 00 01 00 +T 16 00 00 00 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00df_0bfc__20tos_20_25u.rel b/src/nos/lib/messages_lib/00df_0bfc__20tos_20_25u.rel new file mode 100644 index 00000000..31111205 --- /dev/null +++ b/src/nos/lib/messages_lib/00df_0bfc__20tos_20_25u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___00df_0bfc__20tos_20_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 20 74 6f 73 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00e0_e1c5__20trace_20file_3a_.rel b/src/nos/lib/messages_lib/00e0_e1c5__20trace_20file_3a_.rel new file mode 100644 index 00000000..92373d74 --- /dev/null +++ b/src/nos/lib/messages_lib/00e0_e1c5__20trace_20file_3a_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___00e0_e1c5__20trace_20file_3a_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 20 74 72 61 63 65 20 66 69 +R 00 00 01 00 +T 0b 00 00 00 6c 65 3a 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00e1_ca97__20tracing_20off_0a.rel b/src/nos/lib/messages_lib/00e1_ca97__20tracing_20off_0a.rel new file mode 100644 index 00000000..985e746e --- /dev/null +++ b/src/nos/lib/messages_lib/00e1_ca97__20tracing_20off_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___00e1_ca97__20tracing_20off_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 20 74 72 61 63 69 6e 67 20 +R 00 00 01 00 +T 0b 00 00 00 6f 66 66 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00e2_be19__20transmit_20_2d_2.rel b/src/nos/lib/messages_lib/00e2_be19__20transmit_20_2d_2.rel new file mode 100644 index 00000000..3c4ebe9c --- /dev/null +++ b/src/nos/lib/messages_lib/00e2_be19__20transmit_20_2d_2.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 49 flags 0 +S ___00e2_be19__20transmit_20_2d_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 47 00 20 74 72 61 6e 73 6d 69 74 +R 00 00 01 00 +T 0b 00 00 00 20 2d 20 66 72 61 6d 65 73 3a 20 +R 00 00 01 00 +T 16 00 00 00 20 25 2d 35 64 20 20 61 62 6f 72 +R 00 00 01 00 +T 21 00 00 00 74 73 20 3a 20 25 2d 35 64 20 20 +R 00 00 01 00 +T 2c 00 00 00 75 72 75 6e 73 20 3a 20 25 2d 35 +R 00 00 01 00 +T 37 00 00 00 64 20 20 63 74 73 6c 6f 73 73 3a +R 00 00 01 00 +T 42 00 00 00 20 25 2d 35 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00e3_afd2__20ttl_20_25d_0a.rel b/src/nos/lib/messages_lib/00e3_afd2__20ttl_20_25d_0a.rel new file mode 100644 index 00000000..07ab4674 --- /dev/null +++ b/src/nos/lib/messages_lib/00e3_afd2__20ttl_20_25d_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___00e3_afd2__20ttl_20_25d_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 20 74 74 6c 20 25 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00e4_6f53__20txseq_20_25d_20r.rel b/src/nos/lib/messages_lib/00e4_6f53__20txseq_20_25d_20r.rel new file mode 100644 index 00000000..efd70a6b --- /dev/null +++ b/src/nos/lib/messages_lib/00e4_6f53__20txseq_20_25d_20r.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___00e4_6f53__20txseq_20_25d_20r Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 20 74 78 73 65 71 20 25 64 +R 00 00 01 00 +T 0b 00 00 00 20 72 78 73 65 71 20 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00e5_c8f3__20type_200x_25x_0a.rel b/src/nos/lib/messages_lib/00e5_c8f3__20type_200x_25x_0a.rel new file mode 100644 index 00000000..90a12ea1 --- /dev/null +++ b/src/nos/lib/messages_lib/00e5_c8f3__20type_200x_25x_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___00e5_c8f3__20type_200x_25x_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 20 74 79 70 65 20 30 78 25 +R 00 00 01 00 +T 0b 00 00 00 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00e6_6772__20type_20ARP_0a.rel b/src/nos/lib/messages_lib/00e6_6772__20type_20ARP_0a.rel new file mode 100644 index 00000000..1a3fa1dc --- /dev/null +++ b/src/nos/lib/messages_lib/00e6_6772__20type_20ARP_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___00e6_6772__20type_20ARP_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 20 74 79 70 65 20 41 52 50 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00e7_5c83__20type_20IP_0a.rel b/src/nos/lib/messages_lib/00e7_5c83__20type_20IP_0a.rel new file mode 100644 index 00000000..c51511f7 --- /dev/null +++ b/src/nos/lib/messages_lib/00e7_5c83__20type_20IP_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___00e7_5c83__20type_20IP_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 20 74 79 70 65 20 49 50 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00e8_f937__20type_20REVARP_0a.rel b/src/nos/lib/messages_lib/00e8_f937__20type_20REVARP_0a.rel new file mode 100644 index 00000000..0665633f --- /dev/null +++ b/src/nos/lib/messages_lib/00e8_f937__20type_20REVARP_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___00e8_f937__20type_20REVARP_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 20 74 79 70 65 20 52 45 56 +R 00 00 01 00 +T 0b 00 00 00 41 52 50 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00e9_c53a__20v.rel b/src/nos/lib/messages_lib/00e9_c53a__20v.rel new file mode 100644 index 00000000..bbc3adb4 --- /dev/null +++ b/src/nos/lib/messages_lib/00e9_c53a__20v.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___00e9_c53a__20v Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 20 76 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ea_9158__20vers_20_25u_20en.rel b/src/nos/lib/messages_lib/00ea_9158__20vers_20_25u_20en.rel new file mode 100644 index 00000000..9e91030b --- /dev/null +++ b/src/nos/lib/messages_lib/00ea_9158__20vers_20_25u_20en.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___00ea_9158__20vers_20_25u_20en Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 20 76 65 72 73 20 25 75 20 +R 00 00 01 00 +T 0b 00 00 00 65 6e 74 72 69 65 73 20 25 75 3a +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00eb_994d__20wnd_20_25d.rel b/src/nos/lib/messages_lib/00eb_994d__20wnd_20_25d.rel new file mode 100644 index 00000000..f9caf208 --- /dev/null +++ b/src/nos/lib/messages_lib/00eb_994d__20wnd_20_25d.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___00eb_994d__20wnd_20_25d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 20 77 6e 64 20 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ec_426e__20_7c_20.rel b/src/nos/lib/messages_lib/00ec_426e__20_7c_20.rel new file mode 100644 index 00000000..3af8ef92 --- /dev/null +++ b/src/nos/lib/messages_lib/00ec_426e__20_7c_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___00ec_426e__20_7c_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 20 7c 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ed_3f0c__21.rel b/src/nos/lib/messages_lib/00ed_3f0c__21.rel new file mode 100644 index 00000000..cb1399af --- /dev/null +++ b/src/nos/lib/messages_lib/00ed_3f0c__21.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4 flags 0 +S ___00ed_3f0c__21 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 02 00 21 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ee_f9eb__21_21_20_25s_20_25.rel b/src/nos/lib/messages_lib/00ee_f9eb__21_21_20_25s_20_25.rel new file mode 100644 index 00000000..b1b2abc0 --- /dev/null +++ b/src/nos/lib/messages_lib/00ee_f9eb__21_21_20_25s_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___00ee_f9eb__21_21_20_25s_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 21 21 20 25 73 20 25 73 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ef_ef2d__21_21_20maximum_20.rel b/src/nos/lib/messages_lib/00ef_ef2d__21_21_20maximum_20.rel new file mode 100644 index 00000000..9cef1c1e --- /dev/null +++ b/src/nos/lib/messages_lib/00ef_ef2d__21_21_20maximum_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___00ef_ef2d__21_21_20maximum_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 21 21 20 6d 61 78 69 6d 75 +R 00 00 01 00 +T 0b 00 00 00 6d 20 54 54 4c 20 65 78 63 65 65 +R 00 00 01 00 +T 16 00 00 00 64 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00f0_55d7__22_25s_22_20_2d_20.rel b/src/nos/lib/messages_lib/00f0_55d7__22_25s_22_20_2d_20.rel new file mode 100644 index 00000000..8ab9fca2 --- /dev/null +++ b/src/nos/lib/messages_lib/00f0_55d7__22_25s_22_20_2d_20.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S ___00f0_55d7__22_25s_22_20_2d_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 24 00 22 25 73 22 20 2d 20 74 61 +R 00 00 01 00 +T 0b 00 00 00 6b 65 73 20 61 74 20 6c 65 61 73 +R 00 00 01 00 +T 16 00 00 00 74 20 6f 6e 65 20 61 72 67 75 6d +R 00 00 01 00 +T 21 00 00 00 65 6e 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00f1_60ae__23_20queries_20eac.rel b/src/nos/lib/messages_lib/00f1_60ae__23_20queries_20eac.rel new file mode 100644 index 00000000..cfc24b2e --- /dev/null +++ b/src/nos/lib/messages_lib/00f1_60ae__23_20queries_20eac.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___00f1_60ae__23_20queries_20eac Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 23 20 71 75 65 72 69 65 73 +R 00 00 01 00 +T 0b 00 00 00 20 65 61 63 68 20 61 74 74 65 6d +R 00 00 01 00 +T 16 00 00 00 70 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00f2_1acc__23_20secs_20to_20w.rel b/src/nos/lib/messages_lib/00f2_1acc__23_20secs_20to_20w.rel new file mode 100644 index 00000000..6693d5a2 --- /dev/null +++ b/src/nos/lib/messages_lib/00f2_1acc__23_20secs_20to_20w.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___00f2_1acc__23_20secs_20to_20w Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 23 20 73 65 63 73 20 74 6f +R 00 00 01 00 +T 0b 00 00 00 20 77 61 69 74 20 66 6f 72 20 72 +R 00 00 01 00 +T 16 00 00 00 65 70 6c 79 20 74 6f 20 71 75 65 +R 00 00 01 00 +T 21 00 00 00 72 79 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00f3_fb95__25_2d10_2e10s_20_2.rel b/src/nos/lib/messages_lib/00f3_fb95__25_2d10_2e10s_20_2.rel new file mode 100644 index 00000000..85161668 --- /dev/null +++ b/src/nos/lib/messages_lib/00f3_fb95__25_2d10_2e10s_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___00f3_fb95__25_2d10_2e10s_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 25 2d 31 30 2e 31 30 73 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00f4_3035__25_2d10s_20IP_20ad.rel b/src/nos/lib/messages_lib/00f4_3035__25_2d10s_20IP_20ad.rel new file mode 100644 index 00000000..fd0c97e1 --- /dev/null +++ b/src/nos/lib/messages_lib/00f4_3035__25_2d10s_20IP_20ad.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29 flags 0 +S ___00f4_3035__25_2d10s_20IP_20ad Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 27 00 25 2d 31 30 73 20 49 50 20 +R 00 00 01 00 +T 0b 00 00 00 61 64 64 72 20 25 73 20 4d 54 55 +R 00 00 01 00 +T 16 00 00 00 20 25 75 20 4c 69 6e 6b 20 65 6e +R 00 00 01 00 +T 21 00 00 00 63 61 70 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00f5_01be__25_2d10s_25_2d17s.rel b/src/nos/lib/messages_lib/00f5_01be__25_2d10s_25_2d17s.rel new file mode 100644 index 00000000..f5ee423e --- /dev/null +++ b/src/nos/lib/messages_lib/00f5_01be__25_2d10s_25_2d17s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___00f5_01be__25_2d10s_25_2d17s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 25 2d 31 30 73 25 2d 31 37 +R 00 00 01 00 +T 0b 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00f6_4da0__25_2d10s_25_2d17s_.rel b/src/nos/lib/messages_lib/00f6_4da0__25_2d10s_25_2d17s_.rel new file mode 100644 index 00000000..a853d108 --- /dev/null +++ b/src/nos/lib/messages_lib/00f6_4da0__25_2d10s_25_2d17s_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___00f6_4da0__25_2d10s_25_2d17s_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 25 2d 31 30 73 25 2d 31 37 +R 00 00 01 00 +T 0b 00 00 00 73 25 38 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00f7_ff4a__25_2d10s_25_2d6s.rel b/src/nos/lib/messages_lib/00f7_ff4a__25_2d10s_25_2d6s.rel new file mode 100644 index 00000000..a6713921 --- /dev/null +++ b/src/nos/lib/messages_lib/00f7_ff4a__25_2d10s_25_2d6s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___00f7_ff4a__25_2d10s_25_2d6s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 25 2d 31 30 73 25 2d 36 73 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00f8_e1c2__25_2d11s_25_2d9s_2.rel b/src/nos/lib/messages_lib/00f8_e1c2__25_2d11s_25_2d9s_2.rel new file mode 100644 index 00000000..885d670b --- /dev/null +++ b/src/nos/lib/messages_lib/00f8_e1c2__25_2d11s_25_2d9s_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___00f8_e1c2__25_2d11s_25_2d9s_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 25 2d 31 31 73 25 2d 39 73 +R 00 00 01 00 +T 0b 00 00 00 25 2d 34 75 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00f9_7335__25_2d13s.rel b/src/nos/lib/messages_lib/00f9_7335__25_2d13s.rel new file mode 100644 index 00000000..a19078e2 --- /dev/null +++ b/src/nos/lib/messages_lib/00f9_7335__25_2d13s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00f9_7335__25_2d13s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 2d 31 33 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00fa_27e5__25_2d15s.rel b/src/nos/lib/messages_lib/00fa_27e5__25_2d15s.rel new file mode 100644 index 00000000..6bf20c84 --- /dev/null +++ b/src/nos/lib/messages_lib/00fa_27e5__25_2d15s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00fa_27e5__25_2d15s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 2d 31 35 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00fb_0d8d__25_2d16s.rel b/src/nos/lib/messages_lib/00fb_0d8d__25_2d16s.rel new file mode 100644 index 00000000..16a8fdca --- /dev/null +++ b/src/nos/lib/messages_lib/00fb_0d8d__25_2d16s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00fb_0d8d__25_2d16s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 2d 31 36 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00fc_e560__25_2d16s_20_20.rel b/src/nos/lib/messages_lib/00fc_e560__25_2d16s_20_20.rel new file mode 100644 index 00000000..5b59e389 --- /dev/null +++ b/src/nos/lib/messages_lib/00fc_e560__25_2d16s_20_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___00fc_e560__25_2d16s_20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 25 2d 31 36 73 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00fd_f903__25_2d16s_25_2d3u_2.rel b/src/nos/lib/messages_lib/00fd_f903__25_2d16s_25_2d3u_2.rel new file mode 100644 index 00000000..590e6369 --- /dev/null +++ b/src/nos/lib/messages_lib/00fd_f903__25_2d16s_25_2d3u_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___00fd_f903__25_2d16s_25_2d3u_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 25 2d 31 36 73 25 2d 33 75 +R 00 00 01 00 +T 0b 00 00 00 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00fe_2609__25_2d16s_25_2d9lu_.rel b/src/nos/lib/messages_lib/00fe_2609__25_2d16s_25_2d9lu_.rel new file mode 100644 index 00000000..0242613e --- /dev/null +++ b/src/nos/lib/messages_lib/00fe_2609__25_2d16s_25_2d9lu_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___00fe_2609__25_2d16s_25_2d9lu_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 25 2d 31 36 73 25 2d 39 6c +R 00 00 01 00 +T 0b 00 00 00 75 25 2d 36 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/00ff_1455__25_2d17s.rel b/src/nos/lib/messages_lib/00ff_1455__25_2d17s.rel new file mode 100644 index 00000000..c210f050 --- /dev/null +++ b/src/nos/lib/messages_lib/00ff_1455__25_2d17s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___00ff_1455__25_2d17s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 2d 31 37 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0100_e920__25_2d20s_258lu_258.rel b/src/nos/lib/messages_lib/0100_e920__25_2d20s_258lu_258.rel new file mode 100644 index 00000000..2e897d7b --- /dev/null +++ b/src/nos/lib/messages_lib/0100_e920__25_2d20s_258lu_258.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___0100_e920__25_2d20s_258lu_258 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 25 2d 32 30 73 25 38 6c 75 +R 00 00 01 00 +T 0b 00 00 00 25 38 6c 75 25 31 30 6c 75 25 31 +R 00 00 01 00 +T 16 00 00 00 30 6c 75 25 31 30 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0101_8589__25_2d22s.rel b/src/nos/lib/messages_lib/0101_8589__25_2d22s.rel new file mode 100644 index 00000000..7072dbdc --- /dev/null +++ b/src/nos/lib/messages_lib/0101_8589__25_2d22s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0101_8589__25_2d22s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 2d 32 32 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0102_b616__25_2d22s_0a.rel b/src/nos/lib/messages_lib/0102_b616__25_2d22s_0a.rel new file mode 100644 index 00000000..49be4dc4 --- /dev/null +++ b/src/nos/lib/messages_lib/0102_b616__25_2d22s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0102_b616__25_2d22s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 25 2d 32 32 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0103_9c51__25_2d23s.rel b/src/nos/lib/messages_lib/0103_9c51__25_2d23s.rel new file mode 100644 index 00000000..2f706b60 --- /dev/null +++ b/src/nos/lib/messages_lib/0103_9c51__25_2d23s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0103_9c51__25_2d23s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 2d 32 33 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0104_bf59__25_2d2u.rel b/src/nos/lib/messages_lib/0104_bf59__25_2d2u.rel new file mode 100644 index 00000000..927a2b92 --- /dev/null +++ b/src/nos/lib/messages_lib/0104_bf59__25_2d2u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0104_bf59__25_2d2u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 2d 32 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0105_6601__25_2d32s_20_28_25l.rel b/src/nos/lib/messages_lib/0105_6601__25_2d32s_20_28_25l.rel new file mode 100644 index 00000000..47de0049 --- /dev/null +++ b/src/nos/lib/messages_lib/0105_6601__25_2d32s_20_28_25l.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___0105_6601__25_2d32s_20_28_25l Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 25 2d 33 32 73 20 28 25 6c +R 00 00 01 00 +T 0b 00 00 00 75 2f 25 6c 75 25 73 29 20 25 73 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0106_a681__25_2d3u.rel b/src/nos/lib/messages_lib/0106_a681__25_2d3u.rel new file mode 100644 index 00000000..55e537f2 --- /dev/null +++ b/src/nos/lib/messages_lib/0106_a681__25_2d3u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0106_a681__25_2d3u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 2d 33 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0107_ea81__25_2d4d.rel b/src/nos/lib/messages_lib/0107_ea81__25_2d4d.rel new file mode 100644 index 00000000..c0a7cd0f --- /dev/null +++ b/src/nos/lib/messages_lib/0107_ea81__25_2d4d.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0107_ea81__25_2d4d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 2d 34 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0108_6f94__25_2d4d_255d_20_25.rel b/src/nos/lib/messages_lib/0108_6f94__25_2d4d_255d_20_25.rel new file mode 100644 index 00000000..f1121d03 --- /dev/null +++ b/src/nos/lib/messages_lib/0108_6f94__25_2d4d_255d_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0108_6f94__25_2d4d_255d_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 25 2d 34 64 25 35 64 20 25 +R 00 00 01 00 +T 0b 00 00 00 2d 31 30 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0109_eb89__25_2d4u.rel b/src/nos/lib/messages_lib/0109_eb89__25_2d4u.rel new file mode 100644 index 00000000..4b2a4bb4 --- /dev/null +++ b/src/nos/lib/messages_lib/0109_eb89__25_2d4u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0109_eb89__25_2d4u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 2d 34 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/010a_2455__25_2d5ld.rel b/src/nos/lib/messages_lib/010a_2455__25_2d5ld.rel new file mode 100644 index 00000000..382561e0 --- /dev/null +++ b/src/nos/lib/messages_lib/010a_2455__25_2d5ld.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___010a_2455__25_2d5ld Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 2d 35 6c 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/010b_90e5__25_2d7lu.rel b/src/nos/lib/messages_lib/010b_90e5__25_2d7lu.rel new file mode 100644 index 00000000..dee110b5 --- /dev/null +++ b/src/nos/lib/messages_lib/010b_90e5__25_2d7lu.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___010b_90e5__25_2d7lu Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 2d 37 6c 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/010c_8982__25_2d7s_20_25_2d8s.rel b/src/nos/lib/messages_lib/010c_8982__25_2d7s_20_25_2d8s.rel new file mode 100644 index 00000000..db8e666b --- /dev/null +++ b/src/nos/lib/messages_lib/010c_8982__25_2d7s_20_25_2d8s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___010c_8982__25_2d7s_20_25_2d8s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 25 2d 37 73 20 25 2d 38 73 +R 00 00 01 00 +T 0b 00 00 00 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/010d_da22__25_2d8lu.rel b/src/nos/lib/messages_lib/010d_da22__25_2d8lu.rel new file mode 100644 index 00000000..f3690cdf --- /dev/null +++ b/src/nos/lib/messages_lib/010d_da22__25_2d8lu.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___010d_da22__25_2d8lu Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 2d 38 6c 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/010e_d1e2__25_2ds.rel b/src/nos/lib/messages_lib/010e_d1e2__25_2ds.rel new file mode 100644 index 00000000..f77c72fc --- /dev/null +++ b/src/nos/lib/messages_lib/010e_d1e2__25_2ds.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___010e_d1e2__25_2ds Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 2d 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/010f_1e56__2502x.rel b/src/nos/lib/messages_lib/010f_1e56__2502x.rel new file mode 100644 index 00000000..4941164d --- /dev/null +++ b/src/nos/lib/messages_lib/010f_1e56__2502x.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___010f_1e56__2502x Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 30 32 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0110_3773__2504x_20_20.rel b/src/nos/lib/messages_lib/0110_3773__2504x_20_20.rel new file mode 100644 index 00000000..14d73b71 --- /dev/null +++ b/src/nos/lib/messages_lib/0110_3773__2504x_20_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0110_3773__2504x_20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 25 30 34 78 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0111_6df9__2504x_20_20_2504x_.rel b/src/nos/lib/messages_lib/0111_6df9__2504x_20_20_2504x_.rel new file mode 100644 index 00000000..f691b75a --- /dev/null +++ b/src/nos/lib/messages_lib/0111_6df9__2504x_20_20_2504x_.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 42 flags 0 +S ___0111_6df9__2504x_20_20_2504x_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 40 00 25 30 34 78 20 20 25 30 34 +R 00 00 01 00 +T 0b 00 00 00 78 3a 25 30 34 78 20 20 25 30 34 +R 00 00 01 00 +T 16 00 00 00 78 3a 25 30 34 78 20 20 25 30 34 +R 00 00 01 00 +T 21 00 00 00 78 20 20 25 30 34 78 20 20 25 30 +R 00 00 01 00 +T 2c 00 00 00 34 78 20 20 25 63 25 63 25 63 20 +R 00 00 01 00 +T 37 00 00 00 25 73 20 25 73 20 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0112_aa0a__2504x_3a_2504x.rel b/src/nos/lib/messages_lib/0112_aa0a__2504x_3a_2504x.rel new file mode 100644 index 00000000..0e3c2e19 --- /dev/null +++ b/src/nos/lib/messages_lib/0112_aa0a__2504x_3a_2504x.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0112_aa0a__2504x_3a_2504x Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 25 30 34 78 3a 25 30 34 78 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0113_83ad__2510lu_20In_2c_20_.rel b/src/nos/lib/messages_lib/0113_83ad__2510lu_20In_2c_20_.rel new file mode 100644 index 00000000..01e5d825 --- /dev/null +++ b/src/nos/lib/messages_lib/0113_83ad__2510lu_20In_2c_20_.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3d flags 0 +S ___0113_83ad__2510lu_20In_2c_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 3b 00 25 31 30 6c 75 20 49 6e 2c +R 00 00 01 00 +T 0b 00 00 00 20 20 25 31 30 6c 75 20 46 6c 61 +R 00 00 01 00 +T 16 00 00 00 67 73 2c 25 36 75 20 4d 45 2c 20 +R 00 00 01 00 +T 21 00 00 00 25 36 75 20 46 45 2c 20 25 36 75 +R 00 00 01 00 +T 2c 00 00 00 20 43 53 45 2c 20 25 36 75 20 6f +R 00 00 01 00 +T 37 00 00 00 74 68 65 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0114_cbd3__2510lu_20Out_2c_20.rel b/src/nos/lib/messages_lib/0114_cbd3__2510lu_20Out_2c_20.rel new file mode 100644 index 00000000..5deb7ec7 --- /dev/null +++ b/src/nos/lib/messages_lib/0114_cbd3__2510lu_20Out_2c_20.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2b flags 0 +S ___0114_cbd3__2510lu_20Out_2c_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 29 00 25 31 30 6c 75 20 4f 75 74 +R 00 00 01 00 +T 0b 00 00 00 2c 20 25 31 30 6c 75 20 46 6c 61 +R 00 00 01 00 +T 16 00 00 00 67 73 2c 25 36 75 20 4d 45 2c 20 +R 00 00 01 00 +T 21 00 00 00 25 36 75 20 46 61 69 6c 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0115_2875__2510lu_2510lu_255l.rel b/src/nos/lib/messages_lib/0115_2875__2510lu_2510lu_255l.rel new file mode 100644 index 00000000..d4744364 --- /dev/null +++ b/src/nos/lib/messages_lib/0115_2875__2510lu_2510lu_255l.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S ___0115_2875__2510lu_2510lu_255l Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 24 00 25 31 30 6c 75 25 31 30 6c +R 00 00 01 00 +T 0b 00 00 00 75 25 35 6c 75 25 38 6c 75 25 38 +R 00 00 01 00 +T 16 00 00 00 6c 75 25 38 6c 75 25 38 6c 75 25 +R 00 00 01 00 +T 21 00 00 00 38 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0116_a689__251s_20_253d_20_20.rel b/src/nos/lib/messages_lib/0116_a689__251s_20_253d_20_20.rel new file mode 100644 index 00000000..72b15b4b --- /dev/null +++ b/src/nos/lib/messages_lib/0116_a689__251s_20_253d_20_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0116_a689__251s_20_253d_20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 25 31 73 20 25 33 64 20 20 +R 00 00 01 00 +T 0b 00 00 00 25 33 64 20 20 25 2d 38 73 20 20 +R 00 00 01 00 +T 16 00 00 00 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0117_e9b8__252d_20_25_2d6s_20.rel b/src/nos/lib/messages_lib/0117_e9b8__252d_20_25_2d6s_20.rel new file mode 100644 index 00000000..d61c692d --- /dev/null +++ b/src/nos/lib/messages_lib/0117_e9b8__252d_20_25_2d6s_20.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3b flags 0 +S ___0117_e9b8__252d_20_25_2d6s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 39 00 25 32 64 20 25 2d 36 73 20 +R 00 00 01 00 +T 0b 00 00 00 20 2a 2a 20 61 73 79 6e 63 68 20 +R 00 00 01 00 +T 16 00 00 00 2a 2a 20 25 37 6c 75 20 25 35 75 +R 00 00 01 00 +T 21 00 00 00 20 25 35 75 20 25 38 6c 75 20 25 +R 00 00 01 00 +T 2c 00 00 00 38 6c 75 20 25 38 6c 75 20 25 38 +R 00 00 01 00 +T 37 00 00 00 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0118_b620__252d_20_25_2d6s_20.rel b/src/nos/lib/messages_lib/0118_b620__252d_20_25_2d6s_20.rel new file mode 100644 index 00000000..8d2b1fbd --- /dev/null +++ b/src/nos/lib/messages_lib/0118_b620__252d_20_25_2d6s_20.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S ___0118_b620__252d_20_25_2d6s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 35 00 25 32 64 20 25 2d 36 73 20 +R 00 00 01 00 +T 0b 00 00 00 25 36 6c 75 20 25 36 6c 75 20 25 +R 00 00 01 00 +T 16 00 00 00 37 6c 75 20 25 35 75 20 25 35 75 +R 00 00 01 00 +T 21 00 00 00 20 25 38 6c 75 20 25 38 6c 75 20 +R 00 00 01 00 +T 2c 00 00 00 25 38 6c 75 20 25 38 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0119_1703__253d_3a.rel b/src/nos/lib/messages_lib/0119_1703__253d_3a.rel new file mode 100644 index 00000000..d14798ff --- /dev/null +++ b/src/nos/lib/messages_lib/0119_1703__253d_3a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0119_1703__253d_3a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 33 64 3a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/011a_b932__254d_20_25_2d8s_25.rel b/src/nos/lib/messages_lib/011a_b932__254d_20_25_2d8s_25.rel new file mode 100644 index 00000000..c37a493d --- /dev/null +++ b/src/nos/lib/messages_lib/011a_b932__254d_20_25_2d8s_25.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___011a_b932__254d_20_25_2d8s_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 25 34 64 20 25 2d 38 73 25 +R 00 00 01 00 +T 0b 00 00 00 2d 39 70 20 25 2d 32 32 73 25 2d +R 00 00 01 00 +T 16 00 00 00 39 70 20 25 2d 31 30 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/011b_936b__254s.rel b/src/nos/lib/messages_lib/011b_936b__254s.rel new file mode 100644 index 00000000..76ef5c12 --- /dev/null +++ b/src/nos/lib/messages_lib/011b_936b__254s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___011b_936b__254s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 34 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/011c_4a96__258lu.rel b/src/nos/lib/messages_lib/011c_4a96__258lu.rel new file mode 100644 index 00000000..ba264312 --- /dev/null +++ b/src/nos/lib/messages_lib/011c_4a96__258lu.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___011c_4a96__258lu Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 38 6c 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/011d_5eaf__258lu_0a.rel b/src/nos/lib/messages_lib/011d_5eaf__258lu_0a.rel new file mode 100644 index 00000000..1b261c06 --- /dev/null +++ b/src/nos/lib/messages_lib/011d_5eaf__258lu_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___011d_5eaf__258lu_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 38 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/011e_3acb__258s.rel b/src/nos/lib/messages_lib/011e_3acb__258s.rel new file mode 100644 index 00000000..abdcd4fa --- /dev/null +++ b/src/nos/lib/messages_lib/011e_3acb__258s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___011e_3acb__258s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 38 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/011f_3341__258u_2510u_2511lu_.rel b/src/nos/lib/messages_lib/011f_3341__258u_2510u_2511lu_.rel new file mode 100644 index 00000000..7a04121a --- /dev/null +++ b/src/nos/lib/messages_lib/011f_3341__258u_2510u_2511lu_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___011f_3341__258u_2510u_2511lu_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 25 38 75 25 31 30 75 25 31 +R 00 00 01 00 +T 0b 00 00 00 31 6c 75 25 31 36 6c 75 25 31 35 +R 00 00 01 00 +T 16 00 00 00 6c 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0120_fd73__259p_20_20_20_253d.rel b/src/nos/lib/messages_lib/0120_fd73__259p_20_20_20_253d.rel new file mode 100644 index 00000000..d1a8a042 --- /dev/null +++ b/src/nos/lib/messages_lib/0120_fd73__259p_20_20_20_253d.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S ___0120_fd73__259p_20_20_20_253d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 24 00 25 39 70 20 20 20 25 33 64 +R 00 00 01 00 +T 0b 00 00 00 20 25 35 64 20 25 35 64 20 25 39 +R 00 00 01 00 +T 16 00 00 00 73 20 20 25 39 73 20 25 2d 39 73 +R 00 00 01 00 +T 21 00 00 00 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0121_b8a6__259p_20_25_2d8d_25.rel b/src/nos/lib/messages_lib/0121_b8a6__259p_20_25_2d8d_25.rel new file mode 100644 index 00000000..5b8562a9 --- /dev/null +++ b/src/nos/lib/messages_lib/0121_b8a6__259p_20_25_2d8d_25.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0121_b8a6__259p_20_25_2d8d_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 25 39 70 20 25 2d 38 64 25 +R 00 00 01 00 +T 0b 00 00 00 2d 38 64 25 2d 31 30 73 25 73 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0122_1719__259p_20_25_2d9s_25.rel b/src/nos/lib/messages_lib/0122_1719__259p_20_25_2d9s_25.rel new file mode 100644 index 00000000..5f86f48d --- /dev/null +++ b/src/nos/lib/messages_lib/0122_1719__259p_20_25_2d9s_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0122_1719__259p_20_25_2d9s_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 25 39 70 20 25 2d 39 73 25 +R 00 00 01 00 +T 0b 00 00 00 63 25 63 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0123_1260__259p_256u_20_20_25.rel b/src/nos/lib/messages_lib/0123_1260__259p_256u_20_20_25.rel new file mode 100644 index 00000000..5d66d83a --- /dev/null +++ b/src/nos/lib/messages_lib/0123_1260__259p_256u_20_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0123_1260__259p_256u_20_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 25 39 70 25 36 75 20 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0124_482b__259p_256u_256u_20_.rel b/src/nos/lib/messages_lib/0124_482b__259p_256u_256u_20_.rel new file mode 100644 index 00000000..36ee7ac8 --- /dev/null +++ b/src/nos/lib/messages_lib/0124_482b__259p_256u_256u_20_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0124_482b__259p_256u_256u_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 25 39 70 25 36 75 25 36 75 +R 00 00 01 00 +T 0b 00 00 00 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0125_fcae__25c.rel b/src/nos/lib/messages_lib/0125_fcae__25c.rel new file mode 100644 index 00000000..2ad191d7 --- /dev/null +++ b/src/nos/lib/messages_lib/0125_fcae__25c.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___0125_fcae__25c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 25 63 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0126_6d8a__25c_20.rel b/src/nos/lib/messages_lib/0126_6d8a__25c_20.rel new file mode 100644 index 00000000..523bf2a6 --- /dev/null +++ b/src/nos/lib/messages_lib/0126_6d8a__25c_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0126_6d8a__25c_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 63 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0127_3d14__25c_20_257s_20_257.rel b/src/nos/lib/messages_lib/0127_3d14__25c_20_257s_20_257.rel new file mode 100644 index 00000000..8841c0c8 --- /dev/null +++ b/src/nos/lib/messages_lib/0127_3d14__25c_20_257s_20_257.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___0127_3d14__25c_20_257s_20_257 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 00 25 63 20 25 37 73 20 25 37 +R 00 00 01 00 +T 0b 00 00 00 6c 64 20 25 30 32 64 2f 25 30 32 +R 00 00 01 00 +T 16 00 00 00 64 20 25 30 32 64 3a 25 30 32 64 +R 00 00 01 00 +T 21 00 00 00 20 25 2d 32 30 73 20 25 73 0a 20 +R 00 00 01 00 +T 2c 00 00 00 20 20 20 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0128_22d3__25c_25c_25c.rel b/src/nos/lib/messages_lib/0128_22d3__25c_25c_25c.rel new file mode 100644 index 00000000..8f58ab21 --- /dev/null +++ b/src/nos/lib/messages_lib/0128_22d3__25c_25c_25c.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0128_22d3__25c_25c_25c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 25 63 25 63 25 63 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0129_4b6e__25c_25c_25c_0a.rel b/src/nos/lib/messages_lib/0129_4b6e__25c_25c_25c_0a.rel new file mode 100644 index 00000000..46319ffe --- /dev/null +++ b/src/nos/lib/messages_lib/0129_4b6e__25c_25c_25c_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0129_4b6e__25c_25c_25c_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 25 63 25 63 25 63 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/012a_2970__25c_25c_25c_253d_2.rel b/src/nos/lib/messages_lib/012a_2970__25c_25c_25c_253d_2.rel new file mode 100644 index 00000000..91bd0eb8 --- /dev/null +++ b/src/nos/lib/messages_lib/012a_2970__25c_25c_25c_253d_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___012a_2970__25c_25c_25c_253d_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 25 63 25 63 25 63 25 33 64 +R 00 00 01 00 +T 0b 00 00 00 20 25 2d 32 37 2e 32 37 73 20 25 +R 00 00 01 00 +T 16 00 00 00 2d 31 32 2e 31 32 73 20 25 35 6c +R 00 00 01 00 +T 21 00 00 00 64 20 25 2e 32 35 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/012b_8514__25c_25s_0a.rel b/src/nos/lib/messages_lib/012b_8514__25c_25s_0a.rel new file mode 100644 index 00000000..18e7010f --- /dev/null +++ b/src/nos/lib/messages_lib/012b_8514__25c_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___012b_8514__25c_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 63 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/012c_086d__25c_5b2J.rel b/src/nos/lib/messages_lib/012c_086d__25c_5b2J.rel new file mode 100644 index 00000000..baedae21 --- /dev/null +++ b/src/nos/lib/messages_lib/012c_086d__25c_5b2J.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___012c_086d__25c_5b2J Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 63 5b 32 4a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/012d_8811__25d.rel b/src/nos/lib/messages_lib/012d_8811__25d.rel new file mode 100644 index 00000000..878fb021 --- /dev/null +++ b/src/nos/lib/messages_lib/012d_8811__25d.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___012d_8811__25d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/012e_aeda__25d_0a.rel b/src/nos/lib/messages_lib/012e_aeda__25d_0a.rel new file mode 100644 index 00000000..5f9989d3 --- /dev/null +++ b/src/nos/lib/messages_lib/012e_aeda__25d_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___012e_aeda__25d_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/012f_cd50__25d_20message_25s_.rel b/src/nos/lib/messages_lib/012f_cd50__25d_20message_25s_.rel new file mode 100644 index 00000000..10aed5c9 --- /dev/null +++ b/src/nos/lib/messages_lib/012f_cd50__25d_20message_25s_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___012f_cd50__25d_20message_25s_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 25 64 20 6d 65 73 73 61 67 +R 00 00 01 00 +T 0b 00 00 00 65 25 73 20 2d 20 20 25 64 20 6e +R 00 00 01 00 +T 16 00 00 00 65 77 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0130_ea62__25ld.rel b/src/nos/lib/messages_lib/0130_ea62__25ld.rel new file mode 100644 index 00000000..1c112a49 --- /dev/null +++ b/src/nos/lib/messages_lib/0130_ea62__25ld.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0130_ea62__25ld Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 6c 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0131_eb6a__25lu.rel b/src/nos/lib/messages_lib/0131_eb6a__25lu.rel new file mode 100644 index 00000000..a3fae857 --- /dev/null +++ b/src/nos/lib/messages_lib/0131_eb6a__25lu.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0131_eb6a__25lu Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 6c 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0132_63ed__25lu_0a.rel b/src/nos/lib/messages_lib/0132_63ed__25lu_0a.rel new file mode 100644 index 00000000..97a20aeb --- /dev/null +++ b/src/nos/lib/messages_lib/0132_63ed__25lu_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0132_63ed__25lu_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0133_f325__25lu_2f_25lu_0a.rel b/src/nos/lib/messages_lib/0133_f325__25lu_2f_25lu_0a.rel new file mode 100644 index 00000000..44a285fb --- /dev/null +++ b/src/nos/lib/messages_lib/0133_f325__25lu_2f_25lu_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0133_f325__25lu_2f_25lu_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 25 6c 75 2f 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0134_d273__25p_20.rel b/src/nos/lib/messages_lib/0134_d273__25p_20.rel new file mode 100644 index 00000000..d4e4071a --- /dev/null +++ b/src/nos/lib/messages_lib/0134_d273__25p_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0134_d273__25p_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 70 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0135_1c93__25p_20_256lu.rel b/src/nos/lib/messages_lib/0135_1c93__25p_20_256lu.rel new file mode 100644 index 00000000..4736aebf --- /dev/null +++ b/src/nos/lib/messages_lib/0135_1c93__25p_20_256lu.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0135_1c93__25p_20_256lu Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 25 70 20 25 36 6c 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0136_ec2f__25s.rel b/src/nos/lib/messages_lib/0136_ec2f__25s.rel new file mode 100644 index 00000000..a2556041 --- /dev/null +++ b/src/nos/lib/messages_lib/0136_ec2f__25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___0136_ec2f__25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0137_7643__25s_0a.rel b/src/nos/lib/messages_lib/0137_7643__25s_0a.rel new file mode 100644 index 00000000..adbd0084 --- /dev/null +++ b/src/nos/lib/messages_lib/0137_7643__25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0137_7643__25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0138_0276__25s_0a_25s_0a.rel b/src/nos/lib/messages_lib/0138_0276__25s_0a_25s_0a.rel new file mode 100644 index 00000000..121e53a6 --- /dev/null +++ b/src/nos/lib/messages_lib/0138_0276__25s_0a_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0138_0276__25s_0a_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 25 73 0a 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0139_f81b__25s_20.rel b/src/nos/lib/messages_lib/0139_f81b__25s_20.rel new file mode 100644 index 00000000..e665f41e --- /dev/null +++ b/src/nos/lib/messages_lib/0139_f81b__25s_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0139_f81b__25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 73 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/013a_8b7d__25s_20_2502d_2502d.rel b/src/nos/lib/messages_lib/013a_8b7d__25s_20_2502d_2502d.rel new file mode 100644 index 00000000..b4c5a060 --- /dev/null +++ b/src/nos/lib/messages_lib/013a_8b7d__25s_20_2502d_2502d.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___013a_8b7d__25s_20_2502d_2502d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 25 73 20 25 30 32 64 25 30 +R 00 00 01 00 +T 0b 00 00 00 32 64 25 30 32 64 20 25 30 32 64 +R 00 00 01 00 +T 16 00 00 00 25 30 32 64 25 30 32 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/013b_7be3__25s_20_25p_0a.rel b/src/nos/lib/messages_lib/013b_7be3__25s_20_25p_0a.rel new file mode 100644 index 00000000..4dd26ef5 --- /dev/null +++ b/src/nos/lib/messages_lib/013b_7be3__25s_20_25p_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___013b_7be3__25s_20_25p_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 25 73 20 25 70 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/013c_518b__25s_20_25s_0a.rel b/src/nos/lib/messages_lib/013c_518b__25s_20_25s_0a.rel new file mode 100644 index 00000000..3ea571cb --- /dev/null +++ b/src/nos/lib/messages_lib/013c_518b__25s_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___013c_518b__25s_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 25 73 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/013d_ca49__25s_20_25s_3a_20_2.rel b/src/nos/lib/messages_lib/013d_ca49__25s_20_25s_3a_20_2.rel new file mode 100644 index 00000000..64aa7ee8 --- /dev/null +++ b/src/nos/lib/messages_lib/013d_ca49__25s_20_25s_3a_20_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29 flags 0 +S ___013d_ca49__25s_20_25s_3a_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 27 00 25 73 20 25 73 3a 20 25 6c +R 00 00 01 00 +T 0b 00 00 00 75 20 62 79 74 65 73 20 69 6e 20 +R 00 00 01 00 +T 16 00 00 00 25 6c 75 20 73 65 63 20 28 25 6c +R 00 00 01 00 +T 21 00 00 00 75 2f 73 65 63 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/013e_43c6__25s_20_25s_3a_20Er.rel b/src/nos/lib/messages_lib/013e_43c6__25s_20_25s_3a_20Er.rel new file mode 100644 index 00000000..421eaaa3 --- /dev/null +++ b/src/nos/lib/messages_lib/013e_43c6__25s_20_25s_3a_20Er.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2b flags 0 +S ___013e_43c6__25s_20_25s_3a_20Er Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 29 00 25 73 20 25 73 3a 20 45 72 +R 00 00 01 00 +T 0b 00 00 00 72 6f 72 2f 61 62 6f 72 74 20 64 +R 00 00 01 00 +T 16 00 00 00 75 72 69 6e 67 20 64 61 74 61 20 +R 00 00 01 00 +T 21 00 00 00 74 72 61 6e 73 66 65 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/013f_b8b7__25s_20_2d_20.rel b/src/nos/lib/messages_lib/013f_b8b7__25s_20_2d_20.rel new file mode 100644 index 00000000..c3be2a86 --- /dev/null +++ b/src/nos/lib/messages_lib/013f_b8b7__25s_20_2d_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___013f_b8b7__25s_20_2d_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 73 20 2d 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0140_1170__25s_20_2d_20Differ.rel b/src/nos/lib/messages_lib/0140_1170__25s_20_2d_20Differ.rel new file mode 100644 index 00000000..39f0f3aa --- /dev/null +++ b/src/nos/lib/messages_lib/0140_1170__25s_20_2d_20Differ.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0140_1170__25s_20_2d_20Differ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 25 73 20 2d 20 44 69 66 66 +R 00 00 01 00 +T 0b 00 00 00 65 72 65 6e 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0141_d4cc__25s_20_2d_20Remote.rel b/src/nos/lib/messages_lib/0141_d4cc__25s_20_2d_20Remote.rel new file mode 100644 index 00000000..1b2c5d54 --- /dev/null +++ b/src/nos/lib/messages_lib/0141_d4cc__25s_20_2d_20Remote.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___0141_d4cc__25s_20_2d_20Remote Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 25 73 20 2d 20 52 65 6d 6f +R 00 00 01 00 +T 0b 00 00 00 74 65 20 65 78 69 74 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0142_4968__25s_20_2d_20Same_0.rel b/src/nos/lib/messages_lib/0142_4968__25s_20_2d_20Same_0.rel new file mode 100644 index 00000000..2eec3ec1 --- /dev/null +++ b/src/nos/lib/messages_lib/0142_4968__25s_20_2d_20Same_0.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0142_4968__25s_20_2d_20Same_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 25 73 20 2d 20 53 61 6d 65 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0143_ace2__25s_20dialer_3a_20.rel b/src/nos/lib/messages_lib/0143_ace2__25s_20dialer_3a_20.rel new file mode 100644 index 00000000..4b240c92 --- /dev/null +++ b/src/nos/lib/messages_lib/0143_ace2__25s_20dialer_3a_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0143_ace2__25s_20dialer_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 25 73 20 64 69 61 6c 65 72 +R 00 00 01 00 +T 0b 00 00 00 3a 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0144_933b__25s_20errno_20_25d.rel b/src/nos/lib/messages_lib/0144_933b__25s_20errno_20_25d.rel new file mode 100644 index 00000000..aab349bf --- /dev/null +++ b/src/nos/lib/messages_lib/0144_933b__25s_20errno_20_25d.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0144_933b__25s_20errno_20_25d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 25 73 20 65 72 72 6e 6f 20 +R 00 00 01 00 +T 0b 00 00 00 25 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0145_f768__25s_20file_25s_2e_.rel b/src/nos/lib/messages_lib/0145_f768__25s_20file_25s_2e_.rel new file mode 100644 index 00000000..423e1497 --- /dev/null +++ b/src/nos/lib/messages_lib/0145_f768__25s_20file_25s_2e_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S ___0145_f768__25s_20file_25s_2e_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2f 00 25 73 20 66 69 6c 65 25 73 +R 00 00 01 00 +T 0b 00 00 00 2e 20 25 73 20 62 79 74 65 73 20 +R 00 00 01 00 +T 16 00 00 00 66 72 65 65 2e 20 44 69 73 6b 20 +R 00 00 01 00 +T 21 00 00 00 73 69 7a 65 20 25 73 20 62 79 74 +R 00 00 01 00 +T 2c 00 00 00 65 73 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0146_c691__25s_20is_20unreach.rel b/src/nos/lib/messages_lib/0146_c691__25s_20is_20unreach.rel new file mode 100644 index 00000000..3dc5c4b7 --- /dev/null +++ b/src/nos/lib/messages_lib/0146_c691__25s_20is_20unreach.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0146_c691__25s_20is_20unreach Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 25 73 20 69 73 20 75 6e 72 +R 00 00 01 00 +T 0b 00 00 00 65 61 63 68 61 62 6c 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0147_a4a4__25s_20logged_20in.rel b/src/nos/lib/messages_lib/0147_a4a4__25s_20logged_20in.rel new file mode 100644 index 00000000..a51c0cb1 --- /dev/null +++ b/src/nos/lib/messages_lib/0147_a4a4__25s_20logged_20in.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0147_a4a4__25s_20logged_20in Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 25 73 20 6c 6f 67 67 65 64 +R 00 00 01 00 +T 0b 00 00 00 20 69 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0148_a64e__25s_20logged_20in_.rel b/src/nos/lib/messages_lib/0148_a64e__25s_20logged_20in_.rel new file mode 100644 index 00000000..0ba0ebd7 --- /dev/null +++ b/src/nos/lib/messages_lib/0148_a64e__25s_20logged_20in_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___0148_a64e__25s_20logged_20in_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 25 73 20 6c 6f 67 67 65 64 +R 00 00 01 00 +T 0b 00 00 00 20 69 6e 2c 20 49 44 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0149_b314__25s_20refs_20to_20.rel b/src/nos/lib/messages_lib/0149_b314__25s_20refs_20to_20.rel new file mode 100644 index 00000000..7f6f88b4 --- /dev/null +++ b/src/nos/lib/messages_lib/0149_b314__25s_20refs_20to_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0149_b314__25s_20refs_20to_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 25 73 20 72 65 66 73 20 74 +R 00 00 01 00 +T 0b 00 00 00 6f 20 69 6e 6f 64 65 20 25 75 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/014a_bd91__25s_20remain_20_25.rel b/src/nos/lib/messages_lib/014a_bd91__25s_20remain_20_25.rel new file mode 100644 index 00000000..bcf722a5 --- /dev/null +++ b/src/nos/lib/messages_lib/014a_bd91__25s_20remain_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___014a_bd91__25s_20remain_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 25 73 20 72 65 6d 61 69 6e +R 00 00 01 00 +T 0b 00 00 00 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/014b_bf9e__25s_20thru_20.rel b/src/nos/lib/messages_lib/014b_bf9e__25s_20thru_20.rel new file mode 100644 index 00000000..29a88a2f --- /dev/null +++ b/src/nos/lib/messages_lib/014b_bf9e__25s_20thru_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___014b_bf9e__25s_20thru_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 25 73 20 74 68 72 75 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/014c_243b__25s_20type_20_25s_.rel b/src/nos/lib/messages_lib/014c_243b__25s_20type_20_25s_.rel new file mode 100644 index 00000000..d15e09fd --- /dev/null +++ b/src/nos/lib/messages_lib/014c_243b__25s_20type_20_25s_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___014c_243b__25s_20type_20_25s_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 25 73 20 74 79 70 65 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 20 63 6c 61 73 73 20 25 75 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/014d_7d69__25s_25_25_25s_2ebb.rel b/src/nos/lib/messages_lib/014d_7d69__25s_25_25_25s_2ebb.rel new file mode 100644 index 00000000..441f2e74 --- /dev/null +++ b/src/nos/lib/messages_lib/014d_7d69__25s_25_25_25s_2ebb.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___014d_7d69__25s_25_25_25s_2ebb Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 25 73 25 25 25 73 2e 62 62 +R 00 00 01 00 +T 0b 00 00 00 73 40 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/014e_d324__25s_25c_0a.rel b/src/nos/lib/messages_lib/014e_d324__25s_25c_0a.rel new file mode 100644 index 00000000..6a1ca1ed --- /dev/null +++ b/src/nos/lib/messages_lib/014e_d324__25s_25c_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___014e_d324__25s_25c_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 73 25 63 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/014f_ce9c__25s_25c_25c_25c.rel b/src/nos/lib/messages_lib/014f_ce9c__25s_25c_25c_25c.rel new file mode 100644 index 00000000..a0003413 --- /dev/null +++ b/src/nos/lib/messages_lib/014f_ce9c__25s_25c_25c_25c.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___014f_ce9c__25s_25c_25c_25c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 25 73 25 63 25 63 25 63 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0150_910e__25s_25s.rel b/src/nos/lib/messages_lib/0150_910e__25s_25s.rel new file mode 100644 index 00000000..f2136020 --- /dev/null +++ b/src/nos/lib/messages_lib/0150_910e__25s_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0150_910e__25s_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 73 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0151_46b5__25s_25s_0a.rel b/src/nos/lib/messages_lib/0151_46b5__25s_25s_0a.rel new file mode 100644 index 00000000..23c46c78 --- /dev/null +++ b/src/nos/lib/messages_lib/0151_46b5__25s_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0151_46b5__25s_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 25 73 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0152_4d3a__25s_25s_0a_0a.rel b/src/nos/lib/messages_lib/0152_4d3a__25s_25s_0a_0a.rel new file mode 100644 index 00000000..70ff8128 --- /dev/null +++ b/src/nos/lib/messages_lib/0152_4d3a__25s_25s_0a_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0152_4d3a__25s_25s_0a_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 25 73 25 73 0a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0153_47c0__25s_3a.rel b/src/nos/lib/messages_lib/0153_47c0__25s_3a.rel new file mode 100644 index 00000000..7843c97b --- /dev/null +++ b/src/nos/lib/messages_lib/0153_47c0__25s_3a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0153_47c0__25s_3a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 73 3a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0154_6911__25s_3a_0a.rel b/src/nos/lib/messages_lib/0154_6911__25s_3a_0a.rel new file mode 100644 index 00000000..c21b4bd5 --- /dev/null +++ b/src/nos/lib/messages_lib/0154_6911__25s_3a_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0154_6911__25s_3a_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 73 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0155_e749__25s_3a_20.rel b/src/nos/lib/messages_lib/0155_e749__25s_3a_20.rel new file mode 100644 index 00000000..e14b2a60 --- /dev/null +++ b/src/nos/lib/messages_lib/0155_e749__25s_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0155_e749__25s_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 73 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0156_650d__25s_3a_20_25d_20me.rel b/src/nos/lib/messages_lib/0156_650d__25s_3a_20_25d_20me.rel new file mode 100644 index 00000000..0e4c2647 --- /dev/null +++ b/src/nos/lib/messages_lib/0156_650d__25s_3a_20_25d_20me.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0156_650d__25s_3a_20_25d_20me Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 25 73 3a 20 25 64 20 6d 65 +R 00 00 01 00 +T 0b 00 00 00 73 73 61 67 65 25 73 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0157_86f5__25s_3a_20_25ld_0a.rel b/src/nos/lib/messages_lib/0157_86f5__25s_3a_20_25ld_0a.rel new file mode 100644 index 00000000..5f9c9b61 --- /dev/null +++ b/src/nos/lib/messages_lib/0157_86f5__25s_3a_20_25ld_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0157_86f5__25s_3a_20_25ld_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 25 73 3a 20 25 6c 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0158_7189__25s_3a_20_25s_0a.rel b/src/nos/lib/messages_lib/0158_7189__25s_3a_20_25s_0a.rel new file mode 100644 index 00000000..e2817b85 --- /dev/null +++ b/src/nos/lib/messages_lib/0158_7189__25s_3a_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0158_7189__25s_3a_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 25 73 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0159_35bd__25s_3a_20_25s_2c.rel b/src/nos/lib/messages_lib/0159_35bd__25s_3a_20_25s_2c.rel new file mode 100644 index 00000000..fd343866 --- /dev/null +++ b/src/nos/lib/messages_lib/0159_35bd__25s_3a_20_25s_2c.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0159_35bd__25s_3a_20_25s_2c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 25 73 3a 20 25 73 2c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/015a_adab__25s_3a_20Interface.rel b/src/nos/lib/messages_lib/015a_adab__25s_3a_20Interface.rel new file mode 100644 index 00000000..ac01fa61 --- /dev/null +++ b/src/nos/lib/messages_lib/015a_adab__25s_3a_20Interface.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___015a_adab__25s_3a_20Interface Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 25 73 3a 20 49 6e 74 65 72 +R 00 00 01 00 +T 0b 00 00 00 66 61 63 65 20 75 6e 6b 6e 6f 77 +R 00 00 01 00 +T 16 00 00 00 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/015b_5f8a__25s_3a_20PPP_2fPAP.rel b/src/nos/lib/messages_lib/015b_5f8a__25s_3a_20PPP_2fPAP.rel new file mode 100644 index 00000000..d4db74d4 --- /dev/null +++ b/src/nos/lib/messages_lib/015b_5f8a__25s_3a_20PPP_2fPAP.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___015b_5f8a__25s_3a_20PPP_2fPAP Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 25 73 3a 20 50 50 50 2f 50 +R 00 00 01 00 +T 0b 00 00 00 41 50 20 20 50 61 73 73 77 6f 72 +R 00 00 01 00 +T 16 00 00 00 64 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/015c_0cde__25s_3a_20bad_20dev.rel b/src/nos/lib/messages_lib/015c_0cde__25s_3a_20bad_20dev.rel new file mode 100644 index 00000000..e5377e26 --- /dev/null +++ b/src/nos/lib/messages_lib/015c_0cde__25s_3a_20bad_20dev.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___015c_0cde__25s_3a_20bad_20dev Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 25 73 3a 20 62 61 64 20 64 +R 00 00 01 00 +T 0b 00 00 00 65 76 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/015d_5351__25s_3a_20bad_20ino.rel b/src/nos/lib/messages_lib/015d_5351__25s_3a_20bad_20ino.rel new file mode 100644 index 00000000..457630ae --- /dev/null +++ b/src/nos/lib/messages_lib/015d_5351__25s_3a_20bad_20ino.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___015d_5351__25s_3a_20bad_20ino Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 25 73 3a 20 62 61 64 20 69 +R 00 00 01 00 +T 0b 00 00 00 6e 6f 64 65 20 6e 75 6d 62 65 72 +R 00 00 01 00 +T 16 00 00 00 20 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/015e_8c96__25s_3a_20corrupted.rel b/src/nos/lib/messages_lib/015e_8c96__25s_3a_20corrupted.rel new file mode 100644 index 00000000..bba3ea4c --- /dev/null +++ b/src/nos/lib/messages_lib/015e_8c96__25s_3a_20corrupted.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___015e_8c96__25s_3a_20corrupted Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 25 73 3a 20 63 6f 72 72 75 +R 00 00 01 00 +T 0b 00 00 00 70 74 65 64 20 69 6e 6f 64 65 20 +R 00 00 01 00 +T 16 00 00 00 30 78 25 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/015f_d157__25s_3a_20fs_20of_2.rel b/src/nos/lib/messages_lib/015f_d157__25s_3a_20fs_20of_2.rel new file mode 100644 index 00000000..530b42fb --- /dev/null +++ b/src/nos/lib/messages_lib/015f_d157__25s_3a_20fs_20of_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___015f_d157__25s_3a_20fs_20of_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 25 73 3a 20 66 73 20 6f 66 +R 00 00 01 00 +T 0b 00 00 00 20 64 65 76 20 25 75 20 6d 61 72 +R 00 00 01 00 +T 16 00 00 00 6b 65 64 20 61 73 20 62 61 64 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0160_1d98__25s_3a_20local_20n.rel b/src/nos/lib/messages_lib/0160_1d98__25s_3a_20local_20n.rel new file mode 100644 index 00000000..933e3f3f --- /dev/null +++ b/src/nos/lib/messages_lib/0160_1d98__25s_3a_20local_20n.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___0160_1d98__25s_3a_20local_20n Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 25 73 3a 20 6c 6f 63 61 6c +R 00 00 01 00 +T 0b 00 00 00 20 6e 61 6d 65 73 20 6e 6f 74 20 +R 00 00 01 00 +T 16 00 00 00 73 75 70 70 6f 72 74 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0161_bba5__25s_3a_20mode_20_2.rel b/src/nos/lib/messages_lib/0161_bba5__25s_3a_20mode_20_2.rel new file mode 100644 index 00000000..f0434db6 --- /dev/null +++ b/src/nos/lib/messages_lib/0161_bba5__25s_3a_20mode_20_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0161_bba5__25s_3a_20mode_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 25 73 3a 20 6d 6f 64 65 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 20 49 6e 69 74 20 66 61 69 +R 00 00 01 00 +T 16 00 00 00 6c 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0162_60cc__25s_3a_20not_20a_2.rel b/src/nos/lib/messages_lib/0162_60cc__25s_3a_20not_20a_2.rel new file mode 100644 index 00000000..bc657f0a --- /dev/null +++ b/src/nos/lib/messages_lib/0162_60cc__25s_3a_20not_20a_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0162_60cc__25s_3a_20not_20a_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 25 73 3a 20 6e 6f 74 20 61 +R 00 00 01 00 +T 0b 00 00 00 20 50 50 50 20 69 6e 74 65 72 66 +R 00 00 01 00 +T 16 00 00 00 61 63 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0163_4ed5__25s_3a_20release_5.rel b/src/nos/lib/messages_lib/0163_4ed5__25s_3a_20release_5.rel new file mode 100644 index 00000000..bf65dbd7 --- /dev/null +++ b/src/nos/lib/messages_lib/0163_4ed5__25s_3a_20release_5.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___0163_4ed5__25s_3a_20release_5 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 25 73 3a 20 72 65 6c 65 61 +R 00 00 01 00 +T 0b 00 00 00 73 65 5f 74 79 70 65 20 65 72 72 +R 00 00 01 00 +T 16 00 00 00 6f 72 20 63 6f 64 65 20 25 75 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0164_04ae__25s_3a_20rtt_20_25.rel b/src/nos/lib/messages_lib/0164_04ae__25s_3a_20rtt_20_25.rel new file mode 100644 index 00000000..8b82235b --- /dev/null +++ b/src/nos/lib/messages_lib/0164_04ae__25s_3a_20rtt_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0164_04ae__25s_3a_20rtt_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 25 73 3a 20 72 74 74 20 25 +R 00 00 01 00 +T 0b 00 00 00 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0165_db35__25s_3a_20srtt_20_2.rel b/src/nos/lib/messages_lib/0165_db35__25s_3a_20srtt_20_2.rel new file mode 100644 index 00000000..59099400 --- /dev/null +++ b/src/nos/lib/messages_lib/0165_db35__25s_3a_20srtt_20_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0165_db35__25s_3a_20srtt_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 25 73 3a 20 73 72 74 74 20 +R 00 00 01 00 +T 0b 00 00 00 25 6c 75 20 6d 64 65 76 20 25 6c +R 00 00 01 00 +T 16 00 00 00 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0166_65f3__25s_3c_25ld_40_25s.rel b/src/nos/lib/messages_lib/0166_65f3__25s_3c_25ld_40_25s.rel new file mode 100644 index 00000000..bc739f95 --- /dev/null +++ b/src/nos/lib/messages_lib/0166_65f3__25s_3c_25ld_40_25s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0166_65f3__25s_3c_25ld_40_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 25 73 3c 25 6c 64 40 25 73 +R 00 00 01 00 +T 0b 00 00 00 3e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0167_6e45__25s_3e_20_25s_20_2.rel b/src/nos/lib/messages_lib/0167_6e45__25s_3e_20_25s_20_2.rel new file mode 100644 index 00000000..2e22d72b --- /dev/null +++ b/src/nos/lib/messages_lib/0167_6e45__25s_3e_20_25s_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0167_6e45__25s_3e_20_25s_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 25 73 3e 20 25 73 20 28 25 +R 00 00 01 00 +T 0b 00 00 00 73 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0168_205d__25s_3e_20Invalid_2.rel b/src/nos/lib/messages_lib/0168_205d__25s_3e_20Invalid_2.rel new file mode 100644 index 00000000..e638bc4b --- /dev/null +++ b/src/nos/lib/messages_lib/0168_205d__25s_3e_20Invalid_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 33 flags 0 +S ___0168_205d__25s_3e_20Invalid_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 31 00 25 73 3e 20 49 6e 76 61 6c +R 00 00 01 00 +T 0b 00 00 00 69 64 20 63 6f 6d 6d 61 6e 64 20 +R 00 00 01 00 +T 16 00 00 00 28 43 4f 4e 4e 45 43 54 20 49 44 +R 00 00 01 00 +T 21 00 00 00 45 4e 54 20 4e 4f 44 45 53 20 55 +R 00 00 01 00 +T 2c 00 00 00 53 45 52 53 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0169_c86f__25s_40_25s_0a.rel b/src/nos/lib/messages_lib/0169_c86f__25s_40_25s_0a.rel new file mode 100644 index 00000000..5dd77e58 --- /dev/null +++ b/src/nos/lib/messages_lib/0169_c86f__25s_40_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0169_c86f__25s_40_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 25 73 40 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/016a_82c1__25s_40_25s_3a_0a.rel b/src/nos/lib/messages_lib/016a_82c1__25s_40_25s_3a_0a.rel new file mode 100644 index 00000000..71d8406c --- /dev/null +++ b/src/nos/lib/messages_lib/016a_82c1__25s_40_25s_3a_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___016a_82c1__25s_40_25s_3a_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 25 73 40 25 73 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/016b_9fa6__25sMAILER_2dDAEMON.rel b/src/nos/lib/messages_lib/016b_9fa6__25sMAILER_2dDAEMON.rel new file mode 100644 index 00000000..5429b950 --- /dev/null +++ b/src/nos/lib/messages_lib/016b_9fa6__25sMAILER_2dDAEMON.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S ___016b_9fa6__25sMAILER_2dDAEMON Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2e 00 25 73 4d 41 49 4c 45 52 2d +R 00 00 01 00 +T 0b 00 00 00 44 41 45 4d 4f 4e 40 25 73 20 28 +R 00 00 01 00 +T 16 00 00 00 4d 61 69 6c 20 44 65 6c 69 76 65 +R 00 00 01 00 +T 21 00 00 00 72 79 20 53 75 62 73 79 73 74 65 +R 00 00 01 00 +T 2c 00 00 00 6d 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/016c_c284__25sR_0a.rel b/src/nos/lib/messages_lib/016c_c284__25sR_0a.rel new file mode 100644 index 00000000..63cc879d --- /dev/null +++ b/src/nos/lib/messages_lib/016c_c284__25sR_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___016c_c284__25sR_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 25 73 52 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/016d_2293__25u_0a.rel b/src/nos/lib/messages_lib/016d_2293__25u_0a.rel new file mode 100644 index 00000000..a55d5fe2 --- /dev/null +++ b/src/nos/lib/messages_lib/016d_2293__25u_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___016d_2293__25u_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/016e_c0bd__25u_20additional_3.rel b/src/nos/lib/messages_lib/016e_c0bd__25u_20additional_3.rel new file mode 100644 index 00000000..70917234 --- /dev/null +++ b/src/nos/lib/messages_lib/016e_c0bd__25u_20additional_3.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___016e_c0bd__25u_20additional_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 25 75 20 61 64 64 69 74 69 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 61 6c 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/016f_7db0__25u_20answers_3a_0.rel b/src/nos/lib/messages_lib/016f_7db0__25u_20answers_3a_0.rel new file mode 100644 index 00000000..8803d28f --- /dev/null +++ b/src/nos/lib/messages_lib/016f_7db0__25u_20answers_3a_0.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___016f_7db0__25u_20answers_3a_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 25 75 20 61 6e 73 77 65 72 +R 00 00 01 00 +T 0b 00 00 00 73 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0170_7c48__25u_20authority_3a.rel b/src/nos/lib/messages_lib/0170_7c48__25u_20authority_3a.rel new file mode 100644 index 00000000..13f08143 --- /dev/null +++ b/src/nos/lib/messages_lib/0170_7c48__25u_20authority_3a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0170_7c48__25u_20authority_3a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 25 75 20 61 75 74 68 6f 72 +R 00 00 01 00 +T 0b 00 00 00 69 74 79 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0171_b843__25u_20questions_3a.rel b/src/nos/lib/messages_lib/0171_b843__25u_20questions_3a.rel new file mode 100644 index 00000000..6c98dbd8 --- /dev/null +++ b/src/nos/lib/messages_lib/0171_b843__25u_20questions_3a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0171_b843__25u_20questions_3a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 25 75 20 71 75 65 73 74 69 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 73 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0172_af86__25u_3a_20calls_20_.rel b/src/nos/lib/messages_lib/0172_af86__25u_3a_20calls_20_.rel new file mode 100644 index 00000000..012a9ff5 --- /dev/null +++ b/src/nos/lib/messages_lib/0172_af86__25u_3a_20calls_20_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S ___0172_af86__25u_3a_20calls_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2f 00 25 75 3a 20 63 61 6c 6c 73 +R 00 00 01 00 +T 0b 00 00 00 20 25 6c 75 20 6d 69 6e 20 25 6c +R 00 00 01 00 +T 16 00 00 00 75 20 6d 61 78 20 25 6c 75 20 61 +R 00 00 01 00 +T 21 00 00 00 76 67 20 25 6c 75 20 74 6f 74 20 +R 00 00 01 00 +T 2c 00 00 00 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0173_52fc__25x.rel b/src/nos/lib/messages_lib/0173_52fc__25x.rel new file mode 100644 index 00000000..2a5101a0 --- /dev/null +++ b/src/nos/lib/messages_lib/0173_52fc__25x.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___0173_52fc__25x Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 25 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0174_b099__26AXB_20_20_20_20_.rel b/src/nos/lib/messages_lib/0174_b099__26AXB_20_20_20_20_.rel new file mode 100644 index 00000000..387d610a --- /dev/null +++ b/src/nos/lib/messages_lib/0174_b099__26AXB_20_20_20_20_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2d flags 0 +S ___0174_b099__26AXB_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2b 00 26 41 58 42 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 53 6e 64 2d 51 20 20 20 52 63 +R 00 00 01 00 +T 16 00 00 00 76 2d 51 20 20 20 52 65 6d 6f 74 +R 00 00 01 00 +T 21 00 00 00 65 20 20 20 20 53 74 61 74 65 0a +R 00 00 01 00 +T 2c 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0175_7bf6__26CB_20_20_20_20_2.rel b/src/nos/lib/messages_lib/0175_7bf6__26CB_20_20_20_20_2.rel new file mode 100644 index 00000000..c2f7483d --- /dev/null +++ b/src/nos/lib/messages_lib/0175_7bf6__26CB_20_20_20_20_2.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 44 flags 0 +S ___0175_7bf6__26CB_20_20_20_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 42 00 26 43 42 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 53 6e 64 2d 57 20 53 6e 64 2d +R 00 00 01 00 +T 16 00 00 00 51 20 52 63 76 2d 51 20 20 20 20 +R 00 00 01 00 +T 21 00 00 00 20 4c 55 73 65 72 20 20 20 20 20 +R 00 00 01 00 +T 2c 00 00 00 20 52 55 73 65 72 20 40 4e 6f 64 +R 00 00 01 00 +T 37 00 00 00 65 20 20 20 20 20 53 74 61 74 65 +R 00 00 01 00 +T 42 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0176_c497__26TCB_20_20_20_20_.rel b/src/nos/lib/messages_lib/0176_c497__26TCB_20_20_20_20_.rel new file mode 100644 index 00000000..722895d2 --- /dev/null +++ b/src/nos/lib/messages_lib/0176_c497__26TCB_20_20_20_20_.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4e flags 0 +S ___0176_c497__26TCB_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 4c 00 26 54 43 42 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 52 63 76 2d 51 20 53 6e 64 2d +R 00 00 01 00 +T 16 00 00 00 51 20 20 4c 6f 63 61 6c 20 73 6f +R 00 00 01 00 +T 21 00 00 00 63 6b 65 74 20 20 20 20 20 20 20 +R 00 00 01 00 +T 2c 00 00 00 20 20 20 20 52 65 6d 6f 74 65 20 +R 00 00 01 00 +T 37 00 00 00 73 6f 63 6b 65 74 20 20 20 20 20 +R 00 00 01 00 +T 42 00 00 00 20 20 20 20 20 53 74 61 74 65 0a +R 00 00 01 00 +T 4d 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0177_f73b__26UCB_20_20_20_20_.rel b/src/nos/lib/messages_lib/0177_f73b__26UCB_20_20_20_20_.rel new file mode 100644 index 00000000..9fcbfbef --- /dev/null +++ b/src/nos/lib/messages_lib/0177_f73b__26UCB_20_20_20_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___0177_f73b__26UCB_20_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 26 55 43 42 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 52 63 76 2d 51 20 20 4c 6f 63 +R 00 00 01 00 +T 16 00 00 00 61 6c 20 73 6f 63 6b 65 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0178_aa89__27_25c_27_0a.rel b/src/nos/lib/messages_lib/0178_aa89__27_25c_27_0a.rel new file mode 100644 index 00000000..7dab6eb1 --- /dev/null +++ b/src/nos/lib/messages_lib/0178_aa89__27_25c_27_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0178_aa89__27_25c_27_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 27 25 63 27 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0179_a2cd__28.rel b/src/nos/lib/messages_lib/0179_a2cd__28.rel new file mode 100644 index 00000000..789ac2bf --- /dev/null +++ b/src/nos/lib/messages_lib/0179_a2cd__28.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4 flags 0 +S ___0179_a2cd__28 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 02 00 28 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/017a_ba4c__28_252u_29_25_2d20.rel b/src/nos/lib/messages_lib/017a_ba4c__28_252u_29_25_2d20.rel new file mode 100644 index 00000000..8438541b --- /dev/null +++ b/src/nos/lib/messages_lib/017a_ba4c__28_252u_29_25_2d20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___017a_ba4c__28_252u_29_25_2d20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 28 25 32 75 29 25 2d 32 30 +R 00 00 01 00 +T 0b 00 00 00 73 25 31 30 6c 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/017b_52bf__28F_29.rel b/src/nos/lib/messages_lib/017b_52bf__28F_29.rel new file mode 100644 index 00000000..d5f8ea8d --- /dev/null +++ b/src/nos/lib/messages_lib/017b_52bf__28F_29.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___017b_52bf__28F_29 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 28 46 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/017c_93fe__28P_29.rel b/src/nos/lib/messages_lib/017c_93fe__28P_29.rel new file mode 100644 index 00000000..06605b14 --- /dev/null +++ b/src/nos/lib/messages_lib/017c_93fe__28P_29.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___017c_93fe__28P_29 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 28 50 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/017d_38a6__28P_2fF_29.rel b/src/nos/lib/messages_lib/017d_38a6__28P_2fF_29.rel new file mode 100644 index 00000000..fb656012 --- /dev/null +++ b/src/nos/lib/messages_lib/017d_38a6__28P_2fF_29.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___017d_38a6__28P_2fF_29 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 28 50 2f 46 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/017e_7b70__28compressed_20ALL.rel b/src/nos/lib/messages_lib/017e_7b70__28compressed_20ALL.rel new file mode 100644 index 00000000..8b7f9e10 --- /dev/null +++ b/src/nos/lib/messages_lib/017e_7b70__28compressed_20ALL.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___017e_7b70__28compressed_20ALL Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 28 63 6f 6d 70 72 65 73 73 +R 00 00 01 00 +T 0b 00 00 00 65 64 20 41 4c 4c 2f 55 49 29 09 +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/017f_c1c3__28hopcheck_29_20IC.rel b/src/nos/lib/messages_lib/017f_c1c3__28hopcheck_29_20IC.rel new file mode 100644 index 00000000..825cfd7d --- /dev/null +++ b/src/nos/lib/messages_lib/017f_c1c3__28hopcheck_29_20IC.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___017f_c1c3__28hopcheck_29_20IC Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 28 68 6f 70 63 68 65 63 6b +R 00 00 01 00 +T 0b 00 00 00 29 20 49 43 4d 50 20 66 72 6f 6d +R 00 00 01 00 +T 16 00 00 00 20 25 73 20 28 25 6c 64 6d 73 29 +R 00 00 01 00 +T 21 00 00 00 20 25 73 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0180_565f__28missing_20UI_21_.rel b/src/nos/lib/messages_lib/0180_565f__28missing_20UI_21_.rel new file mode 100644 index 00000000..3387de11 --- /dev/null +++ b/src/nos/lib/messages_lib/0180_565f__28missing_20UI_21_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0180_565f__28missing_20UI_21_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 28 6d 69 73 73 69 6e 67 20 +R 00 00 01 00 +T 0b 00 00 00 55 49 21 29 09 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0181_f935__28not_20odd_21_29_.rel b/src/nos/lib/messages_lib/0181_f935__28not_20odd_21_29_.rel new file mode 100644 index 00000000..6498abdd --- /dev/null +++ b/src/nos/lib/messages_lib/0181_f935__28not_20odd_21_29_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0181_f935__28not_20odd_21_29_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 28 6e 6f 74 20 6f 64 64 21 +R 00 00 01 00 +T 0b 00 00 00 29 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0182_abc9__29_0a.rel b/src/nos/lib/messages_lib/0182_abc9__29_0a.rel new file mode 100644 index 00000000..09cfb840 --- /dev/null +++ b/src/nos/lib/messages_lib/0182_abc9__29_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___0182_abc9__29_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0183_bfa2__2a_2a_20smtp_3a_20.rel b/src/nos/lib/messages_lib/0183_bfa2__2a_2a_20smtp_3a_20.rel new file mode 100644 index 00000000..8f346752 --- /dev/null +++ b/src/nos/lib/messages_lib/0183_bfa2__2a_2a_20smtp_3a_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0183_bfa2__2a_2a_20smtp_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 2a 2a 20 73 6d 74 70 3a 20 +R 00 00 01 00 +T 0b 00 00 00 55 6e 6b 6e 6f 77 6e 20 61 64 64 +R 00 00 01 00 +T 16 00 00 00 72 65 73 73 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0184_1969__2a_2a_2a.rel b/src/nos/lib/messages_lib/0184_1969__2a_2a_2a.rel new file mode 100644 index 00000000..6f38ec1c --- /dev/null +++ b/src/nos/lib/messages_lib/0184_1969__2a_2a_2a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0184_1969__2a_2a_2a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 2a 2a 2a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0185_a448__2a_2a_2a_20Done_0a.rel b/src/nos/lib/messages_lib/0185_a448__2a_2a_2a_20Done_0a.rel new file mode 100644 index 00000000..18a9e704 --- /dev/null +++ b/src/nos/lib/messages_lib/0185_a448__2a_2a_2a_20Done_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0185_a448__2a_2a_2a_20Done_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 2a 2a 2a 20 44 6f 6e 65 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0186_c993__2a_2a_2a_20Unable_.rel b/src/nos/lib/messages_lib/0186_c993__2a_2a_2a_20Unable_.rel new file mode 100644 index 00000000..3cf65b02 --- /dev/null +++ b/src/nos/lib/messages_lib/0186_c993__2a_2a_2a_20Unable_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___0186_c993__2a_2a_2a_20Unable_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 2a 2a 2a 20 55 6e 61 62 6c +R 00 00 01 00 +T 0b 00 00 00 65 20 74 6f 20 61 6c 6c 6f 63 61 +R 00 00 01 00 +T 16 00 00 00 74 65 20 43 43 42 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0187_b489__2a_2a_2a_2a_2a_2a_.rel b/src/nos/lib/messages_lib/0187_b489__2a_2a_2a_2a_2a_2a_.rel new file mode 100644 index 00000000..552f3358 --- /dev/null +++ b/src/nos/lib/messages_lib/0187_b489__2a_2a_2a_2a_2a_2a_.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0187_b489__2a_2a_2a_2a_2a_2a_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 2a 2a 2a 2a 2a 2a 2a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0188_5b29__2c_20.rel b/src/nos/lib/messages_lib/0188_5b29__2c_20.rel new file mode 100644 index 00000000..c294228b --- /dev/null +++ b/src/nos/lib/messages_lib/0188_5b29__2c_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___0188_5b29__2c_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 2c 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0189_1a71__2c_20err_20_25d.rel b/src/nos/lib/messages_lib/0189_1a71__2c_20err_20_25d.rel new file mode 100644 index 00000000..0e0ec925 --- /dev/null +++ b/src/nos/lib/messages_lib/0189_1a71__2c_20err_20_25d.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0189_1a71__2c_20err_20_25d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 2c 20 65 72 72 20 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/018a_099c__2d_2d_2d_2d_2d_20E.rel b/src/nos/lib/messages_lib/018a_099c__2d_2d_2d_2d_2d_20E.rel new file mode 100644 index 00000000..10d4daf1 --- /dev/null +++ b/src/nos/lib/messages_lib/018a_099c__2d_2d_2d_2d_2d_20E.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___018a_099c__2d_2d_2d_2d_2d_20E Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 2d 2d 2d 2d 2d 20 45 6e 64 +R 00 00 01 00 +T 0b 00 00 00 20 6f 66 20 66 6f 72 77 61 72 64 +R 00 00 01 00 +T 16 00 00 00 65 64 20 6d 65 73 73 61 67 65 20 +R 00 00 01 00 +T 21 00 00 00 2d 2d 2d 2d 2d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/018b_01ea__2d_2d_2d_2d_2d_20F.rel b/src/nos/lib/messages_lib/018b_01ea__2d_2d_2d_2d_2d_20F.rel new file mode 100644 index 00000000..ed465f25 --- /dev/null +++ b/src/nos/lib/messages_lib/018b_01ea__2d_2d_2d_2d_2d_20F.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___018b_01ea__2d_2d_2d_2d_2d_20F Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 2d 2d 2d 2d 2d 20 46 6f 72 +R 00 00 01 00 +T 0b 00 00 00 77 61 72 64 65 64 20 6d 65 73 73 +R 00 00 01 00 +T 16 00 00 00 61 67 65 20 2d 2d 2d 2d 2d 0a 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/018c_04ae__2d_2d_2d_2d_2d_2d_.rel b/src/nos/lib/messages_lib/018c_04ae__2d_2d_2d_2d_2d_2d_.rel new file mode 100644 index 00000000..b8ce9677 --- /dev/null +++ b/src/nos/lib/messages_lib/018c_04ae__2d_2d_2d_2d_2d_2d_.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 47 flags 0 +S ___018c_04ae__2d_2d_2d_2d_2d_2d_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 45 00 2d 2d 2d 2d 2d 2d 2d 2d 2d +R 00 00 01 00 +T 0b 00 00 00 09 2d 2d 2d 2d 2d 2d 09 2d 2d 2d +R 00 00 01 00 +T 16 00 00 00 2d 2d 2d 09 2d 2d 2d 2d 2d 2d 09 +R 00 00 01 00 +T 21 00 00 00 2d 2d 2d 2d 2d 2d 09 2d 2d 2d 2d +R 00 00 01 00 +T 2c 00 00 00 2d 2d 09 2d 2d 2d 2d 2d 2d 09 2d +R 00 00 01 00 +T 37 00 00 00 2d 2d 2d 2d 2d 2d 09 2d 2d 2d 2d +R 00 00 01 00 +T 42 00 00 00 2d 2d 2d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/018d_1b54__2d_2d_2d_2d_2d_2d_.rel b/src/nos/lib/messages_lib/018d_1b54__2d_2d_2d_2d_2d_2d_.rel new file mode 100644 index 00000000..07f86226 --- /dev/null +++ b/src/nos/lib/messages_lib/018d_1b54__2d_2d_2d_2d_2d_2d_.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4e flags 0 +S ___018d_1b54__2d_2d_2d_2d_2d_2d_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 4c 00 2d 2d 2d 2d 2d 2d 2d 2d 2d +R 00 00 01 00 +T 0b 00 00 00 20 20 2d 2d 2d 2d 2d 2d 20 20 2d +R 00 00 01 00 +T 16 00 00 00 2d 2d 2d 2d 2d 20 20 2d 2d 2d 2d +R 00 00 01 00 +T 21 00 00 00 2d 2d 20 20 2d 2d 2d 2d 2d 2d 20 +R 00 00 01 00 +T 2c 00 00 00 20 2d 2d 2d 2d 2d 2d 20 20 2d 2d +R 00 00 01 00 +T 37 00 00 00 2d 2d 2d 2d 20 20 2d 2d 2d 2d 2d +R 00 00 01 00 +T 42 00 00 00 2d 20 20 2d 2d 2d 2d 2d 2d 20 0a +R 00 00 01 00 +T 4d 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/018e_3d1a__2d_2d_2d_2d_2d_2d_.rel b/src/nos/lib/messages_lib/018e_3d1a__2d_2d_2d_2d_2d_2d_.rel new file mode 100644 index 00000000..72e7edf2 --- /dev/null +++ b/src/nos/lib/messages_lib/018e_3d1a__2d_2d_2d_2d_2d_2d_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___018e_3d1a__2d_2d_2d_2d_2d_2d_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 2d 2d 2d 2d 2d 2d 2d 2d 2d +R 00 00 01 00 +T 0b 00 00 00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d +R 00 00 01 00 +T 16 00 00 00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d +R 00 00 01 00 +T 21 00 00 00 2d 2d 2d 2d 2d 2d 2d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/018f_8ddf__2d_3e_25s.rel b/src/nos/lib/messages_lib/018f_8ddf__2d_3e_25s.rel new file mode 100644 index 00000000..4fd843da --- /dev/null +++ b/src/nos/lib/messages_lib/018f_8ddf__2d_3e_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___018f_8ddf__2d_3e_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 2d 3e 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0190_589d__2d_3e_25s_20ihl_20.rel b/src/nos/lib/messages_lib/0190_589d__2d_3e_25s_20ihl_20.rel new file mode 100644 index 00000000..d679a904 --- /dev/null +++ b/src/nos/lib/messages_lib/0190_589d__2d_3e_25s_20ihl_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0190_589d__2d_3e_25s_20ihl_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 2d 3e 25 73 20 69 68 6c 20 +R 00 00 01 00 +T 0b 00 00 00 25 75 20 74 74 6c 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0191_e6c1__2e_0a.rel b/src/nos/lib/messages_lib/0191_e6c1__2e_0a.rel new file mode 100644 index 00000000..80010d5d --- /dev/null +++ b/src/nos/lib/messages_lib/0191_e6c1__2e_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___0191_e6c1__2e_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0192_ed84__2f_25lu_20ms.rel b/src/nos/lib/messages_lib/0192_ed84__2f_25lu_20ms.rel new file mode 100644 index 00000000..56eeee99 --- /dev/null +++ b/src/nos/lib/messages_lib/0192_ed84__2f_25lu_20ms.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0192_ed84__2f_25lu_20ms Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 2f 25 6c 75 20 6d 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0193_6d9b__2f_25lu_20ms_0a.rel b/src/nos/lib/messages_lib/0193_6d9b__2f_25lu_20ms_0a.rel new file mode 100644 index 00000000..1d1e67b6 --- /dev/null +++ b/src/nos/lib/messages_lib/0193_6d9b__2f_25lu_20ms_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0193_6d9b__2f_25lu_20ms_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 2f 25 6c 75 20 6d 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0194_a44f__2f_25lu_20ms_3b_20.rel b/src/nos/lib/messages_lib/0194_a44f__2f_25lu_20ms_3b_20.rel new file mode 100644 index 00000000..c59e321c --- /dev/null +++ b/src/nos/lib/messages_lib/0194_a44f__2f_25lu_20ms_3b_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0194_a44f__2f_25lu_20ms_3b_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 2f 25 6c 75 20 6d 73 3b 20 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0195_096e__2f_25u.rel b/src/nos/lib/messages_lib/0195_096e__2f_25u.rel new file mode 100644 index 00000000..89b8ca83 --- /dev/null +++ b/src/nos/lib/messages_lib/0195_096e__2f_25u.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0195_096e__2f_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 2f 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0196_96dc__2fEX.rel b/src/nos/lib/messages_lib/0196_96dc__2fEX.rel new file mode 100644 index 00000000..313f635d --- /dev/null +++ b/src/nos/lib/messages_lib/0196_96dc__2fEX.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0196_96dc__2fEX Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 2f 45 58 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0197_79e7_0_25o.rel b/src/nos/lib/messages_lib/0197_79e7_0_25o.rel new file mode 100644 index 00000000..ef0bf90f --- /dev/null +++ b/src/nos/lib/messages_lib/0197_79e7_0_25o.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0197_79e7_0_25o Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 30 25 6f 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0198_8157_007Incoming_20_25s_.rel b/src/nos/lib/messages_lib/0198_8157_007Incoming_20_25s_.rel new file mode 100644 index 00000000..b4b8d4f9 --- /dev/null +++ b/src/nos/lib/messages_lib/0198_8157_007Incoming_20_25s_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___0198_8157_007Incoming_20_25s_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 30 30 37 49 6e 63 6f 6d 69 +R 00 00 01 00 +T 0b 00 00 00 6e 67 20 25 73 20 73 65 73 73 69 +R 00 00 01 00 +T 16 00 00 00 6f 6e 20 25 75 20 66 72 6f 6d 20 +R 00 00 01 00 +T 21 00 00 00 25 73 30 30 37 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0199_b04e_0x_2503x_20_20_20_2.rel b/src/nos/lib/messages_lib/0199_b04e_0x_2503x_20_20_20_2.rel new file mode 100644 index 00000000..c871ee40 --- /dev/null +++ b/src/nos/lib/messages_lib/0199_b04e_0x_2503x_20_20_20_2.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3e flags 0 +S ___0199_b04e_0x_2503x_20_20_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 3c 00 30 78 25 30 33 78 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 25 20 38 6c 75 25 20 38 6c 75 +R 00 00 01 00 +T 16 00 00 00 25 20 38 6c 75 25 20 38 75 25 20 +R 00 00 01 00 +T 21 00 00 00 38 75 25 20 38 75 25 20 38 75 25 +R 00 00 01 00 +T 2c 00 00 00 20 38 75 0a 52 63 76 20 53 74 61 +R 00 00 01 00 +T 37 00 00 00 74 65 3d 25 73 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/019a_3f3a_0x_2504x_0a.rel b/src/nos/lib/messages_lib/019a_3f3a_0x_2504x_0a.rel new file mode 100644 index 00000000..3d29e251 --- /dev/null +++ b/src/nos/lib/messages_lib/019a_3f3a_0x_2504x_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___019a_3f3a_0x_2504x_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 30 78 25 30 34 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/019b_8308_0x_2508lx_0a.rel b/src/nos/lib/messages_lib/019b_8308_0x_2508lx_0a.rel new file mode 100644 index 00000000..abf0fa33 --- /dev/null +++ b/src/nos/lib/messages_lib/019b_8308_0x_2508lx_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___019b_8308_0x_2508lx_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 30 78 25 30 38 6c 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/019c_ab8d_0x_25x.rel b/src/nos/lib/messages_lib/019c_ab8d_0x_25x.rel new file mode 100644 index 00000000..82b7c03c --- /dev/null +++ b/src/nos/lib/messages_lib/019c_ab8d_0x_25x.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___019c_ab8d_0x_25x Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 30 78 25 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/019d_6f63_0x_25x_09_09_25ld_0.rel b/src/nos/lib/messages_lib/019d_6f63_0x_25x_09_09_25ld_0.rel new file mode 100644 index 00000000..85d966ae --- /dev/null +++ b/src/nos/lib/messages_lib/019d_6f63_0x_25x_09_09_25ld_0.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S ___019d_6f63_0x_25x_09_09_25ld_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2f 00 30 78 25 78 09 09 25 6c 64 +R 00 00 01 00 +T 0b 00 00 00 09 25 6c 64 09 25 6c 64 09 25 64 +R 00 00 01 00 +T 16 00 00 00 09 25 64 09 25 64 09 25 64 09 25 +R 00 00 01 00 +T 21 00 00 00 64 0a 52 63 76 20 53 74 61 74 65 +R 00 00 01 00 +T 2c 00 00 00 3d 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/019e_fea8_0x_25x_09_09_25ld_0.rel b/src/nos/lib/messages_lib/019e_fea8_0x_25x_09_09_25ld_0.rel new file mode 100644 index 00000000..e847b0e3 --- /dev/null +++ b/src/nos/lib/messages_lib/019e_fea8_0x_25x_09_09_25ld_0.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___019e_fea8_0x_25x_09_09_25ld_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 00 30 78 25 78 09 09 25 6c 64 +R 00 00 01 00 +T 0b 00 00 00 09 25 6c 64 09 25 6c 64 09 25 64 +R 00 00 01 00 +T 16 00 00 00 09 25 64 09 25 64 09 25 64 09 25 +R 00 00 01 00 +T 21 00 00 00 64 0a 52 63 76 20 53 74 61 74 65 +R 00 00 01 00 +T 2c 00 00 00 3d 25 73 0a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/019f_f01c_0x_25x_0a.rel b/src/nos/lib/messages_lib/019f_f01c_0x_25x_0a.rel new file mode 100644 index 00000000..2076e135 --- /dev/null +++ b/src/nos/lib/messages_lib/019f_f01c_0x_25x_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___019f_f01c_0x_25x_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 30 78 25 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01a0_d635_100_20Warning_3a_20.rel b/src/nos/lib/messages_lib/01a0_d635_100_20Warning_3a_20.rel new file mode 100644 index 00000000..67a43cd5 --- /dev/null +++ b/src/nos/lib/messages_lib/01a0_d635_100_20Warning_3a_20.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3a flags 0 +S ___01a0_d635_100_20Warning_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 38 00 31 30 30 20 57 61 72 6e 69 +R 00 00 01 00 +T 0b 00 00 00 6e 67 3a 20 74 79 70 65 20 69 73 +R 00 00 01 00 +T 16 00 00 00 20 41 53 43 49 49 20 61 6e 64 20 +R 00 00 01 00 +T 21 00 00 00 25 73 20 61 70 70 65 61 72 73 20 +R 00 00 01 00 +T 2c 00 00 00 74 6f 20 62 65 20 62 69 6e 61 72 +R 00 00 01 00 +T 37 00 00 00 79 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01a1_3f47_150_20Opening_20dat.rel b/src/nos/lib/messages_lib/01a1_3f47_150_20Opening_20dat.rel new file mode 100644 index 00000000..914051e9 --- /dev/null +++ b/src/nos/lib/messages_lib/01a1_3f47_150_20Opening_20dat.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29 flags 0 +S ___01a1_3f47_150_20Opening_20dat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 27 00 31 35 30 20 4f 70 65 6e 69 +R 00 00 01 00 +T 0b 00 00 00 6e 67 20 64 61 74 61 20 63 6f 6e +R 00 00 01 00 +T 16 00 00 00 6e 65 63 74 69 6f 6e 20 66 6f 72 +R 00 00 01 00 +T 21 00 00 00 20 25 73 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01a2_67ab_200_20.rel b/src/nos/lib/messages_lib/01a2_67ab_200_20.rel new file mode 100644 index 00000000..17064a65 --- /dev/null +++ b/src/nos/lib/messages_lib/01a2_67ab_200_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___01a2_67ab_200_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 32 30 30 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01a3_cc8d_200_20MKD_20ok_0a.rel b/src/nos/lib/messages_lib/01a3_cc8d_200_20MKD_20ok_0a.rel new file mode 100644 index 00000000..6e4de369 --- /dev/null +++ b/src/nos/lib/messages_lib/01a3_cc8d_200_20MKD_20ok_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___01a3_cc8d_200_20MKD_20ok_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 32 30 30 20 4d 4b 44 20 6f +R 00 00 01 00 +T 0b 00 00 00 6b 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01a4_6c3a_200_20Ok_0a.rel b/src/nos/lib/messages_lib/01a4_6c3a_200_20Ok_0a.rel new file mode 100644 index 00000000..130365b9 --- /dev/null +++ b/src/nos/lib/messages_lib/01a4_6c3a_200_20Ok_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___01a4_6c3a_200_20Ok_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 32 30 30 20 4f 6b 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01a5_ba32_200_20Port_20comman.rel b/src/nos/lib/messages_lib/01a5_ba32_200_20Port_20comman.rel new file mode 100644 index 00000000..5876950e --- /dev/null +++ b/src/nos/lib/messages_lib/01a5_ba32_200_20Port_20comman.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___01a5_ba32_200_20Port_20comman Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 32 30 30 20 50 6f 72 74 20 +R 00 00 01 00 +T 0b 00 00 00 63 6f 6d 6d 61 6e 64 20 6f 6b 61 +R 00 00 01 00 +T 16 00 00 00 79 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01a6_1db7_200_20Type_20_25s_2.rel b/src/nos/lib/messages_lib/01a6_1db7_200_20Type_20_25s_2.rel new file mode 100644 index 00000000..d68e2f51 --- /dev/null +++ b/src/nos/lib/messages_lib/01a6_1db7_200_20Type_20_25s_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___01a6_1db7_200_20Type_20_25s_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 32 30 30 20 54 79 70 65 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 20 4f 4b 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01a7_1192_215_20_25s_20Type_3.rel b/src/nos/lib/messages_lib/01a7_1192_215_20_25s_20Type_3.rel new file mode 100644 index 00000000..b4a3f546 --- /dev/null +++ b/src/nos/lib/messages_lib/01a7_1192_215_20_25s_20Type_3.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___01a7_1192_215_20_25s_20Type_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 32 31 35 20 25 73 20 54 79 +R 00 00 01 00 +T 0b 00 00 00 70 65 3a 20 4c 25 64 20 56 65 72 +R 00 00 01 00 +T 16 00 00 00 73 69 6f 6e 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01a8_01fe_220_20_25s_20FTP_20.rel b/src/nos/lib/messages_lib/01a8_01fe_220_20_25s_20FTP_20.rel new file mode 100644 index 00000000..aaee92c4 --- /dev/null +++ b/src/nos/lib/messages_lib/01a8_01fe_220_20_25s_20FTP_20.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___01a8_01fe_220_20_25s_20FTP_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 32 32 30 20 25 73 20 46 54 +R 00 00 01 00 +T 0b 00 00 00 50 20 76 65 72 73 69 6f 6e 20 25 +R 00 00 01 00 +T 16 00 00 00 73 20 72 65 61 64 79 20 61 74 20 +R 00 00 01 00 +T 21 00 00 00 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01a9_7804_221_20Goodbye_21_0a.rel b/src/nos/lib/messages_lib/01a9_7804_221_20Goodbye_21_0a.rel new file mode 100644 index 00000000..cb871b6d --- /dev/null +++ b/src/nos/lib/messages_lib/01a9_7804_221_20Goodbye_21_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___01a9_7804_221_20Goodbye_21_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 32 32 31 20 47 6f 6f 64 62 +R 00 00 01 00 +T 0b 00 00 00 79 65 21 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01aa_3f54_226_20File_20receiv.rel b/src/nos/lib/messages_lib/01aa_3f54_226_20File_20receiv.rel new file mode 100644 index 00000000..f57b26cd --- /dev/null +++ b/src/nos/lib/messages_lib/01aa_3f54_226_20File_20receiv.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___01aa_3f54_226_20File_20receiv Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 32 32 36 20 46 69 6c 65 20 +R 00 00 01 00 +T 0b 00 00 00 72 65 63 65 69 76 65 64 20 4f 4b +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ab_caea_226_20File_20sent_2.rel b/src/nos/lib/messages_lib/01ab_caea_226_20File_20sent_2.rel new file mode 100644 index 00000000..2ac20610 --- /dev/null +++ b/src/nos/lib/messages_lib/01ab_caea_226_20File_20sent_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___01ab_caea_226_20File_20sent_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 32 32 36 20 46 69 6c 65 20 +R 00 00 01 00 +T 0b 00 00 00 73 65 6e 74 20 4f 4b 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ac_9fe8_230_20Logged_20in_0.rel b/src/nos/lib/messages_lib/01ac_9fe8_230_20Logged_20in_0.rel new file mode 100644 index 00000000..1a16ed0f --- /dev/null +++ b/src/nos/lib/messages_lib/01ac_9fe8_230_20Logged_20in_0.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___01ac_9fe8_230_20Logged_20in_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 32 33 30 20 4c 6f 67 67 65 +R 00 00 01 00 +T 0b 00 00 00 64 20 69 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ad_55db_250_20_25s_0a.rel b/src/nos/lib/messages_lib/01ad_55db_250_20_25s_0a.rel new file mode 100644 index 00000000..db536281 --- /dev/null +++ b/src/nos/lib/messages_lib/01ad_55db_250_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___01ad_55db_250_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 32 35 30 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ae_c720_250_20File_20delete.rel b/src/nos/lib/messages_lib/01ae_c720_250_20File_20delete.rel new file mode 100644 index 00000000..98ff183a --- /dev/null +++ b/src/nos/lib/messages_lib/01ae_c720_250_20File_20delete.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___01ae_c720_250_20File_20delete Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 32 35 30 20 46 69 6c 65 20 +R 00 00 01 00 +T 0b 00 00 00 64 65 6c 65 74 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01af_de54_250_2d_25s_0a.rel b/src/nos/lib/messages_lib/01af_de54_250_2d_25s_0a.rel new file mode 100644 index 00000000..8dc1846f --- /dev/null +++ b/src/nos/lib/messages_lib/01af_de54_250_2d_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___01af_de54_250_2d_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 32 35 30 2d 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01b0_9400_257_20_22_25s_22_20.rel b/src/nos/lib/messages_lib/01b0_9400_257_20_22_25s_22_20.rel new file mode 100644 index 00000000..2dd1c05c --- /dev/null +++ b/src/nos/lib/messages_lib/01b0_9400_257_20_22_25s_22_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___01b0_9400_257_20_22_25s_22_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 32 35 37 20 22 25 73 22 20 +R 00 00 01 00 +T 0b 00 00 00 69 73 20 63 75 72 72 65 6e 74 20 +R 00 00 01 00 +T 16 00 00 00 64 69 72 65 63 74 6f 72 79 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01b1_24f1_331_20Enter_20PASS_.rel b/src/nos/lib/messages_lib/01b1_24f1_331_20Enter_20PASS_.rel new file mode 100644 index 00000000..7ae674c5 --- /dev/null +++ b/src/nos/lib/messages_lib/01b1_24f1_331_20Enter_20PASS_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___01b1_24f1_331_20Enter_20PASS_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 33 33 31 20 45 6e 74 65 72 +R 00 00 01 00 +T 0b 00 00 00 20 50 41 53 53 20 63 6f 6d 6d 61 +R 00 00 01 00 +T 16 00 00 00 6e 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01b2_273f_421_20System_20over.rel b/src/nos/lib/messages_lib/01b2_273f_421_20System_20over.rel new file mode 100644 index 00000000..2b236549 --- /dev/null +++ b/src/nos/lib/messages_lib/01b2_273f_421_20System_20over.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___01b2_273f_421_20System_20over Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 34 32 31 20 53 79 73 74 65 +R 00 00 01 00 +T 0b 00 00 00 6d 20 6f 76 65 72 6c 6f 61 64 65 +R 00 00 01 00 +T 16 00 00 00 64 2c 20 74 72 79 20 61 67 61 69 +R 00 00 01 00 +T 21 00 00 00 6e 20 6c 61 74 65 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01b3_e43d_425_20Data_20connec.rel b/src/nos/lib/messages_lib/01b3_e43d_425_20Data_20connec.rel new file mode 100644 index 00000000..91e5c9e5 --- /dev/null +++ b/src/nos/lib/messages_lib/01b3_e43d_425_20Data_20connec.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___01b3_e43d_425_20Data_20connec Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 34 32 35 20 44 61 74 61 20 +R 00 00 01 00 +T 0b 00 00 00 63 6f 6e 6e 65 63 74 69 6f 6e 20 +R 00 00 01 00 +T 16 00 00 00 72 65 73 65 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01b4_7e66_500_20Unknown_20com.rel b/src/nos/lib/messages_lib/01b4_7e66_500_20Unknown_20com.rel new file mode 100644 index 00000000..847d5a52 --- /dev/null +++ b/src/nos/lib/messages_lib/01b4_7e66_500_20Unknown_20com.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___01b4_7e66_500_20Unknown_20com Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 35 30 30 20 55 6e 6b 6e 6f +R 00 00 01 00 +T 0b 00 00 00 77 6e 20 63 6f 6d 6d 61 6e 64 20 +R 00 00 01 00 +T 16 00 00 00 27 25 73 27 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01b5_3d39_500_20Unsupported_2.rel b/src/nos/lib/messages_lib/01b5_3d39_500_20Unsupported_2.rel new file mode 100644 index 00000000..f17119a8 --- /dev/null +++ b/src/nos/lib/messages_lib/01b5_3d39_500_20Unsupported_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___01b5_3d39_500_20Unsupported_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 35 30 30 20 55 6e 73 75 70 +R 00 00 01 00 +T 0b 00 00 00 70 6f 72 74 65 64 20 63 6f 6d 6d +R 00 00 01 00 +T 16 00 00 00 61 6e 64 20 6f 72 20 6f 70 74 69 +R 00 00 01 00 +T 21 00 00 00 6f 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01b6_fe7e_501_20Bad_20port_20.rel b/src/nos/lib/messages_lib/01b6_fe7e_501_20Bad_20port_20.rel new file mode 100644 index 00000000..f023bbf9 --- /dev/null +++ b/src/nos/lib/messages_lib/01b6_fe7e_501_20Bad_20port_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___01b6_fe7e_501_20Bad_20port_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 35 30 31 20 42 61 64 20 70 +R 00 00 01 00 +T 0b 00 00 00 6f 72 74 20 73 79 6e 74 61 78 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01b7_065e_501_20Only_20logica.rel b/src/nos/lib/messages_lib/01b7_065e_501_20Only_20logica.rel new file mode 100644 index 00000000..2a450b1c --- /dev/null +++ b/src/nos/lib/messages_lib/01b7_065e_501_20Only_20logica.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29 flags 0 +S ___01b7_065e_501_20Only_20logica Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 27 00 35 30 31 20 4f 6e 6c 79 20 +R 00 00 01 00 +T 0b 00 00 00 6c 6f 67 69 63 61 6c 20 62 79 74 +R 00 00 01 00 +T 16 00 00 00 65 73 69 7a 65 20 38 20 73 75 70 +R 00 00 01 00 +T 21 00 00 00 70 6f 72 74 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01b8_a2bf_501_20Unknown_20typ.rel b/src/nos/lib/messages_lib/01b8_a2bf_501_20Unknown_20typ.rel new file mode 100644 index 00000000..a1df5504 --- /dev/null +++ b/src/nos/lib/messages_lib/01b8_a2bf_501_20Unknown_20typ.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___01b8_a2bf_501_20Unknown_20typ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 35 30 31 20 55 6e 6b 6e 6f +R 00 00 01 00 +T 0b 00 00 00 77 6e 20 74 79 70 65 20 22 25 73 +R 00 00 01 00 +T 16 00 00 00 22 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01b9_41cf_502_20Command_20not.rel b/src/nos/lib/messages_lib/01b9_41cf_502_20Command_20not.rel new file mode 100644 index 00000000..fa73fb2e --- /dev/null +++ b/src/nos/lib/messages_lib/01b9_41cf_502_20Command_20not.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___01b9_41cf_502_20Command_20not Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 35 30 32 20 43 6f 6d 6d 61 +R 00 00 01 00 +T 0b 00 00 00 6e 64 20 6e 6f 74 20 79 65 74 20 +R 00 00 01 00 +T 16 00 00 00 69 6d 70 6c 65 6d 65 6e 74 65 64 +R 00 00 01 00 +T 21 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ba_f576_503_20Login_20with_.rel b/src/nos/lib/messages_lib/01ba_f576_503_20Login_20with_.rel new file mode 100644 index 00000000..7eda387e --- /dev/null +++ b/src/nos/lib/messages_lib/01ba_f576_503_20Login_20with_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___01ba_f576_503_20Login_20with_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 35 30 33 20 4c 6f 67 69 6e +R 00 00 01 00 +T 0b 00 00 00 20 77 69 74 68 20 55 53 45 52 20 +R 00 00 01 00 +T 16 00 00 00 66 69 72 73 74 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01bb_7dc2_530_20Please_20log_.rel b/src/nos/lib/messages_lib/01bb_7dc2_530_20Please_20log_.rel new file mode 100644 index 00000000..f4eabd90 --- /dev/null +++ b/src/nos/lib/messages_lib/01bb_7dc2_530_20Please_20log_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___01bb_7dc2_530_20Please_20log_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 35 33 30 20 50 6c 65 61 73 +R 00 00 01 00 +T 0b 00 00 00 65 20 6c 6f 67 20 69 6e 20 77 69 +R 00 00 01 00 +T 16 00 00 00 74 68 20 55 53 45 52 20 61 6e 64 +R 00 00 01 00 +T 21 00 00 00 20 50 41 53 53 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01bc_c53a_550_20Can_27t_20rea.rel b/src/nos/lib/messages_lib/01bc_c53a_550_20Can_27t_20rea.rel new file mode 100644 index 00000000..06e639d3 --- /dev/null +++ b/src/nos/lib/messages_lib/01bc_c53a_550_20Can_27t_20rea.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___01bc_c53a_550_20Can_27t_20rea Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 35 35 30 20 43 61 6e 27 74 +R 00 00 01 00 +T 0b 00 00 00 20 72 65 61 64 20 66 69 6c 65 20 +R 00 00 01 00 +T 16 00 00 00 22 25 73 22 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01bd_4770_550_20Delete_20fail.rel b/src/nos/lib/messages_lib/01bd_4770_550_20Delete_20fail.rel new file mode 100644 index 00000000..053bcc24 --- /dev/null +++ b/src/nos/lib/messages_lib/01bd_4770_550_20Delete_20fail.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___01bd_4770_550_20Delete_20fail Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 35 35 30 20 44 65 6c 65 74 +R 00 00 01 00 +T 0b 00 00 00 65 20 66 61 69 6c 65 64 3a 20 25 +R 00 00 01 00 +T 16 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01be_38c3_550_20Permission_20.rel b/src/nos/lib/messages_lib/01be_38c3_550_20Permission_20.rel new file mode 100644 index 00000000..91857d1e --- /dev/null +++ b/src/nos/lib/messages_lib/01be_38c3_550_20Permission_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___01be_38c3_550_20Permission_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 35 35 30 20 50 65 72 6d 69 +R 00 00 01 00 +T 0b 00 00 00 73 73 69 6f 6e 20 64 65 6e 69 65 +R 00 00 01 00 +T 16 00 00 00 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01bf_95c1_552_20Write_20error.rel b/src/nos/lib/messages_lib/01bf_95c1_552_20Write_20error.rel new file mode 100644 index 00000000..01131896 --- /dev/null +++ b/src/nos/lib/messages_lib/01bf_95c1_552_20Write_20error.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___01bf_95c1_552_20Write_20error Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 35 35 32 20 57 72 69 74 65 +R 00 00 01 00 +T 0b 00 00 00 20 65 72 72 6f 72 3a 20 25 73 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01c0_7eaf_553_20Can_27t_20cre.rel b/src/nos/lib/messages_lib/01c0_7eaf_553_20Can_27t_20cre.rel new file mode 100644 index 00000000..820ba8a5 --- /dev/null +++ b/src/nos/lib/messages_lib/01c0_7eaf_553_20Can_27t_20cre.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___01c0_7eaf_553_20Can_27t_20cre Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 35 35 33 20 43 61 6e 27 74 +R 00 00 01 00 +T 0b 00 00 00 20 63 72 65 61 74 65 20 22 25 73 +R 00 00 01 00 +T 16 00 00 00 22 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01c1_f0b2_553_20Can_27t_20rea.rel b/src/nos/lib/messages_lib/01c1_f0b2_553_20Can_27t_20rea.rel new file mode 100644 index 00000000..4a60b153 --- /dev/null +++ b/src/nos/lib/messages_lib/01c1_f0b2_553_20Can_27t_20rea.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___01c1_f0b2_553_20Can_27t_20rea Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 35 35 33 20 43 61 6e 27 74 +R 00 00 01 00 +T 0b 00 00 00 20 72 65 61 64 20 64 69 72 65 63 +R 00 00 01 00 +T 16 00 00 00 74 6f 72 79 20 22 25 73 22 3a 20 +R 00 00 01 00 +T 21 00 00 00 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01c2_b04b__3a_20_25d_0a.rel b/src/nos/lib/messages_lib/01c2_b04b__3a_20_25d_0a.rel new file mode 100644 index 00000000..3d82f0f7 --- /dev/null +++ b/src/nos/lib/messages_lib/01c2_b04b__3a_20_25d_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___01c2_b04b__3a_20_25d_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 3a 20 25 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01c3_6aba__3a_20_25ld_0a.rel b/src/nos/lib/messages_lib/01c3_6aba__3a_20_25ld_0a.rel new file mode 100644 index 00000000..79764797 --- /dev/null +++ b/src/nos/lib/messages_lib/01c3_6aba__3a_20_25ld_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___01c3_6aba__3a_20_25ld_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 3a 20 25 6c 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01c4_8cd1__3a_20_25s.rel b/src/nos/lib/messages_lib/01c4_8cd1__3a_20_25s.rel new file mode 100644 index 00000000..fb41f120 --- /dev/null +++ b/src/nos/lib/messages_lib/01c4_8cd1__3a_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___01c4_8cd1__3a_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 3a 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01c5_68d2__3a_20_25s_0a.rel b/src/nos/lib/messages_lib/01c5_68d2__3a_20_25s_0a.rel new file mode 100644 index 00000000..5f7d973a --- /dev/null +++ b/src/nos/lib/messages_lib/01c5_68d2__3a_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___01c5_68d2__3a_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01c6_3c02__3a_20_25u_0a.rel b/src/nos/lib/messages_lib/01c6_3c02__3a_20_25u_0a.rel new file mode 100644 index 00000000..8a85339a --- /dev/null +++ b/src/nos/lib/messages_lib/01c6_3c02__3a_20_25u_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___01c6_3c02__3a_20_25u_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 3a 20 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01c7_6692__3b_20Tries_3a_20_2.rel b/src/nos/lib/messages_lib/01c7_6692__3b_20Tries_3a_20_2.rel new file mode 100644 index 00000000..a59087f2 --- /dev/null +++ b/src/nos/lib/messages_lib/01c7_6692__3b_20Tries_3a_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___01c7_6692__3b_20Tries_3a_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 3b 20 54 72 69 65 73 3a 20 +R 00 00 01 00 +T 0b 00 00 00 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01c8_697b__3c_25ld_40_25s_3e_.rel b/src/nos/lib/messages_lib/01c8_697b__3c_25ld_40_25s_3e_.rel new file mode 100644 index 00000000..18c6cf26 --- /dev/null +++ b/src/nos/lib/messages_lib/01c8_697b__3c_25ld_40_25s_3e_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___01c8_697b__3c_25ld_40_25s_3e_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 3c 25 6c 64 40 25 73 3e 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01c9_2587__3c_25s_40_25s_2ebb.rel b/src/nos/lib/messages_lib/01c9_2587__3c_25s_40_25s_2ebb.rel new file mode 100644 index 00000000..058d36ed --- /dev/null +++ b/src/nos/lib/messages_lib/01c9_2587__3c_25s_40_25s_2ebb.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___01c9_2587__3c_25s_40_25s_2ebb Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 3c 25 73 40 25 73 2e 62 62 +R 00 00 01 00 +T 0b 00 00 00 73 3e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ca_3152__3c_3d_3d_25s.rel b/src/nos/lib/messages_lib/01ca_3152__3c_3d_3d_25s.rel new file mode 100644 index 00000000..f0029be4 --- /dev/null +++ b/src/nos/lib/messages_lib/01ca_3152__3c_3d_3d_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___01ca_3152__3c_3d_3d_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 3c 3d 3d 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01cb_defc__3c_3d_3d_25s_0a.rel b/src/nos/lib/messages_lib/01cb_defc__3c_3d_3d_25s_0a.rel new file mode 100644 index 00000000..353f77cd --- /dev/null +++ b/src/nos/lib/messages_lib/01cb_defc__3c_3d_3d_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___01cb_defc__3c_3d_3d_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 3c 3d 3d 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01cc_016b__3d_3d_3eARTICLE_20.rel b/src/nos/lib/messages_lib/01cc_016b__3d_3d_3eARTICLE_20.rel new file mode 100644 index 00000000..86caf4cf --- /dev/null +++ b/src/nos/lib/messages_lib/01cc_016b__3d_3d_3eARTICLE_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___01cc_016b__3d_3d_3eARTICLE_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 3d 3d 3e 41 52 54 49 43 4c +R 00 00 01 00 +T 0b 00 00 00 45 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01cd_c133__3d_3d_3eNEWNEWS_20.rel b/src/nos/lib/messages_lib/01cd_c133__3d_3d_3eNEWNEWS_20.rel new file mode 100644 index 00000000..843272d1 --- /dev/null +++ b/src/nos/lib/messages_lib/01cd_c133__3d_3d_3eNEWNEWS_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___01cd_c133__3d_3d_3eNEWNEWS_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 3d 3d 3e 4e 45 57 4e 45 57 +R 00 00 01 00 +T 0b 00 00 00 53 20 25 73 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ce_696c__3d_3d_3eQUIT_0a.rel b/src/nos/lib/messages_lib/01ce_696c__3d_3d_3eQUIT_0a.rel new file mode 100644 index 00000000..fc01f6c2 --- /dev/null +++ b/src/nos/lib/messages_lib/01ce_696c__3d_3d_3eQUIT_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___01ce_696c__3d_3d_3eQUIT_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 3d 3d 3e 51 55 49 54 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01cf_396e__3d_3dNo_20response.rel b/src/nos/lib/messages_lib/01cf_396e__3d_3dNo_20response.rel new file mode 100644 index 00000000..c345accb --- /dev/null +++ b/src/nos/lib/messages_lib/01cf_396e__3d_3dNo_20response.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___01cf_396e__3d_3dNo_20response Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 3d 3d 4e 6f 20 72 65 73 70 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 73 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01d0_c6f3__3f.rel b/src/nos/lib/messages_lib/01d0_c6f3__3f.rel new file mode 100644 index 00000000..992755a1 --- /dev/null +++ b/src/nos/lib/messages_lib/01d0_c6f3__3f.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4 flags 0 +S ___01d0_c6f3__3f Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 02 00 3f 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01d1_4d83__40.rel b/src/nos/lib/messages_lib/01d1_4d83__40.rel new file mode 100644 index 00000000..ee542317 --- /dev/null +++ b/src/nos/lib/messages_lib/01d1_4d83__40.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4 flags 0 +S ___01d1_4d83__40 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 02 00 40 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01d2_23d2__40_25s.rel b/src/nos/lib/messages_lib/01d2_23d2__40_25s.rel new file mode 100644 index 00000000..99ff59f2 --- /dev/null +++ b/src/nos/lib/messages_lib/01d2_23d2__40_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___01d2_23d2__40_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 40 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01d3_7f61_ARP_3a_20len_20_25d.rel b/src/nos/lib/messages_lib/01d3_7f61_ARP_3a_20len_20_25d.rel new file mode 100644 index 00000000..5e4ea922 --- /dev/null +++ b/src/nos/lib/messages_lib/01d3_7f61_ARP_3a_20len_20_25d.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___01d3_7f61_ARP_3a_20len_20_25d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 41 52 50 3a 20 6c 65 6e 20 +R 00 00 01 00 +T 0b 00 00 00 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01d4_124c_ARTICLE_20_25s.rel b/src/nos/lib/messages_lib/01d4_124c_ARTICLE_20_25s.rel new file mode 100644 index 00000000..d884208d --- /dev/null +++ b/src/nos/lib/messages_lib/01d4_124c_ARTICLE_20_25s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___01d4_124c_ARTICLE_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 41 52 54 49 43 4c 45 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01d5_109d_AX25_20receive_20wi.rel b/src/nos/lib/messages_lib/01d5_109d_AX25_20receive_20wi.rel new file mode 100644 index 00000000..dc42c8e4 --- /dev/null +++ b/src/nos/lib/messages_lib/01d5_109d_AX25_20receive_20wi.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___01d5_109d_AX25_20receive_20wi Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 41 58 32 35 20 72 65 63 65 +R 00 00 01 00 +T 0b 00 00 00 69 76 65 20 77 69 6e 64 6f 77 20 +R 00 00 01 00 +T 16 00 00 00 28 62 79 74 65 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01d6_f4e0_AX25_20version.rel b/src/nos/lib/messages_lib/01d6_f4e0_AX25_20version.rel new file mode 100644 index 00000000..7281ef9d --- /dev/null +++ b/src/nos/lib/messages_lib/01d6_f4e0_AX25_20version.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___01d6_f4e0_AX25_20version Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 41 58 32 35 20 76 65 72 73 +R 00 00 01 00 +T 0b 00 00 00 69 6f 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01d7_818f_AX25_3a_20.rel b/src/nos/lib/messages_lib/01d7_818f_AX25_3a_20.rel new file mode 100644 index 00000000..4c3469a0 --- /dev/null +++ b/src/nos/lib/messages_lib/01d7_818f_AX25_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___01d7_818f_AX25_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 41 58 32 35 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01d8_f05c_Abort_0d_0a.rel b/src/nos/lib/messages_lib/01d8_f05c_Abort_0d_0a.rel new file mode 100644 index 00000000..b6e9ba44 --- /dev/null +++ b/src/nos/lib/messages_lib/01d8_f05c_Abort_0d_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___01d8_f05c_Abort_0d_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 41 62 6f 72 74 0d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01d9_6caf_Aborted_2e.rel b/src/nos/lib/messages_lib/01d9_6caf_Aborted_2e.rel new file mode 100644 index 00000000..8adf7a24 --- /dev/null +++ b/src/nos/lib/messages_lib/01d9_6caf_Aborted_2e.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___01d9_6caf_Aborted_2e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 41 62 6f 72 74 65 64 2e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01da_f2cb_Aborted_2e_0a.rel b/src/nos/lib/messages_lib/01da_f2cb_Aborted_2e_0a.rel new file mode 100644 index 00000000..d7933e73 --- /dev/null +++ b/src/nos/lib/messages_lib/01da_f2cb_Aborted_2e_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___01da_f2cb_Aborted_2e_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 41 62 6f 72 74 65 64 2e 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01db_537a_Accept_0a.rel b/src/nos/lib/messages_lib/01db_537a_Accept_0a.rel new file mode 100644 index 00000000..0d764b8c --- /dev/null +++ b/src/nos/lib/messages_lib/01db_537a_Accept_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___01db_537a_Accept_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 41 63 63 65 70 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01dc_b988_Ack_20delay_20time_.rel b/src/nos/lib/messages_lib/01dc_b988_Ack_20delay_20time_.rel new file mode 100644 index 00000000..33334984 --- /dev/null +++ b/src/nos/lib/messages_lib/01dc_b988_Ack_20delay_20time_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___01dc_b988_Ack_20delay_20time_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 41 63 6b 20 64 65 6c 61 79 +R 00 00 01 00 +T 0b 00 00 00 20 74 69 6d 65 20 28 6d 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01dd_fccc_Active_20RIP_20outp.rel b/src/nos/lib/messages_lib/01dd_fccc_Active_20RIP_20outp.rel new file mode 100644 index 00000000..6516f11a --- /dev/null +++ b/src/nos/lib/messages_lib/01dd_fccc_Active_20RIP_20outp.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___01dd_fccc_Active_20RIP_20outp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 41 63 74 69 76 65 20 52 49 +R 00 00 01 00 +T 0b 00 00 00 50 20 6f 75 74 70 75 74 20 69 6e +R 00 00 01 00 +T 16 00 00 00 74 65 72 66 61 63 65 73 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01de_e216_Address_2fControl_2.rel b/src/nos/lib/messages_lib/01de_e216_Address_2fControl_2.rel new file mode 100644 index 00000000..3f84e960 --- /dev/null +++ b/src/nos/lib/messages_lib/01de_e216_Address_2fControl_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___01de_e216_Address_2fControl_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 41 64 64 72 65 73 73 2f 43 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 74 72 6f 6c 20 46 69 65 6c +R 00 00 01 00 +T 16 00 00 00 64 20 43 6f 6d 70 72 65 73 73 69 +R 00 00 01 00 +T 21 00 00 00 6f 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01df_1fbc_All_20groups_20are_.rel b/src/nos/lib/messages_lib/01df_1fbc_All_20groups_20are_.rel new file mode 100644 index 00000000..cd977e0d --- /dev/null +++ b/src/nos/lib/messages_lib/01df_1fbc_All_20groups_20are_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___01df_1fbc_All_20groups_20are_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 41 6c 6c 20 67 72 6f 75 70 +R 00 00 01 00 +T 0b 00 00 00 73 20 61 72 65 20 63 75 72 72 65 +R 00 00 01 00 +T 16 00 00 00 6e 74 6c 79 20 65 6e 61 62 6c 65 +R 00 00 01 00 +T 21 00 00 00 64 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01e0_4a0c_Allow_20ACCM.rel b/src/nos/lib/messages_lib/01e0_4a0c_Allow_20ACCM.rel new file mode 100644 index 00000000..0c13e00f --- /dev/null +++ b/src/nos/lib/messages_lib/01e0_4a0c_Allow_20ACCM.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___01e0_4a0c_Allow_20ACCM Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 41 6c 6c 6f 77 20 41 43 43 +R 00 00 01 00 +T 0b 00 00 00 4d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01e1_8e02_Allow_20Address.rel b/src/nos/lib/messages_lib/01e1_8e02_Allow_20Address.rel new file mode 100644 index 00000000..8f42436e --- /dev/null +++ b/src/nos/lib/messages_lib/01e1_8e02_Allow_20Address.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___01e1_8e02_Allow_20Address Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 41 6c 6c 6f 77 20 41 64 64 +R 00 00 01 00 +T 0b 00 00 00 72 65 73 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01e2_7b21_Allow_20Address_2fC.rel b/src/nos/lib/messages_lib/01e2_7b21_Allow_20Address_2fC.rel new file mode 100644 index 00000000..a1b29feb --- /dev/null +++ b/src/nos/lib/messages_lib/01e2_7b21_Allow_20Address_2fC.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___01e2_7b21_Allow_20Address_2fC Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 41 6c 6c 6f 77 20 41 64 64 +R 00 00 01 00 +T 0b 00 00 00 72 65 73 73 2f 43 6f 6e 74 72 6f +R 00 00 01 00 +T 16 00 00 00 6c 20 46 69 65 6c 64 20 43 6f 6d +R 00 00 01 00 +T 21 00 00 00 70 72 65 73 73 69 6f 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01e3_5003_Allow_20Authenticat.rel b/src/nos/lib/messages_lib/01e3_5003_Allow_20Authenticat.rel new file mode 100644 index 00000000..f4426d15 --- /dev/null +++ b/src/nos/lib/messages_lib/01e3_5003_Allow_20Authenticat.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___01e3_5003_Allow_20Authenticat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 41 6c 6c 6f 77 20 41 75 74 +R 00 00 01 00 +T 0b 00 00 00 68 65 6e 74 69 63 61 74 69 6f 6e +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01e4_081e_Allow_20Compression.rel b/src/nos/lib/messages_lib/01e4_081e_Allow_20Compression.rel new file mode 100644 index 00000000..d700dc5c --- /dev/null +++ b/src/nos/lib/messages_lib/01e4_081e_Allow_20Compression.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___01e4_081e_Allow_20Compression Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 41 6c 6c 6f 77 20 43 6f 6d +R 00 00 01 00 +T 0b 00 00 00 70 72 65 73 73 69 6f 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01e5_14d8_Allow_20MRU.rel b/src/nos/lib/messages_lib/01e5_14d8_Allow_20MRU.rel new file mode 100644 index 00000000..0a5644d8 --- /dev/null +++ b/src/nos/lib/messages_lib/01e5_14d8_Allow_20MRU.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___01e5_14d8_Allow_20MRU Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 41 6c 6c 6f 77 20 4d 52 55 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01e6_5c94_Allow_20Magic_20Num.rel b/src/nos/lib/messages_lib/01e6_5c94_Allow_20Magic_20Num.rel new file mode 100644 index 00000000..01dc6acd --- /dev/null +++ b/src/nos/lib/messages_lib/01e6_5c94_Allow_20Magic_20Num.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___01e6_5c94_Allow_20Magic_20Num Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 41 6c 6c 6f 77 20 4d 61 67 +R 00 00 01 00 +T 0b 00 00 00 69 63 20 4e 75 6d 62 65 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01e7_33ea_Allow_20Protocol_20.rel b/src/nos/lib/messages_lib/01e7_33ea_Allow_20Protocol_20.rel new file mode 100644 index 00000000..f3c050ad --- /dev/null +++ b/src/nos/lib/messages_lib/01e7_33ea_Allow_20Protocol_20.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___01e7_33ea_Allow_20Protocol_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 41 6c 6c 6f 77 20 50 72 6f +R 00 00 01 00 +T 0b 00 00 00 74 6f 63 6f 6c 20 46 69 65 6c 64 +R 00 00 01 00 +T 16 00 00 00 20 43 6f 6d 70 72 65 73 73 69 6f +R 00 00 01 00 +T 21 00 00 00 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01e8_a5f9_Already_20have_20_2.rel b/src/nos/lib/messages_lib/01e8_a5f9_Already_20have_20_2.rel new file mode 100644 index 00000000..58f4c347 --- /dev/null +++ b/src/nos/lib/messages_lib/01e8_a5f9_Already_20have_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___01e8_a5f9_Already_20have_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 41 6c 72 65 61 64 79 20 68 +R 00 00 01 00 +T 0b 00 00 00 61 76 65 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01e9_8eaf_Arcnet_3a_20len_20_.rel b/src/nos/lib/messages_lib/01e9_8eaf_Arcnet_3a_20len_20_.rel new file mode 100644 index 00000000..3a1ef2c5 --- /dev/null +++ b/src/nos/lib/messages_lib/01e9_8eaf_Arcnet_3a_20len_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___01e9_8eaf_Arcnet_3a_20len_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 41 72 63 6e 65 74 3a 20 6c +R 00 00 01 00 +T 0b 00 00 00 65 6e 20 25 75 20 25 73 2d 3e 25 +R 00 00 01 00 +T 16 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ea_52c7_Argument_20missing_.rel b/src/nos/lib/messages_lib/01ea_52c7_Argument_20missing_.rel new file mode 100644 index 00000000..2574f8b2 --- /dev/null +++ b/src/nos/lib/messages_lib/01ea_52c7_Argument_20missing_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___01ea_52c7_Argument_20missing_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 41 72 67 75 6d 65 6e 74 20 +R 00 00 01 00 +T 0b 00 00 00 6d 69 73 73 69 6e 67 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01eb_3ed8_Ascii_0a.rel b/src/nos/lib/messages_lib/01eb_3ed8_Ascii_0a.rel new file mode 100644 index 00000000..30a0021a --- /dev/null +++ b/src/nos/lib/messages_lib/01eb_3ed8_Ascii_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___01eb_3ed8_Ascii_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 41 73 63 69 69 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ec_7cb2_Attach_20device_20f.rel b/src/nos/lib/messages_lib/01ec_7cb2_Attach_20device_20f.rel new file mode 100644 index 00000000..e2e10ffa --- /dev/null +++ b/src/nos/lib/messages_lib/01ec_7cb2_Attach_20device_20f.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___01ec_7cb2_Attach_20device_20f Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 41 74 74 61 63 68 20 64 65 +R 00 00 01 00 +T 0b 00 00 00 76 69 63 65 20 66 69 72 73 74 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ed_ec38_Attach_20netrom_20i.rel b/src/nos/lib/messages_lib/01ed_ec38_Attach_20netrom_20i.rel new file mode 100644 index 00000000..d7c8d78b --- /dev/null +++ b/src/nos/lib/messages_lib/01ed_ec38_Attach_20netrom_20i.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___01ed_ec38_Attach_20netrom_20i Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 41 74 74 61 63 68 20 6e 65 +R 00 00 01 00 +T 0b 00 00 00 74 72 6f 6d 20 69 6e 74 65 72 66 +R 00 00 01 00 +T 16 00 00 00 61 63 65 20 66 69 72 73 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ee_ee22_Attended_20flag.rel b/src/nos/lib/messages_lib/01ee_ee22_Attended_20flag.rel new file mode 100644 index 00000000..7ba9fa3c --- /dev/null +++ b/src/nos/lib/messages_lib/01ee_ee22_Attended_20flag.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___01ee_ee22_Attended_20flag Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 41 74 74 65 6e 64 65 64 20 +R 00 00 01 00 +T 0b 00 00 00 66 6c 61 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ef_0443_Available_20areas_2.rel b/src/nos/lib/messages_lib/01ef_0443_Available_20areas_2.rel new file mode 100644 index 00000000..7080ef9c --- /dev/null +++ b/src/nos/lib/messages_lib/01ef_0443_Available_20areas_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36 flags 0 +S ___01ef_0443_Available_20areas_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 34 00 41 76 61 69 6c 61 62 6c 65 +R 00 00 01 00 +T 0b 00 00 00 20 61 72 65 61 73 20 61 72 65 3a +R 00 00 01 00 +T 16 00 00 00 0a 25 2d 31 35 73 20 20 59 6f 75 +R 00 00 01 00 +T 21 00 00 00 72 20 70 72 69 76 61 74 65 20 6d +R 00 00 01 00 +T 2c 00 00 00 61 69 6c 20 61 72 65 61 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01f0_6999_Backoff_20Level_20_.rel b/src/nos/lib/messages_lib/01f0_6999_Backoff_20Level_20_.rel new file mode 100644 index 00000000..71d5d76d --- /dev/null +++ b/src/nos/lib/messages_lib/01f0_6999_Backoff_20Level_20_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S ___01f0_6999_Backoff_20Level_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2e 00 42 61 63 6b 6f 66 66 20 4c +R 00 00 01 00 +T 0b 00 00 00 65 76 65 6c 20 25 75 20 53 52 54 +R 00 00 01 00 +T 16 00 00 00 54 20 25 6c 64 20 6d 73 20 4d 65 +R 00 00 01 00 +T 21 00 00 00 61 6e 20 64 65 76 20 25 6c 64 20 +R 00 00 01 00 +T 2c 00 00 00 6d 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01f1_9716_Bad_20digipeater_20.rel b/src/nos/lib/messages_lib/01f1_9716_Bad_20digipeater_20.rel new file mode 100644 index 00000000..6a703067 --- /dev/null +++ b/src/nos/lib/messages_lib/01f1_9716_Bad_20digipeater_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___01f1_9716_Bad_20digipeater_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 42 61 64 20 64 69 67 69 70 +R 00 00 01 00 +T 0b 00 00 00 65 61 74 65 72 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01f2_0b9f_Bad_20syntax_2e_0a.rel b/src/nos/lib/messages_lib/01f2_0b9f_Bad_20syntax_2e_0a.rel new file mode 100644 index 00000000..65d56a19 --- /dev/null +++ b/src/nos/lib/messages_lib/01f2_0b9f_Bad_20syntax_2e_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___01f2_0b9f_Bad_20syntax_2e_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 42 61 64 20 73 79 6e 74 61 +R 00 00 01 00 +T 0b 00 00 00 78 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01f3_e884_Bad_20target_20_25s.rel b/src/nos/lib/messages_lib/01f3_e884_Bad_20target_20_25s.rel new file mode 100644 index 00000000..11d77f01 --- /dev/null +++ b/src/nos/lib/messages_lib/01f3_e884_Bad_20target_20_25s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___01f3_e884_Bad_20target_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 42 61 64 20 74 61 72 67 65 +R 00 00 01 00 +T 0b 00 00 00 74 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01f4_822a_Bad_20user_20or_20h.rel b/src/nos/lib/messages_lib/01f4_822a_Bad_20user_20or_20h.rel new file mode 100644 index 00000000..6be031c6 --- /dev/null +++ b/src/nos/lib/messages_lib/01f4_822a_Bad_20user_20or_20h.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___01f4_822a_Bad_20user_20or_20h Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 42 61 64 20 75 73 65 72 20 +R 00 00 01 00 +T 0b 00 00 00 6f 72 20 68 6f 73 74 20 6e 61 6d +R 00 00 01 00 +T 16 00 00 00 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01f5_61f7_Base_20Addr_09Rxint.rel b/src/nos/lib/messages_lib/01f5_61f7_Base_20Addr_09Rxint.rel new file mode 100644 index 00000000..a6627bc6 --- /dev/null +++ b/src/nos/lib/messages_lib/01f5_61f7_Base_20Addr_09Rxint.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 47 flags 0 +S ___01f5_61f7_Base_20Addr_09Rxint Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 45 00 42 61 73 65 20 41 64 64 72 +R 00 00 01 00 +T 0b 00 00 00 09 52 78 69 6e 74 73 09 54 78 69 +R 00 00 01 00 +T 16 00 00 00 6e 74 73 09 45 78 69 6e 74 73 09 +R 00 00 01 00 +T 21 00 00 00 45 6e 71 75 65 64 09 43 72 63 65 +R 00 00 01 00 +T 2c 00 00 00 72 72 09 41 62 6f 72 74 73 09 52 +R 00 00 01 00 +T 37 00 00 00 78 4f 76 65 72 73 09 52 46 72 61 +R 00 00 01 00 +T 42 00 00 00 6d 65 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01f6_929a_Base_20Addr_20_20Rx.rel b/src/nos/lib/messages_lib/01f6_929a_Base_20Addr_20_20Rx.rel new file mode 100644 index 00000000..2ed5977f --- /dev/null +++ b/src/nos/lib/messages_lib/01f6_929a_Base_20Addr_20_20Rx.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4e flags 0 +S ___01f6_929a_Base_20Addr_20_20Rx Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 4c 00 42 61 73 65 20 41 64 64 72 +R 00 00 01 00 +T 0b 00 00 00 20 20 52 78 69 6e 74 73 20 20 54 +R 00 00 01 00 +T 16 00 00 00 78 69 6e 74 73 20 20 45 78 69 6e +R 00 00 01 00 +T 21 00 00 00 74 73 20 20 54 78 46 72 6d 73 20 +R 00 00 01 00 +T 2c 00 00 00 20 52 78 46 72 6d 73 20 20 43 72 +R 00 00 01 00 +T 37 00 00 00 63 65 72 72 20 20 52 78 4f 76 72 +R 00 00 01 00 +T 42 00 00 00 73 20 20 54 78 55 6e 64 72 20 0a +R 00 00 01 00 +T 4d 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01f7_de82_Buf_20hits_2fmiss_2.rel b/src/nos/lib/messages_lib/01f7_de82_Buf_20hits_2fmiss_2.rel new file mode 100644 index 00000000..709f9fae --- /dev/null +++ b/src/nos/lib/messages_lib/01f7_de82_Buf_20hits_2fmiss_2.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 45 flags 0 +S ___01f7_de82_Buf_20hits_2fmiss_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 43 00 42 75 66 20 68 69 74 73 2f +R 00 00 01 00 +T 0b 00 00 00 6d 69 73 73 2f 66 6c 73 68 3a 20 +R 00 00 01 00 +T 16 00 00 00 25 75 2f 25 75 2f 25 75 0a 42 75 +R 00 00 01 00 +T 21 00 00 00 66 66 73 3a 09 64 65 76 09 62 6c +R 00 00 01 00 +T 2c 00 00 00 6f 63 6b 09 44 42 50 09 74 69 6d +R 00 00 01 00 +T 37 00 00 00 65 09 28 63 6c 6f 63 6b 3d 25 64 +R 00 00 01 00 +T 42 00 00 00 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01f8_ae0c_CTRL_2d_25c_0a.rel b/src/nos/lib/messages_lib/01f8_ae0c_CTRL_2d_25c_0a.rel new file mode 100644 index 00000000..ec141cbc --- /dev/null +++ b/src/nos/lib/messages_lib/01f8_ae0c_CTRL_2d_25c_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___01f8_ae0c_CTRL_2d_25c_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 43 54 52 4c 2d 25 63 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01f9_6c46_CWD_20_25s_0a.rel b/src/nos/lib/messages_lib/01f9_6c46_CWD_20_25s_0a.rel new file mode 100644 index 00000000..7e1de44d --- /dev/null +++ b/src/nos/lib/messages_lib/01f9_6c46_CWD_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___01f9_6c46_CWD_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 43 57 44 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01fa_0e64_Calls_20originated_.rel b/src/nos/lib/messages_lib/01fa_0e64_Calls_20originated_.rel new file mode 100644 index 00000000..ffc6b895 --- /dev/null +++ b/src/nos/lib/messages_lib/01fa_0e64_Calls_20originated_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2c flags 0 +S ___01fa_0e64_Calls_20originated_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2a 00 43 61 6c 6c 73 20 6f 72 69 +R 00 00 01 00 +T 0b 00 00 00 67 69 6e 61 74 65 64 20 25 6c 75 +R 00 00 01 00 +T 16 00 00 00 2c 20 43 61 6c 6c 73 20 61 6e 73 +R 00 00 01 00 +T 21 00 00 00 77 65 72 65 64 20 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01fb_9777_Calls_20timed_20out.rel b/src/nos/lib/messages_lib/01fb_9777_Calls_20timed_20out.rel new file mode 100644 index 00000000..21b7f211 --- /dev/null +++ b/src/nos/lib/messages_lib/01fb_9777_Calls_20timed_20out.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S ___01fb_9777_Calls_20timed_20out Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2e 00 43 61 6c 6c 73 20 74 69 6d +R 00 00 01 00 +T 0b 00 00 00 65 64 20 6f 75 74 20 25 6c 75 2c +R 00 00 01 00 +T 16 00 00 00 20 63 61 72 72 69 65 72 20 74 72 +R 00 00 01 00 +T 21 00 00 00 61 6e 73 69 74 69 6f 6e 73 20 25 +R 00 00 01 00 +T 2c 00 00 00 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01fc_e911_Can_27t_20NLST_20_2.rel b/src/nos/lib/messages_lib/01fc_e911_Can_27t_20NLST_20_2.rel new file mode 100644 index 00000000..d5a63c40 --- /dev/null +++ b/src/nos/lib/messages_lib/01fc_e911_Can_27t_20NLST_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___01fc_e911_Can_27t_20NLST_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 43 61 6e 27 74 20 4e 4c 53 +R 00 00 01 00 +T 0b 00 00 00 54 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01fd_daf3_Can_27t_20add_20rou.rel b/src/nos/lib/messages_lib/01fd_daf3_Can_27t_20add_20rou.rel new file mode 100644 index 00000000..80e72f21 --- /dev/null +++ b/src/nos/lib/messages_lib/01fd_daf3_Can_27t_20add_20rou.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___01fd_daf3_Can_27t_20add_20rou Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 43 61 6e 27 74 20 61 64 64 +R 00 00 01 00 +T 0b 00 00 00 20 72 6f 75 74 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01fe_6db7_Can_27t_20attach_20.rel b/src/nos/lib/messages_lib/01fe_6db7_Can_27t_20attach_20.rel new file mode 100644 index 00000000..0981c6a8 --- /dev/null +++ b/src/nos/lib/messages_lib/01fe_6db7_Can_27t_20attach_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___01fe_6db7_Can_27t_20attach_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 43 61 6e 27 74 20 61 74 74 +R 00 00 01 00 +T 0b 00 00 00 61 63 68 20 69 6e 74 65 72 66 61 +R 00 00 01 00 +T 16 00 00 00 63 65 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/01ff_79e8_Can_27t_20change_20.rel b/src/nos/lib/messages_lib/01ff_79e8_Can_27t_20change_20.rel new file mode 100644 index 00000000..2820dc16 --- /dev/null +++ b/src/nos/lib/messages_lib/01ff_79e8_Can_27t_20change_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___01ff_79e8_Can_27t_20change_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 43 61 6e 27 74 20 63 68 61 +R 00 00 01 00 +T 0b 00 00 00 6e 67 65 20 64 69 72 65 63 74 6f +R 00 00 01 00 +T 16 00 00 00 72 79 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0200_3bb8_Can_27t_20create_20.rel b/src/nos/lib/messages_lib/0200_3bb8_Can_27t_20create_20.rel new file mode 100644 index 00000000..73fc02cb --- /dev/null +++ b/src/nos/lib/messages_lib/0200_3bb8_Can_27t_20create_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0200_3bb8_Can_27t_20create_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 43 61 6e 27 74 20 63 72 65 +R 00 00 01 00 +T 0b 00 00 00 61 74 65 20 22 25 73 22 3a 20 25 +R 00 00 01 00 +T 16 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0201_0003_Can_27t_20create_20.rel b/src/nos/lib/messages_lib/0201_0003_Can_27t_20create_20.rel new file mode 100644 index 00000000..ce7d22bb --- /dev/null +++ b/src/nos/lib/messages_lib/0201_0003_Can_27t_20create_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0201_0003_Can_27t_20create_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 43 61 6e 27 74 20 63 72 65 +R 00 00 01 00 +T 0b 00 00 00 61 74 65 20 72 61 77 20 73 6f 63 +R 00 00 01 00 +T 16 00 00 00 6b 65 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0202_ef8c_Can_27t_20create_20.rel b/src/nos/lib/messages_lib/0202_ef8c_Can_27t_20create_20.rel new file mode 100644 index 00000000..8cdd632c --- /dev/null +++ b/src/nos/lib/messages_lib/0202_ef8c_Can_27t_20create_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0202_ef8c_Can_27t_20create_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 43 61 6e 27 74 20 63 72 65 +R 00 00 01 00 +T 0b 00 00 00 61 74 65 20 73 6f 63 6b 65 74 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0203_28e0_Can_27t_20create_20.rel b/src/nos/lib/messages_lib/0203_28e0_Can_27t_20create_20.rel new file mode 100644 index 00000000..d5b1b00c --- /dev/null +++ b/src/nos/lib/messages_lib/0203_28e0_Can_27t_20create_20.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___0203_28e0_Can_27t_20create_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 43 61 6e 27 74 20 63 72 65 +R 00 00 01 00 +T 0b 00 00 00 61 74 65 20 74 65 6d 70 20 66 69 +R 00 00 01 00 +T 16 00 00 00 6c 65 20 66 6f 72 20 6d 61 69 6c +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0204_d5bc_Can_27t_20create_20.rel b/src/nos/lib/messages_lib/0204_d5bc_Can_27t_20create_20.rel new file mode 100644 index 00000000..e779ceae --- /dev/null +++ b/src/nos/lib/messages_lib/0204_d5bc_Can_27t_20create_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0204_d5bc_Can_27t_20create_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 43 61 6e 27 74 20 63 72 65 +R 00 00 01 00 +T 0b 00 00 00 61 74 65 20 75 64 70 20 73 6f 63 +R 00 00 01 00 +T 16 00 00 00 6b 65 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0205_c7fb_Can_27t_20delete_20.rel b/src/nos/lib/messages_lib/0205_c7fb_Can_27t_20delete_20.rel new file mode 100644 index 00000000..e2df04cc --- /dev/null +++ b/src/nos/lib/messages_lib/0205_c7fb_Can_27t_20delete_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0205_c7fb_Can_27t_20delete_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 43 61 6e 27 74 20 64 65 6c +R 00 00 01 00 +T 0b 00 00 00 65 74 65 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0206_d5d6_Can_27t_20detach_20.rel b/src/nos/lib/messages_lib/0206_d5d6_Can_27t_20detach_20.rel new file mode 100644 index 00000000..55217f5c --- /dev/null +++ b/src/nos/lib/messages_lib/0206_d5d6_Can_27t_20detach_20.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2c flags 0 +S ___0206_d5d6_Can_27t_20detach_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2a 00 43 61 6e 27 74 20 64 65 74 +R 00 00 01 00 +T 0b 00 00 00 61 63 68 20 6c 6f 6f 70 62 61 63 +R 00 00 01 00 +T 16 00 00 00 6b 20 6f 72 20 65 6e 63 61 70 20 +R 00 00 01 00 +T 21 00 00 00 69 6e 74 65 72 66 61 63 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0207_5d65_Can_27t_20find_20he.rel b/src/nos/lib/messages_lib/0207_5d65_Can_27t_20find_20he.rel new file mode 100644 index 00000000..2c45183d --- /dev/null +++ b/src/nos/lib/messages_lib/0207_5d65_Can_27t_20find_20he.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___0207_5d65_Can_27t_20find_20he Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 43 61 6e 27 74 20 66 69 6e +R 00 00 01 00 +T 0b 00 00 00 64 20 68 65 61 64 65 72 20 6c 69 +R 00 00 01 00 +T 16 00 00 00 6e 65 20 69 6e 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0208_3eee_Can_27t_20list_20lo.rel b/src/nos/lib/messages_lib/0208_3eee_Can_27t_20list_20lo.rel new file mode 100644 index 00000000..b29e445e --- /dev/null +++ b/src/nos/lib/messages_lib/0208_3eee_Can_27t_20list_20lo.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0208_3eee_Can_27t_20list_20lo Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 43 61 6e 27 74 20 6c 69 73 +R 00 00 01 00 +T 0b 00 00 00 74 20 6c 6f 63 61 6c 20 66 69 6c +R 00 00 01 00 +T 16 00 00 00 65 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0209_c1c1_Can_27t_20open_20_2.rel b/src/nos/lib/messages_lib/0209_c1c1_Can_27t_20open_20_2.rel new file mode 100644 index 00000000..e9eb56f3 --- /dev/null +++ b/src/nos/lib/messages_lib/0209_c1c1_Can_27t_20open_20_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0209_c1c1_Can_27t_20open_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 43 61 6e 27 74 20 6f 70 65 +R 00 00 01 00 +T 0b 00 00 00 6e 20 22 25 73 22 3a 20 25 73 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/020a_fedd_Can_27t_20open_20_2.rel b/src/nos/lib/messages_lib/020a_fedd_Can_27t_20open_20_2.rel new file mode 100644 index 00000000..b572963f --- /dev/null +++ b/src/nos/lib/messages_lib/020a_fedd_Can_27t_20open_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___020a_fedd_Can_27t_20open_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 43 61 6e 27 74 20 6f 70 65 +R 00 00 01 00 +T 0b 00 00 00 6e 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/020b_fb2a_Can_27t_20open_20_2.rel b/src/nos/lib/messages_lib/020b_fb2a_Can_27t_20open_20_2.rel new file mode 100644 index 00000000..6936d6bf --- /dev/null +++ b/src/nos/lib/messages_lib/020b_fb2a_Can_27t_20open_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___020b_fb2a_Can_27t_20open_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 43 61 6e 27 74 20 6f 70 65 +R 00 00 01 00 +T 0b 00 00 00 6e 20 25 73 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/020c_d8a5_Can_27t_20open_20in.rel b/src/nos/lib/messages_lib/020c_d8a5_Can_27t_20open_20in.rel new file mode 100644 index 00000000..7a79cf44 --- /dev/null +++ b/src/nos/lib/messages_lib/020c_d8a5_Can_27t_20open_20in.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___020c_d8a5_Can_27t_20open_20in Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 43 61 6e 27 74 20 6f 70 65 +R 00 00 01 00 +T 0b 00 00 00 6e 20 69 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 16 00 00 00 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/020d_0616_Can_27t_20read_20_2.rel b/src/nos/lib/messages_lib/020d_0616_Can_27t_20read_20_2.rel new file mode 100644 index 00000000..cd5b43c4 --- /dev/null +++ b/src/nos/lib/messages_lib/020d_0616_Can_27t_20read_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___020d_0616_Can_27t_20read_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 43 61 6e 27 74 20 72 65 61 +R 00 00 01 00 +T 0b 00 00 00 64 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/020e_4a10_Can_27t_20read_20_2.rel b/src/nos/lib/messages_lib/020e_4a10_Can_27t_20read_20_2.rel new file mode 100644 index 00000000..44783cb4 --- /dev/null +++ b/src/nos/lib/messages_lib/020e_4a10_Can_27t_20read_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___020e_4a10_Can_27t_20read_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 43 61 6e 27 74 20 72 65 61 +R 00 00 01 00 +T 0b 00 00 00 64 20 25 73 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/020f_8468_Can_27t_20read_20co.rel b/src/nos/lib/messages_lib/020f_8468_Can_27t_20read_20co.rel new file mode 100644 index 00000000..85172741 --- /dev/null +++ b/src/nos/lib/messages_lib/020f_8468_Can_27t_20read_20co.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___020f_8468_Can_27t_20read_20co Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 43 61 6e 27 74 20 72 65 61 +R 00 00 01 00 +T 0b 00 00 00 64 20 63 6f 6e 66 69 67 20 66 69 +R 00 00 01 00 +T 16 00 00 00 6c 65 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0210_4327_Can_27t_20read_20di.rel b/src/nos/lib/messages_lib/0210_4327_Can_27t_20read_20di.rel new file mode 100644 index 00000000..458c7f9a --- /dev/null +++ b/src/nos/lib/messages_lib/0210_4327_Can_27t_20read_20di.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___0210_4327_Can_27t_20read_20di Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 43 61 6e 27 74 20 72 65 61 +R 00 00 01 00 +T 0b 00 00 00 64 20 64 69 72 65 63 74 6f 72 79 +R 00 00 01 00 +T 16 00 00 00 3a 20 22 25 73 22 3a 20 25 73 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0211_5fb2_Can_27t_20read_20lo.rel b/src/nos/lib/messages_lib/0211_5fb2_Can_27t_20read_20lo.rel new file mode 100644 index 00000000..6683955e --- /dev/null +++ b/src/nos/lib/messages_lib/0211_5fb2_Can_27t_20read_20lo.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0211_5fb2_Can_27t_20read_20lo Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 43 61 6e 27 74 20 72 65 61 +R 00 00 01 00 +T 0b 00 00 00 64 20 6c 6f 63 61 6c 20 66 69 6c +R 00 00 01 00 +T 16 00 00 00 65 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0212_36d4_Can_27t_20read_20pa.rel b/src/nos/lib/messages_lib/0212_36d4_Can_27t_20read_20pa.rel new file mode 100644 index 00000000..dcee41de --- /dev/null +++ b/src/nos/lib/messages_lib/0212_36d4_Can_27t_20read_20pa.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0212_36d4_Can_27t_20read_20pa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 43 61 6e 27 74 20 72 65 61 +R 00 00 01 00 +T 0b 00 00 00 64 20 70 61 73 73 77 64 20 66 69 +R 00 00 01 00 +T 16 00 00 00 6c 65 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0213_5e43_Can_27t_20rename_20.rel b/src/nos/lib/messages_lib/0213_5e43_Can_27t_20rename_20.rel new file mode 100644 index 00000000..0f033502 --- /dev/null +++ b/src/nos/lib/messages_lib/0213_5e43_Can_27t_20rename_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0213_5e43_Can_27t_20rename_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 43 61 6e 27 74 20 72 65 6e +R 00 00 01 00 +T 0b 00 00 00 61 6d 65 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0214_4bfe_Can_27t_20rewrite_2.rel b/src/nos/lib/messages_lib/0214_4bfe_Can_27t_20rewrite_2.rel new file mode 100644 index 00000000..99413b68 --- /dev/null +++ b/src/nos/lib/messages_lib/0214_4bfe_Can_27t_20rewrite_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___0214_4bfe_Can_27t_20rewrite_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 43 61 6e 27 74 20 72 65 77 +R 00 00 01 00 +T 0b 00 00 00 72 69 74 65 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0215_24ca_Can_27t_20set_20lin.rel b/src/nos/lib/messages_lib/0215_24ca_Can_27t_20set_20lin.rel new file mode 100644 index 00000000..2e913b60 --- /dev/null +++ b/src/nos/lib/messages_lib/0215_24ca_Can_27t_20set_20lin.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0215_24ca_Can_27t_20set_20lin Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 43 61 6e 27 74 20 73 65 74 +R 00 00 01 00 +T 0b 00 00 00 20 6c 69 6e 6b 20 61 64 64 72 65 +R 00 00 01 00 +T 16 00 00 00 73 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0216_5e82_Can_27t_20write_20_.rel b/src/nos/lib/messages_lib/0216_5e82_Can_27t_20write_20_.rel new file mode 100644 index 00000000..4da53720 --- /dev/null +++ b/src/nos/lib/messages_lib/0216_5e82_Can_27t_20write_20_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0216_5e82_Can_27t_20write_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 43 61 6e 27 74 20 77 72 69 +R 00 00 01 00 +T 0b 00 00 00 74 65 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0217_988b_Can_27t_20write_20l.rel b/src/nos/lib/messages_lib/0217_988b_Can_27t_20write_20l.rel new file mode 100644 index 00000000..c6b93b4a --- /dev/null +++ b/src/nos/lib/messages_lib/0217_988b_Can_27t_20write_20l.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0217_988b_Can_27t_20write_20l Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 43 61 6e 27 74 20 77 72 69 +R 00 00 01 00 +T 0b 00 00 00 74 65 20 6c 6f 63 61 6c 20 66 69 +R 00 00 01 00 +T 16 00 00 00 6c 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0218_c0f9_Can_27t_20write_20t.rel b/src/nos/lib/messages_lib/0218_c0f9_Can_27t_20write_20t.rel new file mode 100644 index 00000000..a4803077 --- /dev/null +++ b/src/nos/lib/messages_lib/0218_c0f9_Can_27t_20write_20t.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0218_c0f9_Can_27t_20write_20t Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 43 61 6e 27 74 20 77 72 69 +R 00 00 01 00 +T 0b 00 00 00 74 65 20 74 6f 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0219_5055_Ch_20Iface_20_20_20.rel b/src/nos/lib/messages_lib/0219_5055_Ch_20Iface_20_20_20.rel new file mode 100644 index 00000000..cdcb6593 --- /dev/null +++ b/src/nos/lib/messages_lib/0219_5055_Ch_20Iface_20_20_20.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 53 flags 0 +S ___0219_5055_Ch_20Iface_20_20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 51 00 43 68 20 49 66 61 63 65 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 20 53 65 6e 74 20 20 20 52 +R 00 00 01 00 +T 16 00 00 00 63 76 64 20 20 20 45 72 72 6f 72 +R 00 00 01 00 +T 21 00 00 00 20 53 70 61 63 65 20 4f 76 65 72 +R 00 00 01 00 +T 2c 00 00 00 72 20 20 20 52 78 69 6e 74 73 20 +R 00 00 01 00 +T 37 00 00 00 20 20 54 78 69 6e 74 73 20 20 20 +R 00 00 01 00 +T 42 00 00 00 45 78 69 6e 74 73 20 20 20 53 70 +R 00 00 01 00 +T 4d 00 00 00 69 6e 74 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/021a_eff3_Channel_20_2d_20_25.rel b/src/nos/lib/messages_lib/021a_eff3_Channel_20_2d_20_25.rel new file mode 100644 index 00000000..1a98c58e --- /dev/null +++ b/src/nos/lib/messages_lib/021a_eff3_Channel_20_2d_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___021a_eff3_Channel_20_2d_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 43 68 61 6e 6e 65 6c 20 2d +R 00 00 01 00 +T 0b 00 00 00 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/021b_1b09_Choke_20timeout_20_.rel b/src/nos/lib/messages_lib/021b_1b09_Choke_20timeout_20_.rel new file mode 100644 index 00000000..94df4f9e --- /dev/null +++ b/src/nos/lib/messages_lib/021b_1b09_Choke_20timeout_20_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___021b_1b09_Choke_20timeout_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 43 68 6f 6b 65 20 74 69 6d +R 00 00 01 00 +T 0b 00 00 00 65 6f 75 74 20 28 6d 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/021c_f95c_Closed_3a_20_25s_0a.rel b/src/nos/lib/messages_lib/021c_f95c_Closed_3a_20_25s_0a.rel new file mode 100644 index 00000000..341e1c6f --- /dev/null +++ b/src/nos/lib/messages_lib/021c_f95c_Closed_3a_20_25s_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___021c_f95c_Closed_3a_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 43 6c 6f 73 65 64 3a 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/021d_e508_Command_20batching.rel b/src/nos/lib/messages_lib/021d_e508_Command_20batching.rel new file mode 100644 index 00000000..eb00653d --- /dev/null +++ b/src/nos/lib/messages_lib/021d_e508_Command_20batching.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___021d_e508_Command_20batching Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 43 6f 6d 6d 61 6e 64 20 62 +R 00 00 01 00 +T 0b 00 00 00 61 74 63 68 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/021e_b471_Connect_20failed_0a.rel b/src/nos/lib/messages_lib/021e_b471_Connect_20failed_0a.rel new file mode 100644 index 00000000..9d5993a1 --- /dev/null +++ b/src/nos/lib/messages_lib/021e_b471_Connect_20failed_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___021e_b471_Connect_20failed_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 43 6f 6e 6e 65 63 74 20 66 +R 00 00 01 00 +T 0b 00 00 00 61 69 6c 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/021f_bb2f_Connect_20failed_3a.rel b/src/nos/lib/messages_lib/021f_bb2f_Connect_20failed_3a.rel new file mode 100644 index 00000000..103cc0da --- /dev/null +++ b/src/nos/lib/messages_lib/021f_bb2f_Connect_20failed_3a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___021f_bb2f_Connect_20failed_3a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 43 6f 6e 6e 65 63 74 20 66 +R 00 00 01 00 +T 0b 00 00 00 61 69 6c 65 64 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0220_85e9_Connect_20to_20mail.rel b/src/nos/lib/messages_lib/0220_85e9_Connect_20to_20mail.rel new file mode 100644 index 00000000..77718f85 --- /dev/null +++ b/src/nos/lib/messages_lib/0220_85e9_Connect_20to_20mail.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___0220_85e9_Connect_20to_20mail Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 43 6f 6e 6e 65 63 74 20 74 +R 00 00 01 00 +T 0b 00 00 00 6f 20 6d 61 69 6c 68 6f 73 74 20 +R 00 00 01 00 +T 16 00 00 00 25 73 20 66 61 69 6c 65 64 3a 20 +R 00 00 01 00 +T 21 00 00 00 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0221_6930_Connected_0a.rel b/src/nos/lib/messages_lib/0221_6930_Connected_0a.rel new file mode 100644 index 00000000..5d7c669c --- /dev/null +++ b/src/nos/lib/messages_lib/0221_6930_Connected_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0221_6930_Connected_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 43 6f 6e 6e 65 63 74 65 64 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0222_5189_Connected_20to_20_2.rel b/src/nos/lib/messages_lib/0222_5189_Connected_20to_20_2.rel new file mode 100644 index 00000000..04660dca --- /dev/null +++ b/src/nos/lib/messages_lib/0222_5189_Connected_20to_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0222_5189_Connected_20to_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 43 6f 6e 6e 65 63 74 65 64 +R 00 00 01 00 +T 0b 00 00 00 20 74 6f 20 25 73 09 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0223_771a_Connected_20to_20ma.rel b/src/nos/lib/messages_lib/0223_771a_Connected_20to_20ma.rel new file mode 100644 index 00000000..aabc3559 --- /dev/null +++ b/src/nos/lib/messages_lib/0223_771a_Connected_20to_20ma.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0223_771a_Connected_20to_20ma Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 43 6f 6e 6e 65 63 74 65 64 +R 00 00 01 00 +T 0b 00 00 00 20 74 6f 20 6d 61 69 6c 68 6f 73 +R 00 00 01 00 +T 16 00 00 00 74 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0224_0e16_Connected_2e.rel b/src/nos/lib/messages_lib/0224_0e16_Connected_2e.rel new file mode 100644 index 00000000..722d7958 --- /dev/null +++ b/src/nos/lib/messages_lib/0224_0e16_Connected_2e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0224_0e16_Connected_2e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 43 6f 6e 6e 65 63 74 65 64 +R 00 00 01 00 +T 0b 00 00 00 2e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0225_3e79_Connection_20closed.rel b/src/nos/lib/messages_lib/0225_3e79_Connection_20closed.rel new file mode 100644 index 00000000..06982e51 --- /dev/null +++ b/src/nos/lib/messages_lib/0225_3e79_Connection_20closed.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___0225_3e79_Connection_20closed Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 43 6f 6e 6e 65 63 74 69 6f +R 00 00 01 00 +T 0b 00 00 00 6e 20 63 6c 6f 73 65 64 20 74 6f +R 00 00 01 00 +T 16 00 00 00 20 6d 61 69 6c 68 6f 73 74 20 25 +R 00 00 01 00 +T 21 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0226_faa9_Connection_20failed.rel b/src/nos/lib/messages_lib/0226_faa9_Connection_20failed.rel new file mode 100644 index 00000000..df4f2815 --- /dev/null +++ b/src/nos/lib/messages_lib/0226_faa9_Connection_20failed.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___0226_faa9_Connection_20failed Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 43 6f 6e 6e 65 63 74 69 6f +R 00 00 01 00 +T 0b 00 00 00 6e 20 66 61 69 6c 65 64 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0227_3676_Could_20not_20creat.rel b/src/nos/lib/messages_lib/0227_3676_Could_20not_20creat.rel new file mode 100644 index 00000000..8349d0ec --- /dev/null +++ b/src/nos/lib/messages_lib/0227_3676_Could_20not_20creat.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___0227_3676_Could_20not_20creat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 43 6f 75 6c 64 20 6e 6f 74 +R 00 00 01 00 +T 0b 00 00 00 20 63 72 65 61 74 65 20 73 6f 63 +R 00 00 01 00 +T 16 00 00 00 6b 65 74 20 70 61 69 72 2c 20 65 +R 00 00 01 00 +T 21 00 00 00 72 72 6e 6f 20 25 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0228_d95b_Couldn_27t_20queue_.rel b/src/nos/lib/messages_lib/0228_d95b_Couldn_27t_20queue_.rel new file mode 100644 index 00000000..296f2766 --- /dev/null +++ b/src/nos/lib/messages_lib/0228_d95b_Couldn_27t_20queue_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S ___0228_d95b_Couldn_27t_20queue_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 24 00 43 6f 75 6c 64 6e 27 74 20 +R 00 00 01 00 +T 0b 00 00 00 71 75 65 75 65 20 6d 65 73 73 61 +R 00 00 01 00 +T 16 00 00 00 67 65 20 66 6f 72 20 64 65 6c 69 +R 00 00 01 00 +T 21 00 00 00 76 65 72 79 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0229_68a6_Current_20message_2.rel b/src/nos/lib/messages_lib/0229_68a6_Current_20message_2.rel new file mode 100644 index 00000000..2dec6c20 --- /dev/null +++ b/src/nos/lib/messages_lib/0229_68a6_Current_20message_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0229_68a6_Current_20message_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 43 75 72 72 65 6e 74 20 6d +R 00 00 01 00 +T 0b 00 00 00 65 73 73 61 67 65 20 61 72 65 61 +R 00 00 01 00 +T 16 00 00 00 20 69 73 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/022a_23ad_Currently_20enabled.rel b/src/nos/lib/messages_lib/022a_23ad_Currently_20enabled.rel new file mode 100644 index 00000000..89f2a3b3 --- /dev/null +++ b/src/nos/lib/messages_lib/022a_23ad_Currently_20enabled.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___022a_23ad_Currently_20enabled Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 43 75 72 72 65 6e 74 6c 79 +R 00 00 01 00 +T 0b 00 00 00 20 65 6e 61 62 6c 65 64 20 6e 65 +R 00 00 01 00 +T 16 00 00 00 77 73 67 72 6f 75 70 73 3a 0a 25 +R 00 00 01 00 +T 21 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/022b_1cf7_DELE_20_25s.rel b/src/nos/lib/messages_lib/022b_1cf7_DELE_20_25s.rel new file mode 100644 index 00000000..a478f0b1 --- /dev/null +++ b/src/nos/lib/messages_lib/022b_1cf7_DELE_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___022b_1cf7_DELE_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 44 45 4c 45 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/022c_5fad_DISASTER_21_20Out_2.rel b/src/nos/lib/messages_lib/022c_5fad_DISASTER_21_20Out_2.rel new file mode 100644 index 00000000..fbd389a4 --- /dev/null +++ b/src/nos/lib/messages_lib/022c_5fad_DISASTER_21_20Out_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___022c_5fad_DISASTER_21_20Out_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 44 49 53 41 53 54 45 52 21 +R 00 00 01 00 +T 0b 00 00 00 20 4f 75 74 20 6f 66 20 4d 65 6d +R 00 00 01 00 +T 16 00 00 00 6f 72 79 20 66 6f 72 20 52 65 63 +R 00 00 01 00 +T 21 00 00 00 65 69 76 65 21 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/022d_7ce2_DRSI_20Board_20Stat.rel b/src/nos/lib/messages_lib/022d_7ce2_DRSI_20Board_20Stat.rel new file mode 100644 index 00000000..89d06847 --- /dev/null +++ b/src/nos/lib/messages_lib/022d_7ce2_DRSI_20Board_20Stat.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___022d_7ce2_DRSI_20Board_20Stat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 44 52 53 49 20 42 6f 61 72 +R 00 00 01 00 +T 0b 00 00 00 64 20 53 74 61 74 69 73 74 69 63 +R 00 00 01 00 +T 16 00 00 00 73 20 2d 20 4e 36 54 54 4f 20 31 +R 00 00 01 00 +T 21 00 00 00 31 32 37 39 30 2e 30 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/022e_2f52_D_5bU_5d_20filename.rel b/src/nos/lib/messages_lib/022e_2f52_D_5bU_5d_20filename.rel new file mode 100644 index 00000000..ecfcfcc5 --- /dev/null +++ b/src/nos/lib/messages_lib/022e_2f52_D_5bU_5d_20filename.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___022e_2f52_D_5bU_5d_20filename Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 44 5b 55 5d 20 66 69 6c 65 +R 00 00 01 00 +T 0b 00 00 00 6e 61 6d 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/022f_698b_Data_0a.rel b/src/nos/lib/messages_lib/022f_698b_Data_0a.rel new file mode 100644 index 00000000..b052c6a9 --- /dev/null +++ b/src/nos/lib/messages_lib/022f_698b_Data_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___022f_698b_Data_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 44 61 74 61 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0230_cb1c_Data_20outside_20he.rel b/src/nos/lib/messages_lib/0230_cb1c_Data_20outside_20he.rel new file mode 100644 index 00000000..afe70d4b --- /dev/null +++ b/src/nos/lib/messages_lib/0230_cb1c_Data_20outside_20he.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0230_cb1c_Data_20outside_20he Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 44 61 74 61 20 6f 75 74 73 +R 00 00 01 00 +T 0b 00 00 00 69 64 65 20 68 65 61 70 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0231_01be_Data_20pointer_20_2.rel b/src/nos/lib/messages_lib/0231_01be_Data_20pointer_20_2.rel new file mode 100644 index 00000000..f1921e34 --- /dev/null +++ b/src/nos/lib/messages_lib/0231_01be_Data_20pointer_20_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___0231_01be_Data_20pointer_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 44 61 74 61 20 70 6f 69 6e +R 00 00 01 00 +T 0b 00 00 00 74 65 72 20 2b 20 63 6f 75 6e 74 +R 00 00 01 00 +T 16 00 00 00 20 70 61 73 74 20 62 6f 75 6e 64 +R 00 00 01 00 +T 21 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0232_3cbb_Data_20pointer_20be.rel b/src/nos/lib/messages_lib/0232_3cbb_Data_20pointer_20be.rel new file mode 100644 index 00000000..daab9a42 --- /dev/null +++ b/src/nos/lib/messages_lib/0232_3cbb_Data_20pointer_20be.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___0232_3cbb_Data_20pointer_20be Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 44 61 74 61 20 70 6f 69 6e +R 00 00 01 00 +T 0b 00 00 00 74 65 72 20 62 65 66 6f 72 65 20 +R 00 00 01 00 +T 16 00 00 00 62 75 66 66 65 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0233_bd70_Defaulting_20to_20b.rel b/src/nos/lib/messages_lib/0233_bd70_Defaulting_20to_20b.rel new file mode 100644 index 00000000..40e56bcc --- /dev/null +++ b/src/nos/lib/messages_lib/0233_bd70_Defaulting_20to_20b.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___0233_bd70_Defaulting_20to_20b Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 44 65 66 61 75 6c 74 69 6e +R 00 00 01 00 +T 0b 00 00 00 67 20 74 6f 20 62 69 6e 61 72 79 +R 00 00 01 00 +T 16 00 00 00 20 6d 6f 64 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0234_2d19_Del_5fconst_20_3d_2.rel b/src/nos/lib/messages_lib/0234_2d19_Del_5fconst_20_3d_2.rel new file mode 100644 index 00000000..e25e31d6 --- /dev/null +++ b/src/nos/lib/messages_lib/0234_2d19_Del_5fconst_20_3d_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0234_2d19_Del_5fconst_20_3d_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 44 65 6c 5f 63 6f 6e 73 74 +R 00 00 01 00 +T 0b 00 00 00 20 3d 20 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0235_6255_Dest_20Addr_20_20_2.rel b/src/nos/lib/messages_lib/0235_6255_Dest_20Addr_20_20_2.rel new file mode 100644 index 00000000..18bc0b79 --- /dev/null +++ b/src/nos/lib/messages_lib/0235_6255_Dest_20Addr_20_20_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___0235_6255_Dest_20Addr_20_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 44 65 73 74 20 41 64 64 72 +R 00 00 01 00 +T 0b 00 00 00 20 20 20 20 20 20 20 49 6e 74 65 +R 00 00 01 00 +T 16 00 00 00 72 76 61 6c 20 53 70 6c 69 74 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0236_3894_Dialing_20not_20sup.rel b/src/nos/lib/messages_lib/0236_3894_Dialing_20not_20sup.rel new file mode 100644 index 00000000..a4ace59f --- /dev/null +++ b/src/nos/lib/messages_lib/0236_3894_Dialing_20not_20sup.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0236_3894_Dialing_20not_20sup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 44 69 61 6c 69 6e 67 20 6e +R 00 00 01 00 +T 0b 00 00 00 6f 74 20 73 75 70 70 6f 72 74 65 +R 00 00 01 00 +T 16 00 00 00 64 20 6f 6e 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0237_26a3_Different_0a.rel b/src/nos/lib/messages_lib/0237_26a3_Different_0a.rel new file mode 100644 index 00000000..18c0b986 --- /dev/null +++ b/src/nos/lib/messages_lib/0237_26a3_Different_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0237_26a3_Different_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 44 69 66 66 65 72 65 6e 74 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0238_ae33_Digipeat.rel b/src/nos/lib/messages_lib/0238_ae33_Digipeat.rel new file mode 100644 index 00000000..be80be75 --- /dev/null +++ b/src/nos/lib/messages_lib/0238_ae33_Digipeat.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0238_ae33_Digipeat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 44 69 67 69 70 65 61 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0239_af35_Directory_20table_2.rel b/src/nos/lib/messages_lib/0239_af35_Directory_20table_2.rel new file mode 100644 index 00000000..611f0634 --- /dev/null +++ b/src/nos/lib/messages_lib/0239_af35_Directory_20table_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___0239_af35_Directory_20table_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 44 69 72 65 63 74 6f 72 79 +R 00 00 01 00 +T 0b 00 00 00 20 74 61 62 6c 65 20 66 75 6c 6c +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/023a_c1bb_Disconnected_20.rel b/src/nos/lib/messages_lib/023a_c1bb_Disconnected_20.rel new file mode 100644 index 00000000..5cefd447 --- /dev/null +++ b/src/nos/lib/messages_lib/023a_c1bb_Disconnected_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___023a_c1bb_Disconnected_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 44 69 73 63 6f 6e 6e 65 63 +R 00 00 01 00 +T 0b 00 00 00 74 65 64 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/023b_2cc5_Disconnecting_2e.rel b/src/nos/lib/messages_lib/023b_2cc5_Disconnecting_2e.rel new file mode 100644 index 00000000..110f9323 --- /dev/null +++ b/src/nos/lib/messages_lib/023b_2cc5_Disconnecting_2e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___023b_2cc5_Disconnecting_2e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 44 69 73 63 6f 6e 6e 65 63 +R 00 00 01 00 +T 0b 00 00 00 74 69 6e 67 2e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/023c_b7f4_Dup_20acks_20_20_20.rel b/src/nos/lib/messages_lib/023c_b7f4_Dup_20acks_20_20_20.rel new file mode 100644 index 00000000..805d5f40 --- /dev/null +++ b/src/nos/lib/messages_lib/023c_b7f4_Dup_20acks_20_20_20.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 48 flags 0 +S ___023c_b7f4_Dup_20acks_20_20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 46 00 44 75 70 20 61 63 6b 73 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 42 61 63 6b 6f 66 66 20 20 +R 00 00 01 00 +T 16 00 00 00 20 54 69 6d 65 6f 75 74 73 20 20 +R 00 00 01 00 +T 21 00 00 00 20 53 6f 75 72 63 65 20 51 75 65 +R 00 00 01 00 +T 2c 00 00 00 6e 63 68 20 20 20 55 6e 72 65 61 +R 00 00 01 00 +T 37 00 00 00 63 68 61 62 6c 65 73 20 20 20 50 +R 00 00 01 00 +T 42 00 00 00 6f 77 65 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/023d_3ed4_Duplex_3a_20_25s_0a.rel b/src/nos/lib/messages_lib/023d_3ed4_Duplex_3a_20_25s_0a.rel new file mode 100644 index 00000000..8289ece7 --- /dev/null +++ b/src/nos/lib/messages_lib/023d_3ed4_Duplex_3a_20_25s_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___023d_3ed4_Duplex_3a_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 44 75 70 6c 65 78 3a 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/023e_b671_E2BIG.rel b/src/nos/lib/messages_lib/023e_b671_E2BIG.rel new file mode 100644 index 00000000..f5be4dfb --- /dev/null +++ b/src/nos/lib/messages_lib/023e_b671_E2BIG.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___023e_b671_E2BIG Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 32 42 49 47 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/023f_56e8_EACCES.rel b/src/nos/lib/messages_lib/023f_56e8_EACCES.rel new file mode 100644 index 00000000..5dfe0a3b --- /dev/null +++ b/src/nos/lib/messages_lib/023f_56e8_EACCES.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___023f_56e8_EACCES Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 41 43 43 45 53 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0240_f378_EAGAIN.rel b/src/nos/lib/messages_lib/0240_f378_EAGAIN.rel new file mode 100644 index 00000000..118d6116 --- /dev/null +++ b/src/nos/lib/messages_lib/0240_f378_EAGAIN.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0240_f378_EAGAIN Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 41 47 41 49 4e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0241_0483_EAGLE_20Board_20Sta.rel b/src/nos/lib/messages_lib/0241_0483_EAGLE_20Board_20Sta.rel new file mode 100644 index 00000000..e389ed56 --- /dev/null +++ b/src/nos/lib/messages_lib/0241_0483_EAGLE_20Board_20Sta.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0241_0483_EAGLE_20Board_20Sta Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 45 41 47 4c 45 20 42 6f 61 +R 00 00 01 00 +T 0b 00 00 00 72 64 20 53 74 61 74 69 73 74 69 +R 00 00 01 00 +T 16 00 00 00 63 73 3a 0a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0242_a2a1_EBADF.rel b/src/nos/lib/messages_lib/0242_a2a1_EBADF.rel new file mode 100644 index 00000000..43fe4b66 --- /dev/null +++ b/src/nos/lib/messages_lib/0242_a2a1_EBADF.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0242_a2a1_EBADF Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 42 41 44 46 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0243_74ba_EBUSY.rel b/src/nos/lib/messages_lib/0243_74ba_EBUSY.rel new file mode 100644 index 00000000..ad710bcf --- /dev/null +++ b/src/nos/lib/messages_lib/0243_74ba_EBUSY.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0243_74ba_EBUSY Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 42 55 53 59 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0244_4029_ECHILD.rel b/src/nos/lib/messages_lib/0244_4029_ECHILD.rel new file mode 100644 index 00000000..89031a16 --- /dev/null +++ b/src/nos/lib/messages_lib/0244_4029_ECHILD.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0244_4029_ECHILD Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 43 48 49 4c 44 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0245_cd2b_EDEADLK.rel b/src/nos/lib/messages_lib/0245_cd2b_EDEADLK.rel new file mode 100644 index 00000000..cd736ae1 --- /dev/null +++ b/src/nos/lib/messages_lib/0245_cd2b_EDEADLK.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0245_cd2b_EDEADLK Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 45 44 45 41 44 4c 4b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0246_4299_EDOM.rel b/src/nos/lib/messages_lib/0246_4299_EDOM.rel new file mode 100644 index 00000000..f8c44bcf --- /dev/null +++ b/src/nos/lib/messages_lib/0246_4299_EDOM.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0246_4299_EDOM Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 45 44 4f 4d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0247_bec8_EEXIST.rel b/src/nos/lib/messages_lib/0247_bec8_EEXIST.rel new file mode 100644 index 00000000..8dba209e --- /dev/null +++ b/src/nos/lib/messages_lib/0247_bec8_EEXIST.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0247_bec8_EEXIST Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 45 58 49 53 54 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0248_afa9_EFAULT.rel b/src/nos/lib/messages_lib/0248_afa9_EFAULT.rel new file mode 100644 index 00000000..b3dadcc9 --- /dev/null +++ b/src/nos/lib/messages_lib/0248_afa9_EFAULT.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0248_afa9_EFAULT Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 46 41 55 4c 54 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0249_9ed8_EFBIG.rel b/src/nos/lib/messages_lib/0249_9ed8_EFBIG.rel new file mode 100644 index 00000000..b3de7f57 --- /dev/null +++ b/src/nos/lib/messages_lib/0249_9ed8_EFBIG.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0249_9ed8_EFBIG Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 46 42 49 47 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/024a_28f7_EGATTACH_3a_20No_20.rel b/src/nos/lib/messages_lib/024a_28f7_EGATTACH_3a_20No_20.rel new file mode 100644 index 00000000..4138edeb --- /dev/null +++ b/src/nos/lib/messages_lib/024a_28f7_EGATTACH_3a_20No_20.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 35 flags 0 +S ___024a_28f7_EGATTACH_3a_20No_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 33 00 45 47 41 54 54 41 43 48 3a +R 00 00 01 00 +T 0b 00 00 00 20 4e 6f 20 6d 65 6d 6f 72 79 20 +R 00 00 01 00 +T 16 00 00 00 61 76 61 69 6c 61 62 6c 65 20 66 +R 00 00 01 00 +T 21 00 00 00 6f 72 20 52 65 63 65 69 76 65 20 +R 00 00 01 00 +T 2c 00 00 00 62 75 66 66 65 72 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/024b_eb47_EINTR.rel b/src/nos/lib/messages_lib/024b_eb47_EINTR.rel new file mode 100644 index 00000000..d4db1473 --- /dev/null +++ b/src/nos/lib/messages_lib/024b_eb47_EINTR.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___024b_eb47_EINTR Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 49 4e 54 52 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/024c_b479_EINVAL.rel b/src/nos/lib/messages_lib/024c_b479_EINVAL.rel new file mode 100644 index 00000000..aead8f58 --- /dev/null +++ b/src/nos/lib/messages_lib/024c_b479_EINVAL.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___024c_b479_EINVAL Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 49 4e 56 41 4c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/024d_21d8_EINVFNC.rel b/src/nos/lib/messages_lib/024d_21d8_EINVFNC.rel new file mode 100644 index 00000000..3e9cba57 --- /dev/null +++ b/src/nos/lib/messages_lib/024d_21d8_EINVFNC.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___024d_21d8_EINVFNC Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 45 49 4e 56 46 4e 43 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/024e_2d75_EIO.rel b/src/nos/lib/messages_lib/024e_2d75_EIO.rel new file mode 100644 index 00000000..a74b1bfa --- /dev/null +++ b/src/nos/lib/messages_lib/024e_2d75_EIO.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___024e_2d75_EIO Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 45 49 4f 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/024f_fb45_EISDIR.rel b/src/nos/lib/messages_lib/024f_fb45_EISDIR.rel new file mode 100644 index 00000000..8c1f5c62 --- /dev/null +++ b/src/nos/lib/messages_lib/024f_fb45_EISDIR.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___024f_fb45_EISDIR Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 49 53 44 49 52 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0250_8de7_ELOOP.rel b/src/nos/lib/messages_lib/0250_8de7_ELOOP.rel new file mode 100644 index 00000000..80e6b391 --- /dev/null +++ b/src/nos/lib/messages_lib/0250_8de7_ELOOP.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0250_8de7_ELOOP Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 4c 4f 4f 50 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0251_9e5a_EMFILE.rel b/src/nos/lib/messages_lib/0251_9e5a_EMFILE.rel new file mode 100644 index 00000000..7f83bc35 --- /dev/null +++ b/src/nos/lib/messages_lib/0251_9e5a_EMFILE.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0251_9e5a_EMFILE Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 4d 46 49 4c 45 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0252_983a_EMLINK.rel b/src/nos/lib/messages_lib/0252_983a_EMLINK.rel new file mode 100644 index 00000000..8ba32e23 --- /dev/null +++ b/src/nos/lib/messages_lib/0252_983a_EMLINK.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0252_983a_EMLINK Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 4d 4c 49 4e 4b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0253_0607_ENAMETOOLONG.rel b/src/nos/lib/messages_lib/0253_0607_ENAMETOOLONG.rel new file mode 100644 index 00000000..03d6cbd6 --- /dev/null +++ b/src/nos/lib/messages_lib/0253_0607_ENAMETOOLONG.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0253_0607_ENAMETOOLONG Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 45 4e 41 4d 45 54 4f 4f 4c +R 00 00 01 00 +T 0b 00 00 00 4f 4e 47 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0254_8396_ENFILE.rel b/src/nos/lib/messages_lib/0254_8396_ENFILE.rel new file mode 100644 index 00000000..67e550ae --- /dev/null +++ b/src/nos/lib/messages_lib/0254_8396_ENFILE.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0254_8396_ENFILE Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 4e 46 49 4c 45 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0255_7088_ENODEV.rel b/src/nos/lib/messages_lib/0255_7088_ENODEV.rel new file mode 100644 index 00000000..aaa2686e --- /dev/null +++ b/src/nos/lib/messages_lib/0255_7088_ENODEV.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0255_7088_ENODEV Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 4e 4f 44 45 56 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0256_edee_ENOENT.rel b/src/nos/lib/messages_lib/0256_edee_ENOENT.rel new file mode 100644 index 00000000..4518decb --- /dev/null +++ b/src/nos/lib/messages_lib/0256_edee_ENOENT.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0256_edee_ENOENT Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 4e 4f 45 4e 54 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0257_a107_ENOEXEC.rel b/src/nos/lib/messages_lib/0257_a107_ENOEXEC.rel new file mode 100644 index 00000000..03baef08 --- /dev/null +++ b/src/nos/lib/messages_lib/0257_a107_ENOEXEC.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0257_a107_ENOEXEC Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 45 4e 4f 45 58 45 43 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0258_29fe_ENOLCK.rel b/src/nos/lib/messages_lib/0258_29fe_ENOLCK.rel new file mode 100644 index 00000000..e3cdf8ba --- /dev/null +++ b/src/nos/lib/messages_lib/0258_29fe_ENOLCK.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0258_29fe_ENOLCK Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 4e 4f 4c 43 4b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0259_42c4_ENOMEM.rel b/src/nos/lib/messages_lib/0259_42c4_ENOMEM.rel new file mode 100644 index 00000000..71f840f9 --- /dev/null +++ b/src/nos/lib/messages_lib/0259_42c4_ENOMEM.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0259_42c4_ENOMEM Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 4e 4f 4d 45 4d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/025a_d51d_ENOSPC.rel b/src/nos/lib/messages_lib/025a_d51d_ENOSPC.rel new file mode 100644 index 00000000..470510f6 --- /dev/null +++ b/src/nos/lib/messages_lib/025a_d51d_ENOSPC.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___025a_d51d_ENOSPC Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 4e 4f 53 50 43 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/025b_d3a2_ENOTBLK.rel b/src/nos/lib/messages_lib/025b_d3a2_ENOTBLK.rel new file mode 100644 index 00000000..61e22dd7 --- /dev/null +++ b/src/nos/lib/messages_lib/025b_d3a2_ENOTBLK.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___025b_d3a2_ENOTBLK Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 45 4e 4f 54 42 4c 4b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/025c_f683_ENOTDIR.rel b/src/nos/lib/messages_lib/025c_f683_ENOTDIR.rel new file mode 100644 index 00000000..870391c5 --- /dev/null +++ b/src/nos/lib/messages_lib/025c_f683_ENOTDIR.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___025c_f683_ENOTDIR Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 45 4e 4f 54 44 49 52 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/025d_83de_ENOTEMPTY.rel b/src/nos/lib/messages_lib/025d_83de_ENOTEMPTY.rel new file mode 100644 index 00000000..1d6fa0a7 --- /dev/null +++ b/src/nos/lib/messages_lib/025d_83de_ENOTEMPTY.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___025d_83de_ENOTEMPTY Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 45 4e 4f 54 45 4d 50 54 59 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/025e_81a3_ENOTTY.rel b/src/nos/lib/messages_lib/025e_81a3_ENOTTY.rel new file mode 100644 index 00000000..105e3b96 --- /dev/null +++ b/src/nos/lib/messages_lib/025e_81a3_ENOTTY.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___025e_81a3_ENOTTY Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 4e 4f 54 54 59 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/025f_01a7_ENXIO.rel b/src/nos/lib/messages_lib/025f_01a7_ENXIO.rel new file mode 100644 index 00000000..91d8c34e --- /dev/null +++ b/src/nos/lib/messages_lib/025f_01a7_ENXIO.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___025f_01a7_ENXIO Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 4e 58 49 4f 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0260_4485_EPERM.rel b/src/nos/lib/messages_lib/0260_4485_EPERM.rel new file mode 100644 index 00000000..b600f948 --- /dev/null +++ b/src/nos/lib/messages_lib/0260_4485_EPERM.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0260_4485_EPERM Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 50 45 52 4d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0261_5ede_EPIPE.rel b/src/nos/lib/messages_lib/0261_5ede_EPIPE.rel new file mode 100644 index 00000000..e9ffe8fd --- /dev/null +++ b/src/nos/lib/messages_lib/0261_5ede_EPIPE.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0261_5ede_EPIPE Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 50 49 50 45 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0262_7f6a_ERANGE.rel b/src/nos/lib/messages_lib/0262_7f6a_ERANGE.rel new file mode 100644 index 00000000..1618ef80 --- /dev/null +++ b/src/nos/lib/messages_lib/0262_7f6a_ERANGE.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0262_7f6a_ERANGE Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 52 41 4e 47 45 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0263_0587_EROFS.rel b/src/nos/lib/messages_lib/0263_0587_EROFS.rel new file mode 100644 index 00000000..8151f2ab --- /dev/null +++ b/src/nos/lib/messages_lib/0263_0587_EROFS.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0263_0587_EROFS Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 52 4f 46 53 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0264_6b3a_ESCC_20channel_20_2.rel b/src/nos/lib/messages_lib/0264_6b3a_ESCC_20channel_20_2.rel new file mode 100644 index 00000000..20cf673d --- /dev/null +++ b/src/nos/lib/messages_lib/0264_6b3a_ESCC_20channel_20_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___0264_6b3a_ESCC_20channel_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 45 53 43 43 20 63 68 61 6e +R 00 00 01 00 +T 0b 00 00 00 6e 65 6c 20 25 64 20 61 6c 72 65 +R 00 00 01 00 +T 16 00 00 00 61 64 79 20 61 74 74 61 63 68 65 +R 00 00 01 00 +T 21 00 00 00 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0265_6d38_ESCC_20channel_20_2.rel b/src/nos/lib/messages_lib/0265_6d38_ESCC_20channel_20_2.rel new file mode 100644 index 00000000..7207e736 --- /dev/null +++ b/src/nos/lib/messages_lib/0265_6d38_ESCC_20channel_20_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___0265_6d38_ESCC_20channel_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 45 53 43 43 20 63 68 61 6e +R 00 00 01 00 +T 0b 00 00 00 6e 65 6c 20 25 64 20 6f 75 74 20 +R 00 00 01 00 +T 16 00 00 00 6f 66 20 72 61 6e 67 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0266_0a8a_ESCC_20driver_20alr.rel b/src/nos/lib/messages_lib/0266_0a8a_ESCC_20driver_20alr.rel new file mode 100644 index 00000000..71de664c --- /dev/null +++ b/src/nos/lib/messages_lib/0266_0a8a_ESCC_20driver_20alr.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___0266_0a8a_ESCC_20driver_20alr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 00 45 53 43 43 20 64 72 69 76 +R 00 00 01 00 +T 0b 00 00 00 65 72 20 61 6c 72 65 61 64 79 20 +R 00 00 01 00 +T 16 00 00 00 69 6e 69 74 69 61 6c 69 7a 65 64 +R 00 00 01 00 +T 21 00 00 00 20 2d 20 6e 6f 74 68 69 6e 67 20 +R 00 00 01 00 +T 2c 00 00 00 64 6f 6e 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0267_d89e_ESCC_20driver_20not.rel b/src/nos/lib/messages_lib/0267_d89e_ESCC_20driver_20not.rel new file mode 100644 index 00000000..00187e5a --- /dev/null +++ b/src/nos/lib/messages_lib/0267_d89e_ESCC_20driver_20not.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0267_d89e_ESCC_20driver_20not Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 45 53 43 43 20 64 72 69 76 +R 00 00 01 00 +T 0b 00 00 00 65 72 20 6e 6f 74 20 69 6e 69 74 +R 00 00 01 00 +T 16 00 00 00 69 61 6c 69 7a 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0268_dd82_ESHELL.rel b/src/nos/lib/messages_lib/0268_dd82_ESHELL.rel new file mode 100644 index 00000000..597ce1b2 --- /dev/null +++ b/src/nos/lib/messages_lib/0268_dd82_ESHELL.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0268_dd82_ESHELL Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 53 48 45 4c 4c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0269_ffa8_ESPIPE.rel b/src/nos/lib/messages_lib/0269_ffa8_ESPIPE.rel new file mode 100644 index 00000000..0cca0054 --- /dev/null +++ b/src/nos/lib/messages_lib/0269_ffa8_ESPIPE.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0269_ffa8_ESPIPE Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 45 53 50 49 50 45 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/026a_b33c_ESRCH.rel b/src/nos/lib/messages_lib/026a_b33c_ESRCH.rel new file mode 100644 index 00000000..42ba764f --- /dev/null +++ b/src/nos/lib/messages_lib/026a_b33c_ESRCH.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___026a_b33c_ESRCH Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 53 52 43 48 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/026b_194a_ETXTBSY.rel b/src/nos/lib/messages_lib/026b_194a_ETXTBSY.rel new file mode 100644 index 00000000..dc55fcb7 --- /dev/null +++ b/src/nos/lib/messages_lib/026b_194a_ETXTBSY.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___026b_194a_ETXTBSY Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 45 54 58 54 42 53 59 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/026c_8d4a_EXDEV.rel b/src/nos/lib/messages_lib/026c_8d4a_EXDEV.rel new file mode 100644 index 00000000..02dc3074 --- /dev/null +++ b/src/nos/lib/messages_lib/026c_8d4a_EXDEV.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___026c_8d4a_EXDEV Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 45 58 44 45 56 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/026d_4f54_Encapsulation_20mod.rel b/src/nos/lib/messages_lib/026d_4f54_Encapsulation_20mod.rel new file mode 100644 index 00000000..159ec2c0 --- /dev/null +++ b/src/nos/lib/messages_lib/026d_4f54_Encapsulation_20mod.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___026d_4f54_Encapsulation_20mod Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 45 6e 63 61 70 73 75 6c 61 +R 00 00 01 00 +T 0b 00 00 00 74 69 6f 6e 20 6d 6f 64 65 20 27 +R 00 00 01 00 +T 16 00 00 00 25 73 27 20 75 6e 6b 6e 6f 77 6e +R 00 00 01 00 +T 21 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/026e_0f4a_Enqued_20_20_2d_20_.rel b/src/nos/lib/messages_lib/026e_0f4a_Enqued_20_20_2d_20_.rel new file mode 100644 index 00000000..24bd7a2d --- /dev/null +++ b/src/nos/lib/messages_lib/026e_0f4a_Enqued_20_20_2d_20_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___026e_0f4a_Enqued_20_20_2d_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 00 45 6e 71 75 65 64 20 20 2d +R 00 00 01 00 +T 0b 00 00 00 20 25 38 6c 64 20 20 43 72 63 65 +R 00 00 01 00 +T 16 00 00 00 72 72 20 20 2d 20 25 38 6c 64 20 +R 00 00 01 00 +T 21 00 00 00 20 41 62 6f 72 74 73 20 20 2d 20 +R 00 00 01 00 +T 2c 00 00 00 25 38 6c 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/026f_de30_Enter_20message_2e_.rel b/src/nos/lib/messages_lib/026f_de30_Enter_20message_2e_.rel new file mode 100644 index 00000000..74b467e4 --- /dev/null +++ b/src/nos/lib/messages_lib/026f_de30_Enter_20message_2e_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___026f_de30_Enter_20message_2e_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 45 6e 74 65 72 20 6d 65 73 +R 00 00 01 00 +T 0b 00 00 00 73 61 67 65 2e 20 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0270_3a50_Error_20in_20respon.rel b/src/nos/lib/messages_lib/0270_3a50_Error_20in_20respon.rel new file mode 100644 index 00000000..c4623fe1 --- /dev/null +++ b/src/nos/lib/messages_lib/0270_3a50_Error_20in_20respon.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0270_3a50_Error_20in_20respon Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 45 72 72 6f 72 20 69 6e 20 +R 00 00 01 00 +T 0b 00 00 00 72 65 73 70 6f 6e 73 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0271_d568_Error_20updating_20.rel b/src/nos/lib/messages_lib/0271_d568_Error_20updating_20.rel new file mode 100644 index 00000000..e42b505f --- /dev/null +++ b/src/nos/lib/messages_lib/0271_d568_Error_20updating_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0271_d568_Error_20updating_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 45 72 72 6f 72 20 75 70 64 +R 00 00 01 00 +T 0b 00 00 00 61 74 69 6e 67 20 6d 61 69 6c 20 +R 00 00 01 00 +T 16 00 00 00 66 69 6c 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0272_69fc_Error_20writing_20m.rel b/src/nos/lib/messages_lib/0272_69fc_Error_20writing_20m.rel new file mode 100644 index 00000000..af87fdac --- /dev/null +++ b/src/nos/lib/messages_lib/0272_69fc_Error_20writing_20m.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0272_69fc_Error_20writing_20m Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 45 72 72 6f 72 20 77 72 69 +R 00 00 01 00 +T 0b 00 00 00 74 69 6e 67 20 6d 61 69 6c 20 66 +R 00 00 01 00 +T 16 00 00 00 69 6c 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0273_9664_Escape_20character_.rel b/src/nos/lib/messages_lib/0273_9664_Escape_20character_.rel new file mode 100644 index 00000000..fbbee7e6 --- /dev/null +++ b/src/nos/lib/messages_lib/0273_9664_Escape_20character_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0273_9664_Escape_20character_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 45 73 63 61 70 65 20 63 68 +R 00 00 01 00 +T 0b 00 00 00 61 72 61 63 74 65 72 20 73 65 6e +R 00 00 01 00 +T 16 00 00 00 74 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0274_8c2d_Ether_3a_20len_20_2.rel b/src/nos/lib/messages_lib/0274_8c2d_Ether_3a_20len_20_2.rel new file mode 100644 index 00000000..a6b436e6 --- /dev/null +++ b/src/nos/lib/messages_lib/0274_8c2d_Ether_3a_20len_20_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0274_8c2d_Ether_3a_20len_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 45 74 68 65 72 3a 20 6c 65 +R 00 00 01 00 +T 0b 00 00 00 6e 20 25 75 20 25 73 2d 3e 25 73 +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0275_3af3_F_3e.rel b/src/nos/lib/messages_lib/0275_3af3_F_3e.rel new file mode 100644 index 00000000..73fbc8c3 --- /dev/null +++ b/src/nos/lib/messages_lib/0275_3af3_F_3e.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___0275_3af3_F_3e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 46 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0276_0046_Failed_0a.rel b/src/nos/lib/messages_lib/0276_0046_Failed_0a.rel new file mode 100644 index 00000000..d060edfd --- /dev/null +++ b/src/nos/lib/messages_lib/0276_0046_Failed_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0276_0046_Failed_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 46 61 69 6c 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0277_4a7b_First_20init_20ESCC.rel b/src/nos/lib/messages_lib/0277_4a7b_First_20init_20ESCC.rel new file mode 100644 index 00000000..104c2237 --- /dev/null +++ b/src/nos/lib/messages_lib/0277_4a7b_First_20init_20ESCC.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0277_4a7b_First_20init_20ESCC Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 46 69 72 73 74 20 69 6e 69 +R 00 00 01 00 +T 0b 00 00 00 74 20 45 53 43 43 20 64 72 69 76 +R 00 00 01 00 +T 16 00 00 00 65 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0278_0954_Forwarding_20timer_.rel b/src/nos/lib/messages_lib/0278_0954_Forwarding_20timer_.rel new file mode 100644 index 00000000..e05e7321 --- /dev/null +++ b/src/nos/lib/messages_lib/0278_0954_Forwarding_20timer_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___0278_0954_Forwarding_20timer_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 46 6f 72 77 61 72 64 69 6e +R 00 00 01 00 +T 0b 00 00 00 67 20 74 69 6d 65 72 3a 20 25 6c +R 00 00 01 00 +T 16 00 00 00 75 2f 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0279_95bb_Free_20address_20qu.rel b/src/nos/lib/messages_lib/0279_95bb_Free_20address_20qu.rel new file mode 100644 index 00000000..b4a3bbf7 --- /dev/null +++ b/src/nos/lib/messages_lib/0279_95bb_Free_20address_20qu.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___0279_95bb_Free_20address_20qu Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 46 72 65 65 20 61 64 64 72 +R 00 00 01 00 +T 0b 00 00 00 65 73 73 20 71 75 65 75 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/027a_fee7_Free_20cache_3a_20s.rel b/src/nos/lib/messages_lib/027a_fee7_Free_20cache_3a_20s.rel new file mode 100644 index 00000000..407caf72 --- /dev/null +++ b/src/nos/lib/messages_lib/027a_fee7_Free_20cache_3a_20s.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2b flags 0 +S ___027a_fee7_Free_20cache_3a_20s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 29 00 46 72 65 65 20 63 61 63 68 +R 00 00 01 00 +T 0b 00 00 00 65 3a 20 73 6d 61 6c 6c 20 25 75 +R 00 00 01 00 +T 16 00 00 00 20 6d 65 64 69 75 6d 20 25 75 20 +R 00 00 01 00 +T 21 00 00 00 6c 61 72 67 65 20 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/027b_8dc1_Free_20memory_20thr.rel b/src/nos/lib/messages_lib/027b_8dc1_Free_20memory_20thr.rel new file mode 100644 index 00000000..d4df8725 --- /dev/null +++ b/src/nos/lib/messages_lib/027b_8dc1_Free_20memory_20thr.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___027b_8dc1_Free_20memory_20thr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 46 72 65 65 20 6d 65 6d 6f +R 00 00 01 00 +T 0b 00 00 00 72 79 20 74 68 72 65 73 68 6f 6c +R 00 00 01 00 +T 16 00 00 00 64 20 28 62 79 74 65 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/027c_1be2_From_20_25s_20_25s.rel b/src/nos/lib/messages_lib/027c_1be2_From_20_25s_20_25s.rel new file mode 100644 index 00000000..cdbcecb8 --- /dev/null +++ b/src/nos/lib/messages_lib/027c_1be2_From_20_25s_20_25s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___027c_1be2_From_20_25s_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 46 72 6f 6d 20 25 73 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/027d_d837_From_3a_20_25s_0a.rel b/src/nos/lib/messages_lib/027d_d837_From_3a_20_25s_0a.rel new file mode 100644 index 00000000..a0fe9089 --- /dev/null +++ b/src/nos/lib/messages_lib/027d_d837_From_3a_20_25s_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___027d_d837_From_3a_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 46 72 6f 6d 3a 20 25 73 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/027e_b9a0_Garbage_20bp_20_25l.rel b/src/nos/lib/messages_lib/027e_b9a0_Garbage_20bp_20_25l.rel new file mode 100644 index 00000000..1587a6ad --- /dev/null +++ b/src/nos/lib/messages_lib/027e_b9a0_Garbage_20bp_20_25l.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___027e_b9a0_Garbage_20bp_20_25l Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 47 61 72 62 61 67 65 20 62 +R 00 00 01 00 +T 0b 00 00 00 70 20 25 6c 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/027f_7731_Group_20list_20too_.rel b/src/nos/lib/messages_lib/027f_7731_Group_20list_20too_.rel new file mode 100644 index 00000000..4fec0dc8 --- /dev/null +++ b/src/nos/lib/messages_lib/027f_7731_Group_20list_20too_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2d flags 0 +S ___027f_7731_Group_20list_20too_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2b 00 47 72 6f 75 70 20 6c 69 73 +R 00 00 01 00 +T 0b 00 00 00 74 20 74 6f 6f 20 6c 6f 6e 67 21 +R 00 00 01 00 +T 16 00 00 00 20 20 47 72 6f 75 70 20 27 25 73 +R 00 00 01 00 +T 21 00 00 00 27 20 69 67 6e 6f 72 65 64 21 0a +R 00 00 01 00 +T 2c 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0280_ccdf_HAPN_20_25d_3a_20_2.rel b/src/nos/lib/messages_lib/0280_ccdf_HAPN_20_25d_3a_20_2.rel new file mode 100644 index 00000000..6a889d8e --- /dev/null +++ b/src/nos/lib/messages_lib/0280_ccdf_HAPN_20_25d_3a_20_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S ___0280_ccdf_HAPN_20_25d_3a_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 35 00 48 41 50 4e 20 25 64 3a 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 72 78 69 6e 74 73 3a 20 25 +R 00 00 01 00 +T 16 00 00 00 6c 64 20 20 20 74 78 69 6e 74 73 +R 00 00 01 00 +T 21 00 00 00 3a 20 25 6c 64 20 20 20 62 61 64 +R 00 00 01 00 +T 2c 00 00 00 69 6e 74 3a 20 25 2d 35 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0281_9570_HOPCHECK_20start_20.rel b/src/nos/lib/messages_lib/0281_9570_HOPCHECK_20start_20.rel new file mode 100644 index 00000000..6ecc9ccb --- /dev/null +++ b/src/nos/lib/messages_lib/0281_9570_HOPCHECK_20start_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___0281_9570_HOPCHECK_20start_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 48 4f 50 43 48 45 43 4b 20 +R 00 00 01 00 +T 0b 00 00 00 73 74 61 72 74 20 74 72 61 63 65 +R 00 00 01 00 +T 16 00 00 00 20 74 6f 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0282_8ef4_HOPCHECK_20to_20_25.rel b/src/nos/lib/messages_lib/0282_8ef4_HOPCHECK_20to_20_25.rel new file mode 100644 index 00000000..643d0ec2 --- /dev/null +++ b/src/nos/lib/messages_lib/0282_8ef4_HOPCHECK_20to_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___0282_8ef4_HOPCHECK_20to_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 48 4f 50 43 48 45 43 4b 20 +R 00 00 01 00 +T 0b 00 00 00 74 6f 20 25 73 20 64 6f 6e 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0283_c794_HOPCHECK_20tracing.rel b/src/nos/lib/messages_lib/0283_c794_HOPCHECK_20tracing.rel new file mode 100644 index 00000000..bee2661e --- /dev/null +++ b/src/nos/lib/messages_lib/0283_c794_HOPCHECK_20tracing.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0283_c794_HOPCHECK_20tracing Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 48 4f 50 43 48 45 43 4b 20 +R 00 00 01 00 +T 0b 00 00 00 74 72 61 63 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0284_4952_HS_3a_20Warning_3a_.rel b/src/nos/lib/messages_lib/0284_4952_HS_3a_20Warning_3a_.rel new file mode 100644 index 00000000..b8c10967 --- /dev/null +++ b/src/nos/lib/messages_lib/0284_4952_HS_3a_20Warning_3a_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S ___0284_4952_HS_3a_20Warning_3a_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 24 00 48 53 3a 20 57 61 72 6e 69 +R 00 00 01 00 +T 0b 00 00 00 6e 67 3a 20 61 75 74 6f 20 64 65 +R 00 00 01 00 +T 16 00 00 00 6c 61 79 20 73 65 74 20 66 61 69 +R 00 00 01 00 +T 21 00 00 00 6c 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0285_10ba_Hardware_20_25u_0a.rel b/src/nos/lib/messages_lib/0285_10ba_Hardware_20_25u_0a.rel new file mode 100644 index 00000000..50dc1280 --- /dev/null +++ b/src/nos/lib/messages_lib/0285_10ba_Hardware_20_25u_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0285_10ba_Hardware_20_25u_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 48 61 72 64 77 61 72 65 20 +R 00 00 01 00 +T 0b 00 00 00 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0286_32e9_Heap_20debugging.rel b/src/nos/lib/messages_lib/0286_32e9_Heap_20debugging.rel new file mode 100644 index 00000000..8efe3375 --- /dev/null +++ b/src/nos/lib/messages_lib/0286_32e9_Heap_20debugging.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0286_32e9_Heap_20debugging Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 48 65 61 70 20 64 65 62 75 +R 00 00 01 00 +T 0b 00 00 00 67 67 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0287_9144_Host_20_25s_20_28_2.rel b/src/nos/lib/messages_lib/0287_9144_Host_20_25s_20_28_2.rel new file mode 100644 index 00000000..785ee07b --- /dev/null +++ b/src/nos/lib/messages_lib/0287_9144_Host_20_25s_20_28_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0287_9144_Host_20_25s_20_28_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 48 6f 73 74 20 25 73 20 28 +R 00 00 01 00 +T 0b 00 00 00 25 73 29 20 75 6e 72 65 61 63 68 +R 00 00 01 00 +T 16 00 00 00 61 62 6c 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0288_862c_Host_20_25s_20unkno.rel b/src/nos/lib/messages_lib/0288_862c_Host_20_25s_20unkno.rel new file mode 100644 index 00000000..3f229ba8 --- /dev/null +++ b/src/nos/lib/messages_lib/0288_862c_Host_20_25s_20unkno.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0288_862c_Host_20_25s_20unkno Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 48 6f 73 74 20 25 73 20 75 +R 00 00 01 00 +T 0b 00 00 00 6e 6b 6e 6f 77 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0289_f216_Hostname_20set_20to.rel b/src/nos/lib/messages_lib/0289_f216_Hostname_20set_20to.rel new file mode 100644 index 00000000..3642d93c --- /dev/null +++ b/src/nos/lib/messages_lib/0289_f216_Hostname_20set_20to.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___0289_f216_Hostname_20set_20to Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 48 6f 73 74 6e 61 6d 65 20 +R 00 00 01 00 +T 0b 00 00 00 73 65 74 20 74 6f 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/028a_28fb_Hytech_20KA9Q_20NOS.rel b/src/nos/lib/messages_lib/028a_28fb_Hytech_20KA9Q_20NOS.rel new file mode 100644 index 00000000..644eb306 --- /dev/null +++ b/src/nos/lib/messages_lib/028a_28fb_Hytech_20KA9Q_20NOS.rel @@ -0,0 +1,36 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 93 flags 0 +S ___028a_28fb_Hytech_20KA9Q_20NOS Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 91 00 48 79 74 65 63 68 20 4b 41 +R 00 00 01 00 +T 0b 00 00 00 39 51 20 4e 4f 53 20 6b 65 72 6e +R 00 00 01 00 +T 16 00 00 00 65 6c 0a 56 65 72 73 69 6f 6e 20 +R 00 00 01 00 +T 21 00 00 00 25 73 0a 43 6f 6d 70 69 6c 65 64 +R 00 00 01 00 +T 2c 00 00 00 20 66 6f 72 20 5a 69 6c 6f 67 20 +R 00 00 01 00 +T 37 00 00 00 5a 38 53 31 38 30 20 43 50 55 0a +R 00 00 01 00 +T 42 00 00 00 0a 43 6f 70 79 72 69 67 68 74 20 +R 00 00 01 00 +T 4d 00 00 00 31 39 38 36 2d 31 39 39 35 20 62 +R 00 00 01 00 +T 58 00 00 00 79 20 50 68 69 6c 20 4b 61 72 6e +R 00 00 01 00 +T 63 00 00 00 2c 20 4b 41 39 51 0a 43 6f 70 79 +R 00 00 01 00 +T 6e 00 00 00 72 69 67 68 74 20 32 30 30 33 20 +R 00 00 01 00 +T 79 00 00 00 62 79 20 4e 69 63 6b 20 44 6f 77 +R 00 00 01 00 +T 84 00 00 00 6e 69 6e 67 2c 20 48 79 74 65 63 +R 00 00 01 00 +T 8f 00 00 00 68 0a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/028b_df4f_ICMP_20echo_20respo.rel b/src/nos/lib/messages_lib/028b_df4f_ICMP_20echo_20respo.rel new file mode 100644 index 00000000..2752a79f --- /dev/null +++ b/src/nos/lib/messages_lib/028b_df4f_ICMP_20echo_20respo.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___028b_df4f_ICMP_20echo_20respo Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 49 43 4d 50 20 65 63 68 6f +R 00 00 01 00 +T 0b 00 00 00 20 72 65 73 70 6f 6e 73 65 20 61 +R 00 00 01 00 +T 16 00 00 00 63 63 65 70 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/028c_db6d_ICMP_20from_20_25s_.rel b/src/nos/lib/messages_lib/028c_db6d_ICMP_20from_20_25s_.rel new file mode 100644 index 00000000..33a1ff43 --- /dev/null +++ b/src/nos/lib/messages_lib/028c_db6d_ICMP_20from_20_25s_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___028c_db6d_ICMP_20from_20_25s_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 49 43 4d 50 20 66 72 6f 6d +R 00 00 01 00 +T 0b 00 00 00 20 25 73 3a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/028d_abbc_ICMP_20tracing.rel b/src/nos/lib/messages_lib/028d_abbc_ICMP_20tracing.rel new file mode 100644 index 00000000..f6bc30d6 --- /dev/null +++ b/src/nos/lib/messages_lib/028d_abbc_ICMP_20tracing.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___028d_abbc_ICMP_20tracing Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 49 43 4d 50 20 74 72 61 63 +R 00 00 01 00 +T 0b 00 00 00 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/028e_6b85_ICMP_3a_20type_20_2.rel b/src/nos/lib/messages_lib/028e_6b85_ICMP_3a_20type_20_2.rel new file mode 100644 index 00000000..3068e3e6 --- /dev/null +++ b/src/nos/lib/messages_lib/028e_6b85_ICMP_3a_20type_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___028e_6b85_ICMP_3a_20type_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 49 43 4d 50 3a 20 74 79 70 +R 00 00 01 00 +T 0b 00 00 00 65 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/028f_dff6_IP_0a.rel b/src/nos/lib/messages_lib/028f_dff6_IP_0a.rel new file mode 100644 index 00000000..c788430d --- /dev/null +++ b/src/nos/lib/messages_lib/028f_dff6_IP_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___028f_dff6_IP_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 49 50 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0290_5812_IP_20Time_2dto_2dli.rel b/src/nos/lib/messages_lib/0290_5812_IP_20Time_2dto_2dli.rel new file mode 100644 index 00000000..115bb849 --- /dev/null +++ b/src/nos/lib/messages_lib/0290_5812_IP_20Time_2dto_2dli.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0290_5812_IP_20Time_2dto_2dli Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 49 50 20 54 69 6d 65 2d 74 +R 00 00 01 00 +T 0b 00 00 00 6f 2d 6c 69 76 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0291_0e41_IP_20addr_20_20_20_.rel b/src/nos/lib/messages_lib/0291_0e41_IP_20addr_20_20_20_.rel new file mode 100644 index 00000000..046ffc58 --- /dev/null +++ b/src/nos/lib/messages_lib/0291_0e41_IP_20addr_20_20_20_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2e flags 0 +S ___0291_0e41_IP_20addr_20_20_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2c 00 49 50 20 61 64 64 72 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 20 20 20 20 20 54 79 70 65 +R 00 00 01 00 +T 16 00 00 00 20 20 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 21 00 00 00 54 69 6d 65 20 51 20 41 64 64 72 +R 00 00 01 00 +T 2c 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0292_8cdb_IP_20reasm_20timeou.rel b/src/nos/lib/messages_lib/0292_8cdb_IP_20reasm_20timeou.rel new file mode 100644 index 00000000..b7ec98c6 --- /dev/null +++ b/src/nos/lib/messages_lib/0292_8cdb_IP_20reasm_20timeou.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0292_8cdb_IP_20reasm_20timeou Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 49 50 20 72 65 61 73 6d 20 +R 00 00 01 00 +T 0b 00 00 00 74 69 6d 65 6f 75 74 20 28 73 65 +R 00 00 01 00 +T 16 00 00 00 63 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0293_5f88_IP_20rx_20tracing.rel b/src/nos/lib/messages_lib/0293_5f88_IP_20rx_20tracing.rel new file mode 100644 index 00000000..d6a7e238 --- /dev/null +++ b/src/nos/lib/messages_lib/0293_5f88_IP_20rx_20tracing.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0293_5f88_IP_20rx_20tracing Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 49 50 20 72 78 20 74 72 61 +R 00 00 01 00 +T 0b 00 00 00 63 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0294_88e0_IP_3a_20CHECKSUM_20.rel b/src/nos/lib/messages_lib/0294_88e0_IP_3a_20CHECKSUM_20.rel new file mode 100644 index 00000000..8d63ff11 --- /dev/null +++ b/src/nos/lib/messages_lib/0294_88e0_IP_3a_20CHECKSUM_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0294_88e0_IP_3a_20CHECKSUM_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 49 50 3a 20 43 48 45 43 4b +R 00 00 01 00 +T 0b 00 00 00 53 55 4d 20 45 52 52 4f 52 20 28 +R 00 00 01 00 +T 16 00 00 00 25 75 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0295_03a7_IP_3a_20bad_20heade.rel b/src/nos/lib/messages_lib/0295_03a7_IP_3a_20bad_20heade.rel new file mode 100644 index 00000000..61486d6e --- /dev/null +++ b/src/nos/lib/messages_lib/0295_03a7_IP_3a_20bad_20heade.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0295_03a7_IP_3a_20bad_20heade Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 49 50 3a 20 62 61 64 20 68 +R 00 00 01 00 +T 0b 00 00 00 65 61 64 65 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0296_4543_IP_3a_20len_20_25u.rel b/src/nos/lib/messages_lib/0296_4543_IP_3a_20len_20_25u.rel new file mode 100644 index 00000000..e07471eb --- /dev/null +++ b/src/nos/lib/messages_lib/0296_4543_IP_3a_20len_20_25u.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0296_4543_IP_3a_20len_20_25u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 49 50 3a 20 6c 65 6e 20 25 +R 00 00 01 00 +T 0b 00 00 00 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0297_e067_IPCP_0a.rel b/src/nos/lib/messages_lib/0297_e067_IPCP_0a.rel new file mode 100644 index 00000000..ac57eb6d --- /dev/null +++ b/src/nos/lib/messages_lib/0297_e067_IPCP_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0297_e067_IPCP_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 49 50 43 50 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0298_7c5c_IPCP_20_25s_0a.rel b/src/nos/lib/messages_lib/0298_7c5c_IPCP_20_25s_0a.rel new file mode 100644 index 00000000..f7d1fc7c --- /dev/null +++ b/src/nos/lib/messages_lib/0298_7c5c_IPCP_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0298_7c5c_IPCP_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 49 50 43 50 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0299_a490_IRQ_20_25u_20out_20.rel b/src/nos/lib/messages_lib/0299_a490_IRQ_20_25u_20out_20.rel new file mode 100644 index 00000000..9b920f0a --- /dev/null +++ b/src/nos/lib/messages_lib/0299_a490_IRQ_20_25u_20out_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0299_a490_IRQ_20_25u_20out_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 49 52 51 20 25 75 20 6f 75 +R 00 00 01 00 +T 0b 00 00 00 74 20 6f 66 20 72 61 6e 67 65 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/029a_925d_Idle_20poll_20timer.rel b/src/nos/lib/messages_lib/029a_925d_Idle_20poll_20timer.rel new file mode 100644 index 00000000..9325dc24 --- /dev/null +++ b/src/nos/lib/messages_lib/029a_925d_Idle_20poll_20timer.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___029a_925d_Idle_20poll_20timer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 49 64 6c 65 20 70 6f 6c 6c +R 00 00 01 00 +T 0b 00 00 00 20 74 69 6d 65 72 20 28 6d 73 29 +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/029b_4ab5_Image_0a.rel b/src/nos/lib/messages_lib/029b_4ab5_Image_0a.rel new file mode 100644 index 00000000..625d576c --- /dev/null +++ b/src/nos/lib/messages_lib/029b_4ab5_Image_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___029b_4ab5_Image_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 49 6d 61 67 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/029c_7e58_Initial_20RTT_20_28.rel b/src/nos/lib/messages_lib/029c_7e58_Initial_20RTT_20_28.rel new file mode 100644 index 00000000..17374bd6 --- /dev/null +++ b/src/nos/lib/messages_lib/029c_7e58_Initial_20RTT_20_28.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___029c_7e58_Initial_20RTT_20_28 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 49 6e 69 74 69 61 6c 20 52 +R 00 00 01 00 +T 0b 00 00 00 54 54 20 28 6d 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/029d_bd38_Inqlen_3a_20_25d_20.rel b/src/nos/lib/messages_lib/029d_bd38_Inqlen_3a_20_25d_20.rel new file mode 100644 index 00000000..88e3943e --- /dev/null +++ b/src/nos/lib/messages_lib/029d_bd38_Inqlen_3a_20_25d_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___029d_bd38_Inqlen_3a_20_25d_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 49 6e 71 6c 65 6e 3a 20 25 +R 00 00 01 00 +T 0b 00 00 00 64 20 70 61 63 6b 65 74 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/029e_c7f6_Insufficient_20args.rel b/src/nos/lib/messages_lib/029e_c7f6_Insufficient_20args.rel new file mode 100644 index 00000000..50d869a3 --- /dev/null +++ b/src/nos/lib/messages_lib/029e_c7f6_Insufficient_20args.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___029e_c7f6_Insufficient_20args Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 49 6e 73 75 66 66 69 63 69 +R 00 00 01 00 +T 0b 00 00 00 65 6e 74 20 61 72 67 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/029f_fcf9_Interface_20_20_20R.rel b/src/nos/lib/messages_lib/029f_fcf9_Interface_20_20_20R.rel new file mode 100644 index 00000000..3876a2c6 --- /dev/null +++ b/src/nos/lib/messages_lib/029f_fcf9_Interface_20_20_20R.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2d flags 0 +S ___029f_fcf9_Interface_20_20_20R Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2b 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 20 20 52 63 76 42 20 20 4e 75 +R 00 00 01 00 +T 16 00 00 00 6d 52 65 63 65 69 76 65 64 20 20 +R 00 00 01 00 +T 21 00 00 00 43 53 75 6d 45 72 72 6f 72 73 0a +R 00 00 01 00 +T 2c 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02a0_b903_Interface_20_22_25s.rel b/src/nos/lib/messages_lib/02a0_b903_Interface_20_22_25s.rel new file mode 100644 index 00000000..e69b0bd3 --- /dev/null +++ b/src/nos/lib/messages_lib/02a0_b903_Interface_20_22_25s.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___02a0_b903_Interface_20_22_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 22 25 73 22 20 69 73 20 61 6c +R 00 00 01 00 +T 16 00 00 00 72 65 61 64 79 20 72 65 67 69 73 +R 00 00 01 00 +T 21 00 00 00 74 65 72 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02a1_4daf_Interface_20_22_25s.rel b/src/nos/lib/messages_lib/02a1_4daf_Interface_20_22_25s.rel new file mode 100644 index 00000000..5bbd68b9 --- /dev/null +++ b/src/nos/lib/messages_lib/02a1_4daf_Interface_20_22_25s.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___02a1_4daf_Interface_20_22_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 22 25 73 22 20 6e 6f 74 20 66 +R 00 00 01 00 +T 16 00 00 00 6f 75 6e 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02a2_42ac_Interface_20_22_25s.rel b/src/nos/lib/messages_lib/02a2_42ac_Interface_20_22_25s.rel new file mode 100644 index 00000000..cc8f64d7 --- /dev/null +++ b/src/nos/lib/messages_lib/02a2_42ac_Interface_20_22_25s.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___02a2_42ac_Interface_20_22_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 22 25 73 22 20 75 6e 6b 6e 6f +R 00 00 01 00 +T 16 00 00 00 77 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02a3_5a50_Interface_20_25s_20.rel b/src/nos/lib/messages_lib/02a3_5a50_Interface_20_25s_20.rel new file mode 100644 index 00000000..ae6a96d9 --- /dev/null +++ b/src/nos/lib/messages_lib/02a3_5a50_Interface_20_25s_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___02a3_5a50_Interface_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 20 61 6c 72 65 61 64 79 +R 00 00 01 00 +T 16 00 00 00 20 65 78 69 73 74 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02a4_1298_Interface_20_25s_20.rel b/src/nos/lib/messages_lib/02a4_1298_Interface_20_25s_20.rel new file mode 100644 index 00000000..5d12cbef --- /dev/null +++ b/src/nos/lib/messages_lib/02a4_1298_Interface_20_25s_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___02a4_1298_Interface_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 20 64 6f 65 73 20 6e 6f +R 00 00 01 00 +T 16 00 00 00 74 20 65 78 69 73 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02a5_24cb_Interface_20_25s_20.rel b/src/nos/lib/messages_lib/02a5_24cb_Interface_20_25s_20.rel new file mode 100644 index 00000000..a4b973a0 --- /dev/null +++ b/src/nos/lib/messages_lib/02a5_24cb_Interface_20_25s_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___02a5_24cb_Interface_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 20 6e 6f 74 20 41 58 2e +R 00 00 01 00 +T 16 00 00 00 32 35 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02a6_c749_Interface_20_25s_20.rel b/src/nos/lib/messages_lib/02a6_c749_Interface_20_25s_20.rel new file mode 100644 index 00000000..f878d65b --- /dev/null +++ b/src/nos/lib/messages_lib/02a6_c749_Interface_20_25s_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___02a6_c749_Interface_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 20 6e 6f 74 20 61 73 79 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02a7_63a0_Interface_20_25s_20.rel b/src/nos/lib/messages_lib/02a7_63a0_Interface_20_25s_20.rel new file mode 100644 index 00000000..bf50f0a2 --- /dev/null +++ b/src/nos/lib/messages_lib/02a7_63a0_Interface_20_25s_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___02a7_63a0_Interface_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 20 6e 6f 74 20 61 73 79 +R 00 00 01 00 +T 16 00 00 00 20 70 6f 72 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02a8_8880_Interface_20_25s_20.rel b/src/nos/lib/messages_lib/02a8_8880_Interface_20_25s_20.rel new file mode 100644 index 00000000..07fba6f3 --- /dev/null +++ b/src/nos/lib/messages_lib/02a8_8880_Interface_20_25s_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___02a8_8880_Interface_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 20 72 61 6e 67 65 3a 20 +R 00 00 01 00 +T 16 00 00 00 25 73 20 2d 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02a9_6e91_Interface_20_25s_20.rel b/src/nos/lib/messages_lib/02a9_6e91_Interface_20_25s_20.rel new file mode 100644 index 00000000..a745cd39 --- /dev/null +++ b/src/nos/lib/messages_lib/02a9_6e91_Interface_20_25s_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___02a9_6e91_Interface_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 20 75 6e 6b 6e 6f 77 6e +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02aa_103c_Interface_20address.rel b/src/nos/lib/messages_lib/02aa_103c_Interface_20address.rel new file mode 100644 index 00000000..ae6faeab --- /dev/null +++ b/src/nos/lib/messages_lib/02aa_103c_Interface_20address.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___02aa_103c_Interface_20address Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 20 61 64 64 72 65 73 73 20 6e 6f +R 00 00 01 00 +T 16 00 00 00 74 20 72 65 73 6f 6c 76 65 64 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ab_c429_Interface_3a_20.rel b/src/nos/lib/messages_lib/02ab_c429_Interface_3a_20.rel new file mode 100644 index 00000000..b53ba90b --- /dev/null +++ b/src/nos/lib/messages_lib/02ab_c429_Interface_3a_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___02ab_c429_Interface_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 49 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ac_d726_Invalid_20magic_20c.rel b/src/nos/lib/messages_lib/02ac_d726_Invalid_20magic_20c.rel new file mode 100644 index 00000000..ff9be37a --- /dev/null +++ b/src/nos/lib/messages_lib/02ac_d726_Invalid_20magic_20c.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___02ac_d726_Invalid_20magic_20c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 49 6e 76 61 6c 69 64 20 6d +R 00 00 01 00 +T 0b 00 00 00 61 67 69 63 20 63 6f 6f 6b 69 65 +R 00 00 01 00 +T 16 00 00 00 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ad_42d9_Invalid_20range_2e_.rel b/src/nos/lib/messages_lib/02ad_42d9_Invalid_20range_2e_.rel new file mode 100644 index 00000000..0fccd747 --- /dev/null +++ b/src/nos/lib/messages_lib/02ad_42d9_Invalid_20range_2e_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___02ad_42d9_Invalid_20range_2e_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 49 6e 76 61 6c 69 64 20 72 +R 00 00 01 00 +T 0b 00 00 00 61 6e 67 65 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ae_89c0_Invalid_20type_20_2.rel b/src/nos/lib/messages_lib/02ae_89c0_Invalid_20type_20_2.rel new file mode 100644 index 00000000..7fe931ee --- /dev/null +++ b/src/nos/lib/messages_lib/02ae_89c0_Invalid_20type_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___02ae_89c0_Invalid_20type_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 49 6e 76 61 6c 69 64 20 74 +R 00 00 01 00 +T 0b 00 00 00 79 70 65 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02af_62ed_Invalid_20user_20na.rel b/src/nos/lib/messages_lib/02af_62ed_Invalid_20user_20na.rel new file mode 100644 index 00000000..b3f10d89 --- /dev/null +++ b/src/nos/lib/messages_lib/02af_62ed_Invalid_20user_20na.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___02af_62ed_Invalid_20user_20na Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 49 6e 76 61 6c 69 64 20 75 +R 00 00 01 00 +T 0b 00 00 00 73 65 72 20 6e 61 6d 65 20 25 73 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02b0_be0b_Job_20id_20_25s_20n.rel b/src/nos/lib/messages_lib/02b0_be0b_Job_20id_20_25s_20n.rel new file mode 100644 index 00000000..c66408a8 --- /dev/null +++ b/src/nos/lib/messages_lib/02b0_be0b_Job_20id_20_25s_20n.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___02b0_be0b_Job_20id_20_25s_20n Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 4a 6f 62 20 69 64 20 25 73 +R 00 00 01 00 +T 0b 00 00 00 20 6e 6f 74 20 66 6f 75 6e 64 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02b1_87a9_K_20numbers.rel b/src/nos/lib/messages_lib/02b1_87a9_K_20numbers.rel new file mode 100644 index 00000000..c53aabf8 --- /dev/null +++ b/src/nos/lib/messages_lib/02b1_87a9_K_20numbers.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___02b1_87a9_K_20numbers Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 4b 20 6e 75 6d 62 65 72 73 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02b2_414e_KISS_3a_20.rel b/src/nos/lib/messages_lib/02b2_414e_KISS_3a_20.rel new file mode 100644 index 00000000..357810f1 --- /dev/null +++ b/src/nos/lib/messages_lib/02b2_414e_KISS_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___02b2_414e_KISS_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 4b 49 53 53 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02b3_1668_Known_20users_20on_.rel b/src/nos/lib/messages_lib/02b3_1668_Known_20users_20on_.rel new file mode 100644 index 00000000..1e2d95d0 --- /dev/null +++ b/src/nos/lib/messages_lib/02b3_1668_Known_20users_20on_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___02b3_1668_Known_20users_20on_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 4b 6e 6f 77 6e 20 75 73 65 +R 00 00 01 00 +T 0b 00 00 00 72 73 20 6f 6e 20 74 68 69 73 20 +R 00 00 01 00 +T 16 00 00 00 73 79 73 74 65 6d 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02b4_171d_LCP_0a.rel b/src/nos/lib/messages_lib/02b4_171d_LCP_0a.rel new file mode 100644 index 00000000..f90bdd4f --- /dev/null +++ b/src/nos/lib/messages_lib/02b4_171d_LCP_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___02b4_171d_LCP_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 4c 43 50 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02b5_befe_LCP_20_25s_0a.rel b/src/nos/lib/messages_lib/02b5_befe_LCP_20_25s_0a.rel new file mode 100644 index 00000000..74afa51e --- /dev/null +++ b/src/nos/lib/messages_lib/02b5_befe_LCP_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___02b5_befe_LCP_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 4c 43 50 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02b6_1d45_Last_20message_0a.rel b/src/nos/lib/messages_lib/02b6_1d45_Last_20message_0a.rel new file mode 100644 index 00000000..d98e0352 --- /dev/null +++ b/src/nos/lib/messages_lib/02b6_1d45_Last_20message_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___02b6_1d45_Last_20message_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 4c 61 73 74 20 6d 65 73 73 +R 00 00 01 00 +T 0b 00 00 00 61 67 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02b7_a317_Loc_20.rel b/src/nos/lib/messages_lib/02b7_a317_Loc_20.rel new file mode 100644 index 00000000..4ce6c466 --- /dev/null +++ b/src/nos/lib/messages_lib/02b7_a317_Loc_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___02b7_a317_Loc_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 4c 6f 63 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02b8_5ce5_Local_3a_20_25s.rel b/src/nos/lib/messages_lib/02b8_5ce5_Local_3a_20_25s.rel new file mode 100644 index 00000000..d85802b2 --- /dev/null +++ b/src/nos/lib/messages_lib/02b8_5ce5_Local_3a_20_25s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___02b8_5ce5_Local_3a_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 4c 6f 63 61 6c 3a 20 25 73 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02b9_0926_Local_3a_20_25s_20_.rel b/src/nos/lib/messages_lib/02b9_0926_Local_3a_20_25s_20_.rel new file mode 100644 index 00000000..cf0b01b8 --- /dev/null +++ b/src/nos/lib/messages_lib/02b9_0926_Local_3a_20_25s_20_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 33 flags 0 +S ___02b9_0926_Local_3a_20_25s_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 31 00 4c 6f 63 61 6c 3a 20 25 73 +R 00 00 01 00 +T 0b 00 00 00 20 25 64 2f 25 64 20 52 65 6d 6f +R 00 00 01 00 +T 16 00 00 00 74 65 3a 20 25 73 20 40 20 25 73 +R 00 00 01 00 +T 21 00 00 00 20 25 64 2f 25 64 20 53 74 61 74 +R 00 00 01 00 +T 2c 00 00 00 65 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ba_6210_Lock_20directory_20.rel b/src/nos/lib/messages_lib/02ba_6210_Lock_20directory_20.rel new file mode 100644 index 00000000..a24f08ad --- /dev/null +++ b/src/nos/lib/messages_lib/02ba_6210_Lock_20directory_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___02ba_6210_Lock_20directory_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 4c 6f 63 6b 20 64 69 72 65 +R 00 00 01 00 +T 0b 00 00 00 63 74 6f 72 79 20 25 73 20 6d 69 +R 00 00 01 00 +T 16 00 00 00 73 73 69 6e 67 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02bb_f59a_Logging_20off_0a.rel b/src/nos/lib/messages_lib/02bb_f59a_Logging_20off_0a.rel new file mode 100644 index 00000000..b43be442 --- /dev/null +++ b/src/nos/lib/messages_lib/02bb_f59a_Logging_20off_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___02bb_f59a_Logging_20off_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 4c 6f 67 67 69 6e 67 20 6f +R 00 00 01 00 +T 0b 00 00 00 66 66 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02bc_1bd9_Logging_20to_20_25s.rel b/src/nos/lib/messages_lib/02bc_1bd9_Logging_20to_20_25s.rel new file mode 100644 index 00000000..92fcb22b --- /dev/null +++ b/src/nos/lib/messages_lib/02bc_1bd9_Logging_20to_20_25s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___02bc_1bd9_Logging_20to_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 4c 6f 67 67 69 6e 67 20 74 +R 00 00 01 00 +T 0b 00 00 00 6f 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02bd_4a5a_Logical_20bytesize_.rel b/src/nos/lib/messages_lib/02bd_4a5a_Logical_20bytesize_.rel new file mode 100644 index 00000000..ad4bb1e2 --- /dev/null +++ b/src/nos/lib/messages_lib/02bd_4a5a_Logical_20bytesize_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___02bd_4a5a_Logical_20bytesize_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 4c 6f 67 69 63 61 6c 20 62 +R 00 00 01 00 +T 0b 00 00 00 79 74 65 73 69 7a 65 20 25 75 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02be_4f93_Login_20incorrect_0.rel b/src/nos/lib/messages_lib/02be_4f93_Login_20incorrect_0.rel new file mode 100644 index 00000000..5f74549b --- /dev/null +++ b/src/nos/lib/messages_lib/02be_4f93_Login_20incorrect_0.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___02be_4f93_Login_20incorrect_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 4c 6f 67 69 6e 20 69 6e 63 +R 00 00 01 00 +T 0b 00 00 00 6f 72 72 65 63 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02bf_8ac2_MBOX_20Zap_3a_20_25.rel b/src/nos/lib/messages_lib/02bf_8ac2_MBOX_20Zap_3a_20_25.rel new file mode 100644 index 00000000..60fde85e --- /dev/null +++ b/src/nos/lib/messages_lib/02bf_8ac2_MBOX_20Zap_3a_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___02bf_8ac2_MBOX_20Zap_3a_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 4d 42 4f 58 20 5a 61 70 3a +R 00 00 01 00 +T 0b 00 00 00 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02c0_1dc7_MBOX_20bbs_20mail_2.rel b/src/nos/lib/messages_lib/02c0_1dc7_MBOX_20bbs_20mail_2.rel new file mode 100644 index 00000000..c95483fa --- /dev/null +++ b/src/nos/lib/messages_lib/02c0_1dc7_MBOX_20bbs_20mail_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___02c0_1dc7_MBOX_20bbs_20mail_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 4d 42 4f 58 20 62 62 73 20 +R 00 00 01 00 +T 0b 00 00 00 6d 61 69 6c 20 72 65 66 75 73 65 +R 00 00 01 00 +T 16 00 00 00 64 3a 20 25 73 0a 20 20 20 20 20 +R 00 00 01 00 +T 21 00 00 00 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02c1_37c2_MBOX_20bbs_20mail_2.rel b/src/nos/lib/messages_lib/02c1_37c2_MBOX_20bbs_20mail_2.rel new file mode 100644 index 00000000..c1cff416 --- /dev/null +++ b/src/nos/lib/messages_lib/02c1_37c2_MBOX_20bbs_20mail_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___02c1_37c2_MBOX_20bbs_20mail_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 4d 42 4f 58 20 62 62 73 20 +R 00 00 01 00 +T 0b 00 00 00 6d 61 69 6c 20 73 65 6e 74 3a 20 +R 00 00 01 00 +T 16 00 00 00 25 73 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02c2_f88f_MBOX_20forward_20fa.rel b/src/nos/lib/messages_lib/02c2_f88f_MBOX_20forward_20fa.rel new file mode 100644 index 00000000..2e4c2001 --- /dev/null +++ b/src/nos/lib/messages_lib/02c2_f88f_MBOX_20forward_20fa.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___02c2_f88f_MBOX_20forward_20fa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 4d 42 4f 58 20 66 6f 72 77 +R 00 00 01 00 +T 0b 00 00 00 61 72 64 20 66 61 69 6c 65 64 3a +R 00 00 01 00 +T 16 00 00 00 20 25 73 20 65 72 72 6e 6f 20 25 +R 00 00 01 00 +T 21 00 00 00 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02c3_9bd4_MBOX_20forwarding_2.rel b/src/nos/lib/messages_lib/02c3_9bd4_MBOX_20forwarding_2.rel new file mode 100644 index 00000000..b3609819 --- /dev/null +++ b/src/nos/lib/messages_lib/02c3_9bd4_MBOX_20forwarding_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___02c3_9bd4_MBOX_20forwarding_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 4d 42 4f 58 20 66 6f 72 77 +R 00 00 01 00 +T 0b 00 00 00 61 72 64 69 6e 67 20 6d 61 69 6c +R 00 00 01 00 +T 16 00 00 00 20 74 6f 3a 20 25 73 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02c4_d1e8_MBOX_20login_3a_20_.rel b/src/nos/lib/messages_lib/02c4_d1e8_MBOX_20login_3a_20_.rel new file mode 100644 index 00000000..d7b0ddf6 --- /dev/null +++ b/src/nos/lib/messages_lib/02c4_d1e8_MBOX_20login_3a_20_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___02c4_d1e8_MBOX_20login_3a_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 4d 42 4f 58 20 6c 6f 67 69 +R 00 00 01 00 +T 0b 00 00 00 6e 3a 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02c5_dd2e_MBOX_20login_3a_20_.rel b/src/nos/lib/messages_lib/02c5_dd2e_MBOX_20login_3a_20_.rel new file mode 100644 index 00000000..c310f7e0 --- /dev/null +++ b/src/nos/lib/messages_lib/02c5_dd2e_MBOX_20login_3a_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___02c5_dd2e_MBOX_20login_3a_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 4d 42 4f 58 20 6c 6f 67 69 +R 00 00 01 00 +T 0b 00 00 00 6e 3a 20 25 73 20 50 61 73 73 77 +R 00 00 01 00 +T 16 00 00 00 6f 72 64 3a 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02c6_e920_MBOX_20sysop_3a_20_.rel b/src/nos/lib/messages_lib/02c6_e920_MBOX_20sysop_3a_20_.rel new file mode 100644 index 00000000..43f78264 --- /dev/null +++ b/src/nos/lib/messages_lib/02c6_e920_MBOX_20sysop_3a_20_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___02c6_e920_MBOX_20sysop_3a_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 4d 42 4f 58 20 73 79 73 6f +R 00 00 01 00 +T 0b 00 00 00 70 3a 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02c7_a30c_MBOX_20upload_3a_20.rel b/src/nos/lib/messages_lib/02c7_a30c_MBOX_20upload_3a_20.rel new file mode 100644 index 00000000..46073aea --- /dev/null +++ b/src/nos/lib/messages_lib/02c7_a30c_MBOX_20upload_3a_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___02c7_a30c_MBOX_20upload_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 4d 42 4f 58 20 75 70 6c 6f +R 00 00 01 00 +T 0b 00 00 00 61 64 3a 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02c8_c247_MKD_20_25s.rel b/src/nos/lib/messages_lib/02c8_c247_MKD_20_25s.rel new file mode 100644 index 00000000..df24a6ef --- /dev/null +++ b/src/nos/lib/messages_lib/02c8_c247_MKD_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___02c8_c247_MKD_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 4d 4b 44 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02c9_53a6_MRU_20_25s_20_28_25.rel b/src/nos/lib/messages_lib/02c9_53a6_MRU_20_25s_20_28_25.rel new file mode 100644 index 00000000..5f43dd30 --- /dev/null +++ b/src/nos/lib/messages_lib/02c9_53a6_MRU_20_25s_20_28_25.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27 flags 0 +S ___02c9_53a6_MRU_20_25s_20_28_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 25 00 4d 52 55 20 25 73 20 28 25 +R 00 00 01 00 +T 0b 00 00 00 64 29 20 6f 75 74 20 6f 66 20 72 +R 00 00 01 00 +T 16 00 00 00 61 6e 67 65 20 25 64 20 74 68 72 +R 00 00 01 00 +T 21 00 00 00 75 20 25 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ca_f9a6_Magic_20Number.rel b/src/nos/lib/messages_lib/02ca_f9a6_Magic_20Number.rel new file mode 100644 index 00000000..2dba9e4f --- /dev/null +++ b/src/nos/lib/messages_lib/02ca_f9a6_Magic_20Number.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___02ca_f9a6_Magic_20Number Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 4d 61 67 69 63 20 4e 75 6d +R 00 00 01 00 +T 0b 00 00 00 62 65 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02cb_d070_Mail_20area_3a_20_2.rel b/src/nos/lib/messages_lib/02cb_d070_Mail_20area_3a_20_2.rel new file mode 100644 index 00000000..b115cb64 --- /dev/null +++ b/src/nos/lib/messages_lib/02cb_d070_Mail_20area_3a_20_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___02cb_d070_Mail_20area_3a_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 4d 61 69 6c 20 61 72 65 61 +R 00 00 01 00 +T 0b 00 00 00 3a 20 25 73 20 20 25 64 20 6d 65 +R 00 00 01 00 +T 16 00 00 00 73 73 61 67 65 25 73 20 2d 20 20 +R 00 00 01 00 +T 21 00 00 00 25 64 20 6e 65 77 0a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02cc_0103_Mail_20box_20full_3.rel b/src/nos/lib/messages_lib/02cc_0103_Mail_20box_20full_3.rel new file mode 100644 index 00000000..a7f3905f --- /dev/null +++ b/src/nos/lib/messages_lib/02cc_0103_Mail_20box_20full_3.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___02cc_0103_Mail_20box_20full_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 4d 61 69 6c 20 62 6f 78 20 +R 00 00 01 00 +T 0b 00 00 00 66 75 6c 6c 3a 20 3e 20 25 64 20 +R 00 00 01 00 +T 16 00 00 00 6d 65 73 73 61 67 65 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02cd_523a_Main_20commands_3a_.rel b/src/nos/lib/messages_lib/02cd_523a_Main_20commands_3a_.rel new file mode 100644 index 00000000..b94debfa --- /dev/null +++ b/src/nos/lib/messages_lib/02cd_523a_Main_20commands_3a_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___02cd_523a_Main_20commands_3a_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 4d 61 69 6e 20 63 6f 6d 6d +R 00 00 01 00 +T 0b 00 00 00 61 6e 64 73 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ce_dcca_Max_20attempts_20to.rel b/src/nos/lib/messages_lib/02ce_dcca_Max_20attempts_20to.rel new file mode 100644 index 00000000..8748013f --- /dev/null +++ b/src/nos/lib/messages_lib/02ce_dcca_Max_20attempts_20to.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___02ce_dcca_Max_20attempts_20to Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 4d 61 78 20 61 74 74 65 6d +R 00 00 01 00 +T 0b 00 00 00 70 74 73 20 74 6f 20 72 65 61 63 +R 00 00 01 00 +T 16 00 00 00 68 20 68 6f 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02cf_0279_Max_20clients.rel b/src/nos/lib/messages_lib/02cf_0279_Max_20clients.rel new file mode 100644 index 00000000..100c5814 --- /dev/null +++ b/src/nos/lib/messages_lib/02cf_0279_Max_20clients.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___02cf_0279_Max_20clients Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 4d 61 78 20 63 6c 69 65 6e +R 00 00 01 00 +T 0b 00 00 00 74 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02d0_3cd5_Max_20frame_20lengt.rel b/src/nos/lib/messages_lib/02d0_3cd5_Max_20frame_20lengt.rel new file mode 100644 index 00000000..7b32e7df --- /dev/null +++ b/src/nos/lib/messages_lib/02d0_3cd5_Max_20frame_20lengt.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___02d0_3cd5_Max_20frame_20lengt Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 4d 61 78 20 66 72 61 6d 65 +R 00 00 01 00 +T 0b 00 00 00 20 6c 65 6e 67 74 68 20 28 62 79 +R 00 00 01 00 +T 16 00 00 00 74 65 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02d1_d96d_Maximum_20messages_.rel b/src/nos/lib/messages_lib/02d1_d96d_Maximum_20messages_.rel new file mode 100644 index 00000000..fa43549b --- /dev/null +++ b/src/nos/lib/messages_lib/02d1_d96d_Maximum_20messages_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___02d1_d96d_Maximum_20messages_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 4d 61 78 69 6d 75 6d 20 6d +R 00 00 01 00 +T 0b 00 00 00 65 73 73 61 67 65 73 20 70 65 72 +R 00 00 01 00 +T 16 00 00 00 20 61 72 65 61 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02d2_488d_Mbuf_20sizes_3a_0a.rel b/src/nos/lib/messages_lib/02d2_488d_Mbuf_20sizes_3a_0a.rel new file mode 100644 index 00000000..69a008cb --- /dev/null +++ b/src/nos/lib/messages_lib/02d2_488d_Mbuf_20sizes_3a_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___02d2_488d_Mbuf_20sizes_3a_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 4d 62 75 66 20 73 69 7a 65 +R 00 00 01 00 +T 0b 00 00 00 73 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02d3_ee8f_Message_20_23_25d_2.rel b/src/nos/lib/messages_lib/02d3_ee8f_Message_20_23_25d_2.rel new file mode 100644 index 00000000..d9ad941f --- /dev/null +++ b/src/nos/lib/messages_lib/02d3_ee8f_Message_20_23_25d_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___02d3_ee8f_Message_20_23_25d_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 4d 65 73 73 61 67 65 20 23 +R 00 00 01 00 +T 0b 00 00 00 25 64 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02d4_b5f9_Mode_20_25s_20unkno.rel b/src/nos/lib/messages_lib/02d4_b5f9_Mode_20_25s_20unkno.rel new file mode 100644 index 00000000..e3bb3423 --- /dev/null +++ b/src/nos/lib/messages_lib/02d4_b5f9_Mode_20_25s_20unkno.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___02d4_b5f9_Mode_20_25s_20unkno Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 4d 6f 64 65 20 25 73 20 75 +R 00 00 01 00 +T 0b 00 00 00 6e 6b 6e 6f 77 6e 20 66 6f 72 20 +R 00 00 01 00 +T 16 00 00 00 45 53 43 43 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02d5_aa15_Mode_20_25s_20unkno.rel b/src/nos/lib/messages_lib/02d5_aa15_Mode_20_25s_20unkno.rel new file mode 100644 index 00000000..9ca9f0f3 --- /dev/null +++ b/src/nos/lib/messages_lib/02d5_aa15_Mode_20_25s_20unkno.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___02d5_aa15_Mode_20_25s_20unkno Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 4d 6f 64 65 20 25 73 20 75 +R 00 00 01 00 +T 0b 00 00 00 6e 6b 6e 6f 77 6e 20 66 6f 72 20 +R 00 00 01 00 +T 16 00 00 00 69 6e 74 65 72 66 61 63 65 20 25 +R 00 00 01 00 +T 21 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02d6_ac3e_Msg_20_25d_20Killed.rel b/src/nos/lib/messages_lib/02d6_ac3e_Msg_20_25d_20Killed.rel new file mode 100644 index 00000000..3c5c7f0b --- /dev/null +++ b/src/nos/lib/messages_lib/02d6_ac3e_Msg_20_25d_20Killed.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___02d6_ac3e_Msg_20_25d_20Killed Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 4d 73 67 20 25 64 20 4b 69 +R 00 00 01 00 +T 0b 00 00 00 6c 6c 65 64 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02d7_9a86_Must_20be_20_200_20.rel b/src/nos/lib/messages_lib/02d7_9a86_Must_20be_20_200_20.rel new file mode 100644 index 00000000..2fca2daa --- /dev/null +++ b/src/nos/lib/messages_lib/02d7_9a86_Must_20be_20_200_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___02d7_9a86_Must_20be_20_200_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 4d 75 73 74 20 62 65 20 20 +R 00 00 01 00 +T 0b 00 00 00 30 20 3c 20 78 20 3c 3d 20 25 64 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02d8_362b_Must_20be_20_200_20.rel b/src/nos/lib/messages_lib/02d8_362b_Must_20be_20_200_20.rel new file mode 100644 index 00000000..dc8d5b5f --- /dev/null +++ b/src/nos/lib/messages_lib/02d8_362b_Must_20be_20_200_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___02d8_362b_Must_20be_20_200_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 4d 75 73 74 20 62 65 20 20 +R 00 00 01 00 +T 0b 00 00 00 30 20 3c 20 78 20 3c 3d 20 32 35 +R 00 00 01 00 +T 16 00 00 00 35 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02d9_2da0_Must_20be_20_3e_3d_.rel b/src/nos/lib/messages_lib/02d9_2da0_Must_20be_20_3e_3d_.rel new file mode 100644 index 00000000..d4d3f0ea --- /dev/null +++ b/src/nos/lib/messages_lib/02d9_2da0_Must_20be_20_3e_3d_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___02d9_2da0_Must_20be_20_3e_3d_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 4d 75 73 74 20 62 65 20 3e +R 00 00 01 00 +T 0b 00 00 00 3d 20 30 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02da_06a9_Must_20set_20_27r_2.rel b/src/nos/lib/messages_lib/02da_06a9_Must_20set_20_27r_2.rel new file mode 100644 index 00000000..292dc1e6 --- /dev/null +++ b/src/nos/lib/messages_lib/02da_06a9_Must_20set_20_27r_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___02da_06a9_Must_20set_20_27r_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 4d 75 73 74 20 73 65 74 20 +R 00 00 01 00 +T 0b 00 00 00 27 72 27 20 66 6c 61 67 20 61 74 +R 00 00 01 00 +T 16 00 00 00 20 61 74 74 61 63 68 20 74 69 6d +R 00 00 01 00 +T 21 00 00 00 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02db_d814_N_3e_3d_255u_3a_257.rel b/src/nos/lib/messages_lib/02db_d814_N_3e_3d_255u_3a_257.rel new file mode 100644 index 00000000..183ea704 --- /dev/null +++ b/src/nos/lib/messages_lib/02db_d814_N_3e_3d_255u_3a_257.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36 flags 0 +S ___02db_d814_N_3e_3d_255u_3a_257 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 34 00 4e 3e 3d 25 35 75 3a 25 37 +R 00 00 01 00 +T 0b 00 00 00 6c 64 7c 20 4e 3e 3d 25 35 75 3a +R 00 00 01 00 +T 16 00 00 00 25 37 6c 64 7c 20 4e 3e 3d 25 35 +R 00 00 01 00 +T 21 00 00 00 75 3a 25 37 6c 64 7c 20 4e 3e 3d +R 00 00 01 00 +T 2c 00 00 00 25 35 75 3a 25 37 6c 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02dc_7868_NET_2fROM_20Routing.rel b/src/nos/lib/messages_lib/02dc_7868_NET_2fROM_20Routing.rel new file mode 100644 index 00000000..c5642520 --- /dev/null +++ b/src/nos/lib/messages_lib/02dc_7868_NET_2fROM_20Routing.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___02dc_7868_NET_2fROM_20Routing Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 4e 45 54 2f 52 4f 4d 20 52 +R 00 00 01 00 +T 0b 00 00 00 6f 75 74 69 6e 67 3a 20 25 73 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02dd_ae07_NET_2fROM_20not_20a.rel b/src/nos/lib/messages_lib/02dd_ae07_NET_2fROM_20not_20a.rel new file mode 100644 index 00000000..8845e3b8 --- /dev/null +++ b/src/nos/lib/messages_lib/02dd_ae07_NET_2fROM_20not_20a.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___02dd_ae07_NET_2fROM_20not_20a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 4e 45 54 2f 52 4f 4d 20 6e +R 00 00 01 00 +T 0b 00 00 00 6f 74 20 61 63 74 69 76 61 74 65 +R 00 00 01 00 +T 16 00 00 00 64 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02de_d0e9_NET_2fROM_3a_20_25s.rel b/src/nos/lib/messages_lib/02de_d0e9_NET_2fROM_3a_20_25s.rel new file mode 100644 index 00000000..7f3dd853 --- /dev/null +++ b/src/nos/lib/messages_lib/02de_d0e9_NET_2fROM_3a_20_25s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___02de_d0e9_NET_2fROM_3a_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 4e 45 54 2f 52 4f 4d 3a 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02df_73b0_NEWNEWS_20_25s_20_2.rel b/src/nos/lib/messages_lib/02df_73b0_NEWNEWS_20_25s_20_2.rel new file mode 100644 index 00000000..372805fe --- /dev/null +++ b/src/nos/lib/messages_lib/02df_73b0_NEWNEWS_20_25s_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___02df_73b0_NEWNEWS_20_25s_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 4e 45 57 4e 45 57 53 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02e0_c191_NNTP_20_25s_20Canno.rel b/src/nos/lib/messages_lib/02e0_c191_NNTP_20_25s_20Canno.rel new file mode 100644 index 00000000..0564004f --- /dev/null +++ b/src/nos/lib/messages_lib/02e0_c191_NNTP_20_25s_20Canno.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___02e0_c191_NNTP_20_25s_20Canno Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 4e 4e 54 50 20 25 73 20 43 +R 00 00 01 00 +T 0b 00 00 00 61 6e 6e 6f 74 20 63 72 65 61 74 +R 00 00 01 00 +T 16 00 00 00 65 20 74 65 6d 70 20 66 69 6c 65 +R 00 00 01 00 +T 21 00 00 00 20 27 25 73 27 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02e1_7ed2_NNTP_20_25s_20Canno.rel b/src/nos/lib/messages_lib/02e1_7ed2_NNTP_20_25s_20Canno.rel new file mode 100644 index 00000000..05695dc4 --- /dev/null +++ b/src/nos/lib/messages_lib/02e1_7ed2_NNTP_20_25s_20Canno.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___02e1_7ed2_NNTP_20_25s_20Canno Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 4e 4e 54 50 20 25 73 20 43 +R 00 00 01 00 +T 0b 00 00 00 61 6e 6e 6f 74 20 6f 70 65 6e 20 +R 00 00 01 00 +T 16 00 00 00 74 65 6d 70 20 66 69 6c 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02e2_bcd0_NNTP_20_25s_20Conne.rel b/src/nos/lib/messages_lib/02e2_bcd0_NNTP_20_25s_20Conne.rel new file mode 100644 index 00000000..1043ad27 --- /dev/null +++ b/src/nos/lib/messages_lib/02e2_bcd0_NNTP_20_25s_20Conne.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___02e2_bcd0_NNTP_20_25s_20Conne Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 4e 4e 54 50 20 25 73 20 43 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 6e 65 63 74 20 66 61 69 6c +R 00 00 01 00 +T 16 00 00 00 65 64 3a 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02e3_796b_NNTP_20_25s_20Conne.rel b/src/nos/lib/messages_lib/02e3_796b_NNTP_20_25s_20Conne.rel new file mode 100644 index 00000000..8fae88d2 --- /dev/null +++ b/src/nos/lib/messages_lib/02e3_796b_NNTP_20_25s_20Conne.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___02e3_796b_NNTP_20_25s_20Conne Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 4e 4e 54 50 20 25 73 20 43 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 6e 65 63 74 20 66 61 69 6c +R 00 00 01 00 +T 16 00 00 00 65 64 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02e4_4193_NNTP_20_25s_20Conne.rel b/src/nos/lib/messages_lib/02e4_4193_NNTP_20_25s_20Conne.rel new file mode 100644 index 00000000..d7f2f2a2 --- /dev/null +++ b/src/nos/lib/messages_lib/02e4_4193_NNTP_20_25s_20Conne.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29 flags 0 +S ___02e4_4193_NNTP_20_25s_20Conne Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 27 00 4e 4e 54 50 20 25 73 20 43 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 6e 65 63 74 20 66 61 69 6c +R 00 00 01 00 +T 16 00 00 00 65 64 3a 20 43 61 6e 6e 6f 74 20 +R 00 00 01 00 +T 21 00 00 00 6f 70 65 6e 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02e5_0909_NNTP_20_25s_20Conne.rel b/src/nos/lib/messages_lib/02e5_0909_NNTP_20_25s_20Conne.rel new file mode 100644 index 00000000..ed2b05b6 --- /dev/null +++ b/src/nos/lib/messages_lib/02e5_0909_NNTP_20_25s_20Conne.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___02e5_0909_NNTP_20_25s_20Conne Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 4e 4e 54 50 20 25 73 20 43 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 6e 65 63 74 20 66 61 69 6c +R 00 00 01 00 +T 16 00 00 00 65 64 3a 20 43 61 6e 6e 6f 74 20 +R 00 00 01 00 +T 21 00 00 00 6f 70 65 6e 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02e6_3814_NNTP_20_25s_20Conne.rel b/src/nos/lib/messages_lib/02e6_3814_NNTP_20_25s_20Conne.rel new file mode 100644 index 00000000..d1254036 --- /dev/null +++ b/src/nos/lib/messages_lib/02e6_3814_NNTP_20_25s_20Conne.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S ___02e6_3814_NNTP_20_25s_20Conne Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2e 00 4e 4e 54 50 20 25 73 20 43 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 6e 65 63 74 20 66 61 69 6c +R 00 00 01 00 +T 16 00 00 00 65 64 3a 20 63 61 6e 6e 6f 74 20 +R 00 00 01 00 +T 21 00 00 00 6c 6f 63 6b 20 6e 6e 74 70 2e 64 +R 00 00 01 00 +T 2c 00 00 00 61 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02e7_b5ec_NNTP_20_25s_20Could.rel b/src/nos/lib/messages_lib/02e7_b5ec_NNTP_20_25s_20Could.rel new file mode 100644 index 00000000..c256915f --- /dev/null +++ b/src/nos/lib/messages_lib/02e7_b5ec_NNTP_20_25s_20Could.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2e flags 0 +S ___02e7_b5ec_NNTP_20_25s_20Could Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2c 00 4e 4e 54 50 20 25 73 20 43 +R 00 00 01 00 +T 0b 00 00 00 6f 75 6c 64 20 6e 6f 74 20 6c 6f +R 00 00 01 00 +T 16 00 00 00 63 6b 20 6e 6e 74 70 2e 64 61 74 +R 00 00 01 00 +T 21 00 00 00 20 66 6f 72 20 75 70 64 61 74 65 +R 00 00 01 00 +T 2c 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02e8_8531_NNTP_20_25s_20Could.rel b/src/nos/lib/messages_lib/02e8_8531_NNTP_20_25s_20Could.rel new file mode 100644 index 00000000..f807637a --- /dev/null +++ b/src/nos/lib/messages_lib/02e8_8531_NNTP_20_25s_20Could.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___02e8_8531_NNTP_20_25s_20Could Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 4e 4e 54 50 20 25 73 20 43 +R 00 00 01 00 +T 0b 00 00 00 6f 75 6c 64 20 6e 6f 74 20 75 70 +R 00 00 01 00 +T 16 00 00 00 64 61 74 65 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02e9_8fd5_NNTP_20_25s_20Could.rel b/src/nos/lib/messages_lib/02e9_8fd5_NNTP_20_25s_20Could.rel new file mode 100644 index 00000000..27e42059 --- /dev/null +++ b/src/nos/lib/messages_lib/02e9_8fd5_NNTP_20_25s_20Could.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___02e9_8fd5_NNTP_20_25s_20Could Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 4e 4e 54 50 20 25 73 20 43 +R 00 00 01 00 +T 0b 00 00 00 6f 75 6c 64 20 6e 6f 74 20 75 70 +R 00 00 01 00 +T 16 00 00 00 64 61 74 65 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ea_0d83_NNTP_20_25s_20Givin.rel b/src/nos/lib/messages_lib/02ea_0d83_NNTP_20_25s_20Givin.rel new file mode 100644 index 00000000..c3b82f08 --- /dev/null +++ b/src/nos/lib/messages_lib/02ea_0d83_NNTP_20_25s_20Givin.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2b flags 0 +S ___02ea_0d83_NNTP_20_25s_20Givin Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 29 00 4e 4e 54 50 20 25 73 20 47 +R 00 00 01 00 +T 0b 00 00 00 69 76 69 6e 67 20 75 70 3a 20 63 +R 00 00 01 00 +T 16 00 00 00 6f 75 6c 64 20 6e 6f 74 20 67 65 +R 00 00 01 00 +T 21 00 00 00 74 20 61 72 74 69 63 6c 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02eb_19c4_NNTP_20_25s_20Givin.rel b/src/nos/lib/messages_lib/02eb_19c4_NNTP_20_25s_20Givin.rel new file mode 100644 index 00000000..762ed9ab --- /dev/null +++ b/src/nos/lib/messages_lib/02eb_19c4_NNTP_20_25s_20Givin.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2c flags 0 +S ___02eb_19c4_NNTP_20_25s_20Givin Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2a 00 4e 4e 54 50 20 25 73 20 47 +R 00 00 01 00 +T 0b 00 00 00 69 76 69 6e 67 20 75 70 3a 20 63 +R 00 00 01 00 +T 16 00 00 00 6f 75 6c 64 20 6e 6f 74 20 67 65 +R 00 00 01 00 +T 21 00 00 00 74 20 61 72 74 69 63 6c 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ec_213a_NNTP_20_25s_20bad_2.rel b/src/nos/lib/messages_lib/02ec_213a_NNTP_20_25s_20bad_2.rel new file mode 100644 index 00000000..f8c6335f --- /dev/null +++ b/src/nos/lib/messages_lib/02ec_213a_NNTP_20_25s_20bad_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S ___02ec_213a_NNTP_20_25s_20bad_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2e 00 4e 4e 54 50 20 25 73 20 62 +R 00 00 01 00 +T 0b 00 00 00 61 64 20 72 65 70 6c 79 20 6f 6e +R 00 00 01 00 +T 16 00 00 00 20 62 61 6e 6e 65 72 20 28 72 65 +R 00 00 01 00 +T 21 00 00 00 73 70 6f 6e 73 65 20 77 61 73 20 +R 00 00 01 00 +T 2c 00 00 00 25 64 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ed_31a2_NNTP_20_25s_20bad_2.rel b/src/nos/lib/messages_lib/02ed_31a2_NNTP_20_25s_20bad_2.rel new file mode 100644 index 00000000..0bc61752 --- /dev/null +++ b/src/nos/lib/messages_lib/02ed_31a2_NNTP_20_25s_20bad_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S ___02ed_31a2_NNTP_20_25s_20bad_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2f 00 4e 4e 54 50 20 25 73 20 62 +R 00 00 01 00 +T 0b 00 00 00 61 64 20 72 65 70 6c 79 20 6f 6e +R 00 00 01 00 +T 16 00 00 00 20 62 61 6e 6e 65 72 20 28 72 65 +R 00 00 01 00 +T 21 00 00 00 73 70 6f 6e 73 65 20 77 61 73 20 +R 00 00 01 00 +T 2c 00 00 00 25 64 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ee_df3f_NNTP_20_25s_20givin.rel b/src/nos/lib/messages_lib/02ee_df3f_NNTP_20_25s_20givin.rel new file mode 100644 index 00000000..5562f722 --- /dev/null +++ b/src/nos/lib/messages_lib/02ee_df3f_NNTP_20_25s_20givin.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S ___02ee_df3f_NNTP_20_25s_20givin Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2f 00 4e 4e 54 50 20 25 73 20 67 +R 00 00 01 00 +T 0b 00 00 00 69 76 69 6e 67 20 75 70 3a 20 63 +R 00 00 01 00 +T 16 00 00 00 6f 75 6c 64 6e 27 74 20 6c 6f 63 +R 00 00 01 00 +T 21 00 00 00 6b 20 68 69 73 74 6f 72 79 20 66 +R 00 00 01 00 +T 2c 00 00 00 69 6c 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ef_791c_NNTP_20_25s_20givin.rel b/src/nos/lib/messages_lib/02ef_791c_NNTP_20_25s_20givin.rel new file mode 100644 index 00000000..f9fa5543 --- /dev/null +++ b/src/nos/lib/messages_lib/02ef_791c_NNTP_20_25s_20givin.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S ___02ef_791c_NNTP_20_25s_20givin Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 24 00 4e 4e 54 50 20 25 73 20 67 +R 00 00 01 00 +T 0b 00 00 00 69 76 69 6e 67 20 75 70 3a 20 67 +R 00 00 01 00 +T 16 00 00 00 65 74 74 78 74 28 29 20 66 61 69 +R 00 00 01 00 +T 21 00 00 00 6c 75 72 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02f0_75ce_NNTP_20_25s_20givin.rel b/src/nos/lib/messages_lib/02f0_75ce_NNTP_20_25s_20givin.rel new file mode 100644 index 00000000..54aab555 --- /dev/null +++ b/src/nos/lib/messages_lib/02f0_75ce_NNTP_20_25s_20givin.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27 flags 0 +S ___02f0_75ce_NNTP_20_25s_20givin Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 25 00 4e 4e 54 50 20 25 73 20 67 +R 00 00 01 00 +T 0b 00 00 00 69 76 69 6e 67 20 75 70 3a 20 67 +R 00 00 01 00 +T 16 00 00 00 65 74 74 78 74 28 29 20 66 61 69 +R 00 00 01 00 +T 21 00 00 00 6c 75 72 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02f1_7eb6_NNTP_20_25s_20proto.rel b/src/nos/lib/messages_lib/02f1_7eb6_NNTP_20_25s_20proto.rel new file mode 100644 index 00000000..a906adb8 --- /dev/null +++ b/src/nos/lib/messages_lib/02f1_7eb6_NNTP_20_25s_20proto.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2b flags 0 +S ___02f1_7eb6_NNTP_20_25s_20proto Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 29 00 4e 4e 54 50 20 25 73 20 70 +R 00 00 01 00 +T 0b 00 00 00 72 6f 74 6f 63 6f 6c 20 65 72 72 +R 00 00 01 00 +T 16 00 00 00 6f 72 20 28 72 65 73 70 6f 6e 73 +R 00 00 01 00 +T 21 00 00 00 65 20 77 61 73 20 25 64 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02f2_7f99_NNTP_20_25s_20proto.rel b/src/nos/lib/messages_lib/02f2_7f99_NNTP_20_25s_20proto.rel new file mode 100644 index 00000000..8740cda3 --- /dev/null +++ b/src/nos/lib/messages_lib/02f2_7f99_NNTP_20_25s_20proto.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2c flags 0 +S ___02f2_7f99_NNTP_20_25s_20proto Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2a 00 4e 4e 54 50 20 25 73 20 70 +R 00 00 01 00 +T 0b 00 00 00 72 6f 74 6f 63 6f 6c 20 65 72 72 +R 00 00 01 00 +T 16 00 00 00 6f 72 20 28 72 65 73 70 6f 6e 73 +R 00 00 01 00 +T 21 00 00 00 65 20 77 61 73 20 25 64 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02f3_a517_NNTP_20Cannot_20ope.rel b/src/nos/lib/messages_lib/02f3_a517_NNTP_20Cannot_20ope.rel new file mode 100644 index 00000000..99ee412b --- /dev/null +++ b/src/nos/lib/messages_lib/02f3_a517_NNTP_20Cannot_20ope.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___02f3_a517_NNTP_20Cannot_20ope Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 4e 4e 54 50 20 43 61 6e 6e +R 00 00 01 00 +T 0b 00 00 00 6f 74 20 6f 70 65 6e 20 74 65 6d +R 00 00 01 00 +T 16 00 00 00 70 20 66 69 6c 65 20 66 6f 72 20 +R 00 00 01 00 +T 21 00 00 00 61 72 74 69 63 6c 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02f4_fc8f_NNTP_20can_27t_20re.rel b/src/nos/lib/messages_lib/02f4_fc8f_NNTP_20can_27t_20re.rel new file mode 100644 index 00000000..f47bc751 --- /dev/null +++ b/src/nos/lib/messages_lib/02f4_fc8f_NNTP_20can_27t_20re.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___02f4_fc8f_NNTP_20can_27t_20re Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 4e 4e 54 50 20 63 61 6e 27 +R 00 00 01 00 +T 0b 00 00 00 74 20 72 65 73 6f 6c 76 65 20 68 +R 00 00 01 00 +T 16 00 00 00 6f 73 74 20 27 25 73 27 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02f5_2c2a_NNTP_20daemon_20ent.rel b/src/nos/lib/messages_lib/02f5_2c2a_NNTP_20daemon_20ent.rel new file mode 100644 index 00000000..92922df6 --- /dev/null +++ b/src/nos/lib/messages_lib/02f5_2c2a_NNTP_20daemon_20ent.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___02f5_2c2a_NNTP_20daemon_20ent Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 4e 4e 54 50 20 64 61 65 6d +R 00 00 01 00 +T 0b 00 00 00 6f 6e 20 65 6e 74 65 72 65 64 2c +R 00 00 01 00 +T 16 00 00 00 20 74 61 72 67 65 74 20 3d 20 25 +R 00 00 01 00 +T 21 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02f6_f2a9_NNTP_20daemon_20exi.rel b/src/nos/lib/messages_lib/02f6_f2a9_NNTP_20daemon_20exi.rel new file mode 100644 index 00000000..06648ac1 --- /dev/null +++ b/src/nos/lib/messages_lib/02f6_f2a9_NNTP_20daemon_20exi.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___02f6_f2a9_NNTP_20daemon_20exi Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 4e 4e 54 50 20 64 61 65 6d +R 00 00 01 00 +T 0b 00 00 00 6f 6e 20 65 78 69 74 69 6e 67 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02f7_cbc7_NNTP_20daemon_20qui.rel b/src/nos/lib/messages_lib/02f7_cbc7_NNTP_20daemon_20qui.rel new file mode 100644 index 00000000..f28a0bb7 --- /dev/null +++ b/src/nos/lib/messages_lib/02f7_cbc7_NNTP_20daemon_20qui.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___02f7_cbc7_NNTP_20daemon_20qui Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 4e 4e 54 50 20 64 61 65 6d +R 00 00 01 00 +T 0b 00 00 00 6f 6e 20 71 75 69 74 20 2d 2d 20 +R 00 00 01 00 +T 16 00 00 00 6c 6f 77 20 6d 65 6d 6f 72 79 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02f8_0fa8_NNTP_20group_20_27_.rel b/src/nos/lib/messages_lib/02f8_0fa8_NNTP_20group_20_27_.rel new file mode 100644 index 00000000..a66b2e52 --- /dev/null +++ b/src/nos/lib/messages_lib/02f8_0fa8_NNTP_20group_20_27_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___02f8_0fa8_NNTP_20group_20_27_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 4e 4e 54 50 20 67 72 6f 75 +R 00 00 01 00 +T 0b 00 00 00 70 20 27 25 73 27 20 69 73 20 6c +R 00 00 01 00 +T 16 00 00 00 6f 63 6b 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02f9_0e76_NNTP_20receive_20er.rel b/src/nos/lib/messages_lib/02f9_0e76_NNTP_20receive_20er.rel new file mode 100644 index 00000000..c9619939 --- /dev/null +++ b/src/nos/lib/messages_lib/02f9_0e76_NNTP_20receive_20er.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___02f9_0e76_NNTP_20receive_20er Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 4e 4e 54 50 20 72 65 63 65 +R 00 00 01 00 +T 0b 00 00 00 69 76 65 20 65 72 72 6f 72 20 61 +R 00 00 01 00 +T 16 00 00 00 66 74 65 72 20 25 64 20 6c 69 6e +R 00 00 01 00 +T 21 00 00 00 65 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02fa_a47f_NNTP_20received_20_.rel b/src/nos/lib/messages_lib/02fa_a47f_NNTP_20received_20_.rel new file mode 100644 index 00000000..922d54fd --- /dev/null +++ b/src/nos/lib/messages_lib/02fa_a47f_NNTP_20received_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___02fa_a47f_NNTP_20received_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 4e 4e 54 50 20 72 65 63 65 +R 00 00 01 00 +T 0b 00 00 00 69 76 65 64 20 25 64 20 6c 69 6e +R 00 00 01 00 +T 16 00 00 00 65 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02fb_0916_NNTP_20tracing.rel b/src/nos/lib/messages_lib/02fb_0916_NNTP_20tracing.rel new file mode 100644 index 00000000..bb8f1c43 --- /dev/null +++ b/src/nos/lib/messages_lib/02fb_0916_NNTP_20tracing.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___02fb_0916_NNTP_20tracing Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 4e 4e 54 50 20 74 72 61 63 +R 00 00 01 00 +T 0b 00 00 00 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02fc_b065_NNTP_20window_20to_.rel b/src/nos/lib/messages_lib/02fc_b065_NNTP_20window_20to_.rel new file mode 100644 index 00000000..0eace4ca --- /dev/null +++ b/src/nos/lib/messages_lib/02fc_b065_NNTP_20window_20to_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___02fc_b065_NNTP_20window_20to_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 4e 4e 54 50 20 77 69 6e 64 +R 00 00 01 00 +T 0b 00 00 00 6f 77 20 74 6f 20 27 25 73 27 20 +R 00 00 01 00 +T 16 00 00 00 6e 6f 74 20 6f 70 65 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02fd_852e_NO_20_2d_20.rel b/src/nos/lib/messages_lib/02fd_852e_NO_20_2d_20.rel new file mode 100644 index 00000000..a1c7ee44 --- /dev/null +++ b/src/nos/lib/messages_lib/02fd_852e_NO_20_2d_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___02fd_852e_NO_20_2d_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 4e 4f 20 2d 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02fe_e182_NO_20_2d_20bad_20ad.rel b/src/nos/lib/messages_lib/02fe_e182_NO_20_2d_20bad_20ad.rel new file mode 100644 index 00000000..6d638f7e --- /dev/null +++ b/src/nos/lib/messages_lib/02fe_e182_NO_20_2d_20bad_20ad.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___02fe_e182_NO_20_2d_20bad_20ad Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 4e 4f 20 2d 20 62 61 64 20 +R 00 00 01 00 +T 0b 00 00 00 61 64 64 72 65 73 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/02ff_7ccb_NO_20_2d_20syntax_2.rel b/src/nos/lib/messages_lib/02ff_7ccb_NO_20_2d_20syntax_2.rel new file mode 100644 index 00000000..2d40cf90 --- /dev/null +++ b/src/nos/lib/messages_lib/02ff_7ccb_NO_20_2d_20syntax_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___02ff_7ccb_NO_20_2d_20syntax_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 4e 4f 20 2d 20 73 79 6e 74 +R 00 00 01 00 +T 0b 00 00 00 61 78 20 65 72 72 6f 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0300_2df6_NOS_20log_20closed.rel b/src/nos/lib/messages_lib/0300_2df6_NOS_20log_20closed.rel new file mode 100644 index 00000000..ba910462 --- /dev/null +++ b/src/nos/lib/messages_lib/0300_2df6_NOS_20log_20closed.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0300_2df6_NOS_20log_20closed Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 4e 4f 53 20 6c 6f 67 20 63 +R 00 00 01 00 +T 0b 00 00 00 6c 6f 73 65 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0301_e1c8_NOS_20was_20started.rel b/src/nos/lib/messages_lib/0301_e1c8_NOS_20was_20started.rel new file mode 100644 index 00000000..7ae5e54f --- /dev/null +++ b/src/nos/lib/messages_lib/0301_e1c8_NOS_20was_20started.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___0301_e1c8_NOS_20was_20started Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 4e 4f 53 20 77 61 73 20 73 +R 00 00 01 00 +T 0b 00 00 00 74 61 72 74 65 64 20 61 74 20 25 +R 00 00 01 00 +T 16 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0302_cfbe_NOS_20was_20stopped.rel b/src/nos/lib/messages_lib/0302_cfbe_NOS_20was_20stopped.rel new file mode 100644 index 00000000..42fd2f3f --- /dev/null +++ b/src/nos/lib/messages_lib/0302_cfbe_NOS_20was_20stopped.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___0302_cfbe_NOS_20was_20stopped Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 4e 4f 53 20 77 61 73 20 73 +R 00 00 01 00 +T 0b 00 00 00 74 6f 70 70 65 64 20 61 74 20 25 +R 00 00 01 00 +T 16 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0303_998c_NULL_20BUFFER_0a.rel b/src/nos/lib/messages_lib/0303_998c_NULL_20BUFFER_0a.rel new file mode 100644 index 00000000..d9aa91fd --- /dev/null +++ b/src/nos/lib/messages_lib/0303_998c_NULL_20BUFFER_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0303_998c_NULL_20BUFFER_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 4e 55 4c 4c 20 42 55 46 46 +R 00 00 01 00 +T 0b 00 00 00 45 52 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0304_89a8_Net_3e_20.rel b/src/nos/lib/messages_lib/0304_89a8_Net_3e_20.rel new file mode 100644 index 00000000..9fa4b862 --- /dev/null +++ b/src/nos/lib/messages_lib/0304_89a8_Net_3e_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0304_89a8_Net_3e_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 4e 65 74 3e 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0305_e0c6_Network_20_25s_20co.rel b/src/nos/lib/messages_lib/0305_e0c6_Network_20_25s_20co.rel new file mode 100644 index 00000000..9ec06b14 --- /dev/null +++ b/src/nos/lib/messages_lib/0305_e0c6_Network_20_25s_20co.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0305_e0c6_Network_20_25s_20co Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 4e 65 74 77 6f 72 6b 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 20 63 6f 6e 66 69 67 75 72 65 +R 00 00 01 00 +T 16 00 00 00 64 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0306_4009_New_20mail_20arrive.rel b/src/nos/lib/messages_lib/0306_4009_New_20mail_20arrive.rel new file mode 100644 index 00000000..f54eaa98 --- /dev/null +++ b/src/nos/lib/messages_lib/0306_4009_New_20mail_20arrive.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0306_4009_New_20mail_20arrive Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 4e 65 77 20 6d 61 69 6c 20 +R 00 00 01 00 +T 0b 00 00 00 61 72 72 69 76 65 64 20 66 6f 72 +R 00 00 01 00 +T 16 00 00 00 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0307_fbfc_New_20mail_20arrive.rel b/src/nos/lib/messages_lib/0307_fbfc_New_20mail_20arrive.rel new file mode 100644 index 00000000..7faf0e12 --- /dev/null +++ b/src/nos/lib/messages_lib/0307_fbfc_New_20mail_20arrive.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S ___0307_fbfc_New_20mail_20arrive Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2e 00 4e 65 77 20 6d 61 69 6c 20 +R 00 00 01 00 +T 0b 00 00 00 61 72 72 69 76 65 64 20 66 6f 72 +R 00 00 01 00 +T 16 00 00 00 20 25 73 20 66 72 6f 6d 20 6d 61 +R 00 00 01 00 +T 21 00 00 00 69 6c 68 6f 73 74 20 3c 25 73 3e +R 00 00 01 00 +T 2c 00 00 00 25 63 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0308_d0a7_New_20news_20arrive.rel b/src/nos/lib/messages_lib/0308_d0a7_New_20news_20arrive.rel new file mode 100644 index 00000000..a6e11935 --- /dev/null +++ b/src/nos/lib/messages_lib/0308_d0a7_New_20news_20arrive.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___0308_d0a7_New_20news_20arrive Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 4e 65 77 20 6e 65 77 73 20 +R 00 00 01 00 +T 0b 00 00 00 61 72 72 69 76 65 64 3a 20 25 73 +R 00 00 01 00 +T 16 00 00 00 2c 20 61 72 74 69 63 6c 65 20 25 +R 00 00 01 00 +T 21 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0309_e9a0_No_20HAPN_20adaptor.rel b/src/nos/lib/messages_lib/0309_e9a0_No_20HAPN_20adaptor.rel new file mode 100644 index 00000000..9c3b9518 --- /dev/null +++ b/src/nos/lib/messages_lib/0309_e9a0_No_20HAPN_20adaptor.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0309_e9a0_No_20HAPN_20adaptor Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 4e 6f 20 48 41 50 4e 20 61 +R 00 00 01 00 +T 0b 00 00 00 64 61 70 74 6f 72 20 61 74 74 61 +R 00 00 01 00 +T 16 00 00 00 63 68 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/030a_87bb_No_20current_20sess.rel b/src/nos/lib/messages_lib/030a_87bb_No_20current_20sess.rel new file mode 100644 index 00000000..a7d6d820 --- /dev/null +++ b/src/nos/lib/messages_lib/030a_87bb_No_20current_20sess.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___030a_87bb_No_20current_20sess Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 4e 6f 20 63 75 72 72 65 6e +R 00 00 01 00 +T 0b 00 00 00 74 20 73 65 73 73 69 6f 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/030b_7f27_No_20dialer_20activ.rel b/src/nos/lib/messages_lib/030b_7f27_No_20dialer_20activ.rel new file mode 100644 index 00000000..15fc1a84 --- /dev/null +++ b/src/nos/lib/messages_lib/030b_7f27_No_20dialer_20activ.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___030b_7f27_No_20dialer_20activ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 4e 6f 20 64 69 61 6c 65 72 +R 00 00 01 00 +T 0b 00 00 00 20 61 63 74 69 76 65 20 6f 6e 20 +R 00 00 01 00 +T 16 00 00 00 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/030c_cd1f_No_20finger_20infor.rel b/src/nos/lib/messages_lib/030c_cd1f_No_20finger_20infor.rel new file mode 100644 index 00000000..7ccac5bb --- /dev/null +++ b/src/nos/lib/messages_lib/030c_cd1f_No_20finger_20infor.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___030c_cd1f_No_20finger_20infor Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 4e 6f 20 66 69 6e 67 65 72 +R 00 00 01 00 +T 0b 00 00 00 20 69 6e 66 6f 72 6d 61 74 69 6f +R 00 00 01 00 +T 16 00 00 00 6e 20 61 76 61 69 6c 61 62 6c 65 +R 00 00 01 00 +T 21 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/030d_2a2e_No_20help_20availab.rel b/src/nos/lib/messages_lib/030d_2a2e_No_20help_20availab.rel new file mode 100644 index 00000000..a75cc364 --- /dev/null +++ b/src/nos/lib/messages_lib/030d_2a2e_No_20help_20availab.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___030d_2a2e_No_20help_20availab Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 4e 6f 20 68 65 6c 70 20 61 +R 00 00 01 00 +T 0b 00 00 00 76 61 69 6c 61 62 6c 65 2e 20 28 +R 00 00 01 00 +T 16 00 00 00 25 73 20 6e 6f 74 20 66 6f 75 6e +R 00 00 01 00 +T 21 00 00 00 64 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/030e_7cc9_No_20packet_20drive.rel b/src/nos/lib/messages_lib/030e_7cc9_No_20packet_20drive.rel new file mode 100644 index 00000000..d6ace865 --- /dev/null +++ b/src/nos/lib/messages_lib/030e_7cc9_No_20packet_20drive.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27 flags 0 +S ___030e_7cc9_No_20packet_20drive Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 25 00 4e 6f 20 70 61 63 6b 65 74 +R 00 00 01 00 +T 0b 00 00 00 20 64 72 69 76 65 72 20 6c 6f 61 +R 00 00 01 00 +T 16 00 00 00 64 65 64 20 61 74 20 69 6e 74 20 +R 00 00 01 00 +T 21 00 00 00 30 78 25 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/030f_4e0c_No_20such_20message.rel b/src/nos/lib/messages_lib/030f_4e0c_No_20such_20message.rel new file mode 100644 index 00000000..36ba0aef --- /dev/null +++ b/src/nos/lib/messages_lib/030f_4e0c_No_20such_20message.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___030f_4e0c_No_20such_20message Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 4e 6f 20 73 75 63 68 20 6d +R 00 00 01 00 +T 0b 00 00 00 65 73 73 61 67 65 20 61 72 65 61 +R 00 00 01 00 +T 16 00 00 00 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0310_2a80_No_20such_20server_.rel b/src/nos/lib/messages_lib/0310_2a80_No_20such_20server_.rel new file mode 100644 index 00000000..1d43798a --- /dev/null +++ b/src/nos/lib/messages_lib/0310_2a80_No_20such_20server_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0310_2a80_No_20such_20server_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 4e 6f 20 73 75 63 68 20 73 +R 00 00 01 00 +T 0b 00 00 00 65 72 76 65 72 20 65 6e 61 62 6c +R 00 00 01 00 +T 16 00 00 00 65 64 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0311_0cda_Nodetimer_20_25lu_2.rel b/src/nos/lib/messages_lib/0311_0cda_Nodetimer_20_25lu_2.rel new file mode 100644 index 00000000..4ed96470 --- /dev/null +++ b/src/nos/lib/messages_lib/0311_0cda_Nodetimer_20_25lu_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___0311_0cda_Nodetimer_20_25lu_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 4e 6f 64 65 74 69 6d 65 72 +R 00 00 01 00 +T 0b 00 00 00 20 25 6c 75 2f 25 6c 75 20 73 65 +R 00 00 01 00 +T 16 00 00 00 63 6f 6e 64 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0312_3fb0_None.rel b/src/nos/lib/messages_lib/0312_3fb0_None.rel new file mode 100644 index 00000000..08a87b24 --- /dev/null +++ b/src/nos/lib/messages_lib/0312_3fb0_None.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0312_3fb0_None Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 4e 6f 6e 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0313_1aee_None_0a.rel b/src/nos/lib/messages_lib/0313_1aee_None_0a.rel new file mode 100644 index 00000000..c08cd077 --- /dev/null +++ b/src/nos/lib/messages_lib/0313_1aee_None_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0313_1aee_None_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 4e 6f 6e 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0314_f8e2_Not_20a_20valid_20s.rel b/src/nos/lib/messages_lib/0314_f8e2_Not_20a_20valid_20s.rel new file mode 100644 index 00000000..916304a4 --- /dev/null +++ b/src/nos/lib/messages_lib/0314_f8e2_Not_20a_20valid_20s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___0314_f8e2_Not_20a_20valid_20s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 4e 6f 74 20 61 20 76 61 6c +R 00 00 01 00 +T 0b 00 00 00 69 64 20 73 6f 63 6b 65 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0315_b4ba_Not_20an_20FTP_20se.rel b/src/nos/lib/messages_lib/0315_b4ba_Not_20an_20FTP_20se.rel new file mode 100644 index 00000000..da91b290 --- /dev/null +++ b/src/nos/lib/messages_lib/0315_b4ba_Not_20an_20FTP_20se.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0315_b4ba_Not_20an_20FTP_20se Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 4e 6f 74 20 61 6e 20 46 54 +R 00 00 01 00 +T 0b 00 00 00 50 20 73 65 73 73 69 6f 6e 21 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0316_ee7e_Not_20found_0a.rel b/src/nos/lib/messages_lib/0316_ee7e_Not_20found_0a.rel new file mode 100644 index 00000000..476e79d4 --- /dev/null +++ b/src/nos/lib/messages_lib/0316_ee7e_Not_20found_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0316_ee7e_Not_20found_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 4e 6f 74 20 66 6f 75 6e 64 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0317_533e_Not_20in_20table_0a.rel b/src/nos/lib/messages_lib/0317_533e_Not_20in_20table_0a.rel new file mode 100644 index 00000000..0a3086e6 --- /dev/null +++ b/src/nos/lib/messages_lib/0317_533e_Not_20in_20table_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0317_533e_Not_20in_20table_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 4e 6f 74 20 69 6e 20 74 61 +R 00 00 01 00 +T 0b 00 00 00 62 6c 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0318_c7b9_Not_20supported_0a.rel b/src/nos/lib/messages_lib/0318_c7b9_Not_20supported_0a.rel new file mode 100644 index 00000000..975a4319 --- /dev/null +++ b/src/nos/lib/messages_lib/0318_c7b9_Not_20supported_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0318_c7b9_Not_20supported_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 4e 6f 74 20 73 75 70 70 6f +R 00 00 01 00 +T 0b 00 00 00 72 74 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0319_9692_Obsotimer_20_25lu_2.rel b/src/nos/lib/messages_lib/0319_9692_Obsotimer_20_25lu_2.rel new file mode 100644 index 00000000..63f20143 --- /dev/null +++ b/src/nos/lib/messages_lib/0319_9692_Obsotimer_20_25lu_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___0319_9692_Obsotimer_20_25lu_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 4f 62 73 6f 74 69 6d 65 72 +R 00 00 01 00 +T 0b 00 00 00 20 25 6c 75 2f 25 6c 75 20 73 65 +R 00 00 01 00 +T 16 00 00 00 63 6f 6e 64 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/031a_ff96_Oh_2c_20hello_20_25.rel b/src/nos/lib/messages_lib/031a_ff96_Oh_2c_20hello_20_25.rel new file mode 100644 index 00000000..413773b6 --- /dev/null +++ b/src/nos/lib/messages_lib/031a_ff96_Oh_2c_20hello_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___031a_ff96_Oh_2c_20hello_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 4f 68 2c 20 68 65 6c 6c 6f +R 00 00 01 00 +T 0b 00 00 00 20 25 73 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/031b_0948_Only_20_25d_20DRSI_.rel b/src/nos/lib/messages_lib/031b_0948_Only_20_25d_20DRSI_.rel new file mode 100644 index 00000000..20c8776c --- /dev/null +++ b/src/nos/lib/messages_lib/031b_0948_Only_20_25d_20DRSI_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 33 flags 0 +S ___031b_0948_Only_20_25d_20DRSI_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 31 00 4f 6e 6c 79 20 25 64 20 44 +R 00 00 01 00 +T 0b 00 00 00 52 53 49 20 63 6f 6e 74 72 6f 6c +R 00 00 01 00 +T 16 00 00 00 6c 65 72 28 73 29 20 73 75 70 70 +R 00 00 01 00 +T 21 00 00 00 6f 72 74 65 64 20 72 69 67 68 74 +R 00 00 01 00 +T 2c 00 00 00 20 6e 6f 77 21 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/031c_8edb_Only_20_25d_20net_2.rel b/src/nos/lib/messages_lib/031c_8edb_Only_20_25d_20net_2.rel new file mode 100644 index 00000000..0aafb27d --- /dev/null +++ b/src/nos/lib/messages_lib/031c_8edb_Only_20_25d_20net_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___031c_8edb_Only_20_25d_20net_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 4f 6e 6c 79 20 25 64 20 6e +R 00 00 01 00 +T 0b 00 00 00 65 74 2f 72 6f 6d 20 69 6e 74 65 +R 00 00 01 00 +T 16 00 00 00 72 66 61 63 65 73 20 61 76 61 69 +R 00 00 01 00 +T 21 00 00 00 6c 61 62 6c 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/031d_f9f0_Only_201_20EAGLE_20.rel b/src/nos/lib/messages_lib/031d_f9f0_Only_201_20EAGLE_20.rel new file mode 100644 index 00000000..3e3879c4 --- /dev/null +++ b/src/nos/lib/messages_lib/031d_f9f0_Only_201_20EAGLE_20.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S ___031d_f9f0_Only_201_20EAGLE_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2e 00 4f 6e 6c 79 20 31 20 45 41 +R 00 00 01 00 +T 0b 00 00 00 47 4c 45 20 63 6f 6e 74 72 6f 6c +R 00 00 01 00 +T 16 00 00 00 6c 65 72 20 73 75 70 70 6f 72 74 +R 00 00 01 00 +T 21 00 00 00 65 64 20 72 69 67 68 74 20 6e 6f +R 00 00 01 00 +T 2c 00 00 00 77 21 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/031e_1514_Outqlen_3a_20_25d_2.rel b/src/nos/lib/messages_lib/031e_1514_Outqlen_3a_20_25d_2.rel new file mode 100644 index 00000000..3b94dbf5 --- /dev/null +++ b/src/nos/lib/messages_lib/031e_1514_Outqlen_3a_20_25d_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___031e_1514_Outqlen_3a_20_25d_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 4f 75 74 71 6c 65 6e 3a 20 +R 00 00 01 00 +T 0b 00 00 00 25 64 20 70 61 63 6b 65 74 73 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/031f_5b48_PANIC_3a_20Timer_20.rel b/src/nos/lib/messages_lib/031f_5b48_PANIC_3a_20Timer_20.rel new file mode 100644 index 00000000..12f93dae --- /dev/null +++ b/src/nos/lib/messages_lib/031f_5b48_PANIC_3a_20Timer_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___031f_5b48_PANIC_3a_20Timer_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 50 41 4e 49 43 3a 20 54 69 +R 00 00 01 00 +T 0b 00 00 00 6d 65 72 20 6c 6f 6f 70 20 61 74 +R 00 00 01 00 +T 16 00 00 00 20 25 6c 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0320_281b_PANIC_3a_20buffer_2.rel b/src/nos/lib/messages_lib/0320_281b_PANIC_3a_20buffer_2.rel new file mode 100644 index 00000000..ce09822b --- /dev/null +++ b/src/nos/lib/messages_lib/0320_281b_PANIC_3a_20buffer_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2d flags 0 +S ___0320_281b_PANIC_3a_20buffer_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2b 00 50 41 4e 49 43 3a 20 62 75 +R 00 00 01 00 +T 0b 00 00 00 66 66 65 72 20 61 75 64 69 74 20 +R 00 00 01 00 +T 16 00 00 00 66 61 69 6c 75 72 65 20 69 6e 20 +R 00 00 01 00 +T 21 00 00 00 25 73 20 6c 69 6e 65 20 25 64 0a +R 00 00 01 00 +T 2c 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0321_f630_PAP_0a.rel b/src/nos/lib/messages_lib/0321_f630_PAP_0a.rel new file mode 100644 index 00000000..41f916da --- /dev/null +++ b/src/nos/lib/messages_lib/0321_f630_PAP_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0321_f630_PAP_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 50 41 50 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0322_b2fb_PAP_20_25s_0a.rel b/src/nos/lib/messages_lib/0322_b2fb_PAP_20_25s_0a.rel new file mode 100644 index 00000000..565e77af --- /dev/null +++ b/src/nos/lib/messages_lib/0322_b2fb_PAP_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0322_b2fb_PAP_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 50 41 50 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0323_8063_PASS_20_25s.rel b/src/nos/lib/messages_lib/0323_8063_PASS_20_25s.rel new file mode 100644 index 00000000..d5283ecb --- /dev/null +++ b/src/nos/lib/messages_lib/0323_8063_PASS_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0323_8063_PASS_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 50 41 53 53 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0324_2320_PI_20Board_20Statis.rel b/src/nos/lib/messages_lib/0324_2320_PI_20Board_20Statis.rel new file mode 100644 index 00000000..0b84f56e --- /dev/null +++ b/src/nos/lib/messages_lib/0324_2320_PI_20Board_20Statis.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0324_2320_PI_20Board_20Statis Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 50 49 20 42 6f 61 72 64 20 +R 00 00 01 00 +T 0b 00 00 00 53 74 61 74 69 73 74 69 63 73 3a +R 00 00 01 00 +T 16 00 00 00 0a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0325_73f1_PI_3a_20DMA_20_25d_.rel b/src/nos/lib/messages_lib/0325_73f1_PI_3a_20DMA_20_25d_.rel new file mode 100644 index 00000000..5b026101 --- /dev/null +++ b/src/nos/lib/messages_lib/0325_73f1_PI_3a_20DMA_20_25d_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0325_73f1_PI_3a_20DMA_20_25d_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 50 49 3a 20 44 4d 41 20 25 +R 00 00 01 00 +T 0b 00 00 00 64 20 6f 75 74 20 6f 66 20 72 61 +R 00 00 01 00 +T 16 00 00 00 6e 67 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0326_5841_PI_3a_20DMA_20chann.rel b/src/nos/lib/messages_lib/0326_5841_PI_3a_20DMA_20chann.rel new file mode 100644 index 00000000..f60b4f81 --- /dev/null +++ b/src/nos/lib/messages_lib/0326_5841_PI_3a_20DMA_20chann.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___0326_5841_PI_3a_20DMA_20chann Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 50 49 3a 20 44 4d 41 20 63 +R 00 00 01 00 +T 0b 00 00 00 68 61 6e 6e 65 6c 20 25 64 20 6f +R 00 00 01 00 +T 16 00 00 00 75 74 20 6f 66 20 72 61 6e 67 65 +R 00 00 01 00 +T 21 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0327_3992_PI_3a_20IRQ_20_25u_.rel b/src/nos/lib/messages_lib/0327_3992_PI_3a_20IRQ_20_25u_.rel new file mode 100644 index 00000000..b0c68d02 --- /dev/null +++ b/src/nos/lib/messages_lib/0327_3992_PI_3a_20IRQ_20_25u_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0327_3992_PI_3a_20IRQ_20_25u_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 50 49 3a 20 49 52 51 20 25 +R 00 00 01 00 +T 0b 00 00 00 75 20 6f 75 74 20 6f 66 20 72 61 +R 00 00 01 00 +T 16 00 00 00 6e 67 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0328_4ca4_PI_3a_20Interface_2.rel b/src/nos/lib/messages_lib/0328_4ca4_PI_3a_20Interface_2.rel new file mode 100644 index 00000000..a61c20cb --- /dev/null +++ b/src/nos/lib/messages_lib/0328_4ca4_PI_3a_20Interface_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___0328_4ca4_PI_3a_20Interface_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 50 49 3a 20 49 6e 74 65 72 +R 00 00 01 00 +T 0b 00 00 00 66 61 63 65 20 25 73 20 61 6c 72 +R 00 00 01 00 +T 16 00 00 00 65 61 64 79 20 65 78 69 73 74 73 +R 00 00 01 00 +T 21 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0329_d856_PI_3a_20Maximum_20o.rel b/src/nos/lib/messages_lib/0329_d856_PI_3a_20Maximum_20o.rel new file mode 100644 index 00000000..d1b6b26f --- /dev/null +++ b/src/nos/lib/messages_lib/0329_d856_PI_3a_20Maximum_20o.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___0329_d856_PI_3a_20Maximum_20o Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 50 49 3a 20 4d 61 78 69 6d +R 00 00 01 00 +T 0b 00 00 00 75 6d 20 6f 66 20 25 64 20 50 49 +R 00 00 01 00 +T 16 00 00 00 20 63 61 72 64 73 20 73 75 70 70 +R 00 00 01 00 +T 21 00 00 00 6f 72 74 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/032a_9098_PI_3a_20Mode_20_25s.rel b/src/nos/lib/messages_lib/032a_9098_PI_3a_20Mode_20_25s.rel new file mode 100644 index 00000000..0a5b5810 --- /dev/null +++ b/src/nos/lib/messages_lib/032a_9098_PI_3a_20Mode_20_25s.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___032a_9098_PI_3a_20Mode_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 50 49 3a 20 4d 6f 64 65 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 20 75 6e 6b 6e 6f 77 6e 20 +R 00 00 01 00 +T 16 00 00 00 66 6f 72 20 69 6e 74 65 72 66 61 +R 00 00 01 00 +T 21 00 00 00 63 65 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/032b_de39_PI_3a_20No_20IP_20a.rel b/src/nos/lib/messages_lib/032b_de39_PI_3a_20No_20IP_20a.rel new file mode 100644 index 00000000..94bab262 --- /dev/null +++ b/src/nos/lib/messages_lib/032b_de39_PI_3a_20No_20IP_20a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___032b_de39_PI_3a_20No_20IP_20a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 50 49 3a 20 4e 6f 20 49 50 +R 00 00 01 00 +T 0b 00 00 00 20 61 64 64 72 65 73 73 21 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/032c_02ea_PI_3a_20No_20memory.rel b/src/nos/lib/messages_lib/032c_02ea_PI_3a_20No_20memory.rel new file mode 100644 index 00000000..cdbea174 --- /dev/null +++ b/src/nos/lib/messages_lib/032c_02ea_PI_3a_20No_20memory.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2e flags 0 +S ___032c_02ea_PI_3a_20No_20memory Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2c 00 50 49 3a 20 4e 6f 20 6d 65 +R 00 00 01 00 +T 0b 00 00 00 6d 6f 72 79 20 61 76 61 69 6c 61 +R 00 00 01 00 +T 16 00 00 00 62 6c 65 20 66 6f 72 20 72 65 63 +R 00 00 01 00 +T 21 00 00 00 65 69 76 65 20 62 75 66 66 65 72 +R 00 00 01 00 +T 2c 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/032d_c0d0_PI_3a_20No_20memory.rel b/src/nos/lib/messages_lib/032d_c0d0_PI_3a_20No_20memory.rel new file mode 100644 index 00000000..e6d1bf73 --- /dev/null +++ b/src/nos/lib/messages_lib/032d_c0d0_PI_3a_20No_20memory.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2f flags 0 +S ___032d_c0d0_PI_3a_20No_20memory Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2d 00 50 49 3a 20 4e 6f 20 6d 65 +R 00 00 01 00 +T 0b 00 00 00 6d 6f 72 79 20 61 76 61 69 6c 61 +R 00 00 01 00 +T 16 00 00 00 62 6c 65 20 66 6f 72 20 72 65 63 +R 00 00 01 00 +T 21 00 00 00 65 69 76 65 20 62 75 66 66 65 72 +R 00 00 01 00 +T 2c 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/032e_94ca_PI_3a_20No_20memory.rel b/src/nos/lib/messages_lib/032e_94ca_PI_3a_20No_20memory.rel new file mode 100644 index 00000000..0600e9b2 --- /dev/null +++ b/src/nos/lib/messages_lib/032e_94ca_PI_3a_20No_20memory.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2e flags 0 +S ___032e_94ca_PI_3a_20No_20memory Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2c 00 50 49 3a 20 4e 6f 20 6d 65 +R 00 00 01 00 +T 0b 00 00 00 6d 6f 72 79 20 61 76 61 69 6c 61 +R 00 00 01 00 +T 16 00 00 00 62 6c 65 20 66 6f 72 20 74 72 61 +R 00 00 01 00 +T 21 00 00 00 6e 73 6d 69 74 20 62 75 66 66 65 +R 00 00 01 00 +T 2c 00 00 00 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/032f_c698_PI_3a_20No_20memory.rel b/src/nos/lib/messages_lib/032f_c698_PI_3a_20No_20memory.rel new file mode 100644 index 00000000..817a25bc --- /dev/null +++ b/src/nos/lib/messages_lib/032f_c698_PI_3a_20No_20memory.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2f flags 0 +S ___032f_c698_PI_3a_20No_20memory Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2d 00 50 49 3a 20 4e 6f 20 6d 65 +R 00 00 01 00 +T 0b 00 00 00 6d 6f 72 79 20 61 76 61 69 6c 61 +R 00 00 01 00 +T 16 00 00 00 62 6c 65 20 66 6f 72 20 74 72 61 +R 00 00 01 00 +T 21 00 00 00 6e 73 6d 69 74 20 62 75 66 66 65 +R 00 00 01 00 +T 2c 00 00 00 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0330_d61f_PI_3a_20Set_20mycal.rel b/src/nos/lib/messages_lib/0330_d61f_PI_3a_20Set_20mycal.rel new file mode 100644 index 00000000..e349090e --- /dev/null +++ b/src/nos/lib/messages_lib/0330_d61f_PI_3a_20Set_20mycal.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___0330_d61f_PI_3a_20Set_20mycal Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 50 49 3a 20 53 65 74 20 6d +R 00 00 01 00 +T 0b 00 00 00 79 63 61 6c 6c 20 66 69 72 73 74 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0331_68d4_PID_20_20_20CS_3aIP.rel b/src/nos/lib/messages_lib/0331_68d4_PID_20_20_20CS_3aIP.rel new file mode 100644 index 00000000..a7c62a3d --- /dev/null +++ b/src/nos/lib/messages_lib/0331_68d4_PID_20_20_20CS_3aIP.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 43 flags 0 +S ___0331_68d4_PID_20_20_20CS_3aIP Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 41 00 50 49 44 20 20 20 43 53 3a +R 00 00 01 00 +T 0b 00 00 00 49 50 20 20 20 20 20 20 53 53 3a +R 00 00 01 00 +T 16 00 00 00 53 50 20 20 20 20 20 20 73 74 61 +R 00 00 01 00 +T 21 00 00 00 63 6b 20 75 73 61 67 65 20 65 76 +R 00 00 01 00 +T 2c 00 00 00 65 6e 74 20 66 6c 20 20 69 6e 20 +R 00 00 01 00 +T 37 00 00 00 20 6f 75 74 20 20 6e 61 6d 65 0a +R 00 00 01 00 +T 42 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0332_3c62_POP_20access_20DENI.rel b/src/nos/lib/messages_lib/0332_3c62_POP_20access_20DENI.rel new file mode 100644 index 00000000..2a49d648 --- /dev/null +++ b/src/nos/lib/messages_lib/0332_3c62_POP_20access_20DENI.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0332_3c62_POP_20access_20DENI Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 50 4f 50 20 61 63 63 65 73 +R 00 00 01 00 +T 0b 00 00 00 73 20 44 45 4e 49 45 44 20 74 6f +R 00 00 01 00 +T 16 00 00 00 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0333_f3cf_POP_20access_20gran.rel b/src/nos/lib/messages_lib/0333_f3cf_POP_20access_20gran.rel new file mode 100644 index 00000000..fee7d976 --- /dev/null +++ b/src/nos/lib/messages_lib/0333_f3cf_POP_20access_20gran.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0333_f3cf_POP_20access_20gran Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 50 4f 50 20 61 63 63 65 73 +R 00 00 01 00 +T 0b 00 00 00 73 20 67 72 61 6e 74 65 64 20 74 +R 00 00 01 00 +T 16 00 00 00 6f 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0334_639f_POP_20client_20retr.rel b/src/nos/lib/messages_lib/0334_639f_POP_20client_20retr.rel new file mode 100644 index 00000000..d700a3ec --- /dev/null +++ b/src/nos/lib/messages_lib/0334_639f_POP_20client_20retr.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___0334_639f_POP_20client_20retr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 50 4f 50 20 63 6c 69 65 6e +R 00 00 01 00 +T 0b 00 00 00 74 20 72 65 74 72 69 65 76 65 64 +R 00 00 01 00 +T 16 00 00 00 20 25 64 20 6d 65 73 73 61 67 65 +R 00 00 01 00 +T 21 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0335_e9bb_POP_20quiet.rel b/src/nos/lib/messages_lib/0335_e9bb_POP_20quiet.rel new file mode 100644 index 00000000..a68d8b49 --- /dev/null +++ b/src/nos/lib/messages_lib/0335_e9bb_POP_20quiet.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0335_e9bb_POP_20quiet Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 50 4f 50 20 71 75 69 65 74 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0336_1231_POP_20users_20file_.rel b/src/nos/lib/messages_lib/0336_1231_POP_20users_20file_.rel new file mode 100644 index 00000000..62db62fe --- /dev/null +++ b/src/nos/lib/messages_lib/0336_1231_POP_20users_20file_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0336_1231_POP_20users_20file_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 50 4f 50 20 75 73 65 72 73 +R 00 00 01 00 +T 0b 00 00 00 20 66 69 6c 65 20 25 73 20 6e 6f +R 00 00 01 00 +T 16 00 00 00 74 20 66 6f 75 6e 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0337_e126_PORT_20_25u_2c_25u_.rel b/src/nos/lib/messages_lib/0337_e126_PORT_20_25u_2c_25u_.rel new file mode 100644 index 00000000..8becbcfd --- /dev/null +++ b/src/nos/lib/messages_lib/0337_e126_PORT_20_25u_2c_25u_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0337_e126_PORT_20_25u_2c_25u_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 50 4f 52 54 20 25 75 2c 25 +R 00 00 01 00 +T 0b 00 00 00 75 2c 25 75 2c 25 75 2c 25 75 2c +R 00 00 01 00 +T 16 00 00 00 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0338_b459_PPP_20tracing.rel b/src/nos/lib/messages_lib/0338_b459_PPP_20tracing.rel new file mode 100644 index 00000000..ccb36afe --- /dev/null +++ b/src/nos/lib/messages_lib/0338_b459_PPP_20tracing.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0338_b459_PPP_20tracing Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 50 50 50 20 74 72 61 63 69 +R 00 00 01 00 +T 0b 00 00 00 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0339_b660_PPP_3a_20len_20_253.rel b/src/nos/lib/messages_lib/0339_b660_PPP_3a_20len_20_253.rel new file mode 100644 index 00000000..08a4bd4d --- /dev/null +++ b/src/nos/lib/messages_lib/0339_b660_PPP_3a_20len_20_253.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0339_b660_PPP_3a_20len_20_253 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 50 50 50 3a 20 6c 65 6e 20 +R 00 00 01 00 +T 0b 00 00 00 25 33 75 09 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/033a_8c73_Packet_20driver_20h.rel b/src/nos/lib/messages_lib/033a_8c73_Packet_20driver_20h.rel new file mode 100644 index 00000000..cbebd879 --- /dev/null +++ b/src/nos/lib/messages_lib/033a_8c73_Packet_20driver_20h.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___033a_8c73_Packet_20driver_20h Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 50 61 63 6b 65 74 20 64 72 +R 00 00 01 00 +T 0b 00 00 00 69 76 65 72 20 68 61 73 20 75 6e +R 00 00 01 00 +T 16 00 00 00 73 75 70 70 6f 72 74 65 64 20 63 +R 00 00 01 00 +T 21 00 00 00 6c 61 73 73 20 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/033b_d638_Pap_0a.rel b/src/nos/lib/messages_lib/033b_d638_Pap_0a.rel new file mode 100644 index 00000000..4570f547 --- /dev/null +++ b/src/nos/lib/messages_lib/033b_d638_Pap_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___033b_d638_Pap_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 50 61 70 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/033c_8165_Parameter_20_25s_20.rel b/src/nos/lib/messages_lib/033c_8165_Parameter_20_25s_20.rel new file mode 100644 index 00000000..598421ea --- /dev/null +++ b/src/nos/lib/messages_lib/033c_8165_Parameter_20_25s_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___033c_8165_Parameter_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 50 61 72 61 6d 65 74 65 72 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 20 6e 6f 74 20 73 75 70 +R 00 00 01 00 +T 16 00 00 00 70 6f 72 74 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/033d_85d2_Password_3a_20.rel b/src/nos/lib/messages_lib/033d_85d2_Password_3a_20.rel new file mode 100644 index 00000000..fde28619 --- /dev/null +++ b/src/nos/lib/messages_lib/033d_85d2_Password_3a_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___033d_85d2_Password_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 50 61 73 73 77 6f 72 64 3a +R 00 00 01 00 +T 0b 00 00 00 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/033e_cb37_Password_3a_20_25c_.rel b/src/nos/lib/messages_lib/033e_cb37_Password_3a_20_25c_.rel new file mode 100644 index 00000000..0c9b778d --- /dev/null +++ b/src/nos/lib/messages_lib/033e_cb37_Password_3a_20_25c_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___033e_cb37_Password_3a_20_25c_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 50 61 73 73 77 6f 72 64 3a +R 00 00 01 00 +T 0b 00 00 00 20 25 63 25 63 25 63 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/033f_6310_Path_3a_20.rel b/src/nos/lib/messages_lib/033f_6310_Path_3a_20.rel new file mode 100644 index 00000000..bd350848 --- /dev/null +++ b/src/nos/lib/messages_lib/033f_6310_Path_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___033f_6310_Path_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 50 61 74 68 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0340_f75b_Persistence_3a_20_2.rel b/src/nos/lib/messages_lib/0340_f75b_Persistence_3a_20_2.rel new file mode 100644 index 00000000..9be57927 --- /dev/null +++ b/src/nos/lib/messages_lib/0340_f75b_Persistence_3a_20_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0340_f75b_Persistence_3a_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 50 65 72 73 69 73 74 65 6e +R 00 00 01 00 +T 0b 00 00 00 63 65 3a 20 25 75 2f 32 35 36 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0341_7bc8_Pinging_20_25s_0a.rel b/src/nos/lib/messages_lib/0341_7bc8_Pinging_20_25s_0a.rel new file mode 100644 index 00000000..c5dd93dc --- /dev/null +++ b/src/nos/lib/messages_lib/0341_7bc8_Pinging_20_25s_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0341_7bc8_Pinging_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 50 69 6e 67 69 6e 67 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0342_94a5_Pinging_20resumed_0.rel b/src/nos/lib/messages_lib/0342_94a5_Pinging_20resumed_0.rel new file mode 100644 index 00000000..623658ef --- /dev/null +++ b/src/nos/lib/messages_lib/0342_94a5_Pinging_20resumed_0.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0342_94a5_Pinging_20resumed_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 50 69 6e 67 69 6e 67 20 72 +R 00 00 01 00 +T 0b 00 00 00 65 73 75 6d 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0343_7fa9_Pinging_20suspended.rel b/src/nos/lib/messages_lib/0343_7fa9_Pinging_20suspended.rel new file mode 100644 index 00000000..d48a3ae6 --- /dev/null +++ b/src/nos/lib/messages_lib/0343_7fa9_Pinging_20suspended.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0343_7fa9_Pinging_20suspended Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 50 69 6e 67 69 6e 67 20 73 +R 00 00 01 00 +T 0b 00 00 00 75 73 70 65 6e 64 65 64 2c 20 25 +R 00 00 01 00 +T 16 00 00 00 6c 75 20 73 65 6e 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0344_220f_Please_20hang_20up_.rel b/src/nos/lib/messages_lib/0344_220f_Please_20hang_20up_.rel new file mode 100644 index 00000000..5a4da41b --- /dev/null +++ b/src/nos/lib/messages_lib/0344_220f_Please_20hang_20up_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0344_220f_Please_20hang_20up_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 50 6c 65 61 73 65 20 68 61 +R 00 00 01 00 +T 0b 00 00 00 6e 67 20 75 70 20 6e 6f 77 2e 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0345_4304_Poll_20threshold_20.rel b/src/nos/lib/messages_lib/0345_4304_Poll_20threshold_20.rel new file mode 100644 index 00000000..370b1daa --- /dev/null +++ b/src/nos/lib/messages_lib/0345_4304_Poll_20threshold_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0345_4304_Poll_20threshold_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 50 6f 6c 6c 20 74 68 72 65 +R 00 00 01 00 +T 0b 00 00 00 73 68 6f 6c 64 20 28 62 79 74 65 +R 00 00 01 00 +T 16 00 00 00 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0346_f8a0_Pool_20count_20_25s.rel b/src/nos/lib/messages_lib/0346_f8a0_Pool_20count_20_25s.rel new file mode 100644 index 00000000..6f0d98fd --- /dev/null +++ b/src/nos/lib/messages_lib/0346_f8a0_Pool_20count_20_25s.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___0346_f8a0_Pool_20count_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 50 6f 6f 6c 20 63 6f 75 6e +R 00 00 01 00 +T 0b 00 00 00 74 20 25 73 20 28 25 64 29 20 6d +R 00 00 01 00 +T 16 00 00 00 75 73 74 20 62 65 20 3e 20 30 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0347_dd4d_Protocol_20Field_20.rel b/src/nos/lib/messages_lib/0347_dd4d_Protocol_20Field_20.rel new file mode 100644 index 00000000..e50c2fc3 --- /dev/null +++ b/src/nos/lib/messages_lib/0347_dd4d_Protocol_20Field_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___0347_dd4d_Protocol_20Field_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 50 72 6f 74 6f 63 6f 6c 20 +R 00 00 01 00 +T 0b 00 00 00 46 69 65 6c 64 20 43 6f 6d 70 72 +R 00 00 01 00 +T 16 00 00 00 65 73 73 69 6f 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0348_744a_QUIT_0a.rel b/src/nos/lib/messages_lib/0348_744a_QUIT_0a.rel new file mode 100644 index 00000000..0cba0cd8 --- /dev/null +++ b/src/nos/lib/messages_lib/0348_744a_QUIT_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0348_744a_QUIT_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 51 55 49 54 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0349_43c0_Quality_20cannot_20.rel b/src/nos/lib/messages_lib/0349_43c0_Quality_20cannot_20.rel new file mode 100644 index 00000000..4e7c5286 --- /dev/null +++ b/src/nos/lib/messages_lib/0349_43c0_Quality_20cannot_20.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S ___0349_43c0_Quality_20cannot_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 24 00 51 75 61 6c 69 74 79 20 63 +R 00 00 01 00 +T 0b 00 00 00 61 6e 6e 6f 74 20 62 65 20 67 72 +R 00 00 01 00 +T 16 00 00 00 65 61 74 65 72 20 74 68 61 6e 20 +R 00 00 01 00 +T 21 00 00 00 32 35 35 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/034a_b523_Queue_20limit_20_28.rel b/src/nos/lib/messages_lib/034a_b523_Queue_20limit_20_28.rel new file mode 100644 index 00000000..12a63eee --- /dev/null +++ b/src/nos/lib/messages_lib/034a_b523_Queue_20limit_20_28.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___034a_b523_Queue_20limit_20_28 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 51 75 65 75 65 20 6c 69 6d +R 00 00 01 00 +T 0b 00 00 00 69 74 20 28 62 79 74 65 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/034b_4a0a_R_20numbers.rel b/src/nos/lib/messages_lib/034b_4a0a_R_20numbers.rel new file mode 100644 index 00000000..51fbd24d --- /dev/null +++ b/src/nos/lib/messages_lib/034b_4a0a_R_20numbers.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___034b_4a0a_R_20numbers Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 52 20 6e 75 6d 62 65 72 73 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/034c_db0e_R_3a_25s_20_40_25s_.rel b/src/nos/lib/messages_lib/034c_db0e_R_3a_25s_20_40_25s_.rel new file mode 100644 index 00000000..0cabe551 --- /dev/null +++ b/src/nos/lib/messages_lib/034c_db0e_R_3a_25s_20_40_25s_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___034c_db0e_R_3a_25s_20_40_25s_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 52 3a 25 73 20 40 25 73 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 20 28 25 73 29 0a 52 3a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/034d_373f_REQUEST.rel b/src/nos/lib/messages_lib/034d_373f_REQUEST.rel new file mode 100644 index 00000000..857e2092 --- /dev/null +++ b/src/nos/lib/messages_lib/034d_373f_REQUEST.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___034d_373f_REQUEST Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 52 45 51 55 45 53 54 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/034e_19a4_RESPONSE.rel b/src/nos/lib/messages_lib/034e_19a4_RESPONSE.rel new file mode 100644 index 00000000..9344845f --- /dev/null +++ b/src/nos/lib/messages_lib/034e_19a4_RESPONSE.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___034e_19a4_RESPONSE Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 52 45 53 50 4f 4e 53 45 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/034f_8b13_RETR_20_25s.rel b/src/nos/lib/messages_lib/034f_8b13_RETR_20_25s.rel new file mode 100644 index 00000000..a3d94b5c --- /dev/null +++ b/src/nos/lib/messages_lib/034f_8b13_RETR_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___034f_8b13_RETR_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 52 45 54 52 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0350_86e9_RETURN_0a.rel b/src/nos/lib/messages_lib/0350_86e9_RETURN_0a.rel new file mode 100644 index 00000000..a4af7b04 --- /dev/null +++ b/src/nos/lib/messages_lib/0350_86e9_RETURN_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0350_86e9_RETURN_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 52 45 54 55 52 4e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0351_bbdb_RFrames_20_2d_20_25.rel b/src/nos/lib/messages_lib/0351_bbdb_RFrames_20_2d_20_25.rel new file mode 100644 index 00000000..723db6af --- /dev/null +++ b/src/nos/lib/messages_lib/0351_bbdb_RFrames_20_2d_20_25.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___0351_bbdb_RFrames_20_2d_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 00 52 46 72 61 6d 65 73 20 2d +R 00 00 01 00 +T 0b 00 00 00 20 25 38 6c 64 20 20 52 78 6f 76 +R 00 00 01 00 +T 16 00 00 00 65 72 73 20 2d 20 25 38 6c 64 20 +R 00 00 01 00 +T 21 00 00 00 20 54 6f 6f 42 69 67 20 20 2d 20 +R 00 00 01 00 +T 2c 00 00 00 25 38 6c 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0352_f9d6_RIP_20merging.rel b/src/nos/lib/messages_lib/0352_f9d6_RIP_20merging.rel new file mode 100644 index 00000000..df6688b4 --- /dev/null +++ b/src/nos/lib/messages_lib/0352_f9d6_RIP_20merging.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0352_f9d6_RIP_20merging Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 52 49 50 20 6d 65 72 67 69 +R 00 00 01 00 +T 0b 00 00 00 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0353_3211_RIP_20refused_20fro.rel b/src/nos/lib/messages_lib/0353_3211_RIP_20refused_20fro.rel new file mode 100644 index 00000000..14e30580 --- /dev/null +++ b/src/nos/lib/messages_lib/0353_3211_RIP_20refused_20fro.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0353_3211_RIP_20refused_20fro Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 52 49 50 20 72 65 66 75 73 +R 00 00 01 00 +T 0b 00 00 00 65 64 20 66 72 6f 6d 20 25 73 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0354_8827_RIP_20tracing.rel b/src/nos/lib/messages_lib/0354_8827_RIP_20tracing.rel new file mode 100644 index 00000000..afa56bc8 --- /dev/null +++ b/src/nos/lib/messages_lib/0354_8827_RIP_20tracing.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0354_8827_RIP_20tracing Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 52 49 50 20 74 72 61 63 69 +R 00 00 01 00 +T 0b 00 00 00 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0355_5585_RIP_3a_20.rel b/src/nos/lib/messages_lib/0355_5585_RIP_3a_20.rel new file mode 100644 index 00000000..08ee201e --- /dev/null +++ b/src/nos/lib/messages_lib/0355_5585_RIP_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0355_5585_RIP_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 52 49 50 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0356_fd1d_RIP_3a_20sent_20_25.rel b/src/nos/lib/messages_lib/0356_fd1d_RIP_3a_20sent_20_25.rel new file mode 100644 index 00000000..79704a71 --- /dev/null +++ b/src/nos/lib/messages_lib/0356_fd1d_RIP_3a_20sent_20_25.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 41 flags 0 +S ___0356_fd1d_RIP_3a_20sent_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 3f 00 52 49 50 3a 20 73 65 6e 74 +R 00 00 01 00 +T 0b 00 00 00 20 25 6c 75 20 72 63 76 64 20 25 +R 00 00 01 00 +T 16 00 00 00 6c 75 20 72 65 71 73 74 20 25 6c +R 00 00 01 00 +T 21 00 00 00 75 20 72 65 73 70 20 25 6c 75 20 +R 00 00 01 00 +T 2c 00 00 00 75 6e 6b 20 25 6c 75 20 72 65 66 +R 00 00 01 00 +T 37 00 00 00 75 73 65 64 20 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0357_6b7c_RIPCMD_3a_20Unknown.rel b/src/nos/lib/messages_lib/0357_6b7c_RIPCMD_3a_20Unknown.rel new file mode 100644 index 00000000..7d415c59 --- /dev/null +++ b/src/nos/lib/messages_lib/0357_6b7c_RIPCMD_3a_20Unknown.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___0357_6b7c_RIPCMD_3a_20Unknown Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 52 49 50 43 4d 44 3a 20 55 +R 00 00 01 00 +T 0b 00 00 00 6e 6b 6e 6f 77 6e 20 54 79 70 65 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0358_5f5f_RIPCMD_5fREQUEST_0a.rel b/src/nos/lib/messages_lib/0358_5f5f_RIPCMD_5fREQUEST_0a.rel new file mode 100644 index 00000000..fe0cda94 --- /dev/null +++ b/src/nos/lib/messages_lib/0358_5f5f_RIPCMD_5fREQUEST_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0358_5f5f_RIPCMD_5fREQUEST_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 52 49 50 43 4d 44 5f 52 45 +R 00 00 01 00 +T 0b 00 00 00 51 55 45 53 54 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0359_07f6_RIPCMD_5fRESPONSE_2.rel b/src/nos/lib/messages_lib/0359_07f6_RIPCMD_5fRESPONSE_2.rel new file mode 100644 index 00000000..766d5d9a --- /dev/null +++ b/src/nos/lib/messages_lib/0359_07f6_RIPCMD_5fRESPONSE_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0359_07f6_RIPCMD_5fRESPONSE_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 52 49 50 43 4d 44 5f 52 45 +R 00 00 01 00 +T 0b 00 00 00 53 50 4f 4e 53 45 20 66 72 6f 6d +R 00 00 01 00 +T 16 00 00 00 20 25 73 20 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/035a_eb71_RIP_5frx_3a_20Not_2.rel b/src/nos/lib/messages_lib/035a_eb71_RIP_5frx_3a_20Not_2.rel new file mode 100644 index 00000000..ef7b9722 --- /dev/null +++ b/src/nos/lib/messages_lib/035a_eb71_RIP_5frx_3a_20Not_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___035a_eb71_RIP_5frx_3a_20Not_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 52 49 50 5f 72 78 3a 20 4e +R 00 00 01 00 +T 0b 00 00 00 6f 74 20 61 6e 20 49 50 20 52 49 +R 00 00 01 00 +T 16 00 00 00 50 20 70 61 63 6b 65 74 20 21 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/035b_86e6_RMD_20_25s.rel b/src/nos/lib/messages_lib/035b_86e6_RMD_20_25s.rel new file mode 100644 index 00000000..39371eb8 --- /dev/null +++ b/src/nos/lib/messages_lib/035b_86e6_RMD_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___035b_86e6_RMD_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 52 4d 44 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/035c_8005_Range_20for_20inter.rel b/src/nos/lib/messages_lib/035c_8005_Range_20for_20inter.rel new file mode 100644 index 00000000..30c79104 --- /dev/null +++ b/src/nos/lib/messages_lib/035c_8005_Range_20for_20inter.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27 flags 0 +S ___035c_8005_Range_20for_20inter Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 25 00 52 61 6e 67 65 20 66 6f 72 +R 00 00 01 00 +T 0b 00 00 00 20 69 6e 74 65 72 66 61 63 65 20 +R 00 00 01 00 +T 16 00 00 00 27 25 73 27 20 6e 6f 74 20 66 6f +R 00 00 01 00 +T 21 00 00 00 75 6e 64 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/035d_1ee5_Reassembly_20fragme.rel b/src/nos/lib/messages_lib/035d_1ee5_Reassembly_20fragme.rel new file mode 100644 index 00000000..2ae3b62b --- /dev/null +++ b/src/nos/lib/messages_lib/035d_1ee5_Reassembly_20fragme.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___035d_1ee5_Reassembly_20fragme Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 52 65 61 73 73 65 6d 62 6c +R 00 00 01 00 +T 0b 00 00 00 79 20 66 72 61 67 6d 65 6e 74 73 +R 00 00 01 00 +T 16 00 00 00 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/035e_fbe9_Reassembly_20queue_.rel b/src/nos/lib/messages_lib/035e_fbe9_Reassembly_20queue_.rel new file mode 100644 index 00000000..d4abe483 --- /dev/null +++ b/src/nos/lib/messages_lib/035e_fbe9_Reassembly_20queue_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___035e_fbe9_Reassembly_20queue_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 52 65 61 73 73 65 6d 62 6c +R 00 00 01 00 +T 0b 00 00 00 79 20 71 75 65 75 65 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/035f_5eb3_Received_3a_20.rel b/src/nos/lib/messages_lib/035f_5eb3_Received_3a_20.rel new file mode 100644 index 00000000..e3b31295 --- /dev/null +++ b/src/nos/lib/messages_lib/035f_5eb3_Received_3a_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___035f_5eb3_Received_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 52 65 63 65 69 76 65 64 3a +R 00 00 01 00 +T 0b 00 00 00 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0360_9fbc_Recording_20into_20.rel b/src/nos/lib/messages_lib/0360_9fbc_Recording_20into_20.rel new file mode 100644 index 00000000..27236af7 --- /dev/null +++ b/src/nos/lib/messages_lib/0360_9fbc_Recording_20into_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0360_9fbc_Recording_20into_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 52 65 63 6f 72 64 69 6e 67 +R 00 00 01 00 +T 0b 00 00 00 20 69 6e 74 6f 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0361_aa80_Recording_20off_0a.rel b/src/nos/lib/messages_lib/0361_aa80_Recording_20off_0a.rel new file mode 100644 index 00000000..a18622c7 --- /dev/null +++ b/src/nos/lib/messages_lib/0361_aa80_Recording_20off_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0361_aa80_Recording_20off_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 52 65 63 6f 72 64 69 6e 67 +R 00 00 01 00 +T 0b 00 00 00 20 6f 66 66 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0362_2a15_Recv_3a_20_20_20_20.rel b/src/nos/lib/messages_lib/0362_2a15_Recv_3a_20_20_20_20.rel new file mode 100644 index 00000000..3adf1618 --- /dev/null +++ b/src/nos/lib/messages_lib/0362_2a15_Recv_3a_20_20_20_20.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3e flags 0 +S ___0362_2a15_Recv_3a_20_20_20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 3c 00 52 65 63 76 3a 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 20 20 20 20 25 30 38 6c 78 +R 00 00 01 00 +T 16 00 00 00 25 37 6c 75 20 20 20 20 20 20 20 +R 00 00 01 00 +T 21 00 00 00 20 20 20 20 20 25 36 6c 75 20 20 +R 00 00 01 00 +T 2c 00 00 00 20 20 20 25 36 6c 75 25 39 6c 75 +R 00 00 01 00 +T 37 00 00 00 25 31 31 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0363_d0ff_Refuse_0a.rel b/src/nos/lib/messages_lib/0363_d0ff_Refuse_0a.rel new file mode 100644 index 00000000..862e8325 --- /dev/null +++ b/src/nos/lib/messages_lib/0363_d0ff_Refuse_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0363_d0ff_Refuse_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 52 65 66 75 73 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0364_42c0_Refusing_20announce.rel b/src/nos/lib/messages_lib/0364_42c0_Refusing_20announce.rel new file mode 100644 index 00000000..f8ad9ccc --- /dev/null +++ b/src/nos/lib/messages_lib/0364_42c0_Refusing_20announce.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29 flags 0 +S ___0364_42c0_Refusing_20announce Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 27 00 52 65 66 75 73 69 6e 67 20 +R 00 00 01 00 +T 0b 00 00 00 61 6e 6e 6f 75 6e 63 65 6d 65 6e +R 00 00 01 00 +T 16 00 00 00 74 73 20 66 72 6f 6d 20 67 61 74 +R 00 00 01 00 +T 21 00 00 00 65 77 61 79 73 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0365_6bd1_Requesting_2e_2e_2e.rel b/src/nos/lib/messages_lib/0365_6bd1_Requesting_2e_2e_2e.rel new file mode 100644 index 00000000..a222891e --- /dev/null +++ b/src/nos/lib/messages_lib/0365_6bd1_Requesting_2e_2e_2e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0365_6bd1_Requesting_2e_2e_2e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 52 65 71 75 65 73 74 69 6e +R 00 00 01 00 +T 0b 00 00 00 67 2e 2e 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0366_4784_Resolver_20_25s_20u.rel b/src/nos/lib/messages_lib/0366_4784_Resolver_20_25s_20u.rel new file mode 100644 index 00000000..1b04d9b0 --- /dev/null +++ b/src/nos/lib/messages_lib/0366_4784_Resolver_20_25s_20u.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0366_4784_Resolver_20_25s_20u Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 52 65 73 6f 6c 76 65 72 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 20 75 6e 6b 6e 6f 77 6e 0a +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0367_ae52_Resolving_20_25s_2e.rel b/src/nos/lib/messages_lib/0367_ae52_Resolving_20_25s_2e.rel new file mode 100644 index 00000000..334ef756 --- /dev/null +++ b/src/nos/lib/messages_lib/0367_ae52_Resolving_20_25s_2e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0367_ae52_Resolving_20_25s_2e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 52 65 73 6f 6c 76 69 6e 67 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 2e 2e 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0368_200a_Resolving_20_25s_2e.rel b/src/nos/lib/messages_lib/0368_200a_Resolving_20_25s_2e.rel new file mode 100644 index 00000000..8d109250 --- /dev/null +++ b/src/nos/lib/messages_lib/0368_200a_Resolving_20_25s_2e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0368_200a_Resolving_20_25s_2e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 52 65 73 6f 6c 76 69 6e 67 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 2e 2e 2e 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0369_cacc_Retry_20limit.rel b/src/nos/lib/messages_lib/0369_cacc_Retry_20limit.rel new file mode 100644 index 00000000..59860e7e --- /dev/null +++ b/src/nos/lib/messages_lib/0369_cacc_Retry_20limit.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0369_cacc_Retry_20limit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 52 65 74 72 79 20 6c 69 6d +R 00 00 01 00 +T 0b 00 00 00 69 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/036a_0cd3_Returned_20.rel b/src/nos/lib/messages_lib/036a_0cd3_Returned_20.rel new file mode 100644 index 00000000..6d7c3ffe --- /dev/null +++ b/src/nos/lib/messages_lib/036a_0cd3_Returned_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___036a_0cd3_Returned_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 52 65 74 75 72 6e 65 64 20 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/036b_85af_Route_20add_20faile.rel b/src/nos/lib/messages_lib/036b_85af_Route_20add_20faile.rel new file mode 100644 index 00000000..54314a0f --- /dev/null +++ b/src/nos/lib/messages_lib/036b_85af_Route_20add_20faile.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___036b_85af_Route_20add_20faile Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 52 6f 75 74 65 20 61 64 64 +R 00 00 01 00 +T 0b 00 00 00 20 66 61 69 6c 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/036c_9b70_Routing_20lookups_3.rel b/src/nos/lib/messages_lib/036c_9b70_Routing_20lookups_3.rel new file mode 100644 index 00000000..ff709fd6 --- /dev/null +++ b/src/nos/lib/messages_lib/036c_9b70_Routing_20lookups_3.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S ___036c_9b70_Routing_20lookups_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2e 00 52 6f 75 74 69 6e 67 20 6c +R 00 00 01 00 +T 0b 00 00 00 6f 6f 6b 75 70 73 3a 20 25 6c 75 +R 00 00 01 00 +T 16 00 00 00 2c 20 63 61 63 68 65 20 68 69 74 +R 00 00 01 00 +T 21 00 00 00 73 20 25 6c 75 20 28 25 6c 75 25 +R 00 00 01 00 +T 2c 00 00 00 25 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/036d_9c01_Rxints_20_20_2d_20_.rel b/src/nos/lib/messages_lib/036d_9c01_Rxints_20_20_2d_20_.rel new file mode 100644 index 00000000..2a80c578 --- /dev/null +++ b/src/nos/lib/messages_lib/036d_9c01_Rxints_20_20_2d_20_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___036d_9c01_Rxints_20_20_2d_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 00 52 78 69 6e 74 73 20 20 2d +R 00 00 01 00 +T 0b 00 00 00 20 25 38 6c 64 20 20 54 78 69 6e +R 00 00 01 00 +T 16 00 00 00 74 73 20 20 2d 20 25 38 6c 64 20 +R 00 00 01 00 +T 21 00 00 00 20 45 78 69 6e 74 73 20 20 2d 20 +R 00 00 01 00 +T 2c 00 00 00 25 38 6c 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/036e_ccf6_S_20_20_20_20_20Job.rel b/src/nos/lib/messages_lib/036e_ccf6_S_20_20_20_20_20Job.rel new file mode 100644 index 00000000..3e6c8c95 --- /dev/null +++ b/src/nos/lib/messages_lib/036e_ccf6_S_20_20_20_20_20Job.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3b flags 0 +S ___036e_ccf6_S_20_20_20_20_20Job Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 39 00 53 20 20 20 20 20 4a 6f 62 +R 00 00 01 00 +T 0b 00 00 00 20 20 20 20 53 69 7a 65 20 44 61 +R 00 00 01 00 +T 16 00 00 00 74 65 20 20 54 69 6d 65 20 20 48 +R 00 00 01 00 +T 21 00 00 00 6f 73 74 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 2c 00 00 00 20 20 20 20 20 20 20 20 20 46 72 +R 00 00 01 00 +T 37 00 00 00 6f 6d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/036f_df6d_S_20command_20synta.rel b/src/nos/lib/messages_lib/036f_df6d_S_20command_20synta.rel new file mode 100644 index 00000000..fe9638a5 --- /dev/null +++ b/src/nos/lib/messages_lib/036f_df6d_S_20command_20synta.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27 flags 0 +S ___036f_df6d_S_20command_20synta Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 25 00 53 20 63 6f 6d 6d 61 6e 64 +R 00 00 01 00 +T 0b 00 00 00 20 73 79 6e 74 61 78 20 65 72 72 +R 00 00 01 00 +T 16 00 00 00 6f 72 20 2d 20 66 6f 72 6d 61 74 +R 00 00 01 00 +T 21 00 00 00 20 69 73 3a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0370_4fbb_S_23_20_20_20Type_2.rel b/src/nos/lib/messages_lib/0370_4fbb_S_23_20_20_20Type_2.rel new file mode 100644 index 00000000..23a185c4 --- /dev/null +++ b/src/nos/lib/messages_lib/0370_4fbb_S_23_20_20_20Type_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36 flags 0 +S ___0370_4fbb_S_23_20_20_20Type_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 34 00 53 23 20 20 20 54 79 70 65 +R 00 00 01 00 +T 0b 00 00 00 20 20 20 20 50 43 42 20 20 20 20 +R 00 00 01 00 +T 16 00 00 00 20 20 20 52 65 6d 6f 74 65 20 73 +R 00 00 01 00 +T 21 00 00 00 6f 63 6b 65 74 20 20 20 20 20 20 +R 00 00 01 00 +T 2c 00 00 00 20 20 20 4f 77 6e 65 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0371_bf54_SMTP_20_25s_20Conne.rel b/src/nos/lib/messages_lib/0371_bf54_SMTP_20_25s_20Conne.rel new file mode 100644 index 00000000..02436d17 --- /dev/null +++ b/src/nos/lib/messages_lib/0371_bf54_SMTP_20_25s_20Conne.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___0371_bf54_SMTP_20_25s_20Conne Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 53 4d 54 50 20 25 73 20 43 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 6e 65 63 74 20 66 61 69 6c +R 00 00 01 00 +T 16 00 00 00 65 64 3a 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0372_cbb7_SMTP_20batching.rel b/src/nos/lib/messages_lib/0372_cbb7_SMTP_20batching.rel new file mode 100644 index 00000000..fa6577fd --- /dev/null +++ b/src/nos/lib/messages_lib/0372_cbb7_SMTP_20batching.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0372_cbb7_SMTP_20batching Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 53 4d 54 50 20 62 61 74 63 +R 00 00 01 00 +T 0b 00 00 00 68 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0373_e45f_SMTP_20client_20Try.rel b/src/nos/lib/messages_lib/0373_e45f_SMTP_20client_20Try.rel new file mode 100644 index 00000000..fb733e17 --- /dev/null +++ b/src/nos/lib/messages_lib/0373_e45f_SMTP_20client_20Try.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0373_e45f_SMTP_20client_20Try Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 53 4d 54 50 20 63 6c 69 65 +R 00 00 01 00 +T 0b 00 00 00 6e 74 20 54 72 79 69 6e 67 2e 2e +R 00 00 01 00 +T 16 00 00 00 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0374_797a_SMTP_20sent_20job_2.rel b/src/nos/lib/messages_lib/0374_797a_SMTP_20sent_20job_2.rel new file mode 100644 index 00000000..1d4b753e --- /dev/null +++ b/src/nos/lib/messages_lib/0374_797a_SMTP_20sent_20job_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___0374_797a_SMTP_20sent_20job_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 53 4d 54 50 20 73 65 6e 74 +R 00 00 01 00 +T 0b 00 00 00 20 6a 6f 62 20 25 73 20 54 6f 3a +R 00 00 01 00 +T 16 00 00 00 20 25 73 20 46 72 6f 6d 3a 20 25 +R 00 00 01 00 +T 21 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0375_68b2_SMTP_20tracing.rel b/src/nos/lib/messages_lib/0375_68b2_SMTP_20tracing.rel new file mode 100644 index 00000000..d3fa767f --- /dev/null +++ b/src/nos/lib/messages_lib/0375_68b2_SMTP_20tracing.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0375_68b2_SMTP_20tracing Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 53 4d 54 50 20 74 72 61 63 +R 00 00 01 00 +T 0b 00 00 00 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0376_e7a4_SP_20_3d_20_25p_2c_.rel b/src/nos/lib/messages_lib/0376_e7a4_SP_20_3d_20_25p_2c_.rel new file mode 100644 index 00000000..4d9fa6f5 --- /dev/null +++ b/src/nos/lib/messages_lib/0376_e7a4_SP_20_3d_20_25p_2c_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S ___0376_e7a4_SP_20_3d_20_25p_2c_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 24 00 53 50 20 3d 20 25 70 2c 20 +R 00 00 01 00 +T 0b 00 00 00 6c 65 67 61 6c 20 73 74 61 63 6b +R 00 00 01 00 +T 16 00 00 00 20 72 61 6e 67 65 20 5b 25 70 2c +R 00 00 01 00 +T 21 00 00 00 25 70 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0377_a1f1_STOR_20_25s.rel b/src/nos/lib/messages_lib/0377_a1f1_STOR_20_25s.rel new file mode 100644 index 00000000..8446d85d --- /dev/null +++ b/src/nos/lib/messages_lib/0377_a1f1_STOR_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0377_a1f1_STOR_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 53 54 4f 52 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0378_49fd_STOR_20_25s_0a.rel b/src/nos/lib/messages_lib/0378_49fd_STOR_20_25s_0a.rel new file mode 100644 index 00000000..adc15d87 --- /dev/null +++ b/src/nos/lib/messages_lib/0378_49fd_STOR_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0378_49fd_STOR_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 53 54 4f 52 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0379_38ea_STOR_20_25s_3a_20_2.rel b/src/nos/lib/messages_lib/0379_38ea_STOR_20_25s_3a_20_2.rel new file mode 100644 index 00000000..b45cdef3 --- /dev/null +++ b/src/nos/lib/messages_lib/0379_38ea_STOR_20_25s_3a_20_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2b flags 0 +S ___0379_38ea_STOR_20_25s_3a_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 29 00 53 54 4f 52 20 25 73 3a 20 +R 00 00 01 00 +T 0b 00 00 00 25 6c 75 20 62 79 74 65 73 20 69 +R 00 00 01 00 +T 16 00 00 00 6e 20 25 6c 75 20 73 65 63 20 28 +R 00 00 01 00 +T 21 00 00 00 25 6c 75 2f 73 65 63 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/037a_12cc_STOR_20_25s_3a_20Er.rel b/src/nos/lib/messages_lib/037a_12cc_STOR_20_25s_3a_20Er.rel new file mode 100644 index 00000000..327321f6 --- /dev/null +++ b/src/nos/lib/messages_lib/037a_12cc_STOR_20_25s_3a_20Er.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2d flags 0 +S ___037a_12cc_STOR_20_25s_3a_20Er Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2b 00 53 54 4f 52 20 25 73 3a 20 +R 00 00 01 00 +T 0b 00 00 00 45 72 72 6f 72 2f 61 62 6f 72 74 +R 00 00 01 00 +T 16 00 00 00 20 64 75 72 69 6e 67 20 64 61 74 +R 00 00 01 00 +T 21 00 00 00 61 20 74 72 61 6e 73 66 65 72 0a +R 00 00 01 00 +T 2c 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/037b_cfe9_SUBCMD_20_2d_20Don_.rel b/src/nos/lib/messages_lib/037b_cfe9_SUBCMD_20_2d_20Don_.rel new file mode 100644 index 00000000..16243f1a --- /dev/null +++ b/src/nos/lib/messages_lib/037b_cfe9_SUBCMD_20_2d_20Don_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___037b_cfe9_SUBCMD_20_2d_20Don_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 53 55 42 43 4d 44 20 2d 20 +R 00 00 01 00 +T 0b 00 00 00 44 6f 6e 27 74 20 6b 6e 6f 77 20 +R 00 00 01 00 +T 16 00 00 00 77 68 61 74 20 74 6f 20 64 6f 3f +R 00 00 01 00 +T 21 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/037c_0319_SYST_0a.rel b/src/nos/lib/messages_lib/037c_0319_SYST_0a.rel new file mode 100644 index 00000000..60dad2f6 --- /dev/null +++ b/src/nos/lib/messages_lib/037c_0319_SYST_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___037c_0319_SYST_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 53 59 53 54 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/037d_93fc_Same_0a.rel b/src/nos/lib/messages_lib/037d_93fc_Same_0a.rel new file mode 100644 index 00000000..f2d2dd64 --- /dev/null +++ b/src/nos/lib/messages_lib/037d_93fc_Same_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___037d_93fc_Same_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 53 61 6d 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/037e_3c55_Scroll_20file_20siz.rel b/src/nos/lib/messages_lib/037e_3c55_Scroll_20file_20siz.rel new file mode 100644 index 00000000..5f0359d1 --- /dev/null +++ b/src/nos/lib/messages_lib/037e_3c55_Scroll_20file_20siz.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___037e_3c55_Scroll_20file_20siz Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 53 63 72 6f 6c 6c 20 66 69 +R 00 00 01 00 +T 0b 00 00 00 6c 65 20 73 69 7a 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/037f_e255_Send_20file_2c_20_2.rel b/src/nos/lib/messages_lib/037f_e255_Send_20file_2c_20_2.rel new file mode 100644 index 00000000..280d0940 --- /dev/null +++ b/src/nos/lib/messages_lib/037f_e255_Send_20file_2c_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___037f_e255_Send_20file_2c_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 53 65 6e 64 20 66 69 6c 65 +R 00 00 01 00 +T 0b 00 00 00 2c 20 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0380_c1d8_Send_3a_20_2508lx_2.rel b/src/nos/lib/messages_lib/0380_c1d8_Send_3a_20_2508lx_2.rel new file mode 100644 index 00000000..9fd003fc --- /dev/null +++ b/src/nos/lib/messages_lib/0380_c1d8_Send_3a_20_2508lx_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36 flags 0 +S ___0380_c1d8_Send_3a_20_2508lx_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 34 00 53 65 6e 64 3a 20 25 30 38 +R 00 00 01 00 +T 0b 00 00 00 6c 78 20 25 30 38 6c 78 25 37 6c +R 00 00 01 00 +T 16 00 00 00 75 25 36 6c 75 25 36 6c 75 25 36 +R 00 00 01 00 +T 21 00 00 00 6c 75 25 35 6c 75 25 36 6c 75 25 +R 00 00 01 00 +T 2c 00 00 00 39 6c 75 25 31 31 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0381_afab_Server_20address_20.rel b/src/nos/lib/messages_lib/0381_afab_Server_20address_20.rel new file mode 100644 index 00000000..b7b2f73a --- /dev/null +++ b/src/nos/lib/messages_lib/0381_afab_Server_20address_20.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 46 flags 0 +S ___0381_afab_Server_20address_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 44 00 53 65 72 76 65 72 20 61 64 +R 00 00 01 00 +T 0b 00 00 00 64 72 65 73 73 20 20 20 20 20 20 +R 00 00 01 00 +T 16 00 00 00 20 20 20 20 73 72 74 74 20 20 20 +R 00 00 01 00 +T 21 00 00 00 20 6d 64 65 76 20 20 20 74 69 6d +R 00 00 01 00 +T 2c 00 00 00 65 6f 75 74 20 20 20 71 75 65 72 +R 00 00 01 00 +T 37 00 00 00 69 65 73 20 72 65 73 70 6f 6e 73 +R 00 00 01 00 +T 42 00 00 00 65 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0382_36ef_Session_20_25s_20no.rel b/src/nos/lib/messages_lib/0382_36ef_Session_20_25s_20no.rel new file mode 100644 index 00000000..40e74928 --- /dev/null +++ b/src/nos/lib/messages_lib/0382_36ef_Session_20_25s_20no.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0382_36ef_Session_20_25s_20no Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 53 65 73 73 69 6f 6e 20 25 +R 00 00 01 00 +T 0b 00 00 00 73 20 6e 6f 74 20 61 63 74 69 76 +R 00 00 01 00 +T 16 00 00 00 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0383_0845_Slot_20time_3a_20_2.rel b/src/nos/lib/messages_lib/0383_0845_Slot_20time_3a_20_2.rel new file mode 100644 index 00000000..f744cf3a --- /dev/null +++ b/src/nos/lib/messages_lib/0383_0845_Slot_20time_3a_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0383_0845_Slot_20time_3a_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 53 6c 6f 74 20 74 69 6d 65 +R 00 00 01 00 +T 0b 00 00 00 3a 20 25 6c 75 20 6d 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0384_6556_Socket_20not_20in_2.rel b/src/nos/lib/messages_lib/0384_6556_Socket_20not_20in_2.rel new file mode 100644 index 00000000..eb75f741 --- /dev/null +++ b/src/nos/lib/messages_lib/0384_6556_Socket_20not_20in_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0384_6556_Socket_20not_20in_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 53 6f 63 6b 65 74 20 6e 6f +R 00 00 01 00 +T 0b 00 00 00 74 20 69 6e 20 75 73 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0385_a061_Sorry_20_2d_20the_2.rel b/src/nos/lib/messages_lib/0385_a061_Sorry_20_2d_20the_2.rel new file mode 100644 index 00000000..bade0bd2 --- /dev/null +++ b/src/nos/lib/messages_lib/0385_a061_Sorry_20_2d_20the_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___0385_a061_Sorry_20_2d_20the_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 53 6f 72 72 79 20 2d 20 74 +R 00 00 01 00 +T 0b 00 00 00 68 65 20 73 79 73 74 65 6d 20 69 +R 00 00 01 00 +T 16 00 00 00 73 20 75 6e 61 74 74 65 6e 64 65 +R 00 00 01 00 +T 21 00 00 00 64 2e 30 30 37 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0386_8034_Stack_20violation_2.rel b/src/nos/lib/messages_lib/0386_8034_Stack_20violation_2.rel new file mode 100644 index 00000000..128c23d5 --- /dev/null +++ b/src/nos/lib/messages_lib/0386_8034_Stack_20violation_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0386_8034_Stack_20violation_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 53 74 61 63 6b 20 76 69 6f +R 00 00 01 00 +T 0b 00 00 00 6c 61 74 69 6f 6e 2c 20 70 72 6f +R 00 00 01 00 +T 16 00 00 00 63 65 73 73 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0387_6414_Station_20_20_20Las.rel b/src/nos/lib/messages_lib/0387_6414_Station_20_20_20Las.rel new file mode 100644 index 00000000..af4da483 --- /dev/null +++ b/src/nos/lib/messages_lib/0387_6414_Station_20_20_20Las.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27 flags 0 +S ___0387_6414_Station_20_20_20Las Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 25 00 53 74 61 74 69 6f 6e 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 4c 61 73 74 20 68 65 61 72 64 +R 00 00 01 00 +T 16 00 00 00 20 20 20 20 20 20 20 20 20 20 20 +R 00 00 01 00 +T 21 00 00 00 50 6b 74 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0388_5bef_Station_20_20_20Las.rel b/src/nos/lib/messages_lib/0388_5bef_Station_20_20_20Las.rel new file mode 100644 index 00000000..89d6803d --- /dev/null +++ b/src/nos/lib/messages_lib/0388_5bef_Station_20_20_20Las.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 38 flags 0 +S ___0388_5bef_Station_20_20_20Las Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 36 00 53 74 61 74 69 6f 6e 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 4c 61 73 74 20 72 65 66 20 20 +R 00 00 01 00 +T 16 00 00 00 20 20 20 20 20 20 20 4c 61 73 74 +R 00 00 01 00 +T 21 00 00 00 20 68 65 61 72 64 20 20 20 20 20 +R 00 00 01 00 +T 2c 00 00 00 20 20 20 20 20 20 50 6b 74 73 0a +R 00 00 01 00 +T 37 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0389_9aef_Subject_3a_20_25s_0.rel b/src/nos/lib/messages_lib/0389_9aef_Subject_3a_20_25s_0.rel new file mode 100644 index 00000000..34664b2e --- /dev/null +++ b/src/nos/lib/messages_lib/0389_9aef_Subject_3a_20_25s_0.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0389_9aef_Subject_3a_20_25s_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 53 75 62 6a 65 63 74 3a 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/038a_0cac_System_20is_20overl.rel b/src/nos/lib/messages_lib/038a_0cac_System_20is_20overl.rel new file mode 100644 index 00000000..f97f7fc8 --- /dev/null +++ b/src/nos/lib/messages_lib/038a_0cac_System_20is_20overl.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29 flags 0 +S ___038a_0cac_System_20is_20overl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 27 00 53 79 73 74 65 6d 20 69 73 +R 00 00 01 00 +T 0b 00 00 00 20 6f 76 65 72 6c 6f 61 64 65 64 +R 00 00 01 00 +T 16 00 00 00 3b 20 74 72 79 20 61 67 61 69 6e +R 00 00 01 00 +T 21 00 00 00 20 6c 61 74 65 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/038b_63e9_T_20hostname.rel b/src/nos/lib/messages_lib/038b_63e9_T_20hostname.rel new file mode 100644 index 00000000..17f86842 --- /dev/null +++ b/src/nos/lib/messages_lib/038b_63e9_T_20hostname.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___038b_63e9_T_20hostname Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 54 20 68 6f 73 74 6e 61 6d +R 00 00 01 00 +T 0b 00 00 00 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/038c_1279_T1_3a_20.rel b/src/nos/lib/messages_lib/038c_1279_T1_3a_20.rel new file mode 100644 index 00000000..910c87c6 --- /dev/null +++ b/src/nos/lib/messages_lib/038c_1279_T1_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___038c_1279_T1_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 54 31 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/038d_a7c1_T3_3a_20.rel b/src/nos/lib/messages_lib/038d_a7c1_T3_3a_20.rel new file mode 100644 index 00000000..b82f8115 --- /dev/null +++ b/src/nos/lib/messages_lib/038d_a7c1_T3_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___038d_a7c1_T3_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 54 33 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/038e_e4a1_TACK_3a_20.rel b/src/nos/lib/messages_lib/038e_e4a1_TACK_3a_20.rel new file mode 100644 index 00000000..9c16b0ff --- /dev/null +++ b/src/nos/lib/messages_lib/038e_e4a1_TACK_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___038e_e4a1_TACK_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 54 41 43 4b 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/038f_7f7b_TCB_20_25p_20_25s_2.rel b/src/nos/lib/messages_lib/038f_7f7b_TCB_20_25p_20_25s_2.rel new file mode 100644 index 00000000..3a9ae96b --- /dev/null +++ b/src/nos/lib/messages_lib/038f_7f7b_TCB_20_25p_20_25s_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___038f_7f7b_TCB_20_25p_20_25s_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 54 43 42 20 25 70 20 25 73 +R 00 00 01 00 +T 0b 00 00 00 20 2d 3e 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0390_5447_TCD_3a_20.rel b/src/nos/lib/messages_lib/0390_5447_TCD_3a_20.rel new file mode 100644 index 00000000..adf8e279 --- /dev/null +++ b/src/nos/lib/messages_lib/0390_5447_TCD_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0390_5447_TCD_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 54 43 44 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0391_fa23_TCP_20MSS.rel b/src/nos/lib/messages_lib/0391_fa23_TCP_20MSS.rel new file mode 100644 index 00000000..21a08b71 --- /dev/null +++ b/src/nos/lib/messages_lib/0391_fa23_TCP_20MSS.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0391_fa23_TCP_20MSS Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 54 43 50 20 4d 53 53 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0392_70e7_TCP_20default_20irt.rel b/src/nos/lib/messages_lib/0392_70e7_TCP_20default_20irt.rel new file mode 100644 index 00000000..4e255079 --- /dev/null +++ b/src/nos/lib/messages_lib/0392_70e7_TCP_20default_20irt.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0392_70e7_TCP_20default_20irt Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 54 43 50 20 64 65 66 61 75 +R 00 00 01 00 +T 0b 00 00 00 6c 74 20 69 72 74 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0393_5ac7_TCP_20header_20comp.rel b/src/nos/lib/messages_lib/0393_5ac7_TCP_20header_20comp.rel new file mode 100644 index 00000000..0811e563 --- /dev/null +++ b/src/nos/lib/messages_lib/0393_5ac7_TCP_20header_20comp.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 42 flags 0 +S ___0393_5ac7_TCP_20header_20comp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 40 00 54 43 50 20 68 65 61 64 65 +R 00 00 01 00 +T 0b 00 00 00 72 20 63 6f 6d 70 72 65 73 73 69 +R 00 00 01 00 +T 16 00 00 00 6f 6e 20 65 6e 61 62 6c 65 64 3b +R 00 00 01 00 +T 21 00 00 00 20 53 6c 6f 74 73 20 3d 20 25 64 +R 00 00 01 00 +T 2c 00 00 00 2c 20 73 6c 6f 74 20 63 6f 6d 70 +R 00 00 01 00 +T 37 00 00 00 72 65 73 73 20 3d 20 25 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0394_c668_TCP_20state_20traci.rel b/src/nos/lib/messages_lib/0394_c668_TCP_20state_20traci.rel new file mode 100644 index 00000000..54772001 --- /dev/null +++ b/src/nos/lib/messages_lib/0394_c668_TCP_20state_20traci.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___0394_c668_TCP_20state_20traci Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 54 43 50 20 73 74 61 74 65 +R 00 00 01 00 +T 0b 00 00 00 20 74 72 61 63 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0395_b0d7_TCP_20syn_2bdata_20.rel b/src/nos/lib/messages_lib/0395_b0d7_TCP_20syn_2bdata_20.rel new file mode 100644 index 00000000..04cdb699 --- /dev/null +++ b/src/nos/lib/messages_lib/0395_b0d7_TCP_20syn_2bdata_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0395_b0d7_TCP_20syn_2bdata_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 54 43 50 20 73 79 6e 2b 64 +R 00 00 01 00 +T 0b 00 00 00 61 74 61 20 70 69 67 67 79 62 61 +R 00 00 01 00 +T 16 00 00 00 63 6b 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0396_43bd_TCP_20timestamps.rel b/src/nos/lib/messages_lib/0396_43bd_TCP_20timestamps.rel new file mode 100644 index 00000000..175a63d0 --- /dev/null +++ b/src/nos/lib/messages_lib/0396_43bd_TCP_20timestamps.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0396_43bd_TCP_20timestamps Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 54 43 50 20 74 69 6d 65 73 +R 00 00 01 00 +T 0b 00 00 00 74 61 6d 70 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0397_5b74_TCP_20window.rel b/src/nos/lib/messages_lib/0397_5b74_TCP_20window.rel new file mode 100644 index 00000000..21bdfb88 --- /dev/null +++ b/src/nos/lib/messages_lib/0397_5b74_TCP_20window.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0397_5b74_TCP_20window Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 54 43 50 20 77 69 6e 64 6f +R 00 00 01 00 +T 0b 00 00 00 77 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0398_7267_TCP_3a_20_25u_2d_3e.rel b/src/nos/lib/messages_lib/0398_7267_TCP_3a_20_25u_2d_3e.rel new file mode 100644 index 00000000..26a3ae18 --- /dev/null +++ b/src/nos/lib/messages_lib/0398_7267_TCP_3a_20_25u_2d_3e.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0398_7267_TCP_3a_20_25u_2d_3e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 54 43 50 3a 20 25 75 2d 3e +R 00 00 01 00 +T 0b 00 00 00 25 75 20 53 65 71 20 78 25 6c 78 +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0399_59c4_TChoke_3a_20.rel b/src/nos/lib/messages_lib/0399_59c4_TChoke_3a_20.rel new file mode 100644 index 00000000..7130fa90 --- /dev/null +++ b/src/nos/lib/messages_lib/0399_59c4_TChoke_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0399_59c4_TChoke_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 54 43 68 6f 6b 65 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/039a_2ced_TX_20Delay_3a_20_25.rel b/src/nos/lib/messages_lib/039a_2ced_TX_20Delay_3a_20_25.rel new file mode 100644 index 00000000..3e694319 --- /dev/null +++ b/src/nos/lib/messages_lib/039a_2ced_TX_20Delay_3a_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___039a_2ced_TX_20Delay_3a_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 54 58 20 44 65 6c 61 79 3a +R 00 00 01 00 +T 0b 00 00 00 20 25 6c 75 20 6d 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/039b_6a23_TX_20Tail_20time_3a.rel b/src/nos/lib/messages_lib/039b_6a23_TX_20Tail_20time_3a.rel new file mode 100644 index 00000000..69ee26a1 --- /dev/null +++ b/src/nos/lib/messages_lib/039b_6a23_TX_20Tail_20time_3a.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___039b_6a23_TX_20Tail_20time_3a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 54 58 20 54 61 69 6c 20 74 +R 00 00 01 00 +T 0b 00 00 00 69 6d 65 3a 20 25 6c 75 20 6d 73 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/039c_d175_TX_20queue_20limit.rel b/src/nos/lib/messages_lib/039c_d175_TX_20queue_20limit.rel new file mode 100644 index 00000000..329ffcb8 --- /dev/null +++ b/src/nos/lib/messages_lib/039c_d175_TX_20queue_20limit.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___039c_d175_TX_20queue_20limit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 54 58 20 71 75 65 75 65 20 +R 00 00 01 00 +T 0b 00 00 00 6c 69 6d 69 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/039d_f579_TYPE_20A_0a.rel b/src/nos/lib/messages_lib/039d_f579_TYPE_20A_0a.rel new file mode 100644 index 00000000..8f0e570a --- /dev/null +++ b/src/nos/lib/messages_lib/039d_f579_TYPE_20A_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___039d_f579_TYPE_20A_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 54 59 50 45 20 41 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/039e_3bb9_TYPE_20I_0a.rel b/src/nos/lib/messages_lib/039e_3bb9_TYPE_20I_0a.rel new file mode 100644 index 00000000..b1de9ab4 --- /dev/null +++ b/src/nos/lib/messages_lib/039e_3bb9_TYPE_20I_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___039e_3bb9_TYPE_20I_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 54 59 50 45 20 49 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/039f_a616_TYPE_20L_20_25d_0a.rel b/src/nos/lib/messages_lib/039f_a616_TYPE_20L_20_25d_0a.rel new file mode 100644 index 00000000..c827a3ea --- /dev/null +++ b/src/nos/lib/messages_lib/039f_a616_TYPE_20L_20_25d_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___039f_a616_TYPE_20L_20_25d_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 54 59 50 45 20 4c 20 25 64 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03a0_f6fb_Target_20_20_20_20T.rel b/src/nos/lib/messages_lib/03a0_f6fb_Target_20_20_20_20T.rel new file mode 100644 index 00000000..12782c92 --- /dev/null +++ b/src/nos/lib/messages_lib/03a0_f6fb_Target_20_20_20_20T.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___03a0_f6fb_Target_20_20_20_20T Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 54 61 72 67 65 74 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 54 79 70 65 20 20 20 44 69 67 +R 00 00 01 00 +T 16 00 00 00 69 70 65 61 74 65 72 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03a1_950b_Telnet_20option_20t.rel b/src/nos/lib/messages_lib/03a1_950b_Telnet_20option_20t.rel new file mode 100644 index 00000000..6b5687fa --- /dev/null +++ b/src/nos/lib/messages_lib/03a1_950b_Telnet_20option_20t.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___03a1_950b_Telnet_20option_20t Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 54 65 6c 6e 65 74 20 6f 70 +R 00 00 01 00 +T 0b 00 00 00 74 69 6f 6e 20 74 72 61 63 69 6e +R 00 00 01 00 +T 16 00 00 00 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03a2_4517_Thank_20you_20_25s_.rel b/src/nos/lib/messages_lib/03a2_4517_Thank_20you_20_25s_.rel new file mode 100644 index 00000000..43d7f082 --- /dev/null +++ b/src/nos/lib/messages_lib/03a2_4517_Thank_20you_20_25s_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 34 flags 0 +S ___03a2_4517_Thank_20you_20_25s_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 32 00 54 68 61 6e 6b 20 79 6f 75 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 2c 20 66 6f 72 20 63 61 +R 00 00 01 00 +T 16 00 00 00 6c 6c 69 6e 67 20 74 68 65 20 25 +R 00 00 01 00 +T 21 00 00 00 73 20 54 63 70 2f 49 70 20 4d 61 +R 00 00 01 00 +T 2c 00 00 00 69 6c 62 6f 78 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03a3_70f0_The_20escape_20char.rel b/src/nos/lib/messages_lib/03a3_70f0_The_20escape_20char.rel new file mode 100644 index 00000000..c28280be --- /dev/null +++ b/src/nos/lib/messages_lib/03a3_70f0_The_20escape_20char.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___03a3_70f0_The_20escape_20char Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 54 68 65 20 65 73 63 61 70 +R 00 00 01 00 +T 0b 00 00 00 65 20 63 68 61 72 61 63 74 65 72 +R 00 00 01 00 +T 16 00 00 00 20 69 73 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03a4_6de0_Time_20for_201000_2.rel b/src/nos/lib/messages_lib/03a4_6de0_Time_20for_201000_2.rel new file mode 100644 index 00000000..99b753f4 --- /dev/null +++ b/src/nos/lib/messages_lib/03a4_6de0_Time_20for_201000_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___03a4_6de0_Time_20for_201000_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 54 69 6d 65 20 66 6f 72 20 +R 00 00 01 00 +T 0b 00 00 00 31 30 30 30 20 31 30 32 34 2d 62 +R 00 00 01 00 +T 16 00 00 00 79 74 65 20 63 6f 70 69 65 73 3a +R 00 00 01 00 +T 21 00 00 00 20 25 6c 75 20 6d 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03a5_601a_Time_20to_20live.rel b/src/nos/lib/messages_lib/03a5_601a_Time_20to_20live.rel new file mode 100644 index 00000000..bdc663cb --- /dev/null +++ b/src/nos/lib/messages_lib/03a5_601a_Time_20to_20live.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___03a5_601a_Time_20to_20live Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 54 69 6d 65 20 74 6f 20 6c +R 00 00 01 00 +T 0b 00 00 00 69 76 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03a6_e505_Timeout_20value_20_.rel b/src/nos/lib/messages_lib/03a6_e505_Timeout_20value_20_.rel new file mode 100644 index 00000000..586c9509 --- /dev/null +++ b/src/nos/lib/messages_lib/03a6_e505_Timeout_20value_20_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___03a6_e505_Timeout_20value_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 54 69 6d 65 6f 75 74 20 76 +R 00 00 01 00 +T 0b 00 00 00 61 6c 75 65 20 25 73 20 28 25 64 +R 00 00 01 00 +T 16 00 00 00 29 20 6d 75 73 74 20 62 65 20 3e +R 00 00 01 00 +T 21 00 00 00 20 30 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03a7_1db3_Timer_20_20_20_20_2.rel b/src/nos/lib/messages_lib/03a7_1db3_Timer_20_20_20_20_2.rel new file mode 100644 index 00000000..8a418349 --- /dev/null +++ b/src/nos/lib/messages_lib/03a7_1db3_Timer_20_20_20_20_2.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 47 flags 0 +S ___03a7_1db3_Timer_20_20_20_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 45 00 54 69 6d 65 72 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 20 20 43 6f 75 6e 74 20 20 +R 00 00 01 00 +T 16 00 00 00 44 75 72 61 74 69 6f 6e 20 20 4c +R 00 00 01 00 +T 21 00 00 00 61 73 74 20 52 54 54 20 20 20 20 +R 00 00 01 00 +T 2c 00 00 00 20 20 53 52 54 54 20 20 20 20 20 +R 00 00 01 00 +T 37 00 00 00 20 4d 64 65 76 20 20 20 4d 65 74 +R 00 00 01 00 +T 42 00 00 00 68 6f 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03a8_d78a_Tip_20connection_20.rel b/src/nos/lib/messages_lib/03a8_d78a_Tip_20connection_20.rel new file mode 100644 index 00000000..8e68c425 --- /dev/null +++ b/src/nos/lib/messages_lib/03a8_d78a_Tip_20connection_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___03a8_d78a_Tip_20connection_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 54 69 70 20 63 6f 6e 6e 65 +R 00 00 01 00 +T 0b 00 00 00 63 74 69 6f 6e 20 74 69 6d 65 6f +R 00 00 01 00 +T 16 00 00 00 75 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03a9_c093_Tip_20session_20alr.rel b/src/nos/lib/messages_lib/03a9_c093_Tip_20session_20alr.rel new file mode 100644 index 00000000..99d3e5f9 --- /dev/null +++ b/src/nos/lib/messages_lib/03a9_c093_Tip_20session_20alr.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___03a9_c093_Tip_20session_20alr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 54 69 70 20 73 65 73 73 69 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 20 61 6c 72 65 61 64 79 20 +R 00 00 01 00 +T 16 00 00 00 61 63 74 69 76 65 20 6f 6e 20 25 +R 00 00 01 00 +T 21 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03aa_8c54_To_3a_20_25s_0a.rel b/src/nos/lib/messages_lib/03aa_8c54_To_3a_20_25s_0a.rel new file mode 100644 index 00000000..8e570c20 --- /dev/null +++ b/src/nos/lib/messages_lib/03aa_8c54_To_3a_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___03aa_8c54_To_3a_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 54 6f 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ab_2a55_Too_20many_20HAPN_2.rel b/src/nos/lib/messages_lib/03ab_2a55_Too_20many_20HAPN_2.rel new file mode 100644 index 00000000..e486e8b4 --- /dev/null +++ b/src/nos/lib/messages_lib/03ab_2a55_Too_20many_20HAPN_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___03ab_2a55_Too_20many_20HAPN_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 54 6f 6f 20 6d 61 6e 79 20 +R 00 00 01 00 +T 0b 00 00 00 48 41 50 4e 20 61 64 61 70 74 6f +R 00 00 01 00 +T 16 00 00 00 72 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ac_76b7_Too_20many_20asynch.rel b/src/nos/lib/messages_lib/03ac_76b7_Too_20many_20asynch.rel new file mode 100644 index 00000000..2124a004 --- /dev/null +++ b/src/nos/lib/messages_lib/03ac_76b7_Too_20many_20asynch.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___03ac_76b7_Too_20many_20asynch Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 54 6f 6f 20 6d 61 6e 79 20 +R 00 00 01 00 +T 0b 00 00 00 61 73 79 6e 63 68 20 63 6f 6e 74 +R 00 00 01 00 +T 16 00 00 00 72 6f 6c 6c 65 72 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ad_58f2_Too_20many_20digipe.rel b/src/nos/lib/messages_lib/03ad_58f2_Too_20many_20digipe.rel new file mode 100644 index 00000000..e1b09755 --- /dev/null +++ b/src/nos/lib/messages_lib/03ad_58f2_Too_20many_20digipe.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___03ad_58f2_Too_20many_20digipe Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 54 6f 6f 20 6d 61 6e 79 20 +R 00 00 01 00 +T 0b 00 00 00 64 69 67 69 70 65 61 74 65 72 73 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ae_2d53_Too_20many_20hs_20c.rel b/src/nos/lib/messages_lib/03ae_2d53_Too_20many_20hs_20c.rel new file mode 100644 index 00000000..3adc1bb4 --- /dev/null +++ b/src/nos/lib/messages_lib/03ae_2d53_Too_20many_20hs_20c.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___03ae_2d53_Too_20many_20hs_20c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 54 6f 6f 20 6d 61 6e 79 20 +R 00 00 01 00 +T 0b 00 00 00 68 73 20 63 6f 6e 74 72 6f 6c 6c +R 00 00 01 00 +T 16 00 00 00 65 72 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03af_286c_Too_20many_20mailbo.rel b/src/nos/lib/messages_lib/03af_286c_Too_20many_20mailbo.rel new file mode 100644 index 00000000..a6507c07 --- /dev/null +++ b/src/nos/lib/messages_lib/03af_286c_Too_20many_20mailbo.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___03af_286c_Too_20many_20mailbo Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 54 6f 6f 20 6d 61 6e 79 20 +R 00 00 01 00 +T 0b 00 00 00 6d 61 69 6c 62 6f 78 20 73 65 73 +R 00 00 01 00 +T 16 00 00 00 73 69 6f 6e 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03b0_4c9a_Too_20many_20nrs_20.rel b/src/nos/lib/messages_lib/03b0_4c9a_Too_20many_20nrs_20.rel new file mode 100644 index 00000000..6096f893 --- /dev/null +++ b/src/nos/lib/messages_lib/03b0_4c9a_Too_20many_20nrs_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___03b0_4c9a_Too_20many_20nrs_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 54 6f 6f 20 6d 61 6e 79 20 +R 00 00 01 00 +T 0b 00 00 00 6e 72 73 20 64 65 76 69 63 65 73 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03b1_7103_Too_20many_20packet.rel b/src/nos/lib/messages_lib/03b1_7103_Too_20many_20packet.rel new file mode 100644 index 00000000..8e62fa6c --- /dev/null +++ b/src/nos/lib/messages_lib/03b1_7103_Too_20many_20packet.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___03b1_7103_Too_20many_20packet Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 54 6f 6f 20 6d 61 6e 79 20 +R 00 00 01 00 +T 0b 00 00 00 70 61 63 6b 65 74 20 64 72 69 76 +R 00 00 01 00 +T 16 00 00 00 65 72 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03b2_d8c3_Too_20many_20pc100_.rel b/src/nos/lib/messages_lib/03b2_d8c3_Too_20many_20pc100_.rel new file mode 100644 index 00000000..fd28625c --- /dev/null +++ b/src/nos/lib/messages_lib/03b2_d8c3_Too_20many_20pc100_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___03b2_d8c3_Too_20many_20pc100_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 54 6f 6f 20 6d 61 6e 79 20 +R 00 00 01 00 +T 0b 00 00 00 70 63 31 30 30 20 63 6f 6e 74 72 +R 00 00 01 00 +T 16 00 00 00 6f 6c 6c 65 72 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03b3_2057_Too_20many_20sessio.rel b/src/nos/lib/messages_lib/03b3_2057_Too_20many_20sessio.rel new file mode 100644 index 00000000..c3b4e901 --- /dev/null +++ b/src/nos/lib/messages_lib/03b3_2057_Too_20many_20sessio.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___03b3_2057_Too_20many_20sessio Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 54 6f 6f 20 6d 61 6e 79 20 +R 00 00 01 00 +T 0b 00 00 00 73 65 73 73 69 6f 6e 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03b4_447c_Too_20many_20slip_2.rel b/src/nos/lib/messages_lib/03b4_447c_Too_20many_20slip_2.rel new file mode 100644 index 00000000..b4b69f92 --- /dev/null +++ b/src/nos/lib/messages_lib/03b4_447c_Too_20many_20slip_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___03b4_447c_Too_20many_20slip_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 54 6f 6f 20 6d 61 6e 79 20 +R 00 00 01 00 +T 0b 00 00 00 73 6c 69 70 20 64 65 76 69 63 65 +R 00 00 01 00 +T 16 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03b5_0d8c_Try_20to_20bounce_2.rel b/src/nos/lib/messages_lib/03b5_0d8c_Try_20to_20bounce_2.rel new file mode 100644 index 00000000..04caec77 --- /dev/null +++ b/src/nos/lib/messages_lib/03b5_0d8c_Try_20to_20bounce_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___03b5_0d8c_Try_20to_20bounce_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 54 72 79 20 74 6f 20 62 6f +R 00 00 01 00 +T 0b 00 00 00 75 6e 63 65 20 63 75 72 72 65 6e +R 00 00 01 00 +T 16 00 00 00 74 20 75 73 65 72 3f 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03b6_2030_Trying_20_25s_2e_2e.rel b/src/nos/lib/messages_lib/03b6_2030_Trying_20_25s_2e_2e.rel new file mode 100644 index 00000000..ead29880 --- /dev/null +++ b/src/nos/lib/messages_lib/03b6_2030_Trying_20_25s_2e_2e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___03b6_2030_Trying_20_25s_2e_2e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 54 72 79 69 6e 67 20 25 73 +R 00 00 01 00 +T 0b 00 00 00 2e 2e 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03b7_cee2_Trying_20_25s_2e_2e.rel b/src/nos/lib/messages_lib/03b7_cee2_Trying_20_25s_2e_2e.rel new file mode 100644 index 00000000..b2a6e552 --- /dev/null +++ b/src/nos/lib/messages_lib/03b7_cee2_Trying_20_25s_2e_2e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___03b7_cee2_Trying_20_25s_2e_2e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 54 72 79 69 6e 67 20 25 73 +R 00 00 01 00 +T 0b 00 00 00 2e 2e 2e 20 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03b8_be29_Trying_20Connection.rel b/src/nos/lib/messages_lib/03b8_be29_Trying_20Connection.rel new file mode 100644 index 00000000..becc7900 --- /dev/null +++ b/src/nos/lib/messages_lib/03b8_be29_Trying_20Connection.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___03b8_be29_Trying_20Connection Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 54 72 79 69 6e 67 20 43 6f +R 00 00 01 00 +T 0b 00 00 00 6e 6e 65 63 74 69 6f 6e 20 74 6f +R 00 00 01 00 +T 16 00 00 00 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03b9_9c56_Tstate_20_3d_20_25s.rel b/src/nos/lib/messages_lib/03b9_9c56_Tstate_20_3d_20_25s.rel new file mode 100644 index 00000000..4772ed29 --- /dev/null +++ b/src/nos/lib/messages_lib/03b9_9c56_Tstate_20_3d_20_25s.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___03b9_9c56_Tstate_20_3d_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 54 73 74 61 74 65 20 3d 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ba_6afe_Turn_20off_20local_.rel b/src/nos/lib/messages_lib/03ba_6afe_Turn_20off_20local_.rel new file mode 100644 index 00000000..316dbf20 --- /dev/null +++ b/src/nos/lib/messages_lib/03ba_6afe_Turn_20off_20local_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___03ba_6afe_Turn_20off_20local_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 54 75 72 6e 20 6f 66 66 20 +R 00 00 01 00 +T 0b 00 00 00 6c 6f 63 61 6c 20 65 63 68 6f 3f +R 00 00 01 00 +T 16 00 00 00 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03bb_c801_Tx_20state_20_20_25.rel b/src/nos/lib/messages_lib/03bb_c801_Tx_20state_20_20_25.rel new file mode 100644 index 00000000..ab80bd2f --- /dev/null +++ b/src/nos/lib/messages_lib/03bb_c801_Tx_20state_20_20_25.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___03bb_c801_Tx_20state_20_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 54 78 20 73 74 61 74 65 20 +R 00 00 01 00 +T 0b 00 00 00 20 25 38 64 20 20 52 78 20 73 74 +R 00 00 01 00 +T 16 00 00 00 61 74 65 20 20 25 38 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03bc_be1b_Tx_20state_20_20_25.rel b/src/nos/lib/messages_lib/03bc_be1b_Tx_20state_20_20_25.rel new file mode 100644 index 00000000..289ef3e7 --- /dev/null +++ b/src/nos/lib/messages_lib/03bc_be1b_Tx_20state_20_20_25.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___03bc_be1b_Tx_20state_20_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 54 78 20 73 74 61 74 65 20 +R 00 00 01 00 +T 0b 00 00 00 20 25 38 64 20 20 52 78 20 73 74 +R 00 00 01 00 +T 16 00 00 00 61 74 65 20 20 25 38 64 0a 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03bd_e1f6_TxBuffers_3a_20_20S.rel b/src/nos/lib/messages_lib/03bd_e1f6_TxBuffers_3a_20_20S.rel new file mode 100644 index 00000000..381a473c --- /dev/null +++ b/src/nos/lib/messages_lib/03bd_e1f6_TxBuffers_3a_20_20S.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27 flags 0 +S ___03bd_e1f6_TxBuffers_3a_20_20S Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 25 00 54 78 42 75 66 66 65 72 73 +R 00 00 01 00 +T 0b 00 00 00 3a 20 20 53 65 71 20 20 53 69 7a +R 00 00 01 00 +T 16 00 00 00 65 20 20 54 72 69 65 73 20 20 54 +R 00 00 01 00 +T 21 00 00 00 69 6d 65 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03be_5cfe_Txdefer_20_2d_20_25.rel b/src/nos/lib/messages_lib/03be_5cfe_Txdefer_20_2d_20_25.rel new file mode 100644 index 00000000..dc1aa504 --- /dev/null +++ b/src/nos/lib/messages_lib/03be_5cfe_Txdefer_20_2d_20_25.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___03be_5cfe_Txdefer_20_2d_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 00 54 78 64 65 66 65 72 20 2d +R 00 00 01 00 +T 0b 00 00 00 20 25 38 6c 64 20 20 54 78 70 70 +R 00 00 01 00 +T 16 00 00 00 65 72 73 20 2d 20 25 38 6c 64 20 +R 00 00 01 00 +T 21 00 00 00 20 4e 6f 6d 65 6d 20 20 20 2d 20 +R 00 00 01 00 +T 2c 00 00 00 25 38 6c 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03bf_e733_U_20filename.rel b/src/nos/lib/messages_lib/03bf_e733_U_20filename.rel new file mode 100644 index 00000000..1497074f --- /dev/null +++ b/src/nos/lib/messages_lib/03bf_e733_U_20filename.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___03bf_e733_U_20filename Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 55 20 66 69 6c 65 6e 61 6d +R 00 00 01 00 +T 0b 00 00 00 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03c0_9059_UDP_3a.rel b/src/nos/lib/messages_lib/03c0_9059_UDP_3a.rel new file mode 100644 index 00000000..823fa16b --- /dev/null +++ b/src/nos/lib/messages_lib/03c0_9059_UDP_3a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___03c0_9059_UDP_3a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 55 44 50 3a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03c1_a945_USER_20_25s.rel b/src/nos/lib/messages_lib/03c1_a945_USER_20_25s.rel new file mode 100644 index 00000000..9b51c523 --- /dev/null +++ b/src/nos/lib/messages_lib/03c1_a945_USER_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___03c1_a945_USER_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 55 53 45 52 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03c2_41aa_Unknown_20command.rel b/src/nos/lib/messages_lib/03c2_41aa_Unknown_20command.rel new file mode 100644 index 00000000..6851d631 --- /dev/null +++ b/src/nos/lib/messages_lib/03c2_41aa_Unknown_20command.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___03c2_41aa_Unknown_20command Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 55 6e 6b 6e 6f 77 6e 20 63 +R 00 00 01 00 +T 0b 00 00 00 6f 6d 6d 61 6e 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03c3_e21a_Unknown_20command_2.rel b/src/nos/lib/messages_lib/03c3_e21a_Unknown_20command_2.rel new file mode 100644 index 00000000..8e32414b --- /dev/null +++ b/src/nos/lib/messages_lib/03c3_e21a_Unknown_20command_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___03c3_e21a_Unknown_20command_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 55 6e 6b 6e 6f 77 6e 20 63 +R 00 00 01 00 +T 0b 00 00 00 6f 6d 6d 61 6e 64 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03c4_b975_Unknown_20command_3.rel b/src/nos/lib/messages_lib/03c4_b975_Unknown_20command_3.rel new file mode 100644 index 00000000..edffb448 --- /dev/null +++ b/src/nos/lib/messages_lib/03c4_b975_Unknown_20command_3.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___03c4_b975_Unknown_20command_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 55 6e 6b 6e 6f 77 6e 20 63 +R 00 00 01 00 +T 0b 00 00 00 6f 6d 6d 61 6e 64 3b 20 74 79 70 +R 00 00 01 00 +T 16 00 00 00 65 20 22 3f 22 20 66 6f 72 20 6c +R 00 00 01 00 +T 21 00 00 00 69 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03c5_d2a4_Unknown_20encapsula.rel b/src/nos/lib/messages_lib/03c5_d2a4_Unknown_20encapsula.rel new file mode 100644 index 00000000..0b49e26d --- /dev/null +++ b/src/nos/lib/messages_lib/03c5_d2a4_Unknown_20encapsula.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___03c5_d2a4_Unknown_20encapsula Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 55 6e 6b 6e 6f 77 6e 20 65 +R 00 00 01 00 +T 0b 00 00 00 6e 63 61 70 73 75 6c 61 74 69 6f +R 00 00 01 00 +T 16 00 00 00 6e 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03c6_8cf4_Unknown_20parameter.rel b/src/nos/lib/messages_lib/03c6_8cf4_Unknown_20parameter.rel new file mode 100644 index 00000000..059af613 --- /dev/null +++ b/src/nos/lib/messages_lib/03c6_8cf4_Unknown_20parameter.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___03c6_8cf4_Unknown_20parameter Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 55 6e 6b 6e 6f 77 6e 20 70 +R 00 00 01 00 +T 0b 00 00 00 61 72 61 6d 65 74 65 72 20 25 73 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03c7_eb24_Update_20with_20MD5.rel b/src/nos/lib/messages_lib/03c7_eb24_Update_20with_20MD5.rel new file mode 100644 index 00000000..94b6762a --- /dev/null +++ b/src/nos/lib/messages_lib/03c7_eb24_Update_20with_20MD5.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___03c7_eb24_Update_20with_20MD5 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 55 70 64 61 74 65 20 77 69 +R 00 00 01 00 +T 0b 00 00 00 74 68 20 4d 44 35 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03c8_7d7d_Uploading_20_25s_0a.rel b/src/nos/lib/messages_lib/03c8_7d7d_Uploading_20_25s_0a.rel new file mode 100644 index 00000000..5dc5ff87 --- /dev/null +++ b/src/nos/lib/messages_lib/03c8_7d7d_Uploading_20_25s_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___03c8_7d7d_Uploading_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 55 70 6c 6f 61 64 69 6e 67 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03c9_bd81_Uploading_20off_0a.rel b/src/nos/lib/messages_lib/03c9_bd81_Uploading_20off_0a.rel new file mode 100644 index 00000000..b51e70ad --- /dev/null +++ b/src/nos/lib/messages_lib/03c9_bd81_Uploading_20off_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___03c9_bd81_Uploading_20off_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 55 70 6c 6f 61 64 69 6e 67 +R 00 00 01 00 +T 0b 00 00 00 20 6f 66 66 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ca_6d70_Uptime_20_25s_20Sta.rel b/src/nos/lib/messages_lib/03ca_6d70_Uptime_20_25s_20Sta.rel new file mode 100644 index 00000000..7b624978 --- /dev/null +++ b/src/nos/lib/messages_lib/03ca_6d70_Uptime_20_25s_20Sta.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___03ca_6d70_Uptime_20_25s_20Sta Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 55 70 74 69 6d 65 20 25 73 +R 00 00 01 00 +T 0b 00 00 00 20 53 74 61 63 6b 20 25 78 20 6d +R 00 00 01 00 +T 16 00 00 00 61 78 20 69 6e 74 73 74 6b 20 25 +R 00 00 01 00 +T 21 00 00 00 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03cb_0a8d_Usage_3a_20.rel b/src/nos/lib/messages_lib/03cb_0a8d_Usage_3a_20.rel new file mode 100644 index 00000000..76784c5f --- /dev/null +++ b/src/nos/lib/messages_lib/03cb_0a8d_Usage_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___03cb_0a8d_Usage_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 55 73 61 67 65 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03cc_125c_Usage_3a_20_25s_20_.rel b/src/nos/lib/messages_lib/03cc_125c_Usage_3a_20_25s_20_.rel new file mode 100644 index 00000000..cf3cae41 --- /dev/null +++ b/src/nos/lib/messages_lib/03cc_125c_Usage_3a_20_25s_20_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___03cc_125c_Usage_3a_20_25s_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 55 73 61 67 65 3a 20 25 73 +R 00 00 01 00 +T 0b 00 00 00 20 5b 73 74 61 6e 64 61 72 64 7c +R 00 00 01 00 +T 16 00 00 00 6e 75 6c 6c 5d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03cd_6ae1_Usage_3a_20F_20user.rel b/src/nos/lib/messages_lib/03cd_6ae1_Usage_3a_20F_20user.rel new file mode 100644 index 00000000..e325d831 --- /dev/null +++ b/src/nos/lib/messages_lib/03cd_6ae1_Usage_3a_20F_20user.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S ___03cd_6ae1_Usage_3a_20F_20user Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2e 00 55 73 61 67 65 3a 20 46 20 +R 00 00 01 00 +T 0b 00 00 00 75 73 65 72 40 68 6f 73 74 20 20 +R 00 00 01 00 +T 16 00 00 00 6f 72 20 20 46 20 40 68 6f 73 74 +R 00 00 01 00 +T 21 00 00 00 20 20 6f 72 20 20 46 20 75 73 65 +R 00 00 01 00 +T 2c 00 00 00 72 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ce_7dd1_Usage_3a_20ax25_20r.rel b/src/nos/lib/messages_lib/03ce_7dd1_Usage_3a_20ax25_20r.rel new file mode 100644 index 00000000..88b943a6 --- /dev/null +++ b/src/nos/lib/messages_lib/03ce_7dd1_Usage_3a_20ax25_20r.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2d flags 0 +S ___03ce_7dd1_Usage_3a_20ax25_20r Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2b 00 55 73 61 67 65 3a 20 61 78 +R 00 00 01 00 +T 0b 00 00 00 32 35 20 72 6f 75 74 65 20 61 64 +R 00 00 01 00 +T 16 00 00 00 64 20 3c 74 61 72 67 65 74 3e 20 +R 00 00 01 00 +T 21 00 00 00 5b 64 69 67 69 73 2e 2e 2e 5d 0a +R 00 00 01 00 +T 2c 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03cf_f8b8_Usage_3a_20dial_20_.rel b/src/nos/lib/messages_lib/03cf_f8b8_Usage_3a_20dial_20_.rel new file mode 100644 index 00000000..7ef45733 --- /dev/null +++ b/src/nos/lib/messages_lib/03cf_f8b8_Usage_3a_20dial_20_.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 43 flags 0 +S ___03cf_f8b8_Usage_3a_20dial_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 41 00 55 73 61 67 65 3a 20 64 69 +R 00 00 01 00 +T 0b 00 00 00 61 6c 20 3c 69 66 61 63 65 3e 20 +R 00 00 01 00 +T 16 00 00 00 3c 74 69 6d 65 6f 75 74 3e 20 3c +R 00 00 01 00 +T 21 00 00 00 72 61 69 73 65 66 69 6c 65 3e 20 +R 00 00 01 00 +T 2c 00 00 00 3c 64 72 6f 70 66 69 6c 65 3e 20 +R 00 00 01 00 +T 37 00 00 00 3c 72 69 6e 67 66 69 6c 65 3e 0a +R 00 00 01 00 +T 42 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03d0_a375_Usage_3a_20mbox_20m.rel b/src/nos/lib/messages_lib/03d0_a375_Usage_3a_20mbox_20m.rel new file mode 100644 index 00000000..0669b308 --- /dev/null +++ b/src/nos/lib/messages_lib/03d0_a375_Usage_3a_20mbox_20m.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___03d0_a375_Usage_3a_20mbox_20m Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 55 73 61 67 65 3a 20 6d 62 +R 00 00 01 00 +T 0b 00 00 00 6f 78 20 6d 6f 74 64 20 22 3c 79 +R 00 00 01 00 +T 16 00 00 00 6f 75 72 20 6d 65 73 73 61 67 65 +R 00 00 01 00 +T 21 00 00 00 3e 22 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03d1_8cfb_Usage_3a_20pop_20us.rel b/src/nos/lib/messages_lib/03d1_8cfb_Usage_3a_20pop_20us.rel new file mode 100644 index 00000000..41290603 --- /dev/null +++ b/src/nos/lib/messages_lib/03d1_8cfb_Usage_3a_20pop_20us.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2d flags 0 +S ___03d1_8cfb_Usage_3a_20pop_20us Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2b 00 55 73 61 67 65 3a 20 70 6f +R 00 00 01 00 +T 0b 00 00 00 70 20 75 73 65 72 64 61 74 61 20 +R 00 00 01 00 +T 16 00 00 00 3c 75 73 65 72 6e 61 6d 65 3e 20 +R 00 00 01 00 +T 21 00 00 00 3c 70 61 73 73 77 6f 72 64 3e 0a +R 00 00 01 00 +T 2c 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03d2_a2c0_Usage_3a_20smtp_20m.rel b/src/nos/lib/messages_lib/03d2_a2c0_Usage_3a_20smtp_20m.rel new file mode 100644 index 00000000..1f26c6c1 --- /dev/null +++ b/src/nos/lib/messages_lib/03d2_a2c0_Usage_3a_20smtp_20m.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___03d2_a2c0_Usage_3a_20smtp_20m Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 55 73 61 67 65 3a 20 73 6d +R 00 00 01 00 +T 0b 00 00 00 74 70 20 6d 6f 64 65 20 5b 71 75 +R 00 00 01 00 +T 16 00 00 00 65 75 65 20 7c 20 72 6f 75 74 65 +R 00 00 01 00 +T 21 00 00 00 5d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03d3_9654_Use_20the_20ax25_20.rel b/src/nos/lib/messages_lib/03d3_9654_Use_20the_20ax25_20.rel new file mode 100644 index 00000000..857541f5 --- /dev/null +++ b/src/nos/lib/messages_lib/03d3_9654_Use_20the_20ax25_20.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 35 flags 0 +S ___03d3_9654_Use_20the_20ax25_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 33 00 55 73 65 20 74 68 65 20 61 +R 00 00 01 00 +T 0b 00 00 00 78 32 35 20 72 6f 75 74 65 20 63 +R 00 00 01 00 +T 16 00 00 00 6f 6d 6d 61 6e 64 20 74 6f 20 73 +R 00 00 01 00 +T 21 00 00 00 70 65 63 69 66 79 20 64 69 67 69 +R 00 00 01 00 +T 2c 00 00 00 70 65 61 74 65 72 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03d4_4893_User_20_20_20_20_20.rel b/src/nos/lib/messages_lib/03d4_4893_User_20_20_20_20_20.rel new file mode 100644 index 00000000..1edcecbc --- /dev/null +++ b/src/nos/lib/messages_lib/03d4_4893_User_20_20_20_20_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___03d4_4893_User_20_20_20_20_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 55 73 65 72 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 20 20 53 74 61 74 65 20 20 20 20 +R 00 00 01 00 +T 16 00 00 00 53 23 20 20 57 68 65 72 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03d5_633f_User_20_25s_20not_2.rel b/src/nos/lib/messages_lib/03d5_633f_User_20_25s_20not_2.rel new file mode 100644 index 00000000..441c30ae --- /dev/null +++ b/src/nos/lib/messages_lib/03d5_633f_User_20_25s_20not_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___03d5_633f_User_20_25s_20not_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 55 73 65 72 20 25 73 20 6e +R 00 00 01 00 +T 0b 00 00 00 6f 74 20 6b 6e 6f 77 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03d6_75ef_V_20numbers.rel b/src/nos/lib/messages_lib/03d6_75ef_V_20numbers.rel new file mode 100644 index 00000000..e7fa2d60 --- /dev/null +++ b/src/nos/lib/messages_lib/03d6_75ef_V_20numbers.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___03d6_75ef_V_20numbers Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 56 20 6e 75 6d 62 65 72 73 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03d7_4b9d_VJ_20Compressed_20T.rel b/src/nos/lib/messages_lib/03d7_4b9d_VJ_20Compressed_20T.rel new file mode 100644 index 00000000..8521093a --- /dev/null +++ b/src/nos/lib/messages_lib/03d7_4b9d_VJ_20Compressed_20T.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___03d7_4b9d_VJ_20Compressed_20T Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 56 4a 20 43 6f 6d 70 72 65 +R 00 00 01 00 +T 0b 00 00 00 73 73 65 64 20 54 43 50 2f 49 50 +R 00 00 01 00 +T 16 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03d8_2be9_VJ_20Uncompressed_2.rel b/src/nos/lib/messages_lib/03d8_2be9_VJ_20Uncompressed_2.rel new file mode 100644 index 00000000..c4c9b2d5 --- /dev/null +++ b/src/nos/lib/messages_lib/03d8_2be9_VJ_20Uncompressed_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___03d8_2be9_VJ_20Uncompressed_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 56 4a 20 55 6e 63 6f 6d 70 +R 00 00 01 00 +T 0b 00 00 00 72 65 73 73 65 64 20 54 43 50 2f +R 00 00 01 00 +T 16 00 00 00 49 50 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03d9_3d32_Valid_20options_3a.rel b/src/nos/lib/messages_lib/03d9_3d32_Valid_20options_3a.rel new file mode 100644 index 00000000..3fc8196a --- /dev/null +++ b/src/nos/lib/messages_lib/03d9_3d32_Valid_20options_3a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___03d9_3d32_Valid_20options_3a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 56 61 6c 69 64 20 6f 70 74 +R 00 00 01 00 +T 0b 00 00 00 69 6f 6e 73 3a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03da_8007_Value_20_25s_20_28_.rel b/src/nos/lib/messages_lib/03da_8007_Value_20_25s_20_28_.rel new file mode 100644 index 00000000..e656d793 --- /dev/null +++ b/src/nos/lib/messages_lib/03da_8007_Value_20_25s_20_28_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___03da_8007_Value_20_25s_20_28_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 56 61 6c 75 65 20 25 73 20 +R 00 00 01 00 +T 0b 00 00 00 28 25 64 29 20 6d 75 73 74 20 62 +R 00 00 01 00 +T 16 00 00 00 65 20 3e 20 30 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03db_c8df_Verbose.rel b/src/nos/lib/messages_lib/03db_c8df_Verbose.rel new file mode 100644 index 00000000..c6219d48 --- /dev/null +++ b/src/nos/lib/messages_lib/03db_c8df_Verbose.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___03db_c8df_Verbose Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 56 65 72 62 6f 73 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03dc_32ff_Verbose_20flag.rel b/src/nos/lib/messages_lib/03dc_32ff_Verbose_20flag.rel new file mode 100644 index 00000000..4e943d5f --- /dev/null +++ b/src/nos/lib/messages_lib/03dc_32ff_Verbose_20flag.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___03dc_32ff_Verbose_20flag Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 56 65 72 62 6f 73 65 20 66 +R 00 00 01 00 +T 0b 00 00 00 6c 61 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03dd_b110_WARNING_3a_20Locati.rel b/src/nos/lib/messages_lib/03dd_b110_WARNING_3a_20Locati.rel new file mode 100644 index 00000000..ef029fb1 --- /dev/null +++ b/src/nos/lib/messages_lib/03dd_b110_WARNING_3a_20Locati.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2b flags 0 +S ___03dd_b110_WARNING_3a_20Locati Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 29 00 57 41 52 4e 49 4e 47 3a 20 +R 00 00 01 00 +T 0b 00 00 00 4c 6f 63 61 74 69 6f 6e 20 30 20 +R 00 00 01 00 +T 16 00 00 00 73 6d 61 73 68 65 64 2c 20 70 72 +R 00 00 01 00 +T 21 00 00 00 6f 63 65 73 73 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03de_eddf_Warning_21_20Interf.rel b/src/nos/lib/messages_lib/03de_eddf_Warning_21_20Interf.rel new file mode 100644 index 00000000..99138a3e --- /dev/null +++ b/src/nos/lib/messages_lib/03de_eddf_Warning_21_20Interf.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 33 flags 0 +S ___03de_eddf_Warning_21_20Interf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 31 00 57 61 72 6e 69 6e 67 21 20 +R 00 00 01 00 +T 0b 00 00 00 49 6e 74 65 72 66 61 63 65 20 27 +R 00 00 01 00 +T 16 00 00 00 25 73 27 20 68 61 73 20 61 20 6d +R 00 00 01 00 +T 21 00 00 00 75 6c 74 69 63 61 73 74 20 61 64 +R 00 00 01 00 +T 2c 00 00 00 64 72 65 73 73 3a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03df_4457_Warning_3a_20type_2.rel b/src/nos/lib/messages_lib/03df_4457_Warning_3a_20type_2.rel new file mode 100644 index 00000000..3f2d03e1 --- /dev/null +++ b/src/nos/lib/messages_lib/03df_4457_Warning_3a_20type_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36 flags 0 +S ___03df_4457_Warning_3a_20type_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 34 00 57 61 72 6e 69 6e 67 3a 20 +R 00 00 01 00 +T 0b 00 00 00 74 79 70 65 20 69 73 20 41 53 43 +R 00 00 01 00 +T 16 00 00 00 49 49 20 61 6e 64 20 25 73 20 61 +R 00 00 01 00 +T 21 00 00 00 70 70 65 61 72 73 20 74 6f 20 62 +R 00 00 01 00 +T 2c 00 00 00 65 20 62 69 6e 61 72 79 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03e0_85a8_Window_20_28frames_.rel b/src/nos/lib/messages_lib/03e0_85a8_Window_20_28frames_.rel new file mode 100644 index 00000000..0d58cf12 --- /dev/null +++ b/src/nos/lib/messages_lib/03e0_85a8_Window_20_28frames_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___03e0_85a8_Window_20_28frames_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 57 69 6e 64 6f 77 20 28 66 +R 00 00 01 00 +T 0b 00 00 00 72 61 6d 65 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03e1_9331_Window_20size_20_28.rel b/src/nos/lib/messages_lib/03e1_9331_Window_20size_20_28.rel new file mode 100644 index 00000000..e29f0e19 --- /dev/null +++ b/src/nos/lib/messages_lib/03e1_9331_Window_20size_20_28.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___03e1_9331_Window_20size_20_28 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 57 69 6e 64 6f 77 20 73 69 +R 00 00 01 00 +T 0b 00 00 00 7a 65 20 28 66 72 61 6d 65 73 29 +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03e2_613d_Window_3a_20_25_2d5.rel b/src/nos/lib/messages_lib/03e2_613d_Window_3a_20_25_2d5.rel new file mode 100644 index 00000000..933a129c --- /dev/null +++ b/src/nos/lib/messages_lib/03e2_613d_Window_3a_20_25_2d5.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S ___03e2_613d_Window_3a_20_25_2d5 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 35 00 57 69 6e 64 6f 77 3a 20 25 +R 00 00 01 00 +T 0b 00 00 00 2d 35 75 20 52 78 70 65 63 74 3a +R 00 00 01 00 +T 16 00 00 00 20 25 2d 35 75 20 52 78 4e 65 78 +R 00 00 01 00 +T 21 00 00 00 74 3a 20 25 2d 35 75 20 52 78 51 +R 00 00 01 00 +T 2c 00 00 00 3a 20 25 2d 35 64 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03e3_25a6_Wink_20DTR_3f_20.rel b/src/nos/lib/messages_lib/03e3_25a6_Wink_20DTR_3f_20.rel new file mode 100644 index 00000000..dac97288 --- /dev/null +++ b/src/nos/lib/messages_lib/03e3_25a6_Wink_20DTR_3f_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___03e3_25a6_Wink_20DTR_3f_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 57 69 6e 6b 20 44 54 52 3f +R 00 00 01 00 +T 0b 00 00 00 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03e4_75b2_Writing_20article_2.rel b/src/nos/lib/messages_lib/03e4_75b2_Writing_20article_2.rel new file mode 100644 index 00000000..527babfd --- /dev/null +++ b/src/nos/lib/messages_lib/03e4_75b2_Writing_20article_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___03e4_75b2_Writing_20article_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 57 72 69 74 69 6e 67 20 61 +R 00 00 01 00 +T 0b 00 00 00 72 74 69 63 6c 65 20 74 6f 20 27 +R 00 00 01 00 +T 16 00 00 00 25 73 27 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03e5_3999_XMD5_20_25s.rel b/src/nos/lib/messages_lib/03e5_3999_XMD5_20_25s.rel new file mode 100644 index 00000000..c424dab5 --- /dev/null +++ b/src/nos/lib/messages_lib/03e5_3999_XMD5_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___03e5_3999_XMD5_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 58 4d 44 35 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03e6_a62b_XMD5_20_25s_0a.rel b/src/nos/lib/messages_lib/03e6_a62b_XMD5_20_25s_0a.rel new file mode 100644 index 00000000..03f13eae --- /dev/null +++ b/src/nos/lib/messages_lib/03e6_a62b_XMD5_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___03e6_a62b_XMD5_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 58 4d 44 35 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03e7_8515_XMKD_20_25s_0a.rel b/src/nos/lib/messages_lib/03e7_8515_XMKD_20_25s_0a.rel new file mode 100644 index 00000000..ae984f4c --- /dev/null +++ b/src/nos/lib/messages_lib/03e7_8515_XMKD_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___03e7_8515_XMKD_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 58 4d 4b 44 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03e8_31d2_XRMD_20_25s_0a.rel b/src/nos/lib/messages_lib/03e8_31d2_XRMD_20_25s_0a.rel new file mode 100644 index 00000000..724d2044 --- /dev/null +++ b/src/nos/lib/messages_lib/03e8_31d2_XRMD_20_25s_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___03e8_31d2_XRMD_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 58 52 4d 44 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03e9_71c6_You_20have_20.rel b/src/nos/lib/messages_lib/03e9_71c6_You_20have_20.rel new file mode 100644 index 00000000..2255561f --- /dev/null +++ b/src/nos/lib/messages_lib/03e9_71c6_You_20have_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___03e9_71c6_You_20have_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 59 6f 75 20 68 61 76 65 20 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ea_1e66_You_20have_20new_20.rel b/src/nos/lib/messages_lib/03ea_1e66_You_20have_20new_20.rel new file mode 100644 index 00000000..503b8bc4 --- /dev/null +++ b/src/nos/lib/messages_lib/03ea_1e66_You_20have_20new_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___03ea_1e66_You_20have_20new_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 59 6f 75 20 68 61 76 65 20 +R 00 00 01 00 +T 0b 00 00 00 6e 65 77 20 6d 61 69 6c 2e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03eb_4583_You_27re_20using_20.rel b/src/nos/lib/messages_lib/03eb_4583_You_27re_20using_20.rel new file mode 100644 index 00000000..8146d833 --- /dev/null +++ b/src/nos/lib/messages_lib/03eb_4583_You_27re_20using_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___03eb_4583_You_27re_20using_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 59 6f 75 27 72 65 20 75 73 +R 00 00 01 00 +T 0b 00 00 00 69 6e 67 20 69 6e 74 65 72 66 61 +R 00 00 01 00 +T 16 00 00 00 63 65 20 25 73 21 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ec_4aef_Z_20filename.rel b/src/nos/lib/messages_lib/03ec_4aef_Z_20filename.rel new file mode 100644 index 00000000..929ca113 --- /dev/null +++ b/src/nos/lib/messages_lib/03ec_4aef_Z_20filename.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___03ec_4aef_Z_20filename Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 5a 20 66 69 6c 65 6e 61 6d +R 00 00 01 00 +T 0b 00 00 00 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ed_5fd7_Zap_20failed_3a_20_.rel b/src/nos/lib/messages_lib/03ed_5fd7_Zap_20failed_3a_20_.rel new file mode 100644 index 00000000..f20c9ae1 --- /dev/null +++ b/src/nos/lib/messages_lib/03ed_5fd7_Zap_20failed_3a_20_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___03ed_5fd7_Zap_20failed_3a_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 5a 61 70 20 66 61 69 6c 65 +R 00 00 01 00 +T 0b 00 00 00 64 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ee_e3d1__5b.rel b/src/nos/lib/messages_lib/03ee_e3d1__5b.rel new file mode 100644 index 00000000..4c4af082 --- /dev/null +++ b/src/nos/lib/messages_lib/03ee_e3d1__5b.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4 flags 0 +S ___03ee_e3d1__5b Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 02 00 5b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ef_9d9c__5bNET_2dHMR_24_5d.rel b/src/nos/lib/messages_lib/03ef_9d9c__5bNET_2dHMR_24_5d.rel new file mode 100644 index 00000000..c37fcdf1 --- /dev/null +++ b/src/nos/lib/messages_lib/03ef_9d9c__5bNET_2dHMR_24_5d.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___03ef_9d9c__5bNET_2dHMR_24_5d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 5b 4e 45 54 2d 48 4d 52 24 +R 00 00 01 00 +T 0b 00 00 00 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03f0_f8e4__5bunknown_5d.rel b/src/nos/lib/messages_lib/03f0_f8e4__5bunknown_5d.rel new file mode 100644 index 00000000..bc3bbc7f --- /dev/null +++ b/src/nos/lib/messages_lib/03f0_f8e4__5bunknown_5d.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___03f0_f8e4__5bunknown_5d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 5b 75 6e 6b 6e 6f 77 6e 5d +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03f1_699f__5eC_0a.rel b/src/nos/lib/messages_lib/03f1_699f__5eC_0a.rel new file mode 100644 index 00000000..c2371ef5 --- /dev/null +++ b/src/nos/lib/messages_lib/03f1_699f__5eC_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___03f1_699f__5eC_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 5e 43 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03f2_e5d6__5eR_0a.rel b/src/nos/lib/messages_lib/03f2_e5d6__5eR_0a.rel new file mode 100644 index 00000000..ca502636 --- /dev/null +++ b/src/nos/lib/messages_lib/03f2_e5d6__5eR_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___03f2_e5d6__5eR_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 5e 52 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03f3_1951__5fexit.rel b/src/nos/lib/messages_lib/03f3_1951__5fexit.rel new file mode 100644 index 00000000..d0534005 --- /dev/null +++ b/src/nos/lib/messages_lib/03f3_1951__5fexit.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___03f3_1951__5fexit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 5f 65 78 69 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03f4_a314__5ffcreat_3a_20WARN.rel b/src/nos/lib/messages_lib/03f4_a314__5ffcreat_3a_20WARN.rel new file mode 100644 index 00000000..44d33a14 --- /dev/null +++ b/src/nos/lib/messages_lib/03f4_a314__5ffcreat_3a_20WARN.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___03f4_a314__5ffcreat_3a_20WARN Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 5f 66 63 72 65 61 74 3a 20 +R 00 00 01 00 +T 0b 00 00 00 57 41 52 4e 49 4e 47 21 20 4e 6f +R 00 00 01 00 +T 16 00 00 00 20 6d 65 6d 6f 72 79 20 66 6f 72 +R 00 00 01 00 +T 21 00 00 00 20 46 49 4c 45 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03f5_79de__5funlink_3a_20bad_.rel b/src/nos/lib/messages_lib/03f5_79de__5funlink_3a_20bad_.rel new file mode 100644 index 00000000..a5131dc0 --- /dev/null +++ b/src/nos/lib/messages_lib/03f5_79de__5funlink_3a_20bad_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___03f5_79de__5funlink_3a_20bad_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 5f 75 6e 6c 69 6e 6b 3a 20 +R 00 00 01 00 +T 0b 00 00 00 62 61 64 20 6e 6c 69 6e 6b 20 25 +R 00 00 01 00 +T 16 00 00 00 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03f6_722b_accept.rel b/src/nos/lib/messages_lib/03f6_722b_accept.rel new file mode 100644 index 00000000..41ace09a --- /dev/null +++ b/src/nos/lib/messages_lib/03f6_722b_accept.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___03f6_722b_accept Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 61 63 63 65 70 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03f7_30f9_accept_0a.rel b/src/nos/lib/messages_lib/03f7_30f9_accept_0a.rel new file mode 100644 index 00000000..6bdc8b66 --- /dev/null +++ b/src/nos/lib/messages_lib/03f7_30f9_accept_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___03f7_30f9_accept_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 61 63 63 65 70 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03f8_2cfc_access.rel b/src/nos/lib/messages_lib/03f8_2cfc_access.rel new file mode 100644 index 00000000..68b100ab --- /dev/null +++ b/src/nos/lib/messages_lib/03f8_2cfc_access.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___03f8_2cfc_access Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 61 63 63 65 73 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03f9_9b89_accm.rel b/src/nos/lib/messages_lib/03f9_9b89_accm.rel new file mode 100644 index 00000000..5472acf8 --- /dev/null +++ b/src/nos/lib/messages_lib/03f9_9b89_accm.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___03f9_9b89_accm Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 61 63 63 6d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03fa_16c9_acct.rel b/src/nos/lib/messages_lib/03fa_16c9_acct.rel new file mode 100644 index 00000000..e632b39e --- /dev/null +++ b/src/nos/lib/messages_lib/03fa_16c9_acct.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___03fa_16c9_acct Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 61 63 63 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03fb_0c4f_acfc.rel b/src/nos/lib/messages_lib/03fb_0c4f_acfc.rel new file mode 100644 index 00000000..99fceac9 --- /dev/null +++ b/src/nos/lib/messages_lib/03fb_0c4f_acfc.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___03fb_0c4f_acfc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 61 63 66 63 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03fc_7530_acktime.rel b/src/nos/lib/messages_lib/03fc_7530_acktime.rel new file mode 100644 index 00000000..c23751a4 --- /dev/null +++ b/src/nos/lib/messages_lib/03fc_7530_acktime.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___03fc_7530_acktime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 61 63 6b 74 69 6d 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03fd_41b5_add.rel b/src/nos/lib/messages_lib/03fd_41b5_add.rel new file mode 100644 index 00000000..d136e4f6 --- /dev/null +++ b/src/nos/lib/messages_lib/03fd_41b5_add.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___03fd_41b5_add Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 61 64 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03fe_d8a3_add_20_3chostid_3e.rel b/src/nos/lib/messages_lib/03fe_d8a3_add_20_3chostid_3e.rel new file mode 100644 index 00000000..536ef6e3 --- /dev/null +++ b/src/nos/lib/messages_lib/03fe_d8a3_add_20_3chostid_3e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___03fe_d8a3_add_20_3chostid_3e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 61 64 64 20 3c 68 6f 73 74 +R 00 00 01 00 +T 0b 00 00 00 69 64 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/03ff_6783_addprivate.rel b/src/nos/lib/messages_lib/03ff_6783_addprivate.rel new file mode 100644 index 00000000..d9cad860 --- /dev/null +++ b/src/nos/lib/messages_lib/03ff_6783_addprivate.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___03ff_6783_addprivate Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 61 64 64 70 72 69 76 61 74 +R 00 00 01 00 +T 0b 00 00 00 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0400_9712_address.rel b/src/nos/lib/messages_lib/0400_9712_address.rel new file mode 100644 index 00000000..cc3fb955 --- /dev/null +++ b/src/nos/lib/messages_lib/0400_9712_address.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0400_9712_address Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 61 64 64 72 65 73 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0401_2c42_addserver.rel b/src/nos/lib/messages_lib/0401_2c42_addserver.rel new file mode 100644 index 00000000..35e176cb --- /dev/null +++ b/src/nos/lib/messages_lib/0401_2c42_addserver.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0401_2c42_addserver Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 61 64 64 73 65 72 76 65 72 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0402_b0a9_alarm.rel b/src/nos/lib/messages_lib/0402_b0a9_alarm.rel new file mode 100644 index 00000000..7eb43d87 --- /dev/null +++ b/src/nos/lib/messages_lib/0402_b0a9_alarm.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0402_b0a9_alarm Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 61 6c 61 72 6d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0403_9965_allocs_20_25lu_20fr.rel b/src/nos/lib/messages_lib/0403_9965_allocs_20_25lu_20fr.rel new file mode 100644 index 00000000..d829d3fe --- /dev/null +++ b/src/nos/lib/messages_lib/0403_9965_allocs_20_25lu_20fr.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 45 flags 0 +S ___0403_9965_allocs_20_25lu_20fr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 43 00 61 6c 6c 6f 63 73 20 25 6c +R 00 00 01 00 +T 0b 00 00 00 75 20 66 72 65 65 73 20 25 6c 75 +R 00 00 01 00 +T 16 00 00 00 20 28 64 69 66 66 20 25 6c 75 29 +R 00 00 01 00 +T 21 00 00 00 20 61 6c 6c 6f 63 20 66 61 69 6c +R 00 00 01 00 +T 2c 00 00 00 73 20 25 6c 75 20 69 6e 76 61 6c +R 00 00 01 00 +T 37 00 00 00 69 64 20 66 72 65 65 73 20 25 6c +R 00 00 01 00 +T 42 00 00 00 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0404_8e82_allow_20pap_20none_.rel b/src/nos/lib/messages_lib/0404_8e82_allow_20pap_20none_.rel new file mode 100644 index 00000000..0223a363 --- /dev/null +++ b/src/nos/lib/messages_lib/0404_8e82_allow_20pap_20none_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0404_8e82_allow_20pap_20none_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 61 6c 6c 6f 77 20 70 61 70 +R 00 00 01 00 +T 0b 00 00 00 20 6e 6f 6e 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0405_ba08_allow_20tcp_20none_.rel b/src/nos/lib/messages_lib/0405_ba08_allow_20tcp_20none_.rel new file mode 100644 index 00000000..0ad3bf27 --- /dev/null +++ b/src/nos/lib/messages_lib/0405_ba08_allow_20tcp_20none_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0405_ba08_allow_20tcp_20none_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 61 6c 6c 6f 77 20 74 63 70 +R 00 00 01 00 +T 0b 00 00 00 20 6e 6f 6e 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0406_94f6_anext_20pointer_20o.rel b/src/nos/lib/messages_lib/0406_94f6_anext_20pointer_20o.rel new file mode 100644 index 00000000..963927c8 --- /dev/null +++ b/src/nos/lib/messages_lib/0406_94f6_anext_20pointer_20o.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0406_94f6_anext_20pointer_20o Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 61 6e 65 78 74 20 70 6f 69 +R 00 00 01 00 +T 0b 00 00 00 6e 74 65 72 20 6f 75 74 20 6f 66 +R 00 00 01 00 +T 16 00 00 00 20 6c 69 6d 69 74 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0407_c2a0_answer_20script_3a_.rel b/src/nos/lib/messages_lib/0407_c2a0_answer_20script_3a_.rel new file mode 100644 index 00000000..ab1f62c0 --- /dev/null +++ b/src/nos/lib/messages_lib/0407_c2a0_answer_20script_3a_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0407_c2a0_answer_20script_3a_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 61 6e 73 77 65 72 20 73 63 +R 00 00 01 00 +T 0b 00 00 00 72 69 70 74 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0408_da7c_area.rel b/src/nos/lib/messages_lib/0408_da7c_area.rel new file mode 100644 index 00000000..a132b39b --- /dev/null +++ b/src/nos/lib/messages_lib/0408_da7c_area.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0408_da7c_area Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 61 72 65 61 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0409_1dde_arp_20add_20_3chost.rel b/src/nos/lib/messages_lib/0409_1dde_arp_20add_20_3chost.rel new file mode 100644 index 00000000..ce1169a7 --- /dev/null +++ b/src/nos/lib/messages_lib/0409_1dde_arp_20add_20_3chost.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 42 flags 0 +S ___0409_1dde_arp_20add_20_3chost Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 40 00 61 72 70 20 61 64 64 20 3c +R 00 00 01 00 +T 0b 00 00 00 68 6f 73 74 69 64 3e 20 65 74 68 +R 00 00 01 00 +T 16 00 00 00 65 72 7c 61 78 32 35 7c 6e 65 74 +R 00 00 01 00 +T 21 00 00 00 72 6f 6d 7c 61 72 63 6e 65 74 20 +R 00 00 01 00 +T 2c 00 00 00 3c 65 74 68 65 72 20 61 64 64 72 +R 00 00 01 00 +T 37 00 00 00 7c 63 61 6c 6c 73 69 67 6e 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/040a_96ce_arp_20drop_20_3chos.rel b/src/nos/lib/messages_lib/040a_96ce_arp_20drop_20_3chos.rel new file mode 100644 index 00000000..0f12e5ad --- /dev/null +++ b/src/nos/lib/messages_lib/040a_96ce_arp_20drop_20_3chos.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2d flags 0 +S ___040a_96ce_arp_20drop_20_3chos Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2b 00 61 72 70 20 64 72 6f 70 20 +R 00 00 01 00 +T 0b 00 00 00 3c 68 6f 73 74 69 64 3e 20 65 74 +R 00 00 01 00 +T 16 00 00 00 68 65 72 7c 61 78 32 35 7c 6e 65 +R 00 00 01 00 +T 21 00 00 00 74 72 6f 6d 7c 61 72 63 6e 65 74 +R 00 00 01 00 +T 2c 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/040b_0018_arp_20publish_20_3c.rel b/src/nos/lib/messages_lib/040b_0018_arp_20publish_20_3c.rel new file mode 100644 index 00000000..bd780161 --- /dev/null +++ b/src/nos/lib/messages_lib/040b_0018_arp_20publish_20_3c.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 46 flags 0 +S ___040b_0018_arp_20publish_20_3c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 44 00 61 72 70 20 70 75 62 6c 69 +R 00 00 01 00 +T 0b 00 00 00 73 68 20 3c 68 6f 73 74 69 64 3e +R 00 00 01 00 +T 16 00 00 00 20 65 74 68 65 72 7c 61 78 32 35 +R 00 00 01 00 +T 21 00 00 00 7c 6e 65 74 72 6f 6d 7c 61 72 63 +R 00 00 01 00 +T 2c 00 00 00 6e 65 74 20 3c 65 74 68 65 72 20 +R 00 00 01 00 +T 37 00 00 00 61 64 64 72 7c 63 61 6c 6c 73 69 +R 00 00 01 00 +T 42 00 00 00 67 6e 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/040c_5838_asci.rel b/src/nos/lib/messages_lib/040c_5838_asci.rel new file mode 100644 index 00000000..f350d1c1 --- /dev/null +++ b/src/nos/lib/messages_lib/040c_5838_asci.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___040c_5838_asci Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 61 73 63 69 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/040d_4354_ascii.rel b/src/nos/lib/messages_lib/040d_4354_ascii.rel new file mode 100644 index 00000000..cfe4e1a8 --- /dev/null +++ b/src/nos/lib/messages_lib/040d_4354_ascii.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___040d_4354_ascii Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 61 73 63 69 69 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/040e_3914_ascistat.rel b/src/nos/lib/messages_lib/040e_3914_ascistat.rel new file mode 100644 index 00000000..ec7fbd0b --- /dev/null +++ b/src/nos/lib/messages_lib/040e_3914_ascistat.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___040e_3914_ascistat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 61 73 63 69 73 74 61 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/040f_6442_attach.rel b/src/nos/lib/messages_lib/040f_6442_attach.rel new file mode 100644 index 00000000..65aa5373 --- /dev/null +++ b/src/nos/lib/messages_lib/040f_6442_attach.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___040f_6442_attach Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 61 74 74 61 63 68 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0410_39bc_attach_20_3chardwar.rel b/src/nos/lib/messages_lib/0410_39bc_attach_20_3chardwar.rel new file mode 100644 index 00000000..eae9edd1 --- /dev/null +++ b/src/nos/lib/messages_lib/0410_39bc_attach_20_3chardwar.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___0410_39bc_attach_20_3chardwar Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 61 74 74 61 63 68 20 3c 68 +R 00 00 01 00 +T 0b 00 00 00 61 72 64 77 61 72 65 3e 20 3c 68 +R 00 00 01 00 +T 16 00 00 00 77 20 73 70 65 63 69 66 69 63 20 +R 00 00 01 00 +T 21 00 00 00 6f 70 74 69 6f 6e 73 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0411_fe98_attach_20asci_20_3c.rel b/src/nos/lib/messages_lib/0411_fe98_attach_20asci_20_3c.rel new file mode 100644 index 00000000..0d1de175 --- /dev/null +++ b/src/nos/lib/messages_lib/0411_fe98_attach_20asci_20_3c.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6c flags 0 +S ___0411_fe98_attach_20asci_20_3c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 6a 00 61 74 74 61 63 68 20 61 73 +R 00 00 01 00 +T 0b 00 00 00 63 69 20 3c 61 64 64 72 65 73 73 +R 00 00 01 00 +T 16 00 00 00 3e 20 3c 76 65 63 74 6f 72 3e 20 +R 00 00 01 00 +T 21 00 00 00 73 6c 69 70 7c 76 6a 73 6c 69 70 +R 00 00 01 00 +T 2c 00 00 00 7c 61 78 32 35 75 69 7c 61 78 32 +R 00 00 01 00 +T 37 00 00 00 35 69 7c 6e 72 73 7c 70 70 70 20 +R 00 00 01 00 +T 42 00 00 00 3c 6c 61 62 65 6c 3e 20 3c 62 75 +R 00 00 01 00 +T 4d 00 00 00 66 66 65 72 73 3e 20 3c 6d 74 75 +R 00 00 01 00 +T 58 00 00 00 3e 20 3c 73 70 65 65 64 3e 20 5b +R 00 00 01 00 +T 63 00 00 00 69 70 5f 61 64 64 72 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0412_342d_attach_20escc_20_3c.rel b/src/nos/lib/messages_lib/0412_342d_attach_20escc_20_3c.rel new file mode 100644 index 00000000..75045321 --- /dev/null +++ b/src/nos/lib/messages_lib/0412_342d_attach_20escc_20_3c.rel @@ -0,0 +1,42 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b2 flags 0 +S ___0412_342d_attach_20escc_20_3c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 b0 00 61 74 74 61 63 68 20 65 73 +R 00 00 01 00 +T 0b 00 00 00 63 63 20 3c 64 65 76 69 63 65 73 +R 00 00 01 00 +T 16 00 00 00 3e 20 69 6e 69 74 20 3c 61 64 64 +R 00 00 01 00 +T 21 00 00 00 72 3e 20 3c 73 70 61 63 69 6e 67 +R 00 00 01 00 +T 2c 00 00 00 3e 20 3c 41 6f 66 66 3e 20 3c 42 +R 00 00 01 00 +T 37 00 00 00 6f 66 66 3e 20 3c 44 61 74 61 6f +R 00 00 01 00 +T 42 00 00 00 66 66 3e 0a 20 20 20 3c 69 6e 74 +R 00 00 01 00 +T 4d 00 00 00 61 63 6b 3e 20 3c 76 65 63 3e 20 +R 00 00 01 00 +T 58 00 00 00 5b 70 5d 3c 63 6c 6f 63 6b 3e 20 +R 00 00 01 00 +T 63 00 00 00 5b 68 64 77 65 5d 20 5b 70 61 72 +R 00 00 01 00 +T 6e 00 00 00 61 6d 5d 0a 61 74 74 61 63 68 20 +R 00 00 01 00 +T 79 00 00 00 65 73 63 63 20 3c 63 68 61 6e 3e +R 00 00 01 00 +T 84 00 00 00 20 73 6c 69 70 20 3c 6c 61 62 65 +R 00 00 01 00 +T 8f 00 00 00 6c 3e 20 3c 6d 74 75 3e 20 3c 73 +R 00 00 01 00 +T 9a 00 00 00 70 65 65 64 3e 20 3c 62 75 66 73 +R 00 00 01 00 +T a5 00 00 00 69 7a 65 3e 20 5b 63 61 6c 6c 5d +R 00 00 01 00 +T b0 00 00 00 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0413_7943_attempt_20to_20writ.rel b/src/nos/lib/messages_lib/0413_7943_attempt_20to_20writ.rel new file mode 100644 index 00000000..08e9441f --- /dev/null +++ b/src/nos/lib/messages_lib/0413_7943_attempt_20to_20writ.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___0413_7943_attempt_20to_20writ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 61 74 74 65 6d 70 74 20 74 +R 00 00 01 00 +T 0b 00 00 00 6f 20 77 72 69 74 65 2d 62 61 63 +R 00 00 01 00 +T 16 00 00 00 6b 20 7a 65 72 6f 62 75 66 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0414_7d37_attend.rel b/src/nos/lib/messages_lib/0414_7d37_attend.rel new file mode 100644 index 00000000..68e5845d --- /dev/null +++ b/src/nos/lib/messages_lib/0414_7d37_attend.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0414_7d37_attend Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 61 74 74 65 6e 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0415_c133_authenticate.rel b/src/nos/lib/messages_lib/0415_c133_authenticate.rel new file mode 100644 index 00000000..ff6d46e3 --- /dev/null +++ b/src/nos/lib/messages_lib/0415_c133_authenticate.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0415_c133_authenticate Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 61 75 74 68 65 6e 74 69 63 +R 00 00 01 00 +T 0b 00 00 00 61 74 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0416_fd47_ax25_20kick_20_3cax.rel b/src/nos/lib/messages_lib/0416_fd47_ax25_20kick_20_3cax.rel new file mode 100644 index 00000000..5f052602 --- /dev/null +++ b/src/nos/lib/messages_lib/0416_fd47_ax25_20kick_20_3cax.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0416_fd47_ax25_20kick_20_3cax Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 61 78 32 35 20 6b 69 63 6b +R 00 00 01 00 +T 0b 00 00 00 20 3c 61 78 63 62 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0417_0003_ax25_20reset_20_3ca.rel b/src/nos/lib/messages_lib/0417_0003_ax25_20reset_20_3ca.rel new file mode 100644 index 00000000..17557550 --- /dev/null +++ b/src/nos/lib/messages_lib/0417_0003_ax25_20reset_20_3ca.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___0417_0003_ax25_20reset_20_3ca Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 61 78 32 35 20 72 65 73 65 +R 00 00 01 00 +T 0b 00 00 00 74 20 3c 61 78 63 62 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0418_ca0a_bad_20destination_2.rel b/src/nos/lib/messages_lib/0418_ca0a_bad_20destination_2.rel new file mode 100644 index 00000000..bcc605df --- /dev/null +++ b/src/nos/lib/messages_lib/0418_ca0a_bad_20destination_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0418_ca0a_bad_20destination_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 62 61 64 20 64 65 73 74 69 +R 00 00 01 00 +T 0b 00 00 00 6e 61 74 69 6f 6e 20 63 61 6c 6c +R 00 00 01 00 +T 16 00 00 00 73 69 67 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0419_60d3_bad_20internet_20ad.rel b/src/nos/lib/messages_lib/0419_60d3_bad_20internet_20ad.rel new file mode 100644 index 00000000..09fb2e28 --- /dev/null +++ b/src/nos/lib/messages_lib/0419_60d3_bad_20internet_20ad.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0419_60d3_bad_20internet_20ad Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 62 61 64 20 69 6e 74 65 72 +R 00 00 01 00 +T 0b 00 00 00 6e 65 74 20 61 64 64 72 65 73 73 +R 00 00 01 00 +T 16 00 00 00 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/041a_0a79_bad_20neighbor_20ca.rel b/src/nos/lib/messages_lib/041a_0a79_bad_20neighbor_20ca.rel new file mode 100644 index 00000000..70559893 --- /dev/null +++ b/src/nos/lib/messages_lib/041a_0a79_bad_20neighbor_20ca.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___041a_0a79_bad_20neighbor_20ca Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 62 61 64 20 6e 65 69 67 68 +R 00 00 01 00 +T 0b 00 00 00 62 6f 72 20 63 61 6c 6c 73 69 67 +R 00 00 01 00 +T 16 00 00 00 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/041b_4126_batch.rel b/src/nos/lib/messages_lib/041b_4126_batch.rel new file mode 100644 index 00000000..90e3fc51 --- /dev/null +++ b/src/nos/lib/messages_lib/041b_4126_batch.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___041b_4126_batch Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 62 61 74 63 68 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/041c_bcb6_bcnodes.rel b/src/nos/lib/messages_lib/041c_bcb6_bcnodes.rel new file mode 100644 index 00000000..670b068b --- /dev/null +++ b/src/nos/lib/messages_lib/041c_bcb6_bcnodes.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___041c_bcb6_bcnodes Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 62 63 6e 6f 64 65 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/041d_0c93_begin_20_2503o_20_2.rel b/src/nos/lib/messages_lib/041d_0c93_begin_20_2503o_20_2.rel new file mode 100644 index 00000000..d2d1a0ef --- /dev/null +++ b/src/nos/lib/messages_lib/041d_0c93_begin_20_2503o_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___041d_0c93_begin_20_2503o_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 62 65 67 69 6e 20 25 30 33 +R 00 00 01 00 +T 0b 00 00 00 6f 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/041e_3245_binary.rel b/src/nos/lib/messages_lib/041e_3245_binary.rel new file mode 100644 index 00000000..afad907f --- /dev/null +++ b/src/nos/lib/messages_lib/041e_3245_binary.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___041e_3245_binary Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 62 69 6e 61 72 79 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/041f_4c4f_blimit.rel b/src/nos/lib/messages_lib/041f_4c4f_blimit.rel new file mode 100644 index 00000000..77e24e7d --- /dev/null +++ b/src/nos/lib/messages_lib/041f_4c4f_blimit.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___041f_4c4f_blimit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 62 6c 69 6d 69 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0420_ff8d_bootp_20_5bnet_5fna.rel b/src/nos/lib/messages_lib/0420_ff8d_bootp_20_5bnet_5fna.rel new file mode 100644 index 00000000..6a3d44b2 --- /dev/null +++ b/src/nos/lib/messages_lib/0420_ff8d_bootp_20_5bnet_5fna.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___0420_ff8d_bootp_20_5bnet_5fna Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 62 6f 6f 74 70 20 5b 6e 65 +R 00 00 01 00 +T 0b 00 00 00 74 5f 6e 61 6d 65 5d 20 5b 73 69 +R 00 00 01 00 +T 16 00 00 00 6c 65 6e 74 5d 20 5b 6e 6f 69 73 +R 00 00 01 00 +T 21 00 00 00 79 5d 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0421_0e8f_bootp_3a_20Net_5fer.rel b/src/nos/lib/messages_lib/0421_0e8f_bootp_3a_20Net_5fer.rel new file mode 100644 index 00000000..e84bba0d --- /dev/null +++ b/src/nos/lib/messages_lib/0421_0e8f_bootp_3a_20Net_5fer.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S ___0421_0e8f_bootp_3a_20Net_5fer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 24 00 62 6f 6f 74 70 3a 20 4e 65 +R 00 00 01 00 +T 0b 00 00 00 74 5f 65 72 72 6f 72 20 25 64 2c +R 00 00 01 00 +T 16 00 00 00 20 6e 6f 20 76 61 6c 75 65 73 20 +R 00 00 01 00 +T 21 00 00 00 73 65 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0422_f5d9_bootp_3a_20timed_20.rel b/src/nos/lib/messages_lib/0422_f5d9_bootp_3a_20timed_20.rel new file mode 100644 index 00000000..29c8c7b8 --- /dev/null +++ b/src/nos/lib/messages_lib/0422_f5d9_bootp_3a_20timed_20.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___0422_f5d9_bootp_3a_20timed_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 62 6f 6f 74 70 3a 20 74 69 +R 00 00 01 00 +T 0b 00 00 00 6d 65 64 20 6f 75 74 2c 20 76 61 +R 00 00 01 00 +T 16 00 00 00 6c 75 65 73 20 6e 6f 74 20 73 65 +R 00 00 01 00 +T 21 00 00 00 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0423_72d6_bp_20_25lx_20tot_20.rel b/src/nos/lib/messages_lib/0423_72d6_bp_20_25lx_20tot_20.rel new file mode 100644 index 00000000..6245f8b0 --- /dev/null +++ b/src/nos/lib/messages_lib/0423_72d6_bp_20_25lx_20tot_20.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 38 flags 0 +S ___0423_72d6_bp_20_25lx_20tot_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 36 00 62 70 20 25 6c 78 20 74 6f +R 00 00 01 00 +T 0b 00 00 00 74 20 73 69 7a 20 25 75 20 64 61 +R 00 00 01 00 +T 16 00 00 00 74 61 20 25 6c 78 20 63 6e 74 20 +R 00 00 01 00 +T 21 00 00 00 25 75 20 6e 65 78 74 20 25 6c 78 +R 00 00 01 00 +T 2c 00 00 00 20 61 6e 65 78 74 20 25 6c 78 0a +R 00 00 01 00 +T 37 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0424_9767_brk.rel b/src/nos/lib/messages_lib/0424_9767_brk.rel new file mode 100644 index 00000000..47e88ed3 --- /dev/null +++ b/src/nos/lib/messages_lib/0424_9767_brk.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0424_9767_brk Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 62 72 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0425_f951_broadcast.rel b/src/nos/lib/messages_lib/0425_f951_broadcast.rel new file mode 100644 index 00000000..8254b4da --- /dev/null +++ b/src/nos/lib/messages_lib/0425_f951_broadcast.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0425_f951_broadcast Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 62 72 6f 61 64 63 61 73 74 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0426_03ff_bsr.rel b/src/nos/lib/messages_lib/0426_03ff_bsr.rel new file mode 100644 index 00000000..ef7950fe --- /dev/null +++ b/src/nos/lib/messages_lib/0426_03ff_bsr.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0426_03ff_bsr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 62 73 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0427_83e6_by_20_25s_20_28_25s.rel b/src/nos/lib/messages_lib/0427_83e6_by_20_25s_20_28_25s.rel new file mode 100644 index 00000000..0837f89b --- /dev/null +++ b/src/nos/lib/messages_lib/0427_83e6_by_20_25s_20_28_25s.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0427_83e6_by_20_25s_20_28_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 62 79 20 25 73 20 28 25 73 +R 00 00 01 00 +T 0b 00 00 00 29 0a 09 69 64 20 41 41 25 6c 64 +R 00 00 01 00 +T 16 00 00 00 20 3b 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0428_69f3_by_20_25s_20with_20.rel b/src/nos/lib/messages_lib/0428_69f3_by_20_25s_20with_20.rel new file mode 100644 index 00000000..1d69c76e --- /dev/null +++ b/src/nos/lib/messages_lib/0428_69f3_by_20_25s_20with_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___0428_69f3_by_20_25s_20with_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 62 79 20 25 73 20 77 69 74 +R 00 00 01 00 +T 0b 00 00 00 68 20 53 4d 54 50 0a 09 69 64 20 +R 00 00 01 00 +T 16 00 00 00 41 41 25 6c 64 20 3b 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0429_9ab1_bye.rel b/src/nos/lib/messages_lib/0429_9ab1_bye.rel new file mode 100644 index 00000000..68e2ea80 --- /dev/null +++ b/src/nos/lib/messages_lib/0429_9ab1_bye.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0429_9ab1_bye Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 62 79 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/042a_7cbf_cache.rel b/src/nos/lib/messages_lib/042a_7cbf_cache.rel new file mode 100644 index 00000000..8fb342a6 --- /dev/null +++ b/src/nos/lib/messages_lib/042a_7cbf_cache.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___042a_7cbf_cache Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 63 61 63 68 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/042b_a3a9_can_27t_20read_20_2.rel b/src/nos/lib/messages_lib/042b_a3a9_can_27t_20read_20_2.rel new file mode 100644 index 00000000..5a69b5d0 --- /dev/null +++ b/src/nos/lib/messages_lib/042b_a3a9_can_27t_20read_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___042b_a3a9_can_27t_20read_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 63 61 6e 27 74 20 72 65 61 +R 00 00 01 00 +T 0b 00 00 00 64 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/042c_f4b4_can_27t_20trace_20i.rel b/src/nos/lib/messages_lib/042c_f4b4_can_27t_20trace_20i.rel new file mode 100644 index 00000000..83bdf667 --- /dev/null +++ b/src/nos/lib/messages_lib/042c_f4b4_can_27t_20trace_20i.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___042c_f4b4_can_27t_20trace_20i Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 63 61 6e 27 74 20 74 72 61 +R 00 00 01 00 +T 0b 00 00 00 63 65 20 69 6e 76 61 6c 69 64 20 +R 00 00 01 00 +T 16 00 00 00 73 79 73 63 61 6c 6c 20 69 6e 64 +R 00 00 01 00 +T 21 00 00 00 65 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/042d_9aa7_cd.rel b/src/nos/lib/messages_lib/042d_9aa7_cd.rel new file mode 100644 index 00000000..81cae3d3 --- /dev/null +++ b/src/nos/lib/messages_lib/042d_9aa7_cd.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___042d_9aa7_cd Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 63 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/042e_42c2_cd_20_3cdirectory_3.rel b/src/nos/lib/messages_lib/042e_42c2_cd_20_3cdirectory_3.rel new file mode 100644 index 00000000..9f3c238c --- /dev/null +++ b/src/nos/lib/messages_lib/042e_42c2_cd_20_3cdirectory_3.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___042e_42c2_cd_20_3cdirectory_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 63 64 20 3c 64 69 72 65 63 +R 00 00 01 00 +T 0b 00 00 00 74 6f 72 79 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/042f_35a9_chat.rel b/src/nos/lib/messages_lib/042f_35a9_chat.rel new file mode 100644 index 00000000..41570441 --- /dev/null +++ b/src/nos/lib/messages_lib/042f_35a9_chat.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___042f_35a9_chat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 63 68 61 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0430_743f_chdir.rel b/src/nos/lib/messages_lib/0430_743f_chdir.rel new file mode 100644 index 00000000..08108054 --- /dev/null +++ b/src/nos/lib/messages_lib/0430_743f_chdir.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0430_743f_chdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 63 68 64 69 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0431_5ed3_check.rel b/src/nos/lib/messages_lib/0431_5ed3_check.rel new file mode 100644 index 00000000..43f83dcc --- /dev/null +++ b/src/nos/lib/messages_lib/0431_5ed3_check.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0431_5ed3_check Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 63 68 65 63 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0432_40b3_check_20_3chost_3e.rel b/src/nos/lib/messages_lib/0432_40b3_check_20_3chost_3e.rel new file mode 100644 index 00000000..8b5eaef0 --- /dev/null +++ b/src/nos/lib/messages_lib/0432_40b3_check_20_3chost_3e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0432_40b3_check_20_3chost_3e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 63 68 65 63 6b 20 3c 68 6f +R 00 00 01 00 +T 0b 00 00 00 73 74 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0433_c946_chmod.rel b/src/nos/lib/messages_lib/0433_c946_chmod.rel new file mode 100644 index 00000000..f21b5120 --- /dev/null +++ b/src/nos/lib/messages_lib/0433_c946_chmod.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0433_c946_chmod Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 63 68 6d 6f 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0434_b786_choketime.rel b/src/nos/lib/messages_lib/0434_b786_choketime.rel new file mode 100644 index 00000000..4669a919 --- /dev/null +++ b/src/nos/lib/messages_lib/0434_b786_choketime.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0434_b786_choketime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 63 68 6f 6b 65 74 69 6d 65 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0435_88f5_chown.rel b/src/nos/lib/messages_lib/0435_88f5_chown.rel new file mode 100644 index 00000000..48fde64e --- /dev/null +++ b/src/nos/lib/messages_lib/0435_88f5_chown.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0435_88f5_chown Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 63 68 6f 77 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0436_87a8_chroot.rel b/src/nos/lib/messages_lib/0436_87a8_chroot.rel new file mode 100644 index 00000000..1f44caf3 --- /dev/null +++ b/src/nos/lib/messages_lib/0436_87a8_chroot.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0436_87a8_chroot Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 63 68 72 6f 6f 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0437_4822_clean.rel b/src/nos/lib/messages_lib/0437_4822_clean.rel new file mode 100644 index 00000000..bfa0358d --- /dev/null +++ b/src/nos/lib/messages_lib/0437_4822_clean.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0437_4822_clean Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 63 6c 65 61 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0438_23aa_close.rel b/src/nos/lib/messages_lib/0438_23aa_close.rel new file mode 100644 index 00000000..ee92156c --- /dev/null +++ b/src/nos/lib/messages_lib/0438_23aa_close.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0438_23aa_close Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 63 6c 6f 73 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0439_2b22_close_20FTP.rel b/src/nos/lib/messages_lib/0439_2b22_close_20FTP.rel new file mode 100644 index 00000000..67d00088 --- /dev/null +++ b/src/nos/lib/messages_lib/0439_2b22_close_20FTP.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0439_2b22_close_20FTP Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 63 6c 6f 73 65 20 46 54 50 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/043a_f93d_close_20Finger.rel b/src/nos/lib/messages_lib/043a_f93d_close_20Finger.rel new file mode 100644 index 00000000..68a6f4e0 --- /dev/null +++ b/src/nos/lib/messages_lib/043a_f93d_close_20Finger.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___043a_f93d_close_20Finger Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 63 6c 6f 73 65 20 46 69 6e +R 00 00 01 00 +T 0b 00 00 00 67 65 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/043b_0957_close_20POP.rel b/src/nos/lib/messages_lib/043b_0957_close_20POP.rel new file mode 100644 index 00000000..8161c3c5 --- /dev/null +++ b/src/nos/lib/messages_lib/043b_0957_close_20POP.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___043b_0957_close_20POP Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 63 6c 6f 73 65 20 50 4f 50 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/043c_b85c_close_20POP_20_2d_2.rel b/src/nos/lib/messages_lib/043c_b85c_close_20POP_20_2d_2.rel new file mode 100644 index 00000000..9c1861d4 --- /dev/null +++ b/src/nos/lib/messages_lib/043c_b85c_close_20POP_20_2d_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___043c_b85c_close_20POP_20_2d_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 63 6c 6f 73 65 20 50 4f 50 +R 00 00 01 00 +T 0b 00 00 00 20 2d 20 6e 6f 20 73 70 61 63 65 +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/043d_83a3_close_20SMTP.rel b/src/nos/lib/messages_lib/043d_83a3_close_20SMTP.rel new file mode 100644 index 00000000..b34c25be --- /dev/null +++ b/src/nos/lib/messages_lib/043d_83a3_close_20SMTP.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___043d_83a3_close_20SMTP Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 63 6c 6f 73 65 20 53 4d 54 +R 00 00 01 00 +T 0b 00 00 00 50 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/043e_b949_close_20SMTP_20_2d_.rel b/src/nos/lib/messages_lib/043e_b949_close_20SMTP_20_2d_.rel new file mode 100644 index 00000000..350368cd --- /dev/null +++ b/src/nos/lib/messages_lib/043e_b949_close_20SMTP_20_2d_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___043e_b949_close_20SMTP_20_2d_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 63 6c 6f 73 65 20 53 4d 54 +R 00 00 01 00 +T 0b 00 00 00 50 20 2d 20 6e 6f 20 73 70 61 63 +R 00 00 01 00 +T 16 00 00 00 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/043f_423c_close_20discard.rel b/src/nos/lib/messages_lib/043f_423c_close_20discard.rel new file mode 100644 index 00000000..5244c1d6 --- /dev/null +++ b/src/nos/lib/messages_lib/043f_423c_close_20discard.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___043f_423c_close_20discard Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 63 6c 6f 73 65 20 64 69 73 +R 00 00 01 00 +T 0b 00 00 00 63 61 72 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0440_419d_close_20echo.rel b/src/nos/lib/messages_lib/0440_419d_close_20echo.rel new file mode 100644 index 00000000..e22418ac --- /dev/null +++ b/src/nos/lib/messages_lib/0440_419d_close_20echo.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0440_419d_close_20echo Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 63 6c 6f 73 65 20 65 63 68 +R 00 00 01 00 +T 0b 00 00 00 6f 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0441_03ad_close_20term.rel b/src/nos/lib/messages_lib/0441_03ad_close_20term.rel new file mode 100644 index 00000000..fcf47bb2 --- /dev/null +++ b/src/nos/lib/messages_lib/0441_03ad_close_20term.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0441_03ad_close_20term Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 63 6c 6f 73 65 20 74 65 72 +R 00 00 01 00 +T 0b 00 00 00 6d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0442_83dc_code_20_25u_20arg_2.rel b/src/nos/lib/messages_lib/0442_83dc_code_20_25u_20arg_2.rel new file mode 100644 index 00000000..9f7515f8 --- /dev/null +++ b/src/nos/lib/messages_lib/0442_83dc_code_20_25u_20arg_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0442_83dc_code_20_25u_20arg_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 63 6f 64 65 20 25 75 20 61 +R 00 00 01 00 +T 0b 00 00 00 72 67 20 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0443_ea90_compare.rel b/src/nos/lib/messages_lib/0443_ea90_compare.rel new file mode 100644 index 00000000..4d356374 --- /dev/null +++ b/src/nos/lib/messages_lib/0443_ea90_compare.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0443_ea90_compare Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 63 6f 6d 70 61 72 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0444_a613_compare_20_3cremote.rel b/src/nos/lib/messages_lib/0444_a613_compare_20_3cremote.rel new file mode 100644 index 00000000..476ea860 --- /dev/null +++ b/src/nos/lib/messages_lib/0444_a613_compare_20_3cremote.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___0444_a613_compare_20_3cremote Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 63 6f 6d 70 61 72 65 20 3c +R 00 00 01 00 +T 0b 00 00 00 72 65 6d 6f 74 65 66 69 6c 65 3e +R 00 00 01 00 +T 16 00 00 00 20 5b 3c 6c 6f 63 61 6c 66 69 6c +R 00 00 01 00 +T 21 00 00 00 65 3e 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0445_fbc2_compress.rel b/src/nos/lib/messages_lib/0445_fbc2_compress.rel new file mode 100644 index 00000000..c89838ef --- /dev/null +++ b/src/nos/lib/messages_lib/0445_fbc2_compress.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0445_fbc2_compress Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 63 6f 6d 70 72 65 73 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0446_3845_compressed_20.rel b/src/nos/lib/messages_lib/0446_3845_compressed_20.rel new file mode 100644 index 00000000..385cb6ad --- /dev/null +++ b/src/nos/lib/messages_lib/0446_3845_compressed_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0446_3845_compressed_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 63 6f 6d 70 72 65 73 73 65 +R 00 00 01 00 +T 0b 00 00 00 64 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0447_26b1_configure.rel b/src/nos/lib/messages_lib/0447_26b1_configure.rel new file mode 100644 index 00000000..fc519c19 --- /dev/null +++ b/src/nos/lib/messages_lib/0447_26b1_configure.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0447_26b1_configure Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 63 6f 6e 66 69 67 75 72 65 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0448_749f_connect.rel b/src/nos/lib/messages_lib/0448_749f_connect.rel new file mode 100644 index 00000000..efea14b4 --- /dev/null +++ b/src/nos/lib/messages_lib/0448_749f_connect.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0448_749f_connect Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 63 6f 6e 6e 65 63 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0449_5769_control.rel b/src/nos/lib/messages_lib/0449_5769_control.rel new file mode 100644 index 00000000..7706f326 --- /dev/null +++ b/src/nos/lib/messages_lib/0449_5769_control.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0449_5769_control Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 63 6f 6e 74 72 6f 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/044a_941e_control_20up_20_7c_.rel b/src/nos/lib/messages_lib/044a_941e_control_20up_20_7c_.rel new file mode 100644 index 00000000..837bd30e --- /dev/null +++ b/src/nos/lib/messages_lib/044a_941e_control_20up_20_7c_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___044a_941e_control_20up_20_7c_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 63 6f 6e 74 72 6f 6c 20 75 +R 00 00 01 00 +T 0b 00 00 00 70 20 7c 20 64 6f 77 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/044b_2aba_control_3a_20_25s_0.rel b/src/nos/lib/messages_lib/044b_2aba_control_3a_20_25s_0.rel new file mode 100644 index 00000000..83402a34 --- /dev/null +++ b/src/nos/lib/messages_lib/044b_2aba_control_3a_20_25s_0.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___044b_2aba_control_3a_20_25s_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 63 6f 6e 74 72 6f 6c 3a 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/044c_4bf4_cwd.rel b/src/nos/lib/messages_lib/044c_4bf4_cwd.rel new file mode 100644 index 00000000..5a8d0f91 --- /dev/null +++ b/src/nos/lib/messages_lib/044c_4bf4_cwd.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___044c_4bf4_cwd Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 63 77 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/044d_62af_d_5finit_28_29.rel b/src/nos/lib/messages_lib/044d_62af_d_5finit_28_29.rel new file mode 100644 index 00000000..267509e1 --- /dev/null +++ b/src/nos/lib/messages_lib/044d_62af_d_5finit_28_29.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___044d_62af_d_5finit_28_29 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 64 5f 69 6e 69 74 28 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/044e_5a9b_d_5finit_28_29_20ma.rel b/src/nos/lib/messages_lib/044e_5a9b_d_5finit_28_29_20ma.rel new file mode 100644 index 00000000..961d9b28 --- /dev/null +++ b/src/nos/lib/messages_lib/044e_5a9b_d_5finit_28_29_20ma.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___044e_5a9b_d_5finit_28_29_20ma Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 64 5f 69 6e 69 74 28 29 20 +R 00 00 01 00 +T 0b 00 00 00 6d 61 6a 6f 72 20 25 64 20 6d 69 +R 00 00 01 00 +T 16 00 00 00 6e 6f 72 20 25 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/044f_62a8_debug.rel b/src/nos/lib/messages_lib/044f_62a8_debug.rel new file mode 100644 index 00000000..697bab9b --- /dev/null +++ b/src/nos/lib/messages_lib/044f_62a8_debug.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___044f_62a8_debug Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 64 65 62 75 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0450_740d_default.rel b/src/nos/lib/messages_lib/0450_740d_default.rel new file mode 100644 index 00000000..ea605083 --- /dev/null +++ b/src/nos/lib/messages_lib/0450_740d_default.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0450_740d_default Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 64 65 66 61 75 6c 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0451_db45_defaultfile.rel b/src/nos/lib/messages_lib/0451_db45_defaultfile.rel new file mode 100644 index 00000000..5b531627 --- /dev/null +++ b/src/nos/lib/messages_lib/0451_db45_defaultfile.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0451_db45_defaultfile Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 64 65 66 61 75 6c 74 66 69 +R 00 00 01 00 +T 0b 00 00 00 6c 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0452_818b_delay_20_25lu_0a.rel b/src/nos/lib/messages_lib/0452_818b_delay_20_25lu_0a.rel new file mode 100644 index 00000000..2aae69df --- /dev/null +++ b/src/nos/lib/messages_lib/0452_818b_delay_20_25lu_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0452_818b_delay_20_25lu_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 64 65 6c 61 79 20 25 6c 75 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0453_2c87_dele.rel b/src/nos/lib/messages_lib/0453_2c87_dele.rel new file mode 100644 index 00000000..e102abc1 --- /dev/null +++ b/src/nos/lib/messages_lib/0453_2c87_dele.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0453_2c87_dele Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 64 65 6c 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0454_89a5_delete.rel b/src/nos/lib/messages_lib/0454_89a5_delete.rel new file mode 100644 index 00000000..dfdfc06b --- /dev/null +++ b/src/nos/lib/messages_lib/0454_89a5_delete.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0454_89a5_delete Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 64 65 6c 65 74 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0455_3919_delete_20_3cfile_3e.rel b/src/nos/lib/messages_lib/0455_3919_delete_20_3cfile_3e.rel new file mode 100644 index 00000000..1c8831ff --- /dev/null +++ b/src/nos/lib/messages_lib/0455_3919_delete_20_3cfile_3e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0455_3919_delete_20_3cfile_3e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 64 65 6c 65 74 65 20 3c 66 +R 00 00 01 00 +T 0b 00 00 00 69 6c 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0456_6466_destlist.rel b/src/nos/lib/messages_lib/0456_6466_destlist.rel new file mode 100644 index 00000000..c5991885 --- /dev/null +++ b/src/nos/lib/messages_lib/0456_6466_destlist.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0456_6466_destlist Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 64 65 73 74 6c 69 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0457_cfc1_detach.rel b/src/nos/lib/messages_lib/0457_cfc1_detach.rel new file mode 100644 index 00000000..e05d195e --- /dev/null +++ b/src/nos/lib/messages_lib/0457_cfc1_detach.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0457_cfc1_detach Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 64 65 74 61 63 68 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0458_26f3_detach_20_3cinterfa.rel b/src/nos/lib/messages_lib/0458_26f3_detach_20_3cinterfa.rel new file mode 100644 index 00000000..081f60ef --- /dev/null +++ b/src/nos/lib/messages_lib/0458_26f3_detach_20_3cinterfa.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0458_26f3_detach_20_3cinterfa Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 64 65 74 61 63 68 20 3c 69 +R 00 00 01 00 +T 0b 00 00 00 6e 74 65 72 66 61 63 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0459_3f12_devio_5fgarbage_3a_.rel b/src/nos/lib/messages_lib/0459_3f12_devio_5fgarbage_3a_.rel new file mode 100644 index 00000000..7dabbde8 --- /dev/null +++ b/src/nos/lib/messages_lib/0459_3f12_devio_5fgarbage_3a_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___0459_3f12_devio_5fgarbage_3a_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 64 65 76 69 6f 5f 67 61 72 +R 00 00 01 00 +T 0b 00 00 00 62 61 67 65 3a 20 57 41 52 4e 49 +R 00 00 01 00 +T 16 00 00 00 4e 47 21 20 49 2f 4f 20 65 72 72 +R 00 00 01 00 +T 21 00 00 00 6f 72 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/045a_0f61_dfile_5fsearch_3a_2.rel b/src/nos/lib/messages_lib/045a_0f61_dfile_5fsearch_3a_2.rel new file mode 100644 index 00000000..43e4c655 --- /dev/null +++ b/src/nos/lib/messages_lib/045a_0f61_dfile_5fsearch_3a_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27 flags 0 +S ___045a_0f61_dfile_5fsearch_3a_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 25 00 64 66 69 6c 65 5f 73 65 61 +R 00 00 01 00 +T 0b 00 00 00 72 63 68 3a 20 63 61 6e 27 74 20 +R 00 00 01 00 +T 16 00 00 00 67 65 74 20 66 69 6c 65 20 73 74 +R 00 00 01 00 +T 21 00 00 00 61 74 75 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/045b_4eba_dfile_5fupdate_3a_2.rel b/src/nos/lib/messages_lib/045b_4eba_dfile_5fupdate_3a_2.rel new file mode 100644 index 00000000..b6946def --- /dev/null +++ b/src/nos/lib/messages_lib/045b_4eba_dfile_5fupdate_3a_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___045b_4eba_dfile_5fupdate_3a_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 64 66 69 6c 65 5f 75 70 64 +R 00 00 01 00 +T 0b 00 00 00 61 74 65 3a 20 63 61 6e 27 74 20 +R 00 00 01 00 +T 16 00 00 00 63 72 65 61 74 65 20 25 73 21 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/045c_5b47_dfile_5fupdate_3a_2.rel b/src/nos/lib/messages_lib/045c_5b47_dfile_5fupdate_3a_2.rel new file mode 100644 index 00000000..732e2b8b --- /dev/null +++ b/src/nos/lib/messages_lib/045c_5b47_dfile_5fupdate_3a_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2c flags 0 +S ___045c_5b47_dfile_5fupdate_3a_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2a 00 64 66 69 6c 65 5f 75 70 64 +R 00 00 01 00 +T 0b 00 00 00 61 74 65 3a 20 63 61 6e 27 74 20 +R 00 00 01 00 +T 16 00 00 00 67 65 74 20 6e 65 77 5f 66 69 6c +R 00 00 01 00 +T 21 00 00 00 65 20 73 74 61 74 75 73 21 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/045d_ef06_dfile_5fupdate_3a_2.rel b/src/nos/lib/messages_lib/045d_ef06_dfile_5fupdate_3a_2.rel new file mode 100644 index 00000000..6e50484e --- /dev/null +++ b/src/nos/lib/messages_lib/045d_ef06_dfile_5fupdate_3a_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2c flags 0 +S ___045d_ef06_dfile_5fupdate_3a_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2a 00 64 66 69 6c 65 5f 75 70 64 +R 00 00 01 00 +T 0b 00 00 00 61 74 65 3a 20 63 61 6e 27 74 20 +R 00 00 01 00 +T 16 00 00 00 67 65 74 20 6f 6c 64 5f 66 69 6c +R 00 00 01 00 +T 21 00 00 00 65 20 73 74 61 74 75 73 21 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/045e_0173_dialer.rel b/src/nos/lib/messages_lib/045e_0173_dialer.rel new file mode 100644 index 00000000..48fcfc3e --- /dev/null +++ b/src/nos/lib/messages_lib/045e_0173_dialer.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___045e_0173_dialer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 64 69 61 6c 65 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/045f_8d0b_dialer_20_3ciface_3.rel b/src/nos/lib/messages_lib/045f_8d0b_dialer_20_3ciface_3.rel new file mode 100644 index 00000000..4ab85f07 --- /dev/null +++ b/src/nos/lib/messages_lib/045f_8d0b_dialer_20_3ciface_3.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 33 flags 0 +S ___045f_8d0b_dialer_20_3ciface_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 31 00 64 69 61 6c 65 72 20 3c 69 +R 00 00 01 00 +T 0b 00 00 00 66 61 63 65 3e 20 3c 74 69 6d 65 +R 00 00 01 00 +T 16 00 00 00 6f 75 74 3e 20 5b 64 65 76 69 63 +R 00 00 01 00 +T 21 00 00 00 65 2d 64 65 70 65 6e 64 65 6e 74 +R 00 00 01 00 +T 2c 00 00 00 20 61 72 67 73 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0460_18c3_digipeat.rel b/src/nos/lib/messages_lib/0460_18c3_digipeat.rel new file mode 100644 index 00000000..808ba7b5 --- /dev/null +++ b/src/nos/lib/messages_lib/0460_18c3_digipeat.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0460_18c3_digipeat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 64 69 67 69 70 65 61 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0461_bdc7_dir.rel b/src/nos/lib/messages_lib/0461_bdc7_dir.rel new file mode 100644 index 00000000..239124e8 --- /dev/null +++ b/src/nos/lib/messages_lib/0461_bdc7_dir.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0461_bdc7_dir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 64 69 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0462_5c0a_directory.rel b/src/nos/lib/messages_lib/0462_5c0a_directory.rel new file mode 100644 index 00000000..9e9dd6b5 --- /dev/null +++ b/src/nos/lib/messages_lib/0462_5c0a_directory.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0462_5c0a_directory Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 64 69 72 65 63 74 6f 72 79 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0463_176f_discard.rel b/src/nos/lib/messages_lib/0463_176f_discard.rel new file mode 100644 index 00000000..45a2c473 --- /dev/null +++ b/src/nos/lib/messages_lib/0463_176f_discard.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0463_176f_discard Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 64 69 73 63 61 72 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0464_684a_discard_20expired_2.rel b/src/nos/lib/messages_lib/0464_684a_discard_20expired_2.rel new file mode 100644 index 00000000..f9a99d0e --- /dev/null +++ b/src/nos/lib/messages_lib/0464_684a_discard_20expired_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___0464_684a_discard_20expired_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 64 69 73 63 61 72 64 20 65 +R 00 00 01 00 +T 0b 00 00 00 78 70 69 72 65 64 20 72 65 63 6f +R 00 00 01 00 +T 16 00 00 00 72 64 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0465_f701_disconnect.rel b/src/nos/lib/messages_lib/0465_f701_disconnect.rel new file mode 100644 index 00000000..4666440b --- /dev/null +++ b/src/nos/lib/messages_lib/0465_f701_disconnect.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0465_f701_disconnect Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 64 69 73 63 6f 6e 6e 65 63 +R 00 00 01 00 +T 0b 00 00 00 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0466_e146_dns.rel b/src/nos/lib/messages_lib/0466_e146_dns.rel new file mode 100644 index 00000000..5912ba23 --- /dev/null +++ b/src/nos/lib/messages_lib/0466_e146_dns.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0466_e146_dns Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 64 6e 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0467_8f79_dns_5fquery_3a_20qu.rel b/src/nos/lib/messages_lib/0467_8f79_dns_5fquery_3a_20qu.rel new file mode 100644 index 00000000..ec557bd9 --- /dev/null +++ b/src/nos/lib/messages_lib/0467_8f79_dns_5fquery_3a_20qu.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___0467_8f79_dns_5fquery_3a_20qu Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 64 6e 73 5f 71 75 65 72 79 +R 00 00 01 00 +T 0b 00 00 00 3a 20 71 75 65 72 79 69 6e 67 20 +R 00 00 01 00 +T 16 00 00 00 73 65 72 76 65 72 20 25 73 20 66 +R 00 00 01 00 +T 21 00 00 00 6f 72 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0468_6da5_dns_5fquery_3a_20re.rel b/src/nos/lib/messages_lib/0468_6da5_dns_5fquery_3a_20re.rel new file mode 100644 index 00000000..e52f4167 --- /dev/null +++ b/src/nos/lib/messages_lib/0468_6da5_dns_5fquery_3a_20re.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29 flags 0 +S ___0468_6da5_dns_5fquery_3a_20re Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 27 00 64 6e 73 5f 71 75 65 72 79 +R 00 00 01 00 +T 0b 00 00 00 3a 20 72 65 63 65 69 76 65 64 20 +R 00 00 01 00 +T 16 00 00 00 6d 65 73 73 61 67 65 20 6c 65 6e +R 00 00 01 00 +T 21 00 00 00 67 74 68 20 25 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0469_041c_doexit_3a_20won_27t.rel b/src/nos/lib/messages_lib/0469_041c_doexit_3a_20won_27t.rel new file mode 100644 index 00000000..500c8d59 --- /dev/null +++ b/src/nos/lib/messages_lib/0469_041c_doexit_3a_20won_27t.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0469_041c_doexit_3a_20won_27t Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 64 6f 65 78 69 74 3a 20 77 +R 00 00 01 00 +T 0b 00 00 00 6f 6e 27 74 20 65 78 69 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/046a_21ed_domain.rel b/src/nos/lib/messages_lib/046a_21ed_domain.rel new file mode 100644 index 00000000..aff41841 --- /dev/null +++ b/src/nos/lib/messages_lib/046a_21ed_domain.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___046a_21ed_domain Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 64 6f 6d 61 69 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/046b_e0fd_down_20script_3a_20.rel b/src/nos/lib/messages_lib/046b_e0fd_down_20script_3a_20.rel new file mode 100644 index 00000000..5c50488c --- /dev/null +++ b/src/nos/lib/messages_lib/046b_e0fd_down_20script_3a_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___046b_e0fd_down_20script_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 64 6f 77 6e 20 73 63 72 69 +R 00 00 01 00 +T 0b 00 00 00 70 74 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/046c_050c_download.rel b/src/nos/lib/messages_lib/046c_050c_download.rel new file mode 100644 index 00000000..2a3762b2 --- /dev/null +++ b/src/nos/lib/messages_lib/046c_050c_download.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___046c_050c_download Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 64 6f 77 6e 6c 6f 61 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/046d_4853_drop.rel b/src/nos/lib/messages_lib/046d_4853_drop.rel new file mode 100644 index 00000000..40146ef0 --- /dev/null +++ b/src/nos/lib/messages_lib/046d_4853_drop.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___046d_4853_drop Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 64 72 6f 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/046e_0532_drop_20_3chostid_3e.rel b/src/nos/lib/messages_lib/046e_0532_drop_20_3chostid_3e.rel new file mode 100644 index 00000000..091e6b53 --- /dev/null +++ b/src/nos/lib/messages_lib/046e_0532_drop_20_3chostid_3e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___046e_0532_drop_20_3chostid_3e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 64 72 6f 70 20 3c 68 6f 73 +R 00 00 01 00 +T 0b 00 00 00 74 69 64 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/046f_e7cf_dropserver.rel b/src/nos/lib/messages_lib/046f_e7cf_dropserver.rel new file mode 100644 index 00000000..00b70ac2 --- /dev/null +++ b/src/nos/lib/messages_lib/046f_e7cf_dropserver.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___046f_e7cf_dropserver Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 64 72 6f 70 73 65 72 76 65 +R 00 00 01 00 +T 0b 00 00 00 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0470_a2e4_dup.rel b/src/nos/lib/messages_lib/0470_a2e4_dup.rel new file mode 100644 index 00000000..591125db --- /dev/null +++ b/src/nos/lib/messages_lib/0470_a2e4_dup.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0470_a2e4_dup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 64 75 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0471_b319_dup2.rel b/src/nos/lib/messages_lib/0471_b319_dup2.rel new file mode 100644 index 00000000..30cda98e --- /dev/null +++ b/src/nos/lib/messages_lib/0471_b319_dup2.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0471_b319_dup2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 64 75 70 32 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0472_cb91_dynip.rel b/src/nos/lib/messages_lib/0472_cb91_dynip.rel new file mode 100644 index 00000000..41222a7e --- /dev/null +++ b/src/nos/lib/messages_lib/0472_cb91_dynip.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0472_cb91_dynip Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 64 79 6e 69 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0473_2edf_echo.rel b/src/nos/lib/messages_lib/0473_2edf_echo.rel new file mode 100644 index 00000000..e0c21b20 --- /dev/null +++ b/src/nos/lib/messages_lib/0473_2edf_echo.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0473_2edf_echo Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 65 63 68 6f 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0474_7366_empty_20packet_21_2.rel b/src/nos/lib/messages_lib/0474_7366_empty_20packet_21_2.rel new file mode 100644 index 00000000..7de73148 --- /dev/null +++ b/src/nos/lib/messages_lib/0474_7366_empty_20packet_21_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0474_7366_empty_20packet_21_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 65 6d 70 74 79 20 70 61 63 +R 00 00 01 00 +T 0b 00 00 00 6b 65 74 21 21 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0475_48fd_encapsulation.rel b/src/nos/lib/messages_lib/0475_48fd_encapsulation.rel new file mode 100644 index 00000000..e0757255 --- /dev/null +++ b/src/nos/lib/messages_lib/0475_48fd_encapsulation.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0475_48fd_encapsulation Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 65 6e 63 61 70 73 75 6c 61 +R 00 00 01 00 +T 0b 00 00 00 74 69 6f 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0476_4a34_eol.rel b/src/nos/lib/messages_lib/0476_4a34_eol.rel new file mode 100644 index 00000000..39970517 --- /dev/null +++ b/src/nos/lib/messages_lib/0476_4a34_eol.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0476_4a34_eol Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 65 6f 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0477_b4ae_escape.rel b/src/nos/lib/messages_lib/0477_b4ae_escape.rel new file mode 100644 index 00000000..bb4c5111 --- /dev/null +++ b/src/nos/lib/messages_lib/0477_b4ae_escape.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0477_b4ae_escape Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 65 73 63 61 70 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0478_858e_escc.rel b/src/nos/lib/messages_lib/0478_858e_escc.rel new file mode 100644 index 00000000..15e98463 --- /dev/null +++ b/src/nos/lib/messages_lib/0478_858e_escc.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0478_858e_escc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 65 73 63 63 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0479_d50a_escc_25d_3a_20No_20.rel b/src/nos/lib/messages_lib/0479_d50a_escc_25d_3a_20No_20.rel new file mode 100644 index 00000000..d62b870c --- /dev/null +++ b/src/nos/lib/messages_lib/0479_d50a_escc_25d_3a_20No_20.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___0479_d50a_escc_25d_3a_20No_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 65 73 63 63 25 64 3a 20 4e +R 00 00 01 00 +T 0b 00 00 00 6f 20 73 70 61 63 65 20 66 6f 72 +R 00 00 01 00 +T 16 00 00 00 20 72 78 20 62 75 66 66 65 72 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/047a_6362_esccstat.rel b/src/nos/lib/messages_lib/047a_6362_esccstat.rel new file mode 100644 index 00000000..f4d16f4c --- /dev/null +++ b/src/nos/lib/messages_lib/047a_6362_esccstat.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___047a_6362_esccstat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 65 73 63 63 73 74 61 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/047b_59b0_execve.rel b/src/nos/lib/messages_lib/047b_59b0_execve.rel new file mode 100644 index 00000000..8c5e2050 --- /dev/null +++ b/src/nos/lib/messages_lib/047b_59b0_execve.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___047b_59b0_execve Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 65 78 65 63 76 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/047c_3566_exit.rel b/src/nos/lib/messages_lib/047c_3566_exit.rel new file mode 100644 index 00000000..727815b7 --- /dev/null +++ b/src/nos/lib/messages_lib/047c_3566_exit.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___047c_3566_exit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 65 78 69 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/047d_bd2b_expired.rel b/src/nos/lib/messages_lib/047d_bd2b_expired.rel new file mode 100644 index 00000000..ada19a66 --- /dev/null +++ b/src/nos/lib/messages_lib/047d_bd2b_expired.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___047d_bd2b_expired Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 65 78 70 69 72 65 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/047e_bce0_failure.rel b/src/nos/lib/messages_lib/047e_bce0_failure.rel new file mode 100644 index 00000000..2f7537af --- /dev/null +++ b/src/nos/lib/messages_lib/047e_bce0_failure.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___047e_bce0_failure Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 66 61 69 6c 75 72 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/047f_086a_falign.rel b/src/nos/lib/messages_lib/047f_086a_falign.rel new file mode 100644 index 00000000..923ebbde --- /dev/null +++ b/src/nos/lib/messages_lib/047f_086a_falign.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___047f_086a_falign Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 66 61 6c 69 67 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0480_303b_files.rel b/src/nos/lib/messages_lib/0480_303b_files.rel new file mode 100644 index 00000000..5fe545d2 --- /dev/null +++ b/src/nos/lib/messages_lib/0480_303b_files.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0480_303b_files Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 66 69 6c 65 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0481_d6a7_filter_20mode_20is_.rel b/src/nos/lib/messages_lib/0481_d6a7_filter_20mode_20is_.rel new file mode 100644 index 00000000..28963d19 --- /dev/null +++ b/src/nos/lib/messages_lib/0481_d6a7_filter_20mode_20is_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0481_d6a7_filter_20mode_20is_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 66 69 6c 74 65 72 20 6d 6f +R 00 00 01 00 +T 0b 00 00 00 64 65 20 69 73 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0482_927a_finger.rel b/src/nos/lib/messages_lib/0482_927a_finger.rel new file mode 100644 index 00000000..22eacb8d --- /dev/null +++ b/src/nos/lib/messages_lib/0482_927a_finger.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0482_927a_finger Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 66 69 6e 67 65 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0483_8ea1_finger_20name_40hos.rel b/src/nos/lib/messages_lib/0483_8ea1_finger_20name_40hos.rel new file mode 100644 index 00000000..76ddaad5 --- /dev/null +++ b/src/nos/lib/messages_lib/0483_8ea1_finger_20name_40hos.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0483_8ea1_finger_20name_40hos Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 66 69 6e 67 65 72 20 6e 61 +R 00 00 01 00 +T 0b 00 00 00 6d 65 40 68 6f 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0484_28f4_flush.rel b/src/nos/lib/messages_lib/0484_28f4_flush.rel new file mode 100644 index 00000000..9c5aa9f8 --- /dev/null +++ b/src/nos/lib/messages_lib/0484_28f4_flush.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0484_28f4_flush Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 66 6c 75 73 68 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0485_dc8b_fmount_3a_20can_27t.rel b/src/nos/lib/messages_lib/0485_dc8b_fmount_3a_20can_27t.rel new file mode 100644 index 00000000..1af9638a --- /dev/null +++ b/src/nos/lib/messages_lib/0485_dc8b_fmount_3a_20can_27t.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___0485_dc8b_fmount_3a_20can_27t Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 66 6d 6f 75 6e 74 3a 20 63 +R 00 00 01 00 +T 0b 00 00 00 61 6e 27 74 20 6f 70 65 6e 20 66 +R 00 00 01 00 +T 16 00 00 00 73 20 6f 6e 20 30 78 25 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0486_8074_fork.rel b/src/nos/lib/messages_lib/0486_8074_fork.rel new file mode 100644 index 00000000..778a6e8a --- /dev/null +++ b/src/nos/lib/messages_lib/0486_8074_fork.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0486_8074_fork Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 66 6f 72 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0487_8227_forward.rel b/src/nos/lib/messages_lib/0487_8227_forward.rel new file mode 100644 index 00000000..2a23e93e --- /dev/null +++ b/src/nos/lib/messages_lib/0487_8227_forward.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0487_8227_forward Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 66 6f 72 77 61 72 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0488_c066_fp_20_20_20_20_20_2.rel b/src/nos/lib/messages_lib/0488_c066_fp_20_20_20_20_20_2.rel new file mode 100644 index 00000000..06bc379c --- /dev/null +++ b/src/nos/lib/messages_lib/0488_c066_fp_20_20_20_20_20_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S ___0488_c066_fp_20_20_20_20_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2e 00 66 70 20 20 20 20 20 20 20 +R 00 00 01 00 +T 0b 00 00 00 66 64 20 20 20 72 65 66 20 20 65 +R 00 00 01 00 +T 16 00 00 00 6f 6c 20 20 20 74 79 70 65 20 6d +R 00 00 01 00 +T 21 00 00 00 6f 64 20 62 75 66 20 20 66 6c 61 +R 00 00 01 00 +T 2c 00 00 00 67 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0489_9a2a_free_3a_20WARNING_2.rel b/src/nos/lib/messages_lib/0489_9a2a_free_3a_20WARNING_2.rel new file mode 100644 index 00000000..1a7bddc7 --- /dev/null +++ b/src/nos/lib/messages_lib/0489_9a2a_free_3a_20WARNING_2.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3c flags 0 +S ___0489_9a2a_free_3a_20WARNING_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 3a 00 66 72 65 65 3a 20 57 41 52 +R 00 00 01 00 +T 0b 00 00 00 4e 49 4e 47 21 20 69 6e 76 61 6c +R 00 00 01 00 +T 16 00 00 00 69 64 20 70 6f 69 6e 74 65 72 20 +R 00 00 01 00 +T 21 00 00 00 28 25 70 29 20 70 63 20 3d 20 30 +R 00 00 01 00 +T 2c 00 00 00 78 25 78 20 25 78 20 70 72 6f 63 +R 00 00 01 00 +T 37 00 00 00 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/048a_f896_freelist.rel b/src/nos/lib/messages_lib/048a_f896_freelist.rel new file mode 100644 index 00000000..78a79f97 --- /dev/null +++ b/src/nos/lib/messages_lib/048a_f896_freelist.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___048a_f896_freelist Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 66 72 65 65 6c 69 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/048b_bd4f_from_20_25s_20.rel b/src/nos/lib/messages_lib/048b_bd4f_from_20_25s_20.rel new file mode 100644 index 00000000..a2065882 --- /dev/null +++ b/src/nos/lib/messages_lib/048b_bd4f_from_20_25s_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___048b_bd4f_from_20_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 66 72 6f 6d 20 25 73 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/048c_5b02_from_20_25s_2ebbs_2.rel b/src/nos/lib/messages_lib/048c_5b02_from_20_25s_2ebbs_2.rel new file mode 100644 index 00000000..f9ffd29a --- /dev/null +++ b/src/nos/lib/messages_lib/048c_5b02_from_20_25s_2ebbs_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___048c_5b02_from_20_25s_2ebbs_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 66 72 6f 6d 20 25 73 2e 62 +R 00 00 01 00 +T 0b 00 00 00 62 73 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/048d_2208_fs_5finit_28_29.rel b/src/nos/lib/messages_lib/048d_2208_fs_5finit_28_29.rel new file mode 100644 index 00000000..8eb4f87f --- /dev/null +++ b/src/nos/lib/messages_lib/048d_2208_fs_5finit_28_29.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___048d_2208_fs_5finit_28_29 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 66 73 5f 69 6e 69 74 28 29 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/048e_7fbc_fstat.rel b/src/nos/lib/messages_lib/048e_7fbc_fstat.rel new file mode 100644 index 00000000..2e5ae00f --- /dev/null +++ b/src/nos/lib/messages_lib/048e_7fbc_fstat.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___048e_7fbc_fstat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 66 73 74 61 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/048f_0e84_ftp.rel b/src/nos/lib/messages_lib/048f_0e84_ftp.rel new file mode 100644 index 00000000..b0e28755 --- /dev/null +++ b/src/nos/lib/messages_lib/048f_0e84_ftp.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___048f_0e84_ftp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 66 74 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0490_bafd_ftp_20_3caddress_3e.rel b/src/nos/lib/messages_lib/0490_bafd_ftp_20_3caddress_3e.rel new file mode 100644 index 00000000..7dab7719 --- /dev/null +++ b/src/nos/lib/messages_lib/0490_bafd_ftp_20_3caddress_3e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0490_bafd_ftp_20_3caddress_3e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 66 74 70 20 3c 61 64 64 72 +R 00 00 01 00 +T 0b 00 00 00 65 73 73 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0491_f999_ftp_3e_20syst_0a.rel b/src/nos/lib/messages_lib/0491_f999_ftp_3e_20syst_0a.rel new file mode 100644 index 00000000..9ddf2a1c --- /dev/null +++ b/src/nos/lib/messages_lib/0491_f999_ftp_3e_20syst_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0491_f999_ftp_3e_20syst_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 66 74 70 3e 20 73 79 73 74 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0492_51ba_garbage_20collectio.rel b/src/nos/lib/messages_lib/0492_51ba_garbage_20collectio.rel new file mode 100644 index 00000000..c8b1f8fc --- /dev/null +++ b/src/nos/lib/messages_lib/0492_51ba_garbage_20collectio.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___0492_51ba_garbage_20collectio Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 67 61 72 62 61 67 65 20 63 +R 00 00 01 00 +T 0b 00 00 00 6f 6c 6c 65 63 74 69 6f 6e 73 20 +R 00 00 01 00 +T 16 00 00 00 79 65 6c 6c 6f 77 20 25 6c 75 20 +R 00 00 01 00 +T 21 00 00 00 72 65 64 20 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0493_c2ce_gateway.rel b/src/nos/lib/messages_lib/0493_c2ce_gateway.rel new file mode 100644 index 00000000..ab12640d --- /dev/null +++ b/src/nos/lib/messages_lib/0493_c2ce_gateway.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0493_c2ce_gateway Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 67 61 74 65 77 61 79 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0494_9e35_get.rel b/src/nos/lib/messages_lib/0494_9e35_get.rel new file mode 100644 index 00000000..0e0c42fd --- /dev/null +++ b/src/nos/lib/messages_lib/0494_9e35_get.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0494_9e35_get Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 67 65 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0495_c7c0_get_20_3cremotefile.rel b/src/nos/lib/messages_lib/0495_c7c0_get_20_3cremotefile.rel new file mode 100644 index 00000000..2291219d --- /dev/null +++ b/src/nos/lib/messages_lib/0495_c7c0_get_20_3cremotefile.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0495_c7c0_get_20_3cremotefile Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 67 65 74 20 3c 72 65 6d 6f +R 00 00 01 00 +T 0b 00 00 00 74 65 66 69 6c 65 3e 20 3c 6c 6f +R 00 00 01 00 +T 16 00 00 00 63 61 6c 66 69 6c 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0496_60c5_getfsys.rel b/src/nos/lib/messages_lib/0496_60c5_getfsys.rel new file mode 100644 index 00000000..e743167c --- /dev/null +++ b/src/nos/lib/messages_lib/0496_60c5_getfsys.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0496_60c5_getfsys Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 67 65 74 66 73 79 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0497_631b_getinode_3a_20bad_2.rel b/src/nos/lib/messages_lib/0497_631b_getinode_3a_20bad_2.rel new file mode 100644 index 00000000..b10eafdf --- /dev/null +++ b/src/nos/lib/messages_lib/0497_631b_getinode_3a_20bad_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___0497_631b_getinode_3a_20bad_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 67 65 74 69 6e 6f 64 65 3a +R 00 00 01 00 +T 0b 00 00 00 20 62 61 64 20 6f 66 74 20 25 75 +R 00 00 01 00 +T 16 00 00 00 25 73 20 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0498_7dac_getset.rel b/src/nos/lib/messages_lib/0498_7dac_getset.rel new file mode 100644 index 00000000..b75af8b1 --- /dev/null +++ b/src/nos/lib/messages_lib/0498_7dac_getset.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0498_7dac_getset Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 67 65 74 73 65 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0499_b3cb_groups.rel b/src/nos/lib/messages_lib/0499_b3cb_groups.rel new file mode 100644 index 00000000..c7eb774f --- /dev/null +++ b/src/nos/lib/messages_lib/0499_b3cb_groups.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0499_b3cb_groups Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 67 72 6f 75 70 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/049a_156e_hash.rel b/src/nos/lib/messages_lib/049a_156e_hash.rel new file mode 100644 index 00000000..333760ad --- /dev/null +++ b/src/nos/lib/messages_lib/049a_156e_hash.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___049a_156e_hash Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 68 61 73 68 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/049b_5bc8_heap_20size_20_25lu.rel b/src/nos/lib/messages_lib/049b_5bc8_heap_20size_20_25lu.rel new file mode 100644 index 00000000..50e16984 --- /dev/null +++ b/src/nos/lib/messages_lib/049b_5bc8_heap_20size_20_25lu.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S ___049b_5bc8_heap_20size_20_25lu Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2f 00 68 65 61 70 20 73 69 7a 65 +R 00 00 01 00 +T 0b 00 00 00 20 25 6c 75 20 61 76 61 69 6c 20 +R 00 00 01 00 +T 16 00 00 00 25 6c 75 20 28 25 6c 75 25 25 29 +R 00 00 01 00 +T 21 00 00 00 20 6d 6f 72 65 63 6f 72 65 73 20 +R 00 00 01 00 +T 2c 00 00 00 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/049c_856f_heard.rel b/src/nos/lib/messages_lib/049c_856f_heard.rel new file mode 100644 index 00000000..e158ad78 --- /dev/null +++ b/src/nos/lib/messages_lib/049c_856f_heard.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___049c_856f_heard Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 68 65 61 72 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/049d_fc9f_help.rel b/src/nos/lib/messages_lib/049d_fc9f_help.rel new file mode 100644 index 00000000..25be046a --- /dev/null +++ b/src/nos/lib/messages_lib/049d_fc9f_help.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___049d_fc9f_help Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 68 65 6c 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/049e_1d5e_homedir.rel b/src/nos/lib/messages_lib/049e_1d5e_homedir.rel new file mode 100644 index 00000000..613866dc --- /dev/null +++ b/src/nos/lib/messages_lib/049e_1d5e_homedir.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___049e_1d5e_homedir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 68 6f 6d 65 64 69 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/049f_6fa6_hop.rel b/src/nos/lib/messages_lib/049f_6fa6_hop.rel new file mode 100644 index 00000000..2651ec13 --- /dev/null +++ b/src/nos/lib/messages_lib/049f_6fa6_hop.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___049f_6fa6_hop Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 68 6f 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04a0_df98_host.rel b/src/nos/lib/messages_lib/04a0_df98_host.rel new file mode 100644 index 00000000..f14f0b37 --- /dev/null +++ b/src/nos/lib/messages_lib/04a0_df98_host.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04a0_df98_host Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 68 6f 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04a1_476e_hostname.rel b/src/nos/lib/messages_lib/04a1_476e_hostname.rel new file mode 100644 index 00000000..46f52d12 --- /dev/null +++ b/src/nos/lib/messages_lib/04a1_476e_hostname.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___04a1_476e_hostname Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 68 6f 73 74 6e 61 6d 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04a2_2f25_icmp.rel b/src/nos/lib/messages_lib/04a2_2f25_icmp.rel new file mode 100644 index 00000000..d5d57957 --- /dev/null +++ b/src/nos/lib/messages_lib/04a2_2f25_icmp.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04a2_2f25_icmp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 69 63 6d 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04a3_dd41_ident.rel b/src/nos/lib/messages_lib/04a3_dd41_ident.rel new file mode 100644 index 00000000..a5f15922 --- /dev/null +++ b/src/nos/lib/messages_lib/04a3_dd41_ident.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___04a3_dd41_ident Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 69 64 65 6e 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04a4_fe83_ifconfig.rel b/src/nos/lib/messages_lib/04a4_fe83_ifconfig.rel new file mode 100644 index 00000000..0908dacb --- /dev/null +++ b/src/nos/lib/messages_lib/04a4_fe83_ifconfig.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___04a4_fe83_ifconfig Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 69 66 63 6f 6e 66 69 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04a5_6196_ignored_20_28hold_2.rel b/src/nos/lib/messages_lib/04a5_6196_ignored_20_28hold_2.rel new file mode 100644 index 00000000..d079dc52 --- /dev/null +++ b/src/nos/lib/messages_lib/04a5_6196_ignored_20_28hold_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___04a5_6196_ignored_20_28hold_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 69 67 6e 6f 72 65 64 20 28 +R 00 00 01 00 +T 0b 00 00 00 68 6f 6c 64 2d 64 6f 77 6e 29 3a +R 00 00 01 00 +T 16 00 00 00 20 25 73 20 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04a6_dc84_info.rel b/src/nos/lib/messages_lib/04a6_dc84_info.rel new file mode 100644 index 00000000..ae91b593 --- /dev/null +++ b/src/nos/lib/messages_lib/04a6_dc84_info.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04a6_dc84_info Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 69 6e 66 6f 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04a7_0500_input_20line_3a_20_.rel b/src/nos/lib/messages_lib/04a7_0500_input_20line_3a_20_.rel new file mode 100644 index 00000000..e4079748 --- /dev/null +++ b/src/nos/lib/messages_lib/04a7_0500_input_20line_3a_20_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___04a7_0500_input_20line_3a_20_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 69 6e 70 75 74 20 6c 69 6e +R 00 00 01 00 +T 0b 00 00 00 65 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04a8_9677_interface.rel b/src/nos/lib/messages_lib/04a8_9677_interface.rel new file mode 100644 index 00000000..1087bb79 --- /dev/null +++ b/src/nos/lib/messages_lib/04a8_9677_interface.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___04a8_9677_interface Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 69 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04a9_3fa5_ioctl.rel b/src/nos/lib/messages_lib/04a9_3fa5_ioctl.rel new file mode 100644 index 00000000..763a254d --- /dev/null +++ b/src/nos/lib/messages_lib/04a9_3fa5_ioctl.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___04a9_3fa5_ioctl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 69 6f 63 74 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04aa_3172_ip.rel b/src/nos/lib/messages_lib/04aa_3172_ip.rel new file mode 100644 index 00000000..451320dc --- /dev/null +++ b/src/nos/lib/messages_lib/04aa_3172_ip.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___04aa_3172_ip Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 69 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ab_d229_ip_5frecv_28_25s_29.rel b/src/nos/lib/messages_lib/04ab_d229_ip_5frecv_28_25s_29.rel new file mode 100644 index 00000000..13afe442 --- /dev/null +++ b/src/nos/lib/messages_lib/04ab_d229_ip_5frecv_28_25s_29.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___04ab_d229_ip_5frecv_28_25s_29 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 69 70 5f 72 65 63 76 28 25 +R 00 00 01 00 +T 0b 00 00 00 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ac_289f_ip_5fsend_0a.rel b/src/nos/lib/messages_lib/04ac_289f_ip_5fsend_0a.rel new file mode 100644 index 00000000..be220302 --- /dev/null +++ b/src/nos/lib/messages_lib/04ac_289f_ip_5fsend_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___04ac_289f_ip_5fsend_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 69 70 5f 73 65 6e 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ad_0191_ipaddress.rel b/src/nos/lib/messages_lib/04ad_0191_ipaddress.rel new file mode 100644 index 00000000..298063fb --- /dev/null +++ b/src/nos/lib/messages_lib/04ad_0191_ipaddress.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___04ad_0191_ipaddress Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 69 70 61 64 64 72 65 73 73 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ae_dfc4_ipcp.rel b/src/nos/lib/messages_lib/04ae_dfc4_ipcp.rel new file mode 100644 index 00000000..a5f11117 --- /dev/null +++ b/src/nos/lib/messages_lib/04ae_dfc4_ipcp.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04ae_dfc4_ipcp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 69 70 63 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04af_f4c1_irtt.rel b/src/nos/lib/messages_lib/04af_f4c1_irtt.rel new file mode 100644 index 00000000..df6a9284 --- /dev/null +++ b/src/nos/lib/messages_lib/04af_f4c1_irtt.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04af_f4c1_irtt Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 69 72 74 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04b0_516b_kick.rel b/src/nos/lib/messages_lib/04b0_516b_kick.rel new file mode 100644 index 00000000..232bfe79 --- /dev/null +++ b/src/nos/lib/messages_lib/04b0_516b_kick.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04b0_516b_kick Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6b 69 63 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04b1_a61c_kill.rel b/src/nos/lib/messages_lib/04b1_a61c_kill.rel new file mode 100644 index 00000000..7a387cc6 --- /dev/null +++ b/src/nos/lib/messages_lib/04b1_a61c_kill.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04b1_a61c_kill Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6b 69 6c 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04b2_ff9f_kill_20_3cjobnumber.rel b/src/nos/lib/messages_lib/04b2_ff9f_kill_20_3cjobnumber.rel new file mode 100644 index 00000000..7e6347b1 --- /dev/null +++ b/src/nos/lib/messages_lib/04b2_ff9f_kill_20_3cjobnumber.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___04b2_ff9f_kill_20_3cjobnumber Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 6b 69 6c 6c 20 3c 6a 6f 62 +R 00 00 01 00 +T 0b 00 00 00 6e 75 6d 62 65 72 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04b3_5e27_ksigs_20_25lu_20que.rel b/src/nos/lib/messages_lib/04b3_5e27_ksigs_20_25lu_20que.rel new file mode 100644 index 00000000..c10c5c7b --- /dev/null +++ b/src/nos/lib/messages_lib/04b3_5e27_ksigs_20_25lu_20que.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3c flags 0 +S ___04b3_5e27_ksigs_20_25lu_20que Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 3a 00 6b 73 69 67 73 20 25 6c 75 +R 00 00 01 00 +T 0b 00 00 00 20 71 75 65 75 65 64 20 25 6c 75 +R 00 00 01 00 +T 16 00 00 00 20 68 69 77 61 74 20 25 75 20 77 +R 00 00 01 00 +T 21 00 00 00 6f 6b 65 6e 20 25 6c 75 20 6e 6f +R 00 00 01 00 +T 2c 00 00 00 70 73 20 25 6c 75 20 64 75 70 73 +R 00 00 01 00 +T 37 00 00 00 20 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04b4_1bbe_kwaits_20_25lu_20no.rel b/src/nos/lib/messages_lib/04b4_1bbe_kwaits_20_25lu_20no.rel new file mode 100644 index 00000000..2f1e812f --- /dev/null +++ b/src/nos/lib/messages_lib/04b4_1bbe_kwaits_20_25lu_20no.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___04b4_1bbe_kwaits_20_25lu_20no Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 6b 77 61 69 74 73 20 25 6c +R 00 00 01 00 +T 0b 00 00 00 75 20 6e 6f 70 73 20 25 6c 75 20 +R 00 00 01 00 +T 16 00 00 00 66 72 6f 6d 20 69 6e 74 20 25 6c +R 00 00 01 00 +T 21 00 00 00 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04b5_a567_lcp.rel b/src/nos/lib/messages_lib/04b5_a567_lcp.rel new file mode 100644 index 00000000..ccf96436 --- /dev/null +++ b/src/nos/lib/messages_lib/04b5_a567_lcp.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___04b5_a567_lcp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 6c 63 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04b6_b632_link.rel b/src/nos/lib/messages_lib/04b6_b632_link.rel new file mode 100644 index 00000000..60a11341 --- /dev/null +++ b/src/nos/lib/messages_lib/04b6_b632_link.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04b6_b632_link Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6c 69 6e 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04b7_dfe4_linkaddress.rel b/src/nos/lib/messages_lib/04b7_dfe4_linkaddress.rel new file mode 100644 index 00000000..ec4d90d5 --- /dev/null +++ b/src/nos/lib/messages_lib/04b7_dfe4_linkaddress.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___04b7_dfe4_linkaddress Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 6c 69 6e 6b 61 64 64 72 65 +R 00 00 01 00 +T 0b 00 00 00 73 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04b8_7bad_list.rel b/src/nos/lib/messages_lib/04b8_7bad_list.rel new file mode 100644 index 00000000..6b7bcca0 --- /dev/null +++ b/src/nos/lib/messages_lib/04b8_7bad_list.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04b8_7bad_list Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6c 69 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04b9_4346_listen.rel b/src/nos/lib/messages_lib/04b9_4346_listen.rel new file mode 100644 index 00000000..89b00d5f --- /dev/null +++ b/src/nos/lib/messages_lib/04b9_4346_listen.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___04b9_4346_listen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 6c 69 73 74 65 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ba_a5dd_listservers.rel b/src/nos/lib/messages_lib/04ba_a5dd_listservers.rel new file mode 100644 index 00000000..a1da80ac --- /dev/null +++ b/src/nos/lib/messages_lib/04ba_a5dd_listservers.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___04ba_a5dd_listservers Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 6c 69 73 74 73 65 72 76 65 +R 00 00 01 00 +T 0b 00 00 00 72 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04bb_f2d8_local.rel b/src/nos/lib/messages_lib/04bb_f2d8_local.rel new file mode 100644 index 00000000..139cad78 --- /dev/null +++ b/src/nos/lib/messages_lib/04bb_f2d8_local.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___04bb_f2d8_local Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 6c 6f 63 61 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04bc_68f9_log.rel b/src/nos/lib/messages_lib/04bc_68f9_log.rel new file mode 100644 index 00000000..a856a7c8 --- /dev/null +++ b/src/nos/lib/messages_lib/04bc_68f9_log.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___04bc_68f9_log Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 6c 6f 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04bd_feb4_logfile.rel b/src/nos/lib/messages_lib/04bd_feb4_logfile.rel new file mode 100644 index 00000000..e4cdc767 --- /dev/null +++ b/src/nos/lib/messages_lib/04bd_feb4_logfile.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___04bd_feb4_logfile Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 6c 6f 67 66 69 6c 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04be_52c6_login_3a_20.rel b/src/nos/lib/messages_lib/04be_52c6_login_3a_20.rel new file mode 100644 index 00000000..0a2ff915 --- /dev/null +++ b/src/nos/lib/messages_lib/04be_52c6_login_3a_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___04be_52c6_login_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 6c 6f 67 69 6e 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04bf_a516_logscreen.rel b/src/nos/lib/messages_lib/04bf_a516_logscreen.rel new file mode 100644 index 00000000..27d39ce0 --- /dev/null +++ b/src/nos/lib/messages_lib/04bf_a516_logscreen.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___04bf_a516_logscreen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 6c 6f 67 73 63 72 65 65 6e +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04c0_8f77_lookup.rel b/src/nos/lib/messages_lib/04c0_8f77_lookup.rel new file mode 100644 index 00000000..793e9a80 --- /dev/null +++ b/src/nos/lib/messages_lib/04c0_8f77_lookup.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___04c0_8f77_lookup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 6c 6f 6f 6b 75 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04c1_7d51_ls.rel b/src/nos/lib/messages_lib/04c1_7d51_ls.rel new file mode 100644 index 00000000..7ca4f8f0 --- /dev/null +++ b/src/nos/lib/messages_lib/04c1_7d51_ls.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___04c1_7d51_ls Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 6c 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04c2_634b_lseek.rel b/src/nos/lib/messages_lib/04c2_634b_lseek.rel new file mode 100644 index 00000000..22665260 --- /dev/null +++ b/src/nos/lib/messages_lib/04c2_634b_lseek.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___04c2_634b_lseek Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 6c 73 65 65 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04c3_0288_magic.rel b/src/nos/lib/messages_lib/04c3_0288_magic.rel new file mode 100644 index 00000000..abf0036a --- /dev/null +++ b/src/nos/lib/messages_lib/04c3_0288_magic.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___04c3_0288_magic Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 6d 61 67 69 63 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04c4_868b_maibox_20name_20not.rel b/src/nos/lib/messages_lib/04c4_868b_maibox_20name_20not.rel new file mode 100644 index 00000000..0cc4ea61 --- /dev/null +++ b/src/nos/lib/messages_lib/04c4_868b_maibox_20name_20not.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___04c4_868b_maibox_20name_20not Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 6d 61 69 62 6f 78 20 6e 61 +R 00 00 01 00 +T 0b 00 00 00 6d 65 20 6e 6f 74 20 73 65 74 20 +R 00 00 01 00 +T 16 00 00 00 79 65 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04c5_2d7f_mailbox.rel b/src/nos/lib/messages_lib/04c5_2d7f_mailbox.rel new file mode 100644 index 00000000..82fd9517 --- /dev/null +++ b/src/nos/lib/messages_lib/04c5_2d7f_mailbox.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___04c5_2d7f_mailbox Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 6d 61 69 6c 62 6f 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04c6_2084_mailbox_20name_20no.rel b/src/nos/lib/messages_lib/04c6_2084_mailbox_20name_20no.rel new file mode 100644 index 00000000..f4f6d435 --- /dev/null +++ b/src/nos/lib/messages_lib/04c6_2084_mailbox_20name_20no.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 35 flags 0 +S ___04c6_2084_mailbox_20name_20no Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 33 00 6d 61 69 6c 62 6f 78 20 6e +R 00 00 01 00 +T 0b 00 00 00 61 6d 65 20 6e 6f 74 20 64 65 66 +R 00 00 01 00 +T 16 00 00 00 69 6e 65 64 20 79 65 74 2e 28 70 +R 00 00 01 00 +T 21 00 00 00 6f 70 20 6d 61 69 6c 62 6f 78 20 +R 00 00 01 00 +T 2c 00 00 00 3c 6e 61 6d 65 3e 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04c7_86f8_mailhost.rel b/src/nos/lib/messages_lib/04c7_86f8_mailhost.rel new file mode 100644 index 00000000..92c14f2c --- /dev/null +++ b/src/nos/lib/messages_lib/04c7_86f8_mailhost.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___04c7_86f8_mailhost Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 6d 61 69 6c 68 6f 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04c8_63b8_mailhost_20not_20de.rel b/src/nos/lib/messages_lib/04c8_63b8_mailhost_20not_20de.rel new file mode 100644 index 00000000..8737c2b0 --- /dev/null +++ b/src/nos/lib/messages_lib/04c8_63b8_mailhost_20not_20de.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___04c8_63b8_mailhost_20not_20de Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 00 6d 61 69 6c 68 6f 73 74 20 +R 00 00 01 00 +T 0b 00 00 00 6e 6f 74 20 64 65 66 69 6e 65 64 +R 00 00 01 00 +T 16 00 00 00 20 79 65 74 2e 28 70 6f 70 20 6d +R 00 00 01 00 +T 21 00 00 00 61 69 6c 68 6f 73 74 20 3c 68 6f +R 00 00 01 00 +T 2c 00 00 00 73 74 3e 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04c9_139d_maxclients.rel b/src/nos/lib/messages_lib/04c9_139d_maxclients.rel new file mode 100644 index 00000000..707d7dc8 --- /dev/null +++ b/src/nos/lib/messages_lib/04c9_139d_maxclients.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___04c9_139d_maxclients Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 6d 61 78 63 6c 69 65 6e 74 +R 00 00 01 00 +T 0b 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ca_8d56_maxframe.rel b/src/nos/lib/messages_lib/04ca_8d56_maxframe.rel new file mode 100644 index 00000000..785df048 --- /dev/null +++ b/src/nos/lib/messages_lib/04ca_8d56_maxframe.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___04ca_8d56_maxframe Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 6d 61 78 66 72 61 6d 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04cb_d5aa_maximum_20route_20q.rel b/src/nos/lib/messages_lib/04cb_d5aa_maximum_20route_20q.rel new file mode 100644 index 00000000..6e53aeec --- /dev/null +++ b/src/nos/lib/messages_lib/04cb_d5aa_maximum_20route_20q.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___04cb_d5aa_maximum_20route_20q Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 6d 61 78 69 6d 75 6d 20 72 +R 00 00 01 00 +T 0b 00 00 00 6f 75 74 65 20 71 75 61 6c 69 74 +R 00 00 01 00 +T 16 00 00 00 79 20 69 73 20 32 35 35 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04cc_9853_maxmsg.rel b/src/nos/lib/messages_lib/04cc_9853_maxmsg.rel new file mode 100644 index 00000000..7a829e9d --- /dev/null +++ b/src/nos/lib/messages_lib/04cc_9853_maxmsg.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___04cc_9853_maxmsg Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 6d 61 78 6d 73 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04cd_7203_maxttl.rel b/src/nos/lib/messages_lib/04cd_7203_maxttl.rel new file mode 100644 index 00000000..2977d9fd --- /dev/null +++ b/src/nos/lib/messages_lib/04cd_7203_maxttl.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___04cd_7203_maxttl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 6d 61 78 74 74 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ce_e017_maxwait.rel b/src/nos/lib/messages_lib/04ce_e017_maxwait.rel new file mode 100644 index 00000000..76bc4c82 --- /dev/null +++ b/src/nos/lib/messages_lib/04ce_e017_maxwait.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___04ce_e017_maxwait Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 6d 61 78 77 61 69 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04cf_e57a_mbuf_20allocs_20_25.rel b/src/nos/lib/messages_lib/04cf_e57a_mbuf_20allocs_20_25.rel new file mode 100644 index 00000000..943c19f8 --- /dev/null +++ b/src/nos/lib/messages_lib/04cf_e57a_mbuf_20allocs_20_25.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3e flags 0 +S ___04cf_e57a_mbuf_20allocs_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 3c 00 6d 62 75 66 20 61 6c 6c 6f +R 00 00 01 00 +T 0b 00 00 00 63 73 20 25 6c 75 20 66 72 65 65 +R 00 00 01 00 +T 16 00 00 00 20 63 61 63 68 65 20 68 69 74 73 +R 00 00 01 00 +T 21 00 00 00 20 25 6c 75 20 28 25 6c 75 25 25 +R 00 00 01 00 +T 2c 00 00 00 29 20 6d 62 75 66 20 66 72 65 65 +R 00 00 01 00 +T 37 00 00 00 73 20 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04d0_8c4f_mcompare.rel b/src/nos/lib/messages_lib/04d0_8c4f_mcompare.rel new file mode 100644 index 00000000..2e0e31ab --- /dev/null +++ b/src/nos/lib/messages_lib/04d0_8c4f_mcompare.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___04d0_8c4f_mcompare Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 6d 63 6f 6d 70 61 72 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04d1_f47e_mcompare_20_3cfile_.rel b/src/nos/lib/messages_lib/04d1_f47e_mcompare_20_3cfile_.rel new file mode 100644 index 00000000..e6b731a5 --- /dev/null +++ b/src/nos/lib/messages_lib/04d1_f47e_mcompare_20_3cfile_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___04d1_f47e_mcompare_20_3cfile_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 6d 63 6f 6d 70 61 72 65 20 +R 00 00 01 00 +T 0b 00 00 00 3c 66 69 6c 65 3e 20 5b 3c 66 69 +R 00 00 01 00 +T 16 00 00 00 6c 65 3e 20 2e 2e 2e 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04d2_a71a_md5.rel b/src/nos/lib/messages_lib/04d2_a71a_md5.rel new file mode 100644 index 00000000..dee0e299 --- /dev/null +++ b/src/nos/lib/messages_lib/04d2_a71a_md5.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___04d2_a71a_md5 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 6d 64 35 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04d3_cc78_md5_20_3cfile_3e.rel b/src/nos/lib/messages_lib/04d3_cc78_md5_20_3cfile_3e.rel new file mode 100644 index 00000000..977b4e85 --- /dev/null +++ b/src/nos/lib/messages_lib/04d3_cc78_md5_20_3cfile_3e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___04d3_cc78_md5_20_3cfile_3e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 6d 64 35 20 3c 66 69 6c 65 +R 00 00 01 00 +T 0b 00 00 00 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04d4_4d2a_memory.rel b/src/nos/lib/messages_lib/04d4_4d2a_memory.rel new file mode 100644 index 00000000..8f02165f --- /dev/null +++ b/src/nos/lib/messages_lib/04d4_4d2a_memory.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___04d4_4d2a_memory Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 6d 65 6d 6f 72 79 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04d5_69ba_memory_20cache_20si.rel b/src/nos/lib/messages_lib/04d5_69ba_memory_20cache_20si.rel new file mode 100644 index 00000000..3ce99e75 --- /dev/null +++ b/src/nos/lib/messages_lib/04d5_69ba_memory_20cache_20si.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___04d5_69ba_memory_20cache_20si Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 6d 65 6d 6f 72 79 20 63 61 +R 00 00 01 00 +T 0b 00 00 00 63 68 65 20 73 69 7a 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04d6_336a_merge.rel b/src/nos/lib/messages_lib/04d6_336a_merge.rel new file mode 100644 index 00000000..5f2a1e40 --- /dev/null +++ b/src/nos/lib/messages_lib/04d6_336a_merge.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___04d6_336a_merge Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 6d 65 72 67 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04d7_649e_merge_20_25s_20_25d.rel b/src/nos/lib/messages_lib/04d7_649e_merge_20_25s_20_25d.rel new file mode 100644 index 00000000..98c18eb1 --- /dev/null +++ b/src/nos/lib/messages_lib/04d7_649e_merge_20_25s_20_25d.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___04d7_649e_merge_20_25s_20_25d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 6d 65 72 67 65 20 25 73 20 +R 00 00 01 00 +T 0b 00 00 00 25 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04d8_460c_metric_20better_3a_.rel b/src/nos/lib/messages_lib/04d8_460c_metric_20better_3a_.rel new file mode 100644 index 00000000..0b914298 --- /dev/null +++ b/src/nos/lib/messages_lib/04d8_460c_metric_20better_3a_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___04d8_460c_metric_20better_3a_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 6d 65 74 72 69 63 20 62 65 +R 00 00 01 00 +T 0b 00 00 00 74 74 65 72 3a 20 25 73 20 25 6c +R 00 00 01 00 +T 16 00 00 00 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04d9_3694_metric_20change_3a_.rel b/src/nos/lib/messages_lib/04d9_3694_metric_20change_3a_.rel new file mode 100644 index 00000000..666ed9c0 --- /dev/null +++ b/src/nos/lib/messages_lib/04d9_3694_metric_20change_3a_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S ___04d9_3694_metric_20change_3a_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1e 00 6d 65 74 72 69 63 20 63 68 +R 00 00 01 00 +T 0b 00 00 00 61 6e 67 65 3a 20 25 73 20 25 6c +R 00 00 01 00 +T 16 00 00 00 75 20 2d 3e 20 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04da_44b0_metric_20not_20bett.rel b/src/nos/lib/messages_lib/04da_44b0_metric_20not_20bett.rel new file mode 100644 index 00000000..d1f78c6c --- /dev/null +++ b/src/nos/lib/messages_lib/04da_44b0_metric_20not_20bett.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___04da_44b0_metric_20not_20bett Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 6d 65 74 72 69 63 20 6e 6f +R 00 00 01 00 +T 0b 00 00 00 74 20 62 65 74 74 65 72 3a 20 25 +R 00 00 01 00 +T 16 00 00 00 73 20 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04db_b64c_mget.rel b/src/nos/lib/messages_lib/04db_b64c_mget.rel new file mode 100644 index 00000000..819517a6 --- /dev/null +++ b/src/nos/lib/messages_lib/04db_b64c_mget.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04db_b64c_mget Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6d 67 65 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04dc_8d01_mget_20_3cfile_3e_2.rel b/src/nos/lib/messages_lib/04dc_8d01_mget_20_3cfile_3e_2.rel new file mode 100644 index 00000000..8ea40fae --- /dev/null +++ b/src/nos/lib/messages_lib/04dc_8d01_mget_20_3cfile_3e_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___04dc_8d01_mget_20_3cfile_3e_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 6d 67 65 74 20 3c 66 69 6c +R 00 00 01 00 +T 0b 00 00 00 65 3e 20 5b 3c 66 69 6c 65 3e 20 +R 00 00 01 00 +T 16 00 00 00 2e 2e 2e 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04dd_1e96_mkd_20.rel b/src/nos/lib/messages_lib/04dd_1e96_mkd_20.rel new file mode 100644 index 00000000..f0fc6fba --- /dev/null +++ b/src/nos/lib/messages_lib/04dd_1e96_mkd_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04dd_1e96_mkd_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6d 6b 64 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04de_304a_mkdir.rel b/src/nos/lib/messages_lib/04de_304a_mkdir.rel new file mode 100644 index 00000000..43cb1cea --- /dev/null +++ b/src/nos/lib/messages_lib/04de_304a_mkdir.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___04de_304a_mkdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 6d 6b 64 69 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04df_7d04_mkdir_20_3cdirector.rel b/src/nos/lib/messages_lib/04df_7d04_mkdir_20_3cdirector.rel new file mode 100644 index 00000000..05f67125 --- /dev/null +++ b/src/nos/lib/messages_lib/04df_7d04_mkdir_20_3cdirector.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___04df_7d04_mkdir_20_3cdirector Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 6d 6b 64 69 72 20 3c 64 69 +R 00 00 01 00 +T 0b 00 00 00 72 65 63 74 6f 72 79 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04e0_6257_mknod.rel b/src/nos/lib/messages_lib/04e0_6257_mknod.rel new file mode 100644 index 00000000..71df2907 --- /dev/null +++ b/src/nos/lib/messages_lib/04e0_6257_mknod.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___04e0_6257_mknod Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 6d 6b 6e 6f 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04e1_685e_mode.rel b/src/nos/lib/messages_lib/04e1_685e_mode.rel new file mode 100644 index 00000000..9604afcb --- /dev/null +++ b/src/nos/lib/messages_lib/04e1_685e_mode.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04e1_685e_mode Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6d 6f 64 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04e2_9335_modes_20are_3a_20no.rel b/src/nos/lib/messages_lib/04e2_9335_modes_20are_3a_20no.rel new file mode 100644 index 00000000..ff28888e --- /dev/null +++ b/src/nos/lib/messages_lib/04e2_9335_modes_20are_3a_20no.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___04e2_9335_modes_20are_3a_20no Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 6d 6f 64 65 73 20 61 72 65 +R 00 00 01 00 +T 0b 00 00 00 3a 20 6e 6f 6e 65 20 61 63 63 65 +R 00 00 01 00 +T 16 00 00 00 70 74 20 72 65 6a 65 63 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04e3_a91f_more.rel b/src/nos/lib/messages_lib/04e3_a91f_more.rel new file mode 100644 index 00000000..6402293c --- /dev/null +++ b/src/nos/lib/messages_lib/04e3_a91f_more.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04e3_a91f_more Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6d 6f 72 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04e4_5384_more_20_3cfilename_.rel b/src/nos/lib/messages_lib/04e4_5384_more_20_3cfilename_.rel new file mode 100644 index 00000000..7c065cc4 --- /dev/null +++ b/src/nos/lib/messages_lib/04e4_5384_more_20_3cfilename_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___04e4_5384_more_20_3cfilename_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 6d 6f 72 65 20 3c 66 69 6c +R 00 00 01 00 +T 0b 00 00 00 65 6e 61 6d 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04e5_ec46_motd.rel b/src/nos/lib/messages_lib/04e5_ec46_motd.rel new file mode 100644 index 00000000..56ca72ce --- /dev/null +++ b/src/nos/lib/messages_lib/04e5_ec46_motd.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04e5_ec46_motd Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6d 6f 74 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04e6_b5d1_mount.rel b/src/nos/lib/messages_lib/04e6_b5d1_mount.rel new file mode 100644 index 00000000..d8ee0442 --- /dev/null +++ b/src/nos/lib/messages_lib/04e6_b5d1_mount.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___04e6_b5d1_mount Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 6d 6f 75 6e 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04e7_2a4d_mput.rel b/src/nos/lib/messages_lib/04e7_2a4d_mput.rel new file mode 100644 index 00000000..38071d4e --- /dev/null +++ b/src/nos/lib/messages_lib/04e7_2a4d_mput.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04e7_2a4d_mput Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6d 70 75 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04e8_312f_mput_20_3cfile_3e_2.rel b/src/nos/lib/messages_lib/04e8_312f_mput_20_3cfile_3e_2.rel new file mode 100644 index 00000000..f32d56be --- /dev/null +++ b/src/nos/lib/messages_lib/04e8_312f_mput_20_3cfile_3e_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___04e8_312f_mput_20_3cfile_3e_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 6d 70 75 74 20 3c 66 69 6c +R 00 00 01 00 +T 0b 00 00 00 65 3e 20 5b 3c 66 69 6c 65 3e 20 +R 00 00 01 00 +T 16 00 00 00 2e 2e 2e 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04e9_245f_mru.rel b/src/nos/lib/messages_lib/04e9_245f_mru.rel new file mode 100644 index 00000000..4ced6d96 --- /dev/null +++ b/src/nos/lib/messages_lib/04e9_245f_mru.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___04e9_245f_mru Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 6d 72 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ea_58b1_mss.rel b/src/nos/lib/messages_lib/04ea_58b1_mss.rel new file mode 100644 index 00000000..c3970760 --- /dev/null +++ b/src/nos/lib/messages_lib/04ea_58b1_mss.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___04ea_58b1_mss Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 6d 73 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04eb_708f_mtu.rel b/src/nos/lib/messages_lib/04eb_708f_mtu.rel new file mode 100644 index 00000000..19f7d104 --- /dev/null +++ b/src/nos/lib/messages_lib/04eb_708f_mtu.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___04eb_708f_mtu Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 6d 74 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ec_78ae_mycall.rel b/src/nos/lib/messages_lib/04ec_78ae_mycall.rel new file mode 100644 index 00000000..b9710aab --- /dev/null +++ b/src/nos/lib/messages_lib/04ec_78ae_mycall.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___04ec_78ae_mycall Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 6d 79 63 61 6c 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ed_8a90_name.rel b/src/nos/lib/messages_lib/04ed_8a90_name.rel new file mode 100644 index 00000000..f78bf189 --- /dev/null +++ b/src/nos/lib/messages_lib/04ed_8a90_name.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04ed_8a90_name Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6e 61 6d 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ee_b07d_netmask.rel b/src/nos/lib/messages_lib/04ee_b07d_netmask.rel new file mode 100644 index 00000000..50dc1c86 --- /dev/null +++ b/src/nos/lib/messages_lib/04ee_b07d_netmask.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___04ee_b07d_netmask Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 6e 65 74 6d 61 73 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ef_4d2c_netrom_20bcnodes_20.rel b/src/nos/lib/messages_lib/04ef_4d2c_netrom_20bcnodes_20.rel new file mode 100644 index 00000000..d5460fca --- /dev/null +++ b/src/nos/lib/messages_lib/04ef_4d2c_netrom_20bcnodes_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___04ef_4d2c_netrom_20bcnodes_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 6e 65 74 72 6f 6d 20 62 63 +R 00 00 01 00 +T 0b 00 00 00 6e 6f 64 65 73 20 3c 69 6e 74 65 +R 00 00 01 00 +T 16 00 00 00 72 66 61 63 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04f0_c5dc_netrom_20connect_20.rel b/src/nos/lib/messages_lib/04f0_c5dc_netrom_20connect_20.rel new file mode 100644 index 00000000..2e36e1d4 --- /dev/null +++ b/src/nos/lib/messages_lib/04f0_c5dc_netrom_20connect_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___04f0_c5dc_netrom_20connect_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 6e 65 74 72 6f 6d 20 63 6f +R 00 00 01 00 +T 0b 00 00 00 6e 6e 65 63 74 20 3c 6e 6f 64 65 +R 00 00 01 00 +T 16 00 00 00 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04f1_925a_netrom_20interface_.rel b/src/nos/lib/messages_lib/04f1_925a_netrom_20interface_.rel new file mode 100644 index 00000000..6e28722f --- /dev/null +++ b/src/nos/lib/messages_lib/04f1_925a_netrom_20interface_.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S ___04f1_925a_netrom_20interface_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2f 00 6e 65 74 72 6f 6d 20 69 6e +R 00 00 01 00 +T 0b 00 00 00 74 65 72 66 61 63 65 20 3c 69 6e +R 00 00 01 00 +T 16 00 00 00 74 65 72 66 61 63 65 3e 20 3c 61 +R 00 00 01 00 +T 21 00 00 00 6c 69 61 73 3e 20 3c 71 75 61 6c +R 00 00 01 00 +T 2c 00 00 00 69 74 79 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04f2_a510_netrom_20interface_.rel b/src/nos/lib/messages_lib/04f2_a510_netrom_20interface_.rel new file mode 100644 index 00000000..1246cb73 --- /dev/null +++ b/src/nos/lib/messages_lib/04f2_a510_netrom_20interface_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 25 flags 0 +S ___04f2_a510_netrom_20interface_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 23 00 6e 65 74 72 6f 6d 20 69 6e +R 00 00 01 00 +T 0b 00 00 00 74 65 72 66 61 63 65 20 61 6c 72 +R 00 00 01 00 +T 16 00 00 00 65 61 64 79 20 61 74 74 61 63 68 +R 00 00 01 00 +T 21 00 00 00 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04f3_b271_netrom_20kick_20_3c.rel b/src/nos/lib/messages_lib/04f3_b271_netrom_20kick_20_3c.rel new file mode 100644 index 00000000..3e4c748a --- /dev/null +++ b/src/nos/lib/messages_lib/04f3_b271_netrom_20kick_20_3c.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___04f3_b271_netrom_20kick_20_3c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 6e 65 74 72 6f 6d 20 6b 69 +R 00 00 01 00 +T 0b 00 00 00 63 6b 20 3c 26 6e 72 63 62 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04f4_5334_netrom_20nodefilter.rel b/src/nos/lib/messages_lib/04f4_5334_netrom_20nodefilter.rel new file mode 100644 index 00000000..fc680faa --- /dev/null +++ b/src/nos/lib/messages_lib/04f4_5334_netrom_20nodefilter.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2f flags 0 +S ___04f4_5334_netrom_20nodefilter Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2d 00 6e 65 74 72 6f 6d 20 6e 6f +R 00 00 01 00 +T 0b 00 00 00 64 65 66 69 6c 74 65 72 20 61 64 +R 00 00 01 00 +T 16 00 00 00 64 20 3c 6e 65 69 67 68 62 6f 72 +R 00 00 01 00 +T 21 00 00 00 3e 20 3c 69 6e 74 65 72 66 61 63 +R 00 00 01 00 +T 2c 00 00 00 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04f5_6bfe_netrom_20nodefilter.rel b/src/nos/lib/messages_lib/04f5_6bfe_netrom_20nodefilter.rel new file mode 100644 index 00000000..730bada7 --- /dev/null +++ b/src/nos/lib/messages_lib/04f5_6bfe_netrom_20nodefilter.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S ___04f5_6bfe_netrom_20nodefilter Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2e 00 6e 65 74 72 6f 6d 20 6e 6f +R 00 00 01 00 +T 0b 00 00 00 64 65 66 69 6c 74 65 72 20 64 72 +R 00 00 01 00 +T 16 00 00 00 6f 70 20 3c 6e 65 69 67 68 62 6f +R 00 00 01 00 +T 21 00 00 00 72 3e 20 3c 69 6e 74 65 72 66 61 +R 00 00 01 00 +T 2c 00 00 00 63 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04f6_328e_netrom_20reset_20_3.rel b/src/nos/lib/messages_lib/04f6_328e_netrom_20reset_20_3.rel new file mode 100644 index 00000000..9b5b81f2 --- /dev/null +++ b/src/nos/lib/messages_lib/04f6_328e_netrom_20reset_20_3.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___04f6_328e_netrom_20reset_20_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 6e 65 74 72 6f 6d 20 72 65 +R 00 00 01 00 +T 0b 00 00 00 73 65 74 20 3c 26 6e 72 63 62 3e +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04f7_18c8_netrom_20route_20ad.rel b/src/nos/lib/messages_lib/04f7_18c8_netrom_20route_20ad.rel new file mode 100644 index 00000000..c2351350 --- /dev/null +++ b/src/nos/lib/messages_lib/04f7_18c8_netrom_20route_20ad.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4a flags 0 +S ___04f7_18c8_netrom_20route_20ad Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 48 00 6e 65 74 72 6f 6d 20 72 6f +R 00 00 01 00 +T 0b 00 00 00 75 74 65 20 61 64 64 20 3c 61 6c +R 00 00 01 00 +T 16 00 00 00 69 61 73 3e 20 3c 64 65 73 74 69 +R 00 00 01 00 +T 21 00 00 00 6e 61 74 69 6f 6e 3e 20 3c 69 6e +R 00 00 01 00 +T 2c 00 00 00 74 65 72 66 61 63 65 3e 20 3c 71 +R 00 00 01 00 +T 37 00 00 00 75 61 6c 69 74 79 3e 20 3c 6e 65 +R 00 00 01 00 +T 42 00 00 00 69 67 68 62 6f 72 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04f8_fff3_netrom_20route_20dr.rel b/src/nos/lib/messages_lib/04f8_fff3_netrom_20route_20dr.rel new file mode 100644 index 00000000..3611195f --- /dev/null +++ b/src/nos/lib/messages_lib/04f8_fff3_netrom_20route_20dr.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 39 flags 0 +S ___04f8_fff3_netrom_20route_20dr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 37 00 6e 65 74 72 6f 6d 20 72 6f +R 00 00 01 00 +T 0b 00 00 00 75 74 65 20 64 72 6f 70 20 3c 64 +R 00 00 01 00 +T 16 00 00 00 65 73 74 69 6e 61 74 69 6f 6e 3e +R 00 00 01 00 +T 21 00 00 00 20 3c 6e 65 69 67 68 62 6f 72 3e +R 00 00 01 00 +T 2c 00 00 00 20 3c 69 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 37 00 00 00 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04f9_e8da_netrom_20route_20in.rel b/src/nos/lib/messages_lib/04f9_e8da_netrom_20route_20in.rel new file mode 100644 index 00000000..ec4dc566 --- /dev/null +++ b/src/nos/lib/messages_lib/04f9_e8da_netrom_20route_20in.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___04f9_e8da_netrom_20route_20in Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 6e 65 74 72 6f 6d 20 72 6f +R 00 00 01 00 +T 0b 00 00 00 75 74 65 20 69 6e 66 6f 20 3c 64 +R 00 00 01 00 +T 16 00 00 00 65 73 74 69 6e 61 74 69 6f 6e 3e +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04fa_2254_newproc_20_22_25s_2.rel b/src/nos/lib/messages_lib/04fa_2254_newproc_20_22_25s_2.rel new file mode 100644 index 00000000..154d766b --- /dev/null +++ b/src/nos/lib/messages_lib/04fa_2254_newproc_20_22_25s_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___04fa_2254_newproc_20_22_25s_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 6e 65 77 70 72 6f 63 20 22 +R 00 00 01 00 +T 0b 00 00 00 25 73 22 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04fb_4db6_newsession_3a_20WAR.rel b/src/nos/lib/messages_lib/04fb_4db6_newsession_3a_20WAR.rel new file mode 100644 index 00000000..bc0bb344 --- /dev/null +++ b/src/nos/lib/messages_lib/04fb_4db6_newsession_3a_20WAR.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2e flags 0 +S ___04fb_4db6_newsession_3a_20WAR Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2c 00 6e 65 77 73 65 73 73 69 6f +R 00 00 01 00 +T 0b 00 00 00 6e 3a 20 57 41 52 4e 49 4e 47 21 +R 00 00 01 00 +T 16 00 00 00 20 6e 6f 20 6d 65 6d 6f 72 79 20 +R 00 00 01 00 +T 21 00 00 00 66 6f 72 20 73 65 73 73 69 6f 6e +R 00 00 01 00 +T 2c 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04fc_5ab5_newsession_3a_20WAR.rel b/src/nos/lib/messages_lib/04fc_5ab5_newsession_3a_20WAR.rel new file mode 100644 index 00000000..1c790ec4 --- /dev/null +++ b/src/nos/lib/messages_lib/04fc_5ab5_newsession_3a_20WAR.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2b flags 0 +S ___04fc_5ab5_newsession_3a_20WAR Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 29 00 6e 65 77 73 65 73 73 69 6f +R 00 00 01 00 +T 0b 00 00 00 6e 3a 20 57 41 52 4e 49 4e 47 21 +R 00 00 01 00 +T 16 00 00 00 20 73 65 73 73 69 6f 6e 20 74 61 +R 00 00 01 00 +T 21 00 00 00 62 6c 65 20 66 75 6c 6c 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04fd_7718_next_20pointer_20ou.rel b/src/nos/lib/messages_lib/04fd_7718_next_20pointer_20ou.rel new file mode 100644 index 00000000..4c77d598 --- /dev/null +++ b/src/nos/lib/messages_lib/04fd_7718_next_20pointer_20ou.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___04fd_7718_next_20pointer_20ou Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 6e 65 78 74 20 70 6f 69 6e +R 00 00 01 00 +T 0b 00 00 00 74 65 72 20 6f 75 74 20 6f 66 20 +R 00 00 01 00 +T 16 00 00 00 6c 69 6d 69 74 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04fe_7b66_nlst.rel b/src/nos/lib/messages_lib/04fe_7b66_nlst.rel new file mode 100644 index 00000000..faa0a020 --- /dev/null +++ b/src/nos/lib/messages_lib/04fe_7b66_nlst.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___04fe_7b66_nlst Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6e 6c 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/04ff_0ca7_nntp_20addserver_20.rel b/src/nos/lib/messages_lib/04ff_0ca7_nntp_20addserver_20.rel new file mode 100644 index 00000000..f785d0a0 --- /dev/null +++ b/src/nos/lib/messages_lib/04ff_0ca7_nntp_20addserver_20.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29 flags 0 +S ___04ff_0ca7_nntp_20addserver_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 27 00 6e 6e 74 70 20 61 64 64 73 +R 00 00 01 00 +T 0b 00 00 00 65 72 76 65 72 20 3c 6e 6e 74 70 +R 00 00 01 00 +T 16 00 00 00 73 65 72 76 65 72 3e 20 3c 69 6e +R 00 00 01 00 +T 21 00 00 00 74 65 72 76 61 6c 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0500_fea0_nntp_20dropserver_2.rel b/src/nos/lib/messages_lib/0500_fea0_nntp_20dropserver_2.rel new file mode 100644 index 00000000..0534bcfd --- /dev/null +++ b/src/nos/lib/messages_lib/0500_fea0_nntp_20dropserver_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0500_fea0_nntp_20dropserver_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 6e 6e 74 70 20 64 72 6f 70 +R 00 00 01 00 +T 0b 00 00 00 73 65 72 76 65 72 20 3c 6e 6e 74 +R 00 00 01 00 +T 16 00 00 00 70 73 65 72 76 65 72 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0501_a821_nntp_20kick_20_3cnn.rel b/src/nos/lib/messages_lib/0501_a821_nntp_20kick_20_3cnn.rel new file mode 100644 index 00000000..c6daab21 --- /dev/null +++ b/src/nos/lib/messages_lib/0501_a821_nntp_20kick_20_3cnn.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0501_a821_nntp_20kick_20_3cnn Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 6e 6e 74 70 20 6b 69 63 6b +R 00 00 01 00 +T 0b 00 00 00 20 3c 6e 6e 74 70 73 65 72 76 65 +R 00 00 01 00 +T 16 00 00 00 72 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0502_a7f6_no_20filesys.rel b/src/nos/lib/messages_lib/0502_a7f6_no_20filesys.rel new file mode 100644 index 00000000..a995b8f5 --- /dev/null +++ b/src/nos/lib/messages_lib/0502_a7f6_no_20filesys.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0502_a7f6_no_20filesys Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 6e 6f 20 66 69 6c 65 73 79 +R 00 00 01 00 +T 0b 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0503_7405_no_20root.rel b/src/nos/lib/messages_lib/0503_7405_no_20root.rel new file mode 100644 index 00000000..8de2750e --- /dev/null +++ b/src/nos/lib/messages_lib/0503_7405_no_20root.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0503_7405_no_20root Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 6e 6f 20 72 6f 6f 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0504_b518_no_20such_20route_0.rel b/src/nos/lib/messages_lib/0504_b518_no_20such_20route_0.rel new file mode 100644 index 00000000..0be2da3d --- /dev/null +++ b/src/nos/lib/messages_lib/0504_b518_no_20such_20route_0.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0504_b518_no_20such_20route_0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 6e 6f 20 73 75 63 68 20 72 +R 00 00 01 00 +T 0b 00 00 00 6f 75 74 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0505_3fb4_nodefilter.rel b/src/nos/lib/messages_lib/0505_3fb4_nodefilter.rel new file mode 100644 index 00000000..ed4d79c7 --- /dev/null +++ b/src/nos/lib/messages_lib/0505_3fb4_nodefilter.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0505_3fb4_nodefilter Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 6e 6f 64 65 66 69 6c 74 65 +R 00 00 01 00 +T 0b 00 00 00 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0506_bac4_nodefilter_20subcom.rel b/src/nos/lib/messages_lib/0506_bac4_nodefilter_20subcom.rel new file mode 100644 index 00000000..5176c1f8 --- /dev/null +++ b/src/nos/lib/messages_lib/0506_bac4_nodefilter_20subcom.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___0506_bac4_nodefilter_20subcom Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 6e 6f 64 65 66 69 6c 74 65 +R 00 00 01 00 +T 0b 00 00 00 72 20 73 75 62 63 6f 6d 6d 61 6e +R 00 00 01 00 +T 16 00 00 00 64 73 3a 20 61 64 64 20 64 72 6f +R 00 00 01 00 +T 21 00 00 00 70 20 6d 6f 64 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0507_e743_nodes.rel b/src/nos/lib/messages_lib/0507_e743_nodes.rel new file mode 100644 index 00000000..c5f22f3e --- /dev/null +++ b/src/nos/lib/messages_lib/0507_e743_nodes.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0507_e743_nodes Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 6e 6f 64 65 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0508_57cf_nodetimer.rel b/src/nos/lib/messages_lib/0508_57cf_nodetimer.rel new file mode 100644 index 00000000..c4131088 --- /dev/null +++ b/src/nos/lib/messages_lib/0508_57cf_nodetimer.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0508_57cf_nodetimer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 6e 6f 64 65 74 69 6d 65 72 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0509_7a7f_none_0a.rel b/src/nos/lib/messages_lib/0509_7a7f_none_0a.rel new file mode 100644 index 00000000..d5f25a13 --- /dev/null +++ b/src/nos/lib/messages_lib/0509_7a7f_none_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0509_7a7f_none_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 6e 6f 6e 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/050a_29c2_normal_20_28_25s_20.rel b/src/nos/lib/messages_lib/050a_29c2_normal_20_28_25s_20.rel new file mode 100644 index 00000000..8e2145f6 --- /dev/null +++ b/src/nos/lib/messages_lib/050a_29c2_normal_20_28_25s_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___050a_29c2_normal_20_28_25s_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 6e 6f 72 6d 61 6c 20 28 25 +R 00 00 01 00 +T 0b 00 00 00 73 20 25 73 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/050b_07d0_null_0a.rel b/src/nos/lib/messages_lib/050b_07d0_null_0a.rel new file mode 100644 index 00000000..70703e17 --- /dev/null +++ b/src/nos/lib/messages_lib/050b_07d0_null_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___050b_07d0_null_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 6e 75 6c 6c 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/050c_fb30_obsotimer.rel b/src/nos/lib/messages_lib/050c_fb30_obsotimer.rel new file mode 100644 index 00000000..a93df7d4 --- /dev/null +++ b/src/nos/lib/messages_lib/050c_fb30_obsotimer.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___050c_fb30_obsotimer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 6f 62 73 6f 74 69 6d 65 72 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/050d_3971_open.rel b/src/nos/lib/messages_lib/050d_3971_open.rel new file mode 100644 index 00000000..6b07d48b --- /dev/null +++ b/src/nos/lib/messages_lib/050d_3971_open.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___050d_3971_open Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 6f 70 65 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/050e_a412_open_20_25s.rel b/src/nos/lib/messages_lib/050e_a412_open_20_25s.rel new file mode 100644 index 00000000..9aca1e91 --- /dev/null +++ b/src/nos/lib/messages_lib/050e_a412_open_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___050e_a412_open_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 6f 70 65 6e 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/050f_e5a0_open_20FTP.rel b/src/nos/lib/messages_lib/050f_e5a0_open_20FTP.rel new file mode 100644 index 00000000..8beafeb2 --- /dev/null +++ b/src/nos/lib/messages_lib/050f_e5a0_open_20FTP.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___050f_e5a0_open_20FTP Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 6f 70 65 6e 20 46 54 50 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0510_10d3_open_20Finger.rel b/src/nos/lib/messages_lib/0510_10d3_open_20Finger.rel new file mode 100644 index 00000000..39300217 --- /dev/null +++ b/src/nos/lib/messages_lib/0510_10d3_open_20Finger.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0510_10d3_open_20Finger Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 6f 70 65 6e 20 46 69 6e 67 +R 00 00 01 00 +T 0b 00 00 00 65 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0511_fe22_open_20MBOX.rel b/src/nos/lib/messages_lib/0511_fe22_open_20MBOX.rel new file mode 100644 index 00000000..56ff637c --- /dev/null +++ b/src/nos/lib/messages_lib/0511_fe22_open_20MBOX.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0511_fe22_open_20MBOX Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 6f 70 65 6e 20 4d 42 4f 58 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0512_c7d5_open_20POP.rel b/src/nos/lib/messages_lib/0512_c7d5_open_20POP.rel new file mode 100644 index 00000000..d88247cd --- /dev/null +++ b/src/nos/lib/messages_lib/0512_c7d5_open_20POP.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0512_c7d5_open_20POP Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 6f 70 65 6e 20 50 4f 50 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0513_2477_open_20SMTP.rel b/src/nos/lib/messages_lib/0513_2477_open_20SMTP.rel new file mode 100644 index 00000000..4793e29c --- /dev/null +++ b/src/nos/lib/messages_lib/0513_2477_open_20SMTP.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0513_2477_open_20SMTP Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 6f 70 65 6e 20 53 4d 54 50 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0514_4ca5_open_20discard.rel b/src/nos/lib/messages_lib/0514_4ca5_open_20discard.rel new file mode 100644 index 00000000..97a42d00 --- /dev/null +++ b/src/nos/lib/messages_lib/0514_4ca5_open_20discard.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0514_4ca5_open_20discard Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 6f 70 65 6e 20 64 69 73 63 +R 00 00 01 00 +T 0b 00 00 00 61 72 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0515_e649_open_20echo.rel b/src/nos/lib/messages_lib/0515_e649_open_20echo.rel new file mode 100644 index 00000000..c6701083 --- /dev/null +++ b/src/nos/lib/messages_lib/0515_e649_open_20echo.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0515_e649_open_20echo Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 6f 70 65 6e 20 65 63 68 6f +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0516_a479_open_20term.rel b/src/nos/lib/messages_lib/0516_a479_open_20term.rel new file mode 100644 index 00000000..084327b0 --- /dev/null +++ b/src/nos/lib/messages_lib/0516_a479_open_20term.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0516_a479_open_20term Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 6f 70 65 6e 20 74 65 72 6d +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0517_2f09_p_5finit_28_29.rel b/src/nos/lib/messages_lib/0517_2f09_p_5finit_28_29.rel new file mode 100644 index 00000000..e45ee197 --- /dev/null +++ b/src/nos/lib/messages_lib/0517_2f09_p_5finit_28_29.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___0517_2f09_p_5finit_28_29 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 70 5f 69 6e 69 74 28 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0518_76ec_packet_20delayed_20.rel b/src/nos/lib/messages_lib/0518_76ec_packet_20delayed_20.rel new file mode 100644 index 00000000..638b8d8f --- /dev/null +++ b/src/nos/lib/messages_lib/0518_76ec_packet_20delayed_20.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0518_76ec_packet_20delayed_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 70 61 63 6b 65 74 20 64 65 +R 00 00 01 00 +T 0b 00 00 00 6c 61 79 65 64 20 25 6c 64 20 6d +R 00 00 01 00 +T 16 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0519_8504_packet_20duped_0a.rel b/src/nos/lib/messages_lib/0519_8504_packet_20duped_0a.rel new file mode 100644 index 00000000..4b54c465 --- /dev/null +++ b/src/nos/lib/messages_lib/0519_8504_packet_20duped_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10 flags 0 +S ___0519_8504_packet_20duped_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0e 00 70 61 63 6b 65 74 20 64 75 +R 00 00 01 00 +T 0b 00 00 00 70 65 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/051a_a8e1_packet_20lost_0a.rel b/src/nos/lib/messages_lib/051a_a8e1_packet_20lost_0a.rel new file mode 100644 index 00000000..f86f909e --- /dev/null +++ b/src/nos/lib/messages_lib/051a_a8e1_packet_20lost_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___051a_a8e1_packet_20lost_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 70 61 63 6b 65 74 20 6c 6f +R 00 00 01 00 +T 0b 00 00 00 73 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/051b_ead4_paclen.rel b/src/nos/lib/messages_lib/051b_ead4_paclen.rel new file mode 100644 index 00000000..82ea94a4 --- /dev/null +++ b/src/nos/lib/messages_lib/051b_ead4_paclen.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___051b_ead4_paclen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 70 61 63 6c 65 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/051c_1a03_page.rel b/src/nos/lib/messages_lib/051c_1a03_page.rel new file mode 100644 index 00000000..8e6381ae --- /dev/null +++ b/src/nos/lib/messages_lib/051c_1a03_page.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___051c_1a03_page Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 70 61 67 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/051d_dd11_page_20_3ccommand_3.rel b/src/nos/lib/messages_lib/051d_dd11_page_20_3ccommand_3.rel new file mode 100644 index 00000000..4e27be9b --- /dev/null +++ b/src/nos/lib/messages_lib/051d_dd11_page_20_3ccommand_3.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___051d_dd11_page_20_3ccommand_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 70 61 67 65 20 3c 63 6f 6d +R 00 00 01 00 +T 0b 00 00 00 6d 61 6e 64 3e 20 5b 61 72 67 73 +R 00 00 01 00 +T 16 00 00 00 2e 2e 2e 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/051e_b6e1_pap.rel b/src/nos/lib/messages_lib/051e_b6e1_pap.rel new file mode 100644 index 00000000..f9a6623b --- /dev/null +++ b/src/nos/lib/messages_lib/051e_b6e1_pap.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___051e_b6e1_pap Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 70 61 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/051f_512a_param.rel b/src/nos/lib/messages_lib/051f_512a_param.rel new file mode 100644 index 00000000..adb51fab --- /dev/null +++ b/src/nos/lib/messages_lib/051f_512a_param.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___051f_512a_param Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 70 61 72 61 6d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0520_d362_param_20_3cinterfac.rel b/src/nos/lib/messages_lib/0520_d362_param_20_3cinterfac.rel new file mode 100644 index 00000000..e132bc8a --- /dev/null +++ b/src/nos/lib/messages_lib/0520_d362_param_20_3cinterfac.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___0520_d362_param_20_3cinterfac Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 70 61 72 61 6d 20 3c 69 6e +R 00 00 01 00 +T 0b 00 00 00 74 65 72 66 61 63 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0521_9d45_pass.rel b/src/nos/lib/messages_lib/0521_9d45_pass.rel new file mode 100644 index 00000000..c6fdc80f --- /dev/null +++ b/src/nos/lib/messages_lib/0521_9d45_pass.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0521_9d45_pass Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 70 61 73 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0522_f746_pause.rel b/src/nos/lib/messages_lib/0522_f746_pause.rel new file mode 100644 index 00000000..844e6b0b --- /dev/null +++ b/src/nos/lib/messages_lib/0522_f746_pause.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0522_f746_pause Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 70 61 75 73 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0523_d9f3_pfc.rel b/src/nos/lib/messages_lib/0523_d9f3_pfc.rel new file mode 100644 index 00000000..cd34e2c1 --- /dev/null +++ b/src/nos/lib/messages_lib/0523_d9f3_pfc.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0523_d9f3_pfc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 70 66 63 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0524_28cb_ping.rel b/src/nos/lib/messages_lib/0524_28cb_ping.rel new file mode 100644 index 00000000..15649ad8 --- /dev/null +++ b/src/nos/lib/messages_lib/0524_28cb_ping.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0524_28cb_ping Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 70 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0525_d85a_ping_20_3chostid_3e.rel b/src/nos/lib/messages_lib/0525_d85a_ping_20_3chostid_3e.rel new file mode 100644 index 00000000..5c4a4e9e --- /dev/null +++ b/src/nos/lib/messages_lib/0525_d85a_ping_20_3chostid_3e.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S ___0525_d85a_ping_20_3chostid_3e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 30 00 70 69 6e 67 20 3c 68 6f 73 +R 00 00 01 00 +T 0b 00 00 00 74 69 64 3e 20 5b 3c 6c 65 6e 67 +R 00 00 01 00 +T 16 00 00 00 74 68 3e 20 5b 3c 69 6e 74 65 72 +R 00 00 01 00 +T 21 00 00 00 76 61 6c 3e 20 5b 69 6e 63 66 6c +R 00 00 01 00 +T 2c 00 00 00 61 67 5d 5d 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0526_0458_pipe.rel b/src/nos/lib/messages_lib/0526_0458_pipe.rel new file mode 100644 index 00000000..1a84405d --- /dev/null +++ b/src/nos/lib/messages_lib/0526_0458_pipe.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0526_0458_pipe Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 70 69 70 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0527_5919_pool.rel b/src/nos/lib/messages_lib/0527_5919_pool.rel new file mode 100644 index 00000000..b89933fe --- /dev/null +++ b/src/nos/lib/messages_lib/0527_5919_pool.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0527_5919_pool Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 70 6f 6f 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0528_e039_port.rel b/src/nos/lib/messages_lib/0528_e039_port.rel new file mode 100644 index 00000000..9de232cf --- /dev/null +++ b/src/nos/lib/messages_lib/0528_e039_port.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0528_e039_port Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 70 6f 72 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0529_a9d2_port_20_25d_3a_20tx.rel b/src/nos/lib/messages_lib/0529_a9d2_port_20_25d_3a_20tx.rel new file mode 100644 index 00000000..9399d383 --- /dev/null +++ b/src/nos/lib/messages_lib/0529_a9d2_port_20_25d_3a_20tx.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6e flags 0 +S ___0529_a9d2_port_20_25d_3a_20tx Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 6c 00 70 6f 72 74 20 25 64 3a 20 +R 00 00 01 00 +T 0b 00 00 00 74 78 70 6b 74 73 20 25 6c 75 20 +R 00 00 01 00 +T 16 00 00 00 69 6e 74 73 20 25 6c 75 20 72 78 +R 00 00 01 00 +T 21 00 00 00 70 6b 74 73 20 25 6c 75 20 72 78 +R 00 00 01 00 +T 2c 00 00 00 62 79 74 65 73 20 25 6c 75 20 6e +R 00 00 01 00 +T 37 00 00 00 6f 6d 65 6d 20 25 6c 75 20 74 6f +R 00 00 01 00 +T 42 00 00 00 6f 62 69 67 20 25 6c 75 20 63 72 +R 00 00 01 00 +T 4d 00 00 00 63 65 72 72 20 25 6c 75 20 61 62 +R 00 00 01 00 +T 58 00 00 00 6f 72 74 73 20 25 6c 75 20 6f 76 +R 00 00 01 00 +T 63 00 00 00 65 72 72 75 6e 20 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/052a_3aa8_ppp.rel b/src/nos/lib/messages_lib/052a_3aa8_ppp.rel new file mode 100644 index 00000000..d1ac04ec --- /dev/null +++ b/src/nos/lib/messages_lib/052a_3aa8_ppp.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___052a_3aa8_ppp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 70 70 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/052b_8304_ppp_5fproc_3a_20mis.rel b/src/nos/lib/messages_lib/052b_8304_ppp_5fproc_3a_20mis.rel new file mode 100644 index 00000000..f23b1b10 --- /dev/null +++ b/src/nos/lib/messages_lib/052b_8304_ppp_5fproc_3a_20mis.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1a flags 0 +S ___052b_8304_ppp_5fproc_3a_20mis Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 18 00 70 70 70 5f 70 72 6f 63 3a +R 00 00 01 00 +T 0b 00 00 00 20 6d 69 73 73 69 6e 67 20 69 66 +R 00 00 01 00 +T 16 00 00 00 61 63 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/052c_3dc2_protocol_3a_20.rel b/src/nos/lib/messages_lib/052c_3dc2_protocol_3a_20.rel new file mode 100644 index 00000000..ed59ac25 --- /dev/null +++ b/src/nos/lib/messages_lib/052c_3dc2_protocol_3a_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___052c_3dc2_protocol_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 70 72 6f 74 6f 63 6f 6c 3a +R 00 00 01 00 +T 0b 00 00 00 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/052d_4160_ps.rel b/src/nos/lib/messages_lib/052d_4160_ps.rel new file mode 100644 index 00000000..349b943b --- /dev/null +++ b/src/nos/lib/messages_lib/052d_4160_ps.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___052d_4160_ps Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 70 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/052e_26dc_pthresh.rel b/src/nos/lib/messages_lib/052e_26dc_pthresh.rel new file mode 100644 index 00000000..868c517e --- /dev/null +++ b/src/nos/lib/messages_lib/052e_26dc_pthresh.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___052e_26dc_pthresh Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 70 74 68 72 65 73 68 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/052f_a61f_publish.rel b/src/nos/lib/messages_lib/052f_a61f_publish.rel new file mode 100644 index 00000000..5de57c53 --- /dev/null +++ b/src/nos/lib/messages_lib/052f_a61f_publish.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___052f_a61f_publish Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 70 75 62 6c 69 73 68 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0530_274c_pushdown_20calls_20.rel b/src/nos/lib/messages_lib/0530_274c_pushdown_20calls_20.rel new file mode 100644 index 00000000..fb026e45 --- /dev/null +++ b/src/nos/lib/messages_lib/0530_274c_pushdown_20calls_20.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S ___0530_274c_pushdown_20calls_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 35 00 70 75 73 68 64 6f 77 6e 20 +R 00 00 01 00 +T 0b 00 00 00 63 61 6c 6c 73 20 25 6c 75 20 70 +R 00 00 01 00 +T 16 00 00 00 75 73 68 64 6f 77 6e 20 63 61 6c +R 00 00 01 00 +T 21 00 00 00 6c 73 20 74 6f 20 61 6c 6c 6f 63 +R 00 00 01 00 +T 2c 00 00 00 5f 6d 62 75 66 20 25 6c 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0531_0234_put.rel b/src/nos/lib/messages_lib/0531_0234_put.rel new file mode 100644 index 00000000..675667f3 --- /dev/null +++ b/src/nos/lib/messages_lib/0531_0234_put.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0531_0234_put Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 70 75 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0532_8f3b_put_20_3clocalfile_.rel b/src/nos/lib/messages_lib/0532_8f3b_put_20_3clocalfile_.rel new file mode 100644 index 00000000..da2496fe --- /dev/null +++ b/src/nos/lib/messages_lib/0532_8f3b_put_20_3clocalfile_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0532_8f3b_put_20_3clocalfile_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 70 75 74 20 3c 6c 6f 63 61 +R 00 00 01 00 +T 0b 00 00 00 6c 66 69 6c 65 3e 20 3c 72 65 6d +R 00 00 01 00 +T 16 00 00 00 6f 74 65 66 69 6c 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0533_2105_pwd.rel b/src/nos/lib/messages_lib/0533_2105_pwd.rel new file mode 100644 index 00000000..711d5035 --- /dev/null +++ b/src/nos/lib/messages_lib/0533_2105_pwd.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0533_2105_pwd Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 70 77 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0534_0282_qlimit.rel b/src/nos/lib/messages_lib/0534_0282_qlimit.rel new file mode 100644 index 00000000..8786f8ac --- /dev/null +++ b/src/nos/lib/messages_lib/0534_0282_qlimit.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0534_0282_qlimit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 71 6c 69 6d 69 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0535_0be6_queries.rel b/src/nos/lib/messages_lib/0535_0be6_queries.rel new file mode 100644 index 00000000..9d60b73a --- /dev/null +++ b/src/nos/lib/messages_lib/0535_0be6_queries.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0535_0be6_queries Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 71 75 65 72 69 65 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0536_0bef_query.rel b/src/nos/lib/messages_lib/0536_0bef_query.rel new file mode 100644 index 00000000..e32c8f4e --- /dev/null +++ b/src/nos/lib/messages_lib/0536_0bef_query.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0536_0bef_query Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 71 75 65 72 79 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0537_6646_query_20_3chostid_3.rel b/src/nos/lib/messages_lib/0537_6646_query_20_3chostid_3.rel new file mode 100644 index 00000000..7f4617e2 --- /dev/null +++ b/src/nos/lib/messages_lib/0537_6646_query_20_3chostid_3.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0537_6646_query_20_3chostid_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 71 75 65 72 79 20 3c 68 6f +R 00 00 01 00 +T 0b 00 00 00 73 74 69 64 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0538_27c8_queue_20job_20_25s_.rel b/src/nos/lib/messages_lib/0538_27c8_queue_20job_20_25s_.rel new file mode 100644 index 00000000..c0b5040f --- /dev/null +++ b/src/nos/lib/messages_lib/0538_27c8_queue_20job_20_25s_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0538_27c8_queue_20job_20_25s_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 71 75 65 75 65 20 6a 6f 62 +R 00 00 01 00 +T 0b 00 00 00 20 25 73 20 46 72 6f 6d 3a 20 25 +R 00 00 01 00 +T 16 00 00 00 73 20 54 6f 3a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0539_1196_quick.rel b/src/nos/lib/messages_lib/0539_1196_quick.rel new file mode 100644 index 00000000..139d4c06 --- /dev/null +++ b/src/nos/lib/messages_lib/0539_1196_quick.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0539_1196_quick Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 71 75 69 63 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/053a_ad30_quiet.rel b/src/nos/lib/messages_lib/053a_ad30_quiet.rel new file mode 100644 index 00000000..6d73e7c9 --- /dev/null +++ b/src/nos/lib/messages_lib/053a_ad30_quiet.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___053a_ad30_quiet Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 71 75 69 65 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/053b_7b54_quit.rel b/src/nos/lib/messages_lib/053b_7b54_quit.rel new file mode 100644 index 00000000..d440e6a8 --- /dev/null +++ b/src/nos/lib/messages_lib/053b_7b54_quit.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___053b_7b54_quit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 71 75 69 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/053c_054d_read.rel b/src/nos/lib/messages_lib/053c_054d_read.rel new file mode 100644 index 00000000..06329083 --- /dev/null +++ b/src/nos/lib/messages_lib/053c_054d_read.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___053c_054d_read Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 72 65 61 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/053d_c7a9_read_20_3cremotefil.rel b/src/nos/lib/messages_lib/053d_c7a9_read_20_3cremotefil.rel new file mode 100644 index 00000000..0c9a6898 --- /dev/null +++ b/src/nos/lib/messages_lib/053d_c7a9_read_20_3cremotefil.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___053d_c7a9_read_20_3cremotefil Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 72 65 61 64 20 3c 72 65 6d +R 00 00 01 00 +T 0b 00 00 00 6f 74 65 66 69 6c 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/053e_7ee6_reboot.rel b/src/nos/lib/messages_lib/053e_7ee6_reboot.rel new file mode 100644 index 00000000..da2b4180 --- /dev/null +++ b/src/nos/lib/messages_lib/053e_7ee6_reboot.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___053e_7ee6_reboot Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 72 65 62 6f 6f 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/053f_1c64_received_20_25u_20b.rel b/src/nos/lib/messages_lib/053f_1c64_received_20_25u_20b.rel new file mode 100644 index 00000000..dd30b154 --- /dev/null +++ b/src/nos/lib/messages_lib/053f_1c64_received_20_25u_20b.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4c flags 0 +S ___053f_1c64_received_20_25u_20b Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 4a 00 72 65 63 65 69 76 65 64 20 +R 00 00 01 00 +T 0b 00 00 00 25 75 20 62 61 64 74 79 70 65 20 +R 00 00 01 00 +T 16 00 00 00 25 75 20 62 6f 67 75 73 20 61 64 +R 00 00 01 00 +T 21 00 00 00 64 72 20 25 75 20 72 65 71 73 74 +R 00 00 01 00 +T 2c 00 00 00 20 69 6e 20 25 75 20 72 65 70 6c +R 00 00 01 00 +T 37 00 00 00 69 65 73 20 25 75 20 72 65 71 73 +R 00 00 01 00 +T 42 00 00 00 74 20 6f 75 74 20 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0540_5735_record.rel b/src/nos/lib/messages_lib/0540_5735_record.rel new file mode 100644 index 00000000..67fe880e --- /dev/null +++ b/src/nos/lib/messages_lib/0540_5735_record.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0540_5735_record Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 72 65 63 6f 72 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0541_18c5_recv_3a_20do_20.rel b/src/nos/lib/messages_lib/0541_18c5_recv_3a_20do_20.rel new file mode 100644 index 00000000..9d0dfc73 --- /dev/null +++ b/src/nos/lib/messages_lib/0541_18c5_recv_3a_20do_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___0541_18c5_recv_3a_20do_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 72 65 63 76 3a 20 64 6f 20 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0542_8810_recv_3a_20dont_20.rel b/src/nos/lib/messages_lib/0542_8810_recv_3a_20dont_20.rel new file mode 100644 index 00000000..ff176970 --- /dev/null +++ b/src/nos/lib/messages_lib/0542_8810_recv_3a_20dont_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0542_8810_recv_3a_20dont_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 72 65 63 76 3a 20 64 6f 6e +R 00 00 01 00 +T 0b 00 00 00 74 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0543_84ef_recv_3a_20will_20.rel b/src/nos/lib/messages_lib/0543_84ef_recv_3a_20will_20.rel new file mode 100644 index 00000000..845d5752 --- /dev/null +++ b/src/nos/lib/messages_lib/0543_84ef_recv_3a_20will_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0543_84ef_recv_3a_20will_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 72 65 63 76 3a 20 77 69 6c +R 00 00 01 00 +T 0b 00 00 00 6c 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0544_219c_recv_3a_20wont_20.rel b/src/nos/lib/messages_lib/0544_219c_recv_3a_20wont_20.rel new file mode 100644 index 00000000..2da7f7b8 --- /dev/null +++ b/src/nos/lib/messages_lib/0544_219c_recv_3a_20wont_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0544_219c_recv_3a_20wont_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 72 65 63 76 3a 20 77 6f 6e +R 00 00 01 00 +T 0b 00 00 00 74 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0545_c7dc_refuse.rel b/src/nos/lib/messages_lib/0545_c7dc_refuse.rel new file mode 100644 index 00000000..0a04f37c --- /dev/null +++ b/src/nos/lib/messages_lib/0545_c7dc_refuse.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0545_c7dc_refuse Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 72 65 66 75 73 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0546_0e31_reject_0a.rel b/src/nos/lib/messages_lib/0546_0e31_reject_0a.rel new file mode 100644 index 00000000..8674eabd --- /dev/null +++ b/src/nos/lib/messages_lib/0546_0e31_reject_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0546_0e31_reject_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 72 65 6a 65 63 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0547_bc2e_remote.rel b/src/nos/lib/messages_lib/0547_bc2e_remote.rel new file mode 100644 index 00000000..8c46a69c --- /dev/null +++ b/src/nos/lib/messages_lib/0547_bc2e_remote.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0547_bc2e_remote Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 72 65 6d 6f 74 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0548_4ff0_remote_20_5b_2dp_20.rel b/src/nos/lib/messages_lib/0548_4ff0_remote_20_5b_2dp_20.rel new file mode 100644 index 00000000..7cf9d9da --- /dev/null +++ b/src/nos/lib/messages_lib/0548_4ff0_remote_20_5b_2dp_20.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 44 flags 0 +S ___0548_4ff0_remote_20_5b_2dp_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 42 00 72 65 6d 6f 74 65 20 5b 2d +R 00 00 01 00 +T 0b 00 00 00 70 20 70 6f 72 74 5d 20 5b 2d 6b +R 00 00 01 00 +T 16 00 00 00 20 6b 65 79 5d 20 5b 2d 61 20 6b +R 00 00 01 00 +T 21 00 00 00 69 63 6b 61 64 64 72 5d 20 3c 61 +R 00 00 01 00 +T 2c 00 00 00 64 64 72 65 73 73 3e 20 65 78 69 +R 00 00 01 00 +T 37 00 00 00 74 7c 72 65 73 65 74 7c 6b 69 63 +R 00 00 01 00 +T 42 00 00 00 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0549_cb71_rename.rel b/src/nos/lib/messages_lib/0549_cb71_rename.rel new file mode 100644 index 00000000..ebf03e03 --- /dev/null +++ b/src/nos/lib/messages_lib/0549_cb71_rename.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0549_cb71_rename Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 72 65 6e 61 6d 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/054a_a493_rename_20_3coldfile.rel b/src/nos/lib/messages_lib/054a_a493_rename_20_3coldfile.rel new file mode 100644 index 00000000..c754aeec --- /dev/null +++ b/src/nos/lib/messages_lib/054a_a493_rename_20_3coldfile.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___054a_a493_rename_20_3coldfile Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 72 65 6e 61 6d 65 20 3c 6f +R 00 00 01 00 +T 0b 00 00 00 6c 64 66 69 6c 65 3e 20 3c 6e 65 +R 00 00 01 00 +T 16 00 00 00 77 66 69 6c 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/054b_6d5b_repeat.rel b/src/nos/lib/messages_lib/054b_6d5b_repeat.rel new file mode 100644 index 00000000..4b47c747 --- /dev/null +++ b/src/nos/lib/messages_lib/054b_6d5b_repeat.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___054b_6d5b_repeat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 72 65 70 65 61 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/054c_01b9_repeat_20_3cinterva.rel b/src/nos/lib/messages_lib/054c_01b9_repeat_20_3cinterva.rel new file mode 100644 index 00000000..f58d02c8 --- /dev/null +++ b/src/nos/lib/messages_lib/054c_01b9_repeat_20_3cinterva.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28 flags 0 +S ___054c_01b9_repeat_20_3cinterva Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 26 00 72 65 70 65 61 74 20 3c 69 +R 00 00 01 00 +T 0b 00 00 00 6e 74 65 72 76 61 6c 3e 20 3c 63 +R 00 00 01 00 +T 16 00 00 00 6f 6d 6d 61 6e 64 3e 20 5b 61 72 +R 00 00 01 00 +T 21 00 00 00 67 73 2e 2e 2e 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/054d_3f14_request.rel b/src/nos/lib/messages_lib/054d_3f14_request.rel new file mode 100644 index 00000000..baeead15 --- /dev/null +++ b/src/nos/lib/messages_lib/054d_3f14_request.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___054d_3f14_request Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 72 65 71 75 65 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/054e_85b2_reset.rel b/src/nos/lib/messages_lib/054e_85b2_reset.rel new file mode 100644 index 00000000..42c4951c --- /dev/null +++ b/src/nos/lib/messages_lib/054e_85b2_reset.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___054e_85b2_reset Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 72 65 73 65 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/054f_c3ce_response_20id_20_25.rel b/src/nos/lib/messages_lib/054f_c3ce_response_20id_20_25.rel new file mode 100644 index 00000000..f6cb02fc --- /dev/null +++ b/src/nos/lib/messages_lib/054f_c3ce_response_20id_20_25.rel @@ -0,0 +1,24 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 51 flags 0 +S ___054f_c3ce_response_20id_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 4f 00 72 65 73 70 6f 6e 73 65 20 +R 00 00 01 00 +T 0b 00 00 00 69 64 20 25 75 20 28 72 74 74 20 +R 00 00 01 00 +T 16 00 00 00 25 6c 75 20 73 65 63 29 20 71 72 +R 00 00 01 00 +T 21 00 00 00 20 25 75 20 6f 70 63 6f 64 65 20 +R 00 00 01 00 +T 2c 00 00 00 25 75 20 61 61 20 25 75 20 74 63 +R 00 00 01 00 +T 37 00 00 00 20 25 75 20 72 64 20 25 75 20 72 +R 00 00 01 00 +T 42 00 00 00 61 20 25 75 20 72 63 6f 64 65 20 +R 00 00 01 00 +T 4d 00 00 00 25 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0550_9bd3_retr.rel b/src/nos/lib/messages_lib/0550_9bd3_retr.rel new file mode 100644 index 00000000..91fb1f7c --- /dev/null +++ b/src/nos/lib/messages_lib/0550_9bd3_retr.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0550_9bd3_retr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 72 65 74 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0551_5e3c_retries.rel b/src/nos/lib/messages_lib/0551_5e3c_retries.rel new file mode 100644 index 00000000..87cb4f93 --- /dev/null +++ b/src/nos/lib/messages_lib/0551_5e3c_retries.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0551_5e3c_retries Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 72 65 74 72 69 65 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0552_0acb_retry.rel b/src/nos/lib/messages_lib/0552_0acb_retry.rel new file mode 100644 index 00000000..046beab5 --- /dev/null +++ b/src/nos/lib/messages_lib/0552_0acb_retry.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0552_0acb_retry Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 72 65 74 72 79 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0553_7f96_rip_20accept_20_3cg.rel b/src/nos/lib/messages_lib/0553_7f96_rip_20accept_20_3cg.rel new file mode 100644 index 00000000..a7010673 --- /dev/null +++ b/src/nos/lib/messages_lib/0553_7f96_rip_20accept_20_3cg.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 18 flags 0 +S ___0553_7f96_rip_20accept_20_3cg Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 16 00 72 69 70 20 61 63 63 65 70 +R 00 00 01 00 +T 0b 00 00 00 74 20 3c 67 61 74 65 77 61 79 3e +R 00 00 01 00 +T 16 00 00 00 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0554_764e_rip_20add_20_3cdest.rel b/src/nos/lib/messages_lib/0554_764e_rip_20add_20_3cdest.rel new file mode 100644 index 00000000..c7e18840 --- /dev/null +++ b/src/nos/lib/messages_lib/0554_764e_rip_20add_20_3cdest.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26 flags 0 +S ___0554_764e_rip_20add_20_3cdest Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 24 00 72 69 70 20 61 64 64 20 3c +R 00 00 01 00 +T 0b 00 00 00 64 65 73 74 3e 20 3c 69 6e 74 65 +R 00 00 01 00 +T 16 00 00 00 72 76 61 6c 3e 20 5b 3c 66 6c 61 +R 00 00 01 00 +T 21 00 00 00 67 73 3e 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0555_3030_rip_20drop_20_3cdes.rel b/src/nos/lib/messages_lib/0555_3030_rip_20drop_20_3cdes.rel new file mode 100644 index 00000000..ccefb545 --- /dev/null +++ b/src/nos/lib/messages_lib/0555_3030_rip_20drop_20_3cdes.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___0555_3030_rip_20drop_20_3cdes Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 72 69 70 20 64 72 6f 70 20 +R 00 00 01 00 +T 0b 00 00 00 3c 64 65 73 74 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0556_8661_rip_20refuse_20_3cg.rel b/src/nos/lib/messages_lib/0556_8661_rip_20refuse_20_3cg.rel new file mode 100644 index 00000000..3f7c1183 --- /dev/null +++ b/src/nos/lib/messages_lib/0556_8661_rip_20refuse_20_3cg.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___0556_8661_rip_20refuse_20_3cg Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 72 69 70 20 72 65 66 75 73 +R 00 00 01 00 +T 0b 00 00 00 65 20 3c 67 61 74 65 77 61 79 3e +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0557_b917_rmd_20.rel b/src/nos/lib/messages_lib/0557_b917_rmd_20.rel new file mode 100644 index 00000000..7d84cbb2 --- /dev/null +++ b/src/nos/lib/messages_lib/0557_b917_rmd_20.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0557_b917_rmd_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 72 6d 64 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0558_a56c_rmdir.rel b/src/nos/lib/messages_lib/0558_a56c_rmdir.rel new file mode 100644 index 00000000..ee3738b1 --- /dev/null +++ b/src/nos/lib/messages_lib/0558_a56c_rmdir.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0558_a56c_rmdir Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 72 6d 64 69 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0559_b9e3_rmdir_20_3cdirector.rel b/src/nos/lib/messages_lib/0559_b9e3_rmdir_20_3cdirector.rel new file mode 100644 index 00000000..d3275854 --- /dev/null +++ b/src/nos/lib/messages_lib/0559_b9e3_rmdir_20_3cdirector.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___0559_b9e3_rmdir_20_3cdirector Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 72 6d 64 69 72 20 3c 64 69 +R 00 00 01 00 +T 0b 00 00 00 72 65 63 74 6f 72 79 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/055a_c459_rmhost.rel b/src/nos/lib/messages_lib/055a_c459_rmhost.rel new file mode 100644 index 00000000..7165db63 --- /dev/null +++ b/src/nos/lib/messages_lib/055a_c459_rmhost.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___055a_c459_rmhost Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 72 6d 68 6f 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/055b_0284_route.rel b/src/nos/lib/messages_lib/055b_0284_route.rel new file mode 100644 index 00000000..1de98c78 --- /dev/null +++ b/src/nos/lib/messages_lib/055b_0284_route.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___055b_0284_route Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 72 6f 75 74 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/055c_ea02_route_20add_20_3cde.rel b/src/nos/lib/messages_lib/055c_ea02_route_20add_20_3cde.rel new file mode 100644 index 00000000..e2067372 --- /dev/null +++ b/src/nos/lib/messages_lib/055c_ea02_route_20add_20_3cde.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3e flags 0 +S ___055c_ea02_route_20add_20_3cde Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 3c 00 72 6f 75 74 65 20 61 64 64 +R 00 00 01 00 +T 0b 00 00 00 20 3c 64 65 73 74 20 61 64 64 72 +R 00 00 01 00 +T 16 00 00 00 3e 5b 2f 3c 62 69 74 73 3e 5d 20 +R 00 00 01 00 +T 21 00 00 00 3c 69 66 20 6e 61 6d 65 3e 20 5b +R 00 00 01 00 +T 2c 00 00 00 67 61 74 65 77 61 79 5d 20 5b 6d +R 00 00 01 00 +T 37 00 00 00 65 74 72 69 63 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/055d_f461_route_20add_20_5b_2.rel b/src/nos/lib/messages_lib/055d_f461_route_20add_20_5b_2.rel new file mode 100644 index 00000000..73c75ea5 --- /dev/null +++ b/src/nos/lib/messages_lib/055d_f461_route_20add_20_5b_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 17 flags 0 +S ___055d_f461_route_20add_20_5b_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 15 00 72 6f 75 74 65 20 61 64 64 +R 00 00 01 00 +T 0b 00 00 00 20 5b 25 73 5d 2f 25 75 20 25 73 +R 00 00 01 00 +T 16 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/055e_d581_route_20addprivate_.rel b/src/nos/lib/messages_lib/055e_d581_route_20addprivate_.rel new file mode 100644 index 00000000..18458787 --- /dev/null +++ b/src/nos/lib/messages_lib/055e_d581_route_20addprivate_.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 45 flags 0 +S ___055e_d581_route_20addprivate_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 43 00 72 6f 75 74 65 20 61 64 64 +R 00 00 01 00 +T 0b 00 00 00 70 72 69 76 61 74 65 20 3c 64 65 +R 00 00 01 00 +T 16 00 00 00 73 74 20 61 64 64 72 3e 5b 2f 3c +R 00 00 01 00 +T 21 00 00 00 62 69 74 73 3e 5d 20 3c 69 66 20 +R 00 00 01 00 +T 2c 00 00 00 6e 61 6d 65 3e 20 5b 67 61 74 65 +R 00 00 01 00 +T 37 00 00 00 77 61 79 5d 20 5b 6d 65 74 72 69 +R 00 00 01 00 +T 42 00 00 00 63 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/055f_bbd2_route_20drop_20_3cd.rel b/src/nos/lib/messages_lib/055f_bbd2_route_20drop_20_3cd.rel new file mode 100644 index 00000000..27523e83 --- /dev/null +++ b/src/nos/lib/messages_lib/055f_bbd2_route_20drop_20_3cd.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___055f_bbd2_route_20drop_20_3cd Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 72 6f 75 74 65 20 64 72 6f +R 00 00 01 00 +T 0b 00 00 00 70 20 3c 64 65 73 74 20 61 64 64 +R 00 00 01 00 +T 16 00 00 00 72 3e 5b 2f 3c 62 69 74 73 3e 5d +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0560_103e_route_20drop_20_5b_.rel b/src/nos/lib/messages_lib/0560_103e_route_20drop_20_5b_.rel new file mode 100644 index 00000000..6d54d879 --- /dev/null +++ b/src/nos/lib/messages_lib/0560_103e_route_20drop_20_5b_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___0560_103e_route_20drop_20_5b_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 72 6f 75 74 65 20 64 72 6f +R 00 00 01 00 +T 0b 00 00 00 70 20 5b 25 73 5d 2f 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0561_a5ec_route_20lookup_20_3.rel b/src/nos/lib/messages_lib/0561_a5ec_route_20lookup_20_3.rel new file mode 100644 index 00000000..0369cf4a --- /dev/null +++ b/src/nos/lib/messages_lib/0561_a5ec_route_20lookup_20_3.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1b flags 0 +S ___0561_a5ec_route_20lookup_20_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 19 00 72 6f 75 74 65 20 6c 6f 6f +R 00 00 01 00 +T 0b 00 00 00 6b 75 70 20 3c 64 65 73 74 20 61 +R 00 00 01 00 +T 16 00 00 00 64 64 72 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0562_ae23_route_20to_20self_3.rel b/src/nos/lib/messages_lib/0562_ae23_route_20to_20self_3.rel new file mode 100644 index 00000000..816abfa1 --- /dev/null +++ b/src/nos/lib/messages_lib/0562_ae23_route_20to_20self_3.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0562_ae23_route_20to_20self_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 72 6f 75 74 65 20 74 6f 20 +R 00 00 01 00 +T 0b 00 00 00 73 65 6c 66 3a 20 25 73 20 25 6c +R 00 00 01 00 +T 16 00 00 00 64 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0563_2c09_rtimer.rel b/src/nos/lib/messages_lib/0563_2c09_rtimer.rel new file mode 100644 index 00000000..30ac40a1 --- /dev/null +++ b/src/nos/lib/messages_lib/0563_2c09_rtimer.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0563_2c09_rtimer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 72 74 69 6d 65 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0564_ae54_rtt.rel b/src/nos/lib/messages_lib/0564_ae54_rtt.rel new file mode 100644 index 00000000..fb06f883 --- /dev/null +++ b/src/nos/lib/messages_lib/0564_ae54_rtt.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___0564_ae54_rtt Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 72 74 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0565_02fc_running.rel b/src/nos/lib/messages_lib/0565_02fc_running.rel new file mode 100644 index 00000000..fa27722b --- /dev/null +++ b/src/nos/lib/messages_lib/0565_02fc_running.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0565_02fc_running Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 72 75 6e 6e 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0566_b4d7_rxbuf.rel b/src/nos/lib/messages_lib/0566_b4d7_rxbuf.rel new file mode 100644 index 00000000..a52b7f74 --- /dev/null +++ b/src/nos/lib/messages_lib/0566_b4d7_rxbuf.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0566_b4d7_rxbuf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 72 78 62 75 66 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0567_d2fd_sbrk.rel b/src/nos/lib/messages_lib/0567_d2fd_sbrk.rel new file mode 100644 index 00000000..679d53d1 --- /dev/null +++ b/src/nos/lib/messages_lib/0567_d2fd_sbrk.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0567_d2fd_sbrk Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 73 62 72 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0568_3365_scrollback.rel b/src/nos/lib/messages_lib/0568_3365_scrollback.rel new file mode 100644 index 00000000..f77e4e77 --- /dev/null +++ b/src/nos/lib/messages_lib/0568_3365_scrollback.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0568_3365_scrollback Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 73 63 72 6f 6c 6c 62 61 63 +R 00 00 01 00 +T 0b 00 00 00 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0569_9a3e_send.rel b/src/nos/lib/messages_lib/0569_9a3e_send.rel new file mode 100644 index 00000000..9da97dee --- /dev/null +++ b/src/nos/lib/messages_lib/0569_9a3e_send.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0569_9a3e_send Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 73 65 6e 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/056a_e397_send_20_22string_22.rel b/src/nos/lib/messages_lib/056a_e397_send_20_22string_22.rel new file mode 100644 index 00000000..553111c7 --- /dev/null +++ b/src/nos/lib/messages_lib/056a_e397_send_20_22string_22.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___056a_e397_send_20_22string_22 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 73 65 6e 64 20 22 73 74 72 +R 00 00 01 00 +T 0b 00 00 00 69 6e 67 22 20 5b 3c 6d 69 6c 6c +R 00 00 01 00 +T 16 00 00 00 69 73 65 63 6f 6e 64 73 3e 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/056b_5c19_sender.rel b/src/nos/lib/messages_lib/056b_5c19_sender.rel new file mode 100644 index 00000000..00150549 --- /dev/null +++ b/src/nos/lib/messages_lib/056b_5c19_sender.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___056b_5c19_sender Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 73 65 6e 64 65 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/056c_efea_sending_20job_20_25.rel b/src/nos/lib/messages_lib/056c_efea_sending_20job_20_25.rel new file mode 100644 index 00000000..219158a0 --- /dev/null +++ b/src/nos/lib/messages_lib/056c_efea_sending_20job_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___056c_efea_sending_20job_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 73 65 6e 64 69 6e 67 20 6a +R 00 00 01 00 +T 0b 00 00 00 6f 62 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/056d_7321_sent_3a_20do_20.rel b/src/nos/lib/messages_lib/056d_7321_sent_3a_20do_20.rel new file mode 100644 index 00000000..6338cde0 --- /dev/null +++ b/src/nos/lib/messages_lib/056d_7321_sent_3a_20do_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___056d_7321_sent_3a_20do_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 73 65 6e 74 3a 20 64 6f 20 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/056e_db3c_sent_3a_20dont_20.rel b/src/nos/lib/messages_lib/056e_db3c_sent_3a_20dont_20.rel new file mode 100644 index 00000000..d205d9d4 --- /dev/null +++ b/src/nos/lib/messages_lib/056e_db3c_sent_3a_20dont_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___056e_db3c_sent_3a_20dont_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 73 65 6e 74 3a 20 64 6f 6e +R 00 00 01 00 +T 0b 00 00 00 74 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/056f_d7c3_sent_3a_20will_20.rel b/src/nos/lib/messages_lib/056f_d7c3_sent_3a_20will_20.rel new file mode 100644 index 00000000..4e113500 --- /dev/null +++ b/src/nos/lib/messages_lib/056f_d7c3_sent_3a_20will_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___056f_d7c3_sent_3a_20will_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 73 65 6e 74 3a 20 77 69 6c +R 00 00 01 00 +T 0b 00 00 00 6c 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0570_72b0_sent_3a_20wont_20.rel b/src/nos/lib/messages_lib/0570_72b0_sent_3a_20wont_20.rel new file mode 100644 index 00000000..c2e0c42c --- /dev/null +++ b/src/nos/lib/messages_lib/0570_72b0_sent_3a_20wont_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0570_72b0_sent_3a_20wont_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 73 65 6e 74 3a 20 77 6f 6e +R 00 00 01 00 +T 0b 00 00 00 74 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0571_2d5d_serial_20line_20IP_.rel b/src/nos/lib/messages_lib/0571_2d5d_serial_20line_20IP_.rel new file mode 100644 index 00000000..8178be58 --- /dev/null +++ b/src/nos/lib/messages_lib/0571_2d5d_serial_20line_20IP_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1c flags 0 +S ___0571_2d5d_serial_20line_20IP_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1a 00 73 65 72 69 61 6c 20 6c 69 +R 00 00 01 00 +T 0b 00 00 00 6e 65 20 49 50 3a 20 6c 65 6e 3a +R 00 00 01 00 +T 16 00 00 00 20 25 33 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0572_f33e_serial_20line_20VJ_.rel b/src/nos/lib/messages_lib/0572_f33e_serial_20line_20VJ_.rel new file mode 100644 index 00000000..83aa7dbb --- /dev/null +++ b/src/nos/lib/messages_lib/0572_f33e_serial_20line_20VJ_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2a flags 0 +S ___0572_f33e_serial_20line_20VJ_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 28 00 73 65 72 69 61 6c 20 6c 69 +R 00 00 01 00 +T 0b 00 00 00 6e 65 20 56 4a 20 43 6f 6d 70 72 +R 00 00 01 00 +T 16 00 00 00 65 73 73 65 64 20 54 43 50 3a 20 +R 00 00 01 00 +T 21 00 00 00 6c 65 6e 20 25 33 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0573_6f7f_serial_20line_20VJ_.rel b/src/nos/lib/messages_lib/0573_6f7f_serial_20line_20VJ_.rel new file mode 100644 index 00000000..060478cd --- /dev/null +++ b/src/nos/lib/messages_lib/0573_6f7f_serial_20line_20VJ_.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2c flags 0 +S ___0573_6f7f_serial_20line_20VJ_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2a 00 73 65 72 69 61 6c 20 6c 69 +R 00 00 01 00 +T 0b 00 00 00 6e 65 20 56 4a 20 55 6e 63 6f 6d +R 00 00 01 00 +T 16 00 00 00 70 72 65 73 73 65 64 20 54 43 50 +R 00 00 01 00 +T 21 00 00 00 3a 20 6c 65 6e 20 25 33 75 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0574_6f48_server_20retries.rel b/src/nos/lib/messages_lib/0574_6f48_server_20retries.rel new file mode 100644 index 00000000..c459a2a8 --- /dev/null +++ b/src/nos/lib/messages_lib/0574_6f48_server_20retries.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0574_6f48_server_20retries Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 73 65 72 76 65 72 20 72 65 +R 00 00 01 00 +T 0b 00 00 00 74 72 69 65 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0575_f0af_server_20trace.rel b/src/nos/lib/messages_lib/0575_f0af_server_20trace.rel new file mode 100644 index 00000000..e3f15aa4 --- /dev/null +++ b/src/nos/lib/messages_lib/0575_f0af_server_20trace.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___0575_f0af_server_20trace Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 73 65 72 76 65 72 20 74 72 +R 00 00 01 00 +T 0b 00 00 00 61 63 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0576_db9a_session.rel b/src/nos/lib/messages_lib/0576_db9a_session.rel new file mode 100644 index 00000000..8977ec64 --- /dev/null +++ b/src/nos/lib/messages_lib/0576_db9a_session.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0576_db9a_session Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 73 65 73 73 69 6f 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0577_3031_set_20mycall_20firs.rel b/src/nos/lib/messages_lib/0577_3031_set_20mycall_20firs.rel new file mode 100644 index 00000000..c1b7ea3a --- /dev/null +++ b/src/nos/lib/messages_lib/0577_3031_set_20mycall_20firs.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___0577_3031_set_20mycall_20firs Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 73 65 74 20 6d 79 63 61 6c +R 00 00 01 00 +T 0b 00 00 00 6c 20 66 69 72 73 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0578_1de4_shell.rel b/src/nos/lib/messages_lib/0578_1de4_shell.rel new file mode 100644 index 00000000..c55e9d87 --- /dev/null +++ b/src/nos/lib/messages_lib/0578_1de4_shell.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0578_1de4_shell Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 73 68 65 6c 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0579_3faf_signal.rel b/src/nos/lib/messages_lib/0579_3faf_signal.rel new file mode 100644 index 00000000..1ea9184f --- /dev/null +++ b/src/nos/lib/messages_lib/0579_3faf_signal.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0579_3faf_signal Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 73 69 67 6e 61 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/057a_dce5_size.rel b/src/nos/lib/messages_lib/057a_dce5_size.rel new file mode 100644 index 00000000..7186f6a9 --- /dev/null +++ b/src/nos/lib/messages_lib/057a_dce5_size.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___057a_dce5_size Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 73 69 7a 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/057b_f163_sizes.rel b/src/nos/lib/messages_lib/057b_f163_sizes.rel new file mode 100644 index 00000000..6d12a092 --- /dev/null +++ b/src/nos/lib/messages_lib/057b_f163_sizes.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___057b_f163_sizes Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 73 69 7a 65 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/057c_4046_smtp_20daemon_20ent.rel b/src/nos/lib/messages_lib/057c_4046_smtp_20daemon_20ent.rel new file mode 100644 index 00000000..2c74a46e --- /dev/null +++ b/src/nos/lib/messages_lib/057c_4046_smtp_20daemon_20ent.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___057c_4046_smtp_20daemon_20ent Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 73 6d 74 70 20 64 61 65 6d +R 00 00 01 00 +T 0b 00 00 00 6f 6e 20 65 6e 74 65 72 65 64 2c +R 00 00 01 00 +T 16 00 00 00 20 74 61 72 67 65 74 20 3d 20 25 +R 00 00 01 00 +T 21 00 00 00 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/057d_8e2a_smtp_20daemon_3a_20.rel b/src/nos/lib/messages_lib/057d_8e2a_smtp_20daemon_3a_20.rel new file mode 100644 index 00000000..1497301b --- /dev/null +++ b/src/nos/lib/messages_lib/057d_8e2a_smtp_20daemon_3a_20.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___057d_8e2a_smtp_20daemon_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 73 6d 74 70 20 64 61 65 6d +R 00 00 01 00 +T 0b 00 00 00 6f 6e 3a 20 74 6f 6f 20 6d 61 6e +R 00 00 01 00 +T 16 00 00 00 79 20 70 72 6f 63 65 73 73 65 73 +R 00 00 01 00 +T 21 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/057e_23e1_smtp_20job_20_25s_2.rel b/src/nos/lib/messages_lib/057e_23e1_smtp_20job_20_25s_2.rel new file mode 100644 index 00000000..88ff7eb3 --- /dev/null +++ b/src/nos/lib/messages_lib/057e_23e1_smtp_20job_20_25s_2.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S ___057e_23e1_smtp_20job_20_25s_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 20 00 73 6d 74 70 20 6a 6f 62 20 +R 00 00 01 00 +T 0b 00 00 00 25 73 20 72 65 74 75 72 6e 65 64 +R 00 00 01 00 +T 16 00 00 00 20 74 6f 20 73 65 6e 64 65 72 0a +R 00 00 01 00 +T 21 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/057f_ed89_smtp_20mode_3a_20_2.rel b/src/nos/lib/messages_lib/057f_ed89_smtp_20mode_3a_20_2.rel new file mode 100644 index 00000000..ff65e466 --- /dev/null +++ b/src/nos/lib/messages_lib/057f_ed89_smtp_20mode_3a_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___057f_ed89_smtp_20mode_3a_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 73 6d 74 70 20 6d 6f 64 65 +R 00 00 01 00 +T 0b 00 00 00 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0580_2b33_smtp_20recv_3a_20_2.rel b/src/nos/lib/messages_lib/0580_2b33_smtp_20recv_3a_20_2.rel new file mode 100644 index 00000000..c0626e9e --- /dev/null +++ b/src/nos/lib/messages_lib/0580_2b33_smtp_20recv_3a_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___0580_2b33_smtp_20recv_3a_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 73 6d 74 70 20 72 65 63 76 +R 00 00 01 00 +T 0b 00 00 00 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0581_928b_smtp_20sent_3a_20.rel b/src/nos/lib/messages_lib/0581_928b_smtp_20sent_3a_20.rel new file mode 100644 index 00000000..c777d71d --- /dev/null +++ b/src/nos/lib/messages_lib/0581_928b_smtp_20sent_3a_20.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0581_928b_smtp_20sent_3a_20 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 73 6d 74 70 20 73 65 6e 74 +R 00 00 01 00 +T 0b 00 00 00 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0582_b4cf_socket.rel b/src/nos/lib/messages_lib/0582_b4cf_socket.rel new file mode 100644 index 00000000..fc6f37b9 --- /dev/null +++ b/src/nos/lib/messages_lib/0582_b4cf_socket.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0582_b4cf_socket Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 73 6f 63 6b 65 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0583_6b20_some_20strange_2c_2.rel b/src/nos/lib/messages_lib/0583_6b20_some_20strange_2c_2.rel new file mode 100644 index 00000000..e1a05fde --- /dev/null +++ b/src/nos/lib/messages_lib/0583_6b20_some_20strange_2c_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1f flags 0 +S ___0583_6b20_some_20strange_2c_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1d 00 73 6f 6d 65 20 73 74 72 61 +R 00 00 01 00 +T 0b 00 00 00 6e 67 65 2c 20 75 6e 6b 6e 6f 77 +R 00 00 01 00 +T 16 00 00 00 6e 20 76 61 6c 75 65 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0584_60cd_speed.rel b/src/nos/lib/messages_lib/0584_60cd_speed.rel new file mode 100644 index 00000000..5f78888b --- /dev/null +++ b/src/nos/lib/messages_lib/0584_60cd_speed.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0584_60cd_speed Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 73 70 65 65 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0585_9785_speed_20_3cbps_3e.rel b/src/nos/lib/messages_lib/0585_9785_speed_20_3cbps_3e.rel new file mode 100644 index 00000000..2cb0959a --- /dev/null +++ b/src/nos/lib/messages_lib/0585_9785_speed_20_3cbps_3e.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___0585_9785_speed_20_3cbps_3e Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 73 70 65 65 64 20 3c 62 70 +R 00 00 01 00 +T 0b 00 00 00 73 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0586_1861_spool_3a_20_25s_0a.rel b/src/nos/lib/messages_lib/0586_1861_spool_3a_20_25s_0a.rel new file mode 100644 index 00000000..88cfd28d --- /dev/null +++ b/src/nos/lib/messages_lib/0586_1861_spool_3a_20_25s_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0586_1861_spool_3a_20_25s_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 73 70 6f 6f 6c 3a 20 25 73 +R 00 00 01 00 +T 0b 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0587_61f2_src_20_25s.rel b/src/nos/lib/messages_lib/0587_61f2_src_20_25s.rel new file mode 100644 index 00000000..b7a24f51 --- /dev/null +++ b/src/nos/lib/messages_lib/0587_61f2_src_20_25s.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0587_61f2_src_20_25s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 73 72 63 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0588_4e06_srtt_20_3d_20_25lu_.rel b/src/nos/lib/messages_lib/0588_4e06_srtt_20_3d_20_25lu_.rel new file mode 100644 index 00000000..a83f5321 --- /dev/null +++ b/src/nos/lib/messages_lib/0588_4e06_srtt_20_3d_20_25lu_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___0588_4e06_srtt_20_3d_20_25lu_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 73 72 74 74 20 3d 20 25 6c +R 00 00 01 00 +T 0b 00 00 00 75 20 6d 64 65 76 20 3d 20 25 6c +R 00 00 01 00 +T 16 00 00 00 75 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0589_795f_stack_20test.rel b/src/nos/lib/messages_lib/0589_795f_stack_20test.rel new file mode 100644 index 00000000..a3ed6107 --- /dev/null +++ b/src/nos/lib/messages_lib/0589_795f_stack_20test.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___0589_795f_stack_20test Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 73 74 61 63 6b 20 74 65 73 +R 00 00 01 00 +T 0b 00 00 00 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/058a_45e3_stacktest.rel b/src/nos/lib/messages_lib/058a_45e3_stacktest.rel new file mode 100644 index 00000000..6d9b12c3 --- /dev/null +++ b/src/nos/lib/messages_lib/058a_45e3_stacktest.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___058a_45e3_stacktest Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 73 74 61 63 6b 74 65 73 74 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/058b_be0b_stacktest_20_5bon_7.rel b/src/nos/lib/messages_lib/058b_be0b_stacktest_20_5bon_7.rel new file mode 100644 index 00000000..fb6db5c9 --- /dev/null +++ b/src/nos/lib/messages_lib/058b_be0b_stacktest_20_5bon_7.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___058b_be0b_stacktest_20_5bon_7 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 73 74 61 63 6b 74 65 73 74 +R 00 00 01 00 +T 0b 00 00 00 20 5b 6f 6e 7c 6f 66 66 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/058c_fcc6_standard_0a.rel b/src/nos/lib/messages_lib/058c_fcc6_standard_0a.rel new file mode 100644 index 00000000..0fa3b7cc --- /dev/null +++ b/src/nos/lib/messages_lib/058c_fcc6_standard_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___058c_fcc6_standard_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 73 74 61 6e 64 61 72 64 0a +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/058d_b958_start.rel b/src/nos/lib/messages_lib/058d_b958_start.rel new file mode 100644 index 00000000..12ee2c5e --- /dev/null +++ b/src/nos/lib/messages_lib/058d_b958_start.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___058d_b958_start Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 73 74 61 72 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/058e_4b5d_start_20_3cserverna.rel b/src/nos/lib/messages_lib/058e_4b5d_start_20_3cserverna.rel new file mode 100644 index 00000000..7e50bec8 --- /dev/null +++ b/src/nos/lib/messages_lib/058e_4b5d_start_20_3cserverna.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___058e_4b5d_start_20_3cserverna Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 73 74 61 72 74 20 3c 73 65 +R 00 00 01 00 +T 0b 00 00 00 72 76 65 72 6e 61 6d 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/058f_9324_start_20bsr_20_3cin.rel b/src/nos/lib/messages_lib/058f_9324_start_20bsr_20_3cin.rel new file mode 100644 index 00000000..b293ad05 --- /dev/null +++ b/src/nos/lib/messages_lib/058f_9324_start_20bsr_20_3cin.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___058f_9324_start_20bsr_20_3cin Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 73 74 61 72 74 20 62 73 72 +R 00 00 01 00 +T 0b 00 00 00 20 3c 69 6e 74 65 72 66 61 63 65 +R 00 00 01 00 +T 16 00 00 00 3e 20 5b 3c 70 6f 72 74 3e 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0590_d63e_stat.rel b/src/nos/lib/messages_lib/0590_d63e_stat.rel new file mode 100644 index 00000000..7607f8f3 --- /dev/null +++ b/src/nos/lib/messages_lib/0590_d63e_stat.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0590_d63e_stat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 73 74 61 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0591_5069_status.rel b/src/nos/lib/messages_lib/0591_5069_status.rel new file mode 100644 index 00000000..1ff78b79 --- /dev/null +++ b/src/nos/lib/messages_lib/0591_5069_status.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___0591_5069_status Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 73 74 61 74 75 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0592_7dfc_status_20up_20_7c_2.rel b/src/nos/lib/messages_lib/0592_7dfc_status_20up_20_7c_2.rel new file mode 100644 index 00000000..cb06a73a --- /dev/null +++ b/src/nos/lib/messages_lib/0592_7dfc_status_20up_20_7c_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___0592_7dfc_status_20up_20_7c_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 73 74 61 74 75 73 20 75 70 +R 00 00 01 00 +T 0b 00 00 00 20 7c 20 64 6f 77 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0593_68cb_stime.rel b/src/nos/lib/messages_lib/0593_68cb_stime.rel new file mode 100644 index 00000000..763569dc --- /dev/null +++ b/src/nos/lib/messages_lib/0593_68cb_stime.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___0593_68cb_stime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 73 74 69 6d 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0594_4875_stktrace_20from_20p.rel b/src/nos/lib/messages_lib/0594_4875_stktrace_20from_20p.rel new file mode 100644 index 00000000..92dc63ef --- /dev/null +++ b/src/nos/lib/messages_lib/0594_4875_stktrace_20from_20p.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___0594_4875_stktrace_20from_20p Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 73 74 6b 74 72 61 63 65 20 +R 00 00 01 00 +T 0b 00 00 00 66 72 6f 6d 20 70 72 6f 63 20 25 +R 00 00 01 00 +T 16 00 00 00 73 20 61 74 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0595_0a0a_stop.rel b/src/nos/lib/messages_lib/0595_0a0a_stop.rel new file mode 100644 index 00000000..6edc3682 --- /dev/null +++ b/src/nos/lib/messages_lib/0595_0a0a_stop.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0595_0a0a_stop Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 73 74 6f 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0596_6ec0_stop_20_3cservernam.rel b/src/nos/lib/messages_lib/0596_6ec0_stop_20_3cservernam.rel new file mode 100644 index 00000000..e6be5b17 --- /dev/null +++ b/src/nos/lib/messages_lib/0596_6ec0_stop_20_3cservernam.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___0596_6ec0_stop_20_3cservernam Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 73 74 6f 70 20 3c 73 65 72 +R 00 00 01 00 +T 0b 00 00 00 76 65 72 6e 61 6d 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0597_301d_stopped.rel b/src/nos/lib/messages_lib/0597_301d_stopped.rel new file mode 100644 index 00000000..0f0ed9fb --- /dev/null +++ b/src/nos/lib/messages_lib/0597_301d_stopped.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___0597_301d_stopped Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 73 74 6f 70 70 65 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0598_2918_stor.rel b/src/nos/lib/messages_lib/0598_2918_stor.rel new file mode 100644 index 00000000..b2f7d3de --- /dev/null +++ b/src/nos/lib/messages_lib/0598_2918_stor.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0598_2918_stor Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 73 74 6f 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/0599_784e_stru.rel b/src/nos/lib/messages_lib/0599_784e_stru.rel new file mode 100644 index 00000000..ea2e4b0e --- /dev/null +++ b/src/nos/lib/messages_lib/0599_784e_stru.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___0599_784e_stru Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 73 74 72 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/059a_bec3_suffix.rel b/src/nos/lib/messages_lib/059a_bec3_suffix.rel new file mode 100644 index 00000000..332ef946 --- /dev/null +++ b/src/nos/lib/messages_lib/059a_bec3_suffix.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___059a_bec3_suffix Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 73 75 66 66 69 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/059b_420b_symlink.rel b/src/nos/lib/messages_lib/059b_420b_symlink.rel new file mode 100644 index 00000000..6b3138b2 --- /dev/null +++ b/src/nos/lib/messages_lib/059b_420b_symlink.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___059b_420b_symlink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 73 79 6d 6c 69 6e 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/059c_ceb7_sync.rel b/src/nos/lib/messages_lib/059c_ceb7_sync.rel new file mode 100644 index 00000000..69908fa5 --- /dev/null +++ b/src/nos/lib/messages_lib/059c_ceb7_sync.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___059c_ceb7_sync Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 73 79 6e 63 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/059d_bb66_syndata.rel b/src/nos/lib/messages_lib/059d_bb66_syndata.rel new file mode 100644 index 00000000..eac46ba9 --- /dev/null +++ b/src/nos/lib/messages_lib/059d_bb66_syndata.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___059d_bb66_syndata Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 73 79 6e 64 61 74 61 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/059e_b50c_sysdebug.rel b/src/nos/lib/messages_lib/059e_b50c_sysdebug.rel new file mode 100644 index 00000000..c5a969da --- /dev/null +++ b/src/nos/lib/messages_lib/059e_b50c_sysdebug.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___059e_b50c_sysdebug Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 73 79 73 64 65 62 75 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/059f_be35_sysdebug_20_5bon_7c.rel b/src/nos/lib/messages_lib/059f_be35_sysdebug_20_5bon_7c.rel new file mode 100644 index 00000000..f6e9fae8 --- /dev/null +++ b/src/nos/lib/messages_lib/059f_be35_sysdebug_20_5bon_7c.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___059f_be35_sysdebug_20_5bon_7c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 73 79 73 64 65 62 75 67 20 +R 00 00 01 00 +T 0b 00 00 00 5b 6f 6e 7c 6f 66 66 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05a0_8f60_syst.rel b/src/nos/lib/messages_lib/05a0_8f60_syst.rel new file mode 100644 index 00000000..9b4297e0 --- /dev/null +++ b/src/nos/lib/messages_lib/05a0_8f60_syst.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05a0_8f60_syst Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 73 79 73 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05a1_f3f3_system_20call_20tra.rel b/src/nos/lib/messages_lib/05a1_f3f3_system_20call_20tra.rel new file mode 100644 index 00000000..bb98ff99 --- /dev/null +++ b/src/nos/lib/messages_lib/05a1_f3f3_system_20call_20tra.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___05a1_f3f3_system_20call_20tra Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 73 79 73 74 65 6d 20 63 61 +R 00 00 01 00 +T 0b 00 00 00 6c 6c 20 74 72 61 63 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05a2_a612_system_20kernel_20d.rel b/src/nos/lib/messages_lib/05a2_a612_system_20kernel_20d.rel new file mode 100644 index 00000000..0a84023f --- /dev/null +++ b/src/nos/lib/messages_lib/05a2_a612_system_20kernel_20d.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___05a2_a612_system_20kernel_20d Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 73 79 73 74 65 6d 20 6b 65 +R 00 00 01 00 +T 0b 00 00 00 72 6e 65 6c 20 64 65 62 75 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05a3_98fb_systrace.rel b/src/nos/lib/messages_lib/05a3_98fb_systrace.rel new file mode 100644 index 00000000..e03560f0 --- /dev/null +++ b/src/nos/lib/messages_lib/05a3_98fb_systrace.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___05a3_98fb_systrace Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 73 79 73 74 72 61 63 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05a4_71e3_systrace_20_5bon_7c.rel b/src/nos/lib/messages_lib/05a4_71e3_systrace_20_5bon_7c.rel new file mode 100644 index 00000000..56d82de0 --- /dev/null +++ b/src/nos/lib/messages_lib/05a4_71e3_systrace_20_5bon_7c.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___05a4_71e3_systrace_20_5bon_7c Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 73 79 73 74 72 61 63 65 20 +R 00 00 01 00 +T 0b 00 00 00 5b 6f 6e 7c 6f 66 66 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05a5_6404_t3.rel b/src/nos/lib/messages_lib/05a5_6404_t3.rel new file mode 100644 index 00000000..b7f451e2 --- /dev/null +++ b/src/nos/lib/messages_lib/05a5_6404_t3.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5 flags 0 +S ___05a5_6404_t3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 03 00 74 33 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05a6_b31f_target.rel b/src/nos/lib/messages_lib/05a6_b31f_target.rel new file mode 100644 index 00000000..d866a4eb --- /dev/null +++ b/src/nos/lib/messages_lib/05a6_b31f_target.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___05a6_b31f_target Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 74 61 72 67 65 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05a7_e630_tcp.rel b/src/nos/lib/messages_lib/05a7_e630_tcp.rel new file mode 100644 index 00000000..e5f4128e --- /dev/null +++ b/src/nos/lib/messages_lib/05a7_e630_tcp.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___05a7_e630_tcp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 74 63 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05a8_e483_tcp_20kick_20_3ctcb.rel b/src/nos/lib/messages_lib/05a8_e483_tcp_20kick_20_3ctcb.rel new file mode 100644 index 00000000..099ff15d --- /dev/null +++ b/src/nos/lib/messages_lib/05a8_e483_tcp_20kick_20_3ctcb.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___05a8_e483_tcp_20kick_20_3ctcb Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 74 63 70 20 6b 69 63 6b 20 +R 00 00 01 00 +T 0b 00 00 00 3c 74 63 62 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05a9_a12c_tcp_20reset_20_3ctc.rel b/src/nos/lib/messages_lib/05a9_a12c_tcp_20reset_20_3ctc.rel new file mode 100644 index 00000000..a2863e8b --- /dev/null +++ b/src/nos/lib/messages_lib/05a9_a12c_tcp_20reset_20_3ctc.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___05a9_a12c_tcp_20reset_20_3ctc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 74 63 70 20 72 65 73 65 74 +R 00 00 01 00 +T 0b 00 00 00 20 3c 74 63 62 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05aa_bb94_tcp_20rtt_20_3ctcb_.rel b/src/nos/lib/messages_lib/05aa_bb94_tcp_20rtt_20_3ctcb_.rel new file mode 100644 index 00000000..158e33be --- /dev/null +++ b/src/nos/lib/messages_lib/05aa_bb94_tcp_20rtt_20_3ctcb_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16 flags 0 +S ___05aa_bb94_tcp_20rtt_20_3ctcb_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 14 00 74 63 70 20 72 74 74 20 3c +R 00 00 01 00 +T 0b 00 00 00 74 63 62 3e 20 3c 76 61 6c 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05ab_f363_tcp_20stat_20_3ctcb.rel b/src/nos/lib/messages_lib/05ab_f363_tcp_20stat_20_3ctcb.rel new file mode 100644 index 00000000..9ed7312f --- /dev/null +++ b/src/nos/lib/messages_lib/05ab_f363_tcp_20stat_20_3ctcb.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___05ab_f363_tcp_20stat_20_3ctcb Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 74 63 70 20 73 74 61 74 20 +R 00 00 01 00 +T 0b 00 00 00 3c 74 63 62 3e 20 5b 3c 69 6e 74 +R 00 00 01 00 +T 16 00 00 00 65 72 76 61 6c 3e 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05ac_6ff2_telnet.rel b/src/nos/lib/messages_lib/05ac_6ff2_telnet.rel new file mode 100644 index 00000000..03542ad0 --- /dev/null +++ b/src/nos/lib/messages_lib/05ac_6ff2_telnet.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___05ac_6ff2_telnet Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 74 65 6c 6e 65 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05ad_2114_telnet_20_3caddress.rel b/src/nos/lib/messages_lib/05ad_2114_telnet_20_3caddress.rel new file mode 100644 index 00000000..1dc35633 --- /dev/null +++ b/src/nos/lib/messages_lib/05ad_2114_telnet_20_3caddress.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S ___05ad_2114_telnet_20_3caddress Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 11 00 74 65 6c 6e 65 74 20 3c 61 +R 00 00 01 00 +T 0b 00 00 00 64 64 72 65 73 73 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05ae_6cef_term.rel b/src/nos/lib/messages_lib/05ae_6cef_term.rel new file mode 100644 index 00000000..317491d1 --- /dev/null +++ b/src/nos/lib/messages_lib/05ae_6cef_term.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05ae_6cef_term Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 74 65 72 6d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05af_7425_terminate.rel b/src/nos/lib/messages_lib/05af_7425_terminate.rel new file mode 100644 index 00000000..86904f59 --- /dev/null +++ b/src/nos/lib/messages_lib/05af_7425_terminate.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size c flags 0 +S ___05af_7425_terminate Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0a 00 74 65 72 6d 69 6e 61 74 65 +R 00 00 01 00 +T 0b 00 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05b0_4c6f_thresh.rel b/src/nos/lib/messages_lib/05b0_4c6f_thresh.rel new file mode 100644 index 00000000..1248fd02 --- /dev/null +++ b/src/nos/lib/messages_lib/05b0_4c6f_thresh.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___05b0_4c6f_thresh Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 74 68 72 65 73 68 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05b1_535d_time.rel b/src/nos/lib/messages_lib/05b1_535d_time.rel new file mode 100644 index 00000000..325813f7 --- /dev/null +++ b/src/nos/lib/messages_lib/05b1_535d_time.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05b1_535d_time Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 74 69 6d 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05b2_43a3_time_20before_20fil.rel b/src/nos/lib/messages_lib/05b2_43a3_time_20before_20fil.rel new file mode 100644 index 00000000..21362574 --- /dev/null +++ b/src/nos/lib/messages_lib/05b2_43a3_time_20before_20fil.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S ___05b2_43a3_time_20before_20fil Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 22 00 74 69 6d 65 20 62 65 66 6f +R 00 00 01 00 +T 0b 00 00 00 72 65 20 66 69 6c 65 20 75 70 64 +R 00 00 01 00 +T 16 00 00 00 61 74 65 20 28 73 65 63 6f 6e 64 +R 00 00 01 00 +T 21 00 00 00 73 29 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05b3_7156_timeout.rel b/src/nos/lib/messages_lib/05b3_7156_timeout.rel new file mode 100644 index 00000000..7e1660fd --- /dev/null +++ b/src/nos/lib/messages_lib/05b3_7156_timeout.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___05b3_7156_timeout Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 74 69 6d 65 6f 75 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05b4_d9a6_timer.rel b/src/nos/lib/messages_lib/05b4_d9a6_timer.rel new file mode 100644 index 00000000..28d7c926 --- /dev/null +++ b/src/nos/lib/messages_lib/05b4_d9a6_timer.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___05b4_d9a6_timer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 74 69 6d 65 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05b5_d29c_timer_3a_20ints_20w.rel b/src/nos/lib/messages_lib/05b5_d29c_timer_3a_20ints_20w.rel new file mode 100644 index 00000000..e73251af --- /dev/null +++ b/src/nos/lib/messages_lib/05b5_d29c_timer_3a_20ints_20w.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S ___05b5_d29c_timer_3a_20ints_20w Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 17 00 74 69 6d 65 72 3a 20 69 6e +R 00 00 01 00 +T 0b 00 00 00 74 73 20 77 65 72 65 20 6f 66 66 +R 00 00 01 00 +T 16 00 00 00 21 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05b6_c82f_times.rel b/src/nos/lib/messages_lib/05b6_c82f_times.rel new file mode 100644 index 00000000..8d3bb09a --- /dev/null +++ b/src/nos/lib/messages_lib/05b6_c82f_times.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___05b6_c82f_times Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 74 69 6d 65 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05b7_223a_timestamps.rel b/src/nos/lib/messages_lib/05b7_223a_timestamps.rel new file mode 100644 index 00000000..4a7afab6 --- /dev/null +++ b/src/nos/lib/messages_lib/05b7_223a_timestamps.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___05b7_223a_timestamps Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 74 69 6d 65 73 74 61 6d 70 +R 00 00 01 00 +T 0b 00 00 00 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05b8_004c_tip_20or_20dialer_2.rel b/src/nos/lib/messages_lib/05b8_004c_tip_20or_20dialer_2.rel new file mode 100644 index 00000000..f7936f14 --- /dev/null +++ b/src/nos/lib/messages_lib/05b8_004c_tip_20or_20dialer_2.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2e flags 0 +S ___05b8_004c_tip_20or_20dialer_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 2c 00 74 69 70 20 6f 72 20 64 69 +R 00 00 01 00 +T 0b 00 00 00 61 6c 65 72 20 73 65 73 73 69 6f +R 00 00 01 00 +T 16 00 00 00 6e 20 61 6c 72 65 61 64 79 20 61 +R 00 00 01 00 +T 21 00 00 00 63 74 69 76 65 20 6f 6e 20 25 73 +R 00 00 01 00 +T 2c 00 00 00 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05b9_aa4a_tiptimeout.rel b/src/nos/lib/messages_lib/05b9_aa4a_tiptimeout.rel new file mode 100644 index 00000000..6ed64554 --- /dev/null +++ b/src/nos/lib/messages_lib/05b9_aa4a_tiptimeout.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size d flags 0 +S ___05b9_aa4a_tiptimeout Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0b 00 74 69 70 74 69 6d 65 6f 75 +R 00 00 01 00 +T 0b 00 00 00 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05ba_aa76_tmp_20file_20wiping.rel b/src/nos/lib/messages_lib/05ba_aa76_tmp_20file_20wiping.rel new file mode 100644 index 00000000..46a2858e --- /dev/null +++ b/src/nos/lib/messages_lib/05ba_aa76_tmp_20file_20wiping.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___05ba_aa76_tmp_20file_20wiping Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 74 6d 70 20 66 69 6c 65 20 +R 00 00 01 00 +T 0b 00 00 00 77 69 70 69 6e 67 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05bb_2645_tmp_20file_3a_20_25.rel b/src/nos/lib/messages_lib/05bb_2645_tmp_20file_3a_20_25.rel new file mode 100644 index 00000000..faedd2c3 --- /dev/null +++ b/src/nos/lib/messages_lib/05bb_2645_tmp_20file_3a_20_25.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size f flags 0 +S ___05bb_2645_tmp_20file_3a_20_25 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0d 00 74 6d 70 20 66 69 6c 65 3a +R 00 00 01 00 +T 0b 00 00 00 20 25 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05bc_a165_topt.rel b/src/nos/lib/messages_lib/05bc_a165_topt.rel new file mode 100644 index 00000000..7c265a02 --- /dev/null +++ b/src/nos/lib/messages_lib/05bc_a165_topt.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05bc_a165_topt Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 74 6f 70 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05bd_4f5f_trace.rel b/src/nos/lib/messages_lib/05bd_4f5f_trace.rel new file mode 100644 index 00000000..4919546f --- /dev/null +++ b/src/nos/lib/messages_lib/05bd_4f5f_trace.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___05bd_4f5f_trace Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 74 72 61 63 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05be_3bce_traceroute_20done_3.rel b/src/nos/lib/messages_lib/05be_3bce_traceroute_20done_3.rel new file mode 100644 index 00000000..edaf7531 --- /dev/null +++ b/src/nos/lib/messages_lib/05be_3bce_traceroute_20done_3.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___05be_3bce_traceroute_20done_3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 74 72 61 63 65 72 6f 75 74 +R 00 00 01 00 +T 0b 00 00 00 65 20 64 6f 6e 65 3a 20 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05bf_f7b8_try.rel b/src/nos/lib/messages_lib/05bf_f7b8_try.rel new file mode 100644 index 00000000..04f92255 --- /dev/null +++ b/src/nos/lib/messages_lib/05bf_f7b8_try.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___05bf_f7b8_try Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 74 72 79 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05c0_e444_ttl.rel b/src/nos/lib/messages_lib/05c0_e444_ttl.rel new file mode 100644 index 00000000..b4275dd4 --- /dev/null +++ b/src/nos/lib/messages_lib/05c0_e444_ttl.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___05c0_e444_ttl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 74 74 6c 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05c1_299c_ttylink.rel b/src/nos/lib/messages_lib/05c1_299c_ttylink.rel new file mode 100644 index 00000000..aab0f756 --- /dev/null +++ b/src/nos/lib/messages_lib/05c1_299c_ttylink.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___05c1_299c_ttylink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 74 74 79 6c 69 6e 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05c2_e58b_txqlen.rel b/src/nos/lib/messages_lib/05c2_e58b_txqlen.rel new file mode 100644 index 00000000..890a54ef --- /dev/null +++ b/src/nos/lib/messages_lib/05c2_e58b_txqlen.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___05c2_e58b_txqlen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 74 78 71 6c 65 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05c3_f321_type.rel b/src/nos/lib/messages_lib/05c3_f321_type.rel new file mode 100644 index 00000000..8a8711d4 --- /dev/null +++ b/src/nos/lib/messages_lib/05c3_f321_type.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05c3_f321_type Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 74 79 70 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05c4_f1e4_udp.rel b/src/nos/lib/messages_lib/05c4_f1e4_udp.rel new file mode 100644 index 00000000..74c36d75 --- /dev/null +++ b/src/nos/lib/messages_lib/05c4_f1e4_udp.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___05c4_f1e4_udp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 75 64 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05c5_5caf_umount.rel b/src/nos/lib/messages_lib/05c5_5caf_umount.rel new file mode 100644 index 00000000..c7bb3b9c --- /dev/null +++ b/src/nos/lib/messages_lib/05c5_5caf_umount.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___05c5_5caf_umount Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 75 6d 6f 75 6e 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05c6_5c70_unknown_0a.rel b/src/nos/lib/messages_lib/05c6_5c70_unknown_0a.rel new file mode 100644 index 00000000..35dd4e02 --- /dev/null +++ b/src/nos/lib/messages_lib/05c6_5c70_unknown_0a.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___05c6_5c70_unknown_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 75 6e 6b 6e 6f 77 6e 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05c7_bc4f_unknown_200x_2504x_.rel b/src/nos/lib/messages_lib/05c7_bc4f_unknown_200x_2504x_.rel new file mode 100644 index 00000000..d9c0a41e --- /dev/null +++ b/src/nos/lib/messages_lib/05c7_bc4f_unknown_200x_2504x_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___05c7_bc4f_unknown_200x_2504x_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 75 6e 6b 6e 6f 77 6e 20 30 +R 00 00 01 00 +T 0b 00 00 00 78 25 30 34 78 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05c8_5194_unknown_20hardware_.rel b/src/nos/lib/messages_lib/05c8_5194_unknown_20hardware_.rel new file mode 100644 index 00000000..2806dd36 --- /dev/null +++ b/src/nos/lib/messages_lib/05c8_5194_unknown_20hardware_.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___05c8_5194_unknown_20hardware_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 75 6e 6b 6e 6f 77 6e 20 68 +R 00 00 01 00 +T 0b 00 00 00 61 72 64 77 61 72 65 20 74 79 70 +R 00 00 01 00 +T 16 00 00 00 65 20 22 25 73 22 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05c9_acee_unlink.rel b/src/nos/lib/messages_lib/05c9_acee_unlink.rel new file mode 100644 index 00000000..b39ba74d --- /dev/null +++ b/src/nos/lib/messages_lib/05c9_acee_unlink.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___05c9_acee_unlink Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 75 6e 6c 69 6e 6b 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05ca_f303_up_20script_3a_20_2.rel b/src/nos/lib/messages_lib/05ca_f303_up_20script_3a_20_2.rel new file mode 100644 index 00000000..ae68d785 --- /dev/null +++ b/src/nos/lib/messages_lib/05ca_f303_up_20script_3a_20_2.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11 flags 0 +S ___05ca_f303_up_20script_3a_20_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0f 00 75 70 20 73 63 72 69 70 74 +R 00 00 01 00 +T 0b 00 00 00 3a 20 25 73 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05cb_db93_update.rel b/src/nos/lib/messages_lib/05cb_db93_update.rel new file mode 100644 index 00000000..632e55ba --- /dev/null +++ b/src/nos/lib/messages_lib/05cb_db93_update.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___05cb_db93_update Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 75 70 64 61 74 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05cc_5c27_update_20Domain_2et.rel b/src/nos/lib/messages_lib/05cc_5c27_update_20Domain_2et.rel new file mode 100644 index 00000000..5d1f8b23 --- /dev/null +++ b/src/nos/lib/messages_lib/05cc_5c27_update_20Domain_2et.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14 flags 0 +S ___05cc_5c27_update_20Domain_2et Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 12 00 75 70 64 61 74 65 20 44 6f +R 00 00 01 00 +T 0b 00 00 00 6d 61 69 6e 2e 74 78 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05cd_0b09_update_20Domain_2et.rel b/src/nos/lib/messages_lib/05cd_0b09_update_20Domain_2et.rel new file mode 100644 index 00000000..70cfffb3 --- /dev/null +++ b/src/nos/lib/messages_lib/05cd_0b09_update_20Domain_2et.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___05cd_0b09_update_20Domain_2et Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 75 70 64 61 74 65 20 44 6f +R 00 00 01 00 +T 0b 00 00 00 6d 61 69 6e 2e 74 78 74 20 66 69 +R 00 00 01 00 +T 16 00 00 00 6e 69 73 68 65 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05ce_c5a3_update_20Domain_2et.rel b/src/nos/lib/messages_lib/05ce_c5a3_update_20Domain_2et.rel new file mode 100644 index 00000000..6b8add90 --- /dev/null +++ b/src/nos/lib/messages_lib/05ce_c5a3_update_20Domain_2et.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1e flags 0 +S ___05ce_c5a3_update_20Domain_2et Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1c 00 75 70 64 61 74 65 20 44 6f +R 00 00 01 00 +T 0b 00 00 00 6d 61 69 6e 2e 74 78 74 20 69 6e +R 00 00 01 00 +T 16 00 00 00 69 74 69 61 74 65 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05cf_d4f0_upload.rel b/src/nos/lib/messages_lib/05cf_d4f0_upload.rel new file mode 100644 index 00000000..a9fbe313 --- /dev/null +++ b/src/nos/lib/messages_lib/05cf_d4f0_upload.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___05cf_d4f0_upload Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 75 70 6c 6f 61 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05d0_13f7_user.rel b/src/nos/lib/messages_lib/05d0_13f7_user.rel new file mode 100644 index 00000000..36be3e5f --- /dev/null +++ b/src/nos/lib/messages_lib/05d0_13f7_user.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05d0_13f7_user Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 75 73 65 72 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05d1_6f25_user_20abort_0a.rel b/src/nos/lib/messages_lib/05d1_6f25_user_20abort_0a.rel new file mode 100644 index 00000000..8260c464 --- /dev/null +++ b/src/nos/lib/messages_lib/05d1_6f25_user_20abort_0a.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size e flags 0 +S ___05d1_6f25_user_20abort_0a Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 0c 00 75 73 65 72 20 61 62 6f 72 +R 00 00 01 00 +T 0b 00 00 00 74 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05d2_1b49_userdata.rel b/src/nos/lib/messages_lib/05d2_1b49_userdata.rel new file mode 100644 index 00000000..862221ba --- /dev/null +++ b/src/nos/lib/messages_lib/05d2_1b49_userdata.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size b flags 0 +S ___05d2_1b49_userdata Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 09 00 75 73 65 72 64 61 74 61 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05d3_3967_username_20not_20de.rel b/src/nos/lib/messages_lib/05d3_3967_username_20not_20de.rel new file mode 100644 index 00000000..c6fe025f --- /dev/null +++ b/src/nos/lib/messages_lib/05d3_3967_username_20not_20de.rel @@ -0,0 +1,18 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36 flags 0 +S ___05d3_3967_username_20not_20de Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 34 00 75 73 65 72 6e 61 6d 65 20 +R 00 00 01 00 +T 0b 00 00 00 6e 6f 74 20 64 65 66 69 6e 65 64 +R 00 00 01 00 +T 16 00 00 00 20 79 65 74 2e 20 28 70 6f 70 20 +R 00 00 01 00 +T 21 00 00 00 75 73 65 72 20 3c 6e 61 6d 65 3e +R 00 00 01 00 +T 2c 00 00 00 20 3c 70 61 73 73 3e 29 0a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05d4_c23f_users.rel b/src/nos/lib/messages_lib/05d4_c23f_users.rel new file mode 100644 index 00000000..84e7fbfa --- /dev/null +++ b/src/nos/lib/messages_lib/05d4_c23f_users.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___05d4_c23f_users Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 75 73 65 72 73 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05d5_5353_utime.rel b/src/nos/lib/messages_lib/05d5_5353_utime.rel new file mode 100644 index 00000000..1a26b55b --- /dev/null +++ b/src/nos/lib/messages_lib/05d5_5353_utime.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___05d5_5353_utime Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 75 74 69 6d 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05d6_d261_valid_20subcommands.rel b/src/nos/lib/messages_lib/05d6_d261_valid_20subcommands.rel new file mode 100644 index 00000000..afca3f5b --- /dev/null +++ b/src/nos/lib/messages_lib/05d6_d261_valid_20subcommands.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15 flags 0 +S ___05d6_d261_valid_20subcommands Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 13 00 76 61 6c 69 64 20 73 75 62 +R 00 00 01 00 +T 0b 00 00 00 63 6f 6d 6d 61 6e 64 73 3a 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05d7_a0e5_validblk_3a_20dev_2.rel b/src/nos/lib/messages_lib/05d7_a0e5_validblk_3a_20dev_2.rel new file mode 100644 index 00000000..af3cc914 --- /dev/null +++ b/src/nos/lib/messages_lib/05d7_a0e5_validblk_3a_20dev_2.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 21 flags 0 +S ___05d7_a0e5_validblk_3a_20dev_2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1f 00 76 61 6c 69 64 62 6c 6b 3a +R 00 00 01 00 +T 0b 00 00 00 20 64 65 76 20 30 78 25 78 20 6e +R 00 00 01 00 +T 16 00 00 00 6f 74 20 6d 6f 75 6e 74 65 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05d8_74cf_validblk_3a_20inval.rel b/src/nos/lib/messages_lib/05d8_74cf_validblk_3a_20inval.rel new file mode 100644 index 00000000..9770e0e6 --- /dev/null +++ b/src/nos/lib/messages_lib/05d8_74cf_validblk_3a_20inval.rel @@ -0,0 +1,14 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1d flags 0 +S ___05d8_74cf_validblk_3a_20inval Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 1b 00 76 61 6c 69 64 62 6c 6b 3a +R 00 00 01 00 +T 0b 00 00 00 20 69 6e 76 61 6c 69 64 20 62 6c +R 00 00 01 00 +T 16 00 00 00 6f 63 6b 20 25 75 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05d9_ab5c_verbose.rel b/src/nos/lib/messages_lib/05d9_ab5c_verbose.rel new file mode 100644 index 00000000..a3377157 --- /dev/null +++ b/src/nos/lib/messages_lib/05d9_ab5c_verbose.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___05d9_ab5c_verbose Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 76 65 72 62 6f 73 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05da_207d_version.rel b/src/nos/lib/messages_lib/05da_207d_version.rel new file mode 100644 index 00000000..ee9549bc --- /dev/null +++ b/src/nos/lib/messages_lib/05da_207d_version.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___05da_207d_version Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 76 65 72 73 69 6f 6e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05db_9778_view.rel b/src/nos/lib/messages_lib/05db_9778_view.rel new file mode 100644 index 00000000..eafc12a1 --- /dev/null +++ b/src/nos/lib/messages_lib/05db_9778_view.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05db_9778_view Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 76 69 65 77 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05dc_23f1_view_20_3cfilename_.rel b/src/nos/lib/messages_lib/05dc_23f1_view_20_3cfilename_.rel new file mode 100644 index 00000000..60753baa --- /dev/null +++ b/src/nos/lib/messages_lib/05dc_23f1_view_20_3cfilename_.rel @@ -0,0 +1,12 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12 flags 0 +S ___05dc_23f1_view_20_3cfilename_ Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 10 00 76 69 65 77 20 3c 66 69 6c +R 00 00 01 00 +T 0b 00 00 00 65 6e 61 6d 65 3e 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05dd_d63a_wait.rel b/src/nos/lib/messages_lib/05dd_d63a_wait.rel new file mode 100644 index 00000000..d919860e --- /dev/null +++ b/src/nos/lib/messages_lib/05dd_d63a_wait.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05dd_d63a_wait Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 77 61 69 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05de_2887_wait_20_3cmilliseco.rel b/src/nos/lib/messages_lib/05de_2887_wait_20_3cmilliseco.rel new file mode 100644 index 00000000..6c86e5b8 --- /dev/null +++ b/src/nos/lib/messages_lib/05de_2887_wait_20_3cmilliseco.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2b flags 0 +S ___05de_2887_wait_20_3cmilliseco Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 29 00 77 61 69 74 20 3c 6d 69 6c +R 00 00 01 00 +T 0b 00 00 00 6c 69 73 65 63 6f 6e 64 73 3e 20 +R 00 00 01 00 +T 16 00 00 00 5b 20 22 73 74 72 69 6e 67 22 20 +R 00 00 01 00 +T 21 00 00 00 5b 73 70 65 65 64 5d 20 5d 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05df_e988_waitpid.rel b/src/nos/lib/messages_lib/05df_e988_waitpid.rel new file mode 100644 index 00000000..80346a13 --- /dev/null +++ b/src/nos/lib/messages_lib/05df_e988_waitpid.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size a flags 0 +S ___05df_e988_waitpid Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 08 00 77 61 69 74 70 69 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05e0_674e_want_20busy_20block.rel b/src/nos/lib/messages_lib/05e0_674e_want_20busy_20block.rel new file mode 100644 index 00000000..3c899f1e --- /dev/null +++ b/src/nos/lib/messages_lib/05e0_674e_want_20busy_20block.rel @@ -0,0 +1,16 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23 flags 0 +S ___05e0_674e_want_20busy_20block Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 00 77 61 6e 74 20 62 75 73 79 +R 00 00 01 00 +T 0b 00 00 00 20 62 6c 6f 63 6b 20 30 78 25 78 +R 00 00 01 00 +T 16 00 00 00 20 64 65 76 69 63 65 20 30 78 25 +R 00 00 01 00 +T 21 00 00 00 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05e1_84e4_what.rel b/src/nos/lib/messages_lib/05e1_84e4_what.rel new file mode 100644 index 00000000..f2539b23 --- /dev/null +++ b/src/nos/lib/messages_lib/05e1_84e4_what.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05e1_84e4_what Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 77 68 61 74 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05e2_9158_window.rel b/src/nos/lib/messages_lib/05e2_9158_window.rel new file mode 100644 index 00000000..7e0d6305 --- /dev/null +++ b/src/nos/lib/messages_lib/05e2_9158_window.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S ___05e2_9158_window Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 07 00 77 69 6e 64 6f 77 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05e3_5379_wipe.rel b/src/nos/lib/messages_lib/05e3_5379_wipe.rel new file mode 100644 index 00000000..b90730bb --- /dev/null +++ b/src/nos/lib/messages_lib/05e3_5379_wipe.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05e3_5379_wipe Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 77 69 70 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05e4_4cc8_write.rel b/src/nos/lib/messages_lib/05e4_4cc8_write.rel new file mode 100644 index 00000000..27b3bc3c --- /dev/null +++ b/src/nos/lib/messages_lib/05e4_4cc8_write.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8 flags 0 +S ___05e4_4cc8_write Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 06 00 77 72 69 74 65 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05e5_dd6d_x_25x.rel b/src/nos/lib/messages_lib/05e5_dd6d_x_25x.rel new file mode 100644 index 00000000..1d98216e --- /dev/null +++ b/src/nos/lib/messages_lib/05e5_dd6d_x_25x.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___05e5_dd6d_x_25x Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 78 25 78 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05e6_ce7b_xcwd.rel b/src/nos/lib/messages_lib/05e6_ce7b_xcwd.rel new file mode 100644 index 00000000..e6bfcfc3 --- /dev/null +++ b/src/nos/lib/messages_lib/05e6_ce7b_xcwd.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05e6_ce7b_xcwd Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 78 63 77 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05e7_2295_xmd5.rel b/src/nos/lib/messages_lib/05e7_2295_xmd5.rel new file mode 100644 index 00000000..52ddcac3 --- /dev/null +++ b/src/nos/lib/messages_lib/05e7_2295_xmd5.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05e7_2295_xmd5 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 78 6d 64 35 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05e8_e251_xmkd.rel b/src/nos/lib/messages_lib/05e8_e251_xmkd.rel new file mode 100644 index 00000000..66ad9138 --- /dev/null +++ b/src/nos/lib/messages_lib/05e8_e251_xmkd.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05e8_e251_xmkd Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 78 6d 6b 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05e9_a48a_xpwd.rel b/src/nos/lib/messages_lib/05e9_a48a_xpwd.rel new file mode 100644 index 00000000..043499a8 --- /dev/null +++ b/src/nos/lib/messages_lib/05e9_a48a_xpwd.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05e9_a48a_xpwd Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 78 70 77 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05ea_79d3_xrmd.rel b/src/nos/lib/messages_lib/05ea_79d3_xrmd.rel new file mode 100644 index 00000000..9000d8e7 --- /dev/null +++ b/src/nos/lib/messages_lib/05ea_79d3_xrmd.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7 flags 0 +S ___05ea_79d3_xrmd Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 05 00 78 72 6d 64 00 +R 00 00 01 00 diff --git a/src/nos/lib/messages_lib/05eb_c59b_zap.rel b/src/nos/lib/messages_lib/05eb_c59b_zap.rel new file mode 100644 index 00000000..b55f1229 --- /dev/null +++ b/src/nos/lib/messages_lib/05eb_c59b_zap.rel @@ -0,0 +1,10 @@ +XL4 +H 2 areas 2 global symbols +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S ___05eb_c59b_zap Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 04 00 7a 61 70 00 +R 00 00 01 00 diff --git a/src/nos/lib/net.lib b/src/nos/lib/net.lib new file mode 100644 index 00000000..f6898e63 --- /dev/null +++ b/src/nos/lib/net.lib @@ -0,0 +1,435 @@ +net_lib/ahdlc.rel + _ahdlcrx + _ahdlctx + _init_hdlc +net_lib/alloc.rel + _availmem + _gcollect + _domem + _realloc + _free + _callocw + _calloc + _mallocw + _malloc + _Availmem + _Memcmds +net_lib/audit.rel + _audit +net_lib/cmdparse.rel + _cmdparse + _setint + _bit16cmd + _setuns + _setbool + _setshort + _setlong + _subcmd +net_lib/crc.rel + _crc_gen + _crc_check + _Fcstab +net_lib/devparam.rel + _devparam + _parmname +net_lib/files.rel + _usercvt + _userlogin + _userlookup + _initroot + _rootdircat + _Rewritefile + _System + _Maillog + _Fdir + _Helpdir + _Historyfile + _Config + _Newsdir + _Eol + _Popusers + _Dfile + _Mailqueue + _Alias + _Tmpdir + _Mailspool + _Signature + _Startup + _Mailqdir + _Forwardfile + _Arealist + _Userfile + _Routeqdir +net_lib/ftpsubr.rel + _sendfile + _recvfile + _isbinary + _md5hash +net_lib/getopt.rel + _getopt + _optarg + _optopt + _optind + _opterr +net_lib/Ifaces.rel + _Ifaces +net_lib/Loopback.rel + _Loopback +net_lib/Encap.rel + _Encap +net_lib/Noipaddr.rel + _Noipaddr +net_lib/Ifcmds.rel + _Ifcmds +net_lib/if_tx.rel + _if_tx +net_lib/network.rel + _network +net_lib/net_route.rel + _net_route +net_lib/nu_send.rel + _nu_send +net_lib/nu_output.rel + _nu_output +net_lib/doifconfig.rel + _doifconfig +net_lib/ifipaddr.rel + _ifipaddr +net_lib/iflinkadr.rel + _iflinkadr +net_lib/ifbroad.rel + _ifbroad +net_lib/ifnetmsk.rel + _ifnetmsk +net_lib/ifencap.rel + _ifencap +net_lib/setencap.rel + _setencap +net_lib/ifrxbuf.rel + _ifrxbuf +net_lib/ifmtu.rel + _ifmtu +net_lib/ifforw.rel + _ifforw +net_lib/showiface.rel + _showiface +net_lib/dodetach.rel + _dodetach +net_lib/if_detach.rel + _if_detach +net_lib/iftxqlen.rel + _iftxqlen +net_lib/if_lookup.rel + _if_lookup +net_lib/ismyaddr.rel + _ismyaddr +net_lib/mask2width.rel + _mask2width +net_lib/if_name.rel + _if_name +net_lib/bitbucket.rel + _bitbucket +net_lib/dodialer.rel + _dodialer +net_lib/kernel.rel + _suspend + _killer + _resume + _killself + _alert + _mainproc + _kwait + _killproc + _ksignal + _chname + _newproc + _Waittab + _Ksig + _Kdebug + _Curproc + _Susptab + _Rdytab + _Stkchk +net_lib/ksubr.rel + _chkstk + _phash + _kinit + _psetup + _ps +net_lib/locsock.rel + _so_lod + _so_lod_send + _so_los + _so_lod_qlen + _lopsocket + _so_los_send + _so_loc_stat + _so_los_qlen + _so_loc_shut + _so_lo_recv + _so_loc_close +net_lib/Pushdowns.rel + _Pushdowns +net_lib/Pushalloc.rel + _Pushalloc +net_lib/Allocmbufs.rel + _Allocmbufs +net_lib/Freembufs.rel + _Freembufs +net_lib/Cachehits.rel + _Cachehits +net_lib/Msizes.rel + _Msizes +net_lib/Mbufcache.rel + _Mbufcache +net_lib/alloc_mbuf.rel + _alloc_mbuf +net_lib/ambufw.rel + _ambufw +net_lib/free_mbuf.rel + _free_mbuf +net_lib/free_p.rel + _free_p +net_lib/free_q.rel + _free_q +net_lib/len_p.rel + _len_p +net_lib/len_q.rel + _len_q +net_lib/trim_mbuf.rel + _trim_mbuf +net_lib/dup_p.rel + _dup_p +net_lib/copy_p.rel + _copy_p +net_lib/pullup.rel + _pullup +net_lib/extract.rel + _extract +net_lib/append.rel + _append +net_lib/pushdown.rel + _pushdown +net_lib/enqueue.rel + _enqueue +net_lib/dequeue.rel + _dequeue +net_lib/qdata.rel + _qdata +net_lib/pull32.rel + _pull32 +net_lib/pull16.rel + _pull16 +net_lib/pull8.rel + _pull8 +net_lib/write_p.rel + _write_p +net_lib/mbuf_crunch.rel + _mbuf_crunch +net_lib/mbufstat.rel + _mbufstat +net_lib/mbufsizes.rel + _mbufsizes +net_lib/mbuf_garbage.rel + _mbuf_garbage +net_lib/PADDING.rel + _PADDING +net_lib/MD5Init.rel + _MD5Init +net_lib/MD5Update.rel + _MD5Update +net_lib/MD5Final.rel + _MD5Final +net_lib/MD5Transform.rel + _MD5Transform +net_lib/MD5Transform_Round1.rel + _MD5Transform_Round1 +net_lib/MD5Transform_Round2.rel + _MD5Transform_Round2 +net_lib/MD5Transform_Round3.rel + _MD5Transform_Round3 +net_lib/MD5Transform_Round4.rel + _MD5Transform_Round4 +net_lib/Encode.rel + _Encode +net_lib/Decode.rel + _Decode +net_lib/misc.rel + _memcnt + _rip + _memxor + _strdupw + _readhex + _htob + _htoi + _smsg + _Whitespace +net_lib/pathname.rel + _pathname +net_lib/sockcmd.rel + _dosock +net_lib/Socktypes.rel + _Socktypes +net_lib/Sock_errlist.rel + _Sock_errlist +net_lib/Badsocket.rel + _Badsocket +net_lib/Usock.rel + _Usock +net_lib/sockinit.rel + _sockinit +net_lib/socket.rel + _socket +net_lib/bind.rel + _bind +net_lib/listen.rel + _listen +net_lib/connect.rel + _connect +net_lib/accept.rel + _accept +net_lib/recv_mbuf.rel + _recv_mbuf +net_lib/send_mbuf.rel + _send_mbuf +net_lib/getsockname.rel + _getsockname +net_lib/getpeername.rel + _getpeername +net_lib/socklen.rel + _socklen +net_lib/sockkick.rel + _sockkick +net_lib/sockowner.rel + _sockowner +net_lib/shutdown.rel + _shutdown +net_lib/close_s.rel + _close_s +net_lib/usesock.rel + _usesock +net_lib/freesock.rel + _freesock +net_lib/settos.rel + _settos +net_lib/socketpair.rel + _socketpair +net_lib/eolseq.rel + _eolseq +net_lib/sockuser.rel + _sendto + _recvfrom + _send + _recv +net_lib/sockutil.rel + _st_garbage + _sockstate + _sockerr + _psocket + _itop +net_lib/_Files.rel + __Files +net_lib/_clrtmp.rel + __clrtmp +net_lib/freopen.rel + _freopen +net_lib/fdopen.rel + _fdopen +net_lib/pipeopen.rel + _pipeopen +net_lib/asyopen.rel + _asyopen +net_lib/displayopen.rel + _displayopen +net_lib/gets.rel + _gets +net_lib/fgets.rel + _fgets +net_lib/fprintf.rel + _fprintf +net_lib/printf.rel + _printf +net_lib/vprintf.rel + _vprintf +net_lib/fputc.rel + _fputc +net_lib/fputs.rel + _fputs +net_lib/puts.rel + _puts +net_lib/fgetc.rel + _fgetc +net_lib/_fgetc.rel + __fgetc +net_lib/fflush.rel + _fflush +net_lib/seteol.rel + _seteol +net_lib/fmode.rel + _fmode +net_lib/fblock.rel + _fblock +net_lib/fclose.rel + _fclose +net_lib/fseek.rel + _fseek +net_lib/ftell.rel + _ftell +net_lib/ungetc.rel + _ungetc +net_lib/fwrite.rel + _fwrite +net_lib/_fillbuf.rel + __fillbuf +net_lib/fread.rel + _fread +net_lib/perror.rel + _perror +net_lib/setvbuf.rel + _setvbuf +net_lib/setbuf.rel + _setbuf +net_lib/tmpfile.rel + _tmpfile +net_lib/_fclose.rel + __fclose +net_lib/_fcreat.rel + __fcreat +net_lib/read.rel + _read +net_lib/write.rel + _write +net_lib/close.rel + _close +net_lib/fcloseall.rel + _fcloseall +net_lib/flushall.rel + _flushall +net_lib/fdup.rel + _fdup +net_lib/fpname.rel + _fpname +net_lib/exit.rel + _exit +net_lib/dofiles.rel + _dofiles +net_lib/diagopen.rel + _diagopen +net_lib/timer.rel + _stop_timer + _set_timer + _ppause + _timerproc + _read_timer + _start_timer + _kalarm + _tformat +net_lib/ttydriv.rel + _ttydriv +net_lib/view.rel + _doview + _view +net_lib/vfprintf.rel + _vfprintf +net_lib/wildmat.rel + _wildmat diff --git a/src/nos/lib/net_lib/Allocmbufs.rel b/src/nos/lib/net_lib/Allocmbufs.rel new file mode 100644 index 00000000..d0377b45 --- /dev/null +++ b/src/nos/lib/net_lib/Allocmbufs.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 4 flags 0 +S _Allocmbufs Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/Badsocket.rel b/src/nos/lib/net_lib/Badsocket.rel new file mode 100644 index 00000000..82a2ea00 --- /dev/null +++ b/src/nos/lib/net_lib/Badsocket.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size B flags 0 +S _Badsocket Def00000000 +A CDATA0 size B flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 42 61 64 20 73 6F 63 6B 65 74 00 +R 00 00 03 00 diff --git a/src/nos/lib/net_lib/Cachehits.rel b/src/nos/lib/net_lib/Cachehits.rel new file mode 100644 index 00000000..5ac6c56f --- /dev/null +++ b/src/nos/lib/net_lib/Cachehits.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 4 flags 0 +S _Cachehits Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/Decode.rel b/src/nos/lib/net_lib/Decode.rel new file mode 100644 index 00000000..8c5f5cbe --- /dev/null +++ b/src/nos/lib/net_lib/Decode.rel @@ -0,0 +1,66 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_OR_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C3 flags 0 +S _Decode Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FC +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD 77 FD AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 DD 4E 0A DD 46 0B DD 6E FE DD 66 +R 00 00 01 00 +T 1E 00 00 00 FF A7 ED 42 D2 C0 00 00 00 +R 00 00 01 00 00 09 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E FE DD 66 FF DD 4E 04 DD 46 +R 00 00 01 00 +T 30 00 00 00 05 09 23 23 23 6E 01 00 00 61 45 +R 00 00 01 00 +T 3B 00 00 00 2E 00 65 4D C5 E5 DD 6E FE DD 66 +R 00 00 01 00 +T 46 00 00 00 FF DD 4E 04 DD 46 05 09 23 23 6E +R 00 00 01 00 +T 51 00 00 00 01 00 00 61 4D 44 21 00 00 C5 E5 +R 00 00 01 00 +T 5C 00 00 00 DD 6E FE DD 66 FF DD 4E 04 DD 46 +R 00 00 01 00 +T 67 00 00 00 05 09 23 6E 01 00 00 61 41 4C 65 +R 00 00 01 00 +T 72 00 00 00 2E 00 C5 E5 DD 6E FE DD 66 FF DD +R 00 00 01 00 +T 7D 00 00 00 4E 04 DD 46 05 09 6E 01 00 00 61 +R 00 00 01 00 +T 88 00 00 00 CD 00 00 00 00 CD 00 00 00 00 CD +R 00 00 01 00 02 05 01 00 02 0A 01 00 +T 8F 00 00 00 00 00 00 00 E5 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 01 00 +T 98 00 00 00 29 29 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T A3 00 00 00 23 72 23 71 23 70 DD 34 FC 20 03 +R 00 00 01 00 +T AE 00 00 00 DD 34 FD +R 00 00 01 00 +T B1 00 00 00 +R 00 00 01 00 +T B1 00 00 00 21 02 00 39 7E C6 04 77 30 02 23 +R 00 00 01 00 +T BC 00 00 00 34 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 C3 13 00 00 00 +R 00 00 01 00 00 05 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/net_lib/Encap.rel b/src/nos/lib/net_lib/Encap.rel new file mode 100644 index 00000000..887b9c86 --- /dev/null +++ b/src/nos/lib/net_lib/Encap.rel @@ -0,0 +1,44 @@ +XL4 +H 5 areas 5 global symbols +S .__.ABS. Def00000000 +S _Iftypes Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _ip_encap Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size 6 flags 0 +A IDATA0 size 69 flags 0 +S _Encap Def00000000 +A CDATA0 size 69 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 65 6E 63 61 70 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 00 06 02 00 +T 08 00 00 00 FF FF FF FF FF FF FF FF FF FF +R 00 00 04 00 +T 12 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 31 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 3B 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 02 06 01 00 4A 0A 03 00 +T 42 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 55 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 5D 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 65 00 00 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/net_lib/Encode.rel b/src/nos/lib/net_lib/Encode.rel new file mode 100644 index 00000000..1e9681e5 --- /dev/null +++ b/src/nos/lib/net_lib/Encode.rel @@ -0,0 +1,73 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F8 flags 0 +S _Encode Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FC +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 DD 77 FD AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 DD 4E 0A DD 46 0B DD 6E FE DD 66 +R 00 00 01 00 +T 1E 00 00 00 FF A7 ED 42 D2 F5 00 00 00 +R 00 00 01 00 00 09 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E FC DD 66 FD 29 29 DD 4E 04 +R 00 00 01 00 +T 30 00 00 00 DD 46 05 09 4E 23 46 23 5E 23 56 +R 00 00 01 00 +T 3B 00 00 00 69 60 7D E6 FF DD 6E FE DD 66 FF +R 00 00 01 00 +T 46 00 00 00 DD 4E 02 DD 46 03 09 77 DD 6E FC +R 00 00 01 00 +T 51 00 00 00 DD 66 FD 29 29 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 5C 00 00 00 19 4E 23 46 23 5E 23 56 69 60 6C +R 00 00 01 00 +T 67 00 00 00 63 5A 16 00 7D E6 FF DD 6E FE DD +R 00 00 01 00 +T 72 00 00 00 66 FF DD 4E 02 DD 46 03 09 23 77 +R 00 00 01 00 +T 7D 00 00 00 DD 6E FC DD 66 FD 29 29 DD 5E 04 +R 00 00 01 00 +T 88 00 00 00 DD 56 05 19 4E 23 46 23 5E 23 56 +R 00 00 01 00 +T 93 00 00 00 69 60 6B 62 11 00 00 7D E6 FF DD +R 00 00 01 00 +T 9E 00 00 00 6E FE DD 66 FF DD 4E 02 DD 46 03 +R 00 00 01 00 +T A9 00 00 00 09 23 23 77 DD 6E FC DD 66 FD 29 +R 00 00 01 00 +T B4 00 00 00 29 DD 5E 04 DD 56 05 19 4E 23 46 +R 00 00 01 00 +T BF 00 00 00 23 5E 23 56 69 60 6A 26 00 5C 54 +R 00 00 01 00 +T CA 00 00 00 7D E6 FF DD 6E FE DD 66 FF DD 4E +R 00 00 01 00 +T D5 00 00 00 02 DD 46 03 09 23 23 23 77 DD 34 +R 00 00 01 00 +T E0 00 00 00 FC 20 03 DD 34 FD +R 00 00 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 21 02 00 39 7E C6 04 77 30 02 23 +R 00 00 01 00 +T F1 00 00 00 34 +R 00 00 01 00 +T F2 00 00 00 +R 00 00 01 00 +T F2 00 00 00 C3 13 00 00 00 +R 00 00 01 00 00 05 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/net_lib/Freembufs.rel b/src/nos/lib/net_lib/Freembufs.rel new file mode 100644 index 00000000..5691a492 --- /dev/null +++ b/src/nos/lib/net_lib/Freembufs.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 4 flags 0 +S _Freembufs Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/Ifaces.rel b/src/nos/lib/net_lib/Ifaces.rel new file mode 100644 index 00000000..fdbc816d --- /dev/null +++ b/src/nos/lib/net_lib/Ifaces.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S _Loopback Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Ifaces Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 02 04 01 00 diff --git a/src/nos/lib/net_lib/Ifcmds.rel b/src/nos/lib/net_lib/Ifcmds.rel new file mode 100644 index 00000000..606307f2 --- /dev/null +++ b/src/nos/lib/net_lib/Ifcmds.rel @@ -0,0 +1,61 @@ +XL4 +H 4 areas 15 global symbols +S ___04eb_708f_mtu Ref00000000 +S _ifipaddr Ref00000000 +S ___05c2_e58b_txqlen Ref00000000 +S ___04ee_b07d_netmask Ref00000000 +S _ifforw Ref00000000 +S _ifencap Ref00000000 +S _ifbroad Ref00000000 +S ___0487_8227_forward Ref00000000 +S .__.ABS. Def00000000 +S _ifnetmsk Ref00000000 +S _ifmtu Ref00000000 +S ___0566_b4d7_rxbuf Ref00000000 +S _iftxqlen Ref00000000 +S ___04ad_0191_ipaddress Ref00000000 +S ___04b7_dfe4_linkaddress Ref00000000 +S _iflinkadr Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _ifrxbuf Ref00000000 +S ___0475_48fd_encapsulation Ref00000000 +S ___0425_f951_broadcast Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 82 flags 0 +S _Ifcmds Def00000000 +A CDATA0 size 82 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 13 00 4A 08 06 00 +T 08 00 00 00 02 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 12 00 +T 10 00 00 00 00 00 00 00 00 00 02 00 00 00 00 +R 00 00 03 00 4A 04 05 00 +T 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 07 00 4A 08 04 00 +T 22 00 00 00 02 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 0D 00 +T 2A 00 00 00 00 00 00 00 00 00 02 00 00 00 00 +R 00 00 03 00 4A 04 01 00 +T 34 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0E 00 4A 08 0F 00 +T 3C 00 00 00 02 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 00 00 +T 44 00 00 00 00 00 00 00 00 00 02 00 00 00 00 +R 00 00 03 00 4A 04 0A 00 +T 4E 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 03 00 4A 08 09 00 +T 56 00 00 00 02 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 02 00 +T 5E 00 00 00 00 00 00 00 00 00 02 00 00 00 00 +R 00 00 03 00 4A 04 0C 00 +T 68 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0B 00 4A 08 11 00 +T 70 00 00 00 02 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 7B 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/net_lib/Loopback.rel b/src/nos/lib/net_lib/Loopback.rel new file mode 100644 index 00000000..eb191eb9 --- /dev/null +++ b/src/nos/lib/net_lib/Loopback.rel @@ -0,0 +1,44 @@ +XL4 +H 5 areas 5 global symbols +S .__.ABS. Def00000000 +S _Iftypes Ref00000000 +S _Encap Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size 3 flags 0 +A IDATA0 size 69 flags 0 +S _Loopback Def00000000 +A CDATA0 size 69 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 6F 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 02 04 02 00 00 08 02 00 +T 04 00 00 00 01 00 00 7F FF FF FF FF +R 00 00 04 00 +T 0C 00 00 00 FF FF FF FF FF FF 00 00 00 00 +R 00 00 04 00 +T 16 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 20 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 34 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 3D 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 02 04 01 00 +T 45 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 4E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 59 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 +T 61 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/net_lib/MD5Final.rel b/src/nos/lib/net_lib/MD5Final.rel new file mode 100644 index 00000000..b686134e --- /dev/null +++ b/src/nos/lib/net_lib/MD5Final.rel @@ -0,0 +1,79 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memset Ref00000000 +S _Encode Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _MD5Update Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PADDING Ref00000000 +S ?UL_RSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D3 flags 0 +S _MD5Final Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF 21 08 00 E5 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 21 10 00 09 4D 44 21 02 00 39 5D +R 00 00 01 00 +T 14 00 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 1A 00 00 00 CD 00 00 00 00 E1 21 10 00 DD 4E +R 00 00 01 00 02 05 00 00 +T 23 00 00 00 04 DD 46 05 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 2E 00 00 00 46 EB 3E 03 CD 00 00 00 00 7D E6 +R 00 00 01 00 02 09 09 00 +T 37 00 00 00 3F 4F 7C E6 00 47 DD 71 FC DD 70 +R 00 00 01 00 +T 42 00 00 00 FD 11 38 00 69 60 A7 ED 52 30 0E +R 00 00 01 00 +T 4D 00 00 00 DD 4E FC DD 46 FD 21 38 00 A7 ED +R 00 00 01 00 +T 58 00 00 00 42 18 0C +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 DD 4E FC DD 46 FD 21 78 00 A7 ED +R 00 00 01 00 +T 66 00 00 00 42 +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 DD 75 FE DD 74 FF E5 01 +R 00 00 01 00 +T 6F 00 00 00 00 00 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 02 04 08 00 +T 78 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 7D 00 00 00 00 00 00 00 E1 21 08 00 E5 21 +R 00 00 01 00 02 04 00 00 +T 85 00 00 00 02 00 39 4D 44 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 90 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 96 00 00 00 00 00 00 00 E1 DD 7E 02 DD B6 03 +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 28 2F +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 21 10 00 E5 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T AC 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T B4 00 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T BB 00 00 00 58 00 E5 01 00 00 DD 5E 04 DD 56 +R 00 00 01 00 +T C6 00 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T CC 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 00 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/MD5Init.rel b/src/nos/lib/net_lib/MD5Init.rel new file mode 100644 index 00000000..5ff612c9 --- /dev/null +++ b/src/nos/lib/net_lib/MD5Init.rel @@ -0,0 +1,29 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5D flags 0 +S _MD5Init Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 14 00 19 AF 77 +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 23 77 23 77 23 77 21 10 00 19 AF +R 00 00 01 00 +T 14 00 00 00 77 23 77 23 77 23 77 EB 36 01 23 +R 00 00 01 00 +T 1F 00 00 00 36 23 23 36 45 23 36 67 21 04 00 +R 00 00 01 00 +T 2A 00 00 00 DD 4E 02 DD 46 03 09 36 89 23 36 +R 00 00 01 00 +T 35 00 00 00 AB 23 36 CD 23 36 EF 21 08 00 09 +R 00 00 01 00 +T 40 00 00 00 36 FE 23 36 DC 23 36 BA 23 36 98 +R 00 00 01 00 +T 4B 00 00 00 21 0C 00 09 36 76 23 36 54 23 36 +R 00 00 01 00 +T 56 00 00 00 32 23 36 10 C3 00 00 00 00 +R 00 00 01 00 02 09 00 00 diff --git a/src/nos/lib/net_lib/MD5Transform.rel b/src/nos/lib/net_lib/MD5Transform.rel new file mode 100644 index 00000000..8b24e068 --- /dev/null +++ b/src/nos/lib/net_lib/MD5Transform.rel @@ -0,0 +1,71 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Decode Ref00000000 +S _memset Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _MD5Transform_Round1 Ref00000000 +S _MD5Transform_Round2 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S _MD5Transform_Round3 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DF flags 0 +S _MD5Transform Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 B0 FF 21 10 00 E5 +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 DD 4E 02 DD 46 03 21 02 00 39 11 +R 00 00 01 00 +T 14 00 00 00 40 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 1B 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 22 00 00 00 40 00 E5 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T 2C 00 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 34 00 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 3B 00 00 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 43 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 49 00 00 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 51 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 57 00 00 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 5F 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 65 00 00 00 40 00 39 5E 23 56 23 4E 23 46 DD +R 00 00 01 00 +T 70 00 00 00 6E 02 DD 66 03 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 07 00 +T 79 00 00 00 04 00 DD 4E 02 DD 46 03 09 E5 21 +R 00 00 01 00 +T 84 00 00 00 46 00 39 5E 23 56 23 4E 23 46 E1 +R 00 00 01 00 +T 8F 00 00 00 CD 00 00 00 00 21 08 00 DD 4E 02 +R 00 00 01 00 02 05 07 00 +T 98 00 00 00 DD 46 03 09 E5 21 4A 00 39 5E 23 +R 00 00 01 00 +T A3 00 00 00 56 23 4E 23 46 E1 CD 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T AC 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T B7 00 00 00 21 4E 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T C2 00 00 00 E1 CD 00 00 00 00 21 50 00 E5 01 +R 00 00 01 00 02 06 07 00 +T CB 00 00 00 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T D4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T D9 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 04 00 diff --git a/src/nos/lib/net_lib/MD5Transform_Round1.rel b/src/nos/lib/net_lib/MD5Transform_Round1.rel new file mode 100644 index 00000000..54878794 --- /dev/null +++ b/src/nos/lib/net_lib/MD5Transform_Round1.rel @@ -0,0 +1,785 @@ +XL4 +H 2 areas B global symbols +S ?L_AND_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_OR_L03 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?L_NOT_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?UL_RSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size EBC flags 0 +S _MD5Transform_Round1 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 40 00 19 E5 21 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 4C 00 19 4E 23 46 23 5E 23 56 D5 +R 00 00 01 00 +T 14 00 00 00 C5 21 44 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 1F 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 28 00 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 2F 00 00 00 21 48 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 3A 00 00 00 23 56 23 4E 23 46 C5 D5 21 44 00 +R 00 00 01 00 +T 45 00 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 50 00 00 00 4E 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 09 00 00 +T 58 00 00 00 00 00 00 00 C5 E5 DD 6E 02 DD 66 +R 00 00 01 00 02 04 02 00 +T 61 00 00 00 03 4E 23 46 23 5E 23 56 69 60 C1 +R 00 00 01 00 +T 6C 00 00 00 09 EB C1 ED 4A E5 D5 21 78 A4 C1 +R 00 00 01 00 +T 77 00 00 00 09 EB 21 6A D7 C1 ED 4A 4D 44 E1 +R 00 00 01 00 +T 82 00 00 00 CD 00 00 00 00 21 40 00 DD 4E 02 +R 00 00 01 00 02 05 03 00 +T 8B 00 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 96 00 00 00 EB 3E 19 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 08 09 00 +T 9F 00 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T AA 00 00 00 56 23 4E 23 46 EB 3E 07 CD +R 00 00 01 00 +T B3 00 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T BA 00 00 00 40 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T C5 00 00 00 23 72 23 71 23 70 21 40 00 DD 4E +R 00 00 01 00 +T D0 00 00 00 02 DD 46 03 09 E5 21 44 00 09 5E +R 00 00 01 00 +T DB 00 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T E3 00 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T EC 00 00 00 46 03 09 E5 21 48 00 09 5E 23 56 +R 00 00 01 00 +T F7 00 00 00 23 4E 23 46 C5 D5 21 40 00 DD 4E +R 00 00 01 00 +T 02 01 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 0D 01 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T 13 01 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 1C 01 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 27 01 00 00 46 C5 D5 21 40 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 32 01 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 3D 01 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 44 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 4F 01 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 5A 01 00 00 C1 ED 4A E5 D5 21 56 B7 C1 09 EB +R 00 00 01 00 +T 65 01 00 00 21 C7 E8 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 6F 01 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 78 01 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 83 01 00 00 3E 14 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 8B 01 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 96 01 00 00 56 23 4E 23 46 EB 3E 0C CD +R 00 00 01 00 +T 9F 01 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T A6 01 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T B1 01 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T BC 01 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T C7 01 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T CF 01 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T D8 01 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T E3 01 00 00 23 4E 23 46 C5 D5 21 4C 00 DD 4E +R 00 00 01 00 +T EE 01 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T F9 01 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T FF 01 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 08 02 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 13 02 00 00 46 C5 D5 21 4C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 1E 02 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 29 02 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 30 02 00 00 21 08 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 3B 02 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 46 02 00 00 C1 ED 4A E5 D5 21 DB 70 C1 09 EB +R 00 00 01 00 +T 51 02 00 00 21 20 24 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 5B 02 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 64 02 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 6F 02 00 00 3E 0F CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 77 02 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 82 02 00 00 56 23 4E 23 46 EB 3E 11 CD +R 00 00 01 00 +T 8B 02 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 92 02 00 00 48 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 9D 02 00 00 23 72 23 71 23 70 21 48 00 DD 4E +R 00 00 01 00 +T A8 02 00 00 02 DD 46 03 09 E5 21 4C 00 09 5E +R 00 00 01 00 +T B3 02 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T BB 02 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T C4 02 00 00 46 03 09 E5 21 40 00 09 5E 23 56 +R 00 00 01 00 +T CF 02 00 00 23 4E 23 46 C5 D5 21 48 00 DD 4E +R 00 00 01 00 +T DA 02 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T E5 02 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T EB 02 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 00 00 +T F4 02 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T FF 02 00 00 46 C5 D5 21 48 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 0A 03 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 15 03 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 1C 03 00 00 21 0C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 27 03 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 32 03 00 00 C1 ED 4A E5 D5 21 EE CE C1 09 EB +R 00 00 01 00 +T 3D 03 00 00 21 BD C1 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 47 03 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 50 03 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 5B 03 00 00 3E 0A CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 63 03 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 6E 03 00 00 56 23 4E 23 46 EB 3E 16 CD +R 00 00 01 00 +T 77 03 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 7E 03 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 89 03 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T 94 03 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T 9F 03 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T A7 03 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T B0 03 00 00 46 03 09 E5 21 4C 00 09 5E 23 56 +R 00 00 01 00 +T BB 03 00 00 23 4E 23 46 C5 D5 21 44 00 DD 4E +R 00 00 01 00 +T C6 03 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T D1 03 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T D7 03 00 00 00 00 00 00 C5 E5 21 48 00 DD 4E +R 00 00 01 00 02 04 00 00 +T E0 03 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T EB 03 00 00 46 C5 D5 21 44 00 DD 4E 02 DD 46 +R 00 00 01 00 +T F6 03 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 01 04 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 08 04 00 00 21 10 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 13 04 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 1E 04 00 00 C1 ED 4A E5 D5 21 AF 0F C1 09 EB +R 00 00 01 00 +T 29 04 00 00 21 7C F5 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 33 04 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 3C 04 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 47 04 00 00 3E 19 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 4F 04 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 5A 04 00 00 56 23 4E 23 46 EB 3E 07 CD +R 00 00 01 00 +T 63 04 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 6A 04 00 00 40 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 75 04 00 00 23 72 23 71 23 70 21 40 00 DD 4E +R 00 00 01 00 +T 80 04 00 00 02 DD 46 03 09 E5 21 44 00 09 5E +R 00 00 01 00 +T 8B 04 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 93 04 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 9C 04 00 00 46 03 09 E5 21 48 00 09 5E 23 56 +R 00 00 01 00 +T A7 04 00 00 23 4E 23 46 C5 D5 21 40 00 DD 4E +R 00 00 01 00 +T B2 04 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T BD 04 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T C3 04 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 00 00 +T CC 04 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T D7 04 00 00 46 C5 D5 21 40 00 DD 4E 02 DD 46 +R 00 00 01 00 +T E2 04 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T ED 04 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T F4 04 00 00 21 14 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T FF 04 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 0A 05 00 00 C1 ED 4A E5 D5 21 2A C6 C1 09 EB +R 00 00 01 00 +T 15 05 00 00 21 87 47 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 1F 05 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 28 05 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 33 05 00 00 3E 14 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 3B 05 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 46 05 00 00 56 23 4E 23 46 EB 3E 0C CD +R 00 00 01 00 +T 4F 05 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 56 05 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 61 05 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T 6C 05 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T 77 05 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 7F 05 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 88 05 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T 93 05 00 00 23 4E 23 46 C5 D5 21 4C 00 DD 4E +R 00 00 01 00 +T 9E 05 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T A9 05 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T AF 05 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 00 00 +T B8 05 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T C3 05 00 00 46 C5 D5 21 4C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T CE 05 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T D9 05 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T E0 05 00 00 21 18 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T EB 05 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T F6 05 00 00 C1 ED 4A E5 D5 21 13 46 C1 09 EB +R 00 00 01 00 +T 01 06 00 00 21 30 A8 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 0B 06 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 14 06 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 1F 06 00 00 3E 0F CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 27 06 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 32 06 00 00 56 23 4E 23 46 EB 3E 11 CD +R 00 00 01 00 +T 3B 06 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 42 06 00 00 48 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 4D 06 00 00 23 72 23 71 23 70 21 48 00 DD 4E +R 00 00 01 00 +T 58 06 00 00 02 DD 46 03 09 E5 21 4C 00 09 5E +R 00 00 01 00 +T 63 06 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 6B 06 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 74 06 00 00 46 03 09 E5 21 40 00 09 5E 23 56 +R 00 00 01 00 +T 7F 06 00 00 23 4E 23 46 C5 D5 21 48 00 DD 4E +R 00 00 01 00 +T 8A 06 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 95 06 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T 9B 06 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 00 00 +T A4 06 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T AF 06 00 00 46 C5 D5 21 48 00 DD 4E 02 DD 46 +R 00 00 01 00 +T BA 06 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T C5 06 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T CC 06 00 00 21 1C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T D7 06 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T E2 06 00 00 C1 ED 4A E5 D5 21 01 95 C1 09 EB +R 00 00 01 00 +T ED 06 00 00 21 46 FD C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T F7 06 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 00 07 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 0B 07 00 00 3E 0A CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 13 07 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 1E 07 00 00 56 23 4E 23 46 EB 3E 16 CD +R 00 00 01 00 +T 27 07 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 2E 07 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 39 07 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T 44 07 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T 4F 07 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 57 07 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 60 07 00 00 46 03 09 E5 21 4C 00 09 5E 23 56 +R 00 00 01 00 +T 6B 07 00 00 23 4E 23 46 C5 D5 21 44 00 DD 4E +R 00 00 01 00 +T 76 07 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 81 07 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T 87 07 00 00 00 00 00 00 C5 E5 21 48 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 90 07 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 9B 07 00 00 46 C5 D5 21 44 00 DD 4E 02 DD 46 +R 00 00 01 00 +T A6 07 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T B1 07 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T B8 07 00 00 21 20 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T C3 07 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T CE 07 00 00 C1 ED 4A E5 D5 21 D8 98 C1 09 EB +R 00 00 01 00 +T D9 07 00 00 21 80 69 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T E3 07 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T EC 07 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T F7 07 00 00 3E 19 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T FF 07 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 0A 08 00 00 56 23 4E 23 46 EB 3E 07 CD +R 00 00 01 00 +T 13 08 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 1A 08 00 00 40 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 25 08 00 00 23 72 23 71 23 70 21 40 00 DD 4E +R 00 00 01 00 +T 30 08 00 00 02 DD 46 03 09 E5 21 44 00 09 5E +R 00 00 01 00 +T 3B 08 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 43 08 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 4C 08 00 00 46 03 09 E5 21 48 00 09 5E 23 56 +R 00 00 01 00 +T 57 08 00 00 23 4E 23 46 C5 D5 21 40 00 DD 4E +R 00 00 01 00 +T 62 08 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 6D 08 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T 73 08 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 7C 08 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 87 08 00 00 46 C5 D5 21 40 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 92 08 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 9D 08 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T A4 08 00 00 21 24 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T AF 08 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T BA 08 00 00 C1 ED 4A E5 D5 21 AF F7 C1 09 EB +R 00 00 01 00 +T C5 08 00 00 21 44 8B C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T CF 08 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T D8 08 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T E3 08 00 00 3E 14 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T EB 08 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T F6 08 00 00 56 23 4E 23 46 EB 3E 0C CD +R 00 00 01 00 +T FF 08 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 06 09 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 11 09 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T 1C 09 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T 27 09 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 2F 09 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 38 09 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T 43 09 00 00 23 4E 23 46 C5 D5 21 4C 00 DD 4E +R 00 00 01 00 +T 4E 09 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 59 09 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T 5F 09 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 68 09 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 73 09 00 00 46 C5 D5 21 4C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 7E 09 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 89 09 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 90 09 00 00 21 28 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 9B 09 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T A6 09 00 00 C1 ED 4A E5 D5 21 B1 5B C1 09 EB +R 00 00 01 00 +T B1 09 00 00 21 FF FF C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T BB 09 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T C4 09 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T CF 09 00 00 3E 0F CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T D7 09 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T E2 09 00 00 56 23 4E 23 46 EB 3E 11 CD +R 00 00 01 00 +T EB 09 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T F2 09 00 00 48 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T FD 09 00 00 23 72 23 71 23 70 21 48 00 DD 4E +R 00 00 01 00 +T 08 0A 00 00 02 DD 46 03 09 E5 21 4C 00 09 5E +R 00 00 01 00 +T 13 0A 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 1B 0A 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 24 0A 00 00 46 03 09 E5 21 40 00 09 5E 23 56 +R 00 00 01 00 +T 2F 0A 00 00 23 4E 23 46 C5 D5 21 48 00 DD 4E +R 00 00 01 00 +T 3A 0A 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 45 0A 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T 4B 0A 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 54 0A 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 5F 0A 00 00 46 C5 D5 21 48 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 6A 0A 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 75 0A 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 7C 0A 00 00 21 2C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 87 0A 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 92 0A 00 00 C1 ED 4A E5 D5 21 BE D7 C1 09 EB +R 00 00 01 00 +T 9D 0A 00 00 21 5C 89 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T A7 0A 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T B0 0A 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T BB 0A 00 00 3E 0A CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T C3 0A 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T CE 0A 00 00 56 23 4E 23 46 EB 3E 16 CD +R 00 00 01 00 +T D7 0A 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T DE 0A 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T E9 0A 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T F4 0A 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T FF 0A 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 07 0B 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 10 0B 00 00 46 03 09 E5 21 4C 00 09 5E 23 56 +R 00 00 01 00 +T 1B 0B 00 00 23 4E 23 46 C5 D5 21 44 00 DD 4E +R 00 00 01 00 +T 26 0B 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 31 0B 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T 37 0B 00 00 00 00 00 00 C5 E5 21 48 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 40 0B 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 4B 0B 00 00 46 C5 D5 21 44 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 56 0B 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 61 0B 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 68 0B 00 00 21 30 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 73 0B 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 7E 0B 00 00 C1 ED 4A E5 D5 21 22 11 C1 09 EB +R 00 00 01 00 +T 89 0B 00 00 21 90 6B C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 93 0B 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 9C 0B 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T A7 0B 00 00 3E 19 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T AF 0B 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T BA 0B 00 00 56 23 4E 23 46 EB 3E 07 CD +R 00 00 01 00 +T C3 0B 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T CA 0B 00 00 40 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T D5 0B 00 00 23 72 23 71 23 70 21 40 00 DD 4E +R 00 00 01 00 +T E0 0B 00 00 02 DD 46 03 09 E5 21 44 00 09 5E +R 00 00 01 00 +T EB 0B 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T F3 0B 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T FC 0B 00 00 46 03 09 E5 21 48 00 09 5E 23 56 +R 00 00 01 00 +T 07 0C 00 00 23 4E 23 46 C5 D5 21 40 00 DD 4E +R 00 00 01 00 +T 12 0C 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 1D 0C 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T 23 0C 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 2C 0C 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 37 0C 00 00 46 C5 D5 21 40 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 42 0C 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 4D 0C 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 54 0C 00 00 21 34 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 5F 0C 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 6A 0C 00 00 C1 ED 4A E5 D5 21 93 71 C1 09 EB +R 00 00 01 00 +T 75 0C 00 00 21 98 FD C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 7F 0C 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 88 0C 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 93 0C 00 00 3E 14 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 9B 0C 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T A6 0C 00 00 56 23 4E 23 46 EB 3E 0C CD +R 00 00 01 00 +T AF 0C 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T B6 0C 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T C1 0C 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T CC 0C 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T D7 0C 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T DF 0C 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T E8 0C 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T F3 0C 00 00 23 4E 23 46 C5 D5 21 4C 00 DD 4E +R 00 00 01 00 +T FE 0C 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 09 0D 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T 0F 0D 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 18 0D 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 23 0D 00 00 46 C5 D5 21 4C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 2E 0D 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 39 0D 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 40 0D 00 00 21 38 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 4B 0D 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 56 0D 00 00 C1 ED 4A E5 D5 21 8E 43 C1 09 EB +R 00 00 01 00 +T 61 0D 00 00 21 79 A6 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 6B 0D 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 74 0D 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 7F 0D 00 00 3E 0F CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 87 0D 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 92 0D 00 00 56 23 4E 23 46 EB 3E 11 CD +R 00 00 01 00 +T 9B 0D 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T A2 0D 00 00 48 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T AD 0D 00 00 23 72 23 71 23 70 21 48 00 DD 4E +R 00 00 01 00 +T B8 0D 00 00 02 DD 46 03 09 E5 21 4C 00 09 5E +R 00 00 01 00 +T C3 0D 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T CB 0D 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T D4 0D 00 00 46 03 09 E5 21 40 00 09 5E 23 56 +R 00 00 01 00 +T DF 0D 00 00 23 4E 23 46 C5 D5 21 48 00 DD 4E +R 00 00 01 00 +T EA 0D 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T F5 0D 00 00 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T FB 0D 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 04 0E 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 0F 0E 00 00 46 C5 D5 21 48 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 1A 0E 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 25 0E 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 2C 0E 00 00 21 3C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 37 0E 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 42 0E 00 00 C1 ED 4A E5 D5 21 21 08 C1 09 EB +R 00 00 01 00 +T 4D 0E 00 00 21 B4 49 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 57 0E 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 60 0E 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 6B 0E 00 00 3E 0A CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 73 0E 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 7E 0E 00 00 56 23 4E 23 46 EB 3E 16 CD +R 00 00 01 00 +T 87 0E 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 8E 0E 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 99 0E 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T A4 0E 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T AF 0E 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T B7 0E 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 03 00 02 09 01 00 diff --git a/src/nos/lib/net_lib/MD5Transform_Round2.rel b/src/nos/lib/net_lib/MD5Transform_Round2.rel new file mode 100644 index 00000000..4f577354 --- /dev/null +++ b/src/nos/lib/net_lib/MD5Transform_Round2.rel @@ -0,0 +1,785 @@ +XL4 +H 2 areas B global symbols +S ?L_AND_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_OR_L03 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?L_NOT_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?UL_RSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size ECC flags 0 +S _MD5Transform_Round2 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 40 00 19 E5 21 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 4C 00 19 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 14 00 00 00 CD 00 00 00 00 C5 E5 21 48 00 DD +R 00 00 01 00 02 05 07 00 +T 1D 00 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 28 00 00 00 23 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 08 00 00 +T 31 00 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 3C 00 00 00 56 23 4E 23 46 C5 D5 21 44 00 DD +R 00 00 01 00 +T 47 00 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 52 00 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 00 00 +T 59 00 00 00 00 00 00 00 C5 E5 21 04 00 DD 4E +R 00 00 01 00 02 04 02 00 +T 62 00 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 6D 00 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T 78 00 00 00 21 62 25 C1 09 EB 21 1E F6 C1 ED +R 00 00 01 00 +T 83 00 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 03 00 +T 8B 00 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 96 00 00 00 56 23 4E 23 46 EB 3E 1B CD +R 00 00 01 00 +T 9F 00 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 09 00 +T A8 00 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T B3 00 00 00 46 EB 3E 05 CD 00 00 00 00 CD +R 00 00 01 00 02 09 05 00 +T BB 00 00 00 00 00 00 00 E5 21 40 00 DD 5E 02 +R 00 00 01 00 02 04 02 00 +T C4 00 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T CF 00 00 00 70 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T DA 00 00 00 E5 21 44 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T E5 00 00 00 46 E1 CD 00 00 00 00 21 4C 00 DD +R 00 00 01 00 02 07 03 00 +T EE 00 00 00 4E 02 DD 46 03 09 E5 21 48 00 09 +R 00 00 01 00 +T F9 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 02 01 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 07 00 +T 0B 01 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 16 01 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 00 00 +T 1E 01 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 29 01 00 00 56 23 4E 23 46 C5 D5 21 40 00 DD +R 00 00 01 00 +T 34 01 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 3F 01 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 00 00 +T 46 01 00 00 00 00 00 00 C5 E5 21 18 00 DD 4E +R 00 00 01 00 02 04 02 00 +T 4F 01 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 5A 01 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T 65 01 00 00 21 40 B3 C1 09 EB 21 40 C0 C1 ED +R 00 00 01 00 +T 70 01 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 03 00 +T 78 01 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 83 01 00 00 56 23 4E 23 46 EB 3E 17 CD +R 00 00 01 00 +T 8C 01 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 09 00 +T 95 01 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T A0 01 00 00 46 EB 3E 09 CD 00 00 00 00 CD +R 00 00 01 00 02 09 05 00 +T A8 01 00 00 00 00 00 00 E5 21 4C 00 DD 5E 02 +R 00 00 01 00 02 04 02 00 +T B1 01 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T BC 01 00 00 70 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T C7 01 00 00 E5 21 40 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T D2 01 00 00 46 E1 CD 00 00 00 00 21 48 00 DD +R 00 00 01 00 02 07 03 00 +T DB 01 00 00 4E 02 DD 46 03 09 E5 21 44 00 09 +R 00 00 01 00 +T E6 01 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T EF 01 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 07 00 +T F8 01 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 03 02 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 00 00 +T 0B 02 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 16 02 00 00 56 23 4E 23 46 C5 D5 21 4C 00 DD +R 00 00 01 00 +T 21 02 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 2C 02 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 00 00 +T 33 02 00 00 00 00 00 00 C5 E5 21 2C 00 DD 4E +R 00 00 01 00 02 04 02 00 +T 3C 02 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 47 02 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T 52 02 00 00 21 51 5A C1 09 EB 21 5E 26 C1 ED +R 00 00 01 00 +T 5D 02 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 03 00 +T 65 02 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 70 02 00 00 56 23 4E 23 46 EB 3E 12 CD +R 00 00 01 00 +T 79 02 00 00 00 00 00 00 C5 E5 21 48 00 DD 4E +R 00 00 01 00 02 04 09 00 +T 82 02 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 8D 02 00 00 46 EB 3E 0E CD 00 00 00 00 CD +R 00 00 01 00 02 09 05 00 +T 95 02 00 00 00 00 00 00 E5 21 48 00 DD 5E 02 +R 00 00 01 00 02 04 02 00 +T 9E 02 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T A9 02 00 00 70 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T B4 02 00 00 E5 21 4C 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T BF 02 00 00 46 E1 CD 00 00 00 00 21 44 00 DD +R 00 00 01 00 02 07 03 00 +T C8 02 00 00 4E 02 DD 46 03 09 E5 21 40 00 09 +R 00 00 01 00 +T D3 02 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T DC 02 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 07 00 +T E5 02 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T F0 02 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 00 00 +T F8 02 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 03 03 00 00 56 23 4E 23 46 C5 D5 21 48 00 DD +R 00 00 01 00 +T 0E 03 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 19 03 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 00 00 +T 20 03 00 00 00 00 00 00 C5 E5 DD 6E 02 DD 66 +R 00 00 01 00 02 04 02 00 +T 29 03 00 00 03 4E 23 46 23 5E 23 56 69 60 C1 +R 00 00 01 00 +T 34 03 00 00 09 EB C1 ED 4A E5 D5 21 AA C7 C1 +R 00 00 01 00 +T 3F 03 00 00 09 EB 21 B6 E9 C1 ED 4A 4D 44 E1 +R 00 00 01 00 +T 4A 03 00 00 CD 00 00 00 00 21 44 00 DD 4E 02 +R 00 00 01 00 02 05 03 00 +T 53 03 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 5E 03 00 00 EB 3E 0C CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 08 09 00 +T 67 03 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 72 03 00 00 56 23 4E 23 46 EB 3E 14 CD +R 00 00 01 00 +T 7B 03 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 82 03 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 8D 03 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T 98 03 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T A3 03 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T AB 03 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T B4 03 00 00 46 03 09 E5 21 4C 00 09 5E 23 56 +R 00 00 01 00 +T BF 03 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T C8 03 00 00 E5 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T D3 03 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T DC 03 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 00 00 +T E5 03 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T F0 03 00 00 46 C5 D5 21 44 00 DD 4E 02 DD 46 +R 00 00 01 00 +T FB 03 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 06 04 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 0D 04 00 00 21 14 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 18 04 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 23 04 00 00 C1 ED 4A E5 D5 21 5D 10 C1 09 EB +R 00 00 01 00 +T 2E 04 00 00 21 2F D6 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 38 04 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 41 04 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 4C 04 00 00 3E 1B CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 54 04 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 5F 04 00 00 56 23 4E 23 46 EB 3E 05 CD +R 00 00 01 00 +T 68 04 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 6F 04 00 00 40 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 7A 04 00 00 23 72 23 71 23 70 21 40 00 DD 4E +R 00 00 01 00 +T 85 04 00 00 02 DD 46 03 09 E5 21 44 00 09 5E +R 00 00 01 00 +T 90 04 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 98 04 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T A1 04 00 00 46 03 09 E5 21 48 00 09 5E 23 56 +R 00 00 01 00 +T AC 04 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T B5 04 00 00 E5 21 44 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T C0 04 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T C9 04 00 00 00 00 00 00 C5 E5 21 48 00 DD 4E +R 00 00 01 00 02 04 00 00 +T D2 04 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T DD 04 00 00 46 C5 D5 21 40 00 DD 4E 02 DD 46 +R 00 00 01 00 +T E8 04 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T F3 04 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T FA 04 00 00 21 28 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 05 05 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 10 05 00 00 C1 ED 4A E5 D5 21 53 14 C1 09 EB +R 00 00 01 00 +T 1B 05 00 00 21 44 02 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 25 05 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 2E 05 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 39 05 00 00 3E 17 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 41 05 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 4C 05 00 00 56 23 4E 23 46 EB 3E 09 CD +R 00 00 01 00 +T 55 05 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 5C 05 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 67 05 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T 72 05 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T 7D 05 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 85 05 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 8E 05 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T 99 05 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T A2 05 00 00 E5 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T AD 05 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T B6 05 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 00 00 +T BF 05 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T CA 05 00 00 46 C5 D5 21 4C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T D5 05 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T E0 05 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T E7 05 00 00 21 3C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T F2 05 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T FD 05 00 00 C1 ED 4A E5 D5 21 81 E6 C1 09 EB +R 00 00 01 00 +T 08 06 00 00 21 A1 D8 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 12 06 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 1B 06 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 26 06 00 00 3E 12 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 2E 06 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 39 06 00 00 56 23 4E 23 46 EB 3E 0E CD +R 00 00 01 00 +T 42 06 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 49 06 00 00 48 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 54 06 00 00 23 72 23 71 23 70 21 48 00 DD 4E +R 00 00 01 00 +T 5F 06 00 00 02 DD 46 03 09 E5 21 4C 00 09 5E +R 00 00 01 00 +T 6A 06 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 72 06 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 7B 06 00 00 46 03 09 E5 21 40 00 09 5E 23 56 +R 00 00 01 00 +T 86 06 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T 8F 06 00 00 E5 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 9A 06 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T A3 06 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 00 00 +T AC 06 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T B7 06 00 00 46 C5 D5 21 48 00 DD 4E 02 DD 46 +R 00 00 01 00 +T C2 06 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T CD 06 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T D4 06 00 00 21 10 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T DF 06 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T EA 06 00 00 C1 ED 4A E5 D5 21 C8 FB C1 09 EB +R 00 00 01 00 +T F5 06 00 00 21 D3 E7 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T FF 06 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 08 07 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 13 07 00 00 3E 0C CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 1B 07 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 26 07 00 00 56 23 4E 23 46 EB 3E 14 CD +R 00 00 01 00 +T 2F 07 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 36 07 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 41 07 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T 4C 07 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T 57 07 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 5F 07 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 68 07 00 00 46 03 09 E5 21 4C 00 09 5E 23 56 +R 00 00 01 00 +T 73 07 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T 7C 07 00 00 E5 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 87 07 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 90 07 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 99 07 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T A4 07 00 00 46 C5 D5 21 44 00 DD 4E 02 DD 46 +R 00 00 01 00 +T AF 07 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T BA 07 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T C1 07 00 00 21 24 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T CC 07 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T D7 07 00 00 C1 ED 4A E5 D5 21 E6 CD C1 09 EB +R 00 00 01 00 +T E2 07 00 00 21 E1 21 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T EC 07 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T F5 07 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 00 08 00 00 3E 1B CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 08 08 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 13 08 00 00 56 23 4E 23 46 EB 3E 05 CD +R 00 00 01 00 +T 1C 08 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 23 08 00 00 40 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 2E 08 00 00 23 72 23 71 23 70 21 40 00 DD 4E +R 00 00 01 00 +T 39 08 00 00 02 DD 46 03 09 E5 21 44 00 09 5E +R 00 00 01 00 +T 44 08 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 4C 08 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 55 08 00 00 46 03 09 E5 21 48 00 09 5E 23 56 +R 00 00 01 00 +T 60 08 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T 69 08 00 00 E5 21 44 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 74 08 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 7D 08 00 00 00 00 00 00 C5 E5 21 48 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 86 08 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 91 08 00 00 46 C5 D5 21 40 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 9C 08 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T A7 08 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T AE 08 00 00 21 38 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T B9 08 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T C4 08 00 00 C1 ED 4A E5 D5 21 D6 07 C1 09 EB +R 00 00 01 00 +T CF 08 00 00 21 37 C3 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T D9 08 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T E2 08 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T ED 08 00 00 3E 17 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T F5 08 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 00 09 00 00 56 23 4E 23 46 EB 3E 09 CD +R 00 00 01 00 +T 09 09 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 10 09 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 1B 09 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T 26 09 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T 31 09 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 39 09 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 42 09 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T 4D 09 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T 56 09 00 00 E5 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 61 09 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 6A 09 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 73 09 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 7E 09 00 00 46 C5 D5 21 4C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 89 09 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 94 09 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 9B 09 00 00 21 0C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T A6 09 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T B1 09 00 00 C1 ED 4A E5 D5 21 87 0D C1 09 EB +R 00 00 01 00 +T BC 09 00 00 21 D5 F4 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T C6 09 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T CF 09 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T DA 09 00 00 3E 12 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T E2 09 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T ED 09 00 00 56 23 4E 23 46 EB 3E 0E CD +R 00 00 01 00 +T F6 09 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T FD 09 00 00 48 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 08 0A 00 00 23 72 23 71 23 70 21 48 00 DD 4E +R 00 00 01 00 +T 13 0A 00 00 02 DD 46 03 09 E5 21 4C 00 09 5E +R 00 00 01 00 +T 1E 0A 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 26 0A 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 2F 0A 00 00 46 03 09 E5 21 40 00 09 5E 23 56 +R 00 00 01 00 +T 3A 0A 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T 43 0A 00 00 E5 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 4E 0A 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 57 0A 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 60 0A 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 6B 0A 00 00 46 C5 D5 21 48 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 76 0A 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 81 0A 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 88 0A 00 00 21 20 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 93 0A 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 9E 0A 00 00 C1 ED 4A E5 D5 21 ED 14 C1 09 EB +R 00 00 01 00 +T A9 0A 00 00 21 5A 45 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T B3 0A 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T BC 0A 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T C7 0A 00 00 3E 0C CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T CF 0A 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T DA 0A 00 00 56 23 4E 23 46 EB 3E 14 CD +R 00 00 01 00 +T E3 0A 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T EA 0A 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T F5 0A 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T 00 0B 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T 0B 0B 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 13 0B 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 1C 0B 00 00 46 03 09 E5 21 4C 00 09 5E 23 56 +R 00 00 01 00 +T 27 0B 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T 30 0B 00 00 E5 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 3B 0B 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 44 0B 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 4D 0B 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 58 0B 00 00 46 C5 D5 21 44 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 63 0B 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 6E 0B 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 75 0B 00 00 21 34 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 80 0B 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 8B 0B 00 00 C1 ED 4A E5 D5 21 05 E9 C1 09 EB +R 00 00 01 00 +T 96 0B 00 00 21 E3 A9 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T A0 0B 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T A9 0B 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T B4 0B 00 00 3E 1B CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T BC 0B 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T C7 0B 00 00 56 23 4E 23 46 EB 3E 05 CD +R 00 00 01 00 +T D0 0B 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T D7 0B 00 00 40 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T E2 0B 00 00 23 72 23 71 23 70 21 40 00 DD 4E +R 00 00 01 00 +T ED 0B 00 00 02 DD 46 03 09 E5 21 44 00 09 5E +R 00 00 01 00 +T F8 0B 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 00 0C 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 09 0C 00 00 46 03 09 E5 21 48 00 09 5E 23 56 +R 00 00 01 00 +T 14 0C 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T 1D 0C 00 00 E5 21 44 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 28 0C 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 31 0C 00 00 00 00 00 00 C5 E5 21 48 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 3A 0C 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 45 0C 00 00 46 C5 D5 21 40 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 50 0C 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 5B 0C 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 62 0C 00 00 21 08 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 6D 0C 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 78 0C 00 00 C1 ED 4A E5 D5 21 F8 A3 C1 09 EB +R 00 00 01 00 +T 83 0C 00 00 21 EF FC C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 8D 0C 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 96 0C 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T A1 0C 00 00 3E 17 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T A9 0C 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T B4 0C 00 00 56 23 4E 23 46 EB 3E 09 CD +R 00 00 01 00 +T BD 0C 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T C4 0C 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T CF 0C 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T DA 0C 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T E5 0C 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T ED 0C 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T F6 0C 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T 01 0D 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T 0A 0D 00 00 E5 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 15 0D 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 1E 0D 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 27 0D 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 32 0D 00 00 46 C5 D5 21 4C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 3D 0D 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 48 0D 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 4F 0D 00 00 21 1C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 5A 0D 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 65 0D 00 00 C1 ED 4A E5 D5 21 D9 02 C1 09 EB +R 00 00 01 00 +T 70 0D 00 00 21 6F 67 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 7A 0D 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 83 0D 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 8E 0D 00 00 3E 12 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 96 0D 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T A1 0D 00 00 56 23 4E 23 46 EB 3E 0E CD +R 00 00 01 00 +T AA 0D 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T B1 0D 00 00 48 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T BC 0D 00 00 23 72 23 71 23 70 21 48 00 DD 4E +R 00 00 01 00 +T C7 0D 00 00 02 DD 46 03 09 E5 21 4C 00 09 5E +R 00 00 01 00 +T D2 0D 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T DA 0D 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T E3 0D 00 00 46 03 09 E5 21 40 00 09 5E 23 56 +R 00 00 01 00 +T EE 0D 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 07 00 +T F7 0D 00 00 E5 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 02 0E 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 0B 0E 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 00 00 +T 14 0E 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 1F 0E 00 00 46 C5 D5 21 48 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 2A 0E 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 35 0E 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 3C 0E 00 00 21 30 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 47 0E 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 52 0E 00 00 C1 ED 4A E5 D5 21 8A 4C C1 09 EB +R 00 00 01 00 +T 5D 0E 00 00 21 2A 8D C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 67 0E 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 03 00 +T 70 0E 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 7B 0E 00 00 3E 0C CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 83 0E 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 8E 0E 00 00 56 23 4E 23 46 EB 3E 14 CD +R 00 00 01 00 +T 97 0E 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 9E 0E 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T A9 0E 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T B4 0E 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T BF 0E 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T C7 0E 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 03 00 02 09 01 00 diff --git a/src/nos/lib/net_lib/MD5Transform_Round3.rel b/src/nos/lib/net_lib/MD5Transform_Round3.rel new file mode 100644 index 00000000..696c05ee --- /dev/null +++ b/src/nos/lib/net_lib/MD5Transform_Round3.rel @@ -0,0 +1,688 @@ +XL4 +H 2 areas A global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_OR_L03 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?L_XOR_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?UL_RSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D2C flags 0 +S _MD5Transform_Round3 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 40 00 19 E5 21 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4C 00 19 4E 23 46 23 5E 23 56 D5 +R 00 00 01 00 +T 14 00 00 00 C5 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 1F 00 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 29 00 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 34 00 00 00 56 23 4E 23 46 EB CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 3D 00 00 00 CD 00 00 00 00 C5 E5 21 14 00 DD +R 00 00 01 00 02 05 06 00 +T 46 00 00 00 4E 02 DD 46 03 09 4E 23 46 23 5E +R 00 00 01 00 +T 51 00 00 00 23 56 69 60 C1 09 EB C1 ED 4A E5 +R 00 00 01 00 +T 5C 00 00 00 D5 21 42 39 C1 09 EB 21 FA FF C1 +R 00 00 01 00 +T 67 00 00 00 ED 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 02 00 +T 70 00 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 7B 00 00 00 56 23 4E 23 46 EB 3E 1C CD +R 00 00 01 00 +T 84 00 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 08 00 +T 8D 00 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 98 00 00 00 46 EB 3E 04 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T A0 00 00 00 00 00 00 00 E5 21 40 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T A9 00 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T B4 00 00 00 70 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T BF 00 00 00 E5 21 44 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T CA 00 00 00 46 E1 CD 00 00 00 00 21 4C 00 DD +R 00 00 01 00 02 07 02 00 +T D3 00 00 00 4E 02 DD 46 03 09 E5 21 48 00 09 +R 00 00 01 00 +T DE 00 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T E8 00 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T F3 00 00 00 56 23 4E 23 46 C5 D5 21 40 00 DD +R 00 00 01 00 +T FE 00 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 09 01 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T 10 01 00 00 00 00 00 00 C5 E5 21 20 00 DD 4E +R 00 00 01 00 02 04 06 00 +T 19 01 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 24 01 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T 2F 01 00 00 21 81 F6 C1 09 EB 21 71 87 C1 ED +R 00 00 01 00 +T 3A 01 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T 42 01 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 4D 01 00 00 56 23 4E 23 46 EB 3E 15 CD +R 00 00 01 00 +T 56 01 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 08 00 +T 5F 01 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 6A 01 00 00 46 EB 3E 0B CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T 72 01 00 00 00 00 00 00 E5 21 4C 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 7B 01 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 86 01 00 00 70 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 91 01 00 00 E5 21 40 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 9C 01 00 00 46 E1 CD 00 00 00 00 21 48 00 DD +R 00 00 01 00 02 07 02 00 +T A5 01 00 00 4E 02 DD 46 03 09 E5 21 44 00 09 +R 00 00 01 00 +T B0 01 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T BA 01 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T C5 01 00 00 56 23 4E 23 46 C5 D5 21 4C 00 DD +R 00 00 01 00 +T D0 01 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T DB 01 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T E2 01 00 00 00 00 00 00 C5 E5 21 2C 00 DD 4E +R 00 00 01 00 02 04 06 00 +T EB 01 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T F6 01 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T 01 02 00 00 21 22 61 C1 09 EB 21 9D 6D C1 ED +R 00 00 01 00 +T 0C 02 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T 14 02 00 00 48 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 1F 02 00 00 46 23 5E 23 56 69 60 6B 62 11 +R 00 00 01 00 +T 29 02 00 00 00 00 D5 E5 21 48 00 DD 4E 02 DD +R 00 00 01 00 +T 34 02 00 00 46 03 09 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T 3F 02 00 00 60 5D 54 21 00 00 4B 42 CD +R 00 00 01 00 +T 48 02 00 00 00 00 00 00 E5 21 48 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 51 02 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 5C 02 00 00 70 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 67 02 00 00 E5 21 4C 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 72 02 00 00 46 E1 CD 00 00 00 00 21 44 00 DD +R 00 00 01 00 02 07 02 00 +T 7B 02 00 00 4E 02 DD 46 03 09 E5 21 40 00 09 +R 00 00 01 00 +T 86 02 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 90 02 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 9B 02 00 00 56 23 4E 23 46 C5 D5 21 48 00 DD +R 00 00 01 00 +T A6 02 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T B1 02 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T B8 02 00 00 00 00 00 00 C5 E5 21 38 00 DD 4E +R 00 00 01 00 02 04 06 00 +T C1 02 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T CC 02 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T D7 02 00 00 21 0C 38 C1 09 EB 21 E5 FD C1 ED +R 00 00 01 00 +T E2 02 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T EA 02 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T F5 02 00 00 56 23 4E 23 46 EB 3E 09 CD +R 00 00 01 00 +T FE 02 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 08 00 +T 07 03 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 12 03 00 00 46 EB 3E 17 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T 1A 03 00 00 00 00 00 00 E5 21 44 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 23 03 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 2E 03 00 00 70 21 44 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 39 03 00 00 E5 21 48 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 44 03 00 00 46 E1 CD 00 00 00 00 21 40 00 DD +R 00 00 01 00 02 07 02 00 +T 4D 03 00 00 4E 02 DD 46 03 09 E5 21 4C 00 09 +R 00 00 01 00 +T 58 03 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 62 03 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 6D 03 00 00 56 23 4E 23 46 C5 D5 21 44 00 DD +R 00 00 01 00 +T 78 03 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 83 03 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T 8A 03 00 00 00 00 00 00 C5 E5 21 04 00 DD 4E +R 00 00 01 00 02 04 06 00 +T 93 03 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 9E 03 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T A9 03 00 00 21 44 EA C1 09 EB 21 BE A4 C1 ED +R 00 00 01 00 +T B4 03 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T BC 03 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T C7 03 00 00 56 23 4E 23 46 EB 3E 1C CD +R 00 00 01 00 +T D0 03 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 08 00 +T D9 03 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T E4 03 00 00 46 EB 3E 04 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T EC 03 00 00 00 00 00 00 E5 21 40 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T F5 03 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 00 04 00 00 70 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 0B 04 00 00 E5 21 44 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 16 04 00 00 46 E1 CD 00 00 00 00 21 4C 00 DD +R 00 00 01 00 02 07 02 00 +T 1F 04 00 00 4E 02 DD 46 03 09 E5 21 48 00 09 +R 00 00 01 00 +T 2A 04 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 34 04 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 3F 04 00 00 56 23 4E 23 46 C5 D5 21 40 00 DD +R 00 00 01 00 +T 4A 04 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 55 04 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T 5C 04 00 00 00 00 00 00 C5 E5 21 10 00 DD 4E +R 00 00 01 00 02 04 06 00 +T 65 04 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 70 04 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T 7B 04 00 00 21 A9 CF C1 09 EB 21 DE 4B C1 ED +R 00 00 01 00 +T 86 04 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T 8E 04 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 99 04 00 00 56 23 4E 23 46 EB 3E 15 CD +R 00 00 01 00 +T A2 04 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 08 00 +T AB 04 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T B6 04 00 00 46 EB 3E 0B CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T BE 04 00 00 00 00 00 00 E5 21 4C 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T C7 04 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T D2 04 00 00 70 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T DD 04 00 00 E5 21 40 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T E8 04 00 00 46 E1 CD 00 00 00 00 21 48 00 DD +R 00 00 01 00 02 07 02 00 +T F1 04 00 00 4E 02 DD 46 03 09 E5 21 44 00 09 +R 00 00 01 00 +T FC 04 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 06 05 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 11 05 00 00 56 23 4E 23 46 C5 D5 21 4C 00 DD +R 00 00 01 00 +T 1C 05 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 27 05 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T 2E 05 00 00 00 00 00 00 C5 E5 21 1C 00 DD 4E +R 00 00 01 00 02 04 06 00 +T 37 05 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 42 05 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T 4D 05 00 00 21 60 4B C1 09 EB 21 BB F6 C1 ED +R 00 00 01 00 +T 58 05 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T 60 05 00 00 48 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 6B 05 00 00 46 23 5E 23 56 69 60 6B 62 11 +R 00 00 01 00 +T 75 05 00 00 00 00 D5 E5 21 48 00 DD 4E 02 DD +R 00 00 01 00 +T 80 05 00 00 46 03 09 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T 8B 05 00 00 60 5D 54 21 00 00 4B 42 CD +R 00 00 01 00 +T 94 05 00 00 00 00 00 00 E5 21 48 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 9D 05 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T A8 05 00 00 70 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T B3 05 00 00 E5 21 4C 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T BE 05 00 00 46 E1 CD 00 00 00 00 21 44 00 DD +R 00 00 01 00 02 07 02 00 +T C7 05 00 00 4E 02 DD 46 03 09 E5 21 40 00 09 +R 00 00 01 00 +T D2 05 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T DC 05 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T E7 05 00 00 56 23 4E 23 46 C5 D5 21 48 00 DD +R 00 00 01 00 +T F2 05 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T FD 05 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T 04 06 00 00 00 00 00 00 C5 E5 21 28 00 DD 4E +R 00 00 01 00 02 04 06 00 +T 0D 06 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 18 06 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T 23 06 00 00 21 70 BC C1 09 EB 21 BF BE C1 ED +R 00 00 01 00 +T 2E 06 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T 36 06 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 41 06 00 00 56 23 4E 23 46 EB 3E 09 CD +R 00 00 01 00 +T 4A 06 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 08 00 +T 53 06 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 5E 06 00 00 46 EB 3E 17 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T 66 06 00 00 00 00 00 00 E5 21 44 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 6F 06 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 7A 06 00 00 70 21 44 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 85 06 00 00 E5 21 48 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 90 06 00 00 46 E1 CD 00 00 00 00 21 40 00 DD +R 00 00 01 00 02 07 02 00 +T 99 06 00 00 4E 02 DD 46 03 09 E5 21 4C 00 09 +R 00 00 01 00 +T A4 06 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T AE 06 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T B9 06 00 00 56 23 4E 23 46 C5 D5 21 44 00 DD +R 00 00 01 00 +T C4 06 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T CF 06 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T D6 06 00 00 00 00 00 00 C5 E5 21 34 00 DD 4E +R 00 00 01 00 02 04 06 00 +T DF 06 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T EA 06 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T F5 06 00 00 21 C6 7E C1 09 EB 21 9B 28 C1 ED +R 00 00 01 00 +T 00 07 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T 08 07 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 13 07 00 00 56 23 4E 23 46 EB 3E 1C CD +R 00 00 01 00 +T 1C 07 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 08 00 +T 25 07 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 30 07 00 00 46 EB 3E 04 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T 38 07 00 00 00 00 00 00 E5 21 40 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 41 07 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 4C 07 00 00 70 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 57 07 00 00 E5 21 44 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 62 07 00 00 46 E1 CD 00 00 00 00 21 4C 00 DD +R 00 00 01 00 02 07 02 00 +T 6B 07 00 00 4E 02 DD 46 03 09 E5 21 48 00 09 +R 00 00 01 00 +T 76 07 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 80 07 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 8B 07 00 00 56 23 4E 23 46 C5 D5 21 40 00 DD +R 00 00 01 00 +T 96 07 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T A1 07 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T A8 07 00 00 00 00 00 00 C5 E5 DD 6E 02 DD 66 +R 00 00 01 00 02 04 06 00 +T B1 07 00 00 03 4E 23 46 23 5E 23 56 69 60 C1 +R 00 00 01 00 +T BC 07 00 00 09 EB C1 ED 4A E5 D5 21 FA 27 C1 +R 00 00 01 00 +T C7 07 00 00 09 EB 21 A1 EA C1 ED 4A 4D 44 E1 +R 00 00 01 00 +T D2 07 00 00 CD 00 00 00 00 21 4C 00 DD 4E 02 +R 00 00 01 00 02 05 02 00 +T DB 07 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T E6 07 00 00 EB 3E 15 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 08 08 00 +T EF 07 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T FA 07 00 00 56 23 4E 23 46 EB 3E 0B CD +R 00 00 01 00 +T 03 08 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 0A 08 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 15 08 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T 20 08 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T 2B 08 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 33 08 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 3C 08 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T 47 08 00 00 23 4E 23 46 C5 D5 21 40 00 DD 4E +R 00 00 01 00 +T 52 08 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 5D 08 00 00 46 C5 D5 21 4C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 68 08 00 00 03 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 73 08 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 06 00 02 09 06 00 +T 7A 08 00 00 21 0C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 85 08 00 00 23 46 23 5E 23 56 69 60 C1 09 EB +R 00 00 01 00 +T 90 08 00 00 C1 ED 4A E5 D5 21 85 30 C1 09 EB +R 00 00 01 00 +T 9B 08 00 00 21 EF D4 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T A5 08 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T AE 08 00 00 46 03 09 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T B9 08 00 00 60 6B 62 11 00 00 D5 E5 21 48 00 +R 00 00 01 00 +T C4 08 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T CF 08 00 00 5E 23 56 69 60 5D 54 21 00 00 4B +R 00 00 01 00 +T DA 08 00 00 42 CD 00 00 00 00 E5 21 48 00 DD +R 00 00 01 00 02 06 01 00 +T E3 08 00 00 5E 02 DD 56 03 19 D1 73 23 72 23 +R 00 00 01 00 +T EE 08 00 00 71 23 70 21 48 00 DD 4E 02 DD 46 +R 00 00 01 00 +T F9 08 00 00 03 09 E5 21 4C 00 09 5E 23 56 23 +R 00 00 01 00 +T 04 09 00 00 4E 23 46 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T 0C 09 00 00 44 00 DD 4E 02 DD 46 03 09 E5 21 +R 00 00 01 00 +T 17 09 00 00 40 00 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 22 09 00 00 D5 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 2D 09 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 37 09 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 42 09 00 00 56 23 4E 23 46 EB CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 4B 09 00 00 CD 00 00 00 00 C5 E5 21 18 00 DD +R 00 00 01 00 02 05 06 00 +T 54 09 00 00 4E 02 DD 46 03 09 4E 23 46 23 5E +R 00 00 01 00 +T 5F 09 00 00 23 56 69 60 C1 09 EB C1 ED 4A E5 +R 00 00 01 00 +T 6A 09 00 00 D5 21 05 1D C1 09 EB 21 88 04 C1 +R 00 00 01 00 +T 75 09 00 00 ED 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 02 00 +T 7E 09 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 89 09 00 00 56 23 4E 23 46 EB 3E 09 CD +R 00 00 01 00 +T 92 09 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 08 00 +T 9B 09 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T A6 09 00 00 46 EB 3E 17 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T AE 09 00 00 00 00 00 00 E5 21 44 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T B7 09 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T C2 09 00 00 70 21 44 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T CD 09 00 00 E5 21 48 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T D8 09 00 00 46 E1 CD 00 00 00 00 21 40 00 DD +R 00 00 01 00 02 07 02 00 +T E1 09 00 00 4E 02 DD 46 03 09 E5 21 4C 00 09 +R 00 00 01 00 +T EC 09 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T F6 09 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 01 0A 00 00 56 23 4E 23 46 C5 D5 21 44 00 DD +R 00 00 01 00 +T 0C 0A 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 17 0A 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T 1E 0A 00 00 00 00 00 00 C5 E5 21 24 00 DD 4E +R 00 00 01 00 02 04 06 00 +T 27 0A 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 32 0A 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T 3D 0A 00 00 21 39 D0 C1 09 EB 21 D4 D9 C1 ED +R 00 00 01 00 +T 48 0A 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T 50 0A 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 5B 0A 00 00 56 23 4E 23 46 EB 3E 1C CD +R 00 00 01 00 +T 64 0A 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 08 00 +T 6D 0A 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 78 0A 00 00 46 EB 3E 04 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T 80 0A 00 00 00 00 00 00 E5 21 40 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 89 0A 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 94 0A 00 00 70 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 9F 0A 00 00 E5 21 44 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T AA 0A 00 00 46 E1 CD 00 00 00 00 21 4C 00 DD +R 00 00 01 00 02 07 02 00 +T B3 0A 00 00 4E 02 DD 46 03 09 E5 21 48 00 09 +R 00 00 01 00 +T BE 0A 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T C8 0A 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T D3 0A 00 00 56 23 4E 23 46 C5 D5 21 40 00 DD +R 00 00 01 00 +T DE 0A 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T E9 0A 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T F0 0A 00 00 00 00 00 00 C5 E5 21 30 00 DD 4E +R 00 00 01 00 02 04 06 00 +T F9 0A 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 04 0B 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T 0F 0B 00 00 21 E5 99 C1 09 EB 21 DB E6 C1 ED +R 00 00 01 00 +T 1A 0B 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T 22 0B 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 2D 0B 00 00 56 23 4E 23 46 EB 3E 15 CD +R 00 00 01 00 +T 36 0B 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 08 00 +T 3F 0B 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 4A 0B 00 00 46 EB 3E 0B CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T 52 0B 00 00 00 00 00 00 E5 21 4C 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 5B 0B 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 66 0B 00 00 70 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 71 0B 00 00 E5 21 40 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 7C 0B 00 00 46 E1 CD 00 00 00 00 21 48 00 DD +R 00 00 01 00 02 07 02 00 +T 85 0B 00 00 4E 02 DD 46 03 09 E5 21 44 00 09 +R 00 00 01 00 +T 90 0B 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 9A 0B 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T A5 0B 00 00 56 23 4E 23 46 C5 D5 21 4C 00 DD +R 00 00 01 00 +T B0 0B 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T BB 0B 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T C2 0B 00 00 00 00 00 00 C5 E5 21 3C 00 DD 4E +R 00 00 01 00 02 04 06 00 +T CB 0B 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T D6 0B 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T E1 0B 00 00 21 F8 7C C1 09 EB 21 A2 1F C1 ED +R 00 00 01 00 +T EC 0B 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T F4 0B 00 00 48 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T FF 0B 00 00 46 23 5E 23 56 69 60 6B 62 11 +R 00 00 01 00 +T 09 0C 00 00 00 00 D5 E5 21 48 00 DD 4E 02 DD +R 00 00 01 00 +T 14 0C 00 00 46 03 09 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T 1F 0C 00 00 60 5D 54 21 00 00 4B 42 CD +R 00 00 01 00 +T 28 0C 00 00 00 00 00 00 E5 21 48 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 31 0C 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 3C 0C 00 00 70 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 47 0C 00 00 E5 21 4C 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 52 0C 00 00 46 E1 CD 00 00 00 00 21 44 00 DD +R 00 00 01 00 02 07 02 00 +T 5B 0C 00 00 4E 02 DD 46 03 09 E5 21 40 00 09 +R 00 00 01 00 +T 66 0C 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 70 0C 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 7B 0C 00 00 56 23 4E 23 46 C5 D5 21 48 00 DD +R 00 00 01 00 +T 86 0C 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 91 0C 00 00 23 46 EB CD 00 00 00 00 CD +R 00 00 01 00 02 08 06 00 +T 98 0C 00 00 00 00 00 00 C5 E5 21 08 00 DD 4E +R 00 00 01 00 02 04 06 00 +T A1 0C 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T AC 0C 00 00 56 69 60 C1 09 EB C1 ED 4A E5 D5 +R 00 00 01 00 +T B7 0C 00 00 21 65 56 C1 09 EB 21 AC C4 C1 ED +R 00 00 01 00 +T C2 0C 00 00 4A 4D 44 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 09 02 00 +T CA 0C 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T D5 0C 00 00 56 23 4E 23 46 EB 3E 09 CD +R 00 00 01 00 +T DE 0C 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 08 00 +T E7 0C 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T F2 0C 00 00 46 EB 3E 17 CD 00 00 00 00 CD +R 00 00 01 00 02 09 04 00 +T FA 0C 00 00 00 00 00 00 E5 21 44 00 DD 5E 02 +R 00 00 01 00 02 04 01 00 +T 03 0D 00 00 DD 56 03 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 0E 0D 00 00 70 21 44 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 19 0D 00 00 E5 21 48 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 24 0D 00 00 46 E1 CD 00 00 00 00 C3 +R 00 00 01 00 02 07 02 00 +T 2A 0D 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/net_lib/MD5Transform_Round4.rel b/src/nos/lib/net_lib/MD5Transform_Round4.rel new file mode 100644 index 00000000..8ec2db8e --- /dev/null +++ b/src/nos/lib/net_lib/MD5Transform_Round4.rel @@ -0,0 +1,721 @@ +XL4 +H 2 areas B global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_OR_L03 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?L_NOT_L03 Ref00000000 +S ?L_XOR_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?UL_RSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D6C flags 0 +S _MD5Transform_Round4 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 40 00 19 E5 21 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4C 00 19 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 14 00 00 00 CD 00 00 00 00 C5 E5 21 44 00 DD +R 00 00 01 00 02 05 06 00 +T 1D 00 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 28 00 00 00 23 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 08 01 00 +T 31 00 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 3C 00 00 00 56 23 4E 23 46 EB CD 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 45 00 00 00 C5 E5 DD 6E 02 DD 66 03 4E 23 46 +R 00 00 01 00 +T 50 00 00 00 23 5E 23 56 69 60 C1 09 EB C1 ED +R 00 00 01 00 +T 5B 00 00 00 4A E5 D5 21 44 22 C1 09 EB 21 +R 00 00 01 00 +T 65 00 00 00 29 F4 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 6E 00 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 77 00 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 82 00 00 00 3E 1A CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 8A 00 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 95 00 00 00 56 23 4E 23 46 EB 3E 06 CD +R 00 00 01 00 +T 9E 00 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T A5 00 00 00 40 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T B0 00 00 00 23 72 23 71 23 70 21 40 00 DD 4E +R 00 00 01 00 +T BB 00 00 00 02 DD 46 03 09 E5 21 44 00 09 5E +R 00 00 01 00 +T C6 00 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T CE 00 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T D7 00 00 00 46 03 09 E5 21 48 00 09 5E 23 56 +R 00 00 01 00 +T E2 00 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T EB 00 00 00 E5 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T F6 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T FF 00 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 01 00 +T 08 01 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 13 01 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T 1B 01 00 00 1C 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 26 01 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T 31 01 00 00 ED 4A E5 D5 21 97 FF C1 09 EB 21 +R 00 00 01 00 +T 3C 01 00 00 2A 43 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 45 01 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 4E 01 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 59 01 00 00 3E 16 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 61 01 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 6C 01 00 00 56 23 4E 23 46 EB 3E 0A CD +R 00 00 01 00 +T 75 01 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 7C 01 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 87 01 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T 92 01 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T 9D 01 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T A5 01 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T AE 01 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T B9 01 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T C2 01 00 00 E5 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T CD 01 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T D6 01 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 01 00 +T DF 01 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T EA 01 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T F2 01 00 00 38 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T FD 01 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T 08 02 00 00 ED 4A E5 D5 21 A7 23 C1 09 EB 21 +R 00 00 01 00 +T 13 02 00 00 94 AB C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 1C 02 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 25 02 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 30 02 00 00 3E 11 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 38 02 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 43 02 00 00 56 23 4E 23 46 EB 3E 0F CD +R 00 00 01 00 +T 4C 02 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 53 02 00 00 48 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 5E 02 00 00 23 72 23 71 23 70 21 48 00 DD 4E +R 00 00 01 00 +T 69 02 00 00 02 DD 46 03 09 E5 21 4C 00 09 5E +R 00 00 01 00 +T 74 02 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 7C 02 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 85 02 00 00 46 03 09 E5 21 40 00 09 5E 23 56 +R 00 00 01 00 +T 90 02 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T 99 02 00 00 E5 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T A4 02 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T AD 02 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 01 00 +T B6 02 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T C1 02 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T C9 02 00 00 14 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T D4 02 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T DF 02 00 00 ED 4A E5 D5 21 39 A0 C1 09 EB 21 +R 00 00 01 00 +T EA 02 00 00 93 FC C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T F3 02 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T FC 02 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 07 03 00 00 3E 0B CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 0F 03 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 1A 03 00 00 56 23 4E 23 46 EB 3E 15 CD +R 00 00 01 00 +T 23 03 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 2A 03 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 35 03 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T 40 03 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T 4B 03 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 53 03 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 5C 03 00 00 46 03 09 E5 21 4C 00 09 5E 23 56 +R 00 00 01 00 +T 67 03 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T 70 03 00 00 E5 21 44 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 7B 03 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 84 03 00 00 00 00 00 00 C5 E5 21 48 00 DD 4E +R 00 00 01 00 02 04 01 00 +T 8D 03 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 98 03 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T A0 03 00 00 30 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T AB 03 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T B6 03 00 00 ED 4A E5 D5 21 C3 59 C1 09 EB 21 +R 00 00 01 00 +T C1 03 00 00 5B 65 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T CA 03 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T D3 03 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T DE 03 00 00 3E 1A CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T E6 03 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T F1 03 00 00 56 23 4E 23 46 EB 3E 06 CD +R 00 00 01 00 +T FA 03 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 01 04 00 00 40 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 0C 04 00 00 23 72 23 71 23 70 21 40 00 DD 4E +R 00 00 01 00 +T 17 04 00 00 02 DD 46 03 09 E5 21 44 00 09 5E +R 00 00 01 00 +T 22 04 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 2A 04 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 33 04 00 00 46 03 09 E5 21 48 00 09 5E 23 56 +R 00 00 01 00 +T 3E 04 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T 47 04 00 00 E5 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 52 04 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 5B 04 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 01 00 +T 64 04 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 6F 04 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T 77 04 00 00 0C 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 82 04 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T 8D 04 00 00 ED 4A E5 D5 21 92 CC C1 09 EB 21 +R 00 00 01 00 +T 98 04 00 00 0C 8F C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T A1 04 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T AA 04 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T B5 04 00 00 3E 16 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T BD 04 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T C8 04 00 00 56 23 4E 23 46 EB 3E 0A CD +R 00 00 01 00 +T D1 04 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T D8 04 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T E3 04 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T EE 04 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T F9 04 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 01 05 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 0A 05 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T 15 05 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T 1E 05 00 00 E5 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 29 05 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 32 05 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 01 00 +T 3B 05 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 46 05 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T 4E 05 00 00 28 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 59 05 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T 64 05 00 00 ED 4A E5 D5 21 7D F4 C1 09 EB 21 +R 00 00 01 00 +T 6F 05 00 00 EF FF C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 78 05 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 81 05 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 8C 05 00 00 3E 11 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 94 05 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 9F 05 00 00 56 23 4E 23 46 EB 3E 0F CD +R 00 00 01 00 +T A8 05 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T AF 05 00 00 48 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T BA 05 00 00 23 72 23 71 23 70 21 48 00 DD 4E +R 00 00 01 00 +T C5 05 00 00 02 DD 46 03 09 E5 21 4C 00 09 5E +R 00 00 01 00 +T D0 05 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T D8 05 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T E1 05 00 00 46 03 09 E5 21 40 00 09 5E 23 56 +R 00 00 01 00 +T EC 05 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T F5 05 00 00 E5 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 00 06 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 09 06 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 01 00 +T 12 06 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 1D 06 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T 25 06 00 00 04 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 30 06 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T 3B 06 00 00 ED 4A E5 D5 21 D1 5D C1 09 EB 21 +R 00 00 01 00 +T 46 06 00 00 84 85 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 4F 06 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 58 06 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 63 06 00 00 3E 0B CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 6B 06 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 76 06 00 00 56 23 4E 23 46 EB 3E 15 CD +R 00 00 01 00 +T 7F 06 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 86 06 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 91 06 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T 9C 06 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T A7 06 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T AF 06 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T B8 06 00 00 46 03 09 E5 21 4C 00 09 5E 23 56 +R 00 00 01 00 +T C3 06 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T CC 06 00 00 E5 21 44 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T D7 06 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T E0 06 00 00 00 00 00 00 C5 E5 21 48 00 DD 4E +R 00 00 01 00 02 04 01 00 +T E9 06 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T F4 06 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T FC 06 00 00 20 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 07 07 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T 12 07 00 00 ED 4A E5 D5 21 4F 7E C1 09 EB 21 +R 00 00 01 00 +T 1D 07 00 00 A8 6F C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 26 07 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 2F 07 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 3A 07 00 00 3E 1A CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 42 07 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 4D 07 00 00 56 23 4E 23 46 EB 3E 06 CD +R 00 00 01 00 +T 56 07 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 5D 07 00 00 40 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 68 07 00 00 23 72 23 71 23 70 21 40 00 DD 4E +R 00 00 01 00 +T 73 07 00 00 02 DD 46 03 09 E5 21 44 00 09 5E +R 00 00 01 00 +T 7E 07 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 86 07 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 8F 07 00 00 46 03 09 E5 21 48 00 09 5E 23 56 +R 00 00 01 00 +T 9A 07 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T A3 07 00 00 E5 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T AE 07 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T B7 07 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 01 00 +T C0 07 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T CB 07 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T D3 07 00 00 3C 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T DE 07 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T E9 07 00 00 ED 4A E5 D5 21 E0 E6 C1 09 EB 21 +R 00 00 01 00 +T F4 07 00 00 2C FE C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T FD 07 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 06 08 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 11 08 00 00 3E 16 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 19 08 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 24 08 00 00 56 23 4E 23 46 EB 3E 0A CD +R 00 00 01 00 +T 2D 08 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 34 08 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 3F 08 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T 4A 08 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T 55 08 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 5D 08 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 66 08 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T 71 08 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T 7A 08 00 00 E5 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 85 08 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 8E 08 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 01 00 +T 97 08 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T A2 08 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T AA 08 00 00 18 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T B5 08 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T C0 08 00 00 ED 4A E5 D5 21 14 43 C1 09 EB 21 +R 00 00 01 00 +T CB 08 00 00 01 A3 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T D4 08 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T DD 08 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T E8 08 00 00 3E 11 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T F0 08 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T FB 08 00 00 56 23 4E 23 46 EB 3E 0F CD +R 00 00 01 00 +T 04 09 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 0B 09 00 00 48 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 16 09 00 00 23 72 23 71 23 70 21 48 00 DD 4E +R 00 00 01 00 +T 21 09 00 00 02 DD 46 03 09 E5 21 4C 00 09 5E +R 00 00 01 00 +T 2C 09 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 34 09 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 3D 09 00 00 46 03 09 E5 21 40 00 09 5E 23 56 +R 00 00 01 00 +T 48 09 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T 51 09 00 00 E5 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 5C 09 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 65 09 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 01 00 +T 6E 09 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 79 09 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T 81 09 00 00 34 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 8C 09 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T 97 09 00 00 ED 4A E5 D5 21 A1 11 C1 09 EB 21 +R 00 00 01 00 +T A2 09 00 00 08 4E C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T AB 09 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T B4 09 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T BF 09 00 00 3E 0B CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T C7 09 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T D2 09 00 00 56 23 4E 23 46 EB 3E 15 CD +R 00 00 01 00 +T DB 09 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T E2 09 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T ED 09 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T F8 09 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T 03 0A 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 0B 0A 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 14 0A 00 00 46 03 09 E5 21 4C 00 09 5E 23 56 +R 00 00 01 00 +T 1F 0A 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T 28 0A 00 00 E5 21 44 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 33 0A 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 3C 0A 00 00 00 00 00 00 C5 E5 21 48 00 DD 4E +R 00 00 01 00 02 04 01 00 +T 45 0A 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 50 0A 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T 58 0A 00 00 10 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 63 0A 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T 6E 0A 00 00 ED 4A E5 D5 21 82 7E C1 09 EB 21 +R 00 00 01 00 +T 79 0A 00 00 53 F7 C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 82 0A 00 00 00 00 00 00 21 40 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 8B 0A 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 96 0A 00 00 3E 1A CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 9E 0A 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T A9 0A 00 00 56 23 4E 23 46 EB 3E 06 CD +R 00 00 01 00 +T B2 0A 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T B9 0A 00 00 40 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T C4 0A 00 00 23 72 23 71 23 70 21 40 00 DD 4E +R 00 00 01 00 +T CF 0A 00 00 02 DD 46 03 09 E5 21 44 00 09 5E +R 00 00 01 00 +T DA 0A 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T E2 0A 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T EB 0A 00 00 46 03 09 E5 21 48 00 09 5E 23 56 +R 00 00 01 00 +T F6 0A 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T FF 0A 00 00 E5 21 40 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 0A 0B 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 13 0B 00 00 00 00 00 00 C5 E5 21 44 00 DD 4E +R 00 00 01 00 02 04 01 00 +T 1C 0B 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 27 0B 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T 2F 0B 00 00 2C 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 3A 0B 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T 45 0B 00 00 ED 4A E5 D5 21 35 F2 C1 09 EB 21 +R 00 00 01 00 +T 50 0B 00 00 3A BD C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 59 0B 00 00 00 00 00 00 21 4C 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 62 0B 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 6D 0B 00 00 3E 16 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 75 0B 00 00 4C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 80 0B 00 00 56 23 4E 23 46 EB 3E 0A CD +R 00 00 01 00 +T 89 0B 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 90 0B 00 00 4C 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 9B 0B 00 00 23 72 23 71 23 70 21 4C 00 DD 4E +R 00 00 01 00 +T A6 0B 00 00 02 DD 46 03 09 E5 21 40 00 09 5E +R 00 00 01 00 +T B1 0B 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T B9 0B 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T C2 0B 00 00 46 03 09 E5 21 44 00 09 5E 23 56 +R 00 00 01 00 +T CD 0B 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T D6 0B 00 00 E5 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T E1 0B 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T EA 0B 00 00 00 00 00 00 C5 E5 21 40 00 DD 4E +R 00 00 01 00 02 04 01 00 +T F3 0B 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T FE 0B 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T 06 0C 00 00 08 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 11 0C 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T 1C 0C 00 00 ED 4A E5 D5 21 BB D2 C1 09 EB 21 +R 00 00 01 00 +T 27 0C 00 00 D7 2A C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 30 0C 00 00 00 00 00 00 21 48 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 39 0C 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 44 0C 00 00 3E 11 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 4C 0C 00 00 48 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 57 0C 00 00 56 23 4E 23 46 EB 3E 0F CD +R 00 00 01 00 +T 60 0C 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 67 0C 00 00 48 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 72 0C 00 00 23 72 23 71 23 70 21 48 00 DD 4E +R 00 00 01 00 +T 7D 0C 00 00 02 DD 46 03 09 E5 21 4C 00 09 5E +R 00 00 01 00 +T 88 0C 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 90 0C 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 99 0C 00 00 46 03 09 E5 21 40 00 09 5E 23 56 +R 00 00 01 00 +T A4 0C 00 00 23 4E 23 46 EB CD 00 00 00 00 C5 +R 00 00 01 00 02 0A 06 00 +T AD 0C 00 00 E5 21 48 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T B8 0C 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T C1 0C 00 00 00 00 00 00 C5 E5 21 4C 00 DD 4E +R 00 00 01 00 02 04 01 00 +T CA 0C 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T D5 0C 00 00 46 EB CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 07 00 +T DD 0C 00 00 24 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T E8 0C 00 00 46 23 5E 23 56 69 60 C1 09 EB C1 +R 00 00 01 00 +T F3 0C 00 00 ED 4A E5 D5 21 91 D3 C1 09 EB 21 +R 00 00 01 00 +T FE 0C 00 00 86 EB C1 ED 4A 4D 44 E1 CD +R 00 00 01 00 +T 07 0D 00 00 00 00 00 00 21 44 00 DD 4E 02 DD +R 00 00 01 00 02 04 02 00 +T 10 0D 00 00 46 03 09 5E 23 56 23 4E 23 46 EB +R 00 00 01 00 +T 1B 0D 00 00 3E 0B CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 09 00 +T 23 0D 00 00 44 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 2E 0D 00 00 56 23 4E 23 46 EB 3E 15 CD +R 00 00 01 00 +T 37 0D 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 3E 0D 00 00 44 00 DD 5E 02 DD 56 03 19 D1 73 +R 00 00 01 00 +T 49 0D 00 00 23 72 23 71 23 70 21 44 00 DD 4E +R 00 00 01 00 +T 54 0D 00 00 02 DD 46 03 09 E5 21 48 00 09 5E +R 00 00 01 00 +T 5F 0D 00 00 23 56 23 4E 23 46 E1 CD +R 00 00 01 00 +T 67 0D 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 diff --git a/src/nos/lib/net_lib/MD5Update.rel b/src/nos/lib/net_lib/MD5Update.rel new file mode 100644 index 00000000..38df40aa --- /dev/null +++ b/src/nos/lib/net_lib/MD5Update.rel @@ -0,0 +1,148 @@ +XL4 +H 2 areas C global symbols +S _MD5Transform Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?UL_RSH_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1A3 flags 0 +S _MD5Update Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 10 00 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 5E 02 DD 56 03 19 5E 23 56 23 4E +R 00 00 01 00 +T 14 00 00 00 23 46 EB 3E 03 CD 00 00 00 00 7D +R 00 00 01 00 02 0A 0A 00 +T 1D 00 00 00 E6 3F 4F 7C E6 00 47 DD 71 FC DD +R 00 00 01 00 +T 28 00 00 00 70 FD DD 6E 0A DD 66 0B 01 00 00 +R 00 00 01 00 +T 33 00 00 00 3E 03 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 06 00 +T 3B 00 00 00 10 00 DD 4E 02 DD 46 03 09 E5 DD +R 00 00 01 00 +T 46 00 00 00 6E 0A DD 66 0B 01 00 00 3E 03 CD +R 00 00 01 00 +T 51 00 00 00 00 00 00 00 EB E1 CD 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 0B 04 00 +T 58 00 00 00 EB 59 50 A7 C1 ED 42 EB C1 ED 42 +R 00 00 01 00 +T 63 00 00 00 30 0D +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 14 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 70 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 08 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 21 14 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 7D 00 00 00 DD 6E 0A DD 66 0B 01 00 00 3E 1D +R 00 00 01 00 +T 88 00 00 00 CD 00 00 00 00 EB E1 CD +R 00 00 01 00 02 05 0A 00 +T 8E 00 00 00 00 00 00 00 DD 7E FC DD B6 FD CA +R 00 00 01 00 02 04 04 00 +T 97 00 00 00 39 01 00 00 +R 00 00 01 00 00 04 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 DD 4E FC DD 46 FD 21 40 00 A7 ED +R 00 00 01 00 +T A4 00 00 00 42 DD 75 FE DD 74 FF DD 5E 0A DD +R 00 00 01 00 +T AF 00 00 00 56 0B A7 ED 52 30 08 DD 6E FE DD +R 00 00 01 00 +T BA 00 00 00 66 FF 18 06 +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 DD 75 FA DD 74 FB E5 DD 4E 04 DD +R 00 00 01 00 +T CF 00 00 00 46 05 DD 6E FC DD 66 FD DD 5E 02 +R 00 00 01 00 +T DA 00 00 00 DD 56 03 19 11 18 00 19 EB 3E +R 00 00 01 00 +T E4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T E9 00 00 00 00 00 00 00 F1 21 0A 00 39 7E DD +R 00 00 01 00 02 04 01 00 +T F2 00 00 00 86 FA 77 23 7E DD 8E FB 77 21 +R 00 00 01 00 +T FC 00 00 00 10 00 39 7E DD 96 FA 77 23 7E DD +R 00 00 01 00 +T 07 01 00 00 9E FB 77 DD 6E FE DD 66 FF DD 4E +R 00 00 01 00 +T 12 01 00 00 FA DD 46 FB A7 ED 42 20 1C +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 21 18 00 DD 4E 02 DD 46 03 09 4D +R 00 00 01 00 +T 26 01 00 00 44 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 2E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 33 01 00 00 00 00 00 00 18 02 +R 00 00 01 00 02 04 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 18 67 +R 00 00 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 01 40 00 DD 6E 0A DD 66 0B A7 ED +R 00 00 01 00 +T 44 01 00 00 42 38 30 +R 00 00 01 00 +T 47 01 00 00 +R 00 00 01 00 +T 47 01 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 52 01 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 58 01 00 00 CD 00 00 00 00 21 0A 00 39 7E C6 +R 00 00 01 00 02 05 01 00 +T 61 01 00 00 40 77 23 7E CE 00 77 21 10 00 39 +R 00 00 01 00 +T 6C 01 00 00 7E D6 40 77 23 7E DE 00 77 18 C2 +R 00 00 01 00 +T 77 01 00 00 +R 00 00 01 00 +T 77 01 00 00 DD 7E 0A DD B6 0B 28 21 +R 00 00 01 00 +T 7F 01 00 00 +R 00 00 01 00 +T 7F 01 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 8A 01 00 00 46 05 21 18 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 95 01 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 9A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/Mbufcache.rel b/src/nos/lib/net_lib/Mbufcache.rel new file mode 100644 index 00000000..e7492409 --- /dev/null +++ b/src/nos/lib/net_lib/Mbufcache.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 6 flags 0 +S _Mbufcache Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/Msizes.rel b/src/nos/lib/net_lib/Msizes.rel new file mode 100644 index 00000000..df4e8e00 --- /dev/null +++ b/src/nos/lib/net_lib/Msizes.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 40 flags 0 +S _Msizes Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/Noipaddr.rel b/src/nos/lib/net_lib/Noipaddr.rel new file mode 100644 index 00000000..55ab9433 --- /dev/null +++ b/src/nos/lib/net_lib/Noipaddr.rel @@ -0,0 +1,23 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 32 flags 0 +S _Noipaddr Def00000000 +A CDATA0 size 32 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 49 50 20 61 64 64 72 65 73 73 20 +R 00 00 03 00 +T 0B 00 00 00 66 69 65 6C 64 20 6D 69 73 73 69 +R 00 00 03 00 +T 16 00 00 00 6E 67 2C 20 61 6E 64 20 69 70 20 +R 00 00 03 00 +T 21 00 00 00 61 64 64 72 65 73 73 20 6E 6F 74 +R 00 00 03 00 +T 2C 00 00 00 20 73 65 74 0A 00 +R 00 00 03 00 diff --git a/src/nos/lib/net_lib/PADDING.rel b/src/nos/lib/net_lib/PADDING.rel new file mode 100644 index 00000000..0fe55611 --- /dev/null +++ b/src/nos/lib/net_lib/PADDING.rel @@ -0,0 +1,25 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 40 flags 0 +S _PADDING Def00000000 +A CDATA0 size 40 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 2C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 37 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/net_lib/Pushalloc.rel b/src/nos/lib/net_lib/Pushalloc.rel new file mode 100644 index 00000000..0e27ab28 --- /dev/null +++ b/src/nos/lib/net_lib/Pushalloc.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 4 flags 0 +S _Pushalloc Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/Pushdowns.rel b/src/nos/lib/net_lib/Pushdowns.rel new file mode 100644 index 00000000..504cb7cd --- /dev/null +++ b/src/nos/lib/net_lib/Pushdowns.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 4 flags 0 +S _Pushdowns Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/Sock_errlist.rel b/src/nos/lib/net_lib/Sock_errlist.rel new file mode 100644 index 00000000..6ceb1041 --- /dev/null +++ b/src/nos/lib/net_lib/Sock_errlist.rel @@ -0,0 +1,98 @@ +XL4 +H 5 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size C5 flags 0 +A IDATA0 size 18 flags 0 +S _Sock_errlist Def00000000 +A CDATA0 size 18 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6F 70 65 72 61 74 69 6F 6E 20 77 +R 00 00 02 00 +T 0B 00 00 00 6F 75 6C 64 20 62 6C 6F 63 6B 00 +R 00 00 02 00 +T 16 00 00 00 +R 00 00 02 00 +T 16 00 00 00 6E 6F 74 20 63 6F 6E 6E 65 63 74 +R 00 00 02 00 +T 21 00 00 00 65 64 00 +R 00 00 02 00 +T 24 00 00 00 +R 00 00 02 00 +T 24 00 00 00 73 6F 63 6B 65 74 20 74 79 70 65 +R 00 00 02 00 +T 2F 00 00 00 20 6E 6F 74 20 73 75 70 70 6F 72 +R 00 00 02 00 +T 3A 00 00 00 74 65 64 00 +R 00 00 02 00 +T 3E 00 00 00 +R 00 00 02 00 +T 3E 00 00 00 61 64 64 72 65 73 73 20 66 61 6D +R 00 00 02 00 +T 49 00 00 00 69 6C 79 20 6E 6F 74 20 73 75 70 +R 00 00 02 00 +T 54 00 00 00 70 6F 72 74 65 64 00 +R 00 00 02 00 +T 5B 00 00 00 +R 00 00 02 00 +T 5B 00 00 00 69 73 20 63 6F 6E 6E 65 63 74 65 +R 00 00 02 00 +T 66 00 00 00 64 00 +R 00 00 02 00 +T 68 00 00 00 +R 00 00 02 00 +T 68 00 00 00 6F 70 65 72 61 74 69 6F 6E 20 6E +R 00 00 02 00 +T 73 00 00 00 6F 74 20 73 75 70 70 6F 72 74 65 +R 00 00 02 00 +T 7E 00 00 00 64 00 +R 00 00 02 00 +T 80 00 00 00 +R 00 00 02 00 +T 80 00 00 00 61 6C 61 72 6D 00 +R 00 00 02 00 +T 86 00 00 00 +R 00 00 02 00 +T 86 00 00 00 61 62 6F 72 74 00 +R 00 00 02 00 +T 8C 00 00 00 +R 00 00 02 00 +T 8C 00 00 00 69 6E 74 65 72 72 75 70 74 00 +R 00 00 02 00 +T 96 00 00 00 +R 00 00 02 00 +T 96 00 00 00 63 6F 6E 6E 65 63 74 69 6F 6E 20 +R 00 00 02 00 +T A1 00 00 00 72 65 66 75 73 65 64 00 +R 00 00 02 00 +T A9 00 00 00 +R 00 00 02 00 +T A9 00 00 00 6D 65 73 73 61 67 65 20 73 69 7A +R 00 00 02 00 +T B4 00 00 00 65 00 +R 00 00 02 00 +T B6 00 00 00 +R 00 00 02 00 +T B6 00 00 00 61 64 64 72 65 73 73 20 69 6E 20 +R 00 00 02 00 +T C1 00 00 00 75 73 65 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 16 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 04 00 00 00 24 00 00 00 3E 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 08 00 00 00 5B 00 00 00 68 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0C 00 00 00 80 00 00 00 86 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 10 00 00 00 8C 00 00 00 96 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 14 00 00 00 A9 00 00 00 B6 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 diff --git a/src/nos/lib/net_lib/Socktypes.rel b/src/nos/lib/net_lib/Socktypes.rel new file mode 100644 index 00000000..69f92b7b --- /dev/null +++ b/src/nos/lib/net_lib/Socktypes.rel @@ -0,0 +1,64 @@ +XL4 +H 5 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size 44 flags 0 +A IDATA0 size 14 flags 0 +S _Socktypes Def00000000 +A CDATA0 size 14 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4E 6F 74 20 55 73 65 64 00 +R 00 00 02 00 +T 09 00 00 00 +R 00 00 02 00 +T 09 00 00 00 54 43 50 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 55 44 50 00 +R 00 00 02 00 +T 11 00 00 00 +R 00 00 02 00 +T 11 00 00 00 41 58 32 35 20 49 00 +R 00 00 02 00 +T 18 00 00 00 +R 00 00 02 00 +T 18 00 00 00 41 58 32 35 20 55 49 00 +R 00 00 02 00 +T 20 00 00 00 +R 00 00 02 00 +T 20 00 00 00 52 61 77 20 49 50 00 +R 00 00 02 00 +T 27 00 00 00 +R 00 00 02 00 +T 27 00 00 00 4E 45 54 52 4F 4D 33 00 +R 00 00 02 00 +T 2F 00 00 00 +R 00 00 02 00 +T 2F 00 00 00 4E 45 54 52 4F 4D 00 +R 00 00 02 00 +T 36 00 00 00 +R 00 00 02 00 +T 36 00 00 00 4C 6F 63 20 53 74 00 +R 00 00 02 00 +T 3D 00 00 00 +R 00 00 02 00 +T 3D 00 00 00 4C 6F 63 20 44 67 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 09 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 04 00 00 00 0D 00 00 00 11 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 08 00 00 00 18 00 00 00 20 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0C 00 00 00 27 00 00 00 2F 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 10 00 00 00 36 00 00 00 3D 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 diff --git a/src/nos/lib/net_lib/Usock.rel b/src/nos/lib/net_lib/Usock.rel new file mode 100644 index 00000000..c65113d7 --- /dev/null +++ b/src/nos/lib/net_lib/Usock.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S _Usock Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/_Files.rel b/src/nos/lib/net_lib/_Files.rel new file mode 100644 index 00000000..f2d13d5e --- /dev/null +++ b/src/nos/lib/net_lib/_Files.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 2 flags 0 +S __Files Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/_clrtmp.rel b/src/nos/lib/net_lib/_clrtmp.rel new file mode 100644 index 00000000..4028d376 --- /dev/null +++ b/src/nos/lib/net_lib/_clrtmp.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S __clrtmp Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 01 00 +R 00 00 03 00 diff --git a/src/nos/lib/net_lib/_fclose.rel b/src/nos/lib/net_lib/_fclose.rel new file mode 100644 index 00000000..b74744cb --- /dev/null +++ b/src/nos/lib/net_lib/_fclose.rel @@ -0,0 +1,252 @@ +XL4 +H 2 areas 18 global symbols +S _asy_close Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S _diag_close Ref00000000 +S _memset Ref00000000 +S _fseek Ref00000000 +S _unlink Ref00000000 +S _fwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _fstat Ref00000000 +S _free Ref00000000 +S _close_s Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S __clrtmp Ref00000000 +S __close Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2A2 flags 0 +S __fclose Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DA FF DD 7E 02 DD +R 00 00 01 00 02 05 0F 00 +T 09 00 00 00 B6 03 28 12 DD 6E 02 DD 66 03 46 +R 00 00 01 00 +T 14 00 00 00 23 66 68 01 AD DE A7 ED 42 28 03 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 C3 9F 02 00 00 +R 00 00 01 00 00 05 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 2A 00 00 00 00 7D B4 CA +R 00 00 01 00 02 05 11 00 +T 28 00 00 00 70 01 00 00 21 10 00 DD 4E 02 DD +R 00 00 01 00 00 04 01 00 +T 31 00 00 00 46 03 09 7E E6 10 47 23 7E E6 00 +R 00 00 01 00 +T 3C 00 00 00 B0 CA 70 01 00 00 +R 00 00 01 00 00 06 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 4B 00 00 00 E5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 53 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 58 00 00 00 00 00 00 00 F1 F1 F1 21 10 00 DD +R 00 00 01 00 02 04 01 00 +T 61 00 00 00 4E 02 DD 46 03 09 CB 86 21 10 00 +R 00 00 01 00 +T 6C 00 00 00 09 CB 8E 21 00 00 39 4D 44 DD 7E +R 00 00 01 00 +T 77 00 00 00 02 DD B6 03 28 0F 21 08 00 DD 5E +R 00 00 01 00 +T 82 00 00 00 02 DD 56 03 19 5E 23 56 18 03 +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 11 FF FF +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0B 00 02 0A 0B 00 +T 95 00 00 00 00 00 00 00 11 80 00 3E +R 00 00 01 00 02 04 01 00 +T 9B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T A0 00 00 00 00 00 00 00 DD 75 F8 DD 74 F9 01 +R 00 00 01 00 02 04 01 00 +T A9 00 00 00 80 00 C5 01 00 00 EB 3E +R 00 00 01 00 +T B1 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T B6 00 00 00 00 00 00 00 F1 21 0E 00 39 5E 23 +R 00 00 01 00 02 04 01 00 +T BF 00 00 00 56 23 4E 23 46 EB DD 75 FA DD 74 +R 00 00 01 00 +T CA 00 00 00 FB DD 71 FC DD 70 FD +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 6E FC DD 66 FD E5 DD 6E FA DD +R 00 00 01 00 +T DC 00 00 00 66 FB E5 01 00 00 21 00 00 CD +R 00 00 01 00 +T E6 00 00 00 00 00 00 00 30 78 +R 00 00 01 00 02 04 0E 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 DD 6E 02 DD 66 03 E5 21 00 00 E5 +R 00 00 01 00 +T F5 00 00 00 21 80 00 E5 DD 4E FC DD 46 FD DD +R 00 00 01 00 +T 00 01 00 00 6E FA DD 66 FB CD 00 00 00 00 30 +R 00 00 01 00 02 0A 0E 00 +T 09 01 00 00 08 DD 6E FA DD 66 FB 18 03 +R 00 00 01 00 +T 12 01 00 00 +R 00 00 01 00 +T 12 01 00 00 21 80 00 +R 00 00 01 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 E5 01 01 00 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T 20 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 25 01 00 00 00 00 00 00 F1 F1 DD 75 FE DD 74 +R 00 00 01 00 02 04 01 00 +T 2E 01 00 00 FF 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T 35 01 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 3B 01 00 00 80 80 DD 6E FE DD 66 FF 3E 80 AC +R 00 00 01 00 +T 46 01 00 00 67 ED 42 30 02 +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 18 15 +R 00 00 01 00 +T 4D 01 00 00 +R 00 00 01 00 +T 4D 01 00 00 21 20 00 39 DD 5E FE DD 56 FF 7A +R 00 00 01 00 +T 58 01 00 00 07 9F 4F 41 CD 00 00 00 00 C3 +R 00 00 01 00 02 09 16 00 +T 60 01 00 00 D1 00 00 00 +R 00 00 01 00 00 04 01 00 +T 62 01 00 00 +R 00 00 01 00 +T 62 01 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 6A 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0C 00 02 0A 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 78 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 02 00 02 0A 01 00 +T 7F 01 00 00 0E 00 DD 4E 02 DD 46 03 09 5E CD +R 00 00 01 00 +T 8A 01 00 00 00 00 00 00 00 04 00 01 02 00 00 +R 00 00 01 00 02 04 13 00 00 0B 01 00 +T 91 01 00 00 DE 01 00 00 C7 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 95 01 00 00 99 01 00 00 B0 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 99 01 00 00 +R 00 00 01 00 +T 99 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T A4 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T A9 01 00 00 00 00 00 00 CD 00 00 00 00 18 51 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T BB 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T C0 01 00 00 00 00 00 00 CD 00 00 00 00 18 3A +R 00 00 01 00 02 04 03 00 02 09 01 00 +T C7 01 00 00 +R 00 00 01 00 +T C7 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T D2 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0D 00 +T D7 01 00 00 00 00 00 00 CD 00 00 00 00 18 23 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T E9 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 12 00 +T EE 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 12 00 02 09 01 00 +T F4 01 00 00 0A 00 09 AF 77 23 77 23 77 23 77 +R 00 00 01 00 +T FF 01 00 00 18 00 +R 00 00 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 21 12 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 0C 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T 12 02 00 00 00 00 00 00 21 12 00 09 AF 77 23 +R 00 00 01 00 02 04 01 00 +T 1B 02 00 00 77 21 14 00 09 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T 23 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 10 00 02 0A 01 00 +T 2A 02 00 00 14 00 09 AF 77 23 77 21 10 00 09 +R 00 00 01 00 +T 35 02 00 00 7E E6 10 47 23 7E E6 00 B0 28 15 +R 00 00 01 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 21 1B 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 4B 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 50 02 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 55 02 00 00 +R 00 00 01 00 +T 55 02 00 00 21 1B 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 60 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0C 00 +T 65 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 6B 02 00 00 1B 00 09 AF 77 23 77 21 10 00 09 +R 00 00 01 00 +T 76 02 00 00 CB 96 21 10 00 09 CB 8E 21 10 00 +R 00 00 01 00 +T 81 02 00 00 09 CB 86 21 10 00 09 CB AE 21 +R 00 00 01 00 +T 8B 02 00 00 10 00 09 CB A6 21 10 00 09 CB 9E +R 00 00 01 00 +T 96 02 00 00 21 08 00 09 36 FF 23 36 FF +R 00 00 01 00 +T 9F 02 00 00 +R 00 00 01 00 +T 9F 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 diff --git a/src/nos/lib/net_lib/_fcreat.rel b/src/nos/lib/net_lib/_fcreat.rel new file mode 100644 index 00000000..3962f500 --- /dev/null +++ b/src/nos/lib/net_lib/_fcreat.rel @@ -0,0 +1,62 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___03f4_a314__5ffcreat_3a_20WARN Ref00000000 +S __Files Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __dprintf Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 92 flags 0 +S __fcreat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 01 1D 00 11 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 1B +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 23 00 00 00 E5 21 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 2B 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 32 00 00 00 F1 21 00 00 18 57 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 6E FE DD 66 FF 36 AD 23 36 DE +R 00 00 01 00 +T 43 00 00 00 DD 6E FE DD 66 FF 23 23 36 01 23 +R 00 00 01 00 +T 4E 00 00 00 36 00 21 06 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T 59 00 00 00 09 ED 5B 00 00 00 00 73 23 72 ED +R 00 00 01 00 02 07 02 00 +T 62 00 00 00 43 00 00 00 00 21 06 00 DD 4E FE +R 00 00 01 00 02 05 02 00 +T 6B 00 00 00 DD 46 FF 09 7E 23 B6 28 15 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 21 06 00 DD 4E FE DD 46 FF 09 56 +R 00 00 01 00 +T 7F 00 00 00 23 66 6A 11 04 00 19 71 23 70 +R 00 00 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/_fgetc.rel b/src/nos/lib/net_lib/_fgetc.rel new file mode 100644 index 00000000..9f7afb86 --- /dev/null +++ b/src/nos/lib/net_lib/_fgetc.rel @@ -0,0 +1,88 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __fillbuf Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AF flags 0 +S __fgetc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 B6 03 28 12 DD 6E 02 DD 66 03 46 +R 00 00 01 00 +T 14 00 00 00 23 66 68 01 AD DE A7 ED 42 28 06 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 FF FF C3 AC 00 00 00 +R 00 00 01 00 00 08 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 2D 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 34 00 00 00 14 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T 3F 00 00 00 66 68 DD 75 FE DD 74 FF 7D B4 28 +R 00 00 01 00 +T 4A 00 00 00 0F 21 0C 00 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T 55 00 00 00 7E 23 B6 20 1A +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 01 01 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 69 00 00 00 00 00 00 00 7D B4 20 05 +R 00 00 01 00 02 04 00 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 21 FF FF 18 38 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 21 0E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 7F 00 00 00 FE 05 20 16 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 01 01 00 21 12 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 8E 00 00 00 03 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T 94 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 14 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T A4 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T AA 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/_fillbuf.rel b/src/nos/lib/net_lib/_fillbuf.rel new file mode 100644 index 00000000..ffba7901 --- /dev/null +++ b/src/nos/lib/net_lib/_fillbuf.rel @@ -0,0 +1,247 @@ +XL4 +H 2 areas 11 global symbols +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _asy_read Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S __lseek Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S _recv_mbuf Ref00000000 +S __read Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2B0 flags 0 +S __fillbuf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 14 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 5E 02 DD 56 03 19 7E 23 B6 28 11 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 21 14 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 1F 00 00 00 23 66 68 C3 AD 02 00 00 +R 00 00 01 00 00 08 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 21 0E 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 30 00 00 00 CD 00 00 00 00 05 00 00 01 02 03 +R 00 00 01 00 02 05 0D 00 +T 39 00 00 00 05 AA 02 00 00 C6 00 00 00 +R 00 00 01 00 00 05 01 00 00 09 01 00 +T 3E 00 00 00 C0 00 00 00 46 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 42 00 00 00 08 01 00 00 6F 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 21 14 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 51 00 00 00 11 80 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T 57 00 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 5E 00 00 00 73 23 72 21 80 00 E5 21 14 00 09 +R 00 00 01 00 +T 69 00 00 00 56 23 66 6A 11 0A 00 19 4E 23 46 +R 00 00 01 00 +T 74 00 00 00 21 08 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 7F 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 84 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 8B 00 00 00 75 FE DD 74 FF CB 7C 28 06 +R 00 00 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 21 00 00 C3 AD 02 00 00 +R 00 00 01 00 00 08 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 21 14 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T A5 00 00 00 23 66 6A 11 0C 00 19 DD 5E FE DD +R 00 00 01 00 +T B0 00 00 00 56 FF 73 23 72 21 14 00 09 46 23 +R 00 00 01 00 +T BB 00 00 00 66 68 C3 AD 02 00 00 +R 00 00 01 00 00 07 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 21 00 00 C3 AD 02 00 00 +R 00 00 01 00 00 08 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 21 14 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T D1 00 00 00 23 B6 20 22 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 21 14 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T E0 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T E6 00 00 00 00 00 00 00 22 00 00 00 00 7D B4 +R 00 00 01 00 02 04 01 00 02 09 07 00 +T ED 00 00 00 28 06 +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 21 00 00 C3 AD 02 00 00 +R 00 00 01 00 00 08 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 18 CF +R 00 00 01 00 +T F7 00 00 00 +R 00 00 01 00 +T F7 00 00 00 21 14 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 02 01 00 00 23 66 68 C3 AD 02 00 00 +R 00 00 01 00 00 08 01 00 +T 08 01 00 00 +R 00 00 01 00 +T 08 01 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 13 01 00 00 E5 21 14 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 1E 01 00 00 4D 44 21 08 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 29 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 30 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 37 01 00 00 F1 4D 44 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 40 01 00 00 38 1C 2A 00 00 00 00 3E 6A AD B4 +R 00 00 01 00 02 07 07 00 +T 49 01 00 00 28 13 +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 21 10 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 56 01 00 00 F6 02 77 23 7E F6 00 77 +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 21 14 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 69 01 00 00 23 66 68 C3 AD 02 00 00 +R 00 00 01 00 00 08 01 00 +T 6F 01 00 00 +R 00 00 01 00 +T 6F 01 00 00 21 19 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 7A 01 00 00 23 46 DD 6E 04 DD 66 05 CD +R 00 00 01 00 +T 83 01 00 00 00 00 00 00 30 10 21 19 00 DD 4E +R 00 00 01 00 02 04 09 00 +T 8C 01 00 00 02 DD 46 03 09 56 23 66 6A 18 06 +R 00 00 01 00 +T 97 01 00 00 +R 00 00 01 00 +T 97 01 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 DD 75 04 DD 74 05 EB 3E +R 00 00 01 00 +T A5 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T AA 01 00 00 00 00 00 00 DD 75 FC DD 74 FD 01 +R 00 00 01 00 02 04 01 00 +T B3 01 00 00 00 00 C5 21 0A 00 DD 4E 02 DD 46 +R 00 00 01 00 +T BE 01 00 00 03 09 5E 23 56 23 4E 23 46 C5 D5 +R 00 00 01 00 +T C9 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T D4 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T D9 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0B 00 02 09 01 00 +T E0 01 00 00 F1 DD 6E 04 DD 66 05 E5 21 0A 00 +R 00 00 01 00 +T EB 01 00 00 DD 4E FC DD 46 FD 09 4E 23 46 21 +R 00 00 01 00 +T F6 01 00 00 08 00 DD 5E 02 DD 56 03 19 5E 23 +R 00 00 01 00 +T 01 02 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0F 00 02 0B 0F 00 +T 07 02 00 00 CD 00 00 00 00 F1 DD 75 04 DD 74 +R 00 00 01 00 02 05 01 00 +T 10 02 00 00 05 CB 7C 28 13 +R 00 00 01 00 +T 15 02 00 00 +R 00 00 01 00 +T 15 02 00 00 21 10 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 20 02 00 00 F6 01 77 23 7E F6 00 77 +R 00 00 01 00 +T 28 02 00 00 +R 00 00 01 00 +T 28 02 00 00 DD 7E 04 DD B6 05 20 13 +R 00 00 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 21 10 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 3B 02 00 00 F6 02 77 23 7E F6 00 77 +R 00 00 01 00 +T 43 02 00 00 +R 00 00 01 00 +T 43 02 00 00 DD 4E 04 DD 46 05 21 00 00 CD +R 00 00 01 00 +T 4D 02 00 00 00 00 00 00 38 13 +R 00 00 01 00 02 04 09 00 +T 51 02 00 00 +R 00 00 01 00 +T 51 02 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 59 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 01 00 +T 60 02 00 00 00 00 18 49 +R 00 00 01 00 +T 64 02 00 00 +R 00 00 01 00 +T 64 02 00 00 21 0A 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 6F 02 00 00 5E 04 DD 56 05 7A 07 9F 4F 41 CD +R 00 00 01 00 +T 7A 02 00 00 00 00 00 00 21 0C 00 DD 4E FC DD +R 00 00 01 00 02 04 04 00 +T 83 02 00 00 46 FD 09 DD 5E 04 DD 56 05 73 23 +R 00 00 01 00 +T 8E 02 00 00 72 21 14 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 99 02 00 00 DD 4E FC DD 46 FD 71 23 70 DD 6E +R 00 00 01 00 +T A4 02 00 00 FC DD 66 FD 18 03 +R 00 00 01 00 +T AA 02 00 00 +R 00 00 01 00 +T AA 02 00 00 21 00 00 +R 00 00 01 00 +T AD 02 00 00 +R 00 00 01 00 +T AD 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/accept.rel b/src/nos/lib/net_lib/accept.rel new file mode 100644 index 00000000..8137c589 --- /dev/null +++ b/src/nos/lib/net_lib/accept.rel @@ -0,0 +1,167 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 189 flags 0 +S _accept Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 5E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 7D B4 20 0C +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 05 00 +T 26 00 00 00 C3 86 01 00 00 +R 00 00 01 00 00 05 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 0C 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 34 00 00 00 23 B6 20 0C +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 21 69 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 05 00 +T 41 00 00 00 C3 86 01 00 00 +R 00 00 01 00 00 05 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 4F 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 59 00 00 00 0E 00 09 7E 23 B6 20 0C +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 21 69 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 05 00 +T 6A 00 00 00 C3 86 01 00 00 +R 00 00 01 00 00 05 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 21 0C 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 78 00 00 00 23 B6 28 47 21 0A 00 DD 4E FC DD +R 00 00 01 00 +T 83 00 00 00 46 FD 09 7E 23 A6 3C 20 37 +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 06 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 97 00 00 00 B7 28 0C +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 21 64 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 05 00 +T A3 00 00 00 C3 86 01 00 00 +R 00 00 01 00 00 05 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T AE 00 00 00 21 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T B5 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 05 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 21 FF FF C3 86 01 00 00 +R 00 00 01 00 00 08 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 18 AA +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 21 0C 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T CE 00 00 00 23 B6 20 0C +R 00 00 01 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 05 00 +T DB 00 00 00 C3 86 01 00 00 +R 00 00 01 00 00 05 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 21 0A 00 DD 4E FC DD 46 FD 09 56 +R 00 00 01 00 +T E9 00 00 00 23 66 6A DD 75 FA DD 74 FB 21 +R 00 00 01 00 +T F3 00 00 00 0A 00 09 36 FF 23 36 FF DD 5E FA +R 00 00 01 00 +T FE 00 00 00 DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T 04 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 0B 01 00 00 FC DD 74 FD DD 7E 04 DD B6 05 28 +R 00 00 01 00 +T 16 01 00 00 69 DD 7E 0A DD B6 0B 28 61 +R 00 00 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 DD 6E 0A DD 66 0B 4E 23 46 21 +R 00 00 01 00 +T 29 01 00 00 14 00 DD 5E FC DD 56 FD 19 7E 23 +R 00 00 01 00 +T 34 01 00 00 66 6F CD 00 00 00 00 30 0A 21 +R 00 00 01 00 02 07 07 00 +T 3C 01 00 00 14 00 19 46 23 66 68 18 0A +R 00 00 01 00 +T 45 01 00 00 +R 00 00 01 00 +T 45 01 00 00 DD 6E 0A DD 66 0B 46 23 66 68 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 E5 DD 6E 0A DD 66 0B C1 71 23 70 +R 00 00 01 00 +T 5A 01 00 00 DD 6E 0A DD 66 0B 4E 23 46 C5 21 +R 00 00 01 00 +T 65 01 00 00 12 00 DD 4E FC DD 46 FD 09 4E 23 +R 00 00 01 00 +T 70 01 00 00 46 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 78 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7D 01 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 00 00 +T 80 01 00 00 +R 00 00 01 00 +T 80 01 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/ahdlc.rel b/src/nos/lib/net_lib/ahdlc.rel new file mode 100644 index 00000000..743b280f --- /dev/null +++ b/src/nos/lib/net_lib/ahdlc.rel @@ -0,0 +1,354 @@ +XL4 +H 2 areas 10 global symbols +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S _Fcstab Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _free_p Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 49B flags 0 +S _ahdlcrx Def00000065 +S _ahdlctx Def00000340 +S _init_hdlc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EB AF 77 23 77 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 6E 02 DD 66 03 23 23 AF 77 23 77 +R 00 00 01 00 +T 14 00 00 00 21 04 00 DD 5E 02 DD 56 03 19 AF +R 00 00 01 00 +T 1F 00 00 00 77 23 77 21 06 00 19 71 23 70 21 +R 00 00 01 00 +T 2A 00 00 00 08 00 19 36 FF 23 36 FF 21 0A 00 +R 00 00 01 00 +T 35 00 00 00 19 AF 77 23 77 23 77 23 77 21 +R 00 00 01 00 +T 3F 00 00 00 0E 00 19 AF 77 23 77 23 77 23 77 +R 00 00 01 00 +T 4A 00 00 00 21 12 00 19 AF 77 23 77 23 77 23 +R 00 00 01 00 +T 55 00 00 00 77 21 16 00 19 AF 77 23 77 23 77 +R 00 00 01 00 +T 60 00 00 00 23 77 C3 00 00 00 00 +R 00 00 01 00 02 07 04 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 CD 00 00 00 00 FE FF 79 FE 7D 20 +R 00 00 01 00 02 05 08 00 +T 6E 00 00 00 11 +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 DD 6E 02 DD 66 03 36 01 23 36 00 +R 00 00 01 00 +T 7A 00 00 00 21 00 00 C3 3D 03 00 00 +R 00 00 01 00 00 08 01 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 DD 7E 04 FE 7E CA C8 01 00 00 +R 00 00 01 00 00 0A 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 6E 02 DD 66 03 23 23 7E 23 B6 +R 00 00 01 00 +T 93 00 00 00 28 06 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 00 00 C3 3D 03 00 00 +R 00 00 01 00 00 08 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 DD 6E 02 DD 66 03 7E 23 B6 28 12 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 DD 7E 04 EE 20 DD 77 04 DD 6E 02 +R 00 00 01 00 +T B1 00 00 00 DD 66 03 AF 77 23 77 +R 00 00 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T C3 00 00 00 23 B6 20 20 +R 00 00 01 00 +T C7 00 00 00 +R 00 00 01 00 +T C7 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T D2 00 00 00 21 06 00 09 5E 23 56 3E +R 00 00 01 00 +T DA 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T DF 00 00 00 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T F2 00 00 00 23 66 6A 11 0C 00 19 56 23 66 6A +R 00 00 01 00 +T FD 00 00 00 E5 21 06 00 09 4E 23 46 E1 A7 ED +R 00 00 01 00 +T 08 01 00 00 42 20 4C +R 00 00 01 00 +T 0B 01 00 00 +R 00 00 01 00 +T 0B 01 00 00 21 12 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 16 01 00 00 00 00 00 00 21 04 00 DD 4E 02 DD +R 00 00 01 00 02 04 09 00 +T 1F 01 00 00 46 03 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T 26 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 2C 01 00 00 04 00 09 AF 77 23 77 69 60 AF 77 +R 00 00 01 00 +T 37 01 00 00 23 77 21 08 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 42 01 00 00 09 36 FF 23 36 FF 69 60 23 23 36 +R 00 00 01 00 +T 4D 01 00 00 01 23 36 00 21 00 00 C3 +R 00 00 01 00 +T 55 01 00 00 3D 03 00 00 +R 00 00 01 00 00 04 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 62 01 00 00 23 66 6A 11 0A 00 19 56 23 66 6A +R 00 00 01 00 +T 6D 01 00 00 E5 21 04 00 09 56 23 66 6A 11 +R 00 00 01 00 +T 77 01 00 00 0C 00 19 5E 23 56 13 72 2B 73 1B +R 00 00 01 00 +T 82 01 00 00 E1 19 DD 56 04 72 21 08 00 09 E5 +R 00 00 01 00 +T 8D 01 00 00 21 08 00 09 56 23 66 6A 6C 26 00 +R 00 00 01 00 +T 98 01 00 00 E5 21 08 00 09 DD 4E 04 06 00 7E +R 00 00 01 00 +T A3 01 00 00 A9 5F 23 7E A8 57 7B E6 FF 6F 7A +R 00 00 01 00 +T AE 01 00 00 E6 00 67 29 01 00 00 00 00 09 C1 +R 00 00 01 00 02 09 03 00 +T B7 01 00 00 79 AE 5F 78 23 AE 57 E1 73 23 72 +R 00 00 01 00 +T C2 01 00 00 21 00 00 C3 3D 03 00 00 +R 00 00 01 00 00 08 01 00 +T C8 01 00 00 +R 00 00 01 00 +T C8 01 00 00 DD 6E 02 DD 66 03 7E 23 B6 28 4E +R 00 00 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 21 0E 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T DE 01 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 09 00 +T E7 01 00 00 23 36 01 23 36 00 DD 6E 02 DD 66 +R 00 00 01 00 +T F2 01 00 00 03 AF 77 23 77 21 04 00 DD 4E 02 +R 00 00 01 00 +T FD 01 00 00 DD 46 03 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T 05 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 0B 02 00 00 04 00 09 AF 77 23 77 21 08 00 09 +R 00 00 01 00 +T 16 02 00 00 36 FF 23 36 FF 21 00 00 C3 +R 00 00 01 00 +T 1F 02 00 00 3D 03 00 00 +R 00 00 01 00 00 04 01 00 +T 21 02 00 00 +R 00 00 01 00 +T 21 02 00 00 DD 6E 02 DD 66 03 23 23 7E 23 B6 +R 00 00 01 00 +T 2C 02 00 00 28 12 +R 00 00 01 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 DD 6E 02 DD 66 03 23 23 AF 77 23 +R 00 00 01 00 +T 39 02 00 00 77 21 00 00 C3 3D 03 00 00 +R 00 00 01 00 00 09 01 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 4B 02 00 00 23 B6 20 06 +R 00 00 01 00 +T 4F 02 00 00 +R 00 00 01 00 +T 4F 02 00 00 21 00 00 C3 3D 03 00 00 +R 00 00 01 00 00 08 01 00 +T 55 02 00 00 +R 00 00 01 00 +T 55 02 00 00 21 08 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 60 02 00 00 23 66 68 01 B8 F0 A7 ED 42 28 37 +R 00 00 01 00 +T 6B 02 00 00 +R 00 00 01 00 +T 6B 02 00 00 21 16 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 76 02 00 00 00 00 00 00 21 04 00 DD 4E 02 DD +R 00 00 01 00 02 04 09 00 +T 7F 02 00 00 46 03 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T 86 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 8C 02 00 00 04 00 09 AF 77 23 77 21 08 00 09 +R 00 00 01 00 +T 97 02 00 00 36 FF 23 36 FF 21 00 00 C3 +R 00 00 01 00 +T A0 02 00 00 3D 03 00 00 +R 00 00 01 00 00 04 01 00 +T A2 02 00 00 +R 00 00 01 00 +T A2 02 00 00 21 04 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T AD 02 00 00 23 66 68 01 0C 00 09 46 23 66 68 +R 00 00 01 00 +T B8 02 00 00 01 02 00 A7 ED 42 30 36 +R 00 00 01 00 +T C0 02 00 00 +R 00 00 01 00 +T C0 02 00 00 21 1A 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T CB 02 00 00 00 00 00 00 21 04 00 DD 4E 02 DD +R 00 00 01 00 02 04 09 00 +T D4 02 00 00 46 03 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T DB 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T E1 02 00 00 04 00 09 AF 77 23 77 21 08 00 09 +R 00 00 01 00 +T EC 02 00 00 36 FF 23 36 FF 21 00 00 18 47 +R 00 00 01 00 +T F6 02 00 00 +R 00 00 01 00 +T F6 02 00 00 21 0A 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 01 03 00 00 00 00 00 00 21 04 00 DD 4E 02 DD +R 00 00 01 00 02 04 09 00 +T 0A 03 00 00 46 03 09 56 23 66 6A DD 75 FE DD +R 00 00 01 00 +T 15 03 00 00 74 FF 21 04 00 09 AF 77 23 77 21 +R 00 00 01 00 +T 20 03 00 00 08 00 09 36 FF 23 36 FF 21 0C 00 +R 00 00 01 00 +T 2B 03 00 00 DD 4E FE DD 46 FF 09 7E D6 02 77 +R 00 00 01 00 +T 36 03 00 00 23 7E DE 00 77 69 60 +R 00 00 01 00 +T 3D 03 00 00 +R 00 00 01 00 +T 3D 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 40 03 00 00 +R 00 00 01 00 +T 40 03 00 00 CD 00 00 00 00 F8 FF DD 36 FE FF +R 00 00 01 00 02 05 08 00 +T 49 03 00 00 DD 36 FF FF DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 54 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 59 03 00 00 00 00 00 00 29 01 05 00 09 EB 3E +R 00 00 01 00 02 04 01 00 +T 62 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 67 03 00 00 00 00 00 00 DD 75 F8 DD 74 F9 01 +R 00 00 01 00 02 04 01 00 +T 70 03 00 00 0A 00 09 46 23 66 68 DD 75 FA DD +R 00 00 01 00 +T 7B 03 00 00 74 FB +R 00 00 01 00 +T 7D 03 00 00 +R 00 00 01 00 +T 7D 03 00 00 21 0A 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 85 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0B 00 02 0A 01 00 +T 8C 03 00 00 75 FC DD 74 FD 7D A4 3C 28 49 +R 00 00 01 00 +T 96 03 00 00 +R 00 00 01 00 +T 96 03 00 00 DD 6E FE DD 66 FF 6C 26 00 E5 DD +R 00 00 01 00 +T A1 03 00 00 7E FE DD AE FC 6F DD 7E FF DD AE +R 00 00 01 00 +T AC 03 00 00 FD 67 7D E6 FF 4F 7C E6 00 47 69 +R 00 00 01 00 +T B7 03 00 00 60 29 01 00 00 00 00 09 C1 79 AE +R 00 00 01 00 02 07 03 00 +T C0 03 00 00 5F 78 23 AE 57 DD 73 FE DD 72 FF +R 00 00 01 00 +T CB 03 00 00 DD 4E FC DD 5E FA DD 56 FB CD +R 00 00 01 00 +T D5 03 00 00 4E 04 00 00 DD 75 FA DD 74 FB 18 +R 00 00 01 00 00 04 01 00 +T DE 03 00 00 9E +R 00 00 01 00 +T DF 03 00 00 +R 00 00 01 00 +T DF 03 00 00 21 0A 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T E7 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 01 00 +T EE 03 00 00 06 00 39 7E EE FF 77 23 7E EE FF +R 00 00 01 00 +T F9 03 00 00 77 DD 4E FE DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 04 04 00 00 4E 04 00 00 DD 75 FA DD 74 FB DD +R 00 00 01 00 00 04 01 00 +T 0D 04 00 00 4E FE DD 46 FF 48 06 00 EB CD +R 00 00 01 00 +T 17 04 00 00 4E 04 00 00 DD 75 FA DD 74 FB 23 +R 00 00 01 00 00 04 01 00 +T 20 04 00 00 DD 75 FA DD 74 FB 2B 36 7E 21 +R 00 00 01 00 +T 2A 04 00 00 0C 00 DD 4E F8 DD 46 F9 09 E5 21 +R 00 00 01 00 +T 35 04 00 00 0A 00 09 5E 23 56 DD 6E FA DD 66 +R 00 00 01 00 +T 40 04 00 00 FB A7 ED 52 EB E1 73 23 72 69 60 +R 00 00 01 00 +T 4B 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 4E 04 00 00 +R 00 00 01 00 +T 4E 04 00 00 CD 00 00 00 00 79 FE 7D 38 2A FE +R 00 00 01 00 02 05 07 00 +T 57 04 00 00 7F 30 26 +R 00 00 01 00 +T 5A 04 00 00 +R 00 00 01 00 +T 5A 04 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 65 04 00 00 74 03 2B 36 7D DD 7E 04 EE 20 DD +R 00 00 01 00 +T 70 04 00 00 6E 02 DD 66 03 23 DD 75 02 DD 74 +R 00 00 01 00 +T 7B 04 00 00 03 2B 77 18 12 +R 00 00 01 00 +T 80 04 00 00 +R 00 00 01 00 +T 80 04 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 8B 04 00 00 74 03 2B DD 46 04 70 +R 00 00 01 00 +T 92 04 00 00 +R 00 00 01 00 +T 92 04 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 05 00 diff --git a/src/nos/lib/net_lib/alloc.rel b/src/nos/lib/net_lib/alloc.rel new file mode 100644 index 00000000..bcf21ef4 --- /dev/null +++ b/src/nos/lib/net_lib/alloc.rel @@ -0,0 +1,1271 @@ +XL4 +H 6 areas 45 global symbols +S ___02db_d814_N_3e_3d_255u_3a_257 Ref00000000 +S ___044f_62a8_debug Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0591_5069_status Ref00000000 +S ?L_DEC_L03 Ref00000000 +S _restore Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _logmsg Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S _istate Ref00000000 +S _memset Ref00000000 +S _memcpy Ref00000000 +S _ppause Ref00000000 +S ?L_INC_L03 Ref00000000 +S ___027b_8dc1_Free_20memory_20thr Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _abyte Ref00000000 +S _mbufsizes Ref00000000 +S ___0135_1c93__25p_20_256lu Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S _ilog2 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ___0403_9965_allocs_20_25lu_20fr Ref00000000 +S _kwait Ref00000000 +S ___00ec_426e__20_7c_20 Ref00000000 +S _stktrace Ref00000000 +S _dirps Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___048a_f896_freelist Ref00000000 +S ?S_LSH_L02 Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _mbufstat Ref00000000 +S ___057b_f163_sizes Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _Memthresh Ref00000000 +S _Gcollect Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S ___049b_5bc8_heap_20size_20_25lu Ref00000000 +S ?UL_DIV_L03 Ref00000000 +S _sbrk Ref00000000 +S __printf Ref00000000 +S ___05b0_4c6f_thresh Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dprintf Ref00000000 +S _setbool Ref00000000 +S ___0286_32e9_Heap_20debugging Ref00000000 +S ___0489_9a2a_free_3a_20WARNING_2 Ref00000000 +S _setlong Ref00000000 +S ___0492_51ba_garbage_20collectio Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BEF flags 0 +S _availmem Def000007BC +S _gcollect Def00000B50 +S _domem Def00000ACD +S _realloc Def000005D3 +S _free Def00000305 +S _callocw Def0000074A +S _calloc Def0000065A +S _mallocw Def000006D5 +S _malloc Def00000000 +A CSTR size 107 flags 0 +A UDATA0 size 6C flags 0 +S _Availmem Def0000001A +A IDATA0 size 50 flags 0 +S _Memcmds Def00000000 +A CDATA0 size 50 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 6E 02 DD +R 00 00 01 00 02 05 26 00 +T 09 00 00 00 66 03 E5 DD 6E 08 DD 66 09 E5 DD +R 00 00 01 00 +T 14 00 00 00 6E 06 DD 66 07 E5 21 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 1D 00 00 00 E5 21 01 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 32 00 +T 25 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 32 00 02 09 02 00 +T 2C 00 00 00 F1 F1 F1 DD 7E 02 DD B6 03 20 18 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 21 1B 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 00 05 02 00 +T 40 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 32 00 02 09 32 00 +T 45 00 00 00 00 00 00 00 F1 F1 21 00 00 C3 +R 00 00 01 00 02 04 02 00 +T 4D 00 00 00 2A 02 00 00 +R 00 00 01 00 00 04 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 2A 04 00 00 00 ED 4B 06 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 56 00 00 00 CD 00 00 00 00 22 04 00 00 00 ED +R 00 00 01 00 02 05 0D 00 00 0A 03 00 +T 5D 00 00 00 43 06 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 03 00 +T 66 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T 6C 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 CB +R 00 00 01 00 02 04 02 00 +T 75 00 00 00 7C 20 0F +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 DD 6E F6 DD 66 F7 29 29 01 +R 00 00 01 00 +T 81 00 00 00 24 00 00 00 09 CD 00 00 00 00 +R 00 00 01 00 00 04 03 00 02 0A 28 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 DD 6E 02 DD 66 03 23 23 23 CB 3C +R 00 00 01 00 +T 92 00 00 00 CB 1D CB 3C CB 1D 23 DD 75 FE DD +R 00 00 01 00 +T 9D 00 00 00 74 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1E 00 +T A2 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T A9 00 00 00 F8 DD 74 F9 2A 4E 00 00 00 DD 75 +R 00 00 01 00 00 09 04 00 +T B2 00 00 00 FC DD 74 FD 7D B4 20 17 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 DD 36 FC 64 00 00 00 DD 36 FD +R 00 00 01 00 09 07 03 00 +T C1 00 00 00 64 00 00 00 21 64 00 00 00 22 +R 00 00 01 00 89 04 03 00 00 09 03 00 +T C6 00 00 00 4E 00 00 00 22 64 00 00 00 21 +R 00 00 01 00 00 04 04 00 00 09 03 00 +T CC 00 00 00 01 00 22 66 00 00 00 +R 00 00 01 00 00 07 03 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T DC 00 00 00 75 FA DD 74 FB +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 DD 6E FA DD 66 FB 23 23 46 23 66 +R 00 00 01 00 +T EC 00 00 00 68 DD 4E FE DD 46 FF A7 ED 42 DA +R 00 00 01 00 +T F7 00 00 00 9A 01 00 00 +R 00 00 01 00 00 04 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 DD 6E FA DD 66 FB 23 23 4E 23 46 +R 00 00 01 00 +T 04 01 00 00 DD 6E FE DD 66 FF 23 A7 ED 42 38 +R 00 00 01 00 +T 0F 01 00 00 17 +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 DD 6E FA DD 66 FB 46 23 66 68 E5 +R 00 00 01 00 +T 1B 01 00 00 DD 6E FC DD 66 FD C1 71 23 70 18 +R 00 00 01 00 +T 26 01 00 00 3F +R 00 00 01 00 +T 27 01 00 00 +R 00 00 01 00 +T 27 01 00 00 DD 6E FA DD 66 FB 23 23 7E DD 96 +R 00 00 01 00 +T 32 01 00 00 FE 77 23 7E DD 9E FF 77 DD 6E FA +R 00 00 01 00 +T 3D 01 00 00 DD 66 FB 23 23 46 23 66 68 29 29 +R 00 00 01 00 +T 48 01 00 00 4D 44 21 04 00 39 7E 81 77 23 7E +R 00 00 01 00 +T 53 01 00 00 88 77 DD 6E FA DD 66 FB 23 23 DD +R 00 00 01 00 +T 5E 01 00 00 4E FE DD 46 FF 71 23 70 +R 00 00 01 00 +T 66 01 00 00 +R 00 00 01 00 +T 66 01 00 00 DD 6E FA DD 66 FB E5 4D 44 69 60 +R 00 00 01 00 +T 71 01 00 00 C1 71 23 70 21 1A 00 00 00 DD 4E +R 00 00 01 00 00 09 03 00 +T 7A 01 00 00 FA DD 46 FB 03 03 0A 5F 03 0A 57 +R 00 00 01 00 +T 85 01 00 00 01 00 00 CD 00 00 00 00 DD 7E FA +R 00 00 01 00 02 08 38 00 +T 8E 01 00 00 C6 04 DD 77 FA 30 03 DD 34 FB +R 00 00 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 18 62 +R 00 00 01 00 +T 9A 01 00 00 +R 00 00 01 00 +T 9A 01 00 00 2A 4E 00 00 00 DD 4E FA DD 46 FB +R 00 00 01 00 00 05 04 00 +T A3 01 00 00 A7 ED 42 20 35 DD 7E F8 DD B6 F9 +R 00 00 01 00 +T AE 01 00 00 28 13 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T B7 01 00 00 2D 02 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 00 04 01 00 +T C0 01 00 00 B4 20 1A +R 00 00 01 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 AF DD 77 FA DD 77 FB 2A +R 00 00 01 00 +T CB 01 00 00 00 00 00 00 ED 4B 02 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T D2 01 00 00 00 00 00 00 22 00 00 00 00 ED 43 +R 00 00 01 00 02 04 0D 00 00 09 03 00 +T D9 01 00 00 02 00 00 00 18 1F +R 00 00 01 00 00 04 03 00 +T DD 01 00 00 +R 00 00 01 00 +T DD 01 00 00 DD 6E FA DD 66 FB DD 75 FC DD 74 +R 00 00 01 00 +T E8 01 00 00 FD DD 6E FA DD 66 FB 46 23 66 68 +R 00 00 01 00 +T F3 01 00 00 DD 75 FA DD 74 FB C3 E1 00 00 00 +R 00 00 01 00 00 0B 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 04 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 02 00 +T 0B 02 00 00 6E FA DD 66 FB E5 21 22 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 14 02 00 00 E5 21 01 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 32 00 +T 1C 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 32 00 02 09 02 00 +T 23 02 00 00 F1 DD 6E FA DD 66 FB +R 00 00 01 00 +T 2A 02 00 00 +R 00 00 01 00 +T 2A 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 2D 02 00 00 +R 00 00 01 00 +T 2D 02 00 00 CD 00 00 00 00 F4 FF DD 6E 02 DD +R 00 00 01 00 02 05 26 00 +T 36 02 00 00 66 03 E5 DD 6E 08 DD 66 09 E5 DD +R 00 00 01 00 +T 41 02 00 00 6E 06 DD 66 07 E5 21 2C 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 4A 02 00 00 E5 21 01 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 32 00 +T 52 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 32 00 02 09 02 00 +T 59 02 00 00 F1 F1 F1 2A 1E 00 00 00 ED 4B +R 00 00 01 00 00 08 03 00 +T 61 02 00 00 20 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 03 00 02 09 0D 00 +T 67 02 00 00 1E 00 00 00 ED 43 20 00 00 00 DD +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 6E 02 00 00 6E 02 DD 66 03 29 29 DD 75 F8 DD +R 00 00 01 00 +T 79 02 00 00 74 F9 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 2E 00 +T 7F 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 2E 00 02 09 02 00 +T 86 02 00 00 F4 DD 74 F5 7D A4 3C 28 5E +R 00 00 01 00 +T 8F 02 00 00 +R 00 00 01 00 +T 8F 02 00 00 DD 6E F4 DD 66 F5 DD 75 F6 DD 74 +R 00 00 01 00 +T 9A 02 00 00 F7 23 23 DD 4E 02 DD 46 03 71 23 +R 00 00 01 00 +T A5 02 00 00 70 DD 6E F6 DD 66 F7 E5 4D 44 69 +R 00 00 01 00 +T B0 02 00 00 60 C1 71 23 70 21 04 00 DD 4E F6 +R 00 00 01 00 +T BB 02 00 00 DD 46 F7 09 EB 3E 05 03 00 00 21 +R 00 00 01 00 29 0A 01 00 +T C3 02 00 00 05 03 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T C9 02 00 00 68 00 00 00 DD 5E F8 DD 56 F9 01 +R 00 00 01 00 00 04 03 00 +T D2 02 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 07 15 00 +T D8 02 00 00 08 00 00 00 ED 4B 0A 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T DF 02 00 00 00 00 00 00 22 08 00 00 00 ED 43 +R 00 00 01 00 02 04 04 00 00 09 03 00 +T E6 02 00 00 0A 00 00 00 2A 4E 00 00 00 18 15 +R 00 00 01 00 00 04 03 00 00 09 04 00 +T ED 02 00 00 +R 00 00 01 00 +T ED 02 00 00 21 49 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 00 05 02 00 +T F6 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 32 00 02 09 32 00 +T FB 02 00 00 00 00 00 00 F1 F1 21 00 00 +R 00 00 01 00 02 04 02 00 +T 02 03 00 00 +R 00 00 01 00 +T 02 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 14 00 +T 05 03 00 00 +R 00 00 01 00 +T 05 03 00 00 CD 00 00 00 00 F6 FF DD 6E 02 DD +R 00 00 01 00 02 05 26 00 +T 0E 03 00 00 66 03 E5 DD 6E 08 DD 66 09 E5 DD +R 00 00 01 00 +T 19 03 00 00 6E 06 DD 66 07 E5 21 51 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 22 03 00 00 E5 21 01 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 32 00 +T 2A 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 32 00 02 09 02 00 +T 31 03 00 00 F1 F1 F1 DD 7E 02 DD B6 03 20 15 +R 00 00 01 00 +T 3C 03 00 00 +R 00 00 01 00 +T 3C 03 00 00 21 1B 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 00 05 02 00 +T 45 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 32 00 02 09 32 00 +T 4A 03 00 00 00 00 00 00 F1 F1 C3 D0 05 00 00 +R 00 00 01 00 02 04 02 00 00 0B 01 00 +T 51 03 00 00 +R 00 00 01 00 +T 51 03 00 00 2A 08 00 00 00 ED 4B 0A 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 58 03 00 00 CD 00 00 00 00 22 08 00 00 00 ED +R 00 00 01 00 02 05 0D 00 00 0A 03 00 +T 5F 03 00 00 43 0A 00 00 00 21 FC FF DD 4E 02 +R 00 00 01 00 00 05 03 00 +T 68 03 00 00 DD 46 03 09 DD 75 F6 DD 74 F7 E5 +R 00 00 01 00 +T 73 03 00 00 4D 44 69 60 4E 23 46 E1 A7 ED 42 +R 00 00 01 00 +T 7E 03 00 00 CA 27 04 00 00 +R 00 00 01 00 00 05 01 00 +T 81 03 00 00 +R 00 00 01 00 +T 81 03 00 00 2A 0C 00 00 00 ED 4B 0E 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 88 03 00 00 CD 00 00 00 00 22 0C 00 00 00 ED +R 00 00 01 00 02 05 0D 00 00 0A 03 00 +T 8F 03 00 00 43 0E 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 03 00 2B 0A 09 00 +T 95 03 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 09 00 02 09 02 00 +T 9C 03 00 00 28 74 +R 00 00 01 00 +T 9E 03 00 00 +R 00 00 01 00 +T 9E 03 00 00 21 0C 00 39 DD 75 FA DD 74 FB 21 +R 00 00 01 00 +T A9 03 00 00 2A 00 ED 4B 00 00 00 00 09 5E 23 +R 00 00 01 00 02 08 17 00 +T B2 03 00 00 56 D5 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T BC 03 00 00 6A 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 0F 00 +T C2 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0F 00 02 09 02 00 +T C9 03 00 00 F1 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 1D 00 +T D0 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1D 00 02 09 02 00 +T D6 03 00 00 2A 00 09 4E 23 46 C5 21 FC FF DD +R 00 00 01 00 +T E1 03 00 00 4E FA DD 46 FB 09 5E 23 56 D5 0B +R 00 00 01 00 +T EC 03 00 00 0B 69 60 4E 23 46 C5 DD 6E 02 DD +R 00 00 01 00 +T F7 03 00 00 66 03 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 35 00 +T FE 03 00 00 00 00 00 00 E5 21 FF FF E5 3E +R 00 00 01 00 02 04 35 00 +T 06 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 0B 04 00 00 00 00 00 00 21 0E 00 39 F9 +R 00 00 01 00 02 04 02 00 +T 12 04 00 00 +R 00 00 01 00 +T 12 04 00 00 21 97 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 00 05 02 00 +T 1B 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 32 00 02 09 32 00 +T 20 04 00 00 00 00 00 00 F1 F1 C3 D0 05 00 00 +R 00 00 01 00 02 04 02 00 00 0B 01 00 +T 27 04 00 00 +R 00 00 01 00 +T 27 04 00 00 21 1A 00 00 00 DD 4E F6 DD 46 F7 +R 00 00 01 00 00 05 03 00 +T 30 04 00 00 03 03 0A 5F 03 0A 57 01 00 00 CD +R 00 00 01 00 +T 3B 04 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 15 00 2B 09 1E 00 +T 40 04 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T 47 04 00 00 FC DD 74 FD 2A 4E 00 00 00 DD 75 +R 00 00 01 00 00 09 04 00 +T 50 04 00 00 F8 DD 74 F9 +R 00 00 01 00 +T 54 04 00 00 +R 00 00 01 00 +T 54 04 00 00 DD 4E F6 DD 46 F7 DD 6E F8 DD 66 +R 00 00 01 00 +T 5F 04 00 00 F9 A7 ED 42 30 14 DD 6E F8 DD 66 +R 00 00 01 00 +T 6A 04 00 00 F9 4E 23 46 DD 6E F6 DD 66 F7 A7 +R 00 00 01 00 +T 75 04 00 00 ED 42 38 4D +R 00 00 01 00 +T 79 04 00 00 +R 00 00 01 00 +T 79 04 00 00 DD 6E F8 DD 66 F9 4E 23 46 DD 6E +R 00 00 01 00 +T 84 04 00 00 F8 DD 66 F9 A7 ED 42 38 27 DD 4E +R 00 00 01 00 +T 8F 04 00 00 F6 DD 46 F7 DD 6E F8 DD 66 F9 A7 +R 00 00 01 00 +T 9A 04 00 00 ED 42 38 14 DD 6E F8 DD 66 F9 4E +R 00 00 01 00 +T A5 04 00 00 23 46 DD 6E F6 DD 66 F7 A7 ED 42 +R 00 00 01 00 +T B0 04 00 00 30 02 +R 00 00 01 00 +T B2 04 00 00 +R 00 00 01 00 +T B2 04 00 00 +R 00 00 01 00 +T B2 04 00 00 +R 00 00 01 00 +T B2 04 00 00 +R 00 00 01 00 +T B2 04 00 00 +R 00 00 01 00 +T B2 04 00 00 18 12 +R 00 00 01 00 +T B4 04 00 00 +R 00 00 01 00 +T B4 04 00 00 DD 6E F8 DD 66 F9 46 23 66 68 DD +R 00 00 01 00 +T BF 04 00 00 75 F8 DD 74 F9 18 8E +R 00 00 01 00 +T C6 04 00 00 +R 00 00 01 00 +T C6 04 00 00 DD 6E F6 DD 66 F7 23 23 46 23 66 +R 00 00 01 00 +T D1 04 00 00 68 29 29 DD 4E F6 DD 46 F7 09 E5 +R 00 00 01 00 +T DC 04 00 00 DD 6E F8 DD 66 F9 4E 23 46 E1 A7 +R 00 00 01 00 +T E7 04 00 00 ED 42 20 39 +R 00 00 01 00 +T EB 04 00 00 +R 00 00 01 00 +T EB 04 00 00 DD 6E F8 DD 66 F9 46 23 66 68 23 +R 00 00 01 00 +T F6 04 00 00 23 4E 23 46 DD 6E F6 DD 66 F7 23 +R 00 00 01 00 +T 01 05 00 00 23 7E 81 77 23 7E 88 77 DD 6E F8 +R 00 00 01 00 +T 0C 05 00 00 DD 66 F9 7E 23 66 6F 46 23 66 68 +R 00 00 01 00 +T 17 05 00 00 E5 DD 6E F6 DD 66 F7 C1 71 23 70 +R 00 00 01 00 +T 22 05 00 00 18 15 +R 00 00 01 00 +T 24 05 00 00 +R 00 00 01 00 +T 24 05 00 00 DD 6E F8 DD 66 F9 46 23 66 68 E5 +R 00 00 01 00 +T 2F 05 00 00 DD 6E F6 DD 66 F7 C1 71 23 70 +R 00 00 01 00 +T 39 05 00 00 +R 00 00 01 00 +T 39 05 00 00 DD 6E F8 DD 66 F9 23 23 46 23 66 +R 00 00 01 00 +T 44 05 00 00 68 29 29 DD 4E F8 DD 46 F9 09 DD +R 00 00 01 00 +T 4F 05 00 00 4E F6 DD 46 F7 A7 ED 42 20 31 +R 00 00 01 00 +T 59 05 00 00 +R 00 00 01 00 +T 59 05 00 00 DD 6E F6 DD 66 F7 23 23 4E 23 46 +R 00 00 01 00 +T 64 05 00 00 DD 6E F8 DD 66 F9 23 23 7E 81 77 +R 00 00 01 00 +T 6F 05 00 00 23 7E 88 77 DD 6E F6 DD 66 F7 46 +R 00 00 01 00 +T 7A 05 00 00 23 66 68 E5 DD 6E F8 DD 66 F9 C1 +R 00 00 01 00 +T 85 05 00 00 71 23 70 18 11 +R 00 00 01 00 +T 8A 05 00 00 +R 00 00 01 00 +T 8A 05 00 00 DD 6E F6 DD 66 F7 E5 DD 6E F8 DD +R 00 00 01 00 +T 95 05 00 00 66 F9 C1 71 23 70 +R 00 00 01 00 +T 9B 05 00 00 +R 00 00 01 00 +T 9B 05 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T A3 05 00 00 21 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 05 05 00 02 0A 02 00 +T AA 05 00 00 10 00 00 00 7D B4 28 0E +R 00 00 01 00 00 04 03 00 +T B0 05 00 00 +R 00 00 01 00 +T B0 05 00 00 01 00 00 11 10 00 00 00 3E +R 00 00 01 00 00 08 03 00 +T B7 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 25 00 02 09 25 00 +T BC 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T BE 05 00 00 +R 00 00 01 00 +T BE 05 00 00 21 9E 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 00 05 02 00 +T C7 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 32 00 02 09 32 00 +T CC 05 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 +T D0 05 00 00 +R 00 00 01 00 +T D0 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T D3 05 00 00 +R 00 00 01 00 +T D3 05 00 00 CD 00 00 00 00 FA FF 21 FC FF DD +R 00 00 01 00 02 05 26 00 +T DC 05 00 00 5E 02 DD 56 03 19 DD 75 FC DD 74 +R 00 00 01 00 +T E7 05 00 00 FD 23 23 56 23 66 6A 11 FF FF 19 +R 00 00 01 00 +T F2 05 00 00 29 29 DD 75 FA DD 74 FB 59 50 3E +R 00 00 01 00 +T FD 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 02 06 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 02 00 +T 0B 06 00 00 B4 28 35 +R 00 00 01 00 +T 0E 06 00 00 +R 00 00 01 00 +T 0E 06 00 00 DD 4E 04 DD 46 05 DD 6E FA DD 66 +R 00 00 01 00 +T 19 06 00 00 FB A7 ED 42 30 08 DD 6E FA DD 66 +R 00 00 01 00 +T 24 06 00 00 FB 18 06 +R 00 00 01 00 +T 27 06 00 00 +R 00 00 01 00 +T 27 06 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 2D 06 00 00 +R 00 00 01 00 +T 2D 06 00 00 E5 DD 4E 02 DD 46 03 DD 5E FE DD +R 00 00 01 00 +T 38 06 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 3D 06 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 0B 00 02 09 02 00 +T 43 06 00 00 +R 00 00 01 00 +T 43 06 00 00 DD 5E 02 DD 56 03 3E 05 03 00 00 +R 00 00 01 00 29 0B 01 00 +T 4B 06 00 00 21 05 03 00 00 CD 00 00 00 00 DD +R 00 00 01 00 00 05 01 00 02 0A 02 00 +T 52 06 00 00 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0A 10 00 +T 5A 06 00 00 +R 00 00 01 00 +T 5A 06 00 00 CD 00 00 00 00 FC FF C5 DD 6E 02 +R 00 00 01 00 02 05 26 00 +T 63 06 00 00 DD 66 03 E5 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T 6E 06 00 00 DD 6E 06 DD 66 07 E5 21 +R 00 00 01 00 +T 76 06 00 00 A4 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 00 04 02 00 +T 7E 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 32 00 02 09 32 00 +T 83 06 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T 8C 06 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 97 06 00 00 03 CD 00 00 00 00 DD 73 FC DD 72 +R 00 00 01 00 02 06 27 00 +T A0 06 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T A6 06 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 02 00 +T AF 06 00 00 7D B4 28 19 +R 00 00 01 00 +T B3 06 00 00 +R 00 00 01 00 +T B3 06 00 00 DD 6E FC DD 66 FD E5 01 00 00 DD +R 00 00 01 00 +T BE 06 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T C6 06 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 0A 00 02 09 02 00 +T CC 06 00 00 +R 00 00 01 00 +T CC 06 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 10 00 +T D5 06 00 00 +R 00 00 01 00 +T D5 06 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 26 00 +T DE 06 00 00 66 03 E5 DD 6E 08 DD 66 09 E5 DD +R 00 00 01 00 +T E9 06 00 00 6E 06 DD 66 07 E5 21 C7 00 00 00 +R 00 00 01 00 00 0B 02 00 +T F2 06 00 00 E5 21 01 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 32 00 +T FA 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 32 00 02 09 02 00 +T 01 07 00 00 F1 F1 F1 +R 00 00 01 00 +T 04 07 00 00 +R 00 00 01 00 +T 04 07 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 29 0B 01 00 +T 0C 07 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 00 05 01 00 02 0A 02 00 +T 13 07 00 00 75 FE DD 74 FF 7D B4 20 25 +R 00 00 01 00 +T 1C 07 00 00 +R 00 00 01 00 +T 1C 07 00 00 2A 10 00 00 00 23 22 10 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 23 07 00 00 1E 7E 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 28 07 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 02 00 +T 2E 07 00 00 10 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 1B 00 +T 33 07 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 1B 00 02 09 02 00 +T 39 07 00 00 10 00 00 00 2B 22 10 00 00 00 18 +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 40 07 00 00 C3 +R 00 00 01 00 +T 41 07 00 00 +R 00 00 01 00 +T 41 07 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 10 00 +T 4A 07 00 00 +R 00 00 01 00 +T 4A 07 00 00 CD 00 00 00 00 FC FF C5 DD 6E 02 +R 00 00 01 00 02 05 26 00 +T 53 07 00 00 DD 66 03 E5 DD 6E 08 DD 66 09 E5 +R 00 00 01 00 +T 5E 07 00 00 DD 6E 06 DD 66 07 E5 21 +R 00 00 01 00 +T 66 07 00 00 E3 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 00 04 02 00 +T 6E 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 32 00 02 09 32 00 +T 73 07 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T 7C 07 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 87 07 00 00 03 CD 00 00 00 00 DD 73 FC DD 72 +R 00 00 01 00 02 06 27 00 +T 90 07 00 00 FD 3E D5 06 00 00 21 D5 06 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T 96 07 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 02 00 +T 9F 07 00 00 DD 4E FC DD 46 FD C5 01 00 00 EB +R 00 00 01 00 +T AA 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T B0 07 00 00 00 00 00 00 F1 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 02 00 +T B9 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T BC 07 00 00 +R 00 00 01 00 +T BC 07 00 00 CD 00 00 00 00 FE FF 3E 02 ED 4B +R 00 00 01 00 02 05 26 00 +T C5 07 00 00 1C 00 00 00 2A 1A 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 09 03 00 +T CB 07 00 00 00 00 00 00 59 50 A7 ED 4B +R 00 00 01 00 02 04 19 00 +T D2 07 00 00 00 00 00 00 ED 42 EB ED 4B +R 00 00 01 00 02 04 29 00 +T D9 07 00 00 02 00 00 00 ED 42 38 05 +R 00 00 01 00 02 04 29 00 +T DF 07 00 00 +R 00 00 01 00 +T DF 07 00 00 21 00 00 18 64 +R 00 00 01 00 +T E4 07 00 00 +R 00 00 01 00 +T E4 07 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 29 00 29 0B 01 00 +T EA 07 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 00 05 01 00 02 0A 02 00 +T F1 07 00 00 75 FE DD 74 FF 7D B4 28 13 +R 00 00 01 00 +T FA 07 00 00 +R 00 00 01 00 +T FA 07 00 00 DD 5E FE DD 56 FF 3E 05 03 00 00 +R 00 00 01 00 29 0B 01 00 +T 02 08 00 00 21 05 03 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 01 00 02 0A 02 00 +T 09 08 00 00 00 00 18 3B +R 00 00 01 00 +T 0D 08 00 00 +R 00 00 01 00 +T 0D 08 00 00 21 00 00 E5 21 02 00 E5 ED 4B +R 00 00 01 00 +T 17 08 00 00 02 00 00 00 2A 00 00 00 00 CD +R 00 00 01 00 02 04 29 00 02 09 29 00 +T 1D 08 00 00 00 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 02 04 2B 00 29 0A 01 00 +T 23 08 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T 2A 08 00 00 FE DD 74 FF 7D B4 28 13 +R 00 00 01 00 +T 32 08 00 00 +R 00 00 01 00 +T 32 08 00 00 DD 5E FE DD 56 FF 3E 05 03 00 00 +R 00 00 01 00 29 0B 01 00 +T 3A 08 00 00 21 05 03 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 01 00 02 0A 02 00 +T 41 08 00 00 01 00 18 03 +R 00 00 01 00 +T 45 08 00 00 +R 00 00 01 00 +T 45 08 00 00 21 02 00 +R 00 00 01 00 +T 48 08 00 00 +R 00 00 01 00 +T 48 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 4B 08 00 00 +R 00 00 01 00 +T 4B 08 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 26 00 +T 51 08 00 00 20 00 00 00 E5 2A 1E 00 00 00 E5 +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 58 08 00 00 2A 6A 00 00 00 E5 2A 68 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 5F 08 00 00 E5 21 00 00 E5 21 64 00 E5 ED 4B +R 00 00 01 00 +T 6A 08 00 00 1C 00 00 00 2A 1A 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 09 03 00 +T 70 08 00 00 00 00 00 00 3E 02 CD 00 00 00 00 +R 00 00 01 00 02 04 22 00 02 0B 19 00 +T 77 08 00 00 CD 00 00 00 00 C5 E5 3E 02 ED 4B +R 00 00 01 00 02 05 2D 00 +T 80 08 00 00 1C 00 00 00 2A 1A 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 09 03 00 +T 86 08 00 00 00 00 00 00 C5 E5 2A 6A 00 00 00 +R 00 00 01 00 02 04 19 00 00 0B 03 00 +T 8D 08 00 00 E5 2A 68 00 00 00 E5 0E +R 00 00 01 00 00 06 03 00 +T 93 08 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 2C 00 02 0A 2C 00 +T 99 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2F 00 02 0A 2F 00 +T 9F 08 00 00 00 00 00 00 EB 21 14 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T A8 08 00 00 2A 0E 00 00 00 E5 2A 0C 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T AF 08 00 00 E5 2A 02 00 00 00 E5 2A +R 00 00 01 00 00 06 03 00 +T B5 08 00 00 00 00 00 00 E5 A7 2A 04 00 00 00 +R 00 00 01 00 00 04 03 00 00 0B 03 00 +T BC 08 00 00 ED 4B 08 00 00 00 ED 42 EB 2A +R 00 00 01 00 00 06 03 00 +T C4 08 00 00 06 00 00 00 ED 4B 0A 00 00 00 ED +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T CB 08 00 00 42 E5 D5 2A 0A 00 00 00 E5 2A +R 00 00 01 00 00 08 03 00 +T D3 08 00 00 08 00 00 00 E5 2A 06 00 00 00 E5 +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T DA 08 00 00 2A 04 00 00 00 E5 0E 00 00 00 00 +R 00 00 01 00 00 05 03 00 2B 0B 1A 00 +T E0 08 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 1A 00 +T E6 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2F 00 02 09 2F 00 +T EB 08 00 00 00 00 00 00 EB 21 18 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T F4 08 00 00 2A 18 00 00 00 E5 2A 16 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T FB 08 00 00 E5 2A 14 00 00 00 E5 2A +R 00 00 01 00 00 06 03 00 +T 01 09 00 00 12 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 00 04 03 00 2B 0A 37 00 +T 07 09 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 37 00 2B 0B 2F 00 +T 0D 09 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 2F 00 02 0A 02 00 +T 14 09 00 00 21 0C 00 39 F9 EB 0E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 1C 09 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 08 00 +T 22 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2F 00 02 09 2F 00 +T 27 09 00 00 00 00 00 00 F1 F1 3E 00 00 00 00 +R 00 00 01 00 02 04 02 00 2B 0B 23 00 +T 2D 09 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 23 00 02 0A 02 00 +T 34 09 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 10 00 +T 39 09 00 00 +R 00 00 01 00 +T 39 09 00 00 CD 00 00 00 00 F8 FF AF DD 77 FA +R 00 00 01 00 02 05 26 00 +T 42 09 00 00 DD 77 FB 2A 64 00 00 00 DD 75 F8 +R 00 00 01 00 00 08 03 00 +T 4B 09 00 00 DD 74 F9 +R 00 00 01 00 +T 4E 09 00 00 +R 00 00 01 00 +T 4E 09 00 00 21 64 00 00 00 DD 4E F8 DD 46 F9 +R 00 00 01 00 00 05 03 00 +T 57 09 00 00 A7 ED 42 CA E1 09 00 00 +R 00 00 01 00 00 08 01 00 +T 5D 09 00 00 +R 00 00 01 00 +T 5D 09 00 00 DD 6E F8 DD 66 F9 23 23 46 23 66 +R 00 00 01 00 +T 68 09 00 00 68 29 29 E5 DD 6E F8 DD 66 F9 E5 +R 00 00 01 00 +T 73 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 13 00 02 0B 13 00 +T 79 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2F 00 02 0B 2F 00 +T 7F 09 00 00 CD 00 00 00 00 F1 F1 F1 F1 DD 6E +R 00 00 01 00 02 05 02 00 +T 88 09 00 00 FA DD 66 FB 23 DD 75 FA DD 74 FB +R 00 00 01 00 +T 93 09 00 00 3E 04 AD B4 20 24 +R 00 00 01 00 +T 99 09 00 00 +R 00 00 01 00 +T 99 09 00 00 AF DD 77 FA DD 77 FB 0E +R 00 00 01 00 +T A1 09 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 08 00 02 0A 08 00 +T A7 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2F 00 02 0A 2F 00 +T AD 09 00 00 00 00 00 00 F1 F1 7D A4 3C 20 05 +R 00 00 01 00 02 04 02 00 +T B6 09 00 00 +R 00 00 01 00 +T B6 09 00 00 21 00 00 18 42 +R 00 00 01 00 +T BB 09 00 00 +R 00 00 01 00 +T BB 09 00 00 18 11 +R 00 00 01 00 +T BD 09 00 00 +R 00 00 01 00 +T BD 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1C 00 02 0B 1C 00 +T C3 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2F 00 02 0B 2F 00 +T C9 09 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 02 00 +T CE 09 00 00 +R 00 00 01 00 +T CE 09 00 00 DD 6E F8 DD 66 F9 46 23 66 68 DD +R 00 00 01 00 +T D9 09 00 00 75 F8 DD 74 F9 C3 4E 09 00 00 +R 00 00 01 00 00 0A 01 00 +T E1 09 00 00 +R 00 00 01 00 +T E1 09 00 00 DD 7E FA DD B6 FB 28 11 +R 00 00 01 00 +T E9 09 00 00 +R 00 00 01 00 +T E9 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 08 00 02 0B 08 00 +T EF 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2F 00 02 0B 2F 00 +T F5 09 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 02 00 +T FA 09 00 00 +R 00 00 01 00 +T FA 09 00 00 21 00 00 +R 00 00 01 00 +T FD 09 00 00 +R 00 00 01 00 +T FD 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 00 0A 00 00 +R 00 00 01 00 +T 00 0A 00 00 CD 00 00 00 00 FE FF AF DD 77 FE +R 00 00 01 00 02 05 26 00 +T 09 0A 00 00 DD 77 FF +R 00 00 01 00 +T 0C 0A 00 00 +R 00 00 01 00 +T 0C 0A 00 00 01 10 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 17 0A 00 00 AC 67 ED 42 D2 BF 0A 00 00 +R 00 00 01 00 00 09 01 00 +T 1E 0A 00 00 +R 00 00 01 00 +T 1E 0A 00 00 DD 6E FE DD 66 FF 29 29 01 +R 00 00 01 00 +T 27 0A 00 00 30 00 00 00 09 4E 23 46 23 5E 23 +R 00 00 01 00 00 04 03 00 +T 30 0A 00 00 56 D5 C5 DD 46 FE 11 08 00 CD +R 00 00 01 00 +T 3A 0A 00 00 00 00 00 00 D5 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 21 00 +T 43 0A 00 00 29 29 01 2C 00 00 00 09 4E 23 46 +R 00 00 01 00 00 07 03 00 +T 4C 0A 00 00 23 5E 23 56 D5 C5 DD 46 FE 11 +R 00 00 01 00 +T 56 0A 00 00 04 00 CD 00 00 00 00 D5 DD 6E FE +R 00 00 01 00 02 07 21 00 +T 5F 0A 00 00 DD 66 FF 29 29 01 28 00 00 00 09 +R 00 00 01 00 00 0A 03 00 +T 68 0A 00 00 4E 23 46 23 5E 23 56 D5 C5 DD 46 +R 00 00 01 00 +T 73 0A 00 00 FE 11 02 00 CD 00 00 00 00 D5 DD +R 00 00 01 00 02 09 21 00 +T 7C 0A 00 00 6E FE DD 66 FF 29 29 01 +R 00 00 01 00 +T 84 0A 00 00 24 00 00 00 09 4E 23 46 23 5E 23 +R 00 00 01 00 00 04 03 00 +T 8D 0A 00 00 56 D5 C5 DD 46 FE 11 01 00 CD +R 00 00 01 00 +T 97 0A 00 00 00 00 00 00 D5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 21 00 2B 0A 00 00 +T 9D 0A 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 00 00 2B 0B 2F 00 +T A3 0A 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 2F 00 02 0A 02 00 +T AA 0A 00 00 21 1C 00 39 F9 EB 21 00 00 39 7E +R 00 00 01 00 +T B5 0A 00 00 C6 04 77 30 02 23 34 +R 00 00 01 00 +T BC 0A 00 00 +R 00 00 01 00 +T BC 0A 00 00 C3 0C 0A 00 00 +R 00 00 01 00 00 05 01 00 +T BF 0A 00 00 +R 00 00 01 00 +T BF 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T C5 0A 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 02 00 +T CB 0A 00 00 00 00 00 00 +R 00 00 01 00 02 04 10 00 +T CD 0A 00 00 +R 00 00 01 00 +T CD 0A 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 1F 00 +T D6 0A 00 00 E5 C5 4B 42 11 00 00 00 00 3E +R 00 00 01 00 00 09 04 00 +T DE 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 39 00 02 09 39 00 +T E3 0A 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 0B 10 00 +T EA 0A 00 00 +R 00 00 01 00 +T EA 0A 00 00 CD 00 00 00 00 C5 D5 0E +R 00 00 01 00 02 05 1F 00 +T F0 0A 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0E 00 02 0A 0E 00 +T F6 0A 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 29 00 2B 0A 36 00 +T FC 0A 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 36 00 02 09 02 00 +T 03 0B 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 10 00 +T 08 0B 00 00 +R 00 00 01 00 +T 08 0B 00 00 CD 00 00 00 00 F8 FF 2A +R 00 00 01 00 02 05 26 00 +T 0E 0B 00 00 22 00 00 00 DD 75 F8 DD 74 F9 C5 +R 00 00 01 00 00 04 03 00 +T 17 0B 00 00 DD 4E 02 DD 46 03 C5 0E +R 00 00 01 00 +T 1F 0B 00 00 00 00 00 00 C5 01 00 00 00 00 C5 +R 00 00 01 00 2B 04 34 00 02 0A 34 00 +T 25 0B 00 00 11 22 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 03 00 2B 0A 33 00 +T 2B 0B 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 33 00 02 09 02 00 +T 32 0B 00 00 F1 F1 3E 01 DD AE F8 DD B6 F9 28 +R 00 00 01 00 +T 3D 0B 00 00 07 2A 22 00 00 00 7D B4 20 05 +R 00 00 01 00 00 06 03 00 +T 45 0B 00 00 +R 00 00 01 00 +T 45 0B 00 00 +R 00 00 01 00 +T 45 0B 00 00 +R 00 00 01 00 +T 45 0B 00 00 21 00 00 18 03 +R 00 00 01 00 +T 4A 0B 00 00 +R 00 00 01 00 +T 4A 0B 00 00 21 00 00 +R 00 00 01 00 +T 4D 0B 00 00 +R 00 00 01 00 +T 4D 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 10 00 +T 50 0B 00 00 +R 00 00 01 00 +T 50 0B 00 00 CD 00 00 00 00 FC FF +R 00 00 01 00 02 05 26 00 +T 55 0B 00 00 +R 00 00 01 00 +T 55 0B 00 00 +R 00 00 01 00 +T 55 0B 00 00 01 00 00 11 C8 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 5D 0B 00 00 21 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 05 0C 00 02 0A 02 00 +T 64 0B 00 00 BC 07 00 00 21 BC 07 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 69 0B 00 00 00 00 00 00 EB CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 0A 06 00 +T 6F 0B 00 00 00 00 03 00 B2 0B 00 00 +R 00 00 01 00 00 08 01 00 +T 75 0B 00 00 7B 0B 00 00 7D 0B 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 79 0B 00 00 97 0B 00 00 +R 00 00 01 00 00 04 01 00 +T 7B 0B 00 00 +R 00 00 01 00 +T 7B 0B 00 00 18 D8 +R 00 00 01 00 +T 7D 0B 00 00 +R 00 00 01 00 +T 7D 0B 00 00 AF DD 77 FE DD 77 FF 2A +R 00 00 01 00 +T 85 0B 00 00 12 00 00 00 ED 4B 14 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 8C 0B 00 00 00 00 00 00 22 12 00 00 00 ED 43 +R 00 00 01 00 02 04 0D 00 00 09 03 00 +T 93 0B 00 00 14 00 00 00 18 1B +R 00 00 01 00 00 04 03 00 +T 97 0B 00 00 +R 00 00 01 00 +T 97 0B 00 00 DD 36 FE 01 DD 36 FF 00 2A +R 00 00 01 00 +T A0 0B 00 00 16 00 00 00 ED 4B 18 00 00 00 CD +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T A7 0B 00 00 00 00 00 00 22 16 00 00 00 ED 43 +R 00 00 01 00 02 04 0D 00 00 09 03 00 +T AE 0B 00 00 18 00 00 00 18 00 +R 00 00 01 00 00 04 03 00 +T B2 0B 00 00 +R 00 00 01 00 +T B2 0B 00 00 DD 36 FC 00 00 00 00 DD 36 FD +R 00 00 01 00 0B 07 2A 00 +T B9 0B 00 00 00 00 00 00 +R 00 00 01 00 8B 04 2A 00 +T BA 0B 00 00 +R 00 00 01 00 +T BA 0B 00 00 DD 6E FC DD 66 FD 7E 23 B6 23 B6 +R 00 00 01 00 +T C5 0B 00 00 28 25 +R 00 00 01 00 +T C7 0B 00 00 +R 00 00 01 00 +T C7 0B 00 00 DD 5E FE DD 56 FF DD 6E FC DD 66 +R 00 00 01 00 +T D2 0B 00 00 FD 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T DB 0B 00 00 00 00 00 00 DD 7E FC C6 03 DD 77 +R 00 00 01 00 02 04 02 00 +T E4 0B 00 00 FC 30 03 DD 34 FD +R 00 00 01 00 +T EA 0B 00 00 +R 00 00 01 00 +T EA 0B 00 00 18 CE +R 00 00 01 00 +T EC 0B 00 00 +R 00 00 01 00 +T EC 0B 00 00 C3 55 0B 00 00 +R 00 00 01 00 00 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 0A 25 30 34 78 3A 25 30 34 78 20 +R 00 00 02 00 +T 0B 00 00 00 6D 61 6C 6C 6F 63 28 30 78 25 30 +R 00 00 02 00 +T 16 00 00 00 34 78 29 20 00 +R 00 00 02 00 +T 1B 00 00 00 +R 00 00 02 00 +T 1B 00 00 00 3D 20 6E 6F 70 20 00 +R 00 00 02 00 +T 22 00 00 00 +R 00 00 02 00 +T 22 00 00 00 3D 20 30 78 25 30 34 78 20 00 +R 00 00 02 00 +T 2C 00 00 00 +R 00 00 02 00 +T 2C 00 00 00 0A 25 30 34 78 3A 25 30 34 78 20 +R 00 00 02 00 +T 37 00 00 00 6D 6F 72 65 63 6F 72 65 28 30 78 +R 00 00 02 00 +T 42 00 00 00 25 30 34 78 29 20 00 +R 00 00 02 00 +T 49 00 00 00 +R 00 00 02 00 +T 49 00 00 00 3D 20 66 61 69 6C 20 00 +R 00 00 02 00 +T 51 00 00 00 +R 00 00 02 00 +T 51 00 00 00 0A 25 30 34 78 3A 25 30 34 78 20 +R 00 00 02 00 +T 5C 00 00 00 66 72 65 65 28 30 78 25 30 34 78 +R 00 00 02 00 +T 67 00 00 00 29 20 00 +R 00 00 02 00 +T 6A 00 00 00 +R 00 00 02 00 +T 6A 00 00 00 66 72 65 65 3A 20 57 41 52 4E 49 +R 00 00 02 00 +T 75 00 00 00 4E 47 21 20 69 6E 76 61 6C 69 64 +R 00 00 02 00 +T 80 00 00 00 20 70 6F 69 6E 74 65 72 20 28 25 +R 00 00 02 00 +T 8B 00 00 00 70 29 20 70 72 6F 63 20 25 73 0A +R 00 00 02 00 +T 96 00 00 00 00 +R 00 00 02 00 +T 97 00 00 00 +R 00 00 02 00 +T 97 00 00 00 3D 20 62 61 64 20 00 +R 00 00 02 00 +T 9E 00 00 00 +R 00 00 02 00 +T 9E 00 00 00 3D 20 6F 6B 20 00 +R 00 00 02 00 +T A4 00 00 00 +R 00 00 02 00 +T A4 00 00 00 0A 25 30 34 78 3A 25 30 34 78 20 +R 00 00 02 00 +T AF 00 00 00 63 61 6C 6C 6F 63 28 30 78 25 30 +R 00 00 02 00 +T BA 00 00 00 34 78 2C 20 30 78 25 30 34 78 29 +R 00 00 02 00 +T C5 00 00 00 20 00 +R 00 00 02 00 +T C7 00 00 00 +R 00 00 02 00 +T C7 00 00 00 0A 25 30 34 78 3A 25 30 34 78 20 +R 00 00 02 00 +T D2 00 00 00 6D 61 6C 6C 6F 63 77 28 30 78 25 +R 00 00 02 00 +T DD 00 00 00 30 34 78 29 20 00 +R 00 00 02 00 +T E3 00 00 00 +R 00 00 02 00 +T E3 00 00 00 0A 25 30 34 78 3A 25 30 34 78 20 +R 00 00 02 00 +T EE 00 00 00 63 61 6C 6C 6F 63 77 28 30 78 25 +R 00 00 02 00 +T F9 00 00 00 30 34 78 2C 20 30 78 25 30 34 78 +R 00 00 02 00 +T 04 01 00 00 29 20 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 +T 0C 00 00 00 +R 00 00 03 00 +T 0C 00 00 00 +R 00 00 03 00 +T 10 00 00 00 +R 00 00 03 00 +T 10 00 00 00 +R 00 00 03 00 +T 12 00 00 00 +R 00 00 03 00 +T 12 00 00 00 +R 00 00 03 00 +T 16 00 00 00 +R 00 00 03 00 +T 16 00 00 00 +R 00 00 03 00 +T 1A 00 00 00 +R 00 00 03 00 +T 1A 00 00 00 +R 00 00 03 00 +T 1E 00 00 00 +R 00 00 03 00 +T 1E 00 00 00 +R 00 00 03 00 +T 22 00 00 00 +R 00 00 03 00 +T 22 00 00 00 +R 00 00 03 00 +T 24 00 00 00 +R 00 00 03 00 +T 24 00 00 00 +R 00 00 03 00 +T 64 00 00 00 +R 00 00 03 00 +T 64 00 00 00 +R 00 00 03 00 +T 68 00 00 00 +R 00 00 03 00 +T 68 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 4E 00 00 00 +R 00 00 04 00 +T 4E 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 00 00 08 0B 00 00 00 00 +R 00 00 05 00 4A 04 01 00 48 08 01 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 20 00 +T 10 00 00 00 39 09 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T 1A 00 00 00 00 00 00 00 00 0A 00 00 00 00 +R 00 00 05 00 4A 04 24 00 48 08 01 00 +T 22 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 03 00 +T 2A 00 00 00 4B 08 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T 34 00 00 00 00 00 00 00 EA 0A 00 00 00 00 +R 00 00 05 00 4A 04 30 00 48 08 01 00 +T 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 47 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 diff --git a/src/nos/lib/net_lib/alloc_mbuf.rel b/src/nos/lib/net_lib/alloc_mbuf.rel new file mode 100644 index 00000000..76345e09 --- /dev/null +++ b/src/nos/lib/net_lib/alloc_mbuf.rel @@ -0,0 +1,215 @@ +XL4 +H 3 areas 12 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _Allocmbufs Ref00000000 +S _memset Ref00000000 +S _Cachehits Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _ilog2 Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dprintf Ref00000000 +S _malloc Ref00000000 +S _Msizes Ref00000000 +S _Mbufcache Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F8 flags 0 +S _alloc_mbuf Def00000000 +A CSTR size 2F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 DD 77 FB DD 6E 02 DD 66 03 E5 DD +R 00 00 01 00 +T 14 00 00 00 6E 08 DD 66 09 E5 DD 6E 06 DD 66 +R 00 00 01 00 +T 1F 00 00 00 07 E5 21 00 00 00 00 E5 21 01 00 +R 00 00 01 00 00 07 02 00 +T 28 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 2E 00 00 00 CD 00 00 00 00 F1 F1 F1 F1 F1 2A +R 00 00 01 00 02 05 00 00 +T 37 00 00 00 00 00 00 00 ED 4B 02 00 00 00 CD +R 00 00 01 00 02 04 02 00 02 0A 02 00 +T 3E 00 00 00 00 00 00 00 22 00 00 00 00 ED 43 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 45 00 00 00 02 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 02 00 +T 4E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 53 00 00 00 00 00 00 00 DD 75 FC DD 74 FD CB +R 00 00 01 00 02 04 00 00 +T 5C 00 00 00 7C 20 0F +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E FC DD 66 FD 29 29 01 +R 00 00 01 00 +T 68 00 00 00 00 00 00 00 09 CD 00 00 00 00 +R 00 00 01 00 02 04 0F 00 02 0A 0B 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 4E 02 DD 46 03 21 20 00 A7 ED +R 00 00 01 00 +T 79 00 00 00 42 38 11 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 AF DD 77 FC DD 77 FD DD 36 02 20 +R 00 00 01 00 +T 87 00 00 00 DD 36 03 00 18 48 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 DD 4E 02 DD 46 03 21 80 00 A7 ED +R 00 00 01 00 +T 98 00 00 00 42 38 12 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 DD 36 FC 01 DD 36 FD 00 DD 36 02 +R 00 00 01 00 +T A6 00 00 00 80 DD 36 03 00 18 28 +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 DD 4E 02 DD 46 03 21 00 08 A7 ED +R 00 00 01 00 +T B8 00 00 00 42 38 12 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 DD 36 FC 02 DD 36 FD 00 DD 36 02 +R 00 00 01 00 +T C6 00 00 00 00 DD 36 03 08 18 08 +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 DD 36 FC 03 DD 36 FD 00 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 01 03 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T E0 00 00 00 AC 67 ED 42 D2 70 01 00 00 +R 00 00 01 00 00 09 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T ED 00 00 00 00 00 00 00 DD 75 FE DD 74 FF DD +R 00 00 01 00 02 04 00 00 +T F6 00 00 00 6E FC DD 66 FD 29 01 00 00 00 00 +R 00 00 01 00 02 0B 10 00 +T FF 00 00 00 09 7E 23 B6 28 5D +R 00 00 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 DD 6E FC DD 66 FD 29 01 +R 00 00 01 00 +T 0D 01 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 02 04 10 00 +T 16 01 00 00 FA DD 74 FB DD 6E FC DD 66 FD 29 +R 00 00 01 00 +T 21 01 00 00 01 00 00 00 00 09 E5 DD 4E FA DD +R 00 00 01 00 02 05 10 00 +T 2A 01 00 00 46 FB 03 03 69 60 4E 23 46 E1 71 +R 00 00 01 00 +T 35 01 00 00 23 70 2A 00 00 00 00 ED 4B +R 00 00 01 00 02 07 04 00 +T 3C 01 00 00 02 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 04 04 00 02 09 05 00 +T 42 01 00 00 00 00 00 00 ED 43 02 00 00 00 DD +R 00 00 01 00 02 04 04 00 02 0A 04 00 +T 49 01 00 00 6E FA DD 66 FB E5 21 1F 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 52 01 00 00 E5 21 01 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T 5A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 61 01 00 00 F1 +R 00 00 01 00 +T 62 01 00 00 +R 00 00 01 00 +T 62 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 6A 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 DD 7E FA DD B6 FB 20 19 +R 00 00 01 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 21 0E 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 83 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0E 00 02 0A 0E 00 +T 89 01 00 00 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 00 00 +T 91 01 00 00 +R 00 00 01 00 +T 91 01 00 00 DD 7E FA DD B6 FB 20 05 +R 00 00 01 00 +T 99 01 00 00 +R 00 00 01 00 +T 99 01 00 00 21 00 00 18 57 +R 00 00 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 21 0E 00 E5 01 00 00 DD 5E FA DD +R 00 00 01 00 +T A9 01 00 00 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T AE 01 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T B5 01 00 00 04 00 DD 4E FA DD 46 FB 09 DD 4E +R 00 00 01 00 +T C0 01 00 00 02 DD 46 03 71 23 70 DD 7E 02 DD +R 00 00 01 00 +T CB 01 00 00 B6 03 28 15 +R 00 00 01 00 +T CF 01 00 00 +R 00 00 01 00 +T CF 01 00 00 21 0A 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T DA 01 00 00 21 0E 00 09 4D 44 E1 71 23 70 +R 00 00 01 00 +T E4 01 00 00 +R 00 00 01 00 +T E4 01 00 00 21 06 00 DD 4E FA DD 46 FB 09 34 +R 00 00 01 00 +T EF 01 00 00 23 20 01 34 +R 00 00 01 00 +T F3 01 00 00 +R 00 00 01 00 +T F3 01 00 00 69 60 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 0A 25 30 34 78 3A 25 30 34 78 20 +R 00 00 02 00 +T 0B 00 00 00 61 6C 6C 6F 63 5F 6D 62 75 66 28 +R 00 00 02 00 +T 16 00 00 00 30 78 25 30 34 78 29 20 00 +R 00 00 02 00 +T 1F 00 00 00 +R 00 00 02 00 +T 1F 00 00 00 3D 20 63 61 63 68 65 20 30 78 25 +R 00 00 02 00 +T 2A 00 00 00 30 34 78 20 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/ambufw.rel b/src/nos/lib/net_lib/ambufw.rel new file mode 100644 index 00000000..8248df1f --- /dev/null +++ b/src/nos/lib/net_lib/ambufw.rel @@ -0,0 +1,203 @@ +XL4 +H 3 areas 12 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _Allocmbufs Ref00000000 +S _memset Ref00000000 +S _Cachehits Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _ilog2 Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _mallocw Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dprintf Ref00000000 +S _Msizes Ref00000000 +S _Mbufcache Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1EB flags 0 +S _ambufw Def00000000 +A CSTR size 2B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 DD 77 FB DD 6E 02 DD 66 03 E5 DD +R 00 00 01 00 +T 14 00 00 00 6E 08 DD 66 09 E5 DD 6E 06 DD 66 +R 00 00 01 00 +T 1F 00 00 00 07 E5 21 00 00 00 00 E5 21 01 00 +R 00 00 01 00 00 07 02 00 +T 28 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 2E 00 00 00 CD 00 00 00 00 F1 F1 F1 F1 F1 2A +R 00 00 01 00 02 05 00 00 +T 37 00 00 00 00 00 00 00 ED 4B 02 00 00 00 CD +R 00 00 01 00 02 04 02 00 02 0A 02 00 +T 3E 00 00 00 00 00 00 00 22 00 00 00 00 ED 43 +R 00 00 01 00 02 04 05 00 02 09 02 00 +T 45 00 00 00 02 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 02 00 +T 4E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 53 00 00 00 00 00 00 00 DD 75 FC DD 74 FD CB +R 00 00 01 00 02 04 00 00 +T 5C 00 00 00 7C 20 0F +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E FC DD 66 FD 29 29 01 +R 00 00 01 00 +T 68 00 00 00 00 00 00 00 09 CD 00 00 00 00 +R 00 00 01 00 02 04 0F 00 02 0A 0B 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 4E 02 DD 46 03 21 20 00 A7 ED +R 00 00 01 00 +T 79 00 00 00 42 38 11 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 AF DD 77 FC DD 77 FD DD 36 02 20 +R 00 00 01 00 +T 87 00 00 00 DD 36 03 00 18 48 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 DD 4E 02 DD 46 03 21 80 00 A7 ED +R 00 00 01 00 +T 98 00 00 00 42 38 12 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 DD 36 FC 01 DD 36 FD 00 DD 36 02 +R 00 00 01 00 +T A6 00 00 00 80 DD 36 03 00 18 28 +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 DD 4E 02 DD 46 03 21 00 08 A7 ED +R 00 00 01 00 +T B8 00 00 00 42 38 12 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 DD 36 FC 02 DD 36 FD 00 DD 36 02 +R 00 00 01 00 +T C6 00 00 00 00 DD 36 03 08 18 08 +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 DD 36 FC 03 DD 36 FD 00 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 01 03 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T E0 00 00 00 AC 67 ED 42 D2 70 01 00 00 +R 00 00 01 00 00 09 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T ED 00 00 00 00 00 00 00 DD 75 FE DD 74 FF DD +R 00 00 01 00 02 04 00 00 +T F6 00 00 00 6E FC DD 66 FD 29 01 00 00 00 00 +R 00 00 01 00 02 0B 10 00 +T FF 00 00 00 09 7E 23 B6 28 5D +R 00 00 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 DD 6E FC DD 66 FD 29 01 +R 00 00 01 00 +T 0D 01 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 02 04 10 00 +T 16 01 00 00 FA DD 74 FB DD 6E FC DD 66 FD 29 +R 00 00 01 00 +T 21 01 00 00 01 00 00 00 00 09 E5 DD 4E FA DD +R 00 00 01 00 02 05 10 00 +T 2A 01 00 00 46 FB 03 03 69 60 4E 23 46 E1 71 +R 00 00 01 00 +T 35 01 00 00 23 70 2A 00 00 00 00 ED 4B +R 00 00 01 00 02 07 04 00 +T 3C 01 00 00 02 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 04 04 00 02 09 05 00 +T 42 01 00 00 00 00 00 00 ED 43 02 00 00 00 DD +R 00 00 01 00 02 04 04 00 02 0A 04 00 +T 49 01 00 00 6E FA DD 66 FB E5 21 1B 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 52 01 00 00 E5 21 01 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T 5A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 61 01 00 00 F1 +R 00 00 01 00 +T 62 01 00 00 +R 00 00 01 00 +T 62 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 6A 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 DD 7E FA DD B6 FB 20 19 +R 00 00 01 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 21 0E 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 83 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T 89 01 00 00 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 00 00 +T 91 01 00 00 +R 00 00 01 00 +T 91 01 00 00 21 0E 00 E5 01 00 00 DD 5E FA DD +R 00 00 01 00 +T 9C 01 00 00 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T A1 01 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T A8 01 00 00 04 00 DD 4E FA DD 46 FB 09 DD 4E +R 00 00 01 00 +T B3 01 00 00 02 DD 46 03 71 23 70 DD 7E 02 DD +R 00 00 01 00 +T BE 01 00 00 B6 03 28 15 +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 21 0A 00 DD 4E FA DD 46 FB 09 E5 +R 00 00 01 00 +T CD 01 00 00 21 0E 00 09 4D 44 E1 71 23 70 +R 00 00 01 00 +T D7 01 00 00 +R 00 00 01 00 +T D7 01 00 00 21 06 00 DD 4E FA DD 46 FB 09 34 +R 00 00 01 00 +T E2 01 00 00 23 20 01 34 +R 00 00 01 00 +T E6 01 00 00 +R 00 00 01 00 +T E6 01 00 00 69 60 C3 00 00 00 00 +R 00 00 01 00 02 07 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 0A 25 30 34 78 3A 25 30 34 78 20 +R 00 00 02 00 +T 0B 00 00 00 61 6D 62 75 66 77 28 30 78 25 30 +R 00 00 02 00 +T 16 00 00 00 34 78 29 20 00 +R 00 00 02 00 +T 1B 00 00 00 +R 00 00 02 00 +T 1B 00 00 00 3D 20 63 61 63 68 65 20 30 78 25 +R 00 00 02 00 +T 26 00 00 00 30 34 78 20 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/append.rel b/src/nos/lib/net_lib/append.rel new file mode 100644 index 00000000..51f621a7 --- /dev/null +++ b/src/nos/lib/net_lib/append.rel @@ -0,0 +1,69 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 93 flags 0 +S _append Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 B6 03 28 13 DD 7E 04 DD B6 05 28 +R 00 00 01 00 +T 14 00 00 00 0B DD 6E 04 DD 66 05 7E 23 B6 20 +R 00 00 01 00 +T 1F 00 00 00 02 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 18 6E +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 DD 6E 02 DD 66 03 7E 23 B6 20 17 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 E5 +R 00 00 01 00 +T 38 00 00 00 DD 6E 02 DD 66 03 C1 71 23 70 18 +R 00 00 01 00 +T 43 00 00 00 42 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T 4F 00 00 00 75 FE DD 74 FF +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 6E FE DD 66 FF 7E 23 B6 28 12 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T 6A 00 00 00 75 FE DD 74 FF 18 E3 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 E5 +R 00 00 01 00 +T 7C 00 00 00 DD 6E FE DD 66 FF C1 71 23 70 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 DD 6E 04 DD 66 05 AF 77 23 77 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/net_lib/asyopen.rel b/src/nos/lib/net_lib/asyopen.rel new file mode 100644 index 00000000..ce9a0382 --- /dev/null +++ b/src/nos/lib/net_lib/asyopen.rel @@ -0,0 +1,107 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fcreat Ref00000000 +S _strchr Ref00000000 +S _asy_open Ref00000000 +S .__.ABS. Def00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D7 flags 0 +S _asyopen Def00000000 +A CSTR size 5 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FE +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 DD 77 FF DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 00 00 +T 21 00 00 00 A4 3C 20 06 +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 21 00 00 C3 D4 00 00 00 +R 00 00 01 00 00 08 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 31 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 00 00 +T 3A 00 00 00 B4 20 06 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 00 00 C3 D4 00 00 00 +R 00 00 01 00 00 08 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 01 74 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 4D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 52 00 00 00 00 00 00 00 7D B4 28 08 +R 00 00 01 00 02 04 00 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 21 08 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 6B 00 00 00 5E FC DD 56 FD 73 23 72 21 0E 00 +R 00 00 01 00 +T 76 00 00 00 09 36 02 21 0F 00 09 36 01 21 +R 00 00 01 00 +T 80 00 00 00 10 00 09 DD CB FE 46 28 04 CB D6 +R 00 00 01 00 +T 8B 00 00 00 18 02 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 CB 96 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 21 19 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T 9A 00 00 00 80 23 36 00 01 72 00 DD 5E 04 DD +R 00 00 01 00 +T A5 00 00 00 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T AA 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T B1 00 00 00 28 05 01 00 00 00 00 18 03 +R 00 00 01 00 00 07 02 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 01 02 00 00 00 +R 00 00 01 00 00 05 02 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 21 16 00 DD 5E FA DD 56 FB 19 EB +R 00 00 01 00 +T C6 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T CC 00 00 00 00 00 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 02 04 00 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 0D 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 0D 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/audit.rel b/src/nos/lib/net_lib/audit.rel new file mode 100644 index 00000000..5ff760ea --- /dev/null +++ b/src/nos/lib/net_lib/audit.rel @@ -0,0 +1,325 @@ +XL4 +H 2 areas 15 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___027e_b9a0_Garbage_20bp_20_25l Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___0423_72d6_bp_20_25lx_20tot_20 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ___0230_cb1c_Data_20outside_20he Ref00000000 +S ___0406_94f6_anext_20pointer_20o Ref00000000 +S ___0232_3cbb_Data_20pointer_20be Ref00000000 +S ___04fd_7718_next_20pointer_20ou Ref00000000 +S ___0320_281b_PANIC_3a_20buffer_2 Ref00000000 +S __Uend Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __STKRED Ref00000000 +S __printf Ref00000000 +S ___0303_998c_NULL_20BUFFER_0a Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0231_01be_Data_20pointer_20_2 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 341 flags 0 +S _audit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 0E 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 7E FE DD B6 FF 28 29 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 24 00 00 00 46 05 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 2D 00 00 00 45 00 00 00 E1 DD 6E FE DD 66 FF +R 00 00 01 00 00 04 01 00 +T 36 00 00 00 46 23 66 68 DD 75 FE DD 74 FF 18 +R 00 00 01 00 +T 41 00 00 00 CF +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 CD 00 00 00 00 F0 FF DD 36 F6 12 +R 00 00 01 00 02 05 0E 00 +T 4E 00 00 00 DD 36 F7 00 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T 59 00 00 00 DD 7E 02 DD B6 03 20 03 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 C3 A9 02 00 00 +R 00 00 01 00 00 05 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 36 FC 00 00 00 00 DD 36 FD +R 00 00 01 00 0B 07 0D 00 +T 6B 00 00 00 00 00 00 00 ED 4B 00 00 00 00 A7 +R 00 00 01 00 8B 04 0D 00 02 0A 0F 00 +T 71 00 00 00 21 00 00 ED 42 DD 75 FE DD 74 FF +R 00 00 01 00 +T 7C 00 00 00 21 FC FF DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 87 00 00 00 75 F0 DD 74 F1 E5 4D 44 69 60 4E +R 00 00 01 00 +T 92 00 00 00 23 46 E1 A7 ED 42 28 26 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 DD 6E 02 DD 66 03 01 00 00 C5 E5 +R 00 00 01 00 +T A5 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T AB 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T B1 00 00 00 CD 00 00 00 00 F1 F1 F1 F1 DD 34 +R 00 00 01 00 02 05 00 00 +T BA 00 00 00 FA 20 03 DD 34 FB +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 DD 6E F0 DD 66 F1 23 23 46 23 66 +R 00 00 01 00 +T CB 00 00 00 68 29 29 DD 4E F6 DD 46 F7 A7 ED +R 00 00 01 00 +T D6 00 00 00 42 DD 75 F8 DD 74 F9 7D B4 CA +R 00 00 01 00 +T E0 00 00 00 6B 01 00 00 +R 00 00 01 00 00 04 01 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 21 0E 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T ED 00 00 00 75 F2 DD 74 F3 DD 5E F8 DD 56 F9 +R 00 00 01 00 +T F8 00 00 00 19 DD 75 F4 DD 74 F5 21 0A 00 09 +R 00 00 01 00 +T 03 01 00 00 46 23 66 68 DD 4E F2 DD 46 F3 A7 +R 00 00 01 00 +T 0E 01 00 00 ED 42 30 19 +R 00 00 01 00 +T 12 01 00 00 +R 00 00 01 00 +T 12 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T 18 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 1E 01 00 00 CD 00 00 00 00 F1 F1 DD 34 FA 20 +R 00 00 01 00 02 05 00 00 +T 27 01 00 00 03 DD 34 FB +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 21 0A 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 36 01 00 00 23 66 6A E5 21 0C 00 09 4E 23 46 +R 00 00 01 00 +T 41 01 00 00 E1 09 4D 44 DD 6E F4 DD 66 F5 A7 +R 00 00 01 00 +T 4C 01 00 00 ED 42 30 19 +R 00 00 01 00 +T 50 01 00 00 +R 00 00 01 00 +T 50 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 13 00 02 0B 13 00 +T 56 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 5C 01 00 00 CD 00 00 00 00 F1 F1 DD 34 FA 20 +R 00 00 01 00 02 05 00 00 +T 65 01 00 00 03 DD 34 FB +R 00 00 01 00 +T 69 01 00 00 +R 00 00 01 00 +T 69 01 00 00 +R 00 00 01 00 +T 69 01 00 00 18 57 +R 00 00 01 00 +T 6B 01 00 00 +R 00 00 01 00 +T 6B 01 00 00 21 0A 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 76 01 00 00 23 66 68 DD 4E FC DD 46 FD A7 ED +R 00 00 01 00 +T 81 01 00 00 42 38 25 21 0A 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 8C 01 00 00 03 09 56 23 66 6A E5 21 0C 00 09 +R 00 00 01 00 +T 97 01 00 00 4E 23 46 E1 09 4D 44 DD 6E FE DD +R 00 00 01 00 +T A2 01 00 00 66 FF A7 ED 42 30 19 +R 00 00 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 08 00 02 0B 08 00 +T AF 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T B5 01 00 00 CD 00 00 00 00 F1 F1 DD 34 FA 20 +R 00 00 01 00 02 05 00 00 +T BE 01 00 00 03 DD 34 FB +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 DD 6E 02 DD 66 03 7E 23 B6 28 42 +R 00 00 01 00 +T CD 01 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T D8 01 00 00 4E FC DD 46 FD A7 ED 42 38 14 DD +R 00 00 01 00 +T E3 01 00 00 6E 02 DD 66 03 4E 23 46 DD 6E FE +R 00 00 01 00 +T EE 01 00 00 DD 66 FF A7 ED 42 30 19 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0B 00 02 0B 0B 00 +T FC 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 02 02 00 00 CD 00 00 00 00 F1 F1 DD 34 FA 20 +R 00 00 01 00 02 05 00 00 +T 0B 02 00 00 03 DD 34 FB +R 00 00 01 00 +T 0F 02 00 00 +R 00 00 01 00 +T 0F 02 00 00 +R 00 00 01 00 +T 0F 02 00 00 DD 6E 02 DD 66 03 23 23 7E 23 B6 +R 00 00 01 00 +T 1A 02 00 00 28 46 DD 6E 02 DD 66 03 23 23 46 +R 00 00 01 00 +T 25 02 00 00 23 66 68 DD 4E FC DD 46 FD A7 ED +R 00 00 01 00 +T 30 02 00 00 42 38 16 DD 6E 02 DD 66 03 23 23 +R 00 00 01 00 +T 3B 02 00 00 4E 23 46 DD 6E FE DD 66 FF A7 ED +R 00 00 01 00 +T 46 02 00 00 42 30 19 +R 00 00 01 00 +T 49 02 00 00 +R 00 00 01 00 +T 49 02 00 00 +R 00 00 01 00 +T 49 02 00 00 +R 00 00 01 00 +T 49 02 00 00 +R 00 00 01 00 +T 49 02 00 00 +R 00 00 01 00 +T 49 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 09 00 02 0B 09 00 +T 4F 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 55 02 00 00 CD 00 00 00 00 F1 F1 DD 34 FA 20 +R 00 00 01 00 02 05 00 00 +T 5E 02 00 00 03 DD 34 FB +R 00 00 01 00 +T 62 02 00 00 +R 00 00 01 00 +T 62 02 00 00 +R 00 00 01 00 +T 62 02 00 00 DD 7E FA DD B6 FB 28 3F +R 00 00 01 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 DD 5E 02 DD 56 03 CD AC 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 73 02 00 00 DD 6E 08 DD 66 09 E5 DD 6E 04 DD +R 00 00 01 00 +T 7E 02 00 00 66 05 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0C 00 +T 85 02 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0C 00 2B 0A 10 00 +T 8B 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T 92 02 00 00 F1 F1 21 40 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 9B 02 00 00 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T A2 02 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T A7 02 00 00 +R 00 00 01 00 +T A7 02 00 00 18 FE +R 00 00 01 00 +T A9 02 00 00 +R 00 00 01 00 +T A9 02 00 00 +R 00 00 01 00 +T A9 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T AC 02 00 00 +R 00 00 01 00 +T AC 02 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 0E 00 +T B5 02 00 00 B6 03 20 13 +R 00 00 01 00 +T B9 02 00 00 +R 00 00 01 00 +T B9 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 11 00 02 0B 11 00 +T BF 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T C5 02 00 00 CD 00 00 00 00 F1 F1 18 72 +R 00 00 01 00 02 05 00 00 +T CC 02 00 00 +R 00 00 01 00 +T CC 02 00 00 21 FC FF DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T D7 02 00 00 75 FE DD 74 FF 03 03 0A 6F 03 0A +R 00 00 01 00 +T E2 02 00 00 67 11 00 00 D5 E5 DD 6E 02 DD 66 +R 00 00 01 00 +T ED 02 00 00 03 46 23 66 68 01 00 00 C5 E5 21 +R 00 00 01 00 +T F8 02 00 00 0C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 03 03 00 00 56 D5 21 0A 00 09 56 23 66 6A 11 +R 00 00 01 00 +T 0E 03 00 00 00 00 D5 E5 DD 6E FE DD 66 FF 23 +R 00 00 01 00 +T 19 03 00 00 23 56 23 66 6A 29 29 E5 69 60 11 +R 00 00 01 00 +T 24 03 00 00 00 00 D5 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 05 00 +T 2C 03 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 2B 0A 10 00 +T 32 03 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T 39 03 00 00 18 00 39 F9 EB +R 00 00 01 00 +T 3E 03 00 00 +R 00 00 01 00 +T 3E 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/net_lib/bind.rel b/src/nos/lib/net_lib/bind.rel new file mode 100644 index 00000000..b420d1a0 --- /dev/null +++ b/src/nos/lib/net_lib/bind.rel @@ -0,0 +1,124 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 133 flags 0 +S _bind Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 7D B4 20 0C +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 26 00 00 00 C3 30 01 00 00 +R 00 00 01 00 00 05 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 7E 04 DD B6 05 20 0C +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 21 0E 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 3A 00 00 00 C3 30 01 00 00 +R 00 00 01 00 00 05 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 0E 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 48 00 00 00 23 B6 28 0C +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 55 00 00 00 C3 30 01 00 00 +R 00 00 01 00 00 05 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 63 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 6D 00 00 00 22 00 09 7E 23 B6 23 B6 28 33 DD +R 00 00 01 00 +T 78 00 00 00 4E 0A DD 46 0B C5 DD 5E 04 DD 56 +R 00 00 01 00 +T 83 00 00 00 05 21 22 00 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T 8E 00 00 00 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 97 00 00 00 00 00 00 00 7D A4 3C 20 0C +R 00 00 01 00 02 04 00 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 21 67 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T A7 00 00 00 C3 30 01 00 00 +R 00 00 01 00 00 05 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 21 10 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T B5 00 00 00 5E 0A DD 56 0B 73 23 72 21 0E 00 +R 00 00 01 00 +T C0 00 00 00 09 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T C5 00 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T CC 00 00 00 73 23 72 DD 6E 0A DD 66 0B E5 DD +R 00 00 01 00 +T D7 00 00 00 4E 04 DD 46 05 21 0E 00 DD 5E FC +R 00 00 01 00 +T E2 00 00 00 DD 56 FD 19 5E 23 56 3E +R 00 00 01 00 +T EA 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T EF 00 00 00 00 00 00 00 F1 21 05 00 DD 4E FE +R 00 00 01 00 02 04 00 00 +T F8 00 00 00 DD 46 FF 09 7E 23 B6 23 B6 28 2A +R 00 00 01 00 +T 03 01 00 00 DD 5E FC DD 56 FD 21 05 00 DD 4E +R 00 00 01 00 +T 0E 01 00 00 FE DD 46 FF 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 19 01 00 00 60 CD 00 00 00 00 7D A4 3C 20 0B +R 00 00 01 00 02 06 00 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 21 69 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 2B 01 00 00 18 03 +R 00 00 01 00 +T 2D 01 00 00 +R 00 00 01 00 +T 2D 01 00 00 21 00 00 +R 00 00 01 00 +T 30 01 00 00 +R 00 00 01 00 +T 30 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/bitbucket.rel b/src/nos/lib/net_lib/bitbucket.rel new file mode 100644 index 00000000..5c46564a --- /dev/null +++ b/src/nos/lib/net_lib/bitbucket.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 13 flags 0 +S _bitbucket Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 59 50 3E +R 00 00 01 00 02 05 03 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 0B 00 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 00 00 +T 11 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/net_lib/close.rel b/src/nos/lib/net_lib/close.rel new file mode 100644 index 00000000..3d5eabfc --- /dev/null +++ b/src/nos/lib/net_lib/close.rel @@ -0,0 +1,85 @@ +XL4 +H 2 areas D global symbols +S _asy_close Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _diag_close Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S _close_s Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __close Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 92 flags 0 +S _close Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 06 0D DD 5E +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 02 DD 56 03 CD 00 00 00 00 7B E6 +R 00 00 01 00 02 09 0B 00 +T 12 00 00 00 03 6F 7A E6 00 67 DD 75 FE DD 74 +R 00 00 01 00 +T 1D 00 00 00 FF DD CB 03 7E 28 0B +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 06 00 +T 2D 00 00 00 18 60 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 38 00 00 00 00 00 04 00 86 00 00 00 +R 00 00 01 00 00 08 01 00 +T 3E 00 00 00 46 00 00 00 56 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 42 00 00 00 66 00 00 00 76 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 4E 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 55 00 00 00 39 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 5E 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T 65 00 00 00 29 +R 00 00 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 6E 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 75 00 00 00 19 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 7E 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 85 00 00 00 09 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 06 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 92 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/net_lib/close_s.rel b/src/nos/lib/net_lib/close_s.rel new file mode 100644 index 00000000..ae1baff8 --- /dev/null +++ b/src/nos/lib/net_lib/close_s.rel @@ -0,0 +1,98 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Usock Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _errno Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size EF flags 0 +S _close_s Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 7D B4 20 0C +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 05 00 +T 26 00 00 00 C3 EC 00 00 00 +R 00 00 01 00 00 05 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 04 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T 34 00 00 00 23 46 0B 70 2B 71 21 00 00 CD +R 00 00 01 00 +T 3E 00 00 00 00 00 00 00 30 06 +R 00 00 01 00 02 04 08 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 21 00 00 C3 EC 00 00 00 +R 00 00 01 00 00 08 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 53 00 00 00 23 66 68 DD 75 FE DD 74 FF 7D B4 +R 00 00 01 00 +T 5E 00 00 00 28 2B 21 1F 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T 69 00 00 00 09 7E 23 B6 23 B6 28 1A +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 5E FC DD 56 FD 21 1F 00 DD 4E +R 00 00 01 00 +T 7C 00 00 00 FE DD 46 FF 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 87 00 00 00 60 CD 00 00 00 00 +R 00 00 01 00 02 06 00 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 21 0E 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 96 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 9B 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T A1 00 00 00 12 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T A9 00 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T B0 00 00 00 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T B9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T BE 00 00 00 00 00 00 00 DD 6E FC DD 66 FD 7E +R 00 00 01 00 02 04 00 00 +T C7 00 00 00 E6 FF 4F 23 7E E6 1F 47 69 60 29 +R 00 00 01 00 +T D2 00 00 00 ED 4B 00 00 00 00 09 AF 77 23 77 +R 00 00 01 00 02 06 01 00 +T DB 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T E3 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T EA 00 00 00 00 00 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/cmdparse.rel b/src/nos/lib/net_lib/cmdparse.rel new file mode 100644 index 00000000..17388c36 --- /dev/null +++ b/src/nos/lib/net_lib/cmdparse.rel @@ -0,0 +1,1281 @@ +XL4 +H 5 areas 2E global symbols +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___01c3_6aba__3a_20_25ld_0a Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S ___0076_269f__20_25s Ref00000000 +S _rip Ref00000000 +S ___01c6_3c02__3a_20_25u_0a Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___037b_cfe9_SUBCMD_20_2d_20Don_ Ref00000000 +S _strchr Ref00000000 +S ___01c5_68d2__3a_20_25s_0a Ref00000000 +S _Display Ref00000000 +S _strlen Ref00000000 +S _strdupw Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___getfail Ref00000000 +S _strtoul Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S __gettext Ref00000000 +S _callocw Ref00000000 +S ___05d6_d261_valid_20subcommands Ref00000000 +S __strncmp Ref00000000 +S ___03d9_3d32_Valid_20options_3a Ref00000000 +S ___01c2_b04b__3a_20_25d_0a Ref00000000 +S __puts Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S ___00f0_55d7__22_25s_22_20_2d_20 Ref00000000 +S _atol Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___03cb_0a8d_Usage_3a_20 Ref00000000 +S _newproc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C57 flags 0 +S _cmdparse Def0000023B +S _setint Def00000B81 +S _bit16cmd Def00000A17 +S _setuns Def00000BEC +S _setbool Def000008FC +S _setshort Def00000B16 +S _setlong Def00000AA1 +S _subcmd Def000005FD +A CSTR size 3B flags 0 +A IDATA0 size 3C flags 0 +A CDATA0 size 3C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 02 DD +R 00 00 01 00 02 05 1D 00 +T 09 00 00 00 66 03 DD 75 FA DD 74 FB +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E 02 DD 66 03 AF B6 CA +R 00 00 01 00 +T 1A 00 00 00 17 02 00 00 DD 6E 02 DD 66 03 7E +R 00 00 01 00 00 04 01 00 +T 23 00 00 00 FE 22 CA 17 02 00 00 +R 00 00 01 00 00 07 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 6E 02 DD 66 03 7E FE 5C C2 +R 00 00 01 00 +T 32 00 00 00 F6 01 00 00 +R 00 00 01 00 00 04 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 47 00 00 00 74 03 2B 7E FE 6E 20 13 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 DD 6E FA DD 66 FB 23 DD 75 FA DD +R 00 00 01 00 +T 5A 00 00 00 74 FB 2B 36 0A C3 F4 01 00 00 +R 00 00 01 00 00 0A 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 FE 74 20 13 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T 6D 00 00 00 DD 75 FA DD 74 FB 2B 36 09 C3 +R 00 00 01 00 +T 77 00 00 00 F4 01 00 00 +R 00 00 01 00 00 04 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 FE 76 20 13 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T 84 00 00 00 DD 75 FA DD 74 FB 2B 36 0B C3 +R 00 00 01 00 +T 8E 00 00 00 F4 01 00 00 +R 00 00 01 00 00 04 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 FE 62 20 13 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T 9B 00 00 00 DD 75 FA DD 74 FB 2B 36 08 C3 +R 00 00 01 00 +T A5 00 00 00 F4 01 00 00 +R 00 00 01 00 00 04 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 FE 72 20 13 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T B2 00 00 00 DD 75 FA DD 74 FB 2B 36 0D C3 +R 00 00 01 00 +T BC 00 00 00 F4 01 00 00 +R 00 00 01 00 00 04 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 FE 66 20 13 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T C9 00 00 00 DD 75 FA DD 74 FB 2B 36 0C C3 +R 00 00 01 00 +T D3 00 00 00 F4 01 00 00 +R 00 00 01 00 00 04 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 FE 61 20 13 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T E0 00 00 00 DD 75 FA DD 74 FB 2B 36 07 C3 +R 00 00 01 00 +T EA 00 00 00 F4 01 00 00 +R 00 00 01 00 00 04 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 FE 5C 20 13 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T F7 00 00 00 DD 75 FA DD 74 FB 2B 36 5C C3 +R 00 00 01 00 +T 01 01 00 00 F4 01 00 00 +R 00 00 01 00 00 04 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 FE 3F 20 13 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T 0E 01 00 00 DD 75 FA DD 74 FB 2B 36 3F C3 +R 00 00 01 00 +T 18 01 00 00 F4 01 00 00 +R 00 00 01 00 00 04 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 FE 27 20 13 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T 25 01 00 00 DD 75 FA DD 74 FB 2B 36 27 C3 +R 00 00 01 00 +T 2F 01 00 00 F4 01 00 00 +R 00 00 01 00 00 04 01 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 FE 22 20 13 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T 3C 01 00 00 DD 75 FA DD 74 FB 2B 36 22 C3 +R 00 00 01 00 +T 46 01 00 00 F4 01 00 00 +R 00 00 01 00 00 04 01 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 FE 78 20 3F 21 10 00 E5 21 0A 00 +R 00 00 01 00 +T 53 01 00 00 39 4D 44 DD 5E 02 DD 56 03 1B DD +R 00 00 01 00 +T 5E 01 00 00 73 02 DD 72 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T 66 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 6D 01 00 00 75 FC DD 74 FD DD 71 FE DD 70 FF +R 00 00 01 00 +T 78 01 00 00 E5 DD 6E FA DD 66 FB 23 DD 75 FA +R 00 00 01 00 +T 83 01 00 00 DD 74 FB 2B C1 71 18 69 +R 00 00 01 00 +T 8B 01 00 00 +R 00 00 01 00 +T 8B 01 00 00 FE 30 38 43 FE 38 30 3F 21 08 00 +R 00 00 01 00 +T 96 01 00 00 E5 21 0A 00 39 4D 44 DD 5E 02 DD +R 00 00 01 00 +T A1 01 00 00 56 03 1B DD 73 02 DD 72 03 3E +R 00 00 01 00 +T AB 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T B0 01 00 00 00 00 00 00 F1 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 01 00 +T B9 01 00 00 DD 71 FE DD 70 FF E5 DD 6E FA DD +R 00 00 01 00 +T C4 01 00 00 66 FB 23 DD 75 FA DD 74 FB 2B C1 +R 00 00 01 00 +T CF 01 00 00 71 18 22 +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 FE 00 20 05 21 00 00 18 5D +R 00 00 01 00 +T DB 01 00 00 +R 00 00 01 00 +T DB 01 00 00 DD 6E 02 DD 66 03 2B 46 DD 6E FA +R 00 00 01 00 +T E6 01 00 00 DD 66 FB 23 DD 75 FA DD 74 FB 2B +R 00 00 01 00 +T F1 01 00 00 70 18 00 +R 00 00 01 00 +T F4 01 00 00 +R 00 00 01 00 +T F4 01 00 00 18 1E +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 01 02 00 00 74 03 2B 46 DD 6E FA DD 66 FB 23 +R 00 00 01 00 +T 0C 02 00 00 DD 75 FA DD 74 FB 2B 70 +R 00 00 01 00 +T 14 02 00 00 +R 00 00 01 00 +T 14 02 00 00 C3 11 00 00 00 +R 00 00 01 00 00 05 01 00 +T 17 02 00 00 +R 00 00 01 00 +T 17 02 00 00 DD 6E 02 DD 66 03 7E FE 22 20 08 +R 00 00 01 00 +T 22 02 00 00 +R 00 00 01 00 +T 22 02 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 2A 02 00 00 +R 00 00 01 00 +T 2A 02 00 00 +R 00 00 01 00 +T 2A 02 00 00 DD 6E FA DD 66 FB 36 00 DD 6E 02 +R 00 00 01 00 +T 35 02 00 00 DD 66 03 +R 00 00 01 00 +T 38 02 00 00 +R 00 00 01 00 +T 38 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 3B 02 00 00 +R 00 00 01 00 +T 3B 02 00 00 CD 00 00 00 00 CA FF 59 50 3E +R 00 00 01 00 02 05 1D 00 +T 43 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 48 02 00 00 00 00 00 00 AF DD 77 F8 DD 77 F9 +R 00 00 01 00 02 04 01 00 +T 51 02 00 00 +R 00 00 01 00 +T 51 02 00 00 01 14 80 DD 6E F8 DD 66 F9 3E 80 +R 00 00 01 00 +T 5C 02 00 00 AC 67 ED 42 30 1E +R 00 00 01 00 +T 62 02 00 00 +R 00 00 01 00 +T 62 02 00 00 DD 6E F8 DD 66 F9 29 E5 21 04 00 +R 00 00 01 00 +T 6D 02 00 00 39 4D 44 E1 09 AF 77 23 77 DD 34 +R 00 00 01 00 +T 78 02 00 00 F8 20 03 DD 34 F9 +R 00 00 01 00 +T 7E 02 00 00 +R 00 00 01 00 +T 7E 02 00 00 18 D1 +R 00 00 01 00 +T 80 02 00 00 +R 00 00 01 00 +T 80 02 00 00 AF DD 77 F8 DD 77 F9 +R 00 00 01 00 +T 87 02 00 00 +R 00 00 01 00 +T 87 02 00 00 01 14 80 DD 6E F8 DD 66 F9 3E 80 +R 00 00 01 00 +T 92 02 00 00 AC 67 ED 42 D2 9C 03 00 00 +R 00 00 01 00 00 09 01 00 +T 99 02 00 00 +R 00 00 01 00 +T 99 02 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T A0 02 00 00 +R 00 00 01 00 +T A0 02 00 00 DD 6E 04 DD 66 05 7E FE 20 28 0B +R 00 00 01 00 +T AB 02 00 00 DD 6E 04 DD 66 05 7E FE 09 20 0A +R 00 00 01 00 +T B6 02 00 00 +R 00 00 01 00 +T B6 02 00 00 +R 00 00 01 00 +T B6 02 00 00 +R 00 00 01 00 +T B6 02 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T BE 02 00 00 +R 00 00 01 00 +T BE 02 00 00 18 E0 +R 00 00 01 00 +T C0 02 00 00 +R 00 00 01 00 +T C0 02 00 00 DD 6E 04 DD 66 05 AF B6 20 03 +R 00 00 01 00 +T CA 02 00 00 +R 00 00 01 00 +T CA 02 00 00 C3 9C 03 00 00 +R 00 00 01 00 00 05 01 00 +T CD 02 00 00 +R 00 00 01 00 +T CD 02 00 00 DD 7E F8 DD B6 F9 20 11 DD 6E 04 +R 00 00 01 00 +T D8 02 00 00 DD 66 05 7E FE 23 20 06 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 21 00 00 C3 FA 05 00 00 +R 00 00 01 00 00 08 01 00 +T E6 02 00 00 +R 00 00 01 00 +T E6 02 00 00 DD 6E 04 DD 66 05 7E FE 22 20 10 +R 00 00 01 00 +T F1 02 00 00 +R 00 00 01 00 +T F1 02 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 01 03 00 00 +R 00 00 01 00 +T 01 03 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T 0C 03 00 00 74 F9 2B 29 E5 21 04 00 39 4D 44 +R 00 00 01 00 +T 17 03 00 00 E1 09 DD 4E 04 DD 46 05 71 23 70 +R 00 00 01 00 +T 22 03 00 00 DD 7E FE DD B6 FF 28 1B +R 00 00 01 00 +T 2A 03 00 00 +R 00 00 01 00 +T 2A 03 00 00 DD 5E 04 DD 56 05 CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 33 03 00 00 DD 75 04 DD 74 05 7D B4 20 06 +R 00 00 01 00 +T 3D 03 00 00 +R 00 00 01 00 +T 3D 03 00 00 21 FF FF C3 FA 05 00 00 +R 00 00 01 00 00 08 01 00 +T 43 03 00 00 +R 00 00 01 00 +T 43 03 00 00 18 54 +R 00 00 01 00 +T 45 03 00 00 +R 00 00 01 00 +T 45 03 00 00 01 20 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 4F 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 54 03 00 00 00 00 00 00 DD 75 F4 DD 74 F5 7D +R 00 00 01 00 02 04 01 00 +T 5D 03 00 00 B4 20 1D 01 09 00 DD 5E 04 DD 56 +R 00 00 01 00 +T 68 03 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 6E 03 00 00 CD 00 00 00 00 DD 75 F4 DD 74 F5 +R 00 00 01 00 02 05 01 00 +T 77 03 00 00 7D B4 20 02 +R 00 00 01 00 +T 7B 03 00 00 +R 00 00 01 00 +T 7B 03 00 00 +R 00 00 01 00 +T 7B 03 00 00 +R 00 00 01 00 +T 7B 03 00 00 18 1F +R 00 00 01 00 +T 7D 03 00 00 +R 00 00 01 00 +T 7D 03 00 00 DD 6E F4 DD 66 F5 23 DD 75 F4 DD +R 00 00 01 00 +T 88 03 00 00 74 F5 2B 36 00 DD 6E F4 DD 66 F5 +R 00 00 01 00 +T 93 03 00 00 DD 75 04 DD 74 05 +R 00 00 01 00 +T 99 03 00 00 +R 00 00 01 00 +T 99 03 00 00 C3 87 02 00 00 +R 00 00 01 00 00 05 01 00 +T 9C 03 00 00 +R 00 00 01 00 +T 9C 03 00 00 01 01 80 DD 6E F8 DD 66 F9 3E 80 +R 00 00 01 00 +T A7 03 00 00 AC 67 ED 42 30 10 +R 00 00 01 00 +T AD 03 00 00 +R 00 00 01 00 +T AD 03 00 00 DD 36 F8 01 DD 36 F9 00 DD 36 CC +R 00 00 01 00 +T B8 03 00 00 3A 00 00 00 DD 36 CD 3A 00 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T BD 03 00 00 +R 00 00 01 00 +T BD 03 00 00 DD 6E 02 DD 66 03 DD 75 CA DD 74 +R 00 00 01 00 +T C8 03 00 00 CB +R 00 00 01 00 +T C9 03 00 00 +R 00 00 01 00 +T C9 03 00 00 DD 6E CA DD 66 CB 7E 23 B6 23 B6 +R 00 00 01 00 +T D4 03 00 00 28 44 +R 00 00 01 00 +T D6 03 00 00 +R 00 00 01 00 +T D6 03 00 00 DD 5E CC DD 56 CD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T DE 03 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 0C 00 02 0A 01 00 +T E5 03 00 00 DD 6E CA DD 66 CB 23 23 4E C5 2B +R 00 00 01 00 +T F0 03 00 00 46 2B 4E C5 DD 5E CC DD 56 CD 3E +R 00 00 01 00 +T FB 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T 00 04 00 00 00 00 00 00 F1 F1 F1 7D B4 20 02 +R 00 00 01 00 02 04 01 00 +T 09 04 00 00 +R 00 00 01 00 +T 09 04 00 00 18 0F +R 00 00 01 00 +T 0B 04 00 00 +R 00 00 01 00 +T 0B 04 00 00 DD 7E CA C6 0D DD 77 CA 30 03 DD +R 00 00 01 00 +T 16 04 00 00 34 CB +R 00 00 01 00 +T 18 04 00 00 +R 00 00 01 00 +T 18 04 00 00 18 AF +R 00 00 01 00 +T 1A 04 00 00 +R 00 00 01 00 +T 1A 04 00 00 DD 6E CA DD 66 CB 7E 23 B6 23 B6 +R 00 00 01 00 +T 25 04 00 00 20 2E +R 00 00 01 00 +T 27 04 00 00 +R 00 00 01 00 +T 27 04 00 00 21 0A 00 DD 4E CA DD 46 CB 09 7E +R 00 00 01 00 +T 32 04 00 00 23 B6 23 B6 28 1D +R 00 00 01 00 +T 38 04 00 00 +R 00 00 01 00 +T 38 04 00 00 21 0A 00 DD 4E CA DD 46 CB 09 5E +R 00 00 01 00 +T 43 04 00 00 23 56 23 4E 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 1C 00 +T 4A 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1C 00 02 09 01 00 +T 50 04 00 00 FF FF C3 FA 05 00 00 +R 00 00 01 00 00 07 01 00 +T 55 04 00 00 +R 00 00 01 00 +T 55 04 00 00 +R 00 00 01 00 +T 55 04 00 00 21 08 00 DD 4E CA DD 46 CB 09 4E +R 00 00 01 00 +T 60 04 00 00 23 46 DD 6E F8 DD 66 F9 CD +R 00 00 01 00 +T 69 04 00 00 00 00 00 00 30 2E +R 00 00 01 00 02 04 21 00 +T 6D 04 00 00 +R 00 00 01 00 +T 6D 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 24 00 02 0B 24 00 +T 73 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 22 00 02 0B 22 00 +T 79 04 00 00 CD 00 00 00 00 F1 F1 21 0A 00 DD +R 00 00 01 00 02 05 01 00 +T 82 04 00 00 4E CA DD 46 CB 09 5E 23 56 23 4E +R 00 00 01 00 +T 8D 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1C 00 02 0A 1C 00 +T 93 04 00 00 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 01 00 +T 99 04 00 00 FA 05 00 00 +R 00 00 01 00 00 04 01 00 +T 9B 04 00 00 +R 00 00 01 00 +T 9B 04 00 00 DD 6E CA DD 66 CB 23 23 23 7E 23 +R 00 00 01 00 +T A6 04 00 00 B6 23 B6 20 06 +R 00 00 01 00 +T AB 04 00 00 +R 00 00 01 00 +T AB 04 00 00 21 00 00 C3 FA 05 00 00 +R 00 00 01 00 00 08 01 00 +T B1 04 00 00 +R 00 00 01 00 +T B1 04 00 00 21 06 00 DD 4E CA DD 46 CB 09 7E +R 00 00 01 00 +T BC 04 00 00 23 B6 20 2C +R 00 00 01 00 +T C0 04 00 00 +R 00 00 01 00 +T C0 04 00 00 DD 6E 0A DD 66 0B E5 21 04 00 39 +R 00 00 01 00 +T CB 04 00 00 4D 44 C5 DD 5E F8 DD 56 F9 DD 6E +R 00 00 01 00 +T D6 04 00 00 CA DD 66 CB 23 23 23 4E 23 46 23 +R 00 00 01 00 +T E1 04 00 00 7E 69 60 C1 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 09 01 00 +T EA 04 00 00 FA 05 00 00 +R 00 00 01 00 00 04 01 00 +T EC 04 00 00 +R 00 00 01 00 +T EC 04 00 00 01 02 00 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T F6 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T FB 04 00 00 00 00 00 00 DD 75 F6 DD 74 F7 AF +R 00 00 01 00 02 04 01 00 +T 04 05 00 00 DD 77 FA DD 77 FB +R 00 00 01 00 +T 0A 05 00 00 +R 00 00 01 00 +T 0A 05 00 00 DD 4E F8 DD 46 F9 DD 6E FA DD 66 +R 00 00 01 00 +T 15 05 00 00 FB CD 00 00 00 00 30 3A +R 00 00 01 00 02 06 21 00 +T 1B 05 00 00 +R 00 00 01 00 +T 1B 05 00 00 DD 6E FA DD 66 FB 29 DD 4E F6 DD +R 00 00 01 00 +T 26 05 00 00 46 F7 09 E5 DD 6E FA DD 66 FB 29 +R 00 00 01 00 +T 31 05 00 00 E5 21 06 00 39 4D 44 E1 09 5E 23 +R 00 00 01 00 +T 3C 05 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 42 05 00 00 CD 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 05 01 00 +T 4B 05 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 53 05 00 00 +R 00 00 01 00 +T 53 05 00 00 18 B5 +R 00 00 01 00 +T 55 05 00 00 +R 00 00 01 00 +T 55 05 00 00 DD 6E CA DD 66 CB 5E 23 56 23 4E +R 00 00 01 00 +T 60 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T 66 05 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 01 00 +T 6F 05 00 00 B4 20 0A +R 00 00 01 00 +T 72 05 00 00 +R 00 00 01 00 +T 72 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0F 00 02 0A 0F 00 +T 78 05 00 00 00 00 00 00 18 5B +R 00 00 01 00 02 04 01 00 +T 7C 05 00 00 +R 00 00 01 00 +T 7C 05 00 00 21 01 00 E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T 87 05 00 00 DD 6E F6 DD 66 F7 E5 DD 6E F8 DD +R 00 00 01 00 +T 92 05 00 00 66 F9 E5 DD 6E CA DD 66 CB 23 23 +R 00 00 01 00 +T 9D 05 00 00 23 23 23 4E C5 2B 46 2B 4E C5 21 +R 00 00 01 00 +T A8 05 00 00 06 00 DD 4E CA DD 46 CB 09 4E 23 +R 00 00 01 00 +T B3 05 00 00 46 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T BB 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 25 00 02 09 25 00 +T C0 05 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T C9 05 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 14 00 +T D1 05 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 14 00 02 0A 01 00 +T D7 05 00 00 +R 00 00 01 00 +T D7 05 00 00 2A 00 00 00 00 22 00 00 00 00 11 +R 00 00 01 00 02 05 11 00 02 0A 0B 00 +T DE 05 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 2B 09 13 00 +T E3 05 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 13 00 02 09 01 00 +T EA 05 00 00 FA DD 74 FB 21 00 00 22 +R 00 00 01 00 +T F2 05 00 00 00 00 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 02 04 0B 00 +T FA 05 00 00 +R 00 00 01 00 +T FA 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T FD 05 00 00 +R 00 00 01 00 +T FD 05 00 00 CD 00 00 00 00 F6 FF AF DD 77 FA +R 00 00 01 00 02 05 1D 00 +T 06 06 00 00 DD 77 FB 11 02 80 69 60 3E 80 AC +R 00 00 01 00 +T 11 06 00 00 67 ED 52 30 46 +R 00 00 01 00 +T 16 06 00 00 +R 00 00 01 00 +T 16 06 00 00 01 01 80 DD 6E 04 DD 66 05 3E 80 +R 00 00 01 00 +T 21 06 00 00 AC 67 ED 42 30 13 +R 00 00 01 00 +T 27 06 00 00 +R 00 00 01 00 +T 27 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 08 00 02 0B 08 00 +T 2D 06 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 22 00 02 0B 22 00 +T 33 06 00 00 CD 00 00 00 00 F1 F1 18 1C +R 00 00 01 00 02 05 01 00 +T 3A 06 00 00 +R 00 00 01 00 +T 3A 06 00 00 DD 6E 0A DD 66 0B 4E 23 46 C5 0E +R 00 00 01 00 +T 45 06 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 1F 00 02 0A 1F 00 +T 4B 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 22 00 02 0A 22 00 +T 51 06 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 56 06 00 00 +R 00 00 01 00 +T 56 06 00 00 21 FF FF C3 F9 08 00 00 +R 00 00 01 00 00 08 01 00 +T 5C 06 00 00 +R 00 00 01 00 +T 5C 06 00 00 DD 6E 04 DD 66 05 2B DD 75 04 DD +R 00 00 01 00 +T 67 06 00 00 74 05 DD 7E 0A C6 02 DD 77 0A 30 +R 00 00 01 00 +T 72 06 00 00 03 DD 34 0B +R 00 00 01 00 +T 76 06 00 00 +R 00 00 01 00 +T 76 06 00 00 DD 6E 02 DD 66 03 DD 75 F6 DD 74 +R 00 00 01 00 +T 81 06 00 00 F7 +R 00 00 01 00 +T 82 06 00 00 +R 00 00 01 00 +T 82 06 00 00 DD 6E F6 DD 66 F7 7E 23 B6 23 B6 +R 00 00 01 00 +T 8D 06 00 00 28 52 +R 00 00 01 00 +T 8F 06 00 00 +R 00 00 01 00 +T 8F 06 00 00 DD 6E 0A DD 66 0B 5E 23 56 3E +R 00 00 01 00 +T 99 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 9E 06 00 00 00 00 00 00 E5 DD 6E F6 DD 66 F7 +R 00 00 01 00 02 04 01 00 +T A7 06 00 00 23 23 4E C5 2B 46 2B 4E C5 DD 6E +R 00 00 01 00 +T B2 06 00 00 0A DD 66 0B 5E 23 56 3E +R 00 00 01 00 +T BA 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T BF 06 00 00 00 00 00 00 F1 F1 F1 7D B4 20 0A +R 00 00 01 00 02 04 01 00 +T C8 06 00 00 +R 00 00 01 00 +T C8 06 00 00 DD 36 FA 01 DD 36 FB 00 18 0F +R 00 00 01 00 +T D2 06 00 00 +R 00 00 01 00 +T D2 06 00 00 DD 7E F6 C6 0D DD 77 F6 30 03 DD +R 00 00 01 00 +T DD 06 00 00 34 F7 +R 00 00 01 00 +T DF 06 00 00 +R 00 00 01 00 +T DF 06 00 00 18 A1 +R 00 00 01 00 +T E1 06 00 00 +R 00 00 01 00 +T E1 06 00 00 DD 7E FA DD B6 FB 20 72 +R 00 00 01 00 +T E9 06 00 00 +R 00 00 01 00 +T E9 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 18 00 02 0B 18 00 +T EF 06 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 22 00 02 0B 22 00 +T F5 06 00 00 CD 00 00 00 00 F1 F1 DD 6E 02 DD +R 00 00 01 00 02 05 01 00 +T FE 06 00 00 66 03 DD 75 F6 DD 74 F7 +R 00 00 01 00 +T 06 07 00 00 +R 00 00 01 00 +T 06 07 00 00 DD 6E F6 DD 66 F7 7E 23 B6 23 B6 +R 00 00 01 00 +T 11 07 00 00 28 31 +R 00 00 01 00 +T 13 07 00 00 +R 00 00 01 00 +T 13 07 00 00 DD 6E F6 DD 66 F7 23 23 4E C5 2B +R 00 00 01 00 +T 1E 07 00 00 46 2B 4E C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 04 00 +T 26 07 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 2B 0A 22 00 +T 2C 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 22 00 02 09 01 00 +T 33 07 00 00 F1 F1 DD 7E F6 C6 0D DD 77 F6 30 +R 00 00 01 00 +T 3E 07 00 00 03 DD 34 F7 +R 00 00 01 00 +T 42 07 00 00 +R 00 00 01 00 +T 42 07 00 00 18 C2 +R 00 00 01 00 +T 44 07 00 00 +R 00 00 01 00 +T 44 07 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 4A 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 22 00 02 0B 22 00 +T 50 07 00 00 CD 00 00 00 00 F1 F1 21 FF FF C3 +R 00 00 01 00 02 05 01 00 +T 59 07 00 00 F9 08 00 00 +R 00 00 01 00 00 04 01 00 +T 5B 07 00 00 +R 00 00 01 00 +T 5B 07 00 00 21 08 00 DD 4E F6 DD 46 F7 09 4E +R 00 00 01 00 +T 66 07 00 00 23 46 DD 6E 04 DD 66 05 CD +R 00 00 01 00 +T 6F 07 00 00 00 00 00 00 30 3F +R 00 00 01 00 02 04 21 00 +T 73 07 00 00 +R 00 00 01 00 +T 73 07 00 00 21 0A 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T 7E 07 00 00 23 B6 23 B6 28 28 +R 00 00 01 00 +T 84 07 00 00 +R 00 00 01 00 +T 84 07 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 24 00 02 0B 24 00 +T 8A 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 22 00 02 0B 22 00 +T 90 07 00 00 CD 00 00 00 00 F1 F1 21 0A 00 DD +R 00 00 01 00 02 05 01 00 +T 99 07 00 00 4E F6 DD 46 F7 09 5E 23 56 23 4E +R 00 00 01 00 +T A4 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1C 00 02 0A 1C 00 +T AA 07 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T AC 07 00 00 +R 00 00 01 00 +T AC 07 00 00 21 FF FF C3 F9 08 00 00 +R 00 00 01 00 00 08 01 00 +T B2 07 00 00 +R 00 00 01 00 +T B2 07 00 00 21 06 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T BD 07 00 00 23 B6 20 2C +R 00 00 01 00 +T C1 07 00 00 +R 00 00 01 00 +T C1 07 00 00 DD 6E 0C DD 66 0D E5 DD 4E 0A DD +R 00 00 01 00 +T CC 07 00 00 46 0B C5 DD 5E 04 DD 56 05 DD 6E +R 00 00 01 00 +T D7 07 00 00 F6 DD 66 F7 23 23 23 4E 23 46 23 +R 00 00 01 00 +T E2 07 00 00 7E 69 60 C1 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 09 01 00 +T EB 07 00 00 F9 08 00 00 +R 00 00 01 00 00 04 01 00 +T ED 07 00 00 +R 00 00 01 00 +T ED 07 00 00 01 02 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T F7 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T FC 07 00 00 00 00 00 00 DD 75 F8 DD 74 F9 AF +R 00 00 01 00 02 04 01 00 +T 05 08 00 00 DD 77 FC DD 77 FD +R 00 00 01 00 +T 0B 08 00 00 +R 00 00 01 00 +T 0B 08 00 00 DD 4E 04 DD 46 05 DD 6E FC DD 66 +R 00 00 01 00 +T 16 08 00 00 FD CD 00 00 00 00 30 38 +R 00 00 01 00 02 06 21 00 +T 1C 08 00 00 +R 00 00 01 00 +T 1C 08 00 00 DD 6E FC DD 66 FD 29 DD 4E F8 DD +R 00 00 01 00 +T 27 08 00 00 46 F9 09 E5 DD 6E FC DD 66 FD 29 +R 00 00 01 00 +T 32 08 00 00 DD 4E 0A DD 46 0B 09 5E 23 56 3E +R 00 00 01 00 +T 3D 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 42 08 00 00 00 00 00 00 4D 44 E1 71 23 70 DD +R 00 00 01 00 02 04 01 00 +T 4B 08 00 00 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 52 08 00 00 +R 00 00 01 00 +T 52 08 00 00 18 B7 +R 00 00 01 00 +T 54 08 00 00 +R 00 00 01 00 +T 54 08 00 00 DD 6E F6 DD 66 F7 5E 23 56 23 4E +R 00 00 01 00 +T 5F 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T 65 08 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 01 00 +T 6E 08 00 00 B4 20 0A +R 00 00 01 00 +T 71 08 00 00 +R 00 00 01 00 +T 71 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0F 00 02 0A 0F 00 +T 77 08 00 00 00 00 00 00 18 5B +R 00 00 01 00 02 04 01 00 +T 7B 08 00 00 +R 00 00 01 00 +T 7B 08 00 00 21 01 00 E5 DD 6E 0C DD 66 0D E5 +R 00 00 01 00 +T 86 08 00 00 DD 6E F8 DD 66 F9 E5 DD 6E 04 DD +R 00 00 01 00 +T 91 08 00 00 66 05 E5 DD 6E F6 DD 66 F7 23 23 +R 00 00 01 00 +T 9C 08 00 00 23 23 23 4E C5 2B 46 2B 4E C5 21 +R 00 00 01 00 +T A7 08 00 00 06 00 DD 4E F6 DD 46 F7 09 4E 23 +R 00 00 01 00 +T B2 08 00 00 46 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T BA 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 25 00 02 09 25 00 +T BF 08 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T C8 08 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 14 00 +T D0 08 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 14 00 02 0A 01 00 +T D6 08 00 00 +R 00 00 01 00 +T D6 08 00 00 2A 00 00 00 00 22 00 00 00 00 11 +R 00 00 01 00 02 05 11 00 02 0A 0B 00 +T DD 08 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 2B 09 13 00 +T E2 08 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 13 00 02 09 01 00 +T E9 08 00 00 FC DD 74 FD 21 00 00 22 +R 00 00 01 00 +T F1 08 00 00 00 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 0B 00 +T F9 08 00 00 +R 00 00 01 00 +T F9 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T FC 08 00 00 +R 00 00 01 00 +T FC 08 00 00 CD 00 00 00 00 FE FF 01 02 80 DD +R 00 00 01 00 02 05 1D 00 +T 05 09 00 00 6E 0E DD 66 0F 3E 80 AC 67 ED 42 +R 00 00 01 00 +T 10 09 00 00 30 41 +R 00 00 01 00 +T 12 09 00 00 +R 00 00 01 00 +T 12 09 00 00 DD 6E 0C E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T 1D 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 22 00 02 0A 22 00 +T 23 09 00 00 00 00 00 00 F1 F1 DD 6E 02 DD 66 +R 00 00 01 00 02 04 01 00 +T 2C 09 00 00 03 7E 23 B6 28 05 21 0B 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 35 09 00 00 18 03 +R 00 00 01 00 +T 37 09 00 00 +R 00 00 01 00 +T 37 09 00 00 21 26 00 00 00 +R 00 00 01 00 00 05 02 00 +T 3A 09 00 00 +R 00 00 01 00 +T 3A 09 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 0A 00 +T 3F 09 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 0A 22 00 +T 45 09 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 22 00 02 09 01 00 +T 4C 09 00 00 F1 21 00 00 C3 14 0A 00 00 +R 00 00 01 00 00 09 01 00 +T 53 09 00 00 +R 00 00 01 00 +T 53 09 00 00 DD 36 FE 00 00 00 00 DD 36 FF +R 00 00 01 00 09 07 03 00 +T 5A 09 00 00 00 00 00 00 +R 00 00 01 00 89 04 03 00 +T 5B 09 00 00 +R 00 00 01 00 +T 5B 09 00 00 DD 6E FE DD 66 FF 7E 23 B6 28 4B +R 00 00 01 00 +T 66 09 00 00 +R 00 00 01 00 +T 66 09 00 00 DD 6E FE DD 66 FF 4E 23 46 DD 6E +R 00 00 01 00 +T 71 09 00 00 10 DD 66 11 23 23 5E 23 56 3E +R 00 00 01 00 +T 7B 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 80 09 00 00 00 00 00 00 7D B4 20 1C +R 00 00 01 00 02 04 01 00 +T 86 09 00 00 +R 00 00 01 00 +T 86 09 00 00 DD 6E FE DD 66 FF 23 23 46 23 66 +R 00 00 01 00 +T 91 09 00 00 68 E5 DD 6E 02 DD 66 03 C1 71 23 +R 00 00 01 00 +T 9C 09 00 00 70 21 00 00 18 72 +R 00 00 01 00 +T A2 09 00 00 +R 00 00 01 00 +T A2 09 00 00 DD 7E FE C6 04 DD 77 FE 30 03 DD +R 00 00 01 00 +T AD 09 00 00 34 FF +R 00 00 01 00 +T AF 09 00 00 +R 00 00 01 00 +T AF 09 00 00 18 AA +R 00 00 01 00 +T B1 09 00 00 +R 00 00 01 00 +T B1 09 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1A 00 02 0B 1A 00 +T B7 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 22 00 02 0B 22 00 +T BD 09 00 00 CD 00 00 00 00 F1 F1 DD 36 FE +R 00 00 01 00 02 05 01 00 +T C5 09 00 00 00 00 00 00 DD 36 FF 00 00 00 00 +R 00 00 01 00 09 04 03 00 89 0B 03 00 +T CA 09 00 00 +R 00 00 01 00 +T CA 09 00 00 DD 6E FE DD 66 FF 7E 23 B6 28 2B +R 00 00 01 00 +T D5 09 00 00 +R 00 00 01 00 +T D5 09 00 00 DD 6E FE DD 66 FF 4E 23 46 C5 0E +R 00 00 01 00 +T E0 09 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 04 00 02 0A 04 00 +T E6 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 22 00 02 0A 22 00 +T EC 09 00 00 00 00 00 00 F1 F1 F1 DD 7E FE C6 +R 00 00 01 00 02 04 01 00 +T F5 09 00 00 04 DD 77 FE 30 03 DD 34 FF +R 00 00 01 00 +T FE 09 00 00 +R 00 00 01 00 +T FE 09 00 00 18 CA +R 00 00 01 00 +T 00 0A 00 00 +R 00 00 01 00 +T 00 0A 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 06 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 22 00 02 0B 22 00 +T 0C 0A 00 00 CD 00 00 00 00 F1 F1 21 01 00 +R 00 00 01 00 02 05 01 00 +T 14 0A 00 00 +R 00 00 01 00 +T 14 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 17 0A 00 00 +R 00 00 01 00 +T 17 0A 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 1D 00 +T 20 0A 00 00 66 03 7E A1 5F 23 7E A0 57 DD 73 +R 00 00 01 00 +T 2B 0A 00 00 FC DD 72 FD DD 6E 10 DD 66 11 E5 +R 00 00 01 00 +T 36 0A 00 00 DD 6E 0E DD 66 0F E5 DD 6E 0C E5 +R 00 00 01 00 +T 41 0A 00 00 DD 6E 0A DD 66 0B E5 21 08 00 39 +R 00 00 01 00 +T 4C 0A 00 00 5D 54 3E FC 08 00 00 21 +R 00 00 01 00 29 07 01 00 +T 51 0A 00 00 FC 08 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 58 0A 00 00 F1 F1 DD 75 FE DD 74 FF 7D B4 20 +R 00 00 01 00 +T 63 0A 00 00 34 +R 00 00 01 00 +T 64 0A 00 00 +R 00 00 01 00 +T 64 0A 00 00 DD 7E FC DD B6 FD 28 13 +R 00 00 01 00 +T 6C 0A 00 00 +R 00 00 01 00 +T 6C 0A 00 00 DD 6E 02 DD 66 03 7E DD B6 04 77 +R 00 00 01 00 +T 77 0A 00 00 23 7E DD B6 05 77 18 19 +R 00 00 01 00 +T 7F 0A 00 00 +R 00 00 01 00 +T 7F 0A 00 00 DD 4E 04 DD 46 05 79 2F 4F 78 2F +R 00 00 01 00 +T 8A 0A 00 00 47 DD 6E 02 DD 66 03 7E A1 77 23 +R 00 00 01 00 +T 95 0A 00 00 7E A0 77 +R 00 00 01 00 +T 98 0A 00 00 +R 00 00 01 00 +T 98 0A 00 00 +R 00 00 01 00 +T 98 0A 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T A1 0A 00 00 +R 00 00 01 00 +T A1 0A 00 00 CD 00 00 00 00 01 02 80 DD 6E 0E +R 00 00 01 00 02 05 15 00 +T AA 0A 00 00 DD 66 0F 3E 80 AC 67 ED 42 30 39 +R 00 00 01 00 +T B5 0A 00 00 +R 00 00 01 00 +T B5 0A 00 00 DD 6E 0C E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T C0 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 22 00 02 0A 22 00 +T C6 0A 00 00 00 00 00 00 F1 F1 DD 6E 02 DD 66 +R 00 00 01 00 02 04 01 00 +T CF 0A 00 00 03 4E 23 46 23 5E 23 56 D5 C5 0E +R 00 00 01 00 +T DA 0A 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 02 00 02 0A 02 00 +T E0 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 22 00 02 0A 22 00 +T E6 0A 00 00 00 00 00 00 F1 F1 F1 F1 18 22 +R 00 00 01 00 02 04 01 00 +T EE 0A 00 00 +R 00 00 01 00 +T EE 0A 00 00 DD 6E 10 DD 66 11 23 23 5E 23 56 +R 00 00 01 00 +T F9 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 20 00 02 0A 20 00 +T FF 0A 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 01 00 +T 08 0B 00 00 D1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 10 0B 00 00 +R 00 00 01 00 +T 10 0B 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 16 0B 00 00 +R 00 00 01 00 +T 16 0B 00 00 CD 00 00 00 00 01 02 80 DD 6E 0E +R 00 00 01 00 02 05 15 00 +T 1F 0B 00 00 DD 66 0F 3E 80 AC 67 ED 42 30 33 +R 00 00 01 00 +T 2A 0B 00 00 +R 00 00 01 00 +T 2A 0B 00 00 DD 6E 0C E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T 35 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 22 00 02 0A 22 00 +T 3B 0B 00 00 00 00 00 00 F1 F1 DD 6E 02 DD 66 +R 00 00 01 00 02 04 01 00 +T 44 0B 00 00 03 4E 23 46 C5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 06 00 +T 4C 0B 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 06 00 2B 0B 22 00 +T 52 0B 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 22 00 02 0A 01 00 +T 59 0B 00 00 F1 F1 18 1E +R 00 00 01 00 +T 5D 0B 00 00 +R 00 00 01 00 +T 5D 0B 00 00 DD 6E 10 DD 66 11 23 23 5E 23 56 +R 00 00 01 00 +T 68 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1E 00 02 0A 1E 00 +T 6E 0B 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 01 00 +T 77 0B 00 00 C1 71 23 70 +R 00 00 01 00 +T 7B 0B 00 00 +R 00 00 01 00 +T 7B 0B 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 81 0B 00 00 +R 00 00 01 00 +T 81 0B 00 00 CD 00 00 00 00 01 02 80 DD 6E 0E +R 00 00 01 00 02 05 15 00 +T 8A 0B 00 00 DD 66 0F 3E 80 AC 67 ED 42 30 33 +R 00 00 01 00 +T 95 0B 00 00 +R 00 00 01 00 +T 95 0B 00 00 DD 6E 0C E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T A0 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 22 00 02 0A 22 00 +T A6 0B 00 00 00 00 00 00 F1 F1 DD 6E 02 DD 66 +R 00 00 01 00 02 04 01 00 +T AF 0B 00 00 03 4E 23 46 C5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 1B 00 +T B7 0B 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 1B 00 2B 0B 22 00 +T BD 0B 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 22 00 02 0A 01 00 +T C4 0B 00 00 F1 F1 18 1E +R 00 00 01 00 +T C8 0B 00 00 +R 00 00 01 00 +T C8 0B 00 00 DD 6E 10 DD 66 11 23 23 5E 23 56 +R 00 00 01 00 +T D3 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1E 00 02 0A 1E 00 +T D9 0B 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 01 00 +T E2 0B 00 00 C1 71 23 70 +R 00 00 01 00 +T E6 0B 00 00 +R 00 00 01 00 +T E6 0B 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T EC 0B 00 00 +R 00 00 01 00 +T EC 0B 00 00 CD 00 00 00 00 01 02 80 DD 6E 0E +R 00 00 01 00 02 05 15 00 +T F5 0B 00 00 DD 66 0F 3E 80 AC 67 ED 42 30 33 +R 00 00 01 00 +T 00 0C 00 00 +R 00 00 01 00 +T 00 0C 00 00 DD 6E 0C E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T 0B 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 22 00 02 0A 22 00 +T 11 0C 00 00 00 00 00 00 F1 F1 DD 6E 02 DD 66 +R 00 00 01 00 02 04 01 00 +T 1A 0C 00 00 03 4E 23 46 C5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 06 00 +T 22 0C 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 06 00 2B 0B 22 00 +T 28 0C 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 22 00 02 0A 01 00 +T 2F 0C 00 00 F1 F1 18 1E +R 00 00 01 00 +T 33 0C 00 00 +R 00 00 01 00 +T 33 0C 00 00 DD 6E 10 DD 66 11 23 23 5E 23 56 +R 00 00 01 00 +T 3E 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1E 00 02 0A 1E 00 +T 44 0C 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 01 00 +T 4D 0C 00 00 C1 71 23 70 +R 00 00 01 00 +T 51 0C 00 00 +R 00 00 01 00 +T 51 0C 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 07 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 79 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 79 65 73 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 74 72 75 65 00 +R 00 00 02 00 +T 0B 00 00 00 +R 00 00 02 00 +T 0B 00 00 00 6F 6E 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 31 00 +R 00 00 02 00 +T 10 00 00 00 +R 00 00 02 00 +T 10 00 00 00 73 65 74 00 +R 00 00 02 00 +T 14 00 00 00 +R 00 00 02 00 +T 14 00 00 00 65 6E 61 62 6C 65 00 +R 00 00 02 00 +T 1B 00 00 00 +R 00 00 02 00 +T 1B 00 00 00 6E 00 +R 00 00 02 00 +T 1D 00 00 00 +R 00 00 02 00 +T 1D 00 00 00 6E 6F 00 +R 00 00 02 00 +T 20 00 00 00 +R 00 00 02 00 +T 20 00 00 00 66 61 6C 73 65 00 +R 00 00 02 00 +T 26 00 00 00 +R 00 00 02 00 +T 26 00 00 00 6F 66 66 00 +R 00 00 02 00 +T 2A 00 00 00 +R 00 00 02 00 +T 2A 00 00 00 30 00 +R 00 00 02 00 +T 2C 00 00 00 +R 00 00 02 00 +T 2C 00 00 00 63 6C 65 61 72 00 +R 00 00 02 00 +T 32 00 00 00 +R 00 00 02 00 +T 32 00 00 00 64 69 73 61 62 6C 65 00 +R 00 00 02 00 +T 3A 00 00 00 +R 00 00 02 00 +T 3A 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 01 00 02 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 06 00 00 00 01 00 06 00 00 00 01 00 +R 00 00 04 00 00 06 02 00 +T 0C 00 00 00 0B 00 00 00 01 00 0E 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 12 00 00 00 01 00 10 00 00 00 01 00 +R 00 00 04 00 00 06 02 00 +T 18 00 00 00 14 00 00 00 01 00 1B 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 1E 00 00 00 00 00 1D 00 00 00 00 00 +R 00 00 04 00 00 06 02 00 +T 24 00 00 00 20 00 00 00 00 00 26 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 2A 00 00 00 00 00 2A 00 00 00 00 00 +R 00 00 04 00 00 06 02 00 +T 30 00 00 00 2C 00 00 00 00 00 32 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 36 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/net_lib/connect.rel b/src/nos/lib/net_lib/connect.rel new file mode 100644 index 00000000..311b8f73 --- /dev/null +++ b/src/nos/lib/net_lib/connect.rel @@ -0,0 +1,127 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 142 flags 0 +S _connect Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 7D B4 20 0C +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 05 00 +T 26 00 00 00 C3 3F 01 00 00 +R 00 00 01 00 00 05 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 7E 04 DD B6 05 20 0C +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 21 0E 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 05 00 +T 3A 00 00 00 C3 3F 01 00 00 +R 00 00 01 00 00 05 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 48 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 52 00 00 00 22 00 09 7E 23 B6 23 B6 28 33 DD +R 00 00 01 00 +T 5D 00 00 00 4E 0A DD 46 0B C5 DD 5E 04 DD 56 +R 00 00 01 00 +T 68 00 00 00 05 21 22 00 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T 73 00 00 00 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 7C 00 00 00 00 00 00 00 7D A4 3C 20 0C +R 00 00 01 00 02 04 00 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 21 67 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 05 00 +T 8C 00 00 00 C3 3F 01 00 00 +R 00 00 01 00 00 05 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 21 12 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 9A 00 00 00 23 B6 28 15 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 21 12 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T A9 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T AE 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 21 12 00 DD 4E FC DD 46 FD 09 E5 +R 00 00 01 00 +T BE 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T C6 00 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T CD 00 00 00 E1 73 23 72 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T D8 00 00 00 DD 4E 04 DD 46 05 21 12 00 DD 5E +R 00 00 01 00 +T E3 00 00 00 FC DD 56 FD 19 5E 23 56 3E +R 00 00 01 00 +T EC 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T F1 00 00 00 00 00 00 00 F1 21 14 00 DD 4E FC +R 00 00 01 00 02 04 00 00 +T FA 00 00 00 DD 46 FD 09 DD 4E 0A DD 46 0B 71 +R 00 00 01 00 +T 05 01 00 00 23 70 21 0B 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T 10 01 00 00 09 7E 23 B6 23 B6 28 24 DD 5E FC +R 00 00 01 00 +T 1B 01 00 00 DD 56 FD 21 0B 00 DD 4E FE DD 46 +R 00 00 01 00 +T 26 01 00 00 FF 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 30 01 00 00 00 00 00 00 7D A4 3C 20 05 +R 00 00 01 00 02 04 00 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 3C 01 00 00 +R 00 00 01 00 +T 3C 01 00 00 21 00 00 +R 00 00 01 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/copy_p.rel b/src/nos/lib/net_lib/copy_p.rel new file mode 100644 index 00000000..78082bf7 --- /dev/null +++ b/src/nos/lib/net_lib/copy_p.rel @@ -0,0 +1,96 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alloc_mbuf Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F9 flags 0 +S _copy_p Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 7E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 03 28 20 DD 7E 04 DD B6 05 28 +R 00 00 01 00 +T 14 00 00 00 18 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 1C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 21 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 00 00 +T 2A 00 00 00 B4 20 06 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 C3 F6 00 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 0A 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T 3E 00 00 00 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 7E 04 DD B6 05 CA F0 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 50 00 00 00 DD 7E 02 DD B6 03 CA F0 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 64 00 00 00 23 56 DD 6E 04 DD 66 05 A7 ED 52 +R 00 00 01 00 +T 6F 00 00 00 30 08 DD 6E 04 DD 66 05 18 0E +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 84 00 00 00 23 66 6A +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 DD 75 FE DD 74 FF E5 21 0A 00 DD +R 00 00 01 00 +T 92 00 00 00 4E 02 DD 46 03 09 4E 23 46 DD 5E +R 00 00 01 00 +T 9D 00 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T A4 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T AB 00 00 00 02 00 39 7E DD 86 FE 77 23 7E DD +R 00 00 01 00 +T B6 00 00 00 8E FF 77 21 0C 00 DD 4E FA DD 46 +R 00 00 01 00 +T C1 00 00 00 FB 09 7E DD 86 FE 77 23 7E DD 8E +R 00 00 01 00 +T CC 00 00 00 FF 77 21 0A 00 39 7E DD 96 FE 77 +R 00 00 01 00 +T D7 00 00 00 23 7E DD 9E FF 77 DD 6E 02 DD 66 +R 00 00 01 00 +T E2 00 00 00 03 46 23 66 68 DD 75 02 DD 74 03 +R 00 00 01 00 +T ED 00 00 00 C3 47 00 00 00 +R 00 00 01 00 00 05 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/crc.rel b/src/nos/lib/net_lib/crc.rel new file mode 100644 index 00000000..8b6abd2f --- /dev/null +++ b/src/nos/lib/net_lib/crc.rel @@ -0,0 +1,203 @@ +XL4 +H 4 areas 7 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 117 flags 0 +S _crc_gen Def0000007C +S _crc_check Def00000000 +A IDATA0 size 200 flags 0 +S _Fcstab Def00000000 +A CDATA0 size 200 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 36 FE FF +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 DD 36 FF FF +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 DD 6E 04 DD 66 05 2B DD 75 04 DD +R 00 00 01 00 +T 18 00 00 00 74 05 23 7D B4 28 44 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E FE DD 66 FF 6C 26 00 E5 DD +R 00 00 01 00 +T 2A 00 00 00 6E 02 DD 66 03 23 DD 75 02 DD 74 +R 00 00 01 00 +T 35 00 00 00 03 2B 4E 06 00 79 DD AE FE 6F 78 +R 00 00 01 00 +T 40 00 00 00 DD AE FF 67 7D E6 FF 4F 7C E6 00 +R 00 00 01 00 +T 4B 00 00 00 47 69 60 29 01 00 00 00 00 09 C1 +R 00 00 01 00 00 09 02 00 +T 54 00 00 00 79 AE 5F 78 23 AE 57 DD 73 FE DD +R 00 00 01 00 +T 5F 00 00 00 72 FF 18 AA +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 21 B8 F0 DD 4E FE DD 46 FF A7 ED +R 00 00 01 00 +T 6E 00 00 00 42 20 05 21 00 00 18 03 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 21 FF FF +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 CD 00 00 00 00 FE FF DD 36 FE FF +R 00 00 01 00 02 05 02 00 +T 85 00 00 00 DD 36 FF FF +R 00 00 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 DD 4E 04 DD 46 05 0B DD 71 04 DD +R 00 00 01 00 +T 94 00 00 00 70 05 03 21 02 00 A7 ED 42 30 44 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 DD 6E FE DD 66 FF 6C 26 00 E5 DD +R 00 00 01 00 +T AA 00 00 00 6E 02 DD 66 03 23 DD 75 02 DD 74 +R 00 00 01 00 +T B5 00 00 00 03 2B 4E 06 00 79 DD AE FE 6F 78 +R 00 00 01 00 +T C0 00 00 00 DD AE FF 67 7D E6 FF 4F 7C E6 00 +R 00 00 01 00 +T CB 00 00 00 47 69 60 29 01 00 00 00 00 09 C1 +R 00 00 01 00 00 09 02 00 +T D4 00 00 00 79 AE 5F 78 23 AE 57 DD 73 FE DD +R 00 00 01 00 +T DF 00 00 00 72 FF 18 A6 +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 21 00 00 39 7E EE FF 77 23 7E EE +R 00 00 01 00 +T EE 00 00 00 FF 77 DD 46 FE DD 6E 02 DD 66 03 +R 00 00 01 00 +T F9 00 00 00 23 DD 75 02 DD 74 03 2B 70 DD 6E +R 00 00 01 00 +T 04 01 00 00 FE DD 66 FF 6C 26 00 E5 DD 6E 02 +R 00 00 01 00 +T 0F 01 00 00 DD 66 03 C1 71 C3 00 00 00 00 +R 00 00 01 00 02 0A 00 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 89 11 12 23 9B 32 24 46 +R 00 00 03 00 +T 0A 00 00 00 AD 57 36 65 BF 74 48 8C C1 9D +R 00 00 03 00 +T 14 00 00 00 5A AF D3 BE 6C CA E5 DB 7E E9 +R 00 00 03 00 +T 1E 00 00 00 F7 F8 81 10 08 01 93 33 1A 22 +R 00 00 03 00 +T 28 00 00 00 A5 56 2C 47 B7 75 3E 64 C9 9C +R 00 00 03 00 +T 32 00 00 00 40 8D DB BF 52 AE ED DA 64 CB +R 00 00 03 00 +T 3C 00 00 00 FF F9 76 E8 02 21 8B 30 10 02 +R 00 00 03 00 +T 46 00 00 00 99 13 26 67 AF 76 34 44 BD 55 +R 00 00 03 00 +T 50 00 00 00 4A AD C3 BC 58 8E D1 9F 6E EB +R 00 00 03 00 +T 5A 00 00 00 E7 FA 7C C8 F5 D9 83 31 0A 20 +R 00 00 03 00 +T 64 00 00 00 91 12 18 03 A7 77 2E 66 B5 54 +R 00 00 03 00 +T 6E 00 00 00 3C 45 CB BD 42 AC D9 9E 50 8F +R 00 00 03 00 +T 78 00 00 00 EF FB 66 EA FD D8 74 C9 04 42 +R 00 00 03 00 +T 82 00 00 00 8D 53 16 61 9F 70 20 04 A9 15 +R 00 00 03 00 +T 8C 00 00 00 32 27 BB 36 4C CE C5 DF 5E ED +R 00 00 03 00 +T 96 00 00 00 D7 FC 68 88 E1 99 7A AB F3 BA +R 00 00 03 00 +T A0 00 00 00 85 52 0C 43 97 71 1E 60 A1 14 +R 00 00 03 00 +T AA 00 00 00 28 05 B3 37 3A 26 CD DE 44 CF +R 00 00 03 00 +T B4 00 00 00 DF FD 56 EC E9 98 60 89 FB BB +R 00 00 03 00 +T BE 00 00 00 72 AA 06 63 8F 72 14 40 9D 51 +R 00 00 03 00 +T C8 00 00 00 22 25 AB 34 30 06 B9 17 4E EF +R 00 00 03 00 +T D2 00 00 00 C7 FE 5C CC D5 DD 6A A9 E3 B8 +R 00 00 03 00 +T DC 00 00 00 78 8A F1 9B 87 73 0E 62 95 50 +R 00 00 03 00 +T E6 00 00 00 1C 41 A3 35 2A 24 B1 16 38 07 +R 00 00 03 00 +T F0 00 00 00 CF FF 46 EE DD DC 54 CD EB B9 +R 00 00 03 00 +T FA 00 00 00 62 A8 F9 9A 70 8B 08 84 81 95 +R 00 00 03 00 +T 04 01 00 00 1A A7 93 B6 2C C2 A5 D3 3E E1 +R 00 00 03 00 +T 0E 01 00 00 B7 F0 40 08 C9 19 52 2B DB 3A +R 00 00 03 00 +T 18 01 00 00 64 4E ED 5F 76 6D FF 7C 89 94 +R 00 00 03 00 +T 22 01 00 00 00 85 9B B7 12 A6 AD D2 24 C3 +R 00 00 03 00 +T 2C 01 00 00 BF F1 36 E0 C1 18 48 09 D3 3B +R 00 00 03 00 +T 36 01 00 00 5A 2A E5 5E 6C 4F F7 7D 7E 6C +R 00 00 03 00 +T 40 01 00 00 0A A5 83 B4 18 86 91 97 2E E3 +R 00 00 03 00 +T 4A 01 00 00 A7 F2 3C C0 B5 D1 42 29 CB 38 +R 00 00 03 00 +T 54 01 00 00 50 0A D9 1B 66 6F EF 7E 74 4C +R 00 00 03 00 +T 5E 01 00 00 FD 5D 8B B5 02 A4 99 96 10 87 +R 00 00 03 00 +T 68 01 00 00 AF F3 26 E2 BD D0 34 C1 C3 39 +R 00 00 03 00 +T 72 01 00 00 4A 28 D1 1A 58 0B E7 7F 6E 6E +R 00 00 03 00 +T 7C 01 00 00 F5 5C 7C 4D 0C C6 85 D7 1E E5 +R 00 00 03 00 +T 86 01 00 00 97 F4 28 80 A1 91 3A A3 B3 B2 +R 00 00 03 00 +T 90 01 00 00 44 4A CD 5B 56 69 DF 78 60 0C +R 00 00 03 00 +T 9A 01 00 00 E9 1D 72 2F FB 3E 8D D6 04 C7 +R 00 00 03 00 +T A4 01 00 00 9F F5 16 E4 A9 90 20 81 BB B3 +R 00 00 03 00 +T AE 01 00 00 32 A2 C5 5A 4C 4B D7 79 5E 68 +R 00 00 03 00 +T B8 01 00 00 E1 1C 68 0D F3 3F 7A 2E 0E E7 +R 00 00 03 00 +T C2 01 00 00 87 F6 1C C4 95 D5 2A A1 A3 B0 +R 00 00 03 00 +T CC 01 00 00 38 82 B1 93 46 6B CF 7A 54 48 +R 00 00 03 00 +T D6 01 00 00 DD 59 62 2D EB 3C 70 0E F9 1F +R 00 00 03 00 +T E0 01 00 00 8F F7 06 E6 9D D4 14 C5 AB B1 +R 00 00 03 00 +T EA 01 00 00 22 A0 B9 92 30 83 C7 7B 4E 6A +R 00 00 03 00 +T F4 01 00 00 D5 58 5C 49 E3 3D 6A 2C F1 1E +R 00 00 03 00 +T FE 01 00 00 78 0F +R 00 00 03 00 diff --git a/src/nos/lib/net_lib/dequeue.rel b/src/nos/lib/net_lib/dequeue.rel new file mode 100644 index 00000000..a26403b6 --- /dev/null +++ b/src/nos/lib/net_lib/dequeue.rel @@ -0,0 +1,54 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6A flags 0 +S _dequeue Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 03 20 05 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 00 00 18 55 +R 00 00 01 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 18 00 00 00 00 00 00 00 DD 75 FE DD 6E 02 DD +R 00 00 01 00 02 04 00 00 +T 21 00 00 00 66 03 46 23 66 68 DD 75 FC DD 74 +R 00 00 01 00 +T 2C 00 00 00 FD 7D B4 28 23 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T 3C 00 00 00 68 E5 DD 6E 02 DD 66 03 C1 71 23 +R 00 00 01 00 +T 47 00 00 00 70 DD 6E FC DD 66 FD 23 23 AF 77 +R 00 00 01 00 +T 52 00 00 00 23 77 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 5E FE 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 5C 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 63 00 00 00 FC DD 66 FD +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/devparam.rel b/src/nos/lib/net_lib/devparam.rel new file mode 100644 index 00000000..3d6711ff --- /dev/null +++ b/src/nos/lib/net_lib/devparam.rel @@ -0,0 +1,248 @@ +XL4 +H 5 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ___ctype Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S _strnicmp Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E6 flags 0 +S _devparam Def00000000 +S _parmname Def00000095 +A CSTR size 84 flags 0 +A IDATA0 size 58 flags 0 +A CDATA0 size 58 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD DD 6E 02 DD 66 03 4E +R 00 00 01 00 +T 20 00 00 00 06 00 21 00 00 00 00 09 7E E6 08 +R 00 00 01 00 02 07 04 00 +T 29 00 00 00 28 10 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 33 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 3A 00 00 00 57 +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 DD 36 FE 00 00 00 00 DD 36 FF +R 00 00 01 00 09 07 03 00 +T 42 00 00 00 00 00 00 00 +R 00 00 01 00 89 04 03 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 6E FE DD 66 FF 7E 23 A6 3C 28 +R 00 00 01 00 +T 4E 00 00 00 40 +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 DD 6E FC DD 66 FD E5 DD 6E FE DD +R 00 00 01 00 +T 5A 00 00 00 66 FF 23 23 4E 23 46 DD 5E 02 DD +R 00 00 01 00 +T 65 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T 6A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 71 00 00 00 B4 20 0C +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 18 +R 00 00 01 00 +T 7F 00 00 00 12 +R 00 00 01 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 DD 7E FE C6 04 DD 77 FE 30 03 DD +R 00 00 01 00 +T 8B 00 00 00 34 FF +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 18 B4 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 21 FF FF +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 CD 00 00 00 00 FE FF DD 36 FE +R 00 00 01 00 02 05 05 00 +T 9D 00 00 00 00 00 00 00 DD 36 FF 00 00 00 00 +R 00 00 01 00 09 04 03 00 89 0B 03 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 DD 6E FE DD 66 FF 7E 23 A6 3C 28 +R 00 00 01 00 +T AD 00 00 00 32 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T B9 00 00 00 4E 02 DD 46 03 A7 ED 42 20 0E +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 DD 6E FE DD 66 FF 23 23 46 23 66 +R 00 00 01 00 +T CE 00 00 00 68 18 12 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 DD 7E FE C6 04 DD 77 FE 30 03 DD +R 00 00 01 00 +T DC 00 00 00 34 FF +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 18 C2 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 21 00 00 +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 44 61 74 61 00 +R 00 00 02 00 +T 05 00 00 00 +R 00 00 02 00 +T 05 00 00 00 54 78 44 65 6C 61 79 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 50 65 72 73 69 73 74 00 +R 00 00 02 00 +T 15 00 00 00 +R 00 00 02 00 +T 15 00 00 00 53 6C 6F 74 54 69 6D 65 00 +R 00 00 02 00 +T 1E 00 00 00 +R 00 00 02 00 +T 1E 00 00 00 54 78 54 61 69 6C 00 +R 00 00 02 00 +T 25 00 00 00 +R 00 00 02 00 +T 25 00 00 00 46 75 6C 6C 44 75 70 00 +R 00 00 02 00 +T 2D 00 00 00 +R 00 00 02 00 +T 2D 00 00 00 48 61 72 64 77 61 72 65 00 +R 00 00 02 00 +T 36 00 00 00 +R 00 00 02 00 +T 36 00 00 00 54 78 4D 75 74 65 00 +R 00 00 02 00 +T 3D 00 00 00 +R 00 00 02 00 +T 3D 00 00 00 44 54 52 00 +R 00 00 02 00 +T 41 00 00 00 +R 00 00 02 00 +T 41 00 00 00 52 54 53 00 +R 00 00 02 00 +T 45 00 00 00 +R 00 00 02 00 +T 45 00 00 00 53 70 65 65 64 00 +R 00 00 02 00 +T 4B 00 00 00 +R 00 00 02 00 +T 4B 00 00 00 45 6E 64 44 65 6C 61 79 00 +R 00 00 02 00 +T 54 00 00 00 +R 00 00 02 00 +T 54 00 00 00 47 72 6F 75 70 00 +R 00 00 02 00 +T 5A 00 00 00 +R 00 00 02 00 +T 5A 00 00 00 49 64 6C 65 00 +R 00 00 02 00 +T 5F 00 00 00 +R 00 00 02 00 +T 5F 00 00 00 4D 69 6E 00 +R 00 00 02 00 +T 63 00 00 00 +R 00 00 02 00 +T 63 00 00 00 4D 61 78 4B 65 79 00 +R 00 00 02 00 +T 6A 00 00 00 +R 00 00 02 00 +T 6A 00 00 00 57 61 69 74 00 +R 00 00 02 00 +T 6F 00 00 00 +R 00 00 02 00 +T 6F 00 00 00 44 6F 77 6E 00 +R 00 00 02 00 +T 74 00 00 00 +R 00 00 02 00 +T 74 00 00 00 55 70 00 +R 00 00 02 00 +T 77 00 00 00 +R 00 00 02 00 +T 77 00 00 00 42 6C 69 6E 64 00 +R 00 00 02 00 +T 7D 00 00 00 +R 00 00 02 00 +T 7D 00 00 00 52 65 74 75 72 6E 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 00 00 01 00 +R 00 00 04 00 00 06 02 00 +T 06 00 00 00 05 00 00 00 02 00 0D 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 0C 00 00 00 03 00 15 00 00 00 04 00 +R 00 00 04 00 00 06 02 00 +T 12 00 00 00 1E 00 00 00 05 00 25 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 18 00 00 00 06 00 2D 00 00 00 07 00 +R 00 00 04 00 00 06 02 00 +T 1E 00 00 00 36 00 00 00 08 00 3D 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 24 00 00 00 09 00 41 00 00 00 0A 00 +R 00 00 04 00 00 06 02 00 +T 2A 00 00 00 45 00 00 00 0B 00 4B 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 30 00 00 00 0C 00 54 00 00 00 0D 00 +R 00 00 04 00 00 06 02 00 +T 36 00 00 00 5A 00 00 00 0E 00 5F 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 3C 00 00 00 0F 00 63 00 00 00 10 00 +R 00 00 04 00 00 06 02 00 +T 42 00 00 00 6A 00 00 00 81 00 6F 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 48 00 00 00 82 00 74 00 00 00 83 00 +R 00 00 04 00 00 06 02 00 +T 4E 00 00 00 77 00 00 00 FF 00 7D 00 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 +T 54 00 00 00 FF FF 00 00 +R 00 00 04 00 diff --git a/src/nos/lib/net_lib/diagopen.rel b/src/nos/lib/net_lib/diagopen.rel new file mode 100644 index 00000000..c36c491a --- /dev/null +++ b/src/nos/lib/net_lib/diagopen.rel @@ -0,0 +1,89 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fcreat Ref00000000 +S _strchr Ref00000000 +S .__.ABS. Def00000000 +S _strcpy Ref00000000 +S _diag_open Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B6 flags 0 +S _diagopen Def00000000 +A CSTR size 3 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 DD 77 FF DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 18 00 00 00 00 00 00 00 7D A4 3C 20 06 +R 00 00 01 00 02 04 00 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 00 00 C3 B3 00 00 00 +R 00 00 01 00 00 08 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 2B 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 00 00 +T 34 00 00 00 B4 20 05 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 21 00 00 18 77 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 01 74 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 46 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 4B 00 00 00 00 00 00 00 7D B4 28 08 +R 00 00 01 00 02 04 00 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 64 00 00 00 5E 02 DD 56 03 73 23 72 21 0E 00 +R 00 00 01 00 +T 6F 00 00 00 09 36 03 21 0F 00 09 36 01 21 +R 00 00 01 00 +T 79 00 00 00 10 00 09 DD CB FE 46 28 04 CB D6 +R 00 00 01 00 +T 84 00 00 00 18 02 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 CB 96 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 21 19 00 DD 4E FC DD 46 FD 09 36 +R 00 00 01 00 +T 93 00 00 00 80 23 36 00 01 00 00 00 00 21 +R 00 00 01 00 00 09 02 00 +T 9B 00 00 00 16 00 DD 5E FC DD 56 FD 19 EB 3E +R 00 00 01 00 +T A6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T AB 00 00 00 00 00 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 00 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 0D 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/displayopen.rel b/src/nos/lib/net_lib/displayopen.rel new file mode 100644 index 00000000..0e105c67 --- /dev/null +++ b/src/nos/lib/net_lib/displayopen.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S _displayopen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 02 00 +T 07 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/net_lib/dodetach.rel b/src/nos/lib/net_lib/dodetach.rel new file mode 100644 index 00000000..ee10435e --- /dev/null +++ b/src/nos/lib/net_lib/dodetach.rel @@ -0,0 +1,61 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _if_lookup Ref00000000 +S ___02a9_6e91_Interface_20_25s_20 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _if_detach Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___0206_d5d6_Can_27t_20detach_20 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6B flags 0 +S _dodetach Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 03 03 0A 5F +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 03 0A 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 16 00 00 00 FE DD 74 FF 7D B4 20 23 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 29 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 02 00 +T 2E 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 0A 08 00 +T 34 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 3B 00 00 00 F1 21 01 00 18 27 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 49 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 50 00 00 00 A4 3C 20 11 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 07 00 02 0B 07 00 +T 5A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 60 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 00 00 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/dodialer.rel b/src/nos/lib/net_lib/dodialer.rel new file mode 100644 index 00000000..96d663f5 --- /dev/null +++ b/src/nos/lib/net_lib/dodialer.rel @@ -0,0 +1,116 @@ +XL4 +H 2 areas C global symbols +S ___0236_3894_Dialing_20not_20sup Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _if_lookup Ref00000000 +S ___02a9_6e91_Interface_20_25s_20 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atol Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 148 flags 0 +S _dodialer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 03 03 0A 5F +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 03 0A 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 16 00 00 00 FA DD 74 FB 7D B4 20 24 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 29 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 03 00 +T 2E 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 2B 0A 09 00 +T 34 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 3B 00 00 00 F1 21 01 00 C3 45 01 00 00 +R 00 00 01 00 00 09 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 01 03 80 DD 6E 02 DD 66 03 3E 80 +R 00 00 01 00 +T 4D 00 00 00 AC 67 ED 42 30 41 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 21 3D 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T 5E 00 00 00 23 66 68 01 1E 00 09 7E 23 B6 23 +R 00 00 01 00 +T 69 00 00 00 B6 28 22 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 5E FA DD 56 FB 21 3D 00 DD 4E +R 00 00 01 00 +T 77 00 00 00 FA DD 46 FB 09 46 23 66 68 01 +R 00 00 01 00 +T 81 00 00 00 1E 00 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 8C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 00 00 C3 45 01 00 00 +R 00 00 01 00 00 08 01 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 21 3D 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T 9F 00 00 00 23 66 68 01 1B 00 09 7E 23 B6 23 +R 00 00 01 00 +T AA 00 00 00 B6 20 23 +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T B8 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 00 00 +T BD 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 0A 09 00 +T C3 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T CA 00 00 00 F1 21 01 00 18 75 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T DB 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T E0 00 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 08 00 02 09 01 00 +T E7 00 00 00 01 00 00 21 E8 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T F0 00 00 00 DD 75 FC DD 74 FD DD 71 FE DD 70 +R 00 00 01 00 +T FB 00 00 00 FF 21 06 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T 06 01 00 00 E5 DD 6E 02 DD 66 03 2B 2B 2B E5 +R 00 00 01 00 +T 11 01 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD +R 00 00 01 00 +T 1C 01 00 00 66 FD E5 DD 5E FA DD 56 FB 21 +R 00 00 01 00 +T 26 01 00 00 3D 00 DD 4E FA DD 46 FB 09 46 23 +R 00 00 01 00 +T 31 01 00 00 66 68 01 1B 00 09 4E 23 46 23 7E +R 00 00 01 00 +T 3C 01 00 00 69 60 CD 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 07 01 00 +T 45 01 00 00 +R 00 00 01 00 +T 45 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/net_lib/dofiles.rel b/src/nos/lib/net_lib/dofiles.rel new file mode 100644 index 00000000..f525c2d7 --- /dev/null +++ b/src/nos/lib/net_lib/dofiles.rel @@ -0,0 +1,354 @@ +XL4 +H 3 areas 21 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0091_2269__20ERR Ref00000000 +S ___00c6_e3db__20none Ref00000000 +S ___00dc_f2f3__20sock Ref00000000 +S ___0107_ea81__25_2d4d Ref00000000 +S ___00b8_e36a__20file Ref00000000 +S ___007e_9556__20_28_25s_20seek_3 Ref00000000 +S ___0031_8d78__20_20_20_20 Ref00000000 +S ___006e_85f4__20_25_2d3d_20 Ref00000000 +S __Files Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___00a2_c86b__20TMP Ref00000000 +S _ftell Ref00000000 +S ___0071_4d6e__20_2502x Ref00000000 +S ___00c3_0c74__20line Ref00000000 +S ___0030_3839__20_20_20 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ___011b_936b__254s Ref00000000 +S _fputc Ref00000000 +S ___00b9_5e9d__20full Ref00000000 +S ___0088_01a0__20APND Ref00000000 +S ___00b7_4976__20diag Ref00000000 +S ___00b0_bc24__20asy_20 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___0090_5125__20EOF Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___00d5_5760__20pipe Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S ___0488_c066_fp_20_20_20_20_20_2 Ref00000000 +S ___0134_d273__25p_20 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32D flags 0 +S _dofiles Def00000000 +A CSTR size A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 1E +R 00 00 01 00 02 05 18 00 +T 06 00 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 1E 00 02 0A 1E 00 +T 0C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T 12 00 00 00 00 00 00 00 F1 F1 2A 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0B 09 00 +T 19 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 7E FC DD B6 FD CA 27 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 6E FC DD 66 FD E5 0E +R 00 00 01 00 +T 30 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 1F 00 02 0A 1F 00 +T 36 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T 3C 00 00 00 00 00 00 00 F1 F1 F1 21 08 00 DD +R 00 00 01 00 02 04 00 00 +T 45 00 00 00 4E FC DD 46 FD 09 7E 23 A6 3C 28 +R 00 00 01 00 +T 50 00 00 00 22 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T 5C 00 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 04 00 +T 63 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 2B 0A 1A 00 +T 69 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1A 00 02 09 00 00 +T 70 00 00 00 F1 18 11 +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 07 00 02 0B 07 00 +T 79 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 7F 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 DD 6E FC DD 66 FD 23 23 4E 23 46 +R 00 00 01 00 +T 8F 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 08 00 +T 94 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 2B 0A 1A 00 +T 9A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1A 00 02 09 00 00 +T A1 00 00 00 F1 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 01 02 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T B4 00 00 00 AC 67 ED 42 30 59 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 DD 6E FE DD 66 FF DD 4E FC DD 46 +R 00 00 01 00 +T C5 00 00 00 FD 09 01 16 00 09 7E B7 28 29 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 DD 6E FE DD 66 FF DD 4E FC DD 46 +R 00 00 01 00 +T DA 00 00 00 FD 09 01 16 00 09 4E 06 00 C5 0E +R 00 00 01 00 +T E5 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0D 00 02 0A 0D 00 +T EB 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T F1 00 00 00 00 00 00 00 F1 F1 F1 18 11 +R 00 00 01 00 02 04 00 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0F 00 02 0B 0F 00 +T FE 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 04 01 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 18 96 +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 21 0E 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 1E 01 00 00 CD 00 00 00 00 05 00 00 01 02 03 +R 00 00 01 00 02 05 1D 00 +T 27 01 00 00 05 93 01 00 00 5A 01 00 00 +R 00 00 01 00 00 05 01 00 00 09 01 00 +T 2C 01 00 00 80 01 00 00 6D 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 30 01 00 00 34 01 00 00 47 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 34 01 00 00 +R 00 00 01 00 +T 34 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 3A 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 40 01 00 00 CD 00 00 00 00 F1 F1 18 4C +R 00 00 01 00 02 05 00 00 +T 47 01 00 00 +R 00 00 01 00 +T 47 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T 4D 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 53 01 00 00 CD 00 00 00 00 F1 F1 18 39 +R 00 00 01 00 02 05 00 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1C 00 02 0B 1C 00 +T 60 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 66 01 00 00 CD 00 00 00 00 F1 F1 18 26 +R 00 00 01 00 02 05 00 00 +T 6D 01 00 00 +R 00 00 01 00 +T 6D 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 17 00 02 0B 17 00 +T 73 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 79 01 00 00 CD 00 00 00 00 F1 F1 18 13 +R 00 00 01 00 02 05 00 00 +T 80 01 00 00 +R 00 00 01 00 +T 80 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 16 00 02 0B 16 00 +T 86 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 8C 01 00 00 CD 00 00 00 00 F1 F1 18 00 +R 00 00 01 00 02 05 00 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 21 10 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 9E 01 00 00 E6 04 57 23 7E E6 00 B2 28 05 21 +R 00 00 01 00 +T A9 01 00 00 00 00 00 00 18 03 +R 00 00 01 00 00 04 02 00 +T AD 01 00 00 +R 00 00 01 00 +T AD 01 00 00 21 05 00 00 00 +R 00 00 01 00 00 05 02 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 12 00 +T B5 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 12 00 2B 0A 1A 00 +T BB 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1A 00 02 09 00 00 +T C2 01 00 00 F1 21 0F 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T CD 01 00 00 7E FE 03 20 13 +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 02 00 02 0B 02 00 +T D8 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T DE 01 00 00 CD 00 00 00 00 F1 F1 18 2E +R 00 00 01 00 02 05 00 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 FE 02 20 13 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 0E 00 +T ED 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 2B 0A 1A 00 +T F3 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1A 00 02 09 00 00 +T FA 01 00 00 18 17 +R 00 00 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 FE 01 20 13 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 14 00 +T 04 02 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 14 00 2B 0A 1A 00 +T 0A 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1A 00 02 09 00 00 +T 11 02 00 00 18 00 +R 00 00 01 00 +T 13 02 00 00 +R 00 00 01 00 +T 13 02 00 00 21 10 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 1E 02 00 00 E6 02 47 23 7E E6 00 B0 28 11 +R 00 00 01 00 +T 28 02 00 00 +R 00 00 01 00 +T 28 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 19 00 02 0B 19 00 +T 2E 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 34 02 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 39 02 00 00 +R 00 00 01 00 +T 39 02 00 00 21 10 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 44 02 00 00 E6 01 47 23 7E E6 00 B0 28 11 +R 00 00 01 00 +T 4E 02 00 00 +R 00 00 01 00 +T 4E 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 54 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 5A 02 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 5F 02 00 00 +R 00 00 01 00 +T 5F 02 00 00 21 10 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 6A 02 00 00 E6 08 47 23 7E E6 00 B0 28 11 +R 00 00 01 00 +T 74 02 00 00 +R 00 00 01 00 +T 74 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 15 00 02 0B 15 00 +T 7A 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 80 02 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 85 02 00 00 +R 00 00 01 00 +T 85 02 00 00 21 10 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 90 02 00 00 E6 10 47 23 7E E6 00 B0 28 11 +R 00 00 01 00 +T 9A 02 00 00 +R 00 00 01 00 +T 9A 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0B 00 02 0B 0B 00 +T A0 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T A6 02 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T AB 02 00 00 +R 00 00 01 00 +T AB 02 00 00 21 0E 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T B6 02 00 00 B7 20 41 21 1B 00 DD 4E FC DD 46 +R 00 00 01 00 +T C1 02 00 00 FD 09 7E 23 B6 28 32 +R 00 00 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T D0 02 00 00 21 00 00 00 00 CD 00 00 00 00 C5 +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T D7 02 00 00 E5 21 1B 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T E2 02 00 00 4E 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 06 00 +T EA 02 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 2B 0A 1A 00 +T F0 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1A 00 02 09 00 00 +T F7 02 00 00 F1 F1 F1 +R 00 00 01 00 +T FA 02 00 00 +R 00 00 01 00 +T FA 02 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 10 00 +T 03 03 00 00 23 46 11 0A 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 13 00 +T 0B 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 11 03 00 00 06 00 DD 4E FC DD 46 FD 09 56 23 +R 00 00 01 00 +T 1C 03 00 00 66 6A DD 75 FC DD 74 FD C3 +R 00 00 01 00 +T 25 03 00 00 1F 00 00 00 +R 00 00 01 00 00 04 01 00 +T 27 03 00 00 +R 00 00 01 00 +T 27 03 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 0A 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 74 78 74 00 +R 00 00 02 00 +T 05 00 00 00 +R 00 00 02 00 +T 05 00 00 00 20 62 69 6E 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/doifconfig.rel b/src/nos/lib/net_lib/doifconfig.rel new file mode 100644 index 00000000..8b7a01f8 --- /dev/null +++ b/src/nos/lib/net_lib/doifconfig.rel @@ -0,0 +1,147 @@ +XL4 +H 2 areas F global symbols +S ___01ea_52c7_Argument_20missing_ Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _if_lookup Ref00000000 +S ___02a9_6e91_Interface_20_25s_20 Ref00000000 +S _Ifaces Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Ifcmds Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _showiface Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14C flags 0 +S _doifconfig Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 11 02 80 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 14 00 00 00 30 37 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 2A 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 04 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 7E FC DD B6 FD 28 20 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 2F 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0C 00 02 0A 01 00 +T 36 00 00 00 6E FC DD 66 FD 46 23 66 68 DD 75 +R 00 00 01 00 +T 41 00 00 00 FC DD 74 FD 18 D8 +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 21 00 00 C3 49 01 00 00 +R 00 00 01 00 00 08 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 58 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 5E 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 01 00 +T 67 00 00 00 B4 20 24 +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 75 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 03 00 +T 7A 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 2B 0A 0A 00 +T 80 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 87 00 00 00 F1 21 01 00 C3 49 01 00 00 +R 00 00 01 00 00 09 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 3E 02 DD AE 02 DD B6 03 20 3E +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T A0 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0C 00 02 0A 01 00 +T A7 00 00 00 48 00 DD 4E FC DD 46 FD 09 7E 23 +R 00 00 01 00 +T B2 00 00 00 B6 23 B6 28 1A +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 DD 5E FC DD 56 FD 21 48 00 DD 4E +R 00 00 01 00 +T C2 00 00 00 FC DD 46 FD 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T CD 00 00 00 60 CD 00 00 00 00 +R 00 00 01 00 02 06 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 21 00 00 18 73 +R 00 00 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 3E 03 DD AE 02 DD B6 03 20 16 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 00 00 02 0B 00 00 +T E6 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T EC 00 00 00 CD 00 00 00 00 F1 F1 21 01 00 18 +R 00 00 01 00 02 05 01 00 +T F5 00 00 00 53 +R 00 00 01 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 DD 36 FE 02 DD 36 FF 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 DD 4E 02 DD 46 03 0B DD 6E FE DD +R 00 00 01 00 +T 09 01 00 00 66 FF CD 00 00 00 00 30 36 +R 00 00 01 00 02 07 09 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 DD 6E FC DD 66 FD E5 DD 6E FE DD +R 00 00 01 00 +T 1B 01 00 00 66 FF 29 DD 4E 04 DD 46 05 09 2B +R 00 00 01 00 +T 26 01 00 00 2B E5 01 03 00 11 00 00 00 00 3E +R 00 00 01 00 02 0A 06 00 +T 2F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 34 01 00 00 00 00 00 00 F1 F1 21 02 00 39 7E +R 00 00 01 00 02 04 01 00 +T 3D 01 00 00 C6 02 77 30 02 23 34 +R 00 00 01 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 18 B8 +R 00 00 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 21 00 00 +R 00 00 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/net_lib/dup_p.rel b/src/nos/lib/net_lib/dup_p.rel new file mode 100644 index 00000000..26020e8c --- /dev/null +++ b/src/nos/lib/net_lib/dup_p.rel @@ -0,0 +1,194 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alloc_mbuf Ref00000000 +S .__.ABS. Def00000000 +S _free_mbuf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 220 flags 0 +S _dup_p Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 7E 0C DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 0D 28 10 DD 7E 04 DD B6 05 28 +R 00 00 01 00 +T 14 00 00 00 08 DD 7E 02 DD B6 03 20 18 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 7E 02 DD B6 03 28 0A +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E 02 DD 66 03 AF 77 23 77 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 21 00 00 C3 1D 02 00 00 +R 00 00 01 00 00 08 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 3B 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 42 00 00 00 FC DD 74 FD E5 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 4D 00 00 00 C1 71 23 70 79 B0 20 06 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 21 00 00 C3 1D 02 00 00 +R 00 00 01 00 00 08 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 DD 7E 04 DD B6 05 28 3D 21 0C 00 +R 00 00 01 00 +T 66 00 00 00 DD 4E 04 DD 46 05 09 4E 23 46 DD +R 00 00 01 00 +T 71 00 00 00 6E 0A DD 66 0B A7 ED 42 38 25 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 21 0C 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 86 00 00 00 23 56 21 0E 00 39 7E 93 77 23 7E +R 00 00 01 00 +T 91 00 00 00 9A 77 0A 6F 03 0A 67 DD 75 04 DD +R 00 00 01 00 +T 9C 00 00 00 74 05 18 BB +R 00 00 01 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 DD 7E 04 DD B6 05 20 1E +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T B0 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T B7 00 00 00 6E 02 DD 66 03 AF 77 23 77 21 +R 00 00 01 00 +T C1 00 00 00 00 00 C3 1D 02 00 00 +R 00 00 01 00 00 07 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 21 08 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T D8 00 00 00 23 B6 28 1E +R 00 00 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 E5 +R 00 00 01 00 +T E7 00 00 00 21 08 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T F2 00 00 00 23 46 E1 71 23 70 18 13 +R 00 00 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 05 01 00 00 4E 04 DD 46 05 71 23 70 +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 21 08 00 DD 4E FC DD 46 FD 09 56 +R 00 00 01 00 +T 18 01 00 00 23 66 6A 11 06 00 19 34 23 20 01 +R 00 00 01 00 +T 23 01 00 00 34 +R 00 00 01 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 21 0A 00 DD 4E FC DD 46 FD 09 E5 +R 00 00 01 00 +T 2F 01 00 00 21 0A 00 DD 5E 04 DD 56 05 19 7E +R 00 00 01 00 +T 3A 01 00 00 23 66 6F DD 4E 0A DD 46 0B 09 4D +R 00 00 01 00 +T 45 01 00 00 44 E1 71 23 70 21 0C 00 DD 4E FC +R 00 00 01 00 +T 50 01 00 00 DD 46 FD 09 E5 21 0C 00 19 7E 23 +R 00 00 01 00 +T 5B 01 00 00 66 6F DD 4E 0A DD 46 0B A7 ED 42 +R 00 00 01 00 +T 66 01 00 00 4D 44 DD 6E 0C DD 66 0D A7 ED 42 +R 00 00 01 00 +T 71 01 00 00 30 08 DD 5E 0C DD 56 0D 18 18 +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 21 0C 00 DD 4E 04 DD 46 05 09 56 +R 00 00 01 00 +T 86 01 00 00 23 66 6A DD 5E 0A DD 56 0B A7 ED +R 00 00 01 00 +T 91 01 00 00 52 EB +R 00 00 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 E1 73 23 72 AF DD 77 0A DD 77 0B +R 00 00 01 00 +T 9E 01 00 00 21 0C 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T A9 01 00 00 23 56 21 10 00 39 7E 93 77 23 7E +R 00 00 01 00 +T B4 01 00 00 9A 77 21 0C 00 09 4E 23 46 21 +R 00 00 01 00 +T BE 01 00 00 02 00 39 7E 81 77 23 7E 88 77 DD +R 00 00 01 00 +T C9 01 00 00 6E 04 DD 66 05 46 23 66 68 DD 75 +R 00 00 01 00 +T D4 01 00 00 04 DD 74 05 DD 7E 0C DD B6 0D 28 +R 00 00 01 00 +T DF 01 00 00 22 DD 7E 04 DD B6 05 28 1A 11 +R 00 00 01 00 +T E9 01 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T EE 01 00 00 00 00 00 00 CD 00 00 00 00 E5 DD +R 00 00 01 00 02 04 02 00 02 09 00 00 +T F5 01 00 00 6E FC DD 66 FD C1 71 23 70 79 B0 +R 00 00 01 00 +T 00 02 00 00 20 02 +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 18 13 +R 00 00 01 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 0F 02 00 00 75 FC DD 74 FD C3 CD 00 00 00 +R 00 00 01 00 00 0A 01 00 +T 17 02 00 00 +R 00 00 01 00 +T 17 02 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 1D 02 00 00 +R 00 00 01 00 +T 1D 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/enqueue.rel b/src/nos/lib/net_lib/enqueue.rel new file mode 100644 index 00000000..7ade89e3 --- /dev/null +++ b/src/nos/lib/net_lib/enqueue.rel @@ -0,0 +1,89 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C2 flags 0 +S _enqueue Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 B6 03 28 13 DD 7E 04 DD B6 05 28 +R 00 00 01 00 +T 14 00 00 00 0B DD 6E 04 DD 66 05 7E 23 B6 20 +R 00 00 01 00 +T 1F 00 00 00 03 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 C3 BF 00 00 00 +R 00 00 01 00 00 05 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 29 00 00 00 00 00 00 00 DD 75 FE DD 6E 02 DD +R 00 00 01 00 02 04 00 00 +T 32 00 00 00 66 03 7E 23 B6 20 17 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 E5 +R 00 00 01 00 +T 44 00 00 00 DD 6E 02 DD 66 03 C1 71 23 70 18 +R 00 00 01 00 +T 4F 00 00 00 47 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T 5B 00 00 00 75 FC DD 74 FD +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 6E FC DD 66 FD 23 23 7E 23 B6 +R 00 00 01 00 +T 6B 00 00 00 28 14 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T 78 00 00 00 68 DD 75 FC DD 74 FD 18 DF +R 00 00 01 00 +T 81 00 00 00 +R 00 00 01 00 +T 81 00 00 00 DD 6E FC DD 66 FD 23 23 E5 DD 6E +R 00 00 01 00 +T 8C 00 00 00 04 DD 66 05 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 DD 6E 04 DD 66 05 AF 77 23 77 DD +R 00 00 01 00 +T A2 00 00 00 5E FE 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T A9 00 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T AF 00 00 00 01 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T B8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T BD 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/eolseq.rel b/src/nos/lib/net_lib/eolseq.rel new file mode 100644 index 00000000..e0949ac6 --- /dev/null +++ b/src/nos/lib/net_lib/eolseq.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 41 flags 0 +S _eolseq Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 0B +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 03 00 +T 26 00 00 00 18 16 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 08 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T 33 00 00 00 23 66 68 01 2D 00 09 46 23 66 68 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/exit.rel b/src/nos/lib/net_lib/exit.rel new file mode 100644 index 00000000..9ec3a736 --- /dev/null +++ b/src/nos/lib/net_lib/exit.rel @@ -0,0 +1,53 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _acrlf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _amess Ref00000000 +S _ahexw Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _fcloseall Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3D flags 0 +S _exit Def00000000 +A CSTR size 13 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 2B 0A 07 00 +T 06 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 0C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 11 00 00 00 00 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 02 04 00 00 00 09 02 00 +T 17 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 1C 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 00 00 +T 25 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 2A 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 01 00 +T 2F 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 AF 3C 28 02 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 18 FA +R 00 00 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6B 65 72 6E 65 6C 3A 20 65 78 69 +R 00 00 02 00 +T 0B 00 00 00 74 63 6F 64 65 3A 20 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/extract.rel b/src/nos/lib/net_lib/extract.rel new file mode 100644 index 00000000..4a426632 --- /dev/null +++ b/src/nos/lib/net_lib/extract.rel @@ -0,0 +1,113 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 150 flags 0 +S _extract Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FA DD 74 FB AF DD 77 +R 00 00 01 00 +T 14 00 00 00 FC DD 77 FD +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 7E 02 DD B6 03 28 3D 21 0C 00 +R 00 00 01 00 +T 23 00 00 00 DD 4E 02 DD 46 03 09 4E 23 46 DD +R 00 00 01 00 +T 2E 00 00 00 6E 04 DD 66 05 A7 ED 42 38 25 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 43 00 00 00 23 56 21 0A 00 39 7E 93 77 23 7E +R 00 00 01 00 +T 4E 00 00 00 9A 77 0A 6F 03 0A 67 DD 75 02 DD +R 00 00 01 00 +T 59 00 00 00 74 03 18 BB +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 DD 7E 02 DD B6 03 CA 47 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 66 00 00 00 DD 7E 0C DD B6 0D CA 47 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 7A 00 00 00 23 66 6A DD 5E 04 DD 56 05 A7 ED +R 00 00 01 00 +T 85 00 00 00 52 4D 44 DD 6E 0C DD 66 0D A7 ED +R 00 00 01 00 +T 90 00 00 00 42 30 08 DD 6E 0C DD 66 0D 18 17 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T A6 00 00 00 23 66 6A DD 5E 04 DD 56 05 A7 ED +R 00 00 01 00 +T B1 00 00 00 52 +R 00 00 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 DD 75 FE DD 74 FF E5 21 0A 00 DD +R 00 00 01 00 +T BD 00 00 00 4E 02 DD 46 03 09 56 23 66 6A DD +R 00 00 01 00 +T C8 00 00 00 5E 04 DD 56 05 19 4D 44 DD 5E FA +R 00 00 01 00 +T D3 00 00 00 DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T D9 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T E0 00 00 00 02 00 39 7E DD 86 FE 77 23 7E DD +R 00 00 01 00 +T EB 00 00 00 8E FF 77 21 00 00 39 7E DD 86 FE +R 00 00 01 00 +T F6 00 00 00 77 23 7E DD 8E FF 77 21 12 00 39 +R 00 00 01 00 +T 01 01 00 00 7E DD 96 FE 77 23 7E DD 9E FF 77 +R 00 00 01 00 +T 0C 01 00 00 DD 6E 04 DD 66 05 DD 4E FE DD 46 +R 00 00 01 00 +T 17 01 00 00 FF 09 E5 21 0C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 22 01 00 00 03 09 4E 23 46 E1 A7 ED 42 20 10 +R 00 00 01 00 +T 2D 01 00 00 +R 00 00 01 00 +T 2D 01 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T 38 01 00 00 75 02 DD 74 03 +R 00 00 01 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 AF DD 77 04 DD 77 05 C3 +R 00 00 01 00 +T 45 01 00 00 5D 00 00 00 +R 00 00 01 00 00 04 01 00 +T 47 01 00 00 +R 00 00 01 00 +T 47 01 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/net_lib/fblock.rel b/src/nos/lib/net_lib/fblock.rel new file mode 100644 index 00000000..8500472f --- /dev/null +++ b/src/nos/lib/net_lib/fblock.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 56 flags 0 +S _fblock Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 B6 03 28 12 DD 6E 02 DD 66 03 46 +R 00 00 01 00 +T 14 00 00 00 23 66 68 01 AD DE A7 ED 42 28 05 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 FF FF 18 2F +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 21 10 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 2F 00 00 00 07 07 07 E6 01 26 00 6F DD 75 FE +R 00 00 01 00 +T 3A 00 00 00 DD 74 FF 21 10 00 09 DD CB 04 46 +R 00 00 01 00 +T 45 00 00 00 28 04 CB EE 18 02 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 CB AE +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/net_lib/fclose.rel b/src/nos/lib/net_lib/fclose.rel new file mode 100644 index 00000000..dc45b691 --- /dev/null +++ b/src/nos/lib/net_lib/fclose.rel @@ -0,0 +1,89 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __Files Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fclose Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C7 flags 0 +S _fclose Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 12 DD 6E +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 02 DD 66 03 46 23 66 68 01 AD DE +R 00 00 01 00 +T 14 00 00 00 A7 ED 42 28 06 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 21 FF FF C3 C4 00 00 00 +R 00 00 01 00 00 08 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 2A 00 00 00 0B 70 2B 71 79 B0 28 06 +R 00 00 01 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 00 00 C3 C4 00 00 00 +R 00 00 01 00 00 08 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 40 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 47 00 00 00 04 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 52 00 00 00 B6 28 20 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 60 00 00 00 23 66 6A 11 06 00 19 E5 21 06 00 +R 00 00 01 00 +T 6B 00 00 00 09 4E 23 46 E1 71 23 70 18 11 +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 80 00 00 00 23 66 68 22 00 00 00 00 +R 00 00 01 00 02 08 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 91 00 00 00 23 B6 28 1E +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T A0 00 00 00 23 66 6A 11 04 00 19 E5 21 04 00 +R 00 00 01 00 +T AB 00 00 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T BB 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T C2 00 00 00 00 00 +R 00 00 01 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/fcloseall.rel b/src/nos/lib/net_lib/fcloseall.rel new file mode 100644 index 00000000..f35819a0 --- /dev/null +++ b/src/nos/lib/net_lib/fcloseall.rel @@ -0,0 +1,43 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __Files Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _flushall Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4D flags 0 +S _fcloseall Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 3E +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 0B 00 00 00 00 00 00 00 2A 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 12 00 00 00 FC DD 74 FD +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 7E FC DD B6 FD 28 2C +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 21 06 00 DD 4E FC DD 46 FD 09 56 +R 00 00 01 00 +T 29 00 00 00 23 66 6A DD 75 FE DD 74 FF 59 50 +R 00 00 01 00 +T 34 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 3A 00 00 00 00 00 00 00 DD 6E FE DD 66 FF DD +R 00 00 01 00 02 04 00 00 +T 43 00 00 00 75 FC DD 74 FD 18 CC +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/fdopen.rel b/src/nos/lib/net_lib/fdopen.rel new file mode 100644 index 00000000..d1d3860c --- /dev/null +++ b/src/nos/lib/net_lib/fdopen.rel @@ -0,0 +1,130 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _eolseq Ref00000000 +S _seteol Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fcreat Ref00000000 +S _strchr Ref00000000 +S .__.ABS. Def00000000 +S _Eol Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12B flags 0 +S _fdopen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FC +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 DD 77 FD AF DD 77 FE DD 77 FF DD +R 00 00 01 00 +T 14 00 00 00 7E 02 DD A6 03 3C 20 06 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 00 00 C3 28 01 00 00 +R 00 00 01 00 00 08 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 01 61 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 2C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 31 00 00 00 00 00 00 00 7D B4 28 08 +R 00 00 01 00 02 04 00 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 01 74 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 49 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 4E 00 00 00 00 00 00 00 7D B4 28 08 +R 00 00 01 00 02 04 00 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 36 FC 01 DD 36 FD 00 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 62 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 00 00 +T 6B 00 00 00 B4 20 06 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 21 00 00 C3 28 01 00 00 +R 00 00 01 00 00 08 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 21 08 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 7F 00 00 00 5E 02 DD 56 03 73 23 72 21 0F 00 +R 00 00 01 00 +T 8A 00 00 00 09 36 01 06 0D CD 00 00 00 00 7B +R 00 00 01 00 02 0A 0A 00 +T 93 00 00 00 E6 03 21 0E 00 DD 4E FA DD 46 FB +R 00 00 01 00 +T 9E 00 00 00 09 77 21 10 00 09 DD CB FC 46 28 +R 00 00 01 00 +T A9 00 00 00 04 CB D6 18 02 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 CB 96 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 21 10 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T BB 00 00 00 CB FE 46 28 04 CB DE 18 02 +R 00 00 01 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 CB 9E +R 00 00 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 21 19 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T D1 00 00 00 80 23 36 00 21 0E 00 09 7E FE 01 +R 00 00 01 00 +T DC 00 00 00 20 20 +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T E6 00 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T ED 00 00 00 44 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T F5 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T FA 00 00 00 00 00 00 00 18 17 +R 00 00 01 00 02 04 00 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 FE 00 20 13 01 00 00 00 00 DD 5E +R 00 00 01 00 02 09 07 00 +T 07 01 00 00 FA DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 0E 01 00 00 00 00 00 00 CD 00 00 00 00 18 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 DD 6E FA DD 66 FB 23 23 36 01 23 +R 00 00 01 00 +T 20 01 00 00 36 00 DD 6E FA DD 66 FB +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/fdup.rel b/src/nos/lib/net_lib/fdup.rel new file mode 100644 index 00000000..f168e05c --- /dev/null +++ b/src/nos/lib/net_lib/fdup.rel @@ -0,0 +1,118 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _dup Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fcreat Ref00000000 +S _strdupw Ref00000000 +S .__.ABS. Def00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 152 flags 0 +S _fdup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 B6 03 28 12 DD 6E 02 DD 66 03 46 +R 00 00 01 00 +T 14 00 00 00 23 66 68 01 AD DE A7 ED 42 28 06 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 00 00 C3 4F 01 00 00 +R 00 00 01 00 00 08 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 21 0E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 30 00 00 00 FE 00 C2 3A 01 00 00 +R 00 00 01 00 00 07 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 3B 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 44 00 00 00 B4 20 06 +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 21 00 00 C3 4F 01 00 00 +R 00 00 01 00 00 08 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 21 08 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 58 00 00 00 21 08 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 63 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 68 00 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 6F 00 00 00 73 23 72 21 0A 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 7A 00 00 00 03 19 4E 23 46 23 5E 23 56 69 60 +R 00 00 01 00 +T 85 00 00 00 E5 21 0A 00 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T 90 00 00 00 C1 D5 59 50 C1 73 23 72 23 71 23 +R 00 00 01 00 +T 9B 00 00 00 70 21 0E 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T A6 00 00 00 56 21 0E 00 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T B1 00 00 00 72 21 0F 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T BC 00 00 00 66 E5 21 0F 00 09 F1 77 21 10 00 +R 00 00 01 00 +T C7 00 00 00 09 EB 21 10 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T D2 00 00 00 09 01 02 00 ED B0 21 16 00 DD 4E +R 00 00 01 00 +T DD 00 00 00 02 DD 46 03 09 4D 44 21 16 00 DD +R 00 00 01 00 +T E8 00 00 00 5E FE DD 56 FF 19 EB 3E +R 00 00 01 00 +T F0 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T F5 00 00 00 00 00 00 00 21 19 00 DD 4E FE DD +R 00 00 01 00 02 04 00 00 +T FE 00 00 00 46 FF 09 E5 21 19 00 DD 5E 02 DD +R 00 00 01 00 +T 09 01 00 00 56 03 19 4E 23 46 E1 71 23 70 21 +R 00 00 01 00 +T 14 01 00 00 1B 00 DD 4E FE DD 46 FF 09 E5 21 +R 00 00 01 00 +T 1F 01 00 00 1B 00 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 27 01 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 2E 01 00 00 E1 73 23 72 DD 71 02 DD 70 03 18 +R 00 00 01 00 +T 39 01 00 00 0F +R 00 00 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 DD 6E 02 DD 66 03 23 23 34 23 20 +R 00 00 01 00 +T 45 01 00 00 01 34 +R 00 00 01 00 +T 47 01 00 00 +R 00 00 01 00 +T 47 01 00 00 18 00 +R 00 00 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/fflush.rel b/src/nos/lib/net_lib/fflush.rel new file mode 100644 index 00000000..1186c776 --- /dev/null +++ b/src/nos/lib/net_lib/fflush.rel @@ -0,0 +1,277 @@ +XL4 +H 2 areas 15 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __write Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _asy_write Ref00000000 +S _flushall Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _diag_write Ref00000000 +S _kwait Ref00000000 +S _ksignal Ref00000000 +S _free_mbuf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _send_mbuf Ref00000000 +S __lseek Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _append Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2CB flags 0 +S _fflush Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 0C 00 +T 09 00 00 00 B6 03 28 12 DD 6E 02 DD 66 03 46 +R 00 00 01 00 +T 14 00 00 00 23 66 68 01 AD DE A7 ED 42 28 0E +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 25 00 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 00 00 +T 2B 00 00 00 C8 02 00 00 +R 00 00 01 00 00 04 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 38 00 00 00 23 B6 20 06 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 21 00 00 C3 C8 02 00 00 +R 00 00 01 00 00 08 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 21 12 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 4D 00 00 00 23 66 6A DD 75 FC DD 74 FD 21 +R 00 00 01 00 +T 57 00 00 00 12 00 09 AF 77 23 77 21 0E 00 09 +R 00 00 01 00 +T 62 00 00 00 5E CD 00 00 00 00 05 00 00 01 02 +R 00 00 01 00 02 06 13 00 +T 6B 00 00 00 03 05 C5 02 00 00 17 01 00 00 +R 00 00 01 00 00 06 01 00 00 0A 01 00 +T 71 00 00 00 C8 00 00 00 79 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 75 00 00 00 7E 01 00 00 AB 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 DD 7E FC DD B6 FD 28 41 +R 00 00 01 00 +T 81 00 00 00 +R 00 00 01 00 +T 81 00 00 00 21 0C 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 8C 00 00 00 23 56 D5 21 0A 00 09 4E 23 46 21 +R 00 00 01 00 +T 97 00 00 00 08 00 DD 5E 02 DD 56 03 19 5E 23 +R 00 00 01 00 +T A2 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T A8 00 00 00 CD 00 00 00 00 F1 21 00 00 39 5D +R 00 00 01 00 02 05 00 00 +T B1 00 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T B7 00 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 00 00 +T C0 00 00 00 18 B7 +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 21 00 00 C3 C8 02 00 00 +R 00 00 01 00 00 08 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 DD 7E FC DD B6 FD 28 41 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 21 0C 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T DB 00 00 00 23 56 D5 21 0A 00 09 4E 23 46 21 +R 00 00 01 00 +T E6 00 00 00 08 00 DD 5E 02 DD 56 03 19 5E 23 +R 00 00 01 00 +T F1 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T F7 00 00 00 CD 00 00 00 00 F1 21 00 00 39 5D +R 00 00 01 00 02 05 00 00 +T 00 01 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 06 01 00 00 CD 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 00 00 +T 0F 01 00 00 18 B7 +R 00 00 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 21 00 00 C3 C8 02 00 00 +R 00 00 01 00 00 08 01 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 21 00 00 39 4D 44 21 14 00 DD 5E +R 00 00 01 00 +T 22 01 00 00 02 DD 56 03 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T 2A 01 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 12 00 02 0A 00 00 +T 31 01 00 00 01 00 21 14 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 3C 01 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T 41 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 21 14 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 51 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 56 01 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 5C 01 00 00 80 00 A7 ED 42 38 15 +R 00 00 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 21 12 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 6E 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 74 01 00 00 00 00 00 00 18 CE +R 00 00 01 00 02 04 00 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 21 00 00 C3 C8 02 00 00 +R 00 00 01 00 00 08 01 00 +T 7E 01 00 00 +R 00 00 01 00 +T 7E 01 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 89 01 00 00 E5 21 06 00 39 4D 44 21 08 00 DD +R 00 00 01 00 +T 94 01 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 9E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T A3 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T A9 01 00 00 C8 02 00 00 +R 00 00 01 00 00 04 01 00 +T AB 01 00 00 +R 00 00 01 00 +T AB 01 00 00 +R 00 00 01 00 +T AB 01 00 00 21 10 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T B6 01 00 00 E6 08 47 23 7E E6 00 B0 28 26 +R 00 00 01 00 +T C0 01 00 00 +R 00 00 01 00 +T C0 01 00 00 21 02 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T CB 01 00 00 E5 21 08 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T D6 01 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 10 00 +T DC 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T E3 01 00 00 F1 18 2F +R 00 00 01 00 +T E6 01 00 00 +R 00 00 01 00 +T E6 01 00 00 21 00 00 E5 21 0A 00 DD 4E 02 DD +R 00 00 01 00 +T F1 01 00 00 46 03 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T FC 01 00 00 D5 21 08 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 07 02 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 10 00 +T 0D 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T 14 02 00 00 F1 +R 00 00 01 00 +T 15 02 00 00 +R 00 00 01 00 +T 15 02 00 00 21 0C 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 20 02 00 00 23 56 D5 21 0A 00 09 4E 23 46 21 +R 00 00 01 00 +T 2B 02 00 00 08 00 DD 5E 02 DD 56 03 19 5E 23 +R 00 00 01 00 +T 36 02 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 3C 02 00 00 CD 00 00 00 00 F1 DD 75 FE DD 74 +R 00 00 01 00 02 05 00 00 +T 45 02 00 00 FF 4D 44 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0D 00 +T 4E 02 00 00 30 18 +R 00 00 01 00 +T 50 02 00 00 +R 00 00 01 00 +T 50 02 00 00 21 0A 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 5B 02 00 00 5E FE DD 56 FF 7A 07 9F 4F 41 CD +R 00 00 01 00 +T 66 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 68 02 00 00 +R 00 00 01 00 +T 68 02 00 00 21 0C 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 73 02 00 00 23 66 68 DD 4E FE DD 46 FF A7 ED +R 00 00 01 00 +T 7E 02 00 00 42 28 26 +R 00 00 01 00 +T 81 02 00 00 +R 00 00 01 00 +T 81 02 00 00 21 10 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 8C 02 00 00 F6 01 77 23 7E F6 00 77 21 00 00 +R 00 00 01 00 +T 97 02 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T 9D 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T A3 02 00 00 FF FF 18 21 +R 00 00 01 00 +T A7 02 00 00 +R 00 00 01 00 +T A7 02 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T AF 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T B6 02 00 00 75 FC DD 74 FD 7D B4 C2 +R 00 00 01 00 +T BE 02 00 00 AB 01 00 00 +R 00 00 01 00 00 04 01 00 +T C0 02 00 00 +R 00 00 01 00 +T C0 02 00 00 21 00 00 18 03 +R 00 00 01 00 +T C5 02 00 00 +R 00 00 01 00 +T C5 02 00 00 21 00 00 +R 00 00 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/fgetc.rel b/src/nos/lib/net_lib/fgetc.rel new file mode 100644 index 00000000..b703b0ea --- /dev/null +++ b/src/nos/lib/net_lib/fgetc.rel @@ -0,0 +1,112 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ungetc Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S __fgetc Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size FC flags 0 +S _fgetc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 03 28 12 DD 6E 02 DD 66 03 46 +R 00 00 01 00 +T 14 00 00 00 23 66 68 01 AD DE A7 ED 42 28 06 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 FF FF C3 F9 00 00 00 +R 00 00 01 00 00 08 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 2D 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 34 00 00 00 75 FE DD 74 FF 21 10 00 DD 4E 02 +R 00 00 01 00 +T 3F 00 00 00 DD 46 03 09 7E E6 04 47 23 7E E6 +R 00 00 01 00 +T 4A 00 00 00 00 B0 28 21 DD 7E FE DD A6 FF 3C +R 00 00 01 00 +T 55 00 00 00 28 18 21 16 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 60 00 00 00 09 4E 06 00 DD 6E FE DD 66 FF A7 +R 00 00 01 00 +T 6B 00 00 00 ED 42 28 09 +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 DD 6E FE DD 66 FF C3 F9 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 21 17 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 83 00 00 00 B7 20 05 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 21 0A 00 18 6E +R 00 00 01 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 93 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 9A 00 00 00 75 FE DD 74 FF 7D A4 3C 20 0F +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 21 16 00 DD 4E 02 DD 46 03 09 6E +R 00 00 01 00 +T AF 00 00 00 26 00 18 46 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 21 17 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T BE 00 00 00 06 00 DD 6E FE DD 66 FF A7 ED 42 +R 00 00 01 00 +T C9 00 00 00 20 05 +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 21 0A 00 18 29 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 DD 7E FE DD B6 FF 28 14 +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 DD 4E 02 DD 46 03 DD 5E FE DD 56 +R 00 00 01 00 +T E3 00 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T E9 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 21 16 00 DD 4E 02 DD 46 03 09 6E +R 00 00 01 00 +T F7 00 00 00 26 00 +R 00 00 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/fgets.rel b/src/nos/lib/net_lib/fgets.rel new file mode 100644 index 00000000..fe18b904 --- /dev/null +++ b/src/nos/lib/net_lib/fgets.rel @@ -0,0 +1,76 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fgetc Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 86 flags 0 +S _fgets Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 4E 04 DD 46 05 0B DD 71 04 DD +R 00 00 01 00 +T 1C 00 00 00 70 05 03 21 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 25 00 00 00 30 46 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 2F 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 36 00 00 00 75 FC DD 74 FD 7D A4 3C 20 05 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 00 00 18 3E +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 7E 02 DD B6 03 28 12 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 46 FC DD 6E FE DD 66 FF 23 DD +R 00 00 01 00 +T 58 00 00 00 75 FE DD 74 FF 2B 70 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 3E 0A DD AE FC DD B6 FD 20 02 +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 18 02 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 18 A4 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 DD 7E 02 DD B6 03 28 08 +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 DD 6E FE DD 66 FF 36 00 +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/files.rel b/src/nos/lib/net_lib/files.rel new file mode 100644 index 00000000..d60c64ee --- /dev/null +++ b/src/nos/lib/net_lib/files.rel @@ -0,0 +1,1355 @@ +XL4 +H 5 areas 44 global symbols +S _resolve Ref00000000 +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0214_4bfe_Can_27t_20rewrite_2 Ref00000000 +S _rip Ref00000000 +S _strcspn Ref00000000 +S _Whitespace Ref00000000 +S _fseek Ref00000000 +S _strcat Ref00000000 +S _fwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___010f_1e56__2502x Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S __fprintf Ref00000000 +S _strdupw Ref00000000 +S _strcmp Ref00000000 +S _fgets Ref00000000 +S _perror Ref00000000 +S _MD5Init Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _readhex Ref00000000 +S _free Ref00000000 +S _fputc Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___ctype Ref00000000 +S _strcpy Ref00000000 +S _strtol Ref00000000 +S _MD5Update Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S _freopen Ref00000000 +S _MD5Final Ref00000000 +S _tmpfile Ref00000000 +S _fputs Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fclose Ref00000000 +S _memcmp Ref00000000 +S ___0212_36d4_Can_27t_20read_20pa Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B92 flags 0 +S _usercvt Def0000064E +S _userlogin Def00000473 +S _userlookup Def00000237 +S _initroot Def00000000 +S _rootdircat Def00000110 +A CSTR size 136 flags 0 +A IDATA0 size 31 flags 0 +S _Rewritefile Def0000001F +S _System Def00000000 +S _Maillog Def0000000D +S _Fdir Def00000019 +S _Helpdir Def0000001D +S _Historyfile Def00000029 +S _Config Def00000007 +S _Newsdir Def00000021 +S _Eol Def0000002D +S _Popusers Def00000023 +S _Dfile Def00000017 +S _Mailqueue Def00000011 +S _Alias Def00000015 +S _Tmpdir Def0000002B +S _Mailspool Def0000000B +S _Signature Def00000025 +S _Startup Def00000005 +S _Mailqdir Def0000000F +S _Forwardfile Def00000027 +S _Arealist Def0000001B +S _Userfile Def00000009 +S _Routeqdir Def00000013 +A CDATA0 size 31 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 19 00 2B 0A 0F 00 +T 06 00 00 00 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 04 0F 00 02 09 02 00 +T 0C 00 00 00 2F 00 00 00 ED 5B 05 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 13 00 00 00 10 01 00 00 21 10 01 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 18 00 00 00 00 00 00 00 22 05 00 00 00 ED 5B +R 00 00 01 00 02 04 02 00 00 09 03 00 +T 1F 00 00 00 09 00 00 00 3E 10 01 00 00 21 +R 00 00 01 00 00 04 03 00 29 09 01 00 +T 24 00 00 00 10 01 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T 2A 00 00 00 09 00 00 00 ED 5B 0D 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 31 00 00 00 10 01 00 00 21 10 01 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 36 00 00 00 00 00 00 00 22 0D 00 00 00 ED 5B +R 00 00 01 00 02 04 02 00 00 09 03 00 +T 3D 00 00 00 0B 00 00 00 3E 10 01 00 00 21 +R 00 00 01 00 00 04 03 00 29 09 01 00 +T 42 00 00 00 10 01 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T 48 00 00 00 0B 00 00 00 ED 5B 0F 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 4F 00 00 00 10 01 00 00 21 10 01 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 54 00 00 00 00 00 00 00 22 0F 00 00 00 ED 5B +R 00 00 01 00 02 04 02 00 00 09 03 00 +T 5B 00 00 00 11 00 00 00 3E 10 01 00 00 21 +R 00 00 01 00 00 04 03 00 29 09 01 00 +T 60 00 00 00 10 01 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T 66 00 00 00 11 00 00 00 ED 5B 13 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 6D 00 00 00 10 01 00 00 21 10 01 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 72 00 00 00 00 00 00 00 22 13 00 00 00 ED 5B +R 00 00 01 00 02 04 02 00 00 09 03 00 +T 79 00 00 00 15 00 00 00 3E 10 01 00 00 21 +R 00 00 01 00 00 04 03 00 29 09 01 00 +T 7E 00 00 00 10 01 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T 84 00 00 00 15 00 00 00 ED 5B 17 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 8B 00 00 00 10 01 00 00 21 10 01 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 90 00 00 00 00 00 00 00 22 17 00 00 00 ED 5B +R 00 00 01 00 02 04 02 00 00 09 03 00 +T 97 00 00 00 19 00 00 00 3E 10 01 00 00 21 +R 00 00 01 00 00 04 03 00 29 09 01 00 +T 9C 00 00 00 10 01 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T A2 00 00 00 19 00 00 00 ED 5B 1B 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T A9 00 00 00 10 01 00 00 21 10 01 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T AE 00 00 00 00 00 00 00 22 1B 00 00 00 ED 5B +R 00 00 01 00 02 04 02 00 00 09 03 00 +T B5 00 00 00 1D 00 00 00 3E 10 01 00 00 21 +R 00 00 01 00 00 04 03 00 29 09 01 00 +T BA 00 00 00 10 01 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T C0 00 00 00 1D 00 00 00 ED 5B 1F 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T C7 00 00 00 10 01 00 00 21 10 01 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T CC 00 00 00 00 00 00 00 22 1F 00 00 00 ED 5B +R 00 00 01 00 02 04 02 00 00 09 03 00 +T D3 00 00 00 21 00 00 00 3E 10 01 00 00 21 +R 00 00 01 00 00 04 03 00 29 09 01 00 +T D8 00 00 00 10 01 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T DE 00 00 00 21 00 00 00 ED 5B 25 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T E5 00 00 00 10 01 00 00 21 10 01 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T EA 00 00 00 00 00 00 00 22 25 00 00 00 ED 5B +R 00 00 01 00 02 04 02 00 00 09 03 00 +T F1 00 00 00 27 00 00 00 3E 10 01 00 00 21 +R 00 00 01 00 00 04 03 00 29 09 01 00 +T F6 00 00 00 10 01 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T FC 00 00 00 27 00 00 00 ED 5B 29 00 00 00 3E +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 03 01 00 00 10 01 00 00 21 10 01 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 08 01 00 00 00 00 00 00 22 29 00 00 00 C3 +R 00 00 01 00 02 04 02 00 00 09 03 00 +T 0E 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 0A 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 CD 00 00 00 00 F8 FF DD 6E 02 DD +R 00 00 01 00 02 05 1E 00 +T 19 01 00 00 66 03 DD 75 F8 DD 74 F9 ED 5B +R 00 00 01 00 +T 23 01 00 00 2F 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 0D 00 +T 28 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0D 00 02 09 02 00 +T 2F 01 00 00 CA 2E 02 00 00 +R 00 00 01 00 00 05 01 00 +T 32 01 00 00 +R 00 00 01 00 +T 32 01 00 00 DD 36 FA 2E 01 00 00 DD 36 FB +R 00 00 01 00 09 07 02 00 +T 39 01 00 00 2E 01 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 89 04 02 00 +T 41 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 46 01 00 00 00 00 00 00 E5 DD 5E FA DD 56 FB +R 00 00 01 00 02 04 02 00 +T 4F 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T 55 01 00 00 00 00 00 00 4D 44 E1 09 E5 ED 5B +R 00 00 01 00 02 04 02 00 +T 5E 01 00 00 2F 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 0D 00 +T 63 01 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 0D 00 02 09 02 00 +T 6A 01 00 00 E1 09 EB 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 1F 00 +T 71 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1F 00 02 09 02 00 +T 78 01 00 00 F8 DD 74 F9 ED 4B 2F 00 00 00 EB +R 00 00 01 00 00 0A 03 00 +T 81 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1B 00 02 0A 1B 00 +T 87 01 00 00 00 00 00 00 DD 4E FA DD 46 FB DD +R 00 00 01 00 02 04 02 00 +T 90 01 00 00 5E F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 98 01 00 00 00 00 00 00 CD 00 00 00 00 DD 4E +R 00 00 01 00 02 04 08 00 02 09 02 00 +T 9F 01 00 00 02 DD 46 03 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T AA 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T AF 01 00 00 00 00 00 00 DD 6E FA DD 66 FB AF +R 00 00 01 00 02 04 02 00 +T B8 01 00 00 B6 28 73 +R 00 00 01 00 +T BB 01 00 00 +R 00 00 01 00 +T BB 01 00 00 DD 6E F8 DD 66 F9 DD 75 FE DD 74 +R 00 00 01 00 +T C6 01 00 00 FF DD 75 FC DD 74 FD +R 00 00 01 00 +T CD 01 00 00 +R 00 00 01 00 +T CD 01 00 00 DD 6E FE DD 66 FF AF B6 28 4F +R 00 00 01 00 +T D7 01 00 00 +R 00 00 01 00 +T D7 01 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T E2 01 00 00 74 FF 2B 46 DD 6E FC DD 66 FD 23 +R 00 00 01 00 +T ED 01 00 00 DD 75 FC DD 74 FD 2B 70 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 DD 6E FE DD 66 FF 2B E5 DD 6E FE +R 00 00 01 00 +T 00 02 00 00 DD 66 FF 7E E1 BE 20 1C DD 6E FA +R 00 00 01 00 +T 0B 02 00 00 DD 66 FB E5 DD 6E FE DD 66 FF 7E +R 00 00 01 00 +T 16 02 00 00 E1 BE 20 0A +R 00 00 01 00 +T 1A 02 00 00 +R 00 00 01 00 +T 1A 02 00 00 +R 00 00 01 00 +T 1A 02 00 00 +R 00 00 01 00 +T 1A 02 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 22 02 00 00 +R 00 00 01 00 +T 22 02 00 00 18 D1 +R 00 00 01 00 +T 24 02 00 00 +R 00 00 01 00 +T 24 02 00 00 18 A7 +R 00 00 01 00 +T 26 02 00 00 +R 00 00 01 00 +T 26 02 00 00 DD 6E FC DD 66 FD 36 00 +R 00 00 01 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 DD 6E F8 DD 66 F9 C3 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T 37 02 00 00 +R 00 00 01 00 +T 37 02 00 00 CD 00 00 00 00 FA FF 21 00 00 E5 +R 00 00 01 00 02 05 1E 00 +T 40 02 00 00 01 30 01 00 00 ED 5B 09 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 03 00 +T 47 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 20 00 02 0A 20 00 +T 4D 02 00 00 00 00 00 00 F1 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 02 00 +T 56 02 00 00 7D B4 20 06 +R 00 00 01 00 +T 5A 02 00 00 +R 00 00 01 00 +T 5A 02 00 00 21 00 00 C3 70 04 00 00 +R 00 00 01 00 00 08 01 00 +T 60 02 00 00 +R 00 00 01 00 +T 60 02 00 00 11 80 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 1F 00 +T 66 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1F 00 02 09 02 00 +T 6D 02 00 00 FC DD 74 FD +R 00 00 01 00 +T 71 02 00 00 +R 00 00 01 00 +T 71 02 00 00 DD 6E FA DD 66 FB E5 01 80 00 DD +R 00 00 01 00 +T 7C 02 00 00 5E FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 11 00 +T 84 02 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 11 00 02 09 02 00 +T 8B 02 00 00 B4 28 56 +R 00 00 01 00 +T 8E 02 00 00 +R 00 00 01 00 +T 8E 02 00 00 DD 6E FC DD 66 FD 7E FE 23 20 02 +R 00 00 01 00 +T 99 02 00 00 +R 00 00 01 00 +T 99 02 00 00 18 D6 +R 00 00 01 00 +T 9B 02 00 00 +R 00 00 01 00 +T 9B 02 00 00 01 20 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T A5 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T AA 02 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 02 00 +T B3 02 00 00 B4 20 02 +R 00 00 01 00 +T B6 02 00 00 +R 00 00 01 00 +T B6 02 00 00 18 B9 +R 00 00 01 00 +T B8 02 00 00 +R 00 00 01 00 +T B8 02 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T C3 02 00 00 74 FF 2B 36 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T CE 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T D6 02 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 01 00 02 0A 02 00 +T DD 02 00 00 B4 20 02 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 18 02 +R 00 00 01 00 +T E2 02 00 00 +R 00 00 01 00 +T E2 02 00 00 18 8D +R 00 00 01 00 +T E4 02 00 00 +R 00 00 01 00 +T E4 02 00 00 21 10 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T EF 02 00 00 E6 02 47 23 7E E6 00 B0 28 22 +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 26 00 +T 01 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 26 00 02 0A 02 00 +T 08 03 00 00 5E FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 17 00 +T 10 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 17 00 02 09 02 00 +T 16 03 00 00 00 00 C3 70 04 00 00 +R 00 00 01 00 00 07 01 00 +T 1B 03 00 00 +R 00 00 01 00 +T 1B 03 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 26 00 +T 23 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 26 00 02 0A 02 00 +T 2A 03 00 00 7E 04 DD B6 05 28 11 +R 00 00 01 00 +T 31 03 00 00 +R 00 00 01 00 +T 31 03 00 00 DD 6E FE DD 66 FF E5 DD 6E 04 DD +R 00 00 01 00 +T 3C 03 00 00 66 05 C1 71 23 70 +R 00 00 01 00 +T 42 03 00 00 +R 00 00 01 00 +T 42 03 00 00 01 20 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 4C 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 51 03 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 02 00 +T 5A 03 00 00 B4 20 14 +R 00 00 01 00 +T 5D 03 00 00 +R 00 00 01 00 +T 5D 03 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 17 00 +T 65 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 17 00 02 0A 02 00 +T 6C 03 00 00 00 00 C3 70 04 00 00 +R 00 00 01 00 00 07 01 00 +T 71 03 00 00 +R 00 00 01 00 +T 71 03 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 7C 03 00 00 74 FF 2B 36 00 DD 7E 0A DD B6 0B +R 00 00 01 00 +T 87 03 00 00 28 11 +R 00 00 01 00 +T 89 03 00 00 +R 00 00 01 00 +T 89 03 00 00 DD 6E FE DD 66 FF E5 DD 6E 0A DD +R 00 00 01 00 +T 94 03 00 00 66 0B C1 71 23 70 +R 00 00 01 00 +T 9A 03 00 00 +R 00 00 01 00 +T 9A 03 00 00 01 20 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T A4 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T A9 03 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 02 00 +T B2 03 00 00 B4 20 14 +R 00 00 01 00 +T B5 03 00 00 +R 00 00 01 00 +T B5 03 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 17 00 +T BD 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 17 00 02 0A 02 00 +T C4 03 00 00 00 00 C3 70 04 00 00 +R 00 00 01 00 00 07 01 00 +T C9 03 00 00 +R 00 00 01 00 +T C9 03 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T D4 03 00 00 74 FF 2B 36 00 DD 7E 0C DD B6 0D +R 00 00 01 00 +T DF 03 00 00 28 21 +R 00 00 01 00 +T E1 03 00 00 +R 00 00 01 00 +T E1 03 00 00 21 00 00 E5 01 00 00 DD 5E FE DD +R 00 00 01 00 +T EC 03 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1C 00 +T F1 03 00 00 00 00 00 00 CD 00 00 00 00 F1 E5 +R 00 00 01 00 02 04 1C 00 02 09 02 00 +T F8 03 00 00 DD 6E 0C DD 66 0D C1 71 23 70 +R 00 00 01 00 +T 02 04 00 00 +R 00 00 01 00 +T 02 04 00 00 01 20 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 0C 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 11 04 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 02 00 +T 1A 04 00 00 B4 20 18 +R 00 00 01 00 +T 1D 04 00 00 +R 00 00 01 00 +T 1D 04 00 00 DD 7E 0E DD B6 0F 28 0E +R 00 00 01 00 +T 25 04 00 00 +R 00 00 01 00 +T 25 04 00 00 DD 6E 0E DD 66 0F AF 77 23 77 23 +R 00 00 01 00 +T 30 04 00 00 77 23 77 +R 00 00 01 00 +T 33 04 00 00 +R 00 00 01 00 +T 33 04 00 00 18 35 +R 00 00 01 00 +T 35 04 00 00 +R 00 00 01 00 +T 35 04 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 40 04 00 00 74 FF 2B 36 00 DD 7E 0E DD B6 0F +R 00 00 01 00 +T 4B 04 00 00 28 1D +R 00 00 01 00 +T 4D 04 00 00 +R 00 00 01 00 +T 4D 04 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 55 04 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 00 00 02 0A 02 00 +T 5C 04 00 00 DD 6E 0E DD 66 0F D1 73 23 72 23 +R 00 00 01 00 +T 67 04 00 00 71 23 70 +R 00 00 01 00 +T 6A 04 00 00 +R 00 00 01 00 +T 6A 04 00 00 +R 00 00 01 00 +T 6A 04 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 70 04 00 00 +R 00 00 01 00 +T 70 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 73 04 00 00 +R 00 00 01 00 +T 73 04 00 00 CD 00 00 00 00 7C FF 21 00 00 39 +R 00 00 01 00 02 05 1E 00 +T 7C 04 00 00 E5 11 00 00 D5 21 0A 00 39 E5 21 +R 00 00 01 00 +T 87 04 00 00 0A 00 39 E5 21 0A 00 39 4D 44 DD +R 00 00 01 00 +T 92 04 00 00 5E 02 DD 56 03 3E 37 02 00 00 21 +R 00 00 01 00 29 0A 01 00 +T 9A 04 00 00 37 02 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T A1 04 00 00 F1 4D 44 E1 71 23 70 79 B0 20 06 +R 00 00 01 00 +T AC 04 00 00 +R 00 00 01 00 +T AC 04 00 00 21 FF FF C3 4B 06 00 00 +R 00 00 01 00 00 08 01 00 +T B2 04 00 00 +R 00 00 01 00 +T B2 04 00 00 DD 6E 0E DD 66 0F 46 23 66 68 DD +R 00 00 01 00 +T BD 04 00 00 75 84 DD 74 85 01 32 01 00 00 21 +R 00 00 01 00 00 0A 02 00 +T C6 04 00 00 02 00 39 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T CE 04 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 10 00 02 0A 02 00 +T D5 04 00 00 B4 20 0B +R 00 00 01 00 +T D8 04 00 00 +R 00 00 01 00 +T D8 04 00 00 DD 36 84 01 DD 36 85 00 C3 +R 00 00 01 00 +T E1 04 00 00 B4 05 00 00 +R 00 00 01 00 00 04 01 00 +T E3 04 00 00 +R 00 00 01 00 +T E3 04 00 00 21 10 00 E5 21 04 00 39 4E 23 46 +R 00 00 01 00 +T EE 04 00 00 21 0E 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 16 00 +T F6 04 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 16 00 02 0A 02 00 +T FD 04 00 00 3E 10 AD B4 28 15 +R 00 00 01 00 +T 03 05 00 00 +R 00 00 01 00 +T 03 05 00 00 21 00 00 39 5E 23 56 3E +R 00 00 01 00 +T 0B 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T 10 05 00 00 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 02 00 +T 16 05 00 00 4B 06 00 00 +R 00 00 01 00 00 04 01 00 +T 18 05 00 00 +R 00 00 01 00 +T 18 05 00 00 21 2C 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 13 00 +T 20 05 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 13 00 02 0A 02 00 +T 27 05 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T 2F 05 00 00 00 00 00 00 CD 00 00 00 00 E5 DD +R 00 00 01 00 02 04 0D 00 02 09 02 00 +T 36 05 00 00 4E 02 DD 46 03 21 2E 00 39 5D 54 +R 00 00 01 00 +T 41 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1D 00 02 0A 1D 00 +T 47 05 00 00 00 00 00 00 E1 DD 5E 04 DD 56 05 +R 00 00 01 00 02 04 02 00 +T 50 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T 56 05 00 00 00 00 00 00 E5 DD 4E 04 DD 46 05 +R 00 00 01 00 02 04 02 00 +T 5F 05 00 00 21 2E 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 67 05 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 1D 00 02 0A 02 00 +T 6E 05 00 00 21 2C 00 39 4D 44 21 1C 00 39 5D +R 00 00 01 00 +T 79 05 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 21 00 02 0B 21 00 +T 7F 05 00 00 CD 00 00 00 00 21 10 00 E5 21 +R 00 00 01 00 02 05 02 00 +T 87 05 00 00 0E 00 39 4D 44 21 1E 00 39 5D 54 +R 00 00 01 00 +T 92 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 27 00 02 0A 27 00 +T 98 05 00 00 00 00 00 00 F1 7D B4 28 15 +R 00 00 01 00 02 04 02 00 +T 9F 05 00 00 +R 00 00 01 00 +T 9F 05 00 00 21 00 00 39 5E 23 56 3E +R 00 00 01 00 +T A7 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T AC 05 00 00 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 02 00 +T B2 05 00 00 4B 06 00 00 +R 00 00 01 00 00 04 01 00 +T B4 05 00 00 +R 00 00 01 00 +T B4 05 00 00 +R 00 00 01 00 +T B4 05 00 00 21 04 00 39 5E 23 56 3E +R 00 00 01 00 +T BC 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T C1 05 00 00 00 00 00 00 4D 44 03 DD 6E 0C DD +R 00 00 01 00 02 04 02 00 +T CA 05 00 00 66 0D A7 ED 42 30 14 +R 00 00 01 00 +T D1 05 00 00 +R 00 00 01 00 +T D1 05 00 00 21 00 00 39 5E 23 56 3E +R 00 00 01 00 +T D9 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T DE 05 00 00 00 00 00 00 21 FF FF 18 66 +R 00 00 01 00 02 04 02 00 +T E5 05 00 00 +R 00 00 01 00 +T E5 05 00 00 21 04 00 39 4E 23 46 DD 6E 0A DD +R 00 00 01 00 +T F0 05 00 00 66 0B 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1B 00 +T F8 05 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 1B 00 02 09 02 00 +T FD 05 00 00 +R 00 00 01 00 +T FD 05 00 00 01 5C 00 DD 6E 0A DD 66 0B 5E 23 +R 00 00 01 00 +T 08 06 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 0E 06 00 00 CD 00 00 00 00 DD 75 86 DD 74 87 +R 00 00 01 00 02 05 02 00 +T 17 06 00 00 7D B4 28 0A +R 00 00 01 00 +T 1B 06 00 00 +R 00 00 01 00 +T 1B 06 00 00 DD 6E 86 DD 66 87 36 2F 18 D8 +R 00 00 01 00 +T 25 06 00 00 +R 00 00 01 00 +T 25 06 00 00 21 00 00 39 5E 23 56 3E +R 00 00 01 00 +T 2D 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T 32 06 00 00 00 00 00 00 DD 6E 84 DD 66 85 E5 +R 00 00 01 00 02 04 02 00 +T 3B 06 00 00 DD 6E 0E DD 66 0F C1 71 23 70 DD +R 00 00 01 00 +T 46 06 00 00 6E 82 DD 66 83 +R 00 00 01 00 +T 4B 06 00 00 +R 00 00 01 00 +T 4B 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 4E 06 00 00 +R 00 00 01 00 +T 4E 06 00 00 CD 00 00 00 00 76 FF AF DD 77 9C +R 00 00 01 00 02 05 1E 00 +T 57 06 00 00 DD 77 9D 21 00 00 39 E5 01 00 00 +R 00 00 01 00 +T 62 06 00 00 C5 01 30 01 00 00 ED 5B +R 00 00 01 00 00 06 02 00 +T 68 06 00 00 09 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 20 00 +T 6D 06 00 00 00 00 00 00 CD 00 00 00 00 F1 4D +R 00 00 01 00 02 04 20 00 02 09 02 00 +T 74 06 00 00 44 E1 71 23 70 79 B0 20 2D +R 00 00 01 00 +T 7D 06 00 00 +R 00 00 01 00 +T 7D 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 28 00 02 0B 28 00 +T 83 06 00 00 E5 21 40 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 14 00 +T 8C 06 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 93 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 02 00 +T 9A 06 00 00 F1 ED 5B 09 00 00 00 3E +R 00 00 01 00 00 07 03 00 +T A0 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T A5 06 00 00 00 00 00 00 C3 8F 0B 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T AA 06 00 00 +R 00 00 01 00 +T AA 06 00 00 21 04 00 39 E5 11 80 00 3E +R 00 00 01 00 +T B3 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T B8 06 00 00 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 02 00 +T C0 06 00 00 +R 00 00 01 00 +T C0 06 00 00 21 00 00 39 4E 23 46 C5 01 80 00 +R 00 00 01 00 +T CB 06 00 00 21 06 00 39 5E 23 56 3E +R 00 00 01 00 +T D3 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T D8 06 00 00 00 00 00 00 F1 7D B4 CA +R 00 00 01 00 02 04 02 00 +T DE 06 00 00 AF 07 00 00 +R 00 00 01 00 00 04 01 00 +T E0 06 00 00 +R 00 00 01 00 +T E0 06 00 00 21 04 00 39 5E 23 56 3E +R 00 00 01 00 +T E8 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T ED 06 00 00 00 00 00 00 21 04 00 39 5E 23 56 +R 00 00 01 00 02 04 02 00 +T F6 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T FC 06 00 00 00 00 00 00 DD 75 9E DD 74 9F 7D +R 00 00 01 00 02 04 02 00 +T 05 07 00 00 B4 28 0D 21 04 00 39 7E 23 66 6F +R 00 00 01 00 +T 10 07 00 00 7E FE 23 20 02 +R 00 00 01 00 +T 15 07 00 00 +R 00 00 01 00 +T 15 07 00 00 +R 00 00 01 00 +T 15 07 00 00 +R 00 00 01 00 +T 15 07 00 00 18 A9 +R 00 00 01 00 +T 17 07 00 00 +R 00 00 01 00 +T 17 07 00 00 01 00 00 00 00 21 04 00 39 5E 23 +R 00 00 01 00 02 05 06 00 +T 20 07 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 26 07 00 00 CD 00 00 00 00 DD 75 A0 DD 74 A1 +R 00 00 01 00 02 05 02 00 +T 2F 07 00 00 DD 4E 9E DD 46 9F A7 ED 42 20 02 +R 00 00 01 00 +T 3A 07 00 00 +R 00 00 01 00 +T 3A 07 00 00 18 84 +R 00 00 01 00 +T 3C 07 00 00 +R 00 00 01 00 +T 3C 07 00 00 DD 6E A0 DD 66 A1 E5 21 06 00 39 +R 00 00 01 00 +T 47 07 00 00 4E 23 46 E1 09 DD 75 A6 DD 74 A7 +R 00 00 01 00 +T 52 07 00 00 +R 00 00 01 00 +T 52 07 00 00 DD 6E A6 DD 66 A7 4E 06 00 21 +R 00 00 01 00 +T 5C 07 00 00 00 00 00 00 09 7E E6 10 28 0A +R 00 00 01 00 02 04 1A 00 +T 64 07 00 00 +R 00 00 01 00 +T 64 07 00 00 DD 34 A6 20 03 DD 34 A7 +R 00 00 01 00 +T 6C 07 00 00 +R 00 00 01 00 +T 6C 07 00 00 18 E4 +R 00 00 01 00 +T 6E 07 00 00 +R 00 00 01 00 +T 6E 07 00 00 DD 6E A6 DD 66 A7 AF B6 28 34 DD +R 00 00 01 00 +T 79 07 00 00 6E A6 DD 66 A7 7E FE 2A 28 29 21 +R 00 00 01 00 +T 84 07 00 00 10 00 E5 DD 4E A6 DD 46 A7 21 +R 00 00 01 00 +T 8E 07 00 00 08 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 16 00 +T 96 07 00 00 00 00 00 00 CD 00 00 00 00 F1 3E +R 00 00 01 00 02 04 16 00 02 09 02 00 +T 9D 07 00 00 10 AD B4 28 0A +R 00 00 01 00 +T A2 07 00 00 +R 00 00 01 00 +T A2 07 00 00 +R 00 00 01 00 +T A2 07 00 00 +R 00 00 01 00 +T A2 07 00 00 DD 36 9C 01 DD 36 9D 00 18 03 +R 00 00 01 00 +T AC 07 00 00 +R 00 00 01 00 +T AC 07 00 00 C3 C0 06 00 00 +R 00 00 01 00 00 05 01 00 +T AF 07 00 00 +R 00 00 01 00 +T AF 07 00 00 DD 7E 9C DD B6 9D 20 21 +R 00 00 01 00 +T B7 07 00 00 +R 00 00 01 00 +T B7 07 00 00 21 00 00 39 5E 23 56 3E +R 00 00 01 00 +T BF 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 26 00 02 09 26 00 +T C4 07 00 00 00 00 00 00 21 04 00 39 5E 23 56 +R 00 00 01 00 02 04 02 00 +T CD 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T D3 07 00 00 00 00 00 00 C3 8F 0B 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T D8 07 00 00 +R 00 00 01 00 +T D8 07 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T E3 07 00 00 E5 21 06 00 39 5E 23 56 3E +R 00 00 01 00 +T EC 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T F1 07 00 00 00 00 00 00 F1 F1 F1 21 10 00 E5 +R 00 00 01 00 02 04 02 00 +T FA 07 00 00 21 02 00 39 4E 23 46 E1 09 CB 86 +R 00 00 01 00 +T 05 08 00 00 21 10 00 E5 21 02 00 39 4E 23 46 +R 00 00 01 00 +T 10 08 00 00 E1 09 CB 8E 21 02 00 39 E5 3E +R 00 00 01 00 +T 1A 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 22 00 02 09 22 00 +T 1F 08 00 00 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 02 00 +T 27 08 00 00 +R 00 00 01 00 +T 27 08 00 00 21 00 00 39 4E 23 46 C5 01 80 00 +R 00 00 01 00 +T 32 08 00 00 21 06 00 39 5E 23 56 3E +R 00 00 01 00 +T 3A 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 3F 08 00 00 00 00 00 00 F1 7D B4 CA +R 00 00 01 00 02 04 02 00 +T 45 08 00 00 96 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 47 08 00 00 +R 00 00 01 00 +T 47 08 00 00 21 04 00 39 5E 23 56 3E +R 00 00 01 00 +T 4F 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 54 08 00 00 00 00 00 00 21 04 00 39 5E 23 56 +R 00 00 01 00 02 04 02 00 +T 5D 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T 63 08 00 00 00 00 00 00 DD 75 9E DD 74 9F 7D +R 00 00 01 00 02 04 02 00 +T 6C 08 00 00 B4 28 30 21 04 00 39 7E 23 66 6F +R 00 00 01 00 +T 77 08 00 00 7E FE 23 28 23 01 00 00 00 00 21 +R 00 00 01 00 02 0A 06 00 +T 80 08 00 00 04 00 39 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 88 08 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 02 00 +T 8F 08 00 00 75 A0 DD 74 A1 DD 4E 9E DD 46 9F +R 00 00 01 00 +T 9A 08 00 00 A7 ED 42 20 2B +R 00 00 01 00 +T 9F 08 00 00 +R 00 00 01 00 +T 9F 08 00 00 +R 00 00 01 00 +T 9F 08 00 00 +R 00 00 01 00 +T 9F 08 00 00 21 02 00 39 4E 23 46 21 04 00 39 +R 00 00 01 00 +T AA 08 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 23 00 +T B0 08 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 23 00 02 09 02 00 +T B6 08 00 00 02 00 39 4E 23 46 11 0A 00 3E +R 00 00 01 00 +T C0 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T C5 08 00 00 00 00 00 00 C3 27 08 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T CA 08 00 00 +R 00 00 01 00 +T CA 08 00 00 DD 6E A0 DD 66 A1 E5 21 06 00 39 +R 00 00 01 00 +T D5 08 00 00 4E 23 46 E1 09 DD 75 A6 DD 74 A7 +R 00 00 01 00 +T E0 08 00 00 +R 00 00 01 00 +T E0 08 00 00 DD 6E A6 DD 66 A7 4E 06 00 21 +R 00 00 01 00 +T EA 08 00 00 00 00 00 00 09 7E E6 10 28 0A +R 00 00 01 00 02 04 1A 00 +T F2 08 00 00 +R 00 00 01 00 +T F2 08 00 00 DD 34 A6 20 03 DD 34 A7 +R 00 00 01 00 +T FA 08 00 00 +R 00 00 01 00 +T FA 08 00 00 18 E4 +R 00 00 01 00 +T FC 08 00 00 +R 00 00 01 00 +T FC 08 00 00 DD 6E A6 DD 66 A7 AF B6 28 58 DD +R 00 00 01 00 +T 07 09 00 00 6E A6 DD 66 A7 7E FE 2A 28 4D 01 +R 00 00 01 00 +T 12 09 00 00 00 00 00 00 DD 5E A6 DD 56 A7 3E +R 00 00 01 00 02 04 06 00 +T 1B 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 20 09 00 00 00 00 00 00 DD 75 A2 DD 74 A3 E5 +R 00 00 01 00 02 04 02 00 +T 29 09 00 00 DD 5E A6 DD 56 A7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 31 09 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 0D 00 02 0A 02 00 +T 38 09 00 00 44 E1 A7 ED 42 28 1F 21 10 00 E5 +R 00 00 01 00 +T 43 09 00 00 DD 4E A6 DD 46 A7 21 08 00 39 5D +R 00 00 01 00 +T 4E 09 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 54 09 00 00 CD 00 00 00 00 F1 3E 10 AD B4 20 +R 00 00 01 00 02 05 02 00 +T 5D 09 00 00 2B +R 00 00 01 00 +T 5E 09 00 00 +R 00 00 01 00 +T 5E 09 00 00 +R 00 00 01 00 +T 5E 09 00 00 +R 00 00 01 00 +T 5E 09 00 00 21 02 00 39 4E 23 46 21 04 00 39 +R 00 00 01 00 +T 69 09 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 23 00 +T 6F 09 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 23 00 02 09 02 00 +T 75 09 00 00 02 00 39 4E 23 46 11 0A 00 3E +R 00 00 01 00 +T 7F 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T 84 09 00 00 00 00 00 00 C3 27 08 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T 89 09 00 00 +R 00 00 01 00 +T 89 09 00 00 21 32 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 13 00 +T 91 09 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 13 00 02 0A 02 00 +T 98 09 00 00 6E A0 DD 66 A1 E5 21 06 00 39 4E +R 00 00 01 00 +T A3 09 00 00 23 46 21 34 00 39 5D 54 3E +R 00 00 01 00 +T AC 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T B1 09 00 00 00 00 00 00 E1 DD 6E A2 DD 66 A3 +R 00 00 01 00 02 04 02 00 +T BA 09 00 00 E5 DD 4E A6 DD 46 A7 21 34 00 39 +R 00 00 01 00 +T C5 09 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1D 00 +T CA 09 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 1D 00 02 09 02 00 +T D1 09 00 00 32 00 39 4D 44 21 16 00 39 5D 54 +R 00 00 01 00 +T DC 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 21 00 02 0A 21 00 +T E2 09 00 00 00 00 00 00 21 02 00 39 4E 23 46 +R 00 00 01 00 02 04 02 00 +T EB 09 00 00 C5 DD 6E A0 DD 66 A1 E5 01 01 00 +R 00 00 01 00 +T F6 09 00 00 21 08 00 39 5E 23 56 3E +R 00 00 01 00 +T FE 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 03 0A 00 00 00 00 00 00 F1 F1 21 02 00 39 4E +R 00 00 01 00 02 04 02 00 +T 0C 0A 00 00 23 46 11 20 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 18 00 +T 14 0A 00 00 00 00 00 00 CD 00 00 00 00 AF DD +R 00 00 01 00 02 04 18 00 02 09 02 00 +T 1B 0A 00 00 77 A4 DD 77 A5 +R 00 00 01 00 +T 20 0A 00 00 +R 00 00 01 00 +T 20 0A 00 00 01 10 80 DD 6E A4 DD 66 A5 3E 80 +R 00 00 01 00 +T 2B 0A 00 00 AC 67 ED 42 30 33 +R 00 00 01 00 +T 31 0A 00 00 +R 00 00 01 00 +T 31 0A 00 00 21 16 00 39 DD 4E A4 DD 46 A5 09 +R 00 00 01 00 +T 3C 0A 00 00 5E 16 00 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 09 0B 00 +T 44 0A 00 00 00 00 00 00 E5 21 08 00 39 5E 23 +R 00 00 01 00 02 04 0B 00 +T 4D 0A 00 00 56 D5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 52 0A 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 02 00 +T 59 0A 00 00 F1 F1 03 DD 71 A4 DD 70 A5 18 BC +R 00 00 01 00 +T 64 0A 00 00 +R 00 00 01 00 +T 64 0A 00 00 21 02 00 39 4E 23 46 DD 6E A2 DD +R 00 00 01 00 +T 6F 0A 00 00 66 A3 DD 5E A6 DD 56 A7 19 EB 3E +R 00 00 01 00 +T 7A 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 23 00 02 09 23 00 +T 7F 0A 00 00 00 00 00 00 21 02 00 39 4E 23 46 +R 00 00 01 00 02 04 02 00 +T 88 0A 00 00 11 0A 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 18 00 +T 8E 0A 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 18 00 02 09 02 00 +T 94 0A 00 00 27 08 00 00 +R 00 00 01 00 00 04 01 00 +T 96 0A 00 00 +R 00 00 01 00 +T 96 0A 00 00 21 00 00 39 5E 23 56 3E +R 00 00 01 00 +T 9E 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 26 00 02 09 26 00 +T A3 0A 00 00 00 00 00 00 21 00 00 E5 21 00 00 +R 00 00 01 00 02 04 02 00 +T AC 0A 00 00 E5 21 00 00 E5 21 08 00 39 5E 23 +R 00 00 01 00 +T B7 0A 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T BD 0A 00 00 CD 00 00 00 00 F1 F1 F1 21 10 00 +R 00 00 01 00 02 05 02 00 +T C6 0A 00 00 E5 21 04 00 39 4E 23 46 E1 09 CB +R 00 00 01 00 +T D1 0A 00 00 86 21 10 00 E5 21 04 00 39 4E 23 +R 00 00 01 00 +T DC 0A 00 00 46 E1 09 CB 8E 21 00 00 39 E5 01 +R 00 00 01 00 +T E7 0A 00 00 00 00 C5 01 34 01 00 00 ED 5B +R 00 00 01 00 00 08 02 00 +T EF 0A 00 00 09 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 20 00 +T F4 0A 00 00 00 00 00 00 CD 00 00 00 00 F1 4D +R 00 00 01 00 02 04 20 00 02 09 02 00 +T FB 0A 00 00 44 E1 71 23 70 79 B0 20 27 +R 00 00 01 00 +T 04 0B 00 00 +R 00 00 01 00 +T 04 0B 00 00 2A 09 00 00 00 E5 0E 00 00 00 00 +R 00 00 01 00 00 05 03 00 2B 0B 03 00 +T 0A 0B 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 03 00 +T 10 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T 15 0B 00 00 00 00 00 00 F1 F1 F1 21 04 00 39 +R 00 00 01 00 02 04 02 00 +T 1E 0B 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 17 00 +T 24 0B 00 00 00 00 00 00 CD 00 00 00 00 18 64 +R 00 00 01 00 02 04 17 00 02 09 02 00 +T 2B 0B 00 00 +R 00 00 01 00 +T 2B 0B 00 00 +R 00 00 01 00 +T 2B 0B 00 00 21 02 00 39 4E 23 46 C5 01 80 00 +R 00 00 01 00 +T 36 0B 00 00 21 06 00 39 5E 23 56 3E +R 00 00 01 00 +T 3E 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 43 0B 00 00 00 00 00 00 F1 7D B4 28 18 +R 00 00 01 00 02 04 02 00 +T 4A 0B 00 00 +R 00 00 01 00 +T 4A 0B 00 00 21 00 00 39 4E 23 46 21 04 00 39 +R 00 00 01 00 +T 55 0B 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 23 00 +T 5B 0B 00 00 00 00 00 00 CD 00 00 00 00 18 C9 +R 00 00 01 00 02 04 23 00 02 09 02 00 +T 62 0B 00 00 +R 00 00 01 00 +T 62 0B 00 00 21 00 00 39 5E 23 56 3E +R 00 00 01 00 +T 6A 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 26 00 02 09 26 00 +T 6F 0B 00 00 00 00 00 00 21 02 00 39 5E 23 56 +R 00 00 01 00 02 04 02 00 +T 78 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 26 00 02 0A 26 00 +T 7E 0B 00 00 00 00 00 00 21 04 00 39 5E 23 56 +R 00 00 01 00 02 04 02 00 +T 87 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T 8D 0B 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 8F 0B 00 00 +R 00 00 01 00 +T 8F 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2F 62 6F 6F 74 2F 73 74 61 72 74 +R 00 00 02 00 +T 0B 00 00 00 75 70 2E 6E 65 74 00 +R 00 00 02 00 +T 12 00 00 00 +R 00 00 02 00 +T 12 00 00 00 2F 62 6F 6F 74 2F 63 6F 6E 66 69 +R 00 00 02 00 +T 1D 00 00 00 67 2E 6E 65 74 00 +R 00 00 02 00 +T 23 00 00 00 +R 00 00 02 00 +T 23 00 00 00 2F 65 74 63 2F 66 74 70 75 73 65 +R 00 00 02 00 +T 2E 00 00 00 72 73 00 +R 00 00 02 00 +T 31 00 00 00 +R 00 00 02 00 +T 31 00 00 00 2F 76 61 72 2F 73 70 6F 6F 6C 2F +R 00 00 02 00 +T 3C 00 00 00 6D 61 69 6C 00 +R 00 00 02 00 +T 41 00 00 00 +R 00 00 02 00 +T 41 00 00 00 2F 76 61 72 2F 6C 6F 67 2F 6D 61 +R 00 00 02 00 +T 4C 00 00 00 69 6C 2E 6C 6F 67 00 +R 00 00 02 00 +T 53 00 00 00 +R 00 00 02 00 +T 53 00 00 00 2F 76 61 72 2F 73 70 6F 6F 6C 2F +R 00 00 02 00 +T 5E 00 00 00 6D 71 75 65 75 65 00 +R 00 00 02 00 +T 65 00 00 00 +R 00 00 02 00 +T 65 00 00 00 2F 76 61 72 2F 73 70 6F 6F 6C 2F +R 00 00 02 00 +T 70 00 00 00 6D 71 75 65 75 65 2F 2A 2E 77 72 +R 00 00 02 00 +T 7B 00 00 00 6B 00 +R 00 00 02 00 +T 7D 00 00 00 +R 00 00 02 00 +T 7D 00 00 00 2F 76 61 72 2F 73 70 6F 6F 6C 2F +R 00 00 02 00 +T 88 00 00 00 72 71 75 65 75 65 00 +R 00 00 02 00 +T 8F 00 00 00 +R 00 00 02 00 +T 8F 00 00 00 2F 65 74 63 2F 61 6C 69 61 73 00 +R 00 00 02 00 +T 9A 00 00 00 +R 00 00 02 00 +T 9A 00 00 00 2F 76 61 72 2F 6E 61 6D 65 64 2F +R 00 00 02 00 +T A5 00 00 00 64 6F 6D 61 69 6E 2E 74 78 74 00 +R 00 00 02 00 +T B0 00 00 00 +R 00 00 02 00 +T B0 00 00 00 2F 65 74 63 2F 66 69 6E 67 65 72 +R 00 00 02 00 +T BB 00 00 00 00 +R 00 00 02 00 +T BC 00 00 00 +R 00 00 02 00 +T BC 00 00 00 2F 65 74 63 2F 61 72 65 61 73 00 +R 00 00 02 00 +T C7 00 00 00 +R 00 00 02 00 +T C7 00 00 00 2F 65 74 63 2F 68 65 6C 70 00 +R 00 00 02 00 +T D1 00 00 00 +R 00 00 02 00 +T D1 00 00 00 2F 65 74 63 2F 72 65 77 72 69 74 +R 00 00 02 00 +T DC 00 00 00 65 00 +R 00 00 02 00 +T DE 00 00 00 +R 00 00 02 00 +T DE 00 00 00 2F 65 74 63 2F 6E 65 77 73 00 +R 00 00 02 00 +T E8 00 00 00 +R 00 00 02 00 +T E8 00 00 00 2F 65 74 63 2F 70 6F 70 75 73 65 +R 00 00 02 00 +T F3 00 00 00 72 73 00 +R 00 00 02 00 +T F6 00 00 00 +R 00 00 02 00 +T F6 00 00 00 2F 65 74 63 2F 73 69 67 6E 61 74 +R 00 00 02 00 +T 01 01 00 00 75 72 00 +R 00 00 02 00 +T 04 01 00 00 +R 00 00 02 00 +T 04 01 00 00 2F 65 74 63 2F 66 6F 72 77 61 72 +R 00 00 02 00 +T 0F 01 00 00 64 2E 62 62 73 00 +R 00 00 02 00 +T 15 01 00 00 +R 00 00 02 00 +T 15 01 00 00 2F 76 61 72 2F 73 70 6F 6F 6C 2F +R 00 00 02 00 +T 20 01 00 00 68 69 73 74 6F 72 79 00 +R 00 00 02 00 +T 28 01 00 00 +R 00 00 02 00 +T 28 01 00 00 2F 74 6D 70 00 +R 00 00 02 00 +T 2D 01 00 00 +R 00 00 02 00 +T 2D 01 00 00 00 +R 00 00 02 00 +T 2E 01 00 00 +R 00 00 02 00 +T 2E 01 00 00 2F 00 +R 00 00 02 00 +T 30 01 00 00 +R 00 00 02 00 +T 30 01 00 00 72 00 +R 00 00 02 00 +T 32 01 00 00 +R 00 00 02 00 +T 32 01 00 00 2A 00 +R 00 00 02 00 +T 34 01 00 00 +R 00 00 02 00 +T 34 01 00 00 77 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 05 00 00 00 +R 00 00 03 00 +T 05 00 00 00 +R 00 00 03 00 +T 07 00 00 00 +R 00 00 03 00 +T 07 00 00 00 +R 00 00 03 00 +T 09 00 00 00 +R 00 00 03 00 +T 09 00 00 00 +R 00 00 03 00 +T 0B 00 00 00 +R 00 00 03 00 +T 0B 00 00 00 +R 00 00 03 00 +T 0D 00 00 00 +R 00 00 03 00 +T 0D 00 00 00 +R 00 00 03 00 +T 0F 00 00 00 +R 00 00 03 00 +T 0F 00 00 00 +R 00 00 03 00 +T 11 00 00 00 +R 00 00 03 00 +T 11 00 00 00 +R 00 00 03 00 +T 13 00 00 00 +R 00 00 03 00 +T 13 00 00 00 +R 00 00 03 00 +T 15 00 00 00 +R 00 00 03 00 +T 15 00 00 00 +R 00 00 03 00 +T 17 00 00 00 +R 00 00 03 00 +T 17 00 00 00 +R 00 00 03 00 +T 19 00 00 00 +R 00 00 03 00 +T 19 00 00 00 +R 00 00 03 00 +T 1B 00 00 00 +R 00 00 03 00 +T 1B 00 00 00 +R 00 00 03 00 +T 1D 00 00 00 +R 00 00 03 00 +T 1D 00 00 00 +R 00 00 03 00 +T 1F 00 00 00 +R 00 00 03 00 +T 1F 00 00 00 +R 00 00 03 00 +T 21 00 00 00 +R 00 00 03 00 +T 21 00 00 00 +R 00 00 03 00 +T 23 00 00 00 +R 00 00 03 00 +T 23 00 00 00 +R 00 00 03 00 +T 25 00 00 00 +R 00 00 03 00 +T 25 00 00 00 +R 00 00 03 00 +T 27 00 00 00 +R 00 00 03 00 +T 27 00 00 00 +R 00 00 03 00 +T 29 00 00 00 +R 00 00 03 00 +T 29 00 00 00 +R 00 00 03 00 +T 2B 00 00 00 +R 00 00 03 00 +T 2B 00 00 00 +R 00 00 03 00 +T 2D 00 00 00 +R 00 00 03 00 +T 2D 00 00 00 +R 00 00 03 00 +T 2F 00 00 00 +R 00 00 03 00 +T 2F 00 00 00 +R 00 00 03 00 +T 00 00 00 00 55 4E 49 58 00 00 00 00 00 +R 00 00 04 00 00 09 02 00 +T 07 00 00 00 12 00 00 00 23 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0B 00 00 00 31 00 00 00 41 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0F 00 00 00 53 00 00 00 65 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 13 00 00 00 7D 00 00 00 8F 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 17 00 00 00 9A 00 00 00 B0 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 1B 00 00 00 BC 00 00 00 C7 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 1F 00 00 00 D1 00 00 00 DE 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 23 00 00 00 E8 00 00 00 F6 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 27 00 00 00 04 01 00 00 15 01 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 2B 00 00 00 28 01 00 00 0A 00 2D 01 00 00 +R 00 00 04 00 00 04 02 00 00 0A 02 00 diff --git a/src/nos/lib/net_lib/flushall.rel b/src/nos/lib/net_lib/flushall.rel new file mode 100644 index 00000000..611ce96c --- /dev/null +++ b/src/nos/lib/net_lib/flushall.rel @@ -0,0 +1,36 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S __Files Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3D flags 0 +S _flushall Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 02 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 DD 7E FE DD B6 FF 28 24 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 1E 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 25 00 00 00 06 00 DD 4E FE DD 46 FF 09 56 23 +R 00 00 01 00 +T 30 00 00 00 66 6A DD 75 FE DD 74 FF 18 D4 +R 00 00 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/fmode.rel b/src/nos/lib/net_lib/fmode.rel new file mode 100644 index 00000000..ec292611 --- /dev/null +++ b/src/nos/lib/net_lib/fmode.rel @@ -0,0 +1,53 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 63 flags 0 +S _fmode Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 B6 03 28 12 DD 6E 02 DD 66 03 46 +R 00 00 01 00 +T 14 00 00 00 23 66 68 01 AD DE A7 ED 42 28 05 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 21 FF FF 18 3C +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 2C 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 33 00 00 00 10 00 DD 4E 02 DD 46 03 09 7E 0F +R 00 00 01 00 +T 3E 00 00 00 0F E6 01 26 00 6F DD 75 FE DD 74 +R 00 00 01 00 +T 49 00 00 00 FF 21 10 00 09 DD CB 04 46 28 04 +R 00 00 01 00 +T 54 00 00 00 CB D6 18 02 +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 CB 96 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/fpname.rel b/src/nos/lib/net_lib/fpname.rel new file mode 100644 index 00000000..4c3d8fff --- /dev/null +++ b/src/nos/lib/net_lib/fpname.rel @@ -0,0 +1,45 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 42 flags 0 +S _fpname Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 12 DD 6E +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 02 DD 66 03 46 23 66 68 01 AD DE +R 00 00 01 00 +T 14 00 00 00 A7 ED 42 28 05 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 21 00 00 18 21 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 21 0E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 29 00 00 00 B7 20 10 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 21 1B 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 37 00 00 00 23 66 68 18 03 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 21 00 00 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/net_lib/fprintf.rel b/src/nos/lib/net_lib/fprintf.rel new file mode 100644 index 00000000..8ccc071c --- /dev/null +++ b/src/nos/lib/net_lib/fprintf.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _vfprintf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S _fprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 10 00 39 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 4E 0C DD 46 0D DD 5E 0A DD 56 +R 00 00 01 00 +T 1F 00 00 00 0B 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 25 00 00 00 CD 00 00 00 00 F1 DD 75 FE DD 74 +R 00 00 01 00 02 05 00 00 +T 2E 00 00 00 FF C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/net_lib/fputc.rel b/src/nos/lib/net_lib/fputc.rel new file mode 100644 index 00000000..7c630aab --- /dev/null +++ b/src/nos/lib/net_lib/fputc.rel @@ -0,0 +1,177 @@ +XL4 +H 2 areas B global symbols +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D7 flags 0 +S _fputc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 3E 0A DD AE +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 02 DD B6 03 20 38 21 10 00 DD 4E +R 00 00 01 00 +T 14 00 00 00 04 DD 46 05 09 7E E6 04 47 23 7E +R 00 00 01 00 +T 1F 00 00 00 E6 00 B0 28 23 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 21 16 00 DD 4E 04 DD 46 05 09 EB +R 00 00 01 00 +T 2F 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 35 00 00 00 00 00 00 00 DD 75 FA DD 74 FB DD +R 00 00 01 00 02 04 01 00 +T 3E 00 00 00 36 FE 01 DD 36 FF 00 18 0F +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 36 FA 01 DD 36 FB 00 AF DD 77 +R 00 00 01 00 +T 52 00 00 00 FE DD 77 FF +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 21 12 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T 61 00 00 00 23 66 68 DD 75 FC DD 74 FD 7D B4 +R 00 00 01 00 +T 6C 00 00 00 28 3C 21 0C 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T 77 00 00 00 09 5E 23 56 21 04 00 09 46 23 66 +R 00 00 01 00 +T 82 00 00 00 68 A7 ED 52 DD 4E FA DD 46 FB A7 +R 00 00 01 00 +T 8D 00 00 00 ED 42 30 19 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 98 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 9D 00 00 00 00 00 00 00 7D A4 3C 20 06 +R 00 00 01 00 02 04 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 21 FF FF C3 D4 01 00 00 +R 00 00 01 00 00 08 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 21 12 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T B5 00 00 00 23 B6 20 3D +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 21 12 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T C4 00 00 00 21 19 00 09 56 23 66 6A DD 4E FA +R 00 00 01 00 +T CF 00 00 00 DD 46 FB CD 00 00 00 00 30 04 59 +R 00 00 01 00 02 08 08 00 +T D8 00 00 00 50 18 0D +R 00 00 01 00 +T DB 00 00 00 +R 00 00 01 00 +T DB 00 00 00 21 19 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T E6 00 00 00 23 56 +R 00 00 01 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T EE 00 00 00 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 01 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 21 12 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T 01 01 00 00 23 66 68 DD 75 FC DD 74 FD DD 7E +R 00 00 01 00 +T 0C 01 00 00 FE DD B6 FF 28 37 +R 00 00 01 00 +T 12 01 00 00 +R 00 00 01 00 +T 12 01 00 00 DD 6E FA DD 66 FB E5 21 16 00 DD +R 00 00 01 00 +T 1D 01 00 00 4E 04 DD 46 05 09 4D 44 21 0A 00 +R 00 00 01 00 +T 28 01 00 00 DD 5E FC DD 56 FD 19 7E 23 66 6F +R 00 00 01 00 +T 33 01 00 00 E5 21 0C 00 19 5E 23 56 E1 19 EB +R 00 00 01 00 +T 3E 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 44 01 00 00 00 00 00 00 F1 18 1C +R 00 00 01 00 02 04 01 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 21 0A 00 DD 4E FC DD 46 FD 09 56 +R 00 00 01 00 +T 54 01 00 00 23 66 6A E5 21 0C 00 09 4E 23 46 +R 00 00 01 00 +T 5F 01 00 00 E1 09 DD 46 02 70 +R 00 00 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 21 0C 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 70 01 00 00 DD 86 FA 77 23 7E DD 8E FB 77 21 +R 00 00 01 00 +T 7B 01 00 00 0C 00 09 56 23 66 6A E5 21 04 00 +R 00 00 01 00 +T 86 01 00 00 09 4E 23 46 E1 A7 ED 42 28 26 21 +R 00 00 01 00 +T 91 01 00 00 0F 00 DD 4E 04 DD 46 05 09 7E FE +R 00 00 01 00 +T 9C 01 00 00 03 28 17 21 0F 00 DD 4E 04 DD 46 +R 00 00 01 00 +T A7 01 00 00 05 09 46 05 05 20 20 DD 7E FE DD +R 00 00 01 00 +T B2 01 00 00 B6 FF 28 18 +R 00 00 01 00 +T B6 01 00 00 +R 00 00 01 00 +T B6 01 00 00 +R 00 00 01 00 +T B6 01 00 00 +R 00 00 01 00 +T B6 01 00 00 +R 00 00 01 00 +T B6 01 00 00 +R 00 00 01 00 +T B6 01 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T BE 01 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 02 00 02 0A 01 00 +T C5 01 00 00 A4 3C 20 05 +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 21 FF FF 18 06 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/net_lib/fputs.rel b/src/nos/lib/net_lib/fputs.rel new file mode 100644 index 00000000..5b032844 --- /dev/null +++ b/src/nos/lib/net_lib/fputs.rel @@ -0,0 +1,44 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 58 flags 0 +S _fputs Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF C5 E5 01 01 00 DD 5E +R 00 00 01 00 +T 20 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 27 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 2E 00 00 00 DD 75 FC DD 74 FD DD 4E FE DD 46 +R 00 00 01 00 +T 39 00 00 00 FF A7 ED 42 28 05 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 21 FF FF 18 11 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 DD 6E FE DD 66 FF DD 4E 02 DD 46 +R 00 00 01 00 +T 4F 00 00 00 03 09 2B 6E 26 00 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/fread.rel b/src/nos/lib/net_lib/fread.rel new file mode 100644 index 00000000..4dde6a08 --- /dev/null +++ b/src/nos/lib/net_lib/fread.rel @@ -0,0 +1,311 @@ +XL4 +H 2 areas 11 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S __fillbuf Ref00000000 +S _fflush Ref00000000 +S _fgetc Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S __lseek Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S __read Ref00000000 +S _memchr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 36C flags 0 +S _fread Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF AF DD 77 FA +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 DD 77 FB DD 7E 0C DD B6 0D 28 1A +R 00 00 01 00 +T 14 00 00 00 DD 6E 0C DD 66 0D 46 23 66 68 01 +R 00 00 01 00 +T 1F 00 00 00 AD DE A7 ED 42 20 08 DD 7E 04 DD +R 00 00 01 00 +T 2A 00 00 00 B6 05 20 06 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 21 00 00 C3 69 03 00 00 +R 00 00 01 00 00 08 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 3C 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 43 00 00 00 4E 04 DD 46 05 DD 5E 0A DD 56 0B +R 00 00 01 00 +T 4E 00 00 00 CD 00 00 00 00 DD 73 F4 DD 72 F5 +R 00 00 01 00 02 05 0A 00 +T 57 00 00 00 DD 6E 02 DD 66 03 DD 75 FC DD 74 +R 00 00 01 00 +T 62 00 00 00 FD +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 DD 7E F4 DD B6 F5 CA 3E 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 21 14 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 77 00 00 00 23 B6 C2 4F 01 00 00 21 0E 00 DD +R 00 00 01 00 00 07 01 00 +T 80 00 00 00 4E 0C DD 46 0D 09 7E B7 C2 +R 00 00 01 00 +T 89 00 00 00 4F 01 00 00 21 10 00 DD 4E 0C DD +R 00 00 01 00 00 04 01 00 +T 92 00 00 00 46 0D 09 7E E6 04 47 23 7E E6 00 +R 00 00 01 00 +T 9D 00 00 00 B0 C2 4F 01 00 00 01 80 00 DD 6E +R 00 00 01 00 00 06 01 00 +T A6 00 00 00 F4 DD 66 F5 A7 ED 42 DA +R 00 00 01 00 +T AE 00 00 00 4F 01 00 00 +R 00 00 01 00 00 04 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 21 00 00 E5 21 0A 00 DD 4E 0C DD +R 00 00 01 00 +T BB 00 00 00 46 0D 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T C6 00 00 00 D5 21 08 00 DD 4E 0C DD 46 0D 09 +R 00 00 01 00 +T D1 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0B 00 +T D7 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T DE 00 00 00 F1 DD 6E F4 DD 66 F5 E5 DD 4E FC +R 00 00 01 00 +T E9 00 00 00 DD 46 FD 21 08 00 DD 5E 0C DD 56 +R 00 00 01 00 +T F4 00 00 00 0D 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T FC 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 03 01 00 00 75 FA DD 74 FB 7D B4 28 16 +R 00 00 01 00 +T 0C 01 00 00 +R 00 00 01 00 +T 0C 01 00 00 21 0A 00 DD 4E 0C DD 46 0D 09 DD +R 00 00 01 00 +T 17 01 00 00 5E FA DD 56 FB 01 00 00 CD +R 00 00 01 00 +T 20 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 DD 6E F4 DD 66 F5 DD 4E FA DD 46 +R 00 00 01 00 +T 2D 01 00 00 FB A7 ED 42 28 13 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 DD 4E 04 DD 46 05 DD 5E FA DD 56 +R 00 00 01 00 +T 3E 01 00 00 FB CD 00 00 00 00 EB C3 +R 00 00 01 00 02 06 0C 00 +T 44 01 00 00 69 03 00 00 +R 00 00 01 00 00 04 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 DD 6E 0A DD 66 0B C3 69 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 21 14 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 5A 01 00 00 23 B6 20 5B +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 DD 7E FA DD B6 FB 28 28 21 10 00 +R 00 00 01 00 +T 69 01 00 00 DD 4E 0C DD 46 0D 09 7E E6 20 47 +R 00 00 01 00 +T 74 01 00 00 23 7E E6 00 B0 28 13 +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 DD 4E 04 DD 46 05 DD 5E FA DD 56 +R 00 00 01 00 +T 86 01 00 00 FB CD 00 00 00 00 EB C3 +R 00 00 01 00 02 06 0C 00 +T 8C 01 00 00 69 03 00 00 +R 00 00 01 00 00 04 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 DD 4E F4 DD 46 F5 DD 5E 0C DD 56 +R 00 00 01 00 +T 99 01 00 00 0D 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 9F 01 00 00 CD 00 00 00 00 7D B4 20 13 +R 00 00 01 00 02 05 00 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 DD 4E 04 DD 46 05 DD 5E FA DD 56 +R 00 00 01 00 +T B1 01 00 00 FB CD 00 00 00 00 EB C3 +R 00 00 01 00 02 06 0C 00 +T B7 01 00 00 69 03 00 00 +R 00 00 01 00 00 04 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 21 14 00 DD 4E 0C DD 46 0D 09 56 +R 00 00 01 00 +T C4 01 00 00 23 66 6A DD 75 F2 DD 74 F3 11 +R 00 00 01 00 +T CE 01 00 00 0C 00 19 56 23 66 6A DD 5E F4 DD +R 00 00 01 00 +T D9 01 00 00 56 F5 A7 ED 52 30 10 21 0C 00 DD +R 00 00 01 00 +T E4 01 00 00 4E F2 DD 46 F3 09 46 23 66 68 18 +R 00 00 01 00 +T EF 01 00 00 06 +R 00 00 01 00 +T F0 01 00 00 +R 00 00 01 00 +T F0 01 00 00 DD 6E F4 DD 66 F5 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 DD 75 F6 DD 74 F7 21 10 00 DD 4E +R 00 00 01 00 +T 01 02 00 00 0C DD 46 0D 09 7E E6 04 47 23 7E +R 00 00 01 00 +T 0C 02 00 00 E6 00 B0 28 7A DD 6E F6 DD 66 F7 +R 00 00 01 00 +T 17 02 00 00 E5 21 16 00 DD 4E 0C DD 46 0D 09 +R 00 00 01 00 +T 22 02 00 00 4E 06 00 21 0A 00 DD 5E F2 DD 56 +R 00 00 01 00 +T 2D 02 00 00 F3 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 35 02 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 3C 02 00 00 75 FE DD 74 FF 7D B4 28 46 +R 00 00 01 00 +T 45 02 00 00 +R 00 00 01 00 +T 45 02 00 00 +R 00 00 01 00 +T 45 02 00 00 +R 00 00 01 00 +T 45 02 00 00 21 0A 00 DD 4E F2 DD 46 F3 09 5E +R 00 00 01 00 +T 50 02 00 00 23 56 DD 6E FE DD 66 FF A7 ED 52 +R 00 00 01 00 +T 5B 02 00 00 EB DD 6E F6 DD 66 F7 A7 ED 52 30 +R 00 00 01 00 +T 66 02 00 00 08 DD 6E F6 DD 66 F7 18 16 +R 00 00 01 00 +T 6F 02 00 00 +R 00 00 01 00 +T 6F 02 00 00 21 0A 00 DD 4E F2 DD 46 F3 09 4E +R 00 00 01 00 +T 7A 02 00 00 23 46 DD 6E FE DD 66 FF A7 ED 42 +R 00 00 01 00 +T 85 02 00 00 +R 00 00 01 00 +T 85 02 00 00 DD 75 F6 DD 74 F7 +R 00 00 01 00 +T 8B 02 00 00 +R 00 00 01 00 +T 8B 02 00 00 DD 7E F6 DD B6 F7 28 56 +R 00 00 01 00 +T 93 02 00 00 +R 00 00 01 00 +T 93 02 00 00 DD 6E F6 DD 66 F7 E5 DD 4E FC DD +R 00 00 01 00 +T 9E 02 00 00 46 FD 21 14 00 DD 5E 0C DD 56 0D +R 00 00 01 00 +T A9 02 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T AE 02 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 07 00 02 09 00 00 +T B5 02 00 00 75 F6 DD 74 F7 21 0A 00 39 7E DD +R 00 00 01 00 +T C0 02 00 00 86 F6 77 23 7E DD 8E F7 77 21 +R 00 00 01 00 +T CA 02 00 00 08 00 39 7E DD 86 F6 77 23 7E DD +R 00 00 01 00 +T D5 02 00 00 8E F7 77 21 02 00 39 7E DD 96 F6 +R 00 00 01 00 +T E0 02 00 00 77 23 7E DD 9E F7 77 18 52 +R 00 00 01 00 +T E9 02 00 00 +R 00 00 01 00 +T E9 02 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T F1 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T F8 02 00 00 75 F8 DD 74 F9 7D A4 3C 20 12 +R 00 00 01 00 +T 02 03 00 00 +R 00 00 01 00 +T 02 03 00 00 DD 4E 04 DD 46 05 DD 5E FA DD 56 +R 00 00 01 00 +T 0D 03 00 00 FB CD 00 00 00 00 EB 18 55 +R 00 00 01 00 02 06 0C 00 +T 14 03 00 00 +R 00 00 01 00 +T 14 03 00 00 DD 46 F8 DD 6E FC DD 66 FD 23 DD +R 00 00 01 00 +T 1F 03 00 00 75 FC DD 74 FD 2B 70 DD 34 FA 20 +R 00 00 01 00 +T 2A 03 00 00 03 DD 34 FB +R 00 00 01 00 +T 2E 03 00 00 +R 00 00 01 00 +T 2E 03 00 00 DD 6E F4 DD 66 F5 2B DD 75 F4 DD +R 00 00 01 00 +T 39 03 00 00 74 F5 +R 00 00 01 00 +T 3B 03 00 00 +R 00 00 01 00 +T 3B 03 00 00 C3 63 00 00 00 +R 00 00 01 00 00 05 01 00 +T 3E 03 00 00 +R 00 00 01 00 +T 3E 03 00 00 21 0E 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 49 03 00 00 FE 05 20 16 +R 00 00 01 00 +T 4D 03 00 00 +R 00 00 01 00 +T 4D 03 00 00 01 01 00 21 12 00 DD 5E 0C DD 56 +R 00 00 01 00 +T 58 03 00 00 0D 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 5E 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 63 03 00 00 +R 00 00 01 00 +T 63 03 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 +T 69 03 00 00 +R 00 00 01 00 +T 69 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/net_lib/free_mbuf.rel b/src/nos/lib/net_lib/free_mbuf.rel new file mode 100644 index 00000000..294dd823 --- /dev/null +++ b/src/nos/lib/net_lib/free_mbuf.rel @@ -0,0 +1,171 @@ +XL4 +H 3 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _Freembufs Ref00000000 +S _free Ref00000000 +S _dirps Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dprintf Ref00000000 +S _Mbufcache Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19D flags 0 +S _free_mbuf Def00000000 +A CSTR size 2F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF DD 6E 02 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 66 03 E5 DD 6E 08 DD 66 09 E5 DD +R 00 00 01 00 +T 14 00 00 00 6E 06 DD 66 07 E5 21 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 1D 00 00 00 E5 21 01 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T 25 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 2C 00 00 00 F1 F1 F1 DD 7E 02 DD B6 03 28 14 +R 00 00 01 00 +T 37 00 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T 42 00 00 00 75 FC DD 74 FD 7D B4 20 18 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 21 1E 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 00 05 02 00 +T 54 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 59 00 00 00 00 00 00 00 F1 F1 21 00 00 C3 +R 00 00 01 00 02 04 00 00 +T 61 00 00 00 9A 01 00 00 +R 00 00 01 00 00 04 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 DD 6E FC DD 66 FD E5 21 +R 00 00 01 00 +T 6B 00 00 00 25 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 00 04 02 00 +T 73 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 78 00 00 00 00 00 00 00 F1 F1 F1 DD 6E 02 DD +R 00 00 01 00 02 04 00 00 +T 81 00 00 00 66 03 AF 77 23 77 DD 6E FC DD 66 +R 00 00 01 00 +T 8C 00 00 00 FD 46 23 66 68 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 97 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T A2 00 00 00 23 B6 28 2A +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 56 +R 00 00 01 00 +T B1 00 00 00 23 66 6A DD 75 FA DD 74 FB 21 +R 00 00 01 00 +T BB 00 00 00 08 00 09 AF 77 23 77 21 02 00 39 +R 00 00 01 00 +T C6 00 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 29 07 01 00 +T CB 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 00 04 01 00 02 09 00 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 21 06 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T DB 00 00 00 23 46 0B 70 2B 71 21 00 00 CD +R 00 00 01 00 +T E5 00 00 00 00 00 00 00 DA 94 01 00 00 +R 00 00 01 00 02 04 09 00 00 09 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 2A 00 00 00 00 ED 4B 02 00 00 00 +R 00 00 01 00 02 05 05 00 02 0B 05 00 +T F1 00 00 00 CD 00 00 00 00 22 00 00 00 00 ED +R 00 00 01 00 02 05 02 00 02 0A 05 00 +T F8 00 00 00 43 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 2B 0A 07 00 +T FE 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 05 01 00 00 FE DD 74 FF 21 04 00 DD 4E FC DD +R 00 00 01 00 +T 10 01 00 00 46 FD 09 4E 23 46 3E 20 A9 B0 20 +R 00 00 01 00 +T 1B 01 00 00 1A +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 DD 6E FC DD 66 FD 23 23 ED 4B +R 00 00 01 00 +T 26 01 00 00 00 00 00 00 71 23 70 DD 6E FC DD +R 00 00 01 00 02 04 0C 00 +T 2F 01 00 00 66 FD 22 00 00 00 00 18 50 +R 00 00 01 00 02 07 0C 00 +T 36 01 00 00 +R 00 00 01 00 +T 36 01 00 00 3E 80 A9 B0 20 1A DD 6E FC DD 66 +R 00 00 01 00 +T 41 01 00 00 FD 23 23 ED 4B 02 00 00 00 71 23 +R 00 00 01 00 02 09 0C 00 +T 4A 01 00 00 70 DD 6E FC DD 66 FD 22 +R 00 00 01 00 +T 52 01 00 00 02 00 00 00 18 30 +R 00 00 01 00 02 04 0C 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 3E 08 A8 B1 20 1A DD 6E FC DD 66 +R 00 00 01 00 +T 61 01 00 00 FD 23 23 ED 4B 04 00 00 00 71 23 +R 00 00 01 00 02 09 0C 00 +T 6A 01 00 00 70 DD 6E FC DD 66 FD 22 +R 00 00 01 00 +T 72 01 00 00 04 00 00 00 18 10 +R 00 00 01 00 02 04 0C 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 7E 01 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 85 01 00 00 00 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 8E 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 94 01 00 00 +R 00 00 01 00 +T 94 01 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 +T 9A 01 00 00 +R 00 00 01 00 +T 9A 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 0A 25 30 34 78 3A 25 30 34 78 20 +R 00 00 02 00 +T 0B 00 00 00 66 72 65 65 5F 6D 62 75 66 28 30 +R 00 00 02 00 +T 16 00 00 00 78 25 30 34 78 29 20 00 +R 00 00 02 00 +T 1E 00 00 00 +R 00 00 02 00 +T 1E 00 00 00 3D 20 6E 6F 70 20 00 +R 00 00 02 00 +T 25 00 00 00 +R 00 00 02 00 +T 25 00 00 00 3D 20 30 78 25 30 34 78 20 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/free_p.rel b/src/nos/lib/net_lib/free_p.rel new file mode 100644 index 00000000..12255d71 --- /dev/null +++ b/src/nos/lib/net_lib/free_p.rel @@ -0,0 +1,57 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free_mbuf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 69 flags 0 +S _free_p Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 B6 03 28 14 DD 6E 02 DD 66 03 46 +R 00 00 01 00 +T 14 00 00 00 23 66 68 DD 75 FC DD 74 FD 7D B4 +R 00 00 01 00 +T 1F 00 00 00 20 05 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 00 00 18 40 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T 31 00 00 00 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 7E FC DD B6 FD 28 16 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 48 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 4F 00 00 00 75 FC DD 74 FD 18 E2 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 DD 6E 02 DD 66 03 AF 77 23 77 DD +R 00 00 01 00 +T 61 00 00 00 6E FE DD 66 FF +R 00 00 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/free_q.rel b/src/nos/lib/net_lib/free_q.rel new file mode 100644 index 00000000..15c08f81 --- /dev/null +++ b/src/nos/lib/net_lib/free_q.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _dequeue Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 30 flags 0 +S _free_q Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 03 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 0D 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 14 00 00 00 75 FE DD 74 FF 7D B4 28 10 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 25 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 2C 00 00 00 D8 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/freesock.rel b/src/nos/lib/net_lib/freesock.rel new file mode 100644 index 00000000..f129abcf --- /dev/null +++ b/src/nos/lib/net_lib/freesock.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Usock Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _shutdown Ref00000000 +S _Nsock Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 78 flags 0 +S _freesock Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 77 FF +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 ED 4B 00 00 00 00 DD 6E FE DD 66 +R 00 00 01 00 02 06 07 00 +T 15 00 00 00 FF A7 ED 42 30 5A +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 6E FE DD 66 FF 29 ED 4B +R 00 00 01 00 +T 24 00 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 02 04 01 00 +T 2D 00 00 00 FC DD 74 FD 7D B4 28 36 21 07 00 +R 00 00 01 00 +T 38 00 00 00 DD 4E FC DD 46 FD 09 7E B7 28 28 +R 00 00 01 00 +T 43 00 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T 4E 00 00 00 68 DD 4E 02 DD 46 03 A7 ED 42 20 +R 00 00 01 00 +T 59 00 00 00 11 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 01 02 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 64 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 69 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 18 97 +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/freopen.rel b/src/nos/lib/net_lib/freopen.rel new file mode 100644 index 00000000..3d9b36f2 --- /dev/null +++ b/src/nos/lib/net_lib/freopen.rel @@ -0,0 +1,242 @@ +XL4 +H 2 areas 12 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _seteol Ref00000000 +S _unlink Ref00000000 +S __open Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fcreat Ref00000000 +S _strchr Ref00000000 +S _close Ref00000000 +S _strdupw Ref00000000 +S __fclose Ref00000000 +S .__.ABS. Def00000000 +S _Eol Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __creat Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 224 flags 0 +S _freopen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D8 FF AF DD 77 DA +R 00 00 01 00 02 05 0D 00 +T 09 00 00 00 DD 77 DB AF DD 77 DC DD 77 DD AF +R 00 00 01 00 +T 14 00 00 00 DD 77 DE DD 77 DF 01 72 00 DD 5E +R 00 00 01 00 +T 1F 00 00 00 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 06 00 +T 26 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 2D 00 00 00 28 09 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 AF DD 77 D8 DD 77 D9 18 7E +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 01 77 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 42 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 47 00 00 00 00 00 00 00 7D B4 28 12 +R 00 00 01 00 02 04 00 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 36 DC 01 DD 36 DD 00 DD 36 D8 +R 00 00 01 00 +T 58 00 00 00 01 DD 36 D9 00 18 57 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 01 61 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 69 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 6E 00 00 00 00 00 00 00 7D B4 28 3C +R 00 00 01 00 02 04 00 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 DD 36 D8 01 DD 36 D9 00 DD 36 DE +R 00 00 01 00 +T 7F 00 00 00 01 DD 36 DF 00 21 0A 00 39 4D 44 +R 00 00 01 00 +T 8A 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T 92 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 10 00 02 0A 00 00 +T 99 00 00 00 A4 3C 20 11 2A 00 00 00 00 3E 02 +R 00 00 01 00 02 09 0C 00 +T A2 00 00 00 AD B4 20 08 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 DD 36 DC 01 DD 36 DD 00 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 18 06 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 21 00 00 C3 21 02 00 00 +R 00 00 01 00 00 08 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 01 2B 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T C0 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T C5 00 00 00 00 00 00 00 7D B4 28 08 +R 00 00 01 00 02 04 00 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 DD 36 D8 02 DD 36 D9 00 +R 00 00 01 00 +T D3 00 00 00 +R 00 00 01 00 +T D3 00 00 00 01 74 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T DD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T E2 00 00 00 00 00 00 00 7D B4 28 08 +R 00 00 01 00 02 04 00 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 DD 36 DA 01 DD 36 DB 00 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 DD 7E DC DD B6 DD 28 19 +R 00 00 01 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 01 80 01 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 02 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 07 01 00 00 00 00 00 00 DD 75 E0 DD 74 E1 18 +R 00 00 01 00 02 04 00 00 +T 10 01 00 00 1E +R 00 00 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 DD 6E D8 DD 66 D9 E5 DD 6E 02 DD +R 00 00 01 00 +T 1C 01 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 22 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 29 01 00 00 DD 75 E0 DD 74 E1 +R 00 00 01 00 +T 2F 01 00 00 +R 00 00 01 00 +T 2F 01 00 00 DD 7E E0 DD A6 E1 3C 20 06 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 21 00 00 C3 21 02 00 00 +R 00 00 01 00 00 08 01 00 +T 3E 01 00 00 +R 00 00 01 00 +T 3E 01 00 00 DD 7E 0A DD B6 0B 28 10 +R 00 00 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 4E 01 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 55 01 00 00 3C +R 00 00 01 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 5C 01 00 00 00 00 00 00 DD 75 0A DD 74 0B 7D +R 00 00 01 00 02 04 00 00 +T 65 01 00 00 B4 20 2A +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 DD 5E E0 DD 56 E1 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 70 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 77 01 00 00 7E DC DD B6 DD 28 0E +R 00 00 01 00 +T 7E 01 00 00 +R 00 00 01 00 +T 7E 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 86 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 8C 01 00 00 +R 00 00 01 00 +T 8C 01 00 00 21 00 00 C3 21 02 00 00 +R 00 00 01 00 00 08 01 00 +T 92 01 00 00 +R 00 00 01 00 +T 92 01 00 00 +R 00 00 01 00 +T 92 01 00 00 21 08 00 DD 4E 0A DD 46 0B 09 DD +R 00 00 01 00 +T 9D 01 00 00 5E E0 DD 56 E1 73 23 72 21 0A 00 +R 00 00 01 00 +T A8 01 00 00 09 AF 77 23 77 23 77 23 77 21 +R 00 00 01 00 +T B2 01 00 00 0E 00 09 36 00 21 0F 00 09 36 01 +R 00 00 01 00 +T BD 01 00 00 21 1B 00 09 E5 DD 5E 02 DD 56 03 +R 00 00 01 00 +T C8 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T CE 01 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 00 00 +T D6 01 00 00 10 00 09 DD CB DA 46 28 04 CB D6 +R 00 00 01 00 +T E1 01 00 00 18 02 +R 00 00 01 00 +T E3 01 00 00 +R 00 00 01 00 +T E3 01 00 00 CB 96 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 21 10 00 DD 4E 0A DD 46 0B 09 DD +R 00 00 01 00 +T F0 01 00 00 CB DE 46 28 04 CB DE 18 02 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 CB 9E +R 00 00 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 21 19 00 DD 4E 0A DD 46 0B 09 36 +R 00 00 01 00 +T 06 02 00 00 80 23 36 00 01 00 00 00 00 DD 5E +R 00 00 01 00 02 09 0B 00 +T 0F 02 00 00 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 16 02 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 1D 02 00 00 0A DD 66 0B +R 00 00 01 00 +T 21 02 00 00 +R 00 00 01 00 +T 21 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/net_lib/fseek.rel b/src/nos/lib/net_lib/fseek.rel new file mode 100644 index 00000000..39be601f --- /dev/null +++ b/src/nos/lib/net_lib/fseek.rel @@ -0,0 +1,123 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _fflush Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _fstat Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 143 flags 0 +S _fseek Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E2 FF DD 7E 02 DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 B6 03 28 20 DD 6E 02 DD 66 03 46 +R 00 00 01 00 +T 14 00 00 00 23 66 68 01 AD DE A7 ED 42 20 0E +R 00 00 01 00 +T 1F 00 00 00 21 0E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 2A 00 00 00 B7 28 0C +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 08 00 +T 36 00 00 00 C3 40 01 00 00 +R 00 00 01 00 00 05 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 41 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 48 00 00 00 5E 0E DD 56 0F CD 00 00 00 00 +R 00 00 01 00 02 0A 01 00 +T 50 00 00 00 00 00 03 00 15 01 00 00 +R 00 00 01 00 00 08 01 00 +T 56 00 00 00 5C 00 00 00 7C 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 5A 00 00 00 B8 00 00 00 +R 00 00 01 00 00 04 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 67 00 00 00 4E 0C DD 46 0D DD 5E 0A DD 56 0B +R 00 00 01 00 +T 72 00 00 00 73 23 72 23 71 23 70 C3 +R 00 00 01 00 +T 7A 00 00 00 15 01 00 00 +R 00 00 01 00 00 04 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 87 00 00 00 21 14 00 09 5E 23 56 3E +R 00 00 01 00 +T 8F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 94 00 00 00 00 00 00 00 11 00 00 4D 44 DD 6E +R 00 00 01 00 02 04 00 00 +T 9D 00 00 00 0A DD 66 0B A7 ED 42 4D 44 DD 6E +R 00 00 01 00 +T A8 00 00 00 0C DD 66 0D ED 52 59 50 4D 44 E1 +R 00 00 01 00 +T B3 00 00 00 CD 00 00 00 00 18 5D +R 00 00 01 00 02 05 05 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 21 00 00 39 4D 44 21 08 00 DD 5E +R 00 00 01 00 +T C3 00 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T CC 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T D1 00 00 00 00 00 00 00 7D A4 3C 20 05 +R 00 00 01 00 02 04 00 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 21 FF FF 18 63 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 DD 6E F2 DD 66 F3 E5 DD 6E F0 DD +R 00 00 01 00 +T E8 00 00 00 66 F1 E5 DD 6E 0A DD 66 0B C1 09 +R 00 00 01 00 +T F3 00 00 00 EB DD 6E 0C DD 66 0D C1 ED 4A 4D +R 00 00 01 00 +T FE 00 00 00 44 EB E5 21 0A 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 09 01 00 00 03 19 D1 73 23 72 23 71 23 70 18 +R 00 00 01 00 +T 14 01 00 00 00 +R 00 00 01 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 21 14 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 20 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T 26 01 00 00 00 00 00 00 21 14 00 09 AF 77 23 +R 00 00 01 00 02 04 00 00 +T 2F 01 00 00 77 21 10 00 09 7E E6 FD 77 23 7E +R 00 00 01 00 +T 3A 01 00 00 E6 FF 77 21 00 00 +R 00 00 01 00 +T 40 01 00 00 +R 00 00 01 00 +T 40 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/net_lib/ftell.rel b/src/nos/lib/net_lib/ftell.rel new file mode 100644 index 00000000..1168152e --- /dev/null +++ b/src/nos/lib/net_lib/ftell.rel @@ -0,0 +1,52 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S _len_p Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 72 flags 0 +S _ftell Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 20 DD 6E +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 02 DD 66 03 46 23 66 68 01 AD DE +R 00 00 01 00 +T 14 00 00 00 A7 ED 42 20 0E 21 0E 00 DD 4E 02 +R 00 00 01 00 +T 1F 00 00 00 DD 46 03 09 7E B7 28 08 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 01 FF FF 21 FF FF 18 40 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 37 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 3E 00 00 00 14 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 49 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 4F 00 00 00 CD 00 00 00 00 11 00 00 D5 E5 21 +R 00 00 01 00 02 05 00 00 +T 58 00 00 00 0A 00 09 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T 63 00 00 00 60 A7 C1 ED 42 EB C1 ED 42 4D 44 +R 00 00 01 00 +T 6E 00 00 00 EB +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/net_lib/ftpsubr.rel b/src/nos/lib/net_lib/ftpsubr.rel new file mode 100644 index 00000000..f32e55e4 --- /dev/null +++ b/src/nos/lib/net_lib/ftpsubr.rel @@ -0,0 +1,615 @@ +XL4 +H 3 areas 1E global symbols +S _fread Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sprintf Ref00000000 +S _Cmds Ref00000000 +S _fgetc Ref00000000 +S _fmode Ref00000000 +S _fseek Ref00000000 +S _cmdparse Ref00000000 +S _fwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _MD5Init Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _free Ref00000000 +S _fputc Ref00000000 +S _MD5Update Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _socklen Ref00000000 +S _mallocw Ref00000000 +S _MD5Final Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 633 flags 0 +S _sendfile Def00000000 +S _recvfile Def000001C3 +S _isbinary Def000003D8 +S _md5hash Def00000458 +A CSTR size 11 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C2 FF AF DD 77 C2 +R 00 00 01 00 02 05 13 00 +T 09 00 00 00 DD 77 C3 DD 77 C4 DD 77 C5 AF DD +R 00 00 01 00 +T 14 00 00 00 77 C6 DD 77 C7 DD 77 C8 DD 77 C9 +R 00 00 01 00 +T 1F 00 00 00 DD 7E 0C FE 04 38 46 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 7E 04 DD B6 05 28 10 21 08 00 +R 00 00 01 00 +T 31 00 00 00 DD 4E 04 DD 46 05 09 46 23 66 68 +R 00 00 01 00 +T 3C 00 00 00 18 03 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 21 FF FF +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 E5 21 00 00 00 00 E5 21 10 00 39 +R 00 00 01 00 00 06 02 00 +T 4A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 50 00 00 00 CD 00 00 00 00 F1 F1 F1 21 00 00 +R 00 00 01 00 02 05 01 00 +T 59 00 00 00 E5 21 0E 00 39 4D 44 11 +R 00 00 01 00 +T 61 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 2B 09 07 00 +T 66 00 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 7E 0A FE 01 38 19 FE 03 30 15 +R 00 00 01 00 +T 77 00 00 00 18 00 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 01 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 83 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 88 00 00 00 00 00 00 00 18 17 +R 00 00 01 00 02 04 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 FE 00 20 E9 01 01 00 DD 5E 04 DD +R 00 00 01 00 +T 97 00 00 00 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 9C 00 00 00 00 00 00 00 CD 00 00 00 00 18 00 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 11 80 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 15 00 +T A9 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 15 00 02 09 01 00 +T B0 00 00 00 CA DD 74 CB +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 DD 6E 02 DD 66 03 E5 21 80 00 E5 +R 00 00 01 00 +T BF 00 00 00 01 01 00 DD 5E CA DD 56 CB 3E +R 00 00 01 00 +T C9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T CE 00 00 00 00 00 00 00 F1 F1 DD 75 CC DD 74 +R 00 00 01 00 02 04 01 00 +T D7 00 00 00 CD 7D B4 20 03 +R 00 00 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 C3 89 01 00 00 +R 00 00 01 00 00 05 01 00 +T DF 00 00 00 +R 00 00 01 00 +T DF 00 00 00 21 00 00 39 DD 5E CC DD 56 CD 7A +R 00 00 01 00 +T EA 00 00 00 07 9F 4F 41 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 09 0B 00 +T F3 00 00 00 04 DD 66 05 E5 DD 6E CC DD 66 CD +R 00 00 01 00 +T FE 00 00 00 E5 01 01 00 DD 5E CA DD 56 CB 3E +R 00 00 01 00 +T 09 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 0E 01 00 00 00 00 00 00 F1 F1 DD 4E CC DD 46 +R 00 00 01 00 02 04 01 00 +T 17 01 00 00 CD A7 ED 42 28 10 +R 00 00 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 06 FF DD 70 C2 DD 70 C3 DD 70 C4 +R 00 00 01 00 +T 28 01 00 00 DD 70 C5 18 5C +R 00 00 01 00 +T 2D 01 00 00 +R 00 00 01 00 +T 2D 01 00 00 +R 00 00 01 00 +T 2D 01 00 00 DD 7E 0C FE 03 20 52 21 00 00 E5 +R 00 00 01 00 +T 38 01 00 00 21 E8 03 E5 DD 6E C6 DD 66 C7 C1 +R 00 00 01 00 +T 43 01 00 00 09 EB DD 6E C8 DD 66 C9 C1 ED 4A +R 00 00 01 00 +T 4E 01 00 00 E5 D5 DD 4E C4 DD 46 C5 DD 6E C2 +R 00 00 01 00 +T 59 01 00 00 DD 66 C3 CD 00 00 00 00 38 25 +R 00 00 01 00 02 08 12 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 0C 00 +T 6A 01 00 00 23 46 11 23 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T 72 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 78 01 00 00 04 00 39 01 00 00 11 E8 03 CD +R 00 00 01 00 +T 82 01 00 00 00 00 00 00 18 A7 +R 00 00 01 00 02 04 0B 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 C3 B4 00 00 00 +R 00 00 01 00 00 05 01 00 +T 89 01 00 00 +R 00 00 01 00 +T 89 01 00 00 DD 5E CA DD 56 CB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 91 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0F 00 02 0A 01 00 +T 98 01 00 00 7E 0C FE 03 20 16 +R 00 00 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 0C 00 +T A7 01 00 00 23 46 11 0A 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T AF 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T B4 01 00 00 +R 00 00 01 00 +T B4 01 00 00 DD 4E C4 DD 46 C5 DD 6E C2 DD 66 +R 00 00 01 00 +T BF 01 00 00 C3 C3 00 00 00 00 +R 00 00 01 00 02 06 19 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 CD 00 00 00 00 C2 FF AF DD 77 C4 +R 00 00 01 00 02 05 13 00 +T CC 01 00 00 DD 77 C5 DD 77 C6 DD 77 C7 AF DD +R 00 00 01 00 +T D7 01 00 00 77 C8 DD 77 C9 DD 77 CA DD 77 CB +R 00 00 01 00 +T E2 01 00 00 DD 7E 0C FE 04 38 46 +R 00 00 01 00 +T E9 01 00 00 +R 00 00 01 00 +T E9 01 00 00 DD 7E 04 DD B6 05 28 10 21 08 00 +R 00 00 01 00 +T F4 01 00 00 DD 4E 04 DD 46 05 09 46 23 66 68 +R 00 00 01 00 +T FF 01 00 00 18 03 +R 00 00 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 21 FF FF +R 00 00 01 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 E5 21 00 00 00 00 E5 21 10 00 39 +R 00 00 01 00 00 06 02 00 +T 0D 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 13 02 00 00 CD 00 00 00 00 F1 F1 F1 21 00 00 +R 00 00 01 00 02 05 01 00 +T 1C 02 00 00 E5 21 0E 00 39 4D 44 11 +R 00 00 01 00 +T 24 02 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 2B 09 07 00 +T 29 02 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 2F 02 00 00 +R 00 00 01 00 +T 2F 02 00 00 DD 7E 02 DD B6 03 20 12 +R 00 00 01 00 +T 37 02 00 00 +R 00 00 01 00 +T 37 02 00 00 21 40 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 0C 00 +T 40 02 00 00 23 66 68 DD 75 02 DD 74 03 +R 00 00 01 00 +T 49 02 00 00 +R 00 00 01 00 +T 49 02 00 00 DD 7E 0A FE 01 38 19 FE 03 30 15 +R 00 00 01 00 +T 54 02 00 00 18 00 +R 00 00 01 00 +T 56 02 00 00 +R 00 00 01 00 +T 56 02 00 00 +R 00 00 01 00 +T 56 02 00 00 01 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 60 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 65 02 00 00 00 00 00 00 18 17 +R 00 00 01 00 02 04 01 00 +T 69 02 00 00 +R 00 00 01 00 +T 69 02 00 00 FE 00 20 E9 01 01 00 DD 5E 04 DD +R 00 00 01 00 +T 74 02 00 00 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 79 02 00 00 00 00 00 00 CD 00 00 00 00 18 00 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 80 02 00 00 +R 00 00 01 00 +T 80 02 00 00 11 80 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 15 00 +T 86 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 15 00 02 09 01 00 +T 8D 02 00 00 CC DD 74 CD +R 00 00 01 00 +T 91 02 00 00 +R 00 00 01 00 +T 91 02 00 00 DD 6E 04 DD 66 05 E5 21 80 00 E5 +R 00 00 01 00 +T 9C 02 00 00 01 01 00 DD 5E CC DD 56 CD 3E +R 00 00 01 00 +T A6 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T AB 02 00 00 00 00 00 00 F1 F1 DD 75 C2 DD 74 +R 00 00 01 00 02 04 01 00 +T B4 02 00 00 C3 7D B4 CA 9E 03 00 00 +R 00 00 01 00 00 08 01 00 +T BA 02 00 00 +R 00 00 01 00 +T BA 02 00 00 21 02 00 39 DD 5E C2 DD 56 C3 7A +R 00 00 01 00 +T C5 02 00 00 07 9F 4F 41 CD 00 00 00 00 +R 00 00 01 00 02 09 0B 00 +T CC 02 00 00 +R 00 00 01 00 +T CC 02 00 00 DD 7E 0C FE 03 20 52 21 00 00 E5 +R 00 00 01 00 +T D7 02 00 00 21 E8 03 E5 DD 6E C8 DD 66 C9 C1 +R 00 00 01 00 +T E2 02 00 00 09 EB DD 6E CA DD 66 CB C1 ED 4A +R 00 00 01 00 +T ED 02 00 00 E5 D5 DD 4E C6 DD 46 C7 DD 6E C4 +R 00 00 01 00 +T F8 02 00 00 DD 66 C5 CD 00 00 00 00 38 25 +R 00 00 01 00 02 08 12 00 +T 00 03 00 00 +R 00 00 01 00 +T 00 03 00 00 +R 00 00 01 00 +T 00 03 00 00 +R 00 00 01 00 +T 00 03 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 0C 00 +T 09 03 00 00 23 46 11 23 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T 11 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 17 03 00 00 06 00 39 01 00 00 11 E8 03 CD +R 00 00 01 00 +T 21 03 00 00 00 00 00 00 18 A7 +R 00 00 01 00 02 04 0B 00 +T 25 03 00 00 +R 00 00 01 00 +T 25 03 00 00 DD 6E 02 DD 66 03 E5 DD 6E C2 DD +R 00 00 01 00 +T 30 03 00 00 66 C3 E5 01 01 00 DD 5E CC DD 56 +R 00 00 01 00 +T 3B 03 00 00 CD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 41 03 00 00 CD 00 00 00 00 F1 F1 DD 4E C2 DD +R 00 00 01 00 02 05 01 00 +T 4A 03 00 00 46 C3 A7 ED 42 28 10 +R 00 00 01 00 +T 51 03 00 00 +R 00 00 01 00 +T 51 03 00 00 06 FF DD 70 C4 DD 70 C5 DD 70 C6 +R 00 00 01 00 +T 5C 03 00 00 DD 70 C7 18 3D +R 00 00 01 00 +T 61 03 00 00 +R 00 00 01 00 +T 61 03 00 00 01 00 00 DD 7E 04 DD B6 05 28 0F +R 00 00 01 00 +T 6C 03 00 00 21 08 00 DD 5E 04 DD 56 05 19 5E +R 00 00 01 00 +T 77 03 00 00 23 56 18 03 +R 00 00 01 00 +T 7B 03 00 00 +R 00 00 01 00 +T 7B 03 00 00 11 FF FF +R 00 00 01 00 +T 7E 03 00 00 +R 00 00 01 00 +T 7E 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 14 00 02 0A 14 00 +T 84 03 00 00 00 00 00 00 7D A4 3C 20 10 +R 00 00 01 00 02 04 01 00 +T 8B 03 00 00 +R 00 00 01 00 +T 8B 03 00 00 06 FF DD 70 C4 DD 70 C5 DD 70 C6 +R 00 00 01 00 +T 96 03 00 00 DD 70 C7 18 03 +R 00 00 01 00 +T 9B 03 00 00 +R 00 00 01 00 +T 9B 03 00 00 C3 91 02 00 00 +R 00 00 01 00 00 05 01 00 +T 9E 03 00 00 +R 00 00 01 00 +T 9E 03 00 00 DD 5E CC DD 56 CD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T A6 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0F 00 02 0A 01 00 +T AD 03 00 00 7E 0C FE 03 20 16 +R 00 00 01 00 +T B3 03 00 00 +R 00 00 01 00 +T B3 03 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 0C 00 +T BC 03 00 00 23 46 11 0A 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T C4 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T C9 03 00 00 +R 00 00 01 00 +T C9 03 00 00 DD 4E C6 DD 46 C7 DD 6E C4 DD 66 +R 00 00 01 00 +T D4 03 00 00 C5 C3 00 00 00 00 +R 00 00 01 00 02 06 19 00 +T D8 03 00 00 +R 00 00 01 00 +T D8 03 00 00 CD 00 00 00 00 FA FF AF DD 77 FE +R 00 00 01 00 02 05 13 00 +T E1 03 00 00 DD 77 FF AF DD 77 FC DD 77 FD +R 00 00 01 00 +T EB 03 00 00 +R 00 00 01 00 +T EB 03 00 00 01 00 82 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T F6 03 00 00 AC 67 ED 42 30 36 +R 00 00 01 00 +T FC 03 00 00 +R 00 00 01 00 +T FC 03 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 04 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T 0B 04 00 00 75 FA DD 74 FB 7D A4 3C 20 02 +R 00 00 01 00 +T 15 04 00 00 +R 00 00 01 00 +T 15 04 00 00 18 1B +R 00 00 01 00 +T 17 04 00 00 +R 00 00 01 00 +T 17 04 00 00 DD 7E FA E6 80 28 0A +R 00 00 01 00 +T 1E 04 00 00 +R 00 00 01 00 +T 1E 04 00 00 DD 36 FE 01 DD 36 FF 00 18 0A +R 00 00 01 00 +T 28 04 00 00 +R 00 00 01 00 +T 28 04 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 30 04 00 00 +R 00 00 01 00 +T 30 04 00 00 18 B9 +R 00 00 01 00 +T 32 04 00 00 +R 00 00 01 00 +T 32 04 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 3D 04 00 00 E5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 45 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 4A 04 00 00 00 00 00 00 F1 F1 F1 DD 6E FE DD +R 00 00 01 00 02 04 01 00 +T 53 04 00 00 66 FF C3 00 00 00 00 +R 00 00 01 00 02 07 09 00 +T 58 04 00 00 +R 00 00 01 00 +T 58 04 00 00 CD 00 00 00 00 A0 FF 21 00 00 39 +R 00 00 01 00 02 05 13 00 +T 61 04 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T 66 04 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 6D 04 00 00 0A DD B6 0B CA A9 05 00 00 +R 00 00 01 00 00 09 01 00 +T 74 04 00 00 +R 00 00 01 00 +T 74 04 00 00 11 40 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 18 00 +T 7A 04 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T 81 04 00 00 F8 DD 74 F9 DD 75 FC DD 74 FD AF +R 00 00 01 00 +T 8C 04 00 00 DD 77 FA DD 77 FB +R 00 00 01 00 +T 92 04 00 00 +R 00 00 01 00 +T 92 04 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 9A 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T A1 04 00 00 75 FE DD 74 FF 7D A4 3C CA +R 00 00 01 00 +T AA 04 00 00 75 05 00 00 +R 00 00 01 00 00 04 01 00 +T AC 04 00 00 +R 00 00 01 00 +T AC 04 00 00 3E 0A DD AE FE DD B6 FF 20 5D +R 00 00 01 00 +T B6 04 00 00 +R 00 00 01 00 +T B6 04 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T C1 04 00 00 74 FD 2B 36 0D DD 6E FA DD 66 FB +R 00 00 01 00 +T CC 04 00 00 23 DD 75 FA DD 74 FB 3E 40 AD B4 +R 00 00 01 00 +T D7 04 00 00 20 3A +R 00 00 01 00 +T D9 04 00 00 +R 00 00 01 00 +T D9 04 00 00 DD 6E FA DD 66 FB E5 DD 4E F8 DD +R 00 00 01 00 +T E4 04 00 00 46 F9 21 02 00 39 5D 54 3E +R 00 00 01 00 +T ED 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T F2 04 00 00 00 00 00 00 E1 11 00 00 3E +R 00 00 01 00 02 04 01 00 +T F9 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T FE 04 00 00 00 00 00 00 DD 6E F8 DD 66 F9 DD +R 00 00 01 00 02 04 01 00 +T 07 05 00 00 75 FC DD 74 FD AF DD 77 FA DD 77 +R 00 00 01 00 +T 12 05 00 00 FB +R 00 00 01 00 +T 13 05 00 00 +R 00 00 01 00 +T 13 05 00 00 +R 00 00 01 00 +T 13 05 00 00 DD 46 FE DD 6E FC DD 66 FD 23 DD +R 00 00 01 00 +T 1E 05 00 00 75 FC DD 74 FD 2B 70 DD 6E FA DD +R 00 00 01 00 +T 29 05 00 00 66 FB 23 DD 75 FA DD 74 FB 3E 40 +R 00 00 01 00 +T 34 05 00 00 AD B4 20 3A +R 00 00 01 00 +T 38 05 00 00 +R 00 00 01 00 +T 38 05 00 00 DD 6E FA DD 66 FB E5 DD 4E F8 DD +R 00 00 01 00 +T 43 05 00 00 46 F9 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 4C 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 51 05 00 00 00 00 00 00 E1 11 00 00 3E +R 00 00 01 00 02 04 01 00 +T 58 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 5D 05 00 00 00 00 00 00 DD 6E F8 DD 66 F9 DD +R 00 00 01 00 02 04 01 00 +T 66 05 00 00 75 FC DD 74 FD AF DD 77 FA DD 77 +R 00 00 01 00 +T 71 05 00 00 FB +R 00 00 01 00 +T 72 05 00 00 +R 00 00 01 00 +T 72 05 00 00 C3 92 04 00 00 +R 00 00 01 00 00 05 01 00 +T 75 05 00 00 +R 00 00 01 00 +T 75 05 00 00 DD 7E FA DD B6 FB 28 1C +R 00 00 01 00 +T 7D 05 00 00 +R 00 00 01 00 +T 7D 05 00 00 DD 6E FA DD 66 FB E5 DD 4E F8 DD +R 00 00 01 00 +T 88 05 00 00 46 F9 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 91 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 96 05 00 00 00 00 00 00 E1 +R 00 00 01 00 02 04 01 00 +T 99 05 00 00 +R 00 00 01 00 +T 99 05 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T A1 05 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 0F 00 02 0A 01 00 +T A8 05 00 00 70 +R 00 00 01 00 +T A9 05 00 00 +R 00 00 01 00 +T A9 05 00 00 11 80 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 18 00 +T AF 05 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T B6 05 00 00 F8 DD 74 F9 +R 00 00 01 00 +T BA 05 00 00 +R 00 00 01 00 +T BA 05 00 00 DD 6E 02 DD 66 03 E5 21 80 00 E5 +R 00 00 01 00 +T C5 05 00 00 01 01 00 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T CF 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T D4 05 00 00 00 00 00 00 F1 F1 DD 75 FA DD 74 +R 00 00 01 00 02 04 01 00 +T DD 05 00 00 FB 7D B4 28 29 +R 00 00 01 00 +T E2 05 00 00 +R 00 00 01 00 +T E2 05 00 00 DD 6E FA DD 66 FB E5 DD 4E F8 DD +R 00 00 01 00 +T ED 05 00 00 46 F9 21 02 00 39 5D 54 3E +R 00 00 01 00 +T F6 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T FB 05 00 00 00 00 00 00 E1 11 00 00 3E +R 00 00 01 00 02 04 01 00 +T 02 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 07 06 00 00 00 00 00 00 18 AF +R 00 00 01 00 02 04 01 00 +T 0B 06 00 00 +R 00 00 01 00 +T 0B 06 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 13 06 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0F 00 02 0A 01 00 +T 19 06 00 00 +R 00 00 01 00 +T 19 06 00 00 21 00 00 39 4D 44 DD 5E 04 DD 56 +R 00 00 01 00 +T 24 06 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 2A 06 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 01 00 +T 31 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 09 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 65 70 65 61 74 20 73 6F 63 6B +R 00 00 02 00 +T 0B 00 00 00 65 74 20 25 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/fwrite.rel b/src/nos/lib/net_lib/fwrite.rel new file mode 100644 index 00000000..9984d6f6 --- /dev/null +++ b/src/nos/lib/net_lib/fwrite.rel @@ -0,0 +1,451 @@ +XL4 +H 2 areas 11 global symbols +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcnt Ref00000000 +S _fflush Ref00000000 +S __write Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __lseek Ref00000000 +S ?US_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 547 flags 0 +S _fwrite Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EC FF AF DD 77 FA +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 DD 77 FB DD 36 FC 01 DD 36 FD 00 +R 00 00 01 00 +T 14 00 00 00 AF DD 77 FE DD 77 FF DD 7E 0C DD +R 00 00 01 00 +T 1F 00 00 00 B6 0D 28 1A DD 6E 0C DD 66 0D 46 +R 00 00 01 00 +T 2A 00 00 00 23 66 68 01 AD DE A7 ED 42 20 08 +R 00 00 01 00 +T 35 00 00 00 DD 7E 04 DD B6 05 20 06 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 00 00 C3 44 05 00 00 +R 00 00 01 00 00 08 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 DD 6E 02 DD 66 03 DD 75 EE DD 74 +R 00 00 01 00 +T 4E 00 00 00 EF 3E 01 DD AE 0A DD B6 0B 20 0E +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 DD 6E 04 DD 66 05 DD 75 F2 DD 74 +R 00 00 01 00 +T 64 00 00 00 F3 18 15 +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 DD 4E 0A DD 46 0B DD 5E 04 DD 56 +R 00 00 01 00 +T 72 00 00 00 05 CD 00 00 00 00 DD 73 F2 DD 72 +R 00 00 01 00 02 06 0B 00 +T 7B 00 00 00 F3 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 21 0E 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 87 00 00 00 B7 C2 A2 01 00 00 21 10 00 DD 4E +R 00 00 01 00 00 06 01 00 +T 90 00 00 00 0C DD 46 0D 09 7E E6 04 47 23 7E +R 00 00 01 00 +T 9B 00 00 00 E6 00 B0 C2 A2 01 00 00 21 19 00 +R 00 00 01 00 00 08 01 00 +T A4 00 00 00 DD 4E 0C DD 46 0D 09 4E 23 46 DD +R 00 00 01 00 +T AF 00 00 00 6E F2 DD 66 F3 A7 ED 42 DA +R 00 00 01 00 +T B8 00 00 00 A2 01 00 00 +R 00 00 01 00 00 04 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T C2 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T C9 00 00 00 10 00 DD 4E 0C DD 46 0D 09 7E E6 +R 00 00 01 00 +T D4 00 00 00 08 47 23 7E E6 00 B0 28 26 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 21 02 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T E8 00 00 00 E5 21 08 00 DD 4E 0C DD 46 0D 09 +R 00 00 01 00 +T F3 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0D 00 +T F9 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 00 01 00 00 F1 18 2F +R 00 00 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 21 00 00 E5 21 0A 00 DD 4E 0C DD +R 00 00 01 00 +T 0E 01 00 00 46 0D 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 19 01 00 00 D5 21 08 00 DD 4E 0C DD 46 0D 09 +R 00 00 01 00 +T 24 01 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0D 00 +T 2A 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 31 01 00 00 F1 +R 00 00 01 00 +T 32 01 00 00 +R 00 00 01 00 +T 32 01 00 00 DD 6E F2 DD 66 F3 E5 DD 4E EE DD +R 00 00 01 00 +T 3D 01 00 00 46 EF 21 08 00 DD 5E 0C DD 56 0D +R 00 00 01 00 +T 48 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T 4F 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 56 01 00 00 75 F4 DD 74 F5 7D B4 28 16 +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 21 0A 00 DD 4E 0C DD 46 0D 09 DD +R 00 00 01 00 +T 6A 01 00 00 5E F4 DD 56 F5 01 00 00 CD +R 00 00 01 00 +T 73 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 08 00 +T 75 01 00 00 +R 00 00 01 00 +T 75 01 00 00 DD 6E F2 DD 66 F3 DD 4E F4 DD 46 +R 00 00 01 00 +T 80 01 00 00 F5 A7 ED 42 28 13 +R 00 00 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 DD 4E 04 DD 46 05 DD 5E F4 DD 56 +R 00 00 01 00 +T 91 01 00 00 F5 CD 00 00 00 00 EB C3 +R 00 00 01 00 02 06 0E 00 +T 97 01 00 00 44 05 00 00 +R 00 00 01 00 00 04 01 00 +T 99 01 00 00 +R 00 00 01 00 +T 99 01 00 00 DD 6E 0A DD 66 0B C3 44 05 00 00 +R 00 00 01 00 00 0B 01 00 +T A2 01 00 00 +R 00 00 01 00 +T A2 01 00 00 21 10 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T AD 01 00 00 E6 04 47 23 7E E6 00 B0 28 4C +R 00 00 01 00 +T B7 01 00 00 +R 00 00 01 00 +T B7 01 00 00 DD 6E F2 DD 66 F3 E5 0E 0A DD 5E +R 00 00 01 00 +T C2 01 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T C9 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 02 00 02 09 01 00 +T D0 01 00 00 75 FA DD 74 FB 7D B4 28 2A +R 00 00 01 00 +T D9 01 00 00 +R 00 00 01 00 +T D9 01 00 00 21 16 00 DD 4E 0C DD 46 0D 09 EB +R 00 00 01 00 +T E4 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T EA 01 00 00 00 00 00 00 DD 75 FC DD 74 FD 21 +R 00 00 01 00 02 04 01 00 +T F3 01 00 00 0F 00 09 46 05 05 20 08 +R 00 00 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 DD 7E F2 DD B6 F3 CA D3 04 00 00 +R 00 00 01 00 00 0B 01 00 +T 0C 02 00 00 +R 00 00 01 00 +T 0C 02 00 00 21 12 00 DD 4E 0C DD 46 0D 09 46 +R 00 00 01 00 +T 17 02 00 00 23 66 68 DD 75 EC DD 74 ED 7D B4 +R 00 00 01 00 +T 22 02 00 00 28 5C 21 0C 00 DD 4E EC DD 46 ED +R 00 00 01 00 +T 2D 02 00 00 09 56 23 66 6A DD 5E FC DD 56 FD +R 00 00 01 00 +T 38 02 00 00 19 EB 21 04 00 09 46 23 66 68 A7 +R 00 00 01 00 +T 43 02 00 00 ED 52 30 39 +R 00 00 01 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 4F 02 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 56 02 00 00 A4 3C 20 26 +R 00 00 01 00 +T 5A 02 00 00 +R 00 00 01 00 +T 5A 02 00 00 DD 4E 04 DD 46 05 DD 5E 0A DD 56 +R 00 00 01 00 +T 65 02 00 00 0B CD 00 00 00 00 DD 6E F2 DD 66 +R 00 00 01 00 02 06 0B 00 +T 6E 02 00 00 F3 A7 ED 52 EB DD 4E 04 DD 46 05 +R 00 00 01 00 +T 79 02 00 00 CD 00 00 00 00 EB C3 44 05 00 00 +R 00 00 01 00 02 05 0E 00 00 0B 01 00 +T 80 02 00 00 +R 00 00 01 00 +T 80 02 00 00 +R 00 00 01 00 +T 80 02 00 00 21 12 00 DD 4E 0C DD 46 0D 09 46 +R 00 00 01 00 +T 8B 02 00 00 23 66 68 DD 75 EC DD 74 ED 7D B4 +R 00 00 01 00 +T 96 02 00 00 20 70 +R 00 00 01 00 +T 98 02 00 00 +R 00 00 01 00 +T 98 02 00 00 DD 4E FC DD 46 FD 0B DD 5E FA DD +R 00 00 01 00 +T A3 02 00 00 56 FB CD 00 00 00 00 DD 6E F2 DD +R 00 00 01 00 02 07 0B 00 +T AC 02 00 00 66 F3 19 DD 75 F6 DD 74 F7 21 +R 00 00 01 00 +T B6 02 00 00 19 00 DD 4E 0C DD 46 0D 09 5E 23 +R 00 00 01 00 +T C1 02 00 00 56 DD 6E F6 DD 66 F7 A7 ED 52 30 +R 00 00 01 00 +T CC 02 00 00 0A 21 19 00 09 56 23 66 6A 18 06 +R 00 00 01 00 +T D7 02 00 00 +R 00 00 01 00 +T D7 02 00 00 DD 6E F6 DD 66 F7 +R 00 00 01 00 +T DD 02 00 00 +R 00 00 01 00 +T DD 02 00 00 DD 75 F6 DD 74 F7 21 12 00 DD 4E +R 00 00 01 00 +T E8 02 00 00 0C DD 46 0D 09 E5 DD 5E F6 DD 56 +R 00 00 01 00 +T F3 02 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T F9 02 00 00 CD 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 05 01 00 +T 02 03 00 00 DD 71 EC DD 70 ED +R 00 00 01 00 +T 08 03 00 00 +R 00 00 01 00 +T 08 03 00 00 21 10 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T 13 03 00 00 E6 04 47 23 7E E6 00 B0 CA +R 00 00 01 00 +T 1C 03 00 00 31 04 00 00 DD 7E FA DD B6 FB CA +R 00 00 01 00 00 04 01 00 +T 25 03 00 00 31 04 00 00 +R 00 00 01 00 00 04 01 00 +T 27 03 00 00 +R 00 00 01 00 +T 27 03 00 00 +R 00 00 01 00 +T 27 03 00 00 +R 00 00 01 00 +T 27 03 00 00 21 0A 00 DD 4E EC DD 46 ED 09 56 +R 00 00 01 00 +T 32 03 00 00 23 66 6A E5 21 0C 00 09 5E 23 56 +R 00 00 01 00 +T 3D 03 00 00 E1 19 DD 75 F0 DD 74 F1 21 0C 00 +R 00 00 01 00 +T 48 03 00 00 09 5E 23 56 21 04 00 09 46 23 66 +R 00 00 01 00 +T 53 03 00 00 68 A7 ED 52 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 5D 03 00 00 +R 00 00 01 00 +T 5D 03 00 00 DD 4E FC DD 46 FD DD 6E F8 DD 66 +R 00 00 01 00 +T 68 03 00 00 F9 CD 00 00 00 00 DA 0D 04 00 00 +R 00 00 01 00 02 06 0C 00 00 0B 01 00 +T 6F 03 00 00 DD 7E F2 DD B6 F3 CA 0D 04 00 00 +R 00 00 01 00 00 0B 01 00 +T 78 03 00 00 +R 00 00 01 00 +T 78 03 00 00 +R 00 00 01 00 +T 78 03 00 00 +R 00 00 01 00 +T 78 03 00 00 DD 6E EE DD 66 EF 7E FE 0A 20 4F +R 00 00 01 00 +T 83 03 00 00 +R 00 00 01 00 +T 83 03 00 00 DD 6E FC DD 66 FD E5 21 16 00 DD +R 00 00 01 00 +T 8E 03 00 00 4E 0C DD 46 0D 09 4D 44 DD 5E F0 +R 00 00 01 00 +T 99 03 00 00 DD 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T 9F 03 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T A6 03 00 00 04 00 39 7E DD 86 FC 77 23 7E DD +R 00 00 01 00 +T B1 03 00 00 8E FD 77 21 0C 00 39 7E DD 96 FC +R 00 00 01 00 +T BC 03 00 00 77 23 7E DD 9E FD 77 DD 6E FA DD +R 00 00 01 00 +T C7 03 00 00 66 FB 2B DD 75 FA DD 74 FB 18 23 +R 00 00 01 00 +T D2 03 00 00 +R 00 00 01 00 +T D2 03 00 00 DD 6E EE DD 66 EF 46 DD 6E F0 DD +R 00 00 01 00 +T DD 03 00 00 66 F1 23 DD 75 F0 DD 74 F1 2B 70 +R 00 00 01 00 +T E8 03 00 00 DD 6E F8 DD 66 F9 2B DD 75 F8 DD +R 00 00 01 00 +T F3 03 00 00 74 F9 +R 00 00 01 00 +T F5 03 00 00 +R 00 00 01 00 +T F5 03 00 00 DD 34 EE 20 03 DD 34 EF +R 00 00 01 00 +T FD 03 00 00 +R 00 00 01 00 +T FD 03 00 00 DD 6E F2 DD 66 F3 2B DD 75 F2 DD +R 00 00 01 00 +T 08 04 00 00 74 F3 C3 5D 03 00 00 +R 00 00 01 00 00 07 01 00 +T 0D 04 00 00 +R 00 00 01 00 +T 0D 04 00 00 21 0C 00 DD 4E EC DD 46 ED 09 E5 +R 00 00 01 00 +T 18 04 00 00 21 0A 00 09 4E 23 46 DD 6E F0 DD +R 00 00 01 00 +T 23 04 00 00 66 F1 A7 ED 42 4D 44 E1 71 23 70 +R 00 00 01 00 +T 2E 04 00 00 C3 D0 04 00 00 +R 00 00 01 00 00 05 01 00 +T 31 04 00 00 +R 00 00 01 00 +T 31 04 00 00 21 0C 00 DD 4E EC DD 46 ED 09 5E +R 00 00 01 00 +T 3C 04 00 00 23 56 21 04 00 09 7E 23 66 6F A7 +R 00 00 01 00 +T 47 04 00 00 ED 52 DD 5E F2 DD 56 F3 A7 ED 52 +R 00 00 01 00 +T 52 04 00 00 30 14 21 0C 00 09 5E 23 56 21 +R 00 00 01 00 +T 5C 04 00 00 04 00 09 7E 23 66 6F A7 ED 52 18 +R 00 00 01 00 +T 67 04 00 00 06 +R 00 00 01 00 +T 68 04 00 00 +R 00 00 01 00 +T 68 04 00 00 DD 6E F2 DD 66 F3 +R 00 00 01 00 +T 6E 04 00 00 +R 00 00 01 00 +T 6E 04 00 00 DD 75 F4 DD 74 F5 E5 DD 4E EE DD +R 00 00 01 00 +T 79 04 00 00 46 EF 21 0A 00 DD 5E EC DD 56 ED +R 00 00 01 00 +T 84 04 00 00 19 7E 23 66 6F E5 21 0C 00 19 5E +R 00 00 01 00 +T 8F 04 00 00 23 56 E1 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 97 04 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 9E 04 00 00 0C 00 DD 4E EC DD 46 ED 09 7E DD +R 00 00 01 00 +T A9 04 00 00 86 F4 77 23 7E DD 8E F5 77 21 +R 00 00 01 00 +T B3 04 00 00 02 00 39 7E DD 86 F4 77 23 7E DD +R 00 00 01 00 +T BE 04 00 00 8E F5 77 21 06 00 39 7E DD 96 F4 +R 00 00 01 00 +T C9 04 00 00 77 23 7E DD 9E F5 77 +R 00 00 01 00 +T D0 04 00 00 +R 00 00 01 00 +T D0 04 00 00 C3 03 02 00 00 +R 00 00 01 00 00 05 01 00 +T D3 04 00 00 +R 00 00 01 00 +T D3 04 00 00 21 0F 00 DD 4E 0C DD 46 0D 09 7E +R 00 00 01 00 +T DE 04 00 00 FE 03 28 24 21 0C 00 DD 4E EC DD +R 00 00 01 00 +T E9 04 00 00 46 ED 09 56 23 66 6A E5 21 04 00 +R 00 00 01 00 +T F4 04 00 00 09 4E 23 46 E1 A7 ED 42 28 08 DD +R 00 00 01 00 +T FF 04 00 00 7E FE DD B6 FF 28 38 +R 00 00 01 00 +T 06 05 00 00 +R 00 00 01 00 +T 06 05 00 00 +R 00 00 01 00 +T 06 05 00 00 +R 00 00 01 00 +T 06 05 00 00 DD 5E 0C DD 56 0D 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 0E 05 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 15 05 00 00 A4 3C 20 25 +R 00 00 01 00 +T 19 05 00 00 +R 00 00 01 00 +T 19 05 00 00 DD 4E 04 DD 46 05 DD 5E 0A DD 56 +R 00 00 01 00 +T 24 05 00 00 0B CD 00 00 00 00 DD 6E F2 DD 66 +R 00 00 01 00 02 06 0B 00 +T 2D 05 00 00 F3 A7 ED 52 EB DD 4E 04 DD 46 05 +R 00 00 01 00 +T 38 05 00 00 CD 00 00 00 00 EB 18 06 +R 00 00 01 00 02 05 0E 00 +T 3E 05 00 00 +R 00 00 01 00 +T 3E 05 00 00 +R 00 00 01 00 +T 3E 05 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 +T 44 05 00 00 +R 00 00 01 00 +T 44 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/net_lib/getopt.rel b/src/nos/lib/net_lib/getopt.rel new file mode 100644 index 00000000..ebb76147 --- /dev/null +++ b/src/nos/lib/net_lib/getopt.rel @@ -0,0 +1,301 @@ +XL4 +H 6 areas F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S _strcmp Ref00000000 +S .__.ABS. Def00000000 +S _write Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 281 flags 0 +S _getopt Def00000000 +A CSTR size 3A flags 0 +A UDATA0 size 4 flags 0 +S _optarg Def00000002 +S _optopt Def00000000 +A IDATA0 size 6 flags 0 +S _optind Def00000002 +S _opterr Def00000000 +A CDATA0 size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 2A +R 00 00 01 00 02 05 07 00 +T 06 00 00 00 04 00 00 00 3E 01 AD B4 20 66 +R 00 00 01 00 00 04 04 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 DD 4E 02 DD 46 03 2A 02 00 00 00 +R 00 00 01 00 00 0B 04 00 +T 17 00 00 00 CD 00 00 00 00 30 28 2A +R 00 00 01 00 02 05 08 00 +T 1D 00 00 00 02 00 00 00 29 DD 4E 04 DD 46 05 +R 00 00 01 00 00 04 04 00 +T 26 00 00 00 09 7E 23 66 6F 7E FE 2D 20 14 2A +R 00 00 01 00 +T 31 00 00 00 02 00 00 00 29 DD 4E 04 DD 46 05 +R 00 00 01 00 00 04 04 00 +T 3A 00 00 00 09 46 23 66 68 23 7E B7 20 06 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 FF FF C3 7E 02 00 00 +R 00 00 01 00 00 08 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 01 00 00 00 00 2A 02 00 00 00 29 +R 00 00 01 00 00 05 02 00 00 0A 04 00 +T 51 00 00 00 DD 5E 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 5C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 61 00 00 00 00 00 00 00 7D B4 20 0D +R 00 00 01 00 02 04 00 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 6E 00 00 00 21 FF FF C3 7E 02 00 00 +R 00 00 01 00 00 08 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T 7D 00 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T 85 00 00 00 04 00 00 00 09 4E 06 00 DD 71 FA +R 00 00 01 00 00 04 04 00 +T 8E 00 00 00 DD 70 FB ED 43 00 00 00 00 3E 3A +R 00 00 01 00 00 09 03 00 +T 97 00 00 00 DD AE FA DD B6 FB 28 1F DD 4E FA +R 00 00 01 00 +T A2 00 00 00 DD 46 FB DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T AC 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T B1 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 00 00 +T BA 00 00 00 B4 C2 57 01 00 00 +R 00 00 01 00 00 06 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 2A 00 00 00 00 7D B4 28 62 +R 00 00 01 00 00 05 04 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 DD 46 FA DD 70 FE DD 36 FF 0A DD +R 00 00 01 00 +T D0 00 00 00 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T D9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T DE 00 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 00 00 +T E7 00 00 00 4E 23 46 11 02 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T EF 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T F6 00 00 00 11 03 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 03 00 +T FC 00 00 00 00 00 00 00 CD 00 00 00 00 E5 01 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 03 01 00 00 03 00 00 00 11 02 00 3E +R 00 00 01 00 00 04 02 00 +T 09 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 0E 01 00 00 00 00 00 00 F1 21 02 00 E5 21 +R 00 00 01 00 02 04 00 00 +T 16 01 00 00 06 00 39 4D 44 11 02 00 3E +R 00 00 01 00 +T 1F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 24 01 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 00 00 +T 27 01 00 00 +R 00 00 01 00 +T 27 01 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T 30 01 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T 38 01 00 00 04 00 00 00 03 ED 43 04 00 00 00 +R 00 00 01 00 00 04 04 00 00 0B 04 00 +T 3F 01 00 00 09 7E B7 20 0D +R 00 00 01 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 4B 01 00 00 21 01 00 22 04 00 00 00 +R 00 00 01 00 00 08 04 00 +T 51 01 00 00 +R 00 00 01 00 +T 51 01 00 00 21 3F 00 C3 7E 02 00 00 +R 00 00 01 00 00 08 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 62 01 00 00 74 FD 7E FE 3A C2 48 02 00 00 +R 00 00 01 00 00 0A 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T 73 01 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T 7B 01 00 00 04 00 00 00 09 23 7E B7 28 20 +R 00 00 01 00 00 04 04 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 8A 01 00 00 2B 29 DD 4E 04 DD 46 05 09 46 23 +R 00 00 01 00 +T 95 01 00 00 66 68 ED 4B 04 00 00 00 09 23 22 +R 00 00 01 00 00 08 04 00 +T 9E 01 00 00 02 00 00 00 C3 40 02 00 00 +R 00 00 01 00 00 04 03 00 00 09 01 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T AA 01 00 00 DD 4E 02 DD 46 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T B3 01 00 00 38 74 +R 00 00 01 00 +T B5 01 00 00 +R 00 00 01 00 +T B5 01 00 00 2A 00 00 00 00 7D B4 28 62 +R 00 00 01 00 00 05 04 00 +T BC 01 00 00 +R 00 00 01 00 +T BC 01 00 00 DD 46 FA DD 70 FE DD 36 FF 0A DD +R 00 00 01 00 +T C7 01 00 00 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T D0 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T D5 01 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 00 00 +T DE 01 00 00 4E 23 46 11 02 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T E6 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T ED 01 00 00 11 18 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 03 00 +T F3 01 00 00 00 00 00 00 CD 00 00 00 00 E5 01 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T FA 01 00 00 18 00 00 00 11 02 00 3E +R 00 00 01 00 00 04 02 00 +T 00 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 05 02 00 00 00 00 00 00 F1 21 02 00 E5 21 +R 00 00 01 00 02 04 00 00 +T 0D 02 00 00 06 00 39 4D 44 11 02 00 3E +R 00 00 01 00 +T 16 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 1B 02 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 00 00 +T 1E 02 00 00 +R 00 00 01 00 +T 1E 02 00 00 21 01 00 22 04 00 00 00 21 3F 00 +R 00 00 01 00 00 08 04 00 +T 27 02 00 00 18 55 +R 00 00 01 00 +T 29 02 00 00 +R 00 00 01 00 +T 29 02 00 00 2A 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 30 02 00 00 2B 29 DD 4E 04 DD 46 05 09 46 23 +R 00 00 01 00 +T 3B 02 00 00 66 68 22 02 00 00 00 +R 00 00 01 00 00 07 03 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 21 01 00 22 04 00 00 00 18 30 +R 00 00 01 00 00 08 04 00 +T 48 02 00 00 +R 00 00 01 00 +T 48 02 00 00 2A 02 00 00 00 29 DD 4E 04 DD 46 +R 00 00 01 00 00 05 04 00 +T 51 02 00 00 05 09 46 23 66 68 ED 4B +R 00 00 01 00 +T 59 02 00 00 04 00 00 00 03 ED 43 04 00 00 00 +R 00 00 01 00 00 04 04 00 00 0B 04 00 +T 60 02 00 00 09 7E B7 20 0D +R 00 00 01 00 +T 65 02 00 00 +R 00 00 01 00 +T 65 02 00 00 21 01 00 22 04 00 00 00 2A +R 00 00 01 00 00 08 04 00 +T 6C 02 00 00 02 00 00 00 23 22 02 00 00 00 +R 00 00 01 00 00 04 04 00 00 0A 04 00 +T 72 02 00 00 +R 00 00 01 00 +T 72 02 00 00 21 00 00 22 02 00 00 00 +R 00 00 01 00 00 08 03 00 +T 78 02 00 00 +R 00 00 01 00 +T 78 02 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 +T 7E 02 00 00 +R 00 00 01 00 +T 7E 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2D 2D 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 3A 20 69 6C 6C 65 67 61 6C 20 6F +R 00 00 02 00 +T 0E 00 00 00 70 74 69 6F 6E 20 2D 2D 20 00 +R 00 00 02 00 +T 18 00 00 00 +R 00 00 02 00 +T 18 00 00 00 3A 20 6F 70 74 69 6F 6E 20 72 65 +R 00 00 02 00 +T 23 00 00 00 71 75 69 72 65 73 20 61 6E 20 61 +R 00 00 02 00 +T 2E 00 00 00 72 67 75 6D 65 6E 74 20 2D 2D 20 +R 00 00 02 00 +T 39 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 04 00 00 00 +R 00 00 04 00 +T 04 00 00 00 +R 00 00 04 00 +T 00 00 00 00 01 00 01 00 01 00 +R 00 00 05 00 diff --git a/src/nos/lib/net_lib/getpeername.rel b/src/nos/lib/net_lib/getpeername.rel new file mode 100644 index 00000000..8cc22c5c --- /dev/null +++ b/src/nos/lib/net_lib/getpeername.rel @@ -0,0 +1,92 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size CC flags 0 +S _getpeername Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 0C +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 26 00 00 00 C3 C9 00 00 00 +R 00 00 01 00 00 05 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 12 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 34 00 00 00 23 B6 20 0C +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 21 65 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 41 00 00 00 C3 C9 00 00 00 +R 00 00 01 00 00 05 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 DD 7E 04 DD B6 05 28 08 DD 7E 0A +R 00 00 01 00 +T 4F 00 00 00 DD B6 0B 20 0B +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 21 0E 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 5D 00 00 00 18 6A +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 21 14 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 6A 00 00 00 23 46 DD 6E 0A DD 66 0B 56 23 66 +R 00 00 01 00 +T 75 00 00 00 6A CD 00 00 00 00 30 0C DD 6E 0A +R 00 00 01 00 02 06 06 00 +T 7E 00 00 00 DD 66 0B 46 23 66 68 18 0E +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 21 14 00 DD 4E FE DD 46 FF 09 56 +R 00 00 01 00 +T 92 00 00 00 23 66 6A +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 E5 DD 6E 0A DD 66 0B C1 71 23 70 +R 00 00 01 00 +T A0 00 00 00 DD 6E 0A DD 66 0B 4E 23 46 C5 21 +R 00 00 01 00 +T AB 00 00 00 12 00 DD 4E FE DD 46 FF 09 4E 23 +R 00 00 01 00 +T B6 00 00 00 46 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T BE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T C3 00 00 00 00 00 00 00 F1 21 00 00 +R 00 00 01 00 02 04 00 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/gets.rel b/src/nos/lib/net_lib/gets.rel new file mode 100644 index 00000000..215bdf60 --- /dev/null +++ b/src/nos/lib/net_lib/gets.rel @@ -0,0 +1,70 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fgetc Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 75 flags 0 +S _gets Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 21 3E 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 03 00 +T 1A 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 1F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 26 00 00 00 FC DD 74 FD 7D A4 3C 20 05 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 21 00 00 18 3E +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 3E 0A DD AE FC DD B6 FD 20 02 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 18 1C +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 DD 7E 02 DD B6 03 28 12 +R 00 00 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 DD 46 FC DD 6E FE DD 66 FF 23 DD +R 00 00 01 00 +T 53 00 00 00 75 FE DD 74 FF 2B 70 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 18 B5 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 DD 7E 02 DD B6 03 28 08 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 6E FE DD 66 FF 36 00 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/getsockname.rel b/src/nos/lib/net_lib/getsockname.rel new file mode 100644 index 00000000..2a323b8e --- /dev/null +++ b/src/nos/lib/net_lib/getsockname.rel @@ -0,0 +1,102 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DF flags 0 +S _getsockname Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 0C +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 26 00 00 00 C3 DC 00 00 00 +R 00 00 01 00 00 05 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 7E 04 DD B6 05 28 08 DD 7E 0A +R 00 00 01 00 +T 34 00 00 00 DD B6 0B 20 0C +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 21 0E 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 42 00 00 00 C3 DC 00 00 00 +R 00 00 01 00 00 05 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 21 0E 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 50 00 00 00 23 B6 20 0F +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 6E 0A DD 66 0B AF 77 23 77 21 +R 00 00 01 00 +T 5F 00 00 00 00 00 18 79 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 21 0E 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 6E 00 00 00 23 B6 28 67 +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 21 10 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 7D 00 00 00 23 46 DD 6E 0A DD 66 0B 56 23 66 +R 00 00 01 00 +T 88 00 00 00 6A CD 00 00 00 00 30 0C DD 6E 0A +R 00 00 01 00 02 06 06 00 +T 91 00 00 00 DD 66 0B 46 23 66 68 18 0E +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 21 10 00 DD 4E FE DD 46 FF 09 56 +R 00 00 01 00 +T A5 00 00 00 23 66 6A +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 E5 DD 6E 0A DD 66 0B C1 71 23 70 +R 00 00 01 00 +T B3 00 00 00 DD 6E 0A DD 66 0B 4E 23 46 C5 21 +R 00 00 01 00 +T BE 00 00 00 0E 00 DD 4E FE DD 46 FF 09 4E 23 +R 00 00 01 00 +T C9 00 00 00 46 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T D1 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T D6 00 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 00 00 +T D9 00 00 00 +R 00 00 01 00 +T D9 00 00 00 21 00 00 +R 00 00 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/if_detach.rel b/src/nos/lib/net_lib/if_detach.rel new file mode 100644 index 00000000..5b9a24d8 --- /dev/null +++ b/src/nos/lib/net_lib/if_detach.rel @@ -0,0 +1,277 @@ +XL4 +H 2 areas F global symbols +S _Routes Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Ifaces Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _R_default Ref00000000 +S .__.ABS. Def00000000 +S _killproc Ref00000000 +S _free Ref00000000 +S _Encap Ref00000000 +S _Loopback Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _rt_drop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 29A flags 0 +S _if_detach Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF 21 +R 00 00 01 00 02 05 0A 00 +T 06 00 00 00 00 00 00 00 DD 4E 02 DD 46 03 A7 +R 00 00 01 00 02 04 09 00 +T 0F 00 00 00 ED 42 28 0E 21 00 00 00 00 DD 4E +R 00 00 01 00 02 09 08 00 +T 18 00 00 00 02 DD 46 03 A7 ED 42 20 06 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 FF FF C3 97 02 00 00 +R 00 00 01 00 00 08 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 2A 12 00 00 00 DD 4E 02 DD 46 03 +R 00 00 01 00 02 05 04 00 +T 30 00 00 00 A7 ED 42 20 13 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 21 00 00 E5 01 00 00 11 00 00 3E +R 00 00 01 00 +T 40 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 45 00 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 01 07 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T 5A 00 00 00 AC 67 ED 42 D2 15 01 00 00 +R 00 00 01 00 00 09 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 01 20 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 73 00 00 00 AC 67 ED 42 D2 0A 01 00 00 +R 00 00 01 00 00 09 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 01 0E 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T 84 00 00 00 00 00 00 00 DD 6E FC DD 66 FD 29 +R 00 00 01 00 02 04 0B 00 +T 8D 00 00 00 19 01 00 00 00 00 09 46 23 66 68 +R 00 00 01 00 02 06 00 00 +T 96 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 DD 7E F8 DD B6 F9 28 5B +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 DD 6E F8 DD 66 F9 23 23 46 23 66 +R 00 00 01 00 +T AF 00 00 00 68 DD 75 FA DD 74 FB 21 12 00 DD +R 00 00 01 00 +T BA 00 00 00 4E F8 DD 46 F9 09 46 23 66 68 DD +R 00 00 01 00 +T C5 00 00 00 4E 02 DD 46 03 A7 ED 42 20 22 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 21 08 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T DA 00 00 00 23 56 D5 21 04 00 09 5E 23 56 23 +R 00 00 01 00 +T E5 00 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0D 00 +T EB 00 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 DD 6E FA DD 66 FB DD 75 F8 DD 74 +R 00 00 01 00 +T FC 00 00 00 F9 18 9D +R 00 00 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 C3 68 00 00 00 +R 00 00 01 00 00 05 01 00 +T 0A 01 00 00 +R 00 00 01 00 +T 0A 01 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 12 01 00 00 +R 00 00 01 00 +T 12 01 00 00 C3 4F 00 00 00 +R 00 00 01 00 00 05 01 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 2A 00 00 00 00 DD 75 F6 DD 74 F7 +R 00 00 01 00 02 05 02 00 +T 1E 01 00 00 +R 00 00 01 00 +T 1E 01 00 00 DD 7E F6 DD B6 F7 28 39 +R 00 00 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 21 16 00 DD 4E F6 DD 46 F7 09 46 +R 00 00 01 00 +T 31 01 00 00 23 66 68 DD 4E 02 DD 46 03 A7 ED +R 00 00 01 00 +T 3C 01 00 00 42 20 0E +R 00 00 01 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 21 16 00 DD 4E F6 DD 46 F7 09 AF +R 00 00 01 00 +T 4A 01 00 00 77 23 77 +R 00 00 01 00 +T 4D 01 00 00 +R 00 00 01 00 +T 4D 01 00 00 DD 6E F6 DD 66 F7 46 23 66 68 DD +R 00 00 01 00 +T 58 01 00 00 75 F6 DD 74 F7 18 BF +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 21 34 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 6A 01 00 00 23 B6 23 B6 28 1A +R 00 00 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 DD 5E 02 DD 56 03 21 34 00 DD 4E +R 00 00 01 00 +T 7B 01 00 00 02 DD 46 03 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 86 01 00 00 60 CD 00 00 00 00 +R 00 00 01 00 02 06 01 00 +T 8A 01 00 00 +R 00 00 01 00 +T 8A 01 00 00 21 18 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 95 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 9A 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T A0 01 00 00 1A 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T A8 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T AF 01 00 00 1C 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T B7 01 00 00 21 00 00 00 00 CD 00 00 00 00 03 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T BE 01 00 00 03 69 60 7E 23 B6 28 13 +R 00 00 01 00 +T C6 01 00 00 +R 00 00 01 00 +T C6 01 00 00 DD 6E 02 DD 66 03 23 23 5E 23 56 +R 00 00 01 00 +T D1 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T D7 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T D9 01 00 00 +R 00 00 01 00 +T D9 01 00 00 21 37 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T E4 01 00 00 23 B6 28 15 +R 00 00 01 00 +T E8 01 00 00 +R 00 00 01 00 +T E8 01 00 00 21 37 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T F3 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T F8 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T FD 01 00 00 +R 00 00 01 00 +T FD 01 00 00 2A 00 00 00 00 DD 4E 02 DD 46 03 +R 00 00 01 00 02 05 02 00 +T 06 02 00 00 A7 ED 42 20 0F +R 00 00 01 00 +T 0B 02 00 00 +R 00 00 01 00 +T 0B 02 00 00 DD 6E 02 DD 66 03 46 23 66 68 22 +R 00 00 01 00 +T 16 02 00 00 00 00 00 00 18 6C +R 00 00 01 00 02 04 02 00 +T 1A 02 00 00 +R 00 00 01 00 +T 1A 02 00 00 2A 00 00 00 00 DD 75 F6 DD 74 F7 +R 00 00 01 00 02 05 02 00 +T 23 02 00 00 +R 00 00 01 00 +T 23 02 00 00 DD 7E F6 DD B6 F7 28 29 +R 00 00 01 00 +T 2B 02 00 00 +R 00 00 01 00 +T 2B 02 00 00 DD 6E F6 DD 66 F7 46 23 66 68 DD +R 00 00 01 00 +T 36 02 00 00 4E 02 DD 46 03 A7 ED 42 20 02 +R 00 00 01 00 +T 40 02 00 00 +R 00 00 01 00 +T 40 02 00 00 18 12 +R 00 00 01 00 +T 42 02 00 00 +R 00 00 01 00 +T 42 02 00 00 DD 6E F6 DD 66 F7 46 23 66 68 DD +R 00 00 01 00 +T 4D 02 00 00 75 F6 DD 74 F7 18 CF +R 00 00 01 00 +T 54 02 00 00 +R 00 00 01 00 +T 54 02 00 00 DD 7E F6 DD B6 F7 28 2A DD 6E F6 +R 00 00 01 00 +T 5F 02 00 00 DD 66 F7 46 23 66 68 DD 4E 02 DD +R 00 00 01 00 +T 6A 02 00 00 46 03 A7 ED 42 20 15 +R 00 00 01 00 +T 71 02 00 00 +R 00 00 01 00 +T 71 02 00 00 +R 00 00 01 00 +T 71 02 00 00 +R 00 00 01 00 +T 71 02 00 00 DD 6E 02 DD 66 03 46 23 66 68 E5 +R 00 00 01 00 +T 7C 02 00 00 DD 6E F6 DD 66 F7 C1 71 23 70 +R 00 00 01 00 +T 86 02 00 00 +R 00 00 01 00 +T 86 02 00 00 +R 00 00 01 00 +T 86 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 8E 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T 95 02 00 00 00 00 +R 00 00 01 00 +T 97 02 00 00 +R 00 00 01 00 +T 97 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/if_lookup.rel b/src/nos/lib/net_lib/if_lookup.rel new file mode 100644 index 00000000..5e543994 --- /dev/null +++ b/src/nos/lib/net_lib/if_lookup.rel @@ -0,0 +1,46 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Ifaces Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strcmp Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 50 flags 0 +S _if_lookup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 01 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 DD 7E FE DD B6 FF 28 31 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 4E 02 DD 46 03 DD 6E FE DD 66 +R 00 00 01 00 +T 21 00 00 00 FF 23 23 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 29 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 30 00 00 00 B4 20 02 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 18 12 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T 40 00 00 00 75 FE DD 74 FF 18 C7 +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/net_lib/if_name.rel b/src/nos/lib/net_lib/if_name.rel new file mode 100644 index 00000000..86cac6fb --- /dev/null +++ b/src/nos/lib/net_lib/if_name.rel @@ -0,0 +1,46 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strcat Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6F flags 0 +S _if_name Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 66 03 23 23 5E 23 56 3E +R 00 00 01 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 16 00 00 00 00 00 00 00 E5 59 50 3E +R 00 00 01 00 02 04 00 00 +T 1C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 21 00 00 00 00 00 00 00 4D 44 E1 09 EB 13 3E +R 00 00 01 00 02 04 00 00 +T 2A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 2F 00 00 00 00 00 00 00 DD 75 FE DD 74 FF DD +R 00 00 01 00 02 04 00 00 +T 38 00 00 00 4E 02 DD 46 03 03 03 69 60 4E 23 +R 00 00 01 00 +T 43 00 00 00 46 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 4B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 50 00 00 00 00 00 00 00 DD 4E 04 DD 46 05 DD +R 00 00 01 00 02 04 00 00 +T 59 00 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 61 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 68 00 00 00 FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 09 02 00 diff --git a/src/nos/lib/net_lib/if_tx.rel b/src/nos/lib/net_lib/if_tx.rel new file mode 100644 index 00000000..947de853 --- /dev/null +++ b/src/nos/lib/net_lib/if_tx.rel @@ -0,0 +1,97 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _pullup Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _dequeue Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size FD flags 0 +S _if_tx Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 71 F8 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 70 F9 +R 00 00 01 00 +T 0B 00 00 00 +R 00 00 01 00 +T 0B 00 00 00 +R 00 00 01 00 +T 0B 00 00 00 21 1E 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 16 00 00 00 23 B6 20 15 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 1E 00 DD 4E F8 DD 46 F9 09 EB +R 00 00 01 00 +T 25 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 2B 00 00 00 00 00 00 00 18 DC +R 00 00 01 00 02 04 00 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 21 22 00 DD 4E F8 DD 46 F9 09 36 +R 00 00 01 00 +T 3A 00 00 00 01 23 36 00 21 1E 00 09 EB 3E +R 00 00 01 00 +T 44 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 49 00 00 00 00 00 00 00 DD 75 F6 DD 74 F7 11 +R 00 00 01 00 02 04 00 00 +T 52 00 00 00 05 00 D5 21 06 00 39 4D 44 21 +R 00 00 01 00 +T 5C 00 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 64 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 6B 00 00 00 26 00 DD 4E F8 DD 46 F9 09 7E 23 +R 00 00 01 00 +T 76 00 00 00 B6 23 B6 28 2F DD 5E F8 DD 56 F9 +R 00 00 01 00 +T 81 00 00 00 21 26 00 DD 4E F8 DD 46 F9 09 4E +R 00 00 01 00 +T 8C 00 00 00 23 46 23 7E 69 60 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 95 00 00 00 7D A4 3C 20 10 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T A2 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T A9 00 00 00 37 +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 DD 6E FA E5 DD 6E FD DD 66 FE E5 +R 00 00 01 00 +T B5 00 00 00 DD 6E FB DD 66 FC E5 DD 4E F8 DD +R 00 00 01 00 +T C0 00 00 00 46 F9 C5 21 08 00 39 5D 54 21 +R 00 00 01 00 +T CA 00 00 00 3F 00 DD 4E F8 DD 46 F9 09 4E 23 +R 00 00 01 00 +T D5 00 00 00 46 23 7E 69 60 C1 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T DE 00 00 00 F1 F1 F1 +R 00 00 01 00 +T E1 00 00 00 +R 00 00 01 00 +T E1 00 00 00 21 22 00 DD 4E F8 DD 46 F9 09 AF +R 00 00 01 00 +T EC 00 00 00 77 23 77 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T F4 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T FB 00 00 00 0B 00 00 00 +R 00 00 01 00 00 04 01 00 diff --git a/src/nos/lib/net_lib/ifbroad.rel b/src/nos/lib/net_lib/ifbroad.rel new file mode 100644 index 00000000..971b8c78 --- /dev/null +++ b/src/nos/lib/net_lib/ifbroad.rel @@ -0,0 +1,74 @@ +XL4 +H 2 areas A global symbols +S _resolve Ref00000000 +S _rt_blookup Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _rt_add Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _rt_drop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DC flags 0 +S _ifbroad Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 11 20 00 +R 00 00 01 00 +T 14 00 00 00 D5 11 08 00 19 5E 23 56 23 4E 23 +R 00 00 01 00 +T 1F 00 00 00 46 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 25 00 00 00 CD 00 00 00 00 F1 DD 75 FE DD 74 +R 00 00 01 00 02 05 02 00 +T 2E 00 00 00 FF 7D B4 28 37 21 12 00 DD 4E FE +R 00 00 01 00 +T 39 00 00 00 DD 46 FF 09 46 23 66 68 DD 4E FC +R 00 00 01 00 +T 44 00 00 00 DD 46 FD A7 ED 42 20 1E +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 21 20 00 E5 21 08 00 DD 4E FC DD +R 00 00 01 00 +T 57 00 00 00 46 FD 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 62 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 67 00 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 02 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 75 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T 7B 00 00 00 00 00 00 00 E5 21 08 00 DD 5E FC +R 00 00 01 00 02 04 02 00 +T 84 00 00 00 DD 56 FD 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 8F 00 00 00 70 0E 01 C5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 9A 00 00 00 E5 21 00 00 E5 21 01 00 E5 DD 6E +R 00 00 01 00 +T A5 00 00 00 FC DD 66 FD E5 21 00 00 E5 21 +R 00 00 01 00 +T AF 00 00 00 00 00 E5 21 20 00 E5 21 08 00 DD +R 00 00 01 00 +T BA 00 00 00 4E FC DD 46 FD 09 5E 23 56 23 4E +R 00 00 01 00 +T C5 00 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T CA 00 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 06 00 02 09 02 00 +T D1 00 00 00 12 00 39 F9 EB 21 00 00 C3 +R 00 00 01 00 +T DA 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 diff --git a/src/nos/lib/net_lib/ifencap.rel b/src/nos/lib/net_lib/ifencap.rel new file mode 100644 index 00000000..ca615662 --- /dev/null +++ b/src/nos/lib/net_lib/ifencap.rel @@ -0,0 +1,45 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___026d_4f54_Encapsulation_20mod Ref00000000 +S _setencap Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 53 flags 0 +S _ifencap Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 03 03 69 +R 00 00 01 00 +T 14 00 00 00 60 4E 23 46 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 1F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 24 00 00 00 00 00 00 00 7D B4 28 23 +R 00 00 01 00 02 04 00 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 35 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 01 00 +T 3A 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 06 00 +T 40 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 47 00 00 00 F1 21 01 00 18 03 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 21 00 00 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/ifforw.rel b/src/nos/lib/net_lib/ifforw.rel new file mode 100644 index 00000000..9937c3e9 --- /dev/null +++ b/src/nos/lib/net_lib/ifforw.rel @@ -0,0 +1,37 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _if_lookup Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 52 flags 0 +S _ifforw Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 11 16 00 +R 00 00 01 00 +T 14 00 00 00 19 E5 03 03 0A 5F 03 0A 57 3E +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 23 00 00 00 00 00 00 00 4D 44 E1 71 23 70 21 +R 00 00 01 00 02 04 00 00 +T 2C 00 00 00 16 00 DD 4E FE DD 46 FF 09 56 23 +R 00 00 01 00 +T 37 00 00 00 66 6A A7 ED 42 20 0E +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 21 16 00 DD 4E FE DD 46 FF 09 AF +R 00 00 01 00 +T 49 00 00 00 77 23 77 +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 02 00 diff --git a/src/nos/lib/net_lib/ifipaddr.rel b/src/nos/lib/net_lib/ifipaddr.rel new file mode 100644 index 00000000..1377ab55 --- /dev/null +++ b/src/nos/lib/net_lib/ifipaddr.rel @@ -0,0 +1,27 @@ +XL4 +H 2 areas 7 global symbols +S _resolve Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 39 flags 0 +S _ifipaddr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 03 03 0A +R 00 00 01 00 +T 14 00 00 00 5F 03 0A 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 00 00 +T 1B 00 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 22 00 00 00 04 00 DD 5E FE DD 56 FF 19 D1 73 +R 00 00 01 00 +T 2D 00 00 00 23 72 23 71 23 70 21 00 00 C3 +R 00 00 01 00 +T 37 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/net_lib/iflinkadr.rel b/src/nos/lib/net_lib/iflinkadr.rel new file mode 100644 index 00000000..3ab42d29 --- /dev/null +++ b/src/nos/lib/net_lib/iflinkadr.rel @@ -0,0 +1,80 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0215_24ca_Can_27t_20set_20lin Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D1 flags 0 +S _iflinkadr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 11 3D 00 +R 00 00 01 00 +T 14 00 00 00 19 7E 23 B6 28 19 21 3D 00 DD 4E +R 00 00 01 00 +T 1F 00 00 00 FE DD 46 FF 09 46 23 66 68 01 +R 00 00 01 00 +T 29 00 00 00 0B 00 09 7E 23 B6 23 B6 20 17 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 39 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 3F 00 00 00 CD 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 05 00 00 +T 48 00 00 00 CE 00 00 00 +R 00 00 01 00 00 04 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 21 37 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 55 00 00 00 23 B6 28 15 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 21 37 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 64 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 69 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 21 37 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 79 00 00 00 21 3D 00 09 56 23 66 6A 11 10 00 +R 00 00 01 00 +T 84 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 06 00 +T 8B 00 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 92 00 00 00 73 23 72 DD 6E 04 DD 66 05 23 23 +R 00 00 01 00 +T 9D 00 00 00 4E 23 46 C5 21 37 00 DD 5E FE DD +R 00 00 01 00 +T A8 00 00 00 56 FF 19 5E 23 56 21 3D 00 DD 4E +R 00 00 01 00 +T B3 00 00 00 FE DD 46 FF 09 46 23 66 68 01 +R 00 00 01 00 +T BD 00 00 00 0B 00 09 4E 23 46 23 7E 69 60 C1 +R 00 00 01 00 +T C8 00 00 00 CD 00 00 00 00 21 00 00 +R 00 00 01 00 02 05 00 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/ifmtu.rel b/src/nos/lib/net_lib/ifmtu.rel new file mode 100644 index 00000000..276d3105 --- /dev/null +++ b/src/nos/lib/net_lib/ifmtu.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S _ifmtu Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 11 10 00 +R 00 00 01 00 +T 14 00 00 00 19 E5 03 03 0A 5F 03 0A 57 3E +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 23 00 00 00 00 00 00 00 4D 44 E1 71 23 70 21 +R 00 00 01 00 02 04 00 00 +T 2C 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/net_lib/ifnetmsk.rel b/src/nos/lib/net_lib/ifnetmsk.rel new file mode 100644 index 00000000..6ad23662 --- /dev/null +++ b/src/nos/lib/net_lib/ifnetmsk.rel @@ -0,0 +1,82 @@ +XL4 +H 2 areas C global symbols +S _rt_blookup Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?L_AND_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _rt_add Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _htol Ref00000000 +S _rt_drop Ref00000000 +S _mask2width Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10B flags 0 +S _ifnetmsk Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 11 0C 00 +R 00 00 01 00 +T 14 00 00 00 19 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 1D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 22 00 00 00 00 00 00 00 E5 21 0C 00 DD 4E FC +R 00 00 01 00 02 04 01 00 +T 2B 00 00 00 DD 46 FD 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 36 00 00 00 C5 D5 21 04 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T 41 00 00 00 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 4B 00 00 00 00 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 0A 00 00 +T 51 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 58 00 00 00 75 FE DD 74 FF 7D B4 28 22 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 21 08 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 6C 00 00 00 23 56 D5 21 04 00 09 5E 23 56 23 +R 00 00 01 00 +T 77 00 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T 7D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 8E 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 94 00 00 00 00 00 00 00 E5 21 0C 00 DD 5E FC +R 00 00 01 00 02 04 01 00 +T 9D 00 00 00 DD 56 FD 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T A8 00 00 00 70 0E 00 C5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T B3 00 00 00 E5 21 00 00 E5 21 00 00 E5 DD 6E +R 00 00 01 00 +T BE 00 00 00 FC DD 66 FD E5 21 00 00 E5 21 +R 00 00 01 00 +T C8 00 00 00 00 00 E5 21 0C 00 DD 4E FC DD 46 +R 00 00 01 00 +T D3 00 00 00 FD 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T DD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T E2 00 00 00 00 00 00 00 E5 21 04 00 DD 4E FC +R 00 00 01 00 02 04 01 00 +T EB 00 00 00 DD 46 FD 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T F6 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T FC 00 00 00 00 00 00 00 EB 21 12 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T 05 01 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 03 00 diff --git a/src/nos/lib/net_lib/ifrxbuf.rel b/src/nos/lib/net_lib/ifrxbuf.rel new file mode 100644 index 00000000..85dd2d73 --- /dev/null +++ b/src/nos/lib/net_lib/ifrxbuf.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S _ifrxbuf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 02 00 +T 07 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/net_lib/iftxqlen.rel b/src/nos/lib/net_lib/iftxqlen.rel new file mode 100644 index 00000000..be92dd0d --- /dev/null +++ b/src/nos/lib/net_lib/iftxqlen.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _setint Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___039c_d175_TX_20queue_20limit Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S _iftxqlen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF C5 DD 4E +R 00 00 01 00 +T 14 00 00 00 02 DD 46 03 C5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 05 00 +T 1C 00 00 00 01 00 00 00 00 C5 01 20 00 09 EB +R 00 00 01 00 02 05 05 00 +T 25 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 2B 00 00 00 00 00 00 00 F1 F1 F1 F1 21 00 00 +R 00 00 01 00 02 04 00 00 +T 34 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/ismyaddr.rel b/src/nos/lib/net_lib/ismyaddr.rel new file mode 100644 index 00000000..70e52ff6 --- /dev/null +++ b/src/nos/lib/net_lib/ismyaddr.rel @@ -0,0 +1,57 @@ +XL4 +H 2 areas 7 global symbols +S _Ifaces Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _Loopback Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6F flags 0 +S _ismyaddr Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 B6 03 DD B6 04 DD B6 05 20 05 +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 21 00 00 00 00 18 54 +R 00 00 01 00 02 05 03 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 2A 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 00 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 DD 7E FE DD B6 FF 28 3D +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 34 00 00 00 23 46 23 5E 23 56 69 60 DD 4E 02 +R 00 00 01 00 +T 3F 00 00 00 DD 46 03 A7 ED 42 20 0D EB DD 4E +R 00 00 01 00 +T 4A 00 00 00 04 DD 46 05 ED 42 20 02 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 18 12 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T 5F 00 00 00 75 FE DD 74 FF 18 BB +R 00 00 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/kernel.rel b/src/nos/lib/net_lib/kernel.rel new file mode 100644 index 00000000..2dd25afc --- /dev/null +++ b/src/nos/lib/net_lib/kernel.rel @@ -0,0 +1,1302 @@ +XL4 +H 6 areas 3C global symbols +S ___04fa_2254_newproc_20_22_25s_2 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _stop_timer Ref00000000 +S _chkstk Ref00000000 +S _acrlf Ref00000000 +S _istate Ref00000000 +S ___stack_base Ref00000000 +S _intcontext Ref00000000 +S _giveup Ref00000000 +S ?L_INC_L03 Ref00000000 +S ___stack_limit Ref00000000 +S _setjmp Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _phash Ref00000000 +S _abyte Ref00000000 +S __dprintf Ref00000000 +S _strdupw Ref00000000 +S _amess Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _stktrace Ref00000000 +S _psetup Ref00000000 +S _pullup Ref00000000 +S _free Ref00000000 +S _dirps Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _callocw Ref00000000 +S _enable Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _dequeue Ref00000000 +S _fdup Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _longjmp Ref00000000 +S _pushdown Ref00000000 +S _malloc Ref00000000 +S _enqueue Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C26 flags 0 +S _suspend Def000003DA +S _killer Def0000036B +S _resume Def0000042E +S _killself Def0000032B +S _alert Def0000045B +S _mainproc Def00000000 +S _kwait Def000004B7 +S _killproc Def00000218 +S _ksignal Def00000712 +S _chname Def00000A31 +S _newproc Def0000006D +A CSTR size 25 flags 0 +A UDATA0 size 376 flags 0 +S _Waittab Def00000004 +S _Ksig Def00000028 +S _Kdebug Def00000372 +S _Curproc Def00000000 +S _Susptab Def00000024 +S _Rdytab Def00000002 +A IDATA0 size 2 flags 0 +S _Stkchk Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 01 4B 00 11 +R 00 00 01 00 02 05 1F 00 +T 09 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1D 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1D 00 02 09 01 00 +T 15 00 00 00 FE DD 74 FF 01 2A 00 09 E5 DD 5E +R 00 00 01 00 +T 20 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 12 00 +T 27 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 12 00 02 09 01 00 +T 2E 00 00 00 E1 71 23 70 21 26 00 DD 4E FE DD +R 00 00 01 00 +T 39 00 00 00 46 FF 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 08 07 00 +T 40 00 00 00 00 00 00 00 21 28 00 09 E5 11 +R 00 00 01 00 8B 04 07 00 +T 47 00 00 00 00 00 00 00 21 00 00 00 00 A7 ED +R 00 00 01 00 02 04 07 00 02 09 0B 00 +T 4E 00 00 00 52 EB E1 73 23 72 21 04 00 09 CB +R 00 00 01 00 +T 59 00 00 00 8E 21 04 00 09 CB 86 ED 43 +R 00 00 01 00 +T 62 00 00 00 00 00 00 00 DD 6E FE DD 66 FF C3 +R 00 00 01 00 00 04 03 00 +T 6B 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0E 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 1F 00 +T 76 00 00 00 66 03 E5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 08 00 00 +T 7D 00 00 00 00 00 00 00 E5 21 01 00 E5 3E +R 00 00 01 00 02 04 00 00 +T 85 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 8A 00 00 00 00 00 00 00 F1 F1 F1 F1 2A +R 00 00 01 00 02 04 01 00 +T 91 00 00 00 00 00 00 00 7D B4 28 08 +R 00 00 01 00 00 04 04 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 9D 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 01 4B 00 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T A7 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 1D 00 02 0A 01 00 +T AE 00 00 00 75 FC DD 74 FD 01 2A 00 09 E5 DD +R 00 00 01 00 +T B9 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 12 00 +T C1 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 12 00 02 09 01 00 +T C8 00 00 00 E1 71 23 70 21 28 00 DD 4E FC DD +R 00 00 01 00 +T D3 00 00 00 46 FD 09 DD 5E 04 DD 56 05 73 23 +R 00 00 01 00 +T DE 00 00 00 72 21 26 00 09 E5 EB 29 EB 3E +R 00 00 01 00 +T E8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 27 00 02 09 27 00 +T ED 00 00 00 00 00 00 00 4D 44 E1 71 23 70 79 +R 00 00 01 00 02 04 01 00 +T F6 00 00 00 B0 20 25 +R 00 00 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 21 2A 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 04 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1A 00 +T 09 01 00 00 00 00 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 02 04 1A 00 02 09 01 00 +T 10 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T 16 01 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 01 00 +T 1C 01 00 00 15 02 00 00 +R 00 00 01 00 00 04 01 00 +T 1E 01 00 00 +R 00 00 01 00 +T 1E 01 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 30 01 00 00 FF A7 ED 42 30 29 +R 00 00 01 00 +T 36 01 00 00 +R 00 00 01 00 +T 36 01 00 00 21 26 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 41 01 00 00 23 66 68 E5 DD 6E FE DD 66 FF 29 +R 00 00 01 00 +T 4C 01 00 00 4D 44 E1 09 36 AA 23 36 55 DD 34 +R 00 00 01 00 +T 57 01 00 00 FE 20 03 DD 34 FF +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 18 C6 +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 21 04 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 6A 01 00 00 CB 14 46 28 04 CB E6 18 02 +R 00 00 01 00 +T 73 01 00 00 +R 00 00 01 00 +T 73 01 00 00 CB A6 +R 00 00 01 00 +T 75 01 00 00 +R 00 00 01 00 +T 75 01 00 00 21 42 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 80 01 00 00 5E 0E DD 56 0F 73 23 72 21 44 00 +R 00 00 01 00 +T 8B 01 00 00 09 DD 5E 10 DD 56 11 73 23 72 21 +R 00 00 01 00 +T 96 01 00 00 46 00 09 DD 5E 12 DD 56 13 73 23 +R 00 00 01 00 +T A1 01 00 00 72 21 48 00 09 DD 7E 0C DD 5E 0A +R 00 00 01 00 +T AC 01 00 00 DD 56 0B 73 23 72 23 77 59 50 3E +R 00 00 01 00 +T B7 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T BC 01 00 00 00 00 00 00 21 3E 00 DD 4E FC DD +R 00 00 01 00 02 04 01 00 +T C5 01 00 00 46 FD 09 E5 21 3E 00 ED 5B +R 00 00 01 00 +T CE 01 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 00 04 03 00 +T D5 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 21 00 02 09 21 00 +T DA 01 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T E2 01 00 00 40 00 09 E5 21 40 00 ED 5B +R 00 00 01 00 +T EB 01 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 00 04 03 00 +T F2 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 21 00 02 09 21 00 +T F7 01 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T FF 01 00 00 04 00 09 CB 8E 21 04 00 09 CB 86 +R 00 00 01 00 +T 0A 02 00 00 59 50 CD 32 0B 00 00 DD 6E FC DD +R 00 00 01 00 00 07 01 00 +T 13 02 00 00 66 FD +R 00 00 01 00 +T 15 02 00 00 +R 00 00 01 00 +T 15 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 18 02 00 00 +R 00 00 01 00 +T 18 02 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 1F 00 +T 21 02 00 00 B6 03 20 03 +R 00 00 01 00 +T 25 02 00 00 +R 00 00 01 00 +T 25 02 00 00 C3 28 03 00 00 +R 00 00 01 00 00 05 01 00 +T 28 02 00 00 +R 00 00 01 00 +T 28 02 00 00 2A 00 00 00 00 DD 4E 02 DD 46 03 +R 00 00 01 00 00 05 03 00 +T 31 02 00 00 A7 ED 42 20 08 +R 00 00 01 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 3E 2B 03 00 00 21 2B 03 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 3C 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 3E 02 00 00 +R 00 00 01 00 +T 3E 02 00 00 21 3E 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 49 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 29 00 +T 4E 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 29 00 02 09 01 00 +T 54 02 00 00 40 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 29 00 +T 5C 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 29 00 02 0A 01 00 +T 63 02 00 00 2E 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 6A 02 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 70 02 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 79 02 00 00 12 07 00 00 21 12 07 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 7E 02 00 00 00 00 00 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 02 04 01 00 +T 87 02 00 00 61 0A 00 00 21 04 00 DD 4E 02 DD +R 00 00 01 00 00 04 01 00 +T 90 02 00 00 46 03 09 7E E6 10 47 23 7E E6 00 +R 00 00 01 00 +T 9B 02 00 00 B0 28 5C +R 00 00 01 00 +T 9E 02 00 00 +R 00 00 01 00 +T 9E 02 00 00 21 44 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T A9 02 00 00 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T B2 02 00 00 +R 00 00 01 00 +T B2 02 00 00 21 42 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T BD 02 00 00 23 46 0B 70 2B 71 03 79 B0 28 1D +R 00 00 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 DD 6E FE DD 66 FF 4D 44 03 03 DD +R 00 00 01 00 +T D3 02 00 00 71 FE DD 70 FF 5E 23 56 3E +R 00 00 01 00 +T DC 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T E1 02 00 00 00 00 00 00 18 CD +R 00 00 01 00 02 04 01 00 +T E5 02 00 00 +R 00 00 01 00 +T E5 02 00 00 21 44 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T F0 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1A 00 +T F5 02 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 1A 00 02 09 01 00 +T FA 02 00 00 +R 00 00 01 00 +T FA 02 00 00 21 2A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 05 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1A 00 +T 0A 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1A 00 02 09 01 00 +T 10 03 00 00 26 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1A 00 +T 18 03 00 00 21 00 00 00 00 CD 00 00 00 00 59 +R 00 00 01 00 02 05 1A 00 02 0A 01 00 +T 1F 03 00 00 50 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 25 03 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 28 03 00 00 +R 00 00 01 00 +T 28 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 2B 03 00 00 +R 00 00 01 00 +T 2B 03 00 00 CD 00 00 00 00 FE FF AF DD 77 FE +R 00 00 01 00 02 05 1F 00 +T 34 03 00 00 DD 77 FF 21 02 00 E5 01 +R 00 00 01 00 +T 3C 03 00 00 00 00 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 00 04 03 00 +T 45 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 26 00 02 09 26 00 +T 4A 03 00 00 00 00 00 00 E1 21 00 00 39 4D 44 +R 00 00 01 00 02 04 01 00 +T 53 03 00 00 11 26 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 03 00 2B 0A 28 00 +T 59 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 28 00 02 09 01 00 +T 5E 03 00 00 +R 00 00 01 00 +T 5E 03 00 00 11 00 00 3E B7 04 00 00 21 +R 00 00 01 00 29 08 01 00 +T 64 03 00 00 B7 04 00 00 CD 00 00 00 00 18 F3 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 6B 03 00 00 +R 00 00 01 00 +T 6B 03 00 00 CD 00 00 00 00 FC FF +R 00 00 01 00 02 05 1F 00 +T 70 03 00 00 +R 00 00 01 00 +T 70 03 00 00 +R 00 00 01 00 +T 70 03 00 00 +R 00 00 01 00 +T 70 03 00 00 2A 26 00 00 00 7D B4 20 0D +R 00 00 01 00 00 05 03 00 +T 77 03 00 00 +R 00 00 01 00 +T 77 03 00 00 11 26 00 00 00 3E B7 04 00 00 21 +R 00 00 01 00 00 05 03 00 29 0A 01 00 +T 7D 03 00 00 B7 04 00 00 CD 00 00 00 00 18 EC +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 84 03 00 00 +R 00 00 01 00 +T 84 03 00 00 11 26 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 03 00 2B 0A 20 00 +T 8A 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 20 00 02 09 01 00 +T 91 03 00 00 FE DD 74 FF 01 02 00 C5 21 02 00 +R 00 00 01 00 +T 9C 03 00 00 39 4D 44 21 04 00 39 5D 54 3E +R 00 00 01 00 +T A6 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T AB 03 00 00 00 00 00 00 F1 21 02 00 39 5D 54 +R 00 00 01 00 02 04 01 00 +T B4 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 23 00 02 0A 23 00 +T BA 03 00 00 00 00 00 00 2A 00 00 00 00 DD 4E +R 00 00 01 00 02 04 01 00 00 09 03 00 +T C1 03 00 00 FC DD 46 FD A7 ED 42 28 0E +R 00 00 01 00 +T CA 03 00 00 +R 00 00 01 00 +T CA 03 00 00 DD 5E FC DD 56 FD 3E 18 02 00 00 +R 00 00 01 00 29 0B 01 00 +T D2 03 00 00 21 18 02 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 02 0A 01 00 +T D8 03 00 00 +R 00 00 01 00 +T D8 03 00 00 18 96 +R 00 00 01 00 +T DA 03 00 00 +R 00 00 01 00 +T DA 03 00 00 CD 00 00 00 00 7B B2 20 02 +R 00 00 01 00 02 05 1C 00 +T E1 03 00 00 +R 00 00 01 00 +T E1 03 00 00 18 48 +R 00 00 01 00 +T E3 03 00 00 +R 00 00 01 00 +T E3 03 00 00 2A 00 00 00 00 DD 4E 02 DD 46 03 +R 00 00 01 00 00 05 03 00 +T EC 03 00 00 A7 ED 42 28 09 +R 00 00 01 00 +T F1 03 00 00 +R 00 00 01 00 +T F1 03 00 00 DD 5E 02 DD 56 03 CD 61 0A 00 00 +R 00 00 01 00 00 0B 01 00 +T FA 03 00 00 +R 00 00 01 00 +T FA 03 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 05 04 00 00 F6 01 77 23 7E F6 00 77 2A +R 00 00 01 00 +T 0E 04 00 00 00 00 00 00 A7 ED 42 28 0B +R 00 00 01 00 00 04 03 00 +T 15 04 00 00 +R 00 00 01 00 +T 15 04 00 00 DD 5E 02 DD 56 03 CD 32 0B 00 00 +R 00 00 01 00 00 0B 01 00 +T 1E 04 00 00 18 0B +R 00 00 01 00 +T 20 04 00 00 +R 00 00 01 00 +T 20 04 00 00 11 00 00 3E B7 04 00 00 21 +R 00 00 01 00 29 08 01 00 +T 26 04 00 00 B7 04 00 00 CD 00 00 00 00 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 2B 04 00 00 +R 00 00 01 00 +T 2B 04 00 00 +R 00 00 01 00 +T 2B 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 2E 04 00 00 +R 00 00 01 00 +T 2E 04 00 00 CD 00 00 00 00 7B B2 20 02 +R 00 00 01 00 02 05 1C 00 +T 35 04 00 00 +R 00 00 01 00 +T 35 04 00 00 18 21 +R 00 00 01 00 +T 37 04 00 00 +R 00 00 01 00 +T 37 04 00 00 DD 5E 02 DD 56 03 CD 61 0A 00 00 +R 00 00 01 00 00 0B 01 00 +T 40 04 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 4B 04 00 00 E6 FE 77 23 7E E6 FF 77 59 50 CD +R 00 00 01 00 +T 56 04 00 00 32 0B 00 00 +R 00 00 01 00 00 04 01 00 +T 58 04 00 00 +R 00 00 01 00 +T 58 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 5B 04 00 00 +R 00 00 01 00 +T 5B 04 00 00 CD 00 00 00 00 7B B2 20 02 +R 00 00 01 00 02 05 1C 00 +T 62 04 00 00 +R 00 00 01 00 +T 62 04 00 00 18 50 +R 00 00 01 00 +T 64 04 00 00 +R 00 00 01 00 +T 64 04 00 00 2A 00 00 00 00 DD 4E 02 DD 46 03 +R 00 00 01 00 00 05 03 00 +T 6D 04 00 00 A7 ED 42 28 09 +R 00 00 01 00 +T 72 04 00 00 +R 00 00 01 00 +T 72 04 00 00 DD 5E 02 DD 56 03 CD 61 0A 00 00 +R 00 00 01 00 00 0B 01 00 +T 7B 04 00 00 +R 00 00 01 00 +T 7B 04 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 86 04 00 00 E6 FD 77 23 7E E6 FF 77 21 2C 00 +R 00 00 01 00 +T 91 04 00 00 09 DD 5E 04 DD 56 05 73 23 72 21 +R 00 00 01 00 +T 9C 04 00 00 24 00 09 AF 77 23 77 2A +R 00 00 01 00 +T A4 04 00 00 00 00 00 00 A7 ED 42 28 09 +R 00 00 01 00 00 04 03 00 +T AB 04 00 00 +R 00 00 01 00 +T AB 04 00 00 DD 5E 02 DD 56 03 CD 32 0B 00 00 +R 00 00 01 00 00 0B 01 00 +T B4 04 00 00 +R 00 00 01 00 +T B4 04 00 00 +R 00 00 01 00 +T B4 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T B7 04 00 00 +R 00 00 01 00 +T B7 04 00 00 CD 00 00 00 00 FA FF 3E +R 00 00 01 00 02 05 1F 00 +T BD 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T C2 04 00 00 00 00 00 00 7D B4 20 25 +R 00 00 01 00 02 04 01 00 +T C8 04 00 00 +R 00 00 01 00 +T C8 04 00 00 21 2A 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 00 09 03 00 +T D1 04 00 00 23 46 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 00 08 02 00 +T D9 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T DE 04 00 00 00 00 00 00 F1 F1 11 00 00 3E +R 00 00 01 00 02 04 01 00 +T E6 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T EB 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T ED 04 00 00 +R 00 00 01 00 +T ED 04 00 00 2A 66 03 00 00 ED 4B 68 03 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T F4 04 00 00 CD 00 00 00 00 22 66 03 00 00 ED +R 00 00 01 00 02 05 0A 00 00 0A 03 00 +T FB 04 00 00 43 68 03 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 03 00 2B 0A 08 00 +T 01 05 00 00 00 00 00 00 CD 00 00 00 00 3E 01 +R 00 00 01 00 02 04 08 00 02 09 01 00 +T 08 05 00 00 AD B4 20 17 +R 00 00 01 00 +T 0C 05 00 00 +R 00 00 01 00 +T 0C 05 00 00 2A 6E 03 00 00 ED 4B 70 03 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 13 05 00 00 CD 00 00 00 00 22 6E 03 00 00 ED +R 00 00 01 00 02 05 0A 00 00 0A 03 00 +T 1A 05 00 00 43 70 03 00 00 21 00 00 C3 +R 00 00 01 00 00 05 03 00 +T 21 05 00 00 0F 07 00 00 +R 00 00 01 00 00 04 01 00 +T 23 05 00 00 +R 00 00 01 00 +T 23 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 29 05 00 00 00 00 00 00 DD 75 FE DD 74 FF 3E +R 00 00 01 00 02 04 01 00 +T 32 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1E 00 02 09 1E 00 +T 37 05 00 00 00 00 00 00 2A 00 00 00 00 7D B4 +R 00 00 01 00 02 04 01 00 00 09 04 00 +T 3E 05 00 00 28 08 +R 00 00 01 00 +T 40 05 00 00 +R 00 00 01 00 +T 40 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 46 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 48 05 00 00 +R 00 00 01 00 +T 48 05 00 00 DD 7E 02 DD B6 03 28 29 +R 00 00 01 00 +T 50 05 00 00 +R 00 00 01 00 +T 50 05 00 00 21 24 00 ED 4B 00 00 00 00 09 DD +R 00 00 01 00 00 09 03 00 +T 59 05 00 00 5E 02 DD 56 03 73 23 72 21 04 00 +R 00 00 01 00 +T 64 05 00 00 ED 4B 00 00 00 00 09 7E F6 02 77 +R 00 00 01 00 00 06 03 00 +T 6D 05 00 00 23 7E F6 00 77 ED 5B 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 76 05 00 00 CD 32 0B 00 00 +R 00 00 01 00 00 05 01 00 +T 79 05 00 00 +R 00 00 01 00 +T 79 05 00 00 CD C1 07 00 00 DD 7E 02 DD B6 03 +R 00 00 01 00 00 05 01 00 +T 82 05 00 00 20 33 +R 00 00 01 00 +T 84 05 00 00 +R 00 00 01 00 +T 84 05 00 00 2A 02 00 00 00 7D B4 20 25 +R 00 00 01 00 00 05 03 00 +T 8B 05 00 00 +R 00 00 01 00 +T 8B 05 00 00 2A 6A 03 00 00 ED 4B 6C 03 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 92 05 00 00 CD 00 00 00 00 22 6A 03 00 00 ED +R 00 00 01 00 02 05 0A 00 00 0A 03 00 +T 99 05 00 00 43 6C 03 00 00 DD 5E FE DD 56 FF +R 00 00 01 00 00 05 03 00 +T A2 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T A8 05 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 01 00 +T AE 05 00 00 0F 07 00 00 +R 00 00 01 00 00 04 01 00 +T B0 05 00 00 +R 00 00 01 00 +T B0 05 00 00 ED 5B 00 00 00 00 CD 32 0B 00 00 +R 00 00 01 00 00 06 03 00 00 0B 01 00 +T B7 05 00 00 +R 00 00 01 00 +T B7 05 00 00 2A 02 00 00 00 7D B4 20 25 +R 00 00 01 00 00 05 03 00 +T BE 05 00 00 +R 00 00 01 00 +T BE 05 00 00 2A 72 03 00 00 7D B4 28 0A +R 00 00 01 00 00 05 03 00 +T C5 05 00 00 +R 00 00 01 00 +T C5 05 00 00 1E 2E 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 10 00 +T CA 05 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T CF 05 00 00 +R 00 00 01 00 +T CF 05 00 00 +R 00 00 01 00 +T CF 05 00 00 2A 02 00 00 00 7D B4 20 0D +R 00 00 01 00 00 05 03 00 +T D6 05 00 00 +R 00 00 01 00 +T D6 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T DC 05 00 00 00 00 00 00 CD C1 07 00 00 18 EC +R 00 00 01 00 02 04 01 00 00 09 01 00 +T E3 05 00 00 +R 00 00 01 00 +T E3 05 00 00 +R 00 00 01 00 +T E3 05 00 00 2A 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 00 05 03 00 +T EC 05 00 00 2A 02 00 00 00 22 00 00 00 00 EB +R 00 00 01 00 00 05 03 00 00 0A 03 00 +T F3 05 00 00 CD 61 0A 00 00 2A 72 03 00 00 7D +R 00 00 01 00 00 05 01 00 00 0A 03 00 +T FA 05 00 00 B4 28 25 +R 00 00 01 00 +T FD 05 00 00 +R 00 00 01 00 +T FD 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 03 06 00 00 00 00 00 00 21 2A 00 ED 4B +R 00 00 01 00 02 04 01 00 +T 0A 06 00 00 00 00 00 00 09 5E 23 56 3E +R 00 00 01 00 00 04 03 00 +T 11 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 16 06 00 00 00 00 00 00 1E 20 3E 00 00 00 00 +R 00 00 01 00 02 04 01 00 2B 0B 10 00 +T 1C 06 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 10 00 02 0A 01 00 +T 22 06 00 00 +R 00 00 01 00 +T 22 06 00 00 21 04 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 2D 06 00 00 E6 FB 77 23 7E E6 FF 77 DD 7E FE +R 00 00 01 00 +T 38 06 00 00 DD B6 FF 28 13 +R 00 00 01 00 +T 3D 06 00 00 +R 00 00 01 00 +T 3D 06 00 00 21 04 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 48 06 00 00 F6 04 77 23 7E F6 00 77 +R 00 00 01 00 +T 50 06 00 00 +R 00 00 01 00 +T 50 06 00 00 21 06 00 DD 4E FA DD 46 FB 09 EB +R 00 00 01 00 +T 5B 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T 61 06 00 00 00 00 00 00 7D B4 20 2C +R 00 00 01 00 02 04 01 00 +T 67 06 00 00 +R 00 00 01 00 +T 67 06 00 00 21 04 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 00 09 03 00 +T 70 06 00 00 0F 0F E6 01 16 00 5F 3E +R 00 00 01 00 +T 78 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 7D 06 00 00 00 00 00 00 01 01 00 21 06 00 ED +R 00 00 01 00 02 04 01 00 +T 86 06 00 00 5B 00 00 00 00 19 EB 3E +R 00 00 01 00 00 05 03 00 +T 8C 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 25 00 02 09 25 00 +T 91 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 93 06 00 00 +R 00 00 01 00 +T 93 06 00 00 21 2C 00 ED 4B 00 00 00 00 09 56 +R 00 00 01 00 00 09 03 00 +T 9C 06 00 00 23 66 6A DD 75 FC DD 74 FD 21 +R 00 00 01 00 +T A6 06 00 00 2C 00 09 AF 77 23 77 21 04 00 ED +R 00 00 01 00 +T B1 06 00 00 4B 00 00 00 00 09 7E 0F 0F E6 01 +R 00 00 01 00 00 05 03 00 +T BA 06 00 00 16 00 5F 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T C0 06 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T C6 06 00 00 04 00 09 7E E6 08 47 23 7E E6 00 +R 00 00 01 00 +T D1 06 00 00 B0 28 35 21 22 00 ED 4B +R 00 00 01 00 +T D9 06 00 00 00 00 00 00 09 46 23 66 68 DD 4E +R 00 00 01 00 00 04 03 00 +T E2 06 00 00 FC DD 46 FD A7 ED 42 20 1E +R 00 00 01 00 +T EB 06 00 00 +R 00 00 01 00 +T EB 06 00 00 +R 00 00 01 00 +T EB 06 00 00 +R 00 00 01 00 +T EB 06 00 00 1E 70 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 10 00 +T F0 06 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T F6 06 00 00 01 00 21 14 00 ED 5B 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T FF 06 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 25 00 +T 04 07 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 25 00 02 09 01 00 +T 09 07 00 00 +R 00 00 01 00 +T 09 07 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 0F 07 00 00 +R 00 00 01 00 +T 0F 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 12 07 00 00 +R 00 00 01 00 +T 12 07 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 1C 00 2B 0A 06 00 +T 18 07 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 1F 07 00 00 28 15 +R 00 00 01 00 +T 21 07 00 00 +R 00 00 01 00 +T 21 07 00 00 CD C1 07 00 00 DD 4E 04 DD 46 05 +R 00 00 01 00 00 05 01 00 +T 2A 07 00 00 DD 5E 02 DD 56 03 CD 5A 08 00 00 +R 00 00 01 00 00 0B 01 00 +T 33 07 00 00 C3 BE 07 00 00 +R 00 00 01 00 00 05 01 00 +T 36 07 00 00 +R 00 00 01 00 +T 36 07 00 00 2A 62 03 00 00 ED 4B 64 03 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 3D 07 00 00 CD 00 00 00 00 22 62 03 00 00 ED +R 00 00 01 00 02 05 0A 00 00 0A 03 00 +T 44 07 00 00 43 64 03 00 00 2A 74 03 00 00 DD +R 00 00 01 00 00 05 03 00 00 0A 03 00 +T 4B 07 00 00 4E 02 DD 46 03 A7 ED 42 20 1A 2A +R 00 00 01 00 +T 56 07 00 00 4C 03 00 00 7D B4 28 13 +R 00 00 01 00 00 04 03 00 +T 5C 07 00 00 +R 00 00 01 00 +T 5C 07 00 00 +R 00 00 01 00 +T 5C 07 00 00 +R 00 00 01 00 +T 5C 07 00 00 2A 50 03 00 00 ED 4B 52 03 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 63 07 00 00 CD 00 00 00 00 22 50 03 00 00 ED +R 00 00 01 00 02 05 0A 00 00 0A 03 00 +T 6A 07 00 00 43 52 03 00 00 18 4F +R 00 00 01 00 00 05 03 00 +T 6F 07 00 00 +R 00 00 01 00 +T 6F 07 00 00 2A 4C 03 00 00 3E C8 AD B4 20 09 +R 00 00 01 00 00 05 03 00 +T 78 07 00 00 +R 00 00 01 00 +T 78 07 00 00 2A 54 03 00 00 23 22 54 03 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 7F 07 00 00 18 3D +R 00 00 01 00 +T 81 07 00 00 +R 00 00 01 00 +T 81 07 00 00 2A 48 03 00 00 DD 4E 02 DD 46 03 +R 00 00 01 00 00 05 03 00 +T 8A 07 00 00 71 23 70 ED 43 74 03 00 00 2A +R 00 00 01 00 00 09 03 00 +T 92 07 00 00 48 03 00 00 23 23 DD 4E 04 DD 46 +R 00 00 01 00 00 04 03 00 +T 9B 07 00 00 05 71 23 70 01 48 03 00 00 2A +R 00 00 01 00 00 09 03 00 +T A3 07 00 00 48 03 00 00 23 23 23 23 22 +R 00 00 01 00 00 04 03 00 +T AA 07 00 00 48 03 00 00 A7 ED 42 38 06 +R 00 00 01 00 00 04 03 00 +T B1 07 00 00 +R 00 00 01 00 +T B1 07 00 00 21 28 00 00 00 22 48 03 00 00 +R 00 00 01 00 00 05 03 00 00 0A 03 00 +T B7 07 00 00 +R 00 00 01 00 +T B7 07 00 00 2A 4C 03 00 00 23 22 4C 03 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T BE 07 00 00 +R 00 00 01 00 +T BE 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T C1 07 00 00 +R 00 00 01 00 +T C1 07 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 1F 00 +T CA 07 00 00 DD 77 FB +R 00 00 01 00 +T CD 07 00 00 +R 00 00 01 00 +T CD 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1B 00 02 0A 1B 00 +T D3 07 00 00 00 00 00 00 DD 75 FE DD 74 FF 2A +R 00 00 01 00 02 04 01 00 +T DC 07 00 00 4C 03 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 00 04 03 00 +T E5 07 00 00 B4 28 07 +R 00 00 01 00 +T E8 07 00 00 +R 00 00 01 00 +T E8 07 00 00 2A 4C 03 00 00 2B 22 4C 03 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T EF 07 00 00 +R 00 00 01 00 +T EF 07 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T F7 07 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 01 00 +T FE 07 00 00 7E FC DD B6 FD 20 02 +R 00 00 01 00 +T 05 08 00 00 +R 00 00 01 00 +T 05 08 00 00 18 33 +R 00 00 01 00 +T 07 08 00 00 +R 00 00 01 00 +T 07 08 00 00 2A 4A 03 00 00 23 23 4E 23 46 2A +R 00 00 01 00 00 05 03 00 +T 10 08 00 00 4A 03 00 00 5E 23 56 CD +R 00 00 01 00 00 04 03 00 +T 16 08 00 00 5A 08 00 00 01 48 03 00 00 2A +R 00 00 01 00 00 04 01 00 00 09 03 00 +T 1C 08 00 00 4A 03 00 00 23 23 23 23 22 +R 00 00 01 00 00 04 03 00 +T 23 08 00 00 4A 03 00 00 A7 ED 42 38 06 +R 00 00 01 00 00 04 03 00 +T 2A 08 00 00 +R 00 00 01 00 +T 2A 08 00 00 21 28 00 00 00 22 4A 03 00 00 +R 00 00 01 00 00 05 03 00 00 0A 03 00 +T 30 08 00 00 +R 00 00 01 00 +T 30 08 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 38 08 00 00 +R 00 00 01 00 +T 38 08 00 00 18 93 +R 00 00 01 00 +T 3A 08 00 00 +R 00 00 01 00 +T 3A 08 00 00 2A 4E 03 00 00 DD 4E FA DD 46 FB +R 00 00 01 00 00 05 03 00 +T 43 08 00 00 CD 00 00 00 00 30 09 +R 00 00 01 00 02 05 22 00 +T 48 08 00 00 +R 00 00 01 00 +T 48 08 00 00 DD 6E FA DD 66 FB 22 4E 03 00 00 +R 00 00 01 00 00 0B 03 00 +T 51 08 00 00 +R 00 00 01 00 +T 51 08 00 00 DD 6E FA DD 66 FB C3 00 00 00 00 +R 00 00 01 00 02 0B 14 00 +T 5A 08 00 00 +R 00 00 01 00 +T 5A 08 00 00 CD 00 00 00 00 F8 FF AF DD 77 FE +R 00 00 01 00 02 05 1F 00 +T 63 08 00 00 DD 77 FF 2A 56 03 00 00 ED 4B +R 00 00 01 00 00 08 03 00 +T 6B 08 00 00 58 03 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 03 00 02 09 0A 00 +T 71 08 00 00 56 03 00 00 ED 43 58 03 00 00 2A +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T 78 08 00 00 00 00 00 00 7D B4 28 08 +R 00 00 01 00 00 04 04 00 +T 7E 08 00 00 +R 00 00 01 00 +T 7E 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 84 08 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 86 08 00 00 +R 00 00 01 00 +T 86 08 00 00 DD 7E 02 DD B6 03 20 14 +R 00 00 01 00 +T 8E 08 00 00 +R 00 00 01 00 +T 8E 08 00 00 2A 5E 03 00 00 ED 4B 60 03 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 95 08 00 00 CD 00 00 00 00 22 5E 03 00 00 ED +R 00 00 01 00 02 05 0A 00 00 0A 03 00 +T 9C 08 00 00 43 60 03 00 00 C3 2E 0A 00 00 +R 00 00 01 00 00 05 03 00 00 0A 01 00 +T A2 08 00 00 +R 00 00 01 00 +T A2 08 00 00 DD 7E 04 DD B6 05 20 08 +R 00 00 01 00 +T AA 08 00 00 +R 00 00 01 00 +T AA 08 00 00 DD 36 04 FF DD 36 05 FF +R 00 00 01 00 +T B2 08 00 00 +R 00 00 01 00 +T B2 08 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T BA 08 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0F 00 02 0A 01 00 +T C1 08 00 00 75 FC DD 74 FD 29 01 04 00 00 00 +R 00 00 01 00 00 0B 03 00 +T CA 08 00 00 09 46 23 66 68 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T D5 08 00 00 +R 00 00 01 00 +T D5 08 00 00 DD 7E 04 DD B6 05 CA 67 09 00 00 +R 00 00 01 00 00 0B 01 00 +T DE 08 00 00 DD 7E F8 DD B6 F9 CA 67 09 00 00 +R 00 00 01 00 00 0B 01 00 +T E7 08 00 00 +R 00 00 01 00 +T E7 08 00 00 +R 00 00 01 00 +T E7 08 00 00 +R 00 00 01 00 +T E7 08 00 00 DD 6E F8 DD 66 F9 23 23 46 23 66 +R 00 00 01 00 +T F2 08 00 00 68 DD 75 FA DD 74 FB 21 24 00 DD +R 00 00 01 00 +T FD 08 00 00 4E F8 DD 46 F9 09 46 23 66 68 DD +R 00 00 01 00 +T 08 09 00 00 4E 02 DD 46 03 A7 ED 42 20 46 +R 00 00 01 00 +T 12 09 00 00 +R 00 00 01 00 +T 12 09 00 00 DD 5E F8 DD 56 F9 CD 61 0A 00 00 +R 00 00 01 00 00 0B 01 00 +T 1B 09 00 00 21 04 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 26 09 00 00 E6 FD 77 23 7E E6 FF 77 21 2C 00 +R 00 00 01 00 +T 31 09 00 00 09 AF 77 23 77 21 24 00 09 AF 77 +R 00 00 01 00 +T 3C 09 00 00 23 77 59 50 CD 32 0B 00 00 DD 6E +R 00 00 01 00 00 09 01 00 +T 45 09 00 00 04 DD 66 05 2B DD 75 04 DD 74 05 +R 00 00 01 00 +T 50 09 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 58 09 00 00 +R 00 00 01 00 +T 58 09 00 00 +R 00 00 01 00 +T 58 09 00 00 DD 6E FA DD 66 FB DD 75 F8 DD 74 +R 00 00 01 00 +T 63 09 00 00 F9 C3 D5 08 00 00 +R 00 00 01 00 00 06 01 00 +T 67 09 00 00 +R 00 00 01 00 +T 67 09 00 00 2A 24 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 00 05 03 00 +T 70 09 00 00 +R 00 00 01 00 +T 70 09 00 00 DD 7E 04 DD B6 05 CA 02 0A 00 00 +R 00 00 01 00 00 0B 01 00 +T 79 09 00 00 DD 7E F8 DD B6 F9 CA 02 0A 00 00 +R 00 00 01 00 00 0B 01 00 +T 82 09 00 00 +R 00 00 01 00 +T 82 09 00 00 +R 00 00 01 00 +T 82 09 00 00 +R 00 00 01 00 +T 82 09 00 00 DD 6E F8 DD 66 F9 23 23 46 23 66 +R 00 00 01 00 +T 8D 09 00 00 68 DD 75 FA DD 74 FB 21 24 00 DD +R 00 00 01 00 +T 98 09 00 00 4E F8 DD 46 F9 09 46 23 66 68 DD +R 00 00 01 00 +T A3 09 00 00 4E 02 DD 46 03 A7 ED 42 20 46 +R 00 00 01 00 +T AD 09 00 00 +R 00 00 01 00 +T AD 09 00 00 DD 5E F8 DD 56 F9 CD 61 0A 00 00 +R 00 00 01 00 00 0B 01 00 +T B6 09 00 00 21 04 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T C1 09 00 00 E6 FD 77 23 7E E6 FF 77 21 24 00 +R 00 00 01 00 +T CC 09 00 00 09 AF 77 23 77 21 2C 00 09 AF 77 +R 00 00 01 00 +T D7 09 00 00 23 77 59 50 CD 32 0B 00 00 DD 6E +R 00 00 01 00 00 09 01 00 +T E0 09 00 00 04 DD 66 05 2B DD 75 04 DD 74 05 +R 00 00 01 00 +T EB 09 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T F3 09 00 00 +R 00 00 01 00 +T F3 09 00 00 +R 00 00 01 00 +T F3 09 00 00 DD 6E FA DD 66 FB DD 75 F8 DD 74 +R 00 00 01 00 +T FE 09 00 00 F9 C3 70 09 00 00 +R 00 00 01 00 00 06 01 00 +T 02 0A 00 00 +R 00 00 01 00 +T 02 0A 00 00 DD 7E FE DD B6 FF 20 13 +R 00 00 01 00 +T 0A 0A 00 00 +R 00 00 01 00 +T 0A 0A 00 00 2A 5E 03 00 00 ED 4B 60 03 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 11 0A 00 00 CD 00 00 00 00 22 5E 03 00 00 ED +R 00 00 01 00 02 05 0A 00 00 0A 03 00 +T 18 0A 00 00 43 60 03 00 00 18 11 +R 00 00 01 00 00 05 03 00 +T 1D 0A 00 00 +R 00 00 01 00 +T 1D 0A 00 00 21 5A 03 00 00 DD 5E FE DD 56 FF +R 00 00 01 00 00 05 03 00 +T 26 0A 00 00 7A 07 9F 4F 41 CD 00 00 00 00 +R 00 00 01 00 02 0A 15 00 +T 2E 0A 00 00 +R 00 00 01 00 +T 2E 0A 00 00 +R 00 00 01 00 +T 2E 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 14 00 +T 31 0A 00 00 +R 00 00 01 00 +T 31 0A 00 00 CD 00 00 00 00 21 2A 00 19 5E 23 +R 00 00 01 00 02 05 1C 00 +T 3A 0A 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 40 0A 00 00 CD 00 00 00 00 21 2A 00 DD 5E 02 +R 00 00 01 00 02 05 01 00 +T 49 0A 00 00 DD 56 03 19 E5 59 50 3E +R 00 00 01 00 +T 51 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 56 0A 00 00 00 00 00 00 4D 44 E1 71 23 70 C3 +R 00 00 01 00 02 04 01 00 +T 5F 0A 00 00 00 00 00 00 +R 00 00 01 00 02 04 0E 00 +T 61 0A 00 00 +R 00 00 01 00 +T 61 0A 00 00 CD 00 00 00 00 7B B2 20 03 +R 00 00 01 00 02 05 1C 00 +T 68 0A 00 00 +R 00 00 01 00 +T 68 0A 00 00 C3 2F 0B 00 00 +R 00 00 01 00 00 05 01 00 +T 6B 0A 00 00 +R 00 00 01 00 +T 6B 0A 00 00 DD 6E 02 DD 66 03 23 23 7E 23 B6 +R 00 00 01 00 +T 76 0A 00 00 28 1A +R 00 00 01 00 +T 78 0A 00 00 +R 00 00 01 00 +T 78 0A 00 00 DD 6E 02 DD 66 03 23 23 7E 23 66 +R 00 00 01 00 +T 83 0A 00 00 6F E5 DD 6E 02 DD 66 03 4E 23 46 +R 00 00 01 00 +T 8E 0A 00 00 E1 71 23 70 +R 00 00 01 00 +T 92 0A 00 00 +R 00 00 01 00 +T 92 0A 00 00 DD 6E 02 DD 66 03 7E 23 B6 28 20 +R 00 00 01 00 +T 9D 0A 00 00 +R 00 00 01 00 +T 9D 0A 00 00 DD 6E 02 DD 66 03 46 23 66 68 23 +R 00 00 01 00 +T A8 0A 00 00 23 E5 DD 4E 02 DD 46 03 03 03 69 +R 00 00 01 00 +T B3 0A 00 00 60 4E 23 46 E1 71 23 70 18 72 +R 00 00 01 00 +T BD 0A 00 00 +R 00 00 01 00 +T BD 0A 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T C8 0A 00 00 E6 01 47 23 7E E6 00 B0 28 11 +R 00 00 01 00 +T D2 0A 00 00 +R 00 00 01 00 +T D2 0A 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T DD 0A 00 00 68 22 24 00 00 00 18 4C +R 00 00 01 00 00 06 03 00 +T E3 0A 00 00 +R 00 00 01 00 +T E3 0A 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T EE 0A 00 00 E6 02 47 23 7E E6 00 B0 28 28 +R 00 00 01 00 +T F8 0A 00 00 +R 00 00 01 00 +T F8 0A 00 00 21 24 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 03 0B 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0F 00 +T 08 0B 00 00 00 00 00 00 CD 00 00 00 00 29 11 +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T 0F 0B 00 00 04 00 00 00 19 E5 03 03 69 60 4E +R 00 00 01 00 00 04 03 00 +T 18 0B 00 00 23 46 E1 71 23 70 18 0F +R 00 00 01 00 +T 20 0B 00 00 +R 00 00 01 00 +T 20 0B 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 2B 0B 00 00 68 22 02 00 00 00 +R 00 00 01 00 00 06 03 00 +T 2F 0B 00 00 +R 00 00 01 00 +T 2F 0B 00 00 +R 00 00 01 00 +T 2F 0B 00 00 +R 00 00 01 00 +T 2F 0B 00 00 +R 00 00 01 00 +T 2F 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 14 00 +T 32 0B 00 00 +R 00 00 01 00 +T 32 0B 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 1F 00 +T 3B 0B 00 00 B6 03 20 03 +R 00 00 01 00 +T 3F 0B 00 00 +R 00 00 01 00 +T 3F 0B 00 00 C3 23 0C 00 00 +R 00 00 01 00 00 05 01 00 +T 42 0B 00 00 +R 00 00 01 00 +T 42 0B 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 4D 0B 00 00 E6 01 47 23 7E E6 00 B0 28 0A +R 00 00 01 00 +T 57 0B 00 00 +R 00 00 01 00 +T 57 0B 00 00 DD 36 FE 24 00 00 00 DD 36 FF +R 00 00 01 00 09 07 03 00 +T 5E 0B 00 00 24 00 00 00 18 3F +R 00 00 01 00 89 04 03 00 +T 61 0B 00 00 +R 00 00 01 00 +T 61 0B 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 6C 0B 00 00 E6 02 47 23 7E E6 00 B0 28 22 +R 00 00 01 00 +T 76 0B 00 00 +R 00 00 01 00 +T 76 0B 00 00 21 24 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 81 0B 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0F 00 +T 86 0B 00 00 00 00 00 00 CD 00 00 00 00 29 01 +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T 8D 0B 00 00 04 00 00 00 09 DD 75 FE DD 74 FF +R 00 00 01 00 00 04 03 00 +T 96 0B 00 00 18 08 +R 00 00 01 00 +T 98 0B 00 00 +R 00 00 01 00 +T 98 0B 00 00 DD 36 FE 02 00 00 00 DD 36 FF +R 00 00 01 00 09 07 03 00 +T 9F 0B 00 00 02 00 00 00 +R 00 00 01 00 89 04 03 00 +T A0 0B 00 00 +R 00 00 01 00 +T A0 0B 00 00 +R 00 00 01 00 +T A0 0B 00 00 DD 6E 02 DD 66 03 23 23 AF 77 23 +R 00 00 01 00 +T AB 0B 00 00 77 DD 6E FE DD 66 FF 7E 23 B6 20 +R 00 00 01 00 +T B6 0B 00 00 1D +R 00 00 01 00 +T B7 0B 00 00 +R 00 00 01 00 +T B7 0B 00 00 DD 6E 02 DD 66 03 AF 77 23 77 DD +R 00 00 01 00 +T C2 0B 00 00 6E 02 DD 66 03 E5 DD 6E FE DD 66 +R 00 00 01 00 +T CD 0B 00 00 FF C1 71 23 70 18 4F +R 00 00 01 00 +T D4 0B 00 00 +R 00 00 01 00 +T D4 0B 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T DF 0B 00 00 75 FC DD 74 FD +R 00 00 01 00 +T E4 0B 00 00 +R 00 00 01 00 +T E4 0B 00 00 DD 6E FC DD 66 FD 23 23 7E 23 B6 +R 00 00 01 00 +T EF 0B 00 00 28 14 +R 00 00 01 00 +T F1 0B 00 00 +R 00 00 01 00 +T F1 0B 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T FC 0B 00 00 68 DD 75 FC DD 74 FD 18 DF +R 00 00 01 00 +T 05 0C 00 00 +R 00 00 01 00 +T 05 0C 00 00 DD 6E FC DD 66 FD 23 23 DD 4E 02 +R 00 00 01 00 +T 10 0C 00 00 DD 46 03 71 23 70 DD 6E FC DD 66 +R 00 00 01 00 +T 1B 0C 00 00 FD E5 69 60 C1 71 23 70 +R 00 00 01 00 +T 23 0C 00 00 +R 00 00 01 00 +T 23 0C 00 00 +R 00 00 01 00 +T 23 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 14 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6B 77 61 69 74 3A 20 57 41 52 4E +R 00 00 02 00 +T 0B 00 00 00 49 4E 47 21 20 62 61 64 20 69 73 +R 00 00 02 00 +T 16 00 00 00 74 61 74 65 20 70 72 6F 63 20 25 +R 00 00 02 00 +T 21 00 00 00 73 21 0A 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 24 00 00 00 +R 00 00 03 00 +T 24 00 00 00 +R 00 00 03 00 +T 26 00 00 00 +R 00 00 03 00 +T 26 00 00 00 +R 00 00 03 00 +T 28 00 00 00 +R 00 00 03 00 +T 28 00 00 00 +R 00 00 03 00 +T 72 03 00 00 +R 00 00 03 00 +T 72 03 00 00 +R 00 00 03 00 +T 74 03 00 00 +R 00 00 03 00 +T 74 03 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 +R 00 00 05 00 diff --git a/src/nos/lib/net_lib/ksubr.rel b/src/nos/lib/net_lib/ksubr.rel new file mode 100644 index 00000000..33e0172f --- /dev/null +++ b/src/nos/lib/net_lib/ksubr.rel @@ -0,0 +1,631 @@ +XL4 +H 4 areas 25 global symbols +S ___03dd_b110_WARNING_3a_20Locati Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Stktop Ref00000000 +S _sprintf Ref00000000 +S _secclock Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S ___0331_68d4_PID_20_20_20CS_3aIP Ref00000000 +S _Waittab Ref00000000 +S ___04b3_5e27_ksigs_20_25lu_20que Ref00000000 +S _Ksig Ref00000000 +S _intcontext Ref00000000 +S _setjmp Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _killself Ref00000000 +S __dprintf Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___0111_6df9__2504x_20_20_2504x_ Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ___0376_e7a4_SP_20_3d_20_25p_2c_ Ref00000000 +S _Susptab Ref00000000 +S _getss Ref00000000 +S _Rdytab Ref00000000 +S ___04b4_1bbe_kwaits_20_25lu_20no Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0386_8034_Stack_20violation_2 Ref00000000 +S ___03ca_6d70_Uptime_20_25s_20Sta Ref00000000 +S _tformat Ref00000000 +S _Intstk Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 69F flags 0 +S _chkstk Def000004D5 +S _phash Def00000671 +S _kinit Def00000000 +S _psetup Def000005D8 +S _ps Def00000056 +A CSTR size 8 flags 0 +A UDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF AF DD 77 FE +R 00 00 01 00 02 05 18 00 +T 09 00 00 00 DD 77 FF +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 01 00 00 00 00 21 00 00 00 00 A7 +R 00 00 01 00 02 05 1F 00 02 0A 02 00 +T 13 00 00 00 ED 42 4D 44 CB 28 CB 19 DD 6E FE +R 00 00 01 00 +T 1E 00 00 00 DD 66 FF CD 00 00 00 00 30 1A +R 00 00 01 00 02 08 19 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 6E FE DD 66 FF 29 01 +R 00 00 01 00 +T 2E 00 00 00 00 00 00 00 09 36 AA 23 36 55 DD +R 00 00 01 00 02 04 1F 00 +T 37 00 00 00 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 18 CC +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 00 00 46 23 66 68 22 +R 00 00 01 00 +T 48 00 00 00 00 00 00 00 21 00 00 00 00 22 +R 00 00 01 00 00 04 03 00 02 09 09 00 +T 4E 00 00 00 22 03 00 00 22 20 03 00 00 C3 +R 00 00 01 00 02 04 09 00 02 09 09 00 +T 54 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0C 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 CD 00 00 00 00 FC FF CD +R 00 00 01 00 02 05 18 00 +T 5C 00 00 00 70 04 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 01 00 2B 0A 15 00 +T 62 00 00 00 00 00 00 00 CD 00 00 00 00 E5 3E +R 00 00 01 00 02 04 15 00 02 09 01 00 +T 69 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 6E 00 00 00 00 00 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 1E 00 +T 74 00 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 1E 00 02 09 01 00 +T 7B 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 1D 00 02 0A 1D 00 +T 81 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T 87 00 00 00 00 00 00 00 F1 F1 F1 F1 F1 0E +R 00 00 01 00 02 04 01 00 +T 8F 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T 95 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T 9B 00 00 00 00 00 00 00 F1 F1 21 28 03 00 00 +R 00 00 01 00 02 04 01 00 02 0B 09 00 +T A2 00 00 00 4E 23 46 23 5E 23 56 D5 C5 21 +R 00 00 01 00 +T AC 00 00 00 36 03 00 00 4E 23 46 23 5E 23 56 +R 00 00 01 00 02 04 09 00 +T B5 00 00 00 D5 C5 21 32 03 00 00 4E 23 46 23 +R 00 00 01 00 02 07 09 00 +T BE 00 00 00 5E 23 56 D5 C5 21 26 03 00 00 4E +R 00 00 01 00 02 0A 09 00 +T C7 00 00 00 23 46 C5 21 3A 03 00 00 4E 23 46 +R 00 00 01 00 02 08 09 00 +T D0 00 00 00 23 5E 23 56 D5 C5 21 2E 03 00 00 +R 00 00 01 00 02 0B 09 00 +T D9 00 00 00 4E 23 46 23 5E 23 56 D5 C5 0E +R 00 00 01 00 +T E3 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 08 00 02 0A 08 00 +T E9 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T EF 00 00 00 00 00 00 00 EB 21 1A 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T F8 00 00 00 21 00 00 22 26 03 00 00 21 +R 00 00 01 00 02 08 09 00 +T FF 00 00 00 46 03 00 00 4E 23 46 23 5E 23 56 +R 00 00 01 00 02 04 09 00 +T 08 01 00 00 D5 C5 21 42 03 00 00 4E 23 46 23 +R 00 00 01 00 02 07 09 00 +T 11 01 00 00 5E 23 56 D5 C5 21 3E 03 00 00 4E +R 00 00 01 00 02 0A 09 00 +T 1A 01 00 00 23 46 23 5E 23 56 D5 C5 0E +R 00 00 01 00 +T 23 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 17 00 02 0A 17 00 +T 29 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1A 00 02 0A 1A 00 +T 2F 01 00 00 00 00 00 00 EB 21 10 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T 38 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 06 00 02 0B 06 00 +T 3E 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 44 01 00 00 CD 00 00 00 00 F1 F1 2A +R 00 00 01 00 02 05 01 00 +T 4A 01 00 00 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 14 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 DD 7E FC DD B6 FD 28 1D +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 DD 5E FC DD 56 FD CD 15 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 63 01 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T 6E 01 00 00 68 DD 75 FC DD 74 FD 18 DB +R 00 00 01 00 +T 77 01 00 00 +R 00 00 01 00 +T 77 01 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 7E 01 00 00 +R 00 00 01 00 +T 7E 01 00 00 01 10 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 89 01 00 00 AC 67 ED 42 30 44 +R 00 00 01 00 +T 8F 01 00 00 +R 00 00 01 00 +T 8F 01 00 00 DD 6E FE DD 66 FF 29 01 +R 00 00 01 00 +T 97 01 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 02 04 07 00 +T A0 01 00 00 FC DD 74 FD +R 00 00 01 00 +T A4 01 00 00 +R 00 00 01 00 +T A4 01 00 00 DD 7E FC DD B6 FD 28 1D +R 00 00 01 00 +T AC 01 00 00 +R 00 00 01 00 +T AC 01 00 00 DD 5E FC DD 56 FD CD 15 02 00 00 +R 00 00 01 00 00 0B 01 00 +T B5 01 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T C0 01 00 00 68 DD 75 FC DD 74 FD 18 DB +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 18 AB +R 00 00 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 2A 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 16 00 +T DC 01 00 00 +R 00 00 01 00 +T DC 01 00 00 DD 7E FC DD B6 FD 28 1D +R 00 00 01 00 +T E4 01 00 00 +R 00 00 01 00 +T E4 01 00 00 DD 5E FC DD 56 FD CD 15 02 00 00 +R 00 00 01 00 00 0B 01 00 +T ED 01 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T F8 01 00 00 68 DD 75 FC DD 74 FD 18 DB +R 00 00 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 2A 00 00 00 00 7D B4 28 07 +R 00 00 01 00 02 05 11 00 +T 08 02 00 00 +R 00 00 01 00 +T 08 02 00 00 ED 5B 00 00 00 00 CD 15 02 00 00 +R 00 00 01 00 02 06 11 00 00 0B 01 00 +T 0F 02 00 00 +R 00 00 01 00 +T 0F 02 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 0C 00 +T 15 02 00 00 +R 00 00 01 00 +T 15 02 00 00 CD 00 00 00 00 F4 FF 21 06 00 DD +R 00 00 01 00 02 05 18 00 +T 1E 02 00 00 4E 02 DD 46 03 09 DD 75 F4 DD 74 +R 00 00 01 00 +T 29 02 00 00 F5 21 3E 00 09 7E 23 B6 28 12 21 +R 00 00 01 00 +T 34 02 00 00 3E 00 09 46 23 66 68 01 08 00 09 +R 00 00 01 00 +T 3F 02 00 00 46 23 66 68 18 03 +R 00 00 01 00 +T 45 02 00 00 +R 00 00 01 00 +T 45 02 00 00 21 FF FF +R 00 00 01 00 +T 48 02 00 00 +R 00 00 01 00 +T 48 02 00 00 7D A4 3C 28 3B +R 00 00 01 00 +T 4D 02 00 00 +R 00 00 01 00 +T 4D 02 00 00 21 3E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 58 02 00 00 23 B6 28 12 21 3E 00 09 46 23 66 +R 00 00 01 00 +T 63 02 00 00 68 01 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T 6E 02 00 00 +R 00 00 01 00 +T 6E 02 00 00 21 FF FF +R 00 00 01 00 +T 71 02 00 00 +R 00 00 01 00 +T 71 02 00 00 E5 21 00 00 00 00 E5 21 06 00 39 +R 00 00 01 00 00 06 02 00 +T 7A 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 80 02 00 00 CD 00 00 00 00 F1 F1 F1 18 13 +R 00 00 01 00 02 05 01 00 +T 88 02 00 00 +R 00 00 01 00 +T 88 02 00 00 21 04 00 00 00 E5 21 04 00 39 E5 +R 00 00 01 00 00 05 02 00 +T 91 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 97 02 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 +T 9B 02 00 00 +R 00 00 01 00 +T 9B 02 00 00 21 40 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T A6 02 00 00 23 B6 28 12 21 40 00 09 46 23 66 +R 00 00 01 00 +T B1 02 00 00 68 01 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T BC 02 00 00 +R 00 00 01 00 +T BC 02 00 00 21 FF FF +R 00 00 01 00 +T BF 02 00 00 +R 00 00 01 00 +T BF 02 00 00 7D A4 3C 28 3B +R 00 00 01 00 +T C4 02 00 00 +R 00 00 01 00 +T C4 02 00 00 21 40 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T CF 02 00 00 23 B6 28 12 21 40 00 09 46 23 66 +R 00 00 01 00 +T DA 02 00 00 68 01 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T E5 02 00 00 +R 00 00 01 00 +T E5 02 00 00 21 FF FF +R 00 00 01 00 +T E8 02 00 00 +R 00 00 01 00 +T E8 02 00 00 E5 21 00 00 00 00 E5 21 0B 00 39 +R 00 00 01 00 00 06 02 00 +T F1 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T F7 02 00 00 CD 00 00 00 00 F1 F1 F1 18 13 +R 00 00 01 00 02 05 01 00 +T FF 02 00 00 +R 00 00 01 00 +T FF 02 00 00 21 04 00 00 00 E5 21 09 00 39 E5 +R 00 00 01 00 00 05 02 00 +T 08 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 0E 03 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 +T 12 03 00 00 +R 00 00 01 00 +T 12 03 00 00 21 2A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1D 03 00 00 23 56 D5 21 09 00 39 E5 21 06 00 +R 00 00 01 00 +T 28 03 00 00 39 E5 21 04 00 09 7E E6 01 57 23 +R 00 00 01 00 +T 33 03 00 00 7E E6 00 B2 28 05 21 53 00 18 03 +R 00 00 01 00 +T 3E 03 00 00 +R 00 00 01 00 +T 3E 03 00 00 21 20 00 +R 00 00 01 00 +T 41 03 00 00 +R 00 00 01 00 +T 41 03 00 00 E5 21 04 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 4C 03 00 00 7E E6 02 57 23 7E E6 00 B2 28 05 +R 00 00 01 00 +T 57 03 00 00 21 57 00 18 03 +R 00 00 01 00 +T 5C 03 00 00 +R 00 00 01 00 +T 5C 03 00 00 21 20 00 +R 00 00 01 00 +T 5F 03 00 00 +R 00 00 01 00 +T 5F 03 00 00 E5 21 04 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 6A 03 00 00 7E E6 04 57 23 7E E6 00 B2 28 05 +R 00 00 01 00 +T 75 03 00 00 21 49 00 18 03 +R 00 00 01 00 +T 7A 03 00 00 +R 00 00 01 00 +T 7A 03 00 00 21 20 00 +R 00 00 01 00 +T 7D 03 00 00 +R 00 00 01 00 +T 7D 03 00 00 E5 21 24 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 88 03 00 00 5E 23 56 D5 59 50 CD EC 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 91 03 00 00 E5 21 28 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 9C 03 00 00 5E 23 56 D5 DD 6E F4 DD 66 F5 5E +R 00 00 01 00 +T A7 03 00 00 23 56 D5 DD 6E F4 DD 66 F5 23 23 +R 00 00 01 00 +T B2 03 00 00 5E 23 56 D5 21 0A 00 DD 5E F4 DD +R 00 00 01 00 +T BD 03 00 00 56 F5 19 4E 23 46 C5 21 0C 00 19 +R 00 00 01 00 +T C8 03 00 00 4E 23 46 C5 DD 6E 02 DD 66 03 E5 +R 00 00 01 00 +T D3 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 10 00 02 0B 10 00 +T D9 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T DF 03 00 00 CD 00 00 00 00 EB 21 20 00 39 F9 +R 00 00 01 00 02 05 01 00 +T E8 03 00 00 EB C3 00 00 00 00 +R 00 00 01 00 02 06 0F 00 +T EC 03 00 00 +R 00 00 01 00 +T EC 03 00 00 CD 00 00 00 00 FC FF 21 28 00 DD +R 00 00 01 00 02 05 18 00 +T F5 03 00 00 4E 02 DD 46 03 09 56 23 66 6A DD +R 00 00 01 00 +T 00 04 00 00 75 FC DD 74 FD 21 26 00 09 46 23 +R 00 00 01 00 +T 0B 04 00 00 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T 13 04 00 00 +R 00 00 01 00 +T 13 04 00 00 DD 6E FE DD 66 FF 46 23 66 68 01 +R 00 00 01 00 +T 1E 04 00 00 AA 55 A7 ED 42 20 42 21 28 00 DD +R 00 00 01 00 +T 29 04 00 00 4E 02 DD 46 03 09 56 23 66 6A 29 +R 00 00 01 00 +T 34 04 00 00 E5 21 26 00 09 4E 23 46 E1 09 4D +R 00 00 01 00 +T 3F 04 00 00 44 DD 6E FE DD 66 FF A7 ED 42 30 +R 00 00 01 00 +T 4A 04 00 00 1C +R 00 00 01 00 +T 4B 04 00 00 +R 00 00 01 00 +T 4B 04 00 00 +R 00 00 01 00 +T 4B 04 00 00 +R 00 00 01 00 +T 4B 04 00 00 DD 6E FC DD 66 FD 2B DD 75 FC DD +R 00 00 01 00 +T 56 04 00 00 74 FD DD 7E FE C6 02 DD 77 FE 30 +R 00 00 01 00 +T 61 04 00 00 03 DD 34 FF +R 00 00 01 00 +T 65 04 00 00 +R 00 00 01 00 +T 65 04 00 00 18 AC +R 00 00 01 00 +T 67 04 00 00 +R 00 00 01 00 +T 67 04 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 0F 00 +T 70 04 00 00 +R 00 00 01 00 +T 70 04 00 00 CD 00 00 00 00 FC FF 01 +R 00 00 01 00 02 05 18 00 +T 76 04 00 00 00 00 00 00 21 00 00 00 00 A7 ED +R 00 00 01 00 02 04 1F 00 02 09 02 00 +T 7D 04 00 00 42 CB 2C CB 1D DD 75 FC DD 74 FD +R 00 00 01 00 +T 88 04 00 00 DD 36 FE 00 00 00 00 DD 36 FF +R 00 00 01 00 0B 07 1F 00 +T 8F 04 00 00 00 00 00 00 +R 00 00 01 00 8B 04 1F 00 +T 90 04 00 00 +R 00 00 01 00 +T 90 04 00 00 DD 6E FE DD 66 FF 46 23 66 68 01 +R 00 00 01 00 +T 9B 04 00 00 AA 55 A7 ED 42 20 2A 01 +R 00 00 01 00 +T A3 04 00 00 00 00 00 00 DD 6E FE DD 66 FF A7 +R 00 00 01 00 02 04 02 00 +T AC 04 00 00 ED 42 30 1C +R 00 00 01 00 +T B0 04 00 00 +R 00 00 01 00 +T B0 04 00 00 +R 00 00 01 00 +T B0 04 00 00 +R 00 00 01 00 +T B0 04 00 00 DD 6E FC DD 66 FD 2B DD 75 FC DD +R 00 00 01 00 +T BB 04 00 00 74 FD DD 7E FE C6 02 DD 77 FE 30 +R 00 00 01 00 +T C6 04 00 00 03 DD 34 FF +R 00 00 01 00 +T CA 04 00 00 +R 00 00 01 00 +T CA 04 00 00 18 C4 +R 00 00 01 00 +T CC 04 00 00 +R 00 00 01 00 +T CC 04 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 0F 00 +T D5 04 00 00 +R 00 00 01 00 +T D5 04 00 00 CD 00 00 00 00 FA FF 21 04 00 39 +R 00 00 01 00 02 05 18 00 +T DE 04 00 00 DD 75 FE DD 74 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T E6 04 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0A 00 02 0A 01 00 +T ED 04 00 00 B4 28 03 +R 00 00 01 00 +T F0 04 00 00 +R 00 00 01 00 +T F0 04 00 00 C3 D5 05 00 00 +R 00 00 01 00 00 05 01 00 +T F3 04 00 00 +R 00 00 01 00 +T F3 04 00 00 21 26 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 11 00 +T FC 04 00 00 23 66 68 DD 75 FA DD 74 FB 7D B4 +R 00 00 01 00 +T 07 05 00 00 20 03 +R 00 00 01 00 +T 09 05 00 00 +R 00 00 01 00 +T 09 05 00 00 C3 D5 05 00 00 +R 00 00 01 00 00 05 01 00 +T 0C 05 00 00 +R 00 00 01 00 +T 0C 05 00 00 21 28 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 11 00 +T 15 05 00 00 23 66 68 29 DD 4E FA DD 46 FB 09 +R 00 00 01 00 +T 20 05 00 00 DD 75 FC DD 74 FD DD 6E FE DD 66 +R 00 00 01 00 +T 2B 05 00 00 FF A7 ED 42 38 11 DD 4E FC DD 46 +R 00 00 01 00 +T 36 05 00 00 FD DD 6E FE DD 66 FF A7 ED 42 38 +R 00 00 01 00 +T 41 05 00 00 5A +R 00 00 01 00 +T 42 05 00 00 +R 00 00 01 00 +T 42 05 00 00 +R 00 00 01 00 +T 42 05 00 00 +R 00 00 01 00 +T 42 05 00 00 21 2A 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 11 00 +T 4B 05 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 1C 00 +T 52 05 00 00 00 00 00 00 E5 21 00 00 E5 3E +R 00 00 01 00 02 04 1C 00 +T 5A 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 5F 05 00 00 00 00 00 00 F1 F1 F1 F1 DD 6E FC +R 00 00 01 00 02 04 01 00 +T 68 05 00 00 DD 66 FD E5 DD 6E FA DD 66 FB E5 +R 00 00 01 00 +T 73 05 00 00 DD 6E FE DD 66 FF E5 0E +R 00 00 01 00 +T 7B 05 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 13 00 02 0A 13 00 +T 81 05 00 00 21 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 88 05 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 8F 05 00 00 0C 00 39 F9 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T 97 05 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 9C 05 00 00 +R 00 00 01 00 +T 9C 05 00 00 21 00 00 46 23 66 68 ED 4B +R 00 00 01 00 +T A5 05 00 00 00 00 00 00 A7 ED 42 28 29 +R 00 00 01 00 00 04 03 00 +T AC 05 00 00 +R 00 00 01 00 +T AC 05 00 00 21 2A 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 11 00 +T B5 05 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 00 00 +T BC 05 00 00 00 00 00 00 E5 21 00 00 E5 3E +R 00 00 01 00 02 04 00 00 +T C4 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T C9 05 00 00 00 00 00 00 F1 F1 F1 F1 2A +R 00 00 01 00 02 04 01 00 +T D0 05 00 00 00 00 00 00 22 00 00 +R 00 00 01 00 00 04 03 00 +T D5 05 00 00 +R 00 00 01 00 +T D5 05 00 00 +R 00 00 01 00 +T D5 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0C 00 +T D8 05 00 00 +R 00 00 01 00 +T D8 05 00 00 CD 00 00 00 00 FC FF 21 06 00 DD +R 00 00 01 00 02 05 18 00 +T E1 05 00 00 4E 02 DD 46 03 09 EB 3E +R 00 00 01 00 +T E9 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T EE 05 00 00 00 00 00 00 7D B4 28 3B +R 00 00 01 00 02 04 01 00 +T F4 05 00 00 +R 00 00 01 00 +T F4 05 00 00 21 46 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 11 00 +T FD 05 00 00 23 56 D5 21 44 00 09 4E 23 46 C5 +R 00 00 01 00 +T 08 06 00 00 21 42 00 ED 5B 00 00 00 00 19 5E +R 00 00 01 00 02 09 11 00 +T 11 06 00 00 23 56 21 48 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 11 00 +T 1A 06 00 00 09 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 24 06 00 00 00 00 00 00 E1 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 0D 00 +T 2A 06 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 2F 06 00 00 +R 00 00 01 00 +T 2F 06 00 00 21 28 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 3A 06 00 00 23 66 6A 29 E5 21 26 00 09 5E 23 +R 00 00 01 00 +T 45 06 00 00 56 E1 19 DD 75 FC DD 74 FD 21 +R 00 00 01 00 +T 4F 06 00 00 06 00 09 DD 75 FE DD 74 FF DD 5E +R 00 00 01 00 +T 5A 06 00 00 FC DD 56 FD 73 23 72 21 04 00 09 +R 00 00 01 00 +T 65 06 00 00 7E F6 04 77 23 7E F6 00 77 C3 +R 00 00 01 00 +T 6F 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 0C 00 +T 71 06 00 00 +R 00 00 01 00 +T 71 06 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 18 00 +T 7A 06 00 00 66 03 01 00 00 69 60 01 00 00 7D +R 00 00 01 00 +T 85 06 00 00 DD AE 02 4F 7C DD AE 03 47 DD 71 +R 00 00 01 00 +T 90 06 00 00 FE DD 70 FF 79 E6 0F 6F 78 E6 00 +R 00 00 01 00 +T 9B 06 00 00 67 C3 00 00 00 00 +R 00 00 01 00 02 06 0C 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 33 64 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 20 20 20 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/net_lib/len_p.rel b/src/nos/lib/net_lib/len_p.rel new file mode 100644 index 00000000..5b368406 --- /dev/null +++ b/src/nos/lib/net_lib/len_p.rel @@ -0,0 +1,33 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 42 flags 0 +S _len_p Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF AF DD 77 FE +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 DD 77 FF +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 DD 7E 02 DD B6 03 28 25 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1F 00 00 00 23 56 21 00 00 39 7E 83 77 23 7E +R 00 00 01 00 +T 2A 00 00 00 8A 77 0A 6F 03 0A 67 DD 75 02 DD +R 00 00 01 00 +T 35 00 00 00 74 03 18 D3 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 00 00 diff --git a/src/nos/lib/net_lib/len_q.rel b/src/nos/lib/net_lib/len_q.rel new file mode 100644 index 00000000..7a625c79 --- /dev/null +++ b/src/nos/lib/net_lib/len_q.rel @@ -0,0 +1,33 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 39 flags 0 +S _len_q Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF AF DD 77 FE +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 DD 77 FF +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 DD 7E 02 DD B6 03 28 1C +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 27 00 00 00 68 DD 75 02 DD 74 03 18 DC +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 00 00 diff --git a/src/nos/lib/net_lib/listen.rel b/src/nos/lib/net_lib/listen.rel new file mode 100644 index 00000000..77657469 --- /dev/null +++ b/src/nos/lib/net_lib/listen.rel @@ -0,0 +1,74 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 99 flags 0 +S _listen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 7D B4 20 0B +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 26 00 00 00 18 6E +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 0C 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 33 00 00 00 23 B6 28 0B +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 21 68 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 40 00 00 00 18 54 +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 4D 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 57 00 00 00 08 00 09 7E 23 B6 23 B6 28 27 DD +R 00 00 01 00 +T 62 00 00 00 4E 04 DD 46 05 C5 DD 5E FC DD 56 +R 00 00 01 00 +T 6D 00 00 00 FD 21 08 00 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T 78 00 00 00 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 81 00 00 00 00 00 00 00 7D A4 3C 20 0B +R 00 00 01 00 02 04 00 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 21 69 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 91 00 00 00 18 03 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 21 00 00 +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/locsock.rel b/src/nos/lib/net_lib/locsock.rel new file mode 100644 index 00000000..4862ae24 --- /dev/null +++ b/src/nos/lib/net_lib/locsock.rel @@ -0,0 +1,613 @@ +XL4 +H 3 areas 22 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S _len_q Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___031e_1514_Outqlen_3a_20_25d_2 Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _callocw Ref00000000 +S _errno Ref00000000 +S _close_s Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _dequeue Ref00000000 +S _socklen Ref00000000 +S _free_p Ref00000000 +S _free_q Ref00000000 +S __printf Ref00000000 +S ___029d_bd38_Inqlen_3a_20_25d_20 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _enqueue Ref00000000 +S _append Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 66C flags 0 +S _so_lod Def0000004A +S _so_lod_send Def0000030D +S _so_los Def00000000 +S _so_lod_qlen Def0000043E +S _lopsocket Def00000605 +S _so_los_send Def000001DC +S _so_loc_stat Def0000060E +S _so_los_qlen Def000004BB +S _so_loc_shut Def00000538 +S _so_lo_recv Def00000094 +S _so_loc_close Def0000058F +A CSTR size 1 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 0C 00 19 E5 01 +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 08 00 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 18 00 00 00 E1 71 23 70 21 0C 00 DD 4E 02 DD +R 00 00 01 00 +T 23 00 00 00 46 03 09 7E 23 66 6F 71 23 70 21 +R 00 00 01 00 +T 2E 00 00 00 07 00 09 36 08 21 0C 00 09 46 23 +R 00 00 01 00 +T 39 00 00 00 66 68 01 04 00 09 36 00 23 36 08 +R 00 00 01 00 +T 44 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 03 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 CD 00 00 00 00 21 0C 00 19 E5 01 +R 00 00 01 00 02 05 08 00 +T 53 00 00 00 08 00 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T 5B 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 62 00 00 00 E1 71 23 70 21 0C 00 DD 4E 02 DD +R 00 00 01 00 +T 6D 00 00 00 46 03 09 7E 23 66 6F 71 23 70 21 +R 00 00 01 00 +T 78 00 00 00 07 00 09 36 09 21 0C 00 09 46 23 +R 00 00 01 00 +T 83 00 00 00 66 68 01 04 00 09 36 05 23 36 00 +R 00 00 01 00 +T 8E 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 03 00 +T 94 00 00 00 +R 00 00 01 00 +T 94 00 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 0D 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T A4 00 00 00 23 B6 28 5F 21 0C 00 DD 4E 02 DD +R 00 00 01 00 +T AF 00 00 00 46 03 09 46 23 66 68 23 23 7E 23 +R 00 00 01 00 +T BA 00 00 00 B6 20 4A 21 0C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T C5 00 00 00 03 09 7E 23 66 6F 7E 23 B6 28 37 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T DB 00 00 00 B7 28 0C +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 21 64 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 0A 00 +T E7 00 00 00 C3 D9 01 00 00 +R 00 00 01 00 00 05 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T F2 00 00 00 21 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T F9 00 00 00 00 00 00 00 7D B4 28 06 +R 00 00 01 00 02 04 0A 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 21 FF FF C3 D9 01 00 00 +R 00 00 01 00 00 08 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 18 92 +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 12 01 00 00 23 B6 20 0C +R 00 00 01 00 +T 16 01 00 00 +R 00 00 01 00 +T 16 01 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 0A 00 +T 1F 01 00 00 C3 D9 01 00 00 +R 00 00 01 00 00 05 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 2D 01 00 00 23 66 68 23 23 7E 23 B6 20 1F 21 +R 00 00 01 00 +T 38 01 00 00 0C 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 43 01 00 00 66 6F 7E 23 B6 20 0C +R 00 00 01 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 21 65 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 0A 00 +T 53 01 00 00 C3 D9 01 00 00 +R 00 00 01 00 00 05 01 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 61 01 00 00 23 56 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 68 01 00 00 00 00 00 00 CD 00 00 00 00 E5 DD +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 6F 01 00 00 6E 04 DD 66 05 D1 73 23 72 21 +R 00 00 01 00 +T 79 01 00 00 0C 00 09 46 23 66 68 23 23 7E 23 +R 00 00 01 00 +T 84 01 00 00 B6 20 30 21 0C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 8F 01 00 00 03 09 46 23 66 68 01 06 00 09 7E +R 00 00 01 00 +T 9A 01 00 00 E6 01 28 19 +R 00 00 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T A9 01 00 00 75 FE DD 74 FF EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T B1 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T B7 01 00 00 +R 00 00 01 00 +T B7 01 00 00 01 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T C1 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T C6 01 00 00 00 00 00 00 DD 6E 04 DD 66 05 5E +R 00 00 01 00 02 04 00 00 +T CF 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T D4 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T D9 01 00 00 +R 00 00 01 00 +T D9 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T DC 01 00 00 +R 00 00 01 00 +T DC 01 00 00 CD 00 00 00 00 21 0C 00 19 7E 23 +R 00 00 01 00 02 05 08 00 +T E5 01 00 00 66 6F 7E 23 B6 20 1A +R 00 00 01 00 +T EC 01 00 00 +R 00 00 01 00 +T EC 01 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T F4 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 10 00 02 0A 00 00 +T FB 01 00 00 65 00 22 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 07 0A 00 +T 04 02 00 00 0A 03 00 00 +R 00 00 01 00 00 04 01 00 +T 06 02 00 00 +R 00 00 01 00 +T 06 02 00 00 DD 4E 04 DD 46 05 21 0C 00 DD 5E +R 00 00 01 00 +T 11 02 00 00 02 DD 56 03 19 7E 23 66 6F 7E 23 +R 00 00 01 00 +T 1C 02 00 00 66 6F 11 0C 00 19 5E 23 56 13 13 +R 00 00 01 00 +T 27 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T 2D 02 00 00 00 00 00 00 01 00 00 21 0C 00 DD +R 00 00 01 00 02 04 00 00 +T 36 02 00 00 5E 02 DD 56 03 19 7E 23 66 6F 5E +R 00 00 01 00 +T 41 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0C 00 +T 46 02 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 4B 02 00 00 +R 00 00 01 00 +T 4B 02 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 56 02 00 00 23 66 6F 7E 23 B6 CA E9 02 00 00 +R 00 00 01 00 00 0B 01 00 +T 5F 02 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 6A 02 00 00 23 66 6F 56 23 66 6A 11 0C 00 19 +R 00 00 01 00 +T 75 02 00 00 56 23 66 6A 11 04 00 19 5E 23 56 +R 00 00 01 00 +T 80 02 00 00 D5 21 0C 00 09 7E 23 66 6F 46 23 +R 00 00 01 00 +T 8B 02 00 00 66 68 01 0C 00 09 46 23 66 68 23 +R 00 00 01 00 +T 96 02 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 9D 02 00 00 00 00 00 00 CD 00 00 00 00 D1 A7 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T A4 02 00 00 ED 52 38 41 +R 00 00 01 00 +T A8 02 00 00 +R 00 00 01 00 +T A8 02 00 00 +R 00 00 01 00 +T A8 02 00 00 +R 00 00 01 00 +T A8 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T B3 02 00 00 B7 28 0B +R 00 00 01 00 +T B6 02 00 00 +R 00 00 01 00 +T B6 02 00 00 21 64 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 0A 00 +T BF 02 00 00 18 49 +R 00 00 01 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T CC 02 00 00 23 66 6F 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T D4 02 00 00 21 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T DB 02 00 00 00 00 00 00 7D B4 28 05 +R 00 00 01 00 02 04 0A 00 +T E1 02 00 00 +R 00 00 01 00 +T E1 02 00 00 21 FF FF 18 24 +R 00 00 01 00 +T E6 02 00 00 +R 00 00 01 00 +T E6 02 00 00 C3 4B 02 00 00 +R 00 00 01 00 00 05 01 00 +T E9 02 00 00 +R 00 00 01 00 +T E9 02 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T F4 02 00 00 23 66 6F 7E 23 B6 20 0B +R 00 00 01 00 +T FC 02 00 00 +R 00 00 01 00 +T FC 02 00 00 21 65 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 0A 00 +T 05 03 00 00 18 03 +R 00 00 01 00 +T 07 03 00 00 +R 00 00 01 00 +T 07 03 00 00 21 00 00 +R 00 00 01 00 +T 0A 03 00 00 +R 00 00 01 00 +T 0A 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 0D 03 00 00 +R 00 00 01 00 +T 0D 03 00 00 CD 00 00 00 00 21 0C 00 19 7E 23 +R 00 00 01 00 02 05 08 00 +T 16 03 00 00 66 6F 7E 23 B6 20 1A +R 00 00 01 00 +T 1D 03 00 00 +R 00 00 01 00 +T 1D 03 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T 25 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 10 00 02 0A 00 00 +T 2C 03 00 00 65 00 22 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 07 0A 00 +T 35 03 00 00 3B 04 00 00 +R 00 00 01 00 00 04 01 00 +T 37 03 00 00 +R 00 00 01 00 +T 37 03 00 00 DD 4E 04 DD 46 05 21 0C 00 DD 5E +R 00 00 01 00 +T 42 03 00 00 02 DD 56 03 19 7E 23 66 6F 7E 23 +R 00 00 01 00 +T 4D 03 00 00 66 6F 11 0C 00 19 5E 23 56 13 13 +R 00 00 01 00 +T 58 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 15 00 02 0A 15 00 +T 5E 03 00 00 00 00 00 00 01 00 00 21 0C 00 DD +R 00 00 01 00 02 04 00 00 +T 67 03 00 00 5E 02 DD 56 03 19 7E 23 66 6F 5E +R 00 00 01 00 +T 72 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0C 00 +T 77 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 7C 03 00 00 +R 00 00 01 00 +T 7C 03 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 87 03 00 00 23 66 6F 7E 23 B6 CA 1A 04 00 00 +R 00 00 01 00 00 0B 01 00 +T 90 03 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 9B 03 00 00 23 66 6F 56 23 66 6A 11 0C 00 19 +R 00 00 01 00 +T A6 03 00 00 56 23 66 6A 11 04 00 19 5E 23 56 +R 00 00 01 00 +T B1 03 00 00 D5 21 0C 00 09 7E 23 66 6F 46 23 +R 00 00 01 00 +T BC 03 00 00 66 68 01 0C 00 09 46 23 66 68 23 +R 00 00 01 00 +T C7 03 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T CE 03 00 00 00 00 00 00 CD 00 00 00 00 D1 A7 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T D5 03 00 00 ED 52 38 41 +R 00 00 01 00 +T D9 03 00 00 +R 00 00 01 00 +T D9 03 00 00 +R 00 00 01 00 +T D9 03 00 00 +R 00 00 01 00 +T D9 03 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T E4 03 00 00 B7 28 0B +R 00 00 01 00 +T E7 03 00 00 +R 00 00 01 00 +T E7 03 00 00 21 64 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 0A 00 +T F0 03 00 00 18 49 +R 00 00 01 00 +T F2 03 00 00 +R 00 00 01 00 +T F2 03 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T FD 03 00 00 23 66 6F 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 05 04 00 00 21 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 0C 04 00 00 00 00 00 00 7D B4 28 05 +R 00 00 01 00 02 04 0A 00 +T 12 04 00 00 +R 00 00 01 00 +T 12 04 00 00 21 FF FF 18 24 +R 00 00 01 00 +T 17 04 00 00 +R 00 00 01 00 +T 17 04 00 00 C3 7C 03 00 00 +R 00 00 01 00 00 05 01 00 +T 1A 04 00 00 +R 00 00 01 00 +T 1A 04 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 25 04 00 00 23 66 6F 7E 23 B6 20 0B +R 00 00 01 00 +T 2D 04 00 00 +R 00 00 01 00 +T 2D 04 00 00 21 65 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 0A 00 +T 36 04 00 00 18 03 +R 00 00 01 00 +T 38 04 00 00 +R 00 00 01 00 +T 38 04 00 00 21 00 00 +R 00 00 01 00 +T 3B 04 00 00 +R 00 00 01 00 +T 3B 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 3E 04 00 00 +R 00 00 01 00 +T 3E 04 00 00 CD 00 00 00 00 FE FF 79 B0 20 23 +R 00 00 01 00 02 05 0D 00 +T 47 04 00 00 +R 00 00 01 00 +T 47 04 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 52 04 00 00 23 66 68 23 23 5E 23 56 3E +R 00 00 01 00 +T 5B 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 60 04 00 00 00 00 00 00 DD 75 FE DD 74 FF 18 +R 00 00 01 00 02 04 00 00 +T 69 04 00 00 48 +R 00 00 01 00 +T 6A 04 00 00 +R 00 00 01 00 +T 6A 04 00 00 3E 01 A9 B0 20 42 21 0C 00 DD 4E +R 00 00 01 00 +T 75 04 00 00 02 DD 46 03 09 7E 23 66 6F 7E 23 +R 00 00 01 00 +T 80 04 00 00 B6 28 2D +R 00 00 01 00 +T 83 04 00 00 +R 00 00 01 00 +T 83 04 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 8E 04 00 00 23 66 6F 46 23 66 68 01 0C 00 09 +R 00 00 01 00 +T 99 04 00 00 46 23 66 68 23 23 5E 23 56 3E +R 00 00 01 00 +T A3 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T A8 04 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T B0 04 00 00 +R 00 00 01 00 +T B0 04 00 00 18 00 +R 00 00 01 00 +T B2 04 00 00 +R 00 00 01 00 +T B2 04 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T BB 04 00 00 +R 00 00 01 00 +T BB 04 00 00 CD 00 00 00 00 FE FF 79 B0 20 23 +R 00 00 01 00 02 05 0D 00 +T C4 04 00 00 +R 00 00 01 00 +T C4 04 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T CF 04 00 00 23 66 68 23 23 5E 23 56 3E +R 00 00 01 00 +T D8 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T DD 04 00 00 00 00 00 00 DD 75 FE DD 74 FF 18 +R 00 00 01 00 02 04 00 00 +T E6 04 00 00 48 +R 00 00 01 00 +T E7 04 00 00 +R 00 00 01 00 +T E7 04 00 00 3E 01 A9 B0 20 42 21 0C 00 DD 4E +R 00 00 01 00 +T F2 04 00 00 02 DD 46 03 09 7E 23 66 6F 7E 23 +R 00 00 01 00 +T FD 04 00 00 B6 28 2D +R 00 00 01 00 +T 00 05 00 00 +R 00 00 01 00 +T 00 05 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 0B 05 00 00 23 66 6F 46 23 66 68 01 0C 00 09 +R 00 00 01 00 +T 16 05 00 00 46 23 66 68 23 23 5E 23 56 3E +R 00 00 01 00 +T 20 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 25 05 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 2D 05 00 00 +R 00 00 01 00 +T 2D 05 00 00 18 00 +R 00 00 01 00 +T 2F 05 00 00 +R 00 00 01 00 +T 2F 05 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 38 05 00 00 +R 00 00 01 00 +T 38 05 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 0D 00 +T 41 05 00 00 66 03 56 23 66 6A DD 75 FE DD 74 +R 00 00 01 00 +T 4C 05 00 00 FF 21 0C 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 57 05 00 00 56 23 66 6A 23 23 7E 23 B6 20 10 +R 00 00 01 00 +T 62 05 00 00 +R 00 00 01 00 +T 62 05 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 6A 05 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 71 05 00 00 17 +R 00 00 01 00 +T 72 05 00 00 +R 00 00 01 00 +T 72 05 00 00 21 0C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 7D 05 00 00 23 66 68 01 06 00 09 36 01 23 36 +R 00 00 01 00 +T 88 05 00 00 00 +R 00 00 01 00 +T 89 05 00 00 +R 00 00 01 00 +T 89 05 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 03 00 +T 8F 05 00 00 +R 00 00 01 00 +T 8F 05 00 00 CD 00 00 00 00 21 0C 00 19 7E 23 +R 00 00 01 00 02 05 08 00 +T 98 05 00 00 66 6F 7E 23 B6 28 3A +R 00 00 01 00 +T 9F 05 00 00 +R 00 00 01 00 +T 9F 05 00 00 21 0C 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T AA 05 00 00 23 66 6F 56 23 66 6A 11 0C 00 19 +R 00 00 01 00 +T B5 05 00 00 7E 23 66 6F AF 77 23 77 01 00 00 +R 00 00 01 00 +T C0 05 00 00 21 0C 00 DD 5E 02 DD 56 03 19 7E +R 00 00 01 00 +T CB 05 00 00 23 66 6F 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T D3 05 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T D9 05 00 00 +R 00 00 01 00 +T D9 05 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T E4 05 00 00 23 56 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T EB 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T F1 05 00 00 0C 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T F9 05 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 00 06 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 03 00 +T 05 06 00 00 +R 00 00 01 00 +T 05 06 00 00 CD 00 00 00 00 21 00 00 00 00 C3 +R 00 00 01 00 02 05 08 00 00 0A 02 00 +T 0C 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 +T 0E 06 00 00 +R 00 00 01 00 +T 0E 06 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 0D 00 +T 17 06 00 00 66 03 46 23 66 68 DD 75 FE DD 74 +R 00 00 01 00 +T 22 06 00 00 FF 01 00 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 2A 06 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 31 06 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 13 00 02 0A 13 00 +T 37 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T 3D 06 00 00 00 00 00 00 F1 F1 F1 01 01 00 DD +R 00 00 01 00 02 04 00 00 +T 46 06 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 4E 06 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 55 06 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 04 00 02 0A 04 00 +T 5B 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T 61 06 00 00 00 00 00 00 F1 F1 F1 21 00 00 C3 +R 00 00 01 00 02 04 00 00 +T 6A 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/mask2width.rel b/src/nos/lib/net_lib/mask2width.rel new file mode 100644 index 00000000..59479392 --- /dev/null +++ b/src/nos/lib/net_lib/mask2width.rel @@ -0,0 +1,49 @@ +XL4 +H 2 areas 7 global symbols +S ?L_AND_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5F flags 0 +S _mask2width Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FC +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 77 FD DD 36 FE 1F DD 36 FF 00 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 DD CB FF 7E 20 3C +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 25 00 00 00 66 03 E5 DD 7E FE 01 00 00 21 +R 00 00 01 00 +T 2F 00 00 00 01 00 CD 00 00 00 00 CD +R 00 00 01 00 02 07 03 00 +T 35 00 00 00 00 00 00 00 7D B4 B1 B0 20 02 +R 00 00 01 00 02 04 00 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 18 17 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 6E FE DD 66 FF 2B DD 75 FE DD +R 00 00 01 00 +T 52 00 00 00 74 FF 18 BE +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 01 00 diff --git a/src/nos/lib/net_lib/mbuf_crunch.rel b/src/nos/lib/net_lib/mbuf_crunch.rel new file mode 100644 index 00000000..ebc94516 --- /dev/null +++ b/src/nos/lib/net_lib/mbuf_crunch.rel @@ -0,0 +1,88 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _copy_p Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C5 flags 0 +S _mbuf_crunch Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 03 46 23 66 68 DD 75 FC DD 74 +R 00 00 01 00 +T 14 00 00 00 FD 01 06 00 09 4E 23 46 21 01 00 +R 00 00 01 00 +T 1F 00 00 00 CD 00 00 00 00 38 0F 21 08 00 DD +R 00 00 01 00 02 05 06 00 +T 28 00 00 00 4E FC DD 46 FD 09 7E 23 B6 28 03 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 C3 C2 00 00 00 +R 00 00 01 00 00 05 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 DD 6E FC DD 66 FD 7E 23 B6 20 1E +R 00 00 01 00 +T 41 00 00 00 21 0C 00 DD 4E FC DD 46 FD 09 56 +R 00 00 01 00 +T 4C 00 00 00 23 66 6A E5 21 04 00 09 4E 23 46 +R 00 00 01 00 +T 57 00 00 00 E1 A7 ED 42 20 02 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 18 63 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 67 00 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 6E 00 00 00 44 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 76 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7B 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 84 00 00 00 B4 20 02 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 18 39 +R 00 00 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 DD 6E FE DD 66 FF 23 23 E5 DD 4E +R 00 00 01 00 +T 94 00 00 00 FC DD 46 FD 03 03 69 60 4E 23 46 +R 00 00 01 00 +T 9F 00 00 00 E1 71 23 70 21 00 00 39 5D 54 3E +R 00 00 01 00 +T AA 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T AF 00 00 00 00 00 00 00 DD 6E FE DD 66 FF E5 +R 00 00 01 00 02 04 00 00 +T B8 00 00 00 DD 6E 02 DD 66 03 C1 71 23 70 +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/mbuf_garbage.rel b/src/nos/lib/net_lib/mbuf_garbage.rel new file mode 100644 index 00000000..3e7a6281 --- /dev/null +++ b/src/nos/lib/net_lib/mbuf_garbage.rel @@ -0,0 +1,70 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _dirps Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Mbufcache Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8C flags 0 +S _mbuf_garbage Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FC +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FD +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 01 03 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T 17 00 00 00 AC 67 ED 42 30 6C +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 23 00 00 00 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 00 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 6E FC DD 66 FD 29 01 +R 00 00 01 00 +T 33 00 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 02 04 08 00 +T 3C 00 00 00 FE DD 74 FF 7D B4 28 2D +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 DD 6E FC DD 66 FD 29 01 +R 00 00 01 00 +T 4C 00 00 00 00 00 00 00 09 E5 DD 4E FE DD 46 +R 00 00 01 00 02 04 08 00 +T 55 00 00 00 FF 03 03 69 60 4E 23 46 E1 71 23 +R 00 00 01 00 +T 60 00 00 00 70 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 68 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 6D 00 00 00 00 00 00 00 18 BA +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 79 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 80 00 00 00 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 18 83 +R 00 00 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/mbufsizes.rel b/src/nos/lib/net_lib/mbufsizes.rel new file mode 100644 index 00000000..c038f208 --- /dev/null +++ b/src/nos/lib/net_lib/mbufsizes.rel @@ -0,0 +1,79 @@ +XL4 +H 2 areas B global symbols +S ___02db_d814_N_3e_3d_255u_3a_257 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___02d2_488d_Mbuf_20sizes_3a_0a Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Msizes Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D3 flags 0 +S _mbufsizes Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 0E +R 00 00 01 00 02 05 06 00 +T 06 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T 0C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 12 00 00 00 00 00 00 00 F1 F1 AF DD 77 FE DD +R 00 00 01 00 02 04 01 00 +T 1B 00 00 00 77 FF +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 01 10 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 28 00 00 00 AC 67 ED 42 D2 D0 00 00 00 +R 00 00 01 00 00 09 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 6E FE DD 66 FF 29 29 01 +R 00 00 01 00 +T 38 00 00 00 0C 00 00 00 09 4E 23 46 23 5E 23 +R 00 00 01 00 02 04 09 00 +T 41 00 00 00 56 D5 C5 DD 46 FE 11 08 00 CD +R 00 00 01 00 +T 4B 00 00 00 00 00 00 00 D5 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 05 00 +T 54 00 00 00 29 29 01 08 00 00 00 09 4E 23 46 +R 00 00 01 00 02 07 09 00 +T 5D 00 00 00 23 5E 23 56 D5 C5 DD 46 FE 11 +R 00 00 01 00 +T 67 00 00 00 04 00 CD 00 00 00 00 D5 DD 6E FE +R 00 00 01 00 02 07 05 00 +T 70 00 00 00 DD 66 FF 29 29 01 04 00 00 00 09 +R 00 00 01 00 02 0A 09 00 +T 79 00 00 00 4E 23 46 23 5E 23 56 D5 C5 DD 46 +R 00 00 01 00 +T 84 00 00 00 FE 11 02 00 CD 00 00 00 00 D5 DD +R 00 00 01 00 02 09 05 00 +T 8D 00 00 00 6E FE DD 66 FF 29 29 01 +R 00 00 01 00 +T 95 00 00 00 00 00 00 00 09 4E 23 46 23 5E 23 +R 00 00 01 00 02 04 09 00 +T 9E 00 00 00 56 D5 C5 DD 46 FE 11 01 00 CD +R 00 00 01 00 +T A8 00 00 00 00 00 00 00 D5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 05 00 2B 0A 00 00 +T AE 00 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 00 00 2B 0B 07 00 +T B4 00 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T BB 00 00 00 21 1C 00 39 F9 EB 21 00 00 39 7E +R 00 00 01 00 +T C6 00 00 00 C6 04 77 30 02 23 34 +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 C3 1D 00 00 00 +R 00 00 01 00 00 05 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/mbufstat.rel b/src/nos/lib/net_lib/mbufstat.rel new file mode 100644 index 00000000..b1c1d1e3 --- /dev/null +++ b/src/nos/lib/net_lib/mbufstat.rel @@ -0,0 +1,78 @@ +XL4 +H 2 areas 12 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _Allocmbufs Ref00000000 +S ___04cf_e57a_mbuf_20allocs_20_25 Ref00000000 +S _Pushdowns Ref00000000 +S _Cachehits Ref00000000 +S ___0530_274c_pushdown_20calls_20 Ref00000000 +S _len_q Ref00000000 +S .__.ABS. Def00000000 +S _Freembufs Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _Pushalloc Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___027a_fee7_Free_20cache_3a_20s Ref00000000 +S _Mbufcache Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B5 flags 0 +S _mbufstat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 2A 02 00 00 00 E5 2A +R 00 00 01 00 02 07 09 00 +T 07 00 00 00 00 00 00 00 E5 2A 02 00 00 00 E5 +R 00 00 01 00 02 04 09 00 02 0A 02 00 +T 0E 00 00 00 2A 00 00 00 00 E5 21 00 00 E5 21 +R 00 00 01 00 02 05 02 00 +T 17 00 00 00 64 00 E5 ED 4B 02 00 00 00 2A +R 00 00 01 00 02 09 05 00 +T 1F 00 00 00 00 00 00 00 CD 00 00 00 00 CD +R 00 00 01 00 02 04 05 00 02 09 0A 00 +T 25 00 00 00 00 00 00 00 C5 E5 2A 02 00 00 00 +R 00 00 01 00 02 04 0C 00 02 0B 05 00 +T 2C 00 00 00 E5 2A 00 00 00 00 E5 2A +R 00 00 01 00 02 06 05 00 +T 32 00 00 00 02 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 02 04 02 00 02 0A 02 00 +T 39 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 3F 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 45 00 00 00 CD 00 00 00 00 EB 21 14 00 39 F9 +R 00 00 01 00 02 05 00 00 +T 4E 00 00 00 EB 2A 02 00 00 00 E5 2A +R 00 00 01 00 02 06 0B 00 +T 54 00 00 00 00 00 00 00 E5 2A 02 00 00 00 E5 +R 00 00 01 00 02 04 0B 00 02 0A 04 00 +T 5B 00 00 00 2A 00 00 00 00 E5 0E 00 00 00 00 +R 00 00 01 00 02 05 04 00 2B 0B 06 00 +T 61 00 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 06 00 +T 67 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 6C 00 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T 75 00 00 00 ED 5B 04 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 10 00 2B 0B 07 00 +T 7B 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 82 00 00 00 ED 5B 02 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 10 00 2B 0B 07 00 +T 88 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 8F 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 10 00 2B 0B 07 00 +T 95 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 9C 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0F 00 02 0B 0F 00 +T A2 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T A8 00 00 00 CD 00 00 00 00 F1 F1 F1 F1 F1 D1 +R 00 00 01 00 02 05 00 00 +T B1 00 00 00 C1 C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/net_lib/misc.rel b/src/nos/lib/net_lib/misc.rel new file mode 100644 index 00000000..153d4402 --- /dev/null +++ b/src/nos/lib/net_lib/misc.rel @@ -0,0 +1,474 @@ +XL4 +H 6 areas 16 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sprintf Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _memchr Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3C3 flags 0 +S _memcnt Def000002A4 +S _rip Def00000256 +S _memxor Def00000326 +S _strdupw Def00000362 +S _readhex Def0000016B +S _htob Def00000119 +S _htoi Def00000055 +S _smsg Def00000000 +A CSTR size 3 flags 0 +A UDATA0 size 10 flags 0 +A IDATA0 size 5 flags 0 +S _Whitespace Def00000000 +A CDATA0 size 5 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 A7 ED 42 30 27 DD 6E 0A DD 66 0B +R 00 00 01 00 +T 14 00 00 00 29 DD 4E 02 DD 46 03 09 7E 23 B6 +R 00 00 01 00 +T 1F 00 00 00 28 14 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 DD 6E 0A DD 66 0B 29 DD 4E 02 DD +R 00 00 01 00 +T 2C 00 00 00 46 03 09 46 23 66 68 18 1D +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 DD 6E 0A DD 66 0B E5 21 +R 00 00 01 00 +T 3D 00 00 00 00 00 00 00 E5 21 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 00 0A 03 00 +T 44 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 4A 00 00 00 00 00 00 00 F1 F1 F1 21 +R 00 00 01 00 02 04 00 00 +T 50 00 00 00 00 00 00 00 +R 00 00 01 00 00 04 03 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FC +R 00 00 01 00 02 05 08 00 +T 5E 00 00 00 DD 77 FD +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 6C 00 00 00 74 03 2B 46 DD 70 FE 04 05 CA +R 00 00 01 00 +T 76 00 00 00 10 01 00 00 +R 00 00 01 00 00 04 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 DD 7E FE FE 78 20 02 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 18 E0 +R 00 00 01 00 +T 81 00 00 00 +R 00 00 01 00 +T 81 00 00 00 DD 7E FE FE 30 38 27 3E 39 DD BE +R 00 00 01 00 +T 8C 00 00 00 FE 38 20 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 4E FE 06 00 21 D0 FF 09 E5 DD +R 00 00 01 00 +T 9A 00 00 00 6E FC DD 66 FD 29 29 29 29 4D 44 +R 00 00 01 00 +T A5 00 00 00 E1 09 DD 75 FC DD 74 FD 18 5E +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 DD 7E FE FE 61 38 27 3E 66 DD BE +R 00 00 01 00 +T BA 00 00 00 FE 38 20 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 DD 4E FE 06 00 21 A9 FF 09 E5 DD +R 00 00 01 00 +T C8 00 00 00 6E FC DD 66 FD 29 29 29 29 4D 44 +R 00 00 01 00 +T D3 00 00 00 E1 09 DD 75 FC DD 74 FD 18 30 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 DD 7E FE FE 41 38 27 3E 46 DD BE +R 00 00 01 00 +T E8 00 00 00 FE 38 20 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 DD 4E FE 06 00 21 C9 FF 09 E5 DD +R 00 00 01 00 +T F6 00 00 00 6E FC DD 66 FD 29 29 29 29 4D 44 +R 00 00 01 00 +T 01 01 00 00 E1 09 DD 75 FC DD 74 FD 18 02 +R 00 00 01 00 +T 0B 01 00 00 +R 00 00 01 00 +T 0B 01 00 00 18 03 +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 C3 61 00 00 00 +R 00 00 01 00 00 05 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 19 01 00 00 +R 00 00 01 00 +T 19 01 00 00 CD 00 00 00 00 7B FE 30 38 12 3E +R 00 00 01 00 02 05 07 00 +T 22 01 00 00 39 DD BE 02 38 0B +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 DD 4E 02 06 00 21 D0 FF 09 18 35 +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 DD 7E 02 FE 61 38 12 3E 66 DD BE +R 00 00 01 00 +T 3E 01 00 00 02 38 0B +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 DD 4E 02 06 00 21 A9 FF 09 18 1C +R 00 00 01 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 DD 7E 02 FE 41 38 12 3E 46 DD BE +R 00 00 01 00 +T 57 01 00 00 02 38 0B +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 DD 4E 02 06 00 21 C9 FF 09 18 03 +R 00 00 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 21 FF FF +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 6B 01 00 00 +R 00 00 01 00 +T 6B 01 00 00 CD 00 00 00 00 FC FF 79 B0 20 06 +R 00 00 01 00 02 05 08 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 21 00 00 C3 53 02 00 00 +R 00 00 01 00 00 08 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 81 01 00 00 +R 00 00 01 00 +T 81 01 00 00 DD 4E 0A DD 46 0B DD 6E FE DD 66 +R 00 00 01 00 +T 8C 01 00 00 FF CD 00 00 00 00 D2 4D 02 00 00 +R 00 00 01 00 02 06 0A 00 00 0B 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 DD 6E 04 DD 66 05 7E FE 20 28 0B +R 00 00 01 00 +T 9E 01 00 00 DD 6E 04 DD 66 05 7E FE 09 20 0A +R 00 00 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T B1 01 00 00 +R 00 00 01 00 +T B1 01 00 00 18 E0 +R 00 00 01 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T BE 01 00 00 74 05 2B 5E 3E 19 01 00 00 21 +R 00 00 01 00 29 09 01 00 +T C5 01 00 00 19 01 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 00 04 01 00 02 09 00 00 +T CC 01 00 00 FC DD 74 FD 7D A4 3C 20 02 +R 00 00 01 00 +T D5 01 00 00 +R 00 00 01 00 +T D5 01 00 00 18 76 +R 00 00 01 00 +T D7 01 00 00 +R 00 00 01 00 +T D7 01 00 00 DD 6E FE DD 66 FF DD 4E 02 DD 46 +R 00 00 01 00 +T E2 01 00 00 03 09 DD 7E FC 87 87 87 87 77 +R 00 00 01 00 +T EC 01 00 00 +R 00 00 01 00 +T EC 01 00 00 DD 6E 04 DD 66 05 7E FE 20 28 0B +R 00 00 01 00 +T F7 01 00 00 DD 6E 04 DD 66 05 7E FE 09 20 0A +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T 0A 02 00 00 +R 00 00 01 00 +T 0A 02 00 00 18 E0 +R 00 00 01 00 +T 0C 02 00 00 +R 00 00 01 00 +T 0C 02 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T 17 02 00 00 74 05 2B 5E 3E 19 01 00 00 21 +R 00 00 01 00 29 09 01 00 +T 1E 02 00 00 19 01 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 00 04 01 00 02 09 00 00 +T 25 02 00 00 FC DD 74 FD 7D A4 3C 20 02 +R 00 00 01 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 18 1D +R 00 00 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 DD 6E FE DD 66 FF DD 4E 02 DD 46 +R 00 00 01 00 +T 3B 02 00 00 03 09 7E DD B6 FC 77 DD 34 FE 20 +R 00 00 01 00 +T 46 02 00 00 03 DD 34 FF +R 00 00 01 00 +T 4A 02 00 00 +R 00 00 01 00 +T 4A 02 00 00 C3 81 01 00 00 +R 00 00 01 00 00 05 01 00 +T 4D 02 00 00 +R 00 00 01 00 +T 4D 02 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 53 02 00 00 +R 00 00 01 00 +T 53 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 56 02 00 00 +R 00 00 01 00 +T 56 02 00 00 CD 00 00 00 00 FE FF 01 0A 00 DD +R 00 00 01 00 02 05 08 00 +T 5F 02 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 67 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 6E 02 00 00 FE DD 74 FF 7D B4 28 08 +R 00 00 01 00 +T 76 02 00 00 +R 00 00 01 00 +T 76 02 00 00 DD 6E FE DD 66 FF 36 00 +R 00 00 01 00 +T 7E 02 00 00 +R 00 00 01 00 +T 7E 02 00 00 01 0D 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 88 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 8D 02 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 96 02 00 00 B4 28 08 +R 00 00 01 00 +T 99 02 00 00 +R 00 00 01 00 +T 99 02 00 00 DD 6E FE DD 66 FF 36 00 +R 00 00 01 00 +T A1 02 00 00 +R 00 00 01 00 +T A1 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T A4 02 00 00 +R 00 00 01 00 +T A4 02 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 08 00 +T AD 02 00 00 DD 77 FB +R 00 00 01 00 +T B0 02 00 00 +R 00 00 01 00 +T B0 02 00 00 DD 7E 0A DD B6 0B 28 65 +R 00 00 01 00 +T B8 02 00 00 +R 00 00 01 00 +T B8 02 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 06 +R 00 00 01 00 +T C3 02 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T CB 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T D0 02 00 00 00 00 00 00 F1 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 00 00 +T D9 02 00 00 7D B4 20 02 +R 00 00 01 00 +T DD 02 00 00 +R 00 00 01 00 +T DD 02 00 00 18 3E +R 00 00 01 00 +T DF 02 00 00 +R 00 00 01 00 +T DF 02 00 00 DD 4E 02 DD 46 03 DD 6E FC DD 66 +R 00 00 01 00 +T EA 02 00 00 FD A7 ED 42 23 DD 75 FE DD 74 FF +R 00 00 01 00 +T F5 02 00 00 21 08 00 39 7E DD 86 FE 77 23 7E +R 00 00 01 00 +T 00 03 00 00 DD 8E FF 77 21 10 00 39 7E DD 96 +R 00 00 01 00 +T 0B 03 00 00 FE 77 23 7E DD 9E FF 77 DD 34 FA +R 00 00 01 00 +T 16 03 00 00 20 03 DD 34 FB +R 00 00 01 00 +T 1B 03 00 00 +R 00 00 01 00 +T 1B 03 00 00 18 93 +R 00 00 01 00 +T 1D 03 00 00 +R 00 00 01 00 +T 1D 03 00 00 DD 6E FA DD 66 FB C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 26 03 00 00 +R 00 00 01 00 +T 26 03 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 29 03 00 00 +R 00 00 01 00 +T 29 03 00 00 +R 00 00 01 00 +T 29 03 00 00 DD 6E 0A DD 66 0B 2B DD 75 0A DD +R 00 00 01 00 +T 34 03 00 00 74 0B 23 7D B4 28 24 +R 00 00 01 00 +T 3B 03 00 00 +R 00 00 01 00 +T 3B 03 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 46 03 00 00 74 03 2B E5 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T 51 03 00 00 DD 75 04 DD 74 05 2B 46 E1 7E A8 +R 00 00 01 00 +T 5C 03 00 00 77 18 CA +R 00 00 01 00 +T 5F 03 00 00 +R 00 00 01 00 +T 5F 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 62 03 00 00 +R 00 00 01 00 +T 62 03 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 08 00 +T 6B 03 00 00 B6 03 20 05 +R 00 00 01 00 +T 6F 03 00 00 +R 00 00 01 00 +T 6F 03 00 00 21 00 00 18 4C +R 00 00 01 00 +T 74 03 00 00 +R 00 00 01 00 +T 74 03 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 7C 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 83 03 00 00 75 FE DD 74 FF EB 13 3E +R 00 00 01 00 +T 8B 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 90 03 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 00 00 +T 99 03 00 00 4E FE DD 46 FF C5 DD 4E 02 DD 46 +R 00 00 01 00 +T A4 03 00 00 03 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T A9 03 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 02 00 02 09 00 00 +T B0 03 00 00 6E FE DD 66 FF DD 4E FC DD 46 FD +R 00 00 01 00 +T BB 03 00 00 09 36 00 69 60 +R 00 00 01 00 +T C0 03 00 00 +R 00 00 01 00 +T C0 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 75 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 20 09 0D 0A 00 +R 00 00 05 00 diff --git a/src/nos/lib/net_lib/net_route.rel b/src/nos/lib/net_lib/net_route.rel new file mode 100644 index 00000000..0b40c7d9 --- /dev/null +++ b/src/nos/lib/net_lib/net_route.rel @@ -0,0 +1,29 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Hopper Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pushdown Ref00000000 +S _enqueue Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 33 flags 0 +S _net_route Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 02 00 E5 21 +R 00 00 01 00 02 05 03 00 +T 08 00 00 00 04 00 39 4D 44 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 13 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 19 00 00 00 00 00 00 00 E1 DD 4E 04 DD 46 05 +R 00 00 01 00 02 04 00 00 +T 22 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 2B 0A 07 00 +T 28 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 2E 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/net_lib/network.rel b/src/nos/lib/net_lib/network.rel new file mode 100644 index 00000000..7077a67d --- /dev/null +++ b/src/nos/lib/net_lib/network.rel @@ -0,0 +1,128 @@ +XL4 +H 2 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _secclock Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _pullup Ref00000000 +S _dirps Ref00000000 +S _Iftypes Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _dequeue Ref00000000 +S _Hopper Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dump Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 129 flags 0 +S _network Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF +R 00 00 01 00 02 05 08 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 0B 00 00 00 00 00 00 00 DD 75 FA 2A +R 00 00 01 00 02 04 00 00 +T 11 00 00 00 00 00 00 00 DD 75 F8 DD 74 F9 7D +R 00 00 01 00 02 04 0B 00 +T 1A 00 00 00 B4 28 20 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 2B 0A 0A 00 +T 23 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 2A 00 00 00 F8 DD 74 F9 DD 5E FA 16 00 3E +R 00 00 01 00 +T 34 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 39 00 00 00 00 00 00 00 18 1A +R 00 00 01 00 02 04 00 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 DD 5E FA 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 45 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 4B 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 2B 09 04 00 +T 50 00 00 00 00 00 00 00 CD 00 00 00 00 18 AE +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 02 00 E5 21 07 00 39 4D 44 21 +R 00 00 01 00 +T 62 00 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 6A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 71 00 00 00 7E FD DD B6 FE 28 3F +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 21 5D 00 DD 4E FD DD 46 FE 09 CD +R 00 00 01 00 +T 83 00 00 00 00 00 00 00 21 65 00 DD 4E FD DD +R 00 00 01 00 02 04 09 00 +T 8C 00 00 00 46 FE 09 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 93 00 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 9A 00 00 00 73 23 72 23 71 23 70 21 3D 00 DD +R 00 00 01 00 +T A5 00 00 00 4E FD DD 46 FE 09 46 23 66 68 DD +R 00 00 01 00 +T B0 00 00 00 75 FB DD 74 FC 18 08 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 DD 36 FB 00 00 00 00 DD 36 FC +R 00 00 01 00 0B 07 07 00 +T BE 00 00 00 00 00 00 00 +R 00 00 01 00 8B 04 07 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 DD 6E F8 DD 66 F9 E5 01 10 00 DD +R 00 00 01 00 +T CA 00 00 00 5E FD DD 56 FE 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T D2 00 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T D9 00 00 00 12 00 DD 4E FB DD 46 FC 09 7E 23 +R 00 00 01 00 +T E4 00 00 00 B6 23 B6 28 24 +R 00 00 01 00 +T E9 00 00 00 +R 00 00 01 00 +T E9 00 00 00 21 00 00 39 4D 44 C5 DD 5E FD DD +R 00 00 01 00 +T F4 00 00 00 56 FE 21 12 00 DD 4E FB DD 46 FC +R 00 00 01 00 +T FF 00 00 00 09 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 09 01 00 00 00 00 00 00 18 0E +R 00 00 01 00 02 04 00 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 15 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 21 01 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 27 01 00 00 05 00 00 00 +R 00 00 01 00 00 04 01 00 diff --git a/src/nos/lib/net_lib/nu_output.rel b/src/nos/lib/net_lib/nu_output.rel new file mode 100644 index 00000000..91cd3d3d --- /dev/null +++ b/src/nos/lib/net_lib/nu_output.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S _nu_output Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 4E 0E DD 46 0F +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 C5 21 45 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 14 00 00 00 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 1D 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 diff --git a/src/nos/lib/net_lib/nu_send.rel b/src/nos/lib/net_lib/nu_send.rel new file mode 100644 index 00000000..19288af6 --- /dev/null +++ b/src/nos/lib/net_lib/nu_send.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S _nu_send Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 4B 42 C5 DD 5E 04 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD 56 05 21 45 00 DD 4E 04 DD 46 +R 00 00 01 00 +T 14 00 00 00 05 09 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 1F 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 diff --git a/src/nos/lib/net_lib/pathname.rel b/src/nos/lib/net_lib/pathname.rel new file mode 100644 index 00000000..cfc532f1 --- /dev/null +++ b/src/nos/lib/net_lib/pathname.rel @@ -0,0 +1,303 @@ +XL4 +H 3 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strncmp Ref00000000 +S _strrchr Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _strcmp Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24C flags 0 +S _pathname Def00000000 +A CSTR size C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 B6 03 28 08 DD 7E 04 DD B6 05 20 +R 00 00 01 00 +T 14 00 00 00 06 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 +R 00 00 01 00 +T 15 00 00 00 21 00 00 C3 DB 00 00 00 +R 00 00 01 00 00 08 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 6E 02 DD 66 03 7E FE 20 28 0B +R 00 00 01 00 +T 26 00 00 00 DD 6E 02 DD 66 03 7E FE 09 20 0A +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 18 E0 +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 DD 6E 04 DD 66 05 7E FE 20 28 0B +R 00 00 01 00 +T 46 00 00 00 DD 6E 04 DD 66 05 7E FE 09 20 0A +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 18 E0 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 63 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 6A 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 72 00 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 79 00 00 00 44 E1 09 01 0A 00 09 EB 3E +R 00 00 01 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 87 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 36 +R 00 00 01 00 02 04 00 00 +T 90 00 00 00 00 DD 6E 04 DD 66 05 7E FE 2F 28 +R 00 00 01 00 +T 9B 00 00 00 0F +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 DD 4E 02 DD 46 03 DD 5E FE DD 56 +R 00 00 01 00 +T A7 00 00 00 FF CD DE 00 00 00 +R 00 00 01 00 00 06 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 DD 4E 04 DD 46 05 DD 5E FE DD 56 +R 00 00 01 00 +T B6 00 00 00 FF CD DE 00 00 00 DD 6E FE DD 66 +R 00 00 01 00 00 06 01 00 +T BF 00 00 00 FF AF B6 20 11 +R 00 00 01 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 DD 6E FE DD 66 FF 36 2F DD 6E FE +R 00 00 01 00 +T CF 00 00 00 DD 66 FF 23 36 00 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T DB 00 00 00 +R 00 00 01 00 +T DB 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 08 00 +T E7 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T EC 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 04 00 02 09 00 00 +T F3 00 00 00 02 DD 56 03 19 DD 75 FE DD 74 FF +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 DD 6E 04 DD 66 05 7E FE 2F 20 0A +R 00 00 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 18 EB +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 6E 04 DD 66 05 AF B6 20 03 +R 00 00 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 C3 39 02 00 00 +R 00 00 01 00 00 05 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 01 00 00 00 00 DD 5E 04 DD 56 05 +R 00 00 01 00 00 05 02 00 +T 29 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 2F 01 00 00 00 00 00 00 7D B4 28 1A 21 03 00 +R 00 00 01 00 02 04 00 00 +T 38 01 00 00 E5 01 03 00 00 00 DD 5E 04 DD 56 +R 00 00 01 00 00 06 02 00 +T 41 01 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 47 01 00 00 CD 00 00 00 00 F1 7D B4 20 54 +R 00 00 01 00 02 05 00 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 01 2F 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 59 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 5E 01 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 67 01 00 00 B4 20 0C +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 DD 6E 02 DD 66 03 DD 75 FE DD 74 +R 00 00 01 00 +T 75 01 00 00 FF +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 DD 6E FE DD 66 FF 36 00 21 06 00 +R 00 00 01 00 +T 81 01 00 00 39 7E C6 02 77 23 7E CE 00 77 +R 00 00 01 00 +T 8B 01 00 00 +R 00 00 01 00 +T 8B 01 00 00 DD 6E 04 DD 66 05 7E FE 2F 20 0A +R 00 00 01 00 +T 96 01 00 00 +R 00 00 01 00 +T 96 01 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 18 EB +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 C3 36 02 00 00 +R 00 00 01 00 00 05 01 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 01 07 00 00 00 DD 5E 04 DD 56 05 +R 00 00 01 00 00 05 02 00 +T AC 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T B2 01 00 00 00 00 00 00 7D B4 28 1A 21 02 00 +R 00 00 01 00 02 04 00 00 +T BB 01 00 00 E5 01 09 00 00 00 DD 5E 04 DD 56 +R 00 00 01 00 00 06 02 00 +T C4 01 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T CA 01 00 00 CD 00 00 00 00 F1 7D B4 20 1F +R 00 00 01 00 02 05 00 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T DA 01 00 00 +R 00 00 01 00 +T DA 01 00 00 +R 00 00 01 00 +T DA 01 00 00 DD 6E 04 DD 66 05 7E FE 2F 20 0A +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T ED 01 00 00 +R 00 00 01 00 +T ED 01 00 00 18 EB +R 00 00 01 00 +T EF 01 00 00 +R 00 00 01 00 +T EF 01 00 00 18 45 +R 00 00 01 00 +T F1 01 00 00 +R 00 00 01 00 +T F1 01 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T FC 01 00 00 74 FF 2B 36 2F +R 00 00 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 DD 6E 04 DD 66 05 7E FE 2F 28 2A +R 00 00 01 00 +T 0C 02 00 00 DD 6E 04 DD 66 05 AF B6 28 20 +R 00 00 01 00 +T 16 02 00 00 +R 00 00 01 00 +T 16 02 00 00 +R 00 00 01 00 +T 16 02 00 00 +R 00 00 01 00 +T 16 02 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T 21 02 00 00 74 05 2B 46 DD 6E FE DD 66 FF 23 +R 00 00 01 00 +T 2C 02 00 00 DD 75 FE DD 74 FF 2B 70 18 CB +R 00 00 01 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 C3 FE 00 00 00 +R 00 00 01 00 00 05 01 00 +T 39 02 00 00 +R 00 00 01 00 +T 39 02 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 44 02 00 00 74 FF 2B 36 00 C3 00 00 00 00 +R 00 00 01 00 02 0A 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2E 2E 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 2E 2E 2F 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 2E 00 +R 00 00 02 00 +T 09 00 00 00 +R 00 00 02 00 +T 09 00 00 00 2E 2F 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/perror.rel b/src/nos/lib/net_lib/perror.rel new file mode 100644 index 00000000..5341ddc1 --- /dev/null +++ b/src/nos/lib/net_lib/perror.rel @@ -0,0 +1,54 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strerror Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _Sock_errlist Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0158_7189__25s_3a_20_25s_0a Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 70 flags 0 +S _perror Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 01 64 80 2A +R 00 00 01 00 02 05 07 00 +T 07 00 00 00 00 00 00 00 3E 80 AC 67 ED 42 38 +R 00 00 01 00 02 04 08 00 +T 10 00 00 00 19 ED 4B 00 00 00 00 21 70 00 CD +R 00 00 01 00 02 07 08 00 +T 19 00 00 00 00 00 00 00 38 0D 69 60 29 01 +R 00 00 01 00 02 04 09 00 +T 21 00 00 00 38 FF FF FF 09 46 23 66 68 18 0C +R 00 00 01 00 02 04 0A 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 08 00 2B 0B 01 00 +T 30 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 E5 DD 6E 02 DD 66 03 E5 0E +R 00 00 01 00 +T 3F 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0C 00 02 0A 0C 00 +T 45 00 00 00 21 40 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 05 00 +T 4E 00 00 00 23 56 D5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 5B 00 00 00 F1 F1 F1 21 40 00 09 5E 23 56 3E +R 00 00 01 00 +T 66 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 6B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 03 00 diff --git a/src/nos/lib/net_lib/pipeopen.rel b/src/nos/lib/net_lib/pipeopen.rel new file mode 100644 index 00000000..8a90c79f --- /dev/null +++ b/src/nos/lib/net_lib/pipeopen.rel @@ -0,0 +1,51 @@ +XL4 +H 3 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fcreat Ref00000000 +S .__.ABS. Def00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5F flags 0 +S _pipeopen Def00000000 +A CSTR size 3 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 3E +R 00 00 01 00 02 05 05 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 0B 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T 14 00 00 00 B4 20 05 +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 21 00 00 18 40 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 08 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T 27 00 00 00 FF 23 36 FF 21 0E 00 09 36 05 21 +R 00 00 01 00 +T 32 00 00 00 0F 00 09 36 01 21 19 00 09 36 80 +R 00 00 01 00 +T 3D 00 00 00 23 36 00 01 00 00 00 00 21 16 00 +R 00 00 01 00 00 08 02 00 +T 46 00 00 00 DD 5E FE DD 56 FF 19 EB 3E +R 00 00 01 00 +T 4F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 54 00 00 00 00 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 00 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 0D 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/printf.rel b/src/nos/lib/net_lib/printf.rel new file mode 100644 index 00000000..f3dc40bc --- /dev/null +++ b/src/nos/lib/net_lib/printf.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _vfprintf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S _printf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 0E 00 39 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 02 00 09 DD 75 FC DD 74 FD E5 +R 00 00 01 00 +T 14 00 00 00 DD 4E 0A DD 46 0B 21 40 00 ED 5B +R 00 00 01 00 +T 1F 00 00 00 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 04 02 00 +T 26 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 2B 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 34 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/pull16.rel b/src/nos/lib/net_lib/pull16.rel new file mode 100644 index 00000000..4d31398a --- /dev/null +++ b/src/nos/lib/net_lib/pull16.rel @@ -0,0 +1,40 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _get16 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 40 flags 0 +S _pull16 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 02 00 E5 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 21 02 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 14 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 1A 00 00 00 CD 00 00 00 00 F1 3E 02 AD B4 28 +R 00 00 01 00 02 05 00 00 +T 23 00 00 00 08 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 01 FF FF 21 FF FF 18 11 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 34 00 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 3B 00 00 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/net_lib/pull32.rel b/src/nos/lib/net_lib/pull32.rel new file mode 100644 index 00000000..d80ecdef --- /dev/null +++ b/src/nos/lib/net_lib/pull32.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _get32 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3D flags 0 +S _pull32 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 04 00 E5 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 21 02 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 14 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 1A 00 00 00 CD 00 00 00 00 F1 3E 04 AD B4 28 +R 00 00 01 00 02 05 00 00 +T 23 00 00 00 08 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 01 00 00 21 00 00 18 0E +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 34 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/net_lib/pull8.rel b/src/nos/lib/net_lib/pull8.rel new file mode 100644 index 00000000..f8e5cee8 --- /dev/null +++ b/src/nos/lib/net_lib/pull8.rel @@ -0,0 +1,35 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S _pull8 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 01 00 E5 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 21 02 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 14 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 1A 00 00 00 CD 00 00 00 00 F1 3E 01 AD B4 28 +R 00 00 01 00 02 05 00 00 +T 23 00 00 00 05 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 21 FF FF 18 05 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 6E FE 26 00 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/pullup.rel b/src/nos/lib/net_lib/pullup.rel new file mode 100644 index 00000000..703e2506 --- /dev/null +++ b/src/nos/lib/net_lib/pullup.rel @@ -0,0 +1,160 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free_mbuf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19F flags 0 +S _pullup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF DD 71 FE DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 70 FF AF DD 77 FC DD 77 FD DD 7E +R 00 00 01 00 +T 14 00 00 00 02 DD B6 03 20 06 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 00 00 C3 9C 01 00 00 +R 00 00 01 00 00 08 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 7E 0A DD B6 0B CA 96 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 29 00 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T 34 00 00 00 75 F8 DD 74 F9 7D B4 CA +R 00 00 01 00 +T 3C 00 00 00 96 01 00 00 +R 00 00 01 00 00 04 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 21 0C 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T 49 00 00 00 23 56 DD 6E 0A DD 66 0B A7 ED 52 +R 00 00 01 00 +T 54 00 00 00 30 08 DD 6E 0A DD 66 0B 18 0E +R 00 00 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 21 0C 00 DD 4E F8 DD 46 F9 09 46 +R 00 00 01 00 +T 69 00 00 00 23 66 68 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 75 FA DD 74 FB DD 7E FE DD B6 +R 00 00 01 00 +T 77 00 00 00 FF 28 6A +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 3E 01 DD AE FA DD B6 FB 20 20 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 21 0A 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 8F 00 00 00 23 66 6F 46 DD 6E FE DD 66 FF 23 +R 00 00 01 00 +T 9A 00 00 00 DD 75 FE DD 74 FF 2B 70 18 40 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 DD 4E FA DD 46 FB 21 01 00 A7 ED +R 00 00 01 00 +T AF 00 00 00 42 30 32 +R 00 00 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 DD 6E FA DD 66 FB E5 21 0A 00 DD +R 00 00 01 00 +T BD 00 00 00 4E F8 DD 46 F9 09 4E 23 46 DD 5E +R 00 00 01 00 +T C8 00 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T CF 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T D6 00 00 00 06 00 39 7E DD 86 FA 77 23 7E DD +R 00 00 01 00 +T E1 00 00 00 8E FB 77 +R 00 00 01 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 21 04 00 39 7E DD 86 FA 77 23 7E +R 00 00 01 00 +T EF 00 00 00 DD 8E FB 77 21 12 00 39 7E DD 96 +R 00 00 01 00 +T FA 00 00 00 FA 77 23 7E DD 9E FB 77 21 0A 00 +R 00 00 01 00 +T 05 01 00 00 DD 4E F8 DD 46 F9 09 7E DD 86 FA +R 00 00 01 00 +T 10 01 00 00 77 23 7E DD 8E FB 77 21 0C 00 DD +R 00 00 01 00 +T 1B 01 00 00 4E F8 DD 46 F9 09 7E DD 96 FA 77 +R 00 00 01 00 +T 26 01 00 00 23 7E DD 9E FB 77 21 0C 00 DD 4E +R 00 00 01 00 +T 31 01 00 00 F8 DD 46 F9 09 7E 23 B6 20 58 +R 00 00 01 00 +T 3B 01 00 00 +R 00 00 01 00 +T 3B 01 00 00 DD 6E F8 DD 66 F9 7E 23 B6 20 34 +R 00 00 01 00 +T 46 01 00 00 DD 6E F8 DD 66 F9 23 23 7E 23 B6 +R 00 00 01 00 +T 51 01 00 00 28 27 +R 00 00 01 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 DD 6E F8 DD 66 F9 23 23 46 23 66 +R 00 00 01 00 +T 5E 01 00 00 68 E5 DD 6E 02 DD 66 03 C1 71 23 +R 00 00 01 00 +T 69 01 00 00 70 21 00 00 39 5D 54 3E +R 00 00 01 00 +T 71 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 76 01 00 00 00 00 00 00 18 19 +R 00 00 01 00 02 04 00 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 82 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 89 01 00 00 DD 6E 02 DD 66 03 C1 71 23 70 +R 00 00 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 C3 20 00 00 00 +R 00 00 01 00 00 05 01 00 +T 96 01 00 00 +R 00 00 01 00 +T 96 01 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 9C 01 00 00 +R 00 00 01 00 +T 9C 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/pushdown.rel b/src/nos/lib/net_lib/pushdown.rel new file mode 100644 index 00000000..44e6dd76 --- /dev/null +++ b/src/nos/lib/net_lib/pushdown.rel @@ -0,0 +1,105 @@ +XL4 +H 2 areas B global symbols +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S _Pushdowns Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _Pushalloc Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 124 flags 0 +S _pushdown Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 08 00 +T 06 00 00 00 00 00 00 00 ED 4B 02 00 00 00 CD +R 00 00 01 00 02 04 03 00 02 0A 03 00 +T 0D 00 00 00 00 00 00 00 22 00 00 00 00 ED 43 +R 00 00 01 00 02 04 04 00 02 09 03 00 +T 14 00 00 00 02 00 00 00 DD 7E 02 DD B6 03 20 +R 00 00 01 00 02 04 03 00 +T 1D 00 00 00 03 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 C3 21 01 00 00 +R 00 00 01 00 00 05 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T 2C 00 00 00 75 FE DD 74 FF 7D B4 28 67 21 +R 00 00 01 00 +T 36 00 00 00 06 00 DD 4E FE DD 46 FF 09 3E 01 +R 00 00 01 00 +T 41 00 00 00 AE 23 B6 20 56 21 08 00 DD 4E FE +R 00 00 01 00 +T 4C 00 00 00 DD 46 FF 09 7E 23 B6 20 47 21 +R 00 00 01 00 +T 56 00 00 00 0E 00 DD 4E FE DD 46 FF 09 EB 21 +R 00 00 01 00 +T 61 00 00 00 0A 00 09 46 23 66 68 A7 ED 52 DD +R 00 00 01 00 +T 6C 00 00 00 4E 0A DD 46 0B A7 ED 42 38 26 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 21 0A 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 81 00 00 00 DD 96 0A 77 23 7E DD 9E 0B 77 21 +R 00 00 01 00 +T 8C 00 00 00 0C 00 09 7E DD 86 0A 77 23 7E DD +R 00 00 01 00 +T 97 00 00 00 8E 0B 77 18 5A +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T A4 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T AB 00 00 00 DD 6E 02 DD 66 03 C1 71 23 70 DD +R 00 00 01 00 +T B6 00 00 00 6E 02 DD 66 03 7E 23 66 6F DD 4E +R 00 00 01 00 +T C1 00 00 00 FE DD 46 FF 71 23 70 DD 6E 02 DD +R 00 00 01 00 +T CC 00 00 00 66 03 56 23 66 6A DD 75 FE DD 74 +R 00 00 01 00 +T D7 00 00 00 FF 01 0C 00 09 DD 4E 0A DD 46 0B +R 00 00 01 00 +T E2 00 00 00 71 23 70 2A 00 00 00 00 ED 4B +R 00 00 01 00 02 08 07 00 +T EA 00 00 00 02 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 04 07 00 02 09 04 00 +T F0 00 00 00 00 00 00 00 ED 43 02 00 00 00 +R 00 00 01 00 02 04 07 00 02 0A 07 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 DD 7E 04 DD B6 05 28 23 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 09 01 00 00 46 05 21 0A 00 DD 5E FE DD 56 FF +R 00 00 01 00 +T 14 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 1B 01 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/net_lib/puts.rel b/src/nos/lib/net_lib/puts.rel new file mode 100644 index 00000000..49c1b935 --- /dev/null +++ b/src/nos/lib/net_lib/puts.rel @@ -0,0 +1,41 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _fputc Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _fputs Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3C flags 0 +S _puts Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 40 00 ED 4B +R 00 00 01 00 02 05 05 00 +T 08 00 00 00 00 00 00 00 09 4E 23 46 3E +R 00 00 01 00 02 04 02 00 +T 0F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 14 00 00 00 00 00 00 00 7D A4 3C 20 05 +R 00 00 01 00 02 04 00 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 21 FF FF 18 19 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 02 00 +T 29 00 00 00 23 46 11 0A 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 31 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 37 00 00 00 01 00 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/qdata.rel b/src/nos/lib/net_lib/qdata.rel new file mode 100644 index 00000000..b5a9bd43 --- /dev/null +++ b/src/nos/lib/net_lib/qdata.rel @@ -0,0 +1,32 @@ +XL4 +H 2 areas 8 global symbols +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4A flags 0 +S _qdata Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 59 50 3E +R 00 00 01 00 02 05 05 00 +T 08 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 0D 00 00 00 00 00 00 00 DD 75 FE DD 74 FF DD +R 00 00 01 00 02 04 01 00 +T 16 00 00 00 4E 04 DD 46 05 C5 DD 4E 02 DD 46 +R 00 00 01 00 +T 21 00 00 00 03 11 0A 00 19 5E 23 56 3E +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 2F 00 00 00 00 00 00 00 F1 21 0C 00 DD 4E FE +R 00 00 01 00 02 04 01 00 +T 38 00 00 00 DD 46 FF 09 DD 5E 04 DD 56 05 73 +R 00 00 01 00 +T 43 00 00 00 23 72 69 60 C3 00 00 00 00 +R 00 00 01 00 02 09 03 00 diff --git a/src/nos/lib/net_lib/read.rel b/src/nos/lib/net_lib/read.rel new file mode 100644 index 00000000..99025f72 --- /dev/null +++ b/src/nos/lib/net_lib/read.rel @@ -0,0 +1,82 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _asy_read Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _recv Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S __read Ref00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AF flags 0 +S _read Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 06 0D DD 5E +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 02 DD 56 03 CD 00 00 00 00 7B E6 +R 00 00 01 00 02 09 0A 00 +T 12 00 00 00 03 6F 7A E6 00 67 DD 75 FE DD 74 +R 00 00 01 00 +T 1D 00 00 00 FF DD CB 03 7E 28 0B +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 05 00 +T 2D 00 00 00 18 7D +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 38 00 00 00 00 00 03 00 A3 00 00 00 +R 00 00 01 00 00 08 01 00 +T 3E 00 00 00 44 00 00 00 62 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 42 00 00 00 85 00 00 00 +R 00 00 01 00 00 04 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 4F 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 58 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 5D 00 00 00 00 00 00 00 F1 18 4A +R 00 00 01 00 02 04 00 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 21 00 00 E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T 6D 00 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 78 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 7E 00 00 00 CD 00 00 00 00 F1 F1 18 27 +R 00 00 01 00 02 05 00 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 90 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 99 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 9E 00 00 00 00 00 00 00 F1 18 09 +R 00 00 01 00 02 04 00 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 05 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T AF 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/net_lib/recv_mbuf.rel b/src/nos/lib/net_lib/recv_mbuf.rel new file mode 100644 index 00000000..ee84372f --- /dev/null +++ b/src/nos/lib/net_lib/recv_mbuf.rel @@ -0,0 +1,58 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 87 flags 0 +S _recv_mbuf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 7D B4 20 0B +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 26 00 00 00 18 5C +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 33 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 3D 00 00 00 10 00 09 7E 23 B6 23 B6 20 0B +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 21 69 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 50 00 00 00 18 32 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 6E 0E DD 66 0F E5 DD 6E 0C DD +R 00 00 01 00 +T 5D 00 00 00 66 0D E5 DD 4E 04 DD 46 05 C5 DD +R 00 00 01 00 +T 68 00 00 00 5E FC DD 56 FD 21 10 00 DD 4E FE +R 00 00 01 00 +T 73 00 00 00 DD 46 FF 09 4E 23 46 23 7E 69 60 +R 00 00 01 00 +T 7E 00 00 00 C1 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 06 00 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/send_mbuf.rel b/src/nos/lib/net_lib/send_mbuf.rel new file mode 100644 index 00000000..cc644930 --- /dev/null +++ b/src/nos/lib/net_lib/send_mbuf.rel @@ -0,0 +1,105 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10C flags 0 +S _send_mbuf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 15 00 00 00 FA DD 74 FB 7D B4 20 1A +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 25 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 2C 00 00 00 09 00 22 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 07 03 00 +T 35 00 00 00 09 01 00 00 +R 00 00 01 00 00 04 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 21 08 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T 42 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 4C 00 00 00 13 00 09 7E 23 B6 23 B6 20 14 +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 5E 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 65 00 00 00 FF FF C3 09 01 00 00 +R 00 00 01 00 00 07 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 DD 7E 0C DD B6 0D 28 51 21 22 00 +R 00 00 01 00 +T 75 00 00 00 DD 4E FE DD 46 FF 09 7E 23 B6 23 +R 00 00 01 00 +T 80 00 00 00 B6 28 40 DD 4E 0E DD 46 0F C5 DD +R 00 00 01 00 +T 8B 00 00 00 5E 0C DD 56 0D 21 22 00 DD 4E FE +R 00 00 01 00 +T 96 00 00 00 DD 46 FF 09 4E 23 46 23 7E 69 60 +R 00 00 01 00 +T A1 00 00 00 C1 CD 00 00 00 00 7D A4 3C 20 19 +R 00 00 01 00 02 06 00 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T B2 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T B9 00 00 00 67 00 22 00 00 00 00 21 FF FF 18 +R 00 00 01 00 02 07 03 00 +T C2 00 00 00 46 +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 DD 6E 0C DD 66 0D E5 DD 4E 04 DD +R 00 00 01 00 +T CE 00 00 00 46 05 C5 DD 5E FA DD 56 FB 21 +R 00 00 01 00 +T D8 00 00 00 13 00 DD 4E FE DD 46 FF 09 4E 23 +R 00 00 01 00 +T E3 00 00 00 46 23 7E 69 60 C1 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T EC 00 00 00 F1 DD 75 FC DD 74 FD 7D A4 3C 20 +R 00 00 01 00 +T F7 00 00 00 0B +R 00 00 01 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 21 69 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 01 01 00 00 18 06 +R 00 00 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/setbuf.rel b/src/nos/lib/net_lib/setbuf.rel new file mode 100644 index 00000000..90ab8e1b --- /dev/null +++ b/src/nos/lib/net_lib/setbuf.rel @@ -0,0 +1,39 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setvbuf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 45 flags 0 +S _setbuf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 79 B0 20 1D +R 00 00 01 00 02 05 03 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 21 00 00 E5 21 03 00 E5 01 00 00 +R 00 00 01 00 +T 12 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 1A 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 21 00 00 00 F1 18 1E +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 21 80 00 E5 21 01 00 E5 DD 4E 04 +R 00 00 01 00 +T 2F 00 00 00 DD 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 39 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 3E 00 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 00 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/setencap.rel b/src/nos/lib/net_lib/setencap.rel new file mode 100644 index 00000000..1152d5f7 --- /dev/null +++ b/src/nos/lib/net_lib/setencap.rel @@ -0,0 +1,85 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S _Iftypes Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _strnicmp Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B2 flags 0 +S _setencap Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 36 FE +R 00 00 01 00 02 05 05 00 +T 08 00 00 00 00 00 00 00 DD 36 FF 00 00 00 00 +R 00 00 01 00 0B 04 04 00 8B 0B 04 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 DD 6E FE DD 66 FF 7E 23 B6 28 3C +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 20 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 27 00 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 32 00 00 00 FF 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 06 00 +T 39 00 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 40 00 00 00 B4 20 02 +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 18 0F +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 7E FE C6 21 DD 77 FE 30 03 DD +R 00 00 01 00 +T 50 00 00 00 34 FF +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 18 B9 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 6E FE DD 66 FF 7E 23 B6 20 05 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 21 FF FF 18 4B +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 7E 02 DD B6 03 28 40 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 21 3D 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 77 00 00 00 5E FE DD 56 FF 73 23 72 21 3F 00 +R 00 00 01 00 +T 82 00 00 00 09 E5 13 13 EB 5E 23 56 23 7E E1 +R 00 00 01 00 +T 8D 00 00 00 73 23 72 23 77 21 42 00 09 E5 21 +R 00 00 01 00 +T 98 00 00 00 05 00 DD 4E FE DD 46 FF 09 4E 23 +R 00 00 01 00 +T A3 00 00 00 46 23 56 E1 71 23 70 23 72 +R 00 00 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 21 00 00 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/seteol.rel b/src/nos/lib/net_lib/seteol.rel new file mode 100644 index 00000000..5ba44df3 --- /dev/null +++ b/src/nos/lib/net_lib/seteol.rel @@ -0,0 +1,55 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strncpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 58 flags 0 +S _seteol Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 12 DD 6E +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 02 DD 66 03 46 23 66 68 01 AD DE +R 00 00 01 00 +T 14 00 00 00 A7 ED 42 28 05 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 21 FF FF 18 37 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 7E 04 DD B6 05 28 20 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 21 03 00 E5 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T 31 00 00 00 16 00 DD 5E 02 DD 56 03 19 EB 3E +R 00 00 01 00 +T 3C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 41 00 00 00 00 00 00 00 F1 18 0C +R 00 00 01 00 02 04 00 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 21 16 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 51 00 00 00 00 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 21 00 00 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/settos.rel b/src/nos/lib/net_lib/settos.rel new file mode 100644 index 00000000..541907f8 --- /dev/null +++ b/src/nos/lib/net_lib/settos.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3C flags 0 +S _settos Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 0B +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 26 00 00 00 18 11 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 1A 00 DD 4E FE DD 46 FF 09 DD +R 00 00 01 00 +T 33 00 00 00 46 04 70 21 00 00 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/setvbuf.rel b/src/nos/lib/net_lib/setvbuf.rel new file mode 100644 index 00000000..60a114c9 --- /dev/null +++ b/src/nos/lib/net_lib/setvbuf.rel @@ -0,0 +1,82 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _fflush Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A6 flags 0 +S _setvbuf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 12 DD 6E +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 02 DD 66 03 46 23 66 68 01 AD DE +R 00 00 01 00 +T 14 00 00 00 A7 ED 42 28 06 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 21 FF FF C3 A3 00 00 00 +R 00 00 01 00 00 08 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 27 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 2E 00 00 00 7E 0C DD B6 0D 20 08 +R 00 00 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 DD 36 0A 03 DD 36 0B 00 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 DD 5E 0A DD 56 0B CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 46 00 00 00 01 00 03 00 8D 00 00 00 +R 00 00 01 00 00 08 01 00 +T 4C 00 00 00 52 00 00 00 67 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 50 00 00 00 7C 00 00 00 +R 00 00 01 00 00 04 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 21 19 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 5D 00 00 00 4E 0C DD 46 0D 71 23 70 18 2B +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 21 19 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 72 00 00 00 4E 0C DD 46 0D 71 23 70 18 16 +R 00 00 01 00 +T 7C 00 00 00 +R 00 00 01 00 +T 7C 00 00 00 21 19 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 87 00 00 00 01 23 36 00 18 05 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 21 FF FF 18 11 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 21 0F 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 9D 00 00 00 46 0A 70 21 00 00 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/showiface.rel b/src/nos/lib/net_lib/showiface.rel new file mode 100644 index 00000000..ee8d5b4b --- /dev/null +++ b/src/nos/lib/net_lib/showiface.rel @@ -0,0 +1,225 @@ +XL4 +H 3 areas 14 global symbols +S _inet_ntoa Ref00000000 +S ___0195_096e__2f_25u Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _secclock Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S ___0035_3fef__20_20_20_20_20_20_ Ref00000000 +S _len_q Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ___0037_c6d7__20_20_20_20_20_20_ Ref00000000 +S ___008a_f35d__20BUSY Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___00f4_3035__25_2d10s_20IP_20ad Ref00000000 +S __printf Ref00000000 +S ___0034_0534__20_20_20_20_20_20_ Ref00000000 +S ___0038_9d57__20_20_20_20_20_20_ Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0036_3164__20_20_20_20_20_20_ Ref00000000 +S _tformat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2B4 flags 0 +S _showiface Def00000000 +A CSTR size 8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E6 FF 21 3D 00 DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 4E 02 DD 46 03 09 7E 23 B6 28 0E +R 00 00 01 00 +T 14 00 00 00 21 3D 00 09 7E 23 66 6F 56 23 66 +R 00 00 01 00 +T 1F 00 00 00 6A 18 03 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 00 00 00 00 +R 00 00 01 00 00 05 02 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 E5 21 10 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 30 00 00 00 5E 23 56 D5 21 04 00 09 5E 23 56 +R 00 00 01 00 +T 3B 00 00 00 23 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 00 00 +T 42 00 00 00 00 00 00 00 CD 00 00 00 00 E5 DD +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 49 00 00 00 6E 02 DD 66 03 23 23 4E 23 46 C5 +R 00 00 01 00 +T 54 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0C 00 02 0B 0C 00 +T 5A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 60 00 00 00 CD 00 00 00 00 EB 21 0C 00 39 F9 +R 00 00 01 00 02 05 02 00 +T 69 00 00 00 EB 21 3D 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 74 00 00 00 7E 23 B6 28 6C 21 3D 00 DD 4E 02 +R 00 00 01 00 +T 7F 00 00 00 DD 46 03 09 46 23 66 68 01 08 00 +R 00 00 01 00 +T 8A 00 00 00 09 7E 23 B6 23 B6 28 53 21 37 00 +R 00 00 01 00 +T 95 00 00 00 DD 4E 02 DD 46 03 09 7E 23 B6 28 +R 00 00 01 00 +T A0 00 00 00 44 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 21 37 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T AC 00 00 00 23 46 C5 21 02 00 39 5D 54 21 +R 00 00 01 00 +T B6 00 00 00 3D 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T C1 00 00 00 66 68 01 08 00 09 4E 23 46 23 7E +R 00 00 01 00 +T CC 00 00 00 69 60 C1 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 08 02 00 +T D4 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0E 00 02 0A 0E 00 +T DA 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T E0 00 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T F0 00 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T F8 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 00 00 02 0A 02 00 +T FF 00 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 0A 01 00 00 23 56 23 4E 23 46 C5 D5 21 12 00 +R 00 00 01 00 +T 15 01 00 00 DD 4E 02 DD 46 03 09 5E 23 56 D5 +R 00 00 01 00 +T 20 01 00 00 1E 00 00 00 00 D5 21 00 00 00 00 +R 00 00 01 00 2B 05 0F 00 02 0B 0F 00 +T 26 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 2C 01 00 00 CD 00 00 00 00 EB 21 0C 00 39 F9 +R 00 00 01 00 02 05 02 00 +T 35 01 00 00 EB 21 16 00 09 7E 23 B6 28 26 +R 00 00 01 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 21 16 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 4A 01 00 00 23 66 68 23 23 4E 23 46 C5 0E +R 00 00 01 00 +T 54 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T 5A 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T 60 01 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 21 1E 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 70 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 75 01 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 06 00 02 09 02 00 +T 7C 01 00 00 61 00 09 4E 23 46 23 5E 23 56 69 +R 00 00 01 00 +T 87 01 00 00 60 D5 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 8D 01 00 00 00 00 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 02 04 03 00 02 09 02 00 +T 94 01 00 00 A7 C1 ED 42 EB C1 ED 42 4D 44 3E +R 00 00 01 00 +T 9F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T A4 01 00 00 00 00 00 00 E5 21 55 00 DD 4E 02 +R 00 00 01 00 02 04 02 00 +T AD 01 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T B8 01 00 00 C5 D5 21 51 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T C3 01 00 00 09 5E 23 56 23 4E 23 46 C5 D5 0E +R 00 00 01 00 +T CE 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 09 00 02 0A 09 00 +T D4 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T DA 01 00 00 00 00 00 00 EB 21 10 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T E3 01 00 00 21 20 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T EE 01 00 00 23 B6 28 20 +R 00 00 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 21 20 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T FD 01 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 01 00 +T 04 02 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 0D 00 +T 0A 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 02 00 +T 11 02 00 00 F1 +R 00 00 01 00 +T 12 02 00 00 +R 00 00 01 00 +T 12 02 00 00 21 22 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 1D 02 00 00 23 B6 28 11 +R 00 00 01 00 +T 21 02 00 00 +R 00 00 01 00 +T 21 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T 27 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 2D 02 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 02 00 +T 32 02 00 00 +R 00 00 01 00 +T 32 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 04 00 02 0B 04 00 +T 38 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 3E 02 00 00 CD 00 00 00 00 F1 F1 21 65 00 DD +R 00 00 01 00 02 05 02 00 +T 47 02 00 00 4E 02 DD 46 03 09 4E 23 46 23 5E +R 00 00 01 00 +T 52 02 00 00 23 56 69 60 D5 E5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 5A 02 00 00 21 00 00 00 00 CD 00 00 00 00 59 +R 00 00 01 00 02 05 03 00 02 0A 02 00 +T 61 02 00 00 50 A7 C1 ED 42 EB C1 ED 42 4D 44 +R 00 00 01 00 +T 6C 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T 72 02 00 00 00 00 00 00 E5 21 5D 00 DD 4E 02 +R 00 00 01 00 02 04 02 00 +T 7B 02 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 86 02 00 00 C5 D5 21 59 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 91 02 00 00 09 4E 23 46 23 5E 23 56 D5 C5 0E +R 00 00 01 00 +T 9C 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 11 00 02 0A 11 00 +T A2 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T A8 02 00 00 00 00 00 00 EB 21 0E 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T B1 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6E 6F 74 20 73 65 74 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/shutdown.rel b/src/nos/lib/net_lib/shutdown.rel new file mode 100644 index 00000000..ec7538b2 --- /dev/null +++ b/src/nos/lib/net_lib/shutdown.rel @@ -0,0 +1,86 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S _close_s Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B5 flags 0 +S _shutdown Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 7D B4 20 0C +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 26 00 00 00 C3 B2 00 00 00 +R 00 00 01 00 00 05 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 0C 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 34 00 00 00 23 B6 20 0B +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 21 65 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 41 00 00 00 18 6F +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 4E 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 58 00 00 00 1C 00 09 7E 23 B6 23 B6 20 10 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 6A 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 71 00 00 00 2C +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 DD 4E 04 DD 46 05 C5 DD 5E FC DD +R 00 00 01 00 +T 7D 00 00 00 56 FD 21 1C 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T 88 00 00 00 09 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 92 00 00 00 00 00 00 00 7D A4 3C 20 05 +R 00 00 01 00 02 04 00 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 FF FF 18 14 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 01 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T A8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T AD 00 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 00 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/sockcmd.rel b/src/nos/lib/net_lib/sockcmd.rel new file mode 100644 index 00000000..f1ca48ad --- /dev/null +++ b/src/nos/lib/net_lib/sockcmd.rel @@ -0,0 +1,218 @@ +XL4 +H 3 areas 13 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___013b_7be3__25s_20_25p_0a Ref00000000 +S ___0384_6556_Socket_20not_20in_2 Ref00000000 +S _Socktypes Ref00000000 +S _getpeername Ref00000000 +S ___0314_f8e2_Not_20a_20valid_20s Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S ___0370_4fbb_S_23_20_20_20Type_2 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _psocket Ref00000000 +S ___011a_b932__254d_20_25_2d8s_25 Ref00000000 +S _itop Ref00000000 +S ?SS_RSH_L02 Ref00000000 +S _Nsock Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 216 flags 0 +S _dosock Def00000000 +A CSTR size 1 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E4 FF 11 02 80 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 14 00 00 00 D2 26 01 00 00 +R 00 00 01 00 00 05 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T 1D 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 23 00 00 00 CD 00 00 00 00 F1 F1 AF DD 77 EA +R 00 00 01 00 02 05 00 00 +T 2C 00 00 00 DD 77 EB +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 ED 4B 00 00 00 00 DD 6E EA DD 66 +R 00 00 01 00 02 06 11 00 +T 38 00 00 00 EB A7 ED 42 D2 20 01 00 00 +R 00 00 01 00 00 09 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 7E EA F6 00 6F DD 7E EB F6 20 +R 00 00 01 00 +T 4A 00 00 00 67 DD 75 E6 DD 74 E7 EB 3E +R 00 00 01 00 +T 53 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 58 00 00 00 00 00 00 00 DD 75 E4 DD 74 E5 7D +R 00 00 01 00 02 04 00 00 +T 61 00 00 00 B4 20 03 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 C3 15 01 00 00 +R 00 00 01 00 00 05 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 DD 36 E8 10 DD 36 E9 00 21 04 00 +R 00 00 01 00 +T 72 00 00 00 39 E5 21 0A 00 39 4D 44 DD 5E E6 +R 00 00 01 00 +T 7D 00 00 00 DD 56 E7 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 83 00 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 8A 00 00 00 B4 20 1E DD 7E E8 DD B6 E9 28 16 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 08 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 9D 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0D 00 02 0A 00 00 +T A4 00 00 00 75 FE DD 74 FF 18 08 +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 DD 36 FE 00 00 00 00 DD 36 FF +R 00 00 01 00 09 07 02 00 +T B2 00 00 00 00 00 00 00 +R 00 00 01 00 89 04 02 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 DD 6E E4 DD 66 E5 23 23 46 23 66 +R 00 00 01 00 +T BE 00 00 00 68 01 2A 00 09 4E 23 46 C5 DD 6E +R 00 00 01 00 +T C9 00 00 00 E4 DD 66 E5 23 23 4E 23 46 C5 DD +R 00 00 01 00 +T D4 00 00 00 6E FE DD 66 FF E5 21 0C 00 DD 4E +R 00 00 01 00 +T DF 00 00 00 E4 DD 46 E5 09 5E 23 56 D5 21 +R 00 00 01 00 +T E9 00 00 00 07 00 09 6E 26 00 29 01 +R 00 00 01 00 +T F1 00 00 00 00 00 00 00 09 4E 23 46 C5 DD 6E +R 00 00 01 00 02 04 03 00 +T FA 00 00 00 E6 DD 66 E7 E5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 0E 00 +T 02 01 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 0E 00 2B 0B 0B 00 +T 08 01 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 0F 01 00 00 21 10 00 39 F9 EB +R 00 00 01 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 DD 34 EA 20 03 DD 34 EB +R 00 00 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 C3 2F 00 00 00 +R 00 00 01 00 00 05 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 21 00 00 C3 13 02 00 00 +R 00 00 01 00 00 08 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 31 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 37 01 00 00 00 00 00 00 DD 75 E6 DD 74 E7 06 +R 00 00 01 00 02 04 00 00 +T 40 01 00 00 0D EB CD 00 00 00 00 7B E6 03 6F +R 00 00 01 00 02 07 10 00 +T 49 01 00 00 7A E6 00 67 3E 01 AD B4 28 17 +R 00 00 01 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T 59 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 5F 01 00 00 CD 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 05 00 00 +T 68 01 00 00 13 02 00 00 +R 00 00 01 00 00 04 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 DD 5E E6 DD 56 E7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 72 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T 79 01 00 00 75 E4 DD 74 E5 7D B4 20 16 +R 00 00 01 00 +T 82 01 00 00 +R 00 00 01 00 +T 82 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 02 00 02 0B 02 00 +T 88 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 8E 01 00 00 CD 00 00 00 00 F1 F1 21 01 00 18 +R 00 00 01 00 02 05 00 00 +T 97 01 00 00 7B +R 00 00 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 21 08 00 DD 4E E4 DD 46 E5 09 56 +R 00 00 01 00 +T A3 01 00 00 23 66 6A DD 75 FC DD 74 FD 21 +R 00 00 01 00 +T AD 01 00 00 0C 00 09 5E 23 56 D5 21 07 00 09 +R 00 00 01 00 +T B8 01 00 00 6E 26 00 29 11 00 00 00 00 19 5E +R 00 00 01 00 02 09 03 00 +T C1 01 00 00 23 56 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 08 01 00 +T C8 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 0B 00 +T CE 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T D5 01 00 00 F1 F1 21 0C 00 09 7E 23 B6 20 05 +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 21 00 00 18 2E +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 21 2A 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T F0 01 00 00 23 B6 23 B6 28 1A +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 DD 5E E4 DD 56 E5 21 2A 00 DD 4E +R 00 00 01 00 +T 01 02 00 00 FC DD 46 FD 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 0C 02 00 00 60 CD 00 00 00 00 +R 00 00 01 00 02 06 00 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 21 00 00 +R 00 00 01 00 +T 13 02 00 00 +R 00 00 01 00 +T 13 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/socket.rel b/src/nos/lib/net_lib/socket.rel new file mode 100644 index 00000000..147baa73 --- /dev/null +++ b/src/nos/lib/net_lib/socket.rel @@ -0,0 +1,277 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Usock Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Socklink Ref00000000 +S _Nsock Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26F flags 0 +S _socket Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FE +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 DD 77 FF +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 ED 4B 00 00 00 00 DD 6E FE DD 66 +R 00 00 01 00 02 06 0B 00 +T 15 00 00 00 FF A7 ED 42 30 1D +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 DD 6E FE DD 66 FF 29 ED 4B +R 00 00 01 00 +T 24 00 00 00 00 00 00 00 09 7E 23 B6 20 02 +R 00 00 01 00 02 04 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 18 0A +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 18 D4 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 2A 00 00 00 00 DD 4E FE DD 46 FF +R 00 00 01 00 02 05 0B 00 +T 41 00 00 00 A7 ED 42 20 0C +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 21 18 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 06 00 +T 4F 00 00 00 C3 6C 02 00 00 +R 00 00 01 00 00 05 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 6E FE DD 66 FF 29 ED 4B +R 00 00 01 00 +T 5B 00 00 00 00 00 00 00 09 E5 01 1D 00 11 +R 00 00 01 00 02 04 01 00 +T 63 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 68 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 6F 00 00 00 FA DD 74 FB 4D 44 E1 71 23 70 DD +R 00 00 01 00 +T 7A 00 00 00 7E FE F6 00 6F DD 7E FF F6 20 67 +R 00 00 01 00 +T 85 00 00 00 DD 75 FE DD 74 FF E5 69 60 C1 71 +R 00 00 01 00 +T 90 00 00 00 23 70 21 04 00 DD 4E FA DD 46 FB +R 00 00 01 00 +T 9B 00 00 00 09 36 01 23 36 00 21 00 00 22 +R 00 00 01 00 +T A5 00 00 00 00 00 00 00 21 0A 00 09 36 FF 23 +R 00 00 01 00 02 04 06 00 +T AE 00 00 00 36 FF 69 60 23 23 ED 4B +R 00 00 01 00 +T B6 00 00 00 00 00 00 00 71 23 70 DD 5E 02 DD +R 00 00 01 00 02 04 04 00 +T BF 00 00 00 56 03 CD 00 00 00 00 00 00 04 00 +R 00 00 01 00 02 07 02 00 +T C8 00 00 00 C1 01 00 00 78 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T CC 00 00 00 09 01 00 00 40 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T D0 00 00 00 D2 00 00 00 +R 00 00 01 00 00 04 01 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 DD 4E 04 DD 46 05 79 B0 20 0E +R 00 00 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 21 07 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T E7 00 00 00 08 18 1C +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 3E 01 A9 B0 20 0E 21 07 00 DD 4E +R 00 00 01 00 +T F5 00 00 00 FA DD 46 FB 09 36 09 18 08 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 21 66 00 22 00 00 00 00 18 00 +R 00 00 01 00 02 08 06 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 C3 C9 01 00 00 +R 00 00 01 00 00 05 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 DD 4E 04 DD 46 05 79 B0 20 0E +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 21 07 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T 1E 01 00 00 03 18 1C +R 00 00 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 3E 01 A9 B0 20 0E 21 07 00 DD 4E +R 00 00 01 00 +T 2C 01 00 00 FA DD 46 FB 09 36 04 18 08 +R 00 00 01 00 +T 35 01 00 00 +R 00 00 01 00 +T 35 01 00 00 21 66 00 22 00 00 00 00 18 00 +R 00 00 01 00 02 08 06 00 +T 3D 01 00 00 +R 00 00 01 00 +T 3D 01 00 00 C3 C9 01 00 00 +R 00 00 01 00 00 05 01 00 +T 40 01 00 00 +R 00 00 01 00 +T 40 01 00 00 DD 4E 04 DD 46 05 3E 02 A9 B0 20 +R 00 00 01 00 +T 4B 01 00 00 0E +R 00 00 01 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 21 07 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T 57 01 00 00 06 18 1C +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 3E 03 A9 B0 20 0E 21 07 00 DD 4E +R 00 00 01 00 +T 65 01 00 00 FA DD 46 FB 09 36 07 18 08 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 21 66 00 22 00 00 00 00 18 00 +R 00 00 01 00 02 08 06 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 18 51 +R 00 00 01 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 DD 5E 04 DD 56 05 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 81 01 00 00 00 00 03 00 B7 01 00 00 +R 00 00 01 00 00 08 01 00 +T 87 01 00 00 8D 01 00 00 9B 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8B 01 00 00 A9 01 00 00 +R 00 00 01 00 00 04 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 21 07 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T 98 01 00 00 01 18 24 +R 00 00 01 00 +T 9B 01 00 00 +R 00 00 01 00 +T 9B 01 00 00 21 07 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T A6 01 00 00 02 18 16 +R 00 00 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 21 07 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T B4 01 00 00 05 18 08 +R 00 00 01 00 +T B7 01 00 00 +R 00 00 01 00 +T B7 01 00 00 21 66 00 22 00 00 00 00 18 00 +R 00 00 01 00 02 08 06 00 +T BF 01 00 00 +R 00 00 01 00 +T BF 01 00 00 18 08 +R 00 00 01 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 21 67 00 22 00 00 00 00 18 00 +R 00 00 01 00 02 08 06 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 DD 36 FC 00 00 00 00 DD 36 FD +R 00 00 01 00 0B 07 0A 00 +T D0 01 00 00 00 00 00 00 +R 00 00 01 00 8B 04 0A 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 DD 6E FC DD 66 FD 7E 23 A6 3C 28 +R 00 00 01 00 +T DC 01 00 00 2D +R 00 00 01 00 +T DD 01 00 00 +R 00 00 01 00 +T DD 01 00 00 21 07 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T E8 01 00 00 06 00 DD 6E FC DD 66 FD 56 23 66 +R 00 00 01 00 +T F3 01 00 00 6A A7 ED 42 20 02 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 18 0F +R 00 00 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 DD 7E FC C6 2F DD 77 FC 30 03 DD +R 00 00 01 00 +T 06 02 00 00 34 FD +R 00 00 01 00 +T 08 02 00 00 +R 00 00 01 00 +T 08 02 00 00 18 C7 +R 00 00 01 00 +T 0A 02 00 00 +R 00 00 01 00 +T 0A 02 00 00 21 08 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 15 02 00 00 4E FC DD 46 FD 71 23 70 0A 6F 03 +R 00 00 01 00 +T 20 02 00 00 0A 67 7D A4 3C 28 34 DD 6E FC DD +R 00 00 01 00 +T 2B 02 00 00 66 FD 23 23 7E 23 B6 23 B6 28 25 +R 00 00 01 00 +T 36 02 00 00 DD 4E 0A DD 46 0B C5 DD 5E FA DD +R 00 00 01 00 +T 41 02 00 00 56 FB DD 6E FC DD 66 FD 23 23 4E +R 00 00 01 00 +T 4C 02 00 00 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 54 02 00 00 00 00 00 00 7D A4 3C 20 0B +R 00 00 01 00 02 04 00 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 21 66 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 06 00 +T 64 02 00 00 18 06 +R 00 00 01 00 +T 66 02 00 00 +R 00 00 01 00 +T 66 02 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 6C 02 00 00 +R 00 00 01 00 +T 6C 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/net_lib/socketpair.rel b/src/nos/lib/net_lib/socketpair.rel new file mode 100644 index 00000000..ca3e2b5d --- /dev/null +++ b/src/nos/lib/net_lib/socketpair.rel @@ -0,0 +1,116 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _socket Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S _close_s Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 128 flags 0 +S _socketpair Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 7E 0C DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 B6 0D 20 0C +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 0E 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 16 00 00 00 C3 25 01 00 00 +R 00 00 01 00 00 05 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 3E 03 DD AE 02 DD B6 03 28 0C +R 00 00 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 21 67 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 2C 00 00 00 C3 25 01 00 00 +R 00 00 01 00 00 05 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 7E 04 DD B6 05 28 16 3E 01 DD +R 00 00 01 00 +T 3A 00 00 00 AE 04 DD B6 05 28 0C +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 21 66 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 04 00 +T 4A 00 00 00 C3 25 01 00 00 +R 00 00 01 00 00 05 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 58 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 61 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 66 00 00 00 00 00 00 00 F1 E5 DD 6E 0C DD 66 +R 00 00 01 00 02 04 00 00 +T 6F 00 00 00 0D C1 71 23 70 79 A0 3C 20 06 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 21 FF FF C3 25 01 00 00 +R 00 00 01 00 00 08 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 DD 6E 0C DD 66 0D 23 23 E5 DD 4E +R 00 00 01 00 +T 8A 00 00 00 0A DD 46 0B C5 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 95 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 9D 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T A4 00 00 00 4D 44 E1 71 23 70 79 A0 3C 20 16 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 DD 6E 0C DD 66 0D 5E 23 56 3E +R 00 00 01 00 +T B9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T BE 00 00 00 00 00 00 00 21 FF FF 18 60 +R 00 00 01 00 02 04 00 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 DD 6E 0C DD 66 0D 5E 23 56 3E +R 00 00 01 00 +T CF 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T D4 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 00 00 +T DD 00 00 00 4E 0C DD 46 0D 03 03 0A 5F 03 0A +R 00 00 01 00 +T E8 00 00 00 57 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T EE 00 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 05 00 00 +T F7 00 00 00 21 0C 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 02 01 00 00 23 66 6F DD 5E FE DD 56 FF 73 23 +R 00 00 01 00 +T 0D 01 00 00 72 21 0C 00 19 7E 23 66 6F 71 23 +R 00 00 01 00 +T 18 01 00 00 70 DD 6E 0C DD 66 0D 23 23 46 23 +R 00 00 01 00 +T 23 01 00 00 66 68 +R 00 00 01 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/sockinit.rel b/src/nos/lib/net_lib/sockinit.rel new file mode 100644 index 00000000..53abe1b2 --- /dev/null +++ b/src/nos/lib/net_lib/sockinit.rel @@ -0,0 +1,32 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Usock Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S .__.ABS. Def00000000 +S _callocw Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _Nsock Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S _sockinit Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 2A 00 00 00 00 7D B4 28 02 +R 00 00 01 00 02 07 01 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 18 12 +R 00 00 01 00 +T 0B 00 00 00 +R 00 00 01 00 +T 0B 00 00 00 01 02 00 ED 5B 00 00 00 00 3E +R 00 00 01 00 02 09 06 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 18 00 00 00 00 00 00 00 22 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 D1 C1 C3 00 00 00 00 +R 00 00 01 00 02 07 02 00 diff --git a/src/nos/lib/net_lib/sockkick.rel b/src/nos/lib/net_lib/sockkick.rel new file mode 100644 index 00000000..4a9c386f --- /dev/null +++ b/src/nos/lib/net_lib/sockkick.rel @@ -0,0 +1,62 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7C flags 0 +S _sockkick Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 7D B4 20 0B +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 26 00 00 00 18 51 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 33 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 3D 00 00 00 19 00 09 7E 23 B6 23 B6 20 0B +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 21 69 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 50 00 00 00 18 27 +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 5E FC DD 56 FD 21 19 00 DD 4E +R 00 00 01 00 +T 5D 00 00 00 FE DD 46 FF 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 68 00 00 00 60 CD 00 00 00 00 7D A4 3C 20 05 +R 00 00 01 00 02 06 00 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 21 00 00 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/socklen.rel b/src/nos/lib/net_lib/socklen.rel new file mode 100644 index 00000000..9a0f7084 --- /dev/null +++ b/src/nos/lib/net_lib/socklen.rel @@ -0,0 +1,95 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size CA flags 0 +S _socklen Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 36 FE FF +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 36 FF FF DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 14 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 19 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 00 00 +T 22 00 00 00 B4 20 0C +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 2E 00 00 00 C3 C7 00 00 00 +R 00 00 01 00 00 05 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 21 0C 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 3C 00 00 00 23 B6 20 0B +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 65 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 49 00 00 00 18 7C +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 DD CB 05 7E 20 0E DD 4E 04 DD 46 +R 00 00 01 00 +T 56 00 00 00 05 21 01 00 CD 00 00 00 00 30 0B +R 00 00 01 00 02 09 05 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 68 00 00 00 18 5D +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 21 08 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T 75 00 00 00 23 66 68 DD 75 FC DD 74 FD 01 +R 00 00 01 00 +T 7F 00 00 00 16 00 09 7E 23 B6 23 B6 28 2D DD +R 00 00 01 00 +T 8A 00 00 00 4E 04 DD 46 05 C5 DD 5E FA DD 56 +R 00 00 01 00 +T 95 00 00 00 FB 21 16 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T A0 00 00 00 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T A9 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 00 00 +T B2 00 00 00 A4 3C 20 0B +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 21 69 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T BF 00 00 00 18 06 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T C7 00 00 00 +R 00 00 01 00 +T C7 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/sockowner.rel b/src/nos/lib/net_lib/sockowner.rel new file mode 100644 index 00000000..c5bc20bc --- /dev/null +++ b/src/nos/lib/net_lib/sockowner.rel @@ -0,0 +1,50 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5C flags 0 +S _sockowner Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 15 00 00 00 FC DD 74 FD 7D B4 20 0B +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 03 00 +T 26 00 00 00 18 31 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 6E FC DD 66 FD 23 23 46 23 66 +R 00 00 01 00 +T 33 00 00 00 68 DD 75 FE DD 74 FF DD 7E 04 DD +R 00 00 01 00 +T 3E 00 00 00 B6 05 28 11 +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 DD 6E FC DD 66 FD 23 23 DD 4E 04 +R 00 00 01 00 +T 4D 00 00 00 DD 46 05 71 23 70 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/sockuser.rel b/src/nos/lib/net_lib/sockuser.rel new file mode 100644 index 00000000..d2105a23 --- /dev/null +++ b/src/nos/lib/net_lib/sockuser.rel @@ -0,0 +1,186 @@ +XL4 +H 2 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _qdata Ref00000000 +S _getpeername Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _send_mbuf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _recv_mbuf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F4 flags 0 +S _sendto Def000001A6 +S _recvfrom Def0000009B +S _send Def0000012E +S _recv Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 7E 0A DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 B6 0B 20 06 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 00 00 C3 98 00 00 00 +R 00 00 01 00 00 08 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 21 00 00 E5 21 00 00 E5 DD 6E 0C +R 00 00 01 00 +T 1E 00 00 00 DD 66 0D E5 21 06 00 39 4D 44 DD +R 00 00 01 00 +T 29 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T 31 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 38 00 00 00 F1 DD 75 FE DD 74 FF 4D 44 21 +R 00 00 01 00 +T 42 00 00 00 00 00 CD 00 00 00 00 30 49 +R 00 00 01 00 02 07 07 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 4E 0A DD 46 0B DD 6E FE DD 66 +R 00 00 01 00 +T 54 00 00 00 FF CD 00 00 00 00 30 08 DD 6E FE +R 00 00 01 00 02 06 07 00 +T 5D 00 00 00 DD 66 FF 18 06 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 DD 75 FE DD 74 FF E5 DD 4E 04 DD +R 00 00 01 00 +T 73 00 00 00 46 05 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 7C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 81 00 00 00 00 00 00 00 F1 21 00 00 39 5D 54 +R 00 00 01 00 02 04 00 00 +T 8A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 90 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 CD 00 00 00 00 FC FF DD 6E 10 DD +R 00 00 01 00 02 05 06 00 +T A4 00 00 00 66 11 E5 DD 6E 0E DD 66 0F E5 DD +R 00 00 01 00 +T AF 00 00 00 6E 0C DD 66 0D E5 21 06 00 39 4D +R 00 00 01 00 +T BA 00 00 00 44 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T C2 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T C7 00 00 00 00 00 00 00 F1 F1 F1 DD 75 FE DD +R 00 00 01 00 02 04 00 00 +T D0 00 00 00 74 FF 4D 44 21 00 00 CD +R 00 00 01 00 +T D8 00 00 00 00 00 00 00 30 49 +R 00 00 01 00 02 04 07 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 DD 4E 0A DD 46 0B DD 6E FE DD 66 +R 00 00 01 00 +T E7 00 00 00 FF CD 00 00 00 00 30 08 DD 6E FE +R 00 00 01 00 02 06 07 00 +T F0 00 00 00 DD 66 FF 18 06 +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 +T FB 00 00 00 +R 00 00 01 00 +T FB 00 00 00 DD 75 FE DD 74 FF E5 DD 4E 04 DD +R 00 00 01 00 +T 06 01 00 00 46 05 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 0F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 14 01 00 00 00 00 00 00 F1 21 00 00 39 5D 54 +R 00 00 01 00 02 04 00 00 +T 1D 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 23 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 CD 00 00 00 00 EC FF DD 36 FE 10 +R 00 00 01 00 02 05 06 00 +T 37 01 00 00 DD 36 FF 00 21 12 00 39 E5 21 +R 00 00 01 00 +T 41 01 00 00 04 00 39 4D 44 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 4C 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 52 01 00 00 00 00 00 00 F1 7D A4 3C 20 05 +R 00 00 01 00 02 04 00 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 21 FF FF 18 44 +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 DD 4E 0A DD 46 0B DD 5E 04 DD 56 +R 00 00 01 00 +T 6A 01 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 70 01 00 00 CD 00 00 00 00 DD 75 EC DD 74 ED +R 00 00 01 00 02 05 00 00 +T 79 01 00 00 DD 4E FE DD 46 FF C5 21 04 00 39 +R 00 00 01 00 +T 84 01 00 00 E5 DD 6E 0C DD 66 0D E5 21 06 00 +R 00 00 01 00 +T 8F 01 00 00 39 4D 44 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 99 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 9E 01 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 CD 00 00 00 00 FE FF DD 4E 0A DD +R 00 00 01 00 02 05 06 00 +T AF 01 00 00 46 0B DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T B8 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T BD 01 00 00 00 00 00 00 DD 75 FE DD 74 FF DD +R 00 00 01 00 02 04 00 00 +T C6 01 00 00 4E 10 DD 46 11 C5 DD 4E 0E DD 46 +R 00 00 01 00 +T D1 01 00 00 0F C5 DD 4E 0C DD 46 0D C5 21 +R 00 00 01 00 +T DB 01 00 00 06 00 39 4D 44 DD 5E 02 DD 56 03 +R 00 00 01 00 +T E6 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T EC 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T F2 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 diff --git a/src/nos/lib/net_lib/sockutil.rel b/src/nos/lib/net_lib/sockutil.rel new file mode 100644 index 00000000..9d5147ff --- /dev/null +++ b/src/nos/lib/net_lib/sockutil.rel @@ -0,0 +1,241 @@ +XL4 +H 2 areas 13 global symbols +S _Psock Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Usock Ref00000000 +S _mbuf_crunch Ref00000000 +S _Badsocket Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SS_RSH_L02 Ref00000000 +S _Nsock Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 216 flags 0 +S _st_garbage Def000001AE +S _sockstate Def000000CD +S _sockerr Def00000058 +S _psocket Def00000000 +S _itop Def00000156 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF 23 CB 7E +R 00 00 01 00 +T 14 00 00 00 20 15 DD 6E FE DD 66 FF 46 23 66 +R 00 00 01 00 +T 1F 00 00 00 68 01 04 80 3E 80 AC 67 ED 42 38 +R 00 00 01 00 +T 2A 00 00 00 05 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 00 00 18 25 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 5E FE DD 56 FF D5 DD 6E FE DD +R 00 00 01 00 +T 3B 00 00 00 66 FF 4E 23 46 11 03 00 CD +R 00 00 01 00 +T 44 00 00 00 00 00 00 00 21 00 00 00 00 19 4E +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 4B 00 00 00 23 46 23 7E 69 60 D1 CD +R 00 00 01 00 +T 53 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 09 00 +T 61 00 00 00 56 03 3E 56 01 00 00 21 +R 00 00 01 00 29 07 01 00 +T 66 00 00 00 56 01 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 6D 00 00 00 FC DD 74 FD 7D B4 20 0B +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 21 09 00 22 00 00 00 00 21 +R 00 00 01 00 02 08 08 00 +T 7C 00 00 00 00 00 00 00 18 4A +R 00 00 01 00 02 04 04 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 8B 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 95 00 00 00 25 00 09 7E 23 B6 28 24 +R 00 00 01 00 +T 9D 00 00 00 +R 00 00 01 00 +T 9D 00 00 00 21 16 00 DD 4E FC DD 46 FD 09 6E +R 00 00 01 00 +T A8 00 00 00 26 00 29 E5 21 25 00 DD 4E FE DD +R 00 00 01 00 +T B3 00 00 00 46 FF 09 4E 23 46 E1 09 46 23 66 +R 00 00 01 00 +T BE 00 00 00 68 18 09 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 21 69 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 08 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 09 00 +T D6 00 00 00 56 03 3E 56 01 00 00 21 +R 00 00 01 00 29 07 01 00 +T DB 00 00 00 56 01 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T E2 00 00 00 FC DD 74 FD 7D B4 20 0B +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 21 09 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 08 00 +T F3 00 00 00 18 5E +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 21 0C 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 00 01 00 00 23 B6 20 0B +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 21 65 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 08 00 +T 0D 01 00 00 18 44 +R 00 00 01 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 21 08 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 1A 01 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 24 01 00 00 27 00 09 7E 23 B6 23 B6 28 1C +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 DD 5E FC DD 56 FD 21 27 00 DD 4E +R 00 00 01 00 +T 39 01 00 00 FE DD 46 FF 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 44 01 00 00 60 CD 00 00 00 00 18 09 +R 00 00 01 00 02 06 01 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 21 69 00 22 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 08 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 CD 00 00 00 00 CB 7A 20 19 06 0D +R 00 00 01 00 02 05 07 00 +T 5F 01 00 00 DD 5E 02 DD 56 03 CD 00 00 00 00 +R 00 00 01 00 02 0B 0C 00 +T 68 01 00 00 7B E6 03 6F 7A E6 00 67 3E 01 AD +R 00 00 01 00 +T 73 01 00 00 B4 28 05 +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 21 00 00 18 30 +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 DD 7E 02 E6 FF 6F DD 7E 03 E6 1F +R 00 00 01 00 +T 86 01 00 00 67 DD 75 02 DD 74 03 ED 4B +R 00 00 01 00 +T 8F 01 00 00 00 00 00 00 A7 ED 42 38 05 +R 00 00 01 00 02 04 0D 00 +T 96 01 00 00 +R 00 00 01 00 +T 96 01 00 00 21 00 00 18 10 +R 00 00 01 00 +T 9B 01 00 00 +R 00 00 01 00 +T 9B 01 00 00 DD 6E 02 DD 66 03 29 ED 4B +R 00 00 01 00 +T A4 01 00 00 00 00 00 00 09 46 23 66 68 +R 00 00 01 00 02 04 02 00 +T AB 01 00 00 +R 00 00 01 00 +T AB 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 CD 00 00 00 00 FC FF AF DD 77 FC +R 00 00 01 00 02 05 09 00 +T B7 01 00 00 DD 77 FD +R 00 00 01 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 ED 4B 00 00 00 00 DD 6E FC DD 66 +R 00 00 01 00 02 06 0D 00 +T C3 01 00 00 FD A7 ED 42 30 4A +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 DD 6E FC DD 66 FD 29 ED 4B +R 00 00 01 00 +T D2 01 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 02 04 02 00 +T DB 01 00 00 FE DD 74 FF 7D B4 28 26 21 07 00 +R 00 00 01 00 +T E6 01 00 00 DD 4E FE DD 46 FF 09 7E FE 08 20 +R 00 00 01 00 +T F1 01 00 00 17 +R 00 00 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 21 0C 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T FD 01 00 00 23 56 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 04 02 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 09 02 00 00 +R 00 00 01 00 +T 09 02 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 11 02 00 00 +R 00 00 01 00 +T 11 02 00 00 18 A7 +R 00 00 01 00 +T 13 02 00 00 +R 00 00 01 00 +T 13 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/net_lib/timer.rel b/src/nos/lib/net_lib/timer.rel new file mode 100644 index 00000000..caacae86 --- /dev/null +++ b/src/nos/lib/net_lib/timer.rel @@ -0,0 +1,712 @@ +XL4 +H 4 areas 24 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _sprintf Ref00000000 +S ?SL_DIVASG_L03 Ref00000000 +S _istate Ref00000000 +S _Tick Ref00000000 +S ?L_NEG_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alert Ref00000000 +S ___031f_5b48_PANIC_3a_20Timer_20 Ref00000000 +S _iostop Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _rdclock Ref00000000 +S _dirps Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?L_MUL_L03 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?SL_MOD_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _Cfunc Ref00000000 +S __printf Ref00000000 +S ___05b5_d29c_timer_3a_20ints_20w Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _exit Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 691 flags 0 +S _stop_timer Def0000030B +S _set_timer Def0000043F +S _ppause Def000004B5 +S _timerproc Def00000000 +S _read_timer Def000003B7 +S _start_timer Def000001E4 +S _kalarm Def00000542 +S _tformat Def00000598 +A CSTR size 12 flags 0 +A UDATA0 size 15 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF +R 00 00 01 00 02 05 14 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0F 00 02 0A 0F 00 +T 0B 00 00 00 00 00 00 00 DD 75 F8 DD 74 F9 2A +R 00 00 01 00 02 04 00 00 +T 14 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 05 00 +T 1D 00 00 00 B4 28 17 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 2A 00 00 00 00 2B 22 00 00 00 00 +R 00 00 01 00 02 05 05 00 02 0B 05 00 +T 27 00 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 2F 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 36 00 00 00 1B +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 3F 00 00 00 21 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 46 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 2B 09 0D 00 +T 4B 00 00 00 00 00 00 00 CD 00 00 00 00 18 B3 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 58 00 00 00 00 00 00 00 7D B4 20 1C +R 00 00 01 00 02 04 00 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 64 00 00 00 00 00 00 00 CD 00 00 00 00 0E +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 6A 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 18 00 02 0A 18 00 +T 70 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T 76 00 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 00 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 DD 36 F6 00 00 00 00 DD 36 F7 +R 00 00 01 00 0B 07 16 00 +T 81 00 00 00 00 00 00 00 +R 00 00 01 00 8B 04 16 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 6E F6 DD 66 F7 7E 23 B6 23 B6 +R 00 00 01 00 +T 8D 00 00 00 28 1F +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 6E F6 DD 66 F7 4E 23 46 23 7E +R 00 00 01 00 +T 9A 00 00 00 69 60 CD 00 00 00 00 DD 7E F6 C6 +R 00 00 01 00 02 07 00 00 +T A3 00 00 00 03 DD 77 F6 30 03 DD 34 F7 +R 00 00 01 00 +T AC 00 00 00 +R 00 00 01 00 +T AC 00 00 00 18 D4 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0D 00 +T B4 00 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T BA 00 00 00 00 00 00 00 7D B4 20 03 +R 00 00 01 00 00 04 03 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 C3 05 00 00 00 +R 00 00 01 00 00 05 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 AF DD 77 F4 DD 77 F5 3E +R 00 00 01 00 +T CB 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T D0 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 00 00 +T D9 00 00 00 71 FE DD 70 FF +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 2A 00 00 00 00 7D B4 CA +R 00 00 01 00 00 05 03 00 +T E4 00 00 00 88 01 00 00 21 06 00 ED 4B +R 00 00 01 00 00 04 01 00 +T EB 00 00 00 00 00 00 00 09 4E 23 46 23 5E 23 +R 00 00 01 00 00 04 03 00 +T F4 00 00 00 56 69 60 4D 44 DD 6E FC DD 66 FD +R 00 00 01 00 +T FF 00 00 00 A7 ED 42 4D 44 DD 6E FE DD 66 FF +R 00 00 01 00 +T 0A 01 00 00 ED 52 CB 7C 20 78 +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 2A 00 00 00 00 46 23 66 68 ED 4B +R 00 00 01 00 00 05 03 00 +T 19 01 00 00 00 00 00 00 A7 ED 42 20 2E +R 00 00 01 00 00 04 03 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 2A 00 00 00 00 01 00 00 C5 E5 0E +R 00 00 01 00 00 05 03 00 +T 29 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 09 00 02 0A 09 00 +T 2F 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T 35 01 00 00 00 00 00 00 F1 F1 F1 F1 3E +R 00 00 01 00 02 04 00 00 +T 3C 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 41 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 47 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T 4C 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 2A 00 00 00 00 DD 75 F2 DD 74 F3 +R 00 00 01 00 00 05 03 00 +T 57 01 00 00 EB 3E 0B 03 00 00 21 0B 03 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T 5D 01 00 00 CD 00 00 00 00 21 0F 00 DD 4E F2 +R 00 00 01 00 02 05 00 00 +T 66 01 00 00 DD 46 F3 09 36 02 DD 6E F4 DD 66 +R 00 00 01 00 +T 71 01 00 00 F5 E5 69 60 C1 71 23 70 DD 6E F2 +R 00 00 01 00 +T 7C 01 00 00 DD 66 F3 DD 75 F4 DD 74 F5 C3 +R 00 00 01 00 +T 86 01 00 00 DE 00 00 00 +R 00 00 01 00 00 04 01 00 +T 88 01 00 00 +R 00 00 01 00 +T 88 01 00 00 +R 00 00 01 00 +T 88 01 00 00 DD 6E F4 DD 66 F5 DD 75 F2 DD 74 +R 00 00 01 00 +T 93 01 00 00 F3 7D B4 28 3E +R 00 00 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 DD 6E F2 DD 66 F3 46 23 66 68 DD +R 00 00 01 00 +T A3 01 00 00 75 F4 DD 74 F5 21 0A 00 DD 4E F2 +R 00 00 01 00 +T AE 01 00 00 DD 46 F3 09 7E 23 B6 23 B6 28 1B +R 00 00 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 21 0D 00 DD 4E F2 DD 46 F3 09 5E +R 00 00 01 00 +T C4 01 00 00 23 56 21 0A 00 09 4E 23 46 23 7E +R 00 00 01 00 +T CF 01 00 00 69 60 CD 00 00 00 00 +R 00 00 01 00 02 07 00 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 18 B2 +R 00 00 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0D 00 +T DC 01 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T E2 01 00 00 05 00 00 00 +R 00 00 01 00 00 04 01 00 +T E4 01 00 00 +R 00 00 01 00 +T E4 01 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 14 00 +T ED 01 00 00 DD 77 FF DD 7E 02 DD B6 03 20 03 +R 00 00 01 00 +T F8 01 00 00 +R 00 00 01 00 +T F8 01 00 00 C3 08 03 00 00 +R 00 00 01 00 00 05 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 21 0F 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 06 02 00 00 05 20 0E +R 00 00 01 00 +T 09 02 00 00 +R 00 00 01 00 +T 09 02 00 00 DD 5E 02 DD 56 03 3E 0B 03 00 00 +R 00 00 01 00 29 0B 01 00 +T 11 02 00 00 21 0B 03 00 00 CD 00 00 00 00 +R 00 00 01 00 00 05 01 00 02 0A 00 00 +T 17 02 00 00 +R 00 00 01 00 +T 17 02 00 00 DD 6E 02 DD 66 03 23 23 7E 23 B6 +R 00 00 01 00 +T 22 02 00 00 23 B6 23 B6 20 03 +R 00 00 01 00 +T 28 02 00 00 +R 00 00 01 00 +T 28 02 00 00 C3 08 03 00 00 +R 00 00 01 00 00 05 01 00 +T 2B 02 00 00 +R 00 00 01 00 +T 2B 02 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 36 02 00 00 23 5E 23 56 D5 C5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 3E 02 00 00 21 00 00 00 00 CD 00 00 00 00 59 +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T 45 02 00 00 50 C1 09 EB C1 ED 4A 4D 44 EB E5 +R 00 00 01 00 +T 50 02 00 00 21 06 00 DD 5E 02 DD 56 03 19 D1 +R 00 00 01 00 +T 5B 02 00 00 73 23 72 23 71 23 70 21 0F 00 DD +R 00 00 01 00 +T 66 02 00 00 4E 02 DD 46 03 09 36 01 2A +R 00 00 01 00 +T 6F 02 00 00 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 00 04 03 00 +T 77 02 00 00 +R 00 00 01 00 +T 77 02 00 00 DD 7E FC DD B6 FD 28 54 +R 00 00 01 00 +T 7F 02 00 00 +R 00 00 01 00 +T 7F 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 8A 02 00 00 23 46 23 5E 23 56 69 60 D5 E5 21 +R 00 00 01 00 +T 95 02 00 00 06 00 DD 4E FC DD 46 FD 09 4E 23 +R 00 00 01 00 +T A0 02 00 00 46 23 5E 23 56 69 60 A7 C1 ED 42 +R 00 00 01 00 +T AB 02 00 00 EB C1 ED 42 CB 7C 20 02 +R 00 00 01 00 +T B3 02 00 00 +R 00 00 01 00 +T B3 02 00 00 18 1E +R 00 00 01 00 +T B5 02 00 00 +R 00 00 01 00 +T B5 02 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T C0 02 00 00 FF DD 6E FC DD 66 FD 46 23 66 68 +R 00 00 01 00 +T CB 02 00 00 DD 75 FC DD 74 FD 18 A4 +R 00 00 01 00 +T D3 02 00 00 +R 00 00 01 00 +T D3 02 00 00 DD 7E FE DD B6 FF 20 0B +R 00 00 01 00 +T DB 02 00 00 +R 00 00 01 00 +T DB 02 00 00 DD 6E 02 DD 66 03 22 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T E4 02 00 00 18 11 +R 00 00 01 00 +T E6 02 00 00 +R 00 00 01 00 +T E6 02 00 00 DD 6E 02 DD 66 03 E5 DD 6E FE DD +R 00 00 01 00 +T F1 02 00 00 66 FF C1 71 23 70 +R 00 00 01 00 +T F7 02 00 00 +R 00 00 01 00 +T F7 02 00 00 DD 6E FC DD 66 FD E5 DD 6E 02 DD +R 00 00 01 00 +T 02 03 00 00 66 03 C1 71 23 70 +R 00 00 01 00 +T 08 03 00 00 +R 00 00 01 00 +T 08 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 0B 03 00 00 +R 00 00 01 00 +T 0B 03 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 14 00 +T 14 03 00 00 DD 77 FF DD 7E 02 DD B6 03 28 0E +R 00 00 01 00 +T 1F 03 00 00 21 0F 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 2A 03 00 00 05 28 03 +R 00 00 01 00 +T 2D 03 00 00 +R 00 00 01 00 +T 2D 03 00 00 +R 00 00 01 00 +T 2D 03 00 00 +R 00 00 01 00 +T 2D 03 00 00 C3 B4 03 00 00 +R 00 00 01 00 00 05 01 00 +T 30 03 00 00 +R 00 00 01 00 +T 30 03 00 00 2A 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 00 05 03 00 +T 39 03 00 00 +R 00 00 01 00 +T 39 03 00 00 DD 7E FC DD B6 FD 28 31 +R 00 00 01 00 +T 41 03 00 00 +R 00 00 01 00 +T 41 03 00 00 DD 6E 02 DD 66 03 DD 4E FC DD 46 +R 00 00 01 00 +T 4C 03 00 00 FD A7 ED 42 20 02 +R 00 00 01 00 +T 52 03 00 00 +R 00 00 01 00 +T 52 03 00 00 18 1E +R 00 00 01 00 +T 54 03 00 00 +R 00 00 01 00 +T 54 03 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 5F 03 00 00 FF DD 6E FC DD 66 FD 46 23 66 68 +R 00 00 01 00 +T 6A 03 00 00 DD 75 FC DD 74 FD 18 C7 +R 00 00 01 00 +T 72 03 00 00 +R 00 00 01 00 +T 72 03 00 00 DD 7E FC DD B6 FD 20 02 +R 00 00 01 00 +T 7A 03 00 00 +R 00 00 01 00 +T 7A 03 00 00 18 38 +R 00 00 01 00 +T 7C 03 00 00 +R 00 00 01 00 +T 7C 03 00 00 DD 7E FE DD B6 FF 28 17 +R 00 00 01 00 +T 84 03 00 00 +R 00 00 01 00 +T 84 03 00 00 DD 6E FC DD 66 FD 46 23 66 68 E5 +R 00 00 01 00 +T 8F 03 00 00 DD 6E FE DD 66 FF C1 71 23 70 18 +R 00 00 01 00 +T 9A 03 00 00 0D +R 00 00 01 00 +T 9B 03 00 00 +R 00 00 01 00 +T 9B 03 00 00 DD 6E FC DD 66 FD 46 23 66 68 22 +R 00 00 01 00 +T A6 03 00 00 00 00 00 00 +R 00 00 01 00 00 04 03 00 +T A8 03 00 00 +R 00 00 01 00 +T A8 03 00 00 21 0F 00 DD 4E FC DD 46 FD 09 36 +R 00 00 01 00 +T B3 03 00 00 00 +R 00 00 01 00 +T B4 03 00 00 +R 00 00 01 00 +T B4 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T B7 03 00 00 +R 00 00 01 00 +T B7 03 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 14 00 +T C0 03 00 00 B6 03 28 0E 21 0F 00 DD 4E 02 DD +R 00 00 01 00 +T CB 03 00 00 46 03 09 46 05 28 08 +R 00 00 01 00 +T D2 03 00 00 +R 00 00 01 00 +T D2 03 00 00 +R 00 00 01 00 +T D2 03 00 00 +R 00 00 01 00 +T D2 03 00 00 01 00 00 21 00 00 18 62 +R 00 00 01 00 +T DA 03 00 00 +R 00 00 01 00 +T DA 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0E 00 02 0A 0E 00 +T E0 03 00 00 00 00 00 00 59 50 D5 E5 21 06 00 +R 00 00 01 00 02 04 00 00 +T E9 03 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T F4 03 00 00 5E 23 56 69 60 A7 C1 ED 42 EB C1 +R 00 00 01 00 +T FF 03 00 00 ED 42 4D 44 EB DD 75 FC DD 74 FD +R 00 00 01 00 +T 0A 04 00 00 DD 71 FE DD 70 FF C5 E5 01 00 00 +R 00 00 01 00 +T 15 04 00 00 21 00 00 CD 00 00 00 00 38 08 +R 00 00 01 00 02 08 12 00 +T 1D 04 00 00 +R 00 00 01 00 +T 1D 04 00 00 01 00 00 21 00 00 18 17 +R 00 00 01 00 +T 25 04 00 00 +R 00 00 01 00 +T 25 04 00 00 21 00 00 E5 21 37 00 E5 DD 4E FE +R 00 00 01 00 +T 30 04 00 00 DD 46 FF DD 6E FC DD 66 FD CD +R 00 00 01 00 +T 3A 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 11 00 +T 3C 04 00 00 +R 00 00 01 00 +T 3C 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1B 00 +T 3F 04 00 00 +R 00 00 01 00 +T 3F 04 00 00 CD 00 00 00 00 7B B2 20 02 +R 00 00 01 00 02 05 10 00 +T 46 04 00 00 +R 00 00 01 00 +T 46 04 00 00 18 6A +R 00 00 01 00 +T 48 04 00 00 +R 00 00 01 00 +T 48 04 00 00 DD 7E 0A DD B6 0B DD B6 0C DD B6 +R 00 00 01 00 +T 53 04 00 00 0D 28 4C +R 00 00 01 00 +T 56 04 00 00 +R 00 00 01 00 +T 56 04 00 00 21 00 00 E5 21 37 00 E5 21 00 00 +R 00 00 01 00 +T 61 04 00 00 E5 21 36 00 E5 DD 6E 0A DD 66 0B +R 00 00 01 00 +T 6C 04 00 00 C1 09 EB DD 6E 0C DD 66 0D C1 ED +R 00 00 01 00 +T 77 04 00 00 4A 4D 44 EB CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 09 15 00 +T 80 04 00 00 21 01 00 C1 09 EB 21 00 00 C1 ED +R 00 00 01 00 +T 8B 04 00 00 4A 4D 44 EB E5 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 96 04 00 00 23 23 D1 73 23 72 23 71 23 70 18 +R 00 00 01 00 +T A1 04 00 00 10 +R 00 00 01 00 +T A2 04 00 00 +R 00 00 01 00 +T A2 04 00 00 DD 6E 02 DD 66 03 23 23 AF 77 23 +R 00 00 01 00 +T AD 04 00 00 77 23 77 23 77 +R 00 00 01 00 +T B2 04 00 00 +R 00 00 01 00 +T B2 04 00 00 +R 00 00 01 00 +T B2 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T B5 04 00 00 +R 00 00 01 00 +T B5 04 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 14 00 +T BB 04 00 00 00 00 00 00 7D B4 28 0E DD 7E 02 +R 00 00 01 00 02 04 0B 00 +T C4 04 00 00 DD B6 03 DD B6 04 DD B6 05 20 05 +R 00 00 01 00 +T CF 04 00 00 +R 00 00 01 00 +T CF 04 00 00 +R 00 00 01 00 +T CF 04 00 00 +R 00 00 01 00 +T CF 04 00 00 21 00 00 18 5A +R 00 00 01 00 +T D4 04 00 00 +R 00 00 01 00 +T D4 04 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T DF 04 00 00 03 3E 42 05 00 00 21 42 05 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T E5 04 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T E8 04 00 00 +R 00 00 01 00 +T E8 04 00 00 21 3D 00 ED 4B 00 00 00 00 09 46 +R 00 00 01 00 02 09 0B 00 +T F1 04 00 00 05 20 1A +R 00 00 01 00 +T F4 04 00 00 +R 00 00 01 00 +T F4 04 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 0B 00 2B 0B 0D 00 +T FA 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0D 00 02 0A 00 00 +T 01 05 00 00 75 FE DD 74 FF 7D B4 28 02 +R 00 00 01 00 +T 0A 05 00 00 +R 00 00 01 00 +T 0A 05 00 00 18 02 +R 00 00 01 00 +T 0C 05 00 00 +R 00 00 01 00 +T 0C 05 00 00 18 DA +R 00 00 01 00 +T 0E 05 00 00 +R 00 00 01 00 +T 0E 05 00 00 01 00 00 11 00 00 3E 42 05 00 00 +R 00 00 01 00 29 0B 01 00 +T 16 05 00 00 21 42 05 00 00 CD 00 00 00 00 3E +R 00 00 01 00 00 05 01 00 02 0A 00 00 +T 1D 05 00 00 6A DD AE FE DD B6 FF 20 05 21 +R 00 00 01 00 +T 27 05 00 00 00 00 18 03 +R 00 00 01 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 21 FF FF +R 00 00 01 00 +T 2E 05 00 00 +R 00 00 01 00 +T 2E 05 00 00 +R 00 00 01 00 +T 2E 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 31 05 00 00 +R 00 00 01 00 +T 31 05 00 00 CD 00 00 00 00 01 6A 00 3E +R 00 00 01 00 02 05 10 00 +T 38 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 3D 05 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 07 00 +T 42 05 00 00 +R 00 00 01 00 +T 42 05 00 00 CD 00 00 00 00 2A 00 00 00 00 7D +R 00 00 01 00 02 05 10 00 02 0A 0B 00 +T 49 05 00 00 B4 28 49 +R 00 00 01 00 +T 4C 05 00 00 +R 00 00 01 00 +T 4C 05 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 57 05 00 00 66 03 E5 21 2E 00 ED 4B +R 00 00 01 00 +T 5F 05 00 00 00 00 00 00 09 EB 3E 3F 04 00 00 +R 00 00 01 00 02 04 0B 00 29 0B 01 00 +T 65 05 00 00 21 3F 04 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 00 05 01 00 02 0A 00 00 +T 6C 05 00 00 E1 21 38 00 09 36 31 05 00 00 23 +R 00 00 01 00 09 0A 01 00 +T 74 05 00 00 36 31 05 00 00 23 36 31 05 00 00 +R 00 00 01 00 89 05 01 00 29 0B 01 00 +T 79 05 00 00 21 3B 00 ED 4B 00 00 00 00 09 71 +R 00 00 01 00 02 09 0B 00 +T 82 05 00 00 23 70 21 2E 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 0B 00 +T 8B 05 00 00 09 EB 3E E4 01 00 00 21 +R 00 00 01 00 29 07 01 00 +T 90 05 00 00 E4 01 00 00 CD 00 00 00 00 +R 00 00 01 00 00 04 01 00 02 09 00 00 +T 95 05 00 00 +R 00 00 01 00 +T 95 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 98 05 00 00 +R 00 00 01 00 +T 98 05 00 00 CD 00 00 00 00 F6 FF DD CB 05 7E +R 00 00 01 00 02 05 14 00 +T A1 05 00 00 28 25 +R 00 00 01 00 +T A3 05 00 00 +R 00 00 01 00 +T A3 05 00 00 DD 4E 04 DD 46 05 DD 6E 02 DD 66 +R 00 00 01 00 +T AE 05 00 00 03 CD 00 00 00 00 DD 75 02 DD 74 +R 00 00 01 00 02 06 06 00 +T B7 05 00 00 03 DD 71 04 DD 70 05 DD 36 FE 01 +R 00 00 01 00 +T C2 05 00 00 DD 36 FF 00 18 07 +R 00 00 01 00 +T C8 05 00 00 +R 00 00 01 00 +T C8 05 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T CF 05 00 00 +R 00 00 01 00 +T CF 05 00 00 21 00 00 E5 21 3C 00 E5 DD 4E 04 +R 00 00 01 00 +T DA 05 00 00 DD 46 05 DD 6E 02 DD 66 03 CD +R 00 00 01 00 +T E4 05 00 00 00 00 00 00 DD 75 FC DD 74 FD 21 +R 00 00 01 00 02 04 13 00 +T ED 05 00 00 0C 00 39 01 00 00 11 3C 00 CD +R 00 00 01 00 +T F7 05 00 00 00 00 00 00 21 00 00 E5 21 3C 00 +R 00 00 01 00 02 04 03 00 +T 00 06 00 00 E5 EB CD 00 00 00 00 DD 75 FA DD +R 00 00 01 00 02 07 13 00 +T 09 06 00 00 74 FB 21 0C 00 39 01 00 00 11 +R 00 00 01 00 +T 13 06 00 00 3C 00 CD 00 00 00 00 21 00 00 E5 +R 00 00 01 00 02 07 03 00 +T 1C 06 00 00 21 18 00 E5 EB CD 00 00 00 00 DD +R 00 00 01 00 02 0A 13 00 +T 25 06 00 00 75 F8 DD 74 F9 21 0C 00 39 01 +R 00 00 01 00 +T 2F 06 00 00 00 00 11 18 00 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 03 00 +T 38 06 00 00 73 F6 DD 72 F7 DD 7E FE DD B6 FF +R 00 00 01 00 +T 43 06 00 00 28 0D +R 00 00 01 00 +T 45 06 00 00 +R 00 00 01 00 +T 45 06 00 00 21 03 00 00 00 22 13 00 00 00 3E +R 00 00 01 00 00 05 03 00 00 0A 03 00 +T 4C 06 00 00 2D 32 02 00 00 00 18 06 +R 00 00 01 00 00 06 03 00 +T 52 06 00 00 +R 00 00 01 00 +T 52 06 00 00 21 02 00 00 00 22 13 00 00 00 +R 00 00 01 00 00 05 03 00 00 0A 03 00 +T 58 06 00 00 +R 00 00 01 00 +T 58 06 00 00 DD 6E FC DD 66 FD E5 DD 6E FA DD +R 00 00 01 00 +T 63 06 00 00 66 FB E5 DD 6E F8 DD 66 F9 E5 DD +R 00 00 01 00 +T 6E 06 00 00 6E F6 DD 66 F7 E5 21 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 77 06 00 00 E5 2A 13 00 00 00 E5 3E +R 00 00 01 00 00 06 03 00 +T 7D 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 82 06 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T 8B 06 00 00 21 02 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 05 03 00 02 0A 07 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 75 3A 25 30 32 75 3A 25 30 32 +R 00 00 02 00 +T 0B 00 00 00 75 3A 25 30 32 75 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 13 00 00 00 +R 00 00 03 00 +T 13 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/net_lib/tmpfile.rel b/src/nos/lib/net_lib/tmpfile.rel new file mode 100644 index 00000000..ff133f96 --- /dev/null +++ b/src/nos/lib/net_lib/tmpfile.rel @@ -0,0 +1,230 @@ +XL4 +H 4 areas 12 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sprintf Ref00000000 +S _getenv Ref00000000 +S _strcat Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _strdupw Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _strcpy Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _freopen Ref00000000 +S _Tmpdir Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +S _stat Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F1 flags 0 +S _tmpfile Def00000000 +A CSTR size 17 flags 0 +A UDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DA FF 11 +R 00 00 01 00 02 05 0B 00 +T 06 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 02 00 +T 0B 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 12 00 00 00 FE DD 74 FF 7D B4 CA A4 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 1B 00 00 00 21 00 00 39 4D 44 DD 5E FE DD 56 +R 00 00 01 00 +T 26 00 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 2C 00 00 00 CD 00 00 00 00 7D B4 20 71 DD 7E +R 00 00 01 00 02 05 00 00 +T 35 00 00 00 DE E6 00 47 DD 7E DF E6 40 B0 28 +R 00 00 01 00 +T 40 00 00 00 63 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 49 00 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 50 00 00 00 0B 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0F 00 +T 57 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 5E 00 00 00 FA DD 74 FB DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 69 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 6E 00 00 00 00 00 00 00 EB 13 13 3E +R 00 00 01 00 02 04 00 00 +T 74 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 79 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 00 00 +T 82 00 00 00 4E FE DD 46 FF EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 8A 00 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 91 00 00 00 04 00 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 00 04 02 00 +T 9A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 9F 00 00 00 00 00 00 00 C3 46 01 00 00 +R 00 00 01 00 02 04 00 00 00 09 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 21 00 00 39 4D 44 ED 5B +R 00 00 01 00 +T AC 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0D 00 2B 09 10 00 +T B1 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T B8 00 00 00 20 6A DD 7E DE E6 00 47 DD 7E DF +R 00 00 01 00 +T C3 00 00 00 E6 40 B0 28 5C +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 0D 00 2B 0B 05 00 +T CE 00 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T D5 00 00 00 0B 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0F 00 +T DC 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T E3 00 00 00 FA DD 74 FB ED 5B 00 00 00 00 3E +R 00 00 01 00 02 0A 0D 00 +T EC 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T F1 00 00 00 00 00 00 00 EB 13 13 3E +R 00 00 01 00 02 04 00 00 +T F7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T FC 00 00 00 00 00 00 00 DD 75 FC DD 74 FD ED +R 00 00 01 00 02 04 00 00 +T 05 01 00 00 4B 00 00 00 00 EB 3E 00 00 00 00 +R 00 00 01 00 02 05 0D 00 2B 0B 09 00 +T 0B 01 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 12 01 00 00 04 00 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 00 04 02 00 +T 1B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 20 01 00 00 00 00 00 00 18 22 +R 00 00 01 00 02 04 00 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 11 0A 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0F 00 +T 2A 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 31 01 00 00 FA DD 74 FB 11 06 00 00 00 3E +R 00 00 01 00 00 09 02 00 +T 39 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 3E 01 00 00 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 00 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 2A 00 00 00 00 E5 DD 6E FC DD 66 +R 00 00 01 00 00 05 03 00 +T 4F 01 00 00 FD E5 21 07 00 00 00 E5 DD 6E FA +R 00 00 01 00 00 07 02 00 +T 58 01 00 00 DD 66 FB E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 5F 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 66 01 00 00 F1 F1 21 00 00 39 4D 44 DD 5E FA +R 00 00 01 00 +T 71 01 00 00 DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 10 00 +T 77 01 00 00 00 00 00 00 CD 00 00 00 00 7D A4 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T 7E 01 00 00 3C 20 0B 2A 00 00 00 00 3E 02 AD +R 00 00 01 00 02 08 0A 00 +T 87 01 00 00 B4 20 02 +R 00 00 01 00 +T 8A 01 00 00 +R 00 00 01 00 +T 8A 01 00 00 +R 00 00 01 00 +T 8A 01 00 00 +R 00 00 01 00 +T 8A 01 00 00 18 09 +R 00 00 01 00 +T 8C 01 00 00 +R 00 00 01 00 +T 8C 01 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 93 01 00 00 18 B1 +R 00 00 01 00 +T 95 01 00 00 +R 00 00 01 00 +T 95 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 9D 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T A4 01 00 00 00 00 E5 01 13 00 00 00 DD 5E FA +R 00 00 01 00 00 08 02 00 +T AD 01 00 00 DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T B3 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T BA 01 00 00 75 F8 DD 74 F9 DD 5E FA DD 56 FB +R 00 00 01 00 +T C5 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T CB 01 00 00 00 00 00 00 DD 7E F8 DD B6 F9 28 +R 00 00 01 00 02 04 00 00 +T D4 01 00 00 13 +R 00 00 01 00 +T D5 01 00 00 +R 00 00 01 00 +T D5 01 00 00 21 10 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T E0 01 00 00 F6 10 77 23 7E F6 00 77 +R 00 00 01 00 +T E8 01 00 00 +R 00 00 01 00 +T E8 01 00 00 DD 6E F8 DD 66 F9 C3 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 54 4D 50 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 2F 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 25 73 74 65 6D 70 2E 25 30 33 64 +R 00 00 02 00 +T 12 00 00 00 00 +R 00 00 02 00 +T 13 00 00 00 +R 00 00 02 00 +T 13 00 00 00 77 2B 62 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/net_lib/trim_mbuf.rel b/src/nos/lib/net_lib/trim_mbuf.rel new file mode 100644 index 00000000..443f908f --- /dev/null +++ b/src/nos/lib/net_lib/trim_mbuf.rel @@ -0,0 +1,91 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D9 flags 0 +S _trim_mbuf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FC +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 DD 77 FD DD 7E 02 DD B6 03 28 0B +R 00 00 01 00 +T 14 00 00 00 DD 6E 02 DD 66 03 7E 23 B6 20 03 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 C3 D6 00 00 00 +R 00 00 01 00 00 05 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 DD 7E 04 DD B6 05 20 11 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 32 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 39 00 00 00 D6 00 00 00 +R 00 00 01 00 00 04 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T 46 00 00 00 75 FE DD 74 FF +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 DD 7E FE DD B6 FF CA D6 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 21 0C 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T 5F 00 00 00 23 66 68 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 6A 00 00 00 4E 04 DD 46 05 A7 ED 42 30 1A +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 21 0C 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 7F 00 00 00 23 46 21 00 00 39 7E 81 77 23 7E +R 00 00 01 00 +T 8A 00 00 00 88 77 18 35 +R 00 00 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 21 0C 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 99 00 00 00 DD 5E FC DD 56 FD DD 6E 04 DD 66 +R 00 00 01 00 +T A4 00 00 00 05 A7 ED 52 EB E1 73 23 72 59 50 +R 00 00 01 00 +T AF 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T B5 00 00 00 00 00 00 00 DD 6E FE DD 66 FF AF +R 00 00 01 00 02 04 00 00 +T BE 00 00 00 77 23 77 18 13 +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T CE 00 00 00 75 FE DD 74 FF C3 4B 00 00 00 +R 00 00 01 00 00 0A 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/ttydriv.rel b/src/nos/lib/net_lib/ttydriv.rel new file mode 100644 index 00000000..4f856828 --- /dev/null +++ b/src/nos/lib/net_lib/ttydriv.rel @@ -0,0 +1,324 @@ +XL4 +H 2 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ___0001_508a__08_20_08 Ref00000000 +S _fwrite Ref00000000 +S __fputs Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S .__.ABS. Def00000000 +S _fputc Ref00000000 +S _Current Ref00000000 +S ___03f2_e5d6__5eR_0a Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3A2 flags 0 +S _ttydriv Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 13 00 DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 5E 02 DD 56 03 19 DD 75 FE DD 74 +R 00 00 01 00 +T 14 00 00 00 FF 7E 23 B6 20 26 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 DD 6E FE DD 66 FF 23 23 E5 01 +R 00 00 01 00 +T 24 00 00 00 00 01 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0C 00 +T 2C 00 00 00 00 00 00 00 CD 00 00 00 00 E5 DD +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 33 00 00 00 6E FE DD 66 FF C1 71 23 70 E1 71 +R 00 00 01 00 +T 3E 00 00 00 23 70 +R 00 00 01 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 4B 00 00 00 0F E6 01 06 00 4F 79 B0 C2 +R 00 00 01 00 +T 54 00 00 00 D6 00 00 00 +R 00 00 01 00 00 04 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 DD 6E FE DD 66 FF 23 23 4E 23 46 +R 00 00 01 00 +T 61 00 00 00 03 70 2B 71 0B 69 60 DD 46 04 70 +R 00 00 01 00 +T 6C 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 77 00 00 00 E6 01 47 23 7E E6 00 B0 28 18 +R 00 00 01 00 +T 81 00 00 00 +R 00 00 01 00 +T 81 00 00 00 21 1B 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 09 00 +T 8A 00 00 00 23 46 DD 5E 04 16 00 3E +R 00 00 01 00 +T 92 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 97 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 DD 6E FE DD 66 FF 4E 23 46 DD 6E +R 00 00 01 00 +T A4 00 00 00 FE DD 66 FF 23 23 56 23 66 6A A7 +R 00 00 01 00 +T AF 00 00 00 ED 42 DD 75 FC DD 74 FD DD 6E FE +R 00 00 01 00 +T BA 00 00 00 DD 66 FF 23 23 E5 DD 6E FE DD 66 +R 00 00 01 00 +T C5 00 00 00 FF 4E 23 46 E1 71 23 70 DD 6E FC +R 00 00 01 00 +T D0 00 00 00 DD 66 FD C3 9F 03 00 00 +R 00 00 01 00 00 08 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 3E 01 A9 B0 C2 9C 03 00 00 DD 5E +R 00 00 01 00 00 09 01 00 +T DF 00 00 00 04 CD 00 00 00 00 06 00 08 0A 0D +R 00 00 01 00 02 06 0E 00 +T E8 00 00 00 12 15 7F E8 02 00 00 B5 01 00 00 +R 00 00 01 00 00 07 01 00 00 0B 01 00 +T EF 00 00 00 7F 02 00 00 12 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T F3 00 00 00 F9 00 00 00 F9 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T F7 00 00 00 B5 01 00 00 +R 00 00 01 00 00 04 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 04 01 00 00 E6 04 47 23 7E E6 00 B0 28 16 +R 00 00 01 00 +T 0E 01 00 00 +R 00 00 01 00 +T 0E 01 00 00 DD 6E FE DD 66 FF 23 23 4E 23 46 +R 00 00 01 00 +T 19 01 00 00 03 70 2B 71 0B 69 60 36 0A 18 16 +R 00 00 01 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 DD 6E FE DD 66 FF 23 23 4E 23 46 +R 00 00 01 00 +T 2F 01 00 00 03 70 2B 71 0B 69 60 DD 46 04 70 +R 00 00 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 21 04 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 45 01 00 00 E6 01 47 23 7E E6 00 B0 28 29 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 21 1B 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 09 00 +T 58 01 00 00 23 46 11 0A 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 60 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 66 01 00 00 1B 00 ED 4B 00 00 00 00 09 5E 23 +R 00 00 01 00 02 08 09 00 +T 6F 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 75 01 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 DD 6E FE DD 66 FF 4E 23 46 DD 6E +R 00 00 01 00 +T 83 01 00 00 FE DD 66 FF 23 23 56 23 66 6A A7 +R 00 00 01 00 +T 8E 01 00 00 ED 42 DD 75 FC DD 74 FD DD 6E FE +R 00 00 01 00 +T 99 01 00 00 DD 66 FF 23 23 E5 DD 6E FE DD 66 +R 00 00 01 00 +T A4 01 00 00 FF 4E 23 46 E1 71 23 70 DD 6E FC +R 00 00 01 00 +T AF 01 00 00 DD 66 FD C3 9F 03 00 00 +R 00 00 01 00 00 08 01 00 +T B5 01 00 00 +R 00 00 01 00 +T B5 01 00 00 DD 6E FE DD 66 FF 23 23 46 23 66 +R 00 00 01 00 +T C0 01 00 00 68 E5 DD 6E FE DD 66 FF 4E 23 46 +R 00 00 01 00 +T CB 01 00 00 E1 A7 ED 42 28 3E +R 00 00 01 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 DD 6E FE DD 66 FF 23 23 4E 23 46 +R 00 00 01 00 +T DC 01 00 00 0B 70 2B 71 21 04 00 DD 4E FE DD +R 00 00 01 00 +T E7 01 00 00 46 FF 09 7E E6 01 47 23 7E E6 00 +R 00 00 01 00 +T F2 01 00 00 B0 28 1A +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 21 1B 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 09 00 +T FE 01 00 00 23 46 C5 0E 00 00 00 00 11 +R 00 00 01 00 2B 08 02 00 +T 04 02 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 09 04 00 +T 09 02 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 0F 02 00 00 +R 00 00 01 00 +T 0F 02 00 00 +R 00 00 01 00 +T 0F 02 00 00 C3 9A 03 00 00 +R 00 00 01 00 00 05 01 00 +T 12 02 00 00 +R 00 00 01 00 +T 12 02 00 00 21 04 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 1D 02 00 00 E6 01 47 23 7E E6 00 B0 28 55 +R 00 00 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T 2D 02 00 00 E5 21 1B 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 09 00 +T 36 02 00 00 5E 23 56 D5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 06 00 +T 3D 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 44 02 00 00 F1 21 1B 00 09 4E 23 46 C5 DD 6E +R 00 00 01 00 +T 4F 02 00 00 FE DD 66 FF 4E 23 46 DD 6E FE DD +R 00 00 01 00 +T 5A 02 00 00 66 FF 23 23 56 23 66 6A A7 ED 42 +R 00 00 01 00 +T 65 02 00 00 E5 01 01 00 DD 6E FE DD 66 FF 5E +R 00 00 01 00 +T 70 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 75 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 7C 02 00 00 +R 00 00 01 00 +T 7C 02 00 00 C3 9A 03 00 00 +R 00 00 01 00 00 05 01 00 +T 7F 02 00 00 +R 00 00 01 00 +T 7F 02 00 00 +R 00 00 01 00 +T 7F 02 00 00 21 04 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 8A 02 00 00 E6 01 47 23 7E E6 00 B0 28 3B DD +R 00 00 01 00 +T 95 02 00 00 6E FE DD 66 FF 23 23 4E 23 46 0B +R 00 00 01 00 +T A0 02 00 00 70 2B 71 03 DD 6E FE DD 66 FF 56 +R 00 00 01 00 +T AB 02 00 00 23 66 6A A7 ED 42 28 1C +R 00 00 01 00 +T B3 02 00 00 +R 00 00 01 00 +T B3 02 00 00 +R 00 00 01 00 +T B3 02 00 00 +R 00 00 01 00 +T B3 02 00 00 21 1B 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 09 00 +T BC 02 00 00 23 46 C5 0E 00 00 00 00 11 +R 00 00 01 00 2B 08 02 00 +T C2 02 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 09 04 00 +T C7 02 00 00 00 00 00 00 CD 00 00 00 00 F1 18 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T CE 02 00 00 B0 +R 00 00 01 00 +T CF 02 00 00 +R 00 00 01 00 +T CF 02 00 00 DD 6E FE DD 66 FF 23 23 E5 DD 6E +R 00 00 01 00 +T DA 02 00 00 FE DD 66 FF 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T E5 02 00 00 C3 9A 03 00 00 +R 00 00 01 00 00 05 01 00 +T E8 02 00 00 +R 00 00 01 00 +T E8 02 00 00 DD 6E FE DD 66 FF 23 23 4E 23 46 +R 00 00 01 00 +T F3 02 00 00 03 70 2B 71 0B 69 60 DD 46 04 70 +R 00 00 01 00 +T FE 02 00 00 21 04 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 09 03 00 00 E6 01 47 23 7E E6 00 B0 28 3D DD +R 00 00 01 00 +T 14 03 00 00 6E FE DD 66 FF 4E 23 46 DD 6E FE +R 00 00 01 00 +T 1F 03 00 00 DD 66 FF 23 23 56 23 66 6A A7 ED +R 00 00 01 00 +T 2A 03 00 00 42 01 FF 80 3E 80 AC 67 ED 42 30 +R 00 00 01 00 +T 35 03 00 00 1A +R 00 00 01 00 +T 36 03 00 00 +R 00 00 01 00 +T 36 03 00 00 +R 00 00 01 00 +T 36 03 00 00 +R 00 00 01 00 +T 36 03 00 00 21 1B 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 09 00 +T 3F 03 00 00 23 46 DD 5E 04 16 00 3E +R 00 00 01 00 +T 47 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 4C 03 00 00 00 00 00 00 18 48 +R 00 00 01 00 02 04 00 00 +T 50 03 00 00 +R 00 00 01 00 +T 50 03 00 00 DD 6E FE DD 66 FF 4E 23 46 DD 6E +R 00 00 01 00 +T 5B 03 00 00 FE DD 66 FF 23 23 56 23 66 6A A7 +R 00 00 01 00 +T 66 03 00 00 ED 42 01 FF 80 3E 80 AC 67 ED 42 +R 00 00 01 00 +T 71 03 00 00 38 25 +R 00 00 01 00 +T 73 03 00 00 +R 00 00 01 00 +T 73 03 00 00 21 1B 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 09 00 +T 7C 03 00 00 23 46 11 07 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 84 03 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 8B 03 00 00 FE DD 66 FF 23 23 4E 23 46 0B 70 +R 00 00 01 00 +T 96 03 00 00 2B 71 +R 00 00 01 00 +T 98 03 00 00 +R 00 00 01 00 +T 98 03 00 00 +R 00 00 01 00 +T 98 03 00 00 18 00 +R 00 00 01 00 +T 9A 03 00 00 +R 00 00 01 00 +T 9A 03 00 00 18 00 +R 00 00 01 00 +T 9C 03 00 00 +R 00 00 01 00 +T 9C 03 00 00 21 00 00 +R 00 00 01 00 +T 9F 03 00 00 +R 00 00 01 00 +T 9F 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/net_lib/ungetc.rel b/src/nos/lib/net_lib/ungetc.rel new file mode 100644 index 00000000..fbb3fa06 --- /dev/null +++ b/src/nos/lib/net_lib/ungetc.rel @@ -0,0 +1,72 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pushdown Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 94 flags 0 +S _ungetc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 79 B0 28 12 DD 6E +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 04 DD 66 05 46 23 66 68 01 AD DE +R 00 00 01 00 +T 14 00 00 00 A7 ED 42 28 05 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 21 FF FF 18 73 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 3E 0A DD AE 02 DD B6 03 20 45 21 +R 00 00 01 00 +T 29 00 00 00 10 00 DD 4E 04 DD 46 05 09 7E E6 +R 00 00 01 00 +T 34 00 00 00 04 47 23 7E E6 00 B0 28 30 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 16 00 DD 4E 04 DD 46 05 09 EB +R 00 00 01 00 +T 48 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 4E 00 00 00 00 00 00 00 E5 21 16 00 09 4D 44 +R 00 00 01 00 02 04 00 00 +T 57 00 00 00 21 14 00 DD 5E 04 DD 56 05 19 EB +R 00 00 01 00 +T 62 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 68 00 00 00 00 00 00 00 E1 18 1E +R 00 00 01 00 02 04 00 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 21 01 00 E5 21 04 00 39 4D 44 21 +R 00 00 01 00 +T 78 00 00 00 14 00 DD 5E 04 DD 56 05 19 EB 3E +R 00 00 01 00 +T 83 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 88 00 00 00 00 00 00 00 E1 +R 00 00 01 00 02 04 00 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/usesock.rel b/src/nos/lib/net_lib/usesock.rel new file mode 100644 index 00000000..ca48bcfc --- /dev/null +++ b/src/nos/lib/net_lib/usesock.rel @@ -0,0 +1,42 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _itop Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3D flags 0 +S _usesock Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 0B +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 09 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 03 00 +T 26 00 00 00 18 12 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 34 +R 00 00 01 00 +T 33 00 00 00 23 20 01 34 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 21 00 00 +R 00 00 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/net_lib/vfprintf.rel b/src/nos/lib/net_lib/vfprintf.rel new file mode 100644 index 00000000..3bd4632b --- /dev/null +++ b/src/nos/lib/net_lib/vfprintf.rel @@ -0,0 +1,54 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___vprinter Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 61 flags 0 +S _vfprintf Def0000001B +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 E5 C5 01 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 11 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 18 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 CD 00 00 00 00 7B B2 28 12 DD 6E +R 00 00 01 00 02 05 04 00 +T 24 00 00 00 02 DD 66 03 46 23 66 68 01 AD DE +R 00 00 01 00 +T 2F 00 00 00 A7 ED 42 28 05 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 21 FF FF 18 25 +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 6E 0A DD 66 0B E5 DD 6E 04 DD +R 00 00 01 00 +T 44 00 00 00 66 05 E5 DD 6E 02 DD 66 03 E5 0E +R 00 00 01 00 +T 4F 00 00 00 00 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 54 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 59 00 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/view.rel b/src/nos/lib/net_lib/view.rel new file mode 100644 index 00000000..0a01e860 --- /dev/null +++ b/src/nos/lib/net_lib/view.rel @@ -0,0 +1,987 @@ +XL4 +H 3 areas 26 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?LEAVE_32_L09 Ref00000000 +S _fflush Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _fgetc Ref00000000 +S _newsession Ref00000000 +S _fseek Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Display Ref00000000 +S _ftell Ref00000000 +S _strdupw Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _free Ref00000000 +S _fputc Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Current Ref00000000 +S _freesession Ref00000000 +S _errno Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _calloc Ref00000000 +S _freopen Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S __printf Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fpname Ref00000000 +S _kalarm Ref00000000 +S _fclose Ref00000000 +S ___020d_0616_Can_27t_20read_20_2 Ref00000000 +S _Cmdline Ref00000000 +S _newproc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AA5 flags 0 +S _doview Def00000000 +S _view Def000000A2 +A CSTR size 7 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 00 00 E5 +R 00 00 01 00 02 05 15 00 +T 09 00 00 00 01 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 12 00 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 18 00 +T 1A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 18 00 02 09 00 00 +T 21 00 00 00 75 FE DD 74 FF 7D B4 20 23 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 35 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 21 00 +T 3A 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 21 00 2B 0A 1B 00 +T 40 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1B 00 02 09 00 00 +T 47 00 00 00 F1 21 01 00 18 52 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 21 00 00 E5 ED 5B 00 00 00 00 3E +R 00 00 01 00 02 0A 22 00 +T 56 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 5B 00 00 00 00 00 00 00 E5 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 00 00 +T 64 00 00 00 E5 21 00 00 E5 0E A2 00 00 00 C5 +R 00 00 01 00 29 0A 01 00 +T 6C 00 00 00 21 A2 00 00 00 E5 01 00 02 11 +R 00 00 01 00 00 05 01 00 +T 74 00 00 00 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 23 00 +T 79 00 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 23 00 02 09 00 00 +T 80 00 00 00 0C 00 39 F9 EB 2A 00 00 00 00 22 +R 00 00 01 00 02 0A 0B 00 +T 89 00 00 00 00 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 02 04 08 00 02 09 08 00 +T 8F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 94 00 00 00 00 00 00 00 21 00 00 22 +R 00 00 01 00 02 04 00 00 +T 9A 00 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 08 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 CD 00 00 00 00 E8 FF AF DD 77 F0 +R 00 00 01 00 02 05 15 00 +T AB 00 00 00 DD 77 F1 DD 77 F2 DD 77 F3 AF DD +R 00 00 01 00 +T B6 00 00 00 77 FC DD 77 FD DD 77 FE DD 77 FF +R 00 00 01 00 +T C1 00 00 00 DD 36 F8 50 DD 36 F9 00 DD 36 FA +R 00 00 01 00 +T CC 00 00 00 18 DD 36 FB 00 DD 71 EA DD 70 EB +R 00 00 01 00 +T D7 00 00 00 DD 7E 0A DD B6 0B 28 0E +R 00 00 01 00 +T DF 00 00 00 +R 00 00 01 00 +T DF 00 00 00 DD 6E 0A DD 66 0B DD 75 EC DD 74 +R 00 00 01 00 +T EA 00 00 00 ED 18 14 +R 00 00 01 00 +T ED 00 00 00 +R 00 00 01 00 +T ED 00 00 00 DD 5E EA DD 56 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1E 00 +T F5 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 1E 00 02 0A 00 00 +T FC 00 00 00 75 EC DD 74 ED +R 00 00 01 00 +T 01 01 00 00 +R 00 00 01 00 +T 01 01 00 00 21 01 00 E5 01 07 00 DD 5E EC DD +R 00 00 01 00 +T 0C 01 00 00 56 ED 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 11 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 18 01 00 00 75 E8 DD 74 E9 7D B4 20 03 +R 00 00 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 C3 FF 05 00 00 +R 00 00 01 00 00 05 01 00 +T 24 01 00 00 +R 00 00 01 00 +T 24 01 00 00 DD 7E 0A DD B6 0B 28 0E +R 00 00 01 00 +T 2C 01 00 00 +R 00 00 01 00 +T 2C 01 00 00 DD 5E EC DD 56 ED 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 34 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 DD 7E 02 DD B6 03 28 17 +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 DD 6E 02 DD 66 03 7C 07 9F 4F 41 +R 00 00 01 00 +T 4D 01 00 00 DD 75 FC DD 74 FD DD 71 FE DD 70 +R 00 00 01 00 +T 58 01 00 00 FF +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 21 1D 00 DD 4E E8 DD 46 E9 09 36 +R 00 00 01 00 +T 64 01 00 00 D1 09 00 00 23 36 D1 09 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T 69 01 00 00 36 D1 09 00 00 21 17 00 09 CB 8E +R 00 00 01 00 29 05 01 00 +T 71 01 00 00 21 17 00 09 CB 86 +R 00 00 01 00 +T 77 01 00 00 +R 00 00 01 00 +T 77 01 00 00 21 00 00 E5 DD 6E F2 DD 66 F3 E5 +R 00 00 01 00 +T 82 01 00 00 DD 6E F0 DD 66 F1 E5 DD 5E EA DD +R 00 00 01 00 +T 8D 01 00 00 56 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 92 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 99 01 00 00 F1 21 40 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 0B 00 +T A2 01 00 00 4E 23 46 11 0C 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T AA 01 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T B1 01 00 00 DD 77 F4 DD 77 F5 AF DD 77 F6 DD +R 00 00 01 00 +T BC 01 00 00 77 F7 +R 00 00 01 00 +T BE 01 00 00 +R 00 00 01 00 +T BE 01 00 00 DD 5E EA DD 56 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T C6 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T CD 01 00 00 75 EE DD 74 EF 7D A4 3C CA +R 00 00 01 00 +T D6 01 00 00 85 02 00 00 +R 00 00 01 00 00 04 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 DD 4E EE DD 46 EF 3E 0A A9 B0 20 +R 00 00 01 00 +T E3 01 00 00 11 +R 00 00 01 00 +T E4 01 00 00 +R 00 00 01 00 +T E4 01 00 00 DD 34 F4 20 03 DD 34 F5 +R 00 00 01 00 +T EC 01 00 00 +R 00 00 01 00 +T EC 01 00 00 AF DD 77 F6 DD 77 F7 18 41 +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 3E 09 A9 B0 20 31 21 F8 FF DD 4E +R 00 00 01 00 +T 00 02 00 00 F8 DD 46 F9 09 4D 44 DD 6E F6 DD +R 00 00 01 00 +T 0B 02 00 00 66 F7 CD 00 00 00 00 30 18 +R 00 00 01 00 02 07 19 00 +T 12 02 00 00 +R 00 00 01 00 +T 12 02 00 00 21 08 00 DD 4E F6 DD 46 F7 09 7D +R 00 00 01 00 +T 1D 02 00 00 E6 F8 5F 7C E6 FF 57 DD 73 F6 DD +R 00 00 01 00 +T 28 02 00 00 72 F7 +R 00 00 01 00 +T 2A 02 00 00 +R 00 00 01 00 +T 2A 02 00 00 18 0A +R 00 00 01 00 +T 2C 02 00 00 +R 00 00 01 00 +T 2C 02 00 00 DD 34 F6 20 03 DD 34 F7 +R 00 00 01 00 +T 34 02 00 00 +R 00 00 01 00 +T 34 02 00 00 18 00 +R 00 00 01 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 DD 4E F8 DD 46 F9 DD 6E F6 DD 66 +R 00 00 01 00 +T 41 02 00 00 F7 CD 00 00 00 00 38 0F +R 00 00 01 00 02 06 19 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 AF DD 77 F6 DD 77 F7 DD 34 F4 20 +R 00 00 01 00 +T 52 02 00 00 03 DD 34 F5 +R 00 00 01 00 +T 56 02 00 00 +R 00 00 01 00 +T 56 02 00 00 +R 00 00 01 00 +T 56 02 00 00 DD 4E FA DD 46 FB DD 6E F4 DD 66 +R 00 00 01 00 +T 61 02 00 00 F5 CD 00 00 00 00 38 02 +R 00 00 01 00 02 06 19 00 +T 67 02 00 00 +R 00 00 01 00 +T 67 02 00 00 18 1C +R 00 00 01 00 +T 69 02 00 00 +R 00 00 01 00 +T 69 02 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 0B 00 +T 72 02 00 00 23 46 DD 5E EE DD 56 EF 3E +R 00 00 01 00 +T 7B 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 80 02 00 00 00 00 00 00 C3 BE 01 00 00 +R 00 00 01 00 02 04 00 00 00 09 01 00 +T 85 02 00 00 +R 00 00 01 00 +T 85 02 00 00 21 40 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 0B 00 +T 8E 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 93 02 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 98 02 00 00 +R 00 00 01 00 +T 98 02 00 00 21 10 00 DD 4E EA DD 46 EB 09 7E +R 00 00 01 00 +T A3 02 00 00 E6 02 47 23 7E E6 00 B0 28 22 DD +R 00 00 01 00 +T AE 02 00 00 7E FC DD B6 FD DD B6 FE DD B6 FF +R 00 00 01 00 +T B9 02 00 00 28 14 +R 00 00 01 00 +T BB 02 00 00 +R 00 00 01 00 +T BB 02 00 00 +R 00 00 01 00 +T BB 02 00 00 +R 00 00 01 00 +T BB 02 00 00 DD 4E FE DD 46 FF DD 5E FC DD 56 +R 00 00 01 00 +T C6 02 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1F 00 02 0B 1F 00 +T CC 02 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T CF 02 00 00 +R 00 00 01 00 +T CF 02 00 00 21 3E 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 0B 00 +T D8 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T DD 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T E4 02 00 00 EE DD 74 EF 01 00 00 11 00 00 3E +R 00 00 01 00 +T EF 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T F4 02 00 00 00 00 00 00 DD 7E EE DD A6 EF 3C +R 00 00 01 00 02 04 00 00 +T FD 02 00 00 20 09 2A 00 00 00 00 3E 6A AD B4 +R 00 00 01 00 02 07 13 00 +T 06 03 00 00 28 02 +R 00 00 01 00 +T 08 03 00 00 +R 00 00 01 00 +T 08 03 00 00 +R 00 00 01 00 +T 08 03 00 00 +R 00 00 01 00 +T 08 03 00 00 18 3A +R 00 00 01 00 +T 0A 03 00 00 +R 00 00 01 00 +T 0A 03 00 00 21 10 00 DD 4E EA DD 46 EB 09 CB +R 00 00 01 00 +T 15 03 00 00 86 21 10 00 09 CB 8E 59 50 3E +R 00 00 01 00 +T 1F 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 24 03 00 00 00 00 00 00 DD 36 EE 20 DD 36 EF +R 00 00 01 00 02 04 00 00 +T 2D 03 00 00 00 21 10 00 DD 4E EA DD 46 EB 09 +R 00 00 01 00 +T 38 03 00 00 7E E6 02 47 23 7E E6 00 B0 C2 +R 00 00 01 00 +T 42 03 00 00 98 02 00 00 +R 00 00 01 00 00 04 01 00 +T 44 03 00 00 +R 00 00 01 00 +T 44 03 00 00 DD 5E EE DD 56 EF CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 4D 03 00 00 15 00 03 00 04 00 0E 00 10 00 +R 00 00 01 00 +T 57 03 00 00 15 00 16 00 1B 00 3C 00 3E 00 +R 00 00 01 00 +T 61 03 00 00 44 00 48 00 51 00 55 00 64 00 +R 00 00 01 00 +T 6B 03 00 00 65 00 68 00 6A 00 6B 00 71 00 +R 00 00 01 00 +T 75 03 00 00 75 00 76 00 B5 05 00 00 +R 00 00 01 00 00 08 01 00 +T 7B 03 00 00 75 05 00 00 41 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7F 03 00 00 B3 05 00 00 41 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 83 03 00 00 AB 04 00 00 A5 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 87 03 00 00 B5 03 00 00 AB 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8B 03 00 00 75 05 00 00 B3 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8F 03 00 00 A5 03 00 00 F5 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 93 03 00 00 B5 03 00 00 A5 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 97 03 00 00 B3 05 00 00 F5 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 9B 03 00 00 66 04 00 00 41 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 9F 03 00 00 AB 04 00 00 13 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A3 03 00 00 B3 05 00 00 +R 00 00 01 00 00 04 01 00 +T A5 03 00 00 +R 00 00 01 00 +T A5 03 00 00 AF DD 77 F0 DD 77 F1 DD 77 F2 DD +R 00 00 01 00 +T B0 03 00 00 77 F3 C3 B7 05 00 00 +R 00 00 01 00 00 07 01 00 +T B5 03 00 00 +R 00 00 01 00 +T B5 03 00 00 21 02 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T C0 03 00 00 E5 DD 5E EA DD 56 EB 3E +R 00 00 01 00 +T C8 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T CD 03 00 00 00 00 00 00 F1 F1 F1 DD 6E F8 DD +R 00 00 01 00 02 04 00 00 +T D6 03 00 00 66 F9 E5 DD 6E FA DD 66 FB AF 95 +R 00 00 01 00 +T E1 03 00 00 6F 3E 00 9C 67 E5 DD 5E EA DD 56 +R 00 00 01 00 +T EC 03 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T F2 03 00 00 CD 00 00 00 00 C5 E5 DD 5E EA DD +R 00 00 01 00 02 05 00 00 +T FB 03 00 00 56 EB CD 02 06 00 00 F1 F1 F1 F1 +R 00 00 01 00 00 07 01 00 +T 04 04 00 00 DD 75 F0 DD 74 F1 DD 71 F2 DD 70 +R 00 00 01 00 +T 0F 04 00 00 F3 C3 B7 05 00 00 +R 00 00 01 00 00 06 01 00 +T 13 04 00 00 +R 00 00 01 00 +T 13 04 00 00 21 10 00 DD 4E EA DD 46 EB 09 7E +R 00 00 01 00 +T 1E 04 00 00 E6 02 47 23 7E E6 00 B0 20 3B +R 00 00 01 00 +T 28 04 00 00 +R 00 00 01 00 +T 28 04 00 00 DD 6E F8 DD 66 F9 E5 01 02 00 DD +R 00 00 01 00 +T 33 04 00 00 5E FA DD 56 FB CD 00 00 00 00 D5 +R 00 00 01 00 02 0A 1C 00 +T 3C 04 00 00 DD 6E F2 DD 66 F3 E5 DD 6E F0 DD +R 00 00 01 00 +T 47 04 00 00 66 F1 E5 DD 5E EA DD 56 EB CD +R 00 00 01 00 +T 51 04 00 00 02 06 00 00 F1 F1 F1 F1 DD 75 F0 +R 00 00 01 00 00 04 01 00 +T 5A 04 00 00 DD 74 F1 DD 71 F2 DD 70 F3 +R 00 00 01 00 +T 63 04 00 00 +R 00 00 01 00 +T 63 04 00 00 C3 B7 05 00 00 +R 00 00 01 00 00 05 01 00 +T 66 04 00 00 +R 00 00 01 00 +T 66 04 00 00 DD 6E F8 DD 66 F9 E5 DD 5E FA DD +R 00 00 01 00 +T 71 04 00 00 56 FB AF 93 5F 3E 00 9A 57 01 +R 00 00 01 00 +T 7B 04 00 00 02 00 CD 00 00 00 00 D5 DD 6E F2 +R 00 00 01 00 02 07 1C 00 +T 84 04 00 00 DD 66 F3 E5 DD 6E F0 DD 66 F1 E5 +R 00 00 01 00 +T 8F 04 00 00 DD 5E EA DD 56 EB CD 02 06 00 00 +R 00 00 01 00 00 0B 01 00 +T 98 04 00 00 F1 F1 F1 F1 DD 75 F0 DD 74 F1 DD +R 00 00 01 00 +T A3 04 00 00 71 F2 DD 70 F3 C3 B7 05 00 00 +R 00 00 01 00 00 0A 01 00 +T AB 04 00 00 +R 00 00 01 00 +T AB 04 00 00 21 10 00 DD 4E EA DD 46 EB 09 7E +R 00 00 01 00 +T B6 04 00 00 E6 02 47 23 7E E6 00 B0 20 32 +R 00 00 01 00 +T C0 04 00 00 +R 00 00 01 00 +T C0 04 00 00 DD 6E F8 DD 66 F9 E5 21 01 00 E5 +R 00 00 01 00 +T CB 04 00 00 DD 6E F2 DD 66 F3 E5 DD 6E F0 DD +R 00 00 01 00 +T D6 04 00 00 66 F1 E5 DD 5E EA DD 56 EB CD +R 00 00 01 00 +T E0 04 00 00 02 06 00 00 F1 F1 F1 F1 DD 75 F0 +R 00 00 01 00 00 04 01 00 +T E9 04 00 00 DD 74 F1 DD 71 F2 DD 70 F3 +R 00 00 01 00 +T F2 04 00 00 +R 00 00 01 00 +T F2 04 00 00 C3 B7 05 00 00 +R 00 00 01 00 00 05 01 00 +T F5 04 00 00 +R 00 00 01 00 +T F5 04 00 00 21 10 00 DD 4E EA DD 46 EB 09 7E +R 00 00 01 00 +T 00 05 00 00 E6 02 47 23 7E E6 00 B0 20 35 +R 00 00 01 00 +T 0A 05 00 00 +R 00 00 01 00 +T 0A 05 00 00 DD 6E F8 DD 66 F9 E5 DD 6E FA DD +R 00 00 01 00 +T 15 05 00 00 66 FB E5 DD 6E F2 DD 66 F3 E5 DD +R 00 00 01 00 +T 20 05 00 00 6E F0 DD 66 F1 E5 DD 5E EA DD 56 +R 00 00 01 00 +T 2B 05 00 00 EB CD 02 06 00 00 F1 F1 F1 F1 DD +R 00 00 01 00 00 06 01 00 +T 34 05 00 00 75 F0 DD 74 F1 DD 71 F2 DD 70 F3 +R 00 00 01 00 +T 3F 05 00 00 +R 00 00 01 00 +T 3F 05 00 00 18 76 +R 00 00 01 00 +T 41 05 00 00 +R 00 00 01 00 +T 41 05 00 00 DD 6E F8 DD 66 F9 E5 21 FF FF E5 +R 00 00 01 00 +T 4C 05 00 00 DD 6E F2 DD 66 F3 E5 DD 6E F0 DD +R 00 00 01 00 +T 57 05 00 00 66 F1 E5 DD 5E EA DD 56 EB CD +R 00 00 01 00 +T 61 05 00 00 02 06 00 00 F1 F1 F1 F1 DD 75 F0 +R 00 00 01 00 00 04 01 00 +T 6A 05 00 00 DD 74 F1 DD 71 F2 DD 70 F3 18 42 +R 00 00 01 00 +T 75 05 00 00 +R 00 00 01 00 +T 75 05 00 00 DD 6E F8 DD 66 F9 E5 DD 6E FA DD +R 00 00 01 00 +T 80 05 00 00 66 FB AF 95 6F 3E 00 9C 67 E5 DD +R 00 00 01 00 +T 8B 05 00 00 6E F2 DD 66 F3 E5 DD 6E F0 DD 66 +R 00 00 01 00 +T 96 05 00 00 F1 E5 DD 5E EA DD 56 EB CD +R 00 00 01 00 +T 9F 05 00 00 02 06 00 00 F1 F1 F1 F1 DD 75 F0 +R 00 00 01 00 00 04 01 00 +T A8 05 00 00 DD 74 F1 DD 71 F2 DD 70 F3 18 04 +R 00 00 01 00 +T B3 05 00 00 +R 00 00 01 00 +T B3 05 00 00 18 05 +R 00 00 01 00 +T B5 05 00 00 +R 00 00 01 00 +T B5 05 00 00 18 00 +R 00 00 01 00 +T B7 05 00 00 +R 00 00 01 00 +T B7 05 00 00 C3 77 01 00 00 +R 00 00 01 00 00 05 01 00 +T BA 05 00 00 +R 00 00 01 00 +T BA 05 00 00 DD 5E EA DD 56 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 20 00 +T C2 05 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 20 00 02 0A 00 00 +T C9 05 00 00 40 00 ED 4B 00 00 00 00 09 4E 23 +R 00 00 01 00 02 08 0B 00 +T D2 05 00 00 46 11 0A 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0F 00 +T D9 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T DF 05 00 00 40 00 ED 4B 00 00 00 00 09 5E 23 +R 00 00 01 00 02 08 0B 00 +T E8 05 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T EE 05 00 00 CD 00 00 00 00 DD 5E E8 DD 56 E9 +R 00 00 01 00 02 05 00 00 +T F7 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T FD 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T FF 05 00 00 +R 00 00 01 00 +T FF 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 02 06 00 00 +R 00 00 01 00 +T 02 06 00 00 CD 00 00 00 00 F4 FF AF DD 77 FA +R 00 00 01 00 02 05 15 00 +T 0B 06 00 00 DD 77 FB AF DD 77 FE DD 77 FF DD +R 00 00 01 00 +T 16 06 00 00 7E 0C DD B6 0D 20 0F +R 00 00 01 00 +T 1D 06 00 00 +R 00 00 01 00 +T 1D 06 00 00 DD 4E 0A DD 46 0B DD 6E 08 DD 66 +R 00 00 01 00 +T 28 06 00 00 09 C3 CE 09 00 00 +R 00 00 01 00 00 06 01 00 +T 2C 06 00 00 +R 00 00 01 00 +T 2C 06 00 00 DD 4E 0C DD 46 0D 21 00 00 CD +R 00 00 01 00 +T 36 06 00 00 00 00 00 00 D2 24 07 00 00 +R 00 00 01 00 02 04 19 00 00 09 01 00 +T 3B 06 00 00 +R 00 00 01 00 +T 3B 06 00 00 21 00 00 E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T 46 06 00 00 DD 6E 08 DD 66 09 E5 DD 5E 02 DD +R 00 00 01 00 +T 51 06 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 56 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 5D 06 00 00 F1 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T 65 06 00 00 +R 00 00 01 00 +T 65 06 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 6D 06 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 74 06 00 00 75 FC DD 74 FD 7D A4 3C CA +R 00 00 01 00 +T 7D 06 00 00 13 07 00 00 +R 00 00 01 00 00 04 01 00 +T 7F 06 00 00 +R 00 00 01 00 +T 7F 06 00 00 DD 4E FC DD 46 FD 3E 0A A9 B0 20 +R 00 00 01 00 +T 8A 06 00 00 11 +R 00 00 01 00 +T 8B 06 00 00 +R 00 00 01 00 +T 8B 06 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 93 06 00 00 +R 00 00 01 00 +T 93 06 00 00 AF DD 77 FA DD 77 FB 18 41 +R 00 00 01 00 +T 9C 06 00 00 +R 00 00 01 00 +T 9C 06 00 00 3E 09 A9 B0 20 31 21 F8 FF DD 4E +R 00 00 01 00 +T A7 06 00 00 0E DD 46 0F 09 4D 44 DD 6E FA DD +R 00 00 01 00 +T B2 06 00 00 66 FB CD 00 00 00 00 30 18 +R 00 00 01 00 02 07 19 00 +T B9 06 00 00 +R 00 00 01 00 +T B9 06 00 00 21 08 00 DD 4E FA DD 46 FB 09 7D +R 00 00 01 00 +T C4 06 00 00 E6 F8 5F 7C E6 FF 57 DD 73 FA DD +R 00 00 01 00 +T CF 06 00 00 72 FB +R 00 00 01 00 +T D1 06 00 00 +R 00 00 01 00 +T D1 06 00 00 18 0A +R 00 00 01 00 +T D3 06 00 00 +R 00 00 01 00 +T D3 06 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T DB 06 00 00 +R 00 00 01 00 +T DB 06 00 00 18 00 +R 00 00 01 00 +T DD 06 00 00 +R 00 00 01 00 +T DD 06 00 00 DD 4E 0E DD 46 0F DD 6E FA DD 66 +R 00 00 01 00 +T E8 06 00 00 FB CD 00 00 00 00 38 0F +R 00 00 01 00 02 06 19 00 +T EE 06 00 00 +R 00 00 01 00 +T EE 06 00 00 AF DD 77 FA DD 77 FB DD 34 FE 20 +R 00 00 01 00 +T F9 06 00 00 03 DD 34 FF +R 00 00 01 00 +T FD 06 00 00 +R 00 00 01 00 +T FD 06 00 00 +R 00 00 01 00 +T FD 06 00 00 DD 4E 0C DD 46 0D DD 6E FE DD 66 +R 00 00 01 00 +T 08 07 00 00 FF CD 00 00 00 00 38 02 +R 00 00 01 00 02 06 19 00 +T 0E 07 00 00 +R 00 00 01 00 +T 0E 07 00 00 18 03 +R 00 00 01 00 +T 10 07 00 00 +R 00 00 01 00 +T 10 07 00 00 C3 65 06 00 00 +R 00 00 01 00 00 05 01 00 +T 13 07 00 00 +R 00 00 01 00 +T 13 07 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 1B 07 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 22 07 00 00 CE 09 00 00 +R 00 00 01 00 00 04 01 00 +T 24 07 00 00 +R 00 00 01 00 +T 24 07 00 00 DD 4E 0C DD 46 0D A7 21 00 00 ED +R 00 00 01 00 +T 2F 07 00 00 42 DD 75 0C DD 74 0D DD 4E 0E DD +R 00 00 01 00 +T 3A 07 00 00 46 0F 03 03 EB 13 CD 00 00 00 00 +R 00 00 01 00 02 0B 16 00 +T 43 07 00 00 EB 7C 07 9F 4F 41 DD 75 F4 DD 74 +R 00 00 01 00 +T 4E 07 00 00 F5 DD 71 F6 DD 70 F7 C5 E5 DD 4E +R 00 00 01 00 +T 59 07 00 00 0A DD 46 0B DD 6E 08 DD 66 09 CD +R 00 00 01 00 +T 64 07 00 00 00 00 00 00 30 0F +R 00 00 01 00 02 04 14 00 +T 68 07 00 00 +R 00 00 01 00 +T 68 07 00 00 AF DD 77 F4 DD 77 F5 DD 77 F6 DD +R 00 00 01 00 +T 73 07 00 00 77 F7 18 2D +R 00 00 01 00 +T 77 07 00 00 +R 00 00 01 00 +T 77 07 00 00 A7 DD 6E 08 DD 66 09 DD 4E F4 DD +R 00 00 01 00 +T 82 07 00 00 46 F5 ED 42 EB DD 6E 0A DD 66 0B +R 00 00 01 00 +T 8D 07 00 00 DD 4E F6 DD 46 F7 ED 42 4D 44 EB +R 00 00 01 00 +T 98 07 00 00 DD 75 F4 DD 74 F5 DD 71 F6 DD 70 +R 00 00 01 00 +T A3 07 00 00 F7 +R 00 00 01 00 +T A4 07 00 00 +R 00 00 01 00 +T A4 07 00 00 21 00 00 E5 DD 6E F6 DD 66 F7 E5 +R 00 00 01 00 +T AF 07 00 00 DD 6E F4 DD 66 F5 E5 DD 5E 02 DD +R 00 00 01 00 +T BA 07 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T BF 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T C6 07 00 00 F1 DD 4E 0C DD 46 0D 11 04 00 3E +R 00 00 01 00 +T D1 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T D6 07 00 00 00 00 00 00 DD 75 F8 DD 74 F9 E5 +R 00 00 01 00 02 04 00 00 +T DF 07 00 00 DD 5E FE DD 56 FF 13 DD 73 FE DD +R 00 00 01 00 +T EA 07 00 00 72 FF 1B DD 4E 0C DD 46 0D CD +R 00 00 01 00 +T F4 07 00 00 00 00 00 00 EB 29 29 4D 44 E1 09 +R 00 00 01 00 02 04 1A 00 +T FD 07 00 00 DD 4E F6 DD 46 F7 DD 5E F4 DD 56 +R 00 00 01 00 +T 08 08 00 00 F5 73 23 72 23 71 23 70 AF DD 77 +R 00 00 01 00 +T 13 08 00 00 FA DD 77 FB +R 00 00 01 00 +T 17 08 00 00 +R 00 00 01 00 +T 17 08 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 1F 08 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 26 08 00 00 75 FC DD 74 FD 4D 44 79 A0 3C 20 +R 00 00 01 00 +T 31 08 00 00 03 +R 00 00 01 00 +T 32 08 00 00 +R 00 00 01 00 +T 32 08 00 00 C3 67 09 00 00 +R 00 00 01 00 00 05 01 00 +T 35 08 00 00 +R 00 00 01 00 +T 35 08 00 00 3E 0A A9 B0 20 6D AF DD 77 FA DD +R 00 00 01 00 +T 40 08 00 00 77 FB DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 49 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 4E 08 00 00 00 00 00 00 DD 75 F4 DD 74 F5 DD +R 00 00 01 00 02 04 00 00 +T 57 08 00 00 71 F6 DD 70 F7 DD 5E 0A DD 56 0B +R 00 00 01 00 +T 62 08 00 00 D5 DD 5E 08 DD 56 09 D5 CD +R 00 00 01 00 +T 6B 08 00 00 00 00 00 00 38 03 +R 00 00 01 00 02 04 14 00 +T 6F 08 00 00 +R 00 00 01 00 +T 6F 08 00 00 C3 67 09 00 00 +R 00 00 01 00 00 05 01 00 +T 72 08 00 00 +R 00 00 01 00 +T 72 08 00 00 DD 5E FE DD 56 FF 13 DD 73 FE DD +R 00 00 01 00 +T 7D 08 00 00 72 FF 1B DD 4E 0C DD 46 0D CD +R 00 00 01 00 +T 87 08 00 00 00 00 00 00 EB 29 29 DD 4E F8 DD +R 00 00 01 00 02 04 1A 00 +T 90 08 00 00 46 F9 09 DD 4E F6 DD 46 F7 DD 5E +R 00 00 01 00 +T 9B 08 00 00 F4 DD 56 F5 73 23 72 23 71 23 70 +R 00 00 01 00 +T A6 08 00 00 18 41 +R 00 00 01 00 +T A8 08 00 00 +R 00 00 01 00 +T A8 08 00 00 3E 09 A9 B0 20 31 21 F8 FF DD 4E +R 00 00 01 00 +T B3 08 00 00 0E DD 46 0F 09 4D 44 DD 6E FA DD +R 00 00 01 00 +T BE 08 00 00 66 FB CD 00 00 00 00 30 18 +R 00 00 01 00 02 07 19 00 +T C5 08 00 00 +R 00 00 01 00 +T C5 08 00 00 21 08 00 DD 4E FA DD 46 FB 09 7D +R 00 00 01 00 +T D0 08 00 00 E6 F8 5F 7C E6 FF 57 DD 73 FA DD +R 00 00 01 00 +T DB 08 00 00 72 FB +R 00 00 01 00 +T DD 08 00 00 +R 00 00 01 00 +T DD 08 00 00 18 0A +R 00 00 01 00 +T DF 08 00 00 +R 00 00 01 00 +T DF 08 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T E7 08 00 00 +R 00 00 01 00 +T E7 08 00 00 18 00 +R 00 00 01 00 +T E9 08 00 00 +R 00 00 01 00 +T E9 08 00 00 DD 4E 0E DD 46 0F DD 6E FA DD 66 +R 00 00 01 00 +T F4 08 00 00 FB CD 00 00 00 00 38 6A +R 00 00 01 00 02 06 19 00 +T FA 08 00 00 +R 00 00 01 00 +T FA 08 00 00 AF DD 77 FA DD 77 FB DD 5E 02 DD +R 00 00 01 00 +T 05 09 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 0A 09 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 11 09 00 00 F4 DD 74 F5 DD 71 F6 DD 70 F7 DD +R 00 00 01 00 +T 1C 09 00 00 5E 0A DD 56 0B D5 DD 5E 08 DD 56 +R 00 00 01 00 +T 27 09 00 00 09 D5 CD 00 00 00 00 38 02 +R 00 00 01 00 02 07 14 00 +T 2E 09 00 00 +R 00 00 01 00 +T 2E 09 00 00 18 37 +R 00 00 01 00 +T 30 09 00 00 +R 00 00 01 00 +T 30 09 00 00 DD 5E FE DD 56 FF 13 DD 73 FE DD +R 00 00 01 00 +T 3B 09 00 00 72 FF 1B DD 4E 0C DD 46 0D CD +R 00 00 01 00 +T 45 09 00 00 00 00 00 00 EB 29 29 DD 4E F8 DD +R 00 00 01 00 02 04 1A 00 +T 4E 09 00 00 46 F9 09 DD 4E F6 DD 46 F7 DD 5E +R 00 00 01 00 +T 59 09 00 00 F4 DD 56 F5 73 23 72 23 71 23 70 +R 00 00 01 00 +T 64 09 00 00 +R 00 00 01 00 +T 64 09 00 00 C3 17 08 00 00 +R 00 00 01 00 00 05 01 00 +T 67 09 00 00 +R 00 00 01 00 +T 67 09 00 00 DD 4E 0C DD 46 0D DD 6E FE DD 66 +R 00 00 01 00 +T 72 09 00 00 FF CD 00 00 00 00 38 2F +R 00 00 01 00 02 06 19 00 +T 78 09 00 00 +R 00 00 01 00 +T 78 09 00 00 DD 4E 0C DD 46 0D DD 5E FE DD 56 +R 00 00 01 00 +T 83 09 00 00 FF CD 00 00 00 00 EB 29 29 DD 4E +R 00 00 01 00 02 06 1A 00 +T 8C 09 00 00 F8 DD 46 F9 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 97 09 00 00 46 EB DD 75 F4 DD 74 F5 DD 71 F6 +R 00 00 01 00 +T A2 09 00 00 DD 70 F7 18 0D +R 00 00 01 00 +T A7 09 00 00 +R 00 00 01 00 +T A7 09 00 00 AF DD 77 F4 DD 77 F5 DD 77 F6 DD +R 00 00 01 00 +T B2 09 00 00 77 F7 +R 00 00 01 00 +T B4 09 00 00 +R 00 00 01 00 +T B4 09 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T BC 09 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T C3 09 00 00 4E F6 DD 46 F7 DD 6E F4 DD 66 F5 +R 00 00 01 00 +T CE 09 00 00 +R 00 00 01 00 +T CE 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T D1 09 00 00 +R 00 00 01 00 +T D1 09 00 00 CD 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 10 00 02 0A 03 00 +T D7 09 00 00 06 00 47 01 48 01 49 01 4F 01 +R 00 00 01 00 +T E1 09 00 00 50 01 51 01 84 0A 00 00 +R 00 00 01 00 00 08 01 00 +T E7 09 00 00 6C 0A 00 00 54 0A 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T EB 09 00 00 3C 0A 00 00 24 0A 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T EF 09 00 00 0C 0A 00 00 F3 09 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T F3 09 00 00 +R 00 00 01 00 +T F3 09 00 00 21 19 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 11 00 +T FC 09 00 00 23 46 11 68 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 04 0A 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 0A 0A 00 00 8C 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 0C 0A 00 00 +R 00 00 01 00 +T 0C 0A 00 00 21 19 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 11 00 +T 15 0A 00 00 23 46 11 75 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 1D 0A 00 00 00 00 00 00 CD 00 00 00 00 18 68 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 24 0A 00 00 +R 00 00 01 00 +T 24 0A 00 00 21 19 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 11 00 +T 2D 0A 00 00 23 46 11 55 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 35 0A 00 00 00 00 00 00 CD 00 00 00 00 18 50 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 3C 0A 00 00 +R 00 00 01 00 +T 3C 0A 00 00 21 19 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 11 00 +T 45 0A 00 00 23 46 11 65 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 4D 0A 00 00 00 00 00 00 CD 00 00 00 00 18 38 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 54 0A 00 00 +R 00 00 01 00 +T 54 0A 00 00 21 19 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 11 00 +T 5D 0A 00 00 23 46 11 64 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 65 0A 00 00 00 00 00 00 CD 00 00 00 00 18 20 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 6C 0A 00 00 +R 00 00 01 00 +T 6C 0A 00 00 21 19 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 11 00 +T 75 0A 00 00 23 46 11 44 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 7D 0A 00 00 00 00 00 00 CD 00 00 00 00 18 08 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T 84 0A 00 00 +R 00 00 01 00 +T 84 0A 00 00 DD 6E 02 DD 66 03 18 16 +R 00 00 01 00 +T 8C 0A 00 00 +R 00 00 01 00 +T 8C 0A 00 00 21 19 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 11 00 +T 95 0A 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 9A 0A 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T A0 0A 00 00 00 00 +R 00 00 01 00 +T A2 0A 00 00 +R 00 00 01 00 +T A2 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 76 69 65 77 00 +R 00 00 02 00 diff --git a/src/nos/lib/net_lib/vprintf.rel b/src/nos/lib/net_lib/vprintf.rel new file mode 100644 index 00000000..26ab88fa --- /dev/null +++ b/src/nos/lib/net_lib/vprintf.rel @@ -0,0 +1,22 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _vfprintf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D flags 0 +S _vprintf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C5 4B 42 21 40 00 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 ED 5B 00 00 00 00 19 5E 23 56 3E +R 00 00 01 00 02 06 02 00 +T 12 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 17 00 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 01 00 diff --git a/src/nos/lib/net_lib/wildmat.rel b/src/nos/lib/net_lib/wildmat.rel new file mode 100644 index 00000000..216c18a1 --- /dev/null +++ b/src/nos/lib/net_lib/wildmat.rel @@ -0,0 +1,314 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strncpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2A3 flags 0 +S _wildmat Def0000005B +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF +R 00 00 01 00 +T 11 00 00 00 +R 00 00 01 00 +T 11 00 00 00 DD 6E 08 DD 66 09 E5 DD 4E 04 DD +R 00 00 01 00 +T 1C 00 00 00 46 05 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 25 00 00 00 5B 00 00 00 21 5B 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 2A 00 00 00 00 00 00 00 F1 7D B4 20 18 +R 00 00 01 00 02 04 00 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 3C 00 00 00 74 FF 7E B7 20 05 +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 21 FF FF 18 11 +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 18 C8 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 4E 02 DD 46 03 DD 6E FE DD 66 +R 00 00 01 00 +T 54 00 00 00 FF A7 ED 42 +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 CD 00 00 00 00 F8 FF +R 00 00 01 00 02 05 06 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 6E 04 DD 66 05 AF B6 CA +R 00 00 01 00 +T 69 00 00 00 83 02 00 00 +R 00 00 01 00 00 04 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 DD 6E 04 DD 66 05 5E CD +R 00 00 01 00 +T 73 00 00 00 00 00 00 00 04 00 2A 3F 5B 5C +R 00 00 01 00 02 04 0A 00 +T 7B 00 00 00 8D 00 00 00 85 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7F 00 00 00 94 01 00 00 A8 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 83 00 00 00 BB 00 00 00 +R 00 00 01 00 00 04 01 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 98 00 00 00 66 03 7E E1 BE 28 06 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 00 00 C3 A0 02 00 00 +R 00 00 01 00 00 08 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 C3 70 02 00 00 +R 00 00 01 00 00 05 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 DD 6E 02 DD 66 03 AF B6 20 06 +R 00 00 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 21 00 00 C3 A0 02 00 00 +R 00 00 01 00 00 08 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 C3 70 02 00 00 +R 00 00 01 00 00 05 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 DD 7E 0A DD B6 0B 20 2E +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T CE 00 00 00 74 05 7E B7 28 17 21 00 00 E5 DD +R 00 00 01 00 +T D9 00 00 00 4E 04 DD 46 05 DD 5E 02 DD 56 03 +R 00 00 01 00 +T E4 00 00 00 CD 00 00 00 00 F1 23 18 03 +R 00 00 01 00 00 05 01 00 +T EB 00 00 00 +R 00 00 01 00 +T EB 00 00 00 21 01 00 +R 00 00 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 C3 A0 02 00 00 +R 00 00 01 00 00 05 01 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T FC 00 00 00 74 05 7E B7 20 16 +R 00 00 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 0A 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 11 01 00 00 75 FE DD 74 FF 18 2A +R 00 00 01 00 +T 18 01 00 00 +R 00 00 01 00 +T 18 01 00 00 DD 6E 0A DD 66 0B 23 23 E5 DD 4E +R 00 00 01 00 +T 23 01 00 00 04 DD 46 05 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 2E 01 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 00 04 01 00 +T 37 01 00 00 7D A4 3C 20 06 +R 00 00 01 00 +T 3C 01 00 00 +R 00 00 01 00 +T 3C 01 00 00 21 00 00 C3 A0 02 00 00 +R 00 00 01 00 00 08 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 DD 5E FE DD 56 FF 13 3E +R 00 00 01 00 +T 4A 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 4F 01 00 00 00 00 00 00 E5 DD 6E 0A DD 66 0B +R 00 00 01 00 02 04 00 00 +T 58 01 00 00 C1 71 23 70 DD 6E FE DD 66 FF E5 +R 00 00 01 00 +T 63 01 00 00 DD 4E 02 DD 46 03 DD 6E 0A DD 66 +R 00 00 01 00 +T 6E 01 00 00 0B 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 75 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7C 01 00 00 6E 0A DD 66 0B 46 23 66 68 DD 4E +R 00 00 01 00 +T 87 01 00 00 FE DD 46 FF 09 36 00 21 01 00 C3 +R 00 00 01 00 +T 92 01 00 00 A0 02 00 00 +R 00 00 01 00 00 04 01 00 +T 94 01 00 00 +R 00 00 01 00 +T 94 01 00 00 DD 6E 04 DD 66 05 23 7E FE 5E 20 +R 00 00 01 00 +T 9F 01 00 00 05 21 01 00 18 03 +R 00 00 01 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 21 00 00 +R 00 00 01 00 +T A8 01 00 00 +R 00 00 01 00 +T A8 01 00 00 DD 75 FC DD 74 FD 7D B4 28 08 +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 DD 36 F8 00 DD 36 F9 01 AF DD 77 +R 00 00 01 00 +T C5 01 00 00 FA DD 77 FB +R 00 00 01 00 +T C9 01 00 00 +R 00 00 01 00 +T C9 01 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T D4 01 00 00 74 05 7E B7 28 7E DD 6E 04 DD 66 +R 00 00 01 00 +T DF 01 00 00 05 7E FE 5D 28 73 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 DD 6E 04 DD 66 05 7E FE 2D 20 34 +R 00 00 01 00 +T F0 01 00 00 DD 6E 02 DD 66 03 E5 DD 6E 04 DD +R 00 00 01 00 +T FB 01 00 00 66 05 23 DD 75 04 DD 74 05 7E E1 +R 00 00 01 00 +T 06 02 00 00 BE 38 18 DD 6E 02 DD 66 03 6E 26 +R 00 00 01 00 +T 11 02 00 00 00 DD 4E F8 DD 46 F9 CD +R 00 00 01 00 +T 19 02 00 00 00 00 00 00 38 04 3E 01 18 01 +R 00 00 01 00 02 04 08 00 +T 21 02 00 00 +R 00 00 01 00 +T 21 02 00 00 AF +R 00 00 01 00 +T 22 02 00 00 +R 00 00 01 00 +T 22 02 00 00 18 17 +R 00 00 01 00 +T 24 02 00 00 +R 00 00 01 00 +T 24 02 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 2F 02 00 00 66 03 7E E1 BE 20 04 3E 01 18 01 +R 00 00 01 00 +T 3A 02 00 00 +R 00 00 01 00 +T 3A 02 00 00 AF +R 00 00 01 00 +T 3B 02 00 00 +R 00 00 01 00 +T 3B 02 00 00 +R 00 00 01 00 +T 3B 02 00 00 B7 28 08 DD 36 FA 01 DD 36 FB 00 +R 00 00 01 00 +T 46 02 00 00 +R 00 00 01 00 +T 46 02 00 00 DD 6E 04 DD 66 05 4E 06 00 DD 71 +R 00 00 01 00 +T 51 02 00 00 F8 DD 70 F9 C3 C9 01 00 00 +R 00 00 01 00 00 09 01 00 +T 58 02 00 00 +R 00 00 01 00 +T 58 02 00 00 DD 6E FC DD 66 FD DD 4E FA DD 46 +R 00 00 01 00 +T 63 02 00 00 FB A7 ED 42 20 05 +R 00 00 01 00 +T 69 02 00 00 +R 00 00 01 00 +T 69 02 00 00 21 00 00 18 32 +R 00 00 01 00 +T 6E 02 00 00 +R 00 00 01 00 +T 6E 02 00 00 18 00 +R 00 00 01 00 +T 70 02 00 00 +R 00 00 01 00 +T 70 02 00 00 +R 00 00 01 00 +T 70 02 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 78 02 00 00 +R 00 00 01 00 +T 78 02 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T 80 02 00 00 +R 00 00 01 00 +T 80 02 00 00 C3 60 00 00 00 +R 00 00 01 00 00 05 01 00 +T 83 02 00 00 +R 00 00 01 00 +T 83 02 00 00 DD 6E 02 DD 66 03 AF B6 28 10 DD +R 00 00 01 00 +T 8E 02 00 00 6E 02 DD 66 03 7E FE 2F 28 05 21 +R 00 00 01 00 +T 99 02 00 00 00 00 18 03 +R 00 00 01 00 +T 9D 02 00 00 +R 00 00 01 00 +T 9D 02 00 00 21 01 00 +R 00 00 01 00 +T A0 02 00 00 +R 00 00 01 00 +T A0 02 00 00 +R 00 00 01 00 +T A0 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/net_lib/write.rel b/src/nos/lib/net_lib/write.rel new file mode 100644 index 00000000..34bcf89a --- /dev/null +++ b/src/nos/lib/net_lib/write.rel @@ -0,0 +1,93 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S __write Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _asy_write Ref00000000 +S .__.ABS. Def00000000 +S _diag_write Ref00000000 +S _errno Ref00000000 +S _send Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SS_RSH_L02 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D0 flags 0 +S _write Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 06 0D DD 5E +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 02 DD 56 03 CD 00 00 00 00 7B E6 +R 00 00 01 00 02 09 0B 00 +T 12 00 00 00 03 6F 7A E6 00 67 DD 75 FE DD 74 +R 00 00 01 00 +T 1D 00 00 00 FF DD CB 03 7E 28 0C +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 07 00 +T 2D 00 00 00 C3 CD 00 00 00 +R 00 00 01 00 00 05 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 5E FE DD 56 FF CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 39 00 00 00 00 00 04 00 C4 00 00 00 +R 00 00 01 00 00 08 01 00 +T 3F 00 00 00 47 00 00 00 65 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 43 00 00 00 88 00 00 00 A6 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 52 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 5B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 60 00 00 00 00 00 00 00 F1 18 68 +R 00 00 01 00 02 04 00 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 00 00 E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T 70 00 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 7B 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 81 00 00 00 CD 00 00 00 00 F1 F1 18 45 +R 00 00 01 00 02 05 00 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 93 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 9C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T A1 00 00 00 00 00 00 00 F1 18 27 +R 00 00 01 00 02 04 00 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T B1 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T BA 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T BF 00 00 00 00 00 00 00 F1 18 09 +R 00 00 01 00 02 04 00 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 07 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T D0 00 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/net_lib/write_p.rel b/src/nos/lib/net_lib/write_p.rel new file mode 100644 index 00000000..22619af8 --- /dev/null +++ b/src/nos/lib/net_lib/write_p.rel @@ -0,0 +1,55 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fwrite Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6B flags 0 +S _write_p Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 03 00 00 00 +R 00 00 01 00 +T 03 00 00 00 +R 00 00 01 00 +T 03 00 00 00 DD 7E 04 DD B6 05 28 5A +R 00 00 01 00 +T 0B 00 00 00 +R 00 00 01 00 +T 0B 00 00 00 DD 6E 02 DD 66 03 E5 21 0C 00 DD +R 00 00 01 00 +T 16 00 00 00 4E 04 DD 46 05 09 5E 23 56 D5 01 +R 00 00 01 00 +T 21 00 00 00 01 00 21 0A 00 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 2C 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 33 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 3A 00 00 00 E5 21 0C 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T 45 00 00 00 4E 23 46 E1 A7 ED 42 28 05 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 21 FF FF 18 15 +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 DD +R 00 00 01 00 +T 5E 00 00 00 75 04 DD 74 05 18 9E +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 00 00 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/ppp.lib b/src/nos/lib/ppp.lib new file mode 100644 index 00000000..e1392e9e --- /dev/null +++ b/src/nos/lib/ppp.lib @@ -0,0 +1,301 @@ +ppp_lib/asy.rel + _asy_attach +ppp_lib/dialer.rel + _sd_answer + _sd_init + _sd_stat + _dialer_kick +ppp_lib/fcstab.rel + _fcstab +ppp_lib/htonppp.rel + _htonppp +ppp_lib/ppp_log.rel + _ppp_log +ppp_lib/ppp_error.rel + _ppp_error +ppp_lib/ppp_skipped.rel + _ppp_skipped +ppp_lib/ppp_send.rel + _ppp_send +ppp_lib/ppp_output.rel + _ppp_output +ppp_lib/ppp_raw.rel + _ppp_raw +ppp_lib/ppp_recv.rel + _ppp_recv +ppp_lib/ppp_proc.rel + _ppp_proc +ppp_lib/ppp_iostatus.rel + _ppp_iostatus +ppp_lib/ppp_discard.rel + _ppp_discard +ppp_lib/ppp_echo.rel + _ppp_echo +ppp_lib/ppp_init.rel + _ppp_init +ppp_lib/ppp_free.rel + _ppp_free +ppp_lib/pppcmd.rel + _doppp_timeout + _doppp_commands + _doppp_close + _doppp_try + _ppp_show + _doppp_passive + _doppp_active + _PPPiface + _PPPtrace +ppp_lib/pppdump.rel + _ppp_dump +ppp_lib/fsmStates.rel + _fsmStates +ppp_lib/fsmCodes.rel + _fsmCodes +ppp_lib/htoncnf.rel + _htoncnf +ppp_lib/ntohcnf.rel + _ntohcnf +ppp_lib/ntohopt.rel + _ntohopt +ppp_lib/fsm_no_action.rel + _fsm_no_action +ppp_lib/fsm_no_check.rel + _fsm_no_check +ppp_lib/fsm_log.rel + _fsm_log +ppp_lib/fsm_timer.rel + _fsm_timer +ppp_lib/fsm_send.rel + _fsm_send +ppp_lib/fsm_sendreq.rel + _fsm_sendreq +ppp_lib/fsm_sendtermreq.rel + _fsm_sendtermreq +ppp_lib/fsm_sendtermack.rel + _fsm_sendtermack +ppp_lib/fsm_reset.rel + _fsm_reset +ppp_lib/fsm_opening.rel + _fsm_opening +ppp_lib/fsm_proc.rel + _fsm_proc +ppp_lib/fsm_timeout.rel + _fsm_timeout +ppp_lib/fsm_start.rel + _fsm_start +ppp_lib/fsm_down.rel + _fsm_down +ppp_lib/fsm_close.rel + _fsm_close +ppp_lib/fsm_init.rel + _fsm_init +ppp_lib/fsm_free.rel + _fsm_free +ppp_lib/ipcp_default.rel + _ipcp_default +ppp_lib/ipcp_negotiate.rel + _ipcp_negotiate +ppp_lib/ipcp_option_length.rel + _ipcp_option_length +ppp_lib/ipcp_constants.rel + _ipcp_constants +ppp_lib/IPcpcmds.rel + _IPcpcmds +ppp_lib/IPcpside_cmds.rel + _IPcpside_cmds +ppp_lib/doppp_ipcp.rel + _doppp_ipcp +ppp_lib/doipcp_local.rel + _doipcp_local +ppp_lib/doipcp_open.rel + _doipcp_open +ppp_lib/doipcp_pool.rel + _doipcp_pool +ppp_lib/doipcp_remote.rel + _doipcp_remote +ppp_lib/doipcp_address.rel + _doipcp_address +ppp_lib/doipcp_compress.rel + _doipcp_compress +ppp_lib/doipcp_default.rel + _doipcp_default +ppp_lib/ipcp_option.rel + _ipcp_option +ppp_lib/ipcp_makeoptions.rel + _ipcp_makeoptions +ppp_lib/ipcp_makereq.rel + _ipcp_makereq +ppp_lib/ipcp_check.rel + _ipcp_check +ppp_lib/ipcp_request.rel + _ipcp_request +ppp_lib/ipcp_ack.rel + _ipcp_ack +ppp_lib/ipcp_nak.rel + _ipcp_nak +ppp_lib/ipcp_reject.rel + _ipcp_reject +ppp_lib/ipcp_reset.rel + _ipcp_reset +ppp_lib/ipcp_stopping.rel + _ipcp_stopping +ppp_lib/ipcp_closing.rel + _ipcp_closing +ppp_lib/ipcp_opening.rel + _ipcp_opening +ppp_lib/ipcp_addr_idle.rel + _ipcp_addr_idle +ppp_lib/ipcp_poolnext.rel + _ipcp_poolnext +ppp_lib/ipcp_lookuppeer.rel + _ipcp_lookuppeer +ppp_lib/ipcp_starting.rel + _ipcp_starting +ppp_lib/ipcp_free.rel + _ipcp_free +ppp_lib/ipcp_init.rel + _ipcp_init +ppp_lib/lcp_default.rel + _lcp_default +ppp_lib/lcp_negotiate.rel + _lcp_negotiate +ppp_lib/lcp_option_length.rel + _lcp_option_length +ppp_lib/lcp_constants.rel + _lcp_constants +ppp_lib/Lcpcmds.rel + _Lcpcmds +ppp_lib/Lcpside_cmds.rel + _Lcpside_cmds +ppp_lib/doppp_lcp.rel + _doppp_lcp +ppp_lib/dolcp_local.rel + _dolcp_local +ppp_lib/dolcp_open.rel + _dolcp_open +ppp_lib/dolcp_remote.rel + _dolcp_remote +ppp_lib/dolcp_accm.rel + _dolcp_accm +ppp_lib/dolcp_acfc.rel + _dolcp_acfc +ppp_lib/dolcp_auth.rel + _dolcp_auth +ppp_lib/dolcp_magic.rel + _dolcp_magic +ppp_lib/dolcp_mru.rel + _dolcp_mru +ppp_lib/dolcp_pfc.rel + _dolcp_pfc +ppp_lib/dolcp_default.rel + _dolcp_default +ppp_lib/lcp_option.rel + _lcp_option +ppp_lib/lcp_makeoptions.rel + _lcp_makeoptions +ppp_lib/lcp_makereq.rel + _lcp_makereq +ppp_lib/lcp_check.rel + _lcp_check +ppp_lib/lcp_request.rel + _lcp_request +ppp_lib/lcp_ack.rel + _lcp_ack +ppp_lib/lcp_nak.rel + _lcp_nak +ppp_lib/lcp_reject.rel + _lcp_reject +ppp_lib/ppp_ready.rel + _ppp_ready +ppp_lib/lcp_reset.rel + _lcp_reset +ppp_lib/lcp_starting.rel + _lcp_starting +ppp_lib/lcp_stopping.rel + _lcp_stopping +ppp_lib/lcp_closing.rel + _lcp_closing +ppp_lib/lcp_opening.rel + _lcp_opening +ppp_lib/lcp_free.rel + _lcp_free +ppp_lib/lcp_init.rel + _lcp_init +ppp_lib/pap_constants.rel + _pap_constants +ppp_lib/Papcmds.rel + _Papcmds +ppp_lib/doppp_pap.rel + _doppp_pap +ppp_lib/dopap_user.rel + _dopap_user +ppp_lib/pap_monitor.rel + _pap_monitor +ppp_lib/pap_pwdlookup.rel + _pap_pwdlookup +ppp_lib/pap_verify.rel + _pap_verify +ppp_lib/stpcpy.rel + _stpcpy +ppp_lib/pap_makereq.rel + _pap_makereq +ppp_lib/pap_shutdown.rel + _pap_shutdown +ppp_lib/pap_opening.rel + _pap_opening +ppp_lib/pap_request.rel + _pap_request +ppp_lib/pap_check.rel + _pap_check +ppp_lib/pap_proc.rel + _pap_proc +ppp_lib/pap_timeout.rel + _pap_timeout +ppp_lib/pap_down.rel + _pap_down +ppp_lib/pap_free.rel + _pap_free +ppp_lib/pap_init.rel + _pap_init +ppp_lib/pap_local.rel + _pap_local +ppp_lib/pap_remote.rel + _pap_remote +ppp_lib/slhc_init.rel + _slhc_init +ppp_lib/slhc_free.rel + _slhc_free +ppp_lib/encode.rel + _encode +ppp_lib/decode.rel + _decode +ppp_lib/slhc_compress.rel + _slhc_compress +ppp_lib/slhc_uncompress.rel + _slhc_uncompress +ppp_lib/slhc_remember.rel + _slhc_remember +ppp_lib/slhc_toss.rel + _slhc_toss +ppp_lib/slhc_i_status.rel + _slhc_i_status +ppp_lib/slhc_o_status.rel + _slhc_o_status +ppp_lib/slhcdump.rel + _vjcomp_dump + _sl_dump +ppp_lib/slip.rel + _slip_send + _slip_rx + _slip_init + _vjslip_send + _slip_raw + _slip_free + _slip_status + _Slip +ppp_lib/sppp.rel + _sppp_free + _sppp_send + _sppp_rx + _sppp_output + _sppp_init diff --git a/src/nos/lib/ppp_lib/IPcpcmds.rel b/src/nos/lib/ppp_lib/IPcpcmds.rel new file mode 100644 index 00000000..8388c960 --- /dev/null +++ b/src/nos/lib/ppp_lib/IPcpcmds.rel @@ -0,0 +1,57 @@ +XL4 +H 4 areas 13 global symbols +S ___0438_23aa_close Ref00000000 +S _doppp_timeout Ref00000000 +S _doipcp_open Ref00000000 +S ___05b3_7156_timeout Ref00000000 +S _doppp_close Ref00000000 +S _doipcp_pool Ref00000000 +S ___04b9_4346_listen Ref00000000 +S ___0527_5919_pool Ref00000000 +S .__.ABS. Def00000000 +S _doppp_try Ref00000000 +S ___04bb_f2d8_local Ref00000000 +S _doipcp_local Ref00000000 +S _doipcp_remote Ref00000000 +S ___0547_bc2e_remote Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___050d_3971_open Ref00000000 +S _doppp_passive Ref00000000 +S ___05bf_f7b8_try Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 75 flags 0 +S _IPcpcmds Def00000000 +A CDATA0 size 75 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 4A 08 04 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 06 00 +T 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 10 00 +T 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0A 00 4A 08 0B 00 +T 22 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 0F 00 +T 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 02 00 +T 34 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 07 00 4A 08 05 00 +T 3C 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 0D 00 +T 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0C 00 +T 4E 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 03 00 4A 08 01 00 +T 56 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 11 00 +T 5E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 09 00 +T 68 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 73 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/IPcpside_cmds.rel b/src/nos/lib/ppp_lib/IPcpside_cmds.rel new file mode 100644 index 00000000..30799605 --- /dev/null +++ b/src/nos/lib/ppp_lib/IPcpside_cmds.rel @@ -0,0 +1,31 @@ +XL4 +H 4 areas 9 global symbols +S _doipcp_default Ref00000000 +S _doipcp_address Ref00000000 +S _doipcp_compress Ref00000000 +S ___0445_fbc2_compress Ref00000000 +S .__.ABS. Def00000000 +S ___0450_740d_default Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0400_9712_address Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 34 flags 0 +S _IPcpside_cmds Def00000000 +A CDATA0 size 34 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 07 00 4A 08 01 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 03 00 +T 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 02 00 +T 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 05 00 4A 08 00 00 +T 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 2D 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/Lcpcmds.rel b/src/nos/lib/ppp_lib/Lcpcmds.rel new file mode 100644 index 00000000..1877fdeb --- /dev/null +++ b/src/nos/lib/ppp_lib/Lcpcmds.rel @@ -0,0 +1,51 @@ +XL4 +H 4 areas 11 global symbols +S ___0438_23aa_close Ref00000000 +S _doppp_timeout Ref00000000 +S ___05b3_7156_timeout Ref00000000 +S _doppp_close Ref00000000 +S ___04b9_4346_listen Ref00000000 +S .__.ABS. Def00000000 +S _doppp_try Ref00000000 +S _dolcp_open Ref00000000 +S ___04bb_f2d8_local Ref00000000 +S ___0547_bc2e_remote Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___050d_3971_open Ref00000000 +S _dolcp_local Ref00000000 +S _doppp_passive Ref00000000 +S _dolcp_remote Ref00000000 +S ___05bf_f7b8_try Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 68 flags 0 +S _Lcpcmds Def00000000 +A CDATA0 size 68 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 4A 08 03 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 04 00 +T 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0D 00 +T 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 08 00 4A 08 0C 00 +T 22 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 0B 00 +T 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 07 00 +T 34 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 09 00 4A 08 0E 00 +T 3C 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 02 00 +T 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 +T 4E 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0F 00 4A 08 06 00 +T 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 61 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/Lcpside_cmds.rel b/src/nos/lib/ppp_lib/Lcpside_cmds.rel new file mode 100644 index 00000000..f08e2789 --- /dev/null +++ b/src/nos/lib/ppp_lib/Lcpside_cmds.rel @@ -0,0 +1,51 @@ +XL4 +H 4 areas 11 global symbols +S _dolcp_mru Ref00000000 +S _dolcp_accm Ref00000000 +S ___04c3_0288_magic Ref00000000 +S ___04e9_245f_mru Ref00000000 +S _dolcp_default Ref00000000 +S ___03f9_9b89_accm Ref00000000 +S .__.ABS. Def00000000 +S ___03fb_0c4f_acfc Ref00000000 +S _dolcp_auth Ref00000000 +S ___0450_740d_default Ref00000000 +S _dolcp_pfc Ref00000000 +S _dolcp_magic Ref00000000 +S ___0523_d9f3_pfc Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dolcp_acfc Ref00000000 +S ___0415_c133_authenticate Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 68 flags 0 +S _Lcpside_cmds Def00000000 +A CDATA0 size 68 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 05 00 4A 08 01 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 07 00 +T 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0E 00 +T 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0F 00 4A 08 08 00 +T 22 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 02 00 +T 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0B 00 +T 34 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 03 00 4A 08 00 00 +T 3C 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 0C 00 +T 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0A 00 +T 4E 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 09 00 4A 08 04 00 +T 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 61 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/Papcmds.rel b/src/nos/lib/ppp_lib/Papcmds.rel new file mode 100644 index 00000000..8c43b498 --- /dev/null +++ b/src/nos/lib/ppp_lib/Papcmds.rel @@ -0,0 +1,31 @@ +XL4 +H 4 areas 9 global symbols +S _doppp_timeout Ref00000000 +S ___05b3_7156_timeout Ref00000000 +S .__.ABS. Def00000000 +S _doppp_try Ref00000000 +S _dopap_user Ref00000000 +S ___05d0_13f7_user Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___05bf_f7b8_try Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 34 flags 0 +S _Papcmds Def00000000 +A CDATA0 size 34 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 4A 08 00 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 09 07 00 +T 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 03 00 +T 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 05 00 4A 08 04 00 +T 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 2D 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/asy.rel b/src/nos/lib/ppp_lib/asy.rel new file mode 100644 index 00000000..4fa890f7 --- /dev/null +++ b/src/nos/lib/ppp_lib/asy.rel @@ -0,0 +1,467 @@ +XL4 +H 3 areas 22 global symbols +S _stricmp Ref00000000 +S ___0161_bba5__25s_3a_20mode_20_2 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _if_lookup Ref00000000 +S ___02d5_aa15_Mode_20_25s_20unkno Ref00000000 +S _Ifaces Ref00000000 +S _if_name Ref00000000 +S ___03c5_d2a4_Unknown_20encapsula Ref00000000 +S _Asymode Ref00000000 +S _setencap Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S _if_detach Ref00000000 +S ___03ac_76b7_Too_20many_20asynch Ref00000000 +S _strdupw Ref00000000 +S _if_tx Ref00000000 +S .__.ABS. Def00000000 +S _asy_init Ref00000000 +S _free Ref00000000 +S _callocw Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _atoi Ref00000000 +S _Asy Ref00000000 +S _atol Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _asy_stop Ref00000000 +S __printf Ref00000000 +S _Ip_addr Ref00000000 +S _htoi Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___02a3_5a50_Interface_20_25s_20 Ref00000000 +S _newproc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4FD flags 0 +S _asy_attach Def00000000 +A CSTR size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E6 FF DD 36 EA FF +R 00 00 01 00 02 05 14 00 +T 09 00 00 00 DD 36 EB FF 21 08 00 09 5E 23 56 +R 00 00 01 00 +T 14 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 1A 00 00 00 00 00 00 00 7D B4 28 26 +R 00 00 01 00 02 04 02 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 08 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 2B 00 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 1F 00 +T 32 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 1F 00 2B 0A 1B 00 +T 38 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1B 00 02 09 02 00 +T 3F 00 00 00 F1 21 FF FF C3 51 04 00 00 +R 00 00 01 00 00 09 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 21 06 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 51 00 00 00 23 46 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T 59 00 00 00 00 00 00 00 CD 00 00 00 00 7D A4 +R 00 00 01 00 02 04 09 00 02 09 02 00 +T 60 00 00 00 3C 20 26 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 21 06 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 6E 00 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 07 00 +T 75 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 2B 0A 1B 00 +T 7B 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1B 00 02 09 02 00 +T 82 00 00 00 F1 21 FF FF C3 51 04 00 00 +R 00 00 01 00 00 09 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 AF DD 77 E8 DD 77 E9 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 01 02 80 DD 6E E8 DD 66 E9 3E 80 +R 00 00 01 00 +T 9B 00 00 00 AC 67 ED 42 30 21 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 01 59 00 DD 5E E8 DD 56 E9 CD +R 00 00 01 00 +T AB 00 00 00 00 00 00 00 21 00 00 00 00 19 7E +R 00 00 01 00 02 04 15 00 02 09 17 00 +T B2 00 00 00 23 B6 20 02 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 18 0A +R 00 00 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 DD 34 E8 20 03 DD 34 E9 +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 18 CE +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 01 02 80 DD 6E E8 DD 66 E9 3E 80 +R 00 00 01 00 +T CD 00 00 00 AC 67 ED 42 38 17 +R 00 00 01 00 +T D3 00 00 00 +R 00 00 01 00 +T D3 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0D 00 02 0B 0D 00 +T D9 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1B 00 02 0B 1B 00 +T DF 00 00 00 CD 00 00 00 00 F1 F1 21 FF FF C3 +R 00 00 01 00 02 05 02 00 +T E8 00 00 00 51 04 00 00 +R 00 00 01 00 00 04 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 01 59 00 DD 5E E8 DD 56 E9 CD +R 00 00 01 00 +T F4 00 00 00 00 00 00 00 21 00 00 00 00 19 DD +R 00 00 01 00 02 04 15 00 02 09 17 00 +T FB 00 00 00 75 F8 DD 74 F9 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 06 01 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1D 00 +T 0E 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1D 00 02 09 02 00 +T 15 01 00 00 F4 DD 74 F5 21 04 00 DD 4E 04 DD +R 00 00 01 00 +T 20 01 00 00 46 05 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 16 00 +T 28 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 16 00 02 0A 02 00 +T 2F 01 00 00 75 F6 DD 74 F7 01 69 00 11 01 00 +R 00 00 01 00 +T 3A 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 40 01 00 00 00 00 00 00 DD 75 E6 DD 74 E7 01 +R 00 00 01 00 02 04 02 00 +T 49 01 00 00 04 00 09 ED 4B 02 00 00 00 ED 5B +R 00 00 01 00 02 09 1C 00 +T 52 01 00 00 00 00 00 00 73 23 72 23 71 23 70 +R 00 00 01 00 02 04 1C 00 +T 5B 01 00 00 DD 6E E6 DD 66 E7 23 23 E5 21 +R 00 00 01 00 +T 65 01 00 00 08 00 DD 4E 04 DD 46 05 09 5E 23 +R 00 00 01 00 +T 70 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 76 01 00 00 CD 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 05 02 00 +T 7F 01 00 00 10 00 DD 5E E6 DD 56 E7 19 E5 21 +R 00 00 01 00 +T 8A 01 00 00 0C 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 16 00 +T 92 01 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 16 00 02 0A 02 00 +T 99 01 00 00 E1 73 23 72 21 2C 00 DD 5E E6 DD +R 00 00 01 00 +T A4 01 00 00 56 E7 19 DD 4E E8 DD 46 E9 71 23 +R 00 00 01 00 +T AF 01 00 00 70 21 34 00 19 36 54 04 00 00 23 +R 00 00 01 00 09 0A 01 00 +T B7 01 00 00 36 54 04 00 00 23 36 54 04 00 00 +R 00 00 01 00 89 05 01 00 29 0B 01 00 +T BC 01 00 00 21 06 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T C7 01 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T CC 01 00 00 00 00 00 00 CD 00 00 00 00 DD 36 +R 00 00 01 00 02 04 09 00 02 09 02 00 +T D3 01 00 00 F0 00 00 00 00 DD 36 F1 +R 00 00 01 00 0B 05 08 00 +T D8 01 00 00 00 00 00 00 +R 00 00 01 00 8B 04 08 00 +T D9 01 00 00 +R 00 00 01 00 +T D9 01 00 00 DD 6E F0 DD 66 F1 7E 23 B6 CA +R 00 00 01 00 +T E3 01 00 00 8A 02 00 00 +R 00 00 01 00 00 04 01 00 +T E5 01 00 00 +R 00 00 01 00 +T E5 01 00 00 DD 6E F0 DD 66 F1 4E 23 46 21 +R 00 00 01 00 +T EF 01 00 00 06 00 DD 5E 04 DD 56 05 19 5E 23 +R 00 00 01 00 +T FA 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 00 02 00 00 CD 00 00 00 00 7D B4 20 73 +R 00 00 01 00 02 05 02 00 +T 07 02 00 00 +R 00 00 01 00 +T 07 02 00 00 DD 6E F0 DD 66 F1 23 23 46 23 66 +R 00 00 01 00 +T 12 02 00 00 68 DD 75 EA DD 74 EB DD 5E E6 DD +R 00 00 01 00 +T 1D 02 00 00 56 E7 21 04 00 DD 4E F0 DD 46 F1 +R 00 00 01 00 +T 28 02 00 00 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 31 02 00 00 00 00 00 00 7D B4 28 41 +R 00 00 01 00 02 04 02 00 +T 37 02 00 00 +R 00 00 01 00 +T 37 02 00 00 21 06 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 42 02 00 00 23 46 C5 DD 6E E6 DD 66 E7 23 23 +R 00 00 01 00 +T 4D 02 00 00 4E 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 01 00 +T 55 02 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 1B 00 +T 5B 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1B 00 02 09 02 00 +T 62 02 00 00 F1 F1 DD 5E E6 DD 56 E7 3E +R 00 00 01 00 +T 6B 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 70 02 00 00 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 02 00 +T 76 02 00 00 51 04 00 00 +R 00 00 01 00 00 04 01 00 +T 78 02 00 00 +R 00 00 01 00 +T 78 02 00 00 18 10 +R 00 00 01 00 +T 7A 02 00 00 +R 00 00 01 00 +T 7A 02 00 00 DD 7E F0 C6 0A DD 77 F0 30 03 DD +R 00 00 01 00 +T 85 02 00 00 34 F1 +R 00 00 01 00 +T 87 02 00 00 +R 00 00 01 00 +T 87 02 00 00 C3 D9 01 00 00 +R 00 00 01 00 00 05 01 00 +T 8A 02 00 00 +R 00 00 01 00 +T 8A 02 00 00 DD 6E F0 DD 66 F1 7E 23 B6 20 3D +R 00 00 01 00 +T 95 02 00 00 +R 00 00 01 00 +T 95 02 00 00 21 08 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T A0 02 00 00 23 56 D5 21 06 00 09 4E 23 46 C5 +R 00 00 01 00 +T AB 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 04 00 02 0B 04 00 +T B1 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1B 00 02 0B 1B 00 +T B7 02 00 00 CD 00 00 00 00 F1 F1 F1 F1 DD 5E +R 00 00 01 00 02 05 02 00 +T C0 02 00 00 E6 DD 56 E7 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0C 00 +T C7 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0C 00 02 09 02 00 +T CD 02 00 00 FF FF C3 51 04 00 00 +R 00 00 01 00 00 07 01 00 +T D2 02 00 00 +R 00 00 01 00 +T D2 02 00 00 2A 00 00 00 00 E5 DD 6E E6 DD 66 +R 00 00 01 00 02 05 05 00 +T DB 02 00 00 E7 C1 71 23 70 DD 6E E6 DD 66 E7 +R 00 00 01 00 +T E6 02 00 00 22 00 00 00 00 AF DD 77 EE DD 77 +R 00 00 01 00 02 05 05 00 +T EF 02 00 00 EF AF DD 77 EC DD 77 ED DD 4E 02 +R 00 00 01 00 +T FA 02 00 00 DD 46 03 21 08 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 19 00 +T 03 03 00 00 30 48 +R 00 00 01 00 +T 05 03 00 00 +R 00 00 01 00 +T 05 03 00 00 01 63 00 21 10 00 DD 5E 04 DD 56 +R 00 00 01 00 +T 10 03 00 00 05 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T 18 03 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0B 00 02 09 02 00 +T 1F 03 00 00 28 08 +R 00 00 01 00 +T 21 03 00 00 +R 00 00 01 00 +T 21 03 00 00 DD 36 EC 01 DD 36 ED 00 +R 00 00 01 00 +T 29 03 00 00 +R 00 00 01 00 +T 29 03 00 00 01 72 00 21 10 00 DD 5E 04 DD 56 +R 00 00 01 00 +T 34 03 00 00 05 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T 3C 03 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0B 00 02 09 02 00 +T 43 03 00 00 28 08 +R 00 00 01 00 +T 45 03 00 00 +R 00 00 01 00 +T 45 03 00 00 DD 36 EE 01 DD 36 EF 00 +R 00 00 01 00 +T 4D 03 00 00 +R 00 00 01 00 +T 4D 03 00 00 +R 00 00 01 00 +T 4D 03 00 00 01 63 00 21 04 00 DD 5E 04 DD 56 +R 00 00 01 00 +T 58 03 00 00 05 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T 60 03 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0B 00 02 09 02 00 +T 67 03 00 00 28 0A +R 00 00 01 00 +T 69 03 00 00 +R 00 00 01 00 +T 69 03 00 00 DD 36 FE 01 DD 36 FF 00 18 07 +R 00 00 01 00 +T 73 03 00 00 +R 00 00 01 00 +T 73 03 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 7A 03 00 00 +R 00 00 01 00 +T 7A 03 00 00 DD 6E FE DD 66 FF E5 DD 6E EE DD +R 00 00 01 00 +T 85 03 00 00 66 EF E5 DD 6E EC DD 66 ED E5 21 +R 00 00 01 00 +T 90 03 00 00 0E 00 DD 4E 04 DD 46 05 09 5E 23 +R 00 00 01 00 +T 9B 03 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 18 00 02 0B 18 00 +T A1 03 00 00 CD 00 00 00 00 C5 E5 DD 6E EA DD +R 00 00 01 00 02 05 02 00 +T AA 03 00 00 66 EB E5 21 0A 00 DD 4E 04 DD 46 +R 00 00 01 00 +T B5 03 00 00 05 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 18 00 +T BD 03 00 00 00 00 00 00 CD 00 00 00 00 E5 DD +R 00 00 01 00 02 04 18 00 02 09 02 00 +T C4 03 00 00 6E F6 DD 66 F7 E5 DD 6E F4 DD 66 +R 00 00 01 00 +T CF 03 00 00 F5 E5 DD 4E E6 DD 46 E7 DD 5E E8 +R 00 00 01 00 +T DA 03 00 00 DD 56 E9 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 11 00 +T E0 03 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 11 00 02 09 02 00 +T E7 03 00 00 12 00 39 F9 EB 01 00 00 00 00 DD +R 00 00 01 00 00 0A 02 00 +T F0 03 00 00 5E E6 DD 56 E7 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T F8 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 02 00 +T FF 03 00 00 F2 DD 74 F3 21 1A 00 DD 4E E6 DD +R 00 00 01 00 +T 0A 04 00 00 46 E7 09 E5 11 00 00 D5 11 00 00 +R 00 00 01 00 +T 15 04 00 00 D5 C5 01 00 00 C5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 1D 04 00 00 C5 01 00 00 00 00 C5 01 00 03 DD +R 00 00 01 00 02 06 0F 00 +T 26 04 00 00 5E F2 DD 56 F3 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 20 00 +T 2E 04 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 20 00 02 09 02 00 +T 35 04 00 00 0C 00 39 F9 EB 4D 44 E1 71 23 70 +R 00 00 01 00 +T 40 04 00 00 DD 5E F2 DD 56 F3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T 48 04 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 12 00 02 0A 02 00 +T 4F 04 00 00 00 00 +R 00 00 01 00 +T 51 04 00 00 +R 00 00 01 00 +T 51 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 54 04 00 00 +R 00 00 01 00 +T 54 04 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 14 00 +T 5D 04 00 00 B6 03 20 06 +R 00 00 01 00 +T 61 04 00 00 +R 00 00 01 00 +T 61 04 00 00 21 FF FF C3 FA 04 00 00 +R 00 00 01 00 00 08 01 00 +T 67 04 00 00 +R 00 00 01 00 +T 67 04 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1A 00 +T 6F 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 1A 00 02 0A 02 00 +T 76 04 00 00 36 FE 00 00 00 00 DD 36 FF +R 00 00 01 00 0B 06 08 00 +T 7C 04 00 00 00 00 00 00 +R 00 00 01 00 8B 04 08 00 +T 7D 04 00 00 +R 00 00 01 00 +T 7D 04 00 00 DD 6E FE DD 66 FF 7E 23 B6 28 6F +R 00 00 01 00 +T 88 04 00 00 +R 00 00 01 00 +T 88 04 00 00 21 3D 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 93 04 00 00 23 B6 28 51 DD 6E FE DD 66 FF 4E +R 00 00 01 00 +T 9E 04 00 00 23 46 21 3D 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T A9 04 00 00 19 7E 23 66 6F 5E 23 56 3E +R 00 00 01 00 +T B2 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T B7 04 00 00 00 00 00 00 7D B4 20 2B 21 07 00 +R 00 00 01 00 02 04 02 00 +T C0 04 00 00 DD 4E FE DD 46 FF 09 7E 23 B6 23 +R 00 00 01 00 +T CB 04 00 00 B6 28 1A +R 00 00 01 00 +T CE 04 00 00 +R 00 00 01 00 +T CE 04 00 00 +R 00 00 01 00 +T CE 04 00 00 +R 00 00 01 00 +T CE 04 00 00 DD 5E 02 DD 56 03 21 07 00 DD 4E +R 00 00 01 00 +T D9 04 00 00 FE DD 46 FF 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T E4 04 00 00 60 CD 00 00 00 00 +R 00 00 01 00 02 06 02 00 +T E8 04 00 00 +R 00 00 01 00 +T E8 04 00 00 DD 7E FE C6 0A DD 77 FE 30 03 DD +R 00 00 01 00 +T F3 04 00 00 34 FF +R 00 00 01 00 +T F5 04 00 00 +R 00 00 01 00 +T F5 04 00 00 18 86 +R 00 00 01 00 +T F7 04 00 00 +R 00 00 01 00 +T F7 04 00 00 21 00 00 +R 00 00 01 00 +T FA 04 00 00 +R 00 00 01 00 +T FA 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 74 78 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/decode.rel b/src/nos/lib/ppp_lib/decode.rel new file mode 100644 index 00000000..106b4cf1 --- /dev/null +++ b/src/nos/lib/ppp_lib/decode.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pull16 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3B flags 0 +S _decode Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 10 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 25 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 2C 00 00 00 0B +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 DD 6E FE DD 66 FF 7C 07 9F 4F 41 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/ppp_lib/dialer.rel b/src/nos/lib/ppp_lib/dialer.rel new file mode 100644 index 00000000..f42cfd9c --- /dev/null +++ b/src/nos/lib/ppp_lib/dialer.rel @@ -0,0 +1,1459 @@ +XL4 +H 5 areas 52 global symbols +S _suspend Ref00000000 +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0591_5069_status Ref00000000 +S ___03cf_f8b8_Usage_3a_20dial_20_ Ref00000000 +S ___0592_7dfc_status_20up_20_7c_2 Ref00000000 +S _stop_timer Ref00000000 +S ?S_MULASG_L02 Ref00000000 +S _tprintf Ref00000000 +S _secclock Ref00000000 +S _fflush Ref00000000 +S ___056a_e397_send_20_22string_22 Ref00000000 +S _logmsg Ref00000000 +S _donothing Ref00000000 +S _rip Ref00000000 +S ___0584_60cd_speed Ref00000000 +S _set_timer Ref00000000 +S ___05dd_d63a_wait Ref00000000 +S _ppause Ref00000000 +S _if_name Ref00000000 +S _cmdparse Ref00000000 +S _devparam Ref00000000 +S _resume Ref00000000 +S ___00c0_8c07__20idle_20timer_20_ Ref00000000 +S ___0159_35bd__25s_3a_20_25s_2c Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0000_ffff_ Ref00000000 +S _asy_write Ref00000000 +S _strlen Ref00000000 +S ___01fa_0e64_Calls_20originated_ Ref00000000 +S _strdupw Ref00000000 +S _fgets Ref00000000 +S ___046b_e0fd_down_20script_3a_20 Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _read_timer Ref00000000 +S .__.ABS. Def00000000 +S _raw_dump Ref00000000 +S ___01fb_9777_Calls_20timed_20out Ref00000000 +S _kwait Ref00000000 +S _killproc Ref00000000 +S ___0045_48df__20_20_20_20_20_20_ Ref00000000 +S ___05ca_f303_up_20script_3a_20_2 Ref00000000 +S _free Ref00000000 +S _fputc Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___ctype Ref00000000 +S ___0407_c2a0_answer_20script_3a_ Ref00000000 +S ___02da_06a9_Must_20set_20_27r_2 Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _errno Ref00000000 +S ___0449_5769_control Ref00000000 +S ___03c2_41aa_Unknown_20command Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _get_asy Ref00000000 +S ___0569_9a3e_send Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _Asy Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _start_timer Ref00000000 +S _calloc Ref00000000 +S ___0585_9785_speed_20_3cbps_3e Ref00000000 +S _mallocw Ref00000000 +S _freopen Ref00000000 +S ___05de_2887_wait_20_3cmilliseco Ref00000000 +S _atol Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _kalarm Ref00000000 +S ___044a_941e_control_20up_20_7c_ Ref00000000 +S _fclose Ref00000000 +S ___02a7_63a0_Interface_20_25s_20 Ref00000000 +S _bitbucket Ref00000000 +S _asy_speed Ref00000000 +S _newproc Ref00000000 +S ___030b_7f27_No_20dialer_20activ Ref00000000 +S ___0143_ace2__25s_20dialer_3a_20 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size EFF flags 0 +S _sd_answer Def00000673 +S _sd_init Def00000000 +S _sd_stat Def0000031C +S _dialer_kick Def0000050B +A CSTR size A4 flags 0 +A IDATA0 size 5B flags 0 +A CDATA0 size 5B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 2C 00 DD +R 00 00 01 00 02 05 34 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 01 +R 00 00 01 00 +T 14 00 00 00 02 80 3E 80 AC 67 ED 42 30 26 21 +R 00 00 01 00 +T 1F 00 00 00 2C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 2A 00 00 00 56 01 59 00 CD 00 00 00 00 21 +R 00 00 01 00 02 09 35 00 +T 32 00 00 00 00 00 00 00 19 46 23 66 68 DD 4E +R 00 00 01 00 02 04 39 00 +T 3B 00 00 00 02 DD 46 03 A7 ED 42 28 24 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 DD 6E 10 DD 66 11 23 23 4E 23 46 +R 00 00 01 00 +T 4F 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 48 00 +T 54 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 48 00 2B 0A 43 00 +T 5A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 43 00 02 09 02 00 +T 61 00 00 00 F1 21 01 00 C3 19 03 00 00 +R 00 00 01 00 00 09 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 21 2C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 73 00 00 00 23 46 11 59 00 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 35 00 +T 7C 00 00 00 00 00 00 00 19 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 39 00 +T 85 00 00 00 DD 7E 0A DD B6 0B DD B6 0C DD B6 +R 00 00 01 00 +T 90 00 00 00 0D 28 39 01 03 80 DD 6E 0E DD 66 +R 00 00 01 00 +T 9B 00 00 00 0F 3E 80 AC 67 ED 42 30 28 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 +R 00 00 01 00 +T A4 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 04 00 02 0B 04 00 +T AA 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 43 00 02 0B 43 00 +T B0 00 00 00 CD 00 00 00 00 F1 F1 0E +R 00 00 01 00 02 05 02 00 +T B6 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 28 00 02 0A 28 00 +T BC 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 43 00 02 0A 43 00 +T C2 00 00 00 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 04 02 00 +T CA 00 00 00 19 03 00 00 +R 00 00 01 00 00 04 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 21 2F 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T D7 00 00 00 B7 20 17 +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 2F 00 02 0B 2F 00 +T E0 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 43 00 02 0B 43 00 +T E6 00 00 00 CD 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 05 02 00 +T EF 00 00 00 19 03 00 00 +R 00 00 01 00 00 04 01 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 21 24 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T FC 00 00 00 23 B6 CA BD 01 00 00 +R 00 00 01 00 00 07 01 00 +T 01 01 00 00 +R 00 00 01 00 +T 01 01 00 00 21 24 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 0C 01 00 00 23 66 68 DD 75 FC DD 74 FD 01 +R 00 00 01 00 +T 16 01 00 00 06 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 06 00 +T 1D 01 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 06 00 02 09 02 00 +T 24 01 00 00 FC DD 66 FD 7E 23 B6 28 1B +R 00 00 01 00 +T 2D 01 00 00 +R 00 00 01 00 +T 2D 01 00 00 DD 6E FC DD 66 FD 5E 23 56 3E +R 00 00 01 00 +T 37 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2A 00 02 09 2A 00 +T 3C 01 00 00 00 00 00 00 DD 6E FC DD 66 FD AF +R 00 00 01 00 02 04 02 00 +T 45 01 00 00 77 23 77 +R 00 00 01 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 DD 6E FC DD 66 FD 23 23 7E 23 B6 +R 00 00 01 00 +T 53 01 00 00 28 1F +R 00 00 01 00 +T 55 01 00 00 +R 00 00 01 00 +T 55 01 00 00 DD 6E FC DD 66 FD 23 23 5E 23 56 +R 00 00 01 00 +T 60 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2A 00 02 0A 2A 00 +T 66 01 00 00 00 00 00 00 DD 6E FC DD 66 FD 23 +R 00 00 01 00 02 04 02 00 +T 6F 01 00 00 23 AF 77 23 77 +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 21 04 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 7F 01 00 00 23 B6 28 1D +R 00 00 01 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 21 04 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 8E 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2A 00 +T 93 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 2A 00 02 09 02 00 +T 99 01 00 00 04 00 09 AF 77 23 77 +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 21 24 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T AB 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2A 00 +T B0 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 2A 00 02 09 02 00 +T B6 01 00 00 24 00 09 AF 77 23 77 +R 00 00 01 00 +T BD 01 00 00 +R 00 00 01 00 +T BD 01 00 00 21 1C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T C8 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 27 00 +T CD 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 27 00 02 09 02 00 +T D3 01 00 00 1C 00 09 AF 77 23 77 01 24 00 11 +R 00 00 01 00 +T DE 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 3C 00 +T E3 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 3C 00 02 09 02 00 +T EA 01 00 00 FC DD 74 FD 21 24 00 DD 4E 02 DD +R 00 00 01 00 +T F5 01 00 00 46 03 09 DD 5E FC DD 56 FD 73 23 +R 00 00 01 00 +T 00 02 00 00 72 21 26 00 09 36 0B 05 00 00 23 +R 00 00 01 00 09 0A 01 00 +T 08 02 00 00 36 0B 05 00 00 23 36 0B 05 00 00 +R 00 00 01 00 89 05 01 00 29 0B 01 00 +T 0D 02 00 00 DD 6E 0C DD 66 0D E5 DD 6E 0A DD +R 00 00 01 00 +T 18 02 00 00 66 0B E5 21 06 00 19 EB 3E +R 00 00 01 00 +T 21 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 26 02 00 00 00 00 00 00 E1 E1 21 10 00 DD 5E +R 00 00 01 00 02 04 02 00 +T 2F 02 00 00 FC DD 56 FD 19 36 E7 05 00 00 23 +R 00 00 01 00 09 0A 01 00 +T 37 02 00 00 36 E7 05 00 00 23 36 E7 05 00 00 +R 00 00 01 00 89 05 01 00 29 0B 01 00 +T 3C 02 00 00 21 13 00 19 71 23 70 DD 7E 0A DD +R 00 00 01 00 +T 47 02 00 00 B6 0B DD B6 0C DD B6 0D CA +R 00 00 01 00 +T 50 02 00 00 16 03 00 00 +R 00 00 01 00 00 04 01 00 +T 52 02 00 00 +R 00 00 01 00 +T 52 02 00 00 DD 6E 10 DD 66 11 5E 23 56 3E +R 00 00 01 00 +T 5C 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1E 00 02 09 1E 00 +T 61 02 00 00 00 00 00 00 E5 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 02 00 +T 6A 02 00 00 C1 71 23 70 DD 6E FC DD 66 FD 23 +R 00 00 01 00 +T 75 02 00 00 23 E5 DD 4E 10 DD 46 11 03 03 0A +R 00 00 01 00 +T 80 02 00 00 5F 03 0A 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 1E 00 +T 87 02 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T 8E 02 00 00 E1 71 23 70 21 04 00 DD 4E FC DD +R 00 00 01 00 +T 99 02 00 00 46 FD 09 E5 21 04 00 DD 4E 10 DD +R 00 00 01 00 +T A4 02 00 00 46 11 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1E 00 +T AC 02 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 1E 00 02 0A 02 00 +T B3 02 00 00 44 E1 71 23 70 01 00 00 00 00 DD +R 00 00 01 00 00 0A 02 00 +T BC 02 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 13 00 +T C4 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 13 00 02 09 02 00 +T CB 02 00 00 FE DD 74 FF 21 1C 00 DD 4E 02 DD +R 00 00 01 00 +T D6 02 00 00 46 03 09 E5 11 00 00 D5 11 00 00 +R 00 00 01 00 +T E1 02 00 00 D5 C5 21 2C 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T EC 02 00 00 09 4E 23 46 C5 0E 73 06 00 00 C5 +R 00 00 01 00 29 0A 01 00 +T F4 02 00 00 21 73 06 00 00 E5 01 00 03 DD 5E +R 00 00 01 00 00 05 01 00 +T FD 02 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 4B 00 +T 04 03 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 4B 00 02 09 02 00 +T 0B 03 00 00 0C 00 39 F9 EB 4D 44 E1 71 23 70 +R 00 00 01 00 +T 16 03 00 00 +R 00 00 01 00 +T 16 03 00 00 21 00 00 +R 00 00 01 00 +T 19 03 00 00 +R 00 00 01 00 +T 19 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T 1C 03 00 00 +R 00 00 01 00 +T 1C 03 00 00 CD 00 00 00 00 FC FF 21 24 00 DD +R 00 00 01 00 02 05 34 00 +T 25 03 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 30 03 00 00 75 FC DD 74 FD 7D B4 20 24 +R 00 00 01 00 +T 39 03 00 00 +R 00 00 01 00 +T 39 03 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 44 03 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 4C 00 +T 49 03 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 4C 00 2B 0A 43 00 +T 4F 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 43 00 02 09 02 00 +T 56 03 00 00 F1 21 01 00 C3 08 05 00 00 +R 00 00 01 00 00 09 01 00 +T 5D 03 00 00 +R 00 00 01 00 +T 5D 03 00 00 21 2C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 68 03 00 00 23 56 01 59 00 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 35 00 +T 71 03 00 00 00 00 00 00 19 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 39 00 +T 7A 03 00 00 01 2D 00 09 7E E6 80 28 05 21 +R 00 00 01 00 +T 84 03 00 00 0A 00 00 00 18 03 +R 00 00 01 00 00 04 02 00 +T 88 03 00 00 +R 00 00 01 00 +T 88 03 00 00 21 0D 00 00 00 +R 00 00 01 00 00 05 02 00 +T 8B 03 00 00 +R 00 00 01 00 +T 8B 03 00 00 E5 DD 6E 02 DD 66 03 23 23 4E 23 +R 00 00 01 00 +T 96 03 00 00 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 07 18 00 +T 9C 03 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 18 00 2B 0A 43 00 +T A2 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 43 00 02 09 02 00 +T A9 03 00 00 F1 F1 21 00 00 E5 21 E8 03 E5 21 +R 00 00 01 00 +T B4 03 00 00 06 00 DD 4E FC DD 46 FD 09 23 23 +R 00 00 01 00 +T BF 03 00 00 5E 23 56 23 4E 23 46 C5 D5 01 +R 00 00 01 00 +T C9 03 00 00 00 00 21 37 00 CD 00 00 00 00 CD +R 00 00 01 00 02 0A 30 00 +T D2 03 00 00 00 00 00 00 C5 E5 21 00 00 E5 21 +R 00 00 01 00 02 04 3A 00 +T DB 03 00 00 E8 03 E5 21 06 00 DD 4E FC DD 46 +R 00 00 01 00 +T E6 03 00 00 FD 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 22 00 +T EC 03 00 00 00 00 00 00 CD 00 00 00 00 CD +R 00 00 01 00 02 04 22 00 02 09 02 00 +T F2 03 00 00 00 00 00 00 C5 E5 0E 00 00 00 00 +R 00 00 01 00 02 04 3A 00 2B 0B 17 00 +T F8 03 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 17 00 +T FE 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 43 00 02 09 43 00 +T 03 04 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T 0C 04 00 00 DD 6E FC DD 66 FD 7E 23 B6 28 1C +R 00 00 01 00 +T 17 04 00 00 +R 00 00 01 00 +T 17 04 00 00 DD 6E FC DD 66 FD 4E 23 46 C5 0E +R 00 00 01 00 +T 22 04 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 29 00 02 0A 29 00 +T 28 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 43 00 02 0A 43 00 +T 2E 04 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T 33 04 00 00 +R 00 00 01 00 +T 33 04 00 00 DD 6E FC DD 66 FD 23 23 7E 23 B6 +R 00 00 01 00 +T 3E 04 00 00 28 1E +R 00 00 01 00 +T 40 04 00 00 +R 00 00 01 00 +T 40 04 00 00 DD 6E FC DD 66 FD 23 23 4E 23 46 +R 00 00 01 00 +T 4B 04 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 20 00 +T 50 04 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 20 00 2B 0A 43 00 +T 56 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 43 00 02 09 02 00 +T 5D 04 00 00 F1 +R 00 00 01 00 +T 5E 04 00 00 +R 00 00 01 00 +T 5E 04 00 00 21 04 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 69 04 00 00 23 B6 28 20 +R 00 00 01 00 +T 6D 04 00 00 +R 00 00 01 00 +T 6D 04 00 00 21 04 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T 78 04 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 2E 00 +T 7F 04 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 2E 00 2B 0A 43 00 +T 85 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 43 00 02 09 02 00 +T 8C 04 00 00 F1 +R 00 00 01 00 +T 8D 04 00 00 +R 00 00 01 00 +T 8D 04 00 00 21 1A 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 98 04 00 00 23 56 23 4E 23 46 C5 D5 21 16 00 +R 00 00 01 00 +T A3 04 00 00 DD 4E FC DD 46 FD 09 5E 23 56 23 +R 00 00 01 00 +T AE 04 00 00 4E 23 46 C5 D5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 1D 00 +T B6 04 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 1D 00 2B 0B 43 00 +T BC 04 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 43 00 02 0A 02 00 +T C3 04 00 00 21 0C 00 39 F9 EB 21 55 00 DD 4E +R 00 00 01 00 +T CE 04 00 00 FE DD 46 FF 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T D9 04 00 00 56 D5 C5 21 1E 00 DD 4E FC DD 46 +R 00 00 01 00 +T E4 04 00 00 FD 09 4E 23 46 23 5E 23 56 D5 C5 +R 00 00 01 00 +T EF 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 25 00 02 0B 25 00 +T F5 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 43 00 02 0B 43 00 +T FB 04 00 00 CD 00 00 00 00 EB 21 0C 00 39 F9 +R 00 00 01 00 02 05 02 00 +T 04 05 00 00 EB 21 00 00 +R 00 00 01 00 +T 08 05 00 00 +R 00 00 01 00 +T 08 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T 0B 05 00 00 +R 00 00 01 00 +T 0B 05 00 00 CD 00 00 00 00 FC FF 21 24 00 DD +R 00 00 01 00 02 05 34 00 +T 14 05 00 00 4E 02 DD 46 03 09 56 23 66 6A DD +R 00 00 01 00 +T 1F 05 00 00 75 FE DD 74 FF 21 2C 00 09 4E 23 +R 00 00 01 00 +T 2A 05 00 00 46 11 59 00 CD 00 00 00 00 21 +R 00 00 01 00 02 09 35 00 +T 32 05 00 00 00 00 00 00 19 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 39 00 +T 3B 05 00 00 21 06 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T 46 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 4C 05 00 00 00 00 00 00 21 2F 00 DD 4E FC DD +R 00 00 01 00 02 04 02 00 +T 55 05 00 00 46 FD 09 7E B7 28 72 21 2D 00 DD +R 00 00 01 00 +T 60 05 00 00 4E FC DD 46 FD 09 7E E6 80 20 63 +R 00 00 01 00 +T 6B 05 00 00 DD 6E FE DD 66 FF 7E 23 B6 28 58 +R 00 00 01 00 +T 76 05 00 00 +R 00 00 01 00 +T 76 05 00 00 +R 00 00 01 00 +T 76 05 00 00 +R 00 00 01 00 +T 76 05 00 00 21 16 00 DD 4E FE DD 46 FF 09 CD +R 00 00 01 00 +T 81 05 00 00 00 00 00 00 DD 6E FE DD 66 FF 4E +R 00 00 01 00 02 04 38 00 +T 8A 05 00 00 23 46 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 93 05 00 00 06 07 00 00 7D B4 20 0F 21 2D 00 +R 00 00 01 00 00 04 01 00 +T 9C 05 00 00 DD 4E FC DD 46 FD 09 7E E6 80 20 +R 00 00 01 00 +T A7 05 00 00 26 +R 00 00 01 00 +T A8 05 00 00 +R 00 00 01 00 +T A8 05 00 00 +R 00 00 01 00 +T A8 05 00 00 +R 00 00 01 00 +T A8 05 00 00 21 1E 00 DD 4E FE DD 46 FF 09 CD +R 00 00 01 00 +T B3 05 00 00 00 00 00 00 DD 6E FE DD 66 FF 23 +R 00 00 01 00 02 04 38 00 +T BC 05 00 00 23 4E 23 46 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T C7 05 00 00 06 07 00 00 21 FF FF 18 16 +R 00 00 01 00 00 04 01 00 +T CE 05 00 00 +R 00 00 01 00 +T CE 05 00 00 +R 00 00 01 00 +T CE 05 00 00 21 06 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T D9 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 3B 00 02 0A 3B 00 +T DF 05 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 02 00 +T E4 05 00 00 +R 00 00 01 00 +T E4 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T E7 05 00 00 +R 00 00 01 00 +T E7 05 00 00 CD 00 00 00 00 21 00 00 E5 21 +R 00 00 01 00 02 05 2C 00 +T EF 05 00 00 00 00 E5 D5 21 00 00 E5 0E +R 00 00 01 00 +T F8 05 00 00 16 06 00 00 C5 21 16 06 00 00 E5 +R 00 00 01 00 29 04 01 00 00 0A 01 00 +T FE 05 00 00 01 00 04 11 12 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T 05 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 4B 00 02 09 4B 00 +T 0A 06 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T 13 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T 16 06 00 00 +R 00 00 01 00 +T 16 06 00 00 CD 00 00 00 00 FA FF DD 71 FA DD +R 00 00 01 00 02 05 34 00 +T 1F 06 00 00 70 FB 21 24 00 09 56 23 66 6A DD +R 00 00 01 00 +T 2A 06 00 00 75 FE DD 74 FF 21 2C 00 09 4E 23 +R 00 00 01 00 +T 35 06 00 00 46 11 59 00 CD 00 00 00 00 21 +R 00 00 01 00 02 09 35 00 +T 3D 06 00 00 00 00 00 00 19 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 39 00 +T 46 06 00 00 01 2D 00 09 7E E6 80 28 21 +R 00 00 01 00 +T 4F 06 00 00 +R 00 00 01 00 +T 4F 06 00 00 21 1E 00 DD 4E FE DD 46 FF 09 CD +R 00 00 01 00 +T 5A 06 00 00 00 00 00 00 DD 6E FE DD 66 FF 23 +R 00 00 01 00 02 04 38 00 +T 63 06 00 00 23 4E 23 46 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 6E 06 00 00 06 07 00 00 +R 00 00 01 00 00 04 01 00 +T 70 06 00 00 +R 00 00 01 00 +T 70 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T 73 06 00 00 +R 00 00 01 00 +T 73 06 00 00 CD 00 00 00 00 FA FF DD 71 FA DD +R 00 00 01 00 02 05 34 00 +T 7C 06 00 00 70 FB 11 59 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 87 06 00 00 CD 00 00 00 00 21 00 00 00 00 19 +R 00 00 01 00 02 05 35 00 02 0A 39 00 +T 8E 06 00 00 DD 75 FE DD 74 FF 21 24 00 DD 4E +R 00 00 01 00 +T 99 06 00 00 FA DD 46 FB 09 46 23 66 68 DD 75 +R 00 00 01 00 +T A4 06 00 00 FC DD 74 FD 7D B4 20 03 +R 00 00 01 00 +T AC 06 00 00 +R 00 00 01 00 +T AC 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T AF 06 00 00 +R 00 00 01 00 +T AF 06 00 00 +R 00 00 01 00 +T AF 06 00 00 +R 00 00 01 00 +T AF 06 00 00 21 2D 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T BA 06 00 00 E6 04 20 15 +R 00 00 01 00 +T BE 06 00 00 +R 00 00 01 00 +T BE 06 00 00 21 2D 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T C9 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 26 00 02 0A 26 00 +T CF 06 00 00 00 00 00 00 18 DC +R 00 00 01 00 02 04 02 00 +T D3 06 00 00 +R 00 00 01 00 +T D3 06 00 00 21 2D 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T DE 06 00 00 E6 FB 77 21 1A 00 DD 4E FC DD 46 +R 00 00 01 00 +T E9 06 00 00 FD 09 CD 00 00 00 00 21 04 00 DD +R 00 00 01 00 02 07 38 00 +T F2 06 00 00 4E FC DD 46 FD 09 4E 23 46 DD 5E +R 00 00 01 00 +T FD 06 00 00 FA DD 56 FB CD 06 07 00 00 18 A9 +R 00 00 01 00 00 09 01 00 +T 06 07 00 00 +R 00 00 01 00 +T 06 07 00 00 CD 00 00 00 00 F6 FF AF DD 77 FD +R 00 00 01 00 02 05 34 00 +T 0F 07 00 00 DD 77 FE 21 00 00 E5 01 +R 00 00 01 00 +T 17 07 00 00 19 00 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 00 04 02 00 +T 20 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3F 00 02 09 3F 00 +T 25 07 00 00 00 00 00 00 F1 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 04 02 00 +T 2E 07 00 00 7D B4 20 32 +R 00 00 01 00 +T 32 07 00 00 +R 00 00 01 00 +T 32 07 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 3D 07 00 00 E6 11 28 1D +R 00 00 01 00 +T 41 07 00 00 +R 00 00 01 00 +T 41 07 00 00 DD 6E 04 DD 66 05 E5 21 +R 00 00 01 00 +T 49 07 00 00 1B 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 00 04 02 00 +T 52 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 58 07 00 00 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 05 02 00 +T 5E 07 00 00 +R 00 00 01 00 +T 5E 07 00 00 21 FF FF C3 8B 09 00 00 +R 00 00 01 00 00 08 01 00 +T 64 07 00 00 +R 00 00 01 00 +T 64 07 00 00 21 45 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 6F 07 00 00 23 46 23 7E 69 60 0E 00 00 00 00 +R 00 00 01 00 2B 0B 49 00 +T 77 07 00 00 11 00 00 00 00 B9 20 3B ED 52 20 +R 00 00 01 00 02 05 49 00 +T 80 07 00 00 37 +R 00 00 01 00 +T 81 07 00 00 +R 00 00 01 00 +T 81 07 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 8C 07 00 00 E6 11 28 22 +R 00 00 01 00 +T 90 07 00 00 +R 00 00 01 00 +T 90 07 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 9B 07 00 00 C5 21 32 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 00 06 02 00 +T A4 07 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T AA 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 02 00 +T B1 07 00 00 F1 +R 00 00 01 00 +T B2 07 00 00 +R 00 00 01 00 +T B2 07 00 00 21 FF FF C3 8B 09 00 00 +R 00 00 01 00 00 08 01 00 +T B8 07 00 00 +R 00 00 01 00 +T B8 07 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T C3 07 00 00 E6 11 28 22 +R 00 00 01 00 +T C7 07 00 00 +R 00 00 01 00 +T C7 07 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T D2 07 00 00 C5 21 5E 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 00 06 02 00 +T DB 07 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T E1 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 02 00 +T E8 07 00 00 F1 +R 00 00 01 00 +T E9 07 00 00 +R 00 00 01 00 +T E9 07 00 00 21 45 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T F4 07 00 00 23 46 23 56 69 60 DD 75 FA DD 74 +R 00 00 01 00 +T FF 07 00 00 FB DD 72 FC 21 45 00 DD 4E 02 DD +R 00 00 01 00 +T 0A 08 00 00 46 03 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 08 49 00 +T 11 08 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 49 00 2B 0A 49 00 +T 16 08 00 00 18 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 1E 08 00 00 21 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 05 00 00 02 0A 02 00 +T 25 08 00 00 80 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 3E 00 +T 2A 08 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 3E 00 02 09 02 00 +T 31 08 00 00 F6 DD 74 F7 +R 00 00 01 00 +T 35 08 00 00 +R 00 00 01 00 +T 35 08 00 00 DD 6E F8 DD 66 F9 E5 01 80 00 DD +R 00 00 01 00 +T 40 08 00 00 5E F6 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1F 00 +T 48 08 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 1F 00 02 09 02 00 +T 4F 08 00 00 B4 CA E0 08 00 00 +R 00 00 01 00 00 06 01 00 +T 53 08 00 00 +R 00 00 01 00 +T 53 08 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 5B 08 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0E 00 02 0A 02 00 +T 62 08 00 00 6E F6 DD 66 F7 E5 DD 6E 02 DD 66 +R 00 00 01 00 +T 6D 08 00 00 03 23 23 4E 23 46 C5 0E +R 00 00 01 00 +T 75 08 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 4D 00 02 0A 4D 00 +T 7B 08 00 00 21 FF FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0C 00 +T 82 08 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 0C 00 02 09 02 00 +T 89 08 00 00 E1 E1 E1 21 12 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 94 08 00 00 03 09 7E E6 11 28 1D +R 00 00 01 00 +T 9B 08 00 00 +R 00 00 01 00 +T 9B 08 00 00 DD 6E F6 DD 66 F7 E5 21 +R 00 00 01 00 +T A3 08 00 00 6F 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 00 04 02 00 +T AC 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T B2 08 00 00 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 05 02 00 +T B8 08 00 00 +R 00 00 01 00 +T B8 08 00 00 DD 6E 02 DD 66 03 E5 DD 4E F6 DD +R 00 00 01 00 +T C3 08 00 00 46 F7 11 00 00 00 00 3E +R 00 00 01 00 00 07 03 00 +T C9 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T CE 08 00 00 00 00 00 00 F1 DD 75 FD DD 74 FE +R 00 00 01 00 02 04 02 00 +T D7 08 00 00 7D B4 28 02 +R 00 00 01 00 +T DB 08 00 00 +R 00 00 01 00 +T DB 08 00 00 18 03 +R 00 00 01 00 +T DD 08 00 00 +R 00 00 01 00 +T DD 08 00 00 C3 35 08 00 00 +R 00 00 01 00 00 05 01 00 +T E0 08 00 00 +R 00 00 01 00 +T E0 08 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2A 00 +T E8 08 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 2A 00 02 0A 02 00 +T EF 08 00 00 5E F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 47 00 +T F7 08 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 47 00 02 09 02 00 +T FE 08 00 00 FD DD B6 FE 20 2F +R 00 00 01 00 +T 04 09 00 00 +R 00 00 01 00 +T 04 09 00 00 21 65 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 0F 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 15 09 00 00 00 00 00 00 EB E1 73 23 72 23 71 +R 00 00 01 00 02 04 02 00 +T 1E 09 00 00 23 70 C5 21 61 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 29 09 00 00 03 09 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 33 09 00 00 +R 00 00 01 00 +T 33 09 00 00 21 45 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 3E 09 00 00 7E FC DD 5E FA DD 56 FB 73 23 72 +R 00 00 01 00 +T 49 09 00 00 23 77 21 18 00 09 5E 23 56 3E +R 00 00 01 00 +T 53 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T 58 09 00 00 00 00 00 00 21 12 00 09 7E E6 11 +R 00 00 01 00 02 04 02 00 +T 61 09 00 00 28 22 +R 00 00 01 00 +T 63 09 00 00 +R 00 00 01 00 +T 63 09 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 6E 09 00 00 C5 21 73 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 00 06 02 00 +T 77 09 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 7D 09 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 02 00 +T 84 09 00 00 F1 +R 00 00 01 00 +T 85 09 00 00 +R 00 00 01 00 +T 85 09 00 00 DD 6E FD DD 66 FE +R 00 00 01 00 +T 8B 09 00 00 +R 00 00 01 00 +T 8B 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 21 00 +T 8E 09 00 00 +R 00 00 01 00 +T 8E 09 00 00 CD 00 00 00 00 F8 FF DD 6E 0A DD +R 00 00 01 00 02 05 34 00 +T 97 09 00 00 66 0B DD 75 F8 DD 74 F9 AF DD 77 +R 00 00 01 00 +T A2 09 00 00 FC DD 77 FD DD 77 FE DD 77 FF 11 +R 00 00 01 00 +T AD 09 00 00 2E 00 19 7E 23 B6 23 B6 20 06 +R 00 00 01 00 +T B7 09 00 00 +R 00 00 01 00 +T B7 09 00 00 21 FF FF C3 49 0A 00 00 +R 00 00 01 00 00 08 01 00 +T BD 09 00 00 +R 00 00 01 00 +T BD 09 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T C8 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 15 00 02 0A 15 00 +T CE 09 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 02 00 +T D7 09 00 00 A4 3C 20 05 +R 00 00 01 00 +T DB 09 00 00 +R 00 00 01 00 +T DB 09 00 00 21 FF FF 18 69 +R 00 00 01 00 +T E0 09 00 00 +R 00 00 01 00 +T E0 09 00 00 DD 4E 02 DD 46 03 21 02 00 CD +R 00 00 01 00 +T EA 09 00 00 00 00 00 00 30 21 +R 00 00 01 00 02 04 42 00 +T EE 09 00 00 +R 00 00 01 00 +T EE 09 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T F9 09 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 41 00 +T FE 09 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 41 00 02 09 02 00 +T 05 0A 00 00 FC DD 74 FD DD 71 FE DD 70 FF +R 00 00 01 00 +T 0F 0A 00 00 +R 00 00 01 00 +T 0F 0A 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD +R 00 00 01 00 +T 1A 0A 00 00 66 FD E5 21 01 00 E5 DD 4E FA DD +R 00 00 01 00 +T 25 0A 00 00 46 FB C5 DD 5E F8 DD 56 F9 21 +R 00 00 01 00 +T 2F 0A 00 00 2E 00 DD 4E F8 DD 46 F9 09 4E 23 +R 00 00 01 00 +T 3A 0A 00 00 46 23 7E 69 60 C1 CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 43 0A 00 00 F1 F1 F1 21 00 00 +R 00 00 01 00 +T 49 0A 00 00 +R 00 00 01 00 +T 49 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T 4C 0A 00 00 +R 00 00 01 00 +T 4C 0A 00 00 CD 00 00 00 00 F6 FF DD 6E 0A DD +R 00 00 01 00 02 05 34 00 +T 55 0A 00 00 66 0B DD 75 F6 DD 74 F7 DD 4E 02 +R 00 00 01 00 +T 60 0A 00 00 DD 46 03 21 02 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 42 00 +T 69 0A 00 00 30 7D +R 00 00 01 00 +T 6B 0A 00 00 +R 00 00 01 00 +T 6B 0A 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 76 0A 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 41 00 +T 7B 0A 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 41 00 02 09 02 00 +T 82 0A 00 00 FC DD 74 FD DD 71 FE DD 70 FF DD +R 00 00 01 00 +T 8D 0A 00 00 6E 04 DD 66 05 23 23 46 23 66 68 +R 00 00 01 00 +T 98 0A 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 +T 9E 0A 00 00 +R 00 00 01 00 +T 9E 0A 00 00 DD 6E FA DD 66 FB AF B6 28 3E +R 00 00 01 00 +T A8 0A 00 00 +R 00 00 01 00 +T A8 0A 00 00 21 01 00 E5 DD 4E FA DD 46 FB 21 +R 00 00 01 00 +T B3 0A 00 00 2C 00 DD 5E F6 DD 56 F7 19 5E 23 +R 00 00 01 00 +T BE 0A 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1B 00 02 0B 1B 00 +T C4 0A 00 00 CD 00 00 00 00 F1 DD 4E FE DD 46 +R 00 00 01 00 02 05 02 00 +T CD 0A 00 00 FF DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T D5 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T DA 0A 00 00 00 00 00 00 DD 34 FA 20 03 DD 34 +R 00 00 01 00 02 04 02 00 +T E3 0A 00 00 FB +R 00 00 01 00 +T E4 0A 00 00 +R 00 00 01 00 +T E4 0A 00 00 18 B8 +R 00 00 01 00 +T E6 0A 00 00 +R 00 00 01 00 +T E6 0A 00 00 18 63 +R 00 00 01 00 +T E8 0A 00 00 +R 00 00 01 00 +T E8 0A 00 00 21 12 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T F3 0A 00 00 E6 00 47 23 7E E6 20 B0 28 19 +R 00 00 01 00 +T FD 0A 00 00 +R 00 00 01 00 +T FD 0A 00 00 DD 6E F8 DD 66 F9 E5 01 01 00 DD +R 00 00 01 00 +T 08 0B 00 00 5E F6 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 24 00 +T 10 0B 00 00 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 04 24 00 02 09 02 00 +T 16 0B 00 00 +R 00 00 01 00 +T 16 0B 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 21 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1C 00 02 0A 1C 00 +T 27 0B 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 02 00 +T 30 0B 00 00 23 23 4E 23 46 21 2C 00 DD 5E F6 +R 00 00 01 00 +T 3B 0B 00 00 DD 56 F7 19 5E 23 56 3E +R 00 00 01 00 +T 43 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T 48 0B 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 02 00 +T 4B 0B 00 00 +R 00 00 01 00 +T 4B 0B 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 19 00 +T 51 0B 00 00 +R 00 00 01 00 +T 51 0B 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 34 00 +T 5A 0B 00 00 66 0B DD 75 FE DD 74 FF 11 02 80 +R 00 00 01 00 +T 65 0B 00 00 DD 6E 02 DD 66 03 3E 80 AC 67 ED +R 00 00 01 00 +T 70 0B 00 00 52 30 4B +R 00 00 01 00 +T 73 0B 00 00 +R 00 00 01 00 +T 73 0B 00 00 21 12 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 7E 0B 00 00 E6 11 28 37 +R 00 00 01 00 +T 82 0B 00 00 +R 00 00 01 00 +T 82 0B 00 00 21 2C 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 8D 0B 00 00 23 56 01 59 00 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 35 00 +T 96 0B 00 00 1D 00 00 00 19 4E 23 46 23 5E 23 +R 00 00 01 00 02 04 39 00 +T 9F 0B 00 00 56 D5 C5 21 86 00 00 00 E5 DD 6E +R 00 00 01 00 00 08 02 00 +T A8 0B 00 00 FE DD 66 FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T B0 0B 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 02 00 +T B7 0B 00 00 F1 F1 +R 00 00 01 00 +T B9 0B 00 00 +R 00 00 01 00 +T B9 0B 00 00 21 00 00 18 2F +R 00 00 01 00 +T BE 0B 00 00 +R 00 00 01 00 +T BE 0B 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T C9 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 41 00 02 0A 41 00 +T CF 0B 00 00 00 00 00 00 01 00 00 C5 E5 21 +R 00 00 01 00 02 04 02 00 +T D7 0B 00 00 2C 00 DD 4E FE DD 46 FF 09 5E 23 +R 00 00 01 00 +T E2 0B 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 4A 00 02 0B 4A 00 +T E8 0B 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 02 00 +T ED 0B 00 00 +R 00 00 01 00 +T ED 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T F0 0B 00 00 +R 00 00 01 00 +T F0 0B 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 34 00 +T F9 0B 00 00 66 0B DD 75 FC DD 74 FD 11 31 00 +R 00 00 01 00 +T 04 0C 00 00 19 7E 23 B6 23 B6 20 05 +R 00 00 01 00 +T 0C 0C 00 00 +R 00 00 01 00 +T 0C 0C 00 00 21 FF FF 18 61 +R 00 00 01 00 +T 11 0C 00 00 +R 00 00 01 00 +T 11 0C 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 1C 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 15 00 02 0A 15 00 +T 22 0C 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 02 00 +T 2B 0C 00 00 A4 3C 20 05 +R 00 00 01 00 +T 2F 0C 00 00 +R 00 00 01 00 +T 2F 0C 00 00 21 FF FF 18 3E +R 00 00 01 00 +T 34 0C 00 00 +R 00 00 01 00 +T 34 0C 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 3F 0C 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 41 00 +T 44 0C 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 41 00 02 09 02 00 +T 4B 0C 00 00 DD 4E FE DD 46 FF C5 DD 5E FC DD +R 00 00 01 00 +T 56 0C 00 00 56 FD 21 31 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T 61 0C 00 00 09 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 6B 0C 00 00 00 00 00 00 F1 F1 21 00 00 +R 00 00 01 00 02 04 02 00 +T 72 0C 00 00 +R 00 00 01 00 +T 72 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T 75 0C 00 00 +R 00 00 01 00 +T 75 0C 00 00 CD 00 00 00 00 F8 FF DD 6E 0A DD +R 00 00 01 00 02 05 34 00 +T 7E 0C 00 00 66 0B DD 75 F8 DD 74 F9 DD 36 FA +R 00 00 01 00 +T 89 0C 00 00 FF DD 36 FB FF 03 03 0A 5F 03 0A +R 00 00 01 00 +T 94 0C 00 00 57 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 41 00 02 0B 41 00 +T 9A 0C 00 00 CD 00 00 00 00 EB 3E 00 00 00 00 +R 00 00 01 00 02 05 02 00 2B 0B 45 00 +T A0 0C 00 00 21 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 05 45 00 02 0A 02 00 +T A7 0C 00 00 02 DD AE 02 DD B6 03 20 7E +R 00 00 01 00 +T B0 0C 00 00 +R 00 00 01 00 +T B0 0C 00 00 +R 00 00 01 00 +T B0 0C 00 00 21 2C 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T BB 0C 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 36 00 +T C0 0C 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 36 00 02 09 02 00 +T C7 0C 00 00 FA DD 74 FB 7D A4 3C 28 4A 2A +R 00 00 01 00 +T D1 0C 00 00 00 00 00 00 3E 6A AD B4 28 41 +R 00 00 01 00 02 04 31 00 +T D9 0C 00 00 +R 00 00 01 00 +T D9 0C 00 00 +R 00 00 01 00 +T D9 0C 00 00 +R 00 00 01 00 +T D9 0C 00 00 21 12 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T E4 0C 00 00 E6 10 28 30 +R 00 00 01 00 +T E8 0C 00 00 +R 00 00 01 00 +T E8 0C 00 00 21 14 00 DD 4E F8 DD 46 F9 09 4E +R 00 00 01 00 +T F3 0C 00 00 23 46 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T FC 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T 01 0D 00 00 00 00 00 00 21 14 00 DD 4E F8 DD +R 00 00 01 00 02 04 02 00 +T 0A 0D 00 00 46 F9 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 12 0D 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0A 00 02 0A 02 00 +T 18 0D 00 00 +R 00 00 01 00 +T 18 0D 00 00 18 96 +R 00 00 01 00 +T 1A 0D 00 00 +R 00 00 01 00 +T 1A 0D 00 00 01 00 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 45 00 +T 22 0D 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 45 00 02 0A 02 00 +T 29 0D 00 00 00 00 C3 FC 0E 00 00 +R 00 00 01 00 00 07 01 00 +T 2E 0D 00 00 +R 00 00 01 00 +T 2E 0D 00 00 21 04 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T 39 0D 00 00 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 42 0D 00 00 +R 00 00 01 00 +T 42 0D 00 00 DD 6E FC DD 66 FD AF B6 CA +R 00 00 01 00 +T 4B 0D 00 00 DF 0D 00 00 21 2C 00 DD 4E F8 DD +R 00 00 01 00 00 04 01 00 +T 54 0D 00 00 46 F9 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 36 00 +T 5C 0D 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 36 00 02 0A 02 00 +T 63 0D 00 00 75 FA DD 74 FB 7D A4 3C 28 72 +R 00 00 01 00 +T 6D 0D 00 00 +R 00 00 01 00 +T 6D 0D 00 00 +R 00 00 01 00 +T 6D 0D 00 00 +R 00 00 01 00 +T 6D 0D 00 00 21 12 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 78 0D 00 00 E6 10 28 30 +R 00 00 01 00 +T 7C 0D 00 00 +R 00 00 01 00 +T 7C 0D 00 00 21 14 00 DD 4E F8 DD 46 F9 09 4E +R 00 00 01 00 +T 87 0D 00 00 23 46 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 90 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T 95 0D 00 00 00 00 00 00 21 14 00 DD 4E F8 DD +R 00 00 01 00 02 04 02 00 +T 9E 0D 00 00 46 F9 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T A6 0D 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0A 00 02 0A 02 00 +T AC 0D 00 00 +R 00 00 01 00 +T AC 0D 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T B7 0D 00 00 74 FD 2B 4E 06 00 DD 6E FA DD 66 +R 00 00 01 00 +T C2 0D 00 00 FB A7 ED 42 28 14 +R 00 00 01 00 +T C8 0D 00 00 +R 00 00 01 00 +T C8 0D 00 00 21 04 00 DD 4E 04 DD 46 05 09 46 +R 00 00 01 00 +T D3 0D 00 00 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T DC 0D 00 00 +R 00 00 01 00 +T DC 0D 00 00 C3 42 0D 00 00 +R 00 00 01 00 00 05 01 00 +T DF 0D 00 00 +R 00 00 01 00 +T DF 0D 00 00 DD 4E 02 DD 46 03 21 03 00 CD +R 00 00 01 00 +T E9 0D 00 00 00 00 00 00 D2 DD 0E 00 00 +R 00 00 01 00 02 04 42 00 00 09 01 00 +T EE 0D 00 00 +R 00 00 01 00 +T EE 0D 00 00 AF DD 77 FE DD 77 FF 01 +R 00 00 01 00 +T F6 0D 00 00 9E 00 00 00 21 06 00 DD 5E 04 DD +R 00 00 01 00 00 04 02 00 +T FF 0D 00 00 56 05 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 07 0E 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 01 00 02 0A 02 00 +T 0E 0E 00 00 B4 28 06 +R 00 00 01 00 +T 11 0E 00 00 +R 00 00 01 00 +T 11 0E 00 00 21 FF FF C3 FC 0E 00 00 +R 00 00 01 00 00 08 01 00 +T 17 0E 00 00 +R 00 00 01 00 +T 17 0E 00 00 +R 00 00 01 00 +T 17 0E 00 00 21 2C 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T 22 0E 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 36 00 +T 27 0E 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 36 00 02 09 02 00 +T 2E 0E 00 00 FA DD 74 FB 7D A4 3C CA +R 00 00 01 00 +T 36 0E 00 00 DD 0E 00 00 +R 00 00 01 00 00 04 01 00 +T 38 0E 00 00 +R 00 00 01 00 +T 38 0E 00 00 21 12 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 43 0E 00 00 E6 10 28 30 +R 00 00 01 00 +T 47 0E 00 00 +R 00 00 01 00 +T 47 0E 00 00 21 14 00 DD 4E F8 DD 46 F9 09 4E +R 00 00 01 00 +T 52 0E 00 00 23 46 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 5B 0E 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T 60 0E 00 00 00 00 00 00 21 14 00 DD 4E F8 DD +R 00 00 01 00 02 04 02 00 +T 69 0E 00 00 46 F9 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 71 0E 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0A 00 02 0A 02 00 +T 77 0E 00 00 +R 00 00 01 00 +T 77 0E 00 00 DD 4E FA 06 00 21 00 00 00 00 09 +R 00 00 01 00 02 0A 2D 00 +T 80 0E 00 00 7E E6 08 28 23 +R 00 00 01 00 +T 85 0E 00 00 +R 00 00 01 00 +T 85 0E 00 00 21 06 00 39 01 0A 00 CD +R 00 00 01 00 +T 8D 0E 00 00 00 00 00 00 21 D0 FF DD 4E FA DD +R 00 00 01 00 02 04 07 00 +T 96 0E 00 00 46 FB 09 4D 44 21 06 00 39 7E 81 +R 00 00 01 00 +T A1 0E 00 00 77 23 7E 88 77 18 32 +R 00 00 01 00 +T A8 0E 00 00 +R 00 00 01 00 +T A8 0E 00 00 01 00 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 45 00 +T B0 0E 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 45 00 02 0A 02 00 +T B7 0E 00 00 6E FE DD 66 FF 01 00 00 C5 E5 21 +R 00 00 01 00 +T C2 0E 00 00 2C 00 DD 4E F8 DD 46 F9 09 5E 23 +R 00 00 01 00 +T CD 0E 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 4A 00 02 0B 4A 00 +T D3 0E 00 00 CD 00 00 00 00 F1 F1 18 22 +R 00 00 01 00 02 05 02 00 +T DA 0E 00 00 +R 00 00 01 00 +T DA 0E 00 00 C3 17 0E 00 00 +R 00 00 01 00 00 05 01 00 +T DD 0E 00 00 +R 00 00 01 00 +T DD 0E 00 00 +R 00 00 01 00 +T DD 0E 00 00 01 00 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 45 00 +T E5 0E 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 45 00 02 0A 02 00 +T EC 0E 00 00 7E FA DD A6 FB 3C 20 04 2E 01 18 +R 00 00 01 00 +T F7 0E 00 00 02 +R 00 00 01 00 +T F8 0E 00 00 +R 00 00 01 00 +T F8 0E 00 00 2E 00 +R 00 00 01 00 +T FA 0E 00 00 +R 00 00 01 00 +T FA 0E 00 00 26 00 +R 00 00 01 00 +T FC 0E 00 00 +R 00 00 01 00 +T FC 0E 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 19 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 61 6E 73 77 65 72 65 72 00 +R 00 00 02 00 +T 0A 00 00 00 +R 00 00 02 00 +T 0A 00 00 00 55 50 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 44 4F 57 4E 00 +R 00 00 02 00 +T 12 00 00 00 +R 00 00 02 00 +T 12 00 00 00 64 72 6F 70 69 74 00 +R 00 00 02 00 +T 19 00 00 00 +R 00 00 02 00 +T 19 00 00 00 72 00 +R 00 00 02 00 +T 1B 00 00 00 +R 00 00 02 00 +T 1B 00 00 00 72 65 64 69 61 6C 3A 20 63 61 6E +R 00 00 02 00 +T 26 00 00 00 27 74 20 72 65 61 64 20 25 73 0A +R 00 00 02 00 +T 31 00 00 00 00 +R 00 00 02 00 +T 32 00 00 00 +R 00 00 02 00 +T 32 00 00 00 72 65 64 69 61 6C 3A 20 74 69 70 +R 00 00 02 00 +T 3D 00 00 00 20 6F 72 20 64 69 61 6C 65 72 20 +R 00 00 02 00 +T 48 00 00 00 61 6C 72 65 61 64 79 20 61 63 74 +R 00 00 02 00 +T 53 00 00 00 69 76 65 20 6F 6E 20 25 73 0A 00 +R 00 00 02 00 +T 5E 00 00 00 +R 00 00 02 00 +T 5E 00 00 00 43 6F 6D 6D 61 6E 64 73 20 74 6F +R 00 00 02 00 +T 69 00 00 00 20 25 73 3A 0A 00 +R 00 00 02 00 +T 6F 00 00 00 +R 00 00 02 00 +T 6F 00 00 00 25 73 0A 00 +R 00 00 02 00 +T 73 00 00 00 +R 00 00 02 00 +T 73 00 00 00 0A 44 69 61 6C 20 25 73 20 63 6F +R 00 00 02 00 +T 7E 00 00 00 6D 70 6C 65 74 65 0A 00 +R 00 00 02 00 +T 86 00 00 00 +R 00 00 02 00 +T 86 00 00 00 63 75 72 72 65 6E 74 20 73 70 65 +R 00 00 02 00 +T 91 00 00 00 65 64 20 3D 20 25 75 20 62 70 73 +R 00 00 02 00 +T 9C 00 00 00 0A 00 +R 00 00 02 00 +T 9E 00 00 00 +R 00 00 02 00 +T 9E 00 00 00 73 70 65 65 64 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 1A 00 4A 08 0D 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 06 1A 00 4A 0A 32 00 +T 10 00 00 00 8E 09 00 00 00 00 02 00 +R 00 00 04 00 48 04 01 00 +T 17 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 46 00 4A 08 37 00 +T 1D 00 00 00 4C 0A 00 00 00 00 02 00 +R 00 00 04 00 48 04 01 00 +T 24 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 0B 00 4A 08 0F 00 +T 2A 00 00 00 51 0B 00 00 00 00 02 00 +R 00 00 04 00 48 04 01 00 +T 31 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 3D 00 4A 08 03 00 +T 37 00 00 00 F0 0B 00 00 00 00 02 00 +R 00 00 04 00 48 04 01 00 +T 3E 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 05 00 4A 08 11 00 +T 44 00 00 00 75 0C 00 00 00 00 02 00 +R 00 00 04 00 48 04 01 00 +T 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 40 00 +T 54 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 08 33 00 diff --git a/src/nos/lib/ppp_lib/doipcp_address.rel b/src/nos/lib/ppp_lib/doipcp_address.rel new file mode 100644 index 00000000..5b0d692b --- /dev/null +++ b/src/nos/lib/ppp_lib/doipcp_address.rel @@ -0,0 +1,112 @@ +XL4 +H 3 areas F global symbols +S _resolve Ref00000000 +S _inet_ntoa Ref00000000 +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0137_7643__25s_0a Ref00000000 +S _Badhost Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _bit16cmd Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___01e1_8e02_Allow_20Address Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 116 flags 0 +S _doipcp_address Def00000000 +A CSTR size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 0A DD +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 66 0B DD 75 FA DD 74 FB 11 02 80 +R 00 00 01 00 +T 14 00 00 00 DD 6E 02 DD 66 03 3E 80 AC 67 ED +R 00 00 01 00 +T 1F 00 00 00 52 30 32 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 04 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T 2D 00 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 35 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 03 00 +T 3C 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 04 00 02 0B 04 00 +T 42 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 48 00 00 00 CD 00 00 00 00 F1 F1 F1 21 00 00 +R 00 00 01 00 02 05 03 00 +T 51 00 00 00 C3 13 01 00 00 +R 00 00 01 00 00 05 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 01 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 5D 00 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 65 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 02 00 02 09 03 00 +T 6C 00 00 00 20 35 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 6E 04 DD 66 05 23 23 E5 DD 6E +R 00 00 01 00 +T 79 00 00 00 02 DD 66 03 2B DD 75 02 DD 74 03 +R 00 00 01 00 +T 84 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 0D 00 +T 89 00 00 00 00 00 00 00 E5 01 02 00 DD 5E FA +R 00 00 01 00 02 04 0D 00 +T 92 00 00 00 DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 98 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 08 00 02 09 03 00 +T 9F 00 00 00 F1 F1 18 70 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T AE 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T B4 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 03 00 +T BD 00 00 00 71 FE DD 70 FF 7D B4 B1 B0 20 1A +R 00 00 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T D3 00 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 05 00 +T D9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T DE 00 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 21 04 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T ED 00 00 00 4E FE DD 46 FF DD 5E FC DD 56 FD +R 00 00 01 00 +T F8 00 00 00 73 23 72 23 71 23 70 DD 6E FA DD +R 00 00 01 00 +T 03 01 00 00 66 FB 23 23 7E F6 02 77 23 7E F6 +R 00 00 01 00 +T 0E 01 00 00 00 77 21 00 00 +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 61 6C 6C 6F 77 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/doipcp_compress.rel b/src/nos/lib/ppp_lib/doipcp_compress.rel new file mode 100644 index 00000000..dd9e4db9 --- /dev/null +++ b/src/nos/lib/ppp_lib/doipcp_compress.rel @@ -0,0 +1,271 @@ +XL4 +H 3 areas 10 global symbols +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___01e4_081e_Allow_20Compression Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _bit16cmd Ref00000000 +S ___019a_3f3a_0x_2504x_0a Ref00000000 +S .__.ABS. Def00000000 +S ___0313_1aee_None_0a Ref00000000 +S ___0405_ba08_allow_20tcp_20none_ Ref00000000 +S _strtol Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0393_5ac7_TCP_20header_20comp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 26C flags 0 +S _doipcp_compress Def00000000 +A CSTR size 32 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 11 02 80 +R 00 00 01 00 +T 14 00 00 00 DD 6E 02 DD 66 03 3E 80 AC 67 ED +R 00 00 01 00 +T 1F 00 00 00 52 D2 A6 00 00 00 +R 00 00 01 00 00 06 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 DD 6E FE DD 66 FF 23 23 7E E6 04 +R 00 00 01 00 +T 2E 00 00 00 28 62 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 21 0C 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 3B 00 00 00 23 46 3E 2D A9 B0 20 2B +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 21 10 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 4E 00 00 00 16 00 D5 21 0E 00 09 4E 23 46 C5 +R 00 00 01 00 +T 59 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0E 00 02 0B 0E 00 +T 5F 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 65 00 00 00 CD 00 00 00 00 F1 F1 F1 F1 18 22 +R 00 00 01 00 02 05 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 21 0C 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 79 00 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 06 00 +T 80 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 2B 0A 0C 00 +T 86 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 8D 00 00 00 F1 18 00 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 18 11 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 08 00 02 0B 08 00 +T 98 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 9E 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 C3 66 02 00 00 +R 00 00 01 00 00 05 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 01 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T AF 00 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 00 00 +T B7 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T BE 00 00 00 20 36 +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 DD 6E 04 DD 66 05 23 23 E5 DD 6E +R 00 00 01 00 +T CB 00 00 00 02 DD 66 03 2B DD 75 02 DD 74 03 +R 00 00 01 00 +T D6 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 02 00 +T DB 00 00 00 00 00 00 00 E5 01 04 00 DD 5E FE +R 00 00 01 00 02 04 02 00 +T E4 00 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T EA 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T F1 00 00 00 F1 F1 C3 69 02 00 00 +R 00 00 01 00 00 07 01 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 01 06 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T FF 00 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 00 00 +T 07 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 0E 01 00 00 28 1B 01 0A 00 00 00 DD 6E 04 DD +R 00 00 01 00 00 07 02 00 +T 17 01 00 00 66 05 23 23 5E 23 56 3E +R 00 00 01 00 +T 1F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 24 01 00 00 00 00 00 00 7D B4 C2 23 02 00 00 +R 00 00 01 00 02 04 01 00 00 0B 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 21 0C 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T 36 01 00 00 2D 23 36 00 01 03 80 DD 6E 02 DD +R 00 00 01 00 +T 41 01 00 00 66 03 3E 80 AC 67 ED 42 38 6D +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 21 0E 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 56 01 00 00 11 00 00 D5 01 00 00 21 04 00 DD +R 00 00 01 00 +T 61 01 00 00 5E 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 6B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 70 01 00 00 00 00 00 00 F1 EB E1 73 23 72 21 +R 00 00 01 00 02 04 01 00 +T 79 01 00 00 0E 00 DD 4E FE DD 46 FF 09 46 23 +R 00 00 01 00 +T 84 01 00 00 66 68 01 01 00 A7 ED 42 38 15 21 +R 00 00 01 00 +T 8F 01 00 00 0E 00 DD 4E FE DD 46 FF 09 4E 23 +R 00 00 01 00 +T 9A 01 00 00 46 21 FF 00 A7 ED 42 30 13 +R 00 00 01 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 21 0D 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 03 00 +T A9 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T B0 01 00 00 21 01 00 C3 69 02 00 00 +R 00 00 01 00 00 08 01 00 +T B6 01 00 00 +R 00 00 01 00 +T B6 01 00 00 18 0F +R 00 00 01 00 +T B8 01 00 00 +R 00 00 01 00 +T B8 01 00 00 21 0E 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T C3 01 00 00 10 23 36 00 +R 00 00 01 00 +T C7 01 00 00 +R 00 00 01 00 +T C7 01 00 00 01 04 80 DD 6E 02 DD 66 03 3E 80 +R 00 00 01 00 +T D2 01 00 00 AC 67 ED 42 38 2C +R 00 00 01 00 +T D8 01 00 00 +R 00 00 01 00 +T D8 01 00 00 21 00 00 E5 01 00 00 21 06 00 DD +R 00 00 01 00 +T E3 01 00 00 5E 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T ED 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T F2 01 00 00 00 00 00 00 F1 E5 21 10 00 DD 4E +R 00 00 01 00 02 04 01 00 +T FB 01 00 00 FE DD 46 FF 09 C1 71 18 0C +R 00 00 01 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 21 10 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T 0F 02 00 00 01 +R 00 00 01 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 DD 6E FE DD 66 FF 23 23 7E F6 04 +R 00 00 01 00 +T 1B 02 00 00 77 23 7E F6 00 77 18 43 +R 00 00 01 00 +T 23 02 00 00 +R 00 00 01 00 +T 23 02 00 00 01 2D 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 2C 02 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 00 00 +T 34 02 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 3B 02 00 00 20 13 +R 00 00 01 00 +T 3D 02 00 00 +R 00 00 01 00 +T 3D 02 00 00 DD 6E FE DD 66 FF 23 23 7E E6 FB +R 00 00 01 00 +T 48 02 00 00 77 23 7E E6 FF 77 18 16 +R 00 00 01 00 +T 50 02 00 00 +R 00 00 01 00 +T 50 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 09 00 02 0B 09 00 +T 56 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 5C 02 00 00 CD 00 00 00 00 F1 F1 21 01 00 18 +R 00 00 01 00 02 05 01 00 +T 65 02 00 00 03 +R 00 00 01 00 +T 66 02 00 00 +R 00 00 01 00 +T 66 02 00 00 +R 00 00 01 00 +T 66 02 00 00 +R 00 00 01 00 +T 66 02 00 00 21 00 00 +R 00 00 01 00 +T 69 02 00 00 +R 00 00 01 00 +T 69 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 61 6C 6C 6F 77 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 74 63 70 00 +R 00 00 02 00 +T 0A 00 00 00 +R 00 00 02 00 +T 0A 00 00 00 76 6A 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 73 6C 6F 74 73 20 6D 75 73 74 20 +R 00 00 02 00 +T 18 00 00 00 62 65 20 69 6E 20 72 61 6E 67 65 +R 00 00 02 00 +T 23 00 00 00 20 31 20 74 6F 20 32 35 35 00 +R 00 00 02 00 +T 2D 00 00 00 +R 00 00 02 00 +T 2D 00 00 00 6E 6F 6E 65 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/doipcp_default.rel b/src/nos/lib/ppp_lib/doipcp_default.rel new file mode 100644 index 00000000..e2d2e8fb --- /dev/null +++ b/src/nos/lib/ppp_lib/doipcp_default.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 6 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _ipcp_default Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S _doipcp_default Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF EB 13 13 +R 00 00 01 00 +T 14 00 00 00 21 00 00 00 00 01 0F 00 ED B0 21 +R 00 00 01 00 02 05 03 00 +T 1D 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 00 00 diff --git a/src/nos/lib/ppp_lib/doipcp_local.rel b/src/nos/lib/ppp_lib/doipcp_local.rel new file mode 100644 index 00000000..247dc0b0 --- /dev/null +++ b/src/nos/lib/ppp_lib/doipcp_local.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _IPcpside_cmds Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S _doipcp_local Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 11 1C 00 +R 00 00 01 00 +T 14 00 00 00 19 56 23 66 6A DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 E5 C5 DD 4E 02 DD 46 03 11 +R 00 00 01 00 +T 28 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 09 06 00 +T 2D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 34 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/ppp_lib/doipcp_open.rel b/src/nos/lib/ppp_lib/doipcp_open.rel new file mode 100644 index 00000000..0512ad1f --- /dev/null +++ b/src/nos/lib/ppp_lib/doipcp_open.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_start Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _doppp_active Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 50 flags 0 +S _doipcp_open Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF DD 5E 0A +R 00 00 01 00 +T 14 00 00 00 DD 56 0B D5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 1F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 24 00 00 00 00 00 00 00 F1 21 08 00 DD 4E FE +R 00 00 01 00 02 04 00 00 +T 2D 00 00 00 DD 46 FF 09 46 23 66 68 23 23 7E +R 00 00 01 00 +T 38 00 00 00 FE 03 20 0E +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 44 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 02 00 diff --git a/src/nos/lib/ppp_lib/doipcp_pool.rel b/src/nos/lib/ppp_lib/doipcp_pool.rel new file mode 100644 index 00000000..ea4dd8ad --- /dev/null +++ b/src/nos/lib/ppp_lib/doipcp_pool.rel @@ -0,0 +1,157 @@ +XL4 +H 2 areas 11 global symbols +S _resolve Ref00000000 +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0137_7643__25s_0a Ref00000000 +S _Badhost Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___014b_bf9e__25s_20thru_20 Ref00000000 +S .__.ABS. Def00000000 +S _strtol Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0346_f8a0_Pool_20count_20_25s Ref00000000 +S ___0312_3fb0_None Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1BC flags 0 +S _doipcp_pool Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 6E 0A DD +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 66 0B DD 75 F6 DD 74 F7 11 1C 00 +R 00 00 01 00 +T 14 00 00 00 19 56 23 66 6A DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 1F 00 00 00 11 02 80 DD 6E 02 DD 66 03 3E 80 +R 00 00 01 00 +T 2A 00 00 00 AC 67 ED 52 D2 B5 00 00 00 +R 00 00 01 00 00 09 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 21 08 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 3C 00 00 00 23 B6 23 B6 23 B6 20 13 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0F 00 02 0B 0F 00 +T 4A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 50 00 00 00 CD 00 00 00 00 F1 F1 18 58 +R 00 00 01 00 02 05 02 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 08 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T 62 00 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 6A 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 02 00 +T 71 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 07 00 02 0B 07 00 +T 77 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 7D 00 00 00 CD 00 00 00 00 F1 F1 F1 21 28 00 +R 00 00 01 00 02 05 02 00 +T 86 00 00 00 DD 4E F8 DD 46 F9 09 5E 23 56 23 +R 00 00 01 00 +T 91 00 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 97 00 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 01 00 02 09 02 00 +T 9E 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T A4 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T AA 00 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 21 00 00 C3 B9 01 00 00 +R 00 00 01 00 00 08 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T C0 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T C6 00 00 00 00 00 00 00 DD 75 FA DD 74 FB DD +R 00 00 01 00 02 04 02 00 +T CF 00 00 00 71 FC DD 70 FD 7D B4 B1 B0 20 1A +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T E5 00 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 04 00 +T EB 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T F0 00 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 01 03 80 DD 6E 02 DD 66 03 3E 80 +R 00 00 01 00 +T FF 00 00 00 AC 67 ED 42 30 0A +R 00 00 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 DD 36 FE 01 DD 36 FF 00 18 23 +R 00 00 01 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 21 00 00 E5 01 00 00 21 04 00 DD +R 00 00 01 00 +T 1A 01 00 00 5E 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 24 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 29 01 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 02 00 +T 32 01 00 00 +R 00 00 01 00 +T 32 01 00 00 DD 4E FE DD 46 FF 21 00 00 CD +R 00 00 01 00 +T 3C 01 00 00 00 00 00 00 38 16 +R 00 00 01 00 02 04 0B 00 +T 40 01 00 00 +R 00 00 01 00 +T 40 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0E 00 02 0B 0E 00 +T 46 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 4C 01 00 00 CD 00 00 00 00 F1 F1 21 FF FF 18 +R 00 00 01 00 02 05 02 00 +T 55 01 00 00 63 +R 00 00 01 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 21 08 00 DD 4E F8 DD 46 F9 09 DD +R 00 00 01 00 +T 61 01 00 00 4E FC DD 46 FD DD 5E FA DD 56 FB +R 00 00 01 00 +T 6C 01 00 00 73 23 72 23 71 23 70 DD 6E FE DD +R 00 00 01 00 +T 77 01 00 00 66 FF 7C 07 9F 4F 41 C5 E5 DD 6E +R 00 00 01 00 +T 82 01 00 00 FA DD 66 FB C1 09 EB DD 6E FC DD +R 00 00 01 00 +T 8D 01 00 00 66 FD C1 ED 4A E5 D5 21 FF FF C1 +R 00 00 01 00 +T 98 01 00 00 09 EB 21 FF FF C1 ED 4A 4D 44 EB +R 00 00 01 00 +T A3 01 00 00 E5 21 28 00 DD 5E F8 DD 56 F9 19 +R 00 00 01 00 +T AE 01 00 00 D1 73 23 72 23 71 23 70 21 00 00 +R 00 00 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/ppp_lib/doipcp_remote.rel b/src/nos/lib/ppp_lib/doipcp_remote.rel new file mode 100644 index 00000000..472b1bfa --- /dev/null +++ b/src/nos/lib/ppp_lib/doipcp_remote.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _IPcpside_cmds Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3B flags 0 +S _doipcp_remote Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 11 1C 00 +R 00 00 01 00 +T 14 00 00 00 19 56 23 66 6A DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 11 20 00 19 E5 C5 DD 4E 02 DD 46 +R 00 00 01 00 +T 2A 00 00 00 03 11 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 02 00 2B 0B 06 00 +T 30 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 37 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 01 00 diff --git a/src/nos/lib/ppp_lib/dolcp_accm.rel b/src/nos/lib/ppp_lib/dolcp_accm.rel new file mode 100644 index 00000000..c594c6cf --- /dev/null +++ b/src/nos/lib/ppp_lib/dolcp_accm.rel @@ -0,0 +1,109 @@ +XL4 +H 3 areas C global symbols +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _bit16cmd Ref00000000 +S _strtoul Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___01e0_4a0c_Allow_20ACCM Ref00000000 +S __printf Ref00000000 +S ___019b_8308_0x_2508lx_0a Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 106 flags 0 +S _dolcp_accm Def00000000 +A CSTR size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 11 02 80 +R 00 00 01 00 +T 14 00 00 00 DD 6E 02 DD 66 03 3E 80 AC 67 ED +R 00 00 01 00 +T 1F 00 00 00 52 30 29 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 06 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 2D 00 00 00 23 46 23 5E 23 56 D5 C5 0E +R 00 00 01 00 +T 36 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 09 00 02 0A 09 00 +T 3C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 42 00 00 00 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T 49 00 00 00 00 01 00 00 +R 00 00 01 00 00 04 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 01 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 54 00 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 00 00 +T 5C 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 63 00 00 00 20 35 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 DD 6E 04 DD 66 05 23 23 E5 DD 6E +R 00 00 01 00 +T 70 00 00 00 02 DD 66 03 2B DD 75 02 DD 74 03 +R 00 00 01 00 +T 7B 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 07 00 +T 80 00 00 00 00 00 00 00 E5 01 04 00 DD 5E FE +R 00 00 01 00 02 04 07 00 +T 89 00 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 8F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 96 00 00 00 F1 F1 18 69 +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 21 00 00 E5 01 00 00 DD 6E 04 DD +R 00 00 01 00 +T A5 00 00 00 66 05 23 23 5E 23 56 3E +R 00 00 01 00 +T AD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T B2 00 00 00 00 00 00 00 F1 E5 21 06 00 DD 5E +R 00 00 01 00 02 04 01 00 +T BB 00 00 00 FE DD 56 FF 19 D1 73 23 72 23 71 +R 00 00 01 00 +T C6 00 00 00 23 70 21 06 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T D1 00 00 00 09 7E 23 A6 23 A6 23 A6 3C 28 13 +R 00 00 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 DD 6E FE DD 66 FF 23 23 7E F6 04 +R 00 00 01 00 +T E7 00 00 00 77 23 7E F6 00 77 18 11 +R 00 00 01 00 +T EF 00 00 00 +R 00 00 01 00 +T EF 00 00 00 DD 6E FE DD 66 FF 23 23 7E E6 FB +R 00 00 01 00 +T FA 00 00 00 77 23 7E E6 FF 77 +R 00 00 01 00 +T 00 01 00 00 +R 00 00 01 00 +T 00 01 00 00 +R 00 00 01 00 +T 00 01 00 00 21 00 00 +R 00 00 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 61 6C 6C 6F 77 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/dolcp_acfc.rel b/src/nos/lib/ppp_lib/dolcp_acfc.rel new file mode 100644 index 00000000..87692d00 --- /dev/null +++ b/src/nos/lib/ppp_lib/dolcp_acfc.rel @@ -0,0 +1,67 @@ +XL4 +H 3 areas A global symbols +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___01de_e216_Address_2fControl_2 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _bit16cmd Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___01e2_7b21_Allow_20Address_2fC Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8F flags 0 +S _dolcp_acfc Def00000000 +A CSTR size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 DD 6E 04 DD 66 05 23 +R 00 00 01 00 00 04 02 00 +T 1B 00 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 00 00 +T 22 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 29 00 00 00 20 35 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 6E 04 DD 66 05 23 23 E5 DD 6E +R 00 00 01 00 +T 36 00 00 00 02 DD 66 03 2B DD 75 02 DD 74 03 +R 00 00 01 00 +T 41 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 07 00 +T 46 00 00 00 00 00 00 00 E5 01 00 01 DD 5E FE +R 00 00 01 00 02 04 07 00 +T 4F 00 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 55 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 5C 00 00 00 F1 F1 18 2C +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 6B 00 00 00 66 03 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 02 00 +T 72 00 00 00 00 00 00 00 E5 01 00 01 DD 5E FE +R 00 00 01 00 02 04 02 00 +T 7B 00 00 00 DD 56 FF 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 83 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 8A 00 00 00 F1 F1 +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 61 6C 6C 6F 77 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/dolcp_auth.rel b/src/nos/lib/ppp_lib/dolcp_auth.rel new file mode 100644 index 00000000..6f43d732 --- /dev/null +++ b/src/nos/lib/ppp_lib/dolcp_auth.rel @@ -0,0 +1,173 @@ +XL4 +H 3 areas E global symbols +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___033b_d638_Pap_0a Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _bit16cmd Ref00000000 +S ___019a_3f3a_0x_2504x_0a Ref00000000 +S .__.ABS. Def00000000 +S ___0313_1aee_None_0a Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___01e3_5003_Allow_20Authenticat Ref00000000 +S ___0404_8e82_allow_20pap_20none_ Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 164 flags 0 +S _dolcp_auth Def00000000 +A CSTR size F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 11 02 80 +R 00 00 01 00 +T 14 00 00 00 DD 6E 02 DD 66 03 3E 80 AC 67 ED +R 00 00 01 00 +T 1F 00 00 00 52 30 6D +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 DD 6E FE DD 66 FF 23 23 7E E6 08 +R 00 00 01 00 +T 2D 00 00 00 28 4C +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 21 0A 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 3A 00 00 00 23 46 21 23 C0 A7 ED 42 20 13 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 02 00 02 0B 02 00 +T 4A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 50 00 00 00 CD 00 00 00 00 F1 F1 18 22 +R 00 00 01 00 02 05 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 0A 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 62 00 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 05 00 +T 69 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 2B 0A 09 00 +T 6F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 76 00 00 00 F1 18 00 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 18 11 +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 07 00 02 0B 07 00 +T 81 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 87 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 C3 5E 01 00 00 +R 00 00 01 00 00 05 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 01 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 98 00 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 00 00 +T A0 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T A7 00 00 00 20 36 +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 DD 6E 04 DD 66 05 23 23 E5 DD 6E +R 00 00 01 00 +T B4 00 00 00 02 DD 66 03 2B DD 75 02 DD 74 03 +R 00 00 01 00 +T BF 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 0B 00 +T C4 00 00 00 00 00 00 00 E5 01 08 00 DD 5E FE +R 00 00 01 00 02 04 0B 00 +T CD 00 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T D3 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T DA 00 00 00 F1 F1 C3 61 01 00 00 +R 00 00 01 00 00 07 01 00 +T DF 00 00 00 +R 00 00 01 00 +T DF 00 00 00 01 06 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T E8 00 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 00 00 +T F0 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T F7 00 00 00 20 22 +R 00 00 01 00 +T F9 00 00 00 +R 00 00 01 00 +T F9 00 00 00 DD 6E FE DD 66 FF 23 23 7E F6 08 +R 00 00 01 00 +T 04 01 00 00 77 23 7E F6 00 77 21 0A 00 DD 4E +R 00 00 01 00 +T 0F 01 00 00 FE DD 46 FF 09 36 23 23 36 C0 18 +R 00 00 01 00 +T 1A 01 00 00 43 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 01 0A 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 24 01 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 00 00 +T 2C 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 33 01 00 00 20 13 +R 00 00 01 00 +T 35 01 00 00 +R 00 00 01 00 +T 35 01 00 00 DD 6E FE DD 66 FF 23 23 7E E6 F7 +R 00 00 01 00 +T 40 01 00 00 77 23 7E E6 FF 77 18 16 +R 00 00 01 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0C 00 02 0B 0C 00 +T 4E 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 54 01 00 00 CD 00 00 00 00 F1 F1 21 01 00 18 +R 00 00 01 00 02 05 01 00 +T 5D 01 00 00 03 +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 21 00 00 +R 00 00 01 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 61 6C 6C 6F 77 00 +R 00 00 02 00 +T 06 00 00 00 +R 00 00 02 00 +T 06 00 00 00 70 61 70 00 +R 00 00 02 00 +T 0A 00 00 00 +R 00 00 02 00 +T 0A 00 00 00 6E 6F 6E 65 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/dolcp_default.rel b/src/nos/lib/ppp_lib/dolcp_default.rel new file mode 100644 index 00000000..e8c36203 --- /dev/null +++ b/src/nos/lib/ppp_lib/dolcp_default.rel @@ -0,0 +1,20 @@ +XL4 +H 2 areas 6 global symbols +S _lcp_default Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S _dolcp_default Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF EB 13 13 +R 00 00 01 00 +T 14 00 00 00 21 00 00 00 00 01 14 00 ED B0 21 +R 00 00 01 00 02 05 00 00 +T 1D 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/ppp_lib/dolcp_local.rel b/src/nos/lib/ppp_lib/dolcp_local.rel new file mode 100644 index 00000000..a8904ef3 --- /dev/null +++ b/src/nos/lib/ppp_lib/dolcp_local.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Lcpside_cmds Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 37 flags 0 +S _dolcp_local Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 11 1C 00 +R 00 00 01 00 +T 14 00 00 00 19 56 23 66 6A DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 E5 C5 DD 4E 02 DD 46 03 11 +R 00 00 01 00 +T 28 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 09 06 00 +T 2D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 34 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/ppp_lib/dolcp_magic.rel b/src/nos/lib/ppp_lib/dolcp_magic.rel new file mode 100644 index 00000000..1df02029 --- /dev/null +++ b/src/nos/lib/ppp_lib/dolcp_magic.rel @@ -0,0 +1,151 @@ +XL4 +H 3 areas 10 global symbols +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___01e6_5c94_Allow_20Magic_20Num Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___012e_aeda__25d_0a Ref00000000 +S _bit16cmd Ref00000000 +S _strtoul Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _rdclock Ref00000000 +S ___02ca_f9a6_Magic_20Number Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _setbool Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 182 flags 0 +S _dolcp_magic Def00000000 +A CSTR size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 6E 0A DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 66 0B DD 75 F6 DD 74 F7 AF DD 77 +R 00 00 01 00 +T 14 00 00 00 F8 DD 77 F9 11 02 80 DD 6E 02 DD +R 00 00 01 00 +T 1F 00 00 00 66 03 3E 80 AC 67 ED 52 30 29 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 0E 00 DD 4E F6 DD 46 F7 09 4E +R 00 00 01 00 +T 34 00 00 00 23 46 23 5E 23 56 D5 C5 0E +R 00 00 01 00 +T 3D 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 04 00 02 0A 04 00 +T 43 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T 49 00 00 00 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T 50 00 00 00 79 01 00 00 +R 00 00 01 00 00 04 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 01 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 5B 00 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 00 00 +T 63 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 6A 00 00 00 20 36 +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 6E 04 DD 66 05 23 23 E5 DD 6E +R 00 00 01 00 +T 77 00 00 00 02 DD 66 03 2B DD 75 02 DD 74 03 +R 00 00 01 00 +T 82 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 02 00 +T 87 00 00 00 00 00 00 00 E5 01 20 00 DD 5E F6 +R 00 00 01 00 02 04 02 00 +T 90 00 00 00 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T 96 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 9D 00 00 00 F1 F1 C3 7F 01 00 00 +R 00 00 01 00 00 07 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 21 00 00 E5 01 00 00 DD 6E 04 DD +R 00 00 01 00 +T AD 00 00 00 66 05 23 23 5E 23 56 3E +R 00 00 01 00 +T B5 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T BA 00 00 00 00 00 00 00 F1 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 01 00 +T C3 00 00 00 DD 71 FC DD 70 FD 7D B4 B1 B0 20 +R 00 00 01 00 +T CE 00 00 00 5B +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T DA 00 00 00 66 03 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0A 00 +T E1 00 00 00 00 00 00 00 E5 21 10 00 39 5D 54 +R 00 00 01 00 02 04 0A 00 +T EA 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0E 00 02 0A 0E 00 +T F0 00 00 00 00 00 00 00 F1 F1 F1 F1 DD 75 F8 +R 00 00 01 00 02 04 01 00 +T F9 00 00 00 DD 74 F9 DD 7E FE DD B6 FF 28 26 +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 0A 01 00 00 00 00 00 00 7D E6 0F C6 08 F5 3E +R 00 00 01 00 02 04 01 00 +T 13 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 18 01 00 00 00 00 00 00 F1 CD 00 00 00 00 DD +R 00 00 01 00 02 04 01 00 02 0A 08 00 +T 1F 01 00 00 75 FA DD 74 FB DD 71 FC DD 70 FD +R 00 00 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 DD 7E FA DD B6 FB DD B6 FC DD B6 +R 00 00 01 00 +T 35 01 00 00 FD 28 13 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 DD 6E F6 DD 66 F7 23 23 7E F6 20 +R 00 00 01 00 +T 43 01 00 00 77 23 7E F6 00 77 18 11 +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 DD 6E F6 DD 66 F7 23 23 7E E6 DF +R 00 00 01 00 +T 56 01 00 00 77 23 7E E6 FF 77 +R 00 00 01 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 21 0E 00 DD 4E F6 DD 46 F7 09 DD +R 00 00 01 00 +T 67 01 00 00 4E FC DD 46 FD DD 5E FA DD 56 FB +R 00 00 01 00 +T 72 01 00 00 73 23 72 23 71 23 70 +R 00 00 01 00 +T 79 01 00 00 +R 00 00 01 00 +T 79 01 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 +T 7F 01 00 00 +R 00 00 01 00 +T 7F 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 61 6C 6C 6F 77 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/dolcp_mru.rel b/src/nos/lib/ppp_lib/dolcp_mru.rel new file mode 100644 index 00000000..4cc43406 --- /dev/null +++ b/src/nos/lib/ppp_lib/dolcp_mru.rel @@ -0,0 +1,137 @@ +XL4 +H 3 areas E global symbols +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___012e_aeda__25d_0a Ref00000000 +S _bit16cmd Ref00000000 +S .__.ABS. Def00000000 +S _strtol Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___01e5_14d8_Allow_20MRU Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___02c9_53a6_MRU_20_25s_20_28_25 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 150 flags 0 +S _dolcp_mru Def00000000 +A CSTR size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 11 02 80 +R 00 00 01 00 +T 14 00 00 00 DD 6E 02 DD 66 03 3E 80 AC 67 ED +R 00 00 01 00 +T 1F 00 00 00 52 30 23 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 04 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T 2D 00 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 03 00 +T 34 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 2B 0A 0A 00 +T 3A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 41 00 00 00 F1 C3 4A 01 00 00 +R 00 00 01 00 00 06 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 01 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 4E 00 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 00 00 +T 56 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 5D 00 00 00 20 36 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E 04 DD 66 05 23 23 E5 DD 6E +R 00 00 01 00 +T 6A 00 00 00 02 DD 66 03 2B DD 75 02 DD 74 03 +R 00 00 01 00 +T 75 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 08 00 +T 7A 00 00 00 00 00 00 00 E5 01 02 00 DD 5E FC +R 00 00 01 00 02 04 08 00 +T 83 00 00 00 DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 89 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 90 00 00 00 F1 F1 C3 4D 01 00 00 +R 00 00 01 00 00 07 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 00 00 E5 01 00 00 DD 6E 04 DD +R 00 00 01 00 +T A0 00 00 00 66 05 23 23 5E 23 56 3E +R 00 00 01 00 +T A8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T AD 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 01 00 +T B6 00 00 00 01 80 80 3E 80 AC 67 ED 42 38 0E +R 00 00 01 00 +T C1 00 00 00 DD 4E FE DD 46 FF 21 00 10 CD +R 00 00 01 00 +T CB 00 00 00 00 00 00 00 30 36 +R 00 00 01 00 02 04 09 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 21 00 10 E5 21 80 00 E5 DD 6E FE +R 00 00 01 00 +T DA 00 00 00 DD 66 FF E5 DD 6E 04 DD 66 05 23 +R 00 00 01 00 +T E5 00 00 00 23 4E 23 46 C5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 0C 00 +T ED 00 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 0C 00 2B 0B 0A 00 +T F3 00 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 0A 00 02 0A 01 00 +T FA 00 00 00 21 0C 00 39 F9 EB 21 FF FF 18 48 +R 00 00 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 21 DC 05 DD 4E FE DD 46 FF A7 ED +R 00 00 01 00 +T 10 01 00 00 42 28 13 +R 00 00 01 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 DD 6E FC DD 66 FD 23 23 7E F6 02 +R 00 00 01 00 +T 1E 01 00 00 77 23 7E F6 00 77 18 11 +R 00 00 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 DD 6E FC DD 66 FD 23 23 7E E6 FD +R 00 00 01 00 +T 31 01 00 00 77 23 7E E6 FF 77 +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 21 04 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 42 01 00 00 4E FE DD 46 FF 71 23 70 +R 00 00 01 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 21 00 00 +R 00 00 01 00 +T 4D 01 00 00 +R 00 00 01 00 +T 4D 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 61 6C 6C 6F 77 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/dolcp_open.rel b/src/nos/lib/ppp_lib/dolcp_open.rel new file mode 100644 index 00000000..8ff60fc7 --- /dev/null +++ b/src/nos/lib/ppp_lib/dolcp_open.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_start Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _doppp_active Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 50 flags 0 +S _dolcp_open Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF DD 5E 0A +R 00 00 01 00 +T 14 00 00 00 DD 56 0B D5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 1F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 24 00 00 00 00 00 00 00 F1 21 08 00 DD 4E FE +R 00 00 01 00 02 04 00 00 +T 2D 00 00 00 DD 46 FF 09 46 23 66 68 23 23 7E +R 00 00 01 00 +T 38 00 00 00 FE 01 38 0E +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 44 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 02 00 diff --git a/src/nos/lib/ppp_lib/dolcp_pfc.rel b/src/nos/lib/ppp_lib/dolcp_pfc.rel new file mode 100644 index 00000000..fd070138 --- /dev/null +++ b/src/nos/lib/ppp_lib/dolcp_pfc.rel @@ -0,0 +1,67 @@ +XL4 +H 3 areas A global symbols +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _bit16cmd Ref00000000 +S .__.ABS. Def00000000 +S ___0347_dd4d_Protocol_20Field_20 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___01e7_33ea_Allow_20Protocol_20 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8F flags 0 +S _dolcp_pfc Def00000000 +A CSTR size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 66 0B DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 12 00 00 00 00 00 00 00 DD 6E 04 DD 66 05 23 +R 00 00 01 00 00 04 02 00 +T 1B 00 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 00 00 +T 22 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 29 00 00 00 20 35 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 6E 04 DD 66 05 23 23 E5 DD 6E +R 00 00 01 00 +T 36 00 00 00 02 DD 66 03 2B DD 75 02 DD 74 03 +R 00 00 01 00 +T 41 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 08 00 +T 46 00 00 00 00 00 00 00 E5 01 80 00 DD 5E FE +R 00 00 01 00 02 04 08 00 +T 4F 00 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 55 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 5C 00 00 00 F1 F1 18 2C +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 6B 00 00 00 66 03 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 05 00 +T 72 00 00 00 00 00 00 00 E5 01 80 00 DD 5E FE +R 00 00 01 00 02 04 05 00 +T 7B 00 00 00 DD 56 FF 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 83 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 8A 00 00 00 F1 F1 +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 61 6C 6C 6F 77 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/dolcp_remote.rel b/src/nos/lib/ppp_lib/dolcp_remote.rel new file mode 100644 index 00000000..b116777e --- /dev/null +++ b/src/nos/lib/ppp_lib/dolcp_remote.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Lcpside_cmds Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3B flags 0 +S _dolcp_remote Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 11 1C 00 +R 00 00 01 00 +T 14 00 00 00 19 56 23 66 6A DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 11 2A 00 19 E5 C5 DD 4E 02 DD 46 +R 00 00 01 00 +T 2A 00 00 00 03 11 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 01 00 2B 0B 06 00 +T 30 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 37 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 diff --git a/src/nos/lib/ppp_lib/dopap_user.rel b/src/nos/lib/ppp_lib/dopap_user.rel new file mode 100644 index 00000000..40563e16 --- /dev/null +++ b/src/nos/lib/ppp_lib/dopap_user.rel @@ -0,0 +1,122 @@ +XL4 +H 3 areas D global symbols +S _stricmp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0137_7643__25s_0a Ref00000000 +S _pap_pwdlookup Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strdupw Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11D flags 0 +S _dopap_user Def00000000 +A CSTR size A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 11 1C 00 +R 00 00 01 00 +T 14 00 00 00 19 56 23 66 6A DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 11 02 80 DD 6E 02 DD 66 03 3E 80 +R 00 00 01 00 +T 2A 00 00 00 AC 67 ED 52 30 33 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 6E FE DD 66 FF 7E 23 B6 20 05 +R 00 00 01 00 +T 3B 00 00 00 21 00 00 00 00 18 0A +R 00 00 01 00 00 05 02 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 02 00 +T 4F 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 0A 0A 00 +T 55 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 5C 00 00 00 F1 21 00 00 C3 1A 01 00 00 +R 00 00 01 00 00 09 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 DD 6E FE DD 66 FF 5E 23 56 3E +R 00 00 01 00 +T 6D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 72 00 00 00 00 00 00 00 DD 6E FE DD 66 FF AF +R 00 00 01 00 02 04 01 00 +T 7B 00 00 00 77 23 77 DD 6E FE DD 66 FF 23 23 +R 00 00 01 00 +T 86 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 8C 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 93 00 00 00 FE DD 66 FF 23 23 AF 77 23 77 01 +R 00 00 01 00 +T 9E 00 00 00 05 00 00 00 DD 6E 04 DD 66 05 23 +R 00 00 01 00 00 04 02 00 +T A7 00 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 00 00 +T AE 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T B5 00 00 00 28 60 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T C2 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T C8 00 00 00 00 00 00 00 E5 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 01 00 +T D1 00 00 00 C1 71 23 70 DD 4E 02 DD 46 03 21 +R 00 00 01 00 +T DC 00 00 00 02 00 CD 00 00 00 00 30 26 +R 00 00 01 00 02 07 09 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 DD 6E FE DD 66 FF 23 23 E5 21 +R 00 00 01 00 +T ED 00 00 00 04 00 DD 4E 04 DD 46 05 09 5E 23 +R 00 00 01 00 +T F8 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T FE 00 00 00 CD 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 05 01 00 +T 07 01 00 00 18 0E +R 00 00 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 11 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 01 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 21 00 00 +R 00 00 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4E 6F 6E 65 00 +R 00 00 02 00 +T 05 00 00 00 +R 00 00 02 00 +T 05 00 00 00 6E 6F 6E 65 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/doppp_ipcp.rel b/src/nos/lib/ppp_lib/doppp_ipcp.rel new file mode 100644 index 00000000..c3bf0ebf --- /dev/null +++ b/src/nos/lib/ppp_lib/doppp_ipcp.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _IPcpcmds Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3B flags 0 +S _doppp_ipcp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 11 39 00 +R 00 00 01 00 +T 14 00 00 00 19 56 23 66 6A DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 11 42 00 19 E5 C5 DD 4E 02 DD 46 +R 00 00 01 00 +T 2A 00 00 00 03 11 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 01 00 2B 0B 06 00 +T 30 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 37 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 diff --git a/src/nos/lib/ppp_lib/doppp_lcp.rel b/src/nos/lib/ppp_lib/doppp_lcp.rel new file mode 100644 index 00000000..6fdb4c22 --- /dev/null +++ b/src/nos/lib/ppp_lib/doppp_lcp.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Lcpcmds Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3B flags 0 +S _doppp_lcp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 11 39 00 +R 00 00 01 00 +T 14 00 00 00 19 56 23 66 6A DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 11 06 00 19 E5 C5 DD 4E 02 DD 46 +R 00 00 01 00 +T 2A 00 00 00 03 11 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 01 00 2B 0B 06 00 +T 30 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 37 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 diff --git a/src/nos/lib/ppp_lib/doppp_pap.rel b/src/nos/lib/ppp_lib/doppp_pap.rel new file mode 100644 index 00000000..de6cc499 --- /dev/null +++ b/src/nos/lib/ppp_lib/doppp_pap.rel @@ -0,0 +1,28 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Papcmds Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _subcmd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3B flags 0 +S _doppp_pap Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 66 0B DD 75 FC DD 74 FD 11 39 00 +R 00 00 01 00 +T 14 00 00 00 19 56 23 66 6A DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 11 24 00 19 E5 C5 DD 4E 02 DD 46 +R 00 00 01 00 +T 2A 00 00 00 03 11 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 01 00 2B 0B 06 00 +T 30 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 37 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 diff --git a/src/nos/lib/ppp_lib/encode.rel b/src/nos/lib/ppp_lib/encode.rel new file mode 100644 index 00000000..8bd5a9c4 --- /dev/null +++ b/src/nos/lib/ppp_lib/encode.rel @@ -0,0 +1,45 @@ +XL4 +H 2 areas 7 global symbols +S _put16 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 60 flags 0 +S _encode Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 01 00 01 DD 6E 04 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 66 05 A7 ED 42 30 08 DD 7E 04 +R 00 00 01 00 +T 14 00 00 00 DD B6 05 20 2C +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 24 00 00 00 74 03 2B 36 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 2F 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 37 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 3E 00 00 00 75 02 DD 74 03 18 12 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 46 04 DD 6E 02 DD 66 03 23 DD +R 00 00 01 00 +T 50 00 00 00 75 02 DD 74 03 2B 70 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 02 00 diff --git a/src/nos/lib/ppp_lib/fcstab.rel b/src/nos/lib/ppp_lib/fcstab.rel new file mode 100644 index 00000000..e51750c4 --- /dev/null +++ b/src/nos/lib/ppp_lib/fcstab.rel @@ -0,0 +1,117 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 200 flags 0 +S _fcstab Def00000000 +A CDATA0 size 200 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 89 11 12 23 9B 32 24 46 +R 00 00 03 00 +T 0A 00 00 00 AD 57 36 65 BF 74 48 8C C1 9D +R 00 00 03 00 +T 14 00 00 00 5A AF D3 BE 6C CA E5 DB 7E E9 +R 00 00 03 00 +T 1E 00 00 00 F7 F8 81 10 08 01 93 33 1A 22 +R 00 00 03 00 +T 28 00 00 00 A5 56 2C 47 B7 75 3E 64 C9 9C +R 00 00 03 00 +T 32 00 00 00 40 8D DB BF 52 AE ED DA 64 CB +R 00 00 03 00 +T 3C 00 00 00 FF F9 76 E8 02 21 8B 30 10 02 +R 00 00 03 00 +T 46 00 00 00 99 13 26 67 AF 76 34 44 BD 55 +R 00 00 03 00 +T 50 00 00 00 4A AD C3 BC 58 8E D1 9F 6E EB +R 00 00 03 00 +T 5A 00 00 00 E7 FA 7C C8 F5 D9 83 31 0A 20 +R 00 00 03 00 +T 64 00 00 00 91 12 18 03 A7 77 2E 66 B5 54 +R 00 00 03 00 +T 6E 00 00 00 3C 45 CB BD 42 AC D9 9E 50 8F +R 00 00 03 00 +T 78 00 00 00 EF FB 66 EA FD D8 74 C9 04 42 +R 00 00 03 00 +T 82 00 00 00 8D 53 16 61 9F 70 20 04 A9 15 +R 00 00 03 00 +T 8C 00 00 00 32 27 BB 36 4C CE C5 DF 5E ED +R 00 00 03 00 +T 96 00 00 00 D7 FC 68 88 E1 99 7A AB F3 BA +R 00 00 03 00 +T A0 00 00 00 85 52 0C 43 97 71 1E 60 A1 14 +R 00 00 03 00 +T AA 00 00 00 28 05 B3 37 3A 26 CD DE 44 CF +R 00 00 03 00 +T B4 00 00 00 DF FD 56 EC E9 98 60 89 FB BB +R 00 00 03 00 +T BE 00 00 00 72 AA 06 63 8F 72 14 40 9D 51 +R 00 00 03 00 +T C8 00 00 00 22 25 AB 34 30 06 B9 17 4E EF +R 00 00 03 00 +T D2 00 00 00 C7 FE 5C CC D5 DD 6A A9 E3 B8 +R 00 00 03 00 +T DC 00 00 00 78 8A F1 9B 87 73 0E 62 95 50 +R 00 00 03 00 +T E6 00 00 00 1C 41 A3 35 2A 24 B1 16 38 07 +R 00 00 03 00 +T F0 00 00 00 CF FF 46 EE DD DC 54 CD EB B9 +R 00 00 03 00 +T FA 00 00 00 62 A8 F9 9A 70 8B 08 84 81 95 +R 00 00 03 00 +T 04 01 00 00 1A A7 93 B6 2C C2 A5 D3 3E E1 +R 00 00 03 00 +T 0E 01 00 00 B7 F0 40 08 C9 19 52 2B DB 3A +R 00 00 03 00 +T 18 01 00 00 64 4E ED 5F 76 6D FF 7C 89 94 +R 00 00 03 00 +T 22 01 00 00 00 85 9B B7 12 A6 AD D2 24 C3 +R 00 00 03 00 +T 2C 01 00 00 BF F1 36 E0 C1 18 48 09 D3 3B +R 00 00 03 00 +T 36 01 00 00 5A 2A E5 5E 6C 4F F7 7D 7E 6C +R 00 00 03 00 +T 40 01 00 00 0A A5 83 B4 18 86 91 97 2E E3 +R 00 00 03 00 +T 4A 01 00 00 A7 F2 3C C0 B5 D1 42 29 CB 38 +R 00 00 03 00 +T 54 01 00 00 50 0A D9 1B 66 6F EF 7E 74 4C +R 00 00 03 00 +T 5E 01 00 00 FD 5D 8B B5 02 A4 99 96 10 87 +R 00 00 03 00 +T 68 01 00 00 AF F3 26 E2 BD D0 34 C1 C3 39 +R 00 00 03 00 +T 72 01 00 00 4A 28 D1 1A 58 0B E7 7F 6E 6E +R 00 00 03 00 +T 7C 01 00 00 F5 5C 7C 4D 0C C6 85 D7 1E E5 +R 00 00 03 00 +T 86 01 00 00 97 F4 28 80 A1 91 3A A3 B3 B2 +R 00 00 03 00 +T 90 01 00 00 44 4A CD 5B 56 69 DF 78 60 0C +R 00 00 03 00 +T 9A 01 00 00 E9 1D 72 2F FB 3E 8D D6 04 C7 +R 00 00 03 00 +T A4 01 00 00 9F F5 16 E4 A9 90 20 81 BB B3 +R 00 00 03 00 +T AE 01 00 00 32 A2 C5 5A 4C 4B D7 79 5E 68 +R 00 00 03 00 +T B8 01 00 00 E1 1C 68 0D F3 3F 7A 2E 0E E7 +R 00 00 03 00 +T C2 01 00 00 87 F6 1C C4 95 D5 2A A1 A3 B0 +R 00 00 03 00 +T CC 01 00 00 38 82 B1 93 46 6B CF 7A 54 48 +R 00 00 03 00 +T D6 01 00 00 DD 59 62 2D EB 3C 70 0E F9 1F +R 00 00 03 00 +T E0 01 00 00 8F F7 06 E6 9D D4 14 C5 AB B1 +R 00 00 03 00 +T EA 01 00 00 22 A0 B9 92 30 83 C7 7B 4E 6A +R 00 00 03 00 +T F4 01 00 00 D5 58 5C 49 E3 3D 6A 2C F1 1E +R 00 00 03 00 +T FE 01 00 00 78 0F +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/fsmCodes.rel b/src/nos/lib/ppp_lib/fsmCodes.rel new file mode 100644 index 00000000..2713645b --- /dev/null +++ b/src/nos/lib/ppp_lib/fsmCodes.rel @@ -0,0 +1,80 @@ +XL4 +H 5 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size 89 flags 0 +A IDATA0 size 18 flags 0 +S _fsmCodes Def00000000 +A CDATA0 size 18 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 43 6F 6E 66 69 67 20 52 65 71 00 +R 00 00 02 00 +T 0B 00 00 00 +R 00 00 02 00 +T 0B 00 00 00 43 6F 6E 66 69 67 20 41 63 6B 00 +R 00 00 02 00 +T 16 00 00 00 +R 00 00 02 00 +T 16 00 00 00 43 6F 6E 66 69 67 20 4E 61 6B 00 +R 00 00 02 00 +T 21 00 00 00 +R 00 00 02 00 +T 21 00 00 00 43 6F 6E 66 69 67 20 52 65 6A 65 +R 00 00 02 00 +T 2C 00 00 00 63 74 00 +R 00 00 02 00 +T 2F 00 00 00 +R 00 00 02 00 +T 2F 00 00 00 54 65 72 6D 69 6E 20 52 65 71 00 +R 00 00 02 00 +T 3A 00 00 00 +R 00 00 02 00 +T 3A 00 00 00 54 65 72 6D 69 6E 20 41 63 6B 00 +R 00 00 02 00 +T 45 00 00 00 +R 00 00 02 00 +T 45 00 00 00 43 6F 64 65 20 52 65 6A 65 63 74 +R 00 00 02 00 +T 50 00 00 00 00 +R 00 00 02 00 +T 51 00 00 00 +R 00 00 02 00 +T 51 00 00 00 50 72 6F 74 6F 63 6F 6C 20 52 65 +R 00 00 02 00 +T 5C 00 00 00 6A 65 63 74 00 +R 00 00 02 00 +T 61 00 00 00 +R 00 00 02 00 +T 61 00 00 00 45 63 68 6F 20 52 65 71 75 65 73 +R 00 00 02 00 +T 6C 00 00 00 74 00 +R 00 00 02 00 +T 6E 00 00 00 +R 00 00 02 00 +T 6E 00 00 00 45 63 68 6F 20 52 65 70 6C 79 00 +R 00 00 02 00 +T 79 00 00 00 +R 00 00 02 00 +T 79 00 00 00 44 69 73 63 61 72 64 20 52 65 71 +R 00 00 02 00 +T 84 00 00 00 75 65 73 74 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 00 00 0B 00 00 00 +R 00 00 04 00 00 06 02 00 00 0A 02 00 +T 06 00 00 00 16 00 00 00 21 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0A 00 00 00 2F 00 00 00 3A 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0E 00 00 00 45 00 00 00 51 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 12 00 00 00 61 00 00 00 6E 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 16 00 00 00 79 00 00 00 +R 00 00 04 00 00 04 02 00 diff --git a/src/nos/lib/ppp_lib/fsmStates.rel b/src/nos/lib/ppp_lib/fsmStates.rel new file mode 100644 index 00000000..968ac8aa --- /dev/null +++ b/src/nos/lib/ppp_lib/fsmStates.rel @@ -0,0 +1,50 @@ +XL4 +H 5 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size 39 flags 0 +A IDATA0 size E flags 0 +S _fsmStates Def00000000 +A CDATA0 size E flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 43 6C 6F 73 65 64 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 4C 69 73 74 65 6E 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 52 65 71 20 53 65 6E 74 00 +R 00 00 02 00 +T 17 00 00 00 +R 00 00 02 00 +T 17 00 00 00 41 63 6B 20 52 63 76 64 00 +R 00 00 02 00 +T 20 00 00 00 +R 00 00 02 00 +T 20 00 00 00 41 63 6B 20 53 65 6E 74 00 +R 00 00 02 00 +T 29 00 00 00 +R 00 00 02 00 +T 29 00 00 00 4F 70 65 6E 65 64 00 +R 00 00 02 00 +T 30 00 00 00 +R 00 00 02 00 +T 30 00 00 00 54 65 72 6D 53 65 6E 74 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 07 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 04 00 00 00 0E 00 00 00 17 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 08 00 00 00 20 00 00 00 29 00 00 00 +R 00 00 04 00 00 04 02 00 00 08 02 00 +T 0C 00 00 00 30 00 00 00 +R 00 00 04 00 00 04 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_close.rel b/src/nos/lib/ppp_lib/fsm_close.rel new file mode 100644 index 00000000..e2efc13d --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_close.rel @@ -0,0 +1,98 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_sendtermreq Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _fsm_log Ref00000000 +S _PPPiface Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D4 flags 0 +S _fsm_close Def00000000 +A CSTR size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 1C 00 19 7E 23 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 B6 20 03 +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 C3 D1 00 00 00 +R 00 00 01 00 00 05 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 1A 00 00 00 23 66 6A 11 05 00 19 5E 16 00 ED +R 00 00 01 00 +T 25 00 00 00 53 00 00 00 00 21 08 00 09 7E 23 +R 00 00 01 00 02 05 09 00 +T 2E 00 00 00 66 6F 56 23 66 6A 22 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 37 00 00 00 01 00 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T 40 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 46 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 5E +R 00 00 01 00 02 04 00 00 +T 4F 00 00 00 CD 00 00 00 00 00 07 00 +R 00 00 01 00 02 05 07 00 +T 55 00 00 00 D1 00 00 00 CF 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 59 00 00 00 C5 00 00 00 B0 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 5D 00 00 00 B0 00 00 00 87 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 61 00 00 00 65 00 00 00 CF 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 DD 5E 02 DD 56 03 21 1A 00 DD 4E +R 00 00 01 00 +T 70 00 00 00 02 DD 46 03 09 46 23 66 68 01 +R 00 00 01 00 +T 7A 00 00 00 1A 00 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 85 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 21 05 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 92 00 00 00 69 60 23 23 23 72 DD 5E 02 DD 56 +R 00 00 01 00 +T 9D 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T A3 00 00 00 CD 00 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 02 05 00 00 +T AC 00 00 00 36 06 18 21 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 DD 6E 02 DD 66 03 23 23 23 36 00 +R 00 00 01 00 +T BB 00 00 00 DD 6E 02 DD 66 03 36 06 18 0C +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 DD 6E 02 DD 66 03 36 00 18 02 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 18 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 +R 00 00 01 00 +T D1 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 43 6C 6F 73 65 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_down.rel b/src/nos/lib/ppp_lib/fsm_down.rel new file mode 100644 index 00000000..f6e5cbc2 --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_down.rel @@ -0,0 +1,97 @@ +XL4 +H 3 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _stop_timer Ref00000000 +S _fsm_reset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _fsm_log Ref00000000 +S _PPPiface Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BB flags 0 +S _fsm_down Def00000000 +A CSTR size 5 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 1C 00 19 7E 23 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 20 03 +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 C3 B8 00 00 00 +R 00 00 01 00 00 05 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 1A 00 00 00 23 66 6A 11 05 00 19 5E 16 00 ED +R 00 00 01 00 +T 25 00 00 00 53 00 00 00 00 21 08 00 09 7E 23 +R 00 00 01 00 02 05 0A 00 +T 2E 00 00 00 66 6F 56 23 66 6A 22 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 37 00 00 00 01 00 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T 40 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 46 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 5E +R 00 00 01 00 02 04 00 00 +T 4F 00 00 00 CD 00 00 00 00 00 07 00 +R 00 00 01 00 02 05 08 00 +T 55 00 00 00 B8 00 00 00 B6 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 59 00 00 00 B6 00 00 00 65 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 5D 00 00 00 65 00 00 00 65 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 61 00 00 00 84 00 00 00 A6 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 70 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 76 00 00 00 00 00 00 00 59 50 3E 00 00 00 00 +R 00 00 01 00 02 04 00 00 2B 0B 02 00 +T 7C 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 83 00 00 00 34 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 DD 5E 02 DD 56 03 21 1A 00 DD 4E +R 00 00 01 00 +T 8F 00 00 00 02 DD 46 03 09 46 23 66 68 01 +R 00 00 01 00 +T 99 00 00 00 1A 00 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T A4 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T AE 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T B5 00 00 00 02 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 18 00 +R 00 00 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 44 6F 77 6E 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_free.rel b/src/nos/lib/ppp_lib/fsm_free.rel new file mode 100644 index 00000000..8f003a02 --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_free.rel @@ -0,0 +1,37 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4E flags 0 +S _fsm_free Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 1C 00 19 7E 23 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 B6 28 3F +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 DD 5E 02 DD 56 03 21 1A 00 DD 4E +R 00 00 01 00 +T 17 00 00 00 02 DD 46 03 09 7E 23 66 6F 01 +R 00 00 01 00 +T 21 00 00 00 0E 00 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 2C 00 00 00 00 00 00 00 21 1C 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 35 00 00 00 46 03 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 3D 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 44 00 00 00 1C 00 09 AF 77 23 77 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/ppp_lib/fsm_init.rel b/src/nos/lib/ppp_lib/fsm_init.rel new file mode 100644 index 00000000..4e6dfd27 --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_init.rel @@ -0,0 +1,81 @@ +XL4 +H 3 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _stop_timer Ref00000000 +S _fsm_timer Ref00000000 +S _fsm_reset Ref00000000 +S _set_timer Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _fsm_timeout Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size D7 flags 0 +S _fsm_init Def00000000 +A CSTR size B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 0A 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 4E 02 DD 46 03 09 DD 75 FE DD 74 +R 00 00 01 00 +T 14 00 00 00 FF 3A 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 06 0C 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 07 00 +T 23 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 29 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 21 1A 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 39 00 00 00 23 66 6A 11 07 00 19 56 21 04 00 +R 00 00 01 00 +T 44 00 00 00 09 72 21 1A 00 09 56 23 66 6A 11 +R 00 00 01 00 +T 4F 00 00 00 08 00 19 56 21 07 00 09 72 21 +R 00 00 01 00 +T 59 00 00 00 1A 00 09 56 23 66 6A 11 09 00 19 +R 00 00 01 00 +T 64 00 00 00 56 21 05 00 09 72 59 50 3E +R 00 00 01 00 +T 6D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 72 00 00 00 00 00 00 00 21 0A 00 DD 4E FE DD +R 00 00 01 00 02 04 00 00 +T 7B 00 00 00 46 FF 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 08 09 00 +T 82 00 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 09 00 2B 0A 09 00 +T 87 00 00 00 0D 00 09 DD 5E 02 DD 56 03 73 23 +R 00 00 01 00 +T 92 00 00 00 72 21 1A 00 19 7E 23 66 6F 11 +R 00 00 01 00 +T 9C 00 00 00 0A 00 19 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T A7 00 00 00 D5 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T AF 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T B4 00 00 00 00 00 00 00 E1 E1 DD 5E 02 DD 56 +R 00 00 01 00 02 04 00 00 +T BD 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T C3 00 00 00 CD 00 00 00 00 DD 5E FE DD 56 FF +R 00 00 01 00 02 05 00 00 +T CC 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T D2 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 66 73 6D 5F 69 6E 69 74 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_log.rel b/src/nos/lib/ppp_lib/fsm_log.rel new file mode 100644 index 00000000..ecd5ff70 --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_log.rel @@ -0,0 +1,52 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _PPPiface Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fsmStates Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 64 flags 0 +S _fsm_log Def00000000 +A CSTR size 13 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 09 00 +T 07 00 00 00 21 01 00 CD 00 00 00 00 30 52 +R 00 00 01 00 02 08 06 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 1A 00 00 00 66 03 6E 26 00 29 01 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T 23 00 00 00 09 4E 23 46 C5 21 1A 00 DD 4E 02 +R 00 00 01 00 +T 2E 00 00 00 DD 46 03 09 7E 23 66 6F 5E 23 56 +R 00 00 01 00 +T 39 00 00 00 D5 21 08 00 09 7E 23 66 6F 46 23 +R 00 00 01 00 +T 44 00 00 00 66 68 23 23 4E 23 46 C5 21 +R 00 00 01 00 +T 4D 00 00 00 00 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 04 00 +T 54 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 5A 00 00 00 00 00 00 00 21 0C 00 39 F9 +R 00 00 01 00 02 04 00 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 73 20 50 50 50 2F 25 73 20 25 +R 00 00 02 00 +T 0B 00 00 00 2D 38 73 3B 20 25 73 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_no_action.rel b/src/nos/lib/ppp_lib/fsm_no_action.rel new file mode 100644 index 00000000..8b69c25a --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_no_action.rel @@ -0,0 +1,38 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _PPPiface Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F flags 0 +S _fsm_no_action Def00000000 +A CSTR size 10 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3A 00 00 00 00 E6 +R 00 00 01 00 02 05 03 00 02 0A 07 00 +T 07 00 00 00 80 28 12 +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 11 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 17 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 66 73 6D 5F 6E 6F 5F 61 63 74 69 +R 00 00 02 00 +T 0B 00 00 00 6F 6E 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_no_check.rel b/src/nos/lib/ppp_lib/fsm_no_check.rel new file mode 100644 index 00000000..7794b595 --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_no_check.rel @@ -0,0 +1,38 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _PPPiface Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 22 flags 0 +S _fsm_no_check Def00000000 +A CSTR size F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3A 00 00 00 00 E6 +R 00 00 01 00 02 05 03 00 02 0A 07 00 +T 07 00 00 00 80 28 12 +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 11 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 17 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 66 73 6D 5F 6E 6F 5F 63 68 65 63 +R 00 00 02 00 +T 0B 00 00 00 6B 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_opening.rel b/src/nos/lib/ppp_lib/fsm_opening.rel new file mode 100644 index 00000000..ef4863e6 --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_opening.rel @@ -0,0 +1,37 @@ +XL4 +H 3 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _stop_timer Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _fsm_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4A flags 0 +S _fsm_opening Def00000000 +A CSTR size 7 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 01 00 00 00 00 3E +R 00 00 01 00 02 05 04 00 00 0A 02 00 +T 07 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 0C 00 00 00 00 00 00 00 21 0A 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 15 00 00 00 46 03 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 1C 00 00 00 00 00 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 23 00 00 00 21 1A 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 2E 00 00 00 23 66 6F 01 17 00 09 4E 23 46 23 +R 00 00 01 00 +T 39 00 00 00 7E 69 60 CD 00 00 00 00 DD 6E 02 +R 00 00 01 00 02 08 00 00 +T 42 00 00 00 DD 66 03 36 05 C3 00 00 00 00 +R 00 00 01 00 02 0A 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4F 70 65 6E 65 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_proc.rel b/src/nos/lib/ppp_lib/fsm_proc.rel new file mode 100644 index 00000000..c6676327 --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_proc.rel @@ -0,0 +1,896 @@ +XL4 +H 3 areas 19 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _trim_mbuf Ref00000000 +S _stop_timer Ref00000000 +S _fsm_timer Ref00000000 +S _fsm_reset Ref00000000 +S _fsm_send Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fsm_opening Ref00000000 +S _fsm_sendreq Ref00000000 +S .__.ABS. Def00000000 +S _fsm_log Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S _ntohcnf Ref00000000 +S _htoncnf Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _fsmCodes Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fsm_sendtermack Ref00000000 +S _fsmStates Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8EB flags 0 +S _fsm_proc Def00000000 +A CSTR size 12F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 08 00 DD +R 00 00 01 00 02 05 0C 00 +T 09 00 00 00 5E 02 DD 56 03 19 7E 23 66 6F 01 +R 00 00 01 00 +T 14 00 00 00 05 00 09 4E 06 00 ED 43 +R 00 00 01 00 +T 1C 00 00 00 00 00 00 00 21 08 00 19 7E 23 66 +R 00 00 01 00 02 04 17 00 +T 25 00 00 00 6F 46 23 66 68 22 00 00 00 00 DD +R 00 00 01 00 02 0A 0B 00 +T 2E 00 00 00 4E 04 DD 46 05 21 00 00 39 5D 54 +R 00 00 01 00 +T 39 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0E 00 02 0A 0E 00 +T 3F 00 00 00 00 00 00 00 7D A4 3C 20 11 +R 00 00 01 00 02 04 00 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 01 00 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T 4F 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T 55 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 ED 4B 00 00 00 00 21 01 00 CD +R 00 00 01 00 02 06 17 00 +T 5F 00 00 00 00 00 00 00 30 66 +R 00 00 01 00 02 04 10 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 DD 6E FE DD 66 FF E5 DD 4E FD 06 +R 00 00 01 00 +T 6E 00 00 00 00 C5 DD 6E FC 26 00 29 01 +R 00 00 01 00 +T 77 00 00 00 00 00 00 00 09 4E 23 46 C5 DD 6E +R 00 00 01 00 02 04 12 00 +T 80 00 00 00 02 DD 66 03 6E 26 00 29 01 +R 00 00 01 00 +T 89 00 00 00 00 00 00 00 09 4E 23 46 C5 21 +R 00 00 01 00 02 04 16 00 +T 91 00 00 00 1A 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 9C 00 00 00 66 6F 5E 23 56 D5 21 08 00 09 7E +R 00 00 01 00 +T A7 00 00 00 23 66 6F 46 23 66 68 23 23 4E 23 +R 00 00 01 00 +T B2 00 00 00 46 C5 21 1B 00 00 00 E5 2A +R 00 00 01 00 00 07 02 00 +T B9 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 2B 0A 0D 00 +T BF 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T C5 00 00 00 10 00 39 F9 +R 00 00 01 00 +T C9 00 00 00 +R 00 00 01 00 +T C9 00 00 00 21 02 00 39 7E D6 04 77 23 7E DE +R 00 00 01 00 +T D4 00 00 00 00 77 DD 4E FE DD 46 FF DD 5E 04 +R 00 00 01 00 +T DF 00 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T E5 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 01 00 02 09 00 00 +T EC 00 00 00 FC CD 00 00 00 00 01 0C 00 +R 00 00 01 00 02 06 13 00 +T F3 00 00 00 47 08 00 00 0D 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T F7 00 00 00 49 02 00 00 8A 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T FB 00 00 00 8A 04 00 00 8A 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T FF 00 00 00 3B 06 00 00 18 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 03 01 00 00 8D 07 00 00 D6 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 07 01 00 00 36 08 00 00 36 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 0B 01 00 00 36 08 00 00 +R 00 00 01 00 00 04 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 DD 6E 02 DD 66 03 5E CD +R 00 00 01 00 +T 15 01 00 00 00 00 00 00 00 07 00 46 02 00 00 +R 00 00 01 00 02 04 13 00 00 0B 01 00 +T 1C 01 00 00 25 02 00 00 5A 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 20 01 00 00 8A 01 00 00 CF 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 24 01 00 00 8A 01 00 00 2A 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 28 01 00 00 36 02 00 00 +R 00 00 01 00 00 04 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 DD 5E 02 DD 56 03 21 1A 00 DD 4E +R 00 00 01 00 +T 35 01 00 00 02 DD 46 03 09 7E 23 66 6F 01 +R 00 00 01 00 +T 3F 01 00 00 1A 00 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 4A 01 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 00 00 +T 53 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 58 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 DD 5E 02 DD 56 03 21 1A 00 DD 4E +R 00 00 01 00 +T 65 01 00 00 02 DD 46 03 09 7E 23 66 6F 01 +R 00 00 01 00 +T 6F 01 00 00 14 00 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 7A 01 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 00 00 +T 83 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 88 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 8A 01 00 00 +R 00 00 01 00 +T 8A 01 00 00 DD 6E 04 DD 66 05 E5 21 02 00 39 +R 00 00 01 00 +T 95 01 00 00 4D 44 C5 DD 5E 02 DD 56 03 21 +R 00 00 01 00 +T 9F 01 00 00 1A 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T AA 01 00 00 66 6F 01 23 00 09 4E 23 46 23 7E +R 00 00 01 00 +T B5 01 00 00 69 60 C1 CD 00 00 00 00 F1 7D B4 +R 00 00 01 00 02 08 00 00 +T BE 01 00 00 20 04 3E 04 18 02 +R 00 00 01 00 +T C4 01 00 00 +R 00 00 01 00 +T C4 01 00 00 3E 02 +R 00 00 01 00 +T C6 01 00 00 +R 00 00 01 00 +T C6 01 00 00 DD 6E 02 DD 66 03 77 18 77 +R 00 00 01 00 +T CF 01 00 00 +R 00 00 01 00 +T CF 01 00 00 DD 6E 04 DD 66 05 E5 21 02 00 39 +R 00 00 01 00 +T DA 01 00 00 4D 44 C5 DD 5E 02 DD 56 03 21 +R 00 00 01 00 +T E4 01 00 00 1A 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T EF 01 00 00 66 68 01 23 00 09 4E 23 46 23 7E +R 00 00 01 00 +T FA 01 00 00 69 60 C1 CD 00 00 00 00 F1 7D B4 +R 00 00 01 00 02 08 00 00 +T 03 02 00 00 20 10 +R 00 00 01 00 +T 05 02 00 00 +R 00 00 01 00 +T 05 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 0D 02 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 14 02 00 00 0E +R 00 00 01 00 +T 15 02 00 00 +R 00 00 01 00 +T 15 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 1D 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 23 02 00 00 +R 00 00 01 00 +T 23 02 00 00 18 21 +R 00 00 01 00 +T 25 02 00 00 +R 00 00 01 00 +T 25 02 00 00 DD 4E FD DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 2F 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 34 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 3E 02 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 45 02 00 00 00 +R 00 00 01 00 +T 46 02 00 00 +R 00 00 01 00 +T 46 02 00 00 C3 E8 08 00 00 +R 00 00 01 00 00 05 01 00 +T 49 02 00 00 +R 00 00 01 00 +T 49 02 00 00 DD 6E 02 DD 66 03 5E CD +R 00 00 01 00 +T 51 02 00 00 00 00 00 00 00 07 00 87 03 00 00 +R 00 00 01 00 02 04 13 00 00 0B 01 00 +T 58 02 00 00 66 03 00 00 66 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 5C 02 00 00 66 02 00 00 40 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 60 02 00 00 A7 02 00 00 EE 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 64 02 00 00 77 03 00 00 +R 00 00 01 00 00 04 01 00 +T 66 02 00 00 +R 00 00 01 00 +T 66 02 00 00 DD 6E 04 DD 66 05 E5 21 02 00 39 +R 00 00 01 00 +T 71 02 00 00 4D 44 C5 DD 5E 02 DD 56 03 21 +R 00 00 01 00 +T 7B 02 00 00 1A 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T 86 02 00 00 66 68 01 26 00 09 4E 23 46 23 7E +R 00 00 01 00 +T 91 02 00 00 69 60 C1 CD 00 00 00 00 F1 7D B4 +R 00 00 01 00 02 08 00 00 +T 9A 02 00 00 20 08 +R 00 00 01 00 +T 9C 02 00 00 +R 00 00 01 00 +T 9C 02 00 00 DD 6E 02 DD 66 03 36 03 +R 00 00 01 00 +T A4 02 00 00 +R 00 00 01 00 +T A4 02 00 00 C3 87 03 00 00 +R 00 00 01 00 00 05 01 00 +T A7 02 00 00 +R 00 00 01 00 +T A7 02 00 00 DD 6E 04 DD 66 05 E5 21 02 00 39 +R 00 00 01 00 +T B2 02 00 00 4D 44 C5 DD 5E 02 DD 56 03 21 +R 00 00 01 00 +T BC 02 00 00 1A 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T C7 02 00 00 66 68 01 26 00 09 4E 23 46 23 7E +R 00 00 01 00 +T D2 02 00 00 69 60 C1 CD 00 00 00 00 F1 7D B4 +R 00 00 01 00 02 08 00 00 +T DB 02 00 00 20 0E +R 00 00 01 00 +T DD 02 00 00 +R 00 00 01 00 +T DD 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T E5 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T EB 02 00 00 +R 00 00 01 00 +T EB 02 00 00 C3 87 03 00 00 +R 00 00 01 00 00 05 01 00 +T EE 02 00 00 +R 00 00 01 00 +T EE 02 00 00 DD 5E 02 DD 56 03 21 1A 00 DD 4E +R 00 00 01 00 +T F9 02 00 00 02 DD 46 03 09 7E 23 66 6F 01 +R 00 00 01 00 +T 03 03 00 00 1A 00 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 0E 03 00 00 00 00 00 00 DD 5E 02 DD 56 03 21 +R 00 00 01 00 02 04 00 00 +T 17 03 00 00 1A 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 22 03 00 00 66 6F 01 14 00 09 4E 23 46 23 7E +R 00 00 01 00 +T 2D 03 00 00 69 60 CD 00 00 00 00 DD 5E 02 DD +R 00 00 01 00 02 07 00 00 +T 36 03 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 3B 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 40 03 00 00 +R 00 00 01 00 +T 40 03 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 48 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 4F 03 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 57 03 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 5E 03 00 00 02 DD 66 03 36 02 18 21 +R 00 00 01 00 +T 66 03 00 00 +R 00 00 01 00 +T 66 03 00 00 DD 4E FD DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 70 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 75 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 77 03 00 00 +R 00 00 01 00 +T 77 03 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 7F 03 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 86 03 00 00 00 +R 00 00 01 00 +T 87 03 00 00 +R 00 00 01 00 +T 87 03 00 00 C3 E8 08 00 00 +R 00 00 01 00 00 05 01 00 +T 8A 03 00 00 +R 00 00 01 00 +T 8A 03 00 00 DD 6E 02 DD 66 03 5E CD +R 00 00 01 00 +T 92 03 00 00 00 00 00 00 00 07 00 87 04 00 00 +R 00 00 01 00 02 04 13 00 00 0B 01 00 +T 99 03 00 00 66 04 00 00 66 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 9D 03 00 00 A7 03 00 00 40 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A1 03 00 00 A7 03 00 00 EE 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A5 03 00 00 77 04 00 00 +R 00 00 01 00 00 04 01 00 +T A7 03 00 00 +R 00 00 01 00 +T A7 03 00 00 DD 6E 04 DD 66 05 E5 21 02 00 39 +R 00 00 01 00 +T B2 03 00 00 4D 44 C5 DD 5E 02 DD 56 03 21 +R 00 00 01 00 +T BC 03 00 00 1A 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T C7 03 00 00 66 68 01 29 00 09 4E 23 46 23 7E +R 00 00 01 00 +T D2 03 00 00 69 60 C1 CD 00 00 00 00 F1 7D B4 +R 00 00 01 00 02 08 00 00 +T DB 03 00 00 20 0E +R 00 00 01 00 +T DD 03 00 00 +R 00 00 01 00 +T DD 03 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T E5 03 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T EB 03 00 00 +R 00 00 01 00 +T EB 03 00 00 C3 87 04 00 00 +R 00 00 01 00 00 05 01 00 +T EE 03 00 00 +R 00 00 01 00 +T EE 03 00 00 DD 5E 02 DD 56 03 21 1A 00 DD 4E +R 00 00 01 00 +T F9 03 00 00 02 DD 46 03 09 7E 23 66 6F 01 +R 00 00 01 00 +T 03 04 00 00 1A 00 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 0E 04 00 00 00 00 00 00 DD 5E 02 DD 56 03 21 +R 00 00 01 00 02 04 00 00 +T 17 04 00 00 1A 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 22 04 00 00 66 6F 01 14 00 09 4E 23 46 23 7E +R 00 00 01 00 +T 2D 04 00 00 69 60 CD 00 00 00 00 DD 5E 02 DD +R 00 00 01 00 02 07 00 00 +T 36 04 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 3B 04 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 40 04 00 00 +R 00 00 01 00 +T 40 04 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 48 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 4F 04 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 57 04 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 5E 04 00 00 02 DD 66 03 36 02 18 21 +R 00 00 01 00 +T 66 04 00 00 +R 00 00 01 00 +T 66 04 00 00 DD 4E FD DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 70 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 75 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 77 04 00 00 +R 00 00 01 00 +T 77 04 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 7F 04 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 86 04 00 00 00 +R 00 00 01 00 +T 87 04 00 00 +R 00 00 01 00 +T 87 04 00 00 C3 E8 08 00 00 +R 00 00 01 00 00 05 01 00 +T 8A 04 00 00 +R 00 00 01 00 +T 8A 04 00 00 DD 6E 02 DD 66 03 5E CD +R 00 00 01 00 +T 92 04 00 00 00 00 00 00 00 07 00 87 05 00 00 +R 00 00 01 00 02 04 13 00 00 0B 01 00 +T 99 04 00 00 66 05 00 00 66 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 9D 04 00 00 A7 04 00 00 40 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A1 04 00 00 A7 04 00 00 EE 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T A5 04 00 00 77 05 00 00 +R 00 00 01 00 00 04 01 00 +T A7 04 00 00 +R 00 00 01 00 +T A7 04 00 00 DD 6E 04 DD 66 05 E5 21 02 00 39 +R 00 00 01 00 +T B2 04 00 00 4D 44 C5 DD 5E 02 DD 56 03 21 +R 00 00 01 00 +T BC 04 00 00 1A 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T C7 04 00 00 66 68 01 2C 00 09 4E 23 46 23 7E +R 00 00 01 00 +T D2 04 00 00 69 60 C1 CD 00 00 00 00 F1 7D B4 +R 00 00 01 00 02 08 00 00 +T DB 04 00 00 20 0E +R 00 00 01 00 +T DD 04 00 00 +R 00 00 01 00 +T DD 04 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T E5 04 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T EB 04 00 00 +R 00 00 01 00 +T EB 04 00 00 C3 87 05 00 00 +R 00 00 01 00 00 05 01 00 +T EE 04 00 00 +R 00 00 01 00 +T EE 04 00 00 DD 5E 02 DD 56 03 21 1A 00 DD 4E +R 00 00 01 00 +T F9 04 00 00 02 DD 46 03 09 7E 23 66 6F 01 +R 00 00 01 00 +T 03 05 00 00 1A 00 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 0E 05 00 00 00 00 00 00 DD 5E 02 DD 56 03 21 +R 00 00 01 00 02 04 00 00 +T 17 05 00 00 1A 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 22 05 00 00 66 6F 01 14 00 09 4E 23 46 23 7E +R 00 00 01 00 +T 2D 05 00 00 69 60 CD 00 00 00 00 DD 5E 02 DD +R 00 00 01 00 02 07 00 00 +T 36 05 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 3B 05 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 40 05 00 00 +R 00 00 01 00 +T 40 05 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 48 05 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 4F 05 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 57 05 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 5E 05 00 00 02 DD 66 03 36 02 18 21 +R 00 00 01 00 +T 66 05 00 00 +R 00 00 01 00 +T 66 05 00 00 DD 4E FD DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 70 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 75 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 77 05 00 00 +R 00 00 01 00 +T 77 05 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 7F 05 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 86 05 00 00 00 +R 00 00 01 00 +T 87 05 00 00 +R 00 00 01 00 +T 87 05 00 00 C3 E8 08 00 00 +R 00 00 01 00 00 05 01 00 +T 8A 05 00 00 +R 00 00 01 00 +T 8A 05 00 00 01 4A 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T 93 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T 99 05 00 00 00 00 00 00 DD 6E 02 DD 66 03 5E +R 00 00 01 00 02 04 00 00 +T A2 05 00 00 CD 00 00 00 00 00 07 00 +R 00 00 01 00 02 05 13 00 +T A8 05 00 00 38 06 00 00 25 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T AC 05 00 00 25 06 00 00 25 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B0 05 00 00 1D 06 00 00 1D 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B4 05 00 00 B8 05 00 00 25 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B8 05 00 00 +R 00 00 01 00 +T B8 05 00 00 DD 4E FD DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T C2 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T C7 05 00 00 00 00 00 00 DD 5E 02 DD 56 03 21 +R 00 00 01 00 02 04 00 00 +T D0 05 00 00 1A 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T DB 05 00 00 66 6F 01 1A 00 09 4E 23 46 23 7E +R 00 00 01 00 +T E6 05 00 00 69 60 CD 00 00 00 00 DD 5E 02 DD +R 00 00 01 00 02 07 00 00 +T EF 05 00 00 56 03 21 1A 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T FA 05 00 00 09 7E 23 66 6F 01 1D 00 09 4E 23 +R 00 00 01 00 +T 05 06 00 00 46 23 7E 69 60 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 00 00 +T 0E 06 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 16 06 00 00 00 00 00 00 CD 00 00 00 00 18 1B +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 1D 06 00 00 +R 00 00 01 00 +T 1D 06 00 00 DD 6E 02 DD 66 03 36 02 +R 00 00 01 00 +T 25 06 00 00 +R 00 00 01 00 +T 25 06 00 00 DD 4E FD DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 2F 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 34 06 00 00 00 00 00 00 18 00 +R 00 00 01 00 02 04 00 00 +T 38 06 00 00 +R 00 00 01 00 +T 38 06 00 00 C3 E8 08 00 00 +R 00 00 01 00 00 05 01 00 +T 3B 06 00 00 +R 00 00 01 00 +T 3B 06 00 00 DD 6E 02 DD 66 03 5E CD +R 00 00 01 00 +T 43 06 00 00 00 00 00 00 00 07 00 15 07 00 00 +R 00 00 01 00 02 04 13 00 00 0B 01 00 +T 4A 06 00 00 13 07 00 00 13 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 4E 06 00 00 13 07 00 00 0B 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 52 06 00 00 0B 07 00 00 AE 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 56 06 00 00 58 06 00 00 +R 00 00 01 00 00 04 01 00 +T 58 06 00 00 +R 00 00 01 00 +T 58 06 00 00 21 0A 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 63 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 69 06 00 00 00 00 00 00 01 65 00 00 00 DD 5E +R 00 00 01 00 02 04 00 00 00 09 02 00 +T 70 06 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T 77 06 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 7E 06 00 00 02 DD 56 03 21 1A 00 DD 4E 02 DD +R 00 00 01 00 +T 89 06 00 00 46 03 09 7E 23 66 6F 01 1D 00 09 +R 00 00 01 00 +T 94 06 00 00 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 9C 06 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 00 00 +T A5 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T AA 06 00 00 00 00 00 00 18 67 +R 00 00 01 00 02 04 00 00 +T AE 06 00 00 +R 00 00 01 00 +T AE 06 00 00 01 70 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T B7 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T BD 06 00 00 00 00 00 00 DD 5E 02 DD 56 03 21 +R 00 00 01 00 02 04 00 00 +T C6 06 00 00 1A 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T D1 06 00 00 66 6F 01 1A 00 09 4E 23 46 23 7E +R 00 00 01 00 +T DC 06 00 00 69 60 CD 00 00 00 00 DD 5E 02 DD +R 00 00 01 00 02 07 00 00 +T E5 06 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T EA 06 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 04 00 02 09 00 00 +T F1 06 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T F8 06 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T FF 06 00 00 20 08 +R 00 00 01 00 +T 01 07 00 00 +R 00 00 01 00 +T 01 07 00 00 DD 6E 02 DD 66 03 36 02 +R 00 00 01 00 +T 09 07 00 00 +R 00 00 01 00 +T 09 07 00 00 18 0A +R 00 00 01 00 +T 0B 07 00 00 +R 00 00 01 00 +T 0B 07 00 00 DD 6E 02 DD 66 03 36 02 +R 00 00 01 00 +T 13 07 00 00 +R 00 00 01 00 +T 13 07 00 00 18 00 +R 00 00 01 00 +T 15 07 00 00 +R 00 00 01 00 +T 15 07 00 00 C3 E8 08 00 00 +R 00 00 01 00 00 05 01 00 +T 18 07 00 00 +R 00 00 01 00 +T 18 07 00 00 21 1A 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 23 07 00 00 23 66 6F 5E 23 56 D5 21 08 00 09 +R 00 00 01 00 +T 2E 07 00 00 7E 23 66 6F 56 23 66 6A 23 23 5E +R 00 00 01 00 +T 39 07 00 00 23 56 D5 21 86 00 00 00 E5 2A +R 00 00 01 00 00 08 02 00 +T 41 07 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 2B 0A 0D 00 +T 47 07 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T 4E 07 00 00 E1 E1 59 50 21 1A 00 DD 4E 02 DD +R 00 00 01 00 +T 59 07 00 00 46 03 09 7E 23 66 6F 01 1D 00 09 +R 00 00 01 00 +T 64 07 00 00 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 6C 07 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 00 00 +T 75 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 7A 07 00 00 00 00 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 02 04 00 00 +T 83 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 88 07 00 00 00 00 00 00 C3 E8 08 00 00 +R 00 00 01 00 02 04 00 00 00 09 01 00 +T 8D 07 00 00 +R 00 00 01 00 +T 8D 07 00 00 21 1A 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 98 07 00 00 23 66 6F 5E 23 56 D5 21 08 00 09 +R 00 00 01 00 +T A3 07 00 00 7E 23 66 6F 46 23 66 68 23 23 4E +R 00 00 01 00 +T AE 07 00 00 23 46 C5 21 BD 00 00 00 E5 2A +R 00 00 01 00 00 08 02 00 +T B6 07 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 2B 0A 0D 00 +T BC 07 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T C3 07 00 00 E1 E1 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T CC 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T D1 07 00 00 00 00 00 00 C3 E8 08 00 00 +R 00 00 01 00 02 04 00 00 00 09 01 00 +T D6 07 00 00 +R 00 00 01 00 +T D6 07 00 00 DD 6E 02 DD 66 03 5E CD +R 00 00 01 00 +T DE 07 00 00 00 00 00 00 00 07 00 33 08 00 00 +R 00 00 01 00 02 04 13 00 00 0B 01 00 +T E5 07 00 00 12 08 00 00 12 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T E9 07 00 00 23 08 00 00 23 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T ED 07 00 00 23 08 00 00 F3 07 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T F1 07 00 00 23 08 00 00 +R 00 00 01 00 00 04 01 00 +T F3 07 00 00 +R 00 00 01 00 +T F3 07 00 00 DD 6E 04 DD 66 05 E5 DD 6E FD E5 +R 00 00 01 00 +T FE 07 00 00 0E 0A DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 07 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 0C 08 00 00 00 00 00 00 F1 F1 18 21 +R 00 00 01 00 02 04 00 00 +T 12 08 00 00 +R 00 00 01 00 +T 12 08 00 00 DD 4E FD DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 1C 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 21 08 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 23 08 00 00 +R 00 00 01 00 +T 23 08 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 2B 08 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 32 08 00 00 00 +R 00 00 01 00 +T 33 08 00 00 +R 00 00 01 00 +T 33 08 00 00 C3 E8 08 00 00 +R 00 00 01 00 00 05 01 00 +T 36 08 00 00 +R 00 00 01 00 +T 36 08 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 3E 08 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 45 08 00 00 E8 08 00 00 +R 00 00 01 00 00 04 01 00 +T 47 08 00 00 +R 00 00 01 00 +T 47 08 00 00 DD 4E FC 06 00 C5 21 1A 00 DD 4E +R 00 00 01 00 +T 52 08 00 00 02 DD 46 03 09 7E 23 66 6F 5E 23 +R 00 00 01 00 +T 5D 08 00 00 56 D5 21 08 00 09 7E 23 66 6F 56 +R 00 00 01 00 +T 68 08 00 00 23 66 6A 23 23 5E 23 56 D5 21 +R 00 00 01 00 +T 72 08 00 00 F8 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 0B 00 +T 79 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T 7F 08 00 00 00 00 00 00 E1 E1 E1 E1 E1 21 +R 00 00 01 00 02 04 00 00 +T 87 08 00 00 02 00 39 7E C6 04 77 30 02 23 34 +R 00 00 01 00 +T 92 08 00 00 +R 00 00 01 00 +T 92 08 00 00 DD 4E 04 DD 46 05 21 00 00 39 5D +R 00 00 01 00 +T 9D 08 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0F 00 02 0B 0F 00 +T A3 08 00 00 CD 00 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 02 05 00 00 +T AC 08 00 00 E5 DD 6E FD E5 0E 07 DD 5E 02 DD +R 00 00 01 00 +T B7 08 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T BC 08 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T C3 08 00 00 DD 6E 02 DD 66 03 7E FE 02 38 0E +R 00 00 01 00 +T CE 08 00 00 FE 06 30 0A +R 00 00 01 00 +T D2 08 00 00 +R 00 00 01 00 +T D2 08 00 00 DD 6E 02 DD 66 03 36 01 18 0A +R 00 00 01 00 +T DC 08 00 00 +R 00 00 01 00 +T DC 08 00 00 FE 02 38 04 FE 06 20 02 +R 00 00 01 00 +T E4 08 00 00 +R 00 00 01 00 +T E4 08 00 00 18 00 +R 00 00 01 00 +T E6 08 00 00 +R 00 00 01 00 +T E6 08 00 00 18 00 +R 00 00 01 00 +T E8 08 00 00 +R 00 00 01 00 +T E8 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 73 68 6F 72 74 20 63 6F 6E 66 69 +R 00 00 02 00 +T 0B 00 00 00 67 75 72 61 74 69 6F 6E 20 70 61 +R 00 00 02 00 +T 16 00 00 00 63 6B 65 74 00 +R 00 00 02 00 +T 1B 00 00 00 +R 00 00 02 00 +T 1B 00 00 00 25 73 20 50 50 50 2F 25 73 20 25 +R 00 00 02 00 +T 26 00 00 00 2D 38 73 3B 20 50 72 6F 63 65 73 +R 00 00 02 00 +T 31 00 00 00 73 69 6E 67 20 25 73 2C 20 69 64 +R 00 00 02 00 +T 3C 00 00 00 3A 20 25 64 2C 20 6C 65 6E 3A 20 +R 00 00 02 00 +T 47 00 00 00 25 64 00 +R 00 00 02 00 +T 4A 00 00 00 +R 00 00 02 00 +T 4A 00 00 00 50 65 65 72 20 72 65 71 75 65 73 +R 00 00 02 00 +T 55 00 00 00 74 65 64 20 54 65 72 6D 69 6E 61 +R 00 00 02 00 +T 60 00 00 00 74 69 6F 6E 00 +R 00 00 02 00 +T 65 00 00 00 +R 00 00 02 00 +T 65 00 00 00 54 65 72 6D 69 6E 61 74 65 64 00 +R 00 00 02 00 +T 70 00 00 00 +R 00 00 02 00 +T 70 00 00 00 54 65 72 6D 69 6E 61 74 65 64 20 +R 00 00 02 00 +T 7B 00 00 00 75 6E 65 78 70 65 63 74 6C 79 00 +R 00 00 02 00 +T 86 00 00 00 +R 00 00 02 00 +T 86 00 00 00 25 73 20 50 50 50 2F 25 73 20 43 +R 00 00 02 00 +T 91 00 00 00 6F 64 65 20 52 65 6A 65 63 74 3B +R 00 00 02 00 +T 9C 00 00 00 20 69 6E 64 69 63 61 74 65 73 20 +R 00 00 02 00 +T A7 00 00 00 66 61 75 6C 74 79 20 69 6D 70 6C +R 00 00 02 00 +T B2 00 00 00 65 6D 65 6E 74 61 74 69 6F 6E 00 +R 00 00 02 00 +T BD 00 00 00 +R 00 00 02 00 +T BD 00 00 00 25 73 20 50 50 50 2F 25 73 20 50 +R 00 00 02 00 +T C8 00 00 00 72 6F 74 6F 63 6F 6C 20 52 65 6A +R 00 00 02 00 +T D3 00 00 00 65 63 74 3B 20 70 6C 65 61 73 65 +R 00 00 02 00 +T DE 00 00 00 20 64 6F 20 6E 6F 74 20 75 73 65 +R 00 00 02 00 +T E9 00 00 00 20 74 68 69 73 20 70 72 6F 74 6F +R 00 00 02 00 +T F4 00 00 00 63 6F 6C 00 +R 00 00 02 00 +T F8 00 00 00 +R 00 00 02 00 +T F8 00 00 00 25 73 20 50 50 50 2F 25 73 20 55 +R 00 00 02 00 +T 03 01 00 00 6E 6B 6E 6F 77 6E 20 70 61 63 6B +R 00 00 02 00 +T 0E 01 00 00 65 74 20 74 79 70 65 3A 20 25 64 +R 00 00 02 00 +T 19 01 00 00 3B 20 53 65 6E 64 69 6E 67 20 43 +R 00 00 02 00 +T 24 01 00 00 6F 64 65 20 52 65 6A 65 63 74 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_reset.rel b/src/nos/lib/ppp_lib/fsm_reset.rel new file mode 100644 index 00000000..eb4e44aa --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_reset.rel @@ -0,0 +1,62 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _PPPiface Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 77 flags 0 +S _fsm_reset Def00000000 +A CSTR size C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3A 00 00 00 00 E6 +R 00 00 01 00 02 05 03 00 02 0A 07 00 +T 07 00 00 00 80 28 12 +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 11 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 17 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 DD 6E 02 DD 66 03 23 23 7E E6 C0 +R 00 00 01 00 +T 27 00 00 00 28 04 3E 01 18 01 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 AF +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 6E 02 DD 66 03 77 21 04 00 DD +R 00 00 01 00 +T 39 00 00 00 4E 02 DD 46 03 09 56 69 60 23 23 +R 00 00 01 00 +T 44 00 00 00 23 72 21 07 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 4F 00 00 00 09 56 21 06 00 09 72 59 50 21 +R 00 00 01 00 +T 59 00 00 00 1A 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T 64 00 00 00 66 68 01 11 00 09 4E 23 46 23 7E +R 00 00 01 00 +T 6F 00 00 00 69 60 CD 00 00 00 00 C3 +R 00 00 01 00 02 07 00 00 +T 75 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 66 73 6D 5F 72 65 73 65 74 28 29 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_send.rel b/src/nos/lib/ppp_lib/fsm_send.rel new file mode 100644 index 00000000..368bd15d --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_send.rel @@ -0,0 +1,200 @@ +XL4 +H 3 areas 11 global symbols +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S _htoncnf Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _fsmCodes Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fsmStates Ref00000000 +S _put32 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 222 flags 0 +S _fsm_send Def00000000 +A CSTR size 55 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF 21 08 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 5E 02 DD 56 03 19 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 F4 DD 74 F5 46 23 66 68 DD 75 +R 00 00 01 00 +T 1F 00 00 00 F6 DD 74 F7 DD 71 F8 59 CD +R 00 00 01 00 +T 28 00 00 00 00 00 00 00 01 0B 00 6F 00 00 00 +R 00 00 01 00 02 04 0B 00 00 0B 01 00 +T 2F 00 00 00 45 00 00 00 67 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 33 00 00 00 67 00 00 00 67 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 37 00 00 00 45 00 00 00 67 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 3B 00 00 00 67 00 00 00 57 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 3F 00 00 00 45 00 00 00 67 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 43 00 00 00 57 00 00 00 +R 00 00 01 00 00 04 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 6E F4 DD 66 F5 23 23 23 46 DD +R 00 00 01 00 +T 50 00 00 00 6E 02 DD 66 03 23 70 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 6E F4 DD 66 F5 23 23 23 46 34 +R 00 00 01 00 +T 62 00 00 00 DD 70 F9 18 59 +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 DD 46 0A DD 70 F9 18 51 +R 00 00 01 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 DD 4E 04 06 00 C5 DD 6E 02 DD 66 +R 00 00 01 00 +T 7A 00 00 00 03 6E 26 00 29 01 00 00 00 00 09 +R 00 00 01 00 02 0A 0D 00 +T 83 00 00 00 4E 23 46 C5 21 1A 00 DD 4E 02 DD +R 00 00 01 00 +T 8E 00 00 00 46 03 09 7E 23 66 6F 4E 23 46 C5 +R 00 00 01 00 +T 99 00 00 00 DD 6E F6 DD 66 F7 23 23 4E 23 46 +R 00 00 01 00 +T A4 00 00 00 C5 21 00 00 00 00 E5 2A +R 00 00 01 00 00 06 02 00 +T AA 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 2B 0A 07 00 +T B0 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T B6 00 00 00 0C 00 39 F9 21 FF FF C3 +R 00 00 01 00 +T BE 00 00 00 1F 02 00 00 +R 00 00 01 00 00 04 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 DD 7E 04 FE 09 38 5C FE 0C 30 58 +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 21 1C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T D6 00 00 00 23 66 68 DD 75 FE DD 74 FF 11 +R 00 00 01 00 +T E0 00 00 00 04 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T E5 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T EC 00 00 00 FC DD 74 FD 21 22 00 DD 4E FE DD +R 00 00 01 00 +T F7 00 00 00 46 FF 09 4E 23 46 23 5E 23 56 D5 +R 00 00 01 00 +T 02 01 00 00 C5 21 0A 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T 0D 01 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T 13 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 1A 01 00 00 DD 6E 0C DD 66 0D 71 23 70 +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 DD 6E 0C DD 66 0D 5E 23 56 3E +R 00 00 01 00 +T 2D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 32 01 00 00 00 00 00 00 01 04 00 09 DD 75 FA +R 00 00 01 00 02 04 01 00 +T 3B 01 00 00 DD 74 FB DD 4E 0C DD 46 0D 21 +R 00 00 01 00 +T 45 01 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 4D 01 00 00 00 00 00 00 CD 00 00 00 00 ED 4B +R 00 00 01 00 02 04 08 00 02 09 01 00 +T 54 01 00 00 00 00 00 00 21 01 00 CD +R 00 00 01 00 02 04 0F 00 +T 5A 01 00 00 00 00 00 00 30 60 +R 00 00 01 00 02 04 09 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 DD 6E FA DD 66 FB E5 DD 4E F9 06 +R 00 00 01 00 +T 69 01 00 00 00 C5 DD 6E 04 26 00 29 01 +R 00 00 01 00 +T 72 01 00 00 00 00 00 00 09 4E 23 46 C5 DD 6E +R 00 00 01 00 02 04 0A 00 +T 7B 01 00 00 02 DD 66 03 6E 26 00 29 01 +R 00 00 01 00 +T 84 01 00 00 00 00 00 00 09 4E 23 46 C5 21 +R 00 00 01 00 02 04 0D 00 +T 8C 01 00 00 1A 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 97 01 00 00 66 6F 4E 23 46 C5 DD 6E F6 DD 66 +R 00 00 01 00 +T A2 01 00 00 F7 23 23 4E 23 46 C5 21 +R 00 00 01 00 +T AA 01 00 00 29 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 05 00 +T B1 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T B7 01 00 00 00 00 00 00 21 10 00 39 F9 +R 00 00 01 00 02 04 01 00 +T BE 01 00 00 +R 00 00 01 00 +T BE 01 00 00 21 1A 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T C9 01 00 00 23 66 6A 11 06 00 19 6E 26 00 29 +R 00 00 01 00 +T D4 01 00 00 DD 5E F4 DD 56 F5 19 11 6E 00 19 +R 00 00 01 00 +T DF 01 00 00 34 23 20 01 34 +R 00 00 01 00 +T E4 01 00 00 +R 00 00 01 00 +T E4 01 00 00 DD 6E 0C DD 66 0D E5 21 1A 00 09 +R 00 00 01 00 +T EF 01 00 00 46 23 66 68 23 23 4E 23 46 C5 21 +R 00 00 01 00 +T FA 01 00 00 00 00 E5 01 00 00 C5 DD 5E F6 DD +R 00 00 01 00 +T 05 02 00 00 56 F7 21 42 00 DD 4E F6 DD 46 F7 +R 00 00 01 00 +T 10 02 00 00 09 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 1A 02 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 1F 02 00 00 +R 00 00 01 00 +T 1F 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 73 20 50 50 50 2F 25 73 20 25 +R 00 00 02 00 +T 0B 00 00 00 2D 38 73 3B 20 53 65 6E 64 20 77 +R 00 00 02 00 +T 16 00 00 00 69 74 68 20 62 6F 67 75 73 20 63 +R 00 00 02 00 +T 21 00 00 00 6F 64 65 3A 20 25 64 00 +R 00 00 02 00 +T 29 00 00 00 +R 00 00 02 00 +T 29 00 00 00 25 73 20 50 50 50 2F 25 73 20 25 +R 00 00 02 00 +T 34 00 00 00 2D 38 73 3B 20 53 65 6E 64 69 6E +R 00 00 02 00 +T 3F 00 00 00 67 20 25 73 2C 20 69 64 3A 20 25 +R 00 00 02 00 +T 4A 00 00 00 64 2C 20 6C 65 6E 3A 20 25 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_sendreq.rel b/src/nos/lib/ppp_lib/fsm_sendreq.rel new file mode 100644 index 00000000..db638cfa --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_sendreq.rel @@ -0,0 +1,72 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_timer Ref00000000 +S _fsm_send Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8D flags 0 +S _fsm_sendreq Def00000000 +A CSTR size E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 3A +R 00 00 01 00 02 05 06 00 +T 06 00 00 00 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 04 09 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 13 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 19 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 6E 02 DD 66 03 23 23 23 7E B7 +R 00 00 01 00 +T 29 00 00 00 20 05 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 FF FF 18 5A +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 6E 02 DD 66 03 23 23 23 35 DD +R 00 00 01 00 +T 3B 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 43 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 4A 00 00 00 02 DD 56 03 21 1A 00 DD 4E 02 DD +R 00 00 01 00 +T 55 00 00 00 46 03 09 7E 23 66 6F 01 20 00 09 +R 00 00 01 00 +T 60 00 00 00 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 68 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 21 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 00 00 39 E5 0E 00 C5 0E 01 DD 5E +R 00 00 01 00 +T 7C 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 83 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 8A 00 00 00 +R 00 00 01 00 +T 8A 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 66 73 6D 5F 73 65 6E 64 72 65 71 +R 00 00 02 00 +T 0B 00 00 00 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_sendtermack.rel b/src/nos/lib/ppp_lib/fsm_sendtermack.rel new file mode 100644 index 00000000..dcf9421f --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_sendtermack.rel @@ -0,0 +1,45 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_send Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _PPPiface Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 39 flags 0 +S _fsm_sendtermack Def00000000 +A CSTR size 12 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3A 00 00 00 00 E6 +R 00 00 01 00 02 05 04 00 02 0A 08 00 +T 07 00 00 00 80 28 12 +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 11 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 17 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 00 00 E5 DD 6E 04 E5 0E 06 DD +R 00 00 01 00 +T 27 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 2F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 36 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 66 73 6D 5F 73 65 6E 64 74 65 72 +R 00 00 02 00 +T 0B 00 00 00 6D 61 63 6B 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_sendtermreq.rel b/src/nos/lib/ppp_lib/fsm_sendtermreq.rel new file mode 100644 index 00000000..4d127685 --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_sendtermreq.rel @@ -0,0 +1,64 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_timer Ref00000000 +S _fsm_send Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _PPPiface Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 62 flags 0 +S _fsm_sendtermreq Def00000000 +A CSTR size 12 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3A 00 00 00 00 E6 +R 00 00 01 00 02 05 05 00 02 0A 09 00 +T 07 00 00 00 80 28 12 +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 11 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 17 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 DD 6E 02 DD 66 03 23 23 23 7E B7 +R 00 00 01 00 +T 27 00 00 00 20 05 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 FF FF 18 31 +R 00 00 01 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD 6E 02 DD 66 03 23 23 23 35 DD +R 00 00 01 00 +T 39 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 41 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 47 00 00 00 00 00 E5 0E 00 C5 0E 05 DD 5E 02 +R 00 00 01 00 +T 52 00 00 00 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 58 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 66 73 6D 5F 73 65 6E 64 74 65 72 +R 00 00 02 00 +T 0B 00 00 00 6D 72 65 71 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_start.rel b/src/nos/lib/ppp_lib/fsm_start.rel new file mode 100644 index 00000000..2cba1de6 --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_start.rel @@ -0,0 +1,96 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_reset Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fsm_sendreq Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _fsm_log Ref00000000 +S _PPPiface Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C0 flags 0 +S _fsm_start Def00000000 +A CSTR size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 1C 00 19 7E 23 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 20 03 +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 C3 BD 00 00 00 +R 00 00 01 00 00 05 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 1A 00 00 00 23 66 6A 11 05 00 19 5E 16 00 ED +R 00 00 01 00 +T 25 00 00 00 53 00 00 00 00 21 08 00 09 7E 23 +R 00 00 01 00 02 05 09 00 +T 2E 00 00 00 66 6F 56 23 66 6A 22 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 37 00 00 00 01 00 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T 40 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 46 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 00 00 +T 4F 00 00 00 23 7E E6 C0 20 02 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 18 66 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 DD 6E 02 DD 66 03 7E FE 02 38 04 +R 00 00 01 00 +T 62 00 00 00 FE 06 20 55 +R 00 00 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 DD 5E 02 DD 56 03 21 1A 00 DD 4E +R 00 00 01 00 +T 71 00 00 00 02 DD 46 03 09 7E 23 66 6F 01 +R 00 00 01 00 +T 7B 00 00 00 14 00 09 4E 23 46 23 7E 69 60 CD +R 00 00 01 00 +T 86 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 00 00 +T 8F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 94 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 00 00 +T 9D 00 00 00 23 7E E6 80 28 16 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T AB 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T B2 00 00 00 6E 02 DD 66 03 36 02 +R 00 00 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 18 02 +R 00 00 01 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 18 00 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 53 74 61 72 74 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_timeout.rel b/src/nos/lib/ppp_lib/fsm_timeout.rel new file mode 100644 index 00000000..0fa69fd4 --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_timeout.rel @@ -0,0 +1,142 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_reset Ref00000000 +S _fsm_sendtermreq Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fsm_sendreq Ref00000000 +S .__.ABS. Def00000000 +S _fsm_log Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 112 flags 0 +S _fsm_timeout Def00000000 +A CSTR size 38 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 66 03 DD 75 FE DD 74 FF 01 08 00 +R 00 00 01 00 +T 14 00 00 00 09 46 23 66 68 01 05 00 09 4E 06 +R 00 00 01 00 +T 1F 00 00 00 00 ED 43 00 00 00 00 21 08 00 DD +R 00 00 01 00 02 07 0B 00 +T 28 00 00 00 4E FE DD 46 FF 09 7E 23 66 6F 56 +R 00 00 01 00 +T 33 00 00 00 23 66 6A 22 00 00 00 00 01 +R 00 00 01 00 02 08 07 00 +T 3A 00 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 00 04 02 00 +T 43 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 48 00 00 00 00 00 00 00 DD 6E FE DD 66 FF 5E +R 00 00 01 00 02 04 00 00 +T 51 00 00 00 CD 00 00 00 00 00 07 00 +R 00 00 01 00 02 05 09 00 +T 57 00 00 00 0F 01 00 00 0D 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 5B 00 00 00 0D 01 00 00 67 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 5F 00 00 00 67 00 00 00 67 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 63 00 00 00 0D 01 00 00 AD 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 DD 6E FE DD 66 FF 23 23 23 7E B7 +R 00 00 01 00 +T 72 00 00 00 28 18 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 7C 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 83 00 00 00 6E FE DD 66 FF 36 02 18 1F +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 01 08 00 00 00 DD 5E FE DD 56 FF +R 00 00 01 00 00 05 02 00 +T 95 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 9B 00 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 02 04 00 00 +T A4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T A9 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 18 62 +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 DD 6E FE DD 66 FF 23 23 23 7E B7 +R 00 00 01 00 +T B8 00 00 00 28 10 +R 00 00 01 00 +T BA 00 00 00 +R 00 00 01 00 +T BA 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T C2 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T C9 00 00 00 41 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 01 1F 00 00 00 DD 5E FE DD 56 FF +R 00 00 01 00 00 05 02 00 +T D3 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T D9 00 00 00 00 00 00 00 DD 5E FE DD 56 FF 21 +R 00 00 01 00 02 04 00 00 +T E2 00 00 00 1A 00 DD 4E FE DD 46 FF 09 7E 23 +R 00 00 01 00 +T ED 00 00 00 66 6F 01 1D 00 09 4E 23 46 23 7E +R 00 00 01 00 +T F8 00 00 00 69 60 CD 00 00 00 00 DD 5E FE DD +R 00 00 01 00 02 07 00 00 +T 01 01 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 06 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 0B 01 00 00 +R 00 00 01 00 +T 0B 01 00 00 18 02 +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 18 00 +R 00 00 01 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 54 69 6D 65 6F 75 74 00 +R 00 00 02 00 +T 08 00 00 00 +R 00 00 02 00 +T 08 00 00 00 52 65 71 75 65 73 74 20 72 65 74 +R 00 00 02 00 +T 13 00 00 00 72 79 20 65 78 63 65 65 64 65 64 +R 00 00 02 00 +T 1E 00 00 00 00 +R 00 00 02 00 +T 1F 00 00 00 +R 00 00 02 00 +T 1F 00 00 00 54 65 72 6D 69 6E 61 74 65 20 72 +R 00 00 02 00 +T 2A 00 00 00 65 74 72 79 20 65 78 63 65 65 64 +R 00 00 02 00 +T 35 00 00 00 65 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/fsm_timer.rel b/src/nos/lib/ppp_lib/fsm_timer.rel new file mode 100644 index 00000000..3bbb1314 --- /dev/null +++ b/src/nos/lib/ppp_lib/fsm_timer.rel @@ -0,0 +1,43 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _PPPiface Ref00000000 +S _start_timer Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 32 flags 0 +S _fsm_timer Def00000000 +A CSTR size C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3A 00 00 00 00 E6 +R 00 00 01 00 02 05 03 00 02 0A 08 00 +T 07 00 00 00 80 28 12 +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 11 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 17 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 27 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 2D 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 66 73 6D 5F 74 69 6D 65 72 28 29 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/htoncnf.rel b/src/nos/lib/ppp_lib/htoncnf.rel new file mode 100644 index 00000000..ee1fe4bb --- /dev/null +++ b/src/nos/lib/ppp_lib/htoncnf.rel @@ -0,0 +1,42 @@ +XL4 +H 2 areas 8 global symbols +S _put16 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pushdown Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7C flags 0 +S _htoncnf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 04 00 E5 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 18 00 00 00 00 00 00 00 E1 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 01 00 +T 21 00 00 00 46 23 66 68 01 0A 00 09 46 23 66 +R 00 00 01 00 +T 2C 00 00 00 68 DD 75 FE DD 74 FF DD 6E 02 DD +R 00 00 01 00 +T 37 00 00 00 66 03 46 DD 6E FE DD 66 FF 23 DD +R 00 00 01 00 +T 42 00 00 00 75 FE DD 74 FF 2B 70 DD 6E 02 DD +R 00 00 01 00 +T 4D 00 00 00 66 03 23 46 DD 6E FE DD 66 FF 23 +R 00 00 01 00 +T 58 00 00 00 DD 75 FE DD 74 FF 2B 70 DD 6E 02 +R 00 00 01 00 +T 63 00 00 00 DD 66 03 23 23 4E 23 46 DD 5E FE +R 00 00 01 00 +T 6E 00 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T 74 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 7A 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/ppp_lib/htonppp.rel b/src/nos/lib/ppp_lib/htonppp.rel new file mode 100644 index 00000000..2564daf1 --- /dev/null +++ b/src/nos/lib/ppp_lib/htonppp.rel @@ -0,0 +1,42 @@ +XL4 +H 2 areas 8 global symbols +S _put16 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pushdown Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 82 flags 0 +S _htonppp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 04 00 E5 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 18 00 00 00 00 00 00 00 E1 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 01 00 +T 21 00 00 00 46 23 66 68 01 0A 00 09 46 23 66 +R 00 00 01 00 +T 2C 00 00 00 68 DD 75 FE DD 74 FF DD 6E 02 DD +R 00 00 01 00 +T 37 00 00 00 66 03 46 DD 6E FE DD 66 FF 23 DD +R 00 00 01 00 +T 42 00 00 00 75 FE DD 74 FF 2B 70 DD 6E 02 DD +R 00 00 01 00 +T 4D 00 00 00 66 03 23 46 DD 6E FE DD 66 FF 23 +R 00 00 01 00 +T 58 00 00 00 DD 75 FE DD 74 FF 2B 70 DD 6E 02 +R 00 00 01 00 +T 63 00 00 00 DD 66 03 23 23 4E 23 46 DD 5E FE +R 00 00 01 00 +T 6E 00 00 00 DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T 74 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 7B 00 00 00 FE DD 74 FF C3 00 00 00 00 +R 00 00 01 00 02 09 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_ack.rel b/src/nos/lib/ppp_lib/ipcp_ack.rel new file mode 100644 index 00000000..b399ffd3 --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_ack.rel @@ -0,0 +1,208 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S _ipcp_makereq Ref00000000 +S _free_p Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 171 flags 0 +S _ipcp_ack Def00000000 +A CSTR size 67 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 FA +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 77 FB 3A 00 00 00 00 E6 80 28 +R 00 00 01 00 02 08 0B 00 +T 12 00 00 00 12 +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 1A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 20 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E 02 DD 66 03 23 E5 DD 6E 04 +R 00 00 01 00 +T 30 00 00 00 DD 66 05 23 7E E1 BE 28 2D +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0B 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 0B 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 47 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 4D 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 5A 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T 61 00 00 00 FF FF C3 6E 01 00 00 +R 00 00 01 00 00 07 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 6E 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 75 00 00 00 75 F8 DD 74 F9 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 80 00 00 00 03 03 0A 6F 03 0A 67 E5 DD 5E F8 +R 00 00 01 00 +T 8B 00 00 00 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T 91 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 98 00 00 00 E1 A7 ED 42 28 23 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0B 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 21 1E 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T AC 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T B2 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 DD 36 FA 01 DD 36 FB 00 18 68 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T C9 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T D0 00 00 00 75 FC DD 74 FD 7D A4 3C 28 4F +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T E2 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T E9 00 00 00 75 FE DD 74 FF 7D A4 3C 28 11 DD +R 00 00 01 00 +T F4 00 00 00 6E FC DD 66 FD DD 4E FE DD 46 FF +R 00 00 01 00 +T FF 00 00 00 A7 ED 42 28 23 +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0B 00 +T 0B 01 00 00 +R 00 00 01 00 +T 0B 01 00 00 21 3F 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 12 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 18 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 DD 36 FA 01 DD 36 FB 00 18 02 +R 00 00 01 00 +T 27 01 00 00 +R 00 00 01 00 +T 27 01 00 00 18 98 +R 00 00 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 31 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T 38 01 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 40 01 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 47 01 00 00 FA DD B6 FB 28 05 +R 00 00 01 00 +T 4D 01 00 00 +R 00 00 01 00 +T 4D 01 00 00 21 FF FF 18 1C +R 00 00 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0B 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 21 57 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 60 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 66 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 6B 01 00 00 +R 00 00 01 00 +T 6B 01 00 00 21 00 00 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 70 63 70 5F 61 63 6B 28 29 00 +R 00 00 02 00 +T 0B 00 00 00 +R 00 00 02 00 +T 0B 00 00 00 49 50 43 50 20 41 43 4B 3A 20 77 +R 00 00 02 00 +T 16 00 00 00 72 6F 6E 67 20 49 44 00 +R 00 00 02 00 +T 1E 00 00 00 +R 00 00 02 00 +T 1E 00 00 00 49 50 43 50 20 41 43 4B 3A 20 62 +R 00 00 02 00 +T 29 00 00 00 75 66 66 65 72 20 6C 65 6E 67 74 +R 00 00 02 00 +T 34 00 00 00 68 20 6D 69 73 6D 61 74 63 68 00 +R 00 00 02 00 +T 3F 00 00 00 +R 00 00 02 00 +T 3F 00 00 00 49 50 43 50 20 41 43 4B 3A 20 64 +R 00 00 02 00 +T 4A 00 00 00 61 74 61 20 6D 69 73 6D 61 74 63 +R 00 00 02 00 +T 55 00 00 00 68 00 +R 00 00 02 00 +T 57 00 00 00 +R 00 00 02 00 +T 57 00 00 00 49 50 43 50 20 41 43 4B 3A 20 76 +R 00 00 02 00 +T 62 00 00 00 61 6C 69 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_addr_idle.rel b/src/nos/lib/ppp_lib/ipcp_addr_idle.rel new file mode 100644 index 00000000..27009826 --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_addr_idle.rel @@ -0,0 +1,50 @@ +XL4 +H 2 areas 6 global symbols +S _Ifaces Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 68 flags 0 +S _ipcp_addr_idle Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 02 00 +T 06 00 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 DD 7E FE DD B6 FF 28 43 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 21 00 00 00 23 46 23 5E 23 56 69 60 DD 4E 02 +R 00 00 01 00 +T 2C 00 00 00 DD 46 03 A7 ED 42 20 13 EB DD 4E +R 00 00 01 00 +T 37 00 00 00 04 DD 46 05 ED 42 20 08 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 01 00 00 21 00 00 18 1E +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T 52 00 00 00 75 FE DD 74 FF 18 B5 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 DD 4E 04 DD 46 05 DD 6E 02 DD 66 +R 00 00 01 00 +T 64 00 00 00 03 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/ppp_lib/ipcp_check.rel b/src/nos/lib/ppp_lib/ipcp_check.rel new file mode 100644 index 00000000..0530478d --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_check.rel @@ -0,0 +1,516 @@ +XL4 +H 3 areas F global symbols +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pull32 Ref00000000 +S _pull16 Ref00000000 +S ?S_LSH_L02 Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 555 flags 0 +S _ipcp_check Def00000000 +A CSTR size 97 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 0C DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 66 0D 23 5E 16 00 1B 1B DD 73 FA +R 00 00 01 00 +T 14 00 00 00 DD 72 FB DD 36 FC 02 DD 36 FD 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E 0C DD 66 0D 7E FE 01 C2 +R 00 00 01 00 +T 29 00 00 00 E3 02 00 00 +R 00 00 01 00 00 04 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 33 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T 3A 00 00 00 21 13 00 DD 5E 0A DD 56 0B 19 D1 +R 00 00 01 00 +T 45 00 00 00 73 23 72 23 71 23 70 DD 5E 02 DD +R 00 00 01 00 +T 50 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 55 00 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 5C 00 00 00 17 00 DD 5E 0A DD 56 0B 19 D1 73 +R 00 00 01 00 +T 67 00 00 00 23 72 23 71 23 70 21 00 00 39 7E +R 00 00 01 00 +T 72 00 00 00 D6 08 77 23 7E DE 00 77 3A +R 00 00 01 00 +T 7B 00 00 00 00 00 00 00 E6 08 28 5A +R 00 00 01 00 02 04 0D 00 +T 81 00 00 00 +R 00 00 01 00 +T 81 00 00 00 21 13 00 DD 4E 0A DD 46 0B 09 5E +R 00 00 01 00 +T 8C 00 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 94 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 9B 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 07 00 +T A2 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T A8 00 00 00 CD 00 00 00 00 E1 E1 E1 21 17 00 +R 00 00 01 00 02 05 01 00 +T B1 00 00 00 DD 4E 0A DD 46 0B 09 5E 23 56 23 +R 00 00 01 00 +T BC 00 00 00 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T C2 00 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T C9 00 00 00 23 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 07 00 +T D0 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T D6 00 00 00 00 00 00 00 E1 E1 E1 +R 00 00 01 00 02 04 01 00 +T DB 00 00 00 +R 00 00 01 00 +T DB 00 00 00 DD 7E 0E DD B6 0F 20 7D +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 21 24 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T EE 00 00 00 23 B6 23 B6 23 B6 28 2A +R 00 00 01 00 +T F6 00 00 00 +R 00 00 01 00 +T F6 00 00 00 21 24 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 01 01 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T 0B 01 00 00 17 00 DD 4E 04 DD 46 05 09 C1 D5 +R 00 00 01 00 +T 16 01 00 00 59 50 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 21 04 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 2B 01 00 00 23 B6 23 B6 23 B6 28 2A +R 00 00 01 00 +T 33 01 00 00 +R 00 00 01 00 +T 33 01 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 3E 01 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T 48 01 00 00 13 00 DD 4E 04 DD 46 05 09 C1 D5 +R 00 00 01 00 +T 53 01 00 00 59 50 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 C3 CA 04 00 00 +R 00 00 01 00 00 05 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 21 24 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 6B 01 00 00 23 56 23 4E 23 46 C5 D5 21 33 00 +R 00 00 01 00 +T 76 01 00 00 DD 4E 04 DD 46 05 09 4E 23 46 23 +R 00 00 01 00 +T 81 01 00 00 5E 23 56 69 60 C1 A7 ED 42 C1 20 +R 00 00 01 00 +T 8C 01 00 00 22 EB ED 42 20 1D +R 00 00 01 00 +T 92 01 00 00 +R 00 00 01 00 +T 92 01 00 00 21 24 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 9D 01 00 00 23 B6 23 B6 23 B6 20 08 +R 00 00 01 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 DD 36 FC 04 DD 36 FD 00 +R 00 00 01 00 +T AD 01 00 00 +R 00 00 01 00 +T AD 01 00 00 18 71 +R 00 00 01 00 +T AF 01 00 00 +R 00 00 01 00 +T AF 01 00 00 21 24 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T BA 01 00 00 23 B6 23 B6 23 B6 20 2C +R 00 00 01 00 +T C2 01 00 00 +R 00 00 01 00 +T C2 01 00 00 21 33 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T CD 01 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T D7 01 00 00 17 00 DD 4E 04 DD 46 05 09 C1 D5 +R 00 00 01 00 +T E2 01 00 00 59 50 C1 73 23 72 23 71 23 70 18 +R 00 00 01 00 +T ED 01 00 00 32 +R 00 00 01 00 +T EE 01 00 00 +R 00 00 01 00 +T EE 01 00 00 21 24 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T F9 01 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T 03 02 00 00 33 00 DD 4E 04 DD 46 05 09 C1 D5 +R 00 00 01 00 +T 0E 02 00 00 59 50 C1 73 23 72 23 71 23 70 DD +R 00 00 01 00 +T 19 02 00 00 36 FC 03 DD 36 FD 00 +R 00 00 01 00 +T 20 02 00 00 +R 00 00 01 00 +T 20 02 00 00 +R 00 00 01 00 +T 20 02 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 2B 02 00 00 23 56 23 4E 23 46 C5 D5 21 37 00 +R 00 00 01 00 +T 36 02 00 00 DD 4E 04 DD 46 05 09 4E 23 46 23 +R 00 00 01 00 +T 41 02 00 00 5E 23 56 69 60 C1 A7 ED 42 C1 20 +R 00 00 01 00 +T 4C 02 00 00 22 EB ED 42 20 1D +R 00 00 01 00 +T 52 02 00 00 +R 00 00 01 00 +T 52 02 00 00 21 04 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 5D 02 00 00 23 B6 23 B6 23 B6 20 08 +R 00 00 01 00 +T 65 02 00 00 +R 00 00 01 00 +T 65 02 00 00 DD 36 FC 04 DD 36 FD 00 +R 00 00 01 00 +T 6D 02 00 00 +R 00 00 01 00 +T 6D 02 00 00 18 71 +R 00 00 01 00 +T 6F 02 00 00 +R 00 00 01 00 +T 6F 02 00 00 21 04 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 7A 02 00 00 23 B6 23 B6 23 B6 20 2C +R 00 00 01 00 +T 82 02 00 00 +R 00 00 01 00 +T 82 02 00 00 21 37 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 8D 02 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T 97 02 00 00 13 00 DD 4E 04 DD 46 05 09 C1 D5 +R 00 00 01 00 +T A2 02 00 00 59 50 C1 73 23 72 23 71 23 70 18 +R 00 00 01 00 +T AD 02 00 00 32 +R 00 00 01 00 +T AE 02 00 00 +R 00 00 01 00 +T AE 02 00 00 DD 36 FC 03 DD 36 FD 00 21 04 00 +R 00 00 01 00 +T B9 02 00 00 DD 4E 04 DD 46 05 09 4E 23 46 23 +R 00 00 01 00 +T C4 02 00 00 5E 23 56 69 60 E5 21 37 00 DD 4E +R 00 00 01 00 +T CF 02 00 00 04 DD 46 05 09 C1 D5 59 50 C1 73 +R 00 00 01 00 +T DA 02 00 00 23 72 23 71 23 70 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 C3 CA 04 00 00 +R 00 00 01 00 00 05 01 00 +T E3 02 00 00 +R 00 00 01 00 +T E3 02 00 00 FE 02 C2 C0 04 00 00 21 1B 00 DD +R 00 00 01 00 00 07 01 00 +T EC 02 00 00 4E 0A DD 46 0B 09 E5 DD 5E 02 DD +R 00 00 01 00 +T F7 02 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T FC 02 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 03 03 00 00 73 23 72 21 00 00 39 7E D6 02 77 +R 00 00 01 00 +T 0E 03 00 00 23 7E DE 00 77 3A 00 00 00 00 E6 +R 00 00 01 00 02 0A 0D 00 +T 17 03 00 00 08 28 21 +R 00 00 01 00 +T 1A 03 00 00 +R 00 00 01 00 +T 1A 03 00 00 21 1B 00 DD 4E 0A DD 46 0B 09 4E +R 00 00 01 00 +T 25 03 00 00 23 46 C5 21 4A 00 00 00 E5 2A +R 00 00 01 00 00 08 02 00 +T 2D 03 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 2B 0A 09 00 +T 33 03 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 3A 03 00 00 E1 +R 00 00 01 00 +T 3B 03 00 00 +R 00 00 01 00 +T 3B 03 00 00 21 1B 00 DD 4E 0A DD 46 0B 09 4E +R 00 00 01 00 +T 46 03 00 00 23 46 3E 2D A9 B0 C2 57 04 00 00 +R 00 00 01 00 00 0B 01 00 +T 4F 03 00 00 +R 00 00 01 00 +T 4F 03 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 57 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0B 00 02 0A 01 00 +T 5E 03 00 00 75 FE DD 74 FF 7D A4 3C 20 06 +R 00 00 01 00 +T 68 03 00 00 +R 00 00 01 00 +T 68 03 00 00 21 FF FF C3 52 05 00 00 +R 00 00 01 00 00 08 01 00 +T 6E 03 00 00 +R 00 00 01 00 +T 6E 03 00 00 21 1D 00 DD 4E 0A DD 46 0B 09 DD +R 00 00 01 00 +T 79 03 00 00 4E FE DD 46 FF 03 71 23 70 69 60 +R 00 00 01 00 +T 84 03 00 00 01 01 00 A7 ED 42 30 19 +R 00 00 01 00 +T 8C 03 00 00 +R 00 00 01 00 +T 8C 03 00 00 21 1D 00 DD 4E 0A DD 46 0B 09 36 +R 00 00 01 00 +T 97 03 00 00 01 23 36 00 DD 36 FC 03 DD 36 FD +R 00 00 01 00 +T A2 03 00 00 00 18 2C +R 00 00 01 00 +T A5 03 00 00 +R 00 00 01 00 +T A5 03 00 00 21 1D 00 DD 4E 0A DD 46 0B 09 4E +R 00 00 01 00 +T B0 03 00 00 23 46 21 40 00 A7 ED 42 30 17 +R 00 00 01 00 +T BA 03 00 00 +R 00 00 01 00 +T BA 03 00 00 21 1D 00 DD 4E 0A DD 46 0B 09 36 +R 00 00 01 00 +T C5 03 00 00 40 23 36 00 DD 36 FC 03 DD 36 FD +R 00 00 01 00 +T D0 03 00 00 00 +R 00 00 01 00 +T D1 03 00 00 +R 00 00 01 00 +T D1 03 00 00 +R 00 00 01 00 +T D1 03 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T D9 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0B 00 02 0A 01 00 +T E0 03 00 00 75 FE DD 74 FF 7D A4 3C 20 06 +R 00 00 01 00 +T EA 03 00 00 +R 00 00 01 00 +T EA 03 00 00 21 FF FF C3 52 05 00 00 +R 00 00 01 00 00 08 01 00 +T F0 03 00 00 +R 00 00 01 00 +T F0 03 00 00 21 1F 00 DD 4E 0A DD 46 0B 09 DD +R 00 00 01 00 +T FB 03 00 00 46 FE 70 3E 01 B8 30 14 +R 00 00 01 00 +T 03 04 00 00 +R 00 00 01 00 +T 03 04 00 00 21 1F 00 DD 4E 0A DD 46 0B 09 36 +R 00 00 01 00 +T 0E 04 00 00 01 DD 36 FC 03 DD 36 FD 00 +R 00 00 01 00 +T 17 04 00 00 +R 00 00 01 00 +T 17 04 00 00 21 00 00 39 7E D6 02 77 23 7E DE +R 00 00 01 00 +T 22 04 00 00 00 77 3A 00 00 00 00 E6 08 28 2A +R 00 00 01 00 02 07 0D 00 +T 2B 04 00 00 +R 00 00 01 00 +T 2B 04 00 00 21 1F 00 DD 4E 0A DD 46 0B 09 5E +R 00 00 01 00 +T 36 04 00 00 16 00 D5 21 1D 00 09 4E 23 46 C5 +R 00 00 01 00 +T 41 04 00 00 21 6D 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 07 00 +T 48 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 4E 04 00 00 CD 00 00 00 00 E1 E1 E1 E1 +R 00 00 01 00 02 05 01 00 +T 55 04 00 00 +R 00 00 01 00 +T 55 04 00 00 18 67 +R 00 00 01 00 +T 57 04 00 00 +R 00 00 01 00 +T 57 04 00 00 DD 6E 0A DD 66 0B 23 23 7E E6 04 +R 00 00 01 00 +T 62 04 00 00 28 32 +R 00 00 01 00 +T 64 04 00 00 +R 00 00 01 00 +T 64 04 00 00 21 1B 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 6F 04 00 00 21 0C 00 09 5E 23 56 E1 73 23 72 +R 00 00 01 00 +T 7A 04 00 00 21 1D 00 09 E5 21 0E 00 09 5E 23 +R 00 00 01 00 +T 85 04 00 00 56 E1 73 23 72 21 10 00 09 56 21 +R 00 00 01 00 +T 90 04 00 00 1F 00 09 72 18 1E +R 00 00 01 00 +T 96 04 00 00 +R 00 00 01 00 +T 96 04 00 00 21 1B 00 DD 4E 0A DD 46 0B 09 36 +R 00 00 01 00 +T A1 04 00 00 2D 23 36 00 21 1D 00 09 36 10 23 +R 00 00 01 00 +T AC 04 00 00 36 00 21 1F 00 09 36 01 +R 00 00 01 00 +T B4 04 00 00 +R 00 00 01 00 +T B4 04 00 00 DD 36 FC 03 DD 36 FD 00 18 00 +R 00 00 01 00 +T BE 04 00 00 +R 00 00 01 00 +T BE 04 00 00 18 0A +R 00 00 01 00 +T C0 04 00 00 +R 00 00 01 00 +T C0 04 00 00 DD 36 FC 04 DD 36 FD 00 18 00 +R 00 00 01 00 +T CA 04 00 00 +R 00 00 01 00 +T CA 04 00 00 DD 6E 0C DD 66 0D 3E 02 BE 38 1E +R 00 00 01 00 +T D5 04 00 00 DD 6E 0A DD 66 0B E5 DD 6E 0C DD +R 00 00 01 00 +T E0 04 00 00 66 0D 46 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T E9 04 00 00 E1 7E A3 47 23 7E A2 B0 20 08 +R 00 00 01 00 +T F3 04 00 00 +R 00 00 01 00 +T F3 04 00 00 +R 00 00 01 00 +T F3 04 00 00 +R 00 00 01 00 +T F3 04 00 00 DD 36 FC 04 DD 36 FD 00 +R 00 00 01 00 +T FB 04 00 00 +R 00 00 01 00 +T FB 04 00 00 DD CB FB 7E 28 05 +R 00 00 01 00 +T 01 05 00 00 +R 00 00 01 00 +T 01 05 00 00 21 FF FF 18 4C +R 00 00 01 00 +T 06 05 00 00 +R 00 00 01 00 +T 06 05 00 00 DD 7E 0E DD B6 0F 20 3E DD 4E FA +R 00 00 01 00 +T 11 05 00 00 DD 46 FB 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T 1A 05 00 00 30 30 +R 00 00 01 00 +T 1C 05 00 00 +R 00 00 01 00 +T 1C 05 00 00 +R 00 00 01 00 +T 1C 05 00 00 +R 00 00 01 00 +T 1C 05 00 00 +R 00 00 01 00 +T 1C 05 00 00 DD 4E FA DD 46 FB 0B DD 71 FA DD +R 00 00 01 00 +T 27 05 00 00 70 FB 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0A 00 +T 30 05 00 00 30 1A +R 00 00 01 00 +T 32 05 00 00 +R 00 00 01 00 +T 32 05 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 3A 05 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0B 00 02 0A 01 00 +T 41 05 00 00 A4 3C 20 05 +R 00 00 01 00 +T 45 05 00 00 +R 00 00 01 00 +T 45 05 00 00 21 FF FF 18 08 +R 00 00 01 00 +T 4A 05 00 00 +R 00 00 01 00 +T 4A 05 00 00 18 D0 +R 00 00 01 00 +T 4C 05 00 00 +R 00 00 01 00 +T 4C 05 00 00 +R 00 00 01 00 +T 4C 05 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 52 05 00 00 +R 00 00 01 00 +T 52 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 20 20 20 63 68 65 63 6B 69 6E +R 00 00 02 00 +T 0B 00 00 00 67 20 49 50 20 73 6F 75 72 63 65 +R 00 00 02 00 +T 16 00 00 00 20 61 64 64 72 65 73 73 3A 20 25 +R 00 00 02 00 +T 21 00 00 00 73 00 +R 00 00 02 00 +T 23 00 00 00 +R 00 00 02 00 +T 23 00 00 00 20 20 20 20 63 68 65 63 6B 69 6E +R 00 00 02 00 +T 2E 00 00 00 67 20 49 50 20 64 65 73 74 69 6E +R 00 00 02 00 +T 39 00 00 00 61 74 69 6F 6E 20 61 64 64 72 65 +R 00 00 02 00 +T 44 00 00 00 73 73 20 25 73 00 +R 00 00 02 00 +T 4A 00 00 00 +R 00 00 02 00 +T 4A 00 00 00 20 20 20 20 63 68 65 63 6B 69 6E +R 00 00 02 00 +T 55 00 00 00 67 20 49 50 20 63 6F 6D 70 72 65 +R 00 00 02 00 +T 60 00 00 00 73 73 69 6F 6E 20 30 78 25 30 34 +R 00 00 02 00 +T 6B 00 00 00 78 00 +R 00 00 02 00 +T 6D 00 00 00 +R 00 00 02 00 +T 6D 00 00 00 20 20 20 20 77 69 74 68 20 49 50 +R 00 00 02 00 +T 78 00 00 00 20 63 6F 6D 70 72 65 73 73 69 6F +R 00 00 02 00 +T 83 00 00 00 6E 20 73 6C 6F 74 73 20 25 64 2C +R 00 00 02 00 +T 8E 00 00 00 20 66 6C 61 67 20 25 78 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_closing.rel b/src/nos/lib/ppp_lib/ipcp_closing.rel new file mode 100644 index 00000000..23c7ab50 --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_closing.rel @@ -0,0 +1,27 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _slhc_free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 39 flags 0 +S _ipcp_closing Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 1C 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 01 40 00 09 5E 23 +R 00 00 01 00 +T 1F 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 25 00 00 00 CD 00 00 00 00 21 40 00 DD 4E FE +R 00 00 01 00 02 05 00 00 +T 2E 00 00 00 DD 46 FF 09 AF 77 23 77 C3 +R 00 00 01 00 +T 37 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/ppp_lib/ipcp_constants.rel b/src/nos/lib/ppp_lib/ipcp_constants.rel new file mode 100644 index 00000000..837182fb --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_constants.rel @@ -0,0 +1,43 @@ +XL4 +H 5 areas E global symbols +S _ipcp_nak Ref00000000 +S _ipcp_reject Ref00000000 +S _ipcp_request Ref00000000 +S .__.ABS. Def00000000 +S _ipcp_free Ref00000000 +S _ipcp_reset Ref00000000 +S _ipcp_makereq Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _ipcp_starting Ref00000000 +S _ipcp_closing Ref00000000 +S _ipcp_ack Ref00000000 +S _ipcp_opening Ref00000000 +S _ipcp_stopping Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size 5 flags 0 +A IDATA0 size 2F flags 0 +S _ipcp_constants Def00000000 +A CDATA0 size 2F flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 49 50 63 70 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 21 80 FE 00 02 14 0A +R 00 00 04 00 00 04 02 00 +T 09 00 00 00 0A B8 0B 00 00 00 00 00 00 +R 00 00 04 00 4A 09 04 00 +T 11 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 05 00 4A 08 08 00 +T 17 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 0B 00 4A 08 09 00 +T 1D 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 0C 00 4A 08 06 00 +T 23 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 02 00 4A 08 0A 00 +T 29 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 00 00 4A 08 01 00 diff --git a/src/nos/lib/ppp_lib/ipcp_default.rel b/src/nos/lib/ppp_lib/ipcp_default.rel new file mode 100644 index 00000000..cd237e1b --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_default.rel @@ -0,0 +1,17 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size F flags 0 +S _ipcp_default Def00000000 +A CDATA0 size F flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 0A 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/ipcp_free.rel b/src/nos/lib/ppp_lib/ipcp_free.rel new file mode 100644 index 00000000..c4a0f9aa --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_free.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _slhc_free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2B flags 0 +S _ipcp_free Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 1C 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 01 40 00 09 5E 23 +R 00 00 01 00 +T 1F 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 25 00 00 00 CD 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 02 0A 01 00 diff --git a/src/nos/lib/ppp_lib/ipcp_init.rel b/src/nos/lib/ppp_lib/ipcp_init.rel new file mode 100644 index 00000000..60c34603 --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_init.rel @@ -0,0 +1,85 @@ +XL4 +H 3 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ipcp_negotiate Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fsm_init Ref00000000 +S .__.ABS. Def00000000 +S _callocw Ref00000000 +S _ipcp_constants Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S _ipcp_default Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DC flags 0 +S _ipcp_init Def00000000 +A CSTR size C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 42 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 4E 02 DD 46 03 09 DD 75 FC DD 74 +R 00 00 01 00 +T 14 00 00 00 FD 21 05 00 09 5E 16 00 ED 53 +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 0A 6F 03 0A 67 22 +R 00 00 01 00 02 04 0C 00 +T 26 00 00 00 00 00 00 00 7B E6 80 28 12 +R 00 00 01 00 02 04 07 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 07 00 +T 34 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 3A 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 4A 00 00 00 5E 02 DD 56 03 73 23 72 21 1A 00 +R 00 00 01 00 +T 55 00 00 00 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 06 06 00 +T 5A 00 00 00 00 00 00 00 21 1C 00 09 E5 01 +R 00 00 01 00 8B 04 06 00 +T 61 00 00 00 42 00 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 69 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 70 00 00 00 FE DD 74 FF 4D 44 E1 71 23 70 59 +R 00 00 01 00 +T 7B 00 00 00 50 13 13 21 00 00 00 00 01 0F 00 +R 00 00 01 00 02 08 0A 00 +T 84 00 00 00 ED B0 2A 00 00 00 00 E5 DD 6E FE +R 00 00 01 00 02 07 01 00 +T 8D 00 00 00 DD 66 FF C1 71 23 70 21 22 00 DD +R 00 00 01 00 +T 98 00 00 00 4E FE DD 46 FF 09 EB 21 +R 00 00 01 00 +T A0 00 00 00 00 00 00 00 01 0F 00 ED B0 21 +R 00 00 01 00 02 04 0A 00 +T A8 00 00 00 31 00 DD 4E FE DD 46 FF 09 EB 21 +R 00 00 01 00 +T B3 00 00 00 00 00 00 00 01 0F 00 ED B0 21 +R 00 00 01 00 02 04 0A 00 +T BB 00 00 00 20 00 DD 4E FE DD 46 FF 09 ED 4B +R 00 00 01 00 +T C6 00 00 00 00 00 00 00 71 23 70 DD 5E FC DD +R 00 00 01 00 02 04 01 00 +T CF 00 00 00 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T D4 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T DA 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 70 63 70 5F 69 6E 69 74 28 29 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_lookuppeer.rel b/src/nos/lib/ppp_lib/ipcp_lookuppeer.rel new file mode 100644 index 00000000..7a2054eb --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_lookuppeer.rel @@ -0,0 +1,52 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _userlookup Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6A flags 0 +S _ipcp_lookuppeer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FC +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 77 FD DD 77 FE DD 77 FF DD 7E +R 00 00 01 00 +T 14 00 00 00 02 DD B6 03 20 08 +R 00 00 01 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 01 00 00 21 00 00 18 45 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 02 00 39 E5 21 00 00 E5 21 +R 00 00 01 00 +T 2C 00 00 00 00 00 E5 01 00 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 37 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 3D 00 00 00 CD 00 00 00 00 F1 F1 F1 DD 75 FA +R 00 00 01 00 02 05 00 00 +T 46 00 00 00 DD 74 FB 7D B4 28 0E +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 55 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 DD 4E FE DD 46 FF DD 6E FC DD 66 +R 00 00 01 00 +T 66 00 00 00 FD +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 diff --git a/src/nos/lib/ppp_lib/ipcp_makeoptions.rel b/src/nos/lib/ppp_lib/ipcp_makeoptions.rel new file mode 100644 index 00000000..dba94b26 --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_makeoptions.rel @@ -0,0 +1,80 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ipcp_option_length Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _ipcp_option Ref00000000 +S ?S_LSH_L02 Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7E flags 0 +S _ipcp_makeoptions Def00000000 +A CSTR size 13 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 3A +R 00 00 01 00 02 05 07 00 +T 06 00 00 00 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 04 0B 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 13 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 19 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 4E FE DD 46 FF 21 02 00 CD +R 00 00 01 00 +T 30 00 00 00 00 00 00 00 38 47 +R 00 00 01 00 02 04 09 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 46 FE 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 3D 00 00 00 7B DD A6 0A 47 7A DD A6 0B B0 28 +R 00 00 01 00 +T 48 00 00 00 28 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 21 00 00 E5 21 00 00 00 00 DD 4E +R 00 00 01 00 02 09 01 00 +T 52 00 00 00 FE DD 46 FF 09 5E D5 C5 DD 4E 04 +R 00 00 01 00 +T 5D 00 00 00 DD 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 67 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 6C 00 00 00 00 00 00 00 E1 E1 E1 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 18 AB +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 70 63 70 5F 6D 61 6B 65 6F 70 +R 00 00 02 00 +T 0B 00 00 00 74 69 6F 6E 73 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_makereq.rel b/src/nos/lib/ppp_lib/ipcp_makereq.rel new file mode 100644 index 00000000..678d137a --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_makereq.rel @@ -0,0 +1,51 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S _ipcp_makeoptions Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 65 flags 0 +S _ipcp_makereq Def00000000 +A CSTR size F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 1C 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FC DD 74 FD AF DD 77 FE DD 77 +R 00 00 01 00 +T 1F 00 00 00 FF 3A 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 06 08 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 03 00 +T 2E 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 34 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 21 11 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 44 00 00 00 23 56 D5 21 11 00 09 4D 44 21 +R 00 00 01 00 +T 4E 00 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 56 00 00 00 00 00 00 00 CD 00 00 00 00 E1 DD +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 5D 00 00 00 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0A 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 70 63 70 5F 6D 61 6B 65 72 65 +R 00 00 02 00 +T 0B 00 00 00 71 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_nak.rel b/src/nos/lib/ppp_lib/ipcp_nak.rel new file mode 100644 index 00000000..4607a453 --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_nak.rel @@ -0,0 +1,329 @@ +XL4 +H 3 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ipcp_check Ref00000000 +S _ntohopt Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +S _PPPiface Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28F flags 0 +S _ipcp_nak Def00000000 +A CSTR size A0 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF 21 1C 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 F2 DD 74 F3 DD 75 F4 DD 74 F5 +R 00 00 01 00 +T 1F 00 00 00 03 03 0A 6F 03 0A 67 01 00 00 DD +R 00 00 01 00 +T 2A 00 00 00 75 F6 DD 74 F7 DD 71 F8 DD 70 F9 +R 00 00 01 00 +T 35 00 00 00 AF DD 77 FC DD 77 FD 3A +R 00 00 01 00 +T 3D 00 00 00 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 04 0E 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 4A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 50 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 6E 02 DD 66 03 23 E5 DD 6E 04 +R 00 00 01 00 +T 60 00 00 00 DD 66 05 23 7E E1 BE 28 2D +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 21 0B 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 77 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 7D 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 8A 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 91 00 00 00 FF FF C3 8C 02 00 00 +R 00 00 01 00 00 07 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 DD 6E F8 DD 66 F9 E5 DD 6E F6 DD +R 00 00 01 00 +T A1 00 00 00 66 F7 E5 01 00 00 21 00 00 CD +R 00 00 01 00 +T AB 00 00 00 00 00 00 00 D2 62 02 00 00 DD 4E +R 00 00 01 00 02 04 07 00 00 09 01 00 +T B2 00 00 00 0A DD 46 0B 21 08 00 39 5D 54 3E +R 00 00 01 00 +T BD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T C2 00 00 00 00 00 00 00 7D A4 3C CA +R 00 00 01 00 02 04 00 00 +T C8 00 00 00 62 02 00 00 +R 00 00 01 00 00 04 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 21 04 00 39 DD 5E FB 01 00 00 51 +R 00 00 01 00 +T D5 00 00 00 CD 00 00 00 00 CB 78 28 2D +R 00 00 01 00 02 05 0D 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 21 1E 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T EA 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T F0 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T FD 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 04 01 00 00 FF FF C3 8C 02 00 00 +R 00 00 01 00 00 07 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 3E 02 DD BE FA 30 1C +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 21 3A 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 1E 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 24 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 C3 D0 01 00 00 +R 00 00 01 00 00 05 01 00 +T 2C 01 00 00 +R 00 00 01 00 +T 2C 01 00 00 DD 6E FA 26 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T 37 01 00 00 CD 00 00 00 00 38 1C 21 11 00 DD +R 00 00 01 00 02 05 0A 00 +T 40 01 00 00 4E F4 DD 46 F5 09 DD 46 FA 11 +R 00 00 01 00 +T 4A 01 00 00 01 00 CD 00 00 00 00 7E A3 47 23 +R 00 00 01 00 02 07 05 00 +T 53 01 00 00 7E A2 B0 20 6D +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 21 11 00 DD 4E F4 DD 46 F5 09 DD +R 00 00 01 00 +T 63 01 00 00 46 FA 11 01 00 CD 00 00 00 00 7E +R 00 00 01 00 02 0A 05 00 +T 6C 01 00 00 A3 47 23 7E A2 B0 28 2D +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 21 58 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 82 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 88 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 95 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 9C 01 00 00 FF FF C3 8C 02 00 00 +R 00 00 01 00 00 07 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 DD 46 FA 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T AA 01 00 00 21 11 00 DD 4E F4 DD 46 F5 09 7E +R 00 00 01 00 +T B5 01 00 00 B3 77 23 7E B2 77 DD 36 FC 03 DD +R 00 00 01 00 +T C0 01 00 00 36 FD 00 18 0B +R 00 00 01 00 +T C5 01 00 00 +R 00 00 01 00 +T C5 01 00 00 DD 4E FA 06 00 DD 71 FC DD 70 FD +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 21 00 00 E5 21 0A 00 39 E5 DD 6E +R 00 00 01 00 +T DB 01 00 00 F4 DD 66 F5 E5 DD 4E F2 DD 46 F3 +R 00 00 01 00 +T E6 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T EE 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T F5 01 00 00 F1 F1 DD 75 FE DD 74 FF 7D A4 3C +R 00 00 01 00 +T 00 02 00 00 20 2C +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 09 02 00 00 +R 00 00 01 00 +T 09 02 00 00 21 76 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 10 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 16 02 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1B 02 00 00 +R 00 00 01 00 +T 1B 02 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 23 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 2A 02 00 00 FF FF 18 5E +R 00 00 01 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 3E 04 DD AE FE DD B6 FF 20 27 3E +R 00 00 01 00 +T 39 02 00 00 02 DD BE FA 38 20 +R 00 00 01 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 DD 46 FA 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 48 02 00 00 7B 2F 5F 7A 2F 57 21 11 00 DD 4E +R 00 00 01 00 +T 53 02 00 00 F4 DD 46 F5 09 7E A3 77 23 7E A2 +R 00 00 01 00 +T 5E 02 00 00 77 +R 00 00 01 00 +T 5F 02 00 00 +R 00 00 01 00 +T 5F 02 00 00 C3 96 00 00 00 +R 00 00 01 00 00 05 01 00 +T 62 02 00 00 +R 00 00 01 00 +T 62 02 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 69 02 00 00 +R 00 00 01 00 +T 69 02 00 00 21 90 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 70 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 76 02 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 7B 02 00 00 +R 00 00 01 00 +T 7B 02 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 83 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 8A 02 00 00 00 00 +R 00 00 01 00 +T 8C 02 00 00 +R 00 00 01 00 +T 8C 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 70 63 70 5F 6E 61 6B 28 29 00 +R 00 00 02 00 +T 0B 00 00 00 +R 00 00 02 00 +T 0B 00 00 00 49 50 43 50 20 4E 41 4B 3A 20 77 +R 00 00 02 00 +T 16 00 00 00 72 6F 6E 67 20 49 44 00 +R 00 00 02 00 +T 1E 00 00 00 +R 00 00 02 00 +T 1E 00 00 00 49 50 43 50 20 4E 41 4B 3A 20 62 +R 00 00 02 00 +T 29 00 00 00 61 64 20 68 65 61 64 65 72 20 6C +R 00 00 02 00 +T 34 00 00 00 65 6E 67 74 68 00 +R 00 00 02 00 +T 3A 00 00 00 +R 00 00 02 00 +T 3A 00 00 00 49 50 43 50 20 4E 41 4B 3A 20 6F +R 00 00 02 00 +T 45 00 00 00 70 74 69 6F 6E 20 6F 75 74 20 6F +R 00 00 02 00 +T 50 00 00 00 66 20 72 61 6E 67 65 00 +R 00 00 02 00 +T 58 00 00 00 +R 00 00 02 00 +T 58 00 00 00 49 50 43 50 20 4E 41 4B 3A 20 6F +R 00 00 02 00 +T 63 00 00 00 70 74 69 6F 6E 20 6F 75 74 20 6F +R 00 00 02 00 +T 6E 00 00 00 66 20 6F 72 64 65 72 00 +R 00 00 02 00 +T 76 00 00 00 +R 00 00 02 00 +T 76 00 00 00 49 50 43 50 20 4E 41 4B 3A 20 72 +R 00 00 02 00 +T 81 00 00 00 61 6E 20 6F 75 74 20 6F 66 20 64 +R 00 00 02 00 +T 8C 00 00 00 61 74 61 00 +R 00 00 02 00 +T 90 00 00 00 +R 00 00 02 00 +T 90 00 00 00 49 50 43 50 20 4E 41 4B 3A 20 76 +R 00 00 02 00 +T 9B 00 00 00 61 6C 69 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_negotiate.rel b/src/nos/lib/ppp_lib/ipcp_negotiate.rel new file mode 100644 index 00000000..b7f55c3a --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_negotiate.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _ipcp_negotiate Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 06 00 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/ipcp_opening.rel b/src/nos/lib/ppp_lib/ipcp_opening.rel new file mode 100644 index 00000000..5a279342 --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_opening.rel @@ -0,0 +1,217 @@ +XL4 +H 3 areas E global symbols +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S _slhc_free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _Ip_addr Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _slhc_init Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 216 flags 0 +S _ipcp_opening Def00000000 +A CSTR size 7F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF 21 1C 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 4E 02 DD 46 03 09 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 F4 DD 74 F5 21 08 00 09 7E 23 +R 00 00 01 00 +T 1F 00 00 00 66 6F 46 23 66 68 DD 75 F6 DD 74 +R 00 00 01 00 +T 2A 00 00 00 F7 21 13 00 DD 4E F4 DD 46 F5 09 +R 00 00 01 00 +T 35 00 00 00 5E 23 56 23 4E 23 46 EB DD 75 F8 +R 00 00 01 00 +T 40 00 00 00 DD 74 F9 DD 71 FA DD 70 FB AF DD +R 00 00 01 00 +T 4B 00 00 00 77 FC DD 77 FD AF DD 77 FE DD 77 +R 00 00 01 00 +T 56 00 00 00 FF C5 E5 21 04 00 DD 4E F6 DD 46 +R 00 00 01 00 +T 61 00 00 00 F7 09 4E 23 46 23 5E 23 56 69 60 +R 00 00 01 00 +T 6C 00 00 00 C1 A7 ED 42 C1 20 06 EB ED 42 CA +R 00 00 01 00 +T 77 00 00 00 30 01 00 00 +R 00 00 01 00 00 04 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 2A 00 00 00 00 7D B4 2A +R 00 00 01 00 02 05 09 00 +T 7F 00 00 00 02 00 00 00 B5 B4 20 15 +R 00 00 01 00 02 04 09 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 DD 4E FA DD 46 FB DD 6E F8 DD 66 +R 00 00 01 00 +T 90 00 00 00 F9 22 00 00 00 00 ED 43 +R 00 00 01 00 02 06 09 00 +T 96 00 00 00 02 00 00 00 18 38 +R 00 00 01 00 02 04 09 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 21 04 00 DD 4E F6 DD 46 F7 09 4E +R 00 00 01 00 +T A5 00 00 00 23 46 23 5E 23 56 69 60 ED 4B +R 00 00 01 00 +T AF 00 00 00 00 00 00 00 A7 ED 42 20 1C EB ED +R 00 00 01 00 02 04 09 00 +T B8 00 00 00 4B 02 00 00 00 ED 42 20 13 +R 00 00 01 00 02 05 09 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 DD 4E FA DD 46 FB DD 6E F8 DD 66 +R 00 00 01 00 +T CA 00 00 00 F9 22 00 00 00 00 ED 43 +R 00 00 01 00 02 06 09 00 +T D0 00 00 00 02 00 00 00 +R 00 00 01 00 02 04 09 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 21 04 00 DD 4E F6 DD 46 F7 09 DD +R 00 00 01 00 +T DD 00 00 00 4E FA DD 46 FB DD 5E F8 DD 56 F9 +R 00 00 01 00 +T E8 00 00 00 73 23 72 23 71 23 70 ED 4B +R 00 00 01 00 +T F1 00 00 00 00 00 00 00 21 01 00 CD +R 00 00 01 00 02 04 0C 00 +T F7 00 00 00 00 00 00 00 30 35 +R 00 00 01 00 02 04 08 00 +T FB 00 00 00 +R 00 00 01 00 +T FB 00 00 00 DD 4E FA DD 46 FB DD 5E F8 DD 56 +R 00 00 01 00 +T 06 01 00 00 F9 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 0C 01 00 00 CD 00 00 00 00 E5 DD 6E F6 DD 66 +R 00 00 01 00 02 05 01 00 +T 15 01 00 00 F7 23 23 4E 23 46 C5 21 +R 00 00 01 00 +T 1D 01 00 00 00 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 04 00 +T 24 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 2A 01 00 00 00 00 00 00 E1 E1 E1 E1 +R 00 00 01 00 02 04 01 00 +T 30 01 00 00 +R 00 00 01 00 +T 30 01 00 00 +R 00 00 01 00 +T 30 01 00 00 21 40 00 DD 4E F4 DD 46 F5 09 5E +R 00 00 01 00 +T 3B 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 40 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 46 01 00 00 40 00 09 AF 77 23 77 21 11 00 09 +R 00 00 01 00 +T 51 01 00 00 7E E6 04 28 14 +R 00 00 01 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 21 1D 00 DD 4E F4 DD 46 F5 09 46 +R 00 00 01 00 +T 61 01 00 00 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 21 31 00 DD 4E F4 DD 46 F5 09 7E +R 00 00 01 00 +T 75 01 00 00 E6 04 28 14 +R 00 00 01 00 +T 79 01 00 00 +R 00 00 01 00 +T 79 01 00 00 21 3D 00 DD 4E F4 DD 46 F5 09 46 +R 00 00 01 00 +T 84 01 00 00 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 DD 7E FC DD B6 FD 20 08 DD 7E FE +R 00 00 01 00 +T 98 01 00 00 DD B6 FF 28 76 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 21 40 00 DD 4E F4 DD 46 F5 09 E5 +R 00 00 01 00 +T A8 01 00 00 DD 4E FE DD 46 FF DD 5E FC DD 56 +R 00 00 01 00 +T B3 01 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T B9 01 00 00 CD 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 05 01 00 +T C2 01 00 00 ED 4B 00 00 00 00 21 01 00 CD +R 00 00 01 00 02 06 0C 00 +T CA 01 00 00 00 00 00 00 30 45 +R 00 00 01 00 02 04 08 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 21 3F 00 DD 4E F4 DD 46 F5 09 5E +R 00 00 01 00 +T D9 01 00 00 16 00 D5 DD 6E FE DD 66 FF E5 21 +R 00 00 01 00 +T E4 01 00 00 1F 00 09 4E 06 00 C5 DD 6E FC DD +R 00 00 01 00 +T EF 01 00 00 66 FD E5 DD 6E F6 DD 66 F7 23 23 +R 00 00 01 00 +T FA 01 00 00 4E 23 46 C5 21 27 00 00 00 E5 2A +R 00 00 01 00 00 09 02 00 +T 03 02 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 2B 0A 07 00 +T 09 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 0F 02 00 00 0E 00 39 F9 +R 00 00 01 00 +T 13 02 00 00 +R 00 00 01 00 +T 13 02 00 00 +R 00 00 01 00 +T 13 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 73 20 50 50 50 2F 49 50 43 50 +R 00 00 02 00 +T 0B 00 00 00 20 53 65 74 74 69 6E 67 20 6E 65 +R 00 00 02 00 +T 16 00 00 00 77 20 49 50 20 61 64 64 72 65 73 +R 00 00 02 00 +T 21 00 00 00 73 3A 20 25 73 00 +R 00 00 02 00 +T 27 00 00 00 +R 00 00 02 00 +T 27 00 00 00 25 73 20 50 50 50 2F 49 50 43 50 +R 00 00 02 00 +T 32 00 00 00 20 43 6F 6D 70 72 65 73 73 69 6F +R 00 00 02 00 +T 3D 00 00 00 6E 20 65 6E 61 62 6C 65 64 3B 20 +R 00 00 02 00 +T 48 00 00 00 52 65 63 76 20 73 6C 6F 74 73 20 +R 00 00 02 00 +T 53 00 00 00 3D 20 25 64 2C 20 66 6C 61 67 20 +R 00 00 02 00 +T 5E 00 00 00 3D 20 25 78 3B 20 58 6D 69 74 20 +R 00 00 02 00 +T 69 00 00 00 73 6C 6F 74 73 20 3D 20 25 64 2C +R 00 00 02 00 +T 74 00 00 00 20 66 6C 61 67 20 3D 20 25 78 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_option.rel b/src/nos/lib/ppp_lib/ipcp_option.rel new file mode 100644 index 00000000..cf025941 --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_option.rel @@ -0,0 +1,271 @@ +XL4 +H 3 areas 10 global symbols +S _put16 Ref00000000 +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alloc_mbuf Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _append Ref00000000 +S _put32 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 287 flags 0 +S _ipcp_option Def00000000 +A CSTR size B2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 5E 0C 16 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 00 1B 1B DD 73 FE DD 72 FF DD 5E +R 00 00 01 00 +T 14 00 00 00 0C 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 1A 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 02 00 +T 21 00 00 00 FA DD 74 FB 7D B4 20 03 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 C3 84 02 00 00 +R 00 00 01 00 00 05 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 21 0A 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T 37 00 00 00 23 66 68 DD 75 FC DD 74 FD 23 DD +R 00 00 01 00 +T 42 00 00 00 75 FC DD 74 FD 2B DD 46 0A 70 DD +R 00 00 01 00 +T 4D 00 00 00 6E FC DD 66 FD 23 DD 75 FC DD 74 +R 00 00 01 00 +T 58 00 00 00 FD 2B DD 46 0C 70 DD 7E 0A FE 01 +R 00 00 01 00 +T 63 00 00 00 C2 25 01 00 00 +R 00 00 01 00 00 05 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 71 00 00 00 23 5E 23 56 D5 C5 DD 5E FC DD 56 +R 00 00 01 00 +T 7C 00 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 82 00 00 00 CD 00 00 00 00 F1 F1 DD 75 FC DD +R 00 00 01 00 02 05 02 00 +T 8B 00 00 00 74 FD 21 06 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 96 00 00 00 09 4E 23 46 23 5E 23 56 D5 C5 DD +R 00 00 01 00 +T A1 00 00 00 5E FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T A9 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 02 00 +T B0 00 00 00 DD 75 FC DD 74 FD 21 04 00 39 7E +R 00 00 01 00 +T BB 00 00 00 D6 08 77 23 7E DE 00 77 3A +R 00 00 01 00 +T C4 00 00 00 00 00 00 00 E6 08 28 58 +R 00 00 01 00 02 04 0E 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T D5 00 00 00 23 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T DC 00 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 01 00 02 09 02 00 +T E3 00 00 00 00 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 06 00 +T EA 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T F0 00 00 00 00 00 00 00 E1 E1 E1 21 06 00 DD +R 00 00 01 00 02 04 02 00 +T F9 00 00 00 4E 04 DD 46 05 09 5E 23 56 23 4E +R 00 00 01 00 +T 04 01 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 09 01 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 01 00 02 09 02 00 +T 10 01 00 00 21 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 06 00 +T 17 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 1D 01 00 00 00 00 00 00 E1 E1 E1 +R 00 00 01 00 02 04 02 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 C3 23 02 00 00 +R 00 00 01 00 00 05 01 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 FE 02 C2 01 02 00 00 21 0A 00 DD +R 00 00 01 00 00 07 01 00 +T 2E 01 00 00 4E 04 DD 46 05 09 4E 23 46 DD 5E +R 00 00 01 00 +T 39 01 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 00 00 +T 40 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 47 01 00 00 FC DD 74 FD 21 04 00 39 7E D6 02 +R 00 00 01 00 +T 52 01 00 00 77 23 7E DE 00 77 3A 00 00 00 00 +R 00 00 01 00 02 0B 0E 00 +T 5B 01 00 00 E6 08 28 21 +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 21 0A 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 6A 01 00 00 23 46 C5 21 46 00 00 00 E5 2A +R 00 00 01 00 00 08 02 00 +T 72 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 2B 0A 08 00 +T 78 01 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 08 00 02 09 02 00 +T 7F 01 00 00 E1 +R 00 00 01 00 +T 80 01 00 00 +R 00 00 01 00 +T 80 01 00 00 21 0A 00 DD 4E 04 DD 46 05 09 3E +R 00 00 01 00 +T 8B 01 00 00 2D AE 23 B6 20 6E +R 00 00 01 00 +T 91 01 00 00 +R 00 00 01 00 +T 91 01 00 00 21 0C 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 9C 01 00 00 C6 FF DD 6E FC DD 66 FD 23 DD 75 +R 00 00 01 00 +T A7 01 00 00 FC DD 74 FD 2B 77 21 0E 00 09 46 +R 00 00 01 00 +T B2 01 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T BD 01 00 00 74 FD 2B 70 21 04 00 39 7E D6 02 +R 00 00 01 00 +T C8 01 00 00 77 23 7E DE 00 77 3A 00 00 00 00 +R 00 00 01 00 02 0B 0E 00 +T D1 01 00 00 E6 08 28 2A +R 00 00 01 00 +T D5 01 00 00 +R 00 00 01 00 +T D5 01 00 00 21 0E 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T E0 01 00 00 16 00 D5 21 0C 00 09 4E 23 46 C5 +R 00 00 01 00 +T EB 01 00 00 21 67 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T F2 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T F8 01 00 00 CD 00 00 00 00 E1 E1 E1 E1 +R 00 00 01 00 02 05 02 00 +T FF 01 00 00 +R 00 00 01 00 +T FF 01 00 00 +R 00 00 01 00 +T FF 01 00 00 18 22 +R 00 00 01 00 +T 01 02 00 00 +R 00 00 01 00 +T 01 02 00 00 3A 00 00 00 00 E6 08 28 19 +R 00 00 01 00 02 05 0E 00 +T 08 02 00 00 +R 00 00 01 00 +T 08 02 00 00 DD 4E 0A 06 00 C5 21 91 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 11 02 00 00 E5 2A 00 00 00 00 E5 3E +R 00 00 01 00 02 06 06 00 +T 17 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 1C 02 00 00 00 00 00 00 E1 E1 E1 +R 00 00 01 00 02 04 02 00 +T 21 02 00 00 +R 00 00 01 00 +T 21 02 00 00 18 00 +R 00 00 01 00 +T 23 02 00 00 +R 00 00 01 00 +T 23 02 00 00 +R 00 00 01 00 +T 23 02 00 00 DD 4E FE DD 46 FF 0B DD 71 FE DD +R 00 00 01 00 +T 2E 02 00 00 70 FF 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 37 02 00 00 30 21 +R 00 00 01 00 +T 39 02 00 00 +R 00 00 01 00 +T 39 02 00 00 DD 5E 0E DD 56 0F 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 41 02 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 0A 00 02 0A 02 00 +T 48 02 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 53 02 00 00 74 FD 2B C1 71 18 C9 +R 00 00 01 00 +T 5A 02 00 00 +R 00 00 01 00 +T 5A 02 00 00 21 0C 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 65 02 00 00 5E 0C 16 00 7E 83 77 23 7E 8A 77 +R 00 00 01 00 +T 70 02 00 00 21 00 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 7B 02 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 81 02 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 84 02 00 00 +R 00 00 01 00 +T 84 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T 0B 00 00 00 49 50 20 73 6F 75 72 63 65 20 61 +R 00 00 02 00 +T 16 00 00 00 64 64 72 65 73 73 3A 20 25 73 00 +R 00 00 02 00 +T 21 00 00 00 +R 00 00 02 00 +T 21 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T 2C 00 00 00 49 50 20 64 65 73 74 69 6E 61 74 +R 00 00 02 00 +T 37 00 00 00 69 6F 6E 20 61 64 64 72 65 73 73 +R 00 00 02 00 +T 42 00 00 00 20 25 73 00 +R 00 00 02 00 +T 46 00 00 00 +R 00 00 02 00 +T 46 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T 51 00 00 00 49 50 20 63 6F 6D 70 72 65 73 73 +R 00 00 02 00 +T 5C 00 00 00 69 6F 6E 20 30 78 25 30 34 78 00 +R 00 00 02 00 +T 67 00 00 00 +R 00 00 02 00 +T 67 00 00 00 20 20 20 20 77 69 74 68 20 49 50 +R 00 00 02 00 +T 72 00 00 00 20 63 6F 6D 70 72 65 73 73 69 6F +R 00 00 02 00 +T 7D 00 00 00 6E 20 73 6C 6F 74 73 20 25 64 2C +R 00 00 02 00 +T 88 00 00 00 20 66 6C 61 67 20 25 78 00 +R 00 00 02 00 +T 91 00 00 00 +R 00 00 02 00 +T 91 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T 9C 00 00 00 75 6E 69 6D 70 6C 65 6D 65 6E 74 +R 00 00 02 00 +T A7 00 00 00 65 64 20 74 79 70 65 20 25 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_option_length.rel b/src/nos/lib/ppp_lib/ipcp_option_length.rel new file mode 100644 index 00000000..cc26b79d --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_option_length.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _ipcp_option_length Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 0A 06 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/ipcp_poolnext.rel b/src/nos/lib/ppp_lib/ipcp_poolnext.rel new file mode 100644 index 00000000..ec50e3ed --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_poolnext.rel @@ -0,0 +1,104 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?L_DEC_L03 Ref00000000 +S .__.ABS. Def00000000 +S _ipcp_addr_idle Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 148 flags 0 +S _ipcp_poolnext Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 21 08 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 4E 23 46 23 5E +R 00 00 01 00 +T 14 00 00 00 23 56 69 60 D5 E5 21 28 00 DD 4E +R 00 00 01 00 +T 1F 00 00 00 02 DD 46 03 09 4E 23 46 23 5E 23 +R 00 00 01 00 +T 2A 00 00 00 56 69 60 A7 C1 ED 42 EB C1 ED 42 +R 00 00 01 00 +T 35 00 00 00 E5 D5 21 01 00 C1 09 EB 21 00 00 +R 00 00 01 00 +T 40 00 00 00 C1 ED 4A 4D 44 EB DD 75 F8 DD 74 +R 00 00 01 00 +T 4B 00 00 00 F9 DD 71 FA DD 70 FB AF DD 77 FC +R 00 00 01 00 +T 56 00 00 00 DD 77 FD DD 77 FE DD 77 FF +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E F8 DD 66 F9 DD 4E FA DD 46 +R 00 00 01 00 +T 6A 00 00 00 FB C5 E5 CD 00 00 00 00 DD 75 F8 +R 00 00 01 00 02 08 01 00 +T 73 00 00 00 DD 74 F9 DD 71 FA DD 70 FB 01 +R 00 00 01 00 +T 7D 00 00 00 00 00 21 00 00 CD 00 00 00 00 D2 +R 00 00 01 00 02 0A 04 00 +T 86 00 00 00 39 01 00 00 DD 7E FC DD B6 FD DD +R 00 00 01 00 00 04 01 00 +T 8F 00 00 00 B6 FE DD B6 FF C2 39 01 00 00 +R 00 00 01 00 00 0A 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T A2 00 00 00 23 56 23 4E 23 46 C5 D5 21 08 00 +R 00 00 01 00 +T AD 00 00 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T B5 00 00 00 00 00 00 00 EB CD 00 00 00 00 38 +R 00 00 01 00 02 04 06 00 02 0A 04 00 +T BC 00 00 00 2A 21 08 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T C7 00 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T D1 00 00 00 28 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T DC 00 00 00 56 23 4E 23 46 EB CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T E5 00 00 00 30 2A +R 00 00 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T F2 00 00 00 23 46 23 5E 23 56 69 60 E5 21 +R 00 00 01 00 +T FC 00 00 00 08 00 DD 4E 02 DD 46 03 09 C1 D5 +R 00 00 01 00 +T 07 01 00 00 59 50 C1 73 23 72 23 71 23 70 +R 00 00 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1C 01 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 24 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 2B 01 00 00 75 FC DD 74 FD DD 71 FE DD 70 FF +R 00 00 01 00 +T 36 01 00 00 C3 5F 00 00 00 +R 00 00 01 00 00 05 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 4E FE DD 46 FF DD 6E FC DD 66 +R 00 00 01 00 +T 44 01 00 00 FD C3 00 00 00 00 +R 00 00 01 00 02 06 08 00 diff --git a/src/nos/lib/ppp_lib/ipcp_reject.rel b/src/nos/lib/ppp_lib/ipcp_reject.rel new file mode 100644 index 00000000..a0b2a67e --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_reject.rel @@ -0,0 +1,317 @@ +XL4 +H 3 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ntohopt Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +S _PPPiface Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24A flags 0 +S _ipcp_reject Def00000000 +A CSTR size A3 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF 21 1C 00 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 F2 DD 74 F3 DD 75 F4 DD 74 F5 +R 00 00 01 00 +T 1F 00 00 00 03 03 0A 6F 03 0A 67 01 00 00 DD +R 00 00 01 00 +T 2A 00 00 00 75 F6 DD 74 F7 DD 71 F8 DD 70 F9 +R 00 00 01 00 +T 35 00 00 00 AF DD 77 FC DD 77 FD 3A +R 00 00 01 00 +T 3D 00 00 00 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 04 0E 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 4A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 50 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 6E 02 DD 66 03 23 E5 DD 6E 04 +R 00 00 01 00 +T 60 00 00 00 DD 66 05 23 7E E1 BE 28 2D +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 21 0E 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 77 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 7D 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 8A 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 91 00 00 00 FF FF C3 47 02 00 00 +R 00 00 01 00 00 07 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 DD 6E F8 DD 66 F9 E5 DD 6E F6 DD +R 00 00 01 00 +T A1 00 00 00 66 F7 E5 01 00 00 21 00 00 CD +R 00 00 01 00 +T AB 00 00 00 00 00 00 00 D2 1D 02 00 00 DD 4E +R 00 00 01 00 02 04 06 00 00 09 01 00 +T B2 00 00 00 0A DD 46 0B 21 08 00 39 5D 54 3E +R 00 00 01 00 +T BD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T C2 00 00 00 00 00 00 00 7D A4 3C CA +R 00 00 01 00 02 04 00 00 +T C8 00 00 00 1D 02 00 00 +R 00 00 01 00 00 04 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 21 04 00 39 DD 5E FB 01 00 00 51 +R 00 00 01 00 +T D5 00 00 00 CD 00 00 00 00 CB 78 28 2D +R 00 00 01 00 02 05 0D 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 21 21 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T EA 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T F0 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T FD 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 04 01 00 00 FF FF C3 47 02 00 00 +R 00 00 01 00 00 07 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 3E 02 DD BE FA 30 1B +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 21 3D 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 1E 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 24 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 18 59 +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 DD 6E FA 26 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T 36 01 00 00 CD 00 00 00 00 38 1C 21 11 00 DD +R 00 00 01 00 02 05 09 00 +T 3F 01 00 00 4E F4 DD 46 F5 09 DD 46 FA 11 +R 00 00 01 00 +T 49 01 00 00 01 00 CD 00 00 00 00 7E A3 47 23 +R 00 00 01 00 02 07 04 00 +T 52 01 00 00 7E A2 B0 20 2D +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 21 5B 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 65 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 6B 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 78 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 7F 01 00 00 FF FF C3 47 02 00 00 +R 00 00 01 00 00 07 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 DD 4E FB 06 00 0B 0B DD 71 FE DD +R 00 00 01 00 +T 8F 01 00 00 70 FF +R 00 00 01 00 +T 91 01 00 00 +R 00 00 01 00 +T 91 01 00 00 DD 4E FE DD 46 FF 0B DD 71 FE DD +R 00 00 01 00 +T 9C 01 00 00 70 FF 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T A5 01 00 00 30 41 +R 00 00 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T AF 01 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T B6 01 00 00 A4 3C 20 2C +R 00 00 01 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 21 79 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T C8 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T CE 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T DB 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T E2 01 00 00 FF FF 18 61 +R 00 00 01 00 +T E6 01 00 00 +R 00 00 01 00 +T E6 01 00 00 18 A9 +R 00 00 01 00 +T E8 01 00 00 +R 00 00 01 00 +T E8 01 00 00 DD 4E FA 06 00 DD 71 FC DD 70 FD +R 00 00 01 00 +T F3 01 00 00 3E 02 DD BE FA 38 20 +R 00 00 01 00 +T FA 01 00 00 +R 00 00 01 00 +T FA 01 00 00 DD 46 FA 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 03 02 00 00 7B 2F 5F 7A 2F 57 21 11 00 DD 4E +R 00 00 01 00 +T 0E 02 00 00 F4 DD 46 F5 09 7E A3 77 23 7E A2 +R 00 00 01 00 +T 19 02 00 00 77 +R 00 00 01 00 +T 1A 02 00 00 +R 00 00 01 00 +T 1A 02 00 00 C3 96 00 00 00 +R 00 00 01 00 00 05 01 00 +T 1D 02 00 00 +R 00 00 01 00 +T 1D 02 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 24 02 00 00 +R 00 00 01 00 +T 24 02 00 00 21 93 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 2B 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 31 02 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 3E 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 45 02 00 00 00 00 +R 00 00 01 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 70 63 70 5F 72 65 6A 65 63 74 +R 00 00 02 00 +T 0B 00 00 00 28 29 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 49 50 43 50 20 52 45 4A 3A 20 77 +R 00 00 02 00 +T 19 00 00 00 72 6F 6E 67 20 49 44 00 +R 00 00 02 00 +T 21 00 00 00 +R 00 00 02 00 +T 21 00 00 00 49 50 43 50 20 52 45 4A 3A 20 62 +R 00 00 02 00 +T 2C 00 00 00 61 64 20 68 65 61 64 65 72 20 6C +R 00 00 02 00 +T 37 00 00 00 65 6E 67 74 68 00 +R 00 00 02 00 +T 3D 00 00 00 +R 00 00 02 00 +T 3D 00 00 00 49 50 43 50 20 52 45 4A 3A 20 6F +R 00 00 02 00 +T 48 00 00 00 70 74 69 6F 6E 20 6F 75 74 20 6F +R 00 00 02 00 +T 53 00 00 00 66 20 72 61 6E 67 65 00 +R 00 00 02 00 +T 5B 00 00 00 +R 00 00 02 00 +T 5B 00 00 00 49 50 43 50 20 52 45 4A 3A 20 6F +R 00 00 02 00 +T 66 00 00 00 70 74 69 6F 6E 20 6F 75 74 20 6F +R 00 00 02 00 +T 71 00 00 00 66 20 6F 72 64 65 72 00 +R 00 00 02 00 +T 79 00 00 00 +R 00 00 02 00 +T 79 00 00 00 49 50 43 50 20 52 45 4A 3A 20 72 +R 00 00 02 00 +T 84 00 00 00 61 6E 20 6F 75 74 20 6F 66 20 64 +R 00 00 02 00 +T 8F 00 00 00 61 74 61 00 +R 00 00 02 00 +T 93 00 00 00 +R 00 00 02 00 +T 93 00 00 00 49 50 43 50 20 52 45 4A 3A 20 76 +R 00 00 02 00 +T 9E 00 00 00 61 6C 69 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_request.rel b/src/nos/lib/ppp_lib/ipcp_request.rel new file mode 100644 index 00000000..478d3706 --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_request.rel @@ -0,0 +1,366 @@ +XL4 +H 3 areas 15 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _ipcp_check Ref00000000 +S _ntohopt Ref00000000 +S _fsm_send Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _ipcp_option Ref00000000 +S ?S_LSH_L02 Ref00000000 +S _PPPiface Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _fsmCodes Ref00000000 +S _ipcp_makeoptions Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 337 flags 0 +S _ipcp_request Def00000000 +A CSTR size 6F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F0 FF 21 1C 00 DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 F0 DD 74 F1 03 03 0A 6F 03 0A +R 00 00 01 00 +T 1F 00 00 00 67 01 00 00 DD 75 F2 DD 74 F3 DD +R 00 00 01 00 +T 2A 00 00 00 71 F4 DD 70 F5 AF DD 77 F6 DD 77 +R 00 00 01 00 +T 35 00 00 00 F7 DD 36 F8 02 DD 36 F9 00 3A +R 00 00 01 00 +T 3F 00 00 00 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 04 13 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 09 00 +T 4C 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 52 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 31 00 DD 4E F0 DD 46 F1 09 AF +R 00 00 01 00 +T 62 00 00 00 77 23 77 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 DD 6E F4 DD 66 F5 E5 DD 6E F2 DD +R 00 00 01 00 +T 70 00 00 00 66 F3 E5 01 00 00 21 00 00 CD +R 00 00 01 00 +T 7A 00 00 00 00 00 00 00 D2 28 02 00 00 DD 4E +R 00 00 01 00 02 04 0A 00 00 09 01 00 +T 81 00 00 00 0A DD 46 0B 21 0C 00 39 5D 54 3E +R 00 00 01 00 +T 8C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 91 00 00 00 00 00 00 00 7D A4 3C CA +R 00 00 01 00 02 04 00 00 +T 97 00 00 00 28 02 00 00 +R 00 00 01 00 00 04 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 02 00 39 DD 5E FD 01 00 00 51 +R 00 00 01 00 +T A4 00 00 00 CD 00 00 00 00 CB 78 28 3B +R 00 00 01 00 02 05 12 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 13 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 21 0F 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 09 00 +T B9 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T BF 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T CC 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T D3 00 00 00 06 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T DB 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T E1 00 00 00 FF FF C3 34 03 00 00 +R 00 00 01 00 00 07 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 21 01 00 E5 21 0E 00 39 E5 21 +R 00 00 01 00 +T F0 00 00 00 20 00 DD 4E F0 DD 46 F1 09 E5 DD +R 00 00 01 00 +T FB 00 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 03 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 0A 01 00 00 F1 DD 75 FE DD 74 FF 7D A4 3C 20 +R 00 00 01 00 +T 15 01 00 00 3B +R 00 00 01 00 +T 16 01 00 00 +R 00 00 01 00 +T 16 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 13 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 21 2B 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 09 00 +T 24 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 2A 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 2F 01 00 00 +R 00 00 01 00 +T 2F 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 37 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T 3E 01 00 00 06 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T 46 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 4C 01 00 00 FF FF C3 34 03 00 00 +R 00 00 01 00 00 07 01 00 +T 51 01 00 00 +R 00 00 01 00 +T 51 01 00 00 3A 00 00 00 00 E6 08 28 30 +R 00 00 01 00 02 05 13 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 DD 4E FD 06 00 C5 DD 4E FC 06 00 +R 00 00 01 00 +T 63 01 00 00 C5 DD 6E FE DD 66 FF 29 01 +R 00 00 01 00 +T 6C 01 00 00 00 00 00 00 09 4E 23 46 C5 21 +R 00 00 01 00 02 04 0F 00 +T 74 01 00 00 45 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 09 00 +T 7B 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T 81 01 00 00 00 00 00 00 E1 E1 E1 E1 E1 +R 00 00 01 00 02 04 00 00 +T 88 01 00 00 +R 00 00 01 00 +T 88 01 00 00 DD 4E F8 DD 46 F9 DD 6E FE DD 66 +R 00 00 01 00 +T 93 01 00 00 FF CD 00 00 00 00 30 03 +R 00 00 01 00 02 06 0D 00 +T 99 01 00 00 +R 00 00 01 00 +T 99 01 00 00 C3 65 00 00 00 +R 00 00 01 00 00 05 01 00 +T 9C 01 00 00 +R 00 00 01 00 +T 9C 01 00 00 DD 4E FE DD 46 FF DD 6E F8 DD 66 +R 00 00 01 00 +T A7 01 00 00 F9 CD 00 00 00 00 30 21 +R 00 00 01 00 02 06 0D 00 +T AD 01 00 00 +R 00 00 01 00 +T AD 01 00 00 21 06 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T B5 01 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T BC 01 00 00 DD 77 F6 DD 77 F7 DD 6E FE DD 66 +R 00 00 01 00 +T C7 01 00 00 FF DD 75 F8 DD 74 F9 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 3E 04 DD AE FE DD B6 FF 28 21 3E +R 00 00 01 00 +T D9 01 00 00 02 DD BE FC 38 1A +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 DD 46 FC 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T E8 01 00 00 21 31 00 DD 4E F0 DD 46 F1 09 7E +R 00 00 01 00 +T F3 01 00 00 B3 77 23 7E B2 77 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 DD 6E 0A DD 66 0B E5 DD 6E FD E5 +R 00 00 01 00 +T 04 02 00 00 DD 6E FC E5 21 31 00 DD 4E F0 DD +R 00 00 01 00 +T 0F 02 00 00 46 F1 09 4D 44 21 0C 00 39 5D 54 +R 00 00 01 00 +T 1A 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 20 02 00 00 00 00 00 00 E1 E1 E1 C3 +R 00 00 01 00 02 04 00 00 +T 26 02 00 00 65 00 00 00 +R 00 00 01 00 00 04 01 00 +T 28 02 00 00 +R 00 00 01 00 +T 28 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 33 02 00 00 B7 CA C6 02 00 00 21 22 00 DD 4E +R 00 00 01 00 00 06 01 00 +T 3C 02 00 00 F0 DD 46 F1 09 E5 21 31 00 09 4E +R 00 00 01 00 +T 47 02 00 00 23 46 79 2F 4F 78 2F 47 E1 7E A1 +R 00 00 01 00 +T 52 02 00 00 5F 23 7E A0 57 DD 73 FA DD 72 FB +R 00 00 01 00 +T 5D 02 00 00 7B B2 28 65 +R 00 00 01 00 +T 61 02 00 00 +R 00 00 01 00 +T 61 02 00 00 +R 00 00 01 00 +T 61 02 00 00 +R 00 00 01 00 +T 61 02 00 00 DD 5E F8 DD 56 F9 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 6A 02 00 00 02 00 03 00 C4 02 00 00 +R 00 00 01 00 00 08 01 00 +T 70 02 00 00 76 02 00 00 93 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 74 02 00 00 C2 02 00 00 +R 00 00 01 00 00 04 01 00 +T 76 02 00 00 +R 00 00 01 00 +T 76 02 00 00 21 06 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 7E 02 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T 85 02 00 00 DD 77 F6 DD 77 F7 DD 36 F8 03 DD +R 00 00 01 00 +T 90 02 00 00 36 F9 00 +R 00 00 01 00 +T 93 02 00 00 +R 00 00 01 00 +T 93 02 00 00 DD 6E FA DD 66 FB E5 21 22 00 DD +R 00 00 01 00 +T 9E 02 00 00 4E F0 DD 46 F1 09 4D 44 21 08 00 +R 00 00 01 00 +T A9 02 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 10 00 +T AF 02 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T B6 02 00 00 06 00 DD 4E 02 DD 46 03 09 35 18 +R 00 00 01 00 +T C1 02 00 00 02 +R 00 00 01 00 +T C2 02 00 00 +R 00 00 01 00 +T C2 02 00 00 18 00 +R 00 00 01 00 +T C4 02 00 00 +R 00 00 01 00 +T C4 02 00 00 18 2D +R 00 00 01 00 +T C6 02 00 00 +R 00 00 01 00 +T C6 02 00 00 3E 03 DD AE F8 DD B6 F9 20 23 +R 00 00 01 00 +T D0 02 00 00 +R 00 00 01 00 +T D0 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T DB 02 00 00 B7 28 0D +R 00 00 01 00 +T DE 02 00 00 +R 00 00 01 00 +T DE 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 35 +R 00 00 01 00 +T E9 02 00 00 18 08 +R 00 00 01 00 +T EB 02 00 00 +R 00 00 01 00 +T EB 02 00 00 DD 36 F8 04 DD 36 F9 00 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 21 06 00 39 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 +T FE 02 00 00 23 4E C5 DD 4E F8 DD 5E 02 DD 56 +R 00 00 01 00 +T 09 03 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 0F 03 00 00 CD 00 00 00 00 F1 F1 DD 5E 0A DD +R 00 00 01 00 02 05 00 00 +T 18 03 00 00 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 1D 03 00 00 00 00 00 00 CD 00 00 00 00 3E 02 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 24 03 00 00 DD AE F8 DD B6 F9 28 04 2E 01 18 +R 00 00 01 00 +T 2F 03 00 00 02 +R 00 00 01 00 +T 30 03 00 00 +R 00 00 01 00 +T 30 03 00 00 2E 00 +R 00 00 01 00 +T 32 03 00 00 +R 00 00 01 00 +T 32 03 00 00 26 00 +R 00 00 01 00 +T 34 03 00 00 +R 00 00 01 00 +T 34 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 70 63 70 5F 72 65 71 75 65 73 +R 00 00 02 00 +T 0B 00 00 00 74 28 29 00 +R 00 00 02 00 +T 0F 00 00 00 +R 00 00 02 00 +T 0F 00 00 00 49 50 43 50 20 52 45 51 3A 20 62 +R 00 00 02 00 +T 1A 00 00 00 61 64 20 68 65 61 64 65 72 20 6C +R 00 00 02 00 +T 25 00 00 00 65 6E 67 74 68 00 +R 00 00 02 00 +T 2B 00 00 00 +R 00 00 02 00 +T 2B 00 00 00 49 50 43 50 20 52 45 51 3A 20 72 +R 00 00 02 00 +T 36 00 00 00 61 6E 20 6F 75 74 20 6F 66 20 64 +R 00 00 02 00 +T 41 00 00 00 61 74 61 00 +R 00 00 02 00 +T 45 00 00 00 +R 00 00 02 00 +T 45 00 00 00 49 50 43 50 20 52 45 51 3A 20 72 +R 00 00 02 00 +T 50 00 00 00 65 73 75 6C 74 20 25 73 2C 20 6F +R 00 00 02 00 +T 5B 00 00 00 70 74 69 6F 6E 20 25 64 2C 20 6C +R 00 00 02 00 +T 66 00 00 00 65 6E 67 74 68 20 25 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_reset.rel b/src/nos/lib/ppp_lib/ipcp_reset.rel new file mode 100644 index 00000000..090c0a9c --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_reset.rel @@ -0,0 +1,64 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AB flags 0 +S _ipcp_reset Def00000000 +A CSTR size D flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 1C 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 3A 00 00 00 00 E6 +R 00 00 01 00 02 0A 07 00 +T 1D 00 00 00 80 28 12 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 03 00 +T 27 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 2D 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 11 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T 3D 00 00 00 69 60 23 23 01 0F 00 ED B0 21 +R 00 00 01 00 +T 47 00 00 00 24 00 DD 4E FE DD 46 FF 09 4E 23 +R 00 00 01 00 +T 52 00 00 00 46 23 5E 23 56 69 60 E5 21 17 00 +R 00 00 01 00 +T 5D 00 00 00 DD 4E FE DD 46 FF 09 C1 D5 59 50 +R 00 00 01 00 +T 68 00 00 00 C1 73 23 72 23 71 23 70 DD 6E FE +R 00 00 01 00 +T 73 00 00 00 DD 66 FF 23 23 4E 23 46 DD 6E FE +R 00 00 01 00 +T 7E 00 00 00 DD 66 FF 7E B1 77 23 7E B0 77 21 +R 00 00 01 00 +T 89 00 00 00 31 00 DD 4E FE DD 46 FF 09 AF 77 +R 00 00 01 00 +T 94 00 00 00 23 77 21 22 00 09 5E 23 56 21 +R 00 00 01 00 +T 9E 00 00 00 20 00 09 7E B3 77 23 7E B2 77 C3 +R 00 00 01 00 +T A9 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 70 63 70 5F 72 65 73 65 74 28 +R 00 00 02 00 +T 0B 00 00 00 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_starting.rel b/src/nos/lib/ppp_lib/ipcp_starting.rel new file mode 100644 index 00000000..cc65a8d3 --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_starting.rel @@ -0,0 +1,96 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ipcp_poolnext Ref00000000 +S _ipcp_lookuppeer Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size F0 flags 0 +S _ipcp_starting Def00000000 +A CSTR size 10 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 1C 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 3A 00 00 00 00 E6 +R 00 00 01 00 02 0A 09 00 +T 1D 00 00 00 80 28 12 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 27 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 2D 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 21 24 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 3D 00 00 00 23 B6 23 B6 23 B6 20 30 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 50 00 00 00 23 66 68 01 64 00 09 5E 23 56 3E +R 00 00 01 00 +T 5B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 60 00 00 00 00 00 00 00 E5 21 24 00 DD 5E FE +R 00 00 01 00 02 04 00 00 +T 69 00 00 00 DD 56 FF 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 74 00 00 00 70 +R 00 00 01 00 +T 75 00 00 00 +R 00 00 01 00 +T 75 00 00 00 21 24 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 80 00 00 00 23 B6 23 B6 23 B6 20 34 21 08 00 +R 00 00 01 00 +T 8B 00 00 00 DD 4E FE DD 46 FF 09 7E 23 B6 23 +R 00 00 01 00 +T 96 00 00 00 B6 23 B6 28 21 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T A3 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T AA 00 00 00 21 24 00 DD 5E FE DD 56 FF 19 D1 +R 00 00 01 00 +T B5 00 00 00 73 23 72 23 71 23 70 +R 00 00 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T C7 00 00 00 23 66 6F 46 23 66 68 01 04 00 09 +R 00 00 01 00 +T D2 00 00 00 5E 23 56 23 4E 23 46 EB E5 21 +R 00 00 01 00 +T DC 00 00 00 04 00 DD 5E FE DD 56 FF 19 D1 73 +R 00 00 01 00 +T E7 00 00 00 23 72 23 71 23 70 C3 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 70 63 70 5F 73 74 61 72 74 69 +R 00 00 02 00 +T 0B 00 00 00 6E 67 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ipcp_stopping.rel b/src/nos/lib/ppp_lib/ipcp_stopping.rel new file mode 100644 index 00000000..d148757e --- /dev/null +++ b/src/nos/lib/ppp_lib/ipcp_stopping.rel @@ -0,0 +1,38 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _PPPiface Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1F flags 0 +S _ipcp_stopping Def00000000 +A CSTR size 10 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3A 00 00 00 00 E6 +R 00 00 01 00 02 05 03 00 02 0A 07 00 +T 07 00 00 00 80 28 12 +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 11 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 17 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 70 63 70 5F 73 74 6F 70 70 69 +R 00 00 02 00 +T 0B 00 00 00 6E 67 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_ack.rel b/src/nos/lib/ppp_lib/lcp_ack.rel new file mode 100644 index 00000000..67e92694 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_ack.rel @@ -0,0 +1,208 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _lcp_makereq Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S _free_p Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 171 flags 0 +S _lcp_ack Def00000000 +A CSTR size 62 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 FA +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FB 3A 00 00 00 00 E6 80 28 +R 00 00 01 00 02 08 0B 00 +T 12 00 00 00 12 +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 1A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 20 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 6E 02 DD 66 03 23 E5 DD 6E 04 +R 00 00 01 00 +T 30 00 00 00 DD 66 05 23 7E E1 BE 28 2D +R 00 00 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0B 00 +T 40 00 00 00 +R 00 00 01 00 +T 40 00 00 00 21 0A 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 47 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 4D 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 5A 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T 61 00 00 00 FF FF C3 6E 01 00 00 +R 00 00 01 00 00 07 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 6E 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 75 00 00 00 75 F8 DD 74 F9 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 80 00 00 00 03 03 0A 6F 03 0A 67 E5 DD 5E F8 +R 00 00 01 00 +T 8B 00 00 00 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 91 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 98 00 00 00 E1 A7 ED 42 28 23 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0B 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 21 1C 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T AC 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T B2 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 DD 36 FA 01 DD 36 FB 00 18 68 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T C9 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T D0 00 00 00 75 FC DD 74 FD 7D A4 3C 28 4F +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T E2 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T E9 00 00 00 75 FE DD 74 FF 7D A4 3C 28 11 DD +R 00 00 01 00 +T F4 00 00 00 6E FC DD 66 FD DD 4E FE DD 46 FF +R 00 00 01 00 +T FF 00 00 00 A7 ED 42 28 23 +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0B 00 +T 0B 01 00 00 +R 00 00 01 00 +T 0B 01 00 00 21 3C 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 12 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 18 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 DD 36 FA 01 DD 36 FB 00 18 02 +R 00 00 01 00 +T 27 01 00 00 +R 00 00 01 00 +T 27 01 00 00 18 98 +R 00 00 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 31 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T 38 01 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 40 01 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 47 01 00 00 FA DD B6 FB 28 05 +R 00 00 01 00 +T 4D 01 00 00 +R 00 00 01 00 +T 4D 01 00 00 21 FF FF 18 1C +R 00 00 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0B 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 21 53 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 60 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 66 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 6B 01 00 00 +R 00 00 01 00 +T 6B 01 00 00 21 00 00 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 63 70 5F 61 63 6B 28 29 00 +R 00 00 02 00 +T 0A 00 00 00 +R 00 00 02 00 +T 0A 00 00 00 4C 43 50 20 41 43 4B 3A 20 77 72 +R 00 00 02 00 +T 15 00 00 00 6F 6E 67 20 49 44 00 +R 00 00 02 00 +T 1C 00 00 00 +R 00 00 02 00 +T 1C 00 00 00 4C 43 50 20 41 43 4B 3A 20 62 75 +R 00 00 02 00 +T 27 00 00 00 66 66 65 72 20 6C 65 6E 67 74 68 +R 00 00 02 00 +T 32 00 00 00 20 6D 69 73 6D 61 74 63 68 00 +R 00 00 02 00 +T 3C 00 00 00 +R 00 00 02 00 +T 3C 00 00 00 4C 43 50 20 41 43 4B 3A 20 64 61 +R 00 00 02 00 +T 47 00 00 00 74 61 20 6D 69 73 6D 61 74 63 68 +R 00 00 02 00 +T 52 00 00 00 00 +R 00 00 02 00 +T 53 00 00 00 +R 00 00 02 00 +T 53 00 00 00 4C 43 50 20 41 43 4B 3A 20 76 61 +R 00 00 02 00 +T 5E 00 00 00 6C 69 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_check.rel b/src/nos/lib/ppp_lib/lcp_check.rel new file mode 100644 index 00000000..386916d7 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_check.rel @@ -0,0 +1,474 @@ +XL4 +H 3 areas 13 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_OR_L03 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _rdclock Ref00000000 +S _pull32 Ref00000000 +S _pull16 Ref00000000 +S ?S_LSH_L02 Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?L_ORASG_L03 Ref00000000 +S _pull8 Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 435 flags 0 +S _lcp_check Def00000000 +A CSTR size BA flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 0C DD +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 66 0D 23 5E 16 00 1B 1B DD 73 FC +R 00 00 01 00 +T 14 00 00 00 DD 72 FD DD 36 FE 02 DD 36 FF 00 +R 00 00 01 00 +T 1F 00 00 00 DD 6E 0C DD 66 0D 5E CD +R 00 00 01 00 +T 27 00 00 00 00 00 00 00 01 08 00 A0 03 00 00 +R 00 00 01 00 02 04 0F 00 00 0B 01 00 +T 2E 00 00 00 3E 00 00 00 42 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 32 00 00 00 21 02 00 00 A0 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 36 00 00 00 A7 02 00 00 A0 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 3A 00 00 00 6A 03 00 00 85 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 21 18 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 49 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 51 00 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 58 00 00 00 E1 73 23 72 21 00 00 39 7E D6 02 +R 00 00 01 00 +T 63 00 00 00 77 23 7E DE 00 77 3A 00 00 00 00 +R 00 00 01 00 02 0B 11 00 +T 6C 00 00 00 E6 08 28 21 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 21 18 00 DD 4E 0A DD 46 0B 09 4E +R 00 00 01 00 +T 7B 00 00 00 23 46 C5 21 00 00 00 00 E5 2A +R 00 00 01 00 00 08 02 00 +T 83 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 2B 0A 0B 00 +T 89 00 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 90 00 00 00 E1 +R 00 00 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 21 18 00 DD 4E 0A DD 46 0B 09 46 +R 00 00 01 00 +T 9C 00 00 00 23 66 68 01 80 00 A7 ED 42 30 19 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 21 18 00 DD 4E 0A DD 46 0B 09 36 +R 00 00 01 00 +T B2 00 00 00 80 23 36 00 DD 36 FE 03 DD 36 FF +R 00 00 01 00 +T BD 00 00 00 00 18 2C +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 21 18 00 DD 4E 0A DD 46 0B 09 4E +R 00 00 01 00 +T CB 00 00 00 23 46 21 00 10 A7 ED 42 30 17 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 21 18 00 DD 4E 0A DD 46 0B 09 36 +R 00 00 01 00 +T E0 00 00 00 00 23 36 10 DD 36 FE 03 DD 36 FF +R 00 00 01 00 +T EB 00 00 00 00 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 +R 00 00 01 00 +T EC 00 00 00 DD 7E 0E DD B6 0F 28 4B DD 6E 0A +R 00 00 01 00 +T F7 00 00 00 DD 66 0B 23 23 7E E6 02 28 3E 21 +R 00 00 01 00 +T 02 01 00 00 18 00 DD 4E 0A DD 46 0B 09 5E 23 +R 00 00 01 00 +T 0D 01 00 00 56 21 04 00 09 46 23 66 68 A7 ED +R 00 00 01 00 +T 18 01 00 00 52 30 24 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 21 18 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 26 01 00 00 21 04 00 09 5E 23 56 E1 73 23 72 +R 00 00 01 00 +T 31 01 00 00 21 04 00 09 46 23 66 68 DD 75 FE +R 00 00 01 00 +T 3C 01 00 00 DD 74 FF +R 00 00 01 00 +T 3F 01 00 00 +R 00 00 01 00 +T 3F 01 00 00 C3 AA 03 00 00 +R 00 00 01 00 00 05 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 4A 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 51 01 00 00 21 1A 00 DD 5E 0A DD 56 0B 19 D1 +R 00 00 01 00 +T 5C 01 00 00 73 23 72 23 71 23 70 21 00 00 39 +R 00 00 01 00 +T 67 01 00 00 7E D6 04 77 23 7E DE 00 77 3A +R 00 00 01 00 +T 71 01 00 00 00 00 00 00 E6 08 28 27 +R 00 00 01 00 02 04 11 00 +T 77 01 00 00 +R 00 00 01 00 +T 77 01 00 00 21 1A 00 DD 4E 0A DD 46 0B 09 4E +R 00 00 01 00 +T 82 01 00 00 23 46 23 5E 23 56 D5 C5 21 +R 00 00 01 00 +T 8B 01 00 00 15 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 09 00 +T 92 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0B 00 02 0A 0B 00 +T 98 01 00 00 00 00 00 00 E1 E1 E1 E1 +R 00 00 01 00 02 04 00 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 DD 7E 0E DD B6 0F 28 0D DD 6E 0A +R 00 00 01 00 +T A9 01 00 00 DD 66 0B 23 23 7E E6 04 28 6B +R 00 00 01 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 21 06 00 DD 4E 0A DD 46 0B 09 5E +R 00 00 01 00 +T BE 01 00 00 23 56 23 4E 23 46 C5 D5 21 1A 00 +R 00 00 01 00 +T C9 01 00 00 DD 4E 0A DD 46 0B 09 5E 23 56 23 +R 00 00 01 00 +T D4 01 00 00 4E 23 46 EB CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 09 02 00 +T DD 01 00 00 21 1A 00 DD 4E 0A DD 46 0B 09 4E +R 00 00 01 00 +T E8 01 00 00 23 46 23 5E 23 56 69 60 C1 A7 ED +R 00 00 01 00 +T F3 01 00 00 42 C1 20 05 EB ED 42 28 22 +R 00 00 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 21 1A 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 07 02 00 00 21 06 00 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 12 02 00 00 E1 CD 00 00 00 00 DD 36 FE 03 DD +R 00 00 01 00 02 06 0D 00 +T 1B 02 00 00 36 FF 00 +R 00 00 01 00 +T 1E 02 00 00 +R 00 00 01 00 +T 1E 02 00 00 C3 AA 03 00 00 +R 00 00 01 00 00 05 01 00 +T 21 02 00 00 +R 00 00 01 00 +T 21 02 00 00 21 1E 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 2C 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 34 02 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 3B 02 00 00 E1 73 23 72 21 00 00 39 7E D6 02 +R 00 00 01 00 +T 46 02 00 00 77 23 7E DE 00 77 3A 00 00 00 00 +R 00 00 01 00 02 0B 11 00 +T 4F 02 00 00 E6 08 28 21 +R 00 00 01 00 +T 53 02 00 00 +R 00 00 01 00 +T 53 02 00 00 21 1E 00 DD 4E 0A DD 46 0B 09 4E +R 00 00 01 00 +T 5E 02 00 00 23 46 C5 21 30 00 00 00 E5 2A +R 00 00 01 00 00 08 02 00 +T 66 02 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 2B 0A 0B 00 +T 6C 02 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 73 02 00 00 E1 +R 00 00 01 00 +T 74 02 00 00 +R 00 00 01 00 +T 74 02 00 00 21 1E 00 DD 4E 0A DD 46 0B 09 4E +R 00 00 01 00 +T 7F 02 00 00 23 46 21 23 C0 A7 ED 42 20 02 +R 00 00 01 00 +T 89 02 00 00 +R 00 00 01 00 +T 89 02 00 00 18 19 +R 00 00 01 00 +T 8B 02 00 00 +R 00 00 01 00 +T 8B 02 00 00 21 1E 00 DD 4E 0A DD 46 0B 09 36 +R 00 00 01 00 +T 96 02 00 00 23 23 36 C0 DD 36 FE 03 DD 36 FF +R 00 00 01 00 +T A1 02 00 00 00 18 00 +R 00 00 01 00 +T A4 02 00 00 +R 00 00 01 00 +T A4 02 00 00 C3 AA 03 00 00 +R 00 00 01 00 00 05 01 00 +T A7 02 00 00 +R 00 00 01 00 +T A7 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T AF 02 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T B6 02 00 00 21 22 00 DD 5E 0A DD 56 0B 19 D1 +R 00 00 01 00 +T C1 02 00 00 73 23 72 23 71 23 70 21 00 00 39 +R 00 00 01 00 +T CC 02 00 00 7E D6 04 77 23 7E DE 00 77 3A +R 00 00 01 00 +T D6 02 00 00 00 00 00 00 E6 08 28 27 +R 00 00 01 00 02 04 11 00 +T DC 02 00 00 +R 00 00 01 00 +T DC 02 00 00 21 22 00 DD 4E 0A DD 46 0B 09 4E +R 00 00 01 00 +T E7 02 00 00 23 46 23 5E 23 56 D5 C5 21 +R 00 00 01 00 +T F0 02 00 00 53 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 09 00 +T F7 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0B 00 02 0A 0B 00 +T FD 02 00 00 00 00 00 00 E1 E1 E1 E1 +R 00 00 01 00 02 04 00 00 +T 03 03 00 00 +R 00 00 01 00 +T 03 03 00 00 21 22 00 DD 4E 0A DD 46 0B 09 7E +R 00 00 01 00 +T 0E 03 00 00 23 B6 23 B6 23 B6 28 32 21 22 00 +R 00 00 01 00 +T 19 03 00 00 DD 4E 04 DD 46 05 09 5E 23 56 23 +R 00 00 01 00 +T 24 03 00 00 4E 23 46 C5 D5 21 4C 00 DD 4E 04 +R 00 00 01 00 +T 2F 03 00 00 DD 46 05 09 4E 23 46 23 5E 23 56 +R 00 00 01 00 +T 3A 03 00 00 69 60 C1 A7 ED 42 C1 20 25 EB ED +R 00 00 01 00 +T 45 03 00 00 42 20 20 +R 00 00 01 00 +T 48 03 00 00 +R 00 00 01 00 +T 48 03 00 00 +R 00 00 01 00 +T 48 03 00 00 +R 00 00 01 00 +T 48 03 00 00 21 22 00 DD 4E 0A DD 46 0B 09 E5 +R 00 00 01 00 +T 53 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 59 03 00 00 00 00 00 00 EB E1 CD 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0B 03 00 +T 60 03 00 00 DD 36 FE 03 DD 36 FF 00 +R 00 00 01 00 +T 68 03 00 00 +R 00 00 01 00 +T 68 03 00 00 18 40 +R 00 00 01 00 +T 6A 03 00 00 +R 00 00 01 00 +T 6A 03 00 00 3A 00 00 00 00 E6 08 28 12 +R 00 00 01 00 02 05 11 00 +T 71 03 00 00 +R 00 00 01 00 +T 71 03 00 00 21 76 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 09 00 +T 78 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 7E 03 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 83 03 00 00 +R 00 00 01 00 +T 83 03 00 00 18 25 +R 00 00 01 00 +T 85 03 00 00 +R 00 00 01 00 +T 85 03 00 00 3A 00 00 00 00 E6 08 28 12 +R 00 00 01 00 02 05 11 00 +T 8C 03 00 00 +R 00 00 01 00 +T 8C 03 00 00 21 98 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 09 00 +T 93 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T 99 03 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 9E 03 00 00 +R 00 00 01 00 +T 9E 03 00 00 18 0A +R 00 00 01 00 +T A0 03 00 00 +R 00 00 01 00 +T A0 03 00 00 +R 00 00 01 00 +T A0 03 00 00 DD 36 FE 04 DD 36 FF 00 18 00 +R 00 00 01 00 +T AA 03 00 00 +R 00 00 01 00 +T AA 03 00 00 DD 6E 0C DD 66 0D 3E 08 BE 38 1E +R 00 00 01 00 +T B5 03 00 00 DD 6E 0A DD 66 0B E5 DD 6E 0C DD +R 00 00 01 00 +T C0 03 00 00 66 0D 46 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T C9 03 00 00 E1 7E A3 47 23 7E A2 B0 20 08 +R 00 00 01 00 +T D3 03 00 00 +R 00 00 01 00 +T D3 03 00 00 +R 00 00 01 00 +T D3 03 00 00 +R 00 00 01 00 +T D3 03 00 00 DD 36 FE 04 DD 36 FF 00 +R 00 00 01 00 +T DB 03 00 00 +R 00 00 01 00 +T DB 03 00 00 DD CB FD 7E 28 05 +R 00 00 01 00 +T E1 03 00 00 +R 00 00 01 00 +T E1 03 00 00 21 FF FF 18 4C +R 00 00 01 00 +T E6 03 00 00 +R 00 00 01 00 +T E6 03 00 00 DD 7E 0E DD B6 0F 20 3E DD 4E FC +R 00 00 01 00 +T F1 03 00 00 DD 46 FD 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0C 00 +T FA 03 00 00 30 30 +R 00 00 01 00 +T FC 03 00 00 +R 00 00 01 00 +T FC 03 00 00 +R 00 00 01 00 +T FC 03 00 00 +R 00 00 01 00 +T FC 03 00 00 +R 00 00 01 00 +T FC 03 00 00 DD 4E FC DD 46 FD 0B DD 71 FC DD +R 00 00 01 00 +T 07 04 00 00 70 FD 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0C 00 +T 10 04 00 00 30 1A +R 00 00 01 00 +T 12 04 00 00 +R 00 00 01 00 +T 12 04 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 1A 04 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T 21 04 00 00 A4 3C 20 05 +R 00 00 01 00 +T 25 04 00 00 +R 00 00 01 00 +T 25 04 00 00 21 FF FF 18 08 +R 00 00 01 00 +T 2A 04 00 00 +R 00 00 01 00 +T 2A 04 00 00 18 D0 +R 00 00 01 00 +T 2C 04 00 00 +R 00 00 01 00 +T 2C 04 00 00 +R 00 00 01 00 +T 2C 04 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 32 04 00 00 +R 00 00 01 00 +T 32 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 20 20 20 63 68 65 63 6B 69 6E +R 00 00 02 00 +T 0B 00 00 00 67 20 4D 52 55 3A 20 25 64 00 +R 00 00 02 00 +T 15 00 00 00 +R 00 00 02 00 +T 15 00 00 00 20 20 20 20 63 68 65 63 6B 69 6E +R 00 00 02 00 +T 20 00 00 00 67 20 41 43 43 4D 3A 20 30 78 25 +R 00 00 02 00 +T 2B 00 00 00 30 38 6C 78 00 +R 00 00 02 00 +T 30 00 00 00 +R 00 00 02 00 +T 30 00 00 00 20 20 20 20 63 68 65 63 6B 69 6E +R 00 00 02 00 +T 3B 00 00 00 67 20 41 75 74 68 20 50 72 6F 74 +R 00 00 02 00 +T 46 00 00 00 6F 63 6F 6C 3A 20 30 78 25 30 34 +R 00 00 02 00 +T 51 00 00 00 78 00 +R 00 00 02 00 +T 53 00 00 00 +R 00 00 02 00 +T 53 00 00 00 20 20 20 20 63 68 65 63 6B 69 6E +R 00 00 02 00 +T 5E 00 00 00 67 20 4D 61 67 69 63 20 4E 75 6D +R 00 00 02 00 +T 69 00 00 00 62 65 72 3A 20 30 78 25 30 38 6C +R 00 00 02 00 +T 74 00 00 00 78 00 +R 00 00 02 00 +T 76 00 00 00 +R 00 00 02 00 +T 76 00 00 00 20 20 20 20 63 68 65 63 6B 69 6E +R 00 00 02 00 +T 81 00 00 00 67 20 50 72 6F 74 6F 63 6F 6C 20 +R 00 00 02 00 +T 8C 00 00 00 63 6F 6D 70 72 65 73 73 69 6F 6E +R 00 00 02 00 +T 97 00 00 00 00 +R 00 00 02 00 +T 98 00 00 00 +R 00 00 02 00 +T 98 00 00 00 20 20 20 20 63 68 65 63 6B 69 6E +R 00 00 02 00 +T A3 00 00 00 67 20 41 64 64 72 2F 43 74 6C 20 +R 00 00 02 00 +T AE 00 00 00 63 6F 6D 70 72 65 73 73 69 6F 6E +R 00 00 02 00 +T B9 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_closing.rel b/src/nos/lib/ppp_lib/lcp_closing.rel new file mode 100644 index 00000000..2216695d --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_closing.rel @@ -0,0 +1,30 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _pap_down Ref00000000 +S _fsm_down Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 40 flags 0 +S _lcp_closing Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 08 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 23 23 36 04 21 +R 00 00 01 00 +T 1E 00 00 00 42 00 DD 4E FE DD 46 FF 09 EB 3E +R 00 00 01 00 +T 29 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 2E 00 00 00 00 00 00 00 21 24 00 09 EB 3E +R 00 00 01 00 02 04 00 00 +T 36 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 3B 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 diff --git a/src/nos/lib/ppp_lib/lcp_constants.rel b/src/nos/lib/ppp_lib/lcp_constants.rel new file mode 100644 index 00000000..63a85273 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_constants.rel @@ -0,0 +1,43 @@ +XL4 +H 5 areas E global symbols +S _lcp_free Ref00000000 +S _lcp_reset Ref00000000 +S _lcp_makereq Ref00000000 +S _lcp_starting Ref00000000 +S _lcp_closing Ref00000000 +S _lcp_ack Ref00000000 +S _lcp_opening Ref00000000 +S _lcp_stopping Ref00000000 +S _lcp_nak Ref00000000 +S _lcp_reject Ref00000000 +S .__.ABS. Def00000000 +S _lcp_request Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size 4 flags 0 +A IDATA0 size 2F flags 0 +S _lcp_constants Def00000000 +A CDATA0 size 2F flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4C 63 70 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 21 C0 FE 0F 00 14 0A +R 00 00 04 00 00 04 02 00 +T 09 00 00 00 0A B8 0B 00 00 00 00 00 00 +R 00 00 04 00 4A 09 00 00 +T 11 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 01 00 4A 08 03 00 +T 17 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 06 00 4A 08 04 00 +T 1D 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 07 00 4A 08 02 00 +T 23 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 0B 00 4A 08 05 00 +T 29 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 08 00 4A 08 09 00 diff --git a/src/nos/lib/ppp_lib/lcp_default.rel b/src/nos/lib/ppp_lib/lcp_default.rel new file mode 100644 index 00000000..8cd6e3ac --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_default.rel @@ -0,0 +1,17 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 14 flags 0 +S _lcp_default Def00000000 +A CDATA0 size 14 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 DC 05 FF FF FF FF 00 00 +R 00 00 03 00 +T 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/lcp_free.rel b/src/nos/lib/ppp_lib/lcp_free.rel new file mode 100644 index 00000000..9b41d0f0 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_free.rel @@ -0,0 +1,13 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6 flags 0 +S _lcp_free Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 02 0A 00 00 diff --git a/src/nos/lib/ppp_lib/lcp_init.rel b/src/nos/lib/ppp_lib/lcp_init.rel new file mode 100644 index 00000000..db1da0ac --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_init.rel @@ -0,0 +1,83 @@ +XL4 +H 3 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _lcp_default Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fsm_init Ref00000000 +S _lcp_negotiate Ref00000000 +S .__.ABS. Def00000000 +S _callocw Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _lcp_constants Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DC flags 0 +S _lcp_init Def00000000 +A CSTR size B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 06 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 4E 02 DD 46 03 09 DD 75 FC DD 74 +R 00 00 01 00 +T 14 00 00 00 FD 21 05 00 09 5E 16 00 ED 53 +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 0A 6F 03 0A 67 22 +R 00 00 01 00 02 04 0C 00 +T 26 00 00 00 00 00 00 00 7B E6 80 28 12 +R 00 00 01 00 02 04 07 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 07 00 +T 34 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 3A 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 4A 00 00 00 5E 02 DD 56 03 73 23 72 21 1A 00 +R 00 00 01 00 +T 55 00 00 00 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 06 0B 00 +T 5A 00 00 00 00 00 00 00 21 1C 00 09 E5 01 +R 00 00 01 00 8B 04 0B 00 +T 61 00 00 00 54 00 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 69 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 70 00 00 00 FE DD 74 FF 4D 44 E1 71 23 70 59 +R 00 00 01 00 +T 7B 00 00 00 50 13 13 21 00 00 00 00 01 14 00 +R 00 00 01 00 02 08 01 00 +T 84 00 00 00 ED B0 2A 00 00 00 00 E5 DD 6E FE +R 00 00 01 00 02 07 04 00 +T 8D 00 00 00 DD 66 FF C1 71 23 70 21 2C 00 DD +R 00 00 01 00 +T 98 00 00 00 4E FE DD 46 FF 09 EB 21 +R 00 00 01 00 +T A0 00 00 00 00 00 00 00 01 14 00 ED B0 21 +R 00 00 01 00 02 04 01 00 +T A8 00 00 00 40 00 DD 4E FE DD 46 FF 09 EB 21 +R 00 00 01 00 +T B3 00 00 00 00 00 00 00 01 14 00 ED B0 21 +R 00 00 01 00 02 04 01 00 +T BB 00 00 00 2A 00 DD 4E FE DD 46 FF 09 ED 4B +R 00 00 01 00 +T C6 00 00 00 00 00 00 00 71 23 70 DD 5E FC DD +R 00 00 01 00 02 04 04 00 +T CF 00 00 00 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T D4 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T DA 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 63 70 5F 69 6E 69 74 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_makeoptions.rel b/src/nos/lib/ppp_lib/lcp_makeoptions.rel new file mode 100644 index 00000000..be24d2c2 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_makeoptions.rel @@ -0,0 +1,80 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _lcp_option_length Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _lcp_option Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 7E flags 0 +S _lcp_makeoptions Def00000000 +A CSTR size 12 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 3A +R 00 00 01 00 02 05 06 00 +T 06 00 00 00 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 04 0B 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 13 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 19 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 DD 4E FE DD 46 FF 21 08 00 CD +R 00 00 01 00 +T 30 00 00 00 00 00 00 00 38 47 +R 00 00 01 00 02 04 08 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 46 FE 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 3D 00 00 00 7B DD A6 0A 47 7A DD A6 0B B0 28 +R 00 00 01 00 +T 48 00 00 00 28 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 21 00 00 E5 21 00 00 00 00 DD 4E +R 00 00 01 00 02 09 02 00 +T 52 00 00 00 FE DD 46 FF 09 5E D5 C5 DD 4E 04 +R 00 00 01 00 +T 5D 00 00 00 DD 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 67 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 6C 00 00 00 00 00 00 00 E1 E1 E1 +R 00 00 01 00 02 04 00 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 18 AB +R 00 00 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 63 70 5F 6D 61 6B 65 6F 70 74 +R 00 00 02 00 +T 0B 00 00 00 69 6F 6E 73 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_makereq.rel b/src/nos/lib/ppp_lib/lcp_makereq.rel new file mode 100644 index 00000000..1ce87cf0 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_makereq.rel @@ -0,0 +1,51 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _lcp_makeoptions Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 65 flags 0 +S _lcp_makereq Def00000000 +A CSTR size E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 1C 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FC DD 74 FD AF DD 77 FE DD 77 +R 00 00 01 00 +T 1F 00 00 00 FF 3A 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 06 08 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 2E 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 34 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 21 16 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 44 00 00 00 23 56 D5 21 16 00 09 4D 44 21 +R 00 00 01 00 +T 4E 00 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 56 00 00 00 00 00 00 00 CD 00 00 00 00 E1 DD +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 5D 00 00 00 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0A 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 63 70 5F 6D 61 6B 65 72 65 71 +R 00 00 02 00 +T 0B 00 00 00 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_nak.rel b/src/nos/lib/ppp_lib/lcp_nak.rel new file mode 100644 index 00000000..7be575b8 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_nak.rel @@ -0,0 +1,329 @@ +XL4 +H 3 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ntohopt Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _lcp_check Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +S _PPPiface Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 28F flags 0 +S _lcp_nak Def00000000 +A CSTR size 99 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF 21 1C 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 F2 DD 74 F3 DD 75 F4 DD 74 F5 +R 00 00 01 00 +T 1F 00 00 00 03 03 0A 6F 03 0A 67 01 00 00 DD +R 00 00 01 00 +T 2A 00 00 00 75 F6 DD 74 F7 DD 71 F8 DD 70 F9 +R 00 00 01 00 +T 35 00 00 00 AF DD 77 FC DD 77 FD 3A +R 00 00 01 00 +T 3D 00 00 00 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 04 0E 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 4A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 50 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 6E 02 DD 66 03 23 E5 DD 6E 04 +R 00 00 01 00 +T 60 00 00 00 DD 66 05 23 7E E1 BE 28 2D +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 21 0A 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 77 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 7D 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 8A 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 91 00 00 00 FF FF C3 8C 02 00 00 +R 00 00 01 00 00 07 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 DD 6E F8 DD 66 F9 E5 DD 6E F6 DD +R 00 00 01 00 +T A1 00 00 00 66 F7 E5 01 00 00 21 00 00 CD +R 00 00 01 00 +T AB 00 00 00 00 00 00 00 D2 62 02 00 00 DD 4E +R 00 00 01 00 02 04 07 00 00 09 01 00 +T B2 00 00 00 0A DD 46 0B 21 08 00 39 5D 54 3E +R 00 00 01 00 +T BD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T C2 00 00 00 00 00 00 00 7D A4 3C CA +R 00 00 01 00 02 04 00 00 +T C8 00 00 00 62 02 00 00 +R 00 00 01 00 00 04 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 21 04 00 39 DD 5E FB 01 00 00 51 +R 00 00 01 00 +T D5 00 00 00 CD 00 00 00 00 CB 78 28 2D +R 00 00 01 00 02 05 0D 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 21 1C 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T EA 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T F0 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T FD 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 04 01 00 00 FF FF C3 8C 02 00 00 +R 00 00 01 00 00 07 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 3E 08 DD BE FA 30 1C +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 21 37 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 1E 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 24 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 C3 D0 01 00 00 +R 00 00 01 00 00 05 01 00 +T 2C 01 00 00 +R 00 00 01 00 +T 2C 01 00 00 DD 6E FA 26 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T 37 01 00 00 CD 00 00 00 00 38 1C 21 16 00 DD +R 00 00 01 00 02 05 0A 00 +T 40 01 00 00 4E F4 DD 46 F5 09 DD 46 FA 11 +R 00 00 01 00 +T 4A 01 00 00 01 00 CD 00 00 00 00 7E A3 47 23 +R 00 00 01 00 02 07 05 00 +T 53 01 00 00 7E A2 B0 20 6D +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 21 16 00 DD 4E F4 DD 46 F5 09 DD +R 00 00 01 00 +T 63 01 00 00 46 FA 11 01 00 CD 00 00 00 00 7E +R 00 00 01 00 02 0A 05 00 +T 6C 01 00 00 A3 47 23 7E A2 B0 28 2D +R 00 00 01 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 21 54 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 82 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 88 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 95 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 9C 01 00 00 FF FF C3 8C 02 00 00 +R 00 00 01 00 00 07 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 DD 46 FA 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T AA 01 00 00 21 16 00 DD 4E F4 DD 46 F5 09 7E +R 00 00 01 00 +T B5 01 00 00 B3 77 23 7E B2 77 DD 36 FC 09 DD +R 00 00 01 00 +T C0 01 00 00 36 FD 00 18 0B +R 00 00 01 00 +T C5 01 00 00 +R 00 00 01 00 +T C5 01 00 00 DD 4E FA 06 00 DD 71 FC DD 70 FD +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 21 00 00 E5 21 0A 00 39 E5 DD 6E +R 00 00 01 00 +T DB 01 00 00 F4 DD 66 F5 E5 DD 4E F2 DD 46 F3 +R 00 00 01 00 +T E6 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T EE 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T F5 01 00 00 F1 F1 DD 75 FE DD 74 FF 7D A4 3C +R 00 00 01 00 +T 00 02 00 00 20 2C +R 00 00 01 00 +T 02 02 00 00 +R 00 00 01 00 +T 02 02 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 09 02 00 00 +R 00 00 01 00 +T 09 02 00 00 21 71 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 10 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 16 02 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1B 02 00 00 +R 00 00 01 00 +T 1B 02 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 23 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 2A 02 00 00 FF FF 18 5E +R 00 00 01 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 3E 04 DD AE FE DD B6 FF 20 27 3E +R 00 00 01 00 +T 39 02 00 00 08 DD BE FA 38 20 +R 00 00 01 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 DD 46 FA 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 48 02 00 00 7B 2F 5F 7A 2F 57 21 16 00 DD 4E +R 00 00 01 00 +T 53 02 00 00 F4 DD 46 F5 09 7E A3 77 23 7E A2 +R 00 00 01 00 +T 5E 02 00 00 77 +R 00 00 01 00 +T 5F 02 00 00 +R 00 00 01 00 +T 5F 02 00 00 C3 96 00 00 00 +R 00 00 01 00 00 05 01 00 +T 62 02 00 00 +R 00 00 01 00 +T 62 02 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 69 02 00 00 +R 00 00 01 00 +T 69 02 00 00 21 8A 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 70 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 76 02 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 7B 02 00 00 +R 00 00 01 00 +T 7B 02 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 83 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 8A 02 00 00 00 00 +R 00 00 01 00 +T 8C 02 00 00 +R 00 00 01 00 +T 8C 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 63 70 5F 6E 61 6B 28 29 00 +R 00 00 02 00 +T 0A 00 00 00 +R 00 00 02 00 +T 0A 00 00 00 4C 43 50 20 4E 41 4B 3A 20 77 72 +R 00 00 02 00 +T 15 00 00 00 6F 6E 67 20 49 44 00 +R 00 00 02 00 +T 1C 00 00 00 +R 00 00 02 00 +T 1C 00 00 00 4C 43 50 20 4E 41 4B 3A 20 62 61 +R 00 00 02 00 +T 27 00 00 00 64 20 68 65 61 64 65 72 20 6C 65 +R 00 00 02 00 +T 32 00 00 00 6E 67 74 68 00 +R 00 00 02 00 +T 37 00 00 00 +R 00 00 02 00 +T 37 00 00 00 4C 43 50 20 4E 41 4B 3A 20 6F 70 +R 00 00 02 00 +T 42 00 00 00 74 69 6F 6E 20 6F 75 74 20 6F 66 +R 00 00 02 00 +T 4D 00 00 00 20 72 61 6E 67 65 00 +R 00 00 02 00 +T 54 00 00 00 +R 00 00 02 00 +T 54 00 00 00 4C 43 50 20 4E 41 4B 3A 20 6F 70 +R 00 00 02 00 +T 5F 00 00 00 74 69 6F 6E 20 6F 75 74 20 6F 66 +R 00 00 02 00 +T 6A 00 00 00 20 6F 72 64 65 72 00 +R 00 00 02 00 +T 71 00 00 00 +R 00 00 02 00 +T 71 00 00 00 4C 43 50 20 4E 41 4B 3A 20 72 61 +R 00 00 02 00 +T 7C 00 00 00 6E 20 6F 75 74 20 6F 66 20 64 61 +R 00 00 02 00 +T 87 00 00 00 74 61 00 +R 00 00 02 00 +T 8A 00 00 00 +R 00 00 02 00 +T 8A 00 00 00 4C 43 50 20 4E 41 4B 3A 20 76 61 +R 00 00 02 00 +T 95 00 00 00 6C 69 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_negotiate.rel b/src/nos/lib/ppp_lib/lcp_negotiate.rel new file mode 100644 index 00000000..82522b10 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_negotiate.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _lcp_negotiate Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 AE 01 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/lcp_opening.rel b/src/nos/lib/ppp_lib/lcp_opening.rel new file mode 100644 index 00000000..2649f154 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_opening.rel @@ -0,0 +1,139 @@ +XL4 +H 3 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ppp_ready Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _PPPiface Ref00000000 +S _pap_local Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _pap_remote Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 167 flags 0 +S _lcp_opening Def00000000 +A CSTR size 29 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 1C 00 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 4E 02 DD 46 03 09 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 FC DD 74 FD 21 08 00 09 7E 23 +R 00 00 01 00 +T 1F 00 00 00 66 6F 46 23 66 68 DD 75 FE DD 74 +R 00 00 01 00 +T 2A 00 00 00 FF 01 10 00 09 46 23 66 68 E5 21 +R 00 00 01 00 +T 35 00 00 00 42 00 DD 4E FC DD 46 FD 09 4E 23 +R 00 00 01 00 +T 40 00 00 00 46 E1 A7 ED 42 28 49 +R 00 00 01 00 +T 47 00 00 00 +R 00 00 01 00 +T 47 00 00 00 21 10 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 52 00 00 00 21 42 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T 5D 00 00 00 23 46 E1 71 23 70 ED 4B +R 00 00 01 00 +T 65 00 00 00 00 00 00 00 21 01 00 CD +R 00 00 01 00 02 04 0C 00 +T 6B 00 00 00 00 00 00 00 30 21 +R 00 00 01 00 02 04 0A 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 21 10 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 7A 00 00 00 23 46 C5 21 00 00 00 00 E5 2A +R 00 00 01 00 00 08 02 00 +T 82 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 2B 0A 09 00 +T 88 00 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 8F 00 00 00 E1 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 9B 00 00 00 23 66 6A 23 23 36 02 21 08 00 09 +R 00 00 01 00 +T A6 00 00 00 56 23 66 6A 11 04 00 19 7E E6 CF +R 00 00 01 00 +T B1 00 00 00 77 21 08 00 09 56 23 66 6A 11 +R 00 00 01 00 +T BB 00 00 00 64 00 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T C3 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T CA 00 00 00 08 00 09 46 23 66 68 01 64 00 09 +R 00 00 01 00 +T D5 00 00 00 AF 77 23 77 21 16 00 DD 4E FC DD +R 00 00 01 00 +T E0 00 00 00 46 FD 09 7E E6 08 28 2C +R 00 00 01 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 21 1E 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T F3 00 00 00 23 46 21 23 C0 A7 ED 42 20 17 +R 00 00 01 00 +T FD 00 00 00 +R 00 00 01 00 +T FD 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 08 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 0D 01 00 00 00 00 00 00 CD 00 00 00 00 18 00 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 21 40 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 1F 01 00 00 E6 08 28 2C +R 00 00 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 21 48 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T 2E 01 00 00 23 46 21 23 C0 A7 ED 42 20 17 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 43 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 48 01 00 00 00 00 00 00 CD 00 00 00 00 18 00 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 5A 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 5F 01 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 65 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 20 20 20 53 65 74 20 6E 65 77 +R 00 00 02 00 +T 0B 00 00 00 20 4D 54 55 20 66 6F 72 20 6F 75 +R 00 00 02 00 +T 16 00 00 00 74 67 6F 69 6E 67 20 70 61 63 6B +R 00 00 02 00 +T 21 00 00 00 65 74 73 3A 20 25 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_option.rel b/src/nos/lib/ppp_lib/lcp_option.rel new file mode 100644 index 00000000..db8d3991 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_option.rel @@ -0,0 +1,319 @@ +XL4 +H 3 areas 10 global symbols +S _put16 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alloc_mbuf Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _pull8 Ref00000000 +S ?C_S_SWITCH_L06 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _append Ref00000000 +S _put32 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 298 flags 0 +S _lcp_option Def00000000 +A CSTR size CF flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 5E 0C 16 +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 00 1B 1B DD 73 FE DD 72 FF DD 5E +R 00 00 01 00 +T 14 00 00 00 0C 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 1A 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 21 00 00 00 FA DD 74 FB 7D B4 20 03 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 C3 95 02 00 00 +R 00 00 01 00 00 05 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 21 0A 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T 37 00 00 00 23 66 68 DD 75 FC DD 74 FD 23 DD +R 00 00 01 00 +T 42 00 00 00 75 FC DD 74 FD 2B DD 46 0A 70 DD +R 00 00 01 00 +T 4D 00 00 00 6E FC DD 66 FD 23 DD 75 FC DD 74 +R 00 00 01 00 +T 58 00 00 00 FD 2B DD 46 0C 70 DD 5E 0A CD +R 00 00 01 00 +T 62 00 00 00 00 00 00 00 01 08 00 12 02 00 00 +R 00 00 01 00 02 04 0A 00 00 0B 01 00 +T 69 00 00 00 79 00 00 00 C8 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 6D 00 00 00 29 01 00 00 12 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 71 00 00 00 7C 01 00 00 12 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 75 00 00 00 DC 01 00 00 F7 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 84 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 8C 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 93 00 00 00 04 00 39 7E D6 02 77 23 7E DE 00 +R 00 00 01 00 +T 9E 00 00 00 77 3A 00 00 00 00 E6 08 28 1F +R 00 00 01 00 02 06 0E 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T B1 00 00 00 C5 21 00 00 00 00 E5 2A +R 00 00 01 00 00 06 02 00 +T B7 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 2B 0A 07 00 +T BD 00 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T C4 00 00 00 E1 +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 C3 34 02 00 00 +R 00 00 01 00 00 05 01 00 +T C8 00 00 00 +R 00 00 01 00 +T C8 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T D3 00 00 00 23 46 23 5E 23 56 D5 C5 DD 5E FC +R 00 00 01 00 +T DE 00 00 00 DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0D 00 +T E4 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T EB 00 00 00 21 04 00 39 7E D6 04 77 23 7E DE +R 00 00 01 00 +T F6 00 00 00 00 77 3A 00 00 00 00 E6 08 28 27 +R 00 00 01 00 02 07 0E 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 0A 01 00 00 23 46 23 5E 23 56 D5 C5 21 +R 00 00 01 00 +T 13 01 00 00 13 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 05 00 +T 1A 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 20 01 00 00 00 00 00 00 E1 E1 E1 E1 +R 00 00 01 00 02 04 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 C3 34 02 00 00 +R 00 00 01 00 00 05 01 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 21 08 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 34 01 00 00 23 46 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 3D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 42 01 00 00 00 00 00 00 21 04 00 39 7E D6 02 +R 00 00 01 00 02 04 01 00 +T 4B 01 00 00 77 23 7E DE 00 77 3A 00 00 00 00 +R 00 00 01 00 02 0B 0E 00 +T 54 01 00 00 E6 08 28 21 +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 21 08 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 63 01 00 00 23 46 C5 21 2C 00 00 00 E5 2A +R 00 00 01 00 00 08 02 00 +T 6B 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 05 00 2B 0A 07 00 +T 71 01 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 78 01 00 00 E1 +R 00 00 01 00 +T 79 01 00 00 +R 00 00 01 00 +T 79 01 00 00 C3 34 02 00 00 +R 00 00 01 00 00 05 01 00 +T 7C 01 00 00 +R 00 00 01 00 +T 7C 01 00 00 21 0C 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 87 01 00 00 23 46 23 5E 23 56 D5 C5 DD 5E FC +R 00 00 01 00 +T 92 01 00 00 DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0D 00 +T 98 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 01 00 +T 9F 01 00 00 21 04 00 39 7E D6 04 77 23 7E DE +R 00 00 01 00 +T AA 01 00 00 00 77 3A 00 00 00 00 E6 08 28 27 +R 00 00 01 00 02 07 0E 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 21 0C 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T BE 01 00 00 23 46 23 5E 23 56 D5 C5 21 +R 00 00 01 00 +T C7 01 00 00 4D 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 05 00 +T CE 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T D4 01 00 00 00 00 00 00 E1 E1 E1 E1 +R 00 00 01 00 02 04 01 00 +T DA 01 00 00 +R 00 00 01 00 +T DA 01 00 00 18 58 +R 00 00 01 00 +T DC 01 00 00 +R 00 00 01 00 +T DC 01 00 00 3A 00 00 00 00 E6 08 28 12 +R 00 00 01 00 02 05 0E 00 +T E3 01 00 00 +R 00 00 01 00 +T E3 01 00 00 21 6E 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T EA 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T F0 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 18 3D +R 00 00 01 00 +T F7 01 00 00 +R 00 00 01 00 +T F7 01 00 00 3A 00 00 00 00 E6 08 28 12 +R 00 00 01 00 02 05 0E 00 +T FE 01 00 00 +R 00 00 01 00 +T FE 01 00 00 21 8E 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 05 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 0B 02 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 01 00 +T 10 02 00 00 +R 00 00 01 00 +T 10 02 00 00 18 22 +R 00 00 01 00 +T 12 02 00 00 +R 00 00 01 00 +T 12 02 00 00 +R 00 00 01 00 +T 12 02 00 00 3A 00 00 00 00 E6 08 28 19 +R 00 00 01 00 02 05 0E 00 +T 19 02 00 00 +R 00 00 01 00 +T 19 02 00 00 DD 4E 0A 06 00 C5 21 AE 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 22 02 00 00 E5 2A 00 00 00 00 E5 3E +R 00 00 01 00 02 06 05 00 +T 28 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 2D 02 00 00 00 00 00 00 E1 E1 E1 +R 00 00 01 00 02 04 01 00 +T 32 02 00 00 +R 00 00 01 00 +T 32 02 00 00 18 00 +R 00 00 01 00 +T 34 02 00 00 +R 00 00 01 00 +T 34 02 00 00 +R 00 00 01 00 +T 34 02 00 00 DD 4E FE DD 46 FF 0B DD 71 FE DD +R 00 00 01 00 +T 3F 02 00 00 70 FF 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T 48 02 00 00 30 21 +R 00 00 01 00 +T 4A 02 00 00 +R 00 00 01 00 +T 4A 02 00 00 DD 5E 0E DD 56 0F 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 52 02 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 59 02 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 64 02 00 00 74 FD 2B C1 71 18 C9 +R 00 00 01 00 +T 6B 02 00 00 +R 00 00 01 00 +T 6B 02 00 00 21 0C 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 76 02 00 00 5E 0C 16 00 7E 83 77 23 7E 8A 77 +R 00 00 01 00 +T 81 02 00 00 21 00 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 8C 02 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 92 02 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 95 02 00 00 +R 00 00 01 00 +T 95 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T 0B 00 00 00 4D 52 55 3A 20 25 64 00 +R 00 00 02 00 +T 13 00 00 00 +R 00 00 02 00 +T 13 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T 1E 00 00 00 41 43 43 4D 3A 20 30 78 25 30 38 +R 00 00 02 00 +T 29 00 00 00 6C 78 00 +R 00 00 02 00 +T 2C 00 00 00 +R 00 00 02 00 +T 2C 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T 37 00 00 00 41 75 74 68 20 50 72 6F 74 6F 63 +R 00 00 02 00 +T 42 00 00 00 6F 6C 3A 20 30 78 25 30 34 78 00 +R 00 00 02 00 +T 4D 00 00 00 +R 00 00 02 00 +T 4D 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T 58 00 00 00 4D 61 67 69 63 20 4E 75 6D 62 65 +R 00 00 02 00 +T 63 00 00 00 72 3A 20 30 78 25 30 38 6C 78 00 +R 00 00 02 00 +T 6E 00 00 00 +R 00 00 02 00 +T 6E 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T 79 00 00 00 50 72 6F 74 6F 63 6F 6C 20 63 6F +R 00 00 02 00 +T 84 00 00 00 6D 70 72 65 73 73 69 6F 6E 00 +R 00 00 02 00 +T 8E 00 00 00 +R 00 00 02 00 +T 8E 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T 99 00 00 00 41 64 64 72 2F 43 74 6C 20 63 6F +R 00 00 02 00 +T A4 00 00 00 6D 70 72 65 73 73 69 6F 6E 00 +R 00 00 02 00 +T AE 00 00 00 +R 00 00 02 00 +T AE 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T B9 00 00 00 75 6E 69 6D 70 6C 65 6D 65 6E 74 +R 00 00 02 00 +T C4 00 00 00 65 64 20 74 79 70 65 20 25 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_option_length.rel b/src/nos/lib/ppp_lib/lcp_option_length.rel new file mode 100644 index 00000000..2201edb9 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_option_length.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 9 flags 0 +S _lcp_option_length Def00000000 +A CDATA0 size 9 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 04 06 04 04 06 06 02 02 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/lcp_reject.rel b/src/nos/lib/ppp_lib/lcp_reject.rel new file mode 100644 index 00000000..f6f5a240 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_reject.rel @@ -0,0 +1,317 @@ +XL4 +H 3 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ntohopt Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +S _PPPiface Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24A flags 0 +S _lcp_reject Def00000000 +A CSTR size 9C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF 21 1C 00 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 F2 DD 74 F3 DD 75 F4 DD 74 F5 +R 00 00 01 00 +T 1F 00 00 00 03 03 0A 6F 03 0A 67 01 00 00 DD +R 00 00 01 00 +T 2A 00 00 00 75 F6 DD 74 F7 DD 71 F8 DD 70 F9 +R 00 00 01 00 +T 35 00 00 00 AF DD 77 FC DD 77 FD 3A +R 00 00 01 00 +T 3D 00 00 00 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 04 0E 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 4A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 50 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 6E 02 DD 66 03 23 E5 DD 6E 04 +R 00 00 01 00 +T 60 00 00 00 DD 66 05 23 7E E1 BE 28 2D +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 21 0D 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 77 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 7D 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 8A 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 91 00 00 00 FF FF C3 47 02 00 00 +R 00 00 01 00 00 07 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 DD 6E F8 DD 66 F9 E5 DD 6E F6 DD +R 00 00 01 00 +T A1 00 00 00 66 F7 E5 01 00 00 21 00 00 CD +R 00 00 01 00 +T AB 00 00 00 00 00 00 00 D2 1D 02 00 00 DD 4E +R 00 00 01 00 02 04 06 00 00 09 01 00 +T B2 00 00 00 0A DD 46 0B 21 08 00 39 5D 54 3E +R 00 00 01 00 +T BD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T C2 00 00 00 00 00 00 00 7D A4 3C CA +R 00 00 01 00 02 04 00 00 +T C8 00 00 00 1D 02 00 00 +R 00 00 01 00 00 04 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 21 04 00 39 DD 5E FB 01 00 00 51 +R 00 00 01 00 +T D5 00 00 00 CD 00 00 00 00 CB 78 28 2D +R 00 00 01 00 02 05 0D 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 21 1F 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T EA 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T F0 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T FD 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 04 01 00 00 FF FF C3 47 02 00 00 +R 00 00 01 00 00 07 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 3E 08 DD BE FA 30 1B +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 17 01 00 00 +R 00 00 01 00 +T 17 01 00 00 21 3A 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 1E 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 24 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 29 01 00 00 +R 00 00 01 00 +T 29 01 00 00 18 59 +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 DD 6E FA 26 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T 36 01 00 00 CD 00 00 00 00 38 1C 21 16 00 DD +R 00 00 01 00 02 05 09 00 +T 3F 01 00 00 4E F4 DD 46 F5 09 DD 46 FA 11 +R 00 00 01 00 +T 49 01 00 00 01 00 CD 00 00 00 00 7E A3 47 23 +R 00 00 01 00 02 07 04 00 +T 52 01 00 00 7E A2 B0 20 2D +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 21 57 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 65 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 6B 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 78 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 7F 01 00 00 FF FF C3 47 02 00 00 +R 00 00 01 00 00 07 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 DD 4E FB 06 00 0B 0B DD 71 FE DD +R 00 00 01 00 +T 8F 01 00 00 70 FF +R 00 00 01 00 +T 91 01 00 00 +R 00 00 01 00 +T 91 01 00 00 DD 4E FE DD 46 FF 0B DD 71 FE DD +R 00 00 01 00 +T 9C 01 00 00 70 FF 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T A5 01 00 00 30 41 +R 00 00 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T AF 01 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T B6 01 00 00 A4 3C 20 2C +R 00 00 01 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 21 74 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T C8 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T CE 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T DB 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T E2 01 00 00 FF FF 18 61 +R 00 00 01 00 +T E6 01 00 00 +R 00 00 01 00 +T E6 01 00 00 18 A9 +R 00 00 01 00 +T E8 01 00 00 +R 00 00 01 00 +T E8 01 00 00 DD 4E FA 06 00 DD 71 FC DD 70 FD +R 00 00 01 00 +T F3 01 00 00 3E 08 DD BE FA 38 20 +R 00 00 01 00 +T FA 01 00 00 +R 00 00 01 00 +T FA 01 00 00 DD 46 FA 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 03 02 00 00 7B 2F 5F 7A 2F 57 21 16 00 DD 4E +R 00 00 01 00 +T 0E 02 00 00 F4 DD 46 F5 09 7E A3 77 23 7E A2 +R 00 00 01 00 +T 19 02 00 00 77 +R 00 00 01 00 +T 1A 02 00 00 +R 00 00 01 00 +T 1A 02 00 00 C3 96 00 00 00 +R 00 00 01 00 00 05 01 00 +T 1D 02 00 00 +R 00 00 01 00 +T 1D 02 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0E 00 +T 24 02 00 00 +R 00 00 01 00 +T 24 02 00 00 21 8D 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 2B 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 31 02 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 36 02 00 00 +R 00 00 01 00 +T 36 02 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 3E 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 45 02 00 00 00 00 +R 00 00 01 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 63 70 5F 72 65 6A 65 63 74 28 +R 00 00 02 00 +T 0B 00 00 00 29 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 4C 43 50 20 52 45 4A 3A 20 77 72 +R 00 00 02 00 +T 18 00 00 00 6F 6E 67 20 49 44 00 +R 00 00 02 00 +T 1F 00 00 00 +R 00 00 02 00 +T 1F 00 00 00 4C 43 50 20 52 45 4A 3A 20 62 61 +R 00 00 02 00 +T 2A 00 00 00 64 20 68 65 61 64 65 72 20 6C 65 +R 00 00 02 00 +T 35 00 00 00 6E 67 74 68 00 +R 00 00 02 00 +T 3A 00 00 00 +R 00 00 02 00 +T 3A 00 00 00 4C 43 50 20 52 45 4A 3A 20 6F 70 +R 00 00 02 00 +T 45 00 00 00 74 69 6F 6E 20 6F 75 74 20 6F 66 +R 00 00 02 00 +T 50 00 00 00 20 72 61 6E 67 65 00 +R 00 00 02 00 +T 57 00 00 00 +R 00 00 02 00 +T 57 00 00 00 4C 43 50 20 52 45 4A 3A 20 6F 70 +R 00 00 02 00 +T 62 00 00 00 74 69 6F 6E 20 6F 75 74 20 6F 66 +R 00 00 02 00 +T 6D 00 00 00 20 6F 72 64 65 72 00 +R 00 00 02 00 +T 74 00 00 00 +R 00 00 02 00 +T 74 00 00 00 4C 43 50 20 52 45 4A 3A 20 72 61 +R 00 00 02 00 +T 7F 00 00 00 6E 20 6F 75 74 20 6F 66 20 64 61 +R 00 00 02 00 +T 8A 00 00 00 74 61 00 +R 00 00 02 00 +T 8D 00 00 00 +R 00 00 02 00 +T 8D 00 00 00 4C 43 50 20 52 45 4A 3A 20 76 61 +R 00 00 02 00 +T 98 00 00 00 6C 69 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_request.rel b/src/nos/lib/ppp_lib/lcp_request.rel new file mode 100644 index 00000000..7ab3ac52 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_request.rel @@ -0,0 +1,366 @@ +XL4 +H 3 areas 15 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _lcp_makeoptions Ref00000000 +S _ntohopt Ref00000000 +S _fsm_send Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _lcp_check Ref00000000 +S .__.ABS. Def00000000 +S ?S_LSH_L02 Ref00000000 +S _PPPiface Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _fsmCodes Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _lcp_option Ref00000000 +S ?L_SUBASG_L03 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 337 flags 0 +S _lcp_request Def00000000 +A CSTR size 6B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F0 FF 21 1C 00 DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 F0 DD 74 F1 03 03 0A 6F 03 0A +R 00 00 01 00 +T 1F 00 00 00 67 01 00 00 DD 75 F2 DD 74 F3 DD +R 00 00 01 00 +T 2A 00 00 00 71 F4 DD 70 F5 AF DD 77 F6 DD 77 +R 00 00 01 00 +T 35 00 00 00 F7 DD 36 F8 02 DD 36 F9 00 3A +R 00 00 01 00 +T 3F 00 00 00 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 04 13 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 09 00 +T 4C 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 52 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 40 00 DD 4E F0 DD 46 F1 09 AF +R 00 00 01 00 +T 62 00 00 00 77 23 77 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 DD 6E F4 DD 66 F5 E5 DD 6E F2 DD +R 00 00 01 00 +T 70 00 00 00 66 F3 E5 01 00 00 21 00 00 CD +R 00 00 01 00 +T 7A 00 00 00 00 00 00 00 D2 28 02 00 00 DD 4E +R 00 00 01 00 02 04 0A 00 00 09 01 00 +T 81 00 00 00 0A DD 46 0B 21 0C 00 39 5D 54 3E +R 00 00 01 00 +T 8C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 91 00 00 00 00 00 00 00 7D A4 3C CA +R 00 00 01 00 02 04 00 00 +T 97 00 00 00 28 02 00 00 +R 00 00 01 00 00 04 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 +R 00 00 01 00 +T 99 00 00 00 21 02 00 39 DD 5E FD 01 00 00 51 +R 00 00 01 00 +T A4 00 00 00 CD 00 00 00 00 CB 78 28 3B +R 00 00 01 00 02 05 12 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 13 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 21 0E 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 09 00 +T B9 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T BF 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T CC 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T D3 00 00 00 06 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T DB 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T E1 00 00 00 FF FF C3 34 03 00 00 +R 00 00 01 00 00 07 01 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 21 01 00 E5 21 0E 00 39 E5 21 +R 00 00 01 00 +T F0 00 00 00 2A 00 DD 4E F0 DD 46 F1 09 E5 DD +R 00 00 01 00 +T FB 00 00 00 5E 0A DD 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 03 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 0A 01 00 00 F1 DD 75 FE DD 74 FF 7D A4 3C 20 +R 00 00 01 00 +T 15 01 00 00 3B +R 00 00 01 00 +T 16 01 00 00 +R 00 00 01 00 +T 16 01 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 13 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 21 29 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 09 00 +T 24 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 2A 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 2F 01 00 00 +R 00 00 01 00 +T 2F 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 37 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T 3E 01 00 00 06 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T 46 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 4C 01 00 00 FF FF C3 34 03 00 00 +R 00 00 01 00 00 07 01 00 +T 51 01 00 00 +R 00 00 01 00 +T 51 01 00 00 3A 00 00 00 00 E6 08 28 30 +R 00 00 01 00 02 05 13 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 DD 4E FD 06 00 C5 DD 4E FC 06 00 +R 00 00 01 00 +T 63 01 00 00 C5 DD 6E FE DD 66 FF 29 01 +R 00 00 01 00 +T 6C 01 00 00 00 00 00 00 09 4E 23 46 C5 21 +R 00 00 01 00 02 04 0F 00 +T 74 01 00 00 42 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 09 00 +T 7B 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T 81 01 00 00 00 00 00 00 E1 E1 E1 E1 E1 +R 00 00 01 00 02 04 00 00 +T 88 01 00 00 +R 00 00 01 00 +T 88 01 00 00 DD 4E F8 DD 46 F9 DD 6E FE DD 66 +R 00 00 01 00 +T 93 01 00 00 FF CD 00 00 00 00 30 03 +R 00 00 01 00 02 06 0D 00 +T 99 01 00 00 +R 00 00 01 00 +T 99 01 00 00 C3 65 00 00 00 +R 00 00 01 00 00 05 01 00 +T 9C 01 00 00 +R 00 00 01 00 +T 9C 01 00 00 DD 4E FE DD 46 FF DD 6E F8 DD 66 +R 00 00 01 00 +T A7 01 00 00 F9 CD 00 00 00 00 30 21 +R 00 00 01 00 02 06 0D 00 +T AD 01 00 00 +R 00 00 01 00 +T AD 01 00 00 21 06 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T B5 01 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T BC 01 00 00 DD 77 F6 DD 77 F7 DD 6E FE DD 66 +R 00 00 01 00 +T C7 01 00 00 FF DD 75 F8 DD 74 F9 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 3E 04 DD AE FE DD B6 FF 28 21 3E +R 00 00 01 00 +T D9 01 00 00 08 DD BE FC 38 1A +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 DD 46 FC 11 01 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T E8 01 00 00 21 40 00 DD 4E F0 DD 46 F1 09 7E +R 00 00 01 00 +T F3 01 00 00 B3 77 23 7E B2 77 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 DD 6E 0A DD 66 0B E5 DD 6E FD E5 +R 00 00 01 00 +T 04 02 00 00 DD 6E FC E5 21 40 00 DD 4E F0 DD +R 00 00 01 00 +T 0F 02 00 00 46 F1 09 4D 44 21 0C 00 39 5D 54 +R 00 00 01 00 +T 1A 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 11 00 02 0A 11 00 +T 20 02 00 00 00 00 00 00 E1 E1 E1 C3 +R 00 00 01 00 02 04 00 00 +T 26 02 00 00 65 00 00 00 +R 00 00 01 00 00 04 01 00 +T 28 02 00 00 +R 00 00 01 00 +T 28 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 33 02 00 00 B7 CA C6 02 00 00 21 2C 00 DD 4E +R 00 00 01 00 00 06 01 00 +T 3C 02 00 00 F0 DD 46 F1 09 E5 21 40 00 09 4E +R 00 00 01 00 +T 47 02 00 00 23 46 79 2F 4F 78 2F 47 E1 7E A1 +R 00 00 01 00 +T 52 02 00 00 5F 23 7E A0 57 DD 73 FA DD 72 FB +R 00 00 01 00 +T 5D 02 00 00 7B B2 28 65 +R 00 00 01 00 +T 61 02 00 00 +R 00 00 01 00 +T 61 02 00 00 +R 00 00 01 00 +T 61 02 00 00 +R 00 00 01 00 +T 61 02 00 00 DD 5E F8 DD 56 F9 CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 6A 02 00 00 02 00 03 00 C4 02 00 00 +R 00 00 01 00 00 08 01 00 +T 70 02 00 00 76 02 00 00 93 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 74 02 00 00 C2 02 00 00 +R 00 00 01 00 00 04 01 00 +T 76 02 00 00 +R 00 00 01 00 +T 76 02 00 00 21 06 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 7E 02 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T 85 02 00 00 DD 77 F6 DD 77 F7 DD 36 F8 03 DD +R 00 00 01 00 +T 90 02 00 00 36 F9 00 +R 00 00 01 00 +T 93 02 00 00 +R 00 00 01 00 +T 93 02 00 00 DD 6E FA DD 66 FB E5 21 2C 00 DD +R 00 00 01 00 +T 9E 02 00 00 4E F0 DD 46 F1 09 4D 44 21 08 00 +R 00 00 01 00 +T A9 02 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T AF 02 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T B6 02 00 00 06 00 DD 4E 02 DD 46 03 09 35 18 +R 00 00 01 00 +T C1 02 00 00 02 +R 00 00 01 00 +T C2 02 00 00 +R 00 00 01 00 +T C2 02 00 00 18 00 +R 00 00 01 00 +T C4 02 00 00 +R 00 00 01 00 +T C4 02 00 00 18 2D +R 00 00 01 00 +T C6 02 00 00 +R 00 00 01 00 +T C6 02 00 00 3E 03 DD AE F8 DD B6 F9 20 23 +R 00 00 01 00 +T D0 02 00 00 +R 00 00 01 00 +T D0 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T DB 02 00 00 B7 28 0D +R 00 00 01 00 +T DE 02 00 00 +R 00 00 01 00 +T DE 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 35 +R 00 00 01 00 +T E9 02 00 00 18 08 +R 00 00 01 00 +T EB 02 00 00 +R 00 00 01 00 +T EB 02 00 00 DD 36 F8 04 DD 36 F9 00 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 21 06 00 39 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 +T FE 02 00 00 23 4E C5 DD 4E F8 DD 5E 02 DD 56 +R 00 00 01 00 +T 09 03 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 0F 03 00 00 CD 00 00 00 00 F1 F1 DD 5E 0A DD +R 00 00 01 00 02 05 00 00 +T 18 03 00 00 56 0B 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 1D 03 00 00 00 00 00 00 CD 00 00 00 00 3E 02 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 24 03 00 00 DD AE F8 DD B6 F9 28 04 2E 01 18 +R 00 00 01 00 +T 2F 03 00 00 02 +R 00 00 01 00 +T 30 03 00 00 +R 00 00 01 00 +T 30 03 00 00 2E 00 +R 00 00 01 00 +T 32 03 00 00 +R 00 00 01 00 +T 32 03 00 00 26 00 +R 00 00 01 00 +T 34 03 00 00 +R 00 00 01 00 +T 34 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 63 70 5F 72 65 71 75 65 73 74 +R 00 00 02 00 +T 0B 00 00 00 28 29 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 4C 43 50 20 52 45 51 3A 20 62 61 +R 00 00 02 00 +T 19 00 00 00 64 20 68 65 61 64 65 72 20 6C 65 +R 00 00 02 00 +T 24 00 00 00 6E 67 74 68 00 +R 00 00 02 00 +T 29 00 00 00 +R 00 00 02 00 +T 29 00 00 00 4C 43 50 20 52 45 51 3A 20 72 61 +R 00 00 02 00 +T 34 00 00 00 6E 20 6F 75 74 20 6F 66 20 64 61 +R 00 00 02 00 +T 3F 00 00 00 74 61 00 +R 00 00 02 00 +T 42 00 00 00 +R 00 00 02 00 +T 42 00 00 00 4C 43 50 20 52 45 51 3A 20 72 65 +R 00 00 02 00 +T 4D 00 00 00 73 75 6C 74 20 25 73 2C 20 6F 70 +R 00 00 02 00 +T 58 00 00 00 74 69 6F 6E 20 25 64 2C 20 6C 65 +R 00 00 02 00 +T 63 00 00 00 6E 67 74 68 20 25 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_reset.rel b/src/nos/lib/ppp_lib/lcp_reset.rel new file mode 100644 index 00000000..65152f5b --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_reset.rel @@ -0,0 +1,72 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _rdclock Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A6 flags 0 +S _lcp_reset Def00000000 +A CSTR size C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 1C 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 3A 00 00 00 00 E6 +R 00 00 01 00 02 0A 09 00 +T 1D 00 00 00 80 28 12 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 05 00 +T 27 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 2D 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 DD 6E FE DD 66 FF 23 23 7E E6 20 +R 00 00 01 00 +T 3D 00 00 00 28 18 +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 21 0E 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 4A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 50 00 00 00 00 00 00 00 EB E1 CD 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0B 02 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 16 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T 62 00 00 00 69 60 23 23 01 14 00 ED B0 DD 6E +R 00 00 01 00 +T 6D 00 00 00 FE DD 66 FF 23 23 4E 23 46 DD 6E +R 00 00 01 00 +T 78 00 00 00 FE DD 66 FF 7E B1 77 23 7E B0 77 +R 00 00 01 00 +T 83 00 00 00 21 40 00 DD 4E FE DD 46 FF 09 AF +R 00 00 01 00 +T 8E 00 00 00 77 23 77 21 2C 00 09 5E 23 56 21 +R 00 00 01 00 +T 99 00 00 00 2A 00 09 7E B3 77 23 7E B2 77 C3 +R 00 00 01 00 +T A4 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 63 70 5F 72 65 73 65 74 28 29 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_starting.rel b/src/nos/lib/ppp_lib/lcp_starting.rel new file mode 100644 index 00000000..0268ce44 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_starting.rel @@ -0,0 +1,42 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _PPPiface Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S _lcp_starting Def00000000 +A CSTR size F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 3A 00 00 00 00 E6 +R 00 00 01 00 02 05 03 00 02 0A 07 00 +T 07 00 00 00 80 28 12 +R 00 00 01 00 +T 0A 00 00 00 +R 00 00 01 00 +T 0A 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 11 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 17 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 27 00 00 00 23 66 68 23 23 36 01 C3 +R 00 00 01 00 +T 2F 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 63 70 5F 73 74 61 72 74 69 6E +R 00 00 02 00 +T 0B 00 00 00 67 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/lcp_stopping.rel b/src/nos/lib/ppp_lib/lcp_stopping.rel new file mode 100644 index 00000000..488c95f2 --- /dev/null +++ b/src/nos/lib/ppp_lib/lcp_stopping.rel @@ -0,0 +1,67 @@ +XL4 +H 3 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alert Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 8E flags 0 +S _lcp_stopping Def00000000 +A CSTR size F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 08 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 7E 23 66 6F 46 +R 00 00 01 00 +T 14 00 00 00 23 66 68 DD 75 FE DD 74 FF 3A +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 04 08 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 2B 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 31 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 21 1C 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 41 00 00 00 23 B6 28 18 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 01 6B 00 21 1C 00 DD 5E FE DD 56 +R 00 00 01 00 +T 50 00 00 00 FF 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 58 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 21 00 00 E5 21 00 00 E5 21 01 00 +R 00 00 01 00 +T 68 00 00 00 E5 01 81 00 C5 DD 5E FE DD 56 FF +R 00 00 01 00 +T 73 00 00 00 21 2E 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 7E 00 00 00 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 86 00 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T 8C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 63 70 5F 73 74 6F 70 70 69 6E +R 00 00 02 00 +T 0B 00 00 00 67 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ntohcnf.rel b/src/nos/lib/ppp_lib/ntohcnf.rel new file mode 100644 index 00000000..afe7f4cd --- /dev/null +++ b/src/nos/lib/ppp_lib/ntohcnf.rel @@ -0,0 +1,54 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _get16 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 73 flags 0 +S _ntohcnf Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 7E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 03 20 05 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 FF FF 18 5E +R 00 00 01 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 21 04 00 E5 21 02 00 39 4D 44 DD +R 00 00 01 00 +T 1D 00 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 25 00 00 00 00 00 00 00 CD 00 00 00 00 F1 01 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 2C 00 00 00 04 00 A7 ED 42 30 05 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 FF FF 18 38 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 46 FC DD 6E 02 DD 66 03 70 DD +R 00 00 01 00 +T 43 00 00 00 6E 02 DD 66 03 23 DD 46 FD 70 DD +R 00 00 01 00 +T 4E 00 00 00 6E 02 DD 66 03 23 23 E5 21 02 00 +R 00 00 01 00 +T 59 00 00 00 39 01 02 00 09 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 61 00 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 68 00 00 00 44 E1 71 23 70 21 00 00 +R 00 00 01 00 +T 70 00 00 00 +R 00 00 01 00 +T 70 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/ppp_lib/ntohopt.rel b/src/nos/lib/ppp_lib/ntohopt.rel new file mode 100644 index 00000000..2672e3ee --- /dev/null +++ b/src/nos/lib/ppp_lib/ntohopt.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 53 flags 0 +S _ntohopt Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 B6 03 20 05 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 FF FF 18 3E +R 00 00 01 00 +T 12 00 00 00 +R 00 00 01 00 +T 12 00 00 00 21 02 00 E5 21 02 00 39 4D 44 DD +R 00 00 01 00 +T 1D 00 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 25 00 00 00 00 00 00 00 CD 00 00 00 00 F1 01 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 2C 00 00 00 02 00 A7 ED 42 30 05 +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 FF FF 18 18 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 46 FE DD 6E 02 DD 66 03 70 DD +R 00 00 01 00 +T 43 00 00 00 6E 02 DD 66 03 23 DD 46 FF 70 21 +R 00 00 01 00 +T 4E 00 00 00 00 00 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/ppp_lib/pap_check.rel b/src/nos/lib/ppp_lib/pap_check.rel new file mode 100644 index 00000000..bf4518f8 --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_check.rel @@ -0,0 +1,264 @@ +XL4 +H 3 areas 11 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _free Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 203 flags 0 +S _pap_check Def00000000 +A CSTR size 84 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF 21 1C 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 F6 DD 74 F7 3A 00 00 00 00 E6 +R 00 00 01 00 02 0A 0F 00 +T 1D 00 00 00 80 28 12 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 07 00 +T 27 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 2D 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 DD 6E 02 DD 66 03 23 E5 DD 6E 04 +R 00 00 01 00 +T 3D 00 00 00 DD 66 05 23 7E E1 BE 28 52 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 3A 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 05 0F 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 21 0C 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 07 00 +T 54 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 5A 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 DD 6E 02 DD 66 03 23 4E 06 00 C5 +R 00 00 01 00 +T 6A 00 00 00 DD 6E 04 DD 66 05 23 4E 06 00 C5 +R 00 00 01 00 +T 75 00 00 00 21 1A 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 02 00 +T 7B 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 82 00 00 00 F1 F1 DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T 8B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 90 00 00 00 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 04 00 00 +T 96 00 00 00 00 02 00 00 +R 00 00 01 00 00 04 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T A0 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0D 00 02 0A 00 00 +T A7 00 00 00 75 FA DD 74 FB 7D A4 3C CA +R 00 00 01 00 +T B0 00 00 00 D6 01 00 00 +R 00 00 01 00 00 04 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 DD 5E FA DD 56 FB 13 3E +R 00 00 01 00 +T BA 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T BF 00 00 00 00 00 00 00 DD 75 F8 DD 74 F9 DD +R 00 00 01 00 02 04 00 00 +T C8 00 00 00 6E 0A DD 66 0B 5E 23 56 3E +R 00 00 01 00 +T D1 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T D6 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 00 00 +T DF 00 00 00 6E FA DD 66 FB E5 DD 4E F8 DD 46 +R 00 00 01 00 +T EA 00 00 00 F9 DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T F2 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T F7 00 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 00 01 00 00 DD 4E F8 DD 46 F9 09 36 00 21 +R 00 00 01 00 +T 0A 01 00 00 04 00 DD 5E F6 DD 56 F7 19 5E 23 +R 00 00 01 00 +T 15 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 1B 01 00 00 CD 00 00 00 00 21 04 00 DD 5E F6 +R 00 00 01 00 02 05 00 00 +T 24 01 00 00 DD 56 F7 19 71 23 70 2A +R 00 00 01 00 +T 2C 01 00 00 00 00 00 00 7D B4 28 78 +R 00 00 01 00 02 04 0F 00 +T 32 01 00 00 +R 00 00 01 00 +T 32 01 00 00 DD 6E F8 DD 66 F9 E5 DD 6E 04 DD +R 00 00 01 00 +T 3D 01 00 00 66 05 46 05 05 20 05 21 +R 00 00 01 00 +T 45 01 00 00 61 00 00 00 18 03 +R 00 00 01 00 00 04 02 00 +T 49 01 00 00 +R 00 00 01 00 +T 49 01 00 00 21 65 00 00 00 +R 00 00 01 00 00 05 02 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 E5 DD 4E FA DD 46 FB DD 6E FE DD +R 00 00 01 00 +T 57 01 00 00 66 FF CD 00 00 00 00 30 05 21 +R 00 00 01 00 02 07 0B 00 +T 5F 01 00 00 50 00 00 00 18 19 +R 00 00 01 00 00 04 02 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 DD 4E FC DD 46 FD DD 6E FA DD 66 +R 00 00 01 00 +T 6E 01 00 00 FB CD 00 00 00 00 30 05 21 +R 00 00 01 00 02 06 0B 00 +T 75 01 00 00 56 00 00 00 18 03 +R 00 00 01 00 00 04 02 00 +T 79 01 00 00 +R 00 00 01 00 +T 79 01 00 00 21 5B 00 00 00 +R 00 00 01 00 00 05 02 00 +T 7C 01 00 00 +R 00 00 01 00 +T 7C 01 00 00 +R 00 00 01 00 +T 7C 01 00 00 E5 21 08 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 87 01 00 00 7E 23 66 6F 46 23 66 68 23 23 4E +R 00 00 01 00 +T 92 01 00 00 23 46 C5 21 3B 00 00 00 E5 2A +R 00 00 01 00 00 08 02 00 +T 9A 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 2B 0A 0A 00 +T A0 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T A6 01 00 00 0C 00 39 F9 +R 00 00 01 00 +T AA 01 00 00 +R 00 00 01 00 +T AA 01 00 00 DD 4E FA DD 46 FB DD 6E FE DD 66 +R 00 00 01 00 +T B5 01 00 00 FF CD 00 00 00 00 38 16 DD 4E FC +R 00 00 01 00 02 06 0B 00 +T BE 01 00 00 DD 46 FD DD 6E FA DD 66 FB CD +R 00 00 01 00 +T C8 01 00 00 00 00 00 00 38 05 21 00 00 18 03 +R 00 00 01 00 02 04 0B 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 21 01 00 +R 00 00 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 18 2A +R 00 00 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T DE 01 00 00 21 00 00 00 00 CD 00 00 00 00 3A +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T E5 01 00 00 00 00 00 00 E6 40 28 12 +R 00 00 01 00 02 04 0F 00 +T EB 01 00 00 +R 00 00 01 00 +T EB 01 00 00 21 69 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 07 00 +T F2 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T F8 01 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T FD 01 00 00 +R 00 00 01 00 +T FD 01 00 00 21 FF FF +R 00 00 01 00 +T 00 02 00 00 +R 00 00 01 00 +T 00 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 70 61 70 5F 63 68 65 63 6B 28 29 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 +T 0C 00 00 00 +R 00 00 02 00 +T 0C 00 00 00 50 41 50 3A 20 77 72 6F 6E 67 20 +R 00 00 02 00 +T 17 00 00 00 49 44 00 +R 00 00 02 00 +T 1A 00 00 00 +R 00 00 02 00 +T 1A 00 00 00 69 64 20 6D 69 73 6D 61 74 63 68 +R 00 00 02 00 +T 25 00 00 00 20 68 64 72 69 64 3D 25 64 2C 20 +R 00 00 02 00 +T 30 00 00 00 6C 61 73 74 69 64 3D 25 64 0A 00 +R 00 00 02 00 +T 3B 00 00 00 +R 00 00 02 00 +T 3B 00 00 00 25 73 20 50 50 50 2F 50 41 50 20 +R 00 00 02 00 +T 46 00 00 00 25 73 20 25 73 3A 20 25 73 00 +R 00 00 02 00 +T 50 00 00 00 +R 00 00 02 00 +T 50 00 00 00 53 68 6F 72 74 00 +R 00 00 02 00 +T 56 00 00 00 +R 00 00 02 00 +T 56 00 00 00 4C 6F 6E 67 00 +R 00 00 02 00 +T 5B 00 00 00 +R 00 00 02 00 +T 5B 00 00 00 56 61 6C 69 64 00 +R 00 00 02 00 +T 61 00 00 00 +R 00 00 02 00 +T 61 00 00 00 41 63 6B 00 +R 00 00 02 00 +T 65 00 00 00 +R 00 00 02 00 +T 65 00 00 00 4E 61 6B 00 +R 00 00 02 00 +T 69 00 00 00 +R 00 00 02 00 +T 69 00 00 00 50 41 50 3A 20 6D 69 73 73 69 6E +R 00 00 02 00 +T 74 00 00 00 67 20 6D 65 73 73 61 67 65 20 63 +R 00 00 02 00 +T 7F 00 00 00 6F 75 6E 74 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_constants.rel b/src/nos/lib/ppp_lib/pap_constants.rel new file mode 100644 index 00000000..6e219c46 --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_constants.rel @@ -0,0 +1,36 @@ +XL4 +H 5 areas 7 global symbols +S _pap_free Ref00000000 +S _pap_makereq Ref00000000 +S .__.ABS. Def00000000 +S _fsm_no_check Ref00000000 +S _fsm_no_action Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A CSTR size 4 flags 0 +A IDATA0 size 2F flags 0 +S _pap_constants Def00000000 +A CDATA0 size 2F flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 50 61 70 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 00 00 00 00 23 C0 0E 00 01 64 05 +R 00 00 04 00 00 04 02 00 +T 09 00 00 00 00 B8 0B 00 00 00 00 00 00 +R 00 00 04 00 4A 09 00 00 +T 11 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 04 00 4A 08 04 00 +T 17 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 04 00 4A 08 04 00 +T 1D 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 04 00 4A 08 01 00 +T 23 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 03 00 4A 08 03 00 +T 29 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 04 00 4A 04 03 00 4A 08 03 00 diff --git a/src/nos/lib/ppp_lib/pap_down.rel b/src/nos/lib/ppp_lib/pap_down.rel new file mode 100644 index 00000000..1c2fa75b --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_down.rel @@ -0,0 +1,87 @@ +XL4 +H 3 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _stop_timer Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alert Ref00000000 +S .__.ABS. Def00000000 +S _fsm_log Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BA flags 0 +S _pap_down Def00000000 +A CSTR size 5 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 1C 00 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 7D B4 20 03 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 C3 B7 00 00 00 +R 00 00 01 00 00 05 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 2B 00 00 00 23 66 6A 11 05 00 19 5E 16 00 ED +R 00 00 01 00 +T 36 00 00 00 53 00 00 00 00 21 08 00 09 7E 23 +R 00 00 01 00 02 05 0A 00 +T 3F 00 00 00 66 6F 56 23 66 6A 22 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 48 00 00 00 01 00 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T 51 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 57 00 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 00 00 +T 60 00 00 00 23 36 00 DD 6E 02 DD 66 03 5E CD +R 00 00 01 00 +T 6B 00 00 00 00 00 00 00 05 00 00 01 02 05 06 +R 00 00 01 00 02 04 09 00 +T 74 00 00 00 B7 00 00 00 AB 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 78 00 00 00 AB 00 00 00 80 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 7C 00 00 00 AB 00 00 00 B5 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 8B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 91 00 00 00 00 00 00 00 01 6B 00 21 06 00 DD +R 00 00 01 00 02 04 00 00 +T 9A 00 00 00 5E FE DD 56 FF 19 5E 23 56 3E +R 00 00 01 00 +T A4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T A9 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 DD 6E 02 DD 66 03 36 00 18 02 +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 18 00 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 44 6F 77 6E 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_free.rel b/src/nos/lib/ppp_lib/pap_free.rel new file mode 100644 index 00000000..d0ec6854 --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_free.rel @@ -0,0 +1,33 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4F flags 0 +S _pap_free Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 1C 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 5E 23 56 3E +R 00 00 01 00 +T 1D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 22 00 00 00 00 00 00 00 DD 6E FE DD 66 FF 23 +R 00 00 01 00 02 04 00 00 +T 2B 00 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 32 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 38 00 00 00 04 00 DD 4E FE DD 46 FF 09 5E 23 +R 00 00 01 00 +T 43 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 49 00 00 00 CD 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 02 0A 01 00 diff --git a/src/nos/lib/ppp_lib/pap_init.rel b/src/nos/lib/ppp_lib/pap_init.rel new file mode 100644 index 00000000..546e325e --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_init.rel @@ -0,0 +1,116 @@ +XL4 +H 3 areas F global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _stop_timer Ref00000000 +S _fsm_timer Ref00000000 +S _set_timer Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _callocw Ref00000000 +S _pap_timeout Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pap_constants Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14E flags 0 +S _pap_init Def00000000 +A CSTR size B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 24 00 DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 4E 02 DD 46 03 09 DD 75 FC DD 74 +R 00 00 01 00 +T 14 00 00 00 FD 21 05 00 09 5E 16 00 ED 53 +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 0A 6F 03 0A 67 22 +R 00 00 01 00 02 04 0D 00 +T 26 00 00 00 00 00 00 00 7B E6 80 28 12 +R 00 00 01 00 02 04 08 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 08 00 +T 34 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 3A 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 21 1C 00 DD 4E FC DD 46 FD 09 7E +R 00 00 01 00 +T 4A 00 00 00 23 B6 28 03 +R 00 00 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 C3 4B 01 00 00 +R 00 00 01 00 00 05 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 5C 00 00 00 5E 02 DD 56 03 73 23 72 21 1A 00 +R 00 00 01 00 +T 67 00 00 00 09 36 00 00 00 00 23 36 +R 00 00 01 00 0B 06 0C 00 +T 6C 00 00 00 00 00 00 00 21 1C 00 09 E5 01 +R 00 00 01 00 8B 04 0C 00 +T 73 00 00 00 08 00 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 7B 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 82 00 00 00 E1 71 23 70 21 1A 00 DD 4E FC DD +R 00 00 01 00 +T 8D 00 00 00 46 FD 09 56 23 66 6A 11 07 00 19 +R 00 00 01 00 +T 98 00 00 00 56 21 04 00 09 72 21 1A 00 09 56 +R 00 00 01 00 +T A3 00 00 00 23 66 6A 11 08 00 19 56 21 07 00 +R 00 00 01 00 +T AE 00 00 00 09 72 21 1A 00 09 56 23 66 6A 11 +R 00 00 01 00 +T B9 00 00 00 09 00 19 56 21 05 00 09 72 69 60 +R 00 00 01 00 +T C4 00 00 00 36 00 21 04 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T CF 00 00 00 09 56 69 60 23 23 23 72 21 07 00 +R 00 00 01 00 +T DA 00 00 00 DD 4E FC DD 46 FD 09 56 21 06 00 +R 00 00 01 00 +T E5 00 00 00 09 72 21 0A 00 09 DD 75 FE DD 74 +R 00 00 01 00 +T F0 00 00 00 FF 11 0A 00 19 36 00 00 00 00 23 +R 00 00 01 00 0B 0A 07 00 +T F8 00 00 00 36 00 00 00 00 23 36 00 00 00 00 +R 00 00 01 00 8B 05 07 00 2B 0B 07 00 +T FD 00 00 00 21 0D 00 DD 5E FE DD 56 FF 19 71 +R 00 00 01 00 +T 08 01 00 00 23 70 21 1A 00 09 7E 23 66 6F 01 +R 00 00 01 00 +T 13 01 00 00 0A 00 09 4E 23 46 23 5E 23 56 D5 +R 00 00 01 00 +T 1E 01 00 00 C5 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 26 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 2B 01 00 00 00 00 00 00 E1 E1 DD 5E FC DD 56 +R 00 00 01 00 02 04 00 00 +T 34 01 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 3A 01 00 00 CD 00 00 00 00 DD 5E FE DD 56 FF +R 00 00 01 00 02 05 00 00 +T 43 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 49 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 70 61 70 5F 69 6E 69 74 28 29 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_local.rel b/src/nos/lib/ppp_lib/pap_local.rel new file mode 100644 index 00000000..e7d8ddcf --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_local.rel @@ -0,0 +1,52 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 70 flags 0 +S _pap_local Def00000000 +A CSTR size C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 24 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4E 02 DD 46 03 09 DD 75 FE DD 74 +R 00 00 01 00 +T 14 00 00 00 FF 21 05 00 09 4E 06 00 ED 43 +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 79 E6 80 28 12 +R 00 00 01 00 02 04 07 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 03 00 +T 2C 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 32 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 6E FE DD 66 FF 36 01 DD 6E FE +R 00 00 01 00 +T 42 00 00 00 DD 66 FF 23 23 7E F6 10 77 21 +R 00 00 01 00 +T 4C 00 00 00 04 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T 57 00 00 00 10 77 21 04 00 DD 4E FE DD 46 FF +R 00 00 01 00 +T 62 00 00 00 09 56 69 60 23 23 23 72 21 00 00 +R 00 00 01 00 +T 6D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 70 61 70 5F 6C 6F 63 61 6C 28 29 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_makereq.rel b/src/nos/lib/ppp_lib/pap_makereq.rel new file mode 100644 index 00000000..0086cc29 --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_makereq.rel @@ -0,0 +1,184 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alloc_mbuf Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S _stpcpy Ref00000000 +S _fsm_log Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1B2 flags 0 +S _pap_makereq Def00000000 +A CSTR size 3E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 21 1C 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 F8 DD 74 F9 AF DD 77 FA DD 77 +R 00 00 01 00 +T 1F 00 00 00 FB 3A 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 06 0B 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 07 00 +T 2E 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 34 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 6E F8 DD 66 F9 7E 23 B6 28 0D +R 00 00 01 00 +T 44 00 00 00 DD 6E F8 DD 66 F9 23 23 7E 23 B6 +R 00 00 01 00 +T 4F 00 00 00 20 17 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 01 0E 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T 5A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 60 00 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 00 00 +T 66 00 00 00 AF 01 00 00 +R 00 00 01 00 00 04 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 3A 00 00 00 00 E6 08 28 1D +R 00 00 01 00 02 05 0B 00 +T 6F 00 00 00 +R 00 00 01 00 +T 6F 00 00 00 DD 6E F8 DD 66 F9 4E 23 46 C5 21 +R 00 00 01 00 +T 7A 00 00 00 28 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 07 00 +T 81 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 87 00 00 00 00 00 00 00 E1 E1 E1 +R 00 00 01 00 02 04 00 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 DD 6E F8 DD 66 F9 23 23 5E 23 56 +R 00 00 01 00 +T 97 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 9D 00 00 00 00 00 00 00 E5 DD 6E F8 DD 66 F9 +R 00 00 01 00 02 04 00 00 +T A6 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T AC 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T B3 00 00 00 E1 09 23 23 DD 75 FE DD 74 FF EB +R 00 00 01 00 +T BE 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T C4 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 00 00 +T CD 00 00 00 B4 20 06 +R 00 00 01 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 21 00 00 C3 AF 01 00 00 +R 00 00 01 00 00 08 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 21 0A 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T E1 00 00 00 23 66 68 DD 75 FC DD 74 FD DD 6E +R 00 00 01 00 +T EC 00 00 00 F8 DD 66 F9 5E 23 56 3E +R 00 00 01 00 +T F4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T F9 00 00 00 00 00 00 00 E5 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 00 00 +T 02 01 00 00 23 DD 75 FC DD 74 FD 2B C1 71 DD +R 00 00 01 00 +T 0D 01 00 00 6E F8 DD 66 F9 5E 23 56 3E +R 00 00 01 00 +T 16 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 1B 01 00 00 00 00 00 00 7D B4 28 1D +R 00 00 01 00 02 04 00 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 DD 6E F8 DD 66 F9 4E 23 46 DD 5E +R 00 00 01 00 +T 2C 01 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T 33 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 3A 01 00 00 FC DD 74 FD +R 00 00 01 00 +T 3E 01 00 00 +R 00 00 01 00 +T 3E 01 00 00 DD 6E F8 DD 66 F9 23 23 5E 23 56 +R 00 00 01 00 +T 49 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 4F 01 00 00 00 00 00 00 E5 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 00 00 +T 58 01 00 00 23 DD 75 FC DD 74 FD 2B C1 71 DD +R 00 00 01 00 +T 63 01 00 00 6E F8 DD 66 F9 23 23 5E 23 56 3E +R 00 00 01 00 +T 6E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 73 01 00 00 00 00 00 00 7D B4 28 1F +R 00 00 01 00 02 04 00 00 +T 79 01 00 00 +R 00 00 01 00 +T 79 01 00 00 DD 6E F8 DD 66 F9 23 23 4E 23 46 +R 00 00 01 00 +T 84 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 8C 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 93 01 00 00 75 FC DD 74 FD +R 00 00 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 21 0C 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T A3 01 00 00 DD 86 FE 77 23 7E DD 8E FF 77 69 +R 00 00 01 00 +T AE 01 00 00 60 +R 00 00 01 00 +T AF 01 00 00 +R 00 00 01 00 +T AF 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 70 61 70 5F 6D 61 6B 65 72 65 71 +R 00 00 02 00 +T 0B 00 00 00 28 29 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 4E 55 4C 4C 20 75 73 65 72 6E 61 +R 00 00 02 00 +T 19 00 00 00 6D 65 20 6F 72 20 70 61 73 73 77 +R 00 00 02 00 +T 24 00 00 00 6F 72 64 00 +R 00 00 02 00 +T 28 00 00 00 +R 00 00 02 00 +T 28 00 00 00 20 20 20 20 6D 61 6B 69 6E 67 20 +R 00 00 02 00 +T 33 00 00 00 75 73 65 72 20 69 64 20 25 73 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_monitor.rel b/src/nos/lib/ppp_lib/pap_monitor.rel new file mode 100644 index 00000000..87207f9b --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_monitor.rel @@ -0,0 +1,317 @@ +XL4 +H 3 areas 16 global symbols +S ___03b3_2057_Too_20many_20sessio Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S _rip Ref00000000 +S _ppause Ref00000000 +S _newsession Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fsm_sendreq Ref00000000 +S _strlen Ref00000000 +S _strdupw Ref00000000 +S _fgets Ref00000000 +S ___015b_5f8a__25s_3a_20PPP_2fPAP Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _freesession Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _main_exit Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2E0 flags 0 +S _pap_monitor Def00000000 +A CSTR size 4E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF DD 71 E0 DD +R 00 00 01 00 02 05 11 00 +T 09 00 00 00 70 E1 DD 6E 0A DD 66 0B DD 75 E2 +R 00 00 01 00 +T 14 00 00 00 DD 74 E3 01 1C 00 09 46 23 66 68 +R 00 00 01 00 +T 1F 00 00 00 DD 75 E4 DD 74 E5 AF DD 77 FD DD +R 00 00 01 00 +T 2A 00 00 00 77 FE 21 01 00 E5 01 0A 00 11 +R 00 00 01 00 +T 34 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 06 00 +T 39 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 40 00 00 00 75 FB DD 74 FC 7D B4 20 14 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 00 00 02 0B 00 00 +T 4F 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T 55 00 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 01 00 +T 5B 00 00 00 DD 02 00 00 +R 00 00 01 00 00 04 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 2A 00 00 00 00 7D B4 C2 +R 00 00 01 00 02 05 14 00 +T 63 00 00 00 A9 02 00 00 DD 7E FD DD B6 FE C2 +R 00 00 01 00 00 04 01 00 +T 6C 00 00 00 A9 02 00 00 +R 00 00 01 00 00 04 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 6E E4 DD 66 E5 7E 23 B6 C2 +R 00 00 01 00 +T 78 00 00 00 02 01 00 00 +R 00 00 01 00 00 04 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 DD 6E E0 DD 66 E1 23 23 4E 23 46 +R 00 00 01 00 +T 85 00 00 00 C5 21 08 00 00 00 E5 3E +R 00 00 01 00 00 06 02 00 +T 8B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 90 00 00 00 00 00 00 00 F1 F1 21 1B 00 DD 4E +R 00 00 01 00 02 04 01 00 +T 99 00 00 00 FB DD 46 FC 09 5E 23 56 3E +R 00 00 01 00 +T A2 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T A7 00 00 00 00 00 00 00 21 19 00 09 4E 23 46 +R 00 00 01 00 02 04 01 00 +T B0 00 00 00 C5 01 14 00 21 08 00 39 5D 54 3E +R 00 00 01 00 +T BB 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T C0 00 00 00 00 00 00 00 F1 7D B4 28 39 +R 00 00 01 00 02 04 01 00 +T C7 00 00 00 +R 00 00 01 00 +T C7 00 00 00 21 06 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T CF 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T D6 00 00 00 06 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T DE 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T E5 00 00 00 28 19 +R 00 00 01 00 +T E7 00 00 00 +R 00 00 01 00 +T E7 00 00 00 21 06 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T EF 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 0B 00 02 0A 01 00 +T F6 00 00 00 DD 6E E4 DD 66 E5 C1 71 23 70 +R 00 00 01 00 +T 00 01 00 00 +R 00 00 01 00 +T 00 01 00 00 +R 00 00 01 00 +T 00 01 00 00 18 3A +R 00 00 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 DD 6E E4 DD 66 E5 4E 23 46 C5 DD +R 00 00 01 00 +T 0D 01 00 00 6E E0 DD 66 E1 23 23 4E 23 46 C5 +R 00 00 01 00 +T 18 01 00 00 21 20 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 07 00 +T 1E 01 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T 25 01 00 00 F1 F1 21 1B 00 DD 4E FB DD 46 FC +R 00 00 01 00 +T 30 01 00 00 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 37 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 3C 01 00 00 +R 00 00 01 00 +T 3C 01 00 00 DD 6E E4 DD 66 E5 7E 23 B6 CA +R 00 00 01 00 +T 46 01 00 00 24 02 00 00 DD 6E E4 DD 66 E5 23 +R 00 00 01 00 00 04 01 00 +T 4F 01 00 00 23 7E 23 B6 C2 24 02 00 00 +R 00 00 01 00 00 09 01 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 +R 00 00 01 00 +T 56 01 00 00 21 17 00 DD 4E FB DD 46 FC 09 7E +R 00 00 01 00 +T 61 01 00 00 E6 FE 77 23 7E E6 FF 77 DD 6E E0 +R 00 00 01 00 +T 6C 01 00 00 DD 66 E1 23 23 5E 23 56 D5 1E +R 00 00 01 00 +T 76 01 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0D 00 02 0A 0D 00 +T 7C 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T 82 01 00 00 00 00 00 00 F1 F1 F1 21 1B 00 09 +R 00 00 01 00 02 04 01 00 +T 8B 01 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 91 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 97 01 00 00 19 00 09 4E 23 46 C5 01 14 00 21 +R 00 00 01 00 +T A2 01 00 00 08 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0C 00 +T AA 01 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T B1 01 00 00 B4 28 3D +R 00 00 01 00 +T B4 01 00 00 +R 00 00 01 00 +T B4 01 00 00 21 06 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T BC 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T C3 01 00 00 06 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T CB 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T D2 01 00 00 28 1D +R 00 00 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 DD 6E E4 DD 66 E5 23 23 E5 21 +R 00 00 01 00 +T DE 01 00 00 08 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T E6 01 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 0B 00 02 09 01 00 +T ED 01 00 00 E1 71 23 70 +R 00 00 01 00 +T F1 01 00 00 +R 00 00 01 00 +T F1 01 00 00 +R 00 00 01 00 +T F1 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T F7 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T FD 01 00 00 CD 00 00 00 00 F1 F1 21 1B 00 DD +R 00 00 01 00 02 05 01 00 +T 06 02 00 00 4E FB DD 46 FC 09 5E 23 56 3E +R 00 00 01 00 +T 10 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 15 02 00 00 00 00 00 00 21 17 00 09 7E F6 01 +R 00 00 01 00 02 04 01 00 +T 1E 02 00 00 77 23 7E F6 00 77 +R 00 00 01 00 +T 24 02 00 00 +R 00 00 01 00 +T 24 02 00 00 DD 5E E2 DD 56 E3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 2C 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 33 02 00 00 5E E4 DD 56 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 3B 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T 42 02 00 00 FD DD 74 FE 3E 6B AD B4 28 38 21 +R 00 00 01 00 +T 4D 02 00 00 04 00 DD 4E E4 DD 46 E5 09 7E 23 +R 00 00 01 00 +T 58 02 00 00 B6 28 29 +R 00 00 01 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 21 04 00 DD 4E E4 DD 46 E5 09 4E +R 00 00 01 00 +T 66 02 00 00 23 46 C5 DD 6E E0 DD 66 E1 23 23 +R 00 00 01 00 +T 71 02 00 00 4E 23 46 C5 21 3B 00 00 00 E5 3E +R 00 00 01 00 00 09 02 00 +T 7A 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 7F 02 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 84 02 00 00 +R 00 00 01 00 +T 84 02 00 00 21 4C 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 07 00 +T 8A 02 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 07 00 02 0A 01 00 +T 91 02 00 00 21 1B 00 DD 4E FB DD 46 FC 09 5E +R 00 00 01 00 +T 9C 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T A1 02 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T A7 02 00 00 5D 00 00 00 +R 00 00 01 00 00 04 01 00 +T A9 02 00 00 +R 00 00 01 00 +T A9 02 00 00 3E 6B DD AE FD DD B6 FE 28 0E +R 00 00 01 00 +T B3 02 00 00 +R 00 00 01 00 +T B3 02 00 00 01 00 00 11 10 27 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T BB 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 05 00 02 0A 01 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 DD 5E FB DD 56 FC 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T C9 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 10 00 02 0A 01 00 +T D0 02 00 00 06 00 DD 4E E4 DD 46 E5 09 AF 77 +R 00 00 01 00 +T DB 02 00 00 23 77 +R 00 00 01 00 +T DD 02 00 00 +R 00 00 01 00 +T DD 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 50 50 50 2F 50 41 50 00 +R 00 00 02 00 +T 08 00 00 00 +R 00 00 02 00 +T 08 00 00 00 25 73 3A 20 50 50 50 2F 50 41 50 +R 00 00 02 00 +T 13 00 00 00 20 20 55 73 65 72 6E 61 6D 65 3A +R 00 00 02 00 +T 1E 00 00 00 20 00 +R 00 00 02 00 +T 20 00 00 00 +R 00 00 02 00 +T 20 00 00 00 25 73 3A 20 50 50 50 2F 50 41 50 +R 00 00 02 00 +T 2B 00 00 00 20 20 55 73 65 72 6E 61 6D 65 3A +R 00 00 02 00 +T 36 00 00 00 20 25 73 0A 00 +R 00 00 02 00 +T 3B 00 00 00 +R 00 00 02 00 +T 3B 00 00 00 25 73 3A 20 50 50 50 2F 50 41 50 +R 00 00 02 00 +T 46 00 00 00 20 20 25 73 0A 00 +R 00 00 02 00 +T 4C 00 00 00 +R 00 00 02 00 +T 4C 00 00 00 0A 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_opening.rel b/src/nos/lib/ppp_lib/pap_opening.rel new file mode 100644 index 00000000..62d0f5f8 --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_opening.rel @@ -0,0 +1,52 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ppp_ready Ref00000000 +S _stop_timer Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _fsm_log Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6A flags 0 +S _pap_opening Def00000000 +A CSTR size 5 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 08 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 5E 02 DD 56 03 19 7E 23 66 6F DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 01 00 00 00 00 3E +R 00 00 01 00 00 0A 02 00 +T 1D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 22 00 00 00 00 00 00 00 21 0A 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 2B 00 00 00 46 03 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 32 00 00 00 00 00 00 00 CD 00 00 00 00 69 60 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 39 00 00 00 23 23 DD 7E 04 2F A6 77 E6 30 20 +R 00 00 01 00 +T 44 00 00 00 08 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 6E 02 DD 66 03 36 05 +R 00 00 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 DD +R 00 00 01 00 +T 58 00 00 00 7E 04 2F A6 77 59 50 3E +R 00 00 01 00 +T 60 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 65 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4F 70 65 6E 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_proc.rel b/src/nos/lib/ppp_lib/pap_proc.rel new file mode 100644 index 00000000..7e3963d7 --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_proc.rel @@ -0,0 +1,249 @@ +XL4 +H 3 areas 16 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _trim_mbuf Ref00000000 +S _stop_timer Ref00000000 +S _pap_opening Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alert Ref00000000 +S _pap_check Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _fsm_log Ref00000000 +S _PPPiface Ref00000000 +S _pap_request Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S _ntohcnf Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _fsmCodes Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 242 flags 0 +S _pap_proc Def00000000 +A CSTR size 7D flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 1C 00 DD +R 00 00 01 00 02 05 0D 00 +T 09 00 00 00 5E 02 DD 56 03 19 7E 23 66 6F DD +R 00 00 01 00 +T 14 00 00 00 75 FA DD 74 FB 21 08 00 19 7E 23 +R 00 00 01 00 +T 1F 00 00 00 66 6F 01 05 00 09 4E 06 00 ED 43 +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 21 08 00 19 7E 23 66 +R 00 00 01 00 02 04 14 00 +T 33 00 00 00 6F 46 23 66 68 22 00 00 00 00 DD +R 00 00 01 00 02 0A 0A 00 +T 3C 00 00 00 4E 04 DD 46 05 21 02 00 39 5D 54 +R 00 00 01 00 +T 47 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0F 00 02 0A 0F 00 +T 4D 00 00 00 00 00 00 00 7D A4 3C 20 11 +R 00 00 01 00 02 04 00 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 01 00 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T 5D 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 63 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 ED 4B 00 00 00 00 21 01 00 CD +R 00 00 01 00 02 06 14 00 +T 6D 00 00 00 00 00 00 00 30 54 +R 00 00 01 00 02 04 10 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 6E FE DD 66 FF E5 DD 4E FD 06 +R 00 00 01 00 +T 7C 00 00 00 00 C5 DD 6E FC 26 00 29 01 +R 00 00 01 00 +T 85 00 00 00 00 00 00 00 09 4E 23 46 C5 21 +R 00 00 01 00 02 04 12 00 +T 8D 00 00 00 1A 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 98 00 00 00 66 6F 5E 23 56 D5 21 08 00 09 7E +R 00 00 01 00 +T A3 00 00 00 23 66 6F 46 23 66 68 23 23 4E 23 +R 00 00 01 00 +T AE 00 00 00 46 C5 21 1C 00 00 00 E5 2A +R 00 00 01 00 00 07 02 00 +T B5 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 2B 0A 0E 00 +T BB 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T C1 00 00 00 0E 00 39 F9 +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 21 04 00 39 7E D6 04 77 23 7E DE +R 00 00 01 00 +T D0 00 00 00 00 77 DD 4E FE DD 46 FF DD 5E 04 +R 00 00 01 00 +T DB 00 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 01 00 +T E1 00 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 01 00 02 09 00 00 +T E8 00 00 00 FC FE 01 20 34 +R 00 00 01 00 +T ED 00 00 00 +R 00 00 01 00 +T ED 00 00 00 DD 6E 04 DD 66 05 E5 21 04 00 39 +R 00 00 01 00 +T F8 00 00 00 4D 44 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 01 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 06 01 00 00 00 00 00 00 F1 7D B4 20 11 +R 00 00 01 00 02 04 00 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 01 10 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 17 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 1C 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 1E 01 00 00 +R 00 00 01 00 +T 1E 01 00 00 C3 3F 02 00 00 +R 00 00 01 00 00 05 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 FE 02 20 4C DD 6E 04 DD 66 05 E5 +R 00 00 01 00 +T 2C 01 00 00 21 04 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 37 01 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 3D 01 00 00 CD 00 00 00 00 F1 7D B4 20 29 +R 00 00 01 00 02 05 00 00 +T 45 01 00 00 +R 00 00 01 00 +T 45 01 00 00 01 FF FF 21 06 00 DD 5E FA DD 56 +R 00 00 01 00 +T 50 01 00 00 FB 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 58 01 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 5E 01 00 00 20 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 67 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 6C 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 C3 3F 02 00 00 +R 00 00 01 00 00 05 01 00 +T 71 01 00 00 +R 00 00 01 00 +T 71 01 00 00 FE 03 C2 F6 01 00 00 DD 6E 04 DD +R 00 00 01 00 00 07 01 00 +T 7A 01 00 00 66 05 E5 21 04 00 39 4D 44 DD 5E +R 00 00 01 00 +T 85 01 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 06 00 +T 8C 01 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 93 01 00 00 B4 20 5E +R 00 00 01 00 +T 96 01 00 00 +R 00 00 01 00 +T 96 01 00 00 21 0A 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T A1 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T A7 01 00 00 00 00 00 00 DD 6E FA DD 66 FB 5E +R 00 00 01 00 02 04 00 00 +T B0 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T B5 01 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 08 00 02 09 00 00 +T BC 01 00 00 FA DD 66 FB AF 77 23 77 DD 6E FA +R 00 00 01 00 +T C7 01 00 00 DD 66 FB 23 23 5E 23 56 3E +R 00 00 01 00 +T D0 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T D5 01 00 00 00 00 00 00 DD 6E FA DD 66 FB 23 +R 00 00 01 00 02 04 00 00 +T DE 01 00 00 23 AF 77 23 77 01 01 00 DD 5E FA +R 00 00 01 00 +T E9 01 00 00 DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T EF 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T F4 01 00 00 +R 00 00 01 00 +T F4 01 00 00 18 49 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 2A 00 00 00 00 7D B4 28 32 +R 00 00 01 00 02 05 14 00 +T FD 01 00 00 +R 00 00 01 00 +T FD 01 00 00 DD 4E FC 06 00 C5 21 08 00 DD 4E +R 00 00 01 00 +T 08 02 00 00 02 DD 46 03 09 7E 23 66 6F 46 23 +R 00 00 01 00 +T 13 02 00 00 66 68 23 23 4E 23 46 C5 21 +R 00 00 01 00 +T 1C 02 00 00 49 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 0A 00 +T 23 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0E 00 02 0A 0E 00 +T 29 02 00 00 00 00 00 00 E1 E1 E1 E1 +R 00 00 01 00 02 04 00 00 +T 2F 02 00 00 +R 00 00 01 00 +T 2F 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 37 02 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T 3E 02 00 00 00 +R 00 00 01 00 +T 3F 02 00 00 +R 00 00 01 00 +T 3F 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 73 68 6F 72 74 20 61 75 74 68 65 +R 00 00 02 00 +T 0B 00 00 00 6E 74 69 63 61 74 69 6F 6E 20 70 +R 00 00 02 00 +T 16 00 00 00 61 63 6B 65 74 00 +R 00 00 02 00 +T 1C 00 00 00 +R 00 00 02 00 +T 1C 00 00 00 25 73 20 50 50 50 2F 25 73 20 52 +R 00 00 02 00 +T 27 00 00 00 65 63 76 2C 20 20 6F 70 74 69 6F +R 00 00 02 00 +T 32 00 00 00 6E 3A 20 25 73 2C 20 69 64 3A 20 +R 00 00 02 00 +T 3D 00 00 00 25 64 2C 20 6C 65 6E 3A 20 25 64 +R 00 00 02 00 +T 48 00 00 00 00 +R 00 00 02 00 +T 49 00 00 00 +R 00 00 02 00 +T 49 00 00 00 25 73 20 50 50 50 2F 50 61 70 20 +R 00 00 02 00 +T 54 00 00 00 55 6E 6B 6E 6F 77 6E 20 70 61 63 +R 00 00 02 00 +T 5F 00 00 00 6B 65 74 20 74 79 70 65 3A 20 25 +R 00 00 02 00 +T 6A 00 00 00 64 3B 20 64 72 6F 70 70 69 6E 67 +R 00 00 02 00 +T 75 00 00 00 20 70 61 63 6B 65 74 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_pwdlookup.rel b/src/nos/lib/ppp_lib/pap_pwdlookup.rel new file mode 100644 index 00000000..84eefb31 --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_pwdlookup.rel @@ -0,0 +1,84 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _userlookup Ref00000000 +S _strdupw Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A4 flags 0 +S _pap_pwdlookup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 6E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 66 03 7E 23 B6 20 03 +R 00 00 01 00 +T 10 00 00 00 +R 00 00 01 00 +T 10 00 00 00 C3 A1 00 00 00 +R 00 00 01 00 00 05 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 21 00 00 E5 21 06 00 39 E5 21 +R 00 00 01 00 +T 1D 00 00 00 00 00 E5 21 08 00 39 4D 44 DD 6E +R 00 00 01 00 +T 28 00 00 00 02 DD 66 03 5E 23 56 3E +R 00 00 01 00 +T 30 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 35 00 00 00 00 00 00 00 F1 F1 F1 DD 75 FA DD +R 00 00 01 00 02 04 00 00 +T 3E 00 00 00 74 FB 7D B4 20 02 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 18 5B +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 DD 7E FE E6 00 47 DD 7E FF E6 02 +R 00 00 01 00 +T 51 00 00 00 B0 20 10 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 5C 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 63 00 00 00 3D +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 6C 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 73 00 00 00 B4 28 1D +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 DD 6E 02 DD 66 03 23 23 E5 DD 5E +R 00 00 01 00 +T 81 00 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T 88 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 8F 00 00 00 E1 71 23 70 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 9B 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/ppp_lib/pap_remote.rel b/src/nos/lib/ppp_lib/pap_remote.rel new file mode 100644 index 00000000..d2b039fc --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_remote.rel @@ -0,0 +1,86 @@ +XL4 +H 3 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _if_name Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _pap_monitor Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _newproc Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DE flags 0 +S _pap_remote Def00000000 +A CSTR size 12 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 24 00 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 4E 02 DD 46 03 09 DD 75 FA DD 74 +R 00 00 01 00 +T 14 00 00 00 FB 11 1C 00 19 56 23 66 6A DD 75 +R 00 00 01 00 +T 1F 00 00 00 FC DD 74 FD 21 05 00 09 4E 06 00 +R 00 00 01 00 +T 2A 00 00 00 ED 43 00 00 00 00 79 E6 80 28 12 +R 00 00 01 00 02 06 0B 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 06 00 +T 3A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 40 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 6E FA DD 66 FB 36 02 DD 6E FA +R 00 00 01 00 +T 50 00 00 00 DD 66 FB 23 23 7E F6 20 77 21 +R 00 00 01 00 +T 5A 00 00 00 04 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T 65 00 00 00 20 77 01 0D 00 00 00 DD 6E 02 DD +R 00 00 01 00 00 07 02 00 +T 6E 00 00 00 66 03 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 76 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7D 00 00 00 FE DD 74 FF 21 06 00 DD 4E FC DD +R 00 00 01 00 +T 88 00 00 00 46 FD 09 E5 01 00 00 C5 DD 4E FA +R 00 00 01 00 +T 93 00 00 00 DD 46 FB C5 DD 6E 02 DD 66 03 4E +R 00 00 01 00 +T 9E 00 00 00 23 46 C5 21 00 00 E5 0E +R 00 00 01 00 +T A6 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T AC 00 00 00 01 00 02 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T B6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T BB 00 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T C4 00 00 00 4D 44 E1 71 23 70 DD 5E FE DD 56 +R 00 00 01 00 +T CF 00 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T D5 00 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 00 00 +T DC 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 70 61 70 5F 72 65 6D 6F 74 65 28 +R 00 00 02 00 +T 0B 00 00 00 29 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 20 50 41 50 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_request.rel b/src/nos/lib/ppp_lib/pap_request.rel new file mode 100644 index 00000000..df1f3661 --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_request.rel @@ -0,0 +1,293 @@ +XL4 +H 3 areas 14 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _qdata Ref00000000 +S _fsm_send Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S _strdupw Ref00000000 +S _pap_shutdown Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _pull8 Ref00000000 +S _pap_verify Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2AF flags 0 +S _pap_request Def00000000 +A CSTR size 65 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EC FF AF DD 77 F4 +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 DD 77 F5 AF DD 77 F8 DD 77 F9 3A +R 00 00 01 00 +T 14 00 00 00 00 00 00 00 E6 80 28 12 +R 00 00 01 00 02 04 12 00 +T 1A 00 00 00 +R 00 00 01 00 +T 1A 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 09 00 +T 21 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 27 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 34 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T 3B 00 00 00 75 F6 DD 74 F7 7D A4 3C 28 66 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 5E F6 DD 56 F7 13 3E +R 00 00 01 00 +T 4D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 52 00 00 00 00 00 00 00 DD 75 F4 DD 74 F5 DD +R 00 00 01 00 02 04 00 00 +T 5B 00 00 00 75 FE DD 74 FF DD 6E F6 DD 66 F7 +R 00 00 01 00 +T 66 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 DD 4E FC DD 46 FD 0B DD 71 FC DD +R 00 00 01 00 +T 77 00 00 00 70 FD 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0D 00 +T 80 00 00 00 30 21 +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 8A 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T 91 00 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 9C 00 00 00 74 FF 2B C1 71 18 C9 +R 00 00 01 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 DD 6E FE DD 66 FF 36 00 +R 00 00 01 00 +T AB 00 00 00 +R 00 00 01 00 +T AB 00 00 00 3A 00 00 00 00 E6 08 28 1A +R 00 00 01 00 02 05 12 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 DD 6E F4 DD 66 F5 E5 21 +R 00 00 01 00 +T BA 00 00 00 0E 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 09 00 +T C1 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T C7 00 00 00 00 00 00 00 E1 E1 E1 +R 00 00 01 00 02 04 00 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T D4 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T DB 00 00 00 75 FA DD 74 FB 7D A4 3C 28 66 +R 00 00 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 DD 5E FA DD 56 FB 13 3E +R 00 00 01 00 +T ED 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T F2 00 00 00 00 00 00 00 DD 75 F8 DD 74 F9 DD +R 00 00 01 00 02 04 00 00 +T FB 00 00 00 75 FE DD 74 FF DD 6E FA DD 66 FB +R 00 00 01 00 +T 06 01 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 +T 0C 01 00 00 +R 00 00 01 00 +T 0C 01 00 00 DD 4E FC DD 46 FD 0B DD 71 FC DD +R 00 00 01 00 +T 17 01 00 00 70 FD 03 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0D 00 +T 20 01 00 00 30 21 +R 00 00 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 2A 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T 31 01 00 00 DD 6E FE DD 66 FF 23 DD 75 FE DD +R 00 00 01 00 +T 3C 01 00 00 74 FF 2B C1 71 18 C9 +R 00 00 01 00 +T 43 01 00 00 +R 00 00 01 00 +T 43 01 00 00 DD 6E FE DD 66 FF 36 00 +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 3A 00 00 00 00 E6 08 28 1A +R 00 00 01 00 02 05 12 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 DD 6E F8 DD 66 F9 E5 21 +R 00 00 01 00 +T 5A 01 00 00 24 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 09 00 +T 61 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T 67 01 00 00 00 00 00 00 E1 E1 E1 +R 00 00 01 00 02 04 00 00 +T 6C 01 00 00 +R 00 00 01 00 +T 6C 01 00 00 DD 4E F8 DD 46 F9 DD 5E F4 DD 56 +R 00 00 01 00 +T 77 01 00 00 F5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 7D 01 00 00 CD 00 00 00 00 7D B4 20 50 +R 00 00 01 00 02 05 00 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 8F 01 00 00 23 66 6A 11 64 00 19 5E 23 56 3E +R 00 00 01 00 +T 9A 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 9F 01 00 00 00 00 00 00 21 08 00 09 46 23 66 +R 00 00 01 00 02 04 00 00 +T A8 01 00 00 68 01 64 00 09 E5 DD 5E F4 DD 56 +R 00 00 01 00 +T B3 01 00 00 F5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T B9 01 00 00 CD 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 05 00 00 +T C2 01 00 00 DD 36 EE 02 DD 36 EF 00 DD 36 F0 +R 00 00 01 00 +T CD 01 00 00 3E 00 00 00 DD 36 F1 3E 00 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T D2 01 00 00 18 10 +R 00 00 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 DD 36 EE 03 DD 36 EF 00 DD 36 F0 +R 00 00 01 00 +T DF 01 00 00 47 00 00 00 DD 36 F1 47 00 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T E4 01 00 00 +R 00 00 01 00 +T E4 01 00 00 DD 5E F0 DD 56 F1 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T EC 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T F3 01 00 00 75 F2 DD 74 F3 4D 44 DD 5E F0 DD +R 00 00 01 00 +T FE 01 00 00 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 03 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 0A 02 00 00 EC DD 74 ED 01 0A 00 09 7E 23 66 +R 00 00 01 00 +T 15 02 00 00 6F DD 7E F2 C6 FF 77 21 00 00 39 +R 00 00 01 00 +T 20 02 00 00 E5 DD 6E 04 DD 66 05 23 4E C5 DD +R 00 00 01 00 +T 2B 02 00 00 4E EE DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 34 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 39 02 00 00 00 00 00 00 F1 F1 3E 03 DD AE EE +R 00 00 01 00 02 04 00 00 +T 42 02 00 00 DD B6 EF 20 29 +R 00 00 01 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 52 02 00 00 B7 28 0D +R 00 00 01 00 +T 55 02 00 00 +R 00 00 01 00 +T 55 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 35 +R 00 00 01 00 +T 60 02 00 00 18 0E +R 00 00 01 00 +T 62 02 00 00 +R 00 00 01 00 +T 62 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 6A 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 70 02 00 00 +R 00 00 01 00 +T 70 02 00 00 +R 00 00 01 00 +T 70 02 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 78 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T 7F 02 00 00 5E F4 DD 56 F5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 87 02 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 8E 02 00 00 F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T 95 02 00 00 00 00 00 00 CD 00 00 00 00 3E 02 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 9C 02 00 00 DD AE EE DD B6 EF 28 04 2E 01 18 +R 00 00 01 00 +T A7 02 00 00 02 +R 00 00 01 00 +T A8 02 00 00 +R 00 00 01 00 +T A8 02 00 00 2E 00 +R 00 00 01 00 +T AA 02 00 00 +R 00 00 01 00 +T AA 02 00 00 26 00 C3 00 00 00 00 +R 00 00 01 00 02 07 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 70 61 70 5F 72 65 71 75 65 73 74 +R 00 00 02 00 +T 0B 00 00 00 28 29 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 20 20 20 20 63 68 65 63 6B 69 6E +R 00 00 02 00 +T 19 00 00 00 67 20 75 73 65 72 3A 20 25 73 00 +R 00 00 02 00 +T 24 00 00 00 +R 00 00 02 00 +T 24 00 00 00 20 20 20 20 63 68 65 63 6B 69 6E +R 00 00 02 00 +T 2F 00 00 00 67 20 70 61 73 73 77 6F 72 64 3A +R 00 00 02 00 +T 3A 00 00 00 20 25 73 00 +R 00 00 02 00 +T 3E 00 00 00 +R 00 00 02 00 +T 3E 00 00 00 20 57 65 6C 63 6F 6D 65 00 +R 00 00 02 00 +T 47 00 00 00 +R 00 00 02 00 +T 47 00 00 00 20 49 6E 76 61 6C 69 64 20 75 73 +R 00 00 02 00 +T 52 00 00 00 65 72 6E 61 6D 65 20 6F 72 20 70 +R 00 00 02 00 +T 5D 00 00 00 61 73 73 77 6F 72 64 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_shutdown.rel b/src/nos/lib/ppp_lib/pap_shutdown.rel new file mode 100644 index 00000000..76a7c62e --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_shutdown.rel @@ -0,0 +1,71 @@ +XL4 +H 3 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _fsm_log Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fsm_close Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 65 flags 0 +S _pap_shutdown Def00000000 +A CSTR size 28 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 08 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 3A 00 00 00 00 E6 +R 00 00 01 00 02 0A 0A 00 +T 1D 00 00 00 80 28 12 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 00 00 00 00 E5 2A 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0B 04 00 +T 27 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 2D 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 00 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 ED 4B 00 00 00 00 21 01 00 CD +R 00 00 01 00 02 06 0A 00 +T 3A 00 00 00 00 00 00 00 30 11 +R 00 00 01 00 02 04 07 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 01 0F 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 00 05 02 00 +T 47 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 4D 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 21 06 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T 5A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 60 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 70 61 70 5F 73 68 75 74 64 6F 77 +R 00 00 02 00 +T 0B 00 00 00 6E 28 29 00 +R 00 00 02 00 +T 0F 00 00 00 +R 00 00 02 00 +T 0F 00 00 00 46 61 69 6C 65 64 3B 20 63 6C 6F +R 00 00 02 00 +T 1A 00 00 00 73 65 20 63 6F 6E 6E 65 63 74 69 +R 00 00 02 00 +T 25 00 00 00 6F 6E 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_timeout.rel b/src/nos/lib/ppp_lib/pap_timeout.rel new file mode 100644 index 00000000..973b7ea4 --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_timeout.rel @@ -0,0 +1,117 @@ +XL4 +H 3 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strdupw Ref00000000 +S _pap_shutdown Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _free Ref00000000 +S _fsm_log Ref00000000 +S _PPPiface Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _PPPtrace Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10A flags 0 +S _pap_timeout Def00000000 +A CSTR size 2F flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 66 03 DD 75 FC DD 74 FD 01 1C 00 +R 00 00 01 00 +T 14 00 00 00 09 46 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T 1F 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 56 +R 00 00 01 00 +T 2A 00 00 00 23 66 6A 11 05 00 19 5E 16 00 ED +R 00 00 01 00 +T 35 00 00 00 53 00 00 00 00 21 08 00 09 7E 23 +R 00 00 01 00 02 05 0C 00 +T 3E 00 00 00 66 6F 56 23 66 6A 22 00 00 00 00 +R 00 00 01 00 02 0B 08 00 +T 47 00 00 00 01 00 00 00 00 DD 5E FC DD 56 FD +R 00 00 01 00 00 05 02 00 +T 50 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 56 00 00 00 00 00 00 00 DD 6E FC DD 66 FD 23 +R 00 00 01 00 02 04 00 00 +T 5F 00 00 00 23 23 7E B7 28 3D +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 70 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 75 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 7B 00 00 00 04 00 09 E5 11 08 00 00 00 3E +R 00 00 01 00 00 09 02 00 +T 83 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 88 00 00 00 00 00 00 00 EB E1 73 23 72 01 +R 00 00 01 00 02 04 00 00 +T 90 00 00 00 01 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 99 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 9E 00 00 00 00 00 00 00 18 65 +R 00 00 01 00 02 04 00 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 21 04 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T AD 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T B2 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T B8 00 00 00 04 00 09 E5 11 18 00 00 00 3E +R 00 00 01 00 00 09 02 00 +T C0 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T C5 00 00 00 00 00 00 00 EB E1 73 23 72 01 +R 00 00 01 00 02 04 00 00 +T CD 00 00 00 01 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T D6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T DB 00 00 00 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 04 00 00 +T E1 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T E6 00 00 00 00 00 00 00 01 18 00 00 00 DD 5E +R 00 00 01 00 02 04 00 00 00 09 02 00 +T ED 00 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T F4 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 07 00 02 09 00 00 +T FB 00 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 02 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 54 69 6D 65 6F 75 74 00 +R 00 00 02 00 +T 08 00 00 00 +R 00 00 02 00 +T 08 00 00 00 52 65 71 75 65 73 74 20 74 69 6D +R 00 00 02 00 +T 13 00 00 00 65 6F 75 74 00 +R 00 00 02 00 +T 18 00 00 00 +R 00 00 02 00 +T 18 00 00 00 52 65 71 75 65 73 74 20 72 65 74 +R 00 00 02 00 +T 23 00 00 00 72 79 20 65 78 63 65 65 64 65 64 +R 00 00 02 00 +T 2E 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/pap_verify.rel b/src/nos/lib/ppp_lib/pap_verify.rel new file mode 100644 index 00000000..927c0e73 --- /dev/null +++ b/src/nos/lib/ppp_lib/pap_verify.rel @@ -0,0 +1,100 @@ +XL4 +H 3 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _userlogin Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _PPPiface Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AB flags 0 +S _pap_verify Def00000000 +A CSTR size 58 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FE +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 DD 77 FF 11 80 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 11 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 18 00 00 00 75 FC DD 74 FD 21 04 00 39 E5 21 +R 00 00 01 00 +T 23 00 00 00 80 00 E5 21 06 00 39 E5 DD 5E 02 +R 00 00 01 00 +T 2E 00 00 00 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 02 00 +T 34 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 3B 00 00 00 F1 DD 75 FA DD 74 FB DD 5E FC DD +R 00 00 01 00 +T 46 00 00 00 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 4B 00 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 52 00 00 00 FA DD A6 FB 3C 20 1F +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T 61 00 00 00 00 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 05 00 +T 68 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 6E 00 00 00 00 00 00 00 E1 E1 E1 21 FF FF 18 +R 00 00 01 00 02 04 00 00 +T 77 00 00 00 30 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 DD 7E FA E6 00 47 DD 7E FB E6 01 +R 00 00 01 00 +T 83 00 00 00 B0 20 1F +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T 8E 00 00 00 32 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 00 04 02 00 02 0A 05 00 +T 95 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 9B 00 00 00 00 00 00 00 E1 E1 E1 21 FF FF 18 +R 00 00 01 00 02 04 00 00 +T A4 00 00 00 03 +R 00 00 01 00 +T A5 00 00 00 +R 00 00 01 00 +T A5 00 00 00 21 00 00 +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 50 41 50 3A 20 75 73 65 72 6E 61 +R 00 00 02 00 +T 0B 00 00 00 6D 65 2F 70 61 73 73 77 6F 72 64 +R 00 00 02 00 +T 16 00 00 00 20 69 6E 63 6F 72 72 65 63 74 20 +R 00 00 02 00 +T 21 00 00 00 6F 72 20 6E 6F 74 20 66 6F 75 6E +R 00 00 02 00 +T 2C 00 00 00 64 3A 20 25 73 00 +R 00 00 02 00 +T 32 00 00 00 +R 00 00 02 00 +T 32 00 00 00 50 41 50 3A 20 6E 6F 20 70 65 72 +R 00 00 02 00 +T 3D 00 00 00 6D 69 73 73 69 6F 6E 20 66 6F 72 +R 00 00 02 00 +T 48 00 00 00 20 50 50 50 20 61 63 63 65 73 73 +R 00 00 02 00 +T 53 00 00 00 3A 20 25 73 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_discard.rel b/src/nos/lib/ppp_lib/ppp_discard.rel new file mode 100644 index 00000000..3ee6db1f --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_discard.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_send Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S _ppp_discard Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 39 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF C5 0E 00 C5 0E 0B +R 00 00 01 00 +T 1F 00 00 00 11 06 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 27 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 2E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_echo.rel b/src/nos/lib/ppp_lib/ppp_echo.rel new file mode 100644 index 00000000..cebf0fc4 --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_echo.rel @@ -0,0 +1,25 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_send Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S _ppp_echo Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 39 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF C5 0E 00 C5 0E 09 +R 00 00 01 00 +T 1F 00 00 00 11 06 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 27 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 2E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_error.rel b/src/nos/lib/ppp_lib/ppp_error.rel new file mode 100644 index 00000000..1bdc6bef --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_error.rel @@ -0,0 +1,26 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ppp_log Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 24 flags 0 +S _ppp_error Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 59 50 3E +R 00 00 01 00 02 05 03 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 0B 00 00 00 00 00 00 00 DD 4E 0A DD 46 0B DD +R 00 00 01 00 02 04 00 00 +T 14 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 1C 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 22 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/ppp_lib/ppp_free.rel b/src/nos/lib/ppp_lib/ppp_free.rel new file mode 100644 index 00000000..b93991ee --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_free.rel @@ -0,0 +1,60 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_free Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alert Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 98 flags 0 +S _ppp_free Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 39 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 4E 02 DD 46 03 09 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 FC DD 74 FD 01 01 00 21 18 00 +R 00 00 01 00 +T 1F 00 00 00 DD 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 2A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 2F 00 00 00 00 00 00 00 AF DD 77 FE DD 77 FF +R 00 00 01 00 02 04 00 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 01 03 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 43 00 00 00 AC 67 ED 42 30 2A +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 4E FE DD 46 FF 03 DD 71 FE DD +R 00 00 01 00 +T 54 00 00 00 70 FF 0B 11 1E 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 5D 00 00 00 DD 6E FC DD 66 FD 19 01 06 00 09 +R 00 00 01 00 +T 68 00 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 6E 00 00 00 CD 00 00 00 00 18 C5 +R 00 00 01 00 02 05 00 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 21 64 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 7E 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T 83 00 00 00 00 00 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 8A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 90 00 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 00 00 +T 96 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_init.rel b/src/nos/lib/ppp_lib/ppp_init.rel new file mode 100644 index 00000000..58c84fa4 --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_init.rel @@ -0,0 +1,107 @@ +XL4 +H 3 areas 14 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _asy_ioctl Ref00000000 +S _ppp_discard Ref00000000 +S _ppp_echo Ref00000000 +S _if_name Ref00000000 +S _lcp_init Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _pap_init Ref00000000 +S .__.ABS. Def00000000 +S _ppp_recv Ref00000000 +S _free Ref00000000 +S _callocw Ref00000000 +S _ppp_iostatus Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _ppp_show Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _ppp_raw Ref00000000 +S _newproc Ref00000000 +S _ipcp_init Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 11B flags 0 +S _ppp_init Def00000000 +A CSTR size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 2E 00 DD +R 00 00 01 00 02 05 0D 00 +T 09 00 00 00 4E 02 DD 46 03 09 36 00 00 00 00 +R 00 00 01 00 0B 0B 01 00 +T 11 00 00 00 23 36 00 00 00 00 23 36 +R 00 00 01 00 8B 06 01 00 +T 16 00 00 00 00 00 00 00 01 90 00 11 01 00 3E +R 00 00 01 00 2B 04 01 00 +T 1E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 23 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 21 +R 00 00 01 00 02 04 00 00 +T 2C 00 00 00 39 00 DD 4E 02 DD 46 03 09 DD 5E +R 00 00 01 00 +T 37 00 00 00 FC DD 56 FD 73 23 72 21 31 00 09 +R 00 00 01 00 +T 42 00 00 00 36 00 00 00 00 23 36 00 00 00 00 +R 00 00 01 00 0B 05 0C 00 8B 0B 0C 00 +T 47 00 00 00 23 36 00 00 00 00 21 45 00 09 36 +R 00 00 01 00 2B 06 0C 00 +T 4F 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 10 00 8B 0A 10 00 +T 54 00 00 00 36 00 00 00 00 21 48 00 09 36 +R 00 00 01 00 2B 05 10 00 +T 5B 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 0E 00 8B 0A 0E 00 +T 60 00 00 00 36 00 00 00 00 21 4E 00 09 36 +R 00 00 01 00 2B 05 0E 00 +T 67 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 03 00 8B 0A 03 00 +T 6C 00 00 00 36 00 00 00 00 21 4B 00 09 36 +R 00 00 01 00 2B 05 03 00 +T 73 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 02 00 8B 0A 02 00 +T 78 00 00 00 36 00 00 00 00 EB 71 23 70 DD 6E +R 00 00 01 00 2B 05 02 00 +T 80 00 00 00 FC DD 66 FD 23 23 36 00 DD 5E FC +R 00 00 01 00 +T 8B 00 00 00 DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 05 00 +T 91 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 98 00 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T 9F 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 07 00 02 09 00 00 +T A6 00 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 12 00 +T AD 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T B3 00 00 00 18 00 09 E5 11 00 00 D5 11 00 00 +R 00 00 01 00 +T BE 00 00 00 D5 C5 21 2C 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T C9 00 00 00 09 5E 23 56 D5 1E 00 00 00 00 D5 +R 00 00 01 00 2B 0A 09 00 +T D1 00 00 00 21 00 00 00 00 E5 01 40 01 C5 01 +R 00 00 01 00 02 05 09 00 +T DA 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 00 04 02 00 +T E3 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T E8 00 00 00 00 00 00 00 DD 75 FE DD 74 FF EB +R 00 00 01 00 02 04 00 00 +T F1 00 00 00 3E 00 00 00 00 21 00 00 00 00 C1 +R 00 00 01 00 2B 05 11 00 02 0A 11 00 +T F7 00 00 00 CD 00 00 00 00 EB 21 0C 00 39 F9 +R 00 00 01 00 02 05 00 00 +T 00 01 00 00 EB 4D 44 E1 71 23 70 DD 5E FE DD +R 00 00 01 00 +T 0B 01 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T 10 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 16 01 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 72 78 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_iostatus.rel b/src/nos/lib/ppp_lib/ppp_iostatus.rel new file mode 100644 index 00000000..b3f967c5 --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_iostatus.rel @@ -0,0 +1,80 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fsm_start Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _fsm_down Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _ppp_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 99 flags 0 +S _ppp_iostatus Def00000000 +A CSTR size 26 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 39 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 3E 82 A9 B0 20 3F +R 00 00 01 00 +T 1F 00 00 00 +R 00 00 01 00 +T 1F 00 00 00 01 00 00 00 00 DD 5E FE DD 56 FF +R 00 00 01 00 00 05 02 00 +T 28 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 2E 00 00 00 00 00 00 00 DD 6E FE DD 66 FF 23 +R 00 00 01 00 02 04 00 00 +T 37 00 00 00 23 7E B7 20 0A +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 DD 6E FE DD 66 FF 23 23 36 01 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 21 06 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T 51 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 57 00 00 00 00 00 00 00 21 00 00 18 38 +R 00 00 01 00 02 04 00 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 3E 81 A9 B0 20 2F 01 12 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 67 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 6F 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 76 00 00 00 06 00 DD 4E FE DD 46 FF 09 EB 3E +R 00 00 01 00 +T 81 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 86 00 00 00 00 00 00 00 69 60 23 23 36 00 21 +R 00 00 01 00 02 04 00 00 +T 8F 00 00 00 00 00 18 03 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 21 FF FF +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 50 68 79 73 69 63 61 6C 20 6C 61 +R 00 00 02 00 +T 0B 00 00 00 79 65 72 20 75 70 00 +R 00 00 02 00 +T 12 00 00 00 +R 00 00 02 00 +T 12 00 00 00 50 68 79 73 69 63 61 6C 20 6C 61 +R 00 00 02 00 +T 1D 00 00 00 79 65 72 20 64 6F 77 6E 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_log.rel b/src/nos/lib/ppp_lib/ppp_log.rel new file mode 100644 index 00000000..17d6ca3d --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_log.rel @@ -0,0 +1,40 @@ +XL4 +H 3 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3F flags 0 +S _ppp_log Def00000000 +A CSTR size A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 05 00 19 7E B7 +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 28 31 +R 00 00 01 00 +T 0B 00 00 00 +R 00 00 01 00 +T 0B 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 16 00 00 00 66 03 46 23 66 68 23 23 4E 23 46 +R 00 00 01 00 +T 21 00 00 00 C5 21 00 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 00 06 02 00 +T 2A 00 00 00 66 03 4E 23 46 C5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 32 00 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 39 00 00 00 E1 E1 E1 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 73 20 50 50 50 20 25 73 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_output.rel b/src/nos/lib/ppp_lib/ppp_output.rel new file mode 100644 index 00000000..7d45bf89 --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_output.rel @@ -0,0 +1,86 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _htonppp Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _ppp_error Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BF flags 0 +S _ppp_output Def00000000 +A CSTR size C flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 7E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 B6 03 28 18 21 39 00 DD 4E 02 DD +R 00 00 01 00 +T 14 00 00 00 46 03 09 46 23 66 68 DD 75 FA DD +R 00 00 01 00 +T 1F 00 00 00 74 FB 7D B4 20 14 +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 DD 5E 0E DD 56 0F 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 2D 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 34 00 00 00 FF FF C3 BC 00 00 00 +R 00 00 01 00 00 07 01 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 6E FA DD 66 FB 23 23 7E B7 20 +R 00 00 01 00 +T 44 00 00 00 2D +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 21 00 00 00 00 E5 DD 4E 0E DD 46 +R 00 00 01 00 00 05 02 00 +T 4E 00 00 00 0F DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 56 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 5B 00 00 00 00 00 00 00 E1 21 74 00 DD 4E FA +R 00 00 01 00 02 04 00 00 +T 64 00 00 00 DD 46 FB 09 34 23 20 01 34 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 21 FF FF 18 4A +R 00 00 01 00 +T 72 00 00 00 +R 00 00 01 00 +T 72 00 00 00 DD 36 FC FF DD 36 FD 03 DD 6E 0C +R 00 00 01 00 +T 7D 00 00 00 DD 66 0D DD 75 FE DD 74 FF DD 4E +R 00 00 01 00 +T 88 00 00 00 0E DD 46 0F 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 93 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 98 00 00 00 00 00 00 00 DD 4E 0E DD 46 0F C5 +R 00 00 01 00 02 04 00 00 +T A1 00 00 00 DD 5E 02 DD 56 03 21 45 00 DD 4E +R 00 00 01 00 +T AC 00 00 00 02 DD 46 03 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T B7 00 00 00 60 C1 CD 00 00 00 00 +R 00 00 01 00 02 07 00 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 69 6E 65 20 6E 6F 74 20 75 70 +R 00 00 02 00 +T 0B 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_proc.rel b/src/nos/lib/ppp_lib/ppp_proc.rel new file mode 100644 index 00000000..9ae15c01 --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_proc.rel @@ -0,0 +1,723 @@ +XL4 +H 3 areas 18 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _logmsg Ref00000000 +S _htonppp Ref00000000 +S _len_p Ref00000000 +S _fsm_send Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _pap_proc Ref00000000 +S _slhc_uncompress Ref00000000 +S _slhc_remember Ref00000000 +S _ppp_error Ref00000000 +S _fsm_proc Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _ppp_skipped Ref00000000 +S _pull16 Ref00000000 +S _ip_route Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _trace_log Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___052b_8304_ppp_5fproc_3a_20mis Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 62A flags 0 +S _ppp_proc Def00000000 +A CSTR size 1B2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF AF DD 77 FC +R 00 00 01 00 02 05 11 00 +T 09 00 00 00 DD 77 FD DD 7E 02 DD B6 03 20 19 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 16 00 02 0B 16 00 +T 1A 00 00 00 E5 21 FF FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 22 00 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 29 00 00 00 E1 C3 27 06 00 00 +R 00 00 01 00 00 06 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 DD 6E 04 DD 66 05 7E 23 B6 20 18 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 21 00 00 00 00 E5 DD 6E 02 DD 66 +R 00 00 01 00 00 05 02 00 +T 41 00 00 00 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 12 00 +T 46 00 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 4D 00 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 21 39 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 5B 00 00 00 23 66 68 DD 75 F4 DD 74 F5 01 +R 00 00 01 00 +T 65 00 00 00 78 00 09 E5 DD 6E 04 DD 66 05 5E +R 00 00 01 00 +T 70 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 75 00 00 00 00 00 00 00 CD 00 00 00 00 EB 13 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 7C 00 00 00 13 01 00 00 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 0C 00 +T 85 00 00 00 06 00 DD 4E F4 DD 46 F5 09 7E FE +R 00 00 01 00 +T 90 00 00 00 05 20 22 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 21 22 00 DD 4E F4 DD 46 F5 09 46 +R 00 00 01 00 +T 9E 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T A8 00 00 00 16 00 09 46 23 66 68 DD 75 FC DD +R 00 00 01 00 +T B3 00 00 00 74 FD +R 00 00 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T C0 00 00 00 0A 00 09 7E 23 66 6F 46 04 28 3B +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 DD 7E FC E6 00 47 DD 7E FD E6 01 +R 00 00 01 00 +T D6 00 00 00 B0 20 2B +R 00 00 01 00 +T D9 00 00 00 +R 00 00 01 00 +T D9 00 00 00 21 19 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T E2 00 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T EA 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T EF 00 00 00 00 00 00 00 E1 21 8A 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T F8 00 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T 01 01 00 00 +R 00 00 01 00 +T 01 01 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 18 6F +R 00 00 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 11 01 00 00 0A 00 09 46 23 66 68 23 7E FE 03 +R 00 00 01 00 +T 1C 01 00 00 28 49 +R 00 00 01 00 +T 1E 01 00 00 +R 00 00 01 00 +T 1E 01 00 00 DD 7E FC E6 00 47 DD 7E FD E6 01 +R 00 00 01 00 +T 29 01 00 00 B0 28 0E DD 7E FC E6 80 47 DD 7E +R 00 00 01 00 +T 34 01 00 00 FD E6 00 B0 20 2B +R 00 00 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 21 2D 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T 43 01 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 4B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 50 01 00 00 00 00 00 00 E1 21 8A 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T 59 01 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T 62 01 00 00 +R 00 00 01 00 +T 62 01 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T 65 01 00 00 +R 00 00 01 00 +T 65 01 00 00 18 0E +R 00 00 01 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 6F 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T 75 01 00 00 +R 00 00 01 00 +T 75 01 00 00 +R 00 00 01 00 +T 75 01 00 00 DD 36 F8 FF DD 36 F9 03 DD 5E 04 +R 00 00 01 00 +T 80 01 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 14 00 +T 86 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 14 00 02 09 00 00 +T 8D 01 00 00 FA DD 74 FB DD 7E FA E6 01 28 3B +R 00 00 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 DD 7E FC E6 80 47 DD 7E FD E6 00 +R 00 00 01 00 +T A3 01 00 00 B0 20 2B +R 00 00 01 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 21 38 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T AF 01 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T B7 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T BC 01 00 00 00 00 00 00 E1 21 8A 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T C5 01 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 18 60 +R 00 00 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 DD 6E FA DD 66 FB 65 2E 00 E5 DD +R 00 00 01 00 +T DE 01 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 14 00 +T E6 01 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 14 00 02 09 00 00 +T ED 01 00 00 E1 7D B1 5F 7C B0 57 DD 73 FA DD +R 00 00 01 00 +T F8 01 00 00 72 FB DD 7E FA E6 01 47 DD 7E FB +R 00 00 01 00 +T 03 02 00 00 E6 00 B0 20 2B +R 00 00 01 00 +T 08 02 00 00 +R 00 00 01 00 +T 08 02 00 00 21 54 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T 11 02 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 19 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 1E 02 00 00 00 00 00 00 E1 21 8A 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T 27 02 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T 33 02 00 00 +R 00 00 01 00 +T 33 02 00 00 +R 00 00 01 00 +T 33 02 00 00 DD 5E FA DD 56 FB CD 00 00 00 00 +R 00 00 01 00 02 0B 01 00 +T 3C 02 00 00 06 00 21 00 2D 00 2F 00 21 80 +R 00 00 01 00 +T 46 02 00 00 21 C0 23 C0 94 05 00 00 +R 00 00 01 00 00 08 01 00 +T 4C 02 00 00 C1 04 00 00 96 04 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 50 02 00 00 31 05 00 00 A2 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 54 02 00 00 AE 02 00 00 58 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 58 02 00 00 +R 00 00 01 00 +T 58 02 00 00 21 42 00 DD 4E F4 DD 46 F5 09 7E +R 00 00 01 00 +T 63 02 00 00 FE 05 28 2B +R 00 00 01 00 +T 67 02 00 00 +R 00 00 01 00 +T 67 02 00 00 21 70 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T 70 02 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 78 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 7D 02 00 00 00 00 00 00 E1 21 8C 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T 86 02 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T 8F 02 00 00 +R 00 00 01 00 +T 8F 02 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T 92 02 00 00 +R 00 00 01 00 +T 92 02 00 00 21 00 00 E5 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T 9D 02 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T A5 02 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T AC 02 00 00 27 06 00 00 +R 00 00 01 00 00 04 01 00 +T AE 02 00 00 +R 00 00 01 00 +T AE 02 00 00 21 42 00 DD 4E F4 DD 46 F5 09 7E +R 00 00 01 00 +T B9 02 00 00 FE 05 28 2B +R 00 00 01 00 +T BD 02 00 00 +R 00 00 01 00 +T BD 02 00 00 21 88 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T C6 02 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T CE 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T D3 02 00 00 00 00 00 00 E1 21 8C 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T DC 02 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T E5 02 00 00 +R 00 00 01 00 +T E5 02 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T E8 02 00 00 +R 00 00 01 00 +T E8 02 00 00 21 5E 00 DD 4E F4 DD 46 F5 09 46 +R 00 00 01 00 +T F3 02 00 00 23 66 68 DD 75 F6 DD 74 F7 01 +R 00 00 01 00 +T FD 02 00 00 11 00 09 7E E6 04 47 23 7E E6 00 +R 00 00 01 00 +T 08 03 00 00 B0 20 2B +R 00 00 01 00 +T 0B 03 00 00 +R 00 00 01 00 +T 0B 03 00 00 21 AF 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T 14 03 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 1C 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 21 03 00 00 00 00 00 00 E1 21 8C 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T 2A 03 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T 33 03 00 00 +R 00 00 01 00 +T 33 03 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T 36 03 00 00 +R 00 00 01 00 +T 36 03 00 00 DD 4E 04 DD 46 05 21 40 00 DD 5E +R 00 00 01 00 +T 41 03 00 00 F6 DD 56 F7 19 5E 23 56 3E +R 00 00 01 00 +T 4A 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 4F 03 00 00 00 00 00 00 4D 44 21 00 00 CD +R 00 00 01 00 02 04 00 00 +T 57 03 00 00 00 00 00 00 38 2B +R 00 00 01 00 02 04 13 00 +T 5B 03 00 00 +R 00 00 01 00 +T 5B 03 00 00 21 CD 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T 64 03 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 6C 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 71 03 00 00 00 00 00 00 E1 21 8C 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T 7A 03 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T 83 03 00 00 +R 00 00 01 00 +T 83 03 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T 86 03 00 00 +R 00 00 01 00 +T 86 03 00 00 21 00 00 E5 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T 91 03 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T 99 03 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T A0 03 00 00 27 06 00 00 +R 00 00 01 00 00 04 01 00 +T A2 03 00 00 +R 00 00 01 00 +T A2 03 00 00 21 42 00 DD 4E F4 DD 46 F5 09 7E +R 00 00 01 00 +T AD 03 00 00 FE 05 28 2B +R 00 00 01 00 +T B1 03 00 00 +R 00 00 01 00 +T B1 03 00 00 21 EC 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T BA 03 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T C2 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T C7 03 00 00 00 00 00 00 E1 21 8C 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T D0 03 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T D9 03 00 00 +R 00 00 01 00 +T D9 03 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T DC 03 00 00 +R 00 00 01 00 +T DC 03 00 00 21 5E 00 DD 4E F4 DD 46 F5 09 46 +R 00 00 01 00 +T E7 03 00 00 23 66 68 DD 75 F6 DD 74 F7 01 +R 00 00 01 00 +T F1 03 00 00 11 00 09 7E E6 04 47 23 7E E6 00 +R 00 00 01 00 +T FC 03 00 00 B0 20 2B +R 00 00 01 00 +T FF 03 00 00 +R 00 00 01 00 +T FF 03 00 00 21 15 01 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T 08 04 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 10 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 15 04 00 00 00 00 00 00 E1 21 8C 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T 1E 04 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T 27 04 00 00 +R 00 00 01 00 +T 27 04 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T 2A 04 00 00 +R 00 00 01 00 +T 2A 04 00 00 DD 4E 04 DD 46 05 21 40 00 DD 5E +R 00 00 01 00 +T 35 04 00 00 F6 DD 56 F7 19 5E 23 56 3E +R 00 00 01 00 +T 3E 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 43 04 00 00 00 00 00 00 4D 44 21 00 00 CD +R 00 00 01 00 02 04 00 00 +T 4B 04 00 00 00 00 00 00 38 2B +R 00 00 01 00 02 04 13 00 +T 4F 04 00 00 +R 00 00 01 00 +T 4F 04 00 00 21 35 01 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T 58 04 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 60 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 65 04 00 00 00 00 00 00 E1 21 8C 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T 6E 04 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T 77 04 00 00 +R 00 00 01 00 +T 77 04 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T 7A 04 00 00 +R 00 00 01 00 +T 7A 04 00 00 21 00 00 E5 DD 4E 04 DD 46 05 DD +R 00 00 01 00 +T 85 04 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T 8D 04 00 00 00 00 00 00 CD 00 00 00 00 F1 C3 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T 94 04 00 00 27 06 00 00 +R 00 00 01 00 00 04 01 00 +T 96 04 00 00 +R 00 00 01 00 +T 96 04 00 00 21 80 00 DD 4E F4 DD 46 F5 09 34 +R 00 00 01 00 +T A1 04 00 00 23 20 01 34 +R 00 00 01 00 +T A5 04 00 00 +R 00 00 01 00 +T A5 04 00 00 DD 4E 04 DD 46 05 21 06 00 DD 5E +R 00 00 01 00 +T B0 04 00 00 F4 DD 56 F5 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T B8 04 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T BF 04 00 00 27 06 00 00 +R 00 00 01 00 00 04 01 00 +T C1 04 00 00 +R 00 00 01 00 +T C1 04 00 00 DD 6E F4 DD 66 F5 23 23 46 05 05 +R 00 00 01 00 +T CC 04 00 00 28 38 DD 6E F4 DD 66 F5 23 23 7E +R 00 00 01 00 +T D7 04 00 00 FE 03 28 2B +R 00 00 01 00 +T DB 04 00 00 +R 00 00 01 00 +T DB 04 00 00 +R 00 00 01 00 +T DB 04 00 00 +R 00 00 01 00 +T DB 04 00 00 21 56 01 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T E4 04 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T EC 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T F1 04 00 00 00 00 00 00 E1 21 8C 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T FA 04 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T 03 05 00 00 +R 00 00 01 00 +T 03 05 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T 06 05 00 00 +R 00 00 01 00 +T 06 05 00 00 21 82 00 DD 4E F4 DD 46 F5 09 34 +R 00 00 01 00 +T 11 05 00 00 23 20 01 34 +R 00 00 01 00 +T 15 05 00 00 +R 00 00 01 00 +T 15 05 00 00 DD 4E 04 DD 46 05 21 24 00 DD 5E +R 00 00 01 00 +T 20 05 00 00 F4 DD 56 F5 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 07 00 +T 28 05 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 2F 05 00 00 27 06 00 00 +R 00 00 01 00 00 04 01 00 +T 31 05 00 00 +R 00 00 01 00 +T 31 05 00 00 DD 6E F4 DD 66 F5 23 23 7E FE 03 +R 00 00 01 00 +T 3C 05 00 00 28 2B +R 00 00 01 00 +T 3E 05 00 00 +R 00 00 01 00 +T 3E 05 00 00 21 73 01 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T 47 05 00 00 05 DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 4F 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 54 05 00 00 00 00 00 00 E1 21 8C 00 DD 4E F4 +R 00 00 01 00 02 04 00 00 +T 5D 05 00 00 DD 46 F5 09 34 23 20 01 34 +R 00 00 01 00 +T 66 05 00 00 +R 00 00 01 00 +T 66 05 00 00 C3 27 06 00 00 +R 00 00 01 00 00 05 01 00 +T 69 05 00 00 +R 00 00 01 00 +T 69 05 00 00 21 84 00 DD 4E F4 DD 46 F5 09 34 +R 00 00 01 00 +T 74 05 00 00 23 20 01 34 +R 00 00 01 00 +T 78 05 00 00 +R 00 00 01 00 +T 78 05 00 00 DD 4E 04 DD 46 05 21 42 00 DD 5E +R 00 00 01 00 +T 83 05 00 00 F4 DD 56 F5 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 8B 05 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 92 05 00 00 27 06 00 00 +R 00 00 01 00 00 04 01 00 +T 94 05 00 00 +R 00 00 01 00 +T 94 05 00 00 21 05 00 DD 4E F4 DD 46 F5 09 7E +R 00 00 01 00 +T 9F 05 00 00 B7 28 31 +R 00 00 01 00 +T A2 05 00 00 +R 00 00 01 00 +T A2 05 00 00 DD 6E FA DD 66 FB E5 DD 6E F4 DD +R 00 00 01 00 +T AD 05 00 00 66 F5 46 23 66 68 23 23 4E 23 46 +R 00 00 01 00 +T B8 05 00 00 C5 21 8E 01 00 00 E5 DD 6E F4 DD +R 00 00 01 00 00 06 02 00 +T C1 05 00 00 66 F5 4E 23 46 C5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T C9 05 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 12 00 02 0A 00 00 +T D0 05 00 00 E1 E1 E1 +R 00 00 01 00 +T D3 05 00 00 +R 00 00 01 00 +T D3 05 00 00 21 86 00 DD 4E F4 DD 46 F5 09 34 +R 00 00 01 00 +T DE 05 00 00 23 20 01 34 +R 00 00 01 00 +T E2 05 00 00 +R 00 00 01 00 +T E2 05 00 00 DD 4E 04 DD 46 05 21 04 00 39 5D +R 00 00 01 00 +T ED 05 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T F3 05 00 00 CD 00 00 00 00 DD 5E 04 DD 56 05 +R 00 00 01 00 02 05 00 00 +T FC 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0F 00 02 0A 0F 00 +T 02 06 00 00 00 00 00 00 DD 6E 04 DD 66 05 E5 +R 00 00 01 00 02 04 00 00 +T 0B 06 00 00 0E 00 C5 0E 08 21 06 00 DD 5E F4 +R 00 00 01 00 +T 16 06 00 00 DD 56 F5 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 1E 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 25 06 00 00 18 00 +R 00 00 01 00 +T 27 06 00 00 +R 00 00 01 00 +T 27 06 00 00 +R 00 00 01 00 +T 27 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 70 70 70 5F 70 72 6F 63 3A 20 6D +R 00 00 02 00 +T 0B 00 00 00 69 73 73 69 6E 67 20 62 75 66 66 +R 00 00 02 00 +T 16 00 00 00 65 72 00 +R 00 00 02 00 +T 19 00 00 00 +R 00 00 02 00 +T 19 00 00 00 6D 69 73 73 69 6E 67 20 41 4C 4C +R 00 00 02 00 +T 24 00 00 00 20 61 64 64 72 65 73 73 00 +R 00 00 02 00 +T 2D 00 00 00 +R 00 00 02 00 +T 2D 00 00 00 6D 69 73 73 69 6E 67 20 55 49 00 +R 00 00 02 00 +T 38 00 00 00 +R 00 00 02 00 +T 38 00 00 00 6D 69 73 73 69 6E 67 20 75 70 70 +R 00 00 02 00 +T 43 00 00 00 65 72 20 70 72 6F 74 6F 63 6F 6C +R 00 00 02 00 +T 4E 00 00 00 20 62 79 74 65 00 +R 00 00 02 00 +T 54 00 00 00 +R 00 00 02 00 +T 54 00 00 00 6D 69 73 73 69 6E 67 20 6C 6F 77 +R 00 00 02 00 +T 5F 00 00 00 65 72 20 70 72 6F 74 6F 63 6F 6C +R 00 00 02 00 +T 6A 00 00 00 20 62 79 74 65 00 +R 00 00 02 00 +T 70 00 00 00 +R 00 00 02 00 +T 70 00 00 00 6E 6F 74 20 6F 70 65 6E 20 66 6F +R 00 00 02 00 +T 7B 00 00 00 72 20 49 50 20 74 72 61 66 66 69 +R 00 00 02 00 +T 86 00 00 00 63 00 +R 00 00 02 00 +T 88 00 00 00 +R 00 00 02 00 +T 88 00 00 00 6E 6F 74 20 6F 70 65 6E 20 66 6F +R 00 00 02 00 +T 93 00 00 00 72 20 43 6F 6D 70 72 65 73 73 65 +R 00 00 02 00 +T 9E 00 00 00 64 20 54 43 50 2F 49 50 20 74 72 +R 00 00 02 00 +T A9 00 00 00 61 66 66 69 63 00 +R 00 00 02 00 +T AF 00 00 00 +R 00 00 02 00 +T AF 00 00 00 43 6F 6D 70 72 65 73 73 65 64 20 +R 00 00 02 00 +T BA 00 00 00 54 43 50 2F 49 50 20 6E 6F 74 20 +R 00 00 02 00 +T C5 00 00 00 65 6E 61 62 6C 65 64 00 +R 00 00 02 00 +T CD 00 00 00 +R 00 00 02 00 +T CD 00 00 00 43 6F 6D 70 72 65 73 73 65 64 20 +R 00 00 02 00 +T D8 00 00 00 54 43 50 2F 49 50 20 70 61 63 6B +R 00 00 02 00 +T E3 00 00 00 65 74 20 65 72 72 6F 72 00 +R 00 00 02 00 +T EC 00 00 00 +R 00 00 02 00 +T EC 00 00 00 6E 6F 74 20 6F 70 65 6E 20 66 6F +R 00 00 02 00 +T F7 00 00 00 72 20 55 6E 63 6F 6D 70 72 65 73 +R 00 00 02 00 +T 02 01 00 00 73 65 64 20 54 43 50 2F 49 50 20 +R 00 00 02 00 +T 0D 01 00 00 74 72 61 66 66 69 63 00 +R 00 00 02 00 +T 15 01 00 00 +R 00 00 02 00 +T 15 01 00 00 55 6E 63 6F 6D 70 72 65 73 73 65 +R 00 00 02 00 +T 20 01 00 00 64 20 54 43 50 2F 49 50 20 6E 6F +R 00 00 02 00 +T 2B 01 00 00 74 20 65 6E 61 62 6C 65 64 00 +R 00 00 02 00 +T 35 01 00 00 +R 00 00 02 00 +T 35 01 00 00 55 6E 63 6F 6D 70 72 65 73 73 65 +R 00 00 02 00 +T 40 01 00 00 64 20 54 43 50 2F 49 50 20 70 61 +R 00 00 02 00 +T 4B 01 00 00 63 6B 65 74 20 65 72 72 6F 72 00 +R 00 00 02 00 +T 56 01 00 00 +R 00 00 02 00 +T 56 01 00 00 6E 6F 74 20 72 65 61 64 79 20 66 +R 00 00 02 00 +T 61 01 00 00 6F 72 20 41 75 74 68 65 6E 74 69 +R 00 00 02 00 +T 6C 01 00 00 63 61 74 69 6F 6E 00 +R 00 00 02 00 +T 73 01 00 00 +R 00 00 02 00 +T 73 01 00 00 6E 6F 74 20 72 65 61 64 79 20 66 +R 00 00 02 00 +T 7E 01 00 00 6F 72 20 49 50 43 50 20 74 72 61 +R 00 00 02 00 +T 89 01 00 00 66 66 69 63 00 +R 00 00 02 00 +T 8E 01 00 00 +R 00 00 02 00 +T 8E 01 00 00 25 73 20 50 50 50 20 55 6E 6B 6E +R 00 00 02 00 +T 99 01 00 00 6F 77 6E 20 70 61 63 6B 65 74 20 +R 00 00 02 00 +T A4 01 00 00 70 72 6F 74 6F 63 6F 6C 3A 20 25 +R 00 00 02 00 +T AF 01 00 00 78 3B 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_raw.rel b/src/nos/lib/ppp_lib/ppp_raw.rel new file mode 100644 index 00000000..0195179d --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_raw.rel @@ -0,0 +1,484 @@ +XL4 +H 3 areas 17 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _secclock Ref00000000 +S _Nospace Ref00000000 +S ?L_AND_L03 Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alloc_mbuf Ref00000000 +S _asy_send Ref00000000 +S _ppp_error Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _raw_dump Ref00000000 +S _get16 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _Asy Ref00000000 +S _fcstab Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dump Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5E0 flags 0 +S _ppp_raw Def00000000 +A CSTR size 14 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E4 FF 21 39 00 DD +R 00 00 01 00 02 05 0E 00 +T 09 00 00 00 5E 02 DD 56 03 19 7E 23 66 6F DD +R 00 00 01 00 +T 14 00 00 00 75 E4 DD 74 E5 01 22 00 09 46 23 +R 00 00 01 00 +T 1F 00 00 00 66 68 DD 75 E6 DD 74 E7 DD 36 EE +R 00 00 01 00 +T 2A 00 00 00 FF DD 36 EF FF 06 FF DD 70 F0 DD +R 00 00 01 00 +T 35 00 00 00 70 F1 DD 70 F2 DD 70 F3 DD 36 F8 +R 00 00 01 00 +T 40 00 00 00 04 DD 36 F9 00 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 4B 00 00 00 4E 23 46 C5 01 01 00 3E +R 00 00 01 00 +T 53 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 58 00 00 00 00 00 00 00 E1 21 66 00 DD 4E E4 +R 00 00 01 00 02 04 00 00 +T 61 00 00 00 DD 46 E5 09 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 6C 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 72 00 00 00 00 00 00 00 CD 00 00 00 00 EB 13 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 79 00 00 00 13 01 00 00 E1 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 09 00 +T 82 00 00 00 55 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 8C 00 00 00 00 00 00 00 21 61 00 DD 4E 02 DD +R 00 00 01 00 02 04 10 00 +T 95 00 00 00 46 03 09 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 9C 00 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T A3 00 00 00 73 23 72 23 71 23 70 DD 6E 04 DD +R 00 00 01 00 +T AE 00 00 00 66 05 7E 23 B6 28 1A DD 6E 04 DD +R 00 00 01 00 +T B9 00 00 00 66 05 46 23 66 68 01 0C 00 09 46 +R 00 00 01 00 +T C4 00 00 00 23 66 68 01 04 00 A7 ED 42 30 2E +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 21 00 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 00 05 02 00 +T D8 00 00 00 05 DD 5E E4 DD 56 E5 3E +R 00 00 01 00 +T E0 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T E5 00 00 00 00 00 00 00 E1 21 74 00 DD 4E E4 +R 00 00 01 00 02 04 00 00 +T EE 00 00 00 DD 46 E5 09 34 23 20 01 34 +R 00 00 01 00 +T F7 00 00 00 +R 00 00 01 00 +T F7 00 00 00 21 FF FF C3 DD 05 00 00 +R 00 00 01 00 00 08 01 00 +T FD 00 00 00 +R 00 00 01 00 +T FD 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 08 01 00 00 0A 00 09 7E 23 66 6F 46 DD 70 F4 +R 00 00 01 00 +T 13 01 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 1E 01 00 00 0A 00 09 46 23 66 68 23 46 DD 70 +R 00 00 01 00 +T 29 01 00 00 F5 DD 6E 04 DD 66 05 46 23 66 68 +R 00 00 01 00 +T 34 01 00 00 01 0A 00 09 5E 23 56 13 13 3E +R 00 00 01 00 +T 3E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 43 01 00 00 00 00 00 00 DD 75 F6 DD 74 F7 DD +R 00 00 01 00 02 04 00 00 +T 4C 01 00 00 6E F6 DD 66 F7 01 21 C0 A7 ED 42 +R 00 00 01 00 +T 57 01 00 00 20 04 0E 01 18 02 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 0E 00 +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 06 00 DD 71 E8 DD 70 E9 79 B0 20 +R 00 00 01 00 +T 6A 01 00 00 2D 21 40 00 DD 4E E6 DD 46 E7 09 +R 00 00 01 00 +T 75 01 00 00 7E E6 04 28 1E +R 00 00 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 21 44 00 DD 4E E6 DD 46 E7 09 5E +R 00 00 01 00 +T 85 01 00 00 23 56 23 4E 23 46 EB DD 75 F0 DD +R 00 00 01 00 +T 90 01 00 00 74 F1 DD 71 F2 DD 70 F3 +R 00 00 01 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 DD 7E E8 DD B6 E9 20 28 21 40 00 +R 00 00 01 00 +T A3 01 00 00 DD 4E E6 DD 46 E7 09 7E E6 80 47 +R 00 00 01 00 +T AE 01 00 00 23 7E E6 00 B0 28 13 DD 6E F6 DD +R 00 00 01 00 +T B9 01 00 00 66 F7 01 FF 00 A7 ED 42 30 05 21 +R 00 00 01 00 +T C4 01 00 00 00 00 18 03 +R 00 00 01 00 +T C8 01 00 00 +R 00 00 01 00 +T C8 01 00 00 21 01 00 +R 00 00 01 00 +T CB 01 00 00 +R 00 00 01 00 +T CB 01 00 00 DD 75 EC DD 74 ED 7D B4 20 0D +R 00 00 01 00 +T D5 01 00 00 +R 00 00 01 00 +T D5 01 00 00 DD 6E F8 DD 66 F9 2B DD 75 F8 DD +R 00 00 01 00 +T E0 01 00 00 74 F9 +R 00 00 01 00 +T E2 01 00 00 +R 00 00 01 00 +T E2 01 00 00 DD 7E E8 DD B6 E9 20 1A 21 40 00 +R 00 00 01 00 +T ED 01 00 00 DD 4E E6 DD 46 E7 09 7E E6 00 47 +R 00 00 01 00 +T F8 01 00 00 23 7E E6 01 B0 28 05 21 00 00 18 +R 00 00 01 00 +T 03 02 00 00 03 +R 00 00 01 00 +T 04 02 00 00 +R 00 00 01 00 +T 04 02 00 00 21 01 00 +R 00 00 01 00 +T 07 02 00 00 +R 00 00 01 00 +T 07 02 00 00 DD 75 EA DD 74 EB 7D B4 20 0D +R 00 00 01 00 +T 11 02 00 00 +R 00 00 01 00 +T 11 02 00 00 21 14 00 39 7E D6 02 77 23 7E DE +R 00 00 01 00 +T 1C 02 00 00 00 77 +R 00 00 01 00 +T 1E 02 00 00 +R 00 00 01 00 +T 1E 02 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 29 02 00 00 0C 00 09 E5 DD 4E F8 DD 46 F9 21 +R 00 00 01 00 +T 34 02 00 00 04 00 A7 ED 42 EB E1 7E 93 77 23 +R 00 00 01 00 +T 3F 02 00 00 7E 9A 77 DD 6E 04 DD 66 05 56 23 +R 00 00 01 00 +T 4A 02 00 00 66 6A 11 0A 00 19 E5 21 04 00 A7 +R 00 00 01 00 +T 55 02 00 00 ED 42 4D 44 E1 7E 81 77 23 7E 88 +R 00 00 01 00 +T 60 02 00 00 77 2B 6E 67 DD 75 FC DD 74 FD DD +R 00 00 01 00 +T 6B 02 00 00 7E EA DD B6 EB 28 24 +R 00 00 01 00 +T 72 02 00 00 +R 00 00 01 00 +T 72 02 00 00 DD 46 F4 DD 6E FC DD 66 FD 23 DD +R 00 00 01 00 +T 7D 02 00 00 75 FC DD 74 FD 2B 70 DD 46 F5 DD +R 00 00 01 00 +T 88 02 00 00 6E FC DD 66 FD 23 DD 75 FC DD 74 +R 00 00 01 00 +T 93 02 00 00 FD 2B 70 +R 00 00 01 00 +T 96 02 00 00 +R 00 00 01 00 +T 96 02 00 00 DD 7E EC DD B6 ED 28 1A +R 00 00 01 00 +T 9E 02 00 00 +R 00 00 01 00 +T 9E 02 00 00 DD 6E F6 DD 66 F7 6C 26 00 E5 DD +R 00 00 01 00 +T A9 02 00 00 6E FC DD 66 FD 23 DD 75 FC DD 74 +R 00 00 01 00 +T B4 02 00 00 FD 2B C1 71 +R 00 00 01 00 +T B8 02 00 00 +R 00 00 01 00 +T B8 02 00 00 DD 7E F6 E6 FF DD 6E FC DD 66 FD +R 00 00 01 00 +T C3 02 00 00 23 DD 75 FC DD 74 FD 2B 77 DD 6E +R 00 00 01 00 +T CE 02 00 00 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T D6 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T DB 02 00 00 00 00 00 00 29 01 08 00 09 EB 3E +R 00 00 01 00 02 04 00 00 +T E4 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T E9 02 00 00 00 00 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 02 04 00 00 +T F2 02 00 00 B4 20 2E +R 00 00 01 00 +T F5 02 00 00 +R 00 00 01 00 +T F5 02 00 00 21 00 00 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 02 05 02 00 +T FE 02 00 00 05 DD 5E E4 DD 56 E5 3E +R 00 00 01 00 +T 06 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 0B 03 00 00 00 00 00 00 E1 21 76 00 DD 4E E4 +R 00 00 01 00 02 04 00 00 +T 14 03 00 00 DD 46 E5 09 34 23 20 01 34 +R 00 00 01 00 +T 1D 03 00 00 +R 00 00 01 00 +T 1D 03 00 00 21 FF FF C3 DD 05 00 00 +R 00 00 01 00 00 08 01 00 +T 23 03 00 00 +R 00 00 01 00 +T 23 03 00 00 21 0A 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T 2E 03 00 00 23 66 68 DD 75 FC DD 74 FD 21 +R 00 00 01 00 +T 38 03 00 00 2C 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 43 03 00 00 46 11 59 00 CD 00 00 00 00 21 +R 00 00 01 00 02 09 0F 00 +T 4B 03 00 00 18 00 00 00 19 7E B7 20 1D +R 00 00 01 00 02 04 11 00 +T 52 03 00 00 +R 00 00 01 00 +T 52 03 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 5D 03 00 00 74 FD 2B 36 7E 21 6A 00 DD 4E E4 +R 00 00 01 00 +T 68 03 00 00 DD 46 E5 09 CD 00 00 00 00 +R 00 00 01 00 02 09 10 00 +T 6F 03 00 00 +R 00 00 01 00 +T 6F 03 00 00 +R 00 00 01 00 +T 6F 03 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 13 00 +T 77 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 13 00 02 0A 00 00 +T 7E 03 00 00 75 FE DD 74 FF 7D A4 3C CA +R 00 00 01 00 +T 87 03 00 00 41 04 00 00 +R 00 00 01 00 00 04 01 00 +T 89 03 00 00 +R 00 00 01 00 +T 89 03 00 00 DD 6E EE DD 66 EF 6C 26 00 E5 DD +R 00 00 01 00 +T 94 03 00 00 7E EE DD AE FE 6F DD 7E EF DD AE +R 00 00 01 00 +T 9F 03 00 00 FF 67 7D E6 FF 4F 7C E6 00 47 69 +R 00 00 01 00 +T AA 03 00 00 60 29 01 00 00 00 00 09 C1 79 AE +R 00 00 01 00 02 07 12 00 +T B3 03 00 00 5F 78 23 AE 57 DD 73 EE DD 72 EF +R 00 00 01 00 +T BE 03 00 00 01 20 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T C9 03 00 00 AC 67 ED 42 30 23 DD 6E F2 DD 66 +R 00 00 01 00 +T D4 03 00 00 F3 E5 DD 6E F0 DD 66 F1 E5 DD 7E +R 00 00 01 00 +T DF 03 00 00 FE 01 00 00 21 01 00 CD +R 00 00 01 00 +T E7 03 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0B 00 02 09 03 00 +T EE 03 00 00 B1 B0 20 14 +R 00 00 01 00 +T F2 03 00 00 +R 00 00 01 00 +T F2 03 00 00 +R 00 00 01 00 +T F2 03 00 00 3E 7D DD AE FE DD B6 FF 28 0A 3E +R 00 00 01 00 +T FD 03 00 00 7E DD AE FE DD B6 FF 20 26 +R 00 00 01 00 +T 06 04 00 00 +R 00 00 01 00 +T 06 04 00 00 +R 00 00 01 00 +T 06 04 00 00 +R 00 00 01 00 +T 06 04 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 11 04 00 00 74 FD 2B 36 7D DD 7E FE EE 20 DD +R 00 00 01 00 +T 1C 04 00 00 6E FC DD 66 FD 23 DD 75 FC DD 74 +R 00 00 01 00 +T 27 04 00 00 FD 2B 77 18 12 +R 00 00 01 00 +T 2C 04 00 00 +R 00 00 01 00 +T 2C 04 00 00 DD 46 FE DD 6E FC DD 66 FD 23 DD +R 00 00 01 00 +T 37 04 00 00 75 FC DD 74 FD 2B 70 +R 00 00 01 00 +T 3E 04 00 00 +R 00 00 01 00 +T 3E 04 00 00 C3 6F 03 00 00 +R 00 00 01 00 00 05 01 00 +T 41 04 00 00 +R 00 00 01 00 +T 41 04 00 00 21 0A 00 39 7E EE FF 77 23 7E EE +R 00 00 01 00 +T 4C 04 00 00 FF 77 DD 7E EE E6 FF 6F DD 7E EF +R 00 00 01 00 +T 57 04 00 00 E6 00 67 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 61 04 00 00 20 80 3E 80 AC 67 ED 42 30 23 DD +R 00 00 01 00 +T 6C 04 00 00 6E F2 DD 66 F3 E5 DD 6E F0 DD 66 +R 00 00 01 00 +T 77 04 00 00 F1 E5 DD 7E FE 01 00 00 21 01 00 +R 00 00 01 00 +T 82 04 00 00 CD 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0B 00 02 0A 03 00 +T 89 04 00 00 B4 B1 B0 20 14 +R 00 00 01 00 +T 8E 04 00 00 +R 00 00 01 00 +T 8E 04 00 00 +R 00 00 01 00 +T 8E 04 00 00 3E 7D DD AE FE DD B6 FF 28 0A 3E +R 00 00 01 00 +T 99 04 00 00 7E DD AE FE DD B6 FF 20 26 +R 00 00 01 00 +T A2 04 00 00 +R 00 00 01 00 +T A2 04 00 00 +R 00 00 01 00 +T A2 04 00 00 +R 00 00 01 00 +T A2 04 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T AD 04 00 00 74 FD 2B 36 7D DD 7E FE EE 20 DD +R 00 00 01 00 +T B8 04 00 00 6E FC DD 66 FD 23 DD 75 FC DD 74 +R 00 00 01 00 +T C3 04 00 00 FD 2B 77 18 12 +R 00 00 01 00 +T C8 04 00 00 +R 00 00 01 00 +T C8 04 00 00 DD 46 FE DD 6E FC DD 66 FD 23 DD +R 00 00 01 00 +T D3 04 00 00 75 FC DD 74 FD 2B 70 +R 00 00 01 00 +T DA 04 00 00 +R 00 00 01 00 +T DA 04 00 00 DD 6E EE DD 66 EF 6C 26 00 DD 75 +R 00 00 01 00 +T E5 04 00 00 FE DD 74 FF 01 20 80 3E 80 AC 67 +R 00 00 01 00 +T F0 04 00 00 ED 42 30 23 DD 6E F2 DD 66 F3 E5 +R 00 00 01 00 +T FB 04 00 00 DD 6E F0 DD 66 F1 E5 DD 7E FE 01 +R 00 00 01 00 +T 06 05 00 00 00 00 21 01 00 CD 00 00 00 00 CD +R 00 00 01 00 02 0A 0B 00 +T 0F 05 00 00 00 00 00 00 7D B4 B1 B0 20 14 +R 00 00 01 00 02 04 03 00 +T 17 05 00 00 +R 00 00 01 00 +T 17 05 00 00 +R 00 00 01 00 +T 17 05 00 00 3E 7D DD AE FE DD B6 FF 28 0A 3E +R 00 00 01 00 +T 22 05 00 00 7E DD AE FE DD B6 FF 20 26 +R 00 00 01 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 36 05 00 00 74 FD 2B 36 7D DD 7E FE EE 20 DD +R 00 00 01 00 +T 41 05 00 00 6E FC DD 66 FD 23 DD 75 FC DD 74 +R 00 00 01 00 +T 4C 05 00 00 FD 2B 77 18 12 +R 00 00 01 00 +T 51 05 00 00 +R 00 00 01 00 +T 51 05 00 00 DD 46 FE DD 6E FC DD 66 FD 23 DD +R 00 00 01 00 +T 5C 05 00 00 75 FC DD 74 FD 2B 70 +R 00 00 01 00 +T 63 05 00 00 +R 00 00 01 00 +T 63 05 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 6E 05 00 00 74 FD 2B 36 7E 21 0C 00 DD 4E FA +R 00 00 01 00 +T 79 05 00 00 DD 46 FB 09 E5 21 0A 00 09 4E 23 +R 00 00 01 00 +T 84 05 00 00 46 DD 6E FC DD 66 FD A7 ED 42 4D +R 00 00 01 00 +T 8F 05 00 00 44 E1 71 23 70 21 12 00 DD 4E 02 +R 00 00 01 00 +T 9A 05 00 00 DD 46 03 09 7E E6 00 47 23 7E E6 +R 00 00 01 00 +T A5 05 00 00 20 B0 28 19 +R 00 00 01 00 +T A9 05 00 00 +R 00 00 01 00 +T A9 05 00 00 DD 6E FA DD 66 FB E5 01 01 00 DD +R 00 00 01 00 +T B4 05 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0C 00 +T BC 05 00 00 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T C2 05 00 00 +R 00 00 01 00 +T C2 05 00 00 21 16 00 39 4D 44 21 2C 00 DD 5E +R 00 00 01 00 +T CD 05 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T D6 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T DB 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T DD 05 00 00 +R 00 00 01 00 +T DD 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6C 69 6E 6B 20 68 65 61 64 65 72 +R 00 00 02 00 +T 0B 00 00 00 20 6D 69 73 73 69 6E 67 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_ready.rel b/src/nos/lib/ppp_lib/ppp_ready.rel new file mode 100644 index 00000000..3fce41d1 --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_ready.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _secclock Ref00000000 +S _fsm_start Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 48 flags 0 +S _ppp_ready Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 04 00 19 7E E6 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 30 20 39 +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 DD 6E 02 DD 66 03 23 23 36 03 21 +R 00 00 01 00 +T 17 00 00 00 60 00 DD 4E 02 DD 46 03 09 E5 3E +R 00 00 01 00 +T 22 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 27 00 00 00 00 00 00 00 EB E1 73 23 72 23 71 +R 00 00 01 00 02 04 00 00 +T 30 00 00 00 23 70 21 42 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 3B 00 00 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 40 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/ppp_lib/ppp_recv.rel b/src/nos/lib/ppp_lib/ppp_recv.rel new file mode 100644 index 00000000..2643bee7 --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_recv.rel @@ -0,0 +1,453 @@ +XL4 +H 3 areas 14 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _trim_mbuf Ref00000000 +S _Nospace Ref00000000 +S ?L_AND_L03 Ref00000000 +S _len_p Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alloc_mbuf Ref00000000 +S _net_route Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _raw_dump Ref00000000 +S _ppp_skipped Ref00000000 +S _kwait Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _get_asy Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _free_p Ref00000000 +S _fcstab Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4A6 flags 0 +S _ppp_recv Def00000000 +A CSTR size 27 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E8 FF DD 71 E8 DD +R 00 00 01 00 02 05 0D 00 +T 09 00 00 00 70 E9 21 39 00 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 EA DD 74 EB 06 FF DD 70 EC DD +R 00 00 01 00 +T 1F 00 00 00 70 ED DD 70 EE DD 70 EF DD 36 F0 +R 00 00 01 00 +T 2A 00 00 00 FF DD 36 F1 FF AF DD 77 F2 DD 77 +R 00 00 01 00 +T 35 00 00 00 F3 AF DD 77 F4 DD 77 F5 AF DD 77 +R 00 00 01 00 +T 40 00 00 00 F6 DD 77 F7 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 53 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T 5A 00 00 00 75 FC DD 74 FD 7D A4 3C CA +R 00 00 01 00 +T 63 00 00 00 79 04 00 00 +R 00 00 01 00 00 04 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 21 12 00 DD 4E E8 DD 46 E9 09 7E +R 00 00 01 00 +T 70 00 00 00 E6 00 47 23 7E E6 20 B0 CA +R 00 00 01 00 +T 79 00 00 00 14 01 00 00 +R 00 00 01 00 00 04 01 00 +T 7B 00 00 00 +R 00 00 01 00 +T 7B 00 00 00 DD 7E F2 DD B6 F3 20 15 11 00 20 +R 00 00 01 00 +T 86 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 8C 00 00 00 00 00 00 00 DD 75 F2 DD 74 F3 7D +R 00 00 01 00 02 04 00 00 +T 95 00 00 00 B4 28 7C +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 21 0A 00 DD 4E F2 DD 46 F3 09 5E +R 00 00 01 00 +T A3 00 00 00 23 56 13 72 2B 73 1B EB DD 46 FC +R 00 00 01 00 +T AE 00 00 00 70 21 0C 00 DD 4E F2 DD 46 F3 09 +R 00 00 01 00 +T B9 00 00 00 34 23 20 01 34 +R 00 00 01 00 +T BE 00 00 00 +R 00 00 01 00 +T BE 00 00 00 21 0C 00 DD 4E F2 DD 46 F3 09 3E +R 00 00 01 00 +T C9 00 00 00 01 AE 23 B6 28 45 3E 7E DD AE FC +R 00 00 01 00 +T D4 00 00 00 DD B6 FD 20 3B +R 00 00 01 00 +T D9 00 00 00 +R 00 00 01 00 +T D9 00 00 00 +R 00 00 01 00 +T D9 00 00 00 +R 00 00 01 00 +T D9 00 00 00 21 0A 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T E4 00 00 00 21 0E 00 09 EB E1 73 23 72 DD 6E +R 00 00 01 00 +T EF 00 00 00 F2 DD 66 F3 E5 01 10 00 DD 5E E8 +R 00 00 01 00 +T FA 00 00 00 DD 56 E9 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0A 00 +T 00 01 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 07 01 00 00 0C 00 DD 4E F2 DD 46 F3 09 AF 77 +R 00 00 01 00 +T 12 01 00 00 23 77 +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 3E 7E DD AE FC DD B6 FD C2 +R 00 00 01 00 +T 1D 01 00 00 A3 02 00 00 +R 00 00 01 00 00 04 01 00 +T 1F 01 00 00 +R 00 00 01 00 +T 1F 01 00 00 DD 7E FA E6 01 28 2B +R 00 00 01 00 +T 26 01 00 00 +R 00 00 01 00 +T 26 01 00 00 21 00 00 00 00 E5 21 0E 00 39 4D +R 00 00 01 00 00 05 02 00 +T 2F 01 00 00 44 DD 5E EA DD 56 EB 3E +R 00 00 01 00 +T 37 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 3C 01 00 00 00 00 00 00 E1 21 8A 00 DD 4E EA +R 00 00 01 00 02 04 00 00 +T 45 01 00 00 DD 46 EB 09 34 23 20 01 34 +R 00 00 01 00 +T 4E 01 00 00 +R 00 00 01 00 +T 4E 01 00 00 C3 F9 01 00 00 +R 00 00 01 00 00 05 01 00 +T 51 01 00 00 +R 00 00 01 00 +T 51 01 00 00 DD 7E FA E6 02 28 11 +R 00 00 01 00 +T 58 01 00 00 +R 00 00 01 00 +T 58 01 00 00 21 0C 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T 60 01 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 10 00 02 0A 00 00 +T 67 01 00 00 F9 01 00 00 +R 00 00 01 00 00 04 01 00 +T 69 01 00 00 +R 00 00 01 00 +T 69 01 00 00 DD 7E F4 DD B6 F5 28 7B +R 00 00 01 00 +T 71 01 00 00 +R 00 00 01 00 +T 71 01 00 00 21 B8 F0 DD 4E F0 DD 46 F1 A7 ED +R 00 00 01 00 +T 7C 01 00 00 42 28 2A +R 00 00 01 00 +T 7F 01 00 00 +R 00 00 01 00 +T 7F 01 00 00 21 18 00 00 00 E5 21 0E 00 39 4D +R 00 00 01 00 00 05 02 00 +T 88 01 00 00 44 DD 5E EA DD 56 EB 3E +R 00 00 01 00 +T 90 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 95 01 00 00 00 00 00 00 E1 21 88 00 DD 4E EA +R 00 00 01 00 02 04 00 00 +T 9E 01 00 00 DD 46 EB 09 34 23 20 01 34 +R 00 00 01 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 18 41 +R 00 00 01 00 +T A9 01 00 00 +R 00 00 01 00 +T A9 01 00 00 DD 5E F4 DD 56 F5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T B1 01 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T B8 01 00 00 FE FF 09 4D 44 21 0C 00 39 5D 54 +R 00 00 01 00 +T C3 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T C9 01 00 00 00 00 00 00 21 0C 00 39 4D 44 DD +R 00 00 01 00 02 04 00 00 +T D2 01 00 00 5E E8 DD 56 E9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T DA 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T E0 01 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0C 00 +T E5 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T EA 01 00 00 +R 00 00 01 00 +T EA 01 00 00 18 0D +R 00 00 01 00 +T EC 01 00 00 +R 00 00 01 00 +T EC 01 00 00 21 7C 00 DD 4E EA DD 46 EB 09 CD +R 00 00 01 00 +T F7 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 0F 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 AF DD 77 FA DD 77 FB AF DD 77 F6 +R 00 00 01 00 +T 04 02 00 00 DD 77 F7 AF DD 77 F4 DD 77 F5 DD +R 00 00 01 00 +T 0F 02 00 00 36 F0 FF DD 36 F1 FF 06 FF DD 70 +R 00 00 01 00 +T 1A 02 00 00 EC DD 70 ED DD 70 EE DD 70 EF 21 +R 00 00 01 00 +T 25 02 00 00 06 00 DD 4E EA DD 46 EB 09 7E FE +R 00 00 01 00 +T 30 02 00 00 05 20 3B +R 00 00 01 00 +T 33 02 00 00 +R 00 00 01 00 +T 33 02 00 00 21 22 00 DD 4E EA DD 46 EB 09 46 +R 00 00 01 00 +T 3E 02 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 48 02 00 00 16 00 09 7E E6 04 28 1E +R 00 00 01 00 +T 50 02 00 00 +R 00 00 01 00 +T 50 02 00 00 21 1A 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 5B 02 00 00 23 56 23 4E 23 46 EB DD 75 EC DD +R 00 00 01 00 +T 66 02 00 00 74 ED DD 71 EE DD 70 EF +R 00 00 01 00 +T 6E 02 00 00 +R 00 00 01 00 +T 6E 02 00 00 +R 00 00 01 00 +T 6E 02 00 00 21 12 00 DD 4E E8 DD 46 E9 09 7E +R 00 00 01 00 +T 79 02 00 00 E6 00 47 23 7E E6 20 B0 20 1D +R 00 00 01 00 +T 83 02 00 00 +R 00 00 01 00 +T 83 02 00 00 DD 7E F2 DD B6 F3 28 15 +R 00 00 01 00 +T 8B 02 00 00 +R 00 00 01 00 +T 8B 02 00 00 21 0A 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T 93 02 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 10 00 02 0A 00 00 +T 9A 02 00 00 DD 77 F2 DD 77 F3 +R 00 00 01 00 +T A0 02 00 00 +R 00 00 01 00 +T A0 02 00 00 +R 00 00 01 00 +T A0 02 00 00 C3 4B 00 00 00 +R 00 00 01 00 00 05 01 00 +T A3 02 00 00 +R 00 00 01 00 +T A3 02 00 00 01 20 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T AE 02 00 00 AC 67 ED 42 30 26 DD 6E EE DD 66 +R 00 00 01 00 +T B9 02 00 00 EF E5 DD 6E EC DD 66 ED E5 DD 7E +R 00 00 01 00 +T C4 02 00 00 FC 01 00 00 21 01 00 CD +R 00 00 01 00 +T CC 02 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 09 00 02 09 03 00 +T D3 02 00 00 B1 B0 28 03 +R 00 00 01 00 +T D7 02 00 00 +R 00 00 01 00 +T D7 02 00 00 +R 00 00 01 00 +T D7 02 00 00 +R 00 00 01 00 +T D7 02 00 00 C3 4B 00 00 00 +R 00 00 01 00 00 05 01 00 +T DA 02 00 00 +R 00 00 01 00 +T DA 02 00 00 DD 7E FA E6 01 28 1C +R 00 00 01 00 +T E1 02 00 00 +R 00 00 01 00 +T E1 02 00 00 21 12 00 39 7E E6 FE 77 23 7E E6 +R 00 00 01 00 +T EC 02 00 00 FF 77 21 14 00 39 7E EE 20 77 23 +R 00 00 01 00 +T F7 02 00 00 7E EE 00 77 18 1A +R 00 00 01 00 +T FD 02 00 00 +R 00 00 01 00 +T FD 02 00 00 3E 7D DD AE FC DD B6 FD 20 10 +R 00 00 01 00 +T 07 03 00 00 +R 00 00 01 00 +T 07 03 00 00 21 12 00 39 7E F6 01 77 23 7E F6 +R 00 00 01 00 +T 12 03 00 00 00 77 C3 4B 00 00 00 +R 00 00 01 00 00 07 01 00 +T 17 03 00 00 +R 00 00 01 00 +T 17 03 00 00 +R 00 00 01 00 +T 17 03 00 00 DD 7E F6 DD B6 F7 20 70 +R 00 00 01 00 +T 1F 03 00 00 +R 00 00 01 00 +T 1F 03 00 00 11 80 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 06 00 +T 25 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 2C 03 00 00 F6 DD 74 F7 7D B4 20 38 +R 00 00 01 00 +T 34 03 00 00 +R 00 00 01 00 +T 34 03 00 00 21 00 00 00 00 E5 21 10 00 39 4D +R 00 00 01 00 02 05 02 00 +T 3D 03 00 00 44 DD 5E EA DD 56 EB 3E +R 00 00 01 00 +T 45 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 4A 03 00 00 00 00 00 00 E1 21 8E 00 DD 4E EA +R 00 00 01 00 02 04 00 00 +T 53 03 00 00 DD 46 EB 09 34 23 20 01 34 +R 00 00 01 00 +T 5C 03 00 00 +R 00 00 01 00 +T 5C 03 00 00 21 12 00 39 7E F6 02 77 23 7E F6 +R 00 00 01 00 +T 67 03 00 00 00 77 C3 4B 00 00 00 +R 00 00 01 00 00 07 01 00 +T 6C 03 00 00 +R 00 00 01 00 +T 6C 03 00 00 DD 6E F6 DD 66 F7 DD 75 F4 DD 74 +R 00 00 01 00 +T 77 03 00 00 F5 21 0A 00 DD 4E F6 DD 46 F7 09 +R 00 00 01 00 +T 82 03 00 00 46 23 66 68 DD 75 F8 DD 74 F9 C3 +R 00 00 01 00 +T 8D 03 00 00 20 04 00 00 +R 00 00 01 00 00 04 01 00 +T 8F 03 00 00 +R 00 00 01 00 +T 8F 03 00 00 21 04 00 DD 4E F6 DD 46 F7 09 5E +R 00 00 01 00 +T 9A 03 00 00 23 56 21 0C 00 09 46 23 66 68 A7 +R 00 00 01 00 +T A5 03 00 00 ED 52 38 77 +R 00 00 01 00 +T A9 03 00 00 +R 00 00 01 00 +T A9 03 00 00 11 80 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 06 00 +T AF 03 00 00 00 00 00 00 CD 00 00 00 00 E5 DD +R 00 00 01 00 02 04 06 00 02 09 00 00 +T B6 03 00 00 6E F6 DD 66 F7 C1 71 23 70 79 B0 +R 00 00 01 00 +T C1 03 00 00 20 3F +R 00 00 01 00 +T C3 03 00 00 +R 00 00 01 00 +T C3 03 00 00 21 00 00 00 00 E5 21 0E 00 39 4D +R 00 00 01 00 02 05 02 00 +T CC 03 00 00 44 DD 5E EA DD 56 EB 3E +R 00 00 01 00 +T D4 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T D9 03 00 00 00 00 00 00 E1 21 8E 00 DD 4E EA +R 00 00 01 00 02 04 00 00 +T E2 03 00 00 DD 46 EB 09 34 23 20 01 34 +R 00 00 01 00 +T EB 03 00 00 +R 00 00 01 00 +T EB 03 00 00 AF DD 77 F4 DD 77 F5 21 12 00 39 +R 00 00 01 00 +T F6 03 00 00 7E F6 02 77 23 7E F6 00 77 C3 +R 00 00 01 00 +T 00 04 00 00 4B 00 00 00 +R 00 00 01 00 00 04 01 00 +T 02 04 00 00 +R 00 00 01 00 +T 02 04 00 00 DD 6E F6 DD 66 F7 46 23 66 68 DD +R 00 00 01 00 +T 0D 04 00 00 75 F6 DD 74 F7 01 0A 00 09 46 23 +R 00 00 01 00 +T 18 04 00 00 66 68 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 20 04 00 00 +R 00 00 01 00 +T 20 04 00 00 +R 00 00 01 00 +T 20 04 00 00 DD 46 FC DD 6E F8 DD 66 F9 23 DD +R 00 00 01 00 +T 2B 04 00 00 75 F8 DD 74 F9 2B 70 21 0C 00 DD +R 00 00 01 00 +T 36 04 00 00 4E F6 DD 46 F7 09 34 23 20 01 34 +R 00 00 01 00 +T 41 04 00 00 +R 00 00 01 00 +T 41 04 00 00 DD 6E F0 DD 66 F1 6C 26 00 E5 DD +R 00 00 01 00 +T 4C 04 00 00 7E F0 DD AE FC 6F DD 7E F1 DD AE +R 00 00 01 00 +T 57 04 00 00 FD 67 7D E6 FF 4F 7C E6 00 47 69 +R 00 00 01 00 +T 62 04 00 00 60 29 01 00 00 00 00 09 C1 79 AE +R 00 00 01 00 02 07 11 00 +T 6B 04 00 00 5F 78 23 AE 57 DD 73 F0 DD 72 F1 +R 00 00 01 00 +T 76 04 00 00 C3 4B 00 00 00 +R 00 00 01 00 00 05 01 00 +T 79 04 00 00 +R 00 00 01 00 +T 79 04 00 00 21 0A 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T 81 04 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 10 00 02 0A 00 00 +T 88 04 00 00 0C 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T 90 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T 96 04 00 00 18 00 DD 4E E8 DD 46 E9 09 AF 77 +R 00 00 01 00 +T A1 04 00 00 23 77 C3 00 00 00 00 +R 00 00 01 00 02 07 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 64 65 6C 69 62 65 72 61 74 65 20 +R 00 00 02 00 +T 0B 00 00 00 63 61 6E 63 65 6C 6C 61 74 69 6F +R 00 00 02 00 +T 16 00 00 00 6E 00 +R 00 00 02 00 +T 18 00 00 00 +R 00 00 02 00 +T 18 00 00 00 63 68 65 63 6B 73 75 6D 20 65 72 +R 00 00 02 00 +T 23 00 00 00 72 6F 72 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_send.rel b/src/nos/lib/ppp_lib/ppp_send.rel new file mode 100644 index 00000000..2c198366 --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_send.rel @@ -0,0 +1,144 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _ppp_error Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S _slhc_compress Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 158 flags 0 +S _ppp_send Def00000000 +A CSTR size 26 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 36 FE 21 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 36 FF 00 79 B0 28 18 21 39 00 +R 00 00 01 00 +T 14 00 00 00 DD 4E 04 DD 46 05 09 46 23 66 68 +R 00 00 01 00 +T 1F 00 00 00 DD 75 FA DD 74 FB 7D B4 20 14 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 31 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 38 00 00 00 FF FF C3 55 01 00 00 +R 00 00 01 00 00 07 01 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 21 42 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 48 00 00 00 FE 05 28 2E +R 00 00 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 21 00 00 00 00 E5 DD 4E 02 DD 46 +R 00 00 01 00 00 05 02 00 +T 55 00 00 00 03 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 5D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 62 00 00 00 00 00 00 00 E1 21 74 00 DD 4E FA +R 00 00 01 00 02 04 00 00 +T 6B 00 00 00 DD 46 FB 09 34 23 20 01 34 +R 00 00 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 21 FF FF C3 55 01 00 00 +R 00 00 01 00 00 08 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 21 5E 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T 85 00 00 00 23 66 68 DD 75 FC DD 74 FD 01 +R 00 00 01 00 +T 8F 00 00 00 31 00 09 7E E6 04 CA 21 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 21 3F 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T A3 00 00 00 16 00 D5 DD 4E 02 DD 46 03 21 +R 00 00 01 00 +T AD 00 00 00 40 00 DD 5E FC DD 56 FD 19 5E 23 +R 00 00 01 00 +T B8 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T BE 00 00 00 CD 00 00 00 00 F1 4D 44 3E 40 A9 +R 00 00 01 00 02 05 00 00 +T C7 00 00 00 B0 20 0A +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 DD 36 FE 21 DD 36 FF 00 18 4D +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 3E 80 A9 B0 20 0A DD 36 FE 2D DD +R 00 00 01 00 +T DF 00 00 00 36 FF 00 18 3D +R 00 00 01 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 3E 70 A9 B0 20 0A DD 36 FE 2F DD +R 00 00 01 00 +T EF 00 00 00 36 FF 00 18 2D +R 00 00 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 21 18 00 00 00 E5 DD 4E 02 DD 46 +R 00 00 01 00 00 05 02 00 +T FD 00 00 00 03 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 05 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 0A 01 00 00 00 00 00 00 E1 21 74 00 DD 4E FA +R 00 00 01 00 02 04 00 00 +T 13 01 00 00 DD 46 FB 09 34 23 20 01 34 +R 00 00 01 00 +T 1C 01 00 00 +R 00 00 01 00 +T 1C 01 00 00 21 FF FF 18 34 +R 00 00 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 DD 6E 02 DD 66 03 E5 DD 6E FE DD +R 00 00 01 00 +T 2C 01 00 00 66 FF E5 21 00 00 E5 01 00 00 C5 +R 00 00 01 00 +T 37 01 00 00 DD 5E 04 DD 56 05 21 42 00 DD 4E +R 00 00 01 00 +T 42 01 00 00 04 DD 46 05 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 4D 01 00 00 60 C1 CD 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 07 00 00 +T 55 01 00 00 +R 00 00 01 00 +T 55 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 6E 6F 74 20 6F 70 65 6E 20 66 6F +R 00 00 02 00 +T 0B 00 00 00 72 20 49 50 20 74 72 61 66 66 69 +R 00 00 02 00 +T 16 00 00 00 63 00 +R 00 00 02 00 +T 18 00 00 00 +R 00 00 02 00 +T 18 00 00 00 62 61 64 20 49 50 20 70 61 63 6B +R 00 00 02 00 +T 23 00 00 00 65 74 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/ppp_skipped.rel b/src/nos/lib/ppp_lib/ppp_skipped.rel new file mode 100644 index 00000000..6a9fde34 --- /dev/null +++ b/src/nos/lib/ppp_lib/ppp_skipped.rel @@ -0,0 +1,38 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _slhc_toss Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _ppp_error Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 51 flags 0 +S _ppp_skipped Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 5E 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 7D B4 28 15 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 40 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 28 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 2D 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 32 00 00 00 +R 00 00 01 00 +T 32 00 00 00 DD 6E 0A DD 66 0B E5 DD 4E 04 DD +R 00 00 01 00 +T 3D 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 46 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 4B 00 00 00 00 00 00 00 E1 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 0A 02 00 diff --git a/src/nos/lib/ppp_lib/pppcmd.rel b/src/nos/lib/ppp_lib/pppcmd.rel new file mode 100644 index 00000000..96f8f987 --- /dev/null +++ b/src/nos/lib/ppp_lib/pppcmd.rel @@ -0,0 +1,1456 @@ +XL4 +H 6 areas 44 global symbols +S _inet_ntoa Ref00000000 +S _doppp_lcp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _doppp_pap Ref00000000 +S ___05af_7425_terminate Ref00000000 +S ___0113_83ad__2510lu_20In_2c_20_ Ref00000000 +S ___0010_7e01__09_28open_20for_20 Ref00000000 +S _secclock Ref00000000 +S _if_lookup Ref00000000 +S ___0447_26b1_configure Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S _set_timer Ref00000000 +S ___0002_17d6__09_09_20MRU_09_20A Ref00000000 +S ___02b5_befe_LCP_20_25s_0a Ref00000000 +S _printf Ref00000000 +S _fsm_start Ref00000000 +S ___03da_8007_Value_20_25s_20_28_ Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0114_cbd3__2510lu_20Out_2c_20 Ref00000000 +S _setint Ref00000000 +S ___0298_7c5c_IPCP_20_25s_0a Ref00000000 +S ___012e_aeda__25d_0a Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___03a6_e505_Timeout_20value_20_ Ref00000000 +S ___0057_9bd9__20_20_20_20In_09TC Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ___0136_ec2f__25s Ref00000000 +S ___0162_60cc__25s_3a_20not_20a_2 Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?L_MUL_L03 Ref00000000 +S ___051e_b6e1_pap Ref00000000 +S ___0338_b459_PPP_20tracing Ref00000000 +S _strtol Ref00000000 +S ___0003_002f__09_09_256u_20Lcp_2 Ref00000000 +S ___0322_b2fb_PAP_20_25s_0a Ref00000000 +S ___05bd_4f5f_trace Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___0004_14b3__09_09_256u_20Lcp_2 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _doppp_ipcp Ref00000000 +S ___0063_47af__20_20remote_20IP_2 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ___0013_53f6__09Local_3a_09 Ref00000000 +S ___04ae_dfc4_ipcp Ref00000000 +S ___0014_a684__09Remote_3a_09 Ref00000000 +S _slhc_i_status Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___04b5_a567_lcp Ref00000000 +S ___015a_adab__25s_3a_20Interface Ref00000000 +S _slhc_o_status Ref00000000 +S _fsm_close Ref00000000 +S ___0539_1196_quick Ref00000000 +S _tformat Ref00000000 +S _subcmd Ref00000000 +S ___047e_bce0_failure Ref00000000 +S ___0020_13bc__09local_20IP_20add Ref00000000 +S ___0058_7788__20_20_20_20Out_09T Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E96 flags 0 +S _doppp_timeout Def00000B19 +S _doppp_commands Def00000080 +S _doppp_close Def00000109 +S _doppp_try Def00000C05 +S _ppp_show Def0000029C +S _doppp_passive Def00000134 +S _doppp_active Def0000016B +A CSTR size 1D2 flags 0 +A UDATA0 size 4 flags 0 +S _PPPiface Def00000002 +S _PPPtrace Def00000000 +A IDATA0 size 9A flags 0 +A CDATA0 size 9A flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 25 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 02 00 +T 15 00 00 00 FE DD 74 FF 7D B4 20 1E +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 6E 02 DD 66 03 E5 0E +R 00 00 01 00 +T 25 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 32 00 02 0A 32 00 +T 2B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2B 00 02 0A 2B 00 +T 31 00 00 00 00 00 00 00 F1 F1 F1 21 00 00 18 +R 00 00 01 00 02 04 02 00 +T 3A 00 00 00 42 +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 21 3D 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T 46 00 00 00 23 66 68 01 0E 00 09 3E 11 AE 23 +R 00 00 01 00 +T 51 00 00 00 B6 28 23 +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 6E FE DD 66 FF 23 23 4E 23 46 +R 00 00 01 00 +T 5F 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 1C 00 +T 64 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 1C 00 2B 0A 2B 00 +T 6A 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2B 00 02 09 02 00 +T 71 00 00 00 F1 21 00 00 18 06 +R 00 00 01 00 +T 77 00 00 00 +R 00 00 01 00 +T 77 00 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T 7D 00 00 00 +R 00 00 01 00 +T 7D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 16 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 25 00 +T 89 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 94 00 00 00 30 12 +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 21 68 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 0E 00 +T 9C 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0E 00 02 0A 02 00 +T A3 00 00 00 21 FF FF 18 5E +R 00 00 01 00 +T A8 00 00 00 +R 00 00 01 00 +T A8 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T B3 00 00 00 CD 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 00 05 01 00 +T BC 00 00 00 7D B4 20 05 +R 00 00 01 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 21 FF FF 18 41 +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 3E 02 DD AE 02 DD B6 03 20 13 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 DD 5E FE DD 56 FF 3E 9C 02 00 00 +R 00 00 01 00 29 0B 01 00 +T D7 00 00 00 21 9C 02 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 05 01 00 02 0A 02 00 +T DE 00 00 00 00 00 18 24 +R 00 00 01 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 DD 6E FE DD 66 FF E5 DD 6E 04 DD +R 00 00 01 00 +T ED 00 00 00 66 05 23 23 E5 DD 4E 02 DD 46 03 +R 00 00 01 00 +T F8 00 00 00 0B 11 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 04 00 2B 0B 37 00 +T FE 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 37 00 02 0A 02 00 +T 05 01 00 00 F1 +R 00 00 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 25 00 +T 12 01 00 00 66 0B DD 75 FE DD 74 FF 23 23 7E +R 00 00 01 00 +T 1D 01 00 00 E6 3F 77 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 27 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 34 00 02 09 34 00 +T 2C 01 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 02 00 +T 32 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 11 00 +T 34 01 00 00 +R 00 00 01 00 +T 34 01 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 25 00 +T 3D 01 00 00 66 0B DD 75 FE DD 74 FF 23 23 7E +R 00 00 01 00 +T 48 01 00 00 E6 7F 77 DD 6E FE DD 66 FF 23 23 +R 00 00 01 00 +T 53 01 00 00 7E F6 40 77 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 5E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 63 01 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 02 00 +T 69 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 11 00 +T 6B 01 00 00 +R 00 00 01 00 +T 6B 01 00 00 CD 00 00 00 00 FE FF DD 6E 0A DD +R 00 00 01 00 02 05 25 00 +T 74 01 00 00 66 0B DD 75 FE DD 74 FF 23 23 7E +R 00 00 01 00 +T 7F 01 00 00 E6 BF 77 DD 6E FE DD 66 FF 23 23 +R 00 00 01 00 +T 8A 01 00 00 7E F6 80 77 DD 6E FE DD 66 FF 7E +R 00 00 01 00 +T 95 01 00 00 FE 01 30 08 +R 00 00 01 00 +T 99 01 00 00 +R 00 00 01 00 +T 99 01 00 00 DD 6E FE DD 66 FF 36 01 +R 00 00 01 00 +T A1 01 00 00 +R 00 00 01 00 +T A1 01 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 11 00 +T A7 01 00 00 +R 00 00 01 00 +T A7 01 00 00 CD 00 00 00 00 F8 FF DD 6E 0A DD +R 00 00 01 00 02 05 25 00 +T B0 01 00 00 66 0B DD 75 F8 DD 74 F9 11 39 00 +R 00 00 01 00 +T BB 01 00 00 19 56 23 66 6A DD 75 FA DD 74 FB +R 00 00 01 00 +T C6 01 00 00 11 22 00 19 56 23 66 6A DD 75 FC +R 00 00 01 00 +T D1 01 00 00 DD 74 FD 21 5E 00 DD 5E FA DD 56 +R 00 00 01 00 +T DC 01 00 00 FB 19 7E 23 66 6F DD 75 FE DD 74 +R 00 00 01 00 +T E7 01 00 00 FF 21 06 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T F2 01 00 00 AF 77 23 77 23 77 23 77 69 60 23 +R 00 00 01 00 +T FD 01 00 00 23 7E F6 04 77 23 7E F6 00 77 21 +R 00 00 01 00 +T 08 02 00 00 0E 00 DD 4E FC DD 46 FD 09 E5 21 +R 00 00 01 00 +T 13 02 00 00 0E 00 09 EB 01 00 00 E1 CD +R 00 00 01 00 +T 1C 02 00 00 00 00 00 00 DD 6E FC DD 66 FD 23 +R 00 00 01 00 02 04 19 00 +T 25 02 00 00 23 7E F6 20 77 23 7E F6 00 77 DD +R 00 00 01 00 +T 30 02 00 00 6E FC DD 66 FD 23 23 7E F6 00 77 +R 00 00 01 00 +T 3B 02 00 00 23 7E F6 01 77 DD 6E FC DD 66 FD +R 00 00 01 00 +T 46 02 00 00 23 23 7E F6 80 77 23 7E F6 00 77 +R 00 00 01 00 +T 51 02 00 00 21 0C 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T 5C 02 00 00 2D 23 36 00 21 0E 00 09 36 10 23 +R 00 00 01 00 +T 67 02 00 00 36 00 21 10 00 09 36 01 69 60 23 +R 00 00 01 00 +T 72 02 00 00 23 7E F6 04 77 23 7E F6 00 77 21 +R 00 00 01 00 +T 7D 02 00 00 42 00 DD 4E FA DD 46 FB 09 E5 01 +R 00 00 01 00 +T 88 02 00 00 00 00 11 00 00 3E 6B 01 00 00 21 +R 00 00 01 00 29 0A 01 00 +T 90 02 00 00 6B 01 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 00 04 01 00 02 09 02 00 +T 97 02 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 11 00 +T 9C 02 00 00 +R 00 00 01 00 +T 9C 02 00 00 CD 00 00 00 00 FE FF 21 39 00 DD +R 00 00 01 00 02 05 25 00 +T A5 02 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T B0 02 00 00 75 FE DD 74 FF EB CD 13 03 00 00 +R 00 00 01 00 00 0B 01 00 +T B9 02 00 00 21 22 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T C4 02 00 00 23 B6 28 0E +R 00 00 01 00 +T C8 02 00 00 +R 00 00 01 00 +T C8 02 00 00 21 06 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T D3 02 00 00 CD 27 05 00 00 +R 00 00 01 00 00 05 01 00 +T D6 02 00 00 +R 00 00 01 00 +T D6 02 00 00 21 40 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T E1 02 00 00 23 B6 28 0E +R 00 00 01 00 +T E5 02 00 00 +R 00 00 01 00 +T E5 02 00 00 21 24 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T F0 02 00 00 CD 5C 09 00 00 +R 00 00 01 00 00 05 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 21 5E 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T FE 02 00 00 23 B6 28 0E +R 00 00 01 00 +T 02 03 00 00 +R 00 00 01 00 +T 02 03 00 00 21 42 00 DD 4E FE DD 46 FF 09 EB +R 00 00 01 00 +T 0D 03 00 00 CD C8 09 00 00 +R 00 00 01 00 00 05 01 00 +T 10 03 00 00 +R 00 00 01 00 +T 10 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T 13 03 00 00 +R 00 00 01 00 +T 13 03 00 00 CD 00 00 00 00 EB 23 23 6E 26 00 +R 00 00 01 00 02 05 1D 00 +T 1C 03 00 00 29 01 82 00 00 00 09 4E 23 46 C5 +R 00 00 01 00 00 06 04 00 +T 25 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1B 00 02 0B 1B 00 +T 2B 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2B 00 02 0B 2B 00 +T 31 03 00 00 CD 00 00 00 00 F1 F1 F1 DD 6E 02 +R 00 00 01 00 02 05 02 00 +T 3A 03 00 00 DD 66 03 23 23 7E FE 03 20 44 +R 00 00 01 00 +T 44 03 00 00 +R 00 00 01 00 +T 44 03 00 00 21 60 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 4F 03 00 00 23 46 23 5E 23 56 69 60 D5 E5 3E +R 00 00 01 00 +T 5A 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 5F 03 00 00 00 00 00 00 59 50 A7 C1 ED 42 EB +R 00 00 01 00 02 04 02 00 +T 68 03 00 00 C1 ED 42 4D 44 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 36 00 +T 70 03 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 36 00 02 09 02 00 +T 77 03 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 06 00 02 0A 06 00 +T 7D 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2B 00 02 0A 2B 00 +T 83 03 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T 88 03 00 00 +R 00 00 01 00 +T 88 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T 8E 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2B 00 02 0B 2B 00 +T 94 03 00 00 CD 00 00 00 00 F1 F1 21 8C 00 DD +R 00 00 01 00 02 05 02 00 +T 9D 03 00 00 4E 02 DD 46 03 09 5E 23 56 D5 21 +R 00 00 01 00 +T A8 03 00 00 88 00 09 5E 23 56 D5 21 8A 00 09 +R 00 00 01 00 +T B3 03 00 00 5E 23 56 D5 21 8E 00 09 5E 23 56 +R 00 00 01 00 +T BE 03 00 00 D5 21 7C 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T C9 03 00 00 46 C5 D5 21 78 00 DD 4E 02 DD 46 +R 00 00 01 00 +T D4 03 00 00 03 09 5E 23 56 23 4E 23 46 C5 D5 +R 00 00 01 00 +T DF 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T E5 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2B 00 02 0B 2B 00 +T EB 03 00 00 CD 00 00 00 00 EB 21 14 00 39 F9 +R 00 00 01 00 02 05 02 00 +T F4 03 00 00 EB 21 86 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T FF 03 00 00 5E 23 56 D5 21 84 00 09 5E 23 56 +R 00 00 01 00 +T 0A 04 00 00 D5 21 82 00 09 5E 23 56 D5 21 +R 00 00 01 00 +T 14 04 00 00 80 00 09 5E 23 56 D5 1E +R 00 00 01 00 +T 1C 04 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 26 00 02 0A 26 00 +T 22 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2B 00 02 0A 2B 00 +T 28 04 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T 31 04 00 00 21 74 00 09 5E 23 56 D5 21 76 00 +R 00 00 01 00 +T 3C 04 00 00 09 5E 23 56 D5 21 6A 00 09 5E 23 +R 00 00 01 00 +T 47 04 00 00 56 23 4E 23 46 C5 D5 21 66 00 DD +R 00 00 01 00 +T 52 04 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 5D 04 00 00 23 46 C5 D5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 12 00 +T 65 04 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 12 00 2B 0A 2B 00 +T 6B 04 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 2B 00 02 09 02 00 +T 72 04 00 00 10 00 39 F9 EB 21 72 00 DD 4E 02 +R 00 00 01 00 +T 7D 04 00 00 DD 46 03 09 5E 23 56 D5 21 70 00 +R 00 00 01 00 +T 88 04 00 00 09 5E 23 56 D5 21 6E 00 09 4E 23 +R 00 00 01 00 +T 93 04 00 00 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 07 22 00 +T 99 04 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 22 00 2B 0A 2B 00 +T 9F 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2B 00 02 09 02 00 +T A6 04 00 00 F1 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 08 16 00 +T AC 04 00 00 +R 00 00 01 00 +T AC 04 00 00 CD 00 00 00 00 FC FF DD 36 FC 20 +R 00 00 01 00 02 05 25 00 +T B5 04 00 00 DD 7E 02 DD A6 0A 6F DD 7E 03 DD +R 00 00 01 00 +T C0 04 00 00 A6 0B 67 DD 75 FD DD 74 FE DD 7E +R 00 00 01 00 +T CB 04 00 00 08 DD A6 0A 57 DD 7E 09 DD A6 0B +R 00 00 01 00 +T D6 04 00 00 B2 20 06 +R 00 00 01 00 +T D9 04 00 00 +R 00 00 01 00 +T D9 04 00 00 DD 36 FC 2A 18 2B +R 00 00 01 00 +T DF 04 00 00 +R 00 00 01 00 +T DF 04 00 00 DD 7E 04 DD AE 02 6F DD 7E 05 DD +R 00 00 01 00 +T EA 04 00 00 AE 03 67 7D DD A6 0A 47 7C DD A6 +R 00 00 01 00 +T F5 04 00 00 0B B0 28 11 +R 00 00 01 00 +T F9 04 00 00 +R 00 00 01 00 +T F9 04 00 00 DD 7E FD DD B6 FE 28 04 3E 2B 18 +R 00 00 01 00 +T 04 05 00 00 02 +R 00 00 01 00 +T 05 05 00 00 +R 00 00 01 00 +T 05 05 00 00 3E 2D +R 00 00 01 00 +T 07 05 00 00 +R 00 00 01 00 +T 07 05 00 00 DD 77 FC +R 00 00 01 00 +T 0A 05 00 00 +R 00 00 01 00 +T 0A 05 00 00 +R 00 00 01 00 +T 0A 05 00 00 DD 4E FC 06 00 C5 21 7E 01 00 00 +R 00 00 01 00 00 0B 02 00 +T 13 05 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 19 05 00 00 CD 00 00 00 00 F1 F1 DD 6E FD DD +R 00 00 01 00 02 05 02 00 +T 22 05 00 00 66 FE C3 00 00 00 00 +R 00 00 01 00 02 07 16 00 +T 27 05 00 00 +R 00 00 01 00 +T 27 05 00 00 CD 00 00 00 00 EE FF 21 1C 00 DD +R 00 00 01 00 02 05 25 00 +T 30 05 00 00 4E 02 DD 46 03 09 56 23 66 6A DD +R 00 00 01 00 +T 3B 05 00 00 75 EE DD 74 EF 11 16 00 19 DD 75 +R 00 00 01 00 +T 46 05 00 00 F0 DD 74 F1 21 16 00 DD 5E EE DD +R 00 00 01 00 +T 51 05 00 00 56 EF 19 7E 23 66 6F DD 75 F2 DD +R 00 00 01 00 +T 5C 05 00 00 74 F3 13 13 EB 5E 23 56 DD 73 F4 +R 00 00 01 00 +T 67 05 00 00 DD 72 F5 DD 6E EE DD 66 EF 7E 23 +R 00 00 01 00 +T 72 05 00 00 66 6F DD 75 F6 DD 74 F7 21 40 00 +R 00 00 01 00 +T 7D 05 00 00 DD 4E EE DD 46 EF 09 DD 75 F8 DD +R 00 00 01 00 +T 88 05 00 00 74 F9 21 40 00 09 7E 23 66 6F DD +R 00 00 01 00 +T 93 05 00 00 75 FA DD 74 FB 21 2C 00 09 7E 23 +R 00 00 01 00 +T 9E 05 00 00 66 6F DD 75 FC DD 74 FD 21 2A 00 +R 00 00 01 00 +T A9 05 00 00 09 46 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T B4 05 00 00 DD 6E 02 DD 66 03 6E 26 00 29 01 +R 00 00 01 00 +T BF 05 00 00 8C 00 00 00 09 4E 23 46 C5 0E +R 00 00 01 00 00 04 04 00 +T C7 05 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0D 00 02 0A 0D 00 +T CD 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2B 00 02 0A 2B 00 +T D3 05 00 00 00 00 00 00 F1 F1 F1 0E +R 00 00 01 00 02 04 02 00 +T D9 05 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0C 00 02 0A 0C 00 +T DF 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2B 00 02 0A 2B 00 +T E5 05 00 00 00 00 00 00 F1 F1 0E 00 00 00 00 +R 00 00 01 00 02 04 02 00 2B 0B 2C 00 +T EB 05 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 2C 00 +T F1 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T F6 05 00 00 00 00 00 00 F1 F1 21 02 00 E5 DD +R 00 00 01 00 02 04 02 00 +T FF 05 00 00 6E F6 DD 66 F7 E5 4B 42 DD 5E F2 +R 00 00 01 00 +T 0A 06 00 00 DD 56 F3 CD AC 04 00 00 F1 F1 DD +R 00 00 01 00 00 08 01 00 +T 13 06 00 00 6E F0 DD 66 F1 23 23 4E 23 46 C5 +R 00 00 01 00 +T 1E 06 00 00 21 81 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 0E 00 +T 24 06 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0E 00 02 0A 02 00 +T 2B 06 00 00 F1 21 04 00 E5 DD 6E F6 DD 66 F7 +R 00 00 01 00 +T 36 06 00 00 E5 DD 4E F4 DD 46 F5 DD 5E F2 DD +R 00 00 01 00 +T 41 06 00 00 56 F3 CD AC 04 00 00 F1 F1 21 +R 00 00 01 00 00 07 01 00 +T 49 06 00 00 04 00 DD 4E F0 DD 46 F1 09 4E 23 +R 00 00 01 00 +T 54 06 00 00 46 23 5E 23 56 D5 C5 21 +R 00 00 01 00 +T 5C 06 00 00 86 01 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 0E 00 +T 62 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 02 00 +T 69 06 00 00 F1 21 08 00 E5 DD 6E F6 DD 66 F7 +R 00 00 01 00 +T 74 06 00 00 E5 DD 4E F4 DD 46 F5 DD 5E F2 DD +R 00 00 01 00 +T 7F 06 00 00 56 F3 CD AC 04 00 00 F1 F1 7D B4 +R 00 00 01 00 00 07 01 00 +T 88 06 00 00 28 44 +R 00 00 01 00 +T 8A 06 00 00 +R 00 00 01 00 +T 8A 06 00 00 21 08 00 DD 4E F0 DD 46 F1 09 4E +R 00 00 01 00 +T 95 06 00 00 23 46 21 23 C0 A7 ED 42 20 0F +R 00 00 01 00 +T 9F 06 00 00 +R 00 00 01 00 +T 9F 06 00 00 21 8F 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 0E 00 +T A5 06 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0E 00 02 0A 02 00 +T AC 06 00 00 18 1E +R 00 00 01 00 +T AE 06 00 00 +R 00 00 01 00 +T AE 06 00 00 21 08 00 DD 4E F0 DD 46 F1 09 4E +R 00 00 01 00 +T B9 06 00 00 23 46 C5 21 94 01 00 00 E5 3E +R 00 00 01 00 00 08 02 00 +T C1 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T C6 06 00 00 00 00 00 00 F1 F1 18 00 +R 00 00 01 00 02 04 02 00 +T CC 06 00 00 +R 00 00 01 00 +T CC 06 00 00 18 0D +R 00 00 01 00 +T CE 06 00 00 +R 00 00 01 00 +T CE 06 00 00 21 9C 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 0E 00 +T D4 06 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0E 00 02 0A 02 00 +T DB 06 00 00 +R 00 00 01 00 +T DB 06 00 00 21 80 00 E5 DD 6E F6 DD 66 F7 E5 +R 00 00 01 00 +T E6 06 00 00 DD 4E F4 DD 46 F5 DD 5E F2 DD 56 +R 00 00 01 00 +T F1 06 00 00 F3 CD AC 04 00 00 F1 F1 7D B4 28 +R 00 00 01 00 00 06 01 00 +T FA 06 00 00 05 21 A2 01 00 00 18 03 +R 00 00 01 00 00 06 02 00 +T 00 07 00 00 +R 00 00 01 00 +T 00 07 00 00 21 A7 01 00 00 +R 00 00 01 00 00 05 02 00 +T 03 07 00 00 +R 00 00 01 00 +T 03 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 09 07 00 00 CD 00 00 00 00 F1 21 00 01 E5 DD +R 00 00 01 00 02 05 02 00 +T 12 07 00 00 6E F6 DD 66 F7 E5 DD 4E F4 DD 46 +R 00 00 01 00 +T 1D 07 00 00 F5 DD 5E F2 DD 56 F3 CD +R 00 00 01 00 +T 25 07 00 00 AC 04 00 00 F1 F1 7D B4 28 05 21 +R 00 00 01 00 00 04 01 00 +T 2E 07 00 00 A2 01 00 00 18 03 +R 00 00 01 00 00 04 02 00 +T 32 07 00 00 +R 00 00 01 00 +T 32 07 00 00 21 A7 01 00 00 +R 00 00 01 00 00 05 02 00 +T 35 07 00 00 +R 00 00 01 00 +T 35 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 3B 07 00 00 CD 00 00 00 00 F1 21 20 00 E5 DD +R 00 00 01 00 02 05 02 00 +T 44 07 00 00 6E F6 DD 66 F7 E5 DD 4E F4 DD 46 +R 00 00 01 00 +T 4F 07 00 00 F5 DD 5E F2 DD 56 F3 CD +R 00 00 01 00 +T 57 07 00 00 AC 04 00 00 F1 F1 21 0C 00 DD 4E +R 00 00 01 00 00 04 01 00 +T 60 07 00 00 F0 DD 46 F1 09 7E 23 B6 23 B6 23 +R 00 00 01 00 +T 6B 07 00 00 B6 28 24 +R 00 00 01 00 +T 6E 07 00 00 +R 00 00 01 00 +T 6E 07 00 00 21 0C 00 DD 4E F0 DD 46 F1 09 4E +R 00 00 01 00 +T 79 07 00 00 23 46 23 5E 23 56 D5 C5 21 +R 00 00 01 00 +T 82 07 00 00 AC 01 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 0E 00 +T 88 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 02 00 +T 8F 07 00 00 F1 18 0D +R 00 00 01 00 +T 92 07 00 00 +R 00 00 01 00 +T 92 07 00 00 21 B5 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 0E 00 +T 98 07 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0E 00 02 0A 02 00 +T 9F 07 00 00 +R 00 00 01 00 +T 9F 07 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 2E 00 02 0B 2E 00 +T A5 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2B 00 02 0B 2B 00 +T AB 07 00 00 CD 00 00 00 00 F1 F1 21 02 00 E5 +R 00 00 01 00 02 05 02 00 +T B4 07 00 00 DD 6E FE DD 66 FF E5 DD 4E FC DD +R 00 00 01 00 +T BF 07 00 00 46 FD DD 5E FA DD 56 FB CD +R 00 00 01 00 +T C8 07 00 00 AC 04 00 00 F1 F1 DD 6E F8 DD 66 +R 00 00 01 00 00 04 01 00 +T D1 07 00 00 F9 23 23 4E 23 46 C5 21 +R 00 00 01 00 +T D9 07 00 00 81 01 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 0E 00 +T DF 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 02 00 +T E6 07 00 00 21 04 00 E5 DD 6E FE DD 66 FF E5 +R 00 00 01 00 +T F1 07 00 00 DD 4E FC DD 46 FD DD 5E FA DD 56 +R 00 00 01 00 +T FC 07 00 00 FB CD AC 04 00 00 F1 F1 21 04 00 +R 00 00 01 00 00 06 01 00 +T 05 08 00 00 DD 4E F8 DD 46 F9 09 4E 23 46 23 +R 00 00 01 00 +T 10 08 00 00 5E 23 56 D5 C5 21 86 01 00 00 E5 +R 00 00 01 00 00 0A 02 00 +T 19 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0E 00 02 0A 0E 00 +T 1F 08 00 00 00 00 00 00 F1 F1 F1 21 08 00 E5 +R 00 00 01 00 02 04 02 00 +T 28 08 00 00 DD 6E FE DD 66 FF E5 DD 4E FC DD +R 00 00 01 00 +T 33 08 00 00 46 FD DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 3C 08 00 00 AC 04 00 00 F1 F1 7D B4 28 44 +R 00 00 01 00 00 04 01 00 +T 44 08 00 00 +R 00 00 01 00 +T 44 08 00 00 21 08 00 DD 4E F8 DD 46 F9 09 4E +R 00 00 01 00 +T 4F 08 00 00 23 46 21 23 C0 A7 ED 42 20 0F +R 00 00 01 00 +T 59 08 00 00 +R 00 00 01 00 +T 59 08 00 00 21 8F 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 0E 00 +T 5F 08 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0E 00 02 0A 02 00 +T 66 08 00 00 18 1E +R 00 00 01 00 +T 68 08 00 00 +R 00 00 01 00 +T 68 08 00 00 21 08 00 DD 4E F8 DD 46 F9 09 4E +R 00 00 01 00 +T 73 08 00 00 23 46 C5 21 94 01 00 00 E5 3E +R 00 00 01 00 00 08 02 00 +T 7B 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 80 08 00 00 00 00 00 00 F1 F1 18 00 +R 00 00 01 00 02 04 02 00 +T 86 08 00 00 +R 00 00 01 00 +T 86 08 00 00 18 0D +R 00 00 01 00 +T 88 08 00 00 +R 00 00 01 00 +T 88 08 00 00 21 9C 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 0E 00 +T 8E 08 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0E 00 02 0A 02 00 +T 95 08 00 00 +R 00 00 01 00 +T 95 08 00 00 21 80 00 E5 DD 6E FE DD 66 FF E5 +R 00 00 01 00 +T A0 08 00 00 DD 4E FC DD 46 FD DD 5E FA DD 56 +R 00 00 01 00 +T AB 08 00 00 FB CD AC 04 00 00 F1 F1 7D B4 28 +R 00 00 01 00 00 06 01 00 +T B4 08 00 00 05 21 A2 01 00 00 18 03 +R 00 00 01 00 00 06 02 00 +T BA 08 00 00 +R 00 00 01 00 +T BA 08 00 00 21 A7 01 00 00 +R 00 00 01 00 00 05 02 00 +T BD 08 00 00 +R 00 00 01 00 +T BD 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T C3 08 00 00 CD 00 00 00 00 F1 21 00 01 E5 DD +R 00 00 01 00 02 05 02 00 +T CC 08 00 00 6E FE DD 66 FF E5 DD 4E FC DD 46 +R 00 00 01 00 +T D7 08 00 00 FD DD 5E FA DD 56 FB CD +R 00 00 01 00 +T DF 08 00 00 AC 04 00 00 F1 F1 7D B4 28 05 21 +R 00 00 01 00 00 04 01 00 +T E8 08 00 00 A2 01 00 00 18 03 +R 00 00 01 00 00 04 02 00 +T EC 08 00 00 +R 00 00 01 00 +T EC 08 00 00 21 A7 01 00 00 +R 00 00 01 00 00 05 02 00 +T EF 08 00 00 +R 00 00 01 00 +T EF 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T F5 08 00 00 CD 00 00 00 00 F1 21 20 00 E5 DD +R 00 00 01 00 02 05 02 00 +T FE 08 00 00 6E FE DD 66 FF E5 DD 4E FC DD 46 +R 00 00 01 00 +T 09 09 00 00 FD DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 11 09 00 00 AC 04 00 00 F1 F1 21 0C 00 DD 4E +R 00 00 01 00 00 04 01 00 +T 1A 09 00 00 F8 DD 46 F9 09 7E 23 B6 23 B6 23 +R 00 00 01 00 +T 25 09 00 00 B6 28 24 +R 00 00 01 00 +T 28 09 00 00 +R 00 00 01 00 +T 28 09 00 00 21 0C 00 DD 4E F8 DD 46 F9 09 4E +R 00 00 01 00 +T 33 09 00 00 23 46 23 5E 23 56 D5 C5 21 +R 00 00 01 00 +T 3C 09 00 00 AC 01 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 0E 00 +T 42 09 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 02 00 +T 49 09 00 00 F1 18 0D +R 00 00 01 00 +T 4C 09 00 00 +R 00 00 01 00 +T 4C 09 00 00 21 B5 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 0E 00 +T 52 09 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0E 00 02 0A 02 00 +T 59 09 00 00 +R 00 00 01 00 +T 59 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 16 00 +T 5C 09 00 00 +R 00 00 01 00 +T 5C 09 00 00 CD 00 00 00 00 FE FF 21 1C 00 DD +R 00 00 01 00 02 05 25 00 +T 65 09 00 00 4E 02 DD 46 03 09 56 23 66 6A DD +R 00 00 01 00 +T 70 09 00 00 75 FE DD 74 FF 0A 6F 26 00 29 01 +R 00 00 01 00 +T 7B 09 00 00 8C 00 00 00 09 4E 23 46 C5 0E +R 00 00 01 00 00 04 04 00 +T 83 09 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 23 00 02 0A 23 00 +T 89 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2B 00 02 0A 2B 00 +T 8F 09 00 00 00 00 00 00 F1 F1 F1 21 04 00 DD +R 00 00 01 00 02 04 02 00 +T 98 09 00 00 4E FE DD 46 FF 09 7E 23 B6 20 05 +R 00 00 01 00 +T A3 09 00 00 21 CD 01 00 00 18 0E +R 00 00 01 00 00 05 02 00 +T A8 09 00 00 +R 00 00 01 00 +T A8 09 00 00 21 04 00 DD 4E FE DD 46 FF 09 46 +R 00 00 01 00 +T B3 09 00 00 23 66 68 +R 00 00 01 00 +T B6 09 00 00 +R 00 00 01 00 +T B6 09 00 00 E5 21 BD 01 00 00 E5 3E +R 00 00 01 00 00 06 02 00 +T BC 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T C1 09 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 0B 16 00 +T C8 09 00 00 +R 00 00 01 00 +T C8 09 00 00 CD 00 00 00 00 F6 FF 21 1C 00 DD +R 00 00 01 00 02 05 25 00 +T D1 09 00 00 4E 02 DD 46 03 09 56 23 66 6A DD +R 00 00 01 00 +T DC 09 00 00 75 F6 DD 74 F7 11 11 00 19 DD 75 +R 00 00 01 00 +T E7 09 00 00 F8 DD 74 F9 21 11 00 DD 5E F6 DD +R 00 00 01 00 +T F2 09 00 00 56 F7 19 7E 23 66 6F DD 75 FA DD +R 00 00 01 00 +T FD 09 00 00 74 FB 21 31 00 19 DD 75 FC DD 74 +R 00 00 01 00 +T 08 0A 00 00 FD 21 31 00 19 56 23 66 6A DD 75 +R 00 00 01 00 +T 13 0A 00 00 FE DD 74 FF 0A 6F 26 00 29 01 +R 00 00 01 00 +T 1D 0A 00 00 8C 00 00 00 09 4E 23 46 C5 0E +R 00 00 01 00 00 04 04 00 +T 25 0A 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 14 00 02 0A 14 00 +T 2B 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2B 00 02 0A 2B 00 +T 31 0A 00 00 00 00 00 00 F1 F1 F1 DD 6E F8 DD +R 00 00 01 00 02 04 02 00 +T 3A 0A 00 00 66 F9 23 23 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 45 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T 4B 0A 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 02 00 2B 0A 39 00 +T 51 0A 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 39 00 2B 0B 2B 00 +T 57 0A 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 2B 00 02 0A 02 00 +T 5E 0A 00 00 F1 F1 21 06 00 DD 4E F8 DD 46 F9 +R 00 00 01 00 +T 69 0A 00 00 09 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 72 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 77 0A 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 02 00 2B 0A 29 00 +T 7D 0A 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 29 00 2B 0B 2B 00 +T 83 0A 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 2B 00 02 0A 02 00 +T 8A 0A 00 00 F1 F1 DD 7E FA E6 04 28 3E +R 00 00 01 00 +T 93 0A 00 00 +R 00 00 01 00 +T 93 0A 00 00 21 0E 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T 9E 0A 00 00 16 00 D5 21 0C 00 09 4E 23 46 C5 +R 00 00 01 00 +T A9 0A 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 18 00 02 0B 18 00 +T AF 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2B 00 02 0B 2B 00 +T B5 0A 00 00 CD 00 00 00 00 F1 F1 F1 F1 21 +R 00 00 01 00 02 05 02 00 +T BD 0A 00 00 40 00 DD 4E F6 DD 46 F7 09 5E 23 +R 00 00 01 00 +T C8 0A 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2F 00 02 0B 2F 00 +T CE 0A 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T D1 0A 00 00 +R 00 00 01 00 +T D1 0A 00 00 DD 7E FE E6 04 28 3E +R 00 00 01 00 +T D8 0A 00 00 +R 00 00 01 00 +T D8 0A 00 00 21 0E 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T E3 0A 00 00 16 00 D5 21 0C 00 09 4E 23 46 C5 +R 00 00 01 00 +T EE 0A 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 3A 00 02 0B 3A 00 +T F4 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2B 00 02 0B 2B 00 +T FA 0A 00 00 CD 00 00 00 00 F1 F1 F1 F1 21 +R 00 00 01 00 02 05 02 00 +T 02 0B 00 00 40 00 DD 4E F6 DD 46 F7 09 5E 23 +R 00 00 01 00 +T 0D 0B 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 33 00 02 0B 33 00 +T 13 0B 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 16 0B 00 00 +R 00 00 01 00 +T 16 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 16 00 +T 19 0B 00 00 +R 00 00 01 00 +T 19 0B 00 00 CD 00 00 00 00 FA FF DD 6E 0A DD +R 00 00 01 00 02 05 25 00 +T 22 0B 00 00 66 0B DD 75 FA DD 74 FB 11 0A 00 +R 00 00 01 00 +T 2D 0B 00 00 19 DD 75 FC DD 74 FD 11 02 80 DD +R 00 00 01 00 +T 38 0B 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 43 0B 00 00 30 3C +R 00 00 01 00 +T 45 0B 00 00 +R 00 00 01 00 +T 45 0B 00 00 21 00 00 E5 21 E8 03 E5 DD 6E FC +R 00 00 01 00 +T 50 0B 00 00 DD 66 FD 23 23 4E 23 46 23 5E 23 +R 00 00 01 00 +T 5B 0B 00 00 56 D5 C5 01 00 00 21 37 00 CD +R 00 00 01 00 +T 65 0B 00 00 00 00 00 00 CD 00 00 00 00 C5 E5 +R 00 00 01 00 02 04 1E 00 02 09 27 00 +T 6C 0B 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 15 00 02 0B 15 00 +T 72 0B 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2B 00 02 0B 2B 00 +T 78 0B 00 00 CD 00 00 00 00 F1 F1 F1 F1 18 7E +R 00 00 01 00 02 05 02 00 +T 81 0B 00 00 +R 00 00 01 00 +T 81 0B 00 00 21 00 00 E5 01 00 00 DD 6E 04 DD +R 00 00 01 00 +T 8C 0B 00 00 66 05 23 23 5E 23 56 3E +R 00 00 01 00 +T 94 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 21 00 02 09 21 00 +T 99 0B 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 02 00 +T A2 0B 00 00 4D 44 21 00 00 CD 00 00 00 00 38 +R 00 00 01 00 02 0A 2A 00 +T AB 0B 00 00 2B +R 00 00 01 00 +T AC 0B 00 00 +R 00 00 01 00 +T AC 0B 00 00 DD 6E FE DD 66 FF E5 DD 6E 04 DD +R 00 00 01 00 +T B7 0B 00 00 66 05 23 23 4E 23 46 C5 0E +R 00 00 01 00 +T C0 0B 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 17 00 02 0A 17 00 +T C6 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2B 00 02 0A 2B 00 +T CC 0B 00 00 00 00 00 00 F1 F1 F1 F1 21 FF FF +R 00 00 01 00 02 04 02 00 +T D5 0B 00 00 18 2B +R 00 00 01 00 +T D7 0B 00 00 +R 00 00 01 00 +T D7 0B 00 00 DD 6E FE DD 66 FF 7C 07 9F 4F 41 +R 00 00 01 00 +T E2 0B 00 00 C5 E5 01 00 00 21 E8 03 CD +R 00 00 01 00 +T EB 0B 00 00 00 00 00 00 C5 E5 DD 5E FC DD 56 +R 00 00 01 00 02 04 1E 00 +T F4 0B 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0B 00 02 0B 0B 00 +T FA 0B 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 05 02 00 +T FF 0B 00 00 +R 00 00 01 00 +T FF 0B 00 00 21 00 00 +R 00 00 01 00 +T 02 0C 00 00 +R 00 00 01 00 +T 02 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T 05 0C 00 00 +R 00 00 01 00 +T 05 0C 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 1D 00 +T 0E 0C 00 00 E5 C5 4B 42 11 4E 00 00 00 3E +R 00 00 01 00 00 09 04 00 +T 16 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 37 00 02 09 37 00 +T 1B 0C 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 0B 11 00 +T 22 0C 00 00 +R 00 00 01 00 +T 22 0C 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 25 00 +T 2B 0C 00 00 66 0B DD 75 FC DD 74 FD 11 02 80 +R 00 00 01 00 +T 36 0C 00 00 DD 6E 02 DD 66 03 3E 80 AC 67 ED +R 00 00 01 00 +T 41 0C 00 00 52 30 22 +R 00 00 01 00 +T 44 0C 00 00 +R 00 00 01 00 +T 44 0C 00 00 21 07 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T 4F 0C 00 00 06 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 15 00 +T 56 0C 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 15 00 2B 0A 2B 00 +T 5C 0C 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2B 00 02 09 02 00 +T 63 0C 00 00 F1 18 64 +R 00 00 01 00 +T 66 0C 00 00 +R 00 00 01 00 +T 66 0C 00 00 21 00 00 E5 01 00 00 DD 6E 04 DD +R 00 00 01 00 +T 71 0C 00 00 66 05 23 23 5E 23 56 3E +R 00 00 01 00 +T 79 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 21 00 02 09 21 00 +T 7E 0C 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 02 00 +T 87 0C 00 00 4D 44 21 00 00 CD 00 00 00 00 38 +R 00 00 01 00 02 0A 2A 00 +T 90 0C 00 00 2B +R 00 00 01 00 +T 91 0C 00 00 +R 00 00 01 00 +T 91 0C 00 00 DD 6E FE DD 66 FF E5 DD 6E 04 DD +R 00 00 01 00 +T 9C 0C 00 00 66 05 23 23 4E 23 46 C5 0E +R 00 00 01 00 +T A5 0C 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 10 00 02 0A 10 00 +T AB 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2B 00 02 0A 2B 00 +T B1 0C 00 00 00 00 00 00 F1 F1 F1 F1 21 FF FF +R 00 00 01 00 02 04 02 00 +T BA 0C 00 00 18 11 +R 00 00 01 00 +T BC 0C 00 00 +R 00 00 01 00 +T BC 0C 00 00 21 07 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T C7 0C 00 00 46 FE 70 +R 00 00 01 00 +T CA 0C 00 00 +R 00 00 01 00 +T CA 0C 00 00 21 00 00 +R 00 00 01 00 +T CD 0C 00 00 +R 00 00 01 00 +T CD 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T D0 0C 00 00 +R 00 00 01 00 +T D0 0C 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 25 00 +T D9 0C 00 00 66 0B DD 75 FC DD 74 FD 11 02 80 +R 00 00 01 00 +T E4 0C 00 00 DD 6E 02 DD 66 03 3E 80 AC 67 ED +R 00 00 01 00 +T EF 0C 00 00 52 30 22 +R 00 00 01 00 +T F2 0C 00 00 +R 00 00 01 00 +T F2 0C 00 00 21 04 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T FD 0C 00 00 06 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 15 00 +T 04 0D 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 15 00 2B 0A 2B 00 +T 0A 0D 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2B 00 02 09 02 00 +T 11 0D 00 00 F1 18 64 +R 00 00 01 00 +T 14 0D 00 00 +R 00 00 01 00 +T 14 0D 00 00 21 00 00 E5 01 00 00 DD 6E 04 DD +R 00 00 01 00 +T 1F 0D 00 00 66 05 23 23 5E 23 56 3E +R 00 00 01 00 +T 27 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 21 00 02 09 21 00 +T 2C 0D 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 02 00 +T 35 0D 00 00 4D 44 21 00 00 CD 00 00 00 00 38 +R 00 00 01 00 02 0A 2A 00 +T 3E 0D 00 00 2B +R 00 00 01 00 +T 3F 0D 00 00 +R 00 00 01 00 +T 3F 0D 00 00 DD 6E FE DD 66 FF E5 DD 6E 04 DD +R 00 00 01 00 +T 4A 0D 00 00 66 05 23 23 4E 23 46 C5 0E +R 00 00 01 00 +T 53 0D 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 10 00 02 0A 10 00 +T 59 0D 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2B 00 02 0A 2B 00 +T 5F 0D 00 00 00 00 00 00 F1 F1 F1 F1 21 FF FF +R 00 00 01 00 02 04 02 00 +T 68 0D 00 00 18 11 +R 00 00 01 00 +T 6A 0D 00 00 +R 00 00 01 00 +T 6A 0D 00 00 21 04 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 75 0D 00 00 46 FE 70 +R 00 00 01 00 +T 78 0D 00 00 +R 00 00 01 00 +T 78 0D 00 00 21 00 00 +R 00 00 01 00 +T 7B 0D 00 00 +R 00 00 01 00 +T 7B 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T 7E 0D 00 00 +R 00 00 01 00 +T 7E 0D 00 00 CD 00 00 00 00 FC FF DD 6E 0A DD +R 00 00 01 00 02 05 25 00 +T 87 0D 00 00 66 0B DD 75 FC DD 74 FD 11 02 80 +R 00 00 01 00 +T 92 0D 00 00 DD 6E 02 DD 66 03 3E 80 AC 67 ED +R 00 00 01 00 +T 9D 0D 00 00 52 30 22 +R 00 00 01 00 +T A0 0D 00 00 +R 00 00 01 00 +T A0 0D 00 00 21 05 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T AB 0D 00 00 06 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 15 00 +T B2 0D 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 15 00 2B 0A 2B 00 +T B8 0D 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2B 00 02 09 02 00 +T BF 0D 00 00 F1 18 64 +R 00 00 01 00 +T C2 0D 00 00 +R 00 00 01 00 +T C2 0D 00 00 21 00 00 E5 01 00 00 DD 6E 04 DD +R 00 00 01 00 +T CD 0D 00 00 66 05 23 23 5E 23 56 3E +R 00 00 01 00 +T D5 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 21 00 02 09 21 00 +T DA 0D 00 00 00 00 00 00 F1 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 02 00 +T E3 0D 00 00 4D 44 21 00 00 CD 00 00 00 00 38 +R 00 00 01 00 02 0A 2A 00 +T EC 0D 00 00 2B +R 00 00 01 00 +T ED 0D 00 00 +R 00 00 01 00 +T ED 0D 00 00 DD 6E FE DD 66 FF E5 DD 6E 04 DD +R 00 00 01 00 +T F8 0D 00 00 66 05 23 23 4E 23 46 C5 0E +R 00 00 01 00 +T 01 0E 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 10 00 02 0A 10 00 +T 07 0E 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2B 00 02 0A 2B 00 +T 0D 0E 00 00 00 00 00 00 F1 F1 F1 F1 21 FF FF +R 00 00 01 00 02 04 02 00 +T 16 0E 00 00 18 11 +R 00 00 01 00 +T 18 0E 00 00 +R 00 00 01 00 +T 18 0E 00 00 21 05 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 23 0E 00 00 46 FE 70 +R 00 00 01 00 +T 26 0E 00 00 +R 00 00 01 00 +T 26 0E 00 00 21 00 00 +R 00 00 01 00 +T 29 0E 00 00 +R 00 00 01 00 +T 29 0E 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 11 00 +T 2C 0E 00 00 +R 00 00 01 00 +T 2C 0E 00 00 CD 00 00 00 00 F8 FF DD 6E 0A DD +R 00 00 01 00 02 05 25 00 +T 35 0E 00 00 66 0B DD 75 F8 DD 74 F9 11 39 00 +R 00 00 01 00 +T 40 0E 00 00 19 56 23 66 6A DD 75 FA DD 74 FB +R 00 00 01 00 +T 4B 0E 00 00 11 05 00 19 5E 16 00 DD 73 FC DD +R 00 00 01 00 +T 56 0E 00 00 72 FD C5 DD 6E 02 DD 66 03 E5 0E +R 00 00 01 00 +T 61 0E 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 20 00 02 0A 20 00 +T 67 0E 00 00 21 0C 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 13 00 +T 6F 0E 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 13 00 02 0A 02 00 +T 76 0E 00 00 F1 F1 F1 DD 75 FE DD 74 FF 21 +R 00 00 01 00 +T 80 0E 00 00 05 00 DD 4E FA DD 46 FB 09 DD 46 +R 00 00 01 00 +T 8B 0E 00 00 FC 70 DD 6E FE DD 66 FF C3 +R 00 00 01 00 +T 94 0E 00 00 00 00 00 00 +R 00 00 01 00 02 04 11 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 50 68 79 73 69 63 61 6C 20 4C 69 +R 00 00 02 00 +T 0B 00 00 00 6E 65 20 44 65 61 64 00 +R 00 00 02 00 +T 13 00 00 00 +R 00 00 02 00 +T 13 00 00 00 45 73 74 61 62 6C 69 73 68 6D 65 +R 00 00 02 00 +T 1E 00 00 00 6E 74 20 50 68 61 73 65 00 +R 00 00 02 00 +T 27 00 00 00 +R 00 00 02 00 +T 27 00 00 00 41 75 74 68 65 6E 74 69 63 61 74 +R 00 00 02 00 +T 32 00 00 00 69 6F 6E 20 50 68 61 73 65 00 +R 00 00 02 00 +T 3C 00 00 00 +R 00 00 02 00 +T 3C 00 00 00 4E 65 74 77 6F 72 6B 20 50 72 6F +R 00 00 02 00 +T 47 00 00 00 74 6F 63 6F 6C 20 50 68 61 73 65 +R 00 00 02 00 +T 52 00 00 00 00 +R 00 00 02 00 +T 53 00 00 00 +R 00 00 02 00 +T 53 00 00 00 54 65 72 6D 69 6E 61 74 69 6F 6E +R 00 00 02 00 +T 5E 00 00 00 20 50 68 61 73 65 00 +R 00 00 02 00 +T 65 00 00 00 +R 00 00 02 00 +T 65 00 00 00 43 6C 6F 73 65 64 00 +R 00 00 02 00 +T 6C 00 00 00 +R 00 00 02 00 +T 6C 00 00 00 4C 69 73 74 65 6E 69 6E 67 20 2D +R 00 00 02 00 +T 77 00 00 00 2D 20 77 61 69 74 69 6E 67 20 66 +R 00 00 02 00 +T 82 00 00 00 6F 72 20 72 65 6D 6F 74 65 20 68 +R 00 00 02 00 +T 8D 00 00 00 6F 73 74 20 74 6F 20 61 74 74 65 +R 00 00 02 00 +T 98 00 00 00 6D 70 74 20 6F 70 65 6E 00 +R 00 00 02 00 +T A1 00 00 00 +R 00 00 02 00 +T A1 00 00 00 53 74 61 72 74 69 6E 67 20 63 6F +R 00 00 02 00 +T AC 00 00 00 6E 66 69 67 75 72 61 74 69 6F 6E +R 00 00 02 00 +T B7 00 00 00 20 65 78 63 68 61 6E 67 65 00 +R 00 00 02 00 +T C1 00 00 00 +R 00 00 02 00 +T C1 00 00 00 52 65 6D 6F 74 65 20 68 6F 73 74 +R 00 00 02 00 +T CC 00 00 00 20 61 63 63 65 70 74 65 64 20 6F +R 00 00 02 00 +T D7 00 00 00 75 72 20 72 65 71 75 65 73 74 3B +R 00 00 02 00 +T E2 00 00 00 20 77 61 69 74 69 6E 67 20 66 6F +R 00 00 02 00 +T ED 00 00 00 72 20 72 65 6D 6F 74 65 20 72 65 +R 00 00 02 00 +T F8 00 00 00 71 75 65 73 74 00 +R 00 00 02 00 +T FE 00 00 00 +R 00 00 02 00 +T FE 00 00 00 57 65 20 61 63 63 65 70 74 65 64 +R 00 00 02 00 +T 09 01 00 00 20 72 65 6D 6F 74 65 20 72 65 71 +R 00 00 02 00 +T 14 01 00 00 75 65 73 74 3B 20 77 61 69 74 69 +R 00 00 02 00 +T 1F 01 00 00 6E 67 20 66 6F 72 20 72 65 70 6C +R 00 00 02 00 +T 2A 01 00 00 79 20 74 6F 20 6F 75 72 20 72 65 +R 00 00 02 00 +T 35 01 00 00 71 75 65 73 74 00 +R 00 00 02 00 +T 3B 01 00 00 +R 00 00 02 00 +T 3B 01 00 00 4F 70 65 6E 65 64 00 +R 00 00 02 00 +T 42 01 00 00 +R 00 00 02 00 +T 42 01 00 00 54 65 72 6D 69 6E 61 74 65 20 72 +R 00 00 02 00 +T 4D 01 00 00 65 71 75 65 73 74 20 73 65 6E 74 +R 00 00 02 00 +T 58 01 00 00 20 74 6F 20 72 65 6D 6F 74 65 20 +R 00 00 02 00 +T 63 01 00 00 68 6F 73 74 00 +R 00 00 02 00 +T 68 01 00 00 +R 00 00 02 00 +T 68 01 00 00 70 70 70 20 3C 69 66 61 63 65 3E +R 00 00 02 00 +T 73 01 00 00 20 72 65 71 75 69 72 65 64 0A 00 +R 00 00 02 00 +T 7E 01 00 00 +R 00 00 02 00 +T 7E 01 00 00 25 63 00 +R 00 00 02 00 +T 81 01 00 00 +R 00 00 02 00 +T 81 01 00 00 25 34 64 09 00 +R 00 00 02 00 +T 86 01 00 00 +R 00 00 02 00 +T 86 01 00 00 30 78 25 30 38 6C 78 09 00 +R 00 00 02 00 +T 8F 01 00 00 +R 00 00 02 00 +T 8F 01 00 00 50 61 70 09 00 +R 00 00 02 00 +T 94 01 00 00 +R 00 00 02 00 +T 94 01 00 00 30 78 25 30 34 78 09 00 +R 00 00 02 00 +T 9C 01 00 00 +R 00 00 02 00 +T 9C 01 00 00 4E 6F 6E 65 09 00 +R 00 00 02 00 +T A2 01 00 00 +R 00 00 02 00 +T A2 01 00 00 59 65 73 20 00 +R 00 00 02 00 +T A7 01 00 00 +R 00 00 02 00 +T A7 01 00 00 4E 6F 20 20 00 +R 00 00 02 00 +T AC 01 00 00 +R 00 00 02 00 +T AC 01 00 00 30 78 25 30 38 6C 78 0A 00 +R 00 00 02 00 +T B5 01 00 00 +R 00 00 02 00 +T B5 01 00 00 75 6E 75 73 65 64 0A 00 +R 00 00 02 00 +T BD 01 00 00 +R 00 00 02 00 +T BD 01 00 00 09 4D 65 73 73 61 67 65 3A 20 27 +R 00 00 02 00 +T C8 01 00 00 25 73 27 0A 00 +R 00 00 02 00 +T CD 01 00 00 +R 00 00 02 00 +T CD 01 00 00 6E 6F 6E 65 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 4E 00 00 00 +R 00 00 04 00 +T 4E 00 00 00 +R 00 00 04 00 +T 82 00 00 00 +R 00 00 04 00 +T 82 00 00 00 +R 00 00 04 00 +T 8C 00 00 00 +R 00 00 04 00 +T 8C 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 04 2D 00 4A 08 28 00 +T 08 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 31 00 +T 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 04 01 00 +T 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 04 1F 00 4A 08 03 00 +T 22 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 35 00 +T 2A 00 00 00 A7 01 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T 34 00 00 00 00 00 00 00 2C 0E 00 00 00 00 +R 00 00 05 00 4A 04 24 00 48 08 01 00 +T 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 47 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 0B 09 00 +T 51 00 00 00 D0 0C 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T 5B 00 00 00 00 00 00 00 22 0C 00 00 00 00 +R 00 00 05 00 4A 04 38 00 48 08 01 00 +T 63 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 04 00 +T 6B 00 00 00 7E 0D 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T 75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 80 00 00 00 00 00 00 00 00 00 13 00 00 00 +R 00 00 05 00 00 06 02 00 00 0A 02 00 +T 86 00 00 00 27 00 00 00 3C 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 8A 00 00 00 53 00 00 00 65 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 8E 00 00 00 6C 00 00 00 A1 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 92 00 00 00 C1 00 00 00 FE 00 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 +T 96 00 00 00 3B 01 00 00 42 01 00 00 +R 00 00 05 00 00 04 02 00 00 08 02 00 diff --git a/src/nos/lib/ppp_lib/pppdump.rel b/src/nos/lib/ppp_lib/pppdump.rel new file mode 100644 index 00000000..94139571 --- /dev/null +++ b/src/nos/lib/ppp_lib/pppdump.rel @@ -0,0 +1,295 @@ +XL4 +H 2 areas 1D global symbols +S ___02b4_171d_LCP_0a Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___052c_3dc2_protocol_3a_20 Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _copy_p Ref00000000 +S ___0181_f935__28not_20odd_21_29_ Ref00000000 +S _len_p Ref00000000 +S ___0180_565f__28missing_20UI_21_ Ref00000000 +S ___017e_7b70__28compressed_20ALL Ref00000000 +S ___0321_f630_PAP_0a Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___05c7_bc4f_unknown_200x_2504x_ Ref00000000 +S ___0446_3845_compressed_20 Ref00000000 +S ___03d8_2be9_VJ_20Uncompressed_2 Ref00000000 +S __fprintf Ref00000000 +S .__.ABS. Def00000000 +S _vjcomp_dump Ref00000000 +S _pull16 Ref00000000 +S ___0339_b660_PPP_3a_20len_20_253 Ref00000000 +S ___028f_dff6_IP_0a Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___0297_e067_IPCP_0a Ref00000000 +S _ip_dump Ref00000000 +S _free_p Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0017_6a8d__09connection_200x_ Ref00000000 +S ___03d7_4b9d_VJ_20Compressed_20T Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2FE flags 0 +S _ppp_dump Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 0A 5F 03 0A +R 00 00 01 00 02 05 14 00 +T 09 00 00 00 57 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 0F 00 00 00 CD 00 00 00 00 E5 0E 00 00 00 00 +R 00 00 01 00 02 05 01 00 2B 0B 12 00 +T 15 00 00 00 C5 21 00 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 02 06 12 00 +T 1E 00 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T 24 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 2B 00 00 00 F1 F1 DD 6E 04 DD 66 05 46 23 66 +R 00 00 01 00 +T 36 00 00 00 68 01 0A 00 09 7E 23 66 6F 46 04 +R 00 00 01 00 +T 41 00 00 00 28 1B +R 00 00 01 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 08 00 02 0B 08 00 +T 49 00 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 52 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 57 00 00 00 00 00 00 00 F1 F1 F1 18 41 +R 00 00 01 00 02 04 01 00 +T 5E 00 00 00 +R 00 00 01 00 +T 5E 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 69 00 00 00 0A 00 09 46 23 66 68 23 7E FE 03 +R 00 00 01 00 +T 74 00 00 00 28 1B +R 00 00 01 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 07 00 02 0B 07 00 +T 7C 00 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 85 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 8A 00 00 00 00 00 00 00 F1 F1 F1 18 0E +R 00 00 01 00 02 04 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 99 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 11 00 02 0A 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 DD 36 FA FF DD 36 FB 03 DD 5E 04 +R 00 00 01 00 +T AA 00 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 18 00 +T B0 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T B7 00 00 00 FC DD 74 FD DD 7E FC E6 01 28 1B +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0C 00 02 0B 0C 00 +T C8 00 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T D1 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T D6 00 00 00 00 00 00 00 F1 F1 F1 18 4E +R 00 00 01 00 02 04 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 DD 6E FC DD 66 FD 65 2E 00 E5 DD +R 00 00 01 00 +T E8 00 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 18 00 +T F0 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T F7 00 00 00 E1 7D B1 5F 7C B0 57 DD 73 FC DD +R 00 00 01 00 +T 02 01 00 00 72 FD DD 7E FC E6 01 47 DD 7E FD +R 00 00 01 00 +T 0D 01 00 00 E6 00 B0 20 19 +R 00 00 01 00 +T 12 01 00 00 +R 00 00 01 00 +T 12 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T 18 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 21 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 26 01 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 02 00 02 0B 02 00 +T 31 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 3A 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 3F 01 00 00 00 00 00 00 F1 F1 F1 DD 5E FC DD +R 00 00 01 00 02 04 01 00 +T 48 01 00 00 56 FD CD 00 00 00 00 06 00 21 00 +R 00 00 01 00 02 07 03 00 +T 51 01 00 00 2D 00 2F 00 21 80 21 C0 23 C0 +R 00 00 01 00 +T 5B 01 00 00 D8 02 00 00 D6 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 5F 01 00 00 BA 01 00 00 9E 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 63 01 00 00 27 02 00 00 F2 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 67 01 00 00 69 01 00 00 +R 00 00 01 00 00 04 01 00 +T 69 01 00 00 +R 00 00 01 00 +T 69 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 13 00 02 0B 13 00 +T 6F 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 78 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 7D 01 00 00 00 00 00 00 F1 F1 F1 21 01 00 E5 +R 00 00 01 00 02 04 01 00 +T 86 01 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 91 01 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 97 01 00 00 CD 00 00 00 00 E1 C3 FB 02 00 00 +R 00 00 01 00 02 05 01 00 00 0B 01 00 +T 9E 01 00 00 +R 00 00 01 00 +T 9E 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 15 00 02 0B 15 00 +T A4 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T AD 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T B2 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T B8 01 00 00 FB 02 00 00 +R 00 00 01 00 00 04 01 00 +T BA 01 00 00 +R 00 00 01 00 +T BA 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 00 00 02 0B 00 00 +T C0 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T C9 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T CE 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T D4 01 00 00 FB 02 00 00 +R 00 00 01 00 00 04 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 09 00 02 0B 09 00 +T DC 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T E5 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T EA 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T F0 01 00 00 FB 02 00 00 +R 00 00 01 00 00 04 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1B 00 02 0B 1B 00 +T F8 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 01 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 06 02 00 00 00 00 00 00 F1 F1 F1 21 00 00 E5 +R 00 00 01 00 02 04 01 00 +T 0F 02 00 00 DD 4E 04 DD 46 05 DD 5E 02 DD 56 +R 00 00 01 00 +T 1A 02 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 20 02 00 00 CD 00 00 00 00 E1 C3 FB 02 00 00 +R 00 00 01 00 02 05 01 00 00 0B 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0D 00 02 0B 0D 00 +T 2D 02 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 36 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 3B 02 00 00 00 00 00 00 F1 F1 F1 DD 6E 04 DD +R 00 00 01 00 02 04 01 00 +T 44 02 00 00 66 05 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 4C 02 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 53 02 00 00 DD 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T 5D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 62 02 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 01 00 +T 6B 02 00 00 B4 20 03 +R 00 00 01 00 +T 6E 02 00 00 +R 00 00 01 00 +T 6E 02 00 00 C3 FB 02 00 00 +R 00 00 01 00 00 05 01 00 +T 71 02 00 00 +R 00 00 01 00 +T 71 02 00 00 21 0A 00 DD 4E FE DD 46 FF 09 56 +R 00 00 01 00 +T 7C 02 00 00 23 66 6A 11 09 00 19 5E 16 00 D5 +R 00 00 01 00 +T 87 02 00 00 1E 00 00 00 00 D5 21 00 00 00 00 +R 00 00 01 00 2B 05 1A 00 02 0B 1A 00 +T 8D 02 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 96 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 9B 02 00 00 00 00 00 00 F1 F1 F1 F1 21 0A 00 +R 00 00 01 00 02 04 01 00 +T A4 02 00 00 09 56 23 66 6A 11 09 00 19 36 06 +R 00 00 01 00 +T AF 02 00 00 21 01 00 E5 21 06 00 39 4D 44 DD +R 00 00 01 00 +T BA 02 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 16 00 +T C2 02 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 16 00 02 09 01 00 +T C9 02 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 17 00 +T D1 02 00 00 00 00 00 00 CD 00 00 00 00 18 23 +R 00 00 01 00 02 04 17 00 02 09 01 00 +T D8 02 00 00 +R 00 00 01 00 +T D8 02 00 00 DD 6E FC DD 66 FD E5 0E +R 00 00 01 00 +T E0 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0B 00 02 0A 0B 00 +T E6 02 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T EE 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T F3 02 00 00 00 00 00 00 F1 F1 F1 F1 18 00 +R 00 00 01 00 02 04 01 00 +T FB 02 00 00 +R 00 00 01 00 +T FB 02 00 00 +R 00 00 01 00 +T FB 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 diff --git a/src/nos/lib/ppp_lib/slhc_compress.rel b/src/nos/lib/ppp_lib/slhc_compress.rel new file mode 100644 index 00000000..e4d39167 --- /dev/null +++ b/src/nos/lib/ppp_lib/slhc_compress.rel @@ -0,0 +1,710 @@ +XL4 +H 2 areas 14 global symbols +S _put16 Ref00000000 +S _ntohtcp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _copy_p Ref00000000 +S _memcpy Ref00000000 +S _ntohip Ref00000000 +S _htonip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _encode Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pushdown Ref00000000 +S _memcmp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 94D flags 0 +S _slhc_compress Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 78 FF 21 00 00 39 +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 E5 21 06 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 14 00 00 00 4E 06 00 11 61 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0C 00 +T 1D 00 00 00 DD 6E 02 DD 66 03 46 23 66 68 19 +R 00 00 01 00 +T 28 00 00 00 4D 44 E1 71 23 70 21 02 00 39 E5 +R 00 00 01 00 +T 33 00 00 00 21 02 00 39 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 3E 00 00 00 21 04 00 39 E5 21 04 00 39 46 23 +R 00 00 01 00 +T 49 00 00 00 66 68 23 4E 23 46 E1 71 23 70 AF +R 00 00 01 00 +T 54 00 00 00 DD 77 8C DD 77 8D 21 16 00 39 DD +R 00 00 01 00 +T 5F 00 00 00 75 9E DD 74 9F 01 78 00 DD 6E 04 +R 00 00 01 00 +T 6A 00 00 00 DD 66 05 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 72 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 02 00 +T 79 00 00 00 75 FE DD 74 FF 21 08 00 39 E5 21 +R 00 00 01 00 +T 84 00 00 00 08 00 39 E5 21 8A 00 39 4D 44 21 +R 00 00 01 00 +T 8F 00 00 00 4B 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 97 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 06 00 02 09 02 00 +T 9E 00 00 00 E1 71 23 70 E1 71 23 70 DD 7E D4 +R 00 00 01 00 +T A9 00 00 00 FE 06 20 18 DD 6E CB DD 66 CC 7D +R 00 00 01 00 +T B4 00 00 00 B4 20 0E DD 7E CF E6 04 47 DD 7E +R 00 00 01 00 +T BF 00 00 00 D0 E6 00 B0 28 37 +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 DD 7E D4 FE 06 28 0F +R 00 00 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T D7 00 00 00 00 00 00 00 18 0D +R 00 00 01 00 02 04 0D 00 +T DB 00 00 00 +R 00 00 01 00 +T DB 00 00 00 21 0E 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T E6 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0D 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 21 86 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T F0 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0F 00 02 0A 02 00 +T F7 00 00 00 40 00 C3 4A 09 00 00 +R 00 00 01 00 00 07 01 00 +T FC 00 00 00 +R 00 00 01 00 +T FC 00 00 00 21 86 00 39 4D 44 21 28 00 39 5D +R 00 00 01 00 +T 07 01 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 0D 01 00 00 CD 00 00 00 00 4D 44 21 06 00 39 +R 00 00 01 00 02 05 02 00 +T 16 01 00 00 7E 81 77 23 7E 88 77 21 86 00 39 +R 00 00 01 00 +T 21 01 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0F 00 +T 26 01 00 00 00 00 00 00 CD 00 00 00 00 DD 7E +R 00 00 01 00 02 04 0F 00 02 09 02 00 +T 2D 01 00 00 BD E6 20 47 DD 7E BE E6 00 B0 20 +R 00 00 01 00 +T 38 01 00 00 54 DD 7E BD E6 40 47 DD 7E BE E6 +R 00 00 01 00 +T 43 01 00 00 00 B0 20 46 DD 7E BD E6 10 47 DD +R 00 00 01 00 +T 4E 01 00 00 7E BE E6 00 B0 20 38 DD 7E BD E6 +R 00 00 01 00 +T 59 01 00 00 04 47 DD 7E BE E6 00 B0 28 2A DD +R 00 00 01 00 +T 64 01 00 00 7E BD E6 80 47 DD 7E BE E6 00 B0 +R 00 00 01 00 +T 6F 01 00 00 20 1C DD 7E BD E6 00 47 DD 7E BE +R 00 00 01 00 +T 7A 01 00 00 E6 01 B0 20 0E DD 7E BD E6 00 47 +R 00 00 01 00 +T 85 01 00 00 DD 7E BE E6 02 B0 28 13 +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 21 0E 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 98 01 00 00 00 00 00 00 21 40 00 C3 +R 00 00 01 00 02 04 0D 00 +T 9E 01 00 00 4A 09 00 00 +R 00 00 01 00 00 04 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 21 04 00 39 46 23 66 68 23 23 23 +R 00 00 01 00 +T AB 01 00 00 4E 23 46 23 5E 23 56 69 60 DD 4E +R 00 00 01 00 +T B6 01 00 00 BF DD 46 C0 A7 ED 42 20 71 EB DD +R 00 00 01 00 +T C1 01 00 00 4E C1 DD 46 C2 ED 42 20 66 21 +R 00 00 01 00 +T CB 01 00 00 07 00 E5 21 06 00 39 4E 23 46 E1 +R 00 00 01 00 +T D6 01 00 00 09 4E 23 46 23 5E 23 56 69 60 DD +R 00 00 01 00 +T E1 01 00 00 4E C3 DD 46 C4 A7 ED 42 20 45 EB +R 00 00 01 00 +T EC 01 00 00 DD 4E C5 DD 46 C6 ED 42 20 3A 21 +R 00 00 01 00 +T F7 01 00 00 42 00 E5 21 06 00 39 4E 23 46 E1 +R 00 00 01 00 +T 02 02 00 00 09 46 23 66 68 DD 4E A0 DD 46 A1 +R 00 00 01 00 +T 0D 02 00 00 A7 ED 42 20 1E 21 44 00 E5 21 +R 00 00 01 00 +T 17 02 00 00 06 00 39 4E 23 46 E1 09 46 23 66 +R 00 00 01 00 +T 22 02 00 00 68 DD 4E A2 DD 46 A3 A7 ED 42 20 +R 00 00 01 00 +T 2D 02 00 00 02 +R 00 00 01 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 18 73 +R 00 00 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 21 00 00 39 46 23 66 68 E5 21 +R 00 00 01 00 +T 3A 02 00 00 06 00 39 4E 23 46 E1 A7 ED 42 20 +R 00 00 01 00 +T 45 02 00 00 02 +R 00 00 01 00 +T 46 02 00 00 +R 00 00 01 00 +T 46 02 00 00 18 35 +R 00 00 01 00 +T 48 02 00 00 +R 00 00 01 00 +T 48 02 00 00 21 02 00 39 E5 21 06 00 39 4E 23 +R 00 00 01 00 +T 53 02 00 00 46 E1 71 23 70 21 04 00 39 E5 21 +R 00 00 01 00 +T 5E 02 00 00 06 00 39 46 23 66 68 23 4E 23 46 +R 00 00 01 00 +T 69 02 00 00 E1 71 23 70 21 1A 00 DD 4E 02 DD +R 00 00 01 00 +T 74 02 00 00 46 03 09 CD 00 00 00 00 C3 +R 00 00 01 00 02 08 0D 00 +T 7B 02 00 00 A0 01 00 00 +R 00 00 01 00 00 04 01 00 +T 7D 02 00 00 +R 00 00 01 00 +T 7D 02 00 00 21 1E 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 88 02 00 00 00 00 00 00 21 06 00 DD 4E 02 DD +R 00 00 01 00 02 04 0D 00 +T 91 02 00 00 46 03 09 E5 21 04 00 39 7E 23 66 +R 00 00 01 00 +T 9C 02 00 00 6F 46 E1 70 C3 C1 08 00 00 +R 00 00 01 00 00 09 01 00 +T A3 02 00 00 +R 00 00 01 00 +T A3 02 00 00 21 00 00 39 46 23 66 68 E5 21 +R 00 00 01 00 +T AD 02 00 00 04 00 39 4E 23 46 E1 A7 ED 42 20 +R 00 00 01 00 +T B8 02 00 00 02 +R 00 00 01 00 +T B9 02 00 00 +R 00 00 01 00 +T B9 02 00 00 18 77 +R 00 00 01 00 +T BB 02 00 00 +R 00 00 01 00 +T BB 02 00 00 21 00 00 39 46 23 66 68 E5 21 +R 00 00 01 00 +T C5 02 00 00 06 00 39 4E 23 46 E1 A7 ED 42 20 +R 00 00 01 00 +T D0 02 00 00 18 +R 00 00 01 00 +T D1 02 00 00 +R 00 00 01 00 +T D1 02 00 00 21 06 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T DC 02 00 00 21 04 00 39 7E 23 66 6F 46 E1 70 +R 00 00 01 00 +T E7 02 00 00 18 49 +R 00 00 01 00 +T E9 02 00 00 +R 00 00 01 00 +T E9 02 00 00 21 02 00 39 46 23 66 68 23 E5 21 +R 00 00 01 00 +T F4 02 00 00 06 00 39 46 23 66 68 23 4E 23 46 +R 00 00 01 00 +T FF 02 00 00 E1 71 23 70 21 04 00 39 46 23 66 +R 00 00 01 00 +T 0A 03 00 00 68 23 E5 21 02 00 39 46 23 66 68 +R 00 00 01 00 +T 15 03 00 00 23 4E 23 46 E1 71 23 70 21 00 00 +R 00 00 01 00 +T 20 03 00 00 39 46 23 66 68 23 E5 21 06 00 39 +R 00 00 01 00 +T 2B 03 00 00 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 32 03 00 00 +R 00 00 01 00 +T 32 03 00 00 +R 00 00 01 00 +T 32 03 00 00 21 42 00 E5 21 06 00 39 4E 23 46 +R 00 00 01 00 +T 3D 03 00 00 E1 09 DD 75 82 DD 74 83 21 15 00 +R 00 00 01 00 +T 48 03 00 00 E5 21 06 00 39 4E 23 46 E1 09 7E +R 00 00 01 00 +T 53 03 00 00 DD BE D1 C2 E5 03 00 00 21 19 00 +R 00 00 01 00 00 08 01 00 +T 5C 03 00 00 E5 21 06 00 39 4E 23 46 E1 09 7E +R 00 00 01 00 +T 67 03 00 00 DD BE D5 20 79 21 16 00 E5 21 +R 00 00 01 00 +T 71 03 00 00 06 00 39 4E 23 46 E1 09 7E DD BE +R 00 00 01 00 +T 7C 03 00 00 D2 20 66 21 13 00 E5 21 06 00 39 +R 00 00 01 00 +T 87 03 00 00 4E 23 46 E1 09 7E 0F E6 01 26 00 +R 00 00 01 00 +T 92 03 00 00 6F DD 7E CF 0F E6 01 06 00 4F A7 +R 00 00 01 00 +T 9D 03 00 00 ED 42 20 44 21 17 00 E5 21 06 00 +R 00 00 01 00 +T A8 03 00 00 39 4E 23 46 E1 09 7E DD BE D3 20 +R 00 00 01 00 +T B3 03 00 00 31 DD 7E D5 B7 28 2E DD 4E D5 06 +R 00 00 01 00 +T BE 03 00 00 00 C5 21 1A 00 E5 21 08 00 39 4E +R 00 00 01 00 +T C9 03 00 00 23 46 E1 09 4D 44 21 49 00 39 11 +R 00 00 01 00 +T D4 03 00 00 17 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 12 00 +T DB 03 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 12 00 02 09 02 00 +T E2 03 00 00 B4 28 03 +R 00 00 01 00 +T E5 03 00 00 +R 00 00 01 00 +T E5 03 00 00 +R 00 00 01 00 +T E5 03 00 00 +R 00 00 01 00 +T E5 03 00 00 +R 00 00 01 00 +T E5 03 00 00 +R 00 00 01 00 +T E5 03 00 00 C3 C1 08 00 00 +R 00 00 01 00 00 05 01 00 +T E8 03 00 00 +R 00 00 01 00 +T E8 03 00 00 DD 7E BD E6 02 47 DD 7E BE E6 00 +R 00 00 01 00 +T F3 03 00 00 B0 28 3A +R 00 00 01 00 +T F6 03 00 00 +R 00 00 01 00 +T F6 03 00 00 DD 6E B0 DD 66 B1 01 00 00 DD 75 +R 00 00 01 00 +T 01 04 00 00 84 DD 74 85 DD 71 86 DD 70 87 4D +R 00 00 01 00 +T 0C 04 00 00 44 DD 5E 9E DD 56 9F 3E +R 00 00 01 00 +T 14 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 19 04 00 00 00 00 00 00 DD 75 9E DD 74 9F 21 +R 00 00 01 00 02 04 02 00 +T 22 04 00 00 14 00 39 7E F6 01 77 23 7E F6 00 +R 00 00 01 00 +T 2D 04 00 00 77 18 1C +R 00 00 01 00 +T 30 04 00 00 +R 00 00 01 00 +T 30 04 00 00 21 10 00 DD 4E 82 DD 46 83 09 46 +R 00 00 01 00 +T 3B 04 00 00 23 66 68 DD 4E B0 DD 46 B1 A7 ED +R 00 00 01 00 +T 46 04 00 00 42 28 03 +R 00 00 01 00 +T 49 04 00 00 +R 00 00 01 00 +T 49 04 00 00 C3 C1 08 00 00 +R 00 00 01 00 00 05 01 00 +T 4C 04 00 00 +R 00 00 01 00 +T 4C 04 00 00 +R 00 00 01 00 +T 4C 04 00 00 21 0C 00 DD 4E 82 DD 46 83 09 4E +R 00 00 01 00 +T 57 04 00 00 23 46 DD 6E AC DD 66 AD A7 ED 42 +R 00 00 01 00 +T 62 04 00 00 01 00 00 DD 75 84 DD 74 85 DD 71 +R 00 00 01 00 +T 6D 04 00 00 86 DD 70 87 7D B4 B1 B0 28 27 +R 00 00 01 00 +T 77 04 00 00 +R 00 00 01 00 +T 77 04 00 00 DD 4E 84 DD 46 85 DD 5E 9E DD 56 +R 00 00 01 00 +T 82 04 00 00 9F 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 88 04 00 00 CD 00 00 00 00 DD 75 9E DD 74 9F +R 00 00 01 00 02 05 02 00 +T 91 04 00 00 21 14 00 39 7E F6 02 77 23 7E F6 +R 00 00 01 00 +T 9C 04 00 00 00 77 +R 00 00 01 00 +T 9E 04 00 00 +R 00 00 01 00 +T 9E 04 00 00 21 08 00 DD 4E 82 DD 46 83 09 4E +R 00 00 01 00 +T A9 04 00 00 23 46 23 5E 23 56 69 60 4D 44 DD +R 00 00 01 00 +T B4 04 00 00 6E A8 DD 66 A9 A7 ED 42 4D 44 DD +R 00 00 01 00 +T BF 04 00 00 6E AA DD 66 AB ED 52 E5 69 60 C1 +R 00 00 01 00 +T CA 04 00 00 DD 75 88 DD 74 89 DD 71 8A DD 70 +R 00 00 01 00 +T D5 04 00 00 8B 7D B4 B1 B0 28 43 +R 00 00 01 00 +T DC 04 00 00 +R 00 00 01 00 +T DC 04 00 00 A7 21 FF FF DD 4E 88 DD 46 89 ED +R 00 00 01 00 +T E7 04 00 00 42 21 00 00 DD 4E 8A DD 46 8B ED +R 00 00 01 00 +T F2 04 00 00 42 30 03 +R 00 00 01 00 +T F5 04 00 00 +R 00 00 01 00 +T F5 04 00 00 C3 C1 08 00 00 +R 00 00 01 00 00 05 01 00 +T F8 04 00 00 +R 00 00 01 00 +T F8 04 00 00 DD 4E 88 DD 46 89 DD 5E 9E DD 56 +R 00 00 01 00 +T 03 05 00 00 9F 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 09 05 00 00 CD 00 00 00 00 DD 75 9E DD 74 9F +R 00 00 01 00 02 05 02 00 +T 12 05 00 00 21 14 00 39 7E F6 04 77 23 7E F6 +R 00 00 01 00 +T 1D 05 00 00 00 77 +R 00 00 01 00 +T 1F 05 00 00 +R 00 00 01 00 +T 1F 05 00 00 21 04 00 DD 4E 82 DD 46 83 09 4E +R 00 00 01 00 +T 2A 05 00 00 23 46 23 5E 23 56 69 60 4D 44 DD +R 00 00 01 00 +T 35 05 00 00 6E A4 DD 66 A5 A7 ED 42 4D 44 DD +R 00 00 01 00 +T 40 05 00 00 6E A6 DD 66 A7 ED 52 E5 69 60 C1 +R 00 00 01 00 +T 4B 05 00 00 DD 75 84 DD 74 85 DD 71 86 DD 70 +R 00 00 01 00 +T 56 05 00 00 87 7D B4 B1 B0 28 43 +R 00 00 01 00 +T 5D 05 00 00 +R 00 00 01 00 +T 5D 05 00 00 A7 21 FF FF DD 4E 84 DD 46 85 ED +R 00 00 01 00 +T 68 05 00 00 42 21 00 00 DD 4E 86 DD 46 87 ED +R 00 00 01 00 +T 73 05 00 00 42 30 03 +R 00 00 01 00 +T 76 05 00 00 +R 00 00 01 00 +T 76 05 00 00 C3 C1 08 00 00 +R 00 00 01 00 00 05 01 00 +T 79 05 00 00 +R 00 00 01 00 +T 79 05 00 00 DD 4E 84 DD 46 85 DD 5E 9E DD 56 +R 00 00 01 00 +T 84 05 00 00 9F 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T 8A 05 00 00 CD 00 00 00 00 DD 75 9E DD 74 9F +R 00 00 01 00 02 05 02 00 +T 93 05 00 00 21 14 00 39 7E F6 08 77 23 7E F6 +R 00 00 01 00 +T 9E 05 00 00 00 77 +R 00 00 01 00 +T A0 05 00 00 +R 00 00 01 00 +T A0 05 00 00 DD 5E 8C DD 56 8D CD 00 00 00 00 +R 00 00 01 00 02 0B 03 00 +T A9 05 00 00 05 00 00 00 08 00 0B 00 0C 00 +R 00 00 01 00 +T B3 05 00 00 0F 00 BA 06 00 00 02 06 00 00 +R 00 00 01 00 00 06 01 00 00 0A 01 00 +T B9 05 00 00 05 06 00 00 02 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T BD 05 00 00 70 06 00 00 C1 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T C1 05 00 00 +R 00 00 01 00 +T C1 05 00 00 21 0B 00 E5 21 06 00 39 4E 23 46 +R 00 00 01 00 +T CC 05 00 00 E1 09 46 23 66 68 DD 4E C7 DD 46 +R 00 00 01 00 +T D7 05 00 00 C8 A7 ED 42 28 22 21 0B 00 E5 21 +R 00 00 01 00 +T E2 05 00 00 06 00 39 4E 23 46 E1 09 46 23 66 +R 00 00 01 00 +T ED 05 00 00 68 E5 21 08 00 39 4E 23 46 E1 A7 +R 00 00 01 00 +T F8 05 00 00 ED 42 20 03 +R 00 00 01 00 +T FC 05 00 00 +R 00 00 01 00 +T FC 05 00 00 +R 00 00 01 00 +T FC 05 00 00 +R 00 00 01 00 +T FC 05 00 00 C3 BA 06 00 00 +R 00 00 01 00 00 05 01 00 +T FF 05 00 00 +R 00 00 01 00 +T FF 05 00 00 C3 C1 08 00 00 +R 00 00 01 00 00 05 01 00 +T 02 06 00 00 +R 00 00 01 00 +T 02 06 00 00 C3 C1 08 00 00 +R 00 00 01 00 00 05 01 00 +T 05 06 00 00 +R 00 00 01 00 +T 05 06 00 00 DD 6E 84 DD 66 85 DD 4E 88 DD 46 +R 00 00 01 00 +T 10 06 00 00 89 A7 ED 42 20 58 DD 6E 86 DD 66 +R 00 00 01 00 +T 1B 06 00 00 87 DD 4E 8A DD 46 8B ED 42 20 48 +R 00 00 01 00 +T 26 06 00 00 21 0B 00 E5 21 06 00 39 4E 23 46 +R 00 00 01 00 +T 31 06 00 00 E1 09 46 23 66 68 E5 21 08 00 39 +R 00 00 01 00 +T 3C 06 00 00 4E 23 46 E1 A7 ED 42 11 00 00 DD +R 00 00 01 00 +T 47 06 00 00 4E 84 DD 46 85 A7 ED 42 20 1D EB +R 00 00 01 00 +T 52 06 00 00 DD 4E 86 DD 46 87 ED 42 20 12 +R 00 00 01 00 +T 5C 06 00 00 +R 00 00 01 00 +T 5C 06 00 00 +R 00 00 01 00 +T 5C 06 00 00 +R 00 00 01 00 +T 5C 06 00 00 DD 36 8C 0B DD 36 8D 00 21 16 00 +R 00 00 01 00 +T 67 06 00 00 39 DD 75 9E DD 74 9F +R 00 00 01 00 +T 6E 06 00 00 +R 00 00 01 00 +T 6E 06 00 00 18 4A +R 00 00 01 00 +T 70 06 00 00 +R 00 00 01 00 +T 70 06 00 00 21 0B 00 E5 21 06 00 39 4E 23 46 +R 00 00 01 00 +T 7B 06 00 00 E1 09 46 23 66 68 E5 21 08 00 39 +R 00 00 01 00 +T 86 06 00 00 4E 23 46 E1 A7 ED 42 11 00 00 DD +R 00 00 01 00 +T 91 06 00 00 4E 84 DD 46 85 A7 ED 42 20 1D EB +R 00 00 01 00 +T 9C 06 00 00 DD 4E 86 DD 46 87 ED 42 20 12 +R 00 00 01 00 +T A6 06 00 00 +R 00 00 01 00 +T A6 06 00 00 DD 36 8C 0F DD 36 8D 00 21 16 00 +R 00 00 01 00 +T B1 06 00 00 39 DD 75 9E DD 74 9F +R 00 00 01 00 +T B8 06 00 00 +R 00 00 01 00 +T B8 06 00 00 18 00 +R 00 00 01 00 +T BA 06 00 00 +R 00 00 01 00 +T BA 06 00 00 21 0D 00 E5 21 06 00 39 4E 23 46 +R 00 00 01 00 +T C5 06 00 00 E1 09 4E 23 46 DD 6E C9 DD 66 CA +R 00 00 01 00 +T D0 06 00 00 A7 ED 42 01 00 00 DD 75 84 DD 74 +R 00 00 01 00 +T DB 06 00 00 85 DD 71 86 DD 70 87 3E 01 AD B4 +R 00 00 01 00 +T E6 06 00 00 B1 B0 28 27 +R 00 00 01 00 +T EA 06 00 00 +R 00 00 01 00 +T EA 06 00 00 DD 4E 84 DD 46 85 DD 5E 9E DD 56 +R 00 00 01 00 +T F5 06 00 00 9F 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T FB 06 00 00 CD 00 00 00 00 DD 75 9E DD 74 9F +R 00 00 01 00 02 05 02 00 +T 04 07 00 00 21 14 00 39 7E F6 20 77 23 7E F6 +R 00 00 01 00 +T 0F 07 00 00 00 77 +R 00 00 01 00 +T 11 07 00 00 +R 00 00 01 00 +T 11 07 00 00 DD 7E BD E6 08 47 DD 7E BE E6 00 +R 00 00 01 00 +T 1C 07 00 00 B0 28 0D +R 00 00 01 00 +T 1F 07 00 00 +R 00 00 01 00 +T 1F 07 00 00 21 14 00 39 7E F6 10 77 23 7E F6 +R 00 00 01 00 +T 2A 07 00 00 00 77 +R 00 00 01 00 +T 2C 07 00 00 +R 00 00 01 00 +T 2C 07 00 00 DD 6E AE DD 66 AF 01 00 00 DD 75 +R 00 00 01 00 +T 37 07 00 00 88 DD 74 89 DD 71 8A DD 70 8B 21 +R 00 00 01 00 +T 42 07 00 00 04 00 39 5E 23 56 13 13 13 21 +R 00 00 01 00 +T 4C 07 00 00 47 00 39 01 3F 00 ED B0 21 42 00 +R 00 00 01 00 +T 57 07 00 00 E5 21 06 00 39 4E 23 46 E1 09 EB +R 00 00 01 00 +T 62 07 00 00 21 28 00 39 01 1F 00 ED B0 21 +R 00 00 01 00 +T 6C 07 00 00 16 00 39 4D 44 DD 6E 9E DD 66 9F +R 00 00 01 00 +T 77 07 00 00 A7 ED 42 7C 07 9F 4F 41 DD 75 84 +R 00 00 01 00 +T 82 07 00 00 DD 74 85 DD 71 86 DD 70 87 21 +R 00 00 01 00 +T 8C 07 00 00 06 00 39 4E 23 46 C5 01 00 00 DD +R 00 00 01 00 +T 97 07 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T 9F 07 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0A 00 02 09 02 00 +T A6 07 00 00 7E 0A DD B6 0B 28 18 21 04 00 39 +R 00 00 01 00 +T B1 07 00 00 7E 23 66 6F E5 21 07 00 DD 4E 02 +R 00 00 01 00 +T BC 07 00 00 DD 46 03 09 7E E1 BE 28 73 +R 00 00 01 00 +T C5 07 00 00 +R 00 00 01 00 +T C5 07 00 00 +R 00 00 01 00 +T C5 07 00 00 +R 00 00 01 00 +T C5 07 00 00 DD 6E 84 DD 66 85 01 04 00 09 E5 +R 00 00 01 00 +T D0 07 00 00 01 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T DA 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T DF 07 00 00 00 00 00 00 E1 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 02 00 +T E8 07 00 00 46 23 66 68 01 0A 00 09 46 23 66 +R 00 00 01 00 +T F3 07 00 00 68 DD 75 9E DD 74 9F DD 7E 8C F6 +R 00 00 01 00 +T FE 07 00 00 40 23 DD 75 9E DD 74 9F 2B 77 21 +R 00 00 01 00 +T 09 08 00 00 04 00 39 7E 23 66 6F 46 DD 6E 9E +R 00 00 01 00 +T 14 08 00 00 DD 66 9F 23 DD 75 9E DD 74 9F 2B +R 00 00 01 00 +T 1F 08 00 00 70 21 07 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 2A 08 00 00 E5 21 06 00 39 7E 23 66 6F 46 E1 +R 00 00 01 00 +T 35 08 00 00 70 18 40 +R 00 00 01 00 +T 38 08 00 00 +R 00 00 01 00 +T 38 08 00 00 DD 6E 84 DD 66 85 23 23 23 E5 01 +R 00 00 01 00 +T 43 08 00 00 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 4C 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 51 08 00 00 00 00 00 00 E1 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 02 00 +T 5A 08 00 00 46 23 66 68 01 0A 00 09 46 23 66 +R 00 00 01 00 +T 65 08 00 00 68 DD 75 9E DD 74 9F DD 46 8C 23 +R 00 00 01 00 +T 70 08 00 00 DD 75 9E DD 74 9F 2B 70 +R 00 00 01 00 +T 78 08 00 00 +R 00 00 01 00 +T 78 08 00 00 DD 4E 88 DD 46 89 DD 5E 9E DD 56 +R 00 00 01 00 +T 83 08 00 00 9F 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 89 08 00 00 CD 00 00 00 00 DD 75 9E DD 74 9F +R 00 00 01 00 02 05 02 00 +T 92 08 00 00 DD 4E 84 DD 46 85 C5 21 18 00 39 +R 00 00 01 00 +T 9D 08 00 00 4D 44 DD 5E 9E DD 56 9F 3E +R 00 00 01 00 +T A6 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T AB 08 00 00 00 00 00 00 F1 21 16 00 DD 4E 02 +R 00 00 01 00 02 04 02 00 +T B4 08 00 00 DD 46 03 09 CD 00 00 00 00 21 +R 00 00 01 00 02 09 0D 00 +T BC 08 00 00 80 00 C3 4A 09 00 00 +R 00 00 01 00 00 07 01 00 +T C1 08 00 00 +R 00 00 01 00 +T C1 08 00 00 21 04 00 39 7E 23 66 6F 46 DD 70 +R 00 00 01 00 +T CC 08 00 00 D4 21 04 00 39 5E 23 56 13 13 13 +R 00 00 01 00 +T D7 08 00 00 21 47 00 39 01 3F 00 ED B0 21 +R 00 00 01 00 +T E1 08 00 00 42 00 E5 21 06 00 39 4E 23 46 E1 +R 00 00 01 00 +T EC 08 00 00 09 EB 21 28 00 39 01 1F 00 ED B0 +R 00 00 01 00 +T F7 08 00 00 21 07 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 02 09 00 00 21 06 00 39 7E 23 66 6F 56 E1 72 +R 00 00 01 00 +T 0D 09 00 00 21 12 00 09 CD 00 00 00 00 21 +R 00 00 01 00 02 09 0D 00 +T 15 09 00 00 08 00 39 4E 23 46 C5 01 00 00 DD +R 00 00 01 00 +T 20 09 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T 28 09 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 0A 00 02 09 02 00 +T 2F 09 00 00 01 00 E5 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T 39 09 00 00 49 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 41 09 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 07 00 02 09 02 00 +T 48 09 00 00 70 00 +R 00 00 01 00 +T 4A 09 00 00 +R 00 00 01 00 +T 4A 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 diff --git a/src/nos/lib/ppp_lib/slhc_free.rel b/src/nos/lib/ppp_lib/slhc_free.rel new file mode 100644 index 00000000..014f1ba9 --- /dev/null +++ b/src/nos/lib/ppp_lib/slhc_free.rel @@ -0,0 +1,55 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 56 flags 0 +S _slhc_free Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 20 02 +R 00 00 01 00 02 05 04 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 18 4A +R 00 00 01 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 DD 6E 02 DD 66 03 23 23 7E 23 B6 +R 00 00 01 00 +T 14 00 00 00 28 13 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 6E 02 DD 66 03 23 23 5E 23 56 +R 00 00 01 00 +T 21 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 27 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 6E 02 DD 66 03 7E 23 B6 28 11 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 6E 02 DD 66 03 5E 23 56 3E +R 00 00 01 00 +T 3E 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 43 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 4D 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/ppp_lib/slhc_i_status.rel b/src/nos/lib/ppp_lib/slhc_i_status.rel new file mode 100644 index 00000000..5cd00586 --- /dev/null +++ b/src/nos/lib/ppp_lib/slhc_i_status.rel @@ -0,0 +1,42 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0007_d27a__09_2510ld_20Cmp_2c Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 6C flags 0 +S _slhc_i_status Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 28 62 +R 00 00 01 00 02 05 04 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 21 2E 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 12 00 00 00 23 56 23 4E 23 46 C5 D5 21 2A 00 +R 00 00 01 00 +T 1D 00 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 28 00 00 00 4E 23 46 C5 D5 21 22 00 DD 4E 02 +R 00 00 01 00 +T 33 00 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 3E 00 00 00 C5 D5 21 26 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 49 00 00 00 09 4E 23 46 23 5E 23 56 D5 C5 0E +R 00 00 01 00 +T 54 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 01 00 02 0A 01 00 +T 5A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 60 00 00 00 00 00 00 00 EB 21 14 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/ppp_lib/slhc_init.rel b/src/nos/lib/ppp_lib/slhc_init.rel new file mode 100644 index 00000000..a2c3e861 --- /dev/null +++ b/src/nos/lib/ppp_lib/slhc_init.rel @@ -0,0 +1,133 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _callocw Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 196 flags 0 +S _slhc_init Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 01 32 00 11 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 15 00 00 00 FE DD 74 FF DD 4E 02 DD 46 03 21 +R 00 00 01 00 +T 20 00 00 00 00 00 CD 00 00 00 00 30 41 01 +R 00 00 01 00 02 07 06 00 +T 28 00 00 00 00 81 DD 6E 02 DD 66 03 3E 80 AC +R 00 00 01 00 +T 33 00 00 00 67 ED 42 30 30 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 6E FE DD 66 FF 23 23 E5 01 +R 00 00 01 00 +T 42 00 00 00 61 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 4B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 50 00 00 00 00 00 00 00 4D 44 E1 71 23 70 DD +R 00 00 01 00 02 04 00 00 +T 59 00 00 00 7E 02 C6 FF 21 05 00 DD 4E FE DD +R 00 00 01 00 +T 64 00 00 00 46 FF 09 77 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 DD 4E 04 DD 46 05 21 00 00 CD +R 00 00 01 00 +T 72 00 00 00 00 00 00 00 30 3D 01 00 81 DD 6E +R 00 00 01 00 02 04 06 00 +T 7B 00 00 00 04 DD 66 05 3E 80 AC 67 ED 42 30 +R 00 00 01 00 +T 86 00 00 00 2C +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 01 61 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 91 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 96 00 00 00 00 00 00 00 E5 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 00 00 +T 9F 00 00 00 C1 71 23 70 DD 7E 04 C6 FF 21 +R 00 00 01 00 +T A9 00 00 00 04 00 DD 4E FE DD 46 FF 09 77 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 21 06 00 DD 4E FE DD 46 FF 09 36 +R 00 00 01 00 +T BE 00 00 00 00 21 07 00 09 36 FF 21 08 00 09 +R 00 00 01 00 +T C9 00 00 00 36 FF DD 4E 04 DD 46 05 21 00 00 +R 00 00 01 00 +T D4 00 00 00 CD 00 00 00 00 D2 8D 01 00 00 +R 00 00 01 00 02 05 06 00 00 0A 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T E5 00 00 00 75 FC DD 74 FD 21 04 00 DD 4E FE +R 00 00 01 00 +T F0 00 00 00 DD 46 FF 09 4E 06 00 DD 71 FA DD +R 00 00 01 00 +T FB 00 00 00 70 FB +R 00 00 01 00 +T FD 00 00 00 +R 00 00 01 00 +T FD 00 00 00 DD 7E FA DD B6 FB 28 58 +R 00 00 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 01 61 00 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 0F 01 00 00 00 00 00 00 DD 6E FC DD 66 FD 19 +R 00 00 01 00 02 04 05 00 +T 18 01 00 00 DD 46 FA 70 01 61 00 DD 5E FA DD +R 00 00 01 00 +T 23 01 00 00 56 FB CD 00 00 00 00 DD 6E FC DD +R 00 00 01 00 02 07 05 00 +T 2C 01 00 00 66 FD 19 23 E5 01 61 00 DD 5E FA +R 00 00 01 00 +T 37 01 00 00 DD 56 FB CD 00 00 00 00 DD 6E FC +R 00 00 01 00 02 08 05 00 +T 40 01 00 00 DD 66 FD 19 01 9F FF 09 4D 44 E1 +R 00 00 01 00 +T 4B 01 00 00 71 23 70 DD 6E FA DD 66 FB 2B DD +R 00 00 01 00 +T 56 01 00 00 75 FA DD 74 FB 18 A0 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 DD 6E FC DD 66 FD 23 E5 21 04 00 +R 00 00 01 00 +T 68 01 00 00 DD 4E FE DD 46 FF 09 4E 06 00 11 +R 00 00 01 00 +T 73 01 00 00 61 00 CD 00 00 00 00 DD 6E FC DD +R 00 00 01 00 02 07 05 00 +T 7C 01 00 00 66 FD 19 4D 44 E1 71 23 70 DD 6E +R 00 00 01 00 +T 87 01 00 00 FC DD 66 FD 36 00 +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 01 00 diff --git a/src/nos/lib/ppp_lib/slhc_o_status.rel b/src/nos/lib/ppp_lib/slhc_o_status.rel new file mode 100644 index 00000000..534be1e7 --- /dev/null +++ b/src/nos/lib/ppp_lib/slhc_o_status.rel @@ -0,0 +1,59 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0008_c900__09_2510ld_20Search Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___0006_bdbf__09_2510ld_20Cmp_2c Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A9 flags 0 +S _slhc_o_status Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 CA +R 00 00 01 00 02 05 04 00 +T 06 00 00 00 A6 00 00 00 +R 00 00 01 00 00 04 01 00 +T 08 00 00 00 +R 00 00 01 00 +T 08 00 00 00 21 0A 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 13 00 00 00 23 56 23 4E 23 46 C5 D5 21 0E 00 +R 00 00 01 00 +T 1E 00 00 00 DD 4E 02 DD 46 03 09 5E 23 56 23 +R 00 00 01 00 +T 29 00 00 00 4E 23 46 C5 D5 21 12 00 DD 4E 02 +R 00 00 01 00 +T 34 00 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 3F 00 00 00 C5 D5 21 16 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 4A 00 00 00 09 5E 23 56 23 4E 23 46 C5 D5 0E +R 00 00 01 00 +T 55 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 05 00 02 0A 05 00 +T 5B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 61 00 00 00 00 00 00 00 EB 21 14 00 39 F9 EB +R 00 00 01 00 02 04 00 00 +T 6A 00 00 00 21 1E 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 75 00 00 00 23 56 23 4E 23 46 C5 D5 21 1A 00 +R 00 00 01 00 +T 80 00 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T 8B 00 00 00 5E 23 56 D5 C5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 02 00 +T 93 00 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 02 00 2B 0B 06 00 +T 99 00 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T A0 00 00 00 21 0C 00 39 F9 EB +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/ppp_lib/slhc_remember.rel b/src/nos/lib/ppp_lib/slhc_remember.rel new file mode 100644 index 00000000..271bcb9c --- /dev/null +++ b/src/nos/lib/ppp_lib/slhc_remember.rel @@ -0,0 +1,168 @@ +XL4 +H 2 areas 10 global symbols +S _ntohtcp Ref00000000 +S _htontcp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S _slhc_toss Ref00000000 +S _ntohip Ref00000000 +S _htonip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _cksum Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20A flags 0 +S _slhc_remember Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 9A FF 79 B0 20 1E +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 21 2A 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 14 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 0C 00 +T 1D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 22 00 00 00 00 00 00 00 C3 07 02 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 32 00 00 00 0A 00 09 7E 23 66 6F 7E E6 0F 6F +R 00 00 01 00 +T 3D 00 00 00 26 00 29 29 DD 75 FC DD 74 FD 01 +R 00 00 01 00 +T 48 00 00 00 14 00 A7 ED 42 30 1E +R 00 00 01 00 +T 4F 00 00 00 +R 00 00 01 00 +T 4F 00 00 00 21 2A 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 5A 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 0C 00 +T 63 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 68 00 00 00 00 00 00 00 C3 07 02 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 DD 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T 77 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 7C 00 00 00 00 00 00 00 DD 75 FA DD 74 FB DD +R 00 00 01 00 02 04 02 00 +T 85 00 00 00 4E 04 DD 46 05 21 02 00 39 5D 54 +R 00 00 01 00 +T 90 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 96 00 00 00 00 00 00 00 DD 4E A4 DD 46 A5 DD +R 00 00 01 00 02 04 02 00 +T 9F 00 00 00 6E FA DD 66 FB A7 ED 42 30 1E +R 00 00 01 00 +T A9 00 00 00 +R 00 00 01 00 +T A9 00 00 00 21 2A 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T B4 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 0C 00 +T BD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T C2 00 00 00 00 00 00 00 C3 07 02 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T C7 00 00 00 +R 00 00 01 00 +T C7 00 00 00 DD 4E B1 06 00 DD 71 FE DD 70 FF +R 00 00 01 00 +T D2 00 00 00 21 05 00 DD 5E 02 DD 56 03 19 6E +R 00 00 01 00 +T DD 00 00 00 26 00 CD 00 00 00 00 30 1E +R 00 00 01 00 02 07 0D 00 +T E4 00 00 00 +R 00 00 01 00 +T E4 00 00 00 21 2A 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T EF 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 0C 00 +T F8 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T FD 00 00 00 00 00 00 00 C3 07 02 00 00 +R 00 00 01 00 02 04 02 00 00 09 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 DD 36 B1 06 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T 0D 01 00 00 41 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 00 00 +T 15 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 1B 01 00 00 00 00 E5 21 00 00 E5 21 00 00 E5 +R 00 00 01 00 +T 26 01 00 00 21 00 00 E5 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T 31 01 00 00 49 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T 39 01 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 01 00 02 09 02 00 +T 40 01 00 00 E1 E1 21 01 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 +T 4B 01 00 00 05 21 04 00 39 5D 54 3E +R 00 00 01 00 +T 53 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 58 01 00 00 00 00 00 00 E1 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 02 00 +T 61 01 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 11 +R 00 00 01 00 +T 6C 01 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 71 01 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 09 00 02 09 02 00 +T 78 01 00 00 B4 28 1D +R 00 00 01 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 21 2A 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 86 01 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 0C 00 +T 8F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 94 01 00 00 00 00 00 00 18 6F +R 00 00 01 00 02 04 02 00 +T 98 01 00 00 +R 00 00 01 00 +T 98 01 00 00 21 08 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T A3 01 00 00 56 FE 72 03 03 0A 6F 03 0A 67 01 +R 00 00 01 00 +T AE 01 00 00 61 00 DD 5E FE DD 56 FF CD +R 00 00 01 00 +T B7 01 00 00 00 00 00 00 19 DD 75 9A DD 74 9B +R 00 00 01 00 02 04 0B 00 +T C0 01 00 00 21 09 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T CB 01 00 00 E6 FE 77 DD 5E 9A DD 56 9B 13 13 +R 00 00 01 00 +T D6 01 00 00 13 21 02 00 39 01 3F 00 ED B0 21 +R 00 00 01 00 +T E1 01 00 00 42 00 DD 4E 9A DD 46 9B 09 EB 21 +R 00 00 01 00 +T EC 01 00 00 41 00 39 01 1F 00 ED B0 21 22 00 +R 00 00 01 00 +T F7 01 00 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T FF 01 00 00 00 00 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 02 04 0C 00 +T 07 02 00 00 +R 00 00 01 00 +T 07 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 07 00 diff --git a/src/nos/lib/ppp_lib/slhc_toss.rel b/src/nos/lib/ppp_lib/slhc_toss.rel new file mode 100644 index 00000000..c425fd00 --- /dev/null +++ b/src/nos/lib/ppp_lib/slhc_toss.rel @@ -0,0 +1,27 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20 flags 0 +S _slhc_toss Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 7B B2 20 05 +R 00 00 01 00 02 05 02 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 21 00 00 18 11 +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 21 09 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 17 00 00 00 F6 01 77 21 00 00 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/ppp_lib/slhc_uncompress.rel b/src/nos/lib/ppp_lib/slhc_uncompress.rel new file mode 100644 index 00000000..3aa0f60f --- /dev/null +++ b/src/nos/lib/ppp_lib/slhc_uncompress.rel @@ -0,0 +1,393 @@ +XL4 +H 2 areas 11 global symbols +S _htontcp Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _len_p Ref00000000 +S _slhc_toss Ref00000000 +S _htonip Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S _pull16 Ref00000000 +S _decode Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 443 flags 0 +S _slhc_uncompress Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F2 FF 79 B0 20 13 +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 21 2A 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 14 00 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 0D 00 +T 1A 00 00 00 40 04 00 00 +R 00 00 01 00 00 04 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 26 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 27 00 00 00 00 00 00 00 DD 6E 04 DD 66 05 5E +R 00 00 01 00 02 04 0D 00 +T 30 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 35 00 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 3B 00 00 00 03 00 A7 ED 42 30 13 +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 21 2A 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 4D 00 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 0D 00 +T 53 00 00 00 40 04 00 00 +R 00 00 01 00 00 04 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 5D 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0E 00 02 0A 01 00 +T 64 00 00 00 75 F2 DD 74 F3 7D E6 40 28 60 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 76 00 00 00 21 00 00 00 00 CD 00 00 00 00 7C +R 00 00 01 00 02 05 0E 00 02 0A 01 00 +T 7D 00 00 00 07 9F 4F 41 DD 75 F4 DD 74 F5 DD +R 00 00 01 00 +T 88 00 00 00 71 F6 DD 70 F7 CB 78 20 22 DD 6E +R 00 00 01 00 +T 93 00 00 00 F6 DD 66 F7 E5 DD 6E F4 DD 66 F5 +R 00 00 01 00 +T 9E 00 00 00 E5 21 05 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T A9 00 00 00 6E 01 00 00 61 CD 00 00 00 00 30 +R 00 00 01 00 02 0A 0A 00 +T B2 00 00 00 03 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 C3 25 04 00 00 +R 00 00 01 00 00 05 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 21 09 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T C1 00 00 00 E6 FE 77 21 08 00 09 DD 46 F4 70 +R 00 00 01 00 +T CC 00 00 00 18 22 +R 00 00 01 00 +T CE 00 00 00 +R 00 00 01 00 +T CE 00 00 00 21 09 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T D9 00 00 00 E6 01 28 13 +R 00 00 01 00 +T DD 00 00 00 +R 00 00 01 00 +T DD 00 00 00 21 2E 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T E8 00 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 0D 00 +T EE 00 00 00 40 04 00 00 +R 00 00 01 00 00 04 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 21 08 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T FB 00 00 00 16 00 01 61 00 CD 00 00 00 00 DD +R 00 00 01 00 02 0A 0C 00 +T 04 01 00 00 6E 02 DD 66 03 23 23 46 23 66 68 +R 00 00 01 00 +T 0F 01 00 00 19 DD 75 FA DD 74 FB 01 42 00 09 +R 00 00 01 00 +T 1A 01 00 00 DD 75 F8 DD 74 F9 DD 5E 04 DD 56 +R 00 00 01 00 +T 25 01 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 2B 01 00 00 CD 00 00 00 00 DD 75 F4 DD 74 F5 +R 00 00 01 00 02 05 01 00 +T 34 01 00 00 DD 71 F6 DD 70 F7 7D A4 A1 A0 3C +R 00 00 01 00 +T 3F 01 00 00 20 03 +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 C3 25 04 00 00 +R 00 00 01 00 00 05 01 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 21 0E 00 DD 4E F8 DD 46 F9 09 DD +R 00 00 01 00 +T 4F 01 00 00 5E F4 DD 56 F5 73 23 72 DD 7E F2 +R 00 00 01 00 +T 5A 01 00 00 E6 10 28 05 11 01 00 18 03 +R 00 00 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 11 00 00 +R 00 00 01 00 +T 66 01 00 00 +R 00 00 01 00 +T 66 01 00 00 21 1D 00 DD 4E F8 DD 46 F9 09 CB +R 00 00 01 00 +T 71 01 00 00 43 28 04 CB DE 18 02 +R 00 00 01 00 +T 78 01 00 00 +R 00 00 01 00 +T 78 01 00 00 CB 9E +R 00 00 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 DD 7E F2 E6 0F 4F DD 7E F3 E6 00 +R 00 00 01 00 +T 85 01 00 00 47 3E 0B A9 B0 20 5B +R 00 00 01 00 +T 8C 01 00 00 +R 00 00 01 00 +T 8C 01 00 00 21 0B 00 DD 4E FA DD 46 FB 09 56 +R 00 00 01 00 +T 97 01 00 00 23 66 6A DD 75 FE DD 74 FF 21 +R 00 00 01 00 +T A1 01 00 00 19 00 09 4E 06 00 21 28 00 09 4D +R 00 00 01 00 +T AC 01 00 00 44 21 0C 00 39 7E 91 77 23 7E 98 +R 00 00 01 00 +T B7 01 00 00 77 21 08 00 DD 4E F8 DD 46 F9 09 +R 00 00 01 00 +T C2 01 00 00 DD 5E FE DD 56 FF 01 00 00 CD +R 00 00 01 00 +T CC 01 00 00 00 00 00 00 21 04 00 DD 4E F8 DD +R 00 00 01 00 02 04 06 00 +T D5 01 00 00 46 F9 09 DD 5E FE DD 56 FF 01 +R 00 00 01 00 +T DF 01 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 07 06 00 +T E5 01 00 00 50 03 00 00 +R 00 00 01 00 00 04 01 00 +T E7 01 00 00 +R 00 00 01 00 +T E7 01 00 00 3E 0F A9 B0 20 33 21 04 00 DD 4E +R 00 00 01 00 +T F2 01 00 00 F8 DD 46 F9 09 E5 21 19 00 DD 4E +R 00 00 01 00 +T FD 01 00 00 FA DD 46 FB 09 5E 16 00 21 28 00 +R 00 00 01 00 +T 08 02 00 00 19 EB 21 0B 00 09 46 23 66 68 A7 +R 00 00 01 00 +T 13 02 00 00 ED 52 EB 01 00 00 E1 CD +R 00 00 01 00 +T 1B 02 00 00 00 00 00 00 C3 50 03 00 00 +R 00 00 01 00 02 04 06 00 00 09 01 00 +T 20 02 00 00 +R 00 00 01 00 +T 20 02 00 00 DD 7E F2 E6 01 28 4C +R 00 00 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 21 1D 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 32 02 00 00 F6 02 77 23 7E F6 00 77 DD 5E 04 +R 00 00 01 00 +T 3D 02 00 00 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T 43 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 4A 02 00 00 F4 DD 74 F5 DD 71 F6 DD 70 F7 7D +R 00 00 01 00 +T 55 02 00 00 A4 A1 A0 3C 20 03 +R 00 00 01 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 C3 25 04 00 00 +R 00 00 01 00 00 05 01 00 +T 5E 02 00 00 +R 00 00 01 00 +T 5E 02 00 00 21 10 00 DD 4E F8 DD 46 F9 09 DD +R 00 00 01 00 +T 69 02 00 00 4E F4 DD 46 F5 71 23 70 18 13 +R 00 00 01 00 +T 73 02 00 00 +R 00 00 01 00 +T 73 02 00 00 21 1D 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 7E 02 00 00 E6 FD 77 23 7E E6 FF 77 +R 00 00 01 00 +T 86 02 00 00 +R 00 00 01 00 +T 86 02 00 00 DD 7E F2 E6 02 28 39 +R 00 00 01 00 +T 8D 02 00 00 +R 00 00 01 00 +T 8D 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 95 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 9C 02 00 00 75 F4 DD 74 F5 DD 71 F6 DD 70 F7 +R 00 00 01 00 +T A7 02 00 00 7D A4 A1 A0 3C 20 03 +R 00 00 01 00 +T AE 02 00 00 +R 00 00 01 00 +T AE 02 00 00 C3 25 04 00 00 +R 00 00 01 00 00 05 01 00 +T B1 02 00 00 +R 00 00 01 00 +T B1 02 00 00 21 0C 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T BC 02 00 00 DD 86 F4 77 23 7E DD 8E F5 77 +R 00 00 01 00 +T C6 02 00 00 +R 00 00 01 00 +T C6 02 00 00 DD 7E F2 E6 04 28 3D +R 00 00 01 00 +T CD 02 00 00 +R 00 00 01 00 +T CD 02 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T D5 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T DC 02 00 00 75 F4 DD 74 F5 DD 71 F6 DD 70 F7 +R 00 00 01 00 +T E7 02 00 00 7D A4 A1 A0 3C 20 03 +R 00 00 01 00 +T EE 02 00 00 +R 00 00 01 00 +T EE 02 00 00 C3 25 04 00 00 +R 00 00 01 00 00 05 01 00 +T F1 02 00 00 +R 00 00 01 00 +T F1 02 00 00 21 08 00 DD 4E F8 DD 46 F9 09 DD +R 00 00 01 00 +T FC 02 00 00 4E F6 DD 46 F7 DD 5E F4 DD 56 F5 +R 00 00 01 00 +T 07 03 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 0A 03 00 00 +R 00 00 01 00 +T 0A 03 00 00 DD 7E F2 E6 08 28 3D +R 00 00 01 00 +T 11 03 00 00 +R 00 00 01 00 +T 11 03 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 19 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 20 03 00 00 75 F4 DD 74 F5 DD 71 F6 DD 70 F7 +R 00 00 01 00 +T 2B 03 00 00 7D A4 A1 A0 3C 20 03 +R 00 00 01 00 +T 32 03 00 00 +R 00 00 01 00 +T 32 03 00 00 C3 25 04 00 00 +R 00 00 01 00 00 05 01 00 +T 35 03 00 00 +R 00 00 01 00 +T 35 03 00 00 21 04 00 DD 4E F8 DD 46 F9 09 DD +R 00 00 01 00 +T 40 03 00 00 4E F6 DD 46 F7 DD 5E F4 DD 56 F5 +R 00 00 01 00 +T 4B 03 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 4E 03 00 00 +R 00 00 01 00 +T 4E 03 00 00 18 00 +R 00 00 01 00 +T 50 03 00 00 +R 00 00 01 00 +T 50 03 00 00 DD 7E F2 E6 20 28 3B +R 00 00 01 00 +T 57 03 00 00 +R 00 00 01 00 +T 57 03 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T 5F 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T 66 03 00 00 75 F4 DD 74 F5 DD 71 F6 DD 70 F7 +R 00 00 01 00 +T 71 03 00 00 7D A4 A1 A0 3C 20 03 +R 00 00 01 00 +T 78 03 00 00 +R 00 00 01 00 +T 78 03 00 00 C3 25 04 00 00 +R 00 00 01 00 00 05 01 00 +T 7B 03 00 00 +R 00 00 01 00 +T 7B 03 00 00 21 0D 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 86 03 00 00 DD 86 F4 77 23 7E DD 8E F5 77 18 +R 00 00 01 00 +T 91 03 00 00 0F +R 00 00 01 00 +T 92 03 00 00 +R 00 00 01 00 +T 92 03 00 00 21 0D 00 DD 4E FA DD 46 FB 09 34 +R 00 00 01 00 +T 9D 03 00 00 23 20 01 34 +R 00 00 01 00 +T A1 03 00 00 +R 00 00 01 00 +T A1 03 00 00 +R 00 00 01 00 +T A1 03 00 00 DD 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T AB 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T B0 03 00 00 00 00 00 00 E5 21 19 00 DD 4E FA +R 00 00 01 00 02 04 01 00 +T B9 03 00 00 DD 46 FB 09 5E 16 00 E1 19 11 +R 00 00 01 00 +T C3 03 00 00 28 00 19 DD 75 FC DD 74 FD 21 +R 00 00 01 00 +T CD 03 00 00 0B 00 09 DD 5E FC DD 56 FD 73 23 +R 00 00 01 00 +T D8 03 00 00 72 21 00 00 E5 21 00 00 E5 21 +R 00 00 01 00 +T E2 03 00 00 00 00 E5 21 00 00 E5 DD 4E 04 DD +R 00 00 01 00 +T ED 03 00 00 46 05 DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T F6 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T FB 03 00 00 00 00 00 00 E1 E1 E1 E1 21 00 00 +R 00 00 01 00 02 04 01 00 +T 04 04 00 00 E5 DD 4E 04 DD 46 05 DD 5E FA DD +R 00 00 01 00 +T 0F 04 00 00 56 FB 13 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 17 04 00 00 00 00 00 00 CD 00 00 00 00 E1 DD +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 1E 04 00 00 6E FC DD 66 FD 18 1B +R 00 00 01 00 +T 25 04 00 00 +R 00 00 01 00 +T 25 04 00 00 21 2A 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 30 04 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 0D 00 +T 39 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 3E 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 40 04 00 00 +R 00 00 01 00 +T 40 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/ppp_lib/slhcdump.rel b/src/nos/lib/ppp_lib/slhcdump.rel new file mode 100644 index 00000000..47e5632b --- /dev/null +++ b/src/nos/lib/ppp_lib/slhcdump.rel @@ -0,0 +1,409 @@ +XL4 +H 2 areas 21 global symbols +S ___005e_5946__20_20_20connection Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0016_c0f0__09changes_3a_200x_ Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S _copy_p Ref00000000 +S ___001f_ad18__09increment_20ID_0 Ref00000000 +S _len_p Ref00000000 +S ___001c_7710__09delta_20SEQ_20im Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0018_a28a__09connection_20ID_ Ref00000000 +S __fprintf Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___0571_2d5d_serial_20line_20IP_ Ref00000000 +S ___001e_f05a__09delta_20WINDOW_3 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S ___0572_f33e_serial_20line_20VJ_ Ref00000000 +S ___005d_9f3a__20_20_20TCP_20chec Ref00000000 +S _get16 Ref00000000 +S ___005c_ad66__20_20_20PUSH Ref00000000 +S ___001a_8077__09delta_20ACK_3a_2 Ref00000000 +S ___0019_cf72__09delta_20ACK_20an Ref00000000 +S ___0015_e0e0__09Urgent_20pointer Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___001b_4a2b__09delta_20ID_3a_20 Ref00000000 +S ___0573_6f7f_serial_20line_20VJ_ Ref00000000 +S _ip_dump Ref00000000 +S _free_p Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___001d_a966__09delta_20SEQ_3a_2 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 418 flags 0 +S _vjcomp_dump Def0000005A +S _sl_dump Def00000296 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 01 00 E5 +R 00 00 01 00 02 05 17 00 +T 09 00 00 00 21 02 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 14 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0F 00 02 0B 0F 00 +T 1A 00 00 00 CD 00 00 00 00 F1 DD 7E FE B7 20 +R 00 00 01 00 02 05 01 00 +T 23 00 00 00 1B +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 21 02 00 E5 21 02 00 39 4D 44 DD +R 00 00 01 00 +T 2F 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T 37 00 00 00 00 00 00 00 CD 00 00 00 00 F1 18 +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T 3E 00 00 00 0A +R 00 00 01 00 +T 3F 00 00 00 +R 00 00 01 00 +T 3F 00 00 00 DD 46 FE DD 70 FF DD 36 FE 00 +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T 51 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 12 00 02 0A 01 00 +T 58 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0B 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 CD 00 00 00 00 FC FF 79 B0 28 0B +R 00 00 01 00 02 05 17 00 +T 63 00 00 00 DD 6E 04 DD 66 05 7E 23 B6 20 03 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 C3 93 02 00 00 +R 00 00 01 00 00 05 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1C 00 +T 79 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 1C 00 02 0A 01 00 +T 80 00 00 00 75 FC 26 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 02 00 +T 88 00 00 00 21 00 00 00 00 E5 DD 6E 02 DD 66 +R 00 00 01 00 02 05 02 00 +T 91 00 00 00 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T 96 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 9D 00 00 00 F1 F1 DD 7E FC E6 40 28 39 +R 00 00 01 00 +T A6 00 00 00 +R 00 00 01 00 +T A6 00 00 00 21 01 00 E5 21 03 00 39 4D 44 DD +R 00 00 01 00 +T B1 00 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T B9 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T C0 00 00 00 4E FD 06 00 C5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 00 00 +T C8 00 00 00 21 00 00 00 00 E5 DD 6E 02 DD 66 +R 00 00 01 00 02 05 00 00 +T D1 00 00 00 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T D6 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T DD 00 00 00 F1 F1 +R 00 00 01 00 +T DF 00 00 00 +R 00 00 01 00 +T DF 00 00 00 21 02 00 E5 21 03 00 39 4D 44 DD +R 00 00 01 00 +T EA 00 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0F 00 +T F2 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 0F 00 02 09 01 00 +T F9 00 00 00 01 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 12 00 +T 01 01 00 00 00 00 00 00 CD 00 00 00 00 E5 0E +R 00 00 01 00 02 04 12 00 02 09 01 00 +T 08 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 11 00 02 0A 11 00 +T 0E 01 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 16 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 1B 01 00 00 00 00 00 00 F1 F1 F1 F1 DD 7E FC +R 00 00 01 00 02 04 01 00 +T 24 01 00 00 E6 10 28 19 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 13 00 02 0B 13 00 +T 2E 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 37 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 3C 01 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 03 00 02 0B 03 00 +T 47 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 50 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 55 01 00 00 00 00 00 00 F1 F1 F1 DD 7E FC E6 +R 00 00 01 00 02 04 01 00 +T 5E 01 00 00 0F FE 0B 20 1C +R 00 00 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 15 00 02 0B 15 00 +T 69 01 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 72 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 77 01 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 01 00 +T 7D 01 00 00 4D 02 00 00 +R 00 00 01 00 00 04 01 00 +T 7F 01 00 00 +R 00 00 01 00 +T 7F 01 00 00 FE 0F 20 1C 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 07 00 +T 87 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 07 00 +T 90 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 96 01 00 00 CD 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 05 01 00 +T 9D 01 00 00 4D 02 00 00 +R 00 00 01 00 00 04 01 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 DD 7E FC E6 01 28 24 +R 00 00 01 00 +T A6 01 00 00 +R 00 00 01 00 +T A6 01 00 00 DD 5E 04 DD 56 05 CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T AF 01 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 16 00 +T B4 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 16 00 +T BD 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T C3 01 00 00 CD 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 05 01 00 +T CA 01 00 00 +R 00 00 01 00 +T CA 01 00 00 DD 7E FC E6 02 28 24 +R 00 00 01 00 +T D1 01 00 00 +R 00 00 01 00 +T D1 01 00 00 DD 5E 04 DD 56 05 CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T DA 01 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 0D 00 +T DF 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 0D 00 +T E8 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T EE 01 00 00 CD 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 05 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 DD 7E FC E6 04 28 24 +R 00 00 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 DD 5E 04 DD 56 05 CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 05 02 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 14 00 +T 0A 02 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 14 00 +T 13 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 19 02 00 00 CD 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 05 01 00 +T 20 02 00 00 +R 00 00 01 00 +T 20 02 00 00 DD 7E FC E6 08 28 24 +R 00 00 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 DD 5E 04 DD 56 05 CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 30 02 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 1E 00 +T 35 02 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 1E 00 +T 3E 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 44 02 00 00 CD 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 05 01 00 +T 4B 02 00 00 +R 00 00 01 00 +T 4B 02 00 00 18 00 +R 00 00 01 00 +T 4D 02 00 00 +R 00 00 01 00 +T 4D 02 00 00 DD 7E FC E6 20 28 26 +R 00 00 01 00 +T 54 02 00 00 +R 00 00 01 00 +T 54 02 00 00 DD 5E 04 DD 56 05 CD 00 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 5D 02 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 18 00 +T 62 02 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 18 00 +T 6B 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 71 02 00 00 CD 00 00 00 00 F1 F1 F1 F1 18 19 +R 00 00 01 00 02 05 01 00 +T 7A 02 00 00 +R 00 00 01 00 +T 7A 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T 80 02 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 89 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 8E 02 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 93 02 00 00 +R 00 00 01 00 +T 93 02 00 00 +R 00 00 01 00 +T 93 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 96 02 00 00 +R 00 00 01 00 +T 96 02 00 00 CD 00 00 00 00 F8 FF 0A 6F 03 0A +R 00 00 01 00 02 05 17 00 +T 9F 02 00 00 67 DD 75 F8 DD 74 F9 01 0A 00 09 +R 00 00 01 00 +T AA 02 00 00 7E 23 66 6F 46 DD 70 FC 78 E6 80 +R 00 00 01 00 +T B5 02 00 00 28 48 +R 00 00 01 00 +T B7 02 00 00 +R 00 00 01 00 +T B7 02 00 00 DD 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T C1 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T C6 02 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 01 00 2B 0A 10 00 +T CC 02 00 00 21 00 00 00 00 E5 DD 6E 02 DD 66 +R 00 00 01 00 02 05 10 00 +T D5 02 00 00 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T DA 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T E1 02 00 00 F1 F1 21 00 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 +T EC 02 00 00 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T F4 02 00 00 5A 00 00 00 21 5A 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T F9 02 00 00 00 00 00 00 E1 C3 15 04 00 00 +R 00 00 01 00 02 04 01 00 00 0A 01 00 +T FF 02 00 00 +R 00 00 01 00 +T FF 02 00 00 DD 7E FC FE 70 DA D0 03 00 00 +R 00 00 01 00 00 0A 01 00 +T 07 03 00 00 +R 00 00 01 00 +T 07 03 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 0F 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 16 03 00 00 75 FD DD 74 FE E5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 19 00 +T 1E 03 00 00 C5 21 00 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 02 06 19 00 +T 27 03 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0A 00 +T 2D 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 34 03 00 00 F1 F1 DD 4E FD DD 46 FE DD 5E F8 +R 00 00 01 00 +T 3F 03 00 00 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 04 00 +T 45 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 4C 03 00 00 FA DD 74 FB 7D B4 20 03 +R 00 00 01 00 +T 54 03 00 00 +R 00 00 01 00 +T 54 03 00 00 C3 15 04 00 00 +R 00 00 01 00 00 05 01 00 +T 57 03 00 00 +R 00 00 01 00 +T 57 03 00 00 21 0A 00 DD 4E FA DD 46 FB 09 56 +R 00 00 01 00 +T 62 03 00 00 23 66 6A 11 09 00 19 5E 16 00 D5 +R 00 00 01 00 +T 6D 03 00 00 1E 00 00 00 00 D5 21 00 00 00 00 +R 00 00 01 00 2B 05 09 00 02 0B 09 00 +T 73 03 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 7C 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 81 03 00 00 00 00 00 00 F1 F1 F1 F1 21 0A 00 +R 00 00 01 00 02 04 01 00 +T 8A 03 00 00 09 7E 23 66 6F 7E E6 4F 77 21 +R 00 00 01 00 +T 94 03 00 00 0A 00 DD 4E FA DD 46 FB 09 56 23 +R 00 00 01 00 +T 9F 03 00 00 66 6A 11 09 00 19 36 06 21 01 00 +R 00 00 01 00 +T AA 03 00 00 E5 21 04 00 39 4D 44 DD 5E 02 DD +R 00 00 01 00 +T B5 03 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1A 00 +T BA 03 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 1A 00 02 09 01 00 +T C1 03 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1B 00 +T C9 03 00 00 00 00 00 00 CD 00 00 00 00 18 45 +R 00 00 01 00 02 04 1B 00 02 09 01 00 +T D0 03 00 00 +R 00 00 01 00 +T D0 03 00 00 DD 6E 04 DD 66 05 5E 23 56 3E +R 00 00 01 00 +T DA 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T DF 03 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 01 00 2B 0A 0C 00 +T E5 03 00 00 21 00 00 00 00 E5 DD 6E 02 DD 66 +R 00 00 01 00 02 05 0C 00 +T EE 03 00 00 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T F3 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T FA 03 00 00 F1 F1 21 01 00 E5 DD 4E 04 DD 46 +R 00 00 01 00 +T 05 04 00 00 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 0D 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T 12 04 00 00 00 00 00 00 E1 +R 00 00 01 00 02 04 01 00 +T 15 04 00 00 +R 00 00 01 00 +T 15 04 00 00 +R 00 00 01 00 +T 15 04 00 00 +R 00 00 01 00 +T 15 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 diff --git a/src/nos/lib/ppp_lib/slip.rel b/src/nos/lib/ppp_lib/slip.rel new file mode 100644 index 00000000..ed3f3eb7 --- /dev/null +++ b/src/nos/lib/ppp_lib/slip.rel @@ -0,0 +1,799 @@ +XL4 +H 4 areas 2B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _secclock Ref00000000 +S _asy_ioctl Ref00000000 +S _len_p Ref00000000 +S _if_name Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alloc_mbuf Ref00000000 +S _net_route Ref00000000 +S _asy_send Ref00000000 +S _slhc_uncompress Ref00000000 +S _slhc_remember Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _raw_dump Ref00000000 +S _kwait Ref00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___03b4_447c_Too_20many_20slip_2 Ref00000000 +S _slhc_free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _get_asy Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S __printf Ref00000000 +S _slhc_i_status Ref00000000 +S _slhc_compress Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dump Ref00000000 +S _slhc_o_status Ref00000000 +S _slhc_init Ref00000000 +S _newproc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 885 flags 0 +S _slip_send Def000001CC +S _slip_rx Def00000654 +S _slip_init Def00000000 +S _vjslip_send Def0000020B +S _slip_raw Def000002A0 +S _slip_free Def00000174 +S _slip_status Def00000814 +A CSTR size 4 flags 0 +A UDATA0 size 96 flags 0 +S _Slip Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 14 00 +T 09 00 00 00 DD 77 FB +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 01 06 80 DD 6E FA DD 66 FB 3E 80 +R 00 00 01 00 +T 17 00 00 00 AC 67 ED 42 30 27 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 01 19 00 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 27 00 00 00 00 00 00 00 21 00 00 00 00 19 DD +R 00 00 01 00 02 04 15 00 00 09 03 00 +T 2E 00 00 00 75 FC DD 74 FD 7E 23 B6 20 02 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 18 0A +R 00 00 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 18 C8 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 01 06 80 DD 6E FA DD 66 FB 3E 80 +R 00 00 01 00 +T 4F 00 00 00 AC 67 ED 42 38 17 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 12 00 02 0B 12 00 +T 5B 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1A 00 02 0B 1A 00 +T 61 00 00 00 CD 00 00 00 00 F1 F1 21 FF FF C3 +R 00 00 01 00 02 05 00 00 +T 6A 00 00 00 71 01 00 00 +R 00 00 01 00 00 04 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 21 2E 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 77 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 02 00 8B 0A 02 00 +T 7C 00 00 00 36 00 00 00 00 21 45 00 09 36 +R 00 00 01 00 2B 05 02 00 +T 83 00 00 00 A0 02 00 00 23 36 A0 02 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T 88 00 00 00 36 A0 02 00 00 21 48 00 09 36 +R 00 00 01 00 29 05 01 00 +T 8F 00 00 00 14 08 00 00 23 36 14 08 00 00 23 +R 00 00 01 00 09 04 01 00 89 0A 01 00 +T 94 00 00 00 36 14 08 00 00 21 3B 00 09 DD 5E +R 00 00 01 00 29 05 01 00 +T 9C 00 00 00 FA DD 56 FB 73 23 72 DD 6E FC DD +R 00 00 01 00 +T A7 00 00 00 66 FD 71 23 70 21 11 00 DD 5E FC +R 00 00 01 00 +T B2 00 00 00 DD 56 FD 19 36 00 00 00 00 23 36 +R 00 00 01 00 0B 09 08 00 +T BA 00 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 08 00 2B 0A 08 00 +T BF 00 00 00 14 00 19 36 00 00 00 00 23 36 +R 00 00 01 00 0B 08 16 00 +T C6 00 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 16 00 2B 0A 16 00 +T CB 00 00 00 0F 00 19 36 06 23 36 00 21 3F 00 +R 00 00 01 00 +T D6 00 00 00 09 4E 23 46 23 7E 69 60 0E +R 00 00 01 00 +T DF 00 00 00 0B 02 00 00 11 0B 02 00 00 B9 20 +R 00 00 01 00 29 04 01 00 00 09 01 00 +T E5 00 00 00 23 ED 52 20 1F +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 21 17 00 DD 4E FC DD 46 FD 09 E5 +R 00 00 01 00 +T F5 00 00 00 01 10 00 11 10 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 21 00 +T FD 00 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 21 00 02 0A 00 00 +T 04 01 00 00 44 E1 71 23 70 +R 00 00 01 00 +T 09 01 00 00 +R 00 00 01 00 +T 09 01 00 00 21 18 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 14 01 00 00 11 00 00 D5 11 00 00 D5 11 00 00 +R 00 00 01 00 +T 1F 01 00 00 D5 DD 5E FA DD 56 FB D5 1E +R 00 00 01 00 +T 28 01 00 00 54 06 00 00 D5 11 54 06 00 00 D5 +R 00 00 01 00 29 04 01 00 00 0A 01 00 +T 2E 01 00 00 01 00 02 C5 01 00 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T 37 01 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T 3E 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 45 01 00 00 FE DD 74 FF EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 22 00 +T 4D 01 00 00 00 00 00 00 C1 CD 00 00 00 00 EB +R 00 00 01 00 02 04 22 00 02 0A 00 00 +T 54 01 00 00 21 0C 00 39 F9 EB 4D 44 E1 71 23 +R 00 00 01 00 +T 5F 01 00 00 70 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 67 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 6C 01 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 00 00 +T 71 01 00 00 +R 00 00 01 00 +T 71 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 74 01 00 00 +R 00 00 01 00 +T 74 01 00 00 CD 00 00 00 00 FE FF 21 3B 00 DD +R 00 00 01 00 02 05 14 00 +T 7D 01 00 00 4E 02 DD 46 03 09 4E 23 46 11 +R 00 00 01 00 +T 87 01 00 00 19 00 CD 00 00 00 00 21 +R 00 00 01 00 02 07 15 00 +T 8D 01 00 00 00 00 00 00 19 DD 75 FE DD 74 FF +R 00 00 01 00 00 04 03 00 +T 96 01 00 00 01 17 00 09 7E 23 B6 28 1D +R 00 00 01 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 21 17 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T AA 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 13 00 +T AF 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T B5 01 00 00 17 00 09 AF 77 23 77 +R 00 00 01 00 +T BC 01 00 00 +R 00 00 01 00 +T BC 01 00 00 DD 6E FE DD 66 FF AF 77 23 77 21 +R 00 00 01 00 +T C7 01 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 05 00 +T CC 01 00 00 +R 00 00 01 00 +T CC 01 00 00 CD 00 00 00 00 79 B0 20 13 +R 00 00 01 00 02 05 11 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 19 00 +T DB 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 19 00 02 0A 00 00 +T E2 01 00 00 FF FF 18 22 +R 00 00 01 00 +T E6 01 00 00 +R 00 00 01 00 +T E6 01 00 00 DD 4E 02 DD 46 03 C5 DD 5E 04 DD +R 00 00 01 00 +T F1 01 00 00 56 05 21 45 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T FC 01 00 00 09 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 06 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 08 02 00 00 +R 00 00 01 00 +T 08 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 0B 02 00 00 +R 00 00 01 00 +T 0B 02 00 00 CD 00 00 00 00 FC FF 79 B0 20 13 +R 00 00 01 00 02 05 14 00 +T 14 02 00 00 +R 00 00 01 00 +T 14 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 19 00 +T 1C 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 19 00 02 0A 00 00 +T 23 02 00 00 FF FF 18 76 +R 00 00 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 21 3B 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 32 02 00 00 23 56 01 19 00 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 15 00 +T 3B 02 00 00 00 00 00 00 19 DD 75 FC DD 74 FD +R 00 00 01 00 00 04 03 00 +T 44 02 00 00 01 01 00 C5 DD 4E 02 DD 46 03 11 +R 00 00 01 00 +T 4F 02 00 00 17 00 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1C 00 +T 57 02 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 1C 00 02 0A 00 00 +T 5E 02 00 00 DD 75 FE DD 74 FF DD 6E 02 DD 66 +R 00 00 01 00 +T 69 02 00 00 03 46 23 66 68 01 0A 00 09 7E 23 +R 00 00 01 00 +T 74 02 00 00 66 6F 7E DD B6 FE 77 DD 4E 02 DD +R 00 00 01 00 +T 7F 02 00 00 46 03 C5 DD 5E 04 DD 56 05 21 +R 00 00 01 00 +T 89 02 00 00 45 00 DD 4E 04 DD 46 05 09 4E 23 +R 00 00 01 00 +T 94 02 00 00 46 23 7E 69 60 C1 CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 9D 02 00 00 +R 00 00 01 00 +T 9D 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T A0 02 00 00 +R 00 00 01 00 +T A0 02 00 00 CD 00 00 00 00 FE FF 69 60 4E 23 +R 00 00 01 00 02 05 14 00 +T A9 02 00 00 46 C5 01 01 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T B4 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1F 00 02 0A 1F 00 +T BA 02 00 00 00 00 00 00 E1 21 55 00 DD 4E 02 +R 00 00 01 00 02 04 00 00 +T C3 02 00 00 DD 46 03 09 CD 00 00 00 00 21 +R 00 00 01 00 02 09 17 00 +T CB 02 00 00 61 00 DD 4E 02 DD 46 03 09 E5 3E +R 00 00 01 00 +T D6 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T DB 02 00 00 00 00 00 00 EB E1 73 23 72 23 71 +R 00 00 01 00 02 04 00 00 +T E4 02 00 00 23 70 DD 5E 04 DD 56 05 CD +R 00 00 01 00 +T ED 02 00 00 67 03 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 00 04 01 00 +T F6 02 00 00 B4 20 05 +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 21 FF FF 18 66 +R 00 00 01 00 +T FE 02 00 00 +R 00 00 01 00 +T FE 02 00 00 21 12 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 09 03 00 00 E6 00 47 23 7E E6 20 B0 28 19 +R 00 00 01 00 +T 13 03 00 00 +R 00 00 01 00 +T 13 03 00 00 DD 6E FE DD 66 FF E5 01 FF FF DD +R 00 00 01 00 +T 1E 03 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T 26 03 00 00 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 2C 03 00 00 +R 00 00 01 00 +T 2C 03 00 00 21 00 00 39 4D 44 C5 21 2C 00 DD +R 00 00 01 00 +T 37 03 00 00 5E 02 DD 56 03 19 5E 23 56 D5 21 +R 00 00 01 00 +T 42 03 00 00 3B 00 DD 4E 02 DD 46 03 09 4E 23 +R 00 00 01 00 +T 4D 03 00 00 46 11 19 00 CD 00 00 00 00 21 +R 00 00 01 00 02 09 15 00 +T 55 03 00 00 11 00 00 00 19 4E 23 46 23 7E 69 +R 00 00 01 00 00 04 03 00 +T 5E 03 00 00 60 D1 C1 CD 00 00 00 00 +R 00 00 01 00 02 08 00 00 +T 64 03 00 00 +R 00 00 01 00 +T 64 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 67 03 00 00 +R 00 00 01 00 +T 67 03 00 00 CD 00 00 00 00 FA FF DD 6E 02 DD +R 00 00 01 00 02 05 14 00 +T 70 03 00 00 66 03 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 78 03 00 00 00 00 00 00 CD 00 00 00 00 29 EB +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 7F 03 00 00 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 84 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T 8B 03 00 00 FA DD 74 FB 7D B4 20 14 +R 00 00 01 00 +T 93 03 00 00 +R 00 00 01 00 +T 93 03 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 19 00 +T 9B 03 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 19 00 02 0A 00 00 +T A2 03 00 00 00 00 C3 7B 04 00 00 +R 00 00 01 00 00 07 01 00 +T A7 03 00 00 +R 00 00 01 00 +T A7 03 00 00 21 0A 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T B2 03 00 00 23 66 68 DD 75 FC DD 74 FD 23 DD +R 00 00 01 00 +T BD 03 00 00 75 FC DD 74 FD 2B 36 C0 +R 00 00 01 00 +T C5 03 00 00 +R 00 00 01 00 +T C5 03 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T CD 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 1D 00 02 0A 00 00 +T D4 03 00 00 75 FE DD 74 FF 7D A4 3C 28 6B +R 00 00 01 00 +T DE 03 00 00 +R 00 00 01 00 +T DE 03 00 00 DD 4E FE DD 46 FF 3E DB A9 B0 20 +R 00 00 01 00 +T E9 03 00 00 22 +R 00 00 01 00 +T EA 03 00 00 +R 00 00 01 00 +T EA 03 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T F5 03 00 00 74 FD 2B 36 DB DD 6E FC DD 66 FD +R 00 00 01 00 +T 00 04 00 00 23 DD 75 FC DD 74 FD 2B 36 DD 18 +R 00 00 01 00 +T 0B 04 00 00 3A +R 00 00 01 00 +T 0C 04 00 00 +R 00 00 01 00 +T 0C 04 00 00 3E C0 A9 B0 20 22 DD 6E FC DD 66 +R 00 00 01 00 +T 17 04 00 00 FD 23 DD 75 FC DD 74 FD 2B 36 DB +R 00 00 01 00 +T 22 04 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 2D 04 00 00 74 FD 2B 36 DC 18 12 +R 00 00 01 00 +T 34 04 00 00 +R 00 00 01 00 +T 34 04 00 00 DD 46 FE DD 6E FC DD 66 FD 23 DD +R 00 00 01 00 +T 3F 04 00 00 75 FC DD 74 FD 2B 70 +R 00 00 01 00 +T 46 04 00 00 +R 00 00 01 00 +T 46 04 00 00 C3 C5 03 00 00 +R 00 00 01 00 00 05 01 00 +T 49 04 00 00 +R 00 00 01 00 +T 49 04 00 00 DD 6E FC DD 66 FD 23 DD 75 FC DD +R 00 00 01 00 +T 54 04 00 00 74 FD 2B 36 C0 21 0C 00 DD 4E FA +R 00 00 01 00 +T 5F 04 00 00 DD 46 FB 09 E5 21 0A 00 09 5E 23 +R 00 00 01 00 +T 6A 04 00 00 56 DD 6E FC DD 66 FD A7 ED 52 EB +R 00 00 01 00 +T 75 04 00 00 E1 73 23 72 69 60 +R 00 00 01 00 +T 7B 04 00 00 +R 00 00 01 00 +T 7B 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T 7E 04 00 00 +R 00 00 01 00 +T 7E 04 00 00 CD 00 00 00 00 FE FF 79 FE C0 20 +R 00 00 01 00 02 05 14 00 +T 87 04 00 00 56 +R 00 00 01 00 +T 88 04 00 00 +R 00 00 01 00 +T 88 04 00 00 DD 6E 02 DD 66 03 23 23 23 46 23 +R 00 00 01 00 +T 93 04 00 00 66 68 DD 75 FE DD 74 FF DD 6E 02 +R 00 00 01 00 +T 9E 04 00 00 DD 66 03 23 23 23 AF 77 23 77 DD +R 00 00 01 00 +T A9 04 00 00 6E 02 DD 66 03 23 23 7E B7 28 15 +R 00 00 01 00 +T B4 04 00 00 +R 00 00 01 00 +T B4 04 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 19 00 +T BC 04 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 19 00 02 0A 00 00 +T C3 04 00 00 DD 77 FE DD 77 FF +R 00 00 01 00 +T C9 04 00 00 +R 00 00 01 00 +T C9 04 00 00 DD 6E 02 DD 66 03 23 23 7E E6 FE +R 00 00 01 00 +T D4 04 00 00 77 DD 6E FE DD 66 FF C3 +R 00 00 01 00 +T DC 04 00 00 51 06 00 00 +R 00 00 01 00 00 04 01 00 +T DE 04 00 00 +R 00 00 01 00 +T DE 04 00 00 FE DB 20 12 DD 6E 02 DD 66 03 23 +R 00 00 01 00 +T E9 04 00 00 23 7E F6 01 77 21 00 00 C3 +R 00 00 01 00 +T F2 04 00 00 51 06 00 00 +R 00 00 01 00 00 04 01 00 +T F4 04 00 00 +R 00 00 01 00 +T F4 04 00 00 DD 6E 02 DD 66 03 23 23 7E E6 01 +R 00 00 01 00 +T FF 04 00 00 28 34 +R 00 00 01 00 +T 01 05 00 00 +R 00 00 01 00 +T 01 05 00 00 DD 6E 02 DD 66 03 23 23 7E E6 FE +R 00 00 01 00 +T 0C 05 00 00 77 DD 7E 04 FE DD 20 06 +R 00 00 01 00 +T 14 05 00 00 +R 00 00 01 00 +T 14 05 00 00 DD 36 04 DB 18 1B +R 00 00 01 00 +T 1A 05 00 00 +R 00 00 01 00 +T 1A 05 00 00 FE DC 20 06 DD 36 04 C0 18 11 +R 00 00 01 00 +T 24 05 00 00 +R 00 00 01 00 +T 24 05 00 00 21 0D 00 DD 4E 02 DD 46 03 09 34 +R 00 00 01 00 +T 2F 05 00 00 23 20 01 34 +R 00 00 01 00 +T 33 05 00 00 +R 00 00 01 00 +T 33 05 00 00 18 00 +R 00 00 01 00 +T 35 05 00 00 +R 00 00 01 00 +T 35 05 00 00 +R 00 00 01 00 +T 35 05 00 00 DD 6E 02 DD 66 03 23 23 23 7E 23 +R 00 00 01 00 +T 40 05 00 00 B6 20 51 +R 00 00 01 00 +T 43 05 00 00 +R 00 00 01 00 +T 43 05 00 00 21 05 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 4E 05 00 00 69 60 23 23 23 E5 11 80 00 3E +R 00 00 01 00 +T 58 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 5D 05 00 00 00 00 00 00 4D 44 E1 71 23 70 E1 +R 00 00 01 00 02 04 00 00 +T 66 05 00 00 71 23 70 79 B0 20 06 +R 00 00 01 00 +T 6D 05 00 00 +R 00 00 01 00 +T 6D 05 00 00 21 00 00 C3 51 06 00 00 +R 00 00 01 00 00 08 01 00 +T 73 05 00 00 +R 00 00 01 00 +T 73 05 00 00 21 07 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 7E 05 00 00 03 03 03 0A 6F 03 0A 67 01 0A 00 +R 00 00 01 00 +T 89 05 00 00 09 4E 23 46 E1 71 23 70 C3 +R 00 00 01 00 +T 92 05 00 00 26 06 00 00 +R 00 00 01 00 00 04 01 00 +T 94 05 00 00 +R 00 00 01 00 +T 94 05 00 00 21 05 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 9F 05 00 00 23 66 68 01 0C 00 09 3E 80 AE 23 +R 00 00 01 00 +T AA 05 00 00 B6 20 79 +R 00 00 01 00 +T AD 05 00 00 +R 00 00 01 00 +T AD 05 00 00 21 05 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T B8 05 00 00 23 66 6F E5 11 80 00 3E +R 00 00 01 00 +T C0 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T C5 05 00 00 00 00 00 00 4D 44 E1 71 23 70 79 +R 00 00 01 00 02 04 00 00 +T CE 05 00 00 B0 20 23 +R 00 00 01 00 +T D1 05 00 00 +R 00 00 01 00 +T D1 05 00 00 DD 5E 02 DD 56 03 13 13 13 3E +R 00 00 01 00 +T DB 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 19 00 02 09 19 00 +T E0 05 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 00 00 +T E9 05 00 00 23 23 AF 77 23 77 21 00 00 18 5D +R 00 00 01 00 +T F4 05 00 00 +R 00 00 01 00 +T F4 05 00 00 21 05 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T FF 05 00 00 21 05 00 09 7E 23 66 6F 5E 23 56 +R 00 00 01 00 +T 0A 06 00 00 E1 73 23 72 21 07 00 09 E5 21 +R 00 00 01 00 +T 14 06 00 00 05 00 09 46 23 66 68 01 0A 00 09 +R 00 00 01 00 +T 1F 06 00 00 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 26 06 00 00 +R 00 00 01 00 +T 26 06 00 00 +R 00 00 01 00 +T 26 06 00 00 21 07 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 31 06 00 00 23 56 13 72 2B 73 1B EB DD 56 04 +R 00 00 01 00 +T 3C 06 00 00 72 21 05 00 09 46 23 66 68 01 +R 00 00 01 00 +T 46 06 00 00 0C 00 09 34 23 20 01 34 +R 00 00 01 00 +T 4E 06 00 00 +R 00 00 01 00 +T 4E 06 00 00 21 00 00 +R 00 00 01 00 +T 51 06 00 00 +R 00 00 01 00 +T 51 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T 54 06 00 00 +R 00 00 01 00 +T 54 06 00 00 CD 00 00 00 00 F8 FF 11 19 00 DD +R 00 00 01 00 02 05 14 00 +T 5D 06 00 00 4E 02 DD 46 03 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 15 00 +T 66 06 00 00 00 00 00 00 19 DD 75 FC DD 74 FD +R 00 00 01 00 00 04 03 00 +T 6F 06 00 00 46 23 66 68 01 2C 00 09 46 23 66 +R 00 00 01 00 +T 7A 06 00 00 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T 81 06 00 00 +R 00 00 01 00 +T 81 06 00 00 DD 5E FE DD 56 FF 21 14 00 DD 4E +R 00 00 01 00 +T 8C 06 00 00 FC DD 46 FD 09 4E 23 46 23 7E 69 +R 00 00 01 00 +T 97 06 00 00 60 CD 00 00 00 00 DD 75 F8 DD 74 +R 00 00 01 00 02 06 00 00 +T A0 06 00 00 F9 7D A4 3C CA E4 07 00 00 +R 00 00 01 00 00 09 01 00 +T A7 06 00 00 +R 00 00 01 00 +T A7 06 00 00 DD 4E F8 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T B1 06 00 00 7E 04 00 00 DD 75 FA DD 74 FB 7D +R 00 00 01 00 00 04 01 00 +T BA 06 00 00 B4 20 02 +R 00 00 01 00 +T BD 06 00 00 +R 00 00 01 00 +T BD 06 00 00 18 C2 +R 00 00 01 00 +T BF 06 00 00 +R 00 00 01 00 +T BF 06 00 00 DD 6E FC DD 66 FD 46 23 66 68 01 +R 00 00 01 00 +T CA 06 00 00 12 00 09 7E E6 00 47 23 7E E6 20 +R 00 00 01 00 +T D5 06 00 00 B0 28 1C +R 00 00 01 00 +T D8 06 00 00 +R 00 00 01 00 +T D8 06 00 00 DD 6E FA DD 66 FB E5 01 10 00 DD +R 00 00 01 00 +T E3 06 00 00 6E FC DD 66 FD 5E 23 56 3E +R 00 00 01 00 +T EC 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T F1 06 00 00 00 00 00 00 E1 +R 00 00 01 00 02 04 00 00 +T F4 06 00 00 +R 00 00 01 00 +T F4 06 00 00 21 0A 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T FF 06 00 00 23 66 6F 4E 06 00 DD 71 F8 DD 70 +R 00 00 01 00 +T 0A 07 00 00 F9 79 E6 80 28 47 +R 00 00 01 00 +T 10 07 00 00 +R 00 00 01 00 +T 10 07 00 00 21 02 00 39 4D 44 21 17 00 DD 5E +R 00 00 01 00 +T 1B 07 00 00 FC DD 56 FD 19 5E 23 56 3E +R 00 00 01 00 +T 24 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 29 07 00 00 00 00 00 00 4D 44 21 00 00 CD +R 00 00 01 00 02 04 00 00 +T 31 07 00 00 00 00 00 00 38 20 +R 00 00 01 00 02 04 18 00 +T 35 07 00 00 +R 00 00 01 00 +T 35 07 00 00 21 02 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 19 00 +T 3D 07 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 19 00 02 0A 00 00 +T 44 07 00 00 0D 00 DD 4E FC DD 46 FD 09 34 23 +R 00 00 01 00 +T 4F 07 00 00 20 01 34 +R 00 00 01 00 +T 52 07 00 00 +R 00 00 01 00 +T 52 07 00 00 C3 81 06 00 00 +R 00 00 01 00 00 05 01 00 +T 55 07 00 00 +R 00 00 01 00 +T 55 07 00 00 18 68 +R 00 00 01 00 +T 57 07 00 00 +R 00 00 01 00 +T 57 07 00 00 01 70 80 DD 6E F8 DD 66 F9 3E 80 +R 00 00 01 00 +T 62 07 00 00 AC 67 ED 42 38 57 +R 00 00 01 00 +T 68 07 00 00 +R 00 00 01 00 +T 68 07 00 00 21 0A 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 73 07 00 00 23 66 6F 7E E6 4F 77 21 02 00 39 +R 00 00 01 00 +T 7E 07 00 00 4D 44 21 17 00 DD 5E FC DD 56 FD +R 00 00 01 00 +T 89 07 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T 90 07 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 97 07 00 00 21 00 00 CD 00 00 00 00 38 20 +R 00 00 01 00 02 08 18 00 +T 9F 07 00 00 +R 00 00 01 00 +T 9F 07 00 00 21 02 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 19 00 +T A7 07 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 19 00 02 0A 00 00 +T AE 07 00 00 0D 00 DD 4E FC DD 46 FD 09 34 23 +R 00 00 01 00 +T B9 07 00 00 20 01 34 +R 00 00 01 00 +T BC 07 00 00 +R 00 00 01 00 +T BC 07 00 00 C3 81 06 00 00 +R 00 00 01 00 00 05 01 00 +T BF 07 00 00 +R 00 00 01 00 +T BF 07 00 00 +R 00 00 01 00 +T BF 07 00 00 +R 00 00 01 00 +T BF 07 00 00 21 02 00 39 4D 44 DD 6E FC DD 66 +R 00 00 01 00 +T CA 07 00 00 FD 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T D1 07 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T D7 07 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0F 00 +T DC 07 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 0F 00 02 09 00 00 +T E2 07 00 00 81 06 00 00 +R 00 00 01 00 00 04 01 00 +T E4 07 00 00 +R 00 00 01 00 +T E4 07 00 00 DD 6E FC DD 66 FD 46 23 66 68 01 +R 00 00 01 00 +T EF 07 00 00 18 00 09 46 23 66 68 ED 4B +R 00 00 01 00 +T F8 07 00 00 00 00 00 00 A7 ED 42 20 12 +R 00 00 01 00 02 04 0C 00 +T FF 07 00 00 +R 00 00 01 00 +T FF 07 00 00 DD 6E FC DD 66 FD 46 23 66 68 01 +R 00 00 01 00 +T 0A 08 00 00 18 00 09 AF 77 23 77 +R 00 00 01 00 +T 11 08 00 00 +R 00 00 01 00 +T 11 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 14 08 00 00 +R 00 00 01 00 +T 14 08 00 00 CD 00 00 00 00 FE FF 21 3B 00 DD +R 00 00 01 00 02 05 14 00 +T 1D 08 00 00 4E 02 DD 46 03 09 4E 23 46 21 +R 00 00 01 00 +T 27 08 00 00 06 00 CD 00 00 00 00 30 02 +R 00 00 01 00 02 07 18 00 +T 2E 08 00 00 +R 00 00 01 00 +T 2E 08 00 00 18 52 +R 00 00 01 00 +T 30 08 00 00 +R 00 00 01 00 +T 30 08 00 00 21 3B 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 3B 08 00 00 23 56 01 19 00 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 15 00 +T 44 08 00 00 00 00 00 00 19 DD 75 FE DD 74 FF +R 00 00 01 00 00 04 03 00 +T 4D 08 00 00 46 23 66 68 DD 4E 02 DD 46 03 A7 +R 00 00 01 00 +T 58 08 00 00 ED 42 28 02 +R 00 00 01 00 +T 5C 08 00 00 +R 00 00 01 00 +T 5C 08 00 00 18 24 +R 00 00 01 00 +T 5E 08 00 00 +R 00 00 01 00 +T 5E 08 00 00 21 17 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 69 08 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1B 00 +T 6E 08 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1B 00 02 09 00 00 +T 74 08 00 00 17 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 20 00 +T 7C 08 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 20 00 02 0A 00 00 +T 82 08 00 00 +R 00 00 01 00 +T 82 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 72 78 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/ppp_lib/sppp.rel b/src/nos/lib/ppp_lib/sppp.rel new file mode 100644 index 00000000..f27cb414 --- /dev/null +++ b/src/nos/lib/ppp_lib/sppp.rel @@ -0,0 +1,389 @@ +XL4 +H 3 areas 22 global symbols +S _ambufw Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _secclock Ref00000000 +S _asy_ioctl Ref00000000 +S _len_p Ref00000000 +S _if_name Ref00000000 +S _Fcstab Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _net_route Ref00000000 +S _asy_send Ref00000000 +S _slhc_uncompress Ref00000000 +S _slhc_remember Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _ahdlcrx Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _get_asy Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _init_hdlc Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _slhc_compress Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dump Ref00000000 +S _slhc_init Ref00000000 +S _newproc Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 461 flags 0 +S _sppp_free Def0000009F +S _sppp_send Def000000B7 +S _sppp_rx Def00000346 +S _sppp_output Def00000181 +S _sppp_init Def00000000 +A CSTR size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 2E 00 DD +R 00 00 01 00 02 05 11 00 +T 09 00 00 00 4E 02 DD 46 03 09 36 00 00 00 00 +R 00 00 01 00 0B 0B 03 00 +T 11 00 00 00 23 36 00 00 00 00 23 36 +R 00 00 01 00 8B 06 03 00 +T 16 00 00 00 00 00 00 00 21 39 00 09 E5 01 +R 00 00 01 00 2B 04 03 00 +T 1D 00 00 00 10 00 11 10 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1B 00 +T 25 00 00 00 00 00 00 00 CD 00 00 00 00 4D 44 +R 00 00 01 00 02 04 1B 00 02 09 01 00 +T 2C 00 00 00 E1 71 23 70 21 18 00 DD 4E 02 DD +R 00 00 01 00 +T 37 00 00 00 46 03 09 E5 11 00 00 D5 11 00 00 +R 00 00 01 00 +T 42 00 00 00 D5 C5 21 2C 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 4D 00 00 00 09 5E 23 56 D5 1E 46 03 00 00 D5 +R 00 00 01 00 29 0A 01 00 +T 55 00 00 00 21 46 03 00 00 E5 01 00 02 C5 01 +R 00 00 01 00 00 05 01 00 +T 5E 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 00 04 02 00 +T 67 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 6C 00 00 00 00 00 00 00 DD 75 FE DD 74 FF EB +R 00 00 01 00 02 04 01 00 +T 75 00 00 00 3E 00 00 00 00 21 00 00 00 00 C1 +R 00 00 01 00 2B 05 1C 00 02 0A 1C 00 +T 7B 00 00 00 CD 00 00 00 00 EB 21 0C 00 39 F9 +R 00 00 01 00 02 05 01 00 +T 84 00 00 00 EB 4D 44 E1 71 23 70 DD 5E FE DD +R 00 00 01 00 +T 8F 00 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 94 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 9A 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 07 07 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 CD 00 00 00 00 21 39 00 19 5E 23 +R 00 00 01 00 02 05 0F 00 +T A8 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T AE 00 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 01 00 +T B5 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 07 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 CD 00 00 00 00 FA FF 21 39 00 09 +R 00 00 01 00 02 05 11 00 +T C0 00 00 00 56 23 66 6A DD 75 FE DD 74 FF DD +R 00 00 01 00 +T CB 00 00 00 6E 02 DD 66 03 5E 23 56 D5 01 +R 00 00 01 00 +T D5 00 00 00 01 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T DE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1A 00 02 09 1A 00 +T E3 00 00 00 00 00 00 00 E1 21 55 00 DD 4E 04 +R 00 00 01 00 02 04 01 00 +T EC 00 00 00 DD 46 05 09 CD 00 00 00 00 21 +R 00 00 01 00 02 09 13 00 +T F4 00 00 00 61 00 DD 4E 04 DD 46 05 09 E5 3E +R 00 00 01 00 +T FF 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 04 01 00 00 00 00 00 00 EB E1 73 23 72 23 71 +R 00 00 01 00 02 04 01 00 +T 0D 01 00 00 23 70 21 01 00 E5 DD 4E 02 DD 46 +R 00 00 01 00 +T 18 01 00 00 03 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 20 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T 25 01 00 00 00 00 00 00 F1 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 01 00 +T 2E 01 00 00 4D 44 3E 40 A9 B0 20 0C 18 00 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 +R 00 00 01 00 +T 38 01 00 00 DD 36 FC 21 DD 36 FD 00 18 20 +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 3E 80 A9 B0 20 0A DD 36 FC 2D DD +R 00 00 01 00 +T 4D 01 00 00 36 FD 00 18 10 +R 00 00 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 3E 70 A9 B0 20 E0 DD 36 FC 2F DD +R 00 00 01 00 +T 5D 01 00 00 36 FD 00 18 00 +R 00 00 01 00 +T 62 01 00 00 +R 00 00 01 00 +T 62 01 00 00 DD 6E 02 DD 66 03 E5 DD 4E FC DD +R 00 00 01 00 +T 6D 01 00 00 46 FD DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 76 01 00 00 81 01 00 00 21 81 01 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 7B 01 00 00 00 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0A 07 00 +T 81 01 00 00 +R 00 00 01 00 +T 81 01 00 00 CD 00 00 00 00 F8 FF DD 36 FE FF +R 00 00 01 00 02 05 11 00 +T 8A 01 00 00 DD 36 FF FF DD 6E 0A DD 66 0B 5E +R 00 00 01 00 +T 95 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 9A 01 00 00 00 00 00 00 CD 00 00 00 00 29 11 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T A1 01 00 00 06 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 00 00 +T A8 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T AF 01 00 00 F8 DD 74 F9 11 0A 00 19 56 23 66 +R 00 00 01 00 +T BA 01 00 00 6A DD 75 FA DD 74 FB 23 DD 75 FA +R 00 00 01 00 +T C5 01 00 00 DD 74 FB 2B 36 7E DD 5E FA DD 56 +R 00 00 01 00 +T D0 01 00 00 FB CD F9 02 00 00 DD 75 FA DD 74 +R 00 00 01 00 00 06 01 00 +T D9 01 00 00 FB DD 6E FE DD 66 FF 6C 26 00 E5 +R 00 00 01 00 +T E4 01 00 00 DD 7E FE DD AE 04 6F DD 7E FF DD +R 00 00 01 00 +T EF 01 00 00 AE 05 67 7D E6 FF 4F 7C E6 00 47 +R 00 00 01 00 +T FA 01 00 00 69 60 29 01 00 00 00 00 09 C1 79 +R 00 00 01 00 02 08 06 00 +T 03 02 00 00 AE 5F 78 23 AE 57 DD 73 FE DD 72 +R 00 00 01 00 +T 0E 02 00 00 FF +R 00 00 01 00 +T 0F 02 00 00 +R 00 00 01 00 +T 0F 02 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T 17 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T 1E 02 00 00 75 FC DD 74 FD 7D A4 3C 28 49 +R 00 00 01 00 +T 28 02 00 00 +R 00 00 01 00 +T 28 02 00 00 DD 6E FE DD 66 FF 6C 26 00 E5 DD +R 00 00 01 00 +T 33 02 00 00 7E FE DD AE FC 6F DD 7E FF DD AE +R 00 00 01 00 +T 3E 02 00 00 FD 67 7D E6 FF 4F 7C E6 00 47 69 +R 00 00 01 00 +T 49 02 00 00 60 29 01 00 00 00 00 09 C1 79 AE +R 00 00 01 00 02 07 06 00 +T 52 02 00 00 5F 78 23 AE 57 DD 73 FE DD 72 FF +R 00 00 01 00 +T 5D 02 00 00 DD 4E FC DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 67 02 00 00 F9 02 00 00 DD 75 FA DD 74 FB 18 +R 00 00 01 00 00 04 01 00 +T 70 02 00 00 9E +R 00 00 01 00 +T 71 02 00 00 +R 00 00 01 00 +T 71 02 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 16 00 +T 79 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 16 00 02 0A 01 00 +T 80 02 00 00 06 00 39 7E EE FF 77 23 7E EE FF +R 00 00 01 00 +T 8B 02 00 00 77 DD 4E FE DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 96 02 00 00 F9 02 00 00 DD 75 FA DD 74 FB DD +R 00 00 01 00 00 04 01 00 +T 9F 02 00 00 4E FE DD 46 FF 48 06 00 EB CD +R 00 00 01 00 +T A9 02 00 00 F9 02 00 00 DD 75 FA DD 74 FB 23 +R 00 00 01 00 00 04 01 00 +T B2 02 00 00 DD 75 FA DD 74 FB 2B 36 7E 21 +R 00 00 01 00 +T BC 02 00 00 0C 00 DD 4E F8 DD 46 F9 09 E5 21 +R 00 00 01 00 +T C7 02 00 00 0A 00 09 5E 23 56 DD 6E FA DD 66 +R 00 00 01 00 +T D2 02 00 00 FB A7 ED 52 EB E1 73 23 72 21 +R 00 00 01 00 +T DC 02 00 00 00 00 39 4D 44 21 2C 00 DD 5E 02 +R 00 00 01 00 +T E7 02 00 00 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T EF 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T F4 02 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 07 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 CD 00 00 00 00 79 FE 7D 38 2A FE +R 00 00 01 00 02 05 0F 00 +T 02 03 00 00 7F 30 26 +R 00 00 01 00 +T 05 03 00 00 +R 00 00 01 00 +T 05 03 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 10 03 00 00 74 03 2B 36 7D DD 7E 04 EE 20 DD +R 00 00 01 00 +T 1B 03 00 00 6E 02 DD 66 03 23 DD 75 02 DD 74 +R 00 00 01 00 +T 26 03 00 00 03 2B 77 18 12 +R 00 00 01 00 +T 2B 03 00 00 +R 00 00 01 00 +T 2B 03 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 36 03 00 00 74 03 2B DD 46 04 70 +R 00 00 01 00 +T 3D 03 00 00 +R 00 00 01 00 +T 3D 03 00 00 DD 6E 02 DD 66 03 C3 00 00 00 00 +R 00 00 01 00 02 0B 0C 00 +T 46 03 00 00 +R 00 00 01 00 +T 46 03 00 00 CD 00 00 00 00 DA FF DD 71 FC DD +R 00 00 01 00 02 05 11 00 +T 4F 03 00 00 70 FD 21 39 00 09 46 23 66 68 DD +R 00 00 01 00 +T 5A 03 00 00 75 FE DD 74 FF 01 00 08 21 04 00 +R 00 00 01 00 +T 65 03 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 14 00 +T 6B 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 14 00 02 09 01 00 +T 70 03 00 00 +R 00 00 01 00 +T 70 03 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T 78 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 12 00 02 0A 01 00 +T 7F 03 00 00 75 DC DD 74 DD 4D 21 04 00 39 5D +R 00 00 01 00 +T 8A 03 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 90 03 00 00 CD 00 00 00 00 DD 75 DA DD 74 DB +R 00 00 01 00 02 05 01 00 +T 99 03 00 00 7D B4 20 02 +R 00 00 01 00 +T 9D 03 00 00 +R 00 00 01 00 +T 9D 03 00 00 18 D1 +R 00 00 01 00 +T 9F 03 00 00 +R 00 00 01 00 +T 9F 03 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T A7 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 18 00 02 0A 01 00 +T AE 03 00 00 75 DC DD 74 DD 4D 44 3E 2D A9 B0 +R 00 00 01 00 +T B9 03 00 00 20 32 +R 00 00 01 00 +T BB 03 00 00 +R 00 00 01 00 +T BB 03 00 00 21 00 00 39 4D 44 DD 5E FE DD 56 +R 00 00 01 00 +T C6 03 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T CC 03 00 00 CD 00 00 00 00 4D 44 21 00 00 CD +R 00 00 01 00 02 05 01 00 +T D5 03 00 00 00 00 00 00 38 0A +R 00 00 01 00 02 04 15 00 +T D9 03 00 00 +R 00 00 01 00 +T D9 03 00 00 DD 36 DC FF DD 36 DD FF 18 08 +R 00 00 01 00 +T E3 03 00 00 +R 00 00 01 00 +T E3 03 00 00 DD 36 DC 21 DD 36 DD 00 +R 00 00 01 00 +T EB 03 00 00 +R 00 00 01 00 +T EB 03 00 00 18 38 +R 00 00 01 00 +T ED 03 00 00 +R 00 00 01 00 +T ED 03 00 00 3E 2F A9 B0 20 32 21 00 00 39 4D +R 00 00 01 00 +T F8 03 00 00 44 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 00 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 05 04 00 00 00 00 00 00 4D 44 21 00 00 CD +R 00 00 01 00 02 04 01 00 +T 0D 04 00 00 00 00 00 00 38 0A +R 00 00 01 00 02 04 15 00 +T 11 04 00 00 +R 00 00 01 00 +T 11 04 00 00 DD 36 DC FF DD 36 DD FF 18 08 +R 00 00 01 00 +T 1B 04 00 00 +R 00 00 01 00 +T 1B 04 00 00 DD 36 DC 21 DD 36 DD 00 +R 00 00 01 00 +T 23 04 00 00 +R 00 00 01 00 +T 23 04 00 00 18 00 +R 00 00 01 00 +T 25 04 00 00 +R 00 00 01 00 +T 25 04 00 00 DD 4E DC DD 46 DD 3E 21 A9 B0 20 +R 00 00 01 00 +T 30 04 00 00 16 +R 00 00 01 00 +T 31 04 00 00 +R 00 00 01 00 +T 31 04 00 00 21 00 00 39 4D 44 DD 5E FC DD 56 +R 00 00 01 00 +T 3C 04 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 42 04 00 00 CD 00 00 00 00 18 17 +R 00 00 01 00 02 05 01 00 +T 47 04 00 00 +R 00 00 01 00 +T 47 04 00 00 79 A0 3C 20 02 18 10 +R 00 00 01 00 +T 4E 04 00 00 +R 00 00 01 00 +T 4E 04 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 16 00 +T 56 04 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 16 00 02 0A 01 00 +T 5D 04 00 00 00 +R 00 00 01 00 +T 5E 04 00 00 +R 00 00 01 00 +T 5E 04 00 00 C3 70 03 00 00 +R 00 00 01 00 00 05 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 20 72 78 00 +R 00 00 02 00 diff --git a/src/nos/lib/ppp_lib/stpcpy.rel b/src/nos/lib/ppp_lib/stpcpy.rel new file mode 100644 index 00000000..fb21fab7 --- /dev/null +++ b/src/nos/lib/ppp_lib/stpcpy.rel @@ -0,0 +1,30 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3C flags 0 +S _stpcpy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 59 50 3E +R 00 00 01 00 02 05 05 00 +T 08 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 0D 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 23 +R 00 00 01 00 02 04 00 00 +T 16 00 00 00 E5 DD 4E 04 DD 46 05 DD 5E 02 DD +R 00 00 01 00 +T 21 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 26 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 2D 00 00 00 6E FE DD 66 FF DD 4E 02 DD 46 03 +R 00 00 01 00 +T 38 00 00 00 09 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 diff --git a/src/nos/lib/servers.lib b/src/nos/lib/servers.lib new file mode 100644 index 00000000..79ab7539 --- /dev/null +++ b/src/nos/lib/servers.lib @@ -0,0 +1,131 @@ +servers_lib/bootpcmd.rel + _readtab + _bp_log + _readtab_shut + _bootpdcmd +servers_lib/bootpd.rel + _bootp_print_packet + _bootpd + _Bootpd_stat + _hosts + _Bootpd_cb + _ArpNames + _defaultboot + _homedir + _bp_DefaultDomainNS + _Nhosts +servers_lib/bootpdip.rel + _da_status + _da_init + _da_shut + _da_assign + _da_serve_net + _da_done_net + _q_dequeue + _da_timer + _bp_ascii + _ifaceToArpMap +servers_lib/fingerd.rel + _finstart + _fin0 +servers_lib/Ftpscmd.rel + _Ftpscmd +servers_lib/Ftpsmsg_banner.rel + _Ftpsmsg_banner +servers_lib/Ftpsmsg_badcmd.rel + _Ftpsmsg_badcmd +servers_lib/Ftpsmsg_binwarn.rel + _Ftpsmsg_binwarn +servers_lib/Ftpsmsg_unsupp.rel + _Ftpsmsg_unsupp +servers_lib/Ftpsmsg_givepass.rel + _Ftpsmsg_givepass +servers_lib/Ftpsmsg_logged.rel + _Ftpsmsg_logged +servers_lib/Ftpsmsg_typeok.rel + _Ftpsmsg_typeok +servers_lib/Ftpsmsg_only8.rel + _Ftpsmsg_only8 +servers_lib/Ftpsmsg_deleok.rel + _Ftpsmsg_deleok +servers_lib/Ftpsmsg_mkdok.rel + _Ftpsmsg_mkdok +servers_lib/Ftpsmsg_delefail.rel + _Ftpsmsg_delefail +servers_lib/Ftpsmsg_pwdmsg.rel + _Ftpsmsg_pwdmsg +servers_lib/Ftpsmsg_badtype.rel + _Ftpsmsg_badtype +servers_lib/Ftpsmsg_badport.rel + _Ftpsmsg_badport +servers_lib/Ftpsmsg_unimp.rel + _Ftpsmsg_unimp +servers_lib/Ftpsmsg_bye.rel + _Ftpsmsg_bye +servers_lib/Ftpsmsg_nodir.rel + _Ftpsmsg_nodir +servers_lib/Ftpsmsg_cantopen.rel + _Ftpsmsg_cantopen +servers_lib/Ftpsmsg_sending.rel + _Ftpsmsg_sending +servers_lib/Ftpsmsg_cantmake.rel + _Ftpsmsg_cantmake +servers_lib/Ftpsmsg_writerr.rel + _Ftpsmsg_writerr +servers_lib/Ftpsmsg_portok.rel + _Ftpsmsg_portok +servers_lib/Ftpsmsg_rxok.rel + _Ftpsmsg_rxok +servers_lib/Ftpsmsg_txok.rel + _Ftpsmsg_txok +servers_lib/Ftpsmsg_noperm.rel + _Ftpsmsg_noperm +servers_lib/Ftpsmsg_noconn.rel + _Ftpsmsg_noconn +servers_lib/Ftpsmsg_lowmem.rel + _Ftpsmsg_lowmem +servers_lib/Ftpsmsg_notlog.rel + _Ftpsmsg_notlog +servers_lib/Ftpsmsg_userfirst.rel + _Ftpsmsg_userfirst +servers_lib/Ftpsmsg_okay.rel + _Ftpsmsg_okay +servers_lib/Ftpsmsg_syst.rel + _Ftpsmsg_syst +servers_lib/ftpstart.rel + _ftpstart +servers_lib/ftpserv.rel + _ftpserv +servers_lib/ftpserv_switch.rel + _ftpserv_switch +servers_lib/ftpserv_switch_xmd5.rel + _ftpserv_switch_xmd5 +servers_lib/ftp0.rel + _ftp0 +servers_lib/pport.rel + _pport +servers_lib/ftplogin.rel + _ftplogin +servers_lib/permcheck.rel + _permcheck +servers_lib/sendit.rel + _sendit +servers_lib/recvit.rel + _recvit +servers_lib/smisc.rel + _echo0 + _echo1 + _term0 + _term1 + _dis0 + _dis1 + _rem0 + _rem1 + _bsr0 + _bsr1 + _Tserv + _Rempass +servers_lib/ttylink.rel + _ttylhandle + _ttylstart + _ttyl0 diff --git a/src/nos/lib/servers_lib/Ftpscmd.rel b/src/nos/lib/servers_lib/Ftpscmd.rel new file mode 100644 index 00000000..a4335262 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpscmd.rel @@ -0,0 +1,61 @@ +XL4 +H 4 areas 1B global symbols +S ___0521_9d45_pass Ref00000000 +S ___03fa_16c9_acct Ref00000000 +S ___05a0_8f60_syst Ref00000000 +S ___04ed_8a90_name Ref00000000 +S ___05e7_2295_xmd5 Ref00000000 +S ___0528_e039_port Ref00000000 +S ___05e6_ce7b_xcwd Ref00000000 +S ___0557_b917_rmd_20 Ref00000000 +S ___04b8_7bad_list Ref00000000 +S ___0533_2105_pwd Ref00000000 +S .__.ABS. Def00000000 +S ___04e1_685e_mode Ref00000000 +S ___044c_4bf4_cwd Ref00000000 +S ___0453_2c87_dele Ref00000000 +S ___05ea_79d3_xrmd Ref00000000 +S ___0599_784e_stru Ref00000000 +S ___04dd_1e96_mkd_20 Ref00000000 +S ___0598_2918_stor Ref00000000 +S ___05e8_e251_xmkd Ref00000000 +S ___05e9_a48a_xpwd Ref00000000 +S ___04fe_7b66_nlst Ref00000000 +S ___05d0_13f7_user Ref00000000 +S ___05c3_f321_type Ref00000000 +S ___0550_9bd3_retr Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___053b_7b54_quit Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 4B flags 0 +S _Ftpscmd Def00000000 +A CDATA0 size 4B flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 15 00 4A 08 01 00 +T 06 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 4A 08 16 00 +T 0C 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 08 00 4A 08 0C 00 +T 12 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0D 00 4A 08 03 00 +T 18 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 19 00 4A 08 17 00 +T 1E 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 11 00 4A 08 05 00 +T 24 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 14 00 4A 08 09 00 +T 2A 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 13 00 4A 08 10 00 +T 30 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 12 00 4A 08 0E 00 +T 36 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 07 00 4A 08 0F 00 +T 3C 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 0B 00 4A 08 02 00 +T 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 04 00 4A 08 06 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_badcmd.rel b/src/nos/lib/servers_lib/Ftpsmsg_badcmd.rel new file mode 100644 index 00000000..9daea33d --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_badcmd.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01b4_7e66_500_20Unknown_20com Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_badcmd Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_badport.rel b/src/nos/lib/servers_lib/Ftpsmsg_badport.rel new file mode 100644 index 00000000..a161a711 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_badport.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01b6_fe7e_501_20Bad_20port_20 Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_badport Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_badtype.rel b/src/nos/lib/servers_lib/Ftpsmsg_badtype.rel new file mode 100644 index 00000000..c63a1e02 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_badtype.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___01b8_a2bf_501_20Unknown_20typ Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_badtype Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 02 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_banner.rel b/src/nos/lib/servers_lib/Ftpsmsg_banner.rel new file mode 100644 index 00000000..1332c4d9 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_banner.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01a8_01fe_220_20_25s_20FTP_20 Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_banner Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_binwarn.rel b/src/nos/lib/servers_lib/Ftpsmsg_binwarn.rel new file mode 100644 index 00000000..7ac526b7 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_binwarn.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01a0_d635_100_20Warning_3a_20 Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_binwarn Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_bye.rel b/src/nos/lib/servers_lib/Ftpsmsg_bye.rel new file mode 100644 index 00000000..5d4373a4 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_bye.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01a9_7804_221_20Goodbye_21_0a Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_bye Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_cantmake.rel b/src/nos/lib/servers_lib/Ftpsmsg_cantmake.rel new file mode 100644 index 00000000..43e84816 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_cantmake.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___01c0_7eaf_553_20Can_27t_20cre Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_cantmake Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 02 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_cantopen.rel b/src/nos/lib/servers_lib/Ftpsmsg_cantopen.rel new file mode 100644 index 00000000..f82c8a17 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_cantopen.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___01bc_c53a_550_20Can_27t_20rea Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_cantopen Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_delefail.rel b/src/nos/lib/servers_lib/Ftpsmsg_delefail.rel new file mode 100644 index 00000000..2c009c2d --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_delefail.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01bd_4770_550_20Delete_20fail Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_delefail Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_deleok.rel b/src/nos/lib/servers_lib/Ftpsmsg_deleok.rel new file mode 100644 index 00000000..90ae7583 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_deleok.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___01ae_c720_250_20File_20delete Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_deleok Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_givepass.rel b/src/nos/lib/servers_lib/Ftpsmsg_givepass.rel new file mode 100644 index 00000000..3ac964b3 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_givepass.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01b1_24f1_331_20Enter_20PASS_ Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_givepass Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_logged.rel b/src/nos/lib/servers_lib/Ftpsmsg_logged.rel new file mode 100644 index 00000000..cac1ea8c --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_logged.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___01ac_9fe8_230_20Logged_20in_0 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_logged Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_lowmem.rel b/src/nos/lib/servers_lib/Ftpsmsg_lowmem.rel new file mode 100644 index 00000000..04ed8e5b --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_lowmem.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01b2_273f_421_20System_20over Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_lowmem Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_mkdok.rel b/src/nos/lib/servers_lib/Ftpsmsg_mkdok.rel new file mode 100644 index 00000000..33fcc0e9 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_mkdok.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01a3_cc8d_200_20MKD_20ok_0a Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_mkdok Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_noconn.rel b/src/nos/lib/servers_lib/Ftpsmsg_noconn.rel new file mode 100644 index 00000000..62eb9563 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_noconn.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___01b3_e43d_425_20Data_20connec Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_noconn Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_nodir.rel b/src/nos/lib/servers_lib/Ftpsmsg_nodir.rel new file mode 100644 index 00000000..fe3ae903 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_nodir.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01c1_f0b2_553_20Can_27t_20rea Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_nodir Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_noperm.rel b/src/nos/lib/servers_lib/Ftpsmsg_noperm.rel new file mode 100644 index 00000000..81a33ef2 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_noperm.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___01be_38c3_550_20Permission_20 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_noperm Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_notlog.rel b/src/nos/lib/servers_lib/Ftpsmsg_notlog.rel new file mode 100644 index 00000000..aef83001 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_notlog.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___01bb_7dc2_530_20Please_20log_ Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_notlog Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_okay.rel b/src/nos/lib/servers_lib/Ftpsmsg_okay.rel new file mode 100644 index 00000000..f0cb73bb --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_okay.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01a4_6c3a_200_20Ok_0a Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_okay Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_only8.rel b/src/nos/lib/servers_lib/Ftpsmsg_only8.rel new file mode 100644 index 00000000..8927db27 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_only8.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___01b7_065e_501_20Only_20logica Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_only8 Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_portok.rel b/src/nos/lib/servers_lib/Ftpsmsg_portok.rel new file mode 100644 index 00000000..ae25bac5 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_portok.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01a5_ba32_200_20Port_20comman Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_portok Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_pwdmsg.rel b/src/nos/lib/servers_lib/Ftpsmsg_pwdmsg.rel new file mode 100644 index 00000000..a7286ae1 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_pwdmsg.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01b0_9400_257_20_22_25s_22_20 Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_pwdmsg Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_rxok.rel b/src/nos/lib/servers_lib/Ftpsmsg_rxok.rel new file mode 100644 index 00000000..24d9bd49 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_rxok.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___01aa_3f54_226_20File_20receiv Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_rxok Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 02 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_sending.rel b/src/nos/lib/servers_lib/Ftpsmsg_sending.rel new file mode 100644 index 00000000..3e74318d --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_sending.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01a1_3f47_150_20Opening_20dat Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_sending Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_syst.rel b/src/nos/lib/servers_lib/Ftpsmsg_syst.rel new file mode 100644 index 00000000..9f946ee6 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_syst.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01a7_1192_215_20_25s_20Type_3 Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_syst Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_txok.rel b/src/nos/lib/servers_lib/Ftpsmsg_txok.rel new file mode 100644 index 00000000..c195c46f --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_txok.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01ab_caea_226_20File_20sent_2 Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_txok Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_typeok.rel b/src/nos/lib/servers_lib/Ftpsmsg_typeok.rel new file mode 100644 index 00000000..3a74292e --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_typeok.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ___01a6_1db7_200_20Type_20_25s_2 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_typeok Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 01 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_unimp.rel b/src/nos/lib/servers_lib/Ftpsmsg_unimp.rel new file mode 100644 index 00000000..dc19ee34 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_unimp.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01b9_41cf_502_20Command_20not Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_unimp Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_unsupp.rel b/src/nos/lib/servers_lib/Ftpsmsg_unsupp.rel new file mode 100644 index 00000000..57f7885d --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_unsupp.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01b5_3d39_500_20Unsupported_2 Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_unsupp Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_userfirst.rel b/src/nos/lib/servers_lib/Ftpsmsg_userfirst.rel new file mode 100644 index 00000000..e5e960c0 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_userfirst.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S ___01ba_f576_503_20Login_20with_ Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_userfirst Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 diff --git a/src/nos/lib/servers_lib/Ftpsmsg_writerr.rel b/src/nos/lib/servers_lib/Ftpsmsg_writerr.rel new file mode 100644 index 00000000..9a563235 --- /dev/null +++ b/src/nos/lib/servers_lib/Ftpsmsg_writerr.rel @@ -0,0 +1,16 @@ +XL4 +H 4 areas 4 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___01bf_95c1_552_20Write_20error Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 3 flags 0 +S _Ftpsmsg_writerr Def00000000 +A CDATA0 size 3 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 02 00 diff --git a/src/nos/lib/servers_lib/bootpcmd.rel b/src/nos/lib/servers_lib/bootpcmd.rel new file mode 100644 index 00000000..36a67e1e --- /dev/null +++ b/src/nos/lib/servers_lib/bootpcmd.rel @@ -0,0 +1,2267 @@ +XL4 +H 6 areas 47 global symbols +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Arp_type Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _if_lookup Ref00000000 +S _fflush Ref00000000 +S _da_status Ref00000000 +S _bootpd Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S _vprintf Ref00000000 +S _memcpy Ref00000000 +S _tolower Ref00000000 +S _Bootpd_cb Ref00000000 +S ___05c8_5194_unknown_20hardware_ Ref00000000 +S _cmdparse Ref00000000 +S ___0466_e146_dns Ref00000000 +S _ctime Ref00000000 +S _strncpy Ref00000000 +S _printf Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0000_ffff_ Ref00000000 +S ___049e_1d5e_homedir Ref00000000 +S _ArpNames Ref00000000 +S _da_init Ref00000000 +S _strcmp Ref00000000 +S _fgets Ref00000000 +S _defaultboot Ref00000000 +S ___055a_c459_rmhost Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _open_udp Ref00000000 +S ___0472_cb91_dynip Ref00000000 +S _del_udp Ref00000000 +S ___0419_60d3_bad_20internet_20ad Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _fstat Ref00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S ___04bf_a516_logscreen Ref00000000 +S _homedir Ref00000000 +S _da_shut Ref00000000 +S ___04bd_feb4_logfile Ref00000000 +S ___04a0_df98_host Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _vfprintf Ref00000000 +S _time Ref00000000 +S _mallocw Ref00000000 +S _freopen Ref00000000 +S _da_serve_net Ref00000000 +S _bp_DefaultDomainNS Ref00000000 +S _da_done_net Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _hosts Ref00000000 +S _aton Ref00000000 +S __printf Ref00000000 +S ___058d_b958_start Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0595_0a0a_stop Ref00000000 +S _bp_ascii Ref00000000 +S ___0451_db45_defaultfile Ref00000000 +S _stat Ref00000000 +S _fclose Ref00000000 +S _subcmd Ref00000000 +S _sscanf Ref00000000 +S _Nhosts Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 118E flags 0 +S _readtab Def00000F4D +S _bp_log Def000010DB +S _readtab_shut Def000010C9 +S _bootpdcmd Def00000000 +A CSTR size 509 flags 0 +A UDATA0 size A flags 0 +A IDATA0 size E2 flags 0 +A CDATA0 size E2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 02 05 25 00 +T 09 00 00 00 E5 C5 4B 42 11 46 00 00 00 3E +R 00 00 01 00 00 09 04 00 +T 11 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 40 00 02 09 40 00 +T 16 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0B 13 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 CD 00 00 00 00 F4 FF DD 36 FE +R 00 00 01 00 02 05 2C 00 +T 25 00 00 00 09 00 00 00 DD 36 FF 09 00 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T 2A 00 00 00 3E 01 DD AE 02 DD B6 03 28 16 +R 00 00 01 00 +T 34 00 00 00 +R 00 00 01 00 +T 34 00 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 3C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 41 00 00 00 00 00 00 00 F1 21 FF FF C3 +R 00 00 01 00 02 04 01 00 +T 48 00 00 00 D4 00 00 00 +R 00 00 01 00 00 04 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 21 06 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2F 00 +T 52 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 2F 00 02 0A 01 00 +T 59 00 00 00 06 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T 61 00 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 68 00 00 00 17 00 00 00 E5 3E DB 10 00 00 21 +R 00 00 01 00 00 04 02 00 29 0A 01 00 +T 6E 00 00 00 DB 10 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 75 00 00 00 AF DD 77 F4 DD 77 F5 DD 77 F6 DD +R 00 00 01 00 +T 80 00 00 00 77 F7 DD 36 F8 43 DD 36 F9 00 2A +R 00 00 01 00 +T 8B 00 00 00 00 00 00 00 7D B4 20 30 +R 00 00 01 00 02 04 0C 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 07 00 02 0B 07 00 +T 97 00 00 00 E5 21 04 00 39 5D 54 3E +R 00 00 01 00 +T 9F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T A4 00 00 00 00 00 00 00 F1 F1 22 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0B 0C 00 +T AB 00 00 00 7D B4 20 12 +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 21 3A 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 12 00 +T B5 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 12 00 02 0A 01 00 +T BC 00 00 00 21 FF FF 18 13 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T C7 00 00 00 00 00 00 00 3E 4D 0F 00 00 21 +R 00 00 01 00 02 04 01 00 29 09 01 00 +T CC 00 00 00 4D 0F 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T D2 00 00 00 00 00 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 13 00 +T D7 00 00 00 +R 00 00 01 00 +T D7 00 00 00 CD 00 00 00 00 FA FF DD 36 FE +R 00 00 01 00 02 05 2C 00 +T DF 00 00 00 52 00 00 00 DD 36 FF 52 00 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T E4 00 00 00 3E 01 DD AE 02 DD B6 03 28 15 +R 00 00 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T F6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T FB 00 00 00 00 00 00 00 F1 21 FF FF 18 56 +R 00 00 01 00 02 04 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2F 00 +T 0B 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 2F 00 02 0A 01 00 +T 12 01 00 00 00 00 22 00 00 00 00 3E +R 00 00 01 00 02 07 42 00 +T 18 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 29 00 02 09 29 00 +T 1D 01 00 00 00 00 00 00 3E C9 10 00 00 21 +R 00 00 01 00 02 04 01 00 29 09 01 00 +T 22 01 00 00 C9 10 00 00 CD 00 00 00 00 ED 5B +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 29 01 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0C 00 2B 09 1F 00 +T 2E 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1F 00 02 09 01 00 +T 34 01 00 00 00 00 22 00 00 00 00 21 00 00 39 +R 00 00 01 00 02 07 0C 00 +T 3D 01 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 10 00 +T 42 01 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 49 01 00 00 5F 00 00 00 E5 3E DB 10 00 00 21 +R 00 00 01 00 00 04 02 00 29 0A 01 00 +T 4F 01 00 00 DB 10 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 56 01 00 00 21 00 00 +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 13 00 +T 5C 01 00 00 +R 00 00 01 00 +T 5C 01 00 00 CD 00 00 00 00 F8 FF DD 36 FE +R 00 00 01 00 02 05 2C 00 +T 64 01 00 00 72 00 00 00 DD 36 FF 72 00 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T 69 01 00 00 21 02 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2F 00 +T 71 01 00 00 21 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 05 2F 00 02 0A 01 00 +T 78 01 00 00 01 DD AE 02 DD B6 03 20 30 +R 00 00 01 00 +T 81 01 00 00 +R 00 00 01 00 +T 81 01 00 00 2A 42 00 00 00 7D B4 28 14 +R 00 00 01 00 00 05 04 00 +T 88 01 00 00 +R 00 00 01 00 +T 88 01 00 00 21 02 00 00 00 E5 21 A6 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 02 00 +T 8F 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T 95 01 00 00 CD 00 00 00 00 F1 F1 18 12 +R 00 00 01 00 02 05 01 00 +T 9C 01 00 00 +R 00 00 01 00 +T 9C 01 00 00 21 02 00 00 00 E5 21 CE 00 00 00 +R 00 00 01 00 00 05 04 00 00 0B 02 00 +T A3 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T A9 01 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 01 00 +T AE 01 00 00 +R 00 00 01 00 +T AE 01 00 00 C3 FE 02 00 00 +R 00 00 01 00 00 05 01 00 +T B1 01 00 00 +R 00 00 01 00 +T B1 01 00 00 DD 36 F8 01 DD 36 F9 00 +R 00 00 01 00 +T B9 01 00 00 +R 00 00 01 00 +T B9 01 00 00 DD 4E 02 DD 46 03 DD 6E F8 DD 66 +R 00 00 01 00 +T C4 01 00 00 F9 CD 00 00 00 00 D2 FE 02 00 00 +R 00 00 01 00 02 06 35 00 00 0B 01 00 +T CB 01 00 00 +R 00 00 01 00 +T CB 01 00 00 DD 6E F8 DD 66 F9 29 DD 4E 04 DD +R 00 00 01 00 +T D6 01 00 00 46 05 09 4E 23 46 11 F7 00 00 00 +R 00 00 01 00 00 0B 02 00 +T DF 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 18 00 02 0A 18 00 +T E5 01 00 00 00 00 00 00 7D B4 20 13 +R 00 00 01 00 02 04 01 00 +T EB 01 00 00 +R 00 00 01 00 +T EB 01 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T F3 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T F8 01 00 00 00 00 00 00 F1 C3 F3 02 00 00 +R 00 00 01 00 02 04 01 00 00 0A 01 00 +T FE 01 00 00 +R 00 00 01 00 +T FE 01 00 00 DD 6E F8 DD 66 F9 29 DD 4E 04 DD +R 00 00 01 00 +T 09 02 00 00 46 05 09 4E 23 46 11 F9 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 12 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 18 00 02 0A 18 00 +T 18 02 00 00 00 00 00 00 7D B4 20 26 +R 00 00 01 00 02 04 01 00 +T 1E 02 00 00 +R 00 00 01 00 +T 1E 02 00 00 21 02 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T 26 02 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 10 00 02 0A 01 00 +T 2D 02 00 00 21 FD 00 00 00 E5 3E DB 10 00 00 +R 00 00 01 00 00 05 02 00 29 0B 01 00 +T 33 02 00 00 21 DB 10 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 00 05 01 00 02 0A 01 00 +T 3A 02 00 00 E1 21 00 00 22 42 00 00 00 C3 +R 00 00 01 00 00 09 04 00 +T 42 02 00 00 F3 02 00 00 +R 00 00 01 00 00 04 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 DD 6E F8 DD 66 F9 29 DD 4E 04 DD +R 00 00 01 00 +T 4F 02 00 00 46 05 09 4E 23 46 11 19 01 00 00 +R 00 00 01 00 00 0B 02 00 +T 58 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 18 00 02 0A 18 00 +T 5E 02 00 00 00 00 00 00 7D B4 20 25 +R 00 00 01 00 02 04 01 00 +T 64 02 00 00 +R 00 00 01 00 +T 64 02 00 00 21 01 00 22 42 00 00 00 21 02 00 +R 00 00 01 00 00 08 04 00 +T 6D 02 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 10 00 +T 73 02 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 7A 02 00 00 1C 01 00 00 E5 3E DB 10 00 00 21 +R 00 00 01 00 00 04 02 00 29 0A 01 00 +T 80 02 00 00 DB 10 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 87 02 00 00 18 6A +R 00 00 01 00 +T 89 02 00 00 +R 00 00 01 00 +T 89 02 00 00 DD 6E F8 DD 66 F9 29 DD 4E 04 DD +R 00 00 01 00 +T 94 02 00 00 46 05 09 4E 23 46 11 38 01 00 00 +R 00 00 01 00 00 0B 02 00 +T 9D 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 18 00 02 0A 18 00 +T A3 02 00 00 00 00 00 00 7D B4 20 22 +R 00 00 01 00 02 04 01 00 +T A9 02 00 00 +R 00 00 01 00 +T A9 02 00 00 01 40 01 00 00 11 02 00 00 00 3E +R 00 00 01 00 00 05 02 00 00 0A 04 00 +T B0 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 26 00 02 09 26 00 +T B5 02 00 00 00 00 00 00 21 02 00 00 00 E5 21 +R 00 00 01 00 02 04 01 00 00 09 04 00 +T BC 02 00 00 49 01 00 00 E5 3E DB 10 00 00 21 +R 00 00 01 00 00 04 02 00 29 0A 01 00 +T C2 02 00 00 DB 10 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T C9 02 00 00 18 28 +R 00 00 01 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T D6 02 00 00 11 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 04 00 2B 0A 26 00 +T DC 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 26 00 02 09 01 00 +T E2 02 00 00 02 00 00 00 E5 21 49 01 00 00 E5 +R 00 00 01 00 00 04 04 00 00 0A 02 00 +T E9 02 00 00 3E DB 10 00 00 21 DB 10 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T EF 02 00 00 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 +R 00 00 01 00 +T F3 02 00 00 DD 34 F8 20 03 DD 34 F9 +R 00 00 01 00 +T FB 02 00 00 +R 00 00 01 00 +T FB 02 00 00 C3 B9 01 00 00 +R 00 00 01 00 00 05 01 00 +T FE 02 00 00 +R 00 00 01 00 +T FE 02 00 00 +R 00 00 01 00 +T FE 02 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 13 00 +T 04 03 00 00 +R 00 00 01 00 +T 04 03 00 00 CD 00 00 00 00 FE FF DD 36 FE +R 00 00 01 00 02 05 2C 00 +T 0C 03 00 00 65 01 00 00 DD 36 FF 65 01 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T 11 03 00 00 3E 01 DD AE 02 DD B6 03 20 25 +R 00 00 01 00 +T 1B 03 00 00 +R 00 00 01 00 +T 1B 03 00 00 2A 44 00 00 00 7D B4 28 0F +R 00 00 01 00 00 05 04 00 +T 22 03 00 00 +R 00 00 01 00 +T 22 03 00 00 21 82 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 12 00 +T 28 03 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 12 00 02 0A 01 00 +T 2F 03 00 00 18 0D +R 00 00 01 00 +T 31 03 00 00 +R 00 00 01 00 +T 31 03 00 00 21 A7 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 12 00 +T 37 03 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 12 00 02 0A 01 00 +T 3E 03 00 00 +R 00 00 01 00 +T 3E 03 00 00 18 70 +R 00 00 01 00 +T 40 03 00 00 +R 00 00 01 00 +T 40 03 00 00 3E 02 DD AE 02 DD B6 03 20 56 +R 00 00 01 00 +T 4A 03 00 00 +R 00 00 01 00 +T 4A 03 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 55 03 00 00 11 19 01 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 18 00 +T 5B 03 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T 62 03 00 00 20 08 +R 00 00 01 00 +T 64 03 00 00 +R 00 00 01 00 +T 64 03 00 00 21 01 00 22 44 00 00 00 18 32 +R 00 00 01 00 00 08 04 00 +T 6C 03 00 00 +R 00 00 01 00 +T 6C 03 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 77 03 00 00 11 F9 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 18 00 +T 7D 03 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T 84 03 00 00 20 08 +R 00 00 01 00 +T 86 03 00 00 +R 00 00 01 00 +T 86 03 00 00 21 00 00 22 44 00 00 00 18 10 +R 00 00 01 00 00 08 04 00 +T 8E 03 00 00 +R 00 00 01 00 +T 8E 03 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 96 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 9B 03 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T 9E 03 00 00 +R 00 00 01 00 +T 9E 03 00 00 +R 00 00 01 00 +T 9E 03 00 00 18 10 +R 00 00 01 00 +T A0 03 00 00 +R 00 00 01 00 +T A0 03 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T A8 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T AD 03 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T B0 03 00 00 +R 00 00 01 00 +T B0 03 00 00 +R 00 00 01 00 +T B0 03 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 13 00 +T B6 03 00 00 +R 00 00 01 00 +T B6 03 00 00 CD 00 00 00 00 F4 FF DD 36 FE +R 00 00 01 00 02 05 2C 00 +T BE 03 00 00 CD 01 00 00 DD 36 FF CD 01 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T C3 03 00 00 3E 01 DD AE 02 DD B6 03 C2 +R 00 00 01 00 +T CC 03 00 00 4F 04 00 00 +R 00 00 01 00 00 04 01 00 +T CE 03 00 00 +R 00 00 01 00 +T CE 03 00 00 21 FE 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 12 00 +T D4 03 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 12 00 02 0A 01 00 +T DB 03 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 +T E2 03 00 00 +R 00 00 01 00 +T E2 03 00 00 01 05 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T ED 03 00 00 AC 67 ED 42 30 49 DD 6E FC DD 66 +R 00 00 01 00 +T F8 03 00 00 FD 29 29 01 00 00 00 00 09 7E 23 +R 00 00 01 00 02 08 33 00 +T 01 04 00 00 B6 23 B6 23 B6 28 34 +R 00 00 01 00 +T 08 04 00 00 +R 00 00 01 00 +T 08 04 00 00 +R 00 00 01 00 +T 08 04 00 00 +R 00 00 01 00 +T 08 04 00 00 DD 6E FC DD 66 FD 29 29 01 +R 00 00 01 00 +T 11 04 00 00 00 00 00 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 02 04 33 00 +T 1A 04 00 00 46 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 20 04 00 00 CD 00 00 00 00 E5 21 1A 02 00 00 +R 00 00 01 00 02 05 01 00 00 0B 02 00 +T 27 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T 2D 04 00 00 CD 00 00 00 00 F1 F1 DD 34 FC 20 +R 00 00 01 00 02 05 01 00 +T 36 04 00 00 03 DD 34 FD +R 00 00 01 00 +T 3A 04 00 00 +R 00 00 01 00 +T 3A 04 00 00 18 A6 +R 00 00 01 00 +T 3C 04 00 00 +R 00 00 01 00 +T 3C 04 00 00 21 1E 02 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 12 00 +T 42 04 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 12 00 02 0A 01 00 +T 49 04 00 00 21 00 00 C3 19 06 00 00 +R 00 00 01 00 00 08 01 00 +T 4F 04 00 00 +R 00 00 01 00 +T 4F 04 00 00 DD 4E 02 DD 46 03 21 01 00 CD +R 00 00 01 00 +T 59 04 00 00 00 00 00 00 D2 9B 05 00 00 +R 00 00 01 00 02 04 35 00 00 09 01 00 +T 5E 04 00 00 +R 00 00 01 00 +T 5E 04 00 00 3E 02 DD AE 02 DD B6 03 20 30 DD +R 00 00 01 00 +T 69 04 00 00 6E 04 DD 66 05 23 23 4E 23 46 11 +R 00 00 01 00 +T 74 04 00 00 F7 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 18 00 +T 79 04 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T 80 04 00 00 20 16 +R 00 00 01 00 +T 82 04 00 00 +R 00 00 01 00 +T 82 04 00 00 +R 00 00 01 00 +T 82 04 00 00 +R 00 00 01 00 +T 82 04 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 8A 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 8F 04 00 00 00 00 00 00 F1 21 00 00 C3 +R 00 00 01 00 02 04 01 00 +T 96 04 00 00 19 06 00 00 +R 00 00 01 00 00 04 01 00 +T 98 04 00 00 +R 00 00 01 00 +T 98 04 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 +T 9F 04 00 00 +R 00 00 01 00 +T 9F 04 00 00 01 05 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T AA 04 00 00 AC 67 ED 42 30 1E +R 00 00 01 00 +T B0 04 00 00 +R 00 00 01 00 +T B0 04 00 00 DD 6E FC DD 66 FD 29 29 01 +R 00 00 01 00 +T B9 04 00 00 00 00 00 00 09 AF 77 23 77 23 77 +R 00 00 01 00 02 04 33 00 +T C2 04 00 00 23 77 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T CC 04 00 00 +R 00 00 01 00 +T CC 04 00 00 18 D1 +R 00 00 01 00 +T CE 04 00 00 +R 00 00 01 00 +T CE 04 00 00 DD 36 FC 01 DD 36 FD 00 +R 00 00 01 00 +T D6 04 00 00 +R 00 00 01 00 +T D6 04 00 00 DD 4E 02 DD 46 03 DD 6E FC DD 66 +R 00 00 01 00 +T E1 04 00 00 FD CD 00 00 00 00 D2 9B 05 00 00 +R 00 00 01 00 02 06 35 00 00 0B 01 00 +T E8 04 00 00 01 05 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T F3 04 00 00 AC 67 ED 42 D2 9B 05 00 00 +R 00 00 01 00 00 09 01 00 +T FA 04 00 00 +R 00 00 01 00 +T FA 04 00 00 +R 00 00 01 00 +T FA 04 00 00 +R 00 00 01 00 +T FA 04 00 00 21 06 00 39 E5 21 06 00 39 E5 21 +R 00 00 01 00 +T 05 05 00 00 06 00 39 E5 21 06 00 39 E5 21 +R 00 00 01 00 +T 0F 05 00 00 20 02 00 00 E5 DD 6E FC DD 66 FD +R 00 00 01 00 00 04 02 00 +T 18 05 00 00 29 DD 4E 04 DD 46 05 09 4E 23 46 +R 00 00 01 00 +T 23 05 00 00 C5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 41 00 02 0B 41 00 +T 29 05 00 00 CD 00 00 00 00 EB 21 0C 00 39 F9 +R 00 00 01 00 02 05 01 00 +T 32 05 00 00 EB 3E 04 AD B4 28 29 +R 00 00 01 00 +T 39 05 00 00 +R 00 00 01 00 +T 39 05 00 00 2A 08 00 00 00 E5 DD 6E 04 DD 66 +R 00 00 01 00 00 05 03 00 +T 42 05 00 00 05 23 23 4E 23 46 C5 0E +R 00 00 01 00 +T 4A 05 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 20 00 02 0A 20 00 +T 50 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 38 00 02 0A 38 00 +T 56 05 00 00 00 00 00 00 F1 F1 F1 F1 21 FF FF +R 00 00 01 00 02 04 01 00 +T 5F 05 00 00 C3 19 06 00 00 +R 00 00 01 00 00 05 01 00 +T 62 05 00 00 +R 00 00 01 00 +T 62 05 00 00 DD 6E FC DD 66 FD 29 DD 4E 04 DD +R 00 00 01 00 +T 6D 05 00 00 46 05 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 37 00 +T 75 05 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 37 00 02 0A 01 00 +T 7C 05 00 00 DD 6E FC DD 66 FD 29 29 11 +R 00 00 01 00 +T 85 05 00 00 FC FF FF FF 19 D1 73 23 72 23 71 +R 00 00 01 00 02 04 33 00 +T 8E 05 00 00 23 70 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 98 05 00 00 +R 00 00 01 00 +T 98 05 00 00 C3 D6 04 00 00 +R 00 00 01 00 00 05 01 00 +T 9B 05 00 00 +R 00 00 01 00 +T 9B 05 00 00 +R 00 00 01 00 +T 9B 05 00 00 21 FE 01 00 00 E5 3E DB 10 00 00 +R 00 00 01 00 00 05 02 00 29 0B 01 00 +T A1 05 00 00 21 DB 10 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 00 05 01 00 02 0A 01 00 +T A8 05 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 +T AF 05 00 00 +R 00 00 01 00 +T AF 05 00 00 01 05 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T BA 05 00 00 AC 67 ED 42 30 49 DD 6E FC DD 66 +R 00 00 01 00 +T C5 05 00 00 FD 29 29 01 00 00 00 00 09 7E 23 +R 00 00 01 00 02 08 33 00 +T CE 05 00 00 B6 23 B6 23 B6 28 34 +R 00 00 01 00 +T D5 05 00 00 +R 00 00 01 00 +T D5 05 00 00 +R 00 00 01 00 +T D5 05 00 00 +R 00 00 01 00 +T D5 05 00 00 DD 6E FC DD 66 FD 29 29 01 +R 00 00 01 00 +T DE 05 00 00 00 00 00 00 09 5E 23 56 23 4E 23 +R 00 00 01 00 02 04 33 00 +T E7 05 00 00 46 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T ED 05 00 00 CD 00 00 00 00 E5 21 1A 02 00 00 +R 00 00 01 00 02 05 01 00 00 0B 02 00 +T F4 05 00 00 E5 3E DB 10 00 00 21 DB 10 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T FA 05 00 00 CD 00 00 00 00 E1 E1 DD 34 FC 20 +R 00 00 01 00 02 05 01 00 +T 03 06 00 00 03 DD 34 FD +R 00 00 01 00 +T 07 06 00 00 +R 00 00 01 00 +T 07 06 00 00 18 A6 +R 00 00 01 00 +T 09 06 00 00 +R 00 00 01 00 +T 09 06 00 00 21 1E 02 00 00 E5 3E DB 10 00 00 +R 00 00 01 00 00 05 02 00 29 0B 01 00 +T 0F 06 00 00 21 DB 10 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 00 05 01 00 02 0A 01 00 +T 16 06 00 00 21 00 00 +R 00 00 01 00 +T 19 06 00 00 +R 00 00 01 00 +T 19 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 13 00 +T 1C 06 00 00 +R 00 00 01 00 +T 1C 06 00 00 CD 00 00 00 00 F8 FF AF DD 77 FA +R 00 00 01 00 02 05 2C 00 +T 25 06 00 00 DD 77 FB AF DD 77 FC DD 77 FD DD +R 00 00 01 00 +T 30 06 00 00 36 FE 2C 02 00 00 DD 36 FF +R 00 00 01 00 09 06 02 00 +T 36 06 00 00 2C 02 00 00 3E 02 DD AE 02 DD B6 +R 00 00 01 00 89 04 02 00 +T 3E 06 00 00 03 C2 26 07 00 00 +R 00 00 01 00 00 06 01 00 +T 42 06 00 00 +R 00 00 01 00 +T 42 06 00 00 AF DD 77 F8 DD 77 F9 +R 00 00 01 00 +T 49 06 00 00 +R 00 00 01 00 +T 49 06 00 00 ED 4B 00 00 00 00 DD 6E F8 DD 66 +R 00 00 01 00 02 06 42 00 +T 52 06 00 00 F9 CD 00 00 00 00 30 4C +R 00 00 01 00 02 06 35 00 +T 58 06 00 00 +R 00 00 01 00 +T 58 06 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 63 06 00 00 C5 11 58 00 DD 4E F8 DD 46 F9 CD +R 00 00 01 00 +T 6E 06 00 00 00 00 00 00 21 00 00 00 00 19 EB +R 00 00 01 00 02 04 2D 00 02 09 36 00 +T 75 06 00 00 3E 00 00 00 00 21 00 00 00 00 C1 +R 00 00 01 00 2B 05 18 00 02 0A 18 00 +T 7B 06 00 00 CD 00 00 00 00 7D B4 20 18 +R 00 00 01 00 02 05 01 00 +T 82 06 00 00 +R 00 00 01 00 +T 82 06 00 00 01 58 00 DD 5E F8 DD 56 F9 CD +R 00 00 01 00 +T 8C 06 00 00 00 00 00 00 21 00 00 00 00 19 DD +R 00 00 01 00 02 04 2D 00 02 09 36 00 +T 93 06 00 00 75 FA DD 74 FB 18 0A +R 00 00 01 00 +T 9A 06 00 00 +R 00 00 01 00 +T 9A 06 00 00 DD 34 F8 20 03 DD 34 F9 +R 00 00 01 00 +T A2 06 00 00 +R 00 00 01 00 +T A2 06 00 00 18 A5 +R 00 00 01 00 +T A4 06 00 00 +R 00 00 01 00 +T A4 06 00 00 DD 7E FA DD B6 FB 20 1F +R 00 00 01 00 +T AC 06 00 00 +R 00 00 01 00 +T AC 06 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T B7 06 00 00 C5 21 47 02 00 00 E5 3E +R 00 00 01 00 00 06 02 00 +T BD 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T C2 06 00 00 00 00 00 00 F1 F1 21 FF FF 18 6E +R 00 00 01 00 02 04 01 00 +T CB 06 00 00 +R 00 00 01 00 +T CB 06 00 00 DD 6E FA DD 66 FB E5 21 +R 00 00 01 00 +T D3 06 00 00 64 02 00 00 E5 3E DB 10 00 00 21 +R 00 00 01 00 00 04 02 00 29 0A 01 00 +T D9 06 00 00 DB 10 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T E0 06 00 00 01 58 00 ED 5B 00 00 00 00 CD +R 00 00 01 00 02 09 42 00 +T E8 06 00 00 00 00 00 00 21 A8 FF FF FF 19 DD +R 00 00 01 00 02 04 2D 00 02 09 36 00 +T EF 06 00 00 75 FC DD 74 FD 4D 44 DD 6E FA DD +R 00 00 01 00 +T FA 06 00 00 66 FB A7 ED 42 30 19 +R 00 00 01 00 +T 01 07 00 00 +R 00 00 01 00 +T 01 07 00 00 21 58 00 E5 DD 4E FC DD 46 FD DD +R 00 00 01 00 +T 0C 07 00 00 5E FA DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T 14 07 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 0A 00 02 09 01 00 +T 1A 07 00 00 +R 00 00 01 00 +T 1A 07 00 00 2A 00 00 00 00 2B 22 00 00 00 00 +R 00 00 01 00 02 05 42 00 02 0B 42 00 +T 21 07 00 00 21 00 00 18 13 +R 00 00 01 00 +T 26 07 00 00 +R 00 00 01 00 +T 26 07 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 2E 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 33 07 00 00 00 00 00 00 F1 21 00 00 +R 00 00 01 00 02 04 01 00 +T 39 07 00 00 +R 00 00 01 00 +T 39 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 13 00 +T 3C 07 00 00 +R 00 00 01 00 +T 3C 07 00 00 CD 00 00 00 00 FA FF 21 +R 00 00 01 00 02 05 2C 00 +T 42 07 00 00 85 02 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 12 00 +T 48 07 00 00 00 00 00 00 CD 00 00 00 00 F1 2A +R 00 00 01 00 02 04 12 00 02 09 01 00 +T 4F 07 00 00 00 00 00 00 7D B4 20 10 +R 00 00 01 00 02 04 42 00 +T 55 07 00 00 +R 00 00 01 00 +T 55 07 00 00 21 9D 02 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 12 00 +T 5B 07 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 12 00 02 0A 01 00 +T 62 07 00 00 C3 21 08 00 00 +R 00 00 01 00 00 05 01 00 +T 65 07 00 00 +R 00 00 01 00 +T 65 07 00 00 AF DD 77 FA DD 77 FB +R 00 00 01 00 +T 6C 07 00 00 +R 00 00 01 00 +T 6C 07 00 00 2A 00 00 00 00 2B DD 4E FA DD 46 +R 00 00 01 00 02 05 42 00 +T 75 07 00 00 FB CD 00 00 00 00 DA 21 08 00 00 +R 00 00 01 00 02 06 35 00 00 0B 01 00 +T 7C 07 00 00 +R 00 00 01 00 +T 7C 07 00 00 01 58 00 DD 5E FA DD 56 FB CD +R 00 00 01 00 +T 86 07 00 00 00 00 00 00 21 00 00 00 00 19 DD +R 00 00 01 00 02 04 2D 00 02 09 36 00 +T 8D 07 00 00 75 FC DD 74 FD 01 1F 00 09 6E 26 +R 00 00 01 00 +T 98 07 00 00 00 29 29 29 29 01 00 00 00 00 09 +R 00 00 01 00 02 0A 02 00 +T A1 07 00 00 DD 75 FE DD 74 FF 21 38 00 DD 4E +R 00 00 01 00 +T AC 07 00 00 FC DD 46 FD 09 E5 21 34 00 09 5E +R 00 00 01 00 +T B7 07 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T BF 07 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T C6 07 00 00 21 20 00 DD 4E FC DD 46 FD 09 4D +R 00 00 01 00 +T D1 07 00 00 44 C5 11 00 00 00 00 21 0A 00 DD +R 00 00 01 00 02 07 3C 00 +T DA 07 00 00 4E FE DD 46 FF 09 4E 23 46 23 7E +R 00 00 01 00 +T E5 07 00 00 69 60 C1 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 08 01 00 +T ED 07 00 00 1F 00 DD 4E FC DD 46 FD 09 6E 26 +R 00 00 01 00 +T F8 07 00 00 00 29 11 00 00 00 00 19 5E 23 56 +R 00 00 01 00 02 07 16 00 +T 01 08 00 00 D5 C5 21 BA 02 00 00 E5 3E +R 00 00 01 00 00 07 02 00 +T 08 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 0D 08 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T 16 08 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T 1E 08 00 00 +R 00 00 01 00 +T 1E 08 00 00 C3 6C 07 00 00 +R 00 00 01 00 00 05 01 00 +T 21 08 00 00 +R 00 00 01 00 +T 21 08 00 00 +R 00 00 01 00 +T 21 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1C 00 +T 24 08 00 00 +R 00 00 01 00 +T 24 08 00 00 CD 00 00 00 00 F2 FF DD 36 FE +R 00 00 01 00 02 05 2C 00 +T 2C 08 00 00 D0 02 00 00 DD 36 FF D0 02 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T 31 08 00 00 DD 5E 02 DD 56 03 7A EE 80 57 21 +R 00 00 01 00 +T 3C 08 00 00 01 80 A7 ED 52 20 06 +R 00 00 01 00 +T 43 08 00 00 +R 00 00 01 00 +T 43 08 00 00 CD 3C 07 00 00 C3 C5 0A 00 00 +R 00 00 01 00 00 05 01 00 00 0A 01 00 +T 49 08 00 00 +R 00 00 01 00 +T 49 08 00 00 21 FB 7F 19 D2 B3 0A 00 00 21 +R 00 00 01 00 00 09 01 00 +T 51 08 00 00 F9 7F 19 DA B3 0A 00 00 01 58 00 +R 00 00 01 00 00 08 01 00 +T 5A 08 00 00 ED 5B 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 06 42 00 02 0B 2D 00 +T 61 08 00 00 21 00 00 00 00 19 DD 75 F2 DD 74 +R 00 00 01 00 02 05 36 00 +T 6A 08 00 00 F3 01 1F 00 C5 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 75 08 00 00 03 03 69 60 4E 23 46 DD 5E F2 DD +R 00 00 01 00 +T 80 08 00 00 56 F3 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 85 08 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 11 00 02 09 01 00 +T 8C 08 00 00 04 00 DD 4E 04 DD 46 05 09 7E 23 +R 00 00 01 00 +T 97 08 00 00 66 6F 5E 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T 9F 08 00 00 00 00 00 00 CD 00 00 00 00 EB CD +R 00 00 01 00 02 04 0B 00 02 09 01 00 +T A6 08 00 00 00 00 00 00 04 00 61 00 65 00 +R 00 00 01 00 02 04 08 00 +T AE 08 00 00 6D 00 6E 00 F4 08 00 00 +R 00 00 01 00 00 08 01 00 +T B4 08 00 00 BC 08 00 00 E6 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B8 08 00 00 CA 08 00 00 D8 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T BC 08 00 00 +R 00 00 01 00 +T BC 08 00 00 21 1F 00 DD 4E F2 DD 46 F3 09 36 +R 00 00 01 00 +T C7 08 00 00 00 18 50 +R 00 00 01 00 +T CA 08 00 00 +R 00 00 01 00 +T CA 08 00 00 21 1F 00 DD 4E F2 DD 46 F3 09 36 +R 00 00 01 00 +T D5 08 00 00 01 18 42 +R 00 00 01 00 +T D8 08 00 00 +R 00 00 01 00 +T D8 08 00 00 21 1F 00 DD 4E F2 DD 46 F3 09 36 +R 00 00 01 00 +T E3 08 00 00 03 18 34 +R 00 00 01 00 +T E6 08 00 00 +R 00 00 01 00 +T E6 08 00 00 21 1F 00 DD 4E F2 DD 46 F3 09 36 +R 00 00 01 00 +T F1 08 00 00 08 18 26 +R 00 00 01 00 +T F4 08 00 00 +R 00 00 01 00 +T F4 08 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T FF 08 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0D 00 +T 06 09 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0D 00 2B 0A 38 00 +T 0C 09 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 38 00 02 09 01 00 +T 13 09 00 00 F1 21 FF FF C3 C8 0A 00 00 +R 00 00 01 00 00 09 01 00 +T 1A 09 00 00 +R 00 00 01 00 +T 1A 09 00 00 21 1F 00 DD 4E F2 DD 46 F3 09 6E +R 00 00 01 00 +T 25 09 00 00 26 00 29 29 29 29 01 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 2E 09 00 00 09 DD 75 FC DD 74 FD 01 0D 00 09 +R 00 00 01 00 +T 39 09 00 00 7E 23 B6 23 B6 20 06 +R 00 00 01 00 +T 40 09 00 00 +R 00 00 01 00 +T 40 09 00 00 21 01 00 C3 C8 0A 00 00 +R 00 00 01 00 00 08 01 00 +T 46 09 00 00 +R 00 00 01 00 +T 46 09 00 00 21 06 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 51 09 00 00 23 46 C5 21 20 00 DD 5E F2 DD 56 +R 00 00 01 00 +T 5C 09 00 00 F3 19 EB 21 0D 00 DD 4E FC DD 46 +R 00 00 01 00 +T 67 09 00 00 FD 09 4E 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 72 09 00 00 00 00 00 00 21 08 00 39 E5 21 +R 00 00 01 00 02 04 01 00 +T 7A 09 00 00 08 00 39 E5 21 08 00 39 E5 21 +R 00 00 01 00 +T 84 09 00 00 08 00 39 E5 21 20 02 00 00 E5 21 +R 00 00 01 00 00 09 02 00 +T 8D 09 00 00 08 00 DD 4E 04 DD 46 05 09 4E 23 +R 00 00 01 00 +T 98 09 00 00 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 41 00 +T 9D 09 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 41 00 02 09 01 00 +T A4 09 00 00 0C 00 39 F9 EB 3E 04 AD B4 28 29 +R 00 00 01 00 +T AF 09 00 00 +R 00 00 01 00 +T AF 09 00 00 2A 08 00 00 00 E5 DD 6E 04 DD 66 +R 00 00 01 00 00 05 03 00 +T B8 09 00 00 05 23 23 4E 23 46 C5 0E +R 00 00 01 00 +T C0 09 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 20 00 02 0A 20 00 +T C6 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 38 00 02 0A 38 00 +T CC 09 00 00 00 00 00 00 F1 F1 F1 F1 21 00 00 +R 00 00 01 00 02 04 01 00 +T D5 09 00 00 C3 C8 0A 00 00 +R 00 00 01 00 00 05 01 00 +T D8 09 00 00 +R 00 00 01 00 +T D8 09 00 00 21 08 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T E3 09 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 37 00 +T E8 09 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 37 00 02 09 01 00 +T EF 09 00 00 34 00 DD 5E F2 DD 56 F3 19 D1 73 +R 00 00 01 00 +T FA 09 00 00 23 72 23 71 23 70 3E 06 DD AE 02 +R 00 00 01 00 +T 05 0A 00 00 DD B6 03 20 27 +R 00 00 01 00 +T 0A 0A 00 00 +R 00 00 01 00 +T 0A 0A 00 00 21 20 00 E5 21 0A 00 DD 4E 04 DD +R 00 00 01 00 +T 15 0A 00 00 46 05 09 4E 23 46 21 38 00 DD 5E +R 00 00 01 00 +T 20 0A 00 00 F2 DD 56 F3 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T 28 0A 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 11 00 02 0A 01 00 +T 2F 0A 00 00 18 0C +R 00 00 01 00 +T 31 0A 00 00 +R 00 00 01 00 +T 31 0A 00 00 21 38 00 DD 4E F2 DD 46 F3 09 36 +R 00 00 01 00 +T 3C 0A 00 00 00 +R 00 00 01 00 +T 3D 0A 00 00 +R 00 00 01 00 +T 3D 0A 00 00 21 38 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T 48 0A 00 00 21 34 00 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 53 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T 59 0A 00 00 00 00 00 00 E5 21 20 00 DD 4E F2 +R 00 00 01 00 02 04 01 00 +T 62 0A 00 00 DD 46 F3 09 4D 44 C5 11 +R 00 00 01 00 +T 6A 0A 00 00 00 00 00 00 21 0A 00 DD 4E FC DD +R 00 00 01 00 02 04 3C 00 +T 73 0A 00 00 46 FD 09 4E 23 46 23 7E 69 60 C1 +R 00 00 01 00 +T 7E 0A 00 00 CD 00 00 00 00 E5 21 1F 00 DD 4E +R 00 00 01 00 02 05 01 00 +T 87 0A 00 00 F2 DD 46 F3 09 6E 26 00 29 11 +R 00 00 01 00 +T 91 0A 00 00 00 00 00 00 19 5E 23 56 D5 C5 21 +R 00 00 01 00 02 04 16 00 +T 9A 0A 00 00 20 03 00 00 E5 3E DB 10 00 00 21 +R 00 00 01 00 00 04 02 00 29 0A 01 00 +T A0 0A 00 00 DB 10 00 00 CD 00 00 00 00 21 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T A6 0A 00 00 0C 00 39 F9 2A 00 00 00 00 23 22 +R 00 00 01 00 02 09 42 00 +T AF 0A 00 00 00 00 00 00 18 12 +R 00 00 01 00 02 04 42 00 +T B3 0A 00 00 +R 00 00 01 00 +T B3 0A 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T BB 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T C0 0A 00 00 00 00 00 00 F1 18 00 +R 00 00 01 00 02 04 01 00 +T C5 0A 00 00 +R 00 00 01 00 +T C5 0A 00 00 21 00 00 +R 00 00 01 00 +T C8 0A 00 00 +R 00 00 01 00 +T C8 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 13 00 +T CB 0A 00 00 +R 00 00 01 00 +T CB 0A 00 00 CD 00 00 00 00 FE FF DD 36 FE +R 00 00 01 00 02 05 2C 00 +T D3 0A 00 00 42 03 00 00 DD 36 FF 42 03 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T D8 0A 00 00 3E 01 DD AE 02 DD B6 03 20 15 +R 00 00 01 00 +T E2 0A 00 00 +R 00 00 01 00 +T E2 0A 00 00 21 00 00 00 00 E5 21 77 03 00 00 +R 00 00 01 00 02 05 28 00 00 0B 02 00 +T E9 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T EF 0A 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 01 00 +T F5 0A 00 00 A4 0B 00 00 +R 00 00 01 00 00 04 01 00 +T F7 0A 00 00 +R 00 00 01 00 +T F7 0A 00 00 3E 02 DD AE 02 DD B6 03 C2 +R 00 00 01 00 +T 00 0B 00 00 94 0B 00 00 +R 00 00 01 00 00 04 01 00 +T 02 0B 00 00 +R 00 00 01 00 +T 02 0B 00 00 01 F7 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 0B 0B 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 18 00 +T 13 0B 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T 1A 0B 00 00 20 12 +R 00 00 01 00 +T 1C 0B 00 00 +R 00 00 01 00 +T 1C 0B 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 24 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 29 0B 00 00 00 00 00 00 F1 18 64 +R 00 00 01 00 02 04 01 00 +T 2E 0B 00 00 +R 00 00 01 00 +T 2E 0B 00 00 01 38 01 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 37 0B 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 18 00 +T 3F 0B 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T 46 0B 00 00 20 22 +R 00 00 01 00 +T 48 0B 00 00 +R 00 00 01 00 +T 48 0B 00 00 01 93 03 00 00 11 00 00 00 00 3E +R 00 00 01 00 00 05 02 00 02 0A 28 00 +T 4F 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 26 00 02 09 26 00 +T 54 0B 00 00 00 00 00 00 21 00 00 00 00 E5 21 +R 00 00 01 00 02 04 01 00 02 09 28 00 +T 5B 0B 00 00 9B 03 00 00 E5 3E DB 10 00 00 21 +R 00 00 01 00 00 04 02 00 29 0A 01 00 +T 61 0B 00 00 DB 10 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 68 0B 00 00 18 28 +R 00 00 01 00 +T 6A 0B 00 00 +R 00 00 01 00 +T 6A 0B 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 75 0B 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 28 00 2B 0A 26 00 +T 7B 0B 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 26 00 02 09 01 00 +T 81 0B 00 00 00 00 00 00 E5 21 9B 03 00 00 E5 +R 00 00 01 00 02 04 28 00 00 0A 02 00 +T 88 0B 00 00 3E DB 10 00 00 21 DB 10 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 8E 0B 00 00 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 01 00 +T 92 0B 00 00 +R 00 00 01 00 +T 92 0B 00 00 +R 00 00 01 00 +T 92 0B 00 00 18 10 +R 00 00 01 00 +T 94 0B 00 00 +R 00 00 01 00 +T 94 0B 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 9C 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T A1 0B 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T A4 0B 00 00 +R 00 00 01 00 +T A4 0B 00 00 +R 00 00 01 00 +T A4 0B 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 13 00 +T AA 0B 00 00 +R 00 00 01 00 +T AA 0B 00 00 CD 00 00 00 00 FE FF DD 36 FE +R 00 00 01 00 02 05 2C 00 +T B2 0B 00 00 BE 03 00 00 DD 36 FF BE 03 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T B7 0B 00 00 3E 01 DD AE 02 DD B6 03 20 15 +R 00 00 01 00 +T C1 0B 00 00 +R 00 00 01 00 +T C1 0B 00 00 21 00 00 00 00 E5 21 FA 03 00 00 +R 00 00 01 00 02 05 1A 00 00 0B 02 00 +T C8 0B 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T CE 0B 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 01 00 +T D4 0B 00 00 71 0C 00 00 +R 00 00 01 00 00 04 01 00 +T D6 0B 00 00 +R 00 00 01 00 +T D6 0B 00 00 3E 02 DD AE 02 DD B6 03 C2 +R 00 00 01 00 +T DF 0B 00 00 61 0C 00 00 +R 00 00 01 00 00 04 01 00 +T E1 0B 00 00 +R 00 00 01 00 +T E1 0B 00 00 01 F7 00 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T EA 0B 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 18 00 +T F2 0B 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T F9 0B 00 00 20 12 +R 00 00 01 00 +T FB 0B 00 00 +R 00 00 01 00 +T FB 0B 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 03 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 08 0C 00 00 00 00 00 00 F1 18 52 +R 00 00 01 00 02 04 01 00 +T 0D 0C 00 00 +R 00 00 01 00 +T 0D 0C 00 00 01 38 01 00 00 DD 6E 04 DD 66 05 +R 00 00 01 00 00 05 02 00 +T 16 0C 00 00 23 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 18 00 +T 1E 0C 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T 25 0C 00 00 20 10 +R 00 00 01 00 +T 27 0C 00 00 +R 00 00 01 00 +T 27 0C 00 00 01 1A 04 00 00 11 00 00 00 00 3E +R 00 00 01 00 00 05 02 00 02 0A 1A 00 +T 2E 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 26 00 02 09 26 00 +T 33 0C 00 00 00 00 00 00 18 28 +R 00 00 01 00 02 04 01 00 +T 37 0C 00 00 +R 00 00 01 00 +T 37 0C 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 42 0C 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 1A 00 2B 0A 26 00 +T 48 0C 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 26 00 02 09 01 00 +T 4E 0C 00 00 00 00 00 00 E5 21 1F 04 00 00 E5 +R 00 00 01 00 02 04 1A 00 00 0A 02 00 +T 55 0C 00 00 3E DB 10 00 00 21 DB 10 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 5B 0C 00 00 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 01 00 +T 5F 0C 00 00 +R 00 00 01 00 +T 5F 0C 00 00 +R 00 00 01 00 +T 5F 0C 00 00 18 10 +R 00 00 01 00 +T 61 0C 00 00 +R 00 00 01 00 +T 61 0C 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 69 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 6E 0C 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T 71 0C 00 00 +R 00 00 01 00 +T 71 0C 00 00 +R 00 00 01 00 +T 71 0C 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 13 00 +T 77 0C 00 00 +R 00 00 01 00 +T 77 0C 00 00 CD 00 00 00 00 EC FF DD 36 FE +R 00 00 01 00 02 05 2C 00 +T 7F 0C 00 00 46 04 00 00 DD 36 FF 46 04 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T 84 0C 00 00 3E 01 DD AE 02 DD B6 03 20 11 +R 00 00 01 00 +T 8E 0C 00 00 +R 00 00 01 00 +T 8E 0C 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 06 00 +T 94 0C 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 9A 0C 00 00 00 00 C3 41 0F 00 00 +R 00 00 01 00 00 07 01 00 +T 9F 0C 00 00 +R 00 00 01 00 +T 9F 0C 00 00 3E 02 DD AE 02 DD B6 03 20 30 DD +R 00 00 01 00 +T AA 0C 00 00 6E 04 DD 66 05 23 23 4E 23 46 11 +R 00 00 01 00 +T B5 0C 00 00 F7 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 18 00 +T BA 0C 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 18 00 02 09 01 00 +T C1 0C 00 00 20 16 +R 00 00 01 00 +T C3 0C 00 00 +R 00 00 01 00 +T C3 0C 00 00 +R 00 00 01 00 +T C3 0C 00 00 +R 00 00 01 00 +T C3 0C 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T CB 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T D0 0C 00 00 00 00 00 00 F1 21 00 00 C3 +R 00 00 01 00 02 04 01 00 +T D7 0C 00 00 41 0F 00 00 +R 00 00 01 00 00 04 01 00 +T D9 0C 00 00 +R 00 00 01 00 +T D9 0C 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T E4 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T EA 0C 00 00 00 00 00 00 DD 75 FC DD 74 FD 7D +R 00 00 01 00 02 04 01 00 +T F3 0C 00 00 B4 20 20 +R 00 00 01 00 +T F6 0C 00 00 +R 00 00 01 00 +T F6 0C 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 01 0D 00 00 C5 21 98 04 00 00 E5 3E +R 00 00 01 00 00 06 02 00 +T 07 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 0C 0D 00 00 00 00 00 00 F1 F1 21 FF FF C3 +R 00 00 01 00 02 04 01 00 +T 14 0D 00 00 41 0F 00 00 +R 00 00 01 00 00 04 01 00 +T 16 0D 00 00 +R 00 00 01 00 +T 16 0D 00 00 3E 02 DD AE 02 DD B6 03 20 14 +R 00 00 01 00 +T 20 0D 00 00 +R 00 00 01 00 +T 20 0D 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 28 0D 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 2F 0D 00 00 00 00 C3 41 0F 00 00 +R 00 00 01 00 00 07 01 00 +T 34 0D 00 00 +R 00 00 01 00 +T 34 0D 00 00 3E 03 DD AE 02 DD B6 03 20 3F +R 00 00 01 00 +T 3E 0D 00 00 +R 00 00 01 00 +T 3E 0D 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 49 0D 00 00 23 46 11 F9 00 00 00 3E +R 00 00 01 00 00 07 02 00 +T 4F 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T 54 0D 00 00 00 00 00 00 7D B4 20 10 +R 00 00 01 00 02 04 01 00 +T 5A 0D 00 00 +R 00 00 01 00 +T 5A 0D 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 34 00 +T 62 0D 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 34 00 02 0A 01 00 +T 69 0D 00 00 10 +R 00 00 01 00 +T 6A 0D 00 00 +R 00 00 01 00 +T 6A 0D 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 72 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 77 0D 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T 7A 0D 00 00 +R 00 00 01 00 +T 7A 0D 00 00 C3 3E 0F 00 00 +R 00 00 01 00 00 05 01 00 +T 7D 0D 00 00 +R 00 00 01 00 +T 7D 0D 00 00 3E 04 DD AE 02 DD B6 03 C2 +R 00 00 01 00 +T 86 0D 00 00 29 0F 00 00 +R 00 00 01 00 00 04 01 00 +T 88 0D 00 00 +R 00 00 01 00 +T 88 0D 00 00 21 06 00 39 E5 21 06 00 39 E5 21 +R 00 00 01 00 +T 93 0D 00 00 06 00 39 E5 21 06 00 39 E5 21 +R 00 00 01 00 +T 9D 0D 00 00 20 02 00 00 E5 21 04 00 DD 4E 04 +R 00 00 01 00 00 04 02 00 +T A6 0D 00 00 DD 46 05 09 4E 23 46 C5 3E +R 00 00 01 00 +T AF 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 41 00 02 09 41 00 +T B4 0D 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T BD 0D 00 00 3E 04 AD B4 20 38 DD 4E EC DD 46 +R 00 00 01 00 +T C8 0D 00 00 ED 21 FF 00 CD 00 00 00 00 38 2A +R 00 00 01 00 02 09 35 00 +T D1 0D 00 00 DD 4E EE DD 46 EF 21 FF 00 CD +R 00 00 01 00 +T DB 0D 00 00 00 00 00 00 38 1C DD 4E F0 DD 46 +R 00 00 01 00 02 04 35 00 +T E4 0D 00 00 F1 21 FF 00 CD 00 00 00 00 38 0E +R 00 00 01 00 02 09 35 00 +T ED 0D 00 00 DD 4E F2 DD 46 F3 21 FF 00 CD +R 00 00 01 00 +T F7 0D 00 00 00 00 00 00 30 2B +R 00 00 01 00 02 04 35 00 +T FB 0D 00 00 +R 00 00 01 00 +T FB 0D 00 00 +R 00 00 01 00 +T FB 0D 00 00 +R 00 00 01 00 +T FB 0D 00 00 2A 08 00 00 00 E5 21 04 00 DD 4E +R 00 00 01 00 00 05 03 00 +T 04 0E 00 00 04 DD 46 05 09 4E 23 46 C5 0E +R 00 00 01 00 +T 0E 0E 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 20 00 02 0A 20 00 +T 14 0E 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 38 00 02 0A 38 00 +T 1A 0E 00 00 00 00 00 00 F1 F1 F1 F1 21 FF FF +R 00 00 01 00 02 04 01 00 +T 23 0E 00 00 C3 41 0F 00 00 +R 00 00 01 00 00 05 01 00 +T 26 0E 00 00 +R 00 00 01 00 +T 26 0E 00 00 21 06 00 39 E5 21 06 00 39 E5 21 +R 00 00 01 00 +T 31 0E 00 00 06 00 39 E5 21 06 00 39 E5 21 +R 00 00 01 00 +T 3B 0E 00 00 20 02 00 00 E5 21 06 00 DD 4E 04 +R 00 00 01 00 00 04 02 00 +T 44 0E 00 00 DD 46 05 09 4E 23 46 C5 3E +R 00 00 01 00 +T 4D 0E 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 41 00 02 09 41 00 +T 52 0E 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T 5B 0E 00 00 3E 04 AD B4 20 38 DD 4E EC DD 46 +R 00 00 01 00 +T 66 0E 00 00 ED 21 FF 00 CD 00 00 00 00 38 2A +R 00 00 01 00 02 09 35 00 +T 6F 0E 00 00 DD 4E EE DD 46 EF 21 FF 00 CD +R 00 00 01 00 +T 79 0E 00 00 00 00 00 00 38 1C DD 4E F0 DD 46 +R 00 00 01 00 02 04 35 00 +T 82 0E 00 00 F1 21 FF 00 CD 00 00 00 00 38 0E +R 00 00 01 00 02 09 35 00 +T 8B 0E 00 00 DD 4E F2 DD 46 F3 21 FF 00 CD +R 00 00 01 00 +T 95 0E 00 00 00 00 00 00 30 2A +R 00 00 01 00 02 04 35 00 +T 99 0E 00 00 +R 00 00 01 00 +T 99 0E 00 00 +R 00 00 01 00 +T 99 0E 00 00 +R 00 00 01 00 +T 99 0E 00 00 2A 08 00 00 00 E5 21 06 00 DD 4E +R 00 00 01 00 00 05 03 00 +T A2 0E 00 00 04 DD 46 05 09 4E 23 46 C5 0E +R 00 00 01 00 +T AC 0E 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 20 00 02 0A 20 00 +T B2 0E 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 38 00 02 0A 38 00 +T B8 0E 00 00 00 00 00 00 F1 F1 F1 F1 21 FF FF +R 00 00 01 00 02 04 01 00 +T C1 0E 00 00 18 7E +R 00 00 01 00 +T C3 0E 00 00 +R 00 00 01 00 +T C3 0E 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T CE 0E 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 37 00 +T D3 0E 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 37 00 02 09 01 00 +T DA 0E 00 00 F4 DD 74 F5 DD 71 F6 DD 70 F7 21 +R 00 00 01 00 +T E5 0E 00 00 06 00 DD 4E 04 DD 46 05 09 5E 23 +R 00 00 01 00 +T F0 0E 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 37 00 02 0B 37 00 +T F6 0E 00 00 CD 00 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 02 05 01 00 +T FF 0E 00 00 DD 71 FA DD 70 FB C5 E5 DD 6E F6 +R 00 00 01 00 +T 0A 0F 00 00 DD 66 F7 E5 DD 6E F4 DD 66 F5 E5 +R 00 00 01 00 +T 15 0F 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 32 00 +T 1D 0F 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 32 00 02 0A 01 00 +T 24 0F 00 00 F1 F1 F1 18 15 +R 00 00 01 00 +T 29 0F 00 00 +R 00 00 01 00 +T 29 0F 00 00 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 31 0F 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 36 0F 00 00 00 00 00 00 F1 21 00 00 18 03 +R 00 00 01 00 02 04 01 00 +T 3E 0F 00 00 +R 00 00 01 00 +T 3E 0F 00 00 +R 00 00 01 00 +T 3E 0F 00 00 21 00 00 +R 00 00 01 00 +T 41 0F 00 00 +R 00 00 01 00 +T 41 0F 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 13 00 +T 44 0F 00 00 +R 00 00 01 00 +T 44 0F 00 00 CD 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 05 25 00 +T 4B 0F 00 00 00 00 00 00 +R 00 00 01 00 02 04 13 00 +T 4D 0F 00 00 +R 00 00 01 00 +T 4D 0F 00 00 CD 00 00 00 00 E2 FF 2A +R 00 00 01 00 02 05 2C 00 +T 53 0F 00 00 00 00 00 00 7D B4 20 33 +R 00 00 01 00 00 04 03 00 +T 59 0F 00 00 +R 00 00 01 00 +T 59 0F 00 00 21 00 00 E5 01 B0 04 00 00 ED 5B +R 00 00 01 00 00 09 02 00 +T 62 0F 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 31 00 +T 67 0F 00 00 00 00 00 00 CD 00 00 00 00 F1 22 +R 00 00 01 00 02 04 31 00 02 09 01 00 +T 6E 0F 00 00 00 00 00 00 7D B4 20 18 +R 00 00 01 00 00 04 03 00 +T 74 0F 00 00 +R 00 00 01 00 +T 74 0F 00 00 2A 00 00 00 00 E5 21 B2 04 00 00 +R 00 00 01 00 00 05 04 00 00 0B 02 00 +T 7B 0F 00 00 E5 3E DB 10 00 00 21 DB 10 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T 81 0F 00 00 CD 00 00 00 00 E1 E1 21 FF FF C3 +R 00 00 01 00 02 05 01 00 +T 8A 0F 00 00 C6 10 00 00 +R 00 00 01 00 00 04 01 00 +T 8C 0F 00 00 +R 00 00 01 00 +T 8C 0F 00 00 +R 00 00 01 00 +T 8C 0F 00 00 21 00 00 39 4D 44 ED 5B +R 00 00 01 00 +T 94 0F 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 3E 00 +T 99 0F 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 3E 00 02 09 01 00 +T A0 0F 00 00 F8 DD 66 F9 ED 4B 02 00 00 00 A7 +R 00 00 01 00 00 0A 03 00 +T A9 0F 00 00 ED 42 20 1E DD 6E FA DD 66 FB ED +R 00 00 01 00 +T B4 0F 00 00 4B 04 00 00 00 ED 42 20 10 DD 6E +R 00 00 01 00 00 05 03 00 +T BD 0F 00 00 E8 DD 66 E9 7D B4 28 06 +R 00 00 01 00 +T C5 0F 00 00 +R 00 00 01 00 +T C5 0F 00 00 +R 00 00 01 00 +T C5 0F 00 00 +R 00 00 01 00 +T C5 0F 00 00 21 00 00 C3 C6 10 00 00 +R 00 00 01 00 00 08 01 00 +T CB 0F 00 00 +R 00 00 01 00 +T CB 0F 00 00 21 00 00 E5 01 B0 04 00 00 ED 5B +R 00 00 01 00 00 09 02 00 +T D4 0F 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 31 00 +T D9 0F 00 00 00 00 00 00 CD 00 00 00 00 F1 22 +R 00 00 01 00 02 04 31 00 02 09 01 00 +T E0 0F 00 00 00 00 00 00 7D B4 20 18 +R 00 00 01 00 00 04 03 00 +T E6 0F 00 00 +R 00 00 01 00 +T E6 0F 00 00 2A 00 00 00 00 E5 21 D0 04 00 00 +R 00 00 01 00 00 05 04 00 00 0B 02 00 +T ED 0F 00 00 E5 3E DB 10 00 00 21 DB 10 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T F3 0F 00 00 CD 00 00 00 00 E1 E1 21 FF FF C3 +R 00 00 01 00 02 05 01 00 +T FC 0F 00 00 C6 10 00 00 +R 00 00 01 00 00 04 01 00 +T FE 0F 00 00 +R 00 00 01 00 +T FE 0F 00 00 21 00 00 39 4D 44 2A 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 07 10 00 00 7D B4 28 0D 21 08 00 ED 5B +R 00 00 01 00 +T 10 10 00 00 00 00 00 00 19 5E 23 56 18 03 +R 00 00 01 00 00 04 03 00 +T 18 10 00 00 +R 00 00 01 00 +T 18 10 00 00 11 FF FF +R 00 00 01 00 +T 1B 10 00 00 +R 00 00 01 00 +T 1B 10 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 23 00 02 0A 23 00 +T 21 10 00 00 00 00 00 00 2A 00 00 00 00 E5 21 +R 00 00 01 00 02 04 01 00 00 09 04 00 +T 28 10 00 00 DF 04 00 00 E5 3E DB 10 00 00 21 +R 00 00 01 00 00 04 02 00 29 0A 01 00 +T 2E 10 00 00 DB 10 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 35 10 00 00 21 16 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 40 10 00 00 EB 22 02 00 00 00 ED 43 +R 00 00 01 00 00 06 03 00 +T 46 10 00 00 04 00 00 00 11 80 00 3E +R 00 00 01 00 00 04 03 00 +T 4C 10 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 30 00 02 09 30 00 +T 51 10 00 00 00 00 00 00 22 06 00 00 00 +R 00 00 01 00 02 04 01 00 00 09 03 00 +T 56 10 00 00 +R 00 00 01 00 +T 56 10 00 00 2A 00 00 00 00 E5 01 80 00 ED 5B +R 00 00 01 00 00 05 03 00 +T 5F 10 00 00 06 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 19 00 +T 64 10 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 19 00 02 09 01 00 +T 6B 10 00 00 B4 28 3D +R 00 00 01 00 +T 6E 10 00 00 +R 00 00 01 00 +T 6E 10 00 00 2A 08 00 00 00 23 22 08 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 75 10 00 00 2A 06 00 00 00 AF B6 28 10 2A +R 00 00 01 00 00 05 03 00 +T 7D 10 00 00 06 00 00 00 7E FE 23 28 08 2A +R 00 00 01 00 00 04 03 00 +T 85 10 00 00 06 00 00 00 7E FE 20 20 02 +R 00 00 01 00 00 04 03 00 +T 8C 10 00 00 +R 00 00 01 00 +T 8C 10 00 00 +R 00 00 01 00 +T 8C 10 00 00 +R 00 00 01 00 +T 8C 10 00 00 18 C8 +R 00 00 01 00 +T 8E 10 00 00 +R 00 00 01 00 +T 8E 10 00 00 21 00 00 E5 ED 4B 06 00 00 00 11 +R 00 00 01 00 00 0A 03 00 +T 97 10 00 00 46 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 0E 00 +T 9C 10 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T A3 10 00 00 A4 3C 20 02 +R 00 00 01 00 +T A7 10 00 00 +R 00 00 01 00 +T A7 10 00 00 18 AD +R 00 00 01 00 +T A9 10 00 00 +R 00 00 01 00 +T A9 10 00 00 18 AB +R 00 00 01 00 +T AB 10 00 00 +R 00 00 01 00 +T AB 10 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 3F 00 +T B1 10 00 00 21 00 00 00 00 CD 00 00 00 00 ED +R 00 00 01 00 02 05 3F 00 02 0A 01 00 +T B8 10 00 00 5B 06 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 03 00 2B 0A 24 00 +T BE 10 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 24 00 02 09 01 00 +T C4 10 00 00 00 00 +R 00 00 01 00 +T C6 10 00 00 +R 00 00 01 00 +T C6 10 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 13 00 +T C9 10 00 00 +R 00 00 01 00 +T C9 10 00 00 C5 01 00 00 21 00 00 22 +R 00 00 01 00 +T D1 10 00 00 02 00 00 00 ED 43 04 00 00 00 C1 +R 00 00 01 00 00 04 03 00 00 0A 03 00 +T D8 10 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T DB 10 00 00 +R 00 00 01 00 +T DB 10 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 2C 00 +T E1 10 00 00 44 00 00 00 7D B4 28 31 +R 00 00 01 00 00 04 04 00 +T E7 10 00 00 +R 00 00 01 00 +T E7 10 00 00 21 0E 00 39 01 02 00 09 DD 75 FE +R 00 00 01 00 +T F2 10 00 00 DD 74 FF 4D 44 DD 5E 0A DD 56 0B +R 00 00 01 00 +T FD 10 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 03 11 00 00 00 00 00 00 21 40 00 ED 4B +R 00 00 01 00 02 04 01 00 +T 0A 11 00 00 00 00 00 00 09 5E 23 56 3E +R 00 00 01 00 02 04 21 00 +T 11 11 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 16 11 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 18 11 00 00 +R 00 00 01 00 +T 18 11 00 00 2A 42 00 00 00 7D B4 28 6C +R 00 00 01 00 00 05 04 00 +T 1F 11 00 00 +R 00 00 01 00 +T 1F 11 00 00 21 00 00 E5 01 EF 04 00 00 11 +R 00 00 01 00 00 09 02 00 +T 27 11 00 00 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 31 00 +T 2C 11 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 31 00 02 09 01 00 +T 33 11 00 00 75 FC DD 74 FD 7D B4 20 0F +R 00 00 01 00 +T 3C 11 00 00 +R 00 00 01 00 +T 3C 11 00 00 21 F2 04 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 12 00 +T 42 11 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 12 00 02 0A 01 00 +T 49 11 00 00 18 40 +R 00 00 01 00 +T 4B 11 00 00 +R 00 00 01 00 +T 4B 11 00 00 21 0E 00 39 01 02 00 09 DD 75 FE +R 00 00 01 00 +T 56 11 00 00 DD 74 FF E5 DD 4E 0A DD 46 0B DD +R 00 00 01 00 +T 61 11 00 00 5E FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 2E 00 +T 69 11 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 2E 00 02 09 01 00 +T 70 11 00 00 5E FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 78 11 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 7F 11 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 3F 00 +T 86 11 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 3F 00 02 09 01 00 +T 8B 11 00 00 +R 00 00 01 00 +T 8B 11 00 00 +R 00 00 01 00 +T 8B 11 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 13 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 62 6F 6F 74 70 74 61 62 00 +R 00 00 02 00 +T 09 00 00 00 +R 00 00 02 00 +T 09 00 00 00 62 6F 6F 74 70 64 20 73 74 61 72 +R 00 00 02 00 +T 14 00 00 00 74 0A 00 +R 00 00 02 00 +T 17 00 00 00 +R 00 00 02 00 +T 17 00 00 00 0A 0A 23 23 23 23 42 4F 4F 54 50 +R 00 00 02 00 +T 22 00 00 00 20 73 65 72 76 65 72 20 73 74 61 +R 00 00 02 00 +T 2D 00 00 00 72 74 69 6E 67 20 61 74 20 25 73 +R 00 00 02 00 +T 38 00 00 00 0A 00 +R 00 00 02 00 +T 3A 00 00 00 +R 00 00 02 00 +T 3A 00 00 00 62 6F 6F 74 70 64 3A 20 63 61 6E +R 00 00 02 00 +T 45 00 00 00 27 74 20 6F 70 65 6E 5F 75 64 70 +R 00 00 02 00 +T 50 00 00 00 0A 00 +R 00 00 02 00 +T 52 00 00 00 +R 00 00 02 00 +T 52 00 00 00 62 6F 6F 74 70 64 20 73 74 6F 70 +R 00 00 02 00 +T 5D 00 00 00 0A 00 +R 00 00 02 00 +T 5F 00 00 00 +R 00 00 02 00 +T 5F 00 00 00 42 6F 6F 74 70 64 20 73 68 75 74 +R 00 00 02 00 +T 6A 00 00 00 64 6F 77 6E 20 25 73 00 +R 00 00 02 00 +T 72 00 00 00 +R 00 00 02 00 +T 72 00 00 00 62 6F 6F 74 70 64 20 6C 6F 67 66 +R 00 00 02 00 +T 7D 00 00 00 69 6C 65 20 5B 3C 66 69 6C 65 5F +R 00 00 02 00 +T 88 00 00 00 6E 61 6D 65 3E 20 7C 20 64 65 66 +R 00 00 02 00 +T 93 00 00 00 61 75 6C 74 5D 20 5B 6F 6E 20 7C +R 00 00 02 00 +T 9E 00 00 00 20 6F 66 66 5D 20 0A 00 +R 00 00 02 00 +T A6 00 00 00 +R 00 00 02 00 +T A6 00 00 00 42 6F 6F 74 70 64 20 6C 6F 67 67 +R 00 00 02 00 +T B1 00 00 00 69 6E 67 20 74 6F 20 66 69 6C 65 +R 00 00 02 00 +T BC 00 00 00 20 27 25 73 27 20 74 75 72 6E 65 +R 00 00 02 00 +T C7 00 00 00 64 20 6F 6E 2E 0A 00 +R 00 00 02 00 +T CE 00 00 00 +R 00 00 02 00 +T CE 00 00 00 42 6F 6F 74 70 64 20 6C 6F 67 67 +R 00 00 02 00 +T D9 00 00 00 69 6E 67 20 74 6F 20 66 69 6C 65 +R 00 00 02 00 +T E4 00 00 00 20 27 25 73 27 20 74 75 72 6E 65 +R 00 00 02 00 +T EF 00 00 00 64 20 6F 66 66 2E 0A 00 +R 00 00 02 00 +T F7 00 00 00 +R 00 00 02 00 +T F7 00 00 00 3F 00 +R 00 00 02 00 +T F9 00 00 00 +R 00 00 02 00 +T F9 00 00 00 6F 66 66 00 +R 00 00 02 00 +T FD 00 00 00 +R 00 00 02 00 +T FD 00 00 00 53 74 6F 70 70 69 6E 67 20 66 69 +R 00 00 02 00 +T 08 01 00 00 6C 65 20 6C 6F 67 67 69 6E 67 20 +R 00 00 02 00 +T 13 01 00 00 61 74 20 25 73 00 +R 00 00 02 00 +T 19 01 00 00 +R 00 00 02 00 +T 19 01 00 00 6F 6E 00 +R 00 00 02 00 +T 1C 01 00 00 +R 00 00 02 00 +T 1C 01 00 00 53 74 61 72 74 69 6E 67 20 66 69 +R 00 00 02 00 +T 27 01 00 00 6C 65 20 6C 6F 67 67 69 6E 67 20 +R 00 00 02 00 +T 32 01 00 00 61 74 20 25 73 00 +R 00 00 02 00 +T 38 01 00 00 +R 00 00 02 00 +T 38 01 00 00 64 65 66 61 75 6C 74 00 +R 00 00 02 00 +T 40 01 00 00 +R 00 00 02 00 +T 40 01 00 00 62 6F 6F 74 70 6C 6F 67 00 +R 00 00 02 00 +T 49 01 00 00 +R 00 00 02 00 +T 49 01 00 00 46 69 6C 65 20 66 6F 72 20 6C 6F +R 00 00 02 00 +T 54 01 00 00 67 67 69 6E 67 20 73 65 74 20 74 +R 00 00 02 00 +T 5F 01 00 00 6F 20 25 73 0A 00 +R 00 00 02 00 +T 65 01 00 00 +R 00 00 02 00 +T 65 01 00 00 62 6F 6F 74 70 64 20 6C 6F 67 73 +R 00 00 02 00 +T 70 01 00 00 63 72 65 65 6E 20 5B 6F 6E 20 7C +R 00 00 02 00 +T 7B 01 00 00 20 6F 66 66 5D 0A 00 +R 00 00 02 00 +T 82 01 00 00 +R 00 00 02 00 +T 82 01 00 00 42 6F 6F 74 70 64 20 6C 6F 67 67 +R 00 00 02 00 +T 8D 01 00 00 69 6E 67 20 6F 6E 20 73 63 72 65 +R 00 00 02 00 +T 98 01 00 00 65 6E 20 74 75 72 6E 65 64 20 6F +R 00 00 02 00 +T A3 01 00 00 6E 2E 0A 00 +R 00 00 02 00 +T A7 01 00 00 +R 00 00 02 00 +T A7 01 00 00 42 6F 6F 74 70 64 20 6C 6F 67 67 +R 00 00 02 00 +T B2 01 00 00 69 6E 67 20 6F 6E 20 73 63 72 65 +R 00 00 02 00 +T BD 01 00 00 65 6E 20 74 75 72 6E 65 64 20 6F +R 00 00 02 00 +T C8 01 00 00 66 66 2E 0A 00 +R 00 00 02 00 +T CD 01 00 00 +R 00 00 02 00 +T CD 01 00 00 62 6F 6F 74 70 64 20 64 6E 73 20 +R 00 00 02 00 +T D8 01 00 00 5B 3C 49 50 20 61 64 64 72 20 6F +R 00 00 02 00 +T E3 01 00 00 66 20 64 6F 6D 61 69 6E 20 6E 61 +R 00 00 02 00 +T EE 01 00 00 6D 65 20 73 65 72 76 65 72 3E 2E +R 00 00 02 00 +T F9 01 00 00 2E 2E 5D 0A 00 +R 00 00 02 00 +T FE 01 00 00 +R 00 00 02 00 +T FE 01 00 00 42 6F 6F 74 70 20 64 6F 6D 61 69 +R 00 00 02 00 +T 09 02 00 00 6E 20 6E 61 6D 65 20 73 65 72 76 +R 00 00 02 00 +T 14 02 00 00 65 72 73 3A 20 00 +R 00 00 02 00 +T 1A 02 00 00 +R 00 00 02 00 +T 1A 02 00 00 20 25 73 00 +R 00 00 02 00 +T 1E 02 00 00 +R 00 00 02 00 +T 1E 02 00 00 0A 00 +R 00 00 02 00 +T 20 02 00 00 +R 00 00 02 00 +T 20 02 00 00 25 64 2E 25 64 2E 25 64 2E 25 64 +R 00 00 02 00 +T 2B 02 00 00 00 +R 00 00 02 00 +T 2C 02 00 00 +R 00 00 02 00 +T 2C 02 00 00 62 6F 6F 74 70 64 20 72 6D 68 6F +R 00 00 02 00 +T 37 02 00 00 73 74 20 3C 68 6F 73 74 20 6E 61 +R 00 00 02 00 +T 42 02 00 00 6D 65 3E 0A 00 +R 00 00 02 00 +T 47 02 00 00 +R 00 00 02 00 +T 47 02 00 00 48 6F 73 74 20 25 73 20 6E 6F 74 +R 00 00 02 00 +T 52 02 00 00 20 69 6E 20 68 6F 73 74 20 74 61 +R 00 00 02 00 +T 5D 02 00 00 62 6C 65 73 2E 0A 00 +R 00 00 02 00 +T 64 02 00 00 +R 00 00 02 00 +T 64 02 00 00 48 6F 73 74 20 25 73 20 72 65 6D +R 00 00 02 00 +T 6F 02 00 00 6F 76 65 64 20 66 72 6F 6D 20 68 +R 00 00 02 00 +T 7A 02 00 00 6F 73 74 20 74 61 62 6C 65 0A 00 +R 00 00 02 00 +T 85 02 00 00 +R 00 00 02 00 +T 85 02 00 00 0A 0A 53 74 61 74 75 73 20 6F 66 +R 00 00 02 00 +T 90 02 00 00 20 68 6F 73 74 20 74 61 62 6C 65 +R 00 00 02 00 +T 9B 02 00 00 0A 00 +R 00 00 02 00 +T 9D 02 00 00 +R 00 00 02 00 +T 9D 02 00 00 20 20 20 20 20 4E 6F 20 68 6F 73 +R 00 00 02 00 +T A8 02 00 00 74 73 20 69 6E 20 68 6F 73 74 20 +R 00 00 02 00 +T B3 02 00 00 74 61 62 6C 65 0A 00 +R 00 00 02 00 +T BA 02 00 00 +R 00 00 02 00 +T BA 02 00 00 25 73 20 20 25 73 20 20 25 73 20 +R 00 00 02 00 +T C5 02 00 00 20 25 73 20 20 27 25 73 27 0A 00 +R 00 00 02 00 +T D0 02 00 00 +R 00 00 02 00 +T D0 02 00 00 62 6F 6F 74 70 64 20 68 6F 73 74 +R 00 00 02 00 +T DB 02 00 00 20 5B 3C 68 6F 73 74 6E 61 6D 65 +R 00 00 02 00 +T E6 02 00 00 3E 20 3C 68 61 72 64 77 61 72 65 +R 00 00 02 00 +T F1 02 00 00 20 74 79 70 65 3E 20 3C 68 61 72 +R 00 00 02 00 +T FC 02 00 00 64 77 61 72 65 20 61 64 64 72 3E +R 00 00 02 00 +T 07 03 00 00 20 3C 69 70 20 61 64 64 72 3E 20 +R 00 00 02 00 +T 12 03 00 00 5B 62 6F 6F 74 20 66 69 6C 65 5D +R 00 00 02 00 +T 1D 03 00 00 5D 0A 00 +R 00 00 02 00 +T 20 03 00 00 +R 00 00 02 00 +T 20 03 00 00 48 6F 73 74 20 61 64 64 65 64 3A +R 00 00 02 00 +T 2B 03 00 00 20 25 73 20 20 25 73 20 20 25 73 +R 00 00 02 00 +T 36 03 00 00 20 20 25 73 20 20 27 25 73 27 0A +R 00 00 02 00 +T 41 03 00 00 00 +R 00 00 02 00 +T 42 03 00 00 +R 00 00 02 00 +T 42 03 00 00 62 6F 6F 74 70 64 20 68 6F 6D 65 +R 00 00 02 00 +T 4D 03 00 00 64 69 72 20 5B 3C 6E 61 6D 65 20 +R 00 00 02 00 +T 58 03 00 00 6F 66 20 68 6F 6D 65 20 64 69 72 +R 00 00 02 00 +T 63 03 00 00 65 63 74 6F 72 79 3E 20 7C 20 64 +R 00 00 02 00 +T 6E 03 00 00 65 66 61 75 6C 74 5D 0A 00 +R 00 00 02 00 +T 77 03 00 00 +R 00 00 02 00 +T 77 03 00 00 42 6F 6F 74 70 20 68 6F 6D 65 20 +R 00 00 02 00 +T 82 03 00 00 64 69 72 65 63 74 6F 72 79 3A 20 +R 00 00 02 00 +T 8D 03 00 00 27 25 73 27 0A 00 +R 00 00 02 00 +T 93 03 00 00 +R 00 00 02 00 +T 93 03 00 00 62 70 66 69 6C 65 73 00 +R 00 00 02 00 +T 9B 03 00 00 +R 00 00 02 00 +T 9B 03 00 00 42 6F 6F 74 70 20 68 6F 6D 65 20 +R 00 00 02 00 +T A6 03 00 00 64 69 72 65 63 74 6F 72 79 20 73 +R 00 00 02 00 +T B1 03 00 00 65 74 20 74 6F 3A 20 27 25 73 27 +R 00 00 02 00 +T BC 03 00 00 0A 00 +R 00 00 02 00 +T BE 03 00 00 +R 00 00 02 00 +T BE 03 00 00 62 6F 6F 74 70 64 20 64 65 66 61 +R 00 00 02 00 +T C9 03 00 00 75 6C 74 66 69 6C 65 20 5B 3C 6E +R 00 00 02 00 +T D4 03 00 00 61 6D 65 20 6F 66 20 64 65 66 61 +R 00 00 02 00 +T DF 03 00 00 75 6C 74 20 62 6F 6F 74 20 66 69 +R 00 00 02 00 +T EA 03 00 00 6C 65 3E 20 7C 20 64 65 66 61 75 +R 00 00 02 00 +T F5 03 00 00 6C 74 5D 0A 00 +R 00 00 02 00 +T FA 03 00 00 +R 00 00 02 00 +T FA 03 00 00 42 6F 6F 74 70 20 64 65 66 61 75 +R 00 00 02 00 +T 05 04 00 00 6C 74 20 62 6F 6F 74 20 66 69 6C +R 00 00 02 00 +T 10 04 00 00 65 3A 20 20 27 25 73 27 0A 00 +R 00 00 02 00 +T 1A 04 00 00 +R 00 00 02 00 +T 1A 04 00 00 62 6F 6F 74 00 +R 00 00 02 00 +T 1F 04 00 00 +R 00 00 02 00 +T 1F 04 00 00 42 6F 6F 74 70 20 64 65 66 61 75 +R 00 00 02 00 +T 2A 04 00 00 6C 74 20 62 6F 6F 74 20 66 69 6C +R 00 00 02 00 +T 35 04 00 00 65 20 73 65 74 20 74 6F 3A 20 20 +R 00 00 02 00 +T 40 04 00 00 27 25 73 27 0A 00 +R 00 00 02 00 +T 46 04 00 00 +R 00 00 02 00 +T 46 04 00 00 62 6F 6F 74 70 64 20 64 79 6E 69 +R 00 00 02 00 +T 51 04 00 00 70 20 5B 3C 6E 65 74 20 6E 61 6D +R 00 00 02 00 +T 5C 04 00 00 65 3E 20 7C 20 3C 6E 65 74 6E 61 +R 00 00 02 00 +T 67 04 00 00 6D 65 3E 20 20 3C 49 50 20 61 64 +R 00 00 02 00 +T 72 04 00 00 64 72 65 73 73 3E 20 3C 49 50 20 +R 00 00 02 00 +T 7D 04 00 00 61 64 64 72 65 73 73 3E 20 7C 20 +R 00 00 02 00 +T 88 04 00 00 3C 6E 65 74 6E 61 6D 65 3E 20 6F +R 00 00 02 00 +T 93 04 00 00 66 66 5D 0A 00 +R 00 00 02 00 +T 98 04 00 00 +R 00 00 02 00 +T 98 04 00 00 6E 65 74 77 6F 72 6B 20 27 25 73 +R 00 00 02 00 +T A3 04 00 00 27 20 6E 6F 74 20 66 6F 75 6E 64 +R 00 00 02 00 +T AE 04 00 00 0A 00 +R 00 00 02 00 +T B0 04 00 00 +R 00 00 02 00 +T B0 04 00 00 72 00 +R 00 00 02 00 +T B2 04 00 00 +R 00 00 02 00 +T B2 04 00 00 43 61 6E 27 74 20 6F 70 65 6E 20 +R 00 00 02 00 +T BD 04 00 00 62 6F 6F 74 70 74 61 62 20 66 69 +R 00 00 02 00 +T C8 04 00 00 6C 65 3A 20 25 73 0A 00 +R 00 00 02 00 +T D0 04 00 00 +R 00 00 02 00 +T D0 04 00 00 43 61 6E 27 74 20 6F 70 65 6E 20 +R 00 00 02 00 +T DB 04 00 00 25 73 0A 00 +R 00 00 02 00 +T DF 04 00 00 +R 00 00 02 00 +T DF 04 00 00 28 72 65 29 72 65 61 64 69 6E 67 +R 00 00 02 00 +T EA 04 00 00 20 25 73 0A 00 +R 00 00 02 00 +T EF 04 00 00 +R 00 00 02 00 +T EF 04 00 00 61 2B 00 +R 00 00 02 00 +T F2 04 00 00 +R 00 00 02 00 +T F2 04 00 00 43 61 6E 6E 6F 74 20 6F 70 65 6E +R 00 00 02 00 +T FD 04 00 00 20 62 6F 6F 74 70 6C 6F 67 2E 0A +R 00 00 02 00 +T 08 05 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 42 00 00 00 +R 00 00 04 00 +T 42 00 00 00 +R 00 00 04 00 +T 44 00 00 00 +R 00 00 04 00 +T 44 00 00 00 +R 00 00 04 00 +T 46 00 00 00 +R 00 00 04 00 +T 46 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 00 00 62 6F 6F 74 70 6C 6F +R 00 00 05 00 00 04 02 00 +T 09 00 00 00 67 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 1F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 40 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 0A 14 00 +T 49 00 00 00 44 0F 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T 53 00 00 00 00 00 00 00 1D 00 00 00 00 00 +R 00 00 05 00 4A 04 39 00 48 08 01 00 +T 5B 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 3B 00 +T 63 00 00 00 D7 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T 6D 00 00 00 00 00 00 00 B6 03 00 00 00 00 +R 00 00 05 00 4A 04 0F 00 48 08 01 00 +T 75 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 1E 00 +T 7D 00 00 00 77 0C 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T 87 00 00 00 00 00 00 00 24 08 00 00 00 00 +R 00 00 05 00 4A 04 2B 00 48 08 01 00 +T 8F 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 1B 00 +T 97 00 00 00 1C 06 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T A1 00 00 00 00 00 00 00 CB 0A 00 00 00 00 +R 00 00 05 00 4A 04 15 00 48 08 01 00 +T A9 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 3D 00 +T B1 00 00 00 AA 0B 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T BB 00 00 00 00 00 00 00 5C 01 00 00 00 00 +R 00 00 05 00 4A 04 2A 00 48 08 01 00 +T C3 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 4A 09 27 00 +T CB 00 00 00 04 03 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 48 04 01 00 +T D5 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T DF 00 00 00 00 00 00 +R 00 00 05 00 diff --git a/src/nos/lib/servers_lib/bootpd.rel b/src/nos/lib/servers_lib/bootpd.rel new file mode 100644 index 00000000..3e79eb94 --- /dev/null +++ b/src/nos/lib/servers_lib/bootpd.rel @@ -0,0 +1,1682 @@ +XL4 +H 7 areas 31 global symbols +S _put16 Ref00000000 +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Arp_type Ref00000000 +S _qdata Ref00000000 +S _memcpy Ref00000000 +S _arp_add Ref00000000 +S _strcat Ref00000000 +S _ctime Ref00000000 +S _readtab Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _R_default Ref00000000 +S _strlen Ref00000000 +S _recv_udp Ref00000000 +S _strcmp Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S .__.ABS. Def00000000 +S _pullup Ref00000000 +S _ip_send Ref00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S _get32 Ref00000000 +S _da_assign Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _calloc Ref00000000 +S _time Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S _free_p Ref00000000 +S _bp_log Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pushdown Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S _bp_ascii Ref00000000 +S _put32 Ref00000000 +S _memcmp Ref00000000 +S _Hostname Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E8B flags 0 +S _bootp_print_packet Def00000677 +S _bootpd Def00000000 +A CSTR size 4E6 flags 0 +A CONST size 5 flags 0 +A UDATA0 size 47E flags 0 +S _Bootpd_stat Def00000478 +S _hosts Def00000000 +A IDATA0 size A8 flags 0 +S _Bootpd_cb Def00000000 +S _ArpNames Def00000098 +S _defaultboot Def00000042 +S _homedir Def00000002 +S _bp_DefaultDomainNS Def00000084 +S _Nhosts Def00000082 +A CDATA0 size A8 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 D4 FE +R 00 00 01 00 02 05 18 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 +R 00 00 01 00 +T 05 00 00 00 21 00 00 39 4D 44 DD 5E 04 DD 56 +R 00 00 01 00 +T 10 00 00 00 05 CD 4D 00 00 00 7D A4 3C 28 31 +R 00 00 01 00 00 06 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 1F 00 00 00 00 00 00 00 7D A4 3C 20 02 +R 00 00 01 00 02 04 02 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 18 22 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 21 00 00 39 7E FE 01 20 11 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 4E 02 DD 46 03 21 00 00 39 5D +R 00 00 01 00 +T 3C 00 00 00 54 CD 5A 01 00 00 18 06 +R 00 00 01 00 00 06 01 00 +T 42 00 00 00 +R 00 00 01 00 +T 42 00 00 00 FE 02 20 02 18 00 +R 00 00 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 18 BB +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0A 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 CD 00 00 00 00 F6 FF 2A +R 00 00 01 00 02 05 18 00 +T 53 00 00 00 78 04 00 00 23 22 78 04 00 00 21 +R 00 00 01 00 00 04 04 00 00 0A 04 00 +T 5A 00 00 00 06 00 39 E5 21 02 00 39 4D 44 DD +R 00 00 01 00 +T 65 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0D 00 +T 6D 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 0D 00 02 09 02 00 +T 74 00 00 00 75 FE DD 74 FF 7D A4 3C 20 06 +R 00 00 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 21 FF FF C3 57 01 00 00 +R 00 00 01 00 00 08 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 01 2C 81 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 8F 00 00 00 AC 67 ED 42 30 23 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 2A 7A 04 00 00 23 22 7A 04 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T 9C 00 00 00 DD 6E 04 DD 66 05 36 00 21 06 00 +R 00 00 01 00 +T A7 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 1D 00 +T AD 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1D 00 02 09 02 00 +T B3 00 00 00 FF FF C3 57 01 00 00 +R 00 00 01 00 00 07 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 21 2C 01 E5 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T C3 00 00 00 08 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 11 00 +T CB 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 11 00 02 09 02 00 +T D2 00 00 00 06 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1D 00 +T DA 00 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 1D 00 02 09 02 00 +T E1 00 00 00 04 DD 66 05 46 05 05 28 1E DD 6E +R 00 00 01 00 +T EC 00 00 00 04 DD 66 05 46 05 28 14 +R 00 00 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 2A 7C 04 00 00 23 22 7C 04 00 00 +R 00 00 01 00 00 05 04 00 00 0B 04 00 +T FB 00 00 00 DD 6E 04 DD 66 05 36 00 21 FF FF +R 00 00 01 00 +T 06 01 00 00 18 4F +R 00 00 01 00 +T 08 01 00 00 +R 00 00 01 00 +T 08 01 00 00 21 0C 00 DD 4E 04 DD 46 05 09 EB +R 00 00 01 00 +T 13 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T 19 01 00 00 00 00 00 00 E5 21 0C 00 DD 5E 04 +R 00 00 01 00 02 04 02 00 +T 22 01 00 00 DD 56 05 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 2D 01 00 00 70 21 18 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T 38 01 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 3E 01 00 00 CD 00 00 00 00 E5 21 18 00 DD 5E +R 00 00 01 00 02 05 02 00 +T 47 01 00 00 04 DD 56 05 19 D1 73 23 72 23 71 +R 00 00 01 00 +T 52 01 00 00 23 70 21 00 00 +R 00 00 01 00 +T 57 01 00 00 +R 00 00 01 00 +T 57 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0F 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 CD 00 00 00 00 70 FF 21 86 00 39 +R 00 00 01 00 02 05 18 00 +T 63 01 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1A 00 +T 68 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1A 00 02 09 02 00 +T 6E 01 00 00 86 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 76 01 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 08 00 02 09 02 00 +T 7D 01 00 00 3C 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 1E 00 +T 83 01 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T 8A 01 00 00 21 18 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 95 01 00 00 23 B6 23 B6 23 B6 28 10 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 21 5F 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 1E 00 +T A3 01 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 1E 00 02 0A 02 00 +T AA 01 00 00 C3 74 06 00 00 +R 00 00 01 00 00 05 01 00 +T AD 01 00 00 +R 00 00 01 00 +T AD 01 00 00 21 2C 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T B8 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T BE 01 00 00 00 00 00 00 7D B4 28 38 21 2C 00 +R 00 00 01 00 02 04 02 00 +T C7 01 00 00 DD 4E 02 DD 46 03 09 4D 44 ED 5B +R 00 00 01 00 +T D2 01 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 26 00 2B 09 0E 00 +T D7 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0E 00 02 09 02 00 +T DE 01 00 00 28 1C +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 21 2C 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T EB 01 00 00 21 90 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 1E 00 +T F1 01 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 1E 00 02 0A 02 00 +T F8 01 00 00 E1 C3 74 06 00 00 +R 00 00 01 00 00 06 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 21 00 00 39 E5 01 2C 01 11 01 00 +R 00 00 01 00 +T 07 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 19 00 02 0A 19 00 +T 0D 02 00 00 00 00 00 00 4D 44 E1 71 23 70 21 +R 00 00 01 00 02 04 02 00 +T 16 02 00 00 EC 00 E5 DD 4E 02 DD 46 03 21 +R 00 00 01 00 +T 20 02 00 00 02 00 39 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 28 02 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 05 00 02 0A 02 00 +T 2F 02 00 00 21 00 00 39 7E 23 66 6F 36 02 AF +R 00 00 01 00 +T 3A 02 00 00 DD 77 F2 DD 77 F3 21 0C 00 DD 4E +R 00 00 01 00 +T 45 02 00 00 02 DD 46 03 09 7E 23 B6 23 B6 23 +R 00 00 01 00 +T 50 02 00 00 B6 C2 2C 04 00 00 +R 00 00 01 00 00 06 01 00 +T 54 02 00 00 +R 00 00 01 00 +T 54 02 00 00 DD 6E 02 DD 66 03 23 6E 26 00 29 +R 00 00 01 00 +T 5F 02 00 00 29 29 29 01 00 00 00 00 09 DD 75 +R 00 00 01 00 02 08 03 00 +T 68 02 00 00 FE DD 74 FF 21 1C 00 DD 4E 02 DD +R 00 00 01 00 +T 73 02 00 00 46 03 09 4D 44 C5 11 00 00 00 00 +R 00 00 01 00 02 0B 23 00 +T 7C 02 00 00 21 0A 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 87 02 00 00 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 8F 02 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 02 00 +T 98 02 00 00 23 6E 26 00 29 01 98 00 00 00 09 +R 00 00 01 00 00 0A 05 00 +T A1 02 00 00 4E 23 46 C5 21 BB 00 00 00 E5 3E +R 00 00 01 00 00 09 02 00 +T AA 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1E 00 02 09 1E 00 +T AF 02 00 00 00 00 00 00 E1 E1 E1 DD 36 F2 +R 00 00 01 00 02 04 02 00 +T B7 02 00 00 00 00 00 00 DD 36 F3 00 00 00 00 +R 00 00 01 00 09 04 04 00 89 0B 04 00 +T BC 02 00 00 AF DD 77 F4 DD 77 F5 +R 00 00 01 00 +T C3 02 00 00 +R 00 00 01 00 +T C3 02 00 00 ED 4B 82 00 00 00 DD 6E F4 DD 66 +R 00 00 01 00 00 06 05 00 +T CC 02 00 00 F5 CD 00 00 00 00 30 60 +R 00 00 01 00 02 06 1B 00 +T D2 02 00 00 +R 00 00 01 00 +T D2 02 00 00 21 1F 00 DD 4E F2 DD 46 F3 09 E5 +R 00 00 01 00 +T DD 02 00 00 DD 6E 02 DD 66 03 23 7E E1 BE 20 +R 00 00 01 00 +T E8 02 00 00 32 DD 6E 02 DD 66 03 23 23 4E 06 +R 00 00 01 00 +T F3 02 00 00 00 C5 21 20 00 DD 4E F2 DD 46 F3 +R 00 00 01 00 +T FE 02 00 00 09 4D 44 21 1C 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 09 03 00 00 03 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 25 00 +T 0F 03 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 25 00 02 09 02 00 +T 16 03 00 00 B4 20 02 +R 00 00 01 00 +T 19 03 00 00 +R 00 00 01 00 +T 19 03 00 00 +R 00 00 01 00 +T 19 03 00 00 +R 00 00 01 00 +T 19 03 00 00 18 17 +R 00 00 01 00 +T 1B 03 00 00 +R 00 00 01 00 +T 1B 03 00 00 DD 34 F4 20 03 DD 34 F5 +R 00 00 01 00 +T 23 03 00 00 +R 00 00 01 00 +T 23 03 00 00 DD 7E F2 C6 58 DD 77 F2 30 03 DD +R 00 00 01 00 +T 2E 03 00 00 34 F3 +R 00 00 01 00 +T 30 03 00 00 +R 00 00 01 00 +T 30 03 00 00 18 91 +R 00 00 01 00 +T 32 03 00 00 +R 00 00 01 00 +T 32 03 00 00 2A 82 00 00 00 DD 4E F4 DD 46 F5 +R 00 00 01 00 00 05 05 00 +T 3B 03 00 00 A7 ED 42 C2 D6 03 00 00 +R 00 00 01 00 00 08 01 00 +T 41 03 00 00 +R 00 00 01 00 +T 41 03 00 00 AF DD 77 F2 DD 77 F3 21 8A 00 39 +R 00 00 01 00 +T 4C 03 00 00 E5 21 1C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 57 03 00 00 4D 44 DD 5E 04 DD 56 05 3E +R 00 00 01 00 +T 60 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T 65 03 00 00 00 00 00 00 F1 7D B4 28 1F +R 00 00 01 00 02 04 02 00 +T 6C 03 00 00 +R 00 00 01 00 +T 6C 03 00 00 21 00 00 39 5E 23 56 3E +R 00 00 01 00 +T 74 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 79 03 00 00 00 00 00 00 21 D8 00 00 00 E5 3E +R 00 00 01 00 02 04 02 00 00 09 02 00 +T 80 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1E 00 02 09 1E 00 +T 85 03 00 00 00 00 00 00 E1 C3 74 06 00 00 +R 00 00 01 00 02 04 02 00 00 0A 01 00 +T 8B 03 00 00 +R 00 00 01 00 +T 8B 03 00 00 DD 6E FC DD 66 FD E5 DD 6E FA DD +R 00 00 01 00 +T 96 03 00 00 66 FB E5 21 10 00 E5 21 06 00 39 +R 00 00 01 00 +T A1 03 00 00 4E 23 46 E1 09 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 24 00 +T A9 03 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 24 00 02 0A 02 00 +T B0 03 00 00 F1 DD 4E FC DD 46 FD DD 5E FA DD +R 00 00 01 00 +T BB 03 00 00 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T C0 03 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 01 00 02 09 02 00 +T C7 03 00 00 FE 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 1E 00 +T CD 03 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T D4 03 00 00 18 53 +R 00 00 01 00 +T D6 03 00 00 +R 00 00 01 00 +T D6 03 00 00 21 34 00 DD 4E F2 DD 46 F3 09 5E +R 00 00 01 00 +T E1 03 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T E9 03 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 02 00 +T F0 03 00 00 21 21 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 1E 00 +T F6 03 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 1E 00 02 0A 02 00 +T FD 03 00 00 E1 21 34 00 DD 4E F2 DD 46 F3 09 +R 00 00 01 00 +T 08 04 00 00 4E 23 46 23 5E 23 56 D5 C5 21 +R 00 00 01 00 +T 12 04 00 00 10 00 E5 21 06 00 39 4E 23 46 E1 +R 00 00 01 00 +T 1D 04 00 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 24 00 +T 22 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 24 00 02 09 02 00 +T 29 04 00 00 +R 00 00 01 00 +T 29 04 00 00 C3 19 05 00 00 +R 00 00 01 00 00 05 01 00 +T 2C 04 00 00 +R 00 00 01 00 +T 2C 04 00 00 21 0C 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 37 04 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 3F 04 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 02 00 +T 46 04 00 00 21 43 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 1E 00 +T 4C 04 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 1E 00 02 0A 02 00 +T 53 04 00 00 E1 DD 36 F2 00 00 00 00 DD 36 F3 +R 00 00 01 00 09 08 04 00 +T 5B 04 00 00 00 00 00 00 AF DD 77 F4 DD 77 F5 +R 00 00 01 00 89 04 04 00 +T 63 04 00 00 +R 00 00 01 00 +T 63 04 00 00 ED 4B 82 00 00 00 DD 6E F4 DD 66 +R 00 00 01 00 00 06 05 00 +T 6C 04 00 00 F5 CD 00 00 00 00 30 4B +R 00 00 01 00 02 06 1B 00 +T 72 04 00 00 +R 00 00 01 00 +T 72 04 00 00 21 34 00 DD 4E F2 DD 46 F3 09 4E +R 00 00 01 00 +T 7D 04 00 00 23 46 23 5E 23 56 D5 C5 21 0C 00 +R 00 00 01 00 +T 88 04 00 00 DD 4E 02 DD 46 03 09 4E 23 46 23 +R 00 00 01 00 +T 93 04 00 00 5E 23 56 69 60 C1 A7 ED 42 C1 20 +R 00 00 01 00 +T 9E 04 00 00 07 EB ED 42 20 02 +R 00 00 01 00 +T A4 04 00 00 +R 00 00 01 00 +T A4 04 00 00 18 17 +R 00 00 01 00 +T A6 04 00 00 +R 00 00 01 00 +T A6 04 00 00 DD 34 F4 20 03 DD 34 F5 +R 00 00 01 00 +T AE 04 00 00 +R 00 00 01 00 +T AE 04 00 00 DD 7E F2 C6 58 DD 77 F2 30 03 DD +R 00 00 01 00 +T B9 04 00 00 34 F3 +R 00 00 01 00 +T BB 04 00 00 +R 00 00 01 00 +T BB 04 00 00 18 A6 +R 00 00 01 00 +T BD 04 00 00 +R 00 00 01 00 +T BD 04 00 00 2A 82 00 00 00 DD 4E F4 DD 46 F5 +R 00 00 01 00 00 05 05 00 +T C6 04 00 00 A7 ED 42 20 16 +R 00 00 01 00 +T CB 04 00 00 +R 00 00 01 00 +T CB 04 00 00 AF DD 77 F2 DD 77 F3 21 +R 00 00 01 00 +T D3 04 00 00 5F 01 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 1E 00 +T D9 04 00 00 00 00 00 00 CD 00 00 00 00 E1 18 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T E0 04 00 00 0D +R 00 00 01 00 +T E1 04 00 00 +R 00 00 01 00 +T E1 04 00 00 21 8A 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 1E 00 +T E7 04 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 1E 00 02 0A 02 00 +T EE 04 00 00 +R 00 00 01 00 +T EE 04 00 00 21 0C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T F9 04 00 00 23 46 23 5E 23 56 D5 C5 21 0C 00 +R 00 00 01 00 +T 04 05 00 00 E5 21 06 00 39 4E 23 46 E1 09 EB +R 00 00 01 00 +T 0F 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 24 00 02 0A 24 00 +T 15 05 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 +T 19 05 00 00 +R 00 00 01 00 +T 19 05 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 24 05 00 00 23 46 23 5E 23 56 D5 C5 21 14 00 +R 00 00 01 00 +T 2F 05 00 00 E5 21 06 00 39 4E 23 46 E1 09 EB +R 00 00 01 00 +T 3A 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 24 00 02 0A 24 00 +T 40 05 00 00 00 00 00 00 F1 F1 DD 36 B2 00 21 +R 00 00 01 00 02 04 02 00 +T 49 05 00 00 6C 00 DD 4E 02 DD 46 03 09 7E B7 +R 00 00 01 00 +T 54 05 00 00 20 45 +R 00 00 01 00 +T 56 05 00 00 +R 00 00 01 00 +T 56 05 00 00 DD 7E F2 DD B6 F3 28 0E 21 38 00 +R 00 00 01 00 +T 61 05 00 00 DD 4E F2 DD 46 F3 09 7E B7 20 13 +R 00 00 01 00 +T 6C 05 00 00 +R 00 00 01 00 +T 6C 05 00 00 +R 00 00 01 00 +T 6C 05 00 00 +R 00 00 01 00 +T 6C 05 00 00 01 42 00 00 00 21 42 00 39 5D 54 +R 00 00 01 00 00 05 05 00 +T 75 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 15 00 02 0A 15 00 +T 7B 05 00 00 00 00 00 00 18 1A +R 00 00 01 00 02 04 02 00 +T 7F 05 00 00 +R 00 00 01 00 +T 7F 05 00 00 21 38 00 DD 4E F2 DD 46 F3 09 4D +R 00 00 01 00 +T 8A 05 00 00 44 21 42 00 39 5D 54 3E +R 00 00 01 00 +T 92 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 97 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 99 05 00 00 +R 00 00 01 00 +T 99 05 00 00 18 1A +R 00 00 01 00 +T 9B 05 00 00 +R 00 00 01 00 +T 9B 05 00 00 21 6C 00 DD 4E 02 DD 46 03 09 4D +R 00 00 01 00 +T A6 05 00 00 44 21 42 00 39 5D 54 3E +R 00 00 01 00 +T AE 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T B3 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T B5 05 00 00 +R 00 00 01 00 +T B5 05 00 00 21 02 00 39 36 00 3A 02 00 00 00 +R 00 00 01 00 00 0B 05 00 +T BE 05 00 00 B7 28 28 AF DD B6 B2 28 22 +R 00 00 01 00 +T C7 05 00 00 +R 00 00 01 00 +T C7 05 00 00 +R 00 00 01 00 +T C7 05 00 00 +R 00 00 01 00 +T C7 05 00 00 01 02 00 00 00 21 02 00 39 5D 54 +R 00 00 01 00 00 05 05 00 +T D0 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 15 00 02 0A 15 00 +T D6 05 00 00 00 00 00 00 01 A3 01 00 00 21 +R 00 00 01 00 02 04 02 00 00 09 02 00 +T DC 05 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T E4 05 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 07 00 02 09 02 00 +T E9 05 00 00 +R 00 00 01 00 +T E9 05 00 00 DD 7E B2 FE 2F 20 16 +R 00 00 01 00 +T F0 05 00 00 +R 00 00 01 00 +T F0 05 00 00 21 42 00 39 4D 44 21 02 00 39 5D +R 00 00 01 00 +T FB 05 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 15 00 02 0B 15 00 +T 01 06 00 00 CD 00 00 00 00 18 14 +R 00 00 01 00 02 05 02 00 +T 06 06 00 00 +R 00 00 01 00 +T 06 06 00 00 21 42 00 39 4D 44 21 02 00 39 5D +R 00 00 01 00 +T 11 06 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 17 06 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 1A 06 00 00 +R 00 00 01 00 +T 1A 06 00 00 21 02 00 39 4D 44 21 6C 00 E5 21 +R 00 00 01 00 +T 25 06 00 00 02 00 39 5E 23 56 E1 19 EB 3E +R 00 00 01 00 +T 2F 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 34 06 00 00 00 00 00 00 DD 6E F2 DD 66 F3 E5 +R 00 00 01 00 02 04 02 00 +T 3D 06 00 00 DD 4E 04 DD 46 05 21 EC 00 E5 21 +R 00 00 01 00 +T 48 06 00 00 04 00 39 5E 23 56 E1 19 EB CD +R 00 00 01 00 +T 52 06 00 00 98 0A 00 00 E1 DD 4E 04 DD 46 05 +R 00 00 01 00 00 04 01 00 +T 5B 06 00 00 21 00 00 39 5E 23 56 CD +R 00 00 01 00 +T 63 06 00 00 1E 0D 00 00 21 00 00 39 5E 23 56 +R 00 00 01 00 00 04 01 00 +T 6C 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 72 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0F 00 +T 77 06 00 00 +R 00 00 01 00 +T 77 06 00 00 CD 00 00 00 00 1A 4F 06 00 C5 21 +R 00 00 01 00 02 05 14 00 +T 80 06 00 00 A5 01 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 1E 00 +T 86 06 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T 8D 06 00 00 DD 6E 02 DD 66 03 23 4E 06 00 C5 +R 00 00 01 00 +T 98 06 00 00 21 CF 01 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 1E 00 +T 9E 06 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 1E 00 02 0A 02 00 +T A5 06 00 00 E1 DD 6E 02 DD 66 03 23 23 4E 06 +R 00 00 01 00 +T B0 06 00 00 00 C5 21 F9 01 00 00 E5 3E +R 00 00 01 00 00 07 02 00 +T B7 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1E 00 02 09 1E 00 +T BC 06 00 00 00 00 00 00 E1 E1 DD 6E 02 DD 66 +R 00 00 01 00 02 04 02 00 +T C5 06 00 00 03 23 23 23 4E 06 00 C5 21 +R 00 00 01 00 +T CE 06 00 00 23 02 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 1E 00 +T D4 06 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T DB 06 00 00 21 04 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T E6 06 00 00 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T EF 06 00 00 4D 02 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 1E 00 +T F5 06 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T FC 06 00 00 E1 21 08 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 07 07 00 00 5E 23 56 D5 21 78 02 00 00 E5 3E +R 00 00 01 00 00 09 02 00 +T 10 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1E 00 02 09 1E 00 +T 15 07 00 00 00 00 00 00 E1 E1 21 0A 00 09 5E +R 00 00 01 00 02 04 02 00 +T 1E 07 00 00 23 56 D5 21 A2 02 00 00 E5 3E +R 00 00 01 00 00 08 02 00 +T 26 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1E 00 02 09 1E 00 +T 2B 07 00 00 00 00 00 00 E1 E1 21 0C 00 09 5E +R 00 00 01 00 02 04 02 00 +T 34 07 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 3C 07 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 02 00 +T 43 07 00 00 21 CC 02 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 1E 00 +T 49 07 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 1E 00 02 0A 02 00 +T 50 07 00 00 E1 21 10 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 5B 07 00 00 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 63 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 68 07 00 00 00 00 00 00 E5 21 F6 02 00 00 E5 +R 00 00 01 00 02 04 02 00 00 0A 02 00 +T 6F 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1E 00 02 0A 1E 00 +T 75 07 00 00 00 00 00 00 E1 E1 21 14 00 DD 4E +R 00 00 01 00 02 04 02 00 +T 7E 07 00 00 02 DD 46 03 09 5E 23 56 23 4E 23 +R 00 00 01 00 +T 89 07 00 00 46 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 8F 07 00 00 CD 00 00 00 00 E5 21 20 03 00 00 +R 00 00 01 00 02 05 02 00 00 0B 02 00 +T 96 07 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1E 00 02 0B 1E 00 +T 9C 07 00 00 CD 00 00 00 00 E1 E1 21 18 00 DD +R 00 00 01 00 02 05 02 00 +T A5 07 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T B0 07 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T B5 07 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 01 00 02 09 02 00 +T BC 07 00 00 4A 03 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 1E 00 +T C2 07 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T C9 07 00 00 21 21 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T D4 07 00 00 16 00 D5 21 20 00 09 5E 16 00 D5 +R 00 00 01 00 +T DF 07 00 00 21 1F 00 09 5E 16 00 D5 21 1E 00 +R 00 00 01 00 +T EA 07 00 00 09 5E 16 00 D5 21 1D 00 09 5E 16 +R 00 00 01 00 +T F5 07 00 00 00 D5 21 1C 00 09 5E 16 00 D5 21 +R 00 00 01 00 +T 00 08 00 00 74 03 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 1E 00 +T 06 08 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T 0C 08 00 00 0E 00 39 F9 21 2C 00 09 E5 21 +R 00 00 01 00 +T 16 08 00 00 AD 03 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 1E 00 +T 1C 08 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T 23 08 00 00 21 6C 00 09 E5 21 D9 03 00 00 E5 +R 00 00 01 00 00 0A 02 00 +T 2C 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1E 00 02 0A 1E 00 +T 32 08 00 00 00 00 00 00 E1 E1 21 EC 00 09 EB +R 00 00 01 00 02 04 02 00 +T 3B 08 00 00 CD 41 08 00 00 C3 00 00 00 00 +R 00 00 01 00 00 05 01 00 02 0A 0A 00 +T 41 08 00 00 +R 00 00 01 00 +T 41 08 00 00 CD 00 00 00 00 F6 FF DD 6E 02 DD +R 00 00 01 00 02 05 18 00 +T 4A 08 00 00 66 03 DD 75 F9 DD 74 FA DD 6E 02 +R 00 00 01 00 +T 55 08 00 00 DD 66 03 23 23 23 4E 06 00 C5 DD +R 00 00 01 00 +T 60 08 00 00 6E 02 DD 66 03 23 23 4E 06 00 C5 +R 00 00 01 00 +T 6B 08 00 00 DD 6E 02 DD 66 03 23 4E 06 00 C5 +R 00 00 01 00 +T 76 08 00 00 DD 6E 02 DD 66 03 4E 06 00 C5 21 +R 00 00 01 00 +T 81 08 00 00 05 04 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 1E 00 +T 87 08 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T 8E 08 00 00 E1 E1 E1 21 04 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 99 08 00 00 03 09 DD 75 02 DD 74 03 +R 00 00 01 00 +T A1 08 00 00 +R 00 00 01 00 +T A1 08 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T AC 08 00 00 74 03 2B 46 DD 70 F6 04 CA +R 00 00 01 00 +T B5 08 00 00 95 0A 00 00 DD 4E F9 DD 46 FA DD +R 00 00 01 00 00 04 01 00 +T BE 08 00 00 6E 02 DD 66 03 A7 ED 42 4D 44 21 +R 00 00 01 00 +T C9 08 00 00 40 00 CD 00 00 00 00 DA +R 00 00 01 00 02 07 1B 00 +T CF 08 00 00 95 0A 00 00 +R 00 00 01 00 00 04 01 00 +T D1 08 00 00 +R 00 00 01 00 +T D1 08 00 00 +R 00 00 01 00 +T D1 08 00 00 +R 00 00 01 00 +T D1 08 00 00 DD 5E F6 CD 00 00 00 00 05 00 00 +R 00 00 01 00 02 08 22 00 +T DA 08 00 00 01 03 06 0C 6E 0A 00 00 +R 00 00 01 00 00 08 01 00 +T E0 08 00 00 3F 09 00 00 79 09 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T E4 08 00 00 F4 09 00 00 EC 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T E8 08 00 00 EA 08 00 00 +R 00 00 01 00 00 04 01 00 +T EA 08 00 00 +R 00 00 01 00 +T EA 08 00 00 18 B5 +R 00 00 01 00 +T EC 08 00 00 +R 00 00 01 00 +T EC 08 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T F7 08 00 00 74 03 2B 4E 06 00 DD 71 F7 DD 70 +R 00 00 01 00 +T 02 09 00 00 F8 DD 6E 02 DD 66 03 DD 75 FB DD +R 00 00 01 00 +T 0D 09 00 00 74 FC 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 17 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 1C 09 00 00 00 00 00 00 E5 21 3E 04 00 00 E5 +R 00 00 01 00 02 04 02 00 00 0A 02 00 +T 23 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1E 00 02 0A 1E 00 +T 29 09 00 00 00 00 00 00 E1 E1 21 0C 00 39 7E +R 00 00 01 00 02 04 02 00 +T 32 09 00 00 DD 86 F7 77 23 7E DD 8E F8 77 C3 +R 00 00 01 00 +T 3D 09 00 00 92 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 3F 09 00 00 +R 00 00 01 00 +T 3F 09 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 4A 09 00 00 74 03 2B 4E 06 00 DD 71 F7 DD 70 +R 00 00 01 00 +T 55 09 00 00 F8 DD 6E 02 DD 66 03 E5 21 +R 00 00 01 00 +T 5E 09 00 00 68 04 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 0A 1E 00 +T 64 09 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 1E 00 02 09 02 00 +T 6B 09 00 00 21 0C 00 39 7E 81 77 23 7E 88 77 +R 00 00 01 00 +T 76 09 00 00 C3 92 0A 00 00 +R 00 00 01 00 00 05 01 00 +T 79 09 00 00 +R 00 00 01 00 +T 79 09 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 84 09 00 00 74 03 2B 4E 06 00 DD 71 F7 DD 70 +R 00 00 01 00 +T 8F 09 00 00 F8 AF DD 77 FD DD 77 FE +R 00 00 01 00 +T 97 09 00 00 +R 00 00 01 00 +T 97 09 00 00 01 04 00 DD 5E F7 DD 56 F8 CD +R 00 00 01 00 +T A1 09 00 00 00 00 00 00 4B 42 DD 6E FD DD 66 +R 00 00 01 00 02 04 1F 00 +T AA 09 00 00 FE CD 00 00 00 00 30 41 +R 00 00 01 00 02 06 1B 00 +T B0 09 00 00 +R 00 00 01 00 +T B0 09 00 00 DD 6E 02 DD 66 03 DD 75 FB DD 74 +R 00 00 01 00 +T BB 09 00 00 FC 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T C4 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T C9 09 00 00 00 00 00 00 E5 21 92 04 00 00 E5 +R 00 00 01 00 02 04 02 00 00 0A 02 00 +T D0 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1E 00 02 0A 1E 00 +T D6 09 00 00 00 00 00 00 E1 E1 21 0C 00 39 7E +R 00 00 01 00 02 04 02 00 +T DF 09 00 00 C6 04 77 23 7E CE 00 77 DD 34 FD +R 00 00 01 00 +T EA 09 00 00 20 03 DD 34 FE +R 00 00 01 00 +T EF 09 00 00 +R 00 00 01 00 +T EF 09 00 00 18 A6 +R 00 00 01 00 +T F1 09 00 00 +R 00 00 01 00 +T F1 09 00 00 C3 92 0A 00 00 +R 00 00 01 00 00 05 01 00 +T F4 09 00 00 +R 00 00 01 00 +T F4 09 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T FF 09 00 00 74 03 2B 4E 06 00 DD 71 F7 DD 70 +R 00 00 01 00 +T 0A 0A 00 00 F8 AF DD 77 FD DD 77 FE +R 00 00 01 00 +T 12 0A 00 00 +R 00 00 01 00 +T 12 0A 00 00 01 04 00 DD 5E F7 DD 56 F8 CD +R 00 00 01 00 +T 1C 0A 00 00 00 00 00 00 4B 42 DD 6E FD DD 66 +R 00 00 01 00 02 04 1F 00 +T 25 0A 00 00 FE CD 00 00 00 00 30 41 +R 00 00 01 00 02 06 1B 00 +T 2B 0A 00 00 +R 00 00 01 00 +T 2B 0A 00 00 DD 6E 02 DD 66 03 DD 75 FB DD 74 +R 00 00 01 00 +T 36 0A 00 00 FC 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 3F 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 44 0A 00 00 00 00 00 00 E5 21 BC 04 00 00 E5 +R 00 00 01 00 02 04 02 00 00 0A 02 00 +T 4B 0A 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1E 00 02 0A 1E 00 +T 51 0A 00 00 00 00 00 00 E1 E1 21 0C 00 39 7E +R 00 00 01 00 02 04 02 00 +T 5A 0A 00 00 C6 04 77 23 7E CE 00 77 DD 34 FD +R 00 00 01 00 +T 65 0A 00 00 20 03 DD 34 FE +R 00 00 01 00 +T 6A 0A 00 00 +R 00 00 01 00 +T 6A 0A 00 00 18 A6 +R 00 00 01 00 +T 6C 0A 00 00 +R 00 00 01 00 +T 6C 0A 00 00 18 24 +R 00 00 01 00 +T 6E 0A 00 00 +R 00 00 01 00 +T 6E 0A 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 79 0A 00 00 74 03 2B 4E 06 00 DD 71 F7 DD 70 +R 00 00 01 00 +T 84 0A 00 00 F8 21 0C 00 39 7E 81 77 23 7E 88 +R 00 00 01 00 +T 8F 0A 00 00 77 18 00 +R 00 00 01 00 +T 92 0A 00 00 +R 00 00 01 00 +T 92 0A 00 00 C3 A1 08 00 00 +R 00 00 01 00 00 05 01 00 +T 95 0A 00 00 +R 00 00 01 00 +T 95 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0F 00 +T 98 0A 00 00 +R 00 00 01 00 +T 98 0A 00 00 CD 00 00 00 00 F2 FF 21 00 00 39 +R 00 00 01 00 02 05 18 00 +T A1 0A 00 00 5D 54 21 00 00 00 00 01 05 00 ED +R 00 00 01 00 00 07 03 00 +T AA 0A 00 00 B0 21 04 00 E5 21 02 00 39 4D 44 +R 00 00 01 00 +T B5 0A 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T BD 0A 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 05 00 02 0A 02 00 +T C4 0A 00 00 21 10 00 39 7E C6 04 77 23 7E CE +R 00 00 01 00 +T CF 0A 00 00 00 77 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T D9 0A 00 00 +R 00 00 01 00 +T D9 0A 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T E1 0A 00 00 +R 00 00 01 00 +T E1 0A 00 00 DD 6E 02 DD 66 03 36 01 DD 34 02 +R 00 00 01 00 +T EC 0A 00 00 20 03 DD 34 03 +R 00 00 01 00 +T F1 0A 00 00 +R 00 00 01 00 +T F1 0A 00 00 DD 6E 02 DD 66 03 36 04 DD 34 02 +R 00 00 01 00 +T FC 0A 00 00 20 03 DD 34 03 +R 00 00 01 00 +T 01 0B 00 00 +R 00 00 01 00 +T 01 0B 00 00 21 0C 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 0C 0B 00 00 23 46 23 5E 23 56 D5 C5 DD 5E 02 +R 00 00 01 00 +T 17 0B 00 00 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 24 00 +T 1D 0B 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 24 00 02 09 02 00 +T 24 0B 00 00 21 10 00 39 7E C6 04 77 23 7E CE +R 00 00 01 00 +T 2F 0B 00 00 00 77 21 84 00 00 00 5E 23 56 23 +R 00 00 01 00 00 07 05 00 +T 38 0B 00 00 4E 23 46 EB 7D B4 B1 B0 CA +R 00 00 01 00 +T 41 0B 00 00 F0 0B 00 00 +R 00 00 01 00 00 04 01 00 +T 43 0B 00 00 +R 00 00 01 00 +T 43 0B 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 4B 0B 00 00 +R 00 00 01 00 +T 4B 0B 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 53 0B 00 00 +R 00 00 01 00 +T 53 0B 00 00 DD 6E 02 DD 66 03 36 06 DD 34 02 +R 00 00 01 00 +T 5E 0B 00 00 20 03 DD 34 03 +R 00 00 01 00 +T 63 0B 00 00 +R 00 00 01 00 +T 63 0B 00 00 DD 6E 02 DD 66 03 DD 75 FD DD 74 +R 00 00 01 00 +T 6E 0B 00 00 FE DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 77 0B 00 00 +R 00 00 01 00 +T 77 0B 00 00 AF DD 77 FB DD 77 FC +R 00 00 01 00 +T 7E 0B 00 00 +R 00 00 01 00 +T 7E 0B 00 00 01 05 80 DD 6E FB DD 66 FC 3E 80 +R 00 00 01 00 +T 89 0B 00 00 AC 67 ED 42 30 61 DD 6E FB DD 66 +R 00 00 01 00 +T 94 0B 00 00 FC 29 29 01 84 00 00 00 09 7E 23 +R 00 00 01 00 00 08 05 00 +T 9D 0B 00 00 B6 23 B6 23 B6 28 4C +R 00 00 01 00 +T A4 0B 00 00 +R 00 00 01 00 +T A4 0B 00 00 +R 00 00 01 00 +T A4 0B 00 00 +R 00 00 01 00 +T A4 0B 00 00 DD 6E FB DD 66 FC 29 29 01 +R 00 00 01 00 +T AD 0B 00 00 84 00 00 00 09 4E 23 46 23 5E 23 +R 00 00 01 00 00 04 05 00 +T B6 0B 00 00 56 D5 C5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T C0 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T C5 0B 00 00 00 00 00 00 F1 F1 DD 6E FD DD 66 +R 00 00 01 00 02 04 02 00 +T CE 0B 00 00 FE 7E C6 04 DD 6E FD DD 66 FE 77 +R 00 00 01 00 +T D9 0B 00 00 21 10 00 39 7E C6 04 77 23 7E CE +R 00 00 01 00 +T E4 0B 00 00 00 77 DD 34 FB 20 03 DD 34 FC +R 00 00 01 00 +T EE 0B 00 00 +R 00 00 01 00 +T EE 0B 00 00 18 8E +R 00 00 01 00 +T F0 0B 00 00 +R 00 00 01 00 +T F0 0B 00 00 +R 00 00 01 00 +T F0 0B 00 00 2A 12 00 00 00 DD 4E 04 DD 46 05 +R 00 00 01 00 02 05 0B 00 +T F9 0B 00 00 A7 ED 42 20 59 +R 00 00 01 00 +T FE 0B 00 00 +R 00 00 01 00 +T FE 0B 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 06 0C 00 00 +R 00 00 01 00 +T 06 0C 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 0E 0C 00 00 +R 00 00 01 00 +T 0E 0C 00 00 DD 6E 02 DD 66 03 36 03 DD 34 02 +R 00 00 01 00 +T 19 0C 00 00 20 03 DD 34 03 +R 00 00 01 00 +T 1E 0C 00 00 +R 00 00 01 00 +T 1E 0C 00 00 DD 6E 02 DD 66 03 36 04 DD 34 02 +R 00 00 01 00 +T 29 0C 00 00 20 03 DD 34 03 +R 00 00 01 00 +T 2E 0C 00 00 +R 00 00 01 00 +T 2E 0C 00 00 21 0A 00 00 00 4E 23 46 23 5E 23 +R 00 00 01 00 02 05 0B 00 +T 37 0C 00 00 56 D5 C5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 41 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T 46 0C 00 00 00 00 00 00 F1 F1 21 10 00 39 7E +R 00 00 01 00 02 04 02 00 +T 4F 0C 00 00 C6 04 77 23 7E CE 00 77 +R 00 00 01 00 +T 57 0C 00 00 +R 00 00 01 00 +T 57 0C 00 00 DD 7E 08 DD B6 09 CA 13 0D 00 00 +R 00 00 01 00 00 0B 01 00 +T 60 0C 00 00 +R 00 00 01 00 +T 60 0C 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 68 0C 00 00 +R 00 00 01 00 +T 68 0C 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 70 0C 00 00 +R 00 00 01 00 +T 70 0C 00 00 DD 6E 02 DD 66 03 36 0C DD 34 02 +R 00 00 01 00 +T 7B 0C 00 00 20 03 DD 34 03 +R 00 00 01 00 +T 80 0C 00 00 +R 00 00 01 00 +T 80 0C 00 00 DD 5E 08 DD 56 09 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 88 0C 00 00 21 00 00 00 00 CD 00 00 00 00 23 +R 00 00 01 00 02 05 0C 00 02 0A 02 00 +T 8F 0C 00 00 DD 75 F7 DD 74 F8 E5 DD 6E 02 DD +R 00 00 01 00 +T 9A 0C 00 00 66 03 C1 71 DD 34 02 20 03 DD 34 +R 00 00 01 00 +T A5 0C 00 00 03 +R 00 00 01 00 +T A6 0C 00 00 +R 00 00 01 00 +T A6 0C 00 00 DD 4E 08 DD 46 09 DD 5E 02 DD 56 +R 00 00 01 00 +T B1 0C 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 15 00 02 0B 15 00 +T B7 0C 00 00 CD 00 00 00 00 21 10 00 39 7E DD +R 00 00 01 00 02 05 02 00 +T C0 0C 00 00 86 F7 77 23 7E DD 8E F8 77 01 +R 00 00 01 00 +T CA 0C 00 00 04 00 DD 5E F7 DD 56 F8 CD +R 00 00 01 00 +T D3 0C 00 00 00 00 00 00 21 04 00 A7 ED 52 DD +R 00 00 01 00 02 04 1C 00 +T DC 0C 00 00 75 F9 DD 74 FA AF DD 77 FB DD 77 +R 00 00 01 00 +T E7 0C 00 00 FC +R 00 00 01 00 +T E8 0C 00 00 +R 00 00 01 00 +T E8 0C 00 00 DD 4E F9 DD 46 FA DD 6E FB DD 66 +R 00 00 01 00 +T F3 0C 00 00 FC CD 00 00 00 00 30 1A +R 00 00 01 00 02 06 1B 00 +T F9 0C 00 00 +R 00 00 01 00 +T F9 0C 00 00 DD 6E 02 DD 66 03 36 00 DD 34 02 +R 00 00 01 00 +T 04 0D 00 00 20 03 DD 34 03 +R 00 00 01 00 +T 09 0D 00 00 +R 00 00 01 00 +T 09 0D 00 00 DD 34 FB 20 03 DD 34 FC +R 00 00 01 00 +T 11 0D 00 00 +R 00 00 01 00 +T 11 0D 00 00 18 D5 +R 00 00 01 00 +T 13 0D 00 00 +R 00 00 01 00 +T 13 0D 00 00 +R 00 00 01 00 +T 13 0D 00 00 DD 6E 02 DD 66 03 36 FF C3 +R 00 00 01 00 +T 1C 0D 00 00 00 00 00 00 +R 00 00 01 00 02 04 0F 00 +T 1E 0D 00 00 +R 00 00 01 00 +T 1E 0D 00 00 CD 00 00 00 00 F6 FF 21 0C 00 DD +R 00 00 01 00 02 05 18 00 +T 27 0D 00 00 5E 02 DD 56 03 19 7E 23 B6 23 B6 +R 00 00 01 00 +T 32 0D 00 00 23 B6 28 21 +R 00 00 01 00 +T 36 0D 00 00 +R 00 00 01 00 +T 36 0D 00 00 21 0C 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 41 0D 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T 47 0D 00 00 00 00 00 00 DD 75 F8 DD 74 F9 DD +R 00 00 01 00 02 04 02 00 +T 50 0D 00 00 71 FA DD 70 FB 18 4C +R 00 00 01 00 +T 57 0D 00 00 +R 00 00 01 00 +T 57 0D 00 00 21 10 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 62 0D 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T 68 0D 00 00 00 00 00 00 DD 75 F8 DD 74 F9 DD +R 00 00 01 00 02 04 02 00 +T 71 0D 00 00 71 FA DD 70 FB 11 00 00 D5 21 +R 00 00 01 00 +T 7B 0D 00 00 1C 00 DD 4E 02 DD 46 03 09 E5 69 +R 00 00 01 00 +T 86 0D 00 00 60 23 4E 06 00 C5 DD 4E FA DD 46 +R 00 00 01 00 +T 91 0D 00 00 FB DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T 99 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 9E 0D 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 02 00 +T A3 0D 00 00 +R 00 00 01 00 +T A3 0D 00 00 01 2C 01 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T AD 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T B2 0D 00 00 00 00 00 00 DD 75 F6 DD 74 F7 7D +R 00 00 01 00 02 04 02 00 +T BB 0D 00 00 B4 20 03 +R 00 00 01 00 +T BE 0D 00 00 +R 00 00 01 00 +T BE 0D 00 00 C3 88 0E 00 00 +R 00 00 01 00 00 05 01 00 +T C1 0D 00 00 +R 00 00 01 00 +T C1 0D 00 00 21 08 00 E5 01 00 00 21 02 00 39 +R 00 00 01 00 +T CC 0D 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 21 00 +T D1 0D 00 00 00 00 00 00 CD 00 00 00 00 E1 DD +R 00 00 01 00 02 04 21 00 02 09 02 00 +T D8 0D 00 00 36 FC 34 DD 36 FD 01 21 0A 00 DD +R 00 00 01 00 +T E3 0D 00 00 4E F6 DD 46 F7 09 56 23 66 6A DD +R 00 00 01 00 +T EE 0D 00 00 75 FE DD 74 FF 01 43 00 EB 3E +R 00 00 01 00 +T F8 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T FD 0D 00 00 00 00 00 00 DD 75 FE DD 74 FF 01 +R 00 00 01 00 02 04 02 00 +T 06 0E 00 00 44 00 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T 0C 0E 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 02 00 +T 13 0E 00 00 FE DD 74 FF DD 4E FC DD 46 FD EB +R 00 00 01 00 +T 1E 0E 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T 24 0E 00 00 00 00 00 00 DD 75 FE DD 74 FF 23 +R 00 00 01 00 02 04 02 00 +T 2D 0E 00 00 DD 75 FE DD 74 FF 2B 36 00 DD 6E +R 00 00 01 00 +T 38 0E 00 00 FE DD 66 FF 36 00 0E 00 C5 21 +R 00 00 01 00 +T 42 0E 00 00 00 00 E5 DD 6E FC DD 66 FD E5 21 +R 00 00 01 00 +T 4D 0E 00 00 06 00 39 E5 0E 00 C5 0E 00 C5 0E +R 00 00 01 00 +T 58 0E 00 00 11 C5 DD 6E FA DD 66 FB E5 DD 6E +R 00 00 01 00 +T 63 0E 00 00 F8 DD 66 F9 E5 21 04 00 DD 4E 04 +R 00 00 01 00 +T 6E 0E 00 00 DD 46 05 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 79 0E 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T 7F 0E 00 00 00 00 00 00 EB 21 12 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T 88 0E 00 00 +R 00 00 01 00 +T 88 0E 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0F 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4E 65 74 72 6F 6D 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 45 74 68 65 72 6E 65 74 00 +R 00 00 02 00 +T 10 00 00 00 +R 00 00 02 00 +T 10 00 00 00 41 58 32 35 00 +R 00 00 02 00 +T 15 00 00 00 +R 00 00 02 00 +T 15 00 00 00 50 72 6F 6E 65 74 00 +R 00 00 02 00 +T 1C 00 00 00 +R 00 00 02 00 +T 1C 00 00 00 43 68 61 6F 73 00 +R 00 00 02 00 +T 22 00 00 00 +R 00 00 02 00 +T 22 00 00 00 49 45 45 45 20 38 30 32 00 +R 00 00 02 00 +T 2B 00 00 00 +R 00 00 02 00 +T 2B 00 00 00 41 72 63 4E 65 74 00 +R 00 00 02 00 +T 32 00 00 00 +R 00 00 02 00 +T 32 00 00 00 41 70 70 6C 65 54 61 6C 6B 00 +R 00 00 02 00 +T 3C 00 00 00 +R 00 00 02 00 +T 3C 00 00 00 0A 42 6F 6F 74 70 64 20 72 65 71 +R 00 00 02 00 +T 47 00 00 00 75 65 73 74 20 70 61 63 6B 65 74 +R 00 00 02 00 +T 52 00 00 00 20 72 65 63 65 69 76 65 64 20 25 +R 00 00 02 00 +T 5D 00 00 00 73 00 +R 00 00 02 00 +T 5F 00 00 00 +R 00 00 02 00 +T 5F 00 00 00 20 20 20 20 20 44 72 6F 70 70 65 +R 00 00 02 00 +T 6A 00 00 00 64 2C 20 67 69 61 64 64 72 20 73 +R 00 00 02 00 +T 75 00 00 00 70 65 63 69 66 69 65 73 20 74 6F +R 00 00 02 00 +T 80 00 00 00 20 62 65 20 66 6F 72 77 61 72 64 +R 00 00 02 00 +T 8B 00 00 00 65 64 3B 0A 00 +R 00 00 02 00 +T 90 00 00 00 +R 00 00 02 00 +T 90 00 00 00 20 20 20 20 20 44 72 6F 70 70 65 +R 00 00 02 00 +T 9B 00 00 00 64 2C 20 73 6E 61 6D 65 20 73 70 +R 00 00 02 00 +T A6 00 00 00 65 63 69 66 69 65 73 20 73 65 72 +R 00 00 02 00 +T B1 00 00 00 76 65 72 20 27 25 73 27 0A 00 +R 00 00 02 00 +T BB 00 00 00 +R 00 00 02 00 +T BB 00 00 00 20 20 20 20 20 52 65 73 6F 6C 76 +R 00 00 02 00 +T C6 00 00 00 65 64 20 62 79 20 25 73 20 61 64 +R 00 00 02 00 +T D1 00 00 00 64 72 20 25 73 0A 00 +R 00 00 02 00 +T D8 00 00 00 +R 00 00 02 00 +T D8 00 00 00 20 20 20 20 20 4E 6F 20 64 79 6E +R 00 00 02 00 +T E3 00 00 00 61 6D 69 63 20 61 64 64 72 65 73 +R 00 00 02 00 +T EE 00 00 00 73 65 73 20 61 76 61 69 6C 61 62 +R 00 00 02 00 +T F9 00 00 00 6C 65 2E 0A 00 +R 00 00 02 00 +T FE 00 00 00 +R 00 00 02 00 +T FE 00 00 00 20 20 20 20 20 44 79 6E 61 6D 69 +R 00 00 02 00 +T 09 01 00 00 63 20 61 64 64 72 65 73 73 20 61 +R 00 00 02 00 +T 14 01 00 00 73 73 69 67 6E 65 64 3A 20 25 73 +R 00 00 02 00 +T 1F 01 00 00 0A 00 +R 00 00 02 00 +T 21 01 00 00 +R 00 00 02 00 +T 21 01 00 00 20 20 20 20 20 53 74 61 74 69 63 +R 00 00 02 00 +T 2C 01 00 00 20 61 64 64 72 65 73 73 20 61 73 +R 00 00 02 00 +T 37 01 00 00 73 69 67 6E 65 64 3A 20 25 73 0A +R 00 00 02 00 +T 42 01 00 00 00 +R 00 00 02 00 +T 43 01 00 00 +R 00 00 02 00 +T 43 01 00 00 20 20 20 20 20 52 65 73 6F 6C 76 +R 00 00 02 00 +T 4E 01 00 00 65 20 62 79 20 49 50 20 61 64 64 +R 00 00 02 00 +T 59 01 00 00 72 20 25 73 0A 00 +R 00 00 02 00 +T 5F 01 00 00 +R 00 00 02 00 +T 5F 01 00 00 20 20 20 20 20 48 6F 73 74 20 6E +R 00 00 02 00 +T 6A 01 00 00 6F 74 20 66 6F 75 6E 64 2C 20 64 +R 00 00 02 00 +T 75 01 00 00 65 66 61 75 6C 74 20 76 61 6C 75 +R 00 00 02 00 +T 80 01 00 00 65 73 20 75 73 65 64 2E 0A 00 +R 00 00 02 00 +T 8A 01 00 00 +R 00 00 02 00 +T 8A 01 00 00 20 20 20 20 20 4C 6F 6F 6B 75 70 +R 00 00 02 00 +T 95 01 00 00 20 73 75 63 63 65 73 73 66 75 6C +R 00 00 02 00 +T A0 01 00 00 2E 0A 00 +R 00 00 02 00 +T A3 01 00 00 +R 00 00 02 00 +T A3 01 00 00 2F 00 +R 00 00 02 00 +T A5 01 00 00 +R 00 00 02 00 +T A5 01 00 00 50 61 63 6B 65 74 20 6F 70 20 63 +R 00 00 02 00 +T B0 01 00 00 6F 64 65 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T BB 01 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T C6 01 00 00 2E 2E 2E 2E 2E 25 64 0A 00 +R 00 00 02 00 +T CF 01 00 00 +R 00 00 02 00 +T CF 01 00 00 68 61 72 64 77 61 72 65 20 61 64 +R 00 00 02 00 +T DA 01 00 00 64 72 65 73 73 20 74 79 70 65 2E +R 00 00 02 00 +T E5 01 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T F0 01 00 00 2E 2E 2E 2E 2E 25 64 0A 00 +R 00 00 02 00 +T F9 01 00 00 +R 00 00 02 00 +T F9 01 00 00 68 61 72 64 77 61 72 65 20 61 64 +R 00 00 02 00 +T 04 02 00 00 64 72 65 73 73 20 6C 65 6E 67 74 +R 00 00 02 00 +T 0F 02 00 00 68 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 1A 02 00 00 2E 2E 2E 2E 2E 25 64 0A 00 +R 00 00 02 00 +T 23 02 00 00 +R 00 00 02 00 +T 23 02 00 00 63 6C 69 65 6E 74 20 73 65 74 73 +R 00 00 02 00 +T 2E 02 00 00 20 74 6F 20 7A 65 72 6F 2E 2E 2E +R 00 00 02 00 +T 39 02 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 44 02 00 00 2E 2E 2E 2E 2E 25 64 0A 00 +R 00 00 02 00 +T 4D 02 00 00 +R 00 00 02 00 +T 4D 02 00 00 74 72 61 6E 73 61 63 74 69 6F 6E +R 00 00 02 00 +T 58 02 00 00 20 49 44 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 63 02 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 6E 02 00 00 2E 2E 2E 2E 2E 25 6C 64 0A 00 +R 00 00 02 00 +T 78 02 00 00 +R 00 00 02 00 +T 78 02 00 00 73 65 63 6F 6E 64 73 20 65 6C 61 +R 00 00 02 00 +T 83 02 00 00 70 73 65 64 20 73 69 6E 63 65 20 +R 00 00 02 00 +T 8E 02 00 00 63 6C 69 65 6E 74 20 62 6F 6F 74 +R 00 00 02 00 +T 99 02 00 00 65 64 2E 2E 2E 25 64 0A 00 +R 00 00 02 00 +T A2 02 00 00 +R 00 00 02 00 +T A2 02 00 00 75 6E 75 73 65 64 2E 2E 2E 2E 2E +R 00 00 02 00 +T AD 02 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T B8 02 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T C3 02 00 00 2E 2E 2E 2E 2E 25 64 0A 00 +R 00 00 02 00 +T CC 02 00 00 +R 00 00 02 00 +T CC 02 00 00 43 6C 69 65 6E 74 20 49 50 20 61 +R 00 00 02 00 +T D7 02 00 00 64 64 72 65 73 73 2C 20 69 66 20 +R 00 00 02 00 +T E2 02 00 00 6B 6E 6F 77 6E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T ED 02 00 00 2E 2E 2E 2E 2E 25 73 0A 00 +R 00 00 02 00 +T F6 02 00 00 +R 00 00 02 00 +T F6 02 00 00 53 65 72 76 65 72 20 73 75 70 70 +R 00 00 02 00 +T 01 03 00 00 6C 69 65 64 20 49 50 20 61 64 64 +R 00 00 02 00 +T 0C 03 00 00 72 65 73 73 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 17 03 00 00 2E 2E 2E 2E 2E 25 73 0A 00 +R 00 00 02 00 +T 20 03 00 00 +R 00 00 02 00 +T 20 03 00 00 53 65 72 76 65 72 20 49 50 20 61 +R 00 00 02 00 +T 2B 03 00 00 64 64 72 65 73 73 2E 2E 2E 2E 2E +R 00 00 02 00 +T 36 03 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 41 03 00 00 2E 2E 2E 2E 2E 25 73 0A 00 +R 00 00 02 00 +T 4A 03 00 00 +R 00 00 02 00 +T 4A 03 00 00 47 61 74 65 77 61 79 20 49 50 20 +R 00 00 02 00 +T 55 03 00 00 61 64 64 72 65 73 73 2E 2E 2E 2E +R 00 00 02 00 +T 60 03 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 6B 03 00 00 2E 2E 2E 2E 2E 25 73 0A 00 +R 00 00 02 00 +T 74 03 00 00 +R 00 00 02 00 +T 74 03 00 00 43 6C 69 65 6E 74 20 68 61 72 64 +R 00 00 02 00 +T 7F 03 00 00 77 61 72 65 20 61 64 64 72 65 73 +R 00 00 02 00 +T 8A 03 00 00 73 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 95 03 00 00 2E 2E 2E 2E 2E 25 78 3A 25 78 3A +R 00 00 02 00 +T A0 03 00 00 25 78 3A 25 78 3A 25 78 3A 25 78 +R 00 00 02 00 +T AB 03 00 00 0A 00 +R 00 00 02 00 +T AD 03 00 00 +R 00 00 02 00 +T AD 03 00 00 53 65 72 76 65 72 20 68 6F 73 74 +R 00 00 02 00 +T B8 03 00 00 20 6E 61 6D 65 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T C3 03 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T CE 03 00 00 2E 2E 2E 2E 2E 27 25 73 27 0A 00 +R 00 00 02 00 +T D9 03 00 00 +R 00 00 02 00 +T D9 03 00 00 42 6F 6F 74 20 66 69 6C 65 20 6E +R 00 00 02 00 +T E4 03 00 00 61 6D 65 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T EF 03 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T FA 03 00 00 2E 2E 2E 2E 2E 27 25 73 27 0A 00 +R 00 00 02 00 +T 05 04 00 00 +R 00 00 02 00 +T 05 04 00 00 4D 61 67 69 63 20 43 6F 6F 6B 69 +R 00 00 02 00 +T 10 04 00 00 65 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 1B 04 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 26 04 00 00 2E 2E 2E 2E 2E 78 25 30 32 78 25 +R 00 00 02 00 +T 31 04 00 00 30 32 78 25 30 32 78 25 30 32 78 +R 00 00 02 00 +T 3C 04 00 00 0A 00 +R 00 00 02 00 +T 3E 04 00 00 +R 00 00 02 00 +T 3E 04 00 00 56 65 6E 64 20 53 75 62 6E 65 74 +R 00 00 02 00 +T 49 04 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 54 04 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 5F 04 00 00 2E 2E 2E 2E 2E 25 73 0A 00 +R 00 00 02 00 +T 68 04 00 00 +R 00 00 02 00 +T 68 04 00 00 56 65 6E 64 20 48 6F 73 74 6E 61 +R 00 00 02 00 +T 73 04 00 00 6D 65 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 7E 04 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T 89 04 00 00 2E 2E 2E 2E 2E 25 73 0A 00 +R 00 00 02 00 +T 92 04 00 00 +R 00 00 02 00 +T 92 04 00 00 56 65 6E 64 20 44 6F 6D 61 69 6E +R 00 00 02 00 +T 9D 04 00 00 4E 53 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T A8 04 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T B3 04 00 00 2E 2E 2E 2E 2E 25 73 0A 00 +R 00 00 02 00 +T BC 04 00 00 +R 00 00 02 00 +T BC 04 00 00 56 65 6E 64 20 47 61 74 65 77 61 +R 00 00 02 00 +T C7 04 00 00 79 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T D2 04 00 00 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E +R 00 00 02 00 +T DD 04 00 00 2E 2E 2E 2E 2E 25 73 0A 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 63 82 53 63 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 78 04 00 00 +R 00 00 04 00 +T 78 04 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 05 00 +T 00 00 00 00 +R 00 00 05 00 +T 02 00 00 00 +R 00 00 05 00 +T 02 00 00 00 +R 00 00 05 00 +T 42 00 00 00 +R 00 00 05 00 +T 42 00 00 00 +R 00 00 05 00 +T 82 00 00 00 +R 00 00 05 00 +T 82 00 00 00 +R 00 00 05 00 +T 84 00 00 00 +R 00 00 05 00 +T 84 00 00 00 +R 00 00 05 00 +T 98 00 00 00 +R 00 00 05 00 +T 98 00 00 00 +R 00 00 05 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 2C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 4D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 6E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 79 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 8F 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 06 00 +T 98 00 00 00 00 00 00 00 07 00 00 00 +R 00 00 06 00 00 04 02 00 00 08 02 00 +T 9C 00 00 00 10 00 00 00 15 00 00 00 +R 00 00 06 00 00 04 02 00 00 08 02 00 +T A0 00 00 00 1C 00 00 00 22 00 00 00 +R 00 00 06 00 00 04 02 00 00 08 02 00 +T A4 00 00 00 2B 00 00 00 32 00 00 00 +R 00 00 06 00 00 04 02 00 00 08 02 00 diff --git a/src/nos/lib/servers_lib/bootpdip.rel b/src/nos/lib/servers_lib/bootpdip.rel new file mode 100644 index 00000000..1334e3f3 --- /dev/null +++ b/src/nos/lib/servers_lib/bootpdip.rel @@ -0,0 +1,1869 @@ +XL4 +H 6 areas 2F global symbols +S _inet_ntoa Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Arp_type Ref00000000 +S _stop_timer Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S _memcpy Ref00000000 +S _set_timer Ref00000000 +S ___0279_95bb_Free_20address_20qu Ref00000000 +S ?L_INC_L03 Ref00000000 +S ___0055_cbdf__20_20_20_20_25s_20 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0054_3528__20_20_20_20_25s_20 Ref00000000 +S _arp_drop Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S ___02a8_8880_Interface_20_25s_20 Ref00000000 +S ___035c_8005_Range_20for_20inter Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S ?L_MUL_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _res_arp Ref00000000 +S ___002c_c546__0aUsed_20address_2 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _start_timer Ref00000000 +S _calloc Ref00000000 +S _time Ref00000000 +S ___0053_ed50__20_20_20_20_25s_20 Ref00000000 +S __printf Ref00000000 +S _bp_log Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _arp_lookup Ref00000000 +S ___002b_ebd8__0aReclaimation_20a Ref00000000 +S _memcmp Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1602 flags 0 +S _da_status Def00000091 +S _da_init Def00001003 +S _da_shut Def0000013A +S _da_assign Def00000AB2 +S _da_serve_net Def00001011 +S _da_done_net Def00000000 +S _q_dequeue Def00001464 +A CSTR size A5 flags 0 +A UDATA0 size 94 flags 0 +S _da_timer Def00000004 +S _bp_ascii Def00000014 +A IDATA0 size 24 flags 0 +S _ifaceToArpMap Def00000000 +A CDATA0 size 24 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 2A +R 00 00 01 00 02 05 16 00 +T 06 00 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 00 04 03 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 DD 7E FE DD B6 FF 28 2B +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 6E FE DD 66 FF 23 23 46 23 66 +R 00 00 01 00 +T 21 00 00 00 68 DD 4E 02 DD 46 03 A7 ED 42 20 +R 00 00 01 00 +T 2C 00 00 00 02 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 18 12 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T 3A 00 00 00 75 FE DD 74 FF 18 CD +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 7E FE DD B6 FF 20 1F +R 00 00 01 00 +T 49 00 00 00 +R 00 00 01 00 +T 49 00 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 54 00 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 00 06 02 00 +T 5A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 20 00 02 09 20 00 +T 5F 00 00 00 00 00 00 00 E1 E1 21 FF FF 18 26 +R 00 00 01 00 02 04 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 DD 5E FE DD 56 FF CD 6D 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 71 00 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 7C 00 00 00 C5 21 25 00 00 00 E5 3E +R 00 00 01 00 00 06 02 00 +T 82 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 20 00 02 09 20 00 +T 87 00 00 00 00 00 00 00 E1 E1 21 00 00 +R 00 00 01 00 02 04 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 CD 00 00 00 00 FE FF DD 7E 02 DD +R 00 00 01 00 02 05 16 00 +T 9A 00 00 00 B6 03 20 2E +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 2A 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 00 05 03 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 DD 7E FE DD B6 FF 28 1B +R 00 00 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 DD 5E FE DD 56 FF CD 9C 01 00 00 +R 00 00 01 00 00 0B 01 00 +T B8 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T C3 00 00 00 75 FE DD 74 FF 18 DD +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 18 6B +R 00 00 01 00 +T CC 00 00 00 +R 00 00 01 00 +T CC 00 00 00 2A 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 00 05 03 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 DD 7E FE DD B6 FF 28 29 DD 6E FE +R 00 00 01 00 +T E0 00 00 00 DD 66 FF 23 23 46 23 66 68 DD 4E +R 00 00 01 00 +T EB 00 00 00 02 DD 46 03 A7 ED 42 28 12 +R 00 00 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T FF 00 00 00 75 FE DD 74 FF 18 CF +R 00 00 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 DD 7E FE DD B6 FF 20 20 +R 00 00 01 00 +T 0E 01 00 00 +R 00 00 01 00 +T 0E 01 00 00 DD 6E 02 DD 66 03 23 23 4E 23 46 +R 00 00 01 00 +T 19 01 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 10 00 +T 1E 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 10 00 2B 0A 1F 00 +T 24 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1F 00 02 09 01 00 +T 2B 01 00 00 F1 18 09 +R 00 00 01 00 +T 2E 01 00 00 +R 00 00 01 00 +T 2E 01 00 00 DD 5E FE DD 56 FF CD 9C 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 CD 00 00 00 00 FE FF 11 +R 00 00 01 00 02 05 16 00 +T 40 01 00 00 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 03 00 +T 45 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 4A 01 00 00 +R 00 00 01 00 +T 4A 01 00 00 11 00 00 00 00 3E 64 14 00 00 21 +R 00 00 01 00 00 05 03 00 29 0A 01 00 +T 50 01 00 00 64 14 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 57 01 00 00 FE DD 74 FF 7D B4 28 0B +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 DD 5E FE DD 56 FF CD 6D 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 68 01 00 00 18 E0 +R 00 00 01 00 +T 6A 01 00 00 +R 00 00 01 00 +T 6A 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T 6D 01 00 00 +R 00 00 01 00 +T 6D 01 00 00 CD 00 00 00 00 21 36 00 19 5E 23 +R 00 00 01 00 02 05 13 00 +T 76 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T 7C 01 00 00 CD 00 00 00 00 DD 4E 02 DD 46 03 +R 00 00 01 00 02 05 01 00 +T 85 01 00 00 11 00 00 00 00 CD C2 14 00 00 DD +R 00 00 01 00 00 05 03 00 00 0A 01 00 +T 8C 01 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 12 00 +T 94 01 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 12 00 02 09 01 00 +T 9A 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 0E 00 +T 9C 01 00 00 +R 00 00 01 00 +T 9C 01 00 00 CD 00 00 00 00 DC FF DD 6E 02 DD +R 00 00 01 00 02 05 16 00 +T A5 01 00 00 66 03 23 23 46 23 66 68 01 3D 00 +R 00 00 01 00 +T B0 01 00 00 09 46 23 66 68 01 0E 00 09 46 23 +R 00 00 01 00 +T BB 01 00 00 66 68 29 29 29 29 01 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T C4 01 00 00 09 DD 75 FE DD 74 FF 21 02 00 39 +R 00 00 01 00 +T CF 01 00 00 E5 21 14 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T DA 01 00 00 5E 23 56 23 4E 23 46 CD +R 00 00 01 00 +T E2 01 00 00 D0 15 00 00 E1 21 12 00 39 E5 21 +R 00 00 01 00 00 04 01 00 +T EB 01 00 00 18 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T F6 01 00 00 56 23 4E 23 46 CD D0 15 00 00 E1 +R 00 00 01 00 00 0A 01 00 +T FF 01 00 00 21 12 00 39 E5 21 04 00 39 E5 DD +R 00 00 01 00 +T 0A 02 00 00 6E 02 DD 66 03 23 23 46 23 66 68 +R 00 00 01 00 +T 15 02 00 00 23 23 4E 23 46 C5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 1D 02 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 0F 00 +T 23 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T 28 02 00 00 00 00 00 00 F1 F1 F1 F1 F1 21 +R 00 00 01 00 02 04 01 00 +T 30 02 00 00 40 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T 3B 02 00 00 66 68 DD 75 DC DD 74 DD 0E +R 00 00 01 00 +T 44 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 08 00 02 0A 08 00 +T 4A 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1F 00 02 0A 1F 00 +T 50 02 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 +T 54 02 00 00 +R 00 00 01 00 +T 54 02 00 00 DD 7E DC DD B6 DD 28 68 +R 00 00 01 00 +T 5C 02 00 00 +R 00 00 01 00 +T 5C 02 00 00 21 02 00 39 E5 DD 6E DC DD 66 DD +R 00 00 01 00 +T 67 02 00 00 23 23 5E 23 56 23 4E 23 46 CD +R 00 00 01 00 +T 71 02 00 00 D0 15 00 00 E1 21 0A 00 DD 4E DC +R 00 00 01 00 00 04 01 00 +T 7A 02 00 00 DD 46 DD 09 4D 44 C5 11 +R 00 00 01 00 +T 82 02 00 00 14 00 00 00 21 0A 00 DD 4E FE DD +R 00 00 01 00 00 04 03 00 +T 8B 02 00 00 46 FF 09 4E 23 46 23 7E 69 60 C1 +R 00 00 01 00 +T 96 02 00 00 CD 00 00 00 00 E5 21 04 00 39 E5 +R 00 00 01 00 02 05 01 00 +T 9F 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T A5 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1F 00 02 0B 1F 00 +T AB 02 00 00 CD 00 00 00 00 F1 F1 F1 F1 DD 6E +R 00 00 01 00 02 05 01 00 +T B4 02 00 00 DC DD 66 DD 46 23 66 68 DD 75 DC +R 00 00 01 00 +T BF 02 00 00 DD 74 DD 18 90 +R 00 00 01 00 +T C4 02 00 00 +R 00 00 01 00 +T C4 02 00 00 21 38 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T CF 02 00 00 23 66 68 DD 75 DC DD 74 DD 0E +R 00 00 01 00 +T D9 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 19 00 02 0A 19 00 +T DF 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1F 00 02 0A 1F 00 +T E5 02 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 +T E9 02 00 00 +R 00 00 01 00 +T E9 02 00 00 DD 7E DC DD B6 DD 28 68 +R 00 00 01 00 +T F1 02 00 00 +R 00 00 01 00 +T F1 02 00 00 21 02 00 39 E5 DD 6E DC DD 66 DD +R 00 00 01 00 +T FC 02 00 00 23 23 5E 23 56 23 4E 23 46 CD +R 00 00 01 00 +T 06 03 00 00 D0 15 00 00 E1 21 0A 00 DD 4E DC +R 00 00 01 00 00 04 01 00 +T 0F 03 00 00 DD 46 DD 09 4D 44 C5 11 +R 00 00 01 00 +T 17 03 00 00 14 00 00 00 21 0A 00 DD 4E FE DD +R 00 00 01 00 00 04 03 00 +T 20 03 00 00 46 FF 09 4E 23 46 23 7E 69 60 C1 +R 00 00 01 00 +T 2B 03 00 00 CD 00 00 00 00 E5 21 04 00 39 E5 +R 00 00 01 00 02 05 01 00 +T 34 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1E 00 02 0B 1E 00 +T 3A 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1F 00 02 0B 1F 00 +T 40 03 00 00 CD 00 00 00 00 F1 F1 F1 F1 DD 6E +R 00 00 01 00 02 05 01 00 +T 49 03 00 00 DC DD 66 DD 46 23 66 68 DD 75 DC +R 00 00 01 00 +T 54 03 00 00 DD 74 DD 18 90 +R 00 00 01 00 +T 59 03 00 00 +R 00 00 01 00 +T 59 03 00 00 21 3C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 64 03 00 00 23 66 68 DD 75 DC DD 74 DD 0E +R 00 00 01 00 +T 6E 03 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 23 00 02 0A 23 00 +T 74 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1F 00 02 0A 1F 00 +T 7A 03 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 +T 7E 03 00 00 +R 00 00 01 00 +T 7E 03 00 00 DD 7E DC DD B6 DD 28 68 +R 00 00 01 00 +T 86 03 00 00 +R 00 00 01 00 +T 86 03 00 00 21 02 00 39 E5 DD 6E DC DD 66 DD +R 00 00 01 00 +T 91 03 00 00 23 23 5E 23 56 23 4E 23 46 CD +R 00 00 01 00 +T 9B 03 00 00 D0 15 00 00 E1 21 0A 00 DD 4E DC +R 00 00 01 00 00 04 01 00 +T A4 03 00 00 DD 46 DD 09 4D 44 C5 11 +R 00 00 01 00 +T AC 03 00 00 14 00 00 00 21 0A 00 DD 4E FE DD +R 00 00 01 00 00 04 03 00 +T B5 03 00 00 46 FF 09 4E 23 46 23 7E 69 60 C1 +R 00 00 01 00 +T C0 03 00 00 CD 00 00 00 00 E5 21 04 00 39 E5 +R 00 00 01 00 02 05 01 00 +T C9 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0C 00 02 0B 0C 00 +T CF 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1F 00 02 0B 1F 00 +T D5 03 00 00 CD 00 00 00 00 F1 F1 F1 F1 DD 6E +R 00 00 01 00 02 05 01 00 +T DE 03 00 00 DC DD 66 DD 46 23 66 68 DD 75 DC +R 00 00 01 00 +T E9 03 00 00 DD 74 DD 18 90 +R 00 00 01 00 +T EE 03 00 00 +R 00 00 01 00 +T EE 03 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T F4 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1F 00 02 0B 1F 00 +T FA 03 00 00 CD 00 00 00 00 F1 F1 C3 +R 00 00 01 00 02 05 01 00 +T 00 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 0E 00 +T 02 04 00 00 +R 00 00 01 00 +T 02 04 00 00 CD 00 00 00 00 11 04 00 00 00 3E +R 00 00 01 00 02 05 13 00 00 0A 03 00 +T 09 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 0E 04 00 00 00 00 00 00 CD 36 04 00 00 21 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T 14 04 00 00 00 00 E5 21 88 13 E5 11 +R 00 00 01 00 +T 1C 04 00 00 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 07 00 +T 21 04 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 28 04 00 00 11 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 03 00 2B 0A 1B 00 +T 2E 04 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 1B 00 02 09 01 00 +T 34 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 0B 00 +T 36 04 00 00 +R 00 00 01 00 +T 36 04 00 00 CD 00 00 00 00 F6 FF 11 00 00 3E +R 00 00 01 00 02 05 16 00 +T 3F 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T 44 04 00 00 00 00 00 00 DD 75 F8 DD 74 F9 DD +R 00 00 01 00 02 04 01 00 +T 4D 04 00 00 71 FA DD 70 FB 2A 00 00 00 00 DD +R 00 00 01 00 00 0A 03 00 +T 56 04 00 00 75 F6 DD 74 F7 +R 00 00 01 00 +T 5B 04 00 00 +R 00 00 01 00 +T 5B 04 00 00 DD 7E F6 DD B6 F7 CA 56 06 00 00 +R 00 00 01 00 00 0B 01 00 +T 64 04 00 00 +R 00 00 01 00 +T 64 04 00 00 DD 6E F6 DD 66 F7 23 23 46 23 66 +R 00 00 01 00 +T 6F 04 00 00 68 01 3D 00 09 46 23 66 68 01 +R 00 00 01 00 +T 79 04 00 00 0E 00 09 46 23 66 68 29 01 +R 00 00 01 00 +T 82 04 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 00 04 04 00 +T 8B 04 00 00 FC DD 74 FD 29 29 29 29 01 +R 00 00 01 00 +T 94 04 00 00 06 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 02 04 02 00 +T 9D 04 00 00 FE DD 74 FF 21 2E 00 DD 4E F6 DD +R 00 00 01 00 +T A8 04 00 00 46 F7 09 7E E6 01 C2 43 06 00 00 +R 00 00 01 00 00 0B 01 00 +T B1 04 00 00 +R 00 00 01 00 +T B1 04 00 00 21 2F 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T BC 04 00 00 FE 10 20 65 +R 00 00 01 00 +T C0 04 00 00 +R 00 00 01 00 +T C0 04 00 00 21 30 00 DD 4E F6 DD 46 F7 09 4E +R 00 00 01 00 +T CB 04 00 00 23 46 23 5E 23 56 69 60 4D 44 DD +R 00 00 01 00 +T D6 04 00 00 6E F8 DD 66 F9 A7 ED 42 4D 44 DD +R 00 00 01 00 +T E1 04 00 00 6E FA DD 66 FB ED 52 E5 C5 A7 21 +R 00 00 01 00 +T EC 04 00 00 1E 00 C1 ED 42 21 00 00 C1 ED 42 +R 00 00 01 00 +T F7 04 00 00 30 2C +R 00 00 01 00 +T F9 04 00 00 +R 00 00 01 00 +T F9 04 00 00 21 2E 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T 04 05 00 00 E6 08 20 09 +R 00 00 01 00 +T 08 05 00 00 +R 00 00 01 00 +T 08 05 00 00 DD 5E F6 DD 56 F7 CD B8 09 00 00 +R 00 00 01 00 00 0B 01 00 +T 11 05 00 00 +R 00 00 01 00 +T 11 05 00 00 21 2F 00 DD 4E F6 DD 46 F7 09 36 +R 00 00 01 00 +T 1C 05 00 00 20 21 34 00 09 AF 77 23 77 +R 00 00 01 00 +T 25 05 00 00 +R 00 00 01 00 +T 25 05 00 00 +R 00 00 01 00 +T 25 05 00 00 21 2F 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T 30 05 00 00 FE 20 C2 BD 05 00 00 +R 00 00 01 00 00 07 01 00 +T 35 05 00 00 +R 00 00 01 00 +T 35 05 00 00 21 30 00 DD 4E F6 DD 46 F7 09 4E +R 00 00 01 00 +T 40 05 00 00 23 46 23 5E 23 56 69 60 4D 44 DD +R 00 00 01 00 +T 4B 05 00 00 6E F8 DD 66 F9 A7 ED 42 4D 44 DD +R 00 00 01 00 +T 56 05 00 00 6E FA DD 66 FB ED 52 E5 C5 DD 6E +R 00 00 01 00 +T 61 05 00 00 FE DD 66 FF 7C 07 9F 5F 53 A7 C1 +R 00 00 01 00 +T 6C 05 00 00 ED 42 EB C1 ED 42 30 49 +R 00 00 01 00 +T 74 05 00 00 +R 00 00 01 00 +T 74 05 00 00 DD 4E FE DD 46 FF DD 5E F6 DD 56 +R 00 00 01 00 +T 7F 05 00 00 F7 CD 06 07 00 00 21 30 00 DD 4E +R 00 00 01 00 00 06 01 00 +T 88 05 00 00 F6 DD 46 F7 09 E5 11 00 00 3E +R 00 00 01 00 +T 92 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T 97 05 00 00 00 00 00 00 EB E1 73 23 72 23 71 +R 00 00 01 00 02 04 01 00 +T A0 05 00 00 23 70 21 34 00 DD 4E F6 DD 46 F7 +R 00 00 01 00 +T AB 05 00 00 09 7E 23 B6 20 0C +R 00 00 01 00 +T B1 05 00 00 +R 00 00 01 00 +T B1 05 00 00 21 2F 00 DD 4E F6 DD 46 F7 09 36 +R 00 00 01 00 +T BC 05 00 00 10 +R 00 00 01 00 +T BD 05 00 00 +R 00 00 01 00 +T BD 05 00 00 +R 00 00 01 00 +T BD 05 00 00 +R 00 00 01 00 +T BD 05 00 00 21 2E 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T C8 05 00 00 FE 08 28 4E FE 02 28 27 FE 04 20 +R 00 00 01 00 +T D3 05 00 00 6F +R 00 00 01 00 +T D4 05 00 00 +R 00 00 01 00 +T D4 05 00 00 21 1E 00 DD 4E F6 DD 46 F7 09 5E +R 00 00 01 00 +T DF 05 00 00 23 56 21 24 00 09 46 23 66 68 A7 +R 00 00 01 00 +T EA 05 00 00 ED 52 30 09 +R 00 00 01 00 +T EE 05 00 00 +R 00 00 01 00 +T EE 05 00 00 DD 5E F6 DD 56 F7 CD B3 0C 00 00 +R 00 00 01 00 00 0B 01 00 +T F7 05 00 00 +R 00 00 01 00 +T F7 05 00 00 +R 00 00 01 00 +T F7 05 00 00 21 1E 00 DD 4E F6 DD 46 F7 09 5E +R 00 00 01 00 +T 02 06 00 00 23 56 21 26 00 09 46 23 66 68 A7 +R 00 00 01 00 +T 0D 06 00 00 ED 52 30 09 +R 00 00 01 00 +T 11 06 00 00 +R 00 00 01 00 +T 11 06 00 00 DD 5E F6 DD 56 F7 CD 59 06 00 00 +R 00 00 01 00 00 0B 01 00 +T 1A 06 00 00 +R 00 00 01 00 +T 1A 06 00 00 +R 00 00 01 00 +T 1A 06 00 00 21 2E 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T 25 06 00 00 E6 08 28 18 21 3C 00 DD 4E F6 DD +R 00 00 01 00 +T 30 06 00 00 46 F7 09 7E 23 B6 20 09 +R 00 00 01 00 +T 38 06 00 00 +R 00 00 01 00 +T 38 06 00 00 +R 00 00 01 00 +T 38 06 00 00 +R 00 00 01 00 +T 38 06 00 00 DD 5E F6 DD 56 F7 CD BE 06 00 00 +R 00 00 01 00 00 0B 01 00 +T 41 06 00 00 +R 00 00 01 00 +T 41 06 00 00 18 00 +R 00 00 01 00 +T 43 06 00 00 +R 00 00 01 00 +T 43 06 00 00 +R 00 00 01 00 +T 43 06 00 00 DD 6E F6 DD 66 F7 46 23 66 68 DD +R 00 00 01 00 +T 4E 06 00 00 75 F6 DD 74 F7 C3 5B 04 00 00 +R 00 00 01 00 00 0A 01 00 +T 56 06 00 00 +R 00 00 01 00 +T 56 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 59 06 00 00 +R 00 00 01 00 +T 59 06 00 00 CD 00 00 00 00 E0 FF 21 00 00 39 +R 00 00 01 00 02 05 16 00 +T 62 06 00 00 E5 21 14 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 6D 06 00 00 5E 23 56 23 4E 23 46 CD +R 00 00 01 00 +T 75 06 00 00 D0 15 00 00 E1 21 10 00 39 E5 21 +R 00 00 01 00 00 04 01 00 +T 7E 06 00 00 18 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 89 06 00 00 56 23 4E 23 46 CD D0 15 00 00 E1 +R 00 00 01 00 00 0A 01 00 +T 92 06 00 00 21 2E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 9D 06 00 00 E6 01 20 1A +R 00 00 01 00 +T A1 06 00 00 +R 00 00 01 00 +T A1 06 00 00 21 2E 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T AC 06 00 00 08 21 28 00 09 AF 36 60 23 36 09 +R 00 00 01 00 +T B7 06 00 00 23 77 23 77 +R 00 00 01 00 +T BB 06 00 00 +R 00 00 01 00 +T BB 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T BE 06 00 00 +R 00 00 01 00 +T BE 06 00 00 CD 00 00 00 00 E0 FF 21 00 00 39 +R 00 00 01 00 02 05 16 00 +T C7 06 00 00 E5 21 14 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T D2 06 00 00 5E 23 56 23 4E 23 46 CD +R 00 00 01 00 +T DA 06 00 00 D0 15 00 00 E1 21 10 00 39 E5 21 +R 00 00 01 00 00 04 01 00 +T E3 06 00 00 18 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T EE 06 00 00 56 23 4E 23 46 CD D0 15 00 00 E1 +R 00 00 01 00 00 0A 01 00 +T F7 06 00 00 21 2E 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 02 07 00 00 01 C3 00 00 00 00 +R 00 00 01 00 02 06 0E 00 +T 06 07 00 00 +R 00 00 01 00 +T 06 07 00 00 CD 00 00 00 00 F2 FF 11 00 00 3E +R 00 00 01 00 02 05 16 00 +T 0F 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T 14 07 00 00 00 00 00 00 DD 75 F8 DD 74 F9 DD +R 00 00 01 00 02 04 01 00 +T 1D 07 00 00 71 FA DD 70 FB DD 6E 02 DD 66 03 +R 00 00 01 00 +T 28 07 00 00 23 23 46 23 66 68 DD 75 F6 DD 74 +R 00 00 01 00 +T 33 07 00 00 F7 01 3D 00 09 46 23 66 68 01 +R 00 00 01 00 +T 3D 07 00 00 0E 00 09 46 23 66 68 29 01 +R 00 00 01 00 +T 46 07 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 00 04 04 00 +T 4F 07 00 00 FE DD 74 FF 21 34 00 DD 4E 02 DD +R 00 00 01 00 +T 5A 07 00 00 46 03 09 7E 23 B6 CA 06 09 00 00 +R 00 00 01 00 00 0B 01 00 +T 63 07 00 00 +R 00 00 01 00 +T 63 07 00 00 21 34 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 6E 07 00 00 23 66 68 DD 75 F2 DD 74 F3 46 23 +R 00 00 01 00 +T 79 07 00 00 66 68 DD 75 F4 DD 74 F5 DD 6E F2 +R 00 00 01 00 +T 84 07 00 00 DD 66 F3 23 23 4E 23 46 23 5E 23 +R 00 00 01 00 +T 8F 07 00 00 56 D5 C5 DD 5E FE 3E 00 00 00 00 +R 00 00 01 00 2B 0B 22 00 +T 97 07 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 22 00 02 0A 01 00 +T 9E 07 00 00 F1 DD 75 FC DD 74 FD 7D B4 CA +R 00 00 01 00 +T A8 07 00 00 46 08 00 00 21 1B 00 DD 4E FC DD +R 00 00 01 00 00 04 01 00 +T B1 07 00 00 46 FD 09 46 05 C2 46 08 00 00 +R 00 00 01 00 00 0A 01 00 +T B9 07 00 00 +R 00 00 01 00 +T B9 07 00 00 +R 00 00 01 00 +T B9 07 00 00 +R 00 00 01 00 +T B9 07 00 00 DD 4E F2 DD 46 F3 21 3C 00 DD 5E +R 00 00 01 00 +T C4 07 00 00 02 DD 56 03 19 EB CD C2 14 00 00 +R 00 00 01 00 00 0B 01 00 +T CD 07 00 00 21 20 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T D8 07 00 00 23 56 1B 72 2B 73 21 06 00 DD 5E +R 00 00 01 00 +T E3 07 00 00 F2 DD 56 F3 19 DD 4E FA DD 46 FB +R 00 00 01 00 +T EE 07 00 00 DD 5E F8 DD 56 F9 73 23 72 23 71 +R 00 00 01 00 +T F9 07 00 00 23 70 21 1A 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T 04 08 00 00 09 6E 26 00 29 29 29 29 11 +R 00 00 01 00 +T 0D 08 00 00 00 00 00 00 19 5E 23 56 D5 21 +R 00 00 01 00 02 04 02 00 +T 15 08 00 00 1C 00 09 4E 23 46 21 0A 00 DD 5E +R 00 00 01 00 +T 20 08 00 00 F2 DD 56 F3 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 28 08 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 06 00 02 0A 01 00 +T 2F 08 00 00 DD 4E F2 DD 46 F3 21 38 00 DD 5E +R 00 00 01 00 +T 3A 08 00 00 02 DD 56 03 19 EB CD 0A 14 00 00 +R 00 00 01 00 00 0B 01 00 +T 43 08 00 00 C3 04 09 00 00 +R 00 00 01 00 00 05 01 00 +T 46 08 00 00 +R 00 00 01 00 +T 46 08 00 00 DD 6E 04 DD 66 05 7C 07 9F 4F 41 +R 00 00 01 00 +T 51 08 00 00 C5 E5 21 06 00 DD 4E F2 DD 46 F3 +R 00 00 01 00 +T 5C 08 00 00 09 4E 23 46 23 5E 23 56 69 60 4D +R 00 00 01 00 +T 67 08 00 00 44 DD 6E F8 DD 66 F9 A7 ED 42 4D +R 00 00 01 00 +T 72 08 00 00 44 DD 6E FA DD 66 FB ED 52 EB 69 +R 00 00 01 00 +T 7D 08 00 00 60 A7 C1 ED 42 EB C1 ED 42 38 7C +R 00 00 01 00 +T 88 08 00 00 +R 00 00 01 00 +T 88 08 00 00 DD 4E F2 DD 46 F3 21 3C 00 DD 5E +R 00 00 01 00 +T 93 08 00 00 02 DD 56 03 19 EB CD C2 14 00 00 +R 00 00 01 00 00 0B 01 00 +T 9C 08 00 00 21 20 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T A7 08 00 00 23 56 1B 72 2B 73 DD 4E F2 DD 46 +R 00 00 01 00 +T B2 08 00 00 F3 21 40 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T BD 08 00 00 EB CD 0A 14 00 00 21 1E 00 DD 4E +R 00 00 01 00 00 06 01 00 +T C6 08 00 00 02 DD 46 03 09 34 23 20 01 34 +R 00 00 01 00 +T D0 08 00 00 +R 00 00 01 00 +T D0 08 00 00 03 03 0A 6F 03 0A 67 23 23 4E 23 +R 00 00 01 00 +T DB 08 00 00 46 C5 DD 6E F2 DD 66 F3 23 23 5E +R 00 00 01 00 +T E6 08 00 00 23 56 23 4E 23 46 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T EE 08 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T F5 08 00 00 21 41 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 00 05 02 00 2B 0B 20 00 +T FB 08 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 20 00 02 0A 01 00 +T 02 09 00 00 E1 E1 +R 00 00 01 00 +T 04 09 00 00 +R 00 00 01 00 +T 04 09 00 00 +R 00 00 01 00 +T 04 09 00 00 18 14 +R 00 00 01 00 +T 06 09 00 00 +R 00 00 01 00 +T 06 09 00 00 21 3C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 11 09 00 00 23 66 68 DD 75 F4 DD 74 F5 +R 00 00 01 00 +T 1A 09 00 00 +R 00 00 01 00 +T 1A 09 00 00 DD 6E F4 DD 66 F5 DD 75 F2 DD 74 +R 00 00 01 00 +T 25 09 00 00 F3 7D B4 28 5F +R 00 00 01 00 +T 2A 09 00 00 +R 00 00 01 00 +T 2A 09 00 00 DD 6E F2 DD 66 F3 23 23 4E 23 46 +R 00 00 01 00 +T 35 09 00 00 23 5E 23 56 D5 C5 DD 5E FE 3E +R 00 00 01 00 +T 3F 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 22 00 02 09 22 00 +T 44 09 00 00 00 00 00 00 F1 F1 DD 75 FC DD 74 +R 00 00 01 00 02 04 01 00 +T 4D 09 00 00 FD 7D B4 28 0E +R 00 00 01 00 +T 52 09 00 00 +R 00 00 01 00 +T 52 09 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 5A 09 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0D 00 02 0A 01 00 +T 60 09 00 00 +R 00 00 01 00 +T 60 09 00 00 21 00 00 E5 DD 6E F2 DD 66 F3 23 +R 00 00 01 00 +T 6B 09 00 00 23 4E 23 46 23 5E 23 56 D5 C5 DD +R 00 00 01 00 +T 76 09 00 00 4E FE DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T 7F 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T 84 09 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 89 09 00 00 +R 00 00 01 00 +T 89 09 00 00 21 34 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 94 09 00 00 5E F2 DD 56 F3 73 23 72 21 30 00 +R 00 00 01 00 +T 9F 09 00 00 09 E5 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1D 00 +T A7 09 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 1D 00 02 09 01 00 +T AE 09 00 00 73 23 72 23 71 23 70 C3 +R 00 00 01 00 +T B6 09 00 00 00 00 00 00 +R 00 00 01 00 02 04 0E 00 +T B8 09 00 00 +R 00 00 01 00 +T B8 09 00 00 CD 00 00 00 00 FA FF 11 00 00 3E +R 00 00 01 00 02 05 16 00 +T C1 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T C6 09 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 01 00 +T CF 09 00 00 71 FE DD 70 FF +R 00 00 01 00 +T D4 09 00 00 +R 00 00 01 00 +T D4 09 00 00 21 20 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T DF 09 00 00 23 66 68 01 0F 00 A7 ED 42 D2 +R 00 00 01 00 +T E9 09 00 00 AC 0A 00 00 +R 00 00 01 00 00 04 01 00 +T EB 09 00 00 +R 00 00 01 00 +T EB 09 00 00 21 38 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T F6 09 00 00 23 66 68 DD 75 FA DD 74 FB 7D B4 +R 00 00 01 00 +T 01 0A 00 00 20 06 +R 00 00 01 00 +T 03 0A 00 00 +R 00 00 01 00 +T 03 0A 00 00 21 00 00 C3 AF 0A 00 00 +R 00 00 01 00 00 08 01 00 +T 09 0A 00 00 +R 00 00 01 00 +T 09 0A 00 00 21 28 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 14 0A 00 00 23 46 23 5E 23 56 D5 C5 21 06 00 +R 00 00 01 00 +T 1F 0A 00 00 DD 4E FA DD 46 FB 09 4E 23 46 23 +R 00 00 01 00 +T 2A 0A 00 00 5E 23 56 69 60 4D 44 DD 6E FC DD +R 00 00 01 00 +T 35 0A 00 00 66 FD A7 ED 42 4D 44 DD 6E FE DD +R 00 00 01 00 +T 40 0A 00 00 66 FF ED 52 EB 69 60 A7 C1 ED 42 +R 00 00 01 00 +T 4B 0A 00 00 EB C1 ED 42 30 05 +R 00 00 01 00 +T 51 0A 00 00 +R 00 00 01 00 +T 51 0A 00 00 21 00 00 18 59 +R 00 00 01 00 +T 56 0A 00 00 +R 00 00 01 00 +T 56 0A 00 00 21 38 00 DD 4E 02 DD 46 03 09 EB +R 00 00 01 00 +T 61 0A 00 00 3E 64 14 00 00 21 64 14 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 67 0A 00 00 00 00 00 00 DD 75 FA DD 74 FB 11 +R 00 00 01 00 02 04 01 00 +T 70 0A 00 00 06 00 19 DD 4E FE DD 46 FF DD 5E +R 00 00 01 00 +T 7B 0A 00 00 FC DD 56 FD 73 23 72 23 71 23 70 +R 00 00 01 00 +T 86 0A 00 00 DD 4E FA DD 46 FB 21 3C 00 DD 5E +R 00 00 01 00 +T 91 0A 00 00 02 DD 56 03 19 EB CD 0A 14 00 00 +R 00 00 01 00 00 0B 01 00 +T 9A 0A 00 00 21 20 00 DD 4E 02 DD 46 03 09 34 +R 00 00 01 00 +T A5 0A 00 00 23 20 01 34 +R 00 00 01 00 +T A9 0A 00 00 +R 00 00 01 00 +T A9 0A 00 00 C3 D4 09 00 00 +R 00 00 01 00 00 05 01 00 +T AC 0A 00 00 +R 00 00 01 00 +T AC 0A 00 00 21 00 00 +R 00 00 01 00 +T AF 0A 00 00 +R 00 00 01 00 +T AF 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T B2 0A 00 00 +R 00 00 01 00 +T B2 0A 00 00 CD 00 00 00 00 F8 FF 2A +R 00 00 01 00 02 05 16 00 +T B8 0A 00 00 00 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 00 04 03 00 +T C0 0A 00 00 +R 00 00 01 00 +T C0 0A 00 00 DD 7E F8 DD B6 F9 28 2B +R 00 00 01 00 +T C8 0A 00 00 +R 00 00 01 00 +T C8 0A 00 00 DD 6E F8 DD 66 F9 23 23 46 23 66 +R 00 00 01 00 +T D3 0A 00 00 68 DD 4E 02 DD 46 03 A7 ED 42 20 +R 00 00 01 00 +T DE 0A 00 00 02 +R 00 00 01 00 +T DF 0A 00 00 +R 00 00 01 00 +T DF 0A 00 00 18 12 +R 00 00 01 00 +T E1 0A 00 00 +R 00 00 01 00 +T E1 0A 00 00 DD 6E F8 DD 66 F9 46 23 66 68 DD +R 00 00 01 00 +T EC 0A 00 00 75 F8 DD 74 F9 18 CD +R 00 00 01 00 +T F3 0A 00 00 +R 00 00 01 00 +T F3 0A 00 00 DD 7E F8 DD B6 F9 20 14 +R 00 00 01 00 +T FB 0A 00 00 +R 00 00 01 00 +T FB 0A 00 00 DD 6E 0A DD 66 0B AF 77 23 77 23 +R 00 00 01 00 +T 06 0B 00 00 77 23 77 21 1F 0C C3 B0 0C 00 00 +R 00 00 01 00 00 0B 01 00 +T 0F 0B 00 00 +R 00 00 01 00 +T 0F 0B 00 00 21 02 00 39 E5 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 1A 0B 00 00 DD 5E F8 DD 56 F9 CD 6E 0D 00 00 +R 00 00 01 00 00 0B 01 00 +T 23 0B 00 00 F1 DD 75 FC DD 74 FD 7D B4 28 15 +R 00 00 01 00 +T 2E 0B 00 00 +R 00 00 01 00 +T 2E 0B 00 00 21 02 00 39 4D 44 DD 5E F8 DD 56 +R 00 00 01 00 +T 39 0B 00 00 F9 CD 30 0D 00 00 DD 75 FC DD 74 +R 00 00 01 00 00 06 01 00 +T 42 0B 00 00 FD +R 00 00 01 00 +T 43 0B 00 00 +R 00 00 01 00 +T 43 0B 00 00 DD 7E FC DD B6 FD C2 4B 0C 00 00 +R 00 00 01 00 00 0B 01 00 +T 4C 0B 00 00 +R 00 00 01 00 +T 4C 0B 00 00 21 2C 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T 57 0B 00 00 23 56 D5 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T 61 0B 00 00 0A 00 DD 5E FA DD 56 FB 19 EB 3E +R 00 00 01 00 +T 6C 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 71 0B 00 00 00 00 00 00 F1 DD 6E FA DD 66 FB +R 00 00 01 00 02 04 01 00 +T 7A 0B 00 00 23 23 5E 23 56 23 4E 23 46 EB E5 +R 00 00 01 00 +T 85 0B 00 00 DD 6E 0A DD 66 0B D1 73 23 72 23 +R 00 00 01 00 +T 90 0B 00 00 71 23 70 21 06 00 DD 4E FA DD 46 +R 00 00 01 00 +T 9B 0B 00 00 FB 09 E5 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T A3 0B 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 1D 00 02 0A 01 00 +T AA 0B 00 00 E1 73 23 72 23 71 23 70 DD 4E FA +R 00 00 01 00 +T B5 0B 00 00 DD 46 FB 21 38 00 DD 5E F8 DD 56 +R 00 00 01 00 +T C0 0B 00 00 F9 19 EB CD 0A 14 00 00 DD 6E F8 +R 00 00 01 00 00 08 01 00 +T C9 0B 00 00 DD 66 F9 23 23 46 23 66 68 01 +R 00 00 01 00 +T D3 0B 00 00 3D 00 09 46 23 66 68 01 0E 00 09 +R 00 00 01 00 +T DE 0B 00 00 46 23 66 68 29 29 29 29 01 +R 00 00 01 00 +T E7 0B 00 00 00 00 00 00 09 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 02 00 +T F0 0B 00 00 DD 4E F8 DD 46 F9 03 03 69 60 4E +R 00 00 01 00 +T FB 0B 00 00 23 46 03 03 69 60 4E 23 46 C5 DD +R 00 00 01 00 +T 06 0C 00 00 4E 04 DD 46 05 C5 11 14 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 0F 0C 00 00 21 0A 00 DD 4E FE DD 46 FF 09 4E +R 00 00 01 00 +T 1A 0C 00 00 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 22 0C 00 00 00 00 00 00 E5 DD 6E 0A DD 66 0B +R 00 00 01 00 02 04 01 00 +T 2B 0C 00 00 5E 23 56 23 4E 23 46 3E +R 00 00 01 00 +T 33 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T 38 0C 00 00 00 00 00 00 E5 21 62 00 00 00 E5 +R 00 00 01 00 02 04 01 00 00 0A 02 00 +T 3F 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 20 00 02 0A 20 00 +T 45 0C 00 00 00 00 00 00 E1 E1 E1 E1 +R 00 00 01 00 02 04 01 00 +T 4B 0C 00 00 +R 00 00 01 00 +T 4B 0C 00 00 21 2E 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 56 0C 00 00 FE 02 28 2B FE 01 28 04 FE 08 20 +R 00 00 01 00 +T 61 0C 00 00 48 +R 00 00 01 00 +T 62 0C 00 00 +R 00 00 01 00 +T 62 0C 00 00 21 1E 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T 6D 0C 00 00 23 56 21 22 00 09 46 23 66 68 A7 +R 00 00 01 00 +T 78 0C 00 00 ED 52 38 09 +R 00 00 01 00 +T 7C 0C 00 00 +R 00 00 01 00 +T 7C 0C 00 00 DD 5E F8 DD 56 F9 CD B3 0C 00 00 +R 00 00 01 00 00 0B 01 00 +T 85 0C 00 00 +R 00 00 01 00 +T 85 0C 00 00 +R 00 00 01 00 +T 85 0C 00 00 21 1E 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T 90 0C 00 00 23 56 21 24 00 09 46 23 66 68 A7 +R 00 00 01 00 +T 9B 0C 00 00 ED 52 38 09 +R 00 00 01 00 +T 9F 0C 00 00 +R 00 00 01 00 +T 9F 0C 00 00 DD 5E F8 DD 56 F9 CD 5E 0F 00 00 +R 00 00 01 00 00 0B 01 00 +T A8 0C 00 00 +R 00 00 01 00 +T A8 0C 00 00 18 00 +R 00 00 01 00 +T AA 0C 00 00 +R 00 00 01 00 +T AA 0C 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T B0 0C 00 00 +R 00 00 01 00 +T B0 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T B3 0C 00 00 +R 00 00 01 00 +T B3 0C 00 00 CD 00 00 00 00 E0 FF 21 00 00 39 +R 00 00 01 00 02 05 16 00 +T BC 0C 00 00 E5 21 14 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T C7 0C 00 00 5E 23 56 23 4E 23 46 CD +R 00 00 01 00 +T CF 0C 00 00 D0 15 00 00 E1 21 10 00 39 E5 21 +R 00 00 01 00 00 04 01 00 +T D8 0C 00 00 18 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T E3 0C 00 00 56 23 4E 23 46 CD D0 15 00 00 E1 +R 00 00 01 00 00 0A 01 00 +T EC 0C 00 00 21 2E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T F7 0C 00 00 E6 01 28 18 +R 00 00 01 00 +T FB 0C 00 00 +R 00 00 01 00 +T FB 0C 00 00 21 2F 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 06 0D 00 00 10 21 30 00 09 AF 77 23 77 23 77 +R 00 00 01 00 +T 11 0D 00 00 23 77 +R 00 00 01 00 +T 13 0D 00 00 +R 00 00 01 00 +T 13 0D 00 00 21 2E 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 1E 0D 00 00 02 21 28 00 09 AF 36 60 23 36 09 +R 00 00 01 00 +T 29 0D 00 00 23 77 23 77 C3 00 00 00 00 +R 00 00 01 00 02 09 0E 00 +T 30 0D 00 00 +R 00 00 01 00 +T 30 0D 00 00 CD 00 00 00 00 21 40 00 19 EB 3E +R 00 00 01 00 02 05 13 00 +T 39 0D 00 00 64 14 00 00 21 64 14 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 3E 0D 00 00 00 00 00 00 E5 69 60 C1 71 23 70 +R 00 00 01 00 02 04 01 00 +T 47 0D 00 00 DD 6E 04 DD 66 05 7E 23 B6 20 05 +R 00 00 01 00 +T 52 0D 00 00 +R 00 00 01 00 +T 52 0D 00 00 21 1F 0C 18 14 +R 00 00 01 00 +T 57 0D 00 00 +R 00 00 01 00 +T 57 0D 00 00 21 1E 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 62 0D 00 00 23 46 0B 70 2B 71 21 00 00 +R 00 00 01 00 +T 6B 0D 00 00 +R 00 00 01 00 +T 6B 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 6E 0D 00 00 +R 00 00 01 00 +T 6E 0D 00 00 CD 00 00 00 00 FE FF 21 38 00 DD +R 00 00 01 00 02 05 16 00 +T 77 0D 00 00 5E 02 DD 56 03 19 56 23 66 6A DD +R 00 00 01 00 +T 82 0D 00 00 75 FE DD 74 FF +R 00 00 01 00 +T 87 0D 00 00 +R 00 00 01 00 +T 87 0D 00 00 DD 7E FE DD B6 FF 28 69 +R 00 00 01 00 +T 8F 0D 00 00 +R 00 00 01 00 +T 8F 0D 00 00 21 2C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 9A 0D 00 00 23 46 C5 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T A4 0D 00 00 0A 00 DD 5E FE DD 56 FF 19 EB 3E +R 00 00 01 00 +T AF 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T B4 0D 00 00 00 00 00 00 F1 7D B4 20 2B +R 00 00 01 00 02 04 01 00 +T BB 0D 00 00 +R 00 00 01 00 +T BB 0D 00 00 DD 4E FE DD 46 FF 21 38 00 DD 5E +R 00 00 01 00 +T C6 0D 00 00 02 DD 56 03 19 EB CD C2 14 00 00 +R 00 00 01 00 00 0B 01 00 +T CF 0D 00 00 DD 6E FE DD 66 FF E5 DD 6E 08 DD +R 00 00 01 00 +T DA 0D 00 00 66 09 C1 71 23 70 21 00 00 C3 +R 00 00 01 00 +T E4 0D 00 00 5B 0F 00 00 +R 00 00 01 00 00 04 01 00 +T E6 0D 00 00 +R 00 00 01 00 +T E6 0D 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T F1 0D 00 00 75 FE DD 74 FF 18 8F +R 00 00 01 00 +T F8 0D 00 00 +R 00 00 01 00 +T F8 0D 00 00 21 3C 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 03 0E 00 00 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T 0C 0E 00 00 +R 00 00 01 00 +T 0C 0E 00 00 DD 7E FE DD B6 FF CA C2 0E 00 00 +R 00 00 01 00 00 0B 01 00 +T 15 0E 00 00 +R 00 00 01 00 +T 15 0E 00 00 21 2C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 20 0E 00 00 23 46 C5 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T 2A 0E 00 00 0A 00 DD 5E FE DD 56 FF 19 EB 3E +R 00 00 01 00 +T 35 0E 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T 3A 0E 00 00 00 00 00 00 F1 7D B4 20 6E +R 00 00 01 00 02 04 01 00 +T 41 0E 00 00 +R 00 00 01 00 +T 41 0E 00 00 21 2E 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 4C 0E 00 00 E6 01 20 34 21 2F 00 DD 4E 02 DD +R 00 00 01 00 +T 57 0E 00 00 46 03 09 7E FE 20 20 25 21 34 00 +R 00 00 01 00 +T 62 0E 00 00 DD 4E 02 DD 46 03 09 46 23 66 68 +R 00 00 01 00 +T 6D 0E 00 00 DD 4E FE DD 46 FF A7 ED 42 20 0C +R 00 00 01 00 +T 78 0E 00 00 +R 00 00 01 00 +T 78 0E 00 00 +R 00 00 01 00 +T 78 0E 00 00 +R 00 00 01 00 +T 78 0E 00 00 21 2F 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 83 0E 00 00 10 +R 00 00 01 00 +T 84 0E 00 00 +R 00 00 01 00 +T 84 0E 00 00 DD 4E FE DD 46 FF 21 3C 00 DD 5E +R 00 00 01 00 +T 8F 0E 00 00 02 DD 56 03 19 EB CD C2 14 00 00 +R 00 00 01 00 00 0B 01 00 +T 98 0E 00 00 DD 6E FE DD 66 FF E5 DD 6E 08 DD +R 00 00 01 00 +T A3 0E 00 00 66 09 C1 71 23 70 21 00 00 C3 +R 00 00 01 00 +T AD 0E 00 00 5B 0F 00 00 +R 00 00 01 00 00 04 01 00 +T AF 0E 00 00 +R 00 00 01 00 +T AF 0E 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T BA 0E 00 00 75 FE DD 74 FF C3 0C 0E 00 00 +R 00 00 01 00 00 0A 01 00 +T C2 0E 00 00 +R 00 00 01 00 +T C2 0E 00 00 21 40 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T CD 0E 00 00 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T D6 0E 00 00 +R 00 00 01 00 +T D6 0E 00 00 DD 7E FE DD B6 FF 28 7A +R 00 00 01 00 +T DE 0E 00 00 +R 00 00 01 00 +T DE 0E 00 00 21 2C 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T E9 0E 00 00 23 46 C5 DD 4E 04 DD 46 05 21 +R 00 00 01 00 +T F3 0E 00 00 0A 00 DD 5E FE DD 56 FF 19 EB 3E +R 00 00 01 00 +T FE 0E 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T 03 0F 00 00 00 00 00 00 F1 7D B4 20 3B +R 00 00 01 00 02 04 01 00 +T 0A 0F 00 00 +R 00 00 01 00 +T 0A 0F 00 00 DD 4E FE DD 46 FF 21 40 00 DD 5E +R 00 00 01 00 +T 15 0F 00 00 02 DD 56 03 19 EB CD C2 14 00 00 +R 00 00 01 00 00 0B 01 00 +T 1E 0F 00 00 21 1E 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 29 0F 00 00 23 46 0B 70 2B 71 DD 6E FE DD 66 +R 00 00 01 00 +T 34 0F 00 00 FF E5 DD 6E 08 DD 66 09 C1 71 23 +R 00 00 01 00 +T 3F 0F 00 00 70 21 00 00 18 16 +R 00 00 01 00 +T 45 0F 00 00 +R 00 00 01 00 +T 45 0F 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T 50 0F 00 00 75 FE DD 74 FF C3 D6 0E 00 00 +R 00 00 01 00 00 0A 01 00 +T 58 0F 00 00 +R 00 00 01 00 +T 58 0F 00 00 21 1F 0C +R 00 00 01 00 +T 5B 0F 00 00 +R 00 00 01 00 +T 5B 0F 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 5E 0F 00 00 +R 00 00 01 00 +T 5E 0F 00 00 CD 00 00 00 00 DE FF 21 14 00 DD +R 00 00 01 00 02 05 16 00 +T 67 0F 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 72 0F 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T 77 0F 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 7E 0F 00 00 FE DD 74 FF 4D 44 21 00 00 39 5D +R 00 00 01 00 +T 89 0F 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 14 00 02 0B 14 00 +T 8F 0F 00 00 CD 00 00 00 00 21 18 00 DD 4E 02 +R 00 00 01 00 02 05 01 00 +T 98 0F 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T A3 0F 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T A9 0F 00 00 00 00 00 00 DD 75 FE DD 74 FF 4D +R 00 00 01 00 02 04 01 00 +T B2 0F 00 00 44 21 10 00 39 5D 54 3E +R 00 00 01 00 +T BA 0F 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T BF 0F 00 00 00 00 00 00 21 2E 00 DD 4E 02 DD +R 00 00 01 00 02 04 01 00 +T C8 0F 00 00 46 03 09 7E E6 01 20 18 +R 00 00 01 00 +T D0 0F 00 00 +R 00 00 01 00 +T D0 0F 00 00 21 2F 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T DB 0F 00 00 10 21 30 00 09 AF 77 23 77 23 77 +R 00 00 01 00 +T E6 0F 00 00 23 77 +R 00 00 01 00 +T E8 0F 00 00 +R 00 00 01 00 +T E8 0F 00 00 21 2E 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T F3 0F 00 00 04 21 28 00 09 AF 77 23 77 23 77 +R 00 00 01 00 +T FE 0F 00 00 23 77 C3 00 00 00 00 +R 00 00 01 00 02 07 0E 00 +T 03 10 00 00 +R 00 00 01 00 +T 03 10 00 00 D5 11 00 00 00 00 CD F3 13 00 00 +R 00 00 01 00 00 06 03 00 00 0B 01 00 +T 0A 10 00 00 21 00 00 D1 C3 00 00 00 00 +R 00 00 01 00 02 09 04 00 +T 11 10 00 00 +R 00 00 01 00 +T 11 10 00 00 CD 00 00 00 00 D2 FF 2A +R 00 00 01 00 02 05 16 00 +T 17 10 00 00 00 00 00 00 DD 75 D2 DD 74 D3 +R 00 00 01 00 00 04 03 00 +T 1F 10 00 00 +R 00 00 01 00 +T 1F 10 00 00 DD 7E D2 DD B6 D3 28 2B +R 00 00 01 00 +T 27 10 00 00 +R 00 00 01 00 +T 27 10 00 00 DD 6E D2 DD 66 D3 23 23 46 23 66 +R 00 00 01 00 +T 32 10 00 00 68 DD 4E 02 DD 46 03 A7 ED 42 20 +R 00 00 01 00 +T 3D 10 00 00 02 +R 00 00 01 00 +T 3E 10 00 00 +R 00 00 01 00 +T 3E 10 00 00 18 12 +R 00 00 01 00 +T 40 10 00 00 +R 00 00 01 00 +T 40 10 00 00 DD 6E D2 DD 66 D3 46 23 66 68 DD +R 00 00 01 00 +T 4B 10 00 00 75 D2 DD 74 D3 18 CD +R 00 00 01 00 +T 52 10 00 00 +R 00 00 01 00 +T 52 10 00 00 DD 7E D2 DD B6 D3 20 20 +R 00 00 01 00 +T 5A 10 00 00 +R 00 00 01 00 +T 5A 10 00 00 01 44 00 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1C 00 +T 62 10 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 1C 00 02 0A 01 00 +T 69 10 00 00 75 D2 DD 74 D3 7D B4 20 06 +R 00 00 01 00 +T 72 10 00 00 +R 00 00 01 00 +T 72 10 00 00 21 1D 0C C3 F0 13 00 00 +R 00 00 01 00 00 08 01 00 +T 78 10 00 00 +R 00 00 01 00 +T 78 10 00 00 18 6F +R 00 00 01 00 +T 7A 10 00 00 +R 00 00 01 00 +T 7A 10 00 00 21 14 00 DD 4E D2 DD 46 D3 09 4E +R 00 00 01 00 +T 85 10 00 00 23 46 23 5E 23 56 69 60 DD 4E 0A +R 00 00 01 00 +T 90 10 00 00 DD 46 0B A7 ED 42 20 34 EB DD 4E +R 00 00 01 00 +T 9B 10 00 00 0C DD 46 0D ED 42 20 29 21 18 00 +R 00 00 01 00 +T A6 10 00 00 DD 4E D2 DD 46 D3 09 4E 23 46 23 +R 00 00 01 00 +T B1 10 00 00 5E 23 56 69 60 DD 4E 0E DD 46 0F +R 00 00 01 00 +T BC 10 00 00 A7 ED 42 20 0B EB DD 4E 10 DD 46 +R 00 00 01 00 +T C7 10 00 00 11 ED 42 28 17 +R 00 00 01 00 +T CC 10 00 00 +R 00 00 01 00 +T CC 10 00 00 +R 00 00 01 00 +T CC 10 00 00 +R 00 00 01 00 +T CC 10 00 00 +R 00 00 01 00 +T CC 10 00 00 21 36 00 DD 4E D2 DD 46 D3 09 5E +R 00 00 01 00 +T D7 10 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 12 00 +T DC 10 00 00 00 00 00 00 CD 00 00 00 00 18 06 +R 00 00 01 00 02 04 12 00 02 09 01 00 +T E3 10 00 00 +R 00 00 01 00 +T E3 10 00 00 21 00 00 C3 F0 13 00 00 +R 00 00 01 00 00 08 01 00 +T E9 10 00 00 +R 00 00 01 00 +T E9 10 00 00 +R 00 00 01 00 +T E9 10 00 00 A7 DD 6E 0E DD 66 0F DD 4E 0A DD +R 00 00 01 00 +T F4 10 00 00 46 0B ED 42 EB DD 6E 10 DD 66 11 +R 00 00 01 00 +T FF 10 00 00 DD 4E 0C DD 46 0D ED 42 E5 D5 21 +R 00 00 01 00 +T 0A 11 00 00 01 00 C1 09 EB 21 00 00 C1 ED 4A +R 00 00 01 00 +T 15 11 00 00 4D 44 EB DD 75 D6 DD 74 D7 DD 71 +R 00 00 01 00 +T 20 11 00 00 D8 DD 70 D9 21 3D 00 DD 4E 02 DD +R 00 00 01 00 +T 2B 11 00 00 46 03 09 46 23 66 68 01 10 00 09 +R 00 00 01 00 +T 36 11 00 00 46 23 66 68 01 0B 00 09 4D 44 DD +R 00 00 01 00 +T 41 11 00 00 5E D6 DD 56 D7 CD 00 00 00 00 4B +R 00 00 01 00 02 0A 17 00 +T 4A 11 00 00 42 11 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 1C 00 +T 51 11 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1C 00 02 09 01 00 +T 58 11 00 00 D4 DD 74 D5 7D B4 20 06 +R 00 00 01 00 +T 60 11 00 00 +R 00 00 01 00 +T 60 11 00 00 21 1D 0C C3 F0 13 00 00 +R 00 00 01 00 00 08 01 00 +T 66 11 00 00 +R 00 00 01 00 +T 66 11 00 00 DD 6E D2 DD 66 D3 23 23 DD 4E 02 +R 00 00 01 00 +T 71 11 00 00 DD 46 03 71 23 70 21 14 00 DD 5E +R 00 00 01 00 +T 7C 11 00 00 D2 DD 56 D3 19 DD 4E 0C DD 46 0D +R 00 00 01 00 +T 87 11 00 00 DD 5E 0A DD 56 0B 73 23 72 23 71 +R 00 00 01 00 +T 92 11 00 00 23 70 21 18 00 DD 4E D2 DD 46 D3 +R 00 00 01 00 +T 9D 11 00 00 09 DD 4E 10 DD 46 11 DD 5E 0E DD +R 00 00 01 00 +T A8 11 00 00 56 0F 73 23 72 23 71 23 70 21 +R 00 00 01 00 +T B2 11 00 00 1C 00 DD 4E D2 DD 46 D3 09 DD 5E +R 00 00 01 00 +T BD 11 00 00 D6 DD 56 D7 73 23 72 21 1E 00 09 +R 00 00 01 00 +T C8 11 00 00 AF 77 23 77 21 20 00 09 AF 77 23 +R 00 00 01 00 +T D3 11 00 00 77 21 22 00 09 E5 11 00 00 D5 11 +R 00 00 01 00 +T DE 11 00 00 64 00 D5 11 00 00 D5 11 14 00 D5 +R 00 00 01 00 +T E9 11 00 00 DD 4E D8 DD 46 D9 DD 6E D6 DD 66 +R 00 00 01 00 +T F4 11 00 00 D7 CD 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 06 15 00 02 0B 1A 00 +T FB 11 00 00 EB E1 73 23 72 21 24 00 DD 4E D2 +R 00 00 01 00 +T 06 12 00 00 DD 46 D3 09 36 02 23 36 00 21 +R 00 00 01 00 +T 10 12 00 00 26 00 09 E5 11 00 00 D5 11 64 00 +R 00 00 01 00 +T 1B 12 00 00 D5 11 00 00 D5 11 32 00 D5 DD 4E +R 00 00 01 00 +T 26 12 00 00 D8 DD 46 D9 DD 6E D6 DD 66 D7 CD +R 00 00 01 00 +T 31 12 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 15 00 02 09 1A 00 +T 38 12 00 00 73 23 72 21 28 00 DD 4E D2 DD 46 +R 00 00 01 00 +T 43 12 00 00 D3 09 AF 77 23 77 23 77 23 77 21 +R 00 00 01 00 +T 4E 12 00 00 2C 00 09 E5 21 3D 00 DD 5E 02 DD +R 00 00 01 00 +T 59 12 00 00 56 03 19 56 23 66 6A 11 10 00 19 +R 00 00 01 00 +T 64 12 00 00 5E 23 56 E1 73 23 72 21 2E 00 09 +R 00 00 01 00 +T 6F 12 00 00 36 01 21 2F 00 09 36 10 21 30 00 +R 00 00 01 00 +T 7A 12 00 00 09 AF 77 23 77 23 77 23 77 21 +R 00 00 01 00 +T 84 12 00 00 34 00 09 AF 77 23 77 21 36 00 09 +R 00 00 01 00 +T 8F 12 00 00 DD 5E D4 DD 56 D5 73 23 72 21 +R 00 00 01 00 +T 99 12 00 00 08 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 1D 00 +T A1 12 00 00 00 00 00 00 CD 00 00 00 00 AF DD +R 00 00 01 00 02 04 1D 00 02 09 01 00 +T A8 12 00 00 77 DE DD 77 DF 21 36 00 DD 4E D2 +R 00 00 01 00 +T B3 12 00 00 DD 46 D3 09 46 23 66 68 DD 75 D4 +R 00 00 01 00 +T BE 12 00 00 DD 74 D5 +R 00 00 01 00 +T C1 12 00 00 +R 00 00 01 00 +T C1 12 00 00 21 1C 00 DD 4E D2 DD 46 D3 09 4E +R 00 00 01 00 +T CC 12 00 00 23 46 DD 6E DE DD 66 DF A7 ED 42 +R 00 00 01 00 +T D7 12 00 00 30 7A +R 00 00 01 00 +T D9 12 00 00 +R 00 00 01 00 +T D9 12 00 00 DD 6E D4 DD 66 D5 23 23 E5 DD 6E +R 00 00 01 00 +T E4 12 00 00 0A DD 66 0B DD 4E 0C DD 46 0D C5 +R 00 00 01 00 +T EF 12 00 00 E5 CD 00 00 00 00 DD 75 0A DD 74 +R 00 00 01 00 02 06 09 00 +T F8 12 00 00 0B DD 71 0C DD 70 0D D1 C1 E1 73 +R 00 00 01 00 +T 03 13 00 00 23 72 23 71 23 70 21 06 00 DD 4E +R 00 00 01 00 +T 0E 13 00 00 D4 DD 46 D5 09 AF 77 23 77 23 77 +R 00 00 01 00 +T 19 13 00 00 23 77 21 38 00 DD 5E D2 DD 56 D3 +R 00 00 01 00 +T 24 13 00 00 19 EB CD 0A 14 00 00 DD 34 DE 20 +R 00 00 01 00 00 07 01 00 +T 2D 13 00 00 03 DD 34 DF +R 00 00 01 00 +T 31 13 00 00 +R 00 00 01 00 +T 31 13 00 00 21 2C 00 DD 4E D2 DD 46 D3 09 46 +R 00 00 01 00 +T 3C 13 00 00 23 66 68 01 0B 00 09 DD 4E D4 DD +R 00 00 01 00 +T 47 13 00 00 46 D5 09 DD 75 D4 DD 74 D5 C3 +R 00 00 01 00 +T 51 13 00 00 C1 12 00 00 +R 00 00 01 00 00 04 01 00 +T 53 13 00 00 +R 00 00 01 00 +T 53 13 00 00 2A 00 00 00 00 7D B4 20 31 +R 00 00 01 00 00 05 03 00 +T 5A 13 00 00 +R 00 00 01 00 +T 5A 13 00 00 21 00 00 E5 21 88 13 E5 11 +R 00 00 01 00 +T 63 13 00 00 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 07 00 +T 68 13 00 00 00 00 00 00 CD 00 00 00 00 E1 E1 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T 6F 13 00 00 3E 02 04 00 00 21 02 04 00 00 32 +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 75 13 00 00 10 00 00 00 22 0E 00 00 00 21 +R 00 00 01 00 00 04 03 00 00 09 03 00 +T 7B 13 00 00 00 00 22 11 00 00 00 11 +R 00 00 01 00 00 07 03 00 +T 81 13 00 00 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 1B 00 +T 86 13 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 1B 00 02 09 01 00 +T 8B 13 00 00 +R 00 00 01 00 +T 8B 13 00 00 DD 4E D2 DD 46 D3 11 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 94 13 00 00 CD 0A 14 00 00 DD 5E D2 DD 56 D3 +R 00 00 01 00 00 05 01 00 +T 9D 13 00 00 CD 5E 0F 00 00 21 0E 00 39 E5 21 +R 00 00 01 00 00 05 01 00 +T A6 13 00 00 14 00 DD 4E D2 DD 46 D3 09 5E 23 +R 00 00 01 00 +T B1 13 00 00 56 23 4E 23 46 CD D0 15 00 00 E1 +R 00 00 01 00 00 0A 01 00 +T BA 13 00 00 21 1E 00 39 E5 21 18 00 DD 4E D2 +R 00 00 01 00 +T C5 13 00 00 DD 46 D3 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T D0 13 00 00 CD D0 15 00 00 E1 21 1E 00 39 E5 +R 00 00 01 00 00 05 01 00 +T D9 13 00 00 21 10 00 39 E5 21 8B 00 00 00 E5 +R 00 00 01 00 00 0A 02 00 +T E2 13 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 20 00 02 0A 20 00 +T E8 13 00 00 00 00 00 00 E1 E1 E1 21 00 00 +R 00 00 01 00 02 04 01 00 +T F0 13 00 00 +R 00 00 01 00 +T F0 13 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T F3 13 00 00 +R 00 00 01 00 +T F3 13 00 00 CD 00 00 00 00 EB AF 77 23 77 DD +R 00 00 01 00 02 05 13 00 +T FC 13 00 00 6E 02 DD 66 03 23 23 AF 77 23 77 +R 00 00 01 00 +T 07 14 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T 0A 14 00 00 +R 00 00 01 00 +T 0A 14 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 16 00 +T 13 14 00 00 66 03 23 23 7E 23 B6 28 1D +R 00 00 01 00 +T 1C 14 00 00 +R 00 00 01 00 +T 1C 14 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 27 14 00 00 68 DD 75 FE DD 74 FF DD 4E 04 DD +R 00 00 01 00 +T 32 14 00 00 46 05 71 23 70 18 11 +R 00 00 01 00 +T 39 14 00 00 +R 00 00 01 00 +T 39 14 00 00 DD 6E 04 DD 66 05 E5 DD 6E 02 DD +R 00 00 01 00 +T 44 14 00 00 66 03 C1 71 23 70 +R 00 00 01 00 +T 4A 14 00 00 +R 00 00 01 00 +T 4A 14 00 00 DD 6E 02 DD 66 03 23 23 DD 4E 04 +R 00 00 01 00 +T 55 14 00 00 DD 46 05 71 23 70 69 60 AF 77 23 +R 00 00 01 00 +T 60 14 00 00 77 C3 00 00 00 00 +R 00 00 01 00 02 06 0E 00 +T 64 14 00 00 +R 00 00 01 00 +T 64 14 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 16 00 +T 6D 14 00 00 66 03 7E 23 B6 20 05 +R 00 00 01 00 +T 74 14 00 00 +R 00 00 01 00 +T 74 14 00 00 21 00 00 18 46 +R 00 00 01 00 +T 79 14 00 00 +R 00 00 01 00 +T 79 14 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T 84 14 00 00 75 FE DD 74 FF 46 23 66 68 E5 DD +R 00 00 01 00 +T 8F 14 00 00 6E 02 DD 66 03 C1 71 23 70 DD 6E +R 00 00 01 00 +T 9A 14 00 00 FE DD 66 FF AF 77 23 77 DD 6E 02 +R 00 00 01 00 +T A5 14 00 00 DD 66 03 7E 23 B6 20 0C +R 00 00 01 00 +T AD 14 00 00 +R 00 00 01 00 +T AD 14 00 00 DD 6E 02 DD 66 03 23 23 AF 77 23 +R 00 00 01 00 +T B8 14 00 00 77 +R 00 00 01 00 +T B9 14 00 00 +R 00 00 01 00 +T B9 14 00 00 DD 6E FE DD 66 FF +R 00 00 01 00 +T BF 14 00 00 +R 00 00 01 00 +T BF 14 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T C2 14 00 00 +R 00 00 01 00 +T C2 14 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 16 00 +T CB 14 00 00 66 03 56 23 66 6A A7 ED 42 20 64 +R 00 00 01 00 +T D6 14 00 00 +R 00 00 01 00 +T D6 14 00 00 DD 6E 04 DD 66 05 46 23 66 68 E5 +R 00 00 01 00 +T E1 14 00 00 DD 6E 02 DD 66 03 C1 71 23 70 DD +R 00 00 01 00 +T EC 14 00 00 6E 02 DD 66 03 7E 23 B6 20 0E +R 00 00 01 00 +T F6 14 00 00 +R 00 00 01 00 +T F6 14 00 00 DD 6E 02 DD 66 03 23 23 AF 77 23 +R 00 00 01 00 +T 01 15 00 00 77 18 30 +R 00 00 01 00 +T 04 15 00 00 +R 00 00 01 00 +T 04 15 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 0F 15 00 00 68 E5 DD 6E 02 DD 66 03 4E 23 46 +R 00 00 01 00 +T 1A 15 00 00 E1 A7 ED 42 20 14 +R 00 00 01 00 +T 20 15 00 00 +R 00 00 01 00 +T 20 15 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T 2B 15 00 00 75 FE DD 74 FF AF 77 23 77 +R 00 00 01 00 +T 34 15 00 00 +R 00 00 01 00 +T 34 15 00 00 +R 00 00 01 00 +T 34 15 00 00 21 00 00 C3 CD 15 00 00 +R 00 00 01 00 00 08 01 00 +T 3A 15 00 00 +R 00 00 01 00 +T 3A 15 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T 45 15 00 00 75 FC DD 74 FD +R 00 00 01 00 +T 4A 15 00 00 +R 00 00 01 00 +T 4A 15 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 55 15 00 00 4E 04 DD 46 05 A7 ED 42 28 1F +R 00 00 01 00 +T 5F 15 00 00 +R 00 00 01 00 +T 5F 15 00 00 DD 7E FC DD B6 FD 20 05 +R 00 00 01 00 +T 67 15 00 00 +R 00 00 01 00 +T 67 15 00 00 21 01 00 18 61 +R 00 00 01 00 +T 6C 15 00 00 +R 00 00 01 00 +T 6C 15 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 77 15 00 00 75 FC DD 74 FD 18 CC +R 00 00 01 00 +T 7E 15 00 00 +R 00 00 01 00 +T 7E 15 00 00 DD 6E 02 DD 66 03 23 23 46 23 66 +R 00 00 01 00 +T 89 15 00 00 68 DD 4E 04 DD 46 05 A7 ED 42 20 +R 00 00 01 00 +T 94 15 00 00 20 +R 00 00 01 00 +T 95 15 00 00 +R 00 00 01 00 +T 95 15 00 00 DD 6E FC DD 66 FD AF 77 23 77 DD +R 00 00 01 00 +T A0 15 00 00 6E 02 DD 66 03 23 23 DD 4E FC DD +R 00 00 01 00 +T AB 15 00 00 46 FD 71 23 70 21 00 00 18 18 +R 00 00 01 00 +T B5 15 00 00 +R 00 00 01 00 +T B5 15 00 00 DD 6E 04 DD 66 05 46 23 66 68 E5 +R 00 00 01 00 +T C0 15 00 00 DD 6E FC DD 66 FD C1 71 23 70 21 +R 00 00 01 00 +T CB 15 00 00 00 00 +R 00 00 01 00 +T CD 15 00 00 +R 00 00 01 00 +T CD 15 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0E 00 +T D0 15 00 00 +R 00 00 01 00 +T D0 15 00 00 CD 00 00 00 00 FE FF DD 4E 04 DD +R 00 00 01 00 02 05 16 00 +T D9 15 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T E2 15 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 00 00 02 09 00 00 +T E7 15 00 00 00 00 00 00 DD 75 FE DD 74 FF 4D +R 00 00 01 00 02 04 01 00 +T F0 15 00 00 44 DD 5E 08 DD 56 09 3E +R 00 00 01 00 +T F8 15 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T FD 15 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 0E 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 52 61 6E 67 65 20 66 6F 72 20 69 +R 00 00 02 00 +T 0B 00 00 00 6E 74 65 72 66 61 63 65 20 27 25 +R 00 00 02 00 +T 16 00 00 00 73 27 20 6E 6F 74 20 66 6F 75 6E +R 00 00 02 00 +T 21 00 00 00 64 2E 0A 00 +R 00 00 02 00 +T 25 00 00 00 +R 00 00 02 00 +T 25 00 00 00 52 61 6E 67 65 20 72 65 6D 6F 76 +R 00 00 02 00 +T 30 00 00 00 65 64 20 66 6F 72 20 69 66 61 63 +R 00 00 02 00 +T 3B 00 00 00 65 20 25 73 0A 00 +R 00 00 02 00 +T 41 00 00 00 +R 00 00 02 00 +T 41 00 00 00 52 65 63 6C 61 69 6D 65 64 20 61 +R 00 00 02 00 +T 4C 00 00 00 64 64 72 65 73 73 20 25 73 20 6F +R 00 00 02 00 +T 57 00 00 00 6E 20 6E 65 74 20 25 73 2E 0A 00 +R 00 00 02 00 +T 62 00 00 00 +R 00 00 02 00 +T 62 00 00 00 49 50 20 61 64 64 72 20 25 73 20 +R 00 00 02 00 +T 6D 00 00 00 61 73 73 69 67 6E 65 64 20 74 6F +R 00 00 02 00 +T 78 00 00 00 20 25 73 20 6F 6E 20 6E 65 74 77 +R 00 00 02 00 +T 83 00 00 00 6F 72 6B 20 25 73 0A 00 +R 00 00 02 00 +T 8B 00 00 00 +R 00 00 02 00 +T 8B 00 00 00 44 79 6E 61 6D 69 63 49 50 20 72 +R 00 00 02 00 +T 96 00 00 00 61 6E 67 65 3A 20 25 73 20 2D 20 +R 00 00 02 00 +T A1 00 00 00 25 73 0A 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 04 00 00 00 +R 00 00 03 00 +T 14 00 00 00 +R 00 00 03 00 +T 14 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 01 00 04 00 06 00 00 00 +R 00 00 05 00 +T 0A 00 00 00 08 00 00 00 00 00 07 00 03 00 +R 00 00 05 00 +T 14 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 +T 1E 00 00 00 00 00 00 00 00 00 +R 00 00 05 00 diff --git a/src/nos/lib/servers_lib/fingerd.rel b/src/nos/lib/servers_lib/fingerd.rel new file mode 100644 index 00000000..054da049 --- /dev/null +++ b/src/nos/lib/servers_lib/fingerd.rel @@ -0,0 +1,312 @@ +XL4 +H 3 areas 21 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___02b3_1668_Known_20users_20on_ Ref00000000 +S _Fdir Ref00000000 +S _strncmp Ref00000000 +S ___0510_10d3_open_20Finger Ref00000000 +S _logmsg Ref00000000 +S _sendfile Ref00000000 +S _rip Ref00000000 +S _pathname Ref00000000 +S _Listusers Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _start_tcp Ref00000000 +S _strlen Ref00000000 +S __fprintf Ref00000000 +S _fgets Ref00000000 +S _sockowner Ref00000000 +S ___043a_f93d_close_20Finger Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ___030c_cd1f_No_20finger_20infor Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _stop_tcp Ref00000000 +S _atoi Ref00000000 +S ___02af_62ed_Invalid_20user_20na Ref00000000 +S _freopen Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___03d5_633f_User_20_25s_20not_2 Ref00000000 +S _fdopen Ref00000000 +S _fclose Ref00000000 +S _dir Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2CF flags 0 +S _finstart Def00000000 +S _fin0 Def00000285 +A CSTR size 15 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 15 00 +T 09 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 14 00 00 00 30 0A +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 36 FE 4F DD 36 FF 00 18 19 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 2B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T 31 00 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 21 00 02 E5 0E 5B 00 00 00 C5 21 +R 00 00 01 00 29 09 01 00 +T 41 00 00 00 5B 00 00 00 E5 01 00 00 00 00 DD +R 00 00 01 00 00 04 01 00 00 0A 02 00 +T 48 00 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T 50 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 57 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 0A 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 CD 00 00 00 00 A8 FF 01 +R 00 00 01 00 02 05 15 00 +T 61 00 00 00 0E 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 00 04 02 00 +T 6A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1C 00 02 09 1C 00 +T 6F 00 00 00 00 00 00 00 DD 75 FE DD 74 FF ED +R 00 00 01 00 02 04 00 00 +T 78 00 00 00 4B 00 00 00 00 DD 5E 02 DD 56 03 +R 00 00 01 00 02 05 11 00 +T 81 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0F 00 02 0A 0F 00 +T 87 00 00 00 00 00 00 00 0E 00 00 00 00 C5 21 +R 00 00 01 00 02 04 00 00 2B 09 04 00 +T 8D 00 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 04 00 +T 96 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 9C 00 00 00 CD 00 00 00 00 E1 E1 E1 DD 6E FE +R 00 00 01 00 02 05 00 00 +T A5 00 00 00 DD 66 FF E5 01 50 00 21 02 00 39 +R 00 00 01 00 +T B0 00 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T B5 00 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T BC 00 00 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T C4 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T CA 00 00 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0C 00 +T D2 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T D9 00 00 00 20 50 +R 00 00 01 00 +T DB 00 00 00 +R 00 00 01 00 +T DB 00 00 00 01 00 00 ED 5B 00 00 00 00 3E +R 00 00 01 00 02 09 02 00 +T E3 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1E 00 02 09 1E 00 +T E8 00 00 00 00 00 00 00 DD 75 F8 DD 74 F9 7D +R 00 00 01 00 02 04 00 00 +T F1 00 00 00 B4 20 1B +R 00 00 01 00 +T F4 00 00 00 +R 00 00 01 00 +T F4 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 14 00 02 0B 14 00 +T FA 00 00 00 E5 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 03 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 08 01 00 00 00 00 00 00 F1 F1 F1 18 19 +R 00 00 01 00 02 04 00 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 15 01 00 00 E5 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 1E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 23 01 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 C3 FE 01 00 00 +R 00 00 01 00 00 05 01 00 +T 2B 01 00 00 +R 00 00 01 00 +T 2B 01 00 00 21 00 00 39 4D 44 ED 5B +R 00 00 01 00 +T 33 01 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 09 08 00 +T 38 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 3F 01 00 00 FA DD 74 FB 01 12 00 00 00 ED 5B +R 00 00 01 00 00 09 02 00 +T 48 01 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 09 08 00 +T 4D 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 54 01 00 00 FC DD 74 FD EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0C 00 +T 5C 01 00 00 00 00 00 00 CD 00 00 00 00 E5 DD +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 63 01 00 00 4E FC DD 46 FD DD 5E FA DD 56 FB +R 00 00 01 00 +T 6E 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 74 01 00 00 00 00 00 00 F1 7D B4 28 28 +R 00 00 01 00 02 04 00 00 +T 7B 01 00 00 +R 00 00 01 00 +T 7B 01 00 00 AF DD 77 F8 DD 77 F9 21 00 00 39 +R 00 00 01 00 +T 86 01 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 18 00 +T 8B 01 00 00 00 00 00 00 E5 DD 6E FE DD 66 FF +R 00 00 01 00 02 04 18 00 +T 94 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 9A 01 00 00 CD 00 00 00 00 F1 F1 F1 F1 18 3F +R 00 00 01 00 02 05 00 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 21 00 00 E5 01 13 00 00 00 DD 5E +R 00 00 01 00 00 09 02 00 +T AC 01 00 00 FA DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 19 00 +T B3 01 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 19 00 02 09 00 00 +T BA 01 00 00 75 F8 DD 74 F9 7D B4 20 1F +R 00 00 01 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 21 00 00 39 E5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 1B 00 +T CB 01 00 00 21 00 00 00 00 E5 DD 6E FE DD 66 +R 00 00 01 00 02 05 1B 00 +T D4 01 00 00 FF E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0D 00 +T D9 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T E0 01 00 00 F1 F1 +R 00 00 01 00 +T E2 01 00 00 +R 00 00 01 00 +T E2 01 00 00 +R 00 00 01 00 +T E2 01 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 13 00 +T EA 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 13 00 02 0A 00 00 +T F1 01 00 00 5E FA DD 56 FB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 13 00 +T F9 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T FE 01 00 00 +R 00 00 01 00 +T FE 01 00 00 DD 7E F8 DD B6 F9 28 2A +R 00 00 01 00 +T 06 02 00 00 +R 00 00 01 00 +T 06 02 00 00 0E 00 C5 0E 00 C5 DD 4E FE DD 46 +R 00 00 01 00 +T 11 02 00 00 FF DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T 19 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 1E 02 00 00 00 00 00 00 F1 F1 DD 5E F8 DD 56 +R 00 00 01 00 02 04 00 00 +T 27 02 00 00 F9 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1D 00 02 0B 1D 00 +T 2D 02 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 38 02 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T 3F 02 00 00 B4 20 19 2A 00 00 00 00 3A +R 00 00 01 00 02 08 09 00 +T 46 02 00 00 02 00 00 00 B5 B4 28 0F +R 00 00 01 00 02 04 09 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 DD 5E FE DD 56 FF 3A 02 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 55 02 00 00 2A 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 09 00 02 0A 00 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 63 02 00 00 21 00 00 00 00 CD 00 00 00 00 0E +R 00 00 01 00 02 05 1D 00 02 0A 00 00 +T 6A 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 10 00 02 0A 10 00 +T 70 02 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 78 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 7D 02 00 00 00 00 00 00 E1 E1 E1 C3 +R 00 00 01 00 02 04 00 00 +T 83 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 0A 00 +T 85 02 00 00 +R 00 00 01 00 +T 85 02 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 15 00 +T 8E 02 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 99 02 00 00 30 0A +R 00 00 01 00 +T 9B 02 00 00 +R 00 00 01 00 +T 9B 02 00 00 DD 36 FE 4F DD 36 FF 00 18 19 +R 00 00 01 00 +T A5 02 00 00 +R 00 00 01 00 +T A5 02 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T B0 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T B6 02 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T BE 02 00 00 +R 00 00 01 00 +T BE 02 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 16 00 +T C6 02 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 16 00 02 0A 00 00 +T CD 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 0A 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 46 69 6E 67 65 72 20 53 65 72 76 +R 00 00 02 00 +T 0B 00 00 00 65 72 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 72 2B 74 00 +R 00 00 02 00 +T 12 00 00 00 +R 00 00 02 00 +T 12 00 00 00 00 +R 00 00 02 00 +T 13 00 00 00 +R 00 00 02 00 +T 13 00 00 00 72 00 +R 00 00 02 00 diff --git a/src/nos/lib/servers_lib/ftp0.rel b/src/nos/lib/servers_lib/ftp0.rel new file mode 100644 index 00000000..0b234df0 --- /dev/null +++ b/src/nos/lib/servers_lib/ftp0.rel @@ -0,0 +1,40 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _stop_tcp Ref00000000 +S _atoi Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4A flags 0 +S _ftp0 Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 14 00 00 00 30 0A +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 36 FE 15 DD 36 FF 00 18 19 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 2B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 31 00 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 41 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 48 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 diff --git a/src/nos/lib/servers_lib/ftplogin.rel b/src/nos/lib/servers_lib/ftplogin.rel new file mode 100644 index 00000000..86bbf3c1 --- /dev/null +++ b/src/nos/lib/servers_lib/ftplogin.rel @@ -0,0 +1,132 @@ +XL4 +H 2 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _logmsg Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Ftpsmsg_noperm Ref00000000 +S _userlogin Ref00000000 +S __fprintf Ref00000000 +S _strdupw Ref00000000 +S ___0148_a64e__25s_20logged_20in_ Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _mallocw Ref00000000 +S _Ftpsmsg_logged Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0147_a4a4__25s_20logged_20in Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15C flags 0 +S _ftplogin Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 DD 77 FF 11 C8 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 11 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 18 00 00 00 75 FC DD 74 FD 21 1D 00 DD 5E 02 +R 00 00 01 00 +T 23 00 00 00 DD 56 03 19 E5 21 04 00 39 E5 21 +R 00 00 01 00 +T 2E 00 00 00 C8 00 E5 21 06 00 39 E5 21 19 00 +R 00 00 01 00 +T 39 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 04 00 +T 40 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 47 00 00 00 F1 4D 44 E1 71 23 70 79 A0 3C 20 +R 00 00 01 00 +T 52 00 00 00 2F +R 00 00 01 00 +T 53 00 00 00 +R 00 00 01 00 +T 53 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 03 00 +T 59 00 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 03 00 +T 62 00 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T 69 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 70 00 00 00 F1 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 78 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 7D 00 00 00 00 00 00 00 C3 59 01 00 00 +R 00 00 01 00 02 04 00 00 00 09 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 21 1F 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 8D 00 00 00 5E FC DD 56 FD 73 23 72 21 1B 00 +R 00 00 01 00 +T 98 00 00 00 09 E5 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T A1 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T A6 00 00 00 00 00 00 00 EB E1 73 23 72 3A +R 00 00 01 00 02 04 00 00 +T AE 00 00 00 02 00 00 00 5F D5 2A 00 00 00 00 +R 00 00 01 00 02 04 0C 00 02 0B 0C 00 +T B5 00 00 00 E5 69 60 4E 23 46 C5 3E +R 00 00 01 00 +T BD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T C2 00 00 00 00 00 00 00 F1 F1 F1 DD 7E FE DD +R 00 00 01 00 02 04 00 00 +T CB 00 00 00 B6 FF 20 42 +R 00 00 01 00 +T CF 00 00 00 +R 00 00 01 00 +T CF 00 00 00 21 19 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T DA 00 00 00 23 56 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 08 0E 00 +T E1 00 00 00 00 00 00 00 E5 69 60 7E 23 B6 28 +R 00 00 01 00 02 04 0E 00 +T EA 00 00 00 14 DD 6E 02 DD 66 03 46 23 66 68 +R 00 00 01 00 +T F5 00 00 00 01 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 21 FF FF +R 00 00 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 08 01 00 00 CD 00 00 00 00 E1 E1 E1 E1 18 48 +R 00 00 01 00 02 05 00 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 DD 6E 04 DD 66 05 E5 21 19 00 DD +R 00 00 01 00 +T 1C 01 00 00 4E 02 DD 46 03 09 5E 23 56 D5 1E +R 00 00 01 00 +T 27 01 00 00 00 00 00 00 D5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 07 00 02 0A 07 00 +T 2D 01 00 00 69 60 7E 23 B6 28 14 DD 6E 02 DD +R 00 00 01 00 +T 38 01 00 00 66 03 46 23 66 68 01 08 00 09 46 +R 00 00 01 00 +T 43 01 00 00 23 66 68 18 03 +R 00 00 01 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 21 FF FF +R 00 00 01 00 +T 4B 01 00 00 +R 00 00 01 00 +T 4B 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 51 01 00 00 CD 00 00 00 00 E1 E1 E1 E1 E1 +R 00 00 01 00 02 05 00 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/servers_lib/ftpserv.rel b/src/nos/lib/servers_lib/ftpserv.rel new file mode 100644 index 00000000..ad469f2e --- /dev/null +++ b/src/nos/lib/servers_lib/ftpserv.rel @@ -0,0 +1,492 @@ +XL4 +H 3 areas 27 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0439_2b22_close_20FTP Ref00000000 +S _fflush Ref00000000 +S _logmsg Ref00000000 +S _rip Ref00000000 +S _memset Ref00000000 +S _tolower Ref00000000 +S _availmem Ref00000000 +S _getpeername Ref00000000 +S _Ftpscmd Ref00000000 +S _ctime Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Ftpsmsg_lowmem Ref00000000 +S _strchr Ref00000000 +S _Ftpsmsg_notlog Ref00000000 +S _strlen Ref00000000 +S __fprintf Ref00000000 +S _fgets Ref00000000 +S _sockowner Ref00000000 +S _Ftpsmsg_badcmd Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S __strncmp Ref00000000 +S _Version Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _time Ref00000000 +S _fdup Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S __strlen Ref00000000 +S _Ftpsmsg_banner Ref00000000 +S _ftpserv_switch Ref00000000 +S _fdopen Ref00000000 +S _fclose Ref00000000 +S _setvbuf Ref00000000 +S ___050f_e5a0_open_20FTP Ref00000000 +S _Hostname Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4CE flags 0 +S _ftpserv Def00000000 +A CSTR size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 C0 FD 21 21 00 E5 +R 00 00 01 00 02 05 19 00 +T 09 00 00 00 01 00 00 21 02 00 39 5D 54 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 18 00 00 00 00 00 00 00 F1 21 00 00 39 E5 01 +R 00 00 01 00 02 04 00 00 +T 21 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 00 04 02 00 +T 2A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 21 00 02 09 21 00 +T 2F 00 00 00 00 00 00 00 4D 44 E1 71 23 70 ED +R 00 00 01 00 02 04 00 00 +T 38 00 00 00 4B 00 00 00 00 21 00 00 39 56 23 +R 00 00 01 00 02 05 14 00 +T 41 00 00 00 66 6A 7D B4 28 11 21 00 00 39 56 +R 00 00 01 00 +T 4C 00 00 00 23 66 6A 11 08 00 19 5E 23 56 18 +R 00 00 01 00 +T 57 00 00 00 03 +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 11 FF FF +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T 61 00 00 00 00 00 00 00 21 80 00 E5 21 02 00 +R 00 00 01 00 02 04 00 00 +T 6A 00 00 00 E5 01 00 00 21 04 00 39 5E 23 56 +R 00 00 01 00 +T 75 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 23 00 02 0A 23 00 +T 7B 00 00 00 00 00 00 00 F1 F1 3E 00 00 00 00 +R 00 00 01 00 02 04 00 00 2B 0B 07 00 +T 81 00 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 07 00 02 0A 00 00 +T 88 00 00 00 B4 28 2E +R 00 00 01 00 +T 8B 00 00 00 +R 00 00 01 00 +T 8B 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0C 00 +T 91 00 00 00 00 00 00 00 E5 21 04 00 39 4E 23 +R 00 00 01 00 02 04 0C 00 +T 9A 00 00 00 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 10 00 +T 9F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T A6 00 00 00 F1 21 00 00 39 5E 23 56 3E +R 00 00 01 00 +T AF 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 22 00 02 09 22 00 +T B4 00 00 00 00 00 00 00 C3 CB 04 00 00 +R 00 00 01 00 02 04 00 00 00 09 01 00 +T B9 00 00 00 +R 00 00 01 00 +T B9 00 00 00 21 3E 00 ED 4B 00 00 00 00 09 5E +R 00 00 01 00 02 09 14 00 +T C2 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 22 00 +T C7 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 22 00 02 09 00 00 +T CD 00 00 00 3E 00 09 E5 21 02 00 39 5E 23 56 +R 00 00 01 00 +T D8 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1B 00 02 0A 1B 00 +T DE 00 00 00 00 00 00 00 EB E1 73 23 72 21 +R 00 00 01 00 02 04 00 00 +T E6 00 00 00 40 00 ED 4B 00 00 00 00 09 5E 23 +R 00 00 01 00 02 08 14 00 +T EF 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 22 00 02 0B 22 00 +T F5 00 00 00 CD 00 00 00 00 21 40 00 09 E5 21 +R 00 00 01 00 02 05 00 00 +T FE 00 00 00 02 00 39 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1B 00 +T 06 01 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 1B 00 02 0A 00 00 +T 0D 01 00 00 44 E1 71 23 70 DD 36 ED 10 DD 36 +R 00 00 01 00 +T 18 01 00 00 EE 00 21 2D 02 39 E5 21 31 02 39 +R 00 00 01 00 +T 23 01 00 00 4D 44 21 02 00 39 56 23 66 6A 7D +R 00 00 01 00 +T 2E 01 00 00 B4 28 11 21 02 00 39 56 23 66 6A +R 00 00 01 00 +T 39 01 00 00 11 08 00 19 5E 23 56 18 03 +R 00 00 01 00 +T 42 01 00 00 +R 00 00 01 00 +T 42 01 00 00 11 FF FF +R 00 00 01 00 +T 45 01 00 00 +R 00 00 01 00 +T 45 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 4B 01 00 00 00 00 00 00 F1 DD 36 F1 14 DD 36 +R 00 00 01 00 02 04 00 00 +T 54 01 00 00 F2 00 21 00 00 39 01 09 00 09 EB +R 00 00 01 00 +T 5F 01 00 00 21 2F 02 39 01 10 00 ED B0 0E +R 00 00 01 00 +T 69 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 24 00 02 0A 24 00 +T 6F 01 00 00 21 04 00 39 46 23 66 68 7D B4 28 +R 00 00 01 00 +T 7A 01 00 00 12 21 04 00 39 46 23 66 68 01 +R 00 00 01 00 +T 84 01 00 00 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T 8D 01 00 00 +R 00 00 01 00 +T 8D 01 00 00 21 FF FF +R 00 00 01 00 +T 90 01 00 00 +R 00 00 01 00 +T 90 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 96 01 00 00 CD 00 00 00 00 E1 E1 E1 21 29 02 +R 00 00 01 00 02 05 00 00 +T 9F 01 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 1A 00 +T A5 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1A 00 02 09 00 00 +T AB 01 00 00 29 02 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T B3 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T BA 01 00 00 E5 DD 74 E6 01 0A 00 EB 3E +R 00 00 01 00 +T C3 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T C8 01 00 00 00 00 00 00 DD 75 E7 DD 74 E8 7D +R 00 00 01 00 02 04 00 00 +T D1 01 00 00 B4 28 08 +R 00 00 01 00 +T D4 01 00 00 +R 00 00 01 00 +T D4 01 00 00 DD 6E E7 DD 66 E8 36 00 +R 00 00 01 00 +T DC 01 00 00 +R 00 00 01 00 +T DC 01 00 00 DD 6E E5 DD 66 E6 E5 21 +R 00 00 01 00 +T E4 01 00 00 00 00 00 00 E5 2A 00 00 00 00 E5 +R 00 00 01 00 02 04 18 00 02 0A 25 00 +T EB 01 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 1F 00 +T F1 01 00 00 00 00 00 00 E5 21 0A 00 39 4E 23 +R 00 00 01 00 02 04 1F 00 +T FA 01 00 00 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 10 00 +T FF 01 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T 06 02 00 00 0C 00 39 F9 EB +R 00 00 01 00 +T 0B 02 00 00 +R 00 00 01 00 +T 0B 02 00 00 21 00 00 39 5E 23 56 3E +R 00 00 01 00 +T 13 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 18 02 00 00 00 00 00 00 21 00 00 39 4E 23 46 +R 00 00 01 00 02 04 00 00 +T 21 02 00 00 C5 01 00 02 21 25 00 39 5D 54 3E +R 00 00 01 00 +T 2C 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T 31 02 00 00 00 00 00 00 F1 7D B4 20 03 +R 00 00 01 00 02 04 00 00 +T 38 02 00 00 +R 00 00 01 00 +T 38 02 00 00 C3 25 04 00 00 +R 00 00 01 00 00 05 01 00 +T 3B 02 00 00 +R 00 00 01 00 +T 3B 02 00 00 21 23 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 43 02 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T 4A 02 00 00 B4 20 24 +R 00 00 01 00 +T 4D 02 00 00 +R 00 00 01 00 +T 4D 02 00 00 21 23 00 39 E5 3A 02 00 00 00 4F +R 00 00 01 00 02 0A 13 00 +T 56 02 00 00 C5 2A 00 00 00 00 E5 21 06 00 39 +R 00 00 01 00 02 06 13 00 +T 5F 02 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 10 00 +T 66 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T 6D 02 00 00 F1 F1 18 9A +R 00 00 01 00 +T 71 02 00 00 +R 00 00 01 00 +T 71 02 00 00 21 23 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 79 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 80 02 00 00 23 00 39 DD 75 E5 DD 74 E6 +R 00 00 01 00 +T 89 02 00 00 +R 00 00 01 00 +T 89 02 00 00 DD 6E E5 DD 66 E6 7E FE 20 28 2E +R 00 00 01 00 +T 94 02 00 00 DD 6E E5 DD 66 E6 AF B6 28 24 +R 00 00 01 00 +T 9E 02 00 00 +R 00 00 01 00 +T 9E 02 00 00 +R 00 00 01 00 +T 9E 02 00 00 +R 00 00 01 00 +T 9E 02 00 00 DD 6E E5 DD 66 E6 5E 16 00 3E +R 00 00 01 00 +T A8 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T AD 02 00 00 00 00 00 00 E5 DD 6E E5 DD 66 E6 +R 00 00 01 00 02 04 00 00 +T B6 02 00 00 C1 71 DD 34 E5 20 03 DD 34 E6 +R 00 00 01 00 +T C0 02 00 00 +R 00 00 01 00 +T C0 02 00 00 18 C7 +R 00 00 01 00 +T C2 02 00 00 +R 00 00 01 00 +T C2 02 00 00 21 21 00 39 36 00 00 00 00 23 36 +R 00 00 01 00 0B 09 09 00 +T CA 02 00 00 00 00 00 00 +R 00 00 01 00 8B 04 09 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 21 21 00 39 7E 23 66 6F 7E 23 B6 +R 00 00 01 00 +T D6 02 00 00 23 B6 28 4C +R 00 00 01 00 +T DA 02 00 00 +R 00 00 01 00 +T DA 02 00 00 21 21 00 39 7E 23 66 6F 5E 23 56 +R 00 00 01 00 +T E5 02 00 00 23 4E 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1E 00 +T EA 02 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 1E 00 02 09 00 00 +T F1 02 00 00 23 00 39 7E 23 66 6F 23 23 4E C5 +R 00 00 01 00 +T FC 02 00 00 2B 46 2B 4E C5 21 29 00 39 5D 54 +R 00 00 01 00 +T 07 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T 0D 03 00 00 00 00 00 00 F1 F1 F1 7D B4 20 02 +R 00 00 01 00 02 04 00 00 +T 16 03 00 00 +R 00 00 01 00 +T 16 03 00 00 18 0E +R 00 00 01 00 +T 18 03 00 00 +R 00 00 01 00 +T 18 03 00 00 21 21 00 39 7E C6 03 77 23 30 01 +R 00 00 01 00 +T 23 03 00 00 34 +R 00 00 01 00 +T 24 03 00 00 +R 00 00 01 00 +T 24 03 00 00 18 A5 +R 00 00 01 00 +T 26 03 00 00 +R 00 00 01 00 +T 26 03 00 00 21 21 00 39 7E 23 66 6F 7E 23 B6 +R 00 00 01 00 +T 31 03 00 00 23 B6 20 25 +R 00 00 01 00 +T 35 03 00 00 +R 00 00 01 00 +T 35 03 00 00 21 23 00 39 E5 3A 02 00 00 00 4F +R 00 00 01 00 02 0A 13 00 +T 3E 03 00 00 C5 2A 00 00 00 00 E5 21 06 00 39 +R 00 00 01 00 02 06 13 00 +T 47 03 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 10 00 +T 4E 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T 55 03 00 00 F1 F1 C3 0B 02 00 00 +R 00 00 01 00 00 07 01 00 +T 5A 03 00 00 +R 00 00 01 00 +T 5A 03 00 00 21 1F 00 39 46 23 66 68 7D B4 28 +R 00 00 01 00 +T 65 03 00 00 0C 21 1B 00 39 46 23 66 68 7D B4 +R 00 00 01 00 +T 70 03 00 00 20 46 +R 00 00 01 00 +T 72 03 00 00 +R 00 00 01 00 +T 72 03 00 00 +R 00 00 01 00 +T 72 03 00 00 +R 00 00 01 00 +T 72 03 00 00 01 00 00 00 00 21 21 00 39 56 23 +R 00 00 01 00 02 05 09 00 +T 7B 03 00 00 66 6A A7 ED 42 EB 01 03 00 CD +R 00 00 01 00 +T 85 03 00 00 00 00 00 00 7B B2 28 0C 3E 02 AB +R 00 00 01 00 02 04 1C 00 +T 8E 03 00 00 B2 28 06 3E 08 AB B2 20 02 +R 00 00 01 00 +T 97 03 00 00 +R 00 00 01 00 +T 97 03 00 00 18 1F +R 00 00 01 00 +T 99 03 00 00 +R 00 00 01 00 +T 99 03 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0E 00 +T 9F 03 00 00 00 00 00 00 E5 21 04 00 39 4E 23 +R 00 00 01 00 02 04 0E 00 +T A8 03 00 00 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 10 00 +T AD 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 10 00 02 09 00 00 +T B4 03 00 00 F1 C3 0B 02 00 00 +R 00 00 01 00 00 06 01 00 +T B8 03 00 00 +R 00 00 01 00 +T B8 03 00 00 +R 00 00 01 00 +T B8 03 00 00 21 21 00 39 7E 23 66 6F 5E 23 56 +R 00 00 01 00 +T C3 03 00 00 23 4E 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1E 00 +T C8 03 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 1E 00 02 09 00 00 +T CF 03 00 00 25 00 39 4D 44 E1 09 DD 75 E3 DD +R 00 00 01 00 +T DA 03 00 00 74 E4 +R 00 00 01 00 +T DC 03 00 00 +R 00 00 01 00 +T DC 03 00 00 DD 6E E3 DD 66 E4 7E FE 20 20 0A +R 00 00 01 00 +T E7 03 00 00 +R 00 00 01 00 +T E7 03 00 00 DD 34 E3 20 03 DD 34 E4 +R 00 00 01 00 +T EF 03 00 00 +R 00 00 01 00 +T EF 03 00 00 18 EB +R 00 00 01 00 +T F1 03 00 00 +R 00 00 01 00 +T F1 03 00 00 DD 6E E3 DD 66 E4 E5 21 02 00 39 +R 00 00 01 00 +T FC 03 00 00 4D 44 C5 11 00 00 00 00 21 25 00 +R 00 00 01 00 02 08 09 00 +T 05 04 00 00 39 7E 23 66 6F A7 ED 52 EB 01 +R 00 00 01 00 +T 0F 04 00 00 03 00 CD 00 00 00 00 3E +R 00 00 01 00 02 07 1C 00 +T 15 04 00 00 00 00 00 00 21 00 00 00 00 C1 CD +R 00 00 01 00 2B 04 20 00 02 09 20 00 +T 1B 04 00 00 00 00 00 00 F1 7D B4 28 03 +R 00 00 01 00 02 04 00 00 +T 22 04 00 00 +R 00 00 01 00 +T 22 04 00 00 C3 0B 02 00 00 +R 00 00 01 00 00 05 01 00 +T 25 04 00 00 +R 00 00 01 00 +T 25 04 00 00 +R 00 00 01 00 +T 25 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T 2B 04 00 00 E5 21 04 00 39 46 23 66 68 7D B4 +R 00 00 01 00 +T 36 04 00 00 28 12 21 04 00 39 46 23 66 68 01 +R 00 00 01 00 +T 41 04 00 00 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T 4A 04 00 00 +R 00 00 01 00 +T 4A 04 00 00 21 FF FF +R 00 00 01 00 +T 4D 04 00 00 +R 00 00 01 00 +T 4D 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 53 04 00 00 CD 00 00 00 00 E1 E1 E1 21 00 00 +R 00 00 01 00 02 05 00 00 +T 5C 04 00 00 39 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 22 00 +T 63 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 22 00 02 09 00 00 +T 69 04 00 00 02 00 39 46 23 66 68 7D B4 28 0F +R 00 00 01 00 +T 74 04 00 00 +R 00 00 01 00 +T 74 04 00 00 21 02 00 39 5E 23 56 3E +R 00 00 01 00 +T 7C 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 22 00 02 09 22 00 +T 81 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 83 04 00 00 +R 00 00 01 00 +T 83 04 00 00 21 07 00 39 46 23 66 68 7D B4 28 +R 00 00 01 00 +T 8E 04 00 00 0F +R 00 00 01 00 +T 8F 04 00 00 +R 00 00 01 00 +T 8F 04 00 00 21 07 00 39 5E 23 56 3E +R 00 00 01 00 +T 97 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 22 00 02 09 22 00 +T 9C 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 9E 04 00 00 +R 00 00 01 00 +T 9E 04 00 00 21 19 00 39 5E 23 56 3E +R 00 00 01 00 +T A6 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T AB 04 00 00 00 00 00 00 21 1B 00 39 5E 23 56 +R 00 00 01 00 02 04 00 00 +T B4 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T BA 04 00 00 00 00 00 00 21 1F 00 39 5E 23 56 +R 00 00 01 00 02 04 00 00 +T C3 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 16 00 02 0A 16 00 +T C9 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T CB 04 00 00 +R 00 00 01 00 +T CB 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 2B 74 00 +R 00 00 02 00 diff --git a/src/nos/lib/servers_lib/ftpserv_switch.rel b/src/nos/lib/servers_lib/ftpserv_switch.rel new file mode 100644 index 00000000..18466475 --- /dev/null +++ b/src/nos/lib/servers_lib/ftpserv_switch.rel @@ -0,0 +1,1280 @@ +XL4 +H 3 areas 39 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strerror Ref00000000 +S _Ftpsmsg_bye Ref00000000 +S _System Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _sendit Ref00000000 +S _Ftpsmsg_cantmake Ref00000000 +S _logmsg Ref00000000 +S _tolower Ref00000000 +S _recvit Ref00000000 +S _pathname Ref00000000 +S ___02c8_c247_MKD_20_25s Ref00000000 +S _unlink Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Ftpsmsg_noperm Ref00000000 +S _Ftpsmsg_pwdmsg Ref00000000 +S _Ftpsmsg_syst Ref00000000 +S _mkdir Ref00000000 +S _ftpserv_switch_xmd5 Ref00000000 +S __fprintf Ref00000000 +S _strdupw Ref00000000 +S _Ftpsmsg_mkdok Ref00000000 +S _Ftpsmsg_cantopen Ref00000000 +S ___035b_86e6_RMD_20_25s Ref00000000 +S _rmdir Ref00000000 +S .__.ABS. Def00000000 +S _Ftpsmsg_typeok Ref00000000 +S _Ftpsmsg_nodir Ref00000000 +S _isbinary Ref00000000 +S _free Ref00000000 +S _Ftpsmsg_portok Ref00000000 +S _ftplogin Ref00000000 +S _Ftpsmsg_givepass Ref00000000 +S _errno Ref00000000 +S _Version Ref00000000 +S _Ftpsmsg_userfirst Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Ftpsmsg_unimp Ref00000000 +S _Ftpsmsg_badtype Ref00000000 +S ___034f_8b13_RETR_20_25s Ref00000000 +S _Ftpsmsg_unsupp Ref00000000 +S _freopen Ref00000000 +S _Ftpsmsg_badport Ref00000000 +S _permcheck Ref00000000 +S _access Ref00000000 +S _Ftpsmsg_binwarn Ref00000000 +S _pport Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___022b_1cf7_DELE_20_25s Ref00000000 +S _Ftpsmsg_okay Ref00000000 +S _Ftpsmsg_deleok Ref00000000 +S ___0377_a1f1_STOR_20_25s Ref00000000 +S ?C_V_SWITCH_L06 Ref00000000 +S _Ftpsmsg_delefail Ref00000000 +S _Ftpsmsg_only8 Ref00000000 +S _dir Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DA4 flags 0 +S _ftpserv_switch Def00000000 +A CSTR size 18 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 5E 02 DD +R 00 00 01 00 02 05 24 00 +T 09 00 00 00 56 03 CD 00 00 00 00 00 00 18 00 +R 00 00 01 00 02 07 04 00 +T 12 00 00 00 9E 0D 00 00 44 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 16 00 00 00 D1 08 00 00 14 0A 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 1A 00 00 00 8E 00 00 00 8A 05 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 1E 00 00 00 80 07 00 00 F2 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 22 00 00 00 9E 0D 00 00 D5 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 26 00 00 00 F9 01 00 00 B9 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 2A 00 00 00 2B 05 00 00 85 06 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 2E 00 00 00 A5 08 00 00 A5 08 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 32 00 00 00 5A 0A 00 00 5A 0A 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 36 00 00 00 87 0B 00 00 87 0B 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 3A 00 00 00 A9 0C 00 00 01 0D 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 3E 00 00 00 58 0D 00 00 88 0D 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 42 00 00 00 80 07 00 00 +R 00 00 01 00 00 04 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 19 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 4F 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1D 00 +T 54 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1D 00 02 09 00 00 +T 5A 00 00 00 19 00 09 E5 DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T 65 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 14 00 02 09 14 00 +T 6A 00 00 00 00 00 00 00 EB E1 73 23 72 3A +R 00 00 01 00 02 04 00 00 +T 72 00 00 00 02 00 00 00 5F D5 2A 00 00 00 00 +R 00 00 01 00 02 04 20 00 02 0B 20 00 +T 79 00 00 00 E5 69 60 4E 23 46 C5 3E +R 00 00 01 00 +T 81 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 86 00 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T 8C 00 00 00 9E 0D 00 00 +R 00 00 01 00 00 04 01 00 +T 8E 00 00 00 +R 00 00 01 00 +T 8E 00 00 00 DD 6E 0A DD 66 0B 5E CD +R 00 00 01 00 +T 96 00 00 00 00 00 00 00 08 00 41 42 49 4C 61 +R 00 00 01 00 02 04 34 00 +T 9F 00 00 00 62 69 6C AA 01 00 00 E5 00 00 00 +R 00 00 01 00 00 07 01 00 00 0B 01 00 +T A6 00 00 00 7A 01 00 00 7A 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T AA 00 00 00 B4 00 00 00 E5 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T AE 00 00 00 7A 01 00 00 7A 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T B2 00 00 00 B4 00 00 00 +R 00 00 01 00 00 04 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 21 04 00 DD 4E 04 DD 46 05 09 36 +R 00 00 01 00 +T BF 00 00 00 00 DD 6E 0A DD 66 0B E5 3A +R 00 00 01 00 +T C8 00 00 00 02 00 00 00 5F D5 2A 00 00 00 00 +R 00 00 01 00 02 04 1A 00 02 0B 1A 00 +T CF 00 00 00 E5 69 60 4E 23 46 C5 3E +R 00 00 01 00 +T D7 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T DC 00 00 00 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T E3 00 00 00 D2 01 00 00 +R 00 00 01 00 00 04 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 DD 6E 0A DD 66 0B 7E FE 20 28 14 +R 00 00 01 00 +T F0 00 00 00 DD 6E 0A DD 66 0B AF B6 28 0A +R 00 00 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 DD 34 0A 20 03 DD 34 0B +R 00 00 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 18 E1 +R 00 00 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 DD 6E 0A DD 66 0B AF B6 28 12 DD +R 00 00 01 00 +T 0F 01 00 00 6E 0A DD 66 0B 23 DD 75 0A DD 74 +R 00 00 01 00 +T 1A 01 00 00 0B 7E FE 38 28 21 +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 +R 00 00 01 00 +T 20 01 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 36 00 +T 26 01 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 36 00 +T 2F 01 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T 36 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 3D 01 00 00 F1 C3 D2 01 00 00 +R 00 00 01 00 00 06 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 21 04 00 DD 4E 04 DD 46 05 09 36 +R 00 00 01 00 +T 4C 01 00 00 02 21 05 00 09 36 08 23 36 00 DD +R 00 00 01 00 +T 57 01 00 00 6E 0A DD 66 0B E5 3A 02 00 00 00 +R 00 00 01 00 02 0B 1A 00 +T 60 01 00 00 5F D5 2A 00 00 00 00 E5 69 60 4E +R 00 00 01 00 02 07 1A 00 +T 69 01 00 00 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 13 00 +T 6F 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 76 01 00 00 F1 F1 18 58 +R 00 00 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 21 04 00 DD 4E 04 DD 46 05 09 36 +R 00 00 01 00 +T 85 01 00 00 01 DD 6E 0A DD 66 0B E5 3A +R 00 00 01 00 +T 8E 01 00 00 02 00 00 00 5F D5 2A 00 00 00 00 +R 00 00 01 00 02 04 1A 00 02 0B 1A 00 +T 95 01 00 00 E5 69 60 4E 23 46 C5 3E +R 00 00 01 00 +T 9D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T A2 01 00 00 00 00 00 00 F1 F1 F1 F1 18 28 +R 00 00 01 00 02 04 00 00 +T AA 01 00 00 +R 00 00 01 00 +T AA 01 00 00 DD 6E 0A DD 66 0B E5 3A +R 00 00 01 00 +T B2 01 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 26 00 02 0B 26 00 +T B9 01 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 C5 +R 00 00 01 00 +T C4 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T CA 01 00 00 00 00 00 00 F1 F1 F1 F1 18 00 +R 00 00 01 00 02 04 00 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 C3 9E 0D 00 00 +R 00 00 01 00 00 05 01 00 +T D5 01 00 00 +R 00 00 01 00 +T D5 01 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 02 00 +T DB 01 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 02 00 +T E4 01 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T EB 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T F2 01 00 00 F1 21 00 00 C3 A1 0D 00 00 +R 00 00 01 00 00 09 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 DD 4E 0A DD 46 0B 21 1F 00 DD 5E +R 00 00 01 00 +T 04 02 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 0D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 12 02 00 00 00 00 00 00 DD 75 FC DD 74 FD 21 +R 00 00 01 00 02 04 00 00 +T 1B 02 00 00 04 00 DD 4E 04 DD 46 05 09 7E FE +R 00 00 01 00 +T 26 02 00 00 01 38 0E FE 03 30 0A +R 00 00 01 00 +T 2D 02 00 00 +R 00 00 01 00 +T 2D 02 00 00 DD 36 FE 00 00 00 00 DD 36 FF +R 00 00 01 00 09 07 02 00 +T 34 02 00 00 00 00 00 00 18 0E +R 00 00 01 00 89 04 02 00 +T 37 02 00 00 +R 00 00 01 00 +T 37 02 00 00 FE 00 20 0A DD 36 FE 00 00 00 00 +R 00 00 01 00 09 0B 02 00 +T 3F 02 00 00 DD 36 FF 00 00 00 00 18 00 +R 00 00 01 00 89 07 02 00 +T 45 02 00 00 +R 00 00 01 00 +T 45 02 00 00 DD 6E FC DD 66 FD E5 21 09 00 E5 +R 00 00 01 00 +T 50 02 00 00 21 1D 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 5B 02 00 00 23 46 21 1B 00 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 66 02 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 2B 00 +T 6D 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2B 00 02 09 00 00 +T 74 02 00 00 7D B4 20 21 +R 00 00 01 00 +T 78 02 00 00 +R 00 00 01 00 +T 78 02 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0E 00 +T 7E 02 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 0E 00 +T 87 02 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T 8E 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 95 02 00 00 F1 C3 A1 03 00 00 +R 00 00 01 00 00 06 01 00 +T 99 02 00 00 +R 00 00 01 00 +T 99 02 00 00 21 07 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T A4 02 00 00 01 00 00 C5 DD 4E FE DD 46 FF DD +R 00 00 01 00 +T AF 02 00 00 5E FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 29 00 +T B7 02 00 00 00 00 00 00 CD 00 00 00 00 F1 4D +R 00 00 01 00 02 04 29 00 02 09 00 00 +T BE 02 00 00 44 E1 71 23 70 79 B0 20 37 +R 00 00 01 00 +T C7 02 00 00 +R 00 00 01 00 +T C7 02 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 21 00 2B 0B 01 00 +T CD 02 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T D4 02 00 00 DD 6E FC DD 66 FD E5 3A +R 00 00 01 00 +T DC 02 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 16 00 02 0B 16 00 +T E3 02 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 C5 +R 00 00 01 00 +T EE 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T F4 02 00 00 00 00 00 00 F1 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T FC 02 00 00 A1 03 00 00 +R 00 00 01 00 00 04 01 00 +T FE 02 00 00 +R 00 00 01 00 +T FE 02 00 00 DD 6E FC DD 66 FD E5 0E +R 00 00 01 00 +T 06 03 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 27 00 02 0A 27 00 +T 0C 03 00 00 DD 6E 04 DD 66 05 7E 23 B6 28 14 +R 00 00 01 00 +T 17 03 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 22 03 00 00 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T 2B 03 00 00 +R 00 00 01 00 +T 2B 03 00 00 21 FF FF +R 00 00 01 00 +T 2E 03 00 00 +R 00 00 01 00 +T 2E 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 34 03 00 00 CD 00 00 00 00 E1 E1 E1 E1 21 +R 00 00 01 00 02 05 00 00 +T 3C 03 00 00 04 00 DD 4E 04 DD 46 05 09 7E B7 +R 00 00 01 00 +T 47 03 00 00 20 3F 21 07 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 52 03 00 00 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 1C 00 +T 59 03 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 1C 00 02 09 00 00 +T 60 03 00 00 28 26 +R 00 00 01 00 +T 62 03 00 00 +R 00 00 01 00 +T 62 03 00 00 +R 00 00 01 00 +T 62 03 00 00 +R 00 00 01 00 +T 62 03 00 00 DD 6E FC DD 66 FD E5 3A +R 00 00 01 00 +T 6A 03 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 2D 00 02 0B 2D 00 +T 71 03 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 C5 +R 00 00 01 00 +T 7C 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 82 03 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 88 03 00 00 +R 00 00 01 00 +T 88 03 00 00 DD 6E FC DD 66 FD E5 01 +R 00 00 01 00 +T 90 03 00 00 02 00 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 00 04 02 00 +T 99 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 9E 03 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 00 00 +T A1 03 00 00 +R 00 00 01 00 +T A1 03 00 00 +R 00 00 01 00 +T A1 03 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T A9 03 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 1D 00 02 0A 00 00 +T B0 03 00 00 DD 77 FC DD 77 FD C3 9E 0D 00 00 +R 00 00 01 00 00 0B 01 00 +T B9 03 00 00 +R 00 00 01 00 +T B9 03 00 00 DD 4E 0A DD 46 0B 21 1F 00 DD 5E +R 00 00 01 00 +T C4 03 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T CD 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T D2 03 00 00 00 00 00 00 DD 75 FC DD 74 FD 21 +R 00 00 01 00 02 04 00 00 +T DB 03 00 00 04 00 DD 4E 04 DD 46 05 09 7E FE +R 00 00 01 00 +T E6 03 00 00 01 38 0E FE 03 30 0A +R 00 00 01 00 +T ED 03 00 00 +R 00 00 01 00 +T ED 03 00 00 DD 36 FE 07 00 00 00 DD 36 FF +R 00 00 01 00 09 07 02 00 +T F4 03 00 00 07 00 00 00 18 0E +R 00 00 01 00 89 04 02 00 +T F7 03 00 00 +R 00 00 01 00 +T F7 03 00 00 FE 00 20 0A DD 36 FE 07 00 00 00 +R 00 00 01 00 09 0B 02 00 +T FF 03 00 00 DD 36 FF 07 00 00 00 18 00 +R 00 00 01 00 89 07 02 00 +T 05 04 00 00 +R 00 00 01 00 +T 05 04 00 00 DD 6E FC DD 66 FD E5 21 0A 00 E5 +R 00 00 01 00 +T 10 04 00 00 21 1D 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 1B 04 00 00 23 46 21 1B 00 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 26 04 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 2B 00 +T 2D 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 2B 00 02 09 00 00 +T 34 04 00 00 7D B4 20 21 +R 00 00 01 00 +T 38 04 00 00 +R 00 00 01 00 +T 38 04 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0E 00 +T 3E 04 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 0E 00 +T 47 04 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T 4E 04 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 55 04 00 00 F1 C3 13 05 00 00 +R 00 00 01 00 00 06 01 00 +T 59 04 00 00 +R 00 00 01 00 +T 59 04 00 00 21 07 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T 64 04 00 00 01 00 00 C5 DD 4E FE DD 46 FF DD +R 00 00 01 00 +T 6F 04 00 00 5E FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 29 00 +T 77 04 00 00 00 00 00 00 CD 00 00 00 00 F1 4D +R 00 00 01 00 02 04 29 00 02 09 00 00 +T 7E 04 00 00 44 E1 71 23 70 79 B0 20 36 +R 00 00 01 00 +T 87 04 00 00 +R 00 00 01 00 +T 87 04 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 21 00 2B 0B 01 00 +T 8D 04 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 94 04 00 00 DD 6E FC DD 66 FD E5 3A +R 00 00 01 00 +T 9C 04 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 0B 06 00 +T A3 04 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 C5 +R 00 00 01 00 +T AE 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T B4 04 00 00 00 00 00 00 F1 F1 F1 F1 F1 18 56 +R 00 00 01 00 02 04 00 00 +T BD 04 00 00 +R 00 00 01 00 +T BD 04 00 00 DD 6E FC DD 66 FD E5 0E +R 00 00 01 00 +T C5 04 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 33 00 02 0A 33 00 +T CB 04 00 00 DD 6E 04 DD 66 05 7E 23 B6 28 14 +R 00 00 01 00 +T D6 04 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T E1 04 00 00 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T EA 04 00 00 +R 00 00 01 00 +T EA 04 00 00 21 FF FF +R 00 00 01 00 +T ED 04 00 00 +R 00 00 01 00 +T ED 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T F3 04 00 00 CD 00 00 00 00 E1 E1 E1 E1 DD 6E +R 00 00 01 00 02 05 00 00 +T FC 04 00 00 FC DD 66 FD E5 01 09 00 00 00 DD +R 00 00 01 00 00 0A 02 00 +T 05 05 00 00 5E 04 DD 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T 0D 05 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 13 05 00 00 +R 00 00 01 00 +T 13 05 00 00 +R 00 00 01 00 +T 13 05 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 1B 05 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 1D 00 02 0A 00 00 +T 22 05 00 00 DD 77 FC DD 77 FD C3 9E 0D 00 00 +R 00 00 01 00 00 0B 01 00 +T 2B 05 00 00 +R 00 00 01 00 +T 2B 05 00 00 DD 4E 0A DD 46 0B 21 09 00 DD 5E +R 00 00 01 00 +T 36 05 00 00 04 DD 56 05 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2E 00 +T 3E 05 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 2E 00 02 0A 00 00 +T 45 05 00 00 A4 3C 20 20 +R 00 00 01 00 +T 49 05 00 00 +R 00 00 01 00 +T 49 05 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 2A 00 +T 4F 05 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 2A 00 +T 58 05 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T 5F 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 66 05 00 00 F1 18 1E +R 00 00 01 00 +T 69 05 00 00 +R 00 00 01 00 +T 69 05 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 1E 00 +T 6F 05 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 1E 00 +T 78 05 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T 7F 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 86 05 00 00 F1 +R 00 00 01 00 +T 87 05 00 00 +R 00 00 01 00 +T 87 05 00 00 C3 9E 0D 00 00 +R 00 00 01 00 00 05 01 00 +T 8A 05 00 00 +R 00 00 01 00 +T 8A 05 00 00 DD 4E 0A DD 46 0B 21 1F 00 DD 5E +R 00 00 01 00 +T 95 05 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 9E 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T A3 05 00 00 00 00 00 00 DD 75 FC DD 74 FD E5 +R 00 00 01 00 02 04 00 00 +T AC 05 00 00 21 09 00 E5 21 1D 00 DD 4E 04 DD +R 00 00 01 00 +T B7 05 00 00 46 05 09 4E 23 46 21 1B 00 DD 5E +R 00 00 01 00 +T C2 05 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T CB 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T D0 05 00 00 00 00 00 00 F1 F1 7D B4 20 20 +R 00 00 01 00 02 04 00 00 +T D8 05 00 00 +R 00 00 01 00 +T D8 05 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0E 00 +T DE 05 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 0E 00 +T E7 05 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T EE 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T F5 05 00 00 F1 18 75 +R 00 00 01 00 +T F8 05 00 00 +R 00 00 01 00 +T F8 05 00 00 21 07 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T 03 06 00 00 01 01 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 0D 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 37 00 02 09 37 00 +T 12 06 00 00 00 00 00 00 4D 44 E1 71 23 70 79 +R 00 00 01 00 02 04 00 00 +T 1B 06 00 00 B0 20 36 +R 00 00 01 00 +T 1E 06 00 00 +R 00 00 01 00 +T 1E 06 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 21 00 2B 0B 01 00 +T 24 06 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 2B 06 00 00 DD 6E FC DD 66 FD E5 3A +R 00 00 01 00 +T 33 06 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 1B 00 02 0B 1B 00 +T 3A 06 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 C5 +R 00 00 01 00 +T 45 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 4B 06 00 00 00 00 00 00 F1 F1 F1 F1 F1 18 19 +R 00 00 01 00 02 04 00 00 +T 54 06 00 00 +R 00 00 01 00 +T 54 06 00 00 DD 6E FC DD 66 FD E5 01 +R 00 00 01 00 +T 5C 06 00 00 0E 00 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 00 04 02 00 +T 65 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 6A 06 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 00 00 +T 6D 06 00 00 +R 00 00 01 00 +T 6D 06 00 00 +R 00 00 01 00 +T 6D 06 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 75 06 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 1D 00 02 0A 00 00 +T 7C 06 00 00 DD 77 FC DD 77 FD C3 9E 0D 00 00 +R 00 00 01 00 00 0B 01 00 +T 85 06 00 00 +R 00 00 01 00 +T 85 06 00 00 DD 4E 0A DD 46 0B 21 1F 00 DD 5E +R 00 00 01 00 +T 90 06 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 99 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 9E 06 00 00 00 00 00 00 DD 75 FC DD 74 FD E5 +R 00 00 01 00 02 04 00 00 +T A7 06 00 00 21 09 00 E5 21 1D 00 DD 4E 04 DD +R 00 00 01 00 +T B2 06 00 00 46 05 09 4E 23 46 21 1B 00 DD 5E +R 00 00 01 00 +T BD 06 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T C6 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T CB 06 00 00 00 00 00 00 F1 F1 7D B4 20 20 +R 00 00 01 00 02 04 00 00 +T D3 06 00 00 +R 00 00 01 00 +T D3 06 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0E 00 +T D9 06 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 0E 00 +T E2 06 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T E9 06 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T F0 06 00 00 F1 18 75 +R 00 00 01 00 +T F3 06 00 00 +R 00 00 01 00 +T F3 06 00 00 21 07 00 DD 4E 04 DD 46 05 09 E5 +R 00 00 01 00 +T FE 06 00 00 01 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 08 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 37 00 02 09 37 00 +T 0D 07 00 00 00 00 00 00 4D 44 E1 71 23 70 79 +R 00 00 01 00 02 04 00 00 +T 16 07 00 00 B0 20 36 +R 00 00 01 00 +T 19 07 00 00 +R 00 00 01 00 +T 19 07 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 21 00 2B 0B 01 00 +T 1F 07 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 26 07 00 00 DD 6E FC DD 66 FD E5 3A +R 00 00 01 00 +T 2E 07 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 1B 00 02 0B 1B 00 +T 35 07 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 C5 +R 00 00 01 00 +T 40 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 46 07 00 00 00 00 00 00 F1 F1 F1 F1 F1 18 19 +R 00 00 01 00 02 04 00 00 +T 4F 07 00 00 +R 00 00 01 00 +T 4F 07 00 00 DD 6E FC DD 66 FD E5 01 +R 00 00 01 00 +T 57 07 00 00 13 00 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 00 04 02 00 +T 60 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 65 07 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 00 00 +T 68 07 00 00 +R 00 00 01 00 +T 68 07 00 00 +R 00 00 01 00 +T 68 07 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 70 07 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 1D 00 02 0A 00 00 +T 77 07 00 00 DD 77 FC DD 77 FD C3 9E 0D 00 00 +R 00 00 01 00 00 0B 01 00 +T 80 07 00 00 +R 00 00 01 00 +T 80 07 00 00 DD 4E 0A DD 46 0B 21 1F 00 DD 5E +R 00 00 01 00 +T 8B 07 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 94 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 99 07 00 00 00 00 00 00 DD 75 FC DD 74 FD E5 +R 00 00 01 00 02 04 00 00 +T A2 07 00 00 21 09 00 E5 21 1D 00 DD 4E 04 DD +R 00 00 01 00 +T AD 07 00 00 46 05 09 4E 23 46 21 1B 00 DD 5E +R 00 00 01 00 +T B8 07 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T C1 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T C6 07 00 00 00 00 00 00 F1 F1 7D B4 20 36 +R 00 00 01 00 02 04 00 00 +T CE 07 00 00 +R 00 00 01 00 +T CE 07 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0E 00 +T D4 07 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 0E 00 +T DD 07 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T E4 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T EB 07 00 00 F1 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T F3 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1D 00 02 09 1D 00 +T F8 07 00 00 00 00 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 02 04 00 00 +T 01 08 00 00 C3 A2 08 00 00 +R 00 00 01 00 00 05 01 00 +T 04 08 00 00 +R 00 00 01 00 +T 04 08 00 00 01 00 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 0E 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2C 00 02 09 2C 00 +T 13 08 00 00 00 00 00 00 7D B4 20 40 +R 00 00 01 00 02 04 00 00 +T 19 08 00 00 +R 00 00 01 00 +T 19 08 00 00 21 1F 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 24 08 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1D 00 +T 29 08 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 1D 00 02 09 00 00 +T 2F 08 00 00 1F 00 09 DD 5E FC DD 56 FD 73 23 +R 00 00 01 00 +T 3A 08 00 00 72 D5 3A 02 00 00 00 5F D5 2A +R 00 00 01 00 02 07 0F 00 +T 42 08 00 00 00 00 00 00 E5 69 60 4E 23 46 C5 +R 00 00 01 00 02 04 0F 00 +T 4B 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 51 08 00 00 00 00 00 00 F1 F1 F1 F1 18 49 +R 00 00 01 00 02 04 00 00 +T 59 08 00 00 +R 00 00 01 00 +T 59 08 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 21 00 2B 0B 01 00 +T 5F 08 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 66 08 00 00 DD 6E FC DD 66 FD E5 3A +R 00 00 01 00 +T 6E 08 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 1B 00 02 0B 1B 00 +T 75 08 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 C5 +R 00 00 01 00 +T 80 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 86 08 00 00 00 00 00 00 F1 F1 F1 F1 F1 DD 5E +R 00 00 01 00 02 04 00 00 +T 8F 08 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 1D 00 +T 96 08 00 00 00 00 00 00 CD 00 00 00 00 AF DD +R 00 00 01 00 02 04 1D 00 02 09 00 00 +T 9D 08 00 00 77 FC DD 77 FD +R 00 00 01 00 +T A2 08 00 00 +R 00 00 01 00 +T A2 08 00 00 +R 00 00 01 00 +T A2 08 00 00 C3 9E 0D 00 00 +R 00 00 01 00 00 05 01 00 +T A5 08 00 00 +R 00 00 01 00 +T A5 08 00 00 21 1F 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T B0 08 00 00 23 56 D5 3A 02 00 00 00 5F D5 2A +R 00 00 01 00 02 08 0F 00 +T B9 08 00 00 00 00 00 00 E5 69 60 4E 23 46 C5 +R 00 00 01 00 02 04 0F 00 +T C2 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T C8 08 00 00 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T CF 08 00 00 9E 0D 00 00 +R 00 00 01 00 00 04 01 00 +T D1 08 00 00 +R 00 00 01 00 +T D1 08 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 25 00 +T D7 08 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 25 00 +T E0 08 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T E7 08 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T EE 08 00 00 F1 C3 9E 0D 00 00 +R 00 00 01 00 00 06 01 00 +T F2 08 00 00 +R 00 00 01 00 +T F2 08 00 00 DD 4E 0A DD 46 0B 21 1F 00 DD 5E +R 00 00 01 00 +T FD 08 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 06 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 0B 09 00 00 00 00 00 00 DD 75 FC DD 74 FD E5 +R 00 00 01 00 02 04 00 00 +T 14 09 00 00 21 06 00 E5 21 1D 00 DD 4E 04 DD +R 00 00 01 00 +T 1F 09 00 00 46 05 09 4E 23 46 21 1B 00 DD 5E +R 00 00 01 00 +T 2A 09 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 33 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T 38 09 00 00 00 00 00 00 F1 F1 7D B4 20 21 +R 00 00 01 00 02 04 00 00 +T 40 09 00 00 +R 00 00 01 00 +T 40 09 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0E 00 +T 46 09 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 0E 00 +T 4F 09 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T 56 09 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 5D 09 00 00 F1 C3 FC 09 00 00 +R 00 00 01 00 00 06 01 00 +T 61 09 00 00 +R 00 00 01 00 +T 61 09 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0C 00 +T 69 09 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 0C 00 02 0A 00 00 +T 70 09 00 00 B4 20 5D +R 00 00 01 00 +T 73 09 00 00 +R 00 00 01 00 +T 73 09 00 00 DD 6E FC DD 66 FD E5 0E +R 00 00 01 00 +T 7B 09 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 30 00 02 0A 30 00 +T 81 09 00 00 DD 6E 04 DD 66 05 7E 23 B6 28 14 +R 00 00 01 00 +T 8C 09 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 97 09 00 00 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T A0 09 00 00 +R 00 00 01 00 +T A0 09 00 00 21 FF FF +R 00 00 01 00 +T A3 09 00 00 +R 00 00 01 00 +T A3 09 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T A9 09 00 00 CD 00 00 00 00 E1 E1 E1 E1 3A +R 00 00 01 00 02 05 00 00 +T B1 09 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 32 00 02 0B 32 00 +T B8 09 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 C5 +R 00 00 01 00 +T C3 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T C9 09 00 00 00 00 00 00 F1 F1 F1 18 2C +R 00 00 01 00 02 04 00 00 +T D0 09 00 00 +R 00 00 01 00 +T D0 09 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 21 00 2B 0B 01 00 +T D6 09 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T DD 09 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 35 00 +T E3 09 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 35 00 +T EC 09 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T F3 09 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T FA 09 00 00 F1 F1 +R 00 00 01 00 +T FC 09 00 00 +R 00 00 01 00 +T FC 09 00 00 +R 00 00 01 00 +T FC 09 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 04 0A 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 1D 00 02 0A 00 00 +T 0B 0A 00 00 DD 77 FC DD 77 FD C3 9E 0D 00 00 +R 00 00 01 00 00 0B 01 00 +T 14 0A 00 00 +R 00 00 01 00 +T 14 0A 00 00 21 19 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 1F 0A 00 00 23 B6 20 20 +R 00 00 01 00 +T 23 0A 00 00 +R 00 00 01 00 +T 23 0A 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 23 00 +T 29 0A 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 23 00 +T 32 0A 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T 39 0A 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 40 0A 00 00 F1 18 14 +R 00 00 01 00 +T 43 0A 00 00 +R 00 00 01 00 +T 43 0A 00 00 DD 4E 0A DD 46 0B DD 5E 04 DD 56 +R 00 00 01 00 +T 4E 0A 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1F 00 02 0B 1F 00 +T 54 0A 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 57 0A 00 00 +R 00 00 01 00 +T 57 0A 00 00 C3 9E 0D 00 00 +R 00 00 01 00 00 05 01 00 +T 5A 0A 00 00 +R 00 00 01 00 +T 5A 0A 00 00 DD 4E 0A DD 46 0B 21 1F 00 DD 5E +R 00 00 01 00 +T 65 0A 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 6E 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 73 0A 00 00 00 00 00 00 DD 75 FC DD 74 FD E5 +R 00 00 01 00 02 04 00 00 +T 7C 0A 00 00 21 0F 00 E5 21 1D 00 DD 4E 04 DD +R 00 00 01 00 +T 87 0A 00 00 46 05 09 4E 23 46 21 1B 00 DD 5E +R 00 00 01 00 +T 92 0A 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 9B 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T A0 0A 00 00 00 00 00 00 F1 F1 7D B4 20 21 +R 00 00 01 00 02 04 00 00 +T A8 0A 00 00 +R 00 00 01 00 +T A8 0A 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0E 00 +T AE 0A 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 0E 00 +T B7 0A 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T BE 0A 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T C5 0A 00 00 F1 C3 6F 0B 00 00 +R 00 00 01 00 00 06 01 00 +T C9 0A 00 00 +R 00 00 01 00 +T C9 0A 00 00 01 FF 01 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T D3 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T D8 0A 00 00 00 00 00 00 7D B4 20 5D +R 00 00 01 00 02 04 00 00 +T DE 0A 00 00 +R 00 00 01 00 +T DE 0A 00 00 DD 6E FC DD 66 FD E5 0E +R 00 00 01 00 +T E6 0A 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0B 00 02 0A 0B 00 +T EC 0A 00 00 DD 6E 04 DD 66 05 7E 23 B6 28 14 +R 00 00 01 00 +T F7 0A 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 02 0B 00 00 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T 0B 0B 00 00 +R 00 00 01 00 +T 0B 0B 00 00 21 FF FF +R 00 00 01 00 +T 0E 0B 00 00 +R 00 00 01 00 +T 0E 0B 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 14 0B 00 00 CD 00 00 00 00 E1 E1 E1 E1 3A +R 00 00 01 00 02 05 00 00 +T 1C 0B 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 15 00 02 0B 15 00 +T 23 0B 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 C5 +R 00 00 01 00 +T 2E 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 34 0B 00 00 00 00 00 00 F1 F1 F1 18 34 +R 00 00 01 00 02 04 00 00 +T 3B 0B 00 00 +R 00 00 01 00 +T 3B 0B 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 21 00 2B 0B 01 00 +T 41 0B 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 48 0B 00 00 DD 6E FC DD 66 FD E5 3A +R 00 00 01 00 +T 50 0B 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 0B 06 00 +T 57 0B 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 C5 +R 00 00 01 00 +T 62 0B 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 68 0B 00 00 00 00 00 00 F1 F1 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 6F 0B 00 00 +R 00 00 01 00 +T 6F 0B 00 00 +R 00 00 01 00 +T 6F 0B 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 77 0B 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 1D 00 02 0A 00 00 +T 7E 0B 00 00 DD 77 FC DD 77 FD C3 9E 0D 00 00 +R 00 00 01 00 00 0B 01 00 +T 87 0B 00 00 +R 00 00 01 00 +T 87 0B 00 00 DD 4E 0A DD 46 0B 21 1F 00 DD 5E +R 00 00 01 00 +T 92 0B 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 9B 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T A0 0B 00 00 00 00 00 00 DD 75 FC DD 74 FD E5 +R 00 00 01 00 02 04 00 00 +T A9 0B 00 00 21 12 00 E5 21 1D 00 DD 4E 04 DD +R 00 00 01 00 +T B4 0B 00 00 46 05 09 4E 23 46 21 1B 00 DD 5E +R 00 00 01 00 +T BF 0B 00 00 04 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T C8 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T CD 0B 00 00 00 00 00 00 F1 F1 7D B4 20 21 +R 00 00 01 00 02 04 00 00 +T D5 0B 00 00 +R 00 00 01 00 +T D5 0B 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 0E 00 +T DB 0B 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 0E 00 +T E4 0B 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T EB 0B 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T F2 0B 00 00 F1 C3 91 0C 00 00 +R 00 00 01 00 00 06 01 00 +T F6 0B 00 00 +R 00 00 01 00 +T F6 0B 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 18 00 +T FE 0B 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 18 00 02 0A 00 00 +T 05 0C 00 00 B4 20 5D +R 00 00 01 00 +T 08 0C 00 00 +R 00 00 01 00 +T 08 0C 00 00 DD 6E FC DD 66 FD E5 0E +R 00 00 01 00 +T 10 0C 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 17 00 02 0A 17 00 +T 16 0C 00 00 DD 6E 04 DD 66 05 7E 23 B6 28 14 +R 00 00 01 00 +T 21 0C 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 2C 0C 00 00 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T 35 0C 00 00 +R 00 00 01 00 +T 35 0C 00 00 21 FF FF +R 00 00 01 00 +T 38 0C 00 00 +R 00 00 01 00 +T 38 0C 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 3E 0C 00 00 CD 00 00 00 00 E1 E1 E1 E1 3A +R 00 00 01 00 02 05 00 00 +T 46 0C 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 32 00 02 0B 32 00 +T 4D 0C 00 00 E5 DD 6E 04 DD 66 05 4E 23 46 C5 +R 00 00 01 00 +T 58 0C 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 13 00 02 0A 13 00 +T 5E 0C 00 00 00 00 00 00 F1 F1 F1 18 2C +R 00 00 01 00 02 04 00 00 +T 65 0C 00 00 +R 00 00 01 00 +T 65 0C 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 21 00 2B 0B 01 00 +T 6B 0C 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 72 0C 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 35 00 +T 78 0C 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 35 00 +T 81 0C 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T 88 0C 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 8F 0C 00 00 F1 F1 +R 00 00 01 00 +T 91 0C 00 00 +R 00 00 01 00 +T 91 0C 00 00 +R 00 00 01 00 +T 91 0C 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 99 0C 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 1D 00 02 0A 00 00 +T A0 0C 00 00 DD 77 FC DD 77 FD C3 9E 0D 00 00 +R 00 00 01 00 00 0B 01 00 +T A9 0C 00 00 +R 00 00 01 00 +T A9 0C 00 00 DD 6E 0A DD 66 0B 5E 16 00 3E +R 00 00 01 00 +T B3 0C 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T B8 0C 00 00 00 00 00 00 3E 66 AD B4 28 20 +R 00 00 01 00 02 04 00 00 +T C0 0C 00 00 +R 00 00 01 00 +T C0 0C 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 28 00 +T C6 0C 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 28 00 +T CF 0C 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T D6 0C 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T DD 0C 00 00 F1 18 1E +R 00 00 01 00 +T E0 0C 00 00 +R 00 00 01 00 +T E0 0C 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 31 00 +T E6 0C 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 31 00 +T EF 0C 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T F6 0C 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T FD 0C 00 00 F1 +R 00 00 01 00 +T FE 0C 00 00 +R 00 00 01 00 +T FE 0C 00 00 C3 9E 0D 00 00 +R 00 00 01 00 00 05 01 00 +T 01 0D 00 00 +R 00 00 01 00 +T 01 0D 00 00 DD 6E 0A DD 66 0B 5E 16 00 3E +R 00 00 01 00 +T 0B 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 10 0D 00 00 00 00 00 00 3E 73 AD B4 28 20 +R 00 00 01 00 02 04 00 00 +T 18 0D 00 00 +R 00 00 01 00 +T 18 0D 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 28 00 +T 1E 0D 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 28 00 +T 27 0D 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T 2E 0D 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 35 0D 00 00 F1 18 1E +R 00 00 01 00 +T 38 0D 00 00 +R 00 00 01 00 +T 38 0D 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 31 00 +T 3E 0D 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 31 00 +T 47 0D 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 13 00 +T 4E 0D 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 13 00 02 09 00 00 +T 55 0D 00 00 F1 +R 00 00 01 00 +T 56 0D 00 00 +R 00 00 01 00 +T 56 0D 00 00 18 46 +R 00 00 01 00 +T 58 0D 00 00 +R 00 00 01 00 +T 58 0D 00 00 21 00 00 00 00 E5 21 08 00 E5 21 +R 00 00 01 00 02 05 22 00 +T 61 0D 00 00 00 00 00 00 E5 3A 02 00 00 00 4F +R 00 00 01 00 02 04 03 00 02 0A 10 00 +T 68 0D 00 00 C5 2A 00 00 00 00 E5 DD 6E 04 DD +R 00 00 01 00 02 06 10 00 +T 71 0D 00 00 66 05 4E 23 46 C5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 13 00 +T 79 0D 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 13 00 02 0A 00 00 +T 80 0D 00 00 21 0C 00 39 F9 EB 18 16 +R 00 00 01 00 +T 88 0D 00 00 +R 00 00 01 00 +T 88 0D 00 00 DD 4E 0A DD 46 0B DD 5E 04 DD 56 +R 00 00 01 00 +T 93 0D 00 00 05 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T 99 0D 00 00 CD 00 00 00 00 18 00 +R 00 00 01 00 02 05 00 00 +T 9E 0D 00 00 +R 00 00 01 00 +T 9E 0D 00 00 21 01 00 +R 00 00 01 00 +T A1 0D 00 00 +R 00 00 01 00 +T A1 0D 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0D 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 00 +R 00 00 02 00 +T 02 00 00 00 +R 00 00 02 00 +T 02 00 00 00 52 45 54 52 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 77 00 +R 00 00 02 00 +T 09 00 00 00 +R 00 00 02 00 +T 09 00 00 00 53 54 4F 52 00 +R 00 00 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 4C 49 53 54 00 +R 00 00 02 00 +T 13 00 00 00 +R 00 00 02 00 +T 13 00 00 00 4E 4C 53 54 00 +R 00 00 02 00 diff --git a/src/nos/lib/servers_lib/ftpserv_switch_xmd5.rel b/src/nos/lib/servers_lib/ftpserv_switch_xmd5.rel new file mode 100644 index 00000000..cb076157 --- /dev/null +++ b/src/nos/lib/servers_lib/ftpserv_switch_xmd5.rel @@ -0,0 +1,241 @@ +XL4 +H 3 areas 18 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strerror Ref00000000 +S _logmsg Ref00000000 +S _pathname Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___010f_1e56__2502x Ref00000000 +S _Ftpsmsg_noperm Ref00000000 +S __fprintf Ref00000000 +S _Ftpsmsg_cantopen Ref00000000 +S .__.ABS. Def00000000 +S _isbinary Ref00000000 +S _free Ref00000000 +S _errno Ref00000000 +S _md5hash Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___0077_c302__20_25s_0a Ref00000000 +S _freopen Ref00000000 +S ___03e5_3999_XMD5_20_25s Ref00000000 +S _permcheck Ref00000000 +S ___01a2_67ab_200_20 Ref00000000 +S _Ftpsmsg_binwarn Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 27F flags 0 +S _ftpserv_switch_xmd5 Def00000000 +A CSTR size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EA FF 21 1F 00 DD +R 00 00 01 00 02 05 0E 00 +T 09 00 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 13 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 18 00 00 00 00 00 00 00 DD 75 EC DD 74 ED 21 +R 00 00 01 00 02 04 00 00 +T 21 00 00 00 04 00 DD 4E 02 DD 46 03 09 7E FE +R 00 00 01 00 +T 2C 00 00 00 01 38 0E FE 03 30 0A +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 DD 36 EE 00 00 00 00 DD 36 EF +R 00 00 01 00 09 07 02 00 +T 3A 00 00 00 00 00 00 00 18 0E +R 00 00 01 00 89 04 02 00 +T 3D 00 00 00 +R 00 00 01 00 +T 3D 00 00 00 FE 00 20 0A DD 36 EE 00 00 00 00 +R 00 00 01 00 09 0B 02 00 +T 45 00 00 00 DD 36 EF 00 00 00 00 18 00 +R 00 00 01 00 89 07 02 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 DD 6E EC DD 66 ED E5 21 09 00 E5 +R 00 00 01 00 +T 56 00 00 00 21 1D 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 61 00 00 00 23 46 21 1B 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 6C 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 12 00 +T 73 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T 7A 00 00 00 7D B4 20 21 +R 00 00 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 06 00 +T 84 00 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 06 00 +T 8D 00 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T 94 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 9B 00 00 00 F1 C3 67 02 00 00 +R 00 00 01 00 00 06 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 21 07 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T AA 00 00 00 01 00 00 C5 DD 4E EE DD 46 EF DD +R 00 00 01 00 +T B5 00 00 00 5E EC DD 56 ED 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 10 00 +T BD 00 00 00 00 00 00 00 CD 00 00 00 00 F1 4D +R 00 00 01 00 02 04 10 00 02 09 00 00 +T C4 00 00 00 44 E1 71 23 70 79 B0 20 37 +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 0C 00 2B 0B 01 00 +T D3 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T DA 00 00 00 DD 6E EC DD 66 ED E5 3A +R 00 00 01 00 +T E2 00 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 08 00 02 0B 08 00 +T E9 00 00 00 E5 DD 6E 02 DD 66 03 4E 23 46 C5 +R 00 00 01 00 +T F4 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T FA 00 00 00 00 00 00 00 F1 F1 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T 02 01 00 00 67 02 00 00 +R 00 00 01 00 00 04 01 00 +T 04 01 00 00 +R 00 00 01 00 +T 04 01 00 00 DD 6E EC DD 66 ED E5 0E +R 00 00 01 00 +T 0C 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 11 00 02 0A 11 00 +T 12 01 00 00 DD 6E 02 DD 66 03 7E 23 B6 28 14 +R 00 00 01 00 +T 1D 01 00 00 DD 6E 02 DD 66 03 46 23 66 68 01 +R 00 00 01 00 +T 28 01 00 00 08 00 09 46 23 66 68 18 03 +R 00 00 01 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 21 FF FF +R 00 00 01 00 +T 34 01 00 00 +R 00 00 01 00 +T 34 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 02 00 02 0B 02 00 +T 3A 01 00 00 CD 00 00 00 00 E1 E1 E1 E1 21 +R 00 00 01 00 02 05 00 00 +T 42 01 00 00 04 00 DD 4E 02 DD 46 03 09 7E B7 +R 00 00 01 00 +T 4D 01 00 00 20 3F 21 07 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 58 01 00 00 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T 5F 01 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 66 01 00 00 28 26 +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 DD 6E EC DD 66 ED E5 3A +R 00 00 01 00 +T 70 01 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 14 00 02 0B 14 00 +T 77 01 00 00 E5 DD 6E 02 DD 66 03 4E 23 46 C5 +R 00 00 01 00 +T 82 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 88 01 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 21 04 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 99 01 00 00 B7 20 04 0E 01 18 02 +R 00 00 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 0E 00 +R 00 00 01 00 +T A2 01 00 00 +R 00 00 01 00 +T A2 01 00 00 06 00 C5 21 08 00 39 4D 44 21 +R 00 00 01 00 +T AC 01 00 00 07 00 DD 5E 02 DD 56 03 19 5E 23 +R 00 00 01 00 +T B7 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T BD 01 00 00 CD 00 00 00 00 F1 21 07 00 DD 4E +R 00 00 01 00 02 05 00 00 +T C6 01 00 00 02 DD 46 03 09 5E 23 56 3E +R 00 00 01 00 +T CF 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T D4 01 00 00 00 00 00 00 21 07 00 09 AF 77 23 +R 00 00 01 00 02 04 00 00 +T DD 01 00 00 77 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 06 13 00 +T E2 01 00 00 00 00 00 00 E5 69 60 4E 23 46 C5 +R 00 00 01 00 02 04 13 00 +T EB 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T F1 01 00 00 00 00 00 00 F1 F1 F1 AF DD 77 EA +R 00 00 01 00 02 04 00 00 +T FA 01 00 00 DD 77 EB +R 00 00 01 00 +T FD 01 00 00 +R 00 00 01 00 +T FD 01 00 00 01 10 80 DD 6E EA DD 66 EB 3E 80 +R 00 00 01 00 +T 08 02 00 00 AC 67 ED 42 30 35 +R 00 00 01 00 +T 0E 02 00 00 +R 00 00 01 00 +T 0E 02 00 00 21 06 00 39 DD 4E EA DD 46 EB 09 +R 00 00 01 00 +T 19 02 00 00 5E 16 00 D5 1E 00 00 00 00 D5 21 +R 00 00 01 00 2B 09 05 00 +T 21 02 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 05 00 +T 2A 02 00 00 5E 23 56 D5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T 31 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 38 02 00 00 F1 F1 03 DD 71 EA DD 70 EB 18 BA +R 00 00 01 00 +T 43 02 00 00 +R 00 00 01 00 +T 43 02 00 00 DD 6E EC DD 66 ED E5 0E +R 00 00 01 00 +T 4B 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0F 00 02 0A 0F 00 +T 51 02 00 00 DD 6E 02 DD 66 03 4E 23 46 C5 3E +R 00 00 01 00 +T 5C 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 61 02 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 67 02 00 00 +R 00 00 01 00 +T 67 02 00 00 +R 00 00 01 00 +T 67 02 00 00 DD 5E EC DD 56 ED 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 6F 02 00 00 21 00 00 00 00 CD 00 00 00 00 AF +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 76 02 00 00 DD 77 EC DD 77 ED C3 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 00 +R 00 00 02 00 diff --git a/src/nos/lib/servers_lib/ftpstart.rel b/src/nos/lib/servers_lib/ftpstart.rel new file mode 100644 index 00000000..e0aa0624 --- /dev/null +++ b/src/nos/lib/servers_lib/ftpstart.rel @@ -0,0 +1,50 @@ +XL4 +H 3 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _ftpserv Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _start_tcp Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5B flags 0 +S _ftpstart Def00000000 +A CSTR size B flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 14 00 00 00 30 0A +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 36 FE 15 DD 36 FF 00 18 19 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 2B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 31 00 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 00 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 21 00 08 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 01 00 +T 41 00 00 00 00 00 00 00 E5 01 00 00 00 00 DD +R 00 00 01 00 02 04 01 00 00 0A 02 00 +T 48 00 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 50 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 57 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 46 54 50 20 53 65 72 76 65 72 00 +R 00 00 02 00 diff --git a/src/nos/lib/servers_lib/permcheck.rel b/src/nos/lib/servers_lib/permcheck.rel new file mode 100644 index 00000000..22b797e1 --- /dev/null +++ b/src/nos/lib/servers_lib/permcheck.rel @@ -0,0 +1,118 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strncmp Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _access Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C2 flags 0 +S _permcheck Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 DD 7E 0C DD B6 0D +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 28 08 DD 7E 02 DD B6 03 20 06 +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 21 00 00 C3 BF 00 00 00 +R 00 00 01 00 00 08 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 21 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 28 00 00 00 DD 4E 02 DD 46 03 DD 5E 0C DD 56 +R 00 00 01 00 +T 33 00 00 00 0D 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 39 00 00 00 CD 00 00 00 00 F1 7D B4 28 05 +R 00 00 01 00 02 05 00 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 21 00 00 18 79 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 DD 5E 0A DD 56 0B CD 00 00 00 00 +R 00 00 01 00 02 0B 02 00 +T 4F 00 00 00 05 00 06 00 09 00 0A 00 0F 00 +R 00 00 01 00 +T 59 00 00 00 12 00 BC 00 00 00 78 00 00 00 +R 00 00 01 00 00 06 01 00 00 0A 01 00 +T 5F 00 00 00 89 00 00 00 89 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 63 00 00 00 67 00 00 00 78 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 DD 7E 04 E6 01 28 05 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 21 01 00 18 4C +R 00 00 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 21 00 00 18 47 +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 DD 7E 04 E6 04 28 05 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 21 01 00 18 3B +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 21 00 00 18 36 +R 00 00 01 00 +T 89 00 00 00 +R 00 00 01 00 +T 89 00 00 00 DD 7E 04 E6 04 28 05 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 21 01 00 18 2A +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 01 02 00 DD 5E 0C DD 56 0D 3E +R 00 00 01 00 +T 9F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T A4 00 00 00 00 00 00 00 7D A4 3C 20 0C DD 7E +R 00 00 01 00 02 04 00 00 +T AD 00 00 00 04 E6 02 28 05 +R 00 00 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 21 01 00 18 08 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 21 00 00 18 03 +R 00 00 01 00 +T BC 00 00 00 +R 00 00 01 00 +T BC 00 00 00 21 00 00 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/servers_lib/pport.rel b/src/nos/lib/servers_lib/pport.rel new file mode 100644 index 00000000..b4297e19 --- /dev/null +++ b/src/nos/lib/servers_lib/pport.rel @@ -0,0 +1,116 @@ +XL4 +H 2 areas 8 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _atoi Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 153 flags 0 +S _pport Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF AF DD 77 FA +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 DD 77 FB DD 77 FC DD 77 FD AF DD +R 00 00 01 00 +T 14 00 00 00 77 FE DD 77 FF +R 00 00 01 00 +T 19 00 00 00 +R 00 00 01 00 +T 19 00 00 00 01 04 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 24 00 00 00 AC 67 ED 42 30 71 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 32 00 00 00 21 00 00 00 00 CD 00 00 00 00 7C +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 39 00 00 00 07 9F 4F 41 C5 E5 DD 4E FC DD 46 +R 00 00 01 00 +T 44 00 00 00 FD DD 6E FA DD 66 FB 41 4C 65 2E +R 00 00 01 00 +T 4F 00 00 00 00 59 50 C1 09 EB C1 ED 4A 4D 44 +R 00 00 01 00 +T 5A 00 00 00 EB DD 75 FA DD 74 FB DD 71 FC DD +R 00 00 01 00 +T 65 00 00 00 70 FD 01 2C 00 DD 5E 04 DD 56 05 +R 00 00 01 00 +T 70 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T 76 00 00 00 00 00 00 00 DD 75 04 DD 74 05 7D +R 00 00 01 00 02 04 00 00 +T 7F 00 00 00 B4 20 06 +R 00 00 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 21 FF FF C3 50 01 00 00 +R 00 00 01 00 00 08 01 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T 90 00 00 00 +R 00 00 01 00 +T 90 00 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 C3 19 00 00 00 +R 00 00 01 00 00 05 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T A6 00 00 00 4E FC DD 46 FD DD 5E FA DD 56 FB +R 00 00 01 00 +T B1 00 00 00 73 23 72 23 71 23 70 DD 5E 04 DD +R 00 00 01 00 +T BC 00 00 00 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 05 00 +T C1 00 00 00 00 00 00 00 CD 00 00 00 00 7C 07 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T C8 00 00 00 9F 4F 41 DD 75 FA DD 74 FB DD 71 +R 00 00 01 00 +T D3 00 00 00 FC DD 70 FD 01 2C 00 DD 5E 04 DD +R 00 00 01 00 +T DE 00 00 00 56 05 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T E3 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T EA 00 00 00 04 DD 74 05 7D B4 20 05 +R 00 00 01 00 +T F2 00 00 00 +R 00 00 01 00 +T F2 00 00 00 21 FF FF 18 59 +R 00 00 01 00 +T F7 00 00 00 +R 00 00 01 00 +T F7 00 00 00 DD 34 04 20 03 DD 34 05 +R 00 00 01 00 +T FF 00 00 00 +R 00 00 01 00 +T FF 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 07 01 00 00 21 00 00 00 00 CD 00 00 00 00 7C +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 0E 01 00 00 07 9F 4F 41 C5 E5 DD 4E FC DD 46 +R 00 00 01 00 +T 19 01 00 00 FD DD 6E FA DD 66 FB 41 4C 65 2E +R 00 00 01 00 +T 24 01 00 00 00 59 50 C1 09 EB C1 ED 4A 4D 44 +R 00 00 01 00 +T 2F 01 00 00 EB DD 75 FA DD 74 FB DD 71 FC DD +R 00 00 01 00 +T 3A 01 00 00 70 FD DD 6E 02 DD 66 03 23 23 DD +R 00 00 01 00 +T 45 01 00 00 4E FA DD 46 FB 71 23 70 21 00 00 +R 00 00 01 00 +T 50 01 00 00 +R 00 00 01 00 +T 50 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/servers_lib/recvit.rel b/src/nos/lib/servers_lib/recvit.rel new file mode 100644 index 00000000..3eb5e821 --- /dev/null +++ b/src/nos/lib/servers_lib/recvit.rel @@ -0,0 +1,203 @@ +XL4 +H 3 areas 16 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strerror Ref00000000 +S _Ftpsmsg_rxok Ref00000000 +S _fflush Ref00000000 +S _socket Ref00000000 +S _Ftpsmsg_noconn Ref00000000 +S _recvfile Ref00000000 +S _Ftpsmsg_writerr Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S _bind Ref00000000 +S .__.ABS. Def00000000 +S _errno Ref00000000 +S _close_s Ref00000000 +S _connect Ref00000000 +S _Ftpsmsg_sending Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _shutdown Ref00000000 +S _fdopen Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 252 flags 0 +S _recvit Def00000000 +A CSTR size 3 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EA FF 21 00 00 E5 +R 00 00 01 00 02 05 10 00 +T 09 00 00 00 01 00 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 11 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 18 00 00 00 DD 75 FE DD 74 FF AF DD 77 EA DD +R 00 00 01 00 +T 23 00 00 00 77 EB AF DD 77 EE DD 77 EF DD 77 +R 00 00 01 00 +T 2E 00 00 00 F0 DD 77 F1 DD 36 EC 14 DD 36 ED +R 00 00 01 00 +T 39 00 00 00 00 01 10 00 C5 21 02 00 39 4D 44 +R 00 00 01 00 +T 44 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 4C 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 53 00 00 00 DD 6E 0A DD 66 0B E5 DD 6E 04 DD +R 00 00 01 00 +T 5E 00 00 00 66 05 E5 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 08 0F 00 +T 67 00 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 0F 00 +T 70 00 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 77 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 7E 00 00 00 F1 F1 F1 DD 6E 02 DD 66 03 5E 23 +R 00 00 01 00 +T 89 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 8F 00 00 00 CD 00 00 00 00 21 10 00 E5 21 +R 00 00 01 00 02 05 00 00 +T 97 00 00 00 09 00 DD 4E 02 DD 46 03 09 4D 44 +R 00 00 01 00 +T A2 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T AA 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T B1 00 00 00 7D A4 3C 20 57 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 21 07 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T C1 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 14 00 +T C6 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 14 00 02 09 00 00 +T CC 00 00 00 07 00 09 AF 77 23 77 DD 5E FE DD +R 00 00 01 00 +T D7 00 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0D 00 +T DC 00 00 00 00 00 00 00 CD 00 00 00 00 69 60 +R 00 00 01 00 02 04 0D 00 02 09 00 00 +T E3 00 00 00 23 23 AF 77 23 77 3A 02 00 00 00 +R 00 00 01 00 02 0B 05 00 +T EC 00 00 00 4F C5 2A 00 00 00 00 E5 DD 6E 02 +R 00 00 01 00 02 07 05 00 +T F5 00 00 00 DD 66 03 4E 23 46 C5 3E +R 00 00 01 00 +T FD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 02 01 00 00 00 00 00 00 F1 F1 F1 21 FF FF C3 +R 00 00 01 00 02 04 00 00 +T 0B 01 00 00 4F 02 00 00 +R 00 00 01 00 00 04 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 DD 6E 02 DD 66 03 23 23 E5 01 +R 00 00 01 00 +T 17 01 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 00 04 02 00 +T 20 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 25 01 00 00 00 00 00 00 4D 44 E1 71 23 70 0E +R 00 00 01 00 02 04 00 00 +T 2E 01 00 00 00 C5 21 04 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 39 01 00 00 09 5E D5 03 03 69 60 4E 23 46 21 +R 00 00 01 00 +T 44 01 00 00 07 00 DD 5E 02 DD 56 03 19 5E 23 +R 00 00 01 00 +T 4F 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 55 01 00 00 CD 00 00 00 00 F1 F1 DD 75 FA DD +R 00 00 01 00 02 05 00 00 +T 5E 01 00 00 74 FB DD 71 FC DD 70 FD 7D A4 A1 +R 00 00 01 00 +T 69 01 00 00 A0 3C 20 71 +R 00 00 01 00 +T 6D 01 00 00 +R 00 00 01 00 +T 6D 01 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 0C 00 2B 0B 01 00 +T 73 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 7A 01 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 07 00 +T 80 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 07 00 +T 89 01 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 90 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 97 01 00 00 F1 F1 01 02 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T A2 01 00 00 23 23 7E 23 B6 28 15 DD 6E 02 DD +R 00 00 01 00 +T AD 01 00 00 66 03 23 23 56 23 66 6A 11 08 00 +R 00 00 01 00 +T B8 01 00 00 19 5E 23 56 18 03 +R 00 00 01 00 +T BE 01 00 00 +R 00 00 01 00 +T BE 01 00 00 11 FF FF +R 00 00 01 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 12 00 02 0A 12 00 +T C7 01 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 00 00 +T D0 01 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 14 00 +T D7 01 00 00 00 00 00 00 CD 00 00 00 00 18 31 +R 00 00 01 00 02 04 14 00 02 09 00 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 02 00 +T E4 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 02 00 +T ED 01 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T F4 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T FB 01 00 00 F1 DD 6E 02 DD 66 03 23 23 5E 23 +R 00 00 01 00 +T 06 02 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 14 00 02 0B 14 00 +T 0C 02 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 0F 02 00 00 +R 00 00 01 00 +T 0F 02 00 00 DD 6E 02 DD 66 03 23 23 AF 77 23 +R 00 00 01 00 +T 1A 02 00 00 77 21 07 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 25 02 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 14 00 +T 2B 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 14 00 02 09 00 00 +T 31 02 00 00 07 00 09 AF 77 23 77 DD 7E FA DD +R 00 00 01 00 +T 3C 02 00 00 A6 FB DD A6 FC DD A6 FD 3C 20 05 +R 00 00 01 00 +T 47 02 00 00 +R 00 00 01 00 +T 47 02 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 21 00 00 +R 00 00 01 00 +T 4F 02 00 00 +R 00 00 01 00 +T 4F 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 2B 00 +R 00 00 02 00 diff --git a/src/nos/lib/servers_lib/sendit.rel b/src/nos/lib/servers_lib/sendit.rel new file mode 100644 index 00000000..15bcc45d --- /dev/null +++ b/src/nos/lib/servers_lib/sendit.rel @@ -0,0 +1,198 @@ +XL4 +H 3 areas 13 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _fflush Ref00000000 +S _socket Ref00000000 +S _Ftpsmsg_txok Ref00000000 +S _sendfile Ref00000000 +S _Ftpsmsg_noconn Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S _bind Ref00000000 +S .__.ABS. Def00000000 +S _close_s Ref00000000 +S _connect Ref00000000 +S _Ftpsmsg_sending Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _shutdown Ref00000000 +S _fdopen Ref00000000 +S _fclose Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 240 flags 0 +S _sendit Def00000000 +A CSTR size 3 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EA FF 21 00 00 E5 +R 00 00 01 00 02 05 0D 00 +T 09 00 00 00 01 00 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 11 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 02 00 02 0A 00 00 +T 18 00 00 00 DD 75 FE DD 74 FF AF DD 77 EE DD +R 00 00 01 00 +T 23 00 00 00 77 EF AF DD 77 F2 DD 77 F3 DD 77 +R 00 00 01 00 +T 2E 00 00 00 F4 DD 77 F5 DD 36 F0 14 DD 36 F1 +R 00 00 01 00 +T 39 00 00 00 00 01 10 00 C5 21 06 00 39 4D 44 +R 00 00 01 00 +T 44 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 4C 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T 53 00 00 00 DD 6E 0A DD 66 0B E5 DD 6E 04 DD +R 00 00 01 00 +T 5E 00 00 00 66 05 E5 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 08 0C 00 +T 67 00 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 0C 00 +T 70 00 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T 77 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 7E 00 00 00 F1 F1 F1 DD 6E 02 DD 66 03 5E 23 +R 00 00 01 00 +T 89 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 8F 00 00 00 CD 00 00 00 00 21 10 00 E5 21 +R 00 00 01 00 02 05 00 00 +T 97 00 00 00 09 00 DD 4E 02 DD 46 03 09 4D 44 +R 00 00 01 00 +T A2 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T AA 00 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T B1 00 00 00 7D A4 3C 20 57 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 21 07 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T C1 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T C6 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T CC 00 00 00 07 00 09 AF 77 23 77 DD 5E FE DD +R 00 00 01 00 +T D7 00 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0A 00 +T DC 00 00 00 00 00 00 00 CD 00 00 00 00 69 60 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T E3 00 00 00 23 23 AF 77 23 77 3A 02 00 00 00 +R 00 00 01 00 02 0B 05 00 +T EC 00 00 00 4F C5 2A 00 00 00 00 E5 DD 6E 02 +R 00 00 01 00 02 07 05 00 +T F5 00 00 00 DD 66 03 4E 23 46 C5 3E +R 00 00 01 00 +T FD 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 02 01 00 00 00 00 00 00 F1 F1 F1 21 FF FF C3 +R 00 00 01 00 02 04 00 00 +T 0B 01 00 00 3D 02 00 00 +R 00 00 01 00 00 04 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 DD 6E 02 DD 66 03 23 23 E5 01 +R 00 00 01 00 +T 17 01 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 00 04 02 00 +T 20 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 25 01 00 00 00 00 00 00 4D 44 E1 71 23 70 0E +R 00 00 01 00 02 04 00 00 +T 2E 01 00 00 00 C5 21 04 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 39 01 00 00 09 5E D5 03 03 69 60 4E 23 46 21 +R 00 00 01 00 +T 44 01 00 00 07 00 DD 5E 02 DD 56 03 19 5E 23 +R 00 00 01 00 +T 4F 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T 55 01 00 00 CD 00 00 00 00 F1 F1 DD 75 EA DD +R 00 00 01 00 02 05 00 00 +T 5E 01 00 00 74 EB DD 71 EC DD 70 ED 7D A4 A1 +R 00 00 01 00 +T 69 01 00 00 A0 3C 20 63 +R 00 00 01 00 +T 6D 01 00 00 +R 00 00 01 00 +T 6D 01 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 05 00 +T 73 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 05 00 +T 7C 01 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T 83 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 8A 01 00 00 F1 01 02 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 +T 95 01 00 00 23 7E 23 B6 28 15 DD 6E 02 DD 66 +R 00 00 01 00 +T A0 01 00 00 03 23 23 56 23 66 6A 11 08 00 19 +R 00 00 01 00 +T AB 01 00 00 5E 23 56 18 03 +R 00 00 01 00 +T B0 01 00 00 +R 00 00 01 00 +T B0 01 00 00 11 FF FF +R 00 00 01 00 +T B3 01 00 00 +R 00 00 01 00 +T B3 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0F 00 02 0A 0F 00 +T B9 01 00 00 00 00 00 00 DD 6E 02 DD 66 03 23 +R 00 00 01 00 02 04 00 00 +T C2 01 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T C9 01 00 00 00 00 00 00 CD 00 00 00 00 18 1E +R 00 00 01 00 02 04 11 00 02 09 00 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 3A 02 00 00 00 4F C5 2A +R 00 00 01 00 02 05 03 00 +T D6 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 03 00 +T DF 01 00 00 4E 23 46 C5 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T E6 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T ED 01 00 00 F1 +R 00 00 01 00 +T EE 01 00 00 +R 00 00 01 00 +T EE 01 00 00 21 07 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T F9 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T FE 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 04 02 00 00 07 00 09 AF 77 23 77 03 03 0A 5F +R 00 00 01 00 +T 0F 02 00 00 03 0A 57 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 11 00 +T 15 02 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 1C 02 00 00 02 DD 66 03 23 23 AF 77 23 77 DD +R 00 00 01 00 +T 27 02 00 00 7E EA DD A6 EB DD A6 EC DD A6 ED +R 00 00 01 00 +T 32 02 00 00 3C 20 05 +R 00 00 01 00 +T 35 02 00 00 +R 00 00 01 00 +T 35 02 00 00 21 FF FF 18 03 +R 00 00 01 00 +T 3A 02 00 00 +R 00 00 01 00 +T 3A 02 00 00 21 00 00 +R 00 00 01 00 +T 3D 02 00 00 +R 00 00 01 00 +T 3D 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 06 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 72 2B 00 +R 00 00 02 00 diff --git a/src/nos/lib/servers_lib/smisc.rel b/src/nos/lib/servers_lib/smisc.rel new file mode 100644 index 00000000..d38581fa --- /dev/null +++ b/src/nos/lib/servers_lib/smisc.rel @@ -0,0 +1,1600 @@ +XL4 +H 6 areas 60 global symbols +S ___0514_4ca5_open_20discard Ref00000000 +S ___033d_85d2_Password_3a_20 Ref00000000 +S _fread Ref00000000 +S _ambufw Ref00000000 +S ___01d8_f05c_Abort_0d_0a Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _strncmp Ref00000000 +S _asy_ioctl Ref00000000 +S _if_lookup Ref00000000 +S _socket Ref00000000 +S _logmsg Ref00000000 +S _fgetc Ref00000000 +S _rip Ref00000000 +S _fmode Ref00000000 +S _availmem Ref00000000 +S _getpeername Ref00000000 +S _ppause Ref00000000 +S _len_p Ref00000000 +S _fwrite Ref00000000 +S _setjmp Ref00000000 +S ___02a4_1298_Interface_20_25s_20 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _start_tcp Ref00000000 +S ___03ba_6afe_Turn_20off_20local_ Ref00000000 +S ___03b5_0d8c_Try_20to_20bounce_2 Ref00000000 +S _strlen Ref00000000 +S _alert Ref00000000 +S __fprintf Ref00000000 +S _strcmp Ref00000000 +S _fgets Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _sockowner Ref00000000 +S _ismyaddr Ref00000000 +S _bind Ref00000000 +S _iostop Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _rt_lookup Ref00000000 +S _kwait Ref00000000 +S _killproc Ref00000000 +S ___0515_e649_open_20echo Ref00000000 +S _pullup Ref00000000 +S _pull32 Ref00000000 +S _free Ref00000000 +S _fputc Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ___043f_423c_close_20discard Ref00000000 +S _close_s Ref00000000 +S ___02ab_c429_Interface_3a_20 Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _stop_tcp Ref00000000 +S _chname Ref00000000 +S _atoi Ref00000000 +S _calloc Ref00000000 +S _mallocw Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _free_p Ref00000000 +S _fblock Ref00000000 +S __printf Ref00000000 +S ___03e3_25a6_Wink_20DTR_3f_20 Ref00000000 +S _send_mbuf Ref00000000 +S _pull8 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +S _kalarm Ref00000000 +S ___0516_a479_open_20term Ref00000000 +S _recv_mbuf Ref00000000 +S _psocket Ref00000000 +S _exit Ref00000000 +S _fdopen Ref00000000 +S _fclose Ref00000000 +S ___0441_03ad_close_20term Ref00000000 +S ___0440_419d_close_20echo Ref00000000 +S ___020c_d8a5_Can_27t_20open_20in Ref00000000 +S ___0141_d4cc__25s_20_2d_20Remote Ref00000000 +S ___02be_4f93_Login_20incorrect_0 Ref00000000 +S ___0128_22d3__25c_25c_25c Ref00000000 +S _newproc Ref00000000 +S ___03eb_4583_You_27re_20using_20 Ref00000000 +S _Kicklist Ref00000000 +S _setvbuf Ref00000000 +S _asyopen Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size FD8 flags 0 +S _echo0 Def0000025B +S _echo1 Def00000148 +S _term0 Def00000CF0 +S _term1 Def0000057F +S _dis0 Def000000FE +S _dis1 Def00000000 +S _rem0 Def0000056A +S _rem1 Def000002A5 +S _bsr0 Def00000FC3 +S _bsr1 Def00000D3A +A CSTR size 62 flags 0 +A UDATA0 size 2 flags 0 +S _Tserv Def00000000 +A IDATA0 size 6 flags 0 +S _Rempass Def00000000 +A CDATA0 size 6 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 32 00 +T 09 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 14 00 00 00 30 0A +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 36 FE 09 DD 36 FF 00 18 19 +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 2B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 36 00 02 0A 36 00 +T 31 00 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 05 00 +T 39 00 00 00 +R 00 00 01 00 +T 39 00 00 00 21 40 02 E5 0E 5B 00 00 00 C5 21 +R 00 00 01 00 29 09 01 00 +T 41 00 00 00 5B 00 00 00 E5 01 01 00 00 00 DD +R 00 00 01 00 00 04 01 00 00 0A 02 00 +T 48 00 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 16 00 +T 50 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 16 00 02 09 05 00 +T 57 00 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 15 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 CD 00 00 00 00 FE FF ED 4B +R 00 00 01 00 02 05 32 00 +T 62 00 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 23 00 +T 6B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T 70 00 00 00 00 00 00 00 0E 00 00 00 00 C5 21 +R 00 00 01 00 02 04 05 00 2B 09 00 00 +T 76 00 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 00 00 +T 7F 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 85 00 00 00 CD 00 00 00 00 E1 E1 E1 3E +R 00 00 01 00 02 05 05 00 +T 8C 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 91 00 00 00 00 00 00 00 7D B4 20 3D +R 00 00 01 00 02 04 05 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T A2 00 00 00 E5 21 06 00 39 4D 44 DD 5E 02 DD +R 00 00 01 00 +T AD 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 44 00 +T B2 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 44 00 02 09 05 00 +T B9 00 00 00 F1 4D 44 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 39 00 +T C2 00 00 00 30 10 +R 00 00 01 00 +T C4 00 00 00 +R 00 00 01 00 +T C4 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3A 00 +T CC 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 3A 00 02 0A 05 00 +T D3 00 00 00 C3 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 2E 00 02 0B 2E 00 +T DA 00 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T E3 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T E8 00 00 00 00 00 00 00 E1 E1 E1 DD 5E 02 DD +R 00 00 01 00 02 04 05 00 +T F1 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2F 00 +T F6 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 2F 00 02 09 05 00 +T FC 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 15 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 32 00 +T 07 01 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 12 01 00 00 30 0A +R 00 00 01 00 +T 14 01 00 00 +R 00 00 01 00 +T 14 01 00 00 DD 36 FE 09 DD 36 FF 00 18 19 +R 00 00 01 00 +T 1E 01 00 00 +R 00 00 01 00 +T 1E 01 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 29 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 36 00 02 0A 36 00 +T 2F 01 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 05 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 34 00 +T 3F 01 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 34 00 02 0A 05 00 +T 46 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 15 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 32 00 +T 51 01 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 5C 01 00 00 30 0A +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 DD 36 FE 07 DD 36 FF 00 18 19 +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 73 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 36 00 02 0A 36 00 +T 79 01 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 05 00 +T 81 01 00 00 +R 00 00 01 00 +T 81 01 00 00 21 00 02 E5 0E A3 01 00 00 C5 21 +R 00 00 01 00 29 09 01 00 +T 89 01 00 00 A3 01 00 00 E5 01 10 00 00 00 DD +R 00 00 01 00 00 04 01 00 00 0A 02 00 +T 90 01 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 16 00 +T 98 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 16 00 02 09 05 00 +T 9F 01 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 15 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 CD 00 00 00 00 FE FF ED 4B +R 00 00 01 00 02 05 32 00 +T AA 01 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 23 00 +T B3 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T B8 01 00 00 00 00 00 00 0E 00 00 00 00 C5 21 +R 00 00 01 00 02 04 05 00 2B 09 28 00 +T BE 01 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 28 00 +T C7 01 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T CD 01 00 00 CD 00 00 00 00 E1 E1 E1 3E +R 00 00 01 00 02 05 05 00 +T D4 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T D9 01 00 00 00 00 00 00 7D B4 20 52 +R 00 00 01 00 02 04 05 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T EA 01 00 00 E5 21 06 00 39 4D 44 DD 5E 02 DD +R 00 00 01 00 +T F5 01 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 44 00 +T FA 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 44 00 02 09 05 00 +T 01 02 00 00 F1 4D 44 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 39 00 +T 0A 02 00 00 30 25 +R 00 00 01 00 +T 0C 02 00 00 +R 00 00 01 00 +T 0C 02 00 00 21 00 00 E5 21 00 00 E5 21 00 00 +R 00 00 01 00 +T 17 02 00 00 E5 21 06 00 39 4D 44 DD 5E 02 DD +R 00 00 01 00 +T 22 02 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 3E 00 +T 27 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 3E 00 02 09 05 00 +T 2E 02 00 00 F1 18 AE +R 00 00 01 00 +T 31 02 00 00 +R 00 00 01 00 +T 31 02 00 00 +R 00 00 01 00 +T 31 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 4A 00 02 0B 4A 00 +T 37 02 00 00 E5 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 40 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 45 02 00 00 00 00 00 00 E1 E1 E1 DD 5E 02 DD +R 00 00 01 00 02 04 05 00 +T 4E 02 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2F 00 +T 53 02 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 2F 00 02 09 05 00 +T 59 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 15 00 +T 5B 02 00 00 +R 00 00 01 00 +T 5B 02 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 32 00 +T 64 02 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 6F 02 00 00 30 0A +R 00 00 01 00 +T 71 02 00 00 +R 00 00 01 00 +T 71 02 00 00 DD 36 FE 07 DD 36 FF 00 18 19 +R 00 00 01 00 +T 7B 02 00 00 +R 00 00 01 00 +T 7B 02 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 86 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 36 00 02 0A 36 00 +T 8C 02 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 05 00 +T 94 02 00 00 +R 00 00 01 00 +T 94 02 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 34 00 +T 9C 02 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 34 00 02 0A 05 00 +T A3 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 15 00 +T A5 02 00 00 +R 00 00 01 00 +T A5 02 00 00 CD 00 00 00 00 D2 FF 2A +R 00 00 01 00 02 05 32 00 +T AB 02 00 00 02 00 00 00 7D A4 3C 28 06 +R 00 00 01 00 00 04 04 00 +T B2 02 00 00 +R 00 00 01 00 +T B2 02 00 00 21 00 00 C3 C1 04 00 00 +R 00 00 01 00 00 08 01 00 +T B8 02 00 00 +R 00 00 01 00 +T B8 02 00 00 01 00 00 ED 5B 00 00 00 00 3E +R 00 00 01 00 02 09 23 00 +T C0 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 31 00 02 09 31 00 +T C5 02 00 00 00 00 00 00 01 1C 00 00 00 ED 5B +R 00 00 01 00 02 04 05 00 00 09 02 00 +T CC 02 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 23 00 2B 09 35 00 +T D1 02 00 00 00 00 00 00 CD 00 00 00 00 AF DD +R 00 00 01 00 02 04 35 00 02 09 05 00 +T D8 02 00 00 77 D2 DD 77 D3 AF DD 77 D6 DD 77 +R 00 00 01 00 +T E3 02 00 00 D7 DD 77 D8 DD 77 D9 01 02 80 DD +R 00 00 01 00 +T EE 02 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 42 +R 00 00 01 00 +T F9 02 00 00 30 0A +R 00 00 01 00 +T FB 02 00 00 +R 00 00 01 00 +T FB 02 00 00 DD 36 D4 D2 DD 36 D5 04 18 19 +R 00 00 01 00 +T 05 03 00 00 +R 00 00 01 00 +T 05 03 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 10 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 36 00 02 0A 36 00 +T 16 03 00 00 00 00 00 00 DD 75 D4 DD 74 D5 +R 00 00 01 00 02 04 05 00 +T 1E 03 00 00 +R 00 00 01 00 +T 1E 03 00 00 21 00 00 E5 01 01 00 11 00 00 3E +R 00 00 01 00 +T 29 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 2E 03 00 00 00 00 00 00 F1 22 02 00 00 00 01 +R 00 00 01 00 02 04 05 00 00 0A 04 00 +T 35 03 00 00 10 00 C5 21 02 00 39 4D 44 ED 5B +R 00 00 01 00 +T 40 03 00 00 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 21 00 +T 45 03 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 21 00 02 09 05 00 +T 4B 03 00 00 +R 00 00 01 00 +T 4B 03 00 00 DD 36 F2 10 DD 36 F3 00 21 20 00 +R 00 00 01 00 +T 56 03 00 00 39 E5 21 12 00 39 E5 21 00 00 E5 +R 00 00 01 00 +T 61 03 00 00 21 2A 00 39 4D 44 ED 5B +R 00 00 01 00 +T 69 03 00 00 02 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 44 00 +T 6E 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 44 00 02 09 05 00 +T 75 03 00 00 F1 7D A4 3C 20 03 +R 00 00 01 00 +T 7B 03 00 00 +R 00 00 01 00 +T 7B 03 00 00 C3 AC 04 00 00 +R 00 00 01 00 00 05 01 00 +T 7E 03 00 00 +R 00 00 01 00 +T 7E 03 00 00 21 24 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3F 00 +T 86 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 3F 00 02 0A 05 00 +T 8D 03 00 00 75 F4 DD 74 F5 4D 44 3E 02 A9 B0 +R 00 00 01 00 +T 98 03 00 00 20 61 +R 00 00 01 00 +T 9A 03 00 00 +R 00 00 01 00 +T 9A 03 00 00 DD 5E F6 DD 56 F7 CD C4 04 00 00 +R 00 00 01 00 00 0B 01 00 +T A3 03 00 00 DD 75 F2 DD 74 F3 7D B4 20 05 21 +R 00 00 01 00 +T AE 03 00 00 2C 00 00 00 18 03 +R 00 00 01 00 00 04 02 00 +T B2 03 00 00 +R 00 00 01 00 +T B2 03 00 00 21 00 00 00 00 +R 00 00 01 00 00 05 02 00 +T B5 03 00 00 +R 00 00 01 00 +T B5 03 00 00 E5 21 12 00 39 5D 54 3E +R 00 00 01 00 +T BD 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 45 00 02 09 45 00 +T C2 03 00 00 00 00 00 00 E5 0E 00 00 00 00 C5 +R 00 00 01 00 02 04 05 00 2B 0A 4C 00 +T C8 03 00 00 21 00 00 00 00 E5 2A 02 00 00 00 +R 00 00 01 00 02 05 4C 00 00 0B 04 00 +T CF 03 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T D5 03 00 00 CD 00 00 00 00 E1 E1 E1 E1 E1 DD +R 00 00 01 00 02 05 05 00 +T DE 03 00 00 7E F2 DD B6 F3 28 13 +R 00 00 01 00 +T E5 03 00 00 +R 00 00 01 00 +T E5 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 22 00 02 0A 22 00 +T EB 03 00 00 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 04 05 00 +T F1 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 46 00 02 09 46 00 +T F6 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 +T F8 03 00 00 +R 00 00 01 00 +T F8 03 00 00 C3 9B 04 00 00 +R 00 00 01 00 00 05 01 00 +T FB 03 00 00 +R 00 00 01 00 +T FB 03 00 00 3E 03 A9 B0 C2 9B 04 00 00 DD 5E +R 00 00 01 00 00 09 01 00 +T 04 04 00 00 F6 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 0B 04 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 11 00 02 09 05 00 +T 11 04 00 00 04 00 A7 ED 42 38 1C +R 00 00 01 00 +T 18 04 00 00 +R 00 00 01 00 +T 18 04 00 00 21 24 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2A 00 +T 20 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 2A 00 02 0A 05 00 +T 27 04 00 00 75 F8 DD 74 F9 DD 71 FA DD 70 FB +R 00 00 01 00 +T 32 04 00 00 18 18 +R 00 00 01 00 +T 34 04 00 00 +R 00 00 01 00 +T 34 04 00 00 21 14 00 39 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 3F 04 00 00 EB DD 75 F8 DD 74 F9 DD 71 FA DD +R 00 00 01 00 +T 4A 04 00 00 70 FB +R 00 00 01 00 +T 4C 04 00 00 +R 00 00 01 00 +T 4C 04 00 00 AF DD 77 F2 DD 77 F3 +R 00 00 01 00 +T 53 04 00 00 +R 00 00 01 00 +T 53 04 00 00 01 03 00 DD 5E F2 DD 56 F3 CD +R 00 00 01 00 +T 5D 04 00 00 00 00 00 00 21 00 00 00 00 19 5E +R 00 00 01 00 02 04 33 00 02 09 51 00 +T 64 04 00 00 23 56 23 46 EB DD 75 FC DD 74 FD +R 00 00 01 00 +T 6F 04 00 00 DD 70 FE 7D B4 B0 28 22 +R 00 00 01 00 +T 77 04 00 00 +R 00 00 01 00 +T 77 04 00 00 DD 4E FA DD 46 FB DD 5E F8 DD 56 +R 00 00 01 00 +T 82 04 00 00 F9 DD 7E FE DD 6E FC DD 66 FD CD +R 00 00 01 00 +T 8D 04 00 00 00 00 00 00 DD 34 F2 20 03 DD 34 +R 00 00 01 00 02 04 05 00 +T 96 04 00 00 F3 +R 00 00 01 00 +T 97 04 00 00 +R 00 00 01 00 +T 97 04 00 00 18 BA +R 00 00 01 00 +T 99 04 00 00 +R 00 00 01 00 +T 99 04 00 00 18 00 +R 00 00 01 00 +T 9B 04 00 00 +R 00 00 01 00 +T 9B 04 00 00 21 24 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3A 00 +T A3 04 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 3A 00 02 0A 05 00 +T AA 04 00 00 4B 03 00 00 +R 00 00 01 00 00 04 01 00 +T AC 04 00 00 +R 00 00 01 00 +T AC 04 00 00 ED 5B 02 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 04 00 2B 0B 2F 00 +T B2 04 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 2F 00 02 0A 05 00 +T B9 04 00 00 FF FF 22 02 00 00 00 21 00 00 +R 00 00 01 00 00 07 04 00 +T C1 04 00 00 +R 00 00 01 00 +T C1 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 15 00 +T C4 04 00 00 +R 00 00 01 00 +T C4 04 00 00 CD 00 00 00 00 FA FF AF DD 77 FE +R 00 00 01 00 02 05 32 00 +T CD 04 00 00 DD 77 FF DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T D7 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T DC 04 00 00 00 00 00 00 DD 75 FC DD 74 FD E5 +R 00 00 01 00 02 04 05 00 +T E5 04 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 04 00 2B 0B 19 00 +T EB 04 00 00 21 00 00 00 00 CD 00 00 00 00 4D +R 00 00 01 00 02 05 19 00 02 0A 05 00 +T F2 04 00 00 44 E1 A7 ED 42 28 08 +R 00 00 01 00 +T F9 04 00 00 +R 00 00 01 00 +T F9 04 00 00 DD 6E FE DD 66 FF 18 66 +R 00 00 01 00 +T 01 05 00 00 +R 00 00 01 00 +T 01 05 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 38 00 +T 09 05 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 38 00 02 0A 05 00 +T 10 05 00 00 75 FA DD 74 FB DD 4E FC DD 46 FD +R 00 00 01 00 +T 1B 05 00 00 C5 4D 44 21 0A 00 39 5D 54 3E +R 00 00 01 00 +T 25 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 29 00 02 09 29 00 +T 2A 05 00 00 00 00 00 00 F1 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 05 00 +T 33 05 00 00 E5 DD 4E FA DD 46 FB ED 5B +R 00 00 01 00 +T 3C 05 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 06 00 +T 41 05 00 00 00 00 00 00 CD 00 00 00 00 F1 7D +R 00 00 01 00 02 04 06 00 02 09 05 00 +T 48 05 00 00 B4 20 08 +R 00 00 01 00 +T 4B 05 00 00 +R 00 00 01 00 +T 4B 05 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 53 05 00 00 +R 00 00 01 00 +T 53 05 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2B 00 +T 5B 05 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 2B 00 02 0A 05 00 +T 62 05 00 00 6E FE DD 66 FF +R 00 00 01 00 +T 67 05 00 00 +R 00 00 01 00 +T 67 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1E 00 +T 6A 05 00 00 +R 00 00 01 00 +T 6A 05 00 00 CD 00 00 00 00 ED 5B 02 00 00 00 +R 00 00 01 00 02 05 2D 00 00 0B 04 00 +T 71 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2F 00 02 0A 2F 00 +T 77 05 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 05 00 +T 7D 05 00 00 00 00 00 00 +R 00 00 01 00 02 04 15 00 +T 7F 05 00 00 +R 00 00 01 00 +T 7F 05 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 32 00 +T 88 05 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 93 05 00 00 30 0A +R 00 00 01 00 +T 95 05 00 00 +R 00 00 01 00 +T 95 05 00 00 DD 36 FE 88 DD 36 FF 13 18 19 +R 00 00 01 00 +T 9F 05 00 00 +R 00 00 01 00 +T 9F 05 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T AA 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 36 00 02 0A 36 00 +T B0 05 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 05 00 +T B8 05 00 00 +R 00 00 01 00 +T B8 05 00 00 21 40 02 E5 0E DA 05 00 00 C5 21 +R 00 00 01 00 29 09 01 00 +T C0 05 00 00 DA 05 00 00 E5 01 3A 00 00 00 DD +R 00 00 01 00 00 04 01 00 00 0A 02 00 +T C7 05 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 16 00 +T CF 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 16 00 02 09 05 00 +T D6 05 00 00 F1 C3 00 00 00 00 +R 00 00 01 00 02 06 15 00 +T DA 05 00 00 +R 00 00 01 00 +T DA 05 00 00 CD 00 00 00 00 E2 FF AF DD 77 E2 +R 00 00 01 00 02 05 32 00 +T E3 05 00 00 DD 77 E3 AF DD 77 E6 DD 77 E7 AF +R 00 00 01 00 +T EE 05 00 00 DD 77 FC DD 77 FD ED 4B +R 00 00 01 00 +T F6 05 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 23 00 +T FF 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T 04 06 00 00 00 00 00 00 0E 00 00 00 00 C5 21 +R 00 00 01 00 02 04 05 00 2B 09 43 00 +T 0A 06 00 00 00 00 00 00 E5 DD 6E 02 DD 66 03 +R 00 00 01 00 02 04 43 00 +T 13 06 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 19 06 00 00 CD 00 00 00 00 E1 E1 E1 01 +R 00 00 01 00 02 05 05 00 +T 20 06 00 00 46 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 00 04 02 00 +T 29 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 47 00 02 09 47 00 +T 2E 06 00 00 00 00 00 00 DD 75 E2 DD 74 E3 7D +R 00 00 01 00 02 04 05 00 +T 37 06 00 00 B4 28 15 11 80 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 41 00 +T 3F 06 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 41 00 02 0A 05 00 +T 46 06 00 00 75 E6 DD 74 E7 7D B4 20 03 +R 00 00 01 00 +T 4F 06 00 00 +R 00 00 01 00 +T 4F 06 00 00 +R 00 00 01 00 +T 4F 06 00 00 +R 00 00 01 00 +T 4F 06 00 00 C3 E8 0A 00 00 +R 00 00 01 00 00 05 01 00 +T 52 06 00 00 +R 00 00 01 00 +T 52 06 00 00 21 04 00 ED 4B 00 00 00 00 09 7E +R 00 00 01 00 02 09 23 00 +T 5B 06 00 00 F6 08 77 23 7E F6 00 77 21 22 00 +R 00 00 01 00 +T 66 06 00 00 ED 4B 00 00 00 00 09 36 6B 23 36 +R 00 00 01 00 02 06 23 00 +T 6F 06 00 00 00 21 14 00 ED 4B 00 00 00 00 09 +R 00 00 01 00 02 0A 23 00 +T 78 06 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 13 00 02 0B 13 00 +T 7E 06 00 00 CD 00 00 00 00 7D B4 28 1C +R 00 00 01 00 02 05 05 00 +T 85 06 00 00 +R 00 00 01 00 +T 85 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 04 00 02 0B 04 00 +T 8B 06 00 00 E5 DD 6E E2 DD 66 E3 E5 3E +R 00 00 01 00 +T 94 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T 99 06 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 05 00 +T 9F 06 00 00 E8 0A 00 00 +R 00 00 01 00 00 04 01 00 +T A1 06 00 00 +R 00 00 01 00 +T A1 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 01 00 02 0B 01 00 +T A7 06 00 00 E5 DD 6E E2 DD 66 E3 E5 3E +R 00 00 01 00 +T B0 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T B5 06 00 00 00 00 00 00 F1 F1 F1 DD 6E E2 DD +R 00 00 01 00 02 04 05 00 +T BE 06 00 00 66 E3 E5 01 80 00 DD 5E E6 DD 56 +R 00 00 01 00 +T C9 06 00 00 E7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1D 00 02 0B 1D 00 +T CF 06 00 00 CD 00 00 00 00 F1 DD 5E E6 DD 56 +R 00 00 01 00 02 05 05 00 +T D8 06 00 00 E7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T DE 06 00 00 CD 00 00 00 00 ED 4B 00 00 00 00 +R 00 00 01 00 02 05 05 00 00 0B 04 00 +T E5 06 00 00 DD 5E E6 DD 56 E7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1C 00 +T ED 06 00 00 21 00 00 00 00 CD 00 00 00 00 7D +R 00 00 01 00 02 05 1C 00 02 0A 05 00 +T F4 06 00 00 B4 28 1C +R 00 00 01 00 +T F7 06 00 00 +R 00 00 01 00 +T F7 06 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 4D 00 02 0B 4D 00 +T FD 06 00 00 E5 DD 6E E2 DD 66 E3 E5 3E +R 00 00 01 00 +T 06 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T 0B 07 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 05 00 +T 11 07 00 00 E8 0A 00 00 +R 00 00 01 00 00 04 01 00 +T 13 07 00 00 +R 00 00 01 00 +T 13 07 00 00 +R 00 00 01 00 +T 13 07 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 30 00 02 0B 30 00 +T 19 07 00 00 E5 DD 6E E2 DD 66 E3 E5 3E +R 00 00 01 00 +T 22 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T 27 07 00 00 00 00 00 00 F1 F1 F1 DD 6E E2 DD +R 00 00 01 00 02 04 05 00 +T 30 07 00 00 66 E3 E5 01 80 00 DD 5E E6 DD 56 +R 00 00 01 00 +T 3B 07 00 00 E7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1D 00 02 0B 1D 00 +T 41 07 00 00 CD 00 00 00 00 F1 DD 5E E6 DD 56 +R 00 00 01 00 02 05 05 00 +T 4A 07 00 00 E7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 50 07 00 00 CD 00 00 00 00 DD 5E E6 DD 56 E7 +R 00 00 01 00 02 05 05 00 +T 59 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 5F 07 00 00 00 00 00 00 DD 75 E8 DD 74 E9 7D +R 00 00 01 00 02 04 05 00 +T 68 07 00 00 B4 20 23 +R 00 00 01 00 +T 6B 07 00 00 +R 00 00 01 00 +T 6B 07 00 00 DD 6E E6 DD 66 E7 E5 0E +R 00 00 01 00 +T 73 07 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 14 00 02 0A 14 00 +T 79 07 00 00 DD 6E E2 DD 66 E3 E5 3E +R 00 00 01 00 +T 81 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T 86 07 00 00 00 00 00 00 F1 F1 F1 F1 18 85 +R 00 00 01 00 02 04 05 00 +T 8E 07 00 00 +R 00 00 01 00 +T 8E 07 00 00 21 1C 00 39 E5 21 0C 00 39 4D 44 +R 00 00 01 00 +T 99 07 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T A1 07 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 0F 00 02 0A 05 00 +T A8 07 00 00 7D A4 3C 28 76 21 0E 00 39 5E 23 +R 00 00 01 00 +T B3 07 00 00 56 23 4E 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 20 00 +T BB 07 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 20 00 02 09 05 00 +T C2 07 00 00 20 5F 21 0E 00 39 5E 23 56 23 4E +R 00 00 01 00 +T CD 07 00 00 23 46 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 25 00 +T D2 07 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 25 00 02 09 05 00 +T D9 07 00 00 EA DD 74 EB 7D B4 28 42 21 12 00 +R 00 00 01 00 +T E4 07 00 00 DD 4E EA DD 46 EB 09 46 23 66 68 +R 00 00 01 00 +T EF 07 00 00 DD 4E E8 DD 46 E9 A7 ED 42 20 29 +R 00 00 01 00 +T FA 07 00 00 +R 00 00 01 00 +T FA 07 00 00 +R 00 00 01 00 +T FA 07 00 00 +R 00 00 01 00 +T FA 07 00 00 DD 6E E8 DD 66 E9 23 23 4E 23 46 +R 00 00 01 00 +T 05 08 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 50 00 +T 0A 08 00 00 00 00 00 00 E5 DD 6E E2 DD 66 E3 +R 00 00 01 00 02 04 50 00 +T 13 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1B 00 02 0B 1B 00 +T 19 08 00 00 CD 00 00 00 00 F1 F1 F1 F1 C3 +R 00 00 01 00 02 05 05 00 +T 21 08 00 00 13 07 00 00 +R 00 00 01 00 00 04 01 00 +T 23 08 00 00 +R 00 00 01 00 +T 23 08 00 00 01 49 00 00 00 DD 5E E6 DD 56 E7 +R 00 00 01 00 00 05 02 00 +T 2C 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 53 00 02 0A 53 00 +T 32 08 00 00 00 00 00 00 DD 75 E4 DD 74 E5 7D +R 00 00 01 00 02 04 05 00 +T 3B 08 00 00 B4 28 03 +R 00 00 01 00 +T 3E 08 00 00 +R 00 00 01 00 +T 3E 08 00 00 C3 C4 08 00 00 +R 00 00 01 00 00 05 01 00 +T 41 08 00 00 +R 00 00 01 00 +T 41 08 00 00 DD 6E E6 DD 66 E7 E5 0E +R 00 00 01 00 +T 49 08 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 4B 00 02 0A 4B 00 +T 4F 08 00 00 DD 6E E2 DD 66 E3 E5 3E +R 00 00 01 00 +T 57 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T 5C 08 00 00 00 00 00 00 F1 F1 F1 F1 0E +R 00 00 01 00 02 04 05 00 +T 63 08 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 18 00 02 0A 18 00 +T 69 08 00 00 DD 6E E2 DD 66 E3 E5 3E +R 00 00 01 00 +T 71 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T 76 08 00 00 00 00 00 00 F1 F1 F1 DD 6E E2 DD +R 00 00 01 00 02 04 05 00 +T 7F 08 00 00 66 E3 E5 01 80 00 DD 5E E6 DD 56 +R 00 00 01 00 +T 8A 08 00 00 E7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1D 00 02 0B 1D 00 +T 90 08 00 00 CD 00 00 00 00 F1 DD 6E E6 DD 66 +R 00 00 01 00 02 05 05 00 +T 99 08 00 00 E7 7E FE 79 28 0B DD 6E E6 DD 66 +R 00 00 01 00 +T A4 08 00 00 E7 7E FE 59 20 17 +R 00 00 01 00 +T AA 08 00 00 +R 00 00 01 00 +T AA 08 00 00 +R 00 00 01 00 +T AA 08 00 00 +R 00 00 01 00 +T AA 08 00 00 01 01 00 DD 5E E8 DD 56 E9 CD +R 00 00 01 00 +T B4 08 00 00 35 0C 00 00 11 00 00 3E +R 00 00 01 00 00 04 01 00 +T BA 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 26 00 02 09 26 00 +T BF 08 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 +T C1 08 00 00 +R 00 00 01 00 +T C1 08 00 00 C3 13 07 00 00 +R 00 00 01 00 00 05 01 00 +T C4 08 00 00 +R 00 00 01 00 +T C4 08 00 00 21 00 00 E5 21 03 00 E5 01 00 00 +R 00 00 01 00 +T CF 08 00 00 DD 5E E4 DD 56 E5 3E 00 00 00 00 +R 00 00 01 00 2B 0B 52 00 +T D7 08 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 52 00 02 0A 05 00 +T DE 08 00 00 F1 DD 5E E8 DD 56 E9 CD +R 00 00 01 00 +T E6 08 00 00 E6 0B 00 00 0E 00 00 00 00 C5 21 +R 00 00 01 00 00 04 01 00 2B 09 3D 00 +T EC 08 00 00 00 00 00 00 E5 DD 6E E2 DD 66 E3 +R 00 00 01 00 02 04 3D 00 +T F5 08 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1B 00 02 0B 1B 00 +T FB 08 00 00 CD 00 00 00 00 F1 F1 F1 DD 6E E2 +R 00 00 01 00 02 05 05 00 +T 04 09 00 00 DD 66 E3 E5 01 80 00 DD 5E E6 DD +R 00 00 01 00 +T 0F 09 00 00 56 E7 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1D 00 +T 14 09 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 1D 00 02 09 05 00 +T 1B 09 00 00 6E E6 DD 66 E7 7E FE 79 28 0B DD +R 00 00 01 00 +T 26 09 00 00 6E E6 DD 66 E7 7E FE 59 20 4E +R 00 00 01 00 +T 30 09 00 00 +R 00 00 01 00 +T 30 09 00 00 +R 00 00 01 00 +T 30 09 00 00 +R 00 00 01 00 +T 30 09 00 00 21 00 00 E5 21 00 00 E5 21 01 00 +R 00 00 01 00 +T 3B 09 00 00 E5 01 08 00 DD 5E E8 DD 56 E9 3E +R 00 00 01 00 +T 46 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 4B 09 00 00 00 00 00 00 F1 F1 F1 01 00 00 11 +R 00 00 01 00 02 04 05 00 +T 54 09 00 00 E8 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 10 00 +T 59 09 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 10 00 02 09 05 00 +T 5F 09 00 00 00 00 E5 21 01 00 E5 21 01 00 E5 +R 00 00 01 00 +T 6A 09 00 00 01 08 00 DD 5E E8 DD 56 E9 3E +R 00 00 01 00 +T 74 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 79 09 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 05 00 +T 7E 09 00 00 +R 00 00 01 00 +T 7E 09 00 00 01 00 00 DD 5E E2 DD 56 E3 3E +R 00 00 01 00 +T 88 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 8D 09 00 00 00 00 00 00 21 00 00 E5 21 03 00 +R 00 00 01 00 02 04 05 00 +T 96 09 00 00 E5 01 00 00 DD 5E E2 DD 56 E3 3E +R 00 00 01 00 +T A1 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 52 00 02 09 52 00 +T A6 09 00 00 00 00 00 00 F1 F1 0E 00 00 00 00 +R 00 00 01 00 02 04 05 00 2B 0B 17 00 +T AC 09 00 00 C5 21 00 00 00 00 E5 DD 6E E2 DD +R 00 00 01 00 02 06 17 00 +T B5 09 00 00 66 E3 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 1B 00 +T BB 09 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1B 00 02 09 05 00 +T C2 09 00 00 F1 DD 6E E2 DD 66 E3 E5 01 80 00 +R 00 00 01 00 +T CD 09 00 00 DD 5E E6 DD 56 E7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T D5 09 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 1D 00 02 0A 05 00 +T DC 09 00 00 DD 6E E6 DD 66 E7 7E FE 79 28 0B +R 00 00 01 00 +T E7 09 00 00 DD 6E E6 DD 66 E7 7E FE 59 20 59 +R 00 00 01 00 +T F2 09 00 00 +R 00 00 01 00 +T F2 09 00 00 +R 00 00 01 00 +T F2 09 00 00 +R 00 00 01 00 +T F2 09 00 00 21 01 00 E5 21 FB 00 E5 21 FF 00 +R 00 00 01 00 +T FD 09 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 4E 00 +T 02 0A 00 00 00 00 00 00 E5 DD 6E E2 DD 66 E3 +R 00 00 01 00 02 04 4E 00 +T 0B 0A 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1B 00 02 0B 1B 00 +T 11 0A 00 00 CD 00 00 00 00 EB 21 0C 00 39 F9 +R 00 00 01 00 02 05 05 00 +T 1A 0A 00 00 EB AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 22 0A 00 00 +R 00 00 01 00 +T 22 0A 00 00 01 03 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 2D 0A 00 00 AC 67 ED 42 30 18 +R 00 00 01 00 +T 33 0A 00 00 +R 00 00 01 00 +T 33 0A 00 00 DD 5E E2 DD 56 E3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 3B 0A 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0B 00 02 0A 05 00 +T 42 0A 00 00 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 49 0A 00 00 +R 00 00 01 00 +T 49 0A 00 00 18 D7 +R 00 00 01 00 +T 4B 0A 00 00 +R 00 00 01 00 +T 4B 0A 00 00 +R 00 00 01 00 +T 4B 0A 00 00 21 00 00 E5 DD 6E E4 DD 66 E5 E5 +R 00 00 01 00 +T 56 0A 00 00 DD 6E E2 DD 66 E3 E5 DD 6E 02 DD +R 00 00 01 00 +T 61 0A 00 00 66 03 E5 0E 56 0B 00 00 C5 21 +R 00 00 01 00 29 08 01 00 +T 68 0A 00 00 56 0B 00 00 E5 01 DC 05 11 +R 00 00 01 00 00 04 01 00 +T 6F 0A 00 00 4D 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 4F 00 +T 74 0A 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 4F 00 02 09 05 00 +T 7B 0A 00 00 0C 00 39 F9 EB DD 75 FC DD 74 FD +R 00 00 01 00 +T 86 0A 00 00 01 01 00 DD 5E E2 DD 56 E3 3E +R 00 00 01 00 +T 90 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 3B 00 02 09 3B 00 +T 95 0A 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 +T 97 0A 00 00 +R 00 00 01 00 +T 97 0A 00 00 DD 6E E2 DD 66 E3 E5 21 80 00 E5 +R 00 00 01 00 +T A2 0A 00 00 01 01 00 DD 5E E6 DD 56 E7 3E +R 00 00 01 00 +T AC 0A 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T B1 0A 00 00 00 00 00 00 F1 F1 DD 75 FE DD 74 +R 00 00 01 00 02 04 05 00 +T BA 0A 00 00 FF 4D 44 21 00 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 39 00 +T C3 0A 00 00 30 23 +R 00 00 01 00 +T C5 0A 00 00 +R 00 00 01 00 +T C5 0A 00 00 DD 6E E4 DD 66 E5 E5 DD 6E FE DD +R 00 00 01 00 +T D0 0A 00 00 66 FF E5 01 01 00 DD 5E E6 DD 56 +R 00 00 01 00 +T DB 0A 00 00 E7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T E1 0A 00 00 CD 00 00 00 00 F1 F1 18 AF +R 00 00 01 00 02 05 05 00 +T E8 0A 00 00 +R 00 00 01 00 +T E8 0A 00 00 +R 00 00 01 00 +T E8 0A 00 00 DD 5E E2 DD 56 E3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 48 00 +T F0 0A 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 48 00 02 0A 05 00 +T F7 0A 00 00 5E E4 DD 56 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 48 00 +T FF 0A 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 48 00 02 09 05 00 +T 06 0B 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 27 00 +T 0D 0B 00 00 00 00 00 00 CD 00 00 00 00 0E +R 00 00 01 00 02 04 27 00 02 09 05 00 +T 13 0B 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 49 00 02 0A 49 00 +T 19 0B 00 00 DD 6E 02 DD 66 03 E5 3E +R 00 00 01 00 +T 21 0B 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 26 0B 00 00 00 00 00 00 E1 E1 E1 DD 5E E6 DD +R 00 00 01 00 02 04 05 00 +T 2F 0B 00 00 56 E7 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 2B 00 +T 34 0B 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 2B 00 02 09 05 00 +T 3B 0B 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 2F 00 +T 42 0B 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 2F 00 02 09 05 00 +T 48 0B 00 00 00 00 DD 5E E8 DD 56 E9 CD +R 00 00 01 00 +T 51 0B 00 00 35 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 00 04 01 00 02 09 15 00 +T 56 0B 00 00 +R 00 00 01 00 +T 56 0B 00 00 CD 00 00 00 00 7A FF 21 02 00 39 +R 00 00 01 00 02 05 32 00 +T 5F 0B 00 00 71 23 70 21 04 00 39 DD 4E 0A DD +R 00 00 01 00 +T 6A 0B 00 00 46 0B 71 23 70 01 01 00 21 04 00 +R 00 00 01 00 +T 75 0B 00 00 39 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 3B 00 +T 7C 0B 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 3B 00 02 09 05 00 +T 81 0B 00 00 +R 00 00 01 00 +T 81 0B 00 00 21 00 00 39 E5 21 06 00 39 4E 23 +R 00 00 01 00 +T 8C 0B 00 00 46 C5 21 80 00 E5 01 01 00 21 +R 00 00 01 00 +T 96 0B 00 00 0C 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 9E 0B 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 05 00 +T A5 0B 00 00 4D 44 E1 71 23 70 21 00 00 CD +R 00 00 01 00 +T AF 0B 00 00 00 00 00 00 30 30 +R 00 00 01 00 02 04 39 00 +T B3 0B 00 00 +R 00 00 01 00 +T B3 0B 00 00 21 02 00 39 4E 23 46 C5 21 02 00 +R 00 00 01 00 +T BE 0B 00 00 39 4E 23 46 C5 01 01 00 21 0A 00 +R 00 00 01 00 +T C9 0B 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 12 00 +T CF 0B 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 12 00 02 09 05 00 +T D6 0B 00 00 11 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 26 00 +T DC 0B 00 00 00 00 00 00 CD 00 00 00 00 18 9E +R 00 00 01 00 02 04 26 00 02 09 05 00 +T E3 0B 00 00 +R 00 00 01 00 +T E3 0B 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 15 00 +T E6 0B 00 00 +R 00 00 01 00 +T E6 0B 00 00 CD 00 00 00 00 FE FF 01 06 00 11 +R 00 00 01 00 02 05 32 00 +T EF 0B 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 37 00 +T F4 0B 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 37 00 02 09 05 00 +T FB 0B 00 00 FE DD 74 FF 01 04 00 09 DD 4E 02 +R 00 00 01 00 +T 06 0C 00 00 DD 46 03 71 23 70 DD 6E FE DD 66 +R 00 00 01 00 +T 11 0C 00 00 FF 23 23 ED 4B 00 00 00 00 71 23 +R 00 00 01 00 02 09 23 00 +T 1A 0C 00 00 70 2A 00 00 00 00 E5 DD 6E FE DD +R 00 00 01 00 00 06 03 00 +T 23 0C 00 00 66 FF C1 71 23 70 DD 6E FE DD 66 +R 00 00 01 00 +T 2E 0C 00 00 FF 22 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 1E 00 +T 35 0C 00 00 +R 00 00 01 00 +T 35 0C 00 00 CD 00 00 00 00 FC FF AF DD 77 FE +R 00 00 01 00 02 05 32 00 +T 3E 0C 00 00 DD 77 FF 2A 00 00 00 00 DD 75 FC +R 00 00 01 00 00 08 03 00 +T 47 0C 00 00 DD 74 FD +R 00 00 01 00 +T 4A 0C 00 00 +R 00 00 01 00 +T 4A 0C 00 00 DD 7E FC DD B6 FD 28 39 +R 00 00 01 00 +T 52 0C 00 00 +R 00 00 01 00 +T 52 0C 00 00 21 04 00 DD 4E FC DD 46 FD 09 46 +R 00 00 01 00 +T 5D 0C 00 00 23 66 68 DD 4E 02 DD 46 03 A7 ED +R 00 00 01 00 +T 68 0C 00 00 42 20 02 +R 00 00 01 00 +T 6B 0C 00 00 +R 00 00 01 00 +T 6B 0C 00 00 18 1E +R 00 00 01 00 +T 6D 0C 00 00 +R 00 00 01 00 +T 6D 0C 00 00 DD 6E FC DD 66 FD DD 75 FE DD 74 +R 00 00 01 00 +T 78 0C 00 00 FF DD 6E FC DD 66 FD 46 23 66 68 +R 00 00 01 00 +T 83 0C 00 00 DD 75 FC DD 74 FD 18 BF +R 00 00 01 00 +T 8B 0C 00 00 +R 00 00 01 00 +T 8B 0C 00 00 DD 7E FC DD B6 FD 20 02 +R 00 00 01 00 +T 93 0C 00 00 +R 00 00 01 00 +T 93 0C 00 00 18 58 +R 00 00 01 00 +T 95 0C 00 00 +R 00 00 01 00 +T 95 0C 00 00 DD 7E 04 DD B6 05 28 16 +R 00 00 01 00 +T 9D 0C 00 00 +R 00 00 01 00 +T 9D 0C 00 00 01 6B 00 DD 6E FC DD 66 FD 23 23 +R 00 00 01 00 +T A8 0C 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 1A 00 +T AE 0C 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 1A 00 02 09 05 00 +T B3 0C 00 00 +R 00 00 01 00 +T B3 0C 00 00 DD 7E FE DD B6 FF 20 0F +R 00 00 01 00 +T BB 0C 00 00 +R 00 00 01 00 +T BB 0C 00 00 DD 6E FC DD 66 FD 46 23 66 68 22 +R 00 00 01 00 +T C6 0C 00 00 00 00 00 00 18 15 +R 00 00 01 00 00 04 03 00 +T CA 0C 00 00 +R 00 00 01 00 +T CA 0C 00 00 DD 6E FC DD 66 FD 46 23 66 68 E5 +R 00 00 01 00 +T D5 0C 00 00 DD 6E FE DD 66 FF C1 71 23 70 +R 00 00 01 00 +T DF 0C 00 00 +R 00 00 01 00 +T DF 0C 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 2B 00 +T E7 0C 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 2B 00 02 0A 05 00 +T ED 0C 00 00 +R 00 00 01 00 +T ED 0C 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 1E 00 +T F0 0C 00 00 +R 00 00 01 00 +T F0 0C 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 32 00 +T F9 0C 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 04 0D 00 00 30 0A +R 00 00 01 00 +T 06 0D 00 00 +R 00 00 01 00 +T 06 0D 00 00 DD 36 FE 88 DD 36 FF 13 18 19 +R 00 00 01 00 +T 10 0D 00 00 +R 00 00 01 00 +T 10 0D 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 1B 0D 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 36 00 02 0A 36 00 +T 21 0D 00 00 00 00 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 02 04 05 00 +T 29 0D 00 00 +R 00 00 01 00 +T 29 0D 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 34 00 +T 31 0D 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 34 00 02 0A 05 00 +T 38 0D 00 00 00 00 00 00 +R 00 00 01 00 02 04 15 00 +T 3A 0D 00 00 +R 00 00 01 00 +T 3A 0D 00 00 CD 00 00 00 00 D4 FF 2A +R 00 00 01 00 02 05 32 00 +T 40 0D 00 00 04 00 00 00 7D A4 3C 28 06 +R 00 00 01 00 00 04 04 00 +T 47 0D 00 00 +R 00 00 01 00 +T 47 0D 00 00 21 01 00 C3 C0 0F 00 00 +R 00 00 01 00 00 08 01 00 +T 4D 0D 00 00 +R 00 00 01 00 +T 4D 0D 00 00 01 00 00 ED 5B 00 00 00 00 3E +R 00 00 01 00 02 09 23 00 +T 55 0D 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 31 00 02 09 31 00 +T 5A 0D 00 00 00 00 00 00 01 55 00 00 00 ED 5B +R 00 00 01 00 02 04 05 00 00 09 02 00 +T 61 0D 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 23 00 2B 09 35 00 +T 66 0D 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 35 00 02 09 05 00 +T 6C 0D 00 00 49 00 00 00 DD 6E 04 DD 66 05 23 +R 00 00 01 00 00 04 02 00 +T 75 0D 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 53 00 +T 7C 0D 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 53 00 02 09 05 00 +T 83 0D 00 00 FE DD 74 FF 7D B4 20 24 +R 00 00 01 00 +T 8B 0D 00 00 +R 00 00 01 00 +T 8B 0D 00 00 DD 6E 04 DD 66 05 23 23 4E 23 46 +R 00 00 01 00 +T 96 0D 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 4B 00 +T 9B 0D 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 4B 00 2B 0A 3C 00 +T A1 0D 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 3C 00 02 09 05 00 +T A8 0D 00 00 F1 21 01 00 C3 C0 0F 00 00 +R 00 00 01 00 00 09 01 00 +T AF 0D 00 00 +R 00 00 01 00 +T AF 0D 00 00 AF DD 77 D4 DD 77 D5 AF DD 77 D8 +R 00 00 01 00 +T BA 0D 00 00 DD 77 D9 DD 77 DA DD 77 DB 01 +R 00 00 01 00 +T C4 0D 00 00 03 80 DD 6E 02 DD 66 03 3E 80 AC +R 00 00 01 00 +T CF 0D 00 00 67 ED 42 30 0A +R 00 00 01 00 +T D4 0D 00 00 +R 00 00 01 00 +T D4 0D 00 00 DD 36 D6 88 DD 36 D7 13 18 1B +R 00 00 01 00 +T DE 0D 00 00 +R 00 00 01 00 +T DE 0D 00 00 21 04 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T E9 0D 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 36 00 +T EE 0D 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 36 00 02 09 05 00 +T F5 0D 00 00 D6 DD 74 D7 +R 00 00 01 00 +T F9 0D 00 00 +R 00 00 01 00 +T F9 0D 00 00 21 00 00 E5 01 01 00 11 00 00 3E +R 00 00 01 00 +T 04 0E 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 09 0E 00 00 00 00 00 00 F1 22 04 00 00 00 01 +R 00 00 01 00 02 04 05 00 00 0A 04 00 +T 10 0E 00 00 10 00 C5 21 02 00 39 4D 44 ED 5B +R 00 00 01 00 +T 1B 0E 00 00 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 21 00 +T 20 0E 00 00 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 04 21 00 02 09 05 00 +T 26 0E 00 00 +R 00 00 01 00 +T 26 0E 00 00 DD 36 F4 10 DD 36 F5 00 21 20 00 +R 00 00 01 00 +T 31 0E 00 00 39 E5 21 12 00 39 E5 21 00 00 E5 +R 00 00 01 00 +T 3C 0E 00 00 21 2A 00 39 4D 44 ED 5B +R 00 00 01 00 +T 44 0E 00 00 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 44 00 +T 49 0E 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 44 00 02 09 05 00 +T 50 0E 00 00 F1 7D A4 3C 20 03 +R 00 00 01 00 +T 56 0E 00 00 +R 00 00 01 00 +T 56 0E 00 00 C3 9D 0F 00 00 +R 00 00 01 00 00 05 01 00 +T 59 0E 00 00 +R 00 00 01 00 +T 59 0E 00 00 2A 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 00 05 04 00 +T 62 0E 00 00 +R 00 00 01 00 +T 62 0E 00 00 21 24 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3F 00 +T 6A 0E 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 3F 00 02 0A 05 00 +T 71 0E 00 00 75 F6 DD 74 F7 7D A4 3C 28 14 DD +R 00 00 01 00 +T 7C 0E 00 00 6E FA DD 66 FB 4E 06 00 DD 6E F6 +R 00 00 01 00 +T 87 0E 00 00 DD 66 F7 A7 ED 42 28 03 +R 00 00 01 00 +T 8F 0E 00 00 +R 00 00 01 00 +T 8F 0E 00 00 +R 00 00 01 00 +T 8F 0E 00 00 +R 00 00 01 00 +T 8F 0E 00 00 C3 8C 0F 00 00 +R 00 00 01 00 00 05 01 00 +T 92 0E 00 00 +R 00 00 01 00 +T 92 0E 00 00 DD 6E FA DD 66 FB AF B6 20 02 +R 00 00 01 00 +T 9C 0E 00 00 +R 00 00 01 00 +T 9C 0E 00 00 18 0A +R 00 00 01 00 +T 9E 0E 00 00 +R 00 00 01 00 +T 9E 0E 00 00 DD 34 FA 20 03 DD 34 FB +R 00 00 01 00 +T A6 0E 00 00 +R 00 00 01 00 +T A6 0E 00 00 18 BA +R 00 00 01 00 +T A8 0E 00 00 +R 00 00 01 00 +T A8 0E 00 00 +R 00 00 01 00 +T A8 0E 00 00 21 24 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3F 00 +T B0 0E 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 3F 00 02 0A 05 00 +T B7 0E 00 00 75 F6 DD 74 F7 7D A4 3C 28 16 +R 00 00 01 00 +T C1 0E 00 00 +R 00 00 01 00 +T C1 0E 00 00 DD 4E FE DD 46 FF DD 5E F6 DD 56 +R 00 00 01 00 +T CC 0E 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 2C 00 02 0B 2C 00 +T D2 0E 00 00 CD 00 00 00 00 18 D1 +R 00 00 01 00 02 05 05 00 +T D7 0E 00 00 +R 00 00 01 00 +T D7 0E 00 00 21 24 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3A 00 +T DF 0E 00 00 21 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 05 3A 00 02 0A 05 00 +T E6 0E 00 00 00 02 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T EB 0E 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 05 00 +T F2 0E 00 00 F8 DD 74 F9 01 0A 00 09 46 23 66 +R 00 00 01 00 +T FD 0E 00 00 68 DD 75 FC DD 74 FD 01 00 00 11 +R 00 00 01 00 +T 08 0F 00 00 F4 01 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 42 00 +T 0D 0F 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 42 00 02 09 05 00 +T 12 0F 00 00 +R 00 00 01 00 +T 12 0F 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 1A 0F 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 0B 00 02 0A 05 00 +T 21 0F 00 00 75 F6 DD 74 F7 7D A4 3C 28 31 +R 00 00 01 00 +T 2B 0F 00 00 +R 00 00 01 00 +T 2B 0F 00 00 01 00 00 11 64 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 42 00 +T 33 0F 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 42 00 02 0A 05 00 +T 3A 0F 00 00 46 F6 DD 6E FC DD 66 FD 23 DD 75 +R 00 00 01 00 +T 45 0F 00 00 FC DD 74 FD 2B 70 21 0C 00 DD 4E +R 00 00 01 00 +T 50 0F 00 00 F8 DD 46 F9 09 34 23 20 01 34 +R 00 00 01 00 +T 5A 0F 00 00 +R 00 00 01 00 +T 5A 0F 00 00 18 B6 +R 00 00 01 00 +T 5C 0F 00 00 +R 00 00 01 00 +T 5C 0F 00 00 01 00 00 11 00 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 42 00 +T 64 0F 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 42 00 02 0A 05 00 +T 6B 0F 00 00 10 00 E5 21 12 00 39 E5 21 00 00 +R 00 00 01 00 +T 76 0F 00 00 E5 21 2A 00 39 4D 44 ED 5B +R 00 00 01 00 +T 7F 0F 00 00 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 04 00 2B 09 3E 00 +T 84 0F 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 3E 00 02 09 05 00 +T 8B 0F 00 00 F1 +R 00 00 01 00 +T 8C 0F 00 00 +R 00 00 01 00 +T 8C 0F 00 00 21 24 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 3A 00 +T 94 0F 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 3A 00 02 0A 05 00 +T 9B 0F 00 00 26 0E 00 00 +R 00 00 01 00 00 04 01 00 +T 9D 0F 00 00 +R 00 00 01 00 +T 9D 0F 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 48 00 +T A5 0F 00 00 21 00 00 00 00 CD 00 00 00 00 ED +R 00 00 01 00 02 05 48 00 02 0A 05 00 +T AC 0F 00 00 5B 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 04 00 2B 0A 2F 00 +T B2 0F 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 2F 00 02 09 05 00 +T B8 0F 00 00 FF FF 22 04 00 00 00 21 00 00 +R 00 00 01 00 00 07 04 00 +T C0 0F 00 00 +R 00 00 01 00 +T C0 0F 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 15 00 +T C3 0F 00 00 +R 00 00 01 00 +T C3 0F 00 00 CD 00 00 00 00 ED 5B 04 00 00 00 +R 00 00 01 00 02 05 2D 00 00 0B 04 00 +T CA 0F 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 2F 00 02 0A 2F 00 +T D0 0F 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 05 00 +T D6 0F 00 00 00 00 00 00 +R 00 00 01 00 02 04 15 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 02 00 +T 01 00 00 00 +R 00 00 02 00 +T 01 00 00 00 44 69 73 63 61 72 64 20 53 65 72 +R 00 00 02 00 +T 0C 00 00 00 76 65 72 00 +R 00 00 02 00 +T 10 00 00 00 +R 00 00 02 00 +T 10 00 00 00 45 63 68 6F 20 53 65 72 76 65 72 +R 00 00 02 00 +T 1B 00 00 00 00 +R 00 00 02 00 +T 1C 00 00 00 +R 00 00 02 00 +T 1C 00 00 00 52 65 6D 6F 74 65 20 6C 69 73 74 +R 00 00 02 00 +T 27 00 00 00 65 6E 65 72 00 +R 00 00 02 00 +T 2C 00 00 00 +R 00 00 02 00 +T 2C 00 00 00 50 41 53 53 57 4F 52 44 20 46 41 +R 00 00 02 00 +T 37 00 00 00 49 4C 00 +R 00 00 02 00 +T 3A 00 00 00 +R 00 00 02 00 +T 3A 00 00 00 54 65 72 6D 20 53 65 72 76 65 72 +R 00 00 02 00 +T 45 00 00 00 00 +R 00 00 02 00 +T 46 00 00 00 +R 00 00 02 00 +T 46 00 00 00 72 2B 00 +R 00 00 02 00 +T 49 00 00 00 +R 00 00 02 00 +T 49 00 00 00 72 2B 62 00 +R 00 00 02 00 +T 4D 00 00 00 +R 00 00 02 00 +T 4D 00 00 00 74 65 72 6D 20 72 78 00 +R 00 00 02 00 +T 55 00 00 00 +R 00 00 02 00 +T 55 00 00 00 42 53 52 20 6C 69 73 74 65 6E 65 +R 00 00 02 00 +T 60 00 00 00 72 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 02 00 00 00 +R 00 00 04 00 +T 04 00 00 00 +R 00 00 04 00 +T 04 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 00 00 00 FF FF FF FF +R 00 00 05 00 00 04 02 00 diff --git a/src/nos/lib/servers_lib/ttylink.rel b/src/nos/lib/servers_lib/ttylink.rel new file mode 100644 index 00000000..99960155 --- /dev/null +++ b/src/nos/lib/servers_lib/ttylink.rel @@ -0,0 +1,373 @@ +XL4 +H 5 areas 28 global symbols +S ___03b3_2057_Too_20many_20sessio Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _sprintf Ref00000000 +S ___0198_8157_007Incoming_20_25s_ Ref00000000 +S _socket Ref00000000 +S _logmsg Ref00000000 +S _memset Ref00000000 +S _availmem Ref00000000 +S _getpeername Ref00000000 +S _newsession Ref00000000 +S _listen Ref00000000 +S _tnrecv Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S __fprintf Ref00000000 +S ___050e_a412_open_20_25s Ref00000000 +S ___038a_0cac_System_20is_20overl Ref00000000 +S _sockowner Ref00000000 +S _bind Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _Sestypes Ref00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _close_s Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _chname Ref00000000 +S _atoi Ref00000000 +S _accept Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +S _psocket Ref00000000 +S _fdopen Ref00000000 +S _fclose Ref00000000 +S _newproc Ref00000000 +S _setvbuf Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 394 flags 0 +S _ttylhandle Def00000166 +S _ttylstart Def00000000 +S _ttyl0 Def00000379 +A CSTR size 25 flags 0 +A IDATA0 size 2 flags 0 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EA FF 2A +R 00 00 01 00 02 05 19 00 +T 06 00 00 00 00 00 00 00 7D A4 3C 28 06 +R 00 00 01 00 00 04 03 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 00 00 C3 63 01 00 00 +R 00 00 01 00 00 08 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 01 00 00 ED 5B 00 00 00 00 3E +R 00 00 01 00 02 09 12 00 +T 1B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T 20 00 00 00 00 00 00 00 01 00 00 00 00 ED 5B +R 00 00 01 00 02 04 01 00 00 09 02 00 +T 27 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 12 00 2B 09 1A 00 +T 2C 00 00 00 00 00 00 00 CD 00 00 00 00 AF DD +R 00 00 01 00 02 04 1A 00 02 09 01 00 +T 33 00 00 00 77 EA DD 77 EB AF DD 77 EE DD 77 +R 00 00 01 00 +T 3E 00 00 00 EF DD 77 F0 DD 77 F1 01 02 80 DD +R 00 00 01 00 +T 49 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 42 +R 00 00 01 00 +T 54 00 00 00 30 0A +R 00 00 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 DD 36 EC 57 DD 36 ED 00 18 19 +R 00 00 01 00 +T 60 00 00 00 +R 00 00 01 00 +T 60 00 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 6B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1B 00 02 0A 1B 00 +T 71 00 00 00 00 00 00 00 DD 75 EC DD 74 ED +R 00 00 01 00 02 04 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 21 00 00 E5 01 00 00 11 00 00 3E +R 00 00 01 00 +T 84 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 89 00 00 00 00 00 00 00 F1 22 00 00 00 00 01 +R 00 00 01 00 02 04 01 00 00 0A 03 00 +T 90 00 00 00 10 00 C5 21 02 00 39 4D 44 ED 5B +R 00 00 01 00 +T 9B 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 11 00 +T A0 00 00 00 00 00 00 00 CD 00 00 00 00 F1 01 +R 00 00 01 00 02 04 11 00 02 09 01 00 +T A7 00 00 00 01 00 ED 5B 00 00 00 00 3E +R 00 00 01 00 00 08 03 00 +T AE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T B3 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T B5 00 00 00 +R 00 00 01 00 +T B5 00 00 00 21 00 00 E5 01 00 00 ED 5B +R 00 00 01 00 +T BE 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 1C 00 +T C3 00 00 00 00 00 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 02 04 1C 00 02 09 01 00 +T CA 00 00 00 75 FA DD 74 FB 7D A4 3C 20 03 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 C3 60 01 00 00 +R 00 00 01 00 00 05 01 00 +T D7 00 00 00 +R 00 00 01 00 +T D7 00 00 00 01 11 00 00 00 DD 5E FA DD 56 FB +R 00 00 01 00 00 05 02 00 +T E0 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 21 00 02 0A 21 00 +T E6 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 3E +R 00 00 01 00 02 04 01 00 +T EF 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T F4 00 00 00 00 00 00 00 7D B4 28 29 +R 00 00 01 00 02 04 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0F 00 02 0B 0F 00 +T 00 01 00 00 E5 DD 6E FE DD 66 FF E5 3E +R 00 00 01 00 +T 09 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 0E 01 00 00 00 00 00 00 F1 F1 F1 DD 5E FE DD +R 00 00 01 00 02 04 01 00 +T 17 01 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 22 00 +T 1C 01 00 00 00 00 00 00 CD 00 00 00 00 18 3A +R 00 00 01 00 02 04 22 00 02 09 01 00 +T 23 01 00 00 +R 00 00 01 00 +T 23 01 00 00 AF DD 77 FC DD 77 FD 21 00 00 E5 +R 00 00 01 00 +T 2E 01 00 00 DD 6E FE DD 66 FF E5 21 16 00 39 +R 00 00 01 00 +T 39 01 00 00 E5 DD 6E FA DD 66 FB E5 0E +R 00 00 01 00 +T 42 01 00 00 66 01 00 00 C5 21 66 01 00 00 E5 +R 00 00 01 00 29 04 01 00 00 0A 01 00 +T 48 01 00 00 01 00 08 11 15 00 00 00 3E +R 00 00 01 00 00 08 02 00 +T 4F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 23 00 02 09 23 00 +T 54 01 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 C3 B5 00 00 00 +R 00 00 01 00 00 05 01 00 +T 60 01 00 00 +R 00 00 01 00 +T 60 01 00 00 21 00 00 +R 00 00 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0C 00 +T 66 01 00 00 +R 00 00 01 00 +T 66 01 00 00 CD 00 00 00 00 D6 FF DD 36 EA 10 +R 00 00 01 00 02 05 19 00 +T 6F 01 00 00 DD 36 EB 00 0A 6F 03 0A 67 DD 75 +R 00 00 01 00 +T 7A 01 00 00 D6 DD 74 D7 DD 4E 0A DD 46 0B DD +R 00 00 01 00 +T 85 01 00 00 71 FB DD 70 FC ED 4B 00 00 00 00 +R 00 00 01 00 02 0B 12 00 +T 8E 01 00 00 DD 7E FB DD B6 FC 28 0F 21 08 00 +R 00 00 01 00 +T 99 01 00 00 DD 5E FB DD 56 FC 19 5E 23 56 18 +R 00 00 01 00 +T A4 01 00 00 03 +R 00 00 01 00 +T A5 01 00 00 +R 00 00 01 00 +T A5 01 00 00 11 FF FF +R 00 00 01 00 +T A8 01 00 00 +R 00 00 01 00 +T A8 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 10 00 02 0A 10 00 +T AE 01 00 00 00 00 00 00 21 14 00 39 E5 21 +R 00 00 01 00 02 04 01 00 +T B6 01 00 00 06 00 39 4D 44 DD 7E FB DD B6 FC +R 00 00 01 00 +T C1 01 00 00 28 0F 21 08 00 DD 5E FB DD 56 FC +R 00 00 01 00 +T CC 01 00 00 19 5E 23 56 18 03 +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 11 FF FF +R 00 00 01 00 +T D5 01 00 00 +R 00 00 01 00 +T D5 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T DB 01 00 00 00 00 00 00 F1 DD 6E D6 DD 66 D7 +R 00 00 01 00 02 04 01 00 +T E4 01 00 00 29 01 00 00 00 00 09 4E 23 46 C5 +R 00 00 01 00 02 06 14 00 +T ED 01 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0E 00 02 0B 0E 00 +T F3 01 00 00 E5 DD 7E FB DD B6 FC 28 10 21 +R 00 00 01 00 +T FD 01 00 00 08 00 DD 4E FB DD 46 FC 09 46 23 +R 00 00 01 00 +T 08 02 00 00 66 68 18 03 +R 00 00 01 00 +T 0C 02 00 00 +R 00 00 01 00 +T 0C 02 00 00 21 FF FF +R 00 00 01 00 +T 0F 02 00 00 +R 00 00 01 00 +T 0F 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 05 00 02 0B 05 00 +T 15 02 00 00 CD 00 00 00 00 E1 E1 E1 E1 11 +R 00 00 01 00 02 05 01 00 +T 1D 02 00 00 80 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1F 00 +T 22 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1F 00 02 09 01 00 +T 29 02 00 00 FD DD 74 FE 21 04 00 39 5D 54 3E +R 00 00 01 00 +T 34 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 20 00 02 09 20 00 +T 39 02 00 00 00 00 00 00 E5 21 1A 00 00 00 E5 +R 00 00 01 00 02 04 01 00 00 0A 02 00 +T 40 02 00 00 DD 6E FD DD 66 FE E5 3E +R 00 00 01 00 +T 48 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 4D 02 00 00 00 00 00 00 F1 F1 F1 21 01 00 E5 +R 00 00 01 00 02 04 01 00 +T 56 02 00 00 DD 4E D6 DD 46 D7 DD 5E FD DD 56 +R 00 00 01 00 +T 61 02 00 00 FE 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 67 02 00 00 CD 00 00 00 00 F1 DD 75 D8 DD 74 +R 00 00 01 00 02 05 01 00 +T 70 02 00 00 D9 7D B4 20 38 +R 00 00 01 00 +T 75 02 00 00 +R 00 00 01 00 +T 75 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 00 00 02 0B 00 00 +T 7B 02 00 00 E5 DD 6E FB DD 66 FC E5 3E +R 00 00 01 00 +T 84 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 89 02 00 00 00 00 00 00 F1 F1 F1 DD 5E FB DD +R 00 00 01 00 02 04 01 00 +T 92 02 00 00 56 FC 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 22 00 +T 97 02 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 22 00 02 09 01 00 +T 9E 02 00 00 FD DD 56 FE 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 15 00 +T A5 02 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 15 00 02 09 01 00 +T AB 02 00 00 76 03 00 00 +R 00 00 01 00 00 04 01 00 +T AD 02 00 00 +R 00 00 01 00 +T AD 02 00 00 DD 5E FD DD 56 FE 3E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T B5 02 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 15 00 02 0A 01 00 +T BC 02 00 00 0F 00 E5 01 00 00 21 18 00 39 5D +R 00 00 01 00 +T C7 02 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T CD 02 00 00 CD 00 00 00 00 F1 DD 6E D8 DD 66 +R 00 00 01 00 02 05 01 00 +T D6 02 00 00 D9 DD 75 F8 DD 74 F9 21 05 00 DD +R 00 00 01 00 +T E1 02 00 00 4E D8 DD 46 D9 09 E5 21 18 00 39 +R 00 00 01 00 +T EC 02 00 00 5D 54 E1 73 23 72 21 0D 00 09 DD +R 00 00 01 00 +T F7 02 00 00 5E FB DD 56 FC 73 23 72 21 07 00 +R 00 00 01 00 +T 02 03 00 00 09 ED 5B 00 00 00 00 73 23 72 21 +R 00 00 01 00 02 07 12 00 +T 0B 03 00 00 80 00 E5 21 02 00 E5 01 00 00 21 +R 00 00 01 00 +T 16 03 00 00 0D 00 DD 5E D8 DD 56 D9 19 5E 23 +R 00 00 01 00 +T 21 03 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 24 00 02 0B 24 00 +T 27 03 00 00 CD 00 00 00 00 F1 F1 21 04 00 39 +R 00 00 01 00 02 05 01 00 +T 30 03 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 20 00 +T 35 03 00 00 00 00 00 00 CD 00 00 00 00 E5 DD +R 00 00 01 00 02 04 20 00 02 09 01 00 +T 3C 03 00 00 6E D8 DD 66 D9 4E 23 46 C5 DD 6E +R 00 00 01 00 +T 47 03 00 00 D6 DD 66 D7 29 01 00 00 00 00 09 +R 00 00 01 00 02 0A 14 00 +T 50 03 00 00 4E 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 03 00 +T 58 03 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 2B 0A 1D 00 +T 5E 03 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1D 00 02 09 01 00 +T 65 03 00 00 F1 F1 F1 21 16 00 39 5D 54 3E +R 00 00 01 00 +T 6F 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 74 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 76 03 00 00 +R 00 00 01 00 +T 76 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0C 00 +T 79 03 00 00 +R 00 00 01 00 +T 79 03 00 00 CD 00 00 00 00 ED 5B 00 00 00 00 +R 00 00 01 00 02 05 16 00 00 0B 03 00 +T 80 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T 86 03 00 00 00 00 00 00 21 FF FF 22 +R 00 00 01 00 02 04 01 00 +T 8C 03 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 00 04 03 00 +T 92 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 0C 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 54 54 59 6C 69 6E 6B 20 6C 69 73 +R 00 00 02 00 +T 0B 00 00 00 74 65 6E 65 72 00 +R 00 00 02 00 +T 11 00 00 00 +R 00 00 02 00 +T 11 00 00 00 72 2B 74 00 +R 00 00 02 00 +T 15 00 00 00 +R 00 00 02 00 +T 15 00 00 00 63 68 61 74 00 +R 00 00 02 00 +T 1A 00 00 00 +R 00 00 02 00 +T 1A 00 00 00 74 74 79 6C 69 6E 6B 20 25 73 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 FF FF +R 00 00 04 00 diff --git a/src/nos/lib/z80.lib b/src/nos/lib/z80.lib new file mode 100644 index 00000000..025554de --- /dev/null +++ b/src/nos/lib/z80.lib @@ -0,0 +1,229 @@ +z80_lib/Asy.rel + _Asy +z80_lib/asyret.rel + _Asyrat +z80_lib/Handle.rel + _Handle +z80_lib/asy_init.rel + _asy_init +z80_lib/asy_stop.rel + _asy_stop +z80_lib/asy_speed.rel + _asy_speed +z80_lib/asy_ioctl.rel + _asy_ioctl +z80_lib/asy_open.rel + _asy_open +z80_lib/asy_close.rel + _asy_close +z80_lib/asy_write.rel + _asy_write +z80_lib/asy_read.rel + _asy_read +z80_lib/get_asy.rel + _get_asy +z80_lib/asyint.rel + _asyint +z80_lib/asycom.rel + _asycom +z80_lib/asyrxint.rel + _asyrxint +z80_lib/asytxint.rel + _asytxint +z80_lib/get_rlsd_asy.rel + _get_rlsd_asy +z80_lib/asytimer.rel + _asytimer +z80_lib/doasystat.rel + _doasystat +z80_lib/pasy.rel + _pasy +z80_lib/asy_send.rel + _asy_send +z80_lib/ascivec.rel + _asci0vec + _asci1vec +z80_lib/copyr.rel + _copyr + copyb + copyr +z80_lib/diag.rel + _diag_open + _dputter + _acrlf + _diag_close + _abyte + _amess + _ahexw + _diag_write + ahexb + acrlf + ahexn + abyte + amess + ahexw + amess_loop +z80_lib/dirutil.rel + _domkd + _dodir + _dormd + _docd + _filedir + _getdir + _dir +z80_lib/Orgivec.rel + _Orgivec +z80_lib/Esccinfo.rel + _Esccinfo +z80_lib/Esccchan.rel + _Esccchan +z80_lib/Esccvecloc.rel + _Esccvecloc +z80_lib/Esccmaxvec.rel + _Esccmaxvec +z80_lib/Esccpolltab.rel + _Esccpolltab +z80_lib/escc_delay.rel + _escc_delay +z80_lib/Random.rel + _Random +z80_lib/escc_attach.rel + _escc_attach +z80_lib/escc_init.rel + _escc_init +z80_lib/escc_async.rel + _escc_async +z80_lib/escc_sdlc.rel + _escc_sdlc +z80_lib/escc_speed.rel + _escc_speed +z80_lib/escc_stop.rel + _escc_stop +z80_lib/esccstop.rel + _esccstop +z80_lib/escc_aioctl.rel + _escc_aioctl +z80_lib/escc_sioctl.rel + _escc_sioctl +z80_lib/escc_sstart.rel + _escc_sstart +z80_lib/doesccstat.rel + _doesccstat +z80_lib/escc_raw.rel + _escc_raw +z80_lib/escc_send.rel + _escc_send +z80_lib/escc_asytx.rel + _escc_asytx +z80_lib/escc_asyex.rel + _escc_asyex +z80_lib/escc_asyrx.rel + _escc_asyrx +z80_lib/get_escc.rel + _get_escc +z80_lib/escc_frameup.rel + _escc_frameup +z80_lib/escc_asysp.rel + _escc_asysp +z80_lib/escc_sdlctx.rel + _escc_sdlctx +z80_lib/escc_sdlcex.rel + _escc_sdlcex +z80_lib/escc_sdlcrx.rel + _escc_sdlcrx +z80_lib/escc_sdlcsp.rel + _escc_sdlcsp +z80_lib/escc_tossb.rel + _escc_tossb +z80_lib/escc_txon.rel + _escc_txon +z80_lib/escc_txoff.rel + _escc_txoff +z80_lib/escctimer.rel + _escctimer +z80_lib/esccgen.rel + _read_scc + _rx8530 + _write_scc +z80_lib/esccvec.rel + _esccnovec +z80_lib/rand.rel + _getrand + _rtype + _urandom + _rand_init +z80_lib/stktrace.rel + _stktrace +z80_lib/sw.rel + _doswatch + _swstop + _Sw +z80_lib/z80.rel + _clrbit + _sysreset + _secclock + _maskon + _setbit + _ioinit + _getirq + _ctick + _intcontext + _setirq + _iostop + _rdclock + _arddec + _maskoff + _errhandler + _kbread + _writebit + _doshell + _msclock + _getmask + _getvect + _longdiv + _usclock + _display + _setvect + _pctick + _longmul + _ltop + _Tick + _Isat + _Clock + __stklen +z80_lib/z80gen.rel + _Sssave + _Kbvec + _Hwtvec + _Spsave + _Hashtab + _Intstk + _Stktop + _Mtasker + doret_final + doret + _hwtick + doret_entry + docall + _dirps + _lcsum + _get32 + _getss + _get16 + _enable + _put32 + _clockbits + _inportb + _outportb + _put16 + _clockinit + _chktasker + _restore + _istate + _giveup + _inbuf + _disable + _outbuf + _kbraw + _hash_ip + _ilog2 diff --git a/src/nos/lib/z80_lib/Asy.rel b/src/nos/lib/z80_lib/Asy.rel new file mode 100644 index 00000000..dacc9fbb --- /dev/null +++ b/src/nos/lib/z80_lib/Asy.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size B0 flags 0 +S _Asy Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/z80_lib/Esccchan.rel b/src/nos/lib/z80_lib/Esccchan.rel new file mode 100644 index 00000000..404d69c1 --- /dev/null +++ b/src/nos/lib/z80_lib/Esccchan.rel @@ -0,0 +1,17 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 10 flags 0 +S _Esccchan Def00000000 +A CDATA0 size 10 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 0B 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/z80_lib/Esccinfo.rel b/src/nos/lib/z80_lib/Esccinfo.rel new file mode 100644 index 00000000..665fae32 --- /dev/null +++ b/src/nos/lib/z80_lib/Esccinfo.rel @@ -0,0 +1,19 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 1C flags 0 +S _Esccinfo Def00000000 +A CDATA0 size 1C flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 16 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/z80_lib/Esccmaxvec.rel b/src/nos/lib/z80_lib/Esccmaxvec.rel new file mode 100644 index 00000000..b3e5d2d8 --- /dev/null +++ b/src/nos/lib/z80_lib/Esccmaxvec.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 1 flags 0 +S _Esccmaxvec Def00000000 +A CDATA0 size 1 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/z80_lib/Esccpolltab.rel b/src/nos/lib/z80_lib/Esccpolltab.rel new file mode 100644 index 00000000..fc98941c --- /dev/null +++ b/src/nos/lib/z80_lib/Esccpolltab.rel @@ -0,0 +1,17 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 14 flags 0 +S _Esccpolltab Def00000000 +A CDATA0 size 14 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 +T 0B 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/z80_lib/Esccvecloc.rel b/src/nos/lib/z80_lib/Esccvecloc.rel new file mode 100644 index 00000000..6064179a --- /dev/null +++ b/src/nos/lib/z80_lib/Esccvecloc.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Esccvecloc Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/z80_lib/Handle.rel b/src/nos/lib/z80_lib/Handle.rel new file mode 100644 index 00000000..eb9a6292 --- /dev/null +++ b/src/nos/lib/z80_lib/Handle.rel @@ -0,0 +1,17 @@ +XL4 +H 4 areas 5 global symbols +S _asci0vec Ref00000000 +S _asci1vec Ref00000000 +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 6 flags 0 +S _Handle Def00000000 +A CDATA0 size 6 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 00 00 00 00 00 00 +R 00 00 03 00 4A 04 00 00 4A 08 01 00 diff --git a/src/nos/lib/z80_lib/Orgivec.rel b/src/nos/lib/z80_lib/Orgivec.rel new file mode 100644 index 00000000..fe77a0c3 --- /dev/null +++ b/src/nos/lib/z80_lib/Orgivec.rel @@ -0,0 +1,12 @@ +XL4 +H 3 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A UDATA0 size 3 flags 0 +S _Orgivec Def00000000 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/z80_lib/Random.rel b/src/nos/lib/z80_lib/Random.rel new file mode 100644 index 00000000..2bf47934 --- /dev/null +++ b/src/nos/lib/z80_lib/Random.rel @@ -0,0 +1,15 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 1 flags 0 +S _Random Def00000000 +A CDATA0 size 1 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/z80_lib/ascivec.rel b/src/nos/lib/z80_lib/ascivec.rel new file mode 100644 index 00000000..00cf610c --- /dev/null +++ b/src/nos/lib/z80_lib/ascivec.rel @@ -0,0 +1,36 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _Spsave Ref00000000 +S _Sssave Ref00000000 +S .__.ABS. Def00000000 +S _Stktop Ref00000000 +S docall Ref00000000 +S _asyint Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 41 flags 0 +S _asci0vec Def00000000 +S _asci1vec Def00000014 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F3 F5 E5 3A FC 10 2A 80 0F ED 29 +R 00 00 01 00 +T 0B 00 00 00 39 ED 21 3A 21 00 00 18 12 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 F3 F5 E5 3A FC 10 2A 80 0F ED 29 +R 00 00 01 00 +T 1F 00 00 00 39 ED 21 3A 21 01 00 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 32 00 00 00 00 ED 73 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0B 02 00 +T 2D 00 00 00 31 00 00 00 00 FD E5 ED 38 38 F5 +R 00 00 01 00 02 05 05 00 +T 36 00 00 00 C5 D5 EB 21 00 00 00 00 3E +R 00 00 01 00 02 08 07 00 +T 3D 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 2B 04 07 00 02 09 06 00 diff --git a/src/nos/lib/z80_lib/asy_close.rel b/src/nos/lib/z80_lib/asy_close.rel new file mode 100644 index 00000000..614267fd --- /dev/null +++ b/src/nos/lib/z80_lib/asy_close.rel @@ -0,0 +1,104 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _resume Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _Asy Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size FF flags 0 +S _asy_close Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD CB 03 7E +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 20 11 01 02 80 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 14 00 00 00 3E 80 AC 67 ED 42 38 0C +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 06 00 +T 25 00 00 00 C3 FC 00 00 00 +R 00 00 01 00 00 05 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 01 58 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 32 00 00 00 00 00 00 00 21 00 00 00 00 19 46 +R 00 00 01 00 02 04 08 00 02 09 09 00 +T 39 00 00 00 23 66 68 DD 75 FC DD 74 FD 7D B4 +R 00 00 01 00 +T 44 00 00 00 20 0C +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 06 00 +T 4F 00 00 00 C3 FC 00 00 00 +R 00 00 01 00 00 05 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 58 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 01 +R 00 00 01 00 02 04 00 00 +T 61 00 00 00 58 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 6A 00 00 00 00 00 00 00 21 54 00 00 00 19 4E +R 00 00 01 00 02 04 08 00 02 09 09 00 +T 71 00 00 00 23 46 0B 70 2B 71 01 58 00 DD 5E +R 00 00 01 00 +T 7C 00 00 00 02 DD 56 03 CD 00 00 00 00 21 +R 00 00 01 00 02 09 08 00 +T 84 00 00 00 54 00 00 00 19 7E 23 B6 28 13 +R 00 00 01 00 02 04 09 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 94 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 9B 00 00 00 00 00 18 5D +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 01 58 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T A9 00 00 00 00 00 00 00 21 12 00 00 00 19 E5 +R 00 00 01 00 02 04 08 00 02 09 09 00 +T B0 00 00 00 01 58 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T BA 00 00 00 00 00 00 00 21 56 00 00 00 19 4E +R 00 00 01 00 02 04 08 00 02 09 09 00 +T C1 00 00 00 23 46 E1 71 23 70 DD 5E FE DD 56 +R 00 00 01 00 +T CC 00 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T D2 00 00 00 CD 00 00 00 00 21 18 00 DD 4E FC +R 00 00 01 00 02 05 00 00 +T DB 00 00 00 DD 46 FD 09 5E 23 56 3E +R 00 00 01 00 +T E3 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T E8 00 00 00 00 00 00 00 21 1A 00 09 5E 23 56 +R 00 00 01 00 02 04 00 00 +T F1 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 02 00 02 0A 02 00 +T F7 00 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 00 00 +T FC 00 00 00 +R 00 00 01 00 +T FC 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/z80_lib/asy_init.rel b/src/nos/lib/z80_lib/asy_init.rel new file mode 100644 index 00000000..afac2ab2 --- /dev/null +++ b/src/nos/lib/z80_lib/asy_init.rel @@ -0,0 +1,171 @@ +XL4 +H 2 areas 13 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _maskon Ref00000000 +S _getirq Ref00000000 +S _Handle Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _setirq Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _getmask Ref00000000 +S _Asy Ref00000000 +S _mallocw Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _asy_speed Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 23F flags 0 +S _asy_init Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 11 58 00 DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 4E 02 DD 46 03 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 0A 00 +T 12 00 00 00 00 00 00 00 19 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 0C 00 +T 1B 00 00 00 DD 4E 04 DD 46 05 71 23 70 21 +R 00 00 01 00 +T 25 00 00 00 19 00 DD 4E FC DD 46 FD 09 DD 5E +R 00 00 01 00 +T 30 00 00 00 0A DD 56 0B 73 23 72 21 1B 00 09 +R 00 00 01 00 +T 3B 00 00 00 DD 5E 0C DD 56 0D 73 23 72 21 +R 00 00 01 00 +T 45 00 00 00 2B 00 09 DD 56 1A 72 03 03 DD 71 +R 00 00 01 00 +T 50 00 00 00 FA DD 70 FB DD 5E 0E DD 56 0F 3E +R 00 00 01 00 +T 5B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 60 00 00 00 00 00 00 00 E5 69 60 C1 71 23 70 +R 00 00 01 00 02 04 00 00 +T 69 00 00 00 DD 6E FA DD 66 FB 23 23 DD 4E 0E +R 00 00 01 00 +T 74 00 00 00 DD 46 0F 71 23 70 21 04 00 DD 4E +R 00 00 01 00 +T 7F 00 00 00 FA DD 46 FB 09 E5 21 06 00 09 E5 +R 00 00 01 00 +T 8A 00 00 00 69 60 4E 23 46 E1 71 23 70 E1 71 +R 00 00 01 00 +T 95 00 00 00 23 70 21 08 00 DD 4E FA DD 46 FB +R 00 00 01 00 +T A0 00 00 00 09 AF 77 23 77 21 0A 00 09 AF 77 +R 00 00 01 00 +T AB 00 00 00 23 77 21 0C 00 09 AF 77 23 77 23 +R 00 00 01 00 +T B6 00 00 00 77 23 77 21 19 00 DD 4E FC DD 46 +R 00 00 01 00 +T C1 00 00 00 FD 09 56 23 66 6A DD 75 0A DD 74 +R 00 00 01 00 +T CC 00 00 00 0B 21 12 00 09 DD 5E 10 DD 56 11 +R 00 00 01 00 +T D7 00 00 00 73 23 72 21 08 00 DD 5E 0A DD 56 +R 00 00 01 00 +T E2 00 00 00 0B 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 10 00 +T E8 00 00 00 00 00 00 00 CD 00 00 00 00 3E +R 00 00 01 00 02 04 10 00 02 09 00 00 +T EE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T F3 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 21 +R 00 00 01 00 02 04 00 00 +T FC 00 00 00 1B 00 09 7E 23 A6 3C 28 3F +R 00 00 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 21 21 00 DD 4E FC DD 46 FD 09 E5 +R 00 00 01 00 +T 10 01 00 00 21 1B 00 09 5E 23 56 3E +R 00 00 01 00 +T 18 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 1D 01 00 00 00 00 00 00 51 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 00 00 +T 26 01 00 00 23 72 21 1B 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T 31 01 00 00 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 38 01 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 3F 01 00 00 24 00 09 C1 71 +R 00 00 01 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 10 00 +T 4C 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 10 00 02 0A 00 00 +T 53 01 00 00 21 25 00 DD 4E FC DD 46 FD 09 D1 +R 00 00 01 00 +T 5E 01 00 00 73 21 04 00 DD 5E 0A DD 56 0B 19 +R 00 00 01 00 +T 69 01 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T 6F 01 00 00 CD 00 00 00 00 E5 21 26 00 09 D1 +R 00 00 01 00 02 05 00 00 +T 78 01 00 00 73 21 29 00 09 DD 56 16 72 21 +R 00 00 01 00 +T 82 01 00 00 2A 00 09 DD 56 18 72 21 1B 00 09 +R 00 00 01 00 +T 8D 01 00 00 7E 23 A6 3C 28 30 +R 00 00 01 00 +T 93 01 00 00 +R 00 00 01 00 +T 93 01 00 00 01 03 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 9D 01 00 00 00 00 00 00 21 00 00 00 00 19 23 +R 00 00 01 00 02 04 0A 00 02 09 04 00 +T A4 01 00 00 23 4E C5 2B 46 2B 4E C5 21 1B 00 +R 00 00 01 00 +T AF 01 00 00 DD 4E FC DD 46 FD 09 5E 23 56 3E +R 00 00 01 00 +T BA 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T BF 01 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 00 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 0E 74 DD 5E 0A DD 56 0B 3E +R 00 00 01 00 +T CC 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T D1 01 00 00 00 00 00 00 0E 08 21 04 00 DD 5E +R 00 00 01 00 02 04 00 00 +T DA 01 00 00 0A DD 56 0B 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T E2 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 11 00 02 0A 00 00 +T E9 01 00 00 1B 00 DD 4E FC DD 46 FD 09 7E 23 +R 00 00 01 00 +T F4 01 00 00 A6 3C 28 15 +R 00 00 01 00 +T F8 01 00 00 +R 00 00 01 00 +T F8 01 00 00 21 1B 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 03 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 08 02 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 0D 02 00 00 +R 00 00 01 00 +T 0D 02 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 15 02 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 1C 02 00 00 6E 14 DD 66 15 E5 DD 6E 12 DD 66 +R 00 00 01 00 +T 27 02 00 00 13 E5 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 30 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 35 02 00 00 00 00 00 00 F1 F1 21 00 00 C3 +R 00 00 01 00 02 04 00 00 +T 3D 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 05 00 diff --git a/src/nos/lib/z80_lib/asy_ioctl.rel b/src/nos/lib/z80_lib/asy_ioctl.rel new file mode 100644 index 00000000..df42630c --- /dev/null +++ b/src/nos/lib/z80_lib/asy_ioctl.rel @@ -0,0 +1,82 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?S_V_SWITCH_L06 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _Asy Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _asy_speed Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size BB flags 0 +S _asy_ioctl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 2C 00 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 5E 02 DD 56 03 19 5E 23 56 01 +R 00 00 01 00 +T 13 00 00 00 58 00 CD 00 00 00 00 21 +R 00 00 01 00 02 07 04 00 +T 19 00 00 00 00 00 00 00 19 DD 75 FC DD 74 FD +R 00 00 01 00 02 04 05 00 +T 22 00 00 00 01 19 00 09 46 23 66 68 DD 75 FE +R 00 00 01 00 +T 2D 00 00 00 DD 74 FF DD 5E 04 DD 56 05 CD +R 00 00 01 00 +T 37 00 00 00 00 00 00 00 05 00 08 00 09 00 +R 00 00 01 00 02 04 01 00 +T 3F 00 00 00 0A 00 81 00 82 00 B2 00 00 00 +R 00 00 01 00 00 0A 01 00 +T 47 00 00 00 AA 00 00 00 A2 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 4B 00 00 00 51 00 00 00 9A 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 4F 00 00 00 92 00 00 00 +R 00 00 01 00 00 04 01 00 +T 51 00 00 00 +R 00 00 01 00 +T 51 00 00 00 DD 7E 0A DD B6 0B 28 25 +R 00 00 01 00 +T 59 00 00 00 +R 00 00 01 00 +T 59 00 00 00 DD 6E 0E DD 66 0F E5 DD 6E 0C DD +R 00 00 01 00 +T 64 00 00 00 66 0D E5 21 2C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 6F 00 00 00 03 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 77 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 21 1D 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 89 00 00 00 23 56 23 4E 23 46 EB 18 26 +R 00 00 01 00 +T 92 00 00 00 +R 00 00 01 00 +T 92 00 00 00 01 00 00 21 01 00 18 1E +R 00 00 01 00 +T 9A 00 00 00 +R 00 00 01 00 +T 9A 00 00 00 01 00 00 21 01 00 18 16 +R 00 00 01 00 +T A2 00 00 00 +R 00 00 01 00 +T A2 00 00 00 01 00 00 21 00 00 18 0E +R 00 00 01 00 +T AA 00 00 00 +R 00 00 01 00 +T AA 00 00 00 01 00 00 21 01 00 18 06 +R 00 00 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 01 FF FF 21 FF FF +R 00 00 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 diff --git a/src/nos/lib/z80_lib/asy_open.rel b/src/nos/lib/z80_lib/asy_open.rel new file mode 100644 index 00000000..b3fec526 --- /dev/null +++ b/src/nos/lib/z80_lib/asy_open.rel @@ -0,0 +1,133 @@ +XL4 +H 2 areas D global symbols +S _suspend Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _if_lookup Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _Asy Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 15C flags 0 +S _asy_open Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF DD 5E 02 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 0E 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 15 00 00 00 FA DD 74 FB 7D B4 20 0C +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 13 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 07 00 +T 26 00 00 00 C3 59 01 00 00 +R 00 00 01 00 00 05 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 21 2C 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T 34 00 00 00 23 66 68 DD 75 FC DD 74 FD 01 +R 00 00 01 00 +T 3E 00 00 00 02 80 3E 80 AC 67 ED 42 30 1F 01 +R 00 00 01 00 +T 49 00 00 00 58 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 52 00 00 00 00 00 00 00 21 00 00 00 00 19 46 +R 00 00 01 00 02 04 09 00 02 09 0A 00 +T 59 00 00 00 23 66 68 DD 4E FA DD 46 FB A7 ED +R 00 00 01 00 +T 64 00 00 00 42 28 0C +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 +R 00 00 01 00 +T 67 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 07 00 +T 70 00 00 00 C3 59 01 00 00 +R 00 00 01 00 00 05 01 00 +T 73 00 00 00 +R 00 00 01 00 +T 73 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 79 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 01 +R 00 00 01 00 02 04 01 00 +T 82 00 00 00 58 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 8B 00 00 00 00 00 00 00 21 54 00 00 00 19 7E +R 00 00 01 00 02 04 09 00 02 09 0A 00 +T 92 00 00 00 23 B6 20 3D +R 00 00 01 00 +T 96 00 00 00 +R 00 00 01 00 +T 96 00 00 00 01 58 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T A0 00 00 00 00 00 00 00 21 56 00 00 00 19 E5 +R 00 00 01 00 02 04 09 00 02 09 0A 00 +T A7 00 00 00 01 58 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T B1 00 00 00 00 00 00 00 21 12 00 00 00 19 4E +R 00 00 01 00 02 04 09 00 02 09 0A 00 +T B8 00 00 00 23 46 E1 71 23 70 01 58 00 DD 5E +R 00 00 01 00 +T C3 00 00 00 FC DD 56 FD CD 00 00 00 00 21 +R 00 00 01 00 02 09 09 00 +T CB 00 00 00 12 00 00 00 19 36 00 23 36 01 +R 00 00 01 00 02 04 0A 00 +T D3 00 00 00 +R 00 00 01 00 +T D3 00 00 00 01 58 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T DD 00 00 00 00 00 00 00 21 54 00 00 00 19 34 +R 00 00 01 00 02 04 09 00 02 09 0A 00 +T E4 00 00 00 23 20 01 34 +R 00 00 01 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T F0 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 02 00 02 0A 01 00 +T F7 00 00 00 18 00 DD 4E FA DD 46 FB 09 5E 23 +R 00 00 01 00 +T 02 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 08 01 00 00 CD 00 00 00 00 21 1A 00 09 5E 23 +R 00 00 01 00 02 05 01 00 +T 11 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 00 00 02 0B 00 00 +T 17 01 00 00 CD 00 00 00 00 21 2E 00 09 7E 23 +R 00 00 01 00 02 05 01 00 +T 20 01 00 00 B6 23 B6 28 2E +R 00 00 01 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 21 00 00 E5 21 00 00 E5 21 01 00 +R 00 00 01 00 +T 30 01 00 00 E5 01 82 00 C5 DD 5E FA DD 56 FB +R 00 00 01 00 +T 3B 01 00 00 21 2E 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T 46 01 00 00 23 46 23 7E 69 60 C1 CD +R 00 00 01 00 +T 4E 01 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T 53 01 00 00 +R 00 00 01 00 +T 53 01 00 00 DD 6E FC DD 66 FD +R 00 00 01 00 +T 59 01 00 00 +R 00 00 01 00 +T 59 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/z80_lib/asy_read.rel b/src/nos/lib/z80_lib/asy_read.rel new file mode 100644 index 00000000..19880648 --- /dev/null +++ b/src/nos/lib/z80_lib/asy_read.rel @@ -0,0 +1,166 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _dirps Ref00000000 +S _errno Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _Asy Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1A6 flags 0 +S _asy_read Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 7E 0A DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 B6 0B 20 06 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 21 00 00 C3 A3 01 00 00 +R 00 00 01 00 00 08 01 00 +T 13 00 00 00 +R 00 00 01 00 +T 13 00 00 00 DD CB 03 7E 20 11 01 02 80 DD 6E +R 00 00 01 00 +T 1E 00 00 00 02 DD 66 03 3E 80 AC 67 ED 42 38 +R 00 00 01 00 +T 29 00 00 00 0C +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 21 16 00 22 00 00 00 00 21 FF FF +R 00 00 01 00 02 08 06 00 +T 33 00 00 00 C3 A3 01 00 00 +R 00 00 01 00 00 05 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 01 58 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 40 00 00 00 00 00 00 00 21 02 00 00 00 19 DD +R 00 00 01 00 02 04 08 00 02 09 09 00 +T 47 00 00 00 75 F6 DD 74 F7 DD 6E 04 DD 66 05 +R 00 00 01 00 +T 52 00 00 00 DD 75 FD DD 74 FE +R 00 00 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 5E 00 00 00 00 00 00 00 DD 75 F8 DD 74 F9 21 +R 00 00 01 00 02 04 00 00 +T 67 00 00 00 08 00 DD 4E F6 DD 46 F7 09 46 23 +R 00 00 01 00 +T 72 00 00 00 66 68 DD 75 FA DD 74 FB 7D B4 28 +R 00 00 01 00 +T 7D 00 00 00 42 +R 00 00 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 DD 4E 0A DD 46 0B DD 6E FA DD 66 +R 00 00 01 00 +T 89 00 00 00 FB A7 ED 42 30 0C +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 6E FA DD 66 FB DD 75 0A DD 74 +R 00 00 01 00 +T 9A 00 00 00 0B +R 00 00 01 00 +T 9B 00 00 00 +R 00 00 01 00 +T 9B 00 00 00 21 08 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T A6 00 00 00 DD 96 0A 77 23 7E DD 9E 0B 77 DD +R 00 00 01 00 +T B1 00 00 00 5E F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 01 00 +T B9 00 00 00 00 00 00 00 CD 00 00 00 00 18 59 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T C0 00 00 00 +R 00 00 01 00 +T C0 00 00 00 01 58 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T CA 00 00 00 00 00 00 00 21 12 00 00 00 19 36 +R 00 00 01 00 02 04 08 00 02 09 09 00 +T D1 00 00 00 FF 23 36 FF DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T DC 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T E1 00 00 00 00 00 00 00 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 02 04 00 00 +T EA 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T EF 00 00 00 00 00 00 00 22 00 00 00 00 01 +R 00 00 01 00 02 04 00 00 02 09 06 00 +T F5 00 00 00 58 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T FE 00 00 00 00 00 00 00 21 12 00 00 00 19 36 +R 00 00 01 00 02 04 08 00 02 09 09 00 +T 05 01 00 00 00 23 36 01 2A 00 00 00 00 7D B4 +R 00 00 01 00 02 09 06 00 +T 0E 01 00 00 28 06 +R 00 00 01 00 +T 10 01 00 00 +R 00 00 01 00 +T 10 01 00 00 21 FF FF C3 A3 01 00 00 +R 00 00 01 00 00 08 01 00 +T 16 01 00 00 +R 00 00 01 00 +T 16 01 00 00 C3 58 00 00 00 +R 00 00 01 00 00 05 01 00 +T 19 01 00 00 +R 00 00 01 00 +T 19 01 00 00 DD 6E 0A DD 66 0B DD 75 FA DD 74 +R 00 00 01 00 +T 24 01 00 00 FB +R 00 00 01 00 +T 25 01 00 00 +R 00 00 01 00 +T 25 01 00 00 DD 6E FA DD 66 FB 2B DD 75 FA DD +R 00 00 01 00 +T 30 01 00 00 74 FB 23 7D B4 28 66 +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 21 06 00 DD 4E F6 DD 46 F7 09 5E +R 00 00 01 00 +T 42 01 00 00 23 56 13 72 2B 73 1B 1A DD 77 FC +R 00 00 01 00 +T 4D 01 00 00 03 03 0A 6F 03 0A 67 E5 DD 6E F6 +R 00 00 01 00 +T 58 01 00 00 DD 66 F7 4E 23 46 E1 09 4D 44 21 +R 00 00 01 00 +T 63 01 00 00 06 00 DD 5E F6 DD 56 F7 19 56 23 +R 00 00 01 00 +T 6E 01 00 00 66 6A A7 ED 42 38 14 +R 00 00 01 00 +T 75 01 00 00 +R 00 00 01 00 +T 75 01 00 00 21 06 00 DD 4E F6 DD 46 F7 09 E5 +R 00 00 01 00 +T 80 01 00 00 69 60 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 89 01 00 00 +R 00 00 01 00 +T 89 01 00 00 DD 6E FD DD 66 FE 23 DD 75 FD DD +R 00 00 01 00 +T 94 01 00 00 74 FE 2B DD 46 FC 70 18 88 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 DD 6E 0A DD 66 0B +R 00 00 01 00 +T A3 01 00 00 +R 00 00 01 00 +T A3 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/z80_lib/asy_send.rel b/src/nos/lib/z80_lib/asy_send.rel new file mode 100644 index 00000000..3553d4c7 --- /dev/null +++ b/src/nos/lib/z80_lib/asy_send.rel @@ -0,0 +1,67 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _asy_write Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _free_mbuf Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 89 flags 0 +S _asy_send Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 CB 7A 20 11 01 +R 00 00 01 00 02 05 04 00 +T 08 00 00 00 02 80 DD 6E 02 DD 66 03 3E 80 AC +R 00 00 01 00 +T 13 00 00 00 67 ED 42 38 13 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T 20 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 27 00 00 00 FF FF 18 5B +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 DD 6E 04 DD 66 05 7E 23 B6 28 4D +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T 41 00 00 00 0C 00 09 4E 23 46 C5 DD 6E 04 DD +R 00 00 01 00 +T 4C 00 00 00 66 05 46 23 66 68 01 0A 00 09 4E +R 00 00 01 00 +T 57 00 00 00 23 46 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 60 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 65 00 00 00 00 00 00 00 F1 DD 5E 04 DD 56 05 +R 00 00 01 00 02 04 00 00 +T 6E 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 74 00 00 00 00 00 00 00 E5 DD 6E 04 DD 66 05 +R 00 00 01 00 02 04 00 00 +T 7D 00 00 00 C1 71 23 70 18 A8 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 21 00 00 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/z80_lib/asy_speed.rel b/src/nos/lib/z80_lib/asy_speed.rel new file mode 100644 index 00000000..e91d2a14 --- /dev/null +++ b/src/nos/lib/z80_lib/asy_speed.rel @@ -0,0 +1,134 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _Asy Ref00000000 +S _Asyrat Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 166 flags 0 +S _asy_speed Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF DD 6E 0C DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 66 0D E5 DD 6E 0A DD 66 0B E5 01 +R 00 00 01 00 +T 14 00 00 00 00 00 21 00 00 CD 00 00 00 00 30 +R 00 00 01 00 02 0A 05 00 +T 1D 00 00 00 11 01 02 80 DD 6E 02 DD 66 03 3E +R 00 00 01 00 +T 28 00 00 00 80 AC 67 ED 42 38 06 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 +R 00 00 01 00 +T 2F 00 00 00 21 FF FF C3 63 01 00 00 +R 00 00 01 00 00 08 01 00 +T 35 00 00 00 +R 00 00 01 00 +T 35 00 00 00 01 58 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 3F 00 00 00 00 00 00 00 21 00 00 00 00 19 DD +R 00 00 01 00 02 04 07 00 02 09 08 00 +T 46 00 00 00 75 FC DD 74 FD 7E 23 B6 20 06 +R 00 00 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 21 FF FF C3 63 01 00 00 +R 00 00 01 00 00 08 01 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 DD 7E 0A DD B6 0B DD B6 0C DD B6 +R 00 00 01 00 +T 61 00 00 00 0D 20 06 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 21 FF FF C3 63 01 00 00 +R 00 00 01 00 00 08 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 21 1D 00 DD 4E FC DD 46 FD 09 DD +R 00 00 01 00 +T 75 00 00 00 4E 0C DD 46 0D DD 5E 0A DD 56 0B +R 00 00 01 00 +T 80 00 00 00 73 23 72 23 71 23 70 21 19 00 DD +R 00 00 01 00 +T 8B 00 00 00 4E FC DD 46 FD 09 46 23 66 68 DD +R 00 00 01 00 +T 96 00 00 00 75 F6 DD 74 F7 DD 36 FA +R 00 00 01 00 +T 9E 00 00 00 00 00 00 00 DD 36 FB 00 00 00 00 +R 00 00 01 00 0B 04 09 00 8B 0B 09 00 +T A3 00 00 00 +R 00 00 01 00 +T A3 00 00 00 DD 6E FA DD 66 FB 23 23 4E 23 46 +R 00 00 01 00 +T AE 00 00 00 23 5E 23 56 D5 C5 DD 4E 0C DD 46 +R 00 00 01 00 +T B9 00 00 00 0D DD 6E 0A DD 66 0B CD +R 00 00 01 00 +T C1 00 00 00 00 00 00 00 30 0F +R 00 00 01 00 02 04 05 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 DD 7E FA C6 06 DD 77 FA 30 03 DD +R 00 00 01 00 +T D0 00 00 00 34 FB +R 00 00 01 00 +T D2 00 00 00 +R 00 00 01 00 +T D2 00 00 00 18 CF +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T DF 00 00 00 75 F8 DD 74 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T E7 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T EE 00 00 00 FE DD 74 FF 21 08 00 DD 4E F6 DD +R 00 00 01 00 +T F9 00 00 00 46 F7 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0B 00 +T 00 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T 06 01 00 00 28 00 DD 5E FC DD 56 FD 19 6E 26 +R 00 00 01 00 +T 11 01 00 00 00 7D DD AE F8 4F 7C DD AE F9 47 +R 00 00 01 00 +T 1C 01 00 00 79 E6 D0 6F 78 E6 00 67 7D DD AE +R 00 00 01 00 +T 27 01 00 00 F8 4F 7C DD AE F9 47 DD 71 F8 DD +R 00 00 01 00 +T 32 01 00 00 70 F9 DD 5E F6 DD 56 F7 13 13 3E +R 00 00 01 00 +T 3D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 42 01 00 00 00 00 00 00 21 28 00 DD 4E FC DD +R 00 00 01 00 02 04 00 00 +T 4B 01 00 00 46 FD 09 DD 46 F8 70 DD 5E FE DD +R 00 00 01 00 +T 56 01 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 5B 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 61 01 00 00 00 00 +R 00 00 01 00 +T 63 01 00 00 +R 00 00 01 00 +T 63 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/z80_lib/asy_stop.rel b/src/nos/lib/z80_lib/asy_stop.rel new file mode 100644 index 00000000..c5f868ad --- /dev/null +++ b/src/nos/lib/z80_lib/asy_stop.rel @@ -0,0 +1,139 @@ +XL4 +H 2 areas 11 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _stop_timer Ref00000000 +S _maskon Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _setirq Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _dirps Ref00000000 +S _maskoff Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _Asy Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 178 flags 0 +S _asy_stop Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 21 2C 00 DD +R 00 00 01 00 02 05 0A 00 +T 09 00 00 00 4E 02 DD 46 03 09 4E 23 46 11 +R 00 00 01 00 +T 13 00 00 00 58 00 CD 00 00 00 00 21 +R 00 00 01 00 02 07 0B 00 +T 19 00 00 00 00 00 00 00 19 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 0C 00 +T 22 00 00 00 7E 23 B6 20 06 +R 00 00 01 00 +T 27 00 00 00 +R 00 00 01 00 +T 27 00 00 00 21 FF FF C3 75 01 00 00 +R 00 00 01 00 00 08 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 DD 6E FA DD 66 FB AF 77 23 77 21 +R 00 00 01 00 +T 38 00 00 00 19 00 DD 4E FA DD 46 FB 09 46 23 +R 00 00 01 00 +T 43 00 00 00 66 68 DD 75 F8 DD 74 F9 21 24 00 +R 00 00 01 00 +T 4E 00 00 00 DD 4E 02 DD 46 03 09 7E 23 B6 28 +R 00 00 01 00 +T 59 00 00 00 37 +R 00 00 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 21 24 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T 65 00 00 00 23 66 6A DD 75 FC DD 74 FD 11 +R 00 00 01 00 +T 6F 00 00 00 06 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 76 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 7D 00 00 00 FC DD 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T 84 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 8A 00 00 00 24 00 09 AF 77 23 77 +R 00 00 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 21 08 00 DD 4E F8 DD 46 F9 09 EB +R 00 00 01 00 +T 9C 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0E 00 02 0A 0E 00 +T A2 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 00 00 2B 09 08 00 +T A7 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T AE 00 00 00 FE DD 74 FF 21 1B 00 DD 4E FA DD +R 00 00 01 00 +T B9 00 00 00 46 FB 09 7E 23 A6 3C 28 58 +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 21 21 00 DD 4E FA DD 46 FB 09 23 +R 00 00 01 00 +T CD 00 00 00 23 5E D5 2B 56 2B 5E D5 21 1B 00 +R 00 00 01 00 +T D8 00 00 00 09 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T DF 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T E6 00 00 00 21 24 00 09 7E B7 28 17 +R 00 00 01 00 +T EE 00 00 00 +R 00 00 01 00 +T EE 00 00 00 21 1B 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T F9 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T FE 00 00 00 00 00 00 00 CD 00 00 00 00 18 15 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 21 1B 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T 10 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 15 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 +R 00 00 01 00 +T 1A 01 00 00 21 25 00 DD 4E FA DD 46 FB 09 4E +R 00 00 01 00 +T 25 01 00 00 DD 5E F8 DD 56 F9 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0F 00 +T 2D 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0F 00 02 0A 00 00 +T 34 01 00 00 26 00 DD 4E FA DD 46 FB 09 4E 21 +R 00 00 01 00 +T 3F 01 00 00 04 00 DD 5E F8 DD 56 F9 19 EB 3E +R 00 00 01 00 +T 4A 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 4F 01 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 02 04 00 00 +T 58 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 5D 01 00 00 00 00 00 00 DD 6E FA DD 66 FB 23 +R 00 00 01 00 02 04 00 00 +T 66 01 00 00 23 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 07 00 +T 6D 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 73 01 00 00 00 00 +R 00 00 01 00 +T 75 01 00 00 +R 00 00 01 00 +T 75 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/z80_lib/asy_write.rel b/src/nos/lib/z80_lib/asy_write.rel new file mode 100644 index 00000000..cd92e6cb --- /dev/null +++ b/src/nos/lib/z80_lib/asy_write.rel @@ -0,0 +1,148 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _asytxint Ref00000000 +S _secclock Ref00000000 +S _setbit Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _dirps Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _Asy Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 182 flags 0 +S _asy_write Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F4 FF DD CB 03 7E +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 20 11 01 02 80 DD 6E 02 DD 66 03 +R 00 00 01 00 +T 14 00 00 00 3E 80 AC 67 ED 42 38 06 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 +R 00 00 01 00 +T 1C 00 00 00 21 FF FF C3 7F 01 00 00 +R 00 00 01 00 00 08 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 01 58 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 2C 00 00 00 00 00 00 00 21 00 00 00 00 19 DD +R 00 00 01 00 02 04 0A 00 02 09 0B 00 +T 33 00 00 00 75 F8 DD 74 F9 46 23 66 68 DD 75 +R 00 00 01 00 +T 3E 00 00 00 FE DD 74 FF 7D B4 20 06 +R 00 00 01 00 +T 46 00 00 00 +R 00 00 01 00 +T 46 00 00 00 21 FF FF C3 7F 01 00 00 +R 00 00 01 00 00 08 01 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 21 19 00 DD 4E F8 DD 46 F9 09 56 +R 00 00 01 00 +T 57 00 00 00 23 66 6A DD 75 F6 DD 74 F7 21 +R 00 00 01 00 +T 61 00 00 00 14 00 09 DD 75 F4 DD 74 F5 +R 00 00 01 00 +T 6A 00 00 00 +R 00 00 01 00 +T 6A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 70 00 00 00 00 00 00 00 DD 75 FC DD 74 FD 21 +R 00 00 01 00 02 04 00 00 +T 79 00 00 00 04 00 DD 4E F4 DD 46 F5 09 4E 06 +R 00 00 01 00 +T 84 00 00 00 00 DD 71 FA DD 70 FB 79 B0 20 02 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 18 23 +R 00 00 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 99 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T A0 00 00 00 14 00 DD 4E F8 DD 46 F9 09 EB 3E +R 00 00 01 00 +T AB 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T B0 00 00 00 00 00 00 00 18 B6 +R 00 00 01 00 02 04 00 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 DD 6E 04 DD 66 05 E5 DD 6E F4 DD +R 00 00 01 00 +T BF 00 00 00 66 F5 C1 71 23 70 DD 6E F4 DD 66 +R 00 00 01 00 +T CA 00 00 00 F5 23 23 DD 4E 0A DD 46 0B 71 23 +R 00 00 01 00 +T D5 00 00 00 70 21 04 00 DD 4E F4 DD 46 F5 09 +R 00 00 01 00 +T E0 00 00 00 36 01 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T E9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T EE 00 00 00 00 00 00 00 0E 01 21 04 00 DD 5E +R 00 00 01 00 02 04 00 00 +T F7 00 00 00 F6 DD 56 F7 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T FF 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 06 01 00 00 5E F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 0E 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 19 01 00 00 00 00 00 00 DD 75 FC DD 74 FD 21 +R 00 00 01 00 02 04 00 00 +T 22 01 00 00 04 00 DD 4E F4 DD 46 F5 09 4E 06 +R 00 00 01 00 +T 2D 01 00 00 00 DD 71 FA DD 70 FB DD 5E FC DD +R 00 00 01 00 +T 38 01 00 00 56 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 3D 01 00 00 00 00 00 00 CD 00 00 00 00 79 B0 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 44 01 00 00 20 02 +R 00 00 01 00 +T 46 01 00 00 +R 00 00 01 00 +T 46 01 00 00 18 15 +R 00 00 01 00 +T 48 01 00 00 +R 00 00 01 00 +T 48 01 00 00 21 14 00 DD 4E F8 DD 46 F9 09 EB +R 00 00 01 00 +T 53 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 59 01 00 00 00 00 00 00 18 B6 +R 00 00 01 00 02 04 00 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 21 61 00 DD 4E FE DD 46 FF 09 E5 +R 00 00 01 00 +T 68 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 6E 01 00 00 00 00 00 00 EB E1 73 23 72 23 71 +R 00 00 01 00 02 04 00 00 +T 77 01 00 00 23 70 DD 6E 0A DD 66 0B +R 00 00 01 00 +T 7F 01 00 00 +R 00 00 01 00 +T 7F 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 diff --git a/src/nos/lib/z80_lib/asycom.rel b/src/nos/lib/z80_lib/asycom.rel new file mode 100644 index 00000000..ed38d12a --- /dev/null +++ b/src/nos/lib/z80_lib/asycom.rel @@ -0,0 +1,91 @@ +XL4 +H 2 areas 9 global symbols +S _asyrxint Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _asytxint Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +S _inportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size B7 flags 0 +S _asycom Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 19 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FC DD 74 FD 01 04 00 09 EB 3E +R 00 00 01 00 +T 1F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 24 00 00 00 00 00 00 00 DD 75 FE +R 00 00 01 00 02 04 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 DD 7E FE E6 C2 28 63 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 7E FE E6 C0 28 26 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 00 00 +T 3F 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 00 00 02 0A 01 00 +T 46 00 00 00 04 00 DD 4E FC DD 46 FD 09 EB 3E +R 00 00 01 00 +T 51 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 56 00 00 00 00 00 00 00 DD 75 FE 18 D3 +R 00 00 01 00 02 04 01 00 +T 5D 00 00 00 +R 00 00 01 00 +T 5D 00 00 00 DD 7E FE E6 01 20 02 +R 00 00 01 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 18 2D +R 00 00 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 DD 7E FE E6 02 28 24 +R 00 00 01 00 +T 6D 00 00 00 +R 00 00 01 00 +T 6D 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 75 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 02 00 02 0A 01 00 +T 7C 00 00 00 04 00 DD 4E FC DD 46 FD 09 EB 3E +R 00 00 01 00 +T 87 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 8C 00 00 00 00 00 00 00 DD 75 FE +R 00 00 01 00 02 04 01 00 +T 91 00 00 00 +R 00 00 01 00 +T 91 00 00 00 18 96 +R 00 00 01 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 21 2B 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 9E 00 00 00 B7 28 0D 21 21 00 09 4E 23 46 23 +R 00 00 01 00 +T A9 00 00 00 7E 69 60 18 05 +R 00 00 01 00 +T AE 00 00 00 +R 00 00 01 00 +T AE 00 00 00 3E 00 21 00 00 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 4F C3 00 00 00 00 +R 00 00 01 00 02 06 06 00 diff --git a/src/nos/lib/z80_lib/asyint.rel b/src/nos/lib/z80_lib/asyint.rel new file mode 100644 index 00000000..1474de6a --- /dev/null +++ b/src/nos/lib/z80_lib/asyint.rel @@ -0,0 +1,23 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _asycom Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _Asy Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 19 flags 0 +S _asyint Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 01 58 00 CD +R 00 00 01 00 02 05 03 00 +T 07 00 00 00 00 00 00 00 21 00 00 00 00 19 EB +R 00 00 01 00 02 04 04 00 02 09 05 00 +T 0E 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 01 00 02 0A 01 00 +T 14 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 07 00 diff --git a/src/nos/lib/z80_lib/asyret.rel b/src/nos/lib/z80_lib/asyret.rel new file mode 100644 index 00000000..bf6638f6 --- /dev/null +++ b/src/nos/lib/z80_lib/asyret.rel @@ -0,0 +1,41 @@ +XL4 +H 4 areas 3 global symbols +S .__.ABS. Def00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 0 flags 0 +A IDATA0 size 78 flags 0 +S _Asyrat Def00000000 +A CDATA0 size 78 flags 0 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 00 00 80 51 01 00 01 00 +R 00 00 03 00 +T 08 00 00 00 80 BB 00 00 20 00 40 83 00 00 +R 00 00 03 00 +T 12 00 00 00 02 00 C0 5D 00 00 21 00 +R 00 00 03 00 +T 1A 00 00 00 A0 41 00 00 03 00 E0 2E 00 00 +R 00 00 03 00 +T 24 00 00 00 22 00 D0 20 00 00 04 00 +R 00 00 03 00 +T 2C 00 00 00 70 17 00 00 23 00 68 10 00 00 +R 00 00 03 00 +T 36 00 00 00 05 00 B8 0B 00 00 24 00 +R 00 00 03 00 +T 3E 00 00 00 34 08 00 00 06 00 DC 05 00 00 +R 00 00 03 00 +T 48 00 00 00 25 00 1A 04 00 00 07 00 +R 00 00 03 00 +T 50 00 00 00 EE 02 00 00 26 00 0D 02 00 00 +R 00 00 03 00 +T 5A 00 00 00 0E 00 77 01 00 00 27 00 +R 00 00 03 00 +T 62 00 00 00 07 01 00 00 0F 00 BC 00 00 00 +R 00 00 03 00 +T 6C 00 00 00 2E 00 71 00 00 00 2F 00 +R 00 00 03 00 +T 74 00 00 00 00 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/z80_lib/asyrxint.rel b/src/nos/lib/z80_lib/asyrxint.rel new file mode 100644 index 00000000..fb38a863 --- /dev/null +++ b/src/nos/lib/z80_lib/asyrxint.rel @@ -0,0 +1,180 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _ksignal Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1E8 flags 0 +S _asyrxint Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF AF DD 77 FC +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 DD 77 FD AF DD 77 FE DD 77 FF 21 +R 00 00 01 00 +T 14 00 00 00 30 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 21 19 00 DD 4E 02 DD +R 00 00 01 00 02 04 06 00 +T 27 00 00 00 46 03 09 56 23 66 6A DD 75 F8 DD +R 00 00 01 00 +T 32 00 00 00 74 F9 03 03 DD 71 F6 DD 70 F7 +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 21 04 00 DD 4E F8 DD 46 F9 09 EB +R 00 00 01 00 +T 47 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 4D 00 00 00 00 00 00 00 DD 75 FB 7D E6 40 28 +R 00 00 01 00 02 04 00 00 +T 56 00 00 00 0D +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 3C 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 62 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 64 00 00 00 +R 00 00 01 00 +T 64 00 00 00 DD 7E FB E6 80 CA 81 01 00 00 +R 00 00 01 00 00 0A 01 00 +T 6C 00 00 00 +R 00 00 01 00 +T 6C 00 00 00 21 38 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 77 00 00 00 00 00 00 00 21 08 00 DD 4E F8 DD +R 00 00 01 00 02 04 06 00 +T 80 00 00 00 46 F9 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T 87 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 8E 00 00 00 FA 21 12 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 99 00 00 00 7E 23 A6 3C 28 18 21 12 00 DD 4E +R 00 00 01 00 +T A4 00 00 00 02 DD 46 03 09 46 23 66 68 DD 4E +R 00 00 01 00 +T AF 00 00 00 FA 06 00 A7 ED 42 20 08 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 +R 00 00 01 00 +T B7 00 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T BF 00 00 00 +R 00 00 01 00 +T BF 00 00 00 21 08 00 DD 4E F6 DD 46 F7 09 56 +R 00 00 01 00 +T CA 00 00 00 23 66 6A E5 03 03 69 60 4E 23 46 +R 00 00 01 00 +T D5 00 00 00 E1 A7 ED 42 CA 72 01 00 00 +R 00 00 01 00 00 09 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 21 04 00 DD 4E F6 DD 46 F7 09 5E +R 00 00 01 00 +T E7 00 00 00 23 56 13 72 2B 73 1B EB DD 56 FA +R 00 00 01 00 +T F2 00 00 00 72 03 03 0A 6F 03 0A 67 E5 DD 6E +R 00 00 01 00 +T FD 00 00 00 F6 DD 66 F7 4E 23 46 E1 09 4D 44 +R 00 00 01 00 +T 08 01 00 00 21 04 00 DD 5E F6 DD 56 F7 19 56 +R 00 00 01 00 +T 13 01 00 00 23 66 6A A7 ED 42 38 14 +R 00 00 01 00 +T 1B 01 00 00 +R 00 00 01 00 +T 1B 01 00 00 21 04 00 DD 4E F6 DD 46 F7 09 E5 +R 00 00 01 00 +T 26 01 00 00 69 60 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 2F 01 00 00 +R 00 00 01 00 +T 2F 01 00 00 21 08 00 DD 4E F6 DD 46 F7 09 34 +R 00 00 01 00 +T 3A 01 00 00 23 20 01 34 +R 00 00 01 00 +T 3E 01 00 00 +R 00 00 01 00 +T 3E 01 00 00 21 08 00 09 5E 23 56 21 0A 00 09 +R 00 00 01 00 +T 49 01 00 00 46 23 66 68 A7 ED 52 30 16 +R 00 00 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 21 0A 00 DD 4E F6 DD 46 F7 09 E5 +R 00 00 01 00 +T 5D 01 00 00 21 08 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 18 0D +R 00 00 01 00 +T 72 01 00 00 +R 00 00 01 00 +T 72 01 00 00 21 0C 00 DD 4E F6 DD 46 F7 09 CD +R 00 00 01 00 +T 7D 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 7F 01 00 00 +R 00 00 01 00 +T 7F 01 00 00 18 02 +R 00 00 01 00 +T 81 01 00 00 +R 00 00 01 00 +T 81 01 00 00 18 03 +R 00 00 01 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 C3 3C 00 00 00 +R 00 00 01 00 00 05 01 00 +T 86 01 00 00 +R 00 00 01 00 +T 86 01 00 00 DD 6E FC DD 66 FD 7C 07 9F 4F 41 +R 00 00 01 00 +T 91 01 00 00 C5 E5 21 44 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 9C 01 00 00 09 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T A6 01 00 00 00 00 00 00 30 1C +R 00 00 01 00 02 04 04 00 +T AA 01 00 00 +R 00 00 01 00 +T AA 01 00 00 21 44 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T B5 01 00 00 5E FC DD 56 FD 7A 07 9F 4F 41 73 +R 00 00 01 00 +T C0 01 00 00 23 72 23 71 23 70 +R 00 00 01 00 +T C6 01 00 00 +R 00 00 01 00 +T C6 01 00 00 DD 7E FE DD B6 FF 28 11 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 01 01 00 DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T D8 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T DD 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 DD 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0B 01 00 diff --git a/src/nos/lib/z80_lib/asytimer.rel b/src/nos/lib/z80_lib/asytimer.rel new file mode 100644 index 00000000..bed3f4be --- /dev/null +++ b/src/nos/lib/z80_lib/asytimer.rel @@ -0,0 +1,94 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _asytxint Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _Asy Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size C9 flags 0 +S _asytimer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF AF DD 77 FC +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 DD 77 FD +R 00 00 01 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 01 02 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T 17 00 00 00 AC 67 ED 42 D2 C6 00 00 00 +R 00 00 01 00 00 09 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 01 58 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 28 00 00 00 00 00 00 00 21 00 00 00 00 19 DD +R 00 00 01 00 02 04 08 00 02 09 0A 00 +T 2F 00 00 00 75 F8 DD 74 F9 23 23 DD 75 FA DD +R 00 00 01 00 +T 3A 00 00 00 74 FB 01 08 00 09 7E 23 B6 28 11 +R 00 00 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 01 01 00 DD 5E FA DD 56 FB 3E +R 00 00 01 00 +T 4F 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 54 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 56 00 00 00 +R 00 00 01 00 +T 56 00 00 00 21 18 00 DD 4E F8 DD 46 F9 09 7E +R 00 00 01 00 +T 61 00 00 00 B7 28 57 21 19 00 DD 4E F8 DD 46 +R 00 00 01 00 +T 6C 00 00 00 F9 09 46 23 66 68 01 04 00 09 EB +R 00 00 01 00 +T 77 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T 7D 00 00 00 00 00 00 00 7D E6 02 28 37 +R 00 00 01 00 02 04 00 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 21 4C 00 DD 4E F8 DD 46 F9 09 CD +R 00 00 01 00 +T 8F 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 2B 09 05 00 +T 94 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 9B 00 00 00 FE DD 74 FF DD 5E F8 DD 56 F9 3E +R 00 00 01 00 +T A6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T AB 00 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 02 04 00 00 +T B4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T B9 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T BB 00 00 00 +R 00 00 01 00 +T BB 00 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 C3 0C 00 00 00 +R 00 00 01 00 00 05 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/z80_lib/asytxint.rel b/src/nos/lib/z80_lib/asytxint.rel new file mode 100644 index 00000000..e126fec6 --- /dev/null +++ b/src/nos/lib/z80_lib/asytxint.rel @@ -0,0 +1,103 @@ +XL4 +H 2 areas B global symbols +S _clrbit Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10D flags 0 +S _asytxint Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 19 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 56 23 66 6A DD +R 00 00 01 00 +T 14 00 00 00 75 FC DD 74 FD 21 14 00 09 DD 75 +R 00 00 01 00 +T 1F 00 00 00 FA DD 74 FB 21 34 00 09 CD +R 00 00 01 00 +T 28 00 00 00 00 00 00 00 21 04 00 DD 4E FA DD +R 00 00 01 00 02 04 06 00 +T 31 00 00 00 46 FB 09 7E B7 20 18 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 0E 01 21 04 00 DD 5E FC DD 56 FD +R 00 00 01 00 +T 43 00 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 00 00 +T 48 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T 4E 00 00 00 0A 01 00 00 +R 00 00 01 00 00 04 01 00 +T 50 00 00 00 +R 00 00 01 00 +T 50 00 00 00 21 04 00 DD 4E FC DD 46 FD 09 EB +R 00 00 01 00 +T 5B 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 61 00 00 00 00 00 00 00 7D E6 02 20 03 +R 00 00 01 00 02 04 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 C3 0A 01 00 00 +R 00 00 01 00 00 05 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 21 40 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 76 00 00 00 00 00 00 00 DD 6E FA DD 66 FB 4E +R 00 00 01 00 02 04 06 00 +T 7F 00 00 00 23 46 03 70 2B 71 0B 0A 4F 21 +R 00 00 01 00 +T 89 00 00 00 06 00 DD 5E FC DD 56 FD 19 EB 3E +R 00 00 01 00 +T 94 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 99 00 00 00 00 00 00 00 DD 6E FA DD 66 FB 23 +R 00 00 01 00 02 04 01 00 +T A2 00 00 00 23 4E 23 46 0B 70 2B 71 79 B0 28 +R 00 00 01 00 +T AD 00 00 00 18 21 04 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T B8 00 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T BE 00 00 00 CD 00 00 00 00 7D E6 02 20 A5 +R 00 00 01 00 02 05 01 00 +T C6 00 00 00 +R 00 00 01 00 +T C6 00 00 00 DD 6E FA DD 66 FB 23 23 7E 23 B6 +R 00 00 01 00 +T D1 00 00 00 20 37 +R 00 00 01 00 +T D3 00 00 00 +R 00 00 01 00 +T D3 00 00 00 21 04 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T DE 00 00 00 00 0E 01 21 04 00 DD 5E FC DD 56 +R 00 00 01 00 +T E9 00 00 00 FD 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 00 00 +T EF 00 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 00 00 02 09 01 00 +T F5 00 00 00 00 00 21 14 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 00 01 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 05 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 0A 01 00 00 +R 00 00 01 00 +T 0A 01 00 00 +R 00 00 01 00 +T 0A 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/z80_lib/copyr.rel b/src/nos/lib/z80_lib/copyr.rel new file mode 100644 index 00000000..88096420 --- /dev/null +++ b/src/nos/lib/z80_lib/copyr.rel @@ -0,0 +1,72 @@ +XL4 +H 3 areas 5 global symbols +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1D flags 0 +S _copyr Def00000000 +A RCODE size D8 flags 0 +S copyb Def00000000 +S copyr Def00000003 +T 00 00 00 00 FD E5 D5 FD E1 51 21 0B 00 39 46 +R 00 00 01 00 +T 0B 00 00 00 2B 4E 2B 2B 5E 2B 7E 2B 6E 67 CD +R 00 00 01 00 +T 16 00 00 00 03 00 00 00 FD E1 C3 00 00 00 00 +R 00 00 01 00 00 04 02 00 02 0B 00 00 +T 00 00 00 00 01 01 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 7B FE 04 D2 8B 00 00 00 79 E6 1F +R 00 00 02 00 00 08 02 00 +T 0C 00 00 00 C5 4F 06 00 F3 CD 5D 00 00 00 0C +R 00 00 02 00 00 0A 02 00 +T 15 00 00 00 0D 28 11 ED 38 30 EE 50 ED 39 30 +R 00 00 02 00 +T 20 00 00 00 FD 09 DC 87 00 00 00 09 DC +R 00 00 02 00 00 07 02 00 +T 27 00 00 00 89 00 00 00 +R 00 00 02 00 00 04 02 00 +T 29 00 00 00 +R 00 00 02 00 +T 29 00 00 00 C1 3E 05 CB 38 CB 19 3D 20 F9 18 +R 00 00 02 00 +T 34 00 00 00 22 C5 01 20 00 FB ED 09 26 F3 ED +R 00 00 02 00 +T 3F 00 00 00 30 26 CC 5D 00 00 00 ED 38 30 EE +R 00 00 02 00 00 07 02 00 +T 48 00 00 00 50 ED 39 30 FD 09 DC 87 00 00 00 +R 00 00 02 00 00 0B 02 00 +T 51 00 00 00 09 DC 89 00 00 00 C1 0B 78 B1 20 +R 00 00 02 00 00 06 02 00 +T 5A 00 00 00 DA FB C9 +R 00 00 02 00 +T 5D 00 00 00 +R 00 00 02 00 +T 5D 00 00 00 ED 09 26 ED 01 27 18 05 3E 01 ED +R 00 00 02 00 +T 68 00 00 00 39 26 E5 FD E5 ED 29 23 ED 21 24 +R 00 00 02 00 +T 73 00 00 00 ED 19 25 E1 ED 29 20 ED 21 21 ED +R 00 00 02 00 +T 7E 00 00 00 11 22 E1 3E 02 ED 39 31 C9 14 C9 +R 00 00 02 00 +T 89 00 00 00 1C C9 C5 AF F3 ED 39 26 ED 39 27 +R 00 00 02 00 +T 94 00 00 00 3E 04 CB 38 CB 19 3D 20 F9 78 B1 +R 00 00 02 00 +T 9F 00 00 00 28 0E C5 01 10 00 CD B7 00 00 00 +R 00 00 02 00 00 0B 02 00 +T A8 00 00 00 C1 0B F3 78 B1 20 F2 C1 47 79 E6 +R 00 00 02 00 +T B3 00 00 00 0F 28 20 4F ED 30 26 CC +R 00 00 02 00 +T BB 00 00 00 65 00 00 00 FD 09 DC 87 00 00 00 +R 00 00 02 00 00 04 02 00 00 0B 02 00 +T C2 00 00 00 09 DC 89 00 00 00 41 0E 01 ED 38 +R 00 00 02 00 00 06 02 00 +T CB 00 00 00 30 EE 50 ED 39 30 ED 09 26 10 F8 +R 00 00 02 00 +T D6 00 00 00 FB C9 +R 00 00 02 00 diff --git a/src/nos/lib/z80_lib/diag.rel b/src/nos/lib/z80_lib/diag.rel new file mode 100644 index 00000000..647e37aa --- /dev/null +++ b/src/nos/lib/z80_lib/diag.rel @@ -0,0 +1,133 @@ +XL4 +H 3 areas 14 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _Stkchk Ref00000000 +S .__.ABS. Def00000000 +S _chkstk Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5C flags 0 +S _diag_open Def0000001B +S _dputter Def00000048 +S _acrlf Def0000000E +S _diag_close Def0000001B +S _abyte Def00000007 +S _amess Def00000014 +S _ahexw Def00000000 +S _diag_write Def00000021 +A RCODE size 67 flags 0 +S ahexb Def00000005 +S acrlf Def0000004D +S ahexn Def0000000E +S abyte Def00000016 +S amess Def00000056 +S ahexw Def00000000 +S amess_loop Def0000005E +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 EB CD 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 06 02 00 02 0B 01 00 +T 07 00 00 00 +R 00 00 01 00 +T 07 00 00 00 7B CD 16 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 06 02 00 02 0B 01 00 +T 0E 00 00 00 +R 00 00 01 00 +T 0E 00 00 00 CD 4D 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 05 02 00 02 0A 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 EB CD 5E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 00 06 02 00 02 0B 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 04 00 39 5E 23 56 18 06 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 0A 03 CD 16 00 00 00 1B +R 00 00 01 00 00 07 02 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 7B B2 20 F6 C3 00 00 00 00 +R 00 00 01 00 02 09 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 1A FE 0A 20 07 3E 0D CD +R 00 00 01 00 +T 3F 00 00 00 16 00 00 00 3E 0A +R 00 00 01 00 00 04 02 00 +T 43 00 00 00 +R 00 00 01 00 +T 43 00 00 00 CD 16 00 00 00 13 0B +R 00 00 01 00 00 05 02 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 2A 00 00 00 00 7D B4 21 +R 00 00 01 00 02 05 02 00 +T 4E 00 00 00 00 00 00 00 3E 00 00 00 00 C4 +R 00 00 01 00 02 04 04 00 2B 09 04 00 +T 53 00 00 00 00 00 00 00 79 B0 20 DE C3 +R 00 00 01 00 02 04 00 00 +T 5A 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 7C CD 05 00 00 00 7D +R 00 00 02 00 00 06 02 00 +T 05 00 00 00 +R 00 00 02 00 +T 05 00 00 00 F5 0F 0F 0F 0F CD 0E 00 00 00 F1 +R 00 00 02 00 00 0A 02 00 +T 0E 00 00 00 +R 00 00 02 00 +T 0E 00 00 00 E6 0F C6 90 27 CE 40 27 +R 00 00 02 00 +T 16 00 00 00 +R 00 00 02 00 +T 16 00 00 00 F5 ED 57 EA 3F 00 00 00 ED 38 05 +R 00 00 02 00 00 08 02 00 +T 1F 00 00 00 E6 02 20 0C +R 00 00 02 00 +T 23 00 00 00 +R 00 00 02 00 +T 23 00 00 00 ED 38 05 E6 02 28 F9 F1 ED 39 07 +R 00 00 02 00 +T 2E 00 00 00 C9 +R 00 00 02 00 +T 2F 00 00 00 +R 00 00 02 00 +T 2F 00 00 00 F1 ED 39 07 F5 +R 00 00 02 00 +T 34 00 00 00 +R 00 00 02 00 +T 34 00 00 00 ED 38 05 E6 02 28 F9 F1 C9 +R 00 00 02 00 +T 3D 00 00 00 +R 00 00 02 00 +T 3D 00 00 00 FB 00 +R 00 00 02 00 +T 3F 00 00 00 +R 00 00 02 00 +T 3F 00 00 00 F3 ED 38 05 E6 02 28 F6 F1 ED 39 +R 00 00 02 00 +T 4A 00 00 00 07 FB C9 +R 00 00 02 00 +T 4D 00 00 00 +R 00 00 02 00 +T 4D 00 00 00 3E 0D CD 16 00 00 00 3E 0A 18 C0 +R 00 00 02 00 00 07 02 00 +T 56 00 00 00 +R 00 00 02 00 +T 56 00 00 00 E3 F5 CD 5E 00 00 00 F1 E3 C9 +R 00 00 02 00 00 07 02 00 +T 5E 00 00 00 +R 00 00 02 00 +T 5E 00 00 00 7E 23 B7 C8 CD 16 00 00 00 18 F7 +R 00 00 02 00 00 09 02 00 diff --git a/src/nos/lib/z80_lib/dirutil.rel b/src/nos/lib/z80_lib/dirutil.rel new file mode 100644 index 00000000..9b211fcd --- /dev/null +++ b/src/nos/lib/z80_lib/dirutil.rel @@ -0,0 +1,1082 @@ +XL4 +H 4 areas 2C global symbols +S ?US_RSH_L02 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0137_7643__25s_0a Ref00000000 +S _sprintf Ref00000000 +S ___0022_a0dd__0a Ref00000000 +S _chdir Ref00000000 +S _fseek Ref00000000 +S _strcat Ref00000000 +S __fputs Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _mkdir Ref00000000 +S _strlen Ref00000000 +S __fprintf Ref00000000 +S _strdupw Ref00000000 +S _strcmp Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _perror Ref00000000 +S _readdir Ref00000000 +S _rmdir Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___01ff_79e8_Can_27t_20change_20 Ref00000000 +S _mallocw Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _tmpfile Ref00000000 +S _opendir Ref00000000 +S _fputs Ref00000000 +S __printf Ref00000000 +S ?US_MOD_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0145_f768__25s_20file_25s_2e_ Ref00000000 +S _stat Ref00000000 +S _getcwd Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A2E flags 0 +S _domkd Def000004F6 +S _dodir Def000004A0 +S _dormd Def00000525 +S _docd Def00000424 +S _filedir Def00000187 +S _getdir Def0000020A +S _dir Def00000000 +A CSTR size 69 flags 0 +A UDATA0 size 50 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 3E +R 00 00 01 00 02 05 18 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1C 00 02 09 1C 00 +T 0B 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 01 00 +T 14 00 00 00 B4 28 4B +R 00 00 01 00 +T 17 00 00 00 +R 00 00 01 00 +T 17 00 00 00 DD 6E FE DD 66 FF E5 DD 4E 04 DD +R 00 00 01 00 +T 22 00 00 00 46 05 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 2B 00 00 00 0A 02 00 00 21 0A 02 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 30 00 00 00 00 00 00 00 F1 21 00 00 E5 21 +R 00 00 01 00 02 04 01 00 +T 38 00 00 00 00 00 E5 21 00 00 E5 DD 5E FE DD +R 00 00 01 00 +T 43 00 00 00 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 48 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 4F 00 00 00 F1 21 10 00 DD 4E FE DD 46 FF 09 +R 00 00 01 00 +T 5A 00 00 00 CB 86 21 10 00 09 CB 8E +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 CD 00 00 00 00 E0 FF DD 5E 02 DD +R 00 00 01 00 02 05 18 00 +T 74 00 00 00 56 03 7B B2 20 2D +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 82 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 1D 00 02 0A 01 00 +T 89 00 00 00 DD 6E 08 DD 66 09 C1 71 23 70 DD +R 00 00 01 00 +T 94 00 00 00 6E 08 DD 66 09 7E 23 B6 20 09 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 AF DD 77 E0 DD 77 E1 18 3B +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 +R 00 00 01 00 +T A7 00 00 00 DD 6E 08 DD 66 09 23 23 E5 DD 6E +R 00 00 01 00 +T B2 00 00 00 08 DD 66 09 5E 23 56 3E +R 00 00 01 00 +T BA 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 11 00 02 09 11 00 +T BF 00 00 00 00 00 00 00 4D 44 E1 71 23 70 DD +R 00 00 01 00 02 04 01 00 +T C8 00 00 00 6E 08 DD 66 09 23 23 7E 23 B6 28 +R 00 00 01 00 +T D3 00 00 00 04 0E 01 18 02 +R 00 00 01 00 +T D8 00 00 00 +R 00 00 01 00 +T D8 00 00 00 0E 00 +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 06 00 DD 71 E0 DD 70 E1 +R 00 00 01 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 21 04 00 DD 4E 08 DD 46 09 09 E5 +R 00 00 01 00 +T ED 00 00 00 03 03 0A 6F 03 0A 67 01 06 00 09 +R 00 00 01 00 +T F8 00 00 00 4D 44 E1 71 23 70 21 02 00 39 4D +R 00 00 01 00 +T 03 01 00 00 44 21 04 00 DD 5E 08 DD 56 09 19 +R 00 00 01 00 +T 0E 01 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 23 00 +T 14 01 00 00 00 00 00 00 CD 00 00 00 00 CB 7C +R 00 00 01 00 02 04 23 00 02 09 01 00 +T 1B 01 00 00 28 05 +R 00 00 01 00 +T 1D 01 00 00 +R 00 00 01 00 +T 1D 01 00 00 21 00 00 18 62 +R 00 00 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 21 06 00 DD 4E 08 DD 46 09 09 DD +R 00 00 01 00 +T 2D 01 00 00 5E E6 DD 56 E7 73 23 72 21 08 00 +R 00 00 01 00 +T 38 01 00 00 09 DD 5E F8 DD 56 F9 73 23 72 21 +R 00 00 01 00 +T 43 01 00 00 0A 00 09 E5 21 1A 00 39 4E 23 46 +R 00 00 01 00 +T 4E 01 00 00 23 5E 23 56 69 60 6B 62 11 00 00 +R 00 00 01 00 +T 59 01 00 00 4B 42 EB E1 73 23 72 21 0C 00 DD +R 00 00 01 00 +T 64 01 00 00 4E 08 DD 46 09 09 E5 21 12 00 39 +R 00 00 01 00 +T 6F 01 00 00 5E 23 56 23 4E 23 46 E1 73 23 72 +R 00 00 01 00 +T 7A 01 00 00 23 71 23 70 DD 6E E0 DD 66 E1 +R 00 00 01 00 +T 84 01 00 00 +R 00 00 01 00 +T 84 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0F 00 +T 87 01 00 00 +R 00 00 01 00 +T 87 01 00 00 CD 00 00 00 00 FE FF 79 B0 20 21 +R 00 00 01 00 02 05 18 00 +T 90 01 00 00 +R 00 00 01 00 +T 90 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1D 00 +T 98 01 00 00 21 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 05 1D 00 02 0A 01 00 +T 9F 01 00 00 00 00 00 00 2A 00 00 00 00 7D B4 +R 00 00 01 00 00 04 03 00 00 09 03 00 +T A6 01 00 00 20 09 +R 00 00 01 00 +T A8 01 00 00 +R 00 00 01 00 +T A8 01 00 00 AF DD 77 FE DD 77 FF 18 26 +R 00 00 01 00 +T B1 01 00 00 +R 00 00 01 00 +T B1 01 00 00 +R 00 00 01 00 +T B1 01 00 00 ED 5B 00 00 00 00 3E 00 00 00 00 +R 00 00 01 00 00 06 03 00 2B 0B 11 00 +T B7 01 00 00 21 00 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 02 05 11 00 02 0A 01 00 +T BE 01 00 00 02 00 00 00 2A 02 00 00 00 7D B4 +R 00 00 01 00 00 04 03 00 00 09 03 00 +T C5 01 00 00 28 04 0E 01 18 02 +R 00 00 01 00 +T CB 01 00 00 +R 00 00 01 00 +T CB 01 00 00 0E 00 +R 00 00 01 00 +T CD 01 00 00 +R 00 00 01 00 +T CD 01 00 00 06 00 DD 71 FE DD 70 FF 18 00 +R 00 00 01 00 +T D7 01 00 00 +R 00 00 01 00 +T D7 01 00 00 DD 7E FE DD B6 FF 20 0A +R 00 00 01 00 +T DF 01 00 00 +R 00 00 01 00 +T DF 01 00 00 DD 6E 0A DD 66 0B 36 00 18 17 +R 00 00 01 00 +T E9 01 00 00 +R 00 00 01 00 +T E9 01 00 00 2A 02 00 00 00 01 06 00 09 4D 44 +R 00 00 01 00 00 05 03 00 +T F2 01 00 00 DD 5E 0A DD 56 0B 3E 00 00 00 00 +R 00 00 01 00 2B 0B 17 00 +T FA 01 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 17 00 02 0A 01 00 +T 00 02 00 00 +R 00 00 01 00 +T 00 02 00 00 DD 6E FE DD 66 FF 2B C3 +R 00 00 01 00 +T 08 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 09 00 +T 0A 02 00 00 +R 00 00 01 00 +T 0A 02 00 00 CD 00 00 00 00 E4 FF AF DD 77 F4 +R 00 00 01 00 02 05 18 00 +T 13 02 00 00 DD 77 F5 AF DD 77 F6 DD 77 F7 DD +R 00 00 01 00 +T 1E 02 00 00 5E 02 DD 56 03 CD 0E 06 00 00 DD +R 00 00 01 00 00 0A 01 00 +T 27 02 00 00 75 02 DD 74 03 AF DD 77 F8 DD 77 +R 00 00 01 00 +T 32 02 00 00 F9 +R 00 00 01 00 +T 33 02 00 00 +R 00 00 01 00 +T 33 02 00 00 21 00 00 39 E5 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 3E 02 00 00 DD 5E F4 DD 56 F5 CD 6B 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 47 02 00 00 F1 7D B4 20 03 +R 00 00 01 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 C3 42 03 00 00 +R 00 00 01 00 00 05 01 00 +T 4F 02 00 00 +R 00 00 01 00 +T 4F 02 00 00 DD 36 F4 01 DD 36 F5 00 DD 6E E8 +R 00 00 01 00 +T 5A 02 00 00 DD 66 E9 7E FE 2E 20 02 +R 00 00 01 00 +T 62 02 00 00 +R 00 00 01 00 +T 62 02 00 00 18 CF +R 00 00 01 00 +T 64 02 00 00 +R 00 00 01 00 +T 64 02 00 00 11 12 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 1A 00 +T 6A 02 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 1A 00 02 09 01 00 +T 71 02 00 00 FC DD 74 FD EB 13 13 21 00 00 39 +R 00 00 01 00 +T 7C 02 00 00 01 10 00 ED B0 DD 7E F8 DD B6 F9 +R 00 00 01 00 +T 87 02 00 00 28 21 21 06 00 DD 4E F8 DD 46 F9 +R 00 00 01 00 +T 92 02 00 00 09 4E 23 46 21 06 00 DD 5E FC DD +R 00 00 01 00 +T 9D 02 00 00 56 FD 19 5E 23 56 CD B6 03 00 00 +R 00 00 01 00 00 0B 01 00 +T A6 02 00 00 CB 7C 28 1F +R 00 00 01 00 +T AA 02 00 00 +R 00 00 01 00 +T AA 02 00 00 +R 00 00 01 00 +T AA 02 00 00 +R 00 00 01 00 +T AA 02 00 00 DD 6E F8 DD 66 F9 E5 DD 6E FC DD +R 00 00 01 00 +T B5 02 00 00 66 FD C1 71 23 70 DD 6E FC DD 66 +R 00 00 01 00 +T C0 02 00 00 FD DD 75 F8 DD 74 F9 18 76 +R 00 00 01 00 +T C9 02 00 00 +R 00 00 01 00 +T C9 02 00 00 DD 6E F8 DD 66 F9 DD 75 FE DD 74 +R 00 00 01 00 +T D4 02 00 00 FF +R 00 00 01 00 +T D5 02 00 00 +R 00 00 01 00 +T D5 02 00 00 DD 6E FE DD 66 FF 7E 23 B6 28 39 +R 00 00 01 00 +T E0 02 00 00 +R 00 00 01 00 +T E0 02 00 00 DD 6E FE DD 66 FF 46 23 66 68 01 +R 00 00 01 00 +T EB 02 00 00 06 00 09 4E 23 46 21 06 00 DD 5E +R 00 00 01 00 +T F6 02 00 00 FC DD 56 FD 19 5E 23 56 CD +R 00 00 01 00 +T FF 02 00 00 B6 03 00 00 CB 7C 28 02 +R 00 00 01 00 00 04 01 00 +T 05 03 00 00 +R 00 00 01 00 +T 05 03 00 00 18 12 +R 00 00 01 00 +T 07 03 00 00 +R 00 00 01 00 +T 07 03 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T 12 03 00 00 75 FE DD 74 FF 18 BC +R 00 00 01 00 +T 19 03 00 00 +R 00 00 01 00 +T 19 03 00 00 DD 6E FE DD 66 FF 46 23 66 68 E5 +R 00 00 01 00 +T 24 03 00 00 DD 6E FC DD 66 FD C1 71 23 70 DD +R 00 00 01 00 +T 2F 03 00 00 6E FC DD 66 FD E5 DD 6E FE DD 66 +R 00 00 01 00 +T 3A 03 00 00 FF C1 71 23 70 +R 00 00 01 00 +T 3F 03 00 00 +R 00 00 01 00 +T 3F 03 00 00 C3 33 02 00 00 +R 00 00 01 00 00 05 01 00 +T 42 03 00 00 +R 00 00 01 00 +T 42 03 00 00 DD 6E F8 DD 66 F9 DD 75 FA DD 74 +R 00 00 01 00 +T 4D 03 00 00 FB +R 00 00 01 00 +T 4E 03 00 00 +R 00 00 01 00 +T 4E 03 00 00 DD 7E FA DD B6 FB 28 3A +R 00 00 01 00 +T 56 03 00 00 +R 00 00 01 00 +T 56 03 00 00 DD 6E F6 DD 66 F7 23 DD 75 F6 DD +R 00 00 01 00 +T 61 03 00 00 74 F7 E5 DD 6E 04 DD 66 05 E5 DD +R 00 00 01 00 +T 6C 03 00 00 4E FA DD 46 FB 03 03 DD 5E 0A DD +R 00 00 01 00 +T 77 03 00 00 56 0B CD E2 06 00 00 E1 E1 DD 6E +R 00 00 01 00 00 07 01 00 +T 80 03 00 00 FA DD 66 FB 46 23 66 68 DD 75 FA +R 00 00 01 00 +T 8B 03 00 00 DD 74 FB 18 BE +R 00 00 01 00 +T 90 03 00 00 +R 00 00 01 00 +T 90 03 00 00 DD 5E F8 DD 56 F9 CD C5 09 00 00 +R 00 00 01 00 00 0B 01 00 +T 99 03 00 00 DD 7E 04 DD B6 05 28 0F +R 00 00 01 00 +T A1 03 00 00 +R 00 00 01 00 +T A1 03 00 00 DD 4E F6 DD 46 F7 DD 5E 0A DD 56 +R 00 00 01 00 +T AC 03 00 00 0B CD BC 08 00 00 +R 00 00 01 00 00 06 01 00 +T B0 03 00 00 +R 00 00 01 00 +T B0 03 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 09 00 +T B6 03 00 00 +R 00 00 01 00 +T B6 03 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 18 00 +T BB 03 00 00 +R 00 00 01 00 +T BB 03 00 00 +R 00 00 01 00 +T BB 03 00 00 DD 6E 02 DD 66 03 7E FE 2E 20 05 +R 00 00 01 00 +T C6 03 00 00 +R 00 00 01 00 +T C6 03 00 00 21 FF FF 18 54 +R 00 00 01 00 +T CB 03 00 00 +R 00 00 01 00 +T CB 03 00 00 DD 6E 04 DD 66 05 7E FE 2E 20 05 +R 00 00 01 00 +T D6 03 00 00 +R 00 00 01 00 +T D6 03 00 00 21 01 00 18 44 +R 00 00 01 00 +T DB 03 00 00 +R 00 00 01 00 +T DB 03 00 00 DD 6E 04 DD 66 05 23 DD 75 04 DD +R 00 00 01 00 +T E6 03 00 00 74 05 2B 4E 06 00 DD 6E 02 DD 66 +R 00 00 01 00 +T F1 03 00 00 03 6E 26 00 A7 ED 42 DD 75 FE DD +R 00 00 01 00 +T FC 03 00 00 74 FF 7D B4 28 08 +R 00 00 01 00 +T 02 04 00 00 +R 00 00 01 00 +T 02 04 00 00 DD 6E FE DD 66 FF 18 15 +R 00 00 01 00 +T 0A 04 00 00 +R 00 00 01 00 +T 0A 04 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T 15 04 00 00 74 03 2B 7E B7 20 06 +R 00 00 01 00 +T 1C 04 00 00 +R 00 00 01 00 +T 1C 04 00 00 21 FF FF +R 00 00 01 00 +T 1F 04 00 00 +R 00 00 01 00 +T 1F 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0F 00 +T 22 04 00 00 +R 00 00 01 00 +T 22 04 00 00 18 97 +R 00 00 01 00 +T 24 04 00 00 +R 00 00 01 00 +T 24 04 00 00 CD 00 00 00 00 80 FF DD 4E 02 DD +R 00 00 01 00 02 05 18 00 +T 2D 04 00 00 46 03 21 01 00 CD 00 00 00 00 30 +R 00 00 01 00 02 0A 1B 00 +T 36 04 00 00 2E +R 00 00 01 00 +T 37 04 00 00 +R 00 00 01 00 +T 37 04 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T 42 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 05 00 02 0A 05 00 +T 48 04 00 00 00 00 00 00 7D A4 3C 20 16 +R 00 00 01 00 02 04 01 00 +T 4F 04 00 00 +R 00 00 01 00 +T 4F 04 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 19 00 02 0B 19 00 +T 55 04 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1F 00 02 0B 1F 00 +T 5B 04 00 00 CD 00 00 00 00 F1 F1 21 01 00 18 +R 00 00 01 00 02 05 01 00 +T 64 04 00 00 38 +R 00 00 01 00 +T 65 04 00 00 +R 00 00 01 00 +T 65 04 00 00 +R 00 00 01 00 +T 65 04 00 00 01 80 00 21 00 00 39 5D 54 3E +R 00 00 01 00 +T 6F 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 24 00 02 09 24 00 +T 74 04 00 00 00 00 00 00 7D B4 28 20 +R 00 00 01 00 02 04 01 00 +T 7A 04 00 00 +R 00 00 01 00 +T 7A 04 00 00 21 00 00 39 5D 54 CD 01 0A 00 00 +R 00 00 01 00 00 0B 01 00 +T 83 04 00 00 21 00 00 39 E5 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 02 00 +T 8B 04 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 02 00 2B 0B 1F 00 +T 91 04 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 1F 00 02 0A 01 00 +T 98 04 00 00 F1 F1 +R 00 00 01 00 +T 9A 04 00 00 +R 00 00 01 00 +T 9A 04 00 00 21 00 00 +R 00 00 01 00 +T 9D 04 00 00 +R 00 00 01 00 +T 9D 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 09 00 +T A0 04 00 00 +R 00 00 01 00 +T A0 04 00 00 CD 00 00 00 00 FE FF 11 02 80 DD +R 00 00 01 00 02 05 18 00 +T A9 04 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T B4 04 00 00 38 14 +R 00 00 01 00 +T B6 04 00 00 +R 00 00 01 00 +T B6 04 00 00 DD 6E 04 DD 66 05 23 23 46 23 66 +R 00 00 01 00 +T C1 04 00 00 68 DD 75 FE DD 74 FF 18 08 +R 00 00 01 00 +T CA 04 00 00 +R 00 00 01 00 +T CA 04 00 00 DD 36 FE 00 00 00 00 DD 36 FF +R 00 00 01 00 09 07 02 00 +T D1 04 00 00 00 00 00 00 +R 00 00 01 00 89 04 02 00 +T D2 04 00 00 +R 00 00 01 00 +T D2 04 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 13 00 +T DB 04 00 00 23 46 C5 01 01 00 DD 5E FE DD 56 +R 00 00 01 00 +T E6 04 00 00 FF 3E 0A 02 00 00 21 0A 02 00 00 +R 00 00 01 00 29 06 01 00 00 0B 01 00 +T EC 04 00 00 CD 00 00 00 00 F1 21 00 00 C3 +R 00 00 01 00 02 05 01 00 +T F4 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 09 00 +T F6 04 00 00 +R 00 00 01 00 +T F6 04 00 00 CD 00 00 00 00 01 FF 01 DD 6E 04 +R 00 00 01 00 02 05 16 00 +T FF 04 00 00 DD 66 05 23 23 5E 23 56 3E +R 00 00 01 00 +T 08 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 0D 05 00 00 00 00 00 00 7D A4 3C 20 0B +R 00 00 01 00 02 04 01 00 +T 14 05 00 00 +R 00 00 01 00 +T 14 05 00 00 11 04 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 10 00 +T 1A 05 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 1F 05 00 00 +R 00 00 01 00 +T 1F 05 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 09 00 +T 25 05 00 00 +R 00 00 01 00 +T 25 05 00 00 CD 00 00 00 00 03 03 0A 5F 03 0A +R 00 00 01 00 02 05 16 00 +T 2E 05 00 00 57 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T 34 05 00 00 CD 00 00 00 00 7D A4 3C 20 0B +R 00 00 01 00 02 05 01 00 +T 3C 05 00 00 +R 00 00 01 00 +T 3C 05 00 00 11 10 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 05 02 00 2B 0A 10 00 +T 42 05 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 47 05 00 00 +R 00 00 01 00 +T 47 05 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 09 00 +T 4D 05 00 00 +R 00 00 01 00 +T 4D 05 00 00 CD 00 00 00 00 F8 FF DD 5E 02 DD +R 00 00 01 00 02 05 18 00 +T 56 05 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0B 00 +T 5B 05 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 0B 00 02 09 01 00 +T 62 05 00 00 FE DD 74 FF DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 6D 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 72 05 00 00 00 00 00 00 DD 75 F8 DD 74 F9 DD +R 00 00 01 00 02 04 01 00 +T 7B 05 00 00 75 FA DD 74 FB 21 FF FF DD 4E FE +R 00 00 01 00 +T 86 05 00 00 DD 46 FF 09 EB 01 03 00 CD +R 00 00 01 00 +T 8F 05 00 00 00 00 00 00 13 DD 73 FC DD 72 FD +R 00 00 01 00 02 04 20 00 +T 98 05 00 00 +R 00 00 01 00 +T 98 05 00 00 DD 6E F8 DD 66 F9 AF B6 28 53 +R 00 00 01 00 +T A2 05 00 00 +R 00 00 01 00 +T A2 05 00 00 DD 6E F8 DD 66 F9 23 DD 75 F8 DD +R 00 00 01 00 +T AD 05 00 00 74 F9 2B 46 DD 6E 02 DD 66 03 23 +R 00 00 01 00 +T B8 05 00 00 DD 75 02 DD 74 03 2B 70 DD 6E FC +R 00 00 01 00 +T C3 05 00 00 DD 66 FD 2B DD 75 FC DD 74 FD 7D +R 00 00 01 00 +T CE 05 00 00 B4 20 22 DD 6E F8 DD 66 F9 AF B6 +R 00 00 01 00 +T D9 05 00 00 28 18 +R 00 00 01 00 +T DB 05 00 00 +R 00 00 01 00 +T DB 05 00 00 +R 00 00 01 00 +T DB 05 00 00 +R 00 00 01 00 +T DB 05 00 00 DD 6E 02 DD 66 03 23 DD 75 02 DD +R 00 00 01 00 +T E6 05 00 00 74 03 2B 36 2C DD 36 FC 03 DD 36 +R 00 00 01 00 +T F1 05 00 00 FD 00 +R 00 00 01 00 +T F3 05 00 00 +R 00 00 01 00 +T F3 05 00 00 18 A3 +R 00 00 01 00 +T F5 05 00 00 +R 00 00 01 00 +T F5 05 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T FD 05 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 15 00 02 0A 01 00 +T 04 06 00 00 6E 02 DD 66 03 36 00 C3 +R 00 00 01 00 +T 0C 06 00 00 00 00 00 00 +R 00 00 01 00 02 04 0F 00 +T 0E 06 00 00 +R 00 00 01 00 +T 0E 06 00 00 CD 00 00 00 00 F0 FF DD 7E 02 DD +R 00 00 01 00 02 05 18 00 +T 17 06 00 00 B6 03 28 34 DD 6E 02 DD 66 03 AF +R 00 00 01 00 +T 22 06 00 00 B6 28 2A 01 1C 00 00 00 DD 5E 02 +R 00 00 01 00 00 08 02 00 +T 2B 06 00 00 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T 31 06 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 38 06 00 00 28 15 01 1E 00 00 00 DD 5E 02 DD +R 00 00 01 00 00 07 02 00 +T 41 06 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 46 06 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 4D 06 00 00 20 08 +R 00 00 01 00 +T 4F 06 00 00 +R 00 00 01 00 +T 4F 06 00 00 +R 00 00 01 00 +T 4F 06 00 00 +R 00 00 01 00 +T 4F 06 00 00 DD 36 02 20 00 00 00 DD 36 03 +R 00 00 01 00 09 07 02 00 +T 56 06 00 00 20 00 00 00 +R 00 00 01 00 89 04 02 00 +T 57 06 00 00 +R 00 00 01 00 +T 57 06 00 00 21 00 00 39 E5 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 62 06 00 00 11 00 00 CD 6B 00 00 00 F1 7D B4 +R 00 00 01 00 00 08 01 00 +T 6B 06 00 00 28 6C DD 7E F6 E6 00 47 DD 7E F7 +R 00 00 01 00 +T 76 06 00 00 E6 40 B0 28 5E 21 00 00 39 E5 DD +R 00 00 01 00 +T 81 06 00 00 4E 02 DD 46 03 11 01 00 CD +R 00 00 01 00 +T 8A 06 00 00 6B 00 00 00 F1 7D B4 20 48 +R 00 00 01 00 00 04 01 00 +T 91 06 00 00 +R 00 00 01 00 +T 91 06 00 00 +R 00 00 01 00 +T 91 06 00 00 +R 00 00 01 00 +T 91 06 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 99 06 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 0B 00 02 0A 01 00 +T A0 06 00 00 04 00 09 4D 44 21 3F 00 A7 ED 42 +R 00 00 01 00 +T AB 06 00 00 30 08 +R 00 00 01 00 +T AD 06 00 00 +R 00 00 01 00 +T AD 06 00 00 DD 6E 02 DD 66 03 18 2A +R 00 00 01 00 +T B5 06 00 00 +R 00 00 01 00 +T B5 06 00 00 DD 4E 02 DD 46 03 11 10 00 00 00 +R 00 00 01 00 00 0B 03 00 +T BE 06 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T C4 06 00 00 00 00 00 00 01 20 00 00 00 11 +R 00 00 01 00 02 04 01 00 00 09 02 00 +T CA 06 00 00 10 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 07 00 +T CF 06 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T D5 06 00 00 10 00 00 00 18 06 +R 00 00 01 00 00 04 03 00 +T D9 06 00 00 +R 00 00 01 00 +T D9 06 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 +T DF 06 00 00 +R 00 00 01 00 +T DF 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0F 00 +T E2 06 00 00 +R 00 00 01 00 +T E2 06 00 00 CD 00 00 00 00 BA FF 21 04 00 09 +R 00 00 01 00 02 05 18 00 +T EB 06 00 00 4E 23 46 21 32 00 39 5D 54 3E +R 00 00 01 00 +T F5 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 17 00 02 09 17 00 +T FA 06 00 00 00 00 00 00 21 06 00 DD 4E 04 DD +R 00 00 01 00 02 04 01 00 +T 03 07 00 00 46 05 09 7E E6 00 47 23 7E E6 40 +R 00 00 01 00 +T 0E 07 00 00 B0 28 11 +R 00 00 01 00 +T 11 07 00 00 +R 00 00 01 00 +T 11 07 00 00 01 1E 00 00 00 21 32 00 39 5D 54 +R 00 00 01 00 00 05 02 00 +T 1A 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 20 07 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 22 07 00 00 +R 00 00 01 00 +T 22 07 00 00 DD 7E 08 DD B6 09 CA 90 08 00 00 +R 00 00 01 00 00 0B 01 00 +T 2B 07 00 00 +R 00 00 01 00 +T 2B 07 00 00 21 32 00 39 E5 21 25 00 00 00 E5 +R 00 00 01 00 00 0A 02 00 +T 34 07 00 00 21 04 00 39 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 03 00 +T 3C 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 43 07 00 00 F1 21 06 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T 4E 07 00 00 7E E6 00 47 23 7E E6 40 B0 28 13 +R 00 00 01 00 +T 59 07 00 00 +R 00 00 01 00 +T 59 07 00 00 01 2B 00 00 00 21 00 00 39 5D 54 +R 00 00 01 00 00 05 02 00 +T 62 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 68 07 00 00 00 00 00 00 18 5D +R 00 00 01 00 02 04 01 00 +T 6C 07 00 00 +R 00 00 01 00 +T 6C 07 00 00 21 0C 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 77 07 00 00 23 46 23 5E 23 56 D5 C5 21 +R 00 00 01 00 +T 80 07 00 00 37 00 00 00 E5 21 38 00 39 E5 3E +R 00 00 01 00 00 04 02 00 +T 89 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 8E 07 00 00 00 00 00 00 F1 F1 F1 F1 21 32 00 +R 00 00 01 00 02 04 01 00 +T 97 07 00 00 39 5D 54 CD 4D 05 00 00 21 32 00 +R 00 00 01 00 00 08 01 00 +T A0 07 00 00 39 E5 21 3B 00 00 00 E5 21 04 00 +R 00 00 01 00 00 07 02 00 +T A9 07 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0B 00 +T AF 07 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 0B 00 02 09 01 00 +T B6 07 00 00 06 00 39 4D 44 E1 09 E5 3E +R 00 00 01 00 +T BF 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T C4 07 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 01 00 +T C9 07 00 00 +R 00 00 01 00 +T C9 07 00 00 DD 7E 0A E6 01 28 05 21 +R 00 00 01 00 +T D1 07 00 00 5A 00 00 00 18 03 +R 00 00 01 00 00 04 02 00 +T D5 07 00 00 +R 00 00 01 00 +T D5 07 00 00 21 5E 00 00 00 +R 00 00 01 00 00 05 02 00 +T D8 07 00 00 +R 00 00 01 00 +T D8 07 00 00 E5 21 0A 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T E3 07 00 00 5E 23 56 06 09 CD 00 00 00 00 21 +R 00 00 01 00 02 0A 00 00 +T EC 07 00 00 50 00 19 E5 21 0A 00 DD 4E 04 DD +R 00 00 01 00 +T F7 07 00 00 46 05 09 7E E6 1F 5F 23 7E E6 00 +R 00 00 01 00 +T 02 08 00 00 57 D5 21 0A 00 09 5E 23 56 06 05 +R 00 00 01 00 +T 0D 08 00 00 CD 00 00 00 00 7B E6 0F 6F 7A E6 +R 00 00 01 00 02 05 00 00 +T 16 08 00 00 00 67 E5 21 08 00 DD 4E 04 DD 46 +R 00 00 01 00 +T 21 08 00 00 05 09 5E 23 56 06 05 CD +R 00 00 01 00 +T 29 08 00 00 00 00 00 00 7B E6 3F 6F 7A E6 00 +R 00 00 01 00 02 04 00 00 +T 32 08 00 00 67 E5 21 08 00 DD 4E 04 DD 46 05 +R 00 00 01 00 +T 3D 08 00 00 09 5E 23 56 06 0B CD 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 46 08 00 00 7B E6 1F 6F 7A E6 00 67 E5 21 +R 00 00 01 00 +T 50 08 00 00 41 00 00 00 E5 21 0E 00 39 5D 54 +R 00 00 01 00 00 04 02 00 +T 59 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0B 00 02 0A 0B 00 +T 5F 08 00 00 00 00 00 00 E5 21 10 00 39 4D 44 +R 00 00 01 00 02 04 01 00 +T 68 08 00 00 E1 09 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T 6E 08 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 03 00 02 09 01 00 +T 75 08 00 00 10 00 39 F9 EB DD 4E 02 DD 46 03 +R 00 00 01 00 +T 80 08 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1E 00 +T 88 08 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 1E 00 02 0A 01 00 +T 8F 08 00 00 29 +R 00 00 01 00 +T 90 08 00 00 +R 00 00 01 00 +T 90 08 00 00 DD 4E 02 DD 46 03 21 32 00 39 5D +R 00 00 01 00 +T 9B 08 00 00 54 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1E 00 02 0B 1E 00 +T A1 08 00 00 CD 00 00 00 00 DD 6E 02 DD 66 03 +R 00 00 01 00 02 05 01 00 +T AA 08 00 00 E5 0E 00 00 00 00 11 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T B0 08 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T B6 08 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T B9 08 00 00 +R 00 00 01 00 +T B9 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0F 00 +T BC 08 00 00 +R 00 00 01 00 +T BC 08 00 00 CD 00 00 00 00 CA FF 79 E6 01 28 +R 00 00 01 00 02 05 18 00 +T C5 08 00 00 15 +R 00 00 01 00 +T C6 08 00 00 +R 00 00 01 00 +T C6 08 00 00 DD 6E 02 DD 66 03 E5 0E +R 00 00 01 00 +T CE 08 00 00 00 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T D3 08 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T D8 08 00 00 00 00 00 00 F1 +R 00 00 01 00 02 04 01 00 +T DB 08 00 00 +R 00 00 01 00 +T DB 08 00 00 AF DD 77 CA DD 77 CB DD 77 CC DD +R 00 00 01 00 +T E6 08 00 00 77 CD AF DD 77 CE DD 77 CF DD 77 +R 00 00 01 00 +T F1 08 00 00 D0 DD 77 D1 DD 6E CC DD 66 CD E5 +R 00 00 01 00 +T FC 08 00 00 DD 6E CA DD 66 CB E5 21 +R 00 00 01 00 +T 04 09 00 00 37 00 00 00 E5 21 0E 00 39 E5 3E +R 00 00 01 00 00 04 02 00 +T 0D 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 12 09 00 00 00 00 00 00 F1 F1 F1 F1 21 08 00 +R 00 00 01 00 02 04 01 00 +T 1B 09 00 00 39 5D 54 CD 4D 05 00 00 DD 6E D0 +R 00 00 01 00 00 08 01 00 +T 24 09 00 00 DD 66 D1 E5 DD 6E CE DD 66 CF E5 +R 00 00 01 00 +T 2F 09 00 00 21 37 00 00 00 E5 21 19 00 39 E5 +R 00 00 01 00 00 05 02 00 +T 38 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 03 00 02 0A 03 00 +T 3E 09 00 00 00 00 00 00 F1 F1 F1 F1 21 13 00 +R 00 00 01 00 02 04 01 00 +T 47 09 00 00 39 5D 54 CD 4D 05 00 00 DD 7E 04 +R 00 00 01 00 00 08 01 00 +T 50 09 00 00 DD B6 05 28 1D +R 00 00 01 00 +T 55 09 00 00 +R 00 00 01 00 +T 55 09 00 00 DD 6E 04 DD 66 05 E5 21 +R 00 00 01 00 +T 5D 09 00 00 60 00 00 00 E5 21 22 00 39 E5 3E +R 00 00 01 00 00 04 02 00 +T 66 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 6B 09 00 00 00 00 00 00 F1 F1 F1 18 11 +R 00 00 01 00 02 04 01 00 +T 72 09 00 00 +R 00 00 01 00 +T 72 09 00 00 01 63 00 00 00 21 1E 00 39 5D 54 +R 00 00 01 00 00 05 02 00 +T 7B 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 17 00 02 0A 17 00 +T 81 09 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 83 09 00 00 +R 00 00 01 00 +T 83 09 00 00 21 13 00 39 E5 21 0A 00 39 E5 3E +R 00 00 01 00 +T 8E 09 00 00 01 DD AE 04 DD B6 05 20 05 21 +R 00 00 01 00 +T 98 09 00 00 66 00 00 00 18 03 +R 00 00 01 00 00 04 02 00 +T 9C 09 00 00 +R 00 00 01 00 +T 9C 09 00 00 21 67 00 00 00 +R 00 00 01 00 00 05 02 00 +T 9F 09 00 00 +R 00 00 01 00 +T 9F 09 00 00 E5 21 24 00 39 E5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 22 00 +T A7 09 00 00 C5 21 00 00 00 00 E5 DD 6E 02 DD +R 00 00 01 00 02 06 22 00 +T B0 09 00 00 66 03 E5 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T B6 09 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T BD 09 00 00 0E 00 39 F9 EB C3 00 00 00 00 +R 00 00 01 00 02 0A 0F 00 +T C5 09 00 00 +R 00 00 01 00 +T C5 09 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 18 00 +T CA 09 00 00 +R 00 00 01 00 +T CA 09 00 00 +R 00 00 01 00 +T CA 09 00 00 DD 7E 02 DD B6 03 28 2C +R 00 00 01 00 +T D2 09 00 00 +R 00 00 01 00 +T D2 09 00 00 DD 6E 02 DD 66 03 46 23 66 68 DD +R 00 00 01 00 +T DD 09 00 00 75 FE DD 74 FF DD 5E 02 DD 56 03 +R 00 00 01 00 +T E8 09 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 15 00 02 0A 15 00 +T EE 09 00 00 00 00 00 00 DD 6E FE DD 66 FF DD +R 00 00 01 00 02 04 01 00 +T F7 09 00 00 75 02 DD 74 03 18 CC +R 00 00 01 00 +T FE 09 00 00 +R 00 00 01 00 +T FE 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0F 00 +T 01 0A 00 00 +R 00 00 01 00 +T 01 0A 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 16 00 +T 04 0A 00 00 +R 00 00 01 00 +T 04 0A 00 00 +R 00 00 01 00 +T 04 0A 00 00 DD 6E 02 DD 66 03 AF B6 28 1D +R 00 00 01 00 +T 0E 0A 00 00 +R 00 00 01 00 +T 0E 0A 00 00 DD 6E 02 DD 66 03 7E FE 5C 20 08 +R 00 00 01 00 +T 19 0A 00 00 +R 00 00 01 00 +T 19 0A 00 00 DD 6E 02 DD 66 03 36 2F +R 00 00 01 00 +T 21 0A 00 00 +R 00 00 01 00 +T 21 0A 00 00 DD 34 02 20 03 DD 34 03 +R 00 00 01 00 +T 29 0A 00 00 +R 00 00 01 00 +T 29 0A 00 00 18 D9 +R 00 00 01 00 +T 2B 0A 00 00 +R 00 00 01 00 +T 2B 0A 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0F 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 2A 2E 2A 00 +R 00 00 02 00 +T 04 00 00 00 +R 00 00 02 00 +T 04 00 00 00 43 61 6E 27 74 20 6D 6B 64 69 72 +R 00 00 02 00 +T 0F 00 00 00 00 +R 00 00 02 00 +T 10 00 00 00 +R 00 00 02 00 +T 10 00 00 00 43 61 6E 27 74 20 72 6D 64 69 72 +R 00 00 02 00 +T 1B 00 00 00 00 +R 00 00 02 00 +T 1C 00 00 00 +R 00 00 02 00 +T 1C 00 00 00 5C 00 +R 00 00 02 00 +T 1E 00 00 00 +R 00 00 02 00 +T 1E 00 00 00 2F 00 +R 00 00 02 00 +T 20 00 00 00 +R 00 00 02 00 +T 20 00 00 00 5C 2A 2E 2A 00 +R 00 00 02 00 +T 25 00 00 00 +R 00 00 02 00 +T 25 00 00 00 25 2D 31 33 73 00 +R 00 00 02 00 +T 2B 00 00 00 +R 00 00 02 00 +T 2B 00 00 00 20 20 20 20 20 20 20 20 20 20 20 +R 00 00 02 00 +T 36 00 00 00 00 +R 00 00 02 00 +T 37 00 00 00 +R 00 00 02 00 +T 37 00 00 00 25 6C 64 00 +R 00 00 02 00 +T 3B 00 00 00 +R 00 00 02 00 +T 3B 00 00 00 25 31 30 73 20 00 +R 00 00 02 00 +T 41 00 00 00 +R 00 00 02 00 +T 41 00 00 00 25 32 64 3A 25 30 32 64 20 25 32 +R 00 00 02 00 +T 4C 00 00 00 64 2F 25 30 32 64 2F 25 30 32 64 +R 00 00 02 00 +T 57 00 00 00 25 73 00 +R 00 00 02 00 +T 5A 00 00 00 +R 00 00 02 00 +T 5A 00 00 00 20 20 20 00 +R 00 00 02 00 +T 5E 00 00 00 +R 00 00 02 00 +T 5E 00 00 00 0A 00 +R 00 00 02 00 +T 60 00 00 00 +R 00 00 02 00 +T 60 00 00 00 25 64 00 +R 00 00 02 00 +T 63 00 00 00 +R 00 00 02 00 +T 63 00 00 00 4E 6F 00 +R 00 00 02 00 +T 66 00 00 00 +R 00 00 02 00 +T 66 00 00 00 00 +R 00 00 02 00 +T 67 00 00 00 +R 00 00 02 00 +T 67 00 00 00 73 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 10 00 00 00 +R 00 00 03 00 +T 10 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/z80_lib/doasystat.rel b/src/nos/lib/z80_lib/doasystat.rel new file mode 100644 index 00000000..e88a915a --- /dev/null +++ b/src/nos/lib/z80_lib/doasystat.rel @@ -0,0 +1,165 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _if_lookup Ref00000000 +S ___02a6_c749_Interface_20_25s_20 Ref00000000 +S ___02a9_6e91_Interface_20_25s_20 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _Asy Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _pasy Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 14A flags 0 +S _doasystat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 11 02 80 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 6E 02 DD 66 03 3E 80 AC 67 ED 52 +R 00 00 01 00 +T 14 00 00 00 30 44 +R 00 00 01 00 +T 16 00 00 00 +R 00 00 01 00 +T 16 00 00 00 DD 36 FA 00 00 00 00 DD 36 FB +R 00 00 01 00 0B 07 07 00 +T 1D 00 00 00 00 00 00 00 +R 00 00 01 00 8B 04 07 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 01 B0 00 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 02 05 07 00 +T 27 00 00 00 A7 ED 42 30 28 +R 00 00 01 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 DD 6E FA DD 66 FB 7E 23 B6 28 0E +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 3F 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 7E FA C6 58 DD 77 FA 30 03 DD +R 00 00 01 00 +T 50 00 00 00 34 FB +R 00 00 01 00 +T 52 00 00 00 +R 00 00 01 00 +T 52 00 00 00 18 CA +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 21 00 00 C3 47 01 00 00 +R 00 00 01 00 00 08 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 DD 36 FE 01 DD 36 FF 00 +R 00 00 01 00 +T 62 00 00 00 +R 00 00 01 00 +T 62 00 00 00 DD 4E 02 DD 46 03 DD 6E FE DD 66 +R 00 00 01 00 +T 6D 00 00 00 FF CD 00 00 00 00 D2 44 01 00 00 +R 00 00 01 00 02 06 08 00 00 0B 01 00 +T 74 00 00 00 +R 00 00 01 00 +T 74 00 00 00 DD 6E FE DD 66 FF 29 DD 4E 04 DD +R 00 00 01 00 +T 7F 00 00 00 46 05 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 87 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 8E 00 00 00 75 FC DD 74 FD 7D B4 20 26 +R 00 00 01 00 +T 97 00 00 00 +R 00 00 01 00 +T 97 00 00 00 DD 6E FE DD 66 FF 29 DD 4E 04 DD +R 00 00 01 00 +T A2 00 00 00 46 05 09 4E 23 46 C5 0E +R 00 00 01 00 +T AA 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 03 00 02 0A 03 00 +T B0 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T B6 00 00 00 00 00 00 00 F1 F1 F1 18 7C +R 00 00 01 00 02 04 00 00 +T BD 00 00 00 +R 00 00 01 00 +T BD 00 00 00 DD 36 FA 00 00 00 00 DD 36 FB +R 00 00 01 00 0B 07 07 00 +T C4 00 00 00 00 00 00 00 +R 00 00 01 00 8B 04 07 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 01 B0 00 00 00 DD 6E FA DD 66 FB +R 00 00 01 00 02 05 07 00 +T CE 00 00 00 A7 ED 42 30 34 +R 00 00 01 00 +T D3 00 00 00 +R 00 00 01 00 +T D3 00 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T DE 00 00 00 4E FC DD 46 FD A7 ED 42 20 10 +R 00 00 01 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T F0 00 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T F7 00 00 00 0F +R 00 00 01 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 DD 7E FA C6 58 DD 77 FA 30 03 DD +R 00 00 01 00 +T 03 01 00 00 34 FB +R 00 00 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 18 BE +R 00 00 01 00 +T 07 01 00 00 +R 00 00 01 00 +T 07 01 00 00 21 B0 00 00 00 DD 4E FA DD 46 FB +R 00 00 01 00 02 05 07 00 +T 10 01 00 00 A7 ED 42 20 24 +R 00 00 01 00 +T 15 01 00 00 +R 00 00 01 00 +T 15 01 00 00 DD 6E FE DD 66 FF 29 DD 4E 04 DD +R 00 00 01 00 +T 20 01 00 00 46 05 09 4E 23 46 C5 0E +R 00 00 01 00 +T 28 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 02 00 02 0A 02 00 +T 2E 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 09 00 02 0A 09 00 +T 34 01 00 00 00 00 00 00 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 C3 62 00 00 00 +R 00 00 01 00 00 05 01 00 +T 44 01 00 00 +R 00 00 01 00 +T 44 01 00 00 21 00 00 +R 00 00 01 00 +T 47 01 00 00 +R 00 00 01 00 +T 47 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 04 00 diff --git a/src/nos/lib/z80_lib/doesccstat.rel b/src/nos/lib/z80_lib/doesccstat.rel new file mode 100644 index 00000000..a9f79c2b --- /dev/null +++ b/src/nos/lib/z80_lib/doesccstat.rel @@ -0,0 +1,169 @@ +XL4 +H 2 areas F global symbols +S ___0267_d89e_ESCC_20driver_20not Ref00000000 +S ___0118_b620__252d_20_25_2d6s_20 Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Esccchan Ref00000000 +S ___0219_5055_Ch_20Iface_20_20_20 Ref00000000 +S .__.ABS. Def00000000 +S _Esccinfo Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S _escc_asyrx Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___0117_e9b8__252d_20_25_2d6s_20 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1FF flags 0 +S _doesccstat Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 08 00 +T 06 00 00 00 00 00 00 00 7D B4 20 17 +R 00 00 01 00 02 04 07 00 +T 0C 00 00 00 +R 00 00 01 00 +T 0C 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 00 00 02 0B 00 00 +T 12 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 18 00 00 00 CD 00 00 00 00 F1 F1 21 00 00 C3 +R 00 00 01 00 02 05 02 00 +T 21 00 00 00 FC 01 00 00 +R 00 00 01 00 00 04 01 00 +T 23 00 00 00 +R 00 00 01 00 +T 23 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 05 00 02 0B 05 00 +T 29 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 2F 00 00 00 CD 00 00 00 00 F1 F1 AF DD 77 FE +R 00 00 01 00 02 05 02 00 +T 38 00 00 00 DD 77 FF +R 00 00 01 00 +T 3B 00 00 00 +R 00 00 01 00 +T 3B 00 00 00 2A 04 00 00 00 DD 4E FE DD 46 FF +R 00 00 01 00 02 05 07 00 +T 44 00 00 00 CD 00 00 00 00 DA F9 01 00 00 +R 00 00 01 00 02 05 09 00 00 0A 01 00 +T 4A 00 00 00 +R 00 00 01 00 +T 4A 00 00 00 DD 6E FE DD 66 FF 29 01 +R 00 00 01 00 +T 52 00 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 02 04 04 00 +T 5B 00 00 00 FC DD 74 FD 7D B4 20 03 +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 C3 EE 01 00 00 +R 00 00 01 00 00 05 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 4E +R 00 00 01 00 +T 71 00 00 00 23 46 23 7E 69 60 0E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 79 00 00 00 11 00 00 00 00 B9 C2 28 01 00 00 +R 00 00 01 00 02 05 0B 00 00 0B 01 00 +T 80 00 00 00 ED 52 C2 28 01 00 00 +R 00 00 01 00 00 07 01 00 +T 85 00 00 00 +R 00 00 01 00 +T 85 00 00 00 21 67 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 90 00 00 00 23 56 23 4E 23 46 C5 D5 21 63 00 +R 00 00 01 00 +T 9B 00 00 00 DD 4E FC DD 46 FD 09 5E 23 56 23 +R 00 00 01 00 +T A6 00 00 00 4E 23 46 C5 D5 21 5F 00 DD 4E FC +R 00 00 01 00 +T B1 00 00 00 DD 46 FD 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T BC 00 00 00 C5 D5 21 5B 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T C7 00 00 00 09 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T D2 00 00 00 79 00 DD 4E FC DD 46 FD 09 5E 23 +R 00 00 01 00 +T DD 00 00 00 56 D5 21 77 00 09 5E 23 56 D5 21 +R 00 00 01 00 +T E8 00 00 00 73 00 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T F3 00 00 00 D5 21 4B 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T FE 00 00 00 46 23 66 68 23 23 4E 23 46 C5 DD +R 00 00 01 00 +T 09 01 00 00 6E FE DD 66 FF E5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 0D 00 +T 11 01 00 00 C5 21 00 00 00 00 E5 3E +R 00 00 01 00 02 06 0D 00 +T 17 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 1C 01 00 00 00 00 00 00 EB 21 20 00 39 F9 EB +R 00 00 01 00 02 04 02 00 +T 25 01 00 00 C3 EE 01 00 00 +R 00 00 01 00 00 05 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 21 67 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 33 01 00 00 23 56 23 4E 23 46 C5 D5 21 63 00 +R 00 00 01 00 +T 3E 01 00 00 DD 4E FC DD 46 FD 09 5E 23 56 23 +R 00 00 01 00 +T 49 01 00 00 4E 23 46 C5 D5 21 5F 00 DD 4E FC +R 00 00 01 00 +T 54 01 00 00 DD 46 FD 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 5F 01 00 00 C5 D5 21 5B 00 DD 4E FC DD 46 FD +R 00 00 01 00 +T 6A 01 00 00 09 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 75 01 00 00 79 00 DD 4E FC DD 46 FD 09 5E 23 +R 00 00 01 00 +T 80 01 00 00 56 D5 21 77 00 09 5E 23 56 D5 21 +R 00 00 01 00 +T 8B 01 00 00 73 00 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 96 01 00 00 D5 21 6F 00 DD 4E FC DD 46 FD 09 +R 00 00 01 00 +T A1 01 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T AB 01 00 00 6B 00 DD 4E FC DD 46 FD 09 5E 23 +R 00 00 01 00 +T B6 01 00 00 56 23 4E 23 46 C5 D5 21 4B 00 DD +R 00 00 01 00 +T C1 01 00 00 4E FC DD 46 FD 09 46 23 66 68 23 +R 00 00 01 00 +T CC 01 00 00 23 4E 23 46 C5 DD 6E FE DD 66 FF +R 00 00 01 00 +T D7 01 00 00 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 01 00 +T DC 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 0A 00 +T E2 01 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0A 00 02 09 02 00 +T E9 01 00 00 28 00 39 F9 EB +R 00 00 01 00 +T EE 01 00 00 +R 00 00 01 00 +T EE 01 00 00 +R 00 00 01 00 +T EE 01 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 C3 3B 00 00 00 +R 00 00 01 00 00 05 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 21 00 00 +R 00 00 01 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/z80_lib/escc_aioctl.rel b/src/nos/lib/z80_lib/escc_aioctl.rel new file mode 100644 index 00000000..cec11367 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_aioctl.rel @@ -0,0 +1,65 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_speed Ref00000000 +S _Esccchan Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _Esccinfo Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A1 flags 0 +S _escc_aioctl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 2C 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A 29 +R 00 00 01 00 +T 14 00 00 00 11 00 00 00 00 19 56 23 66 6A DD +R 00 00 01 00 02 05 02 00 +T 1D 00 00 00 75 FC DD 74 FD 3E 0A A9 B0 20 70 +R 00 00 01 00 +T 28 00 00 00 +R 00 00 01 00 +T 28 00 00 00 DD 7E 0A DD B6 0B 28 54 +R 00 00 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 6E 0E DD 66 0F E5 DD 6E 0C DD +R 00 00 01 00 +T 3B 00 00 00 66 0D E5 01 10 00 DD 5E FC DD 56 +R 00 00 01 00 +T 46 00 00 00 FD 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 4C 00 00 00 CD 00 00 00 00 F1 F1 DD 75 FE DD +R 00 00 01 00 02 05 00 00 +T 55 00 00 00 74 FF 23 23 01 00 00 3E 05 CD +R 00 00 01 00 +T 5F 00 00 00 00 00 00 00 C5 E5 21 12 00 00 00 +R 00 00 01 00 02 04 04 00 02 0B 05 00 +T 66 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 6F 00 00 00 00 00 00 00 E5 21 53 00 DD 5E FC +R 00 00 01 00 02 04 07 00 +T 78 00 00 00 DD 56 FD 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T 83 00 00 00 70 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 21 53 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 8F 00 00 00 23 56 23 4E 23 46 EB 18 06 +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 01 00 00 21 00 00 +R 00 00 01 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 09 00 diff --git a/src/nos/lib/z80_lib/escc_asyex.rel b/src/nos/lib/z80_lib/escc_asyex.rel new file mode 100644 index 00000000..f3fb0dd9 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_asyex.rel @@ -0,0 +1,68 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9E flags 0 +S _escc_asyex Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 63 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4E 02 DD 46 03 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 12 00 00 00 21 10 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1D 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T 22 00 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 29 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 2F 00 00 00 CD 00 00 00 00 DD 75 FE E5 21 +R 00 00 01 00 02 05 00 00 +T 37 00 00 00 24 00 09 C1 79 AE DD 77 FF E6 80 +R 00 00 01 00 +T 42 00 00 00 28 27 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 DD 7E FE E6 80 20 20 +R 00 00 01 00 +T 4B 00 00 00 +R 00 00 01 00 +T 4B 00 00 00 21 12 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 56 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T 5B 00 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 62 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 68 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 00 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 21 24 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 76 00 00 00 56 FE 72 0E 10 21 10 00 DD 5E 02 +R 00 00 01 00 +T 81 00 00 00 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 89 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T 8E 00 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 94 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 99 00 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 02 00 diff --git a/src/nos/lib/z80_lib/escc_async.rel b/src/nos/lib/z80_lib/escc_async.rel new file mode 100644 index 00000000..ce2852b6 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_async.rel @@ -0,0 +1,495 @@ +XL4 +H 2 areas 13 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S _escc_asyex Ref00000000 +S _Esccinfo Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _escc_asysp Ref00000000 +S __printf Ref00000000 +S _escc_asyrx Ref00000000 +S ___0479_d50a_escc_25d_3a_20No_20 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _escc_asytx Ref00000000 +S _malloc Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 67D flags 0 +S _escc_async Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 26 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 4E 02 DD 46 03 09 DD 75 FC DD 74 +R 00 00 01 00 +T 14 00 00 00 FD 21 4D 00 09 5E 23 56 3E +R 00 00 01 00 +T 1D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0F 00 02 09 0F 00 +T 22 00 00 00 00 00 00 00 E5 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 00 00 +T 2B 00 00 00 C1 71 23 70 79 B0 20 2E +R 00 00 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 21 4B 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 3E 00 00 00 23 66 68 01 2C 00 09 4E 23 46 C5 +R 00 00 01 00 +T 49 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0C 00 02 0B 0C 00 +T 4F 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 55 00 00 00 CD 00 00 00 00 F1 F1 F1 21 FF FF +R 00 00 01 00 02 05 00 00 +T 5E 00 00 00 C3 7A 06 00 00 +R 00 00 01 00 00 05 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 DD 6E FC DD 66 FD 23 23 E5 21 +R 00 00 01 00 +T 6B 00 00 00 4D 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 76 00 00 00 56 E1 73 23 72 21 04 00 DD 5E FC +R 00 00 01 00 +T 81 00 00 00 DD 56 FD 19 E5 21 06 00 19 E5 EB +R 00 00 01 00 +T 8C 00 00 00 5E 23 56 E1 73 23 72 E1 73 23 72 +R 00 00 01 00 +T 97 00 00 00 21 08 00 DD 5E FC DD 56 FD 19 AF +R 00 00 01 00 +T A2 00 00 00 77 23 77 69 60 36 00 00 00 00 23 +R 00 00 01 00 0B 0A 0E 00 +T AA 00 00 00 36 00 00 00 00 23 36 00 00 00 00 +R 00 00 01 00 8B 05 0E 00 2B 0B 0E 00 +T AF 00 00 00 21 04 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T BA 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 06 00 8B 0A 06 00 +T BF 00 00 00 36 00 00 00 00 21 08 00 09 36 +R 00 00 01 00 2B 05 06 00 +T C6 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 0B 00 8B 0A 0B 00 +T CB 00 00 00 36 00 00 00 00 21 0C 00 09 36 +R 00 00 01 00 2B 05 0B 00 +T D2 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 09 00 8B 0A 09 00 +T D7 00 00 00 36 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 05 09 00 2B 0A 05 00 +T DC 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T E3 00 00 00 FE DD 74 FF 21 57 00 09 7E B7 CA +R 00 00 01 00 +T EE 00 00 00 DA 02 00 00 +R 00 00 01 00 00 04 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 0E 04 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T FB 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 02 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 08 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 0D 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 13 01 00 00 18 00 DD 4E 02 DD 46 03 09 36 04 +R 00 00 01 00 +T 1E 01 00 00 0E 04 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 29 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 30 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 36 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 3B 01 00 00 00 00 00 00 CD 00 00 00 00 0E 0B +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 42 01 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 4D 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 52 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 58 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 5D 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 63 01 00 00 1F 00 DD 4E 02 DD 46 03 09 36 08 +R 00 00 01 00 +T 6E 01 00 00 0E 08 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 79 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 80 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 86 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 8B 01 00 00 00 00 00 00 CD 00 00 00 00 0E 0E +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 92 01 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 9D 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T A2 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T A8 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T AD 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T B3 01 00 00 22 00 DD 4E 02 DD 46 03 09 36 00 +R 00 00 01 00 +T BE 01 00 00 0E 00 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T C9 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T D0 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T D6 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T DB 01 00 00 00 00 00 00 CD 00 00 00 00 0E 04 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T E2 01 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T ED 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T F2 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T F8 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T FD 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 03 02 00 00 18 00 DD 4E 02 DD 46 03 09 36 44 +R 00 00 01 00 +T 0E 02 00 00 0E 44 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 19 02 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 20 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 26 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 2B 02 00 00 00 00 00 00 CD 00 00 00 00 0E 0B +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 32 02 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 3D 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 42 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 48 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 4D 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 53 02 00 00 1F 00 DD 4E 02 DD 46 03 09 36 50 +R 00 00 01 00 +T 5E 02 00 00 0E 50 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 69 02 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 70 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 76 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 7B 02 00 00 00 00 00 00 CD 00 00 00 00 0E 0E +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 82 02 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 8D 02 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 92 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 98 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 9D 02 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 02 00 02 09 00 00 +T A3 02 00 00 16 00 00 00 7D B4 28 04 3E 02 18 +R 00 00 01 00 02 04 07 00 +T AC 02 00 00 01 +R 00 00 01 00 +T AD 02 00 00 +R 00 00 01 00 +T AD 02 00 00 AF +R 00 00 01 00 +T AE 02 00 00 +R 00 00 01 00 +T AE 02 00 00 21 22 00 DD 4E 02 DD 46 03 09 77 +R 00 00 01 00 +T B9 02 00 00 4F 21 10 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T C4 02 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 11 00 +T CA 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T D0 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T D5 02 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T DA 02 00 00 +R 00 00 01 00 +T DA 02 00 00 0E 01 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T E5 02 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T EC 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T F2 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T F7 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T FD 02 00 00 15 00 DD 4E 02 DD 46 03 09 36 00 +R 00 00 01 00 +T 08 03 00 00 0E 00 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 13 03 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 1A 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 20 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 25 03 00 00 00 00 00 00 CD 00 00 00 00 0E 03 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 2C 03 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 37 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 3C 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 42 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 47 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 4D 03 00 00 17 00 DD 4E 02 DD 46 03 09 36 C0 +R 00 00 01 00 +T 58 03 00 00 0E C0 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 63 03 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 6A 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 70 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 75 03 00 00 00 00 00 00 CD 00 00 00 00 0E 05 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 7C 03 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 87 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 8C 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 92 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 97 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 9D 03 00 00 19 00 DD 4E 02 DD 46 03 09 36 E2 +R 00 00 01 00 +T A8 03 00 00 0E E2 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T B3 03 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T BA 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T C0 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T C5 03 00 00 00 00 00 00 CD 00 00 00 00 0E 09 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T CC 03 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T D7 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T DC 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T E2 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T E7 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T ED 03 00 00 1D 00 DD 4E 02 DD 46 03 09 36 01 +R 00 00 01 00 +T F8 03 00 00 0E 01 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 03 04 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 0A 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 10 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 15 04 00 00 00 00 00 00 CD 00 00 00 00 0E 0A +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 1C 04 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 27 04 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 2C 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 32 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 37 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 3D 04 00 00 1E 00 DD 4E 02 DD 46 03 09 36 00 +R 00 00 01 00 +T 48 04 00 00 0E 00 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 53 04 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T 5A 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 60 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 65 04 00 00 00 00 00 00 CD 00 00 00 00 0E 0F +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 6C 04 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 77 04 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 7C 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 82 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 87 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 8D 04 00 00 23 00 DD 4E 02 DD 46 03 09 36 80 +R 00 00 01 00 +T 98 04 00 00 0E 80 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T A3 04 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T AA 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T B0 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T B5 04 00 00 00 00 00 00 CD 00 00 00 00 0E 03 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T BC 04 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T C7 04 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T CC 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T D2 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T D7 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T DD 04 00 00 17 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T E8 04 00 00 01 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T F3 04 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 11 00 +T FB 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 01 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 06 05 00 00 00 00 00 00 CD 00 00 00 00 0E 05 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 0D 05 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 18 05 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 1D 05 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 23 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 28 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 2E 05 00 00 19 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T 39 05 00 00 08 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 44 05 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 11 00 +T 4C 05 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 52 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 57 05 00 00 00 00 00 00 CD 00 00 00 00 0E 10 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 5E 05 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 69 05 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 6E 05 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 74 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 79 05 00 00 00 00 00 00 CD 00 00 00 00 0E 10 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 80 05 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 8B 05 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 90 05 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 96 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 9B 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T A1 05 00 00 10 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T AC 05 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 10 00 02 0B 10 00 +T B2 05 00 00 CD 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 05 00 00 +T B9 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T BE 05 00 00 00 00 00 00 E5 21 24 00 09 D1 73 +R 00 00 01 00 02 04 00 00 +T C7 05 00 00 0E 01 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T D2 05 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 11 00 +T D9 05 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T DF 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T E4 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T EA 05 00 00 15 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T F5 05 00 00 13 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 00 06 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 11 00 +T 08 06 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 0E 06 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 13 06 00 00 00 00 00 00 CD 00 00 00 00 0E 09 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 1A 06 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 25 06 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 11 00 +T 2A 06 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 30 06 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 35 06 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 3B 06 00 00 1D 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T 46 06 00 00 08 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 51 06 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 11 00 +T 59 06 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 11 00 02 09 00 00 +T 5F 06 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 64 06 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 6B 06 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 01 00 +T 72 06 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 78 06 00 00 00 00 +R 00 00 01 00 +T 7A 06 00 00 +R 00 00 01 00 +T 7A 06 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/z80_lib/escc_asyrx.rel b/src/nos/lib/z80_lib/escc_asyrx.rel new file mode 100644 index 00000000..dd785ad6 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_asyrx.rel @@ -0,0 +1,102 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _ksignal Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 10E flags 0 +S _escc_asyrx Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 5B 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 12 00 00 00 21 26 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T 1D 00 00 00 75 FC DD 74 FD +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 21 12 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 2D 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 32 00 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 39 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 3F 00 00 00 CD 00 00 00 00 DD 75 FE 21 08 00 +R 00 00 01 00 02 05 00 00 +T 48 00 00 00 DD 4E FC DD 46 FD 09 56 23 66 6A +R 00 00 01 00 +T 53 00 00 00 E5 03 03 69 60 4E 23 46 E1 A7 ED +R 00 00 01 00 +T 5E 00 00 00 42 28 64 +R 00 00 01 00 +T 61 00 00 00 +R 00 00 01 00 +T 61 00 00 00 21 04 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T 6C 00 00 00 23 56 13 72 2B 73 1B EB DD 56 FE +R 00 00 01 00 +T 77 00 00 00 72 03 03 0A 6F 03 0A 67 E5 DD 6E +R 00 00 01 00 +T 82 00 00 00 FC DD 66 FD 4E 23 46 E1 09 4D 44 +R 00 00 01 00 +T 8D 00 00 00 21 04 00 DD 5E FC DD 56 FD 19 56 +R 00 00 01 00 +T 98 00 00 00 23 66 6A A7 ED 42 38 14 +R 00 00 01 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 21 04 00 DD 4E FC DD 46 FD 09 E5 +R 00 00 01 00 +T AB 00 00 00 69 60 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 21 08 00 DD 4E FC DD 46 FD 09 34 +R 00 00 01 00 +T BF 00 00 00 23 20 01 34 +R 00 00 01 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 18 0F +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 21 77 00 DD 4E 02 DD 46 03 09 34 +R 00 00 01 00 +T D0 00 00 00 23 20 01 34 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 +R 00 00 01 00 +T D4 00 00 00 21 10 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T DF 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T E4 00 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T EB 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T F1 00 00 00 CD 00 00 00 00 7D E6 01 C2 +R 00 00 01 00 02 05 00 00 +T F8 00 00 00 22 00 00 00 +R 00 00 01 00 00 04 01 00 +T FA 00 00 00 +R 00 00 01 00 +T FA 00 00 00 01 01 00 DD 5E FC DD 56 FD 3E +R 00 00 01 00 +T 04 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 09 01 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 02 00 diff --git a/src/nos/lib/z80_lib/escc_asysp.rel b/src/nos/lib/z80_lib/escc_asysp.rel new file mode 100644 index 00000000..107a17b4 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_asysp.rel @@ -0,0 +1,72 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size AC flags 0 +S _escc_asysp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 67 00 DD +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 4E 02 DD 46 03 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 12 00 00 00 0E 01 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 1D 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T 24 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 2A 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 2F 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 35 00 00 00 10 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 40 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 07 00 02 0B 07 00 +T 46 00 00 00 CD 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 05 00 00 +T 4D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 52 00 00 00 00 00 00 00 DD 75 FE 21 12 00 09 +R 00 00 01 00 02 04 00 00 +T 5B 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T 61 00 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 68 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 6E 00 00 00 CD 00 00 00 00 DD 7E FE E6 60 28 +R 00 00 01 00 02 05 00 00 +T 77 00 00 00 0F +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 21 79 00 DD 4E 02 DD 46 03 09 34 +R 00 00 01 00 +T 83 00 00 00 23 20 01 34 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 0E 30 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 92 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T 99 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 9F 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T A4 00 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T AA 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/z80_lib/escc_asytx.rel b/src/nos/lib/z80_lib/escc_asytx.rel new file mode 100644 index 00000000..8c5f04fd --- /dev/null +++ b/src/nos/lib/z80_lib/escc_asytx.rel @@ -0,0 +1,156 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free_mbuf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1AB flags 0 +S _escc_asytx Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 5F 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 12 00 00 00 21 25 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 1D 00 00 00 B7 28 3A +R 00 00 01 00 +T 20 00 00 00 +R 00 00 01 00 +T 20 00 00 00 21 25 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 2B 00 00 00 21 12 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 36 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 3B 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 41 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 46 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 4C 00 00 00 25 00 DD 4E 02 DD 46 03 09 36 00 +R 00 00 01 00 +T 57 00 00 00 C3 A8 01 00 00 +R 00 00 01 00 00 05 01 00 +T 5A 00 00 00 +R 00 00 01 00 +T 5A 00 00 00 21 49 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 65 00 00 00 23 B6 20 7F +R 00 00 01 00 +T 69 00 00 00 +R 00 00 01 00 +T 69 00 00 00 21 49 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 74 00 00 00 21 47 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 7F 00 00 00 79 B0 28 40 +R 00 00 01 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 21 47 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 8E 00 00 00 21 47 00 09 56 23 66 6A 23 23 5E +R 00 00 01 00 +T 99 00 00 00 23 56 E1 73 23 72 0E C0 21 12 00 +R 00 00 01 00 +T A4 00 00 00 DD 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T AF 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 08 00 02 09 08 00 +T B4 00 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T BA 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T BF 00 00 00 00 00 00 00 18 22 +R 00 00 01 00 02 04 00 00 +T C3 00 00 00 +R 00 00 01 00 +T C3 00 00 00 0E 28 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T CE 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T D5 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T DB 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T E0 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T E5 00 00 00 +R 00 00 01 00 +T E5 00 00 00 C3 A8 01 00 00 +R 00 00 01 00 00 05 01 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 21 49 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T F3 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T FD 00 00 00 0C 00 09 7E 23 B6 20 5A +R 00 00 01 00 +T 05 01 00 00 +R 00 00 01 00 +T 05 01 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T 10 01 00 00 75 FE DD 74 FF 21 49 00 DD 4E 02 +R 00 00 01 00 +T 1B 01 00 00 DD 46 03 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 23 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 29 01 00 00 49 00 09 DD 4E FE DD 46 FF 71 23 +R 00 00 01 00 +T 34 01 00 00 70 79 B0 20 24 +R 00 00 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 0E C0 21 12 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 44 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T 4B 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 51 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 56 01 00 00 00 00 00 00 CD 00 00 00 00 18 4B +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 18 89 +R 00 00 01 00 +T 5F 01 00 00 +R 00 00 01 00 +T 5F 01 00 00 21 0A 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 6A 01 00 00 23 66 6F 4E 21 12 00 DD 5E 02 DD +R 00 00 01 00 +T 75 01 00 00 56 03 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 7D 01 00 00 21 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 05 08 00 02 0A 00 00 +T 84 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 89 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 8F 01 00 00 0C 00 DD 4E FE DD 46 FF 09 5E 23 +R 00 00 01 00 +T 9A 01 00 00 56 1B 72 2B 73 21 0A 00 09 34 23 +R 00 00 01 00 +T A5 01 00 00 20 01 34 +R 00 00 01 00 +T A8 01 00 00 +R 00 00 01 00 +T A8 01 00 00 +R 00 00 01 00 +T A8 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/z80_lib/escc_attach.rel b/src/nos/lib/z80_lib/escc_attach.rel new file mode 100644 index 00000000..dc9e5fe5 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_attach.rel @@ -0,0 +1,731 @@ +XL4 +H 3 areas 30 global symbols +S _slip_rx Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_stop Ref00000000 +S _Ifaces Ref00000000 +S _tolower Ref00000000 +S _escc_speed Ref00000000 +S _if_name Ref00000000 +S _setencap Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strchr Ref00000000 +S ___0277_4a7b_First_20init_20ESCC Ref00000000 +S ___02d4_b5f9_Mode_20_25s_20unkno Ref00000000 +S _strlen Ref00000000 +S ___0265_6d38_ESCC_20channel_20_2 Ref00000000 +S _Slip Ref00000000 +S _Esccchan Ref00000000 +S _strcmp Ref00000000 +S _if_tx Ref00000000 +S _escc_async Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _slip_raw Ref00000000 +S _free Ref00000000 +S ___ctype Ref00000000 +S _strcpy Ref00000000 +S _callocw Ref00000000 +S _escc_send Ref00000000 +S ___03b4_447c_Too_20many_20slip_2 Ref00000000 +S _Esccinfo Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _atoi Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _mallocw Ref00000000 +S _atol Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _escc_init Ref00000000 +S __printf Ref00000000 +S _Ip_addr Ref00000000 +S _htoi Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _htol Ref00000000 +S _escc_aioctl Ref00000000 +S _slhc_init Ref00000000 +S _get_escc Ref00000000 +S _newproc Ref00000000 +S ___0264_6b3a_ESCC_20channel_20_2 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 826 flags 0 +S _escc_attach Def00000000 +A CSTR size 17 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EE FF AF DD 77 F6 +R 00 00 01 00 02 05 1D 00 +T 09 00 00 00 DD 77 F7 AF DD 77 F8 DD 77 F9 AF +R 00 00 01 00 +T 14 00 00 00 DD 77 FA DD 77 FB 01 00 00 00 00 +R 00 00 01 00 00 0B 02 00 +T 1D 00 00 00 21 04 00 DD 5E 04 DD 56 05 19 5E +R 00 00 01 00 +T 28 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 10 00 +T 2D 00 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 10 00 02 09 01 00 +T 34 00 00 00 C2 FB 01 00 00 +R 00 00 01 00 00 05 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 01 0B 80 DD 6E 02 DD 66 03 3E 80 +R 00 00 01 00 +T 42 00 00 00 AC 67 ED 42 30 06 +R 00 00 01 00 +T 48 00 00 00 +R 00 00 01 00 +T 48 00 00 00 21 FF FF C3 23 08 00 00 +R 00 00 01 00 00 08 01 00 +T 4E 00 00 00 +R 00 00 01 00 +T 4E 00 00 00 21 14 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 59 00 00 00 23 66 6F 4E 06 00 21 00 00 00 00 +R 00 00 01 00 02 0B 17 00 +T 62 00 00 00 09 7E E6 02 28 24 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 21 14 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 73 00 00 00 23 66 6F 5E 16 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 7B 00 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T 82 00 00 00 21 14 00 09 7E 23 66 6F C1 71 +R 00 00 01 00 +T 8C 00 00 00 +R 00 00 01 00 +T 8C 00 00 00 21 14 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 97 00 00 00 23 66 6F 7E FE 70 20 19 +R 00 00 01 00 +T 9F 00 00 00 +R 00 00 01 00 +T 9F 00 00 00 DD 36 F6 01 DD 36 F7 00 21 14 00 +R 00 00 01 00 +T AA 00 00 00 DD 4E 04 DD 46 05 09 34 23 20 01 +R 00 00 01 00 +T B5 00 00 00 34 +R 00 00 01 00 +T B6 00 00 00 +R 00 00 01 00 +T B6 00 00 00 18 22 +R 00 00 01 00 +T B8 00 00 00 +R 00 00 01 00 +T B8 00 00 00 21 14 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T C3 00 00 00 23 66 6F 7E FE 72 20 0F +R 00 00 01 00 +T CB 00 00 00 +R 00 00 01 00 +T CB 00 00 00 21 14 00 DD 4E 04 DD 46 05 09 34 +R 00 00 01 00 +T D6 00 00 00 23 20 01 34 +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 DD 4E 02 DD 46 03 21 0B 00 CD +R 00 00 01 00 +T E4 00 00 00 00 00 00 00 30 1B +R 00 00 01 00 02 04 23 00 +T E8 00 00 00 +R 00 00 01 00 +T E8 00 00 00 21 16 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T F3 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 27 00 +T F8 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 27 00 02 09 01 00 +T FF 00 00 00 F8 DD 74 F9 +R 00 00 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 DD 4E 02 DD 46 03 21 0C 00 CD +R 00 00 01 00 +T 0D 01 00 00 00 00 00 00 30 1B +R 00 00 01 00 02 04 23 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 21 18 00 DD 4E 04 DD 46 05 09 5E +R 00 00 01 00 +T 1C 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 27 00 +T 21 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 27 00 02 09 01 00 +T 28 01 00 00 FA DD 74 FB +R 00 00 01 00 +T 2C 01 00 00 +R 00 00 01 00 +T 2C 01 00 00 DD 6E FA DD 66 FB E5 DD 6E F8 DD +R 00 00 01 00 +T 37 01 00 00 66 F9 E5 DD 6E F6 DD 66 F7 E5 21 +R 00 00 01 00 +T 42 01 00 00 14 00 DD 4E 04 DD 46 05 09 5E 23 +R 00 00 01 00 +T 4D 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 22 00 02 0B 22 00 +T 53 01 00 00 CD 00 00 00 00 C5 E5 21 12 00 DD +R 00 00 01 00 02 05 01 00 +T 5C 01 00 00 4E 04 DD 46 05 09 5E 23 56 3E +R 00 00 01 00 +T 66 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T 6B 01 00 00 00 00 00 00 E5 21 10 00 09 5E 23 +R 00 00 01 00 02 04 01 00 +T 74 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 29 00 02 0B 29 00 +T 7A 01 00 00 CD 00 00 00 00 E5 21 0E 00 DD 4E +R 00 00 01 00 02 05 01 00 +T 83 01 00 00 04 DD 46 05 09 5E 23 56 3E +R 00 00 01 00 +T 8C 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1F 00 02 09 1F 00 +T 91 01 00 00 00 00 00 00 E5 21 0C 00 09 5E 23 +R 00 00 01 00 02 04 01 00 +T 9A 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1F 00 02 0B 1F 00 +T A0 01 00 00 CD 00 00 00 00 E5 21 0A 00 09 5E +R 00 00 01 00 02 05 01 00 +T A9 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1F 00 +T AE 01 00 00 00 00 00 00 CD 00 00 00 00 E5 21 +R 00 00 01 00 02 04 1F 00 02 09 01 00 +T B5 01 00 00 08 00 09 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1F 00 +T BD 01 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 1F 00 02 0A 01 00 +T C4 01 00 00 21 06 00 09 5E 23 56 3E +R 00 00 01 00 +T CC 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 29 00 02 09 29 00 +T D1 01 00 00 00 00 00 00 4D 44 DD 6E 04 DD 66 +R 00 00 01 00 02 04 01 00 +T DA 01 00 00 05 23 23 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1F 00 +T E2 01 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 1F 00 02 0A 01 00 +T E9 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 24 00 02 0A 24 00 +T EF 01 00 00 00 00 00 00 EB 21 16 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T F8 01 00 00 C3 23 08 00 00 +R 00 00 01 00 00 05 01 00 +T FB 01 00 00 +R 00 00 01 00 +T FB 01 00 00 01 05 00 00 00 21 04 00 DD 5E 04 +R 00 00 01 00 00 05 02 00 +T 04 02 00 00 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 0C 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 11 02 00 00 00 00 00 00 7D B4 28 26 +R 00 00 01 00 02 04 01 00 +T 17 02 00 00 +R 00 00 01 00 +T 17 02 00 00 21 04 00 DD 4E 04 DD 46 05 09 4E +R 00 00 01 00 +T 22 02 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 0B 00 +T 29 02 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 2B 0A 25 00 +T 2F 02 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 25 00 02 09 01 00 +T 36 02 00 00 F1 21 FF FF C3 23 08 00 00 +R 00 00 01 00 00 09 01 00 +T 3D 02 00 00 +R 00 00 01 00 +T 3D 02 00 00 01 05 00 00 00 21 04 00 DD 5E 04 +R 00 00 01 00 00 05 02 00 +T 46 02 00 00 DD 56 05 19 5E 23 56 3E +R 00 00 01 00 +T 4E 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 10 00 02 09 10 00 +T 53 02 00 00 00 00 00 00 7D B4 20 61 +R 00 00 01 00 02 04 01 00 +T 59 02 00 00 +R 00 00 01 00 +T 59 02 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 +T 60 02 00 00 +R 00 00 01 00 +T 60 02 00 00 01 06 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T 6B 02 00 00 AC 67 ED 42 30 21 +R 00 00 01 00 +T 71 02 00 00 +R 00 00 01 00 +T 71 02 00 00 01 19 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 7B 02 00 00 00 00 00 00 21 00 00 00 00 19 7E +R 00 00 01 00 02 04 1E 00 02 09 0E 00 +T 82 02 00 00 23 B6 20 02 +R 00 00 01 00 +T 86 02 00 00 +R 00 00 01 00 +T 86 02 00 00 18 0A +R 00 00 01 00 +T 88 02 00 00 +R 00 00 01 00 +T 88 02 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 90 02 00 00 +R 00 00 01 00 +T 90 02 00 00 18 CE +R 00 00 01 00 +T 92 02 00 00 +R 00 00 01 00 +T 92 02 00 00 01 06 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T 9D 02 00 00 AC 67 ED 42 38 17 +R 00 00 01 00 +T A3 02 00 00 +R 00 00 01 00 +T A3 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 1B 00 02 0B 1B 00 +T A9 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 25 00 02 0B 25 00 +T AF 02 00 00 CD 00 00 00 00 F1 F1 21 FF FF C3 +R 00 00 01 00 02 05 01 00 +T B8 02 00 00 23 08 00 00 +R 00 00 01 00 00 04 01 00 +T BA 02 00 00 +R 00 00 01 00 +T BA 02 00 00 +R 00 00 01 00 +T BA 02 00 00 2A 00 00 00 00 7D B4 20 17 +R 00 00 01 00 02 05 1C 00 +T C1 02 00 00 +R 00 00 01 00 +T C1 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0A 00 02 0B 0A 00 +T C7 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 25 00 02 0B 25 00 +T CD 02 00 00 CD 00 00 00 00 F1 F1 21 FF FF C3 +R 00 00 01 00 02 05 01 00 +T D6 02 00 00 23 08 00 00 +R 00 00 01 00 00 04 01 00 +T D8 02 00 00 +R 00 00 01 00 +T D8 02 00 00 DD 6E 04 DD 66 05 23 23 5E 23 56 +R 00 00 01 00 +T E3 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1F 00 02 0A 1F 00 +T E9 02 00 00 00 00 00 00 DD 75 F2 DD 74 F3 4D +R 00 00 01 00 02 04 01 00 +T F2 02 00 00 44 2A 04 00 00 00 A7 ED 42 30 1F +R 00 00 01 00 02 06 1C 00 +T FB 02 00 00 +R 00 00 01 00 +T FB 02 00 00 DD 6E F2 DD 66 F3 E5 0E +R 00 00 01 00 +T 03 03 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0D 00 02 0A 0D 00 +T 09 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 25 00 02 0A 25 00 +T 0F 03 00 00 00 00 00 00 F1 F1 F1 21 FF FF C3 +R 00 00 01 00 02 04 01 00 +T 18 03 00 00 23 08 00 00 +R 00 00 01 00 00 04 01 00 +T 1A 03 00 00 +R 00 00 01 00 +T 1A 03 00 00 DD 6E F2 DD 66 F3 29 01 +R 00 00 01 00 +T 22 03 00 00 00 00 00 00 09 7E 23 B6 28 1F +R 00 00 01 00 02 04 0F 00 +T 2A 03 00 00 +R 00 00 01 00 +T 2A 03 00 00 DD 6E F2 DD 66 F3 E5 0E +R 00 00 01 00 +T 32 03 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 2E 00 02 0A 2E 00 +T 38 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 25 00 02 0A 25 00 +T 3E 03 00 00 00 00 00 00 F1 F1 F1 21 FF FF C3 +R 00 00 01 00 02 04 01 00 +T 47 03 00 00 23 08 00 00 +R 00 00 01 00 00 04 01 00 +T 49 03 00 00 +R 00 00 01 00 +T 49 03 00 00 01 69 00 11 01 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 19 00 +T 51 03 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 19 00 02 0A 01 00 +T 58 03 00 00 75 EE DD 74 EF 23 23 E5 21 06 00 +R 00 00 01 00 +T 63 03 00 00 DD 4E 04 DD 46 05 09 5E 23 56 3E +R 00 00 01 00 +T 6E 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0C 00 02 09 0C 00 +T 73 03 00 00 00 00 00 00 EB 13 3E 00 00 00 00 +R 00 00 01 00 02 04 01 00 2B 0B 21 00 +T 79 03 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 21 00 02 0A 01 00 +T 80 03 00 00 E1 73 23 72 21 06 00 09 4E 23 46 +R 00 00 01 00 +T 8B 03 00 00 DD 6E EE DD 66 EF 23 23 5E 23 56 +R 00 00 01 00 +T 96 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 18 00 02 0A 18 00 +T 9C 03 00 00 00 00 00 00 21 10 00 DD 4E EE DD +R 00 00 01 00 02 04 01 00 +T A5 03 00 00 46 EF 09 E5 21 08 00 DD 5E 04 DD +R 00 00 01 00 +T B0 03 00 00 56 05 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 1F 00 +T B8 03 00 00 21 00 00 00 00 CD 00 00 00 00 EB +R 00 00 01 00 02 05 1F 00 02 0A 01 00 +T BF 03 00 00 E1 73 23 72 21 2C 00 09 DD 5E F2 +R 00 00 01 00 +T CA 03 00 00 DD 56 F3 73 23 72 21 34 00 09 36 +R 00 00 01 00 +T D5 03 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 02 00 8B 0A 02 00 +T DA 03 00 00 36 00 00 00 00 01 7B 00 11 01 00 +R 00 00 01 00 2B 05 02 00 +T E2 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 19 00 02 0A 19 00 +T E8 03 00 00 00 00 00 00 DD 75 F0 DD 74 F1 01 +R 00 00 01 00 02 04 01 00 +T F1 03 00 00 10 00 09 E5 DD 7E F2 E6 01 6F DD +R 00 00 01 00 +T FC 03 00 00 7E F3 E6 00 67 29 01 0A 00 00 00 +R 00 00 01 00 02 0B 1C 00 +T 05 04 00 00 09 46 23 66 68 DD 4E F2 DD 46 F3 +R 00 00 01 00 +T 10 04 00 00 CB 38 CB 19 ED 5B 08 00 00 00 CD +R 00 00 01 00 02 0A 1C 00 +T 19 04 00 00 00 00 00 00 19 ED 4B 06 00 00 00 +R 00 00 01 00 02 04 1E 00 02 0B 1C 00 +T 20 04 00 00 09 4D 44 E1 71 23 70 21 12 00 DD +R 00 00 01 00 +T 2B 04 00 00 4E F0 DD 46 F1 09 E5 21 10 00 09 +R 00 00 01 00 +T 36 04 00 00 56 23 66 6A ED 5B 0E 00 00 00 19 +R 00 00 01 00 02 0A 1C 00 +T 3F 04 00 00 EB E1 73 23 72 21 4B 00 09 DD 4E +R 00 00 01 00 +T 4A 04 00 00 EE DD 46 EF 71 23 70 21 0A 00 DD +R 00 00 01 00 +T 55 04 00 00 4E 04 DD 46 05 09 7E 23 66 6F 4E +R 00 00 01 00 +T 60 04 00 00 06 00 21 00 00 00 00 09 7E E6 02 +R 00 00 01 00 02 07 17 00 +T 69 04 00 00 28 24 +R 00 00 01 00 +T 6B 04 00 00 +R 00 00 01 00 +T 6B 04 00 00 21 0A 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 76 04 00 00 23 66 6F 5E 16 00 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 7E 04 00 00 21 00 00 00 00 CD 00 00 00 00 E5 +R 00 00 01 00 02 05 04 00 02 0A 01 00 +T 85 04 00 00 21 0A 00 09 7E 23 66 6F C1 71 +R 00 00 01 00 +T 8F 04 00 00 +R 00 00 01 00 +T 8F 04 00 00 21 0A 00 DD 4E 04 DD 46 05 09 7E +R 00 00 01 00 +T 9A 04 00 00 23 66 6F 7E FE 64 20 1D +R 00 00 01 00 +T A2 04 00 00 +R 00 00 01 00 +T A2 04 00 00 21 58 00 DD 4E F0 DD 46 F1 09 36 +R 00 00 01 00 +T AD 04 00 00 01 21 0A 00 DD 4E 04 DD 46 05 09 +R 00 00 01 00 +T B8 04 00 00 34 23 20 01 34 +R 00 00 01 00 +T BD 04 00 00 +R 00 00 01 00 +T BD 04 00 00 18 12 +R 00 00 01 00 +T BF 04 00 00 +R 00 00 01 00 +T BF 04 00 00 FE 65 20 0E 21 57 00 DD 4E F0 DD +R 00 00 01 00 +T CA 04 00 00 46 F1 09 36 01 18 00 +R 00 00 01 00 +T D1 04 00 00 +R 00 00 01 00 +T D1 04 00 00 21 4D 00 DD 4E F0 DD 46 F1 09 E5 +R 00 00 01 00 +T DC 04 00 00 21 0C 00 DD 5E 04 DD 56 05 19 5E +R 00 00 01 00 +T E7 04 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 1F 00 +T EC 04 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 1F 00 02 09 01 00 +T F3 04 00 00 73 23 72 21 04 00 DD 5E EE DD 56 +R 00 00 01 00 +T FE 04 00 00 EF 19 ED 4B 02 00 00 00 ED 5B +R 00 00 01 00 02 08 26 00 +T 06 05 00 00 00 00 00 00 73 23 72 23 71 23 70 +R 00 00 01 00 02 04 26 00 +T 0F 05 00 00 DD 6E F2 DD 66 F3 29 01 +R 00 00 01 00 +T 17 05 00 00 00 00 00 00 09 DD 4E F0 DD 46 F1 +R 00 00 01 00 02 04 0F 00 +T 20 05 00 00 71 23 70 21 04 00 DD 4E 04 DD 46 +R 00 00 01 00 +T 2B 05 00 00 05 09 7E 23 66 6F 7E FE 73 C2 +R 00 00 01 00 +T 35 05 00 00 A7 07 00 00 +R 00 00 01 00 00 04 01 00 +T 37 05 00 00 +R 00 00 01 00 +T 37 05 00 00 DD 5E F0 DD 56 F1 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T 3F 05 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 12 00 02 0A 01 00 +T 46 05 00 00 0A 00 DD 4E 04 DD 46 05 09 5E 23 +R 00 00 01 00 +T 51 05 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 22 00 02 0B 22 00 +T 57 05 00 00 CD 00 00 00 00 C5 E5 01 10 00 DD +R 00 00 01 00 02 05 01 00 +T 60 05 00 00 5E F0 DD 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 68 05 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T 6F 05 00 00 DD 75 F4 DD 74 F5 23 23 01 00 00 +R 00 00 01 00 +T 7A 05 00 00 3E 05 CD 00 00 00 00 C5 E5 21 +R 00 00 01 00 02 07 14 00 +T 82 05 00 00 12 00 00 00 5E 23 56 23 4E 23 46 +R 00 00 01 00 02 04 1C 00 +T 8B 05 00 00 EB CD 00 00 00 00 E5 21 53 00 DD +R 00 00 01 00 02 06 20 00 +T 94 05 00 00 5E F0 DD 56 F1 19 D1 73 23 72 23 +R 00 00 01 00 +T 9F 05 00 00 71 23 70 01 0A 00 00 00 DD 5E EE +R 00 00 01 00 00 08 02 00 +T A8 05 00 00 DD 56 EF 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 07 00 +T AE 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 02 09 01 00 +T B4 05 00 00 2E 00 DD 4E EE DD 46 EF 09 36 +R 00 00 01 00 +T BE 05 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 2A 00 8B 0A 2A 00 +T C3 05 00 00 36 00 00 00 00 21 45 00 09 36 +R 00 00 01 00 2B 05 2A 00 +T CA 05 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 15 00 8B 0A 15 00 +T CF 05 00 00 36 00 00 00 00 AF DD 77 FC DD 77 +R 00 00 01 00 2B 05 15 00 +T D7 05 00 00 FD +R 00 00 01 00 +T D8 05 00 00 +R 00 00 01 00 +T D8 05 00 00 01 06 80 DD 6E FC DD 66 FD 3E 80 +R 00 00 01 00 +T E3 05 00 00 AC 67 ED 42 30 21 +R 00 00 01 00 +T E9 05 00 00 +R 00 00 01 00 +T E9 05 00 00 01 19 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T F3 05 00 00 00 00 00 00 21 00 00 00 00 19 7E +R 00 00 01 00 02 04 1E 00 02 09 0E 00 +T FA 05 00 00 23 B6 20 02 +R 00 00 01 00 +T FE 05 00 00 +R 00 00 01 00 +T FE 05 00 00 18 0A +R 00 00 01 00 +T 00 06 00 00 +R 00 00 01 00 +T 00 06 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 08 06 00 00 +R 00 00 01 00 +T 08 06 00 00 18 CE +R 00 00 01 00 +T 0A 06 00 00 +R 00 00 01 00 +T 0A 06 00 00 21 3B 00 DD 4E EE DD 46 EF 09 DD +R 00 00 01 00 +T 15 06 00 00 5E FC DD 56 FD 73 23 72 01 19 00 +R 00 00 01 00 +T 20 06 00 00 CD 00 00 00 00 21 00 00 00 00 19 +R 00 00 01 00 02 05 1E 00 02 0A 0E 00 +T 27 06 00 00 DD 4E EE DD 46 EF 71 23 70 11 +R 00 00 01 00 +T 31 06 00 00 19 00 DD 4E FC DD 46 FD CD +R 00 00 01 00 +T 3A 06 00 00 00 00 00 00 21 0F 00 00 00 19 36 +R 00 00 01 00 02 04 1E 00 02 09 0E 00 +T 41 06 00 00 06 23 36 00 01 19 00 DD 5E FC DD +R 00 00 01 00 +T 4C 06 00 00 56 FD CD 00 00 00 00 21 +R 00 00 01 00 02 07 1E 00 +T 52 06 00 00 11 00 00 00 19 36 00 00 00 00 23 +R 00 00 01 00 02 04 0E 00 0B 0A 1A 00 +T 58 06 00 00 36 00 00 00 00 23 36 00 00 00 00 +R 00 00 01 00 8B 05 1A 00 2B 0B 1A 00 +T 5D 06 00 00 01 19 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 67 06 00 00 00 00 00 00 21 14 00 00 00 19 36 +R 00 00 01 00 02 04 1E 00 02 09 0E 00 +T 6E 06 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 2C 00 8B 0A 2C 00 +T 73 06 00 00 36 00 00 00 00 01 0F 00 00 00 DD +R 00 00 01 00 2B 05 2C 00 00 0A 02 00 +T 79 06 00 00 5E EE DD 56 EF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T 81 06 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 88 06 00 00 FE DD 74 FF DD 4E 02 DD 46 03 21 +R 00 00 01 00 +T 93 06 00 00 08 00 CD 00 00 00 00 30 57 01 +R 00 00 01 00 02 07 23 00 +T 9B 06 00 00 76 00 21 10 00 DD 5E 04 DD 56 05 +R 00 00 01 00 +T A6 06 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T AD 06 00 00 00 00 00 00 CD 00 00 00 00 7D B4 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T B4 06 00 00 28 3B +R 00 00 01 00 +T B6 06 00 00 +R 00 00 01 00 +T B6 06 00 00 +R 00 00 01 00 +T B6 06 00 00 +R 00 00 01 00 +T B6 06 00 00 01 19 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T C0 06 00 00 00 00 00 00 21 02 00 00 00 19 7E +R 00 00 01 00 02 04 1E 00 02 09 0E 00 +T C7 06 00 00 F6 02 77 01 19 00 DD 5E FC DD 56 +R 00 00 01 00 +T D2 06 00 00 FD CD 00 00 00 00 21 17 00 00 00 +R 00 00 01 00 02 06 1E 00 02 0B 0E 00 +T D9 06 00 00 19 E5 01 10 00 11 10 00 3E +R 00 00 01 00 +T E2 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T E7 06 00 00 00 00 00 00 4D 44 E1 71 23 70 18 +R 00 00 01 00 02 04 01 00 +T F0 06 00 00 63 +R 00 00 01 00 +T F1 06 00 00 +R 00 00 01 00 +T F1 06 00 00 DD 4E 02 DD 46 03 21 07 00 CD +R 00 00 01 00 +T FB 06 00 00 00 00 00 00 30 55 01 76 00 21 +R 00 00 01 00 02 04 23 00 +T 03 07 00 00 0E 00 DD 5E 04 DD 56 05 19 5E 23 +R 00 00 01 00 +T 0E 07 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 14 07 00 00 CD 00 00 00 00 7D B4 28 39 +R 00 00 01 00 02 05 01 00 +T 1B 07 00 00 +R 00 00 01 00 +T 1B 07 00 00 +R 00 00 01 00 +T 1B 07 00 00 +R 00 00 01 00 +T 1B 07 00 00 01 19 00 DD 5E FC DD 56 FD CD +R 00 00 01 00 +T 25 07 00 00 00 00 00 00 21 02 00 00 00 19 7E +R 00 00 01 00 02 04 1E 00 02 09 0E 00 +T 2C 07 00 00 F6 02 77 01 19 00 DD 5E FC DD 56 +R 00 00 01 00 +T 37 07 00 00 FD CD 00 00 00 00 21 17 00 00 00 +R 00 00 01 00 02 06 1E 00 02 0B 0E 00 +T 3E 07 00 00 19 E5 01 10 00 11 10 00 3E +R 00 00 01 00 +T 47 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2B 00 02 09 2B 00 +T 4C 07 00 00 00 00 00 00 4D 44 E1 71 23 70 +R 00 00 01 00 02 04 01 00 +T 54 07 00 00 +R 00 00 01 00 +T 54 07 00 00 +R 00 00 01 00 +T 54 07 00 00 21 18 00 DD 4E EE DD 46 EF 09 E5 +R 00 00 01 00 +T 5F 07 00 00 01 00 00 C5 01 00 00 C5 01 00 00 +R 00 00 01 00 +T 6A 07 00 00 C5 DD 4E FC DD 46 FD C5 0E +R 00 00 01 00 +T 73 07 00 00 00 00 00 00 C5 01 00 00 00 00 C5 +R 00 00 01 00 2B 04 00 00 02 0A 00 00 +T 79 07 00 00 01 00 01 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 83 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2D 00 02 09 2D 00 +T 88 07 00 00 00 00 00 00 EB 21 0C 00 39 F9 EB +R 00 00 01 00 02 04 01 00 +T 91 07 00 00 4D 44 E1 71 23 70 DD 5E FE DD 56 +R 00 00 01 00 +T 9C 07 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T A2 07 00 00 CD 00 00 00 00 18 00 +R 00 00 01 00 02 05 01 00 +T A7 07 00 00 +R 00 00 01 00 +T A7 07 00 00 2A 00 00 00 00 E5 DD 6E EE DD 66 +R 00 00 01 00 02 05 03 00 +T B0 07 00 00 EF C1 71 23 70 DD 6E EE DD 66 EF +R 00 00 01 00 +T BB 07 00 00 22 00 00 00 00 01 13 00 00 00 DD +R 00 00 01 00 02 05 03 00 00 0A 02 00 +T C2 07 00 00 5E EE DD 56 EF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 06 00 +T CA 07 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T D1 07 00 00 FE DD 74 FF 21 1A 00 DD 4E EE DD +R 00 00 01 00 +T DC 07 00 00 46 EF 09 E5 11 00 00 D5 11 00 00 +R 00 00 01 00 +T E7 07 00 00 D5 C5 01 00 00 C5 0E 00 00 00 00 +R 00 00 01 00 2B 0B 11 00 +T EF 07 00 00 C5 01 00 00 00 00 C5 01 00 02 DD +R 00 00 01 00 02 06 11 00 +T F8 07 00 00 5E FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 2D 00 +T 00 08 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 2D 00 02 09 01 00 +T 07 08 00 00 0C 00 39 F9 EB 4D 44 E1 71 23 70 +R 00 00 01 00 +T 12 08 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 16 00 +T 1A 08 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 16 00 02 0A 01 00 +T 21 08 00 00 00 00 +R 00 00 01 00 +T 23 08 00 00 +R 00 00 01 00 +T 23 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 69 6E 69 74 00 +R 00 00 02 00 +T 05 00 00 00 +R 00 00 02 00 +T 05 00 00 00 73 6C 69 70 00 +R 00 00 02 00 +T 0A 00 00 00 +R 00 00 02 00 +T 0A 00 00 00 53 4C 49 50 00 +R 00 00 02 00 +T 0F 00 00 00 +R 00 00 02 00 +T 0F 00 00 00 20 72 78 00 +R 00 00 02 00 +T 13 00 00 00 +R 00 00 02 00 +T 13 00 00 00 20 74 78 00 +R 00 00 02 00 diff --git a/src/nos/lib/z80_lib/escc_delay.rel b/src/nos/lib/z80_lib/escc_delay.rel new file mode 100644 index 00000000..ee93d3e9 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_delay.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size E flags 0 +S _escc_delay Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF DD 6E 02 DD +R 00 00 01 00 02 05 02 00 +T 09 00 00 00 66 03 C3 00 00 00 00 +R 00 00 01 00 02 07 00 00 diff --git a/src/nos/lib/z80_lib/escc_frameup.rel b/src/nos/lib/z80_lib/escc_frameup.rel new file mode 100644 index 00000000..a9935915 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_frameup.rel @@ -0,0 +1,21 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Esccchan Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1A flags 0 +S _escc_frameup Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 EB 29 01 +R 00 00 01 00 02 05 03 00 +T 06 00 00 00 00 00 00 00 09 46 23 66 68 01 +R 00 00 01 00 02 04 01 00 +T 0E 00 00 00 6F 00 09 CD 00 00 00 00 21 00 00 +R 00 00 01 00 02 08 04 00 +T 17 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 00 00 diff --git a/src/nos/lib/z80_lib/escc_init.rel b/src/nos/lib/z80_lib/escc_init.rel new file mode 100644 index 00000000..91a76e2f --- /dev/null +++ b/src/nos/lib/z80_lib/escc_init.rel @@ -0,0 +1,694 @@ +XL4 +H 2 areas 18 global symbols +S _Esccmaxvec Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S ?S_MULASG_L02 Ref00000000 +S _maskon Ref00000000 +S _getirq Ref00000000 +S _escc_delay Ref00000000 +S _Orgivec Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _setirq Ref00000000 +S .__.ABS. Def00000000 +S ___0266_0a8a_ESCC_20driver_20alr Ref00000000 +S _dirps Ref00000000 +S _Esccinfo Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S _Esccpolltab Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _esccnovec Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 806 flags 0 +S _escc_init Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F0 FF DD 36 FA 01 +R 00 00 01 00 02 05 0E 00 +T 09 00 00 00 DD 36 FB 00 2A 00 00 00 00 7D B4 +R 00 00 01 00 02 09 0D 00 +T 12 00 00 00 28 17 +R 00 00 01 00 +T 14 00 00 00 +R 00 00 01 00 +T 14 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0B 00 02 0B 0B 00 +T 1A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 12 00 02 0B 12 00 +T 20 00 00 00 CD 00 00 00 00 F1 F1 21 01 00 C3 +R 00 00 01 00 02 05 01 00 +T 29 00 00 00 03 08 00 00 +R 00 00 01 00 00 04 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 01 00 22 00 00 00 00 DD 6E 02 +R 00 00 01 00 02 08 0D 00 +T 34 00 00 00 DD 66 03 22 02 00 00 00 DD 6E 02 +R 00 00 01 00 02 08 0D 00 +T 3D 00 00 00 DD 66 03 29 2B 22 04 00 00 00 DD +R 00 00 01 00 02 0A 0D 00 +T 46 00 00 00 6E 04 DD 66 05 22 06 00 00 00 DD +R 00 00 01 00 02 0A 0D 00 +T 4F 00 00 00 6E 0A DD 66 0B 22 08 00 00 00 DD +R 00 00 01 00 02 0A 0D 00 +T 58 00 00 00 6E 0C DD 66 0D 22 0A 00 00 00 DD +R 00 00 01 00 02 0A 0D 00 +T 61 00 00 00 6E 0E DD 66 0F 22 0C 00 00 00 DD +R 00 00 01 00 02 0A 0D 00 +T 6A 00 00 00 6E 10 DD 66 11 22 0E 00 00 00 DD +R 00 00 01 00 02 0A 0D 00 +T 73 00 00 00 6E 14 DD 66 15 22 10 00 00 00 DD +R 00 00 01 00 02 0A 0D 00 +T 7C 00 00 00 4E 18 DD 46 19 DD 6E 16 DD 66 17 +R 00 00 01 00 +T 87 00 00 00 22 12 00 00 00 ED 43 14 00 00 00 +R 00 00 01 00 02 05 0D 00 02 0B 0D 00 +T 8E 00 00 00 DD 6E 1A DD 66 1B 22 16 00 00 00 +R 00 00 01 00 02 0B 0D 00 +T 97 00 00 00 DD 6E 1C DD 66 1D 22 18 00 00 00 +R 00 00 01 00 02 0B 0D 00 +T A0 00 00 00 DD 6E 1E DD 66 1F 22 1A 00 00 00 +R 00 00 01 00 02 0B 0D 00 +T A9 00 00 00 AF DD 77 F0 DD 77 F1 +R 00 00 01 00 +T B0 00 00 00 +R 00 00 01 00 +T B0 00 00 00 DD 4E 02 DD 46 03 DD 6E F0 DD 66 +R 00 00 01 00 +T BB 00 00 00 F1 CD 00 00 00 00 D2 AC 07 00 00 +R 00 00 01 00 02 06 11 00 00 0B 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 DD 4E 0A DD 46 0B DD 5E F0 DD 56 +R 00 00 01 00 +T CD 00 00 00 F1 CD 00 00 00 00 DD 6E 04 DD 66 +R 00 00 01 00 02 06 0F 00 +T D6 00 00 00 05 19 DD 75 F4 DD 74 F5 ED 4B +R 00 00 01 00 +T E0 00 00 00 0A 00 00 00 09 DD 75 F6 DD 74 F7 +R 00 00 01 00 02 04 0D 00 +T E9 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0C 00 02 0A 0C 00 +T EF 00 00 00 00 00 00 00 DD 75 FC DD 74 FD DD +R 00 00 01 00 02 04 01 00 +T F8 00 00 00 5E F6 DD 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 15 00 +T 00 01 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 15 00 02 09 01 00 +T 07 01 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 06 00 02 0B 06 00 +T 0D 01 00 00 CD 00 00 00 00 0E 09 DD 5E F6 DD +R 00 00 01 00 02 05 01 00 +T 16 01 00 00 56 F7 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 16 00 +T 1B 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 16 00 02 09 01 00 +T 21 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 26 01 00 00 00 00 00 00 CD 00 00 00 00 0E C0 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 2D 01 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 16 00 +T 35 01 00 00 21 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 05 16 00 02 0A 01 00 +T 3C 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 41 01 00 00 00 00 00 00 CD 00 00 00 00 AF DD +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 48 01 00 00 77 F8 DD 77 F9 +R 00 00 01 00 +T 4D 01 00 00 +R 00 00 01 00 +T 4D 01 00 00 01 E8 83 DD 6E F8 DD 66 F9 3E 80 +R 00 00 01 00 +T 58 01 00 00 AC 67 ED 42 30 14 +R 00 00 01 00 +T 5E 01 00 00 +R 00 00 01 00 +T 5E 01 00 00 21 0A 00 39 01 0A 00 CD +R 00 00 01 00 +T 66 01 00 00 00 00 00 00 DD 34 F8 20 03 DD 34 +R 00 00 01 00 02 04 03 00 +T 6F 01 00 00 F9 +R 00 00 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 18 DB +R 00 00 01 00 +T 72 01 00 00 +R 00 00 01 00 +T 72 01 00 00 AF DD 77 F2 DD 77 F3 +R 00 00 01 00 +T 79 01 00 00 +R 00 00 01 00 +T 79 01 00 00 01 02 80 DD 6E F2 DD 66 F3 3E 80 +R 00 00 01 00 +T 84 01 00 00 AC 67 ED 42 D2 31 03 00 00 +R 00 00 01 00 00 09 01 00 +T 8B 01 00 00 +R 00 00 01 00 +T 8B 01 00 00 DD 6E F2 DD 66 F3 29 01 +R 00 00 01 00 +T 93 01 00 00 0A 00 00 00 09 46 23 66 68 DD 4E +R 00 00 01 00 02 04 0D 00 +T 9C 01 00 00 F4 DD 46 F5 09 DD 75 F6 DD 74 F7 +R 00 00 01 00 +T A7 01 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 15 00 02 0B 15 00 +T AD 01 00 00 CD 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 05 01 00 +T B4 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T B9 01 00 00 00 00 00 00 0E 04 DD 5E F6 DD 56 +R 00 00 01 00 02 04 01 00 +T C2 01 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T C8 01 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T CF 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T D4 01 00 00 00 00 00 00 0E 00 DD 5E F6 DD 56 +R 00 00 01 00 02 04 01 00 +T DD 01 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T E3 01 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T EA 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T EF 01 00 00 00 00 00 00 0E 01 DD 5E F6 DD 56 +R 00 00 01 00 02 04 01 00 +T F8 01 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T FE 01 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 05 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 0A 02 00 00 00 00 00 00 0E 00 DD 5E F6 DD 56 +R 00 00 01 00 02 04 01 00 +T 13 02 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 19 02 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 20 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 25 02 00 00 00 00 00 00 0E 02 DD 5E F6 DD 56 +R 00 00 01 00 02 04 01 00 +T 2E 02 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 34 02 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 3B 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 40 02 00 00 00 00 00 00 DD 7E F0 87 87 87 87 +R 00 00 01 00 02 04 01 00 +T 49 02 00 00 4F DD 5E F6 DD 56 F7 3E +R 00 00 01 00 +T 51 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T 56 02 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 5C 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 61 02 00 00 00 00 00 00 0E 03 DD 5E F6 DD 56 +R 00 00 01 00 02 04 01 00 +T 6A 02 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 70 02 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 77 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 7C 02 00 00 00 00 00 00 0E 00 DD 5E F6 DD 56 +R 00 00 01 00 02 04 01 00 +T 85 02 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 8B 02 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 92 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 97 02 00 00 00 00 00 00 0E 05 DD 5E F6 DD 56 +R 00 00 01 00 02 04 01 00 +T A0 02 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T A6 02 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T AD 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T B2 02 00 00 00 00 00 00 0E 00 DD 5E F6 DD 56 +R 00 00 01 00 02 04 01 00 +T BB 02 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T C1 02 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T C8 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T CD 02 00 00 00 00 00 00 0E 09 DD 5E F6 DD 56 +R 00 00 01 00 02 04 01 00 +T D6 02 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T DC 02 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T E3 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T E8 02 00 00 00 00 00 00 0E 01 DD 5E F6 DD 56 +R 00 00 01 00 02 04 01 00 +T F1 02 00 00 F7 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T F7 02 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T FE 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 03 03 00 00 00 00 00 00 DD 6E F0 DD 66 F1 29 +R 00 00 01 00 02 04 01 00 +T 0C 03 00 00 29 E5 DD 6E F2 DD 66 F3 29 4D 44 +R 00 00 01 00 +T 17 03 00 00 E1 09 01 00 00 00 00 09 DD 4E F6 +R 00 00 01 00 02 07 10 00 +T 20 03 00 00 DD 46 F7 71 23 70 DD 34 F2 20 03 +R 00 00 01 00 +T 2B 03 00 00 DD 34 F3 +R 00 00 01 00 +T 2E 03 00 00 +R 00 00 01 00 +T 2E 03 00 00 C3 79 01 00 00 +R 00 00 01 00 00 05 01 00 +T 31 03 00 00 +R 00 00 01 00 +T 31 03 00 00 DD 7E 1C E6 10 28 21 +R 00 00 01 00 +T 38 03 00 00 +R 00 00 01 00 +T 38 03 00 00 DD 4E 1E 21 04 00 DD 5E F4 DD 56 +R 00 00 01 00 +T 43 03 00 00 F5 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 16 00 +T 49 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 16 00 02 09 01 00 +T 4F 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 54 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 59 03 00 00 +R 00 00 01 00 +T 59 03 00 00 DD 7E 1C E6 01 28 20 +R 00 00 01 00 +T 60 03 00 00 +R 00 00 01 00 +T 60 03 00 00 0E 08 21 04 00 DD 5E F4 DD 56 F5 +R 00 00 01 00 +T 6B 03 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 16 00 +T 70 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 16 00 02 09 01 00 +T 76 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 7B 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 80 03 00 00 +R 00 00 01 00 +T 80 03 00 00 DD 7E 1C E6 02 28 1C +R 00 00 01 00 +T 87 03 00 00 +R 00 00 01 00 +T 87 03 00 00 DD 4E 1E DD 5E F4 DD 56 F5 3E +R 00 00 01 00 +T 91 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T 96 03 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 9C 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T A1 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T A3 03 00 00 +R 00 00 01 00 +T A3 03 00 00 DD 7E 1C E6 04 28 21 +R 00 00 01 00 +T AA 03 00 00 +R 00 00 01 00 +T AA 03 00 00 DD 4E 1E 21 04 00 DD 5E F4 DD 56 +R 00 00 01 00 +T B5 03 00 00 F5 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 16 00 +T BB 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 16 00 02 09 01 00 +T C1 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T C6 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T CB 03 00 00 +R 00 00 01 00 +T CB 03 00 00 DD 7E 1C E6 08 CA 93 07 00 00 +R 00 00 01 00 00 0A 01 00 +T D3 03 00 00 +R 00 00 01 00 +T D3 03 00 00 21 07 00 DD 4E F4 DD 46 F5 09 DD +R 00 00 01 00 +T DE 03 00 00 75 FE DD 74 FF EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T E6 03 00 00 21 00 00 00 00 CD 00 00 00 00 5D +R 00 00 01 00 02 05 15 00 02 0A 01 00 +T ED 03 00 00 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T F2 03 00 00 00 00 00 00 CD 00 00 00 00 0E 00 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T F9 03 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 16 00 +T 01 04 00 00 21 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 05 16 00 02 0A 01 00 +T 08 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 0D 04 00 00 00 00 00 00 CD 00 00 00 00 0E 01 +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 14 04 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 16 00 +T 1C 04 00 00 21 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 05 16 00 02 0A 01 00 +T 23 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T 28 04 00 00 00 00 00 00 CD 00 00 00 00 AF DD +R 00 00 01 00 02 04 06 00 02 09 01 00 +T 2F 04 00 00 77 F8 DD 77 F9 +R 00 00 01 00 +T 34 04 00 00 +R 00 00 01 00 +T 34 04 00 00 01 E8 83 DD 6E F8 DD 66 F9 3E 80 +R 00 00 01 00 +T 3F 04 00 00 AC 67 ED 42 30 14 +R 00 00 01 00 +T 45 04 00 00 +R 00 00 01 00 +T 45 04 00 00 21 0A 00 39 01 0A 00 CD +R 00 00 01 00 +T 4D 04 00 00 00 00 00 00 DD 34 F8 20 03 DD 34 +R 00 00 01 00 02 04 03 00 +T 56 04 00 00 F9 +R 00 00 01 00 +T 57 04 00 00 +R 00 00 01 00 +T 57 04 00 00 18 DB +R 00 00 01 00 +T 59 04 00 00 +R 00 00 01 00 +T 59 04 00 00 0E 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 62 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T 67 04 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 6D 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 72 04 00 00 00 00 00 00 0E 00 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 7B 04 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 81 04 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 88 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 8D 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 8F 04 00 00 +R 00 00 01 00 +T 8F 04 00 00 0E 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 98 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T 9D 04 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T A3 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T A8 04 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 02 04 01 00 +T B1 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T B6 04 00 00 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 04 01 00 +T BC 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T C1 04 00 00 00 00 00 00 3E 02 AD B4 28 0C +R 00 00 01 00 02 04 01 00 +T C9 04 00 00 +R 00 00 01 00 +T C9 04 00 00 21 0A 00 39 01 0A 00 CD +R 00 00 01 00 +T D1 04 00 00 00 00 00 00 18 BA +R 00 00 01 00 02 04 03 00 +T D5 04 00 00 +R 00 00 01 00 +T D5 04 00 00 0E 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T DE 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 16 00 02 09 16 00 +T E3 04 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T E9 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T EE 04 00 00 00 00 00 00 0E 26 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T F7 04 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T FD 04 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 04 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 09 05 00 00 00 00 00 00 0E 01 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 12 05 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 18 05 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 1F 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 24 05 00 00 00 00 00 00 0E F4 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 2D 05 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 33 05 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 3A 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 3F 05 00 00 00 00 00 00 0E 1C DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 48 05 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 4E 05 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 55 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 5A 05 00 00 00 00 00 00 0E E2 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 63 05 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 69 05 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 70 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 75 05 00 00 00 00 00 00 0E 1D DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 7E 05 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 84 05 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 8B 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 90 05 00 00 00 00 00 00 0E E2 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 99 05 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 9F 05 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T A6 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T AB 05 00 00 00 00 00 00 0E 16 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T B4 05 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T BA 05 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T C1 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T C6 05 00 00 00 00 00 00 0E 00 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T CF 05 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T D5 05 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T DC 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T E1 05 00 00 00 00 00 00 0E 17 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T EA 05 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T F0 05 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T F7 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T FC 05 00 00 00 00 00 00 0E 10 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 05 06 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 0B 06 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 12 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 17 06 00 00 00 00 00 00 0E 18 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 20 06 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 26 06 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 2D 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 32 06 00 00 00 00 00 00 0E 00 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 3B 06 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 41 06 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 48 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 4D 06 00 00 00 00 00 00 0E 19 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 56 06 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 5C 06 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 63 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 68 06 00 00 00 00 00 00 0E 10 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 71 06 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 77 06 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 7E 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 83 06 00 00 00 00 00 00 0E 04 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 8C 06 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 92 06 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 99 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 9E 06 00 00 00 00 00 00 0E 06 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T A7 06 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T AD 06 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T B4 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T B9 06 00 00 00 00 00 00 0E 23 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T C2 06 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T C8 06 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T CF 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T D4 06 00 00 00 00 00 00 0E 22 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T DD 06 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T E3 06 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T EA 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T EF 06 00 00 00 00 00 00 0E 2B DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T F8 06 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T FE 06 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 05 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 0A 07 00 00 00 00 00 00 0E 22 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 13 07 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 19 07 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 20 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 25 07 00 00 00 00 00 00 0E 0A DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 2E 07 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 34 07 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 3B 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 40 07 00 00 00 00 00 00 0E 06 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 49 07 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 4F 07 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 56 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 5B 07 00 00 00 00 00 00 0E 0B DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 64 07 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 6A 07 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 71 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 76 07 00 00 00 00 00 00 0E 06 DD 5E FE DD 56 +R 00 00 01 00 02 04 01 00 +T 7F 07 00 00 FF 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 16 00 02 0B 16 00 +T 85 07 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 01 00 +T 8C 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T 91 07 00 00 00 00 00 00 +R 00 00 01 00 02 04 01 00 +T 93 07 00 00 +R 00 00 01 00 +T 93 07 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 9B 07 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 01 00 +T A2 07 00 00 34 F0 20 03 DD 34 F1 +R 00 00 01 00 +T A9 07 00 00 +R 00 00 01 00 +T A9 07 00 00 C3 B0 00 00 00 +R 00 00 01 00 00 05 01 00 +T AC 07 00 00 +R 00 00 01 00 +T AC 07 00 00 DD 6E F0 DD 66 F1 29 29 01 +R 00 00 01 00 +T B5 07 00 00 00 00 00 00 09 AF 77 23 77 DD 7E +R 00 00 01 00 02 04 10 00 +T BE 07 00 00 02 87 87 87 87 32 00 00 00 00 DD +R 00 00 01 00 02 0A 00 00 +T C7 07 00 00 5E 14 DD 56 15 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T CF 07 00 00 00 00 00 00 CD 00 00 00 00 79 32 +R 00 00 01 00 02 04 05 00 02 09 01 00 +T D6 07 00 00 02 00 00 00 22 00 00 00 00 0E +R 00 00 01 00 02 04 07 00 02 09 07 00 +T DC 07 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 14 00 02 0A 14 00 +T E2 07 00 00 DD 5E 14 DD 56 15 3E 00 00 00 00 +R 00 00 01 00 2B 0B 09 00 +T EA 07 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 09 00 02 0A 01 00 +T F1 07 00 00 F1 DD 5E 14 DD 56 15 3E +R 00 00 01 00 +T F9 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T FE 07 00 00 00 00 00 00 21 00 00 +R 00 00 01 00 02 04 01 00 +T 03 08 00 00 +R 00 00 01 00 +T 03 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 diff --git a/src/nos/lib/z80_lib/escc_raw.rel b/src/nos/lib/z80_lib/escc_raw.rel new file mode 100644 index 00000000..12e2f0f2 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_raw.rel @@ -0,0 +1,102 @@ +XL4 +H 2 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _secclock Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Esccchan Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S _free_p Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _dump Ref00000000 +S _enqueue Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 121 flags 0 +S _escc_raw Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 69 60 4E 23 +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 46 C5 01 01 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 14 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T 1A 00 00 00 00 00 00 00 E1 21 55 00 DD 4E 02 +R 00 00 01 00 02 04 00 00 +T 23 00 00 00 DD 46 03 09 CD 00 00 00 00 21 +R 00 00 01 00 02 09 09 00 +T 2B 00 00 00 61 00 DD 4E 02 DD 46 03 09 E5 3E +R 00 00 01 00 +T 36 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 3B 00 00 00 00 00 00 00 EB E1 73 23 72 23 71 +R 00 00 01 00 02 04 00 00 +T 44 00 00 00 23 70 21 2C 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 4F 00 00 00 09 46 23 66 68 29 01 00 00 00 00 +R 00 00 01 00 02 0B 04 00 +T 58 00 00 00 09 46 23 66 68 DD 75 FC DD 74 FD +R 00 00 01 00 +T 63 00 00 00 01 59 00 09 7E B7 28 14 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 DD 5E 04 DD 56 05 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0A 00 +T 73 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0A 00 02 0A 00 00 +T 7A 00 00 00 FF FF C3 1E 01 00 00 +R 00 00 01 00 00 07 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 DD 4E 04 DD 46 05 21 47 00 DD 5E +R 00 00 01 00 +T 8A 00 00 00 FC DD 56 FD 19 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0E 00 +T 92 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 0E 00 02 0A 00 00 +T 99 00 00 00 6B 00 DD 4E FC DD 46 FD 09 CD +R 00 00 01 00 +T A3 00 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 2B 09 06 00 +T A8 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T AF 00 00 00 FE DD 74 FF 21 38 00 DD 4E FC DD +R 00 00 01 00 +T BA 00 00 00 46 FD 09 7E 23 B6 20 4B +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 21 38 00 DD 4E FC DD 46 FD 09 36 +R 00 00 01 00 +T CD 00 00 00 01 23 36 00 21 36 00 09 E5 21 +R 00 00 01 00 +T D7 00 00 00 42 00 09 5E 16 00 01 12 00 CD +R 00 00 01 00 +T E1 00 00 00 00 00 00 00 21 3C 00 DD 4E FC DD +R 00 00 01 00 02 04 08 00 +T EA 00 00 00 46 FD 09 4E 06 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 0B 00 +T F3 00 00 00 E1 73 23 72 21 4F 00 DD 4E FC DD +R 00 00 01 00 +T FE 00 00 00 46 FD 09 E5 21 3F 00 09 4E 06 00 +R 00 00 01 00 +T 09 01 00 00 E1 71 23 70 +R 00 00 01 00 +T 0D 01 00 00 +R 00 00 01 00 +T 0D 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 15 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 1C 01 00 00 00 00 +R 00 00 01 00 +T 1E 01 00 00 +R 00 00 01 00 +T 1E 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/z80_lib/escc_sdlc.rel b/src/nos/lib/z80_lib/escc_sdlc.rel new file mode 100644 index 00000000..efa2865c --- /dev/null +++ b/src/nos/lib/z80_lib/escc_sdlc.rel @@ -0,0 +1,630 @@ +XL4 +H 2 areas 10 global symbols +S _escc_sdlcex Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _escc_sdlcsp Ref00000000 +S _escc_delay Ref00000000 +S _escc_sdlcrx Ref00000000 +S _escc_sdlctx Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S _Esccinfo Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 814 flags 0 +S _escc_sdlc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 0B 00 +T 09 00 00 00 66 03 36 00 00 00 00 23 36 +R 00 00 01 00 0B 07 06 00 +T 0F 00 00 00 00 00 00 00 23 36 00 00 00 00 21 +R 00 00 01 00 8B 04 06 00 2B 0A 06 00 +T 14 00 00 00 04 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 1E 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 00 00 8B 0A 00 00 +T 23 00 00 00 36 00 00 00 00 21 08 00 09 36 +R 00 00 01 00 2B 05 00 00 +T 2A 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 05 00 8B 0A 05 00 +T 2F 00 00 00 36 00 00 00 00 21 0C 00 09 36 +R 00 00 01 00 2B 05 05 00 +T 36 00 00 00 00 00 00 00 23 36 00 00 00 00 23 +R 00 00 01 00 0B 04 03 00 8B 0A 03 00 +T 3B 00 00 00 36 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 05 03 00 2B 0A 09 00 +T 40 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 09 00 02 09 01 00 +T 47 00 00 00 FE DD 74 FF 0E 04 21 10 00 DD 5E +R 00 00 01 00 +T 52 00 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 5B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 60 00 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 66 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 6B 00 00 00 00 00 00 00 21 18 00 DD 4E 02 DD +R 00 00 01 00 02 04 01 00 +T 74 00 00 00 46 03 09 36 20 0E 20 21 10 00 DD +R 00 00 01 00 +T 7F 00 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 89 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 8E 00 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 94 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 99 00 00 00 00 00 00 00 0E 01 21 10 00 DD 5E +R 00 00 01 00 02 04 01 00 +T A2 00 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T AB 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T B0 00 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T B6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T BB 00 00 00 00 00 00 00 21 15 00 DD 4E 02 DD +R 00 00 01 00 02 04 01 00 +T C4 00 00 00 46 03 09 36 00 0E 00 21 10 00 DD +R 00 00 01 00 +T CF 00 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T D9 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T DE 00 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T E4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T E9 00 00 00 00 00 00 00 0E 03 21 10 00 DD 5E +R 00 00 01 00 02 04 01 00 +T F2 00 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T FB 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 00 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 06 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 0B 01 00 00 00 00 00 00 21 17 00 DD 4E 02 DD +R 00 00 01 00 02 04 01 00 +T 14 01 00 00 46 03 09 36 C8 0E C8 21 10 00 DD +R 00 00 01 00 +T 1F 01 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 29 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 2E 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 34 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 39 01 00 00 00 00 00 00 0E 05 21 10 00 DD 5E +R 00 00 01 00 02 04 01 00 +T 42 01 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 4B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 50 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 56 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 5B 01 00 00 00 00 00 00 21 19 00 DD 4E 02 DD +R 00 00 01 00 02 04 01 00 +T 64 01 00 00 46 03 09 36 E1 0E E1 21 10 00 DD +R 00 00 01 00 +T 6F 01 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 79 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 7E 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 84 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 89 01 00 00 00 00 00 00 0E 06 21 10 00 DD 5E +R 00 00 01 00 02 04 01 00 +T 92 01 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 9B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T A0 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T A6 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T AB 01 00 00 00 00 00 00 21 1A 00 DD 4E 02 DD +R 00 00 01 00 02 04 01 00 +T B4 01 00 00 46 03 09 36 00 0E 00 21 10 00 DD +R 00 00 01 00 +T BF 01 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T C9 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T CE 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T D4 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T D9 01 00 00 00 00 00 00 0E 07 21 10 00 DD 5E +R 00 00 01 00 02 04 01 00 +T E2 01 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T EB 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T F0 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T F6 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T FB 01 00 00 00 00 00 00 21 1B 00 DD 4E 02 DD +R 00 00 01 00 02 04 01 00 +T 04 02 00 00 46 03 09 36 7E 0E 7E 21 10 00 DD +R 00 00 01 00 +T 0F 02 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 19 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 1E 02 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 24 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 29 02 00 00 00 00 00 00 0E 09 21 10 00 DD 5E +R 00 00 01 00 02 04 01 00 +T 32 02 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 3B 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 40 02 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 46 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 4B 02 00 00 00 00 00 00 21 1D 00 DD 4E 02 DD +R 00 00 01 00 02 04 01 00 +T 54 02 00 00 46 03 09 36 01 0E 01 21 10 00 DD +R 00 00 01 00 +T 5F 02 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 69 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 6E 02 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 74 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 79 02 00 00 00 00 00 00 0E 0A 21 10 00 DD 5E +R 00 00 01 00 02 04 01 00 +T 82 02 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 8B 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T 90 02 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T 96 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 9B 02 00 00 00 00 00 00 21 1E 00 DD 4E 02 DD +R 00 00 01 00 02 04 01 00 +T A4 02 00 00 46 03 09 36 A4 0E A4 21 10 00 DD +R 00 00 01 00 +T AF 02 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T B9 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0E 00 02 09 0E 00 +T BE 02 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 01 00 +T C4 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T C9 02 00 00 00 00 00 00 21 57 00 DD 4E 02 DD +R 00 00 01 00 02 04 01 00 +T D2 02 00 00 46 03 09 7E B7 CA CD 03 00 00 +R 00 00 01 00 00 0A 01 00 +T DA 02 00 00 +R 00 00 01 00 +T DA 02 00 00 0E 0B 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T E5 02 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T EC 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T F2 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T F7 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T FD 02 00 00 1F 00 DD 4E 02 DD 46 03 09 36 08 +R 00 00 01 00 +T 08 03 00 00 0E 08 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 13 03 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 1A 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 20 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 25 03 00 00 00 00 00 00 CD 00 00 00 00 0E 0E +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 2C 03 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 37 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 3C 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 42 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 47 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 4D 03 00 00 22 00 DD 4E 02 DD 46 03 09 36 00 +R 00 00 01 00 +T 58 03 00 00 0E 00 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 63 03 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 6A 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 70 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 75 03 00 00 00 00 00 00 CD 00 00 00 00 0E 0E +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 7C 03 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 87 03 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 8C 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 92 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 97 03 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 9D 03 00 00 22 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T A8 03 00 00 60 4F 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T B3 03 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T BA 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T C0 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T C5 03 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T CB 03 00 00 D1 05 00 00 +R 00 00 01 00 00 04 01 00 +T CD 03 00 00 +R 00 00 01 00 +T CD 03 00 00 21 58 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T D8 03 00 00 B7 CA 87 04 00 00 +R 00 00 01 00 00 06 01 00 +T DC 03 00 00 +R 00 00 01 00 +T DC 03 00 00 2A 16 00 00 00 7D B4 28 52 +R 00 00 01 00 02 05 0A 00 +T E3 03 00 00 +R 00 00 01 00 +T E3 03 00 00 0E 0B 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T EE 03 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T F5 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T FB 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 00 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 06 04 00 00 1F 00 DD 4E 02 DD 46 03 09 36 66 +R 00 00 01 00 +T 11 04 00 00 0E 66 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 1C 04 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 23 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 29 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 2E 04 00 00 00 00 00 00 CD 00 00 00 00 18 50 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 35 04 00 00 +R 00 00 01 00 +T 35 04 00 00 0E 0B 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 40 04 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 47 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 4D 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 52 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 58 04 00 00 1F 00 DD 4E 02 DD 46 03 09 36 68 +R 00 00 01 00 +T 63 04 00 00 0E 68 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 6E 04 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 75 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 7B 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 80 04 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 85 04 00 00 +R 00 00 01 00 +T 85 04 00 00 18 50 +R 00 00 01 00 +T 87 04 00 00 +R 00 00 01 00 +T 87 04 00 00 0E 0B 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 92 04 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 99 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 9F 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T A4 04 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T AA 04 00 00 1F 00 DD 4E 02 DD 46 03 09 36 7F +R 00 00 01 00 +T B5 04 00 00 0E 7F 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T C0 04 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T C7 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T CD 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T D2 04 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T D7 04 00 00 +R 00 00 01 00 +T D7 04 00 00 0E 0E 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T E2 04 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T E9 04 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T EF 04 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T F4 04 00 00 00 00 00 00 CD 00 00 00 00 2A +R 00 00 01 00 02 04 04 00 02 09 01 00 +T FA 04 00 00 16 00 00 00 7D B4 28 04 3E 02 18 +R 00 00 01 00 02 04 0A 00 +T 03 05 00 00 01 +R 00 00 01 00 +T 04 05 00 00 +R 00 00 01 00 +T 04 05 00 00 AF +R 00 00 01 00 +T 05 05 00 00 +R 00 00 01 00 +T 05 05 00 00 21 22 00 DD 4E 02 DD 46 03 09 77 +R 00 00 01 00 +T 10 05 00 00 4F 21 10 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T 1B 05 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0E 00 +T 21 05 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 27 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 2C 05 00 00 00 00 00 00 CD 00 00 00 00 0E 0E +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 33 05 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 3E 05 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 43 05 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 49 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 4E 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 54 05 00 00 22 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T 5F 05 00 00 80 4F 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 6A 05 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 71 05 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 77 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 7C 05 00 00 00 00 00 00 CD 00 00 00 00 0E 0E +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 83 05 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 8E 05 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 93 05 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 99 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 9E 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T A4 05 00 00 22 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T AF 05 00 00 E0 4F 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T BA 05 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T C1 05 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T C7 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T CC 05 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T D1 05 00 00 +R 00 00 01 00 +T D1 05 00 00 0E 0F 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T DC 05 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T E3 05 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T E9 05 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T EE 05 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T F4 05 00 00 23 00 DD 4E 02 DD 46 03 09 36 A8 +R 00 00 01 00 +T FF 05 00 00 0E A8 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 0A 06 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 11 06 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 17 06 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 1C 06 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 22 06 00 00 10 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 2D 06 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 33 06 00 00 CD 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 05 01 00 +T 3A 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 3F 06 00 00 00 00 00 00 7D E6 08 CA +R 00 00 01 00 02 04 01 00 +T 45 06 00 00 F6 06 00 00 +R 00 00 01 00 00 04 01 00 +T 47 06 00 00 +R 00 00 01 00 +T 47 06 00 00 21 57 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 52 06 00 00 B7 20 50 +R 00 00 01 00 +T 55 06 00 00 +R 00 00 01 00 +T 55 06 00 00 0E 0E 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 60 06 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 67 06 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 6D 06 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 72 06 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 78 06 00 00 22 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T 83 06 00 00 20 4F 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 8E 06 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 95 06 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 9B 06 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T A0 06 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T A5 06 00 00 +R 00 00 01 00 +T A5 06 00 00 0E 03 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T B0 06 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T B7 06 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T BD 06 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T C2 06 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T C8 06 00 00 17 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T D3 06 00 00 11 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T DE 06 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T E6 06 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T EC 06 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T F1 06 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T F6 06 00 00 +R 00 00 01 00 +T F6 06 00 00 0E 10 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 01 07 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 08 07 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 0E 07 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 13 07 00 00 00 00 00 00 CD 00 00 00 00 0E 10 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 1A 07 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 25 07 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T 2A 07 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 30 07 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 35 07 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 3B 07 00 00 10 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 46 07 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0D 00 02 0B 0D 00 +T 4C 07 00 00 CD 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 05 01 00 +T 53 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 58 07 00 00 00 00 00 00 E5 21 24 00 09 D1 73 +R 00 00 01 00 02 04 01 00 +T 61 07 00 00 0E 01 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 6C 07 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0E 00 +T 73 07 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T 79 07 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 7E 07 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 84 07 00 00 15 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T 8F 07 00 00 13 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 9A 07 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T A2 07 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T A8 07 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T AD 07 00 00 00 00 00 00 CD 00 00 00 00 0E 09 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T B4 07 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T BF 07 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0E 00 +T C4 07 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T CA 07 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T CF 07 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 01 00 +T D5 07 00 00 1D 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T E0 07 00 00 08 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T EB 07 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T F3 07 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0E 00 02 09 01 00 +T F9 07 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T FE 07 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 04 00 02 09 01 00 +T 05 08 00 00 FE DD 56 FF 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 02 00 +T 0C 08 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 02 00 02 09 01 00 +T 12 08 00 00 00 00 00 00 +R 00 00 01 00 02 04 07 00 diff --git a/src/nos/lib/z80_lib/escc_sdlcex.rel b/src/nos/lib/z80_lib/escc_sdlcex.rel new file mode 100644 index 00000000..1c3c6ec6 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_sdlcex.rel @@ -0,0 +1,293 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _escc_tossb Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 319 flags 0 +S _escc_sdlcex Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 63 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 12 00 00 00 21 10 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1D 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 22 00 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 29 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 2F 00 00 00 CD 00 00 00 00 DD 75 FE E5 21 +R 00 00 01 00 02 05 00 00 +T 37 00 00 00 24 00 09 C1 79 AE DD 77 FF E6 80 +R 00 00 01 00 +T 42 00 00 00 CA F5 00 00 00 +R 00 00 01 00 00 05 01 00 +T 45 00 00 00 +R 00 00 01 00 +T 45 00 00 00 DD 7E FE E6 80 CA F5 00 00 00 +R 00 00 01 00 00 0A 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 21 43 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 58 00 00 00 23 B6 28 45 +R 00 00 01 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 21 43 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 67 00 00 00 23 66 6F 7E 23 B6 20 17 21 43 00 +R 00 00 01 00 +T 72 00 00 00 DD 4E 02 DD 46 03 09 46 23 66 68 +R 00 00 01 00 +T 7D 00 00 00 01 0C 00 09 7E 23 B6 28 0D +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 +R 00 00 01 00 +T 86 00 00 00 21 73 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T 91 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T 93 00 00 00 +R 00 00 01 00 +T 93 00 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 9B 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 21 12 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T AC 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T B1 00 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T B8 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T BE 00 00 00 CD 00 00 00 00 21 12 00 09 5E 23 +R 00 00 01 00 02 05 00 00 +T C7 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T CD 00 00 00 CD 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 05 00 00 +T D4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T D9 00 00 00 00 00 00 00 21 12 00 09 5E 23 56 +R 00 00 01 00 02 04 00 00 +T E2 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T E8 00 00 00 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 04 00 00 +T EE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T F3 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 DD 7E FF E6 20 28 35 +R 00 00 01 00 +T FC 00 00 00 +R 00 00 01 00 +T FC 00 00 00 DD 7E FE E6 20 28 2E +R 00 00 01 00 +T 03 01 00 00 +R 00 00 01 00 +T 03 01 00 00 21 38 00 DD 4E 02 DD 46 03 09 3E +R 00 00 01 00 +T 0E 01 00 00 03 AE 23 B6 20 1D 21 3A 00 DD 4E +R 00 00 01 00 +T 19 01 00 00 02 DD 46 03 09 7E B7 20 0F +R 00 00 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 +R 00 00 01 00 +T 22 01 00 00 21 4F 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T 2D 01 00 00 01 23 36 00 +R 00 00 01 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 DD 7E FF E6 08 CA E6 02 00 00 +R 00 00 01 00 00 0A 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 7E FE E6 08 CA F3 01 00 00 +R 00 00 01 00 00 0A 01 00 +T 41 01 00 00 +R 00 00 01 00 +T 41 01 00 00 21 57 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 4C 01 00 00 B7 20 50 +R 00 00 01 00 +T 4F 01 00 00 +R 00 00 01 00 +T 4F 01 00 00 0E 0E 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 5A 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 61 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 67 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 6C 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 72 01 00 00 22 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T 7D 01 00 00 20 4F 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 88 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 8F 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 95 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 9A 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 0E 03 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T AA 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T B1 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T B7 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T BC 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T C2 01 00 00 17 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T CD 01 00 00 11 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T D8 01 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T E0 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T E6 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T EB 01 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T F1 01 00 00 E6 02 00 00 +R 00 00 01 00 00 04 01 00 +T F3 01 00 00 +R 00 00 01 00 +T F3 01 00 00 0E 03 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T FE 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 05 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 0B 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 10 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 16 02 00 00 17 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T 21 02 00 00 EE 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 2C 02 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T 34 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 3A 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 3F 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 45 02 00 00 12 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 50 02 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 08 00 02 0B 08 00 +T 56 02 00 00 CD 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 05 00 00 +T 5D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 62 02 00 00 00 00 00 00 21 12 00 09 5E 23 56 +R 00 00 01 00 02 04 00 00 +T 6B 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 71 02 00 00 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 04 00 00 +T 77 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7C 02 00 00 00 00 00 00 21 12 00 09 5E 23 56 +R 00 00 01 00 02 04 00 00 +T 85 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 08 00 02 0A 08 00 +T 8B 02 00 00 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 04 00 00 +T 91 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 96 02 00 00 00 00 00 00 21 43 00 09 7E 23 B6 +R 00 00 01 00 02 04 00 00 +T 9F 02 00 00 28 45 +R 00 00 01 00 +T A1 02 00 00 +R 00 00 01 00 +T A1 02 00 00 21 43 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T AC 02 00 00 23 66 6F 7E 23 B6 20 17 21 43 00 +R 00 00 01 00 +T B7 02 00 00 DD 4E 02 DD 46 03 09 46 23 66 68 +R 00 00 01 00 +T C2 02 00 00 01 0C 00 09 7E 23 B6 28 0D +R 00 00 01 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 +R 00 00 01 00 +T CB 02 00 00 21 73 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T D6 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 +T D8 02 00 00 +R 00 00 01 00 +T D8 02 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T E0 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T E6 02 00 00 +R 00 00 01 00 +T E6 02 00 00 +R 00 00 01 00 +T E6 02 00 00 +R 00 00 01 00 +T E6 02 00 00 21 24 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T F1 02 00 00 56 FE 72 0E 10 21 10 00 DD 5E 02 +R 00 00 01 00 +T FC 02 00 00 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 04 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 09 03 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 0F 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 14 03 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 02 00 diff --git a/src/nos/lib/z80_lib/escc_sdlcrx.rel b/src/nos/lib/z80_lib/escc_sdlcrx.rel new file mode 100644 index 00000000..c5f4b329 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_sdlcrx.rel @@ -0,0 +1,182 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _alloc_mbuf Ref00000000 +S .__.ABS. Def00000000 +S _escc_tossb Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 206 flags 0 +S _escc_sdlcrx Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 5B 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 4E 02 DD 46 03 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 12 00 00 00 21 45 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 1D 00 00 00 23 66 68 DD 75 FE DD 74 FF 7D B4 +R 00 00 01 00 +T 28 00 00 00 C2 9F 01 00 00 +R 00 00 01 00 00 05 01 00 +T 2B 00 00 00 +R 00 00 01 00 +T 2B 00 00 00 21 43 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 36 00 00 00 23 B6 20 48 +R 00 00 01 00 +T 3A 00 00 00 +R 00 00 01 00 +T 3A 00 00 00 21 4D 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 45 00 00 00 23 56 13 13 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 03 00 +T 4C 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 53 00 00 00 FE DD 74 FF 7D B4 28 24 +R 00 00 01 00 +T 5B 00 00 00 +R 00 00 01 00 +T 5B 00 00 00 21 43 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 66 00 00 00 21 45 00 09 DD 4E FE DD 46 FF 71 +R 00 00 01 00 +T 71 00 00 00 23 70 E1 71 23 70 21 0C 00 09 AF +R 00 00 01 00 +T 7C 00 00 00 77 23 77 +R 00 00 01 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 C3 06 01 00 00 +R 00 00 01 00 00 05 01 00 +T 82 00 00 00 +R 00 00 01 00 +T 82 00 00 00 21 4D 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 8D 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 03 00 +T 92 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T 99 00 00 00 FE DD 74 FF 7D B4 28 65 +R 00 00 01 00 +T A1 00 00 00 +R 00 00 01 00 +T A1 00 00 00 21 45 00 DD 4E 02 DD 46 03 09 DD +R 00 00 01 00 +T AC 00 00 00 5E FE DD 56 FF 73 23 72 21 43 00 +R 00 00 01 00 +T B7 00 00 00 09 46 23 66 68 DD 75 FE DD 74 FF +R 00 00 01 00 +T C2 00 00 00 +R 00 00 01 00 +T C2 00 00 00 DD 6E FE DD 66 FF 7E 23 B6 28 12 +R 00 00 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T D8 00 00 00 75 FE DD 74 FF 18 E3 +R 00 00 01 00 +T DF 00 00 00 +R 00 00 01 00 +T DF 00 00 00 21 45 00 DD 4E 02 DD 46 03 09 56 +R 00 00 01 00 +T EA 00 00 00 23 66 6A E5 DD 6E FE DD 66 FF D1 +R 00 00 01 00 +T F5 00 00 00 73 23 72 21 45 00 09 46 23 66 68 +R 00 00 01 00 +T 00 01 00 00 DD 75 FE DD 74 FF +R 00 00 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 DD 7E FE DD B6 FF C2 9F 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 0F 01 00 00 +R 00 00 01 00 +T 0F 01 00 00 21 12 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 1A 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 1F 01 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 26 01 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 2C 01 00 00 CD 00 00 00 00 0E 03 21 10 00 DD +R 00 00 01 00 02 05 00 00 +T 35 01 00 00 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 3F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 44 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 4A 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 4F 01 00 00 00 00 00 00 21 17 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 58 01 00 00 46 03 09 7E F6 10 77 4F 21 10 00 +R 00 00 01 00 +T 63 01 00 00 DD 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 6E 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 73 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 79 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 7E 01 00 00 00 00 00 00 DD 5E 02 DD 56 03 3E +R 00 00 01 00 02 04 00 00 +T 87 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 05 00 02 09 05 00 +T 8C 01 00 00 00 00 00 00 21 77 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 95 01 00 00 46 03 09 34 23 20 01 34 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 18 64 +R 00 00 01 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 +R 00 00 01 00 +T 9F 01 00 00 21 12 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T AA 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T AF 01 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T B6 01 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T BC 01 00 00 CD 00 00 00 00 E5 21 0A 00 DD 4E +R 00 00 01 00 02 05 00 00 +T C5 01 00 00 FE DD 46 FF 09 56 23 66 6A E5 21 +R 00 00 01 00 +T D0 01 00 00 0C 00 09 5E 23 56 13 72 2B 73 1B +R 00 00 01 00 +T DB 01 00 00 E1 19 D1 73 21 0C 00 09 56 23 66 +R 00 00 01 00 +T E6 01 00 00 6A E5 21 04 00 09 4E 23 46 E1 A7 +R 00 00 01 00 +T F1 01 00 00 ED 42 20 0E +R 00 00 01 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 21 45 00 DD 4E 02 DD 46 03 09 AF +R 00 00 01 00 +T 00 02 00 00 77 23 77 +R 00 00 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 +R 00 00 01 00 +T 03 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/z80_lib/escc_sdlcsp.rel b/src/nos/lib/z80_lib/escc_sdlcsp.rel new file mode 100644 index 00000000..da72e078 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_sdlcsp.rel @@ -0,0 +1,194 @@ +XL4 +H 2 areas C global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _net_route Ref00000000 +S .__.ABS. Def00000000 +S _escc_tossb Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 216 flags 0 +S _escc_sdlcsp Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 67 00 DD +R 00 00 01 00 02 05 06 00 +T 09 00 00 00 4E 02 DD 46 03 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 07 00 +T 12 00 00 00 0E 01 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 1D 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T 24 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 2A 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 2F 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 35 00 00 00 10 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 40 00 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 46 00 00 00 CD 00 00 00 00 5D 16 00 3E +R 00 00 01 00 02 05 00 00 +T 4D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 52 00 00 00 00 00 00 00 DD 75 FC 21 12 00 09 +R 00 00 01 00 02 04 00 00 +T 5B 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T 61 00 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 68 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 6E 00 00 00 CD 00 00 00 00 DD 7E FC E6 20 28 +R 00 00 01 00 02 05 00 00 +T 77 00 00 00 6E +R 00 00 01 00 +T 78 00 00 00 +R 00 00 01 00 +T 78 00 00 00 21 79 00 DD 4E 02 DD 46 03 09 34 +R 00 00 01 00 +T 83 00 00 00 23 20 01 34 +R 00 00 01 00 +T 87 00 00 00 +R 00 00 01 00 +T 87 00 00 00 0E 03 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 92 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T 99 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 9F 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T A4 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T AA 00 00 00 17 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T B5 00 00 00 10 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T C0 00 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0A 00 +T C8 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T CE 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T D3 00 00 00 00 00 00 00 CD 00 00 00 00 DD 5E +R 00 00 01 00 02 04 01 00 02 09 00 00 +T DA 00 00 00 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 05 00 +T E1 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T E6 00 00 00 +R 00 00 01 00 +T E6 00 00 00 DD 7E FC E6 80 CA F1 01 00 00 21 +R 00 00 01 00 00 0A 01 00 +T EF 00 00 00 43 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T FA 00 00 00 B6 CA F1 01 00 00 +R 00 00 01 00 00 06 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 +R 00 00 01 00 +T FE 00 00 00 DD 7E FC E6 40 C2 D6 01 00 00 DD +R 00 00 01 00 00 0A 01 00 +T 07 01 00 00 7E FC E6 0E FE 06 C2 D6 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 10 01 00 00 21 43 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 1B 01 00 00 23 66 68 01 0C 00 09 7E 23 B6 CA +R 00 00 01 00 +T 26 01 00 00 D6 01 00 00 +R 00 00 01 00 00 04 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 21 45 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 33 01 00 00 23 B6 28 1B +R 00 00 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 21 45 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 42 01 00 00 23 66 68 01 0C 00 09 4E 23 46 0B +R 00 00 01 00 +T 4D 01 00 00 70 2B 71 18 42 +R 00 00 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 21 43 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 5D 01 00 00 23 66 68 DD 75 FD DD 74 FE +R 00 00 01 00 +T 66 01 00 00 +R 00 00 01 00 +T 66 01 00 00 DD 6E FD DD 66 FE 7E 23 B6 28 12 +R 00 00 01 00 +T 71 01 00 00 +R 00 00 01 00 +T 71 01 00 00 DD 6E FD DD 66 FE 46 23 66 68 DD +R 00 00 01 00 +T 7C 01 00 00 75 FD DD 74 FE 18 E3 +R 00 00 01 00 +T 83 01 00 00 +R 00 00 01 00 +T 83 01 00 00 21 0C 00 DD 4E FD DD 46 FE 09 4E +R 00 00 01 00 +T 8E 01 00 00 23 46 0B 70 2B 71 +R 00 00 01 00 +T 94 01 00 00 +R 00 00 01 00 +T 94 01 00 00 21 43 00 DD 4E 02 DD 46 03 09 4D +R 00 00 01 00 +T 9F 01 00 00 44 21 4B 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T AA 01 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 03 00 +T B0 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 02 09 00 00 +T B6 01 00 00 43 00 DD 4E 02 DD 46 03 09 E5 21 +R 00 00 01 00 +T C1 01 00 00 45 00 09 AF 77 23 77 E1 AF 77 23 +R 00 00 01 00 +T CC 01 00 00 77 21 6F 00 09 CD 00 00 00 00 18 +R 00 00 01 00 02 0A 07 00 +T D5 01 00 00 1B +R 00 00 01 00 +T D6 01 00 00 +R 00 00 01 00 +T D6 01 00 00 DD 5E 02 DD 56 03 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T DE 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T E5 01 00 00 73 00 DD 4E 02 DD 46 03 09 CD +R 00 00 01 00 +T EF 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 07 00 +T F1 01 00 00 +R 00 00 01 00 +T F1 01 00 00 +R 00 00 01 00 +T F1 01 00 00 0E 30 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T FC 01 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 0A 00 +T 03 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 09 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 0E 02 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 14 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 02 00 diff --git a/src/nos/lib/z80_lib/escc_sdlctx.rel b/src/nos/lib/z80_lib/escc_sdlctx.rel new file mode 100644 index 00000000..7e507e76 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_sdlctx.rel @@ -0,0 +1,265 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _free_mbuf Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 334 flags 0 +S _escc_sdlctx Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 5F 00 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 4E 02 DD 46 03 09 CD 00 00 00 00 +R 00 00 01 00 02 0B 06 00 +T 12 00 00 00 21 38 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 1D 00 00 00 23 46 3E 04 A9 B0 C2 C1 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 +R 00 00 01 00 +T 26 00 00 00 21 49 00 DD 4E 02 DD 46 03 09 46 +R 00 00 01 00 +T 31 00 00 00 23 66 68 DD 75 FE DD 74 FF 01 +R 00 00 01 00 +T 3B 00 00 00 0C 00 09 7E 23 B6 C2 79 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 DD 6E FE DD 66 FF 46 23 66 68 DD +R 00 00 01 00 +T 4F 00 00 00 75 FE DD 74 FF 21 49 00 DD 4E 02 +R 00 00 01 00 +T 5A 00 00 00 DD 46 03 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T 62 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 68 00 00 00 49 00 09 DD 4E FE DD 46 FF 71 23 +R 00 00 01 00 +T 73 00 00 00 70 79 B0 C2 76 01 00 00 +R 00 00 01 00 00 08 01 00 +T 79 00 00 00 +R 00 00 01 00 +T 79 00 00 00 21 10 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T 84 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 89 00 00 00 00 00 00 00 CD 00 00 00 00 5D 16 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 90 00 00 00 00 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 96 00 00 00 CD 00 00 00 00 7D E6 40 28 53 +R 00 00 01 00 02 05 00 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 21 79 00 DD 4E 02 DD 46 03 09 34 +R 00 00 01 00 +T A9 00 00 00 23 20 01 34 +R 00 00 01 00 +T AD 00 00 00 +R 00 00 01 00 +T AD 00 00 00 0E 18 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T B8 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T BF 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T C5 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T CA 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T D0 00 00 00 38 00 DD 4E 02 DD 46 03 09 36 06 +R 00 00 01 00 +T DB 00 00 00 23 36 00 21 4F 00 09 E5 21 3D 00 +R 00 00 01 00 +T E6 00 00 00 09 4E 06 00 E1 71 23 70 C3 +R 00 00 01 00 +T EF 00 00 00 31 03 00 00 +R 00 00 01 00 00 04 01 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 0E 0A 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T FC 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 03 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 09 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 0E 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 14 01 00 00 1E 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T 1F 01 00 00 FB 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 2A 01 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T 32 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 38 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 3D 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 43 01 00 00 38 00 DD 4E 02 DD 46 03 09 36 05 +R 00 00 01 00 +T 4E 01 00 00 23 36 00 0E 28 21 10 00 DD 5E 02 +R 00 00 01 00 +T 59 01 00 00 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 61 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 66 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 6C 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 71 01 00 00 00 00 00 00 C3 31 03 00 00 +R 00 00 01 00 02 04 00 00 00 09 01 00 +T 76 01 00 00 +R 00 00 01 00 +T 76 01 00 00 C3 26 00 00 00 +R 00 00 01 00 00 05 01 00 +T 79 01 00 00 +R 00 00 01 00 +T 79 01 00 00 21 0A 00 DD 4E FE DD 46 FF 09 5E +R 00 00 01 00 +T 84 01 00 00 23 56 13 72 2B 73 1B 1A 4F 21 +R 00 00 01 00 +T 8E 01 00 00 12 00 DD 5E 02 DD 56 03 19 5E 23 +R 00 00 01 00 +T 99 01 00 00 56 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 09 00 02 0B 09 00 +T 9F 01 00 00 CD 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 05 00 00 +T A6 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T AB 01 00 00 00 00 00 00 21 0C 00 DD 4E FE DD +R 00 00 01 00 02 04 00 00 +T B4 01 00 00 46 FF 09 4E 23 46 0B 70 2B 71 C3 +R 00 00 01 00 +T BF 01 00 00 31 03 00 00 +R 00 00 01 00 00 04 01 00 +T C1 01 00 00 +R 00 00 01 00 +T C1 01 00 00 3E 05 A9 B0 C2 0F 03 00 00 0E 0A +R 00 00 01 00 00 09 01 00 +T CA 01 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T D5 01 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T DA 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T E0 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T E5 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T EB 01 00 00 1E 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T F6 01 00 00 04 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 01 02 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 09 00 +T 09 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 0F 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 14 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 1A 02 00 00 4F 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T 25 02 00 00 B6 20 0F 21 40 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 30 02 00 00 03 09 7E B7 C2 CC 02 00 00 +R 00 00 01 00 00 09 01 00 +T 37 02 00 00 +R 00 00 01 00 +T 37 02 00 00 +R 00 00 01 00 +T 37 02 00 00 21 49 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 42 02 00 00 21 47 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 4D 02 00 00 79 B0 28 7B +R 00 00 01 00 +T 51 02 00 00 +R 00 00 01 00 +T 51 02 00 00 +R 00 00 01 00 +T 51 02 00 00 +R 00 00 01 00 +T 51 02 00 00 21 47 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 5C 02 00 00 21 47 00 09 56 23 66 6A 23 23 5E +R 00 00 01 00 +T 67 02 00 00 23 56 E1 73 23 72 0E 80 21 10 00 +R 00 00 01 00 +T 72 02 00 00 DD 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 7D 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T 82 02 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 88 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 8D 02 00 00 00 00 00 00 21 38 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T 96 02 00 00 46 03 09 36 04 23 36 00 59 50 3E +R 00 00 01 00 +T A1 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T A6 02 00 00 00 00 00 00 0E C0 21 10 00 DD 5E +R 00 00 01 00 02 04 00 00 +T AF 02 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T B8 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 09 00 02 09 09 00 +T BD 02 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T C3 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T C8 02 00 00 00 00 00 00 18 65 +R 00 00 01 00 02 04 00 00 +T CC 02 00 00 +R 00 00 01 00 +T CC 02 00 00 21 38 00 DD 4E 02 DD 46 03 09 36 +R 00 00 01 00 +T D7 02 00 00 06 23 36 00 21 4F 00 09 E5 21 +R 00 00 01 00 +T E1 02 00 00 3D 00 09 5E 16 00 E1 73 23 72 0E +R 00 00 01 00 +T EC 02 00 00 28 21 10 00 DD 5E 02 DD 56 03 19 +R 00 00 01 00 +T F7 02 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 09 00 +T FD 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 03 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 08 03 00 00 00 00 00 00 CD 00 00 00 00 18 22 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 0F 03 00 00 +R 00 00 01 00 +T 0F 03 00 00 0E 28 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 1A 03 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 09 00 +T 21 03 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 27 03 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 2C 03 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 31 03 00 00 +R 00 00 01 00 +T 31 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 +T 34 03 00 00 +R 00 00 01 00 diff --git a/src/nos/lib/z80_lib/escc_send.rel b/src/nos/lib/z80_lib/escc_send.rel new file mode 100644 index 00000000..2246a90c --- /dev/null +++ b/src/nos/lib/z80_lib/escc_send.rel @@ -0,0 +1,39 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Esccchan Ref00000000 +S _escc_sstart Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _enqueue Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 4A flags 0 +S _escc_send Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 66 03 29 11 00 00 00 00 19 56 23 +R 00 00 01 00 02 08 02 00 +T 12 00 00 00 66 6A DD 75 FE DD 74 FF 11 47 00 +R 00 00 01 00 +T 1D 00 00 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 07 00 +T 22 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 28 00 00 00 49 00 DD 4E FE DD 46 FF 09 7E 23 +R 00 00 01 00 +T 33 00 00 00 B6 20 0E +R 00 00 01 00 +T 36 00 00 00 +R 00 00 01 00 +T 36 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 03 00 +T 3E 00 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 03 00 02 0A 00 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 01 00 diff --git a/src/nos/lib/z80_lib/escc_sioctl.rel b/src/nos/lib/z80_lib/escc_sioctl.rel new file mode 100644 index 00000000..bea96647 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_sioctl.rel @@ -0,0 +1,330 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _escc_speed Ref00000000 +S _Esccchan Ref00000000 +S .__.ABS. Def00000000 +S ?L_LSH_L03 Ref00000000 +S _dirps Ref00000000 +S _Esccinfo Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 317 flags 0 +S _escc_sioctl Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 21 2C 00 DD +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 5E 02 DD 56 03 19 56 23 66 6A 29 +R 00 00 01 00 +T 14 00 00 00 11 00 00 00 00 19 56 23 66 6A DD +R 00 00 01 00 02 05 04 00 +T 1D 00 00 00 75 FA DD 74 FB 59 50 CD +R 00 00 01 00 +T 25 00 00 00 00 00 00 00 01 00 10 00 +R 00 00 01 00 02 04 02 00 +T 2B 00 00 00 0E 03 00 00 DA 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 2F 00 00 00 02 01 00 00 2A 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 33 00 00 00 52 01 00 00 7A 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 37 00 00 00 0E 03 00 00 0E 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 3B 00 00 00 42 02 00 00 0E 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 3F 00 00 00 4D 00 00 00 0E 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 43 00 00 00 DE 02 00 00 1A 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 47 00 00 00 F2 01 00 00 CA 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 4B 00 00 00 A2 01 00 00 +R 00 00 01 00 00 04 01 00 +T 4D 00 00 00 +R 00 00 01 00 +T 4D 00 00 00 DD 7E 0A DD B6 0B 28 70 +R 00 00 01 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 DD 7E 0C DD B6 0D DD B6 0E DD B6 +R 00 00 01 00 +T 60 00 00 00 0F 20 0E +R 00 00 01 00 +T 63 00 00 00 +R 00 00 01 00 +T 63 00 00 00 21 57 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T 6E 00 00 00 01 18 54 +R 00 00 01 00 +T 71 00 00 00 +R 00 00 01 00 +T 71 00 00 00 DD 6E 0E DD 66 0F E5 DD 6E 0C DD +R 00 00 01 00 +T 7C 00 00 00 66 0D E5 01 20 00 DD 5E FA DD 56 +R 00 00 01 00 +T 87 00 00 00 FB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 8D 00 00 00 CD 00 00 00 00 F1 F1 DD 75 FC DD +R 00 00 01 00 02 05 00 00 +T 96 00 00 00 74 FD 23 23 01 00 00 3E 06 CD +R 00 00 01 00 +T A0 00 00 00 00 00 00 00 C5 E5 21 12 00 00 00 +R 00 00 01 00 02 04 06 00 02 0B 08 00 +T A7 00 00 00 5E 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T B0 00 00 00 00 00 00 00 E5 21 53 00 DD 5E FA +R 00 00 01 00 02 04 0A 00 +T B9 00 00 00 DD 56 FB 19 D1 73 23 72 23 71 23 +R 00 00 01 00 +T C4 00 00 00 70 +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 +R 00 00 01 00 +T C5 00 00 00 21 53 00 DD 4E FA DD 46 FB 09 5E +R 00 00 01 00 +T D0 00 00 00 23 56 23 4E 23 46 EB C3 +R 00 00 01 00 +T D8 00 00 00 14 03 00 00 +R 00 00 01 00 00 04 01 00 +T DA 00 00 00 +R 00 00 01 00 +T DA 00 00 00 DD 7E 0A DD B6 0B 28 0E +R 00 00 01 00 +T E2 00 00 00 +R 00 00 01 00 +T E2 00 00 00 21 3A 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T ED 00 00 00 46 0C 70 +R 00 00 01 00 +T F0 00 00 00 +R 00 00 01 00 +T F0 00 00 00 21 3A 00 DD 4E FA DD 46 FB 09 6E +R 00 00 01 00 +T FB 00 00 00 01 00 00 61 C3 14 03 00 00 +R 00 00 01 00 00 09 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 DD 7E 0A DD B6 0B 28 0E +R 00 00 01 00 +T 0A 01 00 00 +R 00 00 01 00 +T 0A 01 00 00 21 3B 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 15 01 00 00 46 0C 70 +R 00 00 01 00 +T 18 01 00 00 +R 00 00 01 00 +T 18 01 00 00 21 3B 00 DD 4E FA DD 46 FB 09 6E +R 00 00 01 00 +T 23 01 00 00 01 00 00 61 C3 14 03 00 00 +R 00 00 01 00 00 09 01 00 +T 2A 01 00 00 +R 00 00 01 00 +T 2A 01 00 00 DD 7E 0A DD B6 0B 28 0E +R 00 00 01 00 +T 32 01 00 00 +R 00 00 01 00 +T 32 01 00 00 21 3C 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 3D 01 00 00 46 0C 70 +R 00 00 01 00 +T 40 01 00 00 +R 00 00 01 00 +T 40 01 00 00 21 3C 00 DD 4E FA DD 46 FB 09 6E +R 00 00 01 00 +T 4B 01 00 00 01 00 00 61 C3 14 03 00 00 +R 00 00 01 00 00 09 01 00 +T 52 01 00 00 +R 00 00 01 00 +T 52 01 00 00 DD 7E 0A DD B6 0B 28 0E +R 00 00 01 00 +T 5A 01 00 00 +R 00 00 01 00 +T 5A 01 00 00 21 3D 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 65 01 00 00 46 0C 70 +R 00 00 01 00 +T 68 01 00 00 +R 00 00 01 00 +T 68 01 00 00 21 3D 00 DD 4E FA DD 46 FB 09 6E +R 00 00 01 00 +T 73 01 00 00 01 00 00 61 C3 14 03 00 00 +R 00 00 01 00 00 09 01 00 +T 7A 01 00 00 +R 00 00 01 00 +T 7A 01 00 00 DD 7E 0A DD B6 0B 28 0E +R 00 00 01 00 +T 82 01 00 00 +R 00 00 01 00 +T 82 01 00 00 21 3E 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 8D 01 00 00 46 0C 70 +R 00 00 01 00 +T 90 01 00 00 +R 00 00 01 00 +T 90 01 00 00 21 3E 00 DD 4E FA DD 46 FB 09 6E +R 00 00 01 00 +T 9B 01 00 00 01 00 00 61 C3 14 03 00 00 +R 00 00 01 00 00 09 01 00 +T A2 01 00 00 +R 00 00 01 00 +T A2 01 00 00 DD 7E 0A DD B6 0B 28 0E +R 00 00 01 00 +T AA 01 00 00 +R 00 00 01 00 +T AA 01 00 00 21 3F 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T B5 01 00 00 46 0C 70 +R 00 00 01 00 +T B8 01 00 00 +R 00 00 01 00 +T B8 01 00 00 21 3F 00 DD 4E FA DD 46 FB 09 6E +R 00 00 01 00 +T C3 01 00 00 01 00 00 61 C3 14 03 00 00 +R 00 00 01 00 00 09 01 00 +T CA 01 00 00 +R 00 00 01 00 +T CA 01 00 00 DD 7E 0A DD B6 0B 28 0E +R 00 00 01 00 +T D2 01 00 00 +R 00 00 01 00 +T D2 01 00 00 21 40 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T DD 01 00 00 46 0C 70 +R 00 00 01 00 +T E0 01 00 00 +R 00 00 01 00 +T E0 01 00 00 21 40 00 DD 4E FA DD 46 FB 09 6E +R 00 00 01 00 +T EB 01 00 00 01 00 00 61 C3 14 03 00 00 +R 00 00 01 00 00 09 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 DD 7E 0A DD B6 0B 28 0E +R 00 00 01 00 +T FA 01 00 00 +R 00 00 01 00 +T FA 01 00 00 21 41 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 05 02 00 00 46 0C 70 +R 00 00 01 00 +T 08 02 00 00 +R 00 00 01 00 +T 08 02 00 00 21 41 00 DD 4E FA DD 46 FB 09 6E +R 00 00 01 00 +T 13 02 00 00 01 00 00 61 C3 14 03 00 00 +R 00 00 01 00 00 09 01 00 +T 1A 02 00 00 +R 00 00 01 00 +T 1A 02 00 00 DD 7E 0A DD B6 0B 28 0E +R 00 00 01 00 +T 22 02 00 00 +R 00 00 01 00 +T 22 02 00 00 21 42 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 2D 02 00 00 46 0C 70 +R 00 00 01 00 +T 30 02 00 00 +R 00 00 01 00 +T 30 02 00 00 21 42 00 DD 4E FA DD 46 FB 09 6E +R 00 00 01 00 +T 3B 02 00 00 01 00 00 61 C3 14 03 00 00 +R 00 00 01 00 00 09 01 00 +T 42 02 00 00 +R 00 00 01 00 +T 42 02 00 00 DD 7E 0A DD B6 0B 28 75 +R 00 00 01 00 +T 4A 02 00 00 +R 00 00 01 00 +T 4A 02 00 00 DD 7E 0C DD B6 0D DD B6 0E DD B6 +R 00 00 01 00 +T 55 02 00 00 0F 28 10 +R 00 00 01 00 +T 58 02 00 00 +R 00 00 01 00 +T 58 02 00 00 21 19 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 63 02 00 00 F6 80 77 18 0E +R 00 00 01 00 +T 68 02 00 00 +R 00 00 01 00 +T 68 02 00 00 21 19 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T 73 02 00 00 E6 7F 77 +R 00 00 01 00 +T 76 02 00 00 +R 00 00 01 00 +T 76 02 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 07 00 02 0A 07 00 +T 7C 02 00 00 00 00 00 00 DD 75 FE DD 74 FF 21 +R 00 00 01 00 02 04 00 00 +T 85 02 00 00 38 00 DD 4E FA DD 46 FB 09 7E 23 +R 00 00 01 00 +T 90 02 00 00 B6 20 1E 21 4F 00 DD 4E FA DD 46 +R 00 00 01 00 +T 9B 02 00 00 FB 09 7E 23 B6 20 0F +R 00 00 01 00 +T A2 02 00 00 +R 00 00 01 00 +T A2 02 00 00 +R 00 00 01 00 +T A2 02 00 00 +R 00 00 01 00 +T A2 02 00 00 21 4F 00 DD 4E FA DD 46 FB 09 36 +R 00 00 01 00 +T AD 02 00 00 01 23 36 00 +R 00 00 01 00 +T B1 02 00 00 +R 00 00 01 00 +T B1 02 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T B9 02 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T BF 02 00 00 +R 00 00 01 00 +T BF 02 00 00 21 19 00 DD 4E FA DD 46 FB 09 7E +R 00 00 01 00 +T CA 02 00 00 E6 80 28 08 01 00 00 21 01 00 18 +R 00 00 01 00 +T D5 02 00 00 06 +R 00 00 01 00 +T D6 02 00 00 +R 00 00 01 00 +T D6 02 00 00 01 00 00 21 00 00 +R 00 00 01 00 +T DC 02 00 00 +R 00 00 01 00 +T DC 02 00 00 18 36 +R 00 00 01 00 +T DE 02 00 00 +R 00 00 01 00 +T DE 02 00 00 DD 7E 0A DD B6 0B 28 13 +R 00 00 01 00 +T E6 02 00 00 +R 00 00 01 00 +T E6 02 00 00 21 51 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T F1 02 00 00 4E 0C DD 46 0D 71 23 70 +R 00 00 01 00 +T F9 02 00 00 +R 00 00 01 00 +T F9 02 00 00 21 51 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T 04 03 00 00 23 66 68 7C 07 9F 4F 41 18 06 +R 00 00 01 00 +T 0E 03 00 00 +R 00 00 01 00 +T 0E 03 00 00 01 FF FF 21 FF FF +R 00 00 01 00 +T 14 03 00 00 +R 00 00 01 00 +T 14 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0C 00 diff --git a/src/nos/lib/z80_lib/escc_speed.rel b/src/nos/lib/z80_lib/escc_speed.rel new file mode 100644 index 00000000..9e28ad9b --- /dev/null +++ b/src/nos/lib/z80_lib/escc_speed.rel @@ -0,0 +1,151 @@ +XL4 +H 2 areas D global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S _dirps Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _Esccinfo Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 1E5 flags 0 +S _escc_speed Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF 69 60 11 +R 00 00 01 00 02 05 08 00 +T 08 00 00 00 00 00 D5 E5 DD 4E 0C DD 46 0D DD +R 00 00 01 00 +T 13 00 00 00 6E 0A DD 66 0B CD 00 00 00 00 DD +R 00 00 01 00 02 0A 06 00 +T 1C 00 00 00 75 FA DD 74 FB DD 71 FC DD 70 FD +R 00 00 01 00 +T 27 00 00 00 7D B4 B1 B0 20 06 +R 00 00 01 00 +T 2D 00 00 00 +R 00 00 01 00 +T 2D 00 00 00 21 E8 FD C3 E2 01 00 00 +R 00 00 01 00 00 08 01 00 +T 33 00 00 00 +R 00 00 01 00 +T 33 00 00 00 DD 4E FC DD 46 FD DD 6E FA DD 66 +R 00 00 01 00 +T 3E 00 00 00 FB 29 CB 11 CB 10 C5 E5 21 +R 00 00 01 00 +T 47 00 00 00 12 00 00 00 4E 23 46 23 5E 23 56 +R 00 00 01 00 02 04 07 00 +T 50 00 00 00 D5 C5 DD 6E FA DD 66 FB C1 09 EB +R 00 00 01 00 +T 5B 00 00 00 DD 6E FC DD 66 FD C1 ED 4A 4D 44 +R 00 00 01 00 +T 66 00 00 00 EB CD 00 00 00 00 01 FE FF 09 DD +R 00 00 01 00 02 06 09 00 +T 6F 00 00 00 75 F8 DD 74 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 77 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 7E 00 00 00 FE DD 74 FF 0E 0E 21 10 00 DD 5E +R 00 00 01 00 +T 89 00 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 92 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 97 00 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 9D 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T A2 00 00 00 00 00 00 00 21 22 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T AB 00 00 00 46 03 09 7E E6 FE 77 4F 21 10 00 +R 00 00 01 00 +T B6 00 00 00 DD 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T C1 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T C6 00 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T CC 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T D1 00 00 00 00 00 00 00 0E 0C 21 10 00 DD 5E +R 00 00 01 00 02 04 00 00 +T DA 00 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T E3 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T E8 00 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T EE 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T F3 00 00 00 00 00 00 00 21 20 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T FC 00 00 00 46 03 09 DD 56 F8 72 4A 21 10 00 +R 00 00 01 00 +T 07 01 00 00 DD 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 12 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 17 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 1D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 22 01 00 00 00 00 00 00 0E 0D 21 10 00 DD 5E +R 00 00 01 00 02 04 00 00 +T 2B 01 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 34 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 39 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 3F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 44 01 00 00 00 00 00 00 DD 6E F8 DD 66 F9 6C +R 00 00 01 00 02 04 00 00 +T 4D 01 00 00 26 00 E5 21 21 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 58 01 00 00 03 09 D1 73 4B 21 10 00 DD 5E 02 +R 00 00 01 00 +T 63 01 00 00 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 6B 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 70 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 76 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 7B 01 00 00 00 00 00 00 0E 0E 21 10 00 DD 5E +R 00 00 01 00 02 04 00 00 +T 84 01 00 00 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 8D 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 92 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 98 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 9D 01 00 00 00 00 00 00 21 22 00 DD 4E 02 DD +R 00 00 01 00 02 04 00 00 +T A6 01 00 00 46 03 09 7E F6 01 77 4F 21 10 00 +R 00 00 01 00 +T B1 01 00 00 DD 5E 02 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T BC 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T C1 01 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T C7 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T CC 01 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 02 04 00 00 +T D5 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T DA 01 00 00 00 00 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 02 04 00 00 +T E2 01 00 00 +R 00 00 01 00 +T E2 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/z80_lib/escc_sstart.rel b/src/nos/lib/z80_lib/escc_sstart.rel new file mode 100644 index 00000000..b32ff4c0 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_sstart.rel @@ -0,0 +1,53 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _dequeue Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 5F flags 0 +S _escc_sstart Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 49 00 19 7E 23 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 B6 20 0F 21 47 00 DD 4E 02 DD 46 +R 00 00 01 00 +T 14 00 00 00 03 09 7E 23 B6 20 02 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 18 3F +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 21 49 00 DD 4E 02 DD 46 03 09 E5 +R 00 00 01 00 +T 28 00 00 00 21 47 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 30 00 00 00 00 00 00 00 CD 00 00 00 00 EB E1 +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 37 00 00 00 73 23 72 0E C0 21 12 00 DD 5E 02 +R 00 00 01 00 +T 42 00 00 00 DD 56 03 19 5E 23 56 3E +R 00 00 01 00 +T 4A 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 4F 00 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 55 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 5A 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 5C 00 00 00 +R 00 00 01 00 +T 5C 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/z80_lib/escc_stop.rel b/src/nos/lib/z80_lib/escc_stop.rel new file mode 100644 index 00000000..7a6c8e19 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_stop.rel @@ -0,0 +1,110 @@ +XL4 +H 2 areas E global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _escc_delay Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Esccchan Ref00000000 +S .__.ABS. Def00000000 +S _free Ref00000000 +S _dirps Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?SS_MOD_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _inportb Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 12C flags 0 +S _escc_stop Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 2C 00 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 4E 02 DD 46 03 09 56 23 66 6A 29 +R 00 00 01 00 +T 14 00 00 00 11 00 00 00 00 19 56 23 66 6A DD +R 00 00 01 00 02 05 04 00 +T 1D 00 00 00 75 FC DD 74 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 07 00 +T 25 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 00 00 +T 2C 00 00 00 FE DD 74 FF 21 10 00 DD 5E FC DD +R 00 00 01 00 +T 37 00 00 00 56 FD 19 5E 23 56 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 3F 00 00 00 21 00 00 00 00 CD 00 00 00 00 5D +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 46 00 00 00 16 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 4B 00 00 00 00 00 00 00 CD 00 00 00 00 0E 09 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 52 00 00 00 21 10 00 DD 5E FC DD 56 FD 19 5E +R 00 00 01 00 +T 5D 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0C 00 +T 62 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T 68 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T 6D 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 73 00 00 00 2C 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 7E 00 00 00 56 01 02 00 CD 00 00 00 00 7B B2 +R 00 00 01 00 02 09 09 00 +T 87 00 00 00 28 04 3E 40 18 02 +R 00 00 01 00 +T 8D 00 00 00 +R 00 00 01 00 +T 8D 00 00 00 3E 80 +R 00 00 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 21 1D 00 DD 4E FC DD 46 FD 09 77 +R 00 00 01 00 +T 9A 00 00 00 4F 21 10 00 DD 5E FC DD 56 FD 19 +R 00 00 01 00 +T A5 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 0C 00 +T AB 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 0C 00 02 09 00 00 +T B1 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T B6 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T BC 00 00 00 3D 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T C7 00 00 00 66 68 01 0E 00 09 4E 23 46 3E 06 +R 00 00 01 00 +T D2 00 00 00 A9 B0 28 06 3E 0A A9 B0 20 15 +R 00 00 01 00 +T DC 00 00 00 +R 00 00 01 00 +T DC 00 00 00 21 26 00 DD 4E FC DD 46 FD 09 5E +R 00 00 01 00 +T E7 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 06 00 +T EC 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 06 00 02 09 00 00 +T F1 00 00 00 +R 00 00 01 00 +T F1 00 00 00 18 00 +R 00 00 01 00 +T F3 00 00 00 +R 00 00 01 00 +T F3 00 00 00 DD 5E FC DD 56 FD 3E 00 00 00 00 +R 00 00 01 00 2B 0B 06 00 +T FB 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 06 00 02 0A 00 00 +T 02 01 00 00 2C 00 DD 4E 02 DD 46 03 09 46 23 +R 00 00 01 00 +T 0D 01 00 00 66 68 29 01 00 00 00 00 09 AF 77 +R 00 00 01 00 02 08 04 00 +T 16 01 00 00 23 77 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 1F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T 24 01 00 00 00 00 00 00 21 00 00 C3 +R 00 00 01 00 02 04 00 00 +T 2A 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 03 00 diff --git a/src/nos/lib/z80_lib/escc_tossb.rel b/src/nos/lib/z80_lib/escc_tossb.rel new file mode 100644 index 00000000..a96e9825 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_tossb.rel @@ -0,0 +1,41 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S _free_p Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 62 flags 0 +S _escc_tossb Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF 21 43 00 DD +R 00 00 01 00 02 05 03 00 +T 09 00 00 00 4E 02 DD 46 03 09 46 23 66 68 DD +R 00 00 01 00 +T 14 00 00 00 75 FE DD 74 FF 7D B4 28 42 +R 00 00 01 00 +T 1D 00 00 00 +R 00 00 01 00 +T 1D 00 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 25 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 2C 00 00 00 08 00 DD 4E FE DD 46 FF 09 EB 3E +R 00 00 01 00 +T 37 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 3C 00 00 00 00 00 00 00 69 60 AF 77 23 77 21 +R 00 00 01 00 02 04 00 00 +T 45 00 00 00 45 00 DD 4E 02 DD 46 03 09 DD 4E +R 00 00 01 00 +T 50 00 00 00 FE DD 46 FF 71 23 70 21 0C 00 09 +R 00 00 01 00 +T 5B 00 00 00 AF 77 23 77 +R 00 00 01 00 +T 5F 00 00 00 +R 00 00 01 00 +T 5F 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 01 00 diff --git a/src/nos/lib/z80_lib/escc_txoff.rel b/src/nos/lib/z80_lib/escc_txoff.rel new file mode 100644 index 00000000..445b8d1f --- /dev/null +++ b/src/nos/lib/z80_lib/escc_txoff.rel @@ -0,0 +1,102 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_delay Ref00000000 +S _escc_speed Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Esccinfo Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 116 flags 0 +S _escc_txoff Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 0E 05 21 10 00 19 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 0F 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 15 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 1A 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 20 00 00 00 19 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T 2B 00 00 00 FD 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 36 00 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 3E 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 44 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 49 00 00 00 00 00 00 00 CD 00 00 00 00 3A +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 4F 00 00 00 18 00 00 00 E6 04 28 2A +R 00 00 01 00 02 04 06 00 +T 55 00 00 00 +R 00 00 01 00 +T 55 00 00 00 ED 4B 1A 00 00 00 21 10 00 DD 5E +R 00 00 01 00 02 06 06 00 +T 5E 00 00 00 02 DD 56 03 19 46 23 66 68 11 +R 00 00 01 00 +T 68 00 00 00 04 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T 6F 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 75 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 7A 00 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 7F 00 00 00 +R 00 00 01 00 +T 7F 00 00 00 21 58 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 8A 00 00 00 B7 C2 13 01 00 00 21 57 00 DD 4E +R 00 00 01 00 00 06 01 00 +T 93 00 00 00 02 DD 46 03 09 7E B7 20 77 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 +R 00 00 01 00 +T 9C 00 00 00 0E 05 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T A7 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T AE 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T B4 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T B9 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T BF 00 00 00 19 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T CA 00 00 00 F7 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T D5 00 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T DD 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T E3 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T E8 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T EE 00 00 00 53 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T F9 00 00 00 56 23 4E 23 46 C5 D5 01 20 00 DD +R 00 00 01 00 +T 04 01 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T 0C 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T 13 01 00 00 +R 00 00 01 00 +T 13 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/z80_lib/escc_txon.rel b/src/nos/lib/z80_lib/escc_txon.rel new file mode 100644 index 00000000..a7f65bc9 --- /dev/null +++ b/src/nos/lib/z80_lib/escc_txon.rel @@ -0,0 +1,124 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _escc_delay Ref00000000 +S _escc_speed Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Esccinfo Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 16A flags 0 +S _escc_txon Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 58 00 19 7E B7 +R 00 00 01 00 02 05 05 00 +T 09 00 00 00 C2 E3 00 00 00 21 57 00 DD 4E 02 +R 00 00 01 00 00 05 01 00 +T 12 00 00 00 DD 46 03 09 7E B7 C2 E3 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 +R 00 00 01 00 +T 1B 00 00 00 0E 03 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T 26 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T 2D 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 33 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 38 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 3E 00 00 00 17 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T 49 00 00 00 FE 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 54 00 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 5C 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 62 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 67 00 00 00 00 00 00 00 CD 00 00 00 00 0E 05 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 6E 00 00 00 21 10 00 DD 5E 02 DD 56 03 19 5E +R 00 00 01 00 +T 79 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 08 00 +T 7E 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 84 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 89 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 8F 00 00 00 19 00 DD 4E 02 DD 46 03 09 7E E6 +R 00 00 01 00 +T 9A 00 00 00 F7 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T A5 00 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T AD 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T B3 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T B8 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T BE 00 00 00 53 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T C9 00 00 00 56 23 4E 23 46 C5 D5 01 01 00 DD +R 00 00 01 00 +T D4 00 00 00 5E 02 DD 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 02 00 +T DC 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 0E 05 21 10 00 DD 5E 02 DD 56 03 +R 00 00 01 00 +T EE 00 00 00 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 08 00 +T F5 00 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T FB 00 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 00 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 06 01 00 00 19 00 DD 4E 02 DD 46 03 09 7E F6 +R 00 00 01 00 +T 11 01 00 00 0A 77 4F 21 10 00 DD 5E 02 DD 56 +R 00 00 01 00 +T 1C 01 00 00 03 19 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 24 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 2A 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 2F 01 00 00 00 00 00 00 CD 00 00 00 00 3A +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 35 01 00 00 18 00 00 00 E6 04 28 2C +R 00 00 01 00 02 04 06 00 +T 3B 01 00 00 +R 00 00 01 00 +T 3B 01 00 00 3A 1A 00 00 00 F6 80 4F 21 10 00 +R 00 00 01 00 02 05 06 00 +T 44 01 00 00 DD 5E 02 DD 56 03 19 46 23 66 68 +R 00 00 01 00 +T 4F 01 00 00 11 04 00 19 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 57 01 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 5D 01 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 01 00 +T 62 01 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 00 00 +T 67 01 00 00 +R 00 00 01 00 +T 67 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 diff --git a/src/nos/lib/z80_lib/esccgen.rel b/src/nos/lib/z80_lib/esccgen.rel new file mode 100644 index 00000000..710ba399 --- /dev/null +++ b/src/nos/lib/z80_lib/esccgen.rel @@ -0,0 +1,74 @@ +XL4 +H 2 areas 5 global symbols +M _z8530 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S .__.ABS. Def00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9F flags 0 +S _read_scc Def00000018 +S _rx8530 Def0000002E +S _write_scc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 21 04 00 39 C5 D5 79 4B 42 B7 28 +R 00 00 01 00 +T 0B 00 00 00 03 F3 ED 79 +R 00 00 01 00 +T 0F 00 00 00 +R 00 00 01 00 +T 0F 00 00 00 7E ED 79 FB D1 C1 C3 00 00 00 00 +R 00 00 01 00 02 0B 00 00 +T 18 00 00 00 +R 00 00 01 00 +T 18 00 00 00 C5 D5 79 4B 42 B7 28 04 F3 ED 79 +R 00 00 01 00 +T 23 00 00 00 00 +R 00 00 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 ED 68 26 00 FB D1 C1 C3 +R 00 00 01 00 +T 2C 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 2E 00 00 00 +R 00 00 01 00 +T 2E 00 00 00 DD E5 DD 21 00 00 DD 39 C5 D5 +R 00 00 01 00 +T 38 00 00 00 +R 00 00 01 00 +T 38 00 00 00 DD 5E 06 DD 56 07 21 00 00 +R 00 00 01 00 +T 41 00 00 00 +R 00 00 01 00 +T 41 00 00 00 DD 4E FC DD 46 FD ED 78 ED 64 08 +R 00 00 01 00 +T 4C 00 00 00 28 47 B7 FA 38 00 00 00 1F 30 29 +R 00 00 01 00 00 08 01 00 +T 55 00 00 00 DD 4E FE DD 46 FF ED 78 12 13 23 +R 00 00 01 00 +T 60 00 00 00 7C DD BE 09 38 DB 20 06 7D DD BE +R 00 00 01 00 +T 6B 00 00 00 08 38 D3 +R 00 00 01 00 +T 6E 00 00 00 +R 00 00 01 00 +T 6E 00 00 00 DD 4E FC DD 46 FD 3E 03 ED 79 3E +R 00 00 01 00 +T 79 00 00 00 D9 ED 79 18 BA +R 00 00 01 00 +T 7E 00 00 00 +R 00 00 01 00 +T 7E 00 00 00 DD 4E FC DD 46 FD 3E 01 ED 79 00 +R 00 00 01 00 +T 89 00 00 00 ED 78 B7 F2 41 00 00 00 E6 40 20 +R 00 00 01 00 00 08 01 00 +T 92 00 00 00 A5 18 03 +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 FF FF +R 00 00 01 00 +T 98 00 00 00 +R 00 00 01 00 +T 98 00 00 00 D1 C1 DD E1 C3 00 00 00 00 +R 00 00 01 00 02 09 00 00 diff --git a/src/nos/lib/z80_lib/esccstop.rel b/src/nos/lib/z80_lib/esccstop.rel new file mode 100644 index 00000000..acbd44ec --- /dev/null +++ b/src/nos/lib/z80_lib/esccstop.rel @@ -0,0 +1,35 @@ +XL4 +H 2 areas 9 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _Orgivec Ref00000000 +S _setirq Ref00000000 +S .__.ABS. Def00000000 +S _maskoff Ref00000000 +S _Esccinfo Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 31 flags 0 +S _esccstop Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 C5 D5 2A 00 00 00 00 7D B4 28 23 +R 00 00 01 00 02 07 06 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 ED 5B 10 00 00 00 3E 00 00 00 00 +R 00 00 01 00 02 06 06 00 2B 0B 05 00 +T 0F 00 00 00 21 00 00 00 00 CD 00 00 00 00 3A +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T 16 00 00 00 02 00 00 00 4F C5 2A 00 00 00 00 +R 00 00 01 00 02 04 02 00 02 0B 02 00 +T 1D 00 00 00 E5 ED 5B 10 00 00 00 3E +R 00 00 01 00 02 07 06 00 +T 23 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 03 00 02 09 03 00 +T 28 00 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 00 00 +T 2C 00 00 00 +R 00 00 01 00 +T 2C 00 00 00 D1 C1 C3 00 00 00 00 +R 00 00 01 00 02 07 01 00 diff --git a/src/nos/lib/z80_lib/escctimer.rel b/src/nos/lib/z80_lib/escctimer.rel new file mode 100644 index 00000000..f9fb63c7 --- /dev/null +++ b/src/nos/lib/z80_lib/escctimer.rel @@ -0,0 +1,382 @@ +XL4 +H 2 areas 14 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S ?S_S_SWITCH_L06 Ref00000000 +S _escc_txon Ref00000000 +S _escc_delay Ref00000000 +S _escc_sdlctx Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Esccchan Ref00000000 +S .__.ABS. Def00000000 +S _Random Ref00000000 +S _dirps Ref00000000 +S _escc_txoff Ref00000000 +S _Esccinfo Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S ?SS_DIV_L02 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3EF flags 0 +S _escctimer Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F6 FF 3E +R 00 00 01 00 02 05 0D 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 0B 00 00 00 00 00 00 00 DD 75 FA DD 74 FB 2A +R 00 00 01 00 02 04 00 00 +T 14 00 00 00 04 00 00 00 29 01 00 00 00 00 09 +R 00 00 01 00 02 04 0C 00 02 0A 07 00 +T 1B 00 00 00 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 01 00 00 00 00 DD 6E F8 DD 66 F9 +R 00 00 01 00 02 05 07 00 +T 2A 00 00 00 A7 ED 42 DA DE 03 00 00 +R 00 00 01 00 00 08 01 00 +T 30 00 00 00 +R 00 00 01 00 +T 30 00 00 00 DD 6E F8 DD 66 F9 46 23 66 68 DD +R 00 00 01 00 +T 3B 00 00 00 75 F6 DD 74 F7 7D B4 CA +R 00 00 01 00 +T 43 00 00 00 CB 03 00 00 21 4F 00 DD 4E F6 DD +R 00 00 01 00 00 04 01 00 +T 4C 00 00 00 46 F7 09 7E 23 B6 CA CB 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 55 00 00 00 21 4F 00 DD 4E F6 DD 46 F7 09 4E +R 00 00 01 00 +T 60 00 00 00 23 46 0B 70 2B 71 79 B0 C2 +R 00 00 01 00 +T 69 00 00 00 CB 03 00 00 +R 00 00 01 00 00 04 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 +R 00 00 01 00 +T 6B 00 00 00 21 38 00 DD 4E F6 DD 46 F7 09 5E +R 00 00 01 00 +T 76 00 00 00 23 56 CD 00 00 00 00 00 00 07 00 +R 00 00 01 00 02 07 02 00 +T 7F 00 00 00 B1 03 00 00 8F 00 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 83 00 00 00 A0 00 00 00 DE 01 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 87 00 00 00 19 02 00 00 AF 03 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8B 00 00 00 AF 03 00 00 CA 02 00 00 +R 00 00 01 00 00 04 01 00 00 08 01 00 +T 8F 00 00 00 +R 00 00 01 00 +T 8F 00 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 0B 00 +T 97 00 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 0B 00 02 0A 00 00 +T 9E 00 00 00 CB 03 00 00 +R 00 00 01 00 00 04 01 00 +T A0 00 00 00 +R 00 00 01 00 +T A0 00 00 00 21 3E 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T AB 00 00 00 B7 C2 DE 01 00 00 +R 00 00 01 00 00 06 01 00 +T AF 00 00 00 +R 00 00 01 00 +T AF 00 00 00 3A 00 00 00 00 47 0E 15 ED 4C 79 +R 00 00 01 00 02 05 09 00 +T B8 00 00 00 C6 35 32 00 00 00 00 21 24 00 DD +R 00 00 01 00 02 07 09 00 +T C1 00 00 00 4E F6 DD 46 F7 09 7E E6 08 20 14 +R 00 00 01 00 +T CC 00 00 00 21 3B 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T D7 00 00 00 F5 3A 00 00 00 00 47 F1 B8 30 31 +R 00 00 01 00 02 06 09 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 +R 00 00 01 00 +T E0 00 00 00 21 36 00 DD 4E F6 DD 46 F7 09 4E +R 00 00 01 00 +T EB 00 00 00 23 46 0B 70 2B 71 79 B0 20 03 +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 C3 DE 01 00 00 +R 00 00 01 00 00 05 01 00 +T F8 00 00 00 +R 00 00 01 00 +T F8 00 00 00 21 4F 00 DD 4E F6 DD 46 F7 09 E5 +R 00 00 01 00 +T 03 01 00 00 21 3C 00 09 4E 06 00 E1 71 23 70 +R 00 00 01 00 +T 0E 01 00 00 C3 CB 03 00 00 +R 00 00 01 00 00 05 01 00 +T 11 01 00 00 +R 00 00 01 00 +T 11 01 00 00 21 51 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T 1C 01 00 00 23 B6 CA DE 01 00 00 +R 00 00 01 00 00 07 01 00 +T 21 01 00 00 +R 00 00 01 00 +T 21 01 00 00 AF DD 77 FC DD 77 FD +R 00 00 01 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 2A 04 00 00 00 DD 4E FC DD 46 FD +R 00 00 01 00 02 05 0C 00 +T 31 01 00 00 CD 00 00 00 00 DA DE 01 00 00 +R 00 00 01 00 02 05 0F 00 00 0A 01 00 +T 37 01 00 00 +R 00 00 01 00 +T 37 01 00 00 DD 6E FC DD 66 FD 29 01 +R 00 00 01 00 +T 3F 01 00 00 00 00 00 00 09 46 23 66 68 DD 75 +R 00 00 01 00 02 04 07 00 +T 48 01 00 00 FE DD 74 FF 7D B4 CA D3 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 51 01 00 00 DD 6E F6 DD 66 F7 DD 4E FE DD 46 +R 00 00 01 00 +T 5C 01 00 00 FF A7 ED 42 28 71 21 51 00 DD 4E +R 00 00 01 00 +T 67 01 00 00 FE DD 46 FF 09 E5 21 51 00 DD 4E +R 00 00 01 00 +T 72 01 00 00 F6 DD 46 F7 09 C1 E5 69 60 4E 23 +R 00 00 01 00 +T 7D 01 00 00 46 E1 79 A6 57 78 23 A6 B2 28 4B +R 00 00 01 00 +T 88 01 00 00 21 51 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T 93 01 00 00 E6 00 47 23 7E E6 02 B0 28 0F 21 +R 00 00 01 00 +T 9E 01 00 00 19 00 DD 4E FE DD 46 FF 09 7E E6 +R 00 00 01 00 +T A9 01 00 00 02 20 24 +R 00 00 01 00 +T AC 01 00 00 +R 00 00 01 00 +T AC 01 00 00 +R 00 00 01 00 +T AC 01 00 00 21 51 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T B7 01 00 00 E6 00 47 23 7E E6 01 B0 28 12 21 +R 00 00 01 00 +T C2 01 00 00 24 00 DD 4E FE DD 46 FF 09 7E E6 +R 00 00 01 00 +T CD 01 00 00 08 28 03 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 +R 00 00 01 00 +T D0 01 00 00 C3 E0 00 00 00 +R 00 00 01 00 00 05 01 00 +T D3 01 00 00 +R 00 00 01 00 +T D3 01 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T DB 01 00 00 +R 00 00 01 00 +T DB 01 00 00 C3 28 01 00 00 +R 00 00 01 00 00 05 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 +R 00 00 01 00 +T DE 01 00 00 21 19 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T E9 01 00 00 E6 02 20 2C +R 00 00 01 00 +T ED 01 00 00 +R 00 00 01 00 +T ED 01 00 00 21 38 00 DD 4E F6 DD 46 F7 09 36 +R 00 00 01 00 +T F8 01 00 00 03 23 36 00 21 4F 00 09 E5 21 +R 00 00 01 00 +T 02 02 00 00 3A 00 09 5E 16 00 E1 73 23 72 59 +R 00 00 01 00 +T 0D 02 00 00 50 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 03 00 02 0B 03 00 +T 13 02 00 00 CD 00 00 00 00 C3 CB 03 00 00 +R 00 00 01 00 02 05 00 00 00 0A 01 00 +T 19 02 00 00 +R 00 00 01 00 +T 19 02 00 00 +R 00 00 01 00 +T 19 02 00 00 21 49 00 DD 4E F6 DD 46 F7 09 E5 +R 00 00 01 00 +T 24 02 00 00 21 47 00 09 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T 2F 02 00 00 79 B0 CA CA 02 00 00 +R 00 00 01 00 00 07 01 00 +T 34 02 00 00 +R 00 00 01 00 +T 34 02 00 00 21 47 00 DD 4E F6 DD 46 F7 09 E5 +R 00 00 01 00 +T 3F 02 00 00 21 47 00 09 56 23 66 6A 23 23 5E +R 00 00 01 00 +T 4A 02 00 00 23 56 E1 73 23 72 0E 80 21 10 00 +R 00 00 01 00 +T 55 02 00 00 DD 5E F6 DD 56 F7 19 5E 23 56 3E +R 00 00 01 00 +T 60 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T 65 02 00 00 00 00 00 00 11 01 00 3E +R 00 00 01 00 02 04 00 00 +T 6B 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 70 02 00 00 00 00 00 00 21 38 00 DD 4E F6 DD +R 00 00 01 00 02 04 00 00 +T 79 02 00 00 46 F7 09 36 04 23 36 00 21 4F 00 +R 00 00 01 00 +T 84 02 00 00 09 E5 21 40 00 09 5E 16 00 01 +R 00 00 01 00 +T 8E 02 00 00 12 00 CD 00 00 00 00 E1 73 23 72 +R 00 00 01 00 02 07 0E 00 +T 97 02 00 00 DD 5E F6 DD 56 F7 3E 00 00 00 00 +R 00 00 01 00 2B 0B 05 00 +T 9F 02 00 00 21 00 00 00 00 CD 00 00 00 00 0E +R 00 00 01 00 02 05 05 00 02 0A 00 00 +T A6 02 00 00 C0 21 10 00 DD 5E F6 DD 56 F7 19 +R 00 00 01 00 +T B1 02 00 00 5E 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 12 00 +T B7 02 00 00 00 00 00 00 CD 00 00 00 00 11 +R 00 00 01 00 02 04 12 00 02 09 00 00 +T BD 02 00 00 01 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T C2 02 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T C8 02 00 00 CB 03 00 00 +R 00 00 01 00 00 04 01 00 +T CA 02 00 00 +R 00 00 01 00 +T CA 02 00 00 +R 00 00 01 00 +T CA 02 00 00 21 3E 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T D5 02 00 00 FE 02 30 7A +R 00 00 01 00 +T D9 02 00 00 +R 00 00 01 00 +T D9 02 00 00 21 38 00 DD 4E F6 DD 46 F7 09 AF +R 00 00 01 00 +T E4 02 00 00 77 23 77 59 50 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T EC 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T F2 02 00 00 47 00 DD 4E F6 DD 46 F7 09 7E 23 +R 00 00 01 00 +T FD 02 00 00 B6 28 51 +R 00 00 01 00 +T 00 03 00 00 +R 00 00 01 00 +T 00 03 00 00 21 38 00 DD 4E F6 DD 46 F7 09 36 +R 00 00 01 00 +T 0B 03 00 00 01 23 36 00 21 36 00 09 E5 21 +R 00 00 01 00 +T 15 03 00 00 42 00 09 5E 16 00 01 12 00 CD +R 00 00 01 00 +T 1F 03 00 00 00 00 00 00 21 3C 00 DD 4E F6 DD +R 00 00 01 00 02 04 0E 00 +T 28 03 00 00 46 F7 09 4E 06 00 CD 00 00 00 00 +R 00 00 01 00 02 0B 10 00 +T 31 03 00 00 E1 73 23 72 21 4F 00 DD 4E F6 DD +R 00 00 01 00 +T 3C 03 00 00 46 F7 09 E5 21 41 00 09 4E 06 00 +R 00 00 01 00 +T 47 03 00 00 11 12 00 CD 00 00 00 00 E1 73 23 +R 00 00 01 00 02 08 0E 00 +T 50 03 00 00 72 +R 00 00 01 00 +T 51 03 00 00 +R 00 00 01 00 +T 51 03 00 00 18 78 +R 00 00 01 00 +T 53 03 00 00 +R 00 00 01 00 +T 53 03 00 00 21 47 00 DD 4E F6 DD 46 F7 09 7E +R 00 00 01 00 +T 5E 03 00 00 23 B6 28 27 +R 00 00 01 00 +T 62 03 00 00 +R 00 00 01 00 +T 62 03 00 00 21 38 00 DD 4E F6 DD 46 F7 09 36 +R 00 00 01 00 +T 6D 03 00 00 03 23 36 00 21 4F 00 09 E5 21 +R 00 00 01 00 +T 77 03 00 00 41 00 09 4E 06 00 11 12 00 CD +R 00 00 01 00 +T 81 03 00 00 00 00 00 00 E1 73 23 72 18 24 +R 00 00 01 00 02 04 0E 00 +T 89 03 00 00 +R 00 00 01 00 +T 89 03 00 00 21 38 00 DD 4E F6 DD 46 F7 09 AF +R 00 00 01 00 +T 94 03 00 00 77 23 77 21 4F 00 09 E5 21 42 00 +R 00 00 01 00 +T 9F 03 00 00 09 4E 06 00 11 12 00 CD +R 00 00 01 00 +T A7 03 00 00 00 00 00 00 E1 73 23 72 +R 00 00 01 00 02 04 0E 00 +T AD 03 00 00 +R 00 00 01 00 +T AD 03 00 00 18 1C +R 00 00 01 00 +T AF 03 00 00 +R 00 00 01 00 +T AF 03 00 00 18 1A +R 00 00 01 00 +T B1 03 00 00 +R 00 00 01 00 +T B1 03 00 00 21 38 00 DD 4E F6 DD 46 F7 09 AF +R 00 00 01 00 +T BC 03 00 00 77 23 77 59 50 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0B 00 +T C4 03 00 00 00 00 00 00 CD 00 00 00 00 18 00 +R 00 00 01 00 02 04 0B 00 02 09 00 00 +T CB 03 00 00 +R 00 00 01 00 +T CB 03 00 00 +R 00 00 01 00 +T CB 03 00 00 DD 7E F8 D6 02 DD 77 F8 DD 7E F9 +R 00 00 01 00 +T D6 03 00 00 DE 00 DD 77 F9 C3 21 00 00 00 +R 00 00 01 00 00 0A 01 00 +T DE 03 00 00 +R 00 00 01 00 +T DE 03 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T E6 03 00 00 21 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T ED 03 00 00 00 00 00 00 +R 00 00 01 00 02 04 06 00 diff --git a/src/nos/lib/z80_lib/esccvec.rel b/src/nos/lib/z80_lib/esccvec.rel new file mode 100644 index 00000000..9805a648 --- /dev/null +++ b/src/nos/lib/z80_lib/esccvec.rel @@ -0,0 +1,47 @@ +XL4 +H 2 areas B global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _Esccpolltab Ref00000000 +S _Spsave Ref00000000 +S _Sssave Ref00000000 +S _Esccvecloc Ref00000000 +S doret Ref00000000 +S .__.ABS. Def00000000 +S _Esccmaxvec Ref00000000 +S _Stktop Ref00000000 +S _Esccchan Ref00000000 +A _DEFAULT size 0 flags 0 +A RCODE size 71 flags 0 +S _esccnovec Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 F3 F5 E5 3A FC 10 2A 80 0F ED 29 +R 00 00 01 00 +T 0B 00 00 00 39 ED 21 3A 32 00 00 00 00 ED 73 +R 00 00 01 00 02 09 03 00 +T 14 00 00 00 00 00 00 00 31 00 00 00 00 FD E5 +R 00 00 01 00 02 04 02 00 02 09 08 00 +T 1B 00 00 00 ED 38 38 F5 C5 D5 +R 00 00 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 00 00 00 00 +R 00 00 01 00 02 05 01 00 +T 24 00 00 00 +R 00 00 01 00 +T 24 00 00 00 4E 23 46 23 79 B0 CA 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 2D 00 00 00 3E 03 ED 79 00 ED 78 B7 20 04 23 +R 00 00 01 00 +T 38 00 00 00 23 18 E9 4E 23 46 3E 02 ED 79 00 +R 00 00 01 00 +T 43 00 00 00 ED 78 5F 1F DA 00 00 00 00 1F E6 +R 00 00 01 00 02 09 05 00 +T 4C 00 00 00 3E EE 02 4F 06 00 21 00 00 00 00 +R 00 00 01 00 02 0B 09 00 +T 55 00 00 00 09 7E 23 66 6F B4 CA 00 00 00 00 +R 00 00 01 00 02 0B 05 00 +T 5E 00 00 00 E5 7B E6 06 07 4F 09 5E 23 56 23 +R 00 00 01 00 +T 69 00 00 00 7E EB D1 CD 00 00 00 00 18 B0 +R 00 00 01 00 02 08 00 00 diff --git a/src/nos/lib/z80_lib/get_asy.rel b/src/nos/lib/z80_lib/get_asy.rel new file mode 100644 index 00000000..5acdd3f6 --- /dev/null +++ b/src/nos/lib/z80_lib/get_asy.rel @@ -0,0 +1,35 @@ +XL4 +H 2 areas 7 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _asy_read Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 3A flags 0 +S _get_asy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FC FF 21 01 00 E5 +R 00 00 01 00 02 05 04 00 +T 09 00 00 00 21 02 00 39 4D 44 DD 5E 02 DD 56 +R 00 00 01 00 +T 14 00 00 00 03 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 1A 00 00 00 CD 00 00 00 00 F1 DD 75 FD DD 74 +R 00 00 01 00 02 05 00 00 +T 23 00 00 00 FE 3E 01 AD B4 20 07 +R 00 00 01 00 +T 2A 00 00 00 +R 00 00 01 00 +T 2A 00 00 00 DD 6E FC 26 00 18 06 +R 00 00 01 00 +T 31 00 00 00 +R 00 00 01 00 +T 31 00 00 00 DD 6E FD DD 66 FE +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 02 00 diff --git a/src/nos/lib/z80_lib/get_escc.rel b/src/nos/lib/z80_lib/get_escc.rel new file mode 100644 index 00000000..ee4bbb42 --- /dev/null +++ b/src/nos/lib/z80_lib/get_escc.rel @@ -0,0 +1,80 @@ +XL4 +H 2 areas A global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _Esccchan Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _dirps Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size DD flags 0 +S _get_escc Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 F8 FF DD 6E 02 DD +R 00 00 01 00 02 05 07 00 +T 09 00 00 00 66 03 29 01 00 00 00 00 09 46 23 +R 00 00 01 00 02 08 03 00 +T 12 00 00 00 66 68 01 26 00 09 DD 75 F8 DD 74 +R 00 00 01 00 +T 1D 00 00 00 F9 +R 00 00 01 00 +T 1E 00 00 00 +R 00 00 01 00 +T 1E 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T 24 00 00 00 00 00 00 00 DD 75 FD DD 74 FE 21 +R 00 00 01 00 02 04 00 00 +T 2D 00 00 00 08 00 DD 4E F8 DD 46 F9 09 46 23 +R 00 00 01 00 +T 38 00 00 00 66 68 DD 75 FB DD 74 FC 7D B4 28 +R 00 00 01 00 +T 43 00 00 00 21 +R 00 00 01 00 +T 44 00 00 00 +R 00 00 01 00 +T 44 00 00 00 21 08 00 DD 4E F8 DD 46 F9 09 4E +R 00 00 01 00 +T 4F 00 00 00 23 46 0B 70 2B 71 DD 5E FD DD 56 +R 00 00 01 00 +T 5A 00 00 00 FE 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 01 00 02 0B 01 00 +T 60 00 00 00 CD 00 00 00 00 18 1E +R 00 00 01 00 02 05 00 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 DD 5E FD DD 56 FE 3E 00 00 00 00 +R 00 00 01 00 2B 0B 01 00 +T 6D 00 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 01 00 02 0A 00 00 +T 74 00 00 00 5E F8 DD 56 F9 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 05 00 +T 7C 00 00 00 00 00 00 00 CD 00 00 00 00 18 9B +R 00 00 01 00 02 04 05 00 02 09 00 00 +T 83 00 00 00 +R 00 00 01 00 +T 83 00 00 00 21 06 00 DD 4E F8 DD 46 F9 09 5E +R 00 00 01 00 +T 8E 00 00 00 23 56 13 72 2B 73 1B 1A DD 77 FA +R 00 00 01 00 +T 99 00 00 00 03 03 0A 6F 03 0A 67 E5 DD 6E F8 +R 00 00 01 00 +T A4 00 00 00 DD 66 F9 4E 23 46 E1 09 4D 44 21 +R 00 00 01 00 +T AF 00 00 00 06 00 DD 5E F8 DD 56 F9 19 56 23 +R 00 00 01 00 +T BA 00 00 00 66 6A A7 ED 42 38 14 +R 00 00 01 00 +T C1 00 00 00 +R 00 00 01 00 +T C1 00 00 00 21 06 00 DD 4E F8 DD 46 F9 09 E5 +R 00 00 01 00 +T CC 00 00 00 69 60 4E 23 46 E1 71 23 70 +R 00 00 01 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 DD 6E FA 26 00 C3 00 00 00 00 +R 00 00 01 00 02 0A 02 00 diff --git a/src/nos/lib/z80_lib/get_rlsd_asy.rel b/src/nos/lib/z80_lib/get_rlsd_asy.rel new file mode 100644 index 00000000..0128c033 --- /dev/null +++ b/src/nos/lib/z80_lib/get_rlsd_asy.rel @@ -0,0 +1,15 @@ +XL4 +H 2 areas 5 global symbols +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S .__.ABS. Def00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 9 flags 0 +S _get_rlsd_asy Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 05 02 00 +T 07 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 diff --git a/src/nos/lib/z80_lib/pasy.rel b/src/nos/lib/z80_lib/pasy.rel new file mode 100644 index 00000000..4d91790d --- /dev/null +++ b/src/nos/lib/z80_lib/pasy.rel @@ -0,0 +1,185 @@ +XL4 +H 3 areas 10 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___00af_db59__20_5btrigger_200x_ Ref00000000 +S ___00de_2902__20sw_20over_20_25l Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0096_fd02__20MC_3a_20int_20_2 Ref00000000 +S .__.ABS. Def00000000 +S ___00a4_e8c1__20TX_3a_20int_20_2 Ref00000000 +S ___009d_df24__20RX_3a_20int_20_2 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___0153_47c0__25s_3a Ref00000000 +S __printf Ref00000000 +S ___00ad_7762__20_5bcts_20flow_20 Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ___00ae_2f4d__20_5brlsd_20line_2 Ref00000000 +S ___0075_6904__20_25lu_20bps_0a Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 20A flags 0 +S _pasy Def00000000 +A CSTR size E flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FE FF DD 6E 02 DD +R 00 00 01 00 02 05 08 00 +T 09 00 00 00 66 03 46 23 66 68 23 23 4E 23 46 +R 00 00 01 00 +T 14 00 00 00 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 09 00 +T 19 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 09 00 2B 0A 0A 00 +T 1F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 26 00 00 00 F1 21 12 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T 31 00 00 00 7E 23 A6 3C 28 20 +R 00 00 01 00 +T 37 00 00 00 +R 00 00 01 00 +T 37 00 00 00 21 12 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T 42 00 00 00 23 46 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 08 01 00 +T 49 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 01 00 2B 0A 0A 00 +T 4F 00 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 56 00 00 00 F1 +R 00 00 01 00 +T 57 00 00 00 +R 00 00 01 00 +T 57 00 00 00 21 29 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 62 00 00 00 B7 28 11 +R 00 00 01 00 +T 65 00 00 00 +R 00 00 01 00 +T 65 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0B 00 02 0B 0B 00 +T 6B 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 71 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 76 00 00 00 +R 00 00 01 00 +T 76 00 00 00 21 2A 00 DD 4E 02 DD 46 03 09 7E +R 00 00 01 00 +T 81 00 00 00 B7 28 11 +R 00 00 01 00 +T 84 00 00 00 +R 00 00 01 00 +T 84 00 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 0D 00 02 0B 0D 00 +T 8A 00 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0A 00 02 0B 0A 00 +T 90 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 05 00 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 21 1D 00 DD 4E 02 DD 46 03 09 5E +R 00 00 01 00 +T A0 00 00 00 23 56 23 4E 23 46 C5 D5 0E +R 00 00 01 00 +T A9 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 0E 00 02 0A 0E 00 +T AF 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0A 00 02 0A 0A 00 +T B5 00 00 00 00 00 00 00 F1 F1 F1 F1 21 +R 00 00 01 00 02 04 00 00 +T BC 00 00 00 00 00 00 00 E5 21 03 00 00 00 E5 +R 00 00 01 00 00 04 02 00 00 0A 02 00 +T C3 00 00 00 21 00 00 00 00 E5 21 00 00 00 00 +R 00 00 01 00 00 05 02 00 00 0B 02 00 +T CA 00 00 00 E5 21 00 00 00 00 E5 21 +R 00 00 01 00 00 06 02 00 +T D0 00 00 00 00 00 00 00 E5 21 48 00 DD 4E 02 +R 00 00 01 00 00 04 02 00 +T D9 00 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T E4 00 00 00 C5 D5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 07 04 00 +T EA 00 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 2B 0A 0A 00 +T F0 00 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T F7 00 00 00 14 00 39 F9 EB 21 44 00 DD 4E 02 +R 00 00 01 00 +T 02 01 00 00 DD 46 03 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 0D 01 00 00 C5 D5 21 3C 00 DD 4E 02 DD 46 03 +R 00 00 01 00 +T 18 01 00 00 09 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T 23 01 00 00 38 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T 2E 01 00 00 56 23 4E 23 46 C5 D5 21 30 00 DD +R 00 00 01 00 +T 39 01 00 00 4E 02 DD 46 03 09 5E 23 56 23 4E +R 00 00 01 00 +T 44 01 00 00 23 46 C5 D5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 07 00 +T 4C 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 07 00 2B 0A 0A 00 +T 52 01 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 59 01 00 00 14 00 39 F9 EB 21 44 00 DD 4E 02 +R 00 00 01 00 +T 64 01 00 00 DD 46 03 09 AF 77 23 77 23 77 23 +R 00 00 01 00 +T 6F 01 00 00 77 21 0C 00 09 5E 23 56 D5 21 +R 00 00 01 00 +T 79 01 00 00 0E 00 09 5E 23 56 23 4E 23 46 C5 +R 00 00 01 00 +T 84 01 00 00 D5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 06 02 00 +T 89 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 02 00 2B 0A 0A 00 +T 8F 01 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 96 01 00 00 F1 F1 F1 21 0C 00 DD 4E 02 DD 46 +R 00 00 01 00 +T A1 01 00 00 03 09 AF 77 23 77 21 18 00 09 7E +R 00 00 01 00 +T AC 01 00 00 B7 28 05 21 07 00 00 00 18 03 +R 00 00 01 00 00 08 02 00 +T B4 01 00 00 +R 00 00 01 00 +T B4 01 00 00 21 0D 00 00 00 +R 00 00 01 00 00 05 02 00 +T B7 01 00 00 +R 00 00 01 00 +T B7 01 00 00 E5 21 4C 00 DD 4E 02 DD 46 03 09 +R 00 00 01 00 +T C2 01 00 00 5E 23 56 23 4E 23 46 C5 D5 21 +R 00 00 01 00 +T CC 01 00 00 40 00 DD 4E 02 DD 46 03 09 5E 23 +R 00 00 01 00 +T D7 01 00 00 56 23 4E 23 46 C5 D5 21 34 00 DD +R 00 00 01 00 +T E2 01 00 00 4E 02 DD 46 03 09 4E 23 46 23 5E +R 00 00 01 00 +T ED 01 00 00 23 56 D5 C5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 09 06 00 +T F5 01 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 06 00 2B 0A 0A 00 +T FB 01 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 0A 00 02 09 00 00 +T 02 02 00 00 12 00 39 F9 EB C3 00 00 00 00 +R 00 00 01 00 02 0A 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 4F 6E 00 +R 00 00 02 00 +T 03 00 00 00 +R 00 00 02 00 +T 03 00 00 00 4F 66 66 00 +R 00 00 02 00 +T 07 00 00 00 +R 00 00 02 00 +T 07 00 00 00 20 42 55 53 59 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/z80_lib/rand.rel b/src/nos/lib/z80_lib/rand.rel new file mode 100644 index 00000000..fd9d4fbb --- /dev/null +++ b/src/nos/lib/z80_lib/rand.rel @@ -0,0 +1,271 @@ +XL4 +H 3 areas 12 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _memcpy Ref00000000 +S ?L_INC_L03 Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _MD5Init Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S ?L_ANDASG_L03 Ref00000000 +S _MD5Update Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?UL_MOD_L03 Ref00000000 +S _MD5Final Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _clockbits Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2FE flags 0 +S _getrand Def000000D0 +S _rtype Def000001F5 +S _urandom Def00000272 +S _rand_init Def00000000 +A UDATA0 size 14 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 14 FE 21 58 00 39 +R 00 00 01 00 02 05 09 00 +T 09 00 00 00 AF 77 23 77 +R 00 00 01 00 +T 0D 00 00 00 +R 00 00 01 00 +T 0D 00 00 00 01 10 80 21 58 00 39 56 23 66 6A +R 00 00 01 00 +T 18 00 00 00 3E 80 AC 67 ED 42 D2 CD 00 00 00 +R 00 00 01 00 00 0B 01 00 +T 21 00 00 00 +R 00 00 01 00 +T 21 00 00 00 21 5A 00 39 AF 77 23 77 +R 00 00 01 00 +T 29 00 00 00 +R 00 00 01 00 +T 29 00 00 00 01 C8 80 21 5A 00 39 56 23 66 6A +R 00 00 01 00 +T 34 00 00 00 3E 80 AC 67 ED 42 30 2C +R 00 00 01 00 +T 3C 00 00 00 +R 00 00 01 00 +T 3C 00 00 00 21 5A 00 39 46 23 66 68 29 E5 21 +R 00 00 01 00 +T 47 00 00 00 5E 00 39 4D 44 E1 09 E5 3E +R 00 00 01 00 +T 50 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 55 00 00 00 00 00 00 00 4D 44 E1 71 23 70 21 +R 00 00 01 00 02 04 00 00 +T 5E 00 00 00 5A 00 39 34 23 20 01 34 +R 00 00 01 00 +T 66 00 00 00 +R 00 00 01 00 +T 66 00 00 00 18 C1 +R 00 00 01 00 +T 68 00 00 00 +R 00 00 01 00 +T 68 00 00 00 21 00 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 70 00 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 77 00 00 00 10 00 E5 01 00 00 00 00 21 02 00 +R 00 00 01 00 00 08 02 00 +T 80 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 86 00 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 8D 00 00 00 90 01 E5 21 5E 00 39 4D 44 21 +R 00 00 01 00 +T 97 00 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 9F 00 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T A6 00 00 00 00 00 39 4D 44 11 00 00 00 00 3E +R 00 00 01 00 00 0A 02 00 +T AF 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T B4 00 00 00 00 00 00 00 11 00 00 3E +R 00 00 01 00 02 04 00 00 +T BA 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 06 00 02 09 06 00 +T BF 00 00 00 00 00 00 00 21 58 00 39 34 23 20 +R 00 00 01 00 02 04 00 00 +T C8 00 00 00 01 34 +R 00 00 01 00 +T CA 00 00 00 +R 00 00 01 00 +T CA 00 00 00 C3 0D 00 00 00 +R 00 00 01 00 00 05 01 00 +T CD 00 00 00 +R 00 00 01 00 +T CD 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T D0 00 00 00 +R 00 00 01 00 +T D0 00 00 00 CD 00 00 00 00 94 FF 3E +R 00 00 01 00 02 05 09 00 +T D6 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T DB 00 00 00 00 00 00 00 DD 75 94 DD 74 95 21 +R 00 00 01 00 02 04 00 00 +T E4 00 00 00 02 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 04 00 +T EC 00 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T F2 00 00 00 10 00 E5 01 00 00 00 00 21 04 00 +R 00 00 01 00 00 08 02 00 +T FB 00 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 01 01 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 08 01 00 00 02 00 E5 21 02 00 39 4D 44 21 +R 00 00 01 00 +T 12 01 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 1A 01 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 21 01 00 00 02 00 39 4D 44 11 00 00 00 00 3E +R 00 00 01 00 00 0A 02 00 +T 2A 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 2F 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 00 00 +T 31 01 00 00 +R 00 00 01 00 +T 31 01 00 00 DD 7E 04 DD B6 05 CA F2 01 00 00 +R 00 00 01 00 00 0B 01 00 +T 3A 01 00 00 +R 00 00 01 00 +T 3A 01 00 00 21 02 00 39 5D 54 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 42 01 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 49 01 00 00 10 00 E5 01 00 00 00 00 21 04 00 +R 00 00 01 00 00 08 02 00 +T 52 01 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 58 01 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 5F 01 00 00 04 00 E5 01 10 00 00 00 21 04 00 +R 00 00 01 00 00 08 02 00 +T 68 01 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 6E 01 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 75 01 00 00 02 00 39 4D 44 21 5A 00 39 5D 54 +R 00 00 01 00 +T 80 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0B 00 02 0A 0B 00 +T 86 01 00 00 00 00 00 00 2A 10 00 00 00 ED 4B +R 00 00 01 00 02 04 00 00 00 09 02 00 +T 8D 01 00 00 12 00 00 00 CD 00 00 00 00 22 +R 00 00 01 00 00 04 02 00 02 09 02 00 +T 93 01 00 00 10 00 00 00 ED 43 12 00 00 00 01 +R 00 00 01 00 00 04 02 00 00 0A 02 00 +T 9A 01 00 00 10 80 DD 6E 04 DD 66 05 3E 80 AC +R 00 00 01 00 +T A5 01 00 00 67 ED 42 30 08 DD 6E 04 DD 66 05 +R 00 00 01 00 +T B0 01 00 00 18 03 +R 00 00 01 00 +T B2 01 00 00 +R 00 00 01 00 +T B2 01 00 00 21 10 00 +R 00 00 01 00 +T B5 01 00 00 +R 00 00 01 00 +T B5 01 00 00 DD 75 FE DD 74 FF E5 21 5C 00 39 +R 00 00 01 00 +T C0 01 00 00 4D 44 DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T C9 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 01 00 02 09 01 00 +T CE 01 00 00 00 00 00 00 F1 21 70 00 39 7E DD +R 00 00 01 00 02 04 00 00 +T D7 01 00 00 96 FE 77 23 7E DD 9E FF 77 21 +R 00 00 01 00 +T E1 01 00 00 6E 00 39 7E DD 86 FE 77 23 7E DD +R 00 00 01 00 +T EC 01 00 00 8E FF 77 C3 31 01 00 00 +R 00 00 01 00 00 08 01 00 +T F2 01 00 00 +R 00 00 01 00 +T F2 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 03 00 +T F5 01 00 00 +R 00 00 01 00 +T F5 01 00 00 CD 00 00 00 00 A6 FF 21 02 00 39 +R 00 00 01 00 02 05 09 00 +T FE 01 00 00 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 04 00 +T 03 02 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 04 00 02 09 00 00 +T 09 02 00 00 10 00 E5 01 00 00 00 00 21 04 00 +R 00 00 01 00 00 08 02 00 +T 12 02 00 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 08 00 +T 18 02 00 00 00 00 00 00 CD 00 00 00 00 E1 3E +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 1F 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 24 02 00 00 00 00 00 00 DD 75 A6 DD 74 A7 01 +R 00 00 01 00 02 04 00 00 +T 2D 02 00 00 02 00 C5 21 02 00 39 4D 44 21 +R 00 00 01 00 +T 37 02 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 3F 02 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 46 02 00 00 02 00 E5 21 5E 00 39 4D 44 21 +R 00 00 01 00 +T 50 02 00 00 04 00 39 5D 54 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 08 00 +T 58 02 00 00 00 00 00 00 CD 00 00 00 00 E1 21 +R 00 00 01 00 02 04 08 00 02 09 00 00 +T 5F 02 00 00 02 00 39 4D 44 11 00 00 00 00 3E +R 00 00 01 00 00 0A 02 00 +T 68 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0B 00 02 09 0B 00 +T 6D 02 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 00 00 02 09 03 00 +T 72 02 00 00 +R 00 00 01 00 +T 72 02 00 00 CD 00 00 00 00 F8 FF DD 6E 02 DD +R 00 00 01 00 02 05 09 00 +T 7B 02 00 00 66 03 01 00 00 C5 E5 01 00 80 21 +R 00 00 01 00 +T 86 02 00 00 00 00 CD 00 00 00 00 59 50 4D 44 +R 00 00 01 00 02 07 0A 00 +T 8F 02 00 00 21 FF FF A7 ED 42 4D 44 21 FF 7F +R 00 00 01 00 +T 9A 02 00 00 ED 52 E5 69 60 C1 DD 75 F8 DD 74 +R 00 00 01 00 +T A5 02 00 00 F9 DD 71 FA DD 70 FB +R 00 00 01 00 +T AC 02 00 00 +R 00 00 01 00 +T AC 02 00 00 01 04 00 21 04 00 39 5D 54 3E +R 00 00 01 00 +T B6 02 00 00 D0 00 00 00 21 D0 00 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T BB 02 00 00 00 00 00 00 21 04 00 39 01 FF 7F +R 00 00 01 00 02 04 00 00 +T C4 02 00 00 11 FF FF CD 00 00 00 00 C5 D5 A7 +R 00 00 01 00 02 08 07 00 +T CD 02 00 00 DD 6E F8 DD 66 F9 C1 ED 42 DD 6E +R 00 00 01 00 +T D8 02 00 00 FA DD 66 FB C1 ED 42 38 CB +R 00 00 01 00 +T E1 02 00 00 +R 00 00 01 00 +T E1 02 00 00 DD 6E 02 DD 66 03 01 00 00 C5 E5 +R 00 00 01 00 +T EC 02 00 00 DD 4E FE DD 46 FF DD 6E FC DD 66 +R 00 00 01 00 +T F7 02 00 00 FD CD 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 06 0A 00 02 0B 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 +T 10 00 00 00 +R 00 00 02 00 +T 10 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/z80_lib/stktrace.rel b/src/nos/lib/z80_lib/stktrace.rel new file mode 100644 index 00000000..91d09f0c --- /dev/null +++ b/src/nos/lib/z80_lib/stktrace.rel @@ -0,0 +1,781 @@ +XL4 +H 4 areas 29 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ___0207_5d65_Can_27t_20find_20he Ref00000000 +S _strrchr Ref00000000 +S ___0112_aa0a__2504x_3a_2504x Ref00000000 +S _rip Ref00000000 +S __argv Ref00000000 +S _strcat Ref00000000 +S _ctime Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _strlen Ref00000000 +S __fprintf Ref00000000 +S ?L_OR_L03 Ref00000000 +S _strdupw Ref00000000 +S _strcmp Ref00000000 +S _fgets Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _Curproc Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S ___0182_abc9__29_0a Ref00000000 +S ___007a_3c84__20_25s_2b_25x Ref00000000 +S _free Ref00000000 +S _fputc Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _strcpy Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ___0594_4875_stktrace_20from_20p Ref00000000 +S _time Ref00000000 +S _freopen Ref00000000 +S ___0179_a2cd__28 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ___0173_52fc__25x Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S _malloc Ref00000000 +S _qsort Ref00000000 +S _fclose Ref00000000 +S _sscanf Ref00000000 +S _newproc Ref00000000 +S ___042b_a3a9_can_27t_20read_20_2 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 804 flags 0 +S _stktrace Def00000000 +A CSTR size 4A flags 0 +A UDATA0 size 4 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 E0 FF 21 00 00 E5 +R 00 00 01 00 02 05 19 00 +T 09 00 00 00 01 0D 00 00 00 11 00 00 00 00 3E +R 00 00 01 00 00 05 02 00 00 0A 02 00 +T 10 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1C 00 02 09 1C 00 +T 15 00 00 00 00 00 00 00 F1 DD 75 F7 DD 74 F8 +R 00 00 01 00 02 04 00 00 +T 1E 00 00 00 7D B4 20 03 +R 00 00 01 00 +T 22 00 00 00 +R 00 00 01 00 +T 22 00 00 00 C3 4E 03 00 00 +R 00 00 01 00 00 05 01 00 +T 25 00 00 00 +R 00 00 01 00 +T 25 00 00 00 21 40 00 ED 4B 00 00 00 00 09 56 +R 00 00 01 00 02 09 10 00 +T 2E 00 00 00 23 66 6A DD 75 F9 DD 74 FA 21 +R 00 00 01 00 +T 38 00 00 00 40 00 09 DD 5E F7 DD 56 F8 73 23 +R 00 00 01 00 +T 43 00 00 00 72 21 1B 00 39 5D 54 3E +R 00 00 01 00 +T 4B 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1B 00 02 09 1B 00 +T 50 00 00 00 00 00 00 00 21 1B 00 39 5D 54 3E +R 00 00 01 00 02 04 00 00 +T 59 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 07 00 02 09 07 00 +T 5E 00 00 00 00 00 00 00 E5 21 2A 00 ED 4B +R 00 00 01 00 02 04 00 00 +T 66 00 00 00 00 00 00 00 09 4E 23 46 C5 0E +R 00 00 01 00 02 04 10 00 +T 6E 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 1A 00 02 0A 1A 00 +T 74 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1F 00 02 0A 1F 00 +T 7A 00 00 00 00 00 00 00 F1 F1 F1 F1 21 00 00 +R 00 00 01 00 02 04 00 00 +T 83 00 00 00 22 02 00 00 00 2A 00 00 00 00 5E +R 00 00 01 00 00 05 03 00 02 0A 05 00 +T 8A 00 00 00 23 56 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 09 00 +T 8F 00 00 00 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 04 09 00 02 09 00 00 +T 95 00 00 00 05 00 09 EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 09 22 00 +T 9C 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 22 00 02 09 00 00 +T A3 00 00 00 F3 DD 74 F4 2A 00 00 00 00 4E 23 +R 00 00 01 00 02 09 05 00 +T AC 00 00 00 46 DD 5E F3 DD 56 F4 3E +R 00 00 01 00 +T B4 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 18 00 02 09 18 00 +T B9 00 00 00 00 00 00 00 01 2E 00 DD 5E F3 DD +R 00 00 01 00 02 04 00 00 +T C2 00 00 00 56 F4 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T C7 00 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 02 00 02 09 00 00 +T CE 00 00 00 F5 DD 74 F6 7D B4 28 08 +R 00 00 01 00 +T D6 00 00 00 +R 00 00 01 00 +T D6 00 00 00 DD 6E F5 DD 66 F6 36 00 +R 00 00 01 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 01 10 00 00 00 DD 5E F3 DD 56 F4 +R 00 00 01 00 00 05 02 00 +T E7 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 06 00 02 0A 06 00 +T ED 00 00 00 00 00 00 00 21 00 00 E5 21 00 00 +R 00 00 01 00 02 04 00 00 +T F6 00 00 00 E5 DD 6E F3 DD 66 F4 E5 21 01 00 +R 00 00 01 00 +T 01 01 00 00 E5 0E 61 04 00 00 C5 21 +R 00 00 01 00 29 06 01 00 +T 06 01 00 00 61 04 00 00 E5 01 00 02 11 +R 00 00 01 00 00 04 01 00 +T 0D 01 00 00 15 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 02 00 2B 09 26 00 +T 12 01 00 00 00 00 00 00 CD 00 00 00 00 EB 21 +R 00 00 01 00 02 04 26 00 02 09 00 00 +T 19 01 00 00 0C 00 39 F9 EB DD 75 EF DD 74 F0 +R 00 00 01 00 +T 24 01 00 00 DD 5E EF DD 56 F0 3E 00 00 00 00 +R 00 00 01 00 2B 0B 12 00 +T 2C 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 12 00 02 0A 00 00 +T 33 01 00 00 5E F3 DD 56 F4 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 15 00 +T 3B 01 00 00 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 04 15 00 02 09 00 00 +T 41 01 00 00 22 00 39 DD 75 E4 DD 74 E5 DD 36 +R 00 00 01 00 +T 4C 01 00 00 EA 00 00 00 00 DD 36 EB +R 00 00 01 00 09 05 01 00 +T 51 01 00 00 00 00 00 00 DD 36 EC 00 00 00 00 +R 00 00 01 00 89 04 01 00 29 0B 01 00 +T 56 01 00 00 AF DD 77 E0 DD 77 E1 +R 00 00 01 00 +T 5D 01 00 00 +R 00 00 01 00 +T 5D 01 00 00 01 14 80 DD 6E E0 DD 66 E1 3E 80 +R 00 00 01 00 +T 68 01 00 00 AC 67 ED 42 D2 2C 03 00 00 +R 00 00 01 00 00 09 01 00 +T 6F 01 00 00 +R 00 00 01 00 +T 6F 01 00 00 DD 4E EC DD 5E EA DD 56 EB CD +R 00 00 01 00 +T 79 01 00 00 CF 07 00 00 DD 4E EC DD 5E EA DD +R 00 00 01 00 00 04 01 00 +T 82 01 00 00 56 EB CD 51 03 00 00 DD 75 F1 DD +R 00 00 01 00 00 07 01 00 +T 8B 01 00 00 74 F2 7D B4 28 32 +R 00 00 01 00 +T 91 01 00 00 +R 00 00 01 00 +T 91 01 00 00 21 04 00 DD 4E F1 DD 46 F2 09 5E +R 00 00 01 00 +T 9C 01 00 00 23 56 DD 6E EA DD 66 EB A7 ED 52 +R 00 00 01 00 +T A7 01 00 00 E5 21 06 00 09 4E 23 46 C5 0E +R 00 00 01 00 +T B1 01 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 14 00 02 0A 14 00 +T B7 01 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1F 00 02 0A 1F 00 +T BD 01 00 00 00 00 00 00 F1 F1 F1 F1 +R 00 00 01 00 02 04 00 00 +T C3 01 00 00 +R 00 00 01 00 +T C3 01 00 00 DD 7E E4 DD B6 E5 20 19 +R 00 00 01 00 +T CB 01 00 00 +R 00 00 01 00 +T CB 01 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 10 00 +T D4 01 00 00 23 46 11 0A 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 16 00 +T DC 01 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 16 00 02 09 00 00 +T E2 01 00 00 2C 03 00 00 +R 00 00 01 00 00 04 01 00 +T E4 01 00 00 +R 00 00 01 00 +T E4 01 00 00 DD 6E E4 DD 66 E5 46 23 66 68 DD +R 00 00 01 00 +T EF 01 00 00 75 E6 DD 74 E7 7D B4 28 31 +R 00 00 01 00 +T F8 01 00 00 +R 00 00 01 00 +T F8 01 00 00 DD 4E E4 DD 46 E5 DD 6E E6 DD 66 +R 00 00 01 00 +T 03 02 00 00 E7 A7 ED 42 CB 2C CB 1D 01 FE FF +R 00 00 01 00 +T 0E 02 00 00 09 DD 75 ED DD 74 EE 4D 44 21 +R 00 00 01 00 +T 18 02 00 00 14 00 CD 00 00 00 00 30 08 +R 00 00 01 00 02 07 1E 00 +T 1F 02 00 00 +R 00 00 01 00 +T 1F 02 00 00 DD 36 ED 14 DD 36 EE 00 +R 00 00 01 00 +T 27 02 00 00 +R 00 00 01 00 +T 27 02 00 00 18 08 +R 00 00 01 00 +T 29 02 00 00 +R 00 00 01 00 +T 29 02 00 00 DD 36 ED 06 DD 36 EE 00 +R 00 00 01 00 +T 31 02 00 00 +R 00 00 01 00 +T 31 02 00 00 21 04 00 DD 4E E4 DD 46 E5 09 DD +R 00 00 01 00 +T 3C 02 00 00 75 E8 DD 74 E9 0E 00 00 00 00 C5 +R 00 00 01 00 2B 0A 1D 00 +T 44 02 00 00 21 00 00 00 00 E5 3E 00 00 00 00 +R 00 00 01 00 02 05 1D 00 2B 0B 1F 00 +T 4A 02 00 00 21 00 00 00 00 CD 00 00 00 00 F1 +R 00 00 01 00 02 05 1F 00 02 0A 00 00 +T 51 02 00 00 F1 AF DD 77 E2 DD 77 E3 +R 00 00 01 00 +T 59 02 00 00 +R 00 00 01 00 +T 59 02 00 00 DD 4E ED DD 46 EE DD 6E E2 DD 66 +R 00 00 01 00 +T 64 02 00 00 E3 CD 00 00 00 00 30 67 +R 00 00 01 00 02 06 1E 00 +T 6A 02 00 00 +R 00 00 01 00 +T 6A 02 00 00 DD 6E E8 DD 66 E9 4E 23 46 C5 0E +R 00 00 01 00 +T 75 02 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 20 00 02 0A 20 00 +T 7B 02 00 00 DD 6E F7 DD 66 F8 E5 3E +R 00 00 01 00 +T 83 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0A 00 02 09 0A 00 +T 88 02 00 00 00 00 00 00 F1 F1 F1 F1 DD 4E ED +R 00 00 01 00 02 04 00 00 +T 91 02 00 00 DD 46 EE 0B DD 6E E2 DD 66 E3 CD +R 00 00 01 00 +T 9C 02 00 00 00 00 00 00 30 18 +R 00 00 01 00 02 04 1E 00 +T A0 02 00 00 +R 00 00 01 00 +T A0 02 00 00 21 40 00 ED 4B 00 00 00 00 09 4E +R 00 00 01 00 02 09 10 00 +T A9 02 00 00 23 46 11 20 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 16 00 +T B1 02 00 00 00 00 00 00 CD 00 00 00 00 18 02 +R 00 00 01 00 02 04 16 00 02 09 00 00 +T B8 02 00 00 +R 00 00 01 00 +T B8 02 00 00 18 17 +R 00 00 01 00 +T BA 02 00 00 +R 00 00 01 00 +T BA 02 00 00 DD 7E E8 C6 02 DD 77 E8 30 03 DD +R 00 00 01 00 +T C5 02 00 00 34 E9 +R 00 00 01 00 +T C7 02 00 00 +R 00 00 01 00 +T C7 02 00 00 DD 34 E2 20 03 DD 34 E3 +R 00 00 01 00 +T CF 02 00 00 +R 00 00 01 00 +T CF 02 00 00 18 88 +R 00 00 01 00 +T D1 02 00 00 +R 00 00 01 00 +T D1 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 13 00 02 0B 13 00 +T D7 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 1F 00 02 0B 1F 00 +T DD 02 00 00 CD 00 00 00 00 F1 F1 DD 6E E4 DD +R 00 00 01 00 02 05 00 00 +T E6 02 00 00 66 E5 23 23 46 23 66 68 01 00 00 +R 00 00 01 00 +T F1 02 00 00 C5 E5 21 04 00 DD 4E E4 DD 46 E5 +R 00 00 01 00 +T FC 02 00 00 09 56 23 66 6A 01 00 00 4D 44 21 +R 00 00 01 00 +T 07 03 00 00 00 00 CD 00 00 00 00 DD 75 EA DD +R 00 00 01 00 02 07 0B 00 +T 10 03 00 00 74 EB DD 71 EC DD 6E E6 DD 66 E7 +R 00 00 01 00 +T 1B 03 00 00 DD 75 E4 DD 74 E5 DD 34 E0 20 03 +R 00 00 01 00 +T 26 03 00 00 DD 34 E1 +R 00 00 01 00 +T 29 03 00 00 +R 00 00 01 00 +T 29 03 00 00 C3 5D 01 00 00 +R 00 00 01 00 00 05 01 00 +T 2C 03 00 00 +R 00 00 01 00 +T 2C 03 00 00 CD 05 04 00 00 DD 5E F7 DD 56 F8 +R 00 00 01 00 00 05 01 00 +T 35 03 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 24 00 02 0A 24 00 +T 3B 03 00 00 00 00 00 00 21 40 00 ED 4B +R 00 00 01 00 02 04 00 00 +T 42 03 00 00 00 00 00 00 09 DD 4E F9 DD 46 FA +R 00 00 01 00 02 04 10 00 +T 4B 03 00 00 71 23 70 +R 00 00 01 00 +T 4E 03 00 00 +R 00 00 01 00 +T 4E 03 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 51 03 00 00 +R 00 00 01 00 +T 51 03 00 00 CD 00 00 00 00 F8 FF DD 4E 04 DD +R 00 00 01 00 02 05 19 00 +T 5A 03 00 00 6E 02 DD 66 03 06 00 69 60 01 +R 00 00 01 00 +T 64 03 00 00 00 00 ED 4B 02 00 00 00 A7 ED 42 +R 00 00 01 00 00 08 03 00 +T 6D 03 00 00 DD 75 FC DD 74 FD DD 6E 02 DD 66 +R 00 00 01 00 +T 78 03 00 00 03 DD 75 FE DD 74 FF AF DD 77 FA +R 00 00 01 00 +T 83 03 00 00 DD 77 FB 2A 00 00 00 00 DD 75 F8 +R 00 00 01 00 00 08 03 00 +T 8C 03 00 00 DD 74 F9 +R 00 00 01 00 +T 8F 03 00 00 +R 00 00 01 00 +T 8F 03 00 00 DD 7E F8 DD B6 F9 28 65 +R 00 00 01 00 +T 97 03 00 00 +R 00 00 01 00 +T 97 03 00 00 DD 6E F8 DD 66 F9 23 23 4E 23 46 +R 00 00 01 00 +T A2 03 00 00 DD 6E FC DD 66 FD A7 ED 42 38 2F +R 00 00 01 00 +T AD 03 00 00 DD 6E F8 DD 66 F9 23 23 46 23 66 +R 00 00 01 00 +T B8 03 00 00 68 DD 4E FC DD 46 FD A7 ED 42 20 +R 00 00 01 00 +T C3 03 00 00 1A 21 04 00 DD 4E F8 DD 46 F9 09 +R 00 00 01 00 +T CE 03 00 00 4E 23 46 DD 6E FE DD 66 FF A7 ED +R 00 00 01 00 +T D9 03 00 00 42 30 02 +R 00 00 01 00 +T DC 03 00 00 +R 00 00 01 00 +T DC 03 00 00 +R 00 00 01 00 +T DC 03 00 00 +R 00 00 01 00 +T DC 03 00 00 +R 00 00 01 00 +T DC 03 00 00 +R 00 00 01 00 +T DC 03 00 00 18 1E +R 00 00 01 00 +T DE 03 00 00 +R 00 00 01 00 +T DE 03 00 00 DD 6E F8 DD 66 F9 DD 75 FA DD 74 +R 00 00 01 00 +T E9 03 00 00 FB DD 6E F8 DD 66 F9 46 23 66 68 +R 00 00 01 00 +T F4 03 00 00 DD 75 F8 DD 74 F9 18 93 +R 00 00 01 00 +T FC 03 00 00 +R 00 00 01 00 +T FC 03 00 00 DD 6E FA DD 66 FB C3 00 00 00 00 +R 00 00 01 00 02 0B 0F 00 +T 05 04 00 00 +R 00 00 01 00 +T 05 04 00 00 CD 00 00 00 00 FC FF 2A +R 00 00 01 00 02 05 19 00 +T 0B 04 00 00 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 00 04 03 00 +T 13 04 00 00 +R 00 00 01 00 +T 13 04 00 00 DD 7E FC DD B6 FD 28 3D +R 00 00 01 00 +T 1B 04 00 00 +R 00 00 01 00 +T 1B 04 00 00 DD 6E FC DD 66 FD 46 23 66 68 DD +R 00 00 01 00 +T 26 04 00 00 75 FE DD 74 FF 21 06 00 DD 4E FC +R 00 00 01 00 +T 31 04 00 00 DD 46 FD 09 5E 23 56 3E +R 00 00 01 00 +T 39 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 15 00 02 09 15 00 +T 3E 04 00 00 00 00 00 00 59 50 3E 00 00 00 00 +R 00 00 01 00 02 04 00 00 2B 0B 15 00 +T 44 04 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 15 00 02 0A 00 00 +T 4B 04 00 00 6E FE DD 66 FF DD 75 FC DD 74 FD +R 00 00 01 00 +T 56 04 00 00 18 BB +R 00 00 01 00 +T 58 04 00 00 +R 00 00 01 00 +T 58 04 00 00 21 00 00 22 00 00 00 00 C3 +R 00 00 01 00 00 08 03 00 +T 5F 04 00 00 00 00 00 00 +R 00 00 01 00 02 04 0F 00 +T 61 04 00 00 +R 00 00 01 00 +T 61 04 00 00 CD 00 00 00 00 F0 FF AF DD 77 FC +R 00 00 01 00 02 05 19 00 +T 6A 04 00 00 DD 77 FD 21 00 00 E5 01 +R 00 00 01 00 +T 72 04 00 00 1E 00 00 00 DD 5E 04 DD 56 05 3E +R 00 00 01 00 00 04 02 00 +T 7B 04 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1C 00 02 09 1C 00 +T 80 04 00 00 00 00 00 00 F1 DD 75 F2 DD 74 F3 +R 00 00 01 00 02 04 00 00 +T 89 04 00 00 7D B4 20 1C +R 00 00 01 00 +T 8D 04 00 00 +R 00 00 01 00 +T 8D 04 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T 95 04 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 27 00 02 0A 27 00 +T 9B 04 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1F 00 02 0A 1F 00 +T A1 04 00 00 00 00 00 00 F1 F1 F1 C3 +R 00 00 01 00 02 04 00 00 +T A7 04 00 00 20 07 00 00 +R 00 00 01 00 00 04 01 00 +T A9 04 00 00 +R 00 00 01 00 +T A9 04 00 00 11 80 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 22 00 +T AF 04 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 22 00 02 09 00 00 +T B6 04 00 00 F0 DD 74 F1 +R 00 00 01 00 +T BA 04 00 00 +R 00 00 01 00 +T BA 04 00 00 DD 6E F2 DD 66 F3 E5 01 80 00 DD +R 00 00 01 00 +T C5 04 00 00 5E F0 DD 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T CD 04 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T D4 04 00 00 10 00 DD 4E F2 DD 46 F3 09 7E E6 +R 00 00 01 00 +T DF 04 00 00 02 47 23 7E E6 00 B0 20 27 +R 00 00 01 00 +T E8 04 00 00 +R 00 00 01 00 +T E8 04 00 00 DD 5E F0 DD 56 F1 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T F0 04 00 00 21 00 00 00 00 CD 00 00 00 00 01 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T F7 04 00 00 21 00 00 00 DD 5E F0 DD 56 F1 3E +R 00 00 01 00 00 04 02 00 +T 00 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 0D 00 02 09 0D 00 +T 05 05 00 00 00 00 00 00 7D B4 20 02 +R 00 00 01 00 02 04 00 00 +T 0B 05 00 00 +R 00 00 01 00 +T 0B 05 00 00 18 02 +R 00 00 01 00 +T 0D 05 00 00 +R 00 00 01 00 +T 0D 05 00 00 18 AB +R 00 00 01 00 +T 0F 05 00 00 +R 00 00 01 00 +T 0F 05 00 00 21 10 00 DD 4E F2 DD 46 F3 09 7E +R 00 00 01 00 +T 1A 05 00 00 E6 02 47 23 7E E6 00 B0 28 2A +R 00 00 01 00 +T 24 05 00 00 +R 00 00 01 00 +T 24 05 00 00 DD 6E 04 DD 66 05 E5 0E +R 00 00 01 00 +T 2C 05 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 01 00 02 0A 01 00 +T 32 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 1F 00 02 0A 1F 00 +T 38 05 00 00 00 00 00 00 F1 F1 F1 DD 5E F0 DD +R 00 00 01 00 02 04 00 00 +T 41 05 00 00 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 15 00 +T 46 05 00 00 00 00 00 00 CD 00 00 00 00 C3 +R 00 00 01 00 02 04 15 00 02 09 00 00 +T 4C 05 00 00 20 07 00 00 +R 00 00 01 00 00 04 01 00 +T 4E 05 00 00 +R 00 00 01 00 +T 4E 05 00 00 21 00 00 22 00 00 00 00 +R 00 00 01 00 00 08 03 00 +T 54 05 00 00 +R 00 00 01 00 +T 54 05 00 00 DD 6E F2 DD 66 F3 E5 01 80 00 DD +R 00 00 01 00 +T 5F 05 00 00 5E F0 DD 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 0E 00 +T 67 05 00 00 00 00 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 02 04 0E 00 02 09 00 00 +T 6E 05 00 00 10 00 DD 4E F2 DD 46 F3 09 7E E6 +R 00 00 01 00 +T 79 05 00 00 02 47 23 7E E6 00 B0 C2 +R 00 00 01 00 +T 81 05 00 00 2A 06 00 00 +R 00 00 01 00 00 04 01 00 +T 83 05 00 00 +R 00 00 01 00 +T 83 05 00 00 DD 5E F0 DD 56 F1 3E 00 00 00 00 +R 00 00 01 00 2B 0B 04 00 +T 8B 05 00 00 21 00 00 00 00 CD 00 00 00 00 21 +R 00 00 01 00 02 05 04 00 02 0A 00 00 +T 92 05 00 00 06 00 39 E5 21 06 00 39 E5 21 +R 00 00 01 00 +T 9C 05 00 00 44 00 00 00 E5 DD 6E F0 DD 66 F1 +R 00 00 01 00 00 04 02 00 +T A5 05 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 25 00 02 0B 25 00 +T AB 05 00 00 CD 00 00 00 00 F1 F1 F1 F1 3E 02 +R 00 00 01 00 02 05 00 00 +T B4 05 00 00 AD B4 28 02 +R 00 00 01 00 +T B8 05 00 00 +R 00 00 01 00 +T B8 05 00 00 18 9A +R 00 00 01 00 +T BA 05 00 00 +R 00 00 01 00 +T BA 05 00 00 11 08 00 3E 00 00 00 00 21 +R 00 00 01 00 2B 08 22 00 +T C0 05 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 22 00 02 09 00 00 +T C7 05 00 00 F8 DD 74 F9 01 04 00 09 DD 4E F6 +R 00 00 01 00 +T D2 05 00 00 DD 46 F7 71 23 70 DD 6E F8 DD 66 +R 00 00 01 00 +T DD 05 00 00 F9 23 23 DD 4E F4 DD 46 F5 71 23 +R 00 00 01 00 +T E8 05 00 00 70 21 06 00 DD 4E F8 DD 46 F9 09 +R 00 00 01 00 +T F3 05 00 00 E5 21 11 00 DD 5E F0 DD 56 F1 19 +R 00 00 01 00 +T FE 05 00 00 EB 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0C 00 02 0B 0C 00 +T 04 06 00 00 CD 00 00 00 00 EB E1 73 23 72 2A +R 00 00 01 00 02 05 00 00 +T 0D 06 00 00 00 00 00 00 E5 69 60 C1 71 23 70 +R 00 00 01 00 00 04 03 00 +T 16 06 00 00 DD 6E F8 DD 66 F9 22 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 1F 06 00 00 DD 34 FC 20 03 DD 34 FD +R 00 00 01 00 +T 27 06 00 00 +R 00 00 01 00 +T 27 06 00 00 C3 54 05 00 00 +R 00 00 01 00 00 05 01 00 +T 2A 06 00 00 +R 00 00 01 00 +T 2A 06 00 00 DD 5E F2 DD 56 F3 3E 00 00 00 00 +R 00 00 01 00 2B 0B 24 00 +T 32 06 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 24 00 02 0A 00 00 +T 39 06 00 00 5E F0 DD 56 F1 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 15 00 +T 41 06 00 00 00 00 00 00 CD 00 00 00 00 DD 6E +R 00 00 01 00 02 04 15 00 02 09 00 00 +T 48 06 00 00 FC DD 66 FD 29 EB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 22 00 +T 50 06 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 22 00 02 0A 00 00 +T 57 06 00 00 75 FA DD 74 FB AF DD 77 FE DD 77 +R 00 00 01 00 +T 62 06 00 00 FF 2A 00 00 00 00 DD 75 F8 DD 74 +R 00 00 01 00 00 06 03 00 +T 6B 06 00 00 F9 +R 00 00 01 00 +T 6C 06 00 00 +R 00 00 01 00 +T 6C 06 00 00 DD 7E F8 DD B6 F9 28 2C +R 00 00 01 00 +T 74 06 00 00 +R 00 00 01 00 +T 74 06 00 00 DD 6E FE DD 66 FF 29 DD 4E FA DD +R 00 00 01 00 +T 7F 06 00 00 46 FB 09 DD 4E F8 DD 46 F9 71 23 +R 00 00 01 00 +T 8A 06 00 00 70 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 93 06 00 00 +R 00 00 01 00 +T 93 06 00 00 0A 6F 03 0A 67 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 9E 06 00 00 18 CC +R 00 00 01 00 +T A0 06 00 00 +R 00 00 01 00 +T A0 06 00 00 0E 23 07 00 00 C5 21 23 07 00 00 +R 00 00 01 00 29 05 01 00 00 0B 01 00 +T A6 06 00 00 E5 21 02 00 E5 DD 4E FC DD 46 FD +R 00 00 01 00 +T B1 06 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 23 00 +T B9 06 00 00 21 00 00 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 02 05 23 00 02 0A 00 00 +T C0 06 00 00 E1 E1 21 00 00 22 00 00 00 00 DD +R 00 00 01 00 00 0A 03 00 +T C9 06 00 00 6E FC DD 66 FD 2B DD 75 FE DD 74 +R 00 00 01 00 +T D4 06 00 00 FF +R 00 00 01 00 +T D5 06 00 00 +R 00 00 01 00 +T D5 06 00 00 DD CB FF 7E 20 37 +R 00 00 01 00 +T DB 06 00 00 +R 00 00 01 00 +T DB 06 00 00 DD 6E FE DD 66 FF 29 DD 4E FA DD +R 00 00 01 00 +T E6 06 00 00 46 FB 09 46 23 66 68 DD 75 F8 DD +R 00 00 01 00 +T F1 06 00 00 74 F9 ED 4B 00 00 00 00 71 23 70 +R 00 00 01 00 00 08 03 00 +T FA 06 00 00 DD 6E F8 DD 66 F9 22 00 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 03 07 00 00 DD 6E FE DD 66 FF 2B DD 75 FE DD +R 00 00 01 00 +T 0E 07 00 00 74 FF 18 C3 +R 00 00 01 00 +T 12 07 00 00 +R 00 00 01 00 +T 12 07 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 15 00 +T 1A 07 00 00 21 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 05 15 00 02 0A 00 00 +T 20 07 00 00 +R 00 00 01 00 +T 20 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T 23 07 00 00 +R 00 00 01 00 +T 23 07 00 00 CD 00 00 00 00 1A 6F 13 1A 67 23 +R 00 00 01 00 02 05 17 00 +T 2C 07 00 00 23 5E 23 56 0A 6F 03 0A 67 23 23 +R 00 00 01 00 +T 37 07 00 00 46 23 66 68 A7 ED 52 30 06 +R 00 00 01 00 +T 40 07 00 00 +R 00 00 01 00 +T 40 07 00 00 21 01 00 C3 CC 07 00 00 +R 00 00 01 00 00 08 01 00 +T 46 07 00 00 +R 00 00 01 00 +T 46 07 00 00 DD 6E 04 DD 66 05 46 23 66 68 23 +R 00 00 01 00 +T 51 07 00 00 23 4E 23 46 DD 6E 02 DD 66 03 56 +R 00 00 01 00 +T 5C 07 00 00 23 66 6A 23 23 56 23 66 6A A7 ED +R 00 00 01 00 +T 67 07 00 00 42 30 05 +R 00 00 01 00 +T 6A 07 00 00 +R 00 00 01 00 +T 6A 07 00 00 21 FF FF 18 5D +R 00 00 01 00 +T 6F 07 00 00 +R 00 00 01 00 +T 6F 07 00 00 DD 6E 02 DD 66 03 46 23 66 68 01 +R 00 00 01 00 +T 7A 07 00 00 04 00 09 4E 23 46 DD 6E 04 DD 66 +R 00 00 01 00 +T 85 07 00 00 05 56 23 66 6A 11 04 00 19 56 23 +R 00 00 01 00 +T 90 07 00 00 66 6A A7 ED 42 30 05 +R 00 00 01 00 +T 97 07 00 00 +R 00 00 01 00 +T 97 07 00 00 21 01 00 18 30 +R 00 00 01 00 +T 9C 07 00 00 +R 00 00 01 00 +T 9C 07 00 00 DD 6E 04 DD 66 05 46 23 66 68 01 +R 00 00 01 00 +T A7 07 00 00 04 00 09 4E 23 46 DD 6E 02 DD 66 +R 00 00 01 00 +T B2 07 00 00 03 56 23 66 6A 11 04 00 19 56 23 +R 00 00 01 00 +T BD 07 00 00 66 6A A7 ED 42 30 05 +R 00 00 01 00 +T C4 07 00 00 +R 00 00 01 00 +T C4 07 00 00 21 FF FF 18 03 +R 00 00 01 00 +T C9 07 00 00 +R 00 00 01 00 +T C9 07 00 00 21 00 00 +R 00 00 01 00 +T CC 07 00 00 +R 00 00 01 00 +T CC 07 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 08 00 +T CF 07 00 00 +R 00 00 01 00 +T CF 07 00 00 CD 00 00 00 00 41 6B 62 E5 DD 4E +R 00 00 01 00 02 05 17 00 +T D8 07 00 00 04 DD 6E 02 DD 66 03 06 00 69 60 +R 00 00 01 00 +T E3 07 00 00 01 00 00 ED 4B 02 00 00 00 A7 ED +R 00 00 01 00 00 09 03 00 +T EC 07 00 00 42 E5 0E 00 00 00 00 C5 21 +R 00 00 01 00 2B 07 03 00 +T F2 07 00 00 00 00 00 00 E5 3E 00 00 00 00 21 +R 00 00 01 00 02 04 03 00 2B 0A 1F 00 +T F8 07 00 00 00 00 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 1F 00 02 09 00 00 +T FF 07 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 07 0F 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 73 74 6B 74 72 61 63 65 2E 6F 75 +R 00 00 02 00 +T 0B 00 00 00 74 00 +R 00 00 02 00 +T 0D 00 00 00 +R 00 00 02 00 +T 0D 00 00 00 61 74 00 +R 00 00 02 00 +T 10 00 00 00 +R 00 00 02 00 +T 10 00 00 00 2E 6D 61 70 00 +R 00 00 02 00 +T 15 00 00 00 +R 00 00 02 00 +T 15 00 00 00 72 64 73 79 6D 74 61 62 00 +R 00 00 02 00 +T 1E 00 00 00 +R 00 00 02 00 +T 1E 00 00 00 72 74 00 +R 00 00 02 00 +T 21 00 00 00 +R 00 00 02 00 +T 21 00 00 00 20 20 41 64 64 72 65 73 73 20 20 +R 00 00 02 00 +T 2C 00 00 00 20 20 20 20 20 20 20 50 75 62 6C +R 00 00 02 00 +T 37 00 00 00 69 63 73 20 62 79 20 56 61 6C 75 +R 00 00 02 00 +T 42 00 00 00 65 00 +R 00 00 02 00 +T 44 00 00 00 +R 00 00 02 00 +T 44 00 00 00 25 78 3A 25 78 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 diff --git a/src/nos/lib/z80_lib/sw.rel b/src/nos/lib/z80_lib/sw.rel new file mode 100644 index 00000000..b0624e75 --- /dev/null +++ b/src/nos/lib/z80_lib/sw.rel @@ -0,0 +1,246 @@ +XL4 +H 3 areas 13 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?L_DEC_L03 Ref00000000 +S _stopval Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S ___0172_af86__25u_3a_20calls_20_ Ref00000000 +S ?L_ADDASG_L03 Ref00000000 +S .__.ABS. Def00000000 +S ?L_MUL_L03 Ref00000000 +S ?SL_CMP_L03 Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?S_MUL_L02 Ref00000000 +S ?L_INCASG_L03 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S __printf Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size 2D2 flags 0 +S _doswatch Def00000106 +S _swstop Def00000000 +A UDATA0 size 78 flags 0 +S _Sw Def00000000 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 FA FF 3E +R 00 00 01 00 02 05 09 00 +T 06 00 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 0B 00 00 00 00 00 00 00 4D 44 A7 21 00 00 ED +R 00 00 01 00 02 04 00 00 +T 14 00 00 00 42 01 00 00 C5 E5 21 00 00 C1 09 +R 00 00 01 00 +T 1F 00 00 00 EB 21 01 00 C1 ED 4A 4D 44 EB DD +R 00 00 01 00 +T 2A 00 00 00 75 FC DD 74 FD DD 71 FE DD 70 FF +R 00 00 01 00 +T 35 00 00 00 01 0C 00 DD 5E 02 DD 56 03 CD +R 00 00 01 00 +T 3F 00 00 00 00 00 00 00 21 00 00 00 00 19 DD +R 00 00 01 00 02 04 0A 00 00 09 02 00 +T 46 00 00 00 75 FA DD 74 FB CD 00 00 00 00 EB +R 00 00 01 00 02 0A 0B 00 +T 4F 00 00 00 CD 00 00 00 00 7D B4 B1 B0 20 22 +R 00 00 01 00 02 05 01 00 +T 58 00 00 00 +R 00 00 01 00 +T 58 00 00 00 21 04 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T 63 00 00 00 5E FC DD 56 FD 73 23 72 21 06 00 +R 00 00 01 00 +T 6E 00 00 00 09 DD 4E FC DD 46 FD 71 23 70 18 +R 00 00 01 00 +T 79 00 00 00 70 +R 00 00 01 00 +T 7A 00 00 00 +R 00 00 01 00 +T 7A 00 00 00 DD 6E FE DD 66 FF E5 DD 6E FC DD +R 00 00 01 00 +T 85 00 00 00 66 FD E5 21 04 00 DD 4E FA DD 46 +R 00 00 01 00 +T 90 00 00 00 FB 09 46 23 66 68 01 00 00 CD +R 00 00 01 00 +T 9A 00 00 00 00 00 00 00 30 15 +R 00 00 01 00 02 04 08 00 +T 9E 00 00 00 +R 00 00 01 00 +T 9E 00 00 00 21 04 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T A9 00 00 00 4E FC DD 46 FD 71 23 70 18 37 +R 00 00 01 00 +T B3 00 00 00 +R 00 00 01 00 +T B3 00 00 00 21 06 00 DD 4E FA DD 46 FB 09 46 +R 00 00 01 00 +T BE 00 00 00 23 66 68 01 00 00 C5 E5 DD 4E FE +R 00 00 01 00 +T C9 00 00 00 DD 46 FF DD 6E FC DD 66 FD CD +R 00 00 01 00 +T D3 00 00 00 00 00 00 00 30 13 +R 00 00 01 00 02 04 08 00 +T D7 00 00 00 +R 00 00 01 00 +T D7 00 00 00 21 06 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T E2 00 00 00 4E FC DD 46 FD 71 23 70 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 +R 00 00 01 00 +T EA 00 00 00 21 08 00 DD 4E FA DD 46 FB 09 DD +R 00 00 01 00 +T F5 00 00 00 4E FE DD 46 FF DD 5E FC DD 56 FD +R 00 00 01 00 +T 00 01 00 00 CD 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 02 0A 03 00 +T 06 01 00 00 +R 00 00 01 00 +T 06 01 00 00 CD 00 00 00 00 F0 FF DD 4E 02 DD +R 00 00 01 00 02 05 09 00 +T 0F 01 00 00 46 03 21 01 00 CD 00 00 00 00 30 +R 00 00 01 00 02 0A 0D 00 +T 18 01 00 00 57 +R 00 00 01 00 +T 19 01 00 00 +R 00 00 01 00 +T 19 01 00 00 AF DD 77 FE DD 77 FF DD 36 F0 +R 00 00 01 00 +T 23 01 00 00 00 00 00 00 DD 36 F1 00 00 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T 28 01 00 00 +R 00 00 01 00 +T 28 01 00 00 01 0A 80 DD 6E FE DD 66 FF 3E 80 +R 00 00 01 00 +T 33 01 00 00 AC 67 ED 42 30 37 +R 00 00 01 00 +T 39 01 00 00 +R 00 00 01 00 +T 39 01 00 00 DD 6E F0 DD 66 F1 AF 77 23 77 23 +R 00 00 01 00 +T 44 01 00 00 77 23 77 21 08 00 DD 4E F0 DD 46 +R 00 00 01 00 +T 4F 01 00 00 F1 09 AF 77 23 77 23 77 23 77 DD +R 00 00 01 00 +T 5A 01 00 00 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T 61 01 00 00 +R 00 00 01 00 +T 61 01 00 00 DD 7E F0 C6 0C DD 77 F0 30 03 DD +R 00 00 01 00 +T 6C 01 00 00 34 F1 +R 00 00 01 00 +T 6E 01 00 00 +R 00 00 01 00 +T 6E 01 00 00 18 B8 +R 00 00 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 +R 00 00 01 00 +T 70 01 00 00 AF DD 77 FE DD 77 FF DD 36 F0 +R 00 00 01 00 +T 7A 01 00 00 00 00 00 00 DD 36 F1 00 00 00 00 +R 00 00 01 00 09 04 02 00 89 0B 02 00 +T 7F 01 00 00 +R 00 00 01 00 +T 7F 01 00 00 01 78 00 00 00 DD 6E F0 DD 66 F1 +R 00 00 01 00 00 05 02 00 +T 88 01 00 00 A7 ED 42 D2 CC 02 00 00 +R 00 00 01 00 00 08 01 00 +T 8E 01 00 00 +R 00 00 01 00 +T 8E 01 00 00 DD 6E F0 DD 66 F1 7E 23 B6 23 B6 +R 00 00 01 00 +T 99 01 00 00 23 B6 20 03 +R 00 00 01 00 +T 9D 01 00 00 +R 00 00 01 00 +T 9D 01 00 00 C3 B4 02 00 00 +R 00 00 01 00 00 05 01 00 +T A0 01 00 00 +R 00 00 01 00 +T A0 01 00 00 21 00 00 E5 21 E8 03 E5 21 06 00 +R 00 00 01 00 +T AB 01 00 00 DD 4E F0 DD 46 F1 09 56 23 66 6A +R 00 00 01 00 +T B6 01 00 00 01 00 00 C5 E5 01 00 00 21 46 03 +R 00 00 01 00 +T C1 01 00 00 CD 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 07 00 02 0A 0C 00 +T C8 01 00 00 75 F6 DD 74 F7 DD 71 F8 DD 70 F9 +R 00 00 01 00 +T D3 01 00 00 11 00 00 D5 11 E8 03 D5 21 04 00 +R 00 00 01 00 +T DE 01 00 00 DD 4E F0 DD 46 F1 09 5E 23 56 01 +R 00 00 01 00 +T E9 01 00 00 00 00 C5 D5 01 00 00 21 46 03 CD +R 00 00 01 00 +T F4 01 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 07 00 02 09 0C 00 +T FB 01 00 00 F2 DD 74 F3 DD 71 F4 DD 70 F5 11 +R 00 00 01 00 +T 06 02 00 00 00 00 D5 11 E8 03 D5 DD 6E F0 DD +R 00 00 01 00 +T 11 02 00 00 66 F1 4E 23 46 23 5E 23 56 D5 C5 +R 00 00 01 00 +T 1C 02 00 00 21 08 00 DD 4E F0 DD 46 F1 09 5E +R 00 00 01 00 +T 27 02 00 00 23 56 23 4E 23 46 EB CD +R 00 00 01 00 +T 2F 02 00 00 00 00 00 00 C5 E5 01 00 00 21 +R 00 00 01 00 02 04 0C 00 +T 37 02 00 00 46 03 CD 00 00 00 00 CD +R 00 00 01 00 02 07 07 00 +T 3D 02 00 00 00 00 00 00 DD 75 FA DD 74 FB DD +R 00 00 01 00 02 04 0C 00 +T 46 02 00 00 71 FC DD 70 FD 21 08 00 DD 4E F0 +R 00 00 01 00 +T 51 02 00 00 DD 46 F1 09 5E 23 56 23 4E 23 46 +R 00 00 01 00 +T 5C 02 00 00 C5 D5 DD 6E FC DD 66 FD E5 DD 6E +R 00 00 01 00 +T 67 02 00 00 FA DD 66 FB E5 DD 6E F4 DD 66 F5 +R 00 00 01 00 +T 72 02 00 00 E5 DD 6E F2 DD 66 F3 E5 DD 6E F8 +R 00 00 01 00 +T 7D 02 00 00 DD 66 F9 E5 DD 6E F6 DD 66 F7 E5 +R 00 00 01 00 +T 88 02 00 00 DD 6E F0 DD 66 F1 4E 23 46 23 5E +R 00 00 01 00 +T 93 02 00 00 23 56 D5 C5 DD 6E FE DD 66 FF E5 +R 00 00 01 00 +T 9E 02 00 00 0E 00 00 00 00 C5 21 00 00 00 00 +R 00 00 01 00 2B 05 04 00 02 0B 04 00 +T A4 02 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 0E 00 02 0B 0E 00 +T AA 02 00 00 CD 00 00 00 00 EB 21 1A 00 39 F9 +R 00 00 01 00 02 05 00 00 +T B3 02 00 00 EB +R 00 00 01 00 +T B4 02 00 00 +R 00 00 01 00 +T B4 02 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T BC 02 00 00 +R 00 00 01 00 +T BC 02 00 00 DD 7E F0 C6 0C DD 77 F0 30 03 DD +R 00 00 01 00 +T C7 02 00 00 34 F1 +R 00 00 01 00 +T C9 02 00 00 +R 00 00 01 00 +T C9 02 00 00 C3 7F 01 00 00 +R 00 00 01 00 00 05 01 00 +T CC 02 00 00 +R 00 00 01 00 +T CC 02 00 00 21 00 00 C3 00 00 00 00 +R 00 00 01 00 02 08 03 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 02 00 diff --git a/src/nos/lib/z80_lib/z80.rel b/src/nos/lib/z80_lib/z80.rel new file mode 100644 index 00000000..e44f04af --- /dev/null +++ b/src/nos/lib/z80_lib/z80.rel @@ -0,0 +1,1077 @@ +XL4 +H 6 areas 4D global symbols +S _clockinit Ref00000000 +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S _restore Ref00000000 +S _Stktop Ref00000000 +S _sprintf Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _hwtick Ref00000000 +S _Ifaces Ref00000000 +S _ppause Ref00000000 +S ?L_INC_L03 Ref00000000 +S _Kdebug Ref00000000 +S ?BANK_LEAVE_DIRECT_L08 Ref00000000 +S _abyte Ref00000000 +S _kbraw Ref00000000 +S _if_detach Ref00000000 +S ?LEAVE_DIRECT_L09 Ref00000000 +S _Shutdown Ref00000000 +S .__.ABS. Def00000000 +S _kwait Ref00000000 +S _dirps Ref00000000 +S ?ENT_PARM_DIRECT_L09 Ref00000000 +S _Current Ref00000000 +S ?L_MUL_L03 Ref00000000 +S _ksignal Ref00000000 +S _Kbvec Ref00000000 +S ?ENT_AUTO_DIRECT_L09 Ref00000000 +S ?UL_MOD_L03 Ref00000000 +S ?SL_DIV_L03 Ref00000000 +S _socklen Ref00000000 +S ?UL_DIV_L03 Ref00000000 +S ?SS_CMP_L02 Ref00000000 +S _Hwtvec Ref00000000 +S ?L_ORASG_L03 Ref00000000 +S _rtype Ref00000000 +S _fcloseall Ref00000000 +S ?CL64180B_4_06_L00 Ref00000000 +S ?SL_RSH_L03 Ref00000000 +S _kalarm Ref00000000 +S ___vector_table Ref00000000 +S _Intstk Ref00000000 +S ?BANK_LEAVE_32_L08 Ref00000000 +S _inportb Ref00000000 +S _clockbits Ref00000000 +S ___base_vectors Ref00000000 +S _outportb Ref00000000 +A _DEFAULT size 0 flags 0 +A CODE size A2F flags 0 +S _clrbit Def00000306 +S _sysreset Def000004FC +S _secclock Def0000083B +S _maskon Def00000255 +S _setbit Def000002E7 +S _ioinit Def00000009 +S _getirq Def000001FC +S _ctick Def00000267 +S _intcontext Def000009BA +S _setirq Def0000018F +S _iostop Def0000003E +S _rdclock Def000002A5 +S _arddec Def000009E4 +S _maskoff Def0000024C +S _errhandler Def00000000 +S _kbread Def000000DE +S _writebit Def00000326 +S _doshell Def000000D5 +S _msclock Def0000076B +S _getmask Def0000025E +S _getvect Def0000014C +S _longdiv Def0000042A +S _usclock Def00000947 +S _display Def00000505 +S _setvect Def00000119 +S _pctick Def000002E4 +S _longmul Def00000374 +S _ltop Def0000036D +A CSTR size 3D flags 0 +A UDATA0 size 10 flags 0 +S _Tick Def00000000 +S _Isat Def00000006 +S _Clock Def00000002 +A IDATA0 size 2 flags 0 +S __stklen Def00000000 +A CDATA0 size 2 flags 0 +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 CD 00 00 00 00 21 03 00 C3 +R 00 00 01 00 02 05 14 00 +T 07 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0B 00 +T 09 00 00 00 +R 00 00 01 00 +T 09 00 00 00 C5 D5 11 0A 00 3E FC 01 00 00 21 +R 00 00 01 00 29 0A 01 00 +T 11 00 00 00 FC 01 00 00 CD 00 00 00 00 79 32 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 18 00 00 00 02 00 00 00 22 00 00 00 00 0E +R 00 00 01 00 02 04 1F 00 02 09 1F 00 +T 1E 00 00 00 00 00 00 00 C5 21 00 00 00 00 E5 +R 00 00 01 00 2B 04 06 00 02 0A 06 00 +T 24 00 00 00 11 0A 00 3E 8F 01 00 00 21 +R 00 00 01 00 29 08 01 00 +T 2A 00 00 00 8F 01 00 00 CD 00 00 00 00 F1 F1 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 31 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 00 00 02 0A 00 00 +T 37 00 00 00 00 00 00 00 D1 C1 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0B 05 00 +T 3E 00 00 00 +R 00 00 01 00 +T 3E 00 00 00 CD 00 00 00 00 FA FF 2A +R 00 00 01 00 02 05 19 00 +T 44 00 00 00 00 00 00 00 DD 75 FA DD 74 FB +R 00 00 01 00 02 04 07 00 +T 4C 00 00 00 +R 00 00 01 00 +T 4C 00 00 00 DD 7E FA DD B6 FB 28 2C +R 00 00 01 00 +T 54 00 00 00 +R 00 00 01 00 +T 54 00 00 00 DD 6E FA DD 66 FB 46 23 66 68 DD +R 00 00 01 00 +T 5F 00 00 00 75 FC DD 74 FD DD 5E FA DD 56 FB +R 00 00 01 00 +T 6A 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0E 00 02 0A 0E 00 +T 70 00 00 00 00 00 00 00 DD 6E FC DD 66 FD DD +R 00 00 01 00 02 04 01 00 +T 79 00 00 00 75 FA DD 74 FB 18 CC +R 00 00 01 00 +T 80 00 00 00 +R 00 00 01 00 +T 80 00 00 00 DD 36 FE 00 00 00 00 DD 36 FF +R 00 00 01 00 0B 07 10 00 +T 87 00 00 00 00 00 00 00 +R 00 00 01 00 8B 04 10 00 +T 88 00 00 00 +R 00 00 01 00 +T 88 00 00 00 DD 6E FE DD 66 FF 7E 23 B6 23 B6 +R 00 00 01 00 +T 93 00 00 00 28 1F +R 00 00 01 00 +T 95 00 00 00 +R 00 00 01 00 +T 95 00 00 00 DD 6E FE DD 66 FF 4E 23 46 23 7E +R 00 00 01 00 +T A0 00 00 00 69 60 CD 00 00 00 00 DD 7E FE C6 +R 00 00 01 00 02 07 01 00 +T A9 00 00 00 03 DD 77 FE 30 03 DD 34 FF +R 00 00 01 00 +T B2 00 00 00 +R 00 00 01 00 +T B2 00 00 00 18 D4 +R 00 00 01 00 +T B4 00 00 00 +R 00 00 01 00 +T B4 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 22 00 02 0A 22 00 +T BA 00 00 00 00 00 00 00 3A 02 00 00 00 4F C5 +R 00 00 01 00 02 04 01 00 02 09 1F 00 +T C1 00 00 00 2A 00 00 00 00 E5 11 0A 00 3E +R 00 00 01 00 02 05 1F 00 +T C9 00 00 00 8F 01 00 00 21 8F 01 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T CE 00 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0B 0B 00 +T D5 00 00 00 +R 00 00 01 00 +T D5 00 00 00 CD 00 00 00 00 21 01 00 C3 +R 00 00 01 00 02 05 14 00 +T DC 00 00 00 00 00 00 00 +R 00 00 01 00 02 04 0B 00 +T DE 00 00 00 +R 00 00 01 00 +T DE 00 00 00 CD 00 00 00 00 FE FF +R 00 00 01 00 02 05 19 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 +R 00 00 01 00 +T E3 00 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 0D 00 02 0A 0D 00 +T E9 00 00 00 00 00 00 00 DD 75 FE DD 74 FF 7D +R 00 00 01 00 02 04 01 00 +T F2 00 00 00 B4 20 0D +R 00 00 01 00 +T F5 00 00 00 +R 00 00 01 00 +T F5 00 00 00 11 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 18 00 2B 0A 12 00 +T FB 00 00 00 00 00 00 00 CD 00 00 00 00 18 E1 +R 00 00 01 00 02 04 12 00 02 09 01 00 +T 02 01 00 00 +R 00 00 01 00 +T 02 01 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 21 00 +T 0A 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 21 00 02 0A 01 00 +T 11 01 00 00 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0A 0B 00 +T 19 01 00 00 +R 00 00 01 00 +T 19 01 00 00 CD 00 00 00 00 FE FF 3E +R 00 00 01 00 02 05 19 00 +T 1F 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 24 01 00 00 00 00 00 00 DD 75 FE DD 74 FF DD +R 00 00 01 00 02 04 01 00 +T 2D 01 00 00 4E 0A DD 46 0B DD 6E 02 DD 66 03 +R 00 00 01 00 +T 38 01 00 00 71 23 70 DD 5E FE DD 56 FF 3E +R 00 00 01 00 +T 42 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 02 00 02 09 02 00 +T 47 01 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 0B 00 +T 4C 01 00 00 +R 00 00 01 00 +T 4C 01 00 00 CD 00 00 00 00 FA FF 3E +R 00 00 01 00 02 05 19 00 +T 52 01 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T 57 01 00 00 00 00 00 00 DD 75 FA DD 74 FB DD +R 00 00 01 00 02 04 01 00 +T 60 01 00 00 6E 02 DD 66 03 46 23 66 68 01 +R 00 00 01 00 +T 6A 01 00 00 00 00 DD 75 FC DD 74 FD DD 71 FE +R 00 00 01 00 +T 75 01 00 00 DD 5E FA DD 56 FB 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 7D 01 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 01 00 +T 84 01 00 00 4E FE DD 6E FC DD 66 FD C3 +R 00 00 01 00 +T 8D 01 00 00 00 00 00 00 +R 00 00 01 00 02 04 28 00 +T 8F 01 00 00 +R 00 00 01 00 +T 8F 01 00 00 CD 00 00 00 00 01 08 00 EB A7 ED +R 00 00 01 00 02 05 14 00 +T 98 01 00 00 42 30 25 +R 00 00 01 00 +T 9B 01 00 00 +R 00 00 01 00 +T 9B 01 00 00 DD 6E 0C E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T A6 01 00 00 DD 6E 02 DD 66 03 29 29 29 01 +R 00 00 01 00 +T B0 01 00 00 01 00 00 00 09 EB 3E 19 01 00 00 +R 00 00 01 00 02 04 2B 00 29 0B 01 00 +T B6 01 00 00 21 19 01 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 00 05 01 00 02 0A 01 00 +T BD 01 00 00 E1 18 36 +R 00 00 01 00 +T C0 01 00 00 +R 00 00 01 00 +T C0 01 00 00 01 11 00 DD 6E 02 DD 66 03 A7 ED +R 00 00 01 00 +T CB 01 00 00 42 30 23 +R 00 00 01 00 +T CE 01 00 00 +R 00 00 01 00 +T CE 01 00 00 DD 6E 0C E5 DD 6E 0A DD 66 0B E5 +R 00 00 01 00 +T D9 01 00 00 DD 6E 02 DD 66 03 29 01 +R 00 00 01 00 +T E1 01 00 00 F0 FF FF FF 09 EB 3E 19 01 00 00 +R 00 00 01 00 02 04 26 00 29 0B 01 00 +T E7 01 00 00 21 19 01 00 00 CD 00 00 00 00 E1 +R 00 00 01 00 00 05 01 00 02 0A 01 00 +T EE 01 00 00 E1 18 05 +R 00 00 01 00 +T F1 01 00 00 +R 00 00 01 00 +T F1 01 00 00 21 FF FF 18 03 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 +R 00 00 01 00 +T F6 01 00 00 21 00 00 +R 00 00 01 00 +T F9 01 00 00 +R 00 00 01 00 +T F9 01 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T FC 01 00 00 +R 00 00 01 00 +T FC 01 00 00 CD 00 00 00 00 01 08 00 EB A7 ED +R 00 00 01 00 02 05 14 00 +T 05 02 00 00 42 30 18 +R 00 00 01 00 +T 08 02 00 00 +R 00 00 01 00 +T 08 02 00 00 DD 6E 02 DD 66 03 29 29 29 01 +R 00 00 01 00 +T 12 02 00 00 01 00 00 00 09 EB 3E 4C 01 00 00 +R 00 00 01 00 02 04 2B 00 29 0B 01 00 +T 18 02 00 00 21 4C 01 00 00 CD 00 00 00 00 18 +R 00 00 01 00 00 05 01 00 02 0A 01 00 +T 1F 02 00 00 29 +R 00 00 01 00 +T 20 02 00 00 +R 00 00 01 00 +T 20 02 00 00 01 11 00 DD 6E 02 DD 66 03 A7 ED +R 00 00 01 00 +T 2B 02 00 00 42 30 16 +R 00 00 01 00 +T 2E 02 00 00 +R 00 00 01 00 +T 2E 02 00 00 DD 6E 02 DD 66 03 29 01 +R 00 00 01 00 +T 36 02 00 00 F0 FF FF FF 09 EB 3E 4C 01 00 00 +R 00 00 01 00 02 04 26 00 29 0B 01 00 +T 3C 02 00 00 21 4C 01 00 00 CD 00 00 00 00 18 +R 00 00 01 00 00 05 01 00 02 0A 01 00 +T 43 02 00 00 05 +R 00 00 01 00 +T 44 02 00 00 +R 00 00 01 00 +T 44 02 00 00 0E 00 21 00 00 +R 00 00 01 00 +T 49 02 00 00 +R 00 00 01 00 +T 49 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 28 00 +T 4C 02 00 00 +R 00 00 01 00 +T 4C 02 00 00 CD 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 05 14 00 +T 53 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 0B 00 +T 55 02 00 00 +R 00 00 01 00 +T 55 02 00 00 CD 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 05 14 00 +T 5C 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 0B 00 +T 5E 02 00 00 +R 00 00 01 00 +T 5E 02 00 00 CD 00 00 00 00 21 FF FF C3 +R 00 00 01 00 02 05 14 00 +T 65 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 0B 00 +T 67 02 00 00 +R 00 00 01 00 +T 67 02 00 00 C5 D5 2A 00 00 00 00 7D B4 28 0A +R 00 00 01 00 02 07 0A 00 +T 70 02 00 00 +R 00 00 01 00 +T 70 02 00 00 1E 40 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 0C 00 +T 75 02 00 00 00 00 00 00 CD 00 00 00 00 +R 00 00 01 00 02 04 0C 00 02 09 01 00 +T 7A 02 00 00 +R 00 00 01 00 +T 7A 02 00 00 2A 00 00 00 00 23 22 00 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 81 02 00 00 2A 02 00 00 00 ED 4B 04 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T 88 02 00 00 CD 00 00 00 00 22 02 00 00 00 ED +R 00 00 01 00 02 05 09 00 00 0A 03 00 +T 8F 02 00 00 43 04 00 00 00 01 01 00 11 +R 00 00 01 00 00 05 03 00 +T 96 02 00 00 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 00 04 03 00 2B 09 17 00 +T 9B 02 00 00 00 00 00 00 CD 00 00 00 00 D1 C1 +R 00 00 01 00 02 04 17 00 02 09 01 00 +T A2 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T A5 02 00 00 +R 00 00 01 00 +T A5 02 00 00 CD 00 00 00 00 FA FF 3E +R 00 00 01 00 02 05 19 00 +T AB 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T B0 02 00 00 00 00 00 00 DD 75 FA DD 74 FB ED +R 00 00 01 00 02 04 01 00 +T B9 02 00 00 4B 04 00 00 00 ED 5B 02 00 00 00 +R 00 00 01 00 00 05 03 00 00 0B 03 00 +T C0 02 00 00 DD 73 FC DD 72 FD DD 71 FE DD 70 +R 00 00 01 00 +T CB 02 00 00 FF EB 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 02 00 +T D0 02 00 00 00 00 00 00 CD 00 00 00 00 DD 4E +R 00 00 01 00 02 04 02 00 02 09 01 00 +T D7 02 00 00 FE DD 46 FF DD 6E FC DD 66 FD C3 +R 00 00 01 00 +T E2 02 00 00 00 00 00 00 +R 00 00 01 00 02 04 28 00 +T E4 02 00 00 +R 00 00 01 00 +T E4 02 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T E7 02 00 00 +R 00 00 01 00 +T E7 02 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 14 00 2B 0A 29 00 +T ED 02 00 00 00 00 00 00 CD 00 00 00 00 79 B5 +R 00 00 01 00 02 04 29 00 02 09 01 00 +T F4 02 00 00 4F DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T FC 02 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2C 00 02 09 2C 00 +T 01 03 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 0B 00 +T 06 03 00 00 +R 00 00 01 00 +T 06 03 00 00 CD 00 00 00 00 3E 00 00 00 00 21 +R 00 00 01 00 02 05 14 00 2B 0A 29 00 +T 0C 03 00 00 00 00 00 00 CD 00 00 00 00 79 2F +R 00 00 01 00 02 04 29 00 02 09 01 00 +T 13 03 00 00 A5 4F DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 1C 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2C 00 02 09 2C 00 +T 21 03 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 0B 00 +T 26 03 00 00 +R 00 00 01 00 +T 26 03 00 00 CD 00 00 00 00 FE FF DD 5E 02 DD +R 00 00 01 00 02 05 19 00 +T 2F 03 00 00 56 03 3E 00 00 00 00 21 +R 00 00 01 00 2B 07 29 00 +T 34 03 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 29 00 02 09 01 00 +T 3B 03 00 00 FE DD 7E 0A DD B6 0B 28 0B +R 00 00 01 00 +T 44 03 00 00 +R 00 00 01 00 +T 44 03 00 00 DD 7E FE DD B6 04 DD 77 FE 18 0A +R 00 00 01 00 +T 4F 03 00 00 +R 00 00 01 00 +T 4F 03 00 00 DD 7E 04 2F DD A6 FE DD 77 FE +R 00 00 01 00 +T 59 03 00 00 +R 00 00 01 00 +T 59 03 00 00 DD 4E FE DD 5E 02 DD 56 03 3E +R 00 00 01 00 +T 63 03 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 2C 00 02 09 2C 00 +T 68 03 00 00 00 00 00 00 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 09 0B 00 +T 6D 03 00 00 +R 00 00 01 00 +T 6D 03 00 00 CD 00 00 00 00 EB C3 00 00 00 00 +R 00 00 01 00 02 05 14 00 02 0B 0B 00 +T 74 03 00 00 +R 00 00 01 00 +T 74 03 00 00 CD 00 00 00 00 F8 FF AF DD 77 FE +R 00 00 01 00 02 05 19 00 +T 7D 03 00 00 DD 77 FF 69 60 29 4D 44 21 12 00 +R 00 00 01 00 +T 88 03 00 00 39 7E 81 77 23 7E 88 77 DD 6E 04 +R 00 00 01 00 +T 93 03 00 00 DD 66 05 DD 75 F8 DD 74 F9 +R 00 00 01 00 +T 9C 03 00 00 +R 00 00 01 00 +T 9C 03 00 00 DD 7E F8 DD B6 F9 28 7D +R 00 00 01 00 +T A4 03 00 00 +R 00 00 01 00 +T A4 03 00 00 DD 7E 0A D6 02 DD 77 0A DD 7E 0B +R 00 00 01 00 +T AF 03 00 00 DE 00 DD 77 0B DD 6E 0A DD 66 0B +R 00 00 01 00 +T BA 03 00 00 46 23 66 68 01 00 00 C5 E5 DD 6E +R 00 00 01 00 +T C5 03 00 00 02 DD 66 03 01 00 00 CD +R 00 00 01 00 +T CD 03 00 00 00 00 00 00 C5 E5 DD 6E FE DD 66 +R 00 00 01 00 02 04 16 00 +T D6 03 00 00 FF 11 00 00 C1 09 EB C1 ED 4A 4D +R 00 00 01 00 +T E1 03 00 00 44 EB DD 75 FA DD 74 FB DD 71 FC +R 00 00 01 00 +T EC 03 00 00 DD 70 FD E5 DD 6E 0A DD 66 0B C1 +R 00 00 01 00 +T F7 03 00 00 71 23 70 DD 4E FC DD 46 FD DD 6E +R 00 00 01 00 +T 02 04 00 00 FA DD 66 FB 69 60 01 00 00 DD 75 +R 00 00 01 00 +T 0D 04 00 00 FE DD 74 FF DD 6E F8 DD 66 F9 2B +R 00 00 01 00 +T 18 04 00 00 DD 75 F8 DD 74 F9 C3 9C 03 00 00 +R 00 00 01 00 00 0B 01 00 +T 21 04 00 00 +R 00 00 01 00 +T 21 04 00 00 DD 6E FE DD 66 FF C3 00 00 00 00 +R 00 00 01 00 02 0B 0B 00 +T 2A 04 00 00 +R 00 00 01 00 +T 2A 04 00 00 CD 00 00 00 00 FA FF DD 7E 02 DD +R 00 00 01 00 02 05 19 00 +T 33 04 00 00 B6 03 20 06 +R 00 00 01 00 +T 37 04 00 00 +R 00 00 01 00 +T 37 04 00 00 21 00 00 C3 F9 04 00 00 +R 00 00 01 00 00 08 01 00 +T 3D 04 00 00 +R 00 00 01 00 +T 3D 04 00 00 AF DD 77 FA DD 77 FB DD 77 FC DD +R 00 00 01 00 +T 48 04 00 00 77 FD AF DD 77 FE DD 77 FF +R 00 00 01 00 +T 51 04 00 00 +R 00 00 01 00 +T 51 04 00 00 DD 4E 04 DD 46 05 DD 6E FE DD 66 +R 00 00 01 00 +T 5C 04 00 00 FF CD 00 00 00 00 D2 E8 04 00 00 +R 00 00 01 00 02 06 1E 00 00 0B 01 00 +T 63 04 00 00 +R 00 00 01 00 +T 63 04 00 00 21 00 00 39 E5 DD 6E 0A DD 66 0B +R 00 00 01 00 +T 6E 04 00 00 5E 23 56 01 00 00 E1 CD +R 00 00 01 00 +T 76 04 00 00 00 00 00 00 7B B2 B1 B0 20 02 +R 00 00 01 00 02 04 20 00 +T 7E 04 00 00 +R 00 00 01 00 +T 7E 04 00 00 18 50 +R 00 00 01 00 +T 80 04 00 00 +R 00 00 01 00 +T 80 04 00 00 DD 6E 02 DD 66 03 01 00 00 C5 E5 +R 00 00 01 00 +T 8B 04 00 00 DD 4E FC DD 46 FD DD 6E FA DD 66 +R 00 00 01 00 +T 96 04 00 00 FB CD 00 00 00 00 E5 DD 6E 0A DD +R 00 00 01 00 02 06 1D 00 +T 9F 04 00 00 66 0B C1 71 23 70 DD 6E 02 DD 66 +R 00 00 01 00 +T AA 04 00 00 03 01 00 00 C5 E5 DD 4E FC DD 46 +R 00 00 01 00 +T B5 04 00 00 FD DD 6E FA DD 66 FB CD +R 00 00 01 00 +T BD 04 00 00 00 00 00 00 4D 44 21 00 00 DD 75 +R 00 00 01 00 02 04 1A 00 +T C6 04 00 00 FA DD 74 FB DD 71 FC DD 70 FD +R 00 00 01 00 +T D0 04 00 00 +R 00 00 01 00 +T D0 04 00 00 DD 34 FE 20 03 DD 34 FF +R 00 00 01 00 +T D8 04 00 00 +R 00 00 01 00 +T D8 04 00 00 DD 7E 0A C6 02 DD 77 0A 30 03 DD +R 00 00 01 00 +T E3 04 00 00 34 0B +R 00 00 01 00 +T E5 04 00 00 +R 00 00 01 00 +T E5 04 00 00 C3 51 04 00 00 +R 00 00 01 00 00 05 01 00 +T E8 04 00 00 +R 00 00 01 00 +T E8 04 00 00 DD 4E FC DD 46 FD DD 6E FA DD 66 +R 00 00 01 00 +T F3 04 00 00 FB 69 60 01 00 00 +R 00 00 01 00 +T F9 04 00 00 +R 00 00 01 00 +T F9 04 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T FC 04 00 00 +R 00 00 01 00 +T FC 04 00 00 +R 00 00 01 00 +T FC 04 00 00 +R 00 00 01 00 +T FC 04 00 00 AF 3C 28 02 +R 00 00 01 00 +T 00 05 00 00 +R 00 00 01 00 +T 00 05 00 00 18 FA +R 00 00 01 00 +T 02 05 00 00 +R 00 00 01 00 +T 02 05 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 05 00 +T 05 05 00 00 +R 00 00 01 00 +T 05 05 00 00 CD 00 00 00 00 FC FF +R 00 00 01 00 02 05 19 00 +T 0A 05 00 00 +R 00 00 01 00 +T 0A 05 00 00 +R 00 00 01 00 +T 0A 05 00 00 2A 00 00 00 00 DD 75 FC DD 74 FD +R 00 00 01 00 02 05 15 00 +T 13 05 00 00 7D B4 28 2F 21 1B 00 DD 4E FC DD +R 00 00 01 00 +T 1E 05 00 00 46 FD 09 7E 23 B6 28 20 21 1B 00 +R 00 00 01 00 +T 29 05 00 00 DD 4E FC DD 46 FD 09 46 23 66 68 +R 00 00 01 00 +T 34 05 00 00 01 1B 00 09 46 23 66 68 DD 75 FE +R 00 00 01 00 +T 3F 05 00 00 DD 74 FF 7D B4 20 10 +R 00 00 01 00 +T 46 05 00 00 +R 00 00 01 00 +T 46 05 00 00 +R 00 00 01 00 +T 46 05 00 00 +R 00 00 01 00 +T 46 05 00 00 01 00 00 11 F4 01 3E 00 00 00 00 +R 00 00 01 00 2B 0B 08 00 +T 4E 05 00 00 21 00 00 00 00 CD 00 00 00 00 18 +R 00 00 01 00 02 05 08 00 02 0A 01 00 +T 55 05 00 00 B4 +R 00 00 01 00 +T 56 05 00 00 +R 00 00 01 00 +T 56 05 00 00 2A 0A 00 00 00 DD 4E FE DD 46 FF +R 00 00 01 00 00 05 03 00 +T 5F 05 00 00 A7 ED 42 20 1A 2A 00 00 00 00 7C +R 00 00 01 00 02 0A 0A 00 +T 68 05 00 00 07 9F 5F 53 ED 4B 0C 00 00 00 A7 +R 00 00 01 00 00 0A 03 00 +T 71 05 00 00 ED 42 20 09 EB ED 4B 0E 00 00 00 +R 00 00 01 00 00 0B 03 00 +T 7A 05 00 00 ED 42 28 13 +R 00 00 01 00 +T 7E 05 00 00 +R 00 00 01 00 +T 7E 05 00 00 +R 00 00 01 00 +T 7E 05 00 00 +R 00 00 01 00 +T 7E 05 00 00 +R 00 00 01 00 +T 7E 05 00 00 21 19 00 DD 4E FE DD 46 FF 09 7E +R 00 00 01 00 +T 89 05 00 00 F6 01 77 23 7E F6 00 77 +R 00 00 01 00 +T 91 05 00 00 +R 00 00 01 00 +T 91 05 00 00 DD 4E FC DD 46 FD DD 5E FE DD 56 +R 00 00 01 00 +T 9C 05 00 00 FF CD E5 05 00 00 DD 6E FE DD 66 +R 00 00 01 00 00 06 01 00 +T A5 05 00 00 FF 22 0A 00 00 00 2A 00 00 00 00 +R 00 00 01 00 00 06 03 00 02 0B 0A 00 +T AC 05 00 00 7C 07 9F 4F 41 22 0C 00 00 00 ED +R 00 00 01 00 00 0A 03 00 +T B5 05 00 00 43 0E 00 00 00 01 00 00 11 64 00 +R 00 00 01 00 00 05 03 00 +T BE 05 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 25 00 02 0A 25 00 +T C4 05 00 00 00 00 00 00 DD 5E FE DD 56 FF 3E +R 00 00 01 00 02 04 01 00 +T CD 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 12 00 02 09 12 00 +T D2 05 00 00 00 00 00 00 01 00 00 11 00 00 3E +R 00 00 01 00 02 04 01 00 +T DB 05 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 25 00 02 09 25 00 +T E0 05 00 00 00 00 00 00 C3 0A 05 00 00 +R 00 00 01 00 02 04 01 00 00 09 01 00 +T E5 05 00 00 +R 00 00 01 00 +T E5 05 00 00 CD 00 00 00 00 A6 FF DD 36 FD FF +R 00 00 01 00 02 05 19 00 +T EE 05 00 00 DD 36 FE FF DD 36 A6 07 DD 36 A7 +R 00 00 01 00 +T F9 05 00 00 00 21 0D 00 09 7E 23 B6 CA +R 00 00 01 00 +T 02 06 00 00 AF 06 00 00 21 0D 00 DD 4E 04 DD +R 00 00 01 00 00 04 01 00 +T 0B 06 00 00 46 05 09 7E 23 B6 28 12 21 0D 00 +R 00 00 01 00 +T 16 06 00 00 09 46 23 66 68 01 08 00 09 46 23 +R 00 00 01 00 +T 21 06 00 00 66 68 18 03 +R 00 00 01 00 +T 25 06 00 00 +R 00 00 01 00 +T 25 06 00 00 21 FF FF +R 00 00 01 00 +T 28 06 00 00 +R 00 00 01 00 +T 28 06 00 00 DD 75 FD DD 74 FE 7D A4 3C 28 7C +R 00 00 01 00 +T 33 06 00 00 +R 00 00 01 00 +T 33 06 00 00 +R 00 00 01 00 +T 33 06 00 00 +R 00 00 01 00 +T 33 06 00 00 01 01 00 DD 5E FD DD 56 FE 3E +R 00 00 01 00 +T 3D 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1C 00 02 09 1C 00 +T 42 06 00 00 00 00 00 00 DD 75 F9 DD 74 FA DD +R 00 00 01 00 02 04 01 00 +T 4B 06 00 00 6E 04 DD 66 05 23 23 46 05 20 59 +R 00 00 01 00 +T 56 06 00 00 21 05 00 DD 4E 04 DD 46 05 09 56 +R 00 00 01 00 +T 61 06 00 00 23 66 6A 23 23 7E 23 B6 28 18 21 +R 00 00 01 00 +T 6C 06 00 00 05 00 09 46 23 66 68 23 23 46 23 +R 00 00 01 00 +T 77 06 00 00 66 68 01 08 00 09 46 23 66 68 18 +R 00 00 01 00 +T 82 06 00 00 03 +R 00 00 01 00 +T 83 06 00 00 +R 00 00 01 00 +T 83 06 00 00 21 FF FF +R 00 00 01 00 +T 86 06 00 00 +R 00 00 01 00 +T 86 06 00 00 DD 75 FB DD 74 FC 7D A4 3C 28 1E +R 00 00 01 00 +T 91 06 00 00 +R 00 00 01 00 +T 91 06 00 00 +R 00 00 01 00 +T 91 06 00 00 +R 00 00 01 00 +T 91 06 00 00 01 01 00 DD 5E FB DD 56 FC 3E +R 00 00 01 00 +T 9B 06 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 1C 00 02 09 1C 00 +T A0 06 00 00 00 00 00 00 4D 44 21 53 00 39 7E +R 00 00 01 00 02 04 01 00 +T A9 06 00 00 81 77 23 7E 88 77 +R 00 00 01 00 +T AF 06 00 00 +R 00 00 01 00 +T AF 06 00 00 +R 00 00 01 00 +T AF 06 00 00 DD 6E 04 DD 66 05 23 23 23 4E 23 +R 00 00 01 00 +T BA 06 00 00 46 C5 DD 6E 04 DD 66 05 4E 23 46 +R 00 00 01 00 +T C5 06 00 00 C5 21 00 00 00 00 E5 21 08 00 39 +R 00 00 01 00 00 06 02 00 +T CE 06 00 00 E5 3E 00 00 00 00 21 00 00 00 00 +R 00 00 01 00 2B 06 04 00 02 0B 04 00 +T D4 06 00 00 CD 00 00 00 00 F1 F1 F1 F1 21 +R 00 00 01 00 02 05 01 00 +T DC 06 00 00 1B 00 DD 4E 02 DD 46 03 09 7E 23 +R 00 00 01 00 +T E7 06 00 00 B6 28 2A +R 00 00 01 00 +T EA 06 00 00 +R 00 00 01 00 +T EA 06 00 00 21 29 00 DD 4E 02 DD 46 03 09 4E +R 00 00 01 00 +T F5 06 00 00 23 46 23 5E 23 56 D5 C5 21 +R 00 00 01 00 +T FE 06 00 00 08 00 00 00 E5 21 08 00 39 E5 3E +R 00 00 01 00 00 04 02 00 +T 07 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 0C 07 00 00 00 00 00 00 F1 F1 F1 F1 18 41 +R 00 00 01 00 02 04 01 00 +T 14 07 00 00 +R 00 00 01 00 +T 14 07 00 00 DD 7E FD DD A6 FE 3C 28 25 DD 7E +R 00 00 01 00 +T 1F 07 00 00 F9 DD B6 FA 28 1D +R 00 00 01 00 +T 25 07 00 00 +R 00 00 01 00 +T 25 07 00 00 +R 00 00 01 00 +T 25 07 00 00 +R 00 00 01 00 +T 25 07 00 00 DD 6E F9 DD 66 FA E5 21 +R 00 00 01 00 +T 2D 07 00 00 15 00 00 00 E5 21 06 00 39 E5 3E +R 00 00 01 00 00 04 02 00 +T 36 07 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 04 00 02 09 04 00 +T 3B 07 00 00 00 00 00 00 F1 F1 F1 18 13 +R 00 00 01 00 02 04 01 00 +T 42 07 00 00 +R 00 00 01 00 +T 42 07 00 00 21 21 00 00 00 E5 21 04 00 39 E5 +R 00 00 01 00 00 05 02 00 +T 4B 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 51 07 00 00 00 00 00 00 F1 F1 +R 00 00 01 00 02 04 01 00 +T 55 07 00 00 +R 00 00 01 00 +T 55 07 00 00 +R 00 00 01 00 +T 55 07 00 00 21 2E 00 00 00 E5 21 04 00 39 E5 +R 00 00 01 00 00 05 02 00 +T 5E 07 00 00 3E 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 05 04 00 02 0A 04 00 +T 64 07 00 00 00 00 00 00 F1 F1 C3 00 00 00 00 +R 00 00 01 00 02 04 01 00 02 0B 0F 00 +T 6B 07 00 00 +R 00 00 01 00 +T 6B 07 00 00 CD 00 00 00 00 F2 FF +R 00 00 01 00 02 05 19 00 +T 70 07 00 00 +R 00 00 01 00 +T 70 07 00 00 +R 00 00 01 00 +T 70 07 00 00 3E A5 02 00 00 21 A5 02 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 76 07 00 00 00 00 00 00 DD 75 F2 DD 74 F3 DD +R 00 00 01 00 02 04 01 00 +T 7F 07 00 00 71 F4 DD 70 F5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 2A 00 +T 87 07 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 2A 00 02 09 01 00 +T 8E 07 00 00 F6 DD 74 F7 3E A5 02 00 00 21 +R 00 00 01 00 29 09 01 00 +T 95 07 00 00 A5 02 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 9C 07 00 00 DD 4E F2 DD 46 F3 A7 ED 42 20 C9 +R 00 00 01 00 +T A7 07 00 00 EB DD 4E F4 DD 46 F5 ED 42 20 BE +R 00 00 01 00 +T B2 07 00 00 +R 00 00 01 00 +T B2 07 00 00 AF DD 77 F8 DD 77 F9 3E 10 DD 4E +R 00 00 01 00 +T BD 07 00 00 F4 DD 46 F5 DD 6E F2 DD 66 F3 CD +R 00 00 01 00 +T C8 07 00 00 00 00 00 00 DD 75 FA DD 74 FB DD +R 00 00 01 00 02 04 24 00 +T D1 07 00 00 6E F2 DD 66 F3 DD 75 FC DD 74 FD +R 00 00 01 00 +T DC 07 00 00 DD 4E F6 DD 46 F7 A7 21 00 00 ED +R 00 00 01 00 +T E7 07 00 00 42 DD 75 FE DD 74 FF 21 06 00 39 +R 00 00 01 00 +T F2 07 00 00 E5 01 04 00 11 0B 00 3E +R 00 00 01 00 +T FA 07 00 00 74 03 00 00 21 74 03 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T FF 07 00 00 00 00 00 00 F1 21 06 00 39 E5 01 +R 00 00 01 00 02 04 01 00 +T 08 08 00 00 04 00 11 45 33 3E 2A 04 00 00 21 +R 00 00 01 00 29 0A 01 00 +T 10 08 00 00 2A 04 00 00 CD 00 00 00 00 F1 DD +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 17 08 00 00 6E FC DD 66 FD 01 00 00 4D 44 21 +R 00 00 01 00 +T 22 08 00 00 00 00 C5 E5 DD 6E FE DD 66 FF 11 +R 00 00 01 00 +T 2D 08 00 00 00 00 C1 09 EB C1 ED 4A 4D 44 EB +R 00 00 01 00 +T 38 08 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 28 00 +T 3B 08 00 00 +R 00 00 01 00 +T 3B 08 00 00 CD 00 00 00 00 F2 FF 2A +R 00 00 01 00 02 05 19 00 +T 41 08 00 00 06 00 00 00 7D B4 20 21 +R 00 00 01 00 00 04 03 00 +T 47 08 00 00 +R 00 00 01 00 +T 47 08 00 00 21 00 00 E5 21 E8 03 E5 3E +R 00 00 01 00 +T 50 08 00 00 A5 02 00 00 21 A5 02 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 55 08 00 00 00 00 00 00 C5 E5 01 00 00 21 +R 00 00 01 00 02 04 01 00 +T 5D 08 00 00 37 00 CD 00 00 00 00 CD +R 00 00 01 00 02 07 16 00 +T 63 08 00 00 00 00 00 00 C3 44 09 00 00 +R 00 00 01 00 02 04 1B 00 00 09 01 00 +T 68 08 00 00 +R 00 00 01 00 +T 68 08 00 00 +R 00 00 01 00 +T 68 08 00 00 3E A5 02 00 00 21 A5 02 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 6E 08 00 00 00 00 00 00 DD 75 F2 DD 74 F3 DD +R 00 00 01 00 02 04 01 00 +T 77 08 00 00 71 F4 DD 70 F5 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 2A 00 +T 7F 08 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 2A 00 02 09 01 00 +T 86 08 00 00 F6 DD 74 F7 3E A5 02 00 00 21 +R 00 00 01 00 29 09 01 00 +T 8D 08 00 00 A5 02 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 94 08 00 00 DD 4E F2 DD 46 F3 A7 ED 42 20 C9 +R 00 00 01 00 +T 9F 08 00 00 EB DD 4E F4 DD 46 F5 ED 42 20 BE +R 00 00 01 00 +T AA 08 00 00 +R 00 00 01 00 +T AA 08 00 00 AF DD 77 F8 DD 77 F9 3E 10 DD 4E +R 00 00 01 00 +T B5 08 00 00 F4 DD 46 F5 DD 6E F2 DD 66 F3 CD +R 00 00 01 00 +T C0 08 00 00 00 00 00 00 DD 75 FA DD 74 FB DD +R 00 00 01 00 02 04 24 00 +T C9 08 00 00 6E F2 DD 66 F3 DD 75 FC DD 74 FD +R 00 00 01 00 +T D4 08 00 00 DD 4E F6 DD 46 F7 A7 21 00 00 ED +R 00 00 01 00 +T DF 08 00 00 42 DD 75 FE DD 74 FF 21 06 00 39 +R 00 00 01 00 +T EA 08 00 00 E5 01 04 00 11 0B 00 3E +R 00 00 01 00 +T F2 08 00 00 74 03 00 00 21 74 03 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T F7 08 00 00 00 00 00 00 F1 21 06 00 39 E5 01 +R 00 00 01 00 02 04 01 00 +T 00 09 00 00 04 00 11 45 33 3E 2A 04 00 00 21 +R 00 00 01 00 29 0A 01 00 +T 08 09 00 00 2A 04 00 00 CD 00 00 00 00 F1 21 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 0F 09 00 00 06 00 39 E5 01 04 00 11 E8 03 3E +R 00 00 01 00 +T 1A 09 00 00 2A 04 00 00 21 2A 04 00 00 CD +R 00 00 01 00 29 04 01 00 00 09 01 00 +T 1F 09 00 00 00 00 00 00 F1 DD 6E FC DD 66 FD +R 00 00 01 00 02 04 01 00 +T 28 09 00 00 01 00 00 4D 44 21 00 00 C5 E5 DD +R 00 00 01 00 +T 33 09 00 00 6E FE DD 66 FF 11 00 00 C1 09 EB +R 00 00 01 00 +T 3E 09 00 00 C1 ED 4A 4D 44 EB +R 00 00 01 00 +T 44 09 00 00 +R 00 00 01 00 +T 44 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 28 00 +T 47 09 00 00 +R 00 00 01 00 +T 47 09 00 00 CD 00 00 00 00 FA FF +R 00 00 01 00 02 05 19 00 +T 4C 09 00 00 +R 00 00 01 00 +T 4C 09 00 00 +R 00 00 01 00 +T 4C 09 00 00 3E A5 02 00 00 21 A5 02 00 00 CD +R 00 00 01 00 29 05 01 00 00 0A 01 00 +T 52 09 00 00 00 00 00 00 DD 75 FA DD 74 FB DD +R 00 00 01 00 02 04 01 00 +T 5B 09 00 00 71 FC DD 70 FD 3E 00 00 00 00 21 +R 00 00 01 00 2B 0A 2A 00 +T 63 09 00 00 00 00 00 00 CD 00 00 00 00 DD 75 +R 00 00 01 00 02 04 2A 00 02 09 01 00 +T 6A 09 00 00 FE DD 74 FF 3E A5 02 00 00 21 +R 00 00 01 00 29 09 01 00 +T 71 09 00 00 A5 02 00 00 CD 00 00 00 00 59 50 +R 00 00 01 00 00 04 01 00 02 09 01 00 +T 78 09 00 00 DD 4E FA DD 46 FB A7 ED 42 20 C9 +R 00 00 01 00 +T 83 09 00 00 EB DD 4E FC DD 46 FD ED 42 20 BE +R 00 00 01 00 +T 8E 09 00 00 +R 00 00 01 00 +T 8E 09 00 00 DD 6E FE DD 66 FF 11 00 00 D5 E5 +R 00 00 01 00 +T 99 09 00 00 DD 4E FC DD 46 FD DD 6E FA DD 66 +R 00 00 01 00 +T A4 09 00 00 FB 4D 44 21 00 00 59 50 A7 C1 ED +R 00 00 01 00 +T AF 09 00 00 42 EB C1 ED 42 4D 44 EB C3 +R 00 00 01 00 +T B8 09 00 00 00 00 00 00 +R 00 00 01 00 02 04 28 00 +T BA 09 00 00 +R 00 00 01 00 +T BA 09 00 00 CD 00 00 00 00 FE FF 01 +R 00 00 01 00 02 05 19 00 +T C0 09 00 00 00 00 00 00 21 00 00 39 A7 ED 42 +R 00 00 01 00 02 04 27 00 +T C9 09 00 00 38 13 21 00 00 39 4D 44 21 +R 00 00 01 00 +T D2 09 00 00 00 00 00 00 A7 ED 42 38 05 21 +R 00 00 01 00 02 04 03 00 +T DA 09 00 00 01 00 18 03 +R 00 00 01 00 +T DE 09 00 00 +R 00 00 01 00 +T DE 09 00 00 21 00 00 +R 00 00 01 00 +T E1 09 00 00 +R 00 00 01 00 +T E1 09 00 00 C3 00 00 00 00 +R 00 00 01 00 02 05 0B 00 +T E4 09 00 00 +R 00 00 01 00 +T E4 09 00 00 CD 00 00 00 00 FC FF 3E +R 00 00 01 00 02 05 19 00 +T EA 09 00 00 00 00 00 00 21 00 00 00 00 CD +R 00 00 01 00 2B 04 13 00 02 09 13 00 +T EF 09 00 00 00 00 00 00 DD 75 FE DD 74 FF DD +R 00 00 01 00 02 04 01 00 +T F8 09 00 00 6E 02 DD 66 03 46 23 66 68 DD 75 +R 00 00 01 00 +T 03 0A 00 00 FC DD 74 FD 7D B4 28 0D +R 00 00 01 00 +T 0B 0A 00 00 +R 00 00 01 00 +T 0B 0A 00 00 DD 6E 02 DD 66 03 4E 23 46 0B 70 +R 00 00 01 00 +T 16 0A 00 00 2B 71 +R 00 00 01 00 +T 18 0A 00 00 +R 00 00 01 00 +T 18 0A 00 00 DD 5E FE DD 56 FF 3E 00 00 00 00 +R 00 00 01 00 2B 0B 02 00 +T 20 0A 00 00 21 00 00 00 00 CD 00 00 00 00 DD +R 00 00 01 00 02 05 02 00 02 0A 01 00 +T 27 0A 00 00 6E FC DD 66 FD C3 00 00 00 00 +R 00 00 01 00 02 0A 0B 00 +T 00 00 00 00 +R 00 00 02 00 +T 00 00 00 00 25 32 64 3A 20 25 73 00 +R 00 00 02 00 +T 08 00 00 00 +R 00 00 02 00 +T 08 00 00 00 53 63 72 6F 6C 6C 3A 25 2D 35 6C +R 00 00 02 00 +T 13 00 00 00 75 00 +R 00 00 02 00 +T 15 00 00 00 +R 00 00 02 00 +T 15 00 00 00 55 6E 61 63 6B 3A 20 25 2D 35 75 +R 00 00 02 00 +T 20 00 00 00 00 +R 00 00 02 00 +T 21 00 00 00 +R 00 00 02 00 +T 21 00 00 00 20 20 20 20 20 20 20 20 20 20 20 +R 00 00 02 00 +T 2C 00 00 00 20 00 +R 00 00 02 00 +T 2E 00 00 00 +R 00 00 02 00 +T 2E 00 00 00 46 38 3A 6E 78 74 20 46 31 30 3A +R 00 00 02 00 +T 39 00 00 00 63 6D 64 00 +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 06 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 +T 08 00 00 00 +R 00 00 03 00 +T 0A 00 00 00 +R 00 00 03 00 +T 0A 00 00 00 +R 00 00 03 00 +T 0C 00 00 00 +R 00 00 03 00 +T 0C 00 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 00 20 +R 00 00 05 00 diff --git a/src/nos/lib/z80_lib/z80gen.rel b/src/nos/lib/z80_lib/z80gen.rel new file mode 100644 index 00000000..cda50a02 --- /dev/null +++ b/src/nos/lib/z80_lib/z80gen.rel @@ -0,0 +1,256 @@ +XL4 +H 6 areas 28 global symbols +S ?BANK_CALL_DIRECT_L08 Ref00000000 +S ?BANK_FAST_LEAVE_L08 Ref00000000 +S _ksignal Ref00000000 +S .__.ABS. Def00000000 +S _ctick Ref00000000 +A _DEFAULT size 0 flags 0 +A IDATA0 size 2 flags 0 +S _Sssave Def00000000 +A CDATA0 size 2 flags 0 +A UDATA0 size 507 flags 0 +S _Kbvec Def00000503 +S _Hwtvec Def00000503 +S _Spsave Def00000000 +S _Hashtab Def00000403 +S _Intstk Def00000002 +S _Stktop Def00000402 +S _Mtasker Def00000402 +A RCODE size 4F flags 0 +S doret_final Def0000001B +S doret Def00000003 +S _hwtick Def0000001F +S doret_entry Def00000005 +S docall Def00000000 +A CODE size 12F flags 0 +S _dirps Def0000000C +S _lcsum Def00000077 +S _get32 Def000000A9 +S _getss Def0000003A +S _get16 Def000000B5 +S _enable Def0000001D +S _put32 Def000000BD +S _clockbits Def00000062 +S _inportb Def00000029 +S _outportb Def00000021 +S _put16 Def000000D4 +S _clockinit Def00000040 +S _chktasker Def00000037 +S _restore Def00000019 +S _istate Def00000000 +S _giveup Def00000034 +S _inbuf Def000000F5 +S _disable Def00000015 +S _outbuf Def000000DC +S _kbraw Def000000A3 +S _hash_ip Def0000010E +S _ilog2 Def0000011E +T 00 00 00 00 +R 00 00 01 00 +T 00 00 00 00 80 0F +R 00 00 02 00 +T 00 00 00 00 +R 00 00 03 00 +T 02 00 00 00 +R 00 00 03 00 +T 02 04 00 00 +R 00 00 03 00 +T 02 04 00 00 +R 00 00 03 00 +T 03 04 00 00 +R 00 00 03 00 +T 03 05 00 00 +R 00 00 03 00 +T 03 05 00 00 +R 00 00 03 00 +T 00 00 00 00 +R 00 00 04 00 +T 00 00 00 00 CD 00 00 00 00 +R 00 00 04 00 02 05 00 00 +T 03 00 00 00 +R 00 00 04 00 +T 03 00 00 00 D1 C1 +R 00 00 04 00 +T 05 00 00 00 +R 00 00 04 00 +T 05 00 00 00 F1 ED 39 38 FD E1 2A 00 00 00 00 +R 00 00 04 00 00 0B 01 00 +T 0E 00 00 00 ED 7B 00 00 00 00 7E ED 39 39 23 +R 00 00 04 00 00 06 03 00 +T 17 00 00 00 7E ED 39 3A +R 00 00 04 00 +T 1B 00 00 00 +R 00 00 04 00 +T 1B 00 00 00 E1 F1 FB C9 +R 00 00 04 00 +T 00 00 00 00 +R 00 00 05 00 +T 00 00 00 00 21 00 00 ED 57 E2 00 00 00 00 23 +R 00 00 05 00 02 0A 01 00 +T 09 00 00 00 C3 00 00 00 00 +R 00 00 05 00 02 05 01 00 +T 0C 00 00 00 +R 00 00 05 00 +T 0C 00 00 00 21 00 00 ED 57 E2 00 00 00 00 23 +R 00 00 05 00 02 0A 01 00 +T 15 00 00 00 +R 00 00 05 00 +T 15 00 00 00 F3 C3 00 00 00 00 +R 00 00 05 00 02 06 01 00 +T 19 00 00 00 +R 00 00 05 00 +T 19 00 00 00 7B B2 28 F8 +R 00 00 05 00 +T 1D 00 00 00 +R 00 00 05 00 +T 1D 00 00 00 FB C3 00 00 00 00 +R 00 00 05 00 02 06 01 00 +T 21 00 00 00 +R 00 00 05 00 +T 21 00 00 00 79 4B 42 ED 79 C3 00 00 00 00 +R 00 00 05 00 02 0A 01 00 +T 29 00 00 00 +R 00 00 05 00 +T 29 00 00 00 79 60 4B 42 ED 68 4F 44 C3 +R 00 00 05 00 +T 32 00 00 00 00 00 00 00 +R 00 00 05 00 02 04 01 00 +T 34 00 00 00 +R 00 00 05 00 +T 34 00 00 00 C3 00 00 00 00 +R 00 00 05 00 02 05 01 00 +T 37 00 00 00 +R 00 00 05 00 +T 37 00 00 00 C3 00 00 00 00 +R 00 00 05 00 02 05 01 00 +T 3A 00 00 00 +R 00 00 05 00 +T 3A 00 00 00 2A FC 10 C3 00 00 00 00 +R 00 00 05 00 02 08 01 00 +T 40 00 00 00 +R 00 00 05 00 +T 40 00 00 00 B7 ED 57 E2 48 00 00 00 37 F3 +R 00 00 05 00 00 08 05 00 +T 48 00 00 00 +R 00 00 05 00 +T 48 00 00 00 3E FF ED 39 0E ED 39 0F ED 39 0C +R 00 00 05 00 +T 53 00 00 00 ED 39 0D 3E 11 ED 39 10 D2 +R 00 00 05 00 +T 5C 00 00 00 00 00 00 00 FB C3 00 00 00 00 +R 00 00 05 00 02 04 01 00 02 0A 01 00 +T 62 00 00 00 +R 00 00 05 00 +T 62 00 00 00 B7 ED 57 E2 6A 00 00 00 37 F3 +R 00 00 05 00 00 08 05 00 +T 6A 00 00 00 +R 00 00 05 00 +T 6A 00 00 00 ED 28 0C ED 20 0D D2 00 00 00 00 +R 00 00 05 00 02 0B 01 00 +T 73 00 00 00 FB C3 00 00 00 00 +R 00 00 05 00 02 06 01 00 +T 77 00 00 00 +R 00 00 05 00 +T 77 00 00 00 FD E5 D5 FD E1 97 6F 67 78 3C 41 +R 00 00 05 00 +T 82 00 00 00 04 18 0C +R 00 00 05 00 +T 85 00 00 00 +R 00 00 05 00 +T 85 00 00 00 FD 5E 00 FD 23 FD 56 00 FD 23 ED +R 00 00 05 00 +T 90 00 00 00 5A +R 00 00 05 00 +T 91 00 00 00 +R 00 00 05 00 +T 91 00 00 00 10 F2 3D 20 EF 4F ED 4A ED 4A 7D +R 00 00 05 00 +T 9C 00 00 00 6C 67 FD E1 C3 00 00 00 00 +R 00 00 05 00 02 09 01 00 +T A3 00 00 00 +R 00 00 05 00 +T A3 00 00 00 21 00 00 C3 00 00 00 00 +R 00 00 05 00 02 08 01 00 +T 1F 00 00 00 +R 00 00 04 00 +T 1F 00 00 00 F3 F5 E5 3A FC 10 2A 80 0F ED 29 +R 00 00 04 00 +T 2A 00 00 00 39 ED 21 3A 32 00 00 00 00 ED 73 +R 00 00 04 00 00 09 01 00 +T 33 00 00 00 00 00 00 00 31 02 04 00 00 ED 38 +R 00 00 04 00 00 04 03 00 00 09 03 00 +T 3A 00 00 00 10 ED 38 0D FD E5 ED 38 38 F5 21 +R 00 00 04 00 +T 45 00 00 00 00 00 00 00 3E 00 00 00 00 CD +R 00 00 04 00 02 04 04 00 2B 09 04 00 +T 4A 00 00 00 00 00 00 00 C3 05 00 00 00 +R 00 00 04 00 02 04 00 00 00 09 04 00 +T A9 00 00 00 +R 00 00 05 00 +T A9 00 00 00 EB 46 23 4E 23 7E 23 6E 67 C3 +R 00 00 05 00 +T B3 00 00 00 00 00 00 00 +R 00 00 05 00 02 04 01 00 +T B5 00 00 00 +R 00 00 05 00 +T B5 00 00 00 EB 7E 23 6E 67 C3 00 00 00 00 +R 00 00 05 00 02 0A 01 00 +T BD 00 00 00 +R 00 00 05 00 +T BD 00 00 00 21 07 00 39 EB 1A 77 23 1B 1A 77 +R 00 00 05 00 +T C8 00 00 00 23 1B 1A 77 23 1B 1A 77 23 C3 +R 00 00 05 00 +T D2 00 00 00 00 00 00 00 +R 00 00 05 00 02 04 01 00 +T D4 00 00 00 +R 00 00 05 00 +T D4 00 00 00 EB 70 23 71 23 C3 00 00 00 00 +R 00 00 05 00 02 0A 01 00 +T DC 00 00 00 +R 00 00 05 00 +T DC 00 00 00 21 04 00 39 C5 4B 42 5E 23 56 E1 +R 00 00 05 00 +T E7 00 00 00 18 05 +R 00 00 05 00 +T E9 00 00 00 +R 00 00 05 00 +T E9 00 00 00 7E ED 79 23 1B +R 00 00 05 00 +T EE 00 00 00 +R 00 00 05 00 +T EE 00 00 00 7B B2 20 F7 C3 00 00 00 00 +R 00 00 05 00 02 09 01 00 +T F5 00 00 00 +R 00 00 05 00 +T F5 00 00 00 21 04 00 39 C5 4B 42 5E 23 56 E1 +R 00 00 05 00 +T 00 01 00 00 18 05 +R 00 00 05 00 +T 02 01 00 00 +R 00 00 05 00 +T 02 01 00 00 ED 78 77 23 1B +R 00 00 05 00 +T 07 01 00 00 +R 00 00 05 00 +T 07 01 00 00 7B B2 20 F7 C3 00 00 00 00 +R 00 00 05 00 02 09 01 00 +T 0E 01 00 00 +R 00 00 05 00 +T 0E 01 00 00 7B AA A9 A8 21 03 04 00 00 5F 16 +R 00 00 05 00 00 09 03 00 +T 17 01 00 00 00 19 6E 62 C3 00 00 00 00 +R 00 00 05 00 02 09 01 00 +T 1E 01 00 00 +R 00 00 05 00 +T 1E 01 00 00 C5 06 10 EB +R 00 00 05 00 +T 22 01 00 00 +R 00 00 05 00 +T 22 01 00 00 29 38 02 10 FB +R 00 00 05 00 +T 27 01 00 00 +R 00 00 05 00 +T 27 01 00 00 68 26 00 2B D1 C3 00 00 00 00 +R 00 00 05 00 02 0A 01 00 diff --git a/src/nos/main/auto.mk b/src/nos/main/auto.mk new file mode 100644 index 00000000..35a07b8c --- /dev/null +++ b/src/nos/main/auto.mk @@ -0,0 +1,29 @@ +# auto.mk by Nick for Hytech NOS/UZI project + +# ----------------------------------------------------------------------------- + +SUBDIRS= + +OUTPUTS= net.$(BINEXT) + +net_$(BINEXT)_SOURCES= \ + crt0_kernel.S config.c main.c parm.c session.c version.c \ + clients.$(LIBEXT) dump.$(LIBEXT) filesys.$(LIBEXT) \ + internet.$(LIBEXT) net.$(LIBEXT) ppp.$(LIBEXT) \ + servers.$(LIBEXT) $(ARCH).$(LIBEXT) iar.$(LIBEXT) \ + intl.$(LIBEXT) messages.$(LIBEXT) +#ax25.$(LIBEXT) netrom.$(LIBEXT) + +main_c_MODULES= Badhost Hostname Nospace Cmdpp Display Cmdline main_exit \ + Prompt Kbdfp Logfp StartTime Verbose main keyboard pass \ + passchar dorepeat keychar dodelete dorename doexit dohostname \ + dolog dohelp doattach doparam doescape doremote dopage \ + dostacktest dosysdebug dosystrace dowipe donothing logmsg + +session_c_MODULES= \ + Command Current Lastcurr Notval Badsess Sestypes sessptr \ + dosession go doclose doreset dokick dosfsize newsession \ + freesession dorecord doupload upload keywait sesflush + +# ----------------------------------------------------------------------------- + diff --git a/src/nos/main/config.c b/src/nos/main/config.c new file mode 100644 index 00000000..8095e0d2 --- /dev/null +++ b/src/nos/main/config.c @@ -0,0 +1,1151 @@ +/* A collection of stuff heavily dependent on the configuration info + * in config.h. The idea is that configuration-dependent tables should + * be located here to avoid having to pepper lots of .c files with #ifdefs, + * requiring them to include config.h and be recompiled each time config.h + * is modified. + * + * Copyright 1991 Phil Karn, KA9Q + */ + +#include +#include +/* Nick #include */ +#include "nos/global.h" +#include "nos/config.h" +#include "nos/mbuf.h" +#include "nos/timer.h" +#include "nos/proc.h" +#include "nos/iface.h" +#include "nos/ip.h" +#ifdef IPSEC +#include "nos/ipsec.h" +#include "nos/photuris.h" +#endif +#include "nos/tcp.h" +#include "nos/udp.h" +#include "nos/smtp.h" +#ifdef ARCNET +#include "nos/arcnet.h" +#endif +#include "nos/lapb.h" +#include "nos/ax25.h" +#include "nos/enet.h" +#include "nos/kiss.h" +#include "nos/nr4.h" +#include "nos/nrs.h" +#include "nos/netrom.h" +#include "nos/pktdrvr.h" +#include "nos/ppp.h" +#include "nos/slip.h" +#include "nos/arp.h" +#include "nos/icmp.h" +#include "nos/hardware.h" /***/ +#include "nos/usock.h" +#include "nos/cmdparse.h" +#include "nos/commands.h" +#include "nos/mailbox.h" +#include "nos/ax25mail.h" +#include "nos/nr4mail.h" +#include "nos/tipmail.h" +#include "nos/daemon.h" +#include "nos/bootp.h" +#include "nos/asy.h" +#include "nos/trace.h" +#include "nos/session.h" +#ifdef QTSO +#include "nos/qtso.h" +#endif +#ifdef CDMA_DM +#include "nos/dm.h" +#include "nos/rlp.h" +#endif +#ifdef DMLITE +#include "nos/dmlite.h" +#include "nos/rlp.h" +#endif +#ifdef SPPP +#include "nos/sppp.h" +#endif +#include "nos/dialer.h" +#ifdef KSP +#include "nos/ksp.h" +#endif +#ifdef SOUND +#include "nos/sb.h" +#endif +#ifdef ZILOG +#include +#include +#include +#include "z80/asm.h" +#include "uzi/devio.h" +#include +#include "po/messages.h" +#endif + +int dotest(int argc,char *argv[],void *p); /**/ +static int dostart(int argc,char *argv[],void *p); +static int dostop(int argc,char *argv[],void *p); + +#ifdef AX25 +static void axip(struct iface *iface,struct ax25_cb *axp,uint8 *src, + uint8 *dest,struct mbuf **bp,int mcast); +static void axarp(struct iface *iface,struct ax25_cb *axp,uint8 *src, + uint8 *dest,struct mbuf **bp,int mcast); +static void axnr(struct iface *iface,struct ax25_cb *axp,uint8 *src, + uint8 *dest,struct mbuf **bp,int mcast); +#endif /* AX25 */ + +struct mbuf *Hopper; /* Queue of incoming packets */ +#if 1 /* Nick */ +struct session *Sessions[NSESSIONS]; /* static array rather than callocw */ +#endif +unsigned Nsessions = NSESSIONS; +unsigned Nsock = DEFNSOCK; /* Number of socket entries */ + +/* Free memory threshold, below which things start to happen to conserve + * memory, like garbage collection, source quenching and refusing connects + */ +int32 Memthresh = MTHRESH; + +unsigned Nfiles = DEFNFILES; + +long Sfsize = 1000; /* Default size of session scrollback file */ + +/* Command lookup and branch tables */ +struct cmds Cmds[] = { + /* The "go" command must be first */ + N_(""), go, 0, 0, NULL, +#ifndef AMIGA + N_("!"), doshell, 0, 0, NULL, +#endif +#ifdef AMIGA + N_("amiga"), doamiga, 0, 0, NULL, +#endif +#if (defined(MAC) && defined(APPLETALK)) + N_("applestat"), doatstat, 0, 0, NULL, +#endif +#ifdef ARP /* Nick (defined(AX25) || defined(ETHER) || defined(APPLETALK)) */ + N_("arp"), doarp, 0, 0, NULL, +#endif +#ifdef ASY + N_("ascistat") /*N_("asystat")*/, doasystat, 0, 0, NULL, +#endif + N_("attach"), doattach, 0, 2, + N_("attach "), +#ifdef AX25 + N_("ax25"), doax25, 0, 0, NULL, +#endif +#ifdef BOOTP + N_("bootp"), dobootp, 0, 0, NULL, + N_("bootpd"), bootpdcmd, 0, 0, NULL, +#endif +/* This one is out of alpabetical order to allow abbreviation to N_("c") */ +#ifdef AX25 + N_("connect"), doconnect, 1024, 3, + N_("connect "), +#endif +#if !defined(UNIX) && !defined(AMIGA) + N_("cd"), docd, 0, 0, NULL, +#endif + N_("close"), doclose, 0, 0, NULL, +/* This one is out of alpabetical order to allow abbreviation to N_("d") */ + N_("disconnect"), doclose, 0, 0, NULL, + N_("delete"), dodelete, 0, 2, N_("delete "), + N_("detach"), dodetach, 0, 2, N_("detach "), +#ifdef DIALER + N_("dialer"), dodialer, 0, 2, + N_("dialer [device-dependent args]"), +#endif +#ifndef AMIGA + N_("dir"), dodir, 0, 0, NULL, /* note sequence */ +#endif +#ifdef CDMA_DM + N_("dm"), dodm, 0, 0, NULL, +#endif +#ifdef DMLITE + N_("dmlite"), dodml, 0, 0, NULL, +#endif + N_("domain"), dodomain, 0, 0, NULL, +#ifdef DRSI + N_("drsistat"), dodrstat, 0, 0, NULL, +#endif +#ifdef EAGLE + N_("eaglestat"), doegstat, 0, 0, NULL, +#endif +#ifdef CLIENTS /* Nick */ + N_("echo"), doecho, 0, 0, NULL, +#endif +#ifdef CLIENTS /* Nick */ + N_("eol"), doeol, 0, 0, NULL, +#endif +#if !defined(MSDOS) + N_("escape"), doescape, 0, 0, NULL, +#endif + N_("exit"), doexit, 0, 0, NULL, +#ifdef QFAX + N_("fax"), dofax, 4096, 2, N_("fax "), +#endif + N_("files"), dofiles, 0, 0, NULL, +#ifdef CLIENTS /* Nick */ + N_("finger"), dofinger, 1024, 2, N_("finger name@host"), +#endif +#ifdef CLIENTS /* Nick */ + N_("ftp"), doftp, 2048, 2, N_("ftp

    "), +#endif +#ifdef HAPN + N_("hapnstat"), dohapnstat, 0, 0, NULL, +#endif + N_("help"), dohelp, 0, 0, NULL, +#ifdef HOPCHECK + N_("hop"), dohop, 0, 0, NULL, +#endif + N_("hostname"), dohostname, 0, 0, NULL, +#ifdef HS + N_("hs"), dohs, 0, 0, NULL, +#endif + N_("icmp"), doicmp, 0, 0, NULL, + N_("ifconfig"), doifconfig, 0, 0, NULL, + N_("ip"), doip, 0, 0, NULL, +#if defined(MSDOS) && !defined(CPU386) + N_("isat"), doisat, 0, 0, NULL, +#endif + N_("kick"), dokick, 0, 0, NULL, +#ifdef KSP + N_("ksp"), doksp, 0, 0, NULL, +#endif + N_("log"), dolog, 0, 0, NULL, +#ifdef LTERM + N_("lterm"), dolterm, 512, 3, N_("lterm
    []"), +#endif +#ifdef MAILBOX + N_("mbox"), dombox, 0, 0, NULL, +#endif +#if defined(MSDOS) || defined(ZILOG) /*ndef UNIX*/ + N_("memory"), domem, 0, 0, NULL, +#endif + N_("mkdir"), domkd, 0, 2, N_("mkdir "), + N_("more"), doview, 0, 2, N_("more "), +#ifdef NETROM + N_("netrom"), donetrom, 0, 0, NULL, +#endif /* NETROM */ +#ifdef NNTP + N_("nntp"), donntp, 0, 0, NULL, +#endif /* NNTP */ +#ifdef NRS + N_("nrstat"), donrstat, 0, 0, NULL, +#endif /* NRS */ + N_("page"), dopage, 0, 2, N_("page [args...]"), + N_("param"), doparam, 0, 2, N_("param "), + N_("ping"), doping, 512, 2, + N_("ping [ [ [incflag]]]"), +#ifdef PI + N_("pistatus"), dopistat, 0, 0, NULL, +#endif +#ifdef POP + N_("pop"), dopop, 0, 0, NULL, +#endif +#ifdef PPP + N_("ppp"), doppp_commands, 0, 0, NULL, +#endif + N_("ps"), ps, 0, 0, NULL, +#if !defined(UNIX) && !defined(AMIGA) + N_("pwd"), docd, 0, 0, NULL, +#endif +#ifdef QTSO + N_("qtso"), doqtso, 0, 0, NULL, +#endif + N_("record"), dorecord, 0, 0, NULL, + N_("remote"), doremote, 0, 3, N_("remote [-p port] [-k key] [-a kickaddr]
    exit|reset|kick"), + N_("rename"), dorename, 0, 3, N_("rename "), + N_("repeat"), dorepeat, 1024, 3, N_("repeat [args...]"), + N_("reset"), doreset, 0, 0, NULL, +#ifdef RIP + N_("rip"), dorip, 0, 0, NULL, +#endif + N_("rmdir"), dormd, 0, 2, N_("rmdir "), + N_("route"), doroute, 0, 0, NULL, + N_("session"), dosession, 0, 0, NULL, +#ifdef IPSEC + N_("secure"), dosec, 0, 0, N_("secure [[add|delete] ]"), +#endif + N_("scrollback"), dosfsize, 0, 0, NULL, +#ifdef ESCC + N_("esccstat"), doesccstat, 0, 0, NULL, +#endif +#if !defined(AMIGA) + N_("shell"), doshell, 0, 0, NULL, +#endif +#if defined(SMTP) + N_("smtp"), dosmtp, 0, 0, NULL, +#endif + N_("socket"), dosock, 0, 0, NULL, +#ifdef SOUND + N_("sound"), dosound, 0, 2, + N_("sound attach|detach|listen ..."), +#endif + N_("stacktest"), dostacktest, 0, 1, N_("stacktest [on|off]"), +#ifdef SERVERS + N_("start"), dostart, 0, 2, N_("start "), + N_("stop"), dostop, 0, 2, N_("stop "), +#endif + N_("sysdebug"), dosysdebug, 0, 1, N_("sysdebug [on|off]"), + N_("systrace"), dosystrace, 0, 1, N_("systrace [on|off]"), + N_("tcp"), dotcp, 0, 0, NULL, +#ifdef CLIENTS /* Nick */ + N_("telnet"), dotelnet, 1024, 2, N_("telnet
    "), +#endif +#if 0 /*ndef notdef*/ + N_("test"), dotest, 1024, 0, NULL, +#endif +#ifdef MAILBOX /* Nick */ + N_("tip"), dotip, 256, 2, N_("tip "), +#endif +#ifdef CLIENTS /* Nick */ + N_("topt"), dotopt, 0, 0, NULL, +#endif +#ifdef TRACE + N_("trace"), dotrace, 512, 0, NULL, +#endif + N_("udp"), doudp, 0, 0, NULL, + N_("upload"), doupload, 0, 0, NULL, + N_("view"), doview, 0, 2, N_("view "), +#ifdef MSDOS + N_("watch"), doswatch, 0, 0, NULL, +#endif + N_("wipe"), dowipe, 0, 0, NULL, + N_("?"), dohelp, 0, 0, NULL, + NULL, NULL, 0, 0, + N_("Unknown command; type \"?\" for list") +}; + +/* List of supported hardware devices */ +struct cmds Attab[] = { +#ifdef ASY + /* Ordinary PC asynchronous adaptor */ +#ifndef AMIGA + N_("asci") /*N_("asy")*/, asy_attach, 0, 8, + N_("attach asci
    slip|vjslip|ax25ui|ax25i|nrs|ppp
    ax25ui|ax25i
    ax25ui|ax25i
    ax25ui|ax25i

    &=Zx{ME%HCHX({ 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 QB{(dZ>FL{tZ)Icu58s;>e*gdg diff --git a/src/mkfont/bmp2txt.obj b/src/mkfont/bmp2txt.obj index 65c611b8aecefd22b6b4e33f8659784537179d41..4fbee18dd729d0468d601bcac8e20e73143d5b56 100644 GIT binary patch delta 3686 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 R-<6r3AJ&N{$KxtN>_2;%H4gv) delta 4362 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 TT(+vR&b(?}`Rz63cXR&-_Mmk= delta 14531 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 bi;yTI_P=y8RV<0SNR%}x|LI{mS;qeXwU7pK diff --git a/src/mkfont/chs2cmd.obj b/src/mkfont/chs2cmd.obj index 84d71254f272f1d9b7b147fa8a0b2a62cc1735b0..a8a748248f9340d1051f41b1a0bac561b9c259ca 100644 GIT binary patch delta 930 zcmZ8fT}TvB6h3!mcVNsdbKP}K+-Y6cO>}?UpBYzk*VRm-%#gIOAF^Cc5HVS>=*cL- z{$x8)ktFyS^g~S0gAbu%MD&nEnLdOC71B%eRAA7#vl7&SbMJS)@7{CIoHIYKuutR6 zvX2!)m1%F{r3!E-V<~3$GZk*R(*v+B0<>p3-17AbfYmC1+{~!Lu4bmaa$XR?LmtR1 zDpHcbWDqwCPKzA?9#P0`0bNXymiVb^Lv#??R1I*1JcVaS93ixr6{946rf^#bpb=-8 z!cO2v<~2`JETctm%Ozoeaq?x135xJLj9o%GE5%X4Ywm~u%;N*WowG!U+t&!L2u|r2 zh4CnV-C9pGVW=se+DNg*`C=QF|l9gI;LB%Q2De*KnRh$!h^D9B70HCa; z_UNf|eIxyY7&e_0W2&m(HuX5RSU}ACkPjfWHn$#3w&<1;yQD|lP15fFl)IFKr`iP5 z8z=|1G61W=*)~uP)Cp9j!6i7-A6954Hi2J!)wUZ%ORz??LZ|@3G@^`N<*#IHLO&en zl03)e^GLa5s5@xANG^eo*6a<9kQ4o?i#hPT+9vb1P!g!aH|n6>4|Z_fYfkJT#?|-t zdk<(1_5)9AK0$KhEiKME@txMjaEdhUT|3HfNYq-C`r;HKeXZWyrJ4x^9PIns!z=p3I ziVL3eYh*U^EL<0GHdcVvq&QE+n|w=3XQgocHSz;w0yJpZ7T@=e)mPO67&Q)(u4wSw2h;ye!+cs*E} zO`uh`R}9H9bx60*F~1f>%O@*9bx&q(dVNQCPMuj|mn{Fw>hH!5Nx4Q9c%6B0eU2Hy z$N&~-TFo3YLPP)<)wCFAYRRYQ*eFi;Lkq8xEWtF%E@CzaivU;Ds=!LdM%8f34oSR} zGvW5I)3tGc5@3qM*;kfbFD*naklSDd;dva7)@|${meaHz!lN47O?Zx6f;?fR%P=tj zY6T4H3H87aSb{dfg>Zn-4%xo^0J2CEevGa&43fmt4`8!=sJ4m1dU{>eq%6)S@PX{W zH?m)ta^VlTo%N!kY+xZguc&M%w#Bl#*0>VHGqF}8att5GwsI0eYy1P-jNjtZYz8M2 z)9fNXZ+p%9)saD7JcdiEAiB^~vAb=9=| zJKHBc0CbiRDDEFD(0Cc|C;h<^F`g5qx4`d#;`{oJ^=XW6nD)l#YiRaexzT{8l*9aQ ziXDF@>upv11jzV*;7#Z?iCEL_z)Z^8!rubb9V}|2L}()~K%h`jcz;cyR{`(@(}_B^ z2**;%M1jgaqIx1Mqjm5)cjkA=~mK3vB?pvao% e!heSm^;Y_=V9KsZ<<@7iDeXG1WMv%eIQ|DJAI+lx diff --git a/src/mkfont/hfmdump.exe b/src/mkfont/hfmdump.exe index 0931428d9f9407fedea82810c9989faa6d56820a..35af075658ed9c08ebc0e2838e8920bb0f708f45 100644 GIT binary patch delta 17829 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 delta 13075 zcmdUWe|S?x_V>L>N<&FWp$!yBX$vV73X(QIn&c);fEEf;O({(&lmaVisJOC_@I#9! zhHAqlie6USebJ>B6_r)AC>0P|TA?bdsGzK%R$<+XsalnV0+suIX3_%g?)Q1$_s_S_ zb7tnAIp@roGiT16nZO$zidQ=1o9%4Jr2`r3KYTgwVk% z&Ht;mmzT&RGH&`yW0*y^tXQ(xx0qpG?2nG^fao|QWy5n7Q}MYQkk(tH>icssO!F;E zqpVAyEdzBZ>v2Z7Pc}@wMhO%&qqq*HajR@;{NsA%6A3S~`-EKy+JOBth``_Z_fZ7b zDPz^Oe?{wP4Cw$L!xyOdLS?bIZxH(16b*Xd`BD`>MdcQs@5LDju1LifC(IU~=*3wG zj_@WGi$7nJB*L5dp^FJRNXe`l>Rq$X#R$^}jT$rI6M`lsvo6WI9cb}FR7w-kAW{`c z@}Ao#JT_>G99jt{28|oJ>+dec@a|oFVZTt(ab80|oA2VMDEWA_g%N{oa#GJ7oRUHM zn=k4r_A2%Ze;&M+-7h31&KTH7e}>Wv_au%$$0Ld3 z>DYS`ZQ1*w--BvmjpSaDzS|*&izlY>=kuj!3`7+LUvw^{s?B`gC8Q>4v=cCEzTga1 zT6UcV1o}^0f;%ZSjwL)6}*Nl=4^54m0o?xr`uac zNVZWDRk)}d)1qYIf(vdjgOaMKW^IJd7ZnA~z9Gv+$;l*yq#=vFgy52j=#a^mcJqoq z!ibpO)0d;;ftpVW6CBpKo2QGw6pQ!ubyF5B3~Wd#$=VP~w>ST7NPe11)_OO+-T1|j z{p?U;2F91d7bx9c`#~4uU495uxx%Z-LuD)G2<^!uWfijpG1)%gdS}x>VbZXnfvl)` z8;FFUgUazoA`zA$w6n!GIh-$5&i4AQ zYjZYUPz={qQYv3^eU$k#1SQD3!Mvcgl!(k({{!^?rWg=ytl`@moe@c0g z)&(P*9GGE5)wGFJF-^N+6aF7`7TzsDk);*irn6MS1&R1n?>5p=gwVI6zhFzv&LFJm zO}j}oys3#)iA~LNpGIo~xrq$p_EgElRfDi6WZtyxE>xlyU%@tQ{c*B>@pWx3rnb3S!L?M& z_!iz+dkT7a#H)jQd2NK3^=hNM6QaD8tsdT|Q`TPe={#at66RLh?D569#Z{zTUfEj3 zNG8>WuUw3z(Xo@6%2uI9XED`fV8o;Qh|z=R6)RN14!OKt($#L)flwEI3f-GgYe~Hu zxHAAo_+FRE)(Jy0GEmwxhUtiu@C+t^Y8hY&paL)lFbj|munTK5W+c(!BqDV?U>Be{ zL-;gf$=tND&_lZPcZ_v>3>DU=)#a#GSwyQ$bb*2pZ?>R47f=J(I88qKqq^zx+gi@c zZVz5ou6Xm;U!Locbbm|}o)|L@8O?z)**d}nB~O6<4B#A~6L10015luQs4!^kjKrue zdVE^|g@6j--mx>~+Rt6WzOfSnXHyxhPr3g~Lvz&VoM{V|Z1n(-7z<;QE^X~azr2dA z3?5MjzwPo6+eb~GNllL^<0+H;O7S)rp6?15B)BENiXdVY41=2Q_K1hjhqIVJy0CIV zYd!M|e4q+PT&1uhGhrF|tWvl|Q#w|+;Q*GE44V$G51B}xsQpccvTC^aDGO4=yG?qy zDz70dA;q9zb6T)P;n)o?ul~;P@mns^d6@sXr8_40Z7Q#*P5aU%q>URo0{H3^m965) zQOFw|37^9ad@<+KF-og2XWZ6)a7J&!Y~iPIBaC{?(eUxc6CsUA{J9-xFWf5>e-2+Q zUn}MBh2lF%Q%q<$gSv_lUyK)A)sam1OE9RKvd|=cFoBaLz5JgAV5lujKoOiaOlIqK+7(yp_LGl>8lH zA~`o4ZQzpmV#KYP7}!^-Q;0{=@)C6=4Y3IrZcweDR3Lg5jq+Y9BeW%_Mlm8|xR70c znPiu%RU{g@81-JodVQjvWuek7Z?UaHr816hUT-)@kB)KKcv3CTY-p95!p4XSN ziC81a-^QN`w(2E+Gh*P2I-xY@d)aNHg?z(3BmX)P>P&Dk&j7vyq~m)Wpc3%YMB#6S zbau4xqv56WU0891SebO(o4g0kq6_EDj{Y@%)1jTa}W=4%0&& z3#wqXPQ{e)6}qI5BMBsRDa1ql_WGSssiXM#9cX#Nf9T=5RwVNMq9X-=P;e$fvhw>% zuWm1f(Y}FEu{c;~+M3EOr-()6Kpp0xI@!^YfVMMMroygFFGvpvbB15tYx*|!z4Dx|H4tj;Txk9<2 zxr(vo>y%#NF6u4KFxD(OLIVj#K8^SyMBqSH_eG~d^dhLi0b5H9r>!Z~AS>l3lJnxh z{Q4R?P2S;Vg>%-701ap-gGZ94a+I+8gN2oni4a{6cPDQaykLH7J&BX8e7;WM=$13g zDmfjjfnevhdR;Kzbyf|Dl(o$bM4q2*4Q8xCg9&C3m2mns_(q^{G-eS>Ob+bzq$jMZ zA!-Udrwb&J>s*nt#KTWc;D65ggNmQm6Fl5g*7Adz|A4>0XX(2N8N=KfTGtca#O7n{ z(1Hu0qAp&Qc(H{I6?OXqEteHl&KV0sMJn#YRr1g}6+bIc!Ocok`U`O_3|>xKsXc_T zYd-lgJd0Ia`YgSAcmB2h{w$1|ZVg0q!IqBRevtQ)9N66k7EtvgRBIIwspP8@6(QPG zpsAEE=nkz_LL2^Si=?2q%AKZvT|+uf)B z$LU*sqkb_igAl3YXDC85qiqF0Lm8T>hPXlqey5dk5_yQ~_oGas?25E3|=X-rvH*t_5A8;h~De9!aULy#m4Y#JOsl)f>Jd zdd4ru7jg5+IIh(4Le+kz24RSCAp#dmpGEsAORstQyOs2_m(!IH+)>vSfT*Zo-j#5z zaB7sIFrjAcR9GdrNO6r~f@_qLe_09qez{8ejH0CF2{*O@*?ZKrc@5bLVMR?#hm3Eh zgjwz3S%W%@!+48ui;)zlUZBMJC&iPkVCQ1UtX9c`ViF%ucti0%lo2_o8c0{jL?*hh za{jx~YfsXRafGvZljWcm#yT5F-S{`>cWi(#`3J-6IBFt)Z11iFCZr5cQBYA)A@O8m zdddtE*W%ZQ^FwZEjl-I#QPvj}=3;8xQQzWVbQjaD-pftsyls=Q)0LQUlp);DxL!h7 z5bRTuC(fa~p=m0AlC&z}x=3OzTylm6Z&OO4ywHORDF(I>)=ya|o5MDKGv#UdpuVMU z#q!Vv6E;sv3XsMAzg*b=hjpD5bdaTBADsGsSktBd!=e^y5cB$0wAb2XvDSCm5wNJS zN<3vzr|31Wq^ZDMaEd5{?b7+T5#sn1Vorl(CCUh!rfX#ttnkwGN>q(;g=1uLf;P;& zbvQpur>IZE$rg$yWh-sdQuxPgoqPXRlEinFBNtFsjSwIBMv}@yCgg_*!xb1H4TcFn zOwu2&Yvu5oyA(`tpmbzfOk6#o2_8|#kiN(_xE&$g)huI$@{&oZgmc~OLpqRnNxztd zQIN~}EI}ewc%dXKp3qe9kM!eB1oKtNNRu}@#gY6`{zG!we%+g@Vt=&r147D;MND0x zVtPTaRl!}W-e)*XbP#gp=n|HYh3*bYl5c34r17%CU2`S{$N-XN5xS6T&kwfcw|Wi| zrD>jkJJidcBe5LAln0L})?Z5_+We!k6$gt?rz%sw>eD3!uXXTWu8#jr)^Cu2T|J&l zp_haB5;6T}*sr_1R`O?gs+4`Z0Owo)8UZ^h=)e^NdG#=lxEHAwu|iVhEyRX0@$b0& zkrxwO2IjZI!@E6YRdRz=X{Fgd4(9{VidXE$x=*_3QU!hSZt+*b(=C>LyD9*6hiT&%@-j>Y3 zdWfKOj>m37Jxox898VBbTy)5dKuJ^+tjH(uXQD@WWkeZVq-2VLA;FSN5}PT~pIp*3 zW0%8E<}YaF=jarCd>ZJjn(dgIr-_t4GGEMgdz&zMZc>1txR#X)Yl066c{Hoqj-~RH z`D4WAu)BE^x!@S2js0w`zQJ|}7Rw`w=driKzJ6>(3@hHol@Kpo4P`G-S{qCWw~FVg;JbyMtHb`EW2_8vPO}JVkCBbf)e-?L@EdK^pxV<8E`bL#m05~~NX6Y57GV7ee6fn3 zt+FCXi=l65ttG|#GvQ>BINA_aFSw{9_ts!H>x)P7K0fH!gR3U%PxtmQhweN4OJ35oK=iMD!y-y0_5oR$!zz?NB;O#+!D>=6Xd)?qw0dBA%_5tpnO!7@3xX-&+u^*wUv_E zYD%xI0{r2Y4mnpxy8N+x4H+KMmu!YA$$JU|;>`o^UG=aV<6aWNT^OTxCS##PcZ&5! z_@Ci4d@?VLCkZ?UdAujU1HXET+SR9klcbP7kM}s~z!usp(i5i=OTUkLfnl$ChIv9ZF4#aT&& z0n`{d$?bs$lbHzf7LOcCPS6$PI>)yMJ5pON$MC8!IdUIcJX8*ag%=l(wzR@|!Ud`- z*6mG0S|XWFt#vH*iGU1!UtKd;ND7R(lAcRoVMOGN42p4WA<~ zUa=nWS(Py7j!gCoVci{C6*;w$1K`p6sW#!cJI1qTgyVPQ1jxm>sROIWDSc_!3{xD1 zN6BUgUQS$*61=Qiog5uE9^vDwF(CaAs9kA zaHB2ZXcputTe*^N=euA6JfMZ`#0rcHJC0Xh%+FS^K95_Rgki|ROwK(b1CGo@ZYK}M z$oqXdEmm|JjDk0ntJKDL9cWpi8*<}zPdQ*8k_-qB=<-bS5N!X;D{e4Fct6a>`D)Z)8Rf6NSh2RW$dD} z|Mj=XofO&QSJMzj$%T~VE*r56tkElPZ`0V~BK|KUI6$H?W>yfru#~7!n2h z0LLMuHSS(9kQF}gW)HnKRO$clA4wsRxPn z9`SdFqxUESy-hM{Vb$A&(&sabB^$eJC0^(MEm+f79kgdlelyL3KJe-0HIWI&hO~M^ z^ZegFwB88CG>`Cb^tM{Ivh=2hU^{sTW{BKa`H_n*#EsmbMe^lP@w5DCZ%u66=czN;3ZtEZQlct5{wXKSZOPd#Bu|EfZTw8*%dhOp6rL5*JmE7ZEzY zFB7xS&CAPcmgp5s?f1U^rQ-WtV2Eh`-9o}YR;TO6AHZH(f0ydgRYb>7ztA*gXquw3 zH&080Z<61p#;-}4?uD=UrRc{`Ze2HU&?UPatvfAgDF;qnegAwA?_;I$Ca`C7Ga z7Imwtm~y;CYHs9Pp?Ko|=kp*Y*nO{`{F@FF+HP@0r(mhxs_JE@UMZZecF8V8gp_r* zn|ICPb$5Oet8ZeVFTK#$I~K_gLn#Z=TvN=C>l^mNPo17Ax|*KeuV++M+UzAC&m;f!z#EIA}AcE zQ@!-%h>MrLye)W5>RUOIpGOyzCRRw7{mK$?C%DPu*pY>i-unZ|sF5F&r)~0UlczUs z&il8x8J^Rk*f^_2A?#dl&FahMBfXh@pNv*1gE)hfLF_MO5Y-w7J=8L~@$(nQ_iJpH zITaIQd;f(c&Uxk*0R8J?7^IktEiL+qyg<^8$3snH_U>2ZjR|{tWc{8gburJD3WN7f zNsL?SVg>>T*+JBYm%18Xlbsw8J0cS)`0vO^yj3CKo8IYlz9B7hs<0_Xu+Ku{(C$IKjkE#Nd?=Ox<^l=Ca-Ke|V^3y5+*b3(p7gkxG!OS2F7Us5_r?Q46=DCS==C4??{RHJ(11Lez<< zwW!IqI=92c3`2bY^>EZ1P>(=83$+%t4)q$;NvPMNR-nEg^#$0a2i;5;8YI2#Kz-km z{|b%ji|KKRnKX3*B_YP+82-uZW?)HU7o8!?@G9%Xrdw)u=IPO=%{bDbqB;q&FE&7SltfI@2c8 zX44ka6;q5k%{Zf5R;+|{}J za=*wuo2#{$E%}z&mIanSSXNtVEst9MVrjA*4OptI_gObtpS137Tc<9kJz@`UbW5TmT>oR4{~+fJo{36!2YUZY2HfbKIduY&rZ0Q9=?t0 zZv7;K!H{d<3{JyT!*s)~hG9mXah%a$v>16z@)_eR#y!UU#&?Wg8oxD0jDbtW9^+tB zvT3?$k!i5`R`VS5Li1|#Ci7l%i}?fdN%MobwYg8`Zp+=3+lZMQ&OM*|uUsiN)}pp( zEGZU)Ws0THa=T@&WufJ6%e|I0mKw{4wl8dFZNJ)N+#qf!Hsr`ZFCr?8cU3K z7?&C!Fb0j!8fB*Ox$AO+xuM+0a^KJWDEG%)g~epCTZ%1#fF)#k$#TeY#v->4vQDuU zT0K~h?basiLF;>12!$=vX0lDTU9w%X<#T`J>bXYlE$$fi1@|5IE0`nF$?BCdbvX6Ec9IG4;IW{@AJ6>_@cQiYWIMVYn^Oonmk@uAI zHRrbh=MPTC%`llP!zlGhdY%3beWU(}UXiWKzBBuSY%%+%?DIL@IdKNP!GYEE7?v6~ z8~$SW+VC$!qA}IT8QsRajQ3)mb;ds$pEka1+-*E&{0eK^ZDdRdrgS*(EYmX6VbclI z1(VV|$~@g%jwQa&yf^ny?l4PWwB;eoBbF_e=Pj>W_F9fvPFY0Dua*(k9IMlMr*#?Z zaNPPCobsGiw02rGHqKURtFSGyEwOoR%WTVSKHD1GVOzWHnC-ajgw4hkaErLRxng$2Q0Fjz-5@j!*Nt@_x;W zbEY`QI`z)qIhQ*hayB?$biU_2;rz;Z&e=)4d=bOUfu$7sVfs{kmOe-C&@a^Aqxb7; z^c(eC^nccWq5r48Q~#6xqF$Y?$=;B?F?(nBTiM65zs{Dj<8y}RjL*3>rz~e_&gz`n zoX2vW%n7`Z^G43WoVJ|fIVW?z%K0|uhnx#JS92J{Aj3q%{l=p(;&9U_(_ENvovFdp zXxeA`&~(;x)s$kMh}~ZZV=gnVG(T_NZT`l5-aH_8Os)ft7S3&gc^ONLMQ6#j75Ee~57Ec-2|Ee7ihYc*`zKVX|}n`^6tIjdmIRkmu|L$*5GqqZ%!KV#QFZ`);i z-PU9~Xlt{*2Lpd`$|q?KpTrH$ku0pD}lsNrcnq8gt42;K1)djLMK; zNHgo579z75hw)a;SoY31yD1+&ILB0B+WP2NcDSnDbj)-d{&>oC#)OpSn(|3KtBfQ0 PlMH-QZCi)wS?&J@mYFaF diff --git a/src/mkfont/hfmdump.obj b/src/mkfont/hfmdump.obj index 73ffffbf2eea99e5bbabf52f253dc8cae0d0c5f1..1df287f3eef3436c6f3828093730aae10fe21e01 100644 GIT binary patch delta 695 zcmZ9}O=}ZD9LMqBY#wkYebAD`q#G%DphAo7rnA}2mTEz*mDYox1rO_?O=&68R@AoI zOJ0D7vP=&>sNl_>Jj6={MLdY2;2RJR9z>*2)QjN7f5s`q90opocV>2X=IPkWG4m3O zqcb`^{wXxinLANnfB~<=nQ8M)97uNpxp23SO@;4@F$cht@W<(%L6}6KG&vg7?k#RC ztw^8EMSRz7JYpxJ^@sE!pQWB(JUpmiZF4EOeXABM-&j~(xf86{Tzlx|{M=9Z zA$`h-7v-Py8Mf0HJ)UALCogAaQo^p_8SN3H5kcw7WLelkKF{PM!Y<3tnG1&R%KmJ< z_=S$Bd75-D%}Esx+jN&L%PNk1o26xrFZZ+glyJ)UO|x5O2u~Jz!^*23wawv9RR;n6 zR?EDqK(eij$Zx#`qgs|7R$&XY!26Gz8 HoMrq4Dcx%n delta 680 zcmZ9}O-K}B9LMqBGy8(`Y_=JW?(QUuyGw>_GV_cxj-pm97+E(pLIwg?f{0YK7wEE= zpsvFc9lUw)5FLUxf)J`hhdgu)4<0&n@t_A!MuGJ2>4`ND4}AE}^UOT_=l$rbQS%y0 zWA6XTU~0bJhHi2D0sd6~8F5TD)0KRROHU`(v33Od`-z8<7{;T*3{) z<~r+1Hl9=Lq?N&{7RL^$Pqkewj-mkss+F}kUXvWv-fD4tB6Xbap7L{pdL5_OY?JbyX(BMQF|9LK-2>aP2=BoER-5?v2rw(Xyp+1dW=nzpW>mGs9%mo;6}EYiq-XpV~# zo$9c??2-o$5(ovxh8cM3kl49HLV?i1n~=~=qTf89nB&4cKJ%IHd-L}9ezW~jnVM1D zO^OpoavP(`jJwX=bqctl085#hjqZLga9jskG7Du&cV^9#rvj+T{O&ETf}0TV#Lp&D zW4)t&{XC^~=7e=UyQ-AAt{SR(3~q9~{(wigs3e8~qAKAAB{7(^KfiEOk{C|r0ETeYk{FhWqClEnyt0d6 z@aF>cBB)7Xm?gR_+?*tau{^4%aHb@NcTS*Pxc8D6a$Ue3;qoOhv=a>o*FluFkYSo| zLdd6*7@iY77A_-+VUB1_xOqtoS)x(lK1yQvLNqMgS4j-(M1#Wpl*Di%kPl1?Ss{sb zNK`6Zha`sE)EZWI6reks^sW`1@uCFf3$bV|$@1R4hDi*M_az1&r4kSB_YCw8B}P)Z z&-<{uYnxw*oOU=p+>AsDt$wVgX*>7c^zqfmxYELFqqiJ}kH3!AJ3>MJD_Y?Q`M9g5 z)uH=&XU(MYmv7XVN-0lXG?iukgT^i1R%v3w+K$y-Bbk1~1V>Htpo!-9Dd0uR?c!{Q3hq5;{sPmavd5#fO`KQ=qdV?NY1>1Y9 zsZ^r_D{H}LWaP@$H=+gbhg!ngfm6O+^FOg=eAu#O)bPZ?jA~%B)gB5B*+M!t>>2H@ zEu&(6KVxmt2=b%xbX&;<3X0!uk@V0C-ThxAU9&#P119*^Zv68$qlNiqd_+-svZ2|b K2eXR}pOt@6-M{4k delta 1179 zcmZXTTSyd97{~u-*Gqd8#3+L@MAwSUmf3Z8XGUz-GB1#^Mn;<#!pyvsDPA^OUAH2F zN{Hp;gAct)kQgRgZ-G!R`O-s>;9JmxK~N-EPeI=tPnqMw4!`-G|D5^w&NsKG*xF;} zYGhex`Ir%oq+B(w)+0bO1LjlbPPw{0Kz~DWVFA3Z;uG z;5H#(Ud_hdSH(uU;9rKGGKJ3~HXi%a=rZ z=&0jMk(dmHa;*WhrtJQ$z7nwlFpnQHSOegVhu4 zm-t?tV7o>C@dR5CU+KCkdQT+SVX;cri=wM0!5)dvbX^x6ClkSkRU2&vO3&8QchR-=n&isV#QudO*CZok*_Gvel@+%VvOjvt?(~ zKS@UIY<(MM1=eW*tO~N!+fCnHTgHoT_KY^ZHDj1qjoLznF=7kp_+-xndu*8iRyH$K zqT%z4{q@O~ykiuUKiM`zGhWl(e@!y9;7hyl&)JP{#%?t6vp&YkMSnw+L-VH>8{V)# D%!0Yp diff --git a/src/mkfont/hfmtool.cpp b/src/mkfont/hfmtool.cpp index f48c59de..28f5bbdd 100644 --- a/src/mkfont/hfmtool.cpp +++ b/src/mkfont/hfmtool.cpp @@ -13,7 +13,7 @@ #define DEBUG 0 #endif -#include "hymb.h" +#include "hymem.h" #include "hyfs.h" #include "hyfile.h" #include "hylist.h" diff --git a/src/mkfont/hfmtool.exe b/src/mkfont/hfmtool.exe index eeb09e3ed608cd4ab10c38d2a52d69845e70fc95..d1a60198eaada04b5ee32540fe74d1083274a335 100644 GIT binary patch delta 32594 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 VLH^Rv{M@{y1qF*nEzX$}_&;@QgXRDL delta 26761 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

    HZzKbL5lL@uYy} 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